<?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>122295</bug_id>
          
          <creation_ts>2013-10-03 12:40:53 -0700</creation_ts>
          <short_desc>Web Inspector: Remove the old front-end from WebKit</short_desc>
          <delta_ts>2013-10-10 18:07:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>118676</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Marcelo Morais">m.morais</reporter>
          <assigned_to name="Marcelo Morais">m.morais</assigned_to>
          <cc>afonso.costa</cc>
    
    <cc>andre.vl</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>jrogers</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>syoichi</cc>
    
    <cc>timothy</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>935922</commentid>
    <comment_count>0</comment_count>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-03 12:40:53 -0700</bug_when>
    <thetext>Now that efl/gtk/mac/win use the new inspector, the code of the old inspector is no longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935923</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-10-03 12:41:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/15144447&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937669</commentid>
    <comment_count>2</comment_count>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-08 13:55:49 -0700</bug_when>
    <thetext>Hello,

I am removing the old front-end and I am also checking where we have references to it.

In Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters and Source/WebCore/WebCore.vcxproj/WebCore.vcxproj we still have the reference to files from the old inspector, can I remove them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937676</commentid>
    <comment_count>3</comment_count>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-08 14:04:32 -0700</bug_when>
    <thetext>In Source/WebCore/WebCore.xcodeproj/project.pbxproj we have references to files from the old front-end too, can I remove them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937688</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-10-08 14:47:46 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; In Source/WebCore/WebCore.xcodeproj/project.pbxproj we have references to files from the old front-end too, can I remove them?

Yes, those should be removed too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938436</commentid>
    <comment_count>5</comment_count>
      <attachid>213904</attachid>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-10 11:23:29 -0700</bug_when>
    <thetext>Created attachment 213904
Patch - Part 1/3 

This first patch is just to skip old inspector UI tests for all platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938438</commentid>
    <comment_count>6</comment_count>
      <attachid>213905</attachid>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-10 11:25:00 -0700</bug_when>
    <thetext>Created attachment 213905
Patch - Part 2/3 

First part of the remotion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938439</commentid>
    <comment_count>7</comment_count>
      <attachid>213906</attachid>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-10 11:26:25 -0700</bug_when>
    <thetext>Created attachment 213906
Patch - Part 3/3 

Second part of the remotion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938450</commentid>
    <comment_count>8</comment_count>
      <attachid>213905</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-10-10 11:48:46 -0700</bug_when>
    <thetext>Comment on attachment 213905
Patch - Part 2/3 

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Due to patch size limits, the remotion of the front-end will be done in two parts.

remotion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938452</commentid>
    <comment_count>9</comment_count>
      <attachid>213905</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-10 11:53:07 -0700</bug_when>
    <thetext>Comment on attachment 213905
Patch - Part 2/3 

Attachment 213905 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/3876051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938455</commentid>
    <comment_count>10</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-10-10 11:54:15 -0700</bug_when>
    <thetext>Please land part 2 and 3 as one commit. Part 1 is fine to land separately and first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938458</commentid>
    <comment_count>11</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-10-10 11:57:06 -0700</bug_when>
    <thetext>Looks like the build failure is expected since the patch was split into two parts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938465</commentid>
    <comment_count>12</comment_count>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-10 12:05:21 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Looks like the build failure is expected since the patch was split into two parts.

Hi Timothy, thanks for the review :)

I&apos;ve tried, but as one patch, exceeds the patch&apos;s size limit.

What can I do to solve this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938475</commentid>
    <comment_count>13</comment_count>
      <attachid>213905</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-10 12:10:41 -0700</bug_when>
    <thetext>Comment on attachment 213905
Patch - Part 2/3 

Attachment 213905 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/3876056</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938482</commentid>
    <comment_count>14</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-10-10 12:23:47 -0700</bug_when>
    <thetext>Someone with commit access will need to do it. I can do it for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938486</commentid>
    <comment_count>15</comment_count>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-10 12:35:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Someone with commit access will need to do it. I can do it for you.

Thank you Timothy! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938501</commentid>
    <comment_count>16</comment_count>
      <attachid>213904</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-10 13:04:16 -0700</bug_when>
    <thetext>Comment on attachment 213904
Patch - Part 1/3 

Clearing flags on attachment: 213904

Committed r157246: &lt;http://trac.webkit.org/changeset/157246&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938546</commentid>
    <comment_count>17</comment_count>
      <attachid>213928</attachid>
    <who name="Marcelo Morais">m.morais</who>
    <bug_when>2013-10-10 14:31:02 -0700</bug_when>
    <thetext>Created attachment 213928
Patch to update project files

Timothy, after this just need to remove inspector/front-end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938617</commentid>
    <comment_count>18</comment_count>
      <attachid>213928</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-10 17:04:14 -0700</bug_when>
    <thetext>Comment on attachment 213928
Patch to update project files

Clearing flags on attachment: 213928

Committed r157275: &lt;http://trac.webkit.org/changeset/157275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938618</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-10 17:04:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938627</commentid>
    <comment_count>20</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-10-10 18:07:13 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/157278</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213904</attachid>
            <date>2013-10-10 11:23:29 -0700</date>
            <delta_ts>2013-10-10 13:04:16 -0700</delta_ts>
            <desc>Patch - Part 1/3 </desc>
            <filename>0001-Web-Inspector-Remove-the-old-front-end-from-WebKit.patch</filename>
            <type>text/plain</type>
            <size>58631</size>
            <attacher name="Marcelo Morais">m.morais</attacher>
            
              <data encoding="base64">RnJvbSA3ZmZiNzdjNDEzODRmZjZiOTZlNzA0YTgxYjI0MTgxNzg0ZjgzMDlmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJjZWxvIE1vcmFpcyA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+
CkRhdGU6IFRodSwgMTAgT2N0IDIwMTMgMDk6NDk6MjQgLTA0MDAKU3ViamVjdDogW1BBVENIIDEv
M10gV2ViIEluc3BlY3RvcjogUmVtb3ZlIHRoZSBvbGQgZnJvbnQtZW5kIGZyb20gV2ViS2l0CiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMjk1CgpSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KClNraXBwaW5nIHRoZSB0ZXN0cyBvZiB0aGUgb2xkIEluc3BlY3Rv
ciBVSSBmb3IgYWxsIHBvcnRzLgoKKiBUZXN0RXhwZWN0YXRpb25zOgoqIHBsYXRmb3JtL2VmbC13
azEvVGVzdEV4cGVjdGF0aW9uczoKKiBwbGF0Zm9ybS9lZmwtd2syL1Rlc3RFeHBlY3RhdGlvbnM6
CiogcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnM6CiogcGxhdGZvcm0vZ3RrLXdrMS9UZXN0
RXhwZWN0YXRpb25zOgoqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOgoqIHBsYXRmb3Jt
L21hYy1saW9uL1Rlc3RFeHBlY3RhdGlvbnM6CiogcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0
YXRpb25zOgoqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgoqIHBsYXRmb3JtL3dpbi14
cC9UZXN0RXhwZWN0YXRpb25zOgoqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgoqIHBs
YXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CiogcGxhdGZvcm0vd2syL1Rlc3RFeHBl
Y3RhdGlvbnM6Ci0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAyMyArKysrKwogTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyAgICAgICAgICAg
ICAgICAgICB8ICAgNiArLQogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsLXdrMS9UZXN0RXhwZWN0
YXRpb25zICB8ICAgMiAtCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwtd2syL1Rlc3RFeHBlY3Rh
dGlvbnMgIHwgICAyIC0KIExheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25z
ICAgICAgfCAgMjUgKy0tLS0KIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay13azEvVGVzdEV4cGVj
dGF0aW9ucyAgfCAgIDEgLQogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlv
bnMgICAgICB8ICAgNyArLQogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLWxpb24vVGVzdEV4cGVj
dGF0aW9ucyB8ICAgNyArLQogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0
YXRpb25zICB8ICAyMCArLS0tCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0
aW9ucyAgICAgIHwgIDk3ICstLS0tLS0tLS0tLS0tLS0tLS0tCiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4teHAvVGVzdEV4cGVjdGF0aW9ucyAgIHwgICA3ICstCiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vVGVzdEV4cGVjdGF0aW9ucyAgICAgIHwgMTIxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgfCAxMjAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4
cGVjdGF0aW9ucyAgICAgIHwgIDM4ICstLS0tLS0tCiAxNCBmaWxlcyBjaGFuZ2VkLCA2MCBpbnNl
cnRpb25zKCspLCA0MTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE1ZTQ0ZTIuLmExZGM4YzYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMy0xMC0xMCAgTWFyY2VsbyBNb3JhaXMgIDxtLm1vcmFp
c0BzYW1zdW5nLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW1vdmUgdGhlIG9sZCBm
cm9udC1lbmQgZnJvbSBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMjI5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNraXBwaW5nIHRoZSB0ZXN0cyBvZiB0aGUgb2xkIEluc3BlY3RvciBVSSBm
b3IgYWxsIHBvcnRzLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBw
bGF0Zm9ybS9lZmwtd2sxL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vZWZs
LXdrMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMtbGlvbi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL21hYy13azIv
VGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
czoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4teHAvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5j
YWlyby9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0
YXRpb25zOgorCiAyMDEzLTEwLTA4ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEltcGxlbWVudCBzdXBwb3J0IGZv
ciBncmlkLXRlbXBsYXRlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA0ODZmMDFkLi5iMmJlNWM1IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQ0LDggKzQ0LDEwIEBAIHdlYmtpdC5vcmcvYi8xMTkwOTQg
ZmFzdC9mb3Jtcy9jb2xvci9pbnB1dC1jb2xvci1vbmNoYW5nZS1ldmVudC5odG1sIFsgQ3Jhc2gg
UGFzCiAjIFRoaXMgdGVzdCB3aWxsIHJ1biBzbG93bHkgaW4gZGVidWcgbW9kZSwgYnV0IGlzIHBs
ZW50eSBmYXN0IGluIHJlbGVhc2UuCiBbIERlYnVnIF0ganMvcmVncmVzcy9lbXNjcmlwdGVuLW1l
bW9wcy5odG1sIFsgU2tpcCBdCiAKLSMgVGhpcyB0ZXN0IGlzIGJhc2VkIG9uIGluY29ycmVjdCBh
c3N1bXB0aW9ucyBhYm91dCBmcm9udC1lbmQgYmVoYXZpb3IsIGFuZCBwYXNzZXMgb3IgZmFpbHMg
cmFuZG9tbHkuCi13ZWJraXQub3JnL2IvMTE0MjA5IGh0dHAvdGVzdHMvaW5zcGVjdG9yL2FwcGNh
Y2hlL2FwcGNhY2hlLW1hbmlmZXN0LXdpdGgtbm9uLWV4aXN0aW5nLWZpbGUuaHRtbCBbIFdvbnRG
aXggXQorIyBTa2lwcGluZyB0aGUgdGVzdHMgZm9yIHRoZSBvbGQgaW5zcGVjdG9yIFVJCitpbnNw
ZWN0b3IgWyBTa2lwIF0KK2h0dHAvdGVzdHMvaW5zcGVjdG9yIFsgU2tpcCBdCitodHRwL3Rlc3Rz
L2luc3BlY3Rvci1lbmFibGVkIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8xMTI1MjEgWyBSZWxl
YXNlIF0gd2ViYXVkaW8vamF2YXNjcmlwdGF1ZGlvbm9kZS5odG1sIFsgUGFzcyBGYWlsdXJlIF0K
IHdlYmtpdC5vcmcvYi8xMTI1MjEgWyBEZWJ1ZyBdIHdlYmF1ZGlvL2phdmFzY3JpcHRhdWRpb25v
ZGUuaHRtbCBbIFBhc3MgQ3Jhc2ggXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
ZWZsLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsLXdrMS9U
ZXN0RXhwZWN0YXRpb25zCmluZGV4IDY2NmZlMTQuLjRhMWEzMzMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2VmbC13azEvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9lZmwtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMxOSw4ICszMTksNiBAQCB3
ZWJraXQub3JnL2IvOTY4ODEgZmFzdC9mcmFtZXMvc2FuZGJveGVkLWlmcmFtZS1wbHVnaW5zLmh0
bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi85Njg4MSBodHRwL3Rlc3RzL3BsdWdpbnMgWyBT
a2lwIF0KIHdlYmtpdC5vcmcvYi85Njg4MSBwbHVnaW5zIFsgU2tpcCBdCiB3ZWJraXQub3JnL2Iv
OTY4ODEgdXNlcnNjcmlwdHMvdXNlci1zY3JpcHQtcGx1Z2luLWRvY3VtZW50Lmh0bWwgWyBGYWls
dXJlIF0KLXdlYmtpdC5vcmcvYi85Njg4MSBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25l
dHdvcmstZW1iZWQuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzk2ODgxIGh0dHAvdGVz
dHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LWVtYmVkLmh0
bWwgWyBGYWlsdXJlIF0KIAogIyBFRkwgV0sxIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNwZWxsY2hl
Y2tlciBmZWF0dXJlCiB3ZWJraXQub3JnL2IvODY2MzMgZWRpdGluZy9zcGVsbGluZyBbIFNraXAg
XQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsLXdrMi9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsLXdrMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IGYyNDI3NjQuLjYzZTkzODAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC13
azIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwtd2syL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTcwLDcgKzcwLDYgQEAgd2Via2l0Lm9yZy9iLzEwOTk0NSB3ZWJn
bC9jb25mb3JtYW5jZS91bmlmb3Jtcy91bmlmb3JtLWRlZmF1bHQtdmFsdWVzLmh0bWwgWyBDcmEK
ICMgRkxBS1kgVEVTVFMKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLXdlYmtp
dC5vcmcvYi85NzU2MCBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXVzZXJhZ2VudC5o
dG1sIFsgRmFpbHVyZSBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xMTE2MTIgYW5pbWF0aW9ucy9hbmlt
YXRpb24tZGVsYXktY2hhbmdlZC5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAogQnVnKEVGTCkgZWRp
dGluZy9zZWxlY3Rpb24vZmlyc3QtbGV0dGVyLXNlbGVjdGlvbi1jcmFzaC5odG1sIFsgQ3Jhc2gg
UGFzcyBdCkBAIC04NCw3ICs4Myw2IEBAIEJ1ZyhFRkwpIGZhc3QvZXZlbnRzL29uY2hhbmdlLWNs
aWNrLWhhbmcuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiBCdWcoRUZMKSBmYXN0L2V2ZW50cy9kaXNw
YXRjaC1tZXNzYWdlLXN0cmluZy1kYXRhLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogQnVnKEVGTCkg
ZmFzdC9sYXllcnMvbm8tY2xpcHBpbmctb3ZlcmZsb3ctaGlkZGVuLWhhcmR3YXJlLWFjY2VsZXJh
dGlvbi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBQYXNzIF0KIEJ1ZyhFRkwpIGZhc3QvZXZlbnRz
L2RvbWFjdGl2YXRlLXNldHMtdW5kZXJseWluZy1jbGljay1ldmVudC1hcy1oYW5kbGVkLmh0bWwg
WyBGYWlsdXJlIFBhc3MgXQotQnVnKEVGTCkgaHR0cC90ZXN0cy9pbnNwZWN0b3IvY2hhbmdlLWlm
cmFtZS1zcmMuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiBCdWcoRUZMKSBodHRwL3Rlc3RzL2xvYWRp
bmcvZmlyZS1lcnJvci1ldmVudC1lbXB0eS00MDQtc2NyaXB0Lmh0bWwgWyBDcmFzaCBGYWlsdXJl
IFBhc3MgXQogQnVnKEVGTCkganMvZG9tL2NyZWF0ZS1sb3RzLW9mLXdvcmtlcnMuaHRtbCBbIENy
YXNoIEZhaWx1cmUgUGFzcyBdCiBCdWcoRUZMKSBtZWRpYS90cmFjay90cmFjay1lbGVtZW50LWxv
YWQtZXZlbnQuaHRtbCBbIENyYXNoIEZhaWx1cmUgUGFzcyBdCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2VmbC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGJhMzkxZjYuLjVjMjJmNzMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCkBAIC0yNTIsNyArMjUyLDEwIEBAIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY3Jvc3Mtb3JpZ2luLW5vLWF1dGhvcml6YXRpb24uaHRt
bAogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9sb2dvdXQuaHRtbAogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9yZWRpcmVjdC1jcm9zcy1vcmlnaW4tdHJpcG1pbmUuaHRtbAogCisjIFNraXBw
aW5nIHRoZSB0ZXN0cyBmb3IgdGhlIG9sZCBpbnNwZWN0b3IgVUkKIHdlYmtpdC5vcmcvYi8xMjEw
OTYgaW5zcGVjdG9yIFsgU2tpcCBdCitodHRwL3Rlc3RzL2luc3BlY3RvciBbIFNraXAgXQoraHR0
cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZCBbIFNraXAgXQogCiAjIFRoZXJlIGFyZSBubyBleHBl
Y3RlZCByZXN1bHQgc2V0IHlldC4KIGVkaXRpbmcvdW5zdXBwb3J0ZWQtY29udGVudC9saXN0LWRl
bGV0ZS0wMDEuaHRtbCAKQEAgLTI4MCw5ICsyODMsNiBAQCBmYXN0L2V2ZW50cy9kcmFnLWRhdGFU
cmFuc2Zlckl0ZW1MaXN0LWZpbGUtaGFuZGxpbmcuaHRtbAogZmFzdC9wcm9maWxlci9zdG9wLXBy
b2ZpbGluZy1hZnRlci1zZXRUaW1lb3V0Lmh0bWwKIGZhc3QvcHJvZmlsZXIvZGVhZC10aW1lLmh0
bWwKIAotIyBmb2xsb3dpbmcgdGVzdHMgc3RhcnRlZCBmYWlsaW5nIG9uIEVGTCBhZnJlciByMTIy
OTUyLgotaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2UtcGFyYW1ldGVycy5odG1sCi0KICMg
RU5BQkxFKERSQUdHQUJMRV9SRUdJT04pIGlzIGRpc2FibGVkCiBmYXN0L2Nzcy9kcmFnZ2FibGUt
cmVnaW9uLXBhcnNlci5odG1sCiAKQEAgLTQ4NCwxNSArNDg0LDYgQEAgd2Via2l0Lm9yZy9iLzk1
MzAwIGZhc3QvZG9tL0RldmljZU1vdGlvbiBbIFNraXAgXQogIyBub3QgU0tJUCwganVzdCBXT05U
RklYLgogd2Via2l0Lm9yZy9iLzY2MjE4IGZhc3QvaGFybmVzcy9zYW1wbGUtZmFpbC1taXNtYXRj
aC1yZWZ0ZXN0Lmh0bWwgWyBXb250Rml4IEltYWdlT25seUZhaWx1cmUgXQogCi0jIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgT25seSB0aGUgQ2hyb21pdW0gcG9ydCBzdXBwb3J0cyB0
aGUgZmVhdHVyZXMgYmVsb3csIGJ1dCBpdHMgRFJUIGltcGxlbWVudGF0aW9uIGlzIG5vdAotIyBj
YXBhYmxlIG9mIHJ1bm5pbmcgdGhvc2UgdGVzdHMgZWl0aGVyLiBUaGV5IGFyZSBjdXJyZW50bHkg
c2tpcHBlZCBieSBhbGwgcG9ydHMuCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMg
Q29tbWVudCBmcm9tIGNocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6IFRyYW5zZmVycmVkIHRpbWUv
c2l6ZSBhcmUgbm90IHN1cHBvcnRlZCBpbiBEUlQuCi13ZWJraXQub3JnL2IvOTc0NTkgaHR0cC90
ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLXNpemUuaHRtbCBbIFdvbnRGaXggXQotd2Vi
a2l0Lm9yZy9iLzk3NDU5IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1zaXpl
LWNodW5rZWQuaHRtbCBbIFdvbnRGaXggXQotd2Via2l0Lm9yZy9iLzk3NDU5IGh0dHAvdGVzdHMv
aW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1zaXplLXN5bmMuaHRtbCBbIFdvbnRGaXggXQotCiAj
IENTUyBSZWdpb25zIHRlc3RzIGZvciByZWdpb24gc3R5bGluZyBhbmQgc2NvcGVkIHN0eWxlcywg
b2Ygd2hpY2ggdGhlIGxhdHRlciBhcmUgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4KIHdlYmtpdC5v
cmcvYi84MjM0MCBmYXN0L3JlZ2lvbnMvc3R5bGUtc2NvcGVkLWluLWZsb3ctb3ZlcnJpZGUtY29u
dGFpbmVyLXN0eWxlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84MjM0
MCBmYXN0L3JlZ2lvbnMvc3R5bGUtc2NvcGVkLWluLWZsb3ctb3ZlcnJpZGUtcmVnaW9uLXN0eWxp
bmctbXVsdGlwbGUtcmVnaW9ucy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCkBAIC01ODQsMTIg
KzU3NSw2IEBAIHdlYmtpdC5vcmcvYi8xMDgzNDAgZmFzdC9sYXllcnMvbm8tY2xpcHBpbmctb3Zl
cmZsb3ctaGlkZGVuLWFkZGVkLWFmdGVyLXRyYW5zaXRpCiAjIEZsYWt5IHdlYnNvY2tldCB0ZXN0
cy4KIEJ1ZyhFRkwpIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJw
cm90b2NvbC1jaGFyYWN0ZXJzLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogCi0jIEZsYWt5IGluc3Bl
Y3RvciB0ZXN0cwotd2Via2l0Lm9yZy9iLzc4ODY5IGh0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3Bl
Y3QtZWxlbWVudC5odG1sIFsgRmFpbHVyZSBQYXNzIF0KLXdlYmtpdC5vcmcvYi85MTk1OCBodHRw
L3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkL2luamVjdGVkLXNjcmlwdC1kaXNjYXJkLmh0bWwgWyBG
YWlsdXJlIFBhc3MgXQotd2Via2l0Lm9yZy9iLzg1NjE1IGh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jl
c291cmNlLWhhci1wYWdlcy5odG1sIFsgRmFpbHVyZSBQYXNzIF0KLUJ1ZyhFRkwpIGh0dHAvdGVz
dHMvaW5zcGVjdG9yL3NlYXJjaC9yZXNvdXJjZXMtc2VhcmNoLW1hdGNoLWluZGV4Lmh0bWwgWyBG
YWlsdXJlIFBhc3MgXQotCiAjIFNvbWV0aW1lcyBhc3NlcnRzIGluIE1lc3NhZ2VQb3J0Ojpjb250
ZXh0RGVzdHJveWVkCiB3ZWJraXQub3JnL2IvOTQ0NTggaHR0cC90ZXN0cy9zZWN1cml0eS9YRnJh
bWVPcHRpb25zL3gtZnJhbWUtb3B0aW9ucy1kZW55LW1ldGEtdGFnLWluLWJvZHkuaHRtbCBbIENy
YXNoIEZhaWx1cmUgUGFzcyBdCiAKQEAgLTE1MTksMTAgKzE1MDQsNiBAQCB3ZWJraXQub3JnL2Iv
MTA4MzM5IGNvbXBvc2l0aW5nL2xheWVyLWNyZWF0aW9uL2ZpeGVkLXBvc2l0aW9uLW5vLWNvbnRl
bnQuaHRtbCBbCiAKIHdlYmtpdC5vcmcvYi82NzkyMSBbIFJlbGVhc2UgXSBwZXJmL3Nob3ctaGlk
ZS10YWJsZS1yb3dzLmh0bWwgWyBGYWlsdXJlIFBhc3MgU2xvdyBdCiAKLSMgVGhpcyB0ZXN0IGhh
cyBzbGlnaHRseSBuZXR3b3JraW5nIGRpZmZlcmVudCBvdXRwdXQgb24gdGhlIGJ1aWxkIGJvdHMg
YnV0IHRoZQotIyByZXN1bHQgc3RpbGwgbG9va3MgT0suCi1CdWcoRUZMKSBodHRwL3Rlc3RzL2lu
c3BlY3Rvci9jb25zb2xlLXdlYnNvY2tldC1lcnJvci5odG1sIFsgRmFpbHVyZSBQYXNzIF0KLQog
IyBGYWlsaW5nIGFmdGVyIHIxNDI5NDcuCiB3ZWJraXQub3JnL2IvODM4NjkgZmFzdC9sYXllcnMv
dmlkZW8tbGF5ZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzgzODY5IG1lZGlhL21l
ZGlhLWNvbnRyb2xzLWNsb25lLmh0bWwgWyBGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay13azEvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA3N2Y3NTk0Li5hZDQ0NThmIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGstd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC01Nyw3
ICs1Nyw2IEBAIGZhc3QvZXZlbnRzL3Njcm9sbC1ldmVudC1kdXJpbmctbW9kYWwtZGlhbG9nLmh0
bWwgWyBXb250Rml4IEZhaWx1cmUgXQogZmFzdC9oYXJuZXNzL3Nob3ctbW9kYWwtZGlhbG9nLmh0
bWwgWyBXb250Rml4IFRpbWVvdXQgXQogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1mcmFtZS1h
Y2Nlc3MtY2FsbC5odG1sIFsgV29udEZpeCBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkv
Y3Jvc3MtZnJhbWUtYWNjZXNzLWdldC5odG1sIFsgV29udEZpeCBGYWlsdXJlIF0KLWluc3BlY3Rv
ci9jb25zb2xlL2NvbnNvbGUtbG9uZy1ldmFsLWNyYXNoLmh0bWwgWyBXb250Rml4IFRpbWVvdXQg
XQogCiAjIFRoaXMgcG9saWN5IGRlbGVnYXRlIGlzIGltcGxlbWVudGVkLCBidXQgaXQgbmVlZHMg
dGhlIERPTSBub2RlIHBhdGggaW4gdGhlIG91dHB1dC4KIEJ1ZyhHVEspIGZhc3QvZW5jb2Rpbmcv
bWFpbHRvLWFsd2F5cy11dGYtOC5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDNjYzRlZjQuLmIyMjI1MTcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC04MSw5ICs4MSw2IEBAIHdlYmtp
dC5vcmcvYi83MTg1MSBodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRUeXBlT3B0aW9ucyBbIFNr
aXAgXQogIyBBY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcgKEVOQUJMRV9BQ0NFTEVSQVRF
RF9PVkVSRkxPV19TQ1JPTExJTkcpIGlzIG5vdCBlbmFibGVkLgogZmFzdC9yZXBhaW50L292ZXJm
bG93LXNjcm9sbC10b3VjaC1yZXBhaW50Lmh0bWwgWyBTa2lwIF0KIAotIyBUaGVzZSB0ZXN0IC1h
cHBsZS0gYW5kIC1raHRtbC0gcHJlZml4ZWQgQ1NTIHByb3BlcnRpZXMsIHdoaWNoIHdlIGRvbid0
IHN1cHBvcnQuCi1pbnNwZWN0b3Ivc3R5bGVzL3ZlbmRvci1wcmVmaXhlcy5odG1sIFsgU2tpcCBd
Ci0KICMgVGhpcyBwb3J0IGRvZXNuJ3Qgc3VwcG9ydCBkZXRlY3Rpbmcgc2xvdyB1bmxvYWQgaGFu
ZGxlcnMuCiBmYXN0L2RvbS9XaW5kb3cvc2xvdy11bmxvYWQtaGFuZGxlci5odG1sIFsgV29udEZp
eCBUaW1lb3V0IEZhaWx1cmUgXQogZmFzdC9kb20vV2luZG93L3Nsb3ctdW5sb2FkLWhhbmRsZXIt
b25seS1mcmFtZS1pcy1zdG9wcGVkLmh0bWwgWyBXb250Rml4IFRpbWVvdXQgRmFpbHVyZSBdCkBA
IC0xNjYsNyArMTYzLDYgQEAgd2Via2l0Lm9yZy9iLzEyMjUxMSBmYXN0L3JlZ2lvbnMvc2VsZWN0
aW9uL3NlbGVjdGluZy10ZXh0LWluLTItcmVnaW9ucy12ZXJ0LWxyLmgKIHdlYmtpdC5vcmcvYi85
ODkyNyBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZGV2aWNlLW9yaWVudGF0aW9u
Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi85ODkyNyBmYXN0L2RvbS9EZXZpY2VNb3Rpb24g
WyBTa2lwIF0KIHdlYmtpdC5vcmcvYi85ODkyNyBmYXN0L2RvbS9EZXZpY2VPcmllbnRhdGlvbiBb
IFNraXAgXQotd2Via2l0Lm9yZy9iLzk4OTI3IGluc3BlY3Rvci9kZXZpY2Utb3JpZW50YXRpb24t
c3VjY2Vzcy5odG1sIFsgU2tpcCBdCiAKICMgRGVza3RvcCBub3RpZmljYXRpb25zIGFyZSBub3Qg
eWV0IHN1cHBvcnRlZC4KIHdlYmtpdC5vcmcvYi82MTE0MCBmYXN0L25vdGlmaWNhdGlvbnMgWyBT
a2lwIF0KQEAgLTI4NSw3ICsyODEsNiBAQCB3ZWJraXQub3JnL2IvNzE4NDkgaHR0cC90ZXN0cy9j
YW52YXMvd2ViZ2wgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi83MTg0OSBodHRwL3Rlc3RzL3NlY3Vy
aXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1hbGxvd2VkLmh0bWwgWyBTa2lwIF0K
IHdlYmtpdC5vcmcvYi83MTg0OSBodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFk
LXJlbW90ZS1pbWFnZS1hbGxvd2VkLXdpdGgtY3JlZGVudGlhbHMuaHRtbCBbIFNraXAgXQogd2Vi
a2l0Lm9yZy9iLzcxODQ5IGh0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVt
b3RlLWltYWdlLWJsb2NrZWQtbm8tY3Jvc3NvcmlnaW4uaHRtbCBbIFNraXAgXQotd2Via2l0Lm9y
Zy9iLzcxODQ5IGluc3BlY3Rvci9wcm9maWxlci93ZWJnbCBbIFNraXAgXQogd2Via2l0Lm9yZy9i
LzcxODQ5IHdlYmtpdC5vcmcvYi8xMTE0NzcgaW5zcGVjdG9yLXByb3RvY29sL2xheWVycyBbIFNr
aXAgXQogd2Via2l0Lm9yZy9iLzcxODQ5IHRyYW5zZm9ybXMvM2QgWyBTa2lwIF0KIHdlYmtpdC5v
cmcvYi83MTg0OSB3ZWJnbCBbIFNraXAgXQpAQCAtNDQ2LDcgKzQ0MSw2IEBAIHdlYmtpdC5vcmcv
Yi8xMjA4NDQgZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXdpdGgtYW5ub3RhdGlvbnMuaHRtbCBb
IFNraXAgXQogCiAjIEluZGV4ZWREQiBjb2RlIGlzIGdvaW5nIHRocm91Z2ggcmVmYWN0b3Jpbmcv
cmVmcmVzaGluZywgc28gdGhlIHRlc3RzIGFyZSBxdWl0ZSB1bnN0YWJsZSBhdCB0aGlzIHBvaW50
Lgogd2Via2l0Lm9yZy9iLzEwNzE5NCBzdG9yYWdlL2luZGV4ZWRkYiBbIFNraXAgXQotd2Via2l0
Lm9yZy9iLzEwNzE5NCBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbmRleGVkZGIgWyBTa2lwIF0KIHdl
YmtpdC5vcmcvYi8xMDcxOTQgaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4taW5kZXhl
ZGRiLWFsbG93ZWQuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzEwNzE5NCBodHRwL3Rlc3Rz
L3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1pbmRleGVkZGIuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9y
Zy9iLzEwNzE5NCBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi13b3JrZXItaW5kZXhl
ZGRiLWFsbG93ZWQuaHRtbCBbIFNraXAgXQpAQCAtOTg2LDYgKzk4MCw3IEBAIHdlYmtpdC5vcmcv
Yi8zNjYyNyBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYWZ0ZXItbW91c2Utc2VsZWN0aW9uLmh0
bWwgWyBGYWlsdXJlCiAjIE5lZWQgdG8gYWRkIGZ1bmN0aW9uYWxpdHkgdG8gRHVtcFJlbmRlclRy
ZWUgdG8gaGFuZGxlIHNjcm9sbGJhciBwb2xpY3kgY2hhbmdlcwogQnVnKEdUSykgZmFzdC9vdmVy
Zmxvdy9zY3JvbGxiYXItcmVzdG9yZWQtYW5kLXRoZW4tbG9ja2VkLmh0bWwgWyBGYWlsdXJlIF0K
IAorIyBTa2lwcGluZyB0aGUgdGVzdHMgZm9yIHRoZSBvbGQgaW5zcGVjdG9yIFVJCiB3ZWJraXQu
b3JnL2IvODMxNzQgaW5zcGVjdG9yIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvODMxNzQgaW5zcGVj
dG9yLXByb3RvY29sL2hlYXAtcHJvZmlsZXIgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi84MzE3NCBo
dHRwL3Rlc3RzL2luc3BlY3RvciBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjLWxpb24vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy1saW9uL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNGY5ODlmNi4uMDgyYWJkZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLWxpb24vVGVzdEV4cGVjdGF0aW9ucworKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtbGlvbi9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMzMsOSAr
MTMzLDEwIEBAIGZhc3QvcmVwYWludC9mbG9hdC1vdmVyZmxvdy5odG1sCiAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjU3MwogaHR0cC90ZXN0cy9taXNjL3N1Ym1p
dC1wb3N0LWtleWdlbi5odG1sCiAKLSMgPHJkYXI6Ly9wcm9ibGVtLzExOTkxODgxPgotaW5zcGVj
dG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtY29udGFpbm1lbnQtc2hvdy1hbGwuaHRtbAotaW5z
cGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLWV4cGFuZC1zY29wZS5odG1sCisjIFNraXBwaW5nIHRo
ZSB0ZXN0cyBmb3IgdGhlIG9sZCBpbnNwZWN0b3IgVUkKK2luc3BlY3RvciBbIFNraXAgXQoraHR0
cC90ZXN0cy9pbnNwZWN0b3IgWyBTa2lwIF0KK2h0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQg
WyBTa2lwIF0KIAogIyBMaW9uIGRvZXMgbm90IHN1cHBvcnQgd2ViIG5vdGlmaWNhdGlvbnMKIGh0
dHAvdGVzdHMvbm90aWZpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9U
ZXN0RXhwZWN0YXRpb25zCmluZGV4IDFmOWRlMDQuLjIxYTFmNzcgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE4Myw3ICsxODMsMTEgQEAg
ZmFzdC9ldmVudHMvZHJhZy1saW5rLmh0bWwKICMgYXBwY2FjaGUgdGVzdHMgb2Z0ZW4gZmFpbCBv
biB0aGUgTWFjIFdlYktpdDIgYm90CiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MjA2MSByZGFyOi8vcHJvYmxlbS8xMTEwODY0OQogaHR0cC90ZXN0cy9hcHBjYWNo
ZQotaHR0cC90ZXN0cy9pbnNwZWN0b3IvYXBwY2FjaGUKKworIyBTa2lwcGluZyB0aGUgdGVzdHMg
Zm9yIHRoZSBvbGQgaW5zcGVjdG9yIFVJCitpbnNwZWN0b3IgWyBTa2lwIF0KK2h0dHAvdGVzdHMv
aW5zcGVjdG9yIFsgU2tpcCBdCitodHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkIFsgU2tpcCBd
CiAKICMgZmxha3kgc3RvcmFnZSB0ZXN0cwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODI2NzkKQEAgLTIzMiwxNiArMjM2LDEyIEBAIHdlYmtpdC5vcmcvYi8xMDU5
NDggZmFzdC9ldmVudHMvY29udHJvbGNsaWNrLW5vLW9uY2xpY2suaHRtbCBbIFNraXAgXQogCiB3
ZWJraXQub3JnL2IvMTA1OTU0IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZWxvYWQtc3ViZnJhbWUt
b2JqZWN0Lmh0bWwgWyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzEwNTk1NiBpbnNwZWN0b3Iv
Z2VvbG9jYXRpb24td2F0Y2hQb3NpdGlvbi5odG1sIFsgUGFzcyBGYWlsdXJlIF0KLQogd2Via2l0
Lm9yZy9iLzEwNTk2MCBwbHVnaW5zL25hdmlnYXRvci1wbHVnaW5zLmh0bWwgWyBGYWlsdXJlIF0K
IAogd2Via2l0Lm9yZy9iLzEwNTk5OCBbIExpb24gUmVsZWFzZSBdIGZhc3QvY3NzL3N0aWNreS9p
bmxpbmUtc3RpY2t5Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMDU5
OTggWyBNb3VudGFpbkxpb24gRGVidWcgXSBmYXN0L2Nzcy9zdGlja3kvaW5saW5lLXN0aWNreS5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xMDU5OTggWyBNb3Vu
dGFpbkxpb24gRGVidWcgXSBmYXN0L2Nzcy9zdGlja3kvc3RpY2t5LWJvdGgtc2lkZXMuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi85MzU1MiBpbnNwZWN0b3Iv
ZGV2aWNlLW9yaWVudGF0aW9uLXN1Y2Nlc3MuaHRtbCBbIEZhaWx1cmUgXQotCiB3ZWJraXQub3Jn
L2IvMTA2NDA1IGh0dHAvdGVzdHMvbG9hZGluZy9hdXRoZW50aWNhdGlvbi1hZnRlci1yZWRpcmVj
dC1zdG9yZXMtd3JvbmctY3JlZGVudGlhbHMvYXV0aGVudGljYXRpb24tYWZ0ZXItcmVkaXJlY3Qt
c3RvcmVzLXdyb25nLWNyZWRlbnRpYWxzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8x
MDY0MDUgaHR0cC90ZXN0cy9sb2FkaW5nL2Jhc2ljLWF1dGgtcmVzZW5kLXdyb25nLWNyZWRlbnRp
YWxzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMDY0MDUgaHR0cC90ZXN0cy9sb2Fk
aW5nL2Jhc2ljLWNyZWRlbnRpYWxzLXNlbnQtYXV0b21hdGljYWxseS5odG1sIFsgRmFpbHVyZSBd
CkBAIC0yNjksMTEgKzI2OSw2IEBAIHdlYmtpdC5vcmcvYi85NzEyNCBbIERlYnVnIF0gc3ZnL2Fu
aW1hdGlvbnMvbW96aWxsYS9hbmltYXRlTW90aW9uLWJ5LTEuc3ZnIFsgUGFzCiB3ZWJraXQub3Jn
L2IvMTEyNjQyIFsgRGVidWcgXSBlZGl0aW5nL2RlbGV0aW5nL3Bhc3RlLXdpdGgtdHJhbnNwYXJl
bnQtYmFja2dyb3VuZC1jb2xvci5odG1sIFsgQ3Jhc2ggUGFzcyBdCiB3ZWJraXQub3JnL2IvMTEy
NjQyIFsgRGVidWcgXSBlZGl0aW5nL3Bhc3RlYm9hcmQvNTc4MDY5Ny0xLmh0bWwgWyBDcmFzaCBQ
YXNzIF0KIAotd2Via2l0Lm9yZy9iLzExMzAyMCBbIERlYnVnIF0gaW5zcGVjdG9yL3Byb2ZpbGVy
L2NwdS1wcm9maWxlci1wcm9maWxlLXJlbW92YWwuaHRtbCBbIENyYXNoIFBhc3MgXQotd2Via2l0
Lm9yZy9iLzExMzAyMCBbIERlYnVnIF0gaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dlYmdsLXBy
b2ZpbGVyLWdldC1lcnJvci5odG1sIFsgQ3Jhc2ggUGFzcyBdCi13ZWJraXQub3JnL2IvMTEzMDIw
IFsgRGVidWcgXSBpbnNwZWN0b3IvcHJvZmlsZXIvY2FudmFzMmQvY2FudmFzMmQtZ3JhZGllbnQt
Y2FwdHVyaW5nLmh0bWwgWyBDcmFzaCBQYXNzIF0KLQotd2Via2l0Lm9yZy9iLzExMzUxMyBpbnNw
ZWN0b3Ivc3R5bGVzL3Bhc3RlLXByb3BlcnR5Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi8xMTM1MTUgY29tcG9zaXRpbmcvaWZyYW1lcy9yZW1vdmUtaWZyYW1lLWNyYXNoLmh0bWwgWyBD
cmFzaCBQYXNzIF0KIAogIyBodHRwL3Rlc3RzL2NhbnZhcy9jYW52YXMtc2xvdy1mb250LWxvYWRp
bmcuaHRtbCBwYXNzIGZyb20gdGltZSB0byB0aW1lIG9uIFdlYktpdDIgUmVsZWFzZSBidWlsZHMu
CkBAIC0zNDAsOCArMzM1LDYgQEAgd2Via2l0Lm9yZy9iLzEyMDE0OCB3ZWJhdWRpby9qYXZhc2Ny
aXB0YXVkaW9ub2RlLXVwbWl4Mi04Y2hhbm5lbC1pbnB1dC5odG1sIFsgUGEKIAogd2Via2l0Lm9y
Zy9iLzEyMDE2MSBbIExpb24gXSB3ZWJhdWRpby9jb2RlYy10ZXN0cy9tcDMvMTI4a2Jwcy00NGto
ei5odG1sIFsgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi8xMjA1NDQgaW5zcGVjdG9yL3N0b3Jh
Z2UtcGFuZWwtZG9tLXN0b3JhZ2UtdXBkYXRlLmh0bWwgWyBGYWlsdXJlIF0KLQogd2Via2l0Lm9y
Zy9iLzEyMTU4MSBbIExpb24gXSBtZWRpYS92aWRlby1vYmplY3QtZml0Lmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzEwNzAxOCBzdmcvYW5pbWF0aW9ucy9hbmltYXRl
LWxpbmVhci1kaXNjcmV0ZS1hZGRpdGl2ZS5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIFBhc3MgXQpA
QCAtNDI0LDkgKzQxNyw2IEBAIGZhc3QvZm9ybXMvcmFuZ2Uvc2xpZGVyLWRlbGV0ZS13aGlsZS1k
cmFnZ2luZy10aHVtYi5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2NyZWRlbnRpYWxzLWluLXJl
ZmVyZXIuaHRtbAogc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDQtYi5zdmcKIAotIyBBbiBh
ZGRpdGlvbmFsIHRlc3QgdGhhdCBmYWlsZWQgb24gdGhlIExpb24gV2ViS2l0MiBEZWJ1ZyBib3Qg
aW4gcjExMTczOQotaW5zcGVjdG9yL2VsZW1lbnRzL2VkaXQtZG9tLWFjdGlvbnMuaHRtbAotCiAj
IEEgdGVzdCB0aGF0IGZhaWxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgTGlvbiBXZWJLaXQyIERl
YnVnIGJvdCBiZXR3ZWVuIHIxMTE4MDggYW5kIHIxMTE4NDkKIGZhc3Qvd29ya2Vycy93b3JrZXIt
Y2xvbmVwb3J0Lmh0bWwKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rl
c3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
cwppbmRleCA3ZWM5Y2Y4Li5kYjA5NDExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucwpAQCAtMTIzLDcgKzEyMyw2IEBAIGNhbnZhcy9waGlsaXAvdGVzdHMvMmQu
ZHJhd0ltYWdlLm91dHNpZGVzb3VyY2UuaHRtbAogCiAjIEluZGV4ZWREQiBpcyBub3QgeWV0IGVu
YWJsZWQuCiBzdG9yYWdlL2luZGV4ZWRkYgotaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5kZXhlZGRi
CiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1pbmRleGVkZGItYWxsb3dlZC5odG1s
CiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1pbmRleGVkZGIuaHRtbAogaHR0cC90
ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4td29ya2VyLWluZGV4ZWRkYi1hbGxvd2VkLmh0bWwK
QEAgLTIyMiw1MCArMjIxLDE1IEBAIHdlYmtpdC5vcmcvYi80MjgyMSBhbmltYXRpb25zL3BsYXkt
c3RhdGUuaHRtbAogd2Via2l0Lm9yZy9iLzExMzU5OCBhbmltYXRpb25zL2FuaW1hdGlvbi1kZWxh
eS1jaGFuZ2VkLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzExMzU5OSBzdmcv
YW5pbWF0aW9ucy9yZWluc2VydGluZy1zdmctaW50by1kb2N1bWVudC5odG1sIFsgUGFzcyBGYWls
dXJlIF0KIAotIyB3aW5kb3cuZXZlbnRTZW5kZXIgZG9lc24ndCBleGlzdCBpbiBkZXZ0b29scyBm
cm9udC1lbmQgb24gbWFjLgotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA2NzkzCi1pbnNwZWN0b3IvZWRpdG9yL3RleHQtZWRpdG9yLWZvcm1hdHRlci5odG1sIFsg
U2tpcCBdCi1pbnNwZWN0b3IvZWRpdG9yL3RleHQtZWRpdG9yLXdvcmQtanVtcHMuaHRtbCBbIFNr
aXAgXQotaW5zcGVjdG9yL2VkaXRvci90ZXh0LWVkaXRvci1ob21lLWJ1dHRvbi5odG1sIFsgU2tp
cCBdCi1pbnNwZWN0b3IvZWRpdG9yL3RleHQtZWRpdG9yLXNtYXJ0LWJyYWNlcy5odG1sIFsgU2tp
cCBdCi0KLXdlYmtpdC5vcmcvYi83MTEyMCBpbnNwZWN0b3IvZGVidWdnZXIvc2VsZWN0ZWQtY2Fs
bC1mcmFtZS1hZnRlci1mb3JtYXR0aW5nLXNvdXJjZS5odG1sCi0KLSMgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzMyCi1pbnNwZWN0b3IvZGVidWdnZXIvZG9tLWJy
ZWFrcG9pbnRzLmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci9ldmVudC1saXN0ZW5lci1icmVha3Bv
aW50cy5odG1sCi1pbnNwZWN0b3IvZGVidWdnZXIvc3RlcC10aHJvdWdoLWV2ZW50LWxpc3RlbmVy
cy5odG1sCi1pbnNwZWN0b3IvZGVidWdnZXIveGhyLWJyZWFrcG9pbnRzLmh0bWwKKyMgU2tpcHBp
bmcgdGhlIHRlc3RzIGZvciB0aGUgb2xkIGluc3BlY3RvciBVSQoraW5zcGVjdG9yIFsgU2tpcCBd
CitodHRwL3Rlc3RzL2luc3BlY3RvciBbIFNraXAgXQoraHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5h
YmxlZCBbIFNraXAgXQogCiAjIEpTQyBkb2Vzbid0IHN1cHBvcnQgaGVhcCBwcm9maWxpbmcKICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg1Ci1pbnNwZWN0b3Iv
cHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVyLmh0bWwKLWluc3BlY3Rv
ci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWNvbXBhcmlzb24tZG9tLWdyb3Vwcy1jaGFuZ2UuaHRt
bAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtY29tcGFyaXNvbi1leHBhbnNpb24t
cHJlc2VydmVkLXdoZW4tc29ydGluZy5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFw
c2hvdC1jb21wYXJpc29uLXNob3ctYWxsLmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNu
YXBzaG90LWxvYWRlci5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1yZXZl
YWwtaW4tZG9taW5hdG9ycy12aWV3Lmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBz
aG90LXN1bW1hcnktcmV0YWluZXJzLmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBz
aG90LXN1bW1hcnktc2hvdy1yYW5nZXMuaHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25h
cHNob3Qtc3VtbWFyeS1zb3J0aW5nLWZpZWxkcy5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVh
cC1zbmFwc2hvdC1zdW1tYXJ5LXNvcnRpbmcuaHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAt
c25hcHNob3Qtc3VtbWFyeS1zb3J0aW5nLWluc3RhbmNlcy5odG1sCiB3ZWJraXQub3JnL2IvNTA0
ODUgaW5zcGVjdG9yLXByb3RvY29sL2hlYXAtcHJvZmlsZXIgWyBTa2lwIF0KIAotd2Via2l0Lm9y
Zy9iLzczOTM2IGluc3BlY3Rvci9wcm9maWxlci9jYW52YXMyZC9jYW52YXMtaGFzLXVuaW5zdHJ1
bWVudGVkLWNhbnZhc2VzLmh0bWwKLXdlYmtpdC5vcmcvYi83MzkzNiBpbnNwZWN0b3IvcHJvZmls
ZXIvY2FudmFzMmQvY2FudmFzLXN0YWNrLXRyYWNlLmh0bWwKLXdlYmtpdC5vcmcvYi83MzkzNiBp
bnNwZWN0b3IvcHJvZmlsZXIvY2FudmFzMmQvY2FudmFzLXJlcGxheS1sb2ctZ3JpZC5odG1sCi0K
LXdlYmtpdC5vcmcvYi80MDMwMCBpbnNwZWN0b3IvZGVidWdnZXIvbGl2ZS1lZGl0Lmh0bWwgWyBG
YWlsdXJlIF0KLXdlYmtpdC5vcmcvYi80MDMwMCBpbnNwZWN0b3IvZGVidWdnZXIvbGl2ZS1lZGl0
LWJyZWFrcG9pbnRzLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi84OTY1MiBpbnNwZWN0
b3IvZGVidWdnZXIvZGVidWdnZXItY29tcGlsZS1hbmQtcnVuLmh0bWwKLXdlYmtpdC5vcmcvYi81
MzAwMyBodHRwL3Rlc3RzL2luc3BlY3Rvci9jb21waWxlci1zb3VyY2UtbWFwcGluZy1kZWJ1Zy5o
dG1sCi0KLXdlYmtpdC5vcmcvYi85Njk0MiBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25l
dHdvcmsteGhyLXJlcGxheS5odG1sCi0KLXdlYmtpdC5vcmcvYi8xMDk1NDYgaW5zcGVjdG9yL3Nj
cmlwdC1leGVjdXRpb24tc3RhdGUtY2hhbmdlLW5vdGlmaWNhdGlvbi5odG1sIFsgU2tpcCBdCi13
ZWJraXQub3JnL2IvMTEyNTAyIGluc3BlY3Rvci9lbGVtZW50cy9oaWdobGlnaHQtbm9kZS1zY2Fs
ZWQuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCi0KICMgRmxha2V5IG5vdGlmaWNhdGlvbiB0ZXN0Lgog
d2Via2l0Lm9yZy9iLzExMjQ5OSBodHRwL3Rlc3RzL25vdGlmaWNhdGlvbnMvd2luZG93LXNob3ct
b24tY2xpY2suaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTEyNDk5IGh0dHAv
dGVzdHMvbm90aWZpY2F0aW9ucy9sZWdhY3kvd2luZG93LXNob3ctb24tY2xpY2suaHRtbCBbIFBh
c3MgRmFpbHVyZSBdCkBAIC0zNTcsOSArMzIxLDYgQEAgcGx1Z2lucy9tb3VzZS1jbGljay1pZnJh
bWUtdG8tcGx1Z2luLmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwMjA2CiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzcG9uc2UyMDQuaHRtbAogCi0jIGNv
bnNvbGUgbG9uZyBldmFsIHRlc3QgaXMgdGltZW91dCA2MDYxNgotaW5zcGVjdG9yL2NvbnNvbGUv
Y29uc29sZS1sb25nLWV2YWwtY3Jhc2guaHRtbAotCiB3ZWJraXQub3JnL2IvNjE0ODcgaHR0cC90
ZXN0cy9tZWRpYS92aWRlby1jcm9zcy1zaXRlLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBTdHlsZWQg
c2NvcGUgZWxlbWVudCBpcyBub3QgeWV0IGVuYWJsZWQuCkBAIC0zODEsNyArMzQyLDYgQEAgZmFz
dC9tdWx0aWNvbC9zZWFtbGVzcy1mbG93ZWQtdGhyb3VnaC1jb2x1bW5zLmh0bWwKICMgRU5BQkxF
KFNIQURPV19ET00pIGlzIGRpc2FibGVkLgogZmFzdC9kb20vc2hhZG93CiBlZGl0aW5nL3NoYWRv
dwotaW5zcGVjdG9yL2VsZW1lbnRzL3VwZGF0ZS1zaGFkb3dkb20uaHRtbAogYWNjZXNzaWJpbGl0
eS9jb3JyZXNwb25kaW5nLWNvbnRyb2wtZGVsZXRlZC1jcmFzaC5odG1sCiBlZGl0aW5nL3RleHQt
aXRlcmF0b3IvYmFzaWMtaXRlcmF0aW9uLXNoYWRvd2RvbS5odG1sCiAKQEAgLTU0Nyw4ICs1MDcs
NiBAQCB3ZWJraXQub3JnL2IvODI2NjUgaHR0cC90ZXN0cy93ZWJhcmNoaXZlL3Rlc3QtY3NzLXVy
bC1lbmNvZGluZy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODI2NjUgd2ViYXJjaGl2
ZS90ZXN0LWNzcy11cmwtcmVzb3VyY2VzLWluLXN0eWxlc2hlZXRzLmh0bWwgWyBGYWlsdXJlIF0K
IHdlYmtpdC5vcmcvYi84MjY2NSB3ZWJhcmNoaXZlL3Rlc3QtY3NzLXVybC1yZXNvdXJjZXMtaW5s
aW5lLXN0eWxlcy5odG1sIFsgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi84MjY3MSBodHRwL3Rl
c3RzL2luc3BlY3Rvci9yZXNvdXJjZS1oYXItY29udmVyc2lvbi5odG1sIFsgRmFpbHVyZSBdCi0K
IHdlYmtpdC5vcmcvYi84MjY3MiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JhbmdlLXRlc3Qu
aHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvODI3NjIgZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtZHVyaW5nLW1vZGFsLmh0bWwKQEAgLTU2MiwxMSArNTIwLDYg
QEAgd2Via2l0Lm9yZy9iLzgyODE3IHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Rv
cmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2UKIHdlYmtpdC5vcmcvYi84MjgxNyBzdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0cmFja2VyL3N0b3JhZ2UtdHJhY2tlci03LXVz
YWdlLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzgyODE3IHN0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RvcmFnZXRyYWNrZXIvc3RvcmFnZS10cmFja2VyLTMtZGVs
ZXRlLWFsbC5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAotIyBXZSBkb24ndCBpbXBsZW1lbnQgc3Vw
cG9ydCBmb3IgSW5zcGVjdG9yQ2xpZW50OjpvdmVycmlkZURldmljZU1ldHJpY3MoKSBpbiBwbGF0
Zm9ybXMgb3RoZXIgdGhhbiBDaHJvbWl1bQotIyBGSVhNRTogRGVsZXRlIHRoaXMgdGVzdC4KLXdl
YmtpdC5vcmcvYi84Mjg4NiBpbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLmh0
bWwKLXdlYmtpdC5vcmcvYi84MjkzMiBpbnNwZWN0b3IvcHJvZmlsZXIvY3B1LXByb2ZpbGVyLXBy
b2ZpbGluZy5odG1sCi0KIHdlYmtpdC5vcmcvYi84Mjk3MiBwbHVnaW5zL2tleWJvYXJkLWV2ZW50
cy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84Mjk3MiBwbHVnaW5zL2xheW91
dC1pbi1iZWZvcmVsb2FkLWxpc3RlbmVyLWFmZmVjdHMtcGx1Z2luLWxvYWRpbmcuaHRtbCBbIFBh
c3MgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODI5NzIgcGx1Z2lucy9tb3VzZS1ldmVudHMtZml4
ZWRwb3MuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCkBAIC01NzQsOCArNTI3LDYgQEAgd2Via2l0Lm9y
Zy9iLzgyOTcyIHBsdWdpbnMvbXVsdGlwbGUtcGx1Z2lucy5odG1sIFsgUGFzcyBGYWlsdXJlIF0K
IAogd2Via2l0Lm9yZy9iLzgyOTc2IG1lZGlhL1czQy92aWRlby9uZXR3b3JrU3RhdGUvbmV0d29y
a1N0YXRlX2R1cmluZ19wcm9ncmVzcy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAotd2Via2l0Lm9y
Zy9iLzgyOTc4IGluc3BlY3Rvci9zdHlsZXMvc3ZnLXN0eWxlLnhodG1sIFsgUGFzcyBGYWlsdXJl
IF0KLQogd2Via2l0Lm9yZy9iLzgyOTc5IGZhc3QvY2FudmFzLzJkLnRleHQuZHJhdy5maWxsLm1h
eFdpZHRoLmdyYWRpZW50Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzgyOTc5
IGNhbnZhcy9waGlsaXAvdGVzdHMvMmQudGV4dC5kcmF3LmFsaWduLmNlbnRlci5odG1sIFsgUGFz
cyBGYWlsdXJlIF0KIApAQCAtNTkyLDggKzU0Myw2IEBAIHdlYmtpdC5vcmcvYi84MzYxOCBmYXN0
L2RvbS9pbmxpbmUtZXZlbnQtYXR0cmlidXRlcy1yZWxlYXNlLmh0bWwgWyBQYXNzIEZhaWx1cmUK
IHdlYmtpdC5vcmcvYi84NDEwMiBmYXN0L3Byb2ZpbGVyL3N0b3AtcHJvZmlsaW5nLWFmdGVyLXNl
dFRpbWVvdXQuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODQxMDIgZmFzdC9w
cm9maWxlci9kZWFkLXRpbWUuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi84
NTMxOSBpbnNwZWN0b3IvZGVidWdnZXIvbGlua2lmaWVyLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQot
CiAjIEZhaWxpbmcgc3VicGl4ZWwgcmVmZXJlbmNlIHRlc3RzCiB3ZWJraXQub3JnL2IvODU1MzIg
ZmFzdC9zdWItcGl4ZWwvZmlsZS11cGxvYWQtY29udHJvbC1hdC1mcmFjdGlvbmFsLW9mZnNldC5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODU1MzIgZmFzdC9zdWItcGl4
ZWwvem9vbWVkLWltYWdlLXRpbGVzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KQEAgLTYxMywx
MCArNTYyLDYgQEAgd2Via2l0Lm9yZy9iLzg1NTI1IG1lZGlhL3ZpZGVvLXBsYXllZC1yZXNldC5o
dG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzg1OTY5IGh0dHAvdGVzdHMvbG9h
ZGluZy9wb3N0LWluLWlmcmFtZS13aXRoLWJhY2stbmF2aWdhdGlvbi5odG1sCiAKLSMgSW5zcGVj
dG9yIG9ubHkgc3VwcG9ydHMgZXZhbHVhdGlvbiBpbiBjb250ZW50IHNjcmlwdCB3b3JsZCB3aXRo
IHY4Ci13ZWJraXQub3JnL2IvODU3MDkgaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1l
dmFsLWNvbnRlbnQtc2NyaXB0Lmh0bWwKLXdlYmtpdC5vcmcvYi84NTcwOSBpbnNwZWN0b3IvZXh0
ZW5zaW9ucy9leHRlbnNpb25zLWF1ZGl0cy1jb250ZW50LXNjcmlwdC5odG1sCi0KIHdlYmtpdC5v
cmcvYi84NjQ4MCBwbHVnaW5zL25wcnVudGltZS9kZWxldGUtcGx1Z2luLXdpdGhpbi1zZXRQcm9w
ZXJ0eS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODY0ODAgcGx1Z2lucy9ucHJ1bnRp
bWUvZGVsZXRlLXBsdWdpbi13aXRoaW4taGFzUHJvcGVydHktcmV0dXJuLXRydWUuaHRtbCBbIEZh
aWx1cmUgXQogd2Via2l0Lm9yZy9iLzg2NDgwIHBsdWdpbnMvbnBydW50aW1lL2RlbGV0ZS1wbHVn
aW4td2l0aGluLWhhc1Byb3BlcnR5LXJldHVybi1mYWxzZS5odG1sIFsgRmFpbHVyZSBdCkBAIC02
NDAsOCArNTg1LDYgQEAgd2Via2l0Lm9yZy9iLzg5NTI4IFsgTGlvbiBdIHN2Zy9maWx0ZXJzL2Zl
U3BlY3VsYXJMaWdodC1wcmVtdWx0aXBsaWVkLnN2ZyBbIEltYWcKICMgSW1wbGVtZW50IHRleHRJ
bnB1dENvbnRyb2xsZXIuc2V0Q29tcG9zaXRpb24oKQogd2Via2l0Lm9yZy9iLzg5ODQ1IGZhc3Qv
Zm9ybXMvaW5wdXQtc2V0LWNvbXBvc2l0aW9uLXNjcm9sbC5odG1sIFsgRmFpbHVyZSBdCiAKLXdl
YmtpdC5vcmcvYi85MDcwNyBpbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtcmVjZWl2ZS1yZXNw
b25zZS1ldmVudC5odG1sIFsgUGFzcyBGYWlsdXJlIF0KLQogd2Via2l0Lm9yZy9iLzkwNzI0IGNv
bXBvc2l0aW5nL2lmcmFtZXMvaWZyYW1lLXNpemUtZnJvbS16ZXJvLmh0bWwgWyBQYXNzIEZhaWx1
cmUgXQogCiBjb21wb3NpdGluZy9pZnJhbWVzL292ZXJsYXBwZWQtbmVzdGVkLWlmcmFtZXMuaHRt
bCBbIFBhc3MgRmFpbHVyZSBdCkBAIC04NzYsNyArODE5LDYgQEAgZmFzdC9kb20vY3VzdG9tCiAK
ICMgQ1NTIFZhcmlhYmxlcyBhcmUgbm90IHlldCBlbmFibGVkLgogd2Via2l0Lm9yZy9iLzg1NTgw
IGZhc3QvY3NzL3ZhcmlhYmxlcwotd2Via2l0Lm9yZy9iLzg1NTgwIGluc3BlY3Rvci9zdHlsZXMv
dmFyaWFibGVzCiAKICMgQ1NTIGltYWdlLXJlc29sdXRpb24gaXMgbm90IHlldCBlbmFibGVkLgog
d2Via2l0Lm9yZy9iLzg1MjYyIGZhc3QvY3NzL2ltYWdlLXJlc29sdXRpb24KQEAgLTkzMSw3ICs4
NzMsNiBAQCB3ZWJraXQub3JnL2IvMTExOTAyIFsgRGVidWcgXSBodHRwL3Rlc3RzL3NlY3VyaXR5
L1hGcmFtZU9wdGlvbnMveC1mcmFtZS1vcHRpb25zLQogd2Via2l0Lm9yZy9iLzU4MTkyIGZhc3Qv
ZG9tL2ZyYW1lLWxvYWRpbmctdmlhLWRvY3VtZW50LXdyaXRlLmh0bWwgWyBGYWlsdXJlIFBhc3Mg
XQogd2Via2l0Lm9yZy9iLzU4MTkyIGh0dHAvdGVzdHMvYXBwY2FjaGUvZmFpbC1vbi11cGRhdGUt
Mi5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIHdlYmtpdC5vcmcvYi81ODE5MiBodHRwL3Rlc3RzL2Fw
cGNhY2hlL2ZhaWwtb24tdXBkYXRlLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQotd2Via2l0Lm9yZy9i
LzU4MTkyIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtd2Vic29ja2V0LWVycm9yLmh0bWwg
WyBGYWlsdXJlIFBhc3MgXQogd2Via2l0Lm9yZy9iLzU4MTkyIGZhc3QvY2FudmFzL3dlYmdsL2ds
LXRleGltYWdlLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogd2Via2l0Lm9yZy9iLzU4MTkyIHN2Zy9k
b20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtc2V0LWhyZWYuc3ZnIFsgRmFpbHVyZSBQYXNzIF0K
IApAQCAtMTAwNyw5ICs5NDgsNiBAQCB3ZWJraXQub3JnL2IvODQxODYgZmFzdC90ZXh0LWF1dG9z
aXppbmcKICMgU2tpcCB0ZXN0cyBpbiBmYXN0L3RleHQvc2hhcGluZwogd2Via2l0Lm9yZy9iLzkw
OTUxIGZhc3QvdGV4dC9zaGFwaW5nCiAKLSMgKHIxMjU3OTApOiBOZXdseSBhZGRlZCB0ZXN0IGlu
c3BlY3Rvci90aW1lbGluZS90aW1lbGluZS1kZWNvZGUtcmVzaXplLmh0bWwgaXMgZmFpbGluZyBv
biBtYWMKLXdlYmtpdC5vcmcvYi85NDM3NCBpbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtZGVj
b2RlLXJlc2l6ZS5odG1sIFsgRmFpbHVyZSBdCi0KICMgRmxha2V5IFdlYkdMIHRlc3RzCiB3ZWJr
aXQub3JnL2IvOTM1NjAgZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2Ut
MmQtd2l0aC1hcnJheS1idWZmZXItdmlldy5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIHdlYmtpdC5v
cmcvYi85MzU2MCBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13
aXRoLWltYWdlLWRhdGEtcmdiNTY1Lmh0bWwgWyBGYWlsdXJlIFBhc3MgXQpAQCAtMTE2Myw4ICsx
MTAxLDYgQEAgd2Via2l0Lm9yZy9iLzExMTY0NyBbIERlYnVnIF0gc3B1dG5pay9Db25mb3JtYW5j
ZS8xMl9TdGF0ZW1lbnQvMTIuNl9JdGVyYXRpb25fU3QKIHdlYmtpdC5vcmcvYi8xMTE2NDcgWyBE
ZWJ1ZyBdIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTNfRnVuY3Rpb25fRGVmaW5pdGlvbi9TMTNfQTRf
VDQuaHRtbCBbIFNsb3cgXQogd2Via2l0Lm9yZy9iLzExMTY0NyBbIERlYnVnIF0gc3B1dG5pay9V
bmljb2RlL1VuaWNvZGVfMjE4L1M3LjZfQTUuM19UMi5odG1sIFsgU2xvdyBdCiAKLXdlYmtpdC5v
cmcvYi8xMTE3NTQgaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLWV4cGFuZC1zY29wZS5odG1s
IFsgQ3Jhc2ggUGFzcyBdCi0KIHdlYmtpdC5vcmcvYi8xMTE2MDYgZmFzdC9ib3JkZXJzL2JvcmRl
ci1maXQtMi5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xMTE2MDYgZmFzdC9i
b3JkZXJzL2JvcmRlci1maXQuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTEx
NjA2IGZhc3QvcmVwYWludC9ib3JkZXItZml0LWxpbmVzLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQpA
QCAtMTI0NiwxMiArMTE4Miw2IEBAIHdlYmtpdC5vcmcvYi8xMTUyOTIgZmFzdC93cml0aW5nLW1v
ZGUvamFwYW5lc2UtcnVieS12ZXJ0aWNhbC1ybC5odG1sCiB3ZWJraXQub3JnL2IvMTE1MjkyIGZh
c3Qvd3JpdGluZy1tb2RlL3ZlcnRpY2FsLWJhc2VsaW5lLWFsaWdubWVudC5odG1sCiB3ZWJraXQu
b3JnL2IvMTE1MjkyIGZhc3Qvd3JpdGluZy1tb2RlL3ZlcnRpY2FsLWZvbnQtZmFsbGJhY2suaHRt
bAogCi13ZWJraXQub3JnL2IvMTA1OTg4IFsgRGVidWcgXSBpbnNwZWN0b3IvZGVidWdnZXIvcGF1
c2UtaW4taW50ZXJuYWwtc2NyaXB0Lmh0bWwgWyBQYXNzIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8x
MDU5ODggWyBEZWJ1ZyBdIGluc3BlY3Rvci9kZWJ1Z2dlci93YXRjaC1leHByZXNzaW9ucy1wYW5l
bC1zd2l0Y2guaHRtbCBbIFBhc3MgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzEwNTk4OCBbIERlYnVn
IF0gaW5zcGVjdG9yL2RlYnVnZ2VyL3Byb3BlcnRpZXMtc3BlY2lhbC5odG1sIFsgUGFzcyBDcmFz
aCBdCi13ZWJraXQub3JnL2IvMTA1OTg4IFsgRGVidWcgXSBpbnNwZWN0b3IvZGVidWdnZXIvcmV2
ZWFsLWV4ZWN1dGlvbi1saW5lLmh0bWwgWyBQYXNzIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xMDU5
ODggWyBEZWJ1ZyBdIGluc3BlY3Rvci9kZWJ1Z2dlci93YXRjaC1leHByZXNzaW9ucy1wcmVzZXJ2
ZS1leHBhbnNpb24uaHRtbCBbIFBhc3MgQ3Jhc2ggXQotCiAjIEZhaWxzIHdpdGggV2ViS2l0MSBv
bmx5LgogZWRpdGluZy9zZWN1cmUtaW5wdXQvcmVzZXQtc3RhdGUtb24tbmF2aWdhdGlvbi5odG1s
IFsgRmFpbHVyZSBdCiAKQEAgLTEyNjEsMTAgKzExOTEsNiBAQCB3ZWJraXQub3JnL2IvMTE2MjQ0
IGZhc3QvZXZlbnRzL21vdXNlLWN1cnNvci1pbWFnZS1zZXQuaHRtbCBbIEZhaWx1cmUgUGFzcyBd
CiAKIHdlYmtpdC5vcmcvYi8xMTYyNDUgY2FudmFzL3BoaWxpcC90ZXN0cy8yZC50ZXh0LmRyYXcu
Zm9udGZhY2Uubm90aW5wYWdlLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2Iv
MTE2NTgyIFsgRGVidWcgXSBpbnNwZWN0b3Ivc3R5bGVzL2ltcG9ydC1wc2V1ZG9jbGFzcy1jcmFz
aC5odG1sIFsgUGFzcyBDcmFzaCBdCi0KLXdlYmtpdC5vcmcvYi8xMTY1OTIgaW5zcGVjdG9yL2dl
b2xvY2F0aW9uLWVycm9yLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQotCiAjIEFzc2VydHMgaW4gV2Vi
S2l0MS1kZWJ1ZyBkdWUgdG8gYSBwcmVleGlzdGluZyBpc3N1ZSB3aXRoIG92ZXJmbG93IHJlY3Qg
Y29tcHV0YXRpb24KIHdlYmtpdC5vcmcvYi8xMTgyNjkgY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4
ZWQtcG9zaXRpb24tZmxpcHBlZC13cml0aW5nLW1vZGUuaHRtbAogCkBAIC0xMjc5LDggKzEyMDUs
NiBAQCB3ZWJraXQub3JnL2IvODI3NDcgZmFzdC9ldmVudHMvc2Nyb2xsLWRpdi13aXRoLXByZXZl
bnQtZGVmYXVsdC1pbi1zdWJmcmFtZS5odG1sCiAKIHdlYmtpdC5vcmcvYi85MDcwOCBmdWxsc2Ny
ZWVuL2V4aXQtZnVsbC1zY3JlZW4taWZyYW1lLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCi13ZWJr
aXQub3JnL2IvMTIwMDg1IFsgTGlvbiBdIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlLXRy
ZWUvcmVzb3VyY2UtdHJlZS1kb2N1bWVudC11cmwuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCi0KIHdl
YmtpdC5vcmcvYi8xMjAwODcgWyBMaW9uIF0gZmFzdC9mb3Jtcy9zdWJtaXQtdG8tdXJsLWZyYWdt
ZW50Lmh0bWwgWyBQYXNzIENyYXNoIF0KIAogd2Via2l0Lm9yZy9iLzExNzk2MiBbIExpb24gXSBt
ZWRpYS92aWRlby1wbGF5ZWQtY29sbGFwc2UuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCkBAIC0xMjk3
LDIxICsxMjIxLDE0IEBAIHdlYmtpdC5vcmcvYi8xMjA5MjMgYW5pbWF0aW9ucy9jcm9zcy1mYWRl
LWJhY2tncm91bmQtaW1hZ2UuaHRtbCBbIEltYWdlT25seUZhaWx1CiAKIHdlYmtpdC5vcmcvYi8x
MjEwNTMgZmFzdC9oaXN0b3J5L2dvLWJhY2stdG8taWZyYW1lLXdpdGgtcGx1Z2luLmh0bWwgWyBD
cmFzaCBUaW1lb3V0IFBhc3MgXQogCi13ZWJraXQub3JnL2IvMTIxMzQzIGh0dHAvdGVzdHMvaW5z
cGVjdG9yL25ldHdvcmsvbmV0d29yay1zaXplLWNodW5rZWQuaHRtbCBbIEZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzEyMTM0MyBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstc2l6
ZS1zeW5jLmh0bWwgWyBGYWlsdXJlIF0KLQogd2Via2l0Lm9yZy9iLzExNDI4MCBzdmcvYW5pbWF0
aW9ucy9zbWlsLWxlYWstZHluYW1pY2FsbHktYWRkZWQtZWxlbWVudC1pbnN0YW5jZXMuc3ZnIFsg
UGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMTQyODAgc3ZnL2FuaW1hdGlvbnMvc21pbC1s
ZWFrLWVsZW1lbnQtaW5zdGFuY2VzLW5vQmFzZVZhbFJlZi5zdmcgWyBQYXNzIEZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzExNDI4MCBzdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstZWxlbWVudC1pbnN0
YW5jZXMuc3ZnIFsgUGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMTQyODAgc3ZnL2FuaW1h
dGlvbnMvc21pbC1sZWFrLWVsZW1lbnRzLnN2ZyBbIFBhc3MgRmFpbHVyZSBdCiAKIHdlYmtpdC5v
cmcvYi85MDM2MyBbIERlYnVnIF0gZmFzdC9vdmVyZmxvdy9sb3RzLW9mLXNpYmxpbmctaW5saW5l
LWJveGVzLmh0bWwgWyBGYWlsdXJlIFBhc3MgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTA0NTEx
IFsgRGVidWcgXSBpbnNwZWN0b3IvZWxlbWVudHMvZWRpdC1kb20tYWN0aW9ucy5odG1sIFsgRmFp
bHVyZSBQYXNzIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzEyMTQ1MiBbIERlYnVnIF0gZmFzdC9m
cmFtZXMvbG90cy1vZi1vYmplY3RzLmh0bWwgWyBGYWlsdXJlIFBhc3MgVGltZW91dCBdCiAKLSMg
RnJlcXVlbnRseSB0aW1lcyBvdXQgaW4gRHVtcFJlbmRlclRyZWUgKHdoaWNoIGlzIHJlcG9ydGVk
IGFzIGEgdGV4dCBmYWlsdXJlKS4KLXdlYmtpdC5vcmcvYi8xMjA1NDQgaW5zcGVjdG9yL3N0b3Jh
Z2UtcGFuZWwtZG9tLXN0b3JhZ2UtdXBkYXRlLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQotCiB3ZWJr
aXQub3JnL2IvMTIxNTgyIFsgTGlvbiBdIG1lZGlhL3RyYWNrL3RyYWNrLWluLWJhbmQtZHVwbGlj
YXRlLXRyYWNrcy13aGVuLXNvdXJjZS1jaGFuZ2VzLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0
Lm9yZy9iLzExNzQyNyBjb21wb3NpdGluZy9yZWZsZWN0aW9ucy9sb2FkLXZpZGVvLWluLXJlZmxl
Y3Rpb24uaHRtbCBbIFBhc3MgRmFpbHVyZSBDcmFzaCBUaW1lb3V0IF0KQEAgLTEzMjEsOCArMTIz
OCw2IEBAIHdlYmtpdC5vcmcvYi85NjY0MiBsb2FkZXIvZ28tYmFjay10by1kaWZmZXJlbnQtd2lu
ZG93LXNpemUuaHRtbCBbIFBhc3MgRmFpbHVyZSBUCiAKIHdlYmtpdC5vcmcvYi8xMTQxOTMgdHJh
bnNpdGlvbnMvY2FuY2VsLXRyYW5zaXRpb24uaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAKLXdlYmtp
dC5vcmcvYi8xMjE5OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWlmcmFt
ZS1sb2FkLWFuZC1kZWxldGUuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCi0KIHdlYmtpdC5vcmcvYi8x
MjE5OTAgYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi8xMjE5OTIgbWVkaWEvbWVkaWEtdm9sdW1lLXNsaWRlci1yZW5kZXJlZC1iZWxvdy5o
dG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTIxOTkyIG1lZGlhL21lZGlhLXZvbHVtZS1z
bGlkZXItcmVuZGVyZWQtbm9ybWFsLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQpAQCAtMTM3Niw3
ICsxMjkxLDMgQEAgd2Via2l0Lm9yZy9iLzExNDc0NCBtZWRpYS92aWRlby1sYXllci1jcmFzaC5o
dG1sIFsgUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzEyMjQ5MCBbIERlYnVn
IF0gbWF0aG1sL3ZlcnktbGFyZ2Utc3RyZXRjaHktb3BlcmF0b3JzLmh0bWwgWyBTa2lwIF0KIAog
d2Via2l0Lm9yZy9iLzEyMjUwOCBjb21wb3NpdGluZy92aWRlby92aWRlby1yZWZsZWN0aW9uLmh0
bWwgWyBQYXNzIFRpbWVvdXQgXQotCi13ZWJraXQub3JnL2IvMTIyNTA5IGluc3BlY3Rvci9kZWJ1
Z2dlci9kZWJ1Z2dlci1hY3RpdmF0aW9uLWNyYXNoMi5odG1sIFsgUGFzcyBGYWlsdXJlIF0KLQot
d2Via2l0Lm9yZy9iLzEyMjUxMCBpbnNwZWN0b3Ivc3R5bGVzL2FkZC1uZXctcnVsZS13aXRoLXN0
eWxlLWFmdGVyLWJvZHkuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4teHAvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi14cC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGZjMTg2MjMuLmU2ZjNlMjkgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi14cC9UZXN0RXhwZWN0YXRpb25zCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi14cC9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNyw2ICsz
Nyw3IEBAIGZhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTMyCiBmYXN0L3N1Yi1waXhlbAogCi0jIFJFR1JFU1NJ
T04gKHI4MzkyOCBvciBiZWZvcmUpOiBTb21lIHRlc3RzIGZhaWxpbmcgYXNzZXJ0aW9ucyBpbiBN
YXJrU3RhY2s6OmludGVybmFsQXBwZW5kIC8gTWFya1N0YWNrOjpkcmFpbgotIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg2NTcKLWluc3BlY3Rvci9zdHlsZXMvc3R5
bGVzLWNhbmNlbC1lZGl0aW5nLmh0bWwKKyMgU2tpcHBpbmcgdGhlIHRlc3RzIGZvciB0aGUgb2xk
IGluc3BlY3RvciBVSQoraW5zcGVjdG9yIFsgU2tpcCBdCitodHRwL3Rlc3RzL2luc3BlY3RvciBb
IFNraXAgXQoraHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZCBbIFNraXAgXQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1M2RmYzc3Li42OWJkODcwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpAQCAtODIsMTkgKzgy
LDExIEBAIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9waW5nLWNyb3NzLW9yaWdpbi1mcm9tLWh0dHBz
Lmh0bWwKIGh0dHAvdGVzdHMvc3NsCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWZyYW1lLWFj
Y2Vzcy1wcm90b2NvbC1leHBsaWNpdC1kb21haW4uaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9j
cm9zcy1mcmFtZS1hY2Nlc3MtcHJvdG9jb2wuaHRtbAotaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29u
c29sZS13ZWJzb2NrZXQtZXJyb3IuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NTM3MgotaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3Jr
LXNpemUuaHRtbAotaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLXRpbWluZy5o
dG1sCi0KLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzkzCi1o
dHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstc2l6ZS1jaHVua2VkLmh0bWwKLWh0
dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1zaXplLXN5bmMuaHRtbAotCi0jIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA5NwotaHR0cC90ZXN0cy9p
bnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWRpc2FibGUtY2FjaGUtbWVtb3J5Lmh0bWwKLWh0dHAv
dGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1kaXNhYmxlLWNhY2hlLXhocnMuaHRtbAor
IyBTa2lwcGluZyB0aGUgdGVzdHMgZm9yIHRoZSBvbGQgaW5zcGVjdG9yIFVJCitpbnNwZWN0b3Ig
WyBTa2lwIF0KK2h0dHAvdGVzdHMvaW5zcGVjdG9yIFsgU2tpcCBdCitodHRwL3Rlc3RzL2luc3Bl
Y3Rvci1lbmFibGVkIFsgU2tpcCBdCiAKICMgRmFpbHMgPHJkYXI6Ly9wcm9ibGVtLzU2NzQyODk+
CiBtZWRpYS92aWRlby1zZWVrLXBhc3QtZW5kLXBhdXNlZC5odG1sCkBAIC0zODksOSArMzgxLDYg
QEAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1zeW5jLXZzLWFzeW5j
LWFzc2VydGlvbi1mYWlsdXJlLmh0bWwKICMgRmFpbGluZyBpbiBSZWxlYXNlIGJ1aWxkcyBodHRw
Oi8vd2Via2l0Lm9yZy9iLzQ2OTc2CiBzcHV0bmlrL0NvbmZvcm1hbmNlLzExX0V4cHJlc3Npb25z
LzExLjdfQml0d2lzZV9TaGlmdF9PcGVyYXRvcnMvMTEuNy4zX1RoZV9VbnNpZ25lZF9SaWdodF9T
aGlmdF9PcGVyYXRvci9TMTEuNy4zX0EyLjNfVDEuaHRtbAogCi0jIFNvbWV0aW1lcyBmYWlscyBo
dHRwczovL3dlYmtpdC5vcmcvYi80OTQxMgotaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLW5l
dHdvcmstcmVzb3VyY2UuaHRtbAotCiAjIFNvbWV0aW1lcyBmYWlscyBodHRwOi8vd2Via2l0Lm9y
Zy9iLzQ2OTk4CiBzdmcvZG9tL1NWR1NjcmlwdEVsZW1lbnQvc2NyaXB0LWxvYWQtYW5kLWVycm9y
LWV2ZW50cy5zdmcKIApAQCAtNDc3LDEyICs0NjYsNiBAQCBodHRwL3Rlc3RzL3dlYnNvY2tldAog
IyBUaW1pbmcgb3V0IGh0dHA6Ly93ZWJraXQub3JnL2IvNTg2NTQKIG1lZGlhL3ZpZGVvLWNvbnRy
b2xzLWluLW1lZGlhLWRvY3VtZW50Lmh0bWwKIAotIyBTb21ldGltZXMgZmFpbHMgaHR0cDovL3dl
YmtpdC5vcmcvYi81ODM2NwotaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2UtdHJlZS9yZXNv
dXJjZS10cmVlLWRvY3VtZW50LXVybC5odG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJj
ZS10cmVlL3Jlc291cmNlLXRyZWUtZnJhbWUtbmF2aWdhdGUuaHRtbAotaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2UtdHJlZS9yZXNvdXJjZS10cmVlLXJlbG9hZC5odG1sCi1odHRwL3Rlc3Rz
L2luc3BlY3Rvci9yZXNvdXJjZS10cmVlL3Jlc291cmNlLXRyZWUtZnJhbWUtYWRkLmh0bWwKLQog
IyBGbGFreSBodHRwOi8vd2Via2l0Lm9yZy9iLzYyNTYxCiBhbmltYXRpb25zL2FuaW1hdGlvbi1k
aXJlY3Rpb24tbm9ybWFsLmh0bWwKIApAQCAtMTA1Myw5ICsxMDM2LDYgQEAgbWVkaWEvbWVkaWEt
ZG9jdW1lbnQtYXVkaW8tc2l6ZS5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zODc5NCAtIGNvbnRhaW5zIGFuIEFMRVJUIG1lc3NhZ2UsIGluZGljYXRpbmcg
YSBmYWlsdXJlCiBmYXN0L2Nzcy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFz
aC5odG1sCiAKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Nzk1
IC0gZG9lc24ndCBwcmludCBQYWludEV2ZW50IGluc3RydW1lbnRhdGlvbiBvdXRwdXQKLWluc3Bl
Y3Rvci90aW1lbGluZS90aW1lbGluZS1wYWludC5odG1sCi0KICMgTmV3IGNhbnZhcyB0ZXN0IHN1
aXRlIGZyb20gaHR0cDovL3BoaWxpcC5odG1sNS5vcmcvdGVzdHMvY2FudmFzL3N1aXRlL3Rlc3Rz
LwogY2FudmFzL3BoaWxpcAogCkBAIC0xMDgzLDcgKzEwNjMsNiBAQCBlZGl0aW5nL3NwZWxsaW5n
L3NwZWxsaW5nLW1hcmtlci1kZXNjcmlwdGlvbi5odG1sCiAKICMgSW5kZXhlZERCIGlzIG5vdCB5
ZXQgZW5hYmxlZC4KIHN0b3JhZ2UvaW5kZXhlZGRiCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9pbmRl
eGVkZGIKIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWluZGV4ZWRkYi1hbGxvd2Vk
Lmh0bWwKIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWluZGV4ZWRkYi5odG1sCiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi13b3JrZXItaW5kZXhlZGRiLWFsbG93ZWQu
aHRtbApAQCAtMTEyMSw3ICsxMTAwLDYgQEAgZmFzdC90ZXh0L2h5cGhlbnMuaHRtbAogZmFzdC9l
dmVudHMvc2hvdy1tb2RhbC1kaWFsb2ctb25ibHVyLW9uZm9jdXMuaHRtbAogZmFzdC9oYXJuZXNz
L3Nob3ctbW9kYWwtZGlhbG9nLmh0bWwKIGZhc3QvZXZlbnRzL3Njcm9sbC1ldmVudC1kdXJpbmct
bW9kYWwtZGlhbG9nLmh0bWwKLWluc3BlY3Rvci9jb25zb2xlL2NvbnNvbGUtbG9uZy1ldmFsLWNy
YXNoLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy9vcGVuLXdpbmRvdy1taW4tc2l6ZS5odG1sCiBqcy9k
b20vZnVuY3Rpb24tbGVuZ3RoLmh0bWwKIApAQCAtMTI3Miw0MSArMTI1MCw2IEBAIGh0dHAvdGVz
dHMvYXBwY2FjaGUvb3JpZ2luLXF1b3RhLmh0bWwKIGh0dHAvdGVzdHMvYXBwY2FjaGUvb3JpZ2lu
LXF1b3RhLWNvbnRpbnVlZC1kb3dubG9hZC5odG1sCiBodHRwL3Rlc3RzL2FwcGNhY2hlL29yaWdp
bi1xdW90YS1jb250aW51ZWQtZG93bmxvYWQtbXVsdGlwbGUtbWFuaWZlc3RzLmh0bWwKIAotIyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMzMzIKLWluc3BlY3Rvci9k
ZWJ1Z2dlci9kb20tYnJlYWtwb2ludHMuaHRtbAotaW5zcGVjdG9yL2RlYnVnZ2VyL2V2ZW50LWxp
c3RlbmVyLWJyZWFrcG9pbnRzLmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci9zdGVwLXRocm91Z2gt
ZXZlbnQtbGlzdGVuZXJzLmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci94aHItYnJlYWtwb2ludHMu
aHRtbAotCi0jIEpTQyBkb2Vzbid0IHN1cHBvcnQgaGVhcCBwcm9maWxpbmcKLSMgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg1Ci1pbnNwZWN0b3IvcHJvZmlsZXIv
aGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVyLmh0bWwKLWluc3BlY3Rvci9wcm9maWxl
ci9oZWFwLXNuYXBzaG90LWNvbXBhcmlzb24tZG9tLWdyb3Vwcy1jaGFuZ2UuaHRtbAotaW5zcGVj
dG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtY29tcGFyaXNvbi1leHBhbnNpb24tcHJlc2VydmVk
LXdoZW4tc29ydGluZy5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1jb21w
YXJpc29uLXNob3ctYWxsLmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxv
YWRlci5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1yZXZlYWwtaW4tZG9t
aW5hdG9ycy12aWV3Lmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXN1bW1h
cnktcmV0YWluZXJzLmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXN1bW1h
cnktc2hvdy1yYW5nZXMuaHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qtc3Vt
bWFyeS1zb3J0aW5nLWZpZWxkcy5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hv
dC1zdW1tYXJ5LXNvcnRpbmcuaHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qt
c3VtbWFyeS1zb3J0aW5nLWluc3RhbmNlcy5odG1sCi13ZWJraXQub3JnL2IvNTA0ODUgaW5zcGVj
dG9yLXByb3RvY29sL2hlYXAtcHJvZmlsZXIKLQotd2Via2l0Lm9yZy9iLzczOTM2IGluc3BlY3Rv
ci9wcm9maWxlci9jYW52YXMyZC9jYW52YXMtaGFzLXVuaW5zdHJ1bWVudGVkLWNhbnZhc2VzLmh0
bWwKLXdlYmtpdC5vcmcvYi83MzkzNiBpbnNwZWN0b3IvcHJvZmlsZXIvY2FudmFzMmQvY2FudmFz
LXN0YWNrLXRyYWNlLmh0bWwKLXdlYmtpdC5vcmcvYi83MzkzNiBpbnNwZWN0b3IvcHJvZmlsZXIv
Y2FudmFzMmQvY2FudmFzLXJlcGxheS1sb2ctZ3JpZC5odG1sCi0KLSMgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzAwCi1pbnNwZWN0b3IvZGVidWdnZXIvbGl2ZS1l
ZGl0Lmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci9saXZlLWVkaXQtYnJlYWtwb2ludHMuaHRtbAot
Ci0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTY1MgotaW5zcGVj
dG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLWNvbXBpbGUtYW5kLXJ1bi5odG1sCi0KLSMgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDAzCi1odHRwL3Rlc3RzL2luc3BlY3Rv
ci9jb21waWxlci1zb3VyY2UtbWFwcGluZy1kZWJ1Zy5odG1sCi0KICMgPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDQ4ND4KIHN2Zy9iYXRpay9wYWludHMvcGF0dGVy
blJlZ2lvbnMtcG9zaXRpb25lZC1vYmplY3RzLnN2ZwogCkBAIC0xNDk5LDcgKzE0NDIsNiBAQCBm
YXN0L2V2ZW50cy9jb25zdHJ1Y3RvcnMvd2ViZ2wtY29udGV4dC1ldmVudC1jb25zdHJ1Y3Rvci5o
dG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1h
bGxvd2VkLmh0bWwKIGh0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3Rl
LWltYWdlLWFsbG93ZWQtd2l0aC1jcmVkZW50aWFscy5odG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5
L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1ibG9ja2VkLW5vLWNyb3Nzb3JpZ2luLmh0
bWwKLWluc3BlY3Rvci9wcm9maWxlci93ZWJnbAogZmFzdC9pbWFnZXMvd2ViZ2wtdGV4aW1hZ2Uy
ZC5odG1sCiB3ZWJnbAogCkBAIC0xODA0LDE3ICsxNzQ2LDEwIEBAIGh0dHAvdGVzdHMvc2VjdXJp
dHkvdmlkZW8tY3Jvc3Mtb3JpZ2luLXJlYWRiYWNrLmh0bWwKICMgUmVxdWlyZXMgRU5BQkxFKE1F
RElBX0NBUFRVUkUpCiBmYXN0L2Zvcm1zL2ZpbGUvZmlsZS1pbnB1dC1jYXB0dXJlLmh0bWwKIAot
IyBodHRwOi8vd2Via2l0Lm9yZy9iLzgyODg2Ci1pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNj
cmVlbi1zaXplLmh0bWwKLQogIyBJbnRlcmZlcmVzIHdpdGggdGhlIG90aGVyIHJlcXVlc3RBbmlt
YXRpb25GcmFtZSB0ZXN0cwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODU2ODkKIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWRpc2FibGVk
Lmh0bWwKIAotIyBJbnNwZWN0b3Igb25seSBzdXBwb3J0cyBldmFsdWF0aW9uIGluIGNvbnRlbnQg
c2NyaXB0IHdvcmxkIHdpdGggdjgsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODU3MDkKLWluc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC1jb250
ZW50LXNjcmlwdC5odG1sCi1pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWF1ZGl0cy1j
b250ZW50LXNjcmlwdC5odG1sCi0KICMgUmViYXNlbGluZSByZXF1aXJlZCBhZnRlciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQxNjcKIGVkaXRpbmcvcGFzdGVib2Fy
ZC9pbm5lclRleHQtaW5saW5lLXRhYmxlLmh0bWwKIGVkaXRpbmcvc2VsZWN0aW9uL2lmcmFtZS5o
dG1sCkBAIC0xOTUzLDcgKzE4ODgsNiBAQCBmYXN0L3RhYmxlLzAyNy5odG1sCiBmYXN0L3RhYmxl
LzAyNy12ZXJ0aWNhbC5odG1sCiBmYXN0L3RhYmxlL21heC13aWR0aC1pbnRlZ2VyLW92ZXJmbG93
Lmh0bWwKIGZhc3Qvd3JpdGluZy1tb2RlL2ZhbGxiYWNrLW9yaWVudGF0aW9uLmh0bWwKLWluc3Bl
Y3Rvci9zdHlsZXMvc3ZnLXN0eWxlLnhodG1sCiBtZWRpYS9jb250cm9scy1hZnRlci1yZWxvYWQu
aHRtbAogbWVkaWEvY29udHJvbHMtc3RyaWN0Lmh0bWwKIG1lZGlhL2NvbnRyb2xzLXdpdGhvdXQt
cHJlbG9hZC5odG1sCkBAIC0yMjA1LDE5ICsyMTM5LDYgQEAgZmFzdC9jc3MvbmVzdGVkLWxheWVy
cy13aXRoLWhvdmVyLmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk1Nzk1CiBlZGl0aW5nL3N0eWxlL2FwcGx5LXN0eWxlLWF0b21pYy5odG1sCiAKLSMgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0Mzc0Ci1pbnNwZWN0b3IvdGlt
ZWxpbmUvdGltZWxpbmUtZGVjb2RlLXJlc2l6ZS5odG1sCi0KLSMgRmxha3kgaW5zcGVjdG9yIHRl
c3RzCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTgwMgotaHR0
cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS1yZXNvdXJjZS1lcnJvcnMuaHRtbAotaHR0cC90ZXN0
cy9pbnNwZWN0b3IvcmVzb3VyY2UtdHJlZS9yZXNvdXJjZS1yZXF1ZXN0LWNvbnRlbnQtd2hpbGUt
bG9hZGluZy5odG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9zZWFyY2gvcmVzb3VyY2VzLXNlYXJj
aC1tYXRjaC1pbmRleC5odG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmst
aW5pdGlhdG9yLWZyb20tY29uc29sZS5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFw
c2hvdC5odG1sCi1pbnNwZWN0b3Ivc3R5bGVzL21lZGlhLXF1ZXJpZXMuaHRtbAotaW5zcGVjdG9y
L3N0eWxlcy9yZWdpb24tc3R5bGUtY3Jhc2guaHRtbAotCiAjIEZsYWt5IGh0dHAvdGVzdHMvc2Vj
dXJpdHkgdGVzdHMKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1
ODAzCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2xvY2FsLWltYWdlLWZyb20tcmVtb3RlLXdoaXRlbGlz
dGVkLmh0bWwKQEAgLTIyOTYsMTIgKzIyMTcsNiBAQCBmYXN0L2RvbS9jb25zdHJ1Y3RlZC1vYmpl
Y3RzLXByb3RvdHlwZXMuaHRtbAogZmFzdC9mb3Jtcy9zdGF0ZS1yZXN0b3JlLWJyb2tlbi1zdGF0
ZS5odG1sCiBmYXN0L2h0bWwvcHJvZ3Jlc3MtdXNlci1tb2RpZnkuaHRtbAogZmFzdC9tdWx0aWNv
bC9zaHJpbmstdG8tY29sdW1uLWhlaWdodC1mb3ItcGFnaW5hdGlvbi5odG1sCi1pbnNwZWN0b3Iv
ZGV2aWNlLW9yaWVudGF0aW9uLXN1Y2Nlc3MuaHRtbAotaW5zcGVjdG9yL2dlb2xvY2F0aW9uLWVy
cm9yLmh0bWwKLWluc3BlY3Rvci9nZW9sb2NhdGlvbi1zdWNjZXNzLmh0bWwKLWluc3BlY3Rvci9n
ZW9sb2NhdGlvbi13YXRjaFBvc2l0aW9uLmh0bWwKLWluc3BlY3Rvci9zdHlsZXMvdmFyaWFibGVz
L2Nzcy12YXJpYWJsZXMuaHRtbAotaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXJlY2VpdmUt
cmVzcG9uc2UtZXZlbnQuaHRtbAogbWVkaWEvYXVkaW8tY29udHJvbHMtcmVuZGVyaW5nLmh0bWwK
IG1lZGlhL2F1ZGlvLXJlcGFpbnQuaHRtbAogbWVkaWEvY29udHJvbHMtc3R5bGluZy1zdHJpY3Qu
aHRtbApAQCAtMjMyMiwxMSArMjIzNyw2IEBAIHRhYmxlcy9tb3ppbGxhX2V4cGVjdGVkX2ZhaWx1
cmVzL21hcnZpbi90YWJsZV9vdmVyZmxvd19oaWRkZW5fdHIuaHRtbAogaHR0cC90ZXN0cy9mdWxs
c2NyZWVuL2Z1bGxzY3JlZW5lbGVtZW50LWRpZmZlcmVudC1vcmlnaW4uaHRtbAogaHR0cC90ZXN0
cy9mdWxsc2NyZWVuL2Z1bGxzY3JlZW5lbGVtZW50LXNhbWUtb3JpZ2luLmh0bWwKIGh0dHAvdGVz
dHMvaGlzdG9yeS9iYWNrLXdpdGgtZnJhZ21lbnQtY2hhbmdlLnBocAotaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvY29uc29sZS1jcm9zcy1vcmlnaW4taWZyYW1lLWxvZ2dpbmcuaHRtbAotaHR0cC90ZXN0
cy9pbnNwZWN0b3IvaW5zcGVjdC1lbGVtZW50Lmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jl
c291cmNlLWhhci1jb252ZXJzaW9uLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNl
LXBhcmFtZXRlcnMuaHRtbAotaHR0cC90ZXN0cy9pbnNwZWN0b3Ivd2Vic29ja2V0L3dlYi1zb2Nr
ZXQtZnJhbWUuaHRtbAogaHR0cC90ZXN0cy9sb2FkaW5nL3BkZi1jb21taXQtbG9hZC1jYWxsYmFj
a3MuaHRtbAogaHR0cC90ZXN0cy9sb2FkaW5nL3Bvc3QtaW4taWZyYW1lLXdpdGgtYmFjay1uYXZp
Z2F0aW9uLmh0bWwKIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtZG9jdW1lbnQuaHRtbApAQCAtMjM1
MCw5ICsyMjYwLDYgQEAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yYW5nZS10ZXN0Lmh0bWwK
IGh0dHAvdGVzdHMvc2VjdXJpdHkvc2FuZGJveGVkLWlmcmFtZS1vcmlnaW4tYWRkLmh0bWwKIGh0
dHAvdGVzdHMvc2VjdXJpdHkvc2FuZGJveGVkLWlmcmFtZS1vcmlnaW4tcmVtb3ZlLmh0bWwKIAot
I2h0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Njk0MgotaHR0cC90ZXN0
cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLXhoci1yZXBsYXkuaHRtbAotCiAjQVggcm9sZSBu
ZWVkcyB0byBiZSB1cGRhdGVkIG9uIFdpbmRvd3MsIG1hbnkgdGVzdCBjYXNlcyBpbnZvbHZlIEFY
IHJvbGUgY3Jhc2ggb3IgZmFpbAogYWNjZXNzaWJpbGl0eS9zdmctYm91bmRzLmh0bWwKIGFjY2Vz
c2liaWxpdHkvaHRtbC1odG1sLWVsZW1lbnQtaXMtaWdub3JlZC5odG1sCkBAIC0yMzcwLDkgKzIy
NzcsNiBAQCBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1sb2NhbC1zdG9yYWdlLXdr
MS5odG1sCiAjU2tpcHBlZCBvbiBvdGhlciBwbGF0Zm9ybXMgaGVyZTogaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvMTI5ODk3CiBzdmcvY3VzdG9tL2NsaXAtbWFzay1uZWdhdGl2ZS1z
Y2FsZS5zdmcKIAotI2h0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODA5
NQotaW5zcGVjdG9yL2RlYnVnZ2VyL2R5bmFtaWMtc2NyaXB0LXRhZy5odG1sCi0KICNodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgzMDYKIGNzczMvZmxleGJveC9mbGV4
Ym94LWJhc2VsaW5lLmh0bWwKICNodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTk4NzgKQEAgLTIzODYsOSArMjI5MCw2IEBAIGNzczMvc3VwcG9ydHMtZG9tLWFwaS5odG1s
CiAjIE1IVE1MIGlzIG5vdCB5ZXQgZW5hYmxlZAogbWh0bWwKIAotIyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgxNjkKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL3N0YWNr
dHJhY2VzCi0KICMgSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcgaXMgZGlzYWJsZWQK
IGZhc3QvZG9tL3RpbWVyLXRocm90dGxpbmctaGlkZGVuLXBhZ2UuaHRtbAogCkBAIC0yNDAyLDEw
ICsyMzAzLDYgQEAgdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKIHdlYmtp
dC5vcmcvYi8xMDA0MjQgZWRpdGluZy9zZWxlY3Rpb24vdXNlci1zZWxlY3QtYWxsLXNlbGVjdGlv
bi5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTAwNDI0IGVkaXRpbmcvc2VsZWN0aW9u
L3VzZXItc2VsZWN0LWFsbC13aXRoLXNoaWZ0Lmh0bWwgWyBGYWlsdXJlIF0KIAotIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk1NjcKLSMgTm90IHN1cHBvcnRlZCBv
biBNYWMgb3IgV2luZG93cyBwb3J0cwotaW5zcGVjdG9yL2VsZW1lbnRzL3VwZGF0ZS1zaGFkb3dk
b20uaHRtbAotCiAjIE5vdCBzdXBwb3J0ZWQgaW4gQ0ZOZXR3b3JrIHlldC4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDM0OQogaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC90aW1lb3V0L3htbGh0dHByZXF1ZXN0LXRpbWVvdXQtYWJvcnRlZC5odG1sCiBodHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3RpbWVvdXQveG1saHR0cHJlcXVlc3QtdGltZW91dC1vdmVycmlk
ZXNleHBpcmVzLmh0bWwKQEAgLTI0OTIsMTAgKzIzODksNiBAQCBzdmcvZG9tL1NWR1ZpZXdTcGVj
LWludmFsaWQtcmVmLWNyYXNoLmh0bWwKICMgRW5hYmxlIHdoZW4gc3VwcG9ydCBkcmFnLWFuZC1k
cm9wIGF1dG9zY3JvbGxpbmcKIHdlYmtpdC5vcmcvYi8zOTcyNSBmYXN0L2V2ZW50cy9kcmFnLWFu
ZC1kcm9wLWF1dG9zY3JvbGwuaHRtbAogCi0jIFRlbXBvcmFyaWx5IHNraXAgaW5zcGVjdG9yIHRl
c3RzIHdoaWNoIGFyZSBub3cgZmFpbGluZyBvbiB0aGUgYm90cyBkdWUgdG8gc29tZSBjb25maWd1
cmF0aW9uIHByb2JsZW0KLWluc3BlY3RvcgotaHR0cC90ZXN0cy9pbnNwZWN0b3IKLQogIyBUZW1w
b3JhcmlseSBza2lwIGEgYnVuY2ggb2YgZmFpbGluZyB0ZXN0cyBvbiBXaW5kb3dzIGJvdHMgdW50
aWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI0OQogYWNj
ZXNzaWJpbGl0eS9jb2xvci13ZWxsLmh0bWwKQEAgLTI1MjMsMTIgKzI0MTYsNiBAQCBzdmcvdGV4
dC9mb250LXNpemUtYmVsb3ctcG9pbnQtZml2ZS5zdmcKIHRhYmxlcy9tb3ppbGxhL2J1Z3MvYnVn
MTE4OC5odG1sCiB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzEzMTguaHRtbAogdGFibGVzL21vemls
bGEvYnVncy9idWcxMTMyMzUtMy5odG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkL2Nv
bnNvbGUtbG9nLWJlZm9yZS1mcmFtZS1uYXZpZ2F0aW9uLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVj
dG9yLWVuYWJsZWQvZGF0YWJhc2Utb3Blbi5odG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFi
bGVkL2RlZGljYXRlZC13b3JrZXJzLWxpc3QuaHRtbAotaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5h
YmxlZC9kb20tc3RvcmFnZS1vcGVuLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQv
ZHluYW1pYy1zY3JpcHRzLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQvaW5qZWN0
ZWQtc2NyaXB0LWRpc2NhcmQuaHRtbAogaHR0cC90ZXN0cy9taXNjL2Zhdmljb24tbG9hZHMtd2l0
aC1pY29uLWxvYWRpbmctb3ZlcnJpZGUuaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9jb29raWVz
L2ZpcnN0LXBhcnR5LWNvb2tpZS1hbGxvdy14c2x0LnhtbAogaHR0cC90ZXN0cy9zZWN1cml0eS9j
b29raWVzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1tYWluLWZyYW1lLmh0bWwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDYzMGU0
MjAuLjljYjQ2NWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4
cGVjdGF0aW9ucwpAQCAtNDMyLDE0ICs0MzIsMTAgQEAgZm9udHMvbW9ub3NwYWNlLmh0bWwKIGZv
bnRzL3NhbnMtc2VyaWYuaHRtbCAKIGZvbnRzL3NlcmlmLmh0bWwgCiAKLWluc3BlY3Rvci9kZWJ1
Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbAotaW5zcGVjdG9yL2RlYnVnZ2VyL3Jhdy1zb3Vy
Y2UtY29kZS5odG1sCi1pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWNvbnNvbGUuaHRt
bAotaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbAotaW5zcGVjdG9y
L3N0eWxlcy9zdHlsZXMtaW52YWxpZC1jb2xvci12YWx1ZXMuaHRtbAotaW5zcGVjdG9yL3RpbWVs
aW5lL3RpbWVsaW5lLWFuaW1hdGlvbi1mcmFtZS5odG1sIAotaW5zcGVjdG9yL3RpbWVsaW5lL3Rp
bWVsaW5lLWxvYWQtZXZlbnQuaHRtbAotaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXJlY2Vp
dmUtcmVzcG9uc2UtZXZlbnQuaHRtbAorIyBTa2lwcGluZyB0aGUgdGVzdHMgZm9yIHRoZSBvbGQg
aW5zcGVjdG9yIFVJCitpbnNwZWN0b3IgWyBTa2lwIF0KK2h0dHAvdGVzdHMvaW5zcGVjdG9yIFsg
U2tpcCBdCitodHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkIFsgU2tpcCBdCiAKIGxvYWRlci9n
by1iYWNrLXRvLWRpZmZlcmVudC13aW5kb3ctc2l6ZS5odG1sIAogbG9hZGVyL2xvYWQtZGVmZXIt
cmVzdW1lLWNyYXNoLmh0bWwKQEAgLTUzMCw4ICs1MjYsNiBAQCBodHRwL3Rlc3RzL2NhbnZhcy9w
aGlsaXAvdGVzdHMKIGh0dHAvdGVzdHMvY3NzCiBodHRwL3Rlc3RzL2hpc3RvcnkKIGh0dHAvdGVz
dHMvaW5jcmVtZW50YWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQvY29uc29sZS1sb2ct
YmVmb3JlLWZyYW1lLW5hdmlnYXRpb24uaHRtbAotaHR0cC90ZXN0cy9pbnNwZWN0b3IKIGh0dHAv
dGVzdHMvbG9hZGluZwogaHR0cC90ZXN0cy9sb2NhbAogaHR0cC90ZXN0cy9tZWRpYQpAQCAtNjA0
LDE5ICs1OTgsNiBAQCBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGluZy1jcm9zcy1vcmlnaW4tZnJv
bS1odHRwcy5odG1sCiBodHRwL3Rlc3RzL3NzbAogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1m
cmFtZS1hY2Nlc3MtcHJvdG9jb2wtZXhwbGljaXQtZG9tYWluLmh0bWwKIGh0dHAvdGVzdHMvc2Vj
dXJpdHkvY3Jvc3MtZnJhbWUtYWNjZXNzLXByb3RvY29sLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVj
dG9yL2NvbnNvbGUtd2Vic29ja2V0LWVycm9yLmh0bWwKLQotIyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUzNzIKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsv
bmV0d29yay1zaXplLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay10
aW1pbmcuaHRtbAotCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTc5MwotaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLXNpemUtY2h1bmtlZC5o
dG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstc2l6ZS1zeW5jLmh0bWwK
LQotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwOTcKLWh0dHAv
dGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1kaXNhYmxlLWNhY2hlLW1lbW9yeS5odG1s
Ci1odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstZGlzYWJsZS1jYWNoZS14aHJz
Lmh0bWwKIAogIyBGYWlscyA8cmRhcjovL3Byb2JsZW0vNTY3NDI4OT4KIG1lZGlhL3ZpZGVvLXNl
ZWstcGFzdC1lbmQtcGF1c2VkLmh0bWwKQEAgLTkyMyw5ICs5MDQsNiBAQCBodHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtdnMtYXN5bmMtYXNzZXJ0aW9uLWZhaWx1
cmUuaHRtbAogIyBGYWlsaW5nIGluIFJlbGVhc2UgYnVpbGRzIGh0dHA6Ly93ZWJraXQub3JnL2Iv
NDY5NzYKIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTFfRXhwcmVzc2lvbnMvMTEuN19CaXR3aXNlX1No
aWZ0X09wZXJhdG9ycy8xMS43LjNfVGhlX1Vuc2lnbmVkX1JpZ2h0X1NoaWZ0X09wZXJhdG9yL1Mx
MS43LjNfQTIuM19UMS5odG1sCiAKLSMgU29tZXRpbWVzIGZhaWxzIGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzQ5NDEyCi1pbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtbmV0d29yay1yZXNvdXJjZS5o
dG1sCi0KICMgU29tZXRpbWVzIGZhaWxzIGh0dHA6Ly93ZWJraXQub3JnL2IvNDY5OTgKIHN2Zy9k
b20vU1ZHU2NyaXB0RWxlbWVudC9zY3JpcHQtbG9hZC1hbmQtZXJyb3ItZXZlbnRzLnN2ZwogCkBA
IC0xMDEyLDEyICs5OTAsNiBAQCBodHRwL3Rlc3RzL3dlYnNvY2tldAogIyBUaW1pbmcgb3V0IGh0
dHA6Ly93ZWJraXQub3JnL2IvNTg2NTQKIG1lZGlhL3ZpZGVvLWNvbnRyb2xzLWluLW1lZGlhLWRv
Y3VtZW50Lmh0bWwKIAotIyBTb21ldGltZXMgZmFpbHMgaHR0cDovL3dlYmtpdC5vcmcvYi81ODM2
NwotaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2UtdHJlZS9yZXNvdXJjZS10cmVlLWRvY3Vt
ZW50LXVybC5odG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZS10cmVlL3Jlc291cmNl
LXRyZWUtZnJhbWUtbmF2aWdhdGUuaHRtbAotaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2Ut
dHJlZS9yZXNvdXJjZS10cmVlLXJlbG9hZC5odG1sCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZS10cmVlL3Jlc291cmNlLXRyZWUtZnJhbWUtYWRkLmh0bWwKLQogIyBGbGFreSBodHRwOi8v
d2Via2l0Lm9yZy9iLzYyNTYxCiBhbmltYXRpb25zL2FuaW1hdGlvbi1kaXJlY3Rpb24tbm9ybWFs
Lmh0bWwKIApAQCAtMTU4MSw5ICsxNTUzLDYgQEAgbWVkaWEvbWVkaWEtZG9jdW1lbnQtYXVkaW8t
c2l6ZS5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODc5
NCAtIGNvbnRhaW5zIGFuIEFMRVJUIG1lc3NhZ2UsIGluZGljYXRpbmcgYSBmYWlsdXJlCiBmYXN0
L2Nzcy9kaXNwbGF5LW5vbmUtaW5saW5lLXN0eWxlLWNoYW5nZS1jcmFzaC5odG1sCiAKLSMgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Nzk1IC0gZG9lc24ndCBwcmlu
dCBQYWludEV2ZW50IGluc3RydW1lbnRhdGlvbiBvdXRwdXQKLWluc3BlY3Rvci90aW1lbGluZS90
aW1lbGluZS1wYWludC5odG1sCi0KICMgTmV3IGNhbnZhcyB0ZXN0IHN1aXRlIGZyb20gaHR0cDov
L3BoaWxpcC5odG1sNS5vcmcvdGVzdHMvY2FudmFzL3N1aXRlL3Rlc3RzLwogY2FudmFzL3BoaWxp
cAogCkBAIC0xNjExLDcgKzE1ODAsNiBAQCBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLW1hcmtl
ci1kZXNjcmlwdGlvbi5odG1sCiAKICMgSW5kZXhlZERCIGlzIG5vdCB5ZXQgZW5hYmxlZC4KIHN0
b3JhZ2UvaW5kZXhlZGRiCi1odHRwL3Rlc3RzL2luc3BlY3Rvci9pbmRleGVkZGIKIGh0dHAvdGVz
dHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWluZGV4ZWRkYi1hbGxvd2VkLmh0bWwKIGh0dHAvdGVz
dHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWluZGV4ZWRkYi5odG1sCiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2Nyb3NzLW9yaWdpbi13b3JrZXItaW5kZXhlZGRiLWFsbG93ZWQuaHRtbApAQCAtMTY1Miw3
ICsxNjIwLDYgQEAgZmFzdC90ZXh0L2h5cGhlbnMuaHRtbAogZmFzdC9ldmVudHMvc2hvdy1tb2Rh
bC1kaWFsb2ctb25ibHVyLW9uZm9jdXMuaHRtbAogZmFzdC9oYXJuZXNzL3Nob3ctbW9kYWwtZGlh
bG9nLmh0bWwKIGZhc3QvZXZlbnRzL3Njcm9sbC1ldmVudC1kdXJpbmctbW9kYWwtZGlhbG9nLmh0
bWwKLWluc3BlY3Rvci9jb25zb2xlL2NvbnNvbGUtbG9uZy1ldmFsLWNyYXNoLmh0bWwKIAogIyBU
aGVzZSB0ZXN0cyBmYWlsIHdoZW4gc2hvd01vZGFsRGlhbG9nIGlzIHVuc3VwcG9ydGVkLCBldmVu
IHRob3VnaCB0aGV5IGRvbid0CiAjIHJlbHkgb24gaXQgZGlyZWN0bHkgaHR0cDovL3dlYmtpdC5v
cmcvYi81MzY3NgpAQCAtMTc5OSw0MCArMTc2Niw2IEBAIGh0dHAvdGVzdHMvYXBwY2FjaGUvb3Jp
Z2luLXF1b3RhLmh0bWwKIGh0dHAvdGVzdHMvYXBwY2FjaGUvb3JpZ2luLXF1b3RhLWNvbnRpbnVl
ZC1kb3dubG9hZC5odG1sCiBodHRwL3Rlc3RzL2FwcGNhY2hlL29yaWdpbi1xdW90YS1jb250aW51
ZWQtZG93bmxvYWQtbXVsdGlwbGUtbWFuaWZlc3RzLmh0bWwKIAotIyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMzMzIKLWluc3BlY3Rvci9kZWJ1Z2dlci9kb20tYnJl
YWtwb2ludHMuaHRtbAotaW5zcGVjdG9yL2RlYnVnZ2VyL2V2ZW50LWxpc3RlbmVyLWJyZWFrcG9p
bnRzLmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci9zdGVwLXRocm91Z2gtZXZlbnQtbGlzdGVuZXJz
Lmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci94aHItYnJlYWtwb2ludHMuaHRtbAotCi0jIEpTQyBk
b2Vzbid0IHN1cHBvcnQgaGVhcCBwcm9maWxpbmcKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUwNDg1Ci1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1p
bnNwZWN0LWRvbS13cmFwcGVyLmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90
LWNvbXBhcmlzb24tZG9tLWdyb3Vwcy1jaGFuZ2UuaHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hl
YXAtc25hcHNob3QtY29tcGFyaXNvbi1leHBhbnNpb24tcHJlc2VydmVkLXdoZW4tc29ydGluZy5o
dG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1jb21wYXJpc29uLXNob3ctYWxs
Lmh0bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sCi1pbnNw
ZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1yZXZlYWwtaW4tZG9taW5hdG9ycy12aWV3Lmh0
bWwKLWluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXN1bW1hcnktc2hvdy1yYW5nZXMu
aHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qtc3VtbWFyeS1yZXRhaW5lcnMu
aHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qtc3VtbWFyeS1zb3J0aW5nLWZp
ZWxkcy5odG1sCi1pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1zdW1tYXJ5LXNvcnRp
bmcuaHRtbAotaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qtc3VtbWFyeS1zb3J0aW5n
LWluc3RhbmNlcy5odG1sCi0KLXdlYmtpdC5vcmcvYi83MzkzNiBpbnNwZWN0b3IvcHJvZmlsZXIv
Y2FudmFzMmQvY2FudmFzLWhhcy11bmluc3RydW1lbnRlZC1jYW52YXNlcy5odG1sCi13ZWJraXQu
b3JnL2IvNzM5MzYgaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJkL2NhbnZhcy1zdGFjay10cmFj
ZS5odG1sCi13ZWJraXQub3JnL2IvNzM5MzYgaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJkL2Nh
bnZhcy1yZXBsYXktbG9nLWdyaWQuaHRtbAotCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MDMwMAotaW5zcGVjdG9yL2RlYnVnZ2VyL2xpdmUtZWRpdC5odG1sCi1p
bnNwZWN0b3IvZGVidWdnZXIvbGl2ZS1lZGl0LWJyZWFrcG9pbnRzLmh0bWwKLQotIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk2NTIKLWluc3BlY3Rvci9kZWJ1Z2dl
ci9kZWJ1Z2dlci1jb21waWxlLWFuZC1ydW4uaHRtbAotCi0jIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzAwMwotaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29tcGlsZXIt
c291cmNlLW1hcHBpbmctZGVidWcuaHRtbAotCiAjIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ0ODQ+CiBzdmcvYmF0aWsvcGFpbnRzL3BhdHRlcm5SZWdpb25zLXBv
c2l0aW9uZWQtb2JqZWN0cy5zdmcKIApAQCAtMjAzMCw3ICsxOTYzLDYgQEAgZmFzdC9ldmVudHMv
Y29uc3RydWN0b3JzL3dlYmdsLWNvbnRleHQtZXZlbnQtY29uc3RydWN0b3IuaHRtbAogaHR0cC90
ZXN0cy9zZWN1cml0eS93ZWJnbC1yZW1vdGUtcmVhZC1yZW1vdGUtaW1hZ2UtYWxsb3dlZC5odG1s
CiBodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1hbGxv
d2VkLXdpdGgtY3JlZGVudGlhbHMuaHRtbAogaHR0cC90ZXN0cy9zZWN1cml0eS93ZWJnbC1yZW1v
dGUtcmVhZC1yZW1vdGUtaW1hZ2UtYmxvY2tlZC1uby1jcm9zc29yaWdpbi5odG1sCi1pbnNwZWN0
b3IvcHJvZmlsZXIvd2ViZ2wKIGZhc3QvaW1hZ2VzL3dlYmdsLXRleGltYWdlMmQuaHRtbAogCiAj
IFRlc3RzIHRoYXQgcmVxdWlyZSBFTkFCTEUoRE9XTkxPQURfQVRUUklCVVRFKS4KQEAgLTIzMDIs
OSArMjIzNCw2IEBAIGZhc3Qvc3ViLXBpeGVsCiAjIE5vIENPUlMgc3VwcG9ydCBmb3IgbWVkaWEg
ZWxlbWVudHMgaXMgaW1wbGVtZW50ZWQgeWV0LgogaHR0cC90ZXN0cy9zZWN1cml0eS92aWRlby1j
cm9zcy1vcmlnaW4tcmVhZGJhY2suaHRtbAogCi0jIGh0dHA6Ly93ZWJraXQub3JnL2IvODI4ODYK
LWluc3BlY3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbAotCiAjIEludGVyZmVy
ZXMgd2l0aCB0aGUgb3RoZXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRlc3RzCiAjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTY4OQogZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtZGlzYWJsZWQuaHRtbApAQCAtMjMxMiwxMCArMjI0MSw2IEBA
IGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWRpc2FibGVkLmh0bWwKICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDAwCiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3JlZmVycmVyLXBvbGljeS1yZWRpcmVjdC1saW5rLmh0bWwKIAotIyBJbnNwZWN0
b3Igb25seSBzdXBwb3J0cyBldmFsdWF0aW9uIGluIGNvbnRlbnQgc2NyaXB0IHdvcmxkIHdpdGgg
djgsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU3MDkKLWlu
c3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC1jb250ZW50LXNjcmlwdC5odG1sIAot
aW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1hdWRpdHMtY29udGVudC1zY3JpcHQuaHRt
bAotCiAjIFJlYmFzZWxpbmUgcmVxdWlyZWQgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg0MTY3CiBlZGl0aW5nL3Bhc3RlYm9hcmQvaW5uZXJUZXh0LWlubGlu
ZS10YWJsZS5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi9pZnJhbWUuaHRtbApAQCAtMjQ1Nyw3ICsy
MzgyLDYgQEAgZmFzdC90YWJsZS8wMjcuaHRtbAogZmFzdC90YWJsZS8wMjctdmVydGljYWwuaHRt
bAogZmFzdC90YWJsZS9tYXgtd2lkdGgtaW50ZWdlci1vdmVyZmxvdy5odG1sCiBmYXN0L3dyaXRp
bmctbW9kZS9mYWxsYmFjay1vcmllbnRhdGlvbi5odG1sCi1pbnNwZWN0b3Ivc3R5bGVzL3N2Zy1z
dHlsZS54aHRtbAogbWVkaWEvY29udHJvbHMtYWZ0ZXItcmVsb2FkLmh0bWwKIG1lZGlhL2NvbnRy
b2xzLXN0cmljdC5odG1sCiBtZWRpYS9jb250cm9scy1zdHlsaW5nLmh0bWwKQEAgLTI3MTUsMTgg
KzI2MzksNiBAQCBtZWRpYS92aWRlby1jb250cm9scy1jYXB0aW9ucy5odG1sCiAjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTc5NQogZWRpdGluZy9zdHlsZS9hcHBs
eS1zdHlsZS1hdG9taWMuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NDM3NAotaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLWRlY29kZS1yZXNpemUu
aHRtbAotCi0jIEZsYWt5IGluc3BlY3RvciB0ZXN0cwotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTU4MDIKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtcmVz
b3VyY2UtZXJyb3JzLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlLXRyZWUvcmVz
b3VyY2UtcmVxdWVzdC1jb250ZW50LXdoaWxlLWxvYWRpbmcuaHRtbAotaHR0cC90ZXN0cy9pbnNw
ZWN0b3Ivc2VhcmNoL3Jlc291cmNlcy1zZWFyY2gtbWF0Y2gtaW5kZXguaHRtbAotaW5zcGVjdG9y
L3Byb2ZpbGVyL2hlYXAtc25hcHNob3QuaHRtbAotaW5zcGVjdG9yL3N0eWxlcy9tZWRpYS1xdWVy
aWVzLmh0bWwKLWluc3BlY3Rvci9zdHlsZXMvcmVnaW9uLXN0eWxlLWNyYXNoLmh0bWwKLQogIyBG
bGFreSBodHRwL3Rlc3RzL3NlY3VyaXR5IHRlc3RzCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NTgwMwogaHR0cC90ZXN0cy9zZWN1cml0eS9sb2NhbC1pbWFnZS1m
cm9tLXJlbW90ZS13aGl0ZWxpc3RlZC5odG1sCkBAIC0yNzgwLDEyICsyNjkyLDYgQEAgZmFzdC9l
dmVudHMvY29uc3RydWN0b3JzL2RldmljZS1wcm94aW1pdHktZXZlbnQtY29uc3RydWN0b3IuaHRt
bAogZmFzdC9mb3Jtcy9zdGF0ZS1yZXN0b3JlLWJyb2tlbi1zdGF0ZS5odG1sCiBmYXN0L2h0bWwv
cHJvZ3Jlc3MtdXNlci1tb2RpZnkuaHRtbAogZmFzdC9tdWx0aWNvbC9zaHJpbmstdG8tY29sdW1u
LWhlaWdodC1mb3ItcGFnaW5hdGlvbi5odG1sCi1pbnNwZWN0b3IvZGV2aWNlLW9yaWVudGF0aW9u
LXN1Y2Nlc3MuaHRtbAotaW5zcGVjdG9yL2dlb2xvY2F0aW9uLWVycm9yLmh0bWwKLWluc3BlY3Rv
ci9nZW9sb2NhdGlvbi1zdWNjZXNzLmh0bWwKLWluc3BlY3Rvci9nZW9sb2NhdGlvbi13YXRjaFBv
c2l0aW9uLmh0bWwKLWluc3BlY3Rvci9zdHlsZXMvdmFyaWFibGVzL2Nzcy12YXJpYWJsZXMuaHRt
bAotaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXJlY2VpdmUtcmVzcG9uc2UtZXZlbnQuaHRt
bAogbWVkaWEvYXVkaW8tY29udHJvbHMtcmVuZGVyaW5nLmh0bWwKIG1lZGlhL2F1ZGlvLXJlcGFp
bnQuaHRtbAogbWVkaWEvY29udHJvbHMtc3R5bGluZy1zdHJpY3QuaHRtbApAQCAtMjgwNiwxMSAr
MjcxMiw2IEBAIHRhYmxlcy9tb3ppbGxhX2V4cGVjdGVkX2ZhaWx1cmVzL21hcnZpbi90YWJsZV9v
dmVyZmxvd19oaWRkZW5fdHIuaHRtbAogaHR0cC90ZXN0cy9mdWxsc2NyZWVuL2Z1bGxzY3JlZW5l
bGVtZW50LWRpZmZlcmVudC1vcmlnaW4uaHRtbAogaHR0cC90ZXN0cy9mdWxsc2NyZWVuL2Z1bGxz
Y3JlZW5lbGVtZW50LXNhbWUtb3JpZ2luLmh0bWwKIGh0dHAvdGVzdHMvaGlzdG9yeS9iYWNrLXdp
dGgtZnJhZ21lbnQtY2hhbmdlLnBocAotaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS1jcm9z
cy1vcmlnaW4taWZyYW1lLWxvZ2dpbmcuaHRtbAotaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVj
dC1lbGVtZW50Lmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlLWhhci1jb252ZXJz
aW9uLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlLXBhcmFtZXRlcnMuaHRtbAot
aHR0cC90ZXN0cy9pbnNwZWN0b3Ivd2Vic29ja2V0L3dlYi1zb2NrZXQtZnJhbWUuaHRtbAogaHR0
cC90ZXN0cy9sb2FkaW5nL3BkZi1jb21taXQtbG9hZC1jYWxsYmFja3MuaHRtbAogaHR0cC90ZXN0
cy9sb2FkaW5nL3Bvc3QtaW4taWZyYW1lLXdpdGgtYmFjay1uYXZpZ2F0aW9uLmh0bWwKIGh0dHAv
dGVzdHMvbWVkaWEvbWVkaWEtZG9jdW1lbnQuaHRtbApAQCAtMjgzNCw5ICsyNzM1LDYgQEAgaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yYW5nZS10ZXN0Lmh0bWwKIGh0dHAvdGVzdHMvc2VjdXJp
dHkvc2FuZGJveGVkLWlmcmFtZS1vcmlnaW4tYWRkLmh0bWwKIGh0dHAvdGVzdHMvc2VjdXJpdHkv
c2FuZGJveGVkLWlmcmFtZS1vcmlnaW4tcmVtb3ZlLmh0bWwKIAotI2h0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Njk0MgotaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29y
ay9uZXR3b3JrLXhoci1yZXBsYXkuaHRtbAotCiAjQVggcm9sZSBuZWVkcyB0byBiZSB1cGRhdGVk
IG9uIFdpbmRvd3MsIG1hbnkgdGVzdCBjYXNlcyBpbnZvbHZlIEFYIHJvbGUgY3Jhc2ggb3IgZmFp
bAogYWNjZXNzaWJpbGl0eS9zdmctYm91bmRzLmh0bWwKIApAQCAtMjg2Niw5ICsyNzY0LDYgQEAg
aHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tbG9jYWwtc3RvcmFnZS13azEuaHRtbAog
I1NraXBwZWQgb24gb3RoZXIgcGxhdGZvcm1zIGhlcmU6IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzEyOTg5Nwogc3ZnL2N1c3RvbS9jbGlwLW1hc2stbmVnYXRpdmUtc2NhbGUuc3Zn
CiAKLSNodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgwOTUKLWluc3Bl
Y3Rvci9kZWJ1Z2dlci9keW5hbWljLXNjcmlwdC10YWcuaHRtbAotCiAjaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MzA2CiBjc3MzL2ZsZXhib3gvZmxleGJveC1iYXNl
bGluZS5odG1sCiAjaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODc4
CkBAIC0yODc5LDkgKzI3NzQsNiBAQCBjc3MzL3N1cHBvcnRzLmh0bWwKIGNzczMvc3VwcG9ydHMt
Y3Nzb20uaHRtbAogY3NzMy9zdXBwb3J0cy1kb20tYXBpLmh0bWwKIAotIyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgxNjkKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL3N0
YWNrdHJhY2VzCi0KICMgUmVxdWlyZXMgcmViYXNlbGluaW5nIGFmdGVyIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0NQogd2Via2l0Lm9yZy9iLzExNjQ1IGZhc3Qv
dGFibGUvMDI1Lmh0bWwgWyBGYWlsdXJlIF0KIApAQCAtMjkwMSwxMCArMjc5Myw2IEBAIHdlYmtp
dC5vcmcvYi82MTEzOCBodHRwL3Rlc3RzL3czYy93ZWJwZXJmL3N1Ym1pc3Npb24vSW50ZWwvcmVz
b3VyY2UtdGltaW5nCiB3ZWJraXQub3JnL2IvMTAwNDI0IGVkaXRpbmcvc2VsZWN0aW9uL3VzZXIt
c2VsZWN0LWFsbC1zZWxlY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzEwMDQy
NCBlZGl0aW5nL3NlbGVjdGlvbi91c2VyLXNlbGVjdC1hbGwtd2l0aC1zaGlmdC5odG1sIFsgRmFp
bHVyZSBdCiAKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NTY3
Ci0jIE5vdCBzdXBwb3J0ZWQgb24gTWFjIG9yIFdpbmRvd3MgcG9ydHMKLWluc3BlY3Rvci9lbGVt
ZW50cy91cGRhdGUtc2hhZG93ZG9tLmh0bWwKLQogIyBOb3Qgc3VwcG9ydGVkIGluIENGTmV0d29y
ayB5ZXQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAzNDkKIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdGltZW91dC94bWxodHRwcmVxdWVzdC10aW1lb3V0LWFi
b3J0ZWQuaHRtbAogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC90aW1lb3V0L3htbGh0dHByZXF1
ZXN0LXRpbWVvdXQtb3ZlcnJpZGVzZXhwaXJlcy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dr
Mi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGY2ZWUxZWQuLmUwYjI1NWQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCkBAIC02MCw5ICs2MCwxMCBAQCBwbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9pZnJhbWUtd2l0aC10aXRsZS1jb3JyZWN0LWhpZXJhcmNoeS5o
dG1sCiBjb21wb3NpdGluZy9pZnJhbWVzL2lmcmFtZS1zaXplLWZyb20temVyby5odG1sCiBjb21w
b3NpdGluZy9pZnJhbWVzL2lmcmFtZS1zcmMtY2hhbmdlLmh0bWwKIAotIyBGbGFrZXkgb24gU25v
dyBMZW9wYXJkIEludGVsIFdlYktpdDIgUmVsZWFzZSBUZXN0cwotIyA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjM4PgotaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMt
YWRkLWJsYW5rLXByb3BlcnR5Lmh0bWwKKyMgU2tpcHBpbmcgdGhlIHRlc3RzIGZvciB0aGUgb2xk
IGluc3BlY3RvciBVSQoraW5zcGVjdG9yIFsgU2tpcCBdCitodHRwL3Rlc3RzL2luc3BlY3RvciBb
IFNraXAgXQoraHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZCBbIFNraXAgXQogCiAjIEZsYWtl
eSBvbiBTbm93IExlb3BhcmQgSW50ZWwgV2ViS2l0MiBSZWxlYXNlIFRlc3RzCiAjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODE4MwpAQCAtNzIsMjMgKzczLDYgQEAg
ZWRpdGluZy9leGVjQ29tbWFuZC9jb252ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLmh0bWwK
ICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNjQ4CiBmYXN0L2Zy
YW1lcy9mbGF0dGVuaW5nL2ZyYW1lc2V0LWZsYXR0ZW5pbmctc3ViZnJhbWVzZXRzLmh0bWwKIAot
IyBUaW1lIG91dCBvbiBTbm93IExlb3BhcmQgSW50ZWwgV2ViS2l0MiBSZWxlYXNlIFRlc3RzCi0j
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzMyNQotaHR0cC90ZXN0
cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFkZXJzLmh0bWwKLWh0dHAvdGVzdHMvaW5zcGVjdG9y
L2V4dGVuc2lvbnMtbmV0d29yay1yZWRpcmVjdC5odG1sCi0KLSMgSW5zcGVjdG9yIG9ubHkgc3Vw
cG9ydHMgZXZhbHVhdGlvbiBpbiBjb250ZW50IHNjcmlwdCB3b3JsZCB3aXRoIHY4LCBzZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NzA5Ci1pbnNwZWN0b3IvZXh0
ZW5zaW9ucy9leHRlbnNpb25zLWV2YWwtY29udGVudC1zY3JpcHQuaHRtbAotaW5zcGVjdG9yL2V4
dGVuc2lvbnMvZXh0ZW5zaW9ucy1hdWRpdHMtY29udGVudC1zY3JpcHQuaHRtbAotCi0jIEEgYnVu
Y2ggb2YgaW5zcGVjdG9yIHRlc3RzIHRpbWUgb3V0IG9uIExpb24gSW50ZWwgRGVidWcgV2ViS2l0
MiB0ZXN0ZXJzLgotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2
MDEKLWh0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtY3Jvc3Mtb3JpZ2luLWlmcmFtZS1sb2dn
aW5nLmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0dGVyLWJyZWFrcG9pbnRz
Lmh0bWwKLWluc3BlY3Rvci9lbGVtZW50cy9lZGl0LWRvbS1hY3Rpb25zLmh0bWwKLWluc3BlY3Rv
ci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZlbnRzLmh0bWwKLWluc3BlY3Rvci9zdHlsZXMvc3R5
bGVzLWNvbXB1dGVkLXRyYWNlLmh0bWwKLQogIyBXZWJLaXRUZXN0UnVubmVyIG5lZWRzIG92ZXJy
aWRlUHJlZmVyZW5jZSBmb3Igbm9uLWJvb2xlYW4gdmFsdWVzCiAjICh6ZXJvLWZvbnQtc2l6ZS5o
dG1sIHBhc3NlcyBiZWNhdXNlIG92ZXJyaWRlUHJlZmVyZW5jZSBkb2VzIG5vdCB3b3JrKQogd2Vi
a2l0Lm9yZy9iLzQyMTk3IGZhc3QvaGFybmVzcy9vdmVycmlkZS1wcmVmZXJlbmNlcy0yLmh0bWwg
WyBGYWlsdXJlIF0KQEAgLTIxMiwxMCArMTk2LDYgQEAgdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1p
bmctZnVuY3Rpb24uaHRtbAogcGx1Z2lucy9nZXR1cmxub3RpZnktZHVyaW5nLWRvY3VtZW50LXRl
YXJkb3duLmh0bWwKIHBsdWdpbnMvb3Blbi1hbmQtY2xvc2Utd2luZG93LXdpdGgtcGx1Z2luLmh0
bWwKIAotIyBTb21ldGltZXMgZmFpbHMKLSMgaHR0cDovL3dlYmtpdC5vcmcvYi81NjUzMAotaHR0
cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2UtaGFyLWNvbnZlcnNpb24uaHRtbAotCiBwbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9zZWFyY2gtcHJlZGljYXRlLmh0bWwKIAogIyBTb21ldGltZXMg
ZmFpbHMKQEAgLTI0MywxMCArMjIzLDYgQEAgZmFzdC9ldmVudHMvYmx1ci1mb2N1cy13aW5kb3ct
c2hvdWxkLWJsdXItZm9jdXMtZWxlbWVudC5odG1sCiBmYXN0L3NlbGVjdG9ycy9zZWxlY3Rpb24t
d2luZG93LWluYWN0aXZlLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctZm9jdXMtc2VsZi5o
dG1sCiAKLSMgV2ViS2l0MiBuZWVkcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0b3JDbGll
bnQ6Om92ZXJyaWRlRGV2aWNlTWV0cmljcygpIGFuZAotIyBhdXRvWm9vbVBhZ2VUb0ZpdFdpZHRo
KCkuCi1pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLmh0bWwKLQogIyBjc3Mz
LWNvbmRpdGlvbmFscyBzdXBwb3J0IGlzIG5vdCB5ZXQgZW5hYmxlZC4KIHdlYmtpdC5vcmcvYi84
NjE0NiBjc3MzL3N1cHBvcnRzLmh0bWwKIHdlYmtpdC5vcmcvYi8xMDQ4MjIgY3NzMy9zdXBwb3J0
cy1jc3NvbS5odG1sCkBAIC0zMjEsNyArMjk3LDYgQEAgaHR0cC90ZXN0cy9sb2FkaW5nL2Nyb3Nz
LW9yaWdpbi1YSFItd2lsbExvYWRSZXF1ZXN0Lmh0bWwKICMgV2ViS2l0MiBuZWVkcyBzaG93TW9k
YWxEaWFsb2cKIGZhc3QvZXZlbnRzL3Njcm9sbC1ldmVudC1kdXJpbmctbW9kYWwtZGlhbG9nLmh0
bWwKIGZhc3QvaGFybmVzcy9zaG93LW1vZGFsLWRpYWxvZy5odG1sCi1pbnNwZWN0b3IvY29uc29s
ZS9jb25zb2xlLWxvbmctZXZhbC1jcmFzaC5odG1sCiAKICMgV2ViS2l0MiBuZWVkcyB0byBzdXBw
b3J0IHN5bmNocm9ub3VzIGNyZWF0aW9uIG9mIGFib3V0OmJsYW5rL2RhdGE6dXJsIGZyYW1lcwog
ZmFzdC9kb20vSFRNTERvY3VtZW50L2hhc0ZvY3VzLmh0bWwKQEAgLTYxOCwxMSArNTkzLDYgQEAg
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCiBmYXN0
L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuaHRtbAogc3RvcmFnZS93
ZWJzcWwvbXVsdGlwbGUtZGF0YWJhc2VzLWdhcmJhZ2UtY29sbGVjdGlvbi5odG1sCiAKLSMgVW5r
bm93biBmYWlsdXJlcyBhZnRlciBlbmFibGluZyBpbnNwZWN0b3IgdGVzdHMKLWluc3BlY3Rvci90
aW1lbGluZS90aW1lbGluZS1wYWludC5odG1sCi1pbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUt
c2NyaXB0LXRhZy0xLmh0bWwKLWluc3BlY3Rvci9kZWJ1Z2dlci9vcGVuLWNsb3NlLW9wZW4uaHRt
bAotCiAjIENyYXNoZXMgdGhlIFdlYlByb2Nlc3MKIGVkaXRpbmcvcGFzdGVib2FyZC9jb3B5LXN0
YW5kYWxvbmUtaW1hZ2UuaHRtbAogCi0tIAoxLjguMS4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213905</attachid>
            <date>2013-10-10 11:25:00 -0700</date>
            <delta_ts>2013-10-10 14:31:02 -0700</delta_ts>
            <desc>Patch - Part 2/3 </desc>
            <filename>0002-Web-Inspector-Remove-the-old-front-end-from-WebKit.patch</filename>
            <type>text/plain</type>
            <size>1471855</size>
            <attacher name="Marcelo Morais">m.morais</attacher>
            
              <data encoding="base64">RnJvbSAxMDcwOGIwOTg2MGQzM2JiY2ZhYzRiNjY3ZWU0MTI4M2I5ZjczNmNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJjZWxvIE1vcmFpcyA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+
CkRhdGU6IFRodSwgMTAgT2N0IDIwMTMgMTA6MjA6MzQgLTA0MDAKU3ViamVjdDogW1BBVENIIDIv
M10gV2ViIEluc3BlY3RvcjogUmVtb3ZlIHRoZSBvbGQgZnJvbnQtZW5kIGZyb20gV2ViS2l0CiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMjk1CgpSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCkR1ZSB0byBwYXRjaCBzaXplIGxpbWl0cywgdGhlIHJlbW90aW9u
IG9mIHRoZSBmcm9udC1lbmQgd2lsbCBiZSBkb25lIGluIHR3byBwYXJ0cy4KClBhcnQgMTogUmVt
b3ZpbmcgdGhlIGZvbGRlcnMgaW5zaWRlIG9mIGluc3BlY3Rvci9mcm9udC1lbmQgcGF0aCBhbmQK
dGhlIGNvbXBpbGUgZnJvbnQtZW5kIHNvdXJjZS4KCiogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQt
ZW5kLnB5OiBSZW1vdmVkLgoqIGluc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzOiBSZW1vdmVkLgoq
IGluc3BlY3Rvci9mcm9udC1lbmQvVWdsaWZ5SlM6IFJlbW92ZWQuCiogaW5zcGVjdG9yL2Zyb250
LWVuZC9hY2U6IFJlbW92ZWQuCiogaW5zcGVjdG9yL2Zyb250LWVuZC9jbTogUmVtb3ZlZC4KLS0t
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDE4ICsKIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weSAgICAg
IHwgICA0NDkgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvYWRkSWNv
bi5wbmcgfCAgIEJpbiAyNzEgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvYXBwbGlj
YXRpb25DYWNoZS5wbmcgICAgICAgICAgfCAgIEJpbiAxNzM1IC0+IDAgYnl0ZXMKIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2JhY2sucG5nIHwgICBCaW4gMjE2IC0+
IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL2JyZWFrcG9pbnRCb3JkZXIucG5nICAgICAg
ICAgIHwgICBCaW4gMjYxIC0+IDAgYnl0ZXMKIC4uLi9JbWFnZXMvYnJlYWtwb2ludENvbmRpdGlv
bmFsQm9yZGVyLnBuZyAgICAgICAgIHwgICBCaW4gMjYyIC0+IDAgYnl0ZXMKIC4uLi9JbWFnZXMv
YnJlYWtwb2ludENvbmRpdGlvbmFsQ291bnRlckJvcmRlci5wbmcgIHwgICBCaW4gNDIyIC0+IDAg
Ynl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL2JyZWFrcG9pbnRDb3VudGVyQm9yZGVyLnBuZyAg
IHwgICBCaW4gNDE0IC0+IDAgYnl0ZXMKIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL2NoZWNrZXIucG5nIHwgICBCaW4gODIgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9m
cm9udC1lbmQvSW1hZ2VzL2Nsb3NlQnV0dG9ucy5wbmcgICAgfCAgIEJpbiAzNjkgLT4gMCBieXRl
cwogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29va2llLnBuZyAgfCAg
IEJpbiAyMTg5IC0+IDAgYnl0ZXMKIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kYXRh
YmFzZS5wbmcgICAgICAgIHwgICBCaW4gMTQ2MSAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvZGF0YWJhc2VUYWJsZS5wbmcgICB8ICAgQmluIDMwOCAtPiAwIGJ5dGVz
CiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9kZWJ1Z2dlckNvbnRpbnVlLnBuZyAgICAgICAgICB8ICAg
QmluIDIwMyAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGVidWdn
ZXJQYXVzZS5wbmcgICB8ICAgQmluIDEyMCAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdl
cy9kZWJ1Z2dlclN0ZXBJbnRvLnBuZyAgICAgICAgICB8ICAgQmluIDI1MyAtPiAwIGJ5dGVzCiAu
Li4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGVidWdnZXJTdGVwT3V0LnBuZyB8ICAgQmlu
IDI0NiAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9kZWJ1Z2dlclN0ZXBPdmVyLnBu
ZyAgICAgICAgICB8ICAgQmluIDMxMiAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZGVsZXRlSWNvbi5wbmcgICAgICB8ICAgQmluIDE3NCAtPiAwIGJ5dGVzCiAuLi4v
SW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bi5wbmcgICAgICAgICB8ICAgQmluIDIz
NSAtPiAwIGJ5dGVzCiAuLi4vSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bkJsYWNr
LnBuZyAgICB8ICAgQmluIDEzOCAtPiAwIGJ5dGVzCiAuLi4vSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlh
bmdsZVNtYWxsRG93bldoaXRlLnBuZyAgICB8ICAgQmluIDE0NSAtPiAwIGJ5dGVzCiAuLi4vSW1h
Z2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHQucG5nICAgICAgICB8ICAgQmluIDIxNiAt
PiAwIGJ5dGVzCiAuLi4vSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHRCbGFjay5w
bmcgICB8ICAgQmluIDEyNSAtPiAwIGJ5dGVzCiAuLi4vSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmds
ZVNtYWxsUmlnaHREb3duLnBuZyAgICB8ICAgQmluIDI2MiAtPiAwIGJ5dGVzCiAuLi4vZGlzY2xv
c3VyZVRyaWFuZ2xlU21hbGxSaWdodERvd25CbGFjay5wbmcgICAgICB8ICAgQmluIDE2MCAtPiAw
IGJ5dGVzCiAuLi4vZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodERvd25XaGl0ZS5wbmcgICAg
ICB8ICAgQmluIDE2OSAtPiAwIGJ5dGVzCiAuLi4vSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNt
YWxsUmlnaHRXaGl0ZS5wbmcgICB8ICAgQmluIDEzNSAtPiAwIGJ5dGVzCiAuLi4vV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kb21haW4ucG5nICB8ICAgQmluIDY3MiAtPiAwIGJ5
dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZXJyb3JJY29uLnBuZyAgICAgICB8
ICAgQmluIDM3NSAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZXJy
b3JNZWRpdW1JY29uLnBuZyB8ICAgQmluIDY1MiAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvZXJyb3JSZWREb3QucG5nICAgICB8ICAgQmluIDQzNCAtPiAwIGJ5dGVz
CiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZmlsZVN5c3RlbS5wbmcgICAgICB8ICAg
QmluIDEyMjYgLT4gMCBieXRlcwogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvZm9yd2FyZC5wbmcgfCAgIEJpbiAyMTQgLT4gMCBieXRlcwogLi4uL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvZnJhbWUucG5nICAgfCAgIEJpbiA0ODIgLT4gMCBieXRlcwog
Li4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2dsb3NzeUhlYWRlci5wbmcgICAgfCAgIEJp
biAxMDMgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvZ2xvc3N5SGVhZGVyUHJlc3Nl
ZC5wbmcgICAgICAgfCAgIEJpbiAxMDMgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMv
Z2xvc3N5SGVhZGVyU2VsZWN0ZWQucG5nICAgICAgfCAgIEJpbiAxMjEgLT4gMCBieXRlcwogLi4u
L0ltYWdlcy9nbG9zc3lIZWFkZXJTZWxlY3RlZFByZXNzZWQucG5nICAgICAgICAgfCAgIEJpbiAx
MjEgLT4gMCBieXRlcwogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZ29B
cnJvdy5wbmcgfCAgIEJpbiAxNDYgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvZ3Jh
cGhMYWJlbENhbGxvdXRMZWZ0LnBuZyAgICAgfCAgIEJpbiAxNjAgLT4gMCBieXRlcwogLi4uL2Zy
b250LWVuZC9JbWFnZXMvZ3JhcGhMYWJlbENhbGxvdXRSaWdodC5wbmcgICAgfCAgIEJpbiAxNjEg
LT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2luZGV4ZWREQi5wbmcg
ICAgICAgfCAgIEJpbiAyMDIxIC0+IDAgYnl0ZXMKIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9pbmRleGVkREJJbmRleC5wbmcgIHwgICBCaW4gMTA0NCAtPiAwIGJ5dGVzCiAuLi4vZnJv
bnQtZW5kL0ltYWdlcy9pbmRleGVkREJPYmplY3RTdG9yZS5wbmcgICAgICB8ICAgQmluIDk4MCAt
PiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvbG9jYWxTdG9yYWdlLnBu
ZyAgICB8ICAgQmluIDEwNTMgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvbmFtZWRG
bG93T3ZlcmZsb3cucG5nICAgICAgICAgfCAgIEJpbiAxMjAgLT4gMCBieXRlcwogLi4uL2Zyb250
LWVuZC9JbWFnZXMvbmF2aWdhdG9yU2hvd0hpZGVCdXR0b24ucG5nICAgfCAgIEJpbiAzMzUgLT4g
MCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVBZGRCdXR0b25zLnBu
ZyAgfCAgIEJpbiA3MzggLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3BhbmVCb3R0b21Hcm93LnBuZyAgfCAgIEJpbiA4NSAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5k
L0ltYWdlcy9wYW5lQm90dG9tR3Jvd0FjdGl2ZS5wbmcgICAgICB8ICAgQmluIDg1IC0+IDAgYnl0
ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL3BhbmVFbGVtZW50U3RhdGVCdXR0b25zLnBuZyAgIHwg
ICBCaW4gMzQxMyAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9wYW5lRmlsdGVyQnV0
dG9ucy5wbmcgICAgICAgICB8ICAgQmluIDM3NzggLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9J
bWFnZXMvcGFuZUdyb3dIYW5kbGVMaW5lLnBuZyAgICAgICAgfCAgIEJpbiA2OSAtPiAwIGJ5dGVz
CiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9wYW5lUmVmcmVzaEJ1dHRvbnMucG5nICAgICAgICB8ICAg
QmluIDEyNTcgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvcGFuZVNldHRpbmdzQnV0
dG9ucy5wbmcgICAgICAgfCAgIEJpbiAxMTIyIC0+IDAgYnl0ZXMKIC4uLi9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy9wb3BvdmVyQXJyb3dzLnBuZyAgIHwgICBCaW4gNTQ2IC0+IDAgYnl0ZXMK
IC4uLi9mcm9udC1lbmQvSW1hZ2VzL3BvcG92ZXJCYWNrZ3JvdW5kLnBuZyAgICAgICAgIHwgICBC
aW4gMjIzMSAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9wcm9maWxlR3JvdXBJY29u
LnBuZyAgICAgICAgICB8ICAgQmluIDE0ODYgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL3Byb2ZpbGVJY29uLnBuZyAgICAgfCAgIEJpbiAxMjk1IC0+IDAgYnl0ZXMK
IC4uLi9mcm9udC1lbmQvSW1hZ2VzL3Byb2ZpbGVTbWFsbEljb24ucG5nICAgICAgICAgIHwgICBC
aW4gNTY4IC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL3Byb2ZpbGVzU2lsaG91ZXR0
ZS5wbmcgICAgICAgIHwgICBCaW4gNDIwNjcgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFn
ZXMvcHJvZ3JhbUNvdW50ZXJCb3JkZXIucG5nICAgICAgfCAgIEJpbiAzMzEgLT4gMCBieXRlcwog
Li4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3JhZGlvRG90LnBuZyAgICAgICAgfCAgIEJp
biAyMjQgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3JlZ2lvbkVt
cHR5LnBuZyAgICAgfCAgIEJpbiAxMTUgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3JlZ2lvbkZpdC5wbmcgICAgICAgfCAgIEJpbiAxMDkgLT4gMCBieXRlcwogLi4u
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3JlZ2lvbk92ZXJzZXQucG5nICAgfCAgIEJpbiAx
MjMgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Jlc291cmNlQ1NT
SWNvbi5wbmcgfCAgIEJpbiAxMDU3IC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL3Jl
c291cmNlRG9jdW1lbnRJY29uLnBuZyAgICAgIHwgICBCaW4gOTc5IC0+IDAgYnl0ZXMKIC4uLi9m
cm9udC1lbmQvSW1hZ2VzL3Jlc291cmNlRG9jdW1lbnRJY29uU21hbGwucG5nIHwgICBCaW4gMTU4
IC0+IDAgYnl0ZXMKIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9yZXNvdXJjZUpTSWNv
bi5wbmcgIHwgICBCaW4gODU5IC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL3Jlc291
cmNlUGxhaW5JY29uLnBuZyAgICAgICAgIHwgICBCaW4gMzc4IC0+IDAgYnl0ZXMKIC4uLi9mcm9u
dC1lbmQvSW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uU21hbGwucG5nICAgIHwgICBCaW4gMTMwIC0+
IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL3Jlc291cmNlc1NpemVHcmFwaEljb24ucG5n
ICAgIHwgICBCaW4gMTY0MCAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9yZXNvdXJj
ZXNUaW1lR3JhcGhJY29uLnBuZyAgICB8ICAgQmluIDE0MjcgLT4gMCBieXRlcwogLi4uL2Zyb250
LWVuZC9JbWFnZXMvc2NyaXB0c1NpbGhvdWV0dGUucG5nICAgICAgICAgfCAgIEJpbiA0MzExMCAt
PiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoTmV4dC5wbmcg
ICAgICB8ICAgQmluIDE3NyAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvc2VhcmNoUHJldi5wbmcgICAgICB8ICAgQmluIDE3NyAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoU21hbGxCbHVlLnBuZyB8ICAgQmluIDMxMSAtPiAw
IGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hTbWFsbEJyaWdodEJsdWUucG5nICAg
ICB8ICAgQmluIDMwNCAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
c2VhcmNoU21hbGxHcmF5LnBuZyB8ICAgQmluIDI2NCAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5k
L0ltYWdlcy9zZWFyY2hTbWFsbFdoaXRlLnBuZyAgICAgICAgICB8ICAgQmluIDIxNyAtPiAwIGJ5
dGVzCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50LnBuZyB8
ICAgQmluIDI5NyAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2Vn
bWVudEVuZC5wbmcgICAgICB8ICAgQmluIDE0MSAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvc2VnbWVudEhvdmVyLnBuZyAgICB8ICAgQmluIDMyMCAtPiAwIGJ5dGVz
CiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudEhvdmVyRW5kLnBuZyB8ICAg
QmluIDE0NSAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVu
dFNlbGVjdGVkLnBuZyB8ICAgQmluIDMwOSAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdl
cy9zZWdtZW50U2VsZWN0ZWRFbmQucG5nICAgICAgICB8ICAgQmluIDEzOSAtPiAwIGJ5dGVzCiAu
Li4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2Vzc2lvblN0b3JhZ2UucG5nICB8ICAgQmlu
IDEwNjkgLT4gMCBieXRlcwogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
c3Bpbm5lci5naWYgfCAgIEJpbiAxNjg0IC0+IDAgYnl0ZXMKIC4uLi9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9zcGlubmVyQWN0aXZlLmdpZiAgIHwgICBCaW4gMzIwOCAtPiAwIGJ5dGVzCiAu
Li4vZnJvbnQtZW5kL0ltYWdlcy9zcGlubmVyQWN0aXZlU2VsZWN0ZWQuZ2lmICAgICB8ICAgQmlu
IDMyMDggLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NwaW5uZXJJ
bmFjdGl2ZS5naWYgfCAgIEJpbiAzMjA4IC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2Vz
L3NwaW5uZXJJbmFjdGl2ZVNlbGVjdGVkLmdpZiAgIHwgICBCaW4gMzIwOCAtPiAwIGJ5dGVzCiAu
Li4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3BsaXR2aWV3RGltcGxlLnBuZyB8ICAgQmlu
IDE4OSAtPiAwIGJ5dGVzCiAuLi4vSW1hZ2VzL3NwbGl0dmlld0RpdmlkZXJCYWNrZ3JvdW5kLnBu
ZyAgICAgICAgICB8ICAgQmluIDE0NyAtPiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy9z
dGF0dXNiYXJCdXR0b25HbHlwaHMucG5nICAgICB8ICAgQmluIDY2MDAgLT4gMCBieXRlcwogLi4u
L2Zyb250LWVuZC9JbWFnZXMvc3RhdHVzYmFyQnV0dG9uR2x5cGhzMngucG5nICAgfCAgIEJpbiA2
MzQwIC0+IDAgYnl0ZXMKIC4uLi9JbWFnZXMvc3RhdHVzYmFyUmVzaXplckhvcml6b250YWwucG5n
ICAgICAgICAgIHwgICBCaW4gOTAgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvc3Rh
dHVzYmFyUmVzaXplclZlcnRpY2FsLnBuZyAgfCAgIEJpbiA5MiAtPiAwIGJ5dGVzCiAuLi4vaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3VjY2Vzc0dyZWVuRG90LnBuZyB8ICAgQmluIDQ5MiAt
PiAwIGJ5dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy90aHVtYkFjdGl2ZUhvcml6LnBuZyAgICAg
ICAgICB8ICAgQmluIDY2MyAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvdGh1bWJBY3RpdmVWZXJ0LnBuZyB8ICAgQmluIDU2NyAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJIb3Jpei5wbmcgICAgICB8ICAgQmluIDY2NSAtPiAw
IGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJIb3Zlckhvcml6LnBu
ZyB8ICAgQmluIDY2NyAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
dGh1bWJIb3ZlclZlcnQucG5nICB8ICAgQmluIDU2NSAtPiAwIGJ5dGVzCiAuLi4vaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvdGh1bWJWZXJ0LnBuZyAgICAgICB8ICAgQmluIDU2NyAtPiAwIGJ5
dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGlja01hcmsucG5nICAgICAgICB8
ICAgQmluIDI5MTAgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVIb2xs
b3dQaWxsQmx1ZS5wbmcgICAgfCAgIEJpbiAzNDg1IC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQv
SW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbEdyYXkucG5nICAgIHwgICBCaW4gMzQ1MCAtPiAwIGJ5
dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxHcmVlbi5wbmcgICB8
ICAgQmluIDM0ODAgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVIb2xs
b3dQaWxsT3JhbmdlLnBuZyAgfCAgIEJpbiAzNDgwIC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQv
SW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbFB1cnBsZS5wbmcgIHwgICBCaW4gMzQ3NiAtPiAwIGJ5
dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxSZWQucG5nICAgICB8
ICAgQmluIDM0ODYgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVIb2xs
b3dQaWxsWWVsbG93LnBuZyAgfCAgIEJpbiAzNDcyIC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQv
SW1hZ2VzL3RpbWVsaW5lUGlsbEJsdWUucG5nICAgICAgICAgIHwgICBCaW4gMzQwMCAtPiAwIGJ5
dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZVBpbGxHcmF5LnBuZyAgICAgICAgICB8
ICAgQmluIDMzMjYgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVQaWxs
R3JlZW4ucG5nICAgICAgICAgfCAgIEJpbiAzMzUwIC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQv
SW1hZ2VzL3RpbWVsaW5lUGlsbE9yYW5nZS5wbmcgICAgICAgIHwgICBCaW4gMzM1MyAtPiAwIGJ5
dGVzCiAuLi4vZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZVBpbGxQdXJwbGUucG5nICAgICAgICB8
ICAgQmluIDMzNjcgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Rp
bWVsaW5lUGlsbFJlZC5wbmcgfCAgIEJpbiAzMzQyIC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQv
SW1hZ2VzL3RpbWVsaW5lUGlsbFllbGxvdy5wbmcgICAgICAgIHwgICBCaW4gMzMzNSAtPiAwIGJ5
dGVzCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdG9vbGJhckljb25zLnBuZyAgICB8
ICAgQmluIDMwOTQzIC0+IDAgYnl0ZXMKIC4uLi9mcm9udC1lbmQvSW1hZ2VzL3Rvb2xiYXJJY29u
c1NtYWxsLnBuZyAgICAgICAgIHwgICBCaW4gMjM1ODYgLT4gMCBieXRlcwogLi4uL2Zyb250LWVu
ZC9JbWFnZXMvdG9vbGJhckl0ZW1TZWxlY3RlZC5wbmcgICAgICAgfCAgIEJpbiAyNjYgLT4gMCBi
eXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RyYWNrSG9yaXoucG5nICAgICAg
fCAgIEJpbiA1MzAgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Ry
YWNrVmVydC5wbmcgICAgICAgfCAgIEJpbiA1NjUgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9J
bWFnZXMvdHJlZURvd25UcmlhbmdsZUJsYWNrLnBuZyAgICAgfCAgIEJpbiAxNjYgLT4gMCBieXRl
cwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdHJlZURvd25UcmlhbmdsZVdoaXRlLnBuZyAgICAgfCAg
IEJpbiAxNDggLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdHJlZVJpZ2h0VHJpYW5n
bGVCbGFjay5wbmcgICAgfCAgIEJpbiAxNTUgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFn
ZXMvdHJlZVJpZ2h0VHJpYW5nbGVXaGl0ZS5wbmcgICAgfCAgIEJpbiAxNDIgLT4gMCBieXRlcwog
Li4uL2Zyb250LWVuZC9JbWFnZXMvdHJlZVVwVHJpYW5nbGVCbGFjay5wbmcgICAgICAgfCAgIEJp
biAxODAgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdHJlZVVwVHJpYW5nbGVXaGl0
ZS5wbmcgICAgICAgfCAgIEJpbiAxNjIgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3VzZXJJbnB1dEljb24ucG5nICAgfCAgIEJpbiAxODkgLT4gMCBieXRlcwogLi4u
L2Zyb250LWVuZC9JbWFnZXMvdXNlcklucHV0UHJldmlvdXNJY29uLnBuZyAgICAgfCAgIEJpbiAx
NjIgLT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvdXNlcklucHV0UmVzdWx0SWNvbi5w
bmcgICAgICAgfCAgIEJpbiAyMjEgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3dhcm5pbmdJY29uLnBuZyAgICAgfCAgIEJpbiAyNzMgLT4gMCBieXRlcwogLi4uL2Zy
b250LWVuZC9JbWFnZXMvd2FybmluZ01lZGl1bUljb24ucG5nICAgICAgICAgfCAgIEJpbiA1OTIg
LT4gMCBieXRlcwogLi4uL2Zyb250LWVuZC9JbWFnZXMvd2FybmluZ09yYW5nZURvdC5wbmcgICAg
ICAgICAgfCAgIEJpbiA0ODQgLT4gMCBieXRlcwogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL3dhcm5pbmdzRXJyb3JzLnBuZyAgfCAgIEJpbiAxODMyIC0+IDAgYnl0ZXMKIC4uLi9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1VnbGlmeUpTL3BhcnNlLWpzLmpzICAgICAgIHwgIDEyNDcgLS0KIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL0xJQ0VOU0UudHh0IHwgICAgMjQg
LQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzICAgICAgfCAx
NDkxNSAtLS0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNl
ZGV2dG9vbHMuY3NzICAgICAgICB8ICAgIDUwIC0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvYWNlL21vZGVfY3NzLmpzIHwgICA3NTEgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzICAgfCAgMTg4NiAtLS0KIC4uLi9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2FjZS9tb2RlX2phdmFzY3JpcHQuanMgICAgIHwgICA4OTYgLS0KIC4uLi9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2FjZS90aGVtZV90ZXh0bWF0ZS5qcyAgICAgIHwgICAxNjMgLQogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9MSUNFTlNFICAgICAgfCAgICAyMyAt
CiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jbG9zZWJyYWNrZXRzLmpzICAgICAgICB8ICAg
IDUyIC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY21kZXZ0b29scy5jc3Mg
IHwgICAxNDEgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9y
LmNzcyAgfCAgIDI0MiAtCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVt
aXJyb3IuanMgICB8ICA1NTA5IC0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvY20vY3NzLmpzICAgICAgIHwgICA0NjUgLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9jbS9odG1sbWl4ZWQuanMgfCAgICA4NCAtCiAuLi4vV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2NtL2phdmFzY3JpcHQuanMgICB8ICAgNDE5IC0KIC4uLi9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2NtL21hdGNoYnJhY2tldHMuanMgICAgICAgIHwgICAgNzQgLQogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS94bWwuanMgICAgICAgfCAgIDMyNCAtCiAxNTkg
ZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMjc3MTQgZGVsZXRpb25zKC0pCiBkZWxl
dGUgbW9kZSAxMDA3NTUgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5k
LnB5CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvYWRkSWNvbi5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9hcHBsaWNhdGlvbkNhY2hlLnBuZwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2JhY2su
cG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvYnJlYWtwb2ludEJvcmRlci5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9icmVha3BvaW50Q29uZGl0aW9uYWxC
b3JkZXIucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvYnJlYWtwb2ludENvbmRpdGlvbmFsQ291bnRlckJvcmRlci5wbmcKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy9icmVha3BvaW50Q291bnRlckJvcmRlci5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jaGVja2VyLnBuZwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Nsb3Nl
QnV0dG9ucy5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ltYWdlcy9jb29raWUucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGF0YWJhc2UucG5nCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGF0YWJh
c2VUYWJsZS5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ltYWdlcy9kZWJ1Z2dlckNvbnRpbnVlLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RlYnVnZ2VyUGF1c2Uu
cG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZGVidWdnZXJTdGVwSW50by5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kZWJ1Z2dlclN0ZXBPdXQucG5nCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvZGVidWdnZXJTdGVwT3Zlci5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kZWxldGVJY29uLnBuZwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1
cmVUcmlhbmdsZVNtYWxsRG93bi5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbERvd25C
bGFjay5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbERvd25XaGl0ZS5wbmcKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9k
aXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNt
YWxsUmlnaHRCbGFjay5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0RG93bi5w
bmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0RG93bkJsYWNrLnBuZwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rp
c2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHREb3duV2hpdGUucG5nCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRy
aWFuZ2xlU21hbGxSaWdodFdoaXRlLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RvbWFpbi5wbmcKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9lcnJvckljb24u
cG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZXJyb3JNZWRpdW1JY29uLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Vycm9yUmVkRG90LnBuZwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Zp
bGVTeXN0ZW0ucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvZm9yd2FyZC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9mcmFtZS5wbmcKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9nbG9zc3lI
ZWFkZXIucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvZ2xvc3N5SGVhZGVyUHJlc3NlZC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9nbG9zc3lIZWFkZXJT
ZWxlY3RlZC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ltYWdlcy9nbG9zc3lIZWFkZXJTZWxlY3RlZFByZXNzZWQucG5nCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZ29B
cnJvdy5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy9ncmFwaExhYmVsQ2FsbG91dExlZnQucG5nCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZ3JhcGhMYWJlbENh
bGxvdXRSaWdodC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9pbmRleGVkREIucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvaW5kZXhlZERCSW5kZXgucG5n
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvaW5kZXhlZERCT2JqZWN0U3RvcmUucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvbG9jYWxTdG9yYWdlLnBuZwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L25hbWVkRmxvd092ZXJmbG93LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL25hdmlnYXRvclNob3dIaWRlQnV0dG9uLnBuZwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL3BhbmVBZGRCdXR0b25zLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVCb3R0b21Hcm93LnBuZwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVC
b3R0b21Hcm93QWN0aXZlLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVFbGVtZW50U3RhdGVCdXR0b25zLnBuZwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3BhbmVGaWx0ZXJCdXR0b25zLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVHcm93SGFuZGxlTGluZS5wbmcKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9w
YW5lUmVmcmVzaEJ1dHRvbnMucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcGFuZVNldHRpbmdzQnV0dG9ucy5wbmcKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9w
b3BvdmVyQXJyb3dzLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BvcG92ZXJCYWNrZ3JvdW5kLnBuZwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Byb2ZpbGVH
cm91cEljb24ucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvcHJvZmlsZUljb24ucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcHJvZmlsZVNtYWxsSWNvbi5w
bmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9wcm9maWxlc1NpbGhvdWV0dGUucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcHJvZ3JhbUNvdW50ZXJCb3JkZXIu
cG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvcmFkaW9Eb3QucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVnaW9uRW1wdHkucG5nCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVnaW9uRml0
LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3JlZ2lvbk92ZXJzZXQucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVzb3VyY2VDU1NJY29uLnBuZwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3Jlc291cmNlRG9jdW1lbnRJY29uLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Jlc291cmNlRG9jdW1lbnRJY29uU21hbGwu
cG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvcmVzb3VyY2VKU0ljb24ucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVzb3VyY2VQbGFpbkljb24ucG5nCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvcmVzb3VyY2VQbGFpbkljb25TbWFsbC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9yZXNvdXJjZXNTaXplR3JhcGhJY29u
LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3Jlc291cmNlc1RpbWVHcmFwaEljb24ucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2NyaXB0c1NpbGhvdWV0
dGUucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvc2VhcmNoTmV4dC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hQcmV2LnBuZwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJj
aFNtYWxsQmx1ZS5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hTbWFsbEJyaWdodEJsdWUucG5nCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNo
U21hbGxHcmF5LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsV2hpdGUucG5nCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudC5wbmcK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9zZWdtZW50RW5kLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRIb3Zlci5wbmcKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50SG92
ZXJFbmQucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvc2VnbWVudFNlbGVjdGVkLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRTZWxlY3RlZEVu
ZC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9zZXNzaW9uU3RvcmFnZS5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zcGlubmVyLmdpZgogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NwaW5u
ZXJBY3RpdmUuZ2lmCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvc3Bpbm5lckFjdGl2ZVNlbGVjdGVkLmdpZgogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NwaW5uZXJJ
bmFjdGl2ZS5naWYKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ltYWdlcy9zcGlubmVySW5hY3RpdmVTZWxlY3RlZC5naWYKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zcGxpdHZp
ZXdEaW1wbGUucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvc3BsaXR2aWV3RGl2aWRlckJhY2tncm91bmQucG5nCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3Rh
dHVzYmFyQnV0dG9uR2x5cGhzLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3N0YXR1c2JhckJ1dHRvbkdseXBoczJ4LnBuZwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL3N0YXR1c2JhclJlc2l6ZXJIb3Jpem9udGFsLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3N0YXR1c2JhclJlc2l6ZXJW
ZXJ0aWNhbC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ltYWdlcy9zdWNjZXNzR3JlZW5Eb3QucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJBY3RpdmVIb3Jp
ei5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy90aHVtYkFjdGl2ZVZlcnQucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJIb3Jpei5wbmcKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90
aHVtYkhvdmVySG9yaXoucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJIb3ZlclZlcnQucG5nCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJWZXJ0
LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3RpY2tNYXJrLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbEJsdWUucG5nCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvdGltZWxpbmVIb2xsb3dQaWxsR3JheS5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxHcmVl
bi5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxPcmFuZ2UucG5nCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVIb2xs
b3dQaWxsUHVycGxlLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbFJlZC5wbmcKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1l
bGluZUhvbGxvd1BpbGxZZWxsb3cucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVQaWxsQmx1ZS5wbmcKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90
aW1lbGluZVBpbGxHcmF5LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lUGlsbEdyZWVuLnBuZwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVs
aW5lUGlsbE9yYW5nZS5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZVBpbGxQdXJwbGUucG5nCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGltZWxp
bmVQaWxsUmVkLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lUGlsbFllbGxvdy5wbmcKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90b29sYmFySWNv
bnMucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvdG9vbGJhckljb25zU21hbGwucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdG9vbGJhckl0ZW1TZWxlY3Rl
ZC5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy90cmFja0hvcml6LnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RyYWNrVmVydC5wbmcKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90cmVlRG93
blRyaWFuZ2xlQmxhY2sucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdHJlZURvd25UcmlhbmdsZVdoaXRlLnBuZwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Ry
ZWVSaWdodFRyaWFuZ2xlQmxhY2sucG5nCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdHJlZVJpZ2h0VHJpYW5nbGVXaGl0ZS5wbmcK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy90cmVlVXBUcmlhbmdsZUJsYWNrLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RyZWVVcFRyaWFuZ2xlV2hpdGUucG5n
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvdXNlcklucHV0SWNvbi5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy91c2VySW5wdXRQcmV2aW91c0ljb24ucG5nCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvdXNlcklucHV0UmVzdWx0SWNvbi5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy93YXJuaW5nSWNvbi5wbmcKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy93YXJu
aW5nTWVkaXVtSWNvbi5wbmcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy93YXJuaW5nT3JhbmdlRG90LnBuZwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3dhcm5pbmdz
RXJyb3JzLnBuZwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVWdsaWZ5SlMvcGFyc2UtanMuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9MSUNFTlNFLnR4dAogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2Fj
ZWRldnRvb2xzLmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvYWNlL21vZGVfY3NzLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9qYXZhc2Ny
aXB0LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9hY2UvdGhlbWVfdGV4dG1hdGUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL0xJQ0VOU0UKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2Nsb3NlYnJhY2tldHMuanMKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2Nt
ZGV2dG9vbHMuY3NzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5qcwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY3NzLmpzCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9odG1s
bWl4ZWQuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2NtL2phdmFzY3JpcHQuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL21hdGNoYnJhY2tldHMuanMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL3htbC5qcwoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBkMGZmZDQxLi4zYjU2ZjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTMtMTAtMTAgIE1hcmNlbG8gTW9yYWlzICA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIHRoZSBvbGQgZnJvbnQtZW5kIGZyb20gV2ViS2l0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyOTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdWUgdG8gcGF0
Y2ggc2l6ZSBsaW1pdHMsIHRoZSByZW1vdGlvbiBvZiB0aGUgZnJvbnQtZW5kIHdpbGwgYmUgZG9u
ZSBpbiB0d28gcGFydHMuCisKKyAgICAgICAgUGFydCAxOiBSZW1vdmluZyB0aGUgZm9sZGVycyBp
bnNpZGUgb2YgaW5zcGVjdG9yL2Zyb250LWVuZCBwYXRoIGFuZAorICAgICAgICB0aGUgY29tcGls
ZSBmcm9udC1lbmQgc291cmNlLgorCisgICAgICAgICogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQt
ZW5kLnB5OiBSZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzOiBS
ZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVWdsaWZ5SlM6IFJlbW92ZWQu
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9hY2U6IFJlbW92ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9jbTogUmVtb3ZlZC4KKwogMjAxMy0xMC0xMCAgU2VyZ2lvIENv
cnJlaWEgIDxzZXJnaW8uY29ycmVpYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIEZpeCBkZWJ1
ZyBidWlsZCBhZnRlciByMTU3MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvY29tcGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGls
ZS1mcm9udC1lbmQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDc3NzliNGUuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsNDQ5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgot
IyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBnZW5l
cmF0ZV9wcm90b2NvbF9leHRlcm5zCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3lzCi1pbXBvcnQg
dGVtcGZpbGUKLQotaW5zcGVjdG9yX3BhdGggPSAiU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yIgot
aW5zcGVjdG9yX2Zyb250ZW5kX3BhdGggPSBpbnNwZWN0b3JfcGF0aCArICIvZnJvbnQtZW5kIgot
cHJvdG9jb2xfZXh0ZXJuc19wYXRoID0gaW5zcGVjdG9yX2Zyb250ZW5kX3BhdGggKyAiL3Byb3Rv
Y29sLWV4dGVybnMuanMiCi0KLWdlbmVyYXRlX3Byb3RvY29sX2V4dGVybnMuZ2VuZXJhdGVfcHJv
dG9jb2xfZXh0ZXJucyhwcm90b2NvbF9leHRlcm5zX3BhdGgsIGluc3BlY3Rvcl9wYXRoICsgIi9J
bnNwZWN0b3IuanNvbiIpCi0KLWpzbW9kdWxlX25hbWVfcHJlZml4ID0gImpzbW9kdWxlXyIKLW1v
ZHVsZXMgPSBbCi0gICAgewotICAgICAgICAibmFtZSI6ICJjb21tb24iLAotICAgICAgICAiZGVw
ZW5kZW5jaWVzIjogW10sCi0gICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgIkNvbG9y
LmpzIiwKLSAgICAgICAgICAgICJET01FeHRlbnNpb24uanMiLAotICAgICAgICAgICAgIk9iamVj
dC5qcyIsCi0gICAgICAgICAgICAiUGFyc2VkVVJMLmpzIiwKLSAgICAgICAgICAgICJQcm9ncmVz
cy5qcyIsCi0gICAgICAgICAgICAiU2V0dGluZ3MuanMiLAotICAgICAgICAgICAgIlVJU3RyaW5n
LmpzIiwKLSAgICAgICAgICAgICJVc2VyTWV0cmljcy5qcyIsCi0gICAgICAgICAgICAidXRpbGl0
aWVzLmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJzZGsi
LAotICAgICAgICAiZGVwZW5kZW5jaWVzIjogWyJjb21tb24iXSwKLSAgICAgICAgInNvdXJjZXMi
OiBbCi0gICAgICAgICAgICAiQXBwbGljYXRpb25DYWNoZU1vZGVsLmpzIiwKLSAgICAgICAgICAg
ICJDb21waWxlclNjcmlwdE1hcHBpbmcuanMiLAotICAgICAgICAgICAgIkNvbnNvbGVNb2RlbC5q
cyIsCi0gICAgICAgICAgICAiQ29udGVudFByb3ZpZGVyLmpzIiwKLSAgICAgICAgICAgICJDb250
ZW50UHJvdmlkZXJCYXNlZFByb2plY3REZWxlZ2F0ZS5qcyIsCi0gICAgICAgICAgICAiQ29udGVu
dFByb3ZpZGVycy5qcyIsCi0gICAgICAgICAgICAiQ29va2llUGFyc2VyLmpzIiwKLSAgICAgICAg
ICAgICJDU1NNZXRhZGF0YS5qcyIsCi0gICAgICAgICAgICAiQ1NTU3R5bGVNb2RlbC5qcyIsCi0g
ICAgICAgICAgICAiQnJlYWtwb2ludE1hbmFnZXIuanMiLAotICAgICAgICAgICAgIkRhdGFiYXNl
LmpzIiwKLSAgICAgICAgICAgICJET01BZ2VudC5qcyIsCi0gICAgICAgICAgICAiRE9NU3RvcmFn
ZS5qcyIsCi0gICAgICAgICAgICAiRGVidWdnZXJNb2RlbC5qcyIsCi0gICAgICAgICAgICAiRGVi
dWdnZXJTY3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICAgICAgICJGaWxlTWFuYWdlci5qcyIsCi0g
ICAgICAgICAgICAiRmlsZU1hcHBpbmcuanMiLAotICAgICAgICAgICAgIkZpbGVTeXN0ZW1NYXBw
aW5nLmpzIiwKLSAgICAgICAgICAgICJGaWxlU3lzdGVtTW9kZWwuanMiLAotICAgICAgICAgICAg
IkZpbGVTeXN0ZW1Qcm9qZWN0RGVsZWdhdGUuanMiLAotICAgICAgICAgICAgIkZpbGVVdGlscy5q
cyIsCi0gICAgICAgICAgICAiSEFSRW50cnkuanMiLAotICAgICAgICAgICAgIkluZGV4ZWREQk1v
ZGVsLmpzIiwKLSAgICAgICAgICAgICJJbnNwZWN0b3JCYWNrZW5kLmpzIiwKLSAgICAgICAgICAg
ICJJc29sYXRlZEZpbGVTeXN0ZW1NYW5hZ2VyLmpzIiwKLSAgICAgICAgICAgICJJc29sYXRlZEZp
bGVTeXN0ZW0uanMiLAotICAgICAgICAgICAgIkxpbmtpZmllci5qcyIsCi0gICAgICAgICAgICAi
TmV0d29ya0xvZy5qcyIsCi0gICAgICAgICAgICAiTmV0d29ya1VJU291cmNlQ29kZVByb3ZpZGVy
LmpzIiwKLSAgICAgICAgICAgICJQcmVzZW50YXRpb25Db25zb2xlTWVzc2FnZUhlbHBlci5qcyIs
Ci0gICAgICAgICAgICAiUnVudGltZU1vZGVsLmpzIiwKLSAgICAgICAgICAgICJTQVNTU291cmNl
TWFwcGluZy5qcyIsCi0gICAgICAgICAgICAiU2NyaXB0LmpzIiwKLSAgICAgICAgICAgICJTY3Jp
cHRGb3JtYXR0ZXIuanMiLAotICAgICAgICAgICAgIlNjcmlwdFNuaXBwZXRNb2RlbC5qcyIsCi0g
ICAgICAgICAgICAiU2ltcGxlV29ya3NwYWNlUHJvdmlkZXIuanMiLAotICAgICAgICAgICAgIlNu
aXBwZXRTdG9yYWdlLmpzIiwKLSAgICAgICAgICAgICJTb3VyY2VNYXBwaW5nLmpzIiwKLSAgICAg
ICAgICAgICJTdHlsZXNTb3VyY2VNYXBwaW5nLmpzIiwKLSAgICAgICAgICAgICJUaW1lbGluZU1h
bmFnZXIuanMiLAotICAgICAgICAgICAgIlJlbW90ZU9iamVjdC5qcyIsCi0gICAgICAgICAgICAi
UmVzb3VyY2UuanMiLAotICAgICAgICAgICAgIkRlZmF1bHRTY3JpcHRNYXBwaW5nLmpzIiwKLSAg
ICAgICAgICAgICJSZXNvdXJjZVNjcmlwdE1hcHBpbmcuanMiLAotICAgICAgICAgICAgIkxpdmVF
ZGl0U3VwcG9ydC5qcyIsCi0gICAgICAgICAgICAiUmVzb3VyY2VUcmVlTW9kZWwuanMiLAotICAg
ICAgICAgICAgIlJlc291cmNlVHlwZS5qcyIsCi0gICAgICAgICAgICAiUmVzb3VyY2VVdGlscy5q
cyIsCi0gICAgICAgICAgICAiU291cmNlTWFwLmpzIiwKLSAgICAgICAgICAgICJOZXR3b3JrTWFu
YWdlci5qcyIsCi0gICAgICAgICAgICAiTmV0d29ya1JlcXVlc3QuanMiLAotICAgICAgICAgICAg
IlVJU291cmNlQ29kZS5qcyIsCi0gICAgICAgICAgICAiVXNlckFnZW50U3VwcG9ydC5qcyIsCi0g
ICAgICAgICAgICAiV29ya3NwYWNlLmpzIiwKLSAgICAgICAgICAgICJwcm90b2NvbC1leHRlcm5z
LmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJ1aSIsCi0g
ICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNvbW1vbiJdLAotICAgICAgICAic291cmNlcyI6IFsK
LSAgICAgICAgICAgICJDaGVja2JveC5qcyIsCi0gICAgICAgICAgICAiQ29udGV4dE1lbnUuanMi
LAotICAgICAgICAgICAgIkRPTVN5bnRheEhpZ2hsaWdodGVyLmpzIiwKLSAgICAgICAgICAgICJE
YXRhR3JpZC5qcyIsCi0gICAgICAgICAgICAiRGVmYXVsdFRleHRFZGl0b3IuanMiLAotICAgICAg
ICAgICAgIkRpYWxvZy5qcyIsCi0gICAgICAgICAgICAiRG9ja0NvbnRyb2xsZXIuanMiLAotICAg
ICAgICAgICAgIkRyYXdlci5qcyIsCi0gICAgICAgICAgICAiRW1wdHlWaWV3LmpzIiwKLSAgICAg
ICAgICAgICJHb1RvTGluZURpYWxvZy5qcyIsCi0gICAgICAgICAgICAiSGVscFNjcmVlbi5qcyIs
Ci0gICAgICAgICAgICAiSW5zcGVjdG9yVmlldy5qcyIsCi0gICAgICAgICAgICAiS2V5Ym9hcmRT
aG9ydGN1dC5qcyIsCi0gICAgICAgICAgICAiT3ZlcnZpZXdHcmlkLmpzIiwKLSAgICAgICAgICAg
ICJQYW5lbC5qcyIsCi0gICAgICAgICAgICAiUGFuZWxFbmFibGVyVmlldy5qcyIsCi0gICAgICAg
ICAgICAiUGxhY2FyZC5qcyIsCi0gICAgICAgICAgICAiUG9wb3Zlci5qcyIsCi0gICAgICAgICAg
ICAiUHJvZ3Jlc3NJbmRpY2F0b3IuanMiLAotICAgICAgICAgICAgIlByb3BlcnRpZXNTZWN0aW9u
LmpzIiwKLSAgICAgICAgICAgICJTZWFyY2hDb250cm9sbGVyLmpzIiwKLSAgICAgICAgICAgICJT
ZWN0aW9uLmpzIiwKLSAgICAgICAgICAgICJTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAgICAgICAi
U2lkZWJhclRyZWVFbGVtZW50LmpzIiwKLSAgICAgICAgICAgICJTaG9ydGN1dHNTY3JlZW4uanMi
LAotICAgICAgICAgICAgIlNob3dNb3JlRGF0YUdyaWROb2RlLmpzIiwKLSAgICAgICAgICAgICJT
aWRlYmFyT3ZlcmxheS5qcyIsCi0gICAgICAgICAgICAiU29mdENvbnRleHRNZW51LmpzIiwKLSAg
ICAgICAgICAgICJTb3VyY2VUb2tlbml6ZXIuanMiLAotICAgICAgICAgICAgIlNwZWN0cnVtLmpz
IiwKLSAgICAgICAgICAgICJTcGxpdFZpZXcuanMiLAotICAgICAgICAgICAgIlNpZGViYXJWaWV3
LmpzIiwKLSAgICAgICAgICAgICJTdGF0dXNCYXJCdXR0b24uanMiLAotICAgICAgICAgICAgIlN1
Z2dlc3RCb3guanMiLAotICAgICAgICAgICAgIlRhYmJlZFBhbmUuanMiLAotICAgICAgICAgICAg
IlRleHRFZGl0b3IuanMiLAotICAgICAgICAgICAgIlRleHRFZGl0b3JIaWdobGlnaHRlci5qcyIs
Ci0gICAgICAgICAgICAiVGV4dEVkaXRvck1vZGVsLmpzIiwKLSAgICAgICAgICAgICJUZXh0UHJv
bXB0LmpzIiwKLSAgICAgICAgICAgICJUZXh0VXRpbHMuanMiLAotICAgICAgICAgICAgIlRpbWVs
aW5lR3JpZC5qcyIsCi0gICAgICAgICAgICAiVG9vbGJhci5qcyIsCi0gICAgICAgICAgICAiVUlV
dGlscy5qcyIsCi0gICAgICAgICAgICAiVmlldy5qcyIsCi0gICAgICAgICAgICAiVmlld3BvcnRD
b250cm9sLmpzIiwKLSAgICAgICAgICAgICJ0cmVlb3V0bGluZS5qcyIsCi0gICAgICAgIF0KLSAg
ICB9LAotICAgIHsKLSAgICAgICAgIm5hbWUiOiAiY29tcG9uZW50cyIsCi0gICAgICAgICJkZXBl
bmRlbmNpZXMiOiBbInNkayIsICJ1aSJdLAotICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAg
ICAgICJBZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuanMiLAotICAgICAgICAgICAgIkhhbmRsZXJS
ZWdpc3RyeS5qcyIsCi0gICAgICAgICAgICAiQ29uc29sZU1lc3NhZ2UuanMiLAotICAgICAgICAg
ICAgIkNvb2tpZXNUYWJsZS5qcyIsCi0gICAgICAgICAgICAiRE9NQnJlYWtwb2ludHNTaWRlYmFy
UGFuZS5qcyIsCi0gICAgICAgICAgICAiRE9NUHJlc2VudGF0aW9uVXRpbHMuanMiLAotICAgICAg
ICAgICAgIkVsZW1lbnRzVHJlZU91dGxpbmUuanMiLAotICAgICAgICAgICAgIkZvbnRWaWV3Lmpz
IiwKLSAgICAgICAgICAgICJJbWFnZVZpZXcuanMiLAotICAgICAgICAgICAgIk5hdGl2ZUJyZWFr
cG9pbnRzU2lkZWJhclBhbmUuanMiLAotICAgICAgICAgICAgIkluc3BlY3RFbGVtZW50TW9kZUNv
bnRyb2xsZXIuanMiLAotICAgICAgICAgICAgIk9iamVjdFBvcG92ZXJIZWxwZXIuanMiLAotICAg
ICAgICAgICAgIk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzIiwKLSAgICAgICAgICAgICJTb3Vy
Y2VGcmFtZS5qcyIsCi0gICAgICAgICAgICAiUmVzb3VyY2VWaWV3LmpzIiwKLSAgICAgICAgXQot
ICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJlbGVtZW50cyIsCi0gICAgICAgICJkZXBl
bmRlbmNpZXMiOiBbImNvbXBvbmVudHMiXSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAg
ICAgICAiQ1NTTmFtZWRGbG93Q29sbGVjdGlvbnNWaWV3LmpzIiwKLSAgICAgICAgICAgICJDU1NO
YW1lZEZsb3dWaWV3LmpzIiwKLSAgICAgICAgICAgICJFbGVtZW50c1BhbmVsLmpzIiwKLSAgICAg
ICAgICAgICJFbGVtZW50c1BhbmVsRGVzY3JpcHRvci5qcyIsCi0gICAgICAgICAgICAiRXZlbnRM
aXN0ZW5lcnNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAgICAgICAiTWV0cmljc1NpZGViYXJQYW5l
LmpzIiwKLSAgICAgICAgICAgICJQcm9wZXJ0aWVzU2lkZWJhclBhbmUuanMiLAotICAgICAgICAg
ICAgIlN0eWxlc1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewotICAg
ICAgICAibmFtZSI6ICJuZXR3b3JrIiwKLSAgICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9u
ZW50cyJdLAotICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICJOZXR3b3JrSXRlbVZp
ZXcuanMiLAotICAgICAgICAgICAgIlJlcXVlc3RDb29raWVzVmlldy5qcyIsCi0gICAgICAgICAg
ICAiUmVxdWVzdEhlYWRlcnNWaWV3LmpzIiwKLSAgICAgICAgICAgICJSZXF1ZXN0SFRNTFZpZXcu
anMiLAotICAgICAgICAgICAgIlJlcXVlc3RKU09OVmlldy5qcyIsCi0gICAgICAgICAgICAiUmVx
dWVzdFByZXZpZXdWaWV3LmpzIiwKLSAgICAgICAgICAgICJSZXF1ZXN0UmVzcG9uc2VWaWV3Lmpz
IiwKLSAgICAgICAgICAgICJSZXF1ZXN0VGltaW5nVmlldy5qcyIsCi0gICAgICAgICAgICAiUmVx
dWVzdFZpZXcuanMiLAotICAgICAgICAgICAgIlJlc291cmNlV2ViU29ja2V0RnJhbWVWaWV3Lmpz
IiwKLSAgICAgICAgICAgICJOZXR3b3JrUGFuZWwuanMiLAotICAgICAgICAgICAgIk5ldHdvcmtQ
YW5lbERlc2NyaXB0b3IuanMiLAotICAgICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAgICJu
YW1lIjogInJlc291cmNlcyIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNvbXBvbmVudHMi
XSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAiQXBwbGljYXRpb25DYWNoZUl0
ZW1zVmlldy5qcyIsCi0gICAgICAgICAgICAiQ29va2llSXRlbXNWaWV3LmpzIiwKLSAgICAgICAg
ICAgICJEYXRhYmFzZVF1ZXJ5Vmlldy5qcyIsCi0gICAgICAgICAgICAiRGF0YWJhc2VUYWJsZVZp
ZXcuanMiLAotICAgICAgICAgICAgIkRpcmVjdG9yeUNvbnRlbnRWaWV3LmpzIiwKLSAgICAgICAg
ICAgICJET01TdG9yYWdlSXRlbXNWaWV3LmpzIiwKLSAgICAgICAgICAgICJGaWxlQ29udGVudFZp
ZXcuanMiLAotICAgICAgICAgICAgIkZpbGVTeXN0ZW1WaWV3LmpzIiwKLSAgICAgICAgICAgICJJ
bmRleGVkREJWaWV3cy5qcyIsCi0gICAgICAgICAgICAiUmVzb3VyY2VzUGFuZWwuanMiLAotICAg
ICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAgICJuYW1lIjogIndvcmtlcnMiLAotICAgICAg
ICAiZGVwZW5kZW5jaWVzIjogWyJjb21wb25lbnRzIl0sCi0gICAgICAgICJzb3VyY2VzIjogWwot
ICAgICAgICAgICAgIldvcmtlck1hbmFnZXIuanMiLAotICAgICAgICBdCi0gICAgfSwKLSAgICB7
Ci0gICAgICAgICJuYW1lIjogInNjcmlwdHMiLAotICAgICAgICAiZGVwZW5kZW5jaWVzIjogWyJj
b21wb25lbnRzIiwgIndvcmtlcnMiXSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAg
ICAiQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAgICAgICAiQ2FsbFN0YWNrU2lk
ZWJhclBhbmUuanMiLAotICAgICAgICAgICAgIkZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5q
cyIsCi0gICAgICAgICAgICAiSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpzIiwKLSAgICAgICAgICAg
ICJOYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlci5qcyIsCi0gICAgICAgICAgICAiTmF2aWdhdG9y
Vmlldy5qcyIsCi0gICAgICAgICAgICAiUmV2aXNpb25IaXN0b3J5Vmlldy5qcyIsCi0gICAgICAg
ICAgICAiU2NvcGVDaGFpblNpZGViYXJQYW5lLmpzIiwKLSAgICAgICAgICAgICJTY3JpcHRzTmF2
aWdhdG9yLmpzIiwKLSAgICAgICAgICAgICJTY3JpcHRzUGFuZWwuanMiLAotICAgICAgICAgICAg
IlNjcmlwdHNQYW5lbERlc2NyaXB0b3IuanMiLAotICAgICAgICAgICAgIlNjcmlwdHNTZWFyY2hT
Y29wZS5qcyIsCi0gICAgICAgICAgICAiU25pcHBldEphdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyIs
Ci0gICAgICAgICAgICAiU3R5bGVTaGVldE91dGxpbmVEaWFsb2cuanMiLAotICAgICAgICAgICAg
IlRhYmJlZEVkaXRvckNvbnRhaW5lci5qcyIsCi0gICAgICAgICAgICAiVUlTb3VyY2VDb2RlRnJh
bWUuanMiLAotICAgICAgICAgICAgIldhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcyIsCi0g
ICAgICAgICAgICAiV29ya2Vyc1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0g
ICAgewotICAgICAgICAibmFtZSI6ICJjb25zb2xlIiwKLSAgICAgICAgImRlcGVuZGVuY2llcyI6
IFsiY29tcG9uZW50cyJdLAotICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICJDb25z
b2xlVmlldy5qcyIsCi0gICAgICAgICAgICAiQ29uc29sZVBhbmVsLmpzIiwKLSAgICAgICAgXQot
ICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJ0aW1lbGluZSIsCi0gICAgICAgICJkZXBl
bmRlbmNpZXMiOiBbImNvbXBvbmVudHMiXSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAg
ICAgICAiRE9NQ291bnRlcnNHcmFwaC5qcyIsCi0gICAgICAgICAgICAiTWVtb3J5U3RhdGlzdGlj
cy5qcyIsCi0gICAgICAgICAgICAiTmF0aXZlTWVtb3J5R3JhcGguanMiLAotICAgICAgICAgICAg
IlRpbWVsaW5lTW9kZWwuanMiLAotICAgICAgICAgICAgIlRpbWVsaW5lT3ZlcnZpZXdQYW5lLmpz
IiwKLSAgICAgICAgICAgICJUaW1lbGluZVBhbmVsLmpzIiwKLSAgICAgICAgICAgICJUaW1lbGlu
ZVBhbmVsRGVzY3JpcHRvci5qcyIsCi0gICAgICAgICAgICAiVGltZWxpbmVQcmVzZW50YXRpb25N
b2RlbC5qcyIsCi0gICAgICAgICAgICAiVGltZWxpbmVGcmFtZUNvbnRyb2xsZXIuanMiCi0gICAg
ICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICAgIm5hbWUiOiAiYXVkaXRzIiwKLSAgICAgICAg
ImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyJdLAotICAgICAgICAic291cmNlcyI6IFsKLSAg
ICAgICAgICAgICJBdWRpdENhdGVnb3JpZXMuanMiLAotICAgICAgICAgICAgIkF1ZGl0Q29udHJv
bGxlci5qcyIsCi0gICAgICAgICAgICAiQXVkaXRGb3JtYXR0ZXJzLmpzIiwKLSAgICAgICAgICAg
ICJBdWRpdExhdW5jaGVyVmlldy5qcyIsCi0gICAgICAgICAgICAiQXVkaXRSZXN1bHRWaWV3Lmpz
IiwKLSAgICAgICAgICAgICJBdWRpdFJ1bGVzLmpzIiwKLSAgICAgICAgICAgICJBdWRpdHNQYW5l
bC5qcyIsCi0gICAgICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICAgIm5hbWUiOiAiZXh0ZW5z
aW9ucyIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNvbXBvbmVudHMiXSwKLSAgICAgICAg
InNvdXJjZXMiOiBbCi0gICAgICAgICAgICAiRXh0ZW5zaW9uQVBJLmpzIiwKLSAgICAgICAgICAg
ICJFeHRlbnNpb25BdWRpdENhdGVnb3J5LmpzIiwKLSAgICAgICAgICAgICJFeHRlbnNpb25QYW5l
bC5qcyIsCi0gICAgICAgICAgICAiRXh0ZW5zaW9uUmVnaXN0cnlTdHViLmpzIiwKLSAgICAgICAg
ICAgICJFeHRlbnNpb25TZXJ2ZXIuanMiLAotICAgICAgICAgICAgIkV4dGVuc2lvblZpZXcuanMi
LAotICAgICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAgICJuYW1lIjogInNldHRpbmdzIiwK
LSAgICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyIsICJleHRlbnNpb25zIl0sCi0g
ICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgIlNldHRpbmdzU2NyZWVuLmpzIiwKLSAg
ICAgICAgICAgICJPdmVycmlkZXNWaWV3LmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewot
ICAgICAgICAibmFtZSI6ICJ0ZXN0cyIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNvbXBv
bmVudHMiXSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAiVGVzdENvbnRyb2xs
ZXIuanMiLAotICAgICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAgICJuYW1lIjogInByb2Zp
bGVyIiwKLSAgICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyIsICJ3b3JrZXJzIl0s
Ci0gICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgIkJvdHRvbVVwUHJvZmlsZURhdGFH
cmlkVHJlZS5qcyIsCi0gICAgICAgICAgICAiQ1BVUHJvZmlsZVZpZXcuanMiLAotICAgICAgICAg
ICAgIkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMiLAotICAgICAgICAgICAgIkZsYW1lQ2hhcnQu
anMiLAotICAgICAgICAgICAgIkhlYXBTbmFwc2hvdC5qcyIsCi0gICAgICAgICAgICAiSGVhcFNu
YXBzaG90RGF0YUdyaWRzLmpzIiwKLSAgICAgICAgICAgICJIZWFwU25hcHNob3RHcmlkTm9kZXMu
anMiLAotICAgICAgICAgICAgIkhlYXBTbmFwc2hvdExvYWRlci5qcyIsCi0gICAgICAgICAgICAi
SGVhcFNuYXBzaG90UHJveHkuanMiLAotICAgICAgICAgICAgIkhlYXBTbmFwc2hvdFZpZXcuanMi
LAotICAgICAgICAgICAgIkhlYXBTbmFwc2hvdFdvcmtlci5qcyIsCi0gICAgICAgICAgICAiSGVh
cFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyIsCi0gICAgICAgICAgICAiSlNIZWFwU25hcHNo
b3QuanMiLAotICAgICAgICAgICAgIk5hdGl2ZUhlYXBTbmFwc2hvdC5qcyIsCi0gICAgICAgICAg
ICAiUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIsCi0gICAgICAgICAgICAiUHJvZmlsZXNQYW5lbC5q
cyIsCi0gICAgICAgICAgICAiUHJvZmlsZXNQYW5lbERlc2NyaXB0b3IuanMiLAotICAgICAgICAg
ICAgIlByb2ZpbGVMYXVuY2hlclZpZXcuanMiLAotICAgICAgICAgICAgIlRvcERvd25Qcm9maWxl
RGF0YUdyaWRUcmVlLmpzIiwKLSAgICAgICAgICAgICJDYW52YXNQcm9maWxlVmlldy5qcyIsCi0g
ICAgICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICAgIm5hbWUiOiAiaG9zdF9zdHViIiwKLSAg
ICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyIsICJwcm9maWxlciIsICJ0aW1lbGlu
ZSJdLAotICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICJJbnNwZWN0b3JGcm9udGVu
ZEFQSS5qcyIsCi0gICAgICAgICAgICAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyIsCi0g
ICAgICAgIF0KLSAgICB9Ci1dCi0KLW1vZHVsZXNfYnlfbmFtZSA9IHt9Ci1mb3IgbW9kdWxlIGlu
IG1vZHVsZXM6Ci0gICAgbW9kdWxlc19ieV9uYW1lW21vZHVsZVsibmFtZSJdXSA9IG1vZHVsZQot
Ci0KLWRlZiBkdW1wX21vZHVsZShuYW1lLCByZWN1cnNpdmVseSwgcHJvY2Vzc2VkX21vZHVsZXMp
OgotICAgIGlmIG5hbWUgaW4gcHJvY2Vzc2VkX21vZHVsZXM6Ci0gICAgICAgIHJldHVybiAiIgot
ICAgIHByb2Nlc3NlZF9tb2R1bGVzW25hbWVdID0gVHJ1ZQotICAgIG1vZHVsZSA9IG1vZHVsZXNf
YnlfbmFtZVtuYW1lXQotICAgIGNvbW1hbmQgPSAiIgotICAgIGlmIHJlY3Vyc2l2ZWx5OgotICAg
ICAgICBmb3IgZGVwZW5kZW5jeSBpbiBtb2R1bGVbImRlcGVuZGVuY2llcyJdOgotICAgICAgICAg
ICAgY29tbWFuZCArPSBkdW1wX21vZHVsZShkZXBlbmRlbmN5LCByZWN1cnNpdmVseSwgcHJvY2Vz
c2VkX21vZHVsZXMpCi0gICAgY29tbWFuZCArPSAiIFxcXG4gICAgLS1tb2R1bGUgIiArIGpzbW9k
dWxlX25hbWVfcHJlZml4ICsgbW9kdWxlWyJuYW1lIl0gKyAiOiIKLSAgICBjb21tYW5kICs9IHN0
cihsZW4obW9kdWxlWyJzb3VyY2VzIl0pKQotICAgIGZpcnN0RGVwZW5kZW5jeSA9IFRydWUKLSAg
ICBmb3IgZGVwZW5kZW5jeSBpbiBtb2R1bGVbImRlcGVuZGVuY2llcyJdOgotICAgICAgICBpZiBm
aXJzdERlcGVuZGVuY3k6Ci0gICAgICAgICAgICBjb21tYW5kICs9ICI6IgotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgY29tbWFuZCArPSAiLCIKLSAgICAgICAgZmlyc3REZXBlbmRlbmN5ID0g
RmFsc2UKLSAgICAgICAgY29tbWFuZCArPSBqc21vZHVsZV9uYW1lX3ByZWZpeCArIGRlcGVuZGVu
Y3kKLSAgICBmb3Igc2NyaXB0IGluIG1vZHVsZVsic291cmNlcyJdOgotICAgICAgICBjb21tYW5k
ICs9ICIgXFxcbiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX2Zyb250ZW5kX3BhdGggKyAiLyIg
KyBzY3JpcHQKLSAgICByZXR1cm4gY29tbWFuZAotCi1tb2R1bGVzX2RpciA9IHRlbXBmaWxlLm1r
ZHRlbXAoKQotY29tcGlsZXJfY29tbWFuZCA9ICJqYXZhIC1qYXIgfi9jbG9zdXJlL2NvbXBpbGVy
LmphciAtLXN1bW1hcnlfZGV0YWlsX2xldmVsIDMgLS1jb21waWxhdGlvbl9sZXZlbCBTSU1QTEVf
T1BUSU1JWkFUSU9OUyAtLXdhcm5pbmdfbGV2ZWwgVkVSQk9TRSAtLWxhbmd1YWdlX2luIEVDTUFT
Q1JJUFQ1IC0tYWNjZXB0X2NvbnN0X2tleXdvcmQgLS1tb2R1bGVfb3V0cHV0X3BhdGhfcHJlZml4
ICVzLyBcXFxuIiAlIG1vZHVsZXNfZGlyCi0KLXByb2Nlc3NfcmVjdXJzaXZlbHkgPSBsZW4oc3lz
LmFyZ3YpID4gMQotaWYgcHJvY2Vzc19yZWN1cnNpdmVseToKLSAgICBtb2R1bGVfbmFtZSA9IHN5
cy5hcmd2WzFdCi0gICAgaWYgbW9kdWxlX25hbWUgIT0gImFsbCI6Ci0gICAgICAgIG1vZHVsZXMg
PSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc3lzLmFyZ3YpKToKLSAgICAgICAg
ICAgIG1vZHVsZXMuYXBwZW5kKG1vZHVsZXNfYnlfbmFtZVtzeXMuYXJndltpXV0pCi0gICAgZm9y
IG1vZHVsZSBpbiBtb2R1bGVzOgotICAgICAgICBjb21tYW5kID0gY29tcGlsZXJfY29tbWFuZAot
ICAgICAgICBjb21tYW5kICs9ICIgICAgLS1leHRlcm5zICIgKyBpbnNwZWN0b3JfZnJvbnRlbmRf
cGF0aCArICIvZXh0ZXJucy5qcyIKLSAgICAgICAgY29tbWFuZCArPSBkdW1wX21vZHVsZShtb2R1
bGVbIm5hbWUiXSwgVHJ1ZSwge30pCi0gICAgICAgIHByaW50ICJDb21waWxpbmcgXCIiICsgbW9k
dWxlWyJuYW1lIl0gKyAiXCIiCi0gICAgICAgIG9zLnN5c3RlbShjb21tYW5kKQotZWxzZToKLSAg
ICBjb21tYW5kID0gY29tcGlsZXJfY29tbWFuZAotICAgIGNvbW1hbmQgKz0gIiAgICAtLWV4dGVy
bnMgIiArIGluc3BlY3Rvcl9mcm9udGVuZF9wYXRoICsgIi9leHRlcm5zLmpzIgotICAgIGZvciBt
b2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgY29tbWFuZCArPSBkdW1wX21vZHVsZShtb2R1bGVb
Im5hbWUiXSwgRmFsc2UsIHt9KQotICAgIG9zLnN5c3RlbShjb21tYW5kKQotCi1pZiBub3QgcHJv
Y2Vzc19yZWN1cnNpdmVseToKLSAgICBwcmludCAiQ29tcGlsaW5nIEluamVjdGVkU2NyaXB0U291
cmNlLmpzLi4uIgotICAgIG9zLnN5c3RlbSgiZWNobyBcInZhciBpbmplY3RlZFNjcmlwdFZhbHVl
ID0gXCIgPiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRTb3VyY2VU
bXAuanMiKQotICAgIG9zLnN5c3RlbSgiY2F0ICAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAi
SW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMiICsgIiA+PiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIg
KyAiSW5qZWN0ZWRTY3JpcHRTb3VyY2VUbXAuanMiKQotICAgIGNvbW1hbmQgPSBjb21waWxlcl9j
b21tYW5kCi0gICAgY29tbWFuZCArPSAiICAgIC0tZXh0ZXJucyAiICsgaW5zcGVjdG9yX3BhdGgg
KyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRFeHRlcm5zLmpzIiArICIgXFxcbiIKLSAgICBjb21tYW5k
ICs9ICIgICAgLS1leHRlcm5zICIgKyBwcm90b2NvbF9leHRlcm5zX3BhdGggKyAiIFxcXG4iCi0g
ICAgY29tbWFuZCArPSAiICAgIC0tbW9kdWxlICIgKyBqc21vZHVsZV9uYW1lX3ByZWZpeCArICJp
bmplY3RlZF9zY3JpcHQiICsgIjoiICsgIjEiICsgIiBcXFxuIgotICAgIGNvbW1hbmQgKz0gIiAg
ICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRTb3Vy
Y2VUbXAuanMiICsgIiBcXFxuIgotICAgIGNvbW1hbmQgKz0gIlxuIgotICAgIG9zLnN5c3RlbShj
b21tYW5kKQotICAgIG9zLnN5c3RlbSgicm0gIiArIGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIklu
amVjdGVkU2NyaXB0U291cmNlVG1wLmpzIikKLQotICAgIHByaW50ICJDb21waWxpbmcgSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMuLi4iCi0gICAgb3Muc3lzdGVtKCJlY2hvIFwi
dmFyIGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlVmFsdWUgPSBcIiA+ICIgKyBpbnNwZWN0b3Jf
cGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZVRtcC5qcyIpCi0g
ICAgb3Muc3lzdGVtKCJjYXQgICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcyIgKyAiID4+ICIgKyBpbnNwZWN0b3JfcGF0aCArICIv
IiArICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZVRtcC5qcyIpCi0gICAgY29tbWFu
ZCA9IGNvbXBpbGVyX2NvbW1hbmQKLSAgICBjb21tYW5kICs9ICIgICAgLS1leHRlcm5zICIgKyBp
bnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdEV4dGVybnMuanMiICsgIiBcXFxu
IgotICAgIGNvbW1hbmQgKz0gIiAgICAtLWV4dGVybnMgIiArIHByb3RvY29sX2V4dGVybnNfcGF0
aCArICIgXFxcbiIKLSAgICBjb21tYW5kICs9ICIgICAgLS1tb2R1bGUgIiArIGpzbW9kdWxlX25h
bWVfcHJlZml4ICsgImluamVjdGVkX3NjcmlwdCIgKyAiOiIgKyAiMSIgKyAiIFxcXG4iCi0gICAg
Y29tbWFuZCArPSAiICAgICAgICAtLWpzICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZVRtcC5qcyIgKyAiIFxcXG4iCi0gICAgY29tbWFu
ZCArPSAiXG4iCi0gICAgb3Muc3lzdGVtKGNvbW1hbmQpCi0gICAgb3Muc3lzdGVtKCJybSAiICsg
aW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2VU
bXAuanMiKQotCi1zaHV0aWwucm10cmVlKG1vZHVsZXNfZGlyKQotI29zLnN5c3RlbSgicm0gIiAr
IHByb3RvY29sX2V4dGVybnNfcGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL2FkZEljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvYWRkSWNvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA2ZDA3YjBlNGRmZTI1NWM4ZWE3NDg2MWMxNDUyYTRmNGE4ZmZkNjguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjcxCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeQVR9
MlY4PDZaWkk9PmY0RiV9MjhKMjkqfkMtVn0+Vk4zRk1jVllNcwp6ZighTzhwOX5iP0VieGRkVz88
a0oyNE9+cVMjdTxTZzZ0KXB6T0wrZDgzaEhJT3xQR1J2PEUyRUA5RStnQjV9RjMKelp6Q18wcCNh
TnFlUXl5NTRfV3lNN2R4VWlXTihadlBAR1d2ZmI5OyR7OH5tQUAxfSFCe1dEKFY8dTk+Uz9zVmdM
Cnp4UzdHdz9lZW91I14qQlVie2hUQHQ1MDwxMiFGN3R7N3V8VyRAaER8dCpSPEk3dHMqKWBoUWt9
PUYmT1EySXF8Iwp6bVFKfUIlflFhXyQ4aGc9d2Y/ZHhlKT1CYEojVlMzb3BmI0V4fkclT3RtV0VJ
bmZzZjR2KE1fU1NTU3YzOGlTeysKS3BVWE9AZ2VDeFpaRDRyLQoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2FwcGxpY2F0aW9uQ2FjaGUucG5n
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvYXBwbGljYXRpb25D
YWNoZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMThlNzUzYzY2Njg5ZmU5
NjNhMzZmZWYwMjgyNzM3ODY3NzM4MWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwg
MTczNQp6Y21WOyYxfn5iTlApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFeQHM2YjkjRjgw
MDA4Y1grdUwkTmtjOyoKelA7emYoWD40VHgwOWVDfmxnbiFxU3JtdUE+ZkU0XkFQbHN4VUpSRjZO
UlQ5eTQ+VGVeKG4pTmh2MkRza2xPUlpeCnpgZ1Y3am85ZGNkKW9+T04kO1BHNUZualRfYU4hQHwh
aTZpe0M9cS1paDxnPTk2eF50Xml8VFkmQE9mNVd7bSF8Kwp6Ykl2VTtibFN4ciY/eU9YZXFAfG5S
ISZZJCVONVRedjdSbjZiUVJxJjclVVhWMEUkN05gNmZPLSEyKT5MX3g9MSYKenFwSzlVYjZ+QjYp
Y2NZT1VGaTQ+KUdDdXgoO3pnRUp7YmlPaDt1O04jUU9oMGRNNClVSy0hRXVMbStNZXRLN2d1CnpB
bnBNSlpuYW9+UDY2fio1O1pka3AzYC09SW5OKEp4QUc/cjB+O1c5UilyJT93aVpnbztSOFRGU2cl
VEljbShKTAp6Pnc0TVNId3lGcyYmeWB0TTlrSmtGQiU8PklkI08+YExRT2leSm5zaG53fXp2dmQp
ciFJRGRGI05rMzhDVWpROy0KeklrVTlgNHpMRE5kcnchI2tIJjIyKTc3RFRsT0xKN0dYZVlzc2NW
NVFqSyNDMT9sNlQkO28rbjNrdlFiWShuby15CnpNaX56ZWpZa2ZKa0hYKilHVyo/MU8oRFVPOTUz
O0NpTldKPD5MP0AqTjY2K2A9eHNTamA+RmxMZXIjWDF1aTM5Sgp6WDZpbGQlemA9WXhyLU94UTl4
bEB6UmhmTnJyNik1I3ZtRl4xO3QhenIhWDtUViFFPF9HMUdRKDdjYWIxPWtwJkUKelRkRzgtSzR3
c2Eld3E3RU4xK0soMz97biQ9PUshKT93TVFiK1B4bCZvNXZuQC0jeFNKdTQ+PEdyQ003cHw4Q2JN
CnombnhrIypkI3s5ZlleWilkJkZMYFRNVVo8dX5VcS1QRTZxQWFUMHxncT0/NG42bXJAQlRkRX5+
WVhHRWslMiZwNwp6cklYOWJmfmwxfnRyQWM0N3dPLU8kKkV9Pih7dnFmZ3Nec05UbD9UKDBvSXp1
d2lYP1BVMm1ifEwwanZ8ITBKbkkKemJETFc/XkckMlp4KHx7MUNqdUMlMSplUXhzWVlfTVpFdSVA
TDc8ZiFfMSpxblM9M3FAdVRxVWRYO2k0cHllam4qCnptYll3PFVBblctYEomUEl1bU0qNTJWZWVl
RyhLSHZHYD9KZ2pefVYmZSs5dDJ7WTVtLWAxMWUmMDEwcU5TI3RtWQp6M2xqaFUzbGprVm53JUhf
MDBXOyVMX3QobyF7d0p2aXljKUVoTXpqIWIwP2E2OEY4MFFldC0qQzs7KFJ9T0hxKDAKekk9V0w3
b2lMSFdLJSE5QFMwVz4zMHVHdjtORUJRfEZ5TFpmNmI0RHFmSWxEYEx4YEVWX3gzJGlGOFh4ZXt5
TygjCnpWLX11R2NobEE5dCRPUk5zPyh7TkBpMTQpTHRkbz1GRnhKQlY4fVlLdyY9JmI2fntRIXIy
dzdxKl9Ia0t1ZVRnZgp6V2N+Zk9Vc3ladyRmTENuT21sIURSVGBkMHFhbkxyZWFGaSRKckBpWU9Y
VWFLZCtWPTBfNHM/QUFOK2w8R1g8KHoKemY+d2ReZCZRUnk8eVN3TSg5fV4oUzRvPTgpX3xFfHNe
dGErTlVeK1hFbUFXcDhMOThub2ZjQ1VjZml6ZzJoN1MxCnolMUFfVkFna0J9ZHpjQCtoKHpERjcq
Tz9TVjUwYzI4S3Mld3tSQX5iZWZ+fnV6OEtSflctdChfKF5lWCs7PGM1dQp6VGhMdXMzVDc8Pj8j
Mzl7KzVMOXVJPTtNalo3RisrR0dPcldyN2F7JHArJEsrMSo3Mis4PUR2Uz0pPzIxKypiNDUKej5I
I2p7bUd5Vng4bn03NVBueERveWYxO2ZiWU48WHZvV2cxO2poMk1xcGRoMkJDUGEhPXF3Uj5fMU1I
M3dMZXZVCnp3RiklbyNDSz8qMVA9UStrOyo9aTZsaTdScU8hfnM0YkA7fnJBXlQ8eWNydFU1PzN1
WERWLTNKR0hNYVFgdj9PUQp6Wih1b1M2UmNKWjtwKTlkYigkS25ESWsqRHhBaD1jVCFoTShkKjNy
MkZJUUdxelBZfCE4T0FoVjF7YiRCPT1EfkUKej16TikpcGdlS3teNV4wNDFLdklOM0VQKTg1Zk1a
SGFrdm4qYjRkJHlXbzREOyYlN0JJO2pQfmYkZyZJe3pfRGZ7CnpzdGVQcmFqPF9RMDZHdnpUdkUk
X1JoYSQzQVRHaXArQVBjRlBQZUx9M3l+SUFaeXM/fENKSENJMDt4RzVHOTloVwp6R0t7clVSZnsl
VUhOKVhiRl5VTS1vRmtke0tCKElrNXxoeSNtSDhhaDt9SXRhNCRQKmg/UGtFU2QtYlFLazY0JGwK
ens9Qmc1VEU5MSZmJTYtJDx6a3ZRUHtjN0I5JnZWU2h3WTFSQXRKYVchTU93eE4wS0JCMFojV2te
VHhUajFHb1JVCnokIzZKZy1jZW03akFEYnw0KSVpc2I+VElla2Njb0MzfSFQPl4hTkd5M1IwTn45
X0pqVXB5RVEjPipBSGxFU1QqOwp6SUY1RFVIQGorNGhEOGJIeSNQPiR5N3RfIUhNUXVHT3MmQEs7
enRScXZGNG5zKVZtXyl1Jk1AVGx5b1gwdEg1Sz0Keks2JTJLOFU2bXJ4d0V8fSswJj1gXmFsZSh6
eTxOdVkpZWZ7LTRLRHBLa3VGcmsrR1FfckAkKWsjSnZhcGhuPXIpCnpKT2k5dT14OE5eNlpySXRB
TDtCY2tAZTN8dWlkYFNZMlhmVW9CfGBAKjdkKSN2eWc1Nk41NnplenpgcmN2citLbwpkJmowZjdf
K1BYZHNoYWAzZjc8ezYwMDJvdlBESExrVjFoMmtMfiNIQgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2JhY2sucG5nIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvYmFjay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGIxYzBjMTk1MDA3NGUxZGYzOTA4MDBmOWQ2NGU4ZGE5M2MyYWY2NTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaAps
aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjE2CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEw
dnBeMHdCITYxfDtQX3w0IyVgXkYzVzBMbzd9d0NyQ3NkeFBMIT5kUU5YJAp6VUVTKjErUz5uPFJ8
UnNmJGtnO3U8YEdeaG1AKFRiO0c8R1h1WnZ7Q3lFe0FZXm5McipmNVN2NV59eVpUPHYtMnkKej90
SVdPSEp4aDE/Q3t7Iyl6d2tyPWpRcHdaJWpKYy1xT055aU1PRn53dDQ9bV8jRmljR2Z6JVp3TzNZ
QkAtU3ozCnpDMXRrMihRTFlZKyNJdj9iOTN3eTZCQ3o2SHNvQWI4QClaSVE3XzZUKDV2Ul9FNzl7
MFBSbGQrS0NDI3VfeylscQpRSyZMV3p5ODV9U2I0cTllMDk7I0crNWk5bQoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2JyZWFrcG9pbnRCb3Jk
ZXIucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvYnJlYWtw
b2ludEJvcmRlci5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0Yzc0ZDVkOGRk
YWU1YTExMjgxNmVlNmE2NjEwM2RmYmEwODM5MGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxp
dGVyYWwgMjYxCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeR0M8NzchM0hGNGdsa3hVNmt+Q2F5
QSM4QGIyMloxOUpWQkhjTmQyTAp6QWg9LWZeMnRDRSZIfDZmVmc/M29WR3czeW1eRFdORDlCI28+
RmRnVmk8d2JgUX1+PStXamF1KCl6aWY+I051PnYKemZgbWFwUUtHJWB1YmNsdjRqK0JLVTB+YXFB
QlhET1IoVzRKc1BOZkt8SUNwKiNXUzFrTiZsRGxsXjRWPTlAaHtWCnopcWRBJCFzLT5Oa3tzWGZ7
NVVfTXtHWXV1K2w0b3FLNCkmKEYzX15PVmNONGYlI3B3UDdydlFleyNLWGU7azRCZwp6N00hKklG
UFFqcCF3MUQ4blE4TzxCX0QpJWVYc0hPSn1KJERuUElBREJMRG8lMlM8U3BWKEBoSmI2TXc8Jjsk
VVYKQ0BNNF8rCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvYnJlYWtwb2ludENvbmRpdGlvbmFsQm9yZGVyLnBuZyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2JyZWFrcG9pbnRDb25kaXRpb25hbEJvcmRlci5w
bmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZGE3MDY1OThlN2RiNmExNzEyZTg3
MjIxNGJiYjE5MTA1Mjc5MjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjYyCnpj
bWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeR0M8NzchM0hGNGdsa3hVNmt+Q2F5QSM4QGIyMloxOUpW
QkhjTmQyTAp6QWg9LWZeMnRDRSZIfDZmVmc/M29WR3czeW1eRFdORDlCI28+RmRnVmk8d2JgKUIx
UCEja29NQ0hjdURGNVIyMnYKejJAKUN3M3RKTlotejtoU2Y5MjVnWnBtIXxUaSFTczl7JXFnZGdX
bGtYRGBYTHFeJHlKSCskcFM+ZGsrelh4MH13CnpxYFVUVG1nMCVmRTFQJileMW09Tm9BUEk1dlE1
eFNfRUB+TEhOa3RnI0p+QmM4S1p4X2tDQUxQS2Rafn5hSkI5UQp6bW5wfFQyPEUtcUBJbGNfV300
OXdvKmI+RSlwa3AmSiZvNWVHV2FTY0B+OEJRTyQ1NCMhUEN7eFd0fiQoNjlEYC0KQlRwPDdlCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvYnJl
YWtwb2ludENvbmRpdGlvbmFsQ291bnRlckJvcmRlci5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9icmVha3BvaW50Q29uZGl0aW9uYWxDb3VudGVyQm9yZGVy
LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3M2M5ZDIwNjdhZmZhZGY2YmNj
NGNhMmVmNzVkM2QxNjE2YjM2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA0MjIK
emNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5HQzw3NyEzSEY0Z2xreFU2a35DYXlBIzhAYjIyWjE5
SlZCSGNOZDJMCnpBaD0tZl4ydENFJkh8NmZWZz8zb1ZHdzN5bV5EV05EOUIjbz5GZGdWaTx3YmBp
PzI9OHRybHBDbnh+Nm5oKCZMNQp6ZmBtckYhantEVUglcj83dDMwcXp6YSs3NW9eTnRSZiNUJGMy
ZDN0PCZEe1A7cUR4TkgkbU5USChJMipsYiF1JWwKenxOc0JiJnpoOTFBYS1RSzh6O2xWfEdoKHhK
blJuVCp7PklCeWt9cTMqQEFDd3hgK1I7YHx8OUotejdRYy1+MlYpCnp0JnRwdUNRQz8yOFIpYnxt
TXh6Q0Bjdm81TStPMEpgPWVgbF99X2dxZXA2I0tiPllYfk9sPHhzLTRpfm5LazM2Rwp6OFE/d2pm
bWw8RkAwISNBWmhMMGtKKGMtUGhyNmE1T0IoJjNANXl+TVFJVnM1ezs0d3BPcktPOyNxUGFKLXRp
XkQKej08dUJGI1MpQUQrczghcTlZMXY2bVdMPDQ7b3hoSlpMUW1YTiFzMDtjYzk/byE8NHB9XjNS
TX57P19rWCUpR3dVCno7bSt3M0FBMEtTUWNgfCtQMn42Tko+MUV8YjVOdHVxZG52bWxtRjZeXlgo
PTJuUWYqRjM8YkNJWDBzSDEoKlh0fApOZ1F1JlglUX5sb0NJSWRlc0wyMlQKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9icmVha3BvaW50Q291
bnRlckJvcmRlci5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy9icmVha3BvaW50Q291bnRlckJvcmRlci5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQwNzg1NDVlMWZhYzFkNjgwMWZkODlmMGE5MDZiOTMyNzUyMjYxYTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAK
SGNtVj9kMDAwMDEKCmxpdGVyYWwgNDE0CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeR0M8Nzch
M0hGNGdsa3hVNmt+Q2F5QSM4QGIyMloxOUpWQkhjTmQyTAp6QWg9LWZeMnRDRSZIfDZmVmc/M29W
R3czeW1eRFdORDlCI28+RmRnVmk8d2JgT0NqcDhfYT5remEtSkBaQXJgJksKejJAKGJZTVR6IyN6
aSQzbGQwQHx6blpEMHgkPXVvbDZEbDd2SURlWnVsYyNjZm1qc3UqPmxYdX5LV3E9eylZQCtUCnp8
Tm96I0g3UXZePzh1ZmlLTXZLbXRAM3R4KVYqSX5tSHl0ZTc1bDJERSZPKEByZm5KZlBNKjgqYjYp
eFY8OE9gUgp6STViJjhMZHJuNUhTJHtaVnxuTk16SztzdF9zYTlzWmtJRm9he3VtMGdSaD4taG53
RWRKMFlne0ZuO24oMzhNd20KenY9bnQlY0Z1fTh0c3F2JTdGOTdoQHo3cFQ5Xj80NVdwZj9CTj1w
NStuPnRnRzwldV8hP3c7RHQjODF0WkpqTTZpCnoqNE87bEZWbys7emdqfEtBNEJ1P2k4Yjg2Xkpg
T1A2I1B+P3tHe0RqQD53MG4/VD4leisyZ255Y1RBdTdRMVdsaAp6aTR6fkQ4cCUoUlhjdn4wWGJP
Qmg7b0hoOXRQe09uJmZ8WD5jWm55UmZrQTtVWisxWHAzTlIhWTcoOEE1VC1HQHkKR0d5d3B5N145
KjkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy9jaGVja2VyLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L2NoZWNrZXIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTZhNGVjM2RjMmVh
Y2I1OTQ0NDE5ZGM3MmI2NDFlODUzMzQwZjk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDgyCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeSlJyPSQxU0ReWXBXWG5aQnQyYW1Mbk9r
SkV0KG5zQntRQHN1STMybApmMik7Y2JsIWY4IysyKThmKSRibng2KXx8YWBuanhnTkB4TkElckYo
OwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L2Nsb3NlQnV0dG9ucy5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9jbG9zZUJ1dHRvbnMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTc0
MDYxMjEyYzBmMDM2OTFhOTg2ZWFlNGIzYjA1MDA0YzNiNzUxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAw
MDAxCgpsaXRlcmFsIDM2OQp6Y21WLSUwZ25FT1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxZmcwMDBn
TTFeQHM2U15rY0QwMDAzdk5rbDxaTlhPTmQKekY+MXA9NUpoelhIRUlOQFJIVV8wcWI2fTdQJCQm
Y1ZBUUVNVFBZViVsT2hLUXg8bVMwS15JV1k2Vkk0R1g3aUkoCnpvZ0h9V0Z6bW8lYzJ7PGl7RVNw
NmdpPzQwQzJEQ0JqIWY3SWpjXjFGWVN+NiNFPDZjbTtSNFI2PClOa3JwJVVyPAp6NzR+cEUzYSF1
d1h0OVQ1RkFUeU1WOEVWVmw3fGdSPDNPQDFhTjNZR1A5Jj1XWmJROz16SEk3R2EtUWNHN05sQioK
enAzSS0qRyk9RThOVk9Je3hqKUlTPil1JDlZSioqYSFXYTZNU2w5SyNZTU5ffVdEREhDeU84YyNt
Z1VvR25ybj9ACnpjZXNDZHApVSNOK2BIOEAqQlolYyYrVzApRVQqZlUpMDlnKm1ZJjZRXj5kblhn
VTIkbW42Nz9LUWBWbF8lZFk+RAp6NE1eN0xJcjM0UFVfaTEqJnhNY0wxT3QqSWRnMmp7PUlFbiZP
d29MdnFXUiFRXiVNSDx8Q0MkLUNTPFQ9TUFNYEYKUDAwMDAwTmt2WFh1MG1qZm9+RVhXCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29va2ll
LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Nvb2tpZS5w
bmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YWY3ODU3NzFkMzQxZmUxZGZkMDA0
MWQ3ZDdkMWE0MWI4NmQ5MmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjE4OQp6
Y21WOzgyeSp2e1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFeQHM2YjkjRjgwMDAwUGJW
WFFuUSpVTjsKemNWVGo2MDZ9RExWcjN2blpERDYrUWV8T2VkMnp7UUpPQlUpRkcpbH1SOU01c211
cVpYI1RDYlliTjYxYWNmSFE4CnpVJEdzPkBnd2dTVjNQMDxCRDU4eSgxTCk5NTNMQkxrKlhxKzY1
MjJEZnZRNVBOfnV0KnMoYDJ9UkgwSFJ0d0wzeAp6MXJpZEs2ZFZFc1ZnWDRVb0ghNUxAcEo5OXle
cCoxLWtILTZ5WCF8eFJPbEIqSS0xZSRvakwjV198R3xgTTEoSk0KelNiV0p0bEA+YzYtMTx2VV9Y
Nj9IeVY8cktnMjRZYDNLZFUxQCN1amEwM3RGQVY4O1ZuUSMqZTApM181MzFEX1FaCnpwJTUodGZh
aUk8e1FSQHJlKXNwazVQK3dEX2lPeVROaiZrWkh6cXt7ZCoqbWkybStxUT0hKmRtcSU7UXdLcWpZ
KQp6YUEpXmlFVSFZNTVYTX5LI1gwQkNaazhGOWJLKWUkZ0ExWmNLeFRmTUdtT0ZXMCl+ZjFTK3Bv
ZEpXJmElVjQjezgKejRtQXRGbkJxWSl0QyQodk83NTJob31qbn01Rj95OCoyfGdHZVBEOHxZOThn
LSRydldJNDZRWm8+cyEkbWN5fmJ2CnojRiFae0NBNE9hbF9pVXspYCp6R19oUUtCZWFgZ3VWWXs5
REBZe3A5OEFaR0BBZVYpKzEzZ3NMU2lJQ1olO1pGdAp6QGAkNUtWWTIxfjRpVWtLRGFAdUlTe0lh
djV5VFdNSGQwc3tCV1I7Wmoha2w0P3x2JSRKelRaITZsQndjKyRyOUMKekRhcFd6Ry1fJnNReSZi
b2JeUy1RKk5eYnIoe0VwPWwoT2QwQENVb0RPRW9zcyNsSSt6alM8ZkY0cyspJUx0TjdsCnojP0tr
Zl4/MjBRaGJXNiNoejlLbyUyN240N0c1QkhaKWZsMHVrWCtRMHZNU01maWN7Ny0oeSYhaXBlI2Yw
VCZMPgp6Yjl3M3k1MyVqTDVBb1Y3RkgqTj9GYUM2ZjFBQU4rKkN8M0dXSE4+b3RJRHR5NDQoNWpK
ODF9b0x0TlFXdkhiUEAKemBPVSFWYjgtT3NyI3tCXkxnPktFVlpyPl5takw7R2ZIOCkqLXVWfEJU
S0NiYGtSZGhWYktTUWhPZVhgQjUmRipzCnp4TEpla0Q2LVErcGU8VjNZPDhgeXxLYEU+cm59JHhr
QUhYJDNxWnU2SDhXWDB0R29vIyUmQD4xUDJkSU9hKFBfawp6bGJfVD8hV1AqZjRfa3A0eE84KXZr
dkArXkIxQlZqMigyTUk9M155N2N6S0JlV2l0U1Jwa1NGWDhab219RU1AQ2wKejwkfllgMFlTPmNT
X1lxPHUhI2paKy1YQ3xTVHI/K05SR2tNN0tgeVFnWk5OWUNHXy1hUjwzY0ZOYV5nXmVqTmI4Cnoz
PTRiQERBQ0dqd0FMN3s1dS02Q0Q5KkZnOHkha0FvYHR2R0prMGRpNnlmUz8yKk1qbGAqN2YkWH1Y
Ulc0dER5aQp6VVJ3clEkWSVeeTJ7MExyb3RObUFePEBibEh0UFk7dT18LW07cE94SEd4UElxSztP
QUI5Xjgyb24+Kl5yV1E0RS0KekF2O0VUQChMPWVZQit3UnBRKTM3VmRSdWNXISVPRGhRTCoxYi0t
KCMhTVBKJW00bFlAIyVGVU5mTComREs/TSMtCno+R0dMWjJ7MS07XnBrRy0mdmJNM0NEU3o1aEIk
aVk0NlEzI2M+bXZMU2k3bC1OVVJ6XnFnbFA3ZypRKkc8bWljMAp6UkZ8Y3hrMkByNFl9fH10KUQ4
RXErXy1rbz9tbGtZYkNuRURjSHlRM0oqUSZLMDEtbmo9a2EjdUElNDhRaDVxZ28KekF5dmNUQzU8
U18oWXxnOEt8YWdnU0tzNG53e35DIVEqOGR+bTkod2gjTlZIS2hJcEdXa1BQXkFSQ3NjQ2FeSDha
CnpaY0Q5TXc/V01WcGhPNkNQYHJ4ZyspQDs3elZyUDxEQzNiQ08lc2hLaD9MdHttVyFCeGMqMD5L
bldsTUYxRVJBVwp6PzswVXdEezdsK3NaM14mdk5IQ2BDNEJWaDZkXlZLLW5IQkE5ek45Qj1+e0Nk
MSVlPGJAVWJYajN8YmM/bntfI1AKenszTGhYUiF5fFJXJGdTcFFwMUR6bkl6JipxNFA7OVczWUJa
RSQ5ckUodjAre05GO0p4fEx8Uz5ybCpQT15fUV9eCnpNS2VwPW1ZbSRhZVM3ITJoWSNvRzBXZH1y
WG9FSmhCNFJNY2tXNVplUlQpck1YKmx9OVMoO2JHYVdnS0g8Q0V3aAp6JWtodVRhJWxldnZYbEs3
bGNSbDJnNEc+TWFNTXtEPiZtJEhgWmN0eVkjPVokKW03bVhrbjhIfEBAR1B6RU9gRXAKekZPYmlC
M3RKSV5ULUlaI1hPenE5KlZBIXpKSTAreFNIU3FOT0dRKkBVKTh7QUdmbSo7dkJDeGsjKXd4cUM9
NWVgCnpAWEZwSlQkUmI5RUpKTj0rIUdOIXVOKjR7S2YzPkNOTUxoZUxuQjV3S1FQRlYmT05qKV93
ZHRXPGtFUyVrQiFyQAp6cjVVdGBuQChYbklZdEp1NyVMIz4xJEB8MyFJcmYtPn1WQnQrO1NeNy1o
TWxlSl5GS142PWh+WUtjRXpoajJ8VUUKenAlKCVXVlImJHkpWmAkc2g+ZjJLRDZfK0M9eDlXeylB
WEs5NXNmLURHP3ZyVjZKcD1IOTtyLShgbGNwNmMpNmQmCnopcD94cTBnfV9sUVItcVhuSlUheFFa
SH5KZlFuZHpvVF81Py1nRGYlKj1CNHFNfERqRVo0NHtjKVooVjZtYEo5MAp6XmBLNExuJDJ2ZWlj
PW5xdXlSIWsqLVZhVEJ1c2ZFZj96JXlmS3FEYURxY3sxMXNvP3RZaWxGRHBZJGA0JUYpfUsKekN0
aGhgdzhyPUhvYlN1PT5fTGI2d2lVRnRIejZXS0JOMD9wM31YYnhhZDRhdiUyRjVpeilYYFYzbSpA
VFpCYlgzCnpwZ1VCe1ghPE9od3VFcSNEWXtQd0VOYHpNUnYlXypRPCQyQEl0S2NOUCR0aHIlQjkt
ekB1U3I9RktlSi1TcH1CMAp6QE1SUFI+TWV5T0IyPzlmc2NLaiNISTN5b3cjNFlUcUslaTJFIz58
dlpMflloQzcwVHFJWCNJRztFRkBNKjFAKHMKej8lajRSXzRRJXU4KU13S3dTaT02Mz9se2l6eUVH
ZXFmI25UR0h3eUQ+NHNaMi1jd1V1Y3s3VE5peG5YZUFAQntaCno+b0dFJTtfPz1jckV5TDN2SWVm
JVh4UjJobElxMkVPcFR7bHlMPUk9bSlFbDZwMDZNfSU+eGc9TWM9NTBWRSp+YQp6aSRAKkAtV1FQ
eFJyRWp0aDwlUT9xQUdxPDQlN2diMGApLWJeM2BfaCRoYUJuQTJvamxEdTg4TUhrNXo7aDJMS0cK
empxLUAmK19DZSt6ck5GemA4X1pRcT05aH0kKklydEkjdzVRcnZNXlNeakA/bUhOWkh+U0E0JUVm
U2N+VEEkbDdNCnpwNCpmQzJrPHVfUmo2QE5zejNpMWZSWjt0TUtDdHQ2Y3hMR0VfJH0xPXBfWW8w
WWs8QXJLST0yaklHN2o8U00tRgpQMDAwMDBOa3ZYWHUwbWpmUzVHRUkKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kYXRhYmFzZS5wbmcgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kYXRhYmFzZS5wbmcKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZmIxMmU2NWY0YTM5MzJkMzZkMzBhZmJmN2Qy
MDgyNmU0MDAxODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lU
IGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTQ2MQp6Y21WO20x
eG9zZlApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDE1YzFeQHM2TyRyPC0wMDBHaU5rbDxaTlhN
MHoKeitlQDVSNnZmWno9eS17YW0mOUFOaEpkSm4pTUJBbjNZTnkjN1ZLbDhQNSt3eTM0UTJXMzht
TnZpQktkRGVYQUI8CnpzO05kTDFAUnRaR35RIz5AaUpZJWdMXm9jYERRe3QqcXIlaCZOK01Vd2J4
JGZPdzFMMjtecFAjamtqKnk+Ymh+YAp6I3N7XnZ3TX0oKGI9NWEtLW1FUHZFMn02aUVzWWwhN2Mo
eXt5VT1zPWB0fEZCdCp4eStqVD9KPWQmP147RTY/QFkKei11MFpFQ2w+S3Qjb2ZEaXp3WVZqZEM9
WTYtRnJ0Kk9HYF5sUmFLUiV1ZGpGMil6d2JVVF9UWmkzYyFfPWwoXzM0CnpHTEhnciRIJkwrJjZf
dnIjbF4rIysxYzVKaUhWODckSCZKPG16SXxQMiFuWWkwQT17JCEtbyVsPkZ3PmtrRihIYAp6a25v
QEYtN0ZyRGRuMVRnRWF1SWd0RSgkX2Qzb3YxJig4X1FFaTVkIU1+QCE7elBoXmw/VU5AQDRuNCRT
MEx7KEsKei0qazMlLW1rMnolcShQTTlJJTs+U1BxSmNpWllIZC1oQ2E/WH09QnhRbUs/WEozSTRz
ZFYxPmpCOGs0ZnpPVXFDCnpLbWswPzJ8eURRR2N6LTt3WUFtNWVmIyFwMmxOI2M2OzIlUnFhaWB8
PUdZeiEwRWQoU0ozS3NlSjNCaldWYElhSwp6Nk1oXlQ4cGA7TVhBXik7aVQzRXwkaH47KyFXfHFP
Yzt9ISh3dj5nPjFZeGp+RmAxZkV2SWo4JmRIZVJRSjJeUz0KeiMrKysoKHM9ezBBYURaVjclaDdV
WEdTb2Z6KytAJldVaUdEPWhQbCFQdV9GZEVNTlp0Q3poRWdobS0+fExfK3FICnpGPElnYV5neGRG
ZH5YKCtZPDYxYFh+Xlg0ZlE7RWQ4M3hFWlI/eWlzWEIyb1dHNWBAfE04ZEh8NFZnQGFqUU43Zgp6
X2dGakg5Pnhgd0FpY2Y0Sio5VTQkTDFEaTNDTX5qJkxvcWAyWkEkNk1sM1kpKEUoPD5oaDR5REdH
YDZzcVpFYHUKejRuNlo8eklANSZzbWFPN0A4Oyp7fEJWISlmcXtXOVdSRkZ0QnFZTHNuK3piQ3dJ
RG96cHVDJCN6O0o0aFc5eHNgCnpRem45QUo+JmxWe19+Tk1rJTZhQXBLaiFrUHw8JVduM0RKSS1T
YXZDKjtvaClwfnhePXQ8Mz4qZzxNOVF0WXBsRwp6b2FnfjRYelhmZVghdWs9NGQoPSlMbmM4Nllp
bnluPlUwZGEjPlBnYzFJVEE+e2E9VT08YDZYNEx4Ky1rXzNEK14KejZpXn05PkZNZEIkVHBNO299
Kz4kd0l+PDh5U2NnUGR6e1ZySzIkQDMwU1Z3WCE3KUAhaDlOWnhtXyFTflhkJlZVCnpDWkp8R3Y1
WGwqMWs1T3B2RUl+Pl5gP05KMFE2UWlmXyQkS2cocTVBY2s2cFkwQSh+S0gwWjRwbX1oSFBBTD5P
eAp6QT0yV01efVBqOU5GfkdIJjJiQFpGZztLVVVxbEE1eXVBRj0pWVF+KD5mZDhGRyFaY35LPypH
IXhsbitAZGplPlAKemtVUCh3Sl5OQW58Q3o0QE9VaHpjYl5CYTVuTSNnUCtFTHglPiZIZj4yVD4w
fSF2USpwd1B3NCF5UGo3Zj0lJT53Cnp0TT1jRzZyJXFBe19oNnwyWSk3VkFgWnBLNGtTQSU+M2hf
V2ZQbWh9MztEd0h6PnFNKUQqTG4xKGF9JUYjPlFySAp6NUQ8JCRUMz1zeDIkQShhJmElYkcleFo0
K0hPUCVhJXJPeHtrYFc/VkxjZSM/XipJNXd3WThPOCVjV21QUjtHeEkKekM+YCllVHxAfjZ2PHdM
fTFqOUxFZ2JAJl49YDR1VzBUSlkhWVp3e1QpWU56PFl7c0ZZdE0pc3ZUZWc5UVdKK2ZECnowP05R
VlAkV1BVNXNrPkoxNnU1YjJtdnZiPEl2SVo9fHtVQytHIVhINXNwcHk+PXMxIXBrVHJqQn03SH1n
dmVVVgp6bX5BUiZteVltOzlMX2NKR1NeUFM/M1Q/TmZGailqJUNOP1QjTzQyN1ApdGgqUDwlUnl5
cFJhYFgrQG45JXFeO1MKelFxVUxLe1NXQXxAWHR5VjUkKCFtdCFTTn5GMVhPWXFTPzgqeGdXJS1W
UUlyPHpRMVBGeUd+SmwrfGtrVG5VM1ZICnpfVilIV0I0PVkkUSZVcGtTNHg7bEF0X3VTMilsd3FS
dFpsXmNDMj5XKkFjdVdielBMciVsVGdsVnA1SXwtfW0xegp6Pk0ydzl3RklXQGxYNn1zTFJPMzZy
THEhYmNgMGE5JUpmakErWXlUVUJIZ1o5WihuT3EzVF54IUI7aCFOY044YisKUDAwMDAwTmt2WFh1
MG1qZlZ3dWFkCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZGF0YWJhc2VUYWJsZS5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy9kYXRhYmFzZVRhYmxlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjM1OTM1MjhlN2VkNGYwM2Q0ZmU2MTFmYzdmMGVlMTc0ZDUzZTA0MS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg
MApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMDgKemNtVi00MG43ZjBQKTxoOzNLfExrMDAwZTFOSkxU
cTAwMG1HMDAwbU8xXkBzNkFNXmlWMDAwMntOa2w8Wkk4VXZUCnpPJTglRTZvazJraHRneEhodE0w
eTlZcFVTQ2xMNGU/XmRaTTZsNFg8Qyh9fT9FIzBWMUNYYXE/Q05uOVhfdj4yQwp6aFpIV3k2YjIo
OT47LUd+aXNeU2czfio0RXI2dXNIcylTN2JYOzM/NkRXakJ+aH5Ma3w5flV2ZiFJWiNxJk4+cCoK
elY3cCNlWUkmZ1hweFojaik4amc7YnMwUSlMWXk1YVZAS2wySz9udzVfeSZqYV55YTcjRSNLTmoz
eU4jTzA4e084CnpybnFJYGlmU0Bjdj1aUXJpQEhMVj4/dnBhWDM3ZWZRaiROQFlqPWVoQGkkVSZC
JkUxMT1QVCR4amYhZiVqUG4lPQp6ZXRUQz9rPXFKd0hCX3w+e0FyKE5sUm9Md3BBTVNZYXtaMkh0
bGsmOy0rQlNYMHhhdGVxRm5VPTAwMDA8TU5VTW4KR0xTVFp8ej1uRE4KCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kZWJ1Z2dlckNvbnRpbnVl
LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RlYnVnZ2Vy
Q29udGludWUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWQ5OWVlN2MwNjgy
MDI3N2I3MzUzYTkxMGJmODZjNjI2ZDRjZGY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDIwMwp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2MXw7UF98NCMlYGxSUkE8TG83
fXdDckdlTDk1e2JvfEs5Y00KejxATiZLbn0wWXwpbiNPOCprNUcoQCNEdThYNEFqeWwxISF5Tjl5
PkVXKFlBU1JQM0tWZVklWSpUWjVxb3VQZlY/CnpZdUREUHBLalEpV3leMiN5Z00pY3xOcDxBKl5g
WmhtOT0paGJAe3VoMTs8enYjMTJUYXR6NWJDcl40KXAzZEBmOAp6QGJMMEtQZnQoKD5kPyNQYStK
d0tAcm9NMSMobX12JWVLTng+PG1BdTg+Yno1dipJXzxicXQ9YWVsRntyNX1FK0wKQ3s3QGVOCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGVi
dWdnZXJQYXVzZS5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy9kZWJ1Z2dlclBhdXNlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3Mzg2
ODhkODFlZjMxOTBmNzAxZTg1NmFjYTZjZTgzN2UzNmE3Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAw
MQoKbGl0ZXJhbCAxMjAKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjF8O1BffDQjJWBf
TVI/fEFyYCZLMkA8UmwyZC1iPUY1bUlKCnpJaW5gJjJNPmVoQU8xeGpKQTApWnlxUGF1eC1eYVhX
MzUyMUthY3Y0fE5yOzEzI2N+JDYmPmJhVkJwZTl5UW5aQApSZil2bXcyMldRJW12djRGTyNsVT9D
WGZJQwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL2RlYnVnZ2VyU3RlcEludG8ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvZGVidWdnZXJTdGVwSW50by5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY4ZWM5MmY5MjdjNjVkNzliYTNjOTE0ZGZjZTg5MDY4N2Q0Y2Y2ZmMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjUzCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdC
ITYxfDtQX3w0IyVgTT83NXxMbzlsZTZDfTFBSURkWnFyUiYkZgp6M3lhKklrbUM+IzVXcCsmemFg
MX5teE8/bilHN1dWSnF+c0B3c1RGQTU4bDZAJm53S25AP2ZTemNKfUl1bDlEZj4KejM7eEApdiNg
YFM4JEhuVzs4OUBAWVFFZz98TnNBRG85Yl5tX051QisxdCl6ekQ1MWhPaUZ4SjAqU3RBeDAmNjhf
CnpFMj9DPm5ZWllpUmJiJXhzRjg1TW1NdCtzO25rIVpoSmVlYTJfZ1ImNSpIfW1fQXBiaHdmJD9M
QlFTWj1xX0R8Mwp6Mk0pTE1LZCFFLWBxdUVfQDkqITJKPFMrSTNMTUByOUpPRTtXS2ZEOzUlQFZp
UVYhQEoyMldRJW12djRGTyNwT1MKQlV6aCpACgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGVidWdnZXJTdGVwT3V0LnBuZyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RlYnVnZ2VyU3RlcE91dC5wbmcKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZjEzOTQ0MzFlYjkyZWEwYzMyNWMzMjE1NTY0
NzE2OGYyNDM2MjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lU
IGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjQ2CnpjbVY8UzAx
NXd6UCk8aDszS3xMazAwMGUxTkpMVHEwMDBtRzAwMG1PMV5AczZBTV5pVjAwMDJKTmtsPFpJTGwq
VAp6N189WlhHP2RAWiYran00Z1Y8emdfVnhBczU1Z29GZzA3aClMdlUjKCtLfEBQUmBJUHt3QCUt
X2VmI2BMbE99RDQKelgpRyUlSX1ae0EkJGB9MUd+b2FMe35TUTkwSyM+M2I+VDFyNSl1O25WZDVZ
KU0xPSlWcWRtKzNBME1CM2xCMURnCnoxQXU7MzJsKlI+Y2tJflZQcUcxI2smKT5eS3wkWF54VSNh
K28qWGFTTX5jR3pCcFo7Sm4wT3AhS3h9TzZkWGYhegp3YDAhelRNQFBxZzVXYXVeZW1LYm5LK31X
KzZ5dUQwMDdyfFZKYTZxQ0d5bmhxMDcqcW9NNk48JGZ8YmY8JE4mSFUKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kZWJ1Z2dlclN0ZXBPdmVy
LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RlYnVnZ2Vy
U3RlcE92ZXIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGYxMTZkY2U3NTdk
YjgzZWRkNGYwMTBmMGM3Njc1MjNlMDA0ZGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDMxMgp6Y21WLTgwbXVHe1ApPGg7M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzFeQHM2QU1e
aVYwMDAzME5rbDxaSUxsKlQKejc9OW8kRz9kQFomIyUoZypZXmt6ZSopc21LLT5XbUMjYyFxLShN
R35feklCejhXPFMoSnQhI1hDeUBSRDtzWHRSCno0MyY9cDs7azUoZnI0XkNNTmRFKUtwSW4wUVhY
WXhXIShiTkZvUXR5SyllIVkoMDZQR1l5JjkqWTFwLUUqUyFEIwp6fDdRU2swKkdGP2FOJH4qQXBy
cGEtI34xMSV+MnB6VmBGMXFLNn5+b0FFLSRJU3N1dFlmRWZiQUM8WWBaQ2U4IzIKelpyUVM+NTIl
O31CbkVWOUNKMks5NC19WHtfN3xLNjA1eTM0YVJiYXxQXmcwZjR1cGExV2ojR1RkKGJpNypafSUt
CnpDKElfR3pqcHgqYzBrOD80VlhEfFctSDhxaEs3YklCcXRgSTRIezR7ZnZeUmBAQ0U/dFNqRz5W
TVA+Y34wMDAwPApLTU5VTW5MU1RYensmVzhUCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGVsZXRlSWNvbi5wbmcgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kZWxldGVJY29uLnBuZwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDdmMWQ3ODg0YjM5M2NjOGRmYzFiMWVlMWU3YjdlNTczNTEzZGFk
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBh
dGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxNzQKemNtZUFTQE4/KG9sSHlgdVZC
cSFpYTB2cF5BVH0yVjg8NlpaST0+ZjROdFU9cWxtekZlbTZSdElyN30zQzxSXyZuCnpjOytVaXJ2
e31hcmNAVDVPdGs/ajNoO0RzNDVfJTReeW1NN2R1R0ZpJlBFVDFFbCQoXntRMnxPO1p8ZUFFQG1B
Qwp6Kk5xIURSKXAldD9ZWTZZV1d2S156MHhnZiomYVAhP212SDwlN1MrbSRgYl9HbEZGRjQ+V3pZ
SVdmKy13ODFCc3oKVk54cGRQdm1uckgyMldRJW12djRGTyNzJVlKOz93NwoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlh
bmdsZVNtYWxsRG93bi5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbERvd24ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMmVjZmE0NDFjNmU2ZTk1NzYyMmRlZmE5ZjQzNGRlM2MxZDk1MWRiLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0
ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDIzNQp6Y21WPEgwMktkO1ApPGg7M0t8TGswMDBl
MU5KTFRxMDAwWEIwMDBhSzFeQHM2dzVkbSkwMDAyOE5rbDxaRDNOMWUKenBlYmwqWGthNlIhM3Nr
fFMyMzU+YzAyfit8RzAyQFpSYSh4O3tYNXVHd25UZVkmfH4zcl9ObE00fGZKb2dWQlUoCnpeQi1Z
VElCV2okbj9RTTA2bkVkZWVaUjQ/cTNidVkhc19QVUFDSTVDJGo5JmBQYEJ2SGJ6NHAlRThlXyk/
X1F1ZAp6RlY7fWBeeXluKmJMWnBfQWNZPE1HaGhBd3tvNFUmNUNUbk1JZDx+ZygoPH5fZjB3Ullw
QTYoUDt0Z300MD9wJjYKbCZUUndJdlVuOURZMCQrYzRnZyNHcmU/NC1oVVdrUDAwMm92UERITGtW
MWgxa1h9dGdkCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxEb3duQmxhY2sucG5nIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxE
b3duQmxhY2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTAwMDQzYjYwNzZh
MTk0N2QwYTliNWE3MzlhMjVmOTE4ZjAyOGVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDEzOAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXisoNjkzITNIRl50YVA2VHF5anglOTc4
bkRDbnFkME87QlB3RVZfKUwKemtXbyZpSiFne148SXpobXs1VElSeXVkcXFfcz5RUGNIY3hiZiNR
ZHNSIz90VHZhTU5vaTAyNHJLPGgrQEdhZWNlCm1QYTc9d0pDMWhubWItUSheRCo0ITsoeCVkdDtg
NUNvV2F4OCZ0O3VjTEs2VWhYZSZQZQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bldoaXRlLnBu
ZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1cmVU
cmlhbmdsZVNtYWxsRG93bldoaXRlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzhhN2FmZmYyMDJlZTgwMDUwZjY3ZDk1MmZhMzI5YThkZmY5MWQ5Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21W
P2QwMDAwMQoKbGl0ZXJhbCAxNDUKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4rKDY5MyEzSEZe
dGFQNlRxI2BfQjk3OG5EQ25xZT57UEYrNHl8eUF4CnpAQ2xZOXc7TykmJG5Ee31uV0UwcilxNyND
NW9ofSR4MTR2PTcjfVVwO1FHJEVROSFTTSomPEU4Vzh6dmw0dHd9awp1NiRxYUErfHFQV3JvKjNj
cXQoV1RkQ3JBVDcjUmZaamAoUHxMfCtIbSFRa29ZPWQjV3pwJFAhWUNeQmpRCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRy
aWFuZ2xlU21hbGxSaWdodC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjIxZjM1MWU2NjhmZGUwOWM4ODdhODFkYzdhZjU4NDA3NWE2YjQxOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNo
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAyMTYKemNtVjt9MDRNKjZQKTxoOzNLfExr
MDAwZTFOSkxUcTAwMFhCMDAwYUsxXkBzNnc1ZG0pMDAwMT1Oa2w8WkQzTjFlCnpBUEBYIUJ1WklC
TGp6a2BaTzg0Pm5zeUlAaVpeZkclbXF+WkFCdEJPUjx9cUtzfkN0b3ptKE9xN1h4aSVBd25ANgp6
VW47Rl92bkV6QzI+Jmd1WTRha2V4VjJ+NitlPz5rdHBFVDJ6WWIydG01bntXSGc0VTB7UCp3UTRN
MnM7SUdyKGQKeio1WjU1VSVaK0pST0FCME9qdGVHKUdfSmYkdWskWDB1YGhLdV5gVCUxNF4+fHty
a1RLTk5lTCUxT3h6aGwlVUs0ClN2bGdXUTAwMDA8TU5VTW5MU1RhMCsqZTJkCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRy
aWFuZ2xlU21hbGxSaWdodEJsYWNrLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHRCbGFjay5wbmcKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYzcxN2YyMmNkNDY4Zjg4YmVkMzg4N2EzNzFiMTdi
ZmI0ZTMzMjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJp
bmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTI1CnpjbWVBU0BOPyhv
bEh5YHVWQnEhaWEwdnBeKyg2OTMhM0hGXnRhUDZUcStDMio5NzhuRENucVFmOHdqblF6fVg/KAp6
NVlaVE1scmBXRD8tODNMVDVKej42d0kyc2doT31eOCM/SD91MU9MJiREWlc2WU5wU1kqX35YeUUo
KzZATkFXTioKWVJCSDB5e3VjTTwyaGNuUVBnZyZlYnhzTFEwSyVVb1BYR1ZfCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRy
aWFuZ2xlU21hbGxSaWdodERvd24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodERvd24ucG5nCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTY1ZWQ3NDFhNWUzODZlNWQzOGUxOTExNmQzNWZiYzMy
YzQzMjg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5h
cnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDI2Mgp6Y21WK2gwcn4ha1Ap
PGg7M0t8TGswMDBlMU5KTFRxMDAwWEIwMDBhSzFeQHM2dzVkbSkwMDAyWk5rbDxaRDk+WUgKenp5
bTVQK2tfZDIwY0V3RmQ2ZjtfXjlVKnx1azkhK3RMXnlUK0NBbEpUR351ajlMb01QbWVxN3RnQX5H
V1pCd143CnpoTyZsKzJCeHlRXzZCNXlBbHlHP1pVS3RJKDlsKVBLIXQ3UzNQSEdNXjZVakBDVSo4
PFF3WU5DZWJZYExUPjFZJAp6PEF1dnRiOWU3UXZWWU9DYihldEZLMVNEMlFxISU3dFUoLXpFckJA
Zl93VjBEbSNeSml6aGxxQWdZJVpHelM9dV4KeiZlUUlSdm0mc0UkTiZGS0smJU1Gd209Ozk/YzJB
cXQ1PEtANUVWSDw0WGktUyV8SSN1MDNHfEMjVGNMekxJM34mCk0wNypxb002TjwkZzMlYXUhVDxt
TwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHREb3duQmxhY2sucG5nIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdo
dERvd25CbGFjay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjMwNGY3YjFk
NTQ0ZmQ3NzliNGY4MzA3MDVkM2Q3OTAwODIyNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxp
dGVyYWwgMTYwCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeKyg2OTMhM0hGXnRhUDZUcXwhWkk5
NzhuRENucEA+LXl6dy1Rc3lBegp6K1QpYjJwdlUrfk5nP2duKGhrOW55OT5BeUJlLVRlc1ZSSk8z
ZyRSOz8xc3AlI0p+dDlRVElUSjRyZko8PCU/KFEKekZkU0x0QWo1T3lYTjFYemhvNGtWc0FWY19W
fGNgbyhYbTJVYHJldSlFX3tePzQxVjdQdkxDdktmWlZ7fj5GVmRRCkkmTUJiQDBCMSl1MDAwMDAK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9k
aXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0RG93bldoaXRlLnBuZyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHRE
b3duV2hpdGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWVlOGNjNjkyMDU2
ZGVlZTIwNTRiOTcxNTIyODdjNjEzMTYyNzNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDE2OQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXisoNjkzITNIRl50YVA2VHF6WEo7OTc4
bkRDbnA/V3tgZGRDe3V1YHoKejF9emA8TT1PdExvTUNfVCpJfCF6TWBXUjk2M1ppQDY7MllAanhD
JE8qfEdZOU5LKm1GRX5oa3d5YVM1X1RCSS1kCno8e1Z1cCY9UzZRd2hyJStoWW9pKmtLRXB2QSNu
SnFyPGxTdSk8K1F2XkVofH4tSUVUX1pobW4+UUpSNHYpQE0mPApVYXBaJUNLKVY/e1VIeDN2SVZD
ZyEwRCFWUi1UKGpxCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodFdoaXRlLnBuZyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNt
YWxsUmlnaHRXaGl0ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZTcwNWM3
ZGJmYTcxODhjNTU0ZjljYjNlYzE0MjYyMWFlZTY1MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEK
CmxpdGVyYWwgMTM1CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeKyg2OTMhM0hGXnRhUDZUcjJJ
VHg5NzhuRENucVNkfE1+eGF7PXxzWgp6SDRifl5JQFdmQyowNlAxSCU5YkM5OTV7ez10eXB1Rjtu
OEchNSpmTHViclZoaG42P29tPSFWa1llIStSaURCTTUKakJ7ZFQ+aEs7SU1sTFEhfHZXYDNJJkdM
OCZHP35IRSl6NCp9USRpQn1gNzx0XwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RvbWFpbi5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9kb21haW4ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyOTFkNWE1ZjNiYWExN2JjZWE0NmU2YTNhMTRmYzM4ODUwZTNkZGZhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDY3Mgp6Y21WO1IwJD1AIVApPGg7M0t8TGswMDBlMU5KTFRx
MDAwbUcwMDBtTzFeQHM2QU1eaVYwMDAwMWI1Y2hfMEl0cCkKej0+UHgjMjRZSmBMOyhLKXt7YTc+
eXtENF4wMDBTYU5MaDBMMDFGY1UwMUZjVjBHZ1pfMDAwMDdiVipHYDJpcHQqCno1Z0g4fDhHe0pg
MDBKT01MX3QoSSVkTH5XUFVCRHpnK0V7NCp4QD1MOTE5NShJa0FhUyhvb1MqUTFDMWlKY0FLegp6
JUg0dG5pNkB+NjEpQGJGNSk/RWJPdT11NjlFQnZwJTgkMjUhbTxWMGZ9TChnbnMxS0lKcn0tTis4
MSpMJW1Nbk8Kejl8Q1FsX2ZOcHktcm59cil6eGFEUCQ7JEFaOE1rNDBWRlJrRkwjd248JFFOe191
eHl3KjQ5PjdFRWF6Ukt8clpnCnpMUTA4ayt2TXxrcUEyM3tfP1JlKWJgQjJAdEo5c1NNOFl1SzR1
YXQ0K1MoZDNHY3lQdyRtakRvailVVmtFRztlMwp6P1JNJClkSz5ITz4jcnYjQ3VhYSt2WShCalhr
fk1BNlQ+aDc9PWJ+Ri1gfHJZMj5ecV4wTWolbm0mQEdWLW1VO3kKejA2Nzg3RWlOd2xnK2hUaWp1
QXFqPnBISU07PTFuRyNvPl5KZyNgd0swbEtkSDZPLVNrM05yS2FeRXNzeWpeaU11CnpxKkFIaXgt
T2Nnayl8bzhYX0NvZzVKRiZDUnUwSH5SYDc4cDJtO2JIPD9aYmErcU1+dk1oRyMhVjtCYVNybER6
bgp6eXFeTzR0eVpoaz4yJERkbnt2NUtxdFQjVnVRTUREQGpNVUReQyVYSjc+MHFBdklGISNvN2pH
T2RXcyQlOT4hMGoKej4mKHYxKChRSWhsNyNFKVl3R25uTEl+bkdycU82YmxWRSlTLWhKUHt0a3I1
WG82V0hfRE4jeFJrZnRmd1k/ZTVWCnpzbnUldXpKQ2U0fENOSyYpNitCMF5HM35QYjMtWUdRVlBx
bWN6az9CMiFVeXU5MzM1VGFkRU07enJYK00lUDVDbwp6eFA1YlR2K0JCVE5sSXh4S1I7dHhSPz0j
PD92fElBJiNUcXkhR0hacy0+JTxsPGlqekUpVzN1UDAwMDA8TU5VTW4KR0xTVFledm8zcjkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9lcnJv
ckljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZXJy
b3JJY29uLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyMTA3NjJjZmFjM2Zl
MGVkODQ0MmE5NGQ4NjBiZjk3ZGYzODU1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJh
bCAzNzUKemNtVi0tMGZfI0lQKTxoOzNLfExrMDAwZTFOSkxUcTAwMFVBMDAwVUkxXkBzNmpXVy1A
MDAwMyNOa2w8Wjcqez16Cnp6ZV8/PDZ2dUNXTWkwZjRfYWNaOGtNez1nMmtQTTk8UCNeaXI8MUZ6
cWNzT1ApS1UjQ3diQGRlUV92Ny0xYXxGdAp6aTRieWRRRyRMPEA9b18kJE9CKmFeNyk+N0Y2U18m
M21NeWFFRUwrS2R8cigqODlDMTc8VCNzRSMzKkNgXl5pX2AKenMjTXluRC1+US10R016IUJ0SShf
SH1eVS1Pflh7bXBWKVR6LVJhPEd3fk9tPypAISRiJTcqczcmdSV6WiVWWkxsCnp0cnFARnI/X1l+
am1RKERZI0BZVVNNbTV7O2txfiUwIyZfXnpkPkxgcDRmLVp1NX1NUGleVjIkJEg5UGU0NSgybAp6
Qmw1JjN5VTshQ0JwT3czZGkrZChfb1hMMipKPylPaUJXYjZweDhPKnt2QU8wLWV7b29lUzg4aWRl
TlRQRSRvR3QKemlHKik5PytmcS0wR3B8UEVnY3U3Pik8T2JwOztlPHg0azFCXiQ0SlNYemkrbE5K
UkRgbWg0JVVJdElReV8jYjduClYkeGk+Rk50eXJ2MDAyb3ZQREhMa1Yxbk1Fc2pDMTAKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9lcnJvck1l
ZGl1bUljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
ZXJyb3JNZWRpdW1JY29uLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkMDVk
NmI3ODc2ZjQyOWI2NjBkODMzMjIzM2YyYmEwZGYwZWU2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAw
MQoKbGl0ZXJhbCA2NTIKemNtVjs3MCgxUnxQKTxoOzNLfExrMDAwZTFOSkxUcTAwMG1HMDAwbU8x
XkBzNkFNXmlWMDAwNzBOa2w8WklMbCpUCnpwZilmekhmQWp+R1YqRCR1IXdJbEdtQ0dzdzJUQU14
d15YY0t4c3oybnpnbUgqPUQtOWJpR1ZVYHU4YUBAJkJpVQp6ZyNWeDc7e0piJWpzNT45RChZdmFz
YzlCWUx0dldVTUA5WW5XbzdqcjFLWmdBZjl+KTl0S0c7YjJkSkQwTC1QITAKej1kTzMqO3MxVkVT
cDVIQ1pqSyFUPCh8Mj97QSQkRiUwKTR4U1lKUXJTIzxRanVWIVpkem5QZil8RmRKcXxMPFg4CnpV
XldQVUg4bE1IX3RLXlJVbzx1VWYwQns7ZUBrOGNTQiQ4cjJpJDthVzg9SXhLfCVqTjcjVHFAJGRJ
ZDd8OXx4Swp6e1FwKV9AJkU0Jjd5aUZAYVFPZDVOKHpqaDA+I29yTVJWWj5sPFZ1fnpWUDxgfDMq
Jl9mXn5LT3pmZX5He3xsJVEKemdrSiVqe3Y0PGdoVktKaWt0ezVuMTItVEs9JSl1UkY4YG5DPT1e
YDhyUzw7LVB7OUxQKzViTypubkN5cChFa3I0CnpDRUBzKmd2OT9DS3x6RTgkOyEkKCpSOEdwLV95
fGVlKyVTQ3ByWV5SJjtOaHU+aVlrZHZeMUR+JiVnakk0I0g9fQp6I1FxMktAZ1dRZGtke3QzWD45
IWUzUStUOXB5ezgwZnEyaX58Tm12NlZpM0x9Qy0/c3coMiVQQHprfXA9aS1gUGwKej1IcldvOD14
bUhFfHcpTHlaYVEtZlVgZ2E9Umc+IUBmP2Z8I1VReEBWcSpVeWAxbHM5Mm5xM19xeT4ycTV5Xk5W
CnpwKkBGeWlqSXFtfDMzbDNLc0ZjeSomd2w8cU40eCZkM2NzIVhvZG4tUTllR0VVPj1APitlSmhg
SG9AXmhBWUtifQp6d2hLNCtOLT1KM2FpQ2ZqYmpfZ2olPiVAOGU1fGJJVm9YZishYzB0XkstPll2
b2YxcTs8IW8kaGRPJFRZSytLSVQKbVBjVEIwQ29ASmBoWDc8YnhNbCE3dHd2Xz49ZVY1ITAwMDA8
TU5VTW5MU1RhYVhoKWE7CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvZXJyb3JSZWREb3QucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvZXJyb3JSZWREb3QucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyYWNjNjVkMzZmYTJlOTQ3NTM5YmIyNGViYTU2MGNjY2RhOWViMjQ1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh
bCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDQzNAp6Y21WO2owWnNtaVApPGg7M0t8TGswMDBlMU5K
TFRxMDAwbUcwMDBtTzFeQHM2QU1eaVYwMDAwOWE3YkJtMDAwWFUKejAwMFhVMFJXbnU3eXRrUFdK
eUZwUjU7N3NsRHxzPWFUdnkqeURXcWJqWitXQFRfa0FCJjlUazc5MUFmVGE/RDV+CnorRkhjRnFE
Pi1saHl1WWlYR1BBWWlsQ3VpU09oXjBFcFA5MGVPdjZUeUBMPERfZEwpMC1nfGRuOzlwK1dHRWlJ
cwp6anV3R0Mha1FZcnpuYms4VX5rKkRyQ2x6fHBrRFczT15xSGlXMUg4MiltX1Z5ZXgpTUFXPllA
OFRfNHVlPXJJI0MKemdzVi1kYktKO2UjNERCTHZSVzBkU2RAWHsqUShLRGhTfH5BO2wkfjY7R3E/
WE5HRncmVU4kUzlhO35zR1E7aS1vCnolI0xvc28wJCNaQGY0N0xHJTZSYUU3IWA2IUJkU01HdDM0
SmE1c1RBTCR9SU1jfk1AS0h8MVZBUUo3JmlhRHkjaQp6cj09bSRidE4xWU5oSDItOUZjVGQ9ckkk
dGZvMHhud2dLIXZhWSNOZHFRQjNsUTFHYG9SRjReeHtjJEVqTj0ldFEKejBCVG8yPVJLS3hDYWty
Jk0kY3FJZmhTT3pSTn41PGwyYUI4SWl0bCpYNiVYbDleI2xNQkA4ajZ7bnxWX2gjelVmCmNWMl5B
MzFPP2Z0S3BzVD9gVHpnYDA3KnFvTTZOPCRmfHx2KzVDOHhHCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZmlsZVN5c3RlbS5wbmcgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9maWxlU3lzdGVtLnBuZwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI2Mzg5ZGFkMjI1ZGM3NzFiMmI5NjBjMDI3NjI1
ZWJmMTg1MWZiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxMjI2CnpjbVY7KjFV
MzdLUCk8aDszS3xMazAwMGUxTkpMVHEwMDFCVzAwMUJlMV5AczZiOSNGODAwMDAxYjVjaF8wSXRw
KQp6PT5QeCMyNFlKYEw7KEspe3thNz55e0Q0XjAwMFNhTkxoMEwwMUZjVTAxRmNWMEdnWl8wMDAw
N2JWKkdgMmlwdCoKejFfflNfMHQ4PEcwMGNAJkxfdChvIXxqKk5qfSUyMSMoJmtfR3JQKX5UYDtS
TEYjJH4kNWg5NW4yTC1keWdHdlpRCnpQa1FrbWttSlYwMU14PVUhNlB4b3FqRHA5RmZrSEQ1Zng8
KExOS0A+WXchY3V1bW1AfD9DMTEhKSUkdj0/d1JTRwp6PyV2c1cpSmk1KD44YDVoY3xZb1QtLWlH
Q0Z4bGtZZ1JqMj55YTVkTXg7WUZDUElQXk0jPVFVTHAoNioxMitaeEAKel5aWn5LKWhaOEFePz40
PGpGMTF3R3JNLUxpQEA7e3I/NklyI3R0MzEwfXkyfEIoKzR1dHd2bDBFLTMrKnt3SlcpCno2TD04
eWJ2PXRwJSo8S2E5K0kxQFk5WTk0c3IkT2xqSmhgRTdEO0ljdk9WMmtNY3hRWCR3akwtWEE4OCpq
MUZzNgp6MWdDOTQpdjlFNHJFOCs5TUMkXzhQN0FmcnJFM2pRQn5EeTFmcDVNJHYrakYqYHBtaDFy
MnxvPylxRDI3K3x3cGkKekw3ZTVwN3NxJlUmJVUwKWcwUkxYQTBJN0chc1I8UlFJKW5eYk1EUSUr
U3ZxRVdvaDwka0JWbXE+dnRobE4kOWdXCnpPS21OQFRNUDNHVClsRllzY1NiX1R5QWlEZEt2eyhs
KSs2eUpoRlgramhsdXJmJDJhR1A/V0dMMVhmYSFRT1MhQgp6OWgjdVJaPGkpPFYlWWlBbFpYPil3
SGhWfVgpR15yZC1AaWFGSjU4U2I1Rk85RmVhYkspPUR0fT1jSHcrc0kpZTwKenhkPSUhVmZ5OV8r
amZrdz4pOXUwI3RIclhlRlJ+fF44NUBGN2FYVGZwNXl1LSpRb2NeNXNeLXtDI2NRaG5sWCl+Cnpy
TXJRPTZneUdBe3IpVjhFdGwyaCoqUHxCeXBKJHx6YjFhZEk+aXtqSl8+fW9TeiteKmA8ZUxwR1J+
PkRlc3ZnNAp6SyR6SDNSWHU4cShPZVJ+UkZLaXk7bDIrS0FMZjxVX09XJXhIZi1HUnV+JHR+NDgj
ZExNWk0qbmZ+R3plUTlRPzIKeiRHK3ltI01FMkI2N1gzcjM3Ni1sYUpHQFV1QTZ8Zm1VX0wwX1Nj
RVR3IzJDUUFEVDRpIyluWVNke1RpUktvQDVTCnpvQVZHdjEzLVdHRWtKUzNSJGVGUDZ5cSN2bjw9
b1FpWU9SeUFQSzFSYjlMPmM0aCZ7IzI1SDclakxSZjdZQnZoKQp6NXtwIW5TNTRvR01OeTBqTkNz
I3pFYH02Yk1LR0ZAR0opUzUxZytaOFQ/XkVMTlkzcXJ3TkBPNiNpVm9OOFhpTygKem5wJG5yQTE7
QXBDOV5QaEU0bTFMZEhRMUlFb2p2eWFUdTMpdzxqeTAtdEZHPGNHRSU8TCg9ZnpCfUZTb1ZFXjcx
CnpEeSFRXj98dENrSXwxOEItSlBLN3l0UyZ7RDwlYlpOa2BtRkgzNEdgaT9jVXkmNlBDQGtAbzx1
MzNrUFUoeElOSgp6VT10Nm5PMUJ2Rih2cVJvamtKPHh4WFo4NHorQj49YiVMakpRJU9MP1UmZXdZ
RyQhIWRVNHEmZUJaNygpU0l3LVQKemI+Z1JqcV5zN3EybjI/LTZpYUNqVWAjO2MrSWVobkAyWU83
KlJEdSQ7JlBwTEcmKHhrMk1sR01XN0ljTEA8OTxXCnpeNXtlU2FRO3VtJjtPM1dsKjUqVVUySDth
KTVBUXJgfCpLPWdAdTk0MUFWfnVgSzlGWlBmdCRsMTImWk13K1Z5eQp6SlY/RChfdHUrPTdRQmRu
dmtYNDRfNGRIPD1DaE5ObGIxNkJGPnZZSnVZVnJ8LWReakYwfCNFK0dDVnhJKFhGTX4Kb1d1SjNs
N3t6Z1hiOEt3djd5Y2k+S1JZNEZueXZvSDxeVFd5MDcqcW9NNk48JGY+U0wqQzskS2UKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9mb3J3YXJk
LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2ZvcndhcmQu
cG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDMzOTJiNDQxMTM4MDZkODAwMDg0
YmVkMDhlNWMzNTM2ZTY5Y2NlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDIxNAp6
Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2MXw7UF98NCMlYGIzSSlnTG83fXdDckgjQ3hQ
TCE+eClPNnUKelpTRFd4S1l5LU95UjkmUihXNjUxZmBZQ1dQczJsM2h3em9iTmVtTEBUZWpFUmwp
c0Q3aSkzNH1ZfXZwMkl8PmhQCnotZCtDdyk4ckhmQyNPVUlNWVkzZmJgKlRlYEVfLTVffH1lWlBB
KUQteztQVVZgP0lJdXEwe0JGdigzTURAKlVaKgp6Vlo7QzhYSj52RXw5b15iKTFsWVFBXk42QTd3
ZHhGPyk8eUVvX2NMXmxjQE9tTzcjNE5RYFFVKV5ERUE/TkV3NUMKT3p+SmZYPWQjV3pwJFAhWHpo
MGpKCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvZnJhbWUucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
ZnJhbWUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2Y1ZWE0NmNhNjczYWMz
NjFlNzBhYTFjMTUwMTMwZDdlN2VhZWUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFs
IDQ4Mgp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2MXw7UF98NCMlYGpLeDlqUDdMZUwk
LUQkfDZwfXJIZD5JKDMKeilFRjJWU3tOOTkwZmlifkZmZiFGRmZoRElVfF9KQyFONEcxRmxTZXc0
TiF0RCQ9bHQ5O1hlcDIqdD5pKFA9dkY8CnpCZUl4KmZtO31hODV3NUhrcEsjXm13NVdSdmZ0djg7
SWBJVDZnLWEhWHJxfkBpKGBuej5FeSUoMHZqNFNqPE5oVQp6UTd7JG11QnJPbClWIUhQaXM5MG47
NlI0N2c1dSlsbSthPkgjJXAzV2FpKGIwRip8SlFLREVsZ1c+MU5UJlZkc0AKel88ZkIze3l3T25l
M0hORFpvTiNeIUY5fCM2Vmx1fld0Zj5HWnF+UWBIK2JxMGIoezZuUGt6eU11WVhtNENvRWlFCnp7
cVc1SHxOcmFMOGMrT0JQeCRrbGVORmRBYHdPZkpmOE5WYWA3NXNSVTBteSVjK1A/SSYjenhOI1BC
MyowOzkqUQp6Z0hyISVubWR8NSMmM3xnPURAUTEhVGJDVFgmWjcrTklBfCooRUlVfHdWa292az9s
e0QjLUcyVThWc0FpJHsocHoKeiojR31Xa0cwaFFXfDRvNFFYaFVCOX0xaEc9NWN+Q19nfE8yWSh2
WmVoTjZTPjxwcF5FUGZYKExQa1lraDUqaFRiCnpCOVdVfSsqPHFNdGJLcH5eZD5we2BmXm5+WkJv
fGVqcVdsPjd5Xm58bVREQnVJZSs1Qmp5Ykh5NndHLVRCd3VYegpVNGNMfm0xc0pGZHAwMGlfPnpv
cHIwS04mbnReZmM0CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvZ2xvc3N5SGVhZGVyLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW1hZ2VzL2dsb3NzeUhlYWRlci5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU4NWM1OTZiMTk5NDQwYjY1Zjg4YTI0NTMzMjk0YjE2YTZlNTAzYjUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTAzCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeajZs
ckshMn4yJSlmJWs+UWhKXilqdipZO3ducSlRN3p7WEE0a28rKQp6e2ErazxwK3ZMbztreVkoLWQo
elQ9RkkrODE+ZzBSUFdZVlJAI0w/SjduTkR9d09KTFlsZmwhfiZ0O3VjTEs2VWQKQ0twez41Cgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZ2xv
c3N5SGVhZGVyUHJlc3NlZC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9nbG9zc3lIZWFkZXJQcmVzc2VkLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDE4NzJjZDJjNGNiZWQxYmMwZjhhNmY1Nzk5MjIxYWNjMjA1ODIyYi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg
MApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxMDMKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5qNmxy
SyEyfjIlKWYlaz5RaEpeKWp2KllmdyhYOHczPGV5Ql4rTnl1Cno0PzRmcUhpc2l4cD1INXQjWXxQ
cytjUmVWLTt0dUdsb1REaG99R1Z7Z24rRF9SfGlsaGdRdSZYJVF+bG9DSUgyQwpCOF94ZyQKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9nbG9z
c3lIZWFkZXJTZWxlY3RlZC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9nbG9zc3lIZWFkZXJTZWxlY3RlZC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGY3ZDYxNWM0OGQ5MzhjMWUzNWQyOTk0YmQ3ZjRmZTVjZjgwM2MxYzcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTIxCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeajZs
ckshMn4yJSlmJWs+UVZ5T2pqdipZZiQrem1paWVBMzBVcThkSAp6PUopWTA/ezNSNF5TQSRSVCs4
XmwtYmE0bHxJfGtoNkgqXk5QRCsyb25rMSprcnhxOE5yelIpSXJmYDtsO2doZlUKVnheNFZYVU89
LUxKWURAPCk7VDNLMFJXWjVDQDI1YAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL2dsb3NzeUhlYWRlclNlbGVjdGVkUHJlc3NlZC5wbmcgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9nbG9zc3lIZWFkZXJTZWxl
Y3RlZFByZXNzZWQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWQzN2ZiNDQ5
N2Q4OGJlODUxMTM0YWJjNjA1ZTk1MTQzMDg3OTBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgps
aXRlcmFsIDEyMQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXmo2bHJLITJ+MiUpZiVrPlFWeU9q
anYqWWYkK3JzTG18ZWNEVXE4ZEgKej1KKVkwP3szUjReU0EkUlQrOF5sLWJhNGx8SXxraDZIKl5O
UEQrMm9uazEqa3J4cThOcnpSJkNyZmA7bDtmMEJLClYrcEVuNiRBRCVyYylJJHp0YUQwZTBzeU8q
RFBSQnEKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9nb0Fycm93LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL2dvQXJyb3cucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODBlMTU5NDc5
ZTgxYTQ1YmMyNzkwZTk0MmU5ZDEwNTYzYjhkYjY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgps
aXRlcmFsIDE0Ngp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXkpScj0kMXwtOHVXMWEpNE5LWTVY
NVJMUTYyQFZXcTNmR3ZEXyFhdEUKemxsV0lpTkhhP2J1cUF+bl8jSk1IVTZ9UGk/UXc5PThxUz1f
VnRsTVQ1bDAtZDQhJTNHbHJkSj1MLSQ3VWk+P2NkCnNLNmNZfGN2WS1CUX5XMih0V2p+N0AkX1Y3
Mikwc1hSRSVHcjFHSSN9KTc4JnFvbGA7KzBHdTh2U3BXYjQKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9ncmFwaExhYmVsQ2FsbG91dExlZnQu
cG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZ3JhcGhMYWJl
bENhbGxvdXRMZWZ0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwZGNjZmMx
NmMwMjdkMWU4YmVmNjg1ZTYwNTNiY2RmOWE0MjRlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK
bGl0ZXJhbCAxNjAKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4rKDY5NiEzSEVualolSTlEVFFR
QEFZVFRDKyEraUUjZUVENms1KH0tCnpiV0xZcXNMbyt2eGNIQk8hUHRPLUxGeGZsP1g7c253VlZZ
V2s7T25XZ2g3fipWYiZaOHByRCRraShgbnkpWmAhawp6fEp5VGZsd2RJdjR0VChTcTxFcHA7V1ZY
PkZfKFBRUE0lJCYhTiV+RGZCTmcxX1kkbD85U29rWGVsRntyNX1FKVoKQ0BoYnhXCgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZ3JhcGhMYWJl
bENhbGxvdXRSaWdodC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9ncmFwaExhYmVsQ2FsbG91dFJpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggM2VlODIyMTMyYjExMzViNjdhNDllZDNiYmU0NDY3MzA2M2JkZDRjNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg
MApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxNjEKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4rKDY5
NiEzSEVualolSTlEVFFRQEFZVFRDKyEraUUjZUVENms1KH0tCnpiV0xZcXNMbyt2eGNIQk8hUHRP
LUxGeGZsP1g7c253VlZZV2s7T25XZ2g3fipWYiZaOHByRT5eaShgbnkpWmAhawp6fEp5VGZsd2tT
T1NmU1VVd3hHYjZJcGtyUWt8QyRzPFJAdUNCRnFlWEgleHltSmI3XiRQeiFebnREbm17ci1VV3wK
REVZflZSCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvaW5kZXhlZERCLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL2luZGV4ZWREQi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NTUz
Mzk0NmM3MjRkNzYxMzBkM2Q2MGFhY2FjNzAzZmZlNjFjM2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAw
MDEKCmxpdGVyYWwgMjAyMQp6Y21WPEIyTzlXXlApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDE1
YzFeQHM2TyRyPC0wMDAwMWI1Y2hfMEl0cCkKej0+UHgjMjRZSmBMOyhLKXt7YTc+eXtENF4wMDBT
YU5MaDBMMDFGY1UwMUZjVjBHZ1pfMDAwMDdiVipHYDJpeVY8Cno0PGpFNyU1TSQ7MDAoN0JMX3Qo
WSRFe2Flan5xdTh7PF54bHlTbkUteVl9dlNXd1Z3WWR4TFFaTEJmZzx4OHc7NAp6QjZ4YGUwd003
YWM7fVRELVY9JHBTVjlPYVN3PXhUYUZHeUJ0aSh9Yjg3REhmdm01V215RjE/NXglQmsod1lufW0K
el52cm4ySX07KkFOdiU9V1JNcStGZUNLQFV3MUxrYSlNYSQoPGNacFB5fmEpKlVvMDsjQTFfeHxt
biNqPXdMUWl0CnpyNnZJWTRNMT0laE9QYktWMChBYVp8eDhGX0Ird217Zio4JjBSN1JMQmcyPzY9
VXE1fHtEPEdUXm81ciR5fERWaQp6PmRFdEtqbTZWLXgzcXZ0WjNTKzUwaFo7JGEhUjFvMkJpJGRx
KkRoLW5JbFVFTk1tMmA/fHlpJnk+Vm1YYHJHZm4KenxLP3hye3JUPkxnVEVhSEdYPnotZzdANG5m
QVFfI1VpfFc8aTxSbVVFVzAhQFdWMzJ2Km1oeDMyYlMkbGpHTlF9CnpGJGZHfCFaNG0zc2ljNj8z
UX1aOXFDT3QpK3tVI2x1bD8hNFg2R2xEdWlPcCpVPCYlX1E7aT16XlVWMitqOCZuTwp6ZkR+Q196
X2cmMW9VOXsreiU7RVg7e2MkUWdvMV8/OEhDYC12amAkaiFMdHhqPUNHWUlFP3MpQGB4bjMxZSk7
bTEKeit0LWMmaH5uSjJiTFMoUlM9JmRzd3Y2Vm52dkE3YGE5OVA3VExXe2V1JD9sZiNiJngqWVlv
OEBAR0omVDFFZmlTCnpCPGYtflhyWHVUM0J1cXBUNi09MGB0YFJiOHxqZ3RGYm9MNmt3a3M7dXpA
KTJ6JTRjNHhIUyskVkxOM293K2Q9OAp6NUpGKVgyQmdkKEApVChqQVdlS29rd0dnNyZTUFpoNUlo
YVF2bHhRTTs2ZnFlUXFLaTJifUA2U0BYQ3ZEU092X2oKeiEqT2UlKVBfbCY7eFIyeStuWEZSb0Ba
VmlOKHU7KDdHOCpicT9RWHB5NU1QV0d8bEdhcFZvU3NjYXdzN2IrfSN3Cnp0a2VXISloUDs7NnlS
QmlIMVV4e2VaKFAkKSo0REZDPyVram19IVNSJjQ2aGRhfWNRbGwtOHBnNzZ1TmRVU1VYMAp6JX08
fFJuND1+IVcmK3NRPml6TkZNKDFJZzJeaHFMWTElTGg2OXpGU24/THQzMm5lQXRzV3BsZjZLTjli
LU16dUIKelYrKkMqPDdNV3dmVChTKV5fXyk9X21hck5ueFZySDVEVF9iaFY3Snx7TXNHfUYlUUtK
aDFMcEVhTzZCam1KQVJfCno5UiZSeV54QikpZjRxYTgkSEE/P1UqRyljZCQpSiombEk5cFUlQnZ8
UzZfTWw4bnN3VzxZXkp6UWh9TzktcktCKgp6ZSVFV2pEPnFAWVlHR0pPMiQzUipgYlpPaGxLKD1h
JnwxU1ZPaSt1I0ZidT9EPWljall5IVl9eS1gVXpiNWA7cGkKej8/ckpeVFJWRkopJXBvSVpmem5v
Ti1KbjMzJDcoRXhFPSttS307flc0eklqZTJvI3xjJTlQfmJTJV42NyFTOE5pCno9aDNJQENzJTdQ
MD1Sa3Z6eyptXjM1RkBVYH1Zd0k1M3FGTjA7PGhaTUdZdTU7SUlsVHlFRy1ZUFkpP2BASDlqYwp6
YnJGWGgxcFdZaV9menhfSG88dWVnQlpCfSZLOC1PaEh1XjYmZDs0JDFSKWZaKzZhZWpXYSR1dC1a
bzY/S25WXikKej9FO0E5Zj81blBOWn1jZ2ZvQ0NqNzhZKE5XKzZPMGhSOVBldU1Rek5HQTwjY25r
X185WU1ySjZYJWZKKU9Le3Y4CnpFWlolXyRaTFlSUmFrWmopTUJ1MDQ8PmJ7Wlo3ZnxMVThjMzBG
dU9nNypROFc8akIkaWw7b2RKaHtpNCtiMXBAfQp6eVZpUD01ZHxJWWJPfXg9Uk99YjtBeyN3OWwk
TFdUbkBWbVc2Km89ZTM0blFtR0ZIayV8MF5pfnQ+KCtaTktjM1gKemx3Mz45MWFOPCZeUDdMJWM9
KDVJRk4hcXVxIWJnQWYpRnw+SzRVSyg0I3UlcTVrZz1YMjhjUFg4eTFMUkxXJklTCnpjQ1kpXiZG
JEFaejQtYigzTGF7JHVYZz85VFM5SkA3TW0/cD5NTishUnY7VFdWMzQ5WWFtcTdxc2laKjg2UW9J
aQp6cH0mamFwb1FVfWcoJW9aRnBMcSN7QmFvWi19TUorWj5BOWE7SmVUTT9CX3JKPHtPMENQPVo1
PHdCVEA1TktEZkwKejM8Qm9XIVE2ViQ2PEd8PjNPUEBacjkpKXR1dmtCJGdBZldyP1A0IzBJUDdH
WGV9RDY5Wn5wY0VvZypISVdCJlozCnpvbjQkO2UtOEVMRFVfOzlVflYwaCtKJiVhMSp2NHdZQ1JS
diNJekByOVMtNnc5VV9pOzI+THRkY09HSkF1ajVjawp6JkkzM0tWRXljKE1HUFBzOSlQREk4YXpS
eno1P2RmUUtfJU9EPSklIXkhcVd3bzxpZyl2VUdxalhkQGk5ayVWMGcKens5VDBwOStWTyZ4ZmI1
TndXSD8+KFY1Yz1NUWRETTFUa3JHZ1JtJG4lJlVYaVBYTFZGSSE/b0o+aFVaQDh2OVU2CnpmbD9j
Y1JlP0ktY2VXNUVgRnRKVnhoak14X0YtOHI0OHdxMVQwcHRGNDdhb307KHB2MGRJZEczMz5lPkBY
Q2JtPQp6ZkZ2MHBpTW9oX2VkS3c5RWNxWFZzQm89QiZKJDI4MDx7PlY8dzk5JVYpKkhgUXN4a1hM
eVJPP0RSdHpgeGs0MDEKenllKmBmPG9eRl81V180cWdxWXg1VkVJXmlJSXwlYzFuSXhoSDBTbEll
V0ZwYllVUyFPVlF2LTd0SFdWYypzS2lPCnpAbkcyPUVaZCFHTkRMVXooOWxYaURHOCt7cG9AMiZN
RnsqfEAkdHMpTkFHXns9dk4yYj14VnpZJCQ2aDxYdytEOQp6V3ZUTWp1WTc2Yz4oOEQkdyFWSUxk
OThXOz57NU1VdHlaYjZscSZVQXlVMigjT2xsUFpscVpQODR1KmI8NUI9UyEKei0rQWN3NG1SMiFa
Py08VWA9RVhJISstREoqbDdoSDlDWUwwemtNNmQ4bSMybWpmSUJXYlh9e3Eqen1yPm5wP0ZrCnpW
cTJESjM4N0AzT0NCWTgmXmAjZThKR1NyJXpDWU09bVNWVD4pYChZX18tOW5XQGVDazAwMDAwTmt2
WFh1MG1qZgpEKkk9eyYKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy9pbmRleGVkREJJbmRleC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9pbmRleGVkREJJbmRleC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGVhZWNjMGU1Nzc3YjYzMTI1OTkxZGIwNTBkNTJlMGM1YWMyMjg5NzguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaAps
aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTA0NAp6Y21WK3YxbmN7V1ApPGg7M0t8TGsw
MDBlMU5KTFRxMDAxQlcwMDFCZTFeQHM2YjkjRjgwMDAwMWI1Y2hfMEl0cCkKej0+UHgjMjRZSmBM
OyhLKXt7YTc+eXtENF4wMDBTYU5MaDBMMDFGY1UwMUZjVjBHZ1pfMDAwMDdiVipHYDJpeVY8Cno1
QzgoZkFDVVYxMDBXZHNMX3QobyF7d0p2WVpPVHMkTnlFYGNeUE0tayhqNiNqfjtlRWc2dD5BZFFj
Q1pnY3Q7NAp6cTdGR0lpeHxWTUdEfXBWUTNGZDlDQjkmTUxFSShpMlQlfE5qfHc4Sk9ONW1gOUd1
bXBDKH5XZTxEdDglcj5ERFQKejAhaGVXM3g/Xk1zKyM5dHxMNTBGYnFpKzNTfmlJX1piRHhpQUsx
fXdAYDFoKzs+eUA+bHIrfWJWdjhsallaWEZ0CnpqYSsjPzB8M2tueUx6PG09byMye1l3QnVle3hn
KGYzPlBMTGdkZmtjVFFHRU5GWiVPXnJFSXU3ZDNBV15NRSltUAp6NzwpemxMSUh8PTdEIWJoRHsy
Xk5WYGx2TyZucm1GVXoqOHdmU0tYQzR5SkNONiszdEIqR19QQHR1d04/c1ZSZG0KenJMeEZtbnY5
RWZsMXY/eDV3OEZCKUx7M0krZEhTWGJtYyV5ZmJ6YFBtYVpKYFBMNDFEe1BwTzFUPz5NWmlrSldu
Cno5QU1AIUZvKUA4O3lYUzRteUdwQkJxPCFzVXh3PkNXfHRBanEhbWs3YiZFUXsxT2BBdjAyN0Vq
MTZ9KXVSLTc1Pwp6RjtqYmJgLX1ocEFvM2xOKGwmdHNLbmZYNFNFPkxhaXRMPTNRPSF2PUwrd0Y3
NU1ZRSFNQThLU145eWNWMDVqdzkKentxdkVESjlpJlJnXnRKckdzalh3PFV4cWdjMlhYcy1KSHNW
NWtMJnw5eyQ1UEZuRC1SSCQ1MGpoM0BJfXkoSlp6Cnp4Izl4JF9afjgwUVV4JEdLRl9gYkRTdjBI
MXpvQ3U7THBZUXJQQ2A4b2w8X3pePj9CRypIeDxxVUJuP0ZrX0M3awp6KXZhe1Bmc1I+ND95bXA3
bWc1Mns5KERoQCVGcmJwe3F8fkN4PTZZSlNlOGhLYVBIR3ZSMklNYTQlOTRPNHNgMzwKengqJnFg
cFVPYTNgUEBXbm1qbTZ7PTxsWHFFUzBDJT1iR2FKZ2NLJlktZmRGO1lOMkNOZkY8aWY9UDQ1VHsy
O1JICnpIey0mJkF2azM+P0pWJjhrNGhLN3E9RS1JJWswcElzezxWfipSTzsremRGYVlPKXZKTHZt
JnxGKlA0WVM9eCpQZAp6Syp6PlJlRX09d0tvV0d2UGZrRXVIaW0hTW1uPVhFS3pXT0JELUtkOTNA
KH1oQV8oRHk5OVYzcVBsTjhgLSFISCgKengyZkA2UC18Zjw2e0dgS0l9bjRleX0hUyZsK0FUd3tQ
R0FFb1FnayhzbGoyeTNRUXtlIV5HISFELWZ6ZTVoPDBmCnpROXRyeEJCZzg/Smpvc1o9dkwtOzRQ
QiN0d0Y0fngrTkZTR1dATkcqc1EwOTc+d2B1fU5HU3BNbTlRR1I9UHpmcgp6LWsySnd5bXxmNTNI
ckQoSEducy1BTHtYI2ZGRVkoPUFUQDxjS3Y0biorbEU1ZkYqQEtIQighJFJHeG5TcHx9bWUKej84
Vlc3USFKSjd7ekRNfWFCO01OPmJfMjIzeElZMnhmT2dAVG1WbzY7TTdlZ0dzT1M/P2Y1KFlGYGUt
WFVeJFRoCk8wMDAwPE1OVU1uTFNUWipJTSFQTAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2luZGV4ZWREQk9iamVjdFN0b3JlLnBuZyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2luZGV4ZWREQk9iamVjdFN0
b3JlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmYTA0YzkyMjZmMWFhZDVl
NDQ4YjE5ZDU3NzE0ZTM3MzMyZjA5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA5
ODAKemNtVjtfMTF0UUFQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUJXMDAxQmUxXkBzNmI5I0Y4MDAw
MDFiNWNoXzBJdHApCno9PlB4IzI0WUpgTDsoSyl7e2E3Pnl7RDReMDAwU2FOTGgwTDAxRmNVMDFG
Y1YwR2daXzAwMDA3YlYqR2AyaXlWPAp6NDw7RigtYWRXKzAwVUc+TF90KG8he3R9Y09CR1FSe19k
U0l3UCRLKk0xTWZrekdaKHY1WWVKZHREQFJpXzUlI0cKejdLSXhyMVdDKlg2KyUhRFdLdm5VWHJH
SjFXaEFzSkFgeik5di1HXztfbnk7WWUkVCEwLWFMWEBIMU9hdGJMVzJGCnpJcDtneXhnKGV2fE1I
VWYkQ244STQ0dko3OWwjaj9UfTVBUlg+czZyeDthMjBaakZ9YmB2SEtOUXZ8LUJ6QSkwfAp6eF40
QSRVOytSclJsJHFkOCNzN21zM2AqWHJpTXxpPkYjUzJGVn5uRVp1bWZ4dUxhVnpHK3NnQDM8aGJI
VEJwMVUKejcrZiU4P1ohUlY4ZXs7UC04Y2pmKkFULUImU1dvM18+UHFUMlR6emUtWlYlejAxJU9K
a0NfY0hUVVFBbzU8eVUlCnozXjBMMUZlV3BDTTZ9RXJOPlFBeElfO2Q3UUc8WHIkfE5aMVhmcS1v
eWpkUzEyN1lhTG1KJT55X1IoMD1lTFZOSAp6ezZ7fEVDWWhaJmNpWUgtSDN9a1ZSbUpAfjdqZCRH
dk1gd0F3cWs3TGMjYTV9QHBhYExOVUtDekVnfXBxPHlGQVUKelNYcHtnKVBTKDF0ckpTczVuKV9v
RzYySkAjOWN4bDI4ZEsrYU92Yn5CX2lOP0p+KXZ3U31oYn5SKWt0PEZ6ZFBfCnpNaEtCPSl2Uj8j
MWZ0WTFmdGFGfl4yKSlhZ0FBbElDOGJRUVd0UW5TWFUzMjlpYjxmUjIrdzlGUF5xZT5SUSZ3Twp6
LUtOJi1qMXtKd0BJP1IzJGhEJT49aCYqfVpET2lDaTJpfUhRU1lxI0NBO0EyO0wmXiRlcHl+YnRA
O3lgKUliZ2EKekFfZFJXYDFKbCYzUm51NldSb1poJnxjfj4jT1ApJVEpe29XckxzOzVHRCh5cUFS
em48MWM3QXotJTNEODVyRyRKCnpFeCUqQHdMJjs/PXx9QFgrbGs8flZKazxARUt2U1c3YjZmJkxr
UiMqc19sZXk1PndTMj1ULXRVNTJ1PiRnNlppOAp6aDFkM01aKlU7I0ozcmNSNCNkN3VMMyNXTjF9
PUBxJGA1S1U5WERsMlZGeyQ7VikqaGdJe18oeCYmekw3dCpqUmQKemhZNlkoT0NKXkBrUHMrdE1K
TSZqKXtiNjc1M1dfXnEjRipGUHlAYVFNTT93N0x5SyptKUZCWUltJHJhOTgzQWYmCnpvamVXY2h5
KmVMZ2MtMzdCc2J+ZGRFblYtUWUqPGYqRTxzPzJ8MTJnZj5yP0NRYX5+QCtEa3BUQlE8K00tbitY
Twp6ckVOUFIqWWgxdThkP1lpOGtUN09efllUUlk1K0NgZktDQVc0ajxVbHgzamwmMnRjWE8wWWVI
blFXeXR9TSVVX0UKelckeTlaO3Z8M3RYOHRDXjM7XmkoaXtGWUgwOUtpS1F+ZFd8JEctc3ZII3Qk
aU85a2N0MDAwMDxNTlVNbkxTVFpFCkM7aD9fJgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2xvY2FsU3RvcmFnZS5wbmcgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9sb2NhbFN0b3JhZ2UucG5nCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTYxNWNlZTJjNmUyYmU5NTZmMTBkZThhNjk0ZmE0OTVh
N2ZmOTE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5h
cnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDEwNTMKemNtVismMW1nUk5Q
KTxoOzNLfExrMDAwZTFOSkxUcTAwMUJXMDAxQmUxXkBzNmI5I0Y4MDAwMFBiVlhRblEqVU47Cnpj
VlRqNjA2fURMVnIzdm5aREQ2K1FlfE9lZDJ6e1FKT0JVI3pleit2UjlNNjFtKDdiRFJUUmE0X2pR
bCQlKmJAYQp6NC1nVW0yaV5EfD10OXR+SjYtdmVEQn5DcWdNJTduRmQmI25hM3d+S2k5OzRIJSkt
NHA2JWl4QmFTP1pkQ345UHcKenFecylQPEtrNlNTOU4hXy01YXk7KGNTZiRkaGd3SD8+Kjw8RHdE
Kkc5RHk0PXRlUU9kPSNkQFpYPCllTT05XmFmCnpXTz1jaUw5X1MxYDBVZygwRm9MMjl5JEVpJVVm
SCshQz10WlAtbSF8eFRrQkQ8JFFHRUVLZlo0Y3pKJkAwQkBmQAp6aUY8ek5eOXZgaE59fUh8bD8q
N3U4QCRsT3lhRXRPbyk+PGROZzgkV1k5Kns8Nkc7MipvIX1aREZuTiV0bzg/bHEKejA0KU1RNjZ5
alZjVF5nbTAkP0IpcSklKHo8Ymt0e283cyQ8UERNYVM7TzxCWE93RXZ9SSFVVjVNYU1tVD1YdT42
Cnp5KWFGZDI+PmRNdDZ0Wk5OY0c9VXIkRH0zOWcjI2YrTWY7SntjfDVJdD5jZSgmbzMhTUl5Zkxf
WEx9M2xSVVdHPQp6Wk9NeCk9aGRDbHl0KH4rVFpUMyMxdmNRd2k/NEwyVX5saHRTanE5JiRnNVEo
OVRRSDFKa04xPUU/eGQqQSNjcksKeiY+UH1qYk9VZX5EamVpM1Y8LWA/cjJ3eUY9JChkWjV0KmZW
bjQ8I3NxQzdDUmpMVENMUkRubzh4U1omWWR6Pk0pCnpGJCVMdkFxRUM5YzB8Qzc5MCRDaTFUfjcl
STExPytWPVFIOyh2VFk3OCVXN2BPJHMzc1AlejUmWE9TQEghJXhxVQp6VyFYfSF7JHpKfE5nMmoy
Nit+Vj93bj19Kll0cHB9T29JYWUqR0Q2Xi0jRXBJPDN9K294b1lFN1NnXkA5TCUpQUIKelBkJDZN
eUJBI2s9e0pnRXpzez1+cGBZIzw1JTxXcS1+VWAyRyN+XlVnREApLVYzQChgK1UtYyo0WnNDT1E4
WEcoCnoray1KVmclbEhDTnxORiEwYDV3TiZDPHM1SSNGN3QwaGsjdiMmSjFyUkgwZUxSK04xTSQ2
OEdge2l+UVNSZSZsNwp6dGIrcjkkQyVoSFV3fStXRFhzKHtVXlV9aW1HKUp0cUgxKDtlZ3d8I28/
KjE0M2VLS2lUbT41JiE+TVJDSUE5eioKemBUYDtSYCFrKnlqN0F4Kz9ZelRWJDZ2ekMyKkMofWRZ
K1ZGP2FJaTI9UWNPSDBxa0EqbTI3bCV5OEJFYTBPVWokCnotfkRnfUdZQkQyRFgkYC1PYHUqfHpv
Vk4yVjV6UWBCJUUqRz5NSDNUMl9ZYlBxTjl5VFNXXzw1PEMqNzkkU3sjZwp6OVp0Nno3aFpTRSlR
fCQ5ZTlMZ0dRR2xzNkI1OGdFRCUzTHt1YlRVMGpTbExCNVdxXmdZU3VHPkhNLSs4ZkJ8cF8KejNx
ZipMKktYP3xVVkVkKmZfdnx8b0F2Y08hSGklS2RJNihSMl47eWgjeUxNO2BzT1ltMUZqamMwbztH
ejB9bm05CnpGfShGKnU9UGJHVyE4aHhNPT53VTs5fSQ4O09+b0hlUj1VKztBPV5MU3sodG5oNXpu
ZEBje1RrKGx6X3Z6YTlTcgpYSmQmbSplNyZzZjAwMDAwTmt2WFh1MG1qZmE2YU90CgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvbmFtZWRGbG93
T3ZlcmZsb3cucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
bmFtZWRGbG93T3ZlcmZsb3cucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Iw
NTRjZWI3OGM3YTRjOTBhOGFkZGNmM2I4ZjFiMWY0YzVmNzQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAw
MDAxCgpsaXRlcmFsIDEyMAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXkFUfTJoR20haWNxcGs7
fWNtak12VD5rPz5USDFlT1cxenRMVWs/bWAKejZrfHp7VW9lQml2bTBxWmorQ2QxVitjb2RAe2ot
ajhKSWNke2NyWHYpPWd9PEFla1Y9KEJMNlolRio+RDk7a31KCk0pNzgmcW9sYDsrMDZyWmYwMDAw
MAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L25hdmlnYXRvclNob3dIaWRlQnV0dG9uLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW1hZ2VzL25hdmlnYXRvclNob3dIaWRlQnV0dG9uLnBuZwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTRmNzQwMzMwNjI0NmM5MjU1NGVlYTNiYzgzMTk3OGY2ZWIwN2Zm
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBh
dGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMzUKemNtZUFTQE4/KG9sSHlgdVZC
cSFpYTB2cF4yMCpPOSEzSEVsdUtibihRakVueD9vSkhyJmRJejRhQGRsKi1DWT58CnpnVyFVXyVP
P1h4STE0LT9peTBXV2crWjgrVmImWjhwZGZwUnI+YHNmOWFlckdEUGIwKyl0aUFyPVJJODxMbjAy
cAp6NFJfPV9XV1p4QWB1YE83anBYYSVQeGpTKztNdEtRI01IU3tHNCF4bHtCP19zaWBKUDxrbSUt
Uz1zMG1XWHc1M2MKelNOMHFkaHBycG5gXnQwdCtnXmQqeXR2b2pwNDx4UEZ5OEZgY3h0a287KThV
LXk+MG58MzFTekVlfXBrQVVRfGs4CnorOHxNLWxidEliYk1zOzdSO21BMiVOYXNsbUlZM35WZUBE
OWdqPm5OdHZQUil7TVJLJWNEZzhpSzUrMlVmcUNgbQp6ZkEqeVItTSVOXy1gVzRoe0UtPnwmK2p7
dV9fd30kRCN5JEp7IWBoVmUkfGB0d3x4RDdoUnh+c3w1KFAwZjlzeiQKY3dpd1VMVHs9Q3BAfGdT
IXB3fTJZVUh4M3ZJVkNnITBMMWklI1EqPlIKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wYW5lQWRkQnV0dG9ucy5wbmcgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wYW5lQWRkQnV0dG9ucy5wbmcKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTBmNTNhODU0YzFhYTZjNzlmMzMzNDQ2OWU2ODc5
ODVjNTQyMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJp
bmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgNzM4CnpjbVY8ODB2LUt7
UCk8aDszS3xMazAwMGUxTkpMVHEwMDJiKjAwMHBQMV5AczZpO2BpOzAwMDAxYjVjaF8wSXRwKQp6
PT5QeCNBWSh7VU8jbEZUQ0lBM3tnYTgyZzAwMDFoPWx9cTlGYVFBUlU7cUYqbTtlQTVhR2JoUEpP
QlV5MjRZSmAKekw7KEspe3thNz55e0Q0XjAwMFNhTkxoMEwwMUZjVTAxRmNWMEdnWl8wMDAwN2JW
KkdgMmlnZjIyP3oofiFAUWFSCnowMEs1aUxfdChvIXt3S35PVCQxRXooYzhwTE8xJjw9LWBsazI/
YmpmNmVrQktLVHNVZkwwNS12OVYmRl89cFlDcAp6UksmbGFMJndzZ3BpcSNPO0BiV04/T1p5UGpg
aDhlM3p2QXdyOE5PPDEzJXR6Y151cD9fYnp3QmJVR0VCIXQzPn0KejBEZlQyTXNQZmpBUEIzI0RS
NkJRSF4zUFhhIWQjVVBvVTlnI0ckPG5yMHQ7RFkka0JyVUAmK0FhU01wWjZadCkxCnpBUV8yN0V7
IUltTSVGezthSE5GQzxGUEVuRDRNfl8hOUU7VTZ2YWJJaCo2fDVkI0MwXnF0T0dWNVNQbSgkNn5R
YQp6eVNQKVpCeER2VHNae0Qybk1LTURKaiZNJW5NQ0E0ZiVXZGtZTFVtKTN2cypNc3MqM1YkQ05e
SG1PPV9yc1pALXIKek13Tm0mT1NNd1U8dVg/YVltWnJJREdVaWIzPztGbyY9UG5VWk40VF9YYkMp
PWxAYlU5MVFMaEM7YktZWWJVSExvCnpHKD57RkE5SzZpdF5tST5JcjdRfT5HZ1c9Ryg+e0ZlO3o2
QWNEcWhQQnJ5N3xaP3V2bW5lSGpAbzhISHFje2ZecAp6eUg9fis1LUhmYG9udHNzRy1yYHFFX1gk
d0N+ZStaZzxVPnlnak94a1drRXxKSXNaQCFaP2sydTZmNk9oUF8wJmwKelI7d2pYVVd1dntlVlAw
ckRWa2BUNmw2M1MkJnM5QnApQ1RoM1pmTXVSOzIoRUBURE1HbTZBQFVfWmExJW5STEJnCnpLYmxN
P3A5cj9DTlhjWH15TitLN0BkQyRAcUIqPHBxYDwwOyE/P2tHSzdTNXpMenk2bnRWd0dHV1Y2eyNC
TyQ7Iwp6eWd6blkzU1JPM3o/ek5WMkltPEoyS1N7PjNCfTs4SWM1V2lMWk5XZEBBbkBhbUV0Zmw7
MDVAd2t2QWF1NE55VjcKVVM0UDVXNzYxU00wNypxb002TjwkZntqTmtHWE1ZcAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVCb3R0b21H
cm93LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVC
b3R0b21Hcm93LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxNTY1NzkwMzhk
ZmQ1ZGFhOTY2NGNiMWFlYjllYzg1YTJkYjQ2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0
ZXJhbCA4NQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXmo2bHJGITJ+M15wOSE3LVFaayt7anYq
WWZ0T3BsQHE/ISE9dCshY3EKaF5pQTYtdnM7cmB6RSZgQ3xKWiNxRWZweGs7T1hrO3ZkJEA/Mj48
fCg3Y3V8PAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3BhbmVCb3R0b21Hcm93QWN0aXZlLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVCb3R0b21Hcm93QWN0aXZlLnBuZwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNWE4ZDA2ODE3NjAzYTU2NmFlNjM0NTI5ODA0NmUwY2RjOWFhZmNj
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBh
dGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA4NQp6Y21lQVNATj8ob2xIeWB1VkJx
IWlhMHZwXmo2bHJGITJ+M15wOSE3LVFaayt7anYqWWZ0T3BIMlFjVlU7bExQcCoKZ2NQYHgyeUdf
Tj5IZFRVNGJnQThRVGM4WXNyPm1kS0k7VnN0MEZvWE8+SHEpJAoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVFbGVtZW50U3RhdGVCdXR0
b25zLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BhbmVF
bGVtZW50U3RhdGVCdXR0b25zLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMy
MmEzYzFkNDc5ODUzMjU5Njc2ODE4YTc3N2Q1NThjZWNlZGY4Zi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2Qw
MDAwMQoKbGl0ZXJhbCAzNDEzCnpjbVYtYjRYV35xUCk8aDszS3xMazAwMGUxTkpMVHEwMDJiKjAw
MHBQMV5AczZpO2BpOzAwMDA5YTdiQm0wMDBYVQp6MDAwWFUwUldudTd5dGtZUGlhRiNQKjctWmJa
PktMWipVKzxMcWl+TmEmS203WS1Jb2RjLW95KVhILSteN0NyYWcKel5nPklCZlJzeWJRV1hkd1Fi
TFA+NnA8ej5BcWZ5bGgje2ZiNjtaKHZNTVZTfiRlQFM9aipmdGc2O1VoPGlWRH5WCno8UlBNdGdR
Skx3JUtQRGFxaWZjQF92WCQxd2J3cjl0bjswLSZqLUs9NDM8YlVROGo9SnNYYHRSO0RnNysjXkt+
SAp6SyFGTSpafnpicHZ0JUsye1VaU1lfPGxTKkQ8WiVMejVvR3UoK2RheXopaFJMRmRUPmY1OSZn
aFRtZ1dEMGw7KlQKekk3PGtDNmFZWWFqelhwWUt0PSg4b3RQJDUwSDZjX1Y5UjQtO3taQEMwQU1H
Nz1GPFJ4byVvcjEwUlVUK0FyJTNqCnprcExoUVdyIyFvWGdkSWAmc0tePjA5WV5wNmxQMXJJUk14
IzA1Q35jVz1IX0F3KmJKLTVEVCZaMm4reClRSFhecAp6MDBlc2dWOHxtUWNtUlolMDJEXkBTM0wx
NnRgTyVjMDA0Tkl2T0t2WUlZb2g2MnJZMzNTNjQwYEQ5JVkyRC08P2kKejAlNGohRjJaQDQ4OFUl
MTU4KDY2MDA1d282JXBXcl5aal92NHpBQTVIamNJcVVvR210MkxCPnJWJm5laCYjUTFpCnowMDd+
MWUkb0NjRlM4bmVJfGhKbHstUCFCMVpaOWhwbXEwKVgwaWBKd0UmPiQrRT8+JV88bFMqTVdLK24r
MWNnZgp6PGsoOFlMUig/VlNBRzZ4IWU3OHd7Y1FQdUpwQXxkO0opR3tmaWhpek0rRXJiIXAhdGNy
NXcrYTM0fihZPThzNEcKencrc0xMOW4mSmpObipLSkRpcV5VNV47YDFudkMtQHI2UCQha30xVXso
Kkk9US16QHRCS0hvSX11eGRVNWR5eUB1CnpVMUowR09EN09tYmltXkcwMDhwNFpeNl9rMm1ecDxn
Vz1EMnxMO0hqTjEhRERmTSFYT2FSMn5iTD9rWCQlQ2tTbQp6Mm1rOz9wbilvfEteeWVKNyVhZEI5
S2krTCEzK0ZnSGlTWVgjS0otbExKRE1uOUNCYk90YiMlKWhSdmBZRHF0X3YKektwaXh8UUR9eWZh
MUppUVJrI2o0YTFaKW4yJWY8eHluelY+TEM2UmJWSWtVeDBiK18rQmFSM2NuVDdadiFBSnhXCnpp
ekZiKWghanlHT09aODVGO2E/REFYUHttQDshMF9JZnE8RXh7KjdgMDVYRjdoUCsySGwhM0JRSj02
QGZMJUZDbwp6OGlZb28zKCNiQUZgQURTcHF0UWd2Pkg4KEhsZ1J4dDdzM31rM0tga0Z1Pj4tMlEk
UU1GZlBXIUxhe2gzMzZvPlgKenVfQ010dEh2NnpSOyZaTmlTPVg4djNDUiNma25VeEhVeEo8QVlt
UnNOTFdsKlBTe0FPQVJIdCM1IXdraTI/Szt0CnohWTNrPXM3dGdheClKJXI3LUJMcGhnZTd+Qmkw
Zys2RTZeWmgocDlUQm9jezNHQUZyXjAhZ3U/Uk1IYUNNJCZGbAp6QmszJXVuPjB1b0JhX002V05X
ZXFJZ342UUU2OWM5byNleWhHdnBpT0FAVy1hb25rPDdyMSg/ZkN7b0k1TipVITQKejx1djY2V3Rj
S1NSaW0weC1LZTJkNWpCcm1MYW17O1FtO3ttczFyMUdubU5zYjdELUVgdClpOUY4ZlhgMl9pMy1f
CnpiaDs3VWxeI3gpJnt4dlM9fHx8Nz1tWWUzMz1NYEFnVTUoeEM+Zmc9Mk4tNz1jTm5qak9ye3ly
aXk2bU1GZ0cjbAp6bkNGPWZuUXY4Q0R6KytvNl9Mc2NsfWVRK2xeWkhBUkg+P19zQHwjI1JyNktM
UkZBMSVRKz0qUlJXbm9Mc1JgN1UKenQ1dkY8UTByNDBRKWo2PXNFNFgmc0JjdDFxPCZmYmkzVkIy
T3Y2dEBxKjApO1UqbypTQVBadnx2dkAyYVlZblQwCnpiJThhK0NiNy1nZTBEMGtuRWY1UWkjQDhU
cCpjZXtOOzZscFF1Q0IlS0xfS09hcm01Y1A2XzhJcjxlMTdpcnk2Twp6RGRIJmByWmh+c0Y9YnE5
cytPMFFTZ1N+QFFMOUpteSo5NHhyPTZ5fk1ZfiExZmV0fihOKyg8PU1gd0BEMSliK3AKeio7QyE4
M2ExdUxKdiNOU0V+O3kjOD08PkljZlczQD93RnB3VVZ4clZaPlFkUXozMktJZUp9a357Y1paRV4r
eWE/CnoyRDF6IzJIT25JNyhCJV9hYz97d0ZVUTtRUUExdEJLdHJXcm0wXzNSZ3BzKz9KZnFie2pZ
YmNRWH50YVJCOyMkeQp6Wk57U30xfH1nVU9ISnhjP3dWM2Z4dXorbUo0YCFGJElaO21xUnJOc0hK
ZCMjKkR+anU9YlA3Py0/dn58Y3Y+dkIKenNKNkllTndWWnhyZGpUYHlsI2JCSWEjR3hSYSN4TU15
O0sjQ0R5eUd5UWRNU3hsV1QjdERlP3AhPzV3VCQrb0d0Cno4TDtLcDJIVVEtWk1KPTNYSlF2O3g1
Y2kqP3Z1VGZlWSQ7KHtYR1dfaHVJRlI5YTxmSmJGXnw0SSN4UX5uJERjPQp6S1loalltZ3o1TlNr
RG04KmZabXs2VSE7WVhgTkc+KD9AMylYU3M4T15ONVJ5T009VFRtcCgzPTheK3pwejJyKUMKel4+
Sk97ZGVaZnNvM29xMz9XbyhZP2wkZ2U/dVhvOyVydWBWbz4/PDwoOElfPjs4RXEjS01TOWdGbCpu
ZWVvc1NCCnpmb0hZbkJRSWt3a3lvd1B1KHpkbXNgcHs8N2U0a3JhLVpXcTwyKk9zR1R2RVYlczBU
ZCRoWFQrISo4Qm5oMktNZQp6Qm1aUm9kakhWP3IrXzVeWDlKMFdMNGpLV2B9bGYlQS18NDRJQEBM
VHZmMXJIakcoemU2K3dASnQlQnZqdHMhWDAKej8yeFM/X3ZlXy1rPE11amc7MEx6KjNidUc9MyRH
JmVoZXB0aGxOKiRLYU95U1NRXm5XbW88ME0rKFVFVU1FWFJRCnpNQmJaY0Y7NitLRWxNPmlLQl9L
aUpsWiQ5R2BjXj1FQG9ORyltV1dhTm8tM1RJVzgpJEhnMFViLX44P0todko+JAp6MyombmltQG1q
KGFDeEU1IXR7bHc3TzVeMEVJTzd6T28mYzZsPCt8aUR5U0JXQ0dyekBDNXtTdCFYM2hBQX1gVDQK
eihUTGJYVHErKDtAPD1MOGRYbnNzeWZ0fHcjV1NUVzwrKzM+c2dTJSg0TlRwZUktVkFxYnw3c3NK
dnpOSGdPWlZ1CnphWUN2Z09fUjF+PlN5TD1jRlV8fmd8aHl8Wml9fXM5K2R+bFlxT0I3MXo5WiR3
bkM9cFI5WXo0RGhJTT5XbWpndQp6JjU2bzZtYUNwQyZGIyN5JUc7MVBvYlI5aT9Hbk5nO2dZdGNo
RCVwMTlhIWVRdFpGJjNKYUt2MzNnWjw4RH40N0UKenRVUzFpd2ttRGFQcGo9JG0jJSlqQ1ZFWTRm
bkxHTmcyQS1gWXdIVkQzZ3Z9Oz4paEF2VH5BbXFTPkxyYGBpN2t3CnpKezVfSXRgeXJCbWxjMjVE
Qk83RTg7NVZvem5SPld3NWhBYXhuJDJ+KHFgJUEtWXVTNjR3a0J5PTlkbWA0Y1hlWAp6NGN9SUA/
ZStGVytiQF5SREJIVih3bk1xMnpkWDNTV3Y5dWAle3hDLXEqVX0mYGN5WFYoJXJSVCpaNk1IP2kr
aSYKel9COEMoK2dyVCV7WFdVUStmQE5vUDFSPUFXJjI2e3YtZHgpaUteLU5taXVqOHR4aiFtP1oq
U3MxTntkaDR6fTAxCnopWVRvKkp5Y1NVKStfNXI0I3l3OXsrO2k0RWUkcGVSZ0lqKzt2O1pHZEYx
SyQzRSVlfjRMYUkoakMtdSUyaCQmUgp6OWNMWGNZQ0BYd25ucyZibilfUX5UZT9yb0tHRHxkLWde
ODsrYUN7e0coMV4oTzdtMzdZMS0rNikwMWNOJnkxYXcKem9xY3tUYFBeWEpxUEJiSVc2c31kNHt6
X2Y1T20/dk1nTlFFSkc/djJUPUtZZF4wTTNJNklaeGJueSkldlpSJkxECnpKcFBsQFBzaDhReVBC
QEtUeCtAUmRjQyFLWDd9a0VvO1N8al51MmxVN1hRfU9vO2Z8O3o0TGwrX3I+QDEteGwzfAp6YXdx
LUglZSZja0MrQEFoUHJQNkJLPHo9PEwqMGtmS1VAQ1gqemVxYllRVDQoXlU+VCNfWGRUNyY7Rjcx
an1Kb3kKemtDfjZsaDdFQDZvO1dAXklwUk5ae3B0THRMKGdRLUNZfjRtcVc7VVM3Wnh2bV98QHl6
JmU1M0JwX2xUUGxmUHx6CnpyVHl4Xz5sdkB4Iz1eIVB6UjdxcUY8JGdtYHxaSlorOzwpQ3F1Jm90
PGF7ODFERjB+cnZHcjVYcn44dWBsYXYxaAp6MUROeXRWPjJ6PTAwMDBXVkBPZz4wMDRSPTAwNGw0
MDA4O18wMDRtTDAwNENgMDA4UD4wMDI2ZTAwMCtubDMmRn0KejAwMDdqTmtsPFpjLXE4Ukw1dGN6
NiNtQW9RVWxFPlpMS05uc1VRbW0zQFphLVRDdjZkO3pAZXkzVlNKRDdKM2owCno7LU54KyR3RHRf
eiM9WGxec0A5OyNOeUswN0RSRTteYig3Xm81WURiKio8dlchRitzfmVEaH1Cbi1JJmc1Ul4laAp6
NmIzKjZMPEdfPDBRe05GVylBQDkwQWhsODM0bVYhKzlYSSgycUJNOFBmczZ9Tn5OZyUocCNIaDdf
Jm01YUZJd1AKelVXfmAlYXt4YTh0T1NZalAqSWVGZGtFSXteNyh1ZXo/bXEqWSZMcmNVQHNQblU1
ditMUUd4KH4xPm1QRiVpbHhTCnpNPklgcVhxd2o4Q0VqS3R4RnR6QzB7fXx0LTJNOyVmVTJxfHM7
WnZzNV5vQTQla208YEUyRk9LKFYpXlBOYlghTgp6Y2koQGBTUWVMT0dNTlQxY0leTz8pOUxoM0cm
Z2BHVn5oYnYwKGohKHM7WWs2aFN+NVdWfmx4akFFei10X2BCcUcKeiokKTU0e05PYD1HbUNlVXlJ
N0ZpWlVRKSNBPk5YRmVac3c3dWZrRTFsaGYoKz5IMlVLI1ozckZHUkYyaG96QXotCnohPEkqa2Uh
cVkwTWE+eDc9ZE0wKEEwbmRxaH5WYV5FTFRKbHZWR0YmXmVkO3leSkw4YjxXXlBueHN4em44RlFt
fgp6Pi1CbU9yKzY/SmR+I2RXT2BNa24kIShmdSp6UkFoI1FsRSV2cz1jUHJXdk1gWldqZVcqKEpX
d1RRci1ePHU9QDEKemFaXmcpSUtAdFZPVEF1U2RmfE12YFJpNUZHO0x2OzxfeTVDKHxjRiQpb0s7
OD88KkU+N1V7WnYqPjFQemwrdDY1Cnp6S3cpQFBQej1CPzR0dStjRHZucTBOa3IkdjhWdEQrcnFm
SVZIZ29nPUBGJiRYcnNHeiEtckY7UkQ5UTRAJn0mTwp6Q1dKJSkkYk5udU9lVHxlMDElSkl0MWdn
QjBLYlJCVlhmNl9lV30lST1lKER+KFAmZnkwN1gmV0l1KUkyd2ZkfTUKcnNre3ZJKkZuSGAwTn1P
IzZsR3JseSNHNEBIXlFqc1Y2cVliMDAwMDBOa3ZYWHUwbWpmeD0mYFIKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wYW5lRmlsdGVyQnV0dG9u
cy5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wYW5lRmls
dGVyQnV0dG9ucy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOGQ4NGUzMjRi
MTA3ODQ2YTMxOTljMzhjNTU3MmNhYzUxYTI5MTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxp
dGVyYWwgMzc3OAp6Y21WO3o0bjZVU1ApPGg7M0t8TGswMDBlMU5KTFRxMDAyYiowMDBwUDFeQHM2
aTtgaTswMDAwOWE3YkJtMDAwWFUKejAwMFhVMFJXbnU3eXRrWVBpYUYjUCo3LVpiWj5LTFoqVSs8
THFpfk5hJkttN1ktSW9kYy1veSlYSC0rXjdDcmFnCnpeZz5JQmZSc3liUVdYZHdRYkxQPjZwPHo+
QXFmeWxoI3tmYjY7Wih2TU1WU34kZUBTPWoqZnRnNjtVaDxpVkR+Vgp6PFJQTXRnUUpMdyVLUERh
cWlmY0BfdlgkMXdid3I5dG47MC0mai1LPTQzPGJVUThqPUpzWGB0UjtEZzcrI15LfkgKekshRk0q
Wn56YnB2dCVLMntVWlNZXzxsUypEPFolTHo1b0d1KCtkYXl6KWhSTEZkVD5mNTkmZ2hUbWdXRDBs
OypUCnpJNzxrQzZhWVlhanpYcFlLdD0oOG90UCQ1MEg2Y19WOVI0LTt7WkBDMEFNRzc9RjxSeG8l
b3IxMFJVVCtBciUzagp6a3BMaFFXciMhb1hnZElgJnNLXj4wOVlecDZsUDFySVJNeCMwNUN+Y1c9
SF9BdypiSi01RFQmWjJuK3gpUUhYXnAKejAwZXNnVjh8bVFjbVJaJTAyRF5AUzNMMTZ0YE8lYzAw
NE5Jdk9LdllJWW9oNjJyWTMzUzY0MGBEOSVZMkQtPD9pCnowJTRqIUYyWkA0ODhVJTE1OCg2NjAw
NXdvNiVwV3JeWmpfdjR6QUE1SGpjSXFVb0dtdDJMQj5yViZuZWgmI1ExaQp6MDA3fjFlJG9DY0ZT
OG5lSXxoSmx7LVAhQjFaWjlocG1xMClYMGlgSndFJj4kK0U/PiVfPGxTKk1XSytuKzFjZ2YKejxr
KDhZTFIoP1ZTQUc2eCFlNzh3e2NRUHVKcEF8ZDtKKUd7ZmloaXpNK0VyYiFwIXRjcjV3K2EzNH4o
WT04czRHCnp3K3NMTDluJkpqTm4qS0pEaXFeVTVeO2AxbnZDLUByNlAkIWt9MVV7KCpJPVEtekB0
QktIb0l9dXhkVTVkeXlAdQp6VTFKMEdPRDdPbWJpbV5HMDA4cDRaXjZfazJtXnA8Z1c9RDJ8TDtI
ak4xIUREZk0hWE9hUjJ+Ykw/a1gkJUNrU20KejJtazs/cG4pb3xLXnllSjclYWRCOUtpK0whMytG
Z0hpU1lYI0tKLWxMSkRNbjlDQmJPdGIjJSloUnZgWURxdF92CnpLcGl4fFFEfXlmYTFKaVFSayNq
NGExWiluMiVmPHh5bnpWPkxDNlJiVklrVXgwYitfK0JhUjNjblQ3WnYhQUp4Vwp6aXpGYiloIWp5
R09PWjg1RjthP0RBWFB7bUA7ITBfSWZxPEV4eyo3YDA1WEY3aFArMkhsITNCUUo9NkBmTCVGQ28K
ejhpWW9vMygjYkFGYEFEU3BxdFFndj5IOChIbGdSeHQ3czN9azNLYGtGdT4+LTJRJFFNRmZQVyFM
YXtoMzM2bz5YCnp1X0NNdHRIdjZ6UjsmWk5pUz1YOHYzQ1IjZmtuVXhIVXhKPEFZbVJzTkxXbCpQ
U3tBT0FSSHQjNSF3a2kyP0s7dAp6IVkzaz1zN3RnYXgpSiVyNy1CTHBoZ2U3fkJpMGcrNkU2Xlpo
KHA5VEJvY3szR0FGcl4wIWd1P1JNSGFDTSQmRmwKekJrMyV1bj4wdW9CYV9NNldOV2VxSWd+NlFF
NjljOW8jZXloR3ZwaU9BQFctYW9uazw3cjEoP2ZDe29JNU4qVSE0Cno8dXY2Nld0Y0tTUmltMHgt
S2UyZDVqQnJtTGFteztRbTt7bXMxcjFHbm1Oc2I3RC1FYHQpaTlGOGZYYDJfaTMtXwp6Ymg7N1Vs
XiN4KSZ7eHZTPXx8fDc9bVllMzM9TWBBZ1U1KHhDPmZnPTJOLTc9Y05uampPcnt5cml5Nm1NRmdH
I2wKem5DRj1mblF2OENEeisrbzZfTHNjbH1lUStsXlpIQVJIPj9fc0B8IyNScjZLTFJGQTElUSs9
KlJSV25vTHNSYDdVCnp0NXZGPFEwcjQwUSlqNj1zRTRYJnNCY3QxcTwmZmJpM1ZCMk92NnRAcSow
KTtVKm8qU0FQWnZ8dnZAMmFZWW5UMAp6YiU4YStDYjctZ2UwRDBrbkVmNVFpI0A4VHAqY2V7Tjs2
bHBRdUNCJUtMX0tPYXJtNWNQNl84SXI8ZTE3aXJ5Nk8KekRkSCZgclpofnNGPWJxOXMrTzBRU2dT
fkBRTDlKbXkqOTR4cj02eX5NWX4hMWZldH4oTisoPD1NYHdARDEpYitwCnoqO0MhODNhMXVMSnYj
TlNFfjt5Izg9PD5JY2ZXM0A/d0Zwd1VWeHJWWj5RZFF6MzJLSWVKfWt+e2NaWkVeK3lhPwp6MkQx
eiMySE9uSTcoQiVfYWM/e3dGVVE7UVFBMXRCS3RyV3JtMF8zUmdwcys/SmZxYntqWWJjUVh+dGFS
QjsjJHkKelpOe1N9MXx9Z1VPSEp4Yz93VjNmeHV6K21KNGAhRiRJWjttcVJyTnNISmQjIypEfmp1
PWJQNz8tP3Z+fGN2PnZCCnpzSjZJZU53Vlp4cmRqVGB5bCNiQklhI0d4UmEjeE1NeTtLI0NEeXlH
eVFkTVN4bFdUI3REZT9wIT81d1QkK29HdAp6OEw7S3AySFVRLVpNSj0zWEpRdjt4NWNpKj92dVRm
ZVkkOyh7WEdXX2h1SUZSOWE8ZkpiRl58NEkjeFF+biREYz0KektZaGpZbWd6NU5Ta0RtOCpmWm17
NlUhO1lYYE5HPig/QDMpWFNzOE9eTjVSeU9NPVRUbXAoMz04Xit6cHoycilDCnpePkpPe2RlWmZz
bzNvcTM/V28oWT9sJGdlP3VYbzslcnVgVm8+Pzw8KDhJXz47OEVxI0tNUzlnRmwqbmVlb3NTQgp6
Zm9IWW5CUUlrd2t5b3dQdSh6ZG1zYHB7PDdlNGtyYS1aV3E8MipPc0dUdkVWJXMwVGQkaFhUKyEq
OEJuaDJLTWUKekJtWlJvZGpIVj9yK181Xlg5SjBXTDRqS1dgfWxmJUEtfDQ0SUBATFR2ZjFySGpH
KHplNit3QEp0JUJ2anRzIVgwCno/MnhTP192ZV8tazxNdWpnOzBMeiozYnVHPTMkRyZlaGVwdGhs
TiokS2FPeVNTUV5uV21vPDBNKyhVRVVNRVhSUQp6TUJiWmNGOzYrS0VsTT5pS0JfS2lKbFokOUdg
Y149RUBvTkcpbVdXYU5vLTNUSVc4KSRIZzBVYi1+OD9LaHZKPiQKejMqJm5pbUBtaihhQ3hFNSF0
e2x3N081XjBFSU83ek9vJmM2bDwrfGlEeVNCV0NHcnpAQzV7U3QhWDNoQUF9YFQ0CnooVExiWFRx
Kyg7QDw9TDhkWG5zc3lmdHx3I1dTVFc8KyszPnNnUyUoNE5UcGVJLVZBcWJ8N3NzSnZ6TkhnT1pW
dQp6YVlDdmdPX1Ixfj5TeUw9Y0ZVfH5nfGh5fFppfX1zOStkfmxZcU9CNzF6OVokd25DPXBSOVl6
NERoSU0+V21qZ3UKeiY1Nm82bWFDcEMmRiMjeSVHOzFQb2JSOWk/R25OZztnWXRjaEQlcDE5YSFl
UXRaRiYzSmFLdjMzZ1o8OER+NDdFCnp0VVMxaXdrbURhUHBqPSRtIyUpakNWRVk0Zm5MR05nMkEt
YFl3SFZEM2d2fTs+KWhBdlR+QW1xUz5McmBgaTdrdwp6Sns1X0l0YHlyQm1sYzI1REJPN0U4OzVW
b3puUj5XdzVoQWF4biQyfihxYCVBLVl1UzY0d2tCeT05ZG1gNGNYZVgKejRjfUlAP2UrRlcrYkBe
UkRCSFYod25NcTJ6ZFgzU1d2OXVgJXt4Qy1xKlV9JmBjeVhWKCVyUlQqWjZNSD9pK2kmCnpfQjhD
KCtnclQle1hXVVErZkBOb1AxUj1BVyYyNnt2LWR4KWlLXi1ObWl1ajh0eGohbT9aKlNzMU57ZGg0
en0wMQp6KVlUbypKeWNTVSkrXzVyNCN5dzl7KztpNEVlJHBlUmdJais7djtaR2RGMUskM0UlZX40
TGFJKGpDLXUlMmgkJlIKejljTFhjWUNAWHdubnMmYm4pX1F+VGU/cm9LR0R8ZC1nXjg7K2FDe3tH
KDFeKE83bTM3WTEtKzYpMDFjTiZ5MWF3CnpvcWN7VGBQXlhKcVBCYklXNnN9ZDR7el9mNU9tP3ZN
Z05RRUpHP3YyVD1LWWReME0zSTZJWnhibnkpJXZaUiZMRAp6SnBQbEBQc2g4UXlQQkBLVHgrQFJk
Y0MhS1g3fWtFbztTfGpedTJsVTdYUX1PbztmfDt6NExsK19yPkAxLXhsM3wKemF3cS1IJWUmY2tD
K0BBaFByUDZCSzx6PTxMKjBrZktVQENYKnplcWJZUVQ0KF5VPlQjX1hkVDcmO0Y3MWp9Sm95Cnpr
Q342bGg3RUA2bztXQF5JcFJOWntwdEx0TChnUS1DWX40bXFXO1VTN1p4dm1ffEB5eiZlNTNCcF9s
VFBsZlB8egp6clR5eF8+bHZAeCM9XiFQelI3cXFGPCRnbWB8WkpaKzs8KUNxdSZvdDxhezgxREYw
fnJ2R3I1WHJ+OHVgbGF2MWgKejFETnl0Vj4yej0wMDAwV1ZAT2c+MDA0Uj0wMDRsNDAwODtfMDA0
bUwwMDRDYDAwOFA+MDAyNmUwMDArbmwzJkZ9CnowMDBCK05rbDxaYy1waj5MMV4xJTZ2ektrdGRR
RUNxSWtCfnRmUUQzbDMtSFY7TEZIfUBrfVVXaFVJOFRMdHFUTgp6ZihlQns5TjRBZ3ZjZHU7dzE8
S3I5Jn0oKEFjcXszISh4UFNGM1VtUypjVmQ8R2x8V3pHX0E4aTw8ZlptYzlEYlkKeip0TyF5Pzs/
RnFwUG9NYmM8PEJ5aTZWcmNVdUhCSzgzNGxvMjZZVms0IzI8RllWe0tVVWpnOEJpYzB9RjJrPC05
CnpQYmReYys0bERLdFRRdCtIYElySXdDKFRqU0E5TztPU3wxWmVSX0tPMD5DUShiKUJHbUl5eVEh
TDhIR21GZn0hJAp6OHhSMlNkYzh2YzF+YHM7c1Vye29BT0sjb0VQRztUY3N3NEAoX1NLRnYpUUY/
YkFyS093OX5iRXktc01GcnJNMX4KelFUJG1eNms7P1F1UnQ5aDkpMWdlQEh7V3x2aEd8aTdpYjVE
VyFaT15QJUBkIWgwb18+NGk2OTQyX1oqYSVIbTc2Cnora0hRaSR5e2h6ZkZLQzlQJCo9V28xMSRj
NHU/O2d1ZUg4KEkyQGlWbSZATT5mPjZeRVRhdSgmQVBfTCphPThAJQp6YSttNCVkN2w0WGxCQWx8
WVZBMWJ2VjImVVVDdn1PN2pDekVnYCVrMlQ3YS1EeVIycDVYMHRnYTJ0c1hWWEo7YFUKemtLZ1B4
RkF8QnxKdzg2MzYkR0pYSGspSHdWcTJ9JmR5KnY4YyVFTWU7TUVBXi1pS25veDJKUmkoK2QhLVU/
UCNvCnotRDBzZ3lTMjVZOE9TeGpYYSlpUmhFfDZQQ2ckX2BSdyM7RUN4amZTZkllPnJncmNiTDBE
UlVJOyVgRjhGQ1BIMgp6OTE0WE4wWHo/ZiF6WWBZbj5QIUVnMXVOUSZJKkUxcWlIKFUqcUhyKHxG
YEdvPWEkQyg5TEslaC1RQ15rMW1eN1EKej82Kks1dS07VGtVSH1zdmZHaCZBSDtxcEx7Q1h1KitH
UnxgKkN8NlBtQzd4ZiV8LSkmJjFSITNtQzd4eDhQbzdKCnpmVjVfYUQya0k3aV5UdXs3S19Db2lz
SXhvRzZuJDlETUwhNzVedUJGMkduJkFsdTlNT1pUWWw8KGM8R2NFfHlORwp6TjU7cDs0ZTR9eGd5
WG9GbVF2RTxHbnFecWlBM1UjKTlEO2FCb2NRX0Nld3pOUXF0bSFNeCYyWHNnJT5AYXQpPFkKekRR
N2VxZWJnMW9IQjUyMlR1JXl4ZzM7eDJKcHJLVHNCO3ZEIXxgbDtkOzdNLTtkcktKPnxgP2VDWkVx
Z0p+JWt8CnpCQT9HY1A5fkZZSV9AYncrQSlBMWA9UzA2TUw5QVdqZVV1fHUoMHFhZkNwVlMrRSgq
O0pXdChqY1ZGYWdGY14lZwp6Vm9tcWh5XjZaN1BfbyhWQW9ec1lDPmo4TzVDViQyZWl1LSQqSjxA
RGIpfFdlV3RuTG5HWXEzJD5rfnFDJWFrOEoKel40PFRGVyU9IyZeekBCcDwqSl9scTwrI2JSanJ+
WnEqZHYqTzhpX2RSfFFiX2B+OVBgRWRRbDsmNGNPQDAwX2V7Cnp6OXZ9ai05SkErWikpQkBTe2ch
VFk7MF8jLShCKGAwOU5OOzJOd1lURFZOSkBAcCR9VFpFZnZeUEU4QGJ5MU1GSQpzVDNZKEx1VGM3
STY5NjhuTjRATTEwMn1gZzBOMlg5X3BRbH5yVF9vezA3KnFvTTZOPCRmfDROKFp+eT1SCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcGFuZUdy
b3dIYW5kbGVMaW5lLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL3BhbmVHcm93SGFuZGxlTGluZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg3Y2MyYzQ2Y2RhOTliYzY0NmU2NzM0ZmI4YjNmZDMzNjM4Mzg4MWEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNt
Vj9kMDAwMDEKCmxpdGVyYWwgNjkKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF45Ni0jLSEyfjM4
a301PWk2cHlFaVYrZTxBQHtBczQyOEsxVXllRV9ZClNUdXVqeUdrQ2lDeHZYPGFYYVdGQFRASTF9
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
cGFuZVJlZnJlc2hCdXR0b25zLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3BhbmVSZWZyZXNoQnV0dG9ucy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU4M2RmZDhhZDcwYjBkNjNkZTJlOGZhYzliMWE5YmM0ZGMxMzJlZWYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTI1Nwp6Y21WPEYxUXo+PVApPGg7M0t8TGswMDBlMU5K
TFRxMDAyYiowMDBwUDFeQHM2aTtgaTswMDAwUGJWWFFuUSpVTjsKemNWVGo2MDZ9RExWcjN2blpE
RDYrUWV8T2VkMnp7UUpPQlUkaSVDUjVSQ3dDN1NsdnFfUn18MFcla0wmTlVBNGoqCnojam0pISpv
cz1QbTBGYWdwQHA/amVEYk05S35QKiVmKTk8bVl0ZDVKWk16YCY7OXVhfHgtOHBQdCVCbDFFQmN9
bwp6TCNYJnNZfUxpWndyYlJuT24reSV3X0lqdHFVJDZWNClAR0djVFVkei1TYWgoV0xZKlBZb3cq
NiswMTZNMUZXNSUKelczaWFCajx4XnkmPkI2SDlZa3N3QUdGVClwNXlWS2xhckd5JTxxRG4ye0tt
IzlmRSQ1a19uMD1OIU87UXJ7OEY0CnpYLVEqMFlJck94RVFBe3k4PXZSbzxUVVFAP314Qi1LPT5z
SDZqeSRKelE9NHo/eXhqOEckP0BKVyk8fCtiRylJbwp6cj4zU1JtR25CRCZnVExrezJjMDg5UHds
ez0oaz5FV283TUpeJGctMzFiNilpUS15SFRCdl53aEtaREdWZUdndDAKekRTcGBJPTRTODQjKWJ6
VEM5JlU+aTs5WVpHY3orazc4ZSkkUiMjV1EpemJrYFBNSXd4byFKWldzTyUxY2VnZ1NHCnotKVNB
JjtjJVNtZmBTODY5X1JxMih7cE5Tcy1wYiNseCM4R2ZjKFopLURpN3krdXF2UmBndFQwUUZQbndP
M0U+dgp6b3Q7VVdvMH1CP3F7NHVBbENzYVotNjwoNDY0UHlCbXdUYVotUzdianBPOWgjVnt2aEA5
SmwpKDUlRVQyczxYNTYKekhVVUNsT2lXQzsqVmZrRkNMJigjc2RfXzkhWWFGT2xpZFd5e1FQeyQ7
bzsjc004c2RsSHVfeSVQbC1tTzF2Sm1pCnomNlU+SCk7PElLbjRhdEY+LXxQUysxPWUkYmRRZ1o3
Z1NZTXtTNVhnSjtRcl5FUnJyOVZ3S1hjVGJgUGxEJDMyeAp6b2tSdEUhYkNwOXB4YEQ9blZGZVZV
MHZNfDkxek1PTWdkN3JQblRmMEdGTWt1JnV+Qn1obHFkPlBrUyFQZEZvfUAKekUjcDBOVVM4Z0dk
M3BJMDc3Y2ZWM00wcD5nYW8kcjY2Ymc8eGF8OEhAJl5WbWRkaXZnXzRTJVdtT1RjREdRIzAtCnpn
R0xYZmA+cmwxaDxFQWU9dHVAfkh2el5mVG1Db14ySFJ7bHIyX1R6XmkrPEZqUXF4eStZX09pPzFw
WWlJRiVzTQp6RWR6ajBGWTc1djFGMHdNPyhTQVBNWFN+TkFwcyt9Kkc8cURNbmI4KnlgOCNJKTh5
cGpFZHF3RzZKSnROYSkoMGMKekdPQDRhe1QmQDApSW0hWWl7JXlyaDY3Tl4hcExffkJkT2NicVZ6
c1ElKWJiUUxKPU40ViNPKmVFMy1sTjVidk1JCno+MWd3Z2tCez55SDtgeFc5RCh4cW1EbFYyY1dZ
fWElSiMrQkteNUlAeDcjdjBJe0xgdEBrRiRHb1EjWiZLYXVkUwp6cVowbGgrJnM8Wnl9aTk1Rz5t
XkU5M3cpMUI2R1V8eERCJUohRGB0cHB7UUtmXiVSdH1kJTw5XmRVJHlGOG9ZJnIKelZKMUVoMilJ
YXd1KERtblEqaWlpV0BsJFRlU0xqUyhubndyNSNRQy08c2V5TVZjfUpEJWV9cTVVJDNtSlIxT1Ji
Cnp4UyZzQmZSUyM9QEFxZXV0Z1dyaDl4dWBBZFd4XzwxYlJ5KXJkYUxnUnBNMVdNY0BPSjZJRVUz
SV9TUSpVJn5XKQp6cXdifXByRVFfamtCSz9zO05hamMtbWVtTUJqRTxLdiRGPztlSmAxZVlGbDg5
YjBFJEo0Q0tBJl43OFUyS0gmNkgKentnNE99Wn54PCFWJSY2PzBCQ0F6ZEp+fWgjbHBhKjRoTlVa
SEs8Q2k+aEJ6XzQ/PGdNWTNifDl7ekBoe2VVMU5oCnprZjFAaUJEfU0rXlgxc3Mqc3Bfd2dQe2F7
QzdiKkVgLV9xNktTKE1sTmduakUqVVJRYWpvKDMhe3U1dlRLbyNeXwpUNGFhTE8wMDAwME5rdlhY
dTBtamZpVUA3KQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3BhbmVTZXR0aW5nc0J1dHRvbnMucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvcGFuZVNldHRpbmdzQnV0dG9ucy5wbmcKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDEyODhiODkwNjMxMmU0NDUzZTA1YzJiMjNjNGM2MTU0Mzc5ZTEw
NzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTEyMgp6Y21WLW8xZkJiZFApPGg7
M0t8TGswMDBlMU5KTFRxMDAyYiowMDBwUDFeQHM2aTtgaTswMDAwUGJWWFFuUSpVTjsKemNWVGo2
MDZ9RExWcjN2blpERDYrUWV8T2VkMnp7UUpPQlUkMVc4MGVSOU01Y1M2QGd8VkhCVURxM0spQklZ
RVVVCnpycGBvWSk1O0xoa2NpQzJCNFIhaXpDP3V5V2lyY3dtRWtKSTVXeUtmPTBoVU9eYEp1cEN0
QGZQZilEenJGWiRxPAp6aD5ETVBlJmFpRnlNQX1PKlM1aXJiTUFNfXtrWjQxXlhMMGFDbnFQU1dG
YSMlR282cV8kV0lgIS0jTEBYYmItKUIKemMkZ3FPQkhTZmRPdnhtTGUmKlRQKjszTGs2Qzg9YSFv
cT9iYHt3NTZ4PUNJbFNmaGRiS2teNz1SOyVAJVJ4bFl0Cno3N3t1STNZOWpVcX5za1A5c05WZD1I
fSkjJGRRcWUrWjdjUkxqWks4RWYlbUpfTztuO0g0O0xLZ21lPTYxZV97Ywp6RUxlKytpPzdROXY4
MU1eejkzb04pend3YXF6SnVTKmVxdXVXbnlCWXB8WX1hen59UWxuM3xlOyFsWGRROGZAXjwKekxr
anM7aWhxe19EbztzQ2A5UU0xd1lCdj1sT3B0YlZKblo5RXp5MHw4SXFRa19MN09uJmR6Uj0+QjEr
JjJyMDtkCnpzO2E2bE9oaiNNWk5FJjFQcHBqNUFmK2ZoSi13SFMkalp1a0ZWbHJqa3MocUQ9Zn1z
I2RsZS1rMSReTFpGakgjZwp6PUhAfml5Y1hhQ1VuOFY2SCNjOVRafkNxJTg3YmZjVSEkMilJNk9S
aml8V2RVO0xUPzluX3d7NTQ/eEVuWjFDWTgKenFuOHgpall1VG9iLVVmODIpP2VhRS0qaG9LTWc+
fjhmQF80OSVDUj1vUE5MbXZFNlBUTGgkc2gxTjY8NDBDY1J1CnoxfExPXyhNXmdoQmRQJmUyOG5s
Q1JPPkE9UVp6RStJVXZnKnloQ082UFB2OT40Tl57SiNPbXMqMmhoa015d2ptdAp6PihFNj9QZnQl
MStufiF4KzF1T21hVFk9MVNxfnxwUTBPKVBgX05eaTkzQ0Q5SWcyM2l0Y1I0JiZkI1UmPytnN0QK
ekRjanJJLSNDalBAaGx9fVdvMmEkOzJgTk5ASngqNUxaTD9rWEZ1Kms+Kzk9JUNAVjsxdVRoZSt2
OVUxK2FGQzZTCnpqaHw1XzBDV3pWe2tSV3BaRWVrPHRSVjMkQlZ+RGNJU2c9KzdLYFByQz07ajlx
ayojQF9vMjE1d1Z4O31OWVFKZwp6am4/TXpjcEJuMFRLSz9NQG0+TDtTNGdjIT5qP3dgWlNmaXtl
Qmk2LUJRQzs+a2tYeks0dUB8TGFTITcpVEtLQDEKenZ1SkU9P0NRYjYhNmFuTmt4V1BFUn4kVE5q
OU0yeWhEUzJ9MjAzYG43X3w8Y3Z5NWM9cmpIeXZYTisxR0tFXzhmCnpOYFItJSgkZGw9Q0lVSzdB
JDZKUDlteXlHbzt0TTBHIXBAeHJ4MkhrKFVGVzI7SGs1P3hjR3lLZlgtNyRRNmAyKwp6aUkmM3R7
ezg/YWpgfkU0SEROMF88MXlidyZrOy08XkAkZDEhc2dPKnFJRWJOU0NxJG1sKSYhcFpXdDNzZVdK
eDAKelk+RzBgQipwMTtSJXIjcVMlQUxyUmx1Z1E+QURjJjA7ZFgkdmpCYkx3fTN9dygqJEt+RGVh
cnYtcm52S0wqVmFHCnpwUilqYzxNe2FhN3I7RnZQS05NPnV6PnQtQ2l8OSpEfUR8a0tZPWh+LTxf
UXVlfEw4YGh7M0o3Qm11Qnt6MX0tQwpvbmdeMGZOfEk0UjJvTkYoIzMtVGM0K1U4UzU4VVg/JF5a
WlcwNypxb002TjwkZih0ZWU5c21GVQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3BvcG92ZXJBcnJvd3MucG5nIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcG9wb3ZlckFycm93cy5wbmcKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGExZmM3NjY2OGU0YWVjNmJhMzZjMjZmNzQyZDgyMTQzYmQ0MjRk
OTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgNTQ2CnpjbVYrLTBeUitJUCk8aDsz
S3xMazAwMGUxTkpMVHEwMDB2SjAwMnd+MV5AczZrQkUlITAwMDBQYlZYUW5RKlVOOwp6Y1ZUajYw
Nn1ETFZyM3ZuWkRENitRZXxPZWQyentRSk9CVXojN1JVIVI5Sj1XKmc7RmZGY2JqYk9ifl9fNThY
aVUKenh7Ryt4ZT16KDVBXyFoWVEyJkQkNXFBPDRgfl5EPTIwT19QVzlZbSVfajR2PTs+RSt9ViY5
Z09iV080KD98fnFGCnpATXhRc2syWlp4bj0qekImVXVwUCRndnpGIzBwZWNSSDx6NSFWLSY+biQ0
VHokPmk7JC1NJX1HeDY3Zn05UXlnYAp6ZXtud0d2KVRLJTRzXmola1cydE9vJT1IdFQhbT5ONktL
UCVrUGI5cVBMS0BAZj1wbCV6S3t5MCZhQiZnVjJlaDcKelk7aDYtaXlPY3okS2JneTJ2RG5hZGpq
MipVP0pjI2wpYCpLOWhBWGJ6JSg+cVI/RyV3QXFQeD9QKHU+Ykx5bmpWCnohVnNpfkpUTCk5KSQw
QnBFY001RFU7PG4tQEJkRzRyeVI/JUtnWENId2g1eHRYan50YDVKZHRfcn5PWUReVD9uJQp6cmdv
cmY+WXlPWjFiSmZzKSQzUD5JPi14SzF2ejdKdGstSDYyUjZ0RFZeT3JaR2FQb0YoM2sqPXQzY2x5
VTxFQDsKeiF3N35KWjg2VFJXaVNYY2Z4KHkjTH00bThVJm1xK0IqUExeJFlsfT96Nl5XNCQ0ZCYz
YVdUdUYwR1heMjNYcks0CnpqME1eOV5Nd0kzN3pXZzBwYGEweUFXVWp5Z2A9PzFzUVYmKmtRN2p1
MCZTbyFHWCZDTnAtPXxIS3EraUlldHlNMwprMn1TYDRqNTcpLSE2K2NlVSRYfmEwKDN3IVF+Jj9+
MDcqcW9NNk48JGc4Z0ZPJmowYGIKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9wb3BvdmVyQmFja2dyb3VuZC5wbmcgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wb3BvdmVyQmFja2dyb3VuZC5wbmcKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOGZjOTkwODBjYjJhOTgxM2JmMTI0N2Q2ODc2N2E1
ZGQwMGVkNzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJp
bmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjIzMQp6Y21WO28ydVN5
ZFApPGg7M0t8TGswMDBlMU5KTFRxMDAzekswMDN6UzFeQHM2SWY0eTMwMDAwUGJWWFFuUSpVTjsK
emNWVGo2MDZ9RExWcjN2blpERDYrUWV8T2VkMnp7UUpPQlUpU3hIMWVSQ3dDJG96SUlMUlM/SkRk
KTt4OXRoI35LCnoyKnd+V2t3Z0BkUDV5KkxnWks7YTVKOGF5Njl8REUjRzNAWGhgMDVVcHFHRi1E
NSMoKEt7Zz9YOzdMJFNAUXtTeQp6TSlFXzw0PUBgdCQhMiVAKmAxdj5vd3hPPj5oPClAXnZxUGpX
NGRSMVhRdTFaLT5RMFZoQXlwb1lnK1k+KitGbnAKektSTFh3ITBKQnZ6ZC1fRUpNQT1HIUV3Nko7
TXFWJitwMXlkaWpLbl51ZSo0MGJtUGojcHhGfHlaIyZfOS1gXmw4CnpJc2piVjZsSUMkRXBqflA3
JmFfajB1YmJROX5rT3licHNYeCNAKilyanFeVUdLIWdDJDAwMiFXUDFoS2JDNnI8cgp6JnJ1LUom
a3pEaDZPU2Z2OXxCI01rT3k3KWtieyVKZU9vNG49QE5pXkQjMzxBX05uflVZZEZmSTVafUlVYU1U
OFYKemp5UnlRKGc+SmJEZW0oe14ldyplQ3I5LUhtZTA5R3JNVFAwaytqYW9nYCVCcHc4RCE2RG1J
UkNqT1VTfnV3TGRTCnpEaWA/X1Yren40MDQ5R2wkWktQdT8lUipzUkZIQURPK35QSjUlUkQrZ29V
eGhhZGghOWFnR1pDMXVCVSVYUUVWTgp6MDllS1lSNUwyVVVXR2E9JSg7Iz9QRlR8cDVjZkZseXk8
XnZGO2hocHBhfEg7ZmNlemI+KWVGRmZkRDFXYl5gZFcKelNwV29xUWswcnZoSSg4amBJTTg3JGF5
cCNYdWJsWUV8OTIjMDI8QjA9UHRyWDNYY1hUJkMlaV5CcXdQRVIwS1I/Cnp1emNaPDNVfDdMSW1q
Mzg1PHAyMW9UUSl9P0VxN1NMTCZoI00wUVQldGljc1FgTXxpdEp3Xzklcyp7cEA+YWhoZAp6Y3tw
bzJBcjcrUUYpa1NHZ0IzR01aXkg8NFFSfXNlYUkqY1M+M0FwfEJrNVM4Mkc4Y3dGYEpHWD45YEdD
WGpyYXUKel5PVXl+a0NgN3ZkbFVkRUN+ZzU2LT97VX1fNTFnfnYzPD4mJERkb1ZWKVFBa3dIWHZU
KjRwSVhle2NSZEokPm5xCnpnOXBFekkmJFFQKTlLVUtUSHQmaylIcT8zb1hBcV5hTjQ3cyRPOSVI
NGAqWClZVnlza1RlckwmTWRrckQ7TVF5PQp6Y2E5KGJeXjVKPi1+VEd6b29TOHYhZXt+YDBZYSNT
KjgzPCgyRk8xY3B5bEpeVl41d3FAJWUjT3N+KntgaFJpTnIKenkhelk1amtgWCZjSjJDSz4yOEF3
c3RGViZfZHptQDNkJGZBbyhwVTIqcylKYDRJYGs7dmh6TkFibj4wZDQ/dkVfCnp7REBZdGhPeFMh
aDxRO0NZdVViaXVScHRLKTRHP2A1WmxEVykzNUg/XlU1PT1xQTRRJD1LRj8jZ2hZS3xyIytMYAp6
MlkycyZgR3I5JDQkND98eyhKWW5fSSNfVmgzMUxXO3hiIUZvRH5PbUdQYHUkeCtnWChGfH5IPnN4
NSQkQXBmeEAKej40c1QkWW9nLTIzdTwoOTxTe3slUiFfQEUjdS1hdTIzVHomQSNzMUA7fHFEKDch
d1BrYmR0Q3ZVUVVFTWpZTyhOCno0NS1TMmBkWnZAdTdxSnVRTjszPnVWQiFlIWEpLWk5fkFuOzs3
SH4zbzk2blMlMU19XzN7dlpoLVNhUT8/S0R8RAp6UEAmNUFWbz5yRXFtX2pEKCN5YVE+aFRvfilO
ZDJTY3NYNHUjP1B9dT0xSV5DTiNQSnlJQkAoTEcqOXYrRypNRXgKemxHXmZ7VkplOEs8cG1QJU45
dzI1c05ZU1NaPV4qQCE4c31UMHlrfTVBKT14I189PlozcngrNzIwWXloNFVFPVNoCnpsX1dyX1Em
IXRiNTxvUXBXZHViMTBtXmJ0QURIUjNiVlY3eGZoNSlrTilpKURWZ2dBWmkzdWN1QnFvcj0xZD4x
IQp6NkcmbkxOZyM7e0IhTUkqa2ktTyVLb2FZN05MSmp+U150UVZgY3o0eGpHOElXYlgmUyY7ZUly
b2VnbT1ne2J6XzUKenF3V0dQITEhUmVfYTNqVGFJZ1phNnI1NmlHNjZzIUZqZ1MzQVh4O01FZXB2
OFVLcylAYH5xa0QtSVMyNnVqN2VXCnpoeTJ6fjNHVXVBVGcocUJYKHUtc01uUGJTXyRyWFhtNHFw
NTVrI1p0V2BMRmA4dUdqR2lZKyR4UFF7aUcwPzJAeAp6Q3QrMkpndUMhPyRFbyZNSW1yQH1TNnt+
eUY8ZVFJcyN2fV4lcXN5P2wwYyMlQzVxU2NrNW0lMTQ1U3BecDJqOWcKekdBfj5mP3pyI3M1cCRr
Ji0hWD0lQklzOEEjcG16ZEZ9fjViYjQzcy0pbzlGS1FIJEZoVWA/e3hVYzIrbmpva2kwCnp2KHdY
O2VpdVlhb2pkcFVOd3ZAb3JVQHUxYytPLVBsQjA0X3t5fUNBQU8zenk1R21GMiE7SXF9UEhxQ0JW
UndpMAp6d0w1P3NpUkE1Z1ItUVdiPHA9QjZ1aWlTV2ZLSCEyZXwqRCt3PzBsY0ZSTyglSkBkLW5T
UmBUT0VuOE1lN0VuXzUKemN6eFRwX2RkSU5fND10ezFlQmUzY0soP2s5S1ZFQWN4eyo5UCVwY0RX
TEhWISFpQ0cxQ01Nb0phT1RZVUFCUEZoCnoqfFFnYSVGYTdHZXw0YGQ1MnMlZVMlT0RTeE8yRE41
SjxKdyZLfmN+JS1uMW9JYHJLeXYkSnoyU0ZjX2ZqZzVeeQp6OGJ4TWcoNz8+aSZFSDdqezUoMU5e
YHw+X2VFM2F6LXY2a0QpXlMpdkU2eGdwI2N+cWxkfHhqPXgzT2FFPGcyXncKemRlbE5edlNuJjha
KlAtMV5IIUAheEspVEtPPW1rSDZvc3p1I2YzTD4raWdPUCkkPX1kMj5eRTlHdXl0Y3tDeWorCnpf
NWkoSlp9WThGQ1oycmtacUViOVFCYWBQLWUzejtzRT5FPzEqakkkYEc8KUwrail5bTNYKVJ3Pm9a
SUJuOGpkfgp6MFRrNCsqJDJySVlqd1Vob2c1WVVMVTE9I2dqS2owQ2BkSiZmYFItQUxkXktrbnlE
b0JxJWJnP0NjdCVzV0MyQWEKejBtSnc4NHFEeUNPY2c8XnlLV0N9PXd5N29nQTQodTRtbjg/VmI5
bWU4M1BraylqXk9mO1QoJkFmYERsVTdOPSl9Cno/cUNpSSV+OH0+LTxZeTI2QTxoM2d5YmFjMGlf
RyE0SnRaeylnVDImY2VxI3hESSNvfXUoLTtwRUdKPjBUd29CUwp6O18zI0tnWCVEIXZXeSgxb2Fu
KD5fVGQ3dTckaHZATDctZCh4ZFNSWmVCckhecC13VEpXailnbyNRPjVaPkxpVWoKekFLfl5AO19q
PU88ZUBWODJ+IXFsVWxFbV5FZWxDODlMI00mKF5kelI5XkB1UGwqfTlgKU43UTI2c2peeFhfenx1
Cnoxcm0xRVElYlJjPy1TJlI1UXQ+a3Z6bWdiOFd7SCY/KSROd1FVKyN+V3dxYEJqSSFsPT08Q31t
UHJlR0V5NXtPQgp6MUV3QUR3diQoPT8kWkRDQmZRSDByJUswMyZ4JmR3KjNQa2QqY0BLUXtzVDwp
eXJ8UT9hUkM0VDAwMm92UERITGsKRlYxZyhqR1UpJlMKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wcm9maWxlR3JvdXBJY29uLnBuZyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Byb2ZpbGVHcm91cEljb24u
cG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjVkZTI0ZmY0ZDYzMWEzY2Y0ZDA0
NzhhZmEwMGNlOWZhNjQwOGMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDE0ODYK
emNtVjs8MXVePUdQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUJXMDAxQmUxXkBzNmI5I0Y4MDAwMFdW
QE9nPjAwMz42CnowMDQ4MjAwODJ1MDA0QFkwMDRWejAwN2JjMDAxKkUwMDBgYDNWb0t2MDAwMDlh
N2JCbTAwMFhVMDAwWFUwUldudQp6N3l0a1RSN3BmWlI5TTVzUzZncFhSVE4leD1+I3BIKGlaOCg1
P1VKRCZWM2p2SzNGZjltPjVrWDUyNnFGMVRqNEwKelZFaExyXyske0BQIW1tdiMpdSpxRlFeMClC
NTFeUEUqKk5BJlVBKUcrYkw+R3RPP28rWEsmWTlkKyphVFpEcG9fCnp4fkNeK3BNQ2IoWXByajY+
KVgzdERKQUAkJjEqV1BRaTw+VlB3dyNDUWRgXkcqNEVZcDYxP2MzU0lfZldMVWBPUgp6U0IoKFRn
VT1wND94OHNAN3V+XjI/QFMtPlp1NlpCVD5RPDwldU0+K191MGQlOTU0KyhiUEckP3pqcEI4aVIr
MW8KejVTM0VVST1aaGVMMVJLZmZCJnclWWErMSFgQ1N9Ji0tQ1V2dm9ve3RZJkh1KjIpLX1eezg7
RWAkIy02cUBBJSNsCnolWDJMP00qWFhuI1lWfF4tRURQbi07VjdGcztwaHAwVGNQX2hZbFY0SHpO
UD1xaG93VzR7RndROzZ8RGQpKyluJQp6KE44MD14VWs1bVV+fUl6MmJAdXh2XldocmA8QXVEPjY2
dHVAV2E1by01KVBwZ3dDeilXelFXUW4rWjwoVj8lfCkKejFobHRyPTNGdXdwZDhwOXNuSmVpTnd+
MlYoQU9KNkt1QylUWCZ8PV4+Yn1xQGZiRTBAZ2dtOGJUP2tOPXJjRip4CnptJVZlai1CMnR9STFt
N3NuITA0QzFzbitVTW1zVGJWTE1Oc1NMTUstWEx7XkBCQyFQVmMjbG9FTD9RI1JTZzRGfQp6JDwm
X15qZGE/cVNBWWx5MCQ3QHN0bGp9Szslb3puTEQmYHheN3pPfFVURmkleEZUNkxKRlljQWEqQ3FT
MDZIfWMKemsjRztBVkZ7SXZmMFd7dEVnbGNza1BhbCRYZ3RoMGo3RWNPb0Q0WGJQR2dhOWZUSmQt
JGVEMXNUWjxCQyFEMGt0CnopZCtDVGFRZihJOV51OTRsTm1PYzltXnd9Nzg1UVMyfHl8fSNBQj9N
SUc+X1VyIVRQS2FLdyptMilrc2ZOJiF1ZAp6I1I3SkhUVXVzSylCPlo2bV85YHc+RVN0e1A+JmBi
XiNlTnBpV0FmPDE7dz07RnNoY29vRDxPfj5kfGJEQlIySS0KemA4TkIyU3ZaI35wck5ZQFpuWUI2
NCtYcEplRkcjXj03Nys3ckNnaCskI30laElqQ29oK1RAbj1qSG09ZDNUfkVzCnpwJFJKR0BAN15J
MzV9I0NReUpTfWM1S3tVZ2ojbTJ6fFcxMV47JiFZYTNAOCpEM3V3ZT5DRyo3RF94KnhPSUcyNAp6
dTQ4N2oqLVYoPmV3KkRFcmlxQkFQP2FqYHJqMSU1ckIqeUdOSGhpLUlWbWJUVjBOISRAJllkcUte
N0NsTm58P2IKejlJeHpIa3hNRnFXb0Y9PmB0MjhKWTIzKWpUJU1iUSVZWGIxOWoqNWBMYGppJTlT
RXExREheVkVFKystNlZ0aDl7CnpAej1zVXkhXzUjeFUyNFYqeEszI1B4YkFEdVlkZHc7YGpPKWEo
aFNBJFcoVH5RZX43KjUyPj1qazhfeXdQIU1aLQp6YUcyU2glTjAycUQhWlI5T3wjKT1BQUtCTkly
MWh2NVJQSD1iSXspMD5YMm5+STYpRytULU8jTnF1cEg3VEUjMyYKeiR0WG9fYmIjS0lnSmtAWlpA
PHlUeDUzZlZVJX1JbEpPLXVOVXQhYW80VnAoX15Rb2N8dll6OF81RGAhJFF9dnVtCno0UXFBLTxu
bCVFMmZCREVpdDVHUGR3OUdzXil0KzNeaylaP1AlS1R0e05lKDx3RUg9bWtmSXRURypMVGludys3
Qwp6NFpEUmQkPmwwaDw3WUVUYztmeShjPWR4TGFBNUJYQGIod1NwKlRHV1RROz88MHw3O0ElPWRf
MCk0QlhiTUxnc3wKekNObThBQGQrLSlWNCZNMyp9Jio5R31reDY5VUpPa1hSSD92eSEjZTMpaTx6
bENsQGdNYE5+M3NsYjBuX21jYnBzCnp6VGUrZmNIKlVlUSRyKGt3UWI9ITRAY3doUCRiVXBqa0Z7
QWN6cnlVJX5qQldITi1AJmhQKFhHMn1ycDV2UXUhYAp6UTRRUDRsVjEpVXxNPGk/bSlrV3tmZGYr
U1RJR2lBVj5oVE91LVVFVzc9dW4hb2JBP0gtemt2UlhHPUArJSRnMSQKekxiU0AyZWYjI21mZXk1
O0ppVDdgKEgmOXV4WlA3VktIdXMwLWFtRWJUMCRnekszXlgxTkFjUSNGNVJTbW58YzRnCm92Tkd+
ajR0KUNnZDVYQkN1bTd6NTRVYkcxKlh6JnNWRV9PQzA3KnFvTTZOPCRmPUNMIUlSRjN2CgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcHJvZmls
ZUljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcHJv
ZmlsZUljb24ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTVjNzkxODgxZmJj
ZmNhMzlhYjgwNGE1OGVlZGVkY2E1NTkyNmVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDEyOTUKemNtVitxMUBRV2JQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUJXMDAxQmUxXkBzNmI5
I0Y4MDAwMFdWQE9nPjAwMz42CnowMDQ4MjAwODJ1MDA0QFkwMDRWejAwN2JjMDAxKkUwMDBgYDNW
b0t2MDAwMDlhN2JCbTAwMFhVMDAwWFUwUldudQp6N3l0a1NsfVNXRlI5TTUhbSs0Y0pSfldeYUY4
QFVUaCs7b3pgQHl5Pm0wRTBQN3pMIVk3Tj96N19RaXJAdChgaCgKejVkaUB+UyE0QH5zYW5nPkFX
TEVydkh9U3BBcCRXRmtoUzFLdDtPUXIofGEkeXVhfXQ3N2x3fDBJUCpeTztyKlRTCnpKbT1tP2B+
ZGo5TmNwYH4yMHEhYztubmJNQDRiX252TGhAdGN9STlrKHF+YWJwQStwJE9vO2pfSXF9biYjUTNP
cQp6cTltZHtNQ2wxfStyTFlVLStxOFI1NX5ucjkqVTJSJXB9aWpeMntZRmh9ailwNnVVZDNuNVpt
YlRWVSluNFNYRUIKejtxfFJ5P31wOz45OUUtJDk/anpNIXg9biFGb1RFcHJ9NXo0Nno8PWgjTkVZ
bEVaKF9fNH0jV3hgTSgrUDEtYGQ5CnpBO0lxfmozUE01S1dAenBoXmMqbnw2VWtsQFAqcVIxUEEm
anVnRX5CWkNwfkZ2aSsmZyl+LT1sSjRhejVHSXd+Twp6c01FcXw4SFVtOWhRWmBVeVhnd19NaT43
Mih9VVokaE4qJG5IOERXSndlPm0pWV9eV1RXRW53cT9MYExYVjc8V3cKem9uZVQ7LU1CVUhNb14m
dHc8fEowcDxHOUBtQ0hVOyl0PVRkQlEtPmRJdm94bHNiZU9wWUJaPSlYaSV3OHFvVFRQCnpeJURA
KVc3ak16b1Z9fntzbHMod28yMF9nb3BiUTJDcVNYMXk2dEtTdUJhK1JYR2IlRVVTTUZXUyV1Mi1K
ZVc8dAp6IURNV052QXV6VCt3fjNqPEU5SnFIOzFUIXZ7Zy1qSHI7TShVM1NiVStgSCklRVQtbipg
NVN8e2FjeihxTk1HPjsKekQzflUkc1Y8YmpHPDgpfksxKXAjKHtZOyZqV3xgNyE7PHNWZGhJIUFI
Um97cys1b1E0SWFnLURgK1FUZGMpbCRyCnptOSVTflNSNk1gT35HQHNQUiEycSVVPU5wK2Q1ayRJ
OFJLJEc8RXJAVj1PZ0lPcl9WSU1gXzdYRGZMQ0JHdGo4ZAp6NVYhLXNQeHJ+NmZVb1A2IW9feTts
RkBkdilGaVB1WmwwUk1yelUkNTYhN0w9U3E4Km8jWnk8MWhWeW4pbTZoaE8KeilYc2lBb0RMbHZl
TDZCMzYpeUVeKEEldmhZOWskNT5KTm9hT3t+Q3h1WH4pMVRXcSZwX3NmJCNGSDYwWWN6V2BaCnox
ZkNyNCM+Qlc/ejUjeGooOExfZitmN3JgSnJ8JE1WdFc/SC1RJjxtPEw8dyNONHZGd2Z5YypleEhA
VytaQHwwVgp6Yms3dGx3d280PWdVMUxVYG9KIXY5OEUkfGVHV15WVTNteVBeUkVtJT1JTyR5ciZH
UUdld3B4Zyh7WXk7WFo7NlcKellXSysjbk5ZVlhTejwjK0JRaT5VITA+UGZxUTgkdXBIcXV7YERx
Zl5MJXR0elRqZCtAWlpgKnU8S31SXz1hajVPCnoxfXtIKjlRKlJwKEElZWgjaW5CNVZZZFp0bXFv
cS1ld2pRdShAVz1CLVRFXkZ4M3dyeWM+SiZnN3glMCtva3YhQQp6MV9+NWVOWGtzV0h3VkFRbF8z
KmNMcV9AY2ZVa0QqI0p0QHQ3d1Y7VVEjYz5AazA8dVMtcVZWUnY/IUsoWnwpd24Kej0jJl41RnYh
ME5JYW98eFJRTUJHbihKQk89QjhRezxZJUJzUmtOJlFYUFlXZXM/MX5IbEdEZXFiTj80ZSZyTjBV
CnowZGd2MlByJjtZNlZKM2JadHMjQU5me2p1RWdRRk0mPig+YW9IfF9ZKlU2djJ2bn5eSCsjSmtI
IyZfKXZiYG4hbQp6PFFHd2JFQ1hWQE1YO0ZLN2ckVSFnMUkmWXVpTj4mZUAzcnU0Y3F2Qj07cFVl
SmA3b30rOG5hSmFWPHBPTWMpfisKej44KzJSWFcqNW4kZT1mZmkyJE40YlEpX1RgbVQpdTxveiVD
cFZKcWllKnZNMz5FNkBlP2w9R2QwMDJvdlBESExrCkZWMWxCJVolaENICgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcHJvZmlsZVNtYWxsSWNv
bi5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wcm9maWxl
U21hbGxJY29uLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkY2FjMmE1YWYy
N2E2NjNlNWMyNjNlNmJlNGQ3MmRlZWIwZTg2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0
ZXJhbCA1NjgKemNtVi04MD59TXtQKTxoOzNLfExrMDAwZTFOSkxUcTAwMG1HMDAwbU8xXkBzNkFN
XmlWMDAwMFdWQE9nPjAwNFI9CnowMDRsNDAwODtfMDA0bUwwMDRDYDAwOFA+MDAyNmUwMDArbmwz
JkZ9MDAwMDlhN2JCbTAwMFhVMDAwWFUwUldudQp6N3l0a1B6RFl6dVI1OzZ4bFM/bEhRNTQ3amNS
SEY7Q0RrQGN4QGRKSXFJNGs9QXFfU2JqZkomXk0zQzV1dVZPRCYKelZrNURZTkYlWGVzfT9qQlN8
SntaTXdGPldeXlNYe29pUm1tQ1U/JWNrTWxjXkpIdkVjJE5YSHYtUEdpV0dSOW0wCno3PTk2UHsj
RGFUbW04Yk9UYmolQ3MjTiZrYHVmYGJBQzh1dW5WRFN7PHxAcjQxSGRidF9RUXtiIVomOWNvWSVD
agp6dExDMHUpMDheaSU0S1p0Q0U8M3Q1YipqaSlFQzkhYVNHa1JBVWZLO0g0cVdlVyYkTDtycFRR
PktQSERxYURJSi0Kem10cW1tVEc4ZkFnV0NnSjA3QyprQUQpWXZrd3RHUGpEeXE+TXEpQUtwUHA8
MHl7PGdqVU1JO15lOVctI0AoKUp6CnopNyVCX15MYkk7SkVxNGN6NXlnVnotJHRZYlN7ZWxSWWZ8
Ukx0LT9KN0RYe1l6WEdUfWY+OFkpY1BtYE5pNkMzYQp6VUN9b2tldmJ6X1olX2l+KSVGcjcrIWVJ
IXspbWNiY1o4O1lePylPaiR5JCE2VEQ1RVlUdk9GaDwwa2c+Z3NQRUQKemh8VGBqRW85Q3Ylbnpr
TDZWcThkWTl0S3ZnYXdlOF5sRF9GaFU9cElXSypmKXJfPF5INGhLNn5TWF40KzcyWU1MCnpQQmZP
WEIoWDxEYWJ+fWthTVA/ZmNmP0ohaWRiQEVmQSVpK09SX0FOJSN7eSgqZXxQRHUjal5BMDAwMDxN
TlVNbgpHTFNUWTRmQWlQPwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW1hZ2VzL3Byb2ZpbGVzU2lsaG91ZXR0ZS5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9wcm9maWxlc1NpbGhvdWV0dGUucG5nCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmRhZWMyNjQwMDMwZmYxNWY3MWNlMmM0MDU2MmVhYmRk
NDY1NjU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5h
cnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDQyMDY3CnpjbVhWWGI5N3pa
XkxIOUh3KFVsWlpRRTkzdDEpbGJCI211YmpjQEc2d3IqQFlqcSU+K2ArTlU1PWQ1K3QjX1hCZAp6
Z1VgJjNQKklYYk1qJHxkZlBnQGptNjE/YGZjUFFAZXNzUlZmYDglVVpifGB2JGpvSGE2ZEBvUyhq
ZyNSVjw4fVIKekQ8TDJ2KDt5Jng/STlwJEtPaTkzU3MpKz93aDtpU2dXJDM3S1ZAYFhBc2BTanw5
aWViV008PCpLb3FVWU57REtCCnpmaUFrPnlmaWRGSl9BbjN1XnxnV0VBdEQ+YiQlTFJrRHBmQj4x
eUwqeUk7NjdNTVh2JE13V2tAXkZAdlNiLSRVRQp6VlhrSnltVHx2JUAqOUVUdVg2WFpATUZOSD1o
V3lyNjElSj04YEVncF5xcUchUlpHcm9kIUMxb0d9X2JiNHd8R2gKekxfJn1SRUlQaUpgOFJaS2l2
RWgkYE9vJipFITYkJEF5b2hDQjQjTE9HI0sqVUJoaTdWLT5CJEQ2aCNyeTxaUTdjCnpVS0UoV3BU
P20tZyVXZWVPLUJENHNCSGFQeWQzOVBEVHBXZD9AenxpWjdQYlMybkY4ZmFWSmtBVVhSPElyR0RC
Pwp6WWhKZ3ZgOXR5SEgxMXsrPFYhTHA9X0d3cih0ems2UihPfkZgZE9ySit0Ti1VZCZVU1glOVlS
MHMqXnR7cGVUJUcKek00cmdNWUB0eF9BflErSGFkTURpfDh0U30hPHxaIzUmdjBoJDlMPU1BYnoq
bF5ZSyF9eXtOIztffXF1Oy1eeExoCnp2R2kzUFo8fDFKYXhiRE09WHNCeWtocHUhP1JySEh2ZnFv
TWlQKDRyYGp8TWl4RWJBTGdiWD0rZkI+YGJeV0VndQp6d1dfOFZYI1h9WHtDT185R3g1SUBeOzdS
MEQqPllYQyEmUXNjR0cmJFMhJjJjR2BSNj5MTlQhTChiamY2UnNQaHAKekRCU2w3REVLPWZ8RVp+
WTVPbSYhZSM7Sz1uIVhNcGVmdFUxPSE1bzsraD1eNj1YcEI7Xk9LekJlcllKUjJvOWc8CnpLKmIh
Q1VtfGpAVWB4a1hXdCs5aD97PHVhZGlsUk9kfU1JeTd0VTFkUnEjWjR3JHs4RCghRXwlSExSelRy
ZlZUTAp6cnEjRmsmP2I8MyF0eEJLbXYjO2cyWXRsOzs3TGtmX1IldUNMeDRGcSFrO2NMcj0/M348
RyZBQSk9YEYwXiE3d00Kens+fXA3emh+U0d5QTIqX1V2SHhiS2xQem5TO3UzTCNlTHFONWtVP01M
ZFBDdT11VTFRJWRtSkgqOFpzd1BTO2tgCno8NFQzYF5pc1lCcFA+JHkze0tUMyYpayVofDdNJkNj
flRrKm9gQE19N3BGOHMpUFghNndscGN3KzdGZ3x8QnJZZwp6OEFZeDE4Wi1hcmdacWkwUkxac2VL
c1Q2K2B1WGtITyhReGo0ZXBPTFNrSEJAcFckRSRoZ1ZPWXN+JTB8V1FqbUwKejxBMiQmKm8yZloz
IXdIc3l0N0RZXjhFaUs+V2VsUU0lZkdjb2pYQ3RPTGlnMFRMJHdoVDN8MXgmMV9HaHB+KE10Cno+
Wk1FJmk9dVN5XlNrRn4qa1MpeHxBYT5nU3F5Uzh6ZkZfN3lPfm4xent6TGB8SnlkNEZ5a1R4ZFkk
djxge1J+MAp6c2dSRTslYDkydD4yRG19SFRrQklzbD9mO0dreHZifEtvfjBJWHdIcSs0Klh0fDc1
bEY2KW52SmRJKmtwb3dDVD4KekgrKTBKVDNmSE03WTZWRChKITRBcFp0fnBvb0dnbzhPS1BLeCZQ
Y1FSNG5QU1RQdldoWUFBZlBQQHlnKWZTPmM5CnpDVHF2dl5aSn1XTmZlNCtyWklEI041eWtJWGZK
VitSNUNIdVd7Vn13e0AtZkRnWWcxQG07MnhTKHlAdihwcCp0Pwp6WCF9MlpJSSM1Zl4hUnFLY2x0
Wk1WOEo0Yml5fmlMU3pycj01VENfO1B1S3toRShTSnk+PigzIVU5WmRpI3wjP3MKejN+SkdhSm5J
Q1BpYSFxTTxDTyVHNHplbGZ4ZndrUDlDNVZoQnd2bztnbjZoMjMlPnJ+O05WaWVvUjByZlgtQlBS
Cno5LUA9YWdzSU4xUUliQHEoM1E9UkskPWg+KFcoVyQkQGdYfEN7aTxwJXszK2h0bzRtTDxXVjI2
dk5HUThOIyU1dgp6WGVxMHc/OTgzX3ImfV8yM04mbnFCUD1MajNXYDMoVCtrQSQmUTRGSTdDQ15J
PWluWDZaRSZMR3NzXyhIRFYrT0QKekZSbF59R28rZWltMXxWTlRKP15ic0ZUVj1sO1Q9eG9Bb2hf
YVFZeEVeT3NySTswTnR0V3pedXYlRCY4O3o8ZmtCCnpDMHA9c3tzZU5PV0gyV2BAOHdiWTV3UHJ8
MHghXkMpRGh6QWpXR0hNTjB9PXxZJSYyR3t+QmQ2cFZnRHJMTllnPwp6ZH5IWmszbTA/ND1FaF9r
ZiZTKEUpZT17LWs0bGUpZ0d6cXdiZWohIzB3KyFEQ3J1bTJVMTRCcnh2TEJIYzNkNCMKejFsZVAq
RD4tP3ZmPlkyVnJzbXxyOVlKN05sQWNsMmNLentKR0FAeE9RX1AkTG90ZVRoU1pHKFVTTXQ/NEFM
KkFQCnptUjJzN0lwd2lkQDUrSiQ8M2A4VnRkOGUtIUZrJFF6PGYjOWUxKmJBWDxkKWlrI2dia2Vj
MjxQXndvKVVvKFZMNwp6TSlAViRrdTRyJnBYP3hme0RwZWF3I21zSVZDTlgxPDI7YCtURnA+fT90
MUlLbjtRcnZGTURTb1d7IW1KTUEwOUMKejxOK2Z5YntkRk1xTClSeGM8eDZSalIjSDNjSFB3VTkq
ez16cEdnJiQ0Iz9iY0llc2RPMlZlVXZMajU/e3ZqWkpuCnpAJHAlZ3VnYDQ+WmB3ZUtXOFUqT0hW
P3p+a1BYendBQColdWJLeyhFQXIrKG1JTU5yVGVoWXwkPi19KDdNYUxZYQp6Qlgha3tkO2ZxWERp
ZkQ5amZFKWhPYnBpVmJkKGA0KVdobU1SMEB7YFEhSCYzRzxQYk0wQl9ZOGR5ZDdxdytkTTkKemdK
dCFlJmpZWStufShFd1JeJEgpRWQxN34jTDBufiZxPDJUZjFhWW0/UGEmY1p1bVhzI2lEV3B7aktg
dWBNbXdzCnptbEdIVHl7dnd9VDZxMSglVGo9VUdmMiEwMUpGYGBaencoRT1+LTRQNUtiI2gjMDN3
eHl0d0YlZUw3WXs1aHlURQp6cz1ZQiV2QFN6R0p4MkYtNShNfThqNXtaUThTI1loQH54JStFc15j
Yzh9SHgwWEJGMkpRUm13eyt6JSV7NHQ5aEEKemh7OFQ+dzVSTyR1ZkcoZnF3fC00OTJXdGE1PThD
dzBpI2JaT0BCc1lfNmtzYnJ1MXZUJlomRlJiYG94KVVxeVBCCno1fGolczNRNW01LXtoQ1I4Z35Q
ZU5qKTsraGh2RmRtNmVzbE18ME5tbnEpMEsjRWFJayhlOE97YV9nfVlKcyN4PQp6WUAoNShpJmo2
NTB7ZF9Ce00oV3NfVElyWmVrWD0kVjR3dDR6PjdFYldsPXZoeWprMGg/VGN6QHNOOXRqI3wrcn0K
el8zKmo4OWxARUd6SXN2cUxeJStwXmsxPWNMMFBvcyplcHI7Uzl8WCVHc2Eyb3VLTGA4RClmfWtZ
YCkmPSUrbHROCnppeStaN003e3ViQj5DPWdMOW4tRENNPnc9Y2ZIYUE5Yz1AUilgS1RyWl4mPXxi
SVNpWF9CMUxzdnN+NkltKWFxRAp6NSR5OER6JClVU1JfWXZFOyYzWHQ9Smo9JT4pQXZUcU83eFhv
c3kxdkJNKWgkczBzT2ZkQjBueWdaRHw9KUBSOUsKeiVrT1M3LUN7aHxUaip2MEdzR1RBK096V2NY
X2pvTElMfXxtLVN3Xy1GS1ZQJW5IKytyemdMR0EmSjV9XmVVd3YwCnpPR2hganRqfUlKZ2lBdWRQ
X1pKPDcxRl91NiFidXBgRjVQa3dLX0F5IWJuWCQqd0k8fSE2NVg3YFRMVC07ZyVXXgp6MV8yajNm
djU3ckk0aig2Yk12UnVYJil1KyROWStxSnRpeWQ4REhTK2h+TUc2RElFX28wV0FvfUEtWSpBJWht
ZH0Kei1fKEpQb1glWk5AeDQjb2sxZXhDU1hYbmNmcStndWJ0eH5vPFB3UXtpQVg7IytiaDt1ZkU7
O2NZSSFDMyY9X2Q9CnokKGhjdnM5Yk97M3JFOC14ZyF1YzYmRDJALVFHNjdZTiFrJmVjbkhKYkZG
VnFqMEN9RFdvMzEmTHlGPFY8NGU3cAp6N0ZoP0hWOVorUCtTJmBZPVA0fVlAJkIjQWRjaWZFbnVk
MzFxfnIqWSVGQjI5Iy1Zbkg2N0BpaTNqTlIxZnNLaTIKemw5SDhyUG1Me3AlMDxTKkYqeGI3eGYw
UVJlIUBaNSZSajNmXylBOTdhNm9zc0hTXmwmdWVWVndCNXkrZTdOZU5fCnpYVXJEXzAxWUJeJXl5
fV91dXhAWFchVTl2PDhUJFEmPiNPWCRsWGF6YkZvUlA3dXJnSFgpRzBpP0UqYj48WXtaXwp6JjBx
SmZWMl9sOGdPcTlpPVh2I3ZLJjNjb0Erd0AmMjJ1TEVMPjV0Y2VFanl1SjFQVFVSRF5lYyo2SCFf
QHEyQWUKekt2N3wjWTRNKktzRUhmYThJZjNgJnUzQnolR0wxU1JZR0wqIWR5U2psQ25uZERVTl5W
VVdzcTFGfVdnTHhOPHdECnpLSGUwU21zXmpkR1UqRiZ3bndKNWFAbmtZWjBhOz1Yc05wUEd4eGom
TC1hbn45WmY2U15Mbzg4dUAlVUhueHNrTQp6UHVQUlY/bkA+KG1fPzA+clltJVg2NSM/fmV4bExS
KGI9cmY9SzFZdj5hSno/KD41TX1VXjdJWGtyZ0shdi1JTT0Keko2YTMqe2tEc0hSfiM0Y0R9VWE7
VkdhO3tVJkQ0PU9zPGBYOHgyfjtqamdNejZKMlhAQHtFZ0JZfHBleVQyZHQ3CnpHbnNQVEc4MkJW
SUs0QVd1bW0ySUNINEdKZW95YXFUY3VpTmQ0PjJFWmtpKE4/MHNSSG4+Y3NKSW9rUkRRYkFaKwp6
cjBaVyRATkIqUC16e0MwPkVHYD91ZVM2UTVlWnktZCVoRV9JQFAwWiF4OyNUTFN7dDVYQ2MmJkp1
ZV9RPFQ/RnMKelJFKnswVCM1V2YoITNeamdWSkcwNGtCKEEpU2JZVyE+T2Q2PmBkek0hUXtnSVlf
WUVHbTFjKnZjLSRYZWVNUk5LCno3WTBXKm1tTzEyPDZQP0FeezJDbnQ/eHpoUjkoa28tKmR4SCMp
Y0VBPC0/fE8xPW9yU09YKlRWNSlwQlNBc1RCPQp6dTVTKVFoQnBOfkZWfl5saSZObkk0RjJoS2Rm
b0pmQkkyU0xVMnAhS0V2QjR5UiZtK2MmQ2ljQjhIX3ZLUFQyRXcKemFiMGd9OHRyckh5YjBAMilC
SChGSSQrU3MhJkg0TjF+JmloV2xESyUzbk41RnBwdlJVbSNKKnRPVWFWT3lxbXU5CnooNU8zJTxx
QlReOyk5dSt3Qk5pIXhuLURiR3RQVDQrQF4kM2tHcj8rKTxWezhLYj9fWEl9NHM9aDY/KEpvZUI8
SAp6UUpMRiEpfWY1KDAkcmZMU1JpdnY/fW5yejstO3w8UGpocFRlJSFRZE8oXyY7TWhaTjskUSVX
XkBGY0xkbyRpezIKejRyLWR9WThDK2xJN3h2OXQqcmB0c2A2KCRkJj1zcmVwSlgwS1FIRWo7ME9x
UClzJnhIWmYqa0A4VyljaUtgdG9jCnp7QDsmJWIjUGFQSjNISEQyfmJOP2tTWGY8MjZofHRSSkZB
emFaPEc4ZVkzfTVOY0NjQilHKiVjLStaJH1UJUN+KAp6NVNJczxvS2U+aUFOVGlhKUxqS1clSkty
YilKaEZxd257PSFpcGgqUzdGaXt9enh5OSN3dFF0PTxCLUlqK2RjP3MKejdWZlI5QVB4QDEzaz5f
MVdAZnwmeUlvVCkjeyF3NVUrRD1NJSV5YSRnVVFrTXRraX4hP0J2VjZPK09WNDJwQGE5CnplayFq
TVBMcTh9YEhNQlpsMUVPQEp6VE9yekVxX0FifjgtNj9zO09ZXjdzRFh6bm16I24qVmB1YSQ7Nzc7
MHhAeAp6YUpqOE8zSnh4N3IkQUg9ZXJvYFB5MnA9JWF0LVdiQF4yeCFZTCZOY1pobXIkTEQlV34/
fHRZeTVASmc9VE1id1oKelopPkVSek9PbCtNfSpfLSg/WHdMQHhfPEx0e1c/UWByNkw8VDRgIXhl
N0FxSm1jOEwkRHxtNFU2aFcpclBJITVBCnpMVCRvYUUjeiZsJkpxYSZafDxGfVh2UWhfSSg2IUQ2
dDdHKXMpKm4qdnF2bX5gcTAtano0Y0RVV0JXIS08X1lgQwp6bSQzPm1NQ0hkZGFpZzlmIyk3YEdO
RGZsdHZWSHlqPDdJTCFGZTV6dD1wVH1vTWghVnopUUFGd3dzQUNDMWA1TmsKekY9fnhjajBePmYl
SlokJkV5YzI8QUVMRktROW5BfmYzJE12ZXdxR2o5Qkd2LWomJjkyKn5oPUxhVUg5MGNZZTBiCnpR
NW1HVz5oclg2Vkt0cGdFUG5VaEpBWEt+a0k0U19meiZ8TS0/X1l6ZzlPJXlvMk51R0cjOHgqbG88
NTd6IyRsNgp6Xzd8bXVscjVDT3J7ZGBUejUtUWUhaj88RD1qU3dlcXRDVUMkNHdAdmcrKGxiR31T
dUEobWk4PWchJTxlRDExZTgKekVPYUEyRWgjKkJNb2NHcUFzVDwtIzlhUSFBNW4mJGo5cUVNVTYw
aUZ4fFZaUk54N0tRKE5ARiErbEpSbD1rTTF3CnpVUklzX0FROUI1P2g1Q0klOWpPQ0A5dSh3NXg4
fE1QYT8pfWJzYllPPHhHfm8mKHFkb0FtbWYqdyU8e09jbiRTMgp6PlFqUEEqazd0aXheSV5kUWlZ
KUBteiN2MGFIVGNxU1lQdCtIVEpTKDQ4SjE8Y1ZrJl54LXMmSWNiPjM2alQhVUIKejNZfUBab1U8
UVg1QWczQS1ifWd0RUw1RH52WmUlVDhXSHdTVkFVb20tMVA0WiQ5ezZlV2JYRHFXNX5RN3M8K1Nn
CnpNS1hXdlhNTmwqXk4hbCtIbkJMJShWeX0lOHA2Y3hfcnB4V1UhcSZlaUZiZkhnc0lTSSZofCZ1
S2dDNFpxSEhiSQp6RTFKMWR8NV9DKnlxK1FIPHgxX0VQK2o2Zy1hSFIyVW1AZlItTEZjfGQpfH4/
ZEVmKDw/UVNsdXBAMTsrSmhNe1AKejNfeUhQNFlUT0hiPWU0bFkyPW9JZzB0YHM8Tm9mQ3U+djt7
LX15ZUNlQDFhcjlxZnQ7ejU+ZVg2ZENMUzc/KHI9CnpsdExPYXZCcDJ0YyR6fmMyZGpTTHg5YD9f
RCs/R3k1Nzh8bzZOX147UFVUeDhpTlpHUkVLdSlCeXw0NWlLakZ5PAp6Un1RaFFNNW4qI2RrfWpW
ZGdTZlU8YiZgZkBDNSlUOWtGRnNuPHo+XldZQVpLUCVpUGMwXzUzTD4tcH44PD5WNmQKejk5dyhk
VGNtJmJLNm4zaUEze3N1aHkocDRPMXRpUTkhVz00NG5LYjZHd3QhRnFDRF9ZPGlsY09SQis3MTdW
ZkUhCnpFanhpZUY0byZUSHxmfCptPHZGZlI+bUFLMTNQU0pENGRYK1die3hMWjI1Pys3OFB6Wnd8
MCVNcWhJKkooY2pKbgp6TF4mKFp5VW0oUkRJVztRQV5kKjwleHRzdVVpYkRxMml1XndPSGF1aiNm
fWk7QE5IR2VSJWZ2YXduNTxZVXN1S3AKekU0QEFPVWwwVXlDaD15ITtkQTJ1QFlMSFcmdkB2KkFr
JXpzUkVveE0/UCh7NkIjNiU5e1NLS0JuWlkmPzliekZpCnpoczx+SiU3aS1sM1g8QmgkKGw0amsr
KVV7R0opX01WentLJmljbyMzWSZPYTFIe0diLU45ci10WldqZH0yI1o2Xgp6PnhlfChNZHowdCpJ
JnJ6Km8+UVhZI1VnWkI1SGVDSG9obT83OzJESDgmUSg7KGBrQnRLTmN+Yzd8c0pjKH0oVjkKemF0
dkFxPE1SLU5CLWxnX3NrbVh8Snp5ME1VN0tmP0AlfGh1OzA8Yn4ySG9vY1N3UkYydkNZej9gT05w
Ri1kRlElCnpGQD9KJmljSH0oQEJieXJeP3ZmUEpadEBQaW0+djIzMENJX1V3Xn58RSMmO1ZNQGk2
U3lXVCRmXjwxT09Zcjdqcgp6bTR4T0ghWDt8VCR3Qnh1Klp0e3lHMFp7YyR7Qk8zUkdqJVBnWll6
VjJ+UlBvVU5+QT9lVmIjNj1VfDNOY0ZtMiMKelZYdGNUKEF4S09JezVffTVGJklNKGApVzhaeUhO
IzwwJEJZOCsyZXp1KWs5V1JGNXF3VjxkbVNvJXl8REVQPFgtCnpZbmcza2dDd25jRWg/d0dpaT9N
WEc/VTVLQWBEfU4xXy1TUD1TYlpMezwqV3ApbTFxfUFWfGh6eFp9K1hGM09ybgp6ekVtfl9MVDY4
Q2MoT3cmOT9sY1Z1ZX5BUUsjUElud2kpU1RoST9IbiNFKzQ7KVJpKFRsMkI/UitSSCRxQHJjZE0K
ek8+TD5jbDVnPjVxcm0+RD9OJHJ2LXBXQH11ajREbU45NTctbmVRZmBkdDZLZDZxIXpiTk8rY2lr
UHBOd0A9KXhKCno8LTl6KHJCKWVpKWlJcFhEQU1CdmJqdXV5OEhZdklWOXJfPXtOSEJ5RkV1Uys8
e2AlVzFHcVJ5ejAqb2paJkN6Mgp6IWIrME9jbVhkS2poSmQhN1QzQklGNWprNCp1T35RV2FMMUh6
dk9zc3hGKDVkVVNsJEomeXFxIXBkI0Y9KHZieTcKemxrSnJEdG8hbCpPSHhkLWk3UXBHTHk+K0pu
QF9meDB4SH4zWUp5TE58QUdTZS1FQSU+PF4pa0hGcnZRWl4lRXclCno8UStDJGZTZWZSaFIqWi1C
RGMqcyFVbkQqYTFUMXVrfFF7aWNkcEhqK1l4fEJVfU1ERGNNdiFiUDk/fiR0ZX5MIQp6QXFUUilY
bGt0T05kZmt5MVBrZjx7N0paKU98fXRDQDFKIz9BekZ7SG5leGpwdm9TSl49PjlNQ29HbStFK2t+
N3oKejg5aiohVTs0YkNTTjRsKEJ9VmElRSNWSGAwdUZ6PzR7VVY9N0NEMD1RSGowTWg2Yyl7OXdq
bGVWUWo3KSgtbVl5CnpNTCRUOFhDe2kxOUhhMz9Uekp9SElUWEt1IV9TVjRXQkdmITdhUmElI3kt
ZEt5dVB2UytEfmlsUC08bWA3QVZGOAp6LWMqK1VkWHpNNW0yMzdye2lOQ188Q01zXnRMfiQyTE5H
S1RXRVJ7Z0FrJkZAZHV2PTt6MUhnOXd2fUdidHRPKHgKejNNRXIyJFRzZi0wYXJYOSRTWSEqKkA2
R2VjRi0kZkckcFpCNyZwNm8/MFZsLWIhMEwmQUFVLUo4Y0hQV1p6PlI4Cnphc2locEZnJio9R2Er
ZXRWOGhfKGF0Rjh3dDlHKERJKzFYWTxxVj0kVj9sWX4xTEd8ekI1fEg3MlJJUlFDIyRDMAp6S19s
c0ZfbzQoNEVeSWpsbDxpKyt7OUJpRnhaeCh5ZnklUWo+Xz19MGhpa0ooJEcqe0Qtbnw/WGhyJD9R
Yj0kVFkKem5tPCR+NXtpYzNseW1xRmBifSh2YnYkNkNfYXYtdkBOTys+eXhhYHJJSXtPeDQwWUlp
b1h7MHVpRFMmbTgxNHFyCnplKnhQPU4mUm53XlcjakZfWDV3a2R5fDhPeyMhUjFDS3tmWT5GLVhZ
U3hiOSZsVkp6ZHd0fkkye2IzIUQ1KTR4Vwp6bnB0JSNqWTVCfTJ8ak5Bez9fVyhMIXluX2pIOGR0
dUNHWihRfkdWblZaRmhYbiNxU2hxQEJYPW03YV8+cCZZNTAKekVrNiV4S0pEUWQ+SHBTX012Z3sq
KV5wSmd3RSpXfT4wdntxJml7ajZRTGs1cXpjYC1BcH4zMX0xfXB6KWFYdmZhCnpoMmM5dkpkY0Vt
ajFWZzVSOzRjdl5peVRATW5zOEg+aSM1RTZHNjBtcG42ZGZrX3QyQE1OZFBXUUdxfXklblQqMAp6
Yn47d1ZPekEyWTl1S2J9ZTwlXnx1dCUwNFJRQlMhMz9JUlFmbUtMZDN9UikkRz1uc1FHSmBnUUZA
clQ1IzsmR20KelBRZD9TQzhNc01MPmdYbENaZ3BTRUg4PGV5cWR9ND1XViQ3V0AqPEBGOSs0O1J2
JSRBbkZuYXdjZWt9UEdCdmp4CnpGSXdxPmpBeFRVRFY1KS02VCp4MjUxX3p8UEBvNn49KyNaJUZL
cWRMbm16MjgoVUo7ej9HRmgxMzt5ZDZ1Mnk2Mwp6OW8pMWEzO2h0YGhnMnRfUFJyV0UhKSM9Y1Yk
b3U7V2J4Unk4IV47cVR6N3dheHx0UGxBS15xOWgzPmlQZSlZQHMKenk9PEhQRk50P0ApfTRmMVVa
bHQ+JlF7aX0hSTRLe3dxR1R3PnZOakdsVzBfWntUWkIpRl99MEp7PWtLcV8xRDdNCnpePSE2Xkt0
SS1oV3laekxQSkJGSmB7al81Yl5uTyVjRlRxMERCX3NBRWZGSTxmPHxybU1NWDwxYiF+U3IzYSkq
bwp6MTBwdExeaUh7Yz9AKWgmaWoqRU5hcnhrfDZeTSNHZ2ZONk9nZmZJU2d1eV58VU1Nc2tnT3ho
eEF8MTs+T0NxMWoKemh+SThDT3xsaDMkbyZGRmQ7dDJDNig0WWhEMmEqOFlXbS0rJDc1dz4/RUlj
bm1YRn1XdGVmLWoqKmpXWiRsJjdyCnpAZVJ+ZWVWdHpDeGFyZUg2NXw3RVpFeWs1UDVFYF9DOzA0
Xk5XUXhmdzZKWG0qV2lMZzd7biZEJTtXNClnSC1fRAp6PmpqdD9RZXA7blJ1N2dpbVE8RWZnVVI2
MnVqOHE7YVVfQyNrK15kfEZHV2IpYl9kfCZJeShoPThwaGdOWX1hVVcKej5AcTt0OEdrKTlEQFZ7
REZIc1M1KihePktnWjtWdG9QKV9wOD8tWjViRHJXaEpUS3VwWis2JFU/azx1dXMtTTNlCnpaRnVk
KWgjT2U9ZU12MC17Sjx3cDZIdEcrYXJ3MmluYW5HYzdAS2l8Q3lwbk5yKFNjTTxgaG55aykrd0Ff
JGxiSgp6fENeYjRfRH4+YzxsX0Vob3w0ezw7OFQlclVzLSNPTXo8SFhXV08jfGtYLWxYM14lSUJV
d3d2fEtpZEBSJnE8U0kKemF8VHE+YHMrWEwmR3Y+NE91VD8zYihKP0prbEU1N1VHYmFeU2NOUXVD
ZmdLZ1M7PT0+VlBXQVY8PUVnPlVlYF9sCnpKbzZDNzVZYGFSNVorS0cxQj8mb2omWEUtZk4wUipV
QChDQTNXX2krdGhVMGd5UV9VP0pIeXRtdCohd2stbGFoIQp6SzFmZSZxNSNxcSN7JXV7bipmYX1V
flFmTWw0QjwtSWNxZn12XnhRREd9dTBVITdPc2pjNVE1MWBiO1k4MDV7ZDQKej48SFFVaXdYKD9E
a15EaT18byM7WW9RfHBPbVozS09HSCFJST8+ZzMkSDI7OHluZGJqXiFeb2ItfWIpLXoxYWdgCnpJ
O3R6MitDdSlpO0d0Z2Zke1lUNVViLUYyV0VqenxzJVphRWN8RkNrTGV6cGk4OU9aJmdSNiklYUpD
WWVBeUhPbAp6eyRyOXg4fChYem9QQk01VkNXWiNJNTBhZVZPZFhnZSRIYWUjd34+djNzUHpFVEx4
RX4jVz5GTj8oS15eTFcmT3cKejM/QF93Sjd7NXI9bj15Xzt1T3llJmtvUF5nQFZ3MVBSQXtqeDQ+
d1NRckVYU3ktfFJDZ0VnS2dgMFdwPGVKRGJyCnppYGohKENSTEwmTFh3KHU/elhYYjtnNGBDO0k3
e3tuNEgtcThKPy0zd3gtLTl8NlV6ZWJITXtRUytheXZtclZ1NQp6WklfNGV0QW9vP09gITlCODth
b2xiPGRGY3c+Sko+WCZhbG07akNDRHgrQEdiNmY7eWFHJjZMd3hmSjZGLWwoPjUKemE3ZjE9MiR2
X3xKPWEpTTxBYE4qdCtPMGx5aCZPeXZHbHRoLVVpT2Q+dDwxVWwrczlQbEczfV52SzB2JDsyd2B1
CnpzMjY3eClVMlNYdzxAVEQhQmlkd1hfTCtfSXRyOV5hUT5IN1l9NSFOaiY1RWlsJFBLej5YJnZh
NShvNntXdU5ZVAp6UWY3bkFWI1EmbGAzSipnZlJHQkctayZ9JDs0bVc4bSRrRkZ4WSYpbzctSi1s
dTBnPXpUc28zUVBPa3hERHhweUwKejV9QmMwaCglQmNHRSs8a2ZoRkpiLTR8YHFPWHtkSCU0fko2
cVh5SmFUPT5EYHp8M3YrMSljemZWan5hbWtiJnhiCnokWXdoOTlzUno3Y1hQcyVVZi1RI0MxUTx5
cSh3SSZZZ2c/OERxMXZKR0lhSjwrRzt3QG1TOHtPa1JAWj5qU35tOwp6YSlyJW45dDdlbT81czVU
MGstZDRmWHMrSEAoNjRVbXs1eTNgbUZyO141YzU1Vk1FJkVHdnQ/MU5DPzJqMHZGdHYKenMlfjNv
JEU9aExXXmw0NXIlViNnWEJaXlN6JlpfJFkxNiV0Z1JFdiZlJXZ2TkMoYnVeYzZLOzhTWGlITzdz
TTtjCnplVUlebnomMFE9XihXT2AhYVF8KShlYlVrdmFKK344emZfbHFJMFMlRlpPPztAIzJoUUtT
RGJFbGd1WV4kYTJWYgp6JE4/c2gjUzFEPU4+fXAyeyNOb09xWGVRMmwxZzwwVz0tM0V2KWlpTFNj
WigkTFNCN3NZVyg9ejhPZlokIW5EIV8Kem59IVpWJDhTVmlFaGpjOU5oTDQ4PTVLQ3BtWFpqM2hY
ZHg3ZWN0YCQpWmkhQmtGSE5tUFViaklRV208UXVkQEcyCnozR21BWE40Xz9+RDIwSVNTKWIhNE1S
JiNVeyNZVkBaKDc1YChiT3whY05VaChqTlBKUm8kTk82d2FYQEpKOHUpPwp6cXJadGJEPlNiN3U5
XlNVaU9TMFNOQW0oY1I7eVp6P2Z1KlZAKWNEZzcqSHF7OCoxM1J4WlNWKmlfJXokbUB3an0KemFm
JThLMnR4JUxifmduS0w8U3IxUXpFPGApMDxIOGlFOFlVR1VvUGIqaTstOFQ1YTRjakRBLWlHdXct
Mit7fmVWCno0fSohelRZIyZnO1c5Jik2RX4zbTZ2UlJQdVYydVFCazh+SiY3PEZTXk8rRktAXyho
JFJPOHVOVGpRMF5UNmFjUgp6MComWW1zPHk7d0VAdSlqUTR7WkkoTSg9UGtYI3tJNG9aM0MkXldL
aktUayVJOytwPHhRMlheQU59akVad1N7JUsKenQpfkdGM1lXb1lkJVhPUTFCKDVZRztFenFWc2c/
S0VlJE9PT1dmbERFWGs+N1dnKC10JGNYJXlhMyUkWiR9VkhoCnprZ0YzZzctVkQzK3kxbnlVaVIr
VzJVLW8lPSllflRHJWFWTVM7c2FXIXlPe0xjcVctISo3Uz8mWUhEKTI5Z0w7Pwp6MExgNyZHREpr
K1ZKRSNBeWBaUSQob1duMGZnR3E3VEFTRkt8RWRHekZ1TyNYSW1QeU4mUXRxYF5ZVVJ0LXBhaiYK
ekNTdlVkX31LPnFxZUJHbnNfK2B8SWBJMU8jOzNDN2t5N1dAWDxVaDFiODZTPz1hXlU1KlUjMHAz
X25XXmxIOWIwCnpEVis2IXNhVk9BPHtTTSNqYzNjSXpyTTY1PzNHaCklO1V0SCtvO1NhZkg2NyMo
JnczYWVMRihid0VSUmpNZSh5Rwp6QG88ekYwZ3Y8YTRuK1B3SUpMPkppenRwKnI2dV9McWsxZTZ7
ez5wIU5UcC0rZG1fKWl6VU40NWRGIU97P2pKJmwKel95MUpxbUt+R0BANzVKd3FEZWVBKz9TMjVs
WUFlfVp8TGMyKkgmXmg2ZnJ4aGpfSCNMWT94a20zYztZPzUyMWpNCnpQR1FiYlZ0NUVNOWlLVDUk
JlRzWF51ZCl1eWRqO1RiZE0jIU03en1WejRXdG5CTzkxKzFjWmNMUDNeYTU0MGlnVAp6KjVUJGN0
YGNKampNVldIXkw9Rj1GRjchejBfMU1kX0tvPzklSV50S0N2M0lvMGJxUXBePF94PkRnb1pCU3Rf
cnQKemljfSo3SWo7UkZwTVZTeGZ4JWFveXF+eVF3SU1uRz9RY1dje3BnaXVPMFdzaiRGOyorR2pi
M1lLNEJoUE5fMlJtCnorRX47cTkmMiRna3ZXV1Q8cnlMQj1WTXUoUW1rOERoczAlelRVc0I2bkxG
Um1fYVQtY3dqcXc4PUVnKHA1Yjhzbwp6TCV1X1M9fmBlZmF8QlY5bV9xXzdlc24wS19NQzFgMVUz
cCVxTzQ3MjVfOHc+M25kTCUjT1MyZnM/TXZrRig9Vn4KeikhOD19KTJUdUV2dF42NkxOXnMrTzxX
dmhQbWBZNVBPV21rVDAzUlRVMjtzJXFWMlNQcCRRcHl5PU1DaVBoQ3dqCnpsb3RWTkwwPl9iNV5q
MHxAKTFsVHFIe3c3dHljaXsxPiMqJiZ0QiV8LWAmYSVWaW9VXlkpZkhAQ0RlPCQwV2VvQgp6IUVh
OXojKCQpRTZZZGs8eGtqc3NGe2p7NFlkLUAkeTtQIVQjfmUxPFhldzJ5eCV1YnFufCFVMTFqKElS
TXBCO1cKeistV31ZQjFIbDUzbVRKKXo0JT4ldyomKWtwKG5TU1VxRkFwWkxEVjFWJEp6LTB2dkFH
XzwkbWR7V0VLe21+Ki1ECnozZVF2YHtVYUJ6ait9fio8dENIMFE4QlpfTzZRKkhWViomcWFVWTl5
KGttcURRPDR5bWc8TXdXMnhOdFFHOGYkVgp6N31MVnNuYis0VC05QHZ2KzFyOT9TMnszZmZxdFYh
alYyTWlhYyF1dSpLY0R9T19jPks0REtiSXBKZDMoRz1QK3gKenVjTiFTS0NJZT8hUn44RSFjV0ta
dzJDNWcpIzMzUihEcTdzODN0PVZlLWg3OXRXbjhpdlIoYndtPSlGaHYybT9yCnpWe2BIcW1tOTNy
QjFubSVEJkxgXjJYQFIqS29yM3woRDVDdENoKiUrJm9USkBzWDZWbnh7YTFSenxxM0YpOUg+bQp6
bmdnNyNMejZFdFllcVF0YG1EWilRfkRwQEtDUnNZc2xsQDYlRWRPQCg1KmB6WUFPeVR3ZU1kcXRE
KCtpVGdWdFMKeiUle3RnUWJeU2JGPXwtZDNFbj9gNVJqRjszfXg8bGQ3Oyk5eURiY3k+Pz4rbjt2
aXpJTnIwPUs1Rm5JYXJ+WjV3Cnp1VlVFcUNua2g7ZXotKTxsPnQzNFIhMyFnS2p3WldhNllTVUs/
IWVlYktiS1F6VXt6TnlEcDhZQDdKPW1GaDRZdAp6ckNBSCMoMXFiX3wzeTgtSE4tUS1yJSR2VSYx
LWU3LTMkIT12SlFQVXVzPTBFUE49SzMwbkFJOzZoakNwZj1URSMKemctPExvXnw5PTNfMVFRP2px
eXRxb0p1SkVrUChAeXQtMEN1VHx8YlApPkA9WTFrRmBISXgtaCYmTkR1cVRgd1JvCnpneiNrVVIh
K345dyVfdXhhPEZ9PGdPKWVKdz4qdUlPNHsmTiR3c3E/Z05yT0RoRkJ1V2J6eU0jIVNIcGYxaGcr
Pgp6MXpwfUFTUTVUJjZ+UCk/QUlsbjd6cVFIX1FlU0M+aDNiV0w0OTtSe0U1T0gyKFJgUUJeQz8m
XiY7QkMyYTVwfk8KekYhMENFYEwwPmUyPVJxNGFuQi0lUEBnSWheP1RKSFYmelRGKG56aU09S0tD
JFNXTyR2ZXVUXkFgcGRtJmRlTjxiCnomaypMNU07YyZSWHsqfVgmc2kmTyM0dGFsQ3NrPnhHQW43
aWhRJmZRWTA1cm03SEZRQlM3P3hWNWIpQXlnVXpMdwp6eGx5RE9ucFJ1bFJIQmhjYm9qdm4/K290
Xz89PkIyRHpLempjajt1OVElOXRsK0EpfTJtXmN7WTxWNWNDX1ZteSkKejYmNS1tcU50PTg2Mj4h
UEhDZEFrN0NPdWs3aXJLIzhpYkh8emZSc3F1RjgjKnZoPC1WY1dFPSgqbC1ePzIzcTIoCnp1R3Rq
PVE+djZUS3t4WkJSVDZseGs0dVY8Rz89MWBNS2FUQS1gN0RaZlF2enJsQCpeelNJVGZsTzxMU3NF
RzYtfAp6Vn57RXF3bW90UWZEXipKdVFIVy07ODswPSZ9a15YQTc/cGFlUEQlP2AkTG9faHxOe2cy
Z3dwZFRSNSlabT9Gbm4Kel9AfWBIJH5CcTREMT5FdVE4SHgpYl52T3BVWj5sR21vdnU/TSUrSi0z
SEZWUVBsT2l3OU12IXk2IWF9VClXdilXCnpuWjlCJl5BP2RLc20tWURSU1FXVHAxemA3UyZ8PnBX
ej9uO0xOcEkmcEF3SmFVZzBlR14mbklHJExtJG5ZWH5MZwp6bWtBRHdUeGNsPT1PISMoU21SeytO
b0RtP2d8MkFacXxJUXZXR2k7S0BmfG4mKlNVSXMtWFdud2gob2FvYig3VnwKej4+WHJkQHQpPlg5
Zyg3JW55SVMleF9jQ0JzWUk/NUJwRDFEYU5NaldJQ0A8ITUhJXg3MnNYdFIlfW5IVWEzdmhpCnpy
a0x5K150IWpUTyhCKD9se1VmKEtpaDQ/VWx9XjtPd28hWGxvZmglZmt1UU53RCVxfSYrUipATHBK
PiMkZSohPQp6blllLTh8S19JITklWHR6PmFMJjY0YDRLS2hGNX5sayYjfWRTZ2BDSyY8dDlEeHBY
PjgxMXJOc3kmZF9BZjFVIyQKekBzYnhPRlAwTVpeZ1U/dFd9VG8/Rks5ZiZPZ1VfX1U5MitKQHhJ
UHtaRXlqYURqMysjbWRzbUM7Mj4hUmM5ejNpCnpqc3B4fT1pI1o0QyF8VDlBREs9ZipOdiM4ZVow
RXs+eW5ZXz5zJFhrUDxMYmZJWVpecFUjQDFULVdadjxlRVdPYgp6M2BnUHZlS3NYTTQjNiRhPlVF
fUxecFgmUT5hcWxRNm49VSVeYkxYOU9UOz9iT35OaiM/WUlvSHYoVCR4dXVafmsKejNwKGNhblBu
Qm1jWkcyTTt0Sns3UGdscDB6SWB3QCFQdygoNktxITMzPFMwb1Y4fWE1X0dARiR7QU13KCR8OXlP
Cnp4bkA5NWwxLV9fKyo0PU1LVSNPWUJrSFNARkM8RUFDT1dyZzBePEcpUDw7MWFkfEFmWU42YnxR
aF5LYkxmb2pCQAp6ZzdlaHU8Z0lSITMjSyolVyNCPWI/ISE4Qjl6NnZZSyM0NWNpYG9KUkIwOVdD
eE4rP2t1YVVzZiR+JWJQWD1yVnkKekxzPWcjdVUxQSh6N2VzY3JIWHVqQkF7Y2VHJXNVYEFxZ3Vr
MyQ0YW5gISUwVTRVZG4xZ1I+JURKPVB4eF9McyU8CnpGdypNd2M5NDJYUmErJnx2KXYxR2N0M2ZD
eEVTeTN7Iz4mNihVI3dsQWZzWm85MmBPd3E8TmZtJHJ9U293Um9pKgp6RiRPd3JHVzliPCluTVk3
KVJ+RnlNKXQqU200Xll2QDFwT08xfWFLU2MkfT1QbCFadz5NY2VGfitZPHsqXilBTS0KeiNmTEFA
MnpweFI4I1hEUj5SOzZRY35ePUB5JjRubjZVWTxqNldHJUlZSUJWTFI+YGRUNUxrK35wMCtjPFps
OTM5Cnp1KCZ9ZXppPXImYjVCT3AjWCtiIVNyaHhXOWhkIWtwZS16OCFGdkNjV3M7dzxZMm92OT4t
bnU2aEktP3ZFPFU2OAp6PGAyKTM7OE5yaXR0RWkwX1FmP0lTck9XflpWfTM2aTtiPSU5TFBTQDdm
SEpPQSR9fnRZaztEX2pvRXUmWUJzIXYKemEhRFpGcipAZW5zYyNWNjdRYEZPTVBJPDE4akEmPkgo
KnlLSWVpU2xmMHdISUM3WWc+YzlkZUk7e3VubDsmNUdHCnplfiV5eUtjU0QpMzZCcn5rfCkwWlcw
MHdNRChrXnN6RE0oait8fWBPd3I3dDBqKE9pXjREX0NvYGdebTVeNGFyYQp6MFlgaHt6fXVQX3dZ
aTMkVUhfZnpFPnhDSUBPaU44P1hCMSU+U0ElQ3F3WHMjZUF0RUFmc2xnTVRtSz47RFc/bEoKejxs
cmtHWksrdm8tTF9IJEJrYEUzU14/PkBnRTgjTm0jfTs5UHFlfkBDJD9sd0V9WXt1TF9WQmt3ZCpp
UDJFd2ZMCnpmYDU7QlVNYT5wcUM0TVk4aUdhKFY+aXpjeVh+JW11NilfUFdsKGxAUiNzQEc8bllJ
cUE+ampNfEN+dzVzV15LWgp6UVcxSnU5fkFAN3QhPXNWRiM9Zyg2ZyYkJm9oWW8zPFZRaCRNMTJO
KiokRlB2SXxNRzwqJWs7OD5GNXwzeVFsd2oKemUxJWpCSGhTc3dIVDNRPjhfNlI0eFR6NCE9djxW
OUFGZ1BmYVFVUUtIPXVfZEElfD9hK3JqMykzKlRKanU8R14/CnpYKT4lMW10I3JeNjd1O2Blc1oo
VipTUDNCUUJhdjtjZHYyNCZ3O2ZDP1FANkYoVFRfYUJwZjh7YyVNZEM7b2p0Pwp6a2hXbW5raFQh
c2VNWCZOVnE9LVNyZXFlQ0AkcXAlajNsLTlAdjV2P0tCIzJzZiRZSG41d1ZOME1aISVTQnpfdFkK
enBZfE5WUnktfXxKSSRvOD5Cbzk1KCUzRCUpPUl3UUxXPFYoKiVoN21aOERqST5efXJjazBPVmkh
PjI3QChzaFlwCnpRUlZUMWU8PUB+UX14TFc+P35GK3AyYUVyVENITEJVKnpoPE9+MERSPHtAZ0M8
YCpYVyVnSUgwc19JVF56aWhfewp6LUpYQT1PTU9lIUdfe1B5VlE+PEkyOU9YanhSS1c/VTdqPDB6
MjtBbGc8I04kNHw0MlVON1R2aTsyWUItQWhgZFQKemFxM2FQSD5ERkw8Wl50VmJaYHhoNXNaZWpQ
JT4jVSkrcyMmUj1YSC12e0pUczZyVXFhNUtvVztpNFQpMGtMdnN0CnolKGZ+c1lrTShSTnxhLSk7
KkhBWStybE0+b3wwPCY9fUtrIUR1V1VuTGsheF5nSDJoPElqY0BVdElOfHxKODVvKgp6JjxTTm9P
e2luPnpufClJaz5wX0k9YSU1I2NgZUVUUmQ1Y140Mj1KdkZDcmp1PlNaSTVnVUxueCU0ZFdoZXpZ
dXIKelkjeX51Rk81LTV6TUNrU0lQeE1UWWN4V098RjxvO1c/OEJAd19DUXdDeihZPnAhPnQ1RWo/
SEJyXiMlWShXR21HCnpROX44O2xWa3tuWXxqI3M5NWBidUVfNGl2IWhMQzRkb3JVRmdedForZHI0
VERXdiV4Zi1Zb2tTWWE+ZE9aMX17JAp6OHFTaDc8Ry1aQyZveFVBRkhiPjE7cjl9KTE7MU9BPn5I
T0xwV0lNNnZfK0slTWJqQX5BcVBXV2lOKVRDSU1AcjcKemtPZUs/VUVIJG1sVlozWjtzVyRuQCNr
ZVclPHY+dkhVd1NQMHd3UDJsSFhEVHV1akpnP15gdGE4TDdXMVg3RnAxCnpFUXAmMURFWiQhcFZq
bUBeVDdtbVlgPGtEKUxob3VQZnp0NHtMVEtteytHeWchU0IxPjwxK1VMUEZnd312aS0/Rgp6eSVL
fTBnO2IzSXF3aj59dkI2WGZmUnlBKStle3VDakFrLW9YNylEMiRwdHB2Wj1QXk9JdzhzQThkSXM9
K2dnMnoKemVpMDBXP3hDUnx8SGh5c3piWklHLUhSV3Zhekp0cm5ffFpEazRifiRvVktgRnFCSXZm
RH1oNmRMIyN1YiEqcD5JCnpTKlRRRmdxNjlvQ2I/M0A7SjFDbXBHJmhLYkpwNDMrWChNS25HSjNF
WmgpTW5PTldiRS04JUZ6R3xBTmtgPnhBPQp6ZUd7YFkme1U7aVU/Y0lpOWxSTVA7X2swcyhuZXlO
cEcyPVJqbjMhPD0kfiFJMDZtcH1mNyg4NW1fKTchdTgwbzAKel9NdUg/UH1SNWd3YWZHfHopPzwl
aFRjZEA9cWFEMzhhWmVLRi1sQ3g3eklifDgraXs7NntYRDJnK3xYKF5abmNlCnp7I2huO24/T3pa
T3A3Y24/TncmM3BRZlZPIUcmWVlGO0twM3IpdGlsJVVmSE50d1h0N1U2ViR1anUqeWA8bEUoPwp6
VSE8aWNvZW8zYl5uSUdOQjVIWU1OVTw9NEc4RT52PFc4Mj9SZ3JiNjlNfkJnUCgwMzsrRkdWQGtt
JCZ8T28oZUwKemtfJjk/eGI1fTk+Tz0tWnpGaUJue2RwM0NVKX1aJD0kSyglSjJlPnV5Vz5Sb158
MncrVT47azVVVkxYSnVRS0I0CnpOMn5jTnpNOTRUblBhKnVAKiY9I1VJTW4rb1VLWWpGTzNOem9f
TnooUD90bHo5RE1oR2BSLWgqaFdrP3t6Z1kzOAp6JUNEeU4oQX1aeGo7JGheTjl6TDU+Vjhmb3tL
VGI9RmJTJUc/WEV4WCFSJEp6VDNwYk4yZ3dCdylnLXM+JUE+PWkKekxNLTJ8PEtxKmxZYn1NNkwr
MHIxcSFEO2JWYGE/fUN3TTBXckVPRDY2MTg7eVFSX2UqLXFUa25LOElhJUdGTW0mCnpYejBse2pV
djN0Sjl8VWZ3Q2JVMl9HN0JFQXkka3x6TnlzVTk5Ji1Kbn1fPHBKQUlydkVZcEAmcVVealFNQTtR
VAp6SFdkU3FybWlqUCVabT5leUlYQ2d5QkVjc3kjZWsxWj1BQU1NakRhU2U9SyR7MHB2fnlWWVl7
V0licW99V1lqdzYKekVkbj9xKXxUJm0yTDAmKz55MiYtZEpIfiFCQDRDVHkjeT59K0JQWHFuSVlG
T3B4Zm54a09sTllKSmZBIWtkVlJzCnpiQVBhamVFNm8kJWgoRVpUNGJnRiRLdFh3eFJTSHhmKyR4
SztxKGtxQjtRWTtyQnU7bXZIWn1LT3JEQzdvU2YtaQp6PG81PHtfdWRubTctJHxvNiFjQ3AmYSNO
QUteUEllaGROZG96ZCZ2PGA1ZGJ6dTIyJmBCc2VxPmF6KjV8P3Ihe20KenZGanpPRF9nY3NmYE5o
USpSQy0qNW5zNHc+b1JIKFd5OEUrUWhEVlpUcns8OyhMI3otVDR6Mzlie1hnUEs4P1pyCnpZZClx
VFYqQ1hBanhwPnElNTgzPS08MCh8MSRpfTclcHM0aWlQPm5gUHsqSzJremAkKi0tSl8xJiQ3RCQl
bkpCSwp6N1NXcDxMZjhHTD0+WU9pViNSQF9fd2g9a2RSQVUrUn1AIU5TMldqSWJYT0FsZzY8PFc3
UCN7aFkoNDdWQjxTY24KejY9VS1zalQmNHMjTl4rK3ZhMEMlQzckK1hoalV3WGtNVmo+Q2FiPGpZ
aE5mX0tpc3FsYU0yWWRPQT1NJXI+aSp8CnopNzkyX3V4ZWYwaGJFSUJLQ0hJK1piOUcxX0o5Pisy
b0JPRHBgSzI3WUBIUWd4a3xBfUZkSSVlb3h7KUZVM3hQIQp6b1lLVH1SQ1Q3OyF2bEIkUndNRUBx
SSZybkFON1RrV2B3ayo2KWp4PkYzWXtBZ1pZaDdSYHpjN080aGxIOEVXTXsKenNsTXJRVT5YNGRL
fDhgPGlKXkReZVkoT2pFT1BpaDU2QHx6c29BLUFhUHMmS1QyKWthWnxwc0ZgIShHdiQxTVFFCnpt
ZU8tVDgmfH1RcypjISVCVV4tYT9iPSlWTyEhPnpOXkdmdyVGe3E/K3JKVXk2aXl+TjAxUkQpK1Qx
Z154WTRzeAp6ej1INF4qYUdMbF4yaD5Me3FGUyRvZVpWfTNieVNZJnZHcXJoXkUrM29UUGhsN0RQ
b08zZU1OZGMpMiVfSzlsP2MKejQhZ0hRKmZke2tMRzNZWCFtYHM3WCZnM28tTWRKcylZITtQdDhM
RjhVQXp7Kk9RMX4qeGlnQTZzbzdka0NtYmEjCno4Z0M8JlZue0J5YiZyMj0tdTx8bChvaVA/X2JV
Wk5TSmdOSExWSXNvWlhiTFFGMjNYQj0mNXQwS0dhcSN7XmFJYwp6OXh9TiFMRSNneGZfQ2pDVkhx
amVrYV4xTj1henVvX3FfY0U/Ml48RGIwWSk1SHdFX0E5UiE7Z1N0dTdjTnBkS2IKekI4NXVRUDxf
KTNFITVNZVlZSHY3KEFNaUs0RkFYUDw2MitAP1ZQVkBkNE1Ia0ZZcit9ZmY1ODs3JlFEZlJoISpZ
CnpsZ1doeko8I2RDZk81RkR5eGI8andzdTBaITAwYy0pejxEREQ4PUp2ZUk0dG48QjJoZis7PyZ8
K0dfbGByTFNqQgp6YiNPPjd4XzRRQyQrWWpVSzIrWTxNYnIoazRLMnNadTl5eUwzNys8Y0RjYU07
QTckT2VpVWU4d3g1KSgmcDZsTF4KeiojakRqcyRqaCloPVFabCRJejljUTdAPnU5bzxaNHF3OypV
bWJjeEY1c2QoMTdzSjRXNUJic0ctJiNidXNLMHskCnowJF5yKWhCe1NNWll4eD9Sbn5uJTBWQkU4
PDYhRz4wc3p4QihsbDB8OStEbyN0RU1HWTlVYCpZeVpRUEo0O3JVIQp6ZT5mS35uWmdTaWo9SmZV
U3F5NW52WkE5PGBTJEl2OUFiNFZJMFBKSWJDP3I5JlUkdkhRNGhtbSoxeiRxcV5NPWUKekxRO0JT
VX4tVlkqTipUeyV1elk4dHZQbEdePFVMT1JqblZAUFZscnppVzgxVFo+cklvbXx7bFhgcSZjRipK
U3RQCnpgV0RfeSFwOWZaPiVgOFdaKyQoU2QxWjlfM2RgVEJsZGc1cjJiN3pUb1JGUFIxb2x3c150
TTk1MjF5enhqPUt8OAp6MHt3MUJYQDcrNyt0bWJZIS1qTGpjOVNfKCRkRWFrLXxrbldqUkhmM1FY
V2koajg0QWUmOVEmcVhjWUYtX2V0JWgKeloqSy1wKzNGO0ElVT4jMWRGPDFQKzhRcCg/ViltbEFS
V1gmckxgTERYK28pJFpAYipyanl9U00lYU85T3pNbzUxCnpWZXBQLXhaQCZ5YnRyeX1oWktqIU97
OSl6QXs5PD5FTUZOUmxNR0o5PEElYlorP2BaYmtaJFc3N3t7IWdXeyhDbgp6PHF8RzhVZDZqSD9u
ZSYqeD4rMH4+Qk1TYlp8fTR9QFV6bD82Y3AybVRhKEpLQl9FVnZyKWMkVD18OHwpKFRTZE0Keit1
dUBOe1p0YitMQW9rdHMhait0YmU2Xk1zNCF9MkRUNl5TVHBJWkdZaGw2dyRLdFpHWE9geUokVTY3
NUBPSFNlCnpzX0xSYlEpd1czcHdUMiZqfiVCUG9uWU10RHlyRk8+ciRgVmdHVldpTiZoZklUYz13
aHg1bXQ9NF9kXkhOcyM/Qgp6amlJKnYxdEVpTCl5TmkrcGJTYVR8S0swQG05bytfWihRWkVPbkFM
emUjKV8oX2VUTDhlTWNMMkY7YWJzYWEtb3gKenZTTiVkUH4xWl9xU2F6fV45WktEVlF7bXY8UShs
M0hUITkkXlZ2ME5QUDEld2kqZEd0VWt0UUEocm94VDkyeSRCCnpJJWpKOTtWTjROclZkPDs4I0ho
eWA8QjRgM1h7SWlDUTdXMzl+Y1BIcUhQM050U1NmQU5MPzlKciRIaC1VQD5scAp6WWFvQSMmV30k
fGN+ezhkO09hWjVAK2ZzIT8+cm1sdTt8OT42aFo1c1l2ejxkS1hjY3VCdWQqUEgwV04wQD9OSWMK
enk5c3d6JWRafmI7VDMqO0F1SnNxOHA7MiRlI0FKJj1wZk56YE13a3lfRUUjU1Q4ME5fNEpUMUZr
TDdKRD0zPzBnCno3dURVR24+cFY2MUdHfTNZM2dWaVlnJHZ0ZF9EPHQtekMobXVNSk5WcjE8P05B
LXZ5aHV+TCUrby1VKGhFYSZKVQp6XilKUmRlUmVlQzxnK3dNaiVTemdaQDAlNXh5NGZUdSk7KChI
VnAjUzkraihGQVB8N2gqaV9PflchTl51dGlQTzcKekludUdWQE1OfH0jWT9HN2VJSHxjY3BGRH5i
fG8pUGlIVmBga0syQzxZbmVzMzg7Pn44LXtqdip3Rjt4OVQwbkpLCnoldiFLYmlXKVNMRTJiK0pB
aDchPEd+bykqWl5lO3hENlVsPHlYSCRXUk16Xygmck5ibSZwfCV2VTx9b1hLTFI7Owp6Xyg9cCpf
d08+RW9eWjVsZ25xa1FTQWd4cTBkUi03UGs9PyFWNFhkOEtMZiRxZitSTC15Sj4rRGopYTY5OFlA
MykKekl6YSN1Iyh3YHpeXjlqXyNgeWNaVEVMZTcoU3xGQW4mdlFqTEQlZERZYFR0PWpGPzwxOSE3
QEI8NkJoaVI4aFJTCno+KEcpZmozTCZTVlgjMDRVM29FKmN+MlYtajR8O0pGZjFSNzspRzUkSE1C
ZnVSTzZFaSlBel4wV3lWTlMhMG99aQp6KnN2eEtsKjJ6cXd+S1EkZE1MdmNXaDs2TVl3JGViJmFY
XzZIbXVrNHk2b0g1dTtPLShLWHkyQCs1Mj9tUjgoWFoKenNQfWNKQHhpNzdRJGIxZE19NGM7aTZA
e3NeSTRNNF4hNVhtNEV+ISRgaEk7eFdWN1BoZ1ooMlJgeXMzanA8OCEhCnpGKTZZcUtNKmJ8UGA9
OFlNVmVLK3kyPGZSRDBRMVFeMil5M1R+QHxNZUZUMEJ8SSshQTllamslRCM0MmRrJU9Jcwp6VEp4
ejFSKDFFVFMtNllsMTZ2PVV7SzQmSGJOaEZmT355OypAbHZgRlczX35+N1ZmRG5vd3otPFBFRn5Y
b3ZTNGAKek9fXkI5Tnp+JG07JG1uZzJNWlA3SCk9e3tOR2prKy1FbmRNUmQ+Jl5NV3RsSjMhRCZF
LTItVTtNfiZ2TGUtZXV9Cnp0NXg7MEB1TmdsdzdrfFBrYHltem5hZihVZ0xwcFomfntBZ3EpNXFL
alVaNEVoRjYhNytJcD8je2omKHVfP0wwTgp6Q1hmQzVJZGpqKXNySFd6RWQ0ZEY+I25XbysjSW5G
MmdhcF5JUnZKZnVMYGJvOyFXaXVGJl5UdHhedFZ5PlU3bzYKellhZ2ZkTSghekhVXmRRcFpoZGFj
PWliRnYrLVUybEY8RDRibH54eDE+ZWlpbkU5fX40JkpvJUopcyt0JTl6U3Q3CnpBTFpzPmtBTHJo
KUM1fDc0UXBgTylUcl8oSXxBOFZlSml+JmJ5VnMjdSY1QUFqVE48bkh2M3swVHozTTtnN0MqQgp6
Ykc2SClLZz1aSGIhfCZ2UkokLUNnWU48N0RmXnlJXmkqQkY+PDYxK29wXzNeSFQ/KUgxQVVjdUdZ
fk1gUVl5YWEKelVRUFB4Ykp+S0JsfTxePTBAczFaIVZIYz9fOWtJYXNZO0Z2OyRMZVMoZmVgUktO
TkQ/U0V2ISo4fFghSytkIVdxCnppVmtmb2psUGVZQGh1ZllpP34lOGdwWkhPRWd6MmBkcSZAJWFy
RTtJQjBoMk5YUHcoe1BOZGZRYSFIWCZIRnRCKAp6eyRuPypDdT14eUFBJjdsRE0tfmdNU1h+WUxS
TFFReUV8JShMVGojSUdVYm40ODBXdWNpNUAkTV5td089QWNaVzYKem5gdjtAaCkpdTtrdTItdlEo
N2g2Uzx0aHFybyhzeHhGXjBuYDBhdVJMQlNJanZVRGBMVX4meUlScW1xLUAoaCtmCno+UUByOGRy
YyRhYGBFSTNsSVE0TE5XPFFwb0YoXk1AVTVHfXJfWHRXa3BBU2xMX2wxcil7O2J9PFNUKHFMTz1C
SQp6ZyRTUHYlUjwldGFKR2RndjIrbHw5dEhqUDMjcXk+eD49fDQySWtKfFV9PytQMmYrfHNkIXhT
WFg+bH1LWEA+Nn4Keks3JTEqIUBFXm4md0xHa2B6NiU5Nl96alclSSlIeSN+KlRkKW03Jl5LYnw2
dFlEeCk4OEteQUAlYUhvY0dmQntzCnp7YHwjfDJCKGEzYX1RUHRLZiYrPm5eaEBOZVI0aCtIOHE7
Qk5xV0t+cW8kVGpGcnZBaXdMTyUyN3R+OzN3RTMzKwp6S1RpPXA0d1I5T1E5VUd4X2JYM3RPeiY4
VjYmQEZAITJNNj1rPFZTYHFscEQ3SGx5MTdnQTJHRExZNkk/TjZDb14KeitLTjV0aks5czJHO3Nv
bilgckNOXkBgPikodHE3OTtJfl5HdTdaPkFvVGVCIXQ5RzVpb0c3KDA1fSY3OGVHSWltCnpmMElF
M00mZHRWR0c2Xzg7TzJWWT47JCN9d1AzVVh4KjRyWTRwY2Mpa0UxbFNhWjJ4XjhTWWRqa0NxPDZa
JHc/egp6VGFBRys+ez1BODRyd3MlR15VclFsVUtISUtAQjlTa19iOTVtYn5sZEtOPkEzdU9EJnpf
b1lkV3ZuZU1YcFIkQWQKeiU+dk1uTSpFdTs7MGNmJSplSSpFOWRrMF5TSDJLZippV2A0RlNxXmVH
ZGpDT1FycWs1RUF6ajVLVjRSMWJEe3BOCnohPil0Ukk3KCkoYT1fQyk8TWdWOT5JK0dtYypKWDA4
Sz82PkhaKFRJbk1IIT5eVnVMTnxLZnxjJGhjOH4hQERyTAp6PWFTREAmUTlXcmBAU280TTtIeFIp
eW8qM3h5MXMmVmJhQEFDPitUTnxCM0AwR01gKD5UezAjcT1+MipuVHtMfE8KemJWcX5CbG9KPjRY
TCtKUWwmez4yRyo2biEmVHApQGp+MUFKUEJaZW9CZEJhYkB+OXRtUlVNbkAtWShEQXU7P3olCnoq
Jn1BV0t5MWN9eHFvJCgjKGk8dnNfbj8lN3E4OWBOXyt7OFBDLWdKb0goOH1xayNgSTxiaV8reXlB
KVVhaWwtSQp6bEhvcUZ4UDNofXpCRU5DM1NjUl9tXyMwO3R3V2VfdkNjJVplfUJFfCokTlJjNGZu
NERrdFR4eWlvZFg8Q3ZEaGIKeiElV3I9KmFQXjxzaX10dj42elpIb0BBckpGdnNeWkJoY3FoSlB8
S18yOXVvfi0kS25fPyNGOClWd0lpN00mQEtiCnpEQ0ZUNzwqKHUmPTtsJnxGVXJNd1ptVVR+KnE1
XmllZU01SG0wRmV8MD9id21JZSlxfERNVVkxSkZ0ZSYzTG4hQgp6MmRhVV8wZFZPREVXKj9Ae2xQ
R1pWVE9RemlARSNiOCFOPjVEYEUpNmthJkVvLXh3ZUdeLShgaXt2ayF0cXE9RWwKek5tIUx4LX5o
cVopLV9rZGJ5T1BlekxNa3VQYU1ETis1dzxGb3lHNUcxfTRKNTMpUjhBTWkmR2t3Y3w5S0Ihclpn
CnpFcylaUzM8MU1IQ3VPRTxaTFFfekBMTzVwYXx+fkVvQmQ+S0JUOCFHU2BFd3VXQ3ppJWRVKHZ8
NVRSNDYoOzdCVQp6NjhhanRDM2xvWlBtfVF1UT9Mbkw9SCRmWHZRWXA0VCk4UG9PUTx5PEI+UUB6
RmR4aG5hVE1gZXY1JGw/MzVOZDwKek48KVp4U080YnJuI2JpVSQlb3dnYXU9eGJpO1V0bWhpQCQ/
cCRyLXVPT3F4OGlrZ3QmMzhNNGdsPCVLUlp6SjkyCnpsYEt2SnRzODVrTHpYQ2l7O3t7QWZJaH4k
YWRRN0xZV1krb3NkN088YFM7OHNrcUI4diRxd3gyLXlXfVBlTWk0eQp6QDUlRTBMYWNSPEJKdjVF
cTAjKlFNZWA+S3FKQThQTmFrJWhWZClVO3t8IWtnaUkqfCphQnw4VXIhLUJ4eUNHUzYKemlCNS1D
K1d3YXlpMV4rPkVMM0V3VVBCJmUmdDlnOyo1bUFCKihYfXlxYGBqMDVXZkVRRmxeQWdCPDt4YjRa
SEYkCnpja2ckV2lBeUtNTnhPJmhSVDhrYjVCIVQhWV9iM3tnczdUV0gpWjlaazB8azMwVWRGcSF9
NkRJeH52ZzwrT0tyXwp6YGcqeUlVOXJMPV5rJD94UX0zVD8la25pemBRLVhKcT9DXj1NWEVhRUJV
Q0VCejt+R3FPWWJFWSRpQGpoPzV7dVYKelB0NDwye3piVzNHMz4qZU50SHxaYmJaZG09KWloTz41
JSQ1diVIZ2dJRiE0Mnt2RXcmY201SDlJRX40cmFte189Cnokfms+SmVjbmZNLX4qfThpK2xvdj5K
ZW4oMGhrfCohYlNaUkJrWmAmNkJrQH5Ea1U5PWZyKlEkbGM3JUste1ZzeAp6dS1Lb2ZMTkhQMjU9
Zm9FVX1ZJXl5MG0hS1FqSEtMX3JifDAxbDUqPkB5QilISytSVEJ1VDs8QVZLT2NiKEw9fTEKeihX
PzVrRnVDQiRVI0kyJjUlbT1nT30lbHkoa1VHeC1KXyZJSXooZEI9bm07ZE5+QkJhV15fJHBiYXl2
TU49ciZmCnp3fTVvcTxMYGEleT8/PlpjQWtDWFF4NlNgbWA/cXRidSRYMFdVJWNrYz17Kk08KjBn
YXF0aENIPzg+UXlePX07Tgp6bmxYeShXP09xbmxWWW4/KHM1X29vRFhselJTWWclOGNDcTBCPSEx
Uyp6OSN8cGJ4KlJiWCl1KlNDel5WI2B0fE8KeiorfTF5Xj1hZl5sRnUpPGhVU1FWOW44JEkhJXBM
NlI+Xm9FSj98V1NNQE43b0h2b15vQ31ISmg1dEVCbms+QDEzCnpKaFdNfklPNVFjYGNxMkRWcmxh
blI5c0REODxGNGglTWAkZG9BcUBYZSpSPjYjfnorUEdTZmtTe3Irey1Ea0J9LQp6elFJVk9PJS1e
X1dqb2lQRzBRUkElVClmfjxMViNFNSE8QEMrSlhyaEFMLSpuSCZyRDZlQ2FTNWRvY281MiNIZXQK
ejBWWCZ+Sj9OPXRTSCU9X19SaSY9dDxUeHQqbD5CUWI9TE1McCYtI0EjbUB4UzRedGJIVWZPfj8t
ZT5ZenFCYXleCno4fktlTkVwRU09JSpaTFopflBqM1ZNSSEoNDdDfk1XV08ofSZee2gmQH1gOzRF
SlU7MUhEX2V1a2ZWUTwhZzE5VQp6ZEVHSmFrYl81PW4tbDEzOTQofTItQmVeamE3PTdZJm5+PWdF
ODBoPkQqQj04Y0h8KlImdWReIWdhRGV9Qko1KUYKenV8UH5pT2ptT3Uje1ctcjVDJFEhU0s+blZR
SEg5NyRzS0Jhd1E7ZD4yNSUzJXd+Q3RtJlg7TmBqZ3k4aHFQVFAwCnojSWNjfl9VaHhPJTBWVnpE
USRIK2NYeyUkVU1sYntOQiVuQyVYfUdVOFB6Zk9BbHIzUXdjS291MG1ZSFNWRElnbwp6T25aNVdX
WS1tbF5SMWVRZXwhcWMjPHh7Z2BLR2FvaCRmZj9qelMhUE1lP1JxdWlDajNFIyFOPU59eTFOOXFW
cnYKejI3Sih+UlloZnlCJGpzdXBINTdZdkolKj01fmBmVnhnKiQqZDAmMm83ZDh2JDYjPktuZkRH
MHJlYHBwY0Q2MlVpCnoqbVM8cj1mQ0s1JDFaI2ZlaFR2MChubE0wN21ob3dKMFRaJU04WHhOZDlR
VFFwdkMtR29jMTEqOyRqaXlPd30lUwp6TTJXP3gkbEQhTjMwMFlpTzhXRS1HTWg8NTJ5UElSaGxu
SipUdj59bS1xOGYyPjhPXncmIyZrZ1ljQk8rZkx4NV8KemF1aUBuYTNYVFB1fmFATHA8SXV9MG8l
ciskfXNSNmUjWXNWMnpHXk9GIXNnU0p3NDZGU1VRdWJwNHYoJUFfPDUrCnpCcG5LeldaQ1gtP1BH
djhiaXgoMjJlMnA9T05EeCZXYHxaYD0lTGFgSVhwSnJCZmQhO2UpKzZrOH1rWW1JaUslLQp6RyM4
QlZaWHElNSpzLSNvMiRFUGJTZT5WNUFeIVVObGpQMmxNWEl6dChSb2BCdWticTxQU2crPUl9dSg7
bT92PkUKenZ9bkxpY0k5JkFuKXJEa2g4fSYodzhGeUlfMi1Qa2M0UDttaTI/Mkh6bjAhYmwkQ2x3
JWdNKFQ/Zj4hQDMmWHdpCnpRcDcqdG1yY2puRnVkUkFaTzteTCUyaFRJTXloWSo5TG5wTT9YVWpK
UDJSZUhJeWhUYUYqPk5IQTA3K2wtZnJvNgp6OXRvV19jQmdWJmspKn5JNXpfMXtvSTIqVkxgbFlX
YiM/aSkpfj1KXmdpejNxP2JpRGE5TmVTcT5KKGRiUV49NWUKekw4dnBuRmtQZHIxPDxnZks3cUFA
UiF3WWVwTF5uciFvXzBVbGg8X2h8R3tVVGpYUjduVzROfjlHbCNfazkmWStKCnokaXVgMXJ3UX1y
RjkyZUVuY35EVigxKmBzU2JaKDxOXnRkYUszQFhRTUk9MjFmYFkmZUAjMiEzenJRJlhXQFNUJgp6
dkJ8OVo3UiRTN3AxTXFAJmg1TTZvNkMzZG0yeEohbjJJRFR2O2JQeUNoMk03c1N5ZjU3K3k7dzZr
PyQ5SEQrN2AKekBoI0ZRaDVaKVklQE4+aFFSeEM3bHdkWiRsIWF0OW9gSTZOJH00QU57ODl0V0FN
QXQ0YXxPPzh6RlpNeXpHMSNVCno/Q3Q8cj8pX0ZKbTd2VmN2K0dNI1BIUmZKcUpJZWNuJkAyOUR3
VjlrKWdsNV41PUljTWtiUHo3OWdQU3pUZVliQgp6Vz5FTi1DLXcweD5kTWJGQG93YCpvLU15enpX
PlRjP3whTm1XWX5zOXQzWndqOTFKPGFzZWhlUTB8bWl4amp+K2AKel9eKUg4eilhWVc2O3NTaGVy
bG4oSH5hQG9SfkRMaWRQK3RGNT11VihVSytwbk45cCpNcFlfJGl2VXNneU1iZnpoCnpePzIzRlE1
ZndvUU5ROzRnST05OHdAZUlrR2twJjA9dDx4cXFEczxfTTVKQjNne3VuJFRrMmMjJDkkUU9edmJB
eAp6Y0d1b1pNUjkzN1RAZyVwYWhfR0U9dmJAblUwQVI1Kks0dE1mUXJMcXotPGNEQUBZbXdNO0kw
PHRGZTNMS34md18Kelp+PnVMTDBMbUxtJHhrenJhUG9zJVNMIVpZSXRyM1ZmPmxZQm8xQWpuYmdf
VGdGZiQ3eXwyRk5KVyhZVEtoU2UxCnooKG1CQ3s0eEUrNHpxb0N1JGhydGNZJFN7IUZGbENQLVNx
UFVaNm50dzx5WGJrMEhhIUt8Tik+Rzx+S2J0WWh5fQp6emVjI3ljSkoyXzNwKEBnJiZKUkoxUEcj
TGdzbCpEdU0xOTVyeD9vaFB7UCZzc201TygqQno7dGVtLVN0SSlYaVYKelQ1d3lvZDUxZCZUOD5R
TD9ucmRsMiotJklAS3M2b057SUAha0U8KUZJYDI8Pk9uNlc7NykrV2dGWUtwWD11UipxCnpzfX43
JFpzZzAjJUVTJmNhSDQ+ZWxtNV9AZThjOXd1aEMoeGgzfllzeDNAeypaNypUPyZUKkdZO3tzXyRT
MG8oKQp6aUQ/PjwhQiRqNUYwQWFwWUtEbSZwJitYdShFTlQ8SFJYejl2fVNBdThlbkdsWj1TTHAz
MSooMXR2fDhMbm9Lcz4KekVYdzY8UT4tMipuN0BqWEBwelB+WTVhcWkmfVl+VDVufEIoKntCSUF2
eTNrWlolWEJuT1dqMD1eYUBwdHU7RTliCnpYMGs2N0p1eWhNbz5vQnQ0NjZQM3MlPU1SMDhYdX13
VV8hPEEye1J+JSs7YylObVhze3dmOCh9bUpmbXFje0BhNAp6e2NqUGZsVjtyRihDX01MMzx+MEZq
PHd7SHdGU2JwSlN5a3tocmVRZGt5TXtlcDN9eDtWJTJ6PSMlKyVKKVJTckIKemxebHl+PV5rdHIp
cU80TSh4fmtQak1DTzd7KlMoZnVHLXxLZEhEPlBASkZgeXk+T2RQOSQkSWIzfEtGaHI+OGVWCnoj
cFZGUGZmRyU8IXkjdGtvZU5ASm58eVMlOyE4WFNvJDsoV0M1bXlXVkteYmdfKT9BUHQ+WTQoRXN+
cC0pU3xOJgp6bSk4K0hJKkEyPUdBI3FvQUh0cSRUVDxNdXhBT3IwczdUaThleEhMUkxaSSNAVl9C
KGt6XlFuaiMjbGdWIXpMJm8KekM+VGR1T183PDl6fEFENShXPStBNHI/OD93PHNHT2E3UjJHVSV1
Kn5UWDJkdnEhQ195M3U8dmswbHkwKkUwSWNLCnpRaHhvXnVRNzNKWllvUnc2fWIpLVhLd3goTnMr
QE5xWT10PHF1UzJIQ2smP31eVEZJc2pUe1FDRXtPWUU8X3F4Nwp6aih+YEtmJjQrZXE0Q0pjRUcy
aVVzJlc2fSFIfnRUVHQ7Ykp2KzQxfDxmNXs2MH1VezRNe1VDX04mcWJLeElOKnYKejtEfT0oNzFo
MnkpJGpoZChQaHgqe15oXndwLWYkOCh9Jm1KODkrYms1Kjw+bWMoRzJaZ1MjOV4tOykmWStlTFJE
CnojVlU+QD5oTHhWeXhvOXBuTmZuaU8mdT4lfEdfPFMtZ3BIYFFBaz1wPX5AZWpGYUBPIUFQSDNf
QCRAVTUqX08+YQp6S0p0amFYUzZEPUN1bERaViFUcUNWdmc3R3opRXo4VWU1YGw8ejhFUSVOelZa
Jm8jZyRPYGx7ZWAyamdpXm9sNiQKejdpKFUyZmhGO2k1O0h3Iz5oP0x5eUJlfHhUaHN0SntVR3w3
QTQ2QmJlVj16RFomM3hKS0x5bVY5Mkc5N2x5Xj5sCnoxRVM9fFApfE4hJT99cXVnV0pRZ1lkVShF
cE5AMHhvbmoqPVpkaW9nMFJXeUxKMnd1KGMwdSVtTSFzeEo0Kk5vNQp6aDdjTWZYX1ZBckMja2Nx
LUJsQkNvTkR0VjhRbXI/V0ArWUMkVElFKjU+Smh6bTQ3N0dpfjFOKS03T2Aocndlan0Kem4lPioo
e1FGPXVPTGd6MyE2UVVPdXJsMDtRNyhwSVF5cE57MXlmWHtJfHI4PWxzezQqKDk0V1d1Nn1fITQw
a3o5CnopQ0FsQXJhfWx4eihRSChsd1N2YUwxTkdiJjkjYyE3RnYmOW9XKH5VJSMpentJQUIhbkFp
WUpuKjtyekVOQkJeTQp6OVI7clpQOU8paHNONE40MSR9SHdLNzY4RUBNbCY2TkN1TFNMfWs9bUJE
Z1NCcGBlbnZQdnEqZUNjRXJGVmJ6V2gKencxZC1mRkx7Mj1wR0h7OWc7cX4oNStKLUF4Q2xsMD4o
LTslUENJPiZ1VXU8NFVqMktBIzJ7e2JTdi1ncGFNKFVmCnp2NnhgQzdYJnlmaytvVko3YUVPalI0
R2xjTFV+PnRwQDRhYFUhUyZ9aXN1M3l0JmVoPCNTUC0+QV4/JnJ2P1I4cAp6eiErSnRadVVlckht
KHBYI0hNWkw1ZCg9RENxb21NdCMqPFpsKntAOWtiPiF8a1UpTEN5QG4lfmdJP1FuJTRSTmwKejZ+
JDlwa3J7Y0laJlhyeEgoNSgwQ09MbXoqO35WcWkpOU9+WlBfK3Q8ZjtkOWZfKkA0a3ByO0ZufFlL
QEt7c2IqCnp2VyZCWnVINlgqYFNEdmFLaWV2b2tpJFUra1Ypcz9wOVcjKEJeN0t6d1J3ZEs4Q2hp
TXdgU25oJGYmNHJidUFqZAp6Vz4mazVXMkJMS2NFXn1WPkBmI3loelJEJUg8fjBpOHFnaE0oRVBX
ZjNZS0BUV1h6TU1GV2wzOztDVVRgJUcmPHYKenVXfmMkVUxtRGEoenZsZU4qbEh9VWtheyUzN2x5
I0c8PiZ1eUxLUDlqdWlTLSF3NW9DZHJvckpQdWJ5bVEwOXNgCnpXQCQhaTN8eSNfKmtyKk9GfTRy
UlV6MDdlRHJMaTt0ZU12aCh4YzlWd3VHKXVYaCN0XkFjQj1aWDxvUiVBNXRnWQp6eysyTChYa2RT
e1ljcWBCbFFlWis7bkNiNCgmYDJ8QDlUeHFybWcyRUB0bEo8b0V5SjRmQjRQNyZVOTtWRmlMZCoK
emhWXl5CZWcyd2lvR3Rza2hMcDRAWU45ZFFYQlRqcUVVbX5iQjAjVFphaVc+SzJhZ2VPRjtzTVNs
fDkhKHU9eUdrCnpYKFU9alE4Z3hTLVpRZ3FeMypvdWk0RGcxUzlwR0Z3bH49bTNJNWhnMVJWZE9V
e182akNJbjA0a31iKW1xVCtLawp6QSRld30pdFlDaW89fjxvcGE7fmM/Qn4jXzQqaEQlNjB+MXg8
NTVuXiFvaVYoemZ1eUorWUU0QytkJDIpRDhydXcKemx1UGcoI2hleWleKD52XmxLOG9fbkopVnBf
eWtUejhQOC0jJV4pQTJJKGtBMTJfUVYqK2RFS3RDPTd4VnJDcXRjCnpaaH41MD9qekdaJHVMY0dm
U0J0bDZtVGlVWnMjKlgtKDVldXBJXlJweUh+eCkqU0hgekEzVkpuU1FDIz1PSlN9VQp6bTBjZ3V7
KkNtVEVCVkQrMDc2dUw0NF85TEg4XnhjMkNFKnRlJF92fiFqbCRAVFAyUCpMZ14jQFl6YyV5YWc7
ZVUKem1sb0hiXmQmfFBzQEI2aj9qdyoxNiokPlQqayp8NFEpY3slO053KlZlKSRjPXhGN28xJGVE
UHJOZz8xJkh+ZSU4Cnpzd0N8azg5b1YxcndIWGkpSWg4PXJoQEhBcGRmJHZPQ21zZ2ZwNiRnKFMj
NTNgYXJzaV9JbTBtMmo+Tytqdz4odgp6akNSUmpKcyVyQUhwQlZkajg4V1pufU56ISt1LUpnI2Ip
ek93X35mJHRWYUt4bihvOFAyVTg0TkF5c3A4ZSk2NVkKenplUnlLPilUeHFfWUl1cCR0dERsOTd8
Pm9HO2hEaVRvdkMkJiY7b0pwJjNYPDZGVjQwIylUdz8wSUcjcDYqWkUjCnoqdzhkPTBhUTQyPWtu
TGMtfSZFXm11JTUqYU9qM24wIVRAYz9oc2FVZXtPQmJVODhOfD9HIVAlRHd4X2hiYW87ZQp6ZTI2
b1JhMnROeGYwRElYPlM1M29JTE54dGA0Sk5oP3VTX0wmYz83aXJuTHc0UVVTdW1oUk9PdHl5dm99
c3J3UUsKelF9eSRCQz0zYzdffm15aFEzJHNwaVR2ZS1gPUlQQCMteSQpeTVHNjhxSDRQbDdJQkJl
eXlgTTk3VnJ7TkBod0c/Cno0QngwelcwJkZqY340cCgxfnBrfmtuLTs0dXR5UEFEMkpWNmkrNURX
XmlfTys9a2FQJGZRVSU7QWV5ZnBZKnduPAp6b2RQc1dHeHR7PVFZK2lyRmM9P2skR25QXlI4PS1p
bVlQXitSUDkqTl9oalgtY25nJiY2bn55UmU4JDklay0oVnoKelIqUUduVHFiVHhVR0FRfCUxbE87
I0J7UHN0QGhTcTMwe1pkaGdpZTtISjstPkVNJlM3TSk5OWI/X0Y0MkdfYXFrCnombiZwfC03Wjkh
SU1GPHgkbmgkXm08c1lrZzx7eHhxNVBzOzVoR1RMb2gqaTRKRGB7SmoxZWh+ZlppX3N4fFVhKAp6
aCRIJHU/VzJsWCpqX3Biem1fPGdAYk5zMkU2MGZlbFlCRU8xa0lZc0hsRVBFQj1wTmlEQGVJU2N1
MnRIZWstYkcKeiprdFFqNGZ1RWl3fUBWfHBBJEhrQE89JUw0cWUqWD1uRCU9Ty1ZRmJ7Myp0Ml5Y
QFZYKW5CcHpANSVXX2lgKHd0CnozX0ZwaE5hay1HQilHR0s+ISVFUURLZkkkbnBxcyFySn5YKCRI
M09uNTEjX2lLZU8yUlA/THV+OUYwR1lGPGByMgp6TDFWfUZgdUN2TEopbTRkZCFQI3NDQ2U7Rzxk
Yz1lQyY8bTk0PGRTUDBucnRtcU42OTUoN2hhMy1nO213Ri1lcX4KekhtWkt+MmZ4N3A+cnRJUz4+
OW0/VG13NHhDI1l1OC11NUh0Pm8rfGxkVSR2a2V7RFZnWERmTUJrb2h2cFBlcFMwCnpjWENZUF5V
ViRBKjZBU0xwS20zZmskbClkQFA8YHhnO0xQZlVvP3YmcGE+I2QkT0BBPXc0JCkyTC1ufH1UUThg
UAp6cCpIZE9oKmhTdU51UXtoTEt3JSs2bEFQXmJlOz9AY1JlfSVaOEdwZyorbVQ8WXsxOWd1MDU0
SitFLXFfV19va3kKemZXZU1NI01pN2VuZm1icFBSKXJjO0A3P085angja0RnOU4yZypzKXU/bmtP
MDBaIyl0TDVZPWs8a0dabjZReG12Cnp4fDF3Z3gtfEFDMj1gQVBfVk9AMXktIXsrMmRlWTVAWVpT
aUJaSSY0ellJZ1MhQktEd2RFUmBzJEtaLWNAI15mbgp6SkBmMihfV3dsWkNtfEAoVH11ZnlASTE7
ayZ8a0ZpPStkNjg0fVQ5WUVKSVUoTVN+JXo/eGI5ZUZCcXAtZ09RZ3sKej1HYV5DIXBUVmc5Z0VS
dnN2XzdIS1goTit0aF9XSD9SV3hUditje1JYcDsxcWUmRUd6PlJLQUVpfDJLNyZlSl9WCnpROUwx
d2cmJVNzRTIpb1B5OUtOfmxASHk5SXRCQWItfGEtI097NWtLYGFaSjgmVmxkNj1iZFhlb2R5Y3dD
bzkwSgp6NWY0b0JtTk44WmQ0KSRQYmxZMk5rPkx0JFdxOzU5cSZfYGReZkdReVNTQCtLPChaRFl1
TG1eNWB8aVRJPWNSWFgKel9PRyReOHg3QiN5LWxUWXdDREtpU04pRmB4SU9QZllJX2QrLStNTFlP
fjFaP01UYVlfTnBeNEdMOEorMEUoamZNCnp0e1U2JGRkKzg9WU9Wdmp2dEtCYW8lTUdXUz1sa3JF
KX1HZUwhSzRKTVU1PnhjMC1eJih+Nzd7LU1DKXlQZWZUNwp6Q0Vle2dsMG17P1JDKDI8eElVWClv
Vl9TbTBuXnBUKk9YS05YRzV5RWZfIysyM19FclBNbCZDVi03VCNnOUZkNmEKenJaPXp1Q1E9OX51
OU51ekAqNmtYMDxTT0dfNTJ6VzYwZXYlZ0plQjlmO09vNjZCcTN8RD1hRF9yRitCO0coPlFxCnpK
QF5WSDAycVg8eytjfGE8NDg7djRmJVV7QVRJa0dNdVRZTzVveWVMc0hebWckUU93S2Z5c2A3Z0Nv
UEJATypYRgp6d1BVMmYlJVVvTStGflVYanFedEpufFRjKWtndVl0TTRXSTJeQldTK3h8KXY3TElw
M1g4ekBBSGBkKTV2QWJUcXUKemV7PXtPOShrfVY0OWNJTSNzTFE/X0FMSUticEwkJUZMcF92PFNt
KG5vSUZtamMzTXUoaUdrTDk5djZWOU47VWsrCnpvMztiWUQtWE5WK2lYdSM2NENGeD18U0h4WmNi
aUNkZ0VnQiNVZmhUUyQqaUJsb1lhPllqdztXZE5BR25ibj56Kwp6eFNQN3N8S2o5SyVmOUpZdWwz
PE9KcFE/fTwxQnF4cWZuKVlGZzJ1aEheaFNgOGAmeE44emlYNnZ+d3d7MnNeJi0KenNLQnVxOER2
QDVJS05uRHtyRVpxd0BhNEJsUFYpYHdhYXNJKTdyRjwxNyM8b0ZlTS1OPkZORzdLYl4mPz0qMTY2
CnorS01IUiQ+I1pZTVNjOW94di09PGMxLXYkQEVoKEplWF88KzkpTTFoVWhvdiU4K0V1aGt8TTFm
e3dYIzNYd3otLQp6NFU9KylNSEo2N0hxOy1gcGlLTmQzJlNYNnFjS3Q1Vm0lT1BpX1FvJS19fHgr
dExOWVhxQ097TXUzfXNvUWEzST0Kei18ZXNBNUskIU0mRWJyZ0ErfT1qZH1ITTw7VUxQPWFVY1VS
RGloRkBJZl56SGg5Y0h0Q1RPI3JhRlN4QUM2QFQjCnpfIT9ib2NuKnNsPD5+UHhpSEowcjNWV1Nz
JSprWXlta08/bCE/anx9ZipLOCNDUHRqb2BFMVhYVVlDPTlQPXo/cgp6IXF7bkheXkdRQDdAITYj
TnRXWkBYNGsoZF92PWo+N05qRFcoOU9KdzZrYEdGOX43U0NMOVNgMEAqMyVxTlhTb0AKenlEcWFq
cD0tQk9SVC1TZWVBR1NocH1ufXZOTnpDRzt4b0ViRFYjNil3dmQjME1LdSl9Y0BFO051IX1ZJUBJ
aktoCnoxbUxaOTIyNytMPWpiKjMqOCteXkhmfG45aFhKYSY7JHAjZlFmTiEpaUFXekBjZWw0PTcq
NDR3PU5aTiYwYCM8IQp6Pks5WDRvOCU0OHw5WXhvZ3d9SmFfRk9HdXFlN2dSVmRYWn10dE8qbzck
Qyhyc017fTQoKld3fmxUb2NTI35neDEKejVGUms/KllWT15vPDJRMkg3Pyo8MkFVNC1VeSFoSzc2
QG5BTHZjY2k+SW07Q0Z+TjN+dHFxTmh2Qmt3cy11Wj5BCnpyajszKSNxIVE5dE9GO3BUMG17VTFC
QGFCP3F8KzdsdXcwTng7ZE94ckNyd21lX19kSD94M0VII25lPDtmNDUmcgp6NlcySkVKUXBFXkdH
SiFtOzdaZmQmIzA7SnIqTFZETWtKYzhFcmNOT1BwOD9BN0dWLUU8YE4jUVl7M0ZQT2NYRVMKekNo
P198UCtEZ2lpJHQyQ3NLdXJlaz50QUVuZ21kfmw2PStBdG8yeW07X2lBUEt8QHI1IzhOJGRINkw8
PkVnX051Cno/b08mO3N4ei0lJjN7bytCQTg1WXQ1NU5vP3tUSWs+ITtzQG9ieyE5ZjZ7fkE3RlFO
KjVeTT15JV8wTSNNIzNaUAp6YX42Zz0mcDEyRnMxdz17VF8hN3daUilPI0w3e21fbkcte3teT2Yh
IWJ8bE1nIX18UCYkNExMbDZ3T1RKWjlHZ1UKel9hRUM5SWdQcXtHZ0pnUEIzRTZWNDVQJnhkPFVK
NXVuSG5GciE2JHxQQTxWeEcySHdCTDE8QE5vc3kqZ3IzPDlqCnphRFlKS3RNckQzLWZ9cX5ubkYz
bFJFbmtvb3w0TF9eIW1Ib1UlMisteyhsPDtiSDZ6TWF2bjx+VS1QfkhiJGJYewp6MkwkTXQpS1Vg
QElJTU9MQCFhRT84ZnxxNmoqQ2xPIzc9JXFQTVVoUypqP2Rwd0c2d1JhOSFoMk82M1FuQCpmSXgK
ek5oek85WCk0c3tJRjxqQlZuTUk8bTxITm91Y3FhPEVlUlJPX3RuSnNsczU4XkcxKW1FKUt8QkNU
ZzM1YnVaTGZkCnphd0ZZdCRVcUx6X3R4OVBleV4kYjAzJnxPND1KSXlZOzI8JTY9azM2ITZhTXBT
VHJScGw/KV4pYHE3Yzk2LWFtfQp6ZShVJT5hZiZHS28+KiNtPDN+T25aKDZRI2dzVzwyam5RIS12
WDJnSnJJPWB0e0NOYk44YWVOa3RqWjhZIzxyWHMKejk0PnoqWWwtUDwxeXNqSyl6JTNOdEMyPGxp
aXRuN1RVM2g1Q21YPyF3WGNfP1RHOWd2cXkrNW1pNT5OOVBAeFhFCnpMfHNHOChLZDJIPkl6PzAq
dlBNQ3t9fCRNX2BqdXFUNiFkXlZtYDRlcVU+JXc+PjZ7dTFXVGdNVUhuc1NZOGxUSgp6JS13ZWo4
elVqYTx0NHR4QDVZSihMc1pnKjliO2g9Z0oodGgzK08lWktBMURhTEd0WVE5aD1tK3FRMHVXPmFy
WXMKemlXO1hxekUxR3U3QHRPbSNaNWc7T30+NmkkaDJrVHFXTGdDZDc4PGJWZGtGbGk3UGlmPz16
b1FYQlQ+P3F2IzZDCnpKeFJfIWBwQ0k9Kn1XRl43YW0tJnR4bV4hYyE1V191WFZCZTZgR3x9Ml9P
QGBXRSo+R0o4MnpfKElNTkZHZU5ZfQp6KW0/eGNGRV9PQDdsTnUlKFMpe2s+RyRHYFNjbk5WbDhJ
QVFhPUEwQDt7MWFAeiFPPT5xPiQpU01iRyFUUEwqX2EKejl1ZVF9YD14TUBfOVEtQkgmTj9VVTFP
bzZmMmB8JnV3clYwXjZKZ2ltJEp6dGFganN6PWRCb2NvKjJvalNAUVc9CnpgT0s/LWQ8QjlaKHxr
STlgSFl1dmltakRFRys5I3crTW4qTk5fcVNeQFE7aTZBdkdNPWk5R1ZweVhwblIqeyQlbQp6aiNN
IWByOz00JD9DdmtFLWtWT248MXh1O0dEUjFEZWFiVjBuOF5PcD5FUCF2IVlPVFFib2tBQ2VhN1Vt
dFg/bEgKeihsLT0xcEFBZjE2X2JOem11ZyRJSmtYd0BsOFh1a0ZIfjklMilNLSsoaU0kUiVsQiU8
bCUyd1k2T1QpRz87ajYxCno7dXgpbjxQWTxKNFlqRiY1UH0tWURFYkxWOH0+MXNBUXVuMi1IP1pu
QityNHhTI0lqc3xDUHBFellXVkluRDY3Pwp6YDdvT057RE5CQXtORGNDI0JfYTRUQlpVfUFCWjhI
aU4kMEBOUVBARzh8UGNiO3p2eHlMT201VkVCbl9ReUU0SHwKekNEdk1wdGV0WTV1QWFORWN3M1V3
XzU4T01KKDR8OHNTOC03Zjt+R14ocEV9P0M1KE08OGB7M2F6RTdvMFBAX1pJCnomU15QSShxRkVF
Q3ImaHZ1IUc9cExSSVpnS1JrZFQtT1IycXJDWGkobWkzcXNeS0xEenpucWZgIyNNYm91QG0tQQp6
Tn0tPDEyNShaRm9wYHVRKk55fj1XRF9gRFNKM194VVVLb182VE9gNGVkWGhYIzw2e1lYPm89SEU4
KUEmJT9NKGUKejl0JGRKdmdgKitSfVJIdGUmdF9MSHU1MEotJjVIfjFZVll+K1E+VzN2PSt4byVK
fSZiai1RejtLM0FjPiUxRW1JCnohUWJ8Mz5Ea3tTZnR2Nmsxaj1obXtzWj9tP3VBbHxJcXRGT1Ng
TXlQQn04OGJYPD1VJjNRM1dGMlppczhLX0A9PQp6VSpiYytDM1o3fk0jODIyKnpHVSl4OEFNI1A1
NmFkI1U8WEp4MFlyd2E1fCMjeyZOMWtsWntKSG82VlJ7aiNXeyQKeiRLZyZObVhOLTNZeG5DZmEo
cURiM3V1ZUwzI2gzcEd1JGZxP2syaTlTfn1wMVg+USlBM2I1b1kjaGNVcGhBeTZJCno2an5FNlFi
VUNwJkdaVyE1c3s5QSg1VGlFb2MlOHVBdmdpbkotdiEpKVUjdD5NQms1Rj9+RVFnKiRTYmV1Nlh2
Nwp6bil2eDt3fElVTlp8YWo0I0dEKnJMclFTdFpKVDgoKEpxSVNhSkR4PSZnKWUyMCZCa1d5ZXxx
LSRGcGRHX0l5eFMKekNnaHpwZHlRYn17aSgpP0YoZmVZcTNPNm1hRTwoOERAaGZ7cjJSOXUzMXVI
e1NkZS1ZVn5+WShHNklNTV5UJGpFCno4cihmRCl4XihEX0pjeDx0fjY2X2lUJlFsO1JNPDNJbENH
V3MhRkU3T01Vb20+JnM8bDVZckAmMmt2a2BYUT9RPQp6eVA5Vio+Yz4hcFFLQ2Ald1VUYUVhYiFW
WnVLK3wtP3g/Z0NzYyZrQkQxTWVTSzVzT1JOSS0pNDVFNlV7YUFmd18KekplWGspc2B5Sy1fdWFp
O0VgM1hlSUQkRUBweEFlNy1QSz0hSyNVQyhzPnpLb2IxNE5IKVIlfSRWUXsrSm91UyhhCnphYzJe
IUYoSzFVVCFAI0V5MFA9UWM7TGVGdnJvWUVOe2RAWmBBNHlyZnk0ckNKNCNpMUh9Jl5RTSUyJSEk
RT5Pdgp6YGl5KEAyVUkmUjIzZTZ4dW9TSGIjdCkhR2ZxQWI+U2BPKSFhPFU1VEc4U3JoO3lZNFVL
SCZuSiNlfTgoWDJyaEYKeldraFQ3RyZATGQlVilPTVN3e2pkSClFTCFDPHp1MjJeJk4za0hvSVdX
OUotRVNZTW50Oz5ndTsoZ21OVG9VLXpZCnpEe0V4PSEqPiZ9P1BQb3poM1okKGU8RygkaUdXVnJt
aFdjNj90SSspZjE9WmNtaVM3Syh+O3JySmF8SCFrP0c0Owp6QUptT0coXnAwdWwkU1QqcSp8ITFn
SElZYkN+JV9OJmQxbWBQUjRhUk1ReGtRb2hCcW5nX0M0fmU/JlM4Nzc2ejYKemkhfHozTGBMNEk0
fjBPN3VkMjMoI0ErNHV2MSVkJitwPGVeTVE0T0FPPXJNeEJfMVhQWD0hYCVJeEtqQWExMSNhCnpu
YWBWcz1qX1IyNmUoRWU3O2BmRCUxWXlnJk4kSFg1eWBJdSRyQzlXQH1JNiZVKSNCYyRAVSk7RChS
clVVUlEkagp6R01ZSmRrc0tOa1RTKk88cUFNaHY/dEt7eEVyPj0kKTwzRyFCN2hMazxhWFJ2MG0o
ZnFEZmNZNVEpclN4O1h5cEMKejBeN15KZDRCdCp7XlVrVEFLOXZHb2l2S2lvd1o2ZD4wMXA1Vmsk
QmVSOCopKy1tbkl8JWJqMkpveDE0Sk4hOEpQCno8MXx4NWJETkheeT8kX0RyKW1sNGokQzglM285
OCg0RlJmKjR6UjZJYlVkTWtYYDtGY0tea0BOaDRJbn0yeTtfNwp6KTdOWn50KihlenNeMn1lVH12
S2k+a2ZCNkxMWSFxOSkkczc4flJlfVEyVEVJSnc9QXpHOyF6cGNWMz1rMFYyKSgKekdOI3dZQDUx
YiVUME9XNmgpSF4+bkwxb3dOdFRiQFB3Z0FJJHMlOHJIODlwaVR6TmA2R1lOViYzIUhwaTBxNU9q
Cnp4OWx0KHpSNEZLIVJldHVISSFfdlp+d3JWR2pKbjNJNm9gYiFvTkE5TVElKD9wK1BwcF5XWGVp
KCRIJTFfdGJfOAp6SSVYSjh3PGR6ditaQy1rUE4rZUYwO2M8OERgWWFCRTNyblgqbVl5TDZKez17
JDhsUypLMmZYclomM3p9MEFxensKellGKW49XjhBdndOKStLUSF2QT1mMXxLM1pEPVIzRVNJa3VC
OyN8I3IxSVNQMS0kQ3dkODBHVTxPYVopd3QlV1kxCnotZ34lTnFXb29pRWtXKl5neClDZ3ozNzkl
VVBRMihjbF5yTSZqVkkhaGlqS2xlPiVCWjBQKUdAbW5iJFFwfXM4dgp6cT48TlVfWUp6STBtbnFw
VjxlbTViMW1Ge0NoTXAlUmE7ZXNCTDdKdUkxfXp2N214c3Q/S1QqQ0B+e15HYCU/OT8KemtZdFB4
NyRhPGooSFB3PFo+dFIzXzZObyZEKFdycG5WS0pqM0UwKGBsdiZORClQRjl4WmF3e3I/a3pCd0d8
UjZ9CnomXilfJWAldX1xdjV0allgSkk2YEohOD56Ti1mREMtUk5kRmluR2hWNDVvXkI4dnBTfTNK
WChGS0AyXlVIRFMpVAp6KzVVeiFjX3pXQlhib2JhcVNMISZLdTA2MmpyeUFJdHNxKH1DNnBZWHkk
TmE+T3tPR25qUklAXjxPYzFsK1dzVl8KejYmeSg8Tz1BSzdtNXZWPjwyK0A+antBWlZEI29xdUJ8
ZV57cnh6akFaIXAwLUJqKkp7djk+TT5CVSRDYGJXXmhvCnowPk8qfE1fX3YhO3I0WVBYOGY4RXJ1
Xjh8KnI7ZkxvQk8jTDIraD8yX15odUV6WnpKb0g8cyota18mRTghb0hzbgp6VX5CbTw8KkdUazYy
NyRLeEtRfG5pWXNaSFA9UFAjdT1KPCVEQzM3Zk9FeDBkT1ZaajwtYVNKWVhRIXphcVF1Qm0KelNI
IzZEJTFWMChfZ3dWfiVVcFotaHolLVAhfjVUJSVzU1UrKmw9VDJZTD87YVBreHNrQThJalpNdUhF
bU5TRSN4CnotMEBrel50RDgtcjs9WHJ4MChnJmo+UkE4RlglSjhuUW9MM2hNfHtQeHkzdHpJWGBT
fGNpI2JoJnt1Z3NkclJNTwp6JT5ERjgldztfNyN5dUhVZ31vSlMqOFZmZGxeMjIwN1JtbHpPR2oy
eFotRjFRczZKVFo2UHpjfDU4c0wkI2AodmkKeiY9QzI5Kjw0M30+bD5uXkZ2aFc3QmlHfDl6R3NI
N1lEUFNCPEFTYUhvOXZVej1BSEdScjkqXnVTZG9uNSg8PmMrCnpAdDAtYXl+ZDlrOEw1fW1uNHBJ
cjw1bHBwaH40LTAjKTxwJiUzbWFubkY5fSU3I1RfY3AjNDZvR1Z5PHpKV3JANgp6TURLZiNkazJ6
KDQxMUorOyo3a15eYztVTHFQdHdocnZjTXxkX3YhUXNKMHNBPHNNISVPTyFTYmZULSZ4PF83cFoK
ek1CTEg/QG1HQl9VdjgkQnJHfVlLS1UlQEAoYCgjTGdOJW1CZ3p7S1RuNkU2UEdyZCNCM157MDZE
KXNDMyV9Wn1SCnpoTWJgfnNIfF9Raks8Y04kQG4xUkZQV35kZWchUzgqX0UhfWo3UzIybiQ/QD15
VGMwNHYyWWJnMTdqZ0UtaH1+TQp6cCV1eFopXngzVkIxTzNUP2V8KkNRUEJqKj1xe2d4SCNjYmVB
Qnh3NXxEd2ZnYEc9bmZwKys1Xkx4T0tXVEdtZi0KekJzO1NNZCNUY2FXe2Q1dylZXl9XaExnX0J2
e2pxRCRkUEVnRXBBd21KOXpSckF3UVJyTG9zZyNuT0d0JWxZPU88CnpxVVlnS0xKJSZmQXZyWmNk
VT89b09zemZvIUdlWV52TTlHJCExdURNJkk0aStsRUhDant7Pjx3JTZseWZ2KUxxdAp6SW4kYlQo
WDhpT1lZYE8yd3B7WUxVZiteXlZZa0l8WVZwV2VSZippSjFqUkFTWTxDVnZUY2Y3YW1yMmMlMX12
O0AKejtVd3VQOUl9SWpJbGxIaXl9THNWb0pJWiRVVmZ1TksrT204RG1iS20oRD1HcW9kZ3xQbFJe
b1NMezU3Um9fKElGCnpnRCtULV5zdkRWbH1pOD9NWklPJGlmVn1fdV5ycDdBO0VKJkV8aCNsZ3NP
T2NGfSFRPypfTDY8SWZ0bn5QVyVQOQp6MT5AdkJMZypaT3M+SDwrUkBeYUc+e3ooTTVGVWIoV1Nv
LXZlKFA3cGhVdE88emdNc0wybHhwbjVWKmRVTEolMioKem5qQ2V5Z1deUl9UNmRrJnU2VUhFbE11
YlI9OXU2Pko3U3pXT19gTDBTWFghMzx6WGt3Vnh2ZHZ2Z3p1UWdgLUJKCnpQOUA4eGVXJjZSb1h3
MFJlSDdnS2ljQDI7VXN4N2M4PEtsb3cjYE56ckpAO3V2NSVxLWBGPkplQVUreWpKUjQ+LQp6Xi16
Y3UqdzsxQFNnWCN7VkVWNlB7PGptNHNncH1IPWxHSk5GKnVxJHt0VWooVThXfDtDUXBpQW02aUZU
N1lvQjMKenZyWEhAZHgjRURscGlNZ0JkRiQ1dldze1gjKSNPc147JD5tbllQU3ZwRzdjRSZrYG91
YUtmNldvTVgxciptNztnCno8bW41eGloMXI9XypJRTVMLTsha2Y9K2tzaE1qO1IhLVN1JVdQd1Rp
QWUhKW1nSz8jc3UlJDlWSW1ydC0kLSt0dgp6MlIzRzBefiVDPjFETTBMI0AkX1AxX2VvYDMjUDV+
YU9APGp0IVlAR1J+JWRWbil7M0RzKGYtSSMtNTxYV25oND0KenFmMlc4Q1RPQzZhMG11cSV9d2tm
a1IqVEtwbEIwM1p3TkBmM2BqWDJQZU9obnB3WWVTe2FwcSlLQFpGfVhBKTlvCnpMWjVNUXFTJF9R
eCZeRlRvM1EpJilVVWxOY3A0K1hDaWw5PDQyPkJNI1I+Jl5gZEdwP1l3d1UjJmRwQ2NGND9Abgp6
MUFMYkwlaG8xdXtETCE5dmI5bW9TbWIweFpPdENPJXllYVVseT5mKVdkZGU2K1Q/fWBPSmFUd0Vx
QTBVRVNacnEKekpBPGgzQlJkPU1eWGMyPz5zYGpKdFVvZmNZRDQ8TVVEJlZ7OEElTXFvKVExfDJp
bGRiS0NxK3BxN0AkKzBiITx5Cnp2XkJFVkVYQyVrd3RgKkJPQ31QQW1uR0RWX3dfO2dzflJzfHh5
V0M5Uzl4JnRJe1plTXN4fWpabWd5fTd5MT59bQp6K05vZzc2STVqenV4YFojd14kN2Vwa0V7KzVW
a35VNnZ5R2VYI1d7KV9gWEx0LTdkWn1fPUFyRHU5Y0k5ZD9UbUUKekVSanx4TlVBcFArbDQzVlow
MVQzP0clRVEoZ31qQm4rMlgwalcwcVFhSmRZdyZNY3BHaWpIN1lhP04oS21iOyY/CnpQcTBgU3Ri
bnN5PmdrR0loYElJZVN3eEhiYClUeWpjPGcjMj1waEN1eT15K2h8TFo3eVFSY3R6Vl81ZyRkVSo8
aQp6bTdDaUxBa3UzMGdpWG5hdDkpQFh6Wj14S3c3cVBRWERfPEV7VChNVU5SbTcmbVRkJl9TNHVX
e3tXVGMqMjVjVngKekAjR14he3t7SEF6PjUzfXgyZzlpT2VvWVlWcDhDLUw8ej9BbXAzP3t2P0Vr
Uj4qR0BYKVl6N2Apd1ZMVHsrMWReCnpKTkxFOSp8RnNnTERVOzlrRzxBST1jOVVfXyFAI0s7QnAz
elpUQGtFYjFtXzYofVZ8Y1p7OC1VWEBAXzhqT0N2Zwp6ZzRoc3RSX1d6YmpnPWNsUGt3TTAxKihn
dUopSFFoPWhvM31ALUNiREdxWWUwU1JuSEhmV2R7VXNfQUxwKVl8VikKeitFeGA1Nm1YMzBJbWxt
ZEE7P21TSllEYzxgN2E2cHlGMj5TPjRuQ1B0RjB8ZCo9NFd0Kih4U0RQcG9HKUlOaHFgCnpVJT91
eTxKODlsMylHO2dZNHxxZGI4K0NTcmpyUUNSUXs+NGpPMSRaZkgmTnl3Plh+b0xDJk9rVDhPPGkx
PStOXwp6KnhsOG1iKiRgc3pKPCRLRHFxK215WUs0I2lULWg3NHozcEhOWHpRTylRaCp6RS1yRVFJ
PWZ5QXBkTUhIYX13aEUKei1MUDR2ezgqPl9mY0FMTzVtSX09M2BDOEFMfEtASEJXI2slP0VXMXFo
MmVmTSU/KD9GQlNIfVZ7Sio1UXgyKG5ICno8P3Juaj9Xb2p1UXV0VytzSjNpYkE2d25lKkVDOFor
eDIyJVZwaGRJTj8hQzAhXllAZz0yTW95O0lwbFYzKWJqJQp6Jm5IWmhud2RjKzYwYGoxVWJLdE5G
QSVXfTBPTzZEQ0lrJCZ1KTtkZTtpMmhwKzZ8V30+RjtMa2VhZU89KCttaGEKemg+aVRtSj5QZ1B1
Sj5aQVVub1R3a0JYYClvZGVLbllyYkElaCR8JW1CY0M2RDxmTmw0a18wQUorez9hO0Y9K0JTCnp3
Tn1IPkpEemdCP144ISk8VkhCeDdWM1JTZiVDJU5gS21zRHZkUk0rVTVOIzRlWkB2cGMlZUBIYXIj
fFdGT05vcgp6X1B2P1ZFNVJOaVB6NXJhbit0OG1PRTZtY1Z7PTBEKVl7OCQwcnVfSm8rM2tCWiMx
VFA5d0pnXjlmbXNpOV5aXkAKenNWSGVZeF8mcGhjR284aEExNz9pMSskWD50WFlSeCZvQHp8LUM0
TGktV31kT1BZWS1GaVR1JE1DV2Fve04/K3U5Cnp4dXw/RCZ3RHclaSs7ZStodW9BZXxNbCQpQ2Qt
V28mTXRpKDkjSyk+WDBaX0FgVXxuTXVrM0hpdk5PeykpWSl3bAp6YmhTJFlWc1IhP1FYO2xLK2RB
SUslXzRqTClATVk2JEsqSl9LdnxjKER8YVFjIUhJUCgzcn1EOSVFKFhOOHE5emEKemwyJHJLM1lj
RWNEPD41IVgtWGxAe301SzFwRmhkKGkwQ2lvUV9zYnRPNT5nQU9WMS0yVSh2VDFDITVlY2xLWTJz
CnphYnFiQ2hiP35XRUd7QCRIM0BpfVlmSGpCUXZybkRraUxENHJ+NXR2ZWw+TCF4Yzw0O2xFTEtA
eFopTFk/KE1fQgp6VFBPaGstWEBtc2BJZHN9ZCM2QTVXUXptVllWeG9BKWtRO0V0biZ2JWU8VUQk
O3VZLWlWRm8zdiM2JCFzU3BJam0Kej55TT10SEFkejIzKTNgVVpKQkFrakB9eTA3b0xIYGx2TFJU
TTZKY3h7USUlIXllWigmRiM1dlEqVHw7JENTMU5PCnpibFI8ZEA1WV4qPVNAUk1LTkQqfFE4ez5J
UEM8JVc7fUhnRDUjT1NXRXlZck52KX1Lezh8ZURgcy0/TEpYYjt4Ugp6Ryk/SHheVWVJPF44Xjxu
Ym1BSihpc1BPJUFwQlhpVUVpeGtZakhoMnl7cCtKKUZXS3dfTURZNlcjPWIqTXA4LVoKejMxLUZr
Y14yTmYhSDxNbEE9NDw1RUx4fXw1UX5fKGwtWk9fQnIteDlja2QqVGA/dnMhciYmajc9SCNIWCFj
cXZ4Cno3eVdiYzR5XyllWkZIY2lycn5TdEReTXlCaHhyfTJrIWRNdWkpV3RoYENASzxFJDZ3Zl55
TTBBWCNaWHtFNT8jVAp6WV4hRTRsdHAqYl9fZmlUX2UkSGhaI3xrWD0xTzJrcnZBXjVvbmUoWVFO
dVAtM098eUFnfEU9eTl+ZFd0IVY2aiEKelR6O3JYV2d9YzMzVm9XMWd9d2E3Tz1qa35zYGwpQWh3
aTV5eD8+T3tgYGZYUUBPQzIpSGJ4ODZOV3k/NC0yQigtCnphJFdIdUJXeV52ayEyfmlFSklecjBT
SksqJC11JVBMUDFCWTh9TUVwNF8+YE85JnFpP185NH5XYmx+e0ZKaXxJOAp6KDxmPkQjI2E8bkNU
S0w2Y1BrVT1uZy1kQHJAWXhpJHYzfT5PeF9zYWt0RiNORDg4LTNWRTwheVpjanFzc01+NnkKel9i
YjxTV0pQYzVRMz5WS2wzcWhmQVd2JUdecFpiRUg2b05XZUdMSzRqRiptKDJNKXZlOEwoe2Rpayot
YnZsck9SCnpfWipva1R4bHJ4ZWg8Y0dlJSRgeW1xN2ZEZHRiKVFzYH1fb1gheFE1QzZzWUJHLW0y
OCRPailaaFlTX3dgNCh4PAp6TEdsbD55TmtQIVZpOWJxYjhUPm8xUnArSUVha0xWUHQwa0NAMjlg
IXJlbzQjZCE+RFNsZzhiR1dfbShmVHtAKkAKenw5OElmQFopJUpwNTU/I2RSN2tHMzBBQiZhMzdn
UkVVZTBHT1Z1eGplKCRmSjRHYk1KU2VuY0I8b19JVXtwQ0k1CnpkPzcyQWpEfXlaazFhZUlxVUFI
enlhRHVLTmxBcyhhUjN6YURMIVhNZ1puMWBYZUtUYj0lQSEzc3ojPzFMeFJnagp6QCk3RGJxSiQz
cVAqR0hAMy1iflE3ZUlGJVdSa2RfS0V3cU1TfkRKZzY7VFojKz9KfnBFK0E9dXtGT1E0VVYwUDkK
enVmfX5xViprc0EyY09TTiY/dGlqbVFAQmtfflBTfSM8TiFzdV9SMFMzSzAzc1FOaDlgSWVsNFk5
Xi04bFl2RjQwCnpgOGNOT0cmeX5SaTRFejRKeE9fRFJKM3g3QHJpZVE2Tih+ZFdWbXVnK05hXm1N
Tk9ZZUxTZCNzYTskWmgzYUB+KAp6K18rVjstMTNMXzJ9VFBpYnheRjFVMXY2Yi1ENlRiSmt4UzZ2
WV5fUDFPS2xnKCNiancrI3IjKEg2MjV0IWBrKHMKelNxLSYlaF4kJVk7MGZJPVFuRWdgSURmJFdr
OEJhWUJoJUdkOV5LWFluWmdSKWo9IyZXR21FS05wVFEjSEBUckxZCnpgZnohQ1BaWmZHaVNrN2Zh
bGIrMDgqaTF1YEVeQmQ5fUd8KCMtNkVOazVabEhOOD83VXoobCh3YnhSPVZARWpNJgp6bGxfX0Rj
ajZsdW42QCg5enFNTSFaMVhQeSMte05WWFFOZSpfSD1xbll0PCN3IU5DMDNOTlZOYyltMVBxNiNA
NDAKekxUJHE/YClOe3lzTHBLSVlRUkNwJWpHcjJhZHNRUXA2JTt5RzFgY0lwJG4yWGhIcURGT2Ul
MC1VbGpZN3tGN0cpCnpGZC14MyZMd0FpamxWdTFZYEIwfmloc1g/KmopeHUhbWxSYyFAc2E/RnhT
Kio1MnJZXiZUdncmIWo7dzxuTUkhXgp6SDhXbCVXem9PQ3FwZX1fcUZlUGRrcT5WNkBMWkBtWk5M
N3JKVWlkcG5VZlEyUHQzUDFYQU5UcUJgSTtGKmBgRlUKeiZibmhqNHBMYzRGfEZfYDR6WVA3Iz5J
Ryo0QU5IQVR4XytUb18+e0tVKX4qNztyX1k0X01CaVZBRGdzfnIkbClUCno7fmAmT0RFeSkoNTZ0
eDt3ZFRkOUx5cl9uMGFRJHtleng8RHlNbT9kS0FCck5ha3AzezR8X3MoX0J3T18zNS1fXgp6dCl4
b2NHX3soenRkJCFjTzB1WW1Re08tM1JaKEhie0lFZF9yKjliUHpZR0BaPkZLI2ImKV5+clZSblFt
OzdaKFcKelFUcEthPVZDLW5iK09lQ0F0alYtb14tISo4ODdAckNPQ0ZgbT50fDEqbmB7eVgmSzE9
cl5wRzRyeD1SLUxsRFNsCnpGQX5JbnE7RDBncTY4andebXpfWnI2ejd3QlNTYSQwPUNUUVJmK3l+
YWtHT35XRWNUUiZ8JmRXXnNtUUE2bCZkcgp6cz0wPDJZfD4/MVdNfWRRRmUwM3VNU3NAVHhFPml7
UXxNbj9gITUrOTl+IWNfRjgldWlEfXF6NTZtSlk3WFBeOCoKelpNZCNQK2pjWmFOT0RnJTs8WlZD
Tm1PZHBvc0VmMkZna0NScXl+ZmpQRGBBKShOI0xFPlpEZ0cxd1ooaz5uSy1gCnojfSlwRFRxPXdg
YE09LSlwWmVlakJIVENLdGdgU1pTPXhAa15Rd0pwWW5BWC1qcENqXnc9cytJJEJ8anZkXn18Vgp6
azdINUN1Zj0wP0tybiZGZ2dkNCY9YzNgTyQjSmkrLTd8eGhQWnhkUlMtYmQ8ak1ofGVGN31DSSE2
UHRzakU2ZTkKentmREh1dGNAOUZZciFtSHdxP0lAWkc8JX1sU3NgKERpMz52WUxnS0d1Xkoobz07
WmR2Z0d8bCFXVjFgLTJxaHZ7Cnp2Zjw+NyRESGxnKVZMQ1hBais3bm44YUp0bHtPKStuKy01Kmo1
R1FGc1V9cCNlKUI9Vk9yRVZnKjF9VXYwYWg2Vwp6RXhUVitsNFhAbih2YVZlSHE4SDt3NiZ4bWJQ
S3BTYmJpelAjZGR1VkYoJEVsOCleIW81TTJwd3EwI0E9V3h2fWgKekl+QENxXiVScX45ayV9Zndl
TG9TUjVIVURDVHR6TXpeOTRrVmp3Yl5HeCNnRk1QZU56bUhLa3QxUG5jT2k/ckxiCnpCTnB+NVph
dVhIbEdvez96KWg4d193eVE3bWBkJGAzY0ZTeFphMGE2ZCNLSXs9c0JofWMwJE84WG9zY3RLfW5l
JAp6OGsmY3QhQmAxUCgtO2hKRXVPYDIqV0dYdl9TLTk9WiVIR1AwMDd1UllMWG8hO35Mbkg5WF41
YSk3ZjApPDVJbVgKenEraGhscSt0V0s7NXlBT0UtU0NeYXh0dXA0eHxeLSFXLXpZTzRncHFYZjEq
V1JkUmRwV0dVX0t8NTt2c05GSkwrCnpxI1BrTmIzTVBmJldHO3Q2eDBLOyVTflRlVk9+Xn1Wb34t
cmA9NjJtejx+JHB5OHh9K0dGJmstS1J6UHxEfSE1ewp6ez5VTEB4Xys4V0w7cSVPTno+JEg8QTJq
Si1+NU1ndSY0YjgyZk5eKzcxeVpBe3BtQiljKCV5PVZGWXRkd1l6bU4KejA8UCM7Y1hjfGl3S3Ny
V3R5diUzLTNYQDU/KDFjKzl3MSlFT087YlgwYVBiamFtPW1rbz9pI3xIJnN2fmlmQlFrCnp3NXNe
eTB8eSROIyZUQWs3Sj0+e1F5Q1NGaTYqQj1kNXlwLV9KfHg4IT5CajhaTmtkeiR2QTltIyROcyhs
Pj5DTAp6Pj0kNXRHST00cmlaVWxsVT5ue0F3a3h+eGlsX1o2aypBLSlZdiVvS1lOYiRVWjVMWV9Q
VTUmP0g2LT8+cFY/YU0KelhAc3BSVERSNkJWZ1AwY1YwSGhsJWttQEElTlghSnVLZXZJSVYkNXJT
bilPe2MkRSh7NDs8ZGxnRDAzTEA5SXlmCnpmfk1hVl44JkZgO2N1O05sWlV8YFViPiZSWjFpbmNl
Z2JKTCRmP1hqQlp8aXR7ak5BKmZKUkdTVk5KR15AJjluRQp6b3dqX1NMS0M0LTYqISFvTEdSej5g
dU99c2clIXlJMzJPZFpMJGclTENWOHVNNVQ8I2t2eERxK3ZrfSZiZnFfOVgKenVFNEg1Tk1NPGpY
YC11VmR5cE0zUSNtJkVmcE4tUDJNejg1djNfYDdlWktzI147KHdFTjxedF9SKT0jTVFvLVhCCnpM
Xi1kRW4tPnpuSU1uTEtRUl5KVTZCWU8tUmpGN3NhNiVnM2l2djFDQnlIPUp7dXEwPkM+c1AtaEd4
S2JheWVQKAp6UmsxT25DU1hpV2l6QVhvPjhvIUF4JWpTQHY2RUJNeTA9TXhzWiNTLStBNHhJZXFx
TFlzdVBTZUpSfkowJHl4MT8KemJiSmRhSSozfCp1TyZJPXIxaD1ZPkVjWlJmVDFJOHZtJWJMQlpC
U2tgUUBIbl9QSWZOa25iVmxNX1djZ0g3TVY+CnpHNHIlYEBPNFdtPWBpOzFLeVJucyNHIWBDRDM9
MFAlaHZaeiVYKEdMPDVqLURsN2o0ekRFPGNrey1jYTxSWWtDJgp6Y2IxVzQ+RTsmPSR5I0c4MEB1
RmlIci1wWDNYbStYJVFlK2lTIUV+dFYyPCpSTEVxfVZpIzgybmw8PCM9T2RTdlkKej5jUCNjN0Ml
ZEJGQTY4aytXTGZOKmNTJmFLIXtue01jSy0kYChIfH5kcGxyYyU8JGN1YmRTRmNzY0lEcTdGXmJJ
Cnp0c0hKfVR2K2xXPm59ejRGI3gqdDtNZ1Arcm0mbSp3ZmtzTWBZSWlrc0NgSiZHPnpZVCZQRihX
eyZOJHtzO0M/MQp6QEMkLXIpUjdPWTl+MTk/U2pEVz1lVlR0YEJMMGlZY3ZFI3YlZDE3JEE0fE9J
e3Z3TzBHQ194RD17O1N0cD1tPnQKek1oPE1tXnJYQl5VYSZldztJfEYzSFBWUiEpczskPlFmRyZw
JmAwO1pTYT1fWjJ5T0NNOCtGRVBlcyMtdjVVTT5wCnojPFombXpSZylHamFuQU0pciFUMEIhSns2
KFh7Mnp0KUBmIzhEUlp1MkZxM0klWnVueDJZNCokVXQlU1V3fEZ8Rgp6T3QjNF9JN3BVbDc/cSQw
VU1CN2ZvSFR+XiZ1PTh8VVcyeG9uc15Ne2MhUCM+eT1Vcl5jSnI3Izx0LUJSZmpLckYKejw7Z3Fp
XmdwMn4tOGVjOHNeLUA5UHF+YzBfVF5aTGNCNz5TYFg+P3JQWSpKIUM+I1FxPE8oUGZhZWIjRnRt
TVglCnpNRHI5SDhpS3Q4PihUe241R0RFWHJ3ZlVSNHFyQXUobUlVWU5AVEZXIXFSKnxLJTQ3Sypw
RXJwbXJyMDExQEc0MAp6SU1Sdmp1PW9FNFpCMWElRjhOUWhtLWBGX0chZn01bkN9YXp4bSZPPj54
Y2Y5QCFUN2hLSmZVTmQ3MTVlLThKIWsKemJvdiVHQjF6SmBFTHZqNSRIN08oIXB0SFQ9TC1WQXY2
SldedDI3WjBmQjJDJWVPRGl1UUhiKFZTPyt9U2w7YGpCCnpRYFBiRy1DIVNYc3k0ciRtWnJZVzVX
KTd9QVpYT2BEfT0yNmRQQTRfJk5ISzBRPmNwJXhueFU5O0I+IzZoZlhiKQp6MUorMjhZc0tga2J3
Mzx2XmJLIX4lVnNtemhaRFBNT31VaV9NYW1hODxmdV4/blB+cmkjfVdVVl4tRlRHWFheKiYKelc3
Oy1oaDdWSShBSjhyOSZEWCUrcVJpVTBTIUReST98PUg+O3VBaGR5VUtQSmJZJDRRWWhpSUpVMXw+
MUhaPzEzCno5S0s/Rj9QS08kYEhDI31YfnhqY1pzdjM4Vms7U2YzRl5xV25AZGleQlJFNz4wRXk5
dSVrJEBGbFlwK0xke3tVVQp6Y2QkKXo0Rzw/bVB2aUVicFdZSWtwTj0+flZsJEM8N3VkVX57bWBN
KUpPan5WP2UtV24mcUtVTyM2cjVKMEw1ME0Kej5FJn44JG1Fe1M2YU9fKnR4ZndENUM9ISk1ZlV3
IVBPITYrYWI0KSV5O01CPHNvbF9xKTlSZlgtaDdEIzN9e24/CnooJSl5OWV0V3Y7TDIzdWhHNHs7
Y0pMSHNiKFBNIU9qVVJhVk52O3RYI19MPU9OQHYqUjN1QE4raUl7PnR3XkpNdAp6dEhie3tnP0R5
SHZRJU0xJVN6PFUzcmt2ZGdOQ3o5V3o0KittSkxxWGVQI2FyRF8kb3BMKFRaST9BK0JVenIrfF4K
enBGfkVGO3c4O280OW4jJjk1bkxIUmRPfWFvNmloNVluUmBxLVJYKDJ0eHdAWSNYZ2hObnxyND9P
MGxSKXJsIzx9Cnp4d1JVOTQoXlQ2Q1I0MitmJSpkNnZVQkw2TWt2QWJ4a1JjWD9kWGl4JT9BPnd5
aWdELSFnMWUhQHxvZUhvQ1o9NQp6OG0pXiNMV1E0RFk5WVBINis3OVl6THslVEtjeD9qMThKKVhA
S19ib0FwPWF8aEJjcGwkN1gtdld8ezdvKGJDNWsKeml2SFFpezZsJEUrVFdjN1FIPlAxdyZDfH51
KWohemk7Pk9YRzBhZHd2VjxuMXYqRUVjMDV3S2ckfTIlVDAld1d4CnptRFhfTEI+c1g2YldiQytW
RXNvZlZFMWE4PGdmXkgxPlJII0p+WWgka1N8Ozw1VygrPSlgTiFRNmRXR2ZadnV2dQp6bHFVJUwl
JX1BV0N6PmUrM3xiQXloQjZ3PkpAOTtPVkt6SEpEKGY9e0I+TG9RO1R3OE1WVXYxLW4xbno4UTxX
ZFoKenIjR0FGQDE5JnBzKFNROWkxYWo2YEd0MFZteDNnc3dxIV5HYnYxI3tleHdmZ0dhaHh7bXNr
S14ybGVnOT53K19MCno2bUZBSXZ+MmZCVG95dFdhRUw+MXJzTzJrWF9mYlFjdUdlOFhJSEdvMSkp
SmUoTUVVVWFuOHRMJXY1blNSeUpuKAp6UjRxaitWYEZUTjBYUHB6cmpla2c9RGorYFhNRlpEPnsm
dj5sXyo0UE5hdz5KZkk0cnF3RWlnakBwSkdpc2opdmQKenZsUUd+Qj8oTE49Pn5MUyV1Q3E4eHkx
ZFZwe1NWRClgcXAxQHViNW9qXnZHflV3flR3TSZ7NlpoKStTYXJgcjlxCnpxJjRpfSF9dn4lNEx5
S1dPezhTbGBhbSpmUyh9Yjx2YH1le0t4Jk1HMXpRUnxseWRUaGBrbDFSTm92JiV6XiRNUgp6TXAh
PXtsT09oIVZIT0lqWHtzfG87P2FgOWkrQ2hfMXArKC04ZFUwVFJNPXZOIzZ6SHxtbkRzVFpwQHJ4
dmgoamkKekFDdCFlYTslKT9QN3d5dU5oSDMkSmRKX2smblNAI0A+OEdEe1JnfGckYC13ZGw/ak8h
WTRaQzFCLTVRQF8/dU9WCnp5Mjg0RkxrfmFXJEdMPEwzTWh0dHtwczIzJnRJUmJ1U3xfITJVK3t+
d2hZNjk2NWxUcUA/MkljJHhyeXpIWiZ4Mgp6eiZEeFJOPD5TUkkweztHNUw+LWohaG5XWTFTTjQz
UVJxQmcyYl58TTsxU0pIJGk1KVYlfjBrV01qU1J8VHczX0UKemVBKjdBVlAmbEJKUzFiTWgtKmU9
T1ktO0ZTN3Z5T1M1T0NaVVdVWGhCaGd7Pm10NyZ0e3NoSj9hfVE8bXItMXBACno+Uz5TNlBwSk45
ZUBMQzxVTFN8ZT1JUkMwM2d0TGZed0tRT3dHQnpPKmdCIXxLTFZseW5LS1JFeGxhZ2khP09NOwp6
Zz1KOXIrVXNWQ2MrXmtUSTI2RklzXkR1RWwkTkdhS2pRdihxR2FVWiY+cy1faTJ0ckNWQj1wUDsx
Yk5oOTA8fFkKejRrVERnVFZiZXxOZldxa2UmaG9TPGhKaEBlNjJkK2Q1JWJXdUMrVUVKZUs8SyRC
e04rSThuUnRDe3hRQjxFSXZDCno/YnJXPiZFNDRqYXo8SFJSUG9kNnM4eT5KUVhgeDZSQ2lSIWs/
dTZ3TE1tN0oxZFgmVEppNFNjUk1uUG5we3tFdgp6bnR3MncjeVNxfiNIM3RgYUFufDhZN3MoIVl5
bytjJnJoTVQwOSlDJVEoeHExSCNndmZASFV3IShPQlpxKlNwcmkKekhqVlRWQDF5Q31PR3hlUW1L
OEZzMVpGWkB1Sl9KPlJ+dW1EYlgrOFpmPEtybVRoYlZhN2xqP15ieSFZUHlsYXJMCnokJFpqZW4l
bzd6Wn5BNWFLKngmZFUpT3Y1RmxnRURvWGIlR3VpSTwjdHxqVVdoUzJYO1Y3NTtiNyt7dj5xezUk
UQp6cDNgJF5LcThsKT9NR199WEp+PEQ7PSR5JWNsMHkwayp2ZipqNFo5d3QhVHF0c3gtbGYkZzQo
TDRqVyt6Jn5QU1IKemxpZEcraXIqSzxCIThgdjBAQjkle312WVZjZXxBbzc0NFJqSkdiNj9lPjNN
XntUNkpGKW07NnVIJms3SUd7YHBNCnpeR04qPUV5PG5FdmVmTmtzan1ObFpOMnQyVGQ+a19Cd3x9
fDshQTE0eVJXWnl3fnUrdmNifCQhKjJEUkBTIXRJeQp6bjNgJEhENjgzVCY7ekNQaWRIY1JZPzJu
KEttdFBkRjZfJW48RmY9VGJRdip+a3tYNT0kaFJGNTNFVnVVSUdkZXwKeiMjbXN+eiN2Jlh2bjRw
Xit8VUR2cGByeGFnNDQ3V0JVSEZEaHBCcz9nOzR1JlBQd3tzKXhIVnwtZmolOW0kKHUrCno0R0At
Q211d0Z3N0V4MFdRWVR0VEFqciZeVjlrRntGQmw0bEAyI0NAJT5WNiRnXjN5Snl3V0ArQkVWUWhC
VGhMZwp6XyYyREchU1krMEclVVQ0bTM0U1Z5SGwyfUBrTl5XcklGV2NtdUdNLUBBMzMyKE9BQmdI
bChwMEJIdW1gYXV8NjgKemBEMXFiJiU7MmZNJUFpK043cTQ+UktMeWc2ayRze2JpZmo8X0VEfm4h
MW1uPiUhSiV6cHwxZjYjS2d6Xk9XSkJgCnpRK1V1KCt6OVkzbiF6cXJXKEc1Y2tBJFhyVnFtKEtX
PlVvKWxoMWNleWglZU1janNFKkxhRnFPMiQ+VENvKVlrWAp6Nj53Snc3M3pCSThhfkRoVEZXYWE4
WU1jdTlZZUJoOD99VSl3cSt+NmdncW4jQ1hPS2glUz5oPFBhaWk3ZEskO1UKelNnYDdRbUBSbTtM
aDJ7X21RRXxXMEMqPEZFRnozQnZQITNzNXRqRE4qJUElJDRufjRsWVgrdkslbVFWbVVISDF1Cnp4
XyozQDNBO0V0UFp6dD0xO2hKfDl3TiZQYH0jWnJ3QyhxPlNeNTd2OVEmZExQd1NlS0d0SzxTdlVQ
MzRqQXNEfQp6NTxwMXcqUXlxVTUmdXQxUn5ncFMrczVoY01taCFRPyhQOUh4Kk1iJExBczwlVX5+
LT81R209QjUpa1E8P3EpUGQKej1YPj0zWnVAdylvJEVaJElkfVp4OXQ/flEpeHJ9azV1KkxaeDFH
ay01ZF5zT0EhKFpQR3hWPVJlQERwVXM/elVJCnpvX3teI2Nsb3U9dXpzcHVRZTVuWjZ2PyN3VzJS
e3tYdD0jfXRGVnxCSjYzSSNNVlEoMmVaPUhoUEw3RWZNVkhMewp6ejRTbmJlQF97RGwxYHxxcGZm
SGd7b3xVNHA7amNGVTYrOy1WWm0kdURsQnoqVXwzbVVjQE0hQDxqNTNNe1VfdEwKentRN05UZ05r
KWBHeiteUEU1SU9weldwNnkpeypVYUM1UDBKdVlkfEpRQzI7U1c4eGU2ODwwYSoocTYrZU5lemQz
CnpCRSNFJHRzVEQkKWBqKGNfVTtjJGxASzNWPX5zVXwyfDFrcjk5NUQ8Mjw2cElXOE9SU3lodk48
Q1BAM0NjY0w2ewp6Pj97QGhBYmdHfDtTanQ1TX5idmZZbzhXb2N7YlokTFE7PlBAPSVyRSZYRD9t
KnJWTnR5JS1eZjZ0dDRoSFRfRDIKejw/cWBSM2xjdEBpNFlBaWc/RyFWXitPdDgzWSY+YmVfOSgy
dyspYk9tOTZga1pXJjhFYFdLTUBMe045VlBuVyQ0CnpZYiNRaHZtKUIpODJ7WTNZdnhiYmh4fTgh
R01FTGBSdGVCV088UmZiSDFOaiEyUzc9azNfUURvVGslKnI/PiV9PAp6MD1wYFhePnkpVWcjUz9E
ZlY3ZE5Ofj4yJUFneDBEbnBsWT1qRCV2ZHV5MU81anYxfW8/NUhXcExzKmt+QTsyekgKelMrS0lC
QSR5PkhhbGQwcTdwcyRONkZ9PVZ3TVlpUjVieSp1e2c9bFNNb2ppZXgxQCRANzFlWkAqVHNSMDJp
Qm9QCno/fn5Za0s1SUQoRWU5XjxRM1pTb1VaQlpmU050JUwlIz9JJEN+OVB0bU9aQSRrXjF4VEg/
bjF7b3FOZGtyTFVXNQp6bFdvWE9xczAyZz07SCthMHRkZSR0MEo/RnVmNW9CeElYSEdkcyV8TUNY
JkYxWngoWUhVRnYoUW53bUh1OThlfUkKejZHZExkU303Nm9eWGgkfVdUek9uOSMpY0M4dU5FUFgk
UCNLLUBgd3lMIUtYZl5+MU1tN3YzMHI2I08mY0gjVGZzCno8OFFwTmxUU3h+SjA2MXU0Qm9AYXk0
alA/VTF9Qk1Sfjt2MUl3ZSMpO257RXVIZlVWXkwlVlArPVRKfmlWWDkmfgp6dl9XJE9SbnNEKFJX
YXdDYGQ5RCs+eEt6Z0I+LTxBeklvZ0VyWU98Q1lEJGB3dE1CSz53YWxrKUtLSTk9WXdzTHQKejx0
Uk1TNFBJZU5lZnM3ZE4mbikhUVY+ZUBgbGFYUF4wbmtlbXluYiojJWxkJFNMNnxWTi1CeVU/SkdI
UHlsbD42CnpDYUtRbjM0SU9weUJ+PDBXJEx4PFV0Xm82ZTVocnYxRT57ZEUwVCttckleOXdzP1JA
MzsqcWVSIXp8TEM5aU17Pwp6eyh8fnIwcFNzbyNuUUtrQFV+RzRjZmxpIVBfPyh6SyM/Vzk9dzx6
NXU3PEVgc2FDOFdCYVB4fFEyOFRxdztjPkMKekMzVnQpVSktP0ImO3U5YENxKXt7Ymw/MUlfOE5x
WUEyWnd2K2lDSVRHT1k8ZGk4fGB1WjlLI3daNmY2Rys4bzhKCnp2fHRJYFhLSj48aWBKRj8ycSNi
Y3hoJTAjJCEjV21URk9MNkA0RExnP1FKUVp0PVR8UzA7TVQ5MlNnIyRhV3l0Pwp6QUJtMyZBWUd+
dnNufVc+Ri1aaCFYfWVOP0NMPFFGNzRsYlUzaDF9PlRhbm1mLSgqKj9uPjxmeE5ZeCteanY5Nk0K
ejVMX3AhOHIqN0NRbD8jZUV3QWMwek4rcHBZbWJIZGF9a2MpYEElOzlxJEBnayFkP0dEOVJWXihk
Qmt8R2BBU3tTCnp2RGh7ZkAxWWA3KjVUMVZ3WjJ1RUxBTnNiXmBLJHZVI3FacVFtI2dGN0REdHJ0
JTNLVDk7NnlES3NrSCU2X1IkPwp6R0lCPkl3fDVvNEp+Y2RneVpwTUUxOWUqbjM4STFvMFlWdmhe
Y2cxeyRkNCRtNjFtZjZWc35oRG02KGhUTVdHfmkKelR9d3gzbWRQVWZHeCRXKD98alJeJG05cFBR
JUBwV0VnN08wSy0+K0xAY0w9WHJANEpjcGcrU3JGRDd2Xz1DQCpTCnolfmk+dGROaD9wXnlNbjxR
bntpTzJKWTVgPCNNfG93O29oPTNuSlMzY2t1SC18NjlyRGAhaFJIV0czV1pASz40cAp6JC1BT2FC
NkZ8cDgkZGdObzZZdlFaSTtUbTNKbylJPV5KJURlODN3b1dIVEc2aUlmbSlkKUhrczZWMldZZ3Q5
YXUKendWbFdxUSErZCFiKmpfNkY2akNnRCRHbUE4PjUkZnErXzVzKXYpZXc7Sjg3TlZebGdCd3Br
JUN3RzYqd2tNVD9NCnp4MDxodGl4JjRHRHFtZEoyQHdna19jWUJuVVc2V1AqfWIrYWVyYFpGZ009
VnpVO0Q0d2x7cWN9bVpkbW5zZG53Qwp6e040JkhpcCR4RiZnVz03ellBY2tONkNHc2NNU3xBSVoh
UXNMRyRnUndUfkc0bm52UGokaU55aXExOHh5PXhncHQKelY8VUZsKDgwKylwZ25eZHApKEVSTyRu
WGM0YHpaVWM7U096PFUlR1QjUj58e15udntFR2RrTDlKaEBMUGNkfX15Cnp5KFhuOS1VSiFxQnp5
NXtFY3xfdXQlRld1Y19OI3RwVDNQJi1TKXJ3bUchRCtkdk14ajN3bitqcnxnMX10b15wVQp6OGR0
dUE0T3dwRXA9JCtVYUNtc1FuPGNzUTdlYHNHUFk+SC1UdH1TSDY7Xi1VSyVvRlR5RTklfkhIJWsj
NHx8QjcKenJ6eGF4aF95QT1xJTxPNGVnPnR9bUtiN3FKNnNHOW1HM1oyalE0RUpQZFpSUWc2b0Va
QUdXRj00cVNZbi1YMHZFCnpacExnX1JyMENeY3d7SyFwRnpZQ1I5V2VSOFRHYU9GJXgzfmdoaGdX
UUYzUmBJaVg0I2hpTlNzSkRBJlIoUzJSQAp6RWlEQXBIZVpsPWh1PVdlN0AjYClAaWZOJm1ec0tH
fElUJlJ4RjIhZXg7NDVqTDR3NChINVUpSGNHTU9SNzNnS1IKemJUZUNZQmBGODQlZiRYXjZhNXR1
bzAwWU5ac2V+SDNVNn55Z29nUzU2IUN8aTJPeGxXJWAxPWZmZTJRNjVJUSskCnpLSHQlTW1NKmxD
K1pwN3hoMExoeT5xe19Dbmp2ITMkRGhqazg+cXlZbEpnfTNkPWxiNjxCfXQkcjd5aTtaKzJiVAp6
cTd7V3hMWnd0ei1nQmppUiVBPEJjbVgrY0BZN24wS343YEcyYiFIVTJiN1J1Jmxsdm1kOFhORjJh
JSVNYjYob3AKenkoNEokV0ooUDU4fG12UkIkOH1aQHdvbHhDJGwzIURAJUM+cjgoS24jUFFmfHJl
M0orPlc2fjRzZ3c2bnltYWpTCnpyVzxnaz1QUD9gYFVwJGBHSjMpaEUrYysweVpEZUIkTm1tYHtG
R0RmN3dFbnZAKU5jMHtKKjkkR0laOz1sQkokTAp6PnxTQWVoeHlwcEhrcV88PjR+eFVCTDc1PSFV
ekEqbkFmSEcmPyU8MCU8dE5jMS1XXjUrZSp1I0w9Z3QxKzgyWj8KekYwR0pReEw7SStVaHElTTFX
YGtOSzdzNzlDTDhtSExnd20mY0F2PDJTWSZDP2VGZlIrb1JkOVlZe2diTyo9TjZJCnpASGBHfEx5
bklTPX4lcDB0ajEyJTF0YCo2NXgyP0YpVlhebkNucWFDem5iNzdXcXcqPSkmTmZRN3BGKWJJVXNe
eQp6NXVrdkxKaCtUODAkZWRieE18UD8ySSVtKEw3KnVpbHlWIyUhVXtaQ3sjfUEoY0RVbHskTmcz
KU1CbishcmtqZEIKenZ3R3AlT0FtYzh5TyFLOTgmN05sTUpBWVVURWdyfWsyYiYlNHJiJSZkbzx9
S0k/O3RMKXZeSXJjaGEkfE1KSCN6CnpLb3h6MkV2U3N8aHtgbkt7I2ppOHw4bVhiKFNUTWxDPyM/
Rm14Pj4mYT1CaDVZdmZqYGJxYkV7ZW1UNDthdiF4Qgp6dGhDdWZYNkNqaSZqOGxnM0FCcGU4aGkm
PlUqeSpgVnhKRUcxO2dIJmhNaFloZkY5Wn1BSE9uUllxYz00WTt6NVUKemkldEh0Tm5fVD9aNFds
S0FmSm9eWE47czxranApMHBwKTt7NFN3SXlrNzFRZSVHbjU5akkwOEJgTS0yMjVMYTtHCnopSld3
JTVeRnRnTTQoflBiSk9kM3dqRS1zV0BPbGEyeXomTVRRMihWVkstI0lmc0xANWg+Zjk5ZnJGKCVi
UkVxYwp6MTdOQjcld2QpVyQycyZgTG5BfElrZWtyTmN8c3k4RHh3MExpTXJZWXp9aj51OzB1TDE0
eWVsfCZ8VXRWeWdzYTkKej9CVSQkV1ZrM0JfWXZxWSpxeXJARzZvS2dHJWF9eWx+QUQ/VF9lNFdx
MF98UnBfZW9VejRVMEBMeklYTFJRPFJnCnpKdE5kTzNYTkB8dH07VEtPUDlYQU8tPEswU3Q0YXtU
X21KKVRfSSs2VD8rMntUKFNKVSQjdFpwSnNwIUlfJDxyZgp6JWdsLXduNG1LRGh8QV9MMzFTcitq
Nmd1QlMyZj1seXVFTz1VUGJGOWJjOVpQIUYyT0lRNXV+KTtvaVRtYiohVDAKemM+bDhQMlgoK2hj
NVdHX09BSHsyQTR9NzduYDs8YnVycTc3XnFuKWtVSkJ1OFp9YkNLKEwmV200ckRxQnp8MVh6CnpF
UVdTOUhye1J8PStDPktHKis1eV8yOzxZQ2t3PHRuUEUoZnFNQn1UNDZEMzZyYy0oNHRSWFFkeygm
WnA8Q30zYgp6XjM4XmRCZX5CSE4yXnMhMWRUVmo0RlFyNS10JF8mPmJSYitCVlFIPEozSWxZI3xf
K1Z1OUt9TlF+blp6R2NxVkUKel5LTjQja18yLSFVTERxYCRYWTRRNVBwJFNwM2tuMmV6KTt6Ykoh
ai1uZkdaLWJtKyZ5REJlWSVMMTJQM2pGcnJoCnokaSFpcnVnPU4kdDBwSkktentGPlZQMGMwYjE1
PypubXt+ZWsjZWU5NU83PWg1QD9QeyhZVnVVViNSOTR0KUhFbQp6WmEyU3xYQ0JvNVc1MXhxKlJX
YkJgblZgeFckSkA1aTJze1pCSH1nWipZP0ZUUzVYP1ZNVnw3QWVCPUk/UXJrQCUKej14Xz0lJTBK
QHVgaChLMCNCfjBiQ2ZweiZzWE9ZPzQ5KXQtVyVVfnRMa0BWU2cxN3dCSHhnPCRFSzF8fE0pJCkl
CnpYOTAkSCEoVmktIXlNQmU4KSU1RVZgV1U0Mlk5V2tCNHY7PWpfQGtkRGZDPjkySmQxVGA+LVBX
ZX1HbmpHbH1pbAp6UEtyOEl0NHolZnR0YFhEUChEbXQ/NTIyWS1IeGpgZWMlNk94QFRETTFzKmFX
OypEdlkqYXUreCE5dm1sO1NlKVUKej03Sng2ZWhAVm83XzRGMF9OV2BxeG09TERmcXhjbUBDMSM7
bEdSfGo4Vk01SGp0VihmN0ZNTkBaTzl7a3pGJigrCnpIb2xneFo9cSo1eXdFSDNWbEJwUkNAem5p
cCVTXjhWKUZMcmUzX2h9OHZRKm1rQk0rbT93alFnS1AtNkRhTElzZgp6RTEpYGdIcVZkSD5pN35+
SXAkMDNBdjhJPjRYPkxfWlJWVGg/bV4kaXZDeUB3X1NfV1YkcUxWOExPKmx1Nmg8fjMKekZVPWF3
YnBJanw4a3xJYTU+JFZLaEBMP2clWlZ8UnZ8dVk2KXltVGJKdntUOzlaayZLSE5DUjc7OGg+V2VA
JCllCnprdlpXMCUyajYqMkFmbjwzUXVpNnUoJih5RjtSfjRNI3c5WV8rSTVmUSFeSilTPk9rVVNg
MCZSUHM/YEhsRCskKAp6a3I1PG8hUEAkWUo9PSNob25Yby1RJnxlRntIcyQtNT1xNCs/NmIyQDJ6
TXRjeHEzbTdQU20oMGpvTmU2Zk9OTkAKemc1LWg+Y3xONF9gOW4lYSYwaGgpMkAxPm5KJnJkSXRm
RnhmUFJ3KytWNXxhbHlVQSU2TlV3dUJjajV0THZtRlFXCnpiNEx9YEFvdnRFVGo7aC13R3RJNF9w
NDhpPjRraStzbWgkXzg7M1VacGpRKXlSIUpkJHJVdU1RQ3RZdzJFWjQjdwp6aUwlYUJYaHtSOE0m
WCNHRDBeYXB1P0kmantCR31RSUx6dlNUTUY1c2BqbG4lSihIQFBSaGhoWk5DNjRKPk1RVDEKekVS
PXJDRzx6aD1OKWlfYTNiY0U2bWM7eFlSUXk5aXRCKTc/PlNBKFNoc0B1d2ZEZ2tyYE1WRW43P1pK
fGpXV3liCnpnOEleVUYpJSNed3YhMkBsUU5NNWd9SkhWMjNaaDlpQTF8U2JwUXNQZihOKmprfGgl
bHRWanEzJUgmJntxJF5qagp6NTVgY1luZldQMyohSnpSM3twbDR4ZlZWJEZhVFY1aXJlQVhfUGRW
RkN2SEduODYxaUA2JFZ1VVF1PUE5bn00ejkKemAzYFVuUVZsIUw3NFJ5ODhMdzlSXiYkKShVUEFl
aWh3dT4rcWRISWI3c3AoZEBYem43eGBncWFWb2EkcnMzdjJ2Cnp5M18jcig/aD1OKUxAKG8qNS03
cXw0U0N6YCpFeiZBbE1aNFN4R2omb1k/JkEmLXx6UzxvdiF8JllXKS1oT0dldwp6YFdnamM1dEUo
PEFpb1ROYEYxO1N4ZnJmLUpWKFFUcVdDJHNzSE9eQTZfTUwoRnt+ezRnVldTYGdZR2prVm8le08K
ekdDeFModUheeT5NMHFuRFFAKjNjNWIjZT4wSFNCYW0kJSRlRStkUUIqfE9Kd1lJJWkwdjJwckQ3
Xyh9WUZrN35nCnpsNz1yfUp1NHVDXn08QH1OM1VOKkxLOW8jOG9CNSlwQj5OdHc9e0tqU2BhRUV6
dVdVSi0qK3xTV01MISMqUShHLQp6cj5NSk5VNzUhN3Q+dHV6KSNxak9LZ0RAZmpGQmFiWUBIWEN0
RF9IKz17VWJxRSlHUUI9V2FfTkcyS2VqSDhVUn0KeklUWmJVYlc/I2RHQlgxeztGfDBESHRCYio3
VGJgLWUqT0x0VHxxJkNzdz8hLSZSeFF9Kyt4SEJJfEMlVDk3Vl5fCnp3cFhwSXQ0a0ZNJGxKZ0Ru
WElrOTdVMVd7OyhLZjZTYUpwU1Q/dU9kKz4oeiRuXilaRWdTYGI4WjFBPXdzfGR5NAp6IV5xZWRY
UVJ5ZD94VCRMdDUheyRJY1F+PE5PS3F+YWM2VGsrTDUjNz88bSE+QEwmYzZXZy0+Qig7Tj1ZNX10
e30Kej9BSlIrWiMxT0tRa2hXfT1LZ2ppSXc+U1U0dn5oPUFsRkV5Z0plcS0mWVFKQTk8dSUwSXFj
OGchYVZwUFgmSzlgCnp6K2syZm13K0VgXiVzV2pYNDM5VXRIYiQ5MyNTJm9pJTdGfjk/UFJjTkst
QGx3b25zdz5HYHphNWhrZTRsP1pyewp6Vm43ezV3RzNoS2kpUWRfUEBTak9NVFclc1VHSWd4TFVv
dn03PGNScHleRSh9NU45dkRSQUcpR1MkMWg8VjBmMVkKentXTmItOE5qUVFuPHwhYEh4cjt0ISVa
N2NiJj9XMiR1NSlhem5uV18rTmE7QjMkREFHPUxwZ1d3VlVAbmFRKEVsCnpIdj9RVHl+QD93UD5h
P1psIVl5Sy0tWSs0MDQwQntURUhJI1hPT3khQWNDWmkyeTZwQ1pURSlMdG1EbkBQSldTOQp6ZklN
WjF1dlV6SjNOMHhnaH4lYndedXF2I2BYX3Focml1Pk9ffWt4XkI2QEZmYUpSPH5ESXhlPCo2Kisw
fERTTEIKeiVYO31NXiVlejVkQnVDeHpDa0Q0UkVmNndPNClaTkdqMjFJWk4oPyhfRlFIaTN4e1VI
Qj9YY0IqRjZoSXhFTGkoCnpRUFIxVCRGRm4wSWNiN0BqTWdjflZtbGk7JSlNJDVvZVBuUk1HUTc8
SEF8ZCEhZmB0dW9PYFlpY2sjRjhYJG5BVQp6WEtKamd3TjI8bGVaVGIkJEp9dEFAY3VBclhCKVNF
RFpBV2o7SStUZ0RzNz9vPEtYRW9OKEF2X3hqPSRNMDZpVz0KemNCSkNXQGZ5a0VkST1RTlZsUFk5
WUVkS3VgZEk+R0RYeCRRODBrKithX3p9blcybXgrbnw8diZTfGU3NHo1b1ZwCnphKClKZjs+Iy1w
TzR4cCpqWTFKVVUtalcqaEZyZkxLS0pYN187T05UVUhyQSZhZ0l5N1hAUEZZVUAqWVl7ZFMwbAp6
VS08VSZ0KFNocU48cFdzWiolam1eaFl3dl5vZXJJR1NyZTR7I254WEp2akE+aGwlMkhad2dPPV5m
QUIqZWMxTVEKel4rMT0lTjFFX0REIy1lb3A7aX54SjxVSSpmWWtaaSEqUXNteDRWdiF1NitlVThu
YHpealBPQlMqKm9me09EQF5lCnpAeUFtN3N9ZllEbDY9XntYZEBvWCgyQlFMITkzOGIpY3ZmKUA9
YWw2ZSR6dVZIbS1KTDl+bVVMSkViZ3whIUpyYAp6PHJYP0woJGBfcztwaSRhdDhwaVFkVk5SPXda
Wk94Um9xNlEmfEJLbDdHVXljeUg8Qm09bT85cmM8VW1Abj5GJV8KelB8cVlJZV8wN0RRKGRXd2xp
Xn0yUUtUY25YYW5GbFNeQihNTkxtNyVkcnRVTkpUbjVXXzM1R1lQQWZiRj1uNnV5CnowTnZ6WV84
bWo9RDhMO04rNE1QJXwycDN4cV9xVCs5NSlAZjNQdG5LME90dWBDazRGMHBsWHR8VXlaUHZlYWhs
bgp6WmEzM0Y4bWsyd05yMVhPYEkqej9KODlDcVVBSkV3Zl8xTSgkM3hQUTd5c3tAQEE+emlsNmBp
bT1KPj8jSHg3aSoKenFZe1ZJQjdscn1AYUVzR3VsNVhJeXArdjMqM2IpO0JSKjAmSFNSZE9pcEhG
QSE0X0BlcGFtX0ZXPXROYWR1V2ZfCnozXjlHJF5DNERUYCEzeTtvdTUpXll6V3FRNmpuZFhtay1M
QHdBcEREbmlnTCF5QXRgR2Y+K0VZZi0pSV5RI2Bpegp6eF5RNDw9QGtobiF1RVRHTEpvNiliZy1A
MyMjWUUtUmBZSi1Hd1cxaCpMYThLWV5pekJicn09RGYoYm5EWWZ7fT0KeklsRzxAJnNPZ2xtY1Nm
c2QrdF9wYCM0VlM9KUVHM0ZvRH44azV3M2FkejNtcXlVTVM8WFhWOSUxNm9BIVRYQFV9Cnp4eGJJ
VjRlYSNNWFozO2FlVnJfbUxMUXtwYzFWPGBMZTtIT1VUVUh8SlBzK2ZiJTtvQlZOd09XVjh7NHIj
RG52KAp6cGxiSiZzJnhDUjRQWkE2Yzh3UHZ6Tk5mKmFUTD93PW9iVXJjVmJ0Kmh2Szs4TmJOOSpL
JHR9VHErT1BCcEBXdmAKej02ZDx3RG8hSTNNNDh6NyRsQFFiYyZ0aFdNbU47ZTYpZGZmNzl8bHJq
RENmYTFMQzBOKGs+QjdWVV8xUl99U3E5Cno+SykxVlAycEBHRih9MHR6MF9EZzhzelolentQakEp
X0gyeyNEel9JYUlsSXJkUz1ZIVZAfHxmPDBBcDI8UlFjQwp6VnUrRWM2eGE3VT52MjljSnkrMEtZ
UGB8ZnszSSNQKnRSNFd1SnBTYWFvRGJnM1drSnE+e1NhTDVJblRpSndgZiMKelM8b2pSSUN5ZXBH
ZTdZXz8qUE0mWm8kIW5nd2x8bnJ2aUJRK1FVfEQ1M1ZKYD56e21VaE5vKXAxallJRXs0TSZUCnpa
SzE7dVd8UmxSZX1VUkdSSTlfMWJkbHl1OCplSllQdk5Xe0xBSlVKZStoaFpRUyReTD8xTyM3dHpC
IyQoWG1ORQp6b0ByYGs+MDFWUFRpfjljY3A0QUoxWCZ2bEs0dChgRE5uIWFzd0pEPXs4e05TX0VD
eX5NQF93eGh4V0gjRnRqSVkKel5VanVgR25mOytGKihyYTYhPW0/dklaTFhPIyl9LU53KXk9Z2Qy
c2RgVGgoXmMzTHhQVz91QT5GKzxock5XZ1JOCno9ZmhsSF4mVy07UyY4Z2orbEA4K1E7RExtWX00
ISh4UnpgbWp0b1gmUVVORCtULVIqdVNKME9tQUptYyUlM0ptRgp6RigqO2xzMXYxRntGbjclNlF6
cCFkdmZoa14tak5BK31zVnBWYDE4M2gkcEFeTFo7TX1laSRvKklWPEI0ST9ATmAKemlTOEoqUG1y
QXlKNUwzcXhUMml1SVYqb0E2dm42XlNsWSE0JUghQW9DNktZcG9gOTcmJV97fVhPMVh9Pks0Tkt5
CnohPmJ5ZHJMcUNoQGpkXlolSXtfeHkkaXF1Z0BSbnt6Z2I5a3VxdX5LPDMtOVpVQUc2ZmlHWHNV
QmU1MWd7cE0hbAp6YkpHJmx1Sj0mYCtnMX5EeTJxRlRMPmZza0NwSzxISU8hMHdoYi0/UF5KWmxQ
MjFhbndAbEthM0RwVE1APkpFRkAKejlQaShoZFZOJWV3YUYkNUVoO0ZpbUJJT2hjQysxVFptIXwp
MHl6fkgqWnBDNEFAckpVTVQ1QTw4VVZQKTIwWUZuCnpyQEJYRGp1T1UmaU8rMyU2UV4rdiZ6cnxh
M3k9RjFkaz1IX0kyez9QdzZ2WkhmbkdFU0g3NlNBX0ZiSyN2dE1PRgp6VCpIe3ZrUlZMJFkjcitU
ZnpfM0FGUXRCSCpGNS1zVDlATEEoIzlfe0U2YiRxNUUwNTReaCs9VlZBS05pdztPWWYKemJCeF84
WWRaaG43RHk7PjxJQmdkMU9VK0oxQEBVM0tjNSEmSlVYeFMqbkU2Ry0+I2gmbnt+bDxPbHVxe0Y4
NlF0CnpuR2NZT097VCYkMFVxOTUwQzJKYGVHOWFLPzQzMzRiUU58NFA7R3RIJldkV0tsYjN2Qk89
e1JeezBfX2YqayVzZAp6bSVjclFIVjRyTl81VE0pLTAkKj9DLUBBfFp5SW1fZTl4MVJyP1kpXl88
cTQtRy02KUBGVXBvb1hJb3JTOThqPTMKel8pNihXaTwoXk4xcVBfZTZ5RUQwalo1RnpwdzkxRWdv
SkFNWH4reC1iWiUqbGVtJGQxKV5nb2hffDlpZzRwKEJVCnpKP1AlWW15aipGU3k9a3BHfTEhSUBs
dVB+a2UrazFLdGNraCg+Oy1IWmE5TW9PVGIyKGNWX2tgZ1UheShAWnc0OQp6YjtxYHBHc3ZWI0t2
fSs0XmVjZ2ZNWE13V3R+e0g0dXpoMTZ7azloWXdvVHZRK3N2UTZ5PXR6R2ZTaTNgcE1sY3sKel4w
JTsyeD5yKEVlNyg+cHcmaGNEWDNYJTU5QjQ7dUxKdXUlbVBYIS1Cd2R6ZjskPmduWG1icmVBTk48
amYrS3tkCnpmbEojcHp0UlFvbXloJV9AM08xdGUoZU92VT9IeHFtLXdYam08dipkbnh7OyNXQzRU
RTc5OHYlRUp2aD1tSj9AWgp6IXkmaTVkfFZRQlJ3Rm45PVVnSihfbmEpbkJkZTM9Rnk3YWtxYSt1
SWRPazNqMFJmT2MjI0orZ0xjaHw0SEAhfTUKeiVUNn13JH4oKXhvUDV5fE9Je2wwYTdsNXtGIzxG
fXROdWpFQ1VJfFE3VDx6LSRFZCsxREwjPmpDdiEpMyQ2JmRYCnpDNytiMlRnSmk3WWwkcTJoM0BV
aC0tX1BXSl9gPWBhK3s1JkN5dkB+Nz1lUm4xcyluSENtd3EpXzc+RHoqJjhfWQp6MmBlamtebk5V
RHNCQEpsYHQjZTBeWjZEank7byR6ZjREX2hUSEx7JjdCQmVLWm4mI354cVpIbWtMQkE9UzVAPWgK
enBNNjw5ZzUydXNDIT0kPmxUZDZHc34yfGo7fiRYXmRKITQ0THxGMiUpWGExMGxVUXpiU3o2Qn5j
Mn0jcUxfSiMhCnp0N2RzYCZ5QGtRUGZFeG1YJT41Qk8hfk18Kn1jPHh6ZFl5ODAhUD94TzludG9R
elFWVkk/K09WQX5CSCE2Y0t4WAp6LUA+T20hT0NMeTIlPUFmbTxNZkYlczBzbUokVXBTaT8oTndH
dkQmbztFSEdeMj1sdzNmKnpsZ0FJcmxmR0RuZSUKenw2RjsyVGkteyktYXp6aG9ISTBSamhHdXQ0
RE9ickpfekpxN3JyU0duTXBeP0ZgMyRlWnZCdiVwQThlfk1hdSNWCnptcVQ3V1dENWl+LShPYUAt
Knp3ZEBAcHU8I1c+ezVwPChaY1hlQ31xc3h0dXkxcnNVR3BkfFhSQ0cpVW5POXQhZQp6JSU3Wjtq
ISYqZ3tGIys9V1U7Xm84QSVrQT9YODRRKipKIzJEPzJtfTtocCQqMzlreCEtKWdeVTtvKG9RO0Az
a04KekRZcTxPNUYjV19GcHc0Rm48I1J6Zi0hY0BYTzNKSGd6QEdkdU5VLTFWbElERGlOIV8rYzZt
I05MeGxyOW5tMjAtCno4QCYydzNWP01IRkRiMmN6cG95azBoZVJvaFFtanQ1TE0mPmRLeCpjX3Q5
PXw+WnlBUHtqTDlRQmFEYWh7T3EmNQp6S1EqYz8qQSh3fGhaPk1ibHFzRyVCJGRKeEdrZkd3ZypC
aEJrKXVkTStCazNldkQreEpmM2p4cDJoY05DNSswMWYKell1dHp3UztGK3VTXnJ5bkBSZ2BOanYo
KkloKWkxY3AweiE8e1JgeVhYfD5KMytyO2FZMlBAZHVCTm8oWGozY2FxCnpxbnpDcGQpOFc8SXRm
fXY3MmFpZE89KURLRkxtbmdtTUYkVD9ZakE3IzhDRU5WZ2E2RFByI3tsb0loJmtsKFMxagp6N0cp
RyZYSCZqb007R3A4I0xLVWdMOGsrPytwMys1Y3V6ZUdyclhOP2M1c29qQFlIdztVMS1lV2RibCEj
dyVve0gKejtCK2NqNVNrZjdAeCE3VisySlVBZjFrfHhIS1NCVEkmQ2E4cWFIXkZZXj1PUDV5dmIq
Y2lLN1FkKnB1U085LShxCnp1VzRwKDwwUiNEUnkpQ290Tnk1JGdOa2FxJH56WVF3I2EycjtJKzla
K0UxLSF3SVQ7KXpVJj16bkdHPXZ7MnAmNQp6MWFhRUM8KnpPK05TfTIqVitONnBTY208KUYhMnNw
KjBuQnV2bVhBY1VpcUhIXjVUS0d4cE4kMCpIeVFjZWQ+SXwKelZSVmt+eDEmTjVOKVJHTWUkQ15I
JWxXN3VeQVc3TjgkfUJJPDlwXlEhUllMOUw5dktrPF40P3h4dUFTUFIleCF7CnprXnN+Zy1qKn0y
cmUqOWJTenNfb3BXUjh3Y1cra3NTckZXQ28mfkNedlJ6MlR6d3EyOWQyQWFQYTtOc0x2NVh7Vgp6
V3JlNmhLZjlUa2wje092ZDFwWG96TyZvbV4jTVExOUBeSjEtazc5ZitSSVdYeWMkPjAzeik1VUM+
P0BTeXNSNE0KelkhPXl2KntxdjMhOzJTdUZvRHZrMEpXbSlpXyRVZjQ5T3tiNDFiIXRxfiVNXnlU
U1ZYU2lsY0VUZV5RKmBTe2J9Cno+S1lfPnpockhtVHphSjJuLU9gOCNjP0pYQ2pXRGcqNiNKZ1VQ
QjxQTDF7ZHwmLVl4czszNk56Mk5CWktjQUkyIQp6U01CWDllKWNJalZ2NExsUDk1JHlrLVVWZDRJ
WkU2bXs0QkZQJD1oMDJ5S3Z0MWBaLTtlZ1lTKz11MlVpK1g/c3IKeiZrPTFMdXJeK0xnYnQzakhu
PjRDcTU1U2ZYPEh7blApWDRSSXFGLSkpSShFTGlXWWB1Y09HaFV4dDk0NlR2ZDMtCnppcFc3ck09
VHVfVTlTITFoJiZQVVNCUHRQXkZkcUpaXnJuYnh1TntLTm96bSlBbnhqXkcoSGghbHdUeD5IeEpH
dQpkWGtMcHZnflZfWGNkYXJzTzJHank2QH1PR1JrOVowe3t6RCpVfHMrSwoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Byb2dyYW1Db3VudGVy
Qm9yZGVyLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3By
b2dyYW1Db3VudGVyQm9yZGVyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU3
NzE3ZWY4OWMwMDVhNWU2ZjNmNjdkMzc2YjU4NjFhN2ZiNTRiYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2Qw
MDAwMQoKbGl0ZXJhbCAzMzEKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5HQzw3NyEzSEY0Z2xr
eFU2a35DYXlBIzhAYjIyWjE5RURfJEFZVFRDCnpEbTRhJWg4Nn5mVXFHUlQ3WXEhZzFgR19aNSpR
ZSlXLXVeXzd0R2xlWGFrZ0JPWShNaVZmWVYlMy0mSWIzPjR1awp6QFE1c0NWQmkpOFZNY35vYjBt
Tyo+P05NUXVJI3MlOEFaNnZad2owJTFxI2pnYmE0IV49dUorTCRhP1ZxfE5rYjMKejlHKVchOWIp
Kjc3KnxWMyktQE57M20/dXxWY2Apc0F4Y2Nra0BxZGJxZm0hRShySm51e3ooWkwzc3gtK1htK3JS
CnpacHslQ2BlITxgUTt8N3FySTR2a04jbjBQYjNTZ3pBSFBHPSs1eyMlVVhpR0g7O0NgdDQ8MCUw
YHRKcT9ISD5XUQp6bUgrQ25KY0BIYE9hSFJ2Z1o5PU1qfVJIWmxtdzF0VktQRnF5PCU1UF4/RXN2
fDdHK2dvKzxfZ2dDSVNmXkcxT28KUUsmTFd6eTg1fVNiNHE5ZTAySlY3QGM7ay0KCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9yYWRpb0RvdC5w
bmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9yYWRpb0RvdC5w
bmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOTlmOTM3YjliODk3ZGFhYzA0YWY2
YzIzYzU1MTVjYTQ1YTc4NGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjI0Cnpj
bWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeb0ZMND4xfCVPJFdEQHtWa3xuTVlDQmdZPUNGT31sc1NK
KU9gQU1rPwp6cDFGelhzWD9pVURWMnBNUSpENVhubWs8YExuT2okRkRVWjA3em5VbCp5LSlzdGtG
fndkVWVeIXUybyZMT3NpUVkKekBoKXE3IXo8dSUkTGdIWkdyeTtvU3krO2V7Qz9JeSh8QFVtbUJ2
ITM2Q2N7O1pPKk4weVlgRCZgb3IxbmErMWtXCnoyP3g4XlkqcFRucCFFQz5rNTB0Tj5pTGJWIW1S
Pjg7bXZqOCR1KT1CWUEoa00lTElBeEBAI051ZC10YTcmYUIzYApVRVV5WEtLLVZ5TXk4NX1TYjRx
OWUwUW1KJShmfE1lCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvcmVnaW9uRW1wdHkucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvcmVnaW9uRW1wdHkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5YjYyZWI1ZjdhNmViMWYwZGExN2JmNWM0ZTBiYmJmYmVhMmNiNWM4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDExNQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXkFUfTJo
R20haWNxcGs7fUkwSmtfVD50PDdLWGN+SHc2d0hsdVUrbXkKekxCXjZHemhETjNYRSlNLTkwXllz
I31FJEw8Y0tYUjhXfnZ9ODRmdjNGeGFAbm02dV9rNTJ2VHIhK0d6NFk4WDZTCkx7YW5eTEJ7VHM1
UElWdm4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9yZWdpb25GaXQucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvcmVnaW9uRml0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmYjQw
ODU1MTU4NDNlYjk1MDlmYWMyZjgwYzRkMzUzMjMwZGM2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAw
MQoKbGl0ZXJhbCAxMDkKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5BVH0yeEdtelo9Qy14dFpW
aGl2SWFzQmBRS2FkJUU9eUR5OVZrYDtyCnozdWJWNWJ8VmVRNSVxTCY0Qj8xUXsmRH1uZyRvQlpA
SGV3OGBwP1UtQGgxMXEoI09fYkttYG4qdTZ7MS1vRCFNPApENHFHOTAKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9yZWdpb25PdmVyc2V0LnBu
ZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3JlZ2lvbk92ZXJz
ZXQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTkzMGQ4ZGQxY2M5ZDg4NTVl
YWMzYjA3ZjQ2YWI1NTcxOTJmMTYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDEy
Mwp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXkFUfTJoR20haWNxcGs7fWNtak12VD5rPz5USDFl
T1cxenRMVWs/bWAKejZrfHp7VW9lQml2bTBxWmo7eURQVitjb2RAe2otajhKSWNke2NyWX5BSH1y
UG45cmFsIUgkN3AtYVgrSipDTSglClEwdT9mTnk4NX1TYjRxOWUwSkV0aXhjfnFGCgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVzb3VyY2VD
U1NJY29uLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Jl
c291cmNlQ1NTSWNvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ODIxMjVk
NWQ5MjdhODliYjA3NmYxOTI3MjQxZGJhOWU0MTZlNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEK
CmxpdGVyYWwgMTA1Nwp6Y21WKysxbTYzSlApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFe
QHM2YjkjRjgwMDAwUGJWWFFuUSpVTjsKemNWVGo2MDZ9RExWcjN2blpERDYrUWV8T2VkMnp7UUpP
QlUjISUwTHpSOU01c1M5P2ZQUTVnVFpPfGh3SShAM1dsCnpFaGAmbEk9dV9oOXZVa2BkVnomS3Rm
MmEqaCNwOChMPzlJZntiZDlfRFhFQzs8dFFwQ1dnI3B8N1lAPWlUJjZicgp6ISV8Wm1ST29LITlD
an5yWlBSPFB7TlY3TkBCN1paPWw0QyVjaDZQdkpkY1NhNigqUVEwMDs+UVFFRF9BRTxIVXgKei1l
VkpvK3dFMj02cEIjRj17az58YVk2UkI1dzdzakRJRUBuLVJYMiozPkU8ZU5yfWN7dX5mP09oTmpj
c0FScmk1Cnp0Sk9SSVNxZytyZmBLM3VLSkViZ2NeWVVDM1k3JUZZUEItbik2PkheJDhsKERZWkdO
KDAwampGS3wjPElPOUdJUwp6bGs9QUBBdDUxUHpLNGcwZ0dORiFmSXlLREhwdEctNzktLWRpRCkr
JTQyKUNJOS1DVmgwRHFBWEhxPmdoMFY2PDsKei13M158Mm5nUW1iVU1gNipOYn1rUVVNNGgobSFB
ezhpTilqWjhlZXNRMTg4cUVMaGMjQ2QmZGFtaChNVW8xfH1uCnpAWCpXRnlMakY0b0c1XlckdCNo
c0RgZmhiUHh0WkdgR1QkbHIhYF5lalAqP2Fze0lqY1Ujc2JJV1gwenJIKSlNRwp6MERlcFcxbXh6
WEQ9PmUhaXJyaShjJXItWnVHR2BmY3ZRU0UhO1p9MzZlLUg+ciR6bVA8X2pvSkpIbUZsLUZUTG0K
ei1CX2V1RWlEQkNmUn5QWSpweis8I3pkMUMoIXQqWWFRKkl3SXhHcm1SVjMhYzg0KWB2MHBaRj47
Jn4wIXBfMzYjCnpeckBPYFh0THJsaU9qdVB1YH5lUGdJX1JKb2haczIwWWN+OWdIQmpKS2c3QSRk
JnFgUyY9VXxWYjtVNEQlUl9Cdgp6Q0NjamVHeVBsdyFaYyRPcmk0d0NScytJQDVuKz10YDBJeCNI
K0h7YW49aEhaNHJsVCEoZio/dUFITFAwX0tPKSsKenBLZkI7ZnxEckN0dzJZQTN0RDxAdXkjR2Np
fXBMJXArNnhGZkRrZW9gWD9XK0JRPWhMPig+Q3Y4JXwrVyU2Mj8hCnpFaG5DdWFjdDJJdGVDazQ/
ZnVRe25YMHkxdXNSPjNndTlJOCR3bFpTSztVJjZCdUFpN3pZcTdEJlNVUz5XbFg8bgp6KTsyNm9V
UTIzVjBOcE1wNHB5JlZkWWJRfGNfbDMwLSZ8Y2RRb0VZej1TKHI2RnkoLUowQlRoZmlzdjgyUiRB
M3cKelhGRlVPZnpBNUVDYHY4KT4rRWx3YX1YUDU5fmpYR1dDSXc+SChyV2VHSnZ8ZUl5VWReP1BZ
UkNNZ3wlaDhiLVZACnpJeXhHQ2VTSihPY1MqIz8jcyZsLXhlP0l8aF80cVdsU3kqUl8zOHQ+PFBf
TCFIcFhjYkpURFAjKU1MQmQmZ0w7Twp6Rj5ILXNyKmN3SzV9VlU2ckwwYSFNYG1WYlA7Y3x7QDx5
ISoqKG4mMCF0K1ZYUGYza3ZKVjV3Unw3WlpuR3JUSjsKekUkdEdTQztHZD8kc35GZT5tdVgoWGFM
K1FtOHh9VVhzQ2tSPU9YOyZPZVRkOyN8VkVGNmFZXkAtb1JKU18lQWYhCmJmNSgzU2g/ancyOTR7
fSMwMDAwME5rdlhYdTBtamZndjsxcQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Jlc291cmNlRG9jdW1lbnRJY29uLnBuZyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Jlc291cmNlRG9jdW1lbnRJY29uLnBu
ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVmNjU1OTRjODI1YzNiMTgzOTdlZWRk
NzMyOWMwMTU0N2RiNDMwMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA5NzkKemNt
VjteMTEkV0JQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUJXMDAxQmUxXkBzNmI5I0Y4MDAwQTtOa2w8
WlNpfEw0CnpUfVR2QjYjaXlyKlZaLXNPWj9rbig7X0hiRj9EQCNnSG9nKTVUT1NOTGEtMndVVkdg
cVVJSEpZem44JTFDR15jRgp6QlBnUWA+JW05YE9+V0otNXAwIVl7bUloWikhQlFTSkw4UEl2Klln
MFNgPjhRYV5+Sk1iSXkwWmJNTHUjRWNuYUsKekB+OzY5dmFfP0ByS1AzJFRSTj4xTElqQFl0eFIk
cEN2NDVqUVhQbHVCKzJYTWdzR3tpNF8+ZGdCTmhPalFrdmMwCnotYHxyPUd9NTwqVD4+Rlh5V1FV
TSQ1Tm09aTNMSnhIZDZvdzFfb3JneFZSYHd4NyZeQj4xbDFPa0dpNndMZXJ+Ygp6Q2lDKzBXR09Z
UERGN2FpQ3UqKnNwZGNwUXh3Kk1Kcmh1aCpSfUFSc3VCQHojaDxNQTFyWXxvcSpFN0tIbmdLb2EK
emdAdUtOKEhlRHpFaHo/eWk7RlFsSmdtKkwrenQmNVgrVCgkd2w5MT5wVCs8aUpEdHdvJDNSMHZM
cXMoN180UlJBCnp5fT1zYmxHPXR3NG1MeXpmZ3s/cGdednYpWCNqZDdeRDgwVGRHNSNCMkV+Sj5S
RD9uVlNHJDY2P2ROZFdCT3VpcAp6NkZ9bDtmaipNeTFyZko8MTZVNiNoSTAwRDtuZD5lU0JoKWhB
YGEmUW0jVHBiVFFtcX1IWCM3dkFBT3p8KGYpS2oKej5ZZFhpZzclKktBY3hAQCNyRCghKERucHlX
Q0FUN2ltY1FtKSZUcCF6ZD47MkB5e3EtPnEhZ0JvZ0FZYEd0NDVzCnpTT3ZWQ3B5LWBZZTBXemwr
PFlkJFg2MTM/WSFGdFNtOzxvdGtKXz8kKVNSTD9IUTRJe017KHZEIUtvdEAqTCRgcgp6WmVXd2Nq
e3N5UTU/JXckaVFPNnZwdFctWSZEQXtJUEFhRH05S2REPj0kcXY2OyMxXlMmcWAmc0xoNTBaN3l4
RTQKek1XQXhUR2RfYSp1UzYqJmltdms9a3ZoOz1MMj1AYyFiSTE1OXdXMW5qdGVzZ255ZFVzLSRT
KypxZSV3VDY/YEN6Cno7JSp9az89cj1gS0JAdEVKcWM3NzUhdnZfPzYjU3JlSVliZTJJWigjJEVM
VFRRNUROaXI/Xz5WO0BjYGskNkZxTAp6UVEzeFNXSm1LdXhOdGxPbn16Slk0ajJKWWRybGZmK3Fz
YU9iN2hYOHk/JE0qaXMyQygpQipEVmJ+QHBCWSYrdlkKenE4I3NWQTIzJmwxX3VYYXh3TnotJnl8
JnhWUlVwZnFFY3BOWDNCY0A+fmdzPEswZEJSVFQpVkB1JEdnZj9nRGNGCnoqbzh3TU5uS3JDJXQm
aSRZR05fS25GN0doZTNiejs+aFN1e0F8NHdYbGI7ekElZ2Y3fW97YiQyaHNIb3NETnJ3IQp6djV3
aT0rUzw2c2E5OXh2QndVQ1J4bj9KIypSfThRMDcmMV5IRUhvWWwlNT8lY2VvQFFFMGJRU2B7RHMw
N0tgUEoKekQybTxFP15LI20mWFF+IzNydiE0O3NUSF5tVUVKdmApfmVeZSp4UVpPQFFRQitNV09h
MDAyb3ZQREhMa1YxZ1BLCkIlUm00QwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Jlc291cmNlRG9jdW1lbnRJY29uU21hbGwucG5nIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVzb3VyY2VEb2N1bWVudElj
b25TbWFsbC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MGJkNTA4N2E5NzBl
MzcxMzc0NDRiNDVhYTFkMzZmYzdiMDAzOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVy
YWwgMTU4CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdCITYxfDtQX3w0IyVgc2glIzVBcmAm
SzJAQXZvMU8qRksqdGpgNAp6Qk81WSFtPll5VHw5NyR8WWB3dzV2R2ZZVjJKVXpGX3d5ZStrKDEo
Y2Zubjg3aFV3bGZvO012N1dfeikyO2Q8X2IKem5uXnFnd148TUgyc3YmUFpgazF3NXdTeCFCZntR
e1hVY25+UXtoVXwzPURyU2lHVGZ7d2M8WHxMSXpKKUtiTGgqCkcyfjdiMEp2NzdzCgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVzb3VyY2VK
U0ljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVz
b3VyY2VKU0ljb24ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2JjMDVkODA5
ZThiNGNjZTE5NjIxNWFiZWFlZGZiYTVhYjRhZDBmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgps
aXRlcmFsIDg1OQp6Y21WLWgxRWw8a1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFeQHM2
YjkjRjgwMDAwUGJWWFFuUSpVTjsKemNWVGo2MDZ9RExWcjN2blpERDYrUWV8T2VkMnp7UUpPQlUh
e1lnWVlSOU01c1NJdXR7S0BALWNMQUJIaGYrbUd4Cno2UkJVWk5QcXdkQXRySmw4dTkzJXYzbH1n
PEpwN3B1OENJQHFrbipuQHpqR2k2R1BRPDBUTWBoUSRsUCk4O3U0MAp6Mip+SElHWHFOJnkxVEdi
bCRYNGBuSyFkPGUoeik3JmhueHQhWCR9QDJ+IV5jaEc5NjEjUyhENC1FLVp3OXQob04KenVgRnhB
NjdURWtpSW5FQEg2KztxOWhifUh2Vn10N3htRTtObG9Dcms5JCU7TjJCJVlyNWVPb1VNJnE0LW1J
Q1B6CnpFZjl6Zmp+IyVMcilyR0lwYkoxRWtzentJRUR7K0ExUiRUIV92VjhEVnpIUGUyJUtWRjBL
KHokS0Fwe0dRX1hqfgp6LVBWa1JaVUFiTGtQaChze2tAM0Q0KFlBP2RfRSNFPTxiPzgxd2JoaCh0
Jm9uVHtReWVfM1A3OU1MX2MyPjJ5TFcKem1GbnJTUTMoaHApSVQ1PzN+Q2w2WloqMEFWRElIY3Jk
OVJCPTJRU2lkQX48cClBY1JUR188bjs7OyUwdG9WXld6CnpCKWp6I25CVXRWOTllK29nP2t7KEVH
UnlVJjVpXj4kdCReemBKTXIwX2ROKXdTSFNUMDFfKlBQJGlkdzk4I3dmQwp6ODdrS3w2YHZoQjEh
YGZIXmVpP2VjSj5qXjVzPGQ9QnNBUipmT1Q5YGI+UDROQnRzMDIwKDhhPSZxSjhYSk8lXmUKel9P
WGw1enlPWWkpRVdeYDFIZDY/UGA8QDh4NE9Fe3pXVnU5c0duS30/KDBZM3ppcTx3KSlRISkydG1g
ZEw9UWx6CnpAVkxEIWFHemQ2V0FQQGleJmNQX2oqPm1JPnUjdT5UU2FecVRHSX1nJUQqQ2RsfEc7
XjAmKms1O3RHbncyUWFTOQp6bFdNUHFve3t5Yz8tQjdEdnVIM3VXJDhaZ2VrPWdgSz04OXJ5fVkp
czklfVpoQFcqemd8MWJweTRpMTIjNWg/VG0KemVFXmNsQnBIYFZCe0tKVEpkbnZgYFY1KihDTWNL
N1dSQzhWVjZ8RlJMRmpIb195UktNTUtsYEstRXc3cEt6fURwCnpyXyk1QEQwR2VWKjA5SWZZP2g0
OFc7NTkldD5kfUY7VUh1RHJLSWtKVWF3Y3YrZWpvYnY/aSFpRnBrMC1OSzF7bgp6NXomR2VwcjZB
NHBsOEkyJWpKNTMjYDgqZEk3LTQtdV5xJkYhdkZ8OCZ3cDtVVENkVDRaYm02KmwqQ31pa2xmRyYK
bGZIcS18Y2YwJndYeVNqemUqcWgzO0pxK0ozcl8kNTAwMm92UERITGtWMW5AJWlNe3s7CgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVzb3Vy
Y2VQbGFpbkljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvcmVzb3VyY2VQbGFpbkljb24ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
Y2Q5ZTA2Yjc4MGM3MGFkOWE2MzUxZDFhZGYwZmZjNzZkMGQyNTgxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/
ZDAwMDAxCgpsaXRlcmFsIDM3OAp6Y21WLT0wZnFqRlApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcw
MDFCZTFeQHM2YjkjRjgwMDAzJk5rbDxaU2NUMSgKekYlRSgtNm8lVlU2TjRMKmlCfStPcDIkUCM2
YFZXKjk+SEIhb0xDJTg5MD5TSSMyOV8wPEBGaS1salo/YFh1dGp+CnoxaGtrfmByaVBlQnVVbTtt
TXgjJnQySXAlRFd6dG5OLTNrfl57KTJrPztjZTNhVjt1fTsjOEw5Yl9oVlZaSlhxSQp6ZXhTPy0/
bk42d2JUeTlTalZsNE5gYXk7dUt5IThnWV5Kc2JueX5ANjs8Zi1ONzY2flBlK21GayF7RmRILT58
YSkKek9xUmZ5NFR0JDROZGxtM0lMcyNqUH4pfSRlOH56QjhhTCpkWm9MNG80bWx2YW0lIUg5bjdB
PU43JDZoXihgYk1ZCnoyeVh6NnhMRmU1aDlFNWdDaj5qZFNmMiNJMl9kRj41JXFvJDAwKUhsXl4z
Xm0yUGVTcjI7UktfbV5hP0x0fVh6JAp6ckBmX1Z4YFg0REspJklLR017MjR3OHtuMFhzeXE2VUdM
I3tZOVd2e0JUQVp5S3xNTUZzO2FzYHkpWF56KVp+QjEKWTRgOzJHPlMzMzNuKmFhKzA3KnFvTTZO
PCRmYDVecDNqaEVCCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvcmVzb3VyY2VQbGFpbkljb25TbWFsbC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9yZXNvdXJjZVBsYWluSWNvblNtYWxsLnBuZwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFkZjhhYzBlNmRmMWE5NmNmZmJlMmI4ZmM4NWZj
YTFkNjU4MjVjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxMzAKemNtZUFTQE4/
KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjF8O1BffDQjJWBvfU1tX0FyX35UNkJkWEcybnJVZXV5SiM4
CnpNbUEqZEZnRk53e19rV18qbXtHOVc5Z05LQloxNnJ5Yj19NjRVI0hOTiNZRUpqVDwlO3M5KUdu
bW17SFpwTE5RNQpjN2MmTTFvfERSNzFKMmYjMDFhakVib0Z5dD1ha1J7MDBOKlMqOGwoagoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Jlc291
cmNlc1NpemVHcmFwaEljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvcmVzb3VyY2VzU2l6ZUdyYXBoSWNvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQ3NjVlMDJhOTlkN2M1MmUzOTU3ZWI5ZWI4NzI4YTJlNjI0NTE1Y2UuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTY0MAp6Y21WLXUyQUJEWFApPGg7M0t8TGswMDBl
MU5KTFRxMDAxQlcwMDFCZTFeQHM2YjkjRjgwMDBJck5rbDxaU2l8TDQKeiYySk0mNm5gX2o+dSk9
YmlHdkdDVTcoUGREZ29NdDA8QlB4QjBmUzxCfHokaHFXJUxfNDwpRW5OK25iXnk7UTFICno/b35O
KHQkT0w5KyR5OTklODlnKjNRNDRkKmQpUjY9bFd+Q0FKYUdFTz5pNzFhVXIpKEdGcDNnY0hWRV5g
QFA/TAp6MktjYFp2ZWttMFp7Sn0lSjQ0fDB3MUxtPjJWS3twUCo1UzQlUng0cWdIJD5Wdk1oc00p
ai1wVkZnaU53I0A5NVEKenRRNyRBUnRwPnMyTikobWNYdDxmeT45JCRMRV9tbm40Nm59eXNBUUhJ
MUdkXm40RnZ4LSpHcj8wSSkzcEdNVEo2CnpWTEZwaWl6VVUrb3Q5M2dLJDBtYTNjc0koPD5lRl8m
Kmkoal9YT30yVl9RUmpCYUV8c1k7NWV1O288WFYzV1drQgp6bGdzZW4hMj5XMTlWQUpEYT04cDA7
UnQqXmRMeDJzUX53Mm8rYF5oPFV0ZUQmNU5NK2cjUjxWUzJRYkU8enJTQl8Kekt+KVBkSjM5LTh1
S2s4PGM/XylXQCZJd1ctTWcrX3hwTTV7I1k+LVNubSFRZ2prJGImQTFwMnx6QHRZS1hrM0wqCnpz
MiQwdCFOa09iP3M5dG00MHJETVdufD13QTZnfSR3MyZBWDJNM1JRYU5eeypQTikwNSRaTmFoYTsx
IT8yZ3Y3aAp6YVIyQHxXPG5NY2kzSDVkT2FwP0kpViV0N1lJKnQweHBVYGQ/JW4laTsjRVc3P0NP
ZGhlMFNoelp6dlEzcl8rVTUKejtES1ZQQWlVaCQ4eHNUIzFwSHVHQ0tRV2hTWHhTZ24kUDFwVSRe
YURfRFRTZFUod0t4a2VkSm4oPT9INjZ7dT40CnpOS0l+LS0hcFVyTzY0THtEcGg9QGkpV1QkKENy
fGhUJilAfDtLbUlMV1FzNV8tejdZa0w+MkorK2ZiQSYkZjZmMAp6ay07KTZfI0xOVkFWKF5ndUhk
VGtLOz5sczVNKD44WERWVH17VmNwUDxob145dDZWT1hPS3xZNVVPMGFJMVpXbGcKemBwTG47PiMw
OylxJTdCdzB8KWxOPDsjfnlze3JfWS0tYzt9STJhO2VIVU9UTVJtPXBwK2ErYyY3PSlhZmc/Umlh
CnpsNWBIa3E1ITJ2PTRFeERXfC05YyQ/VlUzUCR+JV9xTGhOaTxBYzhAQ1pWVU4ybCZhOz0/b0ly
MmAtbGxxUn1XJQp6K3N+VHFPSXkraXdoPF4mTHhjWXdqfFY/V2M9ZnttSH1edzArI3d7cHFoa2s4
KGZzWShLaSUyTjFLZ2x6WHoxKmIKenQ1LWp7PTVjdnJpcW88QztscWJlSyo0YzFXSD4hRXZ+QzBM
eyEqejNrd15zSWUmPXdfRTMkJHJTcmpVJT5zM2duCnoodCs+QnpHcFlTeTRIQGJXSCQ/ZWI5bmds
I1k2cjVBR1dvSHFeSS1xQEVsM1I1WmQoMlY+cXlYOX52WkI1d1NjSAp6eHs2IVpPKm5xKzFlUjxN
NT5wcSU8MEJYaEtfVlZVZkYpMjFDNFE/OT1lXkFVUkJ6cTdePW5zRypJK2NkPWtWPDgKekc/fCV4
ajhhPkgmVztZT3wyKlh8PUUhUEFhU0clN2s5JmRHcCtGSkItb1MpI00rcF5FNi00Qyl0Yl8ldDhS
ckB+CnpBWSpGRDNreXJDK3dCb3ohJiZYfmQ5bV50Nz5hXzN4dVE3TWdgcFhIeFBZeFBjN3N0NUt0
VUNZakVzQ2FkZyMjTQp6X1lwbkdXSEx5a3Z7MWtfYzBaNCZycUtOYz5WU29VcXB2c0lndFRQRSMw
RzJZVTgxek54OT5XOFdfVkRNc0t7JX0Kej1zfWt8UTFqRUcxTENuU0JqRjVlaz5xK1dofE5pWmJ5
NW92QSF7RlJtSWFFVXhXbyU8VHZeK1EoJUtGPjhhSiY5CnpfRmE0KDZCPEFXLVBpP042bil3dHl8
Jk8xdXJeUSNQQVUkUCtSQyZoM35WQ15ITHx1T0x8bz9pKntJYl9tU3t+NAp6ODMtUFR4YDNzNDwj
V0FwdFhubVd2Y1ZHQ0FeO1FWLXJOSChIc0EoJUEhN0VtKWBjPFFJWD1hfHY9Vj0yZHg8bSsKeiN5
VF9FVHZvMDMwMUBiXkk3T31hRmt1alpWbjR0JCFVUzBMMDIzeFM2YntVP1I8MmZrMlBXQmVOaDFq
djhuYz5sCnpmRmIpaUp4b0RCUSo2am5RJGs9b0RAdnNAbHEpNTBkKSV3S3o/JjcqdE97bDFWZDgq
c2N5WVN6dTM2X05zUnYtPAp6IztWQ1gzc1MzbHtEZyo0Ni1NemFVfDZQPk4tZjlIeFFAQDVqd3ls
Zjd7QX1XSjcza2MmST1ibCtQOFBfOC03aEkKek9WfX45VnpJeXFJMlJWNDZ8aGskK1YxMWNPNCpL
Xk1IKjZhPWdwaG5kXiN8Ml55N2Z2eVl1T01mK1hTenRPclp3Cno8V2UmODxqRnRkPE0rcV50fFBm
JlomdFA2cj45UHg+aCRAMSFOdFlyM2pTV2VkekxtZUhNTk1IYX56LVpuWHVwQwp6I1glPHhFS3w2
ZnUhYVg+dX4tbj5aVjY4KXAmSUh+MmRjSlZTfnZNQU9kSDR4SG09UD1XPFJnbVphMztmdSs9WGsK
bVFhNVFjNjE2WmA5Wjw2WUI+TllCRWlARmgyfmYyRjAwMDA8TU5VTW5MU1RYamdiMCVXCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvcmVzb3Vy
Y2VzVGltZUdyYXBoSWNvbi5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9yZXNvdXJjZXNUaW1lR3JhcGhJY29uLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjdhY2QzNTI3Njk1NjIxNzQzYjYyMDQ2NGRmYmIyMDA4YmE5NWRkYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVy
YWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxNDI3CnpjbVY7RTEjSjM+UCk8aDszS3xMazAwMGUx
TkpMVHEwMDFCVzAwMUJlMV5AczZiOSNGODAwMEdBTmtsPFpTaXxqQgp6VFRFMH02aCkpOVA1ZnpN
UWV6c01AWUEmRWh5OV9BQTVDajhFJSp4clYqKCNhMDxuQlJkOTx8RmFWN31rJFBCfGMKenFrfllL
N2dkSU5tQHk3ZTl6eX5xZkR3NVpmZXtFR3Vod1d0Y24hcXQ/c2RHRmlSQklxX05QZnR2VHskKC1E
fENWCnomcHJFYDZCRn0pYD4hLTIrR1I0QzsqR3x1M1h8IW9rRG8hdHZWQD5DcmElbTB8NWZ1VlNG
V1pRMz98b3xKOWxZZAp6VjM2a0s9NGZlWWlDKF5aRFMkcjRARDRHRTE/UjFlYnZqZTVMMnVPRl81
MFZ5JEghQDVWUyMzNVdAdXomZ2RSUzgKek5MXmlCakJlNCM3flVaVXZFYjxTMX0pRD4+PC1QMU5B
JnMlWExvbHVKJHY/eUNNRzdScW9hY3k0aE5OJm15PCVGCnpwdURfMTByV0EzY1pma09JTmg5X1VW
cF8ydHRpY1B1e3hkSisxdU84TFZ3WXRNfn0jRXg2PnVIbmstZjtiI2B7cgp6KVlLSE10Z0h5Mmsx
P3lvTFlGUzdNSnpaLTs9ek1uZikrSGxvcSQkYnVEI2NKa0xLdDk2d18/Sld+TkhCbmZtKHIKekQ3
PnxgMXE4d3lWaTA/YzBXTEg7U3FxeG1HU19JZERLM3wxZVJfSVloPyFYa1E7UzlSWDRAPFFHe2t+
cW1YZH1SCnpHQC1wXnNpe2pmdTdVblI4WGclWXlVaipiKW04aXpeUihUenpQPkpnMntfZnZ3WHck
VkBHJGljNDNKdV9hWVpjQQp6bDlHfm1ob2hGSm88NjBQKT5pJl5JeGVrJnNMWEhRelJrd2Z3Nzlx
XnhMVTFfVDNjR19EUWlMLTk8bTlqUks8JDYKendsKjNYZE1wO3d0eXtPRUhtfEkjcXx3cFEqVz1L
RCo1amNlZjtLIzQ2SHFGWktHYndpUFk7PWxDaF4+P3EwVDJLCnpDJH1fNWdORCYkNmk7WD9sYDVa
WDBfVj53ZzRqPzNmZEd9Mm1DPy1YPl81ITBeVEYpO18zTlZFQmJsU2smZGshfgp6dmRjbWYrUHxg
Z1l5Iylib20oQ284PjdhP01rKjtTclBiQmRPOz5zLTZlNXF1QmEqMUV1aXc7c2c5blhMKWBCTHEK
emVfOz5WMWQ1N15tYSRefWVtYGs2OGV0Pz9ZOWZnbkheezhsUSFwNW1FbTZjbDMhMmRXaTlLVyFD
QEIwZmM+biU9CnprKiZkQyp0R1Y7aWsoOGRRO3hEfHEmN0Q8RlNNV3U/WlUhQmBDc3J1ZSFqMSU9
P2BqZFpsPGNMRChkZyttbz14cwp6TDg3Jl9FdnV1U0h6SF8zdiNGX3g7MzFucFpmPnJeWVBDfjRG
QnBeI3J0TkxhKFZ6alhLemxwY3RUeEtjJjY2Kn4Kem9TZEJhaXgpNDdkVWJvO1JQJFI2SiRkcUUk
TDhTSClZT3BNP1dPPjBMS19+RGNIPj55LSlGbipiX2UremtoelU3Cno3PGNJVF5YSjR6VFU2JVlm
TlFoYXJDRCVMYzZQUTQ5dWQhanZ1RHF5VCkxI3kmRmw0JipYdHBSI21aWjAzJXgpQgp6Wjx4emYk
T3xeZFImTD9yKzNTSWhtIUp2bFpKbWdqblZES19MX1ZMN29LN2NNYDN+VDNYeTdePy0hZyRRLVgk
QSYKel9OQEhCIUcjOTJwdDxlKUt2cV4oWShfP2dRPiFmX2tLNG1TYj5ke2k1JlA8Xzchc0ZfSEol
WHd7ZilpZTtqb2o5Cno3aFBSbG8hfitQVEZ7S0BSPlkodVhVPzIpNzhlKGJ8TDl+dkIhSmA5WVAw
ZWVURkFtMTV2Q2JeJStmfVpGaD9BPwp6ciUjYCpYTURic1l2SnpYPG04WGopNikoNGAyfWtfVHsr
ZCgqMyErSkhebWMxQ0AlcDBAT0w9STN6KENabVMjRn0Kejs+MmdId0dWcEhuRDNIRT89dWQ2bXpi
RTdud3J8b0J9Nkt2aVloODlfQFl3JUkpVW57WVNMSGVOdlRxeSU7QENGCnpsZFo+KEExYDM7QypW
c3VgP2pvckBVTGdRJDJpRk5sPGBHTyUkeyQpakVnSHdPaVhrbkJfO0tvSSgyRmBKdU5ONwp6VWx+
Rl9ESmkpcEF0Qi1TeFZYNVZJc1JNNSpST2JqZV5Bb2Z5YHZlQno2NGs2SUwxLU5TQnp0Zl8lSXhr
IyphI0kKek44Vi16SGY4fiZ7Z1NgfCNzYGM7ajFNS0BrSFQ8UjhiMmgoOWd1a1ljZGBiO1g5QzFN
ako9VyZAUSNGYyE+fT43Cmg1d2xtfj9UKzsyZSorTVdMIVJGVDlVPWUjMDAyb3ZQREhMa1YxbUly
ITxQVTYKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9zY3JpcHRzU2lsaG91ZXR0ZS5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy9zY3JpcHRzU2lsaG91ZXR0ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA5YzRmY2NlYzFmMDIyNjczMmRjYWQyZGU2MDM4OGJiZTNkMmU4MzAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgNDMxMTAKemNtWHQ8YnlRbz1eWT89VWNlbW1hK19n
dzNQI2w2d2FWYzckUD5NXlNLJXZrZyE2fkc7NilPflhjWHVzciNhKkJECnpeWmgtNDxtODs+PyVt
ekh2JEhldmUlKGxqaDlXSyY2JjMmaHoqU2F+KjlIS1BSMWhDUzNeYz9xIWxFXmFoJWI2Owp6QzJl
Jjg7OVV2OztQRGp6U1Q2PHVxTEtqc0tXNn03ezBSVU08TzJZeCowMkpTeClJbDZ4K3hpWDAwN3Y7
fDJ7fjcKenY8d09XcHh7dGhVUkt3ODtjcWojeDZidFFPX3FSaDEzOTx0N3YhalFIMWF6dzhvS1c4
VVNKKTg3Rll7NGopQWY3CnpeXzNaUzlgfn19dyt7dE8/LUUjRkk3fntoKTYwUmskJTd0Y3U3ZyVZ
Y2RCYXstWCgxM0dqQT5KX3tmQmIpTCQ+WAp6SEBqfkI3SG1sWTw7UWcxd1VjNHFSXm9+PyljUnAl
MG9gI1hBaWAhd2lOazNkZ3tLQylUeUs2dlBtYWNnb3clKD4KeiV1eDEybV4pODJJZHBMdFQkSUE7
LXolKCNXVzd7bXs7MV40QyhuJWAkXkhyaWljd2ZvY2sjRzg/NEk0SDhpaj5TCnppRGFARElmJDk2
Z2hmR19RNmxNLU9lYSU/RlYqZEtndE1mdHgzQFNBNmokb3JUVnNTNXBiKSgmZ0ApOGpXO3RlJQp6
emBVcW9HcX1UY0RAQTI4IUA5R3plQUF3fmclcFBTXzNtaiE0I2BwYjRMVjNReENPflZMUnAjYWs5
VkhRUFAxaj0KeiktalYqUFUkM1Joe2l4elFld0BwdEtSZj9ELUlgM2VwMkNLTH5GSU5VcD4teENQ
bTBhRDA+KiU3bWRGI0dGRUNYCnp4eWBGSHEram11UG5UIz1yMEd1UCFWZ1Ukbk5vZjsjWkFTVEFA
TmFLUCpfXzYlRTtwR0hLdHo4QFVQSmZAdDIhZgp6S35MfHkwKjdWaTNZNE1CdkpRcmpxQC1FMzlD
KXRQKVlfKGYjX25vem9WVVRXTlE9K2lnK3FhQUdTQj1VQEVEajEKekg1O0FfJndiVGlncjwlPGtz
WHptUGdoKio2ZEB1a0VTfll3WWF8VWhBdFhLfDkqWXo9amE2V3BtKGspIzdpUkYpCnokPTwlQXBi
Z09zKE5NdjN1KFozYSlUekYjKU1kI1cjN2srUXQtVEh5NiRQPmFTJTU2MDk1ZmQwKWs2bVojbzxp
YQp6TXlIMUxDTjhUSjZJUk5oKGoraHZtfk5weGZjNElZNnY/QVJ0bFhrYnAwVSEmKl9sUnVHNzFE
QDJOZ2xhYWZTcT0KenE4MzxgbTZnOUBnPkBKZz44OXk7V2M9VEYrVEA9TmwpakxaPU5BKyM/KEZS
UnwzNEJuZzZFQ1I9SDB9VVF2XzdGCnokUUVhMld7aykxVWpKV2pwV19XP002eChJZSU9Vk52aThY
R0Ipe3Btc2UrT3V7b21oeG91ITJpUVRAWFM4VSRFagp6OX50OTVxeHQ9QkJ6eTlXT34lRWdNemww
RWhiaSYjUl9abVhTU25hNTlKJihZSmMtaldAdWVwSGxQZkRMemF0fGYKeiQlRihuV1IrIT0hPWwx
MUc7UCgtRlM5MkdacWV+KislVH1RZSs+LXs8O0swb1FoQWFzRHN7ME07R21BM0xkPylOCnpVKU0t
K2k8WW8lKW9wZEtnbGN9TDRGKXdibjxwUzNwXkAlYlUwc3pCNX1MfkJLckRqKzFld3tFZztkUSZt
TjA9awp6aVFqMWI3MDMxR3cjU2l2VWFLPX4pemw2djdNPEx9d0A4a1RZcz9rJClAQSt1M0ZfaD5j
NEo/cHRZZjQrdk0rIUAKekswYlhhMTVXZHAhfmBVU2Y1fENtVXZJND42cEg9T1BEeSVuWjIpfT5B
WS1sKSRnZTk2NH5SXnw7dUJ3PGIwdVJoCnpQSiopMigkVHBwczNYUjBNJDRCJUtzZ1RfK1ImNX4y
QVcxRiM7TCpHSFR5ZjJTVVp9ez8qX313WHxLOy0jLV92QAp6MGpieWsjQWRtMCVRUUdVRWlvO247
TjkrY2o+cl5BMGVsayglUWomQEFObjxfYEZocThtQkBnWk5CNCpsZE18fkYKeip1Z29tKEYkaXsk
NDtYRDN+SHBMa3UyVE9QMVcoMndyTzhLJmNCVGt3Y1IwWVk0Tzw2U1BWdFMqVmY0aChVeVVQCnpU
JUJ9JDtndCR3aXtWYzYoPnt6OXFrckdDTWlhUlMtQyVvMmBtd1gmZFNkek5xISg1RmJUTGR9ZktM
Q1h2RipYZQp6aFQhTGE1N1FPMDBJNnBTMTVYbWw7NHwlVDg7WT9BRHImbnBSJXwqWnZ1eEcpQzI8
KjkpcHtNOXNkeztOck5LMzEKemA+e2NtOWZwalJ8Sz5+MnRnbG9tS0s5fCZgYylVUFgzU3tjaF5D
O2hVYEJ+KWxIUWFlbyFFITJjaF5WREd5bHhXCnpLYlZNaDVYfTVveFRHXmRId2VialB7bVE+Pm87
WG41ND9nZGcpczh4NX5nYSlYSjhNVzZ7OHUrPm4/Pi1pQEg9Sgp6d1FlPGQ5QHE9eDFNfCRfRys/
P2ZlamYhcCpKeSZGbjRfVW1zNm87PENrZHhTSzFRVmR3TDt4emlXa1Ilc3E/cXgKenB7dyEjQ0tW
Rno7X3ItXzU/WFFXZSk2N29iI35tdFZ7dUImT31LU3k3JiYjRl5XPUBvVG09LSg9YnUmWV4/VjdS
CnomcTdoUCg8LX5yIzVoYnooPVZka1dZXmFIbkktQykkc0xCK3lnLSZeP30pOFV5RFNnNlFIfCFK
VE1wc1defU1aYAp6QlJjO1I9d0lIfTJkbnpQTjhoXzg5ZiZxJEIxWG5BLSk8fCZYI25tViFTWkl7
SypueyZ6eFROMWVrQUp1NTM3d1IKejZaaUF5TVRZYW40dyE2ejc+aCptMmBRJW0/c2kqektFQnEh
VGQ0Q0lyWkg4SF5lNktrc2o1UT54cms+VERwJWYoCnpXUWZtVGxXfGNmU3QyJS10Zz5pOyRtajRr
VHQqRjY3ISNvOUo9RkBYYXp9I3FtZGNZNnxJSH5zOFNgaitgKXkxbgp6IT8ley1PUTwxdm5gQFRX
YVI2MURATl53Uj9TSC1lPl4wcz47a1FQTXRpc059P3ltNzY7UUc9V2ZJPHNUYGA/NXcKekNPQjNE
QDg1a0htNDVDKE4/bEY5Vzk2ZGVseCs0dCZYTnZqQWlYc0QtI3J3bTxzPEJkKGA8N2ZHaHI5Z1ZN
N0Y1CnpnQzdxVVdkN1R2aCRXQyhYcmxASGtrLU10V2l7NHokSDZ0b2FlJHF+V3FSYVctdWJeWmwz
RjY7SEZKKjNOVkAhQgp6WnZNKGhPRGp1eT1mRX1OKiFLVSU3KHNwVUB6WFpadTF+e1FhKmF4P3d5
bypWOyZJY0NUbHhQek9zT1N7SlVQU1UKentIOWB0b2JwaGpRT1pfS1YlRThwRkJTaiE8VHY9RHlB
MnpFeyNiXm9PQDs8NktkQEArOGhmVSt4JVdnPEtDPUg/CnpgUGEyYXRseHxiNE84KztiS1RwVWt5
UXdNOUpjZz53fXcmJHhzT1R6SHdKWmwyckRiQXY2NC1jc0JRcGxgWjEtVQp6aWpBISpUKjZfMHN3
bmdiXzx0OUQhdiZ8TkNTRFViZUQqNjNDUV4yQyUpZ05mVz9eMnZfV2JgQnMzV3wjcFJleWkKekNs
VTVGMSZEIytGKVF7WXI1YG1aSylnPXd6WGc/JnJLRiYrRkRQez5aaytgZXNWS1A/LWgxMzFAb1Ak
K2UhOSQ2CnpQUGxWc3s/RnlSK15OSCV1WVFiYTcpX15tQHJHejgjK29KSCZReUQ0dXhlJkgzdyFR
UU56ZE9UfEY7MVU3YX1wbgp6XzJwO2heQjxXM1M8KiN2MyNGa3Y1dGxHXzlqPCN1dUslN3VKe3pk
cGlsNiFXe244KkR3TGMtTGpKZXtfc3J8KTIKenJ7MXVLSVM+X3ZtM31yNS1nenduUWY2TTdvfVNK
eCYlXnpuayt4el4oU2VRaHdPWDVfTGdIZ1NwQCsqJHA/RWx+CnpjU1VYb2JmWHNoSX0pa3M7SEEh
VTVZS05jLUBWNGNJcU59bXspWnl8SCpPXkBNM0BDfEElNGchVkdLMTV6VDRPbwp6Q2R5Q1VHfHd3
VDtORExnTXIrbmFZYTh2eWNhLVpYYERpSyUzWGpKbUZiPTQjZjFia0QlST9gKjQyXmh8Q2FNPUEK
empHPSoxJGZOTVhPWEtEay1wZFA2TH5fUDYrIVJRSzhfMXdVVGhnentoLVlGRyotN0hQbDtseUI+
c1VabEpHTCN9CnpOZUNmSVVzSDFvX3ZVR2s3cFo4ODE9c2xnWFlSKlRPeUZLRDZzKSQqYTJ2NkIh
c0lkJnp2OFhLdStjUSprKU5mbQp6KGckWDxBNypOYyVmeH0tQ3hjRkloUGBRdD9QRWdeczc3PE10
IzdBPUdPa0xUQiExPCQ+PHg4blB3d08rIWxsbD8KemNiNWxjNnEjMlA4S0hhQF9nV0I8KXR1WUol
ViEhJV9sTmYlUWNIVmRzTz5CVjVMUE5nMWFUakZxZ3E7bytpcFNRCnpiRzVYM0VHcUlgZ0FMYFZ7
ciVAYzBoSj9QZVAyXj4rTElmPyhFak9EdVlkVCp0emd1Wndafmd6Ujx0fU8zNEx0OAp6cmFMbU87
dGd3ZGg0blghVmByQnxsUitfIUFPQkw+SHtuc0ZrcDx7WWVtWlkoYC0yUiRFalRZVnpNMlIhZCha
Q34KeiF+KXpoTVBvdFIxbWxwNV5AWjJgZWhSWUlffSszNzVITS19MlAxazFsZisxajBpPDc8LTlT
ZGFNbSlnRldzNjY5CnpiJVhZSTB5cGFtRnIwPFhUQiFCSVVpPUcwQDdIem9Zc3NPaj9Jeyt7c00p
Kk07P3RKfUJHWGdDUWw5QEp0MXNsZAp6M3Modmo5ZlA+d3FFYmZfUz1wal9iMGQxclchTD5ENnw4
fHFSRiR1MjRsJDIwb3Z1cXchYXNfKDkoOzRmR2hIVWgKejRxbT5oT2FMKEB5biVFYiZJZnRaRT9u
fDRVdUFna1o9az9ESnZ9akMhdnpmdVBjUXo9PDdyJHBVemBveFgkfWt3CnomPihTeXBYSUlTTEco
cjYhUXFHMXY+QjEpWn5kSkl7XzY7IWZ9QFA+b1FCdFVIaFJmTXRALV8+JCllamYkMmc2cgp6X15i
eGxBO3lOQDkxYWBZeD58LS0+OXw/TntIbkBWSHErTy0qN0VnajJuWTtwVmQyV04qazUxKT1GTUVM
ayY4STUKelQqMkdxJnBGdmFldn5rPXNDU1Z5ZVFeYU5DV2NFb1Y1Km0oPV5zVk50T3B6enMtcmAr
OF5fMTQreklfP1gjIWt9Cnp2aCNKeEF5byZVeTZRcW5MalQ/VC1FdT99c3twWjVkZDBrV0lyRFJJ
O347JjZiXjBUfjx7UG5wM0B2UW1uRHk+agp6cCl6OyhYQ2tNOGFrK1d4M2U4TnZoI247NUlXYWBM
TTdWPn0oKWo5bnQtT29YSkx1bSZSb0BufGsxdlp8KFY2eEIKem9pZmVYJk9DamRwQHM/TEYjTF5s
e3VXeUxMQnk8WmZZfWxnRHQ1QX11UGdjQDJSXmxMKUxpWHdGcndJST94NGFoCnpNKj9kR3NDP0Mm
eFY/KmNnRmhwalNwLW4zM1Qha3NxbUBvVFcrNmAqUSRrdmZfKHNwQDdgNFgpN3podFheUnhCVAp6
cF9qfWUzMTNLR1EmUVdgKVBZPiNmemEzRjR9Vzs3K1l2Rk97VCQ1PWlCUStsIWp9UzI4WXUoUXNi
RiFZWkhJSHMKekt9WnJ5WlZ2PSFtOytGRGNKPilrVmZBNFBZMF5ZfWVuZ1p9JGAwSjRsYXlDQDdY
TCNtaEZSOCVjfj5AczFseUhkCnoyWjNydCtZX3xxJjtOd3NAaGEpP3dYPWg4YWE2d2N8REV2T1Uq
ZVVUVz0yd3FlVCVlXylIZzYhU0AxVEIoJFl+cwp6LUZjekdgVWV6QGN+Nm1JVVRFTG5IKDtrTjtC
TGhDZ3s3T1RQJk5uWGVVUlk5I2B9eylxMVNDKUBNbj5pPl53fFcKencmP05rSFNldDstRHJ5TmZV
Y1N3bVAlKFI1bUQpMSpRSk5uZGpqVXM7eGpER3kkMWBWWGgxQjBCaUtxZTFNPmMmCnpadUlET15e
dVNHI3JBdXlqWDBiP2l4KWxqNiYoYkRuP0d3OzE1ampkM284MDx4fmtQcWFSSUZNc2VyUmcjfXhS
Rgp6OV9DI0NoXnUzZWVMMHJeNU1uSFokUyZaMSM+JEpPZC07MFgreF9eJiM3bEdMVS1NQjBzP3I9
ZCtRN2NiemdEeiEKejNvWWdBRjw/NDRjcSVpWk12TEJXKWsqUHxiX0dWeGlkaitQQnl5Vio+QWBP
V1dpMlptMVo1dUFPPnVmNjstVkZoCnpVQUtRSW5WZnskXiRMUTMtc1RtcWclNlphOD1QUkReXypg
cWZCekMhR3R8T3dsQTNhKHZ+LTBvYl8wVnM4OG5Mdgp6eVd3biEzWGZfKSpseFh+TEkzMTBwSz1W
fXZOenYreWZ3R3YrWXZyJkE5ckJpcTAwcExRXjZlUklUS3t5MiFVQXIKenFNbUBGRnt4YFMzKm5q
ZTZjclgpcFhLR24+YktKJSFydiZRVFl+VUomWThCdSkwPXYkWmI4dWZoRzs3O1N8dDtqCnpBaSNH
aiVgPCZQS0wxdT5ZJTIwPyhXMXxjLX49TyEkNjdeaWduaUlSekN7UmV0JX1aaFFUcn0lWmVhR2BL
JGJpcgp6UDIjPkMqVmdjfVckUXF3JFk4T2U0d0ZtbkV7d2BBIyUtaDV0YG19VnRHMGchTEErN0pI
eTxlPVg9X1NkSiVEV3wKem5iSXd6a3s1JXRHUGA5ZmYkZWxta2Q8JnVmYzVOXzJ+dF5Edyticnsh
KH1Zb3kxOVloaVBHODNTd1ppd1Qld2RXCnpyblpCWEROa0liQCt5WGVoe3EzalEhZn5FKyt7SD5K
WmFQflV3ITcrZntuSnljMT5AVnc+I0Z0N0sjI0BiPDlfNgp6MXQlX2ohdmtzP3pgRyRGbkolJiQz
VmxOaXV8S2syOTNaYUNHMUI7QDxYMC1iV2YqXyRuMHZqWlMzaz5RS0d+JWcKekZYWWM2Kyg/LW84
NSNSUW1pSmthV2U/NVY1Qk1QdnFDWU00eFJNWnc+Ym1HJDhHVlpYNzJ7UTdkaG54e2lJVEIoCnpp
bEsjfDl7XjJOMXxebTZ0QHI5PFchdmN4ZX5LbFMkUjkxdChkJiFNS0doUVh3M1d8flN0RHB9YlFF
WVhWUmR0RAp6JGJOd3kpfTtING1EZzctdzJ2U1ZGMjBLNHh6OUpwIS1nMmJoWEI1d2NRM0RiZEp3
ZShgIzYwSD9RcWxfa3V+UEQKej9LVDdSZmEkayk3a2dpb1VPSkRYenpvRkdlJTBgJnVXbCtCOGNq
QXVoZzl1a3lFcDJaSllEP2FyRTd9ezkkKXNyCnpRYjdxbFRkTWIlOFEyZUJQODRua0NGKTVAV3dQ
QSVtcFdGYlg/bmtBQUhWKGppWkF1dVQhclA+YXFJSUBBIUxULQp6eiZFU3lCME9YMHFTUE8tQzNZ
Q1coeFB0LSstZSg0PTNQWU9yK0BSfFF8MlhWe1JGT31gbD14ejZCWTE3ZH40cUYKejs/PW8/X1gr
JmMqQUs5UV9yYVliVT9gUUROUz9PQ3pudHs1Jj9mQFpRU3hmNiYlT24zSD1wdipSQnxxTFVSOCsp
Cno2RXk+dl54KE58bGQyX0wrR2RZNytqaUVjOXhsNDBWISU5VCZkUWlxV3AoTT5fWF9IeFlPV18q
RXE4WjhZPThJewp6LWQ4SU5UMkVFTFN4dDxWRFQ8c3YoUGk4TCE/ME5TUyNxTExSTmdTNT1YRTNl
R2ZsQ2hybjBBJElZKE59ZlJOVVQKemhWPk1PSXZSYHgxNGVxbl92KXUkaWxjODcmNSR1bERBRGgo
RV92KW9sVCZrdytOIyZKe0E2LWBZfn58ZTVBUlApCnpYZHFQWTB2WVRMVi1lMihQT1orTUE7Wloq
O1k5KWBgYGVCajsmcyR3PURZU0Q5RitfP0AhaEUrb3YldmlPfVBpUgp6K1QjfkVRLWJsP1hDLXQy
MCF9bTxGOW9UN1BKOTN0ZiNJYk48QCkwV258VylgZnw0TFBJbDFBRDFafkJsViF7djkKek9odFhT
OT0kNytSQTdndXdMJUJ8O3hzUyZwdDVlOzhhNGcwPStnX2x4ZzRATzBld2k3STFEJFk7Qn53c3pq
V3JICnpwQWpOQ3BaQjU2Zj5qYz5mP3s1bUFWTDtDa1kjO240N0tQMkpPWFl1JWImeSVDKGdsWDd0
JiFoVkA7UldPYytZawp6WDFQNEtCI2BrX2Q7QzxvVXhqfDErZnV9TjtwISg/Rk1pS3s9KmNqSCVJ
MXghKkZHc0N7WVVrcys5WGVeIUZmK0QKekZfaHc7YDBwcWhTWj8lc2xia2RRKyQrfVZwd2B6bj4x
U3JLUUB+em1NNWcyZkczZlBfNigzREM9NFA1RXBNTF50Cno3ezRfOyRuNzdNWDBrc25hPERHbGxp
bD5eYlY/YEpoTWJrP2IqS3U4YWIzTiVLR1JEaDBGfnMmU3p6U0c/e2RjZQp6TE41fCs5d1hePUsz
LWB+M2hPM3F5fE90SitueEdjIV5NWDVKan47THVHd01ia1hXUGMjT2FqZypgTnRtKmk9P2MKekB3
U3VAPmhATldUTnxLfCNvVGMrKlA1Jj1mN05AUUgmSWd8SjB4aVlnKlVnWW0kZjI3Pkg+PEVfczh2
Xz0tZ0hBCnpjeytYcUEzdmtNcVcoNDduandoVVk4Zk4yQUpmUHomV091dFg1ZHlxc15zSUl0SSNG
Q3sjZ2BybFZWRjFOYDAhWQp6RlVuZHBsMSElclBRJFNRdjw7JF5WU2BjM2wxYGNpcUIhUyN5JXtJ
Ni1Td0h6LTFFV3VKeTtMYWZ4VkEze2BmOFUKel90MWNqbU9vLVdTU2wyQjhKJm5qKz88RilgSXxQ
QGZFZ2dLdkdLbCpObF98ZWQ9MyRIalpJWnV1RiRnaWxlX2dlCno9eCY0ZDt5K3lPPiM/QkBWQ1B+
dGVsLV5LSVFpVHdRM0wqfWc8a2VfeUY7Z1ZwKGZKcUY7N2ZTTHtUZztaQlhVYgp6JEUjYnhgYFlf
YG8zUWZlMEQzYSZBe1Y4RTU9LTlhMSFqS25VcGZwfigzUU9ZSiNqPkVvdzk3OEA0fUZmei11UyQK
ejluMWtIYEhEWjlURz5ZMmdMRSMpJnZLM3R4YyU8dngyPiR+SlR7eWU9fHdJKCQhQFZ2cHxNdD87
UH5rKWR2Xih2CnpgPWUrTUJERHIpO1leOHBpaGl+IVRrU1IqYkBEQktuV3lSdENSc2xAb0UmdSNI
WW4kM1otV2AzVEt5MDJUUjhxZwp6QCtnc1VXSUlGZUcyekcqOWZCRDJzMkRfai1QbmBtM1NHPGBh
dmp6SjhnfilsRlV9PT55aG91LSlMXm93SS04XmgKeiQodUV+UVM2MHVRNW9zOyQ8YkI0PWI7ZlBe
Y2tBPio5KytQKnh4aV9VdzU8MkF9Sndka051PXchO0I2MEwkWXBPCnpHLWhpOHBYS0s1bjN6VUhe
TSZnJkJwfSlIQmVWMyZhZk0+JDd4Y2wpRDVQPm51YVc8NHlMJmxzTDAhYG95bGxndQp6YU5pO3x4
QjhGLWhmdlhhdlJjVV5DJTxKWTBWYHZ0YDB1VWtrJV9iYlchUnAkc1Buc2JaMD1AZ0p2NG9tT2Ur
WlUKekR8YTY/ZlkhK08xJT5VWGg2dV4/QlU+ZElxRDQtKmVOfEU9Oz5XfVlyO21IelBiJkxreXVV
WiNxMWxUR0JiJlQ/CnpDbjN3e05gX2B2RGhnR2Y+ciolZy0+Uzk/I3FnajdmNilIMGxAPU9tKFJ0
ZGNfQF5+KVJNeE5NKVo2XnFUN2I7Ywp6Smh7MkwlIWV0REh4TlRMX2E/cCNaR2owQmhFfEZtVG5r
Pj0qb2dDVz55YlQxWFRfaW9rQ0Zpb3RwYlB7Vi0ydTMKenxINUtJe1NlRH5gYzhhQ2BVOT1nP0Bm
fXh3ZUs7KlVnKUlhZlB0dW05P3ltbEIzNEdWZnNgOD8lNVoyMisqK3pwCnpPUHtgSXE7XmpjIzd4
Z0MyI19ZaCRZc0xDNGVrVW8rUG5NVig9MHpNcmQ/dmNySHwzWDRhZVdgMm0rd0VoLXNqRQp6YlBH
X2RkYSpyWmVefm8wTWRvNl97X140RihHSmIydzhARWRnaGo+SXVIRz5FZylaTEt5WTElQS1sbkgk
YnYxNkYKemojTDVzR2Y8ejxLNk4qNTxfLUxsNkJiLVVaQ0haY29fRHBgJEAzV3pTIXRzVj58Yz19
MlpVfEBtM25ANFR6WV91CnpeZ1goPyR4aGRTcGRwNC1KR0lLKV85cUA1OWBsJWB1Qm9SUj5SZWZO
IXw1anVfMUVfdnE0TVg+bF5Le2dGXzxLVQp6OVBTeXdAViY4LVRDe2hqYHJ+ZEdKQF5pOW1EIUVC
TlVWdGBkNFVuI0haUl5eT1ZfemlGWmtyVmp0THx+ZEN4ZXIKei1McD08Zj5BMmZYeXEtQWFBKHNW
S2tTcWt6QDhufVprPW5XZjZzcnxhdDVZVCh2VlJucSVrfl45fSg4IXRvZDhrCno8NGJTRE1NaHR7
JGV6fT5eWUcqeHtib14rb21ZaV8hdXRNcmsxdnNaeDtqTSl0N3lVM3tXK0JTQD51fiZfO0gkSAp6
bTtzZzs2TH1+I2Ftb1VLaUBWKzJQfml9YChEeGNUSE8+RzIyb3o5WTVYZFhoeEM9dmJVOTVNI2o1
Y345KVF2ZigKek9GTjlUWnM4d0BDKCQrKiZOU21fbTZ6a3pzKExqfkRRM3pxKVo2bVpeTSpHPWpJ
eEBTVGtzZjVIPiFQIW94NUM2Cno0QWljZiVCI25Ca040c31IaXYkUmxydUQ+RGpDZDxOUDNRej5M
Pk1vbD0yPjhnOHN5YGUwPCEtN1oocUlPfXE8JAp6bV5GT3AkNkw7X0dMXi18eXhoejdOMj99QnhF
JWlTRSkzJTdoZCt3NkZRQVdzLXorOUMxNTRUUStJZlo4eFB8NF8KemBJd2pZbTN3YCRhV0VOQ3Jm
cWBaJkY9K2tFNilIbXFqQVM/KSpnJCFOXjFYckN5YExGKUdxa1RvOV55NTMrRmFMCno3X1ZmWmZa
KENuMXMyX1dDPmI+JiheNWR+dXEoblJCRDJXMUpVJX1EOVBqa2hwN28lSUZJQz5KOEg5WXppKyt1
dwp6VnpAfjQtNXtwZUh0RkxJRmFkfTRtRSZ1KDB+RzZDRE44SVUmND5zPE16Q3ZWciEqfFQ1SG5u
IyUwZGkrPi0jOFgKekg1MnYkJkN+UEcoS25oPEZickUwUykrPUZYZXNMK2tILUReSEhAPG4+dzA5
WTsqKEY1K096V212VX00VHRQbzZTCnpsez1PNE9LM0dQMDclbXZPTHFFeiYzbENmYFhreFYoWlBs
TkM2Uk5FMW1pXnltWEZKciVlKDZxeHBPZi17PEo+UAp6O0h0OCs1eG5vUz8wSTxDMT1Te3JPak51
PmcqJk0zKEc3Xy1iX1dxWnRSYF9PcmlIdFhFYkxrOThraEkpLT91NXgKekQ2UyhEM2wwN0c1QGRF
LTF1YCYzdWd+SHpvSC1aWjZfJmE7VEpOQ04mPV9IRXkoJlckUHspRVQzRT4zZjVrTGkrCnp5PHtE
PjVydHQ7ZEJwe2ppO1g2QSslTm51KGVyKzV5WjlrajY4Nl5uckItK1dwbUZpPDZJKUk2Rj0qTXZm
NXMjQwp6TGNXclV6aSFzWUx4KmpMVHk7O15FaWY5Vz5QRDxEZkJJM2ojeXJOSG1RTn5lMDd6T2E5
Y31UYU4mUW5wYUI2NFMKei1gUyl+e2BxJk9WQWJ2RF9zUG51SyFYOGVMQDxtQXRCYGRhN3xJQ2de
K2lfRWEkKSF0RiNGXytgZ2ZTV0d6SnEhCno2eG1mKVRLdk4tYDgtNTlIaiZObEEqOGRwR0hCR3Vx
S2owVk81fl4qWDdjV1JGZEZ3Yk9qUGh8bDUofVpIPTFkWAp6JC18KEltNGdHWldEZClLI0VQdVpQ
fGBeZkFEYWRtSCktezNBYnZMZDVEUFh9aSFNIXduMHlGXlE4VHVSQXhIYi0KelBBLSF+Z3VkeFc9
Izk+Nz5FWipXVnZaMGkxZHJyUF93VCszP09rXj5mPld8QjVgbSokT194cGlyV29KYjIlYyZsCnpv
ZThvX1Y3Xz1KPUx0PU53PWJ+QylLR1VFWWZxOU9fPlhsVTVqJVMqKShhcHBaS0BsQSVzcmwwcjtN
aVR7MiZ8JAp6MmRBMnwjTkt7dE9MOSFFRkV7Y20pcGR0QXF2dXFNaVdyM2NTKU1VbiExajl+OCpl
YW8mYH16amVZdTNkS0NwWHQKelg4UipXdSg+X181M1VDQioxSiRSbFRpOUxEYTx9LUVKMFlCb2tA
U0pRc0FkU1JzaDF6UUNhTkc1TEg0dkJvQFdSCnpiOSMwbjAhbXM1PWJOMDZEPE1wNFdaVVBQOCpr
Mnd0THZGUFZESz9nQVFEOVl6RGszYDZ3alokeDF0VmJ6ZyVfJAp6WEhlI0RyYTFifmREVnVLdXE1
PkpReFIjdERGbTtMKWlMfGA0cEtoKWpYaERrZipxPD8oaFZneFgjUjZjUT81SUEKemBwbDBgRFMt
TklqQSgmV2A0dXdYKW8wT1ZpNEd6bSl5MWl5MmNXK2I+PlhUZnV4UnQ5KHl2KXkqYW1GJDMyWVAm
CnpFKChee3RxYjt6QjRPUCNNWWZIc2xDRCE1SmRjJnJgKVc5WHNAUFM0YnJnKzV0PUAqaEB5IzdP
WUVeSElKWHJyNAp6JmA1SDRjKnVxIWsmbExwaCkzQkNKMDdlMlp7aWdIantrWmpyI253aiFWSW9i
PlNyJDRjfnVeWWVzYjxBQ3ArSU8KelloLUdRM3p1d3Y5cE9vX0x4YFhDN24kaVJqQDs8NUg3JVJU
KmtrP0F1flMrTS1EJlJxPik/PXlFe25aP3dSOEIjCnpVYDxFfTBIaDwoNjt1UnVDampRWGhVbHZ+
SW9TZkdvLVJsbl8kU18wbyV0OypWbilzKmo0UHsoVzJ3SVo4Iz92NQp6PUBvRD5eSSNFKHtsaDtf
MiVXRUM4dUxmdSghWXhHbXE5MUA1QjJEPSp9Xyh2cGZRanNZSk1WPnlsNCR6Xmp8P1gKelZiV3R8
KTlMR1BESy1wUFFSO2RMdllzNV8hfnh0T0RgKm0jaDVyQ3s+NUkqTz9ASXxnWT8hcXJ5Xks0b3t+
LTghCnpOJShWUWxxJDV3MkVlKlJCeEMmckN0Vz41WX18eTQtOEIySlJCKWthRV8kPWZXMmRxc3s3
fCNyK1NobiV6NTVGewp6QWApTVorVE1LISNQQClgR3wmPDM1KjM0Mj1mTXdpO0xMKzg1MHxzJXAk
TyR8WVoqJEV2QSkqem5pYnQrY1EtUDAKelBTVFQqIW1HUm8+Q054SXZ8MSttZWxMMTc4UjZlQ2F9
emVuTkNYP05YdyE7NTspNml5WllWT0IyJSt9eGNtVkh+CnpRPk9iNCRKSUUoWjFmUDd1OCNGTDhr
ZyRhbmo5ciojKEdacUE4LWtHQ3kyNk8/Kz8wQCYzdWdEajxaYEp6OVMtOwp6eHt2eDhmJW8qY2J1
Uz91dDlrQSQjTDJMaGJUejw8aFpaRGw4IWc4Q0UzSzRjWHkhNk5GNCtDJWF+d1k2PUNUa2cKekBU
JnZeUFVhRCVhNzUxTiRINCVhPylFOCtjT0ltbD09SHVzeXxNbjQ0cylnUyp1cUxUeGI2Kj9JWmpV
Mkg9ampJCnpJLSZmKUpIbDw7Ym9pOFA5eW91eD0tVFFEQWpUX3VxNDNTJlU5MldHRXYqWF5aXyhV
OXtgQ3BZMEszbDlgUX56IQp6cSM3RWA5YVYrc0cjckskcGIqMFE8bCE0YSlKYyRwTSkzKTFrQmp9
VEombUt7TkhEJSNEViZpfjReZ0xLYSomJnUKel9hTztRMCpZdE82UzEtfnsyaj5jS2N3UWcjJDJG
WXB6P1NucUQpI2oqY1cjY3BRdGFXZmJxI3FWfGZ8PnFQezczCno/TC1rRm47bkQ7NSE+eSRNd2FJ
WWxXfj9OVUtiRHVuP2RxKGF9Q01LNDB2P2hDajQ7MzRBPz5INyUmdCpnNV9BOAp6UDYzKzEmeDZr
PEw4V0Q8TGtqfjdJJEo3QlEjbUNiZkk0dV9YRTk2R1UhSUdaPTlNREs/bHxme2UmSTxyJjZvI0IK
ejlrKD5TUWMkOzRDZEQyc0l8NyE3N3FaVThTU2J2alcpcDJ5LWAoOTJpbl59UWdxc1Z7JWJqP05e
dUZsWGQ7MUJsCnozbkd+YlZAVypNaSpwVSEqfml3KzVwc1pwQm5qNDRtOWV5QlUrRnExc0MhXk9k
e1FWX0tvekFxYShPNlRkeVNjcAp6NjVzODg4OyoqdGk+KD42ZEJZbWhkQGVmOUEtbXhAUzk1KkIy
fFBQWFopaFdgZSlyTXpodlcxX215JlRURWMtYioKek5xPnF3R0F9Q21SNFRoZD1vTGc/UzloKlln
QGdQQVo9ZStVP1M2QD84cXRNemMrXzQ8NilLZUl7ISZSXmsxbm4rCnpAejhmYjU7e0BZUjl1LVNy
KEB+RFBTJCVwbWtRPkhySH5+ZUU1ZUhUWXx2MHcqQ0JeQXRueXU1RFNaPm9sTzd9fQp6Iz8xSWNV
WVFISzZwWUtxR3tybnNtSG89VERCYylpR1UpcXpiOV88czJLITsxbyleYjRvU0cwY2B1KE15c2N3
fGUKekskUCN3SHBpKH07TTNPWl5CK1M0NSpSfEtJNE5NRF88Z2JZQylmZ1FsWCFjUm9Ja1Jra3R8
LXY+fHZBPlMmc3ZDCnpjMmZsU0YxfCRYKWc5NU1lP3lvOypLPUlEYEgrJiRtS3ZjaUxvRUZfOV5f
VCliYUZhTDVwI0drYzVRYldYSDR1Vwp6NmEzLWdlNGJZYWw3YDUqbjw8M0tKUX17QDNVTmBPR25A
OVoqenomX2RDJjRxPlM+Y2kqNiRxSzUwOUF9bjZJfW0Keml+byhYeTRBNzs9fSFzWjFLYyNeWkRH
dkVlJHgxaXo/K29XKFU3a0ptPTUoRCZBPFQkNX0wWVFifnNxc3BPISNqCnorNWxANExlYEJCdlpP
PjZEbDJKLSMhV05iOTJ9VkE/XyRqdD59XkpRc0h+U1YhO1FCd1g8bThDTUVfWU9MO0YoeAp6RnY0
fWRXaz1eamkoTlpEYzNjMXY7cTI/UyhiUHo9an1sTk49aXA0RV85Sjl+NWNLMEJ3ITl1b2RPI096
ej5nUzQKenVza0JXWkxqdksqIXtNPVJjPlA7YSprfjs4P0UyV21BelkjM3dgWVhEPXFIO29vPCpT
SWdVdlJZRFFBKVMjSihkCnooSkc3bkN1VzZBPSprKSlmUXNPcmsyKGYxTHtiM0omVE9LN1dCTCl0
O0xUU1B1dSF0TXVDMCYxeVIjTCgmPjs1Qwp6JWZwK35qVHt8ODQ+TEpkSnQpdVltKjkhYyFEc3dg
KXBEJFg1d0tBLXhhaVomMzFuRVNwcThXJEhZU3xtYkw1aT0KenA2eyR8X2xoRV4qXjFNTzkxUz9A
WEImWmhVcTN1X28+aXBwVXkoX1h3NihTRSNLdk9BTS0oU35WRnRvQSNTMEhrCnpMQ3NpUys3JUo9
NGdxZHE7REg8eCUmayN1Rl9CcGd2TnI5P1I1c1VneGFoU0lWVyVHeyUrTXZPRHNRI3JlQmBDWgp6
c0xYVElAO35rTTV+I0Zab1dAYGBgWTVHckd8ZzwrSUF0TDhUbH4ldypfSD5tKXI+UkhFbVE3flAh
NmFlV01ySEwKemduRzBnZklCUU1MKTdtKy1oZUltYGg+ZV5LbzQyflRWPzhhbHRzbCFVYjAhJGNM
fnBaSUhsbSozKEB5VnVqWVJvCnorX3NpVzx7PWJDKSk9c19gfWE4dTRIdCV1enRtTkBwJVpaLTZK
b09MYV9+Kmh2WEZGfilEQFk+Q0t+WUdZZ3ZhaAp6Y3klbChgfEd4fXAzVkdfVX4/ZD1EQylhNXh9
cTArZGlRO09OdzNeYGlTQXlPeXtScUIhcWxMYztDNDlhUigrTjwKekdoNWNoakA0YW1FaHxTZDtX
VG19cjYhR1ZRWXZFOzt0UmpLQ1lGfE1NRXlJaEB7Y1ZjZnczWUZBVVVMMzhLbGYlCnp4VCNxPWlY
XzAySSsrVzsldlcmfFpzTXRzOShKKipHZDIpaylUZilaRnBMcnlyY3EoSUJAbXomYFhRMmkrWWpp
PAp6JGNpWmg7eXspfCZyamZWS0I/Tmp6OUhicGRvQkRkc2dOclRnaWM1VGR5RDctcGZWQCZUPEBn
aHRsZn1SWXAlMmwKej9hWFpTSStDdllRPHZQQElAPUdnODApKlNOOyV9YW1FfWFIeDZpVDZqPnZJ
ZVhncm92XmNZbDVVYDx1Q0F4fmMjCnp5WF5nMFR4SntLd0psPFQ/SHleZUx0YmVTdCptNnRYcX5g
JmF9KENuYWs9Tz43UWtrcnNoSmZGeklqZiZPbUVHaAp6YGxsdEA4bzt8b3t4QjsxVCt4UG4yQihm
LWdOOUc4O2xgLSgtOUh4YmIhUXwkSndLaV85elZLcnEockNBaHQtfkEKejU2KkVVOVFCfVFESEN0
ZWsqNjQlM0xZSjhFR0BZfE87PChyMW5FaCF5PT04KFJ6ZSh2e1dzYH1KM05uRHYjdyg8Cnp3MkVn
R0NORD1XbkZVXnRXeVdmUG04b3FnaChUV25MQU16dDFtNDRscHZWKH5oNUZaWElDUSFUc0pLVWU/
MFFpcQp6Nj03JHlMdSFzSCl+RCohS3R1UU5MaVh+P3dZNUJtTlFVQmQpYHpiKCVEYks3QCg1OG1U
THIyM1ZCSG9ueWgjUVYKemkwbjZ0UFMlN30pWU0kK1AoPGdQZH4lejFRfiFRYWxrWEojNHxnYUkp
czZ4aTtmUDFyIytJNnYpTlYzQ1NrS1cxCnplay1pS0J1dHIkZyZZeTMkMzZ2RUQlYT4rYkh5NilN
WTdNK1FWX2goR0tyfkNGMVhBOGIpMio9c2hzSFooPHBhMAp6RUgwRDlfN3gqaEYrVmUxK2pZbH1G
SFpmV0koenZhR0AoQGwoRD5RPEN+KWQ0Kj9CaGJKaWUzdk5kUHQxM3s1M04KeiFoTzJXWTlvWDko
JHcyJTBeIWpfa1BGWXZRJGE3RVdifCk4MHdZUD5OTDM+fTlnQHcmazZ6XiMkWmIreyZCdU1MCnp2
VkpqKi0+R24+JWh8NDxeQyMzSjV1VDswN0hsTFBCTm84YGZSX2lDJDB8YjdFRGlDeCtOI0BGZX45
bHFDbjRDNAp6dlNtYkZgI1R8a1dnIUR5ek1sYT1MWW13X3tjWVU3TXh7d1ViVUQ9e05KaVVPWWpx
JVAkIyFgT0MzV0JTYXgjOTQKejRxS3drTk1rXmhuOyVFbWJRRnJiQE5HZyMpYCZsQXdqSypRSjB5
dVpWMmR6UkpRWXQxcUNaY3EmKjhZI3I1X0xICnprbEBrMEdpUT0rVUZGRT1VaytwUnpJNDE1NzIt
M0tDQnZQKHE4Ky1xXytvKGkqRDEtdlgkayRxZGp2b0RQcipNMQp6KmIqWU1lOGlLMyViRThsWERn
QG15YVk4YSFCcH5tdzYpYHpCbSF9O2lNVl4leHI9UmJJdEM1T2UxUH1qRiUhSEkKejxPVXdFViR+
UnNHRio8NFBeU2RXUW9oO3ctKHx4JEkxO007PldmMC1OOSZgcTYwKHZZa2ROM1oyeWI/WnpAP2xu
CnprfGFAODc/OEpxSERqb1pITmJnam5wcjBHYnx4T2g3PCYwc087RFk3T1ZePyYzbU1udVdFPXdh
JlBacUQmK1pQbwp6aldlbEZyMj9LZTt6aC10bG90czV4QDZmRXtgbmokMnYwVj0kcXd1PUp+ZyEm
dFFKb3NNKmdrYEd3dSVwVz9+ZigKelZOcnNzMnYoNiglcn5xYz8pRkJ7Wj1jbDQtTkQwIVVePTRr
YGM4ZkVFIUw2dEZPLUlWQU9hTzNzQiVYNXpzZmlVCnpiODx9PkNJJEA1bnJvQjE1Z2Rgdyl8VWlz
UUB2Vlg9YiNHSXk8Q18mVDRHajZSQ30kIzs0dzdtJUFOX2hga3phPgp6NzZIdkNTcXBvckdrSzBU
Xm8yNjJrKC1sTm1rLSRNTSRYanpVTSRPUGF4dGpIeVomNTk+V3srbzVwITJVPnxabmcKejsze1do
S2E/PVhXKV4lMGhtTDkhUjc3RDZzNF5xVFR+Zz9Xb2hHO0lQVXtuOT5wWFFfQmY5ZGJ2U0JTYVYq
R31eCnp7bzQyVCU9VWkwRGgrUCs7KXJsRkApZEZQP2hWWFB3KWdKY3s9Wk8pVzlNQUw7THEoU2Zl
eXFHV2RQWXtVZyNgNQp6V1BtSXtmbEdAfDg4RVFwaXdsRSRHTmVyTHVxQD14U2NoUnFgUXwqO2RD
JE1lc0g5UilCTTJyK0kheHAmey10LVYKelJDXnlBOCpkdShRSU0qVSlaUXBOR0VgZVRIKUhnYEIo
WnArWnxxIUMpKDFhJGYrcUI9dF8rU2tpMnwtYW9FM2lGCnpLJFlTYHF9ZGZWPHhTUGJTakx9dHU4
fkgjXj5vSzE5SCM7e3JrQWopJEFKajx3azN0M0ArSWkkd3pzbWRsJjRsewp6VG82KWJUSS1wX2sw
dTU5cl9YO3BuQERwPDZuRUhQSVdTXjJwe31nZ2spcil1Q1QrLXlITjE8XlJoMU92IzlPI3UKelNL
XjdibUgrZVE0I29uZlZLblFtRVNNYnl2aE4qNHVZa2Uwc3drencpM1o/WnYjb0M7WXhneVJqaFRO
NXdASUh6CnpofVVaTDhiX0l1cHB3QVZsVD4mIVl9fXNYMUs/aj4wNTMtRzJTT2I5Kkk0JD9YI34q
Z2JxbkdzUTxnMHYySDhlQQp6WTw5Pkl7Y2g+Rmwyc2V0PEElZ2JjSCgwKWRzMTxOckclND5aWjx9
Yi13VVpZRihHZShOa0p1TndpMjF0ITImTl4KelF4SilqRHRXYkhpJGhjX2QjSEJWZjZ1Tl5Lc1Y2
ajBVS3liaG5+bD17PEZ8QGtfb2IyOFRkRkg7eV49fSN9OVE2CnpIc3QhUDAzVjlJVHpqaEU0WE10
VU1BcTl9KyZ6PjNaIXJJNiFMKl9md2NuTipPZTlxSFhfTT5pI080bWBkcz5ubAp6PFVBJGpzeUd0
OG85b1N8VjI0Qnc0dlZNem5VfFV2MytXYCgwZzdHP21tOzh8ejIjWTFAejEhTUFqZTk0UDA+a1IK
elcqI2RtVm5HKVNVOGtQOWxeRkVBTW9oLSEhRXFeJFJkJnZ6bll7LXZ5Jio4fTcqUlYmVyFYKChR
fkNFV2tabGBNCnpaZn0jI1J9MjEyX3JBQ0NubCVYLW1LOFJ1UTw+VXhqKHNEXz8pYnlzVXhUYmk/
blctbER8OWpAWT96cHA8O3REfQp6TzFlT1daUEk5RjtNfDM3N3tsV2IwZ2NFUGd3PyFWQ1I1KmdQ
WGFUNlk/RXszbE9fUmQ9KFVhV1lRYyhgcEl+TjQKekVISXUwN3tgR2JKXm5ZSWpVbW9ZYFpob3t1
I3lfcSFtXj1yOFdsQlluMjRCfHlYcmhEemwxZnlXaGFIViM2ck8xCnpPRy1zd0UmeTZBN29XMzZg
YExkWmNeOXhXSTcjI0ApSEBvVFNgPDxSJmQoVSNGJlIhUXljMmwle2MqQSZxIUM3fAp6RENeKTI+
NSNBQjx8JW82bThZKE15fmBsfWFTNENJP3g/cE5GSzE4fjJOemZQbzJuVyRfRDtjcEk5VlRPWUg1
PWQKeiFwQ3FjajskfmhqbjRSYzAzMnt0Pz5uZT01cWFEREZyTCQhWVhaUWJxVTx+aTJwd1V5TkNP
aU5AYD5vSi0mPkd9CnpEVHVWSTJ0bnEyTFpKQigzNTdpMjEyfiVUPn1nNEc9Q0pjcClqMW9LZzlC
JEZEVygjdCY2PEZWSTU3JmlzbXwqJgp6bXplNzRQQ0g2PD48ejlsQDRQcHU8dEF2P3lpWEAmTXVr
UFBVUDVOUV45ejVVTW1JRylSZU8xd28ocU0mdmMjUjgKemY/M1N0NFY+TmprTFZFJVhgJG9eMThy
QjReS1NwQ2pXJjZEZnIjcFF1fDlZKk5fRF9TYGhOWER3OTtzd3AwN2lvCno2Iz47RURTbzReVlVP
aCReaEYhY0s5UV5XTithd21gSGAxR0ZNXyRubHBvTnFRXjVOR0xFdGE/PllXYng0SmBeUgp6cDRA
N0Ilal5oIz9zVj5LdEpQUT81a1ImZnB2JHx8eldVMzUzXkg+UE0rPypyRnJkUSNMNmBZPS1aVkQw
ayNSc34KekhqQ1lIWVVyM0dFJXhUTVN2alF0TSphTnhtbnIwSGshO1V6OHVge3t6aVo9ZDYmMGBS
UDE8JndWMWVQVkZNKXhrCnpWLVpkKm1HfjMmVFppNUYxb1kxZVJMc350MUlEcCRBST9kMXY/aGw+
dnZqe1hAdVVGcEw0bmg0Yz5zdX0zVUxyXwp6eUxkMSlzXnZyI3YtMzlFbEM+Y1NoWGpEb25WfHlz
cTF3bj0rR0Q+alY5dEQoelVaKH0wQmo8RHBOeEc8PGJkeHIKenp0RXc9JHE5Qk9eNkdNRSRrcGRz
dC1FNzlUMW9yM09qOXg5cXF0bmQrV1I8OFp0R0N9TUs4SnhDVk5manpEfUkwCnpfVzNzKHo2c18k
eEdXSzw3PCZTUUFYbURGZEVidXVWMz1kO2pGKHdIaTlOTnJvSWhYRGgrWFp4JndfdGk+LSZfbgp6
YHt+MlNtVWdMO3B+UmU5Z01tIzNgKXd4c2tKcndkWXdwJXFEKH1GRWdSWDFEKChVUGhiTiZfcykq
bFhKTnV9Xy0KempGQlZRZTR8JnkqQVQ1bT5iNEx4PWZTKE1qRk4jKy1JOHdWOHlvUjJAVmA9bzlj
aCZlYyoyYE09WigzamNoRnAwCno+M3BpZ3lLZ35MRFp2aFVfSypQKzJgUV9gcU96QmkrOTQ/QT9j
QVV+Tz1LcVhOei09KzVqQVRKVm1CREBwdn1NNgp6UHVIdGJfdXV9VztEMDRsPkA1aERObUszelNe
UnE4anohfTlRUEZNYD9jcyVyY2hET3xXejBhZnBYVjgzWTw3PE4KenA0JEdVdntFV3o8ZEBYQkYx
NzdAeH1ZYWkjbjJiUCpHczE4O0NsT1VNcnhyZU11Y3h+O21WQj5LPkcyWFpNXkk/CnojK304bXNG
NyQ8UnNKY1ptNVVkYD5URi02dFZGd2w9ayNVb3YpJUw4cVdDJngja0A3WFNDOSYhdUlpOXdqN3Ax
Ywp6Zz5mJWx8MilJfkl1Tk5tV1dqKU9PLXE4M3NRRH04QUlHZDswfkVnPzF6fF5QanRCXlcrVFhq
SDxgIW42RGJGPVQKenpvMVJReGoyI1UkeT0kWXRvK3tSMUNFfllCQiFFUzI+T1FAQlR8Qmg1Nnpt
SnsmRzMtTTVxQmBoPzhLMiRmKkNNCnpqUSReQTk7SCV9R0RMJjwlai1HTDlKVGxAMTBNMlpLbGs1
bj1HITlQWDdsVEl2elZqOHlGfGJQOEw2OClZUyg3fQp6bGlrUWkhYil+PmBuTGRtO0U9bEU2TyNZ
TWk4QzBeJVB4ISNiIVAoRmRjakdVQVMjdFhMPVJNVkRyNjBtPz1mSmIKejdzd3omWDFqZmZrMCtZ
Pnd5TFNJZU8tKnVWI2VPWWpWeiU3eWZ3Ry0yWlpMSjtCJDdZRD9OYnFlVDJMXnM9fVYoCnojYD43
fVZ3ezl3akR0LSpPXkNvRGBxbmxQeDBGfT0xcXtLJD4hKykhNEJ2VX1tejF9NWpmMiM7eC1HK1oj
XzEmcwp6TzhKRV8jcntAd3VTSmRpNFNlJmFGezFYYkw8Tl9TdjA/WH0wM25+eypDO34xX1BiRHky
MGFwMzAyTkY+b15oKXcKekdneUYwRiZ2eTQlZG5lYj9eMnhyOTNmeCR4d1QwaUZxM2ZKNGQpYE1F
KkZfKylBX1dQKFpSRyl6QFZCI3NeLWtZCnpeYDBPPzhLSnQ7bnpjWXxfQEtsfjAocztTbHJ4QXRv
JlN2bWNMS0lYd3U2TkFJbkNMcFVlfEArZXVUKHhEUXxYVQp6amU+bXUmakBNKjRNdjJqYStybG03
djlwYiY0eHQ/JGBVVTlSK1gzNlQ/TWFyQEtEQ0AkXjM1NihaeV43NjNae3QKek81fH1BR3hzcDha
MzM0KXF+Mks5TkV6cyVHaHE3aUduMlpUO1JKWFpWRlpXa217PXt+QlFVWEEqPFlJPitRenZ5Cno+
K3V0M15jZE9PPWA5RG0lNz1EO3phP3k9eVc0PS1Aey0+Zy1kVmNnYio8Xm5pcXNwa1d9TWZsMk9U
fDBPR3JQRwp6ZkNWSE5MWEI9MDglOUIoZHNmaH1xbXZXMkpDQDF7WWRmeEs1NUBeMXh2ZCR3LUVR
bntTS0x9KHgybEhIT2t+e2oKeiM4QXVHdXVQOD1jdSNLbXw0YCE9WFVha1ZJcEp3bj1vZGcxeWo8
TF8lZ0cqbklWcGdRKD89ITBySUxQYClRbjgtCnpvPnsxVUxpMURuQ1V+NXRLek0jRmljIShUU0RY
VS1WRyVQRE1IMSE0THFBcTdJdHlEKyp6SFBaUVVwX0k4WT1GLQp6YlE4aGE7MEo3QVFyJWNaMiFZ
UzkjI2E3aGc7WEl9VmlBenNVfCtsPlcxUFgye1VMeEwqV3RGfkNTTm5fPXd7fVAKenRJPW8qZUAt
aFEoblIjZDt3USgxdzdhQlFuPj1BTFFXZjtTOztwYjRYSjJvMHBNeEFOX3gtfG1DKFBqemB3V2k0
CnpRKG58YmtORnprQ0c0KmI9Zjc2UDQtREBeVSp5XmZofkopLSgzdDt4PWp0I15CaTFxNE9APX5I
dyN2dWM4NWI/KQp6X2NVPX1IfVdYO3Z2Ty1gO0JOYURDandWMkR8Q2BMUzNUZUphQW9raCsjWEtQ
Ynk9cEFBczZ1dUdMYGohUX1NbXkKej1XQXpmYnpTbEx2aHc2VVFkXz9FdE9OTjdSUVd4TGxOJTNA
JXEjeSkwSjhRJmY8WUUpRWohVVRLTVl+N2VMMnxrCno3VlBmIW58WjFuZEFIZ1U1Yyhyc0VidEJm
O1g3X2pDcjEtKjZkP0BxNnRIS0UtRC0wM2JmejhnZm9HbE9gWVJUUgp6UnpfQTQ8dTIjdCU0WSl7
aX5gel9zLUl1KW1jajtJTVREfDBPVyNRKnBiSm13KXU9eSplUk9sdkpRQ3B8PVE4QVQKem82Snxv
SkJ1SUslSEBjbDlfbU5udCR8T3ItR2Q9dG0kUHh1Jn5XO29IQDU0YSU9d3NqJTxIYyVpWTlsMHo8
ZkFHCnpQTGV1RVRTK2YrVFhjJWIlQTZ1IUBzMXApWWtjPXZVI017IU4jLV5HLUo2elFBNVFmVmNe
SFclQ3xgSm5AQjFsQAp6WFpMOD4zIXJUPlRvO0liMWBwVE9COzVLRCR4Y0VeMUF8Tm1kbVN5dzhy
YHhtTldFfjkqNyh0JSUjSlBTa3c+PysKendTX0M/YihBcVVVMUlRRSUrKG9OUEJ1WD52aD9JTXFv
TjBwKjdeQ0l5ai0lViZ8WnZRWEtJT35ZZyh9KCFATndsCnpKQCsjZkohJGJ9XkIkY25DZSFBVV8l
ND04ezFgNDNMfSMjbTMtSj14XlNoRnE5XnQ5SGZyWlB0ckdwXlJmUGZQZAp6RmhgPWkqO09pbj5h
TUNVc0N8OX5nX2dqP3U5Tks3e3p2MjFaJDBxdGJ8OyQ7QjR1K1pufFp6e2FuITZ5ZUImUFcKek5Y
PVI3dzQmYz53eUxkZD5nQX41YFI/JmlVMG9lLU9mbnx7UHVVYntRZXpsYlJATWd7Z2lRZGQrYH0/
QHhRb0pZCno7dE5NKGFnTjF7UGwtUXxsLV4pYnUzSE8/QntMOHFQdHNLd1AlU1k/KSlRJmMoK1Mk
fHxIbGhFXjFadmNrZn0wVwp6Nz1CWkd0VnAlNlgjWitkNHxJU31ubW9NP0UjaGBrRXU0TFB2V2U3
bGk2dzZOUTc8O3w1PipyOWQtbHFXZkBSUnIKeiEmWk4+IzZGcUVpXzBSQmNmKlVLeVI5SyM1JDB8
aU59RXteSmhQalVSYzJoUmpBVU8qV2NMQik4SkNFWCNUcT0tCnpLaVBCXndNc2Z0a0MrJVZUV0hp
YVRUSnk5Iz42Z01hXlE/UGwxalNqTyRwdHFac2llZ3k0T3BnekleSDlHN2FxKQp6P21ySDFPJHdQ
OWdMbUNta0JzcEMxWXxNNjRsWiQkUlB4fntkP2hJelI7MkpYKkZwV1Y3YVYrRzZyZU1RSTBOVykK
emhjPy1tZmxoY2JRUX5oPnE+SUI5YTNAT1BiSWZPRCokczBQc3dxU1FzMDtjelh7aUoqJUt1QER0
RVM/KU57NmJfCnpfTTlCMj1TR3Q1bVBFe14oZDR1enZldFRxa0t6NyRxaUh5ZGZPPD96U0l7QjUk
cip+SXBXayZ2akQxLTk7XldgRAp6O1lmXkZ3JUR0PW5mfTdZZmdoT3w8WWBKOU8kaHZZRFp2fmZo
TlY1ZyQ5TTBBcSpqSk1zV0xYYFYyJDlkUCpsY0gKek9GT2dVeDl6cVBFOEtTM3gkM0YlUlImQSM0
Pz49e0dGO2c8bHgtUS1EbGZpV092JEc/UTs8Z2t5Plg8WihDZzV+Cno9b3dmVUxRZ1MyZ0pkSEB1
JFUpUUc8TVFITnsofWw9UHRjNV4xelpTJGJzcEpGayghQG9+c15lYDRpWVFlYGc2aAp6QkBIOH1f
K2ZzQEF6eTBQU1h4PEFhZ2tDJD4yQlU5cD9DQUVBendMbF9INztBayVlZEdKTyEhe0pvdkhqcjUj
VTYKejFJM1NJUmtxbX1PKVkzYkBYYmBjdyhafDJITFdDNzElKXRObzUmOW5wJFh+OTteNDh0V2Yo
JThMMTQxWFY4QlJGCnowTHcxfil7Q0Y2cCVMbGViTCFeMmAjSnMjeFZeVyZMaWtWTGh3cnowaHRG
OyFWWVErPiE5OzVKe2BDU0hxLXY4dgp6THZCWldNfEdSZHRZVkMoR3JmWSs9eyl4NGB5RjM1dkpU
NiFHMnFjdmIpfil7X089IXNBI0pWR2Q4Smk5Y215T1kKekN6ODB8bX4+bEpWdD9AN1hPd1Y/I1NL
eFJyS1EhIXZpJllJJkt3IU1vJkU7JD4xZEM5NnZOdnZSYUAlaXBOVH1MCnpnI0VNO283cmxJWi04
PnZuQXJoSGh3JTlMYjRpcDZyIStQYGV5d095Rmc0S2pJOC1+aDJCfnIwZF5FQH5DMzd9NQp6Nlhq
P0E0VWAyNXB8SU58SGF6KTV8QVBVYjA7JXtBQkJkVS05ZEw7RnVsRU4+cDFYWWIqYjUxZm8rNkYp
eW08JSsKemN+eSYlU0xmQmIkanUhPEI2ak1od0RTMDxwcHAxM1o9Iy1WPmw+WmZodzBRLTklOzAz
Qk9FbWtJV0taXzA8ZT5XCnprQDhtZ0tBYyZkQU1xTmBieTA5Y0JEOzl0d2p9fl9QY2hYQXheczAm
dVUkZDRGPSpvfERhRFdlOTdUempTNWVwNQp6TkQwaS1mT0RubDJNPGZ+JjBtbzYtTkZTbWN8KXFg
UiQ5K1A9I25IOFYmZW0tSUo1djFWPW9sNEpQNWJRRCUpZFMKemNiLXFvSFJ3T3BkTFk/WHorczdP
Qn05TXhyMWtDSFZsJW18Jjl4Wl9CWnNhYChRQUxtTmUtTkwkN1JTNCh0ZjJnCnohfjR5dHxJPiR1
VH45WTlFXipaSD9PRDh2Tk5rUkBZYGRNbEklOVJJYExCOVIyWXVEYGpnNmxjRlg7Y3g9JDh5cgp6
O35GcX5uMj8qb0EwfmU1LW1+JVBTWVFNQHctQFAhX3E9SzJkblkmYiZPSD1uJEFEVS1jfWwpU3kl
XnpucEQtTkAKejJme2paM2w8MXU8dDFGRykwbDsoX2NHbEZKTF5sZERrb1h+Ul4/am9DbnV1YUok
NnYqXlpVSTxHJkl7bE8jfkImCnojdFNUTGs9Kz9hamJLfGN1NjRMfnRpSkNSM2x3X15lVHRFfXZt
Q31nK0l5N1lIb0UhfGstWHxeclFCYXtITzdTYAp6NGBBan1ObDlUfGdPbXs2dn1SWEhJfWZHc2h0
Z1pPJDZgS0o5Mj1NZ0VFbWZnYEMmUkZza018d0JWTnU0Ml9pQnIKekcxKHJ8OHVpVGhQKC1fYGxj
ST54KHolKFpobzBMI1p+I1AqZmR0aj5hX2MkWjteO2VST1heeFApeW9PI1ZHM0leCnpXeVVvRkdy
aGZiVzZSLXJ7bE5uMFB5eEYxV3M4UEFQRCVwI1R+a1FCdk5OPE1sen5he0R7VzgqQDFjQXRVeF9k
Iwp6a3t+WFVBVTJYOXh+eEw3TjU3NDFzeWNZQEVlTnZCMDB9dmVPUmp8YUYlVG1XSE1Eb3BhfD0q
NyNJYzJEYjRXa0MKekFON2lQM3U9I0wkfiFMLXVpQ0o9O0xSbXRZbWAkYFFjPD1sPjEmNm5FJT1K
U2I8QyF4aVZGUXhWcz9TTGIhNldMCnpXMCV2YGZRfk9uKTJsPjtuWjdCamt5UjJBQ2drRkwofTE7
enw5em4oO1lJIU9XOWckSlVCRCl3OChTckIhc0tVKgp6YVhKYEE4RiohfjsoemQrUDRoMHwydkl2
WEFMYShWd2RxYlFFbX5kbisqNDxPVy0lJVpYUkBkISY5d19LY0BaUHQKekt9NnNrUiNiUSQhfnxi
b1FVUztic002OEhwMnE8Njs9aDdsV2M/bCt2TjxSQyNuOE9YZ2JOcWlBY1ZRPWc/TH1QCnprc3pH
blNfQztEZ0ImMTBGTFg0S14hSHhtam5TSjw7VUVtVEF1WmhhQisyT1hyZFZneHpzbjlMdkg0e0F4
RkZkegp6NGA1WGxieWlTNlBxJjI9KnBNaUIyOyMzIStzenZyUUlZPyorVys+OXE0eWdkLTN1QlQk
em5MJVYoIylfKjBpQ3AKem9WQzMkQE91O1pAVSpmPUUjVUk5ZS19cztvNjdWa1lGLVFnQGtkM1c8
JUhUZ18/VUt1JEdreSVKeyNtc0krIWh8CnoxSXpsajIyVnR6c0pAWW1XTUZ4RipyQXsqQm1HezBT
ejFXTm4rYT0lTFY0dXZyI0BadktAT1c8WSVyPWZeNTs0TAp6Myo0bVU/RkpXKWllRzIydyRUV1hC
XnMjKioqYihqY2MoOCFIeDh6KE0qUGJTPUw9Yn1QK3VGeVI9JikmR1g9bFoKeilHdVRgI2YpKm9N
SjZhVXZUe28/Y2MxV1kwPUhyYjFTWHgldSQ3M0x7RiR6VGxVOzh7OzVIMWFyPFpwVjlTVGpkCnpx
VGlGU0Z5P3ZsZCZ1KFg7ZyQhV2tTaTUpYSgzMiQ0P1R0TT8oVXczb2xXM3hEY0VgcGE1JkVEPldl
PDwmd0JnWAp6elQ0TyVSU0w5c3lnbEhLUlpWYFRed3tYWjcwcjs7Vjd5N255I3FSQjxvQDlDQHVf
SWJzSX5aV2FIPnBjdl97TyQKenJDK3Q5O2NMNntQRHtVfWlqMEtSUX5jJH16Yn4kcXk7aEFaNGIh
d0JqPnh2cyRoSGhPejRYZlVDYShRYCgxKyRtCnpXUj1URT1nPnpAbztoO2lrP0hCYms8KDcxeWt7
cF4oWVNiO08rO2toaHZhK204N2pWe2MleWM4PkdDdEZqb1FUdgp6VnhfPjtGaVVDX3goZnNjMTBP
PmQhPXA0SWMlTUE7JDJ+YSpNLTJGaVFuanljKz9HRFVPanQkT3plR2w+K0Y0fVMKekg8ZnpkaHA4
ZzZ2JTIkUGh2Um1FIzw1Mlg0d3N8Typ8WlZgY1ZUNXxTQHw7bCNxWm1RdkRVbjRfKXZ0TT0wRHBg
CnpqQEJ8em1XJGZYWHJNaVc4ckZNNlRKMlQoQ3l5UDdtTW1VV0BecFhQOGJMLSU4bCRZUDkteVJl
QjA/PXxYPk9+bwp6XlU+RFMxRGhTUWxzVVdUTCZjLTM5ZkMrXyhWWT0tRXBya1IjdkN3dHtzOzRG
dVZibHQyQ3dSa25RZDhwKUE9XnsKemJ6Xk9DeEcmQkdOTE9Ue0g0TXxBXjc4eGNEYCNsMHxCSlcw
PjFXVXBqZkM5QGpaPE1fZmUoeUlfTWN3cmpFJUYpCnpJZmc/Kl5jP30yLVptbnNjcDRpMio/NzV6
Szh4I1FJeVYwaFNLZzgtVzQrdy10Xn1YdlJLalE3Iyh0JGcqdjswJAp6YUF8biQxVH56SykxZHI1
TndDUExCJl8/Yk5mN0dSWWs8SVkzTDZVM2ZyWEBebHNeKnpNZVhDd1dSK3tDenZFZEQKejl9VUNT
UEdCajJxZGtCYmF8d3J0IXNRKiFsfDtFb3tlPHR8Z19AQ3A7ezBAcjhSK2VEQkRsbHJWPHdGUT5f
O1EyCnptd3hZc3A8aD5pclBOV00tfiluIUNmLWpVY3swPm4lck1yUWJ1YWxEUFE/fnpwekZhbnh1
NVRsPSh9bG5kMyVNRwp6d1lATn5wRCNyXmptdylVOWs3NXw4VWxsbklQRlVEeG87fHwqNmUoSj1Y
NW97VzhOSEdKczImcllVfWdEPjhxRGwKekdZPER3O3tQTSpFV0BKZXgtZCpQTk95TzQ9VE9vaTRV
KkVHZjsyLVQtNW55YC1RQXJeSCVMZiMhKl9oWVl5UW96CnppRjVZWmQjKEdxbShEeX1ITHljOWlD
biFvbnk+VzJOfStgd3Z4NkJFd3NRe31Fdl5ub043JiFxWWxvTlRqQTtGJQp6eUdDMjJaeHU3cDxC
OHNYQENrKWR0MUlqSmJmV2JkY2dvQV8lMmZwIVdpaXhkQ2diYThxd00kZmQ7KCYwN2p3ITUKekxK
RGdpPjsqZmFBZ2FZKlAzU2lnS31hKTI1R21pVSs5ZDMwWTQ7NUc8PmI/JCEtVHNxNHJpSEQpWWFg
bjZ5U2N1CnprQnEyV3ZRQ3MoXko5Jk5Qe31QPzJic2l6Q0NGRk1sKzg2dy1QN3dGdzE1cDBSdVlR
RFF6RCRQO0k/YiR2PjUkUAp6WX1RTnVZRnM0SlZ4Tl85WCZjYFQwaGdGLTJCLVA9S1MwakZkbDAy
S3VjSk5obWw+QGRsMz4kVmJBUkc1akclZCgKent1eHg7KiM2cDRRSzxJflJyYHtPJWRSan1ecThK
dXZoVDZTLS1pI3ZoZ1MpUkQrTDFmSSQxazI/SUFLPSN6NnshCnojIUF8V1dOJmMyKFImUzkkeGZt
d0JEWUVYKlZBSC1kPTZ7OyRvNTB5diphdyFHdi1WMD51PmtxQUB1e2xzd3khOQp6TChOcWVJJH41
dnlxTnZjS25yITh4aUx8ayRpV3lPJmtGYlFeSXh3WSo2KSp0NlpHa3R1ZCRZZV43Ylpkb3JfaksK
ekZSbzZYaW1zZHtnME1tLUVNTytzZygmPmtvdn00X0Q9bWx4ck91bDc7MjxkdDE/Z0BPRnc7Y0R1
Wk9nOUptY017CnptQVkzOFdKJDBXSk5uY0w4KzFtV3dxOzM4RVRQMHZUbDJAZm0jPmx+ZjZTaSFx
cW9gPkIhKSN0I1E5NCZaezhjNQp6Vnl2eDFwU3tpM09SeDMkMGM0RmVYMG9gKWQ5MD43YzJjKiha
aUkhTio7a3EjeUtkel88bXk3OU19QjRsK0dWSyYKelI7KGl+QmZXVHBOdSVNQjEqZW1IfEJQQ3cr
bG1UWV8jO3l7Nk9JMHdvdHtRQHtabW1oRDhhKzZWLX5Fb1BKUGZjCnpyZnJscVQwfDZ9Y2pkJFMl
S3ZHdkRvP2dZYzhmcCFyXnNENWE9PU82QyNYSFZfbH1xSkN9dWcrNnJISlg4WDg0RQp6Nk19Wi09
bmlaISo3SUk/TCp+eGN0RjQrNjg0NV9rRipLZ3VnISRFM3Z9Yll8LWZZMlVpMWZ2OzcxT25DPUBm
NkQKeiZOI2YoJDFWZyleVCg3Yk4yMW5vTlUjbyZYbzgjIVRRVl9jUyRoTVd5aVgkTmhVdG5BWCMy
aUd2MUQ1OWRWRHF9CnptSUVUNHkqZUN3JitGSEQ2QjJwQnp3KEY/X2x9Wn1TbUppXiVzY1hhITZA
RDBvRldKI2Y/Ql49Mlh1KHRaWTRmbAp6RzdHNDM0O3ZGMyEjSFV5ZW1DaTtuaWhWM3E0RVE3JWpf
Z192VnNEZSo7JkZ5JEM1Y2hxO2F6UUZraGR1PXcrXl4KejBJWHZ2TXA5cUxXeHtVNms9WGdFeTFR
NiZ1QFNxVHVtQSgxaj4odmpAb3pHTEY2XmBmOWFSN2d1bGVOVkk5ZGgjCnpWc0RWYSQzbkJjQXV4
ZjFWaHl2X0ZhNEdKY2xMK2pOfGFeSj0+Z0RrUEozfjZmak0zczB9c0ZwZUFVNWwhdSlvSgp6PVZt
OG5LRWtWXnVqQnklQU4obytJdkZNPzx9bURUOyMzM009Jm03aFNAXngzLUhXbTJHJj0wJjh0dXU7
SXs+RngKemo9YDtBbWBZZT1BcjQ1bDxtbCNqKzkhZThDQ0hTbERxI21jJEpmbj1sXzlQJENnMT9n
WHNaenJlQ35YMnR7NkN0CnpffnQ5cG9PZnRDbGc0TWEjRXV9NzFuK1hpWUFfVi1mN3Ezej09Pz1B
dSNtWDc0eU8wWUEobXsyb1NfV2VXVjRKVwp6RFR7RHRgRFkkQ2k+ZUtCUD9zQlY3dkdLcWA2b2tk
PHAzS0VSb1I8cVBjPkx8OXNOLV9jOTgyMSh3czU9JkhYfTwKek9wRlMyRz9URksrQ0VVSWh9I3B7
YEVfKjc2JVZKWTRiSj09dXUhRD4re04pZC0kMk1OZDFOZCNGK25fUU5kej13CnpOWml9VSQtfjln
MnJBPDJTOHledWFYXlpxcUc3cWBMczlTQEh2JjQmNz1XVXs4IXdRRDR1M3hZOHM4ekZxZmhDSgp6
OTBRZksjV3hPS0U9VUFiQ2JaVU08RCUtLW4lbCg3LVFpVWxJPVdhSjJobSQmYGAwNVpkdlFYJEZS
MisyKUl0emcKendvYFFwXjdvdG1NI2xwVDFre1Y7RitINEEzSkpaUHE4e3A3OCtvPCo/LW0+UHlJ
WCNRZU1aKVR8NWFReSFOZXRLCnp2KVh5Zz8yS3NPRCpeemtBeD5GcSlSREVgdGpWaU08NV8tYE1z
WnQpPGllVjhqQEtDKUs7fE8meiRUXzU4eVV6Ywp6Uz16Q3UxVCYwO0lZXyZvU0JrYDg5WFYjQnpG
QHkzNDNxenxnbVRkNWFzaEJoI0htYVNfSlBOTnFUWStjRUtIUmoKelVHO1dDJmRKVl5XN0R6ZUhC
c0AjKGtnc0hIV0kjcjVZMFVqPkZFSlFMNHVoLXZhKUpMPD1iMCRgKGlWfUAqRU13CnojRWwmeVJ2
N3RfVSo5NnB0TnArYSQqXztPJEBIbkBwYmgkQXlARkNuSElrRz0qIWFpRWpgSipqUDQtcy0yTEsr
NQp6Jkdre0kpWlQhVDEqX2FVIzFJJXE1NiFoJUFJRGgycDhoSE56b3gqVnIyO0J9a2pya2MrT313
ciM9UE1sbSRsKFgKemZwTzhFKnlVJTZHcDZVeWB6ZWQzeyYtb2Y4JmRANCNjbTReXyY8QiQjeyFQ
blNte21QUU07aypiMDEqNUJ9WDJ+Cno2TTQ7NlI/aF8/bjRQKF5SJHM/eEtHRXlOTEpWUjxHSzwl
cjZrYnxtdylsLSZ3e301a19JMDQ8Pko8WDRJcyYrXgp6XksqMXBMSSNhRihhMWtKZz1DRS1gSkl0
T0BAeCRUa1N1RGpLa3lxX0JxQW15NWN5RyZGUkcwKnNidzlQcip0YT8KekxKbk0wbDVISXdPWE9s
OF8oRHNlSXs9Wj9udmokK1kxOGxwZnp3MzJ4cD9AT3dFVj8xUk8/KG47MXZpfWhtfHhRCnp7biNI
cmwrN1I9MlpibD83Kik7JXd2REtvb2ppSmZ3aTRiMXxLQ2FRNi17Qm1BTXNEKj1Wa3x6bG9TZHQo
JXhFKQp6V2JZQyhZRG1VfWU1OGVRTH48QiV4VWdZNGp9eVRmaHUqJGlpKWluUTl8eTI0Rj5tYzt4
WUk4OFM3UCp2PEJ2PnEKei1TYFYlJiVmJklWPCp8K3gtazxfQytuZSF6MUxtRXp4MzViOFZCQWx2
PFB9JV85KU8lZXIkPHd0ZWk2Z0YjeE11CnpJQTdYaWV1cjhvaldvNDY8cmhGN3ZDdH1xX0d4bz5J
SlcoeHc2c1deSG59JStgbXojR3o+Z3I7alVtXzdUQklgSgp6QSZVcUUkTCFaNDkhMTZhZjluSWxw
Vik/PEt9Qj5RNUxTK2w8bz9iPHwwNHZrQjFWQGxSVms8fW1EYnd+YVpHSGMKejc5a1hySDlSNDV4
TUZHfXRnbiRIJWtnI1lKRFowR2FqWllsQjw5ZVJxQnJueVpjNzdNSm05c09vZnlhPi1RbnxDCno9
UE4xTUtUYEtTPEhIeWU1bz1Pb2BidU5QLTVnZVl2S0g4VmhgUHYoVnwhTjRRdjA+YmZkWCN0b0F8
SzFUUzNsNwp6M3wySlJqLWM2eVEtUzd3em5fPDJYYnV3Ul5FOzNRM18jTj9LcT99O0pFe3tYMXZy
TDVjR2o1YFoqUkxTanlpe14KejVIVktJbHhZUDF8SExUVkFXWGduZTYyO2RlSi1vSkAtNWhlLS09
WlFOcGV5fT95fSNxdTBydE11YU9xV2U/KUg+CnppeDA8flg5VX4oVkIrTEhaTENBWjdzJT45byF4
eE1iSHluUXZ7b1FPTFc8MEdaeCRjejNjcmQ+UGxQbi1NKmdQMQp6M2thUzdpJTE1QUt1NlF8Z3Yh
WFRII3t8UzRacHpeKG55cl9mPTVvOCNLNEt1blVSNWd5clA9ODtJR2JXUEZ2IWcKenlGJCZpMnBH
cVVoVGZBVk18QylveSVXcmdeTnh4bEBxR3o0djxtdXJzNkM7RURhMU47KkBafVpJTGw1fG9nJURm
Cno0PXl4RncyWjdnMikyaF9FWjRTUGNAeFBoPk1WTSYkTXMydkVUaWR8dnt8ciFUKE9oZnMxaSpl
cytMSyQzXnVRcgp6dG01c0tEVyFeV2MpYTlIPFk8VW1COXMmelVyakZPbWhsckxWTFltYyV2aGAo
V3JwcFVJVXkkMk5yYz9fJihfLSkKelFOaG1eNyQwezNNdTZCeWh1TG1PQFZOfjIwdnE1T2xvZHl4
aCRvRURYWSRVNjlgYjFQQ0ZFMDNwNTMheWdxYjVICnpmWD0tZnBaTW97dmRAUVB4e0ZSMHRpTUUz
QzNAaHZhYzFJZmxBdFAtbypxSkk1SCpsMVA9Xzw5Sj4qZDRac2ttZQp6WTA/I1c8NCNvI2IlWjBM
S1ZFYjU4byZuZndtI0Nfc3Q1fk1tKm59UHk3UVZfT312X0IjfnJPRWR7IU9YUXk1PWIKemAkI1ol
PD5sKTA4MWhIYXJSXmFVXiFzS1lvJEtUT01JYW9BUHVuM35xMS11d19vU1NTajx2ckBtKDJEaHVo
NitNCnopbV90Z2ooT2gkZXkmVkdrdTBHMElZMlYkbHI+ZjRKQnZ1SXt9R04rITJfczx6e2ttOERR
ZGduVU9HPDRyOVZ5fAp6JFpuc3dTPi1lJGowZXMzdTxJVWtGRyQhVXktal5RNXQxJnt5IzV9SSN2
LWxFMmo1KCZ8RCM2S1dYbCVub2tjdmgKenVnblZNYV9ESEJKQ3FHISN0SXRyeGpsMHxLUHFLNTtK
VmQycG9kYTd4Vld8ZmV1cjhsXkg8Iyt1MT15aj8xKD4jCno1LXp5QVdXKiQ0bGJean4lNmthZ3V9
UFAxNCRmZHJYNX4wZDIlIys4Jm1qezd0YGdJOFJlRGBsS2p2OXhwI1M0cgp6SSFRYWdHKGBHOV5g
OTN+eWU9T0c4aUFIOG0tMXNDNEM/c1FoS2FEPiN0Rj5uX3psXyZSNi01PUdRMFdMYEZQQiUKem55
R3ZJYn1ZQG5qO3NpIUY9TUV9cFVDPzlgbmZ9U1poSG1XWH1oa2pnWkBPI2M3dU9hZzhGdm5nQWIq
OVpQR0FkCnordTV3MGxme1NScyY0ekYjWi0zblpPNlQjbEZ8alB0bkNJcT55TWYzcjV2KktwJigt
NkNKcVRKaUY+azEmT3IkIwp6WSg5MGJuZ1c0Yjdsb0F1P2woRnxhN1NQV09oJCh+emxCRj83dVZF
XlAhMGRgMTtCcFd3eVpjZk5AN2wmd2lHRFIKeihzT0cpOS02QjNjdC1VWFJneFUmIXkmOUptVXw0
aUJHMlV4eSo8cGNreDMwdTt9d3xnKkZPZ2BMckNedWY+MmM3CnpFSD9VQG93VUgmVTlPcWAqeFJL
bzl0ZDAye2ZFdDA2dEBibmpzbFVQO1dFQ3A2JEIpRDU0RUR+PW10Q2wwWl5tcQp6JSpAUGVFSUw0
aW8rRX0mVTI2MHdgPlJ+M0NCMWNnaEVKN05VKmpsaUhhKjU8MHNEcVpQRlltdDdndTNjY2Rla34K
ekQjVEN1PDF2SlJQMjJgK0h0SkxXIStRc3d4XmImdXZsdHFWUUcteVYjYDFsWjI2MSVSUXNaciQo
e059Nk4zK1RYCno/ZlVJcSlhI0tIcnFHVj9tc1I4ZE1CQTU2PjlrSilwbWNlMFl2Qk1HcilBXlFR
UEAlQXRaQSF8X2w0TnUtUD5YMAp6MDh+dmFvLT5DMXZeb2ZHTnUpcHRUTWhsY3RNISlDcSNkNXVg
QEooMUIoX2JzSV5HUks0RHdZb0pnKloqe0BwclMKeiVXMEs9Kik+KjhxRn59NmgrJkxKTlgjZ3xC
PGxYX1MlWH1talJTZEM9UCZ5Xz5hUWJwV2thUUNiMGpaMytZXjckCnpGNUg5YGEhQ0JrZX0zbDg1
O1FBP1FgR0FCRiZYcEUwai0kWldYSnslbWpudWFTajZNVjUwQWs2al5GJkZwTEI1ZAp6LSNVSzZN
YXluJG0/TG4xPytUZGwlSHRWKUArPFFGYlVpZytja3gqRFlkJGUxQEI4IzU1T25+WnNBfj09KXBF
ZkEKejZveFk1ez1iPjYyfEhwP0tAdm1RKndgcU4yWWZJPXYjMmp8ZEUmZkhTPkQ+Wj53RF8/NzQx
X0NWZFlAcjBFbWQrCno1ZDktU3lzUlJyVnp0Rzd1KkxhOS02VklCfEhFaiomdGE3KzhUM3c2X0VX
XipFZ2AjQm56XmFJe0UpQDJtJW97QAp6dnQ0dz9FUiUqVEhqYT1BTHpxaFZWYDRaK0F2X2hgTEFM
I15KI0t4Xl9Ae3F9SXRZNU5jemU9NT09NnpoNFQ4em4Kemc3NG5SamEqbUZLPFF1KiE8YVUjJU4p
a3hPKUBwaW1AMU9JREZoQUNXYXJvOHlSQHNuTU9jR2xaM3w3Zlgyd1dOCnpIaFF5cjB6ajt6b3lV
cXt5fFQyaigmKHloXkliVFFkPk49Pmk+cEJ5QUpXN0pNd0VQP0ZfZ2ojbmV5ejsmd3BFLQp6YH5M
S2sySXAyPkhlPVpxMWZAYGo1Snk5RDQ+X0k+dzhZWSEzUGpGVUpqe3lvSSk0bmtGM30teUdJS0xw
aTtLPTcKemVJK3I0TTMhU1dhZ0NSdD14RFNXeSVQQkxFKHo8Zz9fYkJuKlZORHVyJTR+Q3tmcVp+
WDM1OT5xfUJESExZZmpvCnp3XytqLVRHOUpVM18haG1TamIhU3skXz81X2tqYFFjVVAmbEMqM1Iw
S2kobjMlbnRNfDJ8OHl7d1YrYSE3IWJrKAp6YX5BNzMlRWA7Kk1TYVo2UVdXPTBSZD88QWExYVdA
UC1abU49cWY3WGc7YXU2KHo2O0Y8MkNKeFQraDdTYGNgbWQKelZPM2daRDliSDNeVHE0NEVQQnhB
UEJwMUExJkk2eUxpRVdQclktTUAyX1BrbmNyPWolSj93NU84YEM+bzMoZD1PCnpua1BiPl9GeUdl
blE9RnQ5PyomITdhU25fUDB7N3AoVXpBTHd9RWF7czd3LSo5S2pWXnBaNUx5eT5UT34wISk1cQp6
bjZqWHNmWGo0JTckVlhCRkE4UnNrbTtKeipFcH5uK19OeWxiS0trIVYoZnsqdClUTyN3cz10IV9N
VWpaQjwkU2UKeld6SzFUO2BIcXd7YUF6YCZ6cStQSk87YlVCSjVHO214Sk4xSW9QQFBaI18xQjdh
ZXdvcVRTaCNLJDU+Y1dkQEg1Cno3dnZXbShhall8OzA1NXJyRFo1aVImXyZATHY5KjZlZS1FLVlA
RWI4eWdCTyFTKFc0WUE3cCFFLTJ2ITZCYHZHOQp6bilhZTU3SWtqe1VRcn11IW8oMVprb00xNHIy
I1BoUzZRXmMrc1IlWXNIJmkySzhJK3dOfkA4UmhkeHN5RGQpYWwKejZTWjVoQTx2O2taZmw0OVgq
LWUmX0dAPCpkTVNJOUp1eHUoWlcjRk8ycn5QcnRWWFhpWD9JeTFwODsrWmxLeFdhCnpCJG48U3Fg
YTUlZmsya0JDdTZIZTswfVQkTXg+Xl5xJVAteE9Fb2lgWFk+T3pWPnhuNEdLaUR3QSZwVDhyP3g/
dQp6aG5DYE5TeSkpdVhHTyYqdTd4amZIcU9LZWsldkJTSklQYDN3NFM9aiF0MXd9UUpQellAaExS
czltPTdeU1M0algKenZmcERXPis5Pitmb2MpU0hlcTJ3ITVTTT1tMmttbj47NTw+UUc8UHk7OEYz
TDgpdj1jSjRnNzg3X0MpeGRlZzJ7CnozcHxUcSRJPWR2KntZRGZTUFU2Z3A8P041RjtKajBjOXtQ
QFUxJXYrYlBqfVV7fXVKb1ZTSGUrMiVSd3htO0UwRwp6IWhrMnBEdGs8YU1CJnNUNFVjLUMpSWZv
TFpFYkFgWG99ciNDbyVaaT87ZTY0OEd+S3tvZ1VJbitBOSglaUo+RFAKelZmVlJpU1R2KG9JRmY2
RlBmR2dQMTlPbEQhX0B4JUQwcCYxRDNGQENYNmczQU17dkN2RV94MChKcndofFMoJE1vCnpsb0ZK
YGRTU2VWeFR9XzJqPmVfckMrRExZXjxyZyNGVlJDI00pMzhsYEQrZV5We05obTMpRGhGRFllS31w
V357cQp6dXlYZ3xyJiRYS3xCRl8qOSEhMVJzNUsyISg5PkkpREptK09IQll7K2p+OTRuYjdwZ0VS
XmpDakNQKH5xOVZGOCEKelRxYEgwcn1WanpLLTh4TjJnYUoqN31fQlVzQzJ5bTtyYzRAWl8zKkpt
Q0tEcj4qLTI/TTtpWUM9XmtDYXRXfjkpCnprVjFkZVV1O2A/MGhjezM0VnxvWk5iMiZ1eUdLfF9k
QUs3SzB5KH45Tms8NHQ+N0hmYjkpd1dZVD95ZUpmPDd8KAp6PHhuS2VUYjV9bVNCSnVlZi03ekFi
blBwOHJrVH5SclMjbzx6OSpTbj5PIUtSRllKUE0oK0pkaEI8Kj02VWopMnQKeipfNVl+I1J8R3Ep
U2xPN1VLVzNmMjteNFhScjsrSDUpcnt1QWtZUnVsTGV2fiRVJWt7ViM3LW4mfWliKDRCfFlTCnoo
fksxPj1aYztOSCllfEtXYio4U2F4MSReRTl+RiY7bnA0SEhHMDNGI1M5bU47PjdpSmhJKDlSRlIl
aFJFYChuMQp6d0VlZ2tETmNRMXZWUSM2SkhXJV5ZcGJYQD0+cHVQbzdFK0RPTj95Z292Pmk/Mjsy
anRVSE1VRlBASk1rJXJnd0YKeihAVHlBMiRTNjcmbHBhVmspYGthXjhLdGNJZW5xbUJsZyM/Pzsx
VlczZ1olZGo/NFJqIzxxWFgmUDN4KHprZzFrCnp6QWJyWmtqKEYoYmt8P2Vye2w8XnI3X0xOb0o7
Pnh6QSFjWENQIy14ZWB+WDBFQk9DZjU0am17dXtxdW1PTjJFLQp6KHg7YXwlK0I5a21XdzBAKX5D
KnRhYUpFIyEmPiYlc0t0ays2QUA0I1Y1U2Iydj5PZlhnXyl8ODxZWDNtI3JWJVkKemkkQVlXKzZA
ejskUD8reC1GbnhFODchKXUraWQ+TFV7WHd8PS1BT1R3IW5iSXMkdSRNamVjcmpWOFVTKW8tN0JU
CnpPdzVOPkt8RzRDS0JOI3pWZ0IjMHt7NFR4dWZTPXdfZ1BwdEIyLUF7V2A5YHg4N0MpPyNUQ0lJ
YTVBa0NBQURRPAp6TX1EazkmfmtEUzNfQV4mQTJ9SlRZd1dUQysyMjw9LVN6blZ4fE01fXRmWjxk
WXhobnZlOTctKVg2REtkcCV5eHkKektafUpaSkB4KkxUa0dfMHo2RHJ9V3NSIThaN0oyV0plQFRD
TU5SVHRyK3lQbChGdnsoQj9sd18pUSg2bVNeU3dgCnpXfHItfXtlNTFJdj5kaVRUbG1HQV9TZUFE
b1RROSNuOXZ+fVMxNlNgO2Bjb1drPUc7YUJwezxFc0k0YSZgeiF6WQp6bGdLYUhyRDgmSyUtcW9J
emEkRyNra09iRTxaZFZhNFZDJihhZjdzZipudz4yPWNxKU5SWUNEWWVNeFJgKEpoYzMKelRXSm0q
PVFGLXJ5YmRpbzdAMERvYk9LY3xHYl5Ddit4KmZXVzJKfEckQWd3TiQwNEM2cWF7X1FpPkVac19n
ez5wCnpgQ2JoPWhPfiNCUXp4SE1FdnFvbjRFTyF8X25BR1pDdjdgeE19MHxIaWs2KGFZVmNKRyNO
QzdOK0FhdXlRVyV1Iwp6YyVuYiZ4UlY5UnByXlc3eylCNWxubUZ9dHdtcG1MP18kSDhoQShMaGpm
KmltVUtwcCFzWEMwQGRQN25GXzxzMSQKelpNcy14MElmWk4wQm5wSSlBTzU+UypEckdldEF4aUFO
bllLWCFqT2wyaWdoX2UtfE10QU8lP3JwTkBBQVRVJGA+Cnp5VVQ1JTdYP0khdFA/TWZDU3BYd256
cVgqQFQkWiNvdlBqVmBQXjBlZit0MjthKSRSa3VlZClfbVFvVFJsUkNiUwp6cG55WTN5Jj1aaCs2
MEF3LSVEcFA4MjFfNUxOLTBUMTt5Z300cTVeQmJscTwwOGVUP2RyTVFzM2BMSHJhe35FWTgKemR0
Ym50JVp7NiM3cEQoPEMqeWd9aTFYSnZsfXlUTWc5RWV7b1FMLW54QGsxNTdMODt4PkA5PlBAPkpA
YXVzVzszCno/e3Q9WCZxMWBHRyZIemRZTDlNJHRSIyUhMEQ7enIrakJ6c3gtMHBtVEtKR2JCZlVu
aSpEclFjcUFAPjVWa2RJQQp6JlY5K2NZbTclVWdDbyNIMShYZ0p2VV4oVlJ8c1lMPWt+cHdnbEZ1
aUZzT1pARENJdiE7b21ZKGlNYWp3STc4LXAKel5DP3BAM35mMUUlczswUlM1MVNQKm92JDFrNFNy
dCp+Rm1fNkZUIzdaYChIaVZuVnhxT2BAYWY5JChxPiMkek0rCnpJNGRwLWRTJFAqX2NVNk54U19R
OCslLT44R0g7Pj5UXnt6XkFwO15EZ3Q7SVRPJXo5VEYkYm9jY3dVcnYtcHlZRwp6ZDc+Q05Efmk8
ZCk3aV52M0M+UjVYR0lCaTxaZGpCM08wQzk9YDteOzNsZnFweSo7JEdgKDZJI1E7JSFIKn5jVEUK
ek41QFBiJFVeejlhVkYlYF9aJUMmPlczUHdYIUJocmslOW1jaUBTemN1MDNUR1hHU3pgYlNRWVpL
ejNWamFBK3VvCnpwMURkOFZ1ZzAkaTxkTT1KJX1jTG1PcVVRa0w/fDxBSkJLaT98az17UDx1IU5G
aWAmcFZeMntrP1dyOD9eQyo/cwp6Q05uUG0wfnUwWnBZTmVoX04pST9vPEl5JDVPaDI5NCttbW5z
UXk1TV97NG04Z0FlXmNEbjhUNV9fXk5Vbnc+e1MKelo7SnkoU3JJMnBre3F3OXdDRVV4a1ZGNHFh
YG56KDMmIzBaSX5VPl5oTn1FKmZ1P2thZGlAX1MxcW5UJUE7e1VDCnpIXkd8cSFCbGJBSSFhMVNE
ZyteRUlSaGs2TFBafm1QVHdmeHRfSjdUdk5NTTxhYVoweShMc19WKCFPdFNgV2Mjagp6a3t4dSlF
PTx9Wk4/VWJ6OCZfR20tdFVkcFF2RCRzUCYtajdWSHYwODAwa1VaUEg+Q0ctcVdPelUrNjleYilo
SmoKel83P1N2JVJNUFFqdzBxPDZ2bUREZ1VgbnU1YlclKTZhR29jKDhAUXs+dGx4V2dtTVROQntx
bno7WlZhc01RVG4+CnotPU9eQzlOK0NoWlQ8bDNwdUs7Y2w3ckp6UkJfSGBwb3lrSiZzYVdBVGBK
fmRwYTcrQzZVZyooNklsJmtVUCoqRAp6LVExdCp4KnJWJGlnVU55ajZ2YkhSSj9MOTJjTik9cXch
ZzVhLUJxWDhNTzJpSk9+WGIlJmkqPGFvPDQlNWc+c0cKejhDNDRrKWkzakB2QWA4RkR3VUB3bTNN
T3RtbjQ5WUIoT3B2IzZhQG9PcXBnNnlkbHk4YH52TSpTUzRobGMlT1k3CnpxOz80ZC0lbGxNZj1u
YkYqVj4tKC1zQThJOXR0cFBia1R+SygmOF9LOU4oUDsoJkVhc3RLRyskbXste2JBeUxgYQp6eSVm
azFDPXx5eypIbUQ+eGo8Ml47byNXVSNJMENyUGJjPTBNR2ckdzhUWUJ+MktwOTlYay0pXklre2Np
UihJZFIKemgzPXQkbTM/fUM3NlAySlVPTUFQKktyTW9kTHRaLXMyb2liWXgmPD1Ybys+MkR2OGRC
QEU7a3ttZX5EdntKYCUpCnp0NUNXYG1CX2ZQSWdeKTRFNnprOzR7aEU1MT1SP0Y3I0BzQSk0bSM+
a1hrUG9FYnVsaXUtV0IqNldxLTwkNXs9PQp6TVRBVjszWVIqUjxWVVhoXmlBcmZBNjdiOThAWG13
RE50JTl5aUFUOHJnLW5yWiFHU1BRRjI5cjxKbyZnend1R2oKenMoSGgyYHokTmk5IWkkVXI+ZFlt
MX5vSlpGbWpnaEtBJVZRcT1uTlNrenNuRHQ+MjZOVDAlVVc8bEFoSm5lTiUqCnp2WWJNMzFSNipB
NiU5cFRwMmp+b2Y8YGgxR3o8bkV1dlBHR3E8dUJpWn1LZz9gNnAxeHUjalJEPSh4Q3Y2VTYqfgp6
UGglVkpPbyV0QjlhcEc8YGIxJUVLdGZNS1Fsb0NFd0xVTCNFbWl8eGEwcDYzP2Z0c1BkKlpuTj4r
Wjh9bjZTdkEKentUZHBMJDMyQC1tcnVCaytFYTBHPHgmODRub0F7JitLKVUqb1B6TklUNX1FejR1
cWFoNV9ndGE/M3I/dE5wKGptCno3cC1TXktALXhuIW44Y20+VGZiVzc2VHNeVzdWXyFhJEt6bkY2
YH14JU9YSzVUNiFzcm9XJHNhOSFFYjNhK01DOwp6cGpebGBNSWM1O01yODVhLWVyRk1ZVktmUkRp
eGpuSURAUTcqaCg9fSM1PCtNRXFiVkM3U3hVd1pgcFUmZ0hmRzIKeitpNHdne05iTDBsTlolY2lp
VGchcFh8VlZwcSRyUUVsKks4ayhXZjA5KEw8VEBjQC03OUY/amxrViQ/UC0qSHA+CnpfQD0rKXAp
WEkwNzJQd0dEbiVRZndwRF5YdkBYUTJLR1ZnSGdPPiFZdUJLS29UbCleUz5mKEo0RV56fldxWGJy
bAp6R3hLa2gmQWxqZCsqPn1GXkgmP1BnTnlSMW0rcDx7NHk1fHx4QFpINXtnfnRBRlluXlM7aDFF
KFRzYkV7RkIpNHYKeiZ+e1c7WiRkeDFuRXp4PCpHc25mbF5ya3luP1dVMk12PUJoZyNFazJiYjh4
JmxUQTwxbDY2a2E8M3l5NmZ7fGlaCnpnSz0mdytfOFpQSldhbH1AcDdATjB4NjVlJUYzRXVDfEFv
QyhZKWFgez92WiU/PDhMST1kMW0yTVJYNnBAZFB0PAp6fDR0USFrYEhhQG8rPk1+KndaMFoqd1R7
RFYpeHNWdChtbWF3Vzc4MkAyfFlLQFY0PGooWnhkSThQNmUpbzl9TDcKeilgNUxXQTdmUVVNZEtN
MD5KRTB1MikoeHAteFluOFdAX2dKSnhDfTt6MCZ+ZSp7NDIpNThsUjdiTlZHQF9sUXlBCnpuM0xf
cUY4QVlvMHVGIWtmX0YxejF9cUo0a3Q2MTxiSWFlQytBeEtCZ25DZW5rRmM7YHozfUh5Uk53fmh0
VTl0IQp6S1N3SXE0OXp4JC0+MyhiO0IzKDBXeUcqPXt+IXBhWisyMSFxYlJ3UUNRISYtOHo1VGda
eWlMKlZSTUxZQlVURkMKejZBSyh4JXhUYm0qfkMqXjxDeU5lbTwjSD0zOGMtfWJmOzV3QXRLMnw8
ZTVoVXNecmM2bFhnNXgjJDVqWHs+SzFvCnoxVk51VXB1X1pBK2MreXY/JkdqITBJbGNzPlo2IW4l
eFdSKHU3dH0hSShjKy0pTTEyXlAqWkVVTXBhTWFtUTchKgp6SGYxcVoxPFpqd2ZBI2I3TEd+QTY0
b04wSiQmbkZkKHpnLWc8RyFFMm9hPVYpIVNGMUNRSHZvJW1wa0YqPElNPXUKemxDMj5HO31zbnZX
Yn0tamczLVpPeD9PR1hzNkEheEk/NGtuai1Geyl6anRacEdQWX1qPyhSeHJvXypyeCE7X0tnCnot
eVh6JEw5dihhT14mfDJQX3ZMV3VjLUZNZWVYQihEcGcld1U4VnpiYj1hQmBVdDchNiU4MDwwT3VQ
KDQqN30kNAp6dE9sM1E2MmZvS20oKkBVaV5PTnVSR2hfUGl4IzwzUWw1cENDTDlkKXt7K29xd2hQ
UWVDKkpNLXpWa3J2RilsZnEKek9Ic2UxQlpFbmt2eUU2WDVoUldHcCMya3piR3lUVk1YJTA8Nmgw
dmFDSU9Jc0o0c35oc2x0clQoKXtfX097THpSCnpUKURKdWYrQitCXiFOWmY9en1edkg0O3o3QkF7
MXpQNFF1cT1YMkJmWDdJR011ZGtiLWxFWGo0e18rUVplfEJFJAp6JmBWfj9PYTUkcmZpTD19MUhA
d040dVU4MXNGfTxLVkg5ezR1Tk9oZl5WZGY8bj84MEhIaFROeVI9d15JN3UhR2oKemxBYDNTQHx6
YEkqKkhxdUYlZWNrajMzZmdrREVfKSFUe345NFQtQngzRnNRSmRuPiMrZj87TDdEfXd5YEtLQkJE
CnpKNXdRcioqU0ZZYlkoPmtTPkkzflVfUVZzeXJLWjswOU50TnheSEZeZS1OKldpJV5EPDllUW0p
UyFAKDV5SDUoZgp6MjQ3T3MobmAzLUtZdCYkeXt9X0ElQFlyOFBee2lQV156KGRsUzwlWD53Tmko
NVlzKEp5Y3RRY15xVygwbDVNbm8KeilaUWdlM2VSNFQ1S1YpY1lVWVMoTzlve0pGVWNZY0E9e29V
KylKWmMzQCVnamQ1PDxFKHxMflQwbCZKRFYmZ3tOCnpEKTJ+OE1+OXpVTWVrMEFiZ0YhIXVrcCUy
UE9tQkpjYmwrRUQ2WlJfUiNmTGs5QX59eElQUExnIUh1PkNgTWtxQgp6YEdxY2ImTUhDY21DX3B8
eElnZDlWZVlAXzY0QCNHJWpXRUZQdFZwY1d3QEY8OWUyLUtjPVNUJUpmbCg9TDVqWj8KejBIbWx8
Xl8mNWJCckp2MTs0ZFhNUVd6ZihqfklZJEtPX2VHKmpIISVmSVUtaUdNbDNud29yJiE5bUlXfjV9
I3hmCnoyek57YnM7Jk8yRSsqI2wkWi12N15FMHdNTDUteCg4amNSfllWTE81QFQoMUApZj9AO1RL
V1BMSFNvK18jc30zLQp6amlGV0xyampeS1cqSGA4NnxeU2koZWNSX1NEPFhOayYlJH0yTlVNVmZT
UiUkQ1BRalU/bD1TZUkhIVdAU1ZAVnMKejR9aDxsWHZPRWQrayFpO0lHeW5oa3c/PUNtOzxRbTlk
PWBRbVBqUEkmMlNVU3dKS2N6dllUWGZXYD9ffnJhPj9RCnpSOUExaVYwZGpiQGZRM31NNDA1MVJk
NXFubzsjODhOP3pSRTNxcVp5dUMwUUBLYV5HIUFMWEt0ITJOaSZUWSpBTwp6amEwRT02I0lhfjte
a3lGdTF3MTlGY3dwb3YmKncyOEFXRjFvKF54Vyo8V3U1QTxfMikqTiplc1l7RHstRHhwZXUKemJ4
Rjh2O2NGMn5IYXd2blhnNDAxMUFxZTFAI145fnNVYz5pUnw0Y1JlQnZ4VkBZZ0FWM1hsQ3BUTUkx
Mkw1Iz55CnpkPW0+S0BKKiVHQlRZNUowe3xRWDdle1JIZDZFQjxvX19LKVolVWstcEQyWFB4QVh5
O2dCbUBYM2llRWNHWGl9Ugp6bjJiPSZAQ0VvX252KShAQF9iXkh5QCNTb2Z0NGJQVHNBQnlucEpX
ckZzRkpeXjhnSyVZVW5sRSpjNEB4azN1JnEKelg3ZStfdFo0ZnhVK3hGYWMzRmJDRzJUWUhDfGhf
dTZFOF5XdlBDQ0MyeyF+M0dZYm99cDc5WWhAcy1VbXtyYXdBCnoydnRiK1VQTlIxbi13eEpeYDBM
VEg5Jjs5cC1VIWtaPHRmR0k7XikqSyNZRGJZcU58YEhgLVdsZytSZWw4JnRIPwp6OzdsXno1ZEtS
TD1kOyZocSM8UnVnNDV5dkBrdWZlbGs5ISUwaUtMPmJlMGpgRGJSQzIpREpOZXBCfWpnSlBqcHkK
ekx+Vil0bSZKTVgzKE9kYFdJJSNMWE5PNVdrcnNyVEw+eDJ1M1UhWXBrc085eGBvJlZpTS0mYDcx
ZWJzIXM4Wm8/CnpfTX16XyFnfnt+LU1PSFpKPkJISCFxKyFjNzY+TS0hfngqd0pIMVhNYjl6bns9
a3hke204OThqY18kPyYkMWhoeAp6X3U4ZWFCVlR2SV5NfTw2ODtGc0U8LTwkeGchNEsyUTQoUENL
fFN+QWArVG5HRkRPYj1vTU0kNkQkSGxhQCRFKmMKej1MMnpOIXNfTylpSjNUVjIzMS1yKWlPZTw1
cXRgdV88fFY7QjlIfF9YclIlbXtpUjwlP3J2MkQ2KiNvcnRjbWY9CnpzOF8+OXJfKHwyNHp1fnZS
aGZLX3F8Q1VIQiVAZDVsZn4wd3YwR3xDJTY3SHo+M35PUkk8IW5qQVNfOUhWdHBKQwp6eDsjKVZB
YyRwUEV6ZHx7KTZPfFpPVzE9QTxkenY0PWotP2EyIXAwflQhdH5lYkA3S3UoZkRyPTBrQmVoNyNH
NnsKempQT25Celk9XjBwN2BoITluZnRSckFlazJma2RtKkxGKTlDJT13Ujc8WXRyWTB3UShxZF9A
SHZlJiN1Zm9+PXdSCnpXP1BMfUlfMjxTV1dUPDV4cj1fKXhadkdAWD5AWVdrIylNMSNDTCUtV0h9
dXhNTUokPz1UKi09NF4rNz9GN1AzQQp6b1NROEFvSEJVfTFfKVo3IWZyUE17WjVyJVhFKGVsb25r
SVdUUHEjQXBTdlRMN0h4aEw/ZWhZQUojITt5bilWRlMKem9RNDsyV0tJK2UwfmtndERMZG8qeV5t
VWsmVGRzMitwJjJHT3N2ZkIrS08kSnU5ViRVOGpaSnt2PHhoe3p5REoxCnomaSZ9aGpFSV54LVUq
JSZRPWZ5KEBJZzhUeyM0PD0rbz19anpmQk9+PiYjQVQ4WDZrbDBidGhYaGloeEghanhwQgp6dVZu
SFo7d0YyIypCOEVzNDBzcUJNS2tmYHB5U0hPbm1vbCheRTxMaiF7Q0ZtWHdkWHYteERpNjdZNG1e
VGBUKWYKelJtVFYlTzRVI2JSWiU3SlclIXJHOGpDbm5XdzM8JiM3PlQpdFJfcnpAYjlKLWNfUWJs
clh0QFckI1cmTUklc1QyCnpFanM5KikhKTlzRThMVWFBd2dmPiNXS1M+MT9JKiY+T2hTXjQxaTQj
Q3UqQEVUYz0xO29vWWVgOSlMcUpzPzdlfgp6UXMyKF41UXJEdiV9VShvRncmQXdpMEtudWt+dnxR
ZXlifTM7en0qQ3ZEMHhrNkBrcXc/YVR5ZE5kcjhYX18kOz0KenN5SmU5SSFHYl5eXmpLez1fKWZu
elkpZWpjd3tQQiZibSV8K30/aVlfNkBiaU9geDw4UWhrSngrRldhJFVjVXd1CnpncWY2OWo9VSYo
T1RqJEg/PU9zO3FTdV4/Wlk3TW5yYj1HPz9wZkAzQkhhO0RWY0lvNVg9REVVRFo7fUxxbyVfIwp6
KEdhcUBCVDN+aGc/fXAxYj9MXnZ0WHhzakVOMmxaNWx+KmleTn53WlVrfF5iUDVQOVZtNCNCQy1o
Zy13QTdXeSEKenxIPnpyYypaWTlNUF9MZjh9ZjdtNTxVazBGaXUzVXZRZFAxOXR2UXdONnM0big1
N09IJD1LTWhvOSZvWm9SRHdyCnpUakE3MDw3Xyk/S3RBQ2U5VTlZXjJTclMhO1BLKURyK2xGXkF1
WXVwdEFSVVRfZkE3Y2lCbGwjbVcxPmtAc3NlJgp6JFdRZWFZbyZqXnR8KVE9cjFhSFk4a2F3fj8y
UXBBbUIje3N0O2Yha1J6JE5xZDhOWmVOfGAjY3lwMW9uMnk/MXoKemVMUXF9eGZITmh7NkJaTih4
KXhfdWJ+ems5JDZ6ITByak5XckcmY0B0fWhLLVhGVClfUUZgRnFwMTEleWx6OyRpCnpwQE4oWEhg
I0hRMmtqT2VvbyEkNDErdF4oP3hlPmljOFRCOzNmYExUb3ZmRm9WQSNpRUpMNGM+RkpodmNjTzR4
bQp6V2J3SWNHcHBNQE9RVWJuR2hJYHRaVi1laCRLS0c/ZkVGYnRwJEF0dE1AayNxaWtxRjV7TlZ1
aDhCWDFoR0NvU3MKejxFP01XQyFMZEUhcj9kSkN1dWw1aVUzWHV0UTVUVEAkfjlXK31FT2klYHt7
JUAkPD5jKy1AMCt4dTE1QTJIcj83Cno/QnU/Z3ZFdVJDcWdWcDNrLWFZb1kofWJBanB3O1BTdnpJ
b3FuQW83YSo+bjEzdjBRWVJ9UEE7LT9sVndhWGo8Mwp6RmB4Z040X14ySkgxKihJOXI7e1VSSUh7
IztAcV9kaVApSXtFZSh5aXt3TTF7d3dAdks3Xl5zUEpfb208IWo+aiYKeiFFJjt8NkBkKDtSQSp3
WT5fbCtyeHtsRzE5eUZ9JXU+Wmgtcyl1V3ZrdjlSIzh5TVl9SXw0dXdUMH01c1FlWWs2CnpWJVFs
PVc8dHlGTmJyJGxLM09uez1WTztxemZTODNtJEVxVXlINTxmYX1ZKWc2Z3N7eiFLfE1RJkhjODZj
emlUcAp6RUpSc0otJD1JJG90WFdiZGUlN30qWlZBKlp4Zk93MV5DPl5wMUN1NnRSaHNkYDdKZlZw
XzVkVE94eHhaVUVCI2YKek4hbCZ+P1JnQ2hwWXg2RG9OXmZOXl5LI3AhbExEfEllT3pJaFdKYEsh
Pm1DJVBeJUxKUlY0SStBX1ZafD4kSyl6Cno3MkV9SyUxSUZ+YD5xVVpgYjF8TlJteStzYn5OWSt1
byZXajFRM0ExQyFjKiVjLWxTbjEwQFolWGg8UiY8Wj1USgp6aVNFVk4mcGc0NXJKcCt8QHZQVENA
X2YoI14pbXE4JVJeQ2RUbndaS2A/bjRTMFo3ejE8WCloUC1FWjgpWnNJaHMKejBpWFNxNDtsKlVP
bDJCZkIhYEoqb2N2OHpHP2ZiTVlyZzA3YkF9e1UyK1QxPTdyRmM9N2N5I0M4QWQrIXowRn5uCno9
LW5Mcl9IYmIyJEY8dm9MOGJ5VHU0VXpqa2I2R2I4MV9kc2orYk48QGVzZGAzZ19RP25rJGM1UzV7
VV5DYjZKPwp6QGJsVCU1XkNKOEN4UTRtX0NYNDlNYVpfaWBMVEAobExfI2JoSzdaJFFpMUhLWjN9
RSZKSXJgRGBCRHdFYzd1JXUKekxYT0Mkdlp+TlZ4MzskNj5zK3BBfEh6SVp7VipofGw0TWpWaHAt
YSoqaElgUGZuZUl2QGExKzBocmI0UHd9VlUpCnopb2pBaXd6JihCWU45bmdUK3VhY3lwMHEtZytR
RHcob0ZwTWlDKy1qP1NnQ20xMEtXOEBIO09zcClCdkB4Pldvegp6I0MkcSN6KVVubCY9d09IcH42
VEF7T0M4IVdATClzcV47RighZlhId3JBJExaZ0ohKVA7d3xmPyhtWHNLJDY0RCkKem9HKWtpYmRm
a015N3dTeVoqc3tVUChWLWpLNnZ0P01zcTFzV0k9RjdYd15ucjBOSXBrRz8xKil7b3FCYjk4RE5+
CnprVkpKeUJlKjVvU25nOyU7aUJWJSk+U0BVK2NRaiU5VCFxMUVkPld4Kms3Rk1fdCROITJRbXk4
MVZpLUFxJTRBRgp6cysjOGo8Vl4xMXVvSXg1e3pEMzwlTkczWnVtQkhBN2VqcilNdD0/RE9YJE1Q
UDZgNjBnVCQ/JE8ydjdYQThFK3kKeiNGMGhGZCtwUWFtTiFpaz5JZ1JUbVdVUjNkOWo9YzwycGYr
ZjhkUU58SXliQlQrUklZTH17Z3hFPD9wZXo3PVNyCnpIOG5OMGA2bi0+QmZxTXMjNDkjfXNTJkp9
T2dPOXxNbCsyalV2bngzQj9VYFg1enE3O21LLUt0Y1pwe2tnKTVKMQp6QShGUTRFXlpLRXFnfVcp
TkZFO19xZl9KeWYzZ3wwYVQ2UXR7dmRWXnFOUSEyeEgza09MZFBwdjc0eUJAITIoV0gKenhwTG5i
d0U9T3k1JHZMcGY8aHo+VHA3V0MqOXdmZW0lfVV7NDBoV2M0UGNjSzU0RDJuTWN+SHg4TWdyU3J9
ODJ5Cno7SXs5VF8rQGZjT255e3ViZWxLJmJUZWVaKjdhO24wTTg3VXVmWCZrcWBlen4pMERvZFpC
ZzNMeiQ7czIqdHZwQQp6b31SOUxBO3tVTlZrei0rQlAqWnYtV3RKI05CRW1fQEJsflYrZ2YqWldL
UmxEajwhfUAjb0xOKXdFJVNpJmJNUGgKeiF4bDFoYml1eV8qcFIoaDA3aXJ8SnJlSmlXc28tX3gl
aCotOVEyOERqRXpOXzRPTUlBb0QrIWxgXm09cSFEQ0VTCnpoLUJKeTZtV2Z1aGV+JiRkcGNwaypq
byQ0dHJ9eWlsJCZEeV9Pe2c8Z2JUeismTDxlelFCeyVWdVp3JHdrVnsxbgp6dHVaQGs3JipjJms+
IWtZXzhebSUmTigyO3BCN3FKdkBPMmBpRnBqS0JBKnZgciN5MmNFZzlGdFA5KnRkRUJadCMKejQ7
ND4pTUNmPzlgKk5RK182JGJpKj5rejxHMGl6Nk1Le15zOFJ5cTRKa3klaDs7P1NLI2lQQD1ZO0VJ
Y3B1V2RgCnokRSk9Wm8zNzBiT0ojYmhJMmdVcWhiKyElNkF+bG4haX0qQz8yLTt0JThwP21TLV9r
Jm5lO0FAR2ZjbnJsIyRKcwp6NlVIVl9QaUZGXlc5cShQbmA1VThEUDlPX0xud0Z3Z3p7bjlQVzlL
dXNsfk9lcnYoJkdEaHZDaD83Iz5sQCRuUUUKeipLbi07N2RVfiF3eH4/MllXVWRmOHxZMjt5fnpB
KUhvSjFKdSlgT1VJbTYtVWw7U1RHdyFpeTMkLXo5X0RYWE5TCnpLaUdDSUgpXndCVX0/bmlQUXZL
O09QOzdlbyN6czNIM1leIyg2Qm5sbXt7Jmo9P1Q4U0A8RFhHNXJSWSFHUChNQgp6cVQrb1A8ekwk
ZVVgfWAxKk4lNHNkPT5QLW9HYzE9I2YlfFImIUclOGBwKjNBKnA0Vz5YRSsqczJkZzNWJmdlVXIK
emkqTF9VTmo+Mk8lbnZCU2ooZT88O15eMEM7ZiZ9YGRUQyM4QyFCSlNRITZedWpDMzNiKVN8ZWY7
YX1XMm41blN7CnpSNW1ZY2plS3w8YWUyKkckcTZ0cElGeXM5VVgzZ2FNPm9zenE4JHo8UXNacDVA
aTM+RWpULSR6QDtkOXx2YlV4Ugp6MzA1K0FDODc2dmRPJClqVzM1dXBpJSkpcWQkcGYjNFc1UFhA
KG8mdmg0JWYoK0gjdGdpTnsmRktQfFhUdEhIKm8KeiRyO09Ad3YwWUokcVpUMiE8NllnM1hNQFEm
XzY9YlNiXk89TCZpYypSdkRZR0djO1Jqb2srSzkzRj5RVT1rRCQoCnp8OW5meEE3ZzdAanJ9MiZ5
Zik2N2R8Q1hvbms8I2hXUnNDUSQxUXBfbFlkVG53QVlAKFYjeVlCe0NBRH4zLWJNdgp6N18pVSpV
Wi1TfnU2NzxVO3FGWWNGd1NaYm99MkBmSFV1R0lDfHZ8em0/eypOPzI+dDU/VzVgRCYqS0NtRWly
XiMKelAzdjRuQFMlZkthRTxRRjIyYU8pVzVDNUBVdTE3OTAwJDxmeDYtYEYqX01tdXB2NElqX31T
a3JaWj1rU3FBQ1M5CnpKRkUrJDA1PXwwYl9uLVJybWBhWkQ+VHolQ0dhc0dNcnVVRSNVVF5iJEN5
QTFWayFZems3NilPaTsrdn5ueUExfQp6Vj8jWnlfPVdwT2VRJXczPE1wOXp2N2lzISlXVDsxbnZg
OHhzamxCdU1yODxyYDFAO1ljU2opNEY0YEczUC1YI0gKelE7amlZc31UUnFXKVgrbmpnX0tadDls
KncqWU5rPWUkfXpXcXFpdSU+en1UfVlZVUk3NDRPNjw/dlZWamJBeSpxCnp6N1gzfVJhNVlINzhg
WEpZbHJYJiVNVX5KcGA5MGEtdjY/amBkTD9JO15zWFR3dHRLakwlYVI9PiNGRGdKSy07Qgp6P3NR
bjF3djh8b3xHdFR7WDkmO2BeYUpAVE1pUURRT3chaFpTLX1xJnA9QW5IMilWVjx7NjFVPE5BU1po
RDBlI30KenxMMS0jViUzZExBSCVCV0wzUlF0S3hQUitHbiNnZmFBXkxGUDBYKEBoO3x1bl5qfEoz
ZVIqeTxlUGB+TnV+SCszCnpNYCNeKGlZJiohMXkwb3NheVpsKkh3Ki02SSVgNFpMP1YkTlBqSXJH
U3wqLSghZChOcXhjNkA/I2dUeVl2QVMtRQp6XztWTDNoaDIoMSliKHUjbkhZcD49eTBLYmRRPiVD
NnZAeSlfR1h6KnV0eEY1MlFiRnkxWTM5MmJKcTFxaEhIKWkKemw2KCV4SSlwcFpRU00zMmF5V3p0
R3VVQ3xZMF42ZFgkN3pET0N6UlRuUXMyOCYpbThuM1FnXihAbEZBVV9YbHMxCnp7enBlTkRNPWxH
MCotUTIpaVJ2eiZwM2s+dUs4Z0ZNZEk/fFZwdVBnJTN+KVdHfSkqR2ZBK1ZwblN3KDZ7PkEqPAp6
cnMkd1d2NExlVENXUUlkdVo9OFRyUWF8VW83KDN6T1hmcktxRSYjKztXT0RwKzcja000SG41bEc5
KHdDVio0LVYKejwhSjJxRDReYiV4ZnRIblA2OWR0JW4oQlYobV8wdntaVGk9RnhuRX1qeFJMamtR
VT9UXyhxaFVNLXhJUTI7OE1mCno2M31aUFdHJjFUNGsobmFhSC00N3BLOSthPns2cXx4TWB6I0dD
UUkzYnVVcTRPYW0hSERwRSpOREpfUDd8TXVKQgp6Pld2P3J4RCUwYS17b2VvMW48KSVvamF9U3g0
VGFnV1hsOD45bmJ6MjM5OXwhKyQ3NHNqcDUkcV4oWnFMVTw8eisKeiZ7ZkNvJDNDZVdwPT5fUSFP
V1o4eHAtbEtBbHdAbW1AeVNDajcxa0Bub2R3fShMTCNUd3NLWXAjNkI1VjkwQCg0CnpgJlQ4NkFg
fUN7NFRLJUBnYU93O0JmOX0tRUpSLVl1RWQpS2NeWjFBMmlxU2hNQlBkalp0ZSFMRVpaLTdaeGQm
Qwp6cnUyfDtARz9jNS1lYF5CeHApfDZpOzEqZXhRdC15b3JzTEg1VHZAJmlDKXZVSHt0YG8pJStX
WHY1S3w2YyFQQnIKenQjJX1ab3huTjY4OTQ8T0RFV2ZYOVAkaCFrNEdTMDgxUlRPb29BPDw3cCF5
KiReWkl2VHBiampGMnQheHtUUEB3Cnp3c3lYb3hfKjI2YEEhc1d6Mjk7PSN+eXhHam82MkM3P01S
K2w3TkR0T2d9bVBeSVhSRmJyekMpXiZVT2tpQExpRAp6I0NGYz5kSTdFb2x7I29AUzB1Y0EteHIw
VXtFVmVHV0tUcmNqfGpsQjhOTlhCRUY5UXYpWm8qNWZHe1AtWX1vMl8KekprPWxPMTctUy1fVkoj
TGtPNHpWYT14S0AkP1cmSS16blN6aWkyJTA/UDJ+Y2ZpbnxOXjl2N1ZfUENmLWArfipFCnoxciFg
QXVDNCUxKXx9R2Y9QXpAZiVXQlRnO25+KlVRJkFfJXlOZ1FAanJMWXN6SDcqSk5HZWYoNHBEfWAo
YG9CSAp6MXRVamg9TFo9VDd8andLJSFiUT16eXVqcCtNPEskTWQrbWNrNyk5ZHE9OXB4JFlWKVNZ
b0EwUTNXd0JxMDxmcncKemUlZ04zeio3eDtecUU8b1A5O2kkPFkmPlg4eFVZJnZBMHNQZjdMUEQo
WHhmb1o8aWV0PjQzXnpZV0p3bClNMGpxCnpSNj5OYDQkYlpVPTkjWmtiYCMqMnZNeFRpRV85PTI4
SyplU3Bzel5JQEMhTyZ1Y0g/fWpKdE1XdT19TTZBSElzVAp6NTVzMiRYfUFAUUsrdCYrYUBybjJ6
N2klU0xwKigwIWc0Yjc2cSRkejx8QUtsVGVwXmVOdFRrJkA9NlJ6NH5veyUKemxyUVBsOUt+XiFr
ZzVMXzVkOFNDWWohYChmNWs2RERte0g4aXRpem43MmYkcWVsYUlaZkRQe3U+d2hxMSMwYEokCnpV
KC1lZXs+UEIraUFRaWhpV0tNfiE0UzQzITBea3NwX21Ofmc3K2JjY3BzPUJ6cVBpdVFjZE5HYDVQ
JlZyKXZ3SQp6PXxGPlZaKyZ+NSQ/WHdGJX11PUM/a2U8YCtjOF9PTlVUNW9BK0J3KFE/WVFrRztn
QVNDOTtZdUJONUJ4ZnFmMCEKekNHY1FfOEM1eEdEMV8rNkw/KDlpWDVkYEBPeUxePnFrNG5FJWc0
blh6ZylYMGZ8M1Y1azQ1aDRqPUBKJEJeMG9eCnpDSHJoaThLNTY+NDcwMWJpTn0wUDkxMFAxKk5F
RmMyMlB8Y0xgKnUjXyF0TTE2UikwP25ETz1DPihPNjdAd1lPegp6en4kLWoxP0lnWnd3M0smIVI+
MnU1bTE9MWIzWjNgRUMhKTwpSkVnOURlQGV2QlQhR15HVzNoWCNHTjkoTVhBVVUKemlWZk44KkdD
U3Iwbmo7TCpyZUJnMEE9N1p1WXBnUzZTM0xVeTY5aG04X1dPKFZjezNRMC1UdTJOPUhCOGJgWFpO
CnpwcFFxUjckIVokcS0+YHpLNE1kZUtiaGhQTFVffHBJZSElS0R9T1RJQ2tuZy1nYXhXRXJsdz95
O3xaKmlyZEE9Wgp6ZUg7JUxBfkpOUEszQUo4ZGMwd34rOFdoNHdacStIYip9SDFEbkJ2bktKJm9K
bGlNUnI/YmNYc0s+fHRWVmBeeXwKelN6cnh3WGN2LWZjZ0Vfek45LT43ajc4P1ZxWj96aWBFak47
Kn0mc1Z0UCRLI1F2V1k9MXg4d0x3TDZQRXBCSD5aCnp5KkhRQEcocVBTS0NDZXx2KStHeTA+KThh
KXYtUz1PYS0/dWoxd35+NTZMNG9BdDhKcjFQUzJ7Y0ZSK1cmZHpYaQp6VFVELTtlUHtReFhvP2lk
emJXPT5peDVCMWlpUGZsT3AmTEB2bHRFWFE2dGotYDF1Wj4+dklRZUo3YExDRDg0OWcKelB2cHNO
bjwoV2BpXzRqejtoOXVVXzV4WHZrRlRXaCV4RDItMkR7NjAxZyRnJj5QeSNpWj0kNzdMJG47dnV+
fnxQCno+e01WckN7NmBvJEk5UFpySEJSWTU5eDBHKHw0fit1YmpsVGc9alh9ZDVVYSp2KG9eaHM5
YHUrOCZvRl5yRCYhPQp6IzYmSiM/aGY1SHY1aj1SPWUzZWc4RGw7dlpmNURIekBJJkluOX4pQEhQ
Pzd7WGxAWVpybHp9akVkXl5UWk5PZksKem5wJSh+eSUyRkMjK1VUJEZDK25xe0JfI0UxWSs2Y3BO
Jmd7P2w+dW5iQmJKdW4xfShgTFFnWnJFQXxIbXcqO04qCnpUaypJJXZ+WTdqb3RJLXZ5P3tFaDA4
VVpxNHNyJkFYMXZJO0FKdlROZGtkfmFKRnV7OT09Xi09Sl4xQGU1cWI1Rgp6LVM7TSslZWgmcD1q
K1k3NktPaktzeip8TGtPaz5FTHYtdDI/JXp2JGhtZkY2JGxuQ1FBelRMP2tCNUpwWiE5IzMKekxE
MlZqb01Ta2FOSCUpfCErY0h3a0M3JCMpc3RFVGlMcjdgSWF9Yn0lKig7cS1pQzt9ayUoKXlYUzxF
WHAhRSojCnpCLVR2fWRLcUdCaVJJIzx3SilSOz1mSGRgeno2ez9EPmM7SyghNyl3TSpneWFgVUR7
aXh1alpaej4tM0IyJm5xPwp6RDxEI1ZycjQ8OFlgQGBteldsYGhrYjl2XzloR2RmWGxLfGZfc2lU
LXV3Yip0RksqJHwjSGtyTEpDcURIZHA/VisKekdgZWZTeFdBJSNLRSNJNVF4fkxJSilQWiYzPG5C
eTYxTGBAR0BCM3E9PjM2RXZIezZxSzxmWTJtKXBIKEM3S1BNCnpRPjRhM3tqTTtZVUJ5SmQzaWQ0
NG9mNHVwPHleODJBeiF9d09FZjwraHZCZUFXKj1zQHoyWXU9QzU5IyY0SDxwYwp6R24/NCQzYkwr
RGBRO2U7RjUoMXF3NnkrLU5Ncn5OPzZlblF2cDA+N2N+OX0lLUh6MW9ibGZXYmpue2FsVDg2e3MK
ektgbDAjbXwmXmV2S2VYOTdmTXIhR1pPVEgkeV5jKntDVnE0YnotKXJlXmYwRnd7X2lrKHIzMX4j
Mk9vejBJI31KCnpgRj56RCs1UEAzSnpuSTBfbEt7KEVtM1p8PiFLb0tOYXt1Q2IjX3pjdD4pWHte
VUJHdj5lWSg+cmw8N0doVEtYPAp6QkFNa35VITsxcnBJK1AzSSM2TE56aWY5QCZVXz5FTCp5Xn12
eWRMYD9HKDc0QFcqIUo9JWloVylhJTwwKSlJcmAKenJlPWBWemUjN3dhY14hYTs/fWFAMnZXa3RE
VCU5YU9WR0xrVGxYOEJvWTwkSkp1Z1gjZ2t2cWxYdHtDXjU+OU1JCno2KEsmcD1CY1czMCY4QzQj
SDlMa3NsUG5kZTsjMDZYJDNqMSN8SCltOyEjbWlzVHxrYWM8S09pe1BtWW83ZlViWQp6KzFuZnQ9
MDUhfnNpWVF9KkpZP1JkJUpnPXB8WTZJUjFpTlF0QFdDVF47UDNXNXJuKUNiZVFxYHV5Nks9NiQl
RVEKekA9WGwjbkJUKkQpaklHK0lTSSk7PSFkc0FBKEl7YFR4WiF1dWh2YkxvRUBzczxmbEFqKytC
U2BvbVJlbk1VKiNzCnprRTYmVWtOJCpeKTwjaUE0JihhSjt5PFhLbkJ5ST8yak4xSVBNYzZnXkN4
XkRidllUclhTc348aHkyIyZnXj5MKQp6Pj1ganpIfm9sekx5Jl9nQWpiSyVIMW81bVhATEAkVj1o
MyE8N2tUTTRzRXFVSGFwZl5wb319fVAtczRpWkxORDEKelM9TUdsOzkmTFJ4JTFRR25FRiFJXnUx
YD5XbWxkbHBRbz8zRzQqdisrTnNvJmhaZClUXyRWMm1ZbzRUZmk+KD9VCnpNUSM/bDFIfTtoSTBi
Znw4QUhRTHVsVjdSUkBId3pTYmxaY3U4KD5NdDshVGZPdzVRN3J+NVFuUVJaO0tzWHtlQwp6Qiph
eDg5Tn49O15ZMGg/K3woQW9OeUAocGY7aGBCSm5ZRjQqQEZ3TCpzfiRLUkJobFAoYV9uSWRLPShS
Nj0wYD8Kej9UNVp5VXRJUjI4azZLb044JkRUMGg5V3EkfSUlRExKX3pNPEsrbkVTakZLI0lxaDhB
bXcpUm0pZjRIWWF9czQyCnp5QylXbTJsYD1YV0QxfSg9WWJvY0VJTS00SXk0NzIkdUhYJCN8K3lE
TnVuPS1ZNjBFMGgzMEtnK1BgOH49VT8mVgp6ZTtzPX5ue299I1l8P3lMVWlKbVlhS0Y5MUVnYT8p
NEhhSHArdWRrPEtgKT87OX55ZjQ/TChGM0UyQT1ZLXRLPkwKentXbVVIYyhtYzlQbT87RHA3ZV5D
PVMqY25pcmwjOHRwblBXeiQ0ZCorR09IV2IpNC1wTSEtR3MtQmVLU3AkRmZWCnpFfURjPmoxKHkz
ezQwO0xQeGpqdGFgZHpEXzVOZyNOamxQNiVMMEB+Nz9qdjl5MHJBVlNwa2lxTl5zcXZWTW8pZgp6
PlZEKURZfUl6RVlqPFdQPyFmSHUkd0tqY1grIWBnRVNPWDJ5Ulg9em0lPXc8RDBCNGx5cHYmUCt8
U2t3RFRKNmAKenozYSMlemxWX1MpfmxBIUZXanklM25gZTx1RVlYbHd4KmxKb3VCNE1ObH5geHVx
c1RkM0RkXkJmRDFFVGBvYHoyCnpoPjlRbU9JMT80TFNRcWQpa2EjKWR9cEokUHcwSmNvI15EOXts
Sz9ZbWlJVThhKSpVdUU5Q3xNT19hJmJIcHIzaQp6ZjhMbnFRek83bXxLMiM+cComblJ3LVBzKyNi
X09rdjQwakZxbVl4USE1RjZCP1k5bz0wWX47UG5NfGZLJkE9Rz0Kem9tfFAzZCsjZj9FN2xZTkFJ
eUZjKlg+SCs3d25gXlhxdl9RQTd9M34pWD19WT97MXlNTEtEdTA3UH0pYWtGRXtRCnpNNHZxN1o2
O0F7RCpIfDY0Z3dJRCZXNFhnQVFTUCV3dEtNUU49fXkhRmw/Pk9lPWo1PmtqcFZUc01TKzVzbnda
UAp6X011cFI/dmRIOz5JKj9YSDN3RXlLQSo+MXM1dkhBRDd5M01YbXYwWUlmMT5VclAjdXsmO1hZ
KFp6OWlvSjBYYDsKekAyPk4yUkwqMmFMQHcoMXF2YmpoVH5DXkZQTTFpRGBNTiNyMj4pOFhZS0Ja
cFZvMHtrbmd0YiQkKClHbFpEYWVrCnpRRllaT3UkbUBMJm9DLXRFRWNmI1UhamdvYEgmZVA4VWY0
dEEoeUQ9Uk9SYUFgbnZDeV5MZ0IqR2pVfT5HdDhDdgp6Y0h1RW0weiQ7eiM2QyV3QHxPfkQ+dFNE
clMlJk5yN3BNOD4jSEVpUFU8dlBXMnkhUE0hcFp7TD9QSTtVN3MlPGgKekFuQGVBRkVvJXdRISlI
T3t3X05TdnRgQlEqSjUkV3opJHtEelJ5empPN3h8UnViTTgpLSUxaEF3TkgkJig9TFkyCnpFbmd8
KXpLS14oKyokYDFZbzV2cks/NmZHVmBoN0g4Yk59fl5hYmslR1FwUGJZJGMyV1FFJF5ZZlpEbihH
bE4wKgp6N1k/OyVrcXxSfE59cSh3WnFzWWRIek5gK2F+cElBU1JeNnskeFopZTFJZ2RZRXdscDhN
bVBKJlZJdURqYzFfMEgKejtnJVBaSyVRfWhoKX1PWmNMVVhhdF5oPDMzbVd8aHI+PzImPlB2JFhi
Y0tpe3BTVmY+JHNkQDExd181MWhxcEgqCnoqbjRJJGxhdTt3IzVOOEkxcG45OFNxQylye3J7aGEo
SjRzQjIkN1UtMjFwNDQwI2Vjfi1ROFZkZ21qRlFaZlRKYwp6MVN2cllEUGZmNFhwczZ8LWsoMnp6
eH0hMD9jU1o4Ykk7Q3NKKWUpfkYyIV53dXM3XlE8cF44ZlNWQiFAOSRCKXwKelRLblFDcWZBQFY/
aCg/Vj1JVGpKXkd2QmNmT0tXPFpocFVvJSs5MUNLXz8lRU9hNUhIZG9RTGltXzhtbF5WP2BICnp5
bllYYU49dmtnVzMhd2c2QHopT20kflpZXnE3KitIMGRae0dzZFVId2x9T1dCVHlRO2c8ViEqIz57
LU1KekhFPgp6JkJTfUdsXyRUZWtuPUQhSUdDdFRNaUgyaVhXO3dsN1oyQiRuSUpfb3IoS3YqWl56
QTAhYDF+bEhLWUFGJGVHfWUKelBGe29iRCF8MTU0YCtNI05WYGY9MzJMbEhKV1o0UiF6c3Y/YzZe
ZC1QRHAhTj4rTWMwc1dQPjRielNGPlIqcEdwCnpnKXlvRmRhZH0mYlIwV3ZnZEdOTzM+XlY7MDl9
TFVfNGBiIXFOe1F5YnxEbDM9STtlUERMQylMRDVZO3NqUCU5TAp6bUBrO2JBcVQ9LSZ1QXpwJlNt
e0dIVWBxaWBtME4/eGlIPn5GWS16enFyP2wqPSUzfmJlKkMwOCFefHhYZl8qQWUKentnOXE2M1RG
TTcze2licVReYWc8bkl8RGdnO3Q3V1Q2ezBUI1JsfVZiN0l4JGY5PTkrcE1MaklFISFmRkU5d3Um
CnopRW5Pbjw8Zks2c1VhRHo+fEBjVmVmdSg3Ykk0SCNteX1NWVNVQ3dhRmhLTl4jc0RecnhjIVc+
NDZhMH5SVitOWgp6c18kWUwxeSpLdzxOZGJwbDJfaSZsejtQQlNlQTJlOGg0djwtJmskUF9hV3ZX
YU8xeEVUcW1YYHRBTHghKCZfd3QKenJHeSR5KVE1WG97Z0dpIURiaVhEdmJUT2YqTUA0S1lTVk4r
VCY7YihEM0QqN2ohVHhsV35qTXRiUShmUW1BTn1oCnpkdyRrQkhwYiY/b1RZVzgkN35YVCEjdVQy
aHdqZG5lNTFJc3pUZXpqUldaVCMhWENRRUhVQGlBTmxsKmN3NUp8KAp6YiZsZDQ2KjdFMjxQNk47
KEtveVktc3ZgYlR5Jio2YCNaWkgpdiZCTEAweVdAQDVwMn5sTUtGP3BZPkllakw1Ri0KemYrYHxG
UXVNalE3WSV7dm8rP0U2X30jb3BUdFFERE88SV5FZndoYihmdThJRFlRdD1gRz1iK2d4amB9KFc0
MVAyCno5fGdrbCM+SUlJN1U+WmtgQT9vY09sMC1PWSVBc31yeFFuPEh3NEhMQjIwSDE+Nm4/dlNT
QWw8X0E3RD5rO05VQQp6WmYpRjVGJHJeZlJkbUxTVyhHPVlpWG8qaDlMRz9Vbl9gTz1PSnV5aGlP
dlYjWktLfGZITmYmQExWOH1neCp8RTsKejNOfWNyb0dHaXtOe3FQKEVQUDdnTChXOGp2TmdXa0tC
QEF7R3lmOXFUJXs9KiM4OTsxWU56Nk5NLSVzUytReylpCnpyRCk0P0txJX1LP0lrTTRlZUlGZ1pk
YC1DRSkzVWBJcjdAP2BuTV5qJiNaQHNESmMqVDBYVFVQRjZpVHlRKXlgaAp6OSsxbVI5U3RWcHpN
Uzk4TGt3WnhtKVhPYGMxVjEhP31AKGpgZzEzbiYlbHh0KFpfNWkzIzheKFMzXm5fbkNTe3IKelN6
aj9wc345dD9LdFlxR0E1RzUpRWsrVC1jSWVgJFJ3M14pND17b2xVWEFYUmc5Tk4/YiRkbzYzMnI4
QkV7WDFZCnopQX5TKGRiMFNiYGE+ZHVhVWV5VDVFbkV1RENYUW5tSmUwNHtjd0Ame3glKWo5Tjdm
VDdqUjwjaE9vTTNJa3tQMwp6QF9tWU1AZFhmYSlSQT1INyYqM2E0Y28+K3JIYSlkKTkjaUNuPFVr
fjtoNlRtcGdxeGd3Q1RDNUdZO1ZGJVVDajkKemtGWGJ0N0UxY0xEYDt1YCRrTmQ9ciF3JE8kalhv
K0B3e0NlP3ZgNmNOMnhkTm50ZShnWSp5PXJhJkk0JnNUYi1zCnp1bmJFYW8hflhqTz1yM2pMQX1o
MmVFV1hzNm0+X1FwenxZZE9DWCpGVkpHJnhnYFBQbnJ7Iz5HMCpPb2RXTUpIMQp6USEtej4qN31Q
KEE1OEtsZkQpQ2hDOHpOMEUrT0ApZUxRdldxRDchcTtZanxvS0xRVyZEMUshU3V1LWNRPjQ4NzAK
ekVhdHtzK0xJQGdqWWJJK3JfaEAtPzl9bz40JCRJQk90PWJ1YDJgYjNgblV2UGpGYEFzZ3Y8JHEp
e048bi0+SytqCnpIanJiPTdpIzRYeT4mJTlMP01zKkcqQSQpeDtOVEVQbzNMP2RyX0V7aEtTRFcj
fmdSI2IyajlzTUZBeXZtQm1eJAp6Ml5XQFhRb1AoYzxSdz5vUzFMcSpqdkt7Qj1DdkFwZDVRKUom
P1gzZGtUKHMhVFhxTzhRYypgNTFQIWdeX1gtaWwKenQ2RC0/JW9zJHNkPTU3JkFFTTMhX0tQaEAz
KUl3alc5NTBYYEJ2Yy13czNQS2treDwlVkx9Q0pNNkFwQlJDaWRXCnpiSGY2KkdLblp0cV9pSTw8
UWgmdmQwJGE5YEBvblUjUDt2ekdITCojWktxN0NmYHhmcDxVa0EmNWZGWDteaDFqRgp6bk03cksq
ZS1SRElUfTNUUEM/JGxULURATnB6MkQ+IyNzTXs0JE9FVzUzc2V6aT82SS0lQntjNE1gbE5ERkY1
Ym0Kelc3YnNHeyslQkAwPlBGVms5P3padDh6KU0oM0M4Wlh7O3YzZ2ROenlIZz9NV0w3fHlia21P
ej8waHZPKT4ocXp7Cnpje3Y3RSl5JDFnKnppRjtgUWpPeSQ3SUk7T2stUzBhKiNATjRvZWJfMSFA
M0dIemdERDlEQEBUQW1jWEdsT0FzVgp6RiUzMztoJkhXMnZTa0duQGlTWVFGcHN+R2otbFdha31u
WmhTVz0jSDJsa3NHRWIlU1JjdDhLY25yKCRvbWslYDYKekp4VittK2d3KXZvU2RBSFNnMChoU3Zq
ez1pTl89P1VSMmpOe1AtOTc/am93THMmRDhPWj5nJDJZN31hWSE2MTBFCnphYWNGSWcke0U8ZlA+
V0RnYEZrYV9+dFdpZ04tRGkoaz5sRlVOcDYpJHtBd2FkTy1KUGJuYCY2LTRYO0hIUzR9Kgp6Plpr
a3A/QHJfU2xNKTB9KHNPNihUamJDMWQ1b25ZWmdIKSMwLXtAbV9fMD5OKVZtT0YxQnlGcSYqc0Q3
SFcjJGsKelQrYkRTJkReRkZIVEwjQVlvQDBxM1UtMCEtYG5KNHBwV0BjeHd6MWxHQHNKVWs4SlB7
XnIqSWZ0b3VeR2RpYHxUCnolSzNeaGkzRTs9bmlQczgtP0NDSiMpVyt3VEx+Rl49cUV9RHhxSXI2
Zzd+VEtNNjkzY0g0TFNMPmd3dnNmOUtwUQp6bHNCQ0VEKGRKUUYqTWxiJTVuK2tTNnVVQ3VyVHBD
SH0+dU05ST44LWV1eWUhc3U+cDItRCFpcjRzMGdsO1lBJEcKekgjJiZFU2F3a1kwNip8d2F0K159
XkFTI21XXkdvQkk3Ujs8eGJpSm9mQjdaTlFec0F8YnN8Ti1uSntTdFkyMEorCnpLXnczaTRwZUc/
cTspSWNEMXtpTDFfMHxwSXJ3MGo3cU5FKChWQUFUaDs8bnVHayh6X2JVVTFaMy0yNW9faD5SMgp6
YWteWEMlVEo1YzdvOzFZRSp2MDZ8N0lwPmtMNnUjZUtzS0czenM2ZStzJFJUUGNZTlJ2RWpmZUUk
YmF6X1N2dSsKeipnYXBvMWhfT1EmKnIpNFNuVylZS0d1PzglRE8qI0piYHMlbyRZLW1wWVN0ekwp
OyoyOVg2TCVoLV9zdDI5djx0CnpmSm99Szx4RHxJeENEKEY/Mk0rYHB4SV8mYUE+R2dAI3t4diRf
Ujk9PTx0bzRxJUswbFNRcldNdlpBNC10Wmk/eQp6OW9+SXhJMTRrZzt1Rz5HR0hlLX5EO2IkQFdm
QlVYOFFuVHc5dWFXUU05TzloQm5nUWAtcztmRVQ5TGhYQEl6ekcKek1Mdkk0bTZ1VlZ5PGI/c2Vm
ZXJVXj9IeEJTV2Q8fmBWOHozKiN7Xll2VjRmcDE7d3w5UWxEbEpNTXZ6Vm4qbUMhCnpUaXZ3PDNE
SWxvO0wrIUliVWxUJEdzbmYyO0JwRklDSEJvPUYxdmFOK2MxanlKZD1kIUZ9bGxLQitDZU1yT1Vo
Ywp6dEhfVG9LUCEwTDVCPyRFTnJ0a2ZlQChpWntRMSFIWilXPH1hfTtSZGMhMzc+SXZWM0omaE4k
U059cypQY09DOSEKej1ZVHtiQUpGIytOeGxSVkY/R1oqK2p+cEpCKnE0MTR8dzNwdFVaN14lOTFi
PyViUDBJQU0lQ28pY2YqKEBpO1B6CnoyPnooM3NBJVlMVUYjPDxyS153bURiWFhTPlpOUjkqNTsp
Yno5K2VOPk95fSlwazlNXktyZkJBVHx4TkRtKml7Tgp6IzstOG1DbTFITGxfJWg8UE9tQkJqTENw
bDFePEMkNzAzdCtoayQjMDR8QFY5PiZ8bmhKP2Y3SXEhbT5aLXskfDMKekI9S3AjSjI5e3dqKT1x
R3soREgpZ1F7YGdZQXhDKndoemxRJFNSKW5IUERBK0tRJGhmbnBkTTY2dk9KQm13cEw4CnpUfGRa
aSNaWVRTPlhWJUE8PHZnKG5GLTlIczBsIUJzSEhCaCMwZHd8RDhkQ1Y1JE96aVVJSW9fRTNwPkRv
XjFWbAp6eD9SPkE+OTw5T3xBZ3d0QUJIfjRhJXlOPWk2ZHo4Mko/XiE9RnF9S3hlTl9qR1VBTnow
dDFZKGQ5SzxFYlpHO2gKekJqa2lDR2REYT0rMHYzbEE4bz8reyRHSGpULTY0Yj17QU9DV0dfSj80
UCVHJXNrRFpXXjZ4ZDxYfEcqfThHNU5MCnppaF9VX3FBOCR3V29fMHpqfClzaCptZ1ROYXFjJUsl
fmI4NkdYPG8rejZ2Uno7TGkyeytKdTNsSFU7YS1OenlyMgp6QlpLVXF2Tzt7K3MoNkduJFopRGho
aDZPfDQyZ3hBTWhtZjExbHE8VWE7WU9mQWxaZW9CMWQ/aDQyQyskVzg3KCMKejNDclBpPE9UZi1O
XzApXmpVfjY0Z2NQeitpN3JgJkQld1oxNy18R1RlYEh0ODJFSTF5JCRwcC00MTVyTz9qdGE4Cnpu
YTxefSFCKXdWS2AxUSY4RSFTJUxMdSkpWDFwPzJJUyhOTEtkPyVGO3ROR2ZDTTlMRHhiMDdVZFlQ
NiZ7TTUjSwp6fDF1VGJZU3Z7VFdhLVhvQEw1UXlVIVFIdTA8Y3hfNlJLcVRxfileM3ZEJGwwSGRY
enQjemd1Sjxmbi0pUXxZUSQKekIocmpWcXNHOzYoe152ejJHd35sUm5KQTsxdEhZKGc3KUo0Z2ZQ
K2VuXj1GYXhDQjxVNldTRF9EOH0wVmRTPGVsCnpaKz1Rd2tffVQ7X3lyc0o9Xkh1fWMlKTkkdXBp
cHlxd2hVTWpFQChxdCMjVGJrZExHJmtrQ0hUN1VOKHF5MX5JfQp6O0gyMWJSNDNqU1hlR1JYP19g
YihlcFZsNGYxITx+PXQlUyQmVk80OWh5SWFFSEptUGFBdDxWN043QGB6eFhyKTYKej1yUHohanIw
OW1LbVV9fURMQnwjeD5fUE8qJCpod2UpO3wqT1N+JXRCTz9OTjwlcDUqZ1VnT3JPbWFYY1hnTTVH
CnpYVHAlNVd1bDQyVGMoYG5LayV7bHhAQSo+VWRyIWNoSWdCITRXLTMzITFYcVFERVNpYVJUVklt
SSRkSHtMaHZYYgp6e3hQSGMmRyVWeGA/cGgpTyM3R0BpTyNGeWBNT1M3djMmYzwwZzZZNEBpYmNR
bT13akVZbVgofm9HOUAwZ14jPFMKemluRUtsZHd3blEkbX45OHNyfSYzPE88fXQ/TjcodGcoTVUy
RExtajBnTUpEaDZfRDwoUEwhU2okbm1MZz1EPjxzCnowQF9OTlA1RXt4PkE7cUJEOzdxWCp0R3ZL
e34tR3o4cHBWSm4wMUlfRjtSY3ZyemY4S1BuXlJfSHQhbTQ7MCVRUgp6OWM1TSZodyVkKXNXNmBy
Yn0tWUErIXBGWnp1czU7X2tEejZXbFp7SCY2bDlwYFphaUNEOGtCIShPYylXV089aD8KemRRVDAt
cFI9PWFQNSl4R1o2ezwzbV5sLX0lWEJSd3RFfUQ1cWVeOUpXYUM9YWZOQUF7JEUwO2prR0IxM1pN
aDFtCnphX1pLPWxkRFQpQWtwPGZAX2BHU3ppe0BWOWE0MkRQZUVIZiFsKjlEIVFxRXRveWgwWTY5
JSNXaj9LfUI+VElUSQp6TkNpWV5oTi0qXzYmI2oxKG14PGsoIX5ib1d9bTR1XkIhRkE3cD5sSU1q
KjYlRkwmc09oaU9IaHhTcTtyS2lyZjkKelM8SmstTV5eeG1SNj8lc2R2OE4yRlhOWE5ANG9YbFow
N0RYWWs/TDx6cU9DKTAlcUo5ZnU+RW9IX2NXbmFyVCZjCnoyeE1+IXJebyluSmQrNThKMiolX0hP
dGF1WlMyMH1VZ1hRUUdmM3k1I1ZjP1FXaDUtbVZWUGtkPkRMTDxOM3NJfQp6ck51cDNEaiopcWBF
JHNBMVIwVytVcGVXS0tlWUs3T1YhS257a3NEYWhjczk/ZklpaF9XKHktazx7eHZyNzZKPDwKemZ4
WHVLKUJafEhDdTJ7PlJiJmk5RmplNX4pb31gbVRYQi1zZXBUezw7U28pc0thd2tEITs2YFZ2OWEq
ZU0rQkJCCnpHZSR2Z285fSNEWkd1YSU/TFQmZ3M9MlFZUXtXcVdVcElzOW81TDx8KnYhKXVTUS1B
QGk2SihsV19hYnBYdG00aAp6e3l1UlVkQWtxZz1zLVNKOEw+UFFsYiNDKjtzU31+bCllV2khYDA7
QTxXLSNiWExKbHxzPWh8dnBpeks+QGZ3UWwKelZ6Zz87RSZCfHRQVX1mfEw4WThGLV93U3QkO1BD
S3RBZVMqPEFQPkxNRmlqOUVva1opc1J7aDVSNyNVOXRAK292CnpESWhQPVZ2R0NNbm4mYVZ3aHl+
SUp8UTdKPWppQkQlRkh9SDVkNWJYdDwkSCZXM1pOIyh2ZTNQQj9YM3c8UFRjJAp6S2xJLW03WXxZ
cmpJbDd6cHUxd1pAVmBOfiRIUkFTJGg2I3RaKn1MPTkkUllQcXdwd3ltanRtcCtgUGJ2NTEqYkgK
elR4M3k3NGxfJCgoUm1IUlp8SCNuR0RWdU9IQH49Wmw2aW0mXm9kX2xOUnw9SHJxdH1HRGsxYU9O
OyV7PHlWemtWCnpNST8wamFHO2liJnhlbHtFRyEoJFQzJiRTbUVlKn5Wak85TWF1KXZRUio2Jmoq
cSFeMWkrZT5SPjk3Kll2QEZFYQp6MitFRD0lTiRvc2FaQ0J4YTh3QSRyY0x7dXMhMlFObHNUMUNZ
V3t2b2x9P1Y+PXskfmYwMXBoN2JsOXh6PyVyZXMKeilMPCVyfEg7ZDZQIW4lT0o2QS1+T0N4VTVY
K0oybEhWdmY3WWRtXmNOc0t+JF90am9nQEh0PjElXkRzYVBNYzY3CnpZXlVsXkhTKXVIQ2pEUGY8
T3I7RXZvckNUQ15lZTcrKi0mLWJzeC1geUJ8c25wTmltdXVRZX5LWWltRXJ7PCtGSQp6dSM2cWsz
UWd9PkFJWEAqJW1aTW8hOFE9a1VwbSlyKmlIK1A/cHswMihHYCMyWlJwIyNHIUlLKGpISVR9X1JK
QyMKemlYa00mMjYzKSpqTnwzKDIkdGRiQ1BWfGFfaXFVaiV+bT1WbypCQU9UeFMmTkl1Sj1IbkNt
PDhGWGdKKndvWDJoCnpLKCkpeHtPfXBhTS1+WEJKV2ZwfXkyQE5ZQClaeGRhKF5tbXp+diFiYmxx
eWo+R3RHbVgwfWxgN1oyLSRzcWUpQQp6Zmhadm1uVEFURUxIbGRQPDZEPmMqMHpWdEZlSTElPlp4
eDFlV1FZNXNoQHtPR3dXKzU+YktnZkZBVHN1MkFtbGcKelFtRlEtP0hSZEMmOFZnbSMtZy16K3FC
P3VZKChUdS1PJFVfO34lelBvNCp2dWNtakhSRERpVTQ3K3oxNkh2bT1WCnokNFJkTjRhPik1O0NS
PFVKdWprOVFCXklaO1c2OXQkIVIySTBmaE5GaHRlQVozSCRSdGw2Vm5LPDdhSG9oX1JRXgp6UzQw
bks3Qi1KRj5Rfk9YIzV2c0Q0P197YEVYaX5pXy19VjRoSUIoNTduJHUkaTQhbmNyND5WZjhKfEZA
VGFHLT8Kem44P2ZUVkliUnVkaGBzLTJSQTJsVE56cVhnbFZzcypeTzRiZFV9M05tekkkc1l7SU9x
TXE7Q2tQO05WMHBea31tCnpZWWYmWWdreC1kaXtyQy1YaGZNfW1VMW0yWGxsPCUxSnFBbSptdVlR
cTk7NHp6aFJ6V0V0OFNndHY9O2RlYUhpfAp6diEpbmFycX0oVk9FTyZxaS1aJE1MZT0oejJ0bUR2
MkoodzUjd2pjITQwaj0yVnYwfGojdWYqWHpKUWQ+ODZhckwKemU7KnlDYj9kMkV2NCliVC0tZnhQ
VjExPzk5fTc7el85S154V2Y1YnchJGBrN1VjQmt5Zm5NU09pbmBENnBkd0NFCnpkKWpjTytYe05p
eXgzJVpeNHhiemdEeEk1KWA8ZyEwZzFNTFN0VFAjZzM7aFYoeX1tUjllZUYpaVZyclc/PWZScQp6
PTlfViM8QmNPIzNQR2Z6VHtKS1oxfnxpX0B3MSVzbXh0bXp4KntkVTNFaWQ8bUUmXm1YRkVTNEJt
b3h4LVFERz8Kem5GVyM0ZCRDSV4pZU5vI3I7aSFHU0RLazVyRW1WX3NDVFZoKF9yKXRVSkBPYT84
VUZQMS1pYChZfTh3PnRrbj12CnpWJSFzfnw3R3xOI1R5IXFWIWFZKEt7VGBlaTBnPmNpVzNWZHdi
fCRseDJiZj1YMkUwKTBmY1omVGFsTHtrP2R9Mwp6LUwpTmZlVX01KnB+aUhSNmJ7OXUhUCNCWENu
JGp2SnBORlA4R2FtJjheaTxBKjBGeUQhKHo3TztXM3Ujbzk5ckoKelY9Kjx3REhHWXxUPyYwYnlX
c2MtNkk7bU5HeXl8RTs9P2crcUxRSWlNWE1wMHJwNTExNyZjZE5hZEEhRXlOPj8xCnpfdW97aldy
JUhfNnVqPU9lJmZFKVhPdX53a3xXXiRHdzN6MmdsX1pTTktxTyk3UW1nSEwyNnd9QSRPV3xiS2ts
dwp6ZDJ7Iz1fbUdYJk4rZyVwVUlwejxuOWtpX09ONEphQntmN3NGUlcwVF58Y25OV0xtcCRJYHhW
MiE8I2JJVUdsekkKem1sZj9zQEd7fT9vRmpUKVhDbUF2dDlPVVRPJVlue2R+RThUd0ZKS0U/ZnBK
N1RKM0t5ekZ+fUUrRXMqUmB7QGFHCnp0emR3JlRGcT1Dd3hVcis3LWdTSFV3Y2x9OUpWTz8zSWxR
I3NmdzFDcElBTl9hXj5FQzc1UDNiVT04Uj8lPkVSOwp6Uio+QntvQ2xQZkVacUVERG5VS1p6NHMo
enhucV8xRHUoT2NIOU9TLTF4TX54VmtZNlEwKmZaMTtOTHtzaCYzOXoKejNZU2dqLSUhOTFASXZM
b1h1cCFjND5NMTVzVVNhMCk7Nk9ncF5zcHdNJnI3eWF4Wl87QyRSentgYjhBTktgaSg4CnpATX5n
K1prYT1WRU0jQ305ZHo5MXA3eCNUOyhgYUleZFNZWWtEP0lNJXMoKWYxajttZklPZkotI0xEPlVU
fSRmTwp6UEdINHpacW1CREA0UjJ8eV5nMXpPbHtzcUp0ciEmODl8Vl9we01QPHJwRVdrO2FGWXE4
TkJxZXZsYTA+djhyeWcKejk1KCMze3AoM3IzbF5Sei1OTnl0YEt5cCt6U0ROb0dsTng0Ykx7YXtv
R1gjI0FtKWRtVkU+b2BYJT05KGd1blQkCnoyNmckJVd1VFhmRnRGbyRiemBuP2ghcElaZmJ4ZTlU
WTdwcVVEY2ZtNFpzKn56c3t9NzlJZXMoTl5FKU1lUjdVQAp6S3NyUlVqcnpNdUxAOHApVn01KFRO
dFpeJSRrMCRLPlFrRSpIU19QKnlpOHNyYD9QYHIhWEZOY0stJVBYK0hASH4KenNZZ2V2aHA7NWkl
fj1rQzFpazs/dlA/JiZrMCl5fTQ4cSRTXnQtYldia1ZKZ2tFSyRXbz5fUWF3Snp4Y1hGRE13Cno5
Wl5zOC0zRV9UP0dwYn1PK14rPk1mUXxuS1FhR1R1Jk9USFJYRGxwKnplI3hJM0MwRmhtZileI1FF
TyhPPCs9Kwp6Mj12RXQ8TW9RVHIpdFB+bDIzc2dxZXsjK21MVHNgWituV0tIWDJ3S3Z4UlR4QiFY
b0RLeWgmeSt5a0pLWiVWSDQKemhHelF3d0BiNEBPOF9XM3k5dSojLUA8bXZUQllsez5jemw8TnRU
ejk0e1opZy0xZTgtNlRHbDglI1hyXzRsaU1aCnozS0taZCZyej95JW9CPSNCZ2hPTUlJbn5ue35p
YF5fM1MzViQ4eVIhZTw0MDxhZHM4Tnh9LUQ3czxpY2RBfkNJIwp6QjRrYHteU18oOzVGO2YmKGE7
LXRNblElJkJeMz05Iylyaz15YT5tYGB6R1Zsd2U3QzktelhYcGhBfD58djc9S3gKel9yejchSnxG
ZkxObmsrb3JtYyhAaHAmMH1HZ2A0fWwoaChlR2pxQilTaFBMPHNqWlJIOEhmaXhtcVUza2JKenpP
CnpfI3M5aURAYT12MT93MjZKO1NsTXBnLTw5ODhWdCN7bzEyQEsxVDglSm4ocUdubGBjcylvP15Q
Y0lkdipaeFNrQgp6eiUoYzY+Un4pSnI2V0N0VXhMRHRoKDNnI1YqVWkkUH1nUlFCVX5URVRlSTln
OUkoNTApU1djR1hGZTVBQFo+Z0oKenNJPkAkRXI8d3hwJGc0KlRLSkY8ayR5NlM+I19ZWj9MQWxp
OU8lN0srPTtqRXlEazVSUHt5e0o4bV5lYFpwbH1DCnoyU3BnRW1YST85aEc3MVgpRGBrZGVLRERL
IUUzNC1FcX1GYWUzNTlsTzZZMGhNX0A7P0c8UXV7ZlJNfG4hS1ZMeAp6cmlNb0ZUSzRMIShgdzZR
dFA1c1YwfTJaPTByQ2YxUH5HY2BmbEZ4MEZZMShYeXgkYThiYTdpYSRhJjs7LT1GJVAKellkODg/
ZFFAMjVCYUAjUjVhI2tndmFiQ0RufHlyfGA5IzxTI1Z2VyQoZmlqZShMVH1WOH19LT5YdG9aI2BT
blh1CnprOzZJdV5fYTtmNGI+Vn1raUptT3hqSV8oPj1tbXdnTEopODxJTnZiJG5YZEQlRCtKNnB2
QCRkYj54S3w5dmhDMQp6JGBNaH16cyt0OVZQXkBkaE5Gc3lERVZQfG93eSgwQEZRaE1NcXVFIyZE
d25ld1pyQSZweHk+cWdgNG1vdn4tQjIKelJvQE8tVXZERjdxOCk4cFo7aT5QaV4oOS0mKWFWSnV3
emtLTTd6KD8zVy1+UHA2Ujt3WTR5NW1UYzlxNT05OD5DCnopM3NDRFF1U2E/UjkzWGJ6IyFRWDxE
YEB0JHY2fFZPekVxdSkxdGhKUHVXPGVPLVk2KGpuRDdEMWhNfmgycUkzOAp6cWU9KGUpQFk7Y2RH
ensmZiZLTTheUzJRYzFwc1NuTTJ6KDJpYXZQelBHaU5XISlDNylDXzl1Tk5VaSZUWm1tKUgKej83
Km55Ozw1eVM4bGZEcmdvM2k2JnQjTElCUEZoQTA8b209KnJjeCVRRGNjSzc9SlVQQjNlSFc7e19Y
aUtfRHx0CnpMbW1oU01+VFBYeGFkdWRRdCNPZDFLMDg0aUxYYmNHemB5RWhJJnlwKTBwQnVAV0A5
S2w2YTFOSWlPRG07aVNVfAp6Mk03TDFPZl9KTnpyMlAhb1I2TElzdDtEbUopc19aMitxc1kqQXdm
Qno+dT1iZjtAc1krWF5zIXYwVEdKT1BfcjYKejhpZlZXdSEmTExrZGNWV3loOUcwZTA/NmcrRFZa
OCNlREk/ZkFvQDgrN0J1ViNZcVF8WUNRbmlAR1EzO2JCJjJJCnp6O2VVJS0oRUM5O3BEYVJNNShR
NUFjMV5KNFd9NVBMejQ0Nl9fSmpZQlZYO35HKGlSN1BZfUhPXlMlITdseT9sQAp6OFFtSXhLV3RI
ejR7Yns4c0NzNmJRR0lMIzV9I343U09qZnIwY0BvX28wNU8zakVBVm8wMD5tNzx5QzVveFUhU2AK
elojT304TzhqYilgNEhoSipwJGphKHMme3ExUUA2S1hfQ2kzMT9wV0hsX1AoNCVFYUVlWUpQcl5o
cHk8QXJtZylVCnpeQWlBUTZxP292bllQLUIyJSlmVlFrfVNNbT5OPWc4WUsoNVEoe0BhJmFRQD9w
eVNtbyUrRV4/SzIwYk8jbEl8bwp6P1g8Sjl0RjlzPmpzNz43dkROUy1gR3ZVNlkka3QqcyN0PyQz
MnZQU18lOytSe3d4b3R7TG1NbTRVLVlVNEB1VWsKejVjT3p6Kj4lezxWUTB6XitkRldaUCoyJjNf
MHN5YjFRKkJKZHkyQ1V5Vkg2JnI1QD9sU3lMdD0ka0ZKY283PHMhCno3JCs/RD9aNHRvN2hkbXZK
KGxgJiRvNnhZRCFyVX1rNUpWPzZGZU1tT2hxKU1IPWojO3E9fTZ6Y0ZFRylqcCkpagp6WWczS088
cjI0SmpyOSE2Tld4TXRsbTA3dk1hUHRqNGRaWHItUF5IRClqeH50QnprUlozOWVSNlpKfTRzcTFj
LTwKellPK3xLfEZlXnJ5VzMhdVheNWpAQCNNRFF3KEt6UWdBWnl0ZkxzO3xmMSE2fEVman1Rb0l2
IS1MSGQzSmpIfXhECnpsc2V+fnRHaXhFaXphI25rM31WeGYoSWRhN20kMHd6PnNVYEBqfj0oeVQ2
MihNZXZjIz9oJGw1RjZxeGkwczRGMwp6X0ZQfGV2fUllQF55PDFHQHYtPCh4K3NNK0Z8b1VmP1BA
bXEwaEpjVmA+b313d2habjV1PjAyfEJZRnRqUUZvNUIKej9eYz9HSURxO189PlJqb2JZMnNIbXJO
JSlgezAkXl97KFc3QkM7KU9VbnIrdDZOdSUxNF9VOzJycmc/NHZwKk98CnpjQks1Zjk0PzVaJDtQ
T2VubEwjfmQ+WnpzMFJhWUwzQytxcGR9OFB6cmpUak5Nfk9AbHtlKUEpYWpEYW10NDUmYgp6RzE5
U25WbXUkN3MwNUU+JXx1KmZTMnJNWXhgOzUjLW9nX1Y7TlRERi04RSYydkxIR3xkY2QxUnYpcGMy
UiVAIzcKejlgMWk7Xm91fDU3alpxZDB7RyNnNTFWMTBTdUBBT3AmckQrTGMoRWd1PFRrZTMlVUk3
JlB1YktYdHpoU3tGUjlJCnpHe2l0aUx4SXtIQj1iM2ZSMldaMz4hTVpoPjNfZD1pQmFMSVN5fSVo
e3BkaSMpay1qWSR5KXVuNDRSfUhgMVdHeQp6SS0jKXRIMk9kdDdASSl2Pz54VUlrWXh3cE1KeHli
OEN+dl8rfnZRZHR5ODZ6K3hLSzR4UFdIe1RrZWJVZkJwMUYKej9QTFYwRUcwP2RDcEYjcUJFUmYr
NntzPCtWREgxcjZVdkhGOXklRGxWVjhIVSpuY0lRbyFMMnZlWXA8anhPfW1JCnp3NE44KT09M31o
U3RsK2V3QHBVKU5QPEsyU0JYNDI7VW08eHlMJjE2enN9e2tIJCRWKU5QPmNte2okdGRQbCQzdAp6
KTV3UUM+N2RON1NFfUpXZ2R5WjIxd3trfT4tNDUxUy1SPWJSfThlPVZINSVMe00jNVBjMEpSMEJx
U296Y15CcU0KenMyKStJdz45SnghO0RjUz5AcWNpUXwwQmo1YDUhU290SDt6Z2dlQFd0TktJbSo5
K3BSN1I7YjFhTzN9YUtgODBfCnpaXmwwUjV7KmFTO3U9RUN4ZnlyTDM1fGFqeCQlV3QzNyQ9RVdH
JVBTMzkwQEYpUXhaby1sX2BtZVVWZVdNeEdBJQp6UUFgQURwSk8tSSQ9en0jTzkzfUprPExufHRA
JTlxPnBwZjxIS1ckfEdpKkRmSj97QCVCTnpnMnpwOH4qKzRJJHEKelZjaFlsK19WV1pTUyNlJl47
Q0hmJVhtPWF4Y0J+KHxLRCR4YHkrYyotLXRIODJuUURLeXhZKT9ETEN4OUM3V3V6CnowOHt3PDch
JihmdWBSJXlyRk8xezUxKT5vcyQ9PFFNLWN5LWhtIypyZHd1TWJpPVJ0JU4lZyZGLV8wdmRePSRi
Vgp6U3JZPGdYRWJZSFBNV0BlRWlyRzkrRzFod3pZKHVUKi0oXlI1dUpFQjFxSjcyWEw/NClad3hH
fi0hN3s/JVlXTmUKemdLNEBRN2hYXkBCU1dzRlp0MHxCd2ttfUZLQFVEVCU7ajA4eF97WXJzRlBE
b2IqVWZAU0pDNj1GeWBQMDA1JTwxCnp1dzFIbXg0NVg+Y0JZQ19OSnZOIVp7RUIpYmd7RmVpaTMp
ITw1Qj8xUmJVYilhKE1ycVQxIV9+c0h2akRQQTUzewp6LXRObGEtOClJI1Y0eyVpen5LM1p5Vlp2
elJhTUByWFl0JSY4QDZAc3ZTTHRSSz48KyNPRz57WSQ8TH5lQzVpdk8Kentebz8tP2Imc2lQS0Qt
UWo+WnVge1h3VVAqe2NQZWl7XjNJWC0jRVFPIXpiZzFTQ1M1WVFlT1B3LU8yKl9Db14mCnpXYCF6
eUY2PDszRiUyaj1EMX1zfiNwOUU0KEt2TX50ZDZtT2UkOWY7TzJNZzxzSylgY1o+NDZAZWBNJD1U
I0NtSQp6NDs9RyZxaip5IV9uK012XyRINi0zX014JSojRzNCYTM4eG1DaCsjaHJ+alc5ZktVRFpl
YFohezF2bG5ANkMtZSoKekJzaEslezNtV1lII2N7TklzYTFeSVQ4MUVVc1JHeDs0Qj9WZ0F5RUpW
IW8wKV8/WHNuN0hvaXBAKmY4Sz4hPVQ4CnpRZ0BhTSk7N1NeeClhNnZoPGVObUxAb3F1WSMwbnlW
P1gxTkFaWiN4e3ZIb3RTb1FoMjhpSHQqRlFVMVpxKjlFKwp6e1NjcnU+JTRAQjZCX0whUHRUOE5s
SWFtO0teakAzMG9Rcj40OFpGc3RwbXRfRDg7eHp2XmM1WWw2SWdlSFZhNT8KekBsXzxpIXNPe1c1
WVFxQGNTYiQ7PEkobndlZXYyZHhUNnZmbEBgX0tma2ktcnhGNXZ7JjlZJUxeT3dOOCQ8bDR+Cnpm
Nj5RPXNYVSVqVzMxNkAhUXBwbFdtcWNTU24lVnd2aSsoeV4qdldTXkZFfWBHc0NKcCRSK149YyZO
TzV0eHpYdApHN1hFKUM8MSYhfAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaE5leHQucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoTmV4dC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE0OTQ2OWQzMmU0YTlkMWQwNmE2MzQ0MDkzMWZlMDdhOTg2ZmIyMzEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTc3CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBe
b0l1UlYkUDZVYyZKRUUzUWpFbng/b0pIciZkSXo0YUBZY1ZMUj8/Sgp6ZXl5YVdiZ3VRZ0YtVz4z
JFM7X3w7bnxIZTVHVHBvLUchbHBSbmBOQDtWa2ZvRU17UWY3NnhIUGhGTm5ZZlAoQkwKenAxIVde
Y1VWTU42ZzlvUm8yfn42aUY+KkBoSHpYQF9RKi1sJFY9RmVvLWlSZjtYeHQ7Z0czM0ZVRio4K2U0
cjhyCk1QZ2cmZWJ4c0xRMEt5PEVsSz1uIQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFByZXYucG5nIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoUHJldi5wbmcKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQxZDUxNDE1YmU0ZDI1OWVmMzk3M2RhNjg2M2ZlOThhZjRmZTNjYjUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRj
aApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTc3CnpjbWVBU0BOPyhvbEh5YHVWQnEh
aWEwdnBeb0l1UlYkUDZVYyZKRUUzUWpFbng/b0pIciZkSXo0YUBZY1ZMUj8/Sgp6ZXl5YVdiZ3VR
Z0YtVz4zJFM7X3w7bnxIZTVHVHBvLUchbHBSbmBOQDtWa2ZvRU17UWY3NnhIUGhGTm5ZZlAoQkwK
enAxIVdeY1VWTU42b3IyT3h6aTA0NjhDZyo0QkB6KnsyKCE1TFVPYH1eYVBFKDFka2tge3dnTkI4
PzhyI2ZKenVWCk1VSHgzdklWQ2chMDBzM2QoZnxNZQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsQmx1ZS5wbmcgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hTbWFsbEJsdWUucG5n
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODM1MGY3NTRkMTA4MWIwOTU0OGFlNmZl
Y2NhYjhjOGY0ZjI4M2U1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMxMQp6Y21W
LTcwbSVNfFApPGg7M0t8TGswMDBlMU5KTFRxMDAwVUEwMDBVSTFeQHM2aldXLUAwMDAyfk5rbDxa
Nz9vcFMKemZQJkNmdEMmbD0qTk5xSFpqPnRRVGdBek00V3U8fT1FYHFob3Q1OVZXPEw8MCRadVVj
SEslISVCOHNBaGhXI3ZnCnpaTDNSdzNobyFRdTVCdTRUYXlWXitfcSolTEJvMGh4V2UqfFJzMjhg
NHVlYyNgMlV7fkIkbjU8I3cpKmwmNWdYKQp6d1ReSXdBWURNZzt8MSsmQ2NxVHR4MnwmcUQhIVQ5
elM8NHB6TF8md15JQks4MGordmkoNitXOXprT3t1a1VqdSUKek5AMiQ7VEAtaE1PPkpBIzQjZHwl
M1pSflAxJDZKdWc3KTxhRDJqNkBaRFlAR1VadE1ieD10cypiKSRIRz4qfjF0Cnp3JCgzeV50IUNC
UlQ1WigzbF4/PD9QfipwQ2E9d0RUY2QkZkF4dj5gJm9VOF5DanI7PmZheE00dnA0XyUwMDJvdgpK
UERITGtWMWclO2lwS3h8CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvc2VhcmNoU21hbGxCcmlnaHRCbHVlLnBuZyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsQnJpZ2h0Qmx1ZS5wbmcKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ODEzYWY2ZWIxMzNlMTJkZWJmNTRkOGM0ZmQy
Nzk3MGYyMjcyZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lU
IGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMzA0CnpjbVYtMDBu
aCU0UCk8aDszS3xMazAwMGUxTkpMVHEwMDBVQTAwMFVJMV5AczZqV1ctQDAwMDJATmtsPFo3P29w
Uwp6ZlB2NmUlc2hlOSNrbDxETi0+MT9hV1leOXpCOVNGZH1uMkdgcG4rWD17eDVIcn12eng5S04j
XlE1ODhmdW1CfVgKemZSZ3ZRZH1sWHRkQyQlU0RkekIqeSthXml6NXJhRXB2ejJ0UE08bDRMOGRT
O3tBVUQtYXJ3O2wwLUFuPCErV2tICnpUcD5zb1ExQ2NWQGRUSmNjRTghS0soVStiekh7OVdSdlhW
YDw/QC07MjkkV249ez5zdU5RVlJRMGd6TDt5PUxtNwp6STFfNFdJfWwkN0RGQSFRWFo5PGcwWHNQ
WXJZb1ImJTV4R3N5V2Q9TzlgODlpKzx2cGdmdTR5MkR0LWFQPiR0dDwKek9KRU4hWHQ7OXYlbklj
Nm94UFVMY2N1bnpnOzIlM3pCNUhZbyYqNHNPakh6NWowZHk7MDAwMDxNTlVNbkxTVFh0CkNFUTVk
bQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3NlYXJjaFNtYWxsR3JheS5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9zZWFyY2hTbWFsbEdyYXkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3NzgwODIwN2JhYWZhMTQyZGYyNDAzNWQzYmRkNTdhNGZmOGJlYWI2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpsaXRlcmFsIDI2NAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXkFUfTJWODw2
WlpJPT5mNG8lZUtjNDNXNTtvWTJzODtYPVQod2wrM0gKemc9dHprSSF7cyN1cipBSWFoTVl0QUhR
R1RWP00qQjtPd2p7ayZCYG04NDVXQUtHe3ZrVGVXKWlYJTxia04zc3EmCno0Qi0pUmFwKDkkTitl
UmFDWTxLRGBpQXcwZEJaSDNpTX1FWFQyXzJaKURNVS1pU0ElSm4jWGtYJkk3Sz9tbzd5Iwp6R1VZ
bVN3bWEtJVNmTEB+QTx0bUJibGJLdEB3OztzZl5ScWV1PH5ITTYxPXxRaT1WPlVoRDg/VT1GPz9n
MWVZI28KekBlMil8WUI4YVlgSHtIODk9O0EkaTJ9eGU5WllpdElaUjQqMH5XRnwrY0VVQTJ1QElF
KUcjWCRFXiRiODJZUVhjCk0pNzgmcW9sYDsrMDFackFYOC1eSQoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlYXJjaFNtYWxsV2hpdGUucG5n
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VhcmNoU21hbGxX
aGl0ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNTdlYWEzMDQxOTNiOTAy
YTkwZWEwZjc0MWMwN2I5OTdlNjdhZGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwg
MjE3CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeQVR9MlY4PDZaWkk9PmY0RSUwPTQ0M1VeeGRj
bTtJRjtScnxmcUtWPAp6aWxaIW5maW47M0kybSV5XjsqNj5ENTl8YEVMbjJkeXA8bHk2NCtPYHNH
RUp2e1AqWlFfd3FlSWk7OWFUc2p5VUQKenghX2AxREg+dk1sK1FpcSFuczlFJnZxbT1kTEcjQ2tz
Tldmez5MUWw/VHFKTTk1cHp+Xz9ufmNhWj8+bmNmX01NCnpOdyp2QVRKYm1NWEAqJl9aYUI8YnBP
SVJ+RE8oYkZUJSFFWGZ7I1YoR09qQ2JgJSVOS3tITzdiQFcoP30pZEM7cwpSRGdmUWU7T1hrO3Zk
JEA/Mj49UzRSPzdlWQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL3NlZ21lbnQucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvc2VnbWVudC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcz
NWVjMWEwY2U4Mzc0OGYxYzU2YzMxZTFjZTYxM2E0OTVkZWY4ZjEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9k
MDAwMDEKCmxpdGVyYWwgMjk3CnpjbVYrXjBvTU1CUCk8aDszS3xMazAwMGUxTkpMVHEwMDBtRzAw
MDtXMV5AczZeUHFoVTAwMDIrTmtsPFpJRX1zMgp6TmVZOE41Q3phSWJHPEFAMXZlcEFiZ2tsYTVE
XjQ1SU0zLVNSRnJuOC1sWDhLeThwdk1lZllqVlpTeFF2RDI/TWQKejRhMHo4NktiMEZXPUJzVXB6
bkpPQVlJbypXV0A4bHJMK2JoR1VCPX0wJlV5d0xQaXxOIU9LbjRhRzlVejhuSkJ+CnpmeDR+X2JC
aDF+bSNWNWQmNFE/XiR8SUkjO20kPS1UeE1SME1ALVgxQWtYdkx6KUl8SHRTSEs3TUdWNzBKPEJw
dQp6STdIV1ZKUDNrLW9GcXZBYFpEMTRlKm5zNVM7bXFpaUxiendWVz5jd3J0blFmdk1sZGtCTHo0
dVEtSTZ6OWRLS3wKdjAhWmFFZkx1TlRndnYoJWB7UDEjYz4lVHxse1dKT1hAaFlNUnhUaE8wMDAw
ME5rdlhYdTBtamZRRj9qawoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRFbmQucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudEVuZC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGEyNjJiN2RmODc4YmU3ZWZjNTFhYTcwZTM2OGU5OWM1Nzk0NmRkYjMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTQxCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBedFV4
VG0hMn40dHgtUiQqcShWR2g5NzgwK3VsNTtvRiZKe045TXdQaQp6emRVb0A3aX5zdj8hQ05uUE9H
ayVBNUMkWUBTKnNTaTs3WSprSHBeZTJ7VDNLc0s/Q3lSdlBjV0B4M2R7c0BsRWoKcVk0NyUzWXIx
Jjx8MUE0NiNlU2khN3hrQHx4QmQqT3lgVCY8cFRYMUImdDt1Y0xLNlV+ZT1APVYKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50SG92
ZXIucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVu
dEhvdmVyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlOTllZWVlMGJjZWIy
ZTBkMDY5ZmI5MWU2NDRjNWZmN2Y0MWY4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJh
bCAzMjAKemNtVi1HMGwpcjxQKTxoOzNLfExrMDAwZTFOSkxUcTAwMG1HMDAwO1cxXkBzNl5QcWhV
MDAwMzhOa2w8WklMcDElCnpOczVGcDZiOWd8YHlgNnV4KTBTKiY/aj4xPjstRDRBfDtDUj84PHsh
XiZaJCU7cTxjVXp6PnI2ZUBQSHp1SW4hRQp6VlRecTxvJmx3NG53RGBLRzRuaiU2LUJ3ZG1jRj12
VkhoeSpUb2xFRmo1djtpSkZtY3M8YXRnKll9LWJsQEI1RnkKejkwez4zM3dRMGhaV0VabExgPjdm
N3UmWW80ViklVChfPkA+bng7N25vQ1hrQ21iWnZ1N2BSSlNSaV48Y05zPXcxCno+cEI4dVN6ZX5E
WWR+VTJsNzlhWFAxRXAqNmtyIW9SVFVTKUZlRTM2cTlxN3xfeXpwQEtMQk9sX2hVZzJfXitAagp6
IT1NNkNfQmAoKWlzSSpJcXlVRnkzVUZHITB4cnZFMEk3VGdranJ9alM5dVN9dmd9U1N1ZlRoRmY5
cD5sKmJkT24KU3NFS3l+MDAwMDxNTlVNbkxTVFlnO2ZWbk4KCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50SG92ZXJFbmQucG5nIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudEhvdmVyRW5k
LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJjMjdmYWRlMTkxMzBjYjRmMDVh
YTBlYzJjY2RjMGUwZDkyM2QzZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxNDUK
emNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF50VXhUbSEyfjR0eC1SJCpxI2BfQjk3ODArdWw4USNK
bUEzTGU2O2YxCnpVRiF+Sml4VVRIV2lsPlRNUjxBdHw4M2AjcjB9ViV6MDw9YkRtJm5aYSZ3MnI7
bGZHazJTa0l5PDg2TEB3PU1zRgp1WFpPRWUhKUo1JG1UVWFFclR1UzA9KyFkfEszSlFFUlpQNlZL
aTNPcjJaTmBwcFVYT0BnZUN5SXpCc2MwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudFNlbGVjdGVkLnBuZyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRTZWxlY3RlZC5wbmcKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNGZmYzlhOTNlMGYwYzQ4ZDIyYzgwNjRiZTgyMmNk
ZjZmNjY3ODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJp
bmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMzA5CnpjbVYtNTBtfVl+
UCk8aDszS3xMazAwMGUxTkpMVHEwMDBtRzAwMDtXMV5AczZeUHFoVTAwMDJ8TmtsPFpJTHAxJQp6
JHE5byU2dnB3WEFRaVleTz0tckg+cDc1STZjeVo7MjVpOSEwPUFSUGRwTDxmTjhlbGB7Nz5AelI3
Nj1BaE9jI3UKenVgNSRLVkFPVHByKlJ4NyVkJjMjKUl8d3MrWkcjITBlWEBWMFc/ajYwbit6OTlT
TVM5MTFLUT96QFY7Y09oNkY4Cno5NkNtUC0kJFVURG9qQTQ8Jk5ZQzBCfClLdXRyU04rIztVbUF5
NTxyUitpOyUzJHtnRSpDaGNmV0h0PXJAailFTgp6ITRyOSZWKi0tM0ptd2QlWjV4TUM2ayV+M3BP
eiVhRTZjSygxTloqfUZpejhTKS0rQjE1akpCdXJ+cig0UGhIbzQKelVuMiNPanchKDVfelhCNTl8
NUdYMz9QczkwSHlJQnooM29HSlFsekApIStJWChCRiQmakJOeU4wMDAwME5rdlhYCkh1MG1qZnRU
bFE2CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvc2VnbWVudFNlbGVjdGVkRW5kLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL3NlZ21lbnRTZWxlY3RlZEVuZC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDZjYjNhYzU5MTJmNjVlMWVkNzI4MTlkZjhlNjg0NzFkODI5NGEzYTMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTM5CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBe
dFV4VG0hMn40dHgtUiQqcT1Hek05NzgwK3VsOEt6Wjd8Pyk7YXQzOQp6UnJJSG1CRHsoWkIpNXBw
SkBDRC1fUFkwanlAeUA0KyZ5cmYmdUhfTCVnZTlvVWtfZVd0N2Q9dG1oeilwX3JHc0MKcG9jOFFw
R0xPb2ZtN20tN2x2WmBNJHAzd2tYbFo0bCMwRTUtIVBDe3hXdH4kKDY5RDJKSGw2P2cKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZXNzaW9u
U3RvcmFnZS5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9z
ZXNzaW9uU3RvcmFnZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NGVmNjUw
MWUwNTQxMGMxYjFhZTZkZmJmZmIyZDYyOWY3NDRiMjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEK
CmxpdGVyYWwgMTA2OQp6Y21WK3wxayhHN1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFe
QHM2YjkjRjgwMDAwUGJWWFFuUSpVTjsKemNWVGo2MDZ9RExWcjN2blpERDYrUWV8T2VkMnp7UUpP
QlUjJnEraTxSOU02MW0lVlJYTUhJejxjWG4tcTlxZHBmCno1PC1ZU0F7fkRMQWk2WHVxMmZhayN2
dXFQTD85elUwITJfMURPQVdwdksmTFkyKz5vYkdAeVYmcG9uTl9QI19TOQp6ejM8fjVpWn1CPGNI
aTEtM1F7b0FkWXw5RW5TMTcoZCt3Y1FsNmE2S0BQTFA8aWBTa3hlaHpwVVNlYlM1YUJpTD0KeiZr
aCNRIXA5JGRkRyE/bE5lekoycjtwISN7bWlNQWdAeVU8akhwbk9EdCtncGpMcHJmeXp1O3EmaSh6
eSNTNTNvCnp5Knp5MytWJnJrNyZkWEwxK28mbndPRDZpM0FxRE1jeSlpTEBRTDhseiRefDJDOztB
S3Y3PzVCO3dKXntFYlFLNQp6cTYqfmhaNiFPYmpTb3I0eUZiPGRUbj0kaiNeP3FeQCgze1VtNEs9
bnYyWFdnSFdrfmpeRnlUQVlaZmRuVDZUOVEKejtibj10TStSb2hmeCRpaWdtNmAjaFdAckJrdyFV
K19ZOzZ3aGF+UTBTd0Rie1BxcSYxPEwlQVF8RTJMS2F6TERWCnp8MTU1eStHVSQ4UDNCbFc4Z1k2
M0xzczhBK2Y3KXJzaj1zU0B5QEduT3BgI3x4JURIdCV+NShlO1I0Q3FzKnZYeQp6YV81JkRIfXxT
S29rVXomNypMRSEpLVY5Yk1NPT9SSyY9RmdTdWRxckB3elZiMjV6dzszRGFQRDUqQml4Ti05P3EK
elMmQll5KjtNSHtjZ2hIJCVlLU1wWV4jNyZ7fkx1RHtRJERFS28wSzcxK0JWfURyS3F6ViMwPTQz
fkZGUjJGKTs4CnpKenMpYzs7KyRlS0xaPHxVTG5pIzExMHJtVEwqSk5zVlNBUGFJdjwyaEheT1Fe
b0NsclBVVkJxWHFRV0dwWDJsZwp6PigjRSFEamxwNXE0OFdiPkVYRXtDdG9fKjQqPWxLJjdaaGVs
KG53WiQqN0tqUXZxXiFlKldlPUtwM0gtSlhsa0QKekVsRTtjQTY7Q1UmT293NFE1SUVTbkRCcVFN
P2ZqPlI2K35GQjsqeDwxajRZRWl6WCRoMGZiLV9hYVYxcyl6Y056Cnp0QE54I283RnJlK2VObUxK
ZCE0a1Y4aXdYeSk1ejRYUjdaV2R4RTx2cmJEdF4pd1VCVHZ4YjRiKTsoLWpzKlNCfQp6dmVEPlpG
NCgqPl5SdnE8JU0peDQrZFgzS3Q8eDAyV0A7JGVEQzZTI2RFUHcjRWAqZVAwU2g0PmI7cHRzY3Uy
PEQKej5lX1N3enV2bWQtRiVtUVRmMFJHVC1eVGxkdF5va0YqdTR6SU14ZD1qeDBVV1JMREw2V28k
VVU0fXdALWt3aHNjCno1TzR7TCtRLXZmXn5hSkU2d0NTXkhrMW9AXmBDQ1crTmBgZUhNeU1OcGIo
blFSeVFRVFJMfExpMGpzVXZQazwmKQp6NnsjdE81TXJFRUtkdH15X0lwNEp6eWZlTUt5VyFuNzhq
P2Ata3FBdWRIbCZJSUokVksobVZ1MHUtQGRlX08lKDsKemY0SzEma080YWVFQ2FgJEpAKFgjazFu
cX5YVn1zI21LdkJiTTw3JGxLfjlCIy12OWZIWWhRbkwzQWlybGNTe1RhCm5oeHFUXzc0SE1UTiFx
ZGh7b0M8QmFHJGQtPXdFTlAwMDAwME5rdlhYdTBtamZtSUw7OwoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NwaW5uZXIuZ2lmIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3Bpbm5lci5naWYKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjhjMDJmMTQ1NTE0MzQ0ZTU5MzI4MmZjMTVkODFkMjg0
NTJkOTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFy
eSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTY4NAp6Y21hKStgQT9Hdjd7
fWslLVoqKyM0bj1BRU81NjlYMXR+NDBNYkpgT1hnUTxAaWhffT0yIWRkUlFYUHtHNUNtRl4KelI1
cWBucmxwZFE+QVYkYEFlVndtKWxwKV5PQHBBeEFUbER4QTlOKFQ3VVNaIXteMFd1ZF9UfFVJcFAm
QExReXNlCnpBT1c+aHoqU14yblphUTJjKVlOJUZve0g+KFAqPzx0LSlZMDhqVih+d1kkNmYjKkdg
SnFvWW96YjhLdkVXQGhIKQp6JWFebVd2K3YpKHxMX0lIX341bHNtYTIpM1FPZCRYTFlFKzFkNW1g
YEcjYTEqVHo5d3wxMyh1KVY+aDJ4d0BrQl8KektSNjI1b1ZMU1Jge2wycTg+ST5CV21UNXZKWmJM
KHRCeSsjR31jUGE5R2ZINiNUcHNPIzsocmMqfSo/TU13O308CnpZSSYxbCh7MXVRLXtfdnFuRiF3
NmBNWjJkeW1JcWlQUlVYTnJHISh5TnZxa21QaX0xQ2x8I2hKQWNpTWBvaTJqUgp6KHcxcXpScm05
ODs2PU0/UG9OYTwkZlpgQTI5U1JNWksqYT9qektRO0hDQ2xxTndURUk/P0xOWl5DPnQhQHJ9SmcK
eld6d0pjRXhCPyQ+Znh+JHY3KVh7OFE2Tz1fenMheG92UGlDbVJEYTIpaGZtS3tPRHJ5P3l7MEIq
a2slKXwyM3wzCno9NGljdCZQNi08YTkxZUJrLUgkbSN0JUZyd1M1Y0w0YV9VSkU0fFQtREZ7Zm4k
Unc2WDBRRHFyU3pkdDF3fTdeQAp6RV5kdWFwO0t+S1Z9M00wNXBtfCtubEBTcnhPR0RVPSlERD51
UU04O2dKc29SZnYhM2A1ZX57Zj92WUBadEFBUiUKellYWSRJQz4/eGxLVjhidnNVNWpMdjR+SUZU
UylWfV8/WHomU15oeXkxN2NLaW4tVXZTOWgxez53IU9wb05KYy0pCnozSl50K1A9eDN9TUwjcFQ0
fm55R3xOWkM9aWpvJFNNaHZFaVNxKVhDVTw4dzBRSXlKVVgqUj5qMCo/VFQzTkVgOAp6ekB5aXBv
R0JNVD87UCpZeGY0PjsxZnFpaVF+QkRWTmltbSpBJjE1VUYkd2p7Y0U/OUhDeilpMnNNUlktPWJz
LS0KenFteWp2eHNpalZOPTxFRjNicDZuNWV5aipwaDU1ODhXdEROSGJDMmpGLTItX2gqVTFmT291
IVl4RH1sS0x8fEphCnokYTZNLVc1M25nJTMrbT5LcitAKkVwN2whc0hKQ3dLfDcrakl+bStQZShN
Z09LZlZ2JShtNjdqckNXYj5id0dsTQp6eGcxJTQoell1VkNhZ3l5IUZXIVo3bWZmVm1QPG9JX2h2
XkcyKzBVRCU9IVdhe3tZLTx6aHhPeF9fVEpmdkB8VGEKelJAM1E9WFg2V0IrKjZ2ZTtoVz1AJjVo
SEV7UndEdEx2OHJndUlCd3R2YU08eXRfXndXeXVrNjckfmhfdys2eiVnCnpQTTZXcFhjYHQtNXx3
QT5wb31tVT56UUVwPUwpN2lEZm1kaFI2eyMxJCVoYWJ7aSZ2KlIlKUsqMnQxc21QM0liKgp6Xld6
MEZRRV5ZTyF0fmxsLTU5JS1WZk5Rc1pacDBVPm9VOSQxUlVCTW9tfEw0VnJmX3V0K3RWZTskeDU7
T3N0PjwKejxDKT1LaXx7YFM0P25aOzNrWWtQa0I/bTBHT0spZ0wxT3ZVY0lUUmZ4WnR4MnNHO2lM
RzV8Z0hyMjR2a2cmI3RUCnpeflNRKGY+M0IwNGlrPG8mT293cE1sd3o+en5lajw2dUIlKzNAK1pu
RmwyTXpMYSVFUENfZn53UlpRODljZWZFNgp6VSRgd2F4aDwlY2JxKikjQT9pe29IUDxtK0YmST1B
PjJTPSY7cmkpNVVqLW0+bFZob0IoO1goZDVKJHhHNkNuJlgKejkyWEpeUSFzcUlJWHB3cT5eV2NP
RitYV3grTVEyWDRtMkxKdmNLLXp0bmROcGF2cF9DU3pAVmhOTzE9eVUmKG0pCnpuK0NJI2JRQEs3
OWNEZkBRXyU7P2deXlQhMVZ+fFQzfXkwKCpuQlJZcEE2eCkzRFhSI0RMQjNgSldvKmVAZypWdAp6
Xk9EXlhHQjM5ano9OD18MUt+JUViUmh5U2pyYT0qaVJEdm9Na0AoNVhfSXxMSiM/e1prT2JMJUBw
WTt6Vio4M3EKekRhYVZfUl5SRUxgfT5qfVEtXkZAUUlBV0Irbz0oIWdhditLQj0qTCZPczw1TGo7
fTlNZyM/UldXcG97e1dIcWFWCkgwaiZFUW9AYHpTCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3Bpbm5lckFjdGl2ZS5naWYgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zcGlubmVyQWN0aXZlLmdpZgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1NzQ1YzI0NDQ4ZmMxODA1YzJiYzlkNzdlZmZj
YjVmM2Q1YWNhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMjA4CnpjbWMoaWN+
RGM9OT4qYGFPT3xgfT5Ba0B3MVpxR2NMTTtSWiVCbih1MDBDSjkxalU2STYrfWZAMWNFP1ZMSVNk
ZQp6dW8qeFNre0ZeRDVmeypFNWt5ZG5nSD1LOCgrOUx9eFl4MUlfSTJLU1V+N2x6emkrMVJ7Q1Zj
d3glMnMpQDkjVHYKel88e2JlWnQta0A0Wkg8XyhmYmJwME1IKmprKGBweipyTHNzbVZSIX00RzBR
M2IqYGBYQF5ETEFKSlhCPmc1ZE8tCnotPElYUyYzR3dXPEl9Y14qY3BqdzNHRGJDQHRIZjU8Mzt2
fnlTRjYrbU9uIVBaVGdfKWY2JiFfayF5SX5WU2RaKAp6eHVEN1AqM3l+cFhNUEdta0xMe3FDZFRX
Z2g5MyhCUXRNYGElKE58bjxnSlc2djZRU153cjB8Zj4rSWxnV3RWMTsKenJNVHdlSChWeFpvYD59
U211SiNzUFlTZk57NTYyTCNDejVKV0R9XithPUJaaV5WenI/dUN8NmJ2ZXdOUFUhRlc2CnpxTFZX
K2BDaFJRWjk1JColbUAkYFRrSiE7eSVieihiWC0lTSs9RUpqTDlNUm9rY1pCdzNOVnl2anZRXzd2
U3tGKgp6SzkkQyk0b0VGSWtQXzx8a1l9R3k0M3dPeXFoMyU1emI0azEyP3M7e3chMT9PZEhtUTdf
UHQqQnkjRW16LWpySlcKejIkK2YhXzl4aThKQC1vOHt3fVgmT1dFNzRsTlJfTEpHXnFWY3BMREFA
M2Uqd0khdEQ+UHRDQiRZTnYofCRORD9kCnpvQmdZOVgoRXQqV3UlYjdLTn09SCpaY2Z2dSg0UypW
ZksybEc8SGBlPnEmKk9BMldzNmFUdU14cykzMTFyWUBRdQp6V0sqRXlrUiMqUSNTdypfM0wqZmZJ
aGk8eXBac29yR3tXU04jTHp4RWwoJVJIUzRPTCM/PTBoUSYqdFdXQzckYDcKeilTfnM4XnxGTk9P
cjR0RjQkLXBPSFNMRXhXTm9NRyowKnIkJiQ3UGFwUjhzWF5rSyF+Q1ZWakEkXzRlTWg5cSR4Cnpv
QGlFb2dfMmQjZGdFJXNlKH4pRDFePDUwV2J9WmhCbVhKenFVVHYkMGBZaSNONXZ+KFAlQUhleDQ4
RFI+ZWpVXwp6VXp+OXJYQVc3Q2UjYS14Iyh6MURafGdYWHxKYWY1RVpRSmxRbWMqX0pmVnpTUjtK
dCRUJEo1XikwMGlDQTh7VEoKenA8ZnVNYVl2WjhRWU1XWitgVHs+TkdnODRPRkhhbDd+RCloM0Jo
fUNUQCgkP2hjPDRiYjBgSEhKSz49cEVKI1E/Cno9MFQ5ZVZwMHliRDI3RiltOHtge1RRZS1PcGQ/
Um42Tmg+enc1X2VBaEZZeGBZbU0yOEZPTTRjdztRI20rY2NhVwp6Xk1tSzs9bHdlcCVOK1paVHpR
RV5yb1otOD5gNGBJdTsyQWtYNmVfOEdPR0J7bH5wQnAkKFpOO0JmdW5aYVBaPVQKekAxRm8yN2cq
MC0tI21gPj4/b1ZVdWpuWVFaKUp6JFdNUVYocl9TanQ2Jkw1c3xDaik5d3R8YFR3PSo8VCFgcXBE
CnpRUytNWCp0YzZGV2J3KktwTHV0K2JCVCF5ZHNmKC11R01hKHl0OUAhVEZGNnJvTlNTd0JoT15G
PFdkRV9ASmpDMwp6WjZKdWJiaXY9M2RkSnNOakFxU0k4NV5CVTB5JHkjQTVpOXxxdX5wZEZER1Ns
Xk5+Y3lOR1R1UW8/KUpxIXZXPFMKem5+MGBuMCY3KkhGdHRLaj1BfH1iYG9xbWZ1cn1Tezx0P1pB
Yih8ak1wMG5xPGRSaW1WNiU+JnlidFo8MnhxK0FUCnp5UndxeFA9RHF5TDVZLWEke0FXeDJ9czhf
UEVLWUNuayFPSTttQDAldTFNVHU7OGZneHglKEhkeVpHZTJ0OSRQXwp6WjV7cVJxKSs9dGBrfnFF
QUZraWRGZzB2cj4hJVpLc0k0THhgdT95OHN5OVhIWnUjWkUjM19uYG5rSGRKJV5aJTQKeiNFUCQ3
QkM9akBCfiFjKT5pbzNWS2pGKE4xZFBYNztaUnVsPH48enF6RzRSLXxGRjAlUUZBOGV0YylCPEJk
dkFWCnpnT0tAKUwoX2NXXylYQGlQP3A2YFV6P0RJTWduYlctYipiXyt0U2RpTClEcl9KdH1PfkVJ
WmlnMylXUEhmRWVhKAp6UUdMcCtydzZTUnNwVDlKKHUqTl44WWZQd0UhdW1vST12N29eamw4diNA
Y3xgQzwqZmJrYW4tYChXQzBpek5PWlcKemYpWWJzYyNnLThkejlXZVBEbU89bztCPUhRYkFoR2tE
aHlOS0FaMHxfbUFzYFhEZkkrUXZlYXwoKjxBXiM5PXFyCnpSbmdVWXp3bVgmcyQ9LUtfXlYpJXFW
JTdpI34jenUtWCM+JkJ8UW1PQDBTJGUmSiplUTE8V2ItZUlVS2kjUG1vagp6MzBnZnp4RTdVX09W
WD1sJk1NbD1pengqXlFJQiU2Z3NlfGlZfit4VjlhOHBMPn55bVVSQDR3a1R8TD1qVlhANHUKent0
JSpTcyViP1VyRU47MTh6fHdGbzVMc3k5IVBaUz5PemB2MURpKTdfbj41fVZqbHwtXk1SMF9RQCpL
MEM3cTA2CnoycHpuPkYkVVV9Vjt4MnYhP0pAUHRQQklMVnlJRlQ+STklO0JmV2slLSRELStzXzE5
ZGpQNkhRPWJNTkNRcWFnRQp6VFVgM0xKPDs+fmRhWFk7MFcjYWV2c29VYihAfGlYc3c0Vz10dUM8
KHZva3B8O2M/cUtFWmFgR3h9Zigob1ptPioKemtDdjE/JEVlVXtfa0YzMm5eSWY/ZS1oSHYrSzBD
OzE9SnNPclRXeCtQKXs3U3ZZe0I4KV9yI2A/WXUmMEUpZ3VeCnoqJEN0JTFYeHhNWFhMRHVtbio/
KWdgZ0khT2NjQTZ3emA5djFwKXtgOzU9YGghOVlIPUlMOXJJZDwtRntpUV9DXwp6RyE4bSNGIzAr
KEpUZ0hQP0lCPThYTCFENzJ7c0IpdWM0aVN3ZkhFOFVxekE5NVQ5YFp4ZHpHdVBkPiQ9ZC00I2sK
ekgjcXM0bVglN3BwWEAmRz5La3VUMiY7cVduXnkoJXEySFUzSmUmWDNVJX01OEdwMiMlbTk5REI1
PUZUKHdeWVQ2CnpESDQhQyg5TlJJVTFQfVM9NGQlbypaeyZhPFBoUlI+RDJDSVl7NVY/NUpBWW44
ZXc9b2Y/PFFgNFMrZztSTFNBJQp6ODFuey0hdmxqUT09REN9SzB6TW41YGZucTs3ez1HMHI/TnVe
VCojbDltcTdsand+NWNnXmVHYTgpSiRzcjNeaEMKekUhZ2oxXnwxO212bUx6dEtSSi1QUV4tWiQ0
JTQjX0BeVG1+Mi1XTTApOGghRjE0RnU0QnJxWElzTURqY1o9Vj9pCnpnOGRzN2Rja0BGS31KeW5H
TSN9VEZoQVAlQ2R3UXxhTjUwNjxtU2pFMFN+JEh6PzxMVyZ3TCpWb31nOTBKTig2MAp6MD0tbXxV
UVJ1TzU4OWI/eG05YUUxK1MrNChUVVhBNjhANHdtPHxHclZwWXs4VnJOPSlKeXhTRXVXVHFpI0ZN
JkgKeiE1SS1LM1YjclI3PnpSYCRYeko7NDlqb1lMJVJgaTBWbzR6Pio8dCpVWFc0T2pVWU8zM3xP
MUYqIUM4fTlRIXVWCnpPLXthYjZxczAqJSE2LXtpSylueWYoTXRNLVhUUWF2MGwtQy0wPVJRJmxs
PW1wckYtLSFXY1E/YCo5Rnh2LXpMPQp6UGEmWFNtbkVoamllTWc+dlV+dy0+ezJHJj9qe09WQHhB
cHMqaWtyKVg3ZDcqJXkkVXxpKTMyXyllMm5WTi1mSGMKelNKYipUP3BEPEA4WDlZS3ZWIU87Y2V3
K01BYlpfSUA+dyk7TStZeG1rXygqYUNZUEFgQzNHYm4+bWEpVFJQYTE3CnpWX3tRQVhDVmw+Z24y
cWRRU080VjBzZXsheDBRSEVBQlElPHp4S15qLWJCKHtWNHMwP19zdDZYNFpwYjEraDFHQwp6WjBD
TUxpazUkejBDWUN8cEMldipgPmg0M3tTME1MP35lRFltISUzXkRydWM2T21yWXtvQEJfPjdHPWBy
MT5YcmMKenpFO2kwVCZTZTBwOW8/WWRjNSM/WXAyNUFNSSQ8SFZDOWshYVpTU0FKfn14KW90KXl9
IWo1cjkzSWpiaDZgUUFfCnphT2ZnR1lJZGtmQzNsTV5CYnY2UjdQbUhvUSojUmdRbnhwQ3NfSCRX
PnYjP3s1Un4rfEZqJG14e1NDUXg9VyZ+VQp6eFlSNXBkMHt0eF84Y3RQZVNKezRGczJXNSQ4JEcp
N0h2MVklayZ8ezZsQHZ+eV4kZ1MtZ0s+QVdlLWZMWmlzI2MKaGE8QV9sKGZfY0okVCFEKkhEc1VC
MTFRQ0xkSUNJVi1UQCFoZSpyTXlze0hAfQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NwaW5uZXJBY3RpdmVTZWxlY3RlZC5naWYgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zcGlubmVyQWN0aXZlU2VsZWN0
ZWQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmZiMThiZmQ5ZGFlNTU4MWQ0
Njg2YjVhOWEwYzE2OGIzN2NkODZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMy
MDgKemNtYyhpWDs0I0g5PnBKZEZFN2hgSXtJRikxQSNVbTV1dDRlRG0xR0tBcHs3PkF8TUVlI0hi
KUQkfDRYMSFWKGdZCnpISDZLOGwwYWdKd3VyY1pUZUZCREhaLTxeVGs4UGJabihFP2tLTjtwMTVR
b1ZSMUZgZFlOfnFmJDZMNFZ0PjV7ZAp6YkUrPVMkSUg8dm1JKkx7dyphN1N8TClfKms3cylCakVw
X0phT0g8OS0lVT14X35wVG1GV1dBUkFNTCErKXFuNXAKekZZaUJtXyM1IUFXJWR6UyN8Pkd9YVMh
Q0t1d2pEK0d5NyhMSHw4WDVqWk43cVdUd1RaIzQlJWMjSFF+fGoxfTYlCnpAN3xVT25FZUooczU3
VVEmKXpXbUM7JlpQRno2RT50Qz0ydEVafEVsOG9mfSU9M3MpbUJJTSs5bDRpeUZEUW1YOQp6dD9r
dWE+T0UkbnMtQUR6TXVZX303WDU2Rkw0eXMhJEoqP0pIKW9tcStKJVYqUGA9cXByeDUjZFFQJi08
Ym5+UTUKem58b2ZLSXdfPSkoJGFadTVmRjdkNGEhZ1I3OElLOWdXY1dhWSlWKkVMeksqZ0xMaD1J
bnVmeko4b2tuNlNGQXBJCnp0Zyp3aWooejVJM2FpcFB4IyZQcmdzWFJzTylsUEZiaGRfYU5pTyZY
LSlKbHQyO2dwYWhVIyo3NXojaT9aZzxgUAp6OTF6cnlUPSlvPmp1UTA2KipIQ1NPV3l1Mj1nXmp0
d19CJTd2RD87SWBGUDxyOzQ5QT1XJlY/V2RYX3orV3FTQlgKemdxSjw3KFd+TzdJdkRPI2diMylv
YkgwLUUtT3JFdD1eS1RVIzs9ITNCNmcpU298R3kyUCh6M3JoMDx0aT54P2sqCnpiZFRYZENLKTti
KzBqMk40YkU/dTxLN3JgbTRSSypzZUFqd1U/VWJtMW5yfGlJWkpsMXJQTU9vJkp5MUNPbTtSewp6
PGVLWUJEVHFgQE81LVppSDdaXiFNOXBZYnc7cE1lSGxMfTlKakFYJiRHRV5kUm1zcTQwfURrQipn
KUxYT1JDRnQKejM4RyNzLW5qTkVJaXN4VWBjVHx7KE84X0VjZlZqTnRZNiloYHhKUTVeKC1uNWU7
bkNYXzZpdGlrcmxzTlRLej8zCnoofXFKfG9wcWNyOFo7eCFoNXZFfS1eeStWfEZJcDxVS2xNfFI7
PnlpSUg/RihRS0ghNFNDSDl2ITxDNmdqQG5RNwp6KD1KVT0qYHIyUTUrZj9wdVg5bjA1MjVoJkYz
QilnSD9XeUAzTEBeb0dAKD1eN3V2THEjdjxvIVk5fGk8V0otV2oKelE1VCNiNSlyYzQxPnA8fHdQ
LXlYKz9yO1owVlRNUzhkI0xXMG5OPXRSZ19BdHM3MFNDfE41QUlmMitSYk90WUhSCnpXcGVPNT9W
P3YoZTJIREpmLU5mJk9TUlc3TTRWRk0ybTJmXnJ4JC1DRlFKR0lVdEw+LTcyUl5aZS14TWs0aTVB
QAp6YDApd1FjOFQlYUB5KzgxKlMzO3I/NWMrQl8qUXgoTipaV3JhcihUKk94YG5aO2hZWWJiJD1e
ZUp3M2VMaCNSX34KenY0JU87NmZCS1pnbV41dCg9czJReXRIU3Y8KGNaMXQ+a3dXdlUrbkZOUTtz
IztvNU53YzhmMlUoZWtmbS14PnBhCnpqZ35MXlZZeiMzSENiPW03QEQ/ZW00T2N7QGNza3h7OFNg
cChhTSNDT207M0RaeDxycjV4MXdBV01ye0c4T3QpYgp6cCVGKSRSMHhxJENNamBLPX4zO0cjLW5K
bj1FJXhKWEx2UU5GMiRhNjd1aX5CSj5LQ1BvRzd1ITJNZ0lnbSRrYngKejVAYitjYFk9dW9rO1A7
VUUtTUVsdz5De3BXJCt1emwyMnBMOD1rST9rSX1LcCMkTjlKLVIleEdiJDRqKj9Od1djCnp6eDN+
SW5jTXhKIyY0fmc5PTVkTllKfTAlNip5aG43Wl4tJkNvNyFJelclRXlOdUYyTEFWe200JDhyI3he
SURiKAp6RWg1ZE9eN3A+JnBMY3UzZU8mPkF1XjF4PTNNfTJjaGhAQFJYelNxPjdffXZJLXFnR2BB
KV9nVDRZcXE9NV5yZmgKemlZR0JQI3Z+Y2FGeH1+Qz4wZWltQk1wc3ZEYTkjVT5LWmtPTj9vci0x
V29EezJpclp0c3RTSilNVihENlBhQWkyCnpBPn40cWo3NU9FUTgtN3ZpansxSWJmMiRHJjQ9PjJE
YH1sKkdZfUNmSGFZO0wrXnU9XnNQYyt1dkJlfGJjPmZvIQp6NkE9P0cja1d1Mzt5UiZnNipHWDRt
bEZRNz50NCQqN0pBSHxkO0QpXzNtfnw0clUxLStTPEo/bzNZdHBHNGNlJSQKeklGNWFmejQ4O3Zp
fnNVdiNCblk0VTBoeUcham1BP2VzS1kyS2JlWU1MUlVxK19vM3cqNyM/alJLPG5sU0hYemJjCnph
Y1pVMVVQKm5+bGElKT48cnBoTiExISRTQ0tlJmxIZmYqZlBBNXgwY0ArLVYpUko1bDdmUExLNTV2
bGFzd1RLegp6KHlZKXNmbnJ2djJAeWZTMU15QkI5ZElNMlZ7KnUoRWAoJVc9d1MrPzl1VkFoK0F8
cTFyOyQoO3JoeX15IWw3K2gKejdKLXlvWHJ8d1RIRyNrb2lZU3g7c3tyS0lYZ0J4OVRqLSUmOFRR
UEEtdVktfnBAOSR9Xz5MfkkhWCRzJTZTbENvCnoraFdjcGM9bTVQTk1AfFNHKmt1bVpkX01uOWNY
UUVia2IkYUF+NGZodWBhTHNNSEZ8bTslNzUqaiRMVExpdTwwRgp6YGp7aktwSS0lM1JtO1BobSVW
RWJJI043cFRfYDd5bk9sPGU0SUEmPk99UXUrbjI3bUhJRkBgXzVlfUE9NjRTRVEKeiRWd0dwckpQ
PzRtZEFANmlrcUNsXmdLUVUhXjlrU2ohczg5eWZuKXhoamJoIXJIRzxUaUFXVDVNeUwwKnJATiRz
CnoyLTFaVWI/cmc5IWUhXzxLKUhzcl5FWTdRQ15tJF4jcl9APklEOEcxYEo4JStMM2ReVFpmYEtz
d0g4Sil7KGg/Uwp6cU44VzVLfFdGQ09XVkJHanxhYHdncz1WeGV4OFV2MTF1fGQlbn12Sk9CTEQw
Tj4rRlFwOCRlUnJ1b2lsVGBvSlQKemcrKEZpSztrU3AxYmRMJVRYeGQ3cHJBMWIhejRlb0FTZjNg
KEU7US1LPFM0b1dXKjhGPXNKUUNgdjsxVWt6VXxGCnpQVWBSQWdDaF5IQ3M9Mns+P2lkMzxMe3NM
cjw7dHglTGJLITY5P3lxOD19an1nSE9sdl9TPjR6UyV0NnZQWn4mXgp6JClvfnorbk1aeG9HZHk2
TGJUZSMpRj5Rb0wqV2h2MGdUSE1YdFc1P3YpMzJgIU1eQ2xaYllwUENuMU9xcDdGcFMKem0+WHR3
MTJHemhHM3dvN197UWlJUDhAWE5mSCFgYG9fUmp2S1MzJmhjaTQqeWU2MipDVDFxKks0T3BBNyol
aitRCnoyWnZKVD8hLVNOMnMxXz9CNHxacms7dEF9UyZMUkZPM1VrdDR8NjJXNm1WN3UxUjtKQjBA
bXdpZyY9aHhxX1lnfQp6ajFIfU8qYTBCLTglTlR9aWBeaS1yVzF4Vzs0TlQ3YGNrVyN1K2dwV2VW
aztabzV6NjN3VFQ/IU8lZ3NHdldFWlEKeiVHMkFwQEUrcTg/ZFJ6Q0pzd31GeGBEaFYyUXEjMXNP
T3dQYz1BNylmUSgpZDgtNk4rMSNJJWxNTVFtdkI1dGVgCnomc1dCRipZMDQzVm5pZzk8Qzk+ck9U
Yj91LU5MVndWYDR7Mkwxd0pIK09kQU92WUs5M1Uhe0BlZztoQXFZPjY8dQp6KlYjWHBLXyNgZGFa
PChFen1aZXhrdWYpfUJqST0oJHBONSU3bEJ6N1YlcG1DTENfKTQpaSN1VDJhTkZjbDIxQ1YKeiFU
ZnQhKUpmajhaPVo0fDZXIyoqYmN7UTFSQCs0WD9tJW1PWjY+dnZ7fX59bl9UTUJSNiNadWxRdV5v
JC18aWpuCnoqUjRxQUpDc3d+bThrSDUmalJ0RnAlcjM4VUVwYHlgQHt3bjR8U2pyaENidG0pM3NS
c15RTHlXamV9WnZMZFZEXgp6ekBuPFNKSDBlZ1lBUHdvKWAxeXI1OWo7MSMxeHZPQWpFKHJUdU5x
dVFZbXVeQmY7d0NoQ0AheHg+YiNiPSNaK2wKenA8UCspNT5+XnByR2xXaSVZbmB5cFlOOzd3IVZt
Ml83UkpYe1N5fj1WJn4yaSNrKXJhMWRHRmFMMSEjR2BpbjVACno7YSFGZ0F0UWR3TThOZVZLSmNi
di1DNyU5VDZ0YWc4PDBKK2NVMWUrVm0jTGJeSGheTyN0JEg1YDxWb3wlPkR5RApHdCR6VTlJbDYl
VwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3NwaW5uZXJJbmFjdGl2ZS5naWYgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9zcGlubmVySW5hY3RpdmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzMDljY2EwYzM1MDM2NTlmYTM1YTQzNDNiYTkzZGE3ZGZmNDdkZjZlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpsaXRlcmFsIDMyMDgKemNtYyhpY35EYz05PipgYU9PfGB9O2wwNUkweVE4SnAl
I0opV21PQEIwQVV2cDFWbXl+YUY8ME8yIXRnaEFackx+CnpLdUk3bTFTPXdfcHclS3NLYGpvfS05
Q0xsVFNlVUsqa303WD8+KEAhIX1RLWIofDcobmJNRDt2ZTlyZ3hvakg3ZQp6VWwtUno3UWgxRDBL
b00wR3luai15fWc7NG5MM0BXdGdPdEAoSj9xVWN6QWV0ZTA7cEt2eTtoV2YqPzQxPUNAX30Keloh
PlBuKjJKYH1CMzRGblNgc1U5TWBHciN5QD98RzxVUU49MCt2NVIwQiFjNTwkdXMlVWNgRT9TMTUw
I0pxSStKCnotQzhtQ3tvR0ZoPSZ8dnJleyFPQlg2JigwQWhtQXMjWjIxNU5uWGxgbFBrI0RtRnVW
TUk4RmBAbXY/TFNTJkN+ZQp6ZSQ2b0A4TXw4I2JHU3kkXzlUQmglVX1KdCVlfmV1K0dfK0FUQ1FA
OWE1QGB6LU5qYkZLLVJrWDspfnZzQjA0IUUKemxrWFY9KFlEaX0hVkV1UXZCZCR6JVR2TGpNI1ZN
OSQ9I19XNztNKXpBOTI/alJEU3dXUDNOKGU5KllMZj1+SFIhCnpZUU5OeUxuJCNIZXRHdSEjQmot
KElfZD81QEpuSyZuUSRiOHg3YGhEJG03U3YrWWZsJl94ZVhqU2FXTGVCVlo7QAp6SUZ3fVhgcGgk
UmBgZigzVGd1KlNvd0M2MStUb1NBaT87IXZgT0lvfnVmdTNRYF4rNEJPIzk1KChITEpSZFcmej4K
ek8tKHA1cT5LPFVfLTZ5OD1MVmh+M3BCS2RDZTI8Z2xnOH1NV0tMSG9oY0ZYfTZeR0kzPmwjZFAk
Oz9IUUNLZCVjCnowWFpeJFReMyYwdHN3a3grRy09bXUtPFBFTWpAdGJre0NLYmh3XyYwO0sqbmRe
aiY1QT9iKTFNdSo0KFpnSVd9Owp6aUlwVylYS0t+XzR2M2MzcTNKbDxDMktvZjdraWpmZjBwP0x6
cWd2SCpNJH5+b0FIc1AlTk52XzhnX35ZQG5wMDUKeiVhcDgmKjZVWjI0dktGakRma2JIcmxOKjVV
SE1PZD1seElQbDhERSNUQF4yWmsjPjNNK2h3KCVSSlUkOHtNaXxvCnozRFokYSgobX1CYFM+cXBA
b2dQdkBnRjwjb2thMXs8K2JZWWsoMGBabTFXOHVma29MdkgjfUhHPzZ9aUo1ZEZkZwp6aldjZClE
PmJGRDB7YSVYYDsmQGE/VXMpNV5kcDw7eSU0KykqR0FJTmR9en0pSS02M2tzVCZecy1oemFyVzl8
ZT0KekVHRmV9aWxVaVJURkg3MnhIWkVmMyk8O0haZX4tRGd0V0RsKUtJSCs7Jnd4fTtgM3ZNZ0Je
elUoYF8xZHpqQE8rCnpgZ3p+MzxUQSVXQn1aTiZrP0YyfTUhMCg4bnVjNjFXdE0pYUQ1SHZ4VHdZ
ZyNtKSFBcSY8UldkTyhQY3tlbTR6dAp6VTBePFFkSHAhWHFwTkhOenBTT1d5cGJKXmxaQmRDcEV7
P3RSOXN4Sj10QmEpYDNtT0otQCh3I2pCUGpOTUg7dSUKenYyTH03JU16NmwtcDJSWjdaUV5mX059
b3dVRTk4dV40NDEzWGU5XmZhazhhNk4zUEt4JCl5VDw7cE47cnd9MWZDCno2XnNBQSFZaT9zVmxa
b28lLUZRciRlJGhoOzJ+dlVJdlRjayloYmRwQ20lXzZqRjlyLT9IVDQtSWMha1F3aDM9Owp6QStU
MDgzUjVlald1OXNTcmFSaXdpTTQ1dXR+enwwVSZyb08/bUsmKXFvWHd2SnB0aStyQjF8WEZ+fFJz
Wmc8dkIKeklXJnx4TW89UTsyfDEoN0QqQEA5TztifUBmfGlRWlF+MHl5Q3VAPXVeejRkVEZaVFQ2
Y0BMa3VlYFd2TyltejZ0Cno0SHw2IUJtS35QX1Y/RnNyPUo8S3ZFXncrQHdIVjFMcEt4fVBXN1RG
LTdHKTxtcERhSFB9M35UczlDXnZtUlJ4SQp6bXk0YHB0ej9SSzBvQC1EXyRHWmBnQEIxVEdZa3FY
LUBLMSlLM01HRj9IZH1tQzMzO2tnMCZJalhgfkdmYHclakoKelN4QX0+b1MweXEzVDBYQl4wNWhP
WGU3fCltaV5TeXZASCFTVDIhclIpUzwjdyZCfl4zQUYhcT4yKmZacWl8U0ttCnp7cnphQU5HKWZS
a08yKEkpMndFditNKXlKcz8hVWhMZiRIUkFKenVNTGBxQiMwY3JRXjl6Q2w1JUJSJSZROXlGZwp6
YkJ+RmIzSFE+d0NrUlB7JGZKZjhMTWxqJHs/VEs8JV9vYno3eWZibUBPJVl0PF9hTFpXM35YUzBA
JHBVeCs9T18KeiN8enROczUqeytnVEQrRURONnRPWTBQbVE/UUsjKS1PbE1TXis4RHk/bGhUPlUl
KnoheXp7M1E4a3V5cWxBeiFQCnohVlJkYlQje1piYjVoWT5UdWRxV2lGJUJrQzFpZklXKXF2VipD
Rk1BI1YlS3lLdCZDSylZWCZTbWxWcmY+eUlGKwp6PTkqVGRRUUQ/N3hQbFVQeGpCclk7R3R5S28q
dHdIKlIhfTNhejlHOEQpelBqRj5lVXpLam84M1JNTj45aFMwJWwKem8xJnBASW82QG5KNkx3JCE/
bUhuNiUxOVhMUkpJbG8kJiRRaldeSF8zUlRvb1lld0lyRH5wVW8wNFpSNnNWeSUzCnorckZxcGc5
RndkbmdFJmE7cHNkTiglQzRtT3d7M244LXEqaUxoWHo/Qyo1eVpoaTJPO2c5YD9wJE1NRmllemNf
SQp6SVl4JThlQmVXRU9ofEZ8fDRCJHd4QnFiU2wzI3QzMylRPmNvcUY8Xmw/fXp2eXokJW5ZM0NJ
fWJCU09uKkczPk8KekE7N1k3STNzN1J5aiUlWkQrSU0qV3dPfTB3QUJzRkVEJTVsMF9TO2deP0xH
PVdqVV5TPGxfaUFPJm4oZHFqQXRfCnp5fWAkYztocVZpWGc+ayN5VGtIRCVkeSk0Xih4dmUqbnI+
MEBHQkAlOHN0NGVBWGg9VGZBMTM8eC1TcCVlMnRUQAp6d2xoPFNjVDtgbVUzP09hM1NvNXNlZT0z
TktKPEdObElRY2t7NDRuUlYjWH02eXdXOHtUJXNzZj05YTQxKE0xOWgKejIpYkdueEBxK0pvU2Ik
eDcxbzNCOTY1d3xRQFkhQ0Z9N2YhOEhnYXtLI2VkZ0FIbEVAXmcyS3RNeWxsU0hPJXhuCnppbz9T
ckNGciQ1LX5tQSU/aCUwMzleJXRALT8wMzk/QWhhUW8oeU4yVXFoQ1Vzek44NDdEaygzRD00RSta
V2tQTQp6dT0tR2lsPSUpYHtodTYyLTYtVERGTmZMTDJlfjs2Q1dQdkEjcCFWYih1RTtDT2NJIXNC
aD4wcCpre2xUMD5QcDkKekM3IVRPUG1vYm1rSVpJWjZ3SHNaeUA4dEVNc1Y4d1FzbDw/NmFrT0Fh
PXt6bDtaSj1ZMzh2OTE7NFN8QTN4UTZtCnpOaVYwSyFBST1PSWg/QlhBQT91WXteJiZOZDxsUWFB
an0yPE16Tn51NjBzQWx4Km5AaG1SQn5FOV5wI2VzTmtGawp6Nm91YzVLbiNYQzUjJTB9ZTFeJUpf
MFZCSm9CXyhQU3VDQmgjMWtAVGB3JkQ2LVReamJGMDtMZm5CTXV1LSZJYiYKemM/XzZieDBlZ3dC
b2l8Y1lYdUwjZFVCVCNlYW4xRnwxdGpFTWVvbmwxMypFbUdsZW5VPkdOUl9YIUg0fXxFQ2E4Cnp1
JipSMD9+QX5nTHNfKkxIdU5aeVp1SnBgcz5GZiU5anIoa016Z3Y4SkkhfHMxeHNhSDFsMDskO3pC
TFRQRV4jbwp6SDExSz1HOCE2ZHc2Y1B6RG1TP1VqM0Uybmc3VFIoYSN0NU9VNktvJj1fOGt6QHNm
SVc5YDdQTTE2MSVsRmxRbTUKenRHZl5jb2tLa3dBfVJPNDcoWlhkcjBaSGRYcGx7dDxYYD56MzNx
Ym04e21NUmRHR1phYH1rais9XmR7dVd3cn1ICnpCMU9xUk9hTTlgeyFiR1NpVCYxcylGRm00VXxg
Myk7RllOWT1Tb18pM0tKZGpIPHBaPSpyS0wxPEd7T3FDcE1gMAp6bUB9MWg8cyg1Zkx4JmVXWXdj
RnBKOE1LSV52cWxtQkNiaWdIJUtSXnI7fTQwb0xTTE1OVEkpYkxhfSlvM1dxR14KelFMe3ItRCFG
U0U4UFQqZ0E5aWlpdVdtV2FmWWNxJC1LdSlgczUtNiM0Rm8wcSZJfjV5Kyl6V1YtRmUoKjJyZX1Y
CnorUGtDPUtZST9BPzcyMX5Ub09HOXk1WUk7cEc0Vj4/S2IlVkc4SDZEZ2pgUCUwSXokMypWekx6
c19VWWtmIXU1UgpkJDkzTj9BQGE+fTl9VV8yXzkyd3dHJj0kQWJNSnVuPiVZVmV0SmVTawoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3NwaW5u
ZXJJbmFjdGl2ZVNlbGVjdGVkLmdpZiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3NwaW5uZXJJbmFjdGl2ZVNlbGVjdGVkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDBiYzI3NDk5ZjhlZGZiNjllZTljYmU4ZjYwODhkMmNlZmY5YmJmZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMjA4CnpjbWMoaVg7NCNIOT5wSmRGRTdoYEl7
SUYpMUEjVW01dXQ0ZTNOKSg8MFJqWU01ZkJzP1ZwSUBVN0oob1RtWEhLbAp6TClaKWAyXyVOTkFj
NnxnRHpZPyk0RiZDaitNQCVzdCU4YyQ3Q207NEg0WnA2Ulp9JjVuNXdEanhnVCVjeTA/RGsKemY2
bDQ4VHQ2UXQ9TktseTFsfEtjVFUqPHdQb0h7d2Qma0RjMV9sTzNNQE1JN1d9WkhNZGdJMjgmZCQj
TXt7R3E3CnoqXmVKVDB7PmNPcE9CNS1WVmdKfSFRTnxaKnIzN096Uy1aNklTSVJDbDZESzJEUkRg
JCUkUipLc3J3SmIyeUVnRwp6P2x9YVF7UlVCfWJFajYlLSFUNnUwNmt3YTsxP0k4bkkzeDE9WlAp
cWR7RCFOUD1iZGQ/QlomWVgzZUhhWXFvPX0Kej9YM2dxISlDKHJvOFBtSTJ1b1pvYHEmKFVTe3M2
JndiQDVzJk1KPSRPQWlAOXhuXnNmIXlLK2drMitjRDdEPylOCnota2ZRPkQ0PnkyUW5+ST81T3Bz
TiUxIWEqPWJJamRKPjJETk48PyZSd0E3VkNBY0JwVytFY0M/ejB5fSNwZ3djOQp6dUdPQGZlZmQl
bnRJUmkxYzAzYDwle1IqPzh9RX17c2lhKCZeS2FsPWpRUmFSLWd7bDM+TVU7NUhrJlRATTs/QygK
ejNhTCVaZStFb1BeTHRgI29MeypvP3chcCN4dlRLfj9uelZaZmkrZmdLWXRKS2pufHdxfEgoYyom
bVBxe0ojOyRDCnokQU1Qb1EraWgmM2lsfCZfO2xgN2V7cEJtdEZyPDZJPkNoVCttKyZ8MUY0SmAj
ZmwhKDVNb0I3R30/eDBCVE9gWAp6KTk/aDczfClaaT1wUj54PUM7VWpVeU4jUlU+RE4lPEZOP1ho
KCE9V01gPSpqaWhYUGV3VjFaUWtoP2RYb2U5ZF4KenZmVV9vVGgmYDd2MU8/bTZ9Smhaclp1VVhQ
QiUqJEU+fl9uJCojSn1fP0Z2TiM/V2JsXk0kb29mOSRSNnNeMDImCnpWSyl8TVR5PXxfUiRNPGk3
PCl7M0ZJTFdkb0hyVEtyKjYpazAkejgjakU9PmhaKjRBcTFOMWphM3VhZVZke3RKegp6YFEkZk9v
V19qPyVtQHFOJiY9VWwrMEVmVXg4cGhwd3V4NiZzNnpXTUQjRiRqRCl0NUJyVDUlJVc4enkhOUw1
N18KeipUPD5zNWhFK0g1dFNMeHpPMiFZa3BLMzhjKnRBVnptd0ptNWY1WFVhNE0xd1pRbnk8ayNu
fVU1Q0ApYDY1d1JpCno2KDxPVmdiYTNHQiFmYmdaRE5ERlEldXZLY3NFaWxpKmhRY3ArUXpvRGJv
cllfMzgzK1haNlJMXm9eR3IpVHxEWgp6NlA+aGNLRng4M2NISWlMUjM/JldaK3shcnJvPlA1SVE2
QyQrPmpTaWdye3o4a1lUYmh4NXNDSU4jSTJQJV9sIy0KejBHaDhlVU9CeWM5Xzd8dElFfiVYa2Ul
TDNQRGV8RTRKfEhwWVJ1I303Y0VgVDByVCF9cU59SGVfOE5KSUZSODAhCnotbTRGbCMzO2YlbXBw
Ny1qODl4WXl3MzcrTWROUHJ0Y0E0M1RuZl5uQmBkdGBJMGdxcnl+VldMVGJYMGAwRHEmXgp6JWxe
RkRCY182Xkg/OWokKj19IygjfG5QQGd1Rk56MzBieXdFZ193cTRhZURxaU1oblJESkUkZEVLdGdf
NDZVdWgKeihSdmpecSFmel8tQm8mMmQlRXJuK01xZVRfVCopNUM5NlltYDA2I2JtUmZfaWBpQ0E4
Skt6S1BZYDxSWmZ3WHVqCnopUlFgZGxmJEd0RzZxKGEwT0dPamxhcHpAeTVodTMqc0kjOWIjWGcl
dG0xbiEyWSt7ZWgpcTVrSm8zUFBfdDRqWQp6LUhpKm98TVUyKmI8O3paUl5BJUh3dSh9bXVJJmo5
ckZmN1BFQHRRY0NRT2okbC1LZjgkYGBSNU1kc1liUlJXOHgKejxgVmVffENUU2lkfTdhKSFlOSk+
MiFWbyZiez1NI2JtIVo4YFVGU3MzU1R0Mlhub2o3NUBFQ0xWVkp+UzhJPEhqCnpqTS10NTImSXxz
X3AlSkV1RUNNb3grOWM9cStRaUA4YnFiOChJV2hNXl9ta2NVU040P0FjJiRhcmUmOW1KMzVkTwp6
ZmxBNkV6K0VWdXJNNzEhU3xNR1hXeSFmdnVKPkE2Sks2dzVnXlBAaTE0KWw2cEZKITQmYTElVW5T
V2cxWXEjO0oKemFvMihlN2pSTHZ6XiRBYU05NHtze0tmNXY8eVQ4UjdjVl5pX3d4bDErQjg9SD1L
ZF5aVTFjZHZyUyVUa3FBeHY8Cnp7ZVptKjVYY011YGdQUUtFcDt8RnIheExVaTBZVXE0fEFBRSM7
JjlHUTZLemh4ZHcpMz5JdS1zTWZ9WihxKTMhcAp6Q1VIPHdYS3A2c3s3Tn4/TzUtIVdTaHQtO0lB
b2h9KU81ZUlXcWBhS2hieVp7dUZMWiEmUSsmaVdvPnlxVHFBQiEKej0kJTBrdEhefGlBbUgmaD1o
anhaNCUwQz9XS3N1MEdTQnhrMXlONTM/enJUWWg/bWV2QzxAY1M7cTgmb28oemolCnokezNtK0BN
THszRm8rQHdXc3A2OWpFIWA4LSsyJUhFTFRSbnc0az4/OChlQjIwMHttZ0UzN2NfcEFKVlg/ZTRO
egp6dW5BdU5uLTFiUkQ9LWFKcTF7X0glQitLfTRiRHVzLW0/ZiF3Xm5TLT4zU1hRSnlRQ004OUI9
P0paUX5oRkd8Z2gKejFWX0pMYEJZV28mdiQhJHQ0PXNrSmdaek83dGZrb2xKJkopZXRlWDRQMGx3
RkBtNnB3Y35UaDs3OFZneEdTKjlyCno2a3dVMFJ7QHM5Ml58YVNVQkp7Rjl0NlkwRUR3JU9NPkA0
SyEjUnN8OXdzRlRxZkxvT0c7fj5+X2l+YFNyaCo5NAp6ZmZJRXRBPSFkZT16Vn40OClATmYjX3By
b0FPYVR6ZFhENHBaQlhqaEhpYmN0cT1EfTVGdypUdE1rNC1VdmkrS3EKelNCeWF9UVJQcUR4Z21m
SEUhMmM+e3M/fXFrVWpAMkVwZl5hJUgmMGclbU83VkdMSl85TDEpdWs3cXU+JW96Y2ptCno1T3BB
Tm8qYVRiJHR7aWg+QU8oUzc9JlJgZlNNblk0V25wM0c3Mz1vOzhIMVo3JlJKMkZrKVo3Mz5vZVE5
Xjw2Rwp6UnZ0TH4xYmN6Q19lcjBrdWIlJWYpdDcyQTQ2aG5jMjlLWHU5QkdLSUNKIypBJnBCcG16
Ri14O3tYYzBTYnxJN1UKekpaJEgoNHt8Yy0zPCVMYF5PS2AteEVZMDg4M1pza2dSanZkTTZZZ1Iy
bjJoIUVxNW5zYnZPd0BibnUpOTJFZ25ICnp0Mj5DJWVIZiFZRHVDfmRPeWF9PVhBWEdoQyt3eHlH
dXtpTjZxdjxjZjZMUX4peVlNYURfRm1eMzdjS0k9fVR9aAp6WTJpLSVMeE0xODFSe2MjbWRTKDsp
VXFuSFR2MWR+VTJ1dmNjQTxkdExMZG43dms8VWVLUTlFUzYoTDw9YytjdDMKenE9eXs9YS1aPjU4
aE49cHF9UX49dW0mNmhIbTl6JXgoZ2VQe292OztDRVl5Pk9sJnlCQT5KazcoXyFtKlByalJhCnpm
RDMrUHlyS1FGP1padmFaJlkxQ1BRND9VSzYxdXUhNjNaJnBHLWhUellgZ0xFYGxYJl40ZXVZZVhB
biZVT1Mkdgp6ak9uVnsjfCsxYU5JSihhLXNBd0V3P2VYdVMwPXxxUEwjYSM3PHErTCV8VEBheX1H
N2NCZ3UmPGImPVc8VmZjdGsKelVeYXRGWUhzRXZpIXk7TD9JZkE4Y1dpNj9gRFQoTUttbzQtXkQ2
OVVacGo1ZiQ2ejx4YVBtVmklR1hDZTtrK0lUCno+fUY5WHhWT0tiOyFNUTkyYWY2KDU4dGhgKzRq
MzV0Pzh8cSNBQCp1Z2IzKz5sWW5zYXBEanF+cCkzNW1fST1wNgp6Q1h3ZUBMVHlvXmc1IVFtTDw1
RmFoIUomM3p5c2U0bl5qIVlrd09eIWYpYDJHViE1eUNUalZ5NVlRWTVeQmE7OU4KeiVWUXNRKEA0
cTVxeSQ/Pld+MmswPip1OzcteXtoazJDZVg+cXo1VUxRcylRfnRadH0xPkQte1J1UkJTSFI4NiVs
CnokfH4yME57JWZSMVZ0VD1iT3lQenIjalI2OGZNdTtFSERse3c3ZWE9K0RRfjA5UFp+WWtMKDZy
dSpfez1NT1k2Vgp6RiNIKVo7X1ZtQDhjcEI8P14tdSp1bVByKHFrYFhuJTs2Jj0rTmFDJFkhbDIm
UDRje2Q5M2VaKkNCU3c1QU1rbm8KRTFNOWxGU3BXYjQKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zcGxpdHZpZXdEaW1wbGUucG5nIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3BsaXR2aWV3RGltcGxlLnBu
ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiODhiNTA5ODJhY2QwNTk0ZTE5MzMy
NjQ5Y2Q2Y2Q3MTBiNWViMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxODkKemNt
ZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5ZKFVKIyEyfjJGYSgxS3VEVkI2Y1VxPVJwWWQ1YT1NO0hQ
NWt8bk1ZCnpDQmdZPUNGT31sc1NKKU9gQU1rP3AxRnpYc1g/aVVEVjJwTVEqRDVYezVAUzlMcFkq
UyZuZmFYQj05c315IVczYwp6Oyl7KzxsZ31GbGk4RSk7PXVaPTFJaCE7OFNKdCNkQGdGUjRqcWwz
Nz1OZWRTeSFMMm92NEtUa1hqJk9CbzRTIykKa1FzMlBgTjBiWT1VI3p6ODNaRmM4KTR9NWtLJSpI
dlVIeDN2SVZDZyEwMm1FRzdYU2JOCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvc3BsaXR2aWV3RGl2aWRlckJhY2tncm91bmQucG5nIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3BsaXR2aWV3RGl2aWRlckJh
Y2tncm91bmQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTQ4YjA2M2NjNmJi
MDQ3YzliODU5ZjA0YmY3OGVhYmY4YjcwNWY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDE0Nwp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXmo2bHJBITJ+M0taQ0VTfHEqJjQmZUh8
R1h1SENyZUE3S1JLT1AwN3MKemxtekZlbTZSdElyN30zQzxSXyZuYzsrVWlydnt9YXJjQFQ1T3Rr
P2pRdVRDazRCP1BYakBWVkFkM2U1a3tmdktxCnNlO0B6eXtlOFRlITArJHhAMUt9KV5VTjZAMjMw
OTNoYTN+O0J8ckBmcDAwaV8+em9wcjBHYk9oU154azUKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zdGF0dXNiYXJCdXR0b25HbHlwaHMucG5n
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3RhdHVzYmFyQnV0
dG9uR2x5cGhzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlYjdmNmJjODgz
YzUwYTEyNzE1NTY1OWZlOGY1MTU3YWU4NWI3Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0
ZXJhbCA2NjAwCnpjbWFpMlhFQHdsKUJtcnN0bG1yNSs8RlUzaH5CTjxZYj5HJVh9YWlTaTVle2tS
d3A4UTdiVihpdEEtJFlDdENEJgp6VGhVKDZtLW9aLWV0NTRsYkl4NHpXdihnTCV4X00jek9FVzYo
RX1tPzA3eH58bD8/I15xO01+KjZOMnlXJGE7UUgKejAzZ3pQMzVWPEp6aXs8KF4/YyMjIy1hZy12
JCVQPEk9KzE0MDA2I28qK3gjck1tdXp9N2ZXWUtUMmFWUFRDUnEpCnpnZS08aUYtViQzRTxSUVdn
PVEzTXt3JUZRQyM4eEM5I2VsXzZtRVB4R00zaFdwWDNBNDQ4ZD5LJisrZElxQ05+Pgp6dHAqZ2xv
QCV8PXtCaXFqVDVoWlNHYG50OzA4TDFlc3hEJDZpWDxzZmRQdXFRek9NKGZgV3ZQWUxkNCspUCFR
SFYKelhaNV5jMkxhZSU4SlMwSFhvN1lDPFUydTMyJXZRYChMJjZUY2pTTVIod344bFZJWl91cUok
UDlrX0olbGs1fkUlCnpENSEjdiooZmR9QVAqMCk4TTMhcTJsTkYxOH00X1Q2OTYoQm47cmxIRUl6
VClnN09qcDdIV3FtVyNFTjBQKEokZgp6Zzk/QlUwJSNueWRMKTR2MFlGSEApS01MJVpVb1JINnZW
WHZBcWdPNDVFYWV+LX58OVN7cHs/JUt2KzZKcWszWDAKemJOcn4xVnZGeFNRdDdvYSVeWj57QXJe
IUo/Z1haJHUhbFMmOHVYODcjQjZiRkdaYks1ZSg4K0RBeTNGeFBLTjs/CnpGT2x9JSt0VkIwNXdn
bVc1d1o5TkdIWmM5OXBGMVFKRz1HVWpuT2k8YHk4ISQxJmBoRzMpVmVBTmBzTmt4MVR1PQp6QExw
SUU9ZUBtJWFqWWQqX3kqK2QlJGM2THtVPGdtYDUmOFNYRSVRVHAzJkA0dmFsVUE0WjN5ZXZQUFRV
eXR4ZFAKenh4UDRHWDx5P0E1dzs5YiFeNXQwNFdEVGpHTEklZiF0NTN7NlYkRjdpU01xVjZLcCpp
Y0ZoUHJuc295el9qdSl1CnoqaSsjYHdySGchLWRAaH15WFJ9bXs4ellnJWM0Tl9EPithPXFDbH53
Sj9fNisrIVAyZV54NmRnb1YyKWh7XkI5VAp6TVpTMnlJX2goR0QxVzF0I3xhPUVISW0hYHopRzB8
Vzt8RlktJHdgbCU2VER0KXJ3NEtvZWNiRkZtb3NWTE1RUkgKemphWmx4TV5CZCRnJVoob0Ioc01O
WitXTl5Qc0VSRUQ0JmhzRjlxbG13ODR2cldIJk5jbXFgPHV0USt9WFRmJkA5CnpwNEpjdW8/PF5D
d0pxeWg2dip4YWY8MnkpSzBPQEUrTnE5NTZ+bjxZNUpoOWFyajtuRntAQ3o/Rl5oPmheaERNSgp6
TT42dTY+aTB6SGVuMj8lSS0qdFdAdSFlbDFLRDNCLXs4JX47dCNAOUtOSjZhPyk1ayRmaTVyZXIk
X3cqKjt1anMKenQpRkV0JG1iSHw7Qyh7cVozWTY3bztOfTtPdChedjFWMUYlZXlFMTZvVExvJXAh
I1YhWmNGc0p7Yi1GMzkjeDE2Cno4WHxgMHFyX3RTUCpFTUJqbkpKQEZKQHVwY3RTWWA1cl5RMDhG
WD44Ql5QVmViQTZ9MD58d0FJZWpKSFY9VnpheQp6Tn12e2AyI0E5Qmg7dlh5IS1jdDxLakxXQWRA
JnhVOGRuezZGPVhIMkZVZnFPeyh3RHNWRDk8clNefipXezQ5XzkKeiErJlQwPyoxK0VvOVE+fWkz
TCUlb3IzIXB0a0R7ZTtvdkp4I3RuKiVDbVVifmwoMz5uTDVBVUNhbFNGN1hvOSY/CnpNU2c9fWx8
ZmBOXl4+PDVsMFYrbFg9b0t6ZGBfOG9AUGh1dSNtbE5+dWtWekxER3puaWV3dk9DP1drPzFaUjRL
Iwp6a2RRe3V6VkN+MjskaDVXQVlnRH1ea0p3JVhANnkkaCsqdEE3N35CRmlgcSZqUGpAdnpASE94
UyhrMmNQckQmI2IKenI3LWFjOGtkeFFFbk8tbEhhUnNKR0VPTTVHNzczeEg0IW1kRk08M0BFaSk8
Mio1NVReR0lBPUJFey1nOUR0MHhOCnp7fU9DPTZBZD0mKjYhQVdlPSozYnYwaVYqdW5ebGIqN0A/
WXo5dWI7Y3BEPHghJlVRUkhxZWB8MSQ2XiRpSUZXVwp6JChNd1NYb3tIRDhKPlB9bHFYbjZ4bnJ9
dWJSazxqTVFOd09BQ19uaWREblFFekNPYHplKGRuPGIhbG9eRHh5cmkKeiUlRHRkd0Bze2F6Yk59
X25AV3E+UlMyMTRwQzxQK1paKVRiNSZZfmVxZ2tXSEJCQ05YOWEqWEtOPzdVWkxaPHV7CnpXdUZl
MHE2MVY7eUE/Nz0rcUchUHVXam91YkNCU1RAczBEfXFIe0c4MWh8ZmIxM1hWTSFYVlF0PmgzQjc3
M2Babwp6SGheMXBFNUhrRlEqNl4jIXhFZHZXQ3x1Izw1YkNHVXQqckViRjRkS29HfUdsVUBsZkpF
dUI5KTJOe01zJjBsJUgKek5eNDdOX3glfERAJWhKOHhAZX5DPDd3Zm8lJnBBbiU7aVFLYjY8MSpo
VD9gTTJhVmRfPTNtVlk4ZF9iIyVfWXFXCno1aG11QWIqZEhGNmBXSG82KWk9U01he2EmeEA5PzJQ
VGtlVjRGZTQmamZ+WUJHdk44azJJcXojVFBIaHVyXmVwTwp6P3R8cEU8ZT18Q2FXfUZBcT4tfl5X
bChjeXV4R3Nvam5xQEFySHFsUjFOb3Jkdih6MHlDJlZibD0jMHBFMU45SloKeiYmekQxJW4zQ29k
WiVYM19vcT1ZKE9SS0h1cnhWWENLRzB7endOaUMqU1dqcHN7aTxUYzRsMj4qTTlNUSlxJlctCnol
WSg+Oyt+RnM9eWc2bmZvPEY8JDtWVDlrV0FlbmdETUdLOCVZKmdjZExkNVZ3JTcmajFydHB4cm1H
dFplTSZFRQp6NTkjSXBtR2o3NW1zXigrVWxMdzJ2bU8+bEh9KkZVPjI8czJTY2ZtZS0/ODY0ende
SHYxQiNIR0FTY31ENVhCRysKem9HWXc8QVp0Z3d5d3RxSXpxUGFiaW1gZGtpbk5MZXAldE1Vb2ZX
SnZgdTlGb3V3SERUTWlOSX1sNztJQlolX1JzCnp1LSZ3Yz0/KjYwNHYhMnNqZ1hJYmkkWGpZZHo+
Y2ZHcXdRdFR2cTw4b1R8Syg+R1c3bnZQd1d4bHV4YntfRFdfPgp6e1FIeWRAKSgkLSszK01IOD0+
KD1pJit4SlMxSVE1cmhXTih8MUAkZmR5Uk5LZkYzMi1afFVaaktoa3Y7VVBNO3sKenF2RHJKUm5V
Jm9tSDJkfE5Xb1czN3Q0Nzw/WlgqUTxrdG81YSQqeDQ2Qn48fmZqe0dXc0MlTiRye2tacm0pSSlt
CnokSSZaTiRpTEFYIyRFRVVSaHZ8TUY7Z21zRjJrRn1TeSkhOD9lWTdoI0U8U3VyS34jMTROaVpZ
SFhYZigke29VTQp6WitsJjA4VS1KdzVEZEpvYCZmPXxDUDM3bl5tV19Wb00pUGtwd2BMMylVbzQ3
XnFeI0ZTPGEmJGBAP21FXkI9e3QKejRzLUFKc2sqM0VsTnQmbXZgaHR7aHxSWTBTQ1h8ZD90YiRg
PiRMY2ZCQSRaRld0dSlUQEh0UUZtRj02UlJSKl9sCnpgUmx3NnZGYVFRP2ZlRk15LVJGRHY9SlYo
eUQrX1BzZlEzV1RtRU1JSHpKISFqeUMjM0NDeG0yOHR1Q29vKDEweAp6cmJ5U3BqYFczM14oQUZK
JkNmPzIjfnBWem1qclN3JFdsd3dIcSojbE5ONEJqTnRkNzJAMU9zeEdCMjMrZ0otX3cKemVGTUM/
cGhLcHEpdUN1JDxjR0FwQGZZSlc8RztwWTJqaCQxWV5TajxWK1R3RHReWXBSbzFDfDN5fHxHWlhy
REkkCnpuZG5TOVBDOHNeVC05QzNTNE5sYVV7a04wRWh9YEwtU18pJiQ4bTI2KnZUNUVufTFEMCQ3
UEtUNlEmO1JzKiZ+bQp6KHwoKE09cCNUWE1yc241ZztgXkZRfStBNGF7KmJ0Y3R8UVc9TiVoUnpE
aDloazJsbF9EKT5xJTwwTH5oKDx0TjAKeiFwYEVtLW11KSopU281KVlxan0qJGdgZnZuRTdkKjhW
fGdqK1g8YVdifitpMiV9JlY8M1dpLVMqdngtITItdmI4CnpTJDsrQ2RpYjVmWWpzQFpFQG4lKlJl
SSN2TnQ0JH0/ZmVGe1hfSU0ybTZXeWZBRm4/JHg1KlFGZUp4b244SXtlPwp6VU47fjN3fHh0Nnl4
M3ZONWclRFJZeDZzJXlQS05Layg2QypKTjArSD0pRXshcmR0ZzU7Sno2ZFlNSiVuS0IjRWIKellx
ZFU4KmpKb3xGR2Z6dlRpaDxwOTRAP2poNCNyaTlhflZsMEVmUkh5LWhxJUFjeH44cSRkblRrVmZx
ME5YU1ZfCnp1RX40Yz58N1ZZTjF1OyE8PFFATHo4JEtocnhPZ3VQVlA+UmpHQE56KEB4VG9KRGRY
eFp+bVpuOExRP29VNl9hTQp6MUhLfVV0PElpYT9SV1l0XyZeVH1tZFcqZzJlUTI1eHFFUzBiOGhz
cj1xaX5wSXIkQ2A3aj00VkZDczkxazEpWUAKelQ1OElgLUc1R0FUVCR9ODJJOGh9YmBMczxzc0Y8
dUFSfis2VVA8N2twYCR7dUspe0dFJjhzXzNwYkckR2U+SWQ5CnpqZVkwI3Y7Q0A+UmlKKEhiK2ZJ
VSZtYjRQN2piTjk8YiR8eTVUX3pjbER8P3hBNENjJUJDPUFENUhQMyZhOGVvNgp6THNnWV5ffChI
YjshJTdRe1laJFhnNXlFcyFMNl9vZSZJV05vTiFCOEM2ZDBGeSpNcX5sNzRZentDNTl3LU1tT3AK
ejtNSHtCXiNkOWVnYTBCQV4qb0tBSDFMcEJed2kwdnBBRmVqNHdud3M5JSYlJSVzKD9VMnFHRUMw
LW0tQC1EX0ZCCnp0X1RHXnZoaVN7QlUmNWlDRyZeKVJ6ZXdgVG1sLVNAfTdRYUQ0SENwa35IUnh6
ez9gMUcwQVBFbys4fDtBQTlTOQp6X1hmOXx5Z1dQazxXM3xuPkVwcDdkT0ozQGJPS3B8cmgqdTR3
NH5CdnJiRF90dCMtaDs/XjNUVWFrTyFDUS1tTmAKentySlVJR3JVTTM1KWNQMktuYTdwcSRmOE4z
R1ArSTMqPnUtOCg1ZX1weWpDRkZeZ0x7IWxWcFhaczEjYzxqaDdoCnozUTkxYFVIMGF8MCVeWnE2
MmI9YnVSczY5alJnX3FqSzleUVk8WUY4bSpVeSNOaHFXaGhIZ2hqcXM9OTAoV2V6eAp6UztRblUm
fUIqbFB2N1ZUMllNTlFzbnFDYklxNEp9Jj1oZjFBPnBrLShYbDt1RmU+M1hSZXh8LUFqYjJeQkkt
UG4KekBKdEwxek53QishYUV3NStFXktuP0gjNC10alNTIWQtVlpaXm1rLW89KFRiPzNBVXVXWC1W
Q15UVm9aPCRuTWRyCnpafWEjRmJRSVFlPj1zSVIwQyl7RiE9YWNDIyhPe1E4Nl9CSWJnaCEoVHtr
NVRvZkdSK3NePjF1WSVTcEFQQmRGTwp6YzBxbDlHYHs5Ynh1OTBeejRmTXtUdjReMjlAbURqP2JD
M29IPFU2ejtmPjxYSHkyWS14dD4zVnh4NzxXRyZ7TFMKekp0djdOQlNDJm9wM3ExT3gmeHQtPWFi
NUFwUDQ7SElqWnJHSlZLak4/NnkqPGwjZShzK3c+QDk4aFkxITtAQF4/CnpnfHJEcmQ3Xz9wVGxB
Z1NJPX1wZ1E9ezRGXk1wQngxRFE2PmR6VThOeC00Uk0qSmlvKntvfj1EQyNDYFlfdFhWewp6QiND
Z094OyshKDw8RCVycj8tdDBAOHQmRjhvYk40R2VOIyReWmdMYHVKWE9GN0hha2ZIVkZGMEIkTn5G
UHktJCQKenlaWiEtNntJQXc7MGNjR2BgKnJlWj9xbUU1ZGQ3Nyp+YlVpVV8jX003ZXsrZjxqNzs0
bTRINXBfNlNiV1VzcyYlCnpSQllkKSR9eUtwMWh5ZHJwbU5TbzgyKFdkLSRsSjh6a0k0T1o8cWwj
QmVHUXpNJVB5KFA+ZG9qJExiQzhqT2dfSQp6V3FLMjIxKVpUbz15Wnt4U3goP0NfJit4a0hxNl42
OHpIR1VeYiorSXQmUGN0THdAdkZ6OVlnVHpaRG5DJkxGI3YKejlkZSUtZDxKZWw8aHNNTjZSRkdB
cHNyQFUhTW1tZ3BlaW9OJEM4Knw7VlFWIXtPKkZVbiVYaFlVcHxqc3EmcTt3CnpGPSRQaUVwJGxj
MFM7Z35OZn1iYytfKEo3KE5DKGUxYV8xVD1eT2NFVW5rPWpTY1UtI0coTiYhRXwlQ3FNeU00JQp6
QnE4R21fUTx8KHo5aUtxRz5ffEElS0NrKzYkZGV8cDNYeDVsc3RTY2ZHbmBQeUsjVV8lOSRlOXAr
IUZQeH1vS3EKemhie0smTXo5eFlXO1dYdjs1diVCLTwrXmUma0MlaTtRS01ObUFfcGRJU20zV2FJ
Mnl4PDtnYHJzO1czQiZSelNkCnpqSVNqRHY+RjhlPj5BN21HWSZnUXgqb3NkelBRWnlZRjU9a3lA
QGw+PyFOaGd5RGYkR3JhfCpxZCpkfXxOXmxGKAp6Kj5IcjQ3KTMyfTM9dyhqU2lyKXAqYmQzTG1Q
dFRqO05XPF9QNE9KOztYcTlzXzRsSTZEKkhUbiRoYTtKVm1CKmEKenZKOTZBaHhge3MyUVRBQlRi
PGhLRkdlTVFEV1NUY19rfjBBOHB8eCNiKlIzYUM0NHpkRU4qYlFNeWthKShTZ3YoCnpEaHFxe2Zn
ZzBtMHd0UHx8MkJ8UDIjUVRlNGY7UjU+QXphbHI8NXE/Q2xEfFZzQTNrXlFEUjZ3TGlBYWsobzFr
IQp6T1dKPGVhZztGclk0TmJJJmVEUW03Z2t9ZiQ1OzdNOUNJfSs2SSgjfFBpJlZqYmdwc20qY0tK
VVNCY002JnRwbDEKemE8WmRVXllacWxRIWJKY3NfYzgzcUY7TWZNIXowY3NAMHsmUF9AeyQ7bkFF
RjRwZnB8UT1ZUWl2WEhNJD97eSNHCno/d2Y2JFo9Vnwwe3BgTVRDNSFFbSE0MEFxSSgmTnQjIXor
enUzUnUhaHJ4T2UjWlE5OCske0Y2bUZVVG4yaWFUWgp6YyY/Wj9BdykrKER9eXR+MVZTen5MfEM3
WllWbntFd1hlQUVNdz02LVNVKSMlM0R2aT5UPWZmKU5PdWJARnRRTWEKejt3d15vKGtkTGNMXilN
MEh3R14haGJ3NGZCcnQqQzhTMz9ETmopNWZPRnlQcl5qalRHaVJJViFrY0hARGtPYU8yCnoyRmBw
MWxKQWlTKnAzKFZkakd9YnBtUHRrSW5Gc0hMKWxuQU95S1J3YUNhZHp1aGg8eXgrJTJjSWxjfkJf
eGlVMwp6eUBRVStJclltJkVRKmFMfDJRJjI2dTUtVGt0Qj9halAkUURQMGkxQGMpR2VDJlMpMGFJ
dkhNdkU3YGkjQWVnUUIKej5GOH5rbGY2PWdIZWt6aUQ/WkJDYV9Cd1ZucVQle0plfXZDOV9iZGRo
Mz0jQzhMWXotQUMoc2ZSaWQ1K3U9Iy17Cno2NkNmVEg3d0M0UD5YbCFqWHZJKmx2Jm1Wbkc1Xns4
Kmc3elc7aylpSD5XRCNVWE9kcWI/YHBEP2J4MzgrQHhvQwp6N2dqYWFOTUVDTyVtZi1QSFdWa3ZK
NHAxamo5IyhmSEc7RHI2Tmx6fjxVcG9xSSpjd1lFIUZoZTltfjlvK1Z3OWkKejtZUGFKRnRjKFVC
a048UWA/cD4hOTc0K2BUU2Q3WXZIZzUoR2h+KX5CUGleVEdAeypaKGd9bDtXdiRsPlNBUzQ5Cnpp
V3VuK289dlN3Ymt0fndBLUlGekA7VEs9PUtBKTc5Sil0VSRrX3cqV3tlJT4hPEZYVWZZXypJQm1U
cEw8QSpPJQp6LWsmMWVHOXNKeVdyTGw1Tnd9KStpSGtnZyohY0tkQnNPNWZaNWE+X0xMe0xgN1Eq
e3coUDh4OTtERyU7bTswej0KemJUR3Q1XmYtVlAlWX50SWltVlM1NW57cXFTeSQ+dm5yQEE7Y31r
TGB4PE1DdkRCQU5OLTZlWVkkOyE2PmBvbypOCnoqeUFUTSNVQjlHX3tUJEo+c2lASGkrQyV+Y1Yk
eHZ0QGlVRElVZjQ3YFImY1gjfV9rcEI8fjlMRXQ5Pk9XVD1+Xwp6M3hJfkNQNmJ8KVpyeT49Q01A
ZVJDNyRBMHlIUH5RQUFjMkJON0pUPENDXlE1N3hkKUd2aFd3Oyg7KkZhU047b28KekwtVj85NSpv
QHNtK25+U05FWFNjcF9yRE9gWkg0LUBIKUY8N0puYWJ5SkJ7SVUrZGl1eH5UZn5gd2Q0Zy03Szw0
CnpFMkE7emFeUEVBJGw+KEhqYTh+PmxZRFMwU2Z3c3EhfEgzbnA7WjRyP34hJi1Sdy1aNGd3Nnle
NU1fR0NlM3s5cAp6WDlVUzszSUVtS2FmSFVyYGsodl5eTmEtTzMoZ3ZXMSVBdSZWa1VwKUJsZj55
VXZqeER6ZFJoQkp8UE5YM2MxKX4KekhlRm5NbTIyciloe3opVShBITRyXy1MM0g2fU9kfXRhYH0w
TG8zanc0Z1VWUz5PPX4qSUAzaDZJTmB8MTlfTU52CnpCVVN4PCh8KWVhTHpFOW17aFZadD1yV000
ST9APlBpbW5APHRWKD5wKHlibEVHaTRuWjtxenRrZmw4K2R5JnQyYQp6JEljVjI2X0AoKVloS0NA
e3dZZ1gxRHs+Umh3bjRDU3khNDJedCZmPFU5bSVQYzkraVBlUCRpKjE5LSF9PiNSd2UKelc1T3VH
WGlBRCtYeCEtSGo+TjQrQEFvQiQydmJtTG19ejtBPWAxfFFJdzJqNEpQWEtZPjFiWHV4STgyY3dO
WEBKCnp3JXV6cHU8PitwJjUjPUY9UlhSaHRXKWRkWW8tITh6ZUE4RjJhJmokPmhqbVRUMSVzQ1JR
SzB3ezRQX2FzYzZCNgp6JmtgZmN2JFY1eXRlVmIjO2dHT1RUSHhBZG96KlF3P1JuXzB7YSNlYS1v
Mnl1JV48WmlvPnY5dT9WO1pYQUJaRksKeiQhNkk0c0k2bkViLXd9bXd0YiM3VlE0TDQodnxgKiU9
VSN2PUtZKD9weTEmbSZnJlNtWWxkX2srK307WTVsczM5Cno9YkJVbXtES0BrJnlTPGFEb0BRYSo7
QUVEYF5TU3M9Kyl2dWF3WHpkWjhrcH1pdTEwX2VYbWZlRk96ZWhpczUoYgp6WXxnfEEqYHBpaHJ7
OSpZPHx0aUFjU3lDOS03Kkx9PVJJVn5MX15Hb1kpbmd4em5BSXI0M2w8T1EkZWdLQE1zfmQKejZj
TSV2VUslMSMyU3FQPnZlZUV1NnVhaWskbDByTmhMeUtadm5Zb3xEciZFal8/R29vTUEpTHRqND1G
fCNqbCNTCno9VlBRVFE/PU81NyElKnJ4N1FEYkJ+fmhARjU3NERQSDhYX0hOdHRXIT4zJXNVcyV2
WElSVXRoSj8kM2NiIyFqPAp6OG9iOGQjUi1MJVhebWVqVkg0RT0mTE0zfkA5fDRJcklfPDxPPCky
PkVyRHpnYEFJMkk/MkNKMihEV3N8QEt9d2sKej9obFRTYGkzO2A+V3M1Nll7T3BJa3RTI3FyPn4r
bE5RSSUhbXJrTzd5bn44fj9RaStIcFF2RnV7OFdKPilDY0diCnpEMzNJZ2deVmtEQ1VtXzgkPSor
b0I2JktTOV5aa1o3Pm5tYHd7THJBVTJpU3B0WkV8a082QHFXR05OPHopbj1BQAp6X3Qjd35YTj5z
fW9jWCZAZndwWkkrdUp2SSZ4byFpKjhMZkxgQ1RiI15WSH1oXjtwQTJASiM3eighRTUkYDg7MSYK
ekRqcERYPmReaGFxdythOHBaSjhmJl9TODB3dE9YOCVuQUUlMSombl5xaiQlPXgzKnlCSVk+Sygq
bkl7bihLNGBYCnpNSmxyQEBndWRTKWQ/a0lzdX4yZyp3SkhqeSplPl4yQkVycDZEIXpgVXljUiox
cyh+XiFPQFkjV3o8TVB6PUhINgp6NXlkNkVLMFdOMUpVdnpOQ2JsRTdIRVd5WXUkem5Ua3xNVGhj
PH4kU0tvJFB8PWRgN3tpbUJFez1DbHB8TyFgSX0KelZUKz95YllEPmRuJUYydTlKYU1sS2JETyh8
S18+TzJVKGpZKjxIY1p7Uj43X0lNOzFjeyUrPjM0P1ZvODRtcV9uCnpWfG0lZUZZZSo7WmsrOW1T
JnN2R3s7eiFWJi1JeyZ4aiRKbTNZVFR4d31ZNCtoN087YjRnRlozZ0U7OClVSHYobQp6WTNSJT1Q
JVFEaHlHZDZNaVNqXz4pcy1zIyhkU3J2SCNea30+eHlCTU07MzlaVzhRUlZeWVVuU0o8fW1nWTRX
O3YKeiEhOGRgKmkzTntoLWpqU0h0eGZ5dXl5dHFpKGdmXmVkIWp4OC05VjZzKjBYK0hnPlBxRUh9
fUZldlZve01NYndzCnozKFpmPWVmbzAhNHxwJCpRT3daODRtNEdaUzY2KktaajdeIXYoPDw1TWlx
Yik7UTBFZFYxaHR5ZnwlMkBLUFZgRAp6WnR0RiEze3s9ITA2UUJKRjhxUTc5N3h8WmQzRC11MTZk
KHZHYEJIWmRpPzt6eW1jKGM8b3hOR2NnIzI5SCk4RiUKenlsWCFDREYrOUhEfW9JNE5BakpjdjdS
cFkpbHFBcVBocC02e2d5V0xMeloqdD9+d3hAeG9zdlZ3K3x0XjZPQ35kCnpZWC1udW8jZH0tUyYw
SHZ0aHF5JFR7TTJ9V1JDMS00bXBHVUR4X0l1WXR3aylUdHE2NVRHfT0yKzFaVis9TFhxXgp6Smtz
XmNjMzV1S3U0UjZieT4wSlUkY2NveClsMndtP1kweU15OWtOPip0UWIxdmtAS2AzJkBSfGU/M1Ew
WH1rYnkKejMjWG44RXdSUUR7NT90MUE1enlrU3x3UXA+ckNuTz1uZDY+PUUycHlfR3AkLUdvVUc/
SlQ/THV8MVgqWXYpdktJClk9KHxFTCYyfXA5N2heeX1NT1YyfSR0THVGMFE2SU48cDJOeAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3N0YXR1
c2JhckJ1dHRvbkdseXBoczJ4LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3N0YXR1c2JhckJ1dHRvbkdseXBoczJ4LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNGU4YTVkZmQxZTc5YzQ3NzI3ZjgwMjA1NzU3ODcyYzExNGE3NmVmMC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA2MzQwCnpjbWVITFhJQiU8KX0xOHVyVT1xfE4y
Rj0hQn5oWGZrdCRzeiRWMlpVKWN7RlEwVnpeTUt6ZGhAQ0wlUlQ2cF5BSgp6eSpIYFNxPDA5Zl90
VS1pSEB0VSRtQF9rTCk+Jil6bm1LIUJLUXErVld+QWV5MHt9M2hieF82dEs9RlYzQGllZiUKelpI
M2pQe0ooK0lfbEFZPDlXT2BVZmNyaVU7RmBVY29yM197PEd6IUZ2QlExKXBhPDtePkh4cmk7Y2Il
fWU7NUFgCnp8Nn0wKUVkJWY2YnxVfDd7Pjt9e3t8PG1hVkhBezkpSEprb15iQ3dsPWd1PTxVfTMk
OyM/SGFYI20mUlokMWZsIwp6QnJHQi1DTjNkKU4kUnErakk1bWVtOCk8Q01Jfmh3UlcpQERPJDc0
VmJ1SEE1bzd5XylUZWBSUF5iSEoralBJRDMKem53ZVd6VEhVcTJYTT9mNVp9KlNBZ1FKdFBpPnNU
dmhvX2hLMUR9ViFlKk9XMEw2NU0oQSl6PXRBPykjIXJ7TktpCnomIVZEWlZ4UHl3Q25VWnxkWVBQ
KGBZSjZ3QlFxO0lDcFJ5QHBzP3VtbzhwcVVyRGYkNm1HNyRGU0FWRmZ0KmRXbgp6QiEyd1ZNRWQt
dGBEQEYhKjAlUEo/Pns9YmVzPWZ0X1ZvYDg0aEBmdGoqVS1EUEVHJXNuVnArb1NwMj1UeXQyQ1gK
elhNSk9IWWtPeVJafnglJT09a0s2eWgxYWcwMDY1MjhnPFBpYUM5dmI4K155S3JxJXBIVnp1NkF3
YWNCKz52ISNnCnoxKzFiWUpHOUZCSFZKbjEpXnFhOWE/OGBkQzFRbEZTeX1uPDlwODsweWNJSnFt
Pm19SyVzR2d6cmhIKlNTRDtiSwp6KXAmcyMpPzdSPk4tdXB1MzZ9dl5MQmw0Rkd4YGNYU35sVEVH
WXN9TGsyZ0MqT1ckfGRwZjBtVHg3ZlkyXz5hKEEKeklDbkJgP0A0SzlvdXVhSWF1Sndsank+am5l
OT4qIWRRUiYtbXNvbjtIUHd0UjtgJUlDTWVWfXVhbzF7bTNxUkVkCnp6R2RmQHBOSG1lSHFKVnBW
Tl5uU0U0V2lpbkd7SU5pQSojKEt+an1vSitSdWlwaEZKZVdrWT5lKTd8dGV4TXNuJQp6RSRfSHN0
S3tnUHlORmNadzUraHs9RHR+QHZ4M0ZiV3ZVSENjSzs+fkZ7czcrP1VrZjtZUG9Oenc8blRRbFFi
JVgKeispciprLUMySjwtQzRCb1JuTHA8SCNqZk9TS1VIZkE5czcxSCNFZTxXTVdzUVJ3TFIqUjZO
PHZ4eX0xWjUzKF44CnomTUpqOSNPYzEoRDNhTDA9O1lOZDhGUmo+cyoxTTBNJEs+ZlRHUmhBNkNq
a093NUIjQ2AycHxNOyFrRkl7ZXNiXwp6cGk8XlcrS2Rzc0JBQCU0aWhCckxVPlkzOTlVfFBIdCRu
MXBFYTEoR0FCejF8UUNnfTFXZHczSz9lN0lAVE1sJGIKenVadVNOJHElZWIjPVEyVEpaXjBiUm9U
JV5NKzV4M1BKWE54Qzd5a0xPTF9tcGs+UDBeQkFgSjhoeGFOLUxtO1VNCnpGQ2drSj1Xen1XRGp0
bHNwOTNRRSk8cVYyNjNBYCs8Yj5XMll1bTNib2YzTkZ0QSYjIVRGJThARH1NPTJ1QmF1SAp6RSgo
VytHMjtCdUIyOXpUM0l5UjA1SXAyc1gwVzlROUJ5dSE0LWVrKXstdXVePShecSQjPlY2Sj5MXyhw
YiklZmgKelp8a3VnbWBRcXMrOEFfJFBNSV47IUFNLTJVb2cxeXp6flp8bjZObzlsbUBteGs8VWlz
T2p3ayFATXYzRnZjcmE1CnpwRTJWXjhZa1V5P31ASzgtT0UhVUdFNDZZKWY8bn5mYGRLVyVndSli
P2NrT2BJejhyJjB1RUJveUg5ZV4zTWsoMAp6YkNzSG52RkU7LVpNUUJ+eDQ1T3hVeW92V1BJZkg+
X18yU0JMWSN0PC1uVkJfUEx7KjBXIXZkPTRzPD1RQTtfU0YKelJrNERMSztCZzNNS1E+dF5UbyFL
ODFzc3NISDdkXiVQS3BrUHR2JjtzPHtieEtoWSU5KWRKO0VoYVUlaDIrOT5JCnpaQFpuWVk+N0op
QTMmRDhsdylkeXlGRHhaSXp0KWdQNyRLWFY2WkpUPGRtN0g3PFgtUVR9aUpvc0lPXkVmZkd+QAp6
KWYlbX5ZOTFaQlFHP0wpQUotOHtCV0YreDU1WXRRUjR0dUEoVDZORnF2Nnl1QXNRa3BHRkZHI2JF
a3dhYll5YH4KejlYQG11d1hmdEFRSVJaYSRkN0JrMnNCcXBVI1oxdUJfbUZJOEV5U2AkfTVzM24l
ek1QYkhad1YtNX0mXmV3cEo4Cno8ejVNbUEmb2k9Wj1PU2VWPDw7TkojJUlQS1NjOEs3VCEpV0Nz
SGlXI0Mtej9zNzhjWT9hSG1QY01BcHh7QjkzKwp6UXB6YVlsbXZPZFNHNks2TjBYQ0ElQ2J7UFdv
d0FiakFWazZ0X2Y5OSR7diNpYmFSLTx6Y3I/eEVRbFcjPHlCUXgKemcpVlN4NTZPVTFGbkVVPmEq
I0A1OWlOTDdAczF5Nkp2bCVGLSo3PEdCQzBscnsyQ01wR0tHR3hlKk1TUD5AUWdWCnpBJjw3T1Qw
YDg4YWImdFRGKGElKkRDdkJaZk9wWmZtXzR6bmc7aE58dmRpdDA3Mi1EVzs+YG8wd1M/WiR2SzdJ
fgp6QWYpQUEkZn1UTW5ySjE1bnJKTzRkQ2JlSy1DR0ghLUB2ZGM0dHxsdXtZI0MmSmIzOUhCU1Zq
TD9FVW4zdHpZVCEKemBHdHVtaHJ0YXJKbi1OXkZXJCFxVyEwQit0fWlQQ0Y1Qj18akt+a0NiPDhB
cEV4PnlKNEZfXkk9b2lIJlkwdDx7CnpHeDB1ZUx5VWdOc2RYakglaTR6YiRrVlNGazBMTVA+P3Bx
U2xSU0dFZG5RQ1c8PHpkR0Fza2t6eClGfXkmUWBHTAp6bTg3PGhaI01HbHUzcGwyakk+RlI/OEl5
JUhpaEpsOEBkbkpnfjNAKykjVU1PPVVuekI5QlZCYkRHZzc1ZHlvcmMKemJIQWZ5NG8pKGZGYHYt
VCR2Tn1zYE8qa3d0Vy04ViVxWkN5Zj1gcVhuc2xQO0dSa3FZeVB3bmNwKHZFRWx7NUp6CnpyRDEr
PVFfTGg1UXh2Xm1pQCpCaURJOytHWDNyQXpaNGZ4dWJwIUFeWVZ3cDQ0M0NVSVJEN0R2RSlzUCVt
SmV9eQp6XjA0Z3JIb3IqKmI3KS0jZURpZSMyP08yMDZ3QE93VTBTJipQWkB0ajV3LUYkbVVCa3Nx
QGhxUGQ5eyVAPlNgRnkKelY3aClWUSQ5MCpITndPX0ZzRkpePCpfM2YxViF8WjQrKjdfKUZ2Ym8j
dzd3dT4lbTVoQ2dAWnRVYEJRXzZ+OVdpCno1fU9kMlhCem47eFo2filmLXN3WktBXjFsTylDM2BV
JjFhJWUxJk5nbl9Ce0hVMk9sekB1SSVDUC18ST9RTlB7Kgp6TXA2I31TPEFQJEF2JV9yOCR+QyNz
YGkqPTR3WVA7QCRwKkFxbmgjPHRobn40cSRIdjJoe2ZjbSt+PHluQTY3NzIKeiQoSyYpaHdVU0VM
eVAlMEZjPEN1IylRUm1aP1lvUnstSn5nPm14fipnbHtRe007aDtaaitOI09jQX4lVVJpTmhNCnpQ
ZTxuRW4/N0VYNj1tJUNOYy0jQGVyX2FoITdFeEBpKX0qdXJNVkteQiprRF5wWkFXMlNvIWMrY1Yk
NCEqUlNmcwp6TFpkZVlsSn5OYHZ9I1drKD04Wm0tNjhoPkMwWU0xVkUtUEtxTFNPKVl5S3J9QlI+
K2pFYWcqMWRmUSMha0ZFSlAKemM4PDImNFphI3trc1F6S15ec2hFVUBzO1hZS0FxQVlGX2VIJjN2
OUQockMmYj1FT0c9ZURuSTFmKSYlOD9VKChxCnozKks4RkVZe2tlbzB2WmVBNng2djJgRSVlVHIt
UV9kIzNEZylxQ3l7bTd6dEFCJWpjY2YjfExXRChSfTglPUdNMQp6YjlpUTchcl47U21FUFY3JWFQ
MjdLMGN+V1BXNjMjSlpReD1pY2VHXnB4d3tQbSkwU15rQkA2fVM+dT1KbDwpKU0KenIhYCZeJXFf
U0xgakRiVztrWGhOTWszQ0c0Vk1qZ2cwWmJaJW48VCRkJXZHTCZPWn1fSVdeOEAja0szRmo2S31r
CnpGPm9jZTI5JjF0RDdEVnx0R3JOUElsI1YmeVheNTBpMVlsSnFMT3l5bWVAWntZcypfX1lafHgh
VnAobylDcTRQVAp6WUgkUmhne28wOUlVWmBCJm1BTn00bDt2ZGJ1cSgjYzBGO3clK20mfktZKENA
TDtBP00+MjZ0KDE2XzF5VGY9bF8KemNNcCVRT2g8YyVqJFYoQj9ScXZPY3FRXjhvJnxyTjVkSmFN
MTYjM1YjYHZObDg5U0NORkA8d194bTdGWEopUns7CnpzRChfVHw2IXRseHMleHJ0UkIlJHtwMFlr
LXJRQiQhajJncUdNa1JqMndAPGw9ZWJETiU9SSg7PzdYaXtGJk52cQp6WWhOSFhSISM5a19sJH0z
PyFEd3F1dCNZXiE5fCZ+cmgkQnBUbSQrJjU3WlR6bmFoQTklTE01NjdaU1FmaFNjNHYKemA2NjE8
VD5MeSlyKj8/WG1ZN3pJQzB5emB0eCN4eF4oI251RTNuMlREMnVAPChLTTY+RT1gRn5OVzNUaFB+
LVohCno1P1ZNN2F0c1M5UlRMQVpHKSNMQS0qI1NmLTwlfm1wd05zK1Mpbns/e0M7NjtRIV9ybTZa
ODgweTB4c2cjVWxvYQp6XlpyP3grUWM8IXt8S3AtPWdISjImKVlrRlI5M2dOcmNxMTZZPF5JVm4+
cTV9KHV2MmowYX5Ad2szOSQ1KE5xancKekZoZUJqQzVjOTtMbGNUZ1NiZWpwViNwaDVGIVl3fHp9
amFUNFZeWl9jdGF7X25lZ297ZjlSanJtZzRTQkBkUX07Cnp4TXxzYiZGeG9nXyg1JSg4Sm5tYCh8
U0JXWitwUHV7RlNVbGtFMGdtLXBDMFkjcFhjeypuOWUmVV4/UD8xfWA3Rgp6b0MpenRXJk5mamFt
VTEyU2Y4Xk5PcXJ4NGBFfTYwPF5we2g+bkp4byZVZHEqUitTPUxETSlhQm1EMkRvNXteLXkKenRu
ZFZrVnVvVn1gPEN7e1dpTkd6YnE/RCZWSUh9MTh2TnRQS0BlfnViMFR1S3pSRU88LX5hTjh4QH5B
RmZjeEZMCno8K3VOZ3VQN0p1VHVxXylnKSpNKCoweDI5RkN3Nm5iYX0zcF5DUHVyYDwyZj1hZ0Jz
bEpTJSotQmYrYTZBMElmQAp6VTB0MCEyNlp5UT9HRGtKKF9QRjFORXYxaXNIZDNLQnxjfSgwJCRg
KVd5bDBte2YtbGFNITFqIzxjN1ElTnRAfC0KenE8JG42PXhDRUhScnBkeFMqVTMyMmteYiZjWSU2
Pjh7YGx1VDxASnRAUSghVj4jaz0+XiopUjJsQGJ9TTlIaCNMCnpqQVZpbz8mIyl4eUxQJjhgSlFq
ZVNIWUZaJThUanVXYl80P0hITjtkKV5pOGkmPispPUhMI3w+VjkyKnFLVmJNcgp6VWchUzFyJlB5
fnFgTU1qIyR4Pm0lJUZzfXpuVGAhPWhqPCQjPSRsYysqfDxSRFk1MSg1ajZhPGhGWE5fQCU1I1UK
em9ZTk1tQGU/ekledGY9eVp3aF4jZSlhdFgqfUgkIzc5cW5NN1ZIR2tvVThmVWxmTUJ1YnhOZ3Fx
KGpLPzs7M0FECnoheD0/UmhnTU9HQCEofUdWOFote2wwQDgxRSVpRlhkZklQYU04aV9xUiZuKVBR
YDlDNF5+dGNlRjA3UiFLNXBDQgp6PmMyZWp6YTtjfStUKCUoaDdNJWtFSXFMMWhtbmsjIUd5fSt7
RURufGJ4JEdnOTdyQGJCPUVSKXhMPD5kMSZHNSkKeiUmfW12MWJXaSFILWJxTlYoWm1JJWZzWTZX
VCpFYmJ5ci1KPGw8eyFecUs2WjZmdGJsQ20yRn51RTlmc3h2MStXCnozTlZOUXNyNzdOQDtOVmxI
cXdSeWtCeWBYb1MhLTZnNCN3UnEoUm12ZSZvY0JoRT8yRCNMeThvazstc3xeKX53JQp6MTw7I3l4
blFXVDBkUmFoQEVxJnZSZGQreD1lRm1JMUYkUWYpMyVCe0FSRT5QRWgmJi12YlUyd0ZpQG5fMXFh
RksKemtwbWdBRWZaWiQhYD9NVW1hYzVFbXdeeklrVDxSNWxXVCRQLXsmRllDR09YMkkpKUdkcXJD
eChKN1BiWDtoRWFhCnpnaU1yZ3tTISVKazRUd3ZEI2JSX2lLPzYlLVcmVmByPE5jMXU5JldEKWNU
M1J3d2phaitWJUFLVGtNKFUpSHk9Mgp6bS0qV0B5V3MlJjZycXVvUUE7SWs/SG9laHlkQnRuZ1Al
JFRuPX1xNU9TWlRnJUVKfT5vTlpaJVA5clJ9X2s9aC0KemVwXm1FPFVKc3szTjc9Y18xYHMqYCYk
Un1gNktkd14ybU85dFZ0XngyWEQ0YCs5e2B+e2IrQ0pjUDhTa259MCpJCnptfGJ8V2wkZzBGekNr
RkByRlMhUTd4cElMTTN+TVo5KHY7UD0hdWRkYW5BVTIjfihNI1pOe3kwY3xUb0lfeE81WAp6cSgp
UXt0cEZ5Tmp3VSl1UjUhPDh0TkxIWnpDcFBgQGFWI1F3UHxUVz83Qm9BQSNeRClyMnpzRExzVlU2
akshcV4Kejt3OXFUbHxONCYyT0VgO2xZRDhEQ0R0QCg1QWN5YjVTX1peeSNzWCloWEhaRG9HeCll
NzJXKlooPCozPnhTO0hYCnpTbypLcCgmX15JVVolNDZiMHI2VGlKQllJdHFabktgMUpyPV8+fD1y
O2Uqdj9xZkJQfCN+I1Q1YDxHPzQlQiY+cQp6dVU5O0tpcnl+WmhQPl5MLSF7PkdKeFVWblcpY3Yt
Zk5VSC1IfXl3bi1gYSR8Zyk8ayZacVNoYlFkOXMhYGV5R2kKeit4U18oTWkmMHtjemB4MTRXUip5
aGVBNDtpe0tEdnZTcjlAYzhrWEt6Rk9eeVc2Z1QpaE40fjR4QDZfQzk1VytqCnpYdHkkVjh3PHhf
Xm1qSEolfnhmQU9KUm4qXnUpVkFVRkA2VE1zdmtmLW9OM28wfTNSOy1BS05Pe14/cW9IWmZrJQp6
eUM4PndadSh3fT14QDdrbzdUVlAxK0I0JmpMWjxubFRsdCFUKXFYZjEhYXM7dHtvQCFpQTJOUkoy
aCp8YGE0M3IKeiM7QDd1OVA2IWswbjlSM1djSEtlNHZxNClrS3toZVkwMl9QaVBnaU9jVzBLTUdL
WjU+citWbGteMjA9IyF6alRNCno+QD9UPjZlWTRuRlliYHdDVFRfP0x1R2lpe0lLcyUjTTdBV1BB
JUtTdElhUXpSRFh6OHs+ZyZVI3tHNXlhKnQ7eQp6MW9YUD0mKmJQeGF7cWtzTyUkb0RkRXpMRVVo
RlBJPXglR1g1YU9VYDMpRmRvTyU/ZUB0azgoYSgydDlQMUc7RTIKemV0aDs1T28hbmxaVHM0QlQo
PlV6YF9aRCpgViQmUEpuUiZoUzxPJWglb3tnPzRLfX5lVUl9T3lFY0lSN0hUWF5SCnprJEIhQHF5
NkRgKXRJNmotS0UxWmFCIUEmUTxaakheMyNpRE1WdnVNX3YhcXwoZW1PfkVxJl9Bc1A5V1k/V0Y/
PAp6TU1aTCo8RExXTXlgPFdpQ2tJbU1BZ0FhYUcyTHphOTh5PkZ3NGJ3JHY3O3Y5OT9DWn1hUig3
OEB2eCtUdnBYI3oKel9YOyp1aEVKajNaST5oRyhzOCtmQjUoSkpqa210ZCZgRFRXKmh6VTFWTCRC
WSFUUyZoRExfJmxAOTlWNyQ7aW5uCnppSDtzYUghP15ANHJKPjRUblM0UjZnPjA7YHhrVlpwYjsj
RTt4P1c2UyZZSyZaNElaM3FRUDAqeGA/cCp1bTVTIQp6VT1BY2liSF45KlVtR35ZMmN0eCNfISFj
cHwyaEAhYzFRbmRSczgjPF9hRlgrb29JfmpqZU5JZTtAM1p8cj4pPSQKensrb1l6JUBCOTJ2WT4q
RXBKJXBRWXQ4Q2YhNUlnVk57I0BAU2RRWXlGSztFXmN1RGd9K0hMSTdzbGs5PCojfCtgCno4K31m
TmY/RWtGTl5rR0gkQl41QjtEZz8hMipPJWNhIVI4YUJ0ckRocit2P0tgUGYjIyl3OWhATCgqTnJg
JDtwcwp6QGJqUHw3OChuekBsOEJ+en1iKms/WX0+MzchYGImYGZ7eERXTT5WfSMpSmdEQGpUPGdG
d0ZWKF9ad2dPMkZFVFcKejVaNVkqUEd9MFMpV3ckSWYxNXR7Ml9+NnhZMmBDUmoqLUxxN1VmM1pi
KWEoPFRzQWJZXjN1KCFGUFR9NG1ZUlgpCnpCPWR+Mjt9Zlh1Nz40UG1QNDhSPiZRPiVCKiRrVnRm
T1AkWlMtamJ2NkRXa04qM1hRK3lJKWdeMnFjNmZqT305Wgp6X0lIYCFga284eFhoaH1zJX45PkRm
UygzNUt4PDBiUVVqJFYqa3glMFQ1Vnt1dyVvR00rMlV3TD5GeyUtM19NTUQKemV8aC1gU0J+Nkox
eTlhIWtMMigoZmF6Rn1MdHNOcGpvRTBAMmBKOXBuRWBLN1BnJWhWek5FWj45PVVwPzJYKCpCCnow
TnNmMzBUekJnJT5uLU9ZTkp0OzJDeTs2THFYJUMhV2BrNy1tfkpjO3NxSVFkQXVERUxvOERvWmdh
RXI7RlZTJgp6SVpMeVRheUkhdypyd35pbnt9ZllFQFVzdmNJeypQQ2NIVXZhZXotekBOb2RkSWZH
antSclEjQmtEeiMybCoqN0IKenVnITshdD5DUWBoNzl8MGczYDUlNFc1JE5DZlo+TzlmbGsrVkRP
YCh8QVQrYlJsSy1YUlQ9bzk0Kkgpem1rYWQ2CnolQG5mUWZlK3chaD94MHkrcEJvY3lRY1RFayNY
cyk0KDY8KmM/OF5wS054UGVqcCE+MWBoYzIrYURuTDxUTiUmQwp6V1B7cnZvZ0E4NlF6Wl9eZC1S
Pz8wTnBnXkRCeSsoK0ZCWT9hKW8rWnpCNilBZitGOVlrazBASUVUVyYmZ0sxamMKenc5YUNyYHVq
MkdQI31YWG1jcEJBbCF1aHtIYSRFNDZtdT5yS34paWRhflBzVmdUTENuMlFGbSN3VEBGKG9FJEMk
Cnozc0o+R1Z5NUZUMXp3Rzc9RU0kfUI3ZWhTUEZ1aTlRcj5PX1JXbHZAdShse0U5RHsmVmBINEtm
dn5LSX48aUJyKQpjKVVPPmMpblhHcm9eU05kfEZXM1RIfXB+RSpLTmM4NTAxY01ERjZUZgoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3N0YXR1
c2JhclJlc2l6ZXJIb3Jpem9udGFsLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL3N0YXR1c2JhclJlc2l6ZXJIb3Jpem9udGFsLnBuZwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjc0Yjg5NWQ1NTYyMjVkMjZjMTNiODA0MDIzMmVmNGZhNDZjZmJm
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBh
dGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA5MAp6Y21lQVNATj8ob2xIeWB1VkJx
IWlhMHZwXjk2LSMpITNIRWRrSU9kekRNZTJnI31KOXxXQ0tJUCZYZmtHSDh9IzAKb3xOc0FnKlcj
d0szblJ3PyQlcT5hPlliR2FeSCEqeTF1QUNuYm9GeXQ9YWtSezBHSV9CXiNBfD4KCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zdGF0dXNiYXJS
ZXNpemVyVmVydGljYWwucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvc3RhdHVzYmFyUmVzaXplclZlcnRpY2FsLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmY4NGQxZWU1ZjYyZTVhZTBhYTM4ODJjNmM1NjdkYzRmZGQ1NTMwYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVy
YWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA5Mgp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXnFD
bXtTITNIRzc7PHNEfFFwJW4janYqVDdsTUBhd2B1Ty1MYVZEfF8KcTlzS3xRfDhDQzJIYitMY3o0
a2x5QEd+QHxSMnA8b14pM2YwWFloM09iNk13PCY7JFU9U3M3amMKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zdWNjZXNzR3JlZW5Eb3QucG5n
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3VjY2Vzc0dyZWVu
RG90LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEzMjMyYTNlMDRjZjUzNTE2
YjUxNTJhY2NhNmUyZGE2OGQ1OGIwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA0
OTIKemNtVjxJMFRjZC1QKTxoOzNLfExrMDAwZTFOSkxUcTAwMG1HMDAwbU8xXkBzNkFNXmlWMDAw
MDlhN2JCbTAwMFhVCnowMDBYVTBSV251N3l0a1BvPUhTT1I1Ozdza30qaElWSEFaPVZzdWVOXm5v
QTwwVG53R0dLQ0JkaiNARUwyZ1N3Rwp6ZkxJJV9FaHU2R0RGKWdTRkByNjI1cEB3S1o0biRxREZ1
PEJMUXwhbmdjaXg5Nykwbkc9eXYqX0BWbXM5Y0s1LTcKemBfQjM5ZWZOTC16YGNBdD0qMGpZVkZl
dkhEQGU2R1cmZTQrLVgwfFVGVDlNZUtqWWt3V0k/THNESEJ0JnhwRHdjCnpuQDJyTmVTZ0w2ezE9
fHc5MlRUbm8tIzNSTCRxMiZPK1ZIaSZvP29kaUV0cXNXOW5lQUFsMzRlaTRqfFQ5OElqTwp6a0tq
RH54dGZ1JGV2WU1zZTd6ckoldC1ZVTwwJXMod3M7R0ApY0EqeVooOU1NQDc4aVc8MWx7VUYhOXNq
cSoycygKeiVFWDl1OCZLT2lnM1ljfkZtP3BLYHZwJF8yNF95ZGsyJnpvRzF6R2FoIU58JExFdDRP
YGpAfkBye0Y+IVQ+STAmCnpqakkrZVV4MmVgcGZXTFQ4K2ghd1REcF4xakhPezNKREtHZWI5fkVo
Kkx7cmRmI0U0RWltfmpTSkstfmBHWWEmNQp6ITI2Kk0/OExLO214PGlOJWpneiU8U0RhXiY7MTRo
PHdsT3QxRVl7cHlIJl9+aiU3O1QkbEQ9Ul9EbDZ2Yj1MYzUKaWJNWVlrcSV0ZFNzbTh6VGtofVhh
U1JMcDkwMDAwPE1OVU1uTFNUWXMlLW1vQQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RodW1iQWN0aXZlSG9yaXoucG5nIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJBY3RpdmVIb3Jpei5wbmcKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NDhlYjFjNTNkMmJkMmU1MWY2OWUwZDljMTU1
Njk2NWFkNzQxNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lU
IGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgNjYzCnpjbVY7STAl
LWstUCk8aDszS3xMazAwMGUxTkpMVHEwMDFmZzAwMFhKMV5AczYye1J3YTAwMDA0WEYqTHQwMDZP
JQp6MztiYVAwMDAwMWI1Y2hfMEl0cCk9PlB4I0FZKHtVTyNsRlRDSUEze2dhODJnMDAwMWg9bH1x
OUZhUUFSVTtxRioKem07ZUE1YUdiaFBKT0JVeTI0WUpgTDsoSyl7e2E3Pnl7RDReMDAwU2FOTGgw
TDAxRmNVMDFGY1YwR2daXzAwMDA3CnpiVipHYDJpZ0o9M2xBd0lZbj9GdzAwRy1jTF90KEklZip6
eE9GfmY7JEJpUDN3MDNDe1gpK29AWHNGYk43REZoNAp6eihFP1NBKDded3xEbExkcTh+eW5XLVhF
fTYlfWVfVzxFdkotdCVZcns1P2ZXTHYqQEYtWVd9UXA5ZW42PC0rJUsKeiZwcjJ3TF9nSSs9cGVg
bHthV3FscXxyRUlHOG0/cGdhRVRKNlNGeW9QUns5OTtYP1BvZkt0Nzt3fFJNVWJNYTE1CnpjTXVC
c0FSTjlJMWtBIXIlLS1HSXhLZ1BHJEIwd1VVKWU1PVc8PSs5cFM/YW1oYXI8O0FlWU5QS0EkREwy
dD5BPwp6aVBgQWpAdG5WQCl4IzYkKjRSekMlWExnQWxRYX5JMSpsZGxQXjtDTjAlb0hGeDtVTU9H
YGpJIVpQKTh7UV8qT1UKemxkTHZQQDwrQj5AQUFXZzJYd21lRFJlfHB2QkA7STc+fGRjUCsqfXtE
bUp5Rmx9Wl57SFY1ZiswKW9MaVNYaGB7CnpMYE17RDh5WnErQjlYX0JSRWktcGxCfVBtVHJMVVBV
Q2hFOCNXX3RSWGZtZiEybjQqSjxXWHRTaylLaTdfT3w2RAp6NzdHRXgjRFMpdCRtVGRYNihibmZC
JHwhXkleZ1k2bG4qU0h3TnZoXmBoTkxoc1pecG9JTjAmfntjYiE3YDcjM2EKeiZEZWdTcHMwS0Jg
TDV5aV83WkcxdDZ3NktERVZ0fEVkMT17WDdsez0qNERjQj14Q3B7K2llOVFhWDl1X3Q5OHsmCng5
OUZwMy1YWiNAU194N0BGRmBAKjZCcUBULU9iTT5VdGptaXo8WWNtSTJacmAwMDJvdlBESExrVjFv
YWw3UUZ4ZgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3RodW1iQWN0aXZlVmVydC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy90aHVtYkFjdGl2ZVZlcnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxMGI3MWI3NjAwMjMwNmQwZDAxMDczMTBhYjJmNzllYTg5MTEyNGRiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh
bCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDU2Nwp6Y21WLTcwPzdTfFApPGg7M0t8TGswMDBlMU5K
TFRxMDAwWEIwMDE4ZDFeQHM2RzN6KDAwMDAwMWI1Y2hfMEl0cCkKej0+UHgjOEZXUWhiVz85O2Jh
IUVMV2RLMkJaKD9PMk5vYD9nV20wOGZXTztHUFdqcGA/MG5BQjZLfnktNj9VWStmCnowI09qaDRa
NTJ6Ql42UDBxcCh5R3A8YVRoWnhUSzlDODdjWV5RRVZWQU9uTGcjRkY7VmgwcT8tc0kqbCNUaHtI
Uwp6PnM/cEJLdXxRRCoqYXpQNFdmWlIhPF9TKklwPH5tRCVFJD81VmglYXtpRDs8bFQjKj5hZzVh
TU03Mlp9V3ReKE0KendZOX07dz1jVXsqN3dTQlJ9YypQLVctbHFaK0NhK0Z5MiRKTn4zOG85M0Fi
Jk1EWWVCPT9QTFBOeSZHMjVqWj8jCnpCKW1ycztpamRmI3I2QzlDfWd1NEM+Q1dYbH1iditTYD5N
KFRJY005KDwwcEtAZjteSW5HXnd2M1A+ZigqcExSZAp6YCM+Z0tBSG9LWHlNOEdZM09+Uyk9fCNY
SGZxKW1aK1F0IXRoaj1+JnhtQC1hb1hfVlY3SkU9Jnk/JFVFVlVyKykKeiQjZENYLUB2bUUqYXc0
eXhgfWBJQU8zNmImXklpOUhESmJ0cjcrelRlSz5zZW9KPmxQUEE4UkJxRXFBWDJmKGRJCnpTZ28h
JUJpeXNVelo+V0lBVXI7YmlmNW5faTVOdHFIeExTNGczR20/cmB6M1J2Q09QK1QhMmd3S29CXiV5
JHdQbgp6IVVFNVMhU0RDTiFvck0kYGJIJm9aRWRZe18jRGZnRTE9KGgxe1c4bnUoYFA9NT1ZV2dO
NVpIaFVUM3NnWExsSDgKekxxMGlpMD5kfjtIcnU/anRFPENZP3NZVihpSkN3RWhUaGl5Uz1VZShl
RnQ3Y2pKQVh0SCVrQmowMDJvdlBESExrCkZWMWtoT2B5Yz1TCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGh1bWJIb3Jpei5wbmcgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aHVtYkhvcml6LnBuZwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRiODY5NDhkOWM0NDMyMzhkMzI0NTI2OWQxZWFh
NWEwNTU5OWVkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA2NjUKemNtVjtLMCVy
WSpQKTxoOzNLfExrMDAwZTFOSkxUcTAwMWZnMDAwWEoxXkBzNjJ7UndhMDAwMDRYRipMdDAwNk8l
CnozO2JhUDAwMDAxYjVjaF8wSXRwKT0+UHgjQVkoe1VPI2xGVENJQTN7Z2E4MmcwMDAxaD1sfXE5
RmFRQVJVO3FGKgp6bTtlQTVhR2JoUEpPQlV5MjRZSmBMOyhLKXt7YTc+eXtENF4wMDBTYU5MaDBM
MDFGY1UwMUZjVjBHZ1pfMDAwMDcKemJWKkdgMmlnSj0zbDlkNXh9YXpQMDBHQGVMX3QoSSVmKiE2
RD8/IXokMHN0PG5SfmdDVHY1dH1UOFJ6MDtBWUJ8CnozKnx5MGJ8YTx5QyMyWH5laWpMI1ArWDBx
SHRnN0QmVkpkPCoteHxDa01ucSpiJmlkNGQtbH1sPUl5UVQ9WThKaQp6ZUhEc2dSVWtEOzFKWDd5
KDVzdTY3QEhtK0FKeGtOV2w8KCZpdz9ELSkzMmZoUll5bUFfdHdfaCp+N3o0biZXS1gKemNDK0J8
SmpudU9RNl48P1pteW9JKXR5PiZze2JvbipXYSVsdns9bHN3Pko7TzwyKXBqYXJwZDlBUmpXM0N9
ZEpMCnpJYXNhTmlNfkZ+NVZANmh2KzQ1a2wjTjZ9a2piUCQ1Ynt2MnFISjs/bXkzJWRtZldQU1Iq
I0o2aFcmbVFadXI4RAp6TGZJc1h2Tz1ORDR1PShWeH1qbG1Cdkl3dSt7eyFrPXooLVAxPSh6LXRS
Mm5nYkM2MFVBcj1lNiVabTs0YHBHR0IKekIrO3NfRV9JTDNfbmVESGQ3UDAqO1dXOGlSQFV4UDdU
cVkjWCplOWhJclczbmNgeDlqKHZZSnhxWWRscGhXJFhtCno0TGwhJlEwTnNtMmt9KEFZKjNUbC12
ZEFuYmh7a0tnMkF3U0Fid1JwRkpHeHJGfEIpaDgpbSFSTE1PcDUhJiV0dQp6YUBrfm91OUBTV2ZN
eElDQCRuWFJjOHEzKlZPcGhZRkQ/NClvOTU/ZDdmaHk9dENOI21AOFJMTFBmbWBIY2ZDZ0EKeihp
SileaW0keSFAbFJERTRBT2ArQlB9eDFFTX17dXhzPlZ+KnMlKGx6OWAwYTAwMDAwTmt2WFh1MG1q
ZiFuYEJOCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvdGh1bWJIb3Zlckhvcml6LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL3RodW1iSG92ZXJIb3Jpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDc0ZTQzYjhjNjAwMTZjNTZhODBmYzEzODYwOTg3NGRhNTdkYWNhYjkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgNjY3CnpjbVY7TTAlWk0oUCk8aDszS3xMazAwMGUxTkpM
VHEwMDFmZzAwMFhKMV5AczYye1J3YTAwMDA0WEYqTHQwMDZPJQp6MztiYVAwMDAwMWI1Y2hfMEl0
cCk9PlB4I0FZKHtVTyNsRlRDSUEze2dhODJnMDAwMWg9bH1xOUZhUUFSVTtxRioKem07ZUE1YUdi
aFBKT0JVeTI0WUpgTDsoSyl7e2E3Pnl7RDReMDAwU2FOTGgwTDAxRmNVMDFGY1YwR2daXzAwMDA3
CnpiVipHYDJpZ0o9M2xKN3hTSDYrfTAwR31nTF90KEklZip5VU85RWpLJEJtKkZxUGo8PzVLbmZu
RlZNQGlBUGhuWAp6RCh3PXFQP3NQSXArakVrcWZ9NVRtVnAoZTloNlNKNU4kN1J3KEY4Xz9XV245
dEpCUH5ma28kYTtKQCYmMU9NTU0Kekd0WmJ6ZFJRISQyMj9BbThgVT5FSjdhZ2Rtem1Zb3I5fnF8
VWdTeU1JenQ7Vm5RQjlhPzZsaioyNzx4ODxBO1o5CnpNRyY0S25UJiVkYSl5WSEkZGtNZTR0N3Iq
ailgR3A+aVB3WGhqeTIxZFcyOyE8IW59akxQM0lKdT5oWitBRT1eMQp6YHBgVmRuOzJPM0QoYGVv
alNeZEpIRzN+RSZoS1A3Mmp5fUpzP2BlQUU2QUd8aCRSfDV5Q1hLT3NgelBNU1lYQ2UKekRJT0VQ
RnRHfnQ0cX43eEtSPmc7Rm12Tz9OVDRrbjh8KDkjajBtTlkwOypjQlllZyMrNiU/ZmlgTWoqbnRq
RHU5CnpQbUJjR0cmJClRZTBfYVUtYF4jaTVtfiM5cztZKW9tJU9OPkdeZjx8WSZIZG4jQztWWCll
dGZNJXhISFk7UHQxfAp6TnN5IXI8WkB8RCZmdSppISRkYFRkckpjYFA8STYoNHFvcWVLd25pMktN
JCY8enUjcyhJQCp0TTk3e0xCbTY2YnIKemRIJUB8UUpWI1VnTHdRRjl2XlN1QFghfnQqPSR5PT9T
RlBERSZKWmhQMHh6b3pZfmM+TGozN3pQJXUqQWFFU04kCnp3aiMqaik/YSg4PkElMXFqaT9TKDU2
V3lZS0ZxcHpyIzY+MEBlT1gqTGJ3cSFzJlc3VDAwMm92UERITGtWMW1raApCNU5RQWEKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aHVtYkhv
dmVyVmVydC5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90
aHVtYkhvdmVyVmVydC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MGFiOGU1
YWEzYjc3OWQ2NTcyYjVkMDU0ZGQ5YTlkMDQyZTBlMGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEK
CmxpdGVyYWwgNTY1CnpjbVYtNTA/UGV+UCk8aDszS3xMazAwMGUxTkpMVHEwMDBYQjAwMThkMV5A
czZHM3ooMDAwMDAxYjVjaF8wSXRwKQp6PT5QeCM4RldRaGJXPzk7YmEhRUxXZEsyQlooP08yTm9g
P2dXbTA4ZldPO0dQV2pwYD8wbT9+NEt+eS02P1VZU1IKejAjT3UoMztOeWBFdXZNQzh3K2lxQjhu
KXxNVGltb2cjSmpJe3o0UVBpNG9ESk87bDgxNUpNQFg2JjNWQklnVUVuCnpXaFRweWJrckc3X2V8
WkF7MEdzMm0mP3EzJmJlcHZ6RXZpWnNwP0RoUkJhQiYjTChRXz85QkFeKUNtMTxyKXI/OAp6TXV2
ZSshXjE8fCZkJW42REJmdzM2b04/UHpPPXU7YiE0fVhfdSlOKllkTm1CSX5ZOEVSRm8ma1dSajUw
V3ttVVkKekJAVGZBRldeMEwyc2R3UnRTLU80JTg8e2lQJTd6d2c9ZTlsZn0jLWNjdzg+WndJSk1p
YiMpZTIpaHE9e1ArcSNPCnooKlpmU3lnVmg4PnE1OSZsRU90eik4S2J1R1kkIWRaKChxN3BkVm9p
QXlGdDYzbCpAWTYoTjsrR3ZMV2QkMCkqOQp6UyhmTzJgSEQ2MC16UihyUE4hcStBTzQ1YDhmXksy
XzNzOGUoWGIzPVBCRih+QXI8WVAlVmlCS3Y4bjB3OD0maEUKendwdU01IVgxQTlRSFlRVEIkSkFm
OEwwUjc2diotdU01Qi0zXkJ1O1N5UEg+NTdVcnFMQSg0OylTOSpTcUtzK3UyCnpBdSRreVRYNEc8
LTdHaDF1Kj5WK0o7JiFuQCFrTGg7UllUYXVFRmN3ek0rWF5Xe0hHcXEqPlNGQGhxK0xgfmtWUgp6
STAyc0RsaEBXPG4+TzFSU0R0bERieVRoUjNJPm5xdnMlQj4pa3g2fmNDUGFETHJ3X3IwMDAwME5r
dlhYdTBtamYKRCMpJHg3CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvdGh1bWJWZXJ0LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW1hZ2VzL3RodW1iVmVydC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ2MDgxNWU1ZjU5YTNiYTRmZDU5NTQ5M2UzYzg3MzEzYmFiNTNiZGUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAK
SGNtVj9kMDAwMDEKCmxpdGVyYWwgNTY3CnpjbVYtNzA/N1N8UCk8aDszS3xMazAwMGUxTkpMVHEw
MDBYQjAwMThkMV5AczZHM3ooMDAwMDAxYjVjaF8wSXRwKQp6PT5QeCM4RldRaGJXPzk7YmEhRUxX
ZEsyQlooP08yTm9gP2dXbTA4ZldPO0dQV2pwYD8wbkFCNkt+eS02P1VZKzkKekx7U3ZTTjRYbmJY
dipZNEdibyo1bkRDOytTTWxWe3J5JGYhamQmMntNSntDJk8yKTArTj05Sl9HdFFaRGpNSkg4CnpU
KmxtUVhPX0pWbn44NUF8NX5sfi1vTGY+ZFJjIyE+UlV4NXY8JWJPKzI3eVMrdCR8Rk1iMCVPaWI+
PzxhSD4rUgp6dyVSbTVLZlNAUyZKNTRyMExOV3FaTUs9K3g7a0F1ekVpTkVxTjNiemFJbmNxKG1q
TWl1TW14Zmw+R1NVZ1orS0cKejd2R1VYeE4+NCpibjVCSjR+YXdedlJONVduM0tza05SanxuPitt
R3VzdTAjWTlFVyVEYyQ1SEgkZHhTMXEoS2FoCnprTXxfUClneEArYFArMFJsWXlWWVZyPTRlcE15
cUkpcSR7NDVJbTRkQzRhJWBiUDlzT1g5WUdJNGMhUjBofmdjWQp6RlkjKih5IShLaShBPj1Re0tO
bjdVeFNVYHU+NGhrODVmcXFiVzwzd19hK2dFZ2RpNCtENjIlZnpQJnZJWmF1PGsKemIoc2xhLU9r
Uk1NLVZ1OGQ2NSopenpCemY7UD5CeSQ4IXphK3A4a28/bjwrSFY0VWFPNUQxN01pYWIwI2FOelQ/
CnpBUDhQP3h6NTMyOEp3b1JrJmpnP0Qre09pOW1gJVNwdiFkelM2MyZueWdZWUo5RXFXaGdlb0Nr
KkpRTzAmRCFsdAp6KCRVY3R0Z2tOeSM+UGYkZFZRQGEqWHlWWE5vWVEyTHZMJk5KUXE8SGVGdnZe
IzZ3ZnslLTtZMjAwMm92UERITGsKRlYxbik5MnR4bj4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aWNrTWFyay5wbmcgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aWNrTWFyay5wbmcKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGM0MTg2OTE2OGJhODIyM2ZiZGYyZWQ1ZDBmOGVjZWI0ZGE2Nzgy
ZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjkxMAp6Y21WLWszIShJaFApPGg7
M0t8TGswMDBlMU5KTFRxMDAwUjkwMDBVSTFeQHM2Vyg5UDwwMDBWNFgrdUwkUC10Ji0KeloqeXBH
YTNEIVRMbStUK1opUnoxV2RIenArTVFFcFI4IzJ8SkA/LTlMUTlCJWx1S18/NiRsX3dMV19WRGt0
UWwzCnoyQHB6JUEpKG43UU5hO0tNRmJuanBvanlHaikwNjZRN2pDSzNmS3FhQSk9MGhxbGsqaWB7
OD98WXUzRT89RlJASwp6KkZOWDBeUFJLTDJmenBubVBqKkVIR21BTUxMTCN8Z1U3X2k7cDhxcmZl
SXZXMDF5YlhXRmQzP0JMTSpUZW1wIVkKekJFU2N9MDBEVEAza1UkZk9gRV9sOUVibDg+T3pAWjBm
Mi03ejt1eH5POSs0ejA2PTw8TFokI2ZNZ2Y0R20/bCNJCnpwYWNNNSVWVDJXMDhsTGVVPytkKCgq
U14tXz9kZUYwOSV3SDYjPH07MDNaYChoKHJLckl7PldEUipGUmNTVEZ6LQp6Vz1xNjUwTjU9NkZp
QlR0TkMyPzYwS209PTMkZyRSMzstfXVoPW5OdDFiWUJyJFJpX28wRUMkVTZoYHRfSm48ezgKejVh
JWlZMEM8X1FKaD56fU1TKXVnRXBaMXxTMXVrWCZQZis1NmdGVzNWVlhjTCFnLWspR0ohTT87UGNE
PzBIQmMtCno1I1dSS3tkbXB9dUZsUmpqPHliOEUkWTdwe359Xnk8Tm9FKHQ4aFI3ME81M2coZiV3
aXZsQFVxMjdxbjtxOXlKRwp6WGtIN1RiQHoqQXZKWEpEMEhFcEdTTXpaQWVtcCF5cF4mLVIrMiFR
cSpoPDdnVFZjdnFlZzA+e1UlKiVXWjI1algKentQKj9YelR6Wi1HRl5kMzFvK14+JT1BcDk5TTYm
b2drcyQwazRPQnMzOytCYig7fiE0ViEybzw2eXM0NmFnSWNxCnpqUG8rM0I4ZnRoRGE5cXl8NzdD
ZEVjKmpLLSElWlJZQ1p2Ymt1OWlRVip+YX1DbEZZNHp+YzcrMFA/JFUhUEY9Uwp6MUF1NlE7bT4j
Zj8/MyVWcGR8bytXPVdFOTAwM1NAQnJhNlN2cD5mTzAwMmF3Zmh3Pjs4fXp7I0VXaWRGITNFc0cK
ejM7Ylg8Z2hDfDUhYUAqMjNTQHZCYSRxVH1mPGg+VSY5RUlSVUB6MV85Vz1tRVhvaXo7NGxjcX54
REd2VjVCZ3lVCnpwMX4tKmZlOGRiJE9zYypBPS0hbVZ2MU5KanRDYy1oND4tQ05DWG0jQnB9SSU2
ajM1ZWt1XnYkUWlAYXtSWSlFMwp6SiNxcCRoZz9Sd2t2cXIkR0peYnV5aGt5VmZ3RUNPKUN7I2x4
dWBjOWdocndaJn00S21udldLc282dkghOGE8M1EKenEzNik2WGI7K3RLMTBWYXp+fnFVR3NKOCNG
Mj0oYHV7Yk9WbFZpKVZCQ0hJbiN1fjZ6dE9MNz1ePCZTbWNMV2xGCnpNWmdJKjFiMEZwVklEejlT
V0grPipocmAjOTMoVW0rNmd4YTFCNmsrQ25BJW1PU0M0czUmNlV6VmxwdkBTViR9Kgp6KSlKMnNG
QSNmKEwmUF5FNXtXfUhDJUtSVU53SzY8KGh8fX0ociF7Qz1gNSs2RylOakZsZ1pqLVlxQUc5bHE/
YEMKeiRjNXljPGlxNE08UXdFNkA+PmQ+Vm5BYEVfKjNGMlFwIyNkOFJaYj1IMDFfbW1AK3xDcW5j
OVBzRyhGNUhJR19DCnp0KWFHM3VUaDduNkV0PDJJbjlGPk5sVEB6cUx0R2NYY3VWclh8TCNYeClJ
JSM5IXs2Z1NKS1ByTjlkUjYxTjMoYwp6NFRjcWkkQjFWcjhKaWRmNy10IUc3X1hSMnJXdzxWOE9L
eUdIITxzJj1hfjxnWiZnPy13a211VGs7KTJ7TnxoIysKejghOWhVc2o4LWAtbF97I15Ic31La0V2
YyRlWGQ0VEdnSVRLM0RsT1dSalFwKD5yKSQzWFE/fT1ocEswJlomV3t8CnplcCZzQTIzZjtRISVz
dGBRSn1HMzxHaldvM3U3NnhjcX0xbjRYY0tBZmk9Vj92Q1l8aGJ9R0E9e1Q7aURKKnVncAp6SVlU
b19HZ3FAeF5PUjtrMmppRz1fPyZjMzNGaiFNbS1CdiMtVzJhQzt3Yy1aRyklY01XbjYyam1ZMEBU
dDRPTysKenQ0SGctSG0+Y2JvdTw3LXlJSzJ6NG5mQ0NDdE4yLVhPR1NXbyMjezhRe0FUdXJ4cn47
SWB5dERzJXhiaXB9UnpQCnp6aXl9UW40WjJ+ZlN5Y21yYH56Sj1sVUZkRmExPmdaVGhHNk0re2c3
dmtXOCMrWUhWYUpqRkZ9WiMqM0AkSl9CeQp6THRWb19MIzFKclZWQntBay01PTRxdCEtQE1ofWM+
IyQ0a2g8ODgpbSMtazwlQ0x0ekVQM2xlVm5vPj08cllXWDcKek9nbGArJkNKY0ImRE5QVW4+e2h0
R1V1RDtvN2JEKXdfc1gkU31lQXh3enk/VXZnQkgoUz87I0haaVFNb1MqMksyCnpUM3hlN3Qofm5V
KjFONXtyeEI7UVBMb2NucDRNbD51PF5GWnd5QyFudTt0aFcrcGV+NHd0Wm58VmkjdygjamVCZAp6
bGY5RkR4X3lvUEpxSGJrKiQlNTZTezs2S3Z+bTxXUnl5OUEmWWJRKWVafTthPWBVd2smaylicEd2
bEBzJVBHV1oKem9sfjNCTWBzc2p4cFJaX2g+TTkhZzNCKEtKfSNSWiNAKSFoPFZ0aylhYjRraCgp
RkYydnp4OzBzTjFqWkh0dVFlCnpodW9qY0dAbUorU3U9Q2MhXmxKNlFSVUc7MyFqeFJZdX5KWFBl
Vl9FWFNMQGVGSm11fVNGUDh1eDIxUWdfaElpQgp6S0s0RnhwV3tCYEpVOEFsLWRTSkZIXjheWng2
NG4lWj1QUjstJFE+Unw3OERxfElxLWFmRiVLRTFCcm5fZm07SW0Kel88RFJIem03alQraHo4JCsz
aTckcHQoVTZMNjNzMWc1fC1qQSF4fCNrZ1h5Mj1hfGxzJlM/JlhQPTRzdiY8QTFXCnpWVDszbDNA
MyQkZzskMEBqJk8pcjhxcVBBSEZ3ZTZMdiFDbWBiM3NRLWtXREpQZFRxR047Tjd6c3hFM2crQmRw
MQp6eDxBRylXPzlWRFNlO2wmWSljJERFLUoxelpmdzVhe08kOUg7K142UDw5aXBGRlVWYlJkNztr
Ml5vNkd1c1YpKk0KekkrajM4aCl5X15ASWVxTnMxfVNSQClMSUBqdFk2ZzlsfmNLRlZReTlofWM3
MURqclZxTkdlVHdsSSlTWkhGK2UoCnpHbz51JHhyOFVGa2kxTHtPeD5HMG8pKCZSQVo7PXxJPXdO
Mmw5NztjTGFISDZsZVRCLVhYYSpoJWRCT0V2aWAreAp6aT89VHhsP1RhZHZ5aUw+U3VGfi1MWjt8
Y1N9NH5sMmVNfm5TN3lKPmlPTTthdERZOyg/YVpedittSlYkQDFPdGUKejYyY1BVbEQ0SVdPSUl4
JlNtd1F+WUJ7bnphZTNQYzt9ciFmaEVAaXdKaCtPc0RzOXpJdEw7fnB1NzE1SGRRRUdBCnpVY3Qo
TyFMPFF2PmtDeTE8JU5DZyt9R2AwUGdwTm0tP2RALWhNZ05lNl5WK2o2eCRiPDZAUzwkKzw0XzFo
aX1UaQp6bmNTNExzakl9ZldZMT5PWDZmZU1FdUxFcm1hM1FMbWt3P1grMWopWC0mVkJrXzRZO0VG
UEZfSStxOzlkTCVFfkIKekpoOzROcl4oTEVKM215VVJQPEUoUjV0Rj8tTCt4WV8tQGhlOCsqTD1I
MDsmZVRmRiFFS0ZQa0BSUkw4XiluP1VZCnpgJF93PV9kbCtRc19GUWFgKXlzVlBIbDFSI3s8Iz57
UmJsc3clNTdUKWc5NzNSOG8pREU5KnhOI347NF9vJHElbwp6NEtAdWBqaHgyZkJYQzR7PG12WWIt
fWZGM0lAKSVPZCN2RkgoO3MjblhCe3RVTFluZkxNdz9UYmAmKGpMeD0ra0wKeihibnFUZGkrUCo5
fWs9fkpYdns0XkhqLWMrVWJKUmxWfGVKakdkTDhlU1IrYSsrZj9Id3RNR2UmZmpWZVp8fU1nCnpi
bTd1UHxCTDU0eWdTWlpeMDsqSnZmSmVvU0daVDJ1UjMzQz5VOFFueyolKkIkR2U9bm55JEhBWXF7
PXZ5fHNJMAp6X3ZzcytIX3FNa3k/T0IjfEpLIT5JWCZJSV5MbFVoI3JPNSE3VHRid0M7aVVMeVYt
WHE/eWJCfXlrR1B7P0xwWj8Kei1HfGpiVG1JYkdANyNaQ3o7fmVZKGNETSgyOER5cXsqbT5NND9f
aXluVUJrYzRUa0hVSTZnVCE7eS1mej5ITWNkCnomdCVVZ28pYFkyez4hY3g3QjdESSkkNztKKFV7
U3BtLTNnQnppb1Zfe3AhSCQ4TCEqTSFwMHVIJCNecHtVaTRQYAp6P1pKMjRjT0NEZS13I2paZD8w
QCl8N2lLS147NktOYDshQHlsbTckKm5EaEsmR2NEVHkwMDBKSk9HaVdpMDAwMDAKejBRcDBeZSpn
ZGczMjtiUmF7dkdmNjk1MVU2OUU5NG9FUUtBMDAocVFPK15SWDFgUTdoNyM7OUdze2pCMWtWITtB
CnpSMmI4WiZtbkY/MFQ2YFlae2U5OTAxUV9eYUQ9Kl4wRWUhcjBLcnd6MVRONHNBVzAycD1tfClX
Qm4qTl8wd29QaAp6dlRGYUMtUWZrKmxZSmo1JCltSUMzZTIkWXtGQ3M4REYqbks8WTYkdjNabz5O
SGh6dlNtTjtSSS15fU8rQXBCczAKejQ7O2AtQF9EYDhLJDE7VzRlXmQ2d3MlRXQrZn4ofkhHU1Bl
JjdXNTVfUDBCbzBwWj49VDZKSVVfeTdPXjA3KnFvCklNNk48JGc4MzA7KiNIMGwKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhv
bGxvd1BpbGxCbHVlLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL3RpbWVsaW5lSG9sbG93UGlsbEJsdWUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkYzcyNDJiYWYxMjkxZjlkMTFmNWJmM2E0YzY3YmZhZWFkODUzZmEyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDM0ODUKemNtVjtPNFB4PyVQKTxoOzNLfExrMDAwZTFOSkxU
cTAwMUBzMDAwZ00xXkBzNldOaHlwMDAwMDlhN2JCbTAwMFhVCnowMDBYVTBSV251N3l0a1lQaWFG
I1AqNy1aYlo+S0xaKlUrPExxaX5OYSZLbTdZLUlvZGMtb3kpWEgtK143Q3JhZwp6Xmc+SUJmUnN5
YlFXWGR3UWJMUD42cDx6PkFxZnlsaCN7ZmI2O1oodk1NVlN+JGVAUz1qKmZ0ZzY7VWg8aVZEflYK
ejxSUE10Z1FKTHclS1BEYXFpZmNAX3ZYJDF3YndyOXRuOzAtJmotSz00MzxiVVE4aj1Kc1hgdFI7
RGc3KyNeS35ICnpLIUZNKlp+emJwdnQlSzJ7VVpTWV88bFMqRDxaJUx6NW9HdSgrZGF5eiloUkxG
ZFQ+ZjU5JmdoVG1nV0QwbDsqVAp6STc8a0M2YVlZYWp6WHBZS3Q9KDhvdFAkNTBINmNfVjlSNC07
e1pAQzBBTUc3PUY8UnhvJW9yMTBSVVQrQXIlM2oKemtwTGhRV3IjIW9YZ2RJYCZzS14+MDlZXnA2
bFAxcklSTXgjMDVDfmNXPUhfQXcqYkotNURUJloybit4KVFIWF5wCnowMGVzZ1Y4fG1RY21SWiUw
MkReQFMzTDE2dGBPJWMwMDROSXZPS3ZZSVlvaDYyclkzM1M2NDBgRDklWTJELTw/aQp6MCU0aiFG
MlpANDg4VSUxNTgoNjYwMDV3bzYlcFdyXlpqX3Y0ekFBNUhqY0lxVW9HbXQyTEI+clYmbmVoJiNR
MWkKejAwN34xZSRvQ2NGUzhuZUl8aEpsey1QIUIxWlo5aHBtcTApWDBpYEp3RSY+JCtFPz4lXzxs
UypNV0srbisxY2dmCno8ayg4WUxSKD9WU0FHNnghZTc4d3tjUVB1SnBBfGQ7SilHe2ZpaGl6TStF
cmIhcCF0Y3I1dythMzR+KFk9OHM0Rwp6dytzTEw5biZKak5uKktKRGlxXlU1XjtgMW52Qy1AcjZQ
JCFrfTFVeygqST1RLXpAdEJLSG9JfXV4ZFU1ZHl5QHUKelUxSjBHT0Q3T21iaW1eRzAwOHA0Wl42
X2sybV5wPGdXPUQyfEw7SGpOMSFERGZNIVhPYVIyfmJMP2tYJCVDa1NtCnoybWs7P3BuKW98S155
ZUo3JWFkQjlLaStMITMrRmdIaVNZWCNLSi1sTEpETW45Q0JiT3RiIyUpaFJ2YFlEcXRfdgp6S3Bp
eHxRRH15ZmExSmlRUmsjajRhMVopbjIlZjx4eW56Vj5MQzZSYlZJa1V4MGIrXytCYVIzY25UN1p2
IUFKeFcKeml6RmIpaCFqeUdPT1o4NUY7YT9EQVhQe21AOyEwX0lmcTxFeHsqN2AwNVhGN2hQKzJI
bCEzQlFKPTZAZkwlRkNvCno4aVlvbzMoI2JBRmBBRFNwcXRRZ3Y+SDgoSGxnUnh0N3MzfWszS2Br
RnU+Pi0yUSRRTUZmUFchTGF7aDMzNm8+WAp6dV9DTXR0SHY2elI7JlpOaVM9WDh2M0NSI2ZrblV4
SFV4SjxBWW1Sc05MV2wqUFN7QU9BUkh0IzUhd2tpMj9LO3QKeiFZM2s9czd0Z2F4KUolcjctQkxw
aGdlN35CaTBnKzZFNl5aaChwOVRCb2N7M0dBRnJeMCFndT9STUhhQ00kJkZsCnpCazMldW4+MHVv
QmFfTTZXTldlcUlnfjZRRTY5YzlvI2V5aEd2cGlPQUBXLWFvbms8N3IxKD9mQ3tvSTVOKlUhNAp6
PHV2NjZXdGNLU1JpbTB4LUtlMmQ1akJybUxhbXs7UW07e21zMXIxR25tTnNiN0QtRWB0KWk5Rjhm
WGAyX2kzLV8KemJoOzdVbF4jeCkme3h2Uz18fHw3PW1ZZTMzPU1gQWdVNSh4Qz5mZz0yTi03PWNO
bmpqT3J7eXJpeTZtTUZnRyNsCnpuQ0Y9Zm5RdjhDRHorK282X0xzY2x9ZVErbF5aSEFSSD4/X3NA
fCMjUnI2S0xSRkExJVErPSpSUldub0xzUmA3VQp6dDV2RjxRMHI0MFEpajY9c0U0WCZzQmN0MXE8
JmZiaTNWQjJPdjZ0QHEqMCk7VSpvKlNBUFp2fHZ2QDJhWVluVDAKemIlOGErQ2I3LWdlMEQwa25F
ZjVRaSNAOFRwKmNle047NmxwUXVDQiVLTF9LT2FybTVjUDZfOElyPGUxN2lyeTZPCnpEZEgmYHJa
aH5zRj1icTlzK08wUVNnU35AUUw5Sm15Kjk0eHI9Nnl+TVl+ITFmZXR+KE4rKDw9TWB3QEQxKWIr
cAp6KjtDITgzYTF1TEp2I05TRX47eSM4PTw+SWNmVzNAP3dGcHdVVnhyVlo+UWRRejMyS0llSn1r
fntjWlpFXit5YT8KejJEMXojMkhPbkk3KEIlX2FjP3t3RlVRO1FRQTF0Qkt0cldybTBfM1JncHMr
P0pmcWJ7alliY1FYfnRhUkI7IyR5CnpaTntTfTF8fWdVT0hKeGM/d1YzZnh1eittSjRgIUYkSVo7
bXFSck5zSEpkIyMqRH5qdT1iUDc/LT92fnxjdj52Qgp6c0o2SWVOd1ZaeHJkalRgeWwjYkJJYSNH
eFJhI3hNTXk7SyNDRHl5R3lRZE1TeGxXVCN0RGU/cCE/NXdUJCtvR3QKejhMO0twMkhVUS1aTUo9
M1hKUXY7eDVjaSo/dnVUZmVZJDsoe1hHV19odUlGUjlhPGZKYkZefDRJI3hRfm4kRGM9CnpLWWhq
WW1nejVOU2tEbTgqZlptezZVITtZWGBORz4oP0AzKVhTczhPXk41UnlPTT1UVG1wKDM9OF4renB6
MnIpQwp6Xj5KT3tkZVpmc28zb3EzP1dvKFk/bCRnZT91WG87JXJ1YFZvPj88PCg4SV8+OzhFcSNL
TVM5Z0ZsKm5lZW9zU0IKemZvSFluQlFJa3dreW93UHUoemRtc2Bwezw3ZTRrcmEtWldxPDIqT3NH
VHZFViVzMFRkJGhYVCshKjhCbmgyS01lCnpCbVpSb2RqSFY/citfNV5YOUowV0w0aktXYH1sZiVB
LXw0NElAQExUdmYxckhqRyh6ZTYrd0BKdCVCdmp0cyFYMAp6PzJ4Uz9fdmVfLWs8TXVqZzswTHoq
M2J1Rz0zJEcmZWhlcHRobE4qJEthT3lTU1FebldtbzwwTSsoVUVVTUVYUlEKek1CYlpjRjs2K0tF
bE0+aUtCX0tpSmxaJDlHYGNePUVAb05HKW1XV2FOby0zVElXOCkkSGcwVWItfjg/S2h2Sj4kCnoz
KiZuaW1AbWooYUN4RTUhdHtsdzdPNV4wRUlPN3pPbyZjNmw8K3xpRHlTQldDR3J6QEM1e1N0IVgz
aEFBfWBUNAp6KFRMYlhUcSsoO0A8PUw4ZFhuc3N5ZnR8dyNXU1RXPCsrMz5zZ1MlKDROVHBlSS1W
QXFifDdzc0p2ek5IZ09aVnUKemFZQ3ZnT19SMX4+U3lMPWNGVXx+Z3xoeXxaaX19czkrZH5sWXFP
QjcxejlaJHduQz1wUjlZejREaElNPldtamd1CnomNTZvNm1hQ3BDJkYjI3klRzsxUG9iUjlpP0du
Tmc7Z1l0Y2hEJXAxOWEhZVF0WkYmM0phS3YzM2daPDhEfjQ3RQp6dFVTMWl3a21EYVBwaj0kbSMl
KWpDVkVZNGZuTEdOZzJBLWBZd0hWRDNndn07PiloQXZUfkFtcVM+THJgYGk3a3cKekp7NV9JdGB5
ckJtbGMyNURCTzdFODs1Vm96blI+V3c1aEFheG4kMn4ocWAlQS1ZdVM2NHdrQnk9OWRtYDRjWGVY
Cno0Y31JQD9lK0ZXK2JAXlJEQkhWKHduTXEyemRYM1NXdjl1YCV7eEMtcSpVfSZgY3lYViglclJU
Klo2TUg/aStpJgp6X0I4QygrZ3JUJXtYV1VRK2ZATm9QMVI9QVcmMjZ7di1keClpS14tTm1pdWo4
dHhqIW0/WipTczFOe2RoNHp9MDEKeilZVG8qSnljU1UpK181cjQjeXc5eys7aTRFZSRwZVJnSWor
O3Y7WkdkRjFLJDNFJWV+NExhSShqQy11JTJoJCZSCno5Y0xYY1lDQFh3bm5zJmJuKV9RflRlP3Jv
S0dEfGQtZ144OythQ3t7RygxXihPN20zN1kxLSs2KTAxY04meTFhdwp6b3Fje1RgUF5YSnFQQmJJ
VzZzfWQ0e3pfZjVPbT92TWdOUUVKRz92MlQ9S1lkXjBNM0k2SVp4Ym55KSV2WlImTEQKekpwUGxA
UHNoOFF5UEJAS1R4K0BSZGNDIUtYN31rRW87U3xqXnUybFU3WFF9T287Znw7ejRMbCtfcj5AMS14
bDN8Cnphd3EtSCVlJmNrQytAQWhQclA2Qks8ej08TCowa2ZLVUBDWCp6ZXFiWVFUNCheVT5UI19Y
ZFQ3JjtGNzFqfUpveQp6a0N+NmxoN0VANm87V0BeSXBSTlp7cHRMdEwoZ1EtQ1l+NG1xVztVUzda
eHZtX3xAeXomZTUzQnBfbFRQbGZQfHoKenJUeXhfPmx2QHgjPV4hUHpSN3FxRjwkZ21gfFpKWis7
PClDcXUmb3Q8YXs4MURGMH5ydkdyNVhyfjh1YGxhdjFoCnoxRE55dFY+Mno9MDAwMFdWQE9nPjAw
NFI9MDA0bDQwMDg7XzAwNG1MMDA0Q2AwMDhQPjAwMjZlMDAwK25sMyZGfQp6MDAwOFdOa2w8WmMt
cXZJT0s0UFE3PjF3IW9IS0p+OyNAS3xRJUg8JERGe0szWHAwcjBQXmNGUVAzPE83WGxiQnwKemko
WGRRM0F6eFpiPDxVTXJCKUZOcF5HaklMU1J9S1JmSH5qcDtsXiQ1YCNgTT0wWSsjbGJKYT09bD96
emFVZkVjCnoxeUExSGY4cG5Velc0bjtiOWkpfFAxKzg4MFVRQ2NZejxYX09PPnlPQ08yPUlPPD4x
PiVPNCl6Um9wKk4jYG9NVQp6TEd9QzhBe1ZheVlrfH1LZ1lUWmRJQVE/c299OWw5e1BnOT8xOCZh
P0Jfe3FAOz9+UzZeWXRqUEs7MWMpbXdTQVUKenpTaHFWWFpxWitVKyNXJjw7RTJsZEg7T0p1ezd9
Sz1tJiRse2FsJnZEXil5fnU7OXlGJUF1SzV1dD99eTRWflViCnpPWj8rVWB4KSR1YDFvQUtCMDZ5
R284aH0yRiNQNlYtfG1CWmM1LSVYaEZuX2E+Y1FJaGdDSkZSOU05cjdubTgmRQp6Qk5EcUFIIUFr
eng0cms+I1FvbVVWPXBvTSl+b0sxS2lAZTRvYnJIIXoyeT9XUEZpTXtCVGVpMnhNYSQ2K2NOcGsK
emFYZCs/VjxORT13UyM3KHdMST5xcDhWfXopOW1jZEFyaWdhPjlKeUhRX1IqNFgtOSpRTE0+Wihh
Vl5QRTA1MElCCnp2dkYlaFlPWEU+Xll5cTtLdjVmKTBVVihBYTREbn04fVBmY25NfXFRbGZke3JM
JmlBamBAUnUzK3FKJFBHV3txKAp6I01VfXMqSmk0VmdiQF9HT1IwUTE5enlOYm5EdUppak1Sc2Bi
az1odldOTnlHaW9NIzJWcjZsMHs7ei1UT3pxOFcKei0kQzFVP2VwVTBTTXE1KW0yeC1Jc0cya2Js
YHZCM1AxJl4pSTtFNnBhc1N+MClkJGxKPEc5fWZjJmNKbT84eGxCCnp6cHYqVFlzSWU4NCUjQjZw
c2pESFhrdEt+VEIpRjdRRUwkITV2KUY5ckZ6Pk1WP01maEB6YUczJDVjPzJUUHBVegp6TzctP3di
OXJgZUR4MWZzTDUrZ3dlOyQ2V2hebkI5cU52MSNqVjBRUnJKNkQzbFl2OEBQanYyaXN5ejhUbGZi
PygKelNhXyRrVDA1ZDV4ZWFLMlg0UmV9KnsxZVQzc2o3OENJJHxEKV9ROE5CKEh6fEEzWXViK29N
eUNKSXItWjAwMDAwCkxOa3ZYWHUwbWpmYno3RXUKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxHcmF5LnBuZyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lSG9sbG93
UGlsbEdyYXkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTFhNGY1OTQ2ODVm
M2ZiOGQ2NGMxZjAxZDA0OGU2M2EzYmYzOTZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRl
cmFsIDM0NTAKemNtVi09NFRiV0ZQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUBzMDAwZ00xXkBzNldO
aHlwMDAwMDlhN2JCbTAwMFhVCnowMDBYVTBSV251N3l0a1lQaWFGI1AqNy1aYlo+S0xaKlUrPExx
aX5OYSZLbTdZLUlvZGMtb3kpWEgtK143Q3JhZwp6Xmc+SUJmUnN5YlFXWGR3UWJMUD42cDx6PkFx
ZnlsaCN7ZmI2O1oodk1NVlN+JGVAUz1qKmZ0ZzY7VWg8aVZEflYKejxSUE10Z1FKTHclS1BEYXFp
ZmNAX3ZYJDF3YndyOXRuOzAtJmotSz00MzxiVVE4aj1Kc1hgdFI7RGc3KyNeS35ICnpLIUZNKlp+
emJwdnQlSzJ7VVpTWV88bFMqRDxaJUx6NW9HdSgrZGF5eiloUkxGZFQ+ZjU5JmdoVG1nV0QwbDsq
VAp6STc8a0M2YVlZYWp6WHBZS3Q9KDhvdFAkNTBINmNfVjlSNC07e1pAQzBBTUc3PUY8UnhvJW9y
MTBSVVQrQXIlM2oKemtwTGhRV3IjIW9YZ2RJYCZzS14+MDlZXnA2bFAxcklSTXgjMDVDfmNXPUhf
QXcqYkotNURUJloybit4KVFIWF5wCnowMGVzZ1Y4fG1RY21SWiUwMkReQFMzTDE2dGBPJWMwMDRO
SXZPS3ZZSVlvaDYyclkzM1M2NDBgRDklWTJELTw/aQp6MCU0aiFGMlpANDg4VSUxNTgoNjYwMDV3
bzYlcFdyXlpqX3Y0ekFBNUhqY0lxVW9HbXQyTEI+clYmbmVoJiNRMWkKejAwN34xZSRvQ2NGUzhu
ZUl8aEpsey1QIUIxWlo5aHBtcTApWDBpYEp3RSY+JCtFPz4lXzxsUypNV0srbisxY2dmCno8ayg4
WUxSKD9WU0FHNnghZTc4d3tjUVB1SnBBfGQ7SilHe2ZpaGl6TStFcmIhcCF0Y3I1dythMzR+KFk9
OHM0Rwp6dytzTEw5biZKak5uKktKRGlxXlU1XjtgMW52Qy1AcjZQJCFrfTFVeygqST1RLXpAdEJL
SG9JfXV4ZFU1ZHl5QHUKelUxSjBHT0Q3T21iaW1eRzAwOHA0Wl42X2sybV5wPGdXPUQyfEw7SGpO
MSFERGZNIVhPYVIyfmJMP2tYJCVDa1NtCnoybWs7P3BuKW98S155ZUo3JWFkQjlLaStMITMrRmdI
aVNZWCNLSi1sTEpETW45Q0JiT3RiIyUpaFJ2YFlEcXRfdgp6S3BpeHxRRH15ZmExSmlRUmsjajRh
MVopbjIlZjx4eW56Vj5MQzZSYlZJa1V4MGIrXytCYVIzY25UN1p2IUFKeFcKeml6RmIpaCFqeUdP
T1o4NUY7YT9EQVhQe21AOyEwX0lmcTxFeHsqN2AwNVhGN2hQKzJIbCEzQlFKPTZAZkwlRkNvCno4
aVlvbzMoI2JBRmBBRFNwcXRRZ3Y+SDgoSGxnUnh0N3MzfWszS2BrRnU+Pi0yUSRRTUZmUFchTGF7
aDMzNm8+WAp6dV9DTXR0SHY2elI7JlpOaVM9WDh2M0NSI2ZrblV4SFV4SjxBWW1Sc05MV2wqUFN7
QU9BUkh0IzUhd2tpMj9LO3QKeiFZM2s9czd0Z2F4KUolcjctQkxwaGdlN35CaTBnKzZFNl5aaChw
OVRCb2N7M0dBRnJeMCFndT9STUhhQ00kJkZsCnpCazMldW4+MHVvQmFfTTZXTldlcUlnfjZRRTY5
YzlvI2V5aEd2cGlPQUBXLWFvbms8N3IxKD9mQ3tvSTVOKlUhNAp6PHV2NjZXdGNLU1JpbTB4LUtl
MmQ1akJybUxhbXs7UW07e21zMXIxR25tTnNiN0QtRWB0KWk5RjhmWGAyX2kzLV8KemJoOzdVbF4j
eCkme3h2Uz18fHw3PW1ZZTMzPU1gQWdVNSh4Qz5mZz0yTi03PWNObmpqT3J7eXJpeTZtTUZnRyNs
CnpuQ0Y9Zm5RdjhDRHorK282X0xzY2x9ZVErbF5aSEFSSD4/X3NAfCMjUnI2S0xSRkExJVErPSpS
Uldub0xzUmA3VQp6dDV2RjxRMHI0MFEpajY9c0U0WCZzQmN0MXE8JmZiaTNWQjJPdjZ0QHEqMCk7
VSpvKlNBUFp2fHZ2QDJhWVluVDAKemIlOGErQ2I3LWdlMEQwa25FZjVRaSNAOFRwKmNle047Nmxw
UXVDQiVLTF9LT2FybTVjUDZfOElyPGUxN2lyeTZPCnpEZEgmYHJaaH5zRj1icTlzK08wUVNnU35A
UUw5Sm15Kjk0eHI9Nnl+TVl+ITFmZXR+KE4rKDw9TWB3QEQxKWIrcAp6KjtDITgzYTF1TEp2I05T
RX47eSM4PTw+SWNmVzNAP3dGcHdVVnhyVlo+UWRRejMyS0llSn1rfntjWlpFXit5YT8KejJEMXoj
MkhPbkk3KEIlX2FjP3t3RlVRO1FRQTF0Qkt0cldybTBfM1JncHMrP0pmcWJ7alliY1FYfnRhUkI7
IyR5CnpaTntTfTF8fWdVT0hKeGM/d1YzZnh1eittSjRgIUYkSVo7bXFSck5zSEpkIyMqRH5qdT1i
UDc/LT92fnxjdj52Qgp6c0o2SWVOd1ZaeHJkalRgeWwjYkJJYSNHeFJhI3hNTXk7SyNDRHl5R3lR
ZE1TeGxXVCN0RGU/cCE/NXdUJCtvR3QKejhMO0twMkhVUS1aTUo9M1hKUXY7eDVjaSo/dnVUZmVZ
JDsoe1hHV19odUlGUjlhPGZKYkZefDRJI3hRfm4kRGM9CnpLWWhqWW1nejVOU2tEbTgqZlptezZV
ITtZWGBORz4oP0AzKVhTczhPXk41UnlPTT1UVG1wKDM9OF4renB6MnIpQwp6Xj5KT3tkZVpmc28z
b3EzP1dvKFk/bCRnZT91WG87JXJ1YFZvPj88PCg4SV8+OzhFcSNLTVM5Z0ZsKm5lZW9zU0IKemZv
SFluQlFJa3dreW93UHUoemRtc2Bwezw3ZTRrcmEtWldxPDIqT3NHVHZFViVzMFRkJGhYVCshKjhC
bmgyS01lCnpCbVpSb2RqSFY/citfNV5YOUowV0w0aktXYH1sZiVBLXw0NElAQExUdmYxckhqRyh6
ZTYrd0BKdCVCdmp0cyFYMAp6PzJ4Uz9fdmVfLWs8TXVqZzswTHoqM2J1Rz0zJEcmZWhlcHRobE4q
JEthT3lTU1FebldtbzwwTSsoVUVVTUVYUlEKek1CYlpjRjs2K0tFbE0+aUtCX0tpSmxaJDlHYGNe
PUVAb05HKW1XV2FOby0zVElXOCkkSGcwVWItfjg/S2h2Sj4kCnozKiZuaW1AbWooYUN4RTUhdHts
dzdPNV4wRUlPN3pPbyZjNmw8K3xpRHlTQldDR3J6QEM1e1N0IVgzaEFBfWBUNAp6KFRMYlhUcSso
O0A8PUw4ZFhuc3N5ZnR8dyNXU1RXPCsrMz5zZ1MlKDROVHBlSS1WQXFifDdzc0p2ek5IZ09aVnUK
emFZQ3ZnT19SMX4+U3lMPWNGVXx+Z3xoeXxaaX19czkrZH5sWXFPQjcxejlaJHduQz1wUjlZejRE
aElNPldtamd1CnomNTZvNm1hQ3BDJkYjI3klRzsxUG9iUjlpP0duTmc7Z1l0Y2hEJXAxOWEhZVF0
WkYmM0phS3YzM2daPDhEfjQ3RQp6dFVTMWl3a21EYVBwaj0kbSMlKWpDVkVZNGZuTEdOZzJBLWBZ
d0hWRDNndn07PiloQXZUfkFtcVM+THJgYGk3a3cKekp7NV9JdGB5ckJtbGMyNURCTzdFODs1Vm96
blI+V3c1aEFheG4kMn4ocWAlQS1ZdVM2NHdrQnk9OWRtYDRjWGVYCno0Y31JQD9lK0ZXK2JAXlJE
QkhWKHduTXEyemRYM1NXdjl1YCV7eEMtcSpVfSZgY3lYViglclJUKlo2TUg/aStpJgp6X0I4Qygr
Z3JUJXtYV1VRK2ZATm9QMVI9QVcmMjZ7di1keClpS14tTm1pdWo4dHhqIW0/WipTczFOe2RoNHp9
MDEKeilZVG8qSnljU1UpK181cjQjeXc5eys7aTRFZSRwZVJnSWorO3Y7WkdkRjFLJDNFJWV+NExh
SShqQy11JTJoJCZSCno5Y0xYY1lDQFh3bm5zJmJuKV9RflRlP3JvS0dEfGQtZ144OythQ3t7Rygx
XihPN20zN1kxLSs2KTAxY04meTFhdwp6b3Fje1RgUF5YSnFQQmJJVzZzfWQ0e3pfZjVPbT92TWdO
UUVKRz92MlQ9S1lkXjBNM0k2SVp4Ym55KSV2WlImTEQKekpwUGxAUHNoOFF5UEJAS1R4K0BSZGND
IUtYN31rRW87U3xqXnUybFU3WFF9T287Znw7ejRMbCtfcj5AMS14bDN8Cnphd3EtSCVlJmNrQytA
QWhQclA2Qks8ej08TCowa2ZLVUBDWCp6ZXFiWVFUNCheVT5UI19YZFQ3JjtGNzFqfUpveQp6a0N+
NmxoN0VANm87V0BeSXBSTlp7cHRMdEwoZ1EtQ1l+NG1xVztVUzdaeHZtX3xAeXomZTUzQnBfbFRQ
bGZQfHoKenJUeXhfPmx2QHgjPV4hUHpSN3FxRjwkZ21gfFpKWis7PClDcXUmb3Q8YXs4MURGMH5y
dkdyNVhyfjh1YGxhdjFoCnoxRE55dFY+Mno9MDAwMFdWQE9nPjAwNFI9MDA0bDQwMDg7XzAwNG1M
MDA0Q2AwMDhQPjAwMjZlMDAwK25sMyZGfQp6MDAwN3xOa2w8WmMtcXw3JnJqMkU3e35EQENNSTRA
ezB+ZSNkR2VwJldhOEMtTGt6SSolNj4zZCVDO3ZWK2UqcC0KeigkYVI2QDdQTSlqa1h6RipiRXpI
aDdlQj4kNi0rfWg+TXAraTYxWXtwI0I1SiF8VlJNXkJrVD5BUl4oR2hlUnxfCnpNMkFINV9Ld0lC
KEd2aXxaTVVQSTZWYUQ7eU4lJitofDl+JUpFN08+ZnJ4STFYZl9QUGY1TSYtKGFtNW0hMWVWdAp6
aipnRDd5U29kK0ZkfVBiWDlvdWQyTih7QTc+ITB+d09Zdk1eUnVfWj9pMTFiKTYtSzcxX053d1ot
YTlfd3J6WGgKeklMYGExdlRifDdJVWdIX2Z3UXdTVHdQczNsQjYzK2t7KGFPVWI/UH1AcHVmK15I
OGhSSzVDayNzSChjRz53NEJPCnpqSFJnMmJ2Pik5PmF3UDMlQ0M4R2FkQ2xHdEEoWWRyUipmRSp5
KGd8ZXR3UWhyU2lpeE9AKHV3Ylh8OUAoUCsjPgp6bUZ2MjVvYiNrPG51P31yS1JUVGJkYzdWTjc4
YmdiRnM8RWc8SypON21TdjRCJVMhcGF8MmhvQVM1ZkV0eyVneSEKelFtVSRzZipgPSo7VVE5filR
M3NmYS0tMmV6dSQqIyt1djs0UDZ0NlNlSFglbEFlZ1MjPio+d1MmRmBNKXA8Yl5lCnpreDBDbWdp
VVIxWX5jOSM4MmtKQ0BJMF5ZYH5KKXcrMU8wQVRKMmt3MTs9cXZFfCgjU0JBYk5XRC07VXZ3empx
cQp6MU9ZdEhnWDFgI282VG18X3gtTiNgYHh8MHkrfjtgbl9icyt5UFdnU3JmSUA3T3t9ZjBmaWQ8
cTkqO2kpQVA5dioKekxDRUVEUGJFcUV2Y0E1S1RDSWped0Y9SFRFWCNfZE5+SHFSR0A8SntSOD5X
PlNWU3hxeUozdHl8OSF7dWBNZS1XCnpsOTBgMnBKWHpiY1NIblBtYSkzSjNSI3ZSJVFETDRhJTda
QkM2cjFmNnBLWnl0Z0sqaGFTXmR0Pj1SPmI+V3xNTwp6bSY7QVVnaUl6UXF8QG9DV0hNUHVCb2ZO
fXtKYktIcTlUZi01fDc2dGcpeWN1IyQ/OVczJnota0Zic3UxIXYyMDkKY3t9KD84MElsc0F0c0I0
aWl+cy10MDcqcW9NNk48JGZ8NHRUY21NeloKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxHcmVlbi5wbmcgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1Bp
bGxHcmVlbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDVjNDljYmYzNzZi
MjJkNjI0N2NhOTg3ZDM5NmFmZmI3ZmY3ZGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVy
YWwgMzQ4MAp6Y21WO0o0UUtMK1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxQHMwMDBnTTFeQHM2V05o
eXAwMDAwOWE3YkJtMDAwWFUKejAwMFhVMFJXbnU3eXRrWVBpYUYjUCo3LVpiWj5LTFoqVSs8THFp
fk5hJkttN1ktSW9kYy1veSlYSC0rXjdDcmFnCnpeZz5JQmZSc3liUVdYZHdRYkxQPjZwPHo+QXFm
eWxoI3tmYjY7Wih2TU1WU34kZUBTPWoqZnRnNjtVaDxpVkR+Vgp6PFJQTXRnUUpMdyVLUERhcWlm
Y0BfdlgkMXdid3I5dG47MC0mai1LPTQzPGJVUThqPUpzWGB0UjtEZzcrI15LfkgKekshRk0qWn56
YnB2dCVLMntVWlNZXzxsUypEPFolTHo1b0d1KCtkYXl6KWhSTEZkVD5mNTkmZ2hUbWdXRDBsOypU
CnpJNzxrQzZhWVlhanpYcFlLdD0oOG90UCQ1MEg2Y19WOVI0LTt7WkBDMEFNRzc9RjxSeG8lb3Ix
MFJVVCtBciUzagp6a3BMaFFXciMhb1hnZElgJnNLXj4wOVlecDZsUDFySVJNeCMwNUN+Y1c9SF9B
dypiSi01RFQmWjJuK3gpUUhYXnAKejAwZXNnVjh8bVFjbVJaJTAyRF5AUzNMMTZ0YE8lYzAwNE5J
dk9LdllJWW9oNjJyWTMzUzY0MGBEOSVZMkQtPD9pCnowJTRqIUYyWkA0ODhVJTE1OCg2NjAwNXdv
NiVwV3JeWmpfdjR6QUE1SGpjSXFVb0dtdDJMQj5yViZuZWgmI1ExaQp6MDA3fjFlJG9DY0ZTOG5l
SXxoSmx7LVAhQjFaWjlocG1xMClYMGlgSndFJj4kK0U/PiVfPGxTKk1XSytuKzFjZ2YKejxrKDhZ
TFIoP1ZTQUc2eCFlNzh3e2NRUHVKcEF8ZDtKKUd7ZmloaXpNK0VyYiFwIXRjcjV3K2EzNH4oWT04
czRHCnp3K3NMTDluJkpqTm4qS0pEaXFeVTVeO2AxbnZDLUByNlAkIWt9MVV7KCpJPVEtekB0QktI
b0l9dXhkVTVkeXlAdQp6VTFKMEdPRDdPbWJpbV5HMDA4cDRaXjZfazJtXnA8Z1c9RDJ8TDtIak4x
IUREZk0hWE9hUjJ+Ykw/a1gkJUNrU20KejJtazs/cG4pb3xLXnllSjclYWRCOUtpK0whMytGZ0hp
U1lYI0tKLWxMSkRNbjlDQmJPdGIjJSloUnZgWURxdF92CnpLcGl4fFFEfXlmYTFKaVFSayNqNGEx
WiluMiVmPHh5bnpWPkxDNlJiVklrVXgwYitfK0JhUjNjblQ3WnYhQUp4Vwp6aXpGYiloIWp5R09P
Wjg1RjthP0RBWFB7bUA7ITBfSWZxPEV4eyo3YDA1WEY3aFArMkhsITNCUUo9NkBmTCVGQ28Kejhp
WW9vMygjYkFGYEFEU3BxdFFndj5IOChIbGdSeHQ3czN9azNLYGtGdT4+LTJRJFFNRmZQVyFMYXto
MzM2bz5YCnp1X0NNdHRIdjZ6UjsmWk5pUz1YOHYzQ1IjZmtuVXhIVXhKPEFZbVJzTkxXbCpQU3tB
T0FSSHQjNSF3a2kyP0s7dAp6IVkzaz1zN3RnYXgpSiVyNy1CTHBoZ2U3fkJpMGcrNkU2XlpoKHA5
VEJvY3szR0FGcl4wIWd1P1JNSGFDTSQmRmwKekJrMyV1bj4wdW9CYV9NNldOV2VxSWd+NlFFNjlj
OW8jZXloR3ZwaU9BQFctYW9uazw3cjEoP2ZDe29JNU4qVSE0Cno8dXY2Nld0Y0tTUmltMHgtS2Uy
ZDVqQnJtTGFteztRbTt7bXMxcjFHbm1Oc2I3RC1FYHQpaTlGOGZYYDJfaTMtXwp6Ymg7N1VsXiN4
KSZ7eHZTPXx8fDc9bVllMzM9TWBBZ1U1KHhDPmZnPTJOLTc9Y05uampPcnt5cml5Nm1NRmdHI2wK
em5DRj1mblF2OENEeisrbzZfTHNjbH1lUStsXlpIQVJIPj9fc0B8IyNScjZLTFJGQTElUSs9KlJS
V25vTHNSYDdVCnp0NXZGPFEwcjQwUSlqNj1zRTRYJnNCY3QxcTwmZmJpM1ZCMk92NnRAcSowKTtV
Km8qU0FQWnZ8dnZAMmFZWW5UMAp6YiU4YStDYjctZ2UwRDBrbkVmNVFpI0A4VHAqY2V7Tjs2bHBR
dUNCJUtMX0tPYXJtNWNQNl84SXI8ZTE3aXJ5Nk8KekRkSCZgclpofnNGPWJxOXMrTzBRU2dTfkBR
TDlKbXkqOTR4cj02eX5NWX4hMWZldH4oTisoPD1NYHdARDEpYitwCnoqO0MhODNhMXVMSnYjTlNF
fjt5Izg9PD5JY2ZXM0A/d0Zwd1VWeHJWWj5RZFF6MzJLSWVKfWt+e2NaWkVeK3lhPwp6MkQxeiMy
SE9uSTcoQiVfYWM/e3dGVVE7UVFBMXRCS3RyV3JtMF8zUmdwcys/SmZxYntqWWJjUVh+dGFSQjsj
JHkKelpOe1N9MXx9Z1VPSEp4Yz93VjNmeHV6K21KNGAhRiRJWjttcVJyTnNISmQjIypEfmp1PWJQ
Nz8tP3Z+fGN2PnZCCnpzSjZJZU53Vlp4cmRqVGB5bCNiQklhI0d4UmEjeE1NeTtLI0NEeXlHeVFk
TVN4bFdUI3REZT9wIT81d1QkK29HdAp6OEw7S3AySFVRLVpNSj0zWEpRdjt4NWNpKj92dVRmZVkk
Oyh7WEdXX2h1SUZSOWE8ZkpiRl58NEkjeFF+biREYz0KektZaGpZbWd6NU5Ta0RtOCpmWm17NlUh
O1lYYE5HPig/QDMpWFNzOE9eTjVSeU9NPVRUbXAoMz04Xit6cHoycilDCnpePkpPe2RlWmZzbzNv
cTM/V28oWT9sJGdlP3VYbzslcnVgVm8+Pzw8KDhJXz47OEVxI0tNUzlnRmwqbmVlb3NTQgp6Zm9I
WW5CUUlrd2t5b3dQdSh6ZG1zYHB7PDdlNGtyYS1aV3E8MipPc0dUdkVWJXMwVGQkaFhUKyEqOEJu
aDJLTWUKekJtWlJvZGpIVj9yK181Xlg5SjBXTDRqS1dgfWxmJUEtfDQ0SUBATFR2ZjFySGpHKHpl
Nit3QEp0JUJ2anRzIVgwCno/MnhTP192ZV8tazxNdWpnOzBMeiozYnVHPTMkRyZlaGVwdGhsTiok
S2FPeVNTUV5uV21vPDBNKyhVRVVNRVhSUQp6TUJiWmNGOzYrS0VsTT5pS0JfS2lKbFokOUdgY149
RUBvTkcpbVdXYU5vLTNUSVc4KSRIZzBVYi1+OD9LaHZKPiQKejMqJm5pbUBtaihhQ3hFNSF0e2x3
N081XjBFSU83ek9vJmM2bDwrfGlEeVNCV0NHcnpAQzV7U3QhWDNoQUF9YFQ0CnooVExiWFRxKyg7
QDw9TDhkWG5zc3lmdHx3I1dTVFc8KyszPnNnUyUoNE5UcGVJLVZBcWJ8N3NzSnZ6TkhnT1pWdQp6
YVlDdmdPX1Ixfj5TeUw9Y0ZVfH5nfGh5fFppfX1zOStkfmxZcU9CNzF6OVokd25DPXBSOVl6NERo
SU0+V21qZ3UKeiY1Nm82bWFDcEMmRiMjeSVHOzFQb2JSOWk/R25OZztnWXRjaEQlcDE5YSFlUXRa
RiYzSmFLdjMzZ1o8OER+NDdFCnp0VVMxaXdrbURhUHBqPSRtIyUpakNWRVk0Zm5MR05nMkEtYFl3
SFZEM2d2fTs+KWhBdlR+QW1xUz5McmBgaTdrdwp6Sns1X0l0YHlyQm1sYzI1REJPN0U4OzVWb3pu
Uj5XdzVoQWF4biQyfihxYCVBLVl1UzY0d2tCeT05ZG1gNGNYZVgKejRjfUlAP2UrRlcrYkBeUkRC
SFYod25NcTJ6ZFgzU1d2OXVgJXt4Qy1xKlV9JmBjeVhWKCVyUlQqWjZNSD9pK2kmCnpfQjhDKCtn
clQle1hXVVErZkBOb1AxUj1BVyYyNnt2LWR4KWlLXi1ObWl1ajh0eGohbT9aKlNzMU57ZGg0en0w
MQp6KVlUbypKeWNTVSkrXzVyNCN5dzl7KztpNEVlJHBlUmdJais7djtaR2RGMUskM0UlZX40TGFJ
KGpDLXUlMmgkJlIKejljTFhjWUNAWHdubnMmYm4pX1F+VGU/cm9LR0R8ZC1nXjg7K2FDe3tHKDFe
KE83bTM3WTEtKzYpMDFjTiZ5MWF3CnpvcWN7VGBQXlhKcVBCYklXNnN9ZDR7el9mNU9tP3ZNZ05R
RUpHP3YyVD1LWWReME0zSTZJWnhibnkpJXZaUiZMRAp6SnBQbEBQc2g4UXlQQkBLVHgrQFJkY0Mh
S1g3fWtFbztTfGpedTJsVTdYUX1PbztmfDt6NExsK19yPkAxLXhsM3wKemF3cS1IJWUmY2tDK0BB
aFByUDZCSzx6PTxMKjBrZktVQENYKnplcWJZUVQ0KF5VPlQjX1hkVDcmO0Y3MWp9Sm95CnprQ342
bGg3RUA2bztXQF5JcFJOWntwdEx0TChnUS1DWX40bXFXO1VTN1p4dm1ffEB5eiZlNTNCcF9sVFBs
ZlB8egp6clR5eF8+bHZAeCM9XiFQelI3cXFGPCRnbWB8WkpaKzs8KUNxdSZvdDxhezgxREYwfnJ2
R3I1WHJ+OHVgbGF2MWgKejFETnl0Vj4yej0wMDAwV1ZAT2c+MDA0Uj0wMDRsNDAwODtfMDA0bUww
MDRDYDAwOFA+MDAyNmUwMDArbmwzJkZ9CnowMDA4Uk5rbDxaYy1xdkkmdWQmJjZ2c2RKLXVMRnNC
cn08ZUhpNUpXRGt5ez93bjE3Y2goZlV7d3N2RHk3NmxjZAp6dzYzfW5MPVp2eTJlP3VFTVdJayF4
SlZSM0JMeCklNW1CdHcjO0I+TFBSMytuV18mWjVkM289aDxIQyRhLTNxPU8KenhOdGY1YTUqMm89
WH1rbmNrVz9aVG45Vl85MG0mUGpGPCE3ZUNmI0N7UHZ7VDI2aFpNZCo5NnVtblZreTxHV3gtCnpQ
K2g1aSNgS2xmUXM5fGVrQnB1PCE1YVgwVGtwMzZaPVhFeWcxZiU1aSUpLUBXaWgtJkJWTmZZUHwq
IUM5TmZWRQp6KFIrRCpfYz9kcmB8fmU7RmcqPiZJTVkpczJZaTB+dyRsXitMam10cVUmckFeY15P
IUNfIzBVVE9Oc2xzX1AzRmEKencxTmpsQTdeWkhGVkRYSk5VRjtDJU1WQHImSTZfPGNpJWEmY2tD
YyVlfG5CVWlweWNVSVRRTHpQM3pnelN+UDE9CnpBe2FAO2Qyem02PmZpTz8lKyomJXJwOFdsPSV5
KW1WZzlXcmZUdW0rO0JhTXh1ak5ENTs7TmQ+KylRcHJtUEA3bgp6JGF6Kld0NV9tNzNnZUI5XzB8
ayhwWnZELWlLIUlGa1hSMSZjQzRLRTUkbVJrKF9FK25RTFF2d1h4amAhMHIpc18KejEoITZYUSlB
VklqYnZyTz5IdWs/TGpWQDIpdVVefnJiQkwhTE8hMjIjdjB1VGolY2pXQVA5XnROWikzKE52Klly
CnpxKkNqRlVBJEtSayhofFZPNCQjUihvc159al9+PnZNPkJza1NNV1RJOTYhXytrV31DOGpwQUg9
clQpYj8zdCNRNAp6Pj94QTtidGlTKnlEXmBaN00lRDFzQWZ6K2c7Km9uKCEzP0lqZiZ+YEVVaks7
WTRQV2xiPjxaU1Blb0huXzBoI0kKenN+QCU2clNqbU9LMTh+ZXU3KEZCRD90QmZMcShERmtDVm5p
XylBRmphdzlkeTk2eHZCPEpCIU5QfC1gMD5LKTZNCno4fE5GPGplWXImNTV8Qmhze2o3QGVgV2wk
Q3EpdmF5JXkxMD4oLTFoa0tLSzBlNzBCVERPLWd3NEB8YUpxeC17Sgp6PWRnJHRSa24+YFI+YWY0
RX49ISFvVjh+NXU5TUBQelpweUJfVUF1fS12PEM2U1dRSm9rbFBnaTAwMDA8TU5VTW4KR0xTVFp6
d35xPHsKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy90aW1lbGluZUhvbGxvd1BpbGxPcmFuZ2UucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsT3JhbmdlLnBuZwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc0ODVmNjI4NGVhZTYwZjUzMTZkYTI2ZTQ3OTkxNTQ3
ZTIzMTVkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmlu
YXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzNDgwCnpjbVY7SjRRS0wr
UCk8aDszS3xMazAwMGUxTkpMVHEwMDFAczAwMGdNMV5AczZXTmh5cDAwMDA5YTdiQm0wMDBYVQp6
MDAwWFUwUldudTd5dGtZUGlhRiNQKjctWmJaPktMWipVKzxMcWl+TmEmS203WS1Jb2RjLW95KVhI
LSteN0NyYWcKel5nPklCZlJzeWJRV1hkd1FiTFA+NnA8ej5BcWZ5bGgje2ZiNjtaKHZNTVZTfiRl
QFM9aipmdGc2O1VoPGlWRH5WCno8UlBNdGdRSkx3JUtQRGFxaWZjQF92WCQxd2J3cjl0bjswLSZq
LUs9NDM8YlVROGo9SnNYYHRSO0RnNysjXkt+SAp6SyFGTSpafnpicHZ0JUsye1VaU1lfPGxTKkQ8
WiVMejVvR3UoK2RheXopaFJMRmRUPmY1OSZnaFRtZ1dEMGw7KlQKekk3PGtDNmFZWWFqelhwWUt0
PSg4b3RQJDUwSDZjX1Y5UjQtO3taQEMwQU1HNz1GPFJ4byVvcjEwUlVUK0FyJTNqCnprcExoUVdy
IyFvWGdkSWAmc0tePjA5WV5wNmxQMXJJUk14IzA1Q35jVz1IX0F3KmJKLTVEVCZaMm4reClRSFhe
cAp6MDBlc2dWOHxtUWNtUlolMDJEXkBTM0wxNnRgTyVjMDA0Tkl2T0t2WUlZb2g2MnJZMzNTNjQw
YEQ5JVkyRC08P2kKejAlNGohRjJaQDQ4OFUlMTU4KDY2MDA1d282JXBXcl5aal92NHpBQTVIamNJ
cVVvR210MkxCPnJWJm5laCYjUTFpCnowMDd+MWUkb0NjRlM4bmVJfGhKbHstUCFCMVpaOWhwbXEw
KVgwaWBKd0UmPiQrRT8+JV88bFMqTVdLK24rMWNnZgp6PGsoOFlMUig/VlNBRzZ4IWU3OHd7Y1FQ
dUpwQXxkO0opR3tmaWhpek0rRXJiIXAhdGNyNXcrYTM0fihZPThzNEcKencrc0xMOW4mSmpObipL
SkRpcV5VNV47YDFudkMtQHI2UCQha30xVXsoKkk9US16QHRCS0hvSX11eGRVNWR5eUB1CnpVMUow
R09EN09tYmltXkcwMDhwNFpeNl9rMm1ecDxnVz1EMnxMO0hqTjEhRERmTSFYT2FSMn5iTD9rWCQl
Q2tTbQp6Mm1rOz9wbilvfEteeWVKNyVhZEI5S2krTCEzK0ZnSGlTWVgjS0otbExKRE1uOUNCYk90
YiMlKWhSdmBZRHF0X3YKektwaXh8UUR9eWZhMUppUVJrI2o0YTFaKW4yJWY8eHluelY+TEM2UmJW
SWtVeDBiK18rQmFSM2NuVDdadiFBSnhXCnppekZiKWghanlHT09aODVGO2E/REFYUHttQDshMF9J
ZnE8RXh7KjdgMDVYRjdoUCsySGwhM0JRSj02QGZMJUZDbwp6OGlZb28zKCNiQUZgQURTcHF0UWd2
Pkg4KEhsZ1J4dDdzM31rM0tga0Z1Pj4tMlEkUU1GZlBXIUxhe2gzMzZvPlgKenVfQ010dEh2NnpS
OyZaTmlTPVg4djNDUiNma25VeEhVeEo8QVltUnNOTFdsKlBTe0FPQVJIdCM1IXdraTI/Szt0Cnoh
WTNrPXM3dGdheClKJXI3LUJMcGhnZTd+QmkwZys2RTZeWmgocDlUQm9jezNHQUZyXjAhZ3U/Uk1I
YUNNJCZGbAp6QmszJXVuPjB1b0JhX002V05XZXFJZ342UUU2OWM5byNleWhHdnBpT0FAVy1hb25r
PDdyMSg/ZkN7b0k1TipVITQKejx1djY2V3RjS1NSaW0weC1LZTJkNWpCcm1MYW17O1FtO3ttczFy
MUdubU5zYjdELUVgdClpOUY4ZlhgMl9pMy1fCnpiaDs3VWxeI3gpJnt4dlM9fHx8Nz1tWWUzMz1N
YEFnVTUoeEM+Zmc9Mk4tNz1jTm5qak9ye3lyaXk2bU1GZ0cjbAp6bkNGPWZuUXY4Q0R6KytvNl9M
c2NsfWVRK2xeWkhBUkg+P19zQHwjI1JyNktMUkZBMSVRKz0qUlJXbm9Mc1JgN1UKenQ1dkY8UTBy
NDBRKWo2PXNFNFgmc0JjdDFxPCZmYmkzVkIyT3Y2dEBxKjApO1UqbypTQVBadnx2dkAyYVlZblQw
CnpiJThhK0NiNy1nZTBEMGtuRWY1UWkjQDhUcCpjZXtOOzZscFF1Q0IlS0xfS09hcm01Y1A2XzhJ
cjxlMTdpcnk2Twp6RGRIJmByWmh+c0Y9YnE5cytPMFFTZ1N+QFFMOUpteSo5NHhyPTZ5fk1ZfiEx
ZmV0fihOKyg8PU1gd0BEMSliK3AKeio7QyE4M2ExdUxKdiNOU0V+O3kjOD08PkljZlczQD93RnB3
VVZ4clZaPlFkUXozMktJZUp9a357Y1paRV4reWE/CnoyRDF6IzJIT25JNyhCJV9hYz97d0ZVUTtR
UUExdEJLdHJXcm0wXzNSZ3BzKz9KZnFie2pZYmNRWH50YVJCOyMkeQp6Wk57U30xfH1nVU9ISnhj
P3dWM2Z4dXorbUo0YCFGJElaO21xUnJOc0hKZCMjKkR+anU9YlA3Py0/dn58Y3Y+dkIKenNKNkll
TndWWnhyZGpUYHlsI2JCSWEjR3hSYSN4TU15O0sjQ0R5eUd5UWRNU3hsV1QjdERlP3AhPzV3VCQr
b0d0Cno4TDtLcDJIVVEtWk1KPTNYSlF2O3g1Y2kqP3Z1VGZlWSQ7KHtYR1dfaHVJRlI5YTxmSmJG
Xnw0SSN4UX5uJERjPQp6S1loalltZ3o1TlNrRG04KmZabXs2VSE7WVhgTkc+KD9AMylYU3M4T15O
NVJ5T009VFRtcCgzPTheK3pwejJyKUMKel4+Sk97ZGVaZnNvM29xMz9XbyhZP2wkZ2U/dVhvOyVy
dWBWbz4/PDwoOElfPjs4RXEjS01TOWdGbCpuZWVvc1NCCnpmb0hZbkJRSWt3a3lvd1B1KHpkbXNg
cHs8N2U0a3JhLVpXcTwyKk9zR1R2RVYlczBUZCRoWFQrISo4Qm5oMktNZQp6Qm1aUm9kakhWP3Ir
XzVeWDlKMFdMNGpLV2B9bGYlQS18NDRJQEBMVHZmMXJIakcoemU2K3dASnQlQnZqdHMhWDAKej8y
eFM/X3ZlXy1rPE11amc7MEx6KjNidUc9MyRHJmVoZXB0aGxOKiRLYU95U1NRXm5XbW88ME0rKFVF
VU1FWFJRCnpNQmJaY0Y7NitLRWxNPmlLQl9LaUpsWiQ5R2BjXj1FQG9ORyltV1dhTm8tM1RJVzgp
JEhnMFViLX44P0todko+JAp6MyombmltQG1qKGFDeEU1IXR7bHc3TzVeMEVJTzd6T28mYzZsPCt8
aUR5U0JXQ0dyekBDNXtTdCFYM2hBQX1gVDQKeihUTGJYVHErKDtAPD1MOGRYbnNzeWZ0fHcjV1NU
VzwrKzM+c2dTJSg0TlRwZUktVkFxYnw3c3NKdnpOSGdPWlZ1CnphWUN2Z09fUjF+PlN5TD1jRlV8
fmd8aHl8Wml9fXM5K2R+bFlxT0I3MXo5WiR3bkM9cFI5WXo0RGhJTT5XbWpndQp6JjU2bzZtYUNw
QyZGIyN5JUc7MVBvYlI5aT9Hbk5nO2dZdGNoRCVwMTlhIWVRdFpGJjNKYUt2MzNnWjw4RH40N0UK
enRVUzFpd2ttRGFQcGo9JG0jJSlqQ1ZFWTRmbkxHTmcyQS1gWXdIVkQzZ3Z9Oz4paEF2VH5BbXFT
PkxyYGBpN2t3CnpKezVfSXRgeXJCbWxjMjVEQk83RTg7NVZvem5SPld3NWhBYXhuJDJ+KHFgJUEt
WXVTNjR3a0J5PTlkbWA0Y1hlWAp6NGN9SUA/ZStGVytiQF5SREJIVih3bk1xMnpkWDNTV3Y5dWAl
e3hDLXEqVX0mYGN5WFYoJXJSVCpaNk1IP2kraSYKel9COEMoK2dyVCV7WFdVUStmQE5vUDFSPUFX
JjI2e3YtZHgpaUteLU5taXVqOHR4aiFtP1oqU3MxTntkaDR6fTAxCnopWVRvKkp5Y1NVKStfNXI0
I3l3OXsrO2k0RWUkcGVSZ0lqKzt2O1pHZEYxSyQzRSVlfjRMYUkoakMtdSUyaCQmUgp6OWNMWGNZ
Q0BYd25ucyZibilfUX5UZT9yb0tHRHxkLWdeODsrYUN7e0coMV4oTzdtMzdZMS0rNikwMWNOJnkx
YXcKem9xY3tUYFBeWEpxUEJiSVc2c31kNHt6X2Y1T20/dk1nTlFFSkc/djJUPUtZZF4wTTNJNkla
eGJueSkldlpSJkxECnpKcFBsQFBzaDhReVBCQEtUeCtAUmRjQyFLWDd9a0VvO1N8al51MmxVN1hR
fU9vO2Z8O3o0TGwrX3I+QDEteGwzfAp6YXdxLUglZSZja0MrQEFoUHJQNkJLPHo9PEwqMGtmS1VA
Q1gqemVxYllRVDQoXlU+VCNfWGRUNyY7Rjcxan1Kb3kKemtDfjZsaDdFQDZvO1dAXklwUk5ae3B0
THRMKGdRLUNZfjRtcVc7VVM3Wnh2bV98QHl6JmU1M0JwX2xUUGxmUHx6CnpyVHl4Xz5sdkB4Iz1e
IVB6UjdxcUY8JGdtYHxaSlorOzwpQ3F1Jm90PGF7ODFERjB+cnZHcjVYcn44dWBsYXYxaAp6MURO
eXRWPjJ6PTAwMDBXVkBPZz4wMDRSPTAwNGw0MDA4O18wMDRtTDAwNENgMDA4UD4wMDI2ZTAwMCtu
bDMmRn0KejAwMDhSTmtsPFpjLXF2S1BpUnpFNm88ZTI/dDMkdG5QZVZnNjZ4NTBSdUQ/ZSFYUE5O
cGltRylQM3h1PE5+PDdoCnp5WGlgPlBfVWJCdj5UVSN4PV58KHh7KlMjMU9xa0BwfGxpaXQ1OXJl
cXRScSRxV1N3V25mSzxzZHJ1YztYYXR1OQp6VXcme21fWiUrdzxEQiFtUn1GdSlrMlRyPWQ9Qmdm
YTt5KUgwOU91dEokaXJicmRrOGBLSmV8PGVWX1BVK2pnVjkKej83RTx1ZWVmJVAtTW5haygrNzZG
YWhBYyQwSnk5MW94dF4taHJpTEsmVGJhJi1rPyRXZ0x0V3lTfEZWLWs/R3QqCnomLU1YY0o5JGt7
LTJVIyY0P2xtO3lNdnI8UlYpTUM9e3QwKXg3Kks5OEBtTEs3bnd9NGc3I0tZT0o/R3taWjRIPQp6
NmxCWUxQWWB6WUdrV2VMQms8Oy1HaD1fZHp6NX50eX1ocSpmMUJ4eyheIypnUVYka355IXp5I3N+
ektqcT5hZ2YKek57clBqRCg0cUV5NUQ+SjxBdzYzZmlLd24pYHhuMD9DTFMjT0JkS3YrRXw5a1FJ
Zj9lWHt6a2QjPU5PPzxPYEFPCnpENFcpVEMwM2taQzA/MHBFRHM2I0xeU2J9WUE8YWpqXiYtIWpR
SmlSRUxSWFc4fkI5UEYyN0w2JkRiPVhoNmJgOwp6R3FEVHg+UClQSUImWmRvO0ZFfVMxMnttbkly
anZUa1chb0UrUz1MX2orUyp7aUg/P1JIbWg+bDxmRXViejR7TnYKeipsRyp4KjBhaChGY0MkNmdC
UUVTTDUkSnMwP1poX2ttTHEpOFB8PShyU0BiVFc5M0d4Ni1RPWZwOGZYbCZwU0pNCnp4KFhDaipn
cWU7VE1VSjlxZFdqYShwNWthQWM/U0h4WG8kS21sfFo0blZNa1koZSQhYj5MUCRedHIjUDY8b0VJ
RQp6djNrKCVfaktrRjg8dURVeVZOUj5OKDBEUlNHMG16VTlxdiQ9OWp0bWMrbmBPSzBiY19tIzVG
Y28rc1dsQkQ/UVIKekU/dTNQWXdSZklKKFF5bUU2N1VAZXpsT1JjZHxsa2d4UjNVWSFGdEpRYiN7
SypmLXFEYjNzfVUpcVNBPFkwdzt+CnomV0hRME5WfUUpK0F1OX1AKjwhQ01qV012S1J3dmpjO1Q7
QHcpeSRMXnpRKWxZZjdlfihrSTZOMDAwMDxNTlVNbgpHTFNUWjcod0VAPwoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lSG9sbG93
UGlsbFB1cnBsZS5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy90aW1lbGluZUhvbGxvd1BpbGxQdXJwbGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4ZGY4YTU2YzBmMThkZmI2NWM4YzQ0MjYxZGYwYTZiNjlhNDEzNTY1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDM0NzYKemNtVjtGNFF1aj1QKTxoOzNLfExrMDAwZTFOSkxU
cTAwMUBzMDAwZ00xXkBzNldOaHlwMDAwMDlhN2JCbTAwMFhVCnowMDBYVTBSV251N3l0a1lQaWFG
I1AqNy1aYlo+S0xaKlUrPExxaX5OYSZLbTdZLUlvZGMtb3kpWEgtK143Q3JhZwp6Xmc+SUJmUnN5
YlFXWGR3UWJMUD42cDx6PkFxZnlsaCN7ZmI2O1oodk1NVlN+JGVAUz1qKmZ0ZzY7VWg8aVZEflYK
ejxSUE10Z1FKTHclS1BEYXFpZmNAX3ZYJDF3YndyOXRuOzAtJmotSz00MzxiVVE4aj1Kc1hgdFI7
RGc3KyNeS35ICnpLIUZNKlp+emJwdnQlSzJ7VVpTWV88bFMqRDxaJUx6NW9HdSgrZGF5eiloUkxG
ZFQ+ZjU5JmdoVG1nV0QwbDsqVAp6STc8a0M2YVlZYWp6WHBZS3Q9KDhvdFAkNTBINmNfVjlSNC07
e1pAQzBBTUc3PUY8UnhvJW9yMTBSVVQrQXIlM2oKemtwTGhRV3IjIW9YZ2RJYCZzS14+MDlZXnA2
bFAxcklSTXgjMDVDfmNXPUhfQXcqYkotNURUJloybit4KVFIWF5wCnowMGVzZ1Y4fG1RY21SWiUw
MkReQFMzTDE2dGBPJWMwMDROSXZPS3ZZSVlvaDYyclkzM1M2NDBgRDklWTJELTw/aQp6MCU0aiFG
MlpANDg4VSUxNTgoNjYwMDV3bzYlcFdyXlpqX3Y0ekFBNUhqY0lxVW9HbXQyTEI+clYmbmVoJiNR
MWkKejAwN34xZSRvQ2NGUzhuZUl8aEpsey1QIUIxWlo5aHBtcTApWDBpYEp3RSY+JCtFPz4lXzxs
UypNV0srbisxY2dmCno8ayg4WUxSKD9WU0FHNnghZTc4d3tjUVB1SnBBfGQ7SilHe2ZpaGl6TStF
cmIhcCF0Y3I1dythMzR+KFk9OHM0Rwp6dytzTEw5biZKak5uKktKRGlxXlU1XjtgMW52Qy1AcjZQ
JCFrfTFVeygqST1RLXpAdEJLSG9JfXV4ZFU1ZHl5QHUKelUxSjBHT0Q3T21iaW1eRzAwOHA0Wl42
X2sybV5wPGdXPUQyfEw7SGpOMSFERGZNIVhPYVIyfmJMP2tYJCVDa1NtCnoybWs7P3BuKW98S155
ZUo3JWFkQjlLaStMITMrRmdIaVNZWCNLSi1sTEpETW45Q0JiT3RiIyUpaFJ2YFlEcXRfdgp6S3Bp
eHxRRH15ZmExSmlRUmsjajRhMVopbjIlZjx4eW56Vj5MQzZSYlZJa1V4MGIrXytCYVIzY25UN1p2
IUFKeFcKeml6RmIpaCFqeUdPT1o4NUY7YT9EQVhQe21AOyEwX0lmcTxFeHsqN2AwNVhGN2hQKzJI
bCEzQlFKPTZAZkwlRkNvCno4aVlvbzMoI2JBRmBBRFNwcXRRZ3Y+SDgoSGxnUnh0N3MzfWszS2Br
RnU+Pi0yUSRRTUZmUFchTGF7aDMzNm8+WAp6dV9DTXR0SHY2elI7JlpOaVM9WDh2M0NSI2ZrblV4
SFV4SjxBWW1Sc05MV2wqUFN7QU9BUkh0IzUhd2tpMj9LO3QKeiFZM2s9czd0Z2F4KUolcjctQkxw
aGdlN35CaTBnKzZFNl5aaChwOVRCb2N7M0dBRnJeMCFndT9STUhhQ00kJkZsCnpCazMldW4+MHVv
QmFfTTZXTldlcUlnfjZRRTY5YzlvI2V5aEd2cGlPQUBXLWFvbms8N3IxKD9mQ3tvSTVOKlUhNAp6
PHV2NjZXdGNLU1JpbTB4LUtlMmQ1akJybUxhbXs7UW07e21zMXIxR25tTnNiN0QtRWB0KWk5Rjhm
WGAyX2kzLV8KemJoOzdVbF4jeCkme3h2Uz18fHw3PW1ZZTMzPU1gQWdVNSh4Qz5mZz0yTi03PWNO
bmpqT3J7eXJpeTZtTUZnRyNsCnpuQ0Y9Zm5RdjhDRHorK282X0xzY2x9ZVErbF5aSEFSSD4/X3NA
fCMjUnI2S0xSRkExJVErPSpSUldub0xzUmA3VQp6dDV2RjxRMHI0MFEpajY9c0U0WCZzQmN0MXE8
JmZiaTNWQjJPdjZ0QHEqMCk7VSpvKlNBUFp2fHZ2QDJhWVluVDAKemIlOGErQ2I3LWdlMEQwa25F
ZjVRaSNAOFRwKmNle047NmxwUXVDQiVLTF9LT2FybTVjUDZfOElyPGUxN2lyeTZPCnpEZEgmYHJa
aH5zRj1icTlzK08wUVNnU35AUUw5Sm15Kjk0eHI9Nnl+TVl+ITFmZXR+KE4rKDw9TWB3QEQxKWIr
cAp6KjtDITgzYTF1TEp2I05TRX47eSM4PTw+SWNmVzNAP3dGcHdVVnhyVlo+UWRRejMyS0llSn1r
fntjWlpFXit5YT8KejJEMXojMkhPbkk3KEIlX2FjP3t3RlVRO1FRQTF0Qkt0cldybTBfM1JncHMr
P0pmcWJ7alliY1FYfnRhUkI7IyR5CnpaTntTfTF8fWdVT0hKeGM/d1YzZnh1eittSjRgIUYkSVo7
bXFSck5zSEpkIyMqRH5qdT1iUDc/LT92fnxjdj52Qgp6c0o2SWVOd1ZaeHJkalRgeWwjYkJJYSNH
eFJhI3hNTXk7SyNDRHl5R3lRZE1TeGxXVCN0RGU/cCE/NXdUJCtvR3QKejhMO0twMkhVUS1aTUo9
M1hKUXY7eDVjaSo/dnVUZmVZJDsoe1hHV19odUlGUjlhPGZKYkZefDRJI3hRfm4kRGM9CnpLWWhq
WW1nejVOU2tEbTgqZlptezZVITtZWGBORz4oP0AzKVhTczhPXk41UnlPTT1UVG1wKDM9OF4renB6
MnIpQwp6Xj5KT3tkZVpmc28zb3EzP1dvKFk/bCRnZT91WG87JXJ1YFZvPj88PCg4SV8+OzhFcSNL
TVM5Z0ZsKm5lZW9zU0IKemZvSFluQlFJa3dreW93UHUoemRtc2Bwezw3ZTRrcmEtWldxPDIqT3NH
VHZFViVzMFRkJGhYVCshKjhCbmgyS01lCnpCbVpSb2RqSFY/citfNV5YOUowV0w0aktXYH1sZiVB
LXw0NElAQExUdmYxckhqRyh6ZTYrd0BKdCVCdmp0cyFYMAp6PzJ4Uz9fdmVfLWs8TXVqZzswTHoq
M2J1Rz0zJEcmZWhlcHRobE4qJEthT3lTU1FebldtbzwwTSsoVUVVTUVYUlEKek1CYlpjRjs2K0tF
bE0+aUtCX0tpSmxaJDlHYGNePUVAb05HKW1XV2FOby0zVElXOCkkSGcwVWItfjg/S2h2Sj4kCnoz
KiZuaW1AbWooYUN4RTUhdHtsdzdPNV4wRUlPN3pPbyZjNmw8K3xpRHlTQldDR3J6QEM1e1N0IVgz
aEFBfWBUNAp6KFRMYlhUcSsoO0A8PUw4ZFhuc3N5ZnR8dyNXU1RXPCsrMz5zZ1MlKDROVHBlSS1W
QXFifDdzc0p2ek5IZ09aVnUKemFZQ3ZnT19SMX4+U3lMPWNGVXx+Z3xoeXxaaX19czkrZH5sWXFP
QjcxejlaJHduQz1wUjlZejREaElNPldtamd1CnomNTZvNm1hQ3BDJkYjI3klRzsxUG9iUjlpP0du
Tmc7Z1l0Y2hEJXAxOWEhZVF0WkYmM0phS3YzM2daPDhEfjQ3RQp6dFVTMWl3a21EYVBwaj0kbSMl
KWpDVkVZNGZuTEdOZzJBLWBZd0hWRDNndn07PiloQXZUfkFtcVM+THJgYGk3a3cKekp7NV9JdGB5
ckJtbGMyNURCTzdFODs1Vm96blI+V3c1aEFheG4kMn4ocWAlQS1ZdVM2NHdrQnk9OWRtYDRjWGVY
Cno0Y31JQD9lK0ZXK2JAXlJEQkhWKHduTXEyemRYM1NXdjl1YCV7eEMtcSpVfSZgY3lYViglclJU
Klo2TUg/aStpJgp6X0I4QygrZ3JUJXtYV1VRK2ZATm9QMVI9QVcmMjZ7di1keClpS14tTm1pdWo4
dHhqIW0/WipTczFOe2RoNHp9MDEKeilZVG8qSnljU1UpK181cjQjeXc5eys7aTRFZSRwZVJnSWor
O3Y7WkdkRjFLJDNFJWV+NExhSShqQy11JTJoJCZSCno5Y0xYY1lDQFh3bm5zJmJuKV9RflRlP3Jv
S0dEfGQtZ144OythQ3t7RygxXihPN20zN1kxLSs2KTAxY04meTFhdwp6b3Fje1RgUF5YSnFQQmJJ
VzZzfWQ0e3pfZjVPbT92TWdOUUVKRz92MlQ9S1lkXjBNM0k2SVp4Ym55KSV2WlImTEQKekpwUGxA
UHNoOFF5UEJAS1R4K0BSZGNDIUtYN31rRW87U3xqXnUybFU3WFF9T287Znw7ejRMbCtfcj5AMS14
bDN8Cnphd3EtSCVlJmNrQytAQWhQclA2Qks8ej08TCowa2ZLVUBDWCp6ZXFiWVFUNCheVT5UI19Y
ZFQ3JjtGNzFqfUpveQp6a0N+NmxoN0VANm87V0BeSXBSTlp7cHRMdEwoZ1EtQ1l+NG1xVztVUzda
eHZtX3xAeXomZTUzQnBfbFRQbGZQfHoKenJUeXhfPmx2QHgjPV4hUHpSN3FxRjwkZ21gfFpKWis7
PClDcXUmb3Q8YXs4MURGMH5ydkdyNVhyfjh1YGxhdjFoCnoxRE55dFY+Mno9MDAwMFdWQE9nPjAw
NFI9MDA0bDQwMDg7XzAwNG1MMDA0Q2AwMDhQPjAwMjZlMDAwK25sMyZGfQp6MDAwOE5Oa2w8WmMt
cXZJUGVAY3o2dm5ATS0qZXV+WW4qOHU0ZzBmQHM0JEIlTTVEa0tsQFZ3ezVWYV4ya3o3VTQKekUr
SyotJnxMKTRxTHM4c0I3KDlhOGk+a1BRSXdeR182TUNRWExRb2huS3ZgZSUpOTViJFB0VHtMQzxl
X0lVTFVLCnplQ05DMzspeTtpUXlHOVcwR2FASnVyZD9eKDA4ZjdlUlRQd1NPKFMjO080JWdKTiVu
PXU3a19hUnxNNlVfZmRweQp6eS1AJXopTmVZXytqNG1XMEg4UjE5ZX0mMSZMN2wqPHoqT3R7dGM2
KF5HTUFzSTJPcTVEPyN+c0ZLUVkkO019ejsKej9kODRVbz54eW9YaEJEQihKPmMqeDI7YCFZeTQm
cWdTU1ZhPV8yUF5DOEFQQyM7SVVyIV8yMzdaN3l2YWptTjdJCnorQGomaSoqbDd2dDkkTnJlYnhh
Uyt1QmY3diNvdzM5JFghUSVNe1VNKGkldTd3UnRIdUM0XitCS3sxbWNRV3sqIQp6PytiWDNKbko3
YGQjSDBlX0JQak9GWVhVQDBfZkhPPnsoTThNRUpGWmBST2J9dytCb2FoPytpY1BMbW9yKWlGZyUK
elg3V31obFRIbmdQXlpVLTYyZjBtM1JATlM3Yz1IWkxCZmpMJmBMeEsxdkJSTjJHaEZLJD58P1Fp
RWh8KTdSM3JPCnprK05vVEtHVU4+dFNTSU4wKkVESThRMlI5d15yKEx5V0spTUBjak5KRElePClB
djczZkV9ejN4Y24qcUd0Tylpcgp6OGt2U0ZGam81bUNBIUhpMWt6Umw3PWJpZlBxIUdsVFBJT0s8
bSk3ZSlXaE5faE5rMXc/Pj4lPCl0Mzd6ZnQraHMKelVNOCM5Z0hKLXwjanJaaEtzISYhclY1KTIz
bWpsQWh3dEdUT2htPmxBPjw3SigxfVNnUWBAS1QkZTxPbHtBSHo7CnpWNVVHZU8kfClXaCNCTWUj
UyM7azJ9QkJ0WXxKTCZpMk44K0xXcTtzQTljcVU5Yip2RjJXR1c8QjBrblhvMF9XaQp6Nyt5I3JL
K00wfEk+PDN6b1FhcjB0ZFBua2tqeH12TFdxdiR5N3RHI0l2dT1wWU5HJmxDOXxgS1hWZFd9WDdW
IUEKejY0YWt0YChGfUV0fXleczA3NjJAJElXJForMjg3JW40Zj40cDkyN2xlTndTI3NUKWlIMDAw
MDxNTlVNbkxTVFpoCkMoe1grUAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbFJlZC5wbmcgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxSZWQucG5n
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjA3MTllMjc0M2M0OTIzODRmN2JmMWUw
MzgwMTZiMzBlY2FjYTYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDM0ODYKemNt
VjtQNFBvKyRQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUBzMDAwZ00xXkBzNldOaHlwMDAwMDlhN2JC
bTAwMFhVCnowMDBYVTBSV251N3l0a1lQaWFGI1AqNy1aYlo+S0xaKlUrPExxaX5OYSZLbTdZLUlv
ZGMtb3kpWEgtK143Q3JhZwp6Xmc+SUJmUnN5YlFXWGR3UWJMUD42cDx6PkFxZnlsaCN7ZmI2O1oo
dk1NVlN+JGVAUz1qKmZ0ZzY7VWg8aVZEflYKejxSUE10Z1FKTHclS1BEYXFpZmNAX3ZYJDF3Yndy
OXRuOzAtJmotSz00MzxiVVE4aj1Kc1hgdFI7RGc3KyNeS35ICnpLIUZNKlp+emJwdnQlSzJ7VVpT
WV88bFMqRDxaJUx6NW9HdSgrZGF5eiloUkxGZFQ+ZjU5JmdoVG1nV0QwbDsqVAp6STc8a0M2YVlZ
YWp6WHBZS3Q9KDhvdFAkNTBINmNfVjlSNC07e1pAQzBBTUc3PUY8UnhvJW9yMTBSVVQrQXIlM2oK
emtwTGhRV3IjIW9YZ2RJYCZzS14+MDlZXnA2bFAxcklSTXgjMDVDfmNXPUhfQXcqYkotNURUJloy
bit4KVFIWF5wCnowMGVzZ1Y4fG1RY21SWiUwMkReQFMzTDE2dGBPJWMwMDROSXZPS3ZZSVlvaDYy
clkzM1M2NDBgRDklWTJELTw/aQp6MCU0aiFGMlpANDg4VSUxNTgoNjYwMDV3bzYlcFdyXlpqX3Y0
ekFBNUhqY0lxVW9HbXQyTEI+clYmbmVoJiNRMWkKejAwN34xZSRvQ2NGUzhuZUl8aEpsey1QIUIx
Wlo5aHBtcTApWDBpYEp3RSY+JCtFPz4lXzxsUypNV0srbisxY2dmCno8ayg4WUxSKD9WU0FHNngh
ZTc4d3tjUVB1SnBBfGQ7SilHe2ZpaGl6TStFcmIhcCF0Y3I1dythMzR+KFk9OHM0Rwp6dytzTEw5
biZKak5uKktKRGlxXlU1XjtgMW52Qy1AcjZQJCFrfTFVeygqST1RLXpAdEJLSG9JfXV4ZFU1ZHl5
QHUKelUxSjBHT0Q3T21iaW1eRzAwOHA0Wl42X2sybV5wPGdXPUQyfEw7SGpOMSFERGZNIVhPYVIy
fmJMP2tYJCVDa1NtCnoybWs7P3BuKW98S155ZUo3JWFkQjlLaStMITMrRmdIaVNZWCNLSi1sTEpE
TW45Q0JiT3RiIyUpaFJ2YFlEcXRfdgp6S3BpeHxRRH15ZmExSmlRUmsjajRhMVopbjIlZjx4eW56
Vj5MQzZSYlZJa1V4MGIrXytCYVIzY25UN1p2IUFKeFcKeml6RmIpaCFqeUdPT1o4NUY7YT9EQVhQ
e21AOyEwX0lmcTxFeHsqN2AwNVhGN2hQKzJIbCEzQlFKPTZAZkwlRkNvCno4aVlvbzMoI2JBRmBB
RFNwcXRRZ3Y+SDgoSGxnUnh0N3MzfWszS2BrRnU+Pi0yUSRRTUZmUFchTGF7aDMzNm8+WAp6dV9D
TXR0SHY2elI7JlpOaVM9WDh2M0NSI2ZrblV4SFV4SjxBWW1Sc05MV2wqUFN7QU9BUkh0IzUhd2tp
Mj9LO3QKeiFZM2s9czd0Z2F4KUolcjctQkxwaGdlN35CaTBnKzZFNl5aaChwOVRCb2N7M0dBRnJe
MCFndT9STUhhQ00kJkZsCnpCazMldW4+MHVvQmFfTTZXTldlcUlnfjZRRTY5YzlvI2V5aEd2cGlP
QUBXLWFvbms8N3IxKD9mQ3tvSTVOKlUhNAp6PHV2NjZXdGNLU1JpbTB4LUtlMmQ1akJybUxhbXs7
UW07e21zMXIxR25tTnNiN0QtRWB0KWk5RjhmWGAyX2kzLV8KemJoOzdVbF4jeCkme3h2Uz18fHw3
PW1ZZTMzPU1gQWdVNSh4Qz5mZz0yTi03PWNObmpqT3J7eXJpeTZtTUZnRyNsCnpuQ0Y9Zm5RdjhD
RHorK282X0xzY2x9ZVErbF5aSEFSSD4/X3NAfCMjUnI2S0xSRkExJVErPSpSUldub0xzUmA3VQp6
dDV2RjxRMHI0MFEpajY9c0U0WCZzQmN0MXE8JmZiaTNWQjJPdjZ0QHEqMCk7VSpvKlNBUFp2fHZ2
QDJhWVluVDAKemIlOGErQ2I3LWdlMEQwa25FZjVRaSNAOFRwKmNle047NmxwUXVDQiVLTF9LT2Fy
bTVjUDZfOElyPGUxN2lyeTZPCnpEZEgmYHJaaH5zRj1icTlzK08wUVNnU35AUUw5Sm15Kjk0eHI9
Nnl+TVl+ITFmZXR+KE4rKDw9TWB3QEQxKWIrcAp6KjtDITgzYTF1TEp2I05TRX47eSM4PTw+SWNm
VzNAP3dGcHdVVnhyVlo+UWRRejMyS0llSn1rfntjWlpFXit5YT8KejJEMXojMkhPbkk3KEIlX2Fj
P3t3RlVRO1FRQTF0Qkt0cldybTBfM1JncHMrP0pmcWJ7alliY1FYfnRhUkI7IyR5CnpaTntTfTF8
fWdVT0hKeGM/d1YzZnh1eittSjRgIUYkSVo7bXFSck5zSEpkIyMqRH5qdT1iUDc/LT92fnxjdj52
Qgp6c0o2SWVOd1ZaeHJkalRgeWwjYkJJYSNHeFJhI3hNTXk7SyNDRHl5R3lRZE1TeGxXVCN0RGU/
cCE/NXdUJCtvR3QKejhMO0twMkhVUS1aTUo9M1hKUXY7eDVjaSo/dnVUZmVZJDsoe1hHV19odUlG
UjlhPGZKYkZefDRJI3hRfm4kRGM9CnpLWWhqWW1nejVOU2tEbTgqZlptezZVITtZWGBORz4oP0Az
KVhTczhPXk41UnlPTT1UVG1wKDM9OF4renB6MnIpQwp6Xj5KT3tkZVpmc28zb3EzP1dvKFk/bCRn
ZT91WG87JXJ1YFZvPj88PCg4SV8+OzhFcSNLTVM5Z0ZsKm5lZW9zU0IKemZvSFluQlFJa3dreW93
UHUoemRtc2Bwezw3ZTRrcmEtWldxPDIqT3NHVHZFViVzMFRkJGhYVCshKjhCbmgyS01lCnpCbVpS
b2RqSFY/citfNV5YOUowV0w0aktXYH1sZiVBLXw0NElAQExUdmYxckhqRyh6ZTYrd0BKdCVCdmp0
cyFYMAp6PzJ4Uz9fdmVfLWs8TXVqZzswTHoqM2J1Rz0zJEcmZWhlcHRobE4qJEthT3lTU1Febldt
bzwwTSsoVUVVTUVYUlEKek1CYlpjRjs2K0tFbE0+aUtCX0tpSmxaJDlHYGNePUVAb05HKW1XV2FO
by0zVElXOCkkSGcwVWItfjg/S2h2Sj4kCnozKiZuaW1AbWooYUN4RTUhdHtsdzdPNV4wRUlPN3pP
byZjNmw8K3xpRHlTQldDR3J6QEM1e1N0IVgzaEFBfWBUNAp6KFRMYlhUcSsoO0A8PUw4ZFhuc3N5
ZnR8dyNXU1RXPCsrMz5zZ1MlKDROVHBlSS1WQXFifDdzc0p2ek5IZ09aVnUKemFZQ3ZnT19SMX4+
U3lMPWNGVXx+Z3xoeXxaaX19czkrZH5sWXFPQjcxejlaJHduQz1wUjlZejREaElNPldtamd1Cnom
NTZvNm1hQ3BDJkYjI3klRzsxUG9iUjlpP0duTmc7Z1l0Y2hEJXAxOWEhZVF0WkYmM0phS3YzM2da
PDhEfjQ3RQp6dFVTMWl3a21EYVBwaj0kbSMlKWpDVkVZNGZuTEdOZzJBLWBZd0hWRDNndn07Pilo
QXZUfkFtcVM+THJgYGk3a3cKekp7NV9JdGB5ckJtbGMyNURCTzdFODs1Vm96blI+V3c1aEFheG4k
Mn4ocWAlQS1ZdVM2NHdrQnk9OWRtYDRjWGVYCno0Y31JQD9lK0ZXK2JAXlJEQkhWKHduTXEyemRY
M1NXdjl1YCV7eEMtcSpVfSZgY3lYViglclJUKlo2TUg/aStpJgp6X0I4QygrZ3JUJXtYV1VRK2ZA
Tm9QMVI9QVcmMjZ7di1keClpS14tTm1pdWo4dHhqIW0/WipTczFOe2RoNHp9MDEKeilZVG8qSnlj
U1UpK181cjQjeXc5eys7aTRFZSRwZVJnSWorO3Y7WkdkRjFLJDNFJWV+NExhSShqQy11JTJoJCZS
Cno5Y0xYY1lDQFh3bm5zJmJuKV9RflRlP3JvS0dEfGQtZ144OythQ3t7RygxXihPN20zN1kxLSs2
KTAxY04meTFhdwp6b3Fje1RgUF5YSnFQQmJJVzZzfWQ0e3pfZjVPbT92TWdOUUVKRz92MlQ9S1lk
XjBNM0k2SVp4Ym55KSV2WlImTEQKekpwUGxAUHNoOFF5UEJAS1R4K0BSZGNDIUtYN31rRW87U3xq
XnUybFU3WFF9T287Znw7ejRMbCtfcj5AMS14bDN8Cnphd3EtSCVlJmNrQytAQWhQclA2Qks8ej08
TCowa2ZLVUBDWCp6ZXFiWVFUNCheVT5UI19YZFQ3JjtGNzFqfUpveQp6a0N+NmxoN0VANm87V0Be
SXBSTlp7cHRMdEwoZ1EtQ1l+NG1xVztVUzdaeHZtX3xAeXomZTUzQnBfbFRQbGZQfHoKenJUeXhf
Pmx2QHgjPV4hUHpSN3FxRjwkZ21gfFpKWis7PClDcXUmb3Q8YXs4MURGMH5ydkdyNVhyfjh1YGxh
djFoCnoxRE55dFY+Mno9MDAwMFdWQE9nPjAwNFI9MDA0bDQwMDg7XzAwNG1MMDA0Q2AwMDhQPjAw
MjZlMDAwK25sMyZGfQp6MDAwOFhOa2w8WmMtcXZLTz13aEM3PjF2NyYlTntpPDREcEhPe2s/N0xs
KUxwOFdCbnRxRWdVaTZCbmgkTE0/QCQKelUxZTk9amhte1FaVlJQPDZhcW50aWN0dG5RRH51MWlk
TCRFQShxNiVQOX5YMmxXYF85YkxZLUVwTm5LNWI/eEhqCnorWjtJT1UzfH1aenhReXx3Vn1nb3Nf
bm9oeiE0ek0pfkhGfmhoc2xZUEhvOylvNF5LdkE5b01FbStrQy0xMDlXUwp6Mzk4YmFUUmEmMykm
UVIkZCFfcTQ3cnFDOy04Zz84eEhSekQ3ZHFGYCFHQVg9czY0biF1KUd2bkFmNFZ1d0M1JGQKei0j
V15VdVNXR2hTSHtqPW93Jiolb05xZjgwc2gpTUprcjtoaD57PXM0eiVtclJBdkZzdEEmOzwyb2de
OU50ZGx2CnpxdXVZR3FQZ2NhZW1ROzhoQHlBc0B7TlpzYUFMPjZufChiNDJidWZ3RUg7cl5TU3kj
dXkoalohUzNBWkxCeTNEcAp6cDwyZjNBUUg8YWF+PCFAaigqZUNHZCNrfWdEM1JWbTVVeiVwU3It
b1R2ciROJnRDfV5eVjBNcDxESlNicSUlcTEKemJzUVUzISY9cmw2K2Z1MFJJQjVub1I5MGJ8NF53
SGRrQm1AKVhyR2VZeCRfZkpROWdpR0VLa21MTmRQUT5oTUJzCnpxPlEtTUV4VDRQNnQlOWpOPXEz
QFdOMytXMHlzZHkmcCQ+cj5UR2p9JDZfKCVDPyM5ck1SYiZzWGYmJGdWaVNJfAp6TnAqR3hWe01A
Z2NCM0BeMm0rczZIdFYmTD5FbE13VExIYG55Nm5ZeyQzNTVlOVpnfG84WTZQT0omS2J7I25QU1cK
emQtd00zJSVuJig4fnJRVi1EUSZMWTNxNmJoPWp7UDVzOz5qdCgwR04+WmBmQj5ydEdXV29HVypz
I2ZaMjBNfVlFCnpNJnlJUEFMb0J0JWNpcUNRd2dqemEjRT1iZ2F6bz9GMDJUfjNJLXVDbWNeOXtf
bUB8VlF0SktUcE1OaXxnUktraQp6OHN4ekooJnx7Z1RIQlk3Y3FtNjlSdUh2KkwqYTMycWJEbzB0
Z3poaFMqfHEtTn5zVWU/QytndT5zKGtEQjF7NE8KeiNmSlpPcDt8djtrKEF2dWhHQnNkd1hzQDN6
eU9udVFXS341X3R5WFNSfTVRem8+eDVgME56d2NVYy09KWJecmhYCk0wNypxb002TjwkZzRMPndh
c1U3VAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL3RpbWVsaW5lSG9sbG93UGlsbFllbGxvdy5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxZZWxsb3cucG5nCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmRiNTMzZTU3OWIxNzY1ZDE0NjA0NDc4ZDlhNTg0M2Yw
NDRkYmYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5h
cnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDM0NzIKemNtVjtCNFI3Kl5Q
KTxoOzNLfExrMDAwZTFOSkxUcTAwMUBzMDAwZ00xXkBzNldOaHlwMDAwMDlhN2JCbTAwMFhVCnow
MDBYVTBSV251N3l0a1lQaWFGI1AqNy1aYlo+S0xaKlUrPExxaX5OYSZLbTdZLUlvZGMtb3kpWEgt
K143Q3JhZwp6Xmc+SUJmUnN5YlFXWGR3UWJMUD42cDx6PkFxZnlsaCN7ZmI2O1oodk1NVlN+JGVA
Uz1qKmZ0ZzY7VWg8aVZEflYKejxSUE10Z1FKTHclS1BEYXFpZmNAX3ZYJDF3YndyOXRuOzAtJmot
Sz00MzxiVVE4aj1Kc1hgdFI7RGc3KyNeS35ICnpLIUZNKlp+emJwdnQlSzJ7VVpTWV88bFMqRDxa
JUx6NW9HdSgrZGF5eiloUkxGZFQ+ZjU5JmdoVG1nV0QwbDsqVAp6STc8a0M2YVlZYWp6WHBZS3Q9
KDhvdFAkNTBINmNfVjlSNC07e1pAQzBBTUc3PUY8UnhvJW9yMTBSVVQrQXIlM2oKemtwTGhRV3Ij
IW9YZ2RJYCZzS14+MDlZXnA2bFAxcklSTXgjMDVDfmNXPUhfQXcqYkotNURUJloybit4KVFIWF5w
CnowMGVzZ1Y4fG1RY21SWiUwMkReQFMzTDE2dGBPJWMwMDROSXZPS3ZZSVlvaDYyclkzM1M2NDBg
RDklWTJELTw/aQp6MCU0aiFGMlpANDg4VSUxNTgoNjYwMDV3bzYlcFdyXlpqX3Y0ekFBNUhqY0lx
VW9HbXQyTEI+clYmbmVoJiNRMWkKejAwN34xZSRvQ2NGUzhuZUl8aEpsey1QIUIxWlo5aHBtcTAp
WDBpYEp3RSY+JCtFPz4lXzxsUypNV0srbisxY2dmCno8ayg4WUxSKD9WU0FHNnghZTc4d3tjUVB1
SnBBfGQ7SilHe2ZpaGl6TStFcmIhcCF0Y3I1dythMzR+KFk9OHM0Rwp6dytzTEw5biZKak5uKktK
RGlxXlU1XjtgMW52Qy1AcjZQJCFrfTFVeygqST1RLXpAdEJLSG9JfXV4ZFU1ZHl5QHUKelUxSjBH
T0Q3T21iaW1eRzAwOHA0Wl42X2sybV5wPGdXPUQyfEw7SGpOMSFERGZNIVhPYVIyfmJMP2tYJCVD
a1NtCnoybWs7P3BuKW98S155ZUo3JWFkQjlLaStMITMrRmdIaVNZWCNLSi1sTEpETW45Q0JiT3Ri
IyUpaFJ2YFlEcXRfdgp6S3BpeHxRRH15ZmExSmlRUmsjajRhMVopbjIlZjx4eW56Vj5MQzZSYlZJ
a1V4MGIrXytCYVIzY25UN1p2IUFKeFcKeml6RmIpaCFqeUdPT1o4NUY7YT9EQVhQe21AOyEwX0lm
cTxFeHsqN2AwNVhGN2hQKzJIbCEzQlFKPTZAZkwlRkNvCno4aVlvbzMoI2JBRmBBRFNwcXRRZ3Y+
SDgoSGxnUnh0N3MzfWszS2BrRnU+Pi0yUSRRTUZmUFchTGF7aDMzNm8+WAp6dV9DTXR0SHY2elI7
JlpOaVM9WDh2M0NSI2ZrblV4SFV4SjxBWW1Sc05MV2wqUFN7QU9BUkh0IzUhd2tpMj9LO3QKeiFZ
M2s9czd0Z2F4KUolcjctQkxwaGdlN35CaTBnKzZFNl5aaChwOVRCb2N7M0dBRnJeMCFndT9STUhh
Q00kJkZsCnpCazMldW4+MHVvQmFfTTZXTldlcUlnfjZRRTY5YzlvI2V5aEd2cGlPQUBXLWFvbms8
N3IxKD9mQ3tvSTVOKlUhNAp6PHV2NjZXdGNLU1JpbTB4LUtlMmQ1akJybUxhbXs7UW07e21zMXIx
R25tTnNiN0QtRWB0KWk5RjhmWGAyX2kzLV8KemJoOzdVbF4jeCkme3h2Uz18fHw3PW1ZZTMzPU1g
QWdVNSh4Qz5mZz0yTi03PWNObmpqT3J7eXJpeTZtTUZnRyNsCnpuQ0Y9Zm5RdjhDRHorK282X0xz
Y2x9ZVErbF5aSEFSSD4/X3NAfCMjUnI2S0xSRkExJVErPSpSUldub0xzUmA3VQp6dDV2RjxRMHI0
MFEpajY9c0U0WCZzQmN0MXE8JmZiaTNWQjJPdjZ0QHEqMCk7VSpvKlNBUFp2fHZ2QDJhWVluVDAK
emIlOGErQ2I3LWdlMEQwa25FZjVRaSNAOFRwKmNle047NmxwUXVDQiVLTF9LT2FybTVjUDZfOEly
PGUxN2lyeTZPCnpEZEgmYHJaaH5zRj1icTlzK08wUVNnU35AUUw5Sm15Kjk0eHI9Nnl+TVl+ITFm
ZXR+KE4rKDw9TWB3QEQxKWIrcAp6KjtDITgzYTF1TEp2I05TRX47eSM4PTw+SWNmVzNAP3dGcHdV
VnhyVlo+UWRRejMyS0llSn1rfntjWlpFXit5YT8KejJEMXojMkhPbkk3KEIlX2FjP3t3RlVRO1FR
QTF0Qkt0cldybTBfM1JncHMrP0pmcWJ7alliY1FYfnRhUkI7IyR5CnpaTntTfTF8fWdVT0hKeGM/
d1YzZnh1eittSjRgIUYkSVo7bXFSck5zSEpkIyMqRH5qdT1iUDc/LT92fnxjdj52Qgp6c0o2SWVO
d1ZaeHJkalRgeWwjYkJJYSNHeFJhI3hNTXk7SyNDRHl5R3lRZE1TeGxXVCN0RGU/cCE/NXdUJCtv
R3QKejhMO0twMkhVUS1aTUo9M1hKUXY7eDVjaSo/dnVUZmVZJDsoe1hHV19odUlGUjlhPGZKYkZe
fDRJI3hRfm4kRGM9CnpLWWhqWW1nejVOU2tEbTgqZlptezZVITtZWGBORz4oP0AzKVhTczhPXk41
UnlPTT1UVG1wKDM9OF4renB6MnIpQwp6Xj5KT3tkZVpmc28zb3EzP1dvKFk/bCRnZT91WG87JXJ1
YFZvPj88PCg4SV8+OzhFcSNLTVM5Z0ZsKm5lZW9zU0IKemZvSFluQlFJa3dreW93UHUoemRtc2Bw
ezw3ZTRrcmEtWldxPDIqT3NHVHZFViVzMFRkJGhYVCshKjhCbmgyS01lCnpCbVpSb2RqSFY/citf
NV5YOUowV0w0aktXYH1sZiVBLXw0NElAQExUdmYxckhqRyh6ZTYrd0BKdCVCdmp0cyFYMAp6PzJ4
Uz9fdmVfLWs8TXVqZzswTHoqM2J1Rz0zJEcmZWhlcHRobE4qJEthT3lTU1FebldtbzwwTSsoVUVV
TUVYUlEKek1CYlpjRjs2K0tFbE0+aUtCX0tpSmxaJDlHYGNePUVAb05HKW1XV2FOby0zVElXOCkk
SGcwVWItfjg/S2h2Sj4kCnozKiZuaW1AbWooYUN4RTUhdHtsdzdPNV4wRUlPN3pPbyZjNmw8K3xp
RHlTQldDR3J6QEM1e1N0IVgzaEFBfWBUNAp6KFRMYlhUcSsoO0A8PUw4ZFhuc3N5ZnR8dyNXU1RX
PCsrMz5zZ1MlKDROVHBlSS1WQXFifDdzc0p2ek5IZ09aVnUKemFZQ3ZnT19SMX4+U3lMPWNGVXx+
Z3xoeXxaaX19czkrZH5sWXFPQjcxejlaJHduQz1wUjlZejREaElNPldtamd1CnomNTZvNm1hQ3BD
JkYjI3klRzsxUG9iUjlpP0duTmc7Z1l0Y2hEJXAxOWEhZVF0WkYmM0phS3YzM2daPDhEfjQ3RQp6
dFVTMWl3a21EYVBwaj0kbSMlKWpDVkVZNGZuTEdOZzJBLWBZd0hWRDNndn07PiloQXZUfkFtcVM+
THJgYGk3a3cKekp7NV9JdGB5ckJtbGMyNURCTzdFODs1Vm96blI+V3c1aEFheG4kMn4ocWAlQS1Z
dVM2NHdrQnk9OWRtYDRjWGVYCno0Y31JQD9lK0ZXK2JAXlJEQkhWKHduTXEyemRYM1NXdjl1YCV7
eEMtcSpVfSZgY3lYViglclJUKlo2TUg/aStpJgp6X0I4QygrZ3JUJXtYV1VRK2ZATm9QMVI9QVcm
MjZ7di1keClpS14tTm1pdWo4dHhqIW0/WipTczFOe2RoNHp9MDEKeilZVG8qSnljU1UpK181cjQj
eXc5eys7aTRFZSRwZVJnSWorO3Y7WkdkRjFLJDNFJWV+NExhSShqQy11JTJoJCZSCno5Y0xYY1lD
QFh3bm5zJmJuKV9RflRlP3JvS0dEfGQtZ144OythQ3t7RygxXihPN20zN1kxLSs2KTAxY04meTFh
dwp6b3Fje1RgUF5YSnFQQmJJVzZzfWQ0e3pfZjVPbT92TWdOUUVKRz92MlQ9S1lkXjBNM0k2SVp4
Ym55KSV2WlImTEQKekpwUGxAUHNoOFF5UEJAS1R4K0BSZGNDIUtYN31rRW87U3xqXnUybFU3WFF9
T287Znw7ejRMbCtfcj5AMS14bDN8Cnphd3EtSCVlJmNrQytAQWhQclA2Qks8ej08TCowa2ZLVUBD
WCp6ZXFiWVFUNCheVT5UI19YZFQ3JjtGNzFqfUpveQp6a0N+NmxoN0VANm87V0BeSXBSTlp7cHRM
dEwoZ1EtQ1l+NG1xVztVUzdaeHZtX3xAeXomZTUzQnBfbFRQbGZQfHoKenJUeXhfPmx2QHgjPV4h
UHpSN3FxRjwkZ21gfFpKWis7PClDcXUmb3Q8YXs4MURGMH5ydkdyNVhyfjh1YGxhdjFoCnoxRE55
dFY+Mno9MDAwMFdWQE9nPjAwNFI9MDA0bDQwMDg7XzAwNG1MMDA0Q2AwMDhQPjAwMjZlMDAwK25s
MyZGfQp6MDAwOEpOa2w8WmMtcXZLJX1aMks3eztHLT87WXBFOE9JciVWRW19MExVQjxfWGIzP05E
U19yRDdoelBDMXlRWVIKejZ8YHdue3RlTD1LX280THZ8d1B1TU0yT2FgY1A0YCghT1N7PEw1WTZY
WVNtNC1uVF9GV1VYNz1kNih5JCNyciRZCnpgI2s0fXJ3PFFkUS11THMwPyt9I2lfKWsjZk99b1g7
P3RXSyNVYCpHMFFZd2BeI3ZvKlI7WmYwQiZaaGtIPCleVgp6VExRUyspbWJ9O0BMZDNhUkBtUFE7
Qm5pNT51TS1taDI+LW44RGs4Vm5RfDxVcyNVYDYrbEpjT1BFPkR3cG5qZWwKengtbEZaTW8lOUdp
OzkmMmMpUG9HcGVhKTJNJmlwSTBHZGduQV8/S3phNFo+SEs4NHEhTTI1Unwjfkl8WTJoWDNKCnpr
UEl7KUp2STdDMUpHTXR4NCleYno4Jjh0dVl1ckN0e2RxUW0tYW9hWF5LPD8qbEEzfTVWbFJLV3FY
Mzx7O0RIJAp6KTM+NV40RmpsZT12QWwzQU4yI2NxNSlfUmdgPVJ7M3NgMT9eSCRrTkJ1dlJicHhv
M25nYDZzd1pJaEQ4U1F7JkEKeiN0NCZnRX1NUVd7RENASGN7KjcxU2tVRCVBdChWQld0b2F7UXtO
S3R0fihqMzs0KmtVcyFnMkw3bmFxR29sakxUCnpTSExFWTBEdUJPSCNkR2phMkF5VGNzKEFFUD13
JThOSks+bGNEdm9lPm41TFI9MyVWTkxRMnckVjU1dFJVamRqMQp6Z0BQYGQwXkwkVkVkPytzcHs1
Tl94N1Z2X1c/cUdeJnA9OWtSdmc4NllKVHpFJSpYTk9ueTRRPlBwKU9mKDYmbnMKeiVuLVNMMk17
fDtLeFRsKzFqK08rMSpAVEsmVl99Z0luMilmRypuZ0cxT1NiUXJJZFd+ISs3SDV4KUJLME0xM0hj
CnozbyZLZG9DM3UzWno/alJXSnFGSTdHWFk+IU5rPDY2aGEoN2ZCRHJ5MFNxQUdGLWcye1ZycTNM
cD5IJD97NE5NWgp6ZlFpOXs4Kit8WGdgT25DbVctdWs2SENpRVQ/bGRkO0BRU25AdGcrMSNmTkdk
SytEM0NkMDN5JWJgWjBsPSs3OEIKeTErTGYhR2xMbHRLd01Fbz5fVUhJX09ITDkpQk4rbD5lbTEt
eEspVEh0czc3UDAwMDA8TU5VTW5MU1RaWk1zVUNZCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVQaWxsQmx1ZS5wbmcgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZVBpbGxCbHVlLnBu
ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmOTY3ZjBhOTVkMTA0OTRlOGFkZDJl
MWMyYmY5OWNkZTk0N2U5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzNDAwCnpj
bVYtTzRZJUAlUCk8aDszS3xMazAwMGUxTkpMVHEwMDFAczAwMGdNMV5AczZXTmh5cDAwMDA5YTdi
Qm0wMDBYVQp6MDAwWFUwUldudTd5dGtZUGlhRiNQKjctWmJaPktMWipVKzxMcWl+TmEmS203WS1J
b2RjLW95KVhILSteN0NyYWcKel5nPklCZlJzeWJRV1hkd1FiTFA+NnA8ej5BcWZ5bGgje2ZiNjta
KHZNTVZTfiRlQFM9aipmdGc2O1VoPGlWRH5WCno8UlBNdGdRSkx3JUtQRGFxaWZjQF92WCQxd2J3
cjl0bjswLSZqLUs9NDM8YlVROGo9SnNYYHRSO0RnNysjXkt+SAp6SyFGTSpafnpicHZ0JUsye1Va
U1lfPGxTKkQ8WiVMejVvR3UoK2RheXopaFJMRmRUPmY1OSZnaFRtZ1dEMGw7KlQKekk3PGtDNmFZ
WWFqelhwWUt0PSg4b3RQJDUwSDZjX1Y5UjQtO3taQEMwQU1HNz1GPFJ4byVvcjEwUlVUK0FyJTNq
CnprcExoUVdyIyFvWGdkSWAmc0tePjA5WV5wNmxQMXJJUk14IzA1Q35jVz1IX0F3KmJKLTVEVCZa
Mm4reClRSFhecAp6MDBlc2dWOHxtUWNtUlolMDJEXkBTM0wxNnRgTyVjMDA0Tkl2T0t2WUlZb2g2
MnJZMzNTNjQwYEQ5JVkyRC08P2kKejAlNGohRjJaQDQ4OFUlMTU4KDY2MDA1d282JXBXcl5aal92
NHpBQTVIamNJcVVvR210MkxCPnJWJm5laCYjUTFpCnowMDd+MWUkb0NjRlM4bmVJfGhKbHstUCFC
MVpaOWhwbXEwKVgwaWBKd0UmPiQrRT8+JV88bFMqTVdLK24rMWNnZgp6PGsoOFlMUig/VlNBRzZ4
IWU3OHd7Y1FQdUpwQXxkO0opR3tmaWhpek0rRXJiIXAhdGNyNXcrYTM0fihZPThzNEcKencrc0xM
OW4mSmpObipLSkRpcV5VNV47YDFudkMtQHI2UCQha30xVXsoKkk9US16QHRCS0hvSX11eGRVNWR5
eUB1CnpVMUowR09EN09tYmltXkcwMDhwNFpeNl9rMm1ecDxnVz1EMnxMO0hqTjEhRERmTSFYT2FS
Mn5iTD9rWCQlQ2tTbQp6Mm1rOz9wbilvfEteeWVKNyVhZEI5S2krTCEzK0ZnSGlTWVgjS0otbExK
RE1uOUNCYk90YiMlKWhSdmBZRHF0X3YKektwaXh8UUR9eWZhMUppUVJrI2o0YTFaKW4yJWY8eHlu
elY+TEM2UmJWSWtVeDBiK18rQmFSM2NuVDdadiFBSnhXCnppekZiKWghanlHT09aODVGO2E/REFY
UHttQDshMF9JZnE8RXh7KjdgMDVYRjdoUCsySGwhM0JRSj02QGZMJUZDbwp6OGlZb28zKCNiQUZg
QURTcHF0UWd2Pkg4KEhsZ1J4dDdzM31rM0tga0Z1Pj4tMlEkUU1GZlBXIUxhe2gzMzZvPlgKenVf
Q010dEh2NnpSOyZaTmlTPVg4djNDUiNma25VeEhVeEo8QVltUnNOTFdsKlBTe0FPQVJIdCM1IXdr
aTI/Szt0CnohWTNrPXM3dGdheClKJXI3LUJMcGhnZTd+QmkwZys2RTZeWmgocDlUQm9jezNHQUZy
XjAhZ3U/Uk1IYUNNJCZGbAp6QmszJXVuPjB1b0JhX002V05XZXFJZ342UUU2OWM5byNleWhHdnBp
T0FAVy1hb25rPDdyMSg/ZkN7b0k1TipVITQKejx1djY2V3RjS1NSaW0weC1LZTJkNWpCcm1MYW17
O1FtO3ttczFyMUdubU5zYjdELUVgdClpOUY4ZlhgMl9pMy1fCnpiaDs3VWxeI3gpJnt4dlM9fHx8
Nz1tWWUzMz1NYEFnVTUoeEM+Zmc9Mk4tNz1jTm5qak9ye3lyaXk2bU1GZ0cjbAp6bkNGPWZuUXY4
Q0R6KytvNl9Mc2NsfWVRK2xeWkhBUkg+P19zQHwjI1JyNktMUkZBMSVRKz0qUlJXbm9Mc1JgN1UK
enQ1dkY8UTByNDBRKWo2PXNFNFgmc0JjdDFxPCZmYmkzVkIyT3Y2dEBxKjApO1UqbypTQVBadnx2
dkAyYVlZblQwCnpiJThhK0NiNy1nZTBEMGtuRWY1UWkjQDhUcCpjZXtOOzZscFF1Q0IlS0xfS09h
cm01Y1A2XzhJcjxlMTdpcnk2Twp6RGRIJmByWmh+c0Y9YnE5cytPMFFTZ1N+QFFMOUpteSo5NHhy
PTZ5fk1ZfiExZmV0fihOKyg8PU1gd0BEMSliK3AKeio7QyE4M2ExdUxKdiNOU0V+O3kjOD08Pklj
ZlczQD93RnB3VVZ4clZaPlFkUXozMktJZUp9a357Y1paRV4reWE/CnoyRDF6IzJIT25JNyhCJV9h
Yz97d0ZVUTtRUUExdEJLdHJXcm0wXzNSZ3BzKz9KZnFie2pZYmNRWH50YVJCOyMkeQp6Wk57U30x
fH1nVU9ISnhjP3dWM2Z4dXorbUo0YCFGJElaO21xUnJOc0hKZCMjKkR+anU9YlA3Py0/dn58Y3Y+
dkIKenNKNkllTndWWnhyZGpUYHlsI2JCSWEjR3hSYSN4TU15O0sjQ0R5eUd5UWRNU3hsV1QjdERl
P3AhPzV3VCQrb0d0Cno4TDtLcDJIVVEtWk1KPTNYSlF2O3g1Y2kqP3Z1VGZlWSQ7KHtYR1dfaHVJ
RlI5YTxmSmJGXnw0SSN4UX5uJERjPQp6S1loalltZ3o1TlNrRG04KmZabXs2VSE7WVhgTkc+KD9A
MylYU3M4T15ONVJ5T009VFRtcCgzPTheK3pwejJyKUMKel4+Sk97ZGVaZnNvM29xMz9XbyhZP2wk
Z2U/dVhvOyVydWBWbz4/PDwoOElfPjs4RXEjS01TOWdGbCpuZWVvc1NCCnpmb0hZbkJRSWt3a3lv
d1B1KHpkbXNgcHs8N2U0a3JhLVpXcTwyKk9zR1R2RVYlczBUZCRoWFQrISo4Qm5oMktNZQp6Qm1a
Um9kakhWP3IrXzVeWDlKMFdMNGpLV2B9bGYlQS18NDRJQEBMVHZmMXJIakcoemU2K3dASnQlQnZq
dHMhWDAKej8yeFM/X3ZlXy1rPE11amc7MEx6KjNidUc9MyRHJmVoZXB0aGxOKiRLYU95U1NRXm5X
bW88ME0rKFVFVU1FWFJRCnpNQmJaY0Y7NitLRWxNPmlLQl9LaUpsWiQ5R2BjXj1FQG9ORyltV1dh
Tm8tM1RJVzgpJEhnMFViLX44P0todko+JAp6MyombmltQG1qKGFDeEU1IXR7bHc3TzVeMEVJTzd6
T28mYzZsPCt8aUR5U0JXQ0dyekBDNXtTdCFYM2hBQX1gVDQKeihUTGJYVHErKDtAPD1MOGRYbnNz
eWZ0fHcjV1NUVzwrKzM+c2dTJSg0TlRwZUktVkFxYnw3c3NKdnpOSGdPWlZ1CnphWUN2Z09fUjF+
PlN5TD1jRlV8fmd8aHl8Wml9fXM5K2R+bFlxT0I3MXo5WiR3bkM9cFI5WXo0RGhJTT5XbWpndQp6
JjU2bzZtYUNwQyZGIyN5JUc7MVBvYlI5aT9Hbk5nO2dZdGNoRCVwMTlhIWVRdFpGJjNKYUt2MzNn
Wjw4RH40N0UKenRVUzFpd2ttRGFQcGo9JG0jJSlqQ1ZFWTRmbkxHTmcyQS1gWXdIVkQzZ3Z9Oz4p
aEF2VH5BbXFTPkxyYGBpN2t3CnpKezVfSXRgeXJCbWxjMjVEQk83RTg7NVZvem5SPld3NWhBYXhu
JDJ+KHFgJUEtWXVTNjR3a0J5PTlkbWA0Y1hlWAp6NGN9SUA/ZStGVytiQF5SREJIVih3bk1xMnpk
WDNTV3Y5dWAle3hDLXEqVX0mYGN5WFYoJXJSVCpaNk1IP2kraSYKel9COEMoK2dyVCV7WFdVUStm
QE5vUDFSPUFXJjI2e3YtZHgpaUteLU5taXVqOHR4aiFtP1oqU3MxTntkaDR6fTAxCnopWVRvKkp5
Y1NVKStfNXI0I3l3OXsrO2k0RWUkcGVSZ0lqKzt2O1pHZEYxSyQzRSVlfjRMYUkoakMtdSUyaCQm
Ugp6OWNMWGNZQ0BYd25ucyZibilfUX5UZT9yb0tHRHxkLWdeODsrYUN7e0coMV4oTzdtMzdZMS0r
NikwMWNOJnkxYXcKem9xY3tUYFBeWEpxUEJiSVc2c31kNHt6X2Y1T20/dk1nTlFFSkc/djJUPUtZ
ZF4wTTNJNklaeGJueSkldlpSJkxECnpKcFBsQFBzaDhReVBCQEtUeCtAUmRjQyFLWDd9a0VvO1N8
al51MmxVN1hRfU9vO2Z8O3o0TGwrX3I+QDEteGwzfAp6YXdxLUglZSZja0MrQEFoUHJQNkJLPHo9
PEwqMGtmS1VAQ1gqemVxYllRVDQoXlU+VCNfWGRUNyY7Rjcxan1Kb3kKemtDfjZsaDdFQDZvO1dA
XklwUk5ae3B0THRMKGdRLUNZfjRtcVc7VVM3Wnh2bV98QHl6JmU1M0JwX2xUUGxmUHx6CnpyVHl4
Xz5sdkB4Iz1eIVB6UjdxcUY8JGdtYHxaSlorOzwpQ3F1Jm90PGF7ODFERjB+cnZHcjVYcn44dWBs
YXYxaAp6MUROeXRWPjJ6PTAwMDBXVkBPZz4wMDRSPTAwNGw0MDA4O18wMDRtTDAwNENgMDA4UD4w
MDI2ZTAwMCtubDMmRn0KejAwMDdXTmtsPFpjLXF8Ny1BaHcoOUxNb041T2Y+Izl8VEA/KXJEcyhH
eEpBb1R9WSlpbyRqMF5sQkptVGklY0RhCno1SFQ8eCh3I2pWPVo+MypBfU5zYCVfeX1kM0hHM25t
Xm82MThrKHQ3UVkpSyV4flFgWnQ/UlFjVWJrTyhVd3VDKwp6MDRmPXcodGJqdjgtejt6Z2kwP1hn
b1JLa1lJX0YmKSVLYEZMWnViND5uJW5tbSpBZ1hpM3JVLT8/OSomQjIrNWMKejVre3pWbXsyTTdk
fjUremktN25IeFloPWt5dm1oLTdyNlpoY282X1QxVUZGS0kpZUN1YHs2aGhxMChNTHJPfmR6CnpZ
NG5XKSotZ3EwK0QtUXhWMEt7QGFoS2FkYWUxdT08dUY2M2NMPjFeen15fnJRNj98SWlrcyprVFo2
NF8yKGRaTQp6N0NGbytKZVdmSj5qO2VVZDxRRlRCRXorZ2lxMilVXiFPMlR2MCtkU1lwQ2clZ35S
dm4xNF9lcnchJT5jWEFwJnIKel5RaTNAJEkmY3RRVnVJQ15pSDdpQCRWNE12andnYDFoKVIwR0ty
Zm95MSNeQF5mbUorNUNiVCNkaihDVllke1h1Cno+VGVDZyhoY01gZ319UE0hZFVraSM8fnE7eFlt
YGFiYDl5bUQkP3ZyJnxCd19kTUFMWj9yfGlXSkUxbD8mMnJlRAp6XyR3WDU9fmFHWWQpTDkkdUVP
OTkhcilqJm50a2FmK29HYlJAKmtuRW5NWD8xNDNmKHlrWEFtMXEqNU9rbWo5JFMKeklTeiNYKm9w
am1odk0+RFJ9eWF5QmI4cigtYTNiSykkZnJ+SEtQI0llQEx6akFnTyE7WFVxSUpaNWMmRWFXQTVj
CnopKTIkO2k5NDNaQCFYY0VXMHg5LTNHSVo9Pzg3TkBLWGhndmJSfCFyRHx3PEErVHVRRnVsRkxN
czBTd3RBMGpyVgp6M0RITEQ5Sy1WM1RfPT8rPTdMOWlCK0ZmKSQjZTt0Xk1hckBJZSYyfDE3e2Mx
b0x5aXpvNH5OVm9uaVNpM31AVC0KZSpSQS0hYDdyPmpIY01VMG9IKypvMDAwMDxNTlVNbkxTVGFQ
e1ojd18KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy90aW1lbGluZVBpbGxHcmF5LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL3RpbWVsaW5lUGlsbEdyYXkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYjQ4ZWIyMGJkZTNkZjZjMjA5YmEyZjZkMGY2YTdhZDhkZGI3Njg3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh
bCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMzMjYKemNtVjxhMzwyfHJQKTxoOzNLfExrMDAwZTFO
SkxUcTAwMUBzMDAwZ00xXkBzNldOaHlwMDAwMDlhN2JCbTAwMFhVCnowMDBYVTBSV251N3l0a1lQ
aWFGI1AqNy1aYlo+S0xaKlUrPExxaX5OYSZLbTdZLUlvZGMtb3kpWEgtK143Q3JhZwp6Xmc+SUJm
UnN5YlFXWGR3UWJMUD42cDx6PkFxZnlsaCN7ZmI2O1oodk1NVlN+JGVAUz1qKmZ0ZzY7VWg8aVZE
flYKejxSUE10Z1FKTHclS1BEYXFpZmNAX3ZYJDF3YndyOXRuOzAtJmotSz00MzxiVVE4aj1Kc1hg
dFI7RGc3KyNeS35ICnpLIUZNKlp+emJwdnQlSzJ7VVpTWV88bFMqRDxaJUx6NW9HdSgrZGF5eilo
UkxGZFQ+ZjU5JmdoVG1nV0QwbDsqVAp6STc8a0M2YVlZYWp6WHBZS3Q9KDhvdFAkNTBINmNfVjlS
NC07e1pAQzBBTUc3PUY8UnhvJW9yMTBSVVQrQXIlM2oKemtwTGhRV3IjIW9YZ2RJYCZzS14+MDlZ
XnA2bFAxcklSTXgjMDVDfmNXPUhfQXcqYkotNURUJloybit4KVFIWF5wCnowMGVzZ1Y4fG1RY21S
WiUwMkReQFMzTDE2dGBPJWMwMDROSXZPS3ZZSVlvaDYyclkzM1M2NDBgRDklWTJELTw/aQp6MCU0
aiFGMlpANDg4VSUxNTgoNjYwMDV3bzYlcFdyXlpqX3Y0ekFBNUhqY0lxVW9HbXQyTEI+clYmbmVo
JiNRMWkKejAwN34xZSRvQ2NGUzhuZUl8aEpsey1QIUIxWlo5aHBtcTApWDBpYEp3RSY+JCtFPz4l
XzxsUypNV0srbisxY2dmCno8ayg4WUxSKD9WU0FHNnghZTc4d3tjUVB1SnBBfGQ7SilHe2ZpaGl6
TStFcmIhcCF0Y3I1dythMzR+KFk9OHM0Rwp6dytzTEw5biZKak5uKktKRGlxXlU1XjtgMW52Qy1A
cjZQJCFrfTFVeygqST1RLXpAdEJLSG9JfXV4ZFU1ZHl5QHUKelUxSjBHT0Q3T21iaW1eRzAwOHA0
Wl42X2sybV5wPGdXPUQyfEw7SGpOMSFERGZNIVhPYVIyfmJMP2tYJCVDa1NtCnoybWs7P3BuKW98
S155ZUo3JWFkQjlLaStMITMrRmdIaVNZWCNLSi1sTEpETW45Q0JiT3RiIyUpaFJ2YFlEcXRfdgp6
S3BpeHxRRH15ZmExSmlRUmsjajRhMVopbjIlZjx4eW56Vj5MQzZSYlZJa1V4MGIrXytCYVIzY25U
N1p2IUFKeFcKeml6RmIpaCFqeUdPT1o4NUY7YT9EQVhQe21AOyEwX0lmcTxFeHsqN2AwNVhGN2hQ
KzJIbCEzQlFKPTZAZkwlRkNvCno4aVlvbzMoI2JBRmBBRFNwcXRRZ3Y+SDgoSGxnUnh0N3MzfWsz
S2BrRnU+Pi0yUSRRTUZmUFchTGF7aDMzNm8+WAp6dV9DTXR0SHY2elI7JlpOaVM9WDh2M0NSI2Zr
blV4SFV4SjxBWW1Sc05MV2wqUFN7QU9BUkh0IzUhd2tpMj9LO3QKeiFZM2s9czd0Z2F4KUolcjct
QkxwaGdlN35CaTBnKzZFNl5aaChwOVRCb2N7M0dBRnJeMCFndT9STUhhQ00kJkZsCnpCazMldW4+
MHVvQmFfTTZXTldlcUlnfjZRRTY5YzlvI2V5aEd2cGlPQUBXLWFvbms8N3IxKD9mQ3tvSTVOKlUh
NAp6PHV2NjZXdGNLU1JpbTB4LUtlMmQ1akJybUxhbXs7UW07e21zMXIxR25tTnNiN0QtRWB0KWk5
RjhmWGAyX2kzLV8KemJoOzdVbF4jeCkme3h2Uz18fHw3PW1ZZTMzPU1gQWdVNSh4Qz5mZz0yTi03
PWNObmpqT3J7eXJpeTZtTUZnRyNsCnpuQ0Y9Zm5RdjhDRHorK282X0xzY2x9ZVErbF5aSEFSSD4/
X3NAfCMjUnI2S0xSRkExJVErPSpSUldub0xzUmA3VQp6dDV2RjxRMHI0MFEpajY9c0U0WCZzQmN0
MXE8JmZiaTNWQjJPdjZ0QHEqMCk7VSpvKlNBUFp2fHZ2QDJhWVluVDAKemIlOGErQ2I3LWdlMEQw
a25FZjVRaSNAOFRwKmNle047NmxwUXVDQiVLTF9LT2FybTVjUDZfOElyPGUxN2lyeTZPCnpEZEgm
YHJaaH5zRj1icTlzK08wUVNnU35AUUw5Sm15Kjk0eHI9Nnl+TVl+ITFmZXR+KE4rKDw9TWB3QEQx
KWIrcAp6KjtDITgzYTF1TEp2I05TRX47eSM4PTw+SWNmVzNAP3dGcHdVVnhyVlo+UWRRejMyS0ll
Sn1rfntjWlpFXit5YT8KejJEMXojMkhPbkk3KEIlX2FjP3t3RlVRO1FRQTF0Qkt0cldybTBfM1Jn
cHMrP0pmcWJ7alliY1FYfnRhUkI7IyR5CnpaTntTfTF8fWdVT0hKeGM/d1YzZnh1eittSjRgIUYk
SVo7bXFSck5zSEpkIyMqRH5qdT1iUDc/LT92fnxjdj52Qgp6c0o2SWVOd1ZaeHJkalRgeWwjYkJJ
YSNHeFJhI3hNTXk7SyNDRHl5R3lRZE1TeGxXVCN0RGU/cCE/NXdUJCtvR3QKejhMO0twMkhVUS1a
TUo9M1hKUXY7eDVjaSo/dnVUZmVZJDsoe1hHV19odUlGUjlhPGZKYkZefDRJI3hRfm4kRGM9CnpL
WWhqWW1nejVOU2tEbTgqZlptezZVITtZWGBORz4oP0AzKVhTczhPXk41UnlPTT1UVG1wKDM9OF4r
enB6MnIpQwp6Xj5KT3tkZVpmc28zb3EzP1dvKFk/bCRnZT91WG87JXJ1YFZvPj88PCg4SV8+OzhF
cSNLTVM5Z0ZsKm5lZW9zU0IKemZvSFluQlFJa3dreW93UHUoemRtc2Bwezw3ZTRrcmEtWldxPDIq
T3NHVHZFViVzMFRkJGhYVCshKjhCbmgyS01lCnpCbVpSb2RqSFY/citfNV5YOUowV0w0aktXYH1s
ZiVBLXw0NElAQExUdmYxckhqRyh6ZTYrd0BKdCVCdmp0cyFYMAp6PzJ4Uz9fdmVfLWs8TXVqZzsw
THoqM2J1Rz0zJEcmZWhlcHRobE4qJEthT3lTU1FebldtbzwwTSsoVUVVTUVYUlEKek1CYlpjRjs2
K0tFbE0+aUtCX0tpSmxaJDlHYGNePUVAb05HKW1XV2FOby0zVElXOCkkSGcwVWItfjg/S2h2Sj4k
CnozKiZuaW1AbWooYUN4RTUhdHtsdzdPNV4wRUlPN3pPbyZjNmw8K3xpRHlTQldDR3J6QEM1e1N0
IVgzaEFBfWBUNAp6KFRMYlhUcSsoO0A8PUw4ZFhuc3N5ZnR8dyNXU1RXPCsrMz5zZ1MlKDROVHBl
SS1WQXFifDdzc0p2ek5IZ09aVnUKemFZQ3ZnT19SMX4+U3lMPWNGVXx+Z3xoeXxaaX19czkrZH5s
WXFPQjcxejlaJHduQz1wUjlZejREaElNPldtamd1CnomNTZvNm1hQ3BDJkYjI3klRzsxUG9iUjlp
P0duTmc7Z1l0Y2hEJXAxOWEhZVF0WkYmM0phS3YzM2daPDhEfjQ3RQp6dFVTMWl3a21EYVBwaj0k
bSMlKWpDVkVZNGZuTEdOZzJBLWBZd0hWRDNndn07PiloQXZUfkFtcVM+THJgYGk3a3cKekp7NV9J
dGB5ckJtbGMyNURCTzdFODs1Vm96blI+V3c1aEFheG4kMn4ocWAlQS1ZdVM2NHdrQnk9OWRtYDRj
WGVYCno0Y31JQD9lK0ZXK2JAXlJEQkhWKHduTXEyemRYM1NXdjl1YCV7eEMtcSpVfSZgY3lYVigl
clJUKlo2TUg/aStpJgp6X0I4QygrZ3JUJXtYV1VRK2ZATm9QMVI9QVcmMjZ7di1keClpS14tTm1p
dWo4dHhqIW0/WipTczFOe2RoNHp9MDEKeilZVG8qSnljU1UpK181cjQjeXc5eys7aTRFZSRwZVJn
SWorO3Y7WkdkRjFLJDNFJWV+NExhSShqQy11JTJoJCZSCno5Y0xYY1lDQFh3bm5zJmJuKV9RflRl
P3JvS0dEfGQtZ144OythQ3t7RygxXihPN20zN1kxLSs2KTAxY04meTFhdwp6b3Fje1RgUF5YSnFQ
QmJJVzZzfWQ0e3pfZjVPbT92TWdOUUVKRz92MlQ9S1lkXjBNM0k2SVp4Ym55KSV2WlImTEQKekpw
UGxAUHNoOFF5UEJAS1R4K0BSZGNDIUtYN31rRW87U3xqXnUybFU3WFF9T287Znw7ejRMbCtfcj5A
MS14bDN8Cnphd3EtSCVlJmNrQytAQWhQclA2Qks8ej08TCowa2ZLVUBDWCp6ZXFiWVFUNCheVT5U
I19YZFQ3JjtGNzFqfUpveQp6a0N+NmxoN0VANm87V0BeSXBSTlp7cHRMdEwoZ1EtQ1l+NG1xVztV
UzdaeHZtX3xAeXomZTUzQnBfbFRQbGZQfHoKenJUeXhfPmx2QHgjPV4hUHpSN3FxRjwkZ21gfFpK
Wis7PClDcXUmb3Q8YXs4MURGMH5ydkdyNVhyfjh1YGxhdjFoCnoxRE55dFY+Mno9MDAwMFdWQE9n
PjAwNFI9MDA0bDQwMDg7XzAwNG1MMDA0Q2AwMDhQPjAwMjZlMDAwK25sMyZGfQp6MDAwNmhOa2w8
WmMtcXw3TDJLR3o5TEk1Q0Z4WWpsY1FFS19yQGVgdTNjSyE9JXFLY3FpKjIwI0w1dllSdzglPSgK
ekcmVkkmKUZkakRNdWt2bVFTaklxczR5PnVoRnZAZXpudX5+K1UqPjdfI0JASHpSJV9QI1E/K3RN
RCYpM3o3bWxgCnpNQkAhe05KTHZ0SXs/STxNKHEmTTw2dG5yVnpJei14IWVlQD53PHtaTUQqb1o3
IWlGV3FWOz99aHd1QkMmMVBeTQp6MmV4ZlQqNSYwVCNeVylUJU8hbEBOM1lqSUV8Jn1BVm5wPHNo
LVRDMjYhLVZ7PT1ifVA0dGp+X2QzYm51S3NLOVEKel5GMDRQMj5YMC1hZT51cGgyZTB4YVokRXlx
dG9mWV5FYENCVTFUenUheXJyOzM8a0tueVc2LVIlZCpodmJmRGB4CnpNeHptMipGYCM9Yzd3Mypq
XmtpNW5mJnZEczQtMTVqQX1OVXVxK0UjUzZBNUctVGVgU2VLUU9MSCNhdzdoLXNTUAp6IUtpQXJU
NDdZOShTV1kmUCpvTWxXTzVYUVo2NjtXPE5FcDx7ZUI8cWJ7bmwkM3g7N3AqWShLS0chM2UlTFF4
ZFIKenZKNmVyUCU0Iz5ORj14Kj57VUxXenBkNDNGaWtVamg0YkBzc0h6JVNqWWIycUVKS25jTlJv
c35yMkB2LUZPSzhoCnpoNXVNS29CaERee052SGw1emZ4ZXBlUERYUGZzRHNhd09GMl4qX3tWSEFz
PyNsYW11dnQ1cDw+TWExTHJIRGhlJgp6KzQ0OXpJTX58WC1AaGR5aEB5eWN4ZVFTaEEmTWVPckJZ
LUZmJmY3ZlAlSVd2Qz1gJiVXRHQrWGU9XjNsVXp9OGQKenl9aUJkUjRQVHVXVWBWLUJ0amc9TUc5
bEEhV2IodiN5JkJ8LXUhaGR7JT9LezBIPVYpNmUlZj8jc0J+UzA3KnFvCklNNk48JGZgOWlvMHt7
UjMKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy90aW1lbGluZVBpbGxHcmVlbi5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy90aW1lbGluZVBpbGxHcmVlbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhjZGU0NjI2NmE4MDBkZTQxNzEwNzY0MGU0NDJhMmM0ZTM1ZTRkYmMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMzM1MAp6Y21WK3g0ZTljVVApPGg7M0t8TGswMDBlMU5K
TFRxMDAxQHMwMDBnTTFeQHM2V05oeXAwMDAwOWE3YkJtMDAwWFUKejAwMFhVMFJXbnU3eXRrWVBp
YUYjUCo3LVpiWj5LTFoqVSs8THFpfk5hJkttN1ktSW9kYy1veSlYSC0rXjdDcmFnCnpeZz5JQmZS
c3liUVdYZHdRYkxQPjZwPHo+QXFmeWxoI3tmYjY7Wih2TU1WU34kZUBTPWoqZnRnNjtVaDxpVkR+
Vgp6PFJQTXRnUUpMdyVLUERhcWlmY0BfdlgkMXdid3I5dG47MC0mai1LPTQzPGJVUThqPUpzWGB0
UjtEZzcrI15LfkgKekshRk0qWn56YnB2dCVLMntVWlNZXzxsUypEPFolTHo1b0d1KCtkYXl6KWhS
TEZkVD5mNTkmZ2hUbWdXRDBsOypUCnpJNzxrQzZhWVlhanpYcFlLdD0oOG90UCQ1MEg2Y19WOVI0
LTt7WkBDMEFNRzc9RjxSeG8lb3IxMFJVVCtBciUzagp6a3BMaFFXciMhb1hnZElgJnNLXj4wOVle
cDZsUDFySVJNeCMwNUN+Y1c9SF9BdypiSi01RFQmWjJuK3gpUUhYXnAKejAwZXNnVjh8bVFjbVJa
JTAyRF5AUzNMMTZ0YE8lYzAwNE5Jdk9LdllJWW9oNjJyWTMzUzY0MGBEOSVZMkQtPD9pCnowJTRq
IUYyWkA0ODhVJTE1OCg2NjAwNXdvNiVwV3JeWmpfdjR6QUE1SGpjSXFVb0dtdDJMQj5yViZuZWgm
I1ExaQp6MDA3fjFlJG9DY0ZTOG5lSXxoSmx7LVAhQjFaWjlocG1xMClYMGlgSndFJj4kK0U/PiVf
PGxTKk1XSytuKzFjZ2YKejxrKDhZTFIoP1ZTQUc2eCFlNzh3e2NRUHVKcEF8ZDtKKUd7ZmloaXpN
K0VyYiFwIXRjcjV3K2EzNH4oWT04czRHCnp3K3NMTDluJkpqTm4qS0pEaXFeVTVeO2AxbnZDLUBy
NlAkIWt9MVV7KCpJPVEtekB0QktIb0l9dXhkVTVkeXlAdQp6VTFKMEdPRDdPbWJpbV5HMDA4cDRa
XjZfazJtXnA8Z1c9RDJ8TDtIak4xIUREZk0hWE9hUjJ+Ykw/a1gkJUNrU20KejJtazs/cG4pb3xL
XnllSjclYWRCOUtpK0whMytGZ0hpU1lYI0tKLWxMSkRNbjlDQmJPdGIjJSloUnZgWURxdF92CnpL
cGl4fFFEfXlmYTFKaVFSayNqNGExWiluMiVmPHh5bnpWPkxDNlJiVklrVXgwYitfK0JhUjNjblQ3
WnYhQUp4Vwp6aXpGYiloIWp5R09PWjg1RjthP0RBWFB7bUA7ITBfSWZxPEV4eyo3YDA1WEY3aFAr
MkhsITNCUUo9NkBmTCVGQ28KejhpWW9vMygjYkFGYEFEU3BxdFFndj5IOChIbGdSeHQ3czN9azNL
YGtGdT4+LTJRJFFNRmZQVyFMYXtoMzM2bz5YCnp1X0NNdHRIdjZ6UjsmWk5pUz1YOHYzQ1IjZmtu
VXhIVXhKPEFZbVJzTkxXbCpQU3tBT0FSSHQjNSF3a2kyP0s7dAp6IVkzaz1zN3RnYXgpSiVyNy1C
THBoZ2U3fkJpMGcrNkU2XlpoKHA5VEJvY3szR0FGcl4wIWd1P1JNSGFDTSQmRmwKekJrMyV1bj4w
dW9CYV9NNldOV2VxSWd+NlFFNjljOW8jZXloR3ZwaU9BQFctYW9uazw3cjEoP2ZDe29JNU4qVSE0
Cno8dXY2Nld0Y0tTUmltMHgtS2UyZDVqQnJtTGFteztRbTt7bXMxcjFHbm1Oc2I3RC1FYHQpaTlG
OGZYYDJfaTMtXwp6Ymg7N1VsXiN4KSZ7eHZTPXx8fDc9bVllMzM9TWBBZ1U1KHhDPmZnPTJOLTc9
Y05uampPcnt5cml5Nm1NRmdHI2wKem5DRj1mblF2OENEeisrbzZfTHNjbH1lUStsXlpIQVJIPj9f
c0B8IyNScjZLTFJGQTElUSs9KlJSV25vTHNSYDdVCnp0NXZGPFEwcjQwUSlqNj1zRTRYJnNCY3Qx
cTwmZmJpM1ZCMk92NnRAcSowKTtVKm8qU0FQWnZ8dnZAMmFZWW5UMAp6YiU4YStDYjctZ2UwRDBr
bkVmNVFpI0A4VHAqY2V7Tjs2bHBRdUNCJUtMX0tPYXJtNWNQNl84SXI8ZTE3aXJ5Nk8KekRkSCZg
clpofnNGPWJxOXMrTzBRU2dTfkBRTDlKbXkqOTR4cj02eX5NWX4hMWZldH4oTisoPD1NYHdARDEp
YitwCnoqO0MhODNhMXVMSnYjTlNFfjt5Izg9PD5JY2ZXM0A/d0Zwd1VWeHJWWj5RZFF6MzJLSWVK
fWt+e2NaWkVeK3lhPwp6MkQxeiMySE9uSTcoQiVfYWM/e3dGVVE7UVFBMXRCS3RyV3JtMF8zUmdw
cys/SmZxYntqWWJjUVh+dGFSQjsjJHkKelpOe1N9MXx9Z1VPSEp4Yz93VjNmeHV6K21KNGAhRiRJ
WjttcVJyTnNISmQjIypEfmp1PWJQNz8tP3Z+fGN2PnZCCnpzSjZJZU53Vlp4cmRqVGB5bCNiQklh
I0d4UmEjeE1NeTtLI0NEeXlHeVFkTVN4bFdUI3REZT9wIT81d1QkK29HdAp6OEw7S3AySFVRLVpN
Sj0zWEpRdjt4NWNpKj92dVRmZVkkOyh7WEdXX2h1SUZSOWE8ZkpiRl58NEkjeFF+biREYz0KektZ
aGpZbWd6NU5Ta0RtOCpmWm17NlUhO1lYYE5HPig/QDMpWFNzOE9eTjVSeU9NPVRUbXAoMz04Xit6
cHoycilDCnpePkpPe2RlWmZzbzNvcTM/V28oWT9sJGdlP3VYbzslcnVgVm8+Pzw8KDhJXz47OEVx
I0tNUzlnRmwqbmVlb3NTQgp6Zm9IWW5CUUlrd2t5b3dQdSh6ZG1zYHB7PDdlNGtyYS1aV3E8MipP
c0dUdkVWJXMwVGQkaFhUKyEqOEJuaDJLTWUKekJtWlJvZGpIVj9yK181Xlg5SjBXTDRqS1dgfWxm
JUEtfDQ0SUBATFR2ZjFySGpHKHplNit3QEp0JUJ2anRzIVgwCno/MnhTP192ZV8tazxNdWpnOzBM
eiozYnVHPTMkRyZlaGVwdGhsTiokS2FPeVNTUV5uV21vPDBNKyhVRVVNRVhSUQp6TUJiWmNGOzYr
S0VsTT5pS0JfS2lKbFokOUdgY149RUBvTkcpbVdXYU5vLTNUSVc4KSRIZzBVYi1+OD9LaHZKPiQK
ejMqJm5pbUBtaihhQ3hFNSF0e2x3N081XjBFSU83ek9vJmM2bDwrfGlEeVNCV0NHcnpAQzV7U3Qh
WDNoQUF9YFQ0CnooVExiWFRxKyg7QDw9TDhkWG5zc3lmdHx3I1dTVFc8KyszPnNnUyUoNE5UcGVJ
LVZBcWJ8N3NzSnZ6TkhnT1pWdQp6YVlDdmdPX1Ixfj5TeUw9Y0ZVfH5nfGh5fFppfX1zOStkfmxZ
cU9CNzF6OVokd25DPXBSOVl6NERoSU0+V21qZ3UKeiY1Nm82bWFDcEMmRiMjeSVHOzFQb2JSOWk/
R25OZztnWXRjaEQlcDE5YSFlUXRaRiYzSmFLdjMzZ1o8OER+NDdFCnp0VVMxaXdrbURhUHBqPSRt
IyUpakNWRVk0Zm5MR05nMkEtYFl3SFZEM2d2fTs+KWhBdlR+QW1xUz5McmBgaTdrdwp6Sns1X0l0
YHlyQm1sYzI1REJPN0U4OzVWb3puUj5XdzVoQWF4biQyfihxYCVBLVl1UzY0d2tCeT05ZG1gNGNY
ZVgKejRjfUlAP2UrRlcrYkBeUkRCSFYod25NcTJ6ZFgzU1d2OXVgJXt4Qy1xKlV9JmBjeVhWKCVy
UlQqWjZNSD9pK2kmCnpfQjhDKCtnclQle1hXVVErZkBOb1AxUj1BVyYyNnt2LWR4KWlLXi1ObWl1
ajh0eGohbT9aKlNzMU57ZGg0en0wMQp6KVlUbypKeWNTVSkrXzVyNCN5dzl7KztpNEVlJHBlUmdJ
ais7djtaR2RGMUskM0UlZX40TGFJKGpDLXUlMmgkJlIKejljTFhjWUNAWHdubnMmYm4pX1F+VGU/
cm9LR0R8ZC1nXjg7K2FDe3tHKDFeKE83bTM3WTEtKzYpMDFjTiZ5MWF3CnpvcWN7VGBQXlhKcVBC
YklXNnN9ZDR7el9mNU9tP3ZNZ05RRUpHP3YyVD1LWWReME0zSTZJWnhibnkpJXZaUiZMRAp6SnBQ
bEBQc2g4UXlQQkBLVHgrQFJkY0MhS1g3fWtFbztTfGpedTJsVTdYUX1PbztmfDt6NExsK19yPkAx
LXhsM3wKemF3cS1IJWUmY2tDK0BBaFByUDZCSzx6PTxMKjBrZktVQENYKnplcWJZUVQ0KF5VPlQj
X1hkVDcmO0Y3MWp9Sm95CnprQ342bGg3RUA2bztXQF5JcFJOWntwdEx0TChnUS1DWX40bXFXO1VT
N1p4dm1ffEB5eiZlNTNCcF9sVFBsZlB8egp6clR5eF8+bHZAeCM9XiFQelI3cXFGPCRnbWB8Wkpa
Kzs8KUNxdSZvdDxhezgxREYwfnJ2R3I1WHJ+OHVgbGF2MWgKejFETnl0Vj4yej0wMDAwV1ZAT2c+
MDA0Uj0wMDRsNDAwODtfMDA0bUwwMDRDYDAwOFA+MDAyNmUwMDArbmwzJkZ9CnowMDA2KE5rbDxa
Yy1xfDdQZUBjejZ2eSVKbzYqNk11fkJKYWJkeTEjTnJlJCp0cFkmXmtfYzAxQXc8fjFOWGt1Kwp6
KVVKKDdreWZybTRGVz9WNWxwRT9MNFBRKTB2V1dWS2EpOCU+SmFgSm9jSGNJRSRvPzcoZlVvbCkj
YnY0YHtDWW0KekAzQi1CSHl3a2ByOWVBUzQrUDFMT2FPaHxFa25+PUNvTEQmRzF6PCg9JiM/fjd+
V0hVZlA4LS1Dc1o/dUg7aGMpCnpHUWpvam1aN2RKU2pTLVZMRXcyPy04RndDNStTenNqUVB3ZyVW
eD41cGg4fn1DSFlZKmdORiY1RzlGQ2I8eHk7YAp6dioreGNFJiVLREt2TXZpSmFlUzJ5MHw+Vml7
KCpsJjUlb31Fam1ITy1wITVTaSQ7fklvMnxwfGRfWXNwJmY0bnoKenlBQmFzZHk7Yn5mVHlWdTdS
X2dsUlc8az4rcTQ0WTBZQFhIUVFvRnNsNSlRMG1Qa1IyO01qJik9UVNsbzV5WCk/Cno3WiNSMGBg
OytfQjEjY2E5TlFxYWtkZyh8NmtyXlF4VWpeKz5PMktueyVlc2FzPDhEZEBTSUImVis2NTwlKH16
Ngp6U3RzJVI2SmpMYyFYQ35nPDUhezsrWC1scHc2bHRlcU48KlNzZSY1YXhQfT5uKm5zJFd8Nzh7
dDlkJSg3JCMyUDUKenY2LW93bENvX1dUTT09eFBSd2dRKWVWJCExZHxiUHtLT1lPNjh7aWlAJWVx
ZG9CIUNRelNIfX09O0l2fiNvXio7CnoycihPe0M4Q35yQiEwaCFWcX4rJW1Yb1dATyluVkJ2S2p8
RSRNMG96OXY2Qn5SZjszRzMmUkM5IUI3QSEzKUZrSAp6cmEkK0REcUB0Q3I4Rno0d1M7OV49TFJ+
KiROcCVrKz8/LWVJSWMkT01LcUwhUXQjQjRKNVdedk9qd3BSKV8/VlcKZ2BtZXA+fENTI0UwSEFQ
Sll7cUlgRUMydWkwNypxb002TjwkZit8byMoZnxNZQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RpbWVsaW5lUGlsbE9yYW5nZS5wbmcgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZVBpbGxPcmFu
Z2UucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjRkZTVhNThmZTdmZDM5NTQx
ZWZmOWMwMjQzMjZjMjc5MjU1NDkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMz
NTMKemNtVishNGQoS1JQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUBzMDAwZ00xXkBzNldOaHlwMDAw
MDlhN2JCbTAwMFhVCnowMDBYVTBSV251N3l0a1lQaWFGI1AqNy1aYlo+S0xaKlUrPExxaX5OYSZL
bTdZLUlvZGMtb3kpWEgtK143Q3JhZwp6Xmc+SUJmUnN5YlFXWGR3UWJMUD42cDx6PkFxZnlsaCN7
ZmI2O1oodk1NVlN+JGVAUz1qKmZ0ZzY7VWg8aVZEflYKejxSUE10Z1FKTHclS1BEYXFpZmNAX3ZY
JDF3YndyOXRuOzAtJmotSz00MzxiVVE4aj1Kc1hgdFI7RGc3KyNeS35ICnpLIUZNKlp+emJwdnQl
SzJ7VVpTWV88bFMqRDxaJUx6NW9HdSgrZGF5eiloUkxGZFQ+ZjU5JmdoVG1nV0QwbDsqVAp6STc8
a0M2YVlZYWp6WHBZS3Q9KDhvdFAkNTBINmNfVjlSNC07e1pAQzBBTUc3PUY8UnhvJW9yMTBSVVQr
QXIlM2oKemtwTGhRV3IjIW9YZ2RJYCZzS14+MDlZXnA2bFAxcklSTXgjMDVDfmNXPUhfQXcqYkot
NURUJloybit4KVFIWF5wCnowMGVzZ1Y4fG1RY21SWiUwMkReQFMzTDE2dGBPJWMwMDROSXZPS3ZZ
SVlvaDYyclkzM1M2NDBgRDklWTJELTw/aQp6MCU0aiFGMlpANDg4VSUxNTgoNjYwMDV3bzYlcFdy
XlpqX3Y0ekFBNUhqY0lxVW9HbXQyTEI+clYmbmVoJiNRMWkKejAwN34xZSRvQ2NGUzhuZUl8aEps
ey1QIUIxWlo5aHBtcTApWDBpYEp3RSY+JCtFPz4lXzxsUypNV0srbisxY2dmCno8ayg4WUxSKD9W
U0FHNnghZTc4d3tjUVB1SnBBfGQ7SilHe2ZpaGl6TStFcmIhcCF0Y3I1dythMzR+KFk9OHM0Rwp6
dytzTEw5biZKak5uKktKRGlxXlU1XjtgMW52Qy1AcjZQJCFrfTFVeygqST1RLXpAdEJLSG9JfXV4
ZFU1ZHl5QHUKelUxSjBHT0Q3T21iaW1eRzAwOHA0Wl42X2sybV5wPGdXPUQyfEw7SGpOMSFERGZN
IVhPYVIyfmJMP2tYJCVDa1NtCnoybWs7P3BuKW98S155ZUo3JWFkQjlLaStMITMrRmdIaVNZWCNL
Si1sTEpETW45Q0JiT3RiIyUpaFJ2YFlEcXRfdgp6S3BpeHxRRH15ZmExSmlRUmsjajRhMVopbjIl
Zjx4eW56Vj5MQzZSYlZJa1V4MGIrXytCYVIzY25UN1p2IUFKeFcKeml6RmIpaCFqeUdPT1o4NUY7
YT9EQVhQe21AOyEwX0lmcTxFeHsqN2AwNVhGN2hQKzJIbCEzQlFKPTZAZkwlRkNvCno4aVlvbzMo
I2JBRmBBRFNwcXRRZ3Y+SDgoSGxnUnh0N3MzfWszS2BrRnU+Pi0yUSRRTUZmUFchTGF7aDMzNm8+
WAp6dV9DTXR0SHY2elI7JlpOaVM9WDh2M0NSI2ZrblV4SFV4SjxBWW1Sc05MV2wqUFN7QU9BUkh0
IzUhd2tpMj9LO3QKeiFZM2s9czd0Z2F4KUolcjctQkxwaGdlN35CaTBnKzZFNl5aaChwOVRCb2N7
M0dBRnJeMCFndT9STUhhQ00kJkZsCnpCazMldW4+MHVvQmFfTTZXTldlcUlnfjZRRTY5YzlvI2V5
aEd2cGlPQUBXLWFvbms8N3IxKD9mQ3tvSTVOKlUhNAp6PHV2NjZXdGNLU1JpbTB4LUtlMmQ1akJy
bUxhbXs7UW07e21zMXIxR25tTnNiN0QtRWB0KWk5RjhmWGAyX2kzLV8KemJoOzdVbF4jeCkme3h2
Uz18fHw3PW1ZZTMzPU1gQWdVNSh4Qz5mZz0yTi03PWNObmpqT3J7eXJpeTZtTUZnRyNsCnpuQ0Y9
Zm5RdjhDRHorK282X0xzY2x9ZVErbF5aSEFSSD4/X3NAfCMjUnI2S0xSRkExJVErPSpSUldub0xz
UmA3VQp6dDV2RjxRMHI0MFEpajY9c0U0WCZzQmN0MXE8JmZiaTNWQjJPdjZ0QHEqMCk7VSpvKlNB
UFp2fHZ2QDJhWVluVDAKemIlOGErQ2I3LWdlMEQwa25FZjVRaSNAOFRwKmNle047NmxwUXVDQiVL
TF9LT2FybTVjUDZfOElyPGUxN2lyeTZPCnpEZEgmYHJaaH5zRj1icTlzK08wUVNnU35AUUw5Sm15
Kjk0eHI9Nnl+TVl+ITFmZXR+KE4rKDw9TWB3QEQxKWIrcAp6KjtDITgzYTF1TEp2I05TRX47eSM4
PTw+SWNmVzNAP3dGcHdVVnhyVlo+UWRRejMyS0llSn1rfntjWlpFXit5YT8KejJEMXojMkhPbkk3
KEIlX2FjP3t3RlVRO1FRQTF0Qkt0cldybTBfM1JncHMrP0pmcWJ7alliY1FYfnRhUkI7IyR5Cnpa
TntTfTF8fWdVT0hKeGM/d1YzZnh1eittSjRgIUYkSVo7bXFSck5zSEpkIyMqRH5qdT1iUDc/LT92
fnxjdj52Qgp6c0o2SWVOd1ZaeHJkalRgeWwjYkJJYSNHeFJhI3hNTXk7SyNDRHl5R3lRZE1TeGxX
VCN0RGU/cCE/NXdUJCtvR3QKejhMO0twMkhVUS1aTUo9M1hKUXY7eDVjaSo/dnVUZmVZJDsoe1hH
V19odUlGUjlhPGZKYkZefDRJI3hRfm4kRGM9CnpLWWhqWW1nejVOU2tEbTgqZlptezZVITtZWGBO
Rz4oP0AzKVhTczhPXk41UnlPTT1UVG1wKDM9OF4renB6MnIpQwp6Xj5KT3tkZVpmc28zb3EzP1dv
KFk/bCRnZT91WG87JXJ1YFZvPj88PCg4SV8+OzhFcSNLTVM5Z0ZsKm5lZW9zU0IKemZvSFluQlFJ
a3dreW93UHUoemRtc2Bwezw3ZTRrcmEtWldxPDIqT3NHVHZFViVzMFRkJGhYVCshKjhCbmgyS01l
CnpCbVpSb2RqSFY/citfNV5YOUowV0w0aktXYH1sZiVBLXw0NElAQExUdmYxckhqRyh6ZTYrd0BK
dCVCdmp0cyFYMAp6PzJ4Uz9fdmVfLWs8TXVqZzswTHoqM2J1Rz0zJEcmZWhlcHRobE4qJEthT3lT
U1FebldtbzwwTSsoVUVVTUVYUlEKek1CYlpjRjs2K0tFbE0+aUtCX0tpSmxaJDlHYGNePUVAb05H
KW1XV2FOby0zVElXOCkkSGcwVWItfjg/S2h2Sj4kCnozKiZuaW1AbWooYUN4RTUhdHtsdzdPNV4w
RUlPN3pPbyZjNmw8K3xpRHlTQldDR3J6QEM1e1N0IVgzaEFBfWBUNAp6KFRMYlhUcSsoO0A8PUw4
ZFhuc3N5ZnR8dyNXU1RXPCsrMz5zZ1MlKDROVHBlSS1WQXFifDdzc0p2ek5IZ09aVnUKemFZQ3Zn
T19SMX4+U3lMPWNGVXx+Z3xoeXxaaX19czkrZH5sWXFPQjcxejlaJHduQz1wUjlZejREaElNPldt
amd1CnomNTZvNm1hQ3BDJkYjI3klRzsxUG9iUjlpP0duTmc7Z1l0Y2hEJXAxOWEhZVF0WkYmM0ph
S3YzM2daPDhEfjQ3RQp6dFVTMWl3a21EYVBwaj0kbSMlKWpDVkVZNGZuTEdOZzJBLWBZd0hWRDNn
dn07PiloQXZUfkFtcVM+THJgYGk3a3cKekp7NV9JdGB5ckJtbGMyNURCTzdFODs1Vm96blI+V3c1
aEFheG4kMn4ocWAlQS1ZdVM2NHdrQnk9OWRtYDRjWGVYCno0Y31JQD9lK0ZXK2JAXlJEQkhWKHdu
TXEyemRYM1NXdjl1YCV7eEMtcSpVfSZgY3lYViglclJUKlo2TUg/aStpJgp6X0I4QygrZ3JUJXtY
V1VRK2ZATm9QMVI9QVcmMjZ7di1keClpS14tTm1pdWo4dHhqIW0/WipTczFOe2RoNHp9MDEKeilZ
VG8qSnljU1UpK181cjQjeXc5eys7aTRFZSRwZVJnSWorO3Y7WkdkRjFLJDNFJWV+NExhSShqQy11
JTJoJCZSCno5Y0xYY1lDQFh3bm5zJmJuKV9RflRlP3JvS0dEfGQtZ144OythQ3t7RygxXihPN20z
N1kxLSs2KTAxY04meTFhdwp6b3Fje1RgUF5YSnFQQmJJVzZzfWQ0e3pfZjVPbT92TWdOUUVKRz92
MlQ9S1lkXjBNM0k2SVp4Ym55KSV2WlImTEQKekpwUGxAUHNoOFF5UEJAS1R4K0BSZGNDIUtYN31r
RW87U3xqXnUybFU3WFF9T287Znw7ejRMbCtfcj5AMS14bDN8Cnphd3EtSCVlJmNrQytAQWhQclA2
Qks8ej08TCowa2ZLVUBDWCp6ZXFiWVFUNCheVT5UI19YZFQ3JjtGNzFqfUpveQp6a0N+NmxoN0VA
Nm87V0BeSXBSTlp7cHRMdEwoZ1EtQ1l+NG1xVztVUzdaeHZtX3xAeXomZTUzQnBfbFRQbGZQfHoK
enJUeXhfPmx2QHgjPV4hUHpSN3FxRjwkZ21gfFpKWis7PClDcXUmb3Q8YXs4MURGMH5ydkdyNVhy
fjh1YGxhdjFoCnoxRE55dFY+Mno9MDAwMFdWQE9nPjAwNFI9MDA0bDQwMDg7XzAwNG1MMDA0Q2Aw
MDhQPjAwMjZlMDAwK25sMyZGfQp6MDAwNitOa2w8WmMtcXw3UGVAY3o2dnklSl4pPVNpakZhTW9X
ZnVMVHZfQStAVjEpRTxBUGApWGl3SW1xeUtHWXMKejZoJEl8eE40Z09MQTN+SjcxRHEoVmhhTj9o
PUxMZXYoYW98KVVqZWwobF90amRzKzw3bCVuO1VlKClDZSFuXlJ7CnorYH5PZU1EUC1DazV2R2Rm
Znh7XklGYk0hSGd6T0VGNWdyaEVaIWIjMXxJS2hKUmdiZkkpb0tpVEA8UiFfLWo1Uwp6OSUkZkpR
JTltfTF1V2hrSXx2TFBadGIrOShJYHk1ZlhwY1RvYnw3JEd5LUx0VmUycyNmP0Y3Vyp+OTFJLVck
eiMKemBudiRzXlZfRk5majAtNXVoIUw2MjRTUUpqNz9GY184aSU9ZWV+YUwpdVB5UXdzWVc5M0RC
fnNfR24kci1VZGthCno3YXQwNi1hV3l9Q2ZSblIjZDJKODV1Z05VREJyTFZyVXFkP1JhNzdXOU18
QnVoV3lra0xoQ0RXOUNIRi02JVl3dgp6TG9XNXQxQUs/bGYpKipEVHRoeExqUmVFRUIyZj5QdyFl
TGFQfVJ+O01obGBxalFGLXYjdDdPN2REbWImbiNJTEQKel5WdVg/bzNzWlQkZlBIKVpMY216VGtG
dHY0cjJyblNwTFRPM1pfNzchUFNQbVczWXxGSFd1bHJGfD83bTJUUlAlCnpXWnNVQXpPUyNZNEJA
Jjg8R0tqSFZTZSs4NnNxTkRMdFlEYzJ7NDxRQVVUbm13QFRGZ3JGWlB2JjZFNEokbCM4dQp6YUhQ
Nm9FIXFmMTNaRms5RTcjc05ebT1VaWB2TjBoZXJUb0NuWVFrcy1XOExfKTljNH5KQzVsbzUwfT01
KjkxX08KekxjQ3JSZV5wQjtedU1jeHh0el5oYn1fQSN5M3AxPSljNDBvPD5rP3AjP3hBeG09T3NY
QCF4Zm48dj45TDM4bTx9CmpiWj08a3VlMEwrbVJ8el5fTXUzUTQ2Xih5MDAwMDBOa3ZYWHUwbWpm
cChSN2MKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy90aW1lbGluZVBpbGxQdXJwbGUucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvdGltZWxpbmVQaWxsUHVycGxlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzNjOGVjMDg2MDU1MTc3ODBhZmUyMjc4YTRlYzI0NjdjODdmYzA4MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMzY3CnpjbVYrPzRjUExEUCk8aDszS3xMazAw
MGUxTkpMVHEwMDFAczAwMGdNMV5AczZXTmh5cDAwMDA5YTdiQm0wMDBYVQp6MDAwWFUwUldudTd5
dGtZUGlhRiNQKjctWmJaPktMWipVKzxMcWl+TmEmS203WS1Jb2RjLW95KVhILSteN0NyYWcKel5n
PklCZlJzeWJRV1hkd1FiTFA+NnA8ej5BcWZ5bGgje2ZiNjtaKHZNTVZTfiRlQFM9aipmdGc2O1Vo
PGlWRH5WCno8UlBNdGdRSkx3JUtQRGFxaWZjQF92WCQxd2J3cjl0bjswLSZqLUs9NDM8YlVROGo9
SnNYYHRSO0RnNysjXkt+SAp6SyFGTSpafnpicHZ0JUsye1VaU1lfPGxTKkQ8WiVMejVvR3UoK2Rh
eXopaFJMRmRUPmY1OSZnaFRtZ1dEMGw7KlQKekk3PGtDNmFZWWFqelhwWUt0PSg4b3RQJDUwSDZj
X1Y5UjQtO3taQEMwQU1HNz1GPFJ4byVvcjEwUlVUK0FyJTNqCnprcExoUVdyIyFvWGdkSWAmc0te
PjA5WV5wNmxQMXJJUk14IzA1Q35jVz1IX0F3KmJKLTVEVCZaMm4reClRSFhecAp6MDBlc2dWOHxt
UWNtUlolMDJEXkBTM0wxNnRgTyVjMDA0Tkl2T0t2WUlZb2g2MnJZMzNTNjQwYEQ5JVkyRC08P2kK
ejAlNGohRjJaQDQ4OFUlMTU4KDY2MDA1d282JXBXcl5aal92NHpBQTVIamNJcVVvR210MkxCPnJW
Jm5laCYjUTFpCnowMDd+MWUkb0NjRlM4bmVJfGhKbHstUCFCMVpaOWhwbXEwKVgwaWBKd0UmPiQr
RT8+JV88bFMqTVdLK24rMWNnZgp6PGsoOFlMUig/VlNBRzZ4IWU3OHd7Y1FQdUpwQXxkO0opR3tm
aWhpek0rRXJiIXAhdGNyNXcrYTM0fihZPThzNEcKencrc0xMOW4mSmpObipLSkRpcV5VNV47YDFu
dkMtQHI2UCQha30xVXsoKkk9US16QHRCS0hvSX11eGRVNWR5eUB1CnpVMUowR09EN09tYmltXkcw
MDhwNFpeNl9rMm1ecDxnVz1EMnxMO0hqTjEhRERmTSFYT2FSMn5iTD9rWCQlQ2tTbQp6Mm1rOz9w
bilvfEteeWVKNyVhZEI5S2krTCEzK0ZnSGlTWVgjS0otbExKRE1uOUNCYk90YiMlKWhSdmBZRHF0
X3YKektwaXh8UUR9eWZhMUppUVJrI2o0YTFaKW4yJWY8eHluelY+TEM2UmJWSWtVeDBiK18rQmFS
M2NuVDdadiFBSnhXCnppekZiKWghanlHT09aODVGO2E/REFYUHttQDshMF9JZnE8RXh7KjdgMDVY
RjdoUCsySGwhM0JRSj02QGZMJUZDbwp6OGlZb28zKCNiQUZgQURTcHF0UWd2Pkg4KEhsZ1J4dDdz
M31rM0tga0Z1Pj4tMlEkUU1GZlBXIUxhe2gzMzZvPlgKenVfQ010dEh2NnpSOyZaTmlTPVg4djND
UiNma25VeEhVeEo8QVltUnNOTFdsKlBTe0FPQVJIdCM1IXdraTI/Szt0CnohWTNrPXM3dGdheClK
JXI3LUJMcGhnZTd+QmkwZys2RTZeWmgocDlUQm9jezNHQUZyXjAhZ3U/Uk1IYUNNJCZGbAp6Qmsz
JXVuPjB1b0JhX002V05XZXFJZ342UUU2OWM5byNleWhHdnBpT0FAVy1hb25rPDdyMSg/ZkN7b0k1
TipVITQKejx1djY2V3RjS1NSaW0weC1LZTJkNWpCcm1MYW17O1FtO3ttczFyMUdubU5zYjdELUVg
dClpOUY4ZlhgMl9pMy1fCnpiaDs3VWxeI3gpJnt4dlM9fHx8Nz1tWWUzMz1NYEFnVTUoeEM+Zmc9
Mk4tNz1jTm5qak9ye3lyaXk2bU1GZ0cjbAp6bkNGPWZuUXY4Q0R6KytvNl9Mc2NsfWVRK2xeWkhB
Ukg+P19zQHwjI1JyNktMUkZBMSVRKz0qUlJXbm9Mc1JgN1UKenQ1dkY8UTByNDBRKWo2PXNFNFgm
c0JjdDFxPCZmYmkzVkIyT3Y2dEBxKjApO1UqbypTQVBadnx2dkAyYVlZblQwCnpiJThhK0NiNy1n
ZTBEMGtuRWY1UWkjQDhUcCpjZXtOOzZscFF1Q0IlS0xfS09hcm01Y1A2XzhJcjxlMTdpcnk2Twp6
RGRIJmByWmh+c0Y9YnE5cytPMFFTZ1N+QFFMOUpteSo5NHhyPTZ5fk1ZfiExZmV0fihOKyg8PU1g
d0BEMSliK3AKeio7QyE4M2ExdUxKdiNOU0V+O3kjOD08PkljZlczQD93RnB3VVZ4clZaPlFkUXoz
MktJZUp9a357Y1paRV4reWE/CnoyRDF6IzJIT25JNyhCJV9hYz97d0ZVUTtRUUExdEJLdHJXcm0w
XzNSZ3BzKz9KZnFie2pZYmNRWH50YVJCOyMkeQp6Wk57U30xfH1nVU9ISnhjP3dWM2Z4dXorbUo0
YCFGJElaO21xUnJOc0hKZCMjKkR+anU9YlA3Py0/dn58Y3Y+dkIKenNKNkllTndWWnhyZGpUYHls
I2JCSWEjR3hSYSN4TU15O0sjQ0R5eUd5UWRNU3hsV1QjdERlP3AhPzV3VCQrb0d0Cno4TDtLcDJI
VVEtWk1KPTNYSlF2O3g1Y2kqP3Z1VGZlWSQ7KHtYR1dfaHVJRlI5YTxmSmJGXnw0SSN4UX5uJERj
PQp6S1loalltZ3o1TlNrRG04KmZabXs2VSE7WVhgTkc+KD9AMylYU3M4T15ONVJ5T009VFRtcCgz
PTheK3pwejJyKUMKel4+Sk97ZGVaZnNvM29xMz9XbyhZP2wkZ2U/dVhvOyVydWBWbz4/PDwoOElf
Pjs4RXEjS01TOWdGbCpuZWVvc1NCCnpmb0hZbkJRSWt3a3lvd1B1KHpkbXNgcHs8N2U0a3JhLVpX
cTwyKk9zR1R2RVYlczBUZCRoWFQrISo4Qm5oMktNZQp6Qm1aUm9kakhWP3IrXzVeWDlKMFdMNGpL
V2B9bGYlQS18NDRJQEBMVHZmMXJIakcoemU2K3dASnQlQnZqdHMhWDAKej8yeFM/X3ZlXy1rPE11
amc7MEx6KjNidUc9MyRHJmVoZXB0aGxOKiRLYU95U1NRXm5XbW88ME0rKFVFVU1FWFJRCnpNQmJa
Y0Y7NitLRWxNPmlLQl9LaUpsWiQ5R2BjXj1FQG9ORyltV1dhTm8tM1RJVzgpJEhnMFViLX44P0to
dko+JAp6MyombmltQG1qKGFDeEU1IXR7bHc3TzVeMEVJTzd6T28mYzZsPCt8aUR5U0JXQ0dyekBD
NXtTdCFYM2hBQX1gVDQKeihUTGJYVHErKDtAPD1MOGRYbnNzeWZ0fHcjV1NUVzwrKzM+c2dTJSg0
TlRwZUktVkFxYnw3c3NKdnpOSGdPWlZ1CnphWUN2Z09fUjF+PlN5TD1jRlV8fmd8aHl8Wml9fXM5
K2R+bFlxT0I3MXo5WiR3bkM9cFI5WXo0RGhJTT5XbWpndQp6JjU2bzZtYUNwQyZGIyN5JUc7MVBv
YlI5aT9Hbk5nO2dZdGNoRCVwMTlhIWVRdFpGJjNKYUt2MzNnWjw4RH40N0UKenRVUzFpd2ttRGFQ
cGo9JG0jJSlqQ1ZFWTRmbkxHTmcyQS1gWXdIVkQzZ3Z9Oz4paEF2VH5BbXFTPkxyYGBpN2t3CnpK
ezVfSXRgeXJCbWxjMjVEQk83RTg7NVZvem5SPld3NWhBYXhuJDJ+KHFgJUEtWXVTNjR3a0J5PTlk
bWA0Y1hlWAp6NGN9SUA/ZStGVytiQF5SREJIVih3bk1xMnpkWDNTV3Y5dWAle3hDLXEqVX0mYGN5
WFYoJXJSVCpaNk1IP2kraSYKel9COEMoK2dyVCV7WFdVUStmQE5vUDFSPUFXJjI2e3YtZHgpaUte
LU5taXVqOHR4aiFtP1oqU3MxTntkaDR6fTAxCnopWVRvKkp5Y1NVKStfNXI0I3l3OXsrO2k0RWUk
cGVSZ0lqKzt2O1pHZEYxSyQzRSVlfjRMYUkoakMtdSUyaCQmUgp6OWNMWGNZQ0BYd25ucyZibilf
UX5UZT9yb0tHRHxkLWdeODsrYUN7e0coMV4oTzdtMzdZMS0rNikwMWNOJnkxYXcKem9xY3tUYFBe
WEpxUEJiSVc2c31kNHt6X2Y1T20/dk1nTlFFSkc/djJUPUtZZF4wTTNJNklaeGJueSkldlpSJkxE
CnpKcFBsQFBzaDhReVBCQEtUeCtAUmRjQyFLWDd9a0VvO1N8al51MmxVN1hRfU9vO2Z8O3o0TGwr
X3I+QDEteGwzfAp6YXdxLUglZSZja0MrQEFoUHJQNkJLPHo9PEwqMGtmS1VAQ1gqemVxYllRVDQo
XlU+VCNfWGRUNyY7Rjcxan1Kb3kKemtDfjZsaDdFQDZvO1dAXklwUk5ae3B0THRMKGdRLUNZfjRt
cVc7VVM3Wnh2bV98QHl6JmU1M0JwX2xUUGxmUHx6CnpyVHl4Xz5sdkB4Iz1eIVB6UjdxcUY8JGdt
YHxaSlorOzwpQ3F1Jm90PGF7ODFERjB+cnZHcjVYcn44dWBsYXYxaAp6MUROeXRWPjJ6PTAwMDBX
VkBPZz4wMDRSPTAwNGw0MDA4O18wMDRtTDAwNENgMDA4UD4wMDI2ZTAwMCtubDMmRn0KejAwMDZ+
TmtsPFpjLXF7U09HczV3Nm8kWCFAbVhHUC1NbENYU3JQPF9CeHBlZUtAVEFhTF8hMXlBciYtZzZh
PEVYCnpORTJyYm0xdkwrUWc5fWltZkBzPTQzYVEwbHRSO2Q8bHxjMnRMRUwwKSE9cUNEO2dqQmhh
MmB7ZkJnU2lkcFJQNAp6cl5jR0w1TzQhMTJRdF9oPkh7NyR3YnpkUmRneXB5ald1bCp6e0FzKCNs
Z2N6XkdIb2ctVnN6RWhHdXh5Rj0mOD4KenJ1TiRBWkQ1VHhaS2M0IzwrfTUzSTI+bDtiJlJGKTRi
fiNzdz9KdERtI214PTR3VVVDQmdnV2hZblh3akJlKEIjCnpUeHx3JFclTilnQFRCN1UkKCg/aiYw
eXllVXE4b0Q+KDx2IW5ZZ2VQKGFhOTdsTm1+PDs4PSo0a0I4Nm5jZk5VYQp6dURVZG0xWEw5c0tV
aTIpUj4xaEg3JHo/NEdgO0l5QnN5YV9iK08zUk1xTDkpMjJPLT9MUUQ7PTV9UXskM1A9I0YKekg3
S0spOVF3d2Q+O1QmOHZtUkl3PHI0aih7I24zeFAkR3l9bHU+QV9TWHFwLURAfGpxNHRycDhrLTFl
ZV9peSEtCno2fXglYXVVPVdQNztEZzBwPj4+JXhGdEhaZzBXYEsxTThvaW4hbEJvb2xrTkdkfHk+
cVlaMWklVWBDXkAhYnFHSAp6TjB8SUxqVFBKTmYlUHBjRjEmcHxHRkZuRW01VUxMRzZyTXwleF9X
alZ5Sih7NUxZdWo4UjY1Xk05ZldjP2B7NUwKel8weylfTWVPdDN6NF5nP2ZuMlBaZ2xsNGJHYkRa
b09UNXZidCE2cDR6fnNXMWFVQURUWWZuU2h3I31vaXNeeTM+CnpzdzBwZEVKO3R6Qip9NUdBfj1h
cWBwVGB1OTF4N3ZNQXcmRFN6RGZTOU9wYEZQZWJuP0UwdzM0bTNKPl9XNkRLcgp4PUpxfWxVeEE0
VGYqN0ZCIVJjLTNzYkJ4PXVLMiZ7I3tlfHZWQ19afDxlZE5qMDAyb3ZQREhMa1Yxb092TmloSGIK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90
aW1lbGluZVBpbGxSZWQucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvdGltZWxpbmVQaWxsUmVkLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmU4YjNjMGFiZTRlNTJkMjVmOGQyZWIyOWIzMzY4ODc5M2FkZDQzNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21W
P2QwMDAwMQoKbGl0ZXJhbCAzMzQyCnpjbVYrcDRlfDFjUCk8aDszS3xMazAwMGUxTkpMVHEwMDFA
czAwMGdNMV5AczZXTmh5cDAwMDA5YTdiQm0wMDBYVQp6MDAwWFUwUldudTd5dGtZUGlhRiNQKjct
WmJaPktMWipVKzxMcWl+TmEmS203WS1Jb2RjLW95KVhILSteN0NyYWcKel5nPklCZlJzeWJRV1hk
d1FiTFA+NnA8ej5BcWZ5bGgje2ZiNjtaKHZNTVZTfiRlQFM9aipmdGc2O1VoPGlWRH5WCno8UlBN
dGdRSkx3JUtQRGFxaWZjQF92WCQxd2J3cjl0bjswLSZqLUs9NDM8YlVROGo9SnNYYHRSO0RnNysj
Xkt+SAp6SyFGTSpafnpicHZ0JUsye1VaU1lfPGxTKkQ8WiVMejVvR3UoK2RheXopaFJMRmRUPmY1
OSZnaFRtZ1dEMGw7KlQKekk3PGtDNmFZWWFqelhwWUt0PSg4b3RQJDUwSDZjX1Y5UjQtO3taQEMw
QU1HNz1GPFJ4byVvcjEwUlVUK0FyJTNqCnprcExoUVdyIyFvWGdkSWAmc0tePjA5WV5wNmxQMXJJ
Uk14IzA1Q35jVz1IX0F3KmJKLTVEVCZaMm4reClRSFhecAp6MDBlc2dWOHxtUWNtUlolMDJEXkBT
M0wxNnRgTyVjMDA0Tkl2T0t2WUlZb2g2MnJZMzNTNjQwYEQ5JVkyRC08P2kKejAlNGohRjJaQDQ4
OFUlMTU4KDY2MDA1d282JXBXcl5aal92NHpBQTVIamNJcVVvR210MkxCPnJWJm5laCYjUTFpCnow
MDd+MWUkb0NjRlM4bmVJfGhKbHstUCFCMVpaOWhwbXEwKVgwaWBKd0UmPiQrRT8+JV88bFMqTVdL
K24rMWNnZgp6PGsoOFlMUig/VlNBRzZ4IWU3OHd7Y1FQdUpwQXxkO0opR3tmaWhpek0rRXJiIXAh
dGNyNXcrYTM0fihZPThzNEcKencrc0xMOW4mSmpObipLSkRpcV5VNV47YDFudkMtQHI2UCQha30x
VXsoKkk9US16QHRCS0hvSX11eGRVNWR5eUB1CnpVMUowR09EN09tYmltXkcwMDhwNFpeNl9rMm1e
cDxnVz1EMnxMO0hqTjEhRERmTSFYT2FSMn5iTD9rWCQlQ2tTbQp6Mm1rOz9wbilvfEteeWVKNyVh
ZEI5S2krTCEzK0ZnSGlTWVgjS0otbExKRE1uOUNCYk90YiMlKWhSdmBZRHF0X3YKektwaXh8UUR9
eWZhMUppUVJrI2o0YTFaKW4yJWY8eHluelY+TEM2UmJWSWtVeDBiK18rQmFSM2NuVDdadiFBSnhX
CnppekZiKWghanlHT09aODVGO2E/REFYUHttQDshMF9JZnE8RXh7KjdgMDVYRjdoUCsySGwhM0JR
Sj02QGZMJUZDbwp6OGlZb28zKCNiQUZgQURTcHF0UWd2Pkg4KEhsZ1J4dDdzM31rM0tga0Z1Pj4t
MlEkUU1GZlBXIUxhe2gzMzZvPlgKenVfQ010dEh2NnpSOyZaTmlTPVg4djNDUiNma25VeEhVeEo8
QVltUnNOTFdsKlBTe0FPQVJIdCM1IXdraTI/Szt0CnohWTNrPXM3dGdheClKJXI3LUJMcGhnZTd+
QmkwZys2RTZeWmgocDlUQm9jezNHQUZyXjAhZ3U/Uk1IYUNNJCZGbAp6QmszJXVuPjB1b0JhX002
V05XZXFJZ342UUU2OWM5byNleWhHdnBpT0FAVy1hb25rPDdyMSg/ZkN7b0k1TipVITQKejx1djY2
V3RjS1NSaW0weC1LZTJkNWpCcm1MYW17O1FtO3ttczFyMUdubU5zYjdELUVgdClpOUY4ZlhgMl9p
My1fCnpiaDs3VWxeI3gpJnt4dlM9fHx8Nz1tWWUzMz1NYEFnVTUoeEM+Zmc9Mk4tNz1jTm5qak9y
e3lyaXk2bU1GZ0cjbAp6bkNGPWZuUXY4Q0R6KytvNl9Mc2NsfWVRK2xeWkhBUkg+P19zQHwjI1Jy
NktMUkZBMSVRKz0qUlJXbm9Mc1JgN1UKenQ1dkY8UTByNDBRKWo2PXNFNFgmc0JjdDFxPCZmYmkz
VkIyT3Y2dEBxKjApO1UqbypTQVBadnx2dkAyYVlZblQwCnpiJThhK0NiNy1nZTBEMGtuRWY1UWkj
QDhUcCpjZXtOOzZscFF1Q0IlS0xfS09hcm01Y1A2XzhJcjxlMTdpcnk2Twp6RGRIJmByWmh+c0Y9
YnE5cytPMFFTZ1N+QFFMOUpteSo5NHhyPTZ5fk1ZfiExZmV0fihOKyg8PU1gd0BEMSliK3AKeio7
QyE4M2ExdUxKdiNOU0V+O3kjOD08PkljZlczQD93RnB3VVZ4clZaPlFkUXozMktJZUp9a357Y1pa
RV4reWE/CnoyRDF6IzJIT25JNyhCJV9hYz97d0ZVUTtRUUExdEJLdHJXcm0wXzNSZ3BzKz9KZnFi
e2pZYmNRWH50YVJCOyMkeQp6Wk57U30xfH1nVU9ISnhjP3dWM2Z4dXorbUo0YCFGJElaO21xUnJO
c0hKZCMjKkR+anU9YlA3Py0/dn58Y3Y+dkIKenNKNkllTndWWnhyZGpUYHlsI2JCSWEjR3hSYSN4
TU15O0sjQ0R5eUd5UWRNU3hsV1QjdERlP3AhPzV3VCQrb0d0Cno4TDtLcDJIVVEtWk1KPTNYSlF2
O3g1Y2kqP3Z1VGZlWSQ7KHtYR1dfaHVJRlI5YTxmSmJGXnw0SSN4UX5uJERjPQp6S1loalltZ3o1
TlNrRG04KmZabXs2VSE7WVhgTkc+KD9AMylYU3M4T15ONVJ5T009VFRtcCgzPTheK3pwejJyKUMK
el4+Sk97ZGVaZnNvM29xMz9XbyhZP2wkZ2U/dVhvOyVydWBWbz4/PDwoOElfPjs4RXEjS01TOWdG
bCpuZWVvc1NCCnpmb0hZbkJRSWt3a3lvd1B1KHpkbXNgcHs8N2U0a3JhLVpXcTwyKk9zR1R2RVYl
czBUZCRoWFQrISo4Qm5oMktNZQp6Qm1aUm9kakhWP3IrXzVeWDlKMFdMNGpLV2B9bGYlQS18NDRJ
QEBMVHZmMXJIakcoemU2K3dASnQlQnZqdHMhWDAKej8yeFM/X3ZlXy1rPE11amc7MEx6KjNidUc9
MyRHJmVoZXB0aGxOKiRLYU95U1NRXm5XbW88ME0rKFVFVU1FWFJRCnpNQmJaY0Y7NitLRWxNPmlL
Ql9LaUpsWiQ5R2BjXj1FQG9ORyltV1dhTm8tM1RJVzgpJEhnMFViLX44P0todko+JAp6Myombmlt
QG1qKGFDeEU1IXR7bHc3TzVeMEVJTzd6T28mYzZsPCt8aUR5U0JXQ0dyekBDNXtTdCFYM2hBQX1g
VDQKeihUTGJYVHErKDtAPD1MOGRYbnNzeWZ0fHcjV1NUVzwrKzM+c2dTJSg0TlRwZUktVkFxYnw3
c3NKdnpOSGdPWlZ1CnphWUN2Z09fUjF+PlN5TD1jRlV8fmd8aHl8Wml9fXM5K2R+bFlxT0I3MXo5
WiR3bkM9cFI5WXo0RGhJTT5XbWpndQp6JjU2bzZtYUNwQyZGIyN5JUc7MVBvYlI5aT9Hbk5nO2dZ
dGNoRCVwMTlhIWVRdFpGJjNKYUt2MzNnWjw4RH40N0UKenRVUzFpd2ttRGFQcGo9JG0jJSlqQ1ZF
WTRmbkxHTmcyQS1gWXdIVkQzZ3Z9Oz4paEF2VH5BbXFTPkxyYGBpN2t3CnpKezVfSXRgeXJCbWxj
MjVEQk83RTg7NVZvem5SPld3NWhBYXhuJDJ+KHFgJUEtWXVTNjR3a0J5PTlkbWA0Y1hlWAp6NGN9
SUA/ZStGVytiQF5SREJIVih3bk1xMnpkWDNTV3Y5dWAle3hDLXEqVX0mYGN5WFYoJXJSVCpaNk1I
P2kraSYKel9COEMoK2dyVCV7WFdVUStmQE5vUDFSPUFXJjI2e3YtZHgpaUteLU5taXVqOHR4aiFt
P1oqU3MxTntkaDR6fTAxCnopWVRvKkp5Y1NVKStfNXI0I3l3OXsrO2k0RWUkcGVSZ0lqKzt2O1pH
ZEYxSyQzRSVlfjRMYUkoakMtdSUyaCQmUgp6OWNMWGNZQ0BYd25ucyZibilfUX5UZT9yb0tHRHxk
LWdeODsrYUN7e0coMV4oTzdtMzdZMS0rNikwMWNOJnkxYXcKem9xY3tUYFBeWEpxUEJiSVc2c31k
NHt6X2Y1T20/dk1nTlFFSkc/djJUPUtZZF4wTTNJNklaeGJueSkldlpSJkxECnpKcFBsQFBzaDhR
eVBCQEtUeCtAUmRjQyFLWDd9a0VvO1N8al51MmxVN1hRfU9vO2Z8O3o0TGwrX3I+QDEteGwzfAp6
YXdxLUglZSZja0MrQEFoUHJQNkJLPHo9PEwqMGtmS1VAQ1gqemVxYllRVDQoXlU+VCNfWGRUNyY7
Rjcxan1Kb3kKemtDfjZsaDdFQDZvO1dAXklwUk5ae3B0THRMKGdRLUNZfjRtcVc7VVM3Wnh2bV98
QHl6JmU1M0JwX2xUUGxmUHx6CnpyVHl4Xz5sdkB4Iz1eIVB6UjdxcUY8JGdtYHxaSlorOzwpQ3F1
Jm90PGF7ODFERjB+cnZHcjVYcn44dWBsYXYxaAp6MUROeXRWPjJ6PTAwMDBXVkBPZz4wMDRSPTAw
NGw0MDA4O18wMDRtTDAwNENgMDA4UD4wMDI2ZTAwMCtubDMmRn0KejAwMDZ4TmtsPFpjLXF8Ny0l
RkVHOUxNcVoqX15pODhrUGY+OEJ7X2M2LUtsV0JLa0U1N0UteTM1VzB3TkxjMHBPCnpoYEo4e2g5
SWIqNy0xeVZLelBKMUIqWUB9IWw9LWlTO292NlFJPFk/b14hcmslLU4qcWBkSkAxSHdPLSE3dkNA
RQp6ZTNnaCROK3krOTJWNExXSyM8Q2ExPjgqYlNaflRWUlNBfCFDRTlAN1AzO3wjPTxkRHZZaWNT
JmxePWMxPnBNM3oKemE1ZFJ1YiszU0JRaShtbE5jX3EqZT41Nn1rO2dGYzNjayNHUn1fanNZJE5Q
RCRVXi1sLXU5Kz4qV1kpIT9meVZGCnpmT156XnY+SkdePi1AIyQjJjhmR3JvcGtQczNjR0d0IVcx
WG9vQlF0d3pvZVJvYlVtdTRlfFpXanF6NF5HRWpMYQp6ITBFZS1lPiUoTnd2Xnd8PHtXP3pYc3dP
SztNb3cmT2ppXzAwN259ZlY8P1AxQ0E3V3tOMU1Ye1JYYC0qK1ckbX0KejdnMHZnQjFNIW82IUo0
akZwTWhfRXh+ZzNyO2lZO1VwezF2QVZCJDc7SSZFX0RaJmNjVX5BMnlVMHtBUGkjOEAjCnpmKF88
Qnl1WS1pdGA7MyFnWn1ab0I0QW5zUn5NXmdEfjBYemxnb355TUtVRnJePzVjd0l6QmVtKHklcyFp
XjkwPgp6M1lnYjt2USNaYzh3dyY2c3NoWVRPX0g2T3A3JCR0ZWZifmpKJFlvT011eFVWIWpYcDFZ
UDFNdVg/ZGtXPHVNez8KekJXUX1hbmZWMT8mVkFLTnNaKDluYU5tbF88S0JydytaQC1WWWdiamJn
c1RINnBGKWZ2M2NTPmpCMT9CTmZAXzRpCnpNVnE7d2kjZXMjKilENml8QnNRWGx2fkZTOU1pNXo3
JGp1TSt0REw5UU5MZUIwUyNDUmBhNy1SZ309Xjx8NjZfeQpZME9gZCZGIWhXY2ZkQnZpMDcqcW9N
Nk48JGc2XkYtdF5mYzQKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy90aW1lbGluZVBpbGxZZWxsb3cucG5nIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGltZWxpbmVQaWxsWWVsbG93LnBuZwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTNkNjA0MTNlZTE1MmMwMjRkM2YyY2VjMzQwZTg3N2Y2MjQx
MDE1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5
IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMzM1CnpjbVYraTRmeWhqUCk8
aDszS3xMazAwMGUxTkpMVHEwMDFAczAwMGdNMV5AczZXTmh5cDAwMDA5YTdiQm0wMDBYVQp6MDAw
WFUwUldudTd5dGtZUGlhRiNQKjctWmJaPktMWipVKzxMcWl+TmEmS203WS1Jb2RjLW95KVhILSte
N0NyYWcKel5nPklCZlJzeWJRV1hkd1FiTFA+NnA8ej5BcWZ5bGgje2ZiNjtaKHZNTVZTfiRlQFM9
aipmdGc2O1VoPGlWRH5WCno8UlBNdGdRSkx3JUtQRGFxaWZjQF92WCQxd2J3cjl0bjswLSZqLUs9
NDM8YlVROGo9SnNYYHRSO0RnNysjXkt+SAp6SyFGTSpafnpicHZ0JUsye1VaU1lfPGxTKkQ8WiVM
ejVvR3UoK2RheXopaFJMRmRUPmY1OSZnaFRtZ1dEMGw7KlQKekk3PGtDNmFZWWFqelhwWUt0PSg4
b3RQJDUwSDZjX1Y5UjQtO3taQEMwQU1HNz1GPFJ4byVvcjEwUlVUK0FyJTNqCnprcExoUVdyIyFv
WGdkSWAmc0tePjA5WV5wNmxQMXJJUk14IzA1Q35jVz1IX0F3KmJKLTVEVCZaMm4reClRSFhecAp6
MDBlc2dWOHxtUWNtUlolMDJEXkBTM0wxNnRgTyVjMDA0Tkl2T0t2WUlZb2g2MnJZMzNTNjQwYEQ5
JVkyRC08P2kKejAlNGohRjJaQDQ4OFUlMTU4KDY2MDA1d282JXBXcl5aal92NHpBQTVIamNJcVVv
R210MkxCPnJWJm5laCYjUTFpCnowMDd+MWUkb0NjRlM4bmVJfGhKbHstUCFCMVpaOWhwbXEwKVgw
aWBKd0UmPiQrRT8+JV88bFMqTVdLK24rMWNnZgp6PGsoOFlMUig/VlNBRzZ4IWU3OHd7Y1FQdUpw
QXxkO0opR3tmaWhpek0rRXJiIXAhdGNyNXcrYTM0fihZPThzNEcKencrc0xMOW4mSmpObipLSkRp
cV5VNV47YDFudkMtQHI2UCQha30xVXsoKkk9US16QHRCS0hvSX11eGRVNWR5eUB1CnpVMUowR09E
N09tYmltXkcwMDhwNFpeNl9rMm1ecDxnVz1EMnxMO0hqTjEhRERmTSFYT2FSMn5iTD9rWCQlQ2tT
bQp6Mm1rOz9wbilvfEteeWVKNyVhZEI5S2krTCEzK0ZnSGlTWVgjS0otbExKRE1uOUNCYk90YiMl
KWhSdmBZRHF0X3YKektwaXh8UUR9eWZhMUppUVJrI2o0YTFaKW4yJWY8eHluelY+TEM2UmJWSWtV
eDBiK18rQmFSM2NuVDdadiFBSnhXCnppekZiKWghanlHT09aODVGO2E/REFYUHttQDshMF9JZnE8
RXh7KjdgMDVYRjdoUCsySGwhM0JRSj02QGZMJUZDbwp6OGlZb28zKCNiQUZgQURTcHF0UWd2Pkg4
KEhsZ1J4dDdzM31rM0tga0Z1Pj4tMlEkUU1GZlBXIUxhe2gzMzZvPlgKenVfQ010dEh2NnpSOyZa
TmlTPVg4djNDUiNma25VeEhVeEo8QVltUnNOTFdsKlBTe0FPQVJIdCM1IXdraTI/Szt0CnohWTNr
PXM3dGdheClKJXI3LUJMcGhnZTd+QmkwZys2RTZeWmgocDlUQm9jezNHQUZyXjAhZ3U/Uk1IYUNN
JCZGbAp6QmszJXVuPjB1b0JhX002V05XZXFJZ342UUU2OWM5byNleWhHdnBpT0FAVy1hb25rPDdy
MSg/ZkN7b0k1TipVITQKejx1djY2V3RjS1NSaW0weC1LZTJkNWpCcm1MYW17O1FtO3ttczFyMUdu
bU5zYjdELUVgdClpOUY4ZlhgMl9pMy1fCnpiaDs3VWxeI3gpJnt4dlM9fHx8Nz1tWWUzMz1NYEFn
VTUoeEM+Zmc9Mk4tNz1jTm5qak9ye3lyaXk2bU1GZ0cjbAp6bkNGPWZuUXY4Q0R6KytvNl9Mc2Ns
fWVRK2xeWkhBUkg+P19zQHwjI1JyNktMUkZBMSVRKz0qUlJXbm9Mc1JgN1UKenQ1dkY8UTByNDBR
KWo2PXNFNFgmc0JjdDFxPCZmYmkzVkIyT3Y2dEBxKjApO1UqbypTQVBadnx2dkAyYVlZblQwCnpi
JThhK0NiNy1nZTBEMGtuRWY1UWkjQDhUcCpjZXtOOzZscFF1Q0IlS0xfS09hcm01Y1A2XzhJcjxl
MTdpcnk2Twp6RGRIJmByWmh+c0Y9YnE5cytPMFFTZ1N+QFFMOUpteSo5NHhyPTZ5fk1ZfiExZmV0
fihOKyg8PU1gd0BEMSliK3AKeio7QyE4M2ExdUxKdiNOU0V+O3kjOD08PkljZlczQD93RnB3VVZ4
clZaPlFkUXozMktJZUp9a357Y1paRV4reWE/CnoyRDF6IzJIT25JNyhCJV9hYz97d0ZVUTtRUUEx
dEJLdHJXcm0wXzNSZ3BzKz9KZnFie2pZYmNRWH50YVJCOyMkeQp6Wk57U30xfH1nVU9ISnhjP3dW
M2Z4dXorbUo0YCFGJElaO21xUnJOc0hKZCMjKkR+anU9YlA3Py0/dn58Y3Y+dkIKenNKNkllTndW
WnhyZGpUYHlsI2JCSWEjR3hSYSN4TU15O0sjQ0R5eUd5UWRNU3hsV1QjdERlP3AhPzV3VCQrb0d0
Cno4TDtLcDJIVVEtWk1KPTNYSlF2O3g1Y2kqP3Z1VGZlWSQ7KHtYR1dfaHVJRlI5YTxmSmJGXnw0
SSN4UX5uJERjPQp6S1loalltZ3o1TlNrRG04KmZabXs2VSE7WVhgTkc+KD9AMylYU3M4T15ONVJ5
T009VFRtcCgzPTheK3pwejJyKUMKel4+Sk97ZGVaZnNvM29xMz9XbyhZP2wkZ2U/dVhvOyVydWBW
bz4/PDwoOElfPjs4RXEjS01TOWdGbCpuZWVvc1NCCnpmb0hZbkJRSWt3a3lvd1B1KHpkbXNgcHs8
N2U0a3JhLVpXcTwyKk9zR1R2RVYlczBUZCRoWFQrISo4Qm5oMktNZQp6Qm1aUm9kakhWP3IrXzVe
WDlKMFdMNGpLV2B9bGYlQS18NDRJQEBMVHZmMXJIakcoemU2K3dASnQlQnZqdHMhWDAKej8yeFM/
X3ZlXy1rPE11amc7MEx6KjNidUc9MyRHJmVoZXB0aGxOKiRLYU95U1NRXm5XbW88ME0rKFVFVU1F
WFJRCnpNQmJaY0Y7NitLRWxNPmlLQl9LaUpsWiQ5R2BjXj1FQG9ORyltV1dhTm8tM1RJVzgpJEhn
MFViLX44P0todko+JAp6MyombmltQG1qKGFDeEU1IXR7bHc3TzVeMEVJTzd6T28mYzZsPCt8aUR5
U0JXQ0dyekBDNXtTdCFYM2hBQX1gVDQKeihUTGJYVHErKDtAPD1MOGRYbnNzeWZ0fHcjV1NUVzwr
KzM+c2dTJSg0TlRwZUktVkFxYnw3c3NKdnpOSGdPWlZ1CnphWUN2Z09fUjF+PlN5TD1jRlV8fmd8
aHl8Wml9fXM5K2R+bFlxT0I3MXo5WiR3bkM9cFI5WXo0RGhJTT5XbWpndQp6JjU2bzZtYUNwQyZG
IyN5JUc7MVBvYlI5aT9Hbk5nO2dZdGNoRCVwMTlhIWVRdFpGJjNKYUt2MzNnWjw4RH40N0UKenRV
UzFpd2ttRGFQcGo9JG0jJSlqQ1ZFWTRmbkxHTmcyQS1gWXdIVkQzZ3Z9Oz4paEF2VH5BbXFTPkxy
YGBpN2t3CnpKezVfSXRgeXJCbWxjMjVEQk83RTg7NVZvem5SPld3NWhBYXhuJDJ+KHFgJUEtWXVT
NjR3a0J5PTlkbWA0Y1hlWAp6NGN9SUA/ZStGVytiQF5SREJIVih3bk1xMnpkWDNTV3Y5dWAle3hD
LXEqVX0mYGN5WFYoJXJSVCpaNk1IP2kraSYKel9COEMoK2dyVCV7WFdVUStmQE5vUDFSPUFXJjI2
e3YtZHgpaUteLU5taXVqOHR4aiFtP1oqU3MxTntkaDR6fTAxCnopWVRvKkp5Y1NVKStfNXI0I3l3
OXsrO2k0RWUkcGVSZ0lqKzt2O1pHZEYxSyQzRSVlfjRMYUkoakMtdSUyaCQmUgp6OWNMWGNZQ0BY
d25ucyZibilfUX5UZT9yb0tHRHxkLWdeODsrYUN7e0coMV4oTzdtMzdZMS0rNikwMWNOJnkxYXcK
em9xY3tUYFBeWEpxUEJiSVc2c31kNHt6X2Y1T20/dk1nTlFFSkc/djJUPUtZZF4wTTNJNklaeGJu
eSkldlpSJkxECnpKcFBsQFBzaDhReVBCQEtUeCtAUmRjQyFLWDd9a0VvO1N8al51MmxVN1hRfU9v
O2Z8O3o0TGwrX3I+QDEteGwzfAp6YXdxLUglZSZja0MrQEFoUHJQNkJLPHo9PEwqMGtmS1VAQ1gq
emVxYllRVDQoXlU+VCNfWGRUNyY7Rjcxan1Kb3kKemtDfjZsaDdFQDZvO1dAXklwUk5ae3B0THRM
KGdRLUNZfjRtcVc7VVM3Wnh2bV98QHl6JmU1M0JwX2xUUGxmUHx6CnpyVHl4Xz5sdkB4Iz1eIVB6
UjdxcUY8JGdtYHxaSlorOzwpQ3F1Jm90PGF7ODFERjB+cnZHcjVYcn44dWBsYXYxaAp6MUROeXRW
PjJ6PTAwMDBXVkBPZz4wMDRSPTAwNGw0MDA4O18wMDRtTDAwNENgMDA4UD4wMDI2ZTAwMCtubDMm
Rn0KejAwMDZxTmtsPFpjLXF8NyZyOCVuN3t+R1Z4VU9SRHZNRFhKc2dWXkpRWHp6YTVkQl5WMVB8
cHdnb3g7dG9kU2lSCnpiTkNsQDIlPXc1T1EoXytnY1VuQGtiPGI3KDZyaXVnIU59KG50cCVHXkt7
VSF4ZkdxaCt2aGR8MU1efkBuUiQkPQp6NStze1IqOHJEK0cqQ3JwQm5SQVM+Jig2MUlCNWJ7SGp7
MSM/KEojbk4rZVMpTTlNMm1MTiF9PiQ9STcpN1Ahe2QKem5kPldwV2kjbzYhMUZeI3VTYiV9QnNr
QiY5fGIhVFVYZSphY155PDlXNypybSRJJVIqI2B+fGZjTWJMZG41UGQ8CnpSUkZJSnZ8TVNidWQ5
Tms0QiR7d3NwQDNHKn5qM01iNT4jUis0RG1tJTdCalReQHA0NDgoTHZ5dT1HJVh4QTFfNwp6PTRv
aWBoPEtoezFTa1ZxdDd9cj00MT05NERVYnI1Q3dSVyNGMTtXWS0tX3FUMzRuNFM1c2Y8a0x9P2dO
UjxXWTEKekN8N1cwM2VgQmlYZmw4bW9TJERveDItUHt0MD1KWEQrbT16TDFZIT94YE58Y1J5PiEq
WitXYmhMSTR8QG8mRDBZCnp0RHpkSm8zWns2TD1ARjwhPm0+T3diT0R1Z1gyZGk2ZWg0JXZqSHFP
SnZJQSFWKkc3JFo3UFFFOF5yb1d1KDBgNQp6KlVIY25UdSpWbUNeS2BQJD4lMipCTjIwUntVM1hM
fEt4cnZJPXAqbEpXLXE0Z3RkeEBBfFZsfTZwdXZ9WWslWFcKenJrOG0pX1Qzc3wmVUUqVl5jUXM9
azhVNHReanloUVo+ZWFHJEQpYHJnR3pBTSFnWDRAX0lVVktuVldaKm5fbnB5CnpWPWk+fWp0dTxL
UVUkcXQ8SCV8Mk9JbFE4Qkg9NT9VPn5aQURpKzhZIUAjQVVrPiRWa2l2TEBGNEZEcVRQdktQTgpS
b2pte20wMDJvdlBESExrVjFmZnhJJFF0JQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3Rvb2xiYXJJY29ucy5wbmcgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90b29sYmFySWNvbnMucG5nCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwYzJhNzA5MjU4Njk0Y2Y5NWM4MmU0NmRmYWVlNTI0ZWZhYmIw
N2Y5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkg
cGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMwOTQzCnpjbVcoK1JhamUxdys8
ZyMrK0I7aUpIQHFsYWQjezM/cEVCMlRQZWpVNmV1cGlUPyM0Z1ItRTcjTktYRTlrKTFzSQp6QkN9
PTl0aykoJU9HNjBAb2c1dGkwQVEmbyVZT21ANWEyJW4ocjc1fjxHb287QU49Y2BocTk0MzBEd1g4
elloWVMKenBva096Sy1ZQVZsaGV8MmJvWCloYzY5ZmtSZ3NnVV8zKDFIY1hGYDwwMFAjRWJzVGhj
UEtaQXxaciNiTWV1PzwxCno+aSZyY2pyTm1sUVVxWko2QzIkLSs+Yy1BJTJ0V0EyazthV2tTTkIj
ZUwrbDNqWXVaYT1EPHV1VXFMO2ZgPEB6SQp6e3Z+a3x2S3c2UHl3dm1mWndBYEJFT31JYVRpaH4t
K0srfnJxcypAQDc9YytNT08zWV5KdktiTGQlel9maU8lMncKenooczRaclNwRUhNKnV2OU5sMzgy
Pz8+JGVBT3dJZyY7YjRGaDViQn5AaTNmSSo/ZCFraCF9KV5wOX5SSXY8TzBnCnpiV29+bkJ8dXNj
QSkre3NOZUEhXjMxQiY4VzQjYTE7c2pWU2h5TWNzQjhzMiNnQW84R1UrSVZ0ekdWUHQzR0JZZQp6
MTAyTnhePmd9KDNJSWJNMEhNOT11cWFASzZUcVdsVjZQMUwpZWgqTiNsPmdfcGtWQGR3NzxsJTAr
NTBNbWdEc0YKejBmM2wlMEhOWklmeTZhPzFNVSRVezdMMEVPTFFgYkRueSF+YWVBVH03O3NVdSUm
TCZFNkFEQFZYSF84MEg1aXlyCnojdXE3b3Z2V0hRMERRfEpnNVR9IVRmaSlLIXxiZTNZOCRvJT1Q
M3tjX1RKaWhBOV5AZj1PR09NP0R+WXdMcGl1eAp6JFJvczJCM3o7MDg4NDk+JWB2fERKfEB7Vzw0
Q3N4ek1aVFkrPE5AKSooajh5Y2RvNzs5dnJORTlGe2Upbmx1UTcKekl0KkkkOEAjelpoZV5DWC10
WUE3Rit9cDJNSmdkWj9GPiVlc1p+KFVXeGs4Qy11UmNNXnhCUkFkISspc0E2QnZNCnpHLU07KCpU
KGx1bGBseFg8KlJzfkFlK2ZMIW5ncGwtUGA3WEFXQ2l2MClCbSNMPHI4e3RUd1lqZHtBWV5IVDNE
PAp6ZGp0Uyh5ND9yPHZZO1ZHSTdhV3pgTlAwY1olV0A3MFRLMnBuVnRaRXhqWH14P3FyTTk3I2FX
fHwxRmEzbWtoPC0KejA0WWE1M2dyT3Ujc0oydnJCSUE0IXw8Uml0fU1FMzFmYGNIWWtpYX5PV2Uj
YURtRnsqenRVNiF7bzBPa1NzdkoyCnpnTCltPEEzU2hndGs2bVpTYjhHZ0E8MnhSNW0/YyFlTD04
SkdeOV5PQmd2MF9xOG1efiFjU3RMbyVsa2l7YSFVZwp6UD9gNXJxQXNuVEdTJHJvdW00MmpPJT1O
YCNLIUBBUUxrfTVPMXhocW8zJWd1I2NZLTl0UUlEWlFUJmVhJEpVM3AKekFkVUUyO1VCTng8UjZs
UyU4dmZqSXBWQ1BOeT80IV5kRk89QCg7VzRhRSVWaEhpPlkmJWQoa2pkUzghT0glazZYCnp6YUZ0
VztvZkdoJHNZK25RbGJCeTVSJCh2dHJmTTV2WjAheCMpQCheRWhVMmgtcjc2aWNaZjBDZ1VzKTxz
I1NrOAp6Yj5UZV5sVW5vZiN2M1lnJkBiVnE1cGQlTWV+fXYmWDI0STc8NzRoanw0KmdxaHdjTFln
NXJZUEM7QWhQbm5EMygKemF7OD1eSEN5THFSTUQ+LXdDdi10MmdMX04ybUEqVjJYcj9rPSo4QzNv
PEUqK19FPGhtZSpRPnloPGhrLWgrPno9CnpDITwkaEBNKktVT2N6ZnUlfjx3bFM9KjtaP2Y3Wn0w
cDl9QW5QXzRhKXJ6MHJ2cTl2SkIjd194am1KSitjJD9ZTwp6OG83VEE3TiQ7PWomcUxAQEJBXmI7
KXRUaHpCc1V1Nl9UUW9JKnxGM0hzK35TbDdXKVEjJm1ndmRDJjVXQF5TTHIKel4kZ2tDKmd9WGhD
ZWdEJFc7MTB8dXlPMHcpSz1EUiluZSR+PlBfalUpdEt2cUhZbj14PitJTE9gPHFqelM2aSVnCnpy
YkQ2UVAkT08pVStZbHF0fUZFOyU7K3J2I2JgKXZOS0B7SV9PflhCe2htPTszPiZoUjAxaTU1dGh6
WWdOV28jSQp6cmtUfGNLZXEwP0g+JlFXNTRBT0FxSF9FbmAzK2g9LUZ+JX5MZnl+dmRAQXpNY3o0
ODdtM3RlT3hKM3dOLUQ5UHcKejZqMUJyd0tIfEQmQkBJJXRXJlBqdTJWWWU2PjdNc0R6NUJSPXIp
MnhWI3x6dVdIeDExYSE4ditFPFZ5KCkhRDI8Cnp1T2UzZUFhPnV0UnFJP3FRUHdUKjR8Sj0jJXEh
X0xrMD89ZHVpNlVpSiRqKUc8JGx3QmJBNzQwU0hkKHpYfkFTYgp6Uzt3M3VsXjdCOWJlRXZ3OSRV
WkdtTk9mWW1hRE1KdyN3YSYkPl5NeUN8XmBlUU4mNGg4YTNUIyptb1V1OVc3QDwKelZXTU1GUlg8
Z35FY20zfVM7PC17dHxxUUZIWndpKmVQJF9OdTwhJSNHVCV8KlFRPm1vY0R0bzxmSDZsfmJ6NnM+
CnpPN25xbnJPezx1azZXeTxzOE5OWHAwUWJyOz9McnJqNyF9PXlRfWMzSXlKSTE+UG5VemhKSWJR
T3w7ZHRsbD9rZQp6TDBOQlRiOFFRP2E8Qz9HWGRoYDl5M0ZkJDNoZkZfZEhhQmg2fkJzSU1gY1ZF
PUtiND9QKXVLSnQ2O1kxUVl2KWgKekY2Vl5YIUVnP0RaaVJvcGpiTXMoKnJgfmo1VHhXbDs/VV9H
ZWZ1UlRLe2FaTURfNEBNa1lhUm15IVlVdiYlTE1GCnpacVVNZ2FiWmowOzY/UiU8RTdCMChgRWNk
PjlqeThZbCN1Ul9uKUQweGdHN3BjYDF6MlkjIShCYFk9czclfTlzVgp6QllKS2Q/aEojVSVmSCR5
e0EoWXJ6JEI2bmwzdTB6bEtUP0VUWU90YTdTcUUwP2M/b0publVnLTdPfnJNO3EpK0QKelNQKk87
UCErKzU7RERHQURIQ2IoQUxKPTBnYnRXMENBTXomKDdidmZsbC1reWhEYXRZPlN4czl6KXcySUAk
PlliCnpiZE5gUXZsKzhhKnMpcSskNGhAdXReUWRoNFRXSmMkSHZEUiM3VSlrZEAmQFM9Z2slTHBX
bCU0LWo7dW4meW45TQp6Ymx9dyNaUkdxWSRSPTZLXjt1I354SiNmKllMdl5+WG5ON0cqaWdrcWx+
Ujw4dHdHNG1yRW1ONzt4Pk0tY25AUGcKem0/ViNUK3tgMWVZPEJRMnd1LW9oMyFnKFFNX1RRUmhS
RHx8OEM8cSU7JCs0ZjApTkktXnVSJT9MNUtJO15GczRxCnpSXiZ8Q3M1TmVzKzA9dEYmb2c9aTB+
dHA2RD54MjJXMC01d2QoXlBoSFZlZntoenRCXlVITHdVXzN9biVXfjYoewp6KjN6a0d3SzwkUntJ
bUMpczwoQDZoS3slO3dSMk52cWZSKXRxfUwtR2FpWGAkUnZ6bWJ2bjtjckhhcGxFKmFLJTAKekNQ
ajFWTzR3JkVyZHVaMCh9anpgckxZVjlMSHltIXd1KDRhMTVQVCNmNCVqZU1WbG8mMUp9e19pSUNh
al5paz8xCnpJdWhJMVRvKk8jRSh+JVQhZ2BzNClTVjtFMlBVSGlTYG5QakYhYXo1Vj8pbjJtTV9k
UzRZYGZCVGRpSz1pWVgrQwp6NSl2Qi0qR1kxVCFkRi19MHVDd1MtNncoaDgoKTlkKUQzc3EmZTw+
NnBad2U2RUhTfihzbT1ZRGl8dk5CeTduN3UKelRtU2RQe2UhfGZja1Q/IWRVdGYyVHhVNUBxTkIm
SVlHUVVxVHVTJGM/dyMoN3VGJlBlV348Zm1saVUweU1SM285CnohMT8wM056ZGIoPFY0QFA5KWgw
d3FXeipCTDxRM0ZEQWtacWQtOVk2YVcocz87cCV4WWhQWihFaER3aiF3JXF4NQp6ayFzPEM/eChh
Ul9BQDJ5RmA3UFRHMSM5SU85KUZackQkfUktYXxneztOPGIkXzlIY3gqcVVFKmFRIVlTaHtsaH4K
emZyfFVIWXs1LXxWeGRqfSNLaFg5T0xKT3NlKDd7OD12OFQqMkIlMHMhWUpfTHQ/cT09K0RRfkIl
aSg0JnhqNEh4CnpHPnEkYyEqY3o1VGt3KDE/RGw2SWNXQFczJitkVyhFYV56Uk18e0B3cm8tb15k
SHM7VXB1P2JgUU92XmkpYU8oSgp6bmchQXY+bmBkcFh5YE9gP3p7fUBaNElgNkpmU0VOcDU0NmI0
WkozWEVpSU9hZSVTMjI0UlVgUmRBIzJ5LVZGMCUKemV3JkBAVWlEfGJ7TW48flZ7cz5hQStzdkM4
TlZvSDBeTHt2Wi1qc0RfeTJZfnpvR1BxNSpzfVMmQTNtKWt3Wj8pCnpQbihMdmlhUlMya3JXbChs
ayQyeWQ5OU0wdno9b3FBJVQ4fVBCb0FhYkI4QEdvLU5QTD1ncFZwLXNFTmhUfCs5fgp6UFcjV3U4
ck1lJE4yJldKMHtENSZAQU0lVDFPNk5TUk4oUyQ5TDw5ZStIZStfPDgjeCEmWXZuczdGa3ZuMzwp
dnMKel9TSkA7YX4rTzFYPkY4MHNSSUIoaX52QUhHeXcxbmdNWGdAMEtQbGB6Xk5xd0FlSUxKa2hv
YEJqM0AjQ1pzO29WCnpHUChoND1lXz1VI2RnSXtaLUoqTGMwcnxUZD8kM3BHM2hafExgVm9FM1dP
WnpsVSZzdT1XfSlueHEySW0kUVcoRAp6WDJFakUkbnE3LVQ1eytvUyR6M2g0em9xKEM0UnYwcUQ9
bFE2fX1HV21WZXtmQ1p1YXR1eGNpLVohUj1FSTZEVVMKejc1b0FWUV57bU5hTz1sbGkyelZhdnFA
QilIekxfMFZETW1VTHQyKCNCYF9FO3dfdlAwLX04biRnITNBUjdPPXBHCnokbz5mNGg4YUg+d3o9
OUU1dlQ2JmgreVp+U3M0K3h4bnxBU0NuJU4mXmxzVVRQPUB1Pyl9OVZjPCM0SihrQEZXPQp6Zm5I
WE9HOFE/Uy1MXn5Pe3wkWTg4WSktbTw5fHlzUCE4QmNmSTR2dVk7dlIzWEI3aChSNCUkMkVjfSo/
OUwoO3sKelRqbkcmQzFfKkQtKz11d25vc2pMaGZ+cCEobVE2ZFUhM2lYLTBsTTsyR3AxY3szKXZw
R0puTTVDayVyaCZzUGJnCnpASmU4c2NLcipPamRzJFV1aH1yIVdsd2FSeH5vVGR8RFVAMGBWQSZj
KShXOHJhU0tEOWxuT2FeR3dAPzNMJmE2IQp6Q3JqJigqV3gyYm5HNiU0RXVCPEsoVk0wSXt7Qz5h
P0kldXE5OWtgcDRqNF99Z3hxJUU3dDR4TlM3VlZqODgrJn0KemhpPUozJFVlQXFDQlBCOTx0P0RP
X18xK3Jkan1eVmJsfUB8OSUmKHx0QSF2PzRsUChVI0NDNSlwLXooYFVrYUU0CnplcHw9IXV0bENa
bCtpYjF4b050ZnpGWlRjZEtURkVve0M1biZNXl9maWNfXk92ZUZqb0QhJFRZV3tzWD5tb1p+Ywp6
TW9NYkFJflpHQ2AlIzNsJisyK18xbykmJXlUZUt2NXQxTThvczBVa0o5X1VoP1BTemJXTlEwJCRs
Y1l+e0VVMXsKejVjNWNpUHZ2KW4mVm13cVV8Pm83ZWRBY2I1amFhQ0BjV3M4elA/LUVeUz9yMSpr
JEtZZ0hlfUhqbkNFMnpeKkQrCno9WWV9SEUpTDlzM0EqcDBpQnxUR1A1PmtAbXV2VURgU2EoYEMy
Pytgc1lTREdqWDNUVkxESS1kd30wZEhAUDMtZgp6K3VLXys/akVDX3A4ciVjMk5CYylmbHd2JD5y
Z3lTdF9MX0FBNXA3SGg0dz0zYW1MKk9JQF9Oc0FiaDUkUnw4UXMKejlkMTZ5PERYaEdPSmxseG9z
Z215Xn09dH1CYkw+Ymd1VUt8RklpI0cqQHVYdk0mdGgxeEQzZj8kTGU7ez98Tz5fCnoyNDNYP2Zs
bHw2ZEttNk91b01wUy13fENvS3xaK3tZSzdQSD87YkFCSSh+KVE/a3JzXyV7Qj59dWVAbWUrMyZR
Xwp6S1p1QFBtJDBaQVhaVD93QTg+QSFUUzZqNUFkOEVNTFBrVTV1dm57eWlHfXN7Kzg+RVhXOFEy
I3EwcXZNcko7QnIKeml9bm5LZld5T3VvSn1vQkpCang5MzJ3RCpPSER3byUoKkkjSyooSWJwMG1O
e3F9Zmk9UndyeD9LMUNDfjNkKiZjCnpeSFhOQTdqdSNBcD1eM0dyWDF3dyNiQHUmdi1TMTBge1JZ
ZFFtQTkze1FARnU/KGohbWlWezgwKj1kVGNrfGA0TQp6PGV8SWx5QUt9PUNqR3kkM1B1eDZYQn5P
ZmBIe1hrOEJaVEJLbV5wY0ZafEJ0IXVBTUNwSkV3UVc9alhJWXt4dTUKemJ9K35FcE5zVk8wKXo5
U1FFX2Y/Tn0pPWA5RVFvOU5JOGdUR09rJn1uVEtfRWs3aDgwKDh0VG9rbyYlSFY4SFZZCnpoenQ1
T0NZOVE3N0M3T0x6TENYe0ZjJUtKLU9nbj1xMzBoa21NQTZvMFB7WVBodEQ4TSRtKDM1NUAqKXlU
RlNQfAp6aHFycTZeJTU4Rih4WTF6LXtaX2o/bTtgdWpFMVF2I1JmREIqejVDQ3ZUQiVAM0R+ZHkz
QjF4VVJ6bihfQjF1TlQKenZhLVQjMkpEMkwwcHlqV0FCOVpgOGVDcyoxUHZfYWBgaXxkaU1mckdf
NEpWWSZ9bms0dlEpYC1oLTBHa0kxR0Q4Cno2KjVTdlkzaVF1PDxkNTk7PHUlc1ZNLWFtbjhPZkp6
N0ZAdig1MlImcChhUzgjbTgwcmZjRXY3cnphOGJmNzFoUAp6dThOOV52KWdeNDVTcnglR3N2dXpl
O1QrTz58Rlp0ZElTdEdiOUxRKCQhMGdXOTtJbVhoQ1V6ZCltOHJocipMfDAKemhyaio0UTQ3eXVH
SkYzKUVjcGBTe1RiSlJiZTxnc2FmV0pnVj9GdFZpKlA3dTNMQlE1VWw5c1NCMWl2fWVkfmwmCno2
YEhyeHw2QkZjeiYhQTl2d3VVRU8ra1IxRjw7R1ZVVigpM2JxQ2VgckQ8JXgoWSFaXlplflZaUzVJ
JkU1clV4MQp6bChrNGVLKFA0c2hGQipxaFEwYXBKUXNldzFpNkgpSEcoXyM5fiUyeURiI1hRayp0
a35FdUsjX04jfjQwP2tUb1cKelcpI0JUdDRAMFNhKjU9VyZYQ3EpPXFYVH04bSFvT09tVi1CP1V0
SGEyMTAhJHBDPmZHdndWQ2Z0UWktYSR6VD98Cno+QVNxXipSODI/S0M8a2RgO0hJQDdReVpgUDJH
T3xDJWx+RjNfI3k4PkVSOVdQamIlVVc9LUw+cnk3MjU2NlhrZAp6KTIzRE5pWSg4OFIzZEUjZUB9
al9MYTI2bzswcTY9cnx5ZyplcEtBdk9EWHI0MU4rK2o+d21ZKi1xYGJCfExgeXAKejtCNHZWe18l
V3kjV0pWQHk0TEVmVDFzTXBMMDRUQCRMPHk4K0Q3czNYVGY4bXB6bjxUUj4mPFJBODUmJlMpTTZg
CnpPaCo+P0xjYkUxUXFSV3Q3YEs8MWtqJXtNZyNyIyk3Qn1rcHRaPnppXkxsQXY1I1RvIUh5T3Qk
dFFkemE/QCpDaAp6YjRzfCFCXypLX0xqVHYjT0NYKWU7QTYmSUpQVXM4M0IxKUpqNGRsR1F9c1Z6
eHhPazhibCFVTiVqKncpNEU2VHEKekQoK3o/IzVWUWFqWGokMV80UTNvT1MzdWZJXzRydEJJZFMj
ViYyfkM4SyVZM09IV0RPdDQtYmNrKlE0MHtnRVl4Cno5RnhEWDN8VGF8YFpHdGRRblJmPEpRPG0j
bTBXckZ5NVM9YiE5Y3pIX3d5aEljaEJwNVRHLXdEKyRxTTx2OVl1Ngp6dUNENWFoOCF2QXdNcElD
KiVgZFNzaX4+YCsxeGJpdXBueihSO1JgTlIjc05SczdsTilBbitTSDxHUVdeZ0JNfikKeiZHK3tL
YkZTXjFaTVBSNm1EYnc9WnpoO21tcDcrRXgxclJEe3w1MiMhXy1Iclc/WW9tR2hAYlI0IW1JQEk1
ZmNmCnojPXdgOHM/TUQjM0B0KUN7U0lMWDNBTkRCNTZ2N2w+cTM9SSZ+fUU5UDk4a2o5azAlR3lM
QDtwWUhINFRHRFY7eAp6Wkc7Xzh7fXhhZ3JEbDdqTT8/QX5MIS13Uzg3cXg5Zj8qVnhOJUVoejwk
dHtwPikkNndIYGl4d2gmeFJgeEEoSFEKelZlYzNzbTE9RG5OPD1VXnUlR1pPT1EpVGhvantmUVRo
NU0tQX5qdFdDTUxuTTFVdkdRU2U8fmxQWEw4YWd+MGk+Cnp6UG1QbVElXkUpNT5BX01RaXwmOHhF
MitxVGhNbiFeXnhESEEqYEZfXm5BRSE0JDQyOEpGcnIpb2J+eUhORXlqbgp6dy0tR3Y9V0dAXiom
OWowPnFIK0NxPGooeUdaXyo+QXJJR288WiRxPzwyJnp7T2MwKFArSldpPDxjRkshRnlWYGYKejNy
NEpkcDV6NjBMY3ojXmZkUE5sJjkzYF9gP0Y7V2V2MEFGJDFNb0FHNlUxNDVpbzJzaikrfCFIJGAh
XiokI3Q+CnppVjcxTz53MF8kMmVoXns+T31KX0A9KEozWWpqVUowcV5mSWxEPFRndjM5fSUqMD1h
TlB0LWNKQ2tjaVl2U3decwp6KkRxTClwY1JwezNPWGtjYSZ2VyUoNSRAWil+SSFwTWFVdCQjbVEj
Ul5FcmwpYF9gUipqcVlUeCpXcEwmQ1FfMyYKem0pKXp+QXhzPmMrfjBAKjtJXmcrV28ySnEye0gh
cEZVUkAhVCVBd1dmc1pFTGpheXg9IVRZX0JUajklNnVTM2l3CnpxMms4Mj89eUNTd18lZDd5Wm1s
I0oqPiMwdXs2RX09VFUyaEctYHo8VSlpYWdMI25wYWVpRjIrMWFXOHZjUjE5JAp6LVUzSnMrX3Fw
QyZVeWpDMlFKaDRAKigodk0/eGFgSX04OEU3ZH1eRnFhMDFVIUU4eGtee21RRENTd3k1Rzc1XnEK
ekxCSyYyJTh0eT0pTEo8amxCfiNocmYmYVkmei0tI0NwISE4bXk8QVApMFJNY0ZIR3E1a19QfTVo
ajRCQUtiUmVFCnpkJVpwUnNjQFU+aD47MVpFZHdmUHsrPzhvTi1GRztoKzE2VjNPWDtyJilHfUYl
eH1HZG95bUw3eytVM24pXnE2Rgp6VH58Vj1pTCRZVl9lQj5mUlRRI3dwPUQ/JWpgI3tJRVkwJTFj
SWdRZE5ZcW9ZeVVHVkt2XmtVYiltS14rPSh5RkAKel85dXlwaiY3bTF5TkhsNSEpM28wTEhmPTA3
elNyJUw0P0ZsJDdTKTwteTBmSURjbX5CaERqd349RkBJJk9KUE15CnopUFhWTDtHVUtyZiZtZ0d0
VSNVMGNjIzVJVzJ2QyFkWlUoJGdHXlo4VncyJVBOejI/OzQ7JlJLYDF0JFpFfnMrUAp6RlIhY214
XmctY2Q3XllSLTBwZUxkN2NQQCVmT3A3VntiSCV2e2ojMG5tcHh3QFZuVShDXjVeQ2g2MzJ3dTk1
NUoKeiVSX0JsZDYwaGFYPU5OY1Nteyo8WD56PVg/aHRfYm1BQ3gyTHgtOVN0d0V+fT90VWJARUFW
MV8zaz8rejVjR1VsCnpiIVo4PXdsKzM0MXt8TkE/VDwkeW9eSnQ1OVpFeXY7RW1ZfTRxdXpCN3Rz
WkJgPmR2TmE+MVM4S0ZFOWo0YkwkYgp6MFIkKFFlND1ZKHBOI3F+V2tGJEshc3ZJPiUyPCFkdVBr
R1ZDI1E7REY4fCNjWCNjcyh6e1NNSTxfbXwwMzx9OyQKendBcno8RlMpWG02bztfWXhFY31EKTY8
KiF0PWMmajIkakZIVG8tfV5pWk1AKj8jPCZhYjNUbHVaTyotcXFSfjg8CnooYzkzNl9UUnNNZTxm
QSFNND8zfXUhJWUqNFJxb3t8R3stQTIlck9+TTVNQ31YMkdfMl80SDxSd3E0JVNPfWYwdAp6PGFZ
dnFea0FjLWlaMUp0OGYlKjJVdGB9TkhqZzYjIWI0N3QyLVZBdTQmQHhxU0grJTJkQDFKR1YpdTFL
cWZkPSMKemhSVTtTYiUtNWBgeXc3aHY3U1B5RGFSKTJeaURXNzV6QWV+U0NuWWFuTXgqWkFofmBt
LStKKj5HT0hXalMrREpGCnpoODhRaUJsZVk1bWx5PmYhcnhgfCt6fnJmIWB6WTBPbzU7VF5sMlpC
UERfdS1ZYExib2RaKHJJJkVAM0UrMWM2WAp6bW5BfDxOKHd7UDFaVHZOWkUmJmprNHhrM3AhPk16
VGF2M0tsa1J8diNwUUh7ail4Q210RCFpb0EwVmdaUmdUQXYKelRaTWwhcko1aTtGIVJlb3hofkJ7
YlFhfVVWb0V1YTRhKSVUWFB5eyMoXnpLMWdsJSFATmdwMDBUT0B7WjZtTUN2CnozJntyS3RiXjFq
eGQ0NVNxUkB2eEwhdEI0bWZWMHJDUXxmeUFeJiQ2VkB2XksjUmwqfm80WTtkcFMhOVdxakF7Sgp6
Y2tvKHNubz9vWHE0MnZ7XkNqVjc9WDVPNSskfTNeWV9TNV9gelhCNm40SkluU0s/Nm9gVkZFeWBk
eUBxPVExJkkKejBiKmxnR3lHa2ZXOEU0UWNtISY5cGE0c3soe3RxfXQ+IyZeeHpiUFo1ZktxRnFW
U2xCODBJTU88c1Nme1hUWVplCnpXfnFlcmk7e21WbEs8JTA4fl9TY3J3UUt5X19WOX44SFBWPkx8
SjZuKCFFUG9rfXxpT2tlbU4mLXJyZ0lQaH1SUwp6cT9aLTFXQzF9amFDO0h+MEs/eDNkJHo3Z1h8
R2RFK0gjYUFIOThaP2B7NH5YO0M0bj43Mklnbm8lN1NBSj9CVFMKejczcSZwdGNwclhzekB8d05Z
ITt5c0p2YCFZPkJsdWE3Zjs1b153Y1RTXlg0VDZASU1OT3J9SihCXnFKQGlBdH1tCno0ZFc5PCRj
KDkxOE9QVH1tTm9Uek1yWEp3NX5FSXwqfCQjfGR8ZVZGWldGdlotNzElT0pDIXUxVX5fVj5za2w4
Ugp6RWpDa21qU01wRkpDPlI9QHwkcEhHJElTPUhiMzxPZUdCLU54fVFFe3VUdD9UdVFIK0c/QztW
TnBRdmNVKiMwZ1kKemlKV2YoT0JkQDVvVFlLVSUteVk5SlBpV0YqaG4kV1RXd2VJeVNoP3UpfD95
aEZwJmYyZzEzZT9JPXkpQDVwJDx2CnpVRHI4YG5xd1NGZzleXjE/JiFgYlVedUpZUVczJkokeTc7
fUJrIXlBVEYwcXI4ZnVOQlRKTUwpO2A3eH4od2xDfgp6eDQqdHE/X15NWWB8YkNtNlhXU2ZYVylB
NHVgZ3wpT3h5YUpxaWFndFNLVWx5SUZGdmJgbU9oVHl7WWghZVZOYlEKelRwYWthaH1pUzY9S0te
UW5acyEhWWhlTT9gfk0zKGc7I1BfVn5II31kej0qeTReUkolSDwjP1p1aTZsOF5DMlQ4CnppMXRe
JnlUblJAYUEoeCElUiFnd0BAYWZxK2ttezZ3YT9ocHFPeCpSbHg+blFmbU41Ylc2VUM9Uyg0Qlgx
KG56Ugp6WlY4Nl4pXj48NDF6OWpQSnc0MUpYPkNHTnU0T19Ma0M0QnxEez91OVdTKF5ybjk1NVk+
QlNQZmg9I0pYRHVHZWwKelA8M1hedHNwLW49QSpzeU1fcWNQbytvTUhUX3prPVZjcSNJMklhWkZx
bylsYDdAQ04jSyVofiQzWUd+Q1AxeVF1Cnp2S1E4bDg5Mnh3cEBWYTNAQW59KURKa2kyR1kyK30q
ZjN9Tj5rTWwrY2gqRCo9OThoWD8+JSNiSkteXkJUWTNBSgp6dj8/eUBpJUZOaGc5VUY5NDw2WjMr
IWEzRXhYfENhYGJ+a3A7XyY7fURDTFJ1RjA0JThtQDRYWTtpQXE+dlhKYmAKem9eS01NJlcpcTUz
M3d4bHNYSnc3OSh4djdTJUxaUmk2fCo1S0FtV1dxeFUhNE87dThVWEhjbShZPkh3bzM1YXFKCnpo
cGNiLWZZaGgrYEt4U0UmJD18MnZTZ05oVURsY00pJVprMnNzWG89UlEkMG8mfSRJUFhMR2VzY3h2
QTg+I3t7Swp6bVYhPmxXIUlVYnZva3hkaCZ0JHhaP1NWQFooT2NMU2lXI3UmdXw8RCpMeUdNZU1p
WUY8MGx0UFg3VH0qNWw9d0AKemZ7RFo5TGJZXytmcFdRfXMzT0UxT2dYMiNYKTZ8ZHNMcGByK2Rh
NmR2TFV+IUclKFYyejNzTFAyWnB0e0NeK1dmCnpIK0FjJXVDNk8yVXskYmw5b0dTVWRBeUNMMn14
VHY0XkR5TyVYRmY7b0dIIU1sWjNNdlRubmpLaDglU2UtMUdRYAp6OHFMQmJUPE5zYVAtfVpXTE5l
fi1QdUZkPihqPTA3UjViTXNIO30qNnZocWNPaT0yWXVMP25uJU4xSyRJKzh6ZGQKemdMZ3hGe1JD
Zjd2M34oYU9TckN3QzEjdENPMTtiMTR3dGd6K1M+OHZXUjU5RDNtSSk/SEROXmk4YFE1QiZMMFFV
CnpUK3UwKyEqdyFzMXJgYE5rZVpxfXg9U2VyXy0+R1B0fSFVLWB0Zyl5ZEE0JXhSVkBrPCR3XmQm
Xj80bXN6V3Z+Mgp6TnNhY3szTEJLdU0jUG9ITyZURjl7UV5IfjJeUD1LPEU8SCs8YiMkKjtmbCVu
K3NWVFgzR25ybUt6QkojKHNVVnEKeihqJjlBWms7czJLNXlOMEIjelBCdjhJazhMOzAmcTZAaEpJ
YmBqXikoR3FWfVMpQjAwbyMpektrYm9YenU2REpICno7fi1EVVMmSHB6bEp1IyhHSktTQWAmJkZ4
dnRgd0lRd2c4TzwpclR7ajVBZWJXc3dDMTxiJTZCYH1fTShaKCRwNQp6IVpvXytAVG9xd2tEU0xf
d1FtN0V3QWl4SENOc0FIWC0lYjRpSWI5MTlpRy1UYV5aI0pIM19IPkhGTmx3SWx4OyoKeiRVZXBQ
dztFc1VHR3szQDdsQDlvUXJFQTJTTEdBSlYyaEFjc1NtZjlldEk3IXMjUjNVI2M5aHt7KV4pe3s+
YX0mCnpLbE1TQTtyWCY9aG0/fEI7WnctI3FPYjUoamI+T2Y2bHp7alhtYjFjOykoUjZ4QklIWkEx
fDlvazE9ND1qcFYyXwp6b0RUU1EwWH4tNG0/IWAoWWlaK3whPzxCTCsrWk4mdk9DPUdKSEhSNVFu
UEVKQzZCVTEpJkwzej0tY1BUa0QwOyMKejg0XyN4dSh2cUhUNzltbiREaSQ1PXNydSElV0AzKFJ6
NUI8eD1XVXtCeDR0VHghKG51WjIrS21LOzsjJTg2eip5CnpjclJaPVd+fHpoMFZ8aFZge1VDJG1Y
RUF8NEk3WkI0PnFPYHk+dT0rcFVtI0Y0YXtwY2VtbSk0cipvOEIlQ1ltWQp6O1J7NiNKSH5CbFZx
NExFdG44S2spNjVkVmE8eT0oUGMhc142KnA+UG9gWUx6QXgtSz4lVnxCaXNYMjFoaiM4Kk4Keko4
PT8wTC1taEZWQ2lsZFVnaW5tdTRWY255VFFXQiFmO1V6djkyQ3RoVnJrX3Y5fFVwSy0ze09gTyNu
OXU4O3htCnpxZEU3QVp0K3BhO2tgamBWKDswPkslYEpOYH47LXA7XkxPc0I0PkJecXNpT2NVJXBf
VHJYTEFZYCpkUllpak9aSQp6NWNZcDdNbThVPVVLNGNSNnExTk5rQmE/b0QhNC12NUsqeXohRiVu
MylsfkJ8VG4yem87X2t+WDNfVSRPKntrRjcKendFeThJS2skfmlQfnBnaHBaQmNqKE8yRWNXe3g+
bGU0Z1QyXlohQTA+bnl5Vz9ydFkxcmBgVzRqTXorYyEoVncwCnpQJGpQciFYV0cwVWV8Z0MxbD0k
MD9fUkhOSkY+RVRGMTlBeitiYHZOWmk5cjF7U25+a3VqalFLZHx8PSF0NUYqbgp6ezZsVlROcXtE
bGUjcW8tX0l2KSQlSV8xR3B4fTVfb3spMlFzUkA3SnQjOUFlMnFjeyR6aWNjIzRkX2EoUGFERyQK
ekdiNUhwYEo9QmQ8Tmo+IUFWcWo8JE1JM3ljK0o/KyZDVTh+KXtNanFudEcyVEFmV3EyN1V9YSM9
KlFIM0VwNj1xCnp0I0Z6cVA+eitAdnpHSnpWWHBUTTJKQW9TK25NbUpfT1kyKWhZOHpFVUF+REM2
MD98O1omTFkoR2M+UjFhMTZKJAp6dylWPzRjeGwyPV82dlNGPzd9PT93PnNLc3NEfns5UjQ3T295
TkApZWhCK2Rqanljck5nWHl3OSU5RVRRM1hueDMKejhiP0AobGxHJVRgZnRpNzszU2dUckthZjBQ
R2o5ck0haW1vaEwxZjRtUSFMaEAhZ2xtMmI/ekZEOyZvX0U5aTd9CnoxQlQyQ2tXZyZ2ZDRJJihY
QHRFcl9GaXslZXdOXyMrSERORyNjY3tHaTVCfDE9c2c7REtrZWkrZGlFaEY/ezFYZwp6d1NoKkdV
cjleUFZfNCRseEV4Pl9jJGkmcjFYX2xkcmpkXjxiPDN7Y3F1MTBAP1k/SzBvb2VDOWFkTlhhN3xv
eksKem1ee2JNeF9+S2x8N3Q9ckVjNSE+bGUqaT9WOyo9SWE3dHJsYGRVRyR4cVklWDJfYSUqWE1j
V0syQnRhe0FXNFgrCnprX2h+ZiFYTFd1diUoLV9jQk5QNDYzQkpmUGF1YDw5T2V4Mik2P1ZSamQp
TGhoNyRlczJGPXt9SzNTLU1PVDs7cAp6YWgpI01hQ1hPM0lNQyl8JTlaPGRpbUZ0amJmKGhhOzA7
Q0ZkWTtzdyljWVpzPVZHJikjMzt3Zi1DYiRmU0dFaXsKekl5KEExWStvP1ByU0kjdExGdz5HTk9X
IXJFKjd7dXd0UVpzKDxTSFNCfWpyQEJSOU13ZHxPb1YlN15AcF8tWTBZCno7WHUxME07cVMxVCZp
cDh4Q2VkKFR6QEpzYEZDfWJiMGxpQmMhSyVpN0QtaHk3JCs7c01va2Y9aThEKXtQbGlvIQp6Xjd1
PmM4YVdOKiE1PFZEQVk0I01TRn0+O2RxIU14YztBNzhfe09qTmsjMzY1ZEFaPipLaTkoYzdNYTl+
TU5JWlQKemUrNlY7Y3kobEo/N088SyptalZRPE5OcWdUTWF9I3FyTGwtRG5FSStkO0IyV1ZGfTdW
dj1aa3Z4ZCNUIT02RHp5Cnooem87fT49ciQqNWkwSGFCdj8jaVAxdl9vcStqe1dTVGlBMXheNDlZ
VnFQSF9Ed19XXnBkN2Q3SUZJQH03WXJGSAp6ZGhGOUdAcnEkI0sqPkh0QU9GK0dwfWY4YUZyaHZs
OyhFZVlBOXxuNW8zN3luR2NmZ3g2KXE7UXomM2MyYjB9JkcKejhkKEBnYSZtUUxxUXVWYV5KWU5D
QCRkSj9taH5Vd148VX5tSVgyXnh5ZXFAXiVxNGlLfDRlSkVWcDR0VjdCfE1ICnp7NWZpb3oyRnhe
e3cwKnxwSFBmeVNvfl9tMk5UOUBYWT15SGwxTmhYYl9eNGk+Y3ImbGpAN2smUGNnZTBRNkg7bgp6
KilrZENtelQjWCllSFghezJhYmtRY3xqXnQofk96TUh0WmtYezs5bko+VStYUHltTj0kNjAtSUJG
fFRnVFUjXiEKeisxcU90d2lgPVFSMT1vcmxDJXdXYUIpZllWVmEzak5WMzF2MEtTfm8hNn07OE1l
Rmp5Iz5SOXNqXnIwT2dMIU4pCnpgenplTylBYFNSPHZFNCEtYDAhTXp4d3NAVUR5aihvWWtMJmd7
VFY9dFJhK2c8UWl3PFg2WSkxQ19CRUA5QkVwdQp6Qz4hV3R0TyZwMW5lZikjXjJVOT5DZkAxRUNA
X0dgbz00dCkqP2V+MClNVUk+bCE7LWZlZylIb3RHNXJAI3MzZHMKelpaakNYRVFLODZpWmFUTXQm
dnlWZE1uY04yJSNoK2VOVHlZe2FVIUwmQnd9K2hPXyZ5QGNlcUtnWD1VP3RHNlFrCnpOalo1ZnN1
dlo5X2IoX1ZaMUpBNWAxaUgoS2h7dmRwfWVzekspMzt2c3NtMksrIyVoYyZReFBjUC1NT2k9Jjd6
dgp6YlhgOVcrNzB4b0E8Vj8zV25aeVJiK24pPEAqTVRsa2dscjZIaUVBZUg+UkBsakprOTt5eU9W
QCtVOEdvUUgqREQKemY5TEs9QD9eezBedzIweEpiYzJGOCt5a21YRUZoczc7ZWlkU09CTj5IZG4h
MUdwTzV+ZV90cEpFNEpCQyhmZ2BnCno8TEx0TFhgam9vIXw8bjhMPkRPfFloQ0VzPCl0S0pXWF5p
cTdfSFc0MjB9dDNKRDJ5V0wzMUwpclktMko2V000JAp6V3ojU3FqZTtnVjhqX1pve2NmV0k0PUlO
elNgdTVTTVo0I3BkMHAwMGRqP2ZCQn1LamEwKWhicGhSXkc1TW0rKCUKeiFIPGBSYTRecEN4RTBL
dV99djVFUVRBQDE0Y3B6IVNmfGMkcUBMZCRuUntkOSp6TWoySnkqZFM0TD4pS0dIcTtWCnpYXmZg
SS02TEhiRT18UHlgfXlraTlETSsqTklkT0NHWnFXdlBRQGpyJF8pdVApaSlqKTBBQjxGOzgzdEhW
QCVJVQp6VyNROFJQRk8jQEc/WWFzP2N2MlUxXitXV3l9KlpqaG4wWD8oSnlDRzhiRFQmeH1RWTUy
VmxDITNYI2FEeCQtYTAKekJTPHtqKmgoMmpNN3R8KHEyakt0LWYka3dhZ2hlNks4OyhxVmJ0TH1W
O2lzU3JTRyQ2YU1Mc1p0cmNMa1EzNzQwCnpUZ2hyJENSTWhxdlc2U080bFcxN1RnfFQrencya15l
cDNHMUclJWYmZ0x5STJ5Z3w5MEA8NTZ5e35eM0h7VW5McAp6az1KakhHNSReJmprTFdDLVppOVBQ
QCV5QXpeJHt5LV5IJSRwbkRAeGdzRlUpUEgqPXZ6dj9yd19EdyZFPmoyNnoKeiZsUjhwYCRVNTl3
UWp4cilAIXk0V1R3JDVZaWRYRjtGaEg1UmlFNEV0bWsyeHxJZGEqRVclZjhJYEVGU3Y8T1MkCnpA
VzAweUl6ZypueDFHRE00dTxGOUhicmxaWClPVitqNDJuQTlQM3UjSSlZQE1zKzsrISFNU0h5QCtv
MmN2VG5RTgp6cVVlbSlPNFhnY09fa0pybWgkcClGWmJ8cDdZJFhfZlhsUlIhT29GOF9rLW1VUyEq
UXxRUWA9bWI4Yl9EYlBPKTQKemdCNWlAN05SbVQxWGAmdkskdGxxam8oPVVCJmZ4KGhwITspJDA5
dDZ2fDFgLWs9TEkjKzlYbXl6bmhPR1hffihkCnozRH11Ulg4KCloM0h7KUNGUHshcVB9bS1PcClZ
NGl1PyZvSlY3UD1RdUo5Zz51SCF0OCFaMzhyc2khWWdUeXg2PAp6KFphTl4kaVRmNUlSZCZeKlpF
V2c9UXZNMXtSZipDdSVIZzxXRmd3YmhxOFQ8WVVFcSVOKHBheD1fcEN3O1ByKXIKemRvZHAjeSQ9
UEs7ZnVVQVQlNEdiZ201VHtpOCZUOCYlKV5rKz8henhtb2ZVd1Y0ISRzJkJTUlZNd3liTCZWTTtp
Cno9SE87T2JLK29Hejtyej88MDF+K2omciljIWY0IWk0NStSe19rUEtZSihtcG1gdFVGQTxrYXM5
RGFMX2hyamRWNgp6QkNGU0FkcT56R01zRT1FNH0oRCNmc04+RFlVZSomUiFzdkArVEgjaVNWUXdI
UWhvYkV2ZVlDTCFmdilsdiY5QEgKelpPTzQxQnFmOyRVK2V6eTt7a0RfT3UyKj1Nc25AKW0yTG15
ZjFte1NJSHIlNFF0bSUkXzY8SnxEJC1FTVdIUTwmCnoySkdTSD1uMktNMmlXPSRSOzZvO0JqYSg+
SD9GYiY3ZWstVUFvRVQzdSllTlBXZlplYj5PKyp4MG02a09aaDZDdQp6OUc0VFFvbXI4fFZSdk4q
cipfKGVUNlVmeEU7dSNlRDFweEFxbVg0Rl9UYyFxdlFYfDZIaDgtYEpPdXVfSjUqeGIKei1kJW1r
IWhnTjw4SjAzWV5vU3VHQlZHe19ObGs4V3pEc2tze3p4Rk9zUH0kfkZVS3lzcl5OKkZoNz5LK19U
Y2FpCno+QSMtJlQtTHllQiVDbyVRdEV2OWpJKXxYajk7KDYjY0p6NW9RSSMkVUklYl9AP0NQUDtC
KTAtQ31AOGkpPWViQAp6eHIlYFYwdntASjEwRV8xNFN6WnZYVWJRMFE+P2J0UCo1R1I/bnM1Yj0o
cylhcG1zdkNOfFZGKE5AMVAmJTdDMUQKem1acFMrZ3dJQWYqOHZqblImZGt6KnoyI2pBfFdSaVYh
Tk1EZDQoJENkakh3MGxke2JmUDZ8VzZLKX1HI3dLWHh+CnpTQCl4Zytfb0oqeERjR31EM0RsTCtt
dXlnTnU1dWBOU3EtNShGNSpEJmFhNXp0YyFaaSNKSHxBTiloKGt6THlFcgp6THc0WUBtPmxCbjhR
ZzJyfENFMURjdyErPGM0KnM1Tn1ZeFpGUkBfbS1hSHghREIrX1MxYmdkb3IxOTdCLUY/Um8Kemk5
S1JMS3ZFQ051Zzdkb2lLfjFkR3YoRFNUdyNaVW1RSnwpOEBMbVJEZ3k0Z29zMkVYT1FIWEA1blZj
QVROKDNoCnpzem84cSRIbVRmM1VKYlpSMyV0KDYyYyhJUUNIcT03Qz9sb3omWj96bEB8RkF7S1Mk
UTlReWl3OX12TThpKlZxRAp6LTh7dEdTT0hqX0BhfnFES0hSNylSMzFeXjNiTWp2S04/aENtcSNW
JjBUK2Q3U2c+aCotQlZZKVojLVdHZGtoQFgKenU9R09QIXkkdkJ7Iyh6aEtsfU5TVG1NWWtIZ0I0
MlohQ0dRK1R+NkljTGYzdEg0bkpNWVZFe2V1MnxBNWV4Pnh7CnokVH0jTENXO0RXRXk5eT1kTU0y
dHgjdk1mSWpiZChxeDskYFMldlhxSFo3YzZAPVd+TmQ8MlBeRV9AbGduSk1aVgp6dUozTXNBJDMz
OCYjI0xvZUU7TG1NPDVMbl8qNnFFQ25wRUAoO1hhYFhKIUlSbEAlMF9eVkx3PSpIZ3khUylZOzMK
elZja0hSKT1GKVlRdlpUeWRPVzV+bUFAYElmOVRWcyRwYEBDPXQlaldiWChuQlR6YX5gSmNhZyN7
JSZ1bCFDOUh0CnpBU0xiWmUmJCNyOXlBJSowRj0mKzZeVkxfMXBKRElsYT9tbUdZWkNeYzBOOVlN
dFRzOWVEZDFiKERISHtNdjxXNAp6QWc5bGd5b2g7RGkrY0xNVHd6dyFWWUBeKnpndXRDRjVpa2V0
eHBLRUVTWUd1SSZyPkBgQERybzhJX2plZ3pPLU8KejlFb3I1bEs4KDstN2M1Ulg1TW1GZTRieWhu
WGV0OUkpNEcjUF9ES1hGWGEjbXhvcyNMNz9BdUExPEtMOTs3WS1zCno9S149MWtLb2ZIbWw7MnlR
TyFScmhhalhBKVF+c2kkcnJ6TVYyaVo0cTJpaG5gX24+Rz1hUX49SnJtT248aylrbAp6S2dfUmJn
PnkkN3FgTFl5PzhGJiE4YD5WQWdjOF8oWCY+JUFiZ3g0aTtmbjZFRjYoKDlkIXR6YkxRYFY8ZmVe
amkKeiohKjA0em1oe01uTmlMcy1rKk8pTnkoaHNKfmd1Kz5rUnwrSmolaDBnSjVrWT9qTWUzI2li
ejFrcUJ0Q0J1USNNCnpKKU5Oclg7eWkmZj1QblVJVmB3JkJRPUZwNCt1cXh5ZXB8SzI3SW5sJWB2
QjUockVBSzd+WHIqZ29ZdnQyPmk3bwp6TVMweHQjPnImMyZZdWZHWDxSbWAtSSVvSDMlTzNSa1Zu
JS1ANU18QFVKJX4+JlJSZ1BaTi1CKGxhWHd6TVU/UXsKeiR6OTNfTmc3UT9nOEZDeG1Cd307M09Q
QTdePyN5YnJCaE14VyNgQDktNSlyUHlKfDQmZnpaP0pDUWFwUCh1SE5yCnpAWU9ofXtZTkcxYWlL
dWM8aDNublpWVzhSOEM4ckpqaUx+JlcxWVAwPndfLWR0ez9xdExHNGNVeChxeTtSZW1rJQp6ISR4
UFVRLUkwTStYaWshdyNHTDd4N0ZlRzF6KnQ1U0RLM0xzKWBrbGNJaDF4K2FTN1FoQX1uK3VZcnNy
dnRrZ18KenRxXlo8QDUqTmNqa2N9TXopO0QySGEtPTt0Z2BhJSs+OFg0SUpAZ2hae2dZNk9idzdn
azImfFFCPitWNnQrTy0jCnpeemAjK2FNdkApMEc0OU9HcnFHIWktbTsrbXFPcnlmY2ArPz9QVDFq
LXImY1pKQ0xVTDZsZVIrQmpqRElFTkxmWQp6JUtkIzYmZVJRd1AxQX0pQzRifmVmZj9gN3V4QWt+
bDctdkRKR3hgQm9AZ1RQYDFIVFgwbWcyXz1NPVg0QlhpZzUKelI1clN5eDZidWxrNzBZO0ZYVCh9
YT0qaWw7eFJYRj1MeyFFQCR0PjRoOHhGS3xGVEI/QSshYCVadEtyTE5+SiQhCnoyZ0QqXyRBMGVZ
JD55R2phdjJAOUpOIzh8VDRFKWxnQXRRQj1XND8/TTxCd2RHZXokbThmeHwteVZhSzxffjlhQAp6
IUt9Qi0+bCojfEk3Nm0lMENHOD0mZ0pPSThwfmVyQFlYSD47Nkl8dyhETWNzQGYrazdxO1FDQCNM
MEVrPH07VXMKem1wcXo8UW4kOVlJdV5rN0NqaV82emV6WE4jJlpBc2N+QyRkLWV8ZGR4LWZFS1k5
UiVSVCtaSGklMDx6ck49KyVjCnoqaClQaVl8TDhULXUkSTZmMiUkJmQ8KkVFb2N6ZCFaWigmZmg7
QU5xQT12aE1aJjZOP0wwQFJzMTF6b1BYYzVsYwp6VXJYV3xKVSpyK1BxQ0pHPHlwUjFlQHV2fkd2
JDd3RVAtMj1lTkRaZ1Qrb1A4WGtWRCRgSEo/bXh3enUlKjs0S28KejtEJlpaP2RPUnRBWTVeTG5z
S01MeTt1fGMtUFZSKlNvRVcrOW8xfUUhemV8VmZVP2B+OyMrSSQkKCRHe14tXispCnolVj9ZKXpT
M2ptbilRUismbis0RjAqZ2Q+YlRXK1FrIX5SJmhQJnUpVF87UiVQWX1MZmZkczApVDliVHUkWWlp
OAp6VT5kTVloZUVAa2AlKlZFO1JVQ3MpeUJXa2hRPlF4PXBebHBtSkhkbFV0WkotcjE1Zl9TSUBz
JWY0aDAjXmdUZ0QKemxxflhHPXlSUi0lQnFZJnt7K15iem41azk2QCExNGtTXkVWPzRTTF5Be3N2
NWcrNkZabXIycj1aYU56PXdIPCFoCno0KkBqT3xFZG87QX5WOEFRO300QmlrPDkjd1RRRzQmeGBB
eUlHcEhJelJKPUx4Ym5ac0lOT0N0TUtZQEh3ak0hbwp6Q312XikwUDNnSiZHTFJfUTdweXNje1El
QWxsN0toQFlDOTI5ZWQqejhtIUFDPmYxUVF5RXRxekV6cGowdGlMJXIKeipicVpxcEplViRkbCVU
XjVfen5YOGErN3ZeQTlHME83cGxxQyk9UVRzJHhPRlppVm9RJnAmY0M1SlQ9JXdtQFdOCnpvVVg/
b3hiPyNed2J2QF8kTEJDV3tgcmkyd0tjcW1zKl9SPDlgXiRFM25ZXjskeyhvKzAmWDQob0NARnB0
NklCYgp6Rmp6QFhQZ2Y1djZ4a0ZvQ0NHMFRyPU1KbyhqQFRJSUxYYFBuPyo7UDJHMSt9PTxaVmYw
VUV9TEZMeF43ajJTbzEKenU+KnZfZyhCeihxJWo9IVF6YEFDelJ8cyEyYHtiMWJ6TypAb1pSdSgj
WGJXfSYxJmo5djZoYWAoOTt2Q25WQXs8Cnp0djgyYFg/JntyeUpZZFlNXmZkWXRzaGZmU0xZQ0Y3
SyR8Pzl8ZjA9SnJBPURAVnEqa0JISTFqcyQ0SDYyNnEjKQp6cCEhR3N4SX5lRnUoVSM9K29TOFZE
dktYe3EjfkA+QitGMiFLd0crcE9XfGB0O2xTX3NgamQxJjJDcVNkKE1mQWsKekJZN0R5YzNGaWkw
YjlNMU93SkhyajkpUT4mXkpgYWBvXkszUFArZUgrXitGcmZnQkZKe1BRYkM5WjUkVV5ZeVZVCnor
fFp8Zyt+aGd+bHlGPWYwd0hMNUxZWUp9O2NreCteZGdVRGRhcnduVCFUM0BedG9+d00zYGR9UlN6
V1M0Xz5NTAp6OSEwRGcoaXV9P1BNfX1Dd01DREVZb0UzZGJBZWE5Z1EpS21CNWI4K3JeVis4WF5T
SmxGdj0pfHJ5WXlQOyNlRzAKek00VlNfPS1wRz1ZVX0tMmhpXmM2R35TTm9iMU1SVXteWHRlPmRq
NVJ4XlM0fnVBdVZ7SjE9Y3pgSUZWe3M+Y2FSCnpoWm9pfkl8djFiPmMrYkdKP0p4Jnk4OSVDaWh7
YEFTWllRdXo0TCk9dm8pX3xObSZfSiNOT3dGcEtgb3ZIdGM4MQp6I2ZsPTdDN0lEP0tCRlMzYXVV
PUlrbDllbyhJfTRFcFhFU2RiK2VVYGxBKDdAXnQ+RipAJXRqJUB9RCVSdiF1VF8KejBASVhlTGNl
T1UzXlY0TTRpPnVpTyQ8YiVDUTtreipCaT57IUU8WXZoSGI4SkQ4Tis0QFhRUT5ARz4hemVYUWF8
CnotPEA4SGkqdFdGbFktSjRZPT9OT1RoVU9xa0ctQUUmZE5EUSVhcjF5JEM2U30/WitPSz5+Rk5w
UnFvI1RZVXpKfAp6P01EUEVYNVA+WlRGV05sTWphbjhIMTxLb1p2Vn18WC0+Mj50dSpBLVohNiZL
cDR4c25lYl9VMjExUlpyQE1xMlAKelBhXz1MRGtfWnlUO3t7YEF3M3Zxb2omOWdnX1I9WGE0bTgw
Tlc1Pm5pRXBRPkxXc3U2dGpVcyNvcGAhZigzKyF1Cno4M1U9QkhXZ2pKP1RKXk5CeU0rJTJoKiQ1
bCRFIUI5RlFiUnZGZWhlVCMqZGoja3B5MTN7OE8hJGlVMHhId1dEMwp6Yjk4Z2M7TGxIWGExNDBi
X0JFczchTC00IUVkOD9MYUR6cVk4cVZDM143NFlJQGxsclcpcEYxV1M0PzIkUUxCQTQKenJSJj03
MFJ7bz9VWV9tIXJoI1ZDIT4mfU82WSRhKnltQ30jYEJYOWM1JGROcVRLIz5kalYtcG5yZVN8UHMz
QFg4CnpzKF5kJkhxOzh6JTJCMj1oK3FFZ3V5MDN0M2s/UkkkPmhhZW1BP2JgUWtIfXhuZz0wRGRK
XzAzc2M2djRCOUxZcgp6RD9oZVRpN1JFKzVJUCUmeXh0YWpaMUp0fGZMQlBlQ0t3dWYrVHdlSUFM
Yz5wTzNVLSpmeGdFVktVbzh4PGw7KmUKektIWX58OTV5JDh7SmRrcUFVZF85VHZVPGRqNExiUyNy
YVIjZzUqUSFUI0tLdElNJSZqTVR2WGhRTyZea3hRTXZGCno/X1B0a24mUn5Dd0ZCekJaR3pfOGpG
VVhtS0l0bXEjUEJlR0xkSGUtPy0/WCE1SX55OFZVfCk3ZFl6V2J0bV5yRQp6bjQ4PERxbFV0fGdu
OEdzOE5pcEhJYTdMaCU3ekVpR1F0UCNVUzNpKCFVS1R4dkhoUlBkQlUmWU0kckFzUz52fFAKekB0
P0F+VHV6Zz9aU2NPTXpjQVU1PDstYm95PmFWek94YHFNZ05PNj14a0M0elFBLSN0Sk9CYiQ1YUZA
WiFHKCRgCnp4T0ZBJjRYUlgrZ3ZaaHRKIXxEeTJSLTJkJktlSmlYQXgpcE0hVi01QjE1NCh7Vm5Z
ZWR9NCNJND88c15jK3xiMAp6V2BjLXtka15zcWJMXyV5dlAhP1ljI1V+Sj9WdzcxYWF8dTFKY3M5
ck91M1h5T2VtSmt7SGRoaUZ+SC1LNlBYZnoKeilGQj07MTY/Zj5nRE58KCZmMWNhNT1mK0tXWjRO
RkBQdT1fYXZpRksxR1hMTXEycjtuKWY7Uj5kTX0qRkxySXYxCnpVYnojNl5aUnh4OTNwdiheOFc4
QmRBQSFCenojY2VJRGFsSSM4dTQ2diY7QjNCRn5He2tJKT1rbiliJEh4Xkw3cwp6aTUqPGE/Jkd1
RVI2QDBZPX1Cby1ra3tGUmc2bEktQzUwbU9OXzZLeFdZTFJnT1U2TUZfUW89dGJAZUQ1d1QjdU4K
elItQGA2TzJDNX05SGR3YEJ2P2JRbD18IVE7bTZDS191K3BhOzs5fV9mMl9wQiNtT2oyYDtZRSUo
TlQ9TDBfZkB0CnpPNSRwM0hAeFJRejtqfWApPm5zXy09QUpkZktNWXlUQDZ5S0R4VkNWTHJFdD5n
Mm18bHVGVDd9ZF88ZF9pPilSdwp6US08Rm0zd0ZKeiRAVTVUSVN1cjVXfk90ZTVoVEt8Sip7bCNq
PFR1fGBOKmskSkx8eUx6JDsqI0lVelBxSnp6Nk8KenZtMlckeyQrJUBkfHdJbjxqSzdMQSpxJW4w
cSZCJEtwOy1lJmhZSV5TezQ+X2FJfV85bCYkUCN6VmBQbzxySChgCnotQGhLZXk5LVVZYGJnbytm
VmBPNWR1V349P308blYrfkN0QiFUemh6Q25ZX0J2O1BQSWxUbEstZH1SPmckT0dhdwp6RjMqaHIh
UFFLRE8tTjBCYGB5fCk0K3BTJTI4YTl7NUQ0VnQzfHYqIVUzaHN9WnJJajtiUV9pYSVRWHB9QSEz
aiMKekxsM3ZIM0g0VDJwUDNXc0x0YVVDN05lOWJqbjYyZkUxP1Z4TDVKJjhkUFRpflJGRnJvb25y
dk5hSDRHSkxzaVpkCnojPW9NIXM2NFI8RTclJWslZnM8ZnVVN0VuXypKfT1KVj5DY3RFLVlIRzRT
QF57TmtibFF4K1hAa35YflFiQGBxSgp6eWUlND5OQ2JVdFlaSm04YHUzaSh2WX40JmB5PDJKNyEj
QTUyaiRWMG12P1E/aiFXZiNyR141RCNSMVY+KislQ3MKemtgfH4mZ1E+dUc4al5Bb1pJbEolJGt8
d1VxaU8lSCNfe29eaWlPU05xaUpuY0MyQyh6Mj09Tno4K30meXZlZGtwCnpWSUI+WjZuI3FsSkp2
JlY2UVhXX188U2tORlUrY0AhMTM+bD8waGpXQGNYLWAhWlRWdjZzYlU1JHBFNilKRkFYWQp6M0FG
Qjg7fjJZMEMhM2ptT14qSWF2aXQ7aVhvc0l5YXc0Tz1gMG5CRStYPEkhOExlSitfSF5PMEFgOXY4
Kj9vQG4KejN8dGgzWXFobVcrKXtacm05JGR1a2RqfGI/RipgJlVKSmk9RzQ4NmAtNyReWkA0ens0
WHUydVQ4JSptXkI4ZHVXCnpQOGVxSipeRmkye1BGKHk9c1d2QSg2Jl5CRV49YChaI3JHKEFKSyo0
KEkmZCRuVnM5Wm99UypNT0RHPW1ob15IKwp6alchNk4+TnJZd1c0KW4pMyFiVn1oWnBrNmBUMFRm
NnFnTkx0JGB5UElEZHM+UEUoSG9XSEBXdDBVaT9qZ307REkKelNOO3gxaEMtQVQlWkZxOGV7cD1P
b2NNdG9WaSlqYWFCRlBiN3QreFVWV2EmdGo+eTkzNUNSVX5VVm55NTYyfWQyCnpgViEyU2U7KEo/
KShRNzF5KCVaPiVhdStmKXtHSnY+NF4jbG1CLTw2NHdpcm9Ibl9uQXptJk1SSTZzIWVvNDN2Mgp6
dChPcDxqP1NRd0w/Uk9SKSNrJU54Qy1Lc1M0T0EkJXItY2BFIz5oXmdtUWhya0NIRStAWElpM0xV
NVppSXdHelAKem5lMjY3aFcxeU9XKn1EbCpnaFI4cnE/SyQxOHZPQ1ZYajRHVTNYeis5MTJwcEFm
XmkpQSlQJHZqeHdnSk9OPV5UCnpDejZhSjNYUDdHVDRZPXVlNX1NTG94dkV4aCR+OWJhJUxpdWxq
MVZUUWslPyFkfU5fRkhuKC1vO0xAJGRofXpEUAp6KFopIylMS0crcHJ2QmpXTFMreihFMVN0c19s
KzI1RU49UzNCI2coJHB2K3BNR15mP3ledGc0bSpWS0t+aHo/K04KemtSVS1DTDl2em5ofG1MRGtl
IyUoMD9IRzY9fVdkJmQwZjtDaWUhXmM5KHV0STZCJkBlUWlCbmslYU52eU1LN09tCnopQCYoVTkq
YmFgSDxHQT5zO2pGLW9SbnhtMHVWakQzd1Y9I3otJmRwfE1zcDlDZiMkfXpGZz90X15jcXRPZGZA
aAp6NjFQU2gtXkc2JW0maF5uNVNrVjZVb1UxI3JBbjFyNHJpXzk+ZnB6JTRaK0NlViFEIVhFdm5o
PV5XQzlkYHt1XzQKekFXNituQWxyRz5qRVgleTtpSnVBVilrXlk2YihFPmVtbCglKk1gNFVSM0wp
e0NUI2lPJXVqK0UyT2ZoUlo9VC1jCno0dkJQdD1laElHMnBZT21yKnIkaGVpXll8bVVgTCpPTTJi
VTIpN2RzTSg4eFJneCFfWF5tXlBjOGY7NVNOPHVaOAp6M30zMD40RHpGbTRQc1k9clZSOWJHWVJf
dzx5Y3VgVl9NayZvcGBafDZoVnEyQGN2KCtge2dhPFpCYWMlLUpqZE0KelhRam4rZjdEJl9WYTNM
SUBeWENfRGFGYkdGYGplUGF7YytVR1ZgM3lSdlplZ2hXJnFFempVazd8NCRDKmlOJTlVCnpDYj5u
dytndTZLI140XnpwdWh9a0t2JnBYNUlrP1IrOGYtU0ohTVBTSzFRRlBXMmFPO1opeWNRe0xke0Bu
SVRXeQp6cDl7VlhMRmR6LUJvVnh7ayFyMjI/PmBrcit2LURCQzI0RSRVen1qRWZ5YSQ5blliRHlH
UDZjSVdrSXA9OE4kdHUKeilXVil0eDNiaiozZ0RoMVRRKzNjSXk8Mk4+QFVSRmpLO3Q0P3owIyow
UDNtZzQ3cyFafDdEcXQ0VGNXXyNzRm8rCnpCX3dTZDZFYSolZXF1TDdSPzRIK1p8bnZ8YWFOPm9a
RnVyYXAmTGJaeWk0TG4zdSQ0PTY1OCh+b3dWZVhsblR2SAp6djwhJHVFNHx8VU81eEIqd1Y2WDB3
QVFZe3NQenxocWx0fH5mbExNdzJnTkEhQ3BBU1pZK3ZUO0U5Wkkoe3BrRUQKek9HQX1mY0JgMyUm
bXtwYl9xKVJ4N1U5XnBKS3pYNVQ3SzFkUWJ7MEE+OSVrejFvZ2oyQ3lFXlJDfVoxKmhmUk5lCnpL
MGFCZEVMS3NiQFQqUG1qZW5SX3pNQjJDWEEhZ3h6UGFGY0dsWC1TbWg0YVhXQjJ3d3pgdytNRTZe
K31EKzQxcQp6STU8YU5VbCtkdFpUfXV9ZVh3cWxwPD8lP1lHMG4mTXhMMSY5PE1AT0lKdnslMkVO
YGpWbXpMeEdHemg3O0VxLVUKemNLbCU3UWxwZzNeO1R+JWFDTEZmKklBfis3OTtIPmZRTWFWMU5s
RkdaemZVeCtjcDchTjxrO2RrV1VKcDsyZ2xNCno9WCFMJVY0QiRHWnNjXkArUFRmVFNEQTtEZmZW
elR3bCo5OzZTWiVMS0A4dCNxY2VTQ3trYW55TldPd3tFUXt1Mwp6WjVeZXw7Nip1fkowJFFvSlJQ
X3VreV9sOGteWlk5Z3NxZypIbH5WZntvIzhlTjFNQH56WkAkKmZ0KW5rZi0hOH0Kelh6X3lfQ2hl
KCk2NlFhIWEqYUQ4U1RKPjFhLTFzaio0bn1IbjYleTxTcTVFOUJIZkhKXnxxNWomQzsod0ZlYkwm
Cnomb1E5emlCTz5pdyl9YnIlQjUzVDchRXV0ZSpFdylMQnxJeE9kTHZPMl9QK0dNMlBiaz9JTEA9
ezwlNl9ObnclcAp6diRMKGlRek5ed2IwWXMpWlEheW1CPHBXY2UlYnlwaV5iQ3Q/cTwybCFZWVMz
dEpRaG4/UlhYPEQodmIqay1RU1oKekU8dVomIz5vJGBycWdMZU8jTEswMWFeOU1tY2o1WVpBfEFR
TGxhZURlRTFkTzdDSEdLUHFPeTYjJmp7Z15BcnwhCnpufWB2d3UwKWQzYTQ0RDltU0w7KXMqJWs9
bFU7M1grczh+QCoyczIlajQ+Sj51WD5BQWhCRDt9VCtnWFA5PmdJRQp6VFN1RFMrUyY+aCF9ZmF9
S1lCIU09LTVrcWdkVC1Na0tEYUdIfmRvN0w7MzcyaGcraENAY3ZXNUglYz9uMikmWj8KekMrOH51
aXU9JlBxMXdpd24pOTZuelRGWDJQLSMhMyg4Z2RpZDBIVSQ/PjExKHsoSTx7PU9fNCVFcj1WIVc2
QDEqCnp4N1c7QXpIdWRzSV9VazZzSCtVaEY+Ul9iJi1KIXFCeTR+Z2FAUW9HTS0kRTtfPC1LPE01
QDd6e1Fvc3xtSHx+aAp6VSlRRmtyTXRWTlRlYGN1PEl0VT1HIW9LcT1vUyE9RSY9SzgxfDxaZ3JL
RyN4YFRkX1N1YitgUGJJOzcpZCMhOFQKemsyXzVgRGJgTzIwc04mfClCVX5KblokTEN7Q31NP1h3
aCslbmVINCpyMHwwU0pFSjBFTmwrSHBoUVhESlArPz1wCnowbl40P3ReQTJzbF9ZPTg0dH5QQ0V6
YXJKWmlEMj05eUZZZUVENTU3QXgrbitBJks1dkwpKzBERWRDbGNEZ3RaTgp6TDRafFhVd19kIXkt
NVF+d2BUdDc3Vld4SUxBSDM3Jn5+aGFlWUhoTExWQHReZGB8KXZnPlBvJXRWK1pqbTNeNysKentv
JHxoZT5iaEd1N0lweXYhPnAldSpGNGNqZlUwQVRUJHF8VnBEXj4reFlCLT08YC1MJCZYP0VsZiF8
Y0NHWE47CnohcSVmRDFDaEYoZ2NpRE4+QWJfe25JQUtMPnNMTEokbGxpN3swSHB5NGVxOVNpLVR+
NlJgKE9qJmtkKUdyaGZKfAp6dVdnSkIoKyNnaih0bz0oeE1RZj4qejdEJDNtO2FZSj4xYDRBMV5v
VlprME12dW1xVlNDKzd7X3s9cD1KdTJrPjsKeilUTVNhYnkqQHJfVCR5bmo7SSlrRU1oNGd1NGE0
K2RQaFRjJV8hcGZgLWN2RipgZClLcCp5NGFVSFF3dSU7cCNSCnpSbzJ7WUNMSTR7WWBnLShYUWc9
fSR2Yn4ybUsyUyslU2dgbmohciprMHMlcygoTmZ0Yzk0PUcoUilNMiExbTVLYwp6K08obmhTPVQq
a1ZEJTkpQT40OEBvdVRJZFNBLWdpTzZxdmApQDlyX1dfUG8tcl8tLVpBQnpyXkBzXk5PQDMzcFYK
eiN5NiVxczZHMWRfPXFWUkdJN09VRW1hNiQ2dyM+Sm8/byQqQDY4Skg2Vn50MS17NURPKWNZfXFa
QFdzPXhYNH1XCnooSjtHKWI5eXZyPUdJZm82bV9wI0dAXzBhdXdlell4dTRpLVIlVWdiSzxVYlI3
fWgmd1E3KDVebUNrTypldGtZZgp6cTxnP1ApcSV3PFhTP1RsNjFuUUBCc14mfjJ6bGNiQVlmTkVR
S3Alelc3NkBpXjdKPiUlczxjOGcmb2g8ZzB3cXYKel5kN2QmOV5UWlBIKVBQNyU5IUNUQzxgbG0l
eWBMWVRnOSk2KCMtNCUxTkloTUp6WFJvSzBheiV2aCFzYWlkdDdhCnotTj94bXZBZCY3PWNaY2ll
PmJDbFNSSHdlO1Y0P3MrPkhAOGxKWF4yQC1aZ2dxZlFMKSM4VmU9RT5ecEQodWZnRQp6UHcxJnI4
NGo/YTQ2e0dsbE1ycUg7Rn5VKklOTGZFY1p4b2JYVTAtJGBgcCUhOGJ2NCNjfiQ1QyZPJStZUDxD
MEEKeklPNjR2UWdDdFpzZH57KiE1Kyk/TWV3KVV0dG1YO2UmSSUjZkYoeF5eSEt9RF5kKzdjPEs/
a3JAWH1EWipvJHA9CnpWckJmMVpeR1d2YXc/K0Y1SVVmVTwqVm1UNmlGVztDQn5kSmt1Kjs3eylg
blVvSzktOE9LeGNMcEFIVH1jISpVfgp6OCsxcXlTTygwbz85e0h6bDcoIXVnd2N3TFAqeyUjUzFn
NkkhcVdNU2hjOzQ4b25xalA/JF4jJVV3SEgrND9WVFgKejZ4YCE3JE1TcjNjen5CKFl3XnlGSk5D
dSZNY25qWSlWQW93SmdNI19IaVlxPVBSKE9mQE5MdiQ+QjtvdnQ9RX5RCnpwPFg/ci1gdilqJG5u
KCZAYzx4PEdPU0k+Y0F1eCE9QUpnYkpec0Z4OHNIUn5AITlwPExEI2t1aT5QXmtAX09mWAp6PlhM
JiE/Yk1PfG5LXjZnU2p8SWE2TXdwIUVDR0NWdjhpVjJffXxII2NlNU0pUUl0cCYtKz8jWUdrQTNK
YEp3eWUKenB7NGopOFBwKD44UkoqJSlCe2FXeCtjZUwwJHg9Zl9WQiRseThTe0VfTH5RUTBeUDM2
dTBBdWFjWU8lY1NXNU5YCnoyb0J4aDxVM3xudDI+S1hKVHpVTG5iOSErT1YyKiNzODZSamhaPnlM
X25gZihfTW5ufm96RCUqOTZkSUloczZEeQp6bSY2d3pqPVNgLUZoJlokbT0/MUQre3RRU25CRXst
TzdCSEhgTSVXUkc8K1B0KWkxcH01QFQwVihONG5LdmEpO2kKekpxe3V3WDAmM29NKHk0ViE3VjJ3
SE9pNTViYUx8Qk5hVWJOKCU+YW1UcXlsQVRVenxZIXhmQHIydSZPZmE1JkllCnojS2l+JXdPMF47
OE51QDI8ZzBeSFRfRTZZLTI4ZClnJXNWWGV5QTBMVGluQHJNd3JvTEJfdklhbn01YiVrclI0cgp6
ND56QHpMdjYkPjNyQ1MoSzQtOC15Q2lqZGQkdkEhd0xCZjxkLTMxeGIjO0F4JT9HTnp4dXZEMGR0
Zj42dU1kTzIKemM9Py0rYT5HajxabzZgUTJjXyQ1RkRtTFlZVmE7TSg+TERyWlQwM31YNnhfb1NB
T201WjkpVnB4eTZOclliZWB6CnpKSzhUM1k+dmVLJktGSVI5JHRoVzMjT1hDfElgZyEoYVlMJlIq
bT1zVjt7OFNWWHMmbnU2TTJHdHZtfGBaUFBoYwp6dlcwKWAqaHgyanVJa1M+Nlg2bWlKKUxAY0A7
SXtjdFNZWkZSJmchaCozcV9BRHBjKTdrbCVGMU1uWkNjdFEoPUIKemdXKChuVk4tblJTJnY5dytP
R2NIRFFjYmZEblY+fV9VZ2UjUVB7clFsen5JXz4yMnFlelIpfXkmX21iPiVYTU9hCnpqY3hQbmNL
VClkPHhaVVBgNmw9VUIpKFhhPGZARlYwVzlNajdfOSVlOEQxbCUrZip4KlhrOEBSNnFHVkcqRytf
WAp6Pl5BaXtPdlczekprVkBnQW9oKURZK1F9eSpZc0R1bGBIMCRTcDNmSXpeJUZhU08wP2IoZTZX
TSg5bEM5S3MwJG0KejtLK151R0JUdVklRCVYMilxMXFGV1QyeW9YQVExRyR+dnxPeFJxdS1nWUA1
NEU1NjdRbnlIeDtFUCpqYSQ5bFJ1CnolWipkUWhsR0laaTFMRV4zc1h6ODR2U0pGT3prbUVwRGd6
O0VmTVlKeloydSpZWjg9N14pen48e18xNF5MJS1Jbgp6QC0rcz0qKFRid2BSYV5EQEVPPCMlRyZ3
cjVkaTcpN15UayRGbyU5Z29DdSVodjAzbD5KLWcwJGAjVVAlWiFgS3YKekJANHN2elAtT30rRjAp
bDUrU0ArSFZVaHdfej4kKHRlb2pubikxRGBAcVhsUFotSVY9QkVna0koQ150UXA9Vz07CnpufS1X
Vmprfno+eVJYO184SF5rVzxtYkVpYW13Zk93dDQtUVgmMHlCQDxRMHx3Yj0yS0s1cGBWeHJvXzRo
dTR+bQp6S1NKMFAyWE19XjdoOEB5Y0I7d1MqRWs/fCUxY3VqVVpiPGpIflQxamNgUCZAQkVJUG5V
JmYrNzZPPihsKEpJJHMKemZOKkR0eWotdWl5PSpPWlR7cGRaWnVKaXMjTWNpeDAzY0U4KVhEMkFI
fE1IU1ExSyg4e1ZuJElrbnY5KG5fWDx0CnpvJEBkWSQzdm1UbWo3dzA1RUhaUXNqWUFORi1eSnBs
NzhaLUlSUUo+O1ooPkZ1MTR2Z1Y9UldnJiYtbypJTWdCSQp6Mk47ejMzVURyUnFIfH1WMUR5dzA3
VDg2ZUVgN3VvYz1kZz53SnsxY3VuTU8yJEctOFA3WW5COz0/K18re1JCRnoKemZZe1J8UG03dHlV
fE0oM3prMiFaZCVJaTkobzluaCpFUDhAUHJwVDd7ZnxYQmxaSGc7QTUmaVUoKGNabSZmO2dlCnp0
Q0gpUmAwITFPVHB8Mk5ke3M0MHV8Jk43LXg4VSZKTn5TfG5aTkJtKmt8fHR7LT89bHYxeH1TMW4k
O3hNZFYlNwp6JnNIJk1DOCswK3lWOC1iVDU2WnIjWTF1LWRieHBFY1IlND14aHJ5IUIxTkJMUEhw
cD5fWDBBdFRMPSFIY1BmYFEKejd9TH5eem0kfGpEOX53cjVIJnApNUQ/KHU7P2xoRFhsLXB4bEAh
UCFLR01GRilXMD08RGphKHxFJFc3UTwlNi0jCnp3Q3gtITU2I1J+KmpQZmVWKjQoRHJeLU0pWkRx
KGB4bG1RKXB5dVNoYT03dypIUz9UKyFSfEkwLStGMV90QHEmeQp6MXhYWjdJalFVYzRwcG59aGoy
d2oxKiV+PmZHSU5tMVUoJFI0bkFAK19yRj1PZ3dyPVVKTn11VCsmK0hmVmNLTE4Keio9fHgqVSZq
VXY1P3stIXNrQEdCe19idWYxWHpAJGVDPEx7dSV6PCRmaDR8S0p9VHRLbEgocShmWjleRGRKPzBW
CnozKEtpO1psNVUyS0Y0cHhldz4oXm4jITBLKz1gM1UoWncmPHNTdn03VWNiMjhwM0QpQGVGWDsj
dzdHcm4/OXRLRAp6ejkqJTx3I2V9djhYfE5KVmBGS1dXUGBRRSNkcjUkM2cwfD49KEJjbCtXLTNH
KEZAX2ZhWGZLP2lzI19aNkc9VEMKelhJT1NheHkycGdhdFN6YVIxbGc1RmVpI1VWbnd+Q3cwKFpP
K2QrVCRAO3lVPTRqQlFDLWZLR09mJlEzTHt8YiRNCno5SDE5TUxob30/S0V1SlBXPSEpY1NQTXIo
N3VFMXNVfU8yRT9vdGJeZUp8Xlc7JH1ENCh2O3JqPTxodCNwUFUzbgp6KUM5aGdmV3pQekg5Mk5t
N2hhZG9ySX5qdCNUNChnSVE/PUU8WTZGcFhQTkUqYjNTNDhqKFdUaklmbT8zUFMkMUsKenJCYmk8
T0tEZzEycVpnWD9jPWMqNF84KFhTMmM1WiNYZjJSWSp2KmR6Z15LWCVhS2Q8S3J5cUghLUpfYns4
TTc8CnpNK3wrKW1ofGtoNjE1YHFLVStWKncqbTd1bXBjR3Z5YiZyNHtVR0BPXnZXeV9GZ3dXRktN
PXM3KmUtUyF0dUVzQwp6QF5teHAkYkFmXkNfYSt4OEVzYEhCe3RJNSowZismUlY8JiNFaTl9QSNF
KzlkbyNDdms0aEYjbFEhfHBlSXQwdWEKekopPldlOFhXS3YzMyYtQ2hOSiNvWl9lPn5yYnBCRjsz
TyN5QVJ8P05eLXw2dVAkKVdaUGR7JXhwfjt6aS1XKCh9Cnp8Q2pnbi01KjQrLVI3cX1PUUteTUdO
NVVKSVYkTWt8MSpZU0RofFNDMFI8OCQoJV8lTEh+VkF9S342cyheV2IxJAp6UzJwKXFxPGxVZFg+
Nm5xOGQwQU1lMk4kTnpUVCZ0V0skdm1kIzVIV1l2a1R3PSF1STlqKThWREh8RG8rLVdqb3QKelEk
aHYxYDlXZG4+Rkp2ZzMkLTB9KjZhNlZCcVRKKzNLTEFvTig/QFJkWWpHfUUtVD91KUloSFEjSS1o
JjFlZSglCnpZKFYtKiN6RHB5SGUhaT1Ed0U0I153WjwkKlU/aEc5MW5hc2lgeDhtKVJudVkyRzRJ
NmF9eGcpXjYpVlR2dHEydgp6O0UzbWBRUitYbGhHIzBtWEw8fjg7Kk4mVk1lTzhFLUFDMVlFTis9
SnxBdG99RjJpcWFYfjVxVjU8Njt1Tn1ESCUKekwkayo4YkMpYDZzXn4zQ0lfKnhmaH40Sihlej1I
aE07RGRxOHlCWEU9SnljeV57OU19MyUpRmE/aio/MDd4ZDNlCnpKTVR7WiF+K05FKFhTQEBBJEt0
T3N0YkpaeSp+YXVleiNqLUUpfkIyKTdtRHg9alZTdF4xa2BRdWZecyhsWExUVwp6O1QrWDk5PUFX
TTcpPyFsR0Jucjs2cnhKSkIhankqXlNeJEBSOCl8T2RXT3I2PnRtVUE1bnVoWk9HMVpkJSNqKn0K
enhPV0tBd1koYkxrLVlHbXtWbiFHMSNnQGdAK3hiNlFudmk4dHVtQEhZWnxzNzZHYHFvaFA4JWgl
R042ZlR0QTJHCnplZzkydjBvWUUyS0tKTDNTQHVVe0stRmR1az13WEshYTxTKTQ/cTc5O0hWcyY5
YzQ2c1Z0YGVARzRVQTBQYWRaNQp6Y2puSXk7ZX5TVjlxI3YxKT0taDU/bDdgMCZtU20tZTxYe2hM
SjYmYGtEKHp+TGJmX1goRVh8Rl9YdkNhP3JMXnMKeiZQYiRQVGRRKFFrUFppaGZXeXFCQX4/KFNn
c0BuQUZqYFojKGVsSDEtVHBKfWMqOWJvLVJsaV56cCtsMEdndmA+CnohOUk1TUNuaiYkPG53c1Je
Vld6dj48dzh6OEIyKHQ8fj9CPCh4aEJ9eyR5bHMpdik7KUxzOylSJTZQQ0hhdWMjRwp6bFlGNGxO
ZjFRVj5UJXxqXyRlPk5KaCNQeVQ4cH16JWdOfldxcFFeIXA2ISZhcm0tbUJQZkhRayZUa3ZieHVk
c2AKeis/cW1eUmtRZGlobFZXKyVCQ2pFcSNudnMzJChOMj07WWF6NUkyUGV7PT1GNzM8R1VKfEJU
dmQ9MnVyJGZRTEJ4CnpIdWVKYnpaLWZrXngtSzhKbz47KHpVfHJpMWAjUV5GS3dMbzlpSVQ3JWgh
cXVUTUxWJXs5XzZfPUMkfHNZSzRVbgp6SGlqWT42T0I1MGBuWDJUa15nMWBaez96fTxXUnVeQDs4
alEzZEYzSyZjUygkTWtlRm08eXlrRiM7SGNFNmV7Z2oKemwjOyNVRVU3Km0tTitQaDZINXB3RVZU
MyMzTFcxblpLejFkKjJ4fis8PUVZdXI2bSZ6JGI9Xit8MkNOPTRaSmR1CnptZC0/RVdGMlVrWCNf
ZXUmfUdxP0AhYU5DME8+QiZBeEI3UWNjcVhNUSlmKWx0aCM8e2E4KEBEaUUoRTV4Vjd9SAp6aUd4
YmAkRlJlWlNCJVdUTD9rVFVOKWFKKGtOMVd+Wm93KGd0aEBtQ254WFRzfDclTUhlSTIzK2dPVWBr
Ty1FS3YKemNYZmVhX0wqR004O1Uxe2RwOWNgay1RMGFpb3wjQTw3VDs+K2ohMChGK0Z9NmNsPkkt
QkVCRnFPXzxqZHslY2okCnptKWNyNFI4MmZ7IVh4XkFQT3l2VjtsU2p5PFVqfmFPU1V1N3lpTHRI
NnQhTSs+TzZMfitCSTJjT0dXJDJwSHg9Ngp6e2VUUjkpRmokdFZaTEoqNDliV350MkJidUpVfW9C
O2BHcyNKYUZuRytvIWFkRSkxJCpkSGtWfExgPCZBRFYjcEkKemdJVTxCe1gka0BkVHRESFNVKHp5
OVJKenJYe1lPZjQ0SXxnbzdSNldiUllxZDRSTFhDR2ZQV2ZsaHcpTjBhbG57CnpjQXVjJGBuI3Nt
QHo2MF5oNS1tLXkrPEM2UillU2pGUXx7VFhfMzs8KkI/Kio3LWk3dU48T3V9WWJBQ0VeTU41Vwp6
TVJmfUBIKTE5WjE/dShWX2IxcWZhcyo9OShFYVRyKGYtSiF5a2ZPN3BDNXkhSj5tdFozQSZZZnhR
VUQtZjckU0sKeiFJc1lXQUA/Pn1CMC1qem41ZHwqS0M3YV9AeWBiKk1wMDRHeSo0I2QoPkpzQm1s
ZXQhZnh+NnNRQnlZO2pYP1BmCnpzOEJZNzstRWlMNVpUXihtcE1+Oz9CQDgmVz11b1A1eksyXlcp
fE4lcX1CPCRvSCQxMCtyVClySTl6bzduWkBeQwp6ZERTPE0haGdpWiVlfSp0VHU4TT8/cHV3cV9S
fURIdD4tKTx7UUc/WHgxOVQmMitUWnowXkZDNUtaJk5MPVklaVcKemhCPntvaXMyPWtaWThlfnl1
MHxLOE5YQEAzQGdqIyNnMTshaW5KY1ZQQFJWSjhXRyY+OVYocHE+YkR9KklXSVJiCnp8MmV0OE4z
eUNIT3RBaiU+PT1yLSVSaiZBeCYrdGBgdDghTCppRVpDJW88YkkrS209UjdVWCNJX0l2QzUhSShq
Rwp6T25OU3ImXkk1fmM4bGYrRWl7ZWFMfFVyTXZYYHpISzxUKTslYUslbmBua3c2TSpDcl5ZR1hz
ZyMqZ3x6P3A3JkkKemVSbTQ+ZX1ve0FlXjs3IV9eeUV6d1QwT0x6XzVlX09wd0B0emZmJX41M0Ut
ZGlCUz8lQXdeNz9yR31uRmU/NWdaCnomJVZQPXl6LXNFSjl5WmwxWi1lT3RKalZTenFGaEI+anMp
ZUs+QzlmRjAmXzIqczI0bzRaaHt4az8+ZTlCQU96SAp6TEhxfUlNaE50aUdsP1pjR3Q2PT5VNndi
bVVxVlh6ZTJiSlYrMDYpN2ZYZG8oPFVifmB7PSpmP1Y8PVY+Q1NAVFkKenE8anZpMlgtJGdWPiF1
PldLYTsja2ZmTFI/WHo9IVJ4Wn4wOTNCRHpyX1ExbWopYTdDOHpjWk4wPCYxKXw4VCVxCnpTPjF9
MmglWGYmM2gzWXBkaGwtYFA5fSpMS1k0VzEjZntPZEdgfiFuKjt8I0cyJGg+OHQwJGN2UCpoKzck
SUhpOwp6X1IzR2F7MFRvO0pERS1uJF9XanRMRlByR0NzXmRQNSF+fW1keSZadEZXcXVKeUdqa0d2
P0xUYDt3MmVqd0FkWEUKeng2Pncmaj4yN3Y9eEh0YCskQHgkTFhsKX5vV2JXaXoxMlBWNmA9RUBS
cTBuKTA5O1g0SElqeU5UQ1AkRnhiODx7CnpsKEA3MFF9bGAmcG5mOUh6UUdeSHdxcUE1ZSNlV2kt
P0BKKyVedE4rWGNwb2RtYDc/I2daLTZMUUkyeykwXngzSwp6ZCRyUStQPiRsc2d0dTtROSRxPmBS
bCUwUjJZSk5USEUwZyhPcSZlQVJ4P1MtcFJgcUdHMWVTcDRGPmFlQ188enEKejdCYSU9VD4kV0wx
SS1KI2IjLTtRKDJKPyl5K2VxLWchNFpmbDs4TXc9M2pNdkUobT1OIVdwRi0mKjAkcmtNRH4/CnpA
OWBpNXAkUEFSRDMyMXM+UnhOMC11IX5xPCZENS05MVM1c2VARjRSWFFOOzY0fipPcHdYOz5iMWgm
TCM9JT4tVwp6a1U+IyRwKVArRyFPYiV8WGNjJTZqRGxZRnF5ZUhXaDRgP2hNJFotYllXOG5JWT8t
cz93fkYkS2c2QCN0P0tobFUKelZ2PTZVSlo4MGFQdWw5RFNJPWVPY2UzTkxmZz9DbyFJMShNLV9k
TWElbHlkcitIITFiem9iPX1LWCZCK0g2a0pYCnpnbyZRYzgpRU1iXiVqPXFQODtCS3ZHT0kqKWcz
UzlueyE0MV5pM3JSZU1Od35wOXlEbmNzUjl6NXU+XiMlc2dMegp6N1R1RmR6bChBcHVXUlNrIWtB
bSZwfE95Sj1mQU0weGJVIz5rNW4xRiNLSkBjYktTflIkY3RAQyQ4WElJN2BkYHUKek9XUXlSTyNP
PyR1Y0YzWkpidWtLbldPcU1IRD1yUlU2aTd6bysjUns+JndxMC19eFUpM1k9c2BNS2dIPDhSTjVT
CnpZZDV+Y0oqbXM/OHg8Qk0yYzhBU2B1Yy1RZSVYRj13IyFnQ2Z8aUIjMXdLJT9nUXU8V2AzemB1
Myt6dFlkbEdSZgp6UTw2VkB7LXVUPCUqfnFxNWxWMlYtYkw4enJCXkh9RXNlYUc3Nit4QWU/b0ZI
SGJeXkFqK2NtP2dfWUkoZSVnbm8KejM9SU1pSzA1bVBKYzVGc1l6JT1ON2lia2lQPXlpK3dibGhZ
QlNPR0BMc2lTNyl6b2s+cXB9M3R7PV9BV29eeCk0CnoxZSM/fjktdzhzVlFkZWV0KktWdW5rdmE2
QkN+azYyRSU0M3o0Q3wlN09idGd0RSpkQlk/Yk13en1DI1gpQV83Zgp6TzNONXw0XlF2eDApTGA/
O1V7QDB7blY7QWV7SlZJUEtLRTtxNXtxdHtLRzczck1ybk1sWiskP2RfaEpFYF8/PkYKejIlNlVE
NXJtQn5QVDstPjRlZ0NoWExrc3MhYUJ1Nj5uPmRAcVlMbFpJPlNubzlzUkxyUDNUd19ya3VmamV5
Uk9GCnpWQTxWUDYxT1J+NmAzZnF3PVYoPk9YNWV9cDEtd0lJclRfNiFteF59cT5aOE40VkplWW5l
KGZQZkVoQmFxJVlRZwp6RXdDd1ZYPk4tZT56MFdBJTIqQ3NqYWpvNylNdkVwQlUtRnIlQ0JZVEYw
fDx2MXRxKStqJGoxe1VPLUZEcV9TI2QKeiMlTUJuYXY+WHoxO259U2RKcUtVRz96U1UrYlh5JSkl
RTV+eztKZzQtO1F1UWBsWlR7QmRnNjk3N0ExQ1dtSndICnpScCFeYCZyYD5VTn5uVnpmT3k+UHck
PXIwKWQmeV5kfUd7UHdPen0kOX5qZlQ+aWdxQld2SDtWOU5MP1ZDO0cmLQp6ITB5b0pAbyRkZGBF
Z2dBRi16dEFDWmpLZGc2SG1YaHNGSCk8RGpAJTtuYDB7YFQjTFhmbUxfLVd8eXI2eXpCIWgKejg3
cEY1KWo+KEFaOEFEVlkyQi1NTWt8O2RvUipGaVhDZTNgSStUX2JRJmNYWTFaaClLYTxrZnVXPytV
S1VpMlpLCno9Wj53ZUVYZzkxRU9uQDJ5MnMkb24oIURmSHYhV3MxKmktZGF5aFV8dkpxSCtaT1Fy
NzhtczYtRFdoXlo9aEJXKwp6XkpoZWNBPWMoXjhLWUREPG9RREtoTGB1TCVGP0IwNl4ld05hPkRo
c0ZCeG9DMUdfPn5sVFVhYnpCanEzbCNAMnYKelN3SHk/USpZdWQ2e3cxXjh6IzY3aFRgYyl6ZUtL
O0ByZEE5U34pWUY9LUA3XnpJbnJFPWFCcyZiTn1MeWk0U31sCnp0eSVyMUA+eT8jc2hnYHA1R3Ni
SEVqRmFjYGVqKFgkKHpZWjZ+b1M9SnRgX0lDRT10KTNNKjdEWnlHRiliSTxHWQp6R1VNO2YqKzxD
e197NmYoPnR5XyF3Qz0wMz1tT3NkanlUSU4hKyV9N1V1Y1FKS3loYyYpTDhFMkJfQXQoTTFGbXQK
ei07VVBZU059YTIrZl5+RkxSYkt3JiRaMjBwODEtbz8jLSlsa0B3YUdDQ1Y4ZVJGd21rd3xwWjBQ
Qjw4OD5LaUt5CnpsQ2ZOTXlkbn4/SUFRNyNNb1FLXloqdVFKPDdkSzdeRXAlK0ZqZDx0UX5FeE1u
QFB1ITNTZmcoNzx5QEFXJV8xMQp6RXtiU1ArLXRTezJtdy1jKkx1Ryl7d2Z9ZChlKmlBR0hPfkBv
UTkkenJtOzxKZE59O29mK1g+QzNrIU55JFdYZHUKejZeNjZCMFF6VilNViREJVdiLT9eYm4+P2Ji
Jms0ME1mRilYQ19zOXl1QmNFdHtgVzdwMktGMU1TLTcoWGN2VCU4CnpvJE5ad2oqbmU4JmplWlpz
O0l+Pzh+dHh3MGU5ezBvK0tkeypaaW8wV1J7QGF4Knh6fHZfY2c4IzBTV0lFYVl8TQp6KmB6dys5
UnFsNT5rbC1VNG59WC1HYiQwfWVOLXBvVWB5cn5VRGwla05iQiMzcXdnWnhKZyFRfEpATUVZbCtj
N2QKelFkPTY/K0VicWVRPm91SDEpdUteOTVgYkMkSHZLTl5FWShJKU5jcTdCe0g2VlVuU2M9bDtf
OG9AeihIUk5icHZaCnp7UEs1YkQxaUtYbDdlOF4jO25JPzNVPXplOSM2OUdqSmhTOSR8NzlNI1Bj
UEEhX2Y0MmZwTk1sZGpfamVQOzlqUAp6JDJ8RXVibFFfSTg0JDcrOHEpWl9UJWxuSG1fWns7PVhS
YHBUc1h0REJ3NFk1NmdPVUlwX2hFWkZGaz0hQ0JtS0sKeiRIenlCT3JsWE5WbGxtTV5lN3RNOGI0
Rmt7RFhzb0NwWVFLLXEhQChxelR+VkItNmR8Xk1kbkQ+PF5WWipTKnMrCnpnc0VyaEE5b3l4NSZm
eXdKbSNgdWpXeG5ZUmpqfXI5akA0dFdpajhUTT5vdD90fHA2bDxsQ1A3Z1VxI3MpWCs7UQp6eEQp
WnNtdDRjfEk8S2g5eEJIKihYZWMpbjZrPzNMU2RjKEtCZHx6PTtHJkJHVHk9TGFvfSpJNDBmWG9R
MDhXRCoKejglS0puI2ZTQlhSUyVAZWZYdGpTVXtfMnBRSiY/RT9AR1dkSXVxUUBfWmFHalBnYU9u
SjVtNGx0NyU7OVopMlRRCnpNTVhNXjJAKlcpcEFVeWBWRSNpVyF5SkNNYDhmWT5PWihtYVpwKmhf
a3MqYzZ2PD1UTlRgMXN8KTgqb0M/P0t9eQp6O2ptV3hqWDV6cXNtJVhGLUc7Ql4+UmVjTHllJFll
ZkRnQjxzS18lV3UtMVd1UmxsbXhkTjs+OyR5K1VgTjB0RmAKel8lUnlOQVM3fXVsSkhqcngxU2Qh
XihvUnU9dDZ5PGB3KlRhWG1zK3RNMHhxPzJjXihmdHQqdipXXl5xbGZrfDR6CnokdE5yUHEzfC1Z
UHM5WVpxU3VAaEV3UFQ+ayEhVUBoaHRUX0FAaDc4U3c5fCVlODBjSHVtIWk3NnRaMDgxRSpHPwp6
ZVpDd15DRiVhITZAaEFjIzhBQnUxcUAlZChzWkc7IyVVb1F2QlcrVyokVDc1TCU9N3U7eygqVilY
QVA/bkojWTMKenNOX0YqdzQlKDhJaF9jVktGOyEtdDljQVU0JV9vY3NOIVlxX3k7UTtVbjY9RW58
Q0hzTVlERXNySTx6YFNfdlJ3CnpEI2wmI3ZEUXVNT0gxN1BQbHZNQCs7Nnk5JD1+Zi1jOHQwKEle
cyVNaCQ1KjdjI3N8V25+JD1mMzYrUCEoak9nRwp6VHspeWJxS0hzWGUqNzVDOThEQClZQU03fWFW
I358KkZlOUA5eDt7XzYmP05VTHFxRTE9MVorJVY8flMpPEpWe04KenB1MyU2ekJyUSgtIzZ4K0gp
ZGpCKUpPS1ghX2l0Kjc8IzwrT2J9d0FqZj1LQlkzJl9BV15xMjZWVFM1ZSNUdig/CnomTCtnYXpr
M1R5bTBlbTdFRSN8TkhWYC1LaU9RLTAwSW13Q05SUWk3T05PQiNXUFJQKWBGVStyWWpVVUJIISlS
NAp6P3FRYCZKaVhaSGsrIVNGMyhjKihFI0l0R0ZxYWAha2wyO3h7YEBJK2xrQ1d+IUBgbzkkaWcj
Wi1OT0F6b3dFQ28KenV9fGFkSTdAKCVBdiEqP1N4Z0NyPl89cWFjKCRMODRGQUdhckZAPDVMNnR2
UmNUX0tiWVJ9XjA7KTBIajRvcV9lCnowPFlEMlZRamYhT01faWtlNGB9XngtLTx1PlVwOUo4I3ZY
NWQrOHBgZ3ZRX3lsKD1DVmM8RyVNWC1CYGtAQSMrOAp6ZkVeTHtpfX0tQEs/RUQpXzhidnNoUTk2
YkloTmMpPjVCJU9XKWdXeXVfMFU8aVFXe29hQkE7MkBeRTxlNzhUdmoKelNCaXooTDxrRFFXckVa
dUozYDNPR0JpJWgzI1RLZUJZdmBpV1NDPUVxWFBUKz0/en16U0ckZmQyfl96Zl4tTmVhCnppNz82
RyhkX2kpJGFsJlZIJGA1aEpXekc8cWQyMVBDaFdxRHA3YjI9WFUpTUxKVHBMNSNLZ3ZJd1JnYjhL
MFVtPQp6IUd3LTNNUWJhPD07fHRPdzBLXjwkUnRONEtLKSt2eFloNDJRcTxJZEAkJHFPXisyWGVB
JWlwZi01ZWlaUnhtfHgKelMzbi1QSjw3PDZDWShrOz5kQlU7cm1xWVFGTGZCJF4zYmFfPEo8RTI9
OWtPIT5ufj9mYCZUemQ3VkxsYlNCREBWCnpPPEM7allnPX0pZTduLUE5WEJ6YVoxbSl8Y1RQbihg
RD1NajlvPnFLOTdTelVHRUspSWwleSNlNmhGfiNkX05rPwp6OGVATnJvcUVpNTg/PD9GVl5qJGkx
XihRT2E2Uz9vaCF3dlJ0Sz9gOCVUOFpfQjVDfjVwMlhvP3tYSUFaUFVZZDkKeiYxfE97TmhscGZ6
XlNDfkAjXlR+LU5wRi0oUGc9KHZHOXN6SWZZV2wzX345clA9fm9fMz1nQ2thUSMpZSk1RDQ/Cno/
NF9qQXgxfSU+QkB7bEZMRF49I2VkN2AmeTI/LU1aU2M9d2F2TXhEUDw3U1dHZ1NPVHZDKH0/Pil6
bjZ4UWA1WQp6Ums8ZTRZQjQ0JDhEaUkkVn04Tno0SiZhe3UzYkF6UEBjWTxGVVZnfjNLSURhcElQ
ZVFkdmtxdCNiKHhGfE5RSTIKem8qMnhuRXcoVVFXeV9ObkFJeWVlVTs+PitaVS18aDhIeX5GbXxV
SHdgek9uPz9qWCszVmBxSHU8R09YRCMmPjQmCnpzezElYHc1OFpWN3x8Rj5SaT9TM2MzT14kIzdQ
ZXc/dj97MnFEen1UbHFnYj9tam9vcUdCN1k4TkEtWEk/RnM7JAp6UWlwVj9MYCs9YT96YD97TWFA
JmZULXpHJj57THN0OUVSZ2d8SDMjRjchMVRQbUM9VVA0MypNfippViNzYWF5eyUKekp8WSZseExB
cFdsWD4hOSlFJkJ6NHtiSHRBb3lXI2p8bSp5bXNlTm0tX2p4NihSQVp3PTxeY0BAPVBYSSVfUE4k
Cno5Y0s2UEwoQjhhdlprXyNxU0NZejRxdFB1YTM7M2xTI0R0UXZURFk2YHNQZmxLJlg/eGQwLWxP
dXdRMXlVKXpKZgp6OTdEIWxZKD80UmxzMmI1Vm5lU1UoMmBeTVhfQXBBQ251fGJ0QV9sb0A2N3Zj
V2NHfjFiRCZuQCt1QkYpWWw5I0wKeiFJRlJEeFlnZG1AeUBUO1ombjF5TlRlMkFKSk4oVTE1cGNr
MWJSMjUxP3h2UVdzeTYhSlU2PnYkVW8yd2RGb296Cno7ZEtONzw2cEMmb35PfUpqZnxsKyVWWWBY
SjRLamJZeykjbjhTNzlrS2A3UzNuUGgzLWxaPHVVaHU9ME9FZHAtOAp6eXImQURGOSZFNWsqR3BV
YDE2a1U0a2BjRHlRfjxSUmdRRXw1P3FGQmZCM0Nke1R+YDhERF5MbVl9a3ttQEdzdiYKemZia0F3
Vk5lREZiIVAlP2dvKiFBNk83Ml5qNUtIPFE0QChISFNaQEgqWj85enB3NX42PEV1Z3JCIUZifW49
RV5wCnp2P2c2I1JwKm49KU1zYkBAI0VqXjx1eEBSSDs5MHE4OHxDZEsrbDAxcEA1RWd6UDB1a0la
aUBTaXEqfWpJdXwyXwp6TTEtaXZXfT5pbCRfZFFVRDcoN2RMc0VKY2RnKSgmJilQZUtEJUQySnBP
YWhpO1JrT3QmZXtBYm9LNVRRNHZKS3oKemUobTI7I3NjNlcjWCpsR0JIQW1mPkJeNjtfa2J1YTJQ
ej9IZ2NPJmVDJHdKdCs5d3RLXlYrP2szRjY4TTZZWlV5CnpZcns8djRPT3dMQmFmUUB3VzlWMDlk
JCFaYj42KypXVGBEeWdESEdebXpHYXhHP2NJYVVAS3EoNTZDYG4mVlUqOwp6dEpfakskYURJWEdZ
WFUzWUhLTElNMmRjOzBUfklkakZFMFhjRz54d1hGalh2YS0hM097YXMmcHFvKk00KSlUS0QKemdH
N3hhVDBzSk57Q3g4JXJ+a2U3dD1hcU5xNDhScGhjUlZBVHglVlpLPU9MS3tERztSVigpQzFFb2Nl
N2J9OVRACnpVK1Zme1ktR2lDV0U1R1BDQiFoTWg2dDsxI2NeKjk3dC1OKytpJUEpcilkNmRORFBx
RGJvc3dVdmtIbGVsJGteJQp6NmJid1NlN1h6I0okcWplIz9iRyhsWHtwODFSQDlLVz0/flo7b2FG
MXNFaS16bWtrUzxGcmpwSFokaFdkZC1MSlIKem9la1BFRWpUfEZGQFk3YSVDPmJ0dlRQMDEpNn4+
I244emVMbWkzdyhFQDNmOXBJbE4lQDloOyNORV9leWwlYkJPCnpFbEJua3FgSSlETUc/QDQwLUw2
K0psSylKe3dwcnRxTCYocVclIzl2RUNqVHlpczs0IXRPVj0+NnkpP05xWlVXWQp6e25LKUNWdj0x
YXBVcUIlTGBkVzFUJnJxb1dadngkNm1jT1RBO2x+XjRTKHRgWF85I2FrfTVTcXJDemxhJGVyYUMK
ejVXdk5aOFpEaHlrej5APC1BVm9GJEo1S2olUFMhKGN4amluWiU/UD5XczJlZHcleEdaND5zejxn
V3tMQDtUKDhJCnpnJU0zJXswIXdgNH1UQ2pLJVMqaSU4VVFxeyU7IU43VCgyVz84WXFFc3JWcnBS
M1d2Y05hTXtXYUFKUTJyIXA7eAp6JXk7UWpIT0o/bylTLStpdSQ3ZUUoXjNaUzxCYml0cTt5SFQ8
ZjhyREZ0MFhWSWVmcGIxI1JGU1pnOEtQNEQtVGAKemE2PGVSR1N8O244bDE1SUhZZjRCT2xTZiRE
VylkV0RlR05BbmZPQnBXSTVSV3tlcml2aVdGIztiUnFZcWU1VW14Cno9LUBGQVhuWlF5ezRDTnFH
eSZsejlfTWBrcnIrVjVvTlNoaW1mbDhiRWkqSyVrbT9ZVzJHfGRYWT0tRXsrMEAlSQp6Zn1aUSRp
Pih2YjI3PWNnZmVeMk9QcGE2IWg0SEZELUh3O3xaJT9scDtHSjE5Yj1FO0JvOUdtX29ncVBfQmA3
bEcKemgxPCleLURyc19LRUk9cU90aiU1UjtHMCg5ZDAmNTVMUGIlQ3psY3pSfHlkZzg7PEYkcCNm
VmdBMHdraiRAfn1tCnpoJD1jUnFRcGs0NFhIU1ZATFdzMDs/amBAWEVmQERnZUBZTitLJSV2ailm
e1N1ZnVfWD9SJHdDZEc/JFZVfFIoXgp6am05VXlWbnVoJWYjJnEpMHIodyhrT0RISnA1UStjTWJg
VGFDeUBVUyNHPUs/R0M2c0QlanFkfWV9OFkje0V0X3AKekFgJH1+XkhTVDtGazsxUHU4bzFnJUE8
b19mTCpuP3o5T2F0KGBWRENUfXxuNmtQbkNOVCE9SjV4flUzQmZSRH1DCnowPVo2dSVMUSRQcFpT
QjVqaU92Uzl6PH57byRPTUFGQ21HVG4zeHsjdzNyemN3N2RzbkVNKCk/aEdyK0clYFVIaAp6SDlz
OW4+QVFHdllwO2pqMnJqNWc+KFlwT08tflVfVHEkQ09VRTdISGRkcl4qM2E3aEprOC1FR3lVUEBR
R2U+NWwKenU4WVhyTThIZERvPWUjQXZyJVA5Z0N9UXxfYndmPCokSnFaJGNHaHRrSmloKDVyNEdx
Kn1LbnJwKkdtV1lPKDlPCnp4OTY4cSpkP0hlemVqRl5BU2dJIyEwOCNleXlvLUckPlI2RTZKZD5n
NyRKe0BvVE8qKD5pYXJCT2c1Km1pVXV6LQp6KClzJGxtZng0UU0kdzxxcjU9fks8S0xuV3FBRTU+
KD5QI1p3cmMpQnleckooeXc/MFg9YHdWOXJNN1h1cXh6TzcKejMqQSlvTm9Kbm5LdzZTdiRTWFg2
QihQc2RZWlNlPzR5KjYodWRgOT51b1Z8ank8JiZBRU42PmtGUiFuO2BUNnktCnpreW1HQ0xaKX0k
Plk7QjZlbkowO289TytZS3IqT1Fya0g4I2tqTjYmPig7c1RjeVZ8M0Akfn1VbFItdTReOUwmewp6
PWp4U2VSQGFzJjIpRSpIR1ZRbk45UW5GZCM0KCZZLXtTeEAjano7bGFjI31VRWNELV5xOUIhLU9J
U0UmZTVhX1EKekUjP25FU1BhYGQkYVNAWU1hOUlMN2sxfEdHZ3Y3ZE1MY2hAKEVmN3RSST95X0VN
eSt3O3U0RmpwKUB6I19pMDZiCnp4VWxTdiV2S19DdzU9c3hLPXwzbTJOXiklaldrX3FqJlcmTSVK
UHZOR01SI2pnfXl5WCheI244RGFrT1NBeFdmVgp6TXM0MCZLbDRNNT14PVpeJSRLMSNKQmNZbVV1
eTEqYyNOQSE1ciErUFJiaHpkZF9ZRH0zOCZ0WGNnMHVuISRhMH0KekxkZSRMN1A4fHhmQXE0U01a
UXw+RUkxcGM3KnlOYytFMkgoN1Y/ZFQ2JTRUeyZGdmdiWjR8P1RqKkhMX2p8SnslCnpYPSNMcChT
X1JWcUtNa3sjQDY8QUBNbz9XZVB3MGhqMFYtRDB0ZVlxTUJ7PWFvd08kakhmb1E4OW5TQVNjejla
Jgp6ez9FKStVVDI2aVgwTj0pMDw/Z087eUIrRD9ENEVQeG84IWM1eStmZDJDVHx4emsxdjt5eTRN
ZWhwS3MrJlVDanoKemdDY0shVkw1ZShncSMqQmFXMFdmZlIodDUqOHlfVyRGRFghKzM3WVE0fU8y
MlQ9cWkxTkBNYWtQIW1zYXYqOTlKCnpmcWBkOUZXclJ5RURyblJ4d3d2fU9hPU1CS3U9KCUkYzhU
SUJyd2c3aXhnTUgqaztxYHRiTE1FOGxkRWBQVEVSSQp6NXFRNHNlVStIeHJrUkVgMGlxfl9lNjl8
RDxfcnhEKXpubTBfVjBMZFZNa20xOy02SFY8bUttMj9SX1dHQT5CYFYKemM/R1YoTDY3I3wyeW4x
cWMyezBtUz1Qe1NKXj08eDY3U3lLRmp3fWZBckpSclg2SXk9KlNodExzdml3YEFWZnBMCno0bDJm
JkAhJDcmTjNIJCkqb3pveDx7R1JGOWNYcjBEZWRVP0p1Kl9gKUJ0ZDljfnVueiNLYiRWYj4pcVlE
dC14Ygp6KnRfO1NlUiNAdEZ3eyorTng2Wn5mUnBBYWZoKDkkJHMhe0NUKndYVVRacD1kV0ohTmYl
U1lfbzhgaC16JitpKGUKeiFpeEJAVnEqUGNfbT94I01WYHg8KzgqdnZWTjQtO205STlsYXNTLXl1
QT9ZfDlwNHZrbyF5RnsjO3tQUSQrREw9CnpkUlY/KWl1Zm0pZng0VEFWIVJlK2ZTfGBkTipoYk5V
ZnIzKng0dD9yc29sJTFvY3dyaCRfcVpRVnpFU1ZKfXhtZQp6cCF4NHxPIWBhOSVQfHNCbDNFOD9o
M1QtdypFb0Z0JjNAcU1YeiV6e1VLMjA+e2E8MiRwVC1HSTVCQzQ2dztxbS0KekRHfndMKTFuUyNq
eyZzPDxrR0Nya0s+aDFwM0F0Km1aNkFpI00hNWE3MU5KTntvZFhRbjshNDVGT14wYmhHZ2c+CnpU
KmlAd1dNcSVEdzIwSH1DeCY+KkFzRF9DTF8wbWJsSEJ7PXlsPVk+eEI4LXwjJWxCYTNsSiY+Vk9t
eE1UOD4rMQp6ZkBYO1ZDJkJlPjBiU1BwKCheJiR4WEgrKmdtMyE1PCFlVm96ZDhNai0rfGdNMEox
JWcqa3pVKnBvM0VZJUZsZDEKemt3M15GN3BxMmNrcT4kJU5GRUlqYUQ1UGtDSkM8aFp9ViFiNG90
SzVzYkU9WGwyT1BRM3U7M34zWUxOSVp8PjsmCnpSPVV1bGFxWi1WYyg/XjckM3IhJGVgbD1VZ0w5
Yis1d211MnlyY0NeVHBUKkNgYXA9PiY9NzxBbisrIXhINkBjbAp6alUxLWIqNFF4TDdTUXZDVn1U
KEN6Tnt0QE5LXzZwMX4/U0JGK2x5OEdZTWpYPj5WNW0wYU8ob2psI21oVEYtYDcKekl9OExYRlhD
MWNmOXx3NE5vMD9jQTJYJDFWPGcwa2leYHY4V2VnQ0hPcHVhflNoMnNsQk5TNWtlSShZeDIyZ1Z7
CnpUV3NqN3BoeVZ8O2pxQWwqc3RxbHZLVCFgKEU3c0Y5Q0dIdmw9e0o7VmVlWEFiSW9sRCV9dz5K
UDtFY2dGWFI+WQp6eFdmcEI8RStoZ0hEVFUzJXx+SFBXeGRVdmI+M29yS2RqLVUkVGhRTHhDZHtO
Mn19UEQ+QDVrRj5xTVQ3QWsyO2AKejs+cT9OYEVGZiYwS1NvZEJoU0xhNTZsYkIqJGlOdTJLbElk
Zn5vV1BARV56bHdZaHVVei1ES3NAfHdWUkQwQjZGCnphbmg4WitQbT45KFdleClPeWhWUEclV3tC
YCtwaXkpMXAhSGRXK2M2RGx+Vk4tbntUUVVtOTN3dCViO3ZJazA5Owp6UUtRPUF2b2htXl50QGwq
XmhIeXc8QyFNS3RjdjRBWl5zJWtGbDEoQ1Q3WHdwZkNlNjwqdEQ5a3BTO2YoRjk3UmkKekxNcCgw
OHpvLUhpRHcxekJjZV5BUntvUD1qclp3Z1AtYXRLY2pHaTtuMzF1VE0hYnRuYUBrXlAoTDZZQzda
N0V+CnpGPj1LPm5XZTNUNEdwTkt5N2dwVz5WWSFFSUZ6WFJ7KkFoRThYY1hYLTI4Y2pWWHtLRnBH
WCZvS3N8WWxAakI/dwp6ayp9QCpGUnd8ITw9IW1Ye1FmMSsjN3Q2MjBSOUg+V0hMcStHc1VhVSF6
OTBAX1c7amV1Mm9jUTdSZmxwWmVmOGQKenJoUnRnJTI4PWs2RnhOcHVzbmNBS3FfTEpiaUJibVR3
XjNMQm5TRXQ9dSU2cVVifUdebEhwaSVSQFBPPElFZHtiCnp0TypoWm43LVRpO2FpXnR3WnpFV2Bv
cmNRb2xrT2x3IVYlYV5QLT97KVJ9dT1JflBudCspbG41ck8lfG9NSypmKQp6YCE2b3Nucj02aVRz
aiF+JitEN0k8MWVsVj5FVSVnTm9AemhJSGlaeVN4Z298aT51ZDVrakM/Jm1ffVhidj5EX0wKellf
WllOOShifX5OKU8wX18pPj94d3hIRm9yJmdzVl57aTgpWlNYNzJ6ZlhNSSt3by1VP1k/NCtCK2gh
YHlxYnV2CnpVVk5LJjd8aTgzendXXnJFXlFWJD84JWZLJDBxcU04MSotZ0IoSlQtd3NTVVYyaypr
ZXsoKkFRQXlRVVY9LU1tZgp6a0k1Uy1eWkJiNkgrPV9CeHxaVGMjTlBfR15yV1RYIUtQNHY0dUlM
cz40KG5ue3RkMHYtV15ZJXBAJk1xN15hdFoKelVUUl5BbygpVjRUfis5MlBLIyFZKmZ1VChwSnFF
entDOSZse3w2cDFUPlNVPzVlXyE8dUUlUX5tTWlzVD1WUzYtCnoza2hhOUB6UnI+T09pYF9VZl4x
NFFKb0s5JGU5ZVAxU1d4a0B0cTF4TUNvX0h1PSlZUzhne2g/emRaQSlrVGRkSQp6VFE0cDVYc1JA
aT9iPDZLMkczT1MhRmFJWGV4XzFWdTVFR3NFb30xfElOZy1gaENGaGlLVSFRIVJwKnViITJicikK
ekNCKXUtcShNYns3NmUzKTReS2gzMldSYSh4dzJSQCN4KUhNNFB6S28mMEMhYjU9OWhiMXk4PUQj
PmxtPzc1P2FjCno8XlFpJmdlMTB1S3RyPjchKVpxMEdNZ3p8UEVDO1A/RG5mKyE/el9GSi16WW00
KysqTygjNDNSbiZPNj0yczNtRAp6KmVmSHVzMHhtKV43VUJIRFQhUT5HJTBvZWg8RSRZczR+V0ZB
NG98TEUrV192LUVKPEU2eihNUDNrY0RlKUNOaz4KelBYM0Z5ekVuZ0Zoa1M7XlVVUUgpZGsjND1k
XihZTGFaPVJ8QnI/QGpEN3sjMEJ2KVlZezR6KC16aHd5Q2Y3WXJoCno9eyg9bHo9SUdsdncjTyMl
JXw7TjcmdDhHJiQ9Ym9rUFJ3YnNTLShWdEkwNGpDKTltdkt1UUBETD1QRz9TOEJ0fgp6RnA7ODNX
e1JpO3IoTkk/QUlLMlRFRVFyMS0rS1hUbCZ8Tzh5K2NYfGYxZll2e35fZTwlSUBeWjctV3U2Ty0r
c2MKek8oY2ErMjNqPjExfTg+SlJXaihEcG8oUSY9dnlIVSomTjxKSzJMNCMxemxpamEwdHEqTj5T
SjhpaUwlUktfS0MqCnojbVVnTDVRSGw/cEpwYiFZNzhzaGAmaj5tYmV3LUpBQmlnT0o3R1V3SXMy
fjEtZXRofjUwQ0c8ajtuPUMrSEwlVgp6VFE2WHdveWJUajdqUVclS2tPTmFKd1k2KWNpSmd9O1NC
Rmg5aUZPSXJkVCU1N3tOJEVZUTN8SCpDKD0ydGdZOUIKempuaENOZy1uanBtXjdQbihseXVvVzE5
QSgyWldofT5kP3EmIzh3JSN0fSspRXVrNDFQRGZHTjY1UXRKKV4mVnpmCnozU1BjVEBvWUllJiMr
M2BvM1hSZilLcz5jYVM3K1BtYmolSCgkRnVfRlNtJj13YFApfTRSXztsJFFoeHE9aH5pagp6KGpu
OWAle2lCY0V4KDNWTiZWLSZZT1ckSEQ8UUp8ekkwXnJSJXxyWFdCfVNpan5AZ3QocWg2ckx2TUJ7
UjNJKkgKenh1fEFMIUVOdH47KFV2V0VNQSRlUDxEPT5LMSQ0M2QlV0xmPUV6Kl9Ve3RPa2dXUmhj
ZTVIQGhmVjAjcnN1Vj1nCnpJYT5lYzZPVUBjNiYhd15lMVp1NEljWXFHazZucFl4bElGRzMmNFg2
Wl5fUSpeSnRyMFpneEZlO1gkTlBFZGpFKQp6X3JHbH1Nbj1YSFZzZ0BfPGx7TWI8cVk8fmxmJkJY
WFhFalA8X3Vqd0F8QjM3IShMNSQ8JjIqPyV2VXxORk9hWE8KeiUrJEZhaWNufDZKfTZ7YTE3RTBg
JHh7elh1TUdXQ1JXeEdWUl52MCMoTTAwfFQ+bjhXQV51YUI4Zzh3cExZakooCnpePEAlO3QpRSFK
LVFPbXB7UXAzWiVTc1M/dlZzWEJCZ09yT0FaOFl6YEhyYFpESFl6JnVrdyVQej0oPiZqTFlHOAp6
aXV0c19TVyRofSlGJG9Rc1Z1UEtmMTdYdF9xbFNPJml4TCNie1MhRHVtPmhsI0d6UDZ4MW4lR1E5
QnpkPWpSKzcKejklMkg/VD9BcCF7VjIkTiR1QFZOdyorNkd1SGAxWmgxVih4QXltVUFWZio5SFVp
PFdrY1ZZRzw8eko5a29gYWFWCno9VEE0TypEV1pjSkJPND8jVERGPG1PUUUwZl5yS3pEKERzb0V7
Iz5rYn00O0pyaEBqPnI7RkpVMk9PUWBOU1pQLQp6aFV1Vn5FV3VrU2EmJW5iJm9aZjVCSVZLP25Q
c29ZOCR3U2VZVjY1bXlyfDgpVCVWYnQ5OG9gP01OUmJGYGV5TFEKekh+QG0/UHNrfEZfc2dCaz9n
ciFfNlBQWT8jS3slRWlvaU5eX3w4OHNHKG11PXNFaHg1KlVLTTFDfjxtY2pAS3xiCnpmPGBnJiVT
ZFN7aSgtYmQ+aTZGQDtTOCokWT5HbUwoM0JXOWRpNDxoRER2U2Y/ITRCSCFHJipPPFBNUzhDdDd6
OQp6QEc4LTV4TUhvKVZub1QkMWxKQT9yKiNHSXw3TFo9eHtDZ3NaUmN+PzgyR3Z5MiVGZlpockEo
MGd7SGBZY1Q3ZXIKejcoTXJQM05rMFdgbnpEK1E4PSNfZSNeIVBhTmx6VXY3WktpVD1tKU57cztG
K2lZZDt5KjB8NGFNWmg7ZEdvbVo3CnpWZD50UDM+ME9vJTZDbkRHdzhzQkR9Znpkak43aDI3eyRt
JHJiUjhNNHFyQlJ1UU5vMVcxWF5BQ3BfLXRXZTdtcAp6KShsbmNAc0d2WG59JkY2NWpUdVFARFJm
WCFIZWpJNm5DV0MrYG03RkBhT29gSVB+TkNZYClVK2g8bkgoe2tPbTcKekN4ajROVUVNeyleczdk
MDJLeXZSZWI+cCljbUk3Pm5oQER9OWJvQHUxXzlQRlklMntrSVdjVTg2JjBDZ3dRc2o+CnorQSRL
MVRWUSFqeGpNfWY/QG5vSnpwTiR2ejJlYDRGalNBM19SemtBYiotZXJvOHoleFgpRnt7NTYkdytS
TWs+Xgp6al5ubnVINHghM3pESEJnWW1JWVB5WWVxbSE0Yy1jP3Q2KHN8Tk5NciUxITRAbXtobGl0
MnVVVG1AVm5nalZoREEKenVAdldAOz1wJnghd0V6RF4lY1EkIzVjLXZiWFlIbVMyTj9+Y0MrSXVN
OyNoc2d0byRBdT9gZjBublFUbyteYCQkCnpfRWVyKFNxXkNoRlgjd0AjKTVSK1lqNXkqc21xY29z
ZFF2TEw/fCs8OVYpKDdXMmpuc1BwYmFoRUxgalNfbFFXOwp6PDIrcCRAWDYmcGVaNlN4ZyZfODF4
IVhxJUw3VDx3cUtJZDRjJGgtNWM3XkFoNF5yUl9heGpYcllCRHVhN0dlSm4KRHU4aWRICgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdG9vbGJh
ckljb25zU21hbGwucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvdG9vbGJhckljb25zU21hbGwucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
ZWVjZWU0MGU1OWMwOTUzMTY5YTcxMTg0YmU0MmQxY2Y1ZGQ2MzI4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/
ZDAwMDAxCgpsaXRlcmFsIDIzNTg2CnpjbVdoITF5fmJwOTNMVXdBUnM5eURKOSg/QXV2KzlNb0Qq
Zk4oK0x0ZkQ4fUBCR1RRPktzcllealA5O3xgfVJEeQp6ZC1tTTZ5RXBGdHtfMHtpKUQtWT5zQmkh
UDBLU3I8b0Y7UExpUUlVd0ZwJSNHWUY+MjY5ayMyWWZkPkc5T1p4d1kKejA/N0pGMj57QHorc1Zw
bVh4T0BWeF9IPlN4Vn4xQm0zezUlP3FZNHtYYXhaSEY2M3owWGx3MH1PV2RxbiR8JVEjCnpyWWdI
PXpRbFUxREg5aDttYy0xP2ZLM0Y5VmFUNjxgS2dPb1VMS3UjQVRJX2pBdDV5Vzx0R2xqdVErcDxU
TVdNdgp6IVY2LSl7KEQjdEN+JWw8ejFiT2d1N2dSIXw2YihPakEzP1M7aVc2YGVHJi04RTBMaWlV
Skhsel9PRVlvTnImT1EKemJwO1MlKW1Tb2tKaVMyeSt5O3dfemhtc2dZekx0RFBUXnQhSSNzaGZk
MSNeJGchP2o/I3dlaT9ENG17MyFwY35vCnpXQl9VWjFlcWQkXmhjRD9vRkJ8dWZJTWA3KzBiVztP
QElhYHo+Rm5pWDleSVNiREo0fTB4KEt0YyFgcGkxYjl0cQp6NihhfCo2JEFWbylCUCRCKEJ9Yj1T
dTZMNzBPbUxXSlc2YGppaCMtbks8NmtDWlohWjQ1NVYmJkNYeCsrOXNuPksKemM9Tl49NVJuTldg
Kl5NPWUpZ2BNMitvZXxzbXlCZXJuZSZVVk1iVi1aa1Qje1R5KDZYTikrJE4xa0YqK3YhdURZCnp7
VzQkaWhWY2B3VD9fKk5jfVh2a3QtV35pOVZJOXE5VGlOZENvdHZRQDQhR1hUM0JwOFo7ekZfTiZe
N3ZwMX44KAp6OU5hWmpwPCk9SlBTM3hYaj9yeVJhUHohdzs7Z0YpclJ4QkJka2NDT3VLKUxxZUUj
PlFgVDZhd3R2Tyg/akZJXzIKenlgWDJDWnFyVl5DJiM7QkB5REMxd2YycC1WWjVMKTFAem1zPyVf
KW4yK2RlQmM3KDshUE5LcU4xMXtvYGM4YWxBCnokKVpXMG9vdz9IaUNjblBSe1JBb2dmVWhvblhR
aiQ1QEVUcSVKRzBFeGhlcHR3M2tFKU5hRmtyYGl5cTEldEVCXgp6Knx+ODgwR3prRGJXTzhqcEBy
SXB1YUVnNFBOYmRgQHxYYWopPUo1NDBEeV95VFEyUT9IQndNNDA2O0Q7akpAJiQKel48QF8mTTwp
aE4qTmRldCsoJEZQMiR7Rk4tNy1XbklGX0xfP3ErTyV6c1JzZ2phMVVJbntpSnwpQUR6SXZXLWV7
CnpDRSk3VFgoVyh2Q0E+R3MwKFledGhHQzxCN3tEU21YSU98cXZHfVYwQ0lPMmdHeEM8OU9BKHpV
PyhPVHI3X3Zgewp6JTFIdT4/PWA8X3p0Jk50SihxQXQ2XlM8Zipxa0liME8wLWQ3fWN1cUp+Z2NS
bGYqUCRvb3YlQEEqelV2emlgSmIKeko+Tz5+bElMWlF5VnBgbCMwJSFiJDRoTXE3Wk4zOXAqKT90
bCRkPElqeXpvYkp1KzNvOU1+ekpocEhJPTsrNkpPCnpScUZtbFlsKiUzSlhZbXtQNyleSGk3a2xr
QmxGc3Y/dGBNZmlvVipNO191ZnFafjJLQXUhWFNFQjBoRHFGc0ElZwp6dTRRZn16VSFzNTtDJnlo
dWdMTGNtTCFwc248eVlnd3BadmFOdnRke09WZjgkcksmPmhOc2BIcmxnXnJOX0Jjd2kKemA0eT8m
cXpvPXRJI2dxZHE7a0F8SHhSaiV2KD5aM3c/KTBoYUJoVD9WPEdLVWMmb0wrc2A8fHpfLWRQSW58
flhfCno+SWQlIW9xe2FRPD1ePyohfiUoaUdHK1BvbmlaZC1mME9jaVdyPlcwbFBmN2glNl9GeVFR
MT0xLXE9O19kTnZhOwp6cl9yZnBqTyRHZj9KNFlMPzRuKXo7TmVIVDQyUTxwdSlmTnMjSDYlJjx3
SUhWTCM2MXxSTk8xNUhqbUt6Z0NGb3IKeiFifSQoZWZFMHh6P1Z0P2FNRk5qJXhUb0ArfWI2N2l2
RnpwIVBVOVk4UFpOSEcwX1N0fEVSO0t3T044YW9uRVQqCnpDcjlIemkoMVIzTUNeQztBRGlEVStF
UnRWMjJaZ1YyMGJjMD5hdkJPQH5UV1hUbC0oKmV0dVFzJWZhQSlVbUUyVgp6Q2VYYFZIOExPUSZF
RTNraU1Bejk7IWpEd2glNnRGUHA/TXZCR3A8N2JNdUdXP04zaU5ZJmRJaSN6cFlnNnx4aHkKejRM
MGZgZXdDKjhSPmxzMChsZ1RhT0JHOCRsYDAmeDM2PnVmPU09VGN3LWBLeDVxeTlHUyZVZn1ZIVhM
YjxpTkcmCnp3VSYhPGlwZjxhTTZiJVp7eTBGV15JUFA2SS1IQS1lfUxPZkxjdUM3I1ZkWW9AT3pw
ZD9rRFhocn5CZTcxdzRJPgp6OG9hantpK0gxeTsoWT5jRjU8TUAoOGFTKXZZO01tUyVgVT5kQiVE
flFxelFaIU9Ye1I5fF9+X2BpKGM9WmFWY2wKel4lcFE+RmYlWUt0TTAyRlhLQVc3NnxvaEdzZmVq
U019fGoham0lfldXSnxuPEB4cnM9Knw2LUAxfldybkx5cjMyCnpeXkkwYSltdyV8MkZMWlMmWEk7
OTFgdkg2THJ+NGZ2WWF4ZSpfTmBGViZkV153R18yZEBUXlR3PHlyaztlTSFUcwp6JUkhSWYjcXhU
bWBYRi1+M2tzV3R6VmU+cWwoditoPUFkcys1fTVlV144fUB8aFAxJlJ3ZURvMXh9cXl0cWQkK08K
emc4REFnX3FjOEokQjQkfV8lYGNGaHVDYFVhPHNDaTZsXkdMbm1vY1VWJlk8enpZSzlATk9FT1Vf
Yig1JFoyPio2CnorKDdJOGxVRiZ9SFFDKXF6WldaeDEmezVIcW5DMXJgRSVMODI3RGdsSnA7MDlw
U0NCWWFDNmdtOTlJN1p0SU1pfgp6KzA/PGBhRFYxYihrcHtpSGI4di0rP2J6R05NMXwyPVdhQEZp
VkxtcXR7OWpPM3cxVU9Hel9XdHhQVk9+UzdrJXEKekFTQEM3aHpVUyhDPS1lZVQ1UTtkRmVCODVU
bUx8WWpzeip1TVhUJVRgSilmPGN9KlcpZW58WE1fR1A9UGpLT3hgCnpAT3Y0PDRnQU13KHhARmxx
KDw9Vz5eUD9SaihKPjlGZGo9fWJmakxDUkR4QGFLR25xZzM7fn5zQzBVUEV4cUc+RQp6eHNgMDJf
diNgUW9Jbjl+JHY8NTc7dE44fXtMTkRSVC1GQXxHeHxDRE57LTRqQjMkZ3tnM2daWnRCKiQpKEhs
NyUKenhTSWhLS2V6YCN1NzNIVy1JdE5ZPFJ4NHI5SFF5Y0RsdXhwc2l6LV4qbmdBOUdvNiRBRmVU
dmxiPD1qK0ZtZ2BfCnpQUT1XfjhuZUA+b2ghMWRgWD9WSXdGPnlYP2M7LVJZJlMpKWx6ZVloIUI8
KCU3NnBATWRCMWt6bEBNKXZBRCoxXwp6LUEoMlhnS0EyPiZBIWMhd2ZFM3B0SHxvLUtJZ2F3Wm5g
d2dMNUdefWVfdDRJOz8mQyY/UD9wYyFxX3BaWkxJWEgKeko0Unl2aUtMZjstO0VwJSpaZj1qRjcp
I3g3alo8PU98cVVgNH5iSU48RH1LIVk1UXcwUVo0VDB3fWBYKF4yTkktCnpVNXZsdGpiSDI4b28z
V2FrTXVJaWdXSCg+UlVOYGl5OGVDWHN6WSUmen0zT29qdG58amYqcGE+Xnw9ako+JikrPwp6YTtQ
Tz0jKHBnKVRjcFQlODhYTVo8aHhCQj9lZWM5YjFBajlxX25ybWE/RTx0ZFQoY2k2S3E2fnt3SEg2
Z1ROVm8KemV4VmtCUmsheCY+Uk51MEo3YWAodV9lNC13eUJeKXlzXzEpY3lNJD9PaUheQGAlP1F9
VGt2PnR4eX5HUj5wWEV4Cno5bmdCc2U+ayZmKU96eklJb1E2YWdRQkI0Vj9BVF9wITg2NEJVSyp6
WFlWJXMhM2s4Uj1IencrTVZteD4haEF6ZQp6NHtNczlwYERiXyk9WnB6Y2M0SDNyRWg9RUlxfjdk
N3NTezNfT3BORWpqTnBCKjRfPkY+SjEmZj16QDJBen42UHUKekRTQl5POChNQ0FuWEwxeWtKKHlU
NEBNUzcmRmFJRjZTTW0oeypNWmFebl5lOCNTUSNgN3V0aCUzd3ZMdFFmJHUwCno7JmFrK2ZgWW0z
bWRxQV4pZCM+b2tGTUdpeHx9bzxkOUZ7JkJqVnM8dHp4NmI9WiY3eylyO0d0ZFgwS242ezRuMgp6
YD0weWEmbloqdCgzWVBxUz47V300byUxWVpGSz9HSCskNHpxMCF+YkhvcjQrI093QE1MfUl6XiFy
JGVsQDgpV2kKemReeTtpPCFOLU5XIXtKN3hVNXlaKSR+Jk89KT03MWFgY1JwKGV1KlckeD9gWXIl
JkYrI0ZEfWRNcjhRZGJKQTVKCnpxM255cSUqM0g2e0hPITR1JXc4e2hMcm8kLWVhLXNuQl5FVm5C
d2BAXkg0YmpJZHx+dyVtSGs0Oz5TZE8jKDczYwp6aGZeVHJYfXxOfVJtRWF8Y1J5WUdwZkJIaGxT
fCEpcWJ7RSVBS0hfR1JZTFd4en1GJEgyLX59PUUzTlYzaG09PC0KekRGfTQ1OX5ZMEdgOFhHbWM9
UHBWTU5MJXp6QEdeSzJuYDFTP2h3ZlI5c3VDUTB8NHhzMFJXO3UwMDBWP1dZZk5uCnowS2d8ekNB
a21VejYqeT5LMG09V0xHWllhaVdaNEJ3VGk0KS08dG5nNDYrTXlRQnJeWSErXn4ralZ8KiN5SGQj
dgp6dCVaZjxnP0VNe0w0PDApYnhwKUx4aHoxLUcyWlFAK0goRitMREkqOXozb2d0fEYkOG9yKVNA
PDNnPmVTZW1ONUcKejgpJWJoMXpkbnthdWAmOHUtSzclMHcpS3VKJEd6dzZFZEpANzRgV1hFcUxp
cUB6Wl8+dmdNbHlNYC0+bCluPm1RCno3PkshbmhDRComPHJ2QDMmZGdYTD9zNT8jeHJqJSY+R0BM
Yi1MTVZTPk1LUlVLV1U2N1B2M2tsWUkyfEEpNiNUdwp6XmA+c2FRRyhyOGdKfUhqKi1VOEglXkt7
MjZpSXN6dnd8e3NaZypQNEFJentuTj13bWZIQmlfO2w3NDBFZDstZzAKenAtQSZrKX1uQFc5dVV4
cC14a15BMjNfMDQjbGBzcVpAb2Q3VHdoLSY0e2VgYDZYdVJadWJ2Yz9tMz49dT5CeS1GCnp6SCpR
JkZmV2Ayel5lbGd5OSFiWiNgTUgtZVV9cHhwOW5SdyVyKTRfWVZZcHUlOUUxVHZxQHJtdnd1eks9
ZmVGPQp6MWhZamwpTkk8dEJxWTI3RkxwU1lBZ00qRUJ3MG5ESUxOUExALS0mO007dUgoYH1eT0E5
SVF8dylVaz4zelF4RFcKemh6OCFDR0xLI0djV01Mb0xpMUMzQlomTXJnRlA3eyUyVnh3MnpORHN2
TXtmVXh2SX0mSFp9OHplN2hffGVmX25JCnpJX01gSEBiZ21KJnlaYnkxdi1CIVFeMjFsZW16cWsp
Z18pUTJYJT5uXlA+OUV1cmpCZCE1QCU9Z208bTRMWTVHaAp6VGwyVnRqYFFfYTdJd35rKjt6bHs1
UGkrZG1QR2RvR3ghLTtiY0g5Rz5qTC1iY3Z6Ozdsd3B0cyMtQF9NeWoqRTAKelV8dyFDKFN+TEg9
alhoNGYkY058KEgkNiVIZkdQT2pWNUtYWT5efmkoMGZ+Z0hkTXU7cU1aNXBpTlY/SnRtTiNZCnpa
WkI4PmNzVjAoYWotSn5OMGtwcj87TVJANlYxNkUpeHB9PWA+OT04YEBFS2E3MXtaKWtpQG5nXytM
NUhPMWshTwp6Sn1PNU95cDE2R0FXZSFqMD42MGlZaHU/Y1Uqb29qUj9PUShoPSpyPFRSNEcrVUoz
P2MmKFM+ZHtpTyVIUWk3eSUKekw4YiolYDY3cX1VQ34qZXFeeT9XY1B0I0QpPlA/X0xpK2swRUlK
QXQ/dWxZZEVlZlFrKDZQUjJ0flZiO0Y0VlclCnpQZENSI0IkKns8N0Z1XkN1V3hRbj9zezF5Jikl
UFA9UFIrKj9jN1hydmpmV1YtXnlTeTd7Z3ZfMCFNaThqLUYwSgp6NVVaZU8mcG9SWFdndkY1V1U4
VXotVDN2OW08Z2g1Xn1laVlxUmZjIyUjeX05YWVtJH16fXhNMyoxcVZ7NWJFOG8KelN2djI3Y0Rf
eGchKUJHSFkhIXhEVnRGOCV1KHtARWEhX2h6dTt0I0FTQUlheGxgKyhpUmRtPFYqQG5uY0V6dkRh
CnpoeEBzWiRyeEFJRW0kd1FicThEQG0oblB6KV4+YmU+fDZvNF8pfEJSXldCWk5gMj9QWE1mLTM8
PnxMbE1oYUNhfQp6UzZsNyEwJGpgO2NZNlE0TGxvM288RWw+NEc7WElHd2ZqTTdlVCotJVY2OU95
YElUY0F0K0gpeFpETStRZEtDb2QKenMzNCV5NUtzS2lAYElHfTB9MEppb3NkaCRudlVtdW04cXEo
S0pNVk5jbG5DRj81YippSXVJKjlMRSR+clZ5bkpUCnpxcyF4VmxyUTsybm8ybkhodn41d24/fih0
Un4xMihyOFJHRTk2R0tZeC1ZfnpObiNfVUU7N2ZLOXc2TDdkcnMrQQp6YiF2fTs+Y1FAdkNwUkhJ
QEMkcilvZn5WdFY1ZmhYd0BrSVZZPmBFRitOQ29QIT9OcV5iV0duVFh0USZgM0RvN0AKenhmdDsk
aFN7WEAlUXE+OWU7KkZ1X2tDbzBYKjZ8KS0rWCExYyMzRkUrTWwpIz5OP3Z4JmNvRj9td2RNQ2Rl
JldTCno7aUVZezxwLUxqR25HISt3KXxoNjdOX20mWDMtU2N1cD8hKGspVXtuZWNoRkVzRzB7NFpI
bkoodkVHIXxTeGJ7agp6R2pfR3t4K29qKnNPbDBaSkdLSTluWGgoMnBSekk2R2NKVlpyYGp9dVZL
PmJ9dHlMI1J0OU0tb1Q7UHJxRzJveVMKenM8cjhVWlJuJlllbT1JIU5INkB0ZHtJeWFEXlFYaWQz
aEY5aW1ZVDdldHd3PTI/VHx5MXQpJUUwcXYzazAjXnoyCnprODdBV2hAcUQ3NjEjPSRsYWBaYnNp
ailHaT9CPDNWMD9WUzxtXmlTe01mVU5WOW1lJlVGJDtgbCFCSlQ7fUozNgp6ayZWazNNREpWPjZT
WW10bytsbnUjISlxRDwjSjdDLTZMdzBIYEpXK0VKd196Sjsycz5IPjteaHEjcF91M0F8a1oKem8l
eDt6MWwkfmReWXBBR0M1VjJIN1k+QlRGc0UhIUxQYD5zZHspc0VfKkVZYFQjSmNMY18qcjt5K0Rn
aTlgS21lCno2Qnl6ZG9hPXR0T3puRmh3a202WSZEJSQleW9aeU9QbTB3JC07TitjejwwX3ZQQzhC
LSZnU1B8SWQ/cU8wWCk2RQp6c1kwdXJURCZZXlVJRWUzKEpzUWlyKUo4IzY9YiY9cXxmaXQ8Z3Zt
SW5yVEdiRXE1PlhycUVQaGo3UiUwMXEoU3wKeiR5cn5wezRVfGVpTTBMdztwdUB3P2dQVW9SXkFL
Mns2bjMkO2JgSlAma1hrYz8xTl9OeV9hWHVQOT9LNW9Te1JNCnohWU1sLWdkYDM0QXs1IVZDRURF
PXQrVDI9LXJtViRhNWdmVytKKipGSlBiUHJoWFB7M0dESWNWWDFEcFFneGIwMwp6WU9+fHt6fnlC
K1R7bCpBcm4xJVZvbDt3d3lnak5ZUTxlLWl0I1ptJU0waUlESnwwMkdDVmwobW1EM0ZIY3NaKTgK
ekIqUShweHFTMkRQTyo0dURGcEg0eEtKQ3J6SFdacGZlMm4kU2ZIZShtNHx0V2tNKCRnRmZjSF9Z
a0VKUChJZGA7Cnowe3MwfncqNk1QYEJqYTQhVjkmWD5LemREViYyWFZLOHJyaTRadUU8RjxQbXBI
IXQ7JD1FSylMY0ZUTkkkJjBaJAp6TWl+fUZIT3xuVEImZz9GY3haRmcobkByaEF8dmcqPi0hb2NZ
SyhvQUtifUlPaF4lciRwNn0/NShnaGtyNVlPMnkKeiZDUDxlcU1vZGNjMmxlclQqaGt5TnlQQG4j
KVhEdTZTTGAtWDBHM0o3OGAycEY4YX1tKXhnZ1NPO3UrLVFGY0s8Cnp0VnZhcnpoWn1WaVRTQ2tD
dmRuX01ARlBmPG15QTJEZkVvMmAkRiorfDlpNE1gLWBsb0x0Qj1sXz4xRzRwd0tiSQp6bUNmJFMo
ZE03ITdCYFJyQ1lNLU1rc1RTJTMhRiZRNjc4PXVHYyVfRENNIVV6YipueX1vQFFDaENFN1MzU2xV
RlIKejg2WTN5PmswPz5AMkB1K0t4NkJSMH5Yc1ROem9hNVk/dTAhUm9eR21KVWduKSRIanFrLUJh
PDV4JUJMWWx8anR0CnphX3Z3NyF7dXxwaC0/M2F4Uy0+bHZ8dSg8P3dINWtCdlMrdHIrS253YCh3
QzIzMWx5fmFsaThfd3tiNVdycz1eKwp6UX1NQX4oPDwyZk1RKjYjVDtmcjQlLTBYMWRUKCt8ZDNZ
IUxXJiY+QjJNXyVOWjtwdlNVaj5TS3dKX0tBV2hoM3gKelM0e354WmktR3pkd0c0Ym5yS2RXOHo+
b2tTd01mKmUkJHFDZUMhLTNYe3d5cih0PlBrIXZQYFVsbnxsRz1HQz8tCno0NV8yT01aeWRgbT4x
Zk57aGsma3B+PVBpSCk7am4ralJ3RHVrKkojJWdZaHJENUl1WDdFe3F1QU5Ibyp6Nl5PWgp6bVdY
SlpxalM8Z1ZIMnsjNkplUilVOzdgSndGKWJnRTE3bHo7TV9ZN3N+R09oPCk1PjUyR2BlPFA2IUJg
OC12RWMKejYyb0ktN3ZyKm8+d2F7eXZhK3FgWCUmQTFEai1iRSskeUpLQFo4VHN2dD4pWko+UTxD
VSpBNUFpQ0BIWFEoZ3VRCnpeVGhMcCFjRTl1Vk1oPVoraHE5TjQlOTNLX05aeioybXRHLWVDY2Vk
e3tDR1g4NzcqcUxJYVUlell7I0dmMUItTgp6K18jKTR7JFZrRis0NF8kemkzcyVMR3pabzJzMVBE
VCZvcHNrIzBrO0NVKVZVQXZLNipTMmYzREZ2MUd3bXp8LSoKek52aF5nVlllP31GaiUqRDt0fisk
YDclTVRGOWx6VDB3PHJwUHtVVG5PZGwwYEVzYyNRbzUhR2AyX2s7V19WS3xkCnppVDFRTGdIJChu
T28yQzNqIWhuVXVmaWByWEpPUGtreiUyMTBGbUl3NE1ZS2d2MUpVRXhxaH4/bElOJCM+cGFjOAp6
bEdvZiU0X3RVbVheU1NANVQrOFNoKn5ZeThxcEsrbyV3aipvVj9xZHAhd0E/empyU1ZTRVhAQy0w
dks5QHVQcCEKelMtLTN6PFhaZTxEK1RkbCUmJFdxcyk/cWJGNWhJbEdvQ04mPkUocyZQRTEwJnQ9
P0V0O2VfeGF5V1VOPV9OeXxOCnpienk+aGpoTGgpVm5MXmMrTTc3aiN8PyR7VGpWO29hQnxaeThn
UEMxPDkwSG17ayZXanYqSz1pWlNBJHhWOzR4OQp6LUQ+M3RlOFZGdTNTPnspNyYzanZJY3NQT0Ey
KFd3ZWNaYDcpM3RXaCl3O0Y3ZSQwYDA+eUh0YElpZld2TE1ERVMKeiEmRHdpUz5mQmloT3F8YTxL
dWZvVm4pQGlpemZCPD51VlVFK0wrNDRLbzRPfTVSfkEhYVp+UiooOGZ6WjdOSF5aCnooZih6Q1pB
OGxDV193RldIKH5IOG4jb053T3NnYXs8WUJLaypZRWZTaTlTTGdubzFXcHJndHRHV3I9b19zcExo
Swp6RCZieEQ7bzcpPDdEYlVzRj5ndSpHfnYqKkZBT3B1NU19ZUk0NzxFIWhQbXd+R3VVP3Yjb2Ba
ZWRKQCpaJGdUT3MKempBdmtGeGtWe1dUJTJ0ZUN3ej0oVEQpdTdYTFYjPzBJUzk0I1E5WmpVSDl0
YWI5Vz9lTXg9YEIzITtRS0FLM1h7CnpYbnJDTGpwKmhQXyZRSEB2SDl7fEQ0R1ppb3dpSkJBN0th
I2RLWS1+ajhOcHw+NkJZWD45PEtkRllmVEItO2NDUgp6Jit6fVRxbCNSMUlmZT9ndDNeRG5JcXIt
VEcqfWhpbDV9fjJAT28/d1JzdG8qNnJ9RGE3TGpHbiZ1Y2E0PF9YPWAKej9EfFk4UmtKeVY2ayYo
eExiR25pdnd9aWNZXiY9IXFHazJJPD1LNVQ5NFgyYWx8djtMSSRCaUczeTlBWjVCdmh6CnpNdmVU
WEpjRkhkTkU3SjdFUCVpVlAwPC13QE9vX1lWeFFsTSk2JndHTVA1SFZBP0prSzxFPE9BaXBNfVZA
ZHlZawp6Q14zTCtHKkVMM2khYTdwdXdfTWUpODhfYnt5eVU1aH5DcUlPNWUzR09id1p7ZThQfClO
S1dBSXs0JnZGRSRiOz4KejtzR3lVPDwjViNgYndPTFJDcjJPan0lV3RNSH1ndF9vIVcxeTY7dXhX
bEdwJXZqd1Qmdj1aSntTczh1O08tV1khCnpPJSp4bE9faHFAJmxSK3Vzcm5FbF4hbn1aNihFczVa
SWJPemR4S3hPcU47UXNSPjQ4N0gkZi14UU4kR3xVRW5FNwp6ZEUycTVRe2R3eFJEQTNxdjsxSFIq
ZiE5PWNqcmxFIzRoNz52e2hWbXJqeyMlaihYK0ZtSiM7dCYyQUoxSTFXQHMKejZlc3MlWS1obGRt
dCVCPChMfX5NJWMwXnhHQFpAWSFWb144Pn1vNHJTeiVnUEF7IWtnWmpjX2lEVipeJWwxNylXCnpX
MXhsOFFfVjNfP198RCt2cDJJREpvVVJKOVhNIXllI2JHU0NJOGhScWRZOVFrVz1KcGZUVSY8PHo2
dCNiJi14Rwp6UDhLJGNaWik2YSoleX5PI31na2w0KVh4T3lhcHxLa3Q1QlVOa2hUUnJPQlIjdCZi
c05EXzhLfHhwfVlPRC1HVGQKel4zYyFffEx2UVRzUVhxN2ZiUkF6cT92XzchVkFRakNHTlcwP0J3
fU1eOFNIanNXTn5zSmpZRU9SPHU4cE0jViUjCnopbVJANVBuKTAyZU9uaDRRU3A0cng9ZEAxKlEw
SzlnVkFPIU0oX0Q5NGNwQkJofWpubW9oVlJIRHhTSyR5c1lJPQp6VytuU29Te25DJXkrNWV2ME8j
ajNFRyNZfTVBSF4tMz4yYVJPR1pCcSV6dVRxQmM0dD15b1Ayfi0oMkEwNHYmdFcKemhZPCNiQkZF
VyFKNCpVPkN1Yz1fVDEmN20jaXNJKlY8NURuXyp5U1NgbjVvS08+NV84WHJoTz1Haj8mJmtYakA7
Cno4UDhFQ2t8e3A3YnszPHdkJSU2MVluJmQrMCZiNEIrajl9fEJpVnV6R3QyNzIkIWshbGQqVVpG
dzBMSyNCSGA+YAp6elNzTyFyVStIPlQqN3hXVFVSY3Y7VDF0d0E9UW5RMUw8VyhmPFkkJXQ4SmdI
X2l0QSVkNm81YTJPfCFlOGZEZjEKenslO2k+ZVBqME1BTmNASktDUExLOyEkajVDNzB8JmFUbTkh
IVJ+Y2JPYDVTWVg9ej9QT0dTRDA9WlgtdyV9UGQ3Cnp0O2Zyczh2YF90R3R+SGFRX2BAal53dSZY
cHphXjlaYEx4N2ZvRX4xQG9tVTEmO3lyNlQjXkI4d3spRy1uUT5IZAp6MX50b2soRi11QmVINUBH
QFFrTkVfdGFDQ0gxWFF4OFohTj9xQDFWZ2lMPj1oRmwtMlpFY2E8byFLNHFRZ3Zqe0AKejJaIU5P
dW8hPzBBaUFYITxvSXFndUg0Smk3XzlkZXNZVSh6aEojNkojWVhGemc0c0BYPCN0KD95cVEhKTBN
P2czCnpLYUtGWEVYXiVhWEVtbDQpUUFsUitfK2Q1aVZaR3hpJGZENnFQZ08zSWVHWWhpPn5wIzc8
dilEK35RcW5Hc0Z8Iwp6bVF6P1FBTDBCZm84ZTFSZWJDRUgkeVF5SVJMJE15KFohVyhLX29PdU5s
N19lWSM7PXxqSUkhYkxBJGJ0RHthfHUKemE2cDJpcHQ4TUhxPHZaYz0rV1pkKEdlMzMhR1J1bz1l
aGZTOWtTSHorQDVWN0Y0VjsoQl8kMzBZWFkrMkV3QWxsCnp5WD1VcUtHOVdgZGNQQGVpb0F7ZEVI
MFM0RSpUO2VBYShqbCpTZUBRNXooe3lRXylnJEN3Xjw3eilDWGhTfDhCcAp6WH00Ynw9NXRKYCVF
XyUreTBHTHY8VjAheEwlSXt7VjJXVHFaaHt2LTk7ZEhiP1M8dE1BTU8/Wi1BbVFnKWkqUz4Kencz
VV5UP2RjSn03JCl7VVNzQSYjeWB7RDtRVlhuVlhqcEZnKXljM2khNzQxc3JfOG54cCRyV1J2UD17
WWJFaiEwCnpGek1OIV5FKSpCdyFPXyVAM2dHKXc8YTk3ISNCZDBiKVp3NGUkb1RjMmFYeHpePnY9
dXpJKU1eO0dGWT5DTXYwPQp6S3goTWBGKUwpI2s0fUBWXjwkSHYwMlBoSG0+clVjTkw4Vz8peDRC
Wk59VXdHOCl3WWkjJVcmdj81cD0+MD50byQKemYoRS1ENTJSYF9uT0EjJSMxa1k2OW83Zks9PyM4
KXlxMmpvRGxZfClJMU9EMXdlSWdjS1o2Jk1qNjxvbmA7Yzs4CnpJbHo+SDA/RXdWKGZKaEM9R1l4
YT98bzxiZDZwd0JoRW8zaXtjQT9+QCFnVUpQflpYTVIoNHw5dyFkQ3c8K0pCIQp6bm5oeGNHT3w2
RmlrNmolI352NyNIVGBGO2hTJFUtQCFZPWdvPEAmN05uRlF8e2R5WGM9Rm9tWXkxPTQleVN1OEkK
em12fEU2UihDeV5wKG4tJFdwK0VQK3dQZWZ0UCFhczRDdXx9UX1ncSZSdEFuTXQqO2pBKj4+RGgm
OzNMKEZ0QT5QCnolbC1QcUxXYXxubGFyJk9yWTg4KEtjJmRkbEp9SyFgYHltYT85b3pfMmFTWShE
eS14QU59SyY5bSNYbj0oXjl3MQp6Z1ZtdiRUIyprKVNxR0ZmTzlAKEJSYz1HR1lZcDhYcEtxcVhw
eEpWdkIxXjZMMnFMNCt2eHZJTk48fHdWN047WHgKeit2ZURWP3NRSGckX2BnPlp0I0l4UjhiTDsl
YVhkKTlAJT1Scz9CNnFOeERkMlckdHdLaGspcTgjVEViQ213a18/CnpybHdneEEwPCFZYm9DR1hm
Vn1+fnd7WFFuKT0+aSpvSHgySkBnTztSNDR7bVFsb1UoZWNYKmRxPEV4OVp3UVZeWgp6dUhKYHVS
citGZkZoOyRBYFJPVjtyfj9NSTgyVSpaPi1CWiE/UW00M0BfY2ZKTVVgPSlhMEZ2cEdOWFZ7ViEw
aWIKej5TcnN2U1lPNW9PfG5mRXNYSFpOI2x7NDViKT5FbU5Zen08MDd+NGpQcVNFJWFqME57UW15
SGRaOTlJbT0+TiE4CnpgNndEekRHaSUkdUc8KD8qMjB1fUdEUkcpRyZzKGFAcFplWWtxYk9PKTZq
SEs3ZnRmJHB8VzJFWi1qNC1Vek1JWgp6UjIod3FhT1M2NEFRQD5qeEBhMSgmTiNFazszPjx3VWht
SVcrPkNQPyhNbj5pKG9iQXpYVH1zbSlpTTJ+NXViXjAKeldOTEJOZTwlc2xBZURuWklAeGxIN0w9
MHdCZldqbnUjcmx1YH0+TW94Z3RCcDJzMU9ZUC1OQmxqJTN2WXc0JUx3Cno5cnJxKHBraWRQZjgx
d0orMXh4NzVCI0F1Q04qfDNDT0gleGcxR1UhVG5VKDtUWTI4YFkxXmF+MD1LIVl1TlJeRQp6Zj8t
XmNVVEBtJmJzbkdQdDJmUyM+OzVGTT11Yn5pOz9HK3RmayhOfHZHJFBlYSE/REFqQkVTaFRINiFo
dE5IZnEKejMxRFc0YSpFcz1Wbi08VTB5bHM4UWp3ZishbUBKfk13NDtFYjZCdmhaVmhFckIyc0pe
VSVSSStobF8+V3olRWJiCnpSNmkrd2FzSnZLN1FBSG1OfWNUPDZWcSoodDU5MmkpKkNUPSsyXkNH
clVzajM0VjdVYU8jKXpFQUZzRjUyanhFSgp6Z3NBYXY2Kzd2WDwhWUVNKjFGNkNkQntFe01pYChS
T1prN3JKYjR0UHphMWVRcl5EUzh5MzgxJUopcTk3RHRrQ2IKempmREhyMiloRGdnPz9sa25IX0dt
UTllXnYmR0ZubGdzM3JRZT9YTnt4fUsmZmlqZHkobXctQiZqRisrJXZZLXI+Cno+djwpRSVVdCln
cXRjcENocVV9ZUFKN2lsdEhMZTF3a1BPMGxTWUt+KD83TkBUZXVvVVNUXkxJck14blJfTX5Xewp6
YUMoXi04PW89O2swP2hjPz5yLUx8SFo5a2oofVlYbEFkS2drU2stZCE0a0o7dDhrKzx5Tk5XNTRJ
fSM/UkNtVk0KekVwSC1AZ250d3pmQyM/NzMpUyl9bkl8dk5RUip+UlBqXzRfR1VOPGpteFpZJkpI
N3VjeWxgJUBFemQoZFJQNzROCno1TmNoPVokMCpeY3Rha1NaJTF7NFRvVFY3bztiTyQ5KCZQaUQ3
Yzg0WiVqVDsrMGd8Kng+WX0xUGMpZyFuaVVfYwp6Sm5hQEZ0YExZJTV+PE5aeVQmaUEhUTt0Y2BX
KmNNJGZjcUVkVlh5M3o0JFFvJHxiWTRqbV9Rak9eNW8pSThTTDQKeiRBXnhKMzU4U0ZXbkhLOT5l
RjV+OGwqTykzR2BIYkx4WkRMYkZqRTZOYHdwYkopc1l6ZnJlanZXO3Z5JV5EWX5ICnoxNjNuRnlf
QDZaPztQSVg3NWopMCN7UkdMMk4qOFQpaTYyYGdOPDErNTU0PVdhMD8lTTdGeE4qTTErQ0RYPkNL
WAp6PVF7RGVyPVErX1IlcDY4az9jOGVYXlUqeVF2d0hWRm8/SG92fXIyQHdeP1Z2e3BSWGJBKHsq
ezFhSCMlQEElWWYKejdfTWJDVXI4eW5YS3pKJGUqSjl8Szg2WEx1b0pzSTdhPHBHekl8e0JVVkx3
JnxNckNAVzExWVJ5aUdATGA3Xy1QCnpeSCZaS2RsaW9YUT98UzcjZnhrMlZOJlhzPXg+LX4pdWM0
N1VIPWlodj9IIzReej9wI2w+UWApY0hrNz83ZlRqWgp6d1lPVS0zak0yPE1fSntQd0VkMC1yb3s4
TmpvaHxFXypnSDE+d1lVJWdxI3FeRyt4LV9CMEYlfm4yO20pIXdtVVAKeihUKUt7USE9UHFSVmZw
Pj91WXg5YWdifGp8RF4+K2dQfD4zPVElS2FJWG44akFrXj04TmdTRytSa0N3Mkd4SldVCnppfm9S
ajRHOCY/biFMU2pse35uR259KD8+MyomY1FaYip5XmQ0QFkpKz5MWF9vbGxlMSV5Wj1hKFJMK2BU
e3wkagp6YCFAeV9AaXtpXnRmUkYtaVVKQk1RLSEpXj9vZTc2fE1mNVItdz1+YiFKRDl5PyZHfktl
bXBAdXszQD5sVUYxc2kKemlpJkR1STFeaGBPaVQlKThLMDB+NFkjJV9uWCU4bntpXndIJihuWVU8
Uilvaz1rITVVVypzbVJSaG52TUFYJk5HCnpKVmVDclBEbCVSbzNUVCZyX3gmKSppS0hnX0slengl
anlTdHh+Y252cz9obVMlZ09waCQzP0puQXBCdkBiQTtoYgp6Pnt8ZCoxNTA+JXF5czslRyZDT1Iy
d2p7WSkoQ0dPO1prRUVQblZ8T009WURldSllb2NLZXAtO1dIcHU9bVUkWnQKekB8bSlKOGpfRyg/
ZE5lVD9haUZsdlBeKnlvZ1QjOGlDRVNGUHclc0xyR24jb0dHN1klVXQ0Y1IpfTw+I09WSSshCnpl
NFJtP19kLSMtYD8hX25IUXg/Xl9yMmxgdDRhT21ANUdERWRqPDQ9TTJENDEkXzJRaTlWdjAlVXBJ
Ni1tNCNnQwp6PCtrN3NofUc+K3Fhe2pzWjhSWDNUfGdsWSNlSCsxcV93Oy1Jak9vMnpjdz9ITm49
SDdudzAqOHF9cEUqV1dgTXcKelFeTEgpNzw7KlQocFZgeEo7Xmk3JkNPJVkjPmQxfm8oMjJJT3hM
MSltZ1IqPkFWMD14NUxwaHNRMll3JURTbGwmCnpFI3NkUj93ZVBpakc8UTcmK2w+VyZpfGFaWTh8
aXZJPlFNaT1USk1adUNEJGM2JmpkKTh0YCNidWYwM190OTw+Iwp6bGliMXJZWVNJZ2smKiVJdUk0
JVRJSlM+OXRCODtpLTVMYXkkUWBrYW1kJF5pbEVGTSpBN3JGX0Qtd1dWQCYwZVYKemBRUUhqMDx2
Z0FkVFUzPXw2TCNVRzxHMXsmZCR6cW5OaHRlJVpBYyVgdlZKN0tmWFVmcXExO3hiS0JjclN1dUgr
CnpXNVNmSnF7UyopPipHbTtyTFE+ZT1zd0cyIzE9VjVad2NTIURjfEkyT0omVUE8YHFHUiF3JT1a
bHNnPFNtcXdLbgp6VkBKQyNDYiNhLThmN0ItVlNmQWM5UnBgQSRMSz9lPHFtUnFJaExKYzZ8SDt0
IV4weklOS3JkPklwRXJMWWs9NSYKej97ZTBifEd3b2VAUntfMHNZP0B4KUc0PiF7Wno0KjZheGl2
QklsPFo2JSZZZUE2fSFsQnFpd3VoSXZTMzd2OGpXCnojOXF8VWxnYHkpektUc1l7UnZVR0hLeGEy
djh7ZDBVeWxreSVnK2E+dktGJHFGOFJPdCtYa307dTghQ3ZiQ1p4fgp6QWBGJXE5dHBTVj9xIU47
aCFlPGg2ZFFrSk5ITklpNUVjPTZGWGtzMUdJQ0EoPkJ0N3YhMUR0UkVCMD5gXktXNl4KekZ9OyhB
U2xiZ0w2MTg9QXJxeHZBKWZmVlBCPGxuP1chRllvJExsbFZtekxCd1F2Uyg4T1o5Tzw1NyRVPkI8
SUtwCnpzZzRDa14tRyUpS0hRdVg4P3cwXy10cWJWJTYxJnhvUEBqXyVgcXNfe2NBaihsdm9hckxK
ST5fMVJYaDAraUZsTwp6KjR3JGJDfTQlWFZYNm9qYWl+UD5TNzZ+Mlk4ZT1xeVpkRW9pO3UxKzUl
WHFuUDFJTWVKI1A9RGd5MlIxZzhjcFcKems0SHlHXl5oWDI+KDFlOz4lKFBibXcqNyE/SSFrSTwk
QVN5d0stKzQjZHs8YHZwI09VUTJWSCRGbGYjRFElV2s+Cnorc29fZk0+K005X29DQkphbGQyX18k
VWdHbXs1UkVsZDxJWkR5KDYtLVUlJD45VERfRUBKNTN5P3hvNjw8Q1cxWQp6LUh7VkVHbmVYQVgx
c0A4Rm18cThAK2lncjRubHJDPUI8JUNQYXVsUUo0Rzc9KjImJTROcz8rWVFjYSRsIU8xKHQKensx
VTxWRFdiQDJyPD1fNWA4O0RAbXstUXNNYCtRPDV2cEB1UDx+TEJJc19SckUtXnpvNEpGIUtKeS1t
dDkrNUp5CnpEc0pCe1F8cTE7TXNaMWE4JmotNWhVNU54VWhMUzhhdFg9cU0hVHVHeSZLRGE7Ti0h
eFBiZStKNGxDM3lOQj5sQAp6ck59QHU/TkNmdHoyYVR9YXQ2b095UjliKGspbCFGY3w3dm48Y20l
MjZaemZHJlQ4flRpU3dmPVJzQi05cFBJRlIKeiNORUlxYmpLeT1CRWRHMWAzTHBYZGtsVThYSHB1
dkZGOWlDe1NySzBmNF9qSHEtfVRhbUFmTzJ4Ynp2Kih+X2wxCno3aUtQZzg3YClkPkFqK0krPGRm
KiRFMUBTVH1OQV9xfSt3OEJRRGpBdlVTVUo0Tk1GejlVbUZyWkJ2UX5JZDNpOQp6QHNFajFEVUBt
VVUpPEp7Pzk1K1BPNG8wPzk/cmYwKClDKEdMSU5yNE1+c2ZESDgoZiF6TV4/YzZQTHU2ITNHeFQK
enNXdHpPZ0ZZdUQzaVB2JStPdFRxWCFgNTRURHltYXdOQzRJKyhiJCFkQXBZTF5uXndxK3hQMVk1
Sj4wMCVVfXwrCnpUcW9Ea29ZenUzKEpyT3I8MEF3RDxzZkhaQV5jTn4pOHJtTUUtdm1aOFZkNFdL
TmZNQD0+NG50YiRmZXo9PWNIMgp6dXBke0R7NjY/JGBmQG5lJWUmcVVJZnBQRjlfRmlwZ2Y+KDdC
RCNxZTdEeClHbmdyXjZLYT81d15XKnU4RT54PGQKeiVzM3tyazl6TXxAOTRXRTZ6WlN4ZTMkYklI
KUI9djtRe2ltZTVsZWNHLWhXJnI7TGlWJVRpcCszWGN7RXpPKypWCnppXnBEeUJVPyVOaVY4X0hI
KiQ2VXFgZ1NKLSFiR19PdjlPd15Uc2pma0BDbjJ5WX4zZXtpNU5ra3hebFJtZCZqewp6ZWNUdSFw
OWMmU0BrRDsjdVI1bmlzKSVqe3dlJEwtQlhSYCN4QlhNWDNBK3M/VHVWX2trTHxeRFRQUm5qY1Z9
N0cKek8pJDwzZCtRbF9qUW09Jmd2Umk4PEgwRG0+dD55elVVZW4mdEJaOEszfSFtdHQtJlZLNUxp
SGNAUEA/cU4+QV4yCnpZNHV7Kz0+aGxhRWpHRip4VSVeOW9Zcz0oKUhsdyZDRlJhWVQ4TVU/JCtL
cU92YGsmPT9hZ2pnaHEyMWJJczJBZgp6VTMlelBPUTl+PHs2d2VpRXk7V1M1b3RFMTVgRlctQ0h8
cHBebSlUJVQmO2BOPVVHWHgtejs7NmspKzhHX18wfmoKejxWeVo0JT1YU0B0YGVuVlJVUFNWb3Zn
SW9KX1JGWiFuKWFhZWIoT2lxVzJ+eDhabDUyOSRwek1AQVRMaW8kOU9SCnpVX1o3clFSVns9UkJL
QHhsZlQ7a0xmb0RvQDM+dS1ue2B5d1JveWIrWmF2P0dzYDlIUWlxJiVaYEJqXm5NWFA5fAp6aXhY
KHBPTnpsM2NfRT1xTyRQUE8lY0R7RilLT1V1XzNyWG9nWWIpTyl2M3FEbDlFQiNaUXU/PSRMaVNG
TmteX3EKentzMzQpQDNTRWE5LTN3ZTZGKjg4UUR9NUl3KlRWZElNSFEyJWlmVj1nLXkhPXxLRXR2
KFU/d3A1KUVGfkt+IX4jCnpHZkd6Wnc8T3owcklgTns3XiVvRjNjNUsmRzt8ITUxK0tATFpWZmtp
Rz9wdGZXP0d0PXoxQyhXZHA2P0FwbDt3ZQp6czc5Wnd7O0x+Tz12VkdwNnV+WWZAOGQoVE89K2gw
VD53K0g2S3ZGU3laJlh3IX1KI0VmOFh6aCsmbWFPNzkmMHwKenY7cTZRJnAqfl4zdHNDVlF4b0Vp
b1FTeEI3QnlITVVsUj1vdXhoQjE3Uzske3spKDwlellqWHlPKnd0XnNDMitKCnp7dXlhWjkoKi1K
cSU9S2I7YjRSa3NwNDtMOT9hMHVTVVc2NmZhXmEwbDlebFdlMy1rKVZCe3FocmZsISNkISFYNwp6
a1A0S1NNQjEmYnRlSmVPRE0mfmFCM1dIb2Q1WGBfWVk+ezVmKyNAd0IhRjA7Xk1qNio8RnJ9WmQj
QWF3X0Z2aXkKekJ+VnlCPU5yXyE0NSEzb3ttZFN5Tn1ZfUlheFQ9NTwhakpxcVdwY2o4T3tEdlNp
cz1sPStYbXJnS3ZHS2I2Wks2CnphI2xfYlFiUXEpbUQyenc0TyR8XyN2ZnEtYUN3VF9UU2NANnJ6
SihDYnlJfSVnNHx4OSRaXyF3cz1kRW4wKWQxJAp6MTc3c19FVihLNF5UZkwje3E4b1ROQmVMWmcm
I2dWSGdkS3MqM21PQ3ohUSFaUFNhPmpVJXo/VWlBS21IOytGKTAKekZuT3ZmemBWI2EoJGszeUVl
X0gtVUhxPStaQzNwclpfaXZ6Pl5NVzdVP0g/MSppXiExVjQkUHBwK2lBSWZvenZxCnpEM21AUjYm
RFZETU1xY0Uodmxzaj96U15jUzxwa0NDaUJJeUs0IWRqJGFQI1l3fVAwbEwtPWhTaDtaYT05QWFU
NQp6QWo+I0VuamVuWWJoOHFgbWl9KmVjbztBfkdiNWpgVlA8WH5YMzBDS0R6cXtuYWtKREQ4SCpp
ZG9GVHtZKFokRWQKenZfI3V+NEVhcVZXTSR3e0M1NV4qeHw3UmNnLTIkLWtGcUV9ZUx6cHhSSXR2
KTVjK2w/dn0tSDB4QSRZTSlqZ0pyCnppP1FSfT9AJStUNz55Vl8jZGpuNEdBfUUkalBgRGlxRGFk
N3ZWR2RZT1Vza0wpOUZ7KkEjTihAUTx1LU9hbm5ORQp6U0dpJEttdUJveWFQJX5aRnE3fXtsXktw
Yz5vMXpiY1o+ZFlHSGtqMms1dyMrV3JlSjF6Kj9WTHpEbn5TcGg1SX0Kelh+MiprX2cpJjFESm0r
O0BKSWQqM2xZfW98SXIxQENnVyQqR3Y4S2liKDV1ISFkdnJBJTJNflZNKXhQOCFMdlJ5CnpWSWJ5
bVBsSGl8LTM2Vz1VQmRqbCZiVTt7eX1JQXA1P21AYWx9QSl2bTF8d2R4YEFzR2FfT2NjeyV8M0hW
RzRARQp6bT1VTnY3fkl8MVZDPUlYcDVvOFUmNHUhLUUraXxsPU0jbVEtbn4yd2N+cWVEeSpCczxq
eX59Rkt9IyNIUTNmXiEKejhDMDFEVCNVSDFLWklkRXFxOW1wVH40dD0qZ05TN0AkcDV7ZlpPNDE1
XmN8fVotPCt6SmJzRyR7Vn5DeExYUj8wCnowUGk8PE8tXz4zKVlSQyh0Pk1weWs5UVhwaGJJUlE8
RClyWlFvJFImdT5sfCRYZyQqVWhyS2J7KmFlKnVhfChVMwp6V15ocWsraC1kKzg8eGAyUVZ4I2Ml
e2hXe2MjPk1oXytrKE04U2IlfkYoRXJKKHJ4MX1uPU9JOGdKQHt4WXF1RSsKejM1Z0EqWHgyKzcz
fGR5dDI9bDleXz0qI0JjNzxhaURhNFk7bV8lY090YXlAe0t1VlhfXjQzaVVCRkdJSFY/bndJCnpO
UF98Q2xLdHtobSU7aTlwKSViMjsyYTNUOS1IbSprZSpxO21rQmRVciloK1FQdT1YV2FsOUxfXnlT
THhaOW1nVgp6RSQjcmpMYGUlKThWJmBodEkpcCMxME1BQHM7Ung2T3lFP3tHVVNTXlpGSC1TJUsp
YGtfYXF2blUjMkBiXklQY2oKemtiVz8lZThrSmtpfEFYVlFhYERfV05HOW8obyFwKEYrQXBeIzUw
TFBlanR2T0JhLTJtd1hkN3ItO2V1fkQhRS1ZCnppYWdhKmMxcXRQK31MbVRDQUdnOFRQam1zKjQ3
PzsyTVpsPGhsMEhvMFRXQ0Q+VjRPcXVOVWNeVDxTWX55ZjgoKQp6dHNfT3VgRmlefShIR1BLJGAh
PGs7V2AhbUl0VDVCdmFkQXJCTiVuZCk/MlEwITg4MlV7WktjRk1Faj1VO1NFTWYKemhOV3BPXmBK
Y3FWSHpqbjl0cjxUK2wkTjAhTkVhd0E1WlU1bW5HcipifGx+e2I4PUZXblBCWlFCaWFLMyhANWYh
Cnpse3ZVTXc8I3puPXEwQE5yPV8rbz94dyhTNVlsNmZIaHMha2JuZFc2dH43fTQtSDhIdmhoYklp
KDFrM0E4MHB1aQp6dUI+R0RJWms1VWZ3ZTZLbmB4bHM8cTJRJDFTejZVP0pFc2ZSZ1Y4JFg+M3VZ
WDtpY2kyPkw+JmpnZ1pTcUtPVD8KeigmKGRFU0J5dTdCe3FaIWtvZ3hSO30paUk/cGpveGRZaCFV
Y0pwdns3eCtKX000R1Z+eHE7X09IZig3KUtzSmBKCnpWJGB0RUp3SDA2eWk2Sk9mcm0wTVUhMHZF
WEl8Y1VMOTUld1I8UmBpSz05WHZqKW53ZytRYXdCeXFYYjwlZW9fXgp6ajBFKG9eTz53ZFAmSkUr
NV4zSWxCUjktJSpIPGdSQzxWUG9vcWZ6MT00MF9ZOW5oYHN7ZXUzTWJxUWwhTWV0NysKeikmNzkr
PVpsTTx0JkRhX0Bjdz9WLV4xZVN3TjVBTUhkfGpAYWB4NEpgIWBBcjNLP3haVTB1Mj5AZF9QOCtl
WFp+Cno2QF9CWjBpaVZ4ZTVJfH5idk1EKWVOJWVvMEB0T0JmdiEkfTZuMEMkRGx4SkYxUkh6amQh
OX1BeX00X2BZKiVxUQp6OH5samgrJkReXjJrMTRsRyQqd1ZuQWhlb2kmN1BnPmhXeTdEbF5XP2Bs
WmVCdEZWeHBkPXYzX1MkeHNpSX5SI3QKel4zbW1ZRUd+Jk9QbVVWcSlaUyRaOTZGfXs0VWRxUEsh
SWA1NkxjfmdmeUh7N3N3dUtxWikwdDNvdmBFSGJPOWAzCnpCKkcrNXBxRn1INj4/cz42KyUpOCNN
KXBBT05VbU9abGNnYW9XckpLbmBWakp5RU5lWExeUz1nSjdaRnlXblJaZwp6cDFBPXZLZj94KU8l
XyZaVzhKQG17MUhAdUwwYihMO3E+RjkwOHlvVGFFSCEmJm89OTxgKCpSb1Z3ZzE5QkBqfTUKenwz
fE5GQTkrU1doU1B7fkx0QXxhU14wcT1PemtnOUwyUSVfRkM/fGdxRHVIaHlie31zTn1RaSV4fXxC
d3h4eDN2CnpWN09QQWZiaDNwVyRzXlZAfFM3KiVua1RaSFE3P3BfTG8rX0ItPV83QD8lYUIlfCk/
T2gkaEdCK1VSdXxESytoPgp6aCQxZ09XNDRzRFUwY2poZlpYJFVYPj5OKTJta0VxKCVIOCVJRVR9
VzNoWWNeakJeS04tQj54c2piPi0jbjJfeSgKenRFfSZaYFcmUEZVPXxvX2w+VkQ5bENLd3RFYUAz
fXpQUiktSlc3YzFoJkhRQztXVTxDcmx0JjhhSTJWJihlOzZYCno9PmBQeHF6UERzJGZRZjYxYVRO
VnJ9em1HKFRHI31ifjZLQVo4aiFUPWxrRFA+KXJLN01TWXw9R1YwPmJ3fjJ8IQp6aiNpS15hX2Ju
KStVNShUe0VxKFJUa2JhajNISiQmYm5BdmBqNmMldFpZTSFWJj5tOEZhMVRLeTYlbExANipMYCkK
enckcTR2VHpeeF9IP1FoaFZfOGk4c3AtSUYoNGQpNzA4JUcwbkI+MzhUME1FXjwxT2FfJTg1OzBi
ckg/aSRmTHIkCno4fHB3cm47SlQkK1E8dmpUJSEkJmM3MTNZRVUrXnklYDhiSnNkdVc3fE5NMzU5
OTBKUj5SZy08a34lKkpXdm9Pawp6cSNrUHA0PWQoNXtmN0Y7aiNzIyhmXnBheEpvQmQpX0NTJUxZ
NEw1OSR2MHEzdTV5dUx1NGpCMSo0YT5zKkBwbFoKemQ7KW9zZF9jJEw+QTVtKCFlJVk9enckI2VB
QG59U2kxK0lQKzBeTDcmVz8/IUk/ZiFmV21QZlR7bCZBNUF6cU99CnpsVk5JUk16WEczTG44ITIk
MzJLSXJxVjlQMFZLWUU3JUM1VDx7Z2Q9e3RgZFZkZ0drUmZsZWlLVHYrek1UX3trRQp6d08zaz9f
VUwkUnRAJCZfNn1ZSntQJGdGRUg4WEZWeSlNZHMjfUlMamBEbnNIYUBwTEhhKHdEcW9UXkZ1NFRF
eWAKejtDc2ducm01ITB2bUNPNWM8bCtPX1M4RzJZTCpHRkB+ZWBRbFhHUTk+Y2VmMWI4SFg4K3hu
XkZHN0sqMmc3cmdRCnpWV2N1USM3ITtyZ203e0tKO0p4UzJnek1DeTszek5TNXtXNFE0ZHNhST5A
ZElua3QpJiVMUSZ2Tnl6aGM1aSFRRQp6REZKeiFUO2NrQkcpUW01WmYlfmMkWkJJd3ohKTBUdzBJ
TGl2PChLKylxR2ZIO0hIaSQ4JXktQmNVcDlFYSN8Uz8KelRLeUAyeDRERyReTiRLTyo+RURleG0j
MzdEdntCbEwrZ1VGejNiOCRfOEclODIzKEc0Mks+TzYte1JocEt5YCQ1Cno8bStnNmBMTjVJUXtn
ayloNn4wdWhHb3xFNEdsTCVRK3VnIXppcChuWkJGVEhBfjlDWTVwSyZMVlltQ0U9ITNtZwp6UXJA
YUdrZFRlM3slQXYoLTJVNT16PFV3bzZ5d2c/NnV8Ml81Z3JYYVh3SjlmRWVaV2dXRmVSYV5nfHde
ajAjSWwKej8oMzVtQU0rP29PKm0rO3E9PzBFemtvM0omQXhCdmUhKjZVRnhgQSVaJTZeclpnNSlF
bHtMZUlxfFVBWkNhRiglCnptYCNGQElzYCZ5YEJuSytINFBZZ2k1VmdjPXthbWUkM0tDNFBJcEZ4
JVR2VGRfQWhuVHNIWCN5RHl7NGopYGZJOAp6YT9ZbGp3Q0BBO15uXjt8bD5jJit7aiRUXm4/Sn1W
Pn1sTVdLbkMqRUlmaSY9bmMta35VQXNSUk16aFU8OFF4VjkKemJRKF9vSU9jPVFBdzBmRzZoQlhu
dEZ7X1NyJnRyZjVnKiR3YjlvWGREbFEmYDxFOD9jQFROQUZaWWZJITJZc157CnpvYDFMMDkzNXA1
dHM2NXhgTD05Nip7UWoydzFPfiFRVFVSWm9oTiU9PEk+KlllSnd4OHU2SjJ8cnZKWWY/d181Vgp6
KFF8UWRKUWczNjJndEFSI0Q3R1FGe2MhYkdBRHxhcWtRI2gxMWktWHJfVWNqcSZBZC1kJmNQRCRP
PDd6KnFydFkKekwkKTY4JkR3PGw0NGM4M2lqS310VVl6YkFjYH5KQmBYOGpQRkVhV3wqQlU5WEw8
I0VWMn14WisjOzF7SGUyWlpqCno5V3JQR3Ved0FuYUh0NFUrUHJuaW12MV8hPjhEQyU2TFhJNV8h
WlFONUpRU0BQbX1NSEtIflE2YG1JMV9fVnl7JQp6cT5fVWliNjVAUD5ndHh5e3VkUUwqRV98MUpT
LVBUVUV9clBqdTttb2I5aXB+dTg5TGx3S2huPEVeYFN3SU41PjIKejZLaih7d1k1YEEkUUVGRT9s
OVgtTGBiZ19qSHIhO3tCQ0dLVHMxOERLYll5Y2AxSTFfZHw/XjxZa2YzaCU8UHF+CnpBMjNAISlC
YkR4V09nS3ZmN25fX3wxWlY4MHJGaCRLMGglbD5BbmVlYXZ3I0hCJTxkYyEpYWlMbjUwd3VBTVY2
fAp6ITZWSTFRO1o+X2szQF4ja1hZZndaXmNARHd0SEVrRXY7U1ZQbXFnRXB2ITg0MWVSKjBzTX5R
dTNJKjVrS2wwXjwKekkkM0xuPkR3SiFqX1I5VV92OzlhZVd7UCEmYENtTXhOazJUWTIzRDJBSXoy
XjZ+ckpnM3ReOzhlaHglKSZ6P2FwCnpxc1NhWmdsKmZoJk0tKDBjdmJOSE9rOH0tUjckNDJSPGti
d1NaO0x1bVJmIXd3c019ezVaSCV8T05peUBzXjx1PQp6RTcjVX05blpPPyhTM3ZSc0c3RC0+WGtW
ZmZSdm0+eWJwSVZkLTY0JFo7cUVgKmRXT0tecjxZTmd5JV8keTV3Q3cKel5QbD4jdE5scy1CTStJ
RkZobVBrLXV2WVNedVIoZCRkUW58YklWUXxicUJSejAzKyhBWDtHajNxZkM9X21qfiN2CnozeV5M
cVgxcFlkQFE/VENhTm5uaHEmUCFHe184bU08dG11bj1MSkhCNmk7cThufnhYUktsSHBiO19OaE55
RG1lZgp6QnF6SztIe3VtbVBhI0pnQSFIQ1RFa2Z7VHQzV3omREBEKiN8TTw+UE5idUU0bn1scTVf
fm9WZHVVRGVycXhAOTQKejFhQFdNZTFwJSlOOz9aIV4xNjk/dmdDd3k/PHJ8S3V0ckE2bD1zclhQ
K0UxMCUzUE1WdmY8aTxiTGZ7byRMeEJPCnpYMlM3bTJqVT04V3JyNVk/K3I2M2UldE1sKEo1THJt
cHw9emUxPDwpd3pYfGFIeU0pKlVKSkB9eTtkZWZkPzVoVgp6SzhVKEg9K3I5NCtYaGU9O21pfkY3
YDBkSXRiMDBgRERhdzF6Tn1zRyUtNEFNJC1MaHhqZUxVT3xITmdFM1VrRkUKeit5aU1ZXllIVzZ6
OVlnNHVCZlFzQ0x4SGY8WiFAV0RGUU81K3ptOCZZJH1NNEpeZns8NloyWUQ7NXREP296bmhXCnpa
WmNiI25wST5NOXY9UUMtRDswOEZ+YGMqSHYqKTAoKHtTUllPJCtTNyVUclhCfSgmc2JZb3FjbWlT
WmU9OXdgVQp6NmlHRlo1SFhfMTk4SlNQX1Z3NkI2cTVSX3ljWlUzPGVDfW1oOyZtMjRxamdKRD1S
QzlFTntGM1VaYVA9Q0pUfXIKenozQjhySUYoc1Y8bC1UUWdJLUs8Myo3KiRFVm0qcChua054eWpR
V2lKTks+OUsoO1pycFg1V2JxLUFyM2lVdGtfCnpKP2xLazQ2JUoza2RAM0hyTWBVWWc/K1VRRDtm
Qkooc3JSKCZ9c0dWdE9ySSo3UFRYTGApR08yYm9lIVZlRS0tOwp6Tlo9bjZfMk5YK1NySyhAe3E/
bnZfPDg1JiNZNGxaPHRTJExIdGx4RSFQUk09Rl8qe2xxbzFnI3MzTFI5UHBKXkYKejhQNlBRcDgj
XktwfSNsTmpoeWVTSW1pUHRRcUwqNEgmWWhIJExeJD5UVXdxJGRnPldnRnZwITg+bShlMUAyazk1
CnokLW0xZ2FiTHlEKEQ5TGRjcC15Y2ZiSCoqPjA1TlQqOEo1X1FyVTtLKHkzV0hLc2kjQmArRip7
bjNOUmFHWUUkSAp6QFBPJUBBZVN6TFB2REcmVHZUZUJvQnYmMmt8QSVpekUmZGp4NFh5dHp1Rn1I
a1goRHVwPTVqN1R2ZHB3UmhvKj0KekJlXjdWVENeI0RWezAmbCUkfT00eFZGS0I/bldILVZfV3Rp
ZDBaYTBDOUIrUCU4aCpvZzQ1ZHFMZWU7U0I7bygpCno/KyFBX3YjKG9WcShrRCQxSCpnTWVsLTRW
OzFvWW5razJZQVRZbipnS2RucztxMmNGR0hHS0VEQXohclc9Rn1QKAp6cTMwTmFtY0d0bnY+O29q
K3MlWGoqbzE0ODN2Yn5iI0dPXy1ISEpCakpoTVpQZmkrfD4wTz0zemN7YWJfV2lVLUEKentjVkxg
RDNjJWIlZnxQQnI1O3BBNGRYajRsJH4pSypnb0h0QXYoPSQxazI0KUw4X0dAN0U9PyVwTD9RKzEm
PiR7CnpHdXdVRjU0SjZ5eSV9YVpQSWgpVD1qSkZPbnozUEZERXZxLSV4bTxnTllDQHIwfT91Tm9+
JCk8QmBLbl9TOzZweQp6bVFGSyhCP3BqSCRVNypWIzI5WDRgQk88KFJ+VFZLOWFIOXkjKHw5dWkq
Vnd4d2BycjNaYiRFYERCd0pDQjl8NikKekk7eEM7RDhtfSlBdzJQKTJHQFlCOEJWezVLViojZyFr
Ynpqb0w8OGtQZzBPVFZPOH1sTnlFK2NeYGAtZk1qa2c1CnpIbHsoIzxac2tNNzYjLUhpPUBrYV9P
YTJDaVRSbm57dl9mS0R9eFJ4S0U1TTkpeT5iJTxyeSR5IUYqe0IlUXpMNAp6RiZAIXNWeUlVWXM2
eHs1SEZ+UEBmRnBUYG89X0c+eGRTTnsjQF53K3dXR3lYR1g/SDY0QjgkNGI0e2VhMzw1ejQKejNQ
QEZkPiNGTFAtMUJfajZ5fmZ3T2pCYG5JUG8kISYraWtpN1FffVQpSz1WTU90VT5oJjlCOXZsKnhQ
TEhCa0I7CnpIOXZlc2FlPDViQmIoQGsjTVpgNDJKTngmO3phMztKPnwhc1VtZiFkal4yXmtnY0Rv
Sz10dm80Z1pCPyF1M0M3LQp6TVlfOFpBfD9PWjgkfl4yaCRLQ0tVRTVMYytLVl9iYG5fa0VyVW5Q
PmhxOUdoRHp4e0lxPlVFNC1pY1A4eX5eaE4KekBlYVhRNz5IMGRjbTt3WHBMRF5lNzk9OHd7c2dR
dEA0K0NhcGZHdyNqWl9AWkhsYXEyTCYmfkRoUS0+eyNteztiCnp6PTd3Mz5Ke0pJNVc5KHpUd3dx
RzUrNWZAbm53KXxhYF5QJWx5SmdHZChlWmVpJVlSS2BgSzJDSWBMYyQ9QmtjZgp6UFpkaU4xaDBC
MmoyTyF6cTUlRHUraFpTMTxrIU1LdVFsdVRrV1VIIW1fLSkza2FMIWg/ITc0KyhpIXtoNnIlPWIK
eitGP3N4Nl9jTk5FdjREQ2RQZyEwdFpENE0keDV7cmJsbWcoem1ucn5DNURqdllRRWt7RWE1WmFg
Zn5jdjFHYWtsCnp3TCh9ZXZsdHc+PTY+P3FQV1g8YXh0dnRKKlhAckVZRSYzRy1mUDs3JCR2UWlf
XlRLaGAxNnl2R2spdjdkJUdhawp6JG5PUllid0F4KFB9VTc3T2hwRTJVMGo1aVRHWVAydG0rKV5J
eHxCV2FQez9xe3M5NHx5Xm9kR0hQek1DJk15YEQKelpONWhTcD1lQWNjfTxwdTtvWmsxMXBtSFVz
V0RtYnkqfTFrcEteal5FRlNTQUd8Nm02YXQhRjVac1pla3h9OWEwCnpRQUxaejtKVmJqdnJzPVdJ
cTRxOSFiKnUoQTUpYTJUVz90QWV0fEA+bDYtc3hOSmxwV1JzOCNaNmBZNDcpYytzSAp6YjB7ayRK
QUNiSTg2biUqWFR9LVhuPT5RRjhRRXVzajYtQ2M/cmF4SV9GbWNKMiQ3al9NblpeYC17PCEpK2BU
e1YKel93KTY5SmZBTlBZYShvNWxnS34oJiV0e2lfUSpWb3Z9YjFzaFcoNHVRXy18KiZDfmBuKE5X
bFhwWEwteC10T2MyCnpYOH1rR1I4e1g7YyR+QShrPzc4Y1JhJnJPXkdlNiQ8ZkxnT2xuZTxMSjtL
Ky1QRUpoRlFRYW9MOVNkfjlNO0ZNPQp6RWk4Yn0le0skOXl2SmdsM1RyZ3MrIV58Yk5sQkVQWWQ7
KDM9fkFALXt8QihVWntOQUNHZD9sWD1CI28pYHtaTGQKel81MTk7TTd9QllkdiYwXm9jfXReMmhB
TVhEN3gwQ3gyc1M4e31OWX1DOFl6ITFiYl5Tcmp8ZWdIJjkrZVBWVHNTCnpkZEJ5eC13VGdXIVRJ
bm9HUyVKZDVCOytjSVpqaipgOXRwaHtoaEArTTsmV0p0YTkxQCl1aTtlWSk0eDNsPCpkSgp6NSVo
TnFtKipsQz5XeUhXQmJQSzBPMHVmOVllbVV8NHpAJVJ1NiUtYEt6WDlWI1YjNyFSY290S2FzR251
XjJXTHkKeipzaCNvKCZ+Y1ZCLW4tZGNgMiE4djNiPzFOZD8tQEReQWBvdmM0bHBVYXxWZlZUcHMj
TE5RUjJZTVA8M0ElUThrCnolb0U3ZWQhdzxXLSMqMUJ3OHk9a2J9Tm1kUUdudDd0NCZ0JChjPX49
OzhzO3k3cVlNZk1ubmFmR0YrcGBFKWJObAp6M1E+Q2oxbn5lUjFzaCNoU1NUWTlVX14/fnVQMWk7
ZlAxUyhiKz4hQk91NGpHanIqUntlbXV1bFpuZ0chM3NjQlAKemQxJV81MX4rXmJSbzJucitPI3VN
bElHdnRkfGtPT3hWRSRsd2ZScj57Z2p3JnI9WHg1MnpJOFF1V0BmYkxucDRqCnpVUDRQdDMlSDhv
eis1OStDJDB9bD0qMmZrPD43blp0KE8kT1k2bD1lS3BLYm00bUVBY2ZLPzVtNEF1WlU8dUAjcAp6
KkEla0hfKU1OUHIhT08pamRBT1JoKXFtPGNxX2o0MVJUJGhQd0spdW1XJWpsUSMoTiFfLWw4MSQh
N2tnbSFHfSgKej1GWV9RJThEODxVRWN8KjlRO2M5U1I/YU84dWZ3cT9KKEhBbkAoYiNaezBzSDdk
dX0qb0skPWYyUykyeXhiS3VYCno1MmJ5fTckNXM8Zlh4aU1DO21FPExRc1EhJD8rTFVybW9+ZXFm
JXF1cGRYbG5pKzdYKUlTX2heNUdwKW80Kn5Vagp6SmM2QlI5WD48PjNWPlhPQUhDUEo9c0ZOK2Vx
Ml5+X0g/JDlLR0JPeWMpWktjZHszO3Y+Q2M/fi0/QGUwJlFvQCoKekJBKk1mZ0c7WEJOJWk5Zkpx
ODxYJEUoTWc5bUBLOD5ZPlJSeCM9Yj11Q1NeWUBydm0kPzVkWlZ2NmxNLUx2dDRQCno8TlprVFk/
RjJEbWE5MSltVy03dytOVjh2X04hNW9vUjY7QXtQb0JQMngpPT5zSmh+JGp8OExhZS0pTUAwTW9R
Owp6UzhjM2ZWYHo8VmMyflMtV2haeilIR1Y7UCN6MCN7TTwjMSkxMW1gN25KMiVTLXlPdElDaWRB
KGB1M2VHPURvd1UKekZfJnlgVyU1KkQ7SjFWPW5uVSNASyQ0UGtFcCZ0aDN1X2FPLWRqdTAhdlZh
P3JXfkZKQE9jMn5SaFU8Y2g3SkoqCnpqTThaVjw+RTdMeUFyNFItKFFQWElKUzRUMj9QUWZzQVFQ
MmRIQ2ooIUdQMTF2e013eDVvc2p1PFp3UzReXkVfOAp6PnRMPEctI2RQIysyY0BnX0sqWE81KTxo
VW5MSnJDI1h7QmM7PlBsWUF3RVYlN2FwZShLK1pxTD9lYD03bHRZQ2UKeiQpSSFrZEg5T3tgbjg8
N2JYc2I+c1pnZGtKeHM0M0BRY1VCXnpsbmVkUDByWUAhb0ZoRGJwVWluaDMkSilyM3MzCnpIenBh
aHdDbyhFbDg9KXpHazIjUjBicyZyOSYwSHd2cEE+QU55cWcjQjA5PTdCWFAqaVg8e3VQTmlzMENy
UE1gUAp6b1JDSXdkanF+KyZVTmpERHEoP0Qkb28rNGNsXz5fM3B2NXV3VlpqVU9tdGhzWDNTS3Ep
Z3hjNlZNc2dkSjxgIXIKeiRBVCtSP1pfan1ZTFR4RSVHWU0mPlJZUEE+JHslYjRoP35MdiNjfXx3
aDx6c09URTF5d2NfKzJKJDhWSkRoVHVFCnp1aHAzcGFEJjk4Q0hISXh7ZFg4ZFRLQEQ8QnpJSkY/
YiMrOF96VE0+bjt4TTNndn1UVjMpTzR7S1FtU0ZfQSEkNgp6NVlzM25jUyN4cz4obDx+YVdiRH4h
SDRYRXZzZUVWVWQlXih2TzcqTnZJWHxfU0kkbGFSKiF5Y0E0TnB4JDFFSkUKeiVJWCEzenQrTmtX
TW5KUkV3SFJNdWRnPWlKKGVxalpDdzBlQThsQ0hrc0lebXh0eTFOblorK1h2THkrP20+U1ZXCnpG
KT1ZbzElPVZgIXpKSn4xdGYqcHl6fVB5LSFZfCtRM2BWVWt9SWsxXkIoJkxSTFdrK0JNM0k3X3pi
czMzaUA+UQp6SD1fRlc8byU+TGF3SmEpaSt+X3VjYjZMbEBqcVhYOysySDtyYGdJT0hBVjF6YmxI
ZD5sSXBQJSQobmBGS1hjWkYKej9KX2k0b3hHUEtqSmRYfTdWUVkkT1daS2AqKjJ+STFeQEorSnJs
P1hzZkE+MnEzQlRvTmVGNE1HJUZWXmd+PUJLCnpVfDl0fmBMaSpHPEVSQGE3RT0kX0wjfTJ3KXB6
MSRfdiVQK150bkNUKXBQUHkldFV9MUdFdWZLd3heOD1LJnhgbgp6QkdpWmdyRGpTKFM1KGV3O0RX
Pz9kNFJIYW8oZXlpZ34pVUI4a2VUaz1jTSlHbnJCQmlBa21JZHUjUjhXbmxwcmgKem8rYk9SS00l
dmdUQWQoR21VUlh7WXxZMENRNyQ3S0VtcCl6eWQ/SnApbSlrIVI8fEZ1SU10ZjVkcz9YalZKRVIl
CnpZaUlWPDJzR2kpKDRnVjFrZCp1a1FwflFLOyFUO0ZZVFZCfGR0PU4qY2RvZiZSbER1fDRpJWBt
aW90a3orfCtTKQp6SDI8cipuYmQhMDszcldDI2Zrb1lsSikwI2ZRa1c5RGo3Sy09JX1rP0NCNXdm
bkwwVUAkP0lqZDFpJDkhO2QrVSQKelY2XlBmUXJwR2c3N0NTTVZMZDBseGJvM0ZYTDFNLUl4SCtL
S3FCcGFgY1JBWDt7aHF7XmJMN0tPM3lse3UrS2BlCnpHaGU+TnsqVkpvY3xoUzJtI3laPFpwU0l1
NW85fUcyXjlqMEhWfnwyelN8bmp0Zk9vbiZwWEE3Z30obUsmYE5aagp6T1VBXng5NGJGR0d4Xips
Q2pTOHVlUDU0WnEpXzcoUEczSWtpOCFySm0jZ0h8KCYlcU9SKTQ1KHBGMGFsPXlsJVIKenkoREFw
VGxmPzdXbyROOClAaGNoeyMmXzs5eHJPel5GTk9RNHw2dzJfbWFxXmlIaGp1aW9sVGNvKnVRaERJ
SXI3Cno0Q0NaR2YtKSRZY2tYblBxelpOV0NaPUBnXmZMdWZZZythUnNjSiFCMFZeK297alRaNjZB
WTdaX0s2SkE4Pk8+Ywp6OHE2REtuYE5WRGltXkpNZn4jQDUmPnNEfG0mfVl8IzNNe2Zmcy1qamVe
UnRjWj5OQD9SfitgYU4zN1kjZUI3UkwKek5LJWRJWS1heH1XXjNlcVpxdkYxeT9oJGE9UGdeSUVt
bUtRO1p4c1RSPWU/MXM5QUdidVJyXypEWmYyJXM7RF5NCno3dnZyMWhLOStrOHtaUHE5KERIYDQx
SVlea1otQlUmd2M1VzQrKTRVamBtPSt0SUlHUzNqX0spbUd1JTAhb3Jybwp6ZHRAJjUhYXBFJHVs
dj9JTFVCclQ+bD40fW8lYj41QGhHO0cyPHlZO2pwYiNnc0VAcXhPO2JLMFRYKUdrUjB6JS0KemNh
ZWtkKGJ2MFZucVhyVkQrQn11cEI2UVZpNXM3Pzh0fFB6VzVoayZBRHx8elV0QmhDNDtFeVlXSSNr
NkpUZTMzCnorPzt+JGpYdjdkOX5gRXEyeUVuSXdkOS0hJFRCWGo/YXk2aXdnWUUpUDx8R1ROX1d9
PUo2JDh+Sk5iY0EqblV6Vwp6QEg9a090ZXdGcDdyJU1EbSlldFRXY20pVTxkfVUjYCpsSSs5QGdM
TktPfTBWdCVqdkNvM2x+Y1U/dz16WH41LTUKekJQcyh6VWleelRvKE9VO05hKz16VWold2hodGoq
Y0RaaHRNV1JxWmRqTl9iZFhDVUkxQSp0WCZ7XkZvWWRjRz8yCnpjajk/e3ROZUIwQDshQ1lQKik2
KGV8OCU3TzxiP0owQmZvKjVEdTZHYEh0ZzY/T0xVa0l5K3ZKMj1rTVM7JVhGTgp6YU1ITlNJcnB8
QHRTeHkoVFlEK1N7TjhzQUclcjRXbGZzU2hNSWJLLVA4OTROITF2bW1aSmR8fUM9Jkwqc0RrKFcK
enc0cCNzI3dzMHBDPXIhMEhyVFkqUz1CPG4mN0NPJVduMG1yVks5Mj96en5Tang2K2RKSWhhUE81
UT1aITh1cUU7Cno7UnBLaEhqTmBNKF8kJHxWd1NZRVJvYiM0dyQ/TlQ5Vm58PiMlVmJGQnomPGcq
b2Q4RXpDPXNuMH1IT0AlNSZMKwp6LVdDcmA8OTlocWZLO1NSUEVIUGFnOENWRyt4ZlktT201JGNa
XkJDcCFkUjEjazNVRjluOUlAI3J9cFJJJXF4ZFgKejQ3dWFlKiUkb0FtPV9ebkhJKkZTbm0wNzxa
PCV6Kyg5I0Ema011dmleOE1hWUZIIVYrTX1lZz9eZ3M0a2I8MWRuCnptJWtucnhWbH03OzIpLWFm
YTMrYD9JVmVTO2YzVTRIQnRvP2l0K35MPUVpYGoxRnB4JTc2IyFhd2NGZllPb15XXgp6ZS1fQi1W
UFFoaU1FZEhuO25aOTVtT1N0SmNpZFFuYV4oJn4jRDlXeGpuSW1WcGZsTldYe1NUd1VXcFchZ3A/
aUsKeigoZW5jQTcwci02MH5nfWskZ1g7SnlPPD9vLXdkQ04mb1RmISVpKVklRUBQMilzQHJzTzNF
ekxocSQoWFlpOSpLCnp7RyVXNHJvNns+dDNnVzJYZzVlcDdPbk9sUCR5VX5FN3AkTGplSD5VJWwp
Qj92NTUzaiE7dmw4UCMzIWY+YHRqTQp6R1VnKEhGdT9JMlZyVnIoZTFmKUlKNnROQ1V4NUJaI0dV
PDw0PmgrXnhfKVNwPWZFPkZsT243NGt3bmtlZHkkTX0KelZ2SCUlaTtLQEwhVyZ0Jmkkanl5S04q
eGV1MkNZTkUyaFdib0dFKiVvaDFnWkJmTT8+anpKK3NpVThuYDdhZXRaCnoreU9FMnFrKWg7eDMj
bmFVO2JyMkpZLUhxWFMlSUEhZUJgem05cV44RWpCQk15U3MxQ0A1SDwrUktuQX0pLW5qSwp6RiY0
MzVQdG05aVh3a3NoMzxmRjJwbnA9VDN0UmtCe0Z8ZGA2YjF5dUdlcWV0cCp+e1l3Xj8/NyptUH1I
KFlLYk4KenBFMDV4VVFaaG80NmBjP2ohbD42c2xZKjAjMERPZ2BKNWdzMlZkKDh5flFSMHQ1RGFe
UGFLY09MeG9ZYiVFZD4pCnpVWDVRPGZjSlVzRSZ1QSU0PzhvaE96NGJKRiorS3xCajwhaXR7ST11
THpZaStgOUl5PFQ0fSpFY1hTOThyK1hedgp6PjY2OSgtS0dSST1hO3JoRzk+aF85VmNJaktpVUVN
dXNDUTZsVWllezxnXkZ4blRKfiUjSHhyKS1LOHtPaWtqYWIKenQ7KklyQ0ZyfHhlYHZgM1orOTs+
U3Q3ZFh2RFJucnJAOyUjWUtvWmtpKEc8Q0hGR0Nkak1vT24mRW9mbiQoejdBCnotOGk8N2tCXiQt
Xz5iOT1JSD4pJW1xbyZZcn4ja3UpbFBeOCYpSys0cHFrYDhYOVIrSTNGaStCck4oWSMzdiZueQp6
bFFNM2YkZUh+cU1VZE5aank1YStOVyshMCo7cnQ5WDVHaVNYKyFDUnRrWj9BKz4rTjs9cVZNKyFx
Z1k3JEEkY1AKenFiKVJJVnhKSnY0VTEjbkdJVn49cGBSeEw2N0F+aE49SmhtayY7NDdycko8RGYh
YFo4U0sqfjR0QXBZQmktNHtuCnpQeSghZzNmMHRMQ1YmeWNJbHRgeEt+KF9WU3A1PWN2SDlVVTxX
SnFkUyR8bHhCT3hvUjk9WGExN1c3YHlubUBhSgp6ZTZaIT5tdGg9Km9mQkRpaHw8UjtgZyZ4MG4p
Uz43NDZtZVRTVz1oTHJ8UlFuKGAmZXlnMk5afFlQR1Qmcnl1RXUKenIjM1o8KVZkJX1EJDZ+TF8+
KGw+MXFRKm5QKikhRTEtQWEpZjI4KSRLPX5eZENzdGlyd2M4fkpnNHtgeENLUz95Cno9X2QjN0E+
NU4ybzlQbEs2VHdnMG8pYDZRKCE2N2wkTjg+Pm97LXZjUE1TNFBLZGRsKUR7Uih1MDJqNypfY3R4
LQp6WkRnM0t5fTd5NlRhJWt3QkhFJUduX3dAdUIyczc0SCZoMXh6KVRiUUV0OE93NFEkSiRMRUcp
cHIoRENMVUxGJDYKejJRdiQ9cWdGVWxRIzw2VktUc0R7YkgjbmhYTnF7cj1XdGoySENSTCM4XlEx
TXI9OTw7MGpmJHBmeGB7PHIyOT8xCnpwaUp0b25KK25PSyFXMzRlZDFheF48e1hAQ0RKdUg9eW01
MCF8aHklek0qU0E8K1Y/b2VeM1lRPVRrKT5hdTJreAp6Sil7QjRGRUU5Uko1eSl2XmlRUTZeJkZQ
M0F6eTEpbiY5VSpIMChBIT4kIWxkaDZlfFIte05Xfnc2eHBAJUkoY2sKemo0NkAqTTtHWilQQyFB
XnI+YCVMK3Aqbn1aN1czSVgjOEhQUi0pR2FaXkxwNG4wWTAxRkUwJHduPitlVk48fkZ3CnpOcmQ2
TzY1dHZmdjIoQ35FeikocjVuLWNsYDFueW5nIU5ye1RSSyFlKSVCN2I4SXZ1dldscU9VMy14KG1p
JSYkVgp6R3EpTzZuKCVRQFhOXyl1QG1jdTdtWHl+MlArQzdTRHY+YjZMXmtKZHxMSEYxPEx2P0A9
PVNZfHluO2VFZkIkLXAKejspRmlsRVp1a0opcWtJVGBOUzBFWFNhQUt3NmRNRSpwezJhTl42TGl6
fVclSHNNOEFRRk9rZFQ0WkVVTyM7YmJtCnpjYVBVX0JtMGsrbkduJGokP2VlRSZxX1RkQHQoKyNX
VmNgfFgpd0R7T3lLKFdYVX1hR0kkMSE8JXpNI1JFaEJgVAp6VndYKT82VDJRdHMwYWk5Z3BwMFlM
aWkhTlJgekl+ZTBLYFpwQUBHUVppVT1KWVZzUm0tc0hWPzNmdnJJXnhNKFgKek18Tn5tVigwfUoq
JVU0PWNGfHA5T2pYU3w0UUFjNFR3ZGVgJCVDc1VHOTsrPj5VcGkzUjk3OGpoNUJod3VMI2ElCnpA
cV5VRmNmTVEqVSt9VzxXQ1Qwa0ppRzBUYmdCay1IMCVwYDUlNGhxQSphIVhwVSlWSGlxcU5aSHNs
dDFJRWo2SAp6PFE3RyRmdSMmcns1aDFeODQxNHJAUSZudD5wLT9ZO155WSZveSpoSFQjfDM3JTI3
QChFPEQ0N1p3V0lxLTB8b3YKemVnMWwlMWkmT0hEPVNZTFp+YGptQChPTGhQX0k2SUNTKkdlb3E7
UjhDdFIoJU5mUEZuPDBDI3gtPF9+JEUoZU4qCnpfQCM4O0pkYWt4ZFBAKC16ZTw5RFpNSDcmIXBC
Tk1OMFlGcHpQZTlWTipqfUNVczM/X1gxQVdwRTZWcGFgeW9UKwp6aXtScUxsaStzbEo8MkB6Xzkw
PVk3IWZuRDx0bVE+dF53TmdBJDdCKmV8fmNpKlkrb19VI05vZmslXjY4eD1pWU8Kei1mK2BacTd+
V0tUaEQ/QShZczZaK3QzTjtBSUMkd3A5VGBgVXE8eSNtc2dzTktvdWBSOyFgSXNYQWdHblVuJnUr
CnpfaXo7KFN4YmY3XnRTdThZO2J2PVh+M0hRNkVwMVQ2JHVPbSVVZTdnYFAjdH10flNkK3RsTUJO
Q3s5bS15ZEh0JQp6UzB+JlohNzlFOWpJVFVwODl9amo0cEw0NGd9eFl7ckU4ITwmX3lMVk1jPGtB
KDEtKCZIS0tNVXl9Z15gKFYxUTYKenYoV2BndW5zcHErdWtGfUk7LVVNcyN8WTl6Xis8SDxGNGY/
TTtUNXUpZGFyazR2PVJLeEJlRE0qcVFoYEhpbSZUCnpqdURJbSskKD5aPFA3Pz0xKz5gTXVEeWk2
M2Q1UzlaTiMjcXNXN3pKdjElaEkzaFM/NXBHJmV4Jkl5SWdeS0ZKcQp6T2drTn4+KD8pQWtiWjQ+
O1NMT2FlZ0dRbDA2dyg3QiNvR0duYkQtM1Z4R2t1VVhCIzBzbnpze2VDYHUoeGVEI0QKeiNzWnZp
QCUrKk5hSGV+YGR2Rmp3eTFjeHN1KFEydypIOEh8X3tjOE0pK25zIzt1d3A/ekhlLTVxUFl+dzhY
aXU7CnpuNDE4ZjVpdElqa3B0eDlWLXBMc1RDSGwlWVNhcmk5PXJEISEkZWNyVHRzM31gdXtCZ3tM
RUFVWXlvKUFQUV93Uwp6YnZTI2ZtaH1wTmVDcXNOOyRBcEEqVk4hTGIkSDJzfEx5MF9QO042MUda
TUBGcXMyPUhhfng8YEpZYi14JGUwdygKemBYJWJYeH41Q350UHUxKk1qRm9UODAmI1JHNFRFaUNw
dyRtTDxGVjZAUk0lXjAwOWFlWnE9U3BGOGE0SGhGRVhSCno3bjhTZ2hMb2IlMW1+YWp5bkh0PypO
X2w1OE84cDxGQHpLe0FhQT5JelRSMyY/PHI3ZUglMUJZUiNUPmo8JHdwaAp6NVJfe0NOSkI5TCg8
Qj9ebiFsVU1pd0YybCFrRT4oZHBgZHwhPyR2PHJTbHNLNSlmQUZXUUhvaVRqNnkxTlhLPmcKekBu
YiltTSprQShFYGUtI29KWUItKGJeQCtpMlhZJC0hLXwrZmpMUT55RUEjdTt4VERjYkt2IStvWmtL
a3M1VnR5CnpYfG5wJV9HP2ZmTzBMKiVUdiNwIzg4VDt2bXtqYiRUenRrUmMkXktVS3tsXytKPTZt
KUVOTi00aE0pSCRSZnImXwp6cmwhKHZhV2BAcUkmejs1IXlockdUIzRHYzFGTEVWa2VYMjlyPElS
S1lWeWxXRTdUdU8wNUtqRnk7X1ZOT1VpKXEKej9BK1loRl8wU3hMeigwcmdBOXl9V0Q2NDAwcT17
M3MySkYqcVd9PUF0JD9JKHVKa35AcUYpdXprJCYjanl0MyNgCnpnIXRZZWJOcUA2aWdDWno7Rkwk
WW1hcGI0Oz8taGtpO2loVnsjfTQkc00qWkJkVjVuJSFwVFd1dnF4UkNPI2xibQp6Qz5mMUxuLXt4
QU1FcTs7YHI7fHArdE5LKUQ+SCp2NFRXUG9oJFolKEI9O0RvPHhINFdHTj9nPyN4NyRLNGBrT30K
eihycVV3emtpdiV6eGVFclllO212K0NUN3wmZz5tbXdBOWxiPyZMZHJtcj1PcmtKQkErTTZ9eyRW
TT82KEAwWkZUCnpCOSRgN3hedGdiMX1YMmVKPDtIVFo+Iyo8eil7em5KVD0pMHhZVFN7dHImUyNA
TiElQkwqdzMjKnlxJnVJe1ojaAp6dVFUKndRWUJSbUhmd2xzOERTdU1uVkN1XyhfemNsRzhYVmo/
JmtOeVZAQ1ROcml4KDtYP2dpam1Yfl9mKDFoTmoKelg2NkR9RFBmWEQ2b2FEUnYzRyR0SSFaOWtJ
PXxAT093fWF0RjZTNWViUUNDTDhKNFRDUXpZeXhFcXpeT3FFN2V9Cno1OVJ7cT5NfmF9cnFwZnpH
Wk9fcEJ7Q2RzajBsOW0yPiVKOE1xdD1rV1hnUmVgd3NhMm11bGN7e3g9RkZRSE5NNQp6akVPd0dh
OXNOTWEzSDM8M2g8WEo0Xz4rdVM2O1RYK2FNelNRRShQMzNQTFFTVDZoLUx1P1gtPjgjdCpydCtE
JHsKelZ+UFZJV3ghSlVAZ3RPb283SVFReGQySVFmRn5tWGlJU1pIUm8yZnk+YmtPMHUtc0NKRytH
eHNZZ3pgJjJTTzhUCnokS3lme3J3d3pFPTs7O3RHPH42SGVucW5NKGwpezhnSE1hSnErTzt1TUwk
YnZ2dlo/cShmXjNKKkJebF5CYkNJYgp6I3l+V04hRjI8RWJSTytlWkR3R3ZzUFdsZjZ3YTV8VGtX
YipgbDh9MHI+VEQ3bzdFNyhZQyhzYVdDRGpSKjs3I3oKekIpeE8mbGA1NSlaQXRocW5nQSlpQmU1
Tj1BQ0Y9U2lQSVk1IyZseU0zYy11KD4qZW1sT3J5fXojaERaRHl+SUw9CnozKWxBRShHJFJXKUJw
JS1YRE5adDlaQ2ZCSiVPbHRwcDEyU0ZmX1MmYnlBNSZAJTBgNDkxSFU9VGNrcHtxZGZzRgp6KldW
JFl1MG43MCo/PzZNT0w0VHt6PV42I0JEcWZ7UHUmN3FtWnVAdWZLTERTe3RrfTU1a0k8YDhrXyEo
Y1h4TisKelZQYShMMVEyXmB5SzM1fDJLJGhwekZxdDhFbnJjTGp2fExiMXRCeUE3fElUOGYpPHRG
QztFNU0wYm54Z2RDZldMCnopVkdlaTQ3UGFCZTRIcE9VI2BRPUtYNHZ5KGUoP2M2bWZYbTJQMz5C
b3tZT0tUTEJaPHRiaHJgUkZJKSYmZU9FcAp6KCVDSlhMMmg1cChBQ1h0eVdDXzEkOD97c0x7Wl92
OV8zUXNEMn56Q0FmanFednhLK1RtfilTPHloeThza3dTIVoKei05cyUwO0BlXn1FU0dsYndARkgm
LUxmYzJGdGVFMG1zUTBLZlZBMkUwSCsqUyZmLSVzPVVJVEg5bnx5Ulo+T1RJCnokfHg5cWNoQGRB
QChtTiYzbGdPZUdNLWpxKFBoM3NvfDVkN3BGKz07ZHI5b0IxZ2RgUDlmSnQxNXIrbnstK3F6eQp6
Sj50SGg2RjJWak5ePCt3RFM+Q3BmQld8T2AxPDwjTSNpcDBoeGJJZzY9eSVQNj53dUpjOz5mM0lz
OyElKFRNNEIKem1eelpaWXJFSEtFPUFTQk0qWmhTI2A2KnY9R00qQUgpZVMwUUkrZklgXy13dSl8
TlMyT2tpbjViZXhzRFomTT9PCnoxKyZGOD9RZGZxLUczSVJBaW1QVXlFJEFrTFlsTzM1dGBxdE5R
YFJgbC1SMjQkT05YeyRlcldTUSY0PzhRKGAyZwp6eFVwPkFkJGk0b2VNckdnKD1vX2ElPlp3Kyk3
WSptPj1oQkwxcExOLSVIT3ZiI3htKDdzJiomZl85ME8tQGJTfTIKemVSMDtpdHd8YWhMUmc/Rz11
fV5LeT40cSU7ZzsyS3VjKl8qO2JyWmRaKVh8ZHJXZ19aRk92OUhpT05APjNMJGVQClFVPHU8YlR9
P3ZgOU1+YnxmQT9BeEpeJW0hCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvdG9vbGJhckl0ZW1TZWxlY3RlZC5wbmcgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90b29sYmFySXRlbVNlbGVjdGVkLnBuZwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiNzg3ZWY4OTJkMzNhOGI4Y2RhZWQxYzY2ZTk3
NDI4ODQ4NGNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAyNjYKemNtVitsMHJt
Y2dQKTxoOzNLfExrMDAwZTFOSkxUcTAwMEY1MDAxQCExXkBzNjR9bndXMDAwMDFiNWNoXzBJdHAp
Cno9PlB4IyM3UlUhUjU7NmhQfT5mTEFQbSFpPT5MRE0wKlc1OUNBSGJrTGp4KGpZeyljQyVZKmJf
KV5pYWgxQE15Rgp6Z1JJMnctMFh0KGpQQERyRTc/fjghanVeXjF2M2tnQzJWJnkzJCsma3RFbSR6
WElBMmVCcU9tczNIK3p2ZTxtNiEKemdfLVd8P3dVZkc2NThHTk1VbjBQY1RVV0YkeTBJSlU0Uigm
NUdwVDVYenloMlhkaEBkPHZedXRLZEMoKXpMQ0EqCnpNI0owdmxVYTN3cD1UQWFURz5aPXB8YUNS
SnpUVFdvSGc5dCV7LXw2dS0jR0YhdUZsKUpLN0VIMkRhamRleiNpfgpRQEJqYiswNypxb002Tjwk
ZnwxJkUjUSo+UgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3RyYWNrSG9yaXoucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvdHJhY2tIb3Jpei5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU0MWRkMTFlNmU0NDEyYzQ3MDRhNTlhZWQ1YzAyYjM4NGE3YzhjMTAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNt
Vj9kMDAwMDEKCmxpdGVyYWwgNTMwCnpjbVYrdDBgMntZUCk8aDszS3xMazAwMGUxTkpMVHEwMDFX
ZDAwMFhKMV5AczZ7TFBlajAwMDAxYjVjaF8wSXRwKQp6PT5QeCM4RldRaGJXPzk7YmEhRUxXZEsy
QlooP08yTm9gP2dXbTA4ZldPO0dQV2pwYD8wakVoc0t+eS0peV9DTzcKeiEoYkd9Wjw/RmBqViYh
Y2ZSbUdKY2IlTEJMMHNCRmFPZmlWMHp6clU0dXlpN0kwJWt7ekpjSCoyJVRJREs3aW9WCnpWNEV+
YXpqfCY7TDVwajE7cW9PUGYmNGg8cDNCRl95SlZVTSp8dkc7SU14fT9ucWhFfVN0bWA/Tk5SYm1x
dnJFRAp6SSh6eWApN2VgVCNqU3EtO2F6VDZ6K0JoOUV8dDc8LX1sSig5UlZlUSlBYSk3UTM5eWNk
XjFWWGdEey0jeDcoLTkKelJfcEdiMGRnY0Apb09fPDYoNFhlS3x6NCZSNDhiYVNJdVVNcGQ1dV5X
SUUzSHclY3ZLR0YwbzglUldgQjgoOX5OCnpFP0VgPnRndSEpfDVHbmI2PG85a1ZgYnYxJDUzZ0Bf
aWNpREIoezI8T15iUD4rfks0Ukwoa3F9QGc3XjJndSUrQAp6T2NXRWFKbmRaOFFWNkk5NHBUO30j
QTJUZXs/Yk0qZjM4MShAXyhRUiZuR0xUaDhWX2U4T1VGOyZlaFVZWW45M1oKel4zMm18YSlKMGhW
IXUhbkM3Rz8jdDglWCZZSGBNSzAqKktZKC1rQVNQZUN3ZyFRLX5yRDw4PTJUZGIwTjZfZDA9Cnp0
U3xgMV4/SlFDPGpHYDhxdFNOPFlRNGJYNk9oKnNqdlojc2Z7fS1FU2ltdjxKd1FTU1EwJTdCeGNy
ZCZBM0EhegpVQWZ6JVk1JiFASTA3KnFvTTZOPCRmfXp7KlU7cUZCCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdHJhY2tWZXJ0LnBuZyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RyYWNrVmVydC5wbmcKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNzVhMTQwYWU4ZWVhYjFiOWE2NmVkYjk0NmY0
ZDRkYmRmNDM3ZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lU
IGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgNTY1CnpjbWVBU0BO
PyhvbEh5YHVWQnEhaWEwdnBeKygwYkghM0hGTVpHWFpDcSomNCZlSHxHWEh1aUo+Tm57MWA4SDxE
NQp6b2Z5YGdsWChmYEM/dENYYDckdDZzV0M3I3Y7ZWdMZyZKTmtGcTlmRkZ1WTEmVjZkOU96I3Z7
UVhJRyNOUD1ZUFYKeit1ZW9YS0x7P155TD5XR2d0TmRTdktWTmtGYkZkOyUkZyRzNmw1PilebVMj
dyNVI2toQllrfTB7MzQpQG03WHErCnpBcmAwS1BWeDM7TikmMF5Vdz9VM3s2ITw5Z0wpenRUUSFh
fHMpdnwoV195ST5UJDEzSEg1QysoSkZ2OEEjZXhNZAp6STtLeSh2ZyljJXc3WT1ub1BFWUFEek91
cSFzSU0hJlYxUE9ke1lJI1YqYk1HKj1kbnMoTjhVOFhaVUMqbjV8RloKenYmaFN3U0hzaW54WjhL
KCFuNTE+WjF5dzl0KFJrSVdTcm02STZZaFomOX5rTEV+N0ojJkt4fVdzcm05dyk7ZkZjCnprM1NT
c2pCSzcxPjc3V2NeaVgtRChCLURITllRUHYtbilWdkN4YTcjRkljKmM3TyVNNDZ0RiZpUnNQQisl
TVMlfQp6dzRZXjgrUGR5ODdaZGwoRk5Qc247dEhufFV6ODxaY3p5S0JfUGYmLU0yVXRuRV9eJUg7
fE5waEE7flJLaWxWUSsKenVmSCQ2S2Q/Y1RCaTZ4RnReZGxaeHFjLSlHT0E/PENVKUgzeVppeWk0
WCprKyo1dU1WalRKVih4JUFwanktenNmCnpfQmV+e0tYMlg0TDtzb1ZlUitiSC0mcW8qeXhnVX09
Iys5Kkw3byRUKUQ+ckNQY2cmIS15SnRne3hhYlRvMF9gUAp6cjBtY080ZXFCITVCbGFjckB3Sjxi
Kyk9QHlIe0R9cnwleDcrPS1ufT5oXjVQMWpZLTRyPm1kS0k7VnN0MEF+OHoKQWFSMn1TCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdHJlZURv
d25UcmlhbmdsZUJsYWNrLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3RyZWVEb3duVHJpYW5nbGVCbGFjay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGY3OTc1ODUzMzc4OTZmMmQ4Njg1MTk3MmE0ZTNlMzI0NmU3NmI2ZDUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTY2CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeOTNh
ZlcxfCpPMEA5UEZxakt4OWpQN0xlTCQtRCR8NTxGY1RMbkpPSQp6Mkx1SWFnQD1YUj4qditoKCVO
T2pBZXJRX040bVItbXllSDZoZXZfbyQmLWNKNDZ8fWhGKSh2K2FXT2RAJT1PQCEKeiNAc3FuVmdo
NDt5VjloKlNoZi1jSi11X2hRKk4tNy0wKSRHVk9YSWNrdWpIdlMoQWFgU2d6Nm96SFJ8IXBqYH19
Ckx1NnsxLW9EIU08N2cjSW0KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ltYWdlcy90cmVlRG93blRyaWFuZ2xlV2hpdGUucG5nIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdHJlZURvd25UcmlhbmdsZVdoaXRlLnBuZwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkM2Q1NWUzZDMzYTdhMDg0YzMxMTNiYWJl
NDc2NGY5ZWY1Y2QxMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApH
SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxNDgKemNtZUFT
QE4/KG9sSHlgdVZCcSFpYTB2cF45M2FmVzF8Kk8wQDlQRnFqS3g5alA3TGVMJC1EJHx7NSlNOExu
Sk9JCnp8TT5zRW8+TzR7IUE0eikxe1F0K2BRdTdFcjheYGc5VC1sV0lJemZKRStib200NDtCc2le
fFQ0aklzPUAkYGVGUgp0Qm5LYTBJI1MoTyFOe3p+RnJ8YiZOc3RYX1RkcWUjPk1oZiEkQUttQGMp
SSR6dGFEMGUwc3Q1QkRwJnZqCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvdHJlZVJpZ2h0VHJpYW5nbGVCbGFjay5wbmcgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90cmVlUmlnaHRUcmlhbmdsZUJsYWNrLnBu
ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0YzJmMTBiODVkNjA0ZjZkNjIyODVl
ZWIyM2EzYjM3MGMwZWI4Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxNTUKemNt
ZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF45M2FmVzF8Kk8wQDlQRnFqS3g5alA3TGVMJC1EJHxMT29w
XkxuTmpxCnoza1ZBcnJ6UnZNQnB6VHJhYGZuVD04dFRnb1NlWjUoPmJSek55UENUKzRWIUB6ejNm
Tm9tQFhlYStyNE1OO29xSAp6Nmk1ZjhEQHsxdG58Q3glO2habzc2T1RKbj1AZSR3cVhqPk83I3V1
ZyVsdWdUejV5KkBATzFUYVM/ODN7MU9Rdn4KQkV3MkNvCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdHJlZVJpZ2h0VHJpYW5nbGVXaGl0ZS5w
bmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90cmVlUmlnaHRU
cmlhbmdsZVdoaXRlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNiMmViNjA5
ZWRjNWRjYmU0ZTZkOWQxZmFjZGM0YjA4NWFlZGJmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK
bGl0ZXJhbCAxNDIKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF45M2FmVzF8Kk8wQDlQRnFqS3g5
alA3TGVMJC1EJHxKVW0/LUxuTmpxCnp8TT5yWktkWFNUKEV9IWpsZzE4dnEmdSNEKU5GWHo+ITgh
YCYmWj9Da1Ioe2NeXkl3eHdIYSVCZzlUR1o8Ynx+cwpvZGBCYzUmTlFCI3NPb1UwYFNmJUtZdHgz
KlJkK2RkMD9sT2Jib0Z5dD1ha1J7ME17YHM4dnA8UgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3RyZWVVcFRyaWFuZ2xlQmxhY2sucG5nIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdHJlZVVwVHJpYW5nbGVC
bGFjay5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYmRlOGFjZjc2M2JiNTI0
OTc0YWI4MmQ3MTIyYWY3NzMxYWI0YjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwg
MTgwCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeOTNhZlcxfCpPMEA5UEZxakt4OWpQN0xlTCQt
RCR8STE0LT9peTBXVwp6ZytaOCtWYiZaOHBrU25AaShgbUhjeWZYUXRBP2Z+dDJQNnBVUyohRT5y
cjJhcEVEeTs4LStTZ29qVWN+UTZnaUsKei1tV0RLMFJfXk5ud35sJnNfa0d9a1Jhekg8VCs4KEN5
M3w3JkU5bms5cClBbTc4QEZSXnA3aVg5eEV5O1RFfXF2ClhwO0d5NF5NSldQT0JnJnx7YW5eTEJ7
VHM1UEBGVysKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy90cmVlVXBUcmlhbmdsZVdoaXRlLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3RyZWVVcFRyaWFuZ2xlV2hpdGUucG5nCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNDlhMGFlMmM3MTI3NmY1ZTMyNzJjZWExZDQzNGVhMmMxZGY1MmQ4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0
Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDE2Mgp6Y21lQVNATj8ob2xIeWB1VkJx
IWlhMHZwXjkzYWZXMXwqTzBAOVBGcWpLeDlqUDdMZUwkLUQkfEkxNC0/aXkwV1cKemcrWjgrVmIm
WjhwckVeX2koYG1IY3lmWFE+ITFKc0A1Xj8kN0k8IUFfIXlAVSpXbTVRQX4zJShzanxlQVByPEhi
CnpOckxqT0NMUj99aUxpRmhQWWZSbWItMm95NFY2NntJbUo5QndsT2QpLXFEY0NKPS1BelhlNUtE
dERubXtyLVVXfApEMHJlfDAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ltYWdlcy91c2VySW5wdXRJY29uLnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VzL3VzZXJJbnB1dEljb24ucG5nCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkMDA4MTlmZDkzYTFkZmIwYjMyODc1M2QxOWRiZmIzYThlZmI3Yjk0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDE4OQp6Y21lQVNATj8ob2xIeWB1VkJxIWlh
MHZwXkFUfTJWODw2WlpJPT5mNEYlfTI4SjI5Kn5DLVZ9PkRmZWA3NDNVX2MKem9TP3cyO2B7cjll
Y2BSK3w1LSVVZUV4b2pVO2dGcXwwZ2YhYjg3cHxgU28mdDtNZTg8VXZBem43JmdjNV5Ydk5FCnom
Kkp9a1B5YyZ0eSshNytfV3gkUl95MzlPe3B5UU9lNnl0ZHxKaGFjfE5MaXY8bE1nSzE/VCR6dWN6
KyZKPlRNfApwWkpxWEd3U0IranR2flc2YGFmVzF4TnlkPGJuJkxJLTlSVFdjKUkkenRhRDBlMHN1
a0RSVkR4YwoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3VzZXJJbnB1dFByZXZpb3VzSWNvbi5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy91c2VySW5wdXRQcmV2aW91c0ljb24ucG5nCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3NzlmODE1Nzk4YWQ0NTY5NDE3ZTc2ZGFhM2MwYTA2ZjFjOTk1
NGI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkg
cGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDE2Mgp6Y21lQVNATj8ob2xIeWB1
VkJxIWlhMHZwXkFUfTJWODw2WlpJPT5mNEYlfTI4SjI5Kn5DLVZ9PmlTY3hDNDNQKyoKemQpfD1D
TDZMXyFLPnpOXz9nIzRAZyV1V21tP3dDNT53TmhXLXhROV91LTlDZzVNSGVJb0pYbXRxdnI2TG9f
bzlkCnpxTyVMbUM3JTB2dG9sfHx4OFg2X1Ytbnt9KV8oMlZeWm1KeCpHcFNUcnZ2WVZHYjQ5fFNo
ZDg/UnkrIXtociFkOwpLJnQ7dWNMSzZVdGo2S0BgCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdXNlcklucHV0UmVzdWx0SWNvbi5wbmcgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy91c2VySW5wdXRSZXN1bHRJ
Y29uLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY3NzE4MWQ1YWFiZjNiNmI3
NDJjN2VhNDNhYTExMzYwNDAzZjUwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAy
MjEKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5BVH0yVjg8NlpaST0+ZjRGJX0yOEoyOSp+Qy1W
fT5rdH1oSUM8KUZfCnpEPUFNYk5AWnxOJHhsakVAWFNxMlBZcF48T3NPbjluUTgtNlJPSVI2NyRP
bmcraSVJbXBlVnJkVUR4ajNuSWl7Ngp6TFRuNiR8TT0tRVluKyhwY3U8RGJTRHZCSWVvZHB7d2hx
SWw4TmIpZzJ4NTlKcXU3JFpAZnclbjV3K01PX3BHTWAKelgpTSs4JTtyckpqP1NKQylVK3R4d2Ql
PG5fYnRXbUVVVj05ZXFZPlVfLXdDZjsjJF4xP1ljc3lRej8lPjF0bEpuClExS1E1dT5GVmRRJk1C
YkAwSlpsX3N7akIxCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvd2FybmluZ0ljb24ucG5nIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbWFnZXMvd2FybmluZ0ljb24ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzNjM3NDIwOTA0ODc0MzIyZjExMTVkNmFlYmNkOGE2ODA5ZGEyMjRmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDI3Mwp6Y21WK3MwcSp7WlApPGg7M0t8TGswMDBlMU5KTFRx
MDAwVUEwMDBVSTFeQHM2aldXLUAwMDAwMWI1Y2hfMEl0cCkKej0+UHgjJVNsOCpSMlk/WWtqKUFL
YVRMWVIocG56T0dmY0A3Y259S3tIV0hHMlkpRmxiVmNgWDRCVnQ3KU1icyE2CnoqU1VYV0d+RHt0
PjczSzhkeDZsJTVRJEEyWWVoQndQMmoqNTdvdz5DUz5sRyt3dDw1VFNSX1claXgjYGMlIUA0Zgp6
T1QoLXtPKXBZaEhMPV41OFNjZ2cpI2BuM2JDTDJMKylwSkl3PDl1XmF9OUUjcmBjeSk5U2MzK1Q3
e2haYWY1MzAKekc8elNCSmFpRHFnZDRJOXIhOWxnXm9+N2Q/MGBTPiV1OHNCUDQ/YXNge2dteTQp
U1NLYXUoIWBaUS1WYko/JVVJClhVeEsocik/QXhNMDAwMDBOa3ZYWHUwbWpmSDJgczcKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy93YXJuaW5n
TWVkaXVtSWNvbi5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdl
cy93YXJuaW5nTWVkaXVtSWNvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZh
OTJmNjcwNzQ5NjFmODFkMjQ4M2M1MDExZmE3ZDYyM2FjMjYyNWQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9k
MDAwMDEKCmxpdGVyYWwgNTkyCnpjbVYtVzA8Wm12UCk8aDszS3xMazAwMGUxTkpMVHEwMDBtRzAw
MG1PMV5AczZBTV5pVjAwMDAxYjVjaF8wSXRwKQp6PT5QeCUzUTBza1I1OzY+UH5BKERhVEk+dWNO
MyY9QUYtZ2p5NnJMJEF0YkE8SCs0Wk1CdCNjTURFJFQ5MXlPVm4KemdmMUN7TExuc2Q7WjBYdiVu
RVdrOW4xMVVSPVNWYyVIZ0pnLXNPQ15famZ3eS1USTwzP0ZTRXNiSXg7fj1sbCteCnpePmd9c1hw
KUhrYylIUG89QWtSTllfeV9UQCpQZFAtU0NkeCFtemNibkBfXkg+dkNid2pALUtnRmprXmtWUGdg
cwp6OHBVIT9KMzYrI2d+dFFXcW1WdkNzWWFgdXlIMXFTdCs0QHArZ29WZWUpdm4laiElPzVNZTxi
czA8Qkl0M3VnP1IKentPMTs0RldlNlhhOWQ/eVJnKHY4ZiRHOWhRZCFNPEpjd2JyJjZlKDZDdmRF
a0t3YyQ1R3pWTE48e0xAISYkQyRTCnpHN3UyblUpQExoNW1ybSQmY2xoaXoteTQ/cy1SZzlgKkJC
Wl5oZnQjOGBfRi08V3hvQE83cmooPDRjfXNoVHxkJgp6V09RMGQ7TiQ1NGp7bWo9cFZ4SyYxX3JH
PnlEelhuaWljdHhPWlJGKm9KKERDZkFsODghdkRwK3klazRfbGxZKCgKelloLSVNYyleJXBKWkJe
d2MzdHwjNzs+YGhfYm8oaTxTSWZ8OHJBQjJvaCpwVDd0JSFXZGhNTnFxJVhYWVlZNmRaCnpsa0Zh
OCFRdGcrY3lHUHxSUm5XUmQhUkQwbjx7KzYlRk87KyZVTlZ2dU1rMDI9MHcxOCZPcHo0M35MKiZV
fmJPVgp6NXI8aEdaIXBVKmVQJWgqVX5XJFQ9bjBTYz4qc14kdnAzbDEhR1dgV1QpRyY8KTRvbmIx
aWhVWUA5cD5yb1BYO0gKZVB4eU94O219djVASl9zfnE3JmYmMDAwMDxNTlVNbkxTVFk8a3tlP0gK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy93
YXJuaW5nT3JhbmdlRG90LnBuZyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3dhcm5pbmdPcmFuZ2VEb3QucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhMTkzNzEyOWY4Yjc4YjA0MDYyNmM0Nzk4Mjg2MDhlNjg0ZWI0YzYyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpsaXRlcmFsIDQ4NAp6Y21WPEEwVVEyX1ApPGg7M0t8TGswMDBlMU5KTFRxMDAw
bUcwMDBtTzFeQHM2QU1eaVYwMDAwMWI1Y2hfMEl0cCkKej0+UHgjMzI7YlJhe3ZHZjY5NTFVNjlF
OTRvRVFLQTBmfFhPS355LTYtSTdadiM5PFcwdWtsKXRHXlVoTk8zSzF4CnpXMTZMNlZgQz1eNV43
Pj1BIUh7RVdoYXFIQTw8fiR7VjA8e05mYyRIcS1JMC09ZG9manJzSk5PJnUwOUd5e1RXXwp6fDJn
TzBANk9qSkAtS2YkKC1xUCpRWU9ub3JFKlZMUT18Nyt2dCFJN2VZPHJJU2hNWjszPVQoT09ecUhp
MzdoQXQKenEkU3Z4Z3ZmM09hSnZHJFVCPUx3OGEtejBoSCRtQ3NjS21iYDNlISlZWHdldmZxZ0Yh
XmhSckhecTY1YntfaypOCnojIXtfM3lwQ3QjVzEjQHlIOCh5dC1IMj92cXhIdnAwcThOcVoyVDdk
JGxodkAkQ3B0LWMtXlRkeTdZQUFBVnpxQAp6MzN8KmhZZDY1VCg9Mjx8cXlXZHRzZEJEZDcqdysr
MWs1bU55TWY7O0o9VkJ9dWF6NitFKVJHcjB6eHMzcDEpMGMKej5eOShxV1RjQX05ZF5rfmN3SE47
OFgoZE1VO3VjbjJlcmQpblBKQTwhSCtrUXFVMCMkZnF3Q1k3VWsmdUVkVGxhCnpzXm1IM20hclUt
X35AQlRpcnFXbCM4a3psNmV9TDMoJT48ZyVWWk0xJG5QUFU9QT5MaGo/c1E/anZ2SEpOO1d0Vwph
SEdUbXM9SExtP2NINVQjMDAwMDxNTlVNbkxTVGFicVMtd0YKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy93YXJuaW5nc0Vycm9ycy5wbmcgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy93YXJuaW5nc0Vycm9ycy5w
bmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMDU2OTgxNzAzMzk3OWRhZDQ2NmFj
ODVlYThkZmFlNzAyNjNjOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTgzMgp6
Y21WK0AyaU4kQ1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFeQHM2YjkjRjgwMDAwMWI1
Y2hfMEl0cCkKej0+UHgqO3o+azdSOU02OW11LXd4Un5nNUQ9aUVDcCVncFJCITByWVhTbEN5VkF9
dWZGV2VlMkJ4Ql56KmZ+ISE0CnpAV0dmNnc1RnpoR0JNPnQ8Mk4tPjh5am55X2AjVVF3cDUjej5Y
dE4/S3BPKzBxYEtPcjt4MTV6VTB8MTtvd3N9TQp6SWdjT2k5YXhZZXpJQFE2Q3BtTV4kdXM5WHxM
M3s/PVJlUURDKnpheHwxekhKIyhuIWFIVnokUyVNLWd2e2tRSVEKekBBWnE5KGxwUFMmOX5BU1lU
fXYjQE1oSzQpWUxTcyNAZUooTl5VPT13VSsrRCFDfURzQ2ppdXs8JFI7NWxhMVBpCnomVU9sMmIy
eHREMDtRZ3x3JEUqekhTNipFK1MqMVY1K0RLKzshcS01alBafFdHUVQtQ0pwNisqbW9GRm9FZGJs
UAp6ZDd4Xyp5Sjh2O1NodFFmcn5nYig+ZSYzc3s/XnRYX2NTIUwjKklNJEw9YkRNMEMyUXNSVks1
dk15WlVrX1BgJVUKek1rZkFjMDkhdUlqKElLQTxBO2Z5KEBKKUpxd30zKkUlUnI3SGwxI2I0LU8p
fWp8TmFHSlJ9a1ZRaWBeMCo0XkxLCnpebGRUNTBscWdHZyE5andlXzw4dmRtclZnYFdlaXFUdTxO
XlZyVVdTclpMKztvdm14ZzYlZnh1Tz9GJiQ0JmwwMwp6V1FPQ1lfSDRINm4mK2oqbHt6KzNFUEQz
QDtQS3JZU2k3RTBRZUlBPz4xVmhOVW5keTdOVj8meUs3RmM0WDBRZX4KejdSTTFtLVFvTi10LSU8
Uz9eRVlFdzUzdUg0dHJrOCVWZ2Zvamc2Sj4zWlM9fXdqRy19RnRjN3ljV2EqQCo3eX40CnolXmM4
NHhOO2JzdD89UkhQRXpnbjxLJUxvQmFzYGdBKlUzWC1kPSpuTWs9UkghUlJQOzwrNSZlb0U3SmJN
ZHhCTgp6Y3x6WH16ezlLQXZ2M0o+cjY5TGZrPHlySmhEQj13QF5qQm9YbH47QSU5Vl5PTU1WVEoy
c3IyYVdQNXVfXzRNRk8Kem95d0pCa3hIQDEjTWxfa3A2N0hzJmFRZmA3ayheJnVSWCVUbGBHaHBv
PVYmbjF6US1uVkd9ISFeJGQ7JnQyU1RZCnp6Mm1ROUl5JiZYeUJWeGhJR2ZNWXhOfDRUbyp3Yz9q
eGd9XyhgMWJ5UHpwfmVEblM2JngtcFR8JDV6M2pQV0U7Xwp6SyZ2VytPdEJPRkh2eUNgZlUhYDRy
Y1lWQypjcn5oSiZTbzhLaEx5eW9NYjlSViM1WHwtZ3R2UTlYaURQQVJ3cUYKejQtak1VZzFgcFck
e2hpR2JwdmdTN3FjbDxpPFVmeTF9UDFLRzJsNFppVCtTO2ZTM25zX1pFMyYtPHdRSHJrUyZLCnpE
XjdocWA2RVgtXlVPMX03PXQlaShFd3ZEekE+VmR4LSk9OVpSfVh5TVctciZtezhiRUM1UU18Syhk
JnowUiN7UQp6bCVacHAjYSZ3RFN8THduWXola0c2cjNRU0NfLTV6QnhkQVgxQXohLVc1OUwhMk0r
QW4kbyo/cHZuUGAjQ0xVTkQKenAwWHl1PUhFbFNFMH5FUGFLVER3KkcxVSFPflgqRj0yQmxEQmRA
PVg/JkBPWXpKMnM3TUYwZVZBSSp2Z1dvcnJVCnpxPWZWNXV5dyZRP3owbWg3Tz4jRFAlP3Rhem1H
ZW01eCtRMEF7KkhPMzFEdUUhRmNiYF92JCFWKkpXRVEjPzA7OAp6Uyp0YUQyTV5LXyQjYj50SnJU
IT49dnkrLWAhTE5ibWF1WDlSMWlOKnpjdHxLNVFyQGRBbEApaXZiYkB1TDEtNVgKemFSWTAmVHR1
YC0oKVQoMXtQVD55XzhQSkU+Kjt5eUc1IU1oKT8lIzF2ejhIU085RiprR1NKej0qNDY4SE5YRWxV
Cnp0cXE/LU5KUWhHaHcqKntpYEFlYWN+QTtlMl5LdmxXTDVgVXxHbFA4RFBEWmBTJDQoYTQ0cGVp
JHswaWBQPk4lbwp6PWY5KVclZjJ4S0g8YSt2OUBAOFc7SGwxcSUlblVDZkMtfXlpWGcpbUYoVzR0
R21ldURTeWsxMXJORDd2Uik9dSgKenVxSShOKH1CfGBQcj9UdVBeVUY5O0hecjx7P2VGZHVPXmU8
S1g+KSZSVHJTUTdwRkJyQDZ3ZWxrJGU9anhqQnN3CnohR3kqTzUtNntOUnhVdil6ekliV2JYMk1a
WHptY0VFKTZLVz5rd0NwaDlEczJJRVY8cF4qc00yVn0zZkVQOU1uUwp6YXc5fWwhUlRMXnk+MTEm
KH1eJnBIPUdDSWRvRXVFd2BLdGkreTYkeG14aFNWe1VWaFNne18zKHMoY3s7Q3g5PlMKeng4eG01
I2FoWkRTUF8wI0VfPVQrPURGYz9gcEsmRURnZlFwIWpAJCNTZkVPZzxsaEZPRzZCaUBITXBxXlBP
T0lYCnp5bHFyUSFJcDBsUmV9Z2E5dV9WWW9XKHZQJTVjZFRVTVpKKCFTe2JMO1FLJHk8I0t0VHJX
KEFuPV48S25ldWhIfQp6N0JCLVpEeV8pNTRaITswNDZmJkpZd3lGQnVRQiRBPztfcXV4S1Y0V0Jv
ckFYcGUqUEYpWG8kMCEjKj84SHxBZ0oKenhBdnRnKSpra0t6WCtyd1M/fmFId1ZgUiZZfSFqdndf
fE9uZUFZblZnOSN1PUsoWCk8VkBHI18oUCRZYkhWcTBFCnpsbj5mfkU4cXc/NChMMjJOfmxlJTw7
PWxmXkFuN1RzN3hrdVQtfVIlVnR9KGhlfn1tRkNVXypHYmhXa1AjPFJMTQp6PEtiRkk8UmpgcXFF
RHJ3cjl1d3tvUDZ0alVJeHhnaW50UHJIPGp3RzNkcUxlR3xmb1RDVzBmTmt3fkgpKDF5R0EKejRB
I05rKytZPW1heGpINUwqcXEwM3xUPk5HbVA4WFo2RnlicSUtT0ZWelR7UyNebFJ3dl5TSUYtfjct
MTxONy1wClcoUzVlfTRwKFhiMDAwMDxNTlVNbkxTVFpsZFV4O3UKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VnbGlmeUpTL3BhcnNlLWpzLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9VZ2xpZnlKUy9wYXJzZS1qcy5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU1OTE0NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VnbGlmeUpTL3BhcnNlLWpzLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMTI0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICBBIEphdmFTY3Jp
cHQgdG9rZW5pemVyIC8gcGFyc2VyIC8gYmVhdXRpZmllciAvIGNvbXByZXNzb3IuCi0KLSAgVGhp
cyB2ZXJzaW9uIGlzIHN1aXRhYmxlIGZvciBOb2RlLmpzLiAgV2l0aCBtaW5pbWFsIGNoYW5nZXMg
KHRoZQotICBleHBvcnRzIHN0dWZmKSBpdCBzaG91bGQgd29yayBvbiBhbnkgSlMgcGxhdGZvcm0u
Ci0KLSAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0b2tlbml6ZXIvcGFyc2VyLiAgSXQgaXMgYSBw
b3J0IHRvIEphdmFTY3JpcHQKLSAgb2YgcGFyc2UtanMgWzFdLCBhIEphdmFTY3JpcHQgcGFyc2Vy
IGxpYnJhcnkgd3JpdHRlbiBpbiBDb21tb24gTGlzcAotICBieSBNYXJpam4gSGF2ZXJiZWtlLiAg
VGhhbmsgeW91IE1hcmlqbiEKLQotICBbMV0gaHR0cDovL21hcmlqbi5oYXZlcmJla2UubmwvcGFy
c2UtanMvCi0KLSAgRXhwb3J0ZWQgZnVuY3Rpb25zOgotCi0gICAgLSB0b2tlbml6ZXIoY29kZSkg
LS0gcmV0dXJucyBhIGZ1bmN0aW9uLiAgQ2FsbCB0aGUgcmV0dXJuZWQKLSAgICAgIGZ1bmN0aW9u
IHRvIGZldGNoIHRoZSBuZXh0IHRva2VuLgotCi0gICAgLSBwYXJzZShjb2RlKSAtLSByZXR1cm5z
IGFuIEFTVCBvZiB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBjb2RlLgotCi0gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIChDKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yOiBNaWhhaSBCYXpvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgIDxtaWhhaS5iYXpvbkBnbWFpbC5jb20+Ci0gICAgICAgICAgICAg
ICAgICAgICAgIGh0dHA6Ly9taWhhaS5iYXpvbi5uZXQvYmxvZwotCi0gIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCU0QgbGljZW5zZToKLQotICAgIENvcHlyaWdodCAyMDEwIChjKSBNaWhhaSBCYXpv
biA8bWloYWkuYmF6b25AZ21haWwuY29tPgotICAgIEJhc2VkIG9uIHBhcnNlLWpzIChodHRwOi8v
bWFyaWpuLmhhdmVyYmVrZS5ubC9wYXJzZS1qcy8pLgotCi0gICAgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gICAgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gICAgYXJlIG1ldDoKLQotICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAgICAgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICAgICAgICAgIGRp
c2NsYWltZXIuCi0KLSAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAgICAgICAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAgICBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICAgIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gICAgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICAgIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
ICAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAgICBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAgICBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKLSAgICBTVUNIIERBTUFHRS4KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAtLS0tLVsgVG9r
ZW5pemVyIChjb25zdGFudHMpIF0tLS0tLSAqLwotCi12YXIgS0VZV09SRFMgPSBhcnJheV90b19o
YXNoKFsKLSAgICAgICAgImJyZWFrIiwKLSAgICAgICAgImNhc2UiLAotICAgICAgICAiY2F0Y2gi
LAotICAgICAgICAiY29uc3QiLAotICAgICAgICAiY29udGludWUiLAotICAgICAgICAiZGVmYXVs
dCIsCi0gICAgICAgICJkZWxldGUiLAotICAgICAgICAiZG8iLAotICAgICAgICAiZWxzZSIsCi0g
ICAgICAgICJmaW5hbGx5IiwKLSAgICAgICAgImZvciIsCi0gICAgICAgICJmdW5jdGlvbiIsCi0g
ICAgICAgICJpZiIsCi0gICAgICAgICJpbiIsCi0gICAgICAgICJpbnN0YW5jZW9mIiwKLSAgICAg
ICAgIm5ldyIsCi0gICAgICAgICJyZXR1cm4iLAotICAgICAgICAic3dpdGNoIiwKLSAgICAgICAg
InRocm93IiwKLSAgICAgICAgInRyeSIsCi0gICAgICAgICJ0eXBlb2YiLAotICAgICAgICAidmFy
IiwKLSAgICAgICAgInZvaWQiLAotICAgICAgICAid2hpbGUiLAotICAgICAgICAid2l0aCIKLV0p
OwotCi12YXIgUkVTRVJWRURfV09SRFMgPSBhcnJheV90b19oYXNoKFsKLSAgICAgICAgImFic3Ry
YWN0IiwKLSAgICAgICAgImJvb2xlYW4iLAotICAgICAgICAiYnl0ZSIsCi0gICAgICAgICJjaGFy
IiwKLSAgICAgICAgImNsYXNzIiwKLSAgICAgICAgImRlYnVnZ2VyIiwKLSAgICAgICAgImRvdWJs
ZSIsCi0gICAgICAgICJlbnVtIiwKLSAgICAgICAgImV4cG9ydCIsCi0gICAgICAgICJleHRlbmRz
IiwKLSAgICAgICAgImZpbmFsIiwKLSAgICAgICAgImZsb2F0IiwKLSAgICAgICAgImdvdG8iLAot
ICAgICAgICAiaW1wbGVtZW50cyIsCi0gICAgICAgICJpbXBvcnQiLAotICAgICAgICAiaW50IiwK
LSAgICAgICAgImludGVyZmFjZSIsCi0gICAgICAgICJsb25nIiwKLSAgICAgICAgIm5hdGl2ZSIs
Ci0gICAgICAgICJwYWNrYWdlIiwKLSAgICAgICAgInByaXZhdGUiLAotICAgICAgICAicHJvdGVj
dGVkIiwKLSAgICAgICAgInB1YmxpYyIsCi0gICAgICAgICJzaG9ydCIsCi0gICAgICAgICJzdGF0
aWMiLAotICAgICAgICAic3VwZXIiLAotICAgICAgICAic3luY2hyb25pemVkIiwKLSAgICAgICAg
InRocm93cyIsCi0gICAgICAgICJ0cmFuc2llbnQiLAotICAgICAgICAidm9sYXRpbGUiCi1dKTsK
LQotdmFyIEtFWVdPUkRTX0JFRk9SRV9FWFBSRVNTSU9OID0gYXJyYXlfdG9faGFzaChbCi0gICAg
ICAgICJyZXR1cm4iLAotICAgICAgICAibmV3IiwKLSAgICAgICAgImRlbGV0ZSIsCi0gICAgICAg
ICJ0aHJvdyIsCi0gICAgICAgICJlbHNlIiwKLSAgICAgICAgImNhc2UiCi1dKTsKLQotdmFyIEtF
WVdPUkRTX0FUT00gPSBhcnJheV90b19oYXNoKFsKLSAgICAgICAgImZhbHNlIiwKLSAgICAgICAg
Im51bGwiLAotICAgICAgICAidHJ1ZSIsCi0gICAgICAgICJ1bmRlZmluZWQiCi1dKTsKLQotdmFy
IE9QRVJBVE9SX0NIQVJTID0gYXJyYXlfdG9faGFzaChjaGFyYWN0ZXJzKCIrLSomJT08PiE/fH5e
IikpOwotCi12YXIgUkVfSEVYX05VTUJFUiA9IC9eMHhbMC05YS1mXSskL2k7Ci12YXIgUkVfT0NU
X05VTUJFUiA9IC9eMFswLTddKyQvOwotdmFyIFJFX0RFQ19OVU1CRVIgPSAvXlxkKlwuP1xkKig/
OmVbKy1dP1xkKig/OlxkXC4/fFwuP1xkKVxkKik/JC9pOwotCi12YXIgT1BFUkFUT1JTID0gYXJy
YXlfdG9faGFzaChbCi0gICAgICAgICJpbiIsCi0gICAgICAgICJpbnN0YW5jZW9mIiwKLSAgICAg
ICAgInR5cGVvZiIsCi0gICAgICAgICJuZXciLAotICAgICAgICAidm9pZCIsCi0gICAgICAgICJk
ZWxldGUiLAotICAgICAgICAiKysiLAotICAgICAgICAiLS0iLAotICAgICAgICAiKyIsCi0gICAg
ICAgICItIiwKLSAgICAgICAgIiEiLAotICAgICAgICAifiIsCi0gICAgICAgICImIiwKLSAgICAg
ICAgInwiLAotICAgICAgICAiXiIsCi0gICAgICAgICIqIiwKLSAgICAgICAgIi8iLAotICAgICAg
ICAiJSIsCi0gICAgICAgICI+PiIsCi0gICAgICAgICI8PCIsCi0gICAgICAgICI+Pj4iLAotICAg
ICAgICAiPCIsCi0gICAgICAgICI+IiwKLSAgICAgICAgIjw9IiwKLSAgICAgICAgIj49IiwKLSAg
ICAgICAgIj09IiwKLSAgICAgICAgIj09PSIsCi0gICAgICAgICIhPSIsCi0gICAgICAgICIhPT0i
LAotICAgICAgICAiPyIsCi0gICAgICAgICI9IiwKLSAgICAgICAgIis9IiwKLSAgICAgICAgIi09
IiwKLSAgICAgICAgIi89IiwKLSAgICAgICAgIio9IiwKLSAgICAgICAgIiU9IiwKLSAgICAgICAg
Ij4+PSIsCi0gICAgICAgICI8PD0iLAotICAgICAgICAiPj4+PSIsCi0gICAgICAgICIlPSIsCi0g
ICAgICAgICJ8PSIsCi0gICAgICAgICJePSIsCi0gICAgICAgICImPSIsCi0gICAgICAgICImJiIs
Ci0gICAgICAgICJ8fCIKLV0pOwotCi12YXIgV0hJVEVTUEFDRV9DSEFSUyA9IGFycmF5X3RvX2hh
c2goY2hhcmFjdGVycygiIFxuXHJcdCIpKTsKLQotdmFyIFBVTkNfQkVGT1JFX0VYUFJFU1NJT04g
PSBhcnJheV90b19oYXNoKGNoYXJhY3RlcnMoIlt7fSgsLjs6IikpOwotCi12YXIgUFVOQ19DSEFS
UyA9IGFycmF5X3RvX2hhc2goY2hhcmFjdGVycygiW117fSgpLDs6IikpOwotCi12YXIgUkVHRVhQ
X01PRElGSUVSUyA9IGFycmF5X3RvX2hhc2goY2hhcmFjdGVycygiZ21zaXkiKSk7Ci0KLS8qIC0t
LS0tWyBUb2tlbml6ZXIgXS0tLS0tICovCi0KLWZ1bmN0aW9uIGlzX2FscGhhbnVtZXJpY19jaGFy
KGNoKSB7Ci0gICAgICAgIGNoID0gY2guY2hhckNvZGVBdCgwKTsKLSAgICAgICAgcmV0dXJuIChj
aCA+PSA0OCAmJiBjaCA8PSA1NykgfHwKLSAgICAgICAgICAgICAgICAoY2ggPj0gNjUgJiYgY2gg
PD0gOTApIHx8Ci0gICAgICAgICAgICAgICAgKGNoID49IDk3ICYmIGNoIDw9IDEyMik7Ci19Owot
Ci1mdW5jdGlvbiBpc19pZGVudGlmaWVyX2NoYXIoY2gpIHsKLSAgICAgICAgcmV0dXJuIGlzX2Fs
cGhhbnVtZXJpY19jaGFyKGNoKSB8fCBjaCA9PSAiJCIgfHwgY2ggPT0gIl8iOwotfTsKLQotZnVu
Y3Rpb24gaXNfZGlnaXQoY2gpIHsKLSAgICAgICAgY2ggPSBjaC5jaGFyQ29kZUF0KDApOwotICAg
ICAgICByZXR1cm4gY2ggPj0gNDggJiYgY2ggPD0gNTc7Ci19OwotCi1mdW5jdGlvbiBwYXJzZV9q
c19udW1iZXIobnVtKSB7Ci0gICAgICAgIGlmIChSRV9IRVhfTlVNQkVSLnRlc3QobnVtKSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChudW0uc3Vic3RyKDIpLCAxNik7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoUkVfT0NUX05VTUJFUi50ZXN0KG51bSkpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VJbnQobnVtLnN1YnN0cigxKSwgOCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
UkVfREVDX05VTUJFUi50ZXN0KG51bSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VG
bG9hdChudW0pOwotICAgICAgICB9Ci19OwotCi1mdW5jdGlvbiBKU19QYXJzZV9FcnJvcihtZXNz
YWdlLCBsaW5lLCBjb2wsIHBvcykgewotICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwot
ICAgICAgICB0aGlzLmxpbmUgPSBsaW5lOwotICAgICAgICB0aGlzLmNvbCA9IGNvbDsKLSAgICAg
ICAgdGhpcy5wb3MgPSBwb3M7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgKHt9KSgp
OwotICAgICAgICB9IGNhdGNoKGV4KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IGV4
LnN0YWNrOwotICAgICAgICB9OwotfTsKLQotSlNfUGFyc2VfRXJyb3IucHJvdG90eXBlLnRvU3Ry
aW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2UgKyAiIChsaW5l
OiAiICsgdGhpcy5saW5lICsgIiwgY29sOiAiICsgdGhpcy5jb2wgKyAiLCBwb3M6ICIgKyB0aGlz
LnBvcyArICIpIiArICJcblxuIiArIHRoaXMuc3RhY2s7Ci19OwotCi1mdW5jdGlvbiBqc19lcnJv
cihtZXNzYWdlLCBsaW5lLCBjb2wsIHBvcykgewotICAgICAgICB0aHJvdyBuZXcgSlNfUGFyc2Vf
RXJyb3IobWVzc2FnZSwgbGluZSwgY29sLCBwb3MpOwotfTsKLQotZnVuY3Rpb24gaXNfdG9rZW4o
dG9rZW4sIHR5cGUsIHZhbCkgewotICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PSB0eXBlICYm
ICh2YWwgPT0gbnVsbCB8fCB0b2tlbi52YWx1ZSA9PSB2YWwpOwotfTsKLQotdmFyIEVYX0VPRiA9
IHt9OwotCi1mdW5jdGlvbiB0b2tlbml6ZXIoJFRFWFQpIHsKLQotICAgICAgICB2YXIgUyA9IHsK
LSAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgICAgOiAkVEVYVC5yZXBsYWNlKC9cclxuP3xb
XG5cdTIwMjhcdTIwMjldL2csICJcbiIpLnJlcGxhY2UoL15cdUZFRkYvLCAnJyksCi0gICAgICAg
ICAgICAgICAgcG9zICAgICAgICAgICAgIDogMCwKLSAgICAgICAgICAgICAgICB0b2twb3MgICAg
ICAgICAgOiAwLAotICAgICAgICAgICAgICAgIGxpbmUgICAgICAgICAgICA6IDAsCi0gICAgICAg
ICAgICAgICAgdG9rbGluZSAgICAgICAgIDogMCwKLSAgICAgICAgICAgICAgICBjb2wgICAgICAg
ICAgICAgOiAwLAotICAgICAgICAgICAgICAgIHRva2NvbCAgICAgICAgICA6IDAsCi0gICAgICAg
ICAgICAgICAgbmV3bGluZV9iZWZvcmUgIDogZmFsc2UsCi0gICAgICAgICAgICAgICAgcmVnZXhf
YWxsb3dlZCAgIDogZmFsc2UsCi0gICAgICAgICAgICAgICAgY29tbWVudHNfYmVmb3JlIDogW10K
LSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBwZWVrKCkgeyByZXR1cm4gUy50ZXh0LmNo
YXJBdChTLnBvcyk7IH07Ci0KLSAgICAgICAgZnVuY3Rpb24gbmV4dChzaWduYWxfZW9mKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNoID0gUy50ZXh0LmNoYXJBdChTLnBvcysrKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc2lnbmFsX2VvZiAmJiAhY2gpCi0gICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBFWF9FT0Y7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICJcbiIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFMubmV3bGluZV9iZWZvcmUgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgKytTLmxpbmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTLmNvbCA9IDA7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrUy5jb2w7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBjaDsKLSAgICAgICAg
fTsKLQotICAgICAgICBmdW5jdGlvbiBlb2YoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFT
LnBlZWsoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBmaW5kKHdoYXQsIHNpZ25h
bF9lb2YpIHsKLSAgICAgICAgICAgICAgICB2YXIgcG9zID0gUy50ZXh0LmluZGV4T2Yod2hhdCwg
Uy5wb3MpOwotICAgICAgICAgICAgICAgIGlmIChzaWduYWxfZW9mICYmIHBvcyA9PSAtMSkgdGhy
b3cgRVhfRU9GOwotICAgICAgICAgICAgICAgIHJldHVybiBwb3M7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgZnVuY3Rpb24gc3RhcnRfdG9rZW4oKSB7Ci0gICAgICAgICAgICAgICAgUy50b2tsaW5l
ID0gUy5saW5lOwotICAgICAgICAgICAgICAgIFMudG9rY29sID0gUy5jb2w7Ci0gICAgICAgICAg
ICAgICAgUy50b2twb3MgPSBTLnBvczsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiB0
b2tlbih0eXBlLCB2YWx1ZSwgaXNfY29tbWVudCkgewotICAgICAgICAgICAgICAgIFMucmVnZXhf
YWxsb3dlZCA9ICgodHlwZSA9PSAib3BlcmF0b3IiICYmICFIT1AoVU5BUllfUE9TVEZJWCwgdmFs
dWUpKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSA9PSAia2V5
d29yZCIgJiYgSE9QKEtFWVdPUkRTX0JFRk9SRV9FWFBSRVNTSU9OLCB2YWx1ZSkpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlID09ICJwdW5jIiAmJiBIT1AoUFVO
Q19CRUZPUkVfRVhQUkVTU0lPTiwgdmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgdmFyIHJldCA9
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgIDogdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlIDogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lICA6
IFMudG9rbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbCAgIDogUy50b2tjb2wsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwb3MgICA6IFMudG9rcG9zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbmxiICAgOiBTLm5ld2xpbmVfYmVmb3JlCi0gICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlzX2NvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldC5jb21tZW50c19iZWZvcmUgPSBTLmNvbW1lbnRzX2JlZm9yZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFMuY29tbWVudHNfYmVmb3JlID0gW107Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIFMubmV3bGluZV9iZWZvcmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0OwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIHNraXBfd2hpdGVzcGFj
ZSgpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoSE9QKFdISVRFU1BBQ0VfQ0hBUlMsIHBlZWso
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgZnVuY3Rpb24gcmVhZF93aGlsZShwcmVkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldCA9
ICIiLCBjaCA9IHBlZWsoKSwgaSA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGNoICYmIHBy
ZWQoY2gsIGkrKykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBuZXh0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHBlZWsoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlv
biBwYXJzZV9lcnJvcihlcnIpIHsKLSAgICAgICAgICAgICAgICBqc19lcnJvcihlcnIsIFMudG9r
bGluZSwgUy50b2tjb2wsIFMudG9rcG9zKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlv
biByZWFkX251bShwcmVmaXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFzX2UgPSBmYWxzZSwg
YWZ0ZXJfZSA9IGZhbHNlLCBoYXNfeCA9IGZhbHNlLCBoYXNfZG90ID0gcHJlZml4ID09ICIuIjsK
LSAgICAgICAgICAgICAgICB2YXIgbnVtID0gcmVhZF93aGlsZShmdW5jdGlvbihjaCwgaSl7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIngiIHx8IGNoID09ICJYIikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX3gpIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc194ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzX3gg
JiYgKGNoID09ICJFIiB8fCBjaCA9PSAiZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNfZSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaGFzX2UgPSBhZnRlcl9lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAiLSIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyX2UgfHwgKGkgPT0gMCAmJiAhcHJl
Zml4KSkgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA9PSAiKyIpIHJldHVybiBhZnRlcl9lOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYWZ0ZXJfZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICIu
IikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc19kb3QpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc19kb3QgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNfYWxw
aGFudW1lcmljX2NoYXIoY2gpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IGlmIChwcmVmaXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBwcmVmaXggKyBudW07
Ci0gICAgICAgICAgICAgICAgdmFyIHZhbGlkID0gcGFyc2VfanNfbnVtYmVyKG51bSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpc05hTih2YWxpZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0b2tlbigibnVtIiwgdmFsaWQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9lcnJvcigiSW52YWxpZCBzeW50YXg6ICIgKyBu
dW0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBy
ZWFkX2VzY2FwZWRfY2hhcigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSBuZXh0KHRydWUp
OwotICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAibiIgOiByZXR1cm4gIlxuIjsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiciIgOiByZXR1
cm4gIlxyIjsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAidCIgOiByZXR1cm4gIlx0IjsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAiYiIgOiByZXR1cm4gIlxiIjsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAidiIgOiByZXR1cm4gIlx2IjsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAi
ZiIgOiByZXR1cm4gIlxmIjsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiMCIgOiByZXR1cm4g
IlwwIjsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAieCIgOiByZXR1cm4gU3RyaW5nLmZyb21D
aGFyQ29kZShoZXhfYnl0ZXMoMikpOwotICAgICAgICAgICAgICAgICAgICBjYXNlICJ1IiA6IHJl
dHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGhleF9ieXRlcyg0KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQgIDogcmV0dXJuIGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfTsK
LQotICAgICAgICBmdW5jdGlvbiBoZXhfYnl0ZXMobikgewotICAgICAgICAgICAgICAgIHZhciBu
dW0gPSAwOwotICAgICAgICAgICAgICAgIGZvciAoOyBuID4gMDsgLS1uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZGlnaXQgPSBwYXJzZUludChuZXh0KHRydWUpLCAxNik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZGlnaXQpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZV9lcnJvcigiSW52YWxpZCBoZXgtY2hhcmFjdGVyIHBhdHRlcm4g
aW4gc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBudW0gPSAobnVtIDw8IDQpIHwg
ZGlnaXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBudW07Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVhZF9zdHJpbmcoKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHdpdGhfZW9mX2Vycm9yKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50
IiwgZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdW90ZSA9IG5leHQo
KSwgcmV0ID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IG5leHQodHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAiXFwiKSBjaCA9IHJlYWRfZXNjYXBlZF9j
aGFyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09IHF1
b3RlKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGNoOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuKCJzdHJpbmciLCByZXQpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Owot
Ci0gICAgICAgIGZ1bmN0aW9uIHJlYWRfbGluZV9jb21tZW50KCkgewotICAgICAgICAgICAgICAg
IG5leHQoKTsKLSAgICAgICAgICAgICAgICB2YXIgaSA9IGZpbmQoIlxuIiksIHJldDsKLSAgICAg
ICAgICAgICAgICBpZiAoaSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
Uy50ZXh0LnN1YnN0cihTLnBvcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTLnBvcyA9IFMu
dGV4dC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCA9IFMudGV4dC5zdWJzdHJpbmcoUy5wb3MsIGkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUy5wb3MgPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW4oImNvbW1lbnQxIiwgcmV0LCB0cnVlKTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBmdW5jdGlvbiByZWFkX211bHRpbGluZV9jb21tZW50KCkgewotICAgICAgICAgICAgICAgIG5l
eHQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2l0aF9lb2ZfZXJyb3IoIlVudGVybWluYXRl
ZCBtdWx0aWxpbmUgY29tbWVudCIsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaSA9IGZpbmQoIiovIiwgdHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dCA9IFMudGV4dC5zdWJzdHJpbmcoUy5wb3MsIGkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvayA9IHRva2VuKCJjb21tZW50MiIsIHRleHQsIHRydWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUy5wb3MgPSBpICsgMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFMubGlu
ZSArPSB0ZXh0LnNwbGl0KCJcbiIpLmxlbmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBTLm5ld2xpbmVfYmVmb3JlID0gdGV4dC5pbmRleE9mKCJcbiIpID49IDA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdG9rOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9
OwotCi0gICAgICAgIGZ1bmN0aW9uIHJlYWRfcmVnZXhwKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB3aXRoX2VvZl9lcnJvcigiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiIsIGZ1
bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldl9iYWNrc2xhc2ggPSBm
YWxzZSwgcmVnZXhwID0gIiIsIGNoLCBpbl9jbGFzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKChjaCA9IG5leHQodHJ1ZSkpKSBpZiAocHJldl9iYWNrc2xhc2gpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhwICs9ICJcXCIgKyBjaDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9iYWNrc2xhc2ggPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIlsiKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluX2NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVnZXhwICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA9PSAiXSIgJiYgaW5fY2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5fY2xhc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVnZXhwICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9
PSAiLyIgJiYgIWluX2NsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiXFwiKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfYmFja3NsYXNoID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZ2V4cCArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBtb2RzID0gcmVhZF93aGlsZShmdW5jdGlvbihjaCl7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBIT1AoUkVHRVhQX01PRElGSUVSUywg
Y2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdG9rZW4oInJlZ2V4cCIsIFsgcmVnZXhwLCBtb2RzIF0pOwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIHJlYWRfb3BlcmF0b3IocHJl
Zml4KSB7Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ3JvdyhvcCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFwZWVrKCkpIHJldHVybiBvcDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBiaWdnZXIgPSBvcCArIHBlZWsoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChIT1AoT1BFUkFUT1JTLCBiaWdnZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3co
YmlnZ2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbigib3BlcmF0
b3IiLCBncm93KHByZWZpeCB8fCBuZXh0KCkpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5j
dGlvbiBoYW5kbGVfc2xhc2goKSB7Ci0gICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAg
ICAgICAgIHZhciByZWdleF9hbGxvd2VkID0gUy5yZWdleF9hbGxvd2VkOwotICAgICAgICAgICAg
ICAgIHN3aXRjaCAocGVlaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIi8iOgotICAg
ICAgICAgICAgICAgICAgICAgICAgUy5jb21tZW50c19iZWZvcmUucHVzaChyZWFkX2xpbmVfY29t
bWVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFMucmVnZXhfYWxsb3dlZCA9IHJlZ2V4
X2FsbG93ZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dF90b2tlbigpOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlICIqIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFMu
Y29tbWVudHNfYmVmb3JlLnB1c2gocmVhZF9tdWx0aWxpbmVfY29tbWVudCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFMucmVnZXhfYWxsb3dlZCA9IHJlZ2V4X2FsbG93ZWQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dF90b2tlbigpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gUy5yZWdleF9hbGxvd2VkID8gcmVhZF9yZWdleHAoKSA6
IHJlYWRfb3BlcmF0b3IoIi8iKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBoYW5k
bGVfZG90KCkgewotICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaXNfZGlnaXQocGVlaygpKQotICAgICAgICAgICAgICAgICAgICAgICAgPyByZWFkX251bSgi
LiIpCi0gICAgICAgICAgICAgICAgICAgICAgICA6IHRva2VuKCJwdW5jIiwgIi4iKTsKLSAgICAg
ICAgfTsKLQotICAgICAgICBmdW5jdGlvbiByZWFkX3dvcmQoKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHdvcmQgPSByZWFkX3doaWxlKGlzX2lkZW50aWZpZXJfY2hhcik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICFIT1AoS0VZV09SRFMsIHdvcmQpCi0gICAgICAgICAgICAgICAgICAgICAgICA/
IHRva2VuKCJuYW1lIiwgd29yZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogSE9QKE9QRVJB
VE9SUywgd29yZCkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gdG9rZW4oIm9wZXJhdG9yIiwg
d29yZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogSE9QKEtFWVdPUkRTX0FUT00sIHdvcmQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICA/IHRva2VuKCJhdG9tIiwgd29yZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIDogdG9rZW4oImtleXdvcmQiLCB3b3JkKTsKLSAgICAgICAgfTsKLQot
ICAgICAgICBmdW5jdGlvbiB3aXRoX2VvZl9lcnJvcihlb2ZfZXJyb3IsIGNvbnQpIHsKLSAgICAg
ICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnQoKTsK
LSAgICAgICAgICAgICAgICB9IGNhdGNoKGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZXggPT09IEVYX0VPRikgcGFyc2VfZXJyb3IoZW9mX2Vycm9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgdGhyb3cgZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Owot
Ci0gICAgICAgIGZ1bmN0aW9uIG5leHRfdG9rZW4oZm9yY2VfcmVnZXhwKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGZvcmNlX3JlZ2V4cCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWFkX3JlZ2V4cCgpOwotICAgICAgICAgICAgICAgIHNraXBfd2hpdGVzcGFjZSgpOwotICAgICAg
ICAgICAgICAgIHN0YXJ0X3Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gcGVlaygp
OwotICAgICAgICAgICAgICAgIGlmICghY2gpIHJldHVybiB0b2tlbigiZW9mIik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzX2RpZ2l0KGNoKSkgcmV0dXJuIHJlYWRfbnVtKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHJldHVybiByZWFkX3N0cmluZygpOwot
ICAgICAgICAgICAgICAgIGlmIChIT1AoUFVOQ19DSEFSUywgY2gpKSByZXR1cm4gdG9rZW4oInB1
bmMiLCBuZXh0KCkpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAiLiIpIHJldHVybiBoYW5k
bGVfZG90KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICIvIikgcmV0dXJuIGhhbmRsZV9z
bGFzaCgpOwotICAgICAgICAgICAgICAgIGlmIChIT1AoT1BFUkFUT1JfQ0hBUlMsIGNoKSkgcmV0
dXJuIHJlYWRfb3BlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNfaWRlbnRpZmllcl9j
aGFyKGNoKSkgcmV0dXJuIHJlYWRfd29yZCgpOwotICAgICAgICAgICAgICAgIHBhcnNlX2Vycm9y
KCJVbmV4cGVjdGVkIGNoYXJhY3RlciAnIiArIGNoICsgIiciKTsKLSAgICAgICAgfTsKLQotICAg
ICAgICBuZXh0X3Rva2VuLmNvbnRleHQgPSBmdW5jdGlvbihuYykgewotICAgICAgICAgICAgICAg
IGlmIChuYykgUyA9IG5jOwotICAgICAgICAgICAgICAgIHJldHVybiBTOwotICAgICAgICB9Owot
Ci0gICAgICAgIHJldHVybiBuZXh0X3Rva2VuOwotCi19OwotCi0vKiAtLS0tLVsgUGFyc2VyIChj
b25zdGFudHMpIF0tLS0tLSAqLwotCi12YXIgVU5BUllfUFJFRklYID0gYXJyYXlfdG9faGFzaChb
Ci0gICAgICAgICJ0eXBlb2YiLAotICAgICAgICAidm9pZCIsCi0gICAgICAgICJkZWxldGUiLAot
ICAgICAgICAiLS0iLAotICAgICAgICAiKysiLAotICAgICAgICAiISIsCi0gICAgICAgICJ+IiwK
LSAgICAgICAgIi0iLAotICAgICAgICAiKyIKLV0pOwotCi12YXIgVU5BUllfUE9TVEZJWCA9IGFy
cmF5X3RvX2hhc2goWyAiLS0iLCAiKysiIF0pOwotCi12YXIgQVNTSUdOTUVOVCA9IChmdW5jdGlv
bihhLCByZXQsIGkpewotICAgICAgICB3aGlsZSAoaSA8IGEubGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0W2FbaV1dID0gYVtpXS5zdWJzdHIoMCwgYVtpXS5sZW5ndGggLSAxKTsKLSAgICAg
ICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLX0pKAotICAg
ICAgICBbIis9IiwgIi09IiwgIi89IiwgIio9IiwgIiU9IiwgIj4+PSIsICI8PD0iLCAiPj4+PSIs
ICJ8PSIsICJePSIsICImPSJdLAotICAgICAgICB7ICI9IjogdHJ1ZSB9LAotICAgICAgICAwCi0p
OwotCi12YXIgUFJFQ0VERU5DRSA9IChmdW5jdGlvbihhLCByZXQpewotICAgICAgICBmb3IgKHZh
ciBpID0gMCwgbiA9IDE7IGkgPCBhLmxlbmd0aDsgKytpLCArK24pIHsKLSAgICAgICAgICAgICAg
ICB2YXIgYiA9IGFbaV07Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiLmxl
bmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXRbYltqXV0gPSBuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotfSkoCi0gICAg
ICAgIFsKLSAgICAgICAgICAgICAgICBbInx8Il0sCi0gICAgICAgICAgICAgICAgWyImJiJdLAot
ICAgICAgICAgICAgICAgIFsifCJdLAotICAgICAgICAgICAgICAgIFsiXiJdLAotICAgICAgICAg
ICAgICAgIFsiJiJdLAotICAgICAgICAgICAgICAgIFsiPT0iLCAiPT09IiwgIiE9IiwgIiE9PSJd
LAotICAgICAgICAgICAgICAgIFsiPCIsICI+IiwgIjw9IiwgIj49IiwgImluIiwgImluc3RhbmNl
b2YiXSwKLSAgICAgICAgICAgICAgICBbIj4+IiwgIjw8IiwgIj4+PiJdLAotICAgICAgICAgICAg
ICAgIFsiKyIsICItIl0sCi0gICAgICAgICAgICAgICAgWyIqIiwgIi8iLCAiJSJdCi0gICAgICAg
IF0sCi0gICAgICAgIHt9Ci0pOwotCi12YXIgU1RBVEVNRU5UU19XSVRIX0xBQkVMUyA9IGFycmF5
X3RvX2hhc2goWyAiZm9yIiwgImRvIiwgIndoaWxlIiwgInN3aXRjaCIgXSk7Ci0KLXZhciBBVE9N
SUNfU1RBUlRfVE9LRU4gPSBhcnJheV90b19oYXNoKFsgImF0b20iLCAibnVtIiwgInN0cmluZyIs
ICJyZWdleHAiLCAibmFtZSIgXSk7Ci0KLS8qIC0tLS0tWyBQYXJzZXIgXS0tLS0tICovCi0KLWZ1
bmN0aW9uIE5vZGVXaXRoVG9rZW4oc3RyLCBzdGFydCwgZW5kKSB7Ci0gICAgICAgIHRoaXMubmFt
ZSA9IHN0cjsKLSAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OwotICAgICAgICB0aGlzLmVuZCA9
IGVuZDsKLX07Ci0KLU5vZGVXaXRoVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24o
KSB7IHJldHVybiB0aGlzLm5hbWU7IH07Ci0KLWZ1bmN0aW9uIHBhcnNlKCRURVhULCBzdHJpY3Rf
bW9kZSwgZW1iZWRfdG9rZW5zKSB7Ci0KLSAgICAgICAgdmFyIFMgPSB7Ci0gICAgICAgICAgICAg
ICAgaW5wdXQgICAgICAgOiB0eXBlb2YgJFRFWFQgPT0gInN0cmluZyIgPyB0b2tlbml6ZXIoJFRF
WFQsIHRydWUpIDogJFRFWFQsCi0gICAgICAgICAgICAgICAgdG9rZW4gICAgICAgOiBudWxsLAot
ICAgICAgICAgICAgICAgIHByZXYgICAgICAgIDogbnVsbCwKLSAgICAgICAgICAgICAgICBwZWVr
ZWQgICAgICA6IG51bGwsCi0gICAgICAgICAgICAgICAgaW5fZnVuY3Rpb24gOiAwLAotICAgICAg
ICAgICAgICAgIGluX2xvb3AgICAgIDogMCwKLSAgICAgICAgICAgICAgICBsYWJlbHMgICAgICA6
IFtdCi0gICAgICAgIH07Ci0KLSAgICAgICAgUy50b2tlbiA9IG5leHQoKTsKLQotICAgICAgICBm
dW5jdGlvbiBpcyh0eXBlLCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc190b2tl
bihTLnRva2VuLCB0eXBlLCB2YWx1ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24g
cGVlaygpIHsgcmV0dXJuIFMucGVla2VkIHx8IChTLnBlZWtlZCA9IFMuaW5wdXQoKSk7IH07Ci0K
LSAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHsKLSAgICAgICAgICAgICAgICBTLnByZXYgPSBTLnRv
a2VuOwotICAgICAgICAgICAgICAgIGlmIChTLnBlZWtlZCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUy50b2tlbiA9IFMucGVla2VkOwotICAgICAgICAgICAgICAgICAgICAgICAgUy5wZWVr
ZWQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBTLnRva2VuID0gUy5pbnB1dCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gUy50b2tlbjsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBwcmV2
KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBTLnByZXY7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgZnVuY3Rpb24gY3JvYWsobXNnLCBsaW5lLCBjb2wsIHBvcykgewotICAgICAgICAgICAgICAg
IHZhciBjdHggPSBTLmlucHV0LmNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBqc19lcnJvciht
c2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAhPSBudWxsID8gbGluZSA6IGN0eC50
b2tsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCAhPSBudWxsID8gY29sIDogY3R4
LnRva2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgIT0gbnVsbCA/IHBvcyA6IGN0
eC50b2twb3MpOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIHRva2VuX2Vycm9yKHRv
a2VuLCBtc2cpIHsKLSAgICAgICAgICAgICAgICBjcm9hayhtc2csIHRva2VuLmxpbmUsIHRva2Vu
LmNvbCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gdW5leHBlY3RlZCh0b2tlbikg
ewotICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSBTLnRva2VuOwotICAgICAgICAgICAgICAgIHRva2VuX2Vycm9yKHRva2Vu
LCAiVW5leHBlY3RlZCB0b2tlbjogIiArIHRva2VuLnR5cGUgKyAiICgiICsgdG9rZW4udmFsdWUg
KyAiKSIpOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGV4cGVjdF90b2tlbih0eXBl
LCB2YWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXModHlwZSwgdmFsKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgdG9rZW5fZXJyb3IoUy50b2tlbiwgIlVuZXhwZWN0ZWQgdG9rZW4gIiArIFMudG9r
ZW4udHlwZSArICIsIGV4cGVjdGVkICIgKyB0eXBlKTsKLSAgICAgICAgfTsKLQotICAgICAgICBm
dW5jdGlvbiBleHBlY3QocHVuYykgeyByZXR1cm4gZXhwZWN0X3Rva2VuKCJwdW5jIiwgcHVuYyk7
IH07Ci0KLSAgICAgICAgZnVuY3Rpb24gY2FuX2luc2VydF9zZW1pY29sb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICFzdHJpY3RfbW9kZSAmJiAoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBTLnRva2VuLm5sYiB8fCBpcygiZW9mIikgfHwgaXMoInB1bmMiLCAifSIpCi0gICAgICAgICAg
ICAgICAgKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBzZW1pY29sb24oKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGlzKCJwdW5jIiwgIjsiKSkgbmV4dCgpOwotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCFjYW5faW5zZXJ0X3NlbWljb2xvbigpKSB1bmV4cGVjdGVkKCk7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gYXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHNsaWNlKGFyZ3VtZW50cyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyZW50
aGVzaXNlZCgpIHsKLSAgICAgICAgICAgICAgICBleHBlY3QoIigiKTsKLSAgICAgICAgICAgICAg
ICB2YXIgZXggPSBleHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KCIpIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGV4OwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9u
IGFkZF90b2tlbnMoc3RyLCBzdGFydCwgZW5kKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5l
dyBOb2RlV2l0aFRva2VuKHN0ciwgc3RhcnQsIGVuZCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
dmFyIHN0YXRlbWVudCA9IGVtYmVkX3Rva2VucyA/IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIHZhciBzdGFydCA9IFMudG9rZW47Ci0gICAgICAgICAgICAgICAgdmFyIHN0bXQgPSAkc3Rh
dGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgc3RtdFswXSA9IGFkZF90b2tlbnMoc3RtdFswXSwg
c3RhcnQsIHByZXYoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0bXQ7Ci0gICAgICAgIH0g
OiAkc3RhdGVtZW50OwotCi0gICAgICAgIGZ1bmN0aW9uICRzdGF0ZW1lbnQoKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzKCJvcGVyYXRvciIsICIvIikpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFMucGVla2VkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIFMudG9rZW4gPSBT
LmlucHV0KHRydWUpOyAvLyBmb3JjZSByZWdleHAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChTLnRva2VuLnR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAibnVtIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAicmVnZXhwIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAib3BlcmF0
b3IiOgotICAgICAgICAgICAgICAgICAgICBjYXNlICJhdG9tIjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzaW1wbGVfc3RhdGVtZW50KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAibmFtZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNfdG9rZW4ocGVl
aygpLCAicHVuYyIsICI6IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsYWJl
bGVkX3N0YXRlbWVudChwcm9nMShTLnRva2VuLnZhbHVlLCBuZXh0LCBuZXh0KSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBzaW1wbGVfc3RhdGVtZW50KCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSAicHVuYyI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KFMudG9rZW4udmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ7IjoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJibG9jayIsIGJsb2Nr
XygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJbIjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICIoIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHNpbXBsZV9zdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICI7IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXMoImJsb2NrIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5leHBlY3RlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgImtleXdvcmQiOgotICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChwcm9nMShTLnRva2VuLnZhbHVlLCBuZXh0KSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgImJyZWFrIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJyZWFrX2NvbnQoImJyZWFrIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICJjb250aW51ZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBi
cmVha19jb250KCJjb250aW51ZSIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAiZGVidWdnZXIiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1pY29sb24o
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJkZWJ1Z2dlciIp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZG8iOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKGJvZHkpewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdF90b2tlbigia2V5d29yZCIsICJ3aGls
ZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcygi
ZG8iLCBwcm9nMShwYXJlbnRoZXNpc2VkLCBzZW1pY29sb24pLCBib2R5KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSkoaW5fbG9vcChzdGF0ZW1lbnQpKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgImZvciI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmb3JfKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICJmdW5jdGlvbiI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbl8odHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJpZiI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZl8oKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgInJldHVybiI6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChTLmluX2Z1bmN0aW9uID09IDApCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JvYWsoIidyZXR1cm4nIG91dHNpZGUgb2YgZnVuY3Rpb24iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJyZXR1cm4iLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMoInB1bmMiLCAiOyIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChuZXh0KCksIG51bGwp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbl9pbnNlcnRf
c2VtaWNvbG9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g
bnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9nMShl
eHByZXNzaW9uLCBzZW1pY29sb24pKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgInN3aXRjaCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcygi
c3dpdGNoIiwgcGFyZW50aGVzaXNlZCgpLCBzd2l0Y2hfYmxvY2tfKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAidGhyb3ciOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYXMoInRocm93IiwgcHJvZzEoZXhwcmVzc2lvbiwgc2VtaWNvbG9uKSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ0cnkiOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5XygpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAidmFyIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHByb2cxKHZhcl8sIHNlbWljb2xvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJjb25zdCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
cm9nMShjb25zdF8sIHNlbWljb2xvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICJ3aGlsZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcygi
d2hpbGUiLCBwYXJlbnRoZXNpc2VkKCksIGluX2xvb3Aoc3RhdGVtZW50KSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICJ3aXRoIjoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGFzKCJ3aXRoIiwgcGFyZW50aGVzaXNlZCgpLCBzdGF0ZW1lbnQoKSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGxhYmVs
ZWRfc3RhdGVtZW50KGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgUy5sYWJlbHMucHVzaChsYWJl
bCk7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gUy50b2tlbiwgc3RhdCA9IHN0YXRlbWVu
dCgpOwotICAgICAgICAgICAgICAgIGlmIChzdHJpY3RfbW9kZSAmJiAhSE9QKFNUQVRFTUVOVFNf
V0lUSF9MQUJFTFMsIHN0YXRbMF0pKQotICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3Rl
ZChzdGFydCk7Ci0gICAgICAgICAgICAgICAgUy5sYWJlbHMucG9wKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGFzKCJsYWJlbCIsIGxhYmVsLCBzdGF0KTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBmdW5jdGlvbiBzaW1wbGVfc3RhdGVtZW50KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBh
cygic3RhdCIsIHByb2cxKGV4cHJlc3Npb24sIHNlbWljb2xvbikpOwotICAgICAgICB9OwotCi0g
ICAgICAgIGZ1bmN0aW9uIGJyZWFrX2NvbnQodHlwZSkgewotICAgICAgICAgICAgICAgIHZhciBu
YW1lID0gaXMoIm5hbWUiKSA/IFMudG9rZW4udmFsdWUgOiBudWxsOwotICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVtYmVyKG5hbWUsIFMubGFiZWxzKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JvYWsoIkxhYmVsICIgKyBuYW1lICsgIiB3aXRo
b3V0IG1hdGNoaW5nIGxvb3Agb3Igc3RhdGVtZW50Iik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKFMuaW5fbG9vcCA9PSAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY3JvYWsodHlwZSArICIgbm90IGluc2lkZSBhIGxvb3Agb3Igc3dpdGNoIik7Ci0gICAg
ICAgICAgICAgICAgc2VtaWNvbG9uKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFzKHR5cGUs
IG5hbWUpOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGZvcl8oKSB7Ci0gICAgICAg
ICAgICAgICAgZXhwZWN0KCIoIik7Ci0gICAgICAgICAgICAgICAgdmFyIGhhc192YXIgPSBpcygi
a2V5d29yZCIsICJ2YXIiKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzX3ZhcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXMoIm5hbWUiKSAm
JiBpc190b2tlbihwZWVrKCksICJvcGVyYXRvciIsICJpbiIpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmb3IgKGkgaW4gZm9vKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5h
bWUgPSBTLnRva2VuLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOyBuZXh0
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gZXhwcmVzc2lvbigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCIpIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYXMoImZvci1pbiIsIGhhc192YXIsIG5hbWUsIG9iaiwgaW5fbG9vcChzdGF0ZW1l
bnQpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2xhc3NpYyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbml0ID0gaXMoInB1
bmMiLCAiOyIpID8gbnVsbCA6IGhhc192YXIgPyB2YXJfKCkgOiBleHByZXNzaW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3QoIjsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0ZXN0ID0gaXMoInB1bmMiLCAiOyIpID8gbnVsbCA6IGV4cHJlc3Npb24oKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdCgiOyIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHN0ZXAgPSBpcygicHVuYyIsICIpIikgPyBudWxsIDogZXhwcmVzc2lvbigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0KCIpIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYXMoImZvciIsIGluaXQsIHRlc3QsIHN0ZXAsIGluX2xvb3Aoc3RhdGVtZW50KSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGZ1bmN0aW9u
Xyhpbl9zdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGlzKCJuYW1lIikg
PyBwcm9nMShTLnRva2VuLnZhbHVlLCBuZXh0KSA6IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYg
KGluX3N0YXRlbWVudCAmJiAhbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0
ZWQoKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoIigiKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYXMoaW5fc3RhdGVtZW50ID8gImRlZnVuIiA6ICJmdW5jdGlvbiIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24oZmlyc3QsIGEpewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghaXMoInB1bmMiLCAiKSIpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QpIGZpcnN0
ID0gZmFsc2U7IGVsc2UgZXhwZWN0KCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzKCJuYW1lIikpIHVuZXhwZWN0ZWQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEucHVzaChTLnRva2VuLnZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
OwotICAgICAgICAgICAgICAgICAgICAgICAgICB9KSh0cnVlLCBbXSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGJvZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9u
KCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytTLmluX2Z1bmN0aW9uOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29wID0gUy5pbl9sb29wOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMuaW5fbG9vcCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBibG9ja18oKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtLVMuaW5fZnVuY3Rpb247Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUy5pbl9sb29wID0gbG9vcDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKSk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gaWZfKCkgewotICAgICAgICAgICAgICAg
IHZhciBjb25kID0gcGFyZW50aGVzaXNlZCgpLCBib2R5ID0gc3RhdGVtZW50KCksIGJlbHNlOwot
ICAgICAgICAgICAgICAgIGlmIChpcygia2V5d29yZCIsICJlbHNlIikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlbHNlID0gc3Rh
dGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBhcygi
aWYiLCBjb25kLCBib2R5LCBiZWxzZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24g
YmxvY2tfKCkgewotICAgICAgICAgICAgICAgIGV4cGVjdCgieyIpOwotICAgICAgICAgICAgICAg
IHZhciBhID0gW107Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCFpcygicHVuYyIsICJ9IikpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpcygiZW9mIikpIHVuZXhwZWN0ZWQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGEucHVzaChzdGF0ZW1lbnQoKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYTsK
LSAgICAgICAgfTsKLQotICAgICAgICB2YXIgc3dpdGNoX2Jsb2NrXyA9IGN1cnJ5KGluX2xvb3As
IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KCJ7Iik7Ci0gICAgICAgICAgICAg
ICAgdmFyIGEgPSBbXSwgY3VyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIWlzKCJw
dW5jIiwgIn0iKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzKCJlb2YiKSkgdW5l
eHBlY3RlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzKCJrZXl3b3JkIiwgImNh
c2UiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IFtdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhLnB1c2goWyBleHByZXNzaW9uKCksIGN1ciBdKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0KCI6Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpcygia2V5d29yZCIsICJkZWZhdWx0
IikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoIjoiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3VyID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEu
cHVzaChbIG51bGwsIGN1ciBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWN1cikgdW5leHBlY3RlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dXIucHVzaChzdGF0ZW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gdHJ5XygpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgYm9keSA9IGJsb2NrXygpLCBiY2F0Y2gsIGJmaW5hbGx5OwotICAgICAgICAg
ICAgICAgIGlmIChpcygia2V5d29yZCIsICJjYXRjaCIpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoIigiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXMoIm5hbWUiKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3JvYWsoIk5hbWUgZXhwZWN0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBuYW1lID0gUy50b2tlbi52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5l
eHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgiKSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYmNhdGNoID0gWyBuYW1lLCBibG9ja18oKSBdOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoaXMoImtleXdvcmQiLCAiZmluYWxseSIpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiZmlu
YWxseSA9IGJsb2NrXygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
IWJjYXRjaCAmJiAhYmZpbmFsbHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjcm9haygiTWlz
c2luZyBjYXRjaC9maW5hbGx5IGJsb2NrcyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBhcygi
dHJ5IiwgYm9keSwgYmNhdGNoLCBiZmluYWxseSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVu
Y3Rpb24gdmFyZGVmcygpIHsKLSAgICAgICAgICAgICAgICB2YXIgYSA9IFtdOwotICAgICAgICAg
ICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXMoIm5hbWUi
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBTLnRva2VuLnZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzKCJvcGVy
YXRvciIsICI9IikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2goWyBuYW1lLCBleHByZXNzaW9u
KGZhbHNlKSBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGEucHVzaChbIG5hbWUgXSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzKCJwdW5jIiwgIiwiKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biBhOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIHZhcl8oKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGFzKCJ2YXIiLCB2YXJkZWZzKCkpOwotICAgICAgICB9OwotCi0gICAgICAg
IGZ1bmN0aW9uIGNvbnN0XygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXMoImNvbnN0Iiwg
dmFyZGVmcygpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBuZXdfKCkgewotICAg
ICAgICAgICAgICAgIHZhciBuZXdleHAgPSBleHByX2F0b20oZmFsc2UpLCBhcmdzOwotICAgICAg
ICAgICAgICAgIGlmIChpcygicHVuYyIsICIoIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBleHByX2xpc3QoIikiKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9
IFtdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0
cyhhcygibmV3IiwgbmV3ZXhwLCBhcmdzKSwgdHJ1ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
ZnVuY3Rpb24gZXhwcl9hdG9tKGFsbG93X2NhbGxzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlz
KCJvcGVyYXRvciIsICJuZXciKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld18oKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGlzKCJvcGVyYXRvciIpICYmIEhPUChVTkFSWV9QUkVGSVgs
IFMudG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV91
bmFyeSgidW5hcnktcHJlZml4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2cxKFMudG9rZW4udmFsdWUsIG5leHQpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwcl9hdG9tKGFsbG93X2NhbGxzKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpcygicHVuYyIpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKFMudG9rZW4udmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICIoIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0cyhwcm9n
MShleHByZXNzaW9uLCBjdXJyeShleHBlY3QsICIpIikpLCBhbGxvd19jYWxscyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAiWyI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1
YnNjcmlwdHMoYXJyYXlfKCksIGFsbG93X2NhbGxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICJ7IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0cyhvYmplY3Rf
KCksIGFsbG93X2NhbGxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuZXhwZWN0ZWQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzKCJrZXl3b3JkIiwgImZ1bmN0aW9uIikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRz
KGZ1bmN0aW9uXyhmYWxzZSksIGFsbG93X2NhbGxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKEhPUChBVE9NSUNfU1RBUlRfVE9LRU4sIFMudG9rZW4udHlwZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdG9tID0gUy50b2tlbi50eXBlID09ICJyZWdl
eHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXMoInJlZ2V4cCIsIFMudG9r
ZW4udmFsdWVbMF0sIFMudG9rZW4udmFsdWVbMV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogYXMoUy50b2tlbi50eXBlLCBTLnRva2VuLnZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRzKHByb2cxKGF0b20sIG5leHQpLCBhbGxvd19jYWxs
cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQoKTsKLSAg
ICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBleHByX2xpc3QoY2xvc2luZywgYWxsb3dfdHJh
aWxpbmdfY29tbWEsIGFsbG93X2VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0g
dHJ1ZSwgYSA9IFtdOwotICAgICAgICAgICAgICAgIHdoaWxlICghaXMoInB1bmMiLCBjbG9zaW5n
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSBmaXJzdCA9IGZhbHNlOyBl
bHNlIGV4cGVjdCgiLCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWls
aW5nX2NvbW1hICYmIGlzKCJwdW5jIiwgY2xvc2luZykpIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzKCJwdW5jIiwgIiwiKSAmJiBhbGxvd19lbXB0eSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2goWyAiYXRvbSIsICJ1bmRlZmluZWQiIF0pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYS5wdXNoKGV4cHJlc3Npb24oZmFsc2UpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBhOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGFycmF5
XygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXMoImFycmF5IiwgZXhwcl9saXN0KCJdIiwg
IXN0cmljdF9tb2RlLCB0cnVlKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gb2Jq
ZWN0XygpIHsKLSAgICAgICAgICAgICAgICB2YXIgZmlyc3QgPSB0cnVlLCBhID0gW107Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKCFpcygicHVuYyIsICJ9IikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChmaXJzdCkgZmlyc3QgPSBmYWxzZTsgZWxzZSBleHBlY3QoIiwiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc3RyaWN0X21vZGUgJiYgaXMoInB1bmMiLCAifSIpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGxvdyB0cmFpbGluZyBjb21tYQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB0eXBlID0gUy50b2tlbi50eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG5hbWUgPSBhc19wcm9wZXJ0eV9uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodHlwZSA9PSAibmFtZSIgJiYgKG5hbWUgPT0gImdldCIgfHwgbmFtZSA9PSAic2V0IikgJiYg
IWlzKCJwdW5jIiwgIjoiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnB1
c2goWyBhc19uYW1lKCksIGZ1bmN0aW9uXyhmYWxzZSksIG5hbWUgXSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3QoIjoiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKFsgbmFtZSwg
ZXhwcmVzc2lvbihmYWxzZSkgXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYXMoIm9iamVjdCIsIGEpOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGFzX3By
b3BlcnR5X25hbWUoKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChTLnRva2VuLnR5cGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAibnVtIjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAic3RyaW5nIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9nMShTLnRva2Vu
LnZhbHVlLCBuZXh0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGFzX25hbWUoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBhc19uYW1lKCkgewot
ICAgICAgICAgICAgICAgIHN3aXRjaCAoUy50b2tlbi50eXBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgIm5hbWUiOgotICAgICAgICAgICAgICAgICAgICBjYXNlICJvcGVyYXRvciI6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgImtleXdvcmQiOgotICAgICAgICAgICAgICAgICAgICBj
YXNlICJhdG9tIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9nMShTLnRva2Vu
LnZhbHVlLCBuZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuZXhwZWN0ZWQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgZnVuY3Rpb24gc3Vic2NyaXB0cyhleHByLCBhbGxvd19jYWxscykgewotICAg
ICAgICAgICAgICAgIGlmIChpcygicHVuYyIsICIuIikpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRzKGFz
KCJkb3QiLCBleHByLCBhc19uYW1lKCkpLCBhbGxvd19jYWxscyk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmIChpcygicHVuYyIsICJbIikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzY3Jp
cHRzKGFzKCJzdWIiLCBleHByLCBwcm9nMShleHByZXNzaW9uLCBjdXJyeShleHBlY3QsICJdIikp
KSwgYWxsb3dfY2FsbHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
YWxsb3dfY2FsbHMgJiYgaXMoInB1bmMiLCAiKCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0cyhhcygi
Y2FsbCIsIGV4cHIsIGV4cHJfbGlzdCgiKSIpKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChhbGxvd19jYWxscyAmJiBpcygib3BlcmF0b3IiKSAmJiBIT1Ao
VU5BUllfUE9TVEZJWCwgUy50b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBwcm9nMShjdXJyeShtYWtlX3VuYXJ5LCAidW5hcnktcG9zdGZpeCIsIFMudG9rZW4u
dmFsdWUsIGV4cHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAg
ICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBtYWtlX3VuYXJ5KHRhZywgb3AsIGV4cHIpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoKG9wID09ICIrKyIgfHwgb3AgPT0gIi0tIikgJiYgIWlzX2Fzc2ln
bmFibGUoZXhwcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBjcm9haygiSW52YWxpZCB1c2Ug
b2YgIiArIG9wICsgIiBvcGVyYXRvciIpOwotICAgICAgICAgICAgICAgIHJldHVybiBhcyh0YWcs
IG9wLCBleHByKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBleHByX29wKGxlZnQs
IG1pbl9wcmVjKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9wID0gaXMoIm9wZXJhdG9yIikgPyBT
LnRva2VuLnZhbHVlIDogbnVsbDsKLSAgICAgICAgICAgICAgICB2YXIgcHJlYyA9IG9wICE9IG51
bGwgPyBQUkVDRURFTkNFW29wXSA6IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHByZWMgIT0g
bnVsbCAmJiBwcmVjID4gbWluX3ByZWMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWdodCA9IGV4cHJfb3AoZXhwcl9hdG9t
KHRydWUpLCBwcmVjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHByX29wKGFz
KCJiaW5hcnkiLCBvcCwgbGVmdCwgcmlnaHQpLCBtaW5fcHJlYyk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0OwotICAgICAgICB9OwotCi0gICAgICAgIGZ1
bmN0aW9uIGV4cHJfb3BzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBleHByX29wKGV4cHJf
YXRvbSh0cnVlKSwgMCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gbWF5YmVfY29u
ZGl0aW9uYWwoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGV4cHIgPSBleHByX29wcygpOwotICAg
ICAgICAgICAgICAgIGlmIChpcygib3BlcmF0b3IiLCAiPyIpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeWVzID0gZXhwcmVz
c2lvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoIjoiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhcygiY29uZGl0aW9uYWwiLCBleHByLCB5ZXMsIGV4
cHJlc3Npb24oZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGV4cHI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gaXNfYXNzaWduYWJsZShl
eHByKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChleHByWzBdKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgImRvdCI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgInN1YiI6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAibmFtZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwclsxXSAhPSAidGhp
cyI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIG1h
eWJlX2Fzc2lnbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IG1heWJlX2NvbmRpdGlv
bmFsKCksIHZhbCA9IFMudG9rZW4udmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlzKCJvcGVy
YXRvciIpICYmIEhPUChBU1NJR05NRU5ULCB2YWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNfYXNzaWduYWJsZShsZWZ0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcygi
YXNzaWduIiwgQVNTSUdOTUVOVFt2YWxdLCBsZWZ0LCBtYXliZV9hc3NpZ24oKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcm9haygiSW52YWxp
ZCBhc3NpZ25tZW50Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biBsZWZ0OwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGV4cHJlc3Npb24oY29tbWFz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbW1hcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdmFyIGV4cHIg
PSBtYXliZV9hc3NpZ24oKTsKLSAgICAgICAgICAgICAgICBpZiAoY29tbWFzICYmIGlzKCJwdW5j
IiwgIiwiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFzKCJzZXEiLCBleHByLCBleHByZXNzaW9uKCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKLQot
ICAgICAgICBmdW5jdGlvbiBpbl9sb29wKGNvbnQpIHsKLSAgICAgICAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgKytTLmluX2xvb3A7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY29udCgpOwotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAtLVMuaW5fbG9vcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgcmV0dXJuIGFzKCJ0b3BsZXZlbCIsIChmdW5jdGlvbihhKXsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAoIWlzKCJlb2YiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGEu
cHVzaChzdGF0ZW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGE7Ci0gICAgICAgIH0p
KFtdKSk7Ci0KLX07Ci0KLS8qIC0tLS0tWyBVdGlsaXRpZXMgXS0tLS0tICovCi0KLWZ1bmN0aW9u
IGN1cnJ5KGYpIHsKLSAgICAgICAgdmFyIGFyZ3MgPSBzbGljZShhcmd1bWVudHMsIDEpOwotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3MuY29uY2F0
KHNsaWNlKGFyZ3VtZW50cykpKTsgfTsKLX07Ci0KLWZ1bmN0aW9uIHByb2cxKHJldCkgewotICAg
ICAgICBpZiAocmV0IGluc3RhbmNlb2YgRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgcmV0ID0g
cmV0KCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgLS1u
ID4gMDsgKytpKQotICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSgpOwotICAgICAgICByZXR1
cm4gcmV0OwotfTsKLQotZnVuY3Rpb24gYXJyYXlfdG9faGFzaChhKSB7Ci0gICAgICAgIHZhciBy
ZXQgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgICAgIHJldFthW2ldXSA9IHRydWU7Ci0gICAgICAgIHJldHVybiByZXQ7Ci19Owot
Ci1mdW5jdGlvbiBzbGljZShhLCBzdGFydCkgewotICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYSwgc3RhcnQgPT0gbnVsbCA/IDAgOiBzdGFydCk7Ci19OwotCi1mdW5j
dGlvbiBjaGFyYWN0ZXJzKHN0cikgewotICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCIiKTsKLX07
Ci0KLWZ1bmN0aW9uIG1lbWJlcihuYW1lLCBhcnJheSkgewotICAgICAgICBmb3IgKHZhciBpID0g
YXJyYXkubGVuZ3RoOyAtLWkgPj0gMDspCi0gICAgICAgICAgICAgICAgaWYgKGFycmF5W2ldID09
PSBuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLX07Ci0KLWZ1bmN0aW9uIEhPUChvYmosIHByb3ApIHsKLSAgICAgICAgcmV0
dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwotfTsK
LQotLyogLS0tLS1bIEV4cG9ydHMgXS0tLS0tICovCi0KLWV4cG9ydHMudG9rZW5pemVyID0gdG9r
ZW5pemVyOwotZXhwb3J0cy5wYXJzZSA9IHBhcnNlOwotZXhwb3J0cy5zbGljZSA9IHNsaWNlOwot
ZXhwb3J0cy5jdXJyeSA9IGN1cnJ5OwotZXhwb3J0cy5tZW1iZXIgPSBtZW1iZXI7Ci1leHBvcnRz
LmFycmF5X3RvX2hhc2ggPSBhcnJheV90b19oYXNoOwotZXhwb3J0cy5QUkVDRURFTkNFID0gUFJF
Q0VERU5DRTsKLWV4cG9ydHMuS0VZV09SRFNfQVRPTSA9IEtFWVdPUkRTX0FUT007Ci1leHBvcnRz
LlJFU0VSVkVEX1dPUkRTID0gUkVTRVJWRURfV09SRFM7Ci1leHBvcnRzLktFWVdPUkRTID0gS0VZ
V09SRFM7Ci1leHBvcnRzLkFUT01JQ19TVEFSVF9UT0tFTiA9IEFUT01JQ19TVEFSVF9UT0tFTjsK
LWV4cG9ydHMuT1BFUkFUT1JTID0gT1BFUkFUT1JTOwotZXhwb3J0cy5pc19hbHBoYW51bWVyaWNf
Y2hhciA9IGlzX2FscGhhbnVtZXJpY19jaGFyOwotZXhwb3J0cy5pc19pZGVudGlmaWVyX2NoYXIg
PSBpc19pZGVudGlmaWVyX2NoYXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2FjZS9MSUNFTlNFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvYWNlL0xJQ0VOU0UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
NzYwYmUyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
YWNlL0xJQ0VOU0UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotQ29weXJpZ2h0
IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBBamF4Lm9yZyBCLlYuIG5vciB0aGUKLSAgICAgIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0g
ICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFK
QVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTlkKLURJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLU9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2FjZS9hY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2FjZS9hY2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZGVjMGUuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMTQ5MTUgKzAsMCBAQAotLyogKioqKiogQkVHSU4gTElDRU5T
RSBCTE9DSyAqKioqKgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgotICoK
LSAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5WLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QWpheC5vcmcgQi5WLiBub3IgdGhlCi0gKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgICAgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICoq
KioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0KLShmdW5jdGlvbigpIHsKLQotdmFyIEFD
RV9OQU1FU1BBQ0UgPSAiYWNlIjsKLQotdmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gdGhpczsKLX0pKCk7Ci0KLQotaWYgKCFBQ0VfTkFNRVNQQUNFICYmIHR5cGVvZiByZXF1
aXJlanMgIT09ICJ1bmRlZmluZWQiKQotICAgIHJldHVybjsKLQotCi12YXIgX2RlZmluZSA9IGZ1
bmN0aW9uKG1vZHVsZSwgZGVwcywgcGF5bG9hZCkgewotICAgIGlmICh0eXBlb2YgbW9kdWxlICE9
PSAnc3RyaW5nJykgewotICAgICAgICBpZiAoX2RlZmluZS5vcmlnaW5hbCkKLSAgICAgICAgICAg
IF9kZWZpbmUub3JpZ2luYWwuYXBwbHkod2luZG93LCBhcmd1bWVudHMpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Ryb3BwaW5nIG1vZHVsZSBiZWNhdXNlIGRl
ZmluZSB3YXNuXCd0IGEgc3RyaW5nLicpOwotICAgICAgICAgICAgY29uc29sZS50cmFjZSgpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCA9PSAyKQotICAgICAgICBwYXlsb2FkID0gZGVwczsKLQotICAgIGlmICghX2RlZmluZS5t
b2R1bGVzKQotICAgICAgICBfZGVmaW5lLm1vZHVsZXMgPSB7fTsKLQotICAgIF9kZWZpbmUubW9k
dWxlc1ttb2R1bGVdID0gcGF5bG9hZDsKLX07Ci12YXIgX3JlcXVpcmUgPSBmdW5jdGlvbihwYXJl
bnRJZCwgbW9kdWxlLCBjYWxsYmFjaykgewotICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3Ry
aW5nLmNhbGwobW9kdWxlKSA9PT0gIltvYmplY3QgQXJyYXldIikgewotICAgICAgICB2YXIgcGFy
YW1zID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbW9kdWxlLmxlbmd0aDsgaSA8
IGw7ICsraSkgewotICAgICAgICAgICAgdmFyIGRlcCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxl
W2ldKTsKLSAgICAgICAgICAgIGlmICghZGVwICYmIF9yZXF1aXJlLm9yaWdpbmFsKQotICAgICAg
ICAgICAgICAgIHJldHVybiBfcmVxdWlyZS5vcmlnaW5hbC5hcHBseSh3aW5kb3csIGFyZ3VtZW50
cyk7Ci0gICAgICAgICAgICBwYXJhbXMucHVzaChkZXApOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChjYWxsYmFjaykgewotICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgcGFyYW1zKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnc3RyaW5n
JykgewotICAgICAgICB2YXIgcGF5bG9hZCA9IGxvb2t1cChwYXJlbnRJZCwgbW9kdWxlKTsKLSAg
ICAgICAgaWYgKCFwYXlsb2FkICYmIF9yZXF1aXJlLm9yaWdpbmFsKQotICAgICAgICAgICAgcmV0
dXJuIF9yZXF1aXJlLm9yaWdpbmFsLmFwcGx5KHdpbmRvdywgYXJndW1lbnRzKTsKLQotICAgICAg
ICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gcGF5bG9hZDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChf
cmVxdWlyZS5vcmlnaW5hbCkKLSAgICAgICAgICAgIHJldHVybiBfcmVxdWlyZS5vcmlnaW5hbC5h
cHBseSh3aW5kb3csIGFyZ3VtZW50cyk7Ci0gICAgfQotfTsKLQotdmFyIG5vcm1hbGl6ZU1vZHVs
ZSA9IGZ1bmN0aW9uKHBhcmVudElkLCBtb2R1bGVOYW1lKSB7Ci0gICAgaWYgKG1vZHVsZU5hbWUu
aW5kZXhPZigiISIpICE9PSAtMSkgewotICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5z
cGxpdCgiISIpOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVu
a3NbMF0pICsgIiEiICsgbm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMV0pOwotICAg
IH0KLSAgICBpZiAobW9kdWxlTmFtZS5jaGFyQXQoMCkgPT0gIi4iKSB7Ci0gICAgICAgIHZhciBi
YXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwotICAgICAg
ICBtb2R1bGVOYW1lID0gYmFzZSArICIvIiArIG1vZHVsZU5hbWU7Ci0KLSAgICAgICAgd2hpbGUo
bW9kdWxlTmFtZS5pbmRleE9mKCIuIikgIT09IC0xICYmIHByZXZpb3VzICE9IG1vZHVsZU5hbWUp
IHsKLSAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IG1vZHVsZU5hbWU7Ci0gICAgICAgICAgICBt
b2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1te
XC9dK1wvXC5cLlwvLywgIiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vZHVs
ZU5hbWU7Ci19OwotdmFyIGxvb2t1cCA9IGZ1bmN0aW9uKHBhcmVudElkLCBtb2R1bGVOYW1lKSB7
Ci0KLSAgICBtb2R1bGVOYW1lID0gbm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBtb2R1bGVOYW1l
KTsKLQotICAgIHZhciBtb2R1bGUgPSBfZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV07Ci0gICAg
aWYgKCFtb2R1bGUpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgaWYgKHR5
cGVvZiBtb2R1bGUgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgdmFyIGV4cG9ydHMgPSB7fTsK
LSAgICAgICAgdmFyIG1vZCA9IHsKLSAgICAgICAgICAgIGlkOiBtb2R1bGVOYW1lLAotICAgICAg
ICAgICAgdXJpOiAnJywKLSAgICAgICAgICAgIGV4cG9ydHM6IGV4cG9ydHMsCi0gICAgICAgICAg
ICBwYWNrYWdlZDogdHJ1ZQotICAgICAgICB9OwotCi0gICAgICAgIHZhciByZXEgPSBmdW5jdGlv
bihtb2R1bGUsIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICByZXR1cm4gX3JlcXVpcmUobW9kdWxl
TmFtZSwgbW9kdWxlLCBjYWxsYmFjayk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIHJldHVy
blZhbHVlID0gbW9kdWxlKHJlcSwgZXhwb3J0cywgbW9kKTsKLSAgICAgICAgZXhwb3J0cyA9IHJl
dHVyblZhbHVlIHx8IG1vZC5leHBvcnRzOwotICAgICAgICBfZGVmaW5lLm1vZHVsZXNbbW9kdWxl
TmFtZV0gPSBleHBvcnRzOwotICAgICAgICByZXR1cm4gZXhwb3J0czsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbW9kdWxlOwotfTsKLQotZnVuY3Rpb24gZXhwb3J0QWNlKG5zKSB7Ci0gICAgdmFyIHJl
cXVpcmUgPSBmdW5jdGlvbihtb2R1bGUsIGNhbGxiYWNrKSB7Ci0gICAgICAgIHJldHVybiBfcmVx
dWlyZSgiIiwgbW9kdWxlLCBjYWxsYmFjayk7Ci0gICAgfTsgICAgCi0KLSAgICB2YXIgcm9vdCA9
IGdsb2JhbDsKLSAgICBpZiAobnMpIHsKLSAgICAgICAgaWYgKCFnbG9iYWxbbnNdKQotICAgICAg
ICAgICAgZ2xvYmFsW25zXSA9IHt9OwotICAgICAgICByb290ID0gZ2xvYmFsW25zXTsKLSAgICB9
Ci0KLSAgICBpZiAoIXJvb3QuZGVmaW5lIHx8ICFyb290LmRlZmluZS5wYWNrYWdlZCkgewotICAg
ICAgICBfZGVmaW5lLm9yaWdpbmFsID0gcm9vdC5kZWZpbmU7Ci0gICAgICAgIHJvb3QuZGVmaW5l
ID0gX2RlZmluZTsKLSAgICAgICAgcm9vdC5kZWZpbmUucGFja2FnZWQgPSB0cnVlOwotICAgIH0K
LQotICAgIGlmICghcm9vdC5yZXF1aXJlIHx8ICFyb290LnJlcXVpcmUucGFja2FnZWQpIHsKLSAg
ICAgICAgX3JlcXVpcmUub3JpZ2luYWwgPSByb290LnJlcXVpcmU7Ci0gICAgICAgIHJvb3QucmVx
dWlyZSA9IHJlcXVpcmU7Ci0gICAgICAgIHJvb3QucmVxdWlyZS5wYWNrYWdlZCA9IHRydWU7Ci0g
ICAgfQotfQotCi1leHBvcnRBY2UoQUNFX05BTUVTUEFDRSk7Ci0KLX0pKCk7Ci0KLWFjZS5kZWZp
bmUoJ2FjZS9hY2UnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIv
Zml4b2xkYnJvd3NlcnMnLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvZWRp
dG9yJywgJ2FjZS9lZGl0X3Nlc3Npb24nLCAnYWNlL3VuZG9tYW5hZ2VyJywgJ2FjZS92aXJ0dWFs
X3JlbmRlcmVyJywgJ2FjZS9tdWx0aV9zZWxlY3QnLCAnYWNlL3dvcmtlci93b3JrZXJfY2xpZW50
JywgJ2FjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXInLCAnYWNlL3BsYWNlaG9sZGVyJywgJ2FjZS9t
b2RlL2ZvbGRpbmcvZm9sZF9tb2RlJywgJ2FjZS90aGVtZS90ZXh0bWF0ZScsICdhY2UvY29uZmln
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXJlcXVpcmUoIi4v
bGliL2ZpeG9sZGJyb3dzZXJzIik7Ci0KLXZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsK
LXZhciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7Ci0KLXZhciBFZGl0b3IgPSByZXF1
aXJlKCIuL2VkaXRvciIpLkVkaXRvcjsKLXZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4vZWRp
dF9zZXNzaW9uIikuRWRpdFNlc3Npb247Ci12YXIgVW5kb01hbmFnZXIgPSByZXF1aXJlKCIuL3Vu
ZG9tYW5hZ2VyIikuVW5kb01hbmFnZXI7Ci12YXIgUmVuZGVyZXIgPSByZXF1aXJlKCIuL3ZpcnR1
YWxfcmVuZGVyZXIiKS5WaXJ0dWFsUmVuZGVyZXI7Ci12YXIgTXVsdGlTZWxlY3QgPSByZXF1aXJl
KCIuL211bHRpX3NlbGVjdCIpLk11bHRpU2VsZWN0OwotcmVxdWlyZSgiLi93b3JrZXIvd29ya2Vy
X2NsaWVudCIpOwotcmVxdWlyZSgiLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKTsKLXJlcXVpcmUo
Ii4vcGxhY2Vob2xkZXIiKTsKLXJlcXVpcmUoIi4vbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIpOwot
cmVxdWlyZSgiLi90aGVtZS90ZXh0bWF0ZSIpOwotCi1leHBvcnRzLmNvbmZpZyA9IHJlcXVpcmUo
Ii4vY29uZmlnIik7Ci1leHBvcnRzLnJlcXVpcmUgPSByZXF1aXJlOwotZXhwb3J0cy5lZGl0ID0g
ZnVuY3Rpb24oZWwpIHsKLSAgICBpZiAodHlwZW9mKGVsKSA9PSAic3RyaW5nIikgewotICAgICAg
ICB2YXIgX2lkID0gZWw7Ci0gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KF9pZCk7Ci0gICAgICAgIGlmICghZWwpCi0gICAgICAgICAgICB0aHJvdyAiYWNlLmVkaXQgY2Fu
J3QgZmluZCBkaXYgIyIgKyBfaWQ7Ci0gICAgfQotCi0gICAgaWYgKGVsLmVudiAmJiBlbC5lbnYu
ZWRpdG9yIGluc3RhbmNlb2YgRWRpdG9yKQotICAgICAgICByZXR1cm4gZWwuZW52LmVkaXRvcjsK
LQotICAgIHZhciBkb2MgPSBleHBvcnRzLmNyZWF0ZUVkaXRTZXNzaW9uKGRvbS5nZXRJbm5lclRl
eHQoZWwpKTsKLSAgICBlbC5pbm5lckhUTUwgPSAnJzsKLQotICAgIHZhciBlZGl0b3IgPSBuZXcg
RWRpdG9yKG5ldyBSZW5kZXJlcihlbCkpOwotICAgIG5ldyBNdWx0aVNlbGVjdChlZGl0b3IpOwot
ICAgIGVkaXRvci5zZXRTZXNzaW9uKGRvYyk7Ci0KLSAgICB2YXIgZW52ID0gewotICAgICAgICBk
b2N1bWVudDogZG9jLAotICAgICAgICBlZGl0b3I6IGVkaXRvciwKLSAgICAgICAgb25SZXNpemU6
IGVkaXRvci5yZXNpemUuYmluZChlZGl0b3IsIG51bGwpCi0gICAgfTsKLSAgICBldmVudC5hZGRM
aXN0ZW5lcih3aW5kb3csICJyZXNpemUiLCBlbnYub25SZXNpemUpOwotICAgIGVkaXRvci5vbigi
ZGVzdHJveSIsIGZ1bmN0aW9uKCkgewotICAgICAgICBldmVudC5yZW1vdmVMaXN0ZW5lcih3aW5k
b3csICJyZXNpemUiLCBlbnYub25SZXNpemUpOwotICAgIH0pOwotICAgIGVsLmVudiA9IGVkaXRv
ci5lbnYgPSBlbnY7Ci0gICAgcmV0dXJuIGVkaXRvcjsKLX07Ci1leHBvcnRzLmNyZWF0ZUVkaXRT
ZXNzaW9uID0gZnVuY3Rpb24odGV4dCwgbW9kZSkgewotICAgIHZhciBkb2MgPSBuZXcgRWRpdFNl
c3Npb24odGV4dCwgZG9jKTsKLSAgICBkb2Muc2V0VW5kb01hbmFnZXIobmV3IFVuZG9NYW5hZ2Vy
KCkpOwotICAgIHJldHVybiBkb2M7Ci19Ci1leHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Np
b247Ci1leHBvcnRzLlVuZG9NYW5hZ2VyID0gVW5kb01hbmFnZXI7Ci19KTsKLQotYWNlLmRlZmlu
ZSgnYWNlL2xpYi9maXhvbGRicm93c2VycycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgLCAnYWNlL2xpYi9yZWdleHAnLCAnYWNlL2xpYi9lczUtc2hpbSddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi1yZXF1aXJlKCIuL3JlZ2V4cCIpOwotcmVxdWly
ZSgiLi9lczUtc2hpbSIpOwotCi19KTsKLSAKLWFjZS5kZWZpbmUoJ2FjZS9saWIvcmVnZXhwJywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBv
cnRzLCBtb2R1bGUpIHsKLQotICAgIHZhciByZWFsID0gewotICAgICAgICAgICAgZXhlYzogUmVn
RXhwLnByb3RvdHlwZS5leGVjLAotICAgICAgICAgICAgdGVzdDogUmVnRXhwLnByb3RvdHlwZS50
ZXN0LAotICAgICAgICAgICAgbWF0Y2g6IFN0cmluZy5wcm90b3R5cGUubWF0Y2gsCi0gICAgICAg
ICAgICByZXBsYWNlOiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UsCi0gICAgICAgICAgICBzcGxp
dDogU3RyaW5nLnByb3RvdHlwZS5zcGxpdAotICAgICAgICB9LAotICAgICAgICBjb21wbGlhbnRF
eGVjTnBjZyA9IHJlYWwuZXhlYy5jYWxsKC8oKT8/LywgIiIpWzFdID09PSB1bmRlZmluZWQsIC8v
IGNoZWNrIGBleGVjYCBoYW5kbGluZyBvZiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91
cHMKLSAgICAgICAgY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdmFyIHggPSAvXi9nOwotICAgICAgICAgICAgcmVhbC50ZXN0LmNhbGwoeCwg
IiIpOwotICAgICAgICAgICAgcmV0dXJuICF4Lmxhc3RJbmRleDsKLSAgICAgICAgfSgpOwotCi0g
ICAgaWYgKGNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCAmJiBjb21wbGlhbnRFeGVjTnBjZykK
LSAgICAgICAgcmV0dXJuOwotICAgIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChz
dHIpIHsKLSAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyksCi0gICAgICAgICAgICBuYW1lLCByMjsKLSAgICAgICAgaWYgKCB0eXBlb2Yoc3RyKSA9PSAn
c3RyaW5nJyAmJiBtYXRjaCkgewotICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAm
JiBtYXRjaC5sZW5ndGggPiAxICYmIGluZGV4T2YobWF0Y2gsICIiKSA+IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgcjIgPSBSZWdFeHAodGhpcy5zb3VyY2UsIHJlYWwucmVwbGFjZS5jYWxsKGdldE5h
dGl2ZUZsYWdzKHRoaXMpLCAiZyIsICIiKSk7Ci0gICAgICAgICAgICAgICAgcmVhbC5yZXBsYWNl
LmNhbGwoc3RyLnNsaWNlKG1hdGNoLmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmlu
ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICh0aGlzLl94cmVnZXhwICYmIHRoaXMuX3hyZWdleHAuY2FwdHVyZU5h
bWVzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5feHJlZ2V4cC5jYXB0dXJl
TmFtZXNbaSAtIDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hbbmFtZV0gPSBtYXRjaFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVu
dCAmJiB0aGlzLmdsb2JhbCAmJiAhbWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxhc3RJbmRleCA+
IG1hdGNoLmluZGV4KSkKLSAgICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleC0tOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBtYXRjaDsKLSAgICB9OwotICAgIGlmICghY29tcGxpYW50TGFz
dEluZGV4SW5jcmVtZW50KSB7Ci0gICAgICAgIFJlZ0V4cC5wcm90b3R5cGUudGVzdCA9IGZ1bmN0
aW9uIChzdHIpIHsKLSAgICAgICAgICAgIHZhciBtYXRjaCA9IHJlYWwuZXhlYy5jYWxsKHRoaXMs
IHN0cik7Ci0gICAgICAgICAgICBpZiAobWF0Y2ggJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBd
Lmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpCi0gICAgICAgICAgICAg
ICAgdGhpcy5sYXN0SW5kZXgtLTsKLSAgICAgICAgICAgIHJldHVybiAhIW1hdGNoOwotICAgICAg
ICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldE5hdGl2ZUZsYWdzIChyZWdleCkgewotICAg
ICAgICByZXR1cm4gKHJlZ2V4Lmdsb2JhbCAgICAgPyAiZyIgOiAiIikgKwotICAgICAgICAgICAg
ICAgKHJlZ2V4Lmlnbm9yZUNhc2UgPyAiaSIgOiAiIikgKwotICAgICAgICAgICAgICAgKHJlZ2V4
Lm11bHRpbGluZSAgPyAibSIgOiAiIikgKwotICAgICAgICAgICAgICAgKHJlZ2V4LmV4dGVuZGVk
ICAgPyAieCIgOiAiIikgKyAvLyBQcm9wb3NlZCBmb3IgRVM0OyBpbmNsdWRlZCBpbiBBUzMKLSAg
ICAgICAgICAgICAgIChyZWdleC5zdGlja3kgICAgID8gInkiIDogIiIpOwotICAgIH0KLQotICAg
IGZ1bmN0aW9uIGluZGV4T2YgKGFycmF5LCBpdGVtLCBmcm9tKSB7Ci0gICAgICAgIGlmIChBcnJh
eS5wcm90b3R5cGUuaW5kZXhPZikgLy8gVXNlIHRoZSBuYXRpdmUgYXJyYXkgbWV0aG9kIGlmIGF2
YWlsYWJsZQotICAgICAgICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSwgZnJvbSk7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSBmcm9tIHx8IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSBpdGVtKQotICAgICAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLX0pOwotCi1hY2Uu
ZGVmaW5lKCdhY2UvbGliL2VzNS1zaGltJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyBdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotZnVuY3Rpb24gRW1w
dHkoKSB7fQotCi1pZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7Ci0gICAgRnVuY3Rpb24u
cHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCi0g
ICAgICAgIHZhciB0YXJnZXQgPSB0aGlzOwotICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAi
ZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5w
cm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwotICAgICAg
ICB9Ci0gICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Ig
bm9ybWFsIGNhbGwKLSAgICAgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgewotCi0gICAgICAg
ICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIg
cmVzdWx0ID0gdGFyZ2V0LmFwcGx5KAotICAgICAgICAgICAgICAgICAgICB0aGlzLAotICAgICAg
ICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCi0gICAgICAg
ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3Vs
dCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KAotICAgICAgICAgICAgICAgICAg
ICB0aGF0LAotICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3Vt
ZW50cykpCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgIH07
Ci0gICAgICAgIGlmKHRhcmdldC5wcm90b3R5cGUpIHsKLSAgICAgICAgICAgIEVtcHR5LnByb3Rv
dHlwZSA9IHRhcmdldC5wcm90b3R5cGU7Ci0gICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBu
ZXcgRW1wdHkoKTsKLSAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGJvdW5kOwotICAgIH07Ci19Ci12YXIgY2FsbCA9IEZ1bmN0aW9u
LnByb3RvdHlwZS5jYWxsOwotdmFyIHByb3RvdHlwZU9mQXJyYXkgPSBBcnJheS5wcm90b3R5cGU7
Ci12YXIgcHJvdG90eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlOwotdmFyIHNsaWNlID0g
cHJvdG90eXBlT2ZBcnJheS5zbGljZTsKLXZhciBfdG9TdHJpbmcgPSBjYWxsLmJpbmQocHJvdG90
eXBlT2ZPYmplY3QudG9TdHJpbmcpOwotdmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZP
YmplY3QuaGFzT3duUHJvcGVydHkpOwotdmFyIGRlZmluZUdldHRlcjsKLXZhciBkZWZpbmVTZXR0
ZXI7Ci12YXIgbG9va3VwR2V0dGVyOwotdmFyIGxvb2t1cFNldHRlcjsKLXZhciBzdXBwb3J0c0Fj
Y2Vzc29yczsKLWlmICgoc3VwcG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0
LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgewotICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChw
cm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTsKLSAgICBkZWZpbmVTZXR0ZXIgPSBj
YWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7Ci0gICAgbG9va3Vw
R2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOwot
ICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNl
dHRlcl9fKTsKLX0KLWlmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKLSAgICBpZihm
dW5jdGlvbigpIHsgLy8gdGVzdCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4
Ci0gICAgICAgIGZ1bmN0aW9uIG1ha2VBcnJheShsKSB7Ci0gICAgICAgICAgICB2YXIgYSA9IG5l
dyBBcnJheShsKzIpOwotICAgICAgICAgICAgYVswXSA9IGFbMV0gPSAwOwotICAgICAgICAgICAg
cmV0dXJuIGE7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9y
ZTsKLSAgICAgICAgCi0gICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5
KDIwKSk7Ci0gICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7
Ci0KLSAgICAgICAgbGVuZ3RoQmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2Ci0gICAgICAgIGFy
cmF5LnNwbGljZSg1LCAwLCAiWFhYIik7IC8vIGFkZCBvbmUgZWxlbWVudAotCi0gICAgICAgIGxl
bmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoCi0KLSAgICAgICAgaWYgKGxlbmd0aEJlZm9y
ZSArIDEgPT0gYXJyYXkubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMg
cmlnaHQgc3BsaWNlIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgYnVncwotICAgICAgICB9Ci0gICAg
fSgpKSB7Ly9JRSA2LzcKLSAgICAgICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlw
ZS5zcGxpY2U7Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFy
dCwgZGVsZXRlQ291bnQpIHsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGFycmF5X3NwbGljZS5hcHBseSh0aGlzLCBbCi0gICAgICAgICAgICAg
ICAgICAgIHN0YXJ0ID09PSB2b2lkIDAgPyAwIDogc3RhcnQsCi0gICAgICAgICAgICAgICAgICAg
IGRlbGV0ZUNvdW50ID09PSB2b2lkIDAgPyAodGhpcy5sZW5ndGggLSBzdGFydCkgOiBkZWxldGVD
b3VudAotICAgICAgICAgICAgICAgIF0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSkp
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfSBlbHNlIHsvL0lFOAotICAgICAgICBB
cnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24ocG9zLCByZW1vdmVDb3VudCl7Ci0gICAg
ICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICBpZiAocG9zID4g
MCkgewotICAgICAgICAgICAgICAgIGlmIChwb3MgPiBsZW5ndGgpCi0gICAgICAgICAgICAgICAg
ICAgIHBvcyA9IGxlbmd0aDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zID09IHZvaWQgMCkg
ewotICAgICAgICAgICAgICAgIHBvcyA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8
IDApIHsKLSAgICAgICAgICAgICAgICBwb3MgPSBNYXRoLm1heChsZW5ndGggKyBwb3MsIDApOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIShwb3MrcmVtb3ZlQ291bnQgPCBsZW5n
dGgpKQotICAgICAgICAgICAgICAgIHJlbW92ZUNvdW50ID0gbGVuZ3RoIC0gcG9zOwotCi0gICAg
ICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuc2xpY2UocG9zLCBwb3MrcmVtb3ZlQ291bnQpOwot
ICAgICAgICAgICAgdmFyIGluc2VydCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKLSAgICAg
ICAgICAgIHZhciBhZGQgPSBpbnNlcnQubGVuZ3RoOyAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHBvcyA9PT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFkZCkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciByZW1vdmUg
PSBNYXRoLm1pbihyZW1vdmVDb3VudCwgbGVuZ3RoIC0gcG9zKTsKLSAgICAgICAgICAgICAgICB2
YXIgdGFpbE9sZFBvcyA9IHBvcyArIHJlbW92ZTsKLSAgICAgICAgICAgICAgICB2YXIgdGFpbE5l
d1BvcyA9IHRhaWxPbGRQb3MgKyBhZGQgLSByZW1vdmU7Ci0gICAgICAgICAgICAgICAgdmFyIHRh
aWxDb3VudCA9IGxlbmd0aCAtIHRhaWxPbGRQb3M7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbmd0
aEFmdGVyUmVtb3ZlID0gbGVuZ3RoIC0gcmVtb3ZlOwotCi0gICAgICAgICAgICAgICAgaWYgKHRh
aWxOZXdQb3MgPCB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRhaWxDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxOZXdQb3MgPiB0YWls
T2xkUG9zKSB7IC8vIGNhc2UgQgotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0YWlsQ291
bnQ7IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0g
PSB0aGlzW3RhaWxPbGRQb3MraV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9IC8vIGVsc2UsIGFkZCA9PSByZW1vdmUgKG5vdGhpbmcgdG8gZG8pCi0KLSAgICAgICAg
ICAgICAgICBpZiAoYWRkICYmIHBvcyA9PT0gbGVuZ3RoQWZ0ZXJSZW1vdmUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZTsgLy8gdHJ1bmNhdGUg
YXJyYXkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5n
dGggPSBsZW5ndGhBZnRlclJlbW92ZSArIGFkZDsgLy8gcmVzZXJ2ZXMgc3BhY2UKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFkZDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzW3BvcytpXSA9IGluc2VydFtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZW1v
dmVkOwotICAgICAgICB9OwotICAgIH0KLX0KLWlmICghQXJyYXkuaXNBcnJheSkgewotICAgIEFy
cmF5LmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KG9iaikgewotICAgICAgICByZXR1cm4gX3Rv
U3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKLSAgICB9OwotfQotdmFyIGJveGVkU3Ry
aW5nID0gT2JqZWN0KCJhIiksCi0gICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAi
YSIgfHwgISgwIGluIGJveGVkU3RyaW5nKTsKLQotaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFj
aCkgewotICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4g
LyosIHRoaXNwKi8pIHsKLSAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAotICAg
ICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVj
dCBTdHJpbmddIiA/Ci0gICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgotICAgICAgICAg
ICAgICAgIG9iamVjdCwKLSAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAotICAgICAg
ICAgICAgaSA9IC0xLAotICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7Ci0g
ICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Ci0gICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQotICAgICAgICB9
Ci0KLSAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKGkgaW4g
c2VsZikgewotICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmpl
Y3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX0KLWlmICghQXJyYXkucHJv
dG90eXBlLm1hcCkgewotICAgIEFycmF5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVu
IC8qLCB0aGlzcCovKSB7Ci0gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKLSAg
ICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmpl
Y3QgU3RyaW5nXSIgPwotICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKLSAgICAgICAg
ICAgICAgICBvYmplY3QsCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwK
LSAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksCi0gICAgICAgICAgICB0aGlzcCA9
IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1
bmN0aW9uXSIpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBu
b3QgYSBmdW5jdGlvbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKLSAgICAgICAgICAg
ICAgICByZXN1bHRbaV0gPSBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07Ci19Ci1pZiAoIUFycmF5LnBy
b3RvdHlwZS5maWx0ZXIpIHsKLSAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24g
ZmlsdGVyKGZ1biAvKiwgdGhpc3AgKi8pIHsKLSAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0
KHRoaXMpLAotICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlz
KSA9PSAiW29iamVjdCBTdHJpbmddIiA/Ci0gICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikg
OgotICAgICAgICAgICAgICAgICAgICBvYmplY3QsCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxm
Lmxlbmd0aCA+Pj4gMCwKLSAgICAgICAgICAgIHJlc3VsdCA9IFtdLAotICAgICAgICAgICAgdmFs
dWUsCi0gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgaWYgKF90b1N0
cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKLSAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYg
KGkgaW4gc2VsZikgewotICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotfQot
aWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsKLSAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkg
PSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7Ci0gICAgICAgIHZhciBvYmplY3Qg
PSB0b09iamVjdCh0aGlzKSwKLSAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9T
dHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwotICAgICAgICAgICAgICAgIHRoaXMu
c3BsaXQoIiIpIDoKLSAgICAgICAgICAgICAgICBvYmplY3QsCi0gICAgICAgICAgICBsZW5ndGgg
PSBzZWxmLmxlbmd0aCA+Pj4gMCwKLSAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwot
ICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewotICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwg
aSwgb2JqZWN0KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9OwotfQotaWYgKCFBcnJh
eS5wcm90b3R5cGUuc29tZSkgewotICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24g
c29tZShmdW4gLyosIHRoaXNwICovKSB7Ci0gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0
aGlzKSwKLSAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykg
PT0gIltvYmplY3QgU3RyaW5nXSIgPwotICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoK
LSAgICAgICAgICAgICAgICBvYmplY3QsCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0
aCA+Pj4gMCwKLSAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwotICAgICAgICBpZiAo
X3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewotICAgICAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICBpZiAoaSBpbiBzZWxmICYmIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci19Ci1pZiAoIUFycmF5LnByb3RvdHlwZS5y
ZWR1Y2UpIHsKLSAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1
biAvKiwgaW5pdGlhbCovKSB7Ci0gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwK
LSAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltv
YmplY3QgU3RyaW5nXSIgPwotICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKLSAgICAg
ICAgICAgICAgICBvYmplY3QsCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4g
MDsKLSAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsK
LSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlv
biIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGgg
PT0gMSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5
IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IGkgPSAwOwotICAgICAgICB2YXIgcmVzdWx0OwotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA+PSAyKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikg
ewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2krK107Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKytp
ID49IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJy
ZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZb
aV0sIGksIG9iamVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH07Ci19Ci1pZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkg
ewotICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0
KGZ1biAvKiwgaW5pdGlhbCovKSB7Ci0gICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlz
KSwKLSAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0g
IltvYmplY3QgU3RyaW5nXSIgPwotICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKLSAg
ICAgICAgICAgICAgICBvYmplY3QsCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+
Pj4gMDsKLSAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIp
IHsKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5j
dGlvbiIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5n
dGggPT0gMSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQg
b2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggPj0gMikgewotICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmIChpIGluIHNl
bGYpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KC0taSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVk
dWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoaSBpbiB0aGlzKSB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGktLSk7Ci0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9OwotfQotaWYgKCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCAoWzAsIDFd
LmluZGV4T2YoMSwgMikgIT0gLTEpKSB7Ci0gICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBm
dW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgewotICAgICAgICB2YXIg
c2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmdd
IiA/Ci0gICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgotICAgICAgICAgICAgICAgIHRv
T2JqZWN0KHRoaXMpLAotICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7Ci0K
LSAgICAgICAgaWYgKCFsZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBpID0gMDsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAx
KSB7Ci0gICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKLSAgICAg
ICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAm
JiBzZWxmW2ldID09PSBzb3VnaHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfTsKLX0KLWlmICgh
QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mIHx8IChbMCwgMV0ubGFzdEluZGV4T2YoMCwgLTMp
ICE9IC0xKSkgewotICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxh
c3RJbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovKSB7Ci0gICAgICAgIHZhciBzZWxmID0g
c3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KLSAg
ICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6Ci0gICAgICAgICAgICAgICAgdG9PYmplY3Qo
dGhpcyksCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKLQotICAgICAg
ICBpZiAoIWxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAg
ICAgIHZhciBpID0gbGVuZ3RoIC0gMTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAx
KSB7Ci0gICAgICAgICAgICBpID0gTWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkp
OwotICAgICAgICB9Ci0gICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMo
aSk7Ci0gICAgICAgIGZvciAoOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKGkgaW4g
c2VsZiAmJiBzb3VnaHQgPT09IHNlbGZbaV0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfTsKLX0K
LWlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7Ci0gICAgT2JqZWN0LmdldFByb3RvdHlwZU9m
ID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBvYmpl
Y3QuX19wcm90b19fIHx8ICgKLSAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/Ci0gICAg
ICAgICAgICBvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlIDoKLSAgICAgICAgICAgIHByb3Rv
dHlwZU9mT2JqZWN0Ci0gICAgICAgICk7Ci0gICAgfTsKLX0KLWlmICghT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcikgewotICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhICIgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICJub24tb2JqZWN0OiAiOwotICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkg
ewotICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVj
dCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKLSAgICAgICAgaWYgKCFvd25z
KG9iamVjdCwgcHJvcGVydHkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBk
ZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsKLSAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1l
cmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OwotICAgICAgICBpZiAoc3VwcG9ydHNB
Y2Nlc3NvcnMpIHsKLSAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19f
OwotICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwotCi0g
ICAgICAgICAgICB2YXIgZ2V0dGVyID0gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwot
ICAgICAgICAgICAgdmFyIHNldHRlciA9IGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KTsK
LSAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7Ci0KLSAgICAgICAgICAg
IGlmIChnZXR0ZXIgfHwgc2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldHRlcikgZGVz
Y3JpcHRvci5nZXQgPSBnZXR0ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKHNldHRlcikgZGVzY3Jp
cHRvci5zZXQgPSBzZXR0ZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVj
dFtwcm9wZXJ0eV07Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwotICAgIH07Ci19Ci1pZiAo
IU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7Ci0gICAgT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgewotICAgICAgICBy
ZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTsKLSAgICB9OwotfQotaWYgKCFPYmplY3QuY3JlYXRl
KSB7Ci0gICAgdmFyIGNyZWF0ZUVtcHR5OwotICAgIGlmIChPYmplY3QucHJvdG90eXBlLl9fcHJv
dG9fXyA9PT0gbnVsbCkgewotICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHJldHVybiB7ICJfX3Byb3RvX18iOiBudWxsIH07Ci0gICAgICAgIH07Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgZW1wdHkgPSB7fTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZW1wdHkpCi0gICAg
ICAgICAgICAgICAgZW1wdHlbaV0gPSBudWxsOwotICAgICAgICAgICAgZW1wdHkuY29uc3RydWN0
b3IgPQotICAgICAgICAgICAgZW1wdHkuaGFzT3duUHJvcGVydHkgPQotICAgICAgICAgICAgZW1w
dHkucHJvcGVydHlJc0VudW1lcmFibGUgPQotICAgICAgICAgICAgZW1wdHkuaXNQcm90b3R5cGVP
ZiA9Ci0gICAgICAgICAgICBlbXB0eS50b0xvY2FsZVN0cmluZyA9Ci0gICAgICAgICAgICBlbXB0
eS50b1N0cmluZyA9Ci0gICAgICAgICAgICBlbXB0eS52YWx1ZU9mID0KLSAgICAgICAgICAgIGVt
cHR5Ll9fcHJvdG9fXyA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gZW1wdHk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlw
ZSwgcHJvcGVydGllcykgewotICAgICAgICB2YXIgb2JqZWN0OwotICAgICAgICBpZiAocHJvdG90
eXBlID09PSBudWxsKSB7Ci0gICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVFbXB0eSgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVj
dCIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlw
ZVsiKyh0eXBlb2YgcHJvdG90eXBlKSsiXSAhPSAnb2JqZWN0JyIpOwotICAgICAgICAgICAgdmFy
IFR5cGUgPSBmdW5jdGlvbiAoKSB7fTsKLSAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJv
dG90eXBlOwotICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKLSAgICAgICAgICAgIG9i
amVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByb3Bl
cnRpZXMgIT09IHZvaWQgMCkKLSAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9i
amVjdCwgcHJvcGVydGllcyk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLQot
ZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsKLSAgICB0cnkgewotICAg
ICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7Ci0gICAg
ICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKLSAgICB9IGNhdGNoIChleGNlcHRpb24p
IHsKLSAgICB9Ci19Ci1pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7Ci0gICAgdmFyIGRlZmlu
ZVByb3BlcnR5V29ya3NPbk9iamVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOwotICAg
IHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVm
aW5lZCIgfHwKLSAgICAgICAgZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKSk7Ci0gICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwg
IWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkgewotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlG
YWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKLSAgICB9Ci19Ci0KLWlmICghT2JqZWN0
LmRlZmluZVByb3BlcnR5IHx8IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKLSAgICB2YXIgRVJS
X05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFu
IG9iamVjdDogIjsKLSAgICB2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZp
bmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIgotICAgIHZhciBFUlJfQUNDRVNTT1JT
X05PVF9TVVBQT1JURUQgPSAiZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIg
KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2Ny
aXB0IGVuZ2luZSI7Ci0KLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZp
bmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKSB7Ci0gICAgICAgIGlmICgo
dHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIp
IHx8IG9iamVjdCA9PT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJS
X05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTsKLSAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3Jp
cHRvciAhPSAib2JqZWN0IiAmJiB0eXBlb2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBk
ZXNjcmlwdG9yID09PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJf
Tk9OX09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7Ci0gICAgICAgIGlmIChkZWZpbmVQ
cm9wZXJ0eUZhbGxiYWNrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5
LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIp
KSB7Ci0KLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVy
KG9iamVjdCwgcHJvcGVydHkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187Ci0gICAgICAgICAg
ICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldOwotICAgICAgICAgICAgICAgIG9iamVjdFtwcm9w
ZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwotICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3Rv
X18gPSBwcm90b3R5cGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG9i
amVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykKLSAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7
Ci0gICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAiZ2V0IikpCi0gICAgICAgICAgICAg
ICAgZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKLSAgICAg
ICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkKLSAgICAgICAgICAgICAgICBkZWZp
bmVTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5zZXQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9OwotfQotaWYgKCFPYmplY3QuZGVmaW5lUHJv
cGVydGllcykgewotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5l
UHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKLSAgICAgICAgZm9yICh2YXIgcHJvcGVy
dHkgaW4gcHJvcGVydGllcykgewotICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJv
cGVydHkpKQotICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHBy
b3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IG9iamVjdDsKLSAgICB9OwotfQotaWYgKCFPYmplY3Quc2VhbCkgewotICAgIE9iamVjdC5zZWFs
ID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9
OwotfQotaWYgKCFPYmplY3QuZnJlZXplKSB7Ci0gICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9u
IGZyZWV6ZShvYmplY3QpIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9OwotfQotdHJ5
IHsKLSAgICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsKLX0gY2F0Y2ggKGV4Y2VwdGlv
bikgewotICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkg
ewotICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewotICAgICAgICAgICAg
aWYgKHR5cGVvZiBvYmplY3QgPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgIHJldHVy
biBvYmplY3Q7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBm
cmVlemVPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9KShP
YmplY3QuZnJlZXplKTsKLX0KLWlmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7Ci0gICAg
T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2Jq
ZWN0KSB7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLWlmICghT2JqZWN0Lmlz
U2VhbGVkKSB7Ci0gICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0
KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwotfQotaWYgKCFPYmplY3QuaXNGcm96
ZW4pIHsKLSAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci19Ci1pZiAoIU9iamVjdC5pc0V4dGVuc2li
bGUpIHsKLSAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9i
amVjdCkgewotICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKLSAgICAgICAgfQot
ICAgICAgICB2YXIgbmFtZSA9ICcnOwotICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUp
KSB7Ci0gICAgICAgICAgICBuYW1lICs9ICc/JzsKLSAgICAgICAgfQotICAgICAgICBvYmplY3Rb
bmFtZV0gPSB0cnVlOwotICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFt
ZSk7Ci0gICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07Ci0gICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKLSAgICB9OwotfQotaWYgKCFPYmplY3Qua2V5cykgewotICAgIHZhciBoYXNEb250RW51
bUJ1ZyA9IHRydWUsCi0gICAgICAgIGRvbnRFbnVtcyA9IFsKLSAgICAgICAgICAgICJ0b1N0cmlu
ZyIsCi0gICAgICAgICAgICAidG9Mb2NhbGVTdHJpbmciLAotICAgICAgICAgICAgInZhbHVlT2Yi
LAotICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwKLSAgICAgICAgICAgICJpc1Byb3RvdHlw
ZU9mIiwKLSAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsCi0gICAgICAgICAgICAi
Y29uc3RydWN0b3IiCi0gICAgICAgIF0sCi0gICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRF
bnVtcy5sZW5ndGg7Ci0KLSAgICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KSB7
Ci0gICAgICAgIGhhc0RvbnRFbnVtQnVnID0gZmFsc2U7Ci0gICAgfQotCi0gICAgT2JqZWN0Lmtl
eXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewotCi0gICAgICAgIGlmICgKLSAgICAgICAgICAg
ICh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9u
IikgfHwKLSAgICAgICAgICAgIG9iamVjdCA9PT0gbnVsbAotICAgICAgICApIHsKLSAgICAgICAg
ICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmpl
Y3QiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBrZXlzID0gW107Ci0gICAgICAgIGZvciAo
dmFyIG5hbWUgaW4gb2JqZWN0KSB7Ci0gICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIG5hbWUp
KSB7Ci0gICAgICAgICAgICAgICAga2V5cy5wdXNoKG5hbWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc0RvbnRFbnVtQnVnKSB7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMCwgaWkgPSBkb250RW51bXNMZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGRvbnRFbnVtID0gZG9udEVudW1zW2ldOwotICAgICAgICAgICAgICAgIGlm
IChvd25zKG9iamVjdCwgZG9udEVudW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleXMucHVz
aChkb250RW51bSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBrZXlzOwotICAgIH07Ci0KLX0KLWlmICghRGF0ZS5ub3cpIHsKLSAg
ICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCku
Z2V0VGltZSgpOwotICAgIH07Ci19Ci12YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIw
XHhBMFx1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwMyIgKwotICAgICJcdTIwMDRc
dTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIw
MjgiICsKLSAgICAiXHUyMDI5XHVGRUZGIjsKLWlmICghU3RyaW5nLnByb3RvdHlwZS50cmltIHx8
IHdzLnRyaW0oKSkgewotICAgIHdzID0gIlsiICsgd3MgKyAiXSI7Ci0gICAgdmFyIHRyaW1CZWdp
blJlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCi0gICAgICAgIHRyaW1F
bmRSZWdleHAgPSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKLSAgICBTdHJpbmcucHJvdG90
eXBlLnRyaW0gPSBmdW5jdGlvbiB0cmltKCkgewotICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMp
LnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7
Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKLSAgICBuID0gK247Ci0gICAg
aWYgKG4gIT09IG4pIHsgLy8gaXNOYU4KLSAgICAgICAgbiA9IDA7Ci0gICAgfSBlbHNlIGlmIChu
ICE9PSAwICYmIG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgewotICAgICAgICBuID0gKG4g
PiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOwotICAgIH0KLSAgICByZXR1cm4g
bjsKLX0KLQotZnVuY3Rpb24gaXNQcmltaXRpdmUoaW5wdXQpIHsKLSAgICB2YXIgdHlwZSA9IHR5
cGVvZiBpbnB1dDsKLSAgICByZXR1cm4gKAotICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fAotICAg
ICAgICB0eXBlID09PSAidW5kZWZpbmVkIiB8fAotICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIg
fHwKLSAgICAgICAgdHlwZSA9PT0gIm51bWJlciIgfHwKLSAgICAgICAgdHlwZSA9PT0gInN0cmlu
ZyIKLSAgICApOwotfQotCi1mdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgewotICAgIHZhciB2
YWwsIHZhbHVlT2YsIHRvU3RyaW5nOwotICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKLSAg
ICAgICAgcmV0dXJuIGlucHV0OwotICAgIH0KLSAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsK
LSAgICBpZiAodHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgdmFsID0g
dmFsdWVPZi5jYWxsKGlucHV0KTsKLSAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKLSAg
ICAgICAgICAgIHJldHVybiB2YWw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdG9TdHJpbmcgPSBp
bnB1dC50b1N0cmluZzsKLSAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSAiZnVuY3Rpb24iKSB7
Ci0gICAgICAgIHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOwotICAgICAgICBpZiAoaXNQcmlt
aXRpdmUodmFsKSkgewotICAgICAgICAgICAgcmV0dXJuIHZhbDsKLSAgICAgICAgfQotICAgIH0K
LSAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7Ci19Ci12YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAo
bykgewotICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQg
dW5kZWZpbmVkCi0gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitv
KyIgdG8gb2JqZWN0Iik7Ci0gICAgfQotICAgIHJldHVybiBPYmplY3Qobyk7Ci19OwotCi19KTsK
LQotYWNlLmRlZmluZSgnYWNlL2xpYi9kb20nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLWlmICh0eXBl
b2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIpCi0gICAgcmV0dXJuOwotCi12YXIgWEhUTUxfTlMg
PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Ci0KLWV4cG9ydHMuZ2V0RG9jdW1lbnRI
ZWFkID0gZnVuY3Rpb24oZG9jKSB7Ci0gICAgaWYgKCFkb2MpCi0gICAgICAgIGRvYyA9IGRvY3Vt
ZW50OwotICAgIHJldHVybiBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhl
YWQiKVswXSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50OwotfQotCi1leHBvcnRzLmNyZWF0ZUVsZW1l
bnQgPSBmdW5jdGlvbih0YWcsIG5zKSB7Ci0gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnROUyA/Ci0gICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucyB8fCBYSFRNTF9O
UywgdGFnKSA6Ci0gICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKLX07Ci0K
LWV4cG9ydHMuaGFzQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgewotICAgIHZhciBjbGFz
c2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyk7Ci0gICAgcmV0dXJuIGNsYXNzZXMuaW5k
ZXhPZihuYW1lKSAhPT0gLTE7Ci19OwotZXhwb3J0cy5hZGRDc3NDbGFzcyA9IGZ1bmN0aW9uKGVs
LCBuYW1lKSB7Ci0gICAgaWYgKCFleHBvcnRzLmhhc0Nzc0NsYXNzKGVsLCBuYW1lKSkgewotICAg
ICAgICBlbC5jbGFzc05hbWUgKz0gIiAiICsgbmFtZTsKLSAgICB9Ci19OwotZXhwb3J0cy5yZW1v
dmVDc3NDbGFzcyA9IGZ1bmN0aW9uKGVsLCBuYW1lKSB7Ci0gICAgdmFyIGNsYXNzZXMgPSBlbC5j
bGFzc05hbWUuc3BsaXQoL1xzKy9nKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICB2YXIg
aW5kZXggPSBjbGFzc2VzLmluZGV4T2YobmFtZSk7Ci0gICAgICAgIGlmIChpbmRleCA9PSAtMSkg
ewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2xhc3Nlcy5zcGxpY2Uo
aW5kZXgsIDEpOwotICAgIH0KLSAgICBlbC5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oIiAiKTsK
LX07Ci0KLWV4cG9ydHMudG9nZ2xlQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgewotICAg
IHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyksIGFkZCA9IHRydWU7Ci0g
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgdmFyIGluZGV4ID0gY2xhc3Nlcy5pbmRleE9mKG5h
bWUpOwotICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGFkZCA9IGZhbHNlOwotICAgICAgICBjbGFzc2VzLnNwbGljZShpbmRl
eCwgMSk7Ci0gICAgfQotICAgIGlmKGFkZCkKLSAgICAgICAgY2xhc3Nlcy5wdXNoKG5hbWUpOwot
Ci0gICAgZWwuY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKCIgIik7Ci0gICAgcmV0dXJuIGFkZDsK
LX07Ci1leHBvcnRzLnNldENzc0NsYXNzID0gZnVuY3Rpb24obm9kZSwgY2xhc3NOYW1lLCBpbmNs
dWRlKSB7Ci0gICAgaWYgKGluY2x1ZGUpIHsKLSAgICAgICAgZXhwb3J0cy5hZGRDc3NDbGFzcyhu
b2RlLCBjbGFzc05hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV4cG9ydHMucmVtb3ZlQ3Nz
Q2xhc3Mobm9kZSwgY2xhc3NOYW1lKTsKLSAgICB9Ci19OwotCi1leHBvcnRzLmhhc0Nzc1N0cmlu
ZyA9IGZ1bmN0aW9uKGlkLCBkb2MpIHsKLSAgICB2YXIgaW5kZXggPSAwLCBzaGVldHM7Ci0gICAg
ZG9jID0gZG9jIHx8IGRvY3VtZW50OwotCi0gICAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0ICYm
IChzaGVldHMgPSBkb2Muc3R5bGVTaGVldHMpKSB7Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IHNo
ZWV0cy5sZW5ndGgpCi0gICAgICAgICAgICBpZiAoc2hlZXRzW2luZGV4KytdLm93bmluZ0VsZW1l
bnQuaWQgPT09IGlkKSByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKChzaGVldHMgPSBkb2Mu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoInN0eWxlIikpKSB7Ci0gICAgICAgIHdoaWxlIChpbmRleCA8
IHNoZWV0cy5sZW5ndGgpCi0gICAgICAgICAgICBpZiAoc2hlZXRzW2luZGV4KytdLmlkID09PSBp
ZCkgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfTsKLQotZXhwb3J0
cy5pbXBvcnRDc3NTdHJpbmcgPSBmdW5jdGlvbiBpbXBvcnRDc3NTdHJpbmcoY3NzVGV4dCwgaWQs
IGRvYykgewotICAgIGRvYyA9IGRvYyB8fCBkb2N1bWVudDsKLSAgICBpZiAoaWQgJiYgZXhwb3J0
cy5oYXNDc3NTdHJpbmcoaWQsIGRvYykpCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIAotICAg
IHZhciBzdHlsZTsKLSAgICAKLSAgICBpZiAoZG9jLmNyZWF0ZVN0eWxlU2hlZXQpIHsKLSAgICAg
ICAgc3R5bGUgPSBkb2MuY3JlYXRlU3R5bGVTaGVldCgpOwotICAgICAgICBzdHlsZS5jc3NUZXh0
ID0gY3NzVGV4dDsKLSAgICAgICAgaWYgKGlkKQotICAgICAgICAgICAgc3R5bGUub3duaW5nRWxl
bWVudC5pZCA9IGlkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0eWxlID0gZG9jLmNyZWF0ZUVs
ZW1lbnROUwotICAgICAgICAgICAgPyBkb2MuY3JlYXRlRWxlbWVudE5TKFhIVE1MX05TLCAic3R5
bGUiKQotICAgICAgICAgICAgOiBkb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKLQotICAgICAg
ICBzdHlsZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoY3NzVGV4dCkpOwotICAgICAg
ICBpZiAoaWQpCi0gICAgICAgICAgICBzdHlsZS5pZCA9IGlkOwotCi0gICAgICAgIGV4cG9ydHMu
Z2V0RG9jdW1lbnRIZWFkKGRvYykuYXBwZW5kQ2hpbGQoc3R5bGUpOwotICAgIH0KLX07Ci0KLWV4
cG9ydHMuaW1wb3J0Q3NzU3R5bHNoZWV0ID0gZnVuY3Rpb24odXJpLCBkb2MpIHsKLSAgICBpZiAo
ZG9jLmNyZWF0ZVN0eWxlU2hlZXQpIHsKLSAgICAgICAgZG9jLmNyZWF0ZVN0eWxlU2hlZXQodXJp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXIgbGluayA9IGV4cG9ydHMuY3JlYXRlRWxlbWVu
dCgnbGluaycpOwotICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JzsKLSAgICAgICAgbGlu
ay5ocmVmID0gdXJpOwotCi0gICAgICAgIGV4cG9ydHMuZ2V0RG9jdW1lbnRIZWFkKGRvYykuYXBw
ZW5kQ2hpbGQobGluayk7Ci0gICAgfQotfTsKLQotZXhwb3J0cy5nZXRJbm5lcldpZHRoID0gZnVu
Y3Rpb24oZWxlbWVudCkgewotICAgIHJldHVybiAoCi0gICAgICAgIHBhcnNlSW50KGV4cG9ydHMu
Y29tcHV0ZWRTdHlsZShlbGVtZW50LCAicGFkZGluZ0xlZnQiKSwgMTApICsKLSAgICAgICAgcGFy
c2VJbnQoZXhwb3J0cy5jb21wdXRlZFN0eWxlKGVsZW1lbnQsICJwYWRkaW5nUmlnaHQiKSwgMTAp
ICsgCi0gICAgICAgIGVsZW1lbnQuY2xpZW50V2lkdGgKLSAgICApOwotfTsKLQotZXhwb3J0cy5n
ZXRJbm5lckhlaWdodCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gKAotICAgICAg
ICBwYXJzZUludChleHBvcnRzLmNvbXB1dGVkU3R5bGUoZWxlbWVudCwgInBhZGRpbmdUb3AiKSwg
MTApICsKLSAgICAgICAgcGFyc2VJbnQoZXhwb3J0cy5jb21wdXRlZFN0eWxlKGVsZW1lbnQsICJw
YWRkaW5nQm90dG9tIiksIDEwKSArCi0gICAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0Ci0gICAg
KTsKLX07Ci0KLWlmICh3aW5kb3cucGFnZVlPZmZzZXQgIT09IHVuZGVmaW5lZCkgewotICAgIGV4
cG9ydHMuZ2V0UGFnZVNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gd2lu
ZG93LnBhZ2VZT2Zmc2V0OwotICAgIH07Ci0KLSAgICBleHBvcnRzLmdldFBhZ2VTY3JvbGxMZWZ0
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB3aW5kb3cucGFnZVhPZmZzZXQ7Ci0gICAg
fTsKLX0KLWVsc2UgewotICAgIGV4cG9ydHMuZ2V0UGFnZVNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7Ci0gICAgfTsKLQotICAg
IGV4cG9ydHMuZ2V0UGFnZVNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJu
IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsKLSAgICB9OwotfQotCi1pZiAod2luZG93LmdldENv
bXB1dGVkU3R5bGUpCi0gICAgZXhwb3J0cy5jb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oZWxlbWVu
dCwgc3R5bGUpIHsKLSAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgcmV0dXJuICh3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAiIikgfHwge30pW3N0eWxlXSB8fCAiIjsKLSAg
ICAgICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKSB8fCB7fTsK
LSAgICB9OwotZWxzZQotICAgIGV4cG9ydHMuY29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1l
bnQsIHN0eWxlKSB7Ci0gICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50LmN1cnJlbnRTdHlsZVtzdHlsZV07Ci0gICAgICAgIHJldHVybiBlbGVtZW50LmN1cnJlbnRT
dHlsZTsKLSAgICB9OwotCi1leHBvcnRzLnNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24oZG9jdW1l
bnQpIHsKLSAgICB2YXIgaW5uZXIgPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnQoImFjZV9pbm5lciIp
OwotICAgIGlubmVyLnN0eWxlLndpZHRoID0gIjEwMCUiOwotICAgIGlubmVyLnN0eWxlLm1pbldp
ZHRoID0gIjBweCI7Ci0gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gIjIwMHB4IjsKLSAgICBpbm5l
ci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLQotICAgIHZhciBvdXRlciA9IGV4cG9ydHMuY3Jl
YXRlRWxlbWVudCgiYWNlX291dGVyIik7Ci0gICAgdmFyIHN0eWxlID0gb3V0ZXIuc3R5bGU7Ci0K
LSAgICBzdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7Ci0gICAgc3R5bGUubGVmdCA9ICItMTAw
MDBweCI7Ci0gICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKLSAgICBzdHlsZS53aWR0aCA9
ICIyMDBweCI7Ci0gICAgc3R5bGUubWluV2lkdGggPSAiMHB4IjsKLSAgICBzdHlsZS5oZWlnaHQg
PSAiMTUwcHgiOwotICAgIHN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotCi0gICAgb3V0ZXIuYXBw
ZW5kQ2hpbGQoaW5uZXIpOwotCi0gICAgdmFyIGJvZHkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQ7Ci0gICAgYm9keS5hcHBlbmRDaGlsZChvdXRlcik7Ci0KLSAgICB2YXIgbm9TY3JvbGxiYXIg
PSBpbm5lci5vZmZzZXRXaWR0aDsKLQotICAgIHN0eWxlLm92ZXJmbG93ID0gInNjcm9sbCI7Ci0g
ICAgdmFyIHdpdGhTY3JvbGxiYXIgPSBpbm5lci5vZmZzZXRXaWR0aDsKLQotICAgIGlmIChub1Nj
cm9sbGJhciA9PSB3aXRoU2Nyb2xsYmFyKSB7Ci0gICAgICAgIHdpdGhTY3JvbGxiYXIgPSBvdXRl
ci5jbGllbnRXaWR0aDsKLSAgICB9Ci0KLSAgICBib2R5LnJlbW92ZUNoaWxkKG91dGVyKTsKLQot
ICAgIHJldHVybiBub1Njcm9sbGJhci13aXRoU2Nyb2xsYmFyOwotfTsKLWV4cG9ydHMuc2V0SW5u
ZXJIdG1sID0gZnVuY3Rpb24oZWwsIGlubmVySHRtbCkgewotICAgIHZhciBlbGVtZW50ID0gZWwu
Y2xvbmVOb2RlKGZhbHNlKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIGVs
ZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIdG1sOwotICAgIGVsLnBhcmVudE5vZGUucmVwbGFjZUNo
aWxkKGVsZW1lbnQsIGVsKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX07Ci0KLWlmICgidGV4dENv
bnRlbnQiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgewotICAgIGV4cG9ydHMuc2V0SW5u
ZXJUZXh0ID0gZnVuY3Rpb24oZWwsIGlubmVyVGV4dCkgewotICAgICAgICBlbC50ZXh0Q29udGVu
dCA9IGlubmVyVGV4dDsKLSAgICB9OwotCi0gICAgZXhwb3J0cy5nZXRJbm5lclRleHQgPSBmdW5j
dGlvbihlbCkgewotICAgICAgICByZXR1cm4gZWwudGV4dENvbnRlbnQ7Ci0gICAgfTsKLX0KLWVs
c2UgewotICAgIGV4cG9ydHMuc2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24oZWwsIGlubmVyVGV4dCkg
ewotICAgICAgICBlbC5pbm5lclRleHQgPSBpbm5lclRleHQ7Ci0gICAgfTsKLQotICAgIGV4cG9y
dHMuZ2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24oZWwpIHsKLSAgICAgICAgcmV0dXJuIGVsLmlubmVy
VGV4dDsKLSAgICB9OwotfQotCi1leHBvcnRzLmdldFBhcmVudFdpbmRvdyA9IGZ1bmN0aW9uKGRv
Y3VtZW50KSB7Ci0gICAgcmV0dXJuIGRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IGRvY3VtZW50LnBh
cmVudFdpbmRvdzsKLX07Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbGliL2V2ZW50JywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2tleXMnLCAnYWNlL2xpYi91
c2VyYWdlbnQnLCAnYWNlL2xpYi9kb20nXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7Ci0KLQotdmFyIGtleXMgPSByZXF1aXJlKCIuL2tleXMiKTsKLXZhciB1c2VyYWdlbnQg
PSByZXF1aXJlKCIuL3VzZXJhZ2VudCIpOwotdmFyIGRvbSA9IHJlcXVpcmUoIi4vZG9tIik7Ci0K
LWV4cG9ydHMuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtLCB0eXBlLCBjYWxsYmFjaykgewot
ICAgIGlmIChlbGVtLmFkZEV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgcmV0dXJuIGVsZW0uYWRk
RXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFsc2UpOwotICAgIH0KLSAgICBpZiAoZWxl
bS5hdHRhY2hFdmVudCkgewotICAgICAgICB2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgY2FsbGJhY2sod2luZG93LmV2ZW50KTsKLSAgICAgICAgfTsKLSAgICAgICAgY2Fs
bGJhY2suX3dyYXBwZXIgPSB3cmFwcGVyOwotICAgICAgICBlbGVtLmF0dGFjaEV2ZW50KCJvbiIg
KyB0eXBlLCB3cmFwcGVyKTsKLSAgICB9Ci19OwotCi1leHBvcnRzLnJlbW92ZUxpc3RlbmVyID0g
ZnVuY3Rpb24oZWxlbSwgdHlwZSwgY2FsbGJhY2spIHsKLSAgICBpZiAoZWxlbS5yZW1vdmVFdmVu
dExpc3RlbmVyKSB7Ci0gICAgICAgIHJldHVybiBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlw
ZSwgY2FsbGJhY2ssIGZhbHNlKTsKLSAgICB9Ci0gICAgaWYgKGVsZW0uZGV0YWNoRXZlbnQpIHsK
LSAgICAgICAgZWxlbS5kZXRhY2hFdmVudCgib24iICsgdHlwZSwgY2FsbGJhY2suX3dyYXBwZXIg
fHwgY2FsbGJhY2spOwotICAgIH0KLX07Ci1leHBvcnRzLnN0b3BFdmVudCA9IGZ1bmN0aW9uKGUp
IHsKLSAgICBleHBvcnRzLnN0b3BQcm9wYWdhdGlvbihlKTsKLSAgICBleHBvcnRzLnByZXZlbnRE
ZWZhdWx0KGUpOwotICAgIHJldHVybiBmYWxzZTsKLX07Ci0KLWV4cG9ydHMuc3RvcFByb3BhZ2F0
aW9uID0gZnVuY3Rpb24oZSkgewotICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikKLSAgICAgICAg
ZS5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGUuY2FuY2VsQnViYmxlID0g
dHJ1ZTsKLX07Ci0KLWV4cG9ydHMucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbihlKSB7Ci0gICAg
aWYgKGUucHJldmVudERlZmF1bHQpCi0gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICBl
bHNlCi0gICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKLX07Ci1leHBvcnRzLmdldEJ1dHRv
biA9IGZ1bmN0aW9uKGUpIHsKLSAgICBpZiAoZS50eXBlID09ICJkYmxjbGljayIpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGlmIChlLnR5cGUgPT0gImNvbnRleHRtZW51IiB8fCAoZS5jdHJsS2V5
ICYmIHVzZXJhZ2VudC5pc01hYykpCi0gICAgICAgIHJldHVybiAyOwotICAgIGlmIChlLnByZXZl
bnREZWZhdWx0KSB7Ci0gICAgICAgIHJldHVybiBlLmJ1dHRvbjsKLSAgICB9Ci0gICAgZWxzZSB7
Ci0gICAgICAgIHJldHVybiB7MTowLCAyOjIsIDQ6MX1bZS5idXR0b25dOwotICAgIH0KLX07Ci0K
LWlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0Q2FwdHVyZSkgewotICAgIGV4cG9ydHMu
Y2FwdHVyZSA9IGZ1bmN0aW9uKGVsLCBldmVudEhhbmRsZXIsIHJlbGVhc2VDYXB0dXJlSGFuZGxl
cikgewotICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7Ci0gICAgICAgIGZ1bmN0aW9uIG9uUmVs
ZWFzZUNhcHR1cmUoZSkgewotICAgICAgICAgICAgZXZlbnRIYW5kbGVyKGUpOwotCi0gICAgICAg
ICAgICBpZiAoIWNhbGxlZCkgewotICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKGUpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGVsLCAibW91c2Vtb3ZlIiwgZXZlbnRI
YW5kbGVyKTsKLSAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTGlzdGVuZXIoZWwsICJtb3VzZXVw
Iiwgb25SZWxlYXNlQ2FwdHVyZSk7Ci0gICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVy
KGVsLCAibG9zZWNhcHR1cmUiLCBvblJlbGVhc2VDYXB0dXJlKTsKLQotICAgICAgICAgICAgZWwu
cmVsZWFzZUNhcHR1cmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4cG9ydHMuYWRkTGlzdGVu
ZXIoZWwsICJtb3VzZW1vdmUiLCBldmVudEhhbmRsZXIpOwotICAgICAgICBleHBvcnRzLmFkZExp
c3RlbmVyKGVsLCAibW91c2V1cCIsIG9uUmVsZWFzZUNhcHR1cmUpOwotICAgICAgICBleHBvcnRz
LmFkZExpc3RlbmVyKGVsLCAibG9zZWNhcHR1cmUiLCBvblJlbGVhc2VDYXB0dXJlKTsKLSAgICAg
ICAgZWwuc2V0Q2FwdHVyZSgpOwotICAgIH07Ci19Ci1lbHNlIHsKLSAgICBleHBvcnRzLmNhcHR1
cmUgPSBmdW5jdGlvbihlbCwgZXZlbnRIYW5kbGVyLCByZWxlYXNlQ2FwdHVyZUhhbmRsZXIpIHsK
LSAgICAgICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHsKLSAgICAgICAgICAgIGV2ZW50SGFuZGxl
ciAmJiBldmVudEhhbmRsZXIoZSk7Ci0gICAgICAgICAgICByZWxlYXNlQ2FwdHVyZUhhbmRsZXIg
JiYgcmVsZWFzZUNhcHR1cmVIYW5kbGVyKGUpOwotCi0gICAgICAgICAgICBkb2N1bWVudC5yZW1v
dmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBldmVudEhhbmRsZXIsIHRydWUpOwotICAgICAg
ICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIG9uTW91c2VVcCwg
dHJ1ZSk7Ci0KLSAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBldmVudEhhbmRs
ZXIsIHRydWUpOwotICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwg
b25Nb3VzZVVwLCB0cnVlKTsKLSAgICB9OwotfQotCi1leHBvcnRzLmFkZE1vdXNlV2hlZWxMaXN0
ZW5lciA9IGZ1bmN0aW9uKGVsLCBjYWxsYmFjaykgewotICAgIHZhciBmYWN0b3IgPSA4OwotICAg
IHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKGUud2hlZWxEZWx0YSAh
PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBpZiAoZS53aGVlbERlbHRhWCAhPT0gdW5kZWZp
bmVkKSB7Ci0gICAgICAgICAgICAgICAgZS53aGVlbFggPSAtZS53aGVlbERlbHRhWCAvIGZhY3Rv
cjsKLSAgICAgICAgICAgICAgICBlLndoZWVsWSA9IC1lLndoZWVsRGVsdGFZIC8gZmFjdG9yOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlLndoZWVsWCA9IDA7Ci0gICAg
ICAgICAgICAgICAgZS53aGVlbFkgPSAtZS53aGVlbERlbHRhIC8gZmFjdG9yOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGUuYXhpcyAm
JiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIHsKLSAgICAgICAgICAgICAgICBlLndoZWVs
WCA9IChlLmRldGFpbCB8fCAwKSAqIDU7Ci0gICAgICAgICAgICAgICAgZS53aGVlbFkgPSAwOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlLndoZWVsWCA9IDA7Ci0gICAg
ICAgICAgICAgICAgZS53aGVlbFkgPSAoZS5kZXRhaWwgfHwgMCkgKiA1OwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKGUpOwotICAgIH07Ci0gICAgZXhwb3J0cy5h
ZGRMaXN0ZW5lcihlbCwgIkRPTU1vdXNlU2Nyb2xsIiwgbGlzdGVuZXIpOwotICAgIGV4cG9ydHMu
YWRkTGlzdGVuZXIoZWwsICJtb3VzZXdoZWVsIiwgbGlzdGVuZXIpOwotfTsKLQotZXhwb3J0cy5h
ZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyID0gZnVuY3Rpb24oZWwsIHRpbWVvdXRzLCBldmVudEhh
bmRsZXIsIGNhbGxiYWNrTmFtZSkgewotICAgIHZhciBjbGlja3MgPSAwOwotICAgIHZhciBzdGFy
dFgsIHN0YXJ0WSwgdGltZXI7Ci0gICAgdmFyIGV2ZW50TmFtZXMgPSB7Ci0gICAgICAgIDI6ICJk
YmxjbGljayIsCi0gICAgICAgIDM6ICJ0cmlwbGVjbGljayIsCi0gICAgICAgIDQ6ICJxdWFkY2xp
Y2siCi0gICAgfTsKLQotICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZWRvd24iLCBm
dW5jdGlvbihlKSB7Ci0gICAgICAgIGlmIChleHBvcnRzLmdldEJ1dHRvbihlKSAhPSAwKSB7Ci0g
ICAgICAgICAgICBjbGlja3MgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFy
IGlzTmV3Q2xpY2sgPSBNYXRoLmFicyhlLmNsaWVudFggLSBzdGFydFgpID4gNSB8fCBNYXRoLmFi
cyhlLmNsaWVudFkgLSBzdGFydFkpID4gNTsKLQotICAgICAgICAgICAgaWYgKCF0aW1lciB8fCBp
c05ld0NsaWNrKQotICAgICAgICAgICAgICAgIGNsaWNrcyA9IDA7Ci0KLSAgICAgICAgICAgIGNs
aWNrcyArPSAxOwotCi0gICAgICAgICAgICBpZiAodGltZXIpCi0gICAgICAgICAgICAgICAgY2xl
YXJUaW1lb3V0KHRpbWVyKQotICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkge3RpbWVyID0gbnVsbH0sIHRpbWVvdXRzW2NsaWNrcyAtIDFdIHx8IDYwMCk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGNsaWNrcyA9PSAxKSB7Ci0gICAgICAgICAgICBzdGFydFggPSBlLmNs
aWVudFg7Ci0gICAgICAgICAgICBzdGFydFkgPSBlLmNsaWVudFk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXSgibW91c2Vkb3duIiwgZSk7Ci0KLSAgICAg
ICAgaWYgKGNsaWNrcyA+IDQpCi0gICAgICAgICAgICBjbGlja3MgPSAwOwotICAgICAgICBlbHNl
IGlmIChjbGlja3MgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcltjYWxsYmFj
a05hbWVdKGV2ZW50TmFtZXNbY2xpY2tzXSwgZSk7Ci0gICAgfSk7Ci0KLSAgICBpZiAodXNlcmFn
ZW50LmlzT2xkSUUpIHsKLSAgICAgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcihlbCwgImRibGNsaWNr
IiwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgY2xpY2tzID0gMjsKLSAgICAgICAgICAgIGlm
ICh0aW1lcikKLSAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwotICAgICAgICAg
ICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3RpbWVyID0gbnVsbH0sIHRpbWVvdXRz
W2NsaWNrcyAtIDFdIHx8IDYwMCk7Ci0gICAgICAgICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tO
YW1lXSgibW91c2Vkb3duIiwgZSk7Ci0gICAgICAgICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tO
YW1lXShldmVudE5hbWVzW2NsaWNrc10sIGUpOwotICAgICAgICB9KTsKLSAgICB9Ci19OwotCi1m
dW5jdGlvbiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwga2V5Q29kZSkgewotICAg
IHZhciBoYXNoSWQgPSAwOwotICAgIGlmICgodXNlcmFnZW50LmlzT3BlcmEgJiYgISgiS2V5Ym9h
cmRFdmVudCIgaW4gd2luZG93KSkgJiYgdXNlcmFnZW50LmlzTWFjKSB7Ci0gICAgICAgIGhhc2hJ
ZCA9IDAgfCAoZS5tZXRhS2V5ID8gMSA6IDApIHwgKGUuYWx0S2V5ID8gMiA6IDApCi0gICAgICAg
ICAgICB8IChlLnNoaWZ0S2V5ID8gNCA6IDApIHwgKGUuY3RybEtleSA/IDggOiAwKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBoYXNoSWQgPSAwIHwgKGUuY3RybEtleSA/IDEgOiAwKSB8IChlLmFs
dEtleSA/IDIgOiAwKQotICAgICAgICAgICAgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLm1l
dGFLZXkgPyA4IDogMCk7Ci0gICAgfQotCi0gICAgaWYgKGtleUNvZGUgaW4ga2V5cy5NT0RJRklF
Ul9LRVlTKSB7Ci0gICAgICAgIHN3aXRjaCAoa2V5cy5NT0RJRklFUl9LRVlTW2tleUNvZGVdKSB7
Ci0gICAgICAgICAgICBjYXNlICJBbHQiOgotICAgICAgICAgICAgICAgIGhhc2hJZCA9IDI7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJTaGlmdCI6Ci0gICAgICAg
ICAgICAgICAgaGFzaElkID0gNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgIkN0cmwiOgotICAgICAgICAgICAgICAgIGhhc2hJZCA9IDE7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGhhc2hJZCA9
IDg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAga2V5Q29kZSA9
IDA7Ci0gICAgfQotCi0gICAgaWYgKGhhc2hJZCAmIDggJiYgKGtleUNvZGUgPT0gOTEgfHwga2V5
Q29kZSA9PSA5MykpIHsKLSAgICAgICAga2V5Q29kZSA9IDA7Ci0gICAgfQotICAgIGlmICghaGFz
aElkICYmICEoa2V5Q29kZSBpbiBrZXlzLkZVTkNUSU9OX0tFWVMpICYmICEoa2V5Q29kZSBpbiBr
ZXlzLlBSSU5UQUJMRV9LRVlTKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiBjYWxsYmFjayhlLCBoYXNoSWQsIGtleUNvZGUpOwotfQotCi1leHBvcnRzLmFkZENv
bW1hbmRLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsLCBjYWxsYmFjaykgewotICAgIHZhciBhZGRM
aXN0ZW5lciA9IGV4cG9ydHMuYWRkTGlzdGVuZXI7Ci0gICAgaWYgKHVzZXJhZ2VudC5pc09sZEdl
Y2tvIHx8ICh1c2VyYWdlbnQuaXNPcGVyYSAmJiAhKCJLZXlib2FyZEV2ZW50IiBpbiB3aW5kb3cp
KSkgewotICAgICAgICB2YXIgbGFzdEtleURvd25LZXlDb2RlID0gbnVsbDsKLSAgICAgICAgYWRk
TGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgbGFzdEtl
eURvd25LZXlDb2RlID0gZS5rZXlDb2RlOwotICAgICAgICB9KTsKLSAgICAgICAgYWRkTGlzdGVu
ZXIoZWwsICJrZXlwcmVzcyIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiBub3Jt
YWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwgbGFzdEtleURvd25LZXlDb2RlKTsKLSAgICAg
ICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGxhc3REb3duID0gbnVsbDsKLQotICAg
ICAgICBhZGRMaXN0ZW5lcihlbCwgImtleWRvd24iLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICBsYXN0RG93biA9IGUua2V5SWRlbnRpZmllciB8fCBlLmtleUNvZGU7Ci0gICAgICAgICAgICBy
ZXR1cm4gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGUua2V5Q29kZSk7Ci0gICAg
ICAgIH0pOwotICAgIH0KLX07Ci0KLWlmICh3aW5kb3cucG9zdE1lc3NhZ2UgJiYgIXVzZXJhZ2Vu
dC5pc09sZElFKSB7Ci0gICAgdmFyIHBvc3RNZXNzYWdlSWQgPSAxOwotICAgIGV4cG9ydHMubmV4
dFRpY2sgPSBmdW5jdGlvbihjYWxsYmFjaywgd2luKSB7Ci0gICAgICAgIHdpbiA9IHdpbiB8fCB3
aW5kb3c7Ci0gICAgICAgIHZhciBtZXNzYWdlTmFtZSA9ICJ6ZXJvLXRpbWVvdXQtbWVzc2FnZS0i
ICsgcG9zdE1lc3NhZ2VJZDsKLSAgICAgICAgZXhwb3J0cy5hZGRMaXN0ZW5lcih3aW4sICJtZXNz
YWdlIiwgZnVuY3Rpb24gbGlzdGVuZXIoZSkgewotICAgICAgICAgICAgaWYgKGUuZGF0YSA9PSBt
ZXNzYWdlTmFtZSkgewotICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RvcFByb3BhZ2F0aW9uKGUp
OwotICAgICAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTGlzdGVuZXIod2luLCAibWVzc2FnZSIs
IGxpc3RlbmVyKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9KTsKLSAgICAgICAgd2luLnBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCAiKiIpOwot
ICAgIH07Ci19Ci0KLQotZXhwb3J0cy5uZXh0RnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlv
bkZyYW1lIHx8Ci0gICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAotICAgIHdp
bmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKLSAgICB3aW5kb3cubXNSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUgfHwKLSAgICB3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZTsKLQot
aWYgKGV4cG9ydHMubmV4dEZyYW1lKQotICAgIGV4cG9ydHMubmV4dEZyYW1lID0gZXhwb3J0cy5u
ZXh0RnJhbWUuYmluZCh3aW5kb3cpOwotZWxzZQotICAgIGV4cG9ydHMubmV4dEZyYW1lID0gZnVu
Y3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMTcpOwotICAg
IH07Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL2xpYi9rZXlzJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVxdWlyZSgiLi9vb3AiKTsKLXZhciBLZXlzID0g
KGZ1bmN0aW9uKCkgewotICAgIHZhciByZXQgPSB7Ci0gICAgICAgIE1PRElGSUVSX0tFWVM6IHsK
LSAgICAgICAgICAgIDE2OiAnU2hpZnQnLCAxNzogJ0N0cmwnLCAxODogJ0FsdCcsIDIyNDogJ01l
dGEnCi0gICAgICAgIH0sCi0KLSAgICAgICAgS0VZX01PRFM6IHsKLSAgICAgICAgICAgICJjdHJs
IjogMSwgImFsdCI6IDIsICJvcHRpb24iIDogMiwKLSAgICAgICAgICAgICJzaGlmdCI6IDQsICJt
ZXRhIjogOCwgImNvbW1hbmQiOiA4Ci0gICAgICAgIH0sCi0KLSAgICAgICAgRlVOQ1RJT05fS0VZ
UyA6IHsKLSAgICAgICAgICAgIDggIDogIkJhY2tzcGFjZSIsCi0gICAgICAgICAgICA5ICA6ICJU
YWIiLAotICAgICAgICAgICAgMTMgOiAiUmV0dXJuIiwKLSAgICAgICAgICAgIDE5IDogIlBhdXNl
IiwKLSAgICAgICAgICAgIDI3IDogIkVzYyIsCi0gICAgICAgICAgICAzMiA6ICJTcGFjZSIsCi0g
ICAgICAgICAgICAzMyA6ICJQYWdlVXAiLAotICAgICAgICAgICAgMzQgOiAiUGFnZURvd24iLAot
ICAgICAgICAgICAgMzUgOiAiRW5kIiwKLSAgICAgICAgICAgIDM2IDogIkhvbWUiLAotICAgICAg
ICAgICAgMzcgOiAiTGVmdCIsCi0gICAgICAgICAgICAzOCA6ICJVcCIsCi0gICAgICAgICAgICAz
OSA6ICJSaWdodCIsCi0gICAgICAgICAgICA0MCA6ICJEb3duIiwKLSAgICAgICAgICAgIDQ0IDog
IlByaW50IiwKLSAgICAgICAgICAgIDQ1IDogIkluc2VydCIsCi0gICAgICAgICAgICA0NiA6ICJE
ZWxldGUiLAotICAgICAgICAgICAgOTYgOiAiTnVtcGFkMCIsCi0gICAgICAgICAgICA5NyA6ICJO
dW1wYWQxIiwKLSAgICAgICAgICAgIDk4IDogIk51bXBhZDIiLAotICAgICAgICAgICAgOTkgOiAi
TnVtcGFkMyIsCi0gICAgICAgICAgICAxMDA6ICJOdW1wYWQ0IiwKLSAgICAgICAgICAgIDEwMTog
Ik51bXBhZDUiLAotICAgICAgICAgICAgMTAyOiAiTnVtcGFkNiIsCi0gICAgICAgICAgICAxMDM6
ICJOdW1wYWQ3IiwKLSAgICAgICAgICAgIDEwNDogIk51bXBhZDgiLAotICAgICAgICAgICAgMTA1
OiAiTnVtcGFkOSIsCi0gICAgICAgICAgICAxMTI6ICJGMSIsCi0gICAgICAgICAgICAxMTM6ICJG
MiIsCi0gICAgICAgICAgICAxMTQ6ICJGMyIsCi0gICAgICAgICAgICAxMTU6ICJGNCIsCi0gICAg
ICAgICAgICAxMTY6ICJGNSIsCi0gICAgICAgICAgICAxMTc6ICJGNiIsCi0gICAgICAgICAgICAx
MTg6ICJGNyIsCi0gICAgICAgICAgICAxMTk6ICJGOCIsCi0gICAgICAgICAgICAxMjA6ICJGOSIs
Ci0gICAgICAgICAgICAxMjE6ICJGMTAiLAotICAgICAgICAgICAgMTIyOiAiRjExIiwKLSAgICAg
ICAgICAgIDEyMzogIkYxMiIsCi0gICAgICAgICAgICAxNDQ6ICJOdW1sb2NrIiwKLSAgICAgICAg
ICAgIDE0NTogIlNjcm9sbGxvY2siCi0gICAgICAgIH0sCi0KLSAgICAgICAgUFJJTlRBQkxFX0tF
WVM6IHsKLSAgICAgICAgICAgMzI6ICcgJywgIDQ4OiAnMCcsICA0OTogJzEnLCAgNTA6ICcyJywg
IDUxOiAnMycsICA1MjogJzQnLCA1MzogICc1JywKLSAgICAgICAgICAgNTQ6ICc2JywgIDU1OiAn
NycsICA1NjogJzgnLCAgNTc6ICc5JywgIDU5OiAnOycsICA2MTogJz0nLCA2NTogICdhJywKLSAg
ICAgICAgICAgNjY6ICdiJywgIDY3OiAnYycsICA2ODogJ2QnLCAgNjk6ICdlJywgIDcwOiAnZics
ICA3MTogJ2cnLCA3MjogICdoJywKLSAgICAgICAgICAgNzM6ICdpJywgIDc0OiAnaicsICA3NTog
J2snLCAgNzY6ICdsJywgIDc3OiAnbScsICA3ODogJ24nLCA3OTogICdvJywKLSAgICAgICAgICAg
ODA6ICdwJywgIDgxOiAncScsICA4MjogJ3InLCAgODM6ICdzJywgIDg0OiAndCcsICA4NTogJ3Un
LCA4NjogICd2JywKLSAgICAgICAgICAgODc6ICd3JywgIDg4OiAneCcsICA4OTogJ3knLCAgOTA6
ICd6JywgMTA3OiAnKycsIDEwOTogJy0nLCAxMTA6ICcuJywKLSAgICAgICAgICAxODg6ICcsJywg
MTkwOiAnLicsIDE5MTogJy8nLCAxOTI6ICdgJywgMjE5OiAnWycsIDIyMDogJ1xcJywKLSAgICAg
ICAgICAyMjE6ICddJywgMjIyOiAnXCcnCi0gICAgICAgIH0KLSAgICB9OwotICAgIGZvciAodmFy
IGkgaW4gcmV0LkZVTkNUSU9OX0tFWVMpIHsKLSAgICAgICAgdmFyIG5hbWUgPSByZXQuRlVOQ1RJ
T05fS0VZU1tpXS50b0xvd2VyQ2FzZSgpOwotICAgICAgICByZXRbbmFtZV0gPSBwYXJzZUludChp
LCAxMCk7Ci0gICAgfQotICAgIG9vcC5taXhpbihyZXQsIHJldC5NT0RJRklFUl9LRVlTKTsKLSAg
ICBvb3AubWl4aW4ocmV0LCByZXQuUFJJTlRBQkxFX0tFWVMpOwotICAgIG9vcC5taXhpbihyZXQs
IHJldC5GVU5DVElPTl9LRVlTKTsKLSAgICByZXQuZW50ZXIgPSByZXRbInJldHVybiJdOwotICAg
IHJldC5lc2NhcGUgPSByZXQuZXNjOwotICAgIHJldC5kZWwgPSByZXRbImRlbGV0ZSJdOwotICAg
IHJldFsxNzNdID0gJy0nOwotCi0gICAgcmV0dXJuIHJldDsKLX0pKCk7Ci1vb3AubWl4aW4oZXhw
b3J0cywgS2V5cyk7Ci0KLWV4cG9ydHMua2V5Q29kZVRvU3RyaW5nID0gZnVuY3Rpb24oa2V5Q29k
ZSkgewotICAgIHJldHVybiAoS2V5c1trZXlDb2RlXSB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlKGtl
eUNvZGUpKS50b0xvd2VyQ2FzZSgpOwotfQotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL2xpYi9v
b3AnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUs
IGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLWV4cG9ydHMuaW5oZXJpdHMgPSAoZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIHRlbXBDdG9yID0gZnVuY3Rpb24oKSB7fTsKLSAgICByZXR1cm4gZnVuY3Rpb24o
Y3Rvciwgc3VwZXJDdG9yKSB7Ci0gICAgICAgIHRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rv
ci5wcm90b3R5cGU7Ci0gICAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yLnByb3RvdHlwZTsK
LSAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgdGVtcEN0b3IoKTsKLSAgICAgICAgY3Rvci5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yOwotICAgIH07Ci19KCkpOwotCi1leHBvcnRzLm1p
eGluID0gZnVuY3Rpb24ob2JqLCBtaXhpbikgewotICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikg
ewotICAgICAgICBvYmpba2V5XSA9IG1peGluW2tleV07Ci0gICAgfQotfTsKLQotZXhwb3J0cy5p
bXBsZW1lbnQgPSBmdW5jdGlvbihwcm90bywgbWl4aW4pIHsKLSAgICBleHBvcnRzLm1peGluKHBy
b3RvLCBtaXhpbik7Ci19OwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL2xpYi91c2VyYWdlbnQn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgewotZXhwb3J0cy5PUyA9IHsKLSAgICBMSU5VWDogIkxJTlVYIiwKLSAg
ICBNQUM6ICJNQUMiLAotICAgIFdJTkRPV1M6ICJXSU5ET1dTIgotfTsKLWV4cG9ydHMuZ2V0T1Mg
PSBmdW5jdGlvbigpIHsKLSAgICBpZiAoZXhwb3J0cy5pc01hYykgewotICAgICAgICByZXR1cm4g
ZXhwb3J0cy5PUy5NQUM7Ci0gICAgfSBlbHNlIGlmIChleHBvcnRzLmlzTGludXgpIHsKLSAgICAg
ICAgcmV0dXJuIGV4cG9ydHMuT1MuTElOVVg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJu
IGV4cG9ydHMuT1MuV0lORE9XUzsKLSAgICB9Ci19OwotaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT0g
Im9iamVjdCIpCi0gICAgcmV0dXJuOwotCi12YXIgb3MgPSAobmF2aWdhdG9yLnBsYXRmb3JtLm1h
dGNoKC9tYWN8d2lufGxpbnV4L2kpIHx8IFsib3RoZXIiXSlbMF0udG9Mb3dlckNhc2UoKTsKLXZh
ciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7Ci1leHBvcnRzLmlzV2luID0gKG9zID09ICJ3aW4i
KTsKLWV4cG9ydHMuaXNNYWMgPSAob3MgPT0gIm1hYyIpOwotZXhwb3J0cy5pc0xpbnV4ID0gKG9z
ID09ICJsaW51eCIpOwotZXhwb3J0cy5pc0lFID0gCi0gICAgKG5hdmlnYXRvci5hcHBOYW1lID09
ICJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiIHx8IG5hdmlnYXRvci5hcHBOYW1lLmluZGV4
T2YoIk1TQXBwSG9zdCIpID49IDApCi0gICAgJiYgcGFyc2VGbG9hdChuYXZpZ2F0b3IudXNlckFn
ZW50Lm1hdGNoKC9NU0lFIChbMC05XStbXC4wLTldKykvKVsxXSk7Ci0gICAgCi1leHBvcnRzLmlz
T2xkSUUgPSBleHBvcnRzLmlzSUUgJiYgZXhwb3J0cy5pc0lFIDwgOTsKLWV4cG9ydHMuaXNHZWNr
byA9IGV4cG9ydHMuaXNNb3ppbGxhID0gd2luZG93LmNvbnRyb2xsZXJzICYmIHdpbmRvdy5uYXZp
Z2F0b3IucHJvZHVjdCA9PT0gIkdlY2tvIjsKLWV4cG9ydHMuaXNPbGRHZWNrbyA9IGV4cG9ydHMu
aXNHZWNrbyAmJiBwYXJzZUludCgobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvcnZcOihcZCsp
Lyl8fFtdKVsxXSwgMTApIDwgNDsKLWV4cG9ydHMuaXNPcGVyYSA9IHdpbmRvdy5vcGVyYSAmJiBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93Lm9wZXJhKSA9PSAiW29iamVjdCBP
cGVyYV0iOwotZXhwb3J0cy5pc1dlYktpdCA9IHBhcnNlRmxvYXQodWEuc3BsaXQoIldlYktpdC8i
KVsxXSkgfHwgdW5kZWZpbmVkOwotCi1leHBvcnRzLmlzQ2hyb21lID0gcGFyc2VGbG9hdCh1YS5z
cGxpdCgiIENocm9tZS8iKVsxXSkgfHwgdW5kZWZpbmVkOwotCi1leHBvcnRzLmlzQUlSID0gdWEu
aW5kZXhPZigiQWRvYmVBSVIiKSA+PSAwOwotCi1leHBvcnRzLmlzSVBhZCA9IHVhLmluZGV4T2Yo
ImlQYWQiKSA+PSAwOwotCi1leHBvcnRzLmlzVG91Y2hQYWQgPSB1YS5pbmRleE9mKCJUb3VjaFBh
ZCIpID49IDA7Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvZWRpdG9yJywgWydyZXF1aXJlJywg
J2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2ZpeG9sZGJyb3dzZXJzJywgJ2FjZS9saWIv
b29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2Uva2V5Ym9hcmQv
dGV4dGlucHV0JywgJ2FjZS9tb3VzZS9tb3VzZV9oYW5kbGVyJywgJ2FjZS9tb3VzZS9mb2xkX2hh
bmRsZXInLCAnYWNlL2tleWJvYXJkL2tleWJpbmRpbmcnLCAnYWNlL2VkaXRfc2Vzc2lvbicsICdh
Y2Uvc2VhcmNoJywgJ2FjZS9yYW5nZScsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL2Nv
bW1hbmRzL2NvbW1hbmRfbWFuYWdlcicsICdhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcycs
ICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0K
LXJlcXVpcmUoIi4vbGliL2ZpeG9sZGJyb3dzZXJzIik7Ci0KLXZhciBvb3AgPSByZXF1aXJlKCIu
L2xpYi9vb3AiKTsKLXZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwotdmFyIHVzZXJh
Z2VudCA9IHJlcXVpcmUoIi4vbGliL3VzZXJhZ2VudCIpOwotdmFyIFRleHRJbnB1dCA9IHJlcXVp
cmUoIi4va2V5Ym9hcmQvdGV4dGlucHV0IikuVGV4dElucHV0OwotdmFyIE1vdXNlSGFuZGxlciA9
IHJlcXVpcmUoIi4vbW91c2UvbW91c2VfaGFuZGxlciIpLk1vdXNlSGFuZGxlcjsKLXZhciBGb2xk
SGFuZGxlciA9IHJlcXVpcmUoIi4vbW91c2UvZm9sZF9oYW5kbGVyIikuRm9sZEhhbmRsZXI7Ci12
YXIgS2V5QmluZGluZyA9IHJlcXVpcmUoIi4va2V5Ym9hcmQva2V5YmluZGluZyIpLktleUJpbmRp
bmc7Ci12YXIgRWRpdFNlc3Npb24gPSByZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNz
aW9uOwotdmFyIFNlYXJjaCA9IHJlcXVpcmUoIi4vc2VhcmNoIikuU2VhcmNoOwotdmFyIFJhbmdl
ID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwotdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUo
Ii4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Ci12YXIgQ29tbWFuZE1hbmFnZXIg
PSByZXF1aXJlKCIuL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlciIpLkNvbW1hbmRNYW5hZ2VyOwot
dmFyIGRlZmF1bHRDb21tYW5kcyA9IHJlcXVpcmUoIi4vY29tbWFuZHMvZGVmYXVsdF9jb21tYW5k
cyIpLmNvbW1hbmRzOwotdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Ci12YXIgRWRp
dG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Npb24pIHsKLSAgICB2YXIgY29udGFpbmVyID0g
cmVuZGVyZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpOwotICAgIHRoaXMuY29udGFpbmVyID0gY29u
dGFpbmVyOwotICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjsKLQotICAgIHRoaXMuY29tbWFu
ZHMgPSBuZXcgQ29tbWFuZE1hbmFnZXIodXNlcmFnZW50LmlzTWFjID8gIm1hYyIgOiAid2luIiwg
ZGVmYXVsdENvbW1hbmRzKTsKLSAgICB0aGlzLnRleHRJbnB1dCAgPSBuZXcgVGV4dElucHV0KHJl
bmRlcmVyLmdldFRleHRBcmVhQ29udGFpbmVyKCksIHRoaXMpOwotICAgIHRoaXMucmVuZGVyZXIu
dGV4dGFyZWEgPSB0aGlzLnRleHRJbnB1dC5nZXRFbGVtZW50KCk7Ci0gICAgdGhpcy5rZXlCaW5k
aW5nID0gbmV3IEtleUJpbmRpbmcodGhpcyk7Ci0gICAgdGhpcy4kbW91c2VIYW5kbGVyID0gbmV3
IE1vdXNlSGFuZGxlcih0aGlzKTsKLSAgICBuZXcgRm9sZEhhbmRsZXIodGhpcyk7Ci0KLSAgICB0
aGlzLiRibG9ja1Njcm9sbGluZyA9IDA7Ci0gICAgdGhpcy4kc2VhcmNoID0gbmV3IFNlYXJjaCgp
LnNldCh7Ci0gICAgICAgIHdyYXA6IHRydWUKLSAgICB9KTsKLQotICAgIHRoaXMuc2V0U2Vzc2lv
bihzZXNzaW9uIHx8IG5ldyBFZGl0U2Vzc2lvbigiIikpOwotICAgIGNvbmZpZy5yZXNldE9wdGlv
bnModGhpcyk7Ci0gICAgY29uZmlnLl9lbWl0KCJlZGl0b3IiLCB0aGlzKTsKLX07Ci0KLShmdW5j
dGlvbigpewotCi0gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwotICAgIHRo
aXMuc2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2V5Ym9hcmRIYW5kbGVyKSB7Ci0gICAg
ICAgIGlmICh0eXBlb2Yga2V5Ym9hcmRIYW5kbGVyID09ICJzdHJpbmciICYmIGtleWJvYXJkSGFu
ZGxlcikgewotICAgICAgICAgICAgdGhpcy4ka2V5YmluZGluZ0lkID0ga2V5Ym9hcmRIYW5kbGVy
OwotICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKLSAgICAgICAgICAgIGNvbmZpZy5sb2Fk
TW9kdWxlKFsia2V5YmluZGluZyIsIGtleWJvYXJkSGFuZGxlcl0sIGZ1bmN0aW9uKG1vZHVsZSkg
ewotICAgICAgICAgICAgICAgIGlmIChfc2VsZi4ka2V5YmluZGluZ0lkID09IGtleWJvYXJkSGFu
ZGxlcikKLSAgICAgICAgICAgICAgICAgICAgX3NlbGYua2V5QmluZGluZy5zZXRLZXlib2FyZEhh
bmRsZXIobW9kdWxlICYmIG1vZHVsZS5oYW5kbGVyKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGtleWJpbmRpbmdJZDsKLSAgICAg
ICAgICAgIHRoaXMua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIoa2V5Ym9hcmRIYW5kbGVy
KTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5nZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMua2V5QmluZGluZy5nZXRLZXlib2FyZEhhbmRs
ZXIoKTsKLSAgICB9OwotICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsK
LSAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbiA9PSBzZXNzaW9uKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICh0aGlzLnNlc3Npb24pIHsKLSAgICAgICAgICAgIHZhciBvbGRTZXNz
aW9uID0gdGhpcy5zZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50
TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UpOwotICAgICAgICAgICAg
dGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZU1vZGUiLCB0aGlzLiRvbkNo
YW5nZU1vZGUpOwotICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIo
InRva2VuaXplclVwZGF0ZSIsIHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlKTsKLSAgICAgICAgICAg
IHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VUYWJTaXplIiwgdGhpcy4k
b25DaGFuZ2VUYWJTaXplKTsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExp
c3RlbmVyKCJjaGFuZ2VXcmFwTGltaXQiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7Ci0gICAg
ICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcE1vZGUi
LCB0aGlzLiRvbkNoYW5nZVdyYXBNb2RlKTsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1v
dmVFdmVudExpc3RlbmVyKCJvbkNoYW5nZUZvbGQiLCB0aGlzLiRvbkNoYW5nZUZvbGQpOwotICAg
ICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFy
a2VyIiwgdGhpcy4kb25DaGFuZ2VGcm9udE1hcmtlcik7Ci0gICAgICAgICAgICB0aGlzLnNlc3Np
b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQmFja01hcmtlciIsIHRoaXMuJG9uQ2hhbmdl
QmFja01hcmtlcik7Ci0gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5l
cigiY2hhbmdlQnJlYWtwb2ludCIsIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCk7Ci0gICAgICAg
ICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQW5ub3RhdGlvbiIs
IHRoaXMuJG9uQ2hhbmdlQW5ub3RhdGlvbik7Ci0gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVt
b3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlT3ZlcndyaXRlIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2Up
OwotICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVNj
cm9sbFRvcCIsIHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKTsKLSAgICAgICAgICAgIHRoaXMuc2Vz
c2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2VMZWZ0VG9wIiwgdGhpcy4kb25TY3JvbGxM
ZWZ0Q2hhbmdlKTsKLQotICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2Vzc2lvbi5n
ZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVy
KCJjaGFuZ2VDdXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7Ci0gICAgICAgICAgICBzZWxl
Y3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy4kb25TZWxl
Y3Rpb25DaGFuZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lv
bjsKLQotICAgICAgICB0aGlzLiRvbkRvY3VtZW50Q2hhbmdlID0gdGhpcy5vbkRvY3VtZW50Q2hh
bmdlLmJpbmQodGhpcyk7Ci0gICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdl
IiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2Vz
c2lvbihzZXNzaW9uKTsKLQotICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSB0aGlzLm9uQ2hh
bmdlTW9kZS5iaW5kKHRoaXMpOwotICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNo
YW5nZU1vZGUiLCB0aGlzLiRvbkNoYW5nZU1vZGUpOwotCi0gICAgICAgIHRoaXMuJG9uVG9rZW5p
emVyVXBkYXRlID0gdGhpcy5vblRva2VuaXplclVwZGF0ZS5iaW5kKHRoaXMpOwotICAgICAgICBz
ZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoInRva2VuaXplclVwZGF0ZSIsIHRoaXMuJG9uVG9rZW5p
emVyVXBkYXRlKTsKLQotICAgICAgICB0aGlzLiRvbkNoYW5nZVRhYlNpemUgPSB0aGlzLnJlbmRl
cmVyLm9uQ2hhbmdlVGFiU2l6ZS5iaW5kKHRoaXMucmVuZGVyZXIpOwotICAgICAgICBzZXNzaW9u
LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVRhYlNpemUiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUp
OwotCi0gICAgICAgIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0ID0gdGhpcy5vbkNoYW5nZVdyYXBM
aW1pdC5iaW5kKHRoaXMpOwotICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5n
ZVdyYXBMaW1pdCIsIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0KTsKLQotICAgICAgICB0aGlzLiRv
bkNoYW5nZVdyYXBNb2RlID0gdGhpcy5vbkNoYW5nZVdyYXBNb2RlLmJpbmQodGhpcyk7Ci0gICAg
ICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlV3JhcE1vZGUiLCB0aGlzLiRvbkNo
YW5nZVdyYXBNb2RlKTsKLQotICAgICAgICB0aGlzLiRvbkNoYW5nZUZvbGQgPSB0aGlzLm9uQ2hh
bmdlRm9sZC5iaW5kKHRoaXMpOwotICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNo
YW5nZUZvbGQiLCB0aGlzLiRvbkNoYW5nZUZvbGQpOwotCi0gICAgICAgIHRoaXMuJG9uQ2hhbmdl
RnJvbnRNYXJrZXIgPSB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIuYmluZCh0aGlzKTsKLSAgICAg
ICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUZyb250TWFya2VyIiwgdGhp
cy4kb25DaGFuZ2VGcm9udE1hcmtlcik7Ci0KLSAgICAgICAgdGhpcy4kb25DaGFuZ2VCYWNrTWFy
a2VyID0gdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5z
ZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUJhY2tNYXJrZXIiLCB0aGlzLiRvbkNoYW5n
ZUJhY2tNYXJrZXIpOwotCi0gICAgICAgIHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCA9IHRoaXMu
b25DaGFuZ2VCcmVha3BvaW50LmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRF
dmVudExpc3RlbmVyKCJjaGFuZ2VCcmVha3BvaW50IiwgdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50
KTsKLQotICAgICAgICB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24gPSB0aGlzLm9uQ2hhbmdlQW5u
b3RhdGlvbi5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5l
cigiY2hhbmdlQW5ub3RhdGlvbiIsIHRoaXMuJG9uQ2hhbmdlQW5ub3RhdGlvbik7Ci0KLSAgICAg
ICAgdGhpcy4kb25DdXJzb3JDaGFuZ2UgPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlLmJpbmQodGhpcyk7
Ci0gICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VPdmVyd3JpdGUi
LCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7Ci0KLSAgICAgICAgdGhpcy4kb25TY3JvbGxUb3BDaGFu
Z2UgPSB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuc2Vz
c2lvbi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTY3JvbGxUb3AiLCB0aGlzLiRvblNjcm9sbFRv
cENoYW5nZSk7Ci0KLSAgICAgICAgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlID0gdGhpcy5vblNj
cm9sbExlZnRDaGFuZ2UuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50
TGlzdGVuZXIoImNoYW5nZVNjcm9sbExlZnQiLCB0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpOwot
Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTsKLSAgICAg
ICAgdGhpcy5zZWxlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4k
b25DdXJzb3JDaGFuZ2UpOwotCi0gICAgICAgIHRoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlID0gdGhp
cy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLnNlbGVjdGlvbi5h
ZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24iLCB0aGlzLiRvblNlbGVjdGlvbkNoYW5n
ZSk7Ci0KLSAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGUoKTsKLQotICAgICAgICB0aGlzLiRibG9j
a1Njcm9sbGluZyArPSAxOwotICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7Ci0gICAgICAg
IHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7Ci0KLSAgICAgICAgdGhpcy5vblNjcm9sbFRvcENo
YW5nZSgpOwotICAgICAgICB0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZSgpOwotICAgICAgICB0aGlz
Lm9uU2VsZWN0aW9uQ2hhbmdlKCk7Ci0gICAgICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcigp
OwotICAgICAgICB0aGlzLm9uQ2hhbmdlQmFja01hcmtlcigpOwotICAgICAgICB0aGlzLm9uQ2hh
bmdlQnJlYWtwb2ludCgpOwotICAgICAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbigpOwotICAg
ICAgICB0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSAmJiB0aGlzLnJlbmRlcmVyLmFkanVz
dFdyYXBMaW1pdCgpOwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKTsKLQotICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTZXNzaW9uIiwgewotICAgICAgICAgICAgc2Vzc2lvbjog
c2Vzc2lvbiwKLSAgICAgICAgICAgIG9sZFNlc3Npb246IG9sZFNlc3Npb24KLSAgICAgICAgfSk7
Ci0gICAgfTsKLSAgICB0aGlzLmdldFNlc3Npb24gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuc2Vzc2lvbjsKLSAgICB9OwotICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih2
YWwsIGN1cnNvclBvcykgewotICAgICAgICB0aGlzLnNlc3Npb24uZG9jLnNldFZhbHVlKHZhbCk7
Ci0KLSAgICAgICAgaWYgKCFjdXJzb3JQb3MpCi0gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgp
OwotICAgICAgICBlbHNlIGlmIChjdXJzb3JQb3MgPT0gMSkKLSAgICAgICAgICAgIHRoaXMubmF2
aWdhdGVGaWxlRW5kKCk7Ci0gICAgICAgIGVsc2UgaWYgKGN1cnNvclBvcyA9PSAtMSkKLSAgICAg
ICAgICAgIHRoaXMubmF2aWdhdGVGaWxlU3RhcnQoKTsKLQotICAgICAgICByZXR1cm4gdmFsOwot
ICAgIH07Ci0gICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4g
dGhpcy5zZXNzaW9uLmdldFZhbHVlKCk7Ci0gICAgfTsKLSAgICB0aGlzLmdldFNlbGVjdGlvbiA9
IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb247Ci0gICAgfTsKLSAg
ICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIu
b25SZXNpemUoZm9yY2UpOwotICAgIH07Ci0gICAgdGhpcy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRo
ZW1lKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0VGhlbWUodGhlbWUpOwotICAgIH07Ci0g
ICAgdGhpcy5nZXRUaGVtZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5yZW5k
ZXJlci5nZXRUaGVtZSgpOwotICAgIH07Ci0gICAgdGhpcy5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0
eWxlKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3R5bGUpOwotICAgIH07Ci0g
ICAgdGhpcy51bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKLSAgICAgICAgdGhpcy5yZW5k
ZXJlci51bnNldFN0eWxlKHN0eWxlKTsKLSAgICB9OwotICAgIHRoaXMuc2V0Rm9udFNpemUgPSBm
dW5jdGlvbihzaXplKSB7Ci0gICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PSAibnVtYmVyIikKLSAg
ICAgICAgICAgIHNpemUgPSBzaXplICsgInB4IjsKLSAgICAgICAgdGhpcy5jb250YWluZXIuc3R5
bGUuZm9udFNpemUgPSBzaXplOwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZvbnRTaXpl
KCk7Ci0gICAgfTsKLQotICAgIHRoaXMuJGhpZ2hsaWdodEJyYWNrZXRzID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQpIHsKLSAgICAgICAg
ICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxp
Z2h0KTsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodCA9IG51bGw7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0UGVuZGluZykgewotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAg
ICAgICAgdGhpcy4kaGlnaGxpZ2h0UGVuZGluZyA9IHRydWU7Ci0gICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBzZWxmLiRoaWdobGlnaHRQZW5kaW5nID0gZmFsc2U7
Ci0KLSAgICAgICAgICAgIHZhciBwb3MgPSBzZWxmLnNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tl
dChzZWxmLmdldEN1cnNvclBvc2l0aW9uKCkpOwotICAgICAgICAgICAgaWYgKHBvcykgewotICAg
ICAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBw
b3Mucm93LCBwb3MuY29sdW1uKzEpOwotICAgICAgICAgICAgICAgIHNlbGYuc2Vzc2lvbi4kYnJh
Y2tldEhpZ2hsaWdodCA9IHNlbGYuc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2VfYnJhY2tl
dCIsICJ0ZXh0Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIDUwKTsKLSAgICB9OwotICAg
IHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKLSAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIF9zZWxmLnRleHRJbnB1
dC5mb2N1cygpOwotICAgICAgICB9KTsKLSAgICAgICAgdGhpcy50ZXh0SW5wdXQuZm9jdXMoKTsK
LSAgICB9OwotICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQoKTsKLSAgICB9OwotICAgIHRoaXMuYmx1ciA9IGZ1
bmN0aW9uKCkgewotICAgICAgICB0aGlzLnRleHRJbnB1dC5ibHVyKCk7Ci0gICAgfTsKLSAgICB0
aGlzLm9uRm9jdXMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuJGlzRm9jdXNlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy4kaXNGb2N1c2VkID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCk7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIu
dmlzdWFsaXplRm9jdXMoKTsKLSAgICAgICAgdGhpcy5fZW1pdCgiZm9jdXMiKTsKLSAgICB9Owot
ICAgIHRoaXMub25CbHVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICghdGhpcy4kaXNGb2N1
c2VkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLiRpc0ZvY3VzZWQgPSBmYWxz
ZTsKLSAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7Ci0gICAgICAgIHRoaXMucmVu
ZGVyZXIudmlzdWFsaXplQmx1cigpOwotICAgICAgICB0aGlzLl9lbWl0KCJibHVyIik7Ci0gICAg
fTsKLQotICAgIHRoaXMuJGN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlz
LnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwotICAgIH07Ci0gICAgdGhpcy5vbkRvY3VtZW50Q2hh
bmdlID0gZnVuY3Rpb24oZSkgewotICAgICAgICB2YXIgZGVsdGEgPSBlLmRhdGE7Ci0gICAgICAg
IHZhciByYW5nZSA9IGRlbHRhLnJhbmdlOwotICAgICAgICB2YXIgbGFzdFJvdzsKLQotICAgICAg
ICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYgZGVsdGEuYWN0aW9uICE9
ICJpbnNlcnRMaW5lcyIgJiYgZGVsdGEuYWN0aW9uICE9ICJyZW1vdmVMaW5lcyIpCi0gICAgICAg
ICAgICBsYXN0Um93ID0gcmFuZ2UuZW5kLnJvdzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bGFzdFJvdyA9IEluZmluaXR5OwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJh
bmdlLnN0YXJ0LnJvdywgbGFzdFJvdyk7Ci0KLSAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwg
ZSk7Ci0gICAgICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpOwotICAgIH07Ci0KLSAgICB0aGlzLm9u
VG9rZW5pemVyVXBkYXRlID0gZnVuY3Rpb24oZSkgewotICAgICAgICB2YXIgcm93cyA9IGUuZGF0
YTsKLSAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhyb3dzLmZpcnN0LCByb3dzLmxh
c3QpOwotICAgIH07Ci0KLQotICAgIHRoaXMub25TY3JvbGxUb3BDaGFuZ2UgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9s
bFRvcCgpKTsKLSAgICB9OwotICAgIAotICAgIHRoaXMub25TY3JvbGxMZWZ0Q2hhbmdlID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9YKHRoaXMuc2Vzc2lvbi5n
ZXRTY3JvbGxMZWZ0KCkpOwotICAgIH07Ci0gICAgdGhpcy5vbkN1cnNvckNoYW5nZSA9IGZ1bmN0
aW9uKCkgewotICAgICAgICB0aGlzLiRjdXJzb3JDaGFuZ2UoKTsKLQotICAgICAgICBpZiAoIXRo
aXMuJGJsb2NrU2Nyb2xsaW5nKSB7Ci0gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1
cnNvckludG9WaWV3KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLiRoaWdobGlnaHRCcmFj
a2V0cygpOwotICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7Ci0gICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOwotICAgIH07Ci0KLSAgICB0aGlzLiR1
cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBzZXNz
aW9uID0gdGhpcy5nZXRTZXNzaW9uKCk7Ci0KLSAgICAgICAgdmFyIGhpZ2hsaWdodDsKLSAgICAg
ICAgaWYgKHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUpIHsKLSAgICAgICAgICAgIGlmICgodGhp
cy4kc2VsZWN0aW9uU3R5bGUgIT0gImxpbmUiIHx8ICF0aGlzLnNlbGVjdGlvbi5pc011bHRpTGlu
ZSgpKSkKLSAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9u
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtl
ciAmJiAhaGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihzZXNz
aW9uLiRoaWdobGlnaHRMaW5lTWFya2VyLmlkKTsKLSAgICAgICAgICAgIHNlc3Npb24uJGhpZ2hs
aWdodExpbmVNYXJrZXIgPSBudWxsOwotICAgICAgICB9IGVsc2UgaWYgKCFzZXNzaW9uLiRoaWdo
bGlnaHRMaW5lTWFya2VyICYmIGhpZ2hsaWdodCkgewotICAgICAgICAgICAgdmFyIHJhbmdlID0g
bmV3IFJhbmdlKGhpZ2hsaWdodC5yb3csIGhpZ2hsaWdodC5jb2x1bW4sIGhpZ2hsaWdodC5yb3cs
IEluZmluaXR5KTsKLSAgICAgICAgICAgIHJhbmdlLmlkID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFu
Z2UsICJhY2VfYWN0aXZlLWxpbmUiLCAic2NyZWVuTGluZSIpOyAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlciA9IHJhbmdlOwotICAgICAgICB9IGVs
c2UgaWYgKGhpZ2hsaWdodCkgewotICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1h
cmtlci5zdGFydC5yb3cgPSBoaWdobGlnaHQucm93OwotICAgICAgICAgICAgc2Vzc2lvbi4kaGln
aGxpZ2h0TGluZU1hcmtlci5lbmQucm93ID0gaGlnaGxpZ2h0LnJvdzsKLSAgICAgICAgICAgIHNl
c3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuc3RhcnQuY29sdW1uID0gaGlnaGxpZ2h0LmNvbHVt
bjsKLSAgICAgICAgICAgIHNlc3Npb24uX2VtaXQoImNoYW5nZUJhY2tNYXJrZXIiKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkg
ewotICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKLQotICAgICAgICBpZiAoc2Vz
c2lvbi4kc2VsZWN0aW9uTWFya2VyKSB7Ci0gICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtl
cihzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIpOwotICAgICAgICB9Ci0gICAgICAgIHNlc3Npb24u
JHNlbGVjdGlvbk1hcmtlciA9IG51bGw7Ci0KLSAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFJh
bmdlKCk7Ci0gICAgICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmdldFNlbGVjdGlvblN0eWxlKCk7
Ci0gICAgICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIgPSBzZXNzaW9uLmFkZE1hcmtl
cihyYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHlsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgcmUgPSB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgJiYgdGhpcy4kZ2V0
U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwKCkKLSAgICAgICAgdGhpcy5zZXNzaW9uLmhpZ2hsaWdo
dChyZSk7Ci0gICAgICAgIAotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsK
LSAgICB9OwotCi0gICAgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwotCi0gICAgICAgIHZh
ciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAgIGlmIChzZWxl
Y3Rpb24uaXNFbXB0eSgpIHx8IHNlbGVjdGlvbi5pc011bHRpTGluZSgpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciBzdGFydE91dGVyID0gc2VsZWN0aW9uLnN0YXJ0LmNvbHVt
biAtIDE7Ci0gICAgICAgIHZhciBlbmRPdXRlciA9IHNlbGVjdGlvbi5lbmQuY29sdW1uICsgMTsK
LSAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoc2VsZWN0aW9uLnN0YXJ0LnJvdyk7
Ci0gICAgICAgIHZhciBsaW5lQ29scyA9IGxpbmUubGVuZ3RoOwotICAgICAgICB2YXIgbmVlZGxl
ID0gbGluZS5zdWJzdHJpbmcoTWF0aC5tYXgoc3RhcnRPdXRlciwgMCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihlbmRPdXRlciwgbGluZUNvbHMpKTsKLSAg
ICAgICAgaWYgKChzdGFydE91dGVyID49IDAgJiYgL15bXHdcZF0vLnRlc3QobmVlZGxlKSkgfHwK
LSAgICAgICAgICAgIChlbmRPdXRlciA8PSBsaW5lQ29scyAmJiAvW1x3XGRdJC8udGVzdChuZWVk
bGUpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZWVkbGUgPSBsaW5lLnN1YnN0
cmluZyhzZWxlY3Rpb24uc3RhcnQuY29sdW1uLCBzZWxlY3Rpb24uZW5kLmNvbHVtbik7Ci0gICAg
ICAgIGlmICghL15bXHdcZF0rJC8udGVzdChuZWVkbGUpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciByZSA9IHRoaXMuJHNlYXJjaC4kYXNzZW1ibGVSZWdFeHAoewotICAgICAg
ICAgICAgd2hvbGVXb3JkOiB0cnVlLAotICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSwK
LSAgICAgICAgICAgIG5lZWRsZTogbmVlZGxlCi0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVy
biByZTsKLSAgICB9OwotCi0KLSAgICB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVGcm9udE1hcmtlcnMoKTsKLSAgICB9
OwotCi0gICAgdGhpcy5vbkNoYW5nZUJhY2tNYXJrZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOwotICAgIH07Ci0KLQotICAgIHRoaXMu
b25DaGFuZ2VCcmVha3BvaW50ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIu
dXBkYXRlQnJlYWtwb2ludHMoKTsKLSAgICB9OwotCi0gICAgdGhpcy5vbkNoYW5nZUFubm90YXRp
b24gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbm5vdGF0aW9ucyh0
aGlzLnNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKSk7Ci0gICAgfTsKLQotCi0gICAgdGhpcy5vbkNo
YW5nZU1vZGUgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4
dCgpOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VNb2RlIiwgZSk7Ci0gICAgfTsKLQotCi0g
ICAgdGhpcy5vbkNoYW5nZVdyYXBMaW1pdCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnJl
bmRlcmVyLnVwZGF0ZUZ1bGwoKTsKLSAgICB9OwotCi0gICAgdGhpcy5vbkNoYW5nZVdyYXBNb2Rl
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIub25SZXNpemUodHJ1ZSk7Ci0g
ICAgfTsKLQotCi0gICAgdGhpcy5vbkNoYW5nZUZvbGQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpOwotICAgICAgICB0aGlzLnJlbmRlcmVy
LnVwZGF0ZUZ1bGwoKTsKLSAgICB9OwotCi0gICAgdGhpcy5nZXRDb3B5VGV4dCA9IGZ1bmN0aW9u
KCkgewotICAgICAgICB2YXIgdGV4dCA9ICIiOwotICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9u
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdl
KHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7Ci0KLSAgICAgICAgdGhpcy5fZW1pdCgiY29weSIs
IHRleHQpOwotICAgICAgICByZXR1cm4gdGV4dDsKLSAgICB9OwotICAgIHRoaXMub25Db3B5ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYygiY29weSIsIHRoaXMpOwot
ICAgIH07Ci0gICAgdGhpcy5vbkN1dCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmNvbW1h
bmRzLmV4ZWMoImN1dCIsIHRoaXMpOwotICAgIH07Ci0gICAgdGhpcy5vblBhc3RlID0gZnVuY3Rp
b24odGV4dCkgewotICAgICAgICBpZiAodGhpcy4kcmVhZE9ubHkpIAotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0aGlzLl9lbWl0KCJwYXN0ZSIsIHRleHQpOwotICAgICAgICB0aGlzLmlu
c2VydCh0ZXh0KTsKLSAgICB9OwotCi0KLSAgICB0aGlzLmV4ZWNDb21tYW5kID0gZnVuY3Rpb24o
Y29tbWFuZCwgYXJncykgewotICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoY29tbWFuZCwgdGhp
cywgYXJncyk7Ci0gICAgfTsKLSAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHRleHQpIHsKLSAg
ICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247Ci0gICAgICAgIHZhciBtb2RlID0gc2Vz
c2lvbi5nZXRNb2RlKCk7Ci0gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0
aW9uKCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuZ2V0QmVoYXZpb3Vyc0VuYWJsZWQoKSkgewotICAg
ICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG1vZGUudHJhbnNmb3JtQWN0aW9uKHNlc3Npb24uZ2V0
U3RhdGUoY3Vyc29yLnJvdyksICdpbnNlcnRpb24nLCB0aGlzLCBzZXNzaW9uLCB0ZXh0KTsKLSAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm0pCi0gICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9y
bS50ZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHQiLCB0
aGlzLnNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpOwotICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9u
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY3Vyc29yID0gdGhpcy5zZXNzaW9uLnJlbW92ZSh0
aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOwotICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlv
bigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3Jp
dGUoKSkgewotICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlLmZyb21Qb2ludHMoY3Vy
c29yLCBjdXJzb3IpOwotICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArPSB0ZXh0Lmxlbmd0
aDsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwotCi0gICAgICAgIHZhciBzdGFydCA9IGN1
cnNvci5jb2x1bW47Ci0gICAgICAgIHZhciBsaW5lU3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKGN1
cnNvci5yb3cpOwotICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93
KTsKLSAgICAgICAgdmFyIHNob3VsZE91dGRlbnQgPSBtb2RlLmNoZWNrT3V0ZGVudChsaW5lU3Rh
dGUsIGxpbmUsIHRleHQpOwotICAgICAgICB2YXIgZW5kID0gc2Vzc2lvbi5pbnNlcnQoY3Vyc29y
LCB0ZXh0KTsKLQotICAgICAgICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5zZWxlY3Rpb24p
IHsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0uc2VsZWN0aW9uLmxlbmd0aCA9PSAyKSB7IC8v
IFRyYW5zZm9ybSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBjb2x1bW4KLSAgICAgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZSgKLSAgICAgICAgICAgICAgICAgICAg
bmV3IFJhbmdlKGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblswXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3Jt
LnNlbGVjdGlvblsxXSkpOwotICAgICAgICAgICAgfSBlbHNlIHsgLy8gVHJhbnNmb3JtIHJlbGF0
aXZlIHRvIHRoZSBjdXJyZW50IHJvdy4KLSAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb25SYW5nZSgKLSAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5y
b3cgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJhbnNmb3JtLnNlbGVjdGlvblsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnNvci5yb3cgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzJdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJhbnNmb3JtLnNlbGVjdGlvblszXSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGlmIChzZXNzaW9uLmdldERvY3VtZW50KCkuaXNOZXdMaW5lKHRleHQp
KSB7Ci0gICAgICAgICAgICB2YXIgbGluZUluZGVudCA9IG1vZGUuZ2V0TmV4dExpbmVJbmRlbnQo
bGluZVN0YXRlLCBsaW5lLnNsaWNlKDAsIGN1cnNvci5jb2x1bW4pLCBzZXNzaW9uLmdldFRhYlN0
cmluZygpKTsKLQotICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oY3Vyc29yLnJvdysxLCAw
KTsKLQotICAgICAgICAgICAgdmFyIHNpemUgPSBzZXNzaW9uLmdldFRhYlNpemUoKTsKLSAgICAg
ICAgICAgIHZhciBtaW5JbmRlbnQgPSBOdW1iZXIuTUFYX1ZBTFVFOwotCi0gICAgICAgICAgICBm
b3IgKHZhciByb3cgPSBjdXJzb3Iucm93ICsgMTsgcm93IDw9IGVuZC5yb3c7ICsrcm93KSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGluZGVudCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBsaW5lID0g
c2Vzc2lvbi5nZXRMaW5lKHJvdyk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsaW5lLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5jaGFyQXQo
aSkgPT0gJ1x0JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArPSBzaXplOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChsaW5lLmNoYXJBdChpKSA9PSAnICcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKC9bXlxz
XS8udGVzdChsaW5lKSkKLSAgICAgICAgICAgICAgICAgICAgbWluSW5kZW50ID0gTWF0aC5taW4o
aW5kZW50LCBtaW5JbmRlbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHZh
ciByb3cgPSBjdXJzb3Iucm93ICsgMTsgcm93IDw9IGVuZC5yb3c7ICsrcm93KSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG91dGRlbnQgPSBtaW5JbmRlbnQ7Ci0KLSAgICAgICAgICAgICAgICBsaW5l
ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsaW5lLmxlbmd0aCAmJiBvdXRkZW50ID4gMDsgKytpKQotICAgICAgICAgICAgICAgICAg
ICBpZiAobGluZS5jaGFyQXQoaSkgPT0gJ1x0JykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dGRlbnQgLT0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobGluZS5jaGFyQXQo
aSkgPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGVudCAtPSAxOwotICAgICAg
ICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgaSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc2Vzc2lvbi5pbmRlbnRSb3dzKGN1cnNvci5yb3cgKyAx
LCBlbmQucm93LCBsaW5lSW5kZW50KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkT3V0
ZGVudCkKLSAgICAgICAgICAgIG1vZGUuYXV0b091dGRlbnQobGluZVN0YXRlLCBzZXNzaW9uLCBj
dXJzb3Iucm93KTsKLSAgICB9OwotCi0gICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRl
eHQpIHsKLSAgICAgICAgdGhpcy5rZXlCaW5kaW5nLm9uVGV4dElucHV0KHRleHQpOwotICAgIH07
Ci0KLSAgICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkg
ewotICAgICAgICB0aGlzLmtleUJpbmRpbmcub25Db21tYW5kS2V5KGUsIGhhc2hJZCwga2V5Q29k
ZSk7Ci0gICAgfTsKLSAgICB0aGlzLnNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkg
ewotICAgICAgICB0aGlzLnNlc3Npb24uc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZSk7Ci0gICAgfTsK
LSAgICB0aGlzLmdldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhp
cy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpOwotICAgIH07Ci0gICAgdGhpcy50b2dnbGVPdmVyd3Jp
dGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5zZXNzaW9uLnRvZ2dsZU92ZXJ3cml0ZSgp
OwotICAgIH07Ci0gICAgdGhpcy5zZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKHNwZWVkKSB7Ci0g
ICAgICAgIHRoaXMuc2V0T3B0aW9uKCJzY3JvbGxTcGVlZCIsIHNwZWVkKTsKLSAgICB9OwotICAg
IHRoaXMuZ2V0U2Nyb2xsU3BlZWQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
Z2V0T3B0aW9uKCJzY3JvbGxTcGVlZCIpOwotICAgIH07Ci0gICAgdGhpcy5zZXREcmFnRGVsYXkg
PSBmdW5jdGlvbihkcmFnRGVsYXkpIHsKLSAgICAgICAgdGhpcy5zZXRPcHRpb24oImRyYWdEZWxh
eSIsIGRyYWdEZWxheSk7Ci0gICAgfTsKLSAgICB0aGlzLmdldERyYWdEZWxheSA9IGZ1bmN0aW9u
KCkgewotICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImRyYWdEZWxheSIpOwotICAgIH07
Ci0gICAgdGhpcy5zZXRTZWxlY3Rpb25TdHlsZSA9IGZ1bmN0aW9uKHZhbCkgewotICAgICAgICB0
aGlzLnNldE9wdGlvbigic2VsZWN0aW9uU3R5bGUiLCB2YWwpOwotICAgIH07Ci0gICAgdGhpcy5n
ZXRTZWxlY3Rpb25TdHlsZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5nZXRP
cHRpb24oInNlbGVjdGlvblN0eWxlIik7Ci0gICAgfTsKLSAgICB0aGlzLnNldEhpZ2hsaWdodEFj
dGl2ZUxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKLSAgICAgICAgdGhpcy5zZXRP
cHRpb24oImhpZ2hsaWdodEFjdGl2ZUxpbmUiLCBzaG91bGRIaWdobGlnaHQpOwotICAgIH07Ci0g
ICAgdGhpcy5nZXRIaWdobGlnaHRBY3RpdmVMaW5lID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0QWN0aXZlTGluZSIpOwotICAgIH07Ci0gICAg
dGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7
Ci0gICAgICAgIHRoaXMuc2V0T3B0aW9uKCJoaWdobGlnaHRHdXR0ZXJMaW5lIiwgc2hvdWxkSGln
aGxpZ2h0KTsKLSAgICB9OwotCi0gICAgdGhpcy5nZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVy
TGluZSIpOwotICAgIH07Ci0gICAgdGhpcy5zZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBmdW5j
dGlvbihzaG91bGRIaWdobGlnaHQpIHsKLSAgICAgICAgdGhpcy5zZXRPcHRpb24oImhpZ2hsaWdo
dFNlbGVjdGVkV29yZCIsIHNob3VsZEhpZ2hsaWdodCk7Ci0gICAgfTsKLSAgICB0aGlzLmdldEhp
Z2hsaWdodFNlbGVjdGVkV29yZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4k
aGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOwotICAgIH07Ci0KLSAgICB0aGlzLnNldEFuaW1hdGVkU2Ny
b2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0
QW5pbWF0ZWRTY3JvbGwoc2hvdWxkQW5pbWF0ZSk7Ci0gICAgfTsKLQotICAgIHRoaXMuZ2V0QW5p
bWF0ZWRTY3JvbGwgPSBmdW5jdGlvbigpewotICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5n
ZXRBbmltYXRlZFNjcm9sbCgpOwotICAgIH07Ci0gICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9
IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2hv
d0ludmlzaWJsZXMoc2hvd0ludmlzaWJsZXMpOwotICAgIH07Ci0gICAgdGhpcy5nZXRTaG93SW52
aXNpYmxlcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRT
aG93SW52aXNpYmxlcygpOwotICAgIH07Ci0KLSAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlk
ZXMgPSBmdW5jdGlvbihkaXNwbGF5KSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RGlzcGxh
eUluZGVudEd1aWRlcyhkaXNwbGF5KTsKLSAgICB9OwotCi0gICAgdGhpcy5nZXREaXNwbGF5SW5k
ZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdl
dERpc3BsYXlJbmRlbnRHdWlkZXMoKTsKLSAgICB9OwotICAgIHRoaXMuc2V0U2hvd1ByaW50TWFy
Z2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIu
c2V0U2hvd1ByaW50TWFyZ2luKHNob3dQcmludE1hcmdpbik7Ci0gICAgfTsKLSAgICB0aGlzLmdl
dFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5yZW5k
ZXJlci5nZXRTaG93UHJpbnRNYXJnaW4oKTsKLSAgICB9OwotICAgIHRoaXMuc2V0UHJpbnRNYXJn
aW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsKLSAgICAgICAgdGhpcy5yZW5k
ZXJlci5zZXRQcmludE1hcmdpbkNvbHVtbihzaG93UHJpbnRNYXJnaW4pOwotICAgIH07Ci0gICAg
dGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4g
dGhpcy5yZW5kZXJlci5nZXRQcmludE1hcmdpbkNvbHVtbigpOwotICAgIH07Ci0gICAgdGhpcy5z
ZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7Ci0gICAgICAgIHRoaXMuc2V0T3B0aW9u
KCJyZWFkT25seSIsIHJlYWRPbmx5KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0UmVhZE9ubHkgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJyZWFkT25seSIpOwot
ICAgIH07Ci0gICAgdGhpcy5zZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFibGVk
KSB7Ci0gICAgICAgIHRoaXMuc2V0T3B0aW9uKCJiZWhhdmlvdXJzRW5hYmxlZCIsIGVuYWJsZWQp
OwotICAgIH07Ci0gICAgdGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJiZWhhdmlvdXJzRW5hYmxlZCIpOwotICAg
IH07Ci0gICAgdGhpcy5zZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxl
ZCkgewotICAgICAgICB0aGlzLnNldE9wdGlvbigid3JhcEJlaGF2aW91cnNFbmFibGVkIiwgZW5h
YmxlZCk7Ci0gICAgfTsKLSAgICB0aGlzLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJ3cmFwQmVoYXZpb3Vyc0Vu
YWJsZWQiKTsKLSAgICB9OwotICAgIHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24o
c2hvdykgewotICAgICAgICB0aGlzLnNldE9wdGlvbigic2hvd0ZvbGRXaWRnZXRzIiwgc2hvdyk7
Ci0KLSAgICB9OwotICAgIHRoaXMuZ2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigic2hvd0ZvbGRXaWRnZXRzIik7Ci0gICAgfTsK
LQotICAgIHRoaXMuc2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oZmFkZSkgewotICAgICAg
ICB0aGlzLnNldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIiwgZmFkZSk7Ci0gICAgfTsKLQotICAg
IHRoaXMuZ2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmdldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIik7Ci0gICAgfTsKLSAgICB0aGlzLnJlbW92
ZSA9IGZ1bmN0aW9uKGRpcikgewotICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgp
KXsKLSAgICAgICAgICAgIGlmIChkaXIgPT0gImxlZnQiKQotICAgICAgICAgICAgICAgIHRoaXMu
c2VsZWN0aW9uLnNlbGVjdExlZnQoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RSaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOwotICAgICAgICBpZiAodGhpcy5nZXRC
ZWhhdmlvdXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vz
c2lvbjsKLSAgICAgICAgICAgIHZhciBzdGF0ZSA9IHNlc3Npb24uZ2V0U3RhdGUocmFuZ2Uuc3Rh
cnQucm93KTsKLSAgICAgICAgICAgIHZhciBuZXdfcmFuZ2UgPSBzZXNzaW9uLmdldE1vZGUoKS50
cmFuc2Zvcm1BY3Rpb24oc3RhdGUsICdkZWxldGlvbicsIHRoaXMsIHNlc3Npb24sIHJhbmdlKTsK
LSAgICAgICAgICAgIGlmIChuZXdfcmFuZ2UpCi0gICAgICAgICAgICAgICAgcmFuZ2UgPSBuZXdf
cmFuZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsK
LSAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVX
b3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRSaWdodCgpOwotCi0g
ICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKLSAg
ICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVXb3Jk
TGVmdCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgp
KQotICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQoKTsKLQotICAgICAg
ICB0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7Ci0gICAgICAg
IHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICB9OwotICAgIHRoaXMucmVtb3ZlVG9MaW5lU3Rh
cnQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExpbmVTdGFydCgpOwotCi0gICAgICAg
IHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKLSAgICAgICAg
dGhpcy5jbGVhclNlbGVjdGlvbigpOwotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVUb0xpbmVFbmQg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExpbmVFbmQoKTsKLQotICAgICAgICB2YXIg
cmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAgIGlmIChyYW5nZS5zdGFy
dC5jb2x1bW4gPT0gcmFuZ2UuZW5kLmNvbHVtbiAmJiByYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2Uu
ZW5kLnJvdykgewotICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IDA7Ci0gICAgICAgICAg
ICByYW5nZS5lbmQucm93Kys7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnNlc3Npb24ucmVt
b3ZlKHJhbmdlKTsKLSAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwotICAgIH07Ci0gICAg
dGhpcy5zcGxpdExpbmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlv
bi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRT
ZWxlY3Rpb25SYW5nZSgpKTsKLSAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7
Ci0gICAgICAgIHRoaXMuaW5zZXJ0KCJcbiIpOwotICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bv
c2l0aW9uKGN1cnNvcik7Ci0gICAgfTsKLSAgICB0aGlzLnRyYW5zcG9zZUxldHRlcnMgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdl
dEN1cnNvclBvc2l0aW9uKCk7Ci0gICAgICAgIHZhciBjb2x1bW4gPSBjdXJzb3IuY29sdW1uOwot
ICAgICAgICBpZiAoY29sdW1uID09PSAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHZhciBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7Ci0gICAgICAgIHZh
ciBzd2FwLCByYW5nZTsKLSAgICAgICAgaWYgKGNvbHVtbiA8IGxpbmUubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBzd2FwID0gbGluZS5jaGFyQXQoY29sdW1uKSArIGxpbmUuY2hhckF0KGNvbHVtbi0x
KTsKLSAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKGN1cnNvci5yb3csIGNvbHVtbi0xLCBj
dXJzb3Iucm93LCBjb2x1bW4rMSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBzd2FwID0gbGluZS5jaGFyQXQoY29sdW1uLTEpICsgbGluZS5jaGFyQXQoY29sdW1uLTIp
OwotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoY3Vyc29yLnJvdywgY29sdW1uLTIsIGN1
cnNvci5yb3csIGNvbHVtbik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5zZXNzaW9uLnJlcGxh
Y2UocmFuZ2UsIHN3YXApOwotICAgIH07Ci0gICAgdGhpcy50b0xvd2VyQ2FzZSA9IGZ1bmN0aW9u
KCkgewotICAgICAgICB2YXIgb3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2Uo
KTsKLSAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
dGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHJh
bmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOwotICAgICAgICB2YXIgdGV4dCA9IHRoaXMu
c2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpOwotICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFj
ZShyYW5nZSwgdGV4dC50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0
U2VsZWN0aW9uUmFuZ2Uob3JpZ2luYWxSYW5nZSk7Ci0gICAgfTsKLSAgICB0aGlzLnRvVXBwZXJD
YXNlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBvcmlnaW5hbFJhbmdlID0gdGhpcy5nZXRT
ZWxlY3Rpb25SYW5nZSgpOwotICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAgIHZh
ciB0ZXh0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7Ci0gICAgICAgIHRoaXMu
c2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB0ZXh0LnRvVXBwZXJDYXNlKCkpOwotICAgICAgICB0aGlz
LnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShvcmlnaW5hbFJhbmdlKTsKLSAgICB9OwotICAg
IHRoaXMuaW5kZW50ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5z
ZXNzaW9uOwotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0K
LSAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8IHJhbmdlLmVuZC5yb3cgfHwgcmFuZ2Uuc3Rh
cnQuY29sdW1uIDwgcmFuZ2UuZW5kLmNvbHVtbikgewotICAgICAgICAgICAgdmFyIHJvd3MgPSB0
aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKLSAgICAgICAgICAgIHNlc3Npb24uaW5kZW50Um93cyhy
b3dzLmZpcnN0LCByb3dzLmxhc3QsICJcdCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdmFyIGluZGVudFN0cmluZzsKLQotICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRV
c2VTb2Z0VGFicygpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNpemUgICAgICAgID0gc2Vzc2lv
bi5nZXRUYWJTaXplKCksCi0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgID0gdGhpcy5n
ZXRDdXJzb3JQb3NpdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBjb2x1bW4gICAgICA9IHNl
c3Npb24uZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVt
biksCi0gICAgICAgICAgICAgICAgICAgIGNvdW50ICAgICAgID0gKHNpemUgLSBjb2x1bW4gJSBz
aXplKTsKLQotICAgICAgICAgICAgICAgIGluZGVudFN0cmluZyA9IGxhbmcuc3RyaW5nUmVwZWF0
KCIgIiwgY291bnQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5kZW50
U3RyaW5nID0gIlx0IjsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydChpbmRlbnRTdHJp
bmcpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICB0aGlzLmJsb2NrSW5kZW50ID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7Ci0gICAgICAg
IHRoaXMuc2Vzc2lvbi5pbmRlbnRSb3dzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgIlx0Iik7Ci0g
ICAgfTsKLSAgICB0aGlzLmJsb2NrT3V0ZGVudCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIg
c2VsZWN0aW9uID0gdGhpcy5zZXNzaW9uLmdldFNlbGVjdGlvbigpOwotICAgICAgICB0aGlzLnNl
c3Npb24ub3V0ZGVudFJvd3Moc2VsZWN0aW9uLmdldFJhbmdlKCkpOwotICAgIH07Ci0gICAgdGhp
cy5zb3J0TGluZXMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRT
ZWxlY3RlZFJvd3MoKTsKLSAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247Ci0KLSAg
ICAgICAgdmFyIGxpbmVzID0gW107Ci0gICAgICAgIGZvciAoaSA9IHJvd3MuZmlyc3Q7IGkgPD0g
cm93cy5sYXN0OyBpKyspCi0gICAgICAgICAgICBsaW5lcy5wdXNoKHNlc3Npb24uZ2V0TGluZShp
KSk7Ci0KLSAgICAgICAgbGluZXMuc29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgICAgICBp
ZiAoYS50b0xvd2VyQ2FzZSgpIDwgYi50b0xvd2VyQ2FzZSgpKSByZXR1cm4gLTE7Ci0gICAgICAg
ICAgICBpZiAoYS50b0xvd2VyQ2FzZSgpID4gYi50b0xvd2VyQ2FzZSgpKSByZXR1cm4gMTsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgZGVsZXRlUmFu
Z2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSByb3dzLmZp
cnN0OyBpIDw9IHJvd3MubGFzdDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Np
b24uZ2V0TGluZShpKTsKLSAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9IGk7Ci0g
ICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKLSAgICAgICAgICAgIGRlbGV0ZVJh
bmdlLmVuZC5jb2x1bW4gPSBsaW5lLmxlbmd0aDsKLSAgICAgICAgICAgIHNlc3Npb24ucmVwbGFj
ZShkZWxldGVSYW5nZSwgbGluZXNbaS1yb3dzLmZpcnN0XSk7Ci0gICAgICAgIH0KLSAgICB9Owot
ICAgIHRoaXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBz
dGF0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRTdGF0ZSh0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkucm93
KTsKLSAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKLSAgICAgICAg
dGhpcy5zZXNzaW9uLmdldE1vZGUoKS50b2dnbGVDb21tZW50TGluZXMoc3RhdGUsIHRoaXMuc2Vz
c2lvbiwgcm93cy5maXJzdCwgcm93cy5sYXN0KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0TnVtYmVy
QXQgPSBmdW5jdGlvbiggcm93LCBjb2x1bW4gKSB7Ci0gICAgICAgIHZhciBfbnVtYmVyUnggPSAv
W1wtXT9bMC05XSsoPzpcLlswLTldKyk/L2cKLSAgICAgICAgX251bWJlclJ4Lmxhc3RJbmRleCA9
IDAKLQotICAgICAgICB2YXIgcyA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvdykKLSAgICAgICAg
d2hpbGUoX251bWJlclJ4Lmxhc3RJbmRleCA8IGNvbHVtbiAtIDEgKXsKLSAgICAgICAgICAgIHZh
ciBtID0gX251bWJlclJ4LmV4ZWMocykKLSAgICAgICAgICAgIGlmKG0uaW5kZXggPD0gY29sdW1u
ICYmIG0uaW5kZXgrbVswXS5sZW5ndGggPj0gY29sdW1uKXsKLSAgICAgICAgICAgICAgICB2YXIg
bnVtYmVyID0gewotICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbVswXSwKLSAgICAgICAgICAg
ICAgICAgICAgc3RhcnQ6IG0uaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIGVuZDogbS5pbmRl
eCttWzBdLmxlbmd0aAotCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biBudW1iZXIKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB9OwotICAgIHRoaXMubW9kaWZ5TnVtYmVyID0gZnVuY3Rpb24oYW1vdW50KSB7Ci0gICAg
ICAgIHZhciByb3cgPSB0aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKS5yb3c7Ci0gICAgICAgIHZh
ciBjb2x1bW4gPSB0aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKS5jb2x1bW47Ci0gICAgICAgIHZh
ciBjaGFyUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBjb2x1bW4tMSwgcm93LCBjb2x1bW4pOwotCi0g
ICAgICAgIHZhciBjID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShjaGFyUmFuZ2UpOwotICAg
ICAgICBpZiAoIWlzTmFOKHBhcnNlRmxvYXQoYykpICYmIGlzRmluaXRlKGMpKSB7Ci0gICAgICAg
ICAgICB2YXIgbnIgPSB0aGlzLmdldE51bWJlckF0KHJvdywgY29sdW1uKTsKLSAgICAgICAgICAg
IGlmIChucikgewotICAgICAgICAgICAgICAgIHZhciBmcCA9IG5yLnZhbHVlLmluZGV4T2YoIi4i
KSA+PSAwID8gbnIuc3RhcnQgKyBuci52YWx1ZS5pbmRleE9mKCIuIikgKyAxIDogbnIuZW5kOwot
ICAgICAgICAgICAgICAgIHZhciBkZWNpbWFscyA9IG5yLnN0YXJ0ICsgbnIudmFsdWUubGVuZ3Ro
IC0gZnA7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdCA9IHBhcnNlRmxvYXQobnIudmFsdWUpOwot
ICAgICAgICAgICAgICAgIHQgKj0gTWF0aC5wb3coMTAsIGRlY2ltYWxzKTsKLSAgICAgICAgICAg
ICAgICAKLQotICAgICAgICAgICAgICAgIGlmKGZwICE9PSBuci5lbmQgJiYgY29sdW1uIDwgZnAp
ewotICAgICAgICAgICAgICAgICAgICBhbW91bnQgKj0gTWF0aC5wb3coMTAsIG5yLmVuZCAtIGNv
bHVtbiAtIDEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFtb3VudCAqPSBNYXRoLnBvdygxMCwgbnIuZW5kIC0gY29sdW1uKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdCArPSBhbW91bnQ7Ci0gICAg
ICAgICAgICAgICAgdCAvPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpOwotICAgICAgICAgICAgICAg
IHZhciBubnIgPSB0LnRvRml4ZWQoZGVjaW1hbHMpOwotICAgICAgICAgICAgICAgIHZhciByZXBs
YWNlUmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBuci5zdGFydCwgcm93LCBuci5lbmQpOwotICAgICAg
ICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJlcGxhY2VSYW5nZSwgbm5yKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIE1hdGgubWF4KG5yLnN0YXJ0ICsxLCBj
b2x1bW4gKyBubnIubGVuZ3RoIC0gbnIudmFsdWUubGVuZ3RoKSk7Ci0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVMaW5lcyA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOwotICAgICAgICB2YXIg
cmFuZ2U7Ci0gICAgICAgIGlmIChyb3dzLmZpcnN0ID09PSAwIHx8IHJvd3MubGFzdCsxIDwgdGhp
cy5zZXNzaW9uLmdldExlbmd0aCgpKQotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93
cy5maXJzdCwgMCwgcm93cy5sYXN0KzEsIDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
YW5nZSA9IG5ldyBSYW5nZSgKLSAgICAgICAgICAgICAgICByb3dzLmZpcnN0LTEsIHRoaXMuc2Vz
c2lvbi5nZXRMaW5lKHJvd3MuZmlyc3QtMSkubGVuZ3RoLAotICAgICAgICAgICAgICAgIHJvd3Mu
bGFzdCwgdGhpcy5zZXNzaW9uLmdldExpbmUocm93cy5sYXN0KS5sZW5ndGgKLSAgICAgICAgICAg
ICk7Ci0gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOwotICAgICAgICB0aGlzLmNs
ZWFyU2VsZWN0aW9uKCk7Ci0gICAgfTsKLQotICAgIHRoaXMuZHVwbGljYXRlU2VsZWN0aW9uID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBzZWwgPSB0aGlzLnNlbGVjdGlvbjsKLSAgICAgICAg
dmFyIGRvYyA9IHRoaXMuc2Vzc2lvbjsKLSAgICAgICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdl
KCk7Ci0gICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHZhciByb3cg
PSByYW5nZS5zdGFydC5yb3c7Ci0gICAgICAgICAgICBkb2MuZHVwbGljYXRlTGluZXMocm93LCBy
b3cpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIHJldmVyc2UgPSBzZWwuaXNC
YWNrd2FyZHMoKQotICAgICAgICAgICAgdmFyIHBvaW50ID0gc2VsLmlzQmFja3dhcmRzKCkgPyBy
YW5nZS5zdGFydCA6IHJhbmdlLmVuZDsKLSAgICAgICAgICAgIHZhciBlbmRQb2ludCA9IGRvYy5p
bnNlcnQocG9pbnQsIGRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpLCBmYWxzZSk7Ci0gICAgICAgICAg
ICByYW5nZS5zdGFydCA9IHBvaW50OwotICAgICAgICAgICAgcmFuZ2UuZW5kID0gZW5kUG9pbnQ7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNlbC5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwg
cmV2ZXJzZSkKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5tb3ZlTGluZXNEb3duID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihmaXJzdFJvdywgbGFz
dFJvdykgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlTGluZXNEb3duKGZp
cnN0Um93LCBsYXN0Um93KTsKLSAgICAgICAgfSk7Ci0gICAgfTsKLSAgICB0aGlzLm1vdmVMaW5l
c1VwID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJG1vdmVMaW5lcyhmdW5jdGlvbihmaXJz
dFJvdywgbGFzdFJvdykgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlTGlu
ZXNVcChmaXJzdFJvdywgbGFzdFJvdyk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0gICAgdGhpcy5t
b3ZlVGV4dCA9IGZ1bmN0aW9uKHJhbmdlLCB0b1Bvc2l0aW9uKSB7Ci0gICAgICAgIGlmICh0aGlz
LiRyZWFkT25seSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiB0
aGlzLnNlc3Npb24ubW92ZVRleHQocmFuZ2UsIHRvUG9zaXRpb24pOwotICAgIH07Ci0gICAgdGhp
cy5jb3B5TGluZXNVcCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRtb3ZlTGluZXMoZnVu
Y3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kdXBs
aWNhdGVMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgfSk7Ci0gICAgfTsKLSAgICB0aGlzLmNvcHlMaW5lc0Rvd24gPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgdGhpcy4kbW92ZUxpbmVzKGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmR1cGxpY2F0ZUxpbmVzKGZpcnN0Um93LCBs
YXN0Um93KTsKLSAgICAgICAgfSk7Ci0gICAgfTsKLSAgICB0aGlzLiRtb3ZlTGluZXMgPSBmdW5j
dGlvbihtb3ZlcikgewotICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygp
OwotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247Ci0gICAgICAgIGlmICgh
c2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkpIHsKLSAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGVj
dGlvbi5nZXRSYW5nZSgpOwotICAgICAgICAgICAgdmFyIHJldmVyc2UgPSBzZWxlY3Rpb24uaXNC
YWNrd2FyZHMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBsaW5lc01vdmVkID0gbW92ZXIu
Y2FsbCh0aGlzLCByb3dzLmZpcnN0LCByb3dzLmxhc3QpOwotCi0gICAgICAgIGlmIChyYW5nZSkg
ewotICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ICs9IGxpbmVzTW92ZWQ7Ci0gICAgICAgICAg
ICByYW5nZS5lbmQucm93ICs9IGxpbmVzTW92ZWQ7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0
U2VsZWN0aW9uUmFuZ2UocmFuZ2UsIHJldmVyc2UpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihyb3dzLmxhc3QrbGlu
ZXNNb3ZlZCsxLCAwKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbi4kbW92ZVNlbGVjdGlvbihmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZUN1cnNvclRvKHJvd3MuZmly
c3QrbGluZXNNb3ZlZCwgMCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH07Ci0g
ICAgdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByYW5n
ZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5jb2xsYXBzZVJvd3MoKTsKLQotICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgICAgZmlyc3Q6IHJhbmdlLnN0YXJ0LnJvdywKLSAgICAgICAgICAg
IGxhc3Q6IHJhbmdlLmVuZC5yb3cKLSAgICAgICAgfTsKLSAgICB9OwotCi0gICAgdGhpcy5vbkNv
bXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbih0ZXh0KSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIu
c2hvd0NvbXBvc2l0aW9uKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7Ci0gICAgfTsKLQotICAg
IHRoaXMub25Db21wb3NpdGlvblVwZGF0ZSA9IGZ1bmN0aW9uKHRleHQpIHsKLSAgICAgICAgdGhp
cy5yZW5kZXJlci5zZXRDb21wb3NpdGlvblRleHQodGV4dCk7Ci0gICAgfTsKLQotICAgIHRoaXMu
b25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnJlbmRlcmVyLmhp
ZGVDb21wb3NpdGlvbigpOwotICAgIH07Ci0gICAgdGhpcy5nZXRGaXJzdFZpc2libGVSb3cgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RWaXNpYmxl
Um93KCk7Ci0gICAgfTsKLSAgICB0aGlzLmdldExhc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldExhc3RWaXNpYmxlUm93KCk7Ci0gICAg
fTsKLSAgICB0aGlzLmlzUm93VmlzaWJsZSA9IGZ1bmN0aW9uKHJvdykgewotICAgICAgICByZXR1
cm4gKHJvdyA+PSB0aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpICYmIHJvdyA8PSB0aGlzLmdldExh
c3RWaXNpYmxlUm93KCkpOwotICAgIH07Ci0gICAgdGhpcy5pc1Jvd0Z1bGx5VmlzaWJsZSA9IGZ1
bmN0aW9uKHJvdykgewotICAgICAgICByZXR1cm4gKHJvdyA+PSB0aGlzLnJlbmRlcmVyLmdldEZp
cnN0RnVsbHlWaXNpYmxlUm93KCkgJiYgcm93IDw9IHRoaXMucmVuZGVyZXIuZ2V0TGFzdEZ1bGx5
VmlzaWJsZVJvdygpKTsKLSAgICB9OwotICAgIHRoaXMuJGdldFZpc2libGVSb3dDb3VudCA9IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxCb3R0b21S
b3coKSAtIHRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsVG9wUm93KCkgKyAxOwotICAgIH07Ci0KLSAg
ICB0aGlzLiRtb3ZlQnlQYWdlID0gZnVuY3Rpb24oZGlyLCBzZWxlY3QpIHsKLSAgICAgICAgdmFy
IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjsKLSAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMucmVu
ZGVyZXIubGF5ZXJDb25maWc7Ci0gICAgICAgIHZhciByb3dzID0gZGlyICogTWF0aC5mbG9vcihj
b25maWcuaGVpZ2h0IC8gY29uZmlnLmxpbmVIZWlnaHQpOwotCi0gICAgICAgIHRoaXMuJGJsb2Nr
U2Nyb2xsaW5nKys7Ci0gICAgICAgIGlmIChzZWxlY3QgPT0gdHJ1ZSkgewotICAgICAgICAgICAg
dGhpcy5zZWxlY3Rpb24uJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAg
ICB0aGlzLm1vdmVDdXJzb3JCeShyb3dzLCAwKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
IGVsc2UgaWYgKHNlbGVjdCA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24u
bW92ZUN1cnNvckJ5KHJvd3MsIDApOwotICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJT
ZWxlY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZy0tOwot
Ci0gICAgICAgIHZhciBzY3JvbGxUb3AgPSByZW5kZXJlci5zY3JvbGxUb3A7Ci0KLSAgICAgICAg
cmVuZGVyZXIuc2Nyb2xsQnkoMCwgcm93cyAqIGNvbmZpZy5saW5lSGVpZ2h0KTsKLSAgICAgICAg
aWYgKHNlbGVjdCAhPSBudWxsKQotICAgICAgICAgICAgcmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50
b1ZpZXcobnVsbCwgMC41KTsKLQotICAgICAgICByZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNj
cm9sbFRvcCk7Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVjdFBhZ2VEb3duID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoMSwgdHJ1ZSk7Ci0gICAgfTsKLSAgICB0aGlzLnNl
bGVjdFBhZ2VVcCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKC0xLCB0
cnVlKTsKLSAgICB9OwotICAgIHRoaXMuZ290b1BhZ2VEb3duID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgdGhpcy4kbW92ZUJ5UGFnZSgxLCBmYWxzZSk7Ci0gICAgfTsKLSAgICB0aGlzLmdvdG9QYWdl
VXAgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSwgZmFsc2UpOwot
ICAgIH07Ci0gICAgdGhpcy5zY3JvbGxQYWdlRG93biA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0
aGlzLiRtb3ZlQnlQYWdlKDEpOwotICAgIH07Ci0gICAgdGhpcy5zY3JvbGxQYWdlVXAgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSk7Ci0gICAgfTsKLSAgICB0aGlz
LnNjcm9sbFRvUm93ID0gZnVuY3Rpb24ocm93KSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2Ny
b2xsVG9Sb3cocm93KTsKLSAgICB9OwotICAgIHRoaXMuc2Nyb2xsVG9MaW5lID0gZnVuY3Rpb24o
bGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykgewotICAgICAgICB0aGlzLnJlbmRlcmVy
LnNjcm9sbFRvTGluZShsaW5lLCBjZW50ZXIsIGFuaW1hdGUsIGNhbGxiYWNrKTsKLSAgICB9Owot
ICAgIHRoaXMuY2VudGVyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByYW5n
ZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAgICAgICAgdmFyIHBvcyA9IHsKLSAgICAg
ICAgICAgIHJvdzogTWF0aC5mbG9vcihyYW5nZS5zdGFydC5yb3cgKyAocmFuZ2UuZW5kLnJvdyAt
IHJhbmdlLnN0YXJ0LnJvdykgLyAyKSwKLSAgICAgICAgICAgIGNvbHVtbjogTWF0aC5mbG9vcihy
YW5nZS5zdGFydC5jb2x1bW4gKyAocmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVt
bikgLyAyKQotICAgICAgICB9Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuYWxpZ25DdXJzb3IocG9z
LCAwLjUpOwotICAgIH07Ci0gICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7Ci0gICAgfTsKLSAg
ICB0aGlzLmdldEN1cnNvclBvc2l0aW9uU2NyZWVuID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZ2V0Q3Vyc29y
UG9zaXRpb24oKSk7Ci0gICAgfTsKLSAgICB0aGlzLmdldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwotICAgIH07
Ci0gICAgdGhpcy5zZWxlY3RBbGwgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy4kYmxvY2tT
Y3JvbGxpbmcgKz0gMTsKLSAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0QWxsKCk7Ci0gICAg
ICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nIC09IDE7Ci0gICAgfTsKLSAgICB0aGlzLmNsZWFyU2Vs
ZWN0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0
aW9uKCk7Ci0gICAgfTsKLSAgICB0aGlzLm1vdmVDdXJzb3JUbyA9IGZ1bmN0aW9uKHJvdywgY29s
dW1uKSB7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbik7
Ci0gICAgfTsKLSAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uID0gZnVuY3Rpb24ocG9zKSB7
Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7Ci0gICAg
fTsKLSAgICB0aGlzLmp1bXBUb01hdGNoaW5nID0gZnVuY3Rpb24oc2VsZWN0KSB7Ci0gICAgICAg
IHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7Ci0KLSAgICAgICAgdmFyIHJh
bmdlID0gdGhpcy5zZXNzaW9uLmdldEJyYWNrZXRSYW5nZShjdXJzb3IpOwotICAgICAgICBpZiAo
IXJhbmdlKSB7Ci0gICAgICAgICAgICByYW5nZSA9IHRoaXMuZmluZCh7Ci0gICAgICAgICAgICAg
ICAgbmVlZGxlOiAvW3t9KClcW1xdXS9nLAotICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6
dHJ1ZSwKLSAgICAgICAgICAgICAgICBzdGFydDoge3JvdzogY3Vyc29yLnJvdywgY29sdW1uOiBj
dXJzb3IuY29sdW1uIC0gMX0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKCFyYW5n
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2YXIgcG9zID0gcmFuZ2Uu
c3RhcnQ7Ci0gICAgICAgICAgICBpZiAocG9zLnJvdyA9PSBjdXJzb3Iucm93ICYmIE1hdGguYWJz
KHBvcy5jb2x1bW4gLSBjdXJzb3IuY29sdW1uKSA8IDIpCi0gICAgICAgICAgICAgICAgcmFuZ2Ug
PSB0aGlzLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHBvcyA9IHJhbmdlICYmIHJhbmdlLmN1cnNvciB8fCBwb3M7Ci0gICAgICAgIGlm
IChwb3MpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3QpIHsKLSAgICAgICAgICAgICAgICBpZiAo
cmFuZ2UgJiYgcmFuZ2UuaXNFcXVhbCh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpKQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RUbyhwb3Mucm93LCBw
b3MuY29sdW1uKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5j
bGVhclNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHBvcy5y
b3csIHBvcy5jb2x1bW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLSAgICB0
aGlzLmdvdG9MaW5lID0gZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uLCBhbmltYXRlKSB7Ci0g
ICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgICAgIHRoaXMuc2Vz
c2lvbi51bmZvbGQoe3JvdzogbGluZU51bWJlciAtIDEsIGNvbHVtbjogY29sdW1uIHx8IDB9KTsK
LQotICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxOwotICAgICAgICB0aGlzLm1vdmVD
dXJzb3JUbyhsaW5lTnVtYmVyIC0gMSwgY29sdW1uIHx8IDApOwotICAgICAgICB0aGlzLiRibG9j
a1Njcm9sbGluZyAtPSAxOwotCi0gICAgICAgIGlmICghdGhpcy5pc1Jvd0Z1bGx5VmlzaWJsZShs
aW5lTnVtYmVyIC0gMSkpCi0gICAgICAgICAgICB0aGlzLnNjcm9sbFRvTGluZShsaW5lTnVtYmVy
IC0gMSwgdHJ1ZSwgYW5pbWF0ZSk7Ci0gICAgfTsKLSAgICB0aGlzLm5hdmlnYXRlVG8gPSBmdW5j
dGlvbihyb3csIGNvbHVtbikgewotICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAg
ICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKLSAgICB9OwotICAgIHRoaXMubmF2
aWdhdGVVcCA9IGZ1bmN0aW9uKHRpbWVzKSB7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFy
U2VsZWN0aW9uKCk7Ci0gICAgICAgIHRpbWVzID0gdGltZXMgfHwgMTsKLSAgICAgICAgdGhpcy5z
ZWxlY3Rpb24ubW92ZUN1cnNvckJ5KC10aW1lcywgMCk7Ci0gICAgfTsKLSAgICB0aGlzLm5hdmln
YXRlRG93biA9IGZ1bmN0aW9uKHRpbWVzKSB7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFy
U2VsZWN0aW9uKCk7Ci0gICAgICAgIHRpbWVzID0gdGltZXMgfHwgMTsKLSAgICAgICAgdGhpcy5z
ZWxlY3Rpb24ubW92ZUN1cnNvckJ5KHRpbWVzLCAwKTsKLSAgICB9OwotICAgIHRoaXMubmF2aWdh
dGVMZWZ0ID0gZnVuY3Rpb24odGltZXMpIHsKLSAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IHRoaXMuZ2V0U2Vs
ZWN0aW9uUmFuZ2UoKS5zdGFydDsKLSAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRp
b24oc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgdGltZXMgPSB0aW1lcyB8fCAxOwotICAgICAgICAgICAgd2hpbGUgKHRpbWVzLS0pIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGVmdCgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICB9Owot
ICAgIHRoaXMubmF2aWdhdGVSaWdodCA9IGZ1bmN0aW9uKHRpbWVzKSB7Ci0gICAgICAgIGlmICgh
dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5k
ID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLmVuZDsKLSAgICAgICAgICAgIHRoaXMubW92ZUN1
cnNvclRvUG9zaXRpb24oc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHRpbWVzID0gdGltZXMgfHwgMTsKLSAgICAgICAgICAgIHdoaWxlICh0aW1l
cy0tKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclJpZ2h0KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigp
OwotICAgIH07Ci0gICAgdGhpcy5uYXZpZ2F0ZUxpbmVTdGFydCA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZVN0YXJ0KCk7Ci0gICAgICAgIHRoaXMu
Y2xlYXJTZWxlY3Rpb24oKTsKLSAgICB9OwotICAgIHRoaXMubmF2aWdhdGVMaW5lRW5kID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JMaW5lRW5kKCk7Ci0g
ICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICB9OwotICAgIHRoaXMubmF2aWdhdGVG
aWxlRW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnJlbmRl
cmVyLnNjcm9sbFRvcDsKLSAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckZpbGVFbmQo
KTsKLSAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwotICAgICAgICB0aGlzLnJlbmRlcmVy
LmFuaW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsKLSAgICB9OwotICAgIHRoaXMubmF2aWdhdGVG
aWxlU3RhcnQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMucmVu
ZGVyZXIuc2Nyb2xsVG9wOwotICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZVN0
YXJ0KCk7Ci0gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICAgICAgdGhpcy5yZW5k
ZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNjcm9sbFRvcCk7Ci0gICAgfTsKLSAgICB0aGlzLm5hdmln
YXRlV29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVD
dXJzb3JXb3JkUmlnaHQoKTsKLSAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwotICAgIH07
Ci0gICAgdGhpcy5uYXZpZ2F0ZVdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMu
c2VsZWN0aW9uLm1vdmVDdXJzb3JXb3JkTGVmdCgpOwotICAgICAgICB0aGlzLmNsZWFyU2VsZWN0
aW9uKCk7Ci0gICAgfTsKLSAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyZXBsYWNlbWVudCwg
b3B0aW9ucykgewotICAgICAgICBpZiAob3B0aW9ucykKLSAgICAgICAgICAgIHRoaXMuJHNlYXJj
aC5zZXQob3B0aW9ucyk7Ci0KLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy4kc2VhcmNoLmZpbmQo
dGhpcy5zZXNzaW9uKTsKLSAgICAgICAgdmFyIHJlcGxhY2VkID0gMDsKLSAgICAgICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgICAgIHJldHVybiByZXBsYWNlZDsKLQotICAgICAgICBpZiAodGhpcy4k
dHJ5UmVwbGFjZShyYW5nZSwgcmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgICAgICByZXBsYWNlZCA9
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJhbmdlICE9PSBudWxsKSB7Ci0gICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSk7Ci0gICAgICAgICAgICB0
aGlzLnJlbmRlcmVyLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3KHJhbmdlLnN0YXJ0LCByYW5nZS5l
bmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlcGxhY2VkOwotICAgIH07Ci0gICAg
dGhpcy5yZXBsYWNlQWxsID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQsIG9wdGlvbnMpIHsKLSAgICAg
ICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy4kc2VhcmNoLmZpbmRBbGwo
dGhpcy5zZXNzaW9uKTsKLSAgICAgICAgdmFyIHJlcGxhY2VkID0gMDsKLSAgICAgICAgaWYgKCFy
YW5nZXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VkOwotCi0gICAgICAgIHRo
aXMuJGJsb2NrU2Nyb2xsaW5nICs9IDE7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMu
Z2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwotICAg
ICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oMCwgMCk7Ci0KLSAgICAgICAgZm9yICh2
YXIgaSA9IHJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgaWYo
dGhpcy4kdHJ5UmVwbGFjZShyYW5nZXNbaV0sIHJlcGxhY2VtZW50KSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VkKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
LnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24pOwotICAgICAgICB0aGlzLiRi
bG9ja1Njcm9sbGluZyAtPSAxOwotCi0gICAgICAgIHJldHVybiByZXBsYWNlZDsKLSAgICB9Owot
Ci0gICAgdGhpcy4kdHJ5UmVwbGFjZSA9IGZ1bmN0aW9uKHJhbmdlLCByZXBsYWNlbWVudCkgewot
ICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKLSAg
ICAgICAgcmVwbGFjZW1lbnQgPSB0aGlzLiRzZWFyY2gucmVwbGFjZShpbnB1dCwgcmVwbGFjZW1l
bnQpOwotICAgICAgICBpZiAocmVwbGFjZW1lbnQgIT09IG51bGwpIHsKLSAgICAgICAgICAgIHJh
bmdlLmVuZCA9IHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCByZXBsYWNlbWVudCk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmFuZ2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5nZXRMYXN0U2VhcmNoT3B0aW9u
cyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kc2VhcmNoLmdldE9wdGlvbnMo
KTsKLSAgICB9OwotICAgIHRoaXMuZmluZCA9IGZ1bmN0aW9uKG5lZWRsZSwgb3B0aW9ucywgYW5p
bWF0ZSkgewotICAgICAgICBpZiAoIW9wdGlvbnMpCi0gICAgICAgICAgICBvcHRpb25zID0ge307
Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBuZWVkbGUgPT0gInN0cmluZyIgfHwgbmVlZGxlIGluc3Rh
bmNlb2YgUmVnRXhwKQotICAgICAgICAgICAgb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGU7Ci0gICAg
ICAgIGVsc2UgaWYgKHR5cGVvZiBuZWVkbGUgPT0gIm9iamVjdCIpCi0gICAgICAgICAgICBvb3Au
bWl4aW4ob3B0aW9ucywgbmVlZGxlKTsKLQotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVj
dGlvbi5nZXRSYW5nZSgpOwotICAgICAgICBpZiAob3B0aW9ucy5uZWVkbGUgPT0gbnVsbCkgewot
ICAgICAgICAgICAgbmVlZGxlID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSkKLSAg
ICAgICAgICAgICAgICB8fCB0aGlzLiRzZWFyY2guJG9wdGlvbnMubmVlZGxlOwotICAgICAgICAg
ICAgaWYgKCFuZWVkbGUpIHsKLSAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuc2Vzc2lvbi5n
ZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOwotICAgICAg
ICAgICAgICAgIG5lZWRsZSA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy4kc2VhcmNoLnNldCh7bmVlZGxlOiBuZWVkbGV9
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7Ci0gICAg
ICAgIGlmICghb3B0aW9ucy5zdGFydCkKLSAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQoe3N0
YXJ0OiByYW5nZX0pOwotCi0gICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuJHNlYXJjaC5maW5k
KHRoaXMuc2Vzc2lvbik7Ci0gICAgICAgIGlmIChvcHRpb25zLnByZXZlbnRTY3JvbGwpCi0gICAg
ICAgICAgICByZXR1cm4gbmV3UmFuZ2U7Ci0gICAgICAgIGlmIChuZXdSYW5nZSkgewotICAgICAg
ICAgICAgdGhpcy5yZXZlYWxSYW5nZShuZXdSYW5nZSwgYW5pbWF0ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbmV3UmFuZ2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9wdGlvbnMuYmFja3dhcmRz
KQotICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSByYW5nZS5lbmQ7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0OwotICAgICAgICB0aGlzLnNlbGVjdGlv
bi5zZXRSYW5nZShyYW5nZSk7Ci0gICAgfTsKLSAgICB0aGlzLmZpbmROZXh0ID0gZnVuY3Rpb24o
b3B0aW9ucywgYW5pbWF0ZSkgewotICAgICAgICB0aGlzLmZpbmQoe3NraXBDdXJyZW50OiB0cnVl
LCBiYWNrd2FyZHM6IGZhbHNlfSwgb3B0aW9ucywgYW5pbWF0ZSk7Ci0gICAgfTsKLSAgICB0aGlz
LmZpbmRQcmV2aW91cyA9IGZ1bmN0aW9uKG9wdGlvbnMsIGFuaW1hdGUpIHsKLSAgICAgICAgdGhp
cy5maW5kKG9wdGlvbnMsIHtza2lwQ3VycmVudDogdHJ1ZSwgYmFja3dhcmRzOiB0cnVlfSwgYW5p
bWF0ZSk7Ci0gICAgfTsKLQotICAgIHRoaXMucmV2ZWFsUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwg
YW5pbWF0ZSkgewotICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyArPSAxOwotICAgICAgICB0
aGlzLnNlc3Npb24udW5mb2xkKHJhbmdlKTsKLSAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2Vs
ZWN0aW9uUmFuZ2UocmFuZ2UpOwotICAgICAgICB0aGlzLiRibG9ja1Njcm9sbGluZyAtPSAxOwot
Ci0gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvcDsKLSAgICAg
ICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFu
Z2UuZW5kLCAwLjUpOwotICAgICAgICBpZiAoYW5pbWF0ZSAhPSBmYWxzZSkKLSAgICAgICAgICAg
IHRoaXMucmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGluZyhzY3JvbGxUb3ApOwotICAgIH07Ci0gICAg
dGhpcy51bmRvID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nKys7
Ci0gICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLnVuZG8oKTsKLSAgICAgICAg
dGhpcy4kYmxvY2tTY3JvbGxpbmctLTsKLSAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJz
b3JJbnRvVmlldyhudWxsLCAwLjUpOwotICAgIH07Ci0gICAgdGhpcy5yZWRvID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRoaXMuJGJsb2NrU2Nyb2xsaW5nKys7Ci0gICAgICAgIHRoaXMuc2Vzc2lv
bi5nZXRVbmRvTWFuYWdlcigpLnJlZG8oKTsKLSAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmct
LTsKLSAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAwLjUp
OwotICAgIH07Ci0gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMu
cmVuZGVyZXIuZGVzdHJveSgpOwotICAgICAgICB0aGlzLl9lbWl0KCJkZXN0cm95IiwgdGhpcyk7
Ci0gICAgfTsKLSAgICB0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldyA9IGZ1bmN0aW9u
KGVuYWJsZSkgewotICAgICAgICBpZiAoZW5hYmxlID09PSB0cnVlKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB2YXIgcmVjdDsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAg
ICB2YXIgc2hvdWxkU2Nyb2xsID0gZmFsc2U7Ci0gICAgICAgIGlmICghdGhpcy4kc2Nyb2xsQW5j
aG9yKQotICAgICAgICAgICAgdGhpcy4kc2Nyb2xsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgICAgIHZhciBzY3JvbGxBbmNob3IgPSB0aGlzLiRzY3JvbGxBbmNo
b3I7Ci0gICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmFic29s
dXRlIjsKLSAgICAgICAgdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHNjcm9sbEFuY2hvciwg
dGhpcy5jb250YWluZXIuZmlyc3RDaGlsZCk7Ci0gICAgICAgIHZhciBvbkNoYW5nZVNlbGVjdGlv
biA9IHRoaXMub24oImNoYW5nZVNlbGVjdGlvbiIsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
c2hvdWxkU2Nyb2xsID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHZhciBvbkJlZm9yZVJl
bmRlciA9IHRoaXMucmVuZGVyZXIub24oImJlZm9yZVJlbmRlciIsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkKLSAgICAgICAgICAgICAgICByZWN0ID0gc2VsZi5y
ZW5kZXJlci5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAgIH0pOwot
ICAgICAgICB2YXIgb25BZnRlclJlbmRlciA9IHRoaXMucmVuZGVyZXIub24oImFmdGVyUmVuZGVy
IiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsICYmIHJlY3QgJiYg
c2VsZi5pc0ZvY3VzZWQoKSkgewotICAgICAgICAgICAgICAgIHZhciByZW5kZXJlciA9IHNlbGYu
cmVuZGVyZXI7Ci0gICAgICAgICAgICAgICAgdmFyIHBvcyA9IHJlbmRlcmVyLiRjdXJzb3JMYXll
ci4kcGl4ZWxQb3M7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHJlbmRlcmVyLmxheWVy
Q29uZmlnOwotICAgICAgICAgICAgICAgIHZhciB0b3AgPSBwb3MudG9wIC0gY29uZmlnLm9mZnNl
dDsKLSAgICAgICAgICAgICAgICBpZiAocG9zLnRvcCA+PSAwICYmIHRvcCArIHJlY3QudG9wIDwg
MCkgewotICAgICAgICAgICAgICAgICAgICBzaG91bGRTY3JvbGwgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocG9zLnRvcCA8IGNvbmZpZy5oZWlnaHQgJiYKLSAgICAgICAgICAg
ICAgICAgICAgcG9zLnRvcCArIHJlY3QudG9wICsgY29uZmlnLmxpbmVIZWlnaHQgPiB3aW5kb3cu
aW5uZXJIZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Ny
b2xsID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHNob3Vs
ZFNjcm9sbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHls
ZS50b3AgPSB0b3AgKyAicHgiOwotICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmNob3Iuc3R5
bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5j
aG9yLnN0eWxlLmhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0ICsgInB4IjsKLSAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsQW5jaG9yLnNjcm9sbEludG9WaWV3KHNob3VsZFNjcm9sbCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9IHJlY3QgPSBudWxs
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgdGhpcy5zZXRBdXRvU2Nyb2xs
RWRpdG9ySW50b1ZpZXcgPSBmdW5jdGlvbihlbmFibGUpIHsKLSAgICAgICAgICAgIGlmIChlbmFi
bGUgPT09IGZhbHNlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldzsKLSAgICAgICAgICAgIHRoaXMucmVt
b3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIiwgb25DaGFuZ2VTZWxlY3Rpb24pOwot
ICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVFdmVudExpc3RlbmVyKCJhZnRlclJlbmRl
ciIsIG9uQWZ0ZXJSZW5kZXIpOwotICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVFdmVu
dExpc3RlbmVyKCJiZWZvcmVSZW5kZXIiLCBvbkJlZm9yZVJlbmRlcik7Ci0gICAgICAgIH07Ci0g
ICAgfTsKLQotfSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTsKLQotCi0KLWNvbmZpZy5kZWZpbmVP
cHRpb25zKEVkaXRvci5wcm90b3R5cGUsICJlZGl0b3IiLCB7Ci0gICAgc2VsZWN0aW9uU3R5bGU6
IHsKLSAgICAgICAgc2V0OiBmdW5jdGlvbihzdHlsZSkgewotICAgICAgICAgICAgdGhpcy5vblNl
bGVjdGlvbkNoYW5nZSgpOwotICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9u
U3R5bGUiLCB7ZGF0YTogc3R5bGV9KTsKLSAgICAgICAgfSwKLSAgICAgICAgaW5pdGlhbFZhbHVl
OiAibGluZSIsCi0gICAgfSwKLSAgICBoaWdobGlnaHRBY3RpdmVMaW5lOiB7Ci0gICAgICAgIHNl
dDogZnVuY3Rpb24oKSB7dGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpO30sCi0gICAg
ICAgIGluaXRpYWxWYWx1ZTogdHJ1ZQotICAgIH0sCi0gICAgaGlnaGxpZ2h0U2VsZWN0ZWRXb3Jk
OiB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7dGhpcy4kb25TZWxl
Y3Rpb25DaGFuZ2UoKTt9LAotICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUKLSAgICB9LAotICAg
IHJlYWRPbmx5OiB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24ocmVhZE9ubHkpIHsKLSAgICAgICAg
ICAgIHRoaXMudGV4dElucHV0LnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKLSAgICAgICAgICAgIHRo
aXMucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKCFyZWFkT25seSk7Ci0gICAgICAg
IH0sCi0gICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2UKLSAgICB9LAotICAgIGJlaGF2aW91cnNF
bmFibGVkOiB7aW5pdGlhbFZhbHVlOiB0cnVlfSwKLSAgICB3cmFwQmVoYXZpb3Vyc0VuYWJsZWQ6
IHtpbml0aWFsVmFsdWU6IHRydWV9LAotCi0gICAgaGlnaGxpZ2h0R3V0dGVyTGluZTogInJlbmRl
cmVyIiwKLSAgICBhbmltYXRlZFNjcm9sbDogInJlbmRlcmVyIiwKLSAgICBzaG93SW52aXNpYmxl
czogInJlbmRlcmVyIiwKLSAgICBzaG93UHJpbnRNYXJnaW46ICJyZW5kZXJlciIsCi0gICAgcHJp
bnRNYXJnaW5Db2x1bW46ICJyZW5kZXJlciIsCi0gICAgZmFkZUZvbGRXaWRnZXRzOiAicmVuZGVy
ZXIiLAotICAgIHNob3dGb2xkV2lkZ2V0czogInJlbmRlcmVyIiwKLSAgICBzaG93R3V0dGVyOiAi
cmVuZGVyZXIiLAotICAgIGRpc3BsYXlJbmRlbnRHdWlkZXM6ICJyZW5kZXJlciIsCi0KLSAgICBz
Y3JvbGxTcGVlZDogIiRtb3VzZUhhbmRsZXIiLAotICAgIGRyYWdEZWxheTogIiRtb3VzZUhhbmRs
ZXIiLAotICAgIGZvY3VzVGltb3V0OiAiJG1vdXNlSGFuZGxlciIsCi0KLSAgICBmaXJzdExpbmVO
dW1iZXI6ICJzZXNzaW9uIiwKLSAgICB1c2VXb3JrZXI6ICJzZXNzaW9uIiwKLSAgICB1c2VTb2Z0
VGFiczogInNlc3Npb24iLAotICAgIHRhYlNpemU6ICJzZXNzaW9uIiwKLSAgICB3cmFwOiAic2Vz
c2lvbiIKLX0pOwotCi1leHBvcnRzLkVkaXRvciA9IEVkaXRvcjsKLX0pOwotCi1hY2UuZGVmaW5l
KCdhY2UvbGliL2xhbmcnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLWV4cG9ydHMuc3RyaW5nUmV2ZXJz
ZSA9IGZ1bmN0aW9uKHN0cmluZykgewotICAgIHJldHVybiBzdHJpbmcuc3BsaXQoIiIpLnJldmVy
c2UoKS5qb2luKCIiKTsKLX07Ci0KLWV4cG9ydHMuc3RyaW5nUmVwZWF0ID0gZnVuY3Rpb24gKHN0
cmluZywgY291bnQpIHsKLSAgICB2YXIgcmVzdWx0ID0gJyc7Ci0gICAgd2hpbGUgKGNvdW50ID4g
MCkgewotICAgICAgICBpZiAoY291bnQgJiAxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmlu
ZzsKLQotICAgICAgICBpZiAoY291bnQgPj49IDEpCi0gICAgICAgICAgICBzdHJpbmcgKz0gc3Ry
aW5nOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfTsKLQotdmFyIHRyaW1CZWdpblJlZ2V4
cCA9IC9eXHNccyovOwotdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKLQotZXhwb3J0cy5z
dHJpbmdUcmltTGVmdCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKLSAgICByZXR1cm4gc3RyaW5nLnJl
cGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Ci19OwotCi1leHBvcnRzLnN0cmluZ1RyaW1SaWdo
dCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKLSAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUVu
ZFJlZ2V4cCwgJycpOwotfTsKLQotZXhwb3J0cy5jb3B5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7
Ci0gICAgdmFyIGNvcHkgPSB7fTsKLSAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7Ci0gICAgICAg
IGNvcHlba2V5XSA9IG9ialtrZXldOwotICAgIH0KLSAgICByZXR1cm4gY29weTsKLX07Ci0KLWV4
cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewotICAgIHZhciBjb3B5ID0gW107Ci0g
ICAgZm9yICh2YXIgaT0wLCBsPWFycmF5Lmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgaWYg
KGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKLSAgICAgICAgICAgIGNv
cHlbaV0gPSB0aGlzLmNvcHlPYmplY3QoIGFycmF5W2ldICk7Ci0gICAgICAgIGVsc2UgCi0gICAg
ICAgICAgICBjb3B5W2ldID0gYXJyYXlbaV07Ci0gICAgfQotICAgIHJldHVybiBjb3B5OwotfTsK
LQotZXhwb3J0cy5kZWVwQ29weSA9IGZ1bmN0aW9uIChvYmopIHsKLSAgICBpZiAodHlwZW9mIG9i
aiAhPSAib2JqZWN0IikgewotICAgICAgICByZXR1cm4gb2JqOwotICAgIH0KLSAgICAKLSAgICB2
YXIgY29weSA9IG9iai5jb25zdHJ1Y3RvcigpOwotICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsK
LSAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PSAib2JqZWN0IikgewotICAgICAgICAgICAg
Y29weVtrZXldID0gdGhpcy5kZWVwQ29weShvYmpba2V5XSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjb3B5W2tleV0gPSBvYmpba2V5XTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gY29weTsKLX07Ci0KLWV4cG9ydHMuYXJyYXlUb01hcCA9IGZ1bmN0aW9uKGFycikgewot
ICAgIHZhciBtYXAgPSB7fTsKLSAgICBmb3IgKHZhciBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIG1hcFthcnJbaV1dID0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLQotfTsK
LQotZXhwb3J0cy5jcmVhdGVNYXAgPSBmdW5jdGlvbihwcm9wcykgewotICAgIHZhciBtYXAgPSBP
YmplY3QuY3JlYXRlKG51bGwpOwotICAgIGZvciAodmFyIGkgaW4gcHJvcHMpIHsKLSAgICAgICAg
bWFwW2ldID0gcHJvcHNbaV07Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci19OwotZXhwb3J0cy5h
cnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewotICBmb3IgKHZhciBpID0gMDsg
aSA8PSBhcnJheS5sZW5ndGg7IGkrKykgewotICAgIGlmICh2YWx1ZSA9PT0gYXJyYXlbaV0pIHsK
LSAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKLSAgICB9Ci0gIH0KLX07Ci0KLWV4cG9ydHMuZXNj
YXBlUmVnRXhwID0gZnVuY3Rpb24oc3RyKSB7Ci0gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4q
Kz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Ci19OwotCi1leHBvcnRzLmVzY2FwZUhUTUwg
PSBmdW5jdGlvbihzdHIpIHsKLSAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYvZywgIiYjMzg7Iiku
cmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwv
ZywgIiYjNjA7Iik7Ci19OwotCi1leHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0
cmluZywgcmVnRXhwKSB7Ci0gICAgdmFyIG1hdGNoZXMgPSBbXTsKLQotICAgIHN0cmluZy5yZXBs
YWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7Ci0gICAgICAgIG1hdGNoZXMucHVzaCh7Ci0gICAg
ICAgICAgICBvZmZzZXQ6IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLAotICAgICAgICAg
ICAgbGVuZ3RoOiBzdHIubGVuZ3RoCi0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgcmV0dXJu
IG1hdGNoZXM7Ci19OwotZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKLQot
ICAgIHZhciB0aW1lciA9IG51bGw7Ci0gICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRpbWVyID0gbnVsbDsKLSAgICAgICAgZmNuKCk7Ci0gICAgfTsKLQotICAgIHZhciBk
ZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKLSAgICAgICAgZGVmZXJyZWQuY2FuY2VsKCk7
Ci0gICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCAwKTsKLSAg
ICAgICAgcmV0dXJuIGRlZmVycmVkOwotICAgIH07Ci0KLSAgICBkZWZlcnJlZC5zY2hlZHVsZSA9
IGRlZmVycmVkOwotCi0gICAgZGVmZXJyZWQuY2FsbCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0
aGlzLmNhbmNlbCgpOwotICAgICAgICBmY24oKTsKLSAgICAgICAgcmV0dXJuIGRlZmVycmVkOwot
ICAgIH07Ci0KLSAgICBkZWZlcnJlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgY2xl
YXJUaW1lb3V0KHRpbWVyKTsKLSAgICAgICAgdGltZXIgPSBudWxsOwotICAgICAgICByZXR1cm4g
ZGVmZXJyZWQ7Ci0gICAgfTsKLQotICAgIHJldHVybiBkZWZlcnJlZDsKLX07Ci0KLQotZXhwb3J0
cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKLSAgICB2YXIg
dGltZXIgPSBudWxsOwotICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0
aW1lciA9IG51bGw7Ci0gICAgICAgIGZjbigpOwotICAgIH07Ci0KLSAgICB2YXIgX3NlbGYgPSBm
dW5jdGlvbih0aW1lb3V0KSB7Ci0gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7
Ci0gICAgICAgIHRpbWVyID0gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCB8fCBkZWZhdWx0
VGltZW91dCk7Ci0gICAgfTsKLQotICAgIF9zZWxmLmRlbGF5ID0gX3NlbGY7Ci0gICAgX3NlbGYu
c2NoZWR1bGUgPSBmdW5jdGlvbih0aW1lb3V0KSB7Ci0gICAgICAgIGlmICh0aW1lciA9PSBudWxs
KQotICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IDAp
OwotICAgIH07Ci0KLSAgICBfc2VsZi5jYWxsID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMu
Y2FuY2VsKCk7Ci0gICAgICAgIGZjbigpOwotICAgIH07Ci0KLSAgICBfc2VsZi5jYW5jZWwgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKLSAgICAg
ICAgdGltZXIgPSBudWxsOwotICAgIH07Ci0KLSAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgcmV0dXJuIHRpbWVyOwotICAgIH07Ci0KLSAgICByZXR1cm4gX3NlbGY7
Ci19OwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9rZXlib2FyZC90ZXh0aW5wdXQnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91c2Vy
YWdlbnQnLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUs
IGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVu
dCIpOwotdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKLXZhciBk
b20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Ci12YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9s
YW5nIik7Ci12YXIgQlJPS0VOX1NFVERBVEEgPSB1c2VyYWdlbnQuaXNDaHJvbWUgPCAxODsKLQot
dmFyIFRleHRJbnB1dCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIGhvc3QpIHsKLSAgICB2YXIgdGV4
dCA9IGRvbS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwotICAgIHRleHQuY2xhc3NOYW1lID0g
ImFjZV90ZXh0LWlucHV0IjsKLSAgICBpZiAodXNlcmFnZW50LmlzVG91Y2hQYWQpCi0gICAgICAg
IHRleHQuc2V0QXR0cmlidXRlKCJ4LXBhbG0tZGlzYWJsZS1hdXRvLWNhcCIsIHRydWUpOwotCi0g
ICAgdGV4dC53cmFwID0gIm9mZiI7Ci0gICAgdGV4dC5hdXRvY29ycmVjdCA9ICJvZmYiOwotICAg
IHRleHQuYXV0b2NhcGl0YWxpemUgPSAib2ZmIjsKLSAgICB0ZXh0LnNwZWxsY2hlY2sgPSBmYWxz
ZTsKLQotICAgIHRleHQuc3R5bGUuYm90dG9tID0gIjIwMDBlbSI7Ci0gICAgcGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUodGV4dCwgcGFyZW50Tm9kZS5maXJzdENoaWxkKTsKLQotICAgIHZhciBQTEFD
RUhPTERFUiA9ICJceDAxXHgwMSI7Ci0KLSAgICB2YXIgY3V0ID0gZmFsc2U7Ci0gICAgdmFyIGNv
cGllZCA9IGZhbHNlOwotICAgIHZhciBwYXN0ZWQgPSBmYWxzZTsKLSAgICB2YXIgaW5Db21wb3N0
aW9uID0gZmFsc2U7Ci0gICAgdmFyIHRlbXBTdHlsZSA9ICcnOwotICAgIHZhciBpc1NlbGVjdGlv
bkVtcHR5ID0gdHJ1ZTsKLSAgICB0cnkgeyB2YXIgaXNGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZl
RWxlbWVudCA9PT0gdGV4dDsgfSBjYXRjaChlKSB7fQotICAgIAotICAgIGV2ZW50LmFkZExpc3Rl
bmVyKHRleHQsICJibHVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGhvc3Qub25CbHVyKCk7Ci0g
ICAgICAgIGlzRm9jdXNlZCA9IGZhbHNlOwotICAgIH0pOwotICAgIGV2ZW50LmFkZExpc3RlbmVy
KHRleHQsICJmb2N1cyIsIGZ1bmN0aW9uKCkgewotICAgICAgICBpc0ZvY3VzZWQgPSB0cnVlOwot
ICAgICAgICBob3N0Lm9uRm9jdXMoKTsKLSAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTsKLSAgICB9
KTsKLSAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7IHRleHQuZm9jdXMoKTsgfTsKLSAgICB0
aGlzLmJsdXIgPSBmdW5jdGlvbigpIHsgdGV4dC5ibHVyKCk7IH07Ci0gICAgdGhpcy5pc0ZvY3Vz
ZWQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGlzRm9jdXNlZDsKLSAgICB9OwotICAg
IHZhciBzeW5jU2VsZWN0aW9uID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHsKLSAgICAg
ICAgaXNGb2N1c2VkICYmIHJlc2V0U2VsZWN0aW9uKGlzU2VsZWN0aW9uRW1wdHkpOwotICAgIH0p
OwotICAgIHZhciBzeW5jVmFsdWUgPSBsYW5nLmRlbGF5ZWRDYWxsKGZ1bmN0aW9uKCkgewotICAg
ICAgICAgaWYgKCFpbkNvbXBvc3Rpb24pIHsKLSAgICAgICAgICAgIHRleHQudmFsdWUgPSBQTEFD
RUhPTERFUjsKLSAgICAgICAgICAgIGlzRm9jdXNlZCAmJiByZXNldFNlbGVjdGlvbigpOwotICAg
ICAgICAgfQotICAgIH0pOwotCi0gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3Rpb24oaXNFbXB0eSkg
ewotICAgICAgICBpZiAoaW5Db21wb3N0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0VtcHR5ID8gMiA6IDE7Ci0gICAgICAgIHZhciBzZWxl
Y3Rpb25FbmQgPSAyOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGV4dC5zZXRTZWxlY3Rp
b25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgfSBjYXRjaChl
KXt9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVzZXRWYWx1ZSgpIHsKLSAgICAgICAgaWYgKGlu
Q29tcG9zdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGV4dC52YWx1ZSA9IFBM
QUNFSE9MREVSOwotICAgICAgICBpZiAodXNlcmFnZW50LmlzV2ViS2l0KQotICAgICAgICAgICAg
c3luY1ZhbHVlLnNjaGVkdWxlKCk7Ci0gICAgfQotCi0gICAgdXNlcmFnZW50LmlzV2ViS2l0IHx8
IGhvc3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlU2VsZWN0aW9uJywgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmIChob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkgIT0gaXNTZWxlY3Rpb25FbXB0eSkg
ewotICAgICAgICAgICAgaXNTZWxlY3Rpb25FbXB0eSA9ICFpc1NlbGVjdGlvbkVtcHR5OwotICAg
ICAgICAgICAgc3luY1NlbGVjdGlvbi5zY2hlZHVsZSgpOwotICAgICAgICB9Ci0gICAgfSk7Ci0K
LSAgICByZXNldFZhbHVlKCk7Ci0gICAgaWYgKGlzRm9jdXNlZCkKLSAgICAgICAgaG9zdC5vbkZv
Y3VzKCk7Ci0KLQotICAgIHZhciBpc0FsbFNlbGVjdGVkID0gZnVuY3Rpb24odGV4dCkgewotICAg
ICAgICByZXR1cm4gdGV4dC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJiB0ZXh0LnNlbGVjdGlvbkVu
ZCA9PT0gdGV4dC52YWx1ZS5sZW5ndGg7Ci0gICAgfTsKLSAgICBpZiAoIXRleHQuc2V0U2VsZWN0
aW9uUmFuZ2UgJiYgdGV4dC5jcmVhdGVUZXh0UmFuZ2UpIHsKLSAgICAgICAgdGV4dC5zZXRTZWxl
Y3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpIHsKLSAg
ICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlVGV4dFJhbmdlKCk7Ci0gICAgICAgICAg
ICByYW5nZS5jb2xsYXBzZSh0cnVlKTsKLSAgICAgICAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hh
cmFjdGVyJywgc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICAgICAgcmFuZ2UubW92ZUVuZCgnY2hh
cmFjdGVyJywgc2VsZWN0aW9uRW5kKTsKLSAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpOwotICAg
ICAgICB9OwotICAgICAgICBpc0FsbFNlbGVjdGVkID0gZnVuY3Rpb24odGV4dCkgewotICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0ZXh0Lm93bmVyRG9jdW1l
bnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICB9Y2F0Y2goZSkge30KLSAg
ICAgICAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UucGFyZW50RWxlbWVudCgpICE9IHRleHQpIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UudGV4dCA9PSB0ZXh0LnZh
bHVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSkgewotICAg
ICAgICB2YXIgaW5Qcm9wZXJ0eUNoYW5nZSA9IGZhbHNlOwotICAgICAgICB2YXIgb25Qcm9wZXJ0
eUNoYW5nZSA9IGZ1bmN0aW9uKGUpewotICAgICAgICAgICAgaWYgKGluUHJvcGVydHlDaGFuZ2Up
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdmFyIGRhdGEgPSB0ZXh0LnZh
bHVlOwotICAgICAgICAgICAgaWYgKGluQ29tcG9zdGlvbiB8fCAhZGF0YSB8fCBkYXRhID09IFBM
QUNFSE9MREVSKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChlICYm
IGRhdGEgPT0gUExBQ0VIT0xERVJbMF0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNQcm9w
ZXJ0eS5zY2hlZHVsZSgpOwotCi0gICAgICAgICAgICBzZW5kVGV4dChkYXRhKTsKLSAgICAgICAg
ICAgIGluUHJvcGVydHlDaGFuZ2UgPSB0cnVlOwotICAgICAgICAgICAgcmVzZXRWYWx1ZSgpOwot
ICAgICAgICAgICAgaW5Qcm9wZXJ0eUNoYW5nZSA9IGZhbHNlOwotICAgICAgICB9OwotICAgICAg
ICB2YXIgc3luY1Byb3BlcnR5ID0gbGFuZy5kZWxheWVkQ2FsbChvblByb3BlcnR5Q2hhbmdlKTsK
LSAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgInByb3BlcnR5Y2hhbmdlIiwgb25Qcm9w
ZXJ0eUNoYW5nZSk7Ci0KLSAgICAgICAgdmFyIGtleXRhYmxlID0geyAxMzoxLCAyNzoxIH07Ci0g
ICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJrZXl1cCIsIGZ1bmN0aW9uIChlKSB7Ci0g
ICAgICAgICAgICBpZiAoaW5Db21wb3N0aW9uICYmICghdGV4dC52YWx1ZSB8fCBrZXl0YWJsZVtl
LmtleUNvZGVdKSkKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KG9uQ29tcG9zaXRpb25FbmQs
IDApOwotICAgICAgICAgICAgaWYgKCh0ZXh0LnZhbHVlLmNoYXJDb2RlQXQoMCl8fDApIDwgMTI5
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW5Db21wb3N0aW9uID8gb25Db21wb3NpdGlvblVwZGF0ZSgpIDogb25Db21wb3NpdGlvblN0YXJ0
KCk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHZhciBvblNlbGVjdCA9IGZ1bmN0aW9uKGUp
IHsKLSAgICAgICAgaWYgKGN1dCkgewotICAgICAgICAgICAgY3V0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvcGllZCkgewotICAgICAgICAg
ICAgY29waWVkID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGlzQWxsU2VsZWN0ZWQodGV4dCkpIHsKLSAgICAgICAgICAgIGhvc3Quc2VsZWN0QWxs
KCk7Ci0gICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHZhciBzZW5kVGV4dCA9IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAgaWYgKHBhc3RlZCkg
ewotICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChkYXRhKQot
ICAgICAgICAgICAgICAgIGhvc3Qub25QYXN0ZShkYXRhKTsKLSAgICAgICAgICAgIHBhc3RlZCA9
IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gUExBQ0VIT0xERVJbMF0pIHsKLSAg
ICAgICAgICAgIGhvc3QuZXhlY0NvbW1hbmQoImRlbCIsIHtzb3VyY2U6ICJhY2UifSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS5zdWJzdHJpbmcoMCwgMikgPT0gUExB
Q0VIT0xERVIpCi0gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyKDIpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoZGF0YVswXSA9PSBQTEFDRUhPTERFUlswXSkKLSAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YS5zdWJzdHIoMSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChkYXRhW2RhdGEu
bGVuZ3RoIC0gMV0gPT0gUExBQ0VIT0xERVJbMF0pCi0gICAgICAgICAgICAgICAgZGF0YSA9IGRh
dGEuc2xpY2UoMCwgLTEpOwotICAgICAgICAgICAgaWYgKGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9
PSBQTEFDRUhPTERFUlswXSkKLSAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCAt
MSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgICAg
IGhvc3Qub25UZXh0SW5wdXQoZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHZhciBvbklu
cHV0ID0gZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAoaW5Db21wb3N0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2YXIgZGF0YSA9IHRleHQudmFsdWU7Ci0gICAgICAgIHJlc2V0
VmFsdWUoKTsKLQotICAgICAgICBzZW5kVGV4dChkYXRhKTsKLSAgICB9OwotCi0gICAgdmFyIG9u
Q3V0ID0gZnVuY3Rpb24oZSkgewotICAgICAgICB2YXIgZGF0YSA9IGhvc3QuZ2V0Q29weVRleHQo
KTsKLSAgICAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dChlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjbGlw
Ym9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlwYm9hcmREYXRhOwotCi0g
ICAgICAgIGlmIChjbGlwYm9hcmREYXRhICYmICFCUk9LRU5fU0VUREFUQSkgewotICAgICAgICAg
ICAgdmFyIHN1cHBvcnRlZCA9IGNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsIGRhdGEpOwot
ICAgICAgICAgICAgaWYgKHN1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgIGhvc3Qub25DdXQo
KTsKLSAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICBj
dXQgPSB0cnVlOwotICAgICAgICAgICAgdGV4dC52YWx1ZSA9IGRhdGE7Ci0gICAgICAgICAgICB0
ZXh0LnNlbGVjdCgpOwotICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewotICAgICAg
ICAgICAgICAgIGN1dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJlc2V0VmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAgIGhvc3Qub25D
dXQoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHZhciBvbkNv
cHkgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHZhciBkYXRhID0gaG9zdC5nZXRDb3B5VGV4dCgp
OwotICAgICAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGNsaXBi
b2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBib2FyZERhdGE7Ci0gICAg
ICAgIGlmIChjbGlwYm9hcmREYXRhICYmICFCUk9LRU5fU0VUREFUQSkgewotICAgICAgICAgICAg
dmFyIHN1cHBvcnRlZCA9IGNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsIGRhdGEpOwotICAg
ICAgICAgICAgaWYgKHN1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgIGhvc3Qub25Db3B5KCk7
Ci0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFzdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgIGNvcGll
ZCA9IHRydWU7Ci0gICAgICAgICAgICB0ZXh0LnZhbHVlID0gZGF0YTsKLSAgICAgICAgICAgIHRl
eHQuc2VsZWN0KCk7Ci0gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgY29waWVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaG9zdC5v
bkNvcHkoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHZhciBv
blBhc3RlID0gZnVuY3Rpb24oZSkgewotICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xp
cGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTsKLQotICAgICAgICBpZiAoY2xpcGJv
YXJkRGF0YSkgewotICAgICAgICAgICAgdmFyIGRhdGEgPSBjbGlwYm9hcmREYXRhLmdldERhdGEo
IlRleHQiKTsKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgICAgIGhvc3Qub25Q
YXN0ZShkYXRhKTsKLSAgICAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNJRSkKLSAgICAgICAgICAg
ICAgICBzZXRUaW1lb3V0KHJlc2V0U2VsZWN0aW9uKTsKLSAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KGUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGV4
dC52YWx1ZSA9ICIiOwotICAgICAgICAgICAgcGFzdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBldmVudC5hZGRDb21tYW5kS2V5TGlzdGVuZXIodGV4dCwgaG9zdC5vbkNvbW1h
bmRLZXkuYmluZChob3N0KSk7Ci0KLSAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAic2VsZWN0
Iiwgb25TZWxlY3QpOwotCi0gICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImlucHV0Iiwgb25J
bnB1dCk7Ci0KLSAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY3V0Iiwgb25DdXQpOwotICAg
IGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb3B5Iiwgb25Db3B5KTsKLSAgICBldmVudC5hZGRM
aXN0ZW5lcih0ZXh0LCAicGFzdGUiLCBvblBhc3RlKTsKLSAgICBpZiAoISgnb25jdXQnIGluIHRl
eHQpIHx8ICEoJ29uY29weScgaW4gdGV4dCkgfHwgISgnb25wYXN0ZScgaW4gdGV4dCkpewotICAg
ICAgICBldmVudC5hZGRMaXN0ZW5lcihwYXJlbnROb2RlLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUp
IHsKLSAgICAgICAgICAgIGlmICgodXNlcmFnZW50LmlzTWFjICYmICFlLm1ldGFLZXkpIHx8ICFl
LmN0cmxLZXkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZS5r
ZXlDb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSA2NzoKLSAgICAgICAgICAgICAgICAgICAg
b25Db3B5KGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIDg2OgotICAgICAgICAgICAgICAgICAgICBvblBhc3RlKGUpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDg4OgotICAgICAgICAgICAgICAgICAg
ICBvbkN1dChlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotICAgIH0KLSAgICB2YXIgb25Db21wb3NpdGlvblN0YXJ0ID0gZnVuY3Rpb24o
ZSkgewotICAgICAgICBpbkNvbXBvc3Rpb24gPSB0cnVlOwotICAgICAgICBob3N0Lm9uQ29tcG9z
aXRpb25TdGFydCgpOwotICAgICAgICBzZXRUaW1lb3V0KG9uQ29tcG9zaXRpb25VcGRhdGUsIDAp
OwotICAgIH07Ci0KLSAgICB2YXIgb25Db21wb3NpdGlvblVwZGF0ZSA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICBpZiAoIWluQ29tcG9zdGlvbikgcmV0dXJuOwotICAgICAgICBob3N0Lm9uQ29tcG9z
aXRpb25VcGRhdGUodGV4dC52YWx1ZSk7Ci0gICAgfTsKLQotICAgIHZhciBvbkNvbXBvc2l0aW9u
RW5kID0gZnVuY3Rpb24oZSkgewotICAgICAgICBpbkNvbXBvc3Rpb24gPSBmYWxzZTsKLSAgICAg
ICAgaG9zdC5vbkNvbXBvc2l0aW9uRW5kKCk7Ci0gICAgfTsKLQotICAgIHZhciBzeW5jQ29tcG9z
aXRpb24gPSBsYW5nLmRlbGF5ZWRDYWxsKG9uQ29tcG9zaXRpb25VcGRhdGUsIDUwKTsKLQotICAg
IGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb21wb3NpdGlvbnN0YXJ0Iiwgb25Db21wb3NpdGlv
blN0YXJ0KTsKLSAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCB1c2VyYWdlbnQuaXNHZWNrbyA/
ICJ0ZXh0IiA6ICJrZXl1cCIsIGZ1bmN0aW9uKCl7c3luY0NvbXBvc2l0aW9uLnNjaGVkdWxlKCl9
KTsKLSAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY29tcG9zaXRpb25lbmQiLCBvbkNvbXBv
c2l0aW9uRW5kKTsKLQotICAgIHRoaXMuZ2V0RWxlbWVudCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGV4dDsKLSAgICB9OwotCi0gICAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9u
KHJlYWRPbmx5KSB7Ci0gICAgICAgdGV4dC5yZWFkT25seSA9IHJlYWRPbmx5OwotICAgIH07Ci0K
LSAgICB0aGlzLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmICghdGVt
cFN0eWxlKQotICAgICAgICAgICAgdGVtcFN0eWxlID0gdGV4dC5zdHlsZS5jc3NUZXh0OwotCi0g
ICAgICAgIHRleHQuc3R5bGUuY3NzVGV4dCA9ICJ6LWluZGV4OjEwMDAwMDsiICsgKHVzZXJhZ2Vu
dC5pc0lFID8gIm9wYWNpdHk6MC4xOyIgOiAiIik7Ci0KLSAgICAgICAgcmVzZXRTZWxlY3Rpb24o
aG9zdC5zZWxlY3Rpb24uaXNFbXB0eSgpKTsKLSAgICAgICAgaG9zdC5fZW1pdCgibmF0aXZlY29u
dGV4dG1lbnUiLCB7dGFyZ2V0OiBob3N0fSk7Ci0gICAgICAgIHZhciByZWN0ID0gaG9zdC5jb250
YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAgIHZhciBzdHlsZSA9IGRvbS5j
b21wdXRlZFN0eWxlKGhvc3QuY29udGFpbmVyKTsKLSAgICAgICAgdmFyIHRvcCA9IHJlY3QudG9w
ICsgKHBhcnNlSW50KHN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwKTsKLSAgICAgICAgdmFyIGxl
ZnQgPSByZWN0LmxlZnQgKyAocGFyc2VJbnQocmVjdC5ib3JkZXJMZWZ0V2lkdGgpIHx8IDApOwot
ICAgICAgICB2YXIgbW92ZSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHRleHQuc3R5bGUu
bGVmdCA9IGUuY2xpZW50WCAtIGxlZnQgLSAyICsgInB4IjsKLSAgICAgICAgICAgIHRleHQuc3R5
bGUudG9wID0gZS5jbGllbnRZIC0gdG9wIC0gMiArICJweCI7Ci0gICAgICAgIH07Ci0gICAgICAg
IG1vdmUoZSk7Ci0KLSAgICAgICAgaWYgKGUudHlwZSAhPSAibW91c2Vkb3duIikKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoaG9zdC5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRD
dXJzb3IpCi0gICAgICAgICAgICBob3N0LnJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9
IG51bGw7Ci0gICAgICAgIGlmICh1c2VyYWdlbnQuaXNXaW4pCi0gICAgICAgICAgICBldmVudC5j
YXB0dXJlKGhvc3QuY29udGFpbmVyLCBtb3ZlLCBvbkNvbnRleHRNZW51Q2xvc2UpOwotICAgIH07
Ci0KLSAgICB0aGlzLm9uQ29udGV4dE1lbnVDbG9zZSA9IG9uQ29udGV4dE1lbnVDbG9zZTsKLSAg
ICBmdW5jdGlvbiBvbkNvbnRleHRNZW51Q2xvc2UoKSB7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgaWYgKHRlbXBTdHlsZSkgewotICAgICAgICAgICAgICAg
IHRleHQuc3R5bGUuY3NzVGV4dCA9IHRlbXBTdHlsZTsKLSAgICAgICAgICAgICAgICB0ZW1wU3R5
bGUgPSAnJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChob3N0LnJlbmRlcmVyLiRr
ZWVwVGV4dEFyZWFBdEN1cnNvciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaG9zdC5yZW5k
ZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgIGhvc3Qu
cmVuZGVyZXIuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0sIDApOwotICAgIH0KLSAgICBpZiAoIXVzZXJhZ2VudC5pc0dlY2tvKSB7Ci0gICAgICAgIGV2
ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb250ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgIGhvc3QudGV4dElucHV0Lm9uQ29udGV4dE1lbnUoZSk7Ci0gICAgICAgICAgICBvbkNv
bnRleHRNZW51Q2xvc2UoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfTsKLQotZXhwb3J0cy5UZXh0
SW5wdXQgPSBUZXh0SW5wdXQ7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vdXNlL21vdXNlX2hh
bmRsZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQn
LCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMnLCAnYWNl
L21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXInLCAnYWNlL21vdXNlL21vdXNlX2V2ZW50Jywg
J2FjZS9tb3VzZS9kcmFnZHJvcCcsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIp
OwotdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKLXZhciBEZWZh
dWx0SGFuZGxlcnMgPSByZXF1aXJlKCIuL2RlZmF1bHRfaGFuZGxlcnMiKS5EZWZhdWx0SGFuZGxl
cnM7Ci12YXIgRGVmYXVsdEd1dHRlckhhbmRsZXIgPSByZXF1aXJlKCIuL2RlZmF1bHRfZ3V0dGVy
X2hhbmRsZXIiKS5HdXR0ZXJIYW5kbGVyOwotdmFyIE1vdXNlRXZlbnQgPSByZXF1aXJlKCIuL21v
dXNlX2V2ZW50IikuTW91c2VFdmVudDsKLXZhciBEcmFnZHJvcEhhbmRsZXIgPSByZXF1aXJlKCIu
L2RyYWdkcm9wIikuRHJhZ2Ryb3BIYW5kbGVyOwotdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2Nv
bmZpZyIpOwotCi12YXIgTW91c2VIYW5kbGVyID0gZnVuY3Rpb24oZWRpdG9yKSB7Ci0gICAgdGhp
cy5lZGl0b3IgPSBlZGl0b3I7Ci0KLSAgICBuZXcgRGVmYXVsdEhhbmRsZXJzKHRoaXMpOwotICAg
IG5ldyBEZWZhdWx0R3V0dGVySGFuZGxlcih0aGlzKTsKLSAgICBuZXcgRHJhZ2Ryb3BIYW5kbGVy
KHRoaXMpOwotCi0gICAgZXZlbnQuYWRkTGlzdGVuZXIoZWRpdG9yLmNvbnRhaW5lciwgIm1vdXNl
ZG93biIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgZWRpdG9yLmZvY3VzKCk7Ci0gICAgICAgIHJl
dHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKLSAgICB9KTsKLQotICAgIHZhciBtb3VzZVRh
cmdldCA9IGVkaXRvci5yZW5kZXJlci5nZXRNb3VzZUV2ZW50VGFyZ2V0KCk7Ci0gICAgZXZlbnQu
YWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJjbGljayIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQo
dGhpcywgImNsaWNrIikpOwotICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAibW91
c2Vtb3ZlIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMsICJtb3VzZW1vdmUiKSk7Ci0gICAg
ZXZlbnQuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lcihtb3VzZVRhcmdldCwgWzMwMCwgMzAwLCAy
NTBdLCB0aGlzLCAib25Nb3VzZUV2ZW50Iik7Ci0gICAgZXZlbnQuYWRkTW91c2VXaGVlbExpc3Rl
bmVyKGVkaXRvci5jb250YWluZXIsIHRoaXMub25Nb3VzZVdoZWVsLmJpbmQodGhpcywgIm1vdXNl
d2hlZWwiKSk7Ci0KLSAgICB2YXIgZ3V0dGVyRWwgPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlcjsK
LSAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgIm1vdXNlZG93biIsIHRoaXMub25Nb3Vz
ZUV2ZW50LmJpbmQodGhpcywgImd1dHRlcm1vdXNlZG93biIpKTsKLSAgICBldmVudC5hZGRMaXN0
ZW5lcihndXR0ZXJFbCwgImNsaWNrIiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCAiZ3V0
dGVyY2xpY2siKSk7Ci0gICAgZXZlbnQuYWRkTGlzdGVuZXIoZ3V0dGVyRWwsICJkYmxjbGljayIs
IHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImd1dHRlcmRibGNsaWNrIikpOwotICAgIGV2
ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAibW91c2Vtb3ZlIiwgdGhpcy5vbk1vdXNlRXZlbnQu
YmluZCh0aGlzLCAiZ3V0dGVybW91c2Vtb3ZlIikpOwotfTsKLQotKGZ1bmN0aW9uKCkgewotICAg
IHRoaXMub25Nb3VzZUV2ZW50ID0gZnVuY3Rpb24obmFtZSwgZSkgewotICAgICAgICB0aGlzLmVk
aXRvci5fZW1pdChuYW1lLCBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcikpOwotICAgIH07
Ci0KLSAgICB0aGlzLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24obmFtZSwgZSkgewotICAgICAgICB2
YXIgbGlzdGVuZXJzID0gdGhpcy5lZGl0b3IuX2V2ZW50UmVnaXN0cnkgJiYgdGhpcy5lZGl0b3Iu
X2V2ZW50UmVnaXN0cnkubW91c2Vtb3ZlOwotICAgICAgICBpZiAoIWxpc3RlbmVycyB8fCAhbGlz
dGVuZXJzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmVkaXRv
ci5fZW1pdChuYW1lLCBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcikpOwotICAgIH07Ci0K
LSAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0aW9uKG5hbWUsIGUpIHsKLSAgICAgICAgdmFy
IG1vdXNlRXZlbnQgPSBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcik7Ci0gICAgICAgIG1v
dXNlRXZlbnQuc3BlZWQgPSB0aGlzLiRzY3JvbGxTcGVlZCAqIDI7Ci0gICAgICAgIG1vdXNlRXZl
bnQud2hlZWxYID0gZS53aGVlbFg7Ci0gICAgICAgIG1vdXNlRXZlbnQud2hlZWxZID0gZS53aGVl
bFk7Ci0KLSAgICAgICAgdGhpcy5lZGl0b3IuX2VtaXQobmFtZSwgbW91c2VFdmVudCk7Ci0gICAg
fTsKLQotICAgIHRoaXMuc2V0U3RhdGUgPSBmdW5jdGlvbihzdGF0ZSkgewotICAgICAgICB0aGlz
LnN0YXRlID0gc3RhdGU7Ci0gICAgfTsKLQotICAgIHRoaXMuY2FwdHVyZU1vdXNlID0gZnVuY3Rp
b24oZXYsIHN0YXRlKSB7Ci0gICAgICAgIGlmIChzdGF0ZSkKLSAgICAgICAgICAgIHRoaXMuc2V0
U3RhdGUoc3RhdGUpOwotCi0gICAgICAgIHRoaXMueCA9IGV2Lng7Ci0gICAgICAgIHRoaXMueSA9
IGV2Lnk7Ci0gICAgICAgIAotICAgICAgICB0aGlzLmlzTW91c2VQcmVzc2VkID0gdHJ1ZTsKLSAg
ICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5lZGl0b3IucmVuZGVyZXI7Ci0gICAgICAgIGlmIChy
ZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IpCi0gICAgICAgICAgICByZW5kZXJlci4ka2Vl
cFRleHRBcmVhQXRDdXJzb3IgPSBudWxsOwotCi0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAg
ICAgICAgdmFyIG9uTW91c2VNb3ZlID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgc2VsZi54
ID0gZS5jbGllbnRYOwotICAgICAgICAgICAgc2VsZi55ID0gZS5jbGllbnRZOwotICAgICAgICB9
OwotCi0gICAgICAgIHZhciBvbkNhcHR1cmVFbmQgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICBjbGVhckludGVydmFsKHRpbWVySWQpOwotICAgICAgICAgICAgb25DYXB0dXJlSW50ZXJ2YWwo
KTsKLSAgICAgICAgICAgIHNlbGZbc2VsZi5zdGF0ZSArICJFbmQiXSAmJiBzZWxmW3NlbGYuc3Rh
dGUgKyAiRW5kIl0oZSk7Ci0gICAgICAgICAgICBzZWxmLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7
Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwp
IHsKLSAgICAgICAgICAgICAgICByZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVl
OwotICAgICAgICAgICAgICAgIHJlbmRlcmVyLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc2VsZi5pc01vdXNlUHJlc3NlZCA9IGZhbHNlOwotICAg
ICAgICB9OwotCi0gICAgICAgIHZhciBvbkNhcHR1cmVJbnRlcnZhbCA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgc2VsZltzZWxmLnN0YXRlXSAmJiBzZWxmW3NlbGYuc3RhdGVdKCk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIAotICAgICAgICBpZiAodXNlcmFnZW50LmlzT2xkSUUgJiYgZXYuZG9t
RXZlbnQudHlwZSA9PSAiZGJsY2xpY2siKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2V0VGltZW91
dChmdW5jdGlvbigpIHtvbkNhcHR1cmVFbmQoZXYuZG9tRXZlbnQpO30pOwotICAgICAgICB9Ci0K
LSAgICAgICAgZXZlbnQuY2FwdHVyZSh0aGlzLmVkaXRvci5jb250YWluZXIsIG9uTW91c2VNb3Zl
LCBvbkNhcHR1cmVFbmQpOwotICAgICAgICB2YXIgdGltZXJJZCA9IHNldEludGVydmFsKG9uQ2Fw
dHVyZUludGVydmFsLCAyMCk7Ci0gICAgfTsKLX0pLmNhbGwoTW91c2VIYW5kbGVyLnByb3RvdHlw
ZSk7Ci0KLWNvbmZpZy5kZWZpbmVPcHRpb25zKE1vdXNlSGFuZGxlci5wcm90b3R5cGUsICJtb3Vz
ZUhhbmRsZXIiLCB7Ci0gICAgc2Nyb2xsU3BlZWQ6IHtpbml0aWFsVmFsdWU6IDF9LAotICAgIGRy
YWdEZWxheToge2luaXRpYWxWYWx1ZTogMTUwfSwKLSAgICBmb2N1c1RpbW91dDoge2luaXRpYWxW
YWx1ZTogMH0KLX0pOwotCi0KLWV4cG9ydHMuTW91c2VIYW5kbGVyID0gTW91c2VIYW5kbGVyOwot
fSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb3VzZS9kZWZhdWx0X2hhbmRsZXJzJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbScsICdhY2UvbGliL3VzZXJhZ2Vu
dCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgZG9tID0g
cmVxdWlyZSgiLi4vbGliL2RvbSIpOwotdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91
c2VyYWdlbnQiKTsKLQotdmFyIERSQUdfT0ZGU0VUID0gMDsgLy8gcGl4ZWxzCi0KLWZ1bmN0aW9u
IERlZmF1bHRIYW5kbGVycyhtb3VzZUhhbmRsZXIpIHsKLSAgICBtb3VzZUhhbmRsZXIuJGNsaWNr
U2VsZWN0aW9uID0gbnVsbDsKLQotICAgIHZhciBlZGl0b3IgPSBtb3VzZUhhbmRsZXIuZWRpdG9y
OwotICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigibW91c2Vkb3duIiwgdGhpcy5vbk1vdXNl
RG93bi5iaW5kKG1vdXNlSGFuZGxlcikpOwotICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigi
ZGJsY2xpY2siLCB0aGlzLm9uRG91YmxlQ2xpY2suYmluZChtb3VzZUhhbmRsZXIpKTsKLSAgICBl
ZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoInRyaXBsZWNsaWNrIiwgdGhpcy5vblRyaXBsZUNsaWNr
LmJpbmQobW91c2VIYW5kbGVyKSk7Ci0gICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJxdWFk
Y2xpY2siLCB0aGlzLm9uUXVhZENsaWNrLmJpbmQobW91c2VIYW5kbGVyKSk7Ci0gICAgZWRpdG9y
LnNldERlZmF1bHRIYW5kbGVyKCJtb3VzZXdoZWVsIiwgdGhpcy5vbk1vdXNlV2hlZWwuYmluZCht
b3VzZUhhbmRsZXIpKTsKLQotICAgIHZhciBleHBvcnRzID0gWyJzZWxlY3QiLCAic3RhcnRTZWxl
Y3QiLCAiZHJhZyIsICJkcmFnRW5kIiwgImRyYWdXYWl0IiwKLSAgICAgICAgImRyYWdXYWl0RW5k
IiwgInN0YXJ0RHJhZyIsICJmb2N1c1dhaXQiXTsKLQotICAgIGV4cG9ydHMuZm9yRWFjaChmdW5j
dGlvbih4KSB7Ci0gICAgICAgIG1vdXNlSGFuZGxlclt4XSA9IHRoaXNbeF07Ci0gICAgfSwgdGhp
cyk7Ci0KLSAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlMaW5lcyA9IHRoaXMuZXh0ZW5kU2VsZWN0
aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsICJnZXRMaW5lUmFuZ2UiKTsKLSAgICBtb3VzZUhhbmRs
ZXIuc2VsZWN0QnlXb3JkcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRs
ZXIsICJnZXRXb3JkUmFuZ2UiKTsKLX0KLQotKGZ1bmN0aW9uKCkgewotCi0gICAgdGhpcy5vbk1v
dXNlRG93biA9IGZ1bmN0aW9uKGV2KSB7Ci0gICAgICAgIHZhciBpblNlbGVjdGlvbiA9IGV2Lmlu
U2VsZWN0aW9uKCk7Ci0gICAgICAgIHZhciBwb3MgPSBldi5nZXREb2N1bWVudFBvc2l0aW9uKCk7
Ci0gICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQgPSBldjsKLSAgICAgICAgdmFyIGVkaXRvciA9
IHRoaXMuZWRpdG9yOwotCi0gICAgICAgIHZhciBidXR0b24gPSBldi5nZXRCdXR0b24oKTsKLSAg
ICAgICAgaWYgKGJ1dHRvbiAhPT0gMCkgewotICAgICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdl
ID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAgICAgICB2YXIgc2VsZWN0aW9u
RW1wdHkgPSBzZWxlY3Rpb25SYW5nZS5pc0VtcHR5KCk7Ci0KLSAgICAgICAgICAgIGlmIChzZWxl
Y3Rpb25FbXB0eSkgewotICAgICAgICAgICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlv
bihwb3MpOwotICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24o
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0
TWVudShldi5kb21FdmVudCk7Ci0gICAgICAgICAgICByZXR1cm47IC8vIHN0b3BwaW5nIGV2ZW50
IGhlcmUgYnJlYWtzIGNvbnRleHRtZW51IG9uIGZmIG1hYwotICAgICAgICB9Ci0gICAgICAgIGlm
IChpblNlbGVjdGlvbiAmJiAhZWRpdG9yLmlzRm9jdXNlZCgpKSB7Ci0gICAgICAgICAgICBlZGl0
b3IuZm9jdXMoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLiRmb2N1c1RpbW91dCAmJiAhdGhpcy4k
Y2xpY2tTZWxlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCJmb2N1c1dh
aXQiKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNhcHR1cmVNb3VzZShldik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWluU2VsZWN0aW9uIHx8IHRoaXMuJGNsaWNrU2VsZWN0aW9uIHx8
IGV2LmdldFNoaWZ0S2V5KCkpIHsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3QocG9zKTsK
LSAgICAgICAgfSBlbHNlIGlmIChpblNlbGVjdGlvbikgewotICAgICAgICAgICAgdGhpcy5tb3Vz
ZWRvd25FdmVudC50aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKLSAgICAgICAgICAgIHRo
aXMuc2V0U3RhdGUoImRyYWdXYWl0Iik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmNhcHR1
cmVNb3VzZShldik7Ci0gICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH07
Ci0KLSAgICB0aGlzLnN0YXJ0U2VsZWN0ID0gZnVuY3Rpb24ocG9zKSB7Ci0gICAgICAgIHBvcyA9
IHBvcyB8fCB0aGlzLmVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0aGlz
LngsIHRoaXMueSk7Ci0gICAgICAgIGlmICh0aGlzLm1vdXNlZG93bkV2ZW50LmdldFNoaWZ0S2V5
KCkpIHsKLSAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9u
KHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIXRoaXMuJGNsaWNrU2VsZWN0aW9u
KSB7Ci0gICAgICAgICAgICB0aGlzLmVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOwot
ICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0Iik7Ci0gICAgfTsKLQotICAgIHRo
aXMuc2VsZWN0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBhbmNob3IsIGVkaXRvciA9IHRo
aXMuZWRpdG9yOwotICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRv
VGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTsKLQotICAgICAgICBpZiAodGhpcy4kY2xp
Y2tTZWxlY3Rpb24pIHsKLSAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLiRjbGlja1NlbGVjdGlv
bi5jb21wYXJlUG9pbnQoY3Vyc29yKTsKLQotICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewot
ICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY21wID09IDEpIHsKLSAgICAgICAgICAgICAgICBhbmNob3IgPSB0
aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG9yaWVudGVkUmFuZ2UgPSBjYWxjUmFuZ2VPcmllbnRhdGlvbih0aGlzLiRj
bGlja1NlbGVjdGlvbiwgY3Vyc29yKTsKLSAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcmllbnRl
ZFJhbmdlLmN1cnNvcjsKLSAgICAgICAgICAgICAgICBhbmNob3IgPSBvcmllbnRlZFJhbmdlLmFu
Y2hvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2Vs
ZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pOwotICAgICAgICB9Ci0gICAg
ICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihjdXJzb3IpOwotCi0gICAgICAg
IGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpOwotICAgIH07Ci0KLSAgICB0
aGlzLmV4dGVuZFNlbGVjdGlvbkJ5ID0gZnVuY3Rpb24odW5pdE5hbWUpIHsKLSAgICAgICAgdmFy
IGFuY2hvciwgZWRpdG9yID0gdGhpcy5lZGl0b3I7Ci0gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0
b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXModGhpcy54LCB0aGlzLnkpOwotICAg
ICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uW3VuaXROYW1lXShjdXJzb3Iucm93LCBj
dXJzb3IuY29sdW1uKTsKLQotICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24pIHsKLSAg
ICAgICAgICAgIHZhciBjbXBTdGFydCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2lu
dChyYW5nZS5zdGFydCk7Ci0gICAgICAgICAgICB2YXIgY21wRW5kID0gdGhpcy4kY2xpY2tTZWxl
Y3Rpb24uY29tcGFyZVBvaW50KHJhbmdlLmVuZCk7Ci0KLSAgICAgICAgICAgIGlmIChjbXBTdGFy
dCA9PSAtMSAmJiBjbXBFbmQgPD0gMCkgewotICAgICAgICAgICAgICAgIGFuY2hvciA9IHRoaXMu
JGNsaWNrU2VsZWN0aW9uLmVuZDsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAh
PSBjdXJzb3Iucm93IHx8IHJhbmdlLmVuZC5jb2x1bW4gIT0gY3Vyc29yLmNvbHVtbikKLSAgICAg
ICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKGNtcEVuZCA9PSAxICYmIGNtcFN0YXJ0ID49IDApIHsKLSAgICAgICAgICAgICAgICBhbmNo
b3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDsKLSAgICAgICAgICAgICAgICBpZiAocmFu
Z2Uuc3RhcnQucm93ICE9IGN1cnNvci5yb3cgfHwgcmFuZ2Uuc3RhcnQuY29sdW1uICE9IGN1cnNv
ci5jb2x1bW4pCi0gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IHJhbmdlLmVuZDsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPT0gLTEgJiYgY21wRW5kID09IDEpIHsKLSAgICAg
ICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7Ci0gICAgICAgICAgICAgICAgYW5jaG9yID0g
cmFuZ2Uuc3RhcnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBv
cmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rpb24s
IGN1cnNvcik7Ci0gICAgICAgICAgICAgICAgY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5jdXJzb3I7
Ci0gICAgICAgICAgICAgICAgYW5jaG9yID0gb3JpZW50ZWRSYW5nZS5hbmNob3I7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihh
bmNob3Iucm93LCBhbmNob3IuY29sdW1uKTsKLSAgICAgICAgfQotICAgICAgICBlZGl0b3Iuc2Vs
ZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTsKLQotICAgICAgICBlZGl0b3IucmVuZGVy
ZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKLSAgICB9OwotCi0gICAgdGhpcy5zdGFydERyYWcg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwotICAgICAg
ICB0aGlzLnNldFN0YXRlKCJkcmFnIik7Ci0gICAgICAgIHRoaXMuZHJhZ1JhbmdlID0gZWRpdG9y
LmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAgIHZhciBzdHlsZSA9IGVkaXRvci5nZXRTZWxl
Y3Rpb25TdHlsZSgpOwotICAgICAgICB0aGlzLmRyYWdTZWxlY3Rpb25NYXJrZXIgPSBlZGl0b3Iu
c2Vzc2lvbi5hZGRNYXJrZXIodGhpcy5kcmFnUmFuZ2UsICJhY2Vfc2VsZWN0aW9uIiwgc3R5bGUp
OwotICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICAgICAgZG9tLmFkZENzc0Ns
YXNzKGVkaXRvci5jb250YWluZXIsICJhY2VfZHJhZ2dpbmciKTsKLSAgICAgICAgaWYgKCF0aGlz
LiRkcmFnS2V5YmluZGluZykgewotICAgICAgICAgICAgdGhpcy4kZHJhZ0tleWJpbmRpbmcgPSB7
Ci0gICAgICAgICAgICAgICAgaGFuZGxlS2V5Ym9hcmQ6IGZ1bmN0aW9uKGRhdGEsIGhhc2hJZCwg
a2V5U3RyaW5nLCBrZXlDb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZXlTdHJpbmcg
PT0gImVzYyIpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2NvbW1hbmQ6IHRoaXMu
Y29tbWFuZH07Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBjb21tYW5kOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBlZGl0b3IuJG1vdXNlSGFuZGxlcjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuZHJhZ0N1cnNvciA9IG51bGw7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmRyYWdFbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Rh
cnRTZWxlY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLmFkZEtl
eWJvYXJkSGFuZGxlcih0aGlzLiRkcmFnS2V5YmluZGluZyk7Ci0gICAgfTsKLQotICAgIHRoaXMu
Zm9jdXNXYWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBkaXN0YW5jZSA9IGNhbGNEaXN0
YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwgdGhpcy54
LCB0aGlzLnkpOwotICAgICAgICB2YXIgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Ci0K
LSAgICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQgfHwgdGltZSAtIHRoaXMubW91c2Vk
b3duRXZlbnQudGltZSA+IHRoaXMuJGZvY3VzVGltb3V0KQotICAgICAgICAgICAgdGhpcy5zdGFy
dFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKSk7Ci0gICAg
fTsKLQotICAgIHRoaXMuZHJhZ1dhaXQgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHZhciBkaXN0
YW5jZSA9IGNhbGNEaXN0YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3du
RXZlbnQueSwgdGhpcy54LCB0aGlzLnkpOwotICAgICAgICB2YXIgdGltZSA9IChuZXcgRGF0ZSgp
KS5nZXRUaW1lKCk7Ci0gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKLQotICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCkgewotICAgICAgICAgICAgdGhpcy5zdGFydFNl
bGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAodGltZSAtIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA+IGVkaXRvci4kbW91
c2VIYW5kbGVyLiRkcmFnRGVsYXkpIHsKLSAgICAgICAgICAgIHRoaXMuc3RhcnREcmFnKCk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy5kcmFnV2FpdEVuZCA9IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudC5kb21FdmVudCA9IGU7Ci0gICAgICAgIHRoaXMu
c3RhcnRTZWxlY3QoKTsKLSAgICB9OwotCi0gICAgdGhpcy5kcmFnID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKLSAgICAgICAgdGhpcy5kcmFnQ3Vyc29y
ID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55
KTsKLSAgICAgICAgZWRpdG9yLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHRoaXMuZHJhZ0N1cnNvcik7
Ci0gICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpOwotICAgIH07
Ci0KLSAgICB0aGlzLmRyYWdFbmQgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHZhciBlZGl0b3Ig
PSB0aGlzLmVkaXRvcjsKLSAgICAgICAgdmFyIGRyYWdDdXJzb3IgPSB0aGlzLmRyYWdDdXJzb3I7
Ci0gICAgICAgIHZhciBkcmFnUmFuZ2UgPSB0aGlzLmRyYWdSYW5nZTsKLSAgICAgICAgZG9tLnJl
bW92ZUNzc0NsYXNzKGVkaXRvci5jb250YWluZXIsICJhY2VfZHJhZ2dpbmciKTsKLSAgICAgICAg
ZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMuZHJhZ1NlbGVjdGlvbk1hcmtlcik7Ci0g
ICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkcmFn
S2V5YmluZGluZyk7Ci0KLSAgICAgICAgaWYgKCFkcmFnQ3Vyc29yKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZSAm
JiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5KSkgewotICAgICAgICAgICAgdmFyIHNlc3Npb24gPSBl
ZGl0b3Iuc2Vzc2lvbjsKLSAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IGRyYWdSYW5nZTsKLSAg
ICAgICAgICAgIG5ld1JhbmdlLmVuZCA9IHNlc3Npb24uaW5zZXJ0KGRyYWdDdXJzb3IsIHNlc3Np
b24uZ2V0VGV4dFJhbmdlKGRyYWdSYW5nZSkpOwotICAgICAgICAgICAgbmV3UmFuZ2Uuc3RhcnQg
PSBkcmFnQ3Vyc29yOwotICAgICAgICB9IGVsc2UgaWYgKGRyYWdSYW5nZS5jb250YWlucyhkcmFn
Q3Vyc29yLnJvdywgZHJhZ0N1cnNvci5jb2x1bW4pKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBlZGl0b3IubW92ZVRl
eHQoZHJhZ1JhbmdlLCBkcmFnQ3Vyc29yKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbmV3
UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb25SYW5nZShuZXdSYW5nZSk7Ci0gICAgfTsKLQotICAgIHRoaXMub25Eb3VibGVD
bGljayA9IGZ1bmN0aW9uKGV2KSB7Ci0gICAgICAgIHZhciBwb3MgPSBldi5nZXREb2N1bWVudFBv
c2l0aW9uKCk7Ci0gICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKLSAgICAgICAgdmFy
IHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKLQotICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9u
LmdldEJyYWNrZXRSYW5nZShwb3MpOwotICAgICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgICAg
IGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1
bW4tLTsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IHJhbmdlOwotICAgICAgICAgICAg
dGhpcy5zZXRTdGF0ZSgic2VsZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0V29y
ZFJhbmdlKHBvcy5yb3csIHBvcy5jb2x1bW4pOwotICAgICAgICB0aGlzLnNldFN0YXRlKCJzZWxl
Y3RCeVdvcmRzIik7Ci0gICAgfTsKLQotICAgIHRoaXMub25UcmlwbGVDbGljayA9IGZ1bmN0aW9u
KGV2KSB7Ci0gICAgICAgIHZhciBwb3MgPSBldi5nZXREb2N1bWVudFBvc2l0aW9uKCk7Ci0gICAg
ICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKLQotICAgICAgICB0aGlzLnNldFN0YXRlKCJz
ZWxlY3RCeUxpbmVzIik7Ci0gICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNl
bGVjdGlvbi5nZXRMaW5lUmFuZ2UocG9zLnJvdyk7Ci0gICAgfTsKLQotICAgIHRoaXMub25RdWFk
Q2xpY2sgPSBmdW5jdGlvbihldikgewotICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7
Ci0KLSAgICAgICAgZWRpdG9yLnNlbGVjdEFsbCgpOwotICAgICAgICB0aGlzLiRjbGlja1NlbGVj
dGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwotICAgICAgICB0aGlzLnNldFN0YXRl
KCJudWxsIik7Ci0gICAgfTsKLQotICAgIHRoaXMub25Nb3VzZVdoZWVsID0gZnVuY3Rpb24oZXYp
IHsKLSAgICAgICAgaWYgKGV2LmdldFNoaWZ0S2V5KCkgfHwgZXYuZ2V0QWNjZWxLZXkoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHQgPSBldi5kb21FdmVudC50aW1lU3RhbXA7
Ci0gICAgICAgIHZhciBkdCA9IHQgLSAodGhpcy4kbGFzdFNjcm9sbFRpbWV8fDApOwotICAgICAg
ICAKLSAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwotICAgICAgICB2YXIgaXNTY3Jv
bGFibGUgPSBlZGl0b3IucmVuZGVyZXIuaXNTY3JvbGxhYmxlQnkoZXYud2hlZWxYICogZXYuc3Bl
ZWQsIGV2LndoZWVsWSAqIGV2LnNwZWVkKTsKLSAgICAgICAgaWYgKGlzU2Nyb2xhYmxlIHx8IGR0
IDwgMjAwKSB7Ci0gICAgICAgICAgICB0aGlzLiRsYXN0U2Nyb2xsVGltZSA9IHQ7Ci0gICAgICAg
ICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQnkoZXYud2hlZWxYICogZXYuc3BlZWQsIGV2Lndo
ZWVsWSAqIGV2LnNwZWVkKTsKLSAgICAgICAgICAgIHJldHVybiBldi5zdG9wKCk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi19KS5jYWxsKERlZmF1bHRIYW5kbGVycy5wcm90b3R5cGUpOwotCi1leHBv
cnRzLkRlZmF1bHRIYW5kbGVycyA9IERlZmF1bHRIYW5kbGVyczsKLQotZnVuY3Rpb24gY2FsY0Rp
c3RhbmNlKGF4LCBheSwgYngsIGJ5KSB7Ci0gICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhi
eCAtIGF4LCAyKSArIE1hdGgucG93KGJ5IC0gYXksIDIpKTsKLX0KLQotZnVuY3Rpb24gY2FsY1Jh
bmdlT3JpZW50YXRpb24ocmFuZ2UsIGN1cnNvcikgewotICAgIGlmIChyYW5nZS5zdGFydC5yb3cg
PT0gcmFuZ2UuZW5kLnJvdykKLSAgICAgICAgdmFyIGNtcCA9IDIgKiBjdXJzb3IuY29sdW1uIC0g
cmFuZ2Uuc3RhcnQuY29sdW1uIC0gcmFuZ2UuZW5kLmNvbHVtbjsKLSAgICBlbHNlCi0gICAgICAg
IHZhciBjbXAgPSAyICogY3Vyc29yLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyAtIHJhbmdlLmVuZC5y
b3c7Ci0KLSAgICBpZiAoY21wIDwgMCkKLSAgICAgICAgcmV0dXJuIHtjdXJzb3I6IHJhbmdlLnN0
YXJ0LCBhbmNob3I6IHJhbmdlLmVuZH07Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4ge2N1cnNv
cjogcmFuZ2UuZW5kLCBhbmNob3I6IHJhbmdlLnN0YXJ0fTsKLX0KLQotfSk7Ci0KLWFjZS5kZWZp
bmUoJ2FjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyJywgWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50J10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi12YXIgZG9tID0gcmVxdWlyZSgiLi4vbGli
L2RvbSIpOwotdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7Ci0KLWZ1bmN0aW9u
IEd1dHRlckhhbmRsZXIobW91c2VIYW5kbGVyKSB7Ci0gICAgdmFyIGVkaXRvciA9IG1vdXNlSGFu
ZGxlci5lZGl0b3I7Ci0gICAgdmFyIGd1dHRlciA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5
ZXI7Ci0KLSAgICBtb3VzZUhhbmRsZXIuZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJt
b3VzZWRvd24iLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmICghZWRpdG9yLmlzRm9jdXNlZCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgZ3V0dGVyUmVnaW9uID0gZ3V0dGVy
LmdldFJlZ2lvbihlKTsKLQotICAgICAgICBpZiAoZ3V0dGVyUmVnaW9uID09ICJmb2xkV2lkZ2V0
cyIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1l
bnRQb3NpdGlvbigpLnJvdzsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5zZXNzaW9u
LnNlbGVjdGlvbjsKLQotICAgICAgICBpZiAoZS5nZXRTaGlmdEtleSgpKQotICAgICAgICAgICAg
c2VsZWN0aW9uLnNlbGVjdFRvKHJvdywgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
aWYgKGUuZG9tRXZlbnQuZGV0YWlsID09IDIpIHsKLSAgICAgICAgICAgICAgICBlZGl0b3Iuc2Vs
ZWN0QWxsKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0aW9uLmdldExpbmVSYW5nZShyb3cpOwotICAgICAgICB9Ci0gICAgICAgIG1v
dXNlSGFuZGxlci5jYXB0dXJlTW91c2UoZSwgInNlbGVjdEJ5TGluZXMiKTsKLSAgICAgICAgcmV0
dXJuIGUucHJldmVudERlZmF1bHQoKTsKLSAgICB9KTsKLQotCi0gICAgdmFyIHRvb2x0aXBUaW1l
b3V0LCBtb3VzZUV2ZW50LCB0b29sdGlwLCB0b29sdGlwQW5ub3RhdGlvbjsKLSAgICBmdW5jdGlv
biBjcmVhdGVUb29sdGlwKCkgewotICAgICAgICB0b29sdGlwID0gZG9tLmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICJhY2VfZ3V0dGVyLXRvb2x0aXAi
OwotICAgICAgICB0b29sdGlwLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICAgIGVkaXRv
ci5jb250YWluZXIuYXBwZW5kQ2hpbGQodG9vbHRpcCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
c2hvd1Rvb2x0aXAoKSB7Ci0gICAgICAgIGlmICghdG9vbHRpcCkgewotICAgICAgICAgICAgY3Jl
YXRlVG9vbHRpcCgpOwotICAgICAgICB9Ci0gICAgICAgIHZhciByb3cgPSBtb3VzZUV2ZW50Lmdl
dERvY3VtZW50UG9zaXRpb24oKS5yb3c7Ci0gICAgICAgIHZhciBhbm5vdGF0aW9uID0gZ3V0dGVy
LiRhbm5vdGF0aW9uc1tyb3ddOwotICAgICAgICBpZiAoIWFubm90YXRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gaGlkZVRvb2x0aXAoKTsKLQotICAgICAgICB2YXIgbWF4Um93ID0gZWRpdG9yLnNl
c3Npb24uZ2V0TGVuZ3RoKCk7Ci0gICAgICAgIGlmIChyb3cgPT0gbWF4Um93KSB7Ci0gICAgICAg
ICAgICB2YXIgc2NyZWVuUm93ID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGlu
YXRlcygwLCBtb3VzZUV2ZW50LnkpLnJvdzsKLSAgICAgICAgICAgIHZhciBwb3MgPSBtb3VzZUV2
ZW50LiRwb3M7Ci0gICAgICAgICAgICBpZiAoc2NyZWVuUm93ID4gZWRpdG9yLnNlc3Npb24uZG9j
dW1lbnRUb1NjcmVlblJvdyhwb3Mucm93LCBwb3MuY29sdW1uKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaGlkZVRvb2x0aXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b29sdGlwQW5u
b3RhdGlvbiA9PSBhbm5vdGF0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0b29s
dGlwQW5ub3RhdGlvbiA9IGFubm90YXRpb24udGV4dC5qb2luKCI8YnIvPiIpOwotCi0gICAgICAg
IHRvb2x0aXAuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAgICAgIHRvb2x0aXAuaW5uZXJI
VE1MID0gdG9vbHRpcEFubm90YXRpb247Ci0gICAgICAgIGVkaXRvci5vbigibW91c2V3aGVlbCIs
IGhpZGVUb29sdGlwKTsKLQotICAgICAgICBtb3ZlVG9vbHRpcChtb3VzZUV2ZW50KTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBoaWRlVG9vbHRpcCgpIHsKLSAgICAgICAgaWYgKHRvb2x0aXBUaW1l
b3V0KQotICAgICAgICAgICAgdG9vbHRpcFRpbWVvdXQgPSBjbGVhclRpbWVvdXQodG9vbHRpcFRp
bWVvdXQpOwotICAgICAgICBpZiAodG9vbHRpcEFubm90YXRpb24pIHsKLSAgICAgICAgICAgIHRv
b2x0aXAuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgICAgICAgIHRvb2x0aXBBbm5vdGF0
aW9uID0gbnVsbDsKLSAgICAgICAgICAgIGVkaXRvci5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3Vz
ZXdoZWVsIiwgaGlkZVRvb2x0aXApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
bW92ZVRvb2x0aXAoZSkgewotICAgICAgICB2YXIgcmVjdCA9IGVkaXRvci5yZW5kZXJlci4kZ3V0
dGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgICB0b29sdGlwLnN0eWxlLmxlZnQg
PSBlLnggKyAxNSArICJweCI7Ci0gICAgICAgIGlmIChlLnkgKyAzICogZWRpdG9yLnJlbmRlcmVy
LmxpbmVIZWlnaHQgKyAxNSA8IHJlY3QuYm90dG9tKSB7Ci0gICAgICAgICAgICB0b29sdGlwLnN0
eWxlLmJvdHRvbSA9ICAiIjsKLSAgICAgICAgICAgIHRvb2x0aXAuc3R5bGUudG9wID0gIGUueSAr
IDE1ICsgInB4IjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRvb2x0aXAuc3R5bGUu
dG9wID0gICIiOwotICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS5ib3R0b20gPSByZWN0LmJvdHRv
bSAtIGUueSArIDUgKyAicHgiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbW91c2VIYW5kbGVy
LmVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigiZ3V0dGVybW91c2Vtb3ZlIiwgZnVuY3Rpb24oZSkg
ewotICAgICAgICB2YXIgdGFyZ2V0ID0gZS5kb21FdmVudC50YXJnZXQgfHwgZS5kb21FdmVudC5z
cmNFbGVtZW50OwotICAgICAgICBpZiAoZG9tLmhhc0Nzc0NsYXNzKHRhcmdldCwgImFjZV9mb2xk
LXdpZGdldCIpKQotICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlwKCk7Ci0KLSAgICAgICAg
aWYgKHRvb2x0aXBBbm5vdGF0aW9uKQotICAgICAgICAgICAgbW92ZVRvb2x0aXAoZSk7Ci0KLSAg
ICAgICAgbW91c2VFdmVudCA9IGU7Ci0gICAgICAgIGlmICh0b29sdGlwVGltZW91dCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdG9vbHRpcFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgdG9vbHRpcFRpbWVvdXQgPSBudWxsOwotICAgICAgICAgICAg
aWYgKG1vdXNlRXZlbnQgJiYgIW1vdXNlSGFuZGxlci5pc01vdXNlUHJlc3NlZCkKLSAgICAgICAg
ICAgICAgICBzaG93VG9vbHRpcCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGhpZGVUb29sdGlwKCk7Ci0gICAgICAgIH0sIDUwKTsKLSAgICB9KTsKLQotICAgIGV2ZW50LmFk
ZExpc3RlbmVyKGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyLCAibW91c2VvdXQiLCBmdW5jdGlvbihl
KSB7Ci0gICAgICAgIG1vdXNlRXZlbnQgPSBudWxsOwotICAgICAgICBpZiAoIXRvb2x0aXBBbm5v
dGF0aW9uIHx8IHRvb2x0aXBUaW1lb3V0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHRvb2x0aXBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHRv
b2x0aXBUaW1lb3V0ID0gbnVsbDsKLSAgICAgICAgICAgIGhpZGVUb29sdGlwKCk7Ci0gICAgICAg
IH0sIDUwKTsKLSAgICB9KTsKLQotfQotCi1leHBvcnRzLkd1dHRlckhhbmRsZXIgPSBHdXR0ZXJI
YW5kbGVyOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vdXNlL21vdXNlX2V2ZW50JywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIv
dXNlcmFnZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZh
ciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOwotdmFyIHVzZXJhZ2VudCA9IHJlcXVp
cmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKLXZhciBNb3VzZUV2ZW50ID0gZXhwb3J0cy5Nb3VzZUV2
ZW50ID0gZnVuY3Rpb24oZG9tRXZlbnQsIGVkaXRvcikgewotICAgIHRoaXMuZG9tRXZlbnQgPSBk
b21FdmVudDsKLSAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKLSAgICAKLSAgICB0aGlzLnggPSB0
aGlzLmNsaWVudFggPSBkb21FdmVudC5jbGllbnRYOwotICAgIHRoaXMueSA9IHRoaXMuY2xpZW50
WSA9IGRvbUV2ZW50LmNsaWVudFk7Ci0KLSAgICB0aGlzLiRwb3MgPSBudWxsOwotICAgIHRoaXMu
JGluU2VsZWN0aW9uID0gbnVsbDsKLSAgICAKLSAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9
IGZhbHNlOwotICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwotfTsKLQotKGZ1bmN0
aW9uKCkgeyAgCi0gICAgCi0gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZlbnQpOwotICAgICAgICB0
aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7Ci0gICAgfTsKLSAgICAKLSAgICB0aGlzLnBy
ZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KHRoaXMuZG9tRXZlbnQpOwotICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOwot
ICAgIH07Ci0gICAgCi0gICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMu
c3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoKTsKLSAgICB9
OwotICAgIHRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAodGhpcy4kcG9zKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHBvczsKLSAgICAgICAgCi0g
ICAgICAgIHRoaXMuJHBvcyA9IHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3Jk
aW5hdGVzKHRoaXMuY2xpZW50WCwgdGhpcy5jbGllbnRZKTsKLSAgICAgICAgcmV0dXJuIHRoaXMu
JHBvczsKLSAgICB9OwotICAgIHRoaXMuaW5TZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgaWYgKHRoaXMuJGluU2VsZWN0aW9uICE9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuJGluU2VsZWN0aW9uOwotICAgICAgICAgICAgCi0gICAgICAgIHZhciBlZGl0b3IgPSB0aGlz
LmVkaXRvcjsKLSAgICAgICAgCi0gICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkgewot
ICAgICAgICAgICAgdGhpcy4kaW5TZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGVkaXRvci5nZXRTZWxl
Y3Rpb25SYW5nZSgpOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlv
bigpOwotICAgICAgICAgICAgICAgIHRoaXMuJGluU2VsZWN0aW9uID0gc2VsZWN0aW9uUmFuZ2Uu
Y29udGFpbnMocG9zLnJvdywgcG9zLmNvbHVtbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uOwotICAgIH07Ci0gICAgdGhpcy5nZXRC
dXR0b24gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGV2ZW50LmdldEJ1dHRvbih0aGlz
LmRvbUV2ZW50KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0U2hpZnRLZXkgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZG9tRXZlbnQuc2hpZnRLZXk7Ci0gICAgfTsKLSAgICAKLSAg
ICB0aGlzLmdldEFjY2VsS2V5ID0gdXNlcmFnZW50LmlzTWFjCi0gICAgICAgID8gZnVuY3Rpb24o
KSB7IHJldHVybiB0aGlzLmRvbUV2ZW50Lm1ldGFLZXk7IH0KLSAgICAgICAgOiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMuZG9tRXZlbnQuY3RybEtleTsgfTsKLSAgICAKLX0pLmNhbGwoTW91c2VF
dmVudC5wcm90b3R5cGUpOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vdXNlL2RyYWdkcm9w
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2V2ZW50J10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBldmVudCA9IHJlcXVp
cmUoIi4uL2xpYi9ldmVudCIpOwotCi12YXIgRHJhZ2Ryb3BIYW5kbGVyID0gZnVuY3Rpb24obW91
c2VIYW5kbGVyKSB7Ci0gICAgdmFyIGVkaXRvciA9IG1vdXNlSGFuZGxlci5lZGl0b3I7Ci0gICAg
dmFyIGRyYWdTZWxlY3Rpb25NYXJrZXIsIHgsIHk7Ci0gICAgdmFyIHRpbWVySWQsIHJhbmdlLCBp
c0JhY2t3YXJkczsKLSAgICB2YXIgZHJhZ0N1cnNvciwgY291bnRlciA9IDA7Ci0KLSAgICB2YXIg
bW91c2VUYXJnZXQgPSBlZGl0b3IuY29udGFpbmVyOwotICAgIGV2ZW50LmFkZExpc3RlbmVyKG1v
dXNlVGFyZ2V0LCAiZHJhZ2VudGVyIiwgZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAoZWRpdG9y
LmdldFJlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciB0eXBlcyA9
IGUuZGF0YVRyYW5zZmVyLnR5cGVzOwotICAgICAgICBpZiAodHlwZXMgJiYgQXJyYXkucHJvdG90
eXBlLmluZGV4T2YuY2FsbCh0eXBlcywgJ0ZpbGVzJykgIT09IC0xKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIGlmICghZHJhZ1NlbGVjdGlvbk1hcmtl
cikgewotICAgICAgICAgICAgcmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAg
ICAgICAgICAgIGlzQmFja3dhcmRzID0gZWRpdG9yLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpOwot
ICAgICAgICAgICAgdmFyIHN0eWxlID0gZWRpdG9yLmdldFNlbGVjdGlvblN0eWxlKCk7Ci0gICAg
ICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gZWRpdG9yLnNlc3Npb24uYWRkTWFya2VyKHJh
bmdlLCAiYWNlX3NlbGVjdGlvbiIsIHN0eWxlKTsKLSAgICAgICAgICAgIGVkaXRvci5jbGVhclNl
bGVjdGlvbigpOwotICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTsKLSAgICAgICAg
ICAgIHRpbWVySWQgPSBzZXRJbnRlcnZhbChvbkRyYWdJbnRlcnZhbCwgMjApOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKLSAgICB9KTsKLQotICAg
IGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJhZ292ZXIiLCBmdW5jdGlvbihlKSB7
Ci0gICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdmFyIHR5cGVzID0gZS5kYXRhVHJhbnNmZXIudHlwZXM7Ci0gICAgICAgIGlmICh0
eXBlcyAmJiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHR5cGVzLCAnRmlsZXMnKSAhPT0g
LTEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHggPSBlLmNsaWVudFg7Ci0gICAgICAg
IHkgPSBlLmNsaWVudFk7Ci0gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsK
LSAgICB9KTsKLSAgICAKLSAgICB2YXIgb25EcmFnSW50ZXJ2YWwgPSAgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGRyYWdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0
ZXMoeCwgeSk7Ci0gICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihkcmFnQ3Vyc29y
KTsKLSAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7Ci0gICAg
fTsKLSAgICAKLSAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdsZWF2ZSIs
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdHlwZXMgPSBlLmRhdGFUcmFuc2Zlci50eXBlczsK
LSAgICAgICAgaWYgKHR5cGVzICYmIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodHlwZXMs
ICdGaWxlcycpICE9PSAtMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY291bnRlci0t
OwotICAgICAgICBpZiAoY291bnRlciA+IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNsZWFySW50ZXJ2YWwodGltZXJJZCk7Ci0gICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZU1h
cmtlcihkcmFnU2VsZWN0aW9uTWFya2VyKTsKLSAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9
IG51bGw7Ci0gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2Us
IGlzQmFja3dhcmRzKTsKLSAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOwot
ICAgIH0pOwotICAgIAotICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJvcCIs
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKGVkaXRvci5nZXRSZWFkT25seSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjb3VudGVyID0gMDsKLSAgICAgICAgY2xlYXJJbnRlcnZh
bCh0aW1lcklkKTsKLSAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKGRyYWdTZWxl
Y3Rpb25NYXJrZXIpOwotICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gbnVsbDsKLQotICAg
ICAgICByYW5nZS5lbmQgPSBlZGl0b3Iuc2Vzc2lvbi5pbnNlcnQoZHJhZ0N1cnNvciwgZS5kYXRh
VHJhbnNmZXIuZ2V0RGF0YSgnVGV4dCcpKTsKLSAgICAgICAgcmFuZ2Uuc3RhcnQgPSBkcmFnQ3Vy
c29yOwotICAgICAgICBlZGl0b3IuZm9jdXMoKTsKLSAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb25SYW5nZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVm
YXVsdChlKTsKLSAgICB9KTsKLQotfTsKLQotZXhwb3J0cy5EcmFnZHJvcEhhbmRsZXIgPSBEcmFn
ZHJvcEhhbmRsZXI7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL2NvbmZpZycsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvb29wJywgJ2Fj
ZS9saWIvbmV0JywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKLSJubyB1c2Ugc3RyaWN0IjsKLQotdmFyIGxhbmcgPSByZXF1aXJl
KCIuL2xpYi9sYW5nIik7Ci12YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Ci12YXIgbmV0
ID0gcmVxdWlyZSgiLi9saWIvbmV0Iik7Ci12YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9s
aWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKLQotdmFyIGdsb2JhbCA9IChmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gdGhpczsKLX0pKCk7Ci0KLXZhciBvcHRpb25zID0gewotICAgIHBh
Y2thZ2VkOiBmYWxzZSwKLSAgICB3b3JrZXJQYXRoOiBudWxsLAotICAgIG1vZGVQYXRoOiBudWxs
LAotICAgIHRoZW1lUGF0aDogbnVsbCwKLSAgICBiYXNlUGF0aDogIiIsCi0gICAgc3VmZml4OiAi
LmpzIiwKLSAgICAkbW9kdWxlVXJsczoge30KLX07Ci0KLWV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24o
a2V5KSB7Ci0gICAgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpCi0gICAgICAgIHRo
cm93IG5ldyBFcnJvcigiVW5rbm93biBjb25maWcga2V5OiAiICsga2V5KTsKLQotICAgIHJldHVy
biBvcHRpb25zW2tleV07Ci19OwotCi1leHBvcnRzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUp
IHsKLSAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkKLSAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIgKyBrZXkpOwotCi0gICAgb3B0aW9uc1tr
ZXldID0gdmFsdWU7Ci19OwotCi1leHBvcnRzLmFsbCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biBsYW5nLmNvcHlPYmplY3Qob3B0aW9ucyk7Ci19Owotb29wLmltcGxlbWVudChleHBvcnRzLCBF
dmVudEVtaXR0ZXIpOwotCi1leHBvcnRzLm1vZHVsZVVybCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBv
bmVudCkgewotICAgIGlmIChvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdKQotICAgICAgICByZXR1
cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXTsKLQotICAgIHZhciBwYXJ0cyA9IG5hbWUuc3Bs
aXQoIi8iKTsKLSAgICBjb21wb25lbnQgPSBjb21wb25lbnQgfHwgcGFydHNbcGFydHMubGVuZ3Ro
IC0gMl0gfHwgIiI7Ci0gICAgdmFyIGJhc2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5yZXBs
YWNlKGNvbXBvbmVudCwgIiIpLnJlcGxhY2UoLyheW1wtX10pfChbXC1fXSQpLywgIiIpOwotCi0g
ICAgaWYgKCFiYXNlICYmIHBhcnRzLmxlbmd0aCA+IDEpCi0gICAgICAgIGJhc2UgPSBwYXJ0c1tw
YXJ0cy5sZW5ndGggLSAyXTsKLSAgICB2YXIgcGF0aCA9IG9wdGlvbnNbY29tcG9uZW50ICsgIlBh
dGgiXTsKLSAgICBpZiAocGF0aCA9PSBudWxsKQotICAgICAgICBwYXRoID0gb3B0aW9ucy5iYXNl
UGF0aDsKLSAgICBpZiAocGF0aCAmJiBwYXRoLnNsaWNlKC0xKSAhPSAiLyIpCi0gICAgICAgIHBh
dGggKz0gIi8iOwotICAgIHJldHVybiBwYXRoICsgY29tcG9uZW50ICsgIi0iICsgYmFzZSArIHRo
aXMuZ2V0KCJzdWZmaXgiKTsKLX07Ci0KLWV4cG9ydHMuc2V0TW9kdWxlVXJsID0gZnVuY3Rpb24o
bmFtZSwgc3Vic3QpIHsKLSAgICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXSA9IHN1
YnN0OwotfTsKLQotZXhwb3J0cy5sb2FkTW9kdWxlID0gZnVuY3Rpb24obW9kdWxlTmFtZSwgb25M
b2FkKSB7Ci0gICAgdmFyIG1vZHVsZSwgbW9kdWxlVHlwZTsKLSAgICBpZiAoQXJyYXkuaXNBcnJh
eShtb2R1bGVOYW1lKSkgewotICAgICAgICBtb2R1bGVUeXBlID0gbW9kdWxlTmFtZVswXTsKLSAg
ICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVbMV07Ci0gICAgfQotICAgIHRyeSB7Ci0gICAg
ICAgIG1vZHVsZSA9IHJlcXVpcmUobW9kdWxlTmFtZSk7Ci0gICAgfSBjYXRjaCAoZSkge307Ci0g
ICAgaWYgKG1vZHVsZSkKLSAgICAgICAgcmV0dXJuIG9uTG9hZChtb2R1bGUpOwotCi0gICAgdmFy
IGFmdGVyTG9hZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXF1aXJlKFttb2R1bGVOYW1lXSwg
ZnVuY3Rpb24obW9kdWxlKSB7Ci0gICAgICAgICAgICBleHBvcnRzLl9lbWl0KCJsb2FkLm1vZHVs
ZSIsIHtuYW1lOiBtb2R1bGVOYW1lLCBtb2R1bGU6IG1vZHVsZX0pOwotICAgICAgICAgICAgb25M
b2FkKG1vZHVsZSk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBpZiAoIWV4cG9ydHMuZ2V0
KCJwYWNrYWdlZCIpKQotICAgICAgICByZXR1cm4gYWZ0ZXJMb2FkKCk7Ci0gICAgbmV0LmxvYWRT
Y3JpcHQoZXhwb3J0cy5tb2R1bGVVcmwobW9kdWxlTmFtZSwgbW9kdWxlVHlwZSksIGFmdGVyTG9h
ZCk7Ci19OwotZXhwb3J0cy5pbml0ID0gZnVuY3Rpb24oKSB7Ci0gICAgb3B0aW9ucy5wYWNrYWdl
ZCA9IHJlcXVpcmUucGFja2FnZWQgfHwgbW9kdWxlLnBhY2thZ2VkIHx8IChnbG9iYWwuZGVmaW5l
ICYmIGRlZmluZS5wYWNrYWdlZCk7Ci0KLSAgICBpZiAoIWdsb2JhbC5kb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuICIiOwotCi0gICAgdmFyIHNjcmlwdE9wdGlvbnMgPSB7fTsKLSAgICB2YXIgc2Ny
aXB0VXJsID0gIiI7Ci0KLSAgICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJzY3JpcHQiKTsKLSAgICBmb3IgKHZhciBpPTA7IGk8c2NyaXB0cy5sZW5ndGg7IGkr
KykgewotICAgICAgICB2YXIgc2NyaXB0ID0gc2NyaXB0c1tpXTsKLQotICAgICAgICB2YXIgc3Jj
ID0gc2NyaXB0LnNyYyB8fCBzY3JpcHQuZ2V0QXR0cmlidXRlKCJzcmMiKTsKLSAgICAgICAgaWYg
KCFzcmMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB2YXIgYXR0cmlidXRlcyA9
IHNjcmlwdC5hdHRyaWJ1dGVzOwotICAgICAgICBmb3IgKHZhciBqPTAsIGw9YXR0cmlidXRlcy5s
ZW5ndGg7IGogPCBsOyBqKyspIHsKLSAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tq
XTsKLSAgICAgICAgICAgIGlmIChhdHRyLm5hbWUuaW5kZXhPZigiZGF0YS1hY2UtIikgPT09IDAp
IHsKLSAgICAgICAgICAgICAgICBzY3JpcHRPcHRpb25zW2RlSHlwaGVuYXRlKGF0dHIubmFtZS5y
ZXBsYWNlKC9eZGF0YS1hY2UtLywgIiIpKV0gPSBhdHRyLnZhbHVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG0gPSBzcmMubWF0Y2goL14oLiopXC9hY2UoXC1cdysp
P1wuanMoXD98JCkvKTsKLSAgICAgICAgaWYgKG0pCi0gICAgICAgICAgICBzY3JpcHRVcmwgPSBt
WzFdOwotICAgIH0KLQotICAgIGlmIChzY3JpcHRVcmwpIHsKLSAgICAgICAgc2NyaXB0T3B0aW9u
cy5iYXNlID0gc2NyaXB0T3B0aW9ucy5iYXNlIHx8IHNjcmlwdFVybDsKLSAgICAgICAgc2NyaXB0
T3B0aW9ucy5wYWNrYWdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgc2NyaXB0T3B0aW9ucy5iYXNl
UGF0aCA9IHNjcmlwdE9wdGlvbnMuYmFzZTsKLSAgICBzY3JpcHRPcHRpb25zLndvcmtlclBhdGgg
PSBzY3JpcHRPcHRpb25zLndvcmtlclBhdGggfHwgc2NyaXB0T3B0aW9ucy5iYXNlOwotICAgIHNj
cmlwdE9wdGlvbnMubW9kZVBhdGggPSBzY3JpcHRPcHRpb25zLm1vZGVQYXRoIHx8IHNjcmlwdE9w
dGlvbnMuYmFzZTsKLSAgICBzY3JpcHRPcHRpb25zLnRoZW1lUGF0aCA9IHNjcmlwdE9wdGlvbnMu
dGhlbWVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTsKLSAgICBkZWxldGUgc2NyaXB0T3B0aW9u
cy5iYXNlOwotCi0gICAgZm9yICh2YXIga2V5IGluIHNjcmlwdE9wdGlvbnMpCi0gICAgICAgIGlm
ICh0eXBlb2Ygc2NyaXB0T3B0aW9uc1trZXldICE9PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAg
IGV4cG9ydHMuc2V0KGtleSwgc2NyaXB0T3B0aW9uc1trZXldKTsKLX07Ci0KLWZ1bmN0aW9uIGRl
SHlwaGVuYXRlKHN0cikgewotICAgIHJldHVybiBzdHIucmVwbGFjZSgvLSguKS9nLCBmdW5jdGlv
bihtLCBtMSkgeyByZXR1cm4gbTEudG9VcHBlckNhc2UoKTsgfSk7Ci19Ci0KLXZhciBvcHRpb25z
UHJvdmlkZXIgPSB7Ci0gICAgc2V0T3B0aW9uczogZnVuY3Rpb24ob3B0TGlzdCkgewotICAgICAg
ICBPYmplY3Qua2V5cyhvcHRMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAg
ICAgdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRMaXN0W2tleV0pOwotICAgICAgICB9LCB0aGlzKTsK
LSAgICB9LAotICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9uKGEpIHsKLSAgICAgICAgdmFyIGIgPSB7
fTsKLSAgICAgICAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKLSAgICAg
ICAgICAgIGJba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7Ci0gICAgICAgIH0sIHRoaXMpOwot
ICAgICAgICByZXR1cm4gYjsKLSAgICB9LAotICAgIHNldE9wdGlvbjogZnVuY3Rpb24obmFtZSwg
dmFsdWUpIHsKLSAgICAgICAgaWYgKHRoaXNbIiQiICsgbmFtZV0gPT09IHZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgb3B0ID0gdGhpcy4kb3B0aW9uc1tuYW1lXTsKLSAg
ICAgICAgaWYgKCFvcHQpCi0gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICBp
ZiAob3B0LmZvcndhcmRUbykKLSAgICAgICAgICAgIHJldHVybiB0aGlzW29wdC5mb3J3YXJkVG9d
ICYmIHRoaXNbb3B0LmZvcndhcmRUb10uc2V0T3B0aW9uKG5hbWUsIHZhbHVlKTsKLQotICAgICAg
ICBpZiAoIW9wdC5oYW5kbGVzU2V0KQotICAgICAgICAgICAgdGhpc1siJCIgKyBuYW1lXSA9IHZh
bHVlOwotICAgICAgICBpZiAob3B0ICYmIG9wdC5zZXQpCi0gICAgICAgICAgICBvcHQuc2V0LmNh
bGwodGhpcywgdmFsdWUpOwotICAgIH0sCi0gICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihuYW1lKSB7
Ci0gICAgICAgIHZhciBvcHQgPSB0aGlzLiRvcHRpb25zW25hbWVdOwotICAgICAgICBpZiAoIW9w
dCkKLSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgIGlmIChvcHQuZm9yd2Fy
ZFRvKQotICAgICAgICAgICAgcmV0dXJuIHRoaXNbb3B0LmZvcndhcmRUb10gJiYgdGhpc1tvcHQu
Zm9yd2FyZFRvXS5nZXRPcHRpb24obmFtZSk7Ci0gICAgICAgIHJldHVybiBvcHQgJiYgb3B0Lmdl
dCA/IG9wdC5nZXQuY2FsbCh0aGlzKSA6IHRoaXNbIiQiICsgbmFtZV07Ci0gICAgfQotfTsKLQot
dmFyIGRlZmF1bHRPcHRpb25zID0ge307Ci1leHBvcnRzLmRlZmluZU9wdGlvbnMgPSBmdW5jdGlv
bihvYmosIHBhdGgsIG9wdGlvbnMpIHsKLSAgICBpZiAoIW9iai4kb3B0aW9ucykKLSAgICAgICAg
ZGVmYXVsdE9wdGlvbnNbcGF0aF0gPSBvYmouJG9wdGlvbnMgPSB7fTsKLQotICAgIE9iamVjdC5r
ZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgIHZhciBvcHQgPSBv
cHRpb25zW2tleV07Ci0gICAgICAgIGlmICh0eXBlb2Ygb3B0ID09ICJzdHJpbmciKQotICAgICAg
ICAgICAgb3B0ID0ge2ZvcndhcmRUbzogb3B0fTsKLQotICAgICAgICBvcHQubmFtZSB8fCAob3B0
Lm5hbWUgPSBrZXkpOwotICAgICAgICBvYmouJG9wdGlvbnNbb3B0Lm5hbWVdID0gb3B0OwotICAg
ICAgICBpZiAoImluaXRpYWxWYWx1ZSIgaW4gb3B0KQotICAgICAgICAgICAgb2JqWyIkIiArIG9w
dC5uYW1lXSA9IG9wdC5pbml0aWFsVmFsdWU7Ci0gICAgfSk7Ci0gICAgb29wLmltcGxlbWVudChv
YmosIG9wdGlvbnNQcm92aWRlcik7Ci0KLSAgICByZXR1cm4gdGhpczsKLX07Ci0KLWV4cG9ydHMu
cmVzZXRPcHRpb25zID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgT2JqZWN0LmtleXMob2JqLiRvcHRp
b25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewotICAgICAgICB2YXIgb3B0ID0gb2JqLiRvcHRp
b25zW2tleV07Ci0gICAgICAgIGlmICgidmFsdWUiIGluIG9wdCkKLSAgICAgICAgICAgIG9iai5z
ZXRPcHRpb24oa2V5LCBvcHQudmFsdWUpOwotICAgIH0pOwotfTsKLQotZXhwb3J0cy5zZXREZWZh
dWx0VmFsdWUgPSBmdW5jdGlvbihwYXRoLCBuYW1lLCB2YWx1ZSkgewotICAgIHZhciBvcHRzID0g
ZGVmYXVsdE9wdGlvbnNbcGF0aF0gfHwgKGRlZmF1bHRPcHRpb25zW3BhdGhdID0ge30pOwotICAg
IGlmIChvcHRzW25hbWVdKSB7Ci0gICAgICAgIGlmIChvcHRzLmZvcndhcmRUbykKLSAgICAgICAg
ICAgIGV4cG9ydHMuc2V0RGVmYXVsdFZhbHVlKG9wdHMuZm9yd2FyZFRvLCBuYW1lLCB2YWx1ZSkK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0c1tuYW1lXS52YWx1ZSA9IHZhbHVlOwotICAg
IH0KLX07Ci0KLWV4cG9ydHMuc2V0RGVmYXVsdFZhbHVlcyA9IGZ1bmN0aW9uKHBhdGgsIG9wdGlv
bkhhc2gpIHsKLSAgICBPYmplY3Qua2V5cyhvcHRpb25IYXNoKS5mb3JFYWNoKGZ1bmN0aW9uKGtl
eSkgewotICAgICAgICBleHBvcnRzLnNldERlZmF1bHRWYWx1ZShwYXRoLCBrZXksIG9wdGlvbkhh
c2hba2V5XSk7Ci0gICAgfSk7Ci19OwotCi19KTsKLWFjZS5kZWZpbmUoJ2FjZS9saWIvbmV0Jywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbSddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotdmFyIGRvbSA9IHJlcXVpcmUoIi4vZG9t
Iik7Ci0KLWV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHsKLSAgICB2YXIg
eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1
ZSk7Ci0gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
aWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh4aHIucmVz
cG9uc2VUZXh0KTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgeGhyLnNlbmQobnVsbCk7Ci19Owot
Ci1leHBvcnRzLmxvYWRTY3JpcHQgPSBmdW5jdGlvbihwYXRoLCBjYWxsYmFjaykgewotICAgIHZh
ciBoZWFkID0gZG9tLmdldERvY3VtZW50SGVhZCgpOwotICAgIHZhciBzID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc2NyaXB0Jyk7Ci0KLSAgICBzLnNyYyA9IHBhdGg7Ci0gICAgaGVhZC5hcHBl
bmRDaGlsZChzKTsKLQotICAgIHMub25sb2FkID0gcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5j
dGlvbihfLCBpc0Fib3J0KSB7Ci0gICAgICAgIGlmIChpc0Fib3J0IHx8ICFzLnJlYWR5U3RhdGUg
fHwgcy5yZWFkeVN0YXRlID09ICJsb2FkZWQiIHx8IHMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUi
KSB7Ci0gICAgICAgICAgICBzID0gcy5vbmxvYWQgPSBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51
bGw7Ci0gICAgICAgICAgICBpZiAoIWlzQWJvcnQpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2so
KTsKLSAgICAgICAgfQotICAgIH07Ci19OwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL2xpYi9l
dmVudF9lbWl0dGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyBdLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgRXZlbnRFbWl0dGVyID0ge307
Ci12YXIgc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7IHRoaXMucHJvcGFnYXRpb25TdG9w
cGVkID0gdHJ1ZTsgfTsKLXZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRl
ZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwotCi1FdmVudEVtaXR0ZXIuX2VtaXQgPQotRXZlbnRF
bWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7Ci0gICAgdGhp
cy5fZXZlbnRSZWdpc3RyeSB8fCAodGhpcy5fZXZlbnRSZWdpc3RyeSA9IHt9KTsKLSAgICB0aGlz
Ll9kZWZhdWx0SGFuZGxlcnMgfHwgKHRoaXMuX2RlZmF1bHRIYW5kbGVycyA9IHt9KTsKLQotICAg
IHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gfHwgW107Ci0g
ICAgdmFyIGRlZmF1bHRIYW5kbGVyID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV07
Ci0gICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQotICAgICAgICBl
ID0ge307Ci0KLSAgICBpZiAoIWUudHlwZSkKLSAgICAgICAgZS50eXBlID0gZXZlbnROYW1lOwot
ICAgIGlmICghZS5zdG9wUHJvcGFnYXRpb24pCi0gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0g
c3RvcFByb3BhZ2F0aW9uOwotICAgIGlmICghZS5wcmV2ZW50RGVmYXVsdCkKLSAgICAgICAgZS5w
cmV2ZW50RGVmYXVsdCA9IHByZXZlbnREZWZhdWx0OwotICAgIGlmICghZS50YXJnZXQpCi0gICAg
ICAgIGUudGFyZ2V0ID0gdGhpczsKLQotICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgbGlzdGVuZXJzW2ldKGUpOwotICAgICAgICBpZiAoZS5wcm9w
YWdhdGlvblN0b3BwZWQpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCi0gICAgICAgIHJldHVybiBk
ZWZhdWx0SGFuZGxlcihlKTsKLX07Ci0KLQotRXZlbnRFbWl0dGVyLl9zaWduYWwgPSBmdW5jdGlv
bihldmVudE5hbWUsIGUpIHsKLSAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0
cnkgfHwge30pW2V2ZW50TmFtZV07Ci0gICAgaWYgKCFsaXN0ZW5lcnMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCi0gICAgICAg
IGxpc3RlbmVyc1tpXShlKTsKLX07Ci0KLUV2ZW50RW1pdHRlci5vbmNlID0gZnVuY3Rpb24oZXZl
bnROYW1lLCBjYWxsYmFjaykgewotICAgIHZhciBfc2VsZiA9IHRoaXM7Ci0gICAgdmFyIG5ld0Nh
bGxiYWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZ1biAmJiBmdW4uYXBwbHkobnVsbCwgYXJn
dW1lbnRzKTsKLSAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbmV3Q2Fs
bGJhY2spOwotICAgIH07Ci0gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBuZXdDYWxs
YmFjayk7Ci19OwotCi0KLUV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9u
KGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKLSAgICB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB0aGlz
Ll9kZWZhdWx0SGFuZGxlcnMgfHwge307Ci0gICAgCi0gICAgaWYgKHRoaXMuX2RlZmF1bHRIYW5k
bGVyc1tldmVudE5hbWVdKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSBkZWZhdWx0IGhh
bmRsZXIgZm9yICciICsgZXZlbnROYW1lICsgIicgaXMgYWxyZWFkeSBzZXQiKTsKLSAgICAgICAg
Ci0gICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV0gPSBjYWxsYmFjazsKLX07Ci0K
LUV2ZW50RW1pdHRlci5vbiA9Ci1FdmVudEVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0
aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2ssIGNhcHR1cmluZykgewotICAgIHRoaXMuX2V2ZW50UmVn
aXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwotCi0gICAgdmFyIGxpc3RlbmVycyA9
IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTsKLSAgICBpZiAoIWxpc3RlbmVycykKLSAg
ICAgICAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdID0gW107Ci0K
LSAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQotICAgICAgICBsaXN0
ZW5lcnNbY2FwdHVyaW5nID8gInVuc2hpZnQiIDogInB1c2giXShjYWxsYmFjayk7Ci0gICAgcmV0
dXJuIGNhbGxiYWNrOwotfTsKLQotRXZlbnRFbWl0dGVyLnJlbW92ZUxpc3RlbmVyID0KLUV2ZW50
RW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxsYmFj
aykgewotICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9
OwotCi0gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTsK
LSAgICBpZiAoIWxpc3RlbmVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmFyIGluZGV4ID0g
bGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwotICAgIGlmIChpbmRleCAhPT0gLTEpCi0gICAg
ICAgIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpOwotfTsKLQotRXZlbnRFbWl0dGVyLnJlbW92
ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkgewotICAgIGlmICh0aGlzLl9ldmVu
dFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKLX07Ci0KLWV4
cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwotCi19KTsKLQotYWNlLmRlZmluZSgn
YWNlL21vdXNlL2ZvbGRfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotZnVuY3Rpb24gRm9s
ZEhhbmRsZXIoZWRpdG9yKSB7Ci0KLSAgICBlZGl0b3Iub24oImNsaWNrIiwgZnVuY3Rpb24oZSkg
ewotICAgICAgICB2YXIgcG9zaXRpb24gPSBlLmdldERvY3VtZW50UG9zaXRpb24oKTsKLSAgICAg
ICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKLSAgICAgICAgdmFyIGZvbGQgPSBzZXNz
aW9uLmdldEZvbGRBdChwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiwgMSk7Ci0gICAgICAg
IGlmIChmb2xkKSB7Ci0gICAgICAgICAgICBpZiAoZS5nZXRBY2NlbEtleSgpKQotICAgICAgICAg
ICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChmb2xkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzZXNzaW9uLmV4cGFuZEZvbGQoZm9sZCk7Ci0KLSAgICAgICAgICAgIGUuc3Rv
cCgpOwotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICBlZGl0b3Iub24oImd1dHRlcm1vdXNlZG93
biIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKCFlZGl0b3IuaXNGb2N1c2VkKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBndXR0ZXJSZWdpb24gPSBlZGl0b3IucmVuZGVy
ZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbihlKTsKLQotICAgICAgICBpZiAoZ3V0dGVyUmVnaW9u
ID09ICJmb2xkV2lkZ2V0cyIpIHsKLSAgICAgICAgICAgIHZhciByb3cgPSBlLmdldERvY3VtZW50
UG9zaXRpb24oKS5yb3c7Ci0gICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9u
OwotICAgICAgICAgICAgaWYgKHNlc3Npb24uZm9sZFdpZGdldHMgJiYgc2Vzc2lvbi5mb2xkV2lk
Z2V0c1tyb3ddKQotICAgICAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLm9uRm9sZFdpZGdldENs
aWNrKHJvdywgZSk7Ci0gICAgICAgICAgICBlLnN0b3AoKTsKLSAgICAgICAgfQotICAgIH0pOwot
Ci0gICAgZWRpdG9yLm9uKCJndXR0ZXJkYmxjbGljayIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAg
dmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9u
KGUpOwotCi0gICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRzIikgewotICAg
ICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKLSAgICAgICAg
ICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247Ci0gICAgICAgICAgICB2YXIgZncgPSBz
ZXNzaW9uLmZvbGRXaWRnZXRzOwotICAgICAgICAgICAgaWYgKCFmdyB8fCBmd1tyb3ddKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIGkgPSByb3cgLSAxLCBmaXJz
dFJhbmdlOwotICAgICAgICAgICAgd2hpbGUgKGkgPj0gMCkgewotICAgICAgICAgICAgICAgIHZh
ciBjID0gZndbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gbnVsbCkKLSAgICAgICAgICAg
ICAgICAgICAgYyA9IGZ3W2ldID0gc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0KGkpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGMgPT0gInN0YXJ0IikgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmFu
Z2UgPSBzZXNzaW9uLmdldEZvbGRXaWRnZXRSYW5nZShpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFmaXJzdFJhbmdlKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IHJh
bmdlOwotICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UuZW5kLnJvdyA+PSBy
b3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkgPT0g
LTEpCi0gICAgICAgICAgICAgICAgcmFuZ2UgPSBmaXJzdFJhbmdlOwotCi0gICAgICAgICAgICBp
ZiAocmFuZ2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm93ID0gcmFuZ2Uuc3RhcnQucm93Owot
ICAgICAgICAgICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBzZXNzaW9u
LmdldExpbmUocm93KS5sZW5ndGgsIDEpOwotCi0gICAgICAgICAgICAgICAgaWYgKGZvbGQpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVGb2xkKGZvbGQpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uYWRkRm9sZCgiLi4u
IiwgcmFuZ2UpOwotICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vy
c29ySW50b1ZpZXcoe3JvdzogcmFuZ2Uuc3RhcnQucm93LCBjb2x1bW46IDB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlLnN0b3AoKTsKLSAgICAgICAg
fQotICAgIH0pOwotfQotCi1leHBvcnRzLkZvbGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7Ci0KLX0p
OwotCi1hY2UuZGVmaW5lKCdhY2Uva2V5Ym9hcmQva2V5YmluZGluZycsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9rZXlzJywgJ2FjZS9saWIvZXZlbnQnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIGtleVV0aWwgID0gcmVx
dWlyZSgiLi4vbGliL2tleXMiKTsKLXZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIp
OwotCi12YXIgS2V5QmluZGluZyA9IGZ1bmN0aW9uKGVkaXRvcikgewotICAgIHRoaXMuJGVkaXRv
ciA9IGVkaXRvcjsKLSAgICB0aGlzLiRkYXRhID0geyB9OwotICAgIHRoaXMuJGhhbmRsZXJzID0g
W107Ci0gICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlcihlZGl0b3IuY29tbWFuZHMpOwotfTsKLQot
KGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihrYikg
ewotICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxl
cik7Ci0gICAgICAgIHRoaXMuJGRlZmF1bHRIYW5kbGVyID0ga2I7Ci0gICAgICAgIHRoaXMuYWRk
S2V5Ym9hcmRIYW5kbGVyKGtiLCAwKTsKLSAgICAgICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IHRo
aXMuJGVkaXRvcn07Ci0gICAgfTsKLQotICAgIHRoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVu
Y3Rpb24oa2IpIHsKLSAgICAgICAgaWYgKHRoaXMuJGhhbmRsZXJzW3RoaXMuJGhhbmRsZXJzLmxl
bmd0aCAtIDFdID09IGtiKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHdoaWxlICh0
aGlzLiRoYW5kbGVyc1sxXSkKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVy
KHRoaXMuJGhhbmRsZXJzWzFdKTsKLQotICAgICAgICB0aGlzLmFkZEtleWJvYXJkSGFuZGxlcihr
YiwgMSk7Ci0gICAgfTsKLQotICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24o
a2IsIHBvcykgewotICAgICAgICBpZiAoIWtiKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yoa2IpOwotICAgICAgICBpZiAoaSAhPSAt
MSkKLSAgICAgICAgICAgIHRoaXMuJGhhbmRsZXJzLnNwbGljZShpLCAxKTsKLQotICAgICAgICBp
ZiAocG9zID09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHRoaXMuJGhhbmRsZXJzLnB1c2goa2Ip
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLiRoYW5kbGVycy5zcGxpY2UocG9zLCAw
LCBrYik7Ci0KLSAgICAgICAgaWYgKGkgPT0gLTEgJiYga2IuYXR0YWNoKQotICAgICAgICAgICAg
a2IuYXR0YWNoKHRoaXMuJGVkaXRvcik7Ci0gICAgfTsKLQotICAgIHRoaXMucmVtb3ZlS2V5Ym9h
cmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKLSAgICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVy
cy5pbmRleE9mKGtiKTsKLSAgICAgICAgaWYgKGkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHRoaXMuJGhhbmRsZXJzLnNwbGljZShpLCAxKTsKLSAgICAgICAga2Iu
ZGV0YWNoICYmIGtiLmRldGFjaCh0aGlzLiRlZGl0b3IpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9OwotCi0gICAgdGhpcy5nZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuJGhhbmRsZXJzW3RoaXMuJGhhbmRsZXJzLmxlbmd0aCAtIDFdOwot
ICAgIH07Ci0KLSAgICB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycyA9IGZ1bmN0aW9uIChoYXNo
SWQsIGtleVN0cmluZywga2V5Q29kZSwgZSkgewotICAgICAgICB2YXIgdG9FeGVjdXRlOwotICAg
ICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICB2YXIgY29tbWFuZHMgPSB0aGlzLiRl
ZGl0b3IuY29tbWFuZHM7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmxl
bmd0aDsgaS0tOykgewotICAgICAgICAgICAgdG9FeGVjdXRlID0gdGhpcy4kaGFuZGxlcnNbaV0u
aGFuZGxlS2V5Ym9hcmQoCi0gICAgICAgICAgICAgICAgdGhpcy4kZGF0YSwgaGFzaElkLCBrZXlT
dHJpbmcsIGtleUNvZGUsIGUKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAoIXRvRXhl
Y3V0ZSB8fCAhdG9FeGVjdXRlLmNvbW1hbmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAodG9FeGVjdXRlLmNvbW1hbmQgPT0gIm51bGwiKSB7Ci0gICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IHRvRXhlY3V0ZS5wYXNzRXZlbnQgIT0gdHJ1ZTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IGNvbW1hbmRzLmV4ZWModG9FeGVj
dXRlLmNvbW1hbmQsIHRoaXMuJGVkaXRvciwgdG9FeGVjdXRlLmFyZ3MsIGUpOyAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGUgJiYgaGFz
aElkICE9IC0xKQotICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BFdmVudChlKTsKLSAgICAgICAg
ICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBzdWNjZXNzOwotICAgIH07Ci0KLSAgICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1
bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkgewotICAgICAgICB2YXIga2V5U3RyaW5nID0ga2V5
VXRpbC5rZXlDb2RlVG9TdHJpbmcoa2V5Q29kZSk7Ci0gICAgICAgIHRoaXMuJGNhbGxLZXlib2Fy
ZEhhbmRsZXJzKGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlKTsKLSAgICB9OwotCi0gICAg
dGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHsKLSAgICAgICAgdmFyIHN1Y2Nlc3Mg
PSB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycygtMSwgdGV4dCk7Ci0gICAgICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgICAgIHRoaXMuJGVkaXRvci5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJp
bmciLCB0aGlzLiRlZGl0b3IsIHRleHQpOwotICAgIH07Ci0KLX0pLmNhbGwoS2V5QmluZGluZy5w
cm90b3R5cGUpOwotCi1leHBvcnRzLktleUJpbmRpbmcgPSBLZXlCaW5kaW5nOwotfSk7Ci0KLWFj
ZS5kZWZpbmUoJ2FjZS9lZGl0X3Nlc3Npb24nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9jb25maWcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9s
aWIvZXZlbnRfZW1pdHRlcicsICdhY2Uvc2VsZWN0aW9uJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNl
L3JhbmdlJywgJ2FjZS9kb2N1bWVudCcsICdhY2UvYmFja2dyb3VuZF90b2tlbml6ZXInLCAnYWNl
L3NlYXJjaF9oaWdobGlnaHQnLCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nJywgJ2FjZS9lZGl0
X3Nlc3Npb24vYnJhY2tldF9tYXRjaCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKLQotCi12YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKLXZhciBvb3AgPSBy
ZXF1aXJlKCIuL2xpYi9vb3AiKTsKLXZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwot
dmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVt
aXR0ZXI7Ci12YXIgU2VsZWN0aW9uID0gcmVxdWlyZSgiLi9zZWxlY3Rpb24iKS5TZWxlY3Rpb247
Ci12YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL21vZGUvdGV4dCIpLk1vZGU7Ci12YXIgUmFuZ2Ug
PSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Ci12YXIgRG9jdW1lbnQgPSByZXF1aXJlKCIuL2Rv
Y3VtZW50IikuRG9jdW1lbnQ7Ci12YXIgQmFja2dyb3VuZFRva2VuaXplciA9IHJlcXVpcmUoIi4v
YmFja2dyb3VuZF90b2tlbml6ZXIiKS5CYWNrZ3JvdW5kVG9rZW5pemVyOwotdmFyIFNlYXJjaEhp
Z2hsaWdodCA9IHJlcXVpcmUoIi4vc2VhcmNoX2hpZ2hsaWdodCIpLlNlYXJjaEhpZ2hsaWdodDsK
LXZhciBjb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOwotCi12YXIgRWRpdFNlc3Npb24gPSBm
dW5jdGlvbih0ZXh0LCBtb2RlKSB7Ci0gICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTsKLSAgICB0
aGlzLiRkZWNvcmF0aW9ucyA9IFtdOwotICAgIHRoaXMuJGZyb250TWFya2VycyA9IHt9OwotICAg
IHRoaXMuJGJhY2tNYXJrZXJzID0ge307Ci0gICAgdGhpcy4kbWFya2VySWQgPSAxOwotICAgIHRo
aXMuJHVuZG9TZWxlY3QgPSB0cnVlOwotICAgIAotICAgIHRoaXMuJGZvbGREYXRhID0gW107Ci0g
ICAgdGhpcy4kZm9sZERhdGEudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHN0
ciA9ICIiOwotICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24oZm9sZExpbmUpIHsKLSAgICAg
ICAgICAgIHN0ciArPSAiXG4iICsgZm9sZExpbmUudG9TdHJpbmcoKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiBzdHI7Ci0gICAgfQotICAgIHRoaXMub24oImNoYW5nZUZvbGQiLCB0aGlz
Lm9uQ2hhbmdlRm9sZC5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25D
aGFuZ2UuYmluZCh0aGlzKTsKLSAgICAKLSAgICBpZiAodHlwZW9mIHRleHQgIT0gIm9iamVjdCIg
fHwgIXRleHQuZ2V0TGluZSkKLSAgICAgICAgdGV4dCA9IG5ldyBEb2N1bWVudCh0ZXh0KTsKLQot
ICAgIHRoaXMuc2V0RG9jdW1lbnQodGV4dCk7Ci0KLSAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBT
ZWxlY3Rpb24odGhpcyk7Ci0gICAgdGhpcy5zZXRNb2RlKG1vZGUpOwotCi0gICAgY29uZmlnLnJl
c2V0T3B0aW9ucyh0aGlzKTsKLSAgICBjb25maWcuX2VtaXQoInNlc3Npb24iLCB0aGlzKTsKLX07
Ci0KLQotKGZ1bmN0aW9uKCkgewotCi0gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0
ZXIpOwotICAgIHRoaXMuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHsKLSAgICAgICAgaWYg
KHRoaXMuZG9jKQotICAgICAgICAgICAgdGhpcy5kb2MucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIs
IHRoaXMuJG9uQ2hhbmdlKTsKLQotICAgICAgICB0aGlzLmRvYyA9IGRvYzsKLSAgICAgICAgZG9j
Lm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuYmdUb2tl
bml6ZXIpCi0gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0
RG9jdW1lbnQoKSk7Ci0KLSAgICAgICAgdGhpcy5yZXNldENhY2hlcygpOwotICAgIH07Ci0gICAg
dGhpcy5nZXREb2N1bWVudCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5kb2M7
Ci0gICAgfTsKLSAgICB0aGlzLiRyZXNldFJvd0NhY2hlID0gZnVuY3Rpb24oZG9jUm93KSB7Ci0g
ICAgICAgIGlmICghZG9jUm93KSB7Ci0gICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZSA9IFtd
OwotICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUgPSBbXTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICB2YXIgbCA9IHRoaXMuJGRvY1Jvd0NhY2hlLmxlbmd0
aDsKLSAgICAgICAgdmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHRoaXMuJGRvY1Jvd0Nh
Y2hlLCBkb2NSb3cpICsgMTsKLSAgICAgICAgaWYgKGwgPiBpKSB7Ci0gICAgICAgICAgICB0aGlz
LiRkb2NSb3dDYWNoZS5zcGxpY2UoaSwgbCk7Ci0gICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dD
YWNoZS5zcGxpY2UoaSwgbCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy4kZ2V0Um93
Q2FjaGVJbmRleCA9IGZ1bmN0aW9uKGNhY2hlQXJyYXksIHZhbCkgewotICAgICAgICB2YXIgbG93
ID0gMDsKLSAgICAgICAgdmFyIGhpID0gY2FjaGVBcnJheS5sZW5ndGggLSAxOwotCi0gICAgICAg
IHdoaWxlIChsb3cgPD0gaGkpIHsKLSAgICAgICAgICAgIHZhciBtaWQgPSAobG93ICsgaGkpID4+
IDE7Ci0gICAgICAgICAgICB2YXIgYyA9IGNhY2hlQXJyYXlbbWlkXTsKLQotICAgICAgICAgICAg
aWYgKHZhbCA+IGMpCi0gICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKHZhbCA8IGMpCi0gICAgICAgICAgICAgICAgaGkgPSBtaWQgLSAxOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gbG93IC0xOwotICAgIH07Ci0KLSAgICB0aGlzLnJlc2V0Q2FjaGVzID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy4k
d3JhcERhdGEgPSBbXTsKLSAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUgPSBbXTsKLSAgICAg
ICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKLSAgICAgICAgaWYgKHRoaXMuYmdUb2tlbml6ZXIp
Ci0gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApOwotICAgIH07Ci0KLSAgICB0
aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIGZvbGQgPSBlLmRh
dGE7Ci0gICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoZm9sZC5zdGFydC5yb3cpOwotICAgIH07
Ci0KLSAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgewotICAgICAgICB2YXIgZGVsdGEg
PSBlLmRhdGE7Ci0gICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKLQotICAgICAgICB0aGlz
LiRyZXNldFJvd0NhY2hlKGRlbHRhLnJhbmdlLnN0YXJ0LnJvdyk7Ci0KLSAgICAgICAgdmFyIHJl
bW92ZWRGb2xkcyA9IHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlKGUpOwotICAgICAg
ICBpZiAoIXRoaXMuJGZyb21VbmRvICYmIHRoaXMuJHVuZG9NYW5hZ2VyICYmICFkZWx0YS5pZ25v
cmUpIHsKLSAgICAgICAgICAgIHRoaXMuJGRlbHRhc0RvYy5wdXNoKGRlbHRhKTsKLSAgICAgICAg
ICAgIGlmIChyZW1vdmVkRm9sZHMgJiYgcmVtb3ZlZEZvbGRzLmxlbmd0aCAhPSAwKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy4kZGVsdGFzRm9sZC5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAg
YWN0aW9uOiAicmVtb3ZlRm9sZHMiLAotICAgICAgICAgICAgICAgICAgICBmb2xkczogIHJlbW92
ZWRGb2xkcwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5zY2hlZHVsZSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5iZ1Rva2VuaXplci4kdXBkYXRlT25DaGFuZ2UoZGVsdGEpOwotICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2UiLCBlKTsKLSAgICB9OwotICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlv
bih0ZXh0KSB7Ci0gICAgICAgIHRoaXMuZG9jLnNldFZhbHVlKHRleHQpOwotICAgICAgICB0aGlz
LnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oMCwgMCk7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNs
ZWFyU2VsZWN0aW9uKCk7Ci0KLSAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKLSAgICAg
ICAgdGhpcy4kZGVsdGFzID0gW107Ci0gICAgICAgIHRoaXMuJGRlbHRhc0RvYyA9IFtdOwotICAg
ICAgICB0aGlzLiRkZWx0YXNGb2xkID0gW107Ci0gICAgICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIo
KS5yZXNldCgpOwotICAgIH07Ci0gICAgdGhpcy5nZXRWYWx1ZSA9Ci0gICAgdGhpcy50b1N0cmlu
ZyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0VmFsdWUoKTsKLSAg
ICB9OwotICAgIHRoaXMuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLnNlbGVjdGlvbjsKLSAgICB9OwotICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbihy
b3cpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93KTsKLSAg
ICB9OwotICAgIHRoaXMuZ2V0VG9rZW5zID0gZnVuY3Rpb24ocm93KSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmJnVG9rZW5pemVyLmdldFRva2Vucyhyb3cpOwotICAgIH07Ci0gICAgdGhpcy5nZXRU
b2tlbkF0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgdmFyIHRva2VucyA9IHRo
aXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7Ci0gICAgICAgIHZhciB0b2tlbiwgYyA9IDA7
Ci0gICAgICAgIGlmIChjb2x1bW4gPT0gbnVsbCkgewotICAgICAgICAgICAgaSA9IHRva2Vucy5s
ZW5ndGggLSAxOwotICAgICAgICAgICAgYyA9IHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aDsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYyArPSB0b2tlbnNbaV0udmFsdWUubGVuZ3Ro
OwotICAgICAgICAgICAgICAgIGlmIChjID49IGNvbHVtbikKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdG9rZW4gPSB0b2tlbnNb
aV07Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
ICAgdG9rZW4uaW5kZXggPSBpOwotICAgICAgICB0b2tlbi5zdGFydCA9IGMgLSB0b2tlbi52YWx1
ZS5sZW5ndGg7Ci0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9OwotICAgIHRoaXMuc2V0VW5k
b01hbmFnZXIgPSBmdW5jdGlvbih1bmRvTWFuYWdlcikgewotICAgICAgICB0aGlzLiR1bmRvTWFu
YWdlciA9IHVuZG9NYW5hZ2VyOwotICAgICAgICB0aGlzLiRkZWx0YXMgPSBbXTsKLSAgICAgICAg
dGhpcy4kZGVsdGFzRG9jID0gW107Ci0gICAgICAgIHRoaXMuJGRlbHRhc0ZvbGQgPSBbXTsKLQot
ICAgICAgICBpZiAodGhpcy4kaW5mb3JtVW5kb01hbmFnZXIpCi0gICAgICAgICAgICB0aGlzLiRp
bmZvcm1VbmRvTWFuYWdlci5jYW5jZWwoKTsKLQotICAgICAgICBpZiAodW5kb01hbmFnZXIpIHsK
LSAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgdGhpcy4kc3luY0lu
Zm9ybVVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgc2VsZi4kaW5m
b3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2VsZi4kZGVs
dGFzRm9sZC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2go
ewotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICJmb2xkIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbHRhczogc2VsZi4kZGVsdGFzRm9sZAotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzRm9sZCA9IFtdOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChzZWxmLiRkZWx0YXNEb2MubGVuZ3RoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhcy5wdXNoKHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdyb3VwOiAiZG9jIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhczog
c2VsZi4kZGVsdGFzRG9jCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
ICAgICBzZWxmLiRkZWx0YXNEb2MgPSBbXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoc2VsZi4kZGVsdGFzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgdW5kb01hbmFnZXIuZXhlY3V0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246
ICJhY2V1cGRhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3NlbGYuJGRlbHRh
cywgc2VsZl0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlciA9IGxhbmcuZGVsYXllZENhbGwodGhpcy4kc3lu
Y0luZm9ybVVuZG9NYW5hZ2VyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0aGlzLiRkZWZh
dWx0VW5kb01hbmFnZXIgPSB7Ci0gICAgICAgIHVuZG86IGZ1bmN0aW9uKCkge30sCi0gICAgICAg
IHJlZG86IGZ1bmN0aW9uKCkge30sCi0gICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHt9Ci0gICAg
fTsKLSAgICB0aGlzLmdldFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLiR1bmRvTWFuYWdlciB8fCB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI7Ci0gICAgfTsK
LSAgICB0aGlzLmdldFRhYlN0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5n
ZXRVc2VTb2Z0VGFicygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQo
IiAiLCB0aGlzLmdldFRhYlNpemUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gIlx0IjsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5zZXRVc2VTb2Z0VGFicyA9
IGZ1bmN0aW9uKHZhbCkgewotICAgICAgICB0aGlzLnNldE9wdGlvbigidXNlU29mdFRhYnMiLCB2
YWwpOwotICAgIH07Ci0gICAgdGhpcy5nZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgcmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzOwotICAgIH07Ci0gICAgdGhpcy5zZXRUYWJT
aXplID0gZnVuY3Rpb24odGFiU2l6ZSkgewotICAgICAgICB0aGlzLnNldE9wdGlvbigidGFiU2l6
ZSIsIHRhYlNpemUpCi0gICAgfTsKLSAgICB0aGlzLmdldFRhYlNpemUgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuJHRhYlNpemU7Ci0gICAgfTsKLSAgICB0aGlzLmlzVGFiU3Rv
cCA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR1c2VTb2Z0VGFi
cyAmJiAocG9zaXRpb24uY29sdW1uICUgdGhpcy4kdGFiU2l6ZSA9PSAwKTsKLSAgICB9OwotCi0g
ICAgdGhpcy4kb3ZlcndyaXRlID0gZmFsc2U7Ci0gICAgdGhpcy5zZXRPdmVyd3JpdGUgPSBmdW5j
dGlvbihvdmVyd3JpdGUpIHsKLSAgICAgICAgaWYgKHRoaXMuJG92ZXJ3cml0ZSA9PSBvdmVyd3Jp
dGUpIHJldHVybjsKLQotICAgICAgICB0aGlzLiRvdmVyd3JpdGUgPSBvdmVyd3JpdGU7Ci0gICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZU92ZXJ3cml0ZSIpOwotICAgIH07Ci0gICAgdGhpcy5nZXRP
dmVyd3JpdGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJG92ZXJ3cml0ZTsK
LSAgICB9OwotICAgIHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHRoaXMuc2V0T3ZlcndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpOwotICAgIH07Ci0gICAgdGhpcy5h
ZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHsKLSAgICAgICAg
aWYgKCF0aGlzLiRkZWNvcmF0aW9uc1tyb3ddKQotICAgICAgICAgICAgdGhpcy4kZGVjb3JhdGlv
bnNbcm93XSA9ICIiOwotICAgICAgICB0aGlzLiRkZWNvcmF0aW9uc1tyb3ddICs9ICIgIiArIGNs
YXNzTmFtZTsKLSAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKLSAg
ICB9OwotICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xh
c3NOYW1lKSB7Ci0gICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gPSAodGhpcy4kZGVjb3Jh
dGlvbnNbcm93XSB8fCAiIikucmVwbGFjZSgiICIgKyBjbGFzc05hbWUsICIiKTsKLSAgICAgICAg
dGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0
QnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJGJyZWFrcG9p
bnRzOwotICAgIH07Ci0gICAgdGhpcy5zZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKHJvd3MpIHsK
LSAgICAgICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaT0wOyBp
PHJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd3Nb
aV1dID0gImFjZV9icmVha3BvaW50IjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9lbWl0KCJj
aGFuZ2VCcmVha3BvaW50Iiwge30pOwotICAgIH07Ci0gICAgdGhpcy5jbGVhckJyZWFrcG9pbnRz
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107Ci0gICAgICAg
IHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7Ci0gICAgfTsKLSAgICB0aGlzLnNl
dEJyZWFrcG9pbnQgPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgewotICAgICAgICBpZiAoY2xh
c3NOYW1lID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBjbGFzc05hbWUgPSAiYWNlX2JyZWFr
cG9pbnQiOwotICAgICAgICBpZiAoY2xhc3NOYW1lKQotICAgICAgICAgICAgdGhpcy4kYnJlYWtw
b2ludHNbcm93XSA9IGNsYXNzTmFtZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRl
IHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFr
cG9pbnQiLCB7fSk7Ci0gICAgfTsKLSAgICB0aGlzLmNsZWFyQnJlYWtwb2ludCA9IGZ1bmN0aW9u
KHJvdykgewotICAgICAgICBkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKLSAgICAgICAg
dGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKLSAgICB9OwotICAgIHRoaXMuYWRk
TWFya2VyID0gZnVuY3Rpb24ocmFuZ2UsIGNsYXp6LCB0eXBlLCBpbkZyb250KSB7Ci0gICAgICAg
IHZhciBpZCA9IHRoaXMuJG1hcmtlcklkKys7Ci0KLSAgICAgICAgdmFyIG1hcmtlciA9IHsKLSAg
ICAgICAgICAgIHJhbmdlIDogcmFuZ2UsCi0gICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGlu
ZSIsCi0gICAgICAgICAgICByZW5kZXJlcjogdHlwZW9mIHR5cGUgPT0gImZ1bmN0aW9uIiA/IHR5
cGUgOiBudWxsLAotICAgICAgICAgICAgY2xhenogOiBjbGF6eiwKLSAgICAgICAgICAgIGluRnJv
bnQ6ICEhaW5Gcm9udCwKLSAgICAgICAgICAgIGlkOiBpZAotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGluRnJvbnQpIHsKLSAgICAgICAgICAgIHRoaXMuJGZyb250TWFya2Vyc1tpZF0gPSBtYXJr
ZXI7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VGcm9udE1hcmtlciIpCi0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7Ci0g
ICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIikKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBpZDsKLSAgICB9OwotICAgIHRoaXMuYWRkRHluYW1pY01hcmtlciA9IGZ1
bmN0aW9uKG1hcmtlciwgaW5Gcm9udCkgewotICAgICAgICBpZiAoIW1hcmtlci51cGRhdGUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBpZCA9IHRoaXMuJG1hcmtlcklkKys7Ci0g
ICAgICAgIG1hcmtlci5pZCA9IGlkOwotICAgICAgICBtYXJrZXIuaW5Gcm9udCA9ICEhaW5Gcm9u
dDsKLQotICAgICAgICBpZiAoaW5Gcm9udCkgewotICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJr
ZXJzW2lkXSA9IG1hcmtlcjsKLSAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUZyb250TWFy
a2VyIikKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuJGJhY2tNYXJrZXJzW2lk
XSA9IG1hcmtlcjsKLSAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJhY2tNYXJrZXIiKQot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1hcmtlcjsKLSAgICB9OwotICAgIHRoaXMucmVt
b3ZlTWFya2VyID0gZnVuY3Rpb24obWFya2VySWQpIHsKLSAgICAgICAgdmFyIG1hcmtlciA9IHRo
aXMuJGZyb250TWFya2Vyc1ttYXJrZXJJZF0gfHwgdGhpcy4kYmFja01hcmtlcnNbbWFya2VySWRd
OwotICAgICAgICBpZiAoIW1hcmtlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgbWFya2VycyA9IG1hcmtlci5pbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4k
YmFja01hcmtlcnM7Ci0gICAgICAgIGlmIChtYXJrZXIpIHsKLSAgICAgICAgICAgIGRlbGV0ZSAo
bWFya2Vyc1ttYXJrZXJJZF0pOwotICAgICAgICAgICAgdGhpcy5fZW1pdChtYXJrZXIuaW5Gcm9u
dCA/ICJjaGFuZ2VGcm9udE1hcmtlciIgOiAiY2hhbmdlQmFja01hcmtlciIpOwotICAgICAgICB9
Ci0gICAgfTsKLSAgICB0aGlzLmdldE1hcmtlcnMgPSBmdW5jdGlvbihpbkZyb250KSB7Ci0gICAg
ICAgIHJldHVybiBpbkZyb250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtl
cnM7Ci0gICAgfTsKLQotICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmUpIHsKLSAgICAg
ICAgaWYgKCF0aGlzLiRzZWFyY2hIaWdobGlnaHQpIHsKLSAgICAgICAgICAgIHZhciBoaWdobGln
aHQgPSBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsICJhY2Vfc2VsZWN0ZWQtd29yZCIsICJ0ZXh0
Iik7Ci0gICAgICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQgPSB0aGlzLmFkZER5bmFtaWNN
YXJrZXIoaGlnaGxpZ2h0KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGln
aHQuc2V0UmVnZXhwKHJlKTsKLSAgICB9Ci0gICAgdGhpcy5oaWdobGlnaHRMaW5lcyA9IGZ1bmN0
aW9uKHN0YXJ0Um93LCBlbmRSb3csIGNsYXp6LCBpbkZyb250KSB7Ci0gICAgICAgIGlmICh0eXBl
b2YgZW5kUm93ICE9ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICBjbGF6eiA9IGVuZFJvdzsKLSAg
ICAgICAgICAgIGVuZFJvdyA9IHN0YXJ0Um93OwotICAgICAgICB9Ci0gICAgICAgIGlmICghY2xh
enopCi0gICAgICAgICAgICBjbGF6eiA9ICJhY2Vfc3RlcCI7Ci0gICAgICAgIAotICAgICAgICB2
YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIDAsIGVuZFJvdywgSW5maW5pdHkpOwotICAg
ICAgICByYW5nZS5pZCA9IHRoaXMuYWRkTWFya2VyKHJhbmdlLCBjbGF6eiwgImZ1bGxMaW5lIiwg
aW5Gcm9udCk7Ci0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9OwotICAgIHRoaXMuc2V0QW5u
b3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9ucykgewotICAgICAgICB0aGlzLiRhbm5vdGF0
aW9ucyA9IGFubm90YXRpb25zOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VBbm5vdGF0aW9u
Iiwge30pOwotICAgIH07Ci0gICAgdGhpcy5nZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICByZXR1cm4gdGhpcy4kYW5ub3RhdGlvbnMgfHwgW107Ci0gICAgfTsKLSAgICB0aGlz
LmNsZWFyQW5ub3RhdGlvbnMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5zZXRBbm5vdGF0
aW9ucyhbXSk7Ci0gICAgfTsKLSAgICB0aGlzLiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24odGV4
dCkgewotICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eLio/KFxyP1xuKS9tKTsKLSAg
ICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNo
WzFdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSAi
XG4iOwotICAgICAgICB9Ci0gICAgfTsKLSAgICB0aGlzLmdldFdvcmRSYW5nZSA9IGZ1bmN0aW9u
KHJvdywgY29sdW1uKSB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7Ci0K
LSAgICAgICAgdmFyIGluVG9rZW4gPSBmYWxzZTsKLSAgICAgICAgaWYgKGNvbHVtbiA+IDApCi0g
ICAgICAgICAgICBpblRva2VuID0gISFsaW5lLmNoYXJBdChjb2x1bW4gLSAxKS5tYXRjaCh0aGlz
LnRva2VuUmUpOwotCi0gICAgICAgIGlmICghaW5Ub2tlbikKLSAgICAgICAgICAgIGluVG9rZW4g
PSAhIWxpbmUuY2hhckF0KGNvbHVtbikubWF0Y2godGhpcy50b2tlblJlKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChpblRva2VuKQotICAgICAgICAgICAgdmFyIHJlID0gdGhpcy50b2tlblJlOwot
ICAgICAgICBlbHNlIGlmICgvXlxzKyQvLnRlc3QobGluZS5zbGljZShjb2x1bW4tMSwgY29sdW1u
KzEpKSkKLSAgICAgICAgICAgIHZhciByZSA9IC9ccy87Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHZhciByZSA9IHRoaXMubm9uVG9rZW5SZTsKLQotICAgICAgICB2YXIgc3RhcnQgPSBjb2x1
bW47Ci0gICAgICAgIGlmIChzdGFydCA+IDApIHsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAg
ICAgICAgICBzdGFydC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKHN0YXJ0
ID49IDAgJiYgbGluZS5jaGFyQXQoc3RhcnQpLm1hdGNoKHJlKSk7Ci0gICAgICAgICAgICBzdGFy
dCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGVuZCA9IGNvbHVtbjsKLSAgICAgICAgd2hp
bGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGVuZCkubWF0Y2gocmUpKSB7Ci0g
ICAgICAgICAgICBlbmQrKzsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXcgUmFuZ2Uo
cm93LCBzdGFydCwgcm93LCBlbmQpOwotICAgIH07Ci0gICAgdGhpcy5nZXRBV29yZFJhbmdlID0g
ZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgdmFyIHdvcmRSYW5nZSA9IHRoaXMuZ2V0
V29yZFJhbmdlKHJvdywgY29sdW1uKTsKLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUo
d29yZFJhbmdlLmVuZC5yb3cpOwotCi0gICAgICAgIHdoaWxlIChsaW5lLmNoYXJBdCh3b3JkUmFu
Z2UuZW5kLmNvbHVtbikubWF0Y2goL1sgXHRdLykpIHsKLSAgICAgICAgICAgIHdvcmRSYW5nZS5l
bmQuY29sdW1uICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHdvcmRSYW5nZTsKLSAg
ICB9OwotICAgIHRoaXMuc2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbihuZXdMaW5lTW9kZSkgewot
ICAgICAgICB0aGlzLmRvYy5zZXROZXdMaW5lTW9kZShuZXdMaW5lTW9kZSk7Ci0gICAgfTsKLSAg
ICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LmRvYy5nZXROZXdMaW5lTW9kZSgpOwotICAgIH07Ci0gICAgdGhpcy5zZXRVc2VXb3JrZXIgPSBm
dW5jdGlvbih1c2VXb3JrZXIpIHsgdGhpcy5zZXRPcHRpb24oInVzZVdvcmtlciIsIHVzZVdvcmtl
cik7IH07Ci0gICAgdGhpcy5nZXRVc2VXb3JrZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMu
JHVzZVdvcmtlcjsgfTsKLSAgICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24oZSkg
ewotICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTsKLSAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5z
dGFydChyb3dzLmZpcnN0KTsKLSAgICAgICAgdGhpcy5fZW1pdCgidG9rZW5pemVyVXBkYXRlIiwg
ZSk7Ci0gICAgfTsKLQotICAgIHRoaXMuJG1vZGVzID0ge307Ci0gICAgdGhpcy4kbW9kZSA9IG51
bGw7Ci0gICAgdGhpcy4kbW9kZUlkID0gbnVsbDsKLSAgICB0aGlzLnNldE1vZGUgPSBmdW5jdGlv
bihtb2RlKSB7Ci0gICAgICAgIGlmIChtb2RlICYmIHR5cGVvZiBtb2RlID09PSAib2JqZWN0Iikg
ewotICAgICAgICAgICAgaWYgKG1vZGUuZ2V0VG9rZW5pemVyKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLiRvbkNoYW5nZU1vZGUobW9kZSk7Ci0gICAgICAgICAgICB2YXIgb3B0aW9ucyA9
IG1vZGU7Ci0gICAgICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHBhdGggPSBtb2RlIHx8ICJhY2UvbW9kZS90ZXh0IjsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIXRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0pCi0gICAgICAg
ICAgICB0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdID0gbmV3IFRleHRNb2RlKCk7Ci0KLSAg
ICAgICAgaWYgKHRoaXMuJG1vZGVzW3BhdGhdICYmICFvcHRpb25zKQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7Ci0gICAgICAgIHRoaXMu
JG1vZGVJZCA9IHBhdGg7Ci0gICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsibW9kZSIsIHBhdGhd
LCBmdW5jdGlvbihtKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy4kbW9kZUlkICE9PSBwYXRoKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRo
XSAmJiAhb3B0aW9ucykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2Rl
KHRoaXMuJG1vZGVzW3BhdGhdKTsKLSAgICAgICAgICAgIGlmIChtICYmIG0uTW9kZSkgewotICAg
ICAgICAgICAgICAgIG0gPSBuZXcgbS5Nb2RlKG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIGlm
ICghb3B0aW9ucykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1twYXRoXSA9IG07
Ci0gICAgICAgICAgICAgICAgICAgIG0uJGlkID0gcGF0aDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VNb2RlKG0pCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0uYmluZCh0aGlzKSk7Ci0gICAgICAgIGlmICghdGhpcy4kbW9kZSkKLSAgICAgICAgICAg
IHRoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdLCB0cnVlKTsK
LSAgICB9OwotCi0gICAgdGhpcy4kb25DaGFuZ2VNb2RlID0gZnVuY3Rpb24obW9kZSwgJGlzUGxh
Y2Vob2xkZXIpIHsKLSAgICAgICAgaWYgKHRoaXMuJG1vZGUgPT09IG1vZGUpIHJldHVybjsKLSAg
ICAgICAgdGhpcy4kbW9kZSA9IG1vZGU7Ci0KLSAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOwot
Ci0gICAgICAgIGlmICh0aGlzLiR1c2VXb3JrZXIpCi0gICAgICAgICAgICB0aGlzLiRzdGFydFdv
cmtlcigpOwotCi0gICAgICAgIHZhciB0b2tlbml6ZXIgPSBtb2RlLmdldFRva2VuaXplcigpOwot
Ci0gICAgICAgIGlmKHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyICE9PSB1bmRlZmluZWQpIHsK
LSAgICAgICAgICAgIHZhciBvblJlbG9hZFRva2VuaXplciA9IHRoaXMub25SZWxvYWRUb2tlbml6
ZXIuYmluZCh0aGlzKTsKLSAgICAgICAgICAgIHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyKCJ1
cGRhdGUiLCBvblJlbG9hZFRva2VuaXplcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRo
aXMuYmdUb2tlbml6ZXIpIHsKLSAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIgPSBuZXcgQmFj
a2dyb3VuZFRva2VuaXplcih0b2tlbml6ZXIpOwotICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhp
czsKLSAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRl
IiwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIF9zZWxmLl9lbWl0KCJ0b2tlbml6ZXJV
cGRhdGUiLCBlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdGhpcy5iZ1Rva2VuaXplci5zZXRUb2tlbml6ZXIodG9rZW5pemVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgp
KTsKLQotICAgICAgICB0aGlzLnRva2VuUmUgPSBtb2RlLnRva2VuUmU7Ci0gICAgICAgIHRoaXMu
bm9uVG9rZW5SZSA9IG1vZGUubm9uVG9rZW5SZTsKLQotCi0gICAgICAgIGlmICghJGlzUGxhY2Vo
b2xkZXIpIHsKLSAgICAgICAgICAgIHRoaXMuJG1vZGVJZCA9IG1vZGUuJGlkOwotICAgICAgICAg
ICAgdGhpcy4kc2V0Rm9sZGluZyhtb2RlLmZvbGRpbmdSdWxlcyk7Ci0gICAgICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VNb2RlIik7Ci0gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnN0YXJ0
KDApOwotICAgICAgICB9Ci0gICAgfTsKLQotCi0gICAgdGhpcy4kc3RvcFdvcmtlciA9IGZ1bmN0
aW9uKCkgewotICAgICAgICBpZiAodGhpcy4kd29ya2VyKQotICAgICAgICAgICAgdGhpcy4kd29y
a2VyLnRlcm1pbmF0ZSgpOwotCi0gICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7Ci0gICAgfTsK
LQotCi0gICAgdGhpcy4kc3RhcnRXb3JrZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHR5
cGVvZiBXb3JrZXIgIT09ICJ1bmRlZmluZWQiICYmICFyZXF1aXJlLm5vV29ya2VyKSB7Ci0gICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IHRoaXMuJG1vZGUu
Y3JlYXRlV29ya2VyKHRoaXMpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKCJDb3VsZCBub3QgbG9hZCB3b3JrZXIiKTsKLSAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZyhlKTsKLSAgICAgICAgICAgICAgICB0aGlzLiR3b3JrZXIgPSBudWxs
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRo
aXMuJHdvcmtlciA9IG51bGw7Ci0gICAgfTsKLSAgICB0aGlzLmdldE1vZGUgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJG1vZGU7Ci0gICAgfTsKLQotICAgIHRoaXMuJHNjcm9s
bFRvcCA9IDA7Ci0gICAgdGhpcy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3JvbGxUb3ApIHsK
LSAgICAgICAgc2Nyb2xsVG9wID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBzY3JvbGxUb3ApKTsK
LSAgICAgICAgaWYgKHRoaXMuJHNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wIHx8IGlzTmFOKHNjcm9s
bFRvcCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy4kc2Nyb2xsVG9wID0g
c2Nyb2xsVG9wOwotICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZVNjcm9sbFRvcCIsIHNjcm9s
bFRvcCk7Ci0gICAgfTsKLSAgICB0aGlzLmdldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICByZXR1cm4gdGhpcy4kc2Nyb2xsVG9wOwotICAgIH07Ci0KLSAgICB0aGlzLiRzY3JvbGxM
ZWZ0ID0gMDsKLSAgICB0aGlzLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7
Ci0gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIHNjcm9sbExlZnQp
KTsKLSAgICAgICAgaWYgKHRoaXMuJHNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgfHwgaXNOYU4o
c2Nyb2xsTGVmdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy4kc2Nyb2xs
TGVmdCA9IHNjcm9sbExlZnQ7Ci0gICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlU2Nyb2xsTGVm
dCIsIHNjcm9sbExlZnQpOwotICAgIH07Ci0gICAgdGhpcy5nZXRTY3JvbGxMZWZ0ID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxMZWZ0OwotICAgIH07Ci0gICAgdGhp
cy5nZXRTY3JlZW5XaWR0aCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRjb21wdXRlV2lk
dGgoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg7Ci0gICAgfTsKLQotICAgIHRo
aXMuJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKGZvcmNlKSB7Ci0gICAgICAgIGlmICh0aGlzLiRt
b2RpZmllZCB8fCBmb3JjZSkgewotICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnNjcmVlbldpZHRoID0gdGhpcy4kd3JhcExpbWl0OwotCi0gICAgICAgICAgICB2
YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpOwotICAgICAgICAgICAgdmFyIGNhY2hl
ID0gdGhpcy4kcm93TGVuZ3RoQ2FjaGU7Ci0gICAgICAgICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxp
bmUgPSAwOwotICAgICAgICAgICAgdmFyIGZvbGRJbmRleCA9IDA7Ci0gICAgICAgICAgICB2YXIg
Zm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXhdOwotICAgICAgICAgICAgdmFyIGZv
bGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7Ci0gICAg
ICAgICAgICB2YXIgbGVuID0gbGluZXMubGVuZ3RoOwotCi0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPiBmb2xkU3RhcnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgaSA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5k
ZXgrK107Ci0gICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExp
bmUuc3RhcnQucm93IDogSW5maW5pdHk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKGNhY2hlW2ldID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlW2ld
ID0gdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobGluZXNbaV0pWzBdOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpCi0gICAgICAgICAgICAgICAg
ICAgIGxvbmdlc3RTY3JlZW5MaW5lID0gY2FjaGVbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7Ci0gICAgICAgIH0KLSAg
ICB9OwotICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgewotICAgICAgICByZXR1cm4g
dGhpcy5kb2MuZ2V0TGluZShyb3cpOwotICAgIH07Ci0gICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0
aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5l
cyhmaXJzdFJvdywgbGFzdFJvdyk7Ci0gICAgfTsKLSAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0
aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCk7Ci0gICAgfTsKLSAg
ICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UgfHwgdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7
Ci0gICAgfTsKLSAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLmRvYy5pbnNlcnQocG9zaXRpb24sIHRleHQpOwotICAgIH07Ci0g
ICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkgewotICAgICAgICByZXR1cm4gdGhpcy5k
b2MucmVtb3ZlKHJhbmdlKTsKLSAgICB9OwotICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlv
bihkZWx0YXMsIGRvbnRTZWxlY3QpIHsKLSAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTsKLSAgICAg
ICAgdmFyIGxhc3RVbmRvUmFuZ2UgPSBudWxsOwotICAgICAgICBmb3IgKHZhciBpID0gZGVsdGFz
Lmxlbmd0aCAtIDE7IGkgIT0gLTE7IGktLSkgewotICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVs
dGFzW2ldOwotICAgICAgICAgICAgaWYgKGRlbHRhLmdyb3VwID09ICJkb2MiKSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5kb2MucmV2ZXJ0RGVsdGFzKGRlbHRhLmRlbHRhcyk7Ci0gICAgICAgICAg
ICAgICAgbGFzdFVuZG9SYW5nZSA9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJGdldFVuZG9T
ZWxlY3Rpb24oZGVsdGEuZGVsdGFzLCB0cnVlLCBsYXN0VW5kb1JhbmdlKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVsdGEuZGVsdGFzLmZvckVhY2goZnVuY3Rpb24o
Zm9sZERlbHRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9sZHMoZm9sZERlbHRh
LmZvbGRzKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlOwotICAgICAgICBsYXN0VW5kb1Jh
bmdlICYmCi0gICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmCi0gICAgICAgICAgICAhZG9u
dFNlbGVjdCAmJgotICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2Uo
bGFzdFVuZG9SYW5nZSk7Ci0gICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOwotICAgIH07Ci0g
ICAgdGhpcy5yZWRvQ2hhbmdlcyA9IGZ1bmN0aW9uKGRlbHRhcywgZG9udFNlbGVjdCkgewotICAg
ICAgICBpZiAoIWRlbHRhcy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dGhpcy4kZnJvbVVuZG8gPSB0cnVlOwotICAgICAgICB2YXIgbGFzdFVuZG9SYW5nZSA9IG51bGw7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07Ci0gICAgICAgICAgICBpZiAoZGVsdGEuZ3Jv
dXAgPT0gImRvYyIpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmRvYy5hcHBseURlbHRhcyhkZWx0
YS5kZWx0YXMpOwotICAgICAgICAgICAgICAgIGxhc3RVbmRvUmFuZ2UgPQotICAgICAgICAgICAg
ICAgICAgICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9uKGRlbHRhLmRlbHRhcywgZmFsc2UsIGxhc3RV
bmRvUmFuZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuJGZyb21V
bmRvID0gZmFsc2U7Ci0gICAgICAgIGxhc3RVbmRvUmFuZ2UgJiYKLSAgICAgICAgICAgIHRoaXMu
JHVuZG9TZWxlY3QgJiYKLSAgICAgICAgICAgICFkb250U2VsZWN0ICYmCi0gICAgICAgICAgICB0
aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTsKLSAgICAgICAg
cmV0dXJuIGxhc3RVbmRvUmFuZ2U7Ci0gICAgfTsKLSAgICB0aGlzLnNldFVuZG9TZWxlY3QgPSBm
dW5jdGlvbihlbmFibGUpIHsKLSAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCA9IGVuYWJsZTsKLSAg
ICB9OwotCi0gICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbiA9IGZ1bmN0aW9uKGRlbHRhcywgaXNV
bmRvLCBsYXN0VW5kb1JhbmdlKSB7Ci0gICAgICAgIGZ1bmN0aW9uIGlzSW5zZXJ0KGRlbHRhKSB7
Ci0gICAgICAgICAgICB2YXIgaW5zZXJ0ID0KLSAgICAgICAgICAgICAgICBkZWx0YS5hY3Rpb24g
PT0gImluc2VydFRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMiOwotICAgICAg
ICAgICAgcmV0dXJuIGlzVW5kbyA/ICFpbnNlcnQgOiBpbnNlcnQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbMF07Ci0gICAgICAgIHZhciByYW5nZSwgcG9pbnQ7Ci0g
ICAgICAgIHZhciBsYXN0RGVsdGFJc0luc2VydCA9IGZhbHNlOwotICAgICAgICBpZiAoaXNJbnNl
cnQoZGVsdGEpKSB7Ci0gICAgICAgICAgICByYW5nZSA9IGRlbHRhLnJhbmdlLmNsb25lKCk7Ci0g
ICAgICAgICAgICBsYXN0RGVsdGFJc0luc2VydCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRl
bHRhLnJhbmdlLnN0YXJ0KTsKLSAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGRlbHRhcy5sZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgZGVsdGEgPSBkZWx0YXNbaV07Ci0gICAgICAgICAgICBpZiAo
aXNJbnNlcnQoZGVsdGEpKSB7Ci0gICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5yYW5nZS5z
dGFydDsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50
LmNvbHVtbikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZGVs
dGEucmFuZ2Uuc3RhcnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwb2lu
dCA9IGRlbHRhLnJhbmdlLmVuZDsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShw
b2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICByYW5n
ZS5zZXRFbmQoZGVsdGEucmFuZ2UuZW5kKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBwb2ludCA9IGRlbHRhLnJhbmdlLnN0YXJ0OwotICAgICAgICAgICAgICAg
IGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkgewotICAg
ICAgICAgICAgICAgICAgICByYW5nZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBSYW5nZS5m
cm9tUG9pbnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0YS5yYW5nZS5zdGFydCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhc3RVbmRvUmFuZ2UgIT0gbnVs
bCkgewotICAgICAgICAgICAgdmFyIGNtcCA9IGxhc3RVbmRvUmFuZ2UuY29tcGFyZVJhbmdlKHJh
bmdlKTsKLSAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewotICAgICAgICAgICAgICAgIHJhbmdl
LnNldFN0YXJ0KGxhc3RVbmRvUmFuZ2Uuc3RhcnQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChj
bXAgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQobGFzdFVuZG9SYW5nZS5l
bmQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJhbmdlOwot
ICAgIH07Ci0gICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UocmFuZ2UsIHRleHQpOwotICAgIH07Ci0gICAgdGhp
cy5tb3ZlVGV4dCA9IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbikgewotICAgICAgICB2
YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7Ci0gICAgICAgIHRoaXMucmVt
b3ZlKGZyb21SYW5nZSk7Ci0KLSAgICAgICAgdmFyIHRvUm93ID0gdG9Qb3NpdGlvbi5yb3c7Ci0g
ICAgICAgIHZhciB0b0NvbHVtbiA9IHRvUG9zaXRpb24uY29sdW1uOwotICAgICAgICBpZiAoIWZy
b21SYW5nZS5pc011bHRpTGluZSgpICYmIGZyb21SYW5nZS5zdGFydC5yb3cgPT0gdG9Sb3cgJiYK
LSAgICAgICAgICAgIGZyb21SYW5nZS5lbmQuY29sdW1uIDwgdG9Db2x1bW4pCi0gICAgICAgICAg
ICB0b0NvbHVtbiAtPSB0ZXh0Lmxlbmd0aDsKLQotICAgICAgICBpZiAoZnJvbVJhbmdlLmlzTXVs
dGlMaW5lKCkgJiYgZnJvbVJhbmdlLmVuZC5yb3cgPCB0b1JvdykgewotICAgICAgICAgICAgdmFy
IGxpbmVzID0gdGhpcy5kb2MuJHNwbGl0KHRleHQpOwotICAgICAgICAgICAgdG9Sb3cgLT0gbGlu
ZXMubGVuZ3RoIC0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBlbmRSb3cgPSB0b1JvdyAr
IGZyb21SYW5nZS5lbmQucm93IC0gZnJvbVJhbmdlLnN0YXJ0LnJvdzsKLSAgICAgICAgdmFyIGVu
ZENvbHVtbiA9IGZyb21SYW5nZS5pc011bHRpTGluZSgpID8KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZyb21SYW5nZS5lbmQuY29sdW1uIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvQ29s
dW1uICsgZnJvbVJhbmdlLmVuZC5jb2x1bW4gLSBmcm9tUmFuZ2Uuc3RhcnQuY29sdW1uOwotCi0g
ICAgICAgIHZhciB0b1JhbmdlID0gbmV3IFJhbmdlKHRvUm93LCB0b0NvbHVtbiwgZW5kUm93LCBl
bmRDb2x1bW4pOwotCi0gICAgICAgIHRoaXMuaW5zZXJ0KHRvUmFuZ2Uuc3RhcnQsIHRleHQpOwot
Ci0gICAgICAgIHJldHVybiB0b1JhbmdlOwotICAgIH07Ci0gICAgdGhpcy5pbmRlbnRSb3dzID0g
ZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgaW5kZW50U3RyaW5nKSB7Ci0gICAgICAgIGluZGVu
dFN0cmluZyA9IGluZGVudFN0cmluZy5yZXBsYWNlKC9cdC9nLCB0aGlzLmdldFRhYlN0cmluZygp
KTsKLSAgICAgICAgZm9yICh2YXIgcm93PXN0YXJ0Um93OyByb3c8PWVuZFJvdzsgcm93KyspCi0g
ICAgICAgICAgICB0aGlzLmluc2VydCh7cm93OiByb3csIGNvbHVtbjowfSwgaW5kZW50U3RyaW5n
KTsKLSAgICB9OwotICAgIHRoaXMub3V0ZGVudFJvd3MgPSBmdW5jdGlvbiAocmFuZ2UpIHsKLSAg
ICAgICAgdmFyIHJvd1JhbmdlID0gcmFuZ2UuY29sbGFwc2VSb3dzKCk7Ci0gICAgICAgIHZhciBk
ZWxldGVSYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCAwLCAwKTsKLSAgICAgICAgdmFyIHNpemUgPSB0
aGlzLmdldFRhYlNpemUoKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gcm93UmFuZ2Uuc3RhcnQu
cm93OyBpIDw9IHJvd1JhbmdlLmVuZC5yb3c7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmUg
PSB0aGlzLmdldExpbmUoaSk7Ci0KLSAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9
IGk7Ci0gICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQucm93ID0gaTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgKytqKQotICAgICAgICAgICAgICAgIGlmIChsaW5lLmNo
YXJBdChqKSAhPSAnICcpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKGogPCBzaXplICYmIGxpbmUuY2hhckF0KGopID09ICdcdCcpIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSBqOwotICAgICAgICAgICAgICAgIGRlbGV0ZVJh
bmdlLmVuZC5jb2x1bW4gPSBqICsgMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICBkZWxl
dGVSYW5nZS5lbmQuY29sdW1uID0gajsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMu
cmVtb3ZlKGRlbGV0ZVJhbmdlKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5tb3ZlTGlu
ZXNVcCA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7Ci0gICAgICAgIGlmIChmaXJzdFJv
dyA8PSAwKSByZXR1cm4gMDsKLQotICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuZG9jLnJlbW92
ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKLSAgICAgICAgdGhpcy5kb2MuaW5zZXJ0TGluZXMo
Zmlyc3RSb3cgLSAxLCByZW1vdmVkKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH07Ci0gICAg
dGhpcy5tb3ZlTGluZXNEb3duID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKLSAgICAg
ICAgaWYgKGxhc3RSb3cgPj0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkgcmV0dXJuIDA7Ci0KLSAg
ICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLmRvYy5yZW1vdmVMaW5lcyhmaXJzdFJvdywgbGFzdFJv
dyk7Ci0gICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0Um93KzEsIHJlbW92ZWQpOwot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9OwotICAgIHRoaXMuZHVwbGljYXRlTGluZXMgPSBmdW5j
dGlvbihmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAgICB2YXIgZmlyc3RSb3cgPSB0aGlzLiRj
bGlwUm93VG9Eb2N1bWVudChmaXJzdFJvdyk7Ci0gICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4k
Y2xpcFJvd1RvRG9jdW1lbnQobGFzdFJvdyk7Ci0KLSAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5n
ZXRMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7Ci0gICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVz
KGZpcnN0Um93LCBsaW5lcyk7Ci0KLSAgICAgICAgdmFyIGFkZGVkUm93cyA9IGxhc3RSb3cgLSBm
aXJzdFJvdyArIDE7Ci0gICAgICAgIHJldHVybiBhZGRlZFJvd3M7Ci0gICAgfTsKLQotCi0gICAg
dGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3cpIHsKLSAgICAgICAgcmV0dXJu
IE1hdGgubWF4KDAsIE1hdGgubWluKHJvdywgdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkpOwotICAg
IH07Ci0KLSAgICB0aGlzLiRjbGlwQ29sdW1uVG9Sb3cgPSBmdW5jdGlvbihyb3csIGNvbHVtbikg
ewotICAgICAgICBpZiAoY29sdW1uIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTsK
LSAgICB9OwotCi0KLSAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4pIHsKLSAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1uKTsKLQot
ICAgICAgICBpZiAocm93IDwgMCkgewotICAgICAgICAgICAgcm93ID0gMDsKLSAgICAgICAgICAg
IGNvbHVtbiA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbGVuID0gdGhp
cy5kb2MuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAocm93ID49IGxlbikgewotICAgICAg
ICAgICAgICAgIHJvdyA9IGxlbiAtIDE7Ci0gICAgICAgICAgICAgICAgY29sdW1uID0gdGhpcy5k
b2MuZ2V0TGluZShsZW4tMSkubGVuZ3RoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBjb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvYy5nZXRMaW5lKHJvdykubGVuZ3RoLCBj
b2x1bW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgIHJvdzogcm93LAotICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4KLSAgICAgICAg
fTsKLSAgICB9OwotCi0gICAgdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJh
bmdlKSB7Ci0gICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPCAwKSB7Ci0gICAgICAgICAgICBy
YW5nZS5zdGFydC5yb3cgPSAwOwotICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHRoaXMu
JGNsaXBDb2x1bW5Ub1JvdygKLSAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5yb3csCi0gICAg
ICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uCi0gICAgICAgICAgICApOwotICAgICAgICB9
Ci0KLSAgICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpIC0gMTsKLSAgICAgICAg
aWYgKHJhbmdlLmVuZC5yb3cgPiBsZW4pIHsKLSAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSBs
ZW47Ci0gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdGhpcy5kb2MuZ2V0TGluZShsZW4p
Lmxlbmd0aDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4g
PSB0aGlzLiRjbGlwQ29sdW1uVG9Sb3coCi0gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdywK
LSAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uCi0gICAgICAgICAgICApOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9OwotICAgIHRoaXMuJHdyYXBMaW1pdCA9
IDgwOwotICAgIHRoaXMuJHVzZVdyYXBNb2RlID0gZmFsc2U7Ci0gICAgdGhpcy4kd3JhcExpbWl0
UmFuZ2UgPSB7Ci0gICAgICAgIG1pbiA6IG51bGwsCi0gICAgICAgIG1heCA6IG51bGwKLSAgICB9
OwotICAgIHRoaXMuc2V0VXNlV3JhcE1vZGUgPSBmdW5jdGlvbih1c2VXcmFwTW9kZSkgewotICAg
ICAgICBpZiAodXNlV3JhcE1vZGUgIT0gdGhpcy4kdXNlV3JhcE1vZGUpIHsKLSAgICAgICAgICAg
IHRoaXMuJHVzZVdyYXBNb2RlID0gdXNlV3JhcE1vZGU7Ci0gICAgICAgICAgICB0aGlzLiRtb2Rp
ZmllZCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApOwotICAgICAg
ICAgICAgaWYgKHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMu
Z2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuJHdyYXBEYXRhLnB1c2goW10pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCBsZW4gLSAxKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlV3JhcE1vZGUiKTsKLSAgICAgICAg
fQotICAgIH07Ci0gICAgdGhpcy5nZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGU7Ci0gICAgfTsKLSAgICB0aGlzLnNldFdyYXBMaW1p
dFJhbmdlID0gZnVuY3Rpb24obWluLCBtYXgpIHsKLSAgICAgICAgaWYgKHRoaXMuJHdyYXBMaW1p
dFJhbmdlLm1pbiAhPT0gbWluIHx8IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCAhPT0gbWF4KSB7
Ci0gICAgICAgICAgICB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4gPSBtaW47Ci0gICAgICAgICAg
ICB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXggPSBtYXg7Ci0gICAgICAgICAgICB0aGlzLiRtb2Rp
ZmllZCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTW9kZSIpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRoaXMuJGZpeGVkR3V0dGVyV2lkdGggPSBmYWxzZTsK
LSAgICB0aGlzLnNldEZpeGVkR3V0dGVyV2lkdGggPSBmdW5jdGlvbihmaXhlZEd1dHRlcldpZHRo
KSB7Ci0gICAgICAgIHRoaXMuJGZpeGVkR3V0dGVyV2lkdGggPSBmaXhlZEd1dHRlcldpZHRoOwot
ICAgIH0KLQotICAgIHRoaXMuZ2V0Rml4ZWRHdXR0ZXJXaWR0aCA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICByZXR1cm4gdGhpcy4kZml4ZWRHdXR0ZXJXaWR0aDsKLSAgICB9Ci0gICAgdGhpcy5hZGp1
c3RXcmFwTGltaXQgPSBmdW5jdGlvbihkZXNpcmVkTGltaXQpIHsKLSAgICAgICAgdmFyIHdyYXBM
aW1pdCA9IHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdChkZXNpcmVkTGltaXQpOwotICAgICAgICBp
ZiAod3JhcExpbWl0ICE9IHRoaXMuJHdyYXBMaW1pdCAmJiB3cmFwTGltaXQgPiAwKSB7Ci0gICAg
ICAgICAgICB0aGlzLiR3cmFwTGltaXQgPSB3cmFwTGltaXQ7Ci0gICAgICAgICAgICB0aGlzLiRt
b2RpZmllZCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCB0aGlzLmdldExlbmd0aCgpIC0g
MSk7Ci0gICAgICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTGltaXQiKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9OwotCi0gICAgdGhpcy4kY29uc3RyYWluV3JhcExpbWl0ID0gZnVuY3Rpb24od3JhcExpbWl0
KSB7Ci0gICAgICAgIHZhciBtaW4gPSB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW47Ci0gICAgICAg
IGlmIChtaW4pCi0gICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1heChtaW4sIHdyYXBMaW1p
dCk7Ci0KLSAgICAgICAgdmFyIG1heCA9IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heDsKLSAgICAg
ICAgaWYgKG1heCkKLSAgICAgICAgICAgIHdyYXBMaW1pdCA9IE1hdGgubWluKG1heCwgd3JhcExp
bWl0KTsKLSAgICAgICAgcmV0dXJuIE1hdGgubWF4KDEsIHdyYXBMaW1pdCk7Ci0gICAgfTsKLSAg
ICB0aGlzLmdldFdyYXBMaW1pdCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4k
d3JhcExpbWl0OwotICAgIH07Ci0gICAgdGhpcy5nZXRXcmFwTGltaXRSYW5nZSA9IGZ1bmN0aW9u
KCkgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgbWluIDogdGhpcy4kd3JhcExpbWl0
UmFuZ2UubWluLAotICAgICAgICAgICAgbWF4IDogdGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4Ci0g
ICAgICAgIH07Ci0gICAgfTsKLQotICAgIHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdl
ID0gZnVuY3Rpb24oZSkgewotICAgICAgICB2YXIgdXNlV3JhcE1vZGUgPSB0aGlzLiR1c2VXcmFw
TW9kZTsKLSAgICAgICAgdmFyIGxlbjsKLSAgICAgICAgdmFyIGFjdGlvbiA9IGUuZGF0YS5hY3Rp
b247Ci0gICAgICAgIHZhciBmaXJzdFJvdyA9IGUuZGF0YS5yYW5nZS5zdGFydC5yb3c7Ci0gICAg
ICAgIHZhciBsYXN0Um93ID0gZS5kYXRhLnJhbmdlLmVuZC5yb3c7Ci0gICAgICAgIHZhciBzdGFy
dCA9IGUuZGF0YS5yYW5nZS5zdGFydDsKLSAgICAgICAgdmFyIGVuZCA9IGUuZGF0YS5yYW5nZS5l
bmQ7Ci0gICAgICAgIHZhciByZW1vdmVkRm9sZHMgPSBudWxsOwotCi0gICAgICAgIGlmIChhY3Rp
b24uaW5kZXhPZigiTGluZXMiKSAhPSAtMSkgewotICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSAi
aW5zZXJ0TGluZXMiKSB7Ci0gICAgICAgICAgICAgICAgbGFzdFJvdyA9IGZpcnN0Um93ICsgKGUu
ZGF0YS5saW5lcy5sZW5ndGgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBsYXN0Um93ID0gZmlyc3RSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW4gPSBl
LmRhdGEubGluZXMgPyBlLmRhdGEubGluZXMubGVuZ3RoIDogbGFzdFJvdyAtIGZpcnN0Um93Owot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGVuID0gbGFzdFJvdyAtIGZpcnN0Um93Owot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoYWN0
aW9uLmluZGV4T2YoInJlbW92ZSIpICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgdGhpc1t1c2VX
cmFwTW9kZSA/ICIkd3JhcERhdGEiIDogIiRyb3dMZW5ndGhDYWNoZSJdLnNwbGljZShmaXJzdFJv
dywgbGVuKTsKLQotICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0
YTsKLSAgICAgICAgICAgICAgICByZW1vdmVkRm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShl
LmRhdGEucmFuZ2UpOwotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZHMocmVtb3ZlZEZv
bGRzKTsKLQotICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUo
ZW5kLnJvdyk7Ci0gICAgICAgICAgICAgICAgdmFyIGlkeCA9IDA7Ci0gICAgICAgICAgICAgICAg
aWYgKGZvbGRMaW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNo
YXJzKGVuZC5yb3csIGVuZC5jb2x1bW4sIHN0YXJ0LmNvbHVtbiAtIGVuZC5jb2x1bW4pOwotICAg
ICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTsKLQotICAgICAgICAgICAg
ICAgICAgICB2YXIgZm9sZExpbmVCZWZvcmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lQmVmb3JlICYmIGZvbGRMaW5lQmVmb3Jl
ICE9PSBmb2xkTGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmVCZWZvcmUu
bWVyZ2UoZm9sZExpbmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xk
TGluZUJlZm9yZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp
ZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgr
KykgewotICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBlbmQucm93KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGxh
c3RSb3cgPSBmaXJzdFJvdzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGFyZ3M7Ci0gICAgICAgICAgICAgICAgaWYgKHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFyZ3MgPSBbZmlyc3RSb3csIDBdOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzLnB1c2goW10pOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLiR3cmFwRGF0YS5zcGxpY2UuYXBwbHkodGhpcy4kd3JhcERhdGEsIGFyZ3MpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBBcnJh
eShsZW4pOwotICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDApOwot
ICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZS5zcGxpY2UuYXBwbHkodGhp
cy4kcm93TGVuZ3RoQ2FjaGUsIGFyZ3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7Ci0gICAgICAgICAgICAgICAgdmFy
IGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7Ci0gICAgICAgICAgICAgICAg
dmFyIGlkeCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBjbXAgPSBmb2xkTGluZS5yYW5nZS5jb21wYXJlSW5zaWRlKHN0YXJ0LnJv
dywgc3RhcnQuY29sdW1uKQotICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmUuc3BsaXQoc3RhcnQucm93
LCBzdGFydC5jb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRS
b3cobGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJz
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBz
dGFydC5jb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNtcCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUu
YWRkUmVtb3ZlQ2hhcnMoZmlyc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhP
Zihmb2xkTGluZSkgKyAxOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZv
ciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBmaXJzdFJvdykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGxlbiA9IE1hdGguYWJzKGUuZGF0YS5yYW5nZS5zdGFydC5jb2x1bW4gLSBlLmRhdGEucmFu
Z2UuZW5kLmNvbHVtbik7Ci0gICAgICAgICAgICBpZiAoYWN0aW9uLmluZGV4T2YoInJlbW92ZSIp
ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0lu
UmFuZ2UoZS5kYXRhLnJhbmdlKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJl
bW92ZWRGb2xkcyk7Ci0KLSAgICAgICAgICAgICAgICBsZW4gPSAtbGVuOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7
Ci0gICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKLSAgICAgICAgICAgICAgICBmb2xkTGluZS5h
ZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgc3RhcnQuY29sdW1uLCBsZW4pOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZVdyYXBNb2RlICYmIHRoaXMuJHdyYXBEYXRh
Lmxlbmd0aCAhPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSkgewotICAgICAgICAgICAgY29uc29sZS5l
cnJvcigiZG9jLmdldExlbmd0aCgpIGFuZCAkd3JhcERhdGEubGVuZ3RoIGhhdmUgdG8gYmUgdGhl
IHNhbWUhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXNlV3JhcE1vZGUpCi0gICAgICAg
ICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YShmaXJzdFJvdywgbGFzdFJvdyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKGZpcnN0Um93LCBsYXN0
Um93KTsKLQotICAgICAgICByZXR1cm4gcmVtb3ZlZEZvbGRzOwotICAgIH07Ci0KLSAgICB0aGlz
LiR1cGRhdGVSb3dMZW5ndGhDYWNoZSA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93LCBiKSB7
Ci0gICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlW2ZpcnN0Um93XSA9IG51bGw7Ci0gICAgICAg
IHRoaXMuJHJvd0xlbmd0aENhY2hlW2xhc3RSb3ddID0gbnVsbDsKLSAgICB9OwotCi0gICAgdGhp
cy4kdXBkYXRlV3JhcERhdGEgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAg
ICB2YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpOwotICAgICAgICB2YXIgdGFiU2l6
ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgpOwotICAgICAgICB2YXIgd3JhcERhdGEgPSB0aGlzLiR3cmFw
RGF0YTsKLSAgICAgICAgdmFyIHdyYXBMaW1pdCA9IHRoaXMuJHdyYXBMaW1pdDsKLSAgICAgICAg
dmFyIHRva2VuczsKLSAgICAgICAgdmFyIGZvbGRMaW5lOwotCi0gICAgICAgIHZhciByb3cgPSBm
aXJzdFJvdzsKLSAgICAgICAgbGFzdFJvdyA9IE1hdGgubWluKGxhc3RSb3csIGxpbmVzLmxlbmd0
aCAtIDEpOwotICAgICAgICB3aGlsZSAocm93IDw9IGxhc3RSb3cpIHsKLSAgICAgICAgICAgIGZv
bGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKLSAgICAgICAgICAgIGlm
ICghZm9sZExpbmUpIHsKLSAgICAgICAgICAgICAgICB0b2tlbnMgPSB0aGlzLiRnZXREaXNwbGF5
VG9rZW5zKGxhbmcuc3RyaW5nVHJpbVJpZ2h0KGxpbmVzW3Jvd10pKTsKLSAgICAgICAgICAgICAg
ICB3cmFwRGF0YVtyb3ddID0gdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGlt
aXQsIHRhYlNpemUpOwotICAgICAgICAgICAgICAgIHJvdyArKzsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdG9rZW5zID0gW107Ci0gICAgICAgICAgICAgICAgZm9sZExp
bmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3YWxrVG9rZW5zOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIsIHRva2Vucy5sZW5n
dGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNbMF0gPSBQTEFDRUhP
TERFUl9TVEFSVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsg
aSA8IHdhbGtUb2tlbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2Fsa1Rva2Vuc1tpXSA9IFBMQUNFSE9MREVSX0JPRFk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbcm93XS5zdWJzdHJpbmcobGFz
dENvbHVtbiwgY29sdW1uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5z
Lmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbnMgPSB0b2tlbnMuY29uY2F0KHdhbGtUb2tlbnMpOwotICAgICAgICAgICAgICAg
ICAgICB9LmJpbmQodGhpcyksCi0gICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5yb3cs
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzW2ZvbGRMaW5lLmVuZC5yb3ddLmxlbmd0aCArIDEK
LSAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3Ro
ICE9IDAgJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA+PSBTUEFDRSkKLSAgICAgICAgICAg
ICAgICAgICAgdG9rZW5zLnBvcCgpOwotCi0gICAgICAgICAgICAgICAgd3JhcERhdGFbZm9sZExp
bmUuc3RhcnQucm93XQotICAgICAgICAgICAgICAgICAgICA9IHRoaXMuJGNvbXB1dGVXcmFwU3Bs
aXRzKHRva2Vucywgd3JhcExpbWl0LCB0YWJTaXplKTsKLSAgICAgICAgICAgICAgICByb3cgPSBm
b2xkTGluZS5lbmQucm93ICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0g
ICAgdmFyIENIQVIgPSAxLAotICAgICAgICBDSEFSX0VYVCA9IDIsCi0gICAgICAgIFBMQUNFSE9M
REVSX1NUQVJUID0gMywKLSAgICAgICAgUExBQ0VIT0xERVJfQk9EWSA9ICA0LAotICAgICAgICBQ
VU5DVFVBVElPTiA9IDksCi0gICAgICAgIFNQQUNFID0gMTAsCi0gICAgICAgIFRBQiA9IDExLAot
ICAgICAgICBUQUJfU1BBQ0UgPSAxMjsKLQotCi0gICAgdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHMg
PSBmdW5jdGlvbih0b2tlbnMsIHdyYXBMaW1pdCkgewotICAgICAgICBpZiAodG9rZW5zLmxlbmd0
aCA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgc3BsaXRzID0gW107Ci0gICAgICAgIHZhciBkaXNwbGF5TGVuZ3RoID0gdG9rZW5zLmxlbmd0
aDsKLSAgICAgICAgdmFyIGxhc3RTcGxpdCA9IDAsIGxhc3REb2NTcGxpdCA9IDA7Ci0KLSAgICAg
ICAgZnVuY3Rpb24gYWRkU3BsaXQoc2NyZWVuUG9zKSB7Ci0gICAgICAgICAgICB2YXIgZGlzcGxh
eWVkID0gdG9rZW5zLnNsaWNlKGxhc3RTcGxpdCwgc2NyZWVuUG9zKTsKLSAgICAgICAgICAgIHZh
ciBsZW4gPSBkaXNwbGF5ZWQubGVuZ3RoOwotICAgICAgICAgICAgZGlzcGxheWVkLmpvaW4oIiIp
LgotICAgICAgICAgICAgICAgIHJlcGxhY2UoLzEyL2csIGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICBsZW4gLT0gMTsKLSAgICAgICAgICAgICAgICB9KS4KLSAgICAgICAgICAgICAg
ICByZXBsYWNlKC8yL2csIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBsZW4gLT0g
MTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgbGFzdERvY1NwbGl0ICs9IGxl
bjsKLSAgICAgICAgICAgIHNwbGl0cy5wdXNoKGxhc3REb2NTcGxpdCk7Ci0gICAgICAgICAgICBs
YXN0U3BsaXQgPSBzY3JlZW5Qb3M7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoZGlzcGxh
eUxlbmd0aCAtIGxhc3RTcGxpdCA+IHdyYXBMaW1pdCkgewotICAgICAgICAgICAgdmFyIHNwbGl0
ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0OwotICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0g
Pj0gU1BBQ0UpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW5zW3NwbGl0XSA+PSBTUEFD
RSkgewotICAgICAgICAgICAgICAgICAgICBzcGxpdCArKzsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VI
T0xERVJfU1RBUlQKLSAgICAgICAgICAgICAgICB8fCB0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9M
REVSX0JPRFkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChzcGxpdDsgc3Bs
aXQgIT0gbGFzdFNwbGl0IC0gMTsgc3BsaXQtLSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
dG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9TVEFSVCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKHNwbGl0ID4gbGFzdFNwbGl0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGFkZFNwbGl0KHNwbGl0KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExp
bWl0OwotICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0IDwgdG9rZW5zLmxlbmd0aDsg
c3BsaXQrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSAhPSBQTEFD
RUhPTERFUl9CT0RZKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoc3BsaXQgPT0gdG9rZW5zLmxlbmd0aCkgewotICAgICAgICAgICAg
ICAgICAgICBicmVhazsgIC8vIEJyZWFrcyB0aGUgd2hpbGUtbG9vcC4KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1pblNwbGl0ID0gTWF0aC5t
YXgoc3BsaXQgLSAxMCwgbGFzdFNwbGl0IC0gMSk7Ci0gICAgICAgICAgICB3aGlsZSAoc3BsaXQg
PiBtaW5TcGxpdCAmJiB0b2tlbnNbc3BsaXRdIDwgUExBQ0VIT0xERVJfU1RBUlQpIHsKLSAgICAg
ICAgICAgICAgICBzcGxpdCAtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChz
cGxpdCA+IG1pblNwbGl0ICYmIHRva2Vuc1tzcGxpdF0gPT0gUFVOQ1RVQVRJT04pIHsKLSAgICAg
ICAgICAgICAgICBzcGxpdCAtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcGxp
dCA+IG1pblNwbGl0KSB7Ci0gICAgICAgICAgICAgICAgYWRkU3BsaXQoKytzcGxpdCk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcGxpdCA9
IGxhc3RTcGxpdCArIHdyYXBMaW1pdDsKLSAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gc3BsaXRzOwotICAgIH07Ci0gICAgdGhpcy4kZ2V0RGlz
cGxheVRva2VucyA9IGZ1bmN0aW9uKHN0ciwgb2Zmc2V0KSB7Ci0gICAgICAgIHZhciBhcnIgPSBb
XTsKLSAgICAgICAgdmFyIHRhYlNpemU7Ci0gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwOwot
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOwotICAgICAgICAgICAgaWYgKGMgPT0gOSkg
ewotICAgICAgICAgICAgICAgIHRhYlNpemUgPSB0aGlzLmdldFNjcmVlblRhYlNpemUoYXJyLmxl
bmd0aCArIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYXJyLnB1c2goVEFCKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHRhYlNpemU7IG4rKykgewotICAgICAgICAgICAg
ICAgICAgICBhcnIucHVzaChUQUJfU1BBQ0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMzIpIHsKLSAgICAgICAgICAgICAgICBh
cnIucHVzaChTUEFDRSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYoKGMgPiAzOSAmJiBjIDwgNDgp
IHx8IChjID4gNTcgJiYgYyA8IDY0KSkgewotICAgICAgICAgICAgICAgIGFyci5wdXNoKFBVTkNU
VUFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMTAw
ICYmIGlzRnVsbFdpZHRoKGMpKSB7Ci0gICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUiwgQ0hB
Ul9FWFQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhcnIucHVzaChD
SEFSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXJyOwotICAg
IH07Ci0gICAgdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGggPSBmdW5jdGlvbihzdHIsIG1heFNj
cmVlbkNvbHVtbiwgc2NyZWVuQ29sdW1uKSB7Ci0gICAgICAgIGlmIChtYXhTY3JlZW5Db2x1bW4g
PT0gMCkKLSAgICAgICAgICAgIHJldHVybiBbMCwgMF07Ci0gICAgICAgIGlmIChtYXhTY3JlZW5D
b2x1bW4gPT0gbnVsbCkKLSAgICAgICAgICAgIG1heFNjcmVlbkNvbHVtbiA9IEluZmluaXR5Owot
ICAgICAgICBzY3JlZW5Db2x1bW4gPSBzY3JlZW5Db2x1bW4gfHwgMDsKLQotICAgICAgICB2YXIg
YywgY29sdW1uOwotICAgICAgICBmb3IgKGNvbHVtbiA9IDA7IGNvbHVtbiA8IHN0ci5sZW5ndGg7
IGNvbHVtbisrKSB7Ci0gICAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoY29sdW1uKTsKLSAg
ICAgICAgICAgIGlmIChjID09IDkpIHsKLSAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0g
dGhpcy5nZXRTY3JlZW5UYWJTaXplKHNjcmVlbkNvbHVtbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1bGxXaWR0aChjKSkgewotICAgICAg
ICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChzY3JlZW5Db2x1bW4gPiBtYXhTY3JlZW5Db2x1bW4pIHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBbc2NyZWVu
Q29sdW1uLCBjb2x1bW5dOwotICAgIH07Ci0gICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlv
bihyb3cpIHsKLSAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSB8fCAhdGhpcy4kd3JhcERh
dGFbcm93XSkgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxOwotICAgICAgICB9
Ci0gICAgfTsKLSAgICB0aGlzLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4gPSBmdW5jdGlvbihzY3Jl
ZW5Sb3cpIHsKLSAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9u
KHNjcmVlblJvdywgTnVtYmVyLk1BWF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvY3Vt
ZW50VG9TY3JlZW5Db2x1bW4ocG9zLnJvdywgcG9zLmNvbHVtbik7Ci0gICAgfTsKLSAgICB0aGlz
LmdldERvY3VtZW50TGFzdFJvd0NvbHVtbiA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7
Ci0gICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3coZG9jUm93
LCBkb2NDb2x1bW4pOwotICAgICAgICByZXR1cm4gdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1u
KHNjcmVlblJvdyk7Ci0gICAgfTsKLSAgICB0aGlzLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBv
c2l0aW9uID0gZnVuY3Rpb24oZG9jUm93LCBkb2NDb2x1bW4pIHsKLSAgICAgICAgdmFyIHNjcmVl
blJvdyA9IHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhkb2NSb3csIGRvY0NvbHVtbik7Ci0gICAg
ICAgIHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJl
ci5NQVhfVkFMVUUgLyAxMCk7Ci0gICAgfTsKLSAgICB0aGlzLmdldFJvd1NwbGl0RGF0YSA9IGZ1
bmN0aW9uKHJvdykgewotICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd107Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMuZ2V0
U2NyZWVuVGFiU2l6ZSA9IGZ1bmN0aW9uKHNjcmVlbkNvbHVtbikgewotICAgICAgICByZXR1cm4g
dGhpcy4kdGFiU2l6ZSAtIHNjcmVlbkNvbHVtbiAlIHRoaXMuJHRhYlNpemU7Ci0gICAgfTsKLQot
Ci0gICAgdGhpcy5zY3JlZW5Ub0RvY3VtZW50Um93ID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3Jl
ZW5Db2x1bW4pIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9u
KHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKS5yb3c7Ci0gICAgfTsKLQotCi0gICAgdGhpcy5zY3Jl
ZW5Ub0RvY3VtZW50Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywg
c2NyZWVuQ29sdW1uKS5jb2x1bW47Ci0gICAgfTsKLSAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRQ
b3NpdGlvbiA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7Ci0gICAgICAgIGlm
IChzY3JlZW5Sb3cgPCAwKQotICAgICAgICAgICAgcmV0dXJuIHtyb3c6IDAsIGNvbHVtbjogMH07
Ci0KLSAgICAgICAgdmFyIGxpbmU7Ci0gICAgICAgIHZhciBkb2NSb3cgPSAwOwotICAgICAgICB2
YXIgZG9jQ29sdW1uID0gMDsKLSAgICAgICAgdmFyIGNvbHVtbjsKLSAgICAgICAgdmFyIHJvdyA9
IDA7Ci0gICAgICAgIHZhciByb3dMZW5ndGggPSAwOwotCi0gICAgICAgIHZhciByb3dDYWNoZSA9
IHRoaXMuJHNjcmVlblJvd0NhY2hlOwotICAgICAgICB2YXIgaSA9IHRoaXMuJGdldFJvd0NhY2hl
SW5kZXgocm93Q2FjaGUsIHNjcmVlblJvdyk7Ci0gICAgICAgIHZhciBsID0gcm93Q2FjaGUubGVu
Z3RoOwotICAgICAgICBpZiAobCAmJiBpID49IDApIHsKLSAgICAgICAgICAgIHZhciByb3cgPSBy
b3dDYWNoZVtpXTsKLSAgICAgICAgICAgIHZhciBkb2NSb3cgPSB0aGlzLiRkb2NSb3dDYWNoZVtp
XTsKLSAgICAgICAgICAgIHZhciBkb0NhY2hlID0gc2NyZWVuUm93ID4gcm93Q2FjaGVbbCAtIDFd
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSAhbDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBtYXhSb3cgPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKLSAgICAg
ICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUoZG9jUm93KTsKLSAgICAgICAg
dmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7
Ci0KLSAgICAgICAgd2hpbGUgKHJvdyA8PSBzY3JlZW5Sb3cpIHsKLSAgICAgICAgICAgIHJvd0xl
bmd0aCA9IHRoaXMuZ2V0Um93TGVuZ3RoKGRvY1Jvdyk7Ci0gICAgICAgICAgICBpZiAocm93ICsg
cm93TGVuZ3RoIC0gMSA+PSBzY3JlZW5Sb3cgfHwgZG9jUm93ID49IG1heFJvdykgewotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBy
b3cgKz0gcm93TGVuZ3RoOwotICAgICAgICAgICAgICAgIGRvY1JvdysrOwotICAgICAgICAgICAg
ICAgIGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jUm93
ID0gZm9sZExpbmUuZW5kLnJvdysxOwotICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRo
aXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUpOwotICAgICAgICAgICAgICAgICAg
ICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5Owot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGRvQ2FjaGUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNo
KGRvY1Jvdyk7Ci0gICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyb3cp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvbGRMaW5lICYmIGZv
bGRMaW5lLnN0YXJ0LnJvdyA8PSBkb2NSb3cpIHsKLSAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdl
dEZvbGREaXNwbGF5TGluZShmb2xkTGluZSk7Ci0gICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGlu
ZS5zdGFydC5yb3c7Ci0gICAgICAgIH0gZWxzZSBpZiAocm93ICsgcm93TGVuZ3RoIDw9IHNjcmVl
blJvdyB8fCBkb2NSb3cgPiBtYXhSb3cpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgcm93OiBtYXhSb3csCi0gICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmdldExp
bmUobWF4Um93KS5sZW5ndGgKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGxpbmUgPSB0aGlzLmdldExpbmUoZG9jUm93KTsKLSAgICAgICAgICAgIGZvbGRMaW5l
ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgewot
ICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuJHdyYXBEYXRhW2RvY1Jvd107Ci0gICAgICAg
ICAgICBpZiAoc3BsaXRzKSB7Ci0gICAgICAgICAgICAgICAgY29sdW1uID0gc3BsaXRzW3NjcmVl
blJvdyAtIHJvd107Ci0gICAgICAgICAgICAgICAgaWYoc2NyZWVuUm93ID4gcm93ICYmIHNwbGl0
cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jQ29sdW1uID0gc3BsaXRzW3NjcmVl
blJvdyAtIHJvdyAtIDFdIHx8IHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGRvY0NvbHVtbiArPSB0
aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChsaW5lLCBzY3JlZW5Db2x1bW4pWzFdOwotICAgICAg
ICBpZiAodGhpcy4kdXNlV3JhcE1vZGUgJiYgZG9jQ29sdW1uID49IGNvbHVtbikKLSAgICAgICAg
ICAgIGRvY0NvbHVtbiA9IGNvbHVtbiAtIDE7Ci0KLSAgICAgICAgaWYgKGZvbGRMaW5lKQotICAg
ICAgICAgICAgcmV0dXJuIGZvbGRMaW5lLmlkeFRvUG9zaXRpb24oZG9jQ29sdW1uKTsKLQotICAg
ICAgICByZXR1cm4ge3JvdzogZG9jUm93LCBjb2x1bW46IGRvY0NvbHVtbn07Ci0gICAgfTsKLSAg
ICB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbiA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29s
dW1uKSB7Ci0gICAgICAgIGlmICh0eXBlb2YgZG9jQ29sdW1uID09PSAidW5kZWZpbmVkIikKLSAg
ICAgICAgICAgIHZhciBwb3MgPSB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KGRvY1Jvdy5y
b3csIGRvY1Jvdy5jb2x1bW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSB0aGlz
LiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KGRvY1JvdywgZG9jQ29sdW1uKTsKLQotICAgICAgICBk
b2NSb3cgPSBwb3Mucm93OwotICAgICAgICBkb2NDb2x1bW4gPSBwb3MuY29sdW1uOwotCi0gICAg
ICAgIHZhciBzY3JlZW5Sb3cgPSAwOwotICAgICAgICB2YXIgZm9sZFN0YXJ0Um93ID0gbnVsbDsK
LSAgICAgICAgdmFyIGZvbGQgPSBudWxsOwotICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQo
ZG9jUm93LCBkb2NDb2x1bW4sIDEpOwotICAgICAgICBpZiAoZm9sZCkgewotICAgICAgICAgICAg
ZG9jUm93ID0gZm9sZC5zdGFydC5yb3c7Ci0gICAgICAgICAgICBkb2NDb2x1bW4gPSBmb2xkLnN0
YXJ0LmNvbHVtbjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciByb3dFbmQsIHJvdyA9IDA7Ci0K
LQotICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLiRkb2NSb3dDYWNoZTsKLSAgICAgICAgdmFy
IGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHJvd0NhY2hlLCBkb2NSb3cpOwotICAgICAgICB2
YXIgbCA9IHJvd0NhY2hlLmxlbmd0aDsKLSAgICAgICAgaWYgKGwgJiYgaSA+PSAwKSB7Ci0gICAg
ICAgICAgICB2YXIgcm93ID0gcm93Q2FjaGVbaV07Ci0gICAgICAgICAgICB2YXIgc2NyZWVuUm93
ID0gdGhpcy4kc2NyZWVuUm93Q2FjaGVbaV07Ci0gICAgICAgICAgICB2YXIgZG9DYWNoZSA9IGRv
Y1JvdyA+IHJvd0NhY2hlW2wgLSAxXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZh
ciBkb0NhY2hlID0gIWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlz
LmdldE5leHRGb2xkTGluZShyb3cpOwotICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUg
P2ZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7Ci0KLSAgICAgICAgd2hpbGUgKHJvdyA8IGRv
Y1JvdykgewotICAgICAgICAgICAgaWYgKHJvdyA+PSBmb2xkU3RhcnQpIHsKLSAgICAgICAgICAg
ICAgICByb3dFbmQgPSBmb2xkTGluZS5lbmQucm93ICsgMTsKLSAgICAgICAgICAgICAgICBpZiAo
cm93RW5kID4gZG9jUm93KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKHJvd0VuZCwgZm9sZExpbmUpOwot
ICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5zdGFydC5yb3cg
OkluZmluaXR5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgcm93RW5kID0gcm93ICsgMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2Ny
ZWVuUm93ICs9IHRoaXMuZ2V0Um93TGVuZ3RoKHJvdyk7Ci0gICAgICAgICAgICByb3cgPSByb3dF
bmQ7Ci0KLSAgICAgICAgICAgIGlmIChkb0NhY2hlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4k
ZG9jUm93Q2FjaGUucHVzaChyb3cpOwotICAgICAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0Nh
Y2hlLnB1c2goc2NyZWVuUm93KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2
YXIgdGV4dExpbmUgPSAiIjsKLSAgICAgICAgaWYgKGZvbGRMaW5lICYmIHJvdyA+PSBmb2xkU3Rh
cnQpIHsKLSAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9s
ZExpbmUsIGRvY1JvdywgZG9jQ29sdW1uKTsKLSAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGZv
bGRMaW5lLnN0YXJ0LnJvdzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRleHRMaW5l
ID0gdGhpcy5nZXRMaW5lKGRvY1Jvdykuc3Vic3RyaW5nKDAsIGRvY0NvbHVtbik7Ci0gICAgICAg
ICAgICBmb2xkU3RhcnRSb3cgPSBkb2NSb3c7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMu
JHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgICAgICB2YXIgd3JhcFJvdyA9IHRoaXMuJHdyYXBEYXRh
W2ZvbGRTdGFydFJvd107Ci0gICAgICAgICAgICB2YXIgc2NyZWVuUm93T2Zmc2V0ID0gMDsKLSAg
ICAgICAgICAgIHdoaWxlICh0ZXh0TGluZS5sZW5ndGggPj0gd3JhcFJvd1tzY3JlZW5Sb3dPZmZz
ZXRdKSB7Ci0gICAgICAgICAgICAgICAgc2NyZWVuUm93ICsrOwotICAgICAgICAgICAgICAgIHNj
cmVlblJvd09mZnNldCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGV4dExpbmUgPSB0
ZXh0TGluZS5zdWJzdHJpbmcoCi0gICAgICAgICAgICAgICAgd3JhcFJvd1tzY3JlZW5Sb3dPZmZz
ZXQgLSAxXSB8fCAwLCB0ZXh0TGluZS5sZW5ndGgKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgcm93OiBzY3JlZW5Sb3csCi0gICAgICAg
ICAgICBjb2x1bW46IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHRleHRMaW5lKVswXQotICAg
ICAgICB9OwotICAgIH07Ci0gICAgdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uID0gZnVuY3Rp
b24ocm93LCBkb2NDb2x1bW4pIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVl
blBvc2l0aW9uKHJvdywgZG9jQ29sdW1uKS5jb2x1bW47Ci0gICAgfTsKLSAgICB0aGlzLmRvY3Vt
ZW50VG9TY3JlZW5Sb3cgPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewotICAgICAgICBy
ZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZG9jUm93LCBkb2NDb2x1bW4pLnJv
dzsKLSAgICB9OwotICAgIHRoaXMuZ2V0U2NyZWVuTGVuZ3RoID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHZhciBzY3JlZW5Sb3dzID0gMDsKLSAgICAgICAgdmFyIGZvbGQgPSBudWxsOwotICAgICAg
ICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgICAgICBzY3JlZW5Sb3dzID0gdGhp
cy5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRh
OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkRGF0YVtpXTsKLSAgICAgICAgICAgICAgICBz
Y3JlZW5Sb3dzIC09IGZvbGQuZW5kLnJvdyAtIGZvbGQuc3RhcnQucm93OwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLiR3cmFw
RGF0YS5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgcm93ID0gMCwgaSA9IDA7Ci0gICAgICAgICAg
ICB2YXIgZm9sZCA9IHRoaXMuJGZvbGREYXRhW2krK107Ci0gICAgICAgICAgICB2YXIgZm9sZFN0
YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDpJbmZpbml0eTsKLQotICAgICAgICAgICAgd2hp
bGUgKHJvdyA8IGxhc3RSb3cpIHsKLSAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHRoaXMu
JHdyYXBEYXRhW3Jvd10ubGVuZ3RoICsgMTsKLSAgICAgICAgICAgICAgICByb3cgKys7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgewotICAgICAgICAgICAgICAgICAgICBy
b3cgPSBmb2xkLmVuZC5yb3crMTsKLSAgICAgICAgICAgICAgICAgICAgZm9sZCA9IHRoaXMuJGZv
bGREYXRhW2krK107Ci0gICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQu
c3RhcnQucm93IDpJbmZpbml0eTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2NyZWVuUm93czsKLSAgICB9OwotICAgIGZ1bmN0
aW9uIGlzRnVsbFdpZHRoKGMpIHsKLSAgICAgICAgaWYgKGMgPCAweDExMDApCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjID49IDB4MTEwMCAmJiBjIDw9IDB4MTE1
RiB8fAotICAgICAgICAgICAgICAgYyA+PSAweDExQTMgJiYgYyA8PSAweDExQTcgfHwKLSAgICAg
ICAgICAgICAgIGMgPj0gMHgxMUZBICYmIGMgPD0gMHgxMUZGIHx8Ci0gICAgICAgICAgICAgICBj
ID49IDB4MjMyOSAmJiBjIDw9IDB4MjMyQSB8fAotICAgICAgICAgICAgICAgYyA+PSAweDJFODAg
JiYgYyA8PSAweDJFOTkgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgyRTlCICYmIGMgPD0gMHgy
RUYzIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MkYwMCAmJiBjIDw9IDB4MkZENSB8fAotICAg
ICAgICAgICAgICAgYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkIgfHwKLSAgICAgICAgICAgICAg
IGMgPj0gMHgzMDAwICYmIGMgPD0gMHgzMDNFIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MzA0
MSAmJiBjIDw9IDB4MzA5NiB8fAotICAgICAgICAgICAgICAgYyA+PSAweDMwOTkgJiYgYyA8PSAw
eDMwRkYgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgzMTA1ICYmIGMgPD0gMHgzMTJEIHx8Ci0g
ICAgICAgICAgICAgICBjID49IDB4MzEzMSAmJiBjIDw9IDB4MzE4RSB8fAotICAgICAgICAgICAg
ICAgYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxQkEgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgz
MUMwICYmIGMgPD0gMHgzMUUzIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MzFGMCAmJiBjIDw9
IDB4MzIxRSB8fAotICAgICAgICAgICAgICAgYyA+PSAweDMyMjAgJiYgYyA8PSAweDMyNDcgfHwK
LSAgICAgICAgICAgICAgIGMgPj0gMHgzMjUwICYmIGMgPD0gMHgzMkZFIHx8Ci0gICAgICAgICAg
ICAgICBjID49IDB4MzMwMCAmJiBjIDw9IDB4NERCRiB8fAotICAgICAgICAgICAgICAgYyA+PSAw
eDRFMDAgJiYgYyA8PSAweEE0OEMgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHhBNDkwICYmIGMg
PD0gMHhBNEM2IHx8Ci0gICAgICAgICAgICAgICBjID49IDB4QTk2MCAmJiBjIDw9IDB4QTk3QyB8
fAotICAgICAgICAgICAgICAgYyA+PSAweEFDMDAgJiYgYyA8PSAweEQ3QTMgfHwKLSAgICAgICAg
ICAgICAgIGMgPj0gMHhEN0IwICYmIGMgPD0gMHhEN0M2IHx8Ci0gICAgICAgICAgICAgICBjID49
IDB4RDdDQiAmJiBjIDw9IDB4RDdGQiB8fAotICAgICAgICAgICAgICAgYyA+PSAweEY5MDAgJiYg
YyA8PSAweEZBRkYgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHhGRTEwICYmIGMgPD0gMHhGRTE5
IHx8Ci0gICAgICAgICAgICAgICBjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU1MiB8fAotICAgICAg
ICAgICAgICAgYyA+PSAweEZFNTQgJiYgYyA8PSAweEZFNjYgfHwKLSAgICAgICAgICAgICAgIGMg
Pj0gMHhGRTY4ICYmIGMgPD0gMHhGRTZCIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4RkYwMSAm
JiBjIDw9IDB4RkY2MCB8fAotICAgICAgICAgICAgICAgYyA+PSAweEZGRTAgJiYgYyA8PSAweEZG
RTY7Ci0gICAgfTsKLQotfSkuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOwotCi1yZXF1aXJl
KCIuL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIikuRm9sZGluZy5jYWxsKEVkaXRTZXNzaW9uLnByb3Rv
dHlwZSk7Ci1yZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoIikuQnJhY2tldE1h
dGNoLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90eXBlKTsKLQotCi1jb25maWcuZGVmaW5lT3B0aW9u
cyhFZGl0U2Vzc2lvbi5wcm90b3R5cGUsICJzZXNzaW9uIiwgewotICAgIHdyYXA6IHsKLSAgICAg
ICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1
ZSA9PSAib2ZmIikKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGZhbHNlOwotICAgICAgICAgICAg
ZWxzZSBpZiAodmFsdWUgPT0gImZyZWUiKQotICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PSAic3RyaW5nIikKLSAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCkgfHwgZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNldFVzZVdyYXBNb2RlKGZh
bHNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbCA9IHR5
cGVvZiB2YWx1ZSA9PSAibnVtYmVyIiAmJiB2YWx1ZTsKLSAgICAgICAgICAgICAgICB0aGlzLnNl
dFVzZVdyYXBNb2RlKHRydWUpOwotICAgICAgICAgICAgICAgIHRoaXMuc2V0V3JhcExpbWl0UmFu
Z2UodmFsdWUsIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuJHdyYXAg
PSB2YWx1ZTsKLSAgICAgICAgfSwKLSAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmdldFVzZVdyYXBNb2RlKCkgPyB0aGlzLmdldFdyYXBMaW1pdFJhbmdl
KCkubWluIHx8ICJmcmVlIiA6ICJvZmYiOwotICAgICAgICB9LAotICAgICAgICBoYW5kbGVzU2V0
OiB0cnVlCi0gICAgfSwKLSAgICBmaXJzdExpbmVOdW1iZXI6IHsKLSAgICAgICAgc2V0OiBmdW5j
dGlvbigpIHt0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iik7fSwKLSAgICAgICAgaW5pdGlh
bFZhbHVlOiAxCi0gICAgfSwKLSAgICB1c2VXb3JrZXI6IHsKLSAgICAgICAgc2V0OiBmdW5jdGlv
bih1c2VXb3JrZXIpIHsKLSAgICAgICAgICAgIHRoaXMuJHVzZVdvcmtlciA9IHVzZVdvcmtlcjsK
LQotICAgICAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOwotICAgICAgICAgICAgaWYgKHVzZVdv
cmtlcikKLSAgICAgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOwotICAgICAgICB9LAot
ICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUKLSAgICB9LAotICAgIHVzZVNvZnRUYWJzOiB7aW5p
dGlhbFZhbHVlOiB0cnVlfSwKLSAgICB0YWJTaXplOiB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24o
dGFiU2l6ZSkgewotICAgICAgICAgICAgaWYgKGlzTmFOKHRhYlNpemUpIHx8IHRoaXMuJHRhYlNp
emUgPT09IHRhYlNpemUpIHJldHVybjsKLQotICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0
cnVlOwotICAgICAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUgPSBbXTsKLSAgICAgICAgICAg
IHRoaXMuJHRhYlNpemUgPSB0YWJTaXplOwotICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdl
VGFiU2l6ZSIpOwotICAgICAgICB9LAotICAgICAgICBpbml0aWFsVmFsdWU6IDQsCi0gICAgICAg
IGhhbmRsZXNTZXQ6IHRydWUKLSAgICB9Ci19KTsKLQotZXhwb3J0cy5FZGl0U2Vzc2lvbiA9IEVk
aXRTZXNzaW9uOwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9zZWxlY3Rpb24nLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFuZycsICdh
Y2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKLXZh
ciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwotdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVp
cmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Ci12YXIgUmFuZ2UgPSByZXF1
aXJlKCIuL3JhbmdlIikuUmFuZ2U7Ci12YXIgU2VsZWN0aW9uID0gZnVuY3Rpb24oc2Vzc2lvbikg
ewotICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgdGhpcy5kb2MgPSBzZXNzaW9uLmdl
dERvY3VtZW50KCk7Ci0KLSAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgdGhpcy5sZWFk
ID0gdGhpcy5zZWxlY3Rpb25MZWFkID0gdGhpcy5kb2MuY3JlYXRlQW5jaG9yKDAsIDApOwotICAg
IHRoaXMuYW5jaG9yID0gdGhpcy5zZWxlY3Rpb25BbmNob3IgPSB0aGlzLmRvYy5jcmVhdGVBbmNo
b3IoMCwgMCk7Ci0KLSAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgdGhpcy5sZWFkLm9uKCJjaGFu
Z2UiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHNlbGYuX2VtaXQoImNoYW5nZUN1cnNvciIpOwot
ICAgICAgICBpZiAoIXNlbGYuJGlzRW1wdHkpCi0gICAgICAgICAgICBzZWxmLl9lbWl0KCJjaGFu
Z2VTZWxlY3Rpb24iKTsKLSAgICAgICAgaWYgKCFzZWxmLiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hh
bmdlICYmIGUub2xkLmNvbHVtbiAhPSBlLnZhbHVlLmNvbHVtbikKLSAgICAgICAgICAgIHNlbGYu
JGRlc2lyZWRDb2x1bW4gPSBudWxsOwotICAgIH0pOwotCi0gICAgdGhpcy5zZWxlY3Rpb25BbmNo
b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoIXNlbGYuJGlzRW1wdHkp
Ci0gICAgICAgICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKLSAgICB9KTsKLX07
Ci0KLShmdW5jdGlvbigpIHsKLQotICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVy
KTsKLSAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuICh0aGlz
LiRpc0VtcHR5IHx8ICgKLSAgICAgICAgICAgIHRoaXMuYW5jaG9yLnJvdyA9PSB0aGlzLmxlYWQu
cm93ICYmCi0gICAgICAgICAgICB0aGlzLmFuY2hvci5jb2x1bW4gPT0gdGhpcy5sZWFkLmNvbHVt
bgotICAgICAgICApKTsKLSAgICB9OwotICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZSgpLmlzTXVsdGlM
aW5lKCk7Ci0gICAgfTsKLSAgICB0aGlzLmdldEN1cnNvciA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCk7Ci0gICAgfTsKLSAgICB0aGlzLnNldFNl
bGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7Ci0gICAgICAgIHRoaXMuYW5j
aG9yLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKLQotICAgICAgICBpZiAodGhpcy4kaXNFbXB0
eSkgewotICAgICAgICAgICAgdGhpcy4kaXNFbXB0eSA9IGZhbHNlOwotICAgICAgICAgICAgdGhp
cy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMu
Z2V0U2VsZWN0aW9uQW5jaG9yID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh0aGlzLiRpc0Vt
cHR5KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uTGVhZCgpCi0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmFuY2hvci5nZXRQb3NpdGlvbigpOwotICAg
IH07Ci0gICAgdGhpcy5nZXRTZWxlY3Rpb25MZWFkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTsKLSAgICB9OwotICAgIHRoaXMuc2hpZnRTZWxl
Y3Rpb24gPSBmdW5jdGlvbihjb2x1bW5zKSB7Ci0gICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KSB7
Ci0gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyh0aGlzLmxlYWQucm93LCB0aGlzLmxlYWQu
Y29sdW1uICsgY29sdW1ucyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgdmFyIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uQW5jaG9yKCk7Ci0gICAgICAgIHZh
ciBsZWFkID0gdGhpcy5nZXRTZWxlY3Rpb25MZWFkKCk7Ci0KLSAgICAgICAgdmFyIGlzQmFja3dh
cmRzID0gdGhpcy5pc0JhY2t3YXJkcygpOwotCi0gICAgICAgIGlmICghaXNCYWNrd2FyZHMgfHwg
YW5jaG9yLmNvbHVtbiAhPT0gMCkKLSAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQW5jaG9y
KGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4gKyBjb2x1bW5zKTsKLQotICAgICAgICBpZiAoaXNC
YWNrd2FyZHMgfHwgbGVhZC5jb2x1bW4gIT09IDApIHsKLSAgICAgICAgICAgIHRoaXMuJG1vdmVT
ZWxlY3Rpb24oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8o
bGVhZC5yb3csIGxlYWQuY29sdW1uICsgY29sdW1ucyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfQotICAgIH07Ci0gICAgdGhpcy5pc0JhY2t3YXJkcyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB2YXIgYW5jaG9yID0gdGhpcy5hbmNob3I7Ci0gICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFk
OwotICAgICAgICByZXR1cm4gKGFuY2hvci5yb3cgPiBsZWFkLnJvdyB8fCAoYW5jaG9yLnJvdyA9
PSBsZWFkLnJvdyAmJiBhbmNob3IuY29sdW1uID4gbGVhZC5jb2x1bW4pKTsKLSAgICB9OwotICAg
IHRoaXMuZ2V0UmFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMu
YW5jaG9yOwotICAgICAgICB2YXIgbGVhZCA9IHRoaXMubGVhZDsKLQotICAgICAgICBpZiAodGhp
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBs
ZWFkKTsKLQotICAgICAgICBpZiAodGhpcy5pc0JhY2t3YXJkcygpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBhbmNob3IpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoYW5jaG9yLCBsZWFk
KTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5jbGVhclNlbGVjdGlvbiA9IGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAoIXRoaXMuJGlzRW1wdHkpIHsKLSAgICAgICAgICAgIHRoaXMuJGlz
RW1wdHkgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7
Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMuc2VsZWN0QWxsID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxOwotICAgICAgICB0
aGlzLnNldFNlbGVjdGlvbkFuY2hvcigwLCAwKTsKLSAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8o
bGFzdFJvdywgdGhpcy5kb2MuZ2V0TGluZShsYXN0Um93KS5sZW5ndGgpOwotICAgIH07Ci0gICAg
dGhpcy5zZXRSYW5nZSA9Ci0gICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHJh
bmdlLCByZXZlcnNlKSB7Ci0gICAgICAgIGlmIChyZXZlcnNlKSB7Ci0gICAgICAgICAgICB0aGlz
LnNldFNlbGVjdGlvbkFuY2hvcihyYW5nZS5lbmQucm93LCByYW5nZS5lbmQuY29sdW1uKTsKLSAg
ICAgICAgICAgIHRoaXMuc2VsZWN0VG8ocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1
bW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25BbmNo
b3IocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOwotICAgICAgICAgICAgdGhp
cy5zZWxlY3RUbyhyYW5nZS5lbmQucm93LCByYW5nZS5lbmQuY29sdW1uKTsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLiRkZXNpcmVkQ29sdW1uID0gbnVsbDsKLSAgICB9OwotCi0gICAgdGhpcy4k
bW92ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKG1vdmVyKSB7Ci0gICAgICAgIHZhciBsZWFkID0gdGhp
cy5sZWFkOwotICAgICAgICBpZiAodGhpcy4kaXNFbXB0eSkKLSAgICAgICAgICAgIHRoaXMuc2V0
U2VsZWN0aW9uQW5jaG9yKGxlYWQucm93LCBsZWFkLmNvbHVtbik7Ci0KLSAgICAgICAgbW92ZXIu
Y2FsbCh0aGlzKTsKLSAgICB9OwotICAgIHRoaXMuc2VsZWN0VG8gPSBmdW5jdGlvbihyb3csIGNv
bHVtbikgewotICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOwotICAgICAgICB9KTsKLSAgICB9
OwotICAgIHRoaXMuc2VsZWN0VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykgewotICAgICAgICB0
aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vy
c29yVG9Qb3NpdGlvbihwb3MpOwotICAgICAgICB9KTsKLSAgICB9OwotICAgIHRoaXMuc2VsZWN0
VXAgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVD
dXJzb3JVcCk7Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVjdERvd24gPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JEb3duKTsKLSAgICB9Owot
ICAgIHRoaXMuc2VsZWN0UmlnaHQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy4kbW92ZVNl
bGVjdGlvbih0aGlzLm1vdmVDdXJzb3JSaWdodCk7Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVjdExl
ZnQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVD
dXJzb3JMZWZ0KTsKLSAgICB9OwotICAgIHRoaXMuc2VsZWN0TGluZVN0YXJ0ID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGluZVN0YXJ0
KTsKLSAgICB9OwotICAgIHRoaXMuc2VsZWN0TGluZUVuZCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVFbmQpOwotICAgIH07Ci0g
ICAgdGhpcy5zZWxlY3RGaWxlRW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJG1vdmVT
ZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZUVuZCk7Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVj
dEZpbGVTdGFydCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRo
aXMubW92ZUN1cnNvckZpbGVTdGFydCk7Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVjdFdvcmRSaWdo
dCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1
cnNvcldvcmRSaWdodCk7Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVjdFdvcmRMZWZ0ID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yV29yZExl
ZnQpOwotICAgIH07Ci0gICAgdGhpcy5nZXRXb3JkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVt
bikgewotICAgICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSAidW5kZWZpbmVkIikgewotICAgICAg
ICAgICAgdmFyIGN1cnNvciA9IHJvdyB8fCB0aGlzLmxlYWQ7Ci0gICAgICAgICAgICByb3cgPSBj
dXJzb3Iucm93OwotICAgICAgICAgICAgY29sdW1uID0gY3Vyc29yLmNvbHVtbjsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFdvcmRSYW5nZShyb3csIGNvbHVtbik7
Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVjdFdvcmQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhp
cy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmdldFdvcmRSYW5nZSgpKTsKLSAgICB9OwotICAgIHRo
aXMuc2VsZWN0QVdvcmQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMu
Z2V0Q3Vyc29yKCk7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRBV29yZFJh
bmdlKGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwotICAgICAgICB0aGlzLnNldFNlbGVjdGlv
blJhbmdlKHJhbmdlKTsKLSAgICB9OwotCi0gICAgdGhpcy5nZXRMaW5lUmFuZ2UgPSBmdW5jdGlv
bihyb3csIGV4Y2x1ZGVMYXN0Q2hhcikgewotICAgICAgICB2YXIgcm93U3RhcnQgPSB0eXBlb2Yg
cm93ID09ICJudW1iZXIiID8gcm93IDogdGhpcy5sZWFkLnJvdzsKLSAgICAgICAgdmFyIHJvd0Vu
ZDsKLQotICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUocm93
U3RhcnQpOwotICAgICAgICBpZiAoZm9sZExpbmUpIHsKLSAgICAgICAgICAgIHJvd1N0YXJ0ID0g
Zm9sZExpbmUuc3RhcnQucm93OwotICAgICAgICAgICAgcm93RW5kID0gZm9sZExpbmUuZW5kLnJv
dzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJvd0VuZCA9IHJvd1N0YXJ0OwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChleGNsdWRlTGFzdENoYXIpCi0gICAgICAgICAgICByZXR1cm4g
bmV3IFJhbmdlKHJvd1N0YXJ0LCAwLCByb3dFbmQsIHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvd0Vu
ZCkubGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShy
b3dTdGFydCwgMCwgcm93RW5kICsgMSwgMCk7Ci0gICAgfTsKLSAgICB0aGlzLnNlbGVjdExpbmUg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmdldExp
bmVSYW5nZSgpKTsKLSAgICB9OwotICAgIHRoaXMubW92ZUN1cnNvclVwID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KC0xLCAwKTsKLSAgICB9OwotICAgIHRoaXMubW92
ZUN1cnNvckRvd24gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMSwg
MCk7Ci0gICAgfTsKLSAgICB0aGlzLm1vdmVDdXJzb3JMZWZ0ID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKSwKLSAgICAgICAgICAgIGZv
bGQ7Ci0KLSAgICAgICAgaWYgKGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGN1cnNvci5y
b3csIGN1cnNvci5jb2x1bW4sIC0xKSkgewotICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8o
Zm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTsKLSAgICAgICAgfSBlbHNlIGlmIChj
dXJzb3IuY29sdW1uID09IDApIHsKLSAgICAgICAgICAgIGlmIChjdXJzb3Iucm93ID4gMCkgewot
ICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGN1cnNvci5yb3cgLSAxLCB0aGlzLmRv
Yy5nZXRMaW5lKGN1cnNvci5yb3cgLSAxKS5sZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLnNlc3Np
b24uZ2V0VGFiU2l6ZSgpOwotICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5pc1RhYlN0b3Ao
Y3Vyc29yKSAmJiB0aGlzLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpLnNsaWNlKGN1cnNvci5jb2x1
bW4tdGFiU2l6ZSwgY3Vyc29yLmNvbHVtbikuc3BsaXQoIiAiKS5sZW5ndGgtMSA9PSB0YWJTaXpl
KQotICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIC10YWJTaXplKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgwLCAtMSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMubW92ZUN1cnNvclJpZ2h0ID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKSwKLSAgICAgICAg
ICAgIGZvbGQ7Ci0gICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChjdXJz
b3Iucm93LCBjdXJzb3IuY29sdW1uLCAxKSkgewotICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29y
VG8oZm9sZC5lbmQucm93LCBmb2xkLmVuZC5jb2x1bW4pOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHRoaXMubGVhZC5jb2x1bW4gPT0gdGhpcy5kb2MuZ2V0TGluZSh0aGlzLmxlYWQucm93
KS5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmxlYWQucm93IDwgdGhpcy5kb2MuZ2V0
TGVuZ3RoKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8odGhpcy5s
ZWFkLnJvdyArIDEsIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLnNlc3Npb24uZ2V0VGFiU2l6ZSgpOwot
ICAgICAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMubGVhZDsKLSAgICAgICAgICAgIGlmICh0aGlz
LnNlc3Npb24uaXNUYWJTdG9wKGN1cnNvcikgJiYgdGhpcy5kb2MuZ2V0TGluZShjdXJzb3Iucm93
KS5zbGljZShjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uK3RhYlNpemUpLnNwbGl0KCIgIiku
bGVuZ3RoLTEgPT0gdGFiU2l6ZSkKLSAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgw
LCB0YWJTaXplKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLm1vdmVD
dXJzb3JCeSgwLCAxKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5tb3ZlQ3Vyc29yTGlu
ZVN0YXJ0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93Owot
ICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKLSAgICAgICAgdmFyIHNjcmVl
blJvdyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KHJvdywgY29sdW1uKTsKLSAg
ICAgICAgdmFyIGZpcnN0Q29sdW1uUG9zaXRpb24gPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1
bWVudFBvc2l0aW9uKHNjcmVlblJvdywgMCk7Ci0gICAgICAgIHZhciBiZWZvcmVDdXJzb3IgPSB0
aGlzLnNlc3Npb24uZ2V0RGlzcGxheUxpbmUoCi0gICAgICAgICAgICByb3csIG51bGwsIGZpcnN0
Q29sdW1uUG9zaXRpb24ucm93LAotICAgICAgICAgICAgZmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1
bW4KLSAgICAgICAgKTsKLQotICAgICAgICB2YXIgbGVhZGluZ1NwYWNlID0gYmVmb3JlQ3Vyc29y
Lm1hdGNoKC9eXHMqLyk7Ci0gICAgICAgIGlmIChsZWFkaW5nU3BhY2VbMF0ubGVuZ3RoICE9IGNv
bHVtbiAmJiAhdGhpcy5zZXNzaW9uLiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0KQotICAgICAgICAg
ICAgZmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4gKz0gbGVhZGluZ1NwYWNlWzBdLmxlbmd0aDsK
LSAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihmaXJzdENvbHVtblBvc2l0aW9uKTsK
LSAgICB9OwotICAgIHRoaXMubW92ZUN1cnNvckxpbmVFbmQgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7Ci0gICAgICAgIHZhciBsaW5lRW5kID0gdGhpcy5zZXNz
aW9uLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uKGxlYWQucm93LCBsZWFkLmNvbHVt
bik7Ci0gICAgICAgIGlmICh0aGlzLmxlYWQuY29sdW1uID09IGxpbmVFbmQuY29sdW1uKSB7Ci0g
ICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGxpbmVFbmQucm93KTsK
LSAgICAgICAgICAgIGlmIChsaW5lRW5kLmNvbHVtbiA9PSBsaW5lLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIHZhciB0ZXh0RW5kID0gbGluZS5zZWFyY2goL1xzKyQvKTsKLSAgICAgICAgICAg
ICAgICBpZiAodGV4dEVuZCA+IDApCi0gICAgICAgICAgICAgICAgICAgIGxpbmVFbmQuY29sdW1u
ID0gdGV4dEVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMubW92
ZUN1cnNvclRvKGxpbmVFbmQucm93LCBsaW5lRW5kLmNvbHVtbik7Ci0gICAgfTsKLSAgICB0aGlz
Lm1vdmVDdXJzb3JGaWxlRW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByb3cgPSB0aGlz
LmRvYy5nZXRMZW5ndGgoKSAtIDE7Ci0gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmRvYy5nZXRM
aW5lKHJvdykubGVuZ3RoOwotICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbik7
Ci0gICAgfTsKLSAgICB0aGlzLm1vdmVDdXJzb3JGaWxlU3RhcnQgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oMCwgMCk7Ci0gICAgfTsKLSAgICB0aGlzLm1vdmVDdXJz
b3JMb25nV29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByb3cgPSB0aGlzLmxl
YWQucm93OwotICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKLSAgICAgICAg
dmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7Ci0gICAgICAgIHZhciByaWdodE9mQ3Vy
c29yID0gbGluZS5zdWJzdHJpbmcoY29sdW1uKTsKLQotICAgICAgICB2YXIgbWF0Y2g7Ci0gICAg
ICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCA9IDA7Ci0gICAgICAgIHRoaXMu
c2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7Ci0gICAgICAgIHZhciBmb2xkID0gdGhpcy5z
ZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7Ci0gICAgICAgIGlmIChmb2xkKSB7Ci0g
ICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVt
bik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1hdGNoID0g
dGhpcy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhyaWdodE9mQ3Vyc29yKSkgewotICAgICAgICAg
ICAgY29sdW1uICs9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleDsKLSAgICAgICAg
ICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCA9IDA7Ci0gICAgICAgICAgICBy
aWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29sdW1uKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoY29sdW1uID49IGxpbmUubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aGlzLm1vdmVDdXJz
b3JUbyhyb3csIGxpbmUubGVuZ3RoKTsKLSAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclJpZ2h0
KCk7Ci0gICAgICAgICAgICBpZiAocm93IDwgdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxKQotICAg
ICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtYXRjaCA9IHRoaXMuc2Vzc2lvbi50b2tlblJl
LmV4ZWMocmlnaHRPZkN1cnNvcikpIHsKLSAgICAgICAgICAgIGNvbHVtbiArPSB0aGlzLnNlc3Np
b24udG9rZW5SZS5sYXN0SW5kZXg7Ci0gICAgICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5s
YXN0SW5kZXggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93
LCBjb2x1bW4pOwotICAgIH07Ci0gICAgdGhpcy5tb3ZlQ3Vyc29yTG9uZ1dvcmRMZWZ0ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OwotICAgICAgICB2YXIg
Y29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKLSAgICAgICAgdmFyIGZvbGQ7Ci0gICAgICAgIGlm
IChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgLTEpKSB7Ci0gICAg
ICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1
bW4pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHN0ciA9
IHRoaXMuc2Vzc2lvbi5nZXRGb2xkU3RyaW5nQXQocm93LCBjb2x1bW4sIC0xKTsKLSAgICAgICAg
aWYgKHN0ciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzdHIgPSB0aGlzLmRvYy5nZXRMaW5lKHJv
dykuc3Vic3RyaW5nKDAsIGNvbHVtbikKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBsZWZ0T2ZD
dXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2Uoc3RyKTsKLSAgICAgICAgdmFyIG1hdGNoOwotICAg
ICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwOwotICAgICAgICB0aGlz
LnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOwotICAgICAgICBpZiAobWF0Y2ggPSB0aGlz
LnNlc3Npb24ubm9uVG9rZW5SZS5leGVjKGxlZnRPZkN1cnNvcikpIHsKLSAgICAgICAgICAgIGNv
bHVtbiAtPSB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg7Ci0gICAgICAgICAgICBs
ZWZ0T2ZDdXJzb3IgPSBsZWZ0T2ZDdXJzb3Iuc2xpY2UodGhpcy5zZXNzaW9uLm5vblRva2VuUmUu
bGFzdEluZGV4KTsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRl
eCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbHVtbiA8PSAwKSB7Ci0gICAgICAgICAg
ICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIDApOwotICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29y
TGVmdCgpOwotICAgICAgICAgICAgaWYgKHJvdyA+IDApCi0gICAgICAgICAgICAgICAgdGhpcy5t
b3ZlQ3Vyc29yV29yZExlZnQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobWF0Y2ggPSB0aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKGxlZnRPZkN1cnNvcikp
IHsKLSAgICAgICAgICAgIGNvbHVtbiAtPSB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg7
Ci0gICAgICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOwotICAgIH07Ci0K
LSAgICB0aGlzLiRzaG9ydFdvcmRFbmRJbmRleCA9IGZ1bmN0aW9uKHJpZ2h0T2ZDdXJzb3IpIHsK
LSAgICAgICAgdmFyIG1hdGNoLCBpbmRleCA9IDAsIGNoOwotICAgICAgICB2YXIgd2hpdGVzcGFj
ZVJlID0gL1xzLzsKLSAgICAgICAgdmFyIHRva2VuUmUgPSB0aGlzLnNlc3Npb24udG9rZW5SZTsK
LQotICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7Ci0gICAgICAgIGlmIChtYXRjaCA9IHRo
aXMuc2Vzc2lvbi50b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHsKLSAgICAgICAgICAgIGlu
ZGV4ID0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4OwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSAmJiB3aGl0ZXNw
YWNlUmUudGVzdChjaCkpCi0gICAgICAgICAgICAgICAgaW5kZXggKys7Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleCA8PSAxKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAw
OwotICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gcmlnaHRPZkN1cnNvcltpbmRleF0pICYm
ICF0b2tlblJlLnRlc3QoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuUmUubGFzdElu
ZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKys7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh3aGl0ZXNwYWNlUmUudGVzdChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpbmRleCA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC0tCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdo
dE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVzcGFjZVJlLnRlc3QoY2gpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleCArKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPiAyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRva2VuUmUubGFz
dEluZGV4ID0gMDsKLQotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfTsKLQotICAgIHRoaXMu
bW92ZUN1cnNvclNob3J0V29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByb3cg
PSB0aGlzLmxlYWQucm93OwotICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjsK
LSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7Ci0gICAgICAgIHZhciBy
aWdodE9mQ3Vyc29yID0gbGluZS5zdWJzdHJpbmcoY29sdW1uKTsKLQotICAgICAgICB2YXIgZm9s
ZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIDEpOwotICAgICAgICBpZiAo
Zm9sZCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLmVuZC5yb3cs
IGZvbGQuZW5kLmNvbHVtbik7Ci0KLSAgICAgICAgaWYgKGNvbHVtbiA9PSBsaW5lLmxlbmd0aCkg
ewotICAgICAgICAgICAgdmFyIGwgPSB0aGlzLmRvYy5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAg
IGRvIHsgICAgCi0gICAgICAgICAgICAgICAgcm93Kys7Ci0gICAgICAgICAgICAgICAgcmlnaHRP
ZkN1cnNvciA9IHRoaXMuZG9jLmdldExpbmUocm93KQotICAgICAgICAgICAgfSB3aGlsZSAocm93
IDwgbCAmJiAvXlxzKiQvLnRlc3QocmlnaHRPZkN1cnNvcikpCi0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghL15ccysvLnRlc3QocmlnaHRPZkN1cnNvcikpCi0gICAgICAgICAgICAgICAg
cmlnaHRPZkN1cnNvciA9ICIiCi0gICAgICAgICAgICBjb2x1bW4gPSAwOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIGluZGV4ID0gdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXgocmlnaHRPZkN1cnNv
cik7Ci0KLSAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4gKyBpbmRleCk7Ci0g
ICAgfTsKLQotICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29yZExlZnQgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7Ci0gICAgICAgIHZhciBjb2x1bW4gPSB0
aGlzLmxlYWQuY29sdW1uOwotCi0gICAgICAgIHZhciBmb2xkOwotICAgICAgICBpZiAoZm9sZCA9
IHRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQocm93LCBjb2x1bW4sIC0xKSkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4p
OwotCi0gICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUocm93KS5zdWJzdHJp
bmcoMCwgY29sdW1uKTsKLSAgICAgICAgaWYgKGNvbHVtbiA9PSAwKSB7Ci0gICAgICAgICAgICBk
byB7ICAgIAotICAgICAgICAgICAgICAgIHJvdy0tOwotICAgICAgICAgICAgICAgIGxpbmUgPSB0
aGlzLmRvYy5nZXRMaW5lKHJvdyk7Ci0gICAgICAgICAgICB9IHdoaWxlIChyb3cgPiAwICYmIC9e
XHMqJC8udGVzdChsaW5lKSkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29sdW1uID0gbGlu
ZS5sZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIS9ccyskLy50ZXN0KGxpbmUpKQotICAgICAgICAg
ICAgICAgIGxpbmUgPSAiIgotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGxlZnRPZkN1cnNvciA9
IGxhbmcuc3RyaW5nUmV2ZXJzZShsaW5lKTsKLSAgICAgICAgdmFyIGluZGV4ID0gdGhpcy4kc2hv
cnRXb3JkRW5kSW5kZXgobGVmdE9mQ3Vyc29yKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5tb3Zl
Q3Vyc29yVG8ocm93LCBjb2x1bW4gLSBpbmRleCk7Ci0gICAgfTsKLQotICAgIHRoaXMubW92ZUN1
cnNvcldvcmRSaWdodCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRz
ZWxlY3RMb25nV29yZHMpCi0gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZFJpZ2h0
KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29yZFJp
Z2h0KCk7Ci0gICAgfTsKLQotICAgIHRoaXMubW92ZUN1cnNvcldvcmRMZWZ0ID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGlmICh0aGlzLnNlc3Npb24uJHNlbGVjdExvbmdXb3JkcykKLSAgICAgICAg
ICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0KCk7Ci0gICAgfTsKLSAgICB0aGlzLm1v
dmVDdXJzb3JCeSA9IGZ1bmN0aW9uKHJvd3MsIGNoYXJzKSB7Ci0gICAgICAgIHZhciBzY3JlZW5Q
b3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKAotICAgICAgICAgICAg
dGhpcy5sZWFkLnJvdywKLSAgICAgICAgICAgIHRoaXMubGVhZC5jb2x1bW4KLSAgICAgICAgKTsK
LQotICAgICAgICBpZiAoY2hhcnMgPT09IDApIHsKLSAgICAgICAgICAgIGlmICh0aGlzLiRkZXNp
cmVkQ29sdW1uKQotICAgICAgICAgICAgICAgIHNjcmVlblBvcy5jb2x1bW4gPSB0aGlzLiRkZXNp
cmVkQ29sdW1uOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuJGRlc2ly
ZWRDb2x1bW4gPSBzY3JlZW5Qb3MuY29sdW1uOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGRv
Y1BvcyA9IHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUG9zLnJv
dyArIHJvd3MsIHNjcmVlblBvcy5jb2x1bW4pOwotICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhk
b2NQb3Mucm93LCBkb2NQb3MuY29sdW1uICsgY2hhcnMsIGNoYXJzID09PSAwKTsKLSAgICB9Owot
ICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewotICAg
ICAgICB0aGlzLm1vdmVDdXJzb3JUbyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7Ci0g
ICAgfTsKLSAgICB0aGlzLm1vdmVDdXJzb3JUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBrZWVw
RGVzaXJlZENvbHVtbikgewotICAgICAgICB2YXIgZm9sZCA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xk
QXQocm93LCBjb2x1bW4sIDEpOwotICAgICAgICBpZiAoZm9sZCkgewotICAgICAgICAgICAgcm93
ID0gZm9sZC5zdGFydC5yb3c7Ci0gICAgICAgICAgICBjb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVt
bjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2Ug
PSB0cnVlOwotICAgICAgICB0aGlzLmxlYWQuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4pOwotICAg
ICAgICB0aGlzLiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hhbmdlID0gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKCFrZWVwRGVzaXJlZENvbHVtbikKLSAgICAgICAgICAgIHRoaXMuJGRlc2lyZWRDb2x1bW4g
PSBudWxsOwotICAgIH07Ci0gICAgdGhpcy5tb3ZlQ3Vyc29yVG9TY3JlZW4gPSBmdW5jdGlvbihy
b3csIGNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4pIHsKLSAgICAgICAgdmFyIHBvcyA9IHRoaXMu
c2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93LCBjb2x1bW4pOwotICAgICAgICB0
aGlzLm1vdmVDdXJzb3JUbyhwb3Mucm93LCBwb3MuY29sdW1uLCBrZWVwRGVzaXJlZENvbHVtbik7
Ci0gICAgfTsKLSAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmxl
YWQuZGV0YWNoKCk7Ci0gICAgICAgIHRoaXMuYW5jaG9yLmRldGFjaCgpOwotICAgICAgICB0aGlz
LnNlc3Npb24gPSB0aGlzLmRvYyA9IG51bGw7Ci0gICAgfQotCi0gICAgdGhpcy5mcm9tT3JpZW50
ZWRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFu
Z2UocmFuZ2UsIHJhbmdlLmN1cnNvciA9PSByYW5nZS5zdGFydCk7Ci0gICAgICAgIHRoaXMuJGRl
c2lyZWRDb2x1bW4gPSByYW5nZS5kZXNpcmVkQ29sdW1uIHx8IHRoaXMuJGRlc2lyZWRDb2x1bW47
Ci0gICAgfQotCi0gICAgdGhpcy50b09yaWVudGVkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewot
ICAgICAgICB2YXIgciA9IHRoaXMuZ2V0UmFuZ2UoKTsKLSAgICAgICAgaWYgKHJhbmdlKSB7Ci0g
ICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSByLnN0YXJ0LmNvbHVtbjsKLSAgICAgICAg
ICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHIuc3RhcnQucm93OwotICAgICAgICAgICAgcmFuZ2UuZW5k
LmNvbHVtbiA9IHIuZW5kLmNvbHVtbjsKLSAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSByLmVu
ZC5yb3c7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByYW5nZSA9IHI7Ci0gICAgICAg
IH0KLQotICAgICAgICByYW5nZS5jdXJzb3IgPSB0aGlzLmlzQmFja3dhcmRzKCkgPyByYW5nZS5z
dGFydCA6IHJhbmdlLmVuZDsKLSAgICAgICAgcmFuZ2UuZGVzaXJlZENvbHVtbiA9IHRoaXMuJGRl
c2lyZWRDb2x1bW47Ci0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9Ci0KLX0pLmNhbGwoU2Vs
ZWN0aW9uLnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMuU2VsZWN0aW9uID0gU2VsZWN0aW9uOwotfSk7
Ci0KLWFjZS5kZWZpbmUoJ2FjZS9yYW5nZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci12YXIgUmFuZ2UgPSBm
dW5jdGlvbihzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKSB7Ci0gICAg
dGhpcy5zdGFydCA9IHsKLSAgICAgICAgcm93OiBzdGFydFJvdywKLSAgICAgICAgY29sdW1uOiBz
dGFydENvbHVtbgotICAgIH07Ci0KLSAgICB0aGlzLmVuZCA9IHsKLSAgICAgICAgcm93OiBlbmRS
b3csCi0gICAgICAgIGNvbHVtbjogZW5kQ29sdW1uCi0gICAgfTsKLX07Ci0KLShmdW5jdGlvbigp
IHsgCi0gICAgdGhpcy5pc0VxdWFsID0gZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuc3RhcnQucm93ID09IHJhbmdlLnN0YXJ0LnJvdyAmJgotICAgICAgICAgICAgdGhpcy5l
bmQucm93ID09IHJhbmdlLmVuZC5yb3cgJiYKLSAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1u
ID09IHJhbmdlLnN0YXJ0LmNvbHVtbiAmJgotICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID09
IHJhbmdlLmVuZC5jb2x1bW4KLSAgICB9OyAKLSAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHJldHVybiAoIlJhbmdlOiBbIiArIHRoaXMuc3RhcnQucm93ICsgIi8iICsg
dGhpcy5zdGFydC5jb2x1bW4gKwotICAgICAgICAgICAgIl0gLT4gWyIgKyB0aGlzLmVuZC5yb3cg
KyAiLyIgKyB0aGlzLmVuZC5jb2x1bW4gKyAiXSIpOwotICAgIH07IAotCi0gICAgdGhpcy5jb250
YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmNvbXBh
cmUocm93LCBjb2x1bW4pID09IDA7Ci0gICAgfTsgCi0gICAgdGhpcy5jb21wYXJlUmFuZ2UgPSBm
dW5jdGlvbihyYW5nZSkgewotICAgICAgICB2YXIgY21wLAotICAgICAgICAgICAgZW5kID0gcmFu
Z2UuZW5kLAotICAgICAgICAgICAgc3RhcnQgPSByYW5nZS5zdGFydDsKLQotICAgICAgICBjbXAg
PSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7Ci0gICAgICAgIGlmIChjbXAgPT0g
MSkgewotICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29s
dW1uKTsKLSAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewotICAgICAgICAgICAgICAgIHJldHVy
biAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMCkgewotICAgICAgICAgICAgICAg
IHJldHVybiAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHsKLSAgICAg
ICAgICAgIHJldHVybiAtMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNtcCA9IHRo
aXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAgICBpZiAoY21w
ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChjbXAgPT0gMSkgewotICAgICAgICAgICAgICAgIHJldHVybiA0MjsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OyAKLSAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdywgcC5jb2x1bW4pOwotICAgIH07IAotICAg
IHRoaXMuY29udGFpbnNSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0gMCAmJiB0aGlzLmNvbXBhcmVQb2ludChy
YW5nZS5lbmQpID09IDA7Ci0gICAgfTsKLSAgICB0aGlzLmludGVyc2VjdHMgPSBmdW5jdGlvbihy
YW5nZSkgewotICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlUmFuZ2UocmFuZ2UpOwotICAg
ICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7Ci0gICAgfTsK
LSAgICB0aGlzLmlzRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKLSAgICB9
OyAKLSAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewotICAgICAgICBy
ZXR1cm4gdGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVt
bjsKLSAgICB9OyAKLSAgICB0aGlzLnNldFN0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsK
LSAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gIm9iamVjdCIpIHsKLSAgICAgICAgICAgIHRoaXMu
c3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKLSAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0g
cm93LnJvdzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0g
cm93OwotICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBjb2x1bW47Ci0gICAgICAgIH0K
LSAgICB9OyAKLSAgICB0aGlzLnNldEVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7Ci0gICAg
ICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7Ci0gICAgICAgICAgICB0aGlzLmVuZC5j
b2x1bW4gPSByb3cuY29sdW1uOwotICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93LnJvdzsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdzsKLSAgICAg
ICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGNvbHVtbjsKLSAgICAgICAgfQotICAgIH07IAotICAg
IHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgaWYgKHRoaXMu
Y29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewotICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQo
cm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9OyAKLSAgICB0aGlzLmluc2lkZVN0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4pIHsKLSAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewotICAg
ICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfTsgCi0gICAgdGhpcy5pbnNpZGVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewot
ICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH07Ci0gICAgdGhpcy5jb21wYXJlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAg
aWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKLSAgICAgICAgICAgIGlmIChyb3cgPT09IHRoaXMu
c3RhcnQucm93KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8IHRoaXMuc3RhcnQu
Y29sdW1uID8gLTEgOiAoY29sdW1uID4gdGhpcy5lbmQuY29sdW1uID8gMSA6IDApOwotICAgICAg
ICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyb3cgPCB0aGlzLnN0YXJ0LnJvdykK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICBpZiAocm93ID4gdGhpcy5lbmQucm93
KQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09
PSByb3cpCi0gICAgICAgICAgICByZXR1cm4gY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8g
MCA6IC0xOwotCi0gICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT09IHJvdykKLSAgICAgICAgICAg
IHJldHVybiBjb2x1bW4gPD0gdGhpcy5lbmQuY29sdW1uID8gMCA6IDE7Ci0KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfTsKLSAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29s
dW1uKSB7Ci0gICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5j
b2x1bW4gPT0gY29sdW1uKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKLSAgICAg
ICAgfQotICAgIH07Ci0gICAgdGhpcy5jb21wYXJlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4p
IHsKLSAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09
IGNvbHVtbikgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKLSAgICAgICAgfQotICAg
IH07Ci0gICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAg
ICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVt
bikgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGFy
dC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikgewotICAgICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y29tcGFyZShyb3csIGNvbHVtbik7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMuY2xpcFJv
d3MgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAgICBpZiAodGhpcy5lbmQu
cm93ID4gbGFzdFJvdykgewotICAgICAgICAgICAgdmFyIGVuZCA9IHsKLSAgICAgICAgICAgICAg
ICByb3c6IGxhc3RSb3crMSwKLSAgICAgICAgICAgICAgICBjb2x1bW46IDAKLSAgICAgICAgICAg
IH07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPiBsYXN0Um93KSB7
Ci0gICAgICAgICAgICB2YXIgc3RhcnQgPSB7Ci0gICAgICAgICAgICAgICAgcm93OiBsYXN0Um93
KzEsCi0gICAgICAgICAgICAgICAgY29sdW1uOiAwCi0gICAgICAgICAgICB9OwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpIHsKLSAgICAgICAgICAg
IHZhciBzdGFydCA9IHsKLSAgICAgICAgICAgICAgICByb3c6IGZpcnN0Um93LAotICAgICAgICAg
ICAgICAgIGNvbHVtbjogMAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0aGlzLmVuZC5yb3cgPCBmaXJzdFJvdykgewotICAgICAgICAgICAgdmFyIGVuZCA9IHsKLSAg
ICAgICAgICAgICAgICByb3c6IGZpcnN0Um93LAotICAgICAgICAgICAgICAgIGNvbHVtbjogMAot
ICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50
cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwotICAgIH07Ci0gICAgdGhp
cy5leHRlbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewotICAgICAgICB2YXIgY21wID0gdGhp
cy5jb21wYXJlKHJvdywgY29sdW1uKTsKLQotICAgICAgICBpZiAoY21wID09IDApCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgZWxzZSBpZiAoY21wID09IC0xKQotICAgICAgICAg
ICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKLQotICAg
ICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwg
dGhpcy5lbmQpOwotICAgIH07Ci0KLSAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyA9PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFy
dC5jb2x1bW4gPT0gdGhpcy5lbmQuY29sdW1uKTsKLSAgICB9OwotICAgIHRoaXMuaXNNdWx0aUxp
bmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyAhPT0gdGhp
cy5lbmQucm93KTsKLSAgICB9OwotICAgIHRoaXMuY2xvbmUgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5zdGFydCwgdGhpcy5lbmQpOwotICAgIH07
Ci0gICAgdGhpcy5jb2xsYXBzZVJvd3MgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMu
ZW5kLmNvbHVtbiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0
LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCkKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywg
MCwgdGhpcy5lbmQucm93LCAwKQotICAgIH07Ci0gICAgdGhpcy50b1NjcmVlblJhbmdlID0gZnVu
Y3Rpb24oc2Vzc2lvbikgewotICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPQotICAgICAgICAg
ICAgc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zdGFydCk7Ci0gICAgICAg
IHZhciBzY3JlZW5Qb3NFbmQgPQotICAgICAgICAgICAgc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVu
UG9zaXRpb24odGhpcy5lbmQpOwotCi0gICAgICAgIHJldHVybiBuZXcgUmFuZ2UoCi0gICAgICAg
ICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKLSAgICAgICAg
ICAgIHNjcmVlblBvc0VuZC5yb3csIHNjcmVlblBvc0VuZC5jb2x1bW4KLSAgICAgICAgKTsKLSAg
ICB9OwotCi19KS5jYWxsKFJhbmdlLnByb3RvdHlwZSk7Ci1SYW5nZS5mcm9tUG9pbnRzID0gZnVu
Y3Rpb24oc3RhcnQsIGVuZCkgewotICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFy
dC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwotfTsKLQotZXhwb3J0cy5SYW5nZSA9IFJh
bmdlOwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL3RleHQnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS90b2tlbml6ZXInLCAnYWNlL21vZGUvdGV4dF9oaWdobGln
aHRfcnVsZXMnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS91bmljb2RlJywgJ2FjZS9saWIv
bGFuZyddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgVG9r
ZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwotdmFyIFRleHRIaWdo
bGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxp
Z2h0UnVsZXM7Ci12YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIiKS5CZWhhdmlv
dXI7Ci12YXIgdW5pY29kZSA9IHJlcXVpcmUoIi4uL3VuaWNvZGUiKTsKLXZhciBsYW5nID0gcmVx
dWlyZSgiLi4vbGliL2xhbmciKTsKLQotdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LiR0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKG5ldyBUZXh0SGlnaGxpZ2h0UnVsZXMoKS5nZXRS
dWxlcygpKTsKLSAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQmVoYXZpb3VyKCk7Ci19OwotCi0o
ZnVuY3Rpb24oKSB7Ci0KLSAgICB0aGlzLnRva2VuUmUgPSBuZXcgUmVnRXhwKCJeWyIKLSAgICAg
ICAgKyB1bmljb2RlLnBhY2thZ2VzLkwKLSAgICAgICAgKyB1bmljb2RlLnBhY2thZ2VzLk1uICsg
dW5pY29kZS5wYWNrYWdlcy5NYwotICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuTmQKLSAgICAg
ICAgKyB1bmljb2RlLnBhY2thZ2VzLlBjICsgIlxcJF9dKyIsICJnIgotICAgICk7Ci0gICAgCi0g
ICAgdGhpcy5ub25Ub2tlblJlID0gbmV3IFJlZ0V4cCgiXig/OlteIgotICAgICAgICArIHVuaWNv
ZGUucGFja2FnZXMuTAotICAgICAgICArIHVuaWNvZGUucGFja2FnZXMuTW4gKyB1bmljb2RlLnBh
Y2thZ2VzLk1jCi0gICAgICAgICsgdW5pY29kZS5wYWNrYWdlcy5OZAotICAgICAgICArIHVuaWNv
ZGUucGFja2FnZXMuUGMgKyAiXFwkX118XHNdKSsiLCAiZyIKLSAgICApOwotCi0gICAgdGhpcy5n
ZXRUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHRva2VuaXpl
cjsKLSAgICB9OwotCi0gICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0
ZSwgc2Vzc2lvbiwgc3RhcnRSb3csIGVuZFJvdykgewotICAgICAgICB2YXIgZG9jID0gc2Vzc2lv
bi5kb2M7Ci0gICAgICAgIHZhciByZWdleHBTdGFydCwgbGluZUNvbW1lbnRTdGFydDsKLSAgICAg
ICAgaWYgKCF0aGlzLmxpbmVDb21tZW50U3RhcnQpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZQotICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5saW5lQ29tbWVudFN0YXJ0
KSkgewotICAgICAgICAgICAgcmVnZXhwU3RhcnQgPSB0aGlzLmxpbmVDb21tZW50U3RhcnQubWFw
KGxhbmcuZXNjYXBlUmVnRXhwKS5qb2luKCJ8Iik7Ci0gICAgICAgICAgICBsaW5lQ29tbWVudFN0
YXJ0ID0gdGhpcy5saW5lQ29tbWVudFN0YXJ0WzBdOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcmVnZXhwU3RhcnQgPSBsYW5nLmVzY2FwZVJlZ0V4cCh0aGlzLmxpbmVDb21tZW50U3Rh
cnQpOwotICAgICAgICAgICAgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFy
dDsKLSAgICAgICAgfQotICAgICAgICByZWdleHBTdGFydCA9IG5ldyBSZWdFeHAoIl5cXHMqKD86
IiArIHJlZ2V4cFN0YXJ0ICsgIikgPyIpOwotCi0gICAgICAgIHZhciByZW1vdmVDb21tZW50ID0g
dHJ1ZTsKLSAgICAgICAgdmFyIG1pblNwYWNlID0gSW5maW5pdHk7Ci0gICAgICAgIHZhciBpbmRl
bnRhdGlvbnMgPSBbXTsKLQotICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3c7IGkgPD0gZW5k
Um93OyBpKyspIHsKLSAgICAgICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUoaSk7Ci0gICAg
ICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTfCQvKTsKLSAgICAgICAgICAgIGlu
ZGVudGF0aW9uc1tpXSA9IGluZGVudDsKLSAgICAgICAgICAgIGlmIChpbmRlbnQgPCBtaW5TcGFj
ZSkKLSAgICAgICAgICAgICAgICBtaW5TcGFjZSA9IGluZGVudDsKLSAgICAgICAgICAgIGlmIChy
ZW1vdmVDb21tZW50ICYmICFyZWdleHBTdGFydC50ZXN0KGxpbmUpKQotICAgICAgICAgICAgICAg
IHJlbW92ZUNvbW1lbnQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZW1vdmVD
b21tZW50KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93
OyBpKyspIHsKLSAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKGkpOwotICAg
ICAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaChyZWdleHBTdGFydCk7Ci0gICAgICAgICAg
ICAgICAgZG9jLnJlbW92ZUluTGluZShpLCBpbmRlbnRhdGlvbnNbaV0sIG1bMF0ubGVuZ3RoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpbmVDb21tZW50
U3RhcnQgKz0gIiAiOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93OyBpIDw9IGVu
ZFJvdzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZG9jLmluc2VydEluTGluZSh7cm93OiBpLCBj
b2x1bW46IG1pblNwYWNlfSwgbGluZUNvbW1lbnRTdGFydCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0
YXRlLCBsaW5lLCB0YWIpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsK
LSAgICB9OwotCi0gICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwg
aW5wdXQpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICB0aGlzLmF1dG9P
dXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7Ci0gICAgfTsKLQotICAgIHRoaXMu
JGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIG1hdGNoID0gbGluZS5t
YXRjaCgvXihccyspLyk7Ci0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgcmV0dXJu
IG1hdGNoWzFdOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICIiOwotICAgIH07Ci0gICAg
Ci0gICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgIH07Ci0KLSAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMgPSBmdW5j
dGlvbiAobWFwcGluZykgewotICAgICAgICBpZiAoIXRoaXMuJGVtYmVkcykgewotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuJG1vZGVzID0ge307Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy4kZW1iZWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICBpZiAobWFwcGluZ1t0aGlzLiRlbWJlZHNbaV1dKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXSA9IG5ldyBtYXBwaW5nW3RoaXMuJGVtYmVkc1tpXV0o
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFyIGRlbGVn
YXRpb25zID0gWyd0b2dnbGVDb21tZW50TGluZXMnLCAnZ2V0TmV4dExpbmVJbmRlbnQnLCAnY2hl
Y2tPdXRkZW50JywgJ2F1dG9PdXRkZW50JywgJ3RyYW5zZm9ybUFjdGlvbiddOwotCi0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZWdhdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
ICAgIChmdW5jdGlvbihzY29wZSkgewotICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0g
ZGVsZWdhdGlvbnNbaV07Ci0gICAgICAgICAgICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHNjb3Bl
W2Z1bmN0aW9uTmFtZV07Ci0gICAgICAgICAgICAgIHNjb3BlW2RlbGVnYXRpb25zW2ldXSA9IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGRlbGVnYXRvcihmdW5j
dGlvbk5hbWUsIGFyZ3VtZW50cywgZGVmYXVsdEhhbmRsZXIpOwotICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9ICh0aGlzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdGhpcy4k
ZGVsZWdhdG9yID0gZnVuY3Rpb24obWV0aG9kLCBhcmdzLCBkZWZhdWx0SGFuZGxlcikgewotICAg
ICAgICB2YXIgc3RhdGUgPSBhcmdzWzBdOwotICAgICAgICAKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLiRlbWJlZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghdGhp
cy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXSkgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHZhciBzcGxpdCA9IHN0YXRlLnNwbGl0KHRoaXMuJGVtYmVkc1tpXSk7Ci0gICAgICAg
ICAgICBpZiAoIXNwbGl0WzBdICYmIHNwbGl0WzFdKSB7Ci0gICAgICAgICAgICAgICAgYXJnc1sw
XSA9IHNwbGl0WzFdOwotICAgICAgICAgICAgICAgIHZhciBtb2RlID0gdGhpcy4kbW9kZXNbdGhp
cy4kZW1iZWRzW2ldXTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbW9kZVttZXRob2RdLmFwcGx5
KG1vZGUsIGFyZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHZhciByZXQg
PSBkZWZhdWx0SGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsKLSAgICAgICAgcmV0dXJuIGRlZmF1
bHRIYW5kbGVyID8gcmV0IDogdW5kZWZpbmVkOwotICAgIH07Ci0gICAgCi0gICAgdGhpcy50cmFu
c2Zvcm1BY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHBh
cmFtKSB7Ci0gICAgICAgIGlmICh0aGlzLiRiZWhhdmlvdXIpIHsKLSAgICAgICAgICAgIHZhciBi
ZWhhdmlvdXJzID0gdGhpcy4kYmVoYXZpb3VyLmdldEJlaGF2aW91cnMoKTsKLSAgICAgICAgICAg
IGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJlaGF2
aW91cnNba2V5XVthY3Rpb25dKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBiZWhh
dmlvdXJzW2tleV1bYWN0aW9uXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIAotfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7Ci0KLWV4cG9y
dHMuTW9kZSA9IE1vZGU7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL3Rva2VuaXplcicsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywg
bW9kdWxlKSB7Ci12YXIgTUFYX1RPS0VOX0NPVU5UID0gMTAwMDsKLXZhciBUb2tlbml6ZXIgPSBm
dW5jdGlvbihydWxlcykgewotICAgIHRoaXMuc3RhdGVzID0gcnVsZXM7Ci0KLSAgICB0aGlzLnJl
Z0V4cHMgPSB7fTsKLSAgICB0aGlzLm1hdGNoTWFwcGluZ3MgPSB7fTsKLSAgICBmb3IgKHZhciBr
ZXkgaW4gdGhpcy5zdGF0ZXMpIHsKLSAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZXNba2V5
XTsKLSAgICAgICAgdmFyIHJ1bGVSZWdFeHBzID0gW107Ci0gICAgICAgIHZhciBtYXRjaFRvdGFs
ID0gMDsKLSAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLm1hdGNoTWFwcGluZ3Nba2V5XSA9IHtk
ZWZhdWx0VG9rZW46ICJ0ZXh0In07Ci0gICAgICAgIHZhciBmbGFnID0gImciOwotCi0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZh
ciBydWxlID0gc3RhdGVbaV07Ci0gICAgICAgICAgICBpZiAocnVsZS5kZWZhdWx0VG9rZW4pCi0g
ICAgICAgICAgICAgICAgbWFwcGluZy5kZWZhdWx0VG9rZW4gPSBydWxlLmRlZmF1bHRUb2tlbjsK
LSAgICAgICAgICAgIGlmIChydWxlLmNhc2VJbnNlbnNpdGl2ZSkKLSAgICAgICAgICAgICAgICBm
bGFnID0gImdpIjsKLSAgICAgICAgICAgIGlmIChydWxlLnJlZ2V4ID09IG51bGwpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChydWxlLnJl
Z2V4IGluc3RhbmNlb2YgUmVnRXhwKQotICAgICAgICAgICAgICAgIHJ1bGUucmVnZXggPSBydWxl
LnJlZ2V4LnRvU3RyaW5nKCkuc2xpY2UoMSwgLTEpOwotICAgICAgICAgICAgdmFyIGFkanVzdGVk
cmVnZXggPSBydWxlLnJlZ2V4OwotICAgICAgICAgICAgdmFyIG1hdGNoY291bnQgPSBuZXcgUmVn
RXhwKCIoPzooIiArIGFkanVzdGVkcmVnZXggKyAiKXwoLikpIikuZXhlYygiYSIpLmxlbmd0aCAt
IDI7Ci0gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlLnRva2VuKSkgewotICAgICAg
ICAgICAgICAgIGlmIChydWxlLnRva2VuLmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuWzBdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW5BcnJheSA9IHJ1bGUudG9rZW47Ci0gICAg
ICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSB0aGlzLiRhcnJheVRva2VuczsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGNvdW50ID4g
MSkgewotICAgICAgICAgICAgICAgIGlmICgvXFxcZC8udGVzdChydWxlLnJlZ2V4KSkgewotICAg
ICAgICAgICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gcnVsZS5yZWdleC5yZXBsYWNlKC9cXChb
MC05XSspL2csIGZ1bmN0aW9uIChtYXRjaCwgZGlnaXQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiXFwiICsgKHBhcnNlSW50KGRpZ2l0LCAxMCkgKyBtYXRjaFRvdGFsICsgMSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1hdGNoY291bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICBhZGp1
c3RlZHJlZ2V4ID0gdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMocnVsZS5yZWdleCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghcnVsZS5zcGxpdFJlZ2V4KQotICAg
ICAgICAgICAgICAgICAgICBydWxlLnNwbGl0UmVnZXggPSB0aGlzLmNyZWF0ZVNwbGl0dGVyUmVn
ZXhwKHJ1bGUucmVnZXgsIGZsYWcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtYXBw
aW5nW21hdGNoVG90YWxdID0gaTsKLSAgICAgICAgICAgIG1hdGNoVG90YWwgKz0gbWF0Y2hjb3Vu
dDsKLQotICAgICAgICAgICAgcnVsZVJlZ0V4cHMucHVzaChhZGp1c3RlZHJlZ2V4KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMucmVnRXhwc1trZXldID0gbmV3IFJlZ0V4cCgiKCIgKyBydWxl
UmVnRXhwcy5qb2luKCIpfCgiKSArICIpfCgkKSIsIGZsYWcpOwotICAgIH0KLX07Ci0KLShmdW5j
dGlvbigpIHsKLSAgICB0aGlzLiRhcnJheVRva2VucyA9IGZ1bmN0aW9uKHN0cikgewotICAgICAg
ICBpZiAoIXN0cikKLSAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgdmFyIHZhbHVlcyA9
IHRoaXMuc3BsaXRSZWdleC5leGVjKHN0cik7Ci0gICAgICAgIHZhciB0b2tlbnMgPSBbXTsKLSAg
ICAgICAgdmFyIHR5cGVzID0gdGhpcy50b2tlbkFycmF5OwotICAgICAgICBpZiAodHlwZXMubGVu
Z3RoICE9IHZhbHVlcy5sZW5ndGggLSAxKSB7Ci0gICAgICAgICAgICBpZiAod2luZG93LmNvbnNv
bGUpCi0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih0eXBlcyAsIHZhbHVlcywgc3RyLCB0
aGlzLnNwbGl0UmVnZXgsIHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIFt7dHlwZTogImVycm9y
LmludmFsaWQiLCB2YWx1ZTogc3RyfV07Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHZhbHVlc1tpICsg
MV0pIHsKLSAgICAgICAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aF0gPSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHR5cGU6IHR5cGVzW2ldLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZTog
dmFsdWVzW2kgKyAxXQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRva2VuczsKLSAgICB9OwotICAgIAotICAgIHRoaXMucmVtb3Zl
Q2FwdHVyaW5nR3JvdXBzID0gZnVuY3Rpb24oc3JjKSB7Ci0gICAgICAgIHZhciByID0gc3JjLnJl
cGxhY2UoCi0gICAgICAgICAgICAvXFsoPzpcXC58W15cXV0pKj9cXXxcXC58XChcP1s6PSFdfChc
KCkvZywKLSAgICAgICAgICAgIGZ1bmN0aW9uKHgsIHkpIHtyZXR1cm4geSA/ICIoPzoiIDogeDt9
Ci0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiByOwotICAgIH07Ci0gICAgCi0gICAgdGhpcy5j
cmVhdGVTcGxpdHRlclJlZ2V4cCA9IGZ1bmN0aW9uKHNyYywgZmxhZykgewotICAgICAgICBzcmMg
PSBzcmMucmVwbGFjZSgvXChcPz0oW14oKV18XFwufFwoKFteKCldfFxcLikqP1wpKSpcKSg/PVwp
KiQpLywgIiIpOwotICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzcmMsIChmbGFnfHwiIikucmVw
bGFjZSgiZyIsICIiKSk7Ci0gICAgfTsKLSAgICB0aGlzLmdldExpbmVUb2tlbnMgPSBmdW5jdGlv
bihsaW5lLCBzdGFydFN0YXRlKSB7Ci0gICAgICAgIGlmIChzdGFydFN0YXRlICYmIHR5cGVvZiBz
dGFydFN0YXRlICE9ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICB2YXIgc3RhY2sgPSBzdGFydFN0
YXRlLnNsaWNlKDApOwotICAgICAgICAgICAgc3RhcnRTdGF0ZSA9IHN0YWNrWzBdOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHZhciBzdGFjayA9IFtdOwotCi0gICAgICAgIHZhciBjdXJy
ZW50U3RhdGUgPSBzdGFydFN0YXRlIHx8ICJzdGFydCI7Ci0gICAgICAgIHZhciBzdGF0ZSA9IHRo
aXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07Ci0gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRj
aE1hcHBpbmdzW2N1cnJlbnRTdGF0ZV07Ci0gICAgICAgIHZhciByZSA9IHRoaXMucmVnRXhwc1tj
dXJyZW50U3RhdGVdOwotICAgICAgICByZS5sYXN0SW5kZXggPSAwOwotCi0gICAgICAgIHZhciBt
YXRjaCwgdG9rZW5zID0gW107Ci0gICAgICAgIHZhciBsYXN0SW5kZXggPSAwOwotCi0gICAgICAg
IHZhciB0b2tlbiA9IHt0eXBlOiBudWxsLCB2YWx1ZTogIiJ9OwotCi0gICAgICAgIHdoaWxlICht
YXRjaCA9IHJlLmV4ZWMobGluZSkpIHsKLSAgICAgICAgICAgIHZhciB0eXBlID0gbWFwcGluZy5k
ZWZhdWx0VG9rZW47Ci0gICAgICAgICAgICB2YXIgcnVsZSA9IG51bGw7Ci0gICAgICAgICAgICB2
YXIgdmFsdWUgPSBtYXRjaFswXTsKLSAgICAgICAgICAgIHZhciBpbmRleCA9IHJlLmxhc3RJbmRl
eDsKLQotICAgICAgICAgICAgaWYgKGluZGV4IC0gdmFsdWUubGVuZ3RoID4gbGFzdEluZGV4KSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHNraXBwZWQgPSBsaW5lLnN1YnN0cmluZyhsYXN0SW5kZXgs
IGluZGV4IC0gdmFsdWUubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9
PSB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlICs9IHNraXBwZWQ7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5
cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7Ci0gICAgICAg
ICAgICAgICAgICAgIHRva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiBza2lwcGVkfTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbWF0Y2gubGVuZ3RoLTI7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChtYXRjaFtp
ICsgMV0gPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICBydWxlID0gc3RhdGVbbWFwcGluZ1tpXV07Ci0gICAgICAgICAgICAgICAg
dHlwZSA9IHR5cGVvZiBydWxlLnRva2VuID09ICJmdW5jdGlvbiIKLSAgICAgICAgICAgICAgICAg
ICAgPyBydWxlLnRva2VuKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKQotICAgICAgICAgICAg
ICAgICAgICA6IHJ1bGUudG9rZW47Ci0KLSAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZS5uZXh0ID09ICJzdHJpbmciKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gcnVsZS5uZXh0OwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUg
PSBydWxlLm5leHQoY3VycmVudFN0YXRlLCBzdGFjayk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUgPSB0aGlzLnN0YXRlc1tjdXJyZW50U3RhdGVdOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiBj
b25zb2xlLmVycm9yICYmIGNvbnNvbGUuZXJyb3IoY3VycmVudFN0YXRlLCAiZG9lc24ndCBleGlz
dCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gInN0YXJ0IjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZXNbY3VycmVudFN0YXRlXTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gdGhp
cy5tYXRjaE1hcHBpbmdzW2N1cnJlbnRTdGF0ZV07Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RJ
bmRleCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICByZSA9IHRoaXMucmVnRXhwc1tjdXJy
ZW50U3RhdGVdOwotICAgICAgICAgICAgICAgICAgICByZS5sYXN0SW5kZXggPSBpbmRleDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHlw
ZSA9PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICBpZiAoKCFydWxlIHx8IHJ1bGUu
bWVyZ2UgIT09IGZhbHNlKSAmJiB0b2tlbi50eXBlID09PSB0eXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi52YWx1ZSArPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiB2YWx1ZX07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBp
ZiAodG9rZW4udHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2Vu
KTsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogbnVsbCwgdmFsdWU6ICIifTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aDsgaSsr
KQotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godHlwZVtpXSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGFzdEluZGV4ID09
IGxpbmUubGVuZ3RoKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBsYXN0
SW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiBNQVhfVE9L
RU5fQ09VTlQpIHsKLSAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSArPSBsaW5lLnN1YnN0cihs
YXN0SW5kZXgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9ICJzdGFydCIKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0b2tlbi50eXBlKQotICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwotCi0gICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICB0b2tlbnMgOiB0b2tlbnMsCi0gICAgICAgICAgICBzdGF0
ZSA6IHN0YWNrLmxlbmd0aCA/IHN0YWNrIDogY3VycmVudFN0YXRlCi0gICAgICAgIH07Ci0gICAg
fTsKLQotfSkuY2FsbChUb2tlbml6ZXIucHJvdG90eXBlKTsKLQotZXhwb3J0cy5Ub2tlbml6ZXIg
PSBUb2tlbml6ZXI7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRf
cnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZydd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgbGFuZyA9IHJl
cXVpcmUoIi4uL2xpYi9sYW5nIik7Ci0KLXZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlv
bigpIHsKLQotICAgIHRoaXMuJHJ1bGVzID0gewotICAgICAgICAic3RhcnQiIDogW3sKLSAgICAg
ICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAotICAgICAgICAgICAgcmVnZXggOiAnXiQnCi0g
ICAgICAgIH0sIHsKLSAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJ0ZXh0IgotICAgICAgICB9
XQotICAgIH07Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICB0aGlzLmFkZFJ1bGVzID0gZnVu
Y3Rpb24ocnVsZXMsIHByZWZpeCkgewotICAgICAgICBmb3IgKHZhciBrZXkgaW4gcnVsZXMpIHsK
LSAgICAgICAgICAgIHZhciBzdGF0ZSA9IHJ1bGVzW2tleV07Ci0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJ1
bGUgPSBzdGF0ZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJ1bGUubmV4dCA9IHByZWZpeCArIHJ1bGUubmV4dDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLiRydWxlc1twcmVmaXggKyBr
ZXldID0gc3RhdGU7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy5nZXRSdWxlcyA9IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kcnVsZXM7Ci0gICAgfTsKLQotICAgIHRo
aXMuZW1iZWRSdWxlcyA9IGZ1bmN0aW9uIChIaWdobGlnaHRSdWxlcywgcHJlZml4LCBlc2NhcGVS
dWxlcywgc3RhdGVzLCBhcHBlbmQpIHsKLSAgICAgICAgdmFyIGVtYmVkUnVsZXMgPSBuZXcgSGln
aGxpZ2h0UnVsZXMoKS5nZXRSdWxlcygpOwotICAgICAgICBpZiAoc3RhdGVzKSB7Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAg
ICAgICBzdGF0ZXNbaV0gPSBwcmVmaXggKyBzdGF0ZXNbaV07Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBzdGF0ZXMgPSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBlbWJl
ZFJ1bGVzKQotICAgICAgICAgICAgICAgIHN0YXRlcy5wdXNoKHByZWZpeCArIGtleSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB0aGlzLmFkZFJ1bGVzKGVtYmVkUnVsZXMsIHByZWZpeCk7Ci0KLSAg
ICAgICAgaWYgKGVzY2FwZVJ1bGVzKSB7Ci0gICAgICAgICAgICB2YXIgYWRkUnVsZXMgPSBBcnJh
eS5wcm90b3R5cGVbYXBwZW5kID8gInB1c2giIDogInVuc2hpZnQiXTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3RhdGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGFk
ZFJ1bGVzLmFwcGx5KHRoaXMuJHJ1bGVzW3N0YXRlc1tpXV0sIGxhbmcuZGVlcENvcHkoZXNjYXBl
UnVsZXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdGhpcy4kZW1iZWRzKQotICAgICAg
ICAgICAgdGhpcy4kZW1iZWRzID0gW107Ci0gICAgICAgIHRoaXMuJGVtYmVkcy5wdXNoKHByZWZp
eCk7Ci0gICAgfQotCi0gICAgdGhpcy5nZXRFbWJlZHMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuJGVtYmVkczsKLSAgICB9OwotCi0gICAgdmFyIHB1c2hTdGF0ZSA9IGZ1bmN0
aW9uKGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKLSAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSAi
c3RhcnQiKQotICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHRTdGF0ZSwgY3VycmVu
dFN0YXRlKTsKLSAgICAgICAgcmV0dXJuIHRoaXMubmV4dFN0YXRlOwotICAgIH07Ci0gICAgdmFy
IHBvcFN0YXRlID0gZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykgewotICAgICAgICBpZiAo
c3RhY2tbMF0gIT09IGN1cnJlbnRTdGF0ZSkKLSAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwot
ICAgICAgICBzdGFjay5zaGlmdCgpOwotICAgICAgICByZXR1cm4gc3RhY2suc2hpZnQoKTsKLSAg
ICB9OwotCi0gICAgdGhpcy5ub3JtYWxpemVSdWxlcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICB2
YXIgaWQgPSAwOwotICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLiRydWxlczsKLSAgICAgICAgZnVu
Y3Rpb24gcHJvY2Vzc1N0YXRlKGtleSkgewotICAgICAgICAgICAgdmFyIHN0YXRlID0gcnVsZXNb
a2V5XTsKLSAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NlZCA9IHRydWU7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHJ1bGUgPSBzdGF0ZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXJ1bGUucmVnZXggJiYg
cnVsZS5zdGFydCkgewotICAgICAgICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5zdGFy
dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLm5leHQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBydWxlLm5leHQgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0LnB1
c2goewotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiBydWxlLnRva2VuCi0g
ICAgICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBy
dWxlLnRva2VuICsgIi5lbmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IHJ1bGUu
ZW5kIHx8IHJ1bGUuc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9
IHJ1bGUudG9rZW4gKyAiLnN0YXJ0IjsKLSAgICAgICAgICAgICAgICAgICAgcnVsZS5wdXNoID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIG5leHQgPSBydWxl
Lm5leHQgfHwgcnVsZS5wdXNoOwotICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIEFycmF5Lmlz
QXJyYXkobmV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlTmFtZSA9IHJ1bGUu
c3RhdGVOYW1lIHx8IChydWxlLnRva2VuICsgaWQrKyk7Ci0gICAgICAgICAgICAgICAgICAgIHJ1
bGVzW3N0YXRlTmFtZV0gPSBuZXh0OwotICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBz
dGF0ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTdGF0ZShzdGF0ZU5hbWUpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAicG9wIikgewotICAgICAgICAgICAg
ICAgICAgICBydWxlLm5leHQgPSBwb3BTdGF0ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAocnVsZS5wdXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4
dFN0YXRlID0gcnVsZS5uZXh0IHx8IHJ1bGUucHVzaDsKLSAgICAgICAgICAgICAgICAgICAgcnVs
ZS5uZXh0ID0gcHVzaFN0YXRlOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZS5wdXNo
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChydWxlLnJ1bGVzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgaW4gcnVsZS5ydWxlcykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW3JdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJ1bGVzW3JdLnB1c2gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJ1bGVzW3JdLnB1c2guYXBwbHkocnVsZXNbcl0sIHJ1bGUucnVsZXNbcl0pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxl
c1tyXSA9IHJ1bGUucnVsZXNbcl07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJ1
bGUuaW5jbHVkZSB8fCB0eXBlb2YgcnVsZSA9PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgaW5jbHVkZU5hbWUgPSBydWxlLmluY2x1ZGUgfHwgcnVsZTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHRvSW5zZXJ0ID0gcnVsZXNbaW5jbHVkZU5hbWVdOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShydWxlKSkKLSAgICAgICAgICAgICAgICAgICAg
dG9JbnNlcnQgPSBydWxlOwotCi0gICAgICAgICAgICAgICAgaWYgKHRvSW5zZXJ0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW2ksIDFdLmNvbmNhdCh0b0luc2VydCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChydWxlLm5vRXNjYXBlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYXJncyA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uKHgpIHtyZXR1cm4gIXgubmV4dDt9KTsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3BsaWNlLmFwcGx5KHN0YXRlLCBhcmdzKTsKLSAgICAg
ICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgICAgICB0b0luc2VydCA9IG51bGwK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIE9i
amVjdC5rZXlzKHJ1bGVzKS5mb3JFYWNoKHByb2Nlc3NTdGF0ZSk7Ci0gICAgfTsKLQotICAgIHRo
aXMuY3JlYXRlS2V5d29yZE1hcHBlciA9IGZ1bmN0aW9uKG1hcCwgZGVmYXVsdFRva2VuLCBpZ25v
cmVDYXNlLCBzcGxpdENoYXIpIHsKLSAgICAgICAgdmFyIGtleXdvcmRzID0gT2JqZWN0LmNyZWF0
ZShudWxsKTsKLSAgICAgICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNsYXNz
TmFtZSkgewotICAgICAgICAgICAgdmFyIGEgPSBtYXBbY2xhc3NOYW1lXTsKLSAgICAgICAgICAg
IGlmIChpZ25vcmVDYXNlKQotICAgICAgICAgICAgICAgIGEgPSBhLnRvTG93ZXJDYXNlKCk7Ci0g
ICAgICAgICAgICB2YXIgbGlzdCA9IGEuc3BsaXQoc3BsaXRDaGFyIHx8ICJ8Iik7Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gbGlzdC5sZW5ndGg7IGktLTsgKQotICAgICAgICAgICAgICAgIGtl
eXdvcmRzW2xpc3RbaV1dID0gY2xhc3NOYW1lOwotICAgICAgICB9KTsKLSAgICAgICAgbWFwID0g
bnVsbDsKLSAgICAgICAgcmV0dXJuIGlnbm9yZUNhc2UKLSAgICAgICAgICAgID8gZnVuY3Rpb24o
dmFsdWUpIHtyZXR1cm4ga2V5d29yZHNbdmFsdWUudG9Mb3dlckNhc2UoKV0gfHwgZGVmYXVsdFRv
a2VuIH0KLSAgICAgICAgICAgIDogZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4ga2V5d29yZHNbdmFs
dWVdIHx8IGRlZmF1bHRUb2tlbiB9OwotICAgIH0KLQotICAgIHRoaXMuZ2V0S2V5d29yZHMgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJGtleXdvcmRzOwotICAgIH07Ci0KLX0p
LmNhbGwoVGV4dEhpZ2hsaWdodFJ1bGVzLnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMuVGV4dEhpZ2hs
aWdodFJ1bGVzID0gVGV4dEhpZ2hsaWdodFJ1bGVzOwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9t
b2RlL2JlaGF2aW91cicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIEJlaGF2aW91ciA9IGZ1bmN0
aW9uKCkgewotICAgdGhpcy4kYmVoYXZpb3VycyA9IHt9OwotfTsKLQotKGZ1bmN0aW9uICgpIHsK
LQotICAgIHRoaXMuYWRkID0gZnVuY3Rpb24gKG5hbWUsIGFjdGlvbiwgY2FsbGJhY2spIHsKLSAg
ICAgICAgc3dpdGNoICh1bmRlZmluZWQpIHsKLSAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91
cnM6Ci0gICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnMgPSB7fTsKLSAgICAgICAgICBjYXNl
IHRoaXMuJGJlaGF2aW91cnNbbmFtZV06Ci0gICAgICAgICAgICAgIHRoaXMuJGJlaGF2aW91cnNb
bmFtZV0gPSB7fTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLiRiZWhhdmlvdXJzW25hbWVdW2Fj
dGlvbl0gPSBjYWxsYmFjazsKLSAgICB9Ci0gICAgCi0gICAgdGhpcy5hZGRCZWhhdmlvdXJzID0g
ZnVuY3Rpb24gKGJlaGF2aW91cnMpIHsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIGJlaGF2aW91
cnMpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGFjdGlvbiBpbiBiZWhhdmlvdXJzW2tleV0pIHsK
LSAgICAgICAgICAgICAgICB0aGlzLmFkZChrZXksIGFjdGlvbiwgYmVoYXZpb3Vyc1trZXldW2Fj
dGlvbl0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHRoaXMu
cmVtb3ZlID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgICAgaWYgKHRoaXMuJGJlaGF2aW91cnMg
JiYgdGhpcy4kYmVoYXZpb3Vyc1tuYW1lXSkgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJl
aGF2aW91cnNbbmFtZV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdGhpcy5pbmhlcml0
ID0gZnVuY3Rpb24gKG1vZGUsIGZpbHRlcikgewotICAgICAgICBpZiAodHlwZW9mIG1vZGUgPT09
ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAgIHZhciBiZWhhdmlvdXJzID0gbmV3IG1vZGUoKS5n
ZXRCZWhhdmlvdXJzKGZpbHRlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIg
YmVoYXZpb3VycyA9IG1vZGUuZ2V0QmVoYXZpb3VycyhmaWx0ZXIpOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMuYWRkQmVoYXZpb3VycyhiZWhhdmlvdXJzKTsKLSAgICB9Ci0gICAgCi0gICAgdGhp
cy5nZXRCZWhhdmlvdXJzID0gZnVuY3Rpb24gKGZpbHRlcikgewotICAgICAgICBpZiAoIWZpbHRl
cikgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGJlaGF2aW91cnM7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICB2YXIgcmV0ID0ge30KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZmlsdGVyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuJGJl
aGF2aW91cnNbZmlsdGVyW2ldXSkgewotICAgICAgICAgICAgICAgICAgICByZXRbZmlsdGVyW2ld
XSA9IHRoaXMuJGJlaGF2aW91cnNbZmlsdGVyW2ldXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfQotCi19
KS5jYWxsKEJlaGF2aW91ci5wcm90b3R5cGUpOwotCi1leHBvcnRzLkJlaGF2aW91ciA9IEJlaGF2
aW91cjsKLX0pOwotYWNlLmRlZmluZSgnYWNlL3VuaWNvZGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0
cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotZXhw
b3J0cy5wYWNrYWdlcyA9IHt9OwotCi1hZGRVbmljb2RlUGFja2FnZSh7Ci0gICAgTDogICIwMDQx
LTAwNUEwMDYxLTAwN0EwMEFBMDBCNTAwQkEwMEMwLTAwRDYwMEQ4LTAwRjYwMEY4LTAyQzEwMkM2
LTAyRDEwMkUwLTAyRTQwMkVDMDJFRTAzNzAtMDM3NDAzNzYwMzc3MDM3QS0wMzdEMDM4NjAzODgt
MDM4QTAzOEMwMzhFLTAzQTEwM0EzLTAzRjUwM0Y3LTA0ODEwNDhBLTA1MjUwNTMxLTA1NTYwNTU5
MDU2MS0wNTg3MDVEMC0wNUVBMDVGMC0wNUYyMDYyMS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMwNkQ1
MDZFNTA2RTYwNkVFMDZFRjA2RkEtMDZGQzA2RkYwNzEwMDcxMi0wNzJGMDc0RC0wN0E1MDdCMTA3
Q0EtMDdFQTA3RjQwN0Y1MDdGQTA4MDAtMDgxNTA4MUEwODI0MDgyODA5MDQtMDkzOTA5M0QwOTUw
MDk1OC0wOTYxMDk3MTA5NzIwOTc5LTA5N0YwOTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEt
MDlCMDA5QjIwOUI2LTA5QjkwOUJEMDlDRTA5REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBB
MEEwQTBGMEExMDBBMTMtMEEyODBBMkEtMEEzMDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTkt
MEE1QzBBNUUwQTcyLTBBNzQwQTg1LTBBOEQwQThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIy
MEFCMzBBQjUtMEFCOTBBQkQwQUQwMEFFMDBBRTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBC
MkEtMEIzMDBCMzIwQjMzMEIzNS0wQjM5MEIzRDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1
LTBCOEEwQjhFLTBCOTAwQjkyLTBCOTUwQjk5MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0w
QkFBMEJBRS0wQkI5MEJEMDBDMDUtMEMwQzBDMEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUt
MEMzOTBDM0QwQzU4MEM1OTBDNjAwQzYxMEM4NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0w
Q0IzMENCNS0wQ0I5MENCRDBDREUwQ0UwMENFMTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBE
MkEtMEQzOTBEM0QwRDYwMEQ2MTBEN0EtMEQ3RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBE
QkQwREMwLTBEQzYwRTAxLTBFMzAwRTMyMEUzMzBFNDAtMEU0NjBFODEwRTgyMEU4NDBFODcwRTg4
MEU4QTBFOEQwRTk0LTBFOTcwRTk5LTBFOUYwRUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0w
RUIwMEVCMjBFQjMwRUJEMEVDMC0wRUM0MEVDNjBFREMwRUREMEYwMDBGNDAtMEY0NzBGNDktMEY2
QzBGODgtMEY4QjEwMDAtMTAyQTEwM0YxMDUwLTEwNTUxMDVBLTEwNUQxMDYxMTA2NTEwNjYxMDZF
LTEwNzAxMDc1LTEwODExMDhFMTBBMC0xMEM1MTBEMC0xMEZBMTBGQzExMDAtMTI0ODEyNEEtMTI0
RDEyNTAtMTI1NjEyNTgxMjVBLTEyNUQxMjYwLTEyODgxMjhBLTEyOEQxMjkwLTEyQjAxMkIyLTEy
QjUxMkI4LTEyQkUxMkMwMTJDMi0xMkM1MTJDOC0xMkQ2MTJEOC0xMzEwMTMxMi0xMzE1MTMxOC0x
MzVBMTM4MC0xMzhGMTNBMC0xM0Y0MTQwMS0xNjZDMTY2Ri0xNjdGMTY4MS0xNjlBMTZBMC0xNkVB
MTcwMC0xNzBDMTcwRS0xNzExMTcyMC0xNzMxMTc0MC0xNzUxMTc2MC0xNzZDMTc2RS0xNzcwMTc4
MC0xN0IzMTdENzE3REMxODIwLTE4NzcxODgwLTE4QTgxOEFBMThCMC0xOEY1MTkwMC0xOTFDMTk1
MC0xOTZEMTk3MC0xOTc0MTk4MC0xOUFCMTlDMS0xOUM3MUEwMC0xQTE2MUEyMC0xQTU0MUFBNzFC
MDUtMUIzMzFCNDUtMUI0QjFCODMtMUJBMDFCQUUxQkFGMUMwMC0xQzIzMUM0RC0xQzRGMUM1QS0x
QzdEMUNFOS0xQ0VDMUNFRS0xQ0YxMUQwMC0xREJGMUUwMC0xRjE1MUYxOC0xRjFEMUYyMC0xRjQ1
MUY0OC0xRjREMUY1MC0xRjU3MUY1OTFGNUIxRjVEMUY1Ri0xRjdEMUY4MC0xRkI0MUZCNi0xRkJD
MUZCRTFGQzItMUZDNDFGQzYtMUZDQzFGRDAtMUZEMzFGRDYtMUZEQjFGRTAtMUZFQzFGRjItMUZG
NDFGRjYtMUZGQzIwNzEyMDdGMjA5MC0yMDk0MjEwMjIxMDcyMTBBLTIxMTMyMTE1MjExOS0yMTFE
MjEyNDIxMjYyMTI4MjEyQS0yMTJEMjEyRi0yMTM5MjEzQy0yMTNGMjE0NS0yMTQ5MjE0RTIxODMy
MTg0MkMwMC0yQzJFMkMzMC0yQzVFMkM2MC0yQ0U0MkNFQi0yQ0VFMkQwMC0yRDI1MkQzMC0yRDY1
MkQ2RjJEODAtMkQ5NjJEQTAtMkRBNjJEQTgtMkRBRTJEQjAtMkRCNjJEQjgtMkRCRTJEQzAtMkRD
NjJEQzgtMkRDRTJERDAtMkRENjJERDgtMkRERTJFMkYzMDA1MzAwNjMwMzEtMzAzNTMwM0IzMDND
MzA0MS0zMDk2MzA5RC0zMDlGMzBBMS0zMEZBMzBGQy0zMEZGMzEwNS0zMTJEMzEzMS0zMThFMzFB
MC0zMUI3MzFGMC0zMUZGMzQwMC00REI1NEUwMC05RkNCQTAwMC1BNDhDQTREMC1BNEZEQTUwMC1B
NjBDQTYxMC1BNjFGQTYyQUE2MkJBNjQwLUE2NUZBNjYyLUE2NkVBNjdGLUE2OTdBNkEwLUE2RTVB
NzE3LUE3MUZBNzIyLUE3ODhBNzhCQTc4Q0E3RkItQTgwMUE4MDMtQTgwNUE4MDctQTgwQUE4MEMt
QTgyMkE4NDAtQTg3M0E4ODItQThCM0E4RjItQThGN0E4RkJBOTBBLUE5MjVBOTMwLUE5NDZBOTYw
LUE5N0NBOTg0LUE5QjJBOUNGQUEwMC1BQTI4QUE0MC1BQTQyQUE0NC1BQTRCQUE2MC1BQTc2QUE3
QUFBODAtQUFBRkFBQjFBQUI1QUFCNkFBQjktQUFCREFBQzBBQUMyQUFEQi1BQUREQUJDMC1BQkUy
QUMwMC1EN0EzRDdCMC1EN0M2RDdDQi1EN0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5RkIw
MC1GQjA2RkIxMy1GQjE3RkIxREZCMUYtRkIyOEZCMkEtRkIzNkZCMzgtRkIzQ0ZCM0VGQjQwRkI0
MUZCNDNGQjQ0RkI0Ni1GQkIxRkJEMy1GRDNERkQ1MC1GRDhGRkQ5Mi1GREM3RkRGMC1GREZCRkU3
MC1GRTc0RkU3Ni1GRUZDRkYyMS1GRjNBRkY0MS1GRjVBRkY2Ni1GRkJFRkZDMi1GRkM3RkZDQS1G
RkNGRkZEMi1GRkQ3RkZEQS1GRkRDIiwKLSAgICBMbDogIjAwNjEtMDA3QTAwQUEwMEI1MDBCQTAw
REYtMDBGNjAwRjgtMDBGRjAxMDEwMTAzMDEwNTAxMDcwMTA5MDEwQjAxMEQwMTBGMDExMTAxMTMw
MTE1MDExNzAxMTkwMTFCMDExRDAxMUYwMTIxMDEyMzAxMjUwMTI3MDEyOTAxMkIwMTJEMDEyRjAx
MzEwMTMzMDEzNTAxMzcwMTM4MDEzQTAxM0MwMTNFMDE0MDAxNDIwMTQ0MDE0NjAxNDgwMTQ5MDE0
QjAxNEQwMTRGMDE1MTAxNTMwMTU1MDE1NzAxNTkwMTVCMDE1RDAxNUYwMTYxMDE2MzAxNjUwMTY3
MDE2OTAxNkIwMTZEMDE2RjAxNzEwMTczMDE3NTAxNzcwMTdBMDE3QzAxN0UtMDE4MDAxODMwMTg1
MDE4ODAxOEMwMThEMDE5MjAxOTUwMTk5LTAxOUIwMTlFMDFBMTAxQTMwMUE1MDFBODAxQUEwMUFC
MDFBRDAxQjAwMUI0MDFCNjAxQjkwMUJBMDFCRC0wMUJGMDFDNjAxQzkwMUNDMDFDRTAxRDAwMUQy
MDFENDAxRDYwMUQ4MDFEQTAxREMwMUREMDFERjAxRTEwMUUzMDFFNTAxRTcwMUU5MDFFQjAxRUQw
MUVGMDFGMDAxRjMwMUY1MDFGOTAxRkIwMUZEMDFGRjAyMDEwMjAzMDIwNTAyMDcwMjA5MDIwQjAy
MEQwMjBGMDIxMTAyMTMwMjE1MDIxNzAyMTkwMjFCMDIxRDAyMUYwMjIxMDIyMzAyMjUwMjI3MDIy
OTAyMkIwMjJEMDIyRjAyMzEwMjMzLTAyMzkwMjNDMDIzRjAyNDAwMjQyMDI0NzAyNDkwMjRCMDI0
RDAyNEYtMDI5MzAyOTUtMDJBRjAzNzEwMzczMDM3NzAzN0ItMDM3RDAzOTAwM0FDLTAzQ0UwM0Qw
MDNEMTAzRDUtMDNENzAzRDkwM0RCMDNERDAzREYwM0UxMDNFMzAzRTUwM0U3MDNFOTAzRUIwM0VE
MDNFRi0wM0YzMDNGNTAzRjgwM0ZCMDNGQzA0MzAtMDQ1RjA0NjEwNDYzMDQ2NTA0NjcwNDY5MDQ2
QjA0NkQwNDZGMDQ3MTA0NzMwNDc1MDQ3NzA0NzkwNDdCMDQ3RDA0N0YwNDgxMDQ4QjA0OEQwNDhG
MDQ5MTA0OTMwNDk1MDQ5NzA0OTkwNDlCMDQ5RDA0OUYwNEExMDRBMzA0QTUwNEE3MDRBOTA0QUIw
NEFEMDRBRjA0QjEwNEIzMDRCNTA0QjcwNEI5MDRCQjA0QkQwNEJGMDRDMjA0QzQwNEM2MDRDODA0
Q0EwNENDMDRDRTA0Q0YwNEQxMDREMzA0RDUwNEQ3MDREOTA0REIwNEREMDRERjA0RTEwNEUzMDRF
NTA0RTcwNEU5MDRFQjA0RUQwNEVGMDRGMTA0RjMwNEY1MDRGNzA0RjkwNEZCMDRGRDA0RkYwNTAx
MDUwMzA1MDUwNTA3MDUwOTA1MEIwNTBEMDUwRjA1MTEwNTEzMDUxNTA1MTcwNTE5MDUxQjA1MUQw
NTFGMDUyMTA1MjMwNTI1MDU2MS0wNTg3MUQwMC0xRDJCMUQ2Mi0xRDc3MUQ3OS0xRDlBMUUwMTFF
MDMxRTA1MUUwNzFFMDkxRTBCMUUwRDFFMEYxRTExMUUxMzFFMTUxRTE3MUUxOTFFMUIxRTFEMUUx
RjFFMjExRTIzMUUyNTFFMjcxRTI5MUUyQjFFMkQxRTJGMUUzMTFFMzMxRTM1MUUzNzFFMzkxRTNC
MUUzRDFFM0YxRTQxMUU0MzFFNDUxRTQ3MUU0OTFFNEIxRTREMUU0RjFFNTExRTUzMUU1NTFFNTcx
RTU5MUU1QjFFNUQxRTVGMUU2MTFFNjMxRTY1MUU2NzFFNjkxRTZCMUU2RDFFNkYxRTcxMUU3MzFF
NzUxRTc3MUU3OTFFN0IxRTdEMUU3RjFFODExRTgzMUU4NTFFODcxRTg5MUU4QjFFOEQxRThGMUU5
MTFFOTMxRTk1LTFFOUQxRTlGMUVBMTFFQTMxRUE1MUVBNzFFQTkxRUFCMUVBRDFFQUYxRUIxMUVC
MzFFQjUxRUI3MUVCOTFFQkIxRUJEMUVCRjFFQzExRUMzMUVDNTFFQzcxRUM5MUVDQjFFQ0QxRUNG
MUVEMTFFRDMxRUQ1MUVENzFFRDkxRURCMUVERDFFREYxRUUxMUVFMzFFRTUxRUU3MUVFOTFFRUIx
RUVEMUVFRjFFRjExRUYzMUVGNTFFRjcxRUY5MUVGQjFFRkQxRUZGLTFGMDcxRjEwLTFGMTUxRjIw
LTFGMjcxRjMwLTFGMzcxRjQwLTFGNDUxRjUwLTFGNTcxRjYwLTFGNjcxRjcwLTFGN0QxRjgwLTFG
ODcxRjkwLTFGOTcxRkEwLTFGQTcxRkIwLTFGQjQxRkI2MUZCNzFGQkUxRkMyLTFGQzQxRkM2MUZD
NzFGRDAtMUZEMzFGRDYxRkQ3MUZFMC0xRkU3MUZGMi0xRkY0MUZGNjFGRjcyMTBBMjEwRTIxMEYy
MTEzMjEyRjIxMzQyMTM5MjEzQzIxM0QyMTQ2LTIxNDkyMTRFMjE4NDJDMzAtMkM1RTJDNjEyQzY1
MkM2NjJDNjgyQzZBMkM2QzJDNzEyQzczMkM3NDJDNzYtMkM3QzJDODEyQzgzMkM4NTJDODcyQzg5
MkM4QjJDOEQyQzhGMkM5MTJDOTMyQzk1MkM5NzJDOTkyQzlCMkM5RDJDOUYyQ0ExMkNBMzJDQTUy
Q0E3MkNBOTJDQUIyQ0FEMkNBRjJDQjEyQ0IzMkNCNTJDQjcyQ0I5MkNCQjJDQkQyQ0JGMkNDMTJD
QzMyQ0M1MkNDNzJDQzkyQ0NCMkNDRDJDQ0YyQ0QxMkNEMzJDRDUyQ0Q3MkNEOTJDREIyQ0REMkNE
RjJDRTEyQ0UzMkNFNDJDRUMyQ0VFMkQwMC0yRDI1QTY0MUE2NDNBNjQ1QTY0N0E2NDlBNjRCQTY0
REE2NEZBNjUxQTY1M0E2NTVBNjU3QTY1OUE2NUJBNjVEQTY1RkE2NjNBNjY1QTY2N0E2NjlBNjZC
QTY2REE2ODFBNjgzQTY4NUE2ODdBNjg5QTY4QkE2OERBNjhGQTY5MUE2OTNBNjk1QTY5N0E3MjNB
NzI1QTcyN0E3MjlBNzJCQTcyREE3MkYtQTczMUE3MzNBNzM1QTczN0E3MzlBNzNCQTczREE3M0ZB
NzQxQTc0M0E3NDVBNzQ3QTc0OUE3NEJBNzREQTc0RkE3NTFBNzUzQTc1NUE3NTdBNzU5QTc1QkE3
NURBNzVGQTc2MUE3NjNBNzY1QTc2N0E3NjlBNzZCQTc2REE3NkZBNzcxLUE3NzhBNzdBQTc3Q0E3
N0ZBNzgxQTc4M0E3ODVBNzg3QTc4Q0ZCMDAtRkIwNkZCMTMtRkIxN0ZGNDEtRkY1QSIsCi0gICAg
THU6ICIwMDQxLTAwNUEwMEMwLTAwRDYwMEQ4LTAwREUwMTAwMDEwMjAxMDQwMTA2MDEwODAxMEEw
MTBDMDEwRTAxMTAwMTEyMDExNDAxMTYwMTE4MDExQTAxMUMwMTFFMDEyMDAxMjIwMTI0MDEyNjAx
MjgwMTJBMDEyQzAxMkUwMTMwMDEzMjAxMzQwMTM2MDEzOTAxM0IwMTNEMDEzRjAxNDEwMTQzMDE0
NTAxNDcwMTRBMDE0QzAxNEUwMTUwMDE1MjAxNTQwMTU2MDE1ODAxNUEwMTVDMDE1RTAxNjAwMTYy
MDE2NDAxNjYwMTY4MDE2QTAxNkMwMTZFMDE3MDAxNzIwMTc0MDE3NjAxNzgwMTc5MDE3QjAxN0Qw
MTgxMDE4MjAxODQwMTg2MDE4NzAxODktMDE4QjAxOEUtMDE5MTAxOTMwMTk0MDE5Ni0wMTk4MDE5
QzAxOUQwMTlGMDFBMDAxQTIwMUE0MDFBNjAxQTcwMUE5MDFBQzAxQUUwMUFGMDFCMS0wMUIzMDFC
NTAxQjcwMUI4MDFCQzAxQzQwMUM3MDFDQTAxQ0QwMUNGMDFEMTAxRDMwMUQ1MDFENzAxRDkwMURC
MDFERTAxRTAwMUUyMDFFNDAxRTYwMUU4MDFFQTAxRUMwMUVFMDFGMTAxRjQwMUY2LTAxRjgwMUZB
MDFGQzAxRkUwMjAwMDIwMjAyMDQwMjA2MDIwODAyMEEwMjBDMDIwRTAyMTAwMjEyMDIxNDAyMTYw
MjE4MDIxQTAyMUMwMjFFMDIyMDAyMjIwMjI0MDIyNjAyMjgwMjJBMDIyQzAyMkUwMjMwMDIzMjAy
M0EwMjNCMDIzRDAyM0UwMjQxMDI0My0wMjQ2MDI0ODAyNEEwMjRDMDI0RTAzNzAwMzcyMDM3NjAz
ODYwMzg4LTAzOEEwMzhDMDM4RTAzOEYwMzkxLTAzQTEwM0EzLTAzQUIwM0NGMDNEMi0wM0Q0MDNE
ODAzREEwM0RDMDNERTAzRTAwM0UyMDNFNDAzRTYwM0U4MDNFQTAzRUMwM0VFMDNGNDAzRjcwM0Y5
MDNGQTAzRkQtMDQyRjA0NjAwNDYyMDQ2NDA0NjYwNDY4MDQ2QTA0NkMwNDZFMDQ3MDA0NzIwNDc0
MDQ3NjA0NzgwNDdBMDQ3QzA0N0UwNDgwMDQ4QTA0OEMwNDhFMDQ5MDA0OTIwNDk0MDQ5NjA0OTgw
NDlBMDQ5QzA0OUUwNEEwMDRBMjA0QTQwNEE2MDRBODA0QUEwNEFDMDRBRTA0QjAwNEIyMDRCNDA0
QjYwNEI4MDRCQTA0QkMwNEJFMDRDMDA0QzEwNEMzMDRDNTA0QzcwNEM5MDRDQjA0Q0QwNEQwMDRE
MjA0RDQwNEQ2MDREODA0REEwNERDMDRERTA0RTAwNEUyMDRFNDA0RTYwNEU4MDRFQTA0RUMwNEVF
MDRGMDA0RjIwNEY0MDRGNjA0RjgwNEZBMDRGQzA0RkUwNTAwMDUwMjA1MDQwNTA2MDUwODA1MEEw
NTBDMDUwRTA1MTAwNTEyMDUxNDA1MTYwNTE4MDUxQTA1MUMwNTFFMDUyMDA1MjIwNTI0MDUzMS0w
NTU2MTBBMC0xMEM1MUUwMDFFMDIxRTA0MUUwNjFFMDgxRTBBMUUwQzFFMEUxRTEwMUUxMjFFMTQx
RTE2MUUxODFFMUExRTFDMUUxRTFFMjAxRTIyMUUyNDFFMjYxRTI4MUUyQTFFMkMxRTJFMUUzMDFF
MzIxRTM0MUUzNjFFMzgxRTNBMUUzQzFFM0UxRTQwMUU0MjFFNDQxRTQ2MUU0ODFFNEExRTRDMUU0
RTFFNTAxRTUyMUU1NDFFNTYxRTU4MUU1QTFFNUMxRTVFMUU2MDFFNjIxRTY0MUU2NjFFNjgxRTZB
MUU2QzFFNkUxRTcwMUU3MjFFNzQxRTc2MUU3ODFFN0ExRTdDMUU3RTFFODAxRTgyMUU4NDFFODYx
RTg4MUU4QTFFOEMxRThFMUU5MDFFOTIxRTk0MUU5RTFFQTAxRUEyMUVBNDFFQTYxRUE4MUVBQTFF
QUMxRUFFMUVCMDFFQjIxRUI0MUVCNjFFQjgxRUJBMUVCQzFFQkUxRUMwMUVDMjFFQzQxRUM2MUVD
ODFFQ0ExRUNDMUVDRTFFRDAxRUQyMUVENDFFRDYxRUQ4MUVEQTFFREMxRURFMUVFMDFFRTIxRUU0
MUVFNjFFRTgxRUVBMUVFQzFFRUUxRUYwMUVGMjFFRjQxRUY2MUVGODFFRkExRUZDMUVGRTFGMDgt
MUYwRjFGMTgtMUYxRDFGMjgtMUYyRjFGMzgtMUYzRjFGNDgtMUY0RDFGNTkxRjVCMUY1RDFGNUYx
RjY4LTFGNkYxRkI4LTFGQkIxRkM4LTFGQ0IxRkQ4LTFGREIxRkU4LTFGRUMxRkY4LTFGRkIyMTAy
MjEwNzIxMEItMjEwRDIxMTAtMjExMjIxMTUyMTE5LTIxMUQyMTI0MjEyNjIxMjgyMTJBLTIxMkQy
MTMwLTIxMzMyMTNFMjEzRjIxNDUyMTgzMkMwMC0yQzJFMkM2MDJDNjItMkM2NDJDNjcyQzY5MkM2
QjJDNkQtMkM3MDJDNzIyQzc1MkM3RS0yQzgwMkM4MjJDODQyQzg2MkM4ODJDOEEyQzhDMkM4RTJD
OTAyQzkyMkM5NDJDOTYyQzk4MkM5QTJDOUMyQzlFMkNBMDJDQTIyQ0E0MkNBNjJDQTgyQ0FBMkNB
QzJDQUUyQ0IwMkNCMjJDQjQyQ0I2MkNCODJDQkEyQ0JDMkNCRTJDQzAyQ0MyMkNDNDJDQzYyQ0M4
MkNDQTJDQ0MyQ0NFMkNEMDJDRDIyQ0Q0MkNENjJDRDgyQ0RBMkNEQzJDREUyQ0UwMkNFMjJDRUIy
Q0VEQTY0MEE2NDJBNjQ0QTY0NkE2NDhBNjRBQTY0Q0E2NEVBNjUwQTY1MkE2NTRBNjU2QTY1OEE2
NUFBNjVDQTY1RUE2NjJBNjY0QTY2NkE2NjhBNjZBQTY2Q0E2ODBBNjgyQTY4NEE2ODZBNjg4QTY4
QUE2OENBNjhFQTY5MEE2OTJBNjk0QTY5NkE3MjJBNzI0QTcyNkE3MjhBNzJBQTcyQ0E3MkVBNzMy
QTczNEE3MzZBNzM4QTczQUE3M0NBNzNFQTc0MEE3NDJBNzQ0QTc0NkE3NDhBNzRBQTc0Q0E3NEVB
NzUwQTc1MkE3NTRBNzU2QTc1OEE3NUFBNzVDQTc1RUE3NjBBNzYyQTc2NEE3NjZBNzY4QTc2QUE3
NkNBNzZFQTc3OUE3N0JBNzdEQTc3RUE3ODBBNzgyQTc4NEE3ODZBNzhCRkYyMS1GRjNBIiwKLSAg
ICBMdDogIjAxQzUwMUM4MDFDQjAxRjIxRjg4LTFGOEYxRjk4LTFGOUYxRkE4LTFGQUYxRkJDMUZD
QzFGRkMiLAotICAgIExtOiAiMDJCMC0wMkMxMDJDNi0wMkQxMDJFMC0wMkU0MDJFQzAyRUUwMzc0
MDM3QTA1NTkwNjQwMDZFNTA2RTYwN0Y0MDdGNTA3RkEwODFBMDgyNDA4MjgwOTcxMEU0NjBFQzYx
MEZDMTdENzE4NDMxQUE3MUM3OC0xQzdEMUQyQy0xRDYxMUQ3ODFEOUItMURCRjIwNzEyMDdGMjA5
MC0yMDk0MkM3RDJENkYyRTJGMzAwNTMwMzEtMzAzNTMwM0IzMDlEMzA5RTMwRkMtMzBGRUEwMTVB
NEY4LUE0RkRBNjBDQTY3RkE3MTctQTcxRkE3NzBBNzg4QTlDRkFBNzBBQURERkY3MEZGOUVGRjlG
IiwKLSAgICBMbzogIjAxQkIwMUMwLTAxQzMwMjk0MDVEMC0wNUVBMDVGMC0wNUYyMDYyMS0wNjNG
MDY0MS0wNjRBMDY2RTA2NkYwNjcxLTA2RDMwNkQ1MDZFRTA2RUYwNkZBLTA2RkMwNkZGMDcxMDA3
MTItMDcyRjA3NEQtMDdBNTA3QjEwN0NBLTA3RUEwODAwLTA4MTUwOTA0LTA5MzkwOTNEMDk1MDA5
NTgtMDk2MTA5NzIwOTc5LTA5N0YwOTg1LTA5OEMwOThGMDk5MDA5OTMtMDlBODA5QUEtMDlCMDA5
QjIwOUI2LTA5QjkwOUJEMDlDRTA5REMwOUREMDlERi0wOUUxMDlGMDA5RjEwQTA1LTBBMEEwQTBG
MEExMDBBMTMtMEEyODBBMkEtMEEzMDBBMzIwQTMzMEEzNTBBMzYwQTM4MEEzOTBBNTktMEE1QzBB
NUUwQTcyLTBBNzQwQTg1LTBBOEQwQThGLTBBOTEwQTkzLTBBQTgwQUFBLTBBQjAwQUIyMEFCMzBB
QjUtMEFCOTBBQkQwQUQwMEFFMDBBRTEwQjA1LTBCMEMwQjBGMEIxMDBCMTMtMEIyODBCMkEtMEIz
MDBCMzIwQjMzMEIzNS0wQjM5MEIzRDBCNUMwQjVEMEI1Ri0wQjYxMEI3MTBCODMwQjg1LTBCOEEw
QjhFLTBCOTAwQjkyLTBCOTUwQjk5MEI5QTBCOUMwQjlFMEI5RjBCQTMwQkE0MEJBOC0wQkFBMEJB
RS0wQkI5MEJEMDBDMDUtMEMwQzBDMEUtMEMxMDBDMTItMEMyODBDMkEtMEMzMzBDMzUtMEMzOTBD
M0QwQzU4MEM1OTBDNjAwQzYxMEM4NS0wQzhDMEM4RS0wQzkwMEM5Mi0wQ0E4MENBQS0wQ0IzMENC
NS0wQ0I5MENCRDBDREUwQ0UwMENFMTBEMDUtMEQwQzBEMEUtMEQxMDBEMTItMEQyODBEMkEtMEQz
OTBEM0QwRDYwMEQ2MTBEN0EtMEQ3RjBEODUtMEQ5NjBEOUEtMERCMTBEQjMtMERCQjBEQkQwREMw
LTBEQzYwRTAxLTBFMzAwRTMyMEUzMzBFNDAtMEU0NTBFODEwRTgyMEU4NDBFODcwRTg4MEU4QTBF
OEQwRTk0LTBFOTcwRTk5LTBFOUYwRUExLTBFQTMwRUE1MEVBNzBFQUEwRUFCMEVBRC0wRUIwMEVC
MjBFQjMwRUJEMEVDMC0wRUM0MEVEQzBFREQwRjAwMEY0MC0wRjQ3MEY0OS0wRjZDMEY4OC0wRjhC
MTAwMC0xMDJBMTAzRjEwNTAtMTA1NTEwNUEtMTA1RDEwNjExMDY1MTA2NjEwNkUtMTA3MDEwNzUt
MTA4MTEwOEUxMEQwLTEwRkExMTAwLTEyNDgxMjRBLTEyNEQxMjUwLTEyNTYxMjU4MTI1QS0xMjVE
MTI2MC0xMjg4MTI4QS0xMjhEMTI5MC0xMkIwMTJCMi0xMkI1MTJCOC0xMkJFMTJDMDEyQzItMTJD
NTEyQzgtMTJENjEyRDgtMTMxMDEzMTItMTMxNTEzMTgtMTM1QTEzODAtMTM4RjEzQTAtMTNGNDE0
MDEtMTY2QzE2NkYtMTY3RjE2ODEtMTY5QTE2QTAtMTZFQTE3MDAtMTcwQzE3MEUtMTcxMTE3MjAt
MTczMTE3NDAtMTc1MTE3NjAtMTc2QzE3NkUtMTc3MDE3ODAtMTdCMzE3REMxODIwLTE4NDIxODQ0
LTE4NzcxODgwLTE4QTgxOEFBMThCMC0xOEY1MTkwMC0xOTFDMTk1MC0xOTZEMTk3MC0xOTc0MTk4
MC0xOUFCMTlDMS0xOUM3MUEwMC0xQTE2MUEyMC0xQTU0MUIwNS0xQjMzMUI0NS0xQjRCMUI4My0x
QkEwMUJBRTFCQUYxQzAwLTFDMjMxQzRELTFDNEYxQzVBLTFDNzcxQ0U5LTFDRUMxQ0VFLTFDRjEy
MTM1LTIxMzgyRDMwLTJENjUyRDgwLTJEOTYyREEwLTJEQTYyREE4LTJEQUUyREIwLTJEQjYyREI4
LTJEQkUyREMwLTJEQzYyREM4LTJEQ0UyREQwLTJERDYyREQ4LTJEREUzMDA2MzAzQzMwNDEtMzA5
NjMwOUYzMEExLTMwRkEzMEZGMzEwNS0zMTJEMzEzMS0zMThFMzFBMC0zMUI3MzFGMC0zMUZGMzQw
MC00REI1NEUwMC05RkNCQTAwMC1BMDE0QTAxNi1BNDhDQTREMC1BNEY3QTUwMC1BNjBCQTYxMC1B
NjFGQTYyQUE2MkJBNjZFQTZBMC1BNkU1QTdGQi1BODAxQTgwMy1BODA1QTgwNy1BODBBQTgwQy1B
ODIyQTg0MC1BODczQTg4Mi1BOEIzQThGMi1BOEY3QThGQkE5MEEtQTkyNUE5MzAtQTk0NkE5NjAt
QTk3Q0E5ODQtQTlCMkFBMDAtQUEyOEFBNDAtQUE0MkFBNDQtQUE0QkFBNjAtQUE2RkFBNzEtQUE3
NkFBN0FBQTgwLUFBQUZBQUIxQUFCNUFBQjZBQUI5LUFBQkRBQUMwQUFDMkFBREJBQURDQUJDMC1B
QkUyQUMwMC1EN0EzRDdCMC1EN0M2RDdDQi1EN0ZCRjkwMC1GQTJERkEzMC1GQTZERkE3MC1GQUQ5
RkIxREZCMUYtRkIyOEZCMkEtRkIzNkZCMzgtRkIzQ0ZCM0VGQjQwRkI0MUZCNDNGQjQ0RkI0Ni1G
QkIxRkJEMy1GRDNERkQ1MC1GRDhGRkQ5Mi1GREM3RkRGMC1GREZCRkU3MC1GRTc0RkU3Ni1GRUZD
RkY2Ni1GRjZGRkY3MS1GRjlERkZBMC1GRkJFRkZDMi1GRkM3RkZDQS1GRkNGRkZEMi1GRkQ3RkZE
QS1GRkRDIiwKLSAgICBNOiAgIjAzMDAtMDM2RjA0ODMtMDQ4OTA1OTEtMDVCRDA1QkYwNUMxMDVD
MjA1QzQwNUM1MDVDNzA2MTAtMDYxQTA2NEItMDY1RTA2NzAwNkQ2LTA2REMwNkRFLTA2RTQwNkU3
MDZFODA2RUEtMDZFRDA3MTEwNzMwLTA3NEEwN0E2LTA3QjAwN0VCLTA3RjMwODE2LTA4MTkwODFC
LTA4MjMwODI1LTA4MjcwODI5LTA4MkQwOTAwLTA5MDMwOTNDMDkzRS0wOTRFMDk1MS0wOTU1MDk2
MjA5NjMwOTgxLTA5ODMwOUJDMDlCRS0wOUM0MDlDNzA5QzgwOUNCLTA5Q0QwOUQ3MDlFMjA5RTMw
QTAxLTBBMDMwQTNDMEEzRS0wQTQyMEE0NzBBNDgwQTRCLTBBNEQwQTUxMEE3MDBBNzEwQTc1MEE4
MS0wQTgzMEFCQzBBQkUtMEFDNTBBQzctMEFDOTBBQ0ItMEFDRDBBRTIwQUUzMEIwMS0wQjAzMEIz
QzBCM0UtMEI0NDBCNDcwQjQ4MEI0Qi0wQjREMEI1NjBCNTcwQjYyMEI2MzBCODIwQkJFLTBCQzIw
QkM2LTBCQzgwQkNBLTBCQ0QwQkQ3MEMwMS0wQzAzMEMzRS0wQzQ0MEM0Ni0wQzQ4MEM0QS0wQzRE
MEM1NTBDNTYwQzYyMEM2MzBDODIwQzgzMENCQzBDQkUtMENDNDBDQzYtMENDODBDQ0EtMENDRDBD
RDUwQ0Q2MENFMjBDRTMwRDAyMEQwMzBEM0UtMEQ0NDBENDYtMEQ0ODBENEEtMEQ0RDBENTcwRDYy
MEQ2MzBEODIwRDgzMERDQTBEQ0YtMERENDBERDYwREQ4LTBEREYwREYyMERGMzBFMzEwRTM0LTBF
M0EwRTQ3LTBFNEUwRUIxMEVCNC0wRUI5MEVCQjBFQkMwRUM4LTBFQ0QwRjE4MEYxOTBGMzUwRjM3
MEYzOTBGM0UwRjNGMEY3MS0wRjg0MEY4NjBGODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyQi0x
MDNFMTA1Ni0xMDU5MTA1RS0xMDYwMTA2Mi0xMDY0MTA2Ny0xMDZEMTA3MS0xMDc0MTA4Mi0xMDhE
MTA4RjEwOUEtMTA5RDEzNUYxNzEyLTE3MTQxNzMyLTE3MzQxNzUyMTc1MzE3NzIxNzczMTdCNi0x
N0QzMTdERDE4MEItMTgwRDE4QTkxOTIwLTE5MkIxOTMwLTE5M0IxOUIwLTE5QzAxOUM4MTlDOTFB
MTctMUExQjFBNTUtMUE1RTFBNjAtMUE3QzFBN0YxQjAwLTFCMDQxQjM0LTFCNDQxQjZCLTFCNzMx
QjgwLTFCODIxQkExLTFCQUExQzI0LTFDMzcxQ0QwLTFDRDIxQ0Q0LTFDRTgxQ0VEMUNGMjFEQzAt
MURFNjFERkQtMURGRjIwRDAtMjBGMDJDRUYtMkNGMTJERTAtMkRGRjMwMkEtMzAyRjMwOTkzMDlB
QTY2Ri1BNjcyQTY3Q0E2N0RBNkYwQTZGMUE4MDJBODA2QTgwQkE4MjMtQTgyN0E4ODBBODgxQThC
NC1BOEM0QThFMC1BOEYxQTkyNi1BOTJEQTk0Ny1BOTUzQTk4MC1BOTgzQTlCMy1BOUMwQUEyOS1B
QTM2QUE0M0FBNENBQTREQUE3QkFBQjBBQUIyLUFBQjRBQUI3QUFCOEFBQkVBQUJGQUFDMUFCRTMt
QUJFQUFCRUNBQkVERkIxRUZFMDAtRkUwRkZFMjAtRkUyNiIsCi0gICAgTW46ICIwMzAwLTAzNkYw
NDgzLTA0ODcwNTkxLTA1QkQwNUJGMDVDMTA1QzIwNUM0MDVDNTA1QzcwNjEwLTA2MUEwNjRCLTA2
NUUwNjcwMDZENi0wNkRDMDZERi0wNkU0MDZFNzA2RTgwNkVBLTA2RUQwNzExMDczMC0wNzRBMDdB
Ni0wN0IwMDdFQi0wN0YzMDgxNi0wODE5MDgxQi0wODIzMDgyNS0wODI3MDgyOS0wODJEMDkwMC0w
OTAyMDkzQzA5NDEtMDk0ODA5NEQwOTUxLTA5NTUwOTYyMDk2MzA5ODEwOUJDMDlDMS0wOUM0MDlD
RDA5RTIwOUUzMEEwMTBBMDIwQTNDMEE0MTBBNDIwQTQ3MEE0ODBBNEItMEE0RDBBNTEwQTcwMEE3
MTBBNzUwQTgxMEE4MjBBQkMwQUMxLTBBQzUwQUM3MEFDODBBQ0QwQUUyMEFFMzBCMDEwQjNDMEIz
RjBCNDEtMEI0NDBCNEQwQjU2MEI2MjBCNjMwQjgyMEJDMDBCQ0QwQzNFLTBDNDAwQzQ2LTBDNDgw
QzRBLTBDNEQwQzU1MEM1NjBDNjIwQzYzMENCQzBDQkYwQ0M2MENDQzBDQ0QwQ0UyMENFMzBENDEt
MEQ0NDBENEQwRDYyMEQ2MzBEQ0EwREQyLTBERDQwREQ2MEUzMTBFMzQtMEUzQTBFNDctMEU0RTBF
QjEwRUI0LTBFQjkwRUJCMEVCQzBFQzgtMEVDRDBGMTgwRjE5MEYzNTBGMzcwRjM5MEY3MS0wRjdF
MEY4MC0wRjg0MEY4NjBGODcwRjkwLTBGOTcwRjk5LTBGQkMwRkM2MTAyRC0xMDMwMTAzMi0xMDM3
MTAzOTEwM0ExMDNEMTAzRTEwNTgxMDU5MTA1RS0xMDYwMTA3MS0xMDc0MTA4MjEwODUxMDg2MTA4
RDEwOUQxMzVGMTcxMi0xNzE0MTczMi0xNzM0MTc1MjE3NTMxNzcyMTc3MzE3QjctMTdCRDE3QzYx
N0M5LTE3RDMxN0REMTgwQi0xODBEMThBOTE5MjAtMTkyMjE5MjcxOTI4MTkzMjE5MzktMTkzQjFB
MTcxQTE4MUE1NjFBNTgtMUE1RTFBNjAxQTYyMUE2NS0xQTZDMUE3My0xQTdDMUE3RjFCMDAtMUIw
MzFCMzQxQjM2LTFCM0ExQjNDMUI0MjFCNkItMUI3MzFCODAxQjgxMUJBMi0xQkE1MUJBODFCQTkx
QzJDLTFDMzMxQzM2MUMzNzFDRDAtMUNEMjFDRDQtMUNFMDFDRTItMUNFODFDRUQxREMwLTFERTYx
REZELTFERkYyMEQwLTIwREMyMEUxMjBFNS0yMEYwMkNFRi0yQ0YxMkRFMC0yREZGMzAyQS0zMDJG
MzA5OTMwOUFBNjZGQTY3Q0E2N0RBNkYwQTZGMUE4MDJBODA2QTgwQkE4MjVBODI2QThDNEE4RTAt
QThGMUE5MjYtQTkyREE5NDctQTk1MUE5ODAtQTk4MkE5QjNBOUI2LUE5QjlBOUJDQUEyOS1BQTJF
QUEzMUFBMzJBQTM1QUEzNkFBNDNBQTRDQUFCMEFBQjItQUFCNEFBQjdBQUI4QUFCRUFBQkZBQUMx
QUJFNUFCRThBQkVERkIxRUZFMDAtRkUwRkZFMjAtRkUyNiIsCi0gICAgTWM6ICIwOTAzMDkzRS0w
OTQwMDk0OS0wOTRDMDk0RTA5ODIwOTgzMDlCRS0wOUMwMDlDNzA5QzgwOUNCMDlDQzA5RDcwQTAz
MEEzRS0wQTQwMEE4MzBBQkUtMEFDMDBBQzkwQUNCMEFDQzBCMDIwQjAzMEIzRTBCNDAwQjQ3MEI0
ODBCNEIwQjRDMEI1NzBCQkUwQkJGMEJDMTBCQzIwQkM2LTBCQzgwQkNBLTBCQ0MwQkQ3MEMwMS0w
QzAzMEM0MS0wQzQ0MEM4MjBDODMwQ0JFMENDMC0wQ0M0MENDNzBDQzgwQ0NBMENDQjBDRDUwQ0Q2
MEQwMjBEMDMwRDNFLTBENDAwRDQ2LTBENDgwRDRBLTBENEMwRDU3MEQ4MjBEODMwRENGLTBERDEw
REQ4LTBEREYwREYyMERGMzBGM0UwRjNGMEY3RjEwMkIxMDJDMTAzMTEwMzgxMDNCMTAzQzEwNTYx
MDU3MTA2Mi0xMDY0MTA2Ny0xMDZEMTA4MzEwODQxMDg3LTEwOEMxMDhGMTA5QS0xMDlDMTdCNjE3
QkUtMTdDNTE3QzcxN0M4MTkyMy0xOTI2MTkyOS0xOTJCMTkzMDE5MzExOTMzLTE5MzgxOUIwLTE5
QzAxOUM4MTlDOTFBMTktMUExQjFBNTUxQTU3MUE2MTFBNjMxQTY0MUE2RC0xQTcyMUIwNDFCMzUx
QjNCMUIzRC0xQjQxMUI0MzFCNDQxQjgyMUJBMTFCQTYxQkE3MUJBQTFDMjQtMUMyQjFDMzQxQzM1
MUNFMTFDRjJBODIzQTgyNEE4MjdBODgwQTg4MUE4QjQtQThDM0E5NTJBOTUzQTk4M0E5QjRBOUI1
QTlCQUE5QkJBOUJELUE5QzBBQTJGQUEzMEFBMzNBQTM0QUE0REFBN0JBQkUzQUJFNEFCRTZBQkU3
QUJFOUFCRUFBQkVDIiwKLSAgICBNZTogIjA0ODgwNDg5MDZERTIwREQtMjBFMDIwRTItMjBFNEE2
NzAtQTY3MiIsCi0gICAgTjogICIwMDMwLTAwMzkwMEIyMDBCMzAwQjkwMEJDLTAwQkUwNjYwLTA2
NjkwNkYwLTA2RjkwN0MwLTA3QzkwOTY2LTA5NkYwOUU2LTA5RUYwOUY0LTA5RjkwQTY2LTBBNkYw
QUU2LTBBRUYwQjY2LTBCNkYwQkU2LTBCRjIwQzY2LTBDNkYwQzc4LTBDN0UwQ0U2LTBDRUYwRDY2
LTBENzUwRTUwLTBFNTkwRUQwLTBFRDkwRjIwLTBGMzMxMDQwLTEwNDkxMDkwLTEwOTkxMzY5LTEz
N0MxNkVFLTE2RjAxN0UwLTE3RTkxN0YwLTE3RjkxODEwLTE4MTkxOTQ2LTE5NEYxOUQwLTE5REEx
QTgwLTFBODkxQTkwLTFBOTkxQjUwLTFCNTkxQkIwLTFCQjkxQzQwLTFDNDkxQzUwLTFDNTkyMDcw
MjA3NC0yMDc5MjA4MC0yMDg5MjE1MC0yMTgyMjE4NS0yMTg5MjQ2MC0yNDlCMjRFQS0yNEZGMjc3
Ni0yNzkzMkNGRDMwMDczMDIxLTMwMjkzMDM4LTMwM0EzMTkyLTMxOTUzMjIwLTMyMjkzMjUxLTMy
NUYzMjgwLTMyODkzMkIxLTMyQkZBNjIwLUE2MjlBNkU2LUE2RUZBODMwLUE4MzVBOEQwLUE4RDlB
OTAwLUE5MDlBOUQwLUE5RDlBQTUwLUFBNTlBQkYwLUFCRjlGRjEwLUZGMTkiLAotICAgIE5kOiAi
MDAzMC0wMDM5MDY2MC0wNjY5MDZGMC0wNkY5MDdDMC0wN0M5MDk2Ni0wOTZGMDlFNi0wOUVGMEE2
Ni0wQTZGMEFFNi0wQUVGMEI2Ni0wQjZGMEJFNi0wQkVGMEM2Ni0wQzZGMENFNi0wQ0VGMEQ2Ni0w
RDZGMEU1MC0wRTU5MEVEMC0wRUQ5MEYyMC0wRjI5MTA0MC0xMDQ5MTA5MC0xMDk5MTdFMC0xN0U5
MTgxMC0xODE5MTk0Ni0xOTRGMTlEMC0xOURBMUE4MC0xQTg5MUE5MC0xQTk5MUI1MC0xQjU5MUJC
MC0xQkI5MUM0MC0xQzQ5MUM1MC0xQzU5QTYyMC1BNjI5QThEMC1BOEQ5QTkwMC1BOTA5QTlEMC1B
OUQ5QUE1MC1BQTU5QUJGMC1BQkY5RkYxMC1GRjE5IiwKLSAgICBObDogIjE2RUUtMTZGMDIxNjAt
MjE4MjIxODUtMjE4ODMwMDczMDIxLTMwMjkzMDM4LTMwM0FBNkU2LUE2RUYiLAotICAgIE5vOiAi
MDBCMjAwQjMwMEI5MDBCQy0wMEJFMDlGNC0wOUY5MEJGMC0wQkYyMEM3OC0wQzdFMEQ3MC0wRDc1
MEYyQS0wRjMzMTM2OS0xMzdDMTdGMC0xN0Y5MjA3MDIwNzQtMjA3OTIwODAtMjA4OTIxNTAtMjE1
RjIxODkyNDYwLTI0OUIyNEVBLTI0RkYyNzc2LTI3OTMyQ0ZEMzE5Mi0zMTk1MzIyMC0zMjI5MzI1
MS0zMjVGMzI4MC0zMjg5MzJCMS0zMkJGQTgzMC1BODM1IiwKLSAgICBQOiAgIjAwMjEtMDAyMzAw
MjUtMDAyQTAwMkMtMDAyRjAwM0EwMDNCMDAzRjAwNDAwMDVCLTAwNUQwMDVGMDA3QjAwN0QwMEEx
MDBBQjAwQjcwMEJCMDBCRjAzN0UwMzg3MDU1QS0wNTVGMDU4OTA1OEEwNUJFMDVDMDA1QzMwNUM2
MDVGMzA1RjQwNjA5MDYwQTA2MEMwNjBEMDYxQjA2MUUwNjFGMDY2QS0wNjZEMDZENDA3MDAtMDcw
RDA3RjctMDdGOTA4MzAtMDgzRTA5NjQwOTY1MDk3MDBERjQwRTRGMEU1QTBFNUIwRjA0LTBGMTIw
RjNBLTBGM0QwRjg1MEZEMC0wRkQ0MTA0QS0xMDRGMTBGQjEzNjEtMTM2ODE0MDAxNjZEMTY2RTE2
OUIxNjlDMTZFQi0xNkVEMTczNTE3MzYxN0Q0LTE3RDYxN0Q4LTE3REExODAwLTE4MEExOTQ0MTk0
NTE5REUxOURGMUExRTFBMUYxQUEwLTFBQTYxQUE4LTFBQUQxQjVBLTFCNjAxQzNCLTFDM0YxQzdF
MUM3RjFDRDMyMDEwLTIwMjcyMDMwLTIwNDMyMDQ1LTIwNTEyMDUzLTIwNUUyMDdEMjA3RTIwOEQy
MDhFMjMyOTIzMkEyNzY4LTI3NzUyN0M1MjdDNjI3RTYtMjdFRjI5ODMtMjk5ODI5RDgtMjlEQjI5
RkMyOUZEMkNGOS0yQ0ZDMkNGRTJDRkYyRTAwLTJFMkUyRTMwMkUzMTMwMDEtMzAwMzMwMDgtMzAx
MTMwMTQtMzAxRjMwMzAzMDNEMzBBMDMwRkJBNEZFQTRGRkE2MEQtQTYwRkE2NzNBNjdFQTZGMi1B
NkY3QTg3NC1BODc3QThDRUE4Q0ZBOEY4LUE4RkFBOTJFQTkyRkE5NUZBOUMxLUE5Q0RBOURFQTlE
RkFBNUMtQUE1RkFBREVBQURGQUJFQkZEM0VGRDNGRkUxMC1GRTE5RkUzMC1GRTUyRkU1NC1GRTYx
RkU2M0ZFNjhGRTZBRkU2QkZGMDEtRkYwM0ZGMDUtRkYwQUZGMEMtRkYwRkZGMUFGRjFCRkYxRkZG
MjBGRjNCLUZGM0RGRjNGRkY1QkZGNURGRjVGLUZGNjUiLAotICAgIFBkOiAiMDAyRDA1OEEwNUJF
MTQwMDE4MDYyMDEwLTIwMTUyRTE3MkUxQTMwMUMzMDMwMzBBMEZFMzFGRTMyRkU1OEZFNjNGRjBE
IiwKLSAgICBQczogIjAwMjgwMDVCMDA3QjBGM0EwRjNDMTY5QjIwMUEyMDFFMjA0NTIwN0QyMDhE
MjMyOTI3NjgyNzZBMjc2QzI3NkUyNzcwMjc3MjI3NzQyN0M1MjdFNjI3RTgyN0VBMjdFQzI3RUUy
OTgzMjk4NTI5ODcyOTg5Mjk4QjI5OEQyOThGMjk5MTI5OTMyOTk1Mjk5NzI5RDgyOURBMjlGQzJF
MjIyRTI0MkUyNjJFMjgzMDA4MzAwQTMwMEMzMDBFMzAxMDMwMTQzMDE2MzAxODMwMUEzMDFERkQz
RUZFMTdGRTM1RkUzN0ZFMzlGRTNCRkUzREZFM0ZGRTQxRkU0M0ZFNDdGRTU5RkU1QkZFNURGRjA4
RkYzQkZGNUJGRjVGRkY2MiIsCi0gICAgUGU6ICIwMDI5MDA1RDAwN0QwRjNCMEYzRDE2OUMyMDQ2
MjA3RTIwOEUyMzJBMjc2OTI3NkIyNzZEMjc2RjI3NzEyNzczMjc3NTI3QzYyN0U3MjdFOTI3RUIy
N0VEMjdFRjI5ODQyOTg2Mjk4ODI5OEEyOThDMjk4RTI5OTAyOTkyMjk5NDI5OTYyOTk4MjlEOTI5
REIyOUZEMkUyMzJFMjUyRTI3MkUyOTMwMDkzMDBCMzAwRDMwMEYzMDExMzAxNTMwMTczMDE5MzAx
QjMwMUUzMDFGRkQzRkZFMThGRTM2RkUzOEZFM0FGRTNDRkUzRUZFNDBGRTQyRkU0NEZFNDhGRTVB
RkU1Q0ZFNUVGRjA5RkYzREZGNURGRjYwRkY2MyIsCi0gICAgUGk6ICIwMEFCMjAxODIwMUIyMDFD
MjAxRjIwMzkyRTAyMkUwNDJFMDkyRTBDMkUxQzJFMjAiLAotICAgIFBmOiAiMDBCQjIwMTkyMDFE
MjAzQTJFMDMyRTA1MkUwQTJFMEQyRTFEMkUyMSIsCi0gICAgUGM6ICIwMDVGMjAzRjIwNDAyMDU0
RkUzM0ZFMzRGRTRELUZFNEZGRjNGIiwKLSAgICBQbzogIjAwMjEtMDAyMzAwMjUtMDAyNzAwMkEw
MDJDMDAyRTAwMkYwMDNBMDAzQjAwM0YwMDQwMDA1QzAwQTEwMEI3MDBCRjAzN0UwMzg3MDU1QS0w
NTVGMDU4OTA1QzAwNUMzMDVDNjA1RjMwNUY0MDYwOTA2MEEwNjBDMDYwRDA2MUIwNjFFMDYxRjA2
NkEtMDY2RDA2RDQwNzAwLTA3MEQwN0Y3LTA3RjkwODMwLTA4M0UwOTY0MDk2NTA5NzAwREY0MEU0
RjBFNUEwRTVCMEYwNC0wRjEyMEY4NTBGRDAtMEZENDEwNEEtMTA0RjEwRkIxMzYxLTEzNjgxNjZE
MTY2RTE2RUItMTZFRDE3MzUxNzM2MTdENC0xN0Q2MTdEOC0xN0RBMTgwMC0xODA1MTgwNy0xODBB
MTk0NDE5NDUxOURFMTlERjFBMUUxQTFGMUFBMC0xQUE2MUFBOC0xQUFEMUI1QS0xQjYwMUMzQi0x
QzNGMUM3RTFDN0YxQ0QzMjAxNjIwMTcyMDIwLTIwMjcyMDMwLTIwMzgyMDNCLTIwM0UyMDQxLTIw
NDMyMDQ3LTIwNTEyMDUzMjA1NS0yMDVFMkNGOS0yQ0ZDMkNGRTJDRkYyRTAwMkUwMTJFMDYtMkUw
ODJFMEIyRTBFLTJFMTYyRTE4MkUxOTJFMUIyRTFFMkUxRjJFMkEtMkUyRTJFMzAyRTMxMzAwMS0z
MDAzMzAzRDMwRkJBNEZFQTRGRkE2MEQtQTYwRkE2NzNBNjdFQTZGMi1BNkY3QTg3NC1BODc3QThD
RUE4Q0ZBOEY4LUE4RkFBOTJFQTkyRkE5NUZBOUMxLUE5Q0RBOURFQTlERkFBNUMtQUE1RkFBREVB
QURGQUJFQkZFMTAtRkUxNkZFMTlGRTMwRkU0NUZFNDZGRTQ5LUZFNENGRTUwLUZFNTJGRTU0LUZF
NTdGRTVGLUZFNjFGRTY4RkU2QUZFNkJGRjAxLUZGMDNGRjA1LUZGMDdGRjBBRkYwQ0ZGMEVGRjBG
RkYxQUZGMUJGRjFGRkYyMEZGM0NGRjYxRkY2NEZGNjUiLAotICAgIFM6ICAiMDAyNDAwMkIwMDND
LTAwM0UwMDVFMDA2MDAwN0MwMDdFMDBBMi0wMEE5MDBBQzAwQUUtMDBCMTAwQjQwMEI2MDBCODAw
RDcwMEY3MDJDMi0wMkM1MDJEMi0wMkRGMDJFNS0wMkVCMDJFRDAyRUYtMDJGRjAzNzUwMzg0MDM4
NTAzRjYwNDgyMDYwNi0wNjA4MDYwQjA2MEUwNjBGMDZFOTA2RkQwNkZFMDdGNjA5RjIwOUYzMDlG
QTA5RkIwQUYxMEI3MDBCRjMtMEJGQTBDN0YwQ0YxMENGMjBENzkwRTNGMEYwMS0wRjAzMEYxMy0w
RjE3MEYxQS0wRjFGMEYzNDBGMzYwRjM4MEZCRS0wRkM1MEZDNy0wRkNDMEZDRTBGQ0YwRkQ1LTBG
RDgxMDlFMTA5RjEzNjAxMzkwLTEzOTkxN0RCMTk0MDE5RTAtMTlGRjFCNjEtMUI2QTFCNzQtMUI3
QzFGQkQxRkJGLTFGQzExRkNELTFGQ0YxRkRELTFGREYxRkVELTFGRUYxRkZEMUZGRTIwNDQyMDUy
MjA3QS0yMDdDMjA4QS0yMDhDMjBBMC0yMEI4MjEwMDIxMDEyMTAzLTIxMDYyMTA4MjEwOTIxMTQy
MTE2LTIxMTgyMTFFLTIxMjMyMTI1MjEyNzIxMjkyMTJFMjEzQTIxM0IyMTQwLTIxNDQyMTRBLTIx
NEQyMTRGMjE5MC0yMzI4MjMyQi0yM0U4MjQwMC0yNDI2MjQ0MC0yNDRBMjQ5Qy0yNEU5MjUwMC0y
NkNEMjZDRi0yNkUxMjZFMzI2RTgtMjZGRjI3MDEtMjcwNDI3MDYtMjcwOTI3MEMtMjcyNzI3Mjkt
Mjc0QjI3NEQyNzRGLTI3NTIyNzU2LTI3NUUyNzYxLTI3NjcyNzk0Mjc5OC0yN0FGMjdCMS0yN0JF
MjdDMC0yN0M0MjdDNy0yN0NBMjdDQzI3RDAtMjdFNTI3RjAtMjk4MjI5OTktMjlENzI5REMtMjlG
QjI5RkUtMkI0QzJCNTAtMkI1OTJDRTUtMkNFQTJFODAtMkU5OTJFOUItMkVGMzJGMDAtMkZENTJG
RjAtMkZGQjMwMDQzMDEyMzAxMzMwMjAzMDM2MzAzNzMwM0UzMDNGMzA5QjMwOUMzMTkwMzE5MTMx
OTYtMzE5RjMxQzAtMzFFMzMyMDAtMzIxRTMyMkEtMzI1MDMyNjAtMzI3RjMyOEEtMzJCMDMyQzAt
MzJGRTMzMDAtMzNGRjREQzAtNERGRkE0OTAtQTRDNkE3MDAtQTcxNkE3MjBBNzIxQTc4OUE3OEFB
ODI4LUE4MkJBODM2LUE4MzlBQTc3LUFBNzlGQjI5RkRGQ0ZERkRGRTYyRkU2NC1GRTY2RkU2OUZG
MDRGRjBCRkYxQy1GRjFFRkYzRUZGNDBGRjVDRkY1RUZGRTAtRkZFNkZGRTgtRkZFRUZGRkNGRkZE
IiwKLSAgICBTbTogIjAwMkIwMDNDLTAwM0UwMDdDMDA3RTAwQUMwMEIxMDBENzAwRjcwM0Y2MDYw
Ni0wNjA4MjA0NDIwNTIyMDdBLTIwN0MyMDhBLTIwOEMyMTQwLTIxNDQyMTRCMjE5MC0yMTk0MjE5
QTIxOUIyMUEwMjFBMzIxQTYyMUFFMjFDRTIxQ0YyMUQyMjFENDIxRjQtMjJGRjIzMDgtMjMwQjIz
MjAyMzIxMjM3QzIzOUItMjNCMzIzREMtMjNFMTI1QjcyNUMxMjVGOC0yNUZGMjY2RjI3QzAtMjdD
NDI3QzctMjdDQTI3Q0MyN0QwLTI3RTUyN0YwLTI3RkYyOTAwLTI5ODIyOTk5LTI5RDcyOURDLTI5
RkIyOUZFLTJBRkYyQjMwLTJCNDQyQjQ3LTJCNENGQjI5RkU2MkZFNjQtRkU2NkZGMEJGRjFDLUZG
MUVGRjVDRkY1RUZGRTJGRkU5LUZGRUMiLAotICAgIFNjOiAiMDAyNDAwQTItMDBBNTA2MEIwOUYy
MDlGMzA5RkIwQUYxMEJGOTBFM0YxN0RCMjBBMC0yMEI4QTgzOEZERkNGRTY5RkYwNEZGRTBGRkUx
RkZFNUZGRTYiLAotICAgIFNrOiAiMDA1RTAwNjAwMEE4MDBBRjAwQjQwMEI4MDJDMi0wMkM1MDJE
Mi0wMkRGMDJFNS0wMkVCMDJFRDAyRUYtMDJGRjAzNzUwMzg0MDM4NTFGQkQxRkJGLTFGQzExRkNE
LTFGQ0YxRkRELTFGREYxRkVELTFGRUYxRkZEMUZGRTMwOUIzMDlDQTcwMC1BNzE2QTcyMEE3MjFB
Nzg5QTc4QUZGM0VGRjQwRkZFMyIsCi0gICAgU286ICIwMEE2MDBBNzAwQTkwMEFFMDBCMDAwQjYw
NDgyMDYwRTA2MEYwNkU5MDZGRDA2RkUwN0Y2MDlGQTBCNzAwQkYzLTBCRjgwQkZBMEM3RjBDRjEw
Q0YyMEQ3OTBGMDEtMEYwMzBGMTMtMEYxNzBGMUEtMEYxRjBGMzQwRjM2MEYzODBGQkUtMEZDNTBG
QzctMEZDQzBGQ0UwRkNGMEZENS0wRkQ4MTA5RTEwOUYxMzYwMTM5MC0xMzk5MTk0MDE5RTAtMTlG
RjFCNjEtMUI2QTFCNzQtMUI3QzIxMDAyMTAxMjEwMy0yMTA2MjEwODIxMDkyMTE0MjExNi0yMTE4
MjExRS0yMTIzMjEyNTIxMjcyMTI5MjEyRTIxM0EyMTNCMjE0QTIxNEMyMTREMjE0RjIxOTUtMjE5
OTIxOUMtMjE5RjIxQTEyMUEyMjFBNDIxQTUyMUE3LTIxQUQyMUFGLTIxQ0QyMUQwMjFEMTIxRDMy
MUQ1LTIxRjMyMzAwLTIzMDcyMzBDLTIzMUYyMzIyLTIzMjgyMzJCLTIzN0IyMzdELTIzOUEyM0I0
LTIzREIyM0UyLTIzRTgyNDAwLTI0MjYyNDQwLTI0NEEyNDlDLTI0RTkyNTAwLTI1QjYyNUI4LTI1
QzAyNUMyLTI1RjcyNjAwLTI2NkUyNjcwLTI2Q0QyNkNGLTI2RTEyNkUzMjZFOC0yNkZGMjcwMS0y
NzA0MjcwNi0yNzA5MjcwQy0yNzI3MjcyOS0yNzRCMjc0RDI3NEYtMjc1MjI3NTYtMjc1RTI3NjEt
Mjc2NzI3OTQyNzk4LTI3QUYyN0IxLTI3QkUyODAwLTI4RkYyQjAwLTJCMkYyQjQ1MkI0NjJCNTAt
MkI1OTJDRTUtMkNFQTJFODAtMkU5OTJFOUItMkVGMzJGMDAtMkZENTJGRjAtMkZGQjMwMDQzMDEy
MzAxMzMwMjAzMDM2MzAzNzMwM0UzMDNGMzE5MDMxOTEzMTk2LTMxOUYzMUMwLTMxRTMzMjAwLTMy
MUUzMjJBLTMyNTAzMjYwLTMyN0YzMjhBLTMyQjAzMkMwLTMyRkUzMzAwLTMzRkY0REMwLTRERkZB
NDkwLUE0QzZBODI4LUE4MkJBODM2QTgzN0E4MzlBQTc3LUFBNzlGREZERkZFNEZGRThGRkVERkZF
RUZGRkNGRkZEIiwKLSAgICBaOiAgIjAwMjAwMEEwMTY4MDE4MEUyMDAwLTIwMEEyMDI4MjAyOTIw
MkYyMDVGMzAwMCIsCi0gICAgWnM6ICIwMDIwMDBBMDE2ODAxODBFMjAwMC0yMDBBMjAyRjIwNUYz
MDAwIiwKLSAgICBabDogIjIwMjgiLAotICAgIFpwOiAiMjAyOSIsCi0gICAgQzogICIwMDAwLTAw
MUYwMDdGLTAwOUYwMEFEMDM3ODAzNzkwMzdGLTAzODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3
MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0wNUNGMDVFQi0wNUVGMDVGNS0wNjA1MDYxQzA2MUQw
NjIwMDY1RjA2REQwNzBFMDcwRjA3NEIwNzRDMDdCMi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNG
LTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5NzMtMDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5
MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIwOUM1MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0w
OURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEwNDBBMEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0
MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBBNDkwQTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBB
NUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5MjBBQTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0Ew
QUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFGMDBBRjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEy
MEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0NjBCNDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1
RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEItMEI4RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAt
MEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEtMEJCRDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEt
MEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQwQzBEMEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBD
NDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2NDBDNjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhE
MEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MENDOTBDQ0UtMENENDBDRDctMENERDBDREYwQ0U0MENF
NTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEwRDI5MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYw
RDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBEODAwRDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERC
RTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1MERENzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUz
RTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkwRThCMEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBF
QTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYwRUM1MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBF
RkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5ODBGQkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBG
RC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkxMjVFMTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJC
NzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEzMTYxMzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0x
MzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0xNkZGMTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQt
MTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdCNDE3QjUxN0RFMTdERjE3RUEtMTdFRjE3RkEtMTdGRjE4
MEYxODFBLTE4MUYxODc4LTE4N0YxOEFCLTE4QUYxOEY2LTE4RkYxOTFELTE5MUYxOTJDLTE5MkYx
OTNDLTE5M0YxOTQxLTE5NDMxOTZFMTk2RjE5NzUtMTk3RjE5QUMtMTlBRjE5Q0EtMTlDRjE5REIt
MTlERDFBMUMxQTFEMUE1RjFBN0QxQTdFMUE4QS0xQThGMUE5QS0xQTlGMUFBRS0xQUZGMUI0Qy0x
QjRGMUI3RC0xQjdGMUJBQi0xQkFEMUJCQS0xQkZGMUMzOC0xQzNBMUM0QS0xQzRDMUM4MC0xQ0NG
MUNGMy0xQ0ZGMURFNy0xREZDMUYxNjFGMTcxRjFFMUYxRjFGNDYxRjQ3MUY0RTFGNEYxRjU4MUY1
QTFGNUMxRjVFMUY3RTFGN0YxRkI1MUZDNTFGRDQxRkQ1MUZEQzFGRjAxRkYxMUZGNTFGRkYyMDBC
LTIwMEYyMDJBLTIwMkUyMDYwLTIwNkYyMDcyMjA3MzIwOEYyMDk1LTIwOUYyMEI5LTIwQ0YyMEYx
LTIwRkYyMThBLTIxOEYyM0U5LTIzRkYyNDI3LTI0M0YyNDRCLTI0NUYyNkNFMjZFMjI2RTQtMjZF
NzI3MDAyNzA1MjcwQTI3MEIyNzI4Mjc0QzI3NEUyNzUzLTI3NTUyNzVGMjc2MDI3OTUtMjc5NzI3
QjAyN0JGMjdDQjI3Q0QtMjdDRjJCNEQtMkI0RjJCNUEtMkJGRjJDMkYyQzVGMkNGMi0yQ0Y4MkQy
Ni0yRDJGMkQ2Ni0yRDZFMkQ3MC0yRDdGMkQ5Ny0yRDlGMkRBNzJEQUYyREI3MkRCRjJEQzcyRENG
MkRENzJEREYyRTMyLTJFN0YyRTlBMkVGNC0yRUZGMkZENi0yRkVGMkZGQy0yRkZGMzA0MDMwOTcz
MDk4MzEwMC0zMTA0MzEyRS0zMTMwMzE4RjMxQjgtMzFCRjMxRTQtMzFFRjMyMUYzMkZGNERCNi00
REJGOUZDQy05RkZGQTQ4RC1BNDhGQTRDNy1BNENGQTYyQy1BNjNGQTY2MEE2NjFBNjc0LUE2N0JB
Njk4LUE2OUZBNkY4LUE2RkZBNzhELUE3RkFBODJDLUE4MkZBODNBLUE4M0ZBODc4LUE4N0ZBOEM1
LUE4Q0RBOERBLUE4REZBOEZDLUE4RkZBOTU0LUE5NUVBOTdELUE5N0ZBOUNFQTlEQS1BOUREQTlF
MC1BOUZGQUEzNy1BQTNGQUE0RUFBNEZBQTVBQUE1QkFBN0MtQUE3RkFBQzMtQUFEQUFBRTAtQUJC
RkFCRUVBQkVGQUJGQS1BQkZGRDdBNC1EN0FGRDdDNy1EN0NBRDdGQy1GOEZGRkEyRUZBMkZGQTZF
RkE2RkZBREEtRkFGRkZCMDctRkIxMkZCMTgtRkIxQ0ZCMzdGQjNERkIzRkZCNDJGQjQ1RkJCMi1G
QkQyRkQ0MC1GRDRGRkQ5MEZEOTFGREM4LUZERUZGREZFRkRGRkZFMUEtRkUxRkZFMjctRkUyRkZF
NTNGRTY3RkU2Qy1GRTZGRkU3NUZFRkQtRkYwMEZGQkYtRkZDMUZGQzhGRkM5RkZEMEZGRDFGRkQ4
RkZEOUZGREQtRkZERkZGRTdGRkVGLUZGRkJGRkZFRkZGRiIsCi0gICAgQ2M6ICIwMDAwLTAwMUYw
MDdGLTAwOUYiLAotICAgIENmOiAiMDBBRDA2MDAtMDYwMzA2REQwNzBGMTdCNDE3QjUyMDBCLTIw
MEYyMDJBLTIwMkUyMDYwLTIwNjQyMDZBLTIwNkZGRUZGRkZGOS1GRkZCIiwKLSAgICBDbzogIkUw
MDAtRjhGRiIsCi0gICAgQ3M6ICJEODAwLURGRkYiLAotICAgIENuOiAiMDM3ODAzNzkwMzdGLTAz
ODMwMzhCMDM4RDAzQTIwNTI2LTA1MzAwNTU3MDU1ODA1NjAwNTg4MDU4Qi0wNTkwMDVDOC0wNUNG
MDVFQi0wNUVGMDVGNS0wNUZGMDYwNDA2MDUwNjFDMDYxRDA2MjAwNjVGMDcwRTA3NEIwNzRDMDdC
Mi0wN0JGMDdGQi0wN0ZGMDgyRTA4MkYwODNGLTA4RkYwOTNBMDkzQjA5NEYwOTU2MDk1NzA5NzMt
MDk3ODA5ODAwOTg0MDk4RDA5OEUwOTkxMDk5MjA5QTkwOUIxMDlCMy0wOUI1MDlCQTA5QkIwOUM1
MDlDNjA5QzkwOUNBMDlDRi0wOUQ2MDlEOC0wOURCMDlERTA5RTQwOUU1MDlGQy0wQTAwMEEwNDBB
MEItMEEwRTBBMTEwQTEyMEEyOTBBMzEwQTM0MEEzNzBBM0EwQTNCMEEzRDBBNDMtMEE0NjBBNDkw
QTRBMEE0RS0wQTUwMEE1Mi0wQTU4MEE1RDBBNUYtMEE2NTBBNzYtMEE4MDBBODQwQThFMEE5MjBB
QTkwQUIxMEFCNDBBQkEwQUJCMEFDNjBBQ0EwQUNFMEFDRjBBRDEtMEFERjBBRTQwQUU1MEFGMDBB
RjItMEIwMDBCMDQwQjBEMEIwRTBCMTEwQjEyMEIyOTBCMzEwQjM0MEIzQTBCM0IwQjQ1MEI0NjBC
NDkwQjRBMEI0RS0wQjU1MEI1OC0wQjVCMEI1RTBCNjQwQjY1MEI3Mi0wQjgxMEI4NDBCOEItMEI4
RDBCOTEwQjk2LTBCOTgwQjlCMEI5RDBCQTAtMEJBMjBCQTUtMEJBNzBCQUItMEJBRDBCQkEtMEJC
RDBCQzMtMEJDNTBCQzkwQkNFMEJDRjBCRDEtMEJENjBCRDgtMEJFNTBCRkItMEMwMDBDMDQwQzBE
MEMxMTBDMjkwQzM0MEMzQS0wQzNDMEM0NTBDNDkwQzRFLTBDNTQwQzU3MEM1QS0wQzVGMEM2NDBD
NjUwQzcwLTBDNzcwQzgwMEM4MTBDODQwQzhEMEM5MTBDQTkwQ0I0MENCQTBDQkIwQ0M1MENDOTBD
Q0UtMENENDBDRDctMENERDBDREYwQ0U0MENFNTBDRjAwQ0YzLTBEMDEwRDA0MEQwRDBEMTEwRDI5
MEQzQS0wRDNDMEQ0NTBENDkwRDRFLTBENTYwRDU4LTBENUYwRDY0MEQ2NTBENzYtMEQ3ODBEODAw
RDgxMEQ4NDBEOTctMEQ5OTBEQjIwREJDMERCRTBEQkYwREM3LTBEQzkwRENCLTBEQ0UwREQ1MERE
NzBERTAtMERGMTBERjUtMEUwMDBFM0ItMEUzRTBFNUMtMEU4MDBFODMwRTg1MEU4NjBFODkwRThC
MEU4QzBFOEUtMEU5MzBFOTgwRUEwMEVBNDBFQTYwRUE4MEVBOTBFQUMwRUJBMEVCRTBFQkYwRUM1
MEVDNzBFQ0UwRUNGMEVEQTBFREIwRURFLTBFRkYwRjQ4MEY2RC0wRjcwMEY4Qy0wRjhGMEY5ODBG
QkQwRkNEMEZEOS0wRkZGMTBDNi0xMENGMTBGRC0xMEZGMTI0OTEyNEUxMjRGMTI1NzEyNTkxMjVF
MTI1RjEyODkxMjhFMTI4RjEyQjExMkI2MTJCNzEyQkYxMkMxMTJDNjEyQzcxMkQ3MTMxMTEzMTYx
MzE3MTM1Qi0xMzVFMTM3RC0xMzdGMTM5QS0xMzlGMTNGNS0xM0ZGMTY5RC0xNjlGMTZGMS0xNkZG
MTcwRDE3MTUtMTcxRjE3MzctMTczRjE3NTQtMTc1RjE3NkQxNzcxMTc3NC0xNzdGMTdERTE3REYx
N0VBLTE3RUYxN0ZBLTE3RkYxODBGMTgxQS0xODFGMTg3OC0xODdGMThBQi0xOEFGMThGNi0xOEZG
MTkxRC0xOTFGMTkyQy0xOTJGMTkzQy0xOTNGMTk0MS0xOTQzMTk2RTE5NkYxOTc1LTE5N0YxOUFD
LTE5QUYxOUNBLTE5Q0YxOURCLTE5REQxQTFDMUExRDFBNUYxQTdEMUE3RTFBOEEtMUE4RjFBOUEt
MUE5RjFBQUUtMUFGRjFCNEMtMUI0RjFCN0QtMUI3RjFCQUItMUJBRDFCQkEtMUJGRjFDMzgtMUMz
QTFDNEEtMUM0QzFDODAtMUNDRjFDRjMtMUNGRjFERTctMURGQzFGMTYxRjE3MUYxRTFGMUYxRjQ2
MUY0NzFGNEUxRjRGMUY1ODFGNUExRjVDMUY1RTFGN0UxRjdGMUZCNTFGQzUxRkQ0MUZENTFGREMx
RkYwMUZGMTFGRjUxRkZGMjA2NS0yMDY5MjA3MjIwNzMyMDhGMjA5NS0yMDlGMjBCOS0yMENGMjBG
MS0yMEZGMjE4QS0yMThGMjNFOS0yM0ZGMjQyNy0yNDNGMjQ0Qi0yNDVGMjZDRTI2RTIyNkU0LTI2
RTcyNzAwMjcwNTI3MEEyNzBCMjcyODI3NEMyNzRFMjc1My0yNzU1Mjc1RjI3NjAyNzk1LTI3OTcy
N0IwMjdCRjI3Q0IyN0NELTI3Q0YyQjRELTJCNEYyQjVBLTJCRkYyQzJGMkM1RjJDRjItMkNGODJE
MjYtMkQyRjJENjYtMkQ2RTJENzAtMkQ3RjJEOTctMkQ5RjJEQTcyREFGMkRCNzJEQkYyREM3MkRD
RjJERDcyRERGMkUzMi0yRTdGMkU5QTJFRjQtMkVGRjJGRDYtMkZFRjJGRkMtMkZGRjMwNDAzMDk3
MzA5ODMxMDAtMzEwNDMxMkUtMzEzMDMxOEYzMUI4LTMxQkYzMUU0LTMxRUYzMjFGMzJGRjREQjYt
NERCRjlGQ0MtOUZGRkE0OEQtQTQ4RkE0QzctQTRDRkE2MkMtQTYzRkE2NjBBNjYxQTY3NC1BNjdC
QTY5OC1BNjlGQTZGOC1BNkZGQTc4RC1BN0ZBQTgyQy1BODJGQTgzQS1BODNGQTg3OC1BODdGQThD
NS1BOENEQThEQS1BOERGQThGQy1BOEZGQTk1NC1BOTVFQTk3RC1BOTdGQTlDRUE5REEtQTlEREE5
RTAtQTlGRkFBMzctQUEzRkFBNEVBQTRGQUE1QUFBNUJBQTdDLUFBN0ZBQUMzLUFBREFBQUUwLUFC
QkZBQkVFQUJFRkFCRkEtQUJGRkQ3QTQtRDdBRkQ3QzctRDdDQUQ3RkMtRDdGRkZBMkVGQTJGRkE2
RUZBNkZGQURBLUZBRkZGQjA3LUZCMTJGQjE4LUZCMUNGQjM3RkIzREZCM0ZGQjQyRkI0NUZCQjIt
RkJEMkZENDAtRkQ0RkZEOTBGRDkxRkRDOC1GREVGRkRGRUZERkZGRTFBLUZFMUZGRTI3LUZFMkZG
RTUzRkU2N0ZFNkMtRkU2RkZFNzVGRUZERkVGRUZGMDBGRkJGLUZGQzFGRkM4RkZDOUZGRDBGRkQx
RkZEOEZGRDlGRkRELUZGREZGRkU3RkZFRi1GRkY4RkZGRUZGRkYiCi19KTsKLQotZnVuY3Rpb24g
YWRkVW5pY29kZVBhY2thZ2UgKHBhY2spIHsKLSAgICB2YXIgY29kZVBvaW50ID0gL1x3ezR9L2c7
Ci0gICAgZm9yICh2YXIgbmFtZSBpbiBwYWNrKQotICAgICAgICBleHBvcnRzLnBhY2thZ2VzW25h
bWVdID0gcGFja1tuYW1lXS5yZXBsYWNlKGNvZGVQb2ludCwgIlxcdSQmIik7Ci19OwotCi19KTsK
LQotYWNlLmRlZmluZSgnYWNlL2RvY3VtZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3Jhbmdl
JywgJ2FjZS9hbmNob3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0K
LQotdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwotdmFyIEV2ZW50RW1pdHRlciA9IHJl
cXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Ci12YXIgUmFuZ2UgPSBy
ZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Ci12YXIgQW5jaG9yID0gcmVxdWlyZSgiLi9hbmNob3Ii
KS5BbmNob3I7Ci0KLXZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHQpIHsKLSAgICB0aGlzLiRs
aW5lcyA9IFtdOwotICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgIHRoaXMuJGxp
bmVzID0gWyIiXTsKLSAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHsKLSAgICAg
ICAgdGhpcy5pbnNlcnRMaW5lcygwLCB0ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aGlz
Lmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHQpOwotICAgIH0KLX07Ci0KLShmdW5jdGlv
bigpIHsKLQotICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKLSAgICB0aGlz
LnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewotICAgICAgICB2YXIgbGVuID0gdGhpcy5nZXRM
ZW5ndGgoKTsKLSAgICAgICAgdGhpcy5yZW1vdmUobmV3IFJhbmdlKDAsIDAsIGxlbiwgdGhpcy5n
ZXRMaW5lKGxlbi0xKS5sZW5ndGgpKTsKLSAgICAgICAgdGhpcy5pbnNlcnQoe3JvdzogMCwgY29s
dW1uOjB9LCB0ZXh0KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNo
YXJhY3RlcigpKTsKLSAgICB9OwotICAgIHRoaXMuY3JlYXRlQW5jaG9yID0gZnVuY3Rpb24ocm93
LCBjb2x1bW4pIHsKLSAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4p
OwotICAgIH07Ci0gICAgaWYgKCJhYWEiLnNwbGl0KC9hLykubGVuZ3RoID09IDApCi0gICAgICAg
IHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIHRleHQu
cmVwbGFjZSgvXHJcbnxcci9nLCAiXG4iKS5zcGxpdCgiXG4iKTsKLSAgICAgICAgfQotICAgIGVs
c2UKLSAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwotICAgICAgICB9OwotCi0KLSAKLSAgICB0
aGlzLiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewotICAgICAgICB2YXIgbWF0Y2gg
PSB0ZXh0Lm1hdGNoKC9eLio/KFxyXG58XHJ8XG4pL20pOwotICAgICAgICBpZiAobWF0Y2gpIHsK
LSAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gbWF0Y2hbMV07Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9ICJcbiI7Ci0gICAgICAgIH0KLSAg
ICB9OwotICAgIHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlciA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7Ci0gICAgICAgICAgY2FzZSAid2luZG93cyI6
Ci0gICAgICAgICAgICByZXR1cm4gIlxyXG4iOwotCi0gICAgICAgICAgY2FzZSAidW5peCI6Ci0g
ICAgICAgICAgICByZXR1cm4gIlxuIjsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpcy4kYXV0b05ld0xpbmU7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhp
cy4kYXV0b05ld0xpbmUgPSAiXG4iOwotICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwot
ICAgIHRoaXMuc2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbihuZXdMaW5lTW9kZSkgewotICAgICAg
ICBpZiAodGhpcy4kbmV3TGluZU1vZGUgPT09IG5ld0xpbmVNb2RlKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gbmV3TGluZU1vZGU7Ci0gICAgfTsK
LSAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLiRuZXdMaW5lTW9kZTsKLSAgICB9OwotICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24o
dGV4dCkgewotICAgICAgICByZXR1cm4gKHRleHQgPT0gIlxyXG4iIHx8IHRleHQgPT0gIlxyIiB8
fCB0ZXh0ID09ICJcbiIpOwotICAgIH07Ci0gICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93
KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRsaW5lc1tyb3ddIHx8ICIiOwotICAgIH07Ci0gICAg
dGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdywgbGFzdFJvdyArIDEpOwotICAgIH07Ci0g
ICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5n
ZXRMaW5lcygwLCB0aGlzLmdldExlbmd0aCgpKTsKLSAgICB9OwotICAgIHRoaXMuZ2V0TGVuZ3Ro
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRsaW5lcy5sZW5ndGg7Ci0gICAg
fTsKLSAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIGlm
IChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykgewotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuJGxpbmVzW3JhbmdlLnN0YXJ0LnJvd10uc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVt
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJhbmdlLmVuZC5jb2x1bW4pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgdmFyIGxpbmVzID0gdGhpcy5nZXRMaW5lcyhyYW5nZS5zdGFydC5yb3crMSwgcmFuZ2Uu
ZW5kLnJvdy0xKTsKLSAgICAgICAgICAgIGxpbmVzLnVuc2hpZnQoKHRoaXMuJGxpbmVzW3Jhbmdl
LnN0YXJ0LnJvd10gfHwgIiIpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4pKTsKLSAgICAg
ICAgICAgIGxpbmVzLnB1c2goKHRoaXMuJGxpbmVzW3JhbmdlLmVuZC5yb3ddIHx8ICIiKS5zdWJz
dHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbikpOwotICAgICAgICAgICAgcmV0dXJuIGxpbmVzLmpv
aW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRoaXMuJGNsaXBQb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7Ci0gICAgICAgIHZhciBs
ZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwotICAgICAgICBpZiAocG9zaXRpb24ucm93ID49IGxl
bmd0aCkgewotICAgICAgICAgICAgcG9zaXRpb24ucm93ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0g
MSk7Ci0gICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoLTEp
Lmxlbmd0aDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgfTsKLSAg
ICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7Ci0gICAgICAgIGlmICgh
dGV4dCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
LQotICAgICAgICBwb3NpdGlvbiA9IHRoaXMuJGNsaXBQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAg
ICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCi0gICAgICAgICAgICB0aGlzLiRkZXRlY3RO
ZXdMaW5lKHRleHQpOwotCi0gICAgICAgIHZhciBsaW5lcyA9IHRoaXMuJHNwbGl0KHRleHQpOwot
ICAgICAgICB2YXIgZmlyc3RMaW5lID0gbGluZXMuc3BsaWNlKDAsIDEpWzBdOwotICAgICAgICB2
YXIgbGFzdExpbmUgPSBsaW5lcy5sZW5ndGggPT0gMCA/IG51bGwgOiBsaW5lcy5zcGxpY2UobGlu
ZXMubGVuZ3RoIC0gMSwgMSlbMF07Ci0KLSAgICAgICAgcG9zaXRpb24gPSB0aGlzLmluc2VydElu
TGluZShwb3NpdGlvbiwgZmlyc3RMaW5lKTsKLSAgICAgICAgaWYgKGxhc3RMaW5lICE9PSBudWxs
KSB7Ci0gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5zZXJ0TmV3TGluZShwb3NpdGlvbik7
IC8vIHRlcm1pbmF0ZSBmaXJzdCBsaW5lCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuaW5z
ZXJ0TGluZXMocG9zaXRpb24ucm93LCBsaW5lcyk7Ci0gICAgICAgICAgICBwb3NpdGlvbiA9IHRo
aXMuaW5zZXJ0SW5MaW5lKHBvc2l0aW9uLCBsYXN0TGluZSB8fCAiIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHBvc2l0aW9uOwotICAgIH07Ci0gICAgdGhpcy5pbnNlcnRMaW5lcyA9IGZ1
bmN0aW9uKHJvdywgbGluZXMpIHsKLSAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwKQotICAg
ICAgICAgICAgcmV0dXJuIHtyb3c6IHJvdywgY29sdW1uOiAwfTsKLSAgICAgICAgaWYgKGxpbmVz
Lmxlbmd0aCA+IDB4RkZGRikgewotICAgICAgICAgICAgdmFyIGVuZCA9IHRoaXMuaW5zZXJ0TGlu
ZXMocm93LCBsaW5lcy5zbGljZSgweEZGRkYpKTsKLSAgICAgICAgICAgIGxpbmVzID0gbGluZXMu
c2xpY2UoMCwgMHhGRkZGKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBhcmdzID0gW3Jvdywg
MF07Ci0gICAgICAgIGFyZ3MucHVzaC5hcHBseShhcmdzLCBsaW5lcyk7Ci0gICAgICAgIHRoaXMu
JGxpbmVzLnNwbGljZS5hcHBseSh0aGlzLiRsaW5lcywgYXJncyk7Ci0KLSAgICAgICAgdmFyIHJh
bmdlID0gbmV3IFJhbmdlKHJvdywgMCwgcm93ICsgbGluZXMubGVuZ3RoLCAwKTsKLSAgICAgICAg
dmFyIGRlbHRhID0gewotICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0TGluZXMiLAotICAgICAg
ICAgICAgcmFuZ2U6IHJhbmdlLAotICAgICAgICAgICAgbGluZXM6IGxpbmVzCi0gICAgICAgIH07
Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7Ci0gICAgICAg
IHJldHVybiBlbmQgfHwgcmFuZ2UuZW5kOwotICAgIH07Ci0gICAgdGhpcy5pbnNlcnROZXdMaW5l
ID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKLSAgICAgICAgcG9zaXRpb24gPSB0aGlzLiRjbGlwUG9z
aXRpb24ocG9zaXRpb24pOwotICAgICAgICB2YXIgbGluZSA9IHRoaXMuJGxpbmVzW3Bvc2l0aW9u
LnJvd10gfHwgIiI7Ci0KLSAgICAgICAgdGhpcy4kbGluZXNbcG9zaXRpb24ucm93XSA9IGxpbmUu
c3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbik7Ci0gICAgICAgIHRoaXMuJGxpbmVzLnNwbGlj
ZShwb3NpdGlvbi5yb3cgKyAxLCAwLCBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbi5jb2x1bW4sIGxp
bmUubGVuZ3RoKSk7Ci0KLSAgICAgICAgdmFyIGVuZCA9IHsKLSAgICAgICAgICAgIHJvdyA6IHBv
c2l0aW9uLnJvdyArIDEsCi0gICAgICAgICAgICBjb2x1bW4gOiAwCi0gICAgICAgIH07Ci0KLSAg
ICAgICAgdmFyIGRlbHRhID0gewotICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0VGV4dCIsCi0g
ICAgICAgICAgICByYW5nZTogUmFuZ2UuZnJvbVBvaW50cyhwb3NpdGlvbiwgZW5kKSwKLSAgICAg
ICAgICAgIHRleHQ6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpCi0gICAgICAgIH07Ci0gICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7Ci0KLSAgICAgICAgcmV0
dXJuIGVuZDsKLSAgICB9OwotICAgIHRoaXMuaW5zZXJ0SW5MaW5lID0gZnVuY3Rpb24ocG9zaXRp
b24sIHRleHQpIHsKLSAgICAgICAgaWYgKHRleHQubGVuZ3RoID09IDApCi0gICAgICAgICAgICBy
ZXR1cm4gcG9zaXRpb247Ci0KLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLiRsaW5lc1twb3NpdGlv
bi5yb3ddIHx8ICIiOwotCi0gICAgICAgIHRoaXMuJGxpbmVzW3Bvc2l0aW9uLnJvd10gPSBsaW5l
LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4pICsgdGV4dAotICAgICAgICAgICAgICAgICsg
bGluZS5zdWJzdHJpbmcocG9zaXRpb24uY29sdW1uKTsKLQotICAgICAgICB2YXIgZW5kID0gewot
ICAgICAgICAgICAgcm93IDogcG9zaXRpb24ucm93LAotICAgICAgICAgICAgY29sdW1uIDogcG9z
aXRpb24uY29sdW1uICsgdGV4dC5sZW5ndGgKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgZGVs
dGEgPSB7Ci0gICAgICAgICAgICBhY3Rpb246ICJpbnNlcnRUZXh0IiwKLSAgICAgICAgICAgIHJh
bmdlOiBSYW5nZS5mcm9tUG9pbnRzKHBvc2l0aW9uLCBlbmQpLAotICAgICAgICAgICAgdGV4dDog
dGV4dAotICAgICAgICB9OwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRl
bHRhIH0pOwotCi0gICAgICAgIHJldHVybiBlbmQ7Ci0gICAgfTsKLSAgICB0aGlzLnJlbW92ZSA9
IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHJhbmdlLnN0YXJ0ID0gdGhpcy4kY2xpcFBvc2l0
aW9uKHJhbmdlLnN0YXJ0KTsKLSAgICAgICAgcmFuZ2UuZW5kID0gdGhpcy4kY2xpcFBvc2l0aW9u
KHJhbmdlLmVuZCk7Ci0KLSAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJldHVybiByYW5nZS5zdGFydDsKLQotICAgICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZS5zdGFy
dC5yb3c7Ci0gICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UuZW5kLnJvdzsKLQotICAgICAgICBp
ZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSkgewotICAgICAgICAgICAgdmFyIGZpcnN0RnVsbFJvdyA9
IHJhbmdlLnN0YXJ0LmNvbHVtbiA9PSAwID8gZmlyc3RSb3cgOiBmaXJzdFJvdyArIDE7Ci0gICAg
ICAgICAgICB2YXIgbGFzdEZ1bGxSb3cgPSBsYXN0Um93IC0gMTsKLQotICAgICAgICAgICAgaWYg
KHJhbmdlLmVuZC5jb2x1bW4gPiAwKQotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5MaW5l
KGxhc3RSb3csIDAsIHJhbmdlLmVuZC5jb2x1bW4pOwotCi0gICAgICAgICAgICBpZiAobGFzdEZ1
bGxSb3cgPj0gZmlyc3RGdWxsUm93KQotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMo
Zmlyc3RGdWxsUm93LCBsYXN0RnVsbFJvdyk7Ci0KLSAgICAgICAgICAgIGlmIChmaXJzdEZ1bGxS
b3cgIT0gZmlyc3RSb3cpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluTGluZShmaXJz
dFJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCB0aGlzLmdldExpbmUoZmlyc3RSb3cpLmxlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOZXdMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlz
LnJlbW92ZUluTGluZShmaXJzdFJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29s
dW1uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7Ci0gICAgfTsKLSAg
ICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVt
bikgewotICAgICAgICBpZiAoc3RhcnRDb2x1bW4gPT0gZW5kQ29sdW1uKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIHN0YXJ0Q29sdW1u
LCByb3csIGVuZENvbHVtbik7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7
Ci0gICAgICAgIHZhciByZW1vdmVkID0gbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4sIGVuZENv
bHVtbik7Ci0gICAgICAgIHZhciBuZXdMaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1
bW4pICsgbGluZS5zdWJzdHJpbmcoZW5kQ29sdW1uLCBsaW5lLmxlbmd0aCk7Ci0gICAgICAgIHRo
aXMuJGxpbmVzLnNwbGljZShyb3csIDEsIG5ld0xpbmUpOwotCi0gICAgICAgIHZhciBkZWx0YSA9
IHsKLSAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZVRleHQiLAotICAgICAgICAgICAgcmFuZ2U6
IHJhbmdlLAotICAgICAgICAgICAgdGV4dDogcmVtb3ZlZAotICAgICAgICB9OwotICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOwotICAgICAgICByZXR1cm4gcmFu
Z2Uuc3RhcnQ7Ci0gICAgfTsKLSAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RS
b3csIGxhc3RSb3cpIHsKLSAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKGZpcnN0Um93LCAw
LCBsYXN0Um93ICsgMSwgMCk7Ci0gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy4kbGluZXMuc3Bs
aWNlKGZpcnN0Um93LCBsYXN0Um93IC0gZmlyc3RSb3cgKyAxKTsKLQotICAgICAgICB2YXIgZGVs
dGEgPSB7Ci0gICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVMaW5lcyIsCi0gICAgICAgICAgICBy
YW5nZTogcmFuZ2UsCi0gICAgICAgICAgICBubDogdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCks
Ci0gICAgICAgICAgICBsaW5lczogcmVtb3ZlZAotICAgICAgICB9OwotICAgICAgICB0aGlzLl9l
bWl0KCJjaGFuZ2UiLCB7IGRhdGE6IGRlbHRhIH0pOwotICAgICAgICByZXR1cm4gcmVtb3ZlZDsK
LSAgICB9OwotICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewotICAgICAg
ICB2YXIgZmlyc3RMaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7Ci0gICAgICAgIHZhciBzZWNvbmRM
aW5lID0gdGhpcy5nZXRMaW5lKHJvdysxKTsKLQotICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFu
Z2Uocm93LCBmaXJzdExpbmUubGVuZ3RoLCByb3crMSwgMCk7Ci0gICAgICAgIHZhciBsaW5lID0g
Zmlyc3RMaW5lICsgc2Vjb25kTGluZTsKLQotICAgICAgICB0aGlzLiRsaW5lcy5zcGxpY2Uocm93
LCAyLCBsaW5lKTsKLQotICAgICAgICB2YXIgZGVsdGEgPSB7Ci0gICAgICAgICAgICBhY3Rpb246
ICJyZW1vdmVUZXh0IiwKLSAgICAgICAgICAgIHJhbmdlOiByYW5nZSwKLSAgICAgICAgICAgIHRl
eHQ6IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpCi0gICAgICAgIH07Ci0gICAgICAgIHRoaXMu
X2VtaXQoImNoYW5nZSIsIHsgZGF0YTogZGVsdGEgfSk7Ci0gICAgfTsKLSAgICB0aGlzLnJlcGxh
Y2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewotICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0g
MCAmJiByYW5nZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7Ci0g
ICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKLSAgICAgICAgICAg
IHJldHVybiByYW5nZS5lbmQ7Ci0KLSAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwotICAgICAg
ICBpZiAodGV4dCkgewotICAgICAgICAgICAgdmFyIGVuZCA9IHRoaXMuaW5zZXJ0KHJhbmdlLnN0
YXJ0LCB0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGVuZCA9
IHJhbmdlLnN0YXJ0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVuZDsKLSAgICB9Owot
ICAgIHRoaXMuYXBwbHlEZWx0YXMgPSBmdW5jdGlvbihkZWx0YXMpIHsKLSAgICAgICAgZm9yICh2
YXIgaT0wOyBpPGRlbHRhcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIGRlbHRhID0g
ZGVsdGFzW2ldOwotICAgICAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0
YS5yYW5nZS5zdGFydCwgZGVsdGEucmFuZ2UuZW5kKTsKLQotICAgICAgICAgICAgaWYgKGRlbHRh
LmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMiKQotICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGlu
ZXMocmFuZ2Uuc3RhcnQucm93LCBkZWx0YS5saW5lcyk7Ci0gICAgICAgICAgICBlbHNlIGlmIChk
ZWx0YS5hY3Rpb24gPT0gImluc2VydFRleHQiKQotICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0
KHJhbmdlLnN0YXJ0LCBkZWx0YS50ZXh0KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFj
dGlvbiA9PSAicmVtb3ZlTGluZXMiKQotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZXMo
cmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQucm93IC0gMSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiKQotICAgICAgICAgICAgICAgIHRoaXMucmVt
b3ZlKHJhbmdlKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5yZXZlcnREZWx0YXMgPSBm
dW5jdGlvbihkZWx0YXMpIHsKLSAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+
PTA7IGktLSkgewotICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOwotCi0gICAgICAg
ICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGRlbHRhLnJhbmdlLnN0YXJ0LCBkZWx0
YS5yYW5nZS5lbmQpOwotCi0gICAgICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnRM
aW5lcyIpCi0gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lcyhyYW5nZS5zdGFydC5yb3cs
IHJhbmdlLmVuZC5yb3cgLSAxKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9
PSAiaW5zZXJ0VGV4dCIpCi0gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpCi0gICAgICAg
ICAgICAgICAgdGhpcy5pbnNlcnRMaW5lcyhyYW5nZS5zdGFydC5yb3csIGRlbHRhLmxpbmVzKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIpCi0gICAg
ICAgICAgICAgICAgdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIGRlbHRhLnRleHQpOwotICAgICAg
ICB9Ci0gICAgfTsKLSAgICB0aGlzLmluZGV4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGluZGV4LCBz
dGFydFJvdykgewotICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFs
bExpbmVzKCk7Ci0gICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hh
cmFjdGVyKCkubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMCwgbCA9
IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgaW5kZXggLT0gbGluZXNb
aV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IGksIGNvbHVtbjogaW5kZXggKyBsaW5lc1tpXS5s
ZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4ge3Jvdzog
bC0xLCBjb2x1bW46IGxpbmVzW2wtMV0ubGVuZ3RofTsKLSAgICB9OwotICAgIHRoaXMucG9zaXRp
b25Ub0luZGV4ID0gZnVuY3Rpb24ocG9zLCBzdGFydFJvdykgewotICAgICAgICB2YXIgbGluZXMg
PSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7Ci0gICAgICAgIHZhciBuZXdsaW5l
TGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwotICAgICAgICB2YXIg
aW5kZXggPSAwOwotICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVu
Z3RoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDA7IGkgPCByb3c7ICsraSkK
LSAgICAgICAgICAgIGluZGV4ICs9IGxpbmVzW2ldLmxlbmd0aDsKLQotICAgICAgICByZXR1cm4g
aW5kZXggKyBuZXdsaW5lTGVuZ3RoICogaSArIHBvcy5jb2x1bW47Ci0gICAgfTsKLQotfSkuY2Fs
bChEb2N1bWVudC5wcm90b3R5cGUpOwotCi1leHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7Ci19
KTsKLQotYWNlLmRlZmluZSgnYWNlL2FuY2hvcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuL2xp
Yi9vb3AiKTsKLXZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVy
IikuRXZlbnRFbWl0dGVyOwotCi12YXIgQW5jaG9yID0gZXhwb3J0cy5BbmNob3IgPSBmdW5jdGlv
bihkb2MsIHJvdywgY29sdW1uKSB7Ci0gICAgdGhpcy5kb2N1bWVudCA9IGRvYzsKLSAgICAKLSAg
ICBpZiAodHlwZW9mIGNvbHVtbiA9PSAidW5kZWZpbmVkIikKLSAgICAgICAgdGhpcy5zZXRQb3Np
dGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKLSAgICBlbHNlCi0gICAgICAgIHRoaXMuc2V0UG9z
aXRpb24ocm93LCBjb2x1bW4pOwotCi0gICAgdGhpcy4kb25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdl
LmJpbmQodGhpcyk7Ci0gICAgZG9jLm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7Ci19Owot
Ci0oZnVuY3Rpb24oKSB7Ci0KLSAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7
Ci0KLSAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LCB0aGlzLmNvbHVtbik7Ci0gICAg
fTsKLSAgICAgICAgCi0gICAgdGhpcy5nZXREb2N1bWVudCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGhpcy5kb2N1bWVudDsKLSAgICB9OwotCi0gICAgdGhpcy5vbkNoYW5nZSA9IGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIGRlbHRhID0gZS5kYXRhOwotICAgICAgICB2YXIgcmFu
Z2UgPSBkZWx0YS5yYW5nZTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAocmFuZ2Uuc3RhcnQu
cm93ID09IHJhbmdlLmVuZC5yb3cgJiYgcmFuZ2Uuc3RhcnQucm93ICE9IHRoaXMucm93KQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChyYW5nZS5zdGFydC5y
b3cgPiB0aGlzLnJvdykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAocmFuZ2Uuc3RhcnQucm93ID09IHRoaXMucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA+
IHRoaXMuY29sdW1uKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIAotICAgICAgICB2YXIgcm93
ID0gdGhpcy5yb3c7Ci0gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbjsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0IikgewotICAgICAgICAg
ICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSBj
b2x1bW4pIHsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5l
bmQucm93KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiArPSByYW5nZS5lbmQuY29sdW1u
IC0gcmFuZ2Uuc3RhcnQuY29sdW1uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uIC09IHJhbmdlLnN0YXJ0LmNvbHVt
bjsKLSAgICAgICAgICAgICAgICAgICAgcm93ICs9IHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFy
dC5yb3c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93ICYmIHJhbmdlLnN0YXJ0LnJv
dyA8IHJvdykgewotICAgICAgICAgICAgICAgIHJvdyArPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uu
c3RhcnQucm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlv
biA9PT0gImluc2VydExpbmVzIikgewotICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA8
PSByb3cpIHsKLSAgICAgICAgICAgICAgICByb3cgKz0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0
YXJ0LnJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkZWx0
YS5hY3Rpb24gPT0gInJlbW92ZVRleHQiKSB7Ci0gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQu
cm93ID09IHJvdyAmJiByYW5nZS5zdGFydC5jb2x1bW4gPCBjb2x1bW4pIHsKLSAgICAgICAgICAg
ICAgICBpZiAocmFuZ2UuZW5kLmNvbHVtbiA+PSBjb2x1bW4pCi0gICAgICAgICAgICAgICAgICAg
IGNvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIChyYW5nZS5lbmQu
Y29sdW1uIC0gcmFuZ2Uuc3RhcnQuY29sdW1uKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICB9IGVsc2UgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdyAmJiByYW5n
ZS5zdGFydC5yb3cgPCByb3cpIHsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA9
PSByb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgY29sdW1u
IC0gcmFuZ2UuZW5kLmNvbHVtbikgKyByYW5nZS5zdGFydC5jb2x1bW47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJvdyAtPSAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0
LnJvdyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChyYW5nZS5lbmQucm93
ID09IHJvdykgewotICAgICAgICAgICAgICAgIHJvdyAtPSByYW5nZS5lbmQucm93IC0gcmFuZ2Uu
c3RhcnQucm93OwotICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbiAt
IHJhbmdlLmVuZC5jb2x1bW4pICsgcmFuZ2Uuc3RhcnQuY29sdW1uOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7Ci0gICAg
ICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDw9IHJvdykgewotICAgICAgICAgICAgICAgIGlm
IChyYW5nZS5lbmQucm93IDw9IHJvdykKLSAgICAgICAgICAgICAgICAgICAgcm93IC09IHJhbmdl
LmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3c7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKLSAgICAgICAgICAgICAgICAg
ICAgY29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uLCB0cnVlKTsKLSAgICB9
OwotCi0gICAgdGhpcy5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXAp
IHsKLSAgICAgICAgdmFyIHBvczsKLSAgICAgICAgaWYgKG5vQ2xpcCkgewotICAgICAgICAgICAg
cG9zID0gewotICAgICAgICAgICAgICAgIHJvdzogcm93LAotICAgICAgICAgICAgICAgIGNvbHVt
bjogY29sdW1uCi0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLnJvdyA9PSBwb3Mucm93ICYm
IHRoaXMuY29sdW1uID09IHBvcy5jb2x1bW4pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAKLSAgICAgICAgdmFyIG9sZCA9IHsKLSAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCi0g
ICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uCi0gICAgICAgIH07Ci0gICAgICAgIAotICAg
ICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7Ci0gICAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVt
bjsKLSAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgewotICAgICAgICAgICAgb2xkOiBvbGQs
Ci0gICAgICAgICAgICB2YWx1ZTogcG9zCi0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICB0aGlz
LmRldGFjaCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKLSAgICB9OwotICAgIHRoaXMuJGNs
aXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewotICAgICAgICB2
YXIgcG9zID0ge307Ci0gICAgCi0gICAgICAgIGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRM
ZW5ndGgoKSkgewotICAgICAgICAgICAgcG9zLnJvdyA9IE1hdGgubWF4KDAsIHRoaXMuZG9jdW1l
bnQuZ2V0TGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3Vt
ZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHJvdyA8IDApIHsKLSAgICAgICAgICAgIHBvcy5yb3cgPSAwOwotICAgICAgICAgICAgcG9zLmNv
bHVtbiA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwb3Mucm93
ID0gcm93OwotICAgICAgICAgICAgcG9zLmNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jdW1lbnQu
Z2V0TGluZShwb3Mucm93KS5sZW5ndGgsIE1hdGgubWF4KDAsIGNvbHVtbikpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoY29sdW1uIDwgMCkKLSAgICAgICAgICAgIHBvcy5jb2x1
bW4gPSAwOwotICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBwb3M7Ci0gICAgfTsKLSAgICAK
LX0pLmNhbGwoQW5jaG9yLnByb3RvdHlwZSk7Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvYmFj
a2dyb3VuZF90b2tlbml6ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2Fj
ZS9saWIvb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Ci12
YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1p
dHRlcjsKLQotdmFyIEJhY2tncm91bmRUb2tlbml6ZXIgPSBmdW5jdGlvbih0b2tlbml6ZXIsIGVk
aXRvcikgewotICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwotICAgIHRoaXMubGluZXMgPSBbXTsK
LSAgICB0aGlzLnN0YXRlcyA9IFtdOwotICAgIHRoaXMuY3VycmVudExpbmUgPSAwOwotICAgIHRo
aXMudG9rZW5pemVyID0gdG9rZW5pemVyOwotCi0gICAgdmFyIHNlbGYgPSB0aGlzOwotCi0gICAg
dGhpcy4kd29ya2VyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICghc2VsZi5ydW5uaW5nKSB7
IHJldHVybjsgfQotCi0gICAgICAgIHZhciB3b3JrZXJTdGFydCA9IG5ldyBEYXRlKCk7Ci0gICAg
ICAgIHZhciBzdGFydExpbmUgPSBzZWxmLmN1cnJlbnRMaW5lOwotICAgICAgICB2YXIgZG9jID0g
c2VsZi5kb2M7Ci0KLSAgICAgICAgdmFyIHByb2Nlc3NlZExpbmVzID0gMDsKLQotICAgICAgICB2
YXIgbGVuID0gZG9jLmdldExlbmd0aCgpOwotICAgICAgICB3aGlsZSAoc2VsZi5jdXJyZW50TGlu
ZSA8IGxlbikgewotICAgICAgICAgICAgc2VsZi4kdG9rZW5pemVSb3coc2VsZi5jdXJyZW50TGlu
ZSk7Ci0gICAgICAgICAgICB3aGlsZSAoc2VsZi5saW5lc1tzZWxmLmN1cnJlbnRMaW5lXSkKLSAg
ICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRMaW5lKys7Ci0gICAgICAgICAgICBwcm9jZXNzZWRM
aW5lcyArKzsKLSAgICAgICAgICAgIGlmICgocHJvY2Vzc2VkTGluZXMgJSA1ID09IDApICYmIChu
ZXcgRGF0ZSgpIC0gd29ya2VyU3RhcnQpID4gMjApIHsKLSAgICAgICAgICAgICAgICBzZWxmLmZp
cmVVcGRhdGVFdmVudChzdGFydExpbmUsIHNlbGYuY3VycmVudExpbmUtMSk7Ci0gICAgICAgICAg
ICAgICAgc2VsZi5ydW5uaW5nID0gc2V0VGltZW91dChzZWxmLiR3b3JrZXIsIDIwKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBz
ZWxmLnJ1bm5pbmcgPSBmYWxzZTsKLQotICAgICAgICBzZWxmLmZpcmVVcGRhdGVFdmVudChzdGFy
dExpbmUsIGxlbiAtIDEpOwotICAgIH07Ci19OwotCi0oZnVuY3Rpb24oKXsKLQotICAgIG9vcC5p
bXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKLSAgICB0aGlzLnNldFRva2VuaXplciA9IGZ1
bmN0aW9uKHRva2VuaXplcikgewotICAgICAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjsK
LSAgICAgICAgdGhpcy5saW5lcyA9IFtdOwotICAgICAgICB0aGlzLnN0YXRlcyA9IFtdOwotCi0g
ICAgICAgIHRoaXMuc3RhcnQoMCk7Ci0gICAgfTsKLSAgICB0aGlzLnNldERvY3VtZW50ID0gZnVu
Y3Rpb24oZG9jKSB7Ci0gICAgICAgIHRoaXMuZG9jID0gZG9jOwotICAgICAgICB0aGlzLmxpbmVz
ID0gW107Ci0gICAgICAgIHRoaXMuc3RhdGVzID0gW107Ci0KLSAgICAgICAgdGhpcy5zdG9wKCk7
Ci0gICAgfTsKLSAgICB0aGlzLmZpcmVVcGRhdGVFdmVudCA9IGZ1bmN0aW9uKGZpcnN0Um93LCBs
YXN0Um93KSB7Ci0gICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgZmlyc3Q6IGZpcnN0
Um93LAotICAgICAgICAgICAgbGFzdDogbGFzdFJvdwotICAgICAgICB9OwotICAgICAgICB0aGlz
Ll9lbWl0KCJ1cGRhdGUiLCB7ZGF0YTogZGF0YX0pOwotICAgIH07Ci0gICAgdGhpcy5zdGFydCA9
IGZ1bmN0aW9uKHN0YXJ0Um93KSB7Ci0gICAgICAgIHRoaXMuY3VycmVudExpbmUgPSBNYXRoLm1p
bihzdGFydFJvdyB8fCAwLCB0aGlzLmN1cnJlbnRMaW5lLCB0aGlzLmRvYy5nZXRMZW5ndGgoKSk7
Ci0gICAgICAgIHRoaXMubGluZXMuc3BsaWNlKHRoaXMuY3VycmVudExpbmUsIHRoaXMubGluZXMu
bGVuZ3RoKTsKLSAgICAgICAgdGhpcy5zdGF0ZXMuc3BsaWNlKHRoaXMuY3VycmVudExpbmUsIHRo
aXMuc3RhdGVzLmxlbmd0aCk7Ci0KLSAgICAgICAgdGhpcy5zdG9wKCk7Ci0gICAgICAgIHRoaXMu
cnVubmluZyA9IHNldFRpbWVvdXQodGhpcy4kd29ya2VyLCA3MDApOwotICAgIH07Ci0KLSAgICB0
aGlzLiR1cGRhdGVPbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7Ci0gICAgICAgIHZhciByYW5n
ZSA9IGRlbHRhLnJhbmdlOwotICAgICAgICB2YXIgc3RhcnRSb3cgPSByYW5nZS5zdGFydC5yb3c7
Ci0gICAgICAgIHZhciBsZW4gPSByYW5nZS5lbmQucm93IC0gc3RhcnRSb3c7Ci0KLSAgICAgICAg
aWYgKGxlbiA9PT0gMCkgewotICAgICAgICAgICAgdGhpcy5saW5lc1tzdGFydFJvd10gPSBudWxs
OwotICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlVGV4dCIgfHwgZGVs
dGEuYWN0aW9uID09ICJyZW1vdmVMaW5lcyIpIHsKLSAgICAgICAgICAgIHRoaXMubGluZXMuc3Bs
aWNlKHN0YXJ0Um93LCBsZW4gKyAxLCBudWxsKTsKLSAgICAgICAgICAgIHRoaXMuc3RhdGVzLnNw
bGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB2YXIgYXJncyA9IEFycmF5KGxlbiArIDEpOwotICAgICAgICAgICAgYXJncy51bnNoaWZ0
KHN0YXJ0Um93LCAxKTsKLSAgICAgICAgICAgIHRoaXMubGluZXMuc3BsaWNlLmFwcGx5KHRoaXMu
bGluZXMsIGFyZ3MpOwotICAgICAgICAgICAgdGhpcy5zdGF0ZXMuc3BsaWNlLmFwcGx5KHRoaXMu
c3RhdGVzLCBhcmdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuY3VycmVudExpbmUgPSBN
YXRoLm1pbihzdGFydFJvdywgdGhpcy5jdXJyZW50TGluZSwgdGhpcy5kb2MuZ2V0TGVuZ3RoKCkp
OwotCi0gICAgICAgIHRoaXMuc3RvcCgpOwotICAgICAgICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1l
b3V0KHRoaXMuJHdvcmtlciwgNzAwKTsKLSAgICB9OwotICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAodGhpcy5ydW5uaW5nKQotICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KHRoaXMucnVubmluZyk7Ci0gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwotICAgIH07Ci0g
ICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
bGluZXNbcm93XSB8fCB0aGlzLiR0b2tlbml6ZVJvdyhyb3cpOwotICAgIH07Ci0gICAgdGhpcy5n
ZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykgewotICAgICAgICBpZiAodGhpcy5jdXJyZW50TGluZSA9
PSByb3cpCi0gICAgICAgICAgICB0aGlzLiR0b2tlbml6ZVJvdyhyb3cpOwotICAgICAgICByZXR1
cm4gdGhpcy5zdGF0ZXNbcm93XSB8fCAic3RhcnQiOwotICAgIH07Ci0KLSAgICB0aGlzLiR0b2tl
bml6ZVJvdyA9IGZ1bmN0aW9uKHJvdykgewotICAgICAgICB2YXIgbGluZSA9IHRoaXMuZG9jLmdl
dExpbmUocm93KTsKLSAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZXNbcm93IC0gMV07Ci0K
LSAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0
YXRlLCByb3cpOwotCi0gICAgICAgIGlmICh0aGlzLnN0YXRlc1tyb3ddICsgIiIgIT09IGRhdGEu
c3RhdGUgKyAiIikgewotICAgICAgICAgICAgdGhpcy5zdGF0ZXNbcm93XSA9IGRhdGEuc3RhdGU7
Ci0gICAgICAgICAgICB0aGlzLmxpbmVzW3JvdyArIDFdID0gbnVsbDsKLSAgICAgICAgICAgIGlm
ICh0aGlzLmN1cnJlbnRMaW5lID4gcm93ICsgMSkKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJl
bnRMaW5lID0gcm93ICsgMTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRMaW5lID09
IHJvdykgewotICAgICAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IHJvdyArIDE7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gdGhpcy5saW5lc1tyb3ddID0gZGF0YS50b2tlbnM7Ci0gICAg
fTsKLQotfSkuY2FsbChCYWNrZ3JvdW5kVG9rZW5pemVyLnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMu
QmFja2dyb3VuZFRva2VuaXplciA9IEJhY2tncm91bmRUb2tlbml6ZXI7Ci19KTsKLQotYWNlLmRl
ZmluZSgnYWNlL3NlYXJjaF9oaWdobGlnaHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL29vcCcsICdhY2UvcmFuZ2UnXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIGxhbmcgPSByZXF1aXJlKCIu
L2xpYi9sYW5nIik7Ci12YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Ci12YXIgUmFuZ2Ug
PSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Ci0KLXZhciBTZWFyY2hIaWdobGlnaHQgPSBmdW5j
dGlvbihyZWdFeHAsIGNsYXp6LCB0eXBlKSB7Ci0gICAgdGhpcy5zZXRSZWdleHAocmVnRXhwKTsK
LSAgICB0aGlzLmNsYXp6ID0gY2xheno7Ci0gICAgdGhpcy50eXBlID0gdHlwZSB8fCAidGV4dCI7
Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5NQVhfUkFOR0VTID0gNTAwOwotICAgIAot
ICAgIHRoaXMuc2V0UmVnZXhwID0gZnVuY3Rpb24ocmVnRXhwKSB7Ci0gICAgICAgIGlmICh0aGlz
LnJlZ0V4cCsiIiA9PSByZWdFeHArIiIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRo
aXMucmVnRXhwID0gcmVnRXhwOwotICAgICAgICB0aGlzLmNhY2hlID0gW107Ci0gICAgfTsKLQot
ICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oaHRtbCwgbWFya2VyTGF5ZXIsIHNlc3Npb24sIGNv
bmZpZykgewotICAgICAgICBpZiAoIXRoaXMucmVnRXhwKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB2YXIgc3RhcnQgPSBjb25maWcuZmlyc3RSb3csIGVuZCA9IGNvbmZpZy5sYXN0Um93
OwotCi0gICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykgewotICAgICAg
ICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuY2FjaGVbaV07Ci0gICAgICAgICAgICBpZiAocmFuZ2Vz
ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByYW5nZXMgPSBsYW5nLmdldE1hdGNoT2Zmc2V0
cyhzZXNzaW9uLmdldExpbmUoaSksIHRoaXMucmVnRXhwKTsKLSAgICAgICAgICAgICAgICBpZiAo
cmFuZ2VzLmxlbmd0aCA+IHRoaXMuTUFYX1JBTkdFUykKLSAgICAgICAgICAgICAgICAgICAgcmFu
Z2VzID0gcmFuZ2VzLnNsaWNlKDAsIHRoaXMuTUFYX1JBTkdFUyk7Ci0gICAgICAgICAgICAgICAg
cmFuZ2VzID0gcmFuZ2VzLm1hcChmdW5jdGlvbihtYXRjaCkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IFJhbmdlKGksIG1hdGNoLm9mZnNldCwgaSwgbWF0Y2gub2Zmc2V0ICsgbWF0
Y2gubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB0aGlzLmNh
Y2hlW2ldID0gcmFuZ2VzLmxlbmd0aCA/IHJhbmdlcyA6ICIiOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmb3IgKHZhciBqID0gcmFuZ2VzLmxlbmd0aDsgaiAtLTsgKSB7Ci0gICAgICAg
ICAgICAgICAgbWFya2VyTGF5ZXIuZHJhd1NpbmdsZUxpbmVNYXJrZXIoCi0gICAgICAgICAgICAg
ICAgICAgIGh0bWwsIHJhbmdlc1tqXS50b1NjcmVlblJhbmdlKHNlc3Npb24pLCB0aGlzLmNsYXp6
LCBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgIG51bGwsIHRoaXMudHlwZQotICAgICAgICAg
ICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19KS5jYWxsKFNl
YXJjaEhpZ2hsaWdodC5wcm90b3R5cGUpOwotCi1leHBvcnRzLlNlYXJjaEhpZ2hsaWdodCA9IFNl
YXJjaEhpZ2hsaWdodDsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvZWRpdF9zZXNzaW9uL2ZvbGRp
bmcnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZScsICdhY2Uv
ZWRpdF9zZXNzaW9uL2ZvbGRfbGluZScsICdhY2UvZWRpdF9zZXNzaW9uL2ZvbGQnLCAnYWNlL3Rv
a2VuX2l0ZXJhdG9yJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0K
LXZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Ci12YXIgRm9sZExpbmUgPSBy
ZXF1aXJlKCIuL2ZvbGRfbGluZSIpLkZvbGRMaW5lOwotdmFyIEZvbGQgPSByZXF1aXJlKCIuL2Zv
bGQiKS5Gb2xkOwotdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRv
ciIpLlRva2VuSXRlcmF0b3I7Ci0KLWZ1bmN0aW9uIEZvbGRpbmcoKSB7Ci0gICAgdGhpcy5nZXRG
b2xkQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgc2lkZSkgewotICAgICAgICB2YXIgZm9sZExp
bmUgPSB0aGlzLmdldEZvbGRMaW5lKHJvdyk7Ci0gICAgICAgIGlmICghZm9sZExpbmUpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xk
czsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgdmFyIGZvbGQgPSBmb2xkc1tpXTsKLSAgICAgICAgICAgIGlmIChmb2xkLnJhbmdl
LmNvbnRhaW5zKHJvdywgY29sdW1uKSkgewotICAgICAgICAgICAgICAgIGlmIChzaWRlID09IDEg
JiYgZm9sZC5yYW5nZS5pc0VuZChyb3csIGNvbHVtbikpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWRlID09IC0xICYmIGZvbGQu
cmFuZ2UuaXNTdGFydChyb3csIGNvbHVtbikpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmb2xkOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLSAgICB0aGlzLmdldEZvbGRzSW5SYW5nZSA9
IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0OwotICAg
ICAgICB2YXIgZW5kID0gcmFuZ2UuZW5kOwotICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4k
Zm9sZERhdGE7Ci0gICAgICAgIHZhciBmb3VuZEZvbGRzID0gW107Ci0KLSAgICAgICAgc3RhcnQu
Y29sdW1uICs9IDE7Ci0gICAgICAgIGVuZC5jb2x1bW4gLT0gMTsKLQotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIGNt
cCA9IGZvbGRMaW5lc1tpXS5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOwotICAgICAgICAgICAg
aWYgKGNtcCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTIpIHsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmVzW2ld
LmZvbGRzOwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xkcy5sZW5ndGg7IGor
KykgewotICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZm9sZHNbal07Ci0gICAgICAgICAgICAg
ICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOwotICAgICAgICAgICAgICAg
IGlmIChjbXAgPT0gLTIpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMikgewotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpZiAoY21wID09IDQy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBmb3VuZEZvbGRzLnB1c2goZm9sZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgc3RhcnQuY29sdW1uIC09IDE7Ci0gICAgICAgIGVuZC5jb2x1bW4gKz0gMTsK
LQotICAgICAgICByZXR1cm4gZm91bmRGb2xkczsKLSAgICB9OwotICAgIHRoaXMuZ2V0QWxsRm9s
ZHMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGZvbGRzID0gW107Ci0gICAgICAgIHZhciBm
b2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTsKLSAgICAgICAgCi0gICAgICAgIGZ1bmN0aW9uIGFk
ZEZvbGQoZm9sZCkgewotICAgICAgICAgICAgZm9sZHMucHVzaChmb2xkKTsKLSAgICAgICAgICAg
IGlmICghZm9sZC5zdWJGb2xkcykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGQuc3ViRm9sZHMubGVu
Z3RoOyBpKyspCi0gICAgICAgICAgICAgICAgYWRkRm9sZChmb2xkLnN1YkZvbGRzW2ldKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkTGluZXMu
bGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGRMaW5lc1tp
XS5mb2xkcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICBhZGRGb2xkKGZvbGRMaW5lc1tp
XS5mb2xkc1tqXSk7Ci0KLSAgICAgICAgcmV0dXJuIGZvbGRzOwotICAgIH07Ci0gICAgdGhpcy5n
ZXRGb2xkU3RyaW5nQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgdHJpbSwgZm9sZExpbmUpIHsK
LSAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZSB8fCB0aGlzLmdldEZvbGRMaW5lKHJvdyk7Ci0g
ICAgICAgIGlmICghZm9sZExpbmUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAg
ICB2YXIgbGFzdEZvbGQgPSB7Ci0gICAgICAgICAgICBlbmQ6IHsgY29sdW1uOiAwIH0KLSAgICAg
ICAgfTsKLSAgICAgICAgdmFyIHN0ciwgZm9sZDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmb2xkTGluZS5mb2xkcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgZm9sZCA9IGZvbGRM
aW5lLmZvbGRzW2ldOwotICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGQucmFuZ2UuY29tcGFyZUVu
ZChyb3csIGNvbHVtbik7Ci0gICAgICAgICAgICBpZiAoY21wID09IC0xKSB7Ci0gICAgICAgICAg
ICAgICAgc3RyID0gdGhpcwotICAgICAgICAgICAgICAgICAgICAuZ2V0TGluZShmb2xkLnN0YXJ0
LnJvdykKLSAgICAgICAgICAgICAgICAgICAgLnN1YnN0cmluZyhsYXN0Rm9sZC5lbmQuY29sdW1u
LCBmb2xkLnN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjbXAgPT09IDApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxhc3RGb2xkID0gZm9sZDsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIXN0cikKLSAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0
TGluZShmb2xkLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGxhc3RGb2xkLmVuZC5jb2x1bW4pOwotCi0g
ICAgICAgIGlmICh0cmltID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmco
MCwgY29sdW1uIC0gbGFzdEZvbGQuZW5kLmNvbHVtbik7Ci0gICAgICAgIGVsc2UgaWYgKHRyaW0g
PT0gMSkKLSAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKGNvbHVtbiAtIGxhc3RGb2xk
LmVuZC5jb2x1bW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gc3RyOwotICAg
IH07Ci0KLSAgICB0aGlzLmdldEZvbGRMaW5lID0gZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRM
aW5lKSB7Ci0gICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhOwotICAgICAgICB2
YXIgaSA9IDA7Ci0gICAgICAgIGlmIChzdGFydEZvbGRMaW5lKQotICAgICAgICAgICAgaSA9IGZv
bGREYXRhLmluZGV4T2Yoc3RhcnRGb2xkTGluZSk7Ci0gICAgICAgIGlmIChpID09IC0xKQotICAg
ICAgICAgICAgaSA9IDA7Ci0gICAgICAgIGZvciAoaTsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTsKLSAgICAgICAgICAg
IGlmIChmb2xkTGluZS5zdGFydC5yb3cgPD0gZG9jUm93ICYmIGZvbGRMaW5lLmVuZC5yb3cgPj0g
ZG9jUm93KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbGRMaW5lOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChmb2xkTGluZS5lbmQucm93ID4gZG9jUm93KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgfTsKLSAgICB0aGlzLmdldE5leHRGb2xkTGluZSA9IGZ1bmN0aW9uKGRvY1Jvdywg
c3RhcnRGb2xkTGluZSkgewotICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTsK
LSAgICAgICAgdmFyIGkgPSAwOwotICAgICAgICBpZiAoc3RhcnRGb2xkTGluZSkKLSAgICAgICAg
ICAgIGkgPSBmb2xkRGF0YS5pbmRleE9mKHN0YXJ0Rm9sZExpbmUpOwotICAgICAgICBpZiAoaSA9
PSAtMSkKLSAgICAgICAgICAgIGkgPSAwOwotICAgICAgICBmb3IgKGk7IGkgPCBmb2xkRGF0YS5s
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07Ci0g
ICAgICAgICAgICBpZiAoZm9sZExpbmUuZW5kLnJvdyA+PSBkb2NSb3cpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZm9sZExpbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgfTsKLQotICAgIHRoaXMuZ2V0Rm9sZGVkUm93Q291bnQgPSBmdW5j
dGlvbihmaXJzdCwgbGFzdCkgewotICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0
YSwgcm93Q291bnQgPSBsYXN0LWZpcnN0KzE7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Zm9sZERhdGEubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGRE
YXRhW2ldLAotICAgICAgICAgICAgICAgIGVuZCA9IGZvbGRMaW5lLmVuZC5yb3csCi0gICAgICAg
ICAgICAgICAgc3RhcnQgPSBmb2xkTGluZS5zdGFydC5yb3c7Ci0gICAgICAgICAgICBpZiAoZW5k
ID49IGxhc3QpIHsKLSAgICAgICAgICAgICAgICBpZihzdGFydCA8IGxhc3QpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYoc3RhcnQgPj0gZmlyc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
b3dDb3VudCAtPSBsYXN0LXN0YXJ0OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICByb3dDb3VudCA9IDA7Ly9pbiBvbmUgZm9sZAotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZihlbmQg
Pj0gZmlyc3QpewotICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBmaXJzdCkgLy9mb2xkIGlu
c2lkZSByYW5nZQotICAgICAgICAgICAgICAgICAgICByb3dDb3VudCAtPSAgZW5kLXN0YXJ0Owot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgLT0gIGVu
ZC1maXJzdCsxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByb3dD
b3VudDsKLSAgICB9OwotCi0gICAgdGhpcy4kYWRkRm9sZExpbmUgPSBmdW5jdGlvbihmb2xkTGlu
ZSkgewotICAgICAgICB0aGlzLiRmb2xkRGF0YS5wdXNoKGZvbGRMaW5lKTsKLSAgICAgICAgdGhp
cy4kZm9sZERhdGEuc29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5z
dGFydC5yb3cgLSBiLnN0YXJ0LnJvdzsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBmb2xk
TGluZTsKLSAgICB9OwotICAgIHRoaXMuYWRkRm9sZCA9IGZ1bmN0aW9uKHBsYWNlaG9sZGVyLCBy
YW5nZSkgewotICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTsKLSAgICAgICAg
dmFyIGFkZGVkID0gZmFsc2U7Ci0gICAgICAgIHZhciBmb2xkOwotICAgICAgICAKLSAgICAgICAg
aWYgKHBsYWNlaG9sZGVyIGluc3RhbmNlb2YgRm9sZCkKLSAgICAgICAgICAgIGZvbGQgPSBwbGFj
ZWhvbGRlcjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9sZCA9IG5ldyBGb2xkKHJhbmdl
LCBwbGFjZWhvbGRlcik7Ci0KLSAgICAgICAgdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVudChmb2xk
LnJhbmdlKTsKLQotICAgICAgICB2YXIgc3RhcnRSb3cgPSBmb2xkLnN0YXJ0LnJvdzsKLSAgICAg
ICAgdmFyIHN0YXJ0Q29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47Ci0gICAgICAgIHZhciBlbmRS
b3cgPSBmb2xkLmVuZC5yb3c7Ci0gICAgICAgIHZhciBlbmRDb2x1bW4gPSBmb2xkLmVuZC5jb2x1
bW47Ci0gICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cgJiYgZW5kQ29sdW1uIC0gc3RhcnRD
b2x1bW4gPCAyKQotICAgICAgICAgICAgdGhyb3cgIlRoZSByYW5nZSBoYXMgdG8gYmUgYXQgbGVh
c3QgMiBjaGFyYWN0ZXJzIHdpZHRoIjsKLQotICAgICAgICB2YXIgc3RhcnRGb2xkID0gdGhpcy5n
ZXRGb2xkQXQoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCAxKTsKLSAgICAgICAgdmFyIGVuZEZvbGQg
PSB0aGlzLmdldEZvbGRBdChlbmRSb3csIGVuZENvbHVtbiwgLTEpOwotICAgICAgICBpZiAoc3Rh
cnRGb2xkICYmIGVuZEZvbGQgPT0gc3RhcnRGb2xkKQotICAgICAgICAgICAgcmV0dXJuIHN0YXJ0
Rm9sZC5hZGRTdWJGb2xkKGZvbGQpOwotCi0gICAgICAgIGlmICgKLSAgICAgICAgICAgIChzdGFy
dEZvbGQgJiYgIXN0YXJ0Rm9sZC5yYW5nZS5pc1N0YXJ0KHN0YXJ0Um93LCBzdGFydENvbHVtbikp
Ci0gICAgICAgICAgICB8fCAoZW5kRm9sZCAmJiAhZW5kRm9sZC5yYW5nZS5pc0VuZChlbmRSb3cs
IGVuZENvbHVtbikpCi0gICAgICAgICkgewotICAgICAgICAgICAgdGhyb3cgIkEgZm9sZCBjYW4n
dCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkIiArIGZvbGQucmFuZ2UgKyBzdGFydEZv
bGQucmFuZ2U7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGZvbGRzID0gdGhpcy5nZXRGb2xkc0lu
UmFuZ2UoZm9sZC5yYW5nZSk7Ci0gICAgICAgIGlmIChmb2xkcy5sZW5ndGggPiAwKSB7Ci0gICAg
ICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKGZvbGRzKTsKLSAgICAgICAgICAgIGZvbGQuc3ViRm9s
ZHMgPSBmb2xkczsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9s
ZERhdGEubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGREYXRh
W2ldOwotICAgICAgICAgICAgaWYgKGVuZFJvdyA9PSBmb2xkTGluZS5zdGFydC5yb3cpIHsKLSAg
ICAgICAgICAgICAgICBmb2xkTGluZS5hZGRGb2xkKGZvbGQpOwotICAgICAgICAgICAgICAgIGFk
ZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKHN0YXJ0Um93ID09IGZvbGRMaW5lLmVuZC5yb3cpIHsKLSAgICAgICAg
ICAgICAgICBmb2xkTGluZS5hZGRGb2xkKGZvbGQpOwotICAgICAgICAgICAgICAgIGFkZGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWZvbGQuc2FtZVJvdykgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgZm9sZExpbmVOZXh0ID0gZm9sZERhdGFbaSArIDFdOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoZm9sZExpbmVOZXh0ICYmIGZvbGRMaW5lTmV4dC5zdGFydC5yb3cgPT0gZW5k
Um93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5tZXJnZShmb2xkTGluZU5l
eHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChlbmRSb3cgPD0gZm9sZExpbmUuc3RhcnQucm93KSB7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWFkZGVkKQotICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRhZGRGb2xkTGlu
ZShuZXcgRm9sZExpbmUodGhpcy4kZm9sZERhdGEsIGZvbGQpKTsKLQotICAgICAgICBpZiAodGhp
cy4kdXNlV3JhcE1vZGUpCi0gICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YShmb2xkTGlu
ZS5zdGFydC5yb3csIGZvbGRMaW5lLnN0YXJ0LnJvdyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKGZvbGRMaW5lLnN0YXJ0LnJvdywgZm9sZExp
bmUuc3RhcnQucm93KTsKLSAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOwotICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2VGb2xkIiwgeyBkYXRhOiBmb2xkIH0pOwotCi0gICAgICAgIHJldHVy
biBmb2xkOwotICAgIH07Ci0KLSAgICB0aGlzLmFkZEZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHsK
LSAgICAgICAgZm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7Ci0gICAgICAgICAgICB0aGlz
LmFkZEZvbGQoZm9sZCk7Ci0gICAgICAgIH0sIHRoaXMpOwotICAgIH07Ci0KLSAgICB0aGlzLnJl
bW92ZUZvbGQgPSBmdW5jdGlvbihmb2xkKSB7Ci0gICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGQu
Zm9sZExpbmU7Ci0gICAgICAgIHZhciBzdGFydFJvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKLSAg
ICAgICAgdmFyIGVuZFJvdyA9IGZvbGRMaW5lLmVuZC5yb3c7Ci0KLSAgICAgICAgdmFyIGZvbGRM
aW5lcyA9IHRoaXMuJGZvbGREYXRhOwotICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xk
czsKLSAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAgICBmb2xkTGlu
ZXMuc3BsaWNlKGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSwgMSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICBpZiAoZm9sZExpbmUucmFuZ2UuaXNFbmQoZm9sZC5lbmQucm93LCBmb2xkLmVu
ZC5jb2x1bW4pKSB7Ci0gICAgICAgICAgICBmb2xkcy5wb3AoKTsKLSAgICAgICAgICAgIGZvbGRM
aW5lLmVuZC5yb3cgPSBmb2xkc1tmb2xkcy5sZW5ndGggLSAxXS5lbmQucm93OwotICAgICAgICAg
ICAgZm9sZExpbmUuZW5kLmNvbHVtbiA9IGZvbGRzW2ZvbGRzLmxlbmd0aCAtIDFdLmVuZC5jb2x1
bW47Ci0gICAgICAgIH0gZWxzZQotICAgICAgICBpZiAoZm9sZExpbmUucmFuZ2UuaXNTdGFydChm
b2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pKSB7Ci0gICAgICAgICAgICBmb2xkcy5z
aGlmdCgpOwotICAgICAgICAgICAgZm9sZExpbmUuc3RhcnQucm93ID0gZm9sZHNbMF0uc3RhcnQu
cm93OwotICAgICAgICAgICAgZm9sZExpbmUuc3RhcnQuY29sdW1uID0gZm9sZHNbMF0uc3RhcnQu
Y29sdW1uOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgaWYgKGZvbGQuc2FtZVJvdykgewotICAg
ICAgICAgICAgZm9sZHMuc3BsaWNlKGZvbGRzLmluZGV4T2YoZm9sZCksIDEpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG5ld0ZvbGRMaW5lID0gZm9sZExpbmUu
c3BsaXQoZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTsKLSAgICAgICAgICAgIGZv
bGRzID0gbmV3Rm9sZExpbmUuZm9sZHM7Ci0gICAgICAgICAgICBmb2xkcy5zaGlmdCgpOwotICAg
ICAgICAgICAgbmV3Rm9sZExpbmUuc3RhcnQucm93ID0gZm9sZHNbMF0uc3RhcnQucm93OwotICAg
ICAgICAgICAgbmV3Rm9sZExpbmUuc3RhcnQuY29sdW1uID0gZm9sZHNbMF0uc3RhcnQuY29sdW1u
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKQotICAgICAgICAg
ICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoc3RhcnRSb3csIGVuZFJvdyk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKHN0YXJ0Um93LCBlbmRSb3cp
OwotICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2VtaXQoImNo
YW5nZUZvbGQiLCB7IGRhdGE6IGZvbGQgfSk7Ci0gICAgfTsKLQotICAgIHRoaXMucmVtb3ZlRm9s
ZHMgPSBmdW5jdGlvbihmb2xkcykgewotICAgICAgICB2YXIgY2xvbmVGb2xkcyA9IFtdOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICBjbG9uZUZvbGRzLnB1c2goZm9sZHNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgY2xvbmVG
b2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9s
ZChmb2xkKTsKLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1
ZTsKLSAgICB9OwotCi0gICAgdGhpcy5leHBhbmRGb2xkID0gZnVuY3Rpb24oZm9sZCkgewotICAg
ICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7Ci0gICAgICAgIGZvbGQuc3ViRm9sZHMuZm9yRWFj
aChmdW5jdGlvbihmb2xkKSB7Ci0gICAgICAgICAgICB0aGlzLmFkZEZvbGQoZm9sZCk7Ci0gICAg
ICAgIH0sIHRoaXMpOwotICAgICAgICBmb2xkLnN1YkZvbGRzID0gW107Ci0gICAgfTsKLQotICAg
IHRoaXMuZXhwYW5kRm9sZHMgPSBmdW5jdGlvbihmb2xkcykgewotICAgICAgICBmb2xkcy5mb3JF
YWNoKGZ1bmN0aW9uKGZvbGQpIHsKLSAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZChmb2xkKTsK
LSAgICAgICAgfSwgdGhpcyk7Ci0gICAgfTsKLQotICAgIHRoaXMudW5mb2xkID0gZnVuY3Rpb24o
bG9jYXRpb24sIGV4cGFuZElubmVyKSB7Ci0gICAgICAgIHZhciByYW5nZSwgZm9sZHM7Ci0gICAg
ICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKQotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2Uo
MCwgMCwgdGhpcy5nZXRMZW5ndGgoKSwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb2Nh
dGlvbiA9PSAibnVtYmVyIikKLSAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKGxvY2F0aW9u
LCAwLCBsb2NhdGlvbiwgdGhpcy5nZXRMaW5lKGxvY2F0aW9uKS5sZW5ndGgpOwotICAgICAgICBl
bHNlIGlmICgicm93IiBpbiBsb2NhdGlvbikKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJv
bVBvaW50cyhsb2NhdGlvbiwgbG9jYXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
YW5nZSA9IGxvY2F0aW9uOwotCi0gICAgICAgIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2Uo
cmFuZ2UpOwotICAgICAgICBpZiAoZXhwYW5kSW5uZXIpIHsKLSAgICAgICAgICAgIHRoaXMucmVt
b3ZlRm9sZHMoZm9sZHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd2hpbGUgKGZv
bGRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZHMoZm9sZHMpOwot
ICAgICAgICAgICAgICAgIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UocmFuZ2UpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLSAgICB0aGlzLmlzUm93Rm9sZGVkID0gZnVu
Y3Rpb24oZG9jUm93LCBzdGFydEZvbGRSb3cpIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRG
b2xkTGluZShkb2NSb3csIHN0YXJ0Rm9sZFJvdyk7Ci0gICAgfTsKLQotICAgIHRoaXMuZ2V0Um93
Rm9sZEVuZCA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkUm93KSB7Ci0gICAgICAgIHZhciBm
b2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZG9jUm93LCBzdGFydEZvbGRSb3cpOwotICAgICAg
ICByZXR1cm4gZm9sZExpbmUgPyBmb2xkTGluZS5lbmQucm93IDogZG9jUm93OwotICAgIH07Ci0K
LSAgICB0aGlzLmdldEZvbGREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lLCBlbmRSb3cs
IGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7Ci0gICAgICAgIGlmIChzdGFydFJv
dyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzdGFydFJvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsK
LSAgICAgICAgICAgIHN0YXJ0Q29sdW1uID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChl
bmRSb3cgPT0gbnVsbCkgewotICAgICAgICAgICAgZW5kUm93ID0gZm9sZExpbmUuZW5kLnJvdzsK
LSAgICAgICAgICAgIGVuZENvbHVtbiA9IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKLSAg
ICAgICAgfQotICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7Ci0gICAgICAgIHZhciB0ZXh0TGlu
ZSA9ICIiOwotCi0gICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJv
dywgY29sdW1uLCBsYXN0Q29sdW1uKSB7Ci0gICAgICAgICAgICBpZiAocm93IDwgc3RhcnRSb3cp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJvdyA9
PSBzdGFydFJvdykgewotICAgICAgICAgICAgICAgIGlmIChjb2x1bW4gPCBzdGFydENvbHVtbikg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGxhc3RDb2x1bW4gPSBNYXRoLm1heChzdGFydENvbHVtbiwgbGFzdENvbHVtbik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkgewot
ICAgICAgICAgICAgICAgIHRleHRMaW5lICs9IHBsYWNlaG9sZGVyOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0ZXh0TGluZSArPSBkb2MuZ2V0TGluZShyb3cpLnN1YnN0
cmluZyhsYXN0Q29sdW1uLCBjb2x1bW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9LmJpbmQo
dGhpcyksIGVuZFJvdywgZW5kQ29sdW1uKTsKLSAgICAgICAgcmV0dXJuIHRleHRMaW5lOwotICAg
IH07Ci0KLSAgICB0aGlzLmdldERpc3BsYXlMaW5lID0gZnVuY3Rpb24ocm93LCBlbmRDb2x1bW4s
IHN0YXJ0Um93LCBzdGFydENvbHVtbikgewotICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdl
dEZvbGRMaW5lKHJvdyk7Ci0KLSAgICAgICAgaWYgKCFmb2xkTGluZSkgewotICAgICAgICAgICAg
dmFyIGxpbmU7Ci0gICAgICAgICAgICBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOwotICAg
ICAgICAgICAgcmV0dXJuIGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uIHx8IDAsIGVuZENvbHVt
biB8fCBsaW5lLmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4g
dGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoCi0gICAgICAgICAgICAgICAgZm9sZExpbmUsIHJvdywg
ZW5kQ29sdW1uLCBzdGFydFJvdywgc3RhcnRDb2x1bW4pOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRoaXMuJGNsb25lRm9sZERhdGEgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGZkID0g
W107Ci0gICAgICAgIGZkID0gdGhpcy4kZm9sZERhdGEubWFwKGZ1bmN0aW9uKGZvbGRMaW5lKSB7
Ci0gICAgICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xkcy5tYXAoZnVuY3Rpb24oZm9s
ZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmb2xkLmNsb25lKCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZExpbmUoZmQsIGZvbGRzKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgcmV0dXJuIGZkOwotICAgIH07Ci0KLSAgICB0aGlzLnRvZ2dsZUZvbGQg
PSBmdW5jdGlvbih0cnlUb1VuZm9sZCkgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5z
ZWxlY3Rpb247Ci0gICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZSgpOwotICAg
ICAgICB2YXIgZm9sZDsKLSAgICAgICAgdmFyIGJyYWNrZXRQb3M7Ci0KLSAgICAgICAgaWYgKHJh
bmdlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJhbmdlLnN0YXJ0Owot
ICAgICAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1
bW4pOwotCi0gICAgICAgICAgICBpZiAoZm9sZCkgewotICAgICAgICAgICAgICAgIHRoaXMuZXhw
YW5kRm9sZChmb2xkKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0
KGN1cnNvcikpIHsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZVBvaW50KGJyYWNr
ZXRQb3MpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gYnJhY2tldFBv
czsKLSAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICByYW5nZS5zdGFydCA9IGJyYWNrZXRQb3M7Ci0gICAgICAgICAgICAgICAgICAg
IHJhbmdlLnN0YXJ0LmNvbHVtbisrOwotICAgICAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29s
dW1uLS07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBpZiAoYnJhY2tldFBvcyA9IHRoaXMuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiBjdXJzb3Iu
cm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxfSkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
cmFuZ2UuY29tcGFyZVBvaW50KGJyYWNrZXRQb3MpID09IDEpCi0gICAgICAgICAgICAgICAgICAg
IHJhbmdlLmVuZCA9IGJyYWNrZXRQb3M7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICByYW5nZS5zdGFydCA9IGJyYWNrZXRQb3M7Ci0KLSAgICAgICAgICAgICAgICBy
YW5nZS5zdGFydC5jb2x1bW4rKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRDb21tZW50Rm9sZFJhbmdlKGN1cnNvci5y
b3csIGN1cnNvci5jb2x1bW4pIHx8IHJhbmdlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdmFyIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UocmFuZ2Up
OwotICAgICAgICAgICAgaWYgKHRyeVRvVW5mb2xkICYmIGZvbGRzLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZHMoZm9sZHMpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICBlbHNlIGlmIChmb2xkcy5sZW5ndGggPT0g
MSApIHsKLSAgICAgICAgICAgICAgICBmb2xkID0gZm9sZHNbMF07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvbGQpCi0gICAgICAgICAgICBmb2xkID0gdGhpcy5n
ZXRGb2xkQXQocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOwotCi0gICAgICAg
IGlmIChmb2xkICYmIGZvbGQucmFuZ2UudG9TdHJpbmcoKSA9PSByYW5nZS50b1N0cmluZygpKSB7
Ci0gICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSAiLi4uIjsKLSAgICAgICAg
aWYgKCFyYW5nZS5pc011bHRpTGluZSgpKSB7Ci0gICAgICAgICAgICBwbGFjZWhvbGRlciA9IHRo
aXMuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKLSAgICAgICAgICAgIGlmKHBsYWNlaG9sZGVyLmxlbmd0
aCA8IDQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgcGxhY2Vob2xkZXIg
PSBwbGFjZWhvbGRlci50cmltKCkuc3Vic3RyaW5nKDAsIDIpICsgIi4uIjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuYWRkRm9sZChwbGFjZWhvbGRlciwgcmFuZ2UpOwotICAgIH07Ci0KLSAg
ICB0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgZGlyKSB7
Ci0gICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHJvdywgY29s
dW1uKTsKLSAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7Ci0g
ICAgICAgIGlmICh0b2tlbiAmJiAvXmNvbW1lbnR8c3RyaW5nLy50ZXN0KHRva2VuLnR5cGUpKSB7
Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoKTsKLSAgICAgICAgICAgIHZhciBy
ZSA9IG5ldyBSZWdFeHAodG9rZW4udHlwZS5yZXBsYWNlKC9cLi4qLywgIlxcLiIpKTsKLSAgICAg
ICAgICAgIGlmIChkaXIgIT0gMSkgewotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKLSAgICAgICAgICAgICAg
ICB9IHdoaWxlKHRva2VuICYmIHJlLnRlc3QodG9rZW4udHlwZSkpOwotICAgICAgICAgICAgICAg
IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygp
OwotICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuQ29sdW1uKCkgKyAyOwotCi0gICAgICAgICAgICBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJh
dG9yKHRoaXMsIHJvdywgY29sdW1uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRp
ciAhPSAtMSkgewotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgdG9r
ZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUodG9r
ZW4gJiYgcmUudGVzdCh0b2tlbi50eXBlKSk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVy
YXRvci5zdGVwQmFja3dhcmQoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7Ci0KLSAgICAgICAgICAgIHJhbmdl
LmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKLSAgICAgICAgICAgIHJh
bmdlLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2Vu
LnZhbHVlLmxlbmd0aCAtIDI7Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2U7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgdGhpcy5mb2xkQWxsID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdykg
ewotICAgICAgICB2YXIgZm9sZFdpZGdldHMgPSB0aGlzLmZvbGRXaWRnZXRzOwotICAgICAgICBl
bmRSb3cgPSBlbmRSb3cgfHwgdGhpcy5nZXRMZW5ndGgoKTsKLSAgICAgICAgZm9yICh2YXIgcm93
ID0gc3RhcnRSb3cgfHwgMDsgcm93IDwgZW5kUm93OyByb3crKykgewotICAgICAgICAgICAgaWYg
KGZvbGRXaWRnZXRzW3Jvd10gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBmb2xkV2lkZ2V0c1ty
b3ddID0gdGhpcy5nZXRGb2xkV2lkZ2V0KHJvdyk7Ci0gICAgICAgICAgICBpZiAoZm9sZFdpZGdl
dHNbcm93XSAhPSAic3RhcnQiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShyb3cpOwotICAgICAgICAg
ICAgaWYgKHJhbmdlICYmIHJhbmdlLmVuZC5yb3cgPD0gZW5kUm93KSB0cnkgewotICAgICAgICAg
ICAgICAgIHRoaXMuYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOwotICAgICAgICAgICAgfSBjYXRjaChl
KSB7fQotICAgICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICB0aGlzLiRmb2xkU3R5bGVzID0gewot
ICAgICAgICAibWFudWFsIjogMSwKLSAgICAgICAgIm1hcmtiZWdpbiI6IDEsCi0gICAgICAgICJt
YXJrYmVnaW5lbmQiOiAxCi0gICAgfTsKLSAgICB0aGlzLiRmb2xkU3R5bGUgPSAibWFya2JlZ2lu
IjsKLSAgICB0aGlzLnNldEZvbGRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlKSB7Ci0gICAgICAgIGlm
ICghdGhpcy4kZm9sZFN0eWxlc1tzdHlsZV0pCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
ImludmFsaWQgZm9sZCBzdHlsZTogIiArIHN0eWxlICsgIlsiICsgT2JqZWN0LmtleXModGhpcy4k
Zm9sZFN0eWxlcykuam9pbigiLCAiKSArICJdIik7Ci0gICAgICAgIAotICAgICAgICBpZiAodGhp
cy4kZm9sZFN0eWxlID09IHN0eWxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMuJGZvbGRTdHlsZSA9IHN0eWxlOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0eWxlID09ICJt
YW51YWwiKQotICAgICAgICAgICAgdGhpcy51bmZvbGQoKTsKLSAgICAgICAgdmFyIG1vZGUgPSB0
aGlzLiRmb2xkTW9kZTsKLSAgICAgICAgdGhpcy4kc2V0Rm9sZGluZyhudWxsKTsKLSAgICAgICAg
dGhpcy4kc2V0Rm9sZGluZyhtb2RlKTsKLSAgICB9OwotICAgIHRoaXMuJHNldEZvbGRpbmcgPSBm
dW5jdGlvbihmb2xkTW9kZSkgewotICAgICAgICBpZiAodGhpcy4kZm9sZE1vZGUgPT0gZm9sZE1v
ZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgdGhpcy4kZm9s
ZE1vZGUgPSBmb2xkTW9kZTsKLSAgICAgICAgCi0gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIo
J2NoYW5nZScsIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzKTsKLSAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlQW5ub3RhdGlvbiIpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmb2xkTW9kZSB8fCB0
aGlzLiRmb2xkU3R5bGUgPT0gIm1hbnVhbCIpIHsKLSAgICAgICAgICAgIHRoaXMuZm9sZFdpZGdl
dHMgPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICB0aGlzLmZvbGRXaWRnZXRzID0gW107Ci0gICAgICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9
IGZvbGRNb2RlLmdldEZvbGRXaWRnZXQuYmluZChmb2xkTW9kZSwgdGhpcywgdGhpcy4kZm9sZFN0
eWxlKTsKLSAgICAgICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmb2xkTW9kZS5nZXRGb2xk
V2lkZ2V0UmFuZ2UuYmluZChmb2xkTW9kZSwgdGhpcywgdGhpcy4kZm9sZFN0eWxlKTsKLSAgICAg
ICAgCi0gICAgICAgIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzID0gdGhpcy51cGRhdGVGb2xkV2lk
Z2V0cy5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLm9uKCdjaGFuZ2UnLCB0aGlzLiR1cGRhdGVG
b2xkV2lkZ2V0cyk7Ci0gICAgICAgIAotICAgIH07Ci0KLSAgICB0aGlzLm9uRm9sZFdpZGdldENs
aWNrID0gZnVuY3Rpb24ocm93LCBlKSB7Ci0gICAgICAgIGUgPSBlLmRvbUV2ZW50OwotICAgICAg
ICB2YXIgdHlwZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldChyb3cpOwotICAgICAgICB2YXIgbGluZSA9
IHRoaXMuZ2V0TGluZShyb3cpOwotICAgICAgICB2YXIgb25seVN1YmZvbGRzID0gZS5zaGlmdEtl
eTsKLSAgICAgICAgdmFyIGFkZFN1YmZvbGRzID0gb25seVN1YmZvbGRzIHx8IGUuY3RybEtleSB8
fCBlLmFsdEtleSB8fCBlLm1ldGFLZXk7Ci0gICAgICAgIHZhciBmb2xkOwotCi0gICAgICAgIGlm
ICh0eXBlID09ICJlbmQiKQotICAgICAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KHJvdywg
MCwgLTEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQo
cm93LCBsaW5lLmxlbmd0aCwgMSk7Ci0KLSAgICAgICAgaWYgKGZvbGQpIHsKLSAgICAgICAgICAg
IGlmIChhZGRTdWJmb2xkcykKLSAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocm93KTsKLSAgICAgICAgaWYgKHJhbmdlKSB7Ci0gICAg
ICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKLSAgICAgICAgICAgICAgICBmb2xk
ID0gdGhpcy5nZXRGb2xkQXQocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4sIDEp
OwotICAgICAgICAgICAgICAgIGlmIChmb2xkICYmIHJhbmdlLmlzRXF1YWwoZm9sZC5yYW5nZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW9ubHlTdWJmb2xkcykKLSAgICAgICAgICAgICAg
ICB0aGlzLmFkZEZvbGQoIi4uLiIsIHJhbmdlKTsKLQotICAgICAgICAgICAgaWYgKGFkZFN1YmZv
bGRzKQotICAgICAgICAgICAgICAgIHRoaXMuZm9sZEFsbChyYW5nZS5zdGFydC5yb3cgKyAxLCBy
YW5nZS5lbmQucm93KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhZGRTdWJm
b2xkcykKLSAgICAgICAgICAgICAgICB0aGlzLmZvbGRBbGwocm93ICsgMSwgdGhpcy5nZXRMZW5n
dGgoKSk7Ci0gICAgICAgICAgICAoZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50KS5jbGFzc05hbWUg
Kz0gIiBhY2VfaW52YWxpZCIKLSAgICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgdGhpcy51cGRh
dGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIGRlbHRhID0gZS5kYXRh
OwotICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKLSAgICAgICAgdmFyIGZpcnN0Um93
ID0gcmFuZ2Uuc3RhcnQucm93OwotICAgICAgICB2YXIgbGVuID0gcmFuZ2UuZW5kLnJvdyAtIGZp
cnN0Um93OwotCi0gICAgICAgIGlmIChsZW4gPT09IDApIHsKLSAgICAgICAgICAgIHRoaXMuZm9s
ZFdpZGdldHNbZmlyc3RSb3ddID0gbnVsbDsKLSAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rp
b24gPT0gInJlbW92ZVRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlTGluZXMiKSB7Ci0g
ICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzLnNwbGljZShmaXJzdFJvdywgbGVuICsgMSwgbnVs
bCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5KGxlbiAr
IDEpOwotICAgICAgICAgICAgYXJncy51bnNoaWZ0KGZpcnN0Um93LCAxKTsKLSAgICAgICAgICAg
IHRoaXMuZm9sZFdpZGdldHMuc3BsaWNlLmFwcGx5KHRoaXMuZm9sZFdpZGdldHMsIGFyZ3MpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotfQotCi1leHBvcnRzLkZvbGRpbmcgPSBGb2xkaW5nOwotCi19
KTsKLQotYWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xpbmUnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihyZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJh
bmdlOwotZnVuY3Rpb24gRm9sZExpbmUoZm9sZERhdGEsIGZvbGRzKSB7Ci0gICAgdGhpcy5mb2xk
RGF0YSA9IGZvbGREYXRhOwotICAgIGlmIChBcnJheS5pc0FycmF5KGZvbGRzKSkgewotICAgICAg
ICB0aGlzLmZvbGRzID0gZm9sZHM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9sZHMgPSB0aGlz
LmZvbGRzID0gWyBmb2xkcyBdOwotICAgIH0KLQotICAgIHZhciBsYXN0ID0gZm9sZHNbZm9sZHMu
bGVuZ3RoIC0gMV0KLSAgICB0aGlzLnJhbmdlID0gbmV3IFJhbmdlKGZvbGRzWzBdLnN0YXJ0LnJv
dywgZm9sZHNbMF0uc3RhcnQuY29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dC5lbmQucm93LCBsYXN0LmVuZC5jb2x1bW4pOwotICAgIHRoaXMuc3RhcnQgPSB0aGlzLnJhbmdl
LnN0YXJ0OwotICAgIHRoaXMuZW5kICAgPSB0aGlzLnJhbmdlLmVuZDsKLQotICAgIHRoaXMuZm9s
ZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7Ci0gICAgICAgIGZvbGQuc2V0Rm9sZExpbmUodGhp
cyk7Ci0gICAgfSwgdGhpcyk7Ci19Ci0KLShmdW5jdGlvbigpIHsKLSAgICB0aGlzLnNoaWZ0Um93
ID0gZnVuY3Rpb24oc2hpZnQpIHsKLSAgICAgICAgdGhpcy5zdGFydC5yb3cgKz0gc2hpZnQ7Ci0g
ICAgICAgIHRoaXMuZW5kLnJvdyArPSBzaGlmdDsKLSAgICAgICAgdGhpcy5mb2xkcy5mb3JFYWNo
KGZ1bmN0aW9uKGZvbGQpIHsKLSAgICAgICAgICAgIGZvbGQuc3RhcnQucm93ICs9IHNoaWZ0Owot
ICAgICAgICAgICAgZm9sZC5lbmQucm93ICs9IHNoaWZ0OwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICB0aGlzLmFkZEZvbGQgPSBmdW5jdGlvbihmb2xkKSB7Ci0gICAgICAgIGlmIChmb2xkLnNh
bWVSb3cpIHsKLSAgICAgICAgICAgIGlmIChmb2xkLnN0YXJ0LnJvdyA8IHRoaXMuc3RhcnRSb3cg
fHwgZm9sZC5lbmRSb3cgPiB0aGlzLmVuZFJvdykgewotICAgICAgICAgICAgICAgIHRocm93ICJD
YW4ndCBhZGQgYSBmb2xkIHRvIHRoaXMgRm9sZExpbmUgYXMgaXQgaGFzIG5vIGNvbm5lY3Rpb24i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5mb2xkcy5wdXNoKGZvbGQpOwotICAg
ICAgICAgICAgdGhpcy5mb2xkcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gLWEucmFuZ2UuY29tcGFyZUVuZChiLnN0YXJ0LnJvdywgYi5zdGFydC5jb2x1bW4p
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5yYW5nZS5jb21wYXJlRW5k
KGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbikgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93OwotICAgICAgICAgICAgICAgIHRoaXMuZW5k
LmNvbHVtbiA9ICBmb2xkLmVuZC5jb2x1bW47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
cmFuZ2UuY29tcGFyZVN0YXJ0KGZvbGQuZW5kLnJvdywgZm9sZC5lbmQuY29sdW1uKSA8IDApIHsK
LSAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IGZvbGQuc3RhcnQucm93OwotICAgICAg
ICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZm9sZC5zdGFydC5yb3cgPT0gdGhpcy5lbmQucm93
KSB7Ci0gICAgICAgICAgICB0aGlzLmZvbGRzLnB1c2goZm9sZCk7Ci0gICAgICAgICAgICB0aGlz
LmVuZC5yb3cgPSBmb2xkLmVuZC5yb3c7Ci0gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBm
b2xkLmVuZC5jb2x1bW47Ci0gICAgICAgIH0gZWxzZSBpZiAoZm9sZC5lbmQucm93ID09IHRoaXMu
c3RhcnQucm93KSB7Ci0gICAgICAgICAgICB0aGlzLmZvbGRzLnVuc2hpZnQoZm9sZCk7Ci0gICAg
ICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IGZvbGQuc3RhcnQucm93OwotICAgICAgICAgICAgdGhp
cy5zdGFydC5jb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHRocm93ICJUcnlpbmcgdG8gYWRkIGZvbGQgdG8gRm9sZFJvdyB0aGF0IGRvZXNu
J3QgaGF2ZSBhIG1hdGNoaW5nIHJvdyI7Ci0gICAgICAgIH0KLSAgICAgICAgZm9sZC5mb2xkTGlu
ZSA9IHRoaXM7Ci0gICAgfQotCi0gICAgdGhpcy5jb250YWluc1JvdyA9IGZ1bmN0aW9uKHJvdykg
ewotICAgICAgICByZXR1cm4gcm93ID49IHRoaXMuc3RhcnQucm93ICYmIHJvdyA8PSB0aGlzLmVu
ZC5yb3c7Ci0gICAgfQotCi0gICAgdGhpcy53YWxrID0gZnVuY3Rpb24oY2FsbGJhY2ssIGVuZFJv
dywgZW5kQ29sdW1uKSB7Ci0gICAgICAgIHZhciBsYXN0RW5kID0gMCwKLSAgICAgICAgICAgIGZv
bGRzID0gdGhpcy5mb2xkcywKLSAgICAgICAgICAgIGZvbGQsCi0gICAgICAgICAgICBjb21wLCBz
dG9wLCBpc05ld1JvdyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGVuZFJvdyA9PSBudWxsKSB7Ci0g
ICAgICAgICAgICBlbmRSb3cgPSB0aGlzLmVuZC5yb3c7Ci0gICAgICAgICAgICBlbmRDb2x1bW4g
PSB0aGlzLmVuZC5jb2x1bW47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBmb2xkID0gZm9sZHNbaV07Ci0K
LSAgICAgICAgICAgIGNvbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVTdGFydChlbmRSb3csIGVuZENv
bHVtbik7Ci0gICAgICAgICAgICBpZiAoY29tcCA9PSAtMSkgewotICAgICAgICAgICAgICAgIGNh
bGxiYWNrKG51bGwsIGVuZFJvdywgZW5kQ29sdW1uLCBsYXN0RW5kLCBpc05ld1Jvdyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdG9wID0g
Y2FsbGJhY2sobnVsbCwgZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uLCBsYXN0RW5k
LCBpc05ld1Jvdyk7Ci0gICAgICAgICAgICBzdG9wID0gIXN0b3AgJiYgY2FsbGJhY2soZm9sZC5w
bGFjZWhvbGRlciwgZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uLCBsYXN0RW5kKTsK
LSAgICAgICAgICAgIGlmIChzdG9wIHx8IGNvbXAgPT0gMCkgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlzTmV3Um93ID0gIWZvbGQuc2FtZVJv
dzsKLSAgICAgICAgICAgIGxhc3RFbmQgPSBmb2xkLmVuZC5jb2x1bW47Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FsbGJhY2sobnVsbCwgZW5kUm93LCBlbmRDb2x1bW4sIGxhc3RFbmQsIGlzTmV3Um93
KTsKLSAgICB9Ci0KLSAgICB0aGlzLmdldE5leHRGb2xkVG8gPSBmdW5jdGlvbihyb3csIGNvbHVt
bikgewotICAgICAgICB2YXIgZm9sZCwgY21wOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuZm9sZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGZvbGQgPSB0aGlzLmZvbGRz
W2ldOwotICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlRW5kKHJvdywgY29sdW1u
KTsKLSAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgICAgICBmb2xkOiBmb2xkLAotICAgICAgICAgICAgICAgICAgICBr
aW5kOiAiYWZ0ZXIiCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y21wID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAg
ICBmb2xkOiBmb2xkLAotICAgICAgICAgICAgICAgICAgICBraW5kOiAiaW5zaWRlIgotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICB9Ci0KLSAgICB0aGlzLmFkZFJlbW92ZUNoYXJzID0gZnVuY3Rpb24ocm93LCBjb2x1
bW4sIGxlbikgewotICAgICAgICB2YXIgcmV0ID0gdGhpcy5nZXROZXh0Rm9sZFRvKHJvdywgY29s
dW1uKSwKLSAgICAgICAgICAgIGZvbGQsIGZvbGRzOwotICAgICAgICBpZiAocmV0KSB7Ci0gICAg
ICAgICAgICBmb2xkID0gcmV0LmZvbGQ7Ci0gICAgICAgICAgICBpZiAocmV0LmtpbmQgPT0gImlu
c2lkZSIKLSAgICAgICAgICAgICAgICAmJiBmb2xkLnN0YXJ0LmNvbHVtbiAhPSBjb2x1bW4KLSAg
ICAgICAgICAgICAgICAmJiBmb2xkLnN0YXJ0LnJvdyAhPSByb3cpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nKHJvdywg
Y29sdW1uLCBmb2xkKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZC5zdGFydC5yb3cgPT0g
cm93KSB7Ci0gICAgICAgICAgICAgICAgZm9sZHMgPSB0aGlzLmZvbGRzOwotICAgICAgICAgICAg
ICAgIHZhciBpID0gZm9sZHMuaW5kZXhPZihmb2xkKTsKLSAgICAgICAgICAgICAgICBpZiAoaSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uICs9IGxlbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChpOyBpIDwgZm9sZHMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRzW2ldOwotICAgICAgICAg
ICAgICAgICAgICBmb2xkLnN0YXJ0LmNvbHVtbiArPSBsZW47Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghZm9sZC5zYW1lUm93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZm9sZC5lbmQuY29sdW1u
ICs9IGxlbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5lbmQuY29s
dW1uICs9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXMu
c3BsaXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewotICAgICAgICB2YXIgZm9sZCA9IHRoaXMu
Z2V0TmV4dEZvbGRUbyhyb3csIGNvbHVtbikuZm9sZCwKLSAgICAgICAgICAgIGZvbGRzID0gdGhp
cy5mb2xkczsKLSAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTsKLQotICAgICAg
ICBpZiAoIWZvbGQpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAg
ICAgIHZhciBpID0gZm9sZHMuaW5kZXhPZihmb2xkKTsKLSAgICAgICAgdmFyIGZvbGRCZWZvcmUg
PSBmb2xkc1tpIC0gMV07Ci0gICAgICAgIHRoaXMuZW5kLnJvdyA9IGZvbGRCZWZvcmUuZW5kLnJv
dzsKLSAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gZm9sZEJlZm9yZS5lbmQuY29sdW1uOwotICAg
ICAgICBmb2xkcyA9IGZvbGRzLnNwbGljZShpLCBmb2xkcy5sZW5ndGggLSBpKTsKLQotICAgICAg
ICB2YXIgbmV3Rm9sZExpbmUgPSBuZXcgRm9sZExpbmUoZm9sZERhdGEsIGZvbGRzKTsKLSAgICAg
ICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YodGhpcykgKyAxLCAwLCBuZXdGb2xk
TGluZSk7Ci0gICAgICAgIHJldHVybiBuZXdGb2xkTGluZTsKLSAgICB9Ci0KLSAgICB0aGlzLm1l
cmdlID0gZnVuY3Rpb24oZm9sZExpbmVOZXh0KSB7Ci0gICAgICAgIHZhciBmb2xkcyA9IGZvbGRM
aW5lTmV4dC5mb2xkczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgdGhpcy5hZGRGb2xkKGZvbGRzW2ldKTsKLSAgICAgICAgfQot
ICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLmZvbGREYXRhOwotICAgICAgICBmb2xkRGF0YS5z
cGxpY2UoZm9sZERhdGEuaW5kZXhPZihmb2xkTGluZU5leHQpLCAxKTsKLSAgICB9Ci0KLSAgICB0
aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByZXQgPSBbdGhpcy5yYW5n
ZS50b1N0cmluZygpICsgIjogWyIgXTsKLQotICAgICAgICB0aGlzLmZvbGRzLmZvckVhY2goZnVu
Y3Rpb24oZm9sZCkgewotICAgICAgICAgICAgcmV0LnB1c2goIiAgIiArIGZvbGQudG9TdHJpbmco
KSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXQucHVzaCgiXSIpCi0gICAgICAgIHJldHVybiBy
ZXQuam9pbigiXG4iKTsKLSAgICB9Ci0KLSAgICB0aGlzLmlkeFRvUG9zaXRpb24gPSBmdW5jdGlv
bihpZHgpIHsKLSAgICAgICAgdmFyIGxhc3RGb2xkRW5kQ29sdW1uID0gMDsKLSAgICAgICAgdmFy
IGZvbGQ7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZvbGRzLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICB2YXIgZm9sZCA9IHRoaXMuZm9sZHNbaV07Ci0KLSAgICAgICAg
ICAgIGlkeCAtPSBmb2xkLnN0YXJ0LmNvbHVtbiAtIGxhc3RGb2xkRW5kQ29sdW1uOwotICAgICAg
ICAgICAgaWYgKGlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgICAgICAgICByb3c6IGZvbGQuc3RhcnQucm93LAotICAgICAgICAgICAgICAgICAgICBjb2x1
bW46IGZvbGQuc3RhcnQuY29sdW1uICsgaWR4Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWR4IC09IGZvbGQucGxhY2Vob2xkZXIubGVuZ3RoOwotICAg
ICAgICAgICAgaWYgKGlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5zdGFy
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGFzdEZvbGRFbmRDb2x1bW4gPSBmb2xk
LmVuZC5jb2x1bW47Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
cm93OiB0aGlzLmVuZC5yb3csCi0gICAgICAgICAgICBjb2x1bW46IHRoaXMuZW5kLmNvbHVtbiAr
IGlkeAotICAgICAgICB9OwotICAgIH0KLX0pLmNhbGwoRm9sZExpbmUucHJvdG90eXBlKTsKLQot
ZXhwb3J0cy5Gb2xkTGluZSA9IEZvbGRMaW5lOwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9lZGl0
X3Nlc3Npb24vZm9sZCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci12YXIgRm9sZCA9IGV4cG9ydHMuRm9sZCA9
IGZ1bmN0aW9uKHJhbmdlLCBwbGFjZWhvbGRlcikgewotICAgIHRoaXMuZm9sZExpbmUgPSBudWxs
OwotICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjsKLSAgICB0aGlzLnJhbmdlID0g
cmFuZ2U7Ci0gICAgdGhpcy5zdGFydCA9IHJhbmdlLnN0YXJ0OwotICAgIHRoaXMuZW5kID0gcmFu
Z2UuZW5kOwotCi0gICAgdGhpcy5zYW1lUm93ID0gcmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVu
ZC5yb3c7Ci0gICAgdGhpcy5zdWJGb2xkcyA9IFtdOwotfTsKLQotKGZ1bmN0aW9uKCkgewotCi0g
ICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gJyInICsgdGhp
cy5wbGFjZWhvbGRlciArICciICcgKyB0aGlzLnJhbmdlLnRvU3RyaW5nKCk7Ci0gICAgfTsKLQot
ICAgIHRoaXMuc2V0Rm9sZExpbmUgPSBmdW5jdGlvbihmb2xkTGluZSkgewotICAgICAgICB0aGlz
LmZvbGRMaW5lID0gZm9sZExpbmU7Ci0gICAgICAgIHRoaXMuc3ViRm9sZHMuZm9yRWFjaChmdW5j
dGlvbihmb2xkKSB7Ci0gICAgICAgICAgICBmb2xkLnNldEZvbGRMaW5lKGZvbGRMaW5lKTsKLSAg
ICAgICAgfSk7Ci0gICAgfTsKLQotICAgIHRoaXMuY2xvbmUgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgdmFyIHJhbmdlID0gdGhpcy5yYW5nZS5jbG9uZSgpOwotICAgICAgICB2YXIgZm9sZCA9IG5l
dyBGb2xkKHJhbmdlLCB0aGlzLnBsYWNlaG9sZGVyKTsKLSAgICAgICAgdGhpcy5zdWJGb2xkcy5m
b3JFYWNoKGZ1bmN0aW9uKHN1YkZvbGQpIHsKLSAgICAgICAgICAgIGZvbGQuc3ViRm9sZHMucHVz
aChzdWJGb2xkLmNsb25lKCkpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGZvbGQ7Ci0g
ICAgfTsKLQotICAgIHRoaXMuYWRkU3ViRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHsKLSAgICAgICAg
aWYgKHRoaXMucmFuZ2UuaXNFcXVhbChmb2xkKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwot
Ci0gICAgICAgIGlmICghdGhpcy5yYW5nZS5jb250YWluc1JhbmdlKGZvbGQpKQotICAgICAgICAg
ICAgdGhyb3cgIkEgZm9sZCBjYW4ndCBpbnRlcnNlY3QgYWxyZWFkeSBleGlzdGluZyBmb2xkIiAr
IGZvbGQucmFuZ2UgKyB0aGlzLnJhbmdlOwotCi0gICAgICAgIHZhciByb3cgPSBmb2xkLnJhbmdl
LnN0YXJ0LnJvdywgY29sdW1uID0gZm9sZC5yYW5nZS5zdGFydC5jb2x1bW47Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwLCBjbXAgPSAtMTsgaSA8IHRoaXMuc3ViRm9sZHMubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgIGNtcCA9IHRoaXMuc3ViRm9sZHNbaV0ucmFuZ2UuY29tcGFyZShyb3csIGNv
bHVtbik7Ci0gICAgICAgICAgICBpZiAoY21wICE9IDEpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGFmdGVyU3RhcnQgPSB0aGlzLnN1YkZvbGRzW2ldOwot
Ci0gICAgICAgIGlmIChjbXAgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBhZnRlclN0YXJ0LmFk
ZFN1YkZvbGQoZm9sZCk7Ci0gICAgICAgIHZhciByb3cgPSBmb2xkLnJhbmdlLmVuZC5yb3csIGNv
bHVtbiA9IGZvbGQucmFuZ2UuZW5kLmNvbHVtbjsKLSAgICAgICAgZm9yICh2YXIgaiA9IGksIGNt
cCA9IC0xOyBqIDwgdGhpcy5zdWJGb2xkcy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgY21w
ID0gdGhpcy5zdWJGb2xkc1tqXS5yYW5nZS5jb21wYXJlKHJvdywgY29sdW1uKTsKLSAgICAgICAg
ICAgIGlmIChjbXAgIT0gMSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICB2YXIgYWZ0ZXJFbmQgPSB0aGlzLnN1YkZvbGRzW2pdOwotCi0gICAgICAgIGlmIChjbXAg
PT0gMCkKLSAgICAgICAgICAgIHRocm93ICJBIGZvbGQgY2FuJ3QgaW50ZXJzZWN0IGFscmVhZHkg
ZXhpc3RpbmcgZm9sZCIgKyBmb2xkLnJhbmdlICsgdGhpcy5yYW5nZTsKLQotICAgICAgICB2YXIg
Y29uc3VtZWRGb2xkcyA9IHRoaXMuc3ViRm9sZHMuc3BsaWNlKGksIGogLSBpLCBmb2xkKTsKLSAg
ICAgICAgZm9sZC5zZXRGb2xkTGluZSh0aGlzLmZvbGRMaW5lKTsKLQotICAgICAgICByZXR1cm4g
Zm9sZDsKLSAgICB9OwotCi19KS5jYWxsKEZvbGQucHJvdG90eXBlKTsKLQotfSk7Ci0KLWFjZS5k
ZWZpbmUoJ2FjZS90b2tlbl9pdGVyYXRvcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci12YXIgVG9rZW5JdGVy
YXRvciA9IGZ1bmN0aW9uKHNlc3Npb24sIGluaXRpYWxSb3csIGluaXRpYWxDb2x1bW4pIHsKLSAg
ICB0aGlzLiRzZXNzaW9uID0gc2Vzc2lvbjsKLSAgICB0aGlzLiRyb3cgPSBpbml0aWFsUm93Owot
ICAgIHRoaXMuJHJvd1Rva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKGluaXRpYWxSb3cpOwotCi0g
ICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGluaXRpYWxSb3csIGluaXRpYWxDb2x1
bW4pOwotICAgIHRoaXMuJHRva2VuSW5kZXggPSB0b2tlbiA/IHRva2VuLmluZGV4IDogLTE7Ci19
OwotCi0oZnVuY3Rpb24oKSB7IAotICAgIHRoaXMuc3RlcEJhY2t3YXJkID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRoaXMuJHRva2VuSW5kZXggLT0gMTsKLSAgICAgICAgCi0gICAgICAgIHdoaWxl
ICh0aGlzLiR0b2tlbkluZGV4IDwgMCkgewotICAgICAgICAgICAgdGhpcy4kcm93IC09IDE7Ci0g
ICAgICAgICAgICBpZiAodGhpcy4kcm93IDwgMCkgewotICAgICAgICAgICAgICAgIHRoaXMuJHJv
dyA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICB0aGlzLiRyb3dUb2tlbnMgPSB0aGlzLiRzZXNzaW9u
LmdldFRva2Vucyh0aGlzLiRyb3cpOwotICAgICAgICAgICAgdGhpcy4kdG9rZW5JbmRleCA9IHRo
aXMuJHJvd1Rva2Vucy5sZW5ndGggLSAxOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTsKLSAgICB9OyAgIAot
ICAgIHRoaXMuc3RlcEZvcndhcmQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHJvd0NvdW50
ID0gdGhpcy4kc2Vzc2lvbi5nZXRMZW5ndGgoKTsKLSAgICAgICAgdGhpcy4kdG9rZW5JbmRleCAr
PSAxOwotICAgICAgICAKLSAgICAgICAgd2hpbGUgKHRoaXMuJHRva2VuSW5kZXggPj0gdGhpcy4k
cm93VG9rZW5zLmxlbmd0aCkgewotICAgICAgICAgICAgdGhpcy4kcm93ICs9IDE7Ci0gICAgICAg
ICAgICBpZiAodGhpcy4kcm93ID49IHJvd0NvdW50KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4k
cm93ID0gcm93Q291bnQgLSAxOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLiRyb3dUb2tlbnMgPSB0aGlzLiRzZXNzaW9uLmdl
dFRva2Vucyh0aGlzLiRyb3cpOwotICAgICAgICAgICAgdGhpcy4kdG9rZW5JbmRleCA9IDA7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gdGhpcy4kcm93VG9rZW5zW3Ro
aXMuJHRva2VuSW5kZXhdOwotICAgIH07ICAgICAgCi0gICAgdGhpcy5nZXRDdXJyZW50VG9rZW4g
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9r
ZW5JbmRleF07Ci0gICAgfTsgICAgICAKLSAgICB0aGlzLmdldEN1cnJlbnRUb2tlblJvdyA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHJvdzsKLSAgICB9OyAgICAgCi0gICAg
dGhpcy5nZXRDdXJyZW50VG9rZW5Db2x1bW4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHJv
d1Rva2VucyA9IHRoaXMuJHJvd1Rva2VuczsKLSAgICAgICAgdmFyIHRva2VuSW5kZXggPSB0aGlz
LiR0b2tlbkluZGV4OwotICAgICAgICB2YXIgY29sdW1uID0gcm93VG9rZW5zW3Rva2VuSW5kZXhd
LnN0YXJ0OwotICAgICAgICBpZiAoY29sdW1uICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBy
ZXR1cm4gY29sdW1uOwotICAgICAgICAgICAgCi0gICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICAg
IHdoaWxlICh0b2tlbkluZGV4ID4gMCkgewotICAgICAgICAgICAgdG9rZW5JbmRleCAtPSAxOwot
ICAgICAgICAgICAgY29sdW1uICs9IHJvd1Rva2Vuc1t0b2tlbkluZGV4XS52YWx1ZS5sZW5ndGg7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBjb2x1bW47ICAKLSAgICB9Owot
ICAgICAgICAgICAgCi19KS5jYWxsKFRva2VuSXRlcmF0b3IucHJvdG90eXBlKTsKLQotZXhwb3J0
cy5Ub2tlbkl0ZXJhdG9yID0gVG9rZW5JdGVyYXRvcjsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2Uv
ZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2gnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2UvcmFuZ2UnXSwgZnVuY3Rpb24ocmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIu
Li90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Ci12YXIgUmFuZ2UgPSByZXF1aXJlKCIu
Li9yYW5nZSIpLlJhbmdlOwotCi0KLWZ1bmN0aW9uIEJyYWNrZXRNYXRjaCgpIHsKLQotICAgIHRo
aXMuZmluZE1hdGNoaW5nQnJhY2tldCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBjaHIpIHsKLSAgICAg
ICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSAwKSByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIg
Y2hhckJlZm9yZUN1cnNvciA9IGNociB8fCB0aGlzLmdldExpbmUocG9zaXRpb24ucm93KS5jaGFy
QXQocG9zaXRpb24uY29sdW1uLTEpOwotICAgICAgICBpZiAoY2hhckJlZm9yZUN1cnNvciA9PSAi
IikgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIG1hdGNoID0gY2hhckJlZm9yZUN1cnNvci5t
YXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7Ci0gICAgICAgIGlmICghbWF0Y2gpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpZiAobWF0Y2hbMV0pCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy4kZmluZENsb3NpbmdCcmFja2V0KG1hdGNoWzFdLCBwb3NpdGlvbik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiB0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQo
bWF0Y2hbMl0sIHBvc2l0aW9uKTsKLSAgICB9OwotICAgIAotICAgIHRoaXMuZ2V0QnJhY2tldFJh
bmdlID0gZnVuY3Rpb24ocG9zKSB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHBv
cy5yb3cpOwotICAgICAgICB2YXIgYmVmb3JlID0gdHJ1ZSwgcmFuZ2U7Ci0KLSAgICAgICAgdmFy
IGNociA9IGxpbmUuY2hhckF0KHBvcy5jb2x1bW4tMSk7Ci0gICAgICAgIHZhciBtYXRjaCA9IGNo
ciAmJiBjaHIubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pOwotICAgICAgICBpZiAoIW1h
dGNoKSB7Ci0gICAgICAgICAgICBjaHIgPSBsaW5lLmNoYXJBdChwb3MuY29sdW1uKTsKLSAgICAg
ICAgICAgIHBvcyA9IHtyb3c6IHBvcy5yb3csIGNvbHVtbjogcG9zLmNvbHVtbiArIDF9OwotICAg
ICAgICAgICAgbWF0Y2ggPSBjaHIgJiYgY2hyLm1hdGNoKC8oW1woXFtce10pfChbXClcXVx9XSkv
KTsKLSAgICAgICAgICAgIGJlZm9yZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
bWF0Y2gpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpZiAobWF0Y2hbMV0p
IHsKLSAgICAgICAgICAgIHZhciBicmFja2V0UG9zID0gdGhpcy4kZmluZENsb3NpbmdCcmFja2V0
KG1hdGNoWzFdLCBwb3MpOwotICAgICAgICAgICAgaWYgKCFicmFja2V0UG9zKQotICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRz
KHBvcywgYnJhY2tldFBvcyk7Ci0gICAgICAgICAgICBpZiAoIWJlZm9yZSkgewotICAgICAgICAg
ICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKLSAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5j
b2x1bW4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IHJhbmdl
LmVuZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBicmFja2V0UG9zID0gdGhp
cy4kZmluZE9wZW5pbmdCcmFja2V0KG1hdGNoWzJdLCBwb3MpOwotICAgICAgICAgICAgaWYgKCFi
cmFja2V0UG9zKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmFu
Z2UgPSBSYW5nZS5mcm9tUG9pbnRzKGJyYWNrZXRQb3MsIHBvcyk7Ci0gICAgICAgICAgICBpZiAo
IWJlZm9yZSkgewotICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrOwotICAgICAg
ICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJhbmdlLmN1cnNvciA9IHJhbmdlLnN0YXJ0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gcmFuZ2U7Ci0gICAgfTsKLQotICAgIHRoaXMuJGJyYWNrZXRzID0gewotICAgICAg
ICAiKSI6ICIoIiwKLSAgICAgICAgIigiOiAiKSIsCi0gICAgICAgICJdIjogIlsiLAotICAgICAg
ICAiWyI6ICJdIiwKLSAgICAgICAgInsiOiAifSIsCi0gICAgICAgICJ9IjogInsiCi0gICAgfTsK
LQotICAgIHRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldCA9IGZ1bmN0aW9uKGJyYWNrZXQsIHBvc2l0
aW9uLCB0eXBlUmUpIHsKLSAgICAgICAgdmFyIG9wZW5CcmFja2V0ID0gdGhpcy4kYnJhY2tldHNb
YnJhY2tldF07Ci0gICAgICAgIHZhciBkZXB0aCA9IDE7Ci0KLSAgICAgICAgdmFyIGl0ZXJhdG9y
ID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4p
OwotICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKLSAgICAg
ICAgaWYgKCF0b2tlbikKLSAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQo
KTsKLSAgICAgICAgaWYgKCF0b2tlbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgICBpZiAoIXR5cGVSZSl7Ci0gICAgICAgICAgICB0eXBlUmUgPSBuZXcgUmVnRXhwKAot
ICAgICAgICAgICAgICAgICIoXFwuPyIgKwotICAgICAgICAgICAgICAgIHRva2VuLnR5cGUucmVw
bGFjZSgiLiIsICJcXC4iKS5yZXBsYWNlKCJycGFyZW4iLCAiLnBhcmVuIikKLSAgICAgICAgICAg
ICAgICArICIpKyIKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHZhbHVl
SW5kZXggPSBwb3NpdGlvbi5jb2x1bW4gLSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4o
KSAtIDI7Ci0gICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOwotICAgICAgICAKLSAgICAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAodmFsdWVJbmRl
eCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNociA9IHZhbHVlLmNoYXJBdCh2YWx1ZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hyID09IG9wZW5CcmFja2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlcHRoIC09IDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaXRlcmF0b3IuZ2V0
Q3VycmVudFRva2VuUm93KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB2
YWx1ZUluZGV4ICsgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9OwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGNociA9PSBicmFja2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoICs9IDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhbHVlSW5kZXggLT0gMTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9y
LnN0ZXBCYWNrd2FyZCgpOwotICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgIXR5cGVSZS50
ZXN0KHRva2VuLnR5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHRva2VuID09IG51bGwpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB2YWx1ZSA9
IHRva2VuLnZhbHVlOwotICAgICAgICAgICAgdmFsdWVJbmRleCA9IHZhbHVlLmxlbmd0aCAtIDE7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH07Ci0KLSAg
ICB0aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQgPSBmdW5jdGlvbihicmFja2V0LCBwb3NpdGlvbiwg
dHlwZVJlKSB7Ci0gICAgICAgIHZhciBjbG9zaW5nQnJhY2tldCA9IHRoaXMuJGJyYWNrZXRzW2Jy
YWNrZXRdOwotICAgICAgICB2YXIgZGVwdGggPSAxOwotCi0gICAgICAgIHZhciBpdGVyYXRvciA9
IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsK
LSAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7Ci0gICAgICAg
IGlmICghdG9rZW4pCi0gICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7
Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KCF0eXBlUmUpewotICAgICAgICAgICAgdHlwZVJlID0gbmV3IFJlZ0V4cCgKLSAgICAgICAgICAg
ICAgICAiKFxcLj8iICsKLSAgICAgICAgICAgICAgICB0b2tlbi50eXBlLnJlcGxhY2UoIi4iLCAi
XFwuIikucmVwbGFjZSgibHBhcmVuIiwgIi5wYXJlbiIpCi0gICAgICAgICAgICAgICAgKyAiKSsi
Ci0gICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIHZhciB2YWx1ZUluZGV4ID0gcG9z
aXRpb24uY29sdW1uIC0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7Ci0KLSAgICAg
ICAgd2hpbGUgKHRydWUpIHsKLQotICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7
Ci0gICAgICAgICAgICB2YXIgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7Ci0gICAgICAgICAg
ICB3aGlsZSAodmFsdWVJbmRleCA8IHZhbHVlTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNociA9IHZhbHVlLmNoYXJBdCh2YWx1ZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hy
ID09IGNsb3NpbmdCcmFja2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoIC09IDE7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ge3JvdzogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB2YWx1ZUluZGV4ICsgaXRlcmF0b3IuZ2V0Q3Vy
cmVudFRva2VuQ29sdW1uKCl9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PSBicmFja2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlcHRoICs9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHZhbHVlSW5kZXggKz0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRvIHsKLSAg
ICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7Ci0gICAgICAgICAg
ICB9IHdoaWxlICh0b2tlbiAmJiAhdHlwZVJlLnRlc3QodG9rZW4udHlwZSkpOwotCi0gICAgICAg
ICAgICBpZiAodG9rZW4gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgdmFsdWVJbmRleCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBudWxsOwotICAgIH07Ci19Ci1leHBvcnRzLkJyYWNrZXRNYXRjaCA9IEJyYWNrZXRNYXRjaDsK
LQotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9zZWFyY2gnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL29vcCcsICdhY2UvcmFuZ2UnXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIGxhbmcgPSByZXF1
aXJlKCIuL2xpYi9sYW5nIik7Ci12YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Ci12YXIg
UmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Ci0KLXZhciBTZWFyY2ggPSBmdW5jdGlv
bigpIHsKLSAgICB0aGlzLiRvcHRpb25zID0ge307Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0gICAg
dGhpcy5zZXQgPSBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICAgIG9vcC5taXhpbih0aGlzLiRv
cHRpb25zLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfTsKLSAgICB0aGlz
LmdldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGxhbmcuY29weU9iamVj
dCh0aGlzLiRvcHRpb25zKTsKLSAgICB9OwotICAgIHRoaXMuc2V0T3B0aW9ucyA9IGZ1bmN0aW9u
KG9wdGlvbnMpIHsKLSAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgfTsKLSAg
ICB0aGlzLmZpbmQgPSBmdW5jdGlvbihzZXNzaW9uKSB7Ci0gICAgICAgIHZhciBpdGVyYXRvciA9
IHRoaXMuJG1hdGNoSXRlcmF0b3Ioc2Vzc2lvbiwgdGhpcy4kb3B0aW9ucyk7Ci0KLSAgICAgICAg
aWYgKCFpdGVyYXRvcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIg
Zmlyc3RSYW5nZSA9IG51bGw7Ci0gICAgICAgIGl0ZXJhdG9yLmZvckVhY2goZnVuY3Rpb24ocmFu
Z2UsIHJvdywgb2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoIXJhbmdlLnN0YXJ0KSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHJhbmdlLm9mZnNldCArIChvZmZzZXQgfHwgMCk7Ci0g
ICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IG5ldyBSYW5nZShyb3csIGNvbHVtbiwgcm93LCBj
b2x1bW4rcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IGZpcnN0UmFuZ2UgPSByYW5nZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
KTsKLQotICAgICAgICByZXR1cm4gZmlyc3RSYW5nZTsKLSAgICB9OwotICAgIHRoaXMuZmluZEFs
bCA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKLSAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRp
b25zOwotICAgICAgICBpZiAoIW9wdGlvbnMubmVlZGxlKQotICAgICAgICAgICAgcmV0dXJuIFtd
OwotICAgICAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTsKLQotICAgICAgICB2YXIg
cmFuZ2UgPSBvcHRpb25zLnJhbmdlOwotICAgICAgICB2YXIgbGluZXMgPSByYW5nZQotICAgICAg
ICAgICAgPyBzZXNzaW9uLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdykK
LSAgICAgICAgICAgIDogc2Vzc2lvbi5kb2MuZ2V0QWxsTGluZXMoKTsKLQotICAgICAgICB2YXIg
cmFuZ2VzID0gW107Ci0gICAgICAgIHZhciByZSA9IG9wdGlvbnMucmU7Ci0gICAgICAgIGlmIChv
cHRpb25zLiRpc011bHRpTGluZSkgewotICAgICAgICAgICAgdmFyIGxlbiA9IHJlLmxlbmd0aDsK
LSAgICAgICAgICAgIHZhciBtYXhSb3cgPSBsaW5lcy5sZW5ndGggLSBsZW47Ci0gICAgICAgICAg
ICBmb3IgKHZhciByb3cgPSByZS5vZmZzZXQgfHwgMDsgcm93IDw9IG1heFJvdzsgcm93KyspIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKQotICAgICAgICAg
ICAgICAgICAgICBpZiAobGluZXNbcm93ICsgal0uc2VhcmNoKHJlW2pdKSA9PSAtMSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHZhciBzdGFydExpbmUgPSBsaW5lc1tyb3ddOwotICAgICAgICAgICAgICAgIHZhciBsaW5l
ID0gbGluZXNbcm93ICsgbGVuIC0gMV07Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXgg
PSBzdGFydExpbmUubWF0Y2gocmVbMF0pWzBdLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB2YXIg
ZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7Ci0KLSAgICAgICAg
ICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgIHJvdywg
c3RhcnRMaW5lLmxlbmd0aCAtIHN0YXJ0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHJvdyAr
IGxlbiAtIDEsIGVuZEluZGV4Ci0gICAgICAgICAgICAgICAgKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsYW5nLmdldE1hdGNo
T2Zmc2V0cyhsaW5lc1tpXSwgcmUpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgbWF0Y2hlcy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2gg
PSBtYXRjaGVzW2pdOwotICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2Uo
aSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmFu
Z2UpIHsKLSAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsK
LSAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47Ci0gICAgICAg
ICAgICB2YXIgaSA9IDAsIGogPSByYW5nZXMubGVuZ3RoIC0gMTsKLSAgICAgICAgICAgIHdoaWxl
IChpIDwgaiAmJiByYW5nZXNbaV0uc3RhcnQuY29sdW1uIDwgc3RhcnRDb2x1bW4gJiYgcmFuZ2Vz
W2ldLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cpCi0gICAgICAgICAgICAgICAgaSsrOwot
Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IGogJiYgcmFuZ2VzW2pdLmVuZC5jb2x1bW4gPiBlbmRD
b2x1bW4gJiYgcmFuZ2VzW2pdLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykKLSAgICAgICAgICAg
ICAgICBqLS07Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VzLnNsaWNlKGksIGogKyAxKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiByYW5nZXM7Ci0gICAgfTsKLSAgICB0aGlzLnJlcGxh
Y2UgPSBmdW5jdGlvbihpbnB1dCwgcmVwbGFjZW1lbnQpIHsKLSAgICAgICAgdmFyIG9wdGlvbnMg
PSB0aGlzLiRvcHRpb25zOwotCi0gICAgICAgIHZhciByZSA9IHRoaXMuJGFzc2VtYmxlUmVnRXhw
KG9wdGlvbnMpOwotICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpCi0gICAgICAgICAg
ICByZXR1cm4gcmVwbGFjZW1lbnQ7Ci0KLSAgICAgICAgaWYgKCFyZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB2YXIgbWF0Y2ggPSByZS5leGVjKGlucHV0KTsKLSAgICAgICAgaWYg
KCFtYXRjaCB8fCBtYXRjaFswXS5sZW5ndGggIT0gaW5wdXQubGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgIAotICAgICAgICByZXBsYWNlbWVudCA9IGlucHV0LnJlcGxh
Y2UocmUsIHJlcGxhY2VtZW50KTsKLSAgICAgICAgaWYgKG9wdGlvbnMucHJlc2VydmVDYXNlKSB7
Ci0gICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnNwbGl0KCIiKTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIGlucHV0Lmxlbmd0aCk7
IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gaW5wdXRbaV07Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoICYmIGNoLnRvTG93ZXJDYXNlKCkgIT0gY2gpCi0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VtZW50W2ldID0gcmVwbGFjZW1lbnRbaV0udG9VcHBlckNhc2UoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50W2ldID0gcmVw
bGFjZW1lbnRbaV0udG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
cGxhY2VtZW50ID0gcmVwbGFjZW1lbnQuam9pbigiIik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKLSAgICB9OwotCi0gICAgdGhpcy4kbWF0Y2hJdGVy
YXRvciA9IGZ1bmN0aW9uKHNlc3Npb24sIG9wdGlvbnMpIHsKLSAgICAgICAgdmFyIHJlID0gdGhp
cy4kYXNzZW1ibGVSZWdFeHAob3B0aW9ucyk7Ci0gICAgICAgIGlmICghcmUpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzLCBjYWxsYmFjaywgYmFj
a3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHM7Ci0KLSAgICAgICAgaWYgKG9wdGlvbnMuJGlzTXVs
dGlMaW5lKSB7Ci0gICAgICAgICAgICB2YXIgbGVuID0gcmUubGVuZ3RoOwotICAgICAgICAgICAg
dmFyIG1hdGNoSXRlcmF0b3IgPSBmdW5jdGlvbihsaW5lLCByb3csIG9mZnNldCkgewotICAgICAg
ICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gbGluZS5zZWFyY2gocmVbMF0pOwotICAgICAgICAg
ICAgICAgIGlmIChzdGFydEluZGV4ID09IC0xKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIGkpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobGluZS5zZWFyY2gocmVbaV0pID09IC0xKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZh
ciBlbmRJbmRleCA9IGxpbmUubWF0Y2gocmVbbGVuIC0gMV0pWzBdLmxlbmd0aDsKLQotICAgICAg
ICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShyb3csIHN0YXJ0SW5kZXgsIHJvdyArIGxl
biAtIDEsIGVuZEluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmUub2Zmc2V0ID09IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LS07Ci0gICAgICAgICAgICAgICAg
ICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChvZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNv
bHVtbiArPSBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2socmFuZ2UpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IH0gZWxzZSBpZiAoYmFja3dhcmRzKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2hJdGVyYXRvciA9
IGZ1bmN0aW9uKGxpbmUsIHJvdywgc3RhcnRJbmRleCkgewotICAgICAgICAgICAgICAgIHZhciBt
YXRjaGVzID0gbGFuZy5nZXRNYXRjaE9mZnNldHMobGluZSwgcmUpOwotICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSBtYXRjaGVzLmxlbmd0aC0xOyBpID49IDA7IGktLSkKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNhbGxiYWNrKG1hdGNoZXNbaV0sIHJvdywgc3RhcnRJbmRleCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2hJdGVyYXRvciA9IGZ1bmN0aW9uKGxpbmUs
IHJvdywgc3RhcnRJbmRleCkgewotICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gbGFuZy5n
ZXRNYXRjaE9mZnNldHMobGluZSwgcmUpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxi
YWNrKG1hdGNoZXNbaV0sIHJvdywgc3RhcnRJbmRleCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gewotICAgICAgICAgICAgZm9yRWFjaDogZnVuY3Rpb24oX2NhbGxiYWNrKSB7Ci0gICAgICAg
ICAgICAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgc2VsZi4kbGlu
ZUl0ZXJhdG9yKHNlc3Npb24sIG9wdGlvbnMpLmZvckVhY2gobWF0Y2hJdGVyYXRvcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfTsKLQotICAgIHRoaXMuJGFzc2VtYmxlUmVnRXhw
ID0gZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgICBpZiAob3B0aW9ucy5uZWVkbGUgaW5zdGFu
Y2VvZiBSZWdFeHApCi0gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9IG9wdGlvbnMubmVl
ZGxlOwotCi0gICAgICAgIHZhciBuZWVkbGUgPSBvcHRpb25zLm5lZWRsZTsKLQotICAgICAgICBp
ZiAoIW9wdGlvbnMubmVlZGxlKQotICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAoIW9wdGlvbnMucmVnRXhwKQotICAgICAgICAgICAgbmVlZGxlID0g
bGFuZy5lc2NhcGVSZWdFeHAobmVlZGxlKTsKLQotICAgICAgICBpZiAob3B0aW9ucy53aG9sZVdv
cmQpCi0gICAgICAgICAgICBuZWVkbGUgPSAiXFxiIiArIG5lZWRsZSArICJcXGIiOwotCi0gICAg
ICAgIHZhciBtb2RpZmllciA9IG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/ICJnIiA6ICJnaSI7Ci0K
LSAgICAgICAgb3B0aW9ucy4kaXNNdWx0aUxpbmUgPSAvW1xuXHJdLy50ZXN0KG5lZWRsZSk7Ci0g
ICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkKLSAgICAgICAgICAgIHJldHVybiBvcHRp
b25zLnJlID0gdGhpcy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAobmVlZGxlLCBtb2RpZmllcik7
Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAobmVlZGxl
LCBtb2RpZmllcik7Ci0gICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgcmUgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb3B0aW9ucy5yZSA9IHJlOwotICAgIH07Ci0K
LSAgICB0aGlzLiRhc3NlbWJsZU11bHRpbGluZVJlZ0V4cCA9IGZ1bmN0aW9uKG5lZWRsZSwgbW9k
aWZpZXIpIHsKLSAgICAgICAgdmFyIHBhcnRzID0gbmVlZGxlLnJlcGxhY2UoL1xyXG58XHJ8XG4v
ZywgIiRcbl4iKS5zcGxpdCgiXG4iKTsKLSAgICAgICAgdmFyIHJlID0gW107Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHRyeSB7Ci0gICAgICAgICAgICBy
ZS5wdXNoKG5ldyBSZWdFeHAocGFydHNbaV0sIG1vZGlmaWVyKSk7Ci0gICAgICAgIH0gY2F0Y2go
ZSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChw
YXJ0c1swXSA9PSAiIikgewotICAgICAgICAgICAgcmUuc2hpZnQoKTsKLSAgICAgICAgICAgIHJl
Lm9mZnNldCA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZS5vZmZzZXQgPSAw
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZTsKLSAgICB9OwotCi0gICAgdGhpcy4kbGlu
ZUl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykgewotICAgICAgICB2YXIgYmFj
a3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHMgPT0gdHJ1ZTsKLSAgICAgICAgdmFyIHNraXBDdXJy
ZW50ID0gb3B0aW9ucy5za2lwQ3VycmVudCAhPSBmYWxzZTsKLQotICAgICAgICB2YXIgcmFuZ2Ug
PSBvcHRpb25zLnJhbmdlOwotICAgICAgICB2YXIgc3RhcnQgPSBvcHRpb25zLnN0YXJ0OwotICAg
ICAgICBpZiAoIXN0YXJ0KQotICAgICAgICAgICAgc3RhcnQgPSByYW5nZSA/IHJhbmdlW2JhY2t3
YXJkcyA/ICJlbmQiIDogInN0YXJ0Il0gOiBzZXNzaW9uLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwot
ICAgICAgICAgCi0gICAgICAgIGlmIChzdGFydC5zdGFydCkKLSAgICAgICAgICAgIHN0YXJ0ID0g
c3RhcnRbc2tpcEN1cnJlbnQgIT0gYmFja3dhcmRzID8gImVuZCIgOiAic3RhcnQiXTsKLQotICAg
ICAgICB2YXIgZmlyc3RSb3cgPSByYW5nZSA/IHJhbmdlLnN0YXJ0LnJvdyA6IDA7Ci0gICAgICAg
IHZhciBsYXN0Um93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogc2Vzc2lvbi5nZXRMZW5ndGgo
KSAtIDE7Ci0KLSAgICAgICAgdmFyIGZvckVhY2ggPSBiYWNrd2FyZHMgPyBmdW5jdGlvbihjYWxs
YmFjaykgewotICAgICAgICAgICAgICAgIHZhciByb3cgPSBzdGFydC5yb3c7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpLnN1YnN0cmluZygwLCBzdGFy
dC5jb2x1bW4pOwotICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhsaW5lLCByb3cpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHJvdy0tOyBy
b3cgPj0gZmlyc3RSb3c7IHJvdy0tKQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2so
c2Vzc2lvbi5nZXRMaW5lKHJvdyksIHJvdykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09IGZhbHNlKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHJvdyA9IGxhc3RS
b3csIGZpcnN0Um93ID0gc3RhcnQucm93OyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKQotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soc2Vzc2lvbi5nZXRMaW5lKHJvdyksIHJvdykpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IDogZnVuY3Rpb24o
Y2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgcm93ID0gc3RhcnQucm93OwotCi0gICAg
ICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KS5zdWJzdHIoc3RhcnQu
Y29sdW1uKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobGluZSwgcm93LCBzdGFydC5j
b2x1bW4pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBm
b3IgKHJvdyA9IHJvdysxOyByb3cgPD0gbGFzdFJvdzsgcm93KyspCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChjYWxsYmFjayhzZXNzaW9uLmdldExpbmUocm93KSwgcm93KSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndyYXAg
PT0gZmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAg
IGZvciAocm93ID0gZmlyc3RSb3csIGxhc3RSb3cgPSBzdGFydC5yb3c7IHJvdyA8PSBsYXN0Um93
OyByb3crKykKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHNlc3Npb24uZ2V0TGlu
ZShyb3cpLCByb3cpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB7Zm9yRWFjaDogZm9yRWFjaH07Ci0gICAg
fTsKLQotfSkuY2FsbChTZWFyY2gucHJvdG90eXBlKTsKLQotZXhwb3J0cy5TZWFyY2ggPSBTZWFy
Y2g7Ci19KTsKLWFjZS5kZWZpbmUoJ2FjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXInLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9rZXlib2Fy
ZC9oYXNoX2hhbmRsZXInLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29w
Iik7Ci12YXIgSGFzaEhhbmRsZXIgPSByZXF1aXJlKCIuLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIi
KS5IYXNoSGFuZGxlcjsKLXZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRf
ZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKLQotdmFyIENvbW1hbmRNYW5hZ2VyID0gZnVuY3Rpb24o
cGxhdGZvcm0sIGNvbW1hbmRzKSB7Ci0gICAgdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtOwotICAg
IHRoaXMuY29tbWFuZHMgPSB0aGlzLmJ5TmFtZSA9IHt9OwotICAgIHRoaXMuY29tbW1hbmRLZXlC
aW5kaW5nID0ge307Ci0KLSAgICB0aGlzLmFkZENvbW1hbmRzKGNvbW1hbmRzKTsKLQotICAgIHRo
aXMuc2V0RGVmYXVsdEhhbmRsZXIoImV4ZWMiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHJldHVy
biBlLmNvbW1hbmQuZXhlYyhlLmVkaXRvciwgZS5hcmdzIHx8IHt9KTsKLSAgICB9KTsKLX07Ci0K
LW9vcC5pbmhlcml0cyhDb21tYW5kTWFuYWdlciwgSGFzaEhhbmRsZXIpOwotCi0oZnVuY3Rpb24o
KSB7Ci0KLSAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7Ci0KLSAgICB0aGlz
LmV4ZWMgPSBmdW5jdGlvbihjb21tYW5kLCBlZGl0b3IsIGFyZ3MpIHsKLSAgICAgICAgaWYgKHR5
cGVvZiBjb21tYW5kID09PSAnc3RyaW5nJykKLSAgICAgICAgICAgIGNvbW1hbmQgPSB0aGlzLmNv
bW1hbmRzW2NvbW1hbmRdOwotCi0gICAgICAgIGlmICghY29tbWFuZCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZWRpdG9yICYmIGVkaXRvci4kcmVhZE9ubHkgJiYg
IWNvbW1hbmQucmVhZE9ubHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
dmFyIGUgPSB7ZWRpdG9yOiBlZGl0b3IsIGNvbW1hbmQ6IGNvbW1hbmQsIGFyZ3M6IGFyZ3N9Owot
ICAgICAgICB2YXIgcmV0dmFsdWUgPSB0aGlzLl9lbWl0KCJleGVjIiwgZSk7Ci0gICAgICAgIHRo
aXMuX3NpZ25hbCgiYWZ0ZXJFeGVjIiwgZSk7Ci0KLSAgICAgICAgcmV0dXJuIHJldHZhbHVlID09
PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsKLSAgICB9OwotCi0gICAgdGhpcy50b2dnbGVSZWNvcmRp
bmcgPSBmdW5jdGlvbihlZGl0b3IpIHsKLSAgICAgICAgaWYgKHRoaXMuJGluUmVwbGF5KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGVkaXRvciAmJiBlZGl0b3IuX2VtaXQoImNoYW5n
ZVN0YXR1cyIpOwotICAgICAgICBpZiAodGhpcy5yZWNvcmRpbmcpIHsKLSAgICAgICAgICAgIHRo
aXMubWFjcm8ucG9wKCk7Ci0gICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImV4
ZWMiLCB0aGlzLiRhZGRDb21tYW5kVG9NYWNybyk7Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5t
YWNyby5sZW5ndGgpCi0gICAgICAgICAgICAgICAgdGhpcy5tYWNybyA9IHRoaXMub2xkTWFjcm87
Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY29yZGluZyA9IGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghdGhpcy4kYWRkQ29tbWFuZFRvTWFjcm8pIHsKLSAgICAgICAgICAgIHRo
aXMuJGFkZENvbW1hbmRUb01hY3JvID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHRo
aXMubWFjcm8ucHVzaChbZS5jb21tYW5kLCBlLmFyZ3NdKTsKLSAgICAgICAgICAgIH0uYmluZCh0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMub2xkTWFjcm8gPSB0aGlzLm1hY3JvOwot
ICAgICAgICB0aGlzLm1hY3JvID0gW107Ci0gICAgICAgIHRoaXMub24oImV4ZWMiLCB0aGlzLiRh
ZGRDb21tYW5kVG9NYWNybyk7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlY29yZGluZyA9IHRydWU7
Ci0gICAgfTsKLQotICAgIHRoaXMucmVwbGF5ID0gZnVuY3Rpb24oZWRpdG9yKSB7Ci0gICAgICAg
IGlmICh0aGlzLiRpblJlcGxheSB8fCAhdGhpcy5tYWNybykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBpZiAodGhpcy5yZWNvcmRpbmcpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy50
b2dnbGVSZWNvcmRpbmcoZWRpdG9yKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhp
cy4kaW5SZXBsYXkgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5tYWNyby5mb3JFYWNoKGZ1bmN0
aW9uKHgpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHggPT0gInN0cmluZyIpCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuZXhlYyh4LCBlZGl0b3IpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjKHhbMF0sIGVkaXRvciwgeFsxXSk7Ci0g
ICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIHRo
aXMuJGluUmVwbGF5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy50cmlt
TWFjcm8gPSBmdW5jdGlvbihtKSB7Ci0gICAgICAgIHJldHVybiBtLm1hcChmdW5jdGlvbih4KXsK
LSAgICAgICAgICAgIGlmICh0eXBlb2YgeFswXSAhPSAic3RyaW5nIikKLSAgICAgICAgICAgICAg
ICB4WzBdID0geFswXS5uYW1lOwotICAgICAgICAgICAgaWYgKCF4WzFdKQotICAgICAgICAgICAg
ICAgIHggPSB4WzBdOwotICAgICAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIH0pOwotICAgIH07
Ci0KLX0pLmNhbGwoQ29tbWFuZE1hbmFnZXIucHJvdG90eXBlKTsKLQotZXhwb3J0cy5Db21tYW5k
TWFuYWdlciA9IENvbW1hbmRNYW5hZ2VyOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL2tleWJv
YXJkL2hhc2hfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L2xpYi9rZXlzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZh
ciBrZXlVdGlsID0gcmVxdWlyZSgiLi4vbGliL2tleXMiKTsKLQotZnVuY3Rpb24gSGFzaEhhbmRs
ZXIoY29uZmlnLCBwbGF0Zm9ybSkgewotICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTsKLSAg
ICB0aGlzLmNvbW1hbmRzID0ge307Ci0gICAgdGhpcy5jb21tbWFuZEtleUJpbmRpbmcgPSB7fTsK
LQotICAgIHRoaXMuYWRkQ29tbWFuZHMoY29uZmlnKTsKLX07Ci0KLShmdW5jdGlvbigpIHsKLQot
ICAgIHRoaXMuYWRkQ29tbWFuZCA9IGZ1bmN0aW9uKGNvbW1hbmQpIHsKLSAgICAgICAgaWYgKHRo
aXMuY29tbWFuZHNbY29tbWFuZC5uYW1lXSkKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWFu
ZChjb21tYW5kKTsKLQotICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmQubmFtZV0gPSBjb21t
YW5kOwotCi0gICAgICAgIGlmIChjb21tYW5kLmJpbmRLZXkpCi0gICAgICAgICAgICB0aGlzLl9i
dWlsZEtleUhhc2goY29tbWFuZCk7Ci0gICAgfTsKLQotICAgIHRoaXMucmVtb3ZlQ29tbWFuZCA9
IGZ1bmN0aW9uKGNvbW1hbmQpIHsKLSAgICAgICAgdmFyIG5hbWUgPSAodHlwZW9mIGNvbW1hbmQg
PT09ICdzdHJpbmcnID8gY29tbWFuZCA6IGNvbW1hbmQubmFtZSk7Ci0gICAgICAgIGNvbW1hbmQg
PSB0aGlzLmNvbW1hbmRzW25hbWVdOwotICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tuYW1l
XTsKLSAgICAgICAgdmFyIGNrYiA9IHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nOwotICAgICAgICBm
b3IgKHZhciBoYXNoSWQgaW4gY2tiKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY2ti
W2hhc2hJZF0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY2tiW2hhc2hJZF1ba2V5XSA9PSBjb21t
YW5kKQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2tiW2hhc2hJZF1ba2V5XTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0aGlzLmJpbmRLZXkgPSBmdW5jdGlv
bihrZXksIGNvbW1hbmQpIHsKLSAgICAgICAgaWYoIWtleSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAg
IHRoaXMuYWRkQ29tbWFuZCh7ZXhlYzogY29tbWFuZCwgYmluZEtleToga2V5LCBuYW1lOiBrZXl9
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBja2IgPSB0
aGlzLmNvbW1tYW5kS2V5QmluZGluZzsKLSAgICAgICAga2V5LnNwbGl0KCJ8IikuZm9yRWFjaChm
dW5jdGlvbihrZXlQYXJ0KSB7Ci0gICAgICAgICAgICB2YXIgYmluZGluZyA9IHRoaXMucGFyc2VL
ZXlzKGtleVBhcnQsIGNvbW1hbmQpOwotICAgICAgICAgICAgdmFyIGhhc2hJZCA9IGJpbmRpbmcu
aGFzaElkOwotICAgICAgICAgICAgKGNrYltoYXNoSWRdIHx8IChja2JbaGFzaElkXSA9IHt9KSlb
YmluZGluZy5rZXldID0gY29tbWFuZDsKLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgfTsKLQotICAg
IHRoaXMuYWRkQ29tbWFuZHMgPSBmdW5jdGlvbihjb21tYW5kcykgewotICAgICAgICBjb21tYW5k
cyAmJiBPYmplY3Qua2V5cyhjb21tYW5kcykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7Ci0gICAg
ICAgICAgICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzW25hbWVdOwotICAgICAgICAgICAgaWYgKHR5
cGVvZiBjb21tYW5kID09PSAic3RyaW5nIikKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5i
aW5kS2V5KGNvbW1hbmQsIG5hbWUpOwotCi0gICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQg
PT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICAgICAgY29tbWFuZCA9IHsgZXhlYzogY29tbWFu
ZCB9OwotCi0gICAgICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSkKLSAgICAgICAgICAgICAgICBj
b21tYW5kLm5hbWUgPSBuYW1lOwotCi0gICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFu
ZCk7Ci0gICAgICAgIH0sIHRoaXMpOwotICAgIH07Ci0KLSAgICB0aGlzLnJlbW92ZUNvbW1hbmRz
ID0gZnVuY3Rpb24oY29tbWFuZHMpIHsKLSAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZHMpLmZv
ckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNv
bW1hbmRzW25hbWVdKTsKLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgfTsKLQotICAgIHRoaXMuYmlu
ZEtleXMgPSBmdW5jdGlvbihrZXlMaXN0KSB7Ci0gICAgICAgIE9iamVjdC5rZXlzKGtleUxpc3Qp
LmZvckVhY2goZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICB0aGlzLmJpbmRLZXkoa2V5LCBr
ZXlMaXN0W2tleV0pOwotICAgICAgICB9LCB0aGlzKTsKLSAgICB9OwotCi0gICAgdGhpcy5fYnVp
bGRLZXlIYXNoID0gZnVuY3Rpb24oY29tbWFuZCkgewotICAgICAgICB2YXIgYmluZGluZyA9IGNv
bW1hbmQuYmluZEtleTsKLSAgICAgICAgaWYgKCFiaW5kaW5nKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHZhciBrZXkgPSB0eXBlb2YgYmluZGluZyA9PSAic3RyaW5nIiA/IGJpbmRp
bmc6IGJpbmRpbmdbdGhpcy5wbGF0Zm9ybV07Ci0gICAgICAgIHRoaXMuYmluZEtleShrZXksIGNv
bW1hbmQpOwotICAgIH07Ci0gICAgdGhpcy5wYXJzZUtleXMgPSBmdW5jdGlvbihrZXlzKSB7Ci0g
ICAgICAgIGlmIChrZXlzLmluZGV4T2YoIiAiKSAhPSAtMSkKLSAgICAgICAgICAgIGtleXMgPSBr
ZXlzLnNwbGl0KC9ccysvKS5wb3AoKTsKLQotICAgICAgICB2YXIgcGFydHMgPSBrZXlzLnRvTG93
ZXJDYXNlKCkuc3BsaXQoL1tcLVwrXShbXC1cK10pPy8pLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1
cm4geH0pOwotICAgICAgICB2YXIga2V5ID0gcGFydHMucG9wKCk7Ci0KLSAgICAgICAgdmFyIGtl
eUNvZGUgPSBrZXlVdGlsW2tleV07Ci0gICAgICAgIGlmIChrZXlVdGlsLkZVTkNUSU9OX0tFWVNb
a2V5Q29kZV0pCi0gICAgICAgICAgICBrZXkgPSBrZXlVdGlsLkZVTkNUSU9OX0tFWVNba2V5Q29k
ZV0udG9Mb3dlckNhc2UoKTsKLSAgICAgICAgZWxzZSBpZiAoIXBhcnRzLmxlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybiB7a2V5OiBrZXksIGhhc2hJZDogLTF9OwotICAgICAgICBlbHNlIGlmIChw
YXJ0cy5sZW5ndGggPT0gMSAmJiBwYXJ0c1swXSA9PSAic2hpZnQiKQotICAgICAgICAgICAgcmV0
dXJuIHtrZXk6IGtleS50b1VwcGVyQ2FzZSgpLCBoYXNoSWQ6IC0xfTsKLQotICAgICAgICB2YXIg
aGFzaElkID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aDsgaS0tOykgewot
ICAgICAgICAgICAgdmFyIG1vZGlmaWVyID0ga2V5VXRpbC5LRVlfTU9EU1twYXJ0c1tpXV07Ci0g
ICAgICAgICAgICBpZiAobW9kaWZpZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmICh0
eXBlb2YgY29uc29sZSAhPSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJpbnZhbGlkIG1vZGlmaWVyICIgKyBwYXJ0c1tpXSArICIgaW4gIiArIGtleXMpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhh
c2hJZCB8PSBtb2RpZmllcjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4ge2tleToga2V5LCBo
YXNoSWQ6IGhhc2hJZH07Ci0gICAgfTsKLQotICAgIHRoaXMuZmluZEtleUNvbW1hbmQgPSBmdW5j
dGlvbiBmaW5kS2V5Q29tbWFuZChoYXNoSWQsIGtleVN0cmluZykgewotICAgICAgICB2YXIgY2ti
ciA9IHRoaXMuY29tbW1hbmRLZXlCaW5kaW5nOwotICAgICAgICByZXR1cm4gY2ticltoYXNoSWRd
ICYmIGNrYnJbaGFzaElkXVtrZXlTdHJpbmddOwotICAgIH07Ci0KLSAgICB0aGlzLmhhbmRsZUtl
eWJvYXJkID0gZnVuY3Rpb24oZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUpIHsKLSAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIGNvbW1hbmQ6IHRoaXMuZmluZEtleUNvbW1hbmQo
aGFzaElkLCBrZXlTdHJpbmcpCi0gICAgICAgIH07Ci0gICAgfTsKLQotfSkuY2FsbChIYXNoSGFu
ZGxlci5wcm90b3R5cGUpCi0KLWV4cG9ydHMuSGFzaEhhbmRsZXIgPSBIYXNoSGFuZGxlcjsKLX0p
OwotCi1hY2UuZGVmaW5lKCdhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcycsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9jb25maWcnXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIGxhbmcgPSByZXF1
aXJlKCIuLi9saWIvbGFuZyIpOwotdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOwot
Ci1mdW5jdGlvbiBiaW5kS2V5KHdpbiwgbWFjKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgd2lu
OiB3aW4sCi0gICAgICAgIG1hYzogbWFjCi0gICAgfTsKLX0KLQotZXhwb3J0cy5jb21tYW5kcyA9
IFt7Ci0gICAgbmFtZTogInNlbGVjdGFsbCIsCi0gICAgYmluZEtleTogYmluZEtleSgiQ3RybC1B
IiwgIkNvbW1hbmQtQSIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vs
ZWN0QWxsKCk7IH0sCi0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAiY2VudGVy
c2VsZWN0aW9uIiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJDdHJsLUwiKSwKLSAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNlbnRlclNlbGVjdGlvbigpOyB9LAotICAg
IHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogImdvdG9saW5lIiwKLSAgICBiaW5kS2V5
OiBiaW5kS2V5KCJDdHJsLUwiLCAiQ29tbWFuZC1MIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7Ci0gICAgICAgIHZhciBsaW5lID0gcGFyc2VJbnQocHJvbXB0KCJFbnRlciBsaW5lIG51
bWJlcjoiKSwgMTApOwotICAgICAgICBpZiAoIWlzTmFOKGxpbmUpKSB7Ci0gICAgICAgICAgICBl
ZGl0b3IuZ290b0xpbmUobGluZSk7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIHJlYWRPbmx5OiB0
cnVlCi19LCB7Ci0gICAgbmFtZTogImZvbGQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1M
fEN0cmwtRjEiLCAiQ29tbWFuZC1BbHQtTHxDb21tYW5kLUYxIiksCi0gICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnRvZ2dsZUZvbGQoZmFsc2UpOyB9LAotICAgIHJl
YWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogInVuZm9sZCIsCi0gICAgYmluZEtleTogYmlu
ZEtleSgiQWx0LVNoaWZ0LUx8Q3RybC1TaGlmdC1GMSIsICJDb21tYW5kLUFsdC1TaGlmdC1MfENv
bW1hbmQtU2hpZnQtRjEiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNl
c3Npb24udG9nZ2xlRm9sZCh0cnVlKTsgfSwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAg
IG5hbWU6ICJmb2xkYWxsIiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtMCIsICJDb21tYW5k
LU9wdGlvbi0wIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9u
LmZvbGRBbGwoKTsgfSwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJ1bmZv
bGRhbGwiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC0wIiwgIkNvbW1hbmQtT3B0
aW9uLVNoaWZ0LTAiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Np
b24udW5mb2xkKCk7IH0sCi0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAiZmlu
ZG5leHQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtSyIsICJDb21tYW5kLUciKSwKLSAg
ICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmZpbmROZXh0KCk7IH0sCi0gICAgcmVh
ZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAiZmluZHByZXZpb3VzIiwKLSAgICBiaW5kS2V5
OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LUsiLCAiQ29tbWFuZC1TaGlmdC1HIiksCi0gICAgZXhlYzog
ZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5maW5kUHJldmlvdXMoKTsgfSwKLSAgICByZWFkT25s
eTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJmaW5kIiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJD
dHJsLUYiLCAiQ29tbWFuZC1GIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7Ci0gICAg
ICAgIGNvbmZpZy5sb2FkTW9kdWxlKCJhY2UvZXh0L3NlYXJjaGJveCIsIGZ1bmN0aW9uKGUpIHtl
LlNlYXJjaChlZGl0b3IpfSk7Ci0gICAgfSwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAg
IG5hbWU6ICJvdmVyd3JpdGUiLAotICAgIGJpbmRLZXk6ICJJbnNlcnQiLAotICAgIGV4ZWM6IGZ1
bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9nZ2xlT3ZlcndyaXRlKCk7IH0sCi0gICAgcmVhZE9u
bHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAic2VsZWN0dG9zdGFydCIsCi0gICAgYmluZEtleTog
YmluZEtleSgiQ3RybC1TaGlmdC1Ib21lIiwgIkNvbW1hbmQtU2hpZnQtVXAiKSwKLSAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVTdGFy
dCgpOyB9LAotICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCi0gICAgcmVhZE9ubHk6
IHRydWUKLX0sIHsKLSAgICBuYW1lOiAiZ290b3N0YXJ0IiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5
KCJDdHJsLUhvbWUiLCAiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXAiKSwKLSAgICBleGVjOiBmdW5j
dGlvbihlZGl0b3IpIHsgZWRpdG9yLm5hdmlnYXRlRmlsZVN0YXJ0KCk7IH0sCi0gICAgbXVsdGlT
ZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5h
bWU6ICJzZWxlY3R1cCIsCi0gICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtVXAiLCAiU2hpZnQt
VXAiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigp
LnNlbGVjdFVwKCk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICBy
ZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJnb2xpbmV1cCIsCi0gICAgYmluZEtleTog
YmluZEtleSgiVXAiLCAiVXB8Q3RybC1QIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBh
cmdzKSB7IGVkaXRvci5uYXZpZ2F0ZVVwKGFyZ3MudGltZXMpOyB9LAotICAgIG11bHRpU2VsZWN0
QWN0aW9uOiAiZm9yRWFjaCIsCi0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAi
c2VsZWN0dG9lbmQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRW5kIiwgIkNv
bW1hbmQtU2hpZnQtRG93biIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
Z2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZUVuZCgpOyB9LAotICAgIG11bHRpU2VsZWN0QWN0aW9u
OiAiZm9yRWFjaCIsCi0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAiZ290b2Vu
ZCIsCi0gICAgYmluZEtleTogYmluZEtleSgiQ3RybC1FbmQiLCAiQ29tbWFuZC1FbmR8Q29tbWFu
ZC1Eb3duIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUZp
bGVFbmQoKTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAotICAgIHJlYWRP
bmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogInNlbGVjdGRvd24iLAotICAgIGJpbmRLZXk6IGJp
bmRLZXkoIlNoaWZ0LURvd24iLCAiU2hpZnQtRG93biIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RG93bigpOyB9LAotICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCi0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBu
YW1lOiAiZ29saW5lZG93biIsCi0gICAgYmluZEtleTogYmluZEtleSgiRG93biIsICJEb3dufEN0
cmwtTiIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdh
dGVEb3duKGFyZ3MudGltZXMpOyB9LAotICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIs
Ci0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAic2VsZWN0d29yZGxlZnQiLAot
ICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtTGVmdCIsICJPcHRpb24tU2hpZnQtTGVm
dCIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCku
c2VsZWN0V29yZExlZnQoKTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAot
ICAgIHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogImdvdG93b3JkbGVmdCIsCi0gICAg
YmluZEtleTogYmluZEtleSgiQ3RybC1MZWZ0IiwgIk9wdGlvbi1MZWZ0IiksCi0gICAgZXhlYzog
ZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZVdvcmRMZWZ0KCk7IH0sCi0gICAgbXVs
dGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAg
IG5hbWU6ICJzZWxlY3R0b2xpbmVzdGFydCIsCi0gICAgYmluZEtleTogYmluZEtleSgiQWx0LVNo
aWZ0LUxlZnQiLCAiQ29tbWFuZC1TaGlmdC1MZWZ0IiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRp
dG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKTsgfSwKLSAgICBt
dWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAotICAgIHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0g
ICAgbmFtZTogImdvdG9saW5lc3RhcnQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1MZWZ0
fEhvbWUiLCAiQ29tbWFuZC1MZWZ0fEhvbWV8Q3RybC1BIiksCi0gICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZUxpbmVTdGFydCgpOyB9LAotICAgIG11bHRpU2VsZWN0
QWN0aW9uOiAiZm9yRWFjaCIsCi0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAi
c2VsZWN0bGVmdCIsCi0gICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtTGVmdCIsICJTaGlmdC1M
ZWZ0IiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24o
KS5zZWxlY3RMZWZ0KCk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAg
ICByZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJnb3RvbGVmdCIsCi0gICAgYmluZEtl
eTogYmluZEtleSgiTGVmdCIsICJMZWZ0fEN0cmwtQiIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvciwgYXJncykgeyBlZGl0b3IubmF2aWdhdGVMZWZ0KGFyZ3MudGltZXMpOyB9LAotICAgIG11
bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCi0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAg
ICBuYW1lOiAic2VsZWN0d29yZHJpZ2h0IiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNo
aWZ0LVJpZ2h0IiwgIk9wdGlvbi1TaGlmdC1SaWdodCIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZFJpZ2h0KCk7IH0sCi0gICAg
bXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewot
ICAgIG5hbWU6ICJnb3Rvd29yZHJpZ2h0IiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVJp
Z2h0IiwgIk9wdGlvbi1SaWdodCIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IubmF2aWdhdGVXb3JkUmlnaHQoKTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVh
Y2giLAotICAgIHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogInNlbGVjdHRvbGluZWVu
ZCIsCi0gICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LVJpZ2h0IiwgIkNvbW1hbmQtU2hp
ZnQtUmlnaHQiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVj
dGlvbigpLnNlbGVjdExpbmVFbmQoKTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVh
Y2giLAotICAgIHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogImdvdG9saW5lZW5kIiwK
LSAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtUmlnaHR8RW5kIiwgIkNvbW1hbmQtUmlnaHR8RW5k
fEN0cmwtRSIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVM
aW5lRW5kKCk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICByZWFk
T25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJzZWxlY3RyaWdodCIsCi0gICAgYmluZEtleTog
YmluZEtleSgiU2hpZnQtUmlnaHQiLCAiU2hpZnQtUmlnaHQiKSwKLSAgICBleGVjOiBmdW5jdGlv
bihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFJpZ2h0KCk7IH0sCi0gICAg
bXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewot
ICAgIG5hbWU6ICJnb3RvcmlnaHQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIlJpZ2h0IiwgIlJp
Z2h0fEN0cmwtRiIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgeyBlZGl0b3Iu
bmF2aWdhdGVSaWdodChhcmdzLnRpbWVzKTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZv
ckVhY2giLAotICAgIHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogInNlbGVjdHBhZ2Vk
b3duIiwKLSAgICBiaW5kS2V5OiAiU2hpZnQtUGFnZURvd24iLAotICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0UGFnZURvd24oKTsgfSwKLSAgICByZWFkT25seTogdHJ1
ZQotfSwgewotICAgIG5hbWU6ICJwYWdlZG93biIsCi0gICAgYmluZEtleTogYmluZEtleShudWxs
LCAiT3B0aW9uLVBhZ2VEb3duIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRv
ci5zY3JvbGxQYWdlRG93bigpOyB9LAotICAgIHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFt
ZTogImdvdG9wYWdlZG93biIsCi0gICAgYmluZEtleTogYmluZEtleSgiUGFnZURvd24iLCAiUGFn
ZURvd258Q3RybC1WIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nb3Rv
UGFnZURvd24oKTsgfSwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJzZWxl
Y3RwYWdldXAiLAotICAgIGJpbmRLZXk6ICJTaGlmdC1QYWdlVXAiLAotICAgIGV4ZWM6IGZ1bmN0
aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0UGFnZVVwKCk7IH0sCi0gICAgcmVhZE9ubHk6IHRy
dWUKLX0sIHsKLSAgICBuYW1lOiAicGFnZXVwIiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGws
ICJPcHRpb24tUGFnZVVwIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5z
Y3JvbGxQYWdlVXAoKTsgfSwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJn
b3RvcGFnZXVwIiwKLSAgICBiaW5kS2V5OiAiUGFnZVVwIiwKLSAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLmdvdG9QYWdlVXAoKTsgfSwKLSAgICByZWFkT25seTogdHJ1ZQotfSwg
ewotICAgIG5hbWU6ICJzY3JvbGx1cCIsCi0gICAgYmluZEtleTogYmluZEtleSgiQ3RybC1VcCIs
IG51bGwpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAt
MiAqIGUucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodCk7IH0sCi0gICAgcmVhZE9ubHk6
IHRydWUKLX0sIHsKLSAgICBuYW1lOiAic2Nyb2xsZG93biIsCi0gICAgYmluZEtleTogYmluZEtl
eSgiQ3RybC1Eb3duIiwgbnVsbCksCi0gICAgZXhlYzogZnVuY3Rpb24oZSkgeyBlLnJlbmRlcmVy
LnNjcm9sbEJ5KDAsIDIgKiBlLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQpOyB9LAot
ICAgIHJlYWRPbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogInNlbGVjdGxpbmVzdGFydCIsCi0g
ICAgYmluZEtleTogIlNoaWZ0LUhvbWUiLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBl
ZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZVN0YXJ0KCk7IH0sCi0gICAgbXVsdGlTZWxl
Y3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6
ICJzZWxlY3RsaW5lZW5kIiwKLSAgICBiaW5kS2V5OiAiU2hpZnQtRW5kIiwKLSAgICBleGVjOiBm
dW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVFbmQoKTsg
fSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAotICAgIHJlYWRPbmx5OiB0cnVl
Ci19LCB7Ci0gICAgbmFtZTogInRvZ2dsZXJlY29yZGluZyIsCi0gICAgYmluZEtleTogYmluZEtl
eSgiQ3RybC1BbHQtRSIsICJDb21tYW5kLU9wdGlvbi1FIiksCi0gICAgZXhlYzogZnVuY3Rpb24o
ZWRpdG9yKSB7IGVkaXRvci5jb21tYW5kcy50b2dnbGVSZWNvcmRpbmcoZWRpdG9yKTsgfSwKLSAg
ICByZWFkT25seTogdHJ1ZQotfSwgewotICAgIG5hbWU6ICJyZXBsYXltYWNybyIsCi0gICAgYmlu
ZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1FIiwgIkNvbW1hbmQtU2hpZnQtRSIpLAotICAgIGV4
ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tbWFuZHMucmVwbGF5KGVkaXRvcik7IH0s
Ci0gICAgcmVhZE9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAianVtcHRvbWF0Y2hpbmciLAot
ICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtUCIsICJDdHJsLVNoaWZ0LVAiKSwKLSAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmp1bXBUb01hdGNoaW5nKCk7IH0sCi0gICAgbXVs
dGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKLSAgICByZWFkT25seTogdHJ1ZQotfSwgewotICAg
IG5hbWU6ICJzZWxlY3R0b21hdGNoaW5nIiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNo
aWZ0LVAiLCBudWxsKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmp1bXBU
b01hdGNoaW5nKHRydWUpOyB9LAotICAgIHJlYWRPbmx5OiB0cnVlCi19LCAKLXsKLSAgICBuYW1l
OiAiY3V0IiwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKLSAgICAgICAgdmFyIHJhbmdl
ID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAgIGVkaXRvci5fZW1pdCgiY3V0
IiwgcmFuZ2UpOwotCi0gICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7Ci0gICAgICAgICAgICBl
ZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICAgICAgfQotICAgIH0sCi0gICAgbXVsdGlTZWxl
Y3RBY3Rpb246ICJmb3JFYWNoIgotfSwgewotICAgIG5hbWU6ICJyZW1vdmVsaW5lIiwKLSAgICBi
aW5kS2V5OiBiaW5kS2V5KCJDdHJsLUQiLCAiQ29tbWFuZC1EIiksCi0gICAgZXhlYzogZnVuY3Rp
b24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVMaW5lcygpOyB9LAotICAgIG11bHRpU2VsZWN0QWN0
aW9uOiAiZm9yRWFjaCIKLX0sIHsKLSAgICBuYW1lOiAiZHVwbGljYXRlU2VsZWN0aW9uIiwKLSAg
ICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LUQiLCAiQ29tbWFuZC1TaGlmdC1EIiksCi0g
ICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5kdXBsaWNhdGVTZWxlY3Rpb24oKTsg
fSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCi19LCB7Ci0gICAgbmFtZTogInNv
cnRsaW5lcyIsCi0gICAgYmluZEtleTogYmluZEtleSgiQ3RybC1BbHQtUyIsICJDb21tYW5kLUFs
dC1TIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zb3J0TGluZXMoKTsg
fSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCi19LCB7Ci0gICAgbmFtZTogInRv
Z2dsZWNvbW1lbnQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtLyIsICJDb21tYW5kLS8i
KSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRvZ2dsZUNvbW1lbnRMaW5l
cygpOyB9LAotICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKLX0sIHsKLSAgICBuYW1l
OiAibW9kaWZ5TnVtYmVyVXAiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtVXAi
LCAiQWx0LVNoaWZ0LVVwIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5t
b2RpZnlOdW1iZXIoMSk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgotfSwg
ewotICAgIG5hbWU6ICJtb2RpZnlOdW1iZXJEb3duIiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJD
dHJsLVNoaWZ0LURvd24iLCAiQWx0LVNoaWZ0LURvd24iKSwKLSAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLm1vZGlmeU51bWJlcigtMSk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rp
b246ICJmb3JFYWNoIgotfSwgewotICAgIG5hbWU6ICJyZXBsYWNlIiwKLSAgICBiaW5kS2V5OiBi
aW5kS2V5KCJDdHJsLUgiLCAiQ29tbWFuZC1PcHRpb24tRiIpLAotICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgewotICAgICAgICBjb25maWcubG9hZE1vZHVsZSgiYWNlL2V4dC9zZWFyY2hib3gi
LCBmdW5jdGlvbihlKSB7ZS5TZWFyY2goZWRpdG9yLCB0cnVlKX0pOwotICAgIH0KLX0sIHsKLSAg
ICBuYW1lOiAidW5kbyIsCi0gICAgYmluZEtleTogYmluZEtleSgiQ3RybC1aIiwgIkNvbW1hbmQt
WiIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudW5kbygpOyB9Ci19LCB7
Ci0gICAgbmFtZTogInJlZG8iLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtWnxD
dHJsLVkiLCAiQ29tbWFuZC1TaGlmdC1afENvbW1hbmQtWSIpLAotICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3IucmVkbygpOyB9Ci19LCB7Ci0gICAgbmFtZTogImNvcHlsaW5lc3Vw
IiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtU2hpZnQtVXAiLCAiQ29tbWFuZC1PcHRpb24t
VXAiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvcHlMaW5lc1VwKCk7
IH0KLX0sIHsKLSAgICBuYW1lOiAibW92ZWxpbmVzdXAiLAotICAgIGJpbmRLZXk6IGJpbmRLZXko
IkFsdC1VcCIsICJPcHRpb24tVXAiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRp
dG9yLm1vdmVMaW5lc1VwKCk7IH0KLX0sIHsKLSAgICBuYW1lOiAiY29weWxpbmVzZG93biIsCi0g
ICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LURvd24iLCAiQ29tbWFuZC1PcHRpb24tRG93
biIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29weUxpbmVzRG93bigp
OyB9Ci19LCB7Ci0gICAgbmFtZTogIm1vdmVsaW5lc2Rvd24iLAotICAgIGJpbmRLZXk6IGJpbmRL
ZXkoIkFsdC1Eb3duIiwgIk9wdGlvbi1Eb3duIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9y
KSB7IGVkaXRvci5tb3ZlTGluZXNEb3duKCk7IH0KLX0sIHsKLSAgICBuYW1lOiAiZGVsIiwKLSAg
ICBiaW5kS2V5OiBiaW5kS2V5KCJEZWxldGUiLCAiRGVsZXRlfEN0cmwtRCIpLAotICAgIGV4ZWM6
IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlKCJyaWdodCIpOyB9LAotICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKLX0sIHsKLSAgICBuYW1lOiAiYmFja3NwYWNlIiwKLSAg
ICBiaW5kS2V5OiBiaW5kS2V5KAotICAgICAgICAiQ29tbWFuZC1CYWNrc3BhY2V8T3B0aW9uLUJh
Y2tzcGFjZXxTaGlmdC1CYWNrc3BhY2V8QmFja3NwYWNlIiwKLSAgICAgICAgIkN0cmwtQmFja3Nw
YWNlfENvbW1hbmQtQmFja3NwYWNlfFNoaWZ0LUJhY2tzcGFjZXxCYWNrc3BhY2V8Q3RybC1IIgot
ICAgICksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmUoImxlZnQi
KTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCi19LCB7Ci0gICAgbmFtZTog
InJlbW92ZXRvbGluZXN0YXJ0IiwKLSAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtQmFja3NwYWNl
IiwgIkNvbW1hbmQtQmFja3NwYWNlIiksCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVk
aXRvci5yZW1vdmVUb0xpbmVTdGFydCgpOyB9LAotICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9y
RWFjaCIKLX0sIHsKLSAgICBuYW1lOiAicmVtb3ZldG9saW5lZW5kIiwKLSAgICBiaW5kS2V5OiBi
aW5kS2V5KCJBbHQtRGVsZXRlIiwgIkN0cmwtSyIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3IucmVtb3ZlVG9MaW5lRW5kKCk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246
ICJmb3JFYWNoIgotfSwgewotICAgIG5hbWU6ICJyZW1vdmV3b3JkbGVmdCIsCi0gICAgYmluZEtl
eTogYmluZEtleSgiQ3RybC1CYWNrc3BhY2UiLCAiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNr
c3BhY2UiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZVdvcmRM
ZWZ0KCk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgotfSwgewotICAgIG5h
bWU6ICJyZW1vdmV3b3JkcmlnaHQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRGVsZXRl
IiwgIkFsdC1EZWxldGUiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJl
bW92ZVdvcmRSaWdodCgpOyB9LAotICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKLX0s
IHsKLSAgICBuYW1lOiAib3V0ZGVudCIsCi0gICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtVGFi
IiwgIlNoaWZ0LVRhYiIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuYmxv
Y2tPdXRkZW50KCk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgotfSwgewot
ICAgIG5hbWU6ICJpbmRlbnQiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIlRhYiIsICJUYWIiKSwK
LSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmluZGVudCgpOyB9LAotICAgIG11
bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKLX0sewotICAgIG5hbWU6ICJibG9ja291dGRlbnQi
LAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtWyIsICJDdHJsLVsiKSwKLSAgICBleGVjOiBm
dW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LAotICAgIG11bHRpU2Vs
ZWN0QWN0aW9uOiAiZm9yRWFjaCIKLX0sewotICAgIG5hbWU6ICJibG9ja2luZGVudCIsCi0gICAg
YmluZEtleTogYmluZEtleSgiQ3RybC1dIiwgIkN0cmwtXSIpLAotICAgIGV4ZWM6IGZ1bmN0aW9u
KGVkaXRvcikgeyBlZGl0b3IuYmxvY2tJbmRlbnQoKTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlv
bjogImZvckVhY2giCi19LCB7Ci0gICAgbmFtZTogImluc2VydHN0cmluZyIsCi0gICAgZXhlYzog
ZnVuY3Rpb24oZWRpdG9yLCBzdHIpIHsgZWRpdG9yLmluc2VydChzdHIpOyB9LAotICAgIG11bHRp
U2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKLX0sIHsKLSAgICBuYW1lOiAiaW5zZXJ0dGV4dCIsCi0g
ICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7Ci0gICAgICAgIGVkaXRvci5pbnNlcnQo
bGFuZy5zdHJpbmdSZXBlYXQoYXJncy50ZXh0ICB8fCAiIiwgYXJncy50aW1lcyB8fCAxKSk7Ci0g
ICAgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCi19LCB7Ci0gICAgbmFtZTog
InNwbGl0bGluZSIsCi0gICAgYmluZEtleTogYmluZEtleShudWxsLCAiQ3RybC1PIiksCi0gICAg
ZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zcGxpdExpbmUoKTsgfSwKLSAgICBtdWx0
aVNlbGVjdEFjdGlvbjogImZvckVhY2giCi19LCB7Ci0gICAgbmFtZTogInRyYW5zcG9zZWxldHRl
cnMiLAotICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtVCIsICJDdHJsLVQiKSwKLSAgICBleGVj
OiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnRyYW5zcG9zZUxldHRlcnMoKTsgfSwKLSAgICBt
dWx0aVNlbGVjdEFjdGlvbjogZnVuY3Rpb24oZWRpdG9yKSB7ZWRpdG9yLnRyYW5zcG9zZVNlbGVj
dGlvbnMoMSk7IH0KLX0sIHsKLSAgICBuYW1lOiAidG91cHBlcmNhc2UiLAotICAgIGJpbmRLZXk6
IGJpbmRLZXkoIkN0cmwtVSIsICJDdHJsLVUiKSwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0b3Ip
IHsgZWRpdG9yLnRvVXBwZXJDYXNlKCk7IH0sCi0gICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JF
YWNoIgotfSwgewotICAgIG5hbWU6ICJ0b2xvd2VyY2FzZSIsCi0gICAgYmluZEtleTogYmluZEtl
eSgiQ3RybC1TaGlmdC1VIiwgIkN0cmwtU2hpZnQtVSIpLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3IudG9Mb3dlckNhc2UoKTsgfSwKLSAgICBtdWx0aVNlbGVjdEFjdGlvbjog
ImZvckVhY2giCi19XTsKLQotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS91bmRvbWFuYWdlcicsIFsn
cmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0
cywgbW9kdWxlKSB7Ci12YXIgVW5kb01hbmFnZXIgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnJl
c2V0KCk7Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5leGVjdXRlID0gZnVuY3Rpb24o
b3B0aW9ucykgewotICAgICAgICB2YXIgZGVsdGFzID0gb3B0aW9ucy5hcmdzWzBdOwotICAgICAg
ICB0aGlzLiRkb2MgID0gb3B0aW9ucy5hcmdzWzFdOwotICAgICAgICB0aGlzLiR1bmRvU3RhY2su
cHVzaChkZWx0YXMpOwotICAgICAgICB0aGlzLiRyZWRvU3RhY2sgPSBbXTsKLSAgICB9OwotICAg
IHRoaXMudW5kbyA9IGZ1bmN0aW9uKGRvbnRTZWxlY3QpIHsKLSAgICAgICAgdmFyIGRlbHRhcyA9
IHRoaXMuJHVuZG9TdGFjay5wb3AoKTsKLSAgICAgICAgdmFyIHVuZG9TZWxlY3Rpb25SYW5nZSA9
IG51bGw7Ci0gICAgICAgIGlmIChkZWx0YXMpIHsKLSAgICAgICAgICAgIHVuZG9TZWxlY3Rpb25S
YW5nZSA9Ci0gICAgICAgICAgICAgICAgdGhpcy4kZG9jLnVuZG9DaGFuZ2VzKGRlbHRhcywgZG9u
dFNlbGVjdCk7Ci0gICAgICAgICAgICB0aGlzLiRyZWRvU3RhY2sucHVzaChkZWx0YXMpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB1bmRvU2VsZWN0aW9uUmFuZ2U7Ci0gICAgfTsKLSAgICB0
aGlzLnJlZG8gPSBmdW5jdGlvbihkb250U2VsZWN0KSB7Ci0gICAgICAgIHZhciBkZWx0YXMgPSB0
aGlzLiRyZWRvU3RhY2sucG9wKCk7Ci0gICAgICAgIHZhciByZWRvU2VsZWN0aW9uUmFuZ2UgPSBu
dWxsOwotICAgICAgICBpZiAoZGVsdGFzKSB7Ci0gICAgICAgICAgICByZWRvU2VsZWN0aW9uUmFu
Z2UgPQotICAgICAgICAgICAgICAgIHRoaXMuJGRvYy5yZWRvQ2hhbmdlcyhkZWx0YXMsIGRvbnRT
ZWxlY3QpOwotICAgICAgICAgICAgdGhpcy4kdW5kb1N0YWNrLnB1c2goZGVsdGFzKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcmVkb1NlbGVjdGlvblJhbmdlOwotICAgIH07Ci0gICAgdGhp
cy5yZXNldCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiR1bmRvU3RhY2sgPSBbXTsKLSAg
ICAgICAgdGhpcy4kcmVkb1N0YWNrID0gW107Ci0gICAgfTsKLSAgICB0aGlzLmhhc1VuZG8gPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHVuZG9TdGFjay5sZW5ndGggPiAwOwot
ICAgIH07Ci0gICAgdGhpcy5oYXNSZWRvID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLiRyZWRvU3RhY2subGVuZ3RoID4gMDsKLSAgICB9OwotCi19KS5jYWxsKFVuZG9NYW5hZ2Vy
LnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMuVW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcjsKLX0pOwot
Ci1hY2UuZGVmaW5lKCdhY2UvdmlydHVhbF9yZW5kZXJlcicsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9kb20nLCAnYWNlL2xpYi9ldmVu
dCcsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvY29uZmlnJywgJ2FjZS9sYXllci9ndXR0ZXIn
LCAnYWNlL2xheWVyL21hcmtlcicsICdhY2UvbGF5ZXIvdGV4dCcsICdhY2UvbGF5ZXIvY3Vyc29y
JywgJ2FjZS9zY3JvbGxiYXInLCAnYWNlL3JlbmRlcmxvb3AnLCAnYWNlL2xpYi9ldmVudF9lbWl0
dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3Ag
PSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKLXZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsK
LXZhciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7Ci12YXIgdXNlcmFnZW50ID0gcmVx
dWlyZSgiLi9saWIvdXNlcmFnZW50Iik7Ci12YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWci
KTsKLXZhciBHdXR0ZXJMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvZ3V0dGVyIikuR3V0dGVyOwot
dmFyIE1hcmtlckxheWVyID0gcmVxdWlyZSgiLi9sYXllci9tYXJrZXIiKS5NYXJrZXI7Ci12YXIg
VGV4dExheWVyID0gcmVxdWlyZSgiLi9sYXllci90ZXh0IikuVGV4dDsKLXZhciBDdXJzb3JMYXll
ciA9IHJlcXVpcmUoIi4vbGF5ZXIvY3Vyc29yIikuQ3Vyc29yOwotdmFyIFNjcm9sbEJhciA9IHJl
cXVpcmUoIi4vc2Nyb2xsYmFyIikuU2Nyb2xsQmFyOwotdmFyIFJlbmRlckxvb3AgPSByZXF1aXJl
KCIuL3JlbmRlcmxvb3AiKS5SZW5kZXJMb29wOwotdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUo
Ii4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Ci12YXIgZWRpdG9yQ3NzID0gIi5h
Y2VfZWRpdG9yIHtcCi1wb3NpdGlvbjogcmVsYXRpdmU7XAotb3ZlcmZsb3c6IGhpZGRlbjtcCi1m
b250LWZhbWlseTogJ01vbmFjbycsICdNZW5sbycsICdVYnVudHUgTW9ubycsICdDb25zb2xhcycs
ICdzb3VyY2UtY29kZS1wcm8nLCBtb25vc3BhY2U7XAotZm9udC1zaXplOiAxMnB4O1wKLWxpbmUt
aGVpZ2h0OiBub3JtYWw7XAotfVwKLS5hY2Vfc2Nyb2xsZXIge1wKLXBvc2l0aW9uOiBhYnNvbHV0
ZTtcCi1vdmVyZmxvdzogaGlkZGVuO1wKLXRvcDogMDtcCi1ib3R0b206IDA7XAotfVwKLS5hY2Vf
Y29udGVudCB7XAotcG9zaXRpb246IGFic29sdXRlO1wKLS1tb3otYm94LXNpemluZzogYm9yZGVy
LWJveDtcCi0td2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAotYm94LXNpemluZzogYm9y
ZGVyLWJveDtcCi1jdXJzb3I6IHRleHQ7XAotfVwKLS5hY2VfZ3V0dGVyIHtcCi1wb3NpdGlvbjog
YWJzb2x1dGU7XAotb3ZlcmZsb3cgOiBoaWRkZW47XAotd2lkdGg6IGF1dG87XAotdG9wOiAwO1wK
LWJvdHRvbTogMDtcCi1sZWZ0OiAwO1wKLWN1cnNvcjogZGVmYXVsdDtcCi16LWluZGV4OiA0O1wK
LX1cCi0uYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XAotcG9zaXRpb246IGFic29sdXRlO1wKLWxl
ZnQ6IDA7XAotcmlnaHQ6IDA7XAotfVwKLS5hY2Vfc2Nyb2xsZXIuYWNlX3Njcm9sbC1sZWZ0IHtc
Ci1ib3gtc2hhZG93OiAxN3B4IDAgMTZweCAtMTZweCByZ2JhKDAsIDAsIDAsIDAuNCkgaW5zZXQ7
XAotfVwKLS5hY2VfZ3V0dGVyLWNlbGwge1wKLXBhZGRpbmctbGVmdDogMTlweDtcCi1wYWRkaW5n
LXJpZ2h0OiA2cHg7XAotYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCi19XAotLmFjZV9n
dXR0ZXItY2VsbC5hY2VfZXJyb3Ige1wKLWJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1h
Z2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85
aEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpw
VkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3
N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNH
MWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJK
bElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4
Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndP
aTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BI
SmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhS
d09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIw
Y0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJ
bWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpW
SmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTlNC
TllXTnBiblJ2YzJnaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFVTTJPRVpE
UVRRNFJUVTBNVEZGTVVFek0wVkZSVE0yUlVZMU0wUkJNallpSUhodGNFMU5Pa1J2WTNWdFpXNTBT
VVE5SW5odGNDNWthV1E2UVVNMk9FWkRRVFU0UlRVME1URkZNVUV6TTBWRlJUTTJSVVkxTTBSQk1q
WWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcx
d0xtbHBaRHBCUXpZNFJrTkJNamhGTlRReE1VVXhRVE16UlVWRk16WkZSalV6UkVFeU5pSWdjM1JT
WldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEJRelk0UmtOQk16aEZOVFF4TVVVeFFUTXpS
VVZGTXpaRlJqVXpSRUV5TmlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVr
UkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BrZ1h4YkFBQUFK
YlNVUkJWSGphcEZOTmFCTkJGSDR6czV2ZFpMUDVzUW1OcFQ4MlFZMjA5aGVoMWlvV2lzYURSY1NL
RjBXS0owR1FucnpyeGFzSHNSNkVubHJ3RDBUYWd4SmFiYVZFcEZZeExXbExTUzgyMnRyODdtNjZj
Y2ZkMkdLeVZoQTZNTXliZ2ZlOTcvdm1QVVFwaGQwc1pqdG85WEluOU9Pc3ZsdTJua3FSelZVKzZ2
dmx6UGY4VzZiazhkeFEwTlBieEFBTGdDZ2cySmthUXVoelFhdS9FbDB6Ym1VQTdVMEVzOHYyQ2lZ
bUtRSkhHTzFRSUNDTG9xaWxNaGttdXJEQXlhcEtncUl0ZXppL1VTUmRKcUVZWTRENWpDeTAzaHQy
eU1ra3ZMOTFqVFRYMTBxenl5dTJocnVQUk43amdiSCtFT3NYY01MZ1lpVGhFZ0FNaEFCVzg1b3F5
MURYZFJJZHZQMUFISjJhY1FYdkRJclZIY2RRTnJFS05ZU1ZNU1pHTWpFeklJQXdEWElvKzZHL0Z4
Y0duemtDM1Qyb01oTGpyZTQ5c0JCK1JSY0hMcWRhZks2c1lkRS9HR0J3VTFWcEZOajBhTjhwSmJl
K0JrWnlldlVydkxsNlhtbTBXOUl1VGMwRHhyRE5BSmQ1b0V2SS9LUnNOQzNiUXlOalBPOXlRMVlI
Y2ZqMlF2ZlFjLzVUVWhKVEJjMmlNMFU3QVdEUXRjMW5KSHZEL2NmTzJzN2phR2tpVEVmYS9FcDhj
b0x1N3ptTm1oOCtkYzVsWkR1VWVGQUdVTkEvT1k2SlZheXBRMHZqcjdYWWpVdkpNMzd2dCtqMXZ1
VEs1RGdWZlZVb1RqVmUreTMvTHhNeFkyR2dVK0NTTHk0Y3Bmc1lvclJYdVhJT2kwVnQ0MGg2N3Va
RlRkSW82bkxhWmN3VUpXQXp3TlMwdEJucXFLelFEbmpkRy9pUHlaeG80NkhhS1VwYnZZa2o4cVlS
VFpzQmhnZStKSGhaeWgweDliOTVKcWpWSmtUMDg0a1pJUHd1L21QV3FQZ2ZRNWpYaDIrOTJBeTdI
ZWRmQWd3QTZLRFdhZmI0dzNjQUFBQUFTVVZPUks1Q1lJST1cIik7XAotYmFja2dyb3VuZC1yZXBl
YXQ6IG5vLXJlcGVhdDtcCi1iYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1wKLX1cCi0u
YWNlX2d1dHRlci1jZWxsLmFjZV93YXJuaW5nIHtcCi1iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJk
YXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlB
QUFBZjgvOWhBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQ
QUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpX
ZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4
NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5
SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXdJRFl4TGpFek5EYzNOeXdnTWpBeE1DOHdN
aTh4TWkweE56b3pNam93TUNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBT
Sm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5N
aklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3
UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5U
VDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMz
UlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhO
dmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3
SUVOVE5TQk5ZV05wYm5SdmMyZ2lJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZR
VU0yT0VaRFFUZzRSVFUwTVRGRk1VRXpNMFZGUlRNMlJVWTFNMFJCTWpZaUlIaHRjRTFOT2tSdlkz
VnRaVzUwU1VROUluaHRjQzVrYVdRNlFVTTJPRVpEUVRrNFJUVTBNVEZGTVVFek0wVkZSVE0yUlVZ
MU0wUkJNallpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZK
UkQwaWVHMXdMbWxwWkRwQlF6WTRSa05CTmpoRk5UUXhNVVV4UVRNelJVVkZNelpGUmpVelJFRXlO
aUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBCUXpZNFJrTkJOemhGTlRReE1V
VXhRVE16UlVWRk16WkZSalV6UkVFeU5pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5
eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZ2Q3
UGZJQUFBR21TVVJCVkhqYVl2ci8vejhESlppSmdVSUFOb0NSa1JFYjlnTGlTVkFhUXg0T1FNN0FB
a3dkN1hVMi92Kysvck90dGRZR0VCOWRBU0V2T015ZEdLZkg4R3YvcDRYVGt2UkJmTHhlUUFQKzFj
VWhYb3B5dnpoUDdQL0lvU2o3ZzdNdzA5Y05LTzZKMVFRMEw0Z0lDUEl2L3ZlZy84VytKZEZ2UU5M
SFZzVzkvbm1uOXprN0IrY0NrRHdoTDdndDZrblNabng5L0x1Q0VPY3ZrSUFNUCtjdnRvOW5mcXla
bW1VQWtzZm5CVXRiTTYwZ1gvMy9rZ3l2My94U0ZPTDVEWlQrTDh2UCtZZmg1Y3ZmUHZwL3hVSHlR
SFhHeUFZd2dwd0JqWllGVDNZMU9FbC9PZkNINGZmdjN3emM0aXdNdk5Jc0RKK2YvbUg0K3ZJUEF4
c2I2MzFXVzBZbG42WnBRTFhkTUsvRFhHRGZsaCtzSXYzN0VpdkQ1eC8vR2I3K1lXVDR5ODZzbDdC
Q0NrU0QrWisrLzFka3ZzRlJsK0huRDFSdmplNEY4d2hqTVhtR2o1OFlHZjV6c0RNd2NuQXdmUHZL
Y21sNjJEc1FEZWFEeE4rL1kwcXdscEVIcXJkQjk0SVJOSURVZ2ZnZktKQ2hHSzRPaWtFVzNnVGlY
VUI5NTBBU0xGQUY1NEFDOTRBMEc5UUFmT25tRjlEQ0R6QUJGcVMwOElIWURJU2NkaWpPalFBQkJn
QysvOWF3Qkg5Nmp3QUFBQUJKUlU1RXJrSmdnZz09XCIpO1wKLWJhY2tncm91bmQtcG9zaXRpb246
IDJweCBjZW50ZXI7XAotfVwKLS5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1wKLWJhY2tncm91
bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTVFBQUFB
QUFFRkJRVkpTVWw1ZVhtUmtaR3RyYTM5L2Y0V0ZoWW1KaVpHUmthYW1wcnk4dk1QRHc4ek16TlhW
MWR6YzNPVGs1T3JxNnZEdzhQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQ0g1QkFrQUFCUUFMQUFBQUFBUUFCQUFBQVV1SUNXT1pHbWVhQm1sNVhHd0ZD
UVNCR3lYUlNBd3RxUUlpUnVpd0lNNUJvWVZiRUZJeUdDUW9lSkdyVnB0SVFBN1wiKTtcCi1iYWNr
Z3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1wKLX1cCi0uYWNlX2RhcmsgLmFjZV9ndXR0ZXIt
Y2VsbC5hY2VfaW5mbyB7XAotYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7
YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUdY
UkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUF5UnBWRmgwV0Ux
TU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJw
WkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdl
RzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVD
QkRiM0psSURVdU15MWpNREV4SURZMkxqRTBOVFkyTVN3Z01qQXhNaTh3TWk4d05pMHhORG8xTmpv
eU55QWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2Qz
TG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVa
WE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJu
TXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1
ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2
THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJ
SGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROaUFvVFdGamFX
NTBiM05vS1NJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR1JUazVNVFZHUkVJ
eE5Ea3hNVVV4T1RjNVEwRkZSRVF5TVROR01qQkZReUlnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBp
ZUcxd0xtUnBaRHBHUlRrNU1UVkdSVUl4TkRreE1VVXhPVGM1UTBGRlJFUXlNVE5HTWpCRlF5SStJ
RHg0YlhCTlRUcEVaWEpwZG1Wa1JuSnZiU0J6ZEZKbFpqcHBibk4wWVc1alpVbEVQU0o0YlhBdWFX
bGtPa1pGT1RreE5VWkNRakUwT1RFeFJURTVOemxEUVVWRVJESXhNMFl5TUVWRElpQnpkRkpsWmpw
a2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09rWkZPVGt4TlVaRFFqRTBPVEV4UlRFNU56bERRVVZF
UkRJeE0wWXlNRVZESWk4K0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJ
RHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K1NJRGtqQUFBQUoxSlJF
RlVlTnBpL1AvL1B3TWxnSW1CUWtCN0E2cXJxLytETUM1NUZrSUdLQ29xNHBWbnBGa2dUcDA2OWYv
Ky9mdi9yMXUzN3IrdHJlMS9rZzBBK3B0bjl1elpZTGFSa1JIcEx2anc0Y05YV1ZsWmh1ZlBuek9j
TzNlT2RBTzB0YlZQQWpIRG16ZHZHQTRmUHN4SXNnR1NrcEptdjM3OVluajM3aDJEakl5TUNNa0cz
TGh4US9UMjdkc01hbXBxREhaMmRxL3BINDFEeHdDQUFBTUFGZGM2OGRVc0ZaZ0FBQUFBU1VWT1JL
NUNZSUk9XCIpO1wKLX1cCi0uYWNlX3Njcm9sbGJhciB7XAotcG9zaXRpb246IGFic29sdXRlO1wK
LW92ZXJmbG93LXg6IGhpZGRlbjtcCi1vdmVyZmxvdy15OiBzY3JvbGw7XAotcmlnaHQ6IDA7XAot
dG9wOiAwO1wKLWJvdHRvbTogMDtcCi19XAotLmFjZV9zY3JvbGxiYXItaW5uZXIge1wKLXBvc2l0
aW9uOiBhYnNvbHV0ZTtcCi13aWR0aDogMXB4O1wKLWxlZnQ6IDA7XAotfVwKLS5hY2VfcHJpbnQt
bWFyZ2luIHtcCi1wb3NpdGlvbjogYWJzb2x1dGU7XAotaGVpZ2h0OiAxMDAlO1wKLX1cCi0uYWNl
X3RleHQtaW5wdXQge1wKLXBvc2l0aW9uOiBhYnNvbHV0ZTtcCi16LWluZGV4OiAwO1wKLXdpZHRo
OiAwLjVlbTtcCi1oZWlnaHQ6IDFlbTtcCi1vcGFjaXR5OiAwO1wKLWJhY2tncm91bmQ6IHRyYW5z
cGFyZW50O1wKLS1tb3otYXBwZWFyYW5jZTogbm9uZTtcCi1hcHBlYXJhbmNlOiBub25lO1wKLWJv
cmRlcjogbm9uZTtcCi1yZXNpemU6IG5vbmU7XAotb3V0bGluZTogbm9uZTtcCi1vdmVyZmxvdzog
aGlkZGVuO1wKLWZvbnQ6IGluaGVyaXQ7XAotfVwKLS5hY2VfdGV4dC1pbnB1dC5hY2VfY29tcG9z
aXRpb24ge1wKLWJhY2tncm91bmQ6ICNmOGY4Zjg7XAotY29sb3I6ICMxMTE7XAotei1pbmRleDog
MTAwMDtcCi1vcGFjaXR5OiAxO1wKLWJvcmRlcjogc29saWQgbGlnaHRncmF5IDFweDtcCi1tYXJn
aW46IC0xcHg7XAotcGFkZGluZzogMCAxcHg7XAotfVwKLS5hY2VfbGF5ZXIge1wKLXotaW5kZXg6
IDE7XAotcG9zaXRpb246IGFic29sdXRlO1wKLW92ZXJmbG93OiBoaWRkZW47XAotd2hpdGUtc3Bh
Y2U6IG5vd3JhcDtcCi1oZWlnaHQ6IDEwMCU7XAotd2lkdGg6IDEwMCU7XAotLW1vei1ib3gtc2l6
aW5nOiBib3JkZXItYm94O1wKLS13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCi1ib3gt
c2l6aW5nOiBib3JkZXItYm94O1wKLS8qIHNldHRpbmcgcG9pbnRlci1ldmVudHM6IGF1dG87IG9u
IG5vZGUgdW5kZXIgdGhlIG1vdXNlLCB3aGljaCBjaGFuZ2VzXAotZHVyaW5nIHNjcm9sbCwgd2ls
bCBicmVhayBtb3VzZSB3aGVlbCBzY3JvbGxpbmcgaW4gU2FmYXJpICovXAotcG9pbnRlci1ldmVu
dHM6IG5vbmU7XAotfVwKLS5hY2VfZ3V0dGVyLWxheWVyIHtcCi1wb3NpdGlvbjogcmVsYXRpdmU7
XAotd2lkdGg6IGF1dG87XAotdGV4dC1hbGlnbjogcmlnaHQ7XAotcG9pbnRlci1ldmVudHM6IGF1
dG87XAotfVwKLS5hY2VfdGV4dC1sYXllciB7XAotY29sb3I6IGJsYWNrO1wKLWZvbnQ6IGluaGVy
aXQgIWltcG9ydGFudDtcCi19XAotLmFjZV9jamsge1wKLWRpc3BsYXk6IGlubGluZS1ibG9jaztc
Ci10ZXh0LWFsaWduOiBjZW50ZXI7XAotfVwKLS5hY2VfY3Vyc29yLWxheWVyIHtcCi16LWluZGV4
OiA0O1wKLX1cCi0uYWNlX2N1cnNvciB7XAotei1pbmRleDogNDtcCi1wb3NpdGlvbjogYWJzb2x1
dGU7XAotLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKLS13ZWJraXQtYm94LXNpemluZzog
Ym9yZGVyLWJveDtcCi1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKLX1cCi0uYWNlX2hpZGRlbi1j
dXJzb3JzIC5hY2VfY3Vyc29yIHtcCi1vcGFjaXR5OiAwLjI7XAotfVwKLS5hY2Vfc21vb3RoLWJs
aW5raW5nIC5hY2VfY3Vyc29yIHtcCi0tbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAot
LXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzO1wKLS1vLXRyYW5zaXRpb246IG9wYWNp
dHkgMC4xOHM7XAotLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XAotdHJhbnNpdGlvbjog
b3BhY2l0eSAwLjE4cztcCi19XAotLmFjZV9jdXJzb3Jbc3R5bGUqPVwib3BhY2l0eTogMFwiXXtc
Ci0tbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShP
cGFjaXR5PTApXCI7XAotfVwKLS5hY2VfZWRpdG9yLmFjZV9tdWx0aXNlbGVjdCAuYWNlX2N1cnNv
ciB7XAotYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcCi19XAotLmFjZV9saW5lIHtcCi13aGl0ZS1z
cGFjZTogbm93cmFwO1wKLX1cCi0uYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKLXBvc2l0
aW9uOiBhYnNvbHV0ZTtcCi16LWluZGV4OiAzO1wKLX1cCi0uYWNlX21hcmtlci1sYXllciAuYWNl
X3NlbGVjdGlvbiB7XAotcG9zaXRpb246IGFic29sdXRlO1wKLXotaW5kZXg6IDU7XAotfVwKLS5h
Y2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAotcG9zaXRpb246IGFic29sdXRlO1wKLXot
aW5kZXg6IDY7XAotfVwKLS5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKLXBv
c2l0aW9uOiBhYnNvbHV0ZTtcCi16LWluZGV4OiAyO1wKLX1cCi0uYWNlX21hcmtlci1sYXllciAu
YWNlX3NlbGVjdGVkLXdvcmQge1wKLXBvc2l0aW9uOiBhYnNvbHV0ZTtcCi16LWluZGV4OiA0O1wK
LS1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcCi0td2Via2l0LWJveC1zaXppbmc6IGJvcmRl
ci1ib3g7XAotYm94LXNpemluZzogYm9yZGVyLWJveDtcCi19XAotLmFjZV9saW5lIC5hY2VfZm9s
ZCB7XAotLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKLS13ZWJraXQtYm94LXNpemluZzog
Ym9yZGVyLWJveDtcCi1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKLWRpc3BsYXk6IGlubGluZS1i
bG9jaztcCi1oZWlnaHQ6IDExcHg7XAotbWFyZ2luLXRvcDogLTJweDtcCi12ZXJ0aWNhbC1hbGln
bjogbWlkZGxlO1wKLWJhY2tncm91bmQtaW1hZ2U6XAotdXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5
UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUxMSUwMCUwMCUwMCUwOSUw
OCUwNiUwMCUwMCUwMCVENCVFOCVDNyUwQyUwMCUwMCUwMyUxRWlDQ1BJQ0MlMjBQcm9maWxlJTAw
JTAweCUwMSU4NVQlREZrJUQzUCUxNCVGRSVEQWUlOUQlQjAlRTElOEIlM0FnJTExJTA5JTNFaCU5
MW5kU3RDJTlDJUI2a1clQkElQ0RaJUVBNiVCNyFIJTlCJUE2bSU1QyU5QSVDNiUyNCVFRH4lQjAl
MDclRDklOEJvJTNBJUM1dyVGMSUwNyUzRSVGOSUwNyUwQyVEOSU4M28lN0IlOTIlMEQlQzYlMTRh
JUY4JUFDJTg4JTIyTCVGNiUyMiVCMyU5RSU5QjRNJ1MlMDMlQjklRjclQkIlREYlRjklRUU5JyVF
NyVFNCU1RSVBMCVGOXFaJUQzJTE0JTJGJTBGJTE0VVNPJUM1JUMyJUZDJUM0JUU0JTE0JURGJUYy
JTAxJTVFJTFDQyUyQiVGQ2hNJThCJTg2JTE2SiUyNkclNDAlMEYlRDMlQjJ5JUVGJUIzJUYzJTBF
JTFFJUM2bHQlRUVvJURGJUFCJUZFYyVENSU5QSU5NSUwQyUxMSVGMCUxQyUyMCVCRSU5NDUlQzQl
MjIlRTFZJUEwaSU1QyVENHQlMTMlRTAlRDYlODklRUYlOUQxNSVDMiVDRExzWCVBNyUwNCUwOSUx
Rmc4b2MlODElRTElOEMlOEQlMjMlOTZmNDUlNDAlOUElMDklQzIlMDclQzVCJTNBSyVCOCU0MDgl
OThpJUUwJUYzJTBEJUQ4JUNFJTgxJTE0JUU0JyUyNiVBOSU5Mi4lOEIlM0MlQUJFUiUyRiVFNWRF
JUIyJTBDJUY2JUYwJTFGcyU4MyVGMl8lQjAlQTglOTQlRTklOUIlQUQlRTclMTAlOERtJTlBJTE5
TiVEMSU3QyU4QSVERSUxRjklN0RwJThDJUU2JTAwJUQ1JUMxJTNGXyUxOCVCREElQjglOURwWDYl
RTMlQTM1fkIlQ0QlMjQlQUUlMTElMjYlQkQlRTclRUV0aSU5OCVFRGUlOUElOTdZKSUxMiUyNSUx
QyUyNCVCQ2JUJUFFM2xpJUU2JTBCJTAzJTg5JTlBJUU2JUQzJUVEJUY0UCU5MiVCMCU5RjQlQkY0
M1klRjMlRTMlRURQJTk1JTA0JUVCMSVDNSVGNSVGNktGJUY0JUJBJUJEJUQ3JURCJTkxJTkzJTA3
JUUzNSUzRSVBNyklRDYlN0YlNDAlRkUlQkQlRjclRjVyJThBJUU1eSU5MiVGMCVFQiVCNCUxRSU4
RCVENSVGNCU1QiU5MiUzQVYlREIlREIlRTQlQ0QlQTYlMjMlQzMlQzR3USUzRiUwM0hCJTgyJThF
JTFDZCglRTAlOTFCJTBDYSU5QWMlQzQlQUElRjhMJTE2JTE5JTIySiVBNCVEMml0VHklQjI4JUQ2
JTNCKCU5MyU5NiVFRCUxQ0d4JUM5XyUwRSVCOCU1RSUxNiVGNSU1QiVCMiVCOCVGNiVFMCVGQiU5
RSVERCUyNSVENyU4RSVCQyUxNSU4NSVDNSVCNyVBMyVEOFElRUQlQjUlODElRTklQkElQjIlMTMl
OUElMUIlN0Z1YSVBNSVBM24lRTE3JUI5JUU1JTlCJTFCbSVBQiUwQiUwOFElRkUlOEElRTUlQjFI
JTVFZSVDQU8lODJRJUQ3dTYlRTYlOTBTJTk3JUZDdSUwQiVDRjIlOTQlRUUlMjV2JTEyWCUwQyVC
QSVBQyVGMCU1RSVGOCpsJTBBTyU4NSUxNyVDMiU5NyVCRiVENCVDOCVDRSVERSVBRCUxMSVDQiU4
MHElMkMlM0UlQUIlOUVTJUNEJUM2JUVDJTI1JUQyTCVEMiVFQmQlQjglQkYlOEElRjVCJUM2JTE4
JUY5JTkwMUNaJTlEJUJFJTI0TSU5QyU4QTklRjIlREFQJTBCJyUwNnclODIlRUIlRTYlRTIlNUMl
MkYlRDclMDclOUUlQkIlQ0MlNUQlRTElRkElQjklMDglQUQuciUyMyU4RSVDMiUxNyVGNUUlN0Mh
JUYwJUJFMyVCRSUzRV8lQjdvJTg4YSVBNyVEQiVCRSVEM2QlRUIlQTMxWiVFQiVCQiVEMyU5MSVC
QSVBMiVCMXolOTQlOEYlREInJUY2JTNEJThFJUFBJTEzJTE5JUIyJUIxJUJFJUIxflYlMDglMkIl
QjQlQTJjakolQjN0TyUwMCUwMyUyNW1OJTk3JUYzJTA1JTkzJUVGJTExJTg0JTBCJTdDJTg4JUFF
LSU4OSU4RiVBQmJXJTkwTyUyQiUwQW8lOTklMEMlNUUlOTclMENJJUFGSCVEOS4lQjAlM0IlOEYl
RUQlMDMlQjZTJUQ2JTVEJUU2aV9zOSVGMypwJUU5JTFCJUZEJUMzJUVCLjdVJTA2JTVFJTE5JUMw
JUQxcy4lMTclQTAzdSVFNCUwOSVCMCU3QyU1RSUyQyVFQiUxNSVEQiUxRiUzQyU5RSVCNyU4MCU5
MSUzQiVEQmMlQUQlM0RtYSVCQSU4QiUzRVYlQUIlREJ0LiU1QiUxRSUwMSVCQiUwRiVBQiVENSU5
RiVDRiVBQSVENSVERCVFNyVFNCU3RiUwQnglQTMlRkMlMDYlQTklMjMlMEElRDYlQzIlQTFfMiUw
MCUwMCUwMCUwOXBIWXMlMDAlMDAlMEIlMTMlMDAlMDAlMEIlMTMlMDElMDAlOUElOUMlMTglMDAl
MDAlMDAlQjVJREFUKCUxNSVBNSU5MSUzRCUwRSUwMiElMTAlODVhYyVFMSUwNSVENiVDRSVENiVD
NiVDRSVEMiVFOCVFRCVDRCVERSVDMCVDNiVENk4uJUUwViVGOCUzRCU5Q2ElODkxWEglQzIlQkUl
RDl5JTNGJTkwISVFNiU5QyVDMyVCRmslRTUlMDExJUM2LSVGNSVDOE4lMDQlREYlQkQlRkYlODkl
REZ0JTgzRE4lNjAlM0UlRjMlQUIlQTAlREUlMUElNURnJUJFJTEwUSU5NyUxQiU0MCU5QyVBOG8l
MTAlOEYlNUUlODI4JUI0JTFCJTYwJTg3JUY2JTAyJTI2JTg1JTFDaCUxRSVDMSUyQiU1QmslRkYl
ODYlRUUlQjdqJTA5JTlBJURBJTlCJUFDZSVBMyVGOSVFQyVEQSE5JUI0JUQ1JUE2JTgxJTg2JTg2
JTk4JUNDJTNDJTVCJTQwJUZBJTgxJUIzJUU5JUNCJTIzJTk0JUMxNkF6byUwNSVENCVFMSVDMSU5
NWElM0IlOEEnJUEwJUU4JUNDJTE3JTIyJTg1JTFEJUJBJTAwJUEyJUZBJURDJTBBJTk0JUQxJUQx
JThEJThCJTNBJTg0JTE3QiVDNyU2MCUxQSUyNVolRkMlOEQlMDAlMDAlMDAlMDBJRU5EJUFFQiU2
MCU4MlwiKSxcCi11cmwoXCJkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAl
MDAlMERJSERSJTAwJTAwJTAwJTA1JTAwJTAwJTAwNyUwOCUwNiUwMCUwMCUwMCVDNCVERCU4MEMl
MDAlMDAlMDMlMUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUl
REFlJTlEJUIwJUUxJThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYl
QjchSCU5QiVBNm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0Ul
RjklMDclMEMlRDklODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUl
OUI0TSdTJTAzJUI5JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUw
RiUxNFVTTyVDNSVDMiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUx
NkolMjZHJTQwJTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUl
OUElOTUlMEMlMTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2
JTg5JUVGJTlEMTUlQzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1
JTQwJTlBJTA5JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVF
NCclMjYlQTklOTIuJThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIw
JUE4JTk0JUU5JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVF
NiUwMCVENSVDMSUzRl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJE
JUU3JUVFdGklOTglRURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4
OSU5QSVFNiVEMyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUl
RjUlRjZLRiVGNCVCQSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJE
JUY3JUY1ciU4QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0
JUNEJUE2JTIzJUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFB
JUY4TCUxNiUxOSUyMkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUl
QjglNUUlMTYlRjUlNUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUl
QjclQTMlRDhRJUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVF
NSU5QiUxQm0lQUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5
NyVGQ3UlMEIlQ0YyJTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTcl
QzIlOTclQkYlRDQlQzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUy
NSVEMkwlRDIlRUJkJUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5
JUYyJURBUCUwQiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZB
JUI5JTA4JUFELnIlMjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTcl
REIlQkUlRDNkJUVCJUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4
RSVBQSUxMyUxOSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5
NyVGMyUwNSU5MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5
JTBDJTVFJTk3JTBDSSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMq
cCVFOSUxQiVGRCVDMyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0Ml
NUUlMkMlRUIlMTUlREIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VW
JUFCJURCdC4lNUIlMUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4
JUEzJUZDJTA2JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEz
JTAwJTAwJTBCJTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwJTNBSURBVDglMTFjJUZDJUZGJUZG
JTdGJTE4JTAzJTFBJTYwJTAxJUYyJTNGJUEwJTg5MSU4MCUwNCVGRiUxMS0lRjglMTclOUJKJUUy
JTA1JUIxWkQlODF2JTI2dCVFNyU4MCVGOCVBMyU4MmglQTEyJTFBJTIwJUEzJTAxJTAyJTBGJTAx
JUJBJTI1JTA2JTAwJTE5JUMwJTBEJUFFRiVENSUzRVMlMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4
MlwiKTtcCi1iYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtcCi1iYWNrZ3Jv
dW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcCi1jb2xvcjogdHJhbnNwYXJl
bnQ7XAotYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XAotLW1vei1ib3JkZXItcmFkaXVzOiAycHg7
XAotLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7XAotYm9yZGVyLXJhZGl1czogMnB4O1wKLWN1
cnNvcjogcG9pbnRlcjtcCi1wb2ludGVyLWV2ZW50czogYXV0bztcCi19XAotLmFjZV9kYXJrIC5h
Y2VfZm9sZCB7XAotfVwKLS5hY2VfZm9sZDpob3ZlcntcCi1iYWNrZ3JvdW5kLWltYWdlOlwKLXVy
bChcImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAl
MDAlMDAlMTElMDAlMDAlMDAlMDklMDglMDYlMDAlMDAlMDAlRDQlRTglQzclMEMlMDAlMDAlMDMl
MUVpQ0NQSUNDJTIwUHJvZmlsZSUwMCUwMHglMDElODVUJURGayVEM1AlMTQlRkUlREFlJTlEJUIw
JUUxJThCJTNBZyUxMSUwOSUzRWglOTFuZFN0QyU5QyVCNmtXJUJBJUNEWiVFQTYlQjchSCU5QiVB
Nm0lNUMlOUElQzYlMjQlRUR+JUIwJTA3JUQ5JThCbyUzQSVDNXclRjElMDclM0UlRjklMDclMEMl
RDklODNvJTdCJTkyJTBEJUM2JTE0YSVGOCVBQyU4OCUyMkwlRjYlMjIlQjMlOUUlOUI0TSdTJTAz
JUI5JUY3JUJCJURGJUY5JUVFOSclRTclRTQlNUUlQTAlRjlxWiVEMyUxNCUyRiUwRiUxNFVTTyVD
NSVDMiVGQyVDNCVFNCUxNCVERiVGMiUwMSU1RSUxQ0MlMkIlRkNoTSU4QiU4NiUxNkolMjZHJTQw
JTBGJUQzJUIyeSVFRiVCMyVGMyUwRSUxRSVDNmx0JUVFbyVERiVBQiVGRWMlRDUlOUElOTUlMEMl
MTElRjAlMUMlMjAlQkUlOTQ1JUM0JTIyJUUxWSVBMGklNUMlRDR0JTEzJUUwJUQ2JTg5JUVGJTlE
MTUlQzIlQ0RMc1glQTclMDQlMDklMUZnOG9jJTgxJUUxJThDJThEJTIzJTk2ZjQ1JTQwJTlBJTA5
JUMyJTA3JUM1QiUzQUslQjglNDA4JTk4aSVFMCVGMyUwRCVEOCVDRSU4MSUxNCVFNCclMjYlQTkl
OTIuJThCJTNDJUFCRVIlMkYlRTVkRSVCMiUwQyVGNiVGMCUxRnMlODMlRjJfJUIwJUE4JTk0JUU5
JTlCJUFEJUU3JTEwJThEbSU5QSUxOU4lRDElN0MlOEElREUlMUY5JTdEcCU4QyVFNiUwMCVENSVD
MSUzRl8lMTglQkRBJUI4JTlEcFg2JUUzJUEzNX5CJUNEJTI0JUFFJTExJTI2JUJEJUU3JUVFdGkl
OTglRURlJTlBJTk3WSklMTIlMjUlMUMlMjQlQkNiVCVBRTNsaSVFNiUwQiUwMyU4OSU5QSVFNiVE
MyVFRCVGNFAlOTIlQjAlOUY0JUJGNDNZJUYzJUUzJUVEUCU5NSUwNCVFQjElQzUlRjUlRjZLRiVG
NCVCQSVCRCVENyVEQiU5MSU5MyUwNyVFMzUlM0UlQTcpJUQ2JTdGJTQwJUZFJUJEJUY3JUY1ciU4
QSVFNXklOTIlRjAlRUIlQjQlMUUlOEQlRDUlRjQlNUIlOTIlM0FWJURCJURCJUU0JUNEJUE2JTIz
JUMzJUM0d1ElM0YlMDNIQiU4MiU4RSUxQ2QoJUUwJTkxQiUwQ2ElOUFjJUM0JUFBJUY4TCUxNiUx
OSUyMkolQTQlRDJpdFR5JUIyOCVENiUzQiglOTMlOTYlRUQlMUNHeCVDOV8lMEUlQjglNUUlMTYl
RjUlNUIlQjIlQjglRjYlRTAlRkIlOUUlREQlMjUlRDclOEUlQkMlMTUlODUlQzUlQjclQTMlRDhR
JUVEJUI1JTgxJUU5JUJBJUIyJTEzJTlBJTFCJTdGdWElQTUlQTNuJUUxNyVCOSVFNSU5QiUxQm0l
QUIlMEIlMDhRJUZFJThBJUU1JUIxSCU1RWUlQ0FPJTgyUSVEN3U2JUU2JTkwUyU5NyVGQ3UlMEIl
Q0YyJTk0JUVFJTI1diUxMlglMEMlQkElQUMlRjAlNUUlRjgqbCUwQU8lODUlMTclQzIlOTclQkYl
RDQlQzglQ0UlREUlQUQlMTElQ0IlODBxJTJDJTNFJUFCJTlFUyVDRCVDNiVFQyUyNSVEMkwlRDIl
RUJkJUI4JUJGJThBJUY1QiVDNiUxOCVGOSU5MDFDWiU5RCVCRSUyNE0lOUMlOEE5JUYyJURBUCUw
QiclMDZ3JTgyJUVCJUU2JUUyJTVDJTJGJUQ3JTA3JTlFJUJCJUNDJTVEJUUxJUZBJUI5JTA4JUFE
LnIlMjMlOEUlQzIlMTclRjVFJTdDISVGMCVCRTMlQkUlM0VfJUI3byU4OGElQTclREIlQkUlRDNk
JUVCJUEzMVolRUIlQkIlRDMlOTElQkElQTIlQjF6JTk0JThGJURCJyVGNiUzRCU4RSVBQSUxMyUx
OSVCMiVCMSVCRSVCMX5WJTA4JTJCJUI0JUEyY2pKJUIzdE8lMDAlMDMlMjVtTiU5NyVGMyUwNSU5
MyVFRiUxMSU4NCUwQiU3QyU4OCVBRS0lODklOEYlQUJiVyU5ME8lMkIlMEFvJTk5JTBDJTVFJTk3
JTBDSSVBRkglRDkuJUIwJTNCJThGJUVEJTAzJUI2UyVENiU1RCVFNmlfczklRjMqcCVFOSUxQiVG
RCVDMyVFQi43VSUwNiU1RSUxOSVDMCVEMXMuJTE3JUEwM3UlRTQlMDklQjAlN0MlNUUlMkMlRUIl
MTUlREIlMUYlM0MlOUUlQjclODAlOTElM0IlREJjJUFEJTNEbWElQkElOEIlM0VWJUFCJURCdC4l
NUIlMUUlMDElQkIlMEYlQUIlRDUlOUYlQ0YlQUElRDUlREQlRTclRTQlN0YlMEJ4JUEzJUZDJTA2
JUE5JTIzJTBBJUQ2JUMyJUExXzIlMDAlMDAlMDAlMDlwSFlzJTAwJTAwJTBCJTEzJTAwJTAwJTBC
JTEzJTAxJTAwJTlBJTlDJTE4JTAwJTAwJTAwJUI1SURBVCglMTUlQTUlOTElM0QlMEUlMDIhJTEw
JTg1YWMlRTElMDUlRDYlQ0UlRDYlQzYlQ0UlRDIlRTglRUQlQ0QlREUlQzAlQzYlRDZOLiVFMFYl
RjglM0QlOUNhJTg5MVhIJUMyJUJFJUQ5eSUzRiU5MCElRTYlOUMlQzMlQkZrJUU1JTAxMSVDNi0l
RjUlQzhOJTA0JURGJUJEJUZGJTg5JURGdCU4M0ROJTYwJTNFJUYzJUFCJUEwJURFJTFBJTVEZyVC
RSUxMFElOTclMUIlNDAlOUMlQThvJTEwJThGJTVFJTgyOCVCNCUxQiU2MCU4NyVGNiUwMiUyNiU4
NSUxQ2glMUUlQzElMkIlNUJrJUZGJTg2JUVFJUI3aiUwOSU5QSVEQSU5QiVBQ2UlQTMlRjklRUMl
REEhOSVCNCVENSVBNiU4MSU4NiU4NiU5OCVDQyUzQyU1QiU0MCVGQSU4MSVCMyVFOSVDQiUyMyU5
NCVDMTZBem8lMDUlRDQlRTElQzElOTVhJTNCJThBJyVBMCVFOCVDQyUxNyUyMiU4NSUxRCVCQSUw
MCVBMiVGQSVEQyUwQSU5NCVEMSVEMSU4RCU4QiUzQSU4NCUxN0IlQzclNjAlMUElMjVaJUZDJThE
JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIiksXAotdXJsKFwiZGF0YTppbWFnZS9wbmcsJTg5
UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwNSUwMCUwMCUwMDclMDgl
MDYlMDAlMDAlMDAlQzQlREQlODBDJTAwJTAwJTAzJTFFaUNDUElDQyUyMFByb2ZpbGUlMDAlMDB4
JTAxJTg1VCVERmslRDNQJTE0JUZFJURBZSU5RCVCMCVFMSU4QiUzQWclMTElMDklM0VoJTkxbmRT
dEMlOUMlQjZrVyVCQSVDRFolRUE2JUI3IUglOUIlQTZtJTVDJTlBJUM2JTI0JUVEfiVCMCUwNyVE
OSU4Qm8lM0ElQzV3JUYxJTA3JTNFJUY5JTA3JTBDJUQ5JTgzbyU3QiU5MiUwRCVDNiUxNGElRjgl
QUMlODglMjJMJUY2JTIyJUIzJTlFJTlCNE0nUyUwMyVCOSVGNyVCQiVERiVGOSVFRTknJUU3JUU0
JTVFJUEwJUY5cVolRDMlMTQlMkYlMEYlMTRVU08lQzUlQzIlRkMlQzQlRTQlMTQlREYlRjIlMDEl
NUUlMUNDJTJCJUZDaE0lOEIlODYlMTZKJTI2RyU0MCUwRiVEMyVCMnklRUYlQjMlRjMlMEUlMUUl
QzZsdCVFRW8lREYlQUIlRkVjJUQ1JTlBJTk1JTBDJTExJUYwJTFDJTIwJUJFJTk0NSVDNCUyMiVF
MVklQTBpJTVDJUQ0dCUxMyVFMCVENiU4OSVFRiU5RDE1JUMyJUNETHNYJUE3JTA0JTA5JTFGZzhv
YyU4MSVFMSU4QyU4RCUyMyU5NmY0NSU0MCU5QSUwOSVDMiUwNyVDNUIlM0FLJUI4JTQwOCU5OGkl
RTAlRjMlMEQlRDglQ0UlODElMTQlRTQnJTI2JUE5JTkyLiU4QiUzQyVBQkVSJTJGJUU1ZEUlQjIl
MEMlRjYlRjAlMUZzJTgzJUYyXyVCMCVBOCU5NCVFOSU5QiVBRCVFNyUxMCU4RG0lOUElMTlOJUQx
JTdDJThBJURFJTFGOSU3RHAlOEMlRTYlMDAlRDUlQzElM0ZfJTE4JUJEQSVCOCU5RHBYNiVFMyVB
MzV+QiVDRCUyNCVBRSUxMSUyNiVCRCVFNyVFRXRpJTk4JUVEZSU5QSU5N1kpJTEyJTI1JTFDJTI0
JUJDYlQlQUUzbGklRTYlMEIlMDMlODklOUElRTYlRDMlRUQlRjRQJTkyJUIwJTlGNCVCRjQzWSVG
MyVFMyVFRFAlOTUlMDQlRUIxJUM1JUY1JUY2S0YlRjQlQkElQkQlRDclREIlOTElOTMlMDclRTM1
JTNFJUE3KSVENiU3RiU0MCVGRSVCRCVGNyVGNXIlOEElRTV5JTkyJUYwJUVCJUI0JTFFJThEJUQ1
JUY0JTVCJTkyJTNBViVEQiVEQiVFNCVDRCVBNiUyMyVDMyVDNHdRJTNGJTAzSEIlODIlOEUlMUNk
KCVFMCU5MUIlMENhJTlBYyVDNCVBQSVGOEwlMTYlMTklMjJKJUE0JUQyaXRUeSVCMjglRDYlM0Io
JTkzJTk2JUVEJTFDR3glQzlfJTBFJUI4JTVFJTE2JUY1JTVCJUIyJUI4JUY2JUUwJUZCJTlFJURE
JTI1JUQ3JThFJUJDJTE1JTg1JUM1JUI3JUEzJUQ4USVFRCVCNSU4MSVFOSVCQSVCMiUxMyU5QSUx
QiU3RnVhJUE1JUEzbiVFMTclQjklRTUlOUIlMUJtJUFCJTBCJTA4USVGRSU4QSVFNSVCMUglNUVl
JUNBTyU4MlElRDd1NiVFNiU5MFMlOTclRkN1JTBCJUNGMiU5NCVFRSUyNXYlMTJYJTBDJUJBJUFD
JUYwJTVFJUY4KmwlMEFPJTg1JTE3JUMyJTk3JUJGJUQ0JUM4JUNFJURFJUFEJTExJUNCJTgwcSUy
QyUzRSVBQiU5RVMlQ0QlQzYlRUMlMjUlRDJMJUQyJUVCZCVCOCVCRiU4QSVGNUIlQzYlMTglRjkl
OTAxQ1olOUQlQkUlMjRNJTlDJThBOSVGMiVEQVAlMEInJTA2dyU4MiVFQiVFNiVFMiU1QyUyRiVE
NyUwNyU5RSVCQiVDQyU1RCVFMSVGQSVCOSUwOCVBRC5yJTIzJThFJUMyJTE3JUY1RSU3QyElRjAl
QkUzJUJFJTNFXyVCN28lODhhJUE3JURCJUJFJUQzZCVFQiVBMzFaJUVCJUJCJUQzJTkxJUJBJUEy
JUIxeiU5NCU4RiVEQiclRjYlM0QlOEUlQUElMTMlMTklQjIlQjElQkUlQjF+ViUwOCUyQiVCNCVB
MmNqSiVCM3RPJTAwJTAzJTI1bU4lOTclRjMlMDUlOTMlRUYlMTElODQlMEIlN0MlODglQUUtJTg5
JThGJUFCYlclOTBPJTJCJTBBbyU5OSUwQyU1RSU5NyUwQ0klQUZIJUQ5LiVCMCUzQiU4RiVFRCUw
MyVCNlMlRDYlNUQlRTZpX3M5JUYzKnAlRTklMUIlRkQlQzMlRUIuN1UlMDYlNUUlMTklQzAlRDFz
LiUxNyVBMDN1JUU0JTA5JUIwJTdDJTVFJTJDJUVCJTE1JURCJTFGJTNDJTlFJUI3JTgwJTkxJTNC
JURCYyVBRCUzRG1hJUJBJThCJTNFViVBQiVEQnQuJTVCJTFFJTAxJUJCJTBGJUFCJUQ1JTlGJUNG
JUFBJUQ1JUREJUU3JUU0JTdGJTBCeCVBMyVGQyUwNiVBOSUyMyUwQSVENiVDMiVBMV8yJTAwJTAw
JTAwJTA5cEhZcyUwMCUwMCUwQiUxMyUwMCUwMCUwQiUxMyUwMSUwMCU5QSU5QyUxOCUwMCUwMCUw
MDNJREFUOCUxMWMlRkMlRkYlRkYlN0YlM0UlMDMlMUElNjAlMDElRjIlM0YlQTMlODkxJTgwJTA0
JUZGUSUyNiVGOHclQzAlQjQzJUExJURCJTBDJUUyJThGJTBBJUEyJTg1JUNBaCU4MCU4QyUwNiUw
OCUzQyUwNCVFOCU5NiUxOCUwMCVBM1MlMEQlQ0QlQ0YlRDglQzElOUQlMDAlMDAlMDAlMDBJRU5E
JUFFQiU2MCU4MlwiKTtcCi1iYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtc
Ci1iYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcCi19XAotLmFj
ZV9lZGl0b3IuYWNlX2RyYWdnaW5nIC5hY2VfY29udGVudCB7XAotY3Vyc29yOiBtb3ZlO1wKLX1c
Ci0uYWNlX2d1dHRlci10b29sdGlwIHtcCi1iYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1wKLWJhY2tn
cm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgdHJhbnNwYXJlbnQsIHJn
YmEoMCwgMCwgMCwgMC4xKSk7XAotYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRv
IGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XAotYm9yZGVyOiAxcHgg
c29saWQgZ3JheTtcCi1ib3JkZXItcmFkaXVzOiAxcHg7XAotYm94LXNoYWRvdzogMCAxcHggMnB4
IHJnYmEoMCwgMCwgMCwgMC4zKTtcCi1jb2xvcjogYmxhY2s7XAotZGlzcGxheTogaW5saW5lLWJs
b2NrO1wKLW1heC13aWR0aDogNTAwcHg7XAotcGFkZGluZzogNHB4O1wKLXBvc2l0aW9uOiBmaXhl
ZDtcCi16LWluZGV4OiAzMDA7XAotLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKLS13ZWJr
aXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcCi1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKLWN1
cnNvcjogZGVmYXVsdDtcCi13aGl0ZS1zcGFjZTogcHJlLWxpbmU7XAotd29yZC13cmFwOiBicmVh
ay13b3JkO1wKLWxpbmUtaGVpZ2h0OiBub3JtYWw7XAotZm9udC1zdHlsZTogbm9ybWFsO1wKLWZv
bnQtd2VpZ2h0OiBub3JtYWw7XAotbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcCi19XAotLmFjZV9m
b2xkaW5nLWVuYWJsZWQgPiAuYWNlX2d1dHRlci1jZWxsIHtcCi1wYWRkaW5nLXJpZ2h0OiAxM3B4
O1wKLX1cCi0uYWNlX2ZvbGQtd2lkZ2V0IHtcCi0tbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7
XAotLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKLWJveC1zaXppbmc6IGJvcmRlci1i
b3g7XAotbWFyZ2luOiAwIC0xMnB4IDAgMXB4O1wKLWRpc3BsYXk6IGlubGluZS1ibG9jaztcCi13
aWR0aDogMTFweDtcCi12ZXJ0aWNhbC1hbGlnbjogdG9wO1wKLWJhY2tncm91bmQtaW1hZ2U6IHVy
bChcImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAl
MDAlMDAlMDUlMDAlMDAlMDAlMDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElE
QVR4JURBZSU4QSVCMSUwRCUwMDAlMEMlQzIlRjIlMkNLJTk2JUJDJUQwJThGOSU4MSU4OEglRTkl
RDAlMEUlOTYlQzAlMTAlOTIlM0UlMDIlODAlNUUlODIlRTQlQTkqLSVFRXN3JUM4JUNDJTExJUVF
JTk2dyVEOCVEQyVFOSpFaCUwQyUxNTEoJTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAot
YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCi1iYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50
ZXI7XAotYm9yZGVyLXJhZGl1czogM3B4O1wKLWJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50
O1wKLX1cCi0uYWNlX2ZvbGQtd2lkZ2V0LmFjZV9lbmQge1wKLWJhY2tncm91bmQtaW1hZ2U6IHVy
bChcImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAl
MDAlMDAlMDUlMDAlMDAlMDAlMDUlMDglMDYlMDAlMDAlMDAlOERvJTI2JUU1JTAwJTAwJTAwNElE
QVR4JURBbSVDNyVDMSUwOSUwMDAlMDhDJUQxJThDJUVDRSVDOEUoJThFJUVDJTAyKSUxRVpKJUYx
JUMxJyUwNCUwN0klRTElRTUlRUUlQ0FMJUY1JUEyJTk5JTk5JTIyJUUyJUQ2JTFGVSVCNSVGRTAl
RDl4JUE3JTI2V3o1JTBFJUQ1JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODJcIik7XAotfVwKLS5h
Y2VfZm9sZC13aWRnZXQuYWNlX2Nsb3NlZCB7XAotYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0
YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUw
MyUwMCUwMCUwMCUwNiUwOCUwNiUwMCUwMCUwMCUwNiVFNSUyNCUwQyUwMCUwMCUwMDlJREFUeCVE
QTUlQ0ElQzElMDklMDAwJTA4JTAzJUMwJUFDKiglM0UlMDQlQzElMEQlQkElQjElMjMlQTRVaCVF
MCUyMCU4MSVDMCVDQyVGOCU4MiU4MSVBQSVBMiVBQXJHZnIlODglMDglMTElMTElMUMlREQlN0Ql
RTAlRUUlNUIlRjYlRjYlQ0IlQjglMDVRJTJGJUU5dGFpJUQ5JTAwJTAwJTAwJTAwSUVORCVBRUIl
NjAlODJcIik7XAotfVwKLS5hY2VfZm9sZC13aWRnZXQ6aG92ZXIge1wKLWJvcmRlcjogMXB4IHNv
bGlkIHJnYmEoMCwgMCwgMCwgMC4zKTtcCi1iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1
LCAyNTUsIDAuMik7XAotLW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjcpO1wKLS13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUs
IDI1NSwgMC43KTtcCi1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAw
LjcpO1wKLX1cCi0uYWNlX2ZvbGQtd2lkZ2V0OmFjdGl2ZSB7XAotYm9yZGVyOiAxcHggc29saWQg
cmdiYSgwLCAwLCAwLCAwLjQpO1wKLWJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4w
NSk7XAotLW1vei1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgp
O1wKLS13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44
KTtcCi1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1wKLX1c
Ci0vKipcCi0qIERhcmsgdmVyc2lvbiBmb3IgZm9sZCB3aWRnZXRzXAotKi9cCi0uYWNlX2Rhcmsg
LmFjZV9mb2xkLXdpZGdldCB7XAotYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9w
bmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFB
QUhrbEVRVlFJVzJQNC8vOC9Bem9HRVE3b0dDYUxMQWhXaVN3QjE0NkJBUUNTVFBZb2NxVDBBQUFB
QUVsRlRrU3VRbUNDXCIpO1wKLX1cCi0uYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5k
IHtcCi1iYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3
MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSDBsRVFWUUlXMlA0Ly84
L0F4UTd3TmpJQWpETWdDNEF4akNWS0JpcklBQUYwa3oycmxoeHBBQUFBQUJKUlU1RXJrSmdnZz09
XCIpO1wKLX1cCi0uYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkIHtcCi1iYWNr
Z3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUFNQUFBQUZDQVlBQUFDQWNWYWlBQUFBSEVsRVFWUUlXMlA0Ly8rL0F4QXpnREFE
bE9PQXpuSEFLZ1BXQXdBUmppOFVJRFRmUVFBQUFBQkpSVTVFcmtKZ2dnPT1cIik7XAotfVwKLS5h
Y2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0OmhvdmVyIHtcCi1ib3gtc2hhZG93OiAwIDFweCAxcHgg
cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1wKLWJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC4xKTtcCi19XAotLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtc
Ci0tbW96LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAot
LXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1wK
LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XAotfVwKLS5h
Y2VfZm9sZC13aWRnZXQuYWNlX2ludmFsaWQge1wKLWJhY2tncm91bmQtY29sb3I6ICNGRkI0QjQ7
XAotYm9yZGVyLWNvbG9yOiAjREU1NTU1O1wKLX1cCi0uYWNlX2ZhZGUtZm9sZC13aWRnZXRzIC5h
Y2VfZm9sZC13aWRnZXQge1wKLS1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4w
NXM7XAotLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcCi0tby10
cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcCi0tbXMtdHJhbnNpdGlvbjogb3Bh
Y2l0eSAwLjRzIGVhc2UgMC4wNXM7XAotdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UgMC4w
NXM7XAotb3BhY2l0eTogMDtcCi19XAotLmFjZV9mYWRlLWZvbGQtd2lkZ2V0czpob3ZlciAuYWNl
X2ZvbGQtd2lkZ2V0IHtcCi0tbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1
cztcCi0td2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcCi0tby10
cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2UgMC4wNXM7XAotLW1zLXRyYW5zaXRpb246IG9w
YWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcCi10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDVzIGVhc2Ug
MC4wNXM7XAotb3BhY2l0eToxO1wKLX1cCi0uYWNlX3VuZGVybGluZSB7XAotdGV4dC1kZWNvcmF0
aW9uOiB1bmRlcmxpbmU7XAotfVwKLS5hY2VfYm9sZCB7XAotZm9udC13ZWlnaHQ6IGJvbGQ7XAot
fVwKLS5hY2Vfbm9ib2xkIC5hY2VfYm9sZCB7XAotZm9udC13ZWlnaHQ6IG5vcm1hbDtcCi19XAot
LmFjZV9pdGFsaWMge1wKLWZvbnQtc3R5bGU6IGl0YWxpYztcCi19XAotIjsKLQotZG9tLmltcG9y
dENzc1N0cmluZyhlZGl0b3JDc3MsICJhY2VfZWRpdG9yIik7Ci0KLXZhciBWaXJ0dWFsUmVuZGVy
ZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7Ci0gICAgdmFyIF9zZWxmID0gdGhpczsK
LQotICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyIHx8IGRvbS5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICB0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9ICF1c2VyYWdlbnQuaXNJRTsK
LQotICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgImFjZV9lZGl0b3IiKTsKLQot
ICAgIHRoaXMuc2V0VGhlbWUodGhlbWUpOwotCi0gICAgdGhpcy4kZ3V0dGVyID0gZG9tLmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuJGd1dHRlci5jbGFzc05hbWUgPSAiYWNlX2d1dHRl
ciI7Ci0gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyKTsKLQotICAg
IHRoaXMuc2Nyb2xsZXIgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5zY3Jv
bGxlci5jbGFzc05hbWUgPSAiYWNlX3Njcm9sbGVyIjsKLSAgICB0aGlzLmNvbnRhaW5lci5hcHBl
bmRDaGlsZCh0aGlzLnNjcm9sbGVyKTsKLQotICAgIHRoaXMuY29udGVudCA9IGRvbS5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmNvbnRlbnQuY2xhc3NOYW1lID0gImFjZV9jb250ZW50
IjsKLSAgICB0aGlzLnNjcm9sbGVyLmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7Ci0KLSAgICB0
aGlzLiRndXR0ZXJMYXllciA9IG5ldyBHdXR0ZXJMYXllcih0aGlzLiRndXR0ZXIpOwotICAgIHRo
aXMuJGd1dHRlckxheWVyLm9uKCJjaGFuZ2VHdXR0ZXJXaWR0aCIsIHRoaXMub25HdXR0ZXJSZXNp
emUuYmluZCh0aGlzKSk7Ci0KLSAgICB0aGlzLiRtYXJrZXJCYWNrID0gbmV3IE1hcmtlckxheWVy
KHRoaXMuY29udGVudCk7Ci0KLSAgICB2YXIgdGV4dExheWVyID0gdGhpcy4kdGV4dExheWVyID0g
bmV3IFRleHRMYXllcih0aGlzLmNvbnRlbnQpOwotICAgIHRoaXMuY2FudmFzID0gdGV4dExheWVy
LmVsZW1lbnQ7Ci0KLSAgICB0aGlzLiRtYXJrZXJGcm9udCA9IG5ldyBNYXJrZXJMYXllcih0aGlz
LmNvbnRlbnQpOwotCi0gICAgdGhpcy4kY3Vyc29yTGF5ZXIgPSBuZXcgQ3Vyc29yTGF5ZXIodGhp
cy5jb250ZW50KTsKLSAgICB0aGlzLiRob3JpelNjcm9sbCA9IGZhbHNlOwotICAgIHRoaXMuJGhv
cml6U2Nyb2xsQWx3YXlzVmlzaWJsZSA9IGZhbHNlOwotCi0gICAgdGhpcy5zY3JvbGxCYXIgPSBu
ZXcgU2Nyb2xsQmFyKHRoaXMuY29udGFpbmVyKTsKLSAgICB0aGlzLnNjcm9sbEJhci5hZGRFdmVu
dExpc3RlbmVyKCJzY3JvbGwiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmICghX3NlbGYuJGlu
U2Nyb2xsQW5pbWF0aW9uKQotICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3Ao
ZS5kYXRhKTsKLSAgICB9KTsKLQotICAgIHRoaXMuc2Nyb2xsVG9wID0gMDsKLSAgICB0aGlzLnNj
cm9sbExlZnQgPSAwOwotCi0gICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5zY3JvbGxlciwgInNj
cm9sbCIsIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9zZWxmLnNjcm9s
bGVyLnNjcm9sbExlZnQ7Ci0gICAgICAgIF9zZWxmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0Owot
ICAgICAgICBfc2VsZi5zZXNzaW9uLnNldFNjcm9sbExlZnQoc2Nyb2xsTGVmdCk7Ci0gICAgfSk7
Ci0KLSAgICB0aGlzLmN1cnNvclBvcyA9IHsKLSAgICAgICAgcm93IDogMCwKLSAgICAgICAgY29s
dW1uIDogMAotICAgIH07Ci0KLSAgICB0aGlzLiR0ZXh0TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigi
Y2hhbmdlQ2hhcmFjdGVyU2l6ZSIsIGZ1bmN0aW9uKCkgewotICAgICAgICBfc2VsZi51cGRhdGVD
aGFyYWN0ZXJTaXplKCk7Ci0gICAgICAgIF9zZWxmLm9uUmVzaXplKHRydWUpOwotICAgIH0pOwot
Ci0gICAgdGhpcy4kc2l6ZSA9IHsKLSAgICAgICAgd2lkdGg6IDAsCi0gICAgICAgIGhlaWdodDog
MCwKLSAgICAgICAgc2Nyb2xsZXJIZWlnaHQ6IDAsCi0gICAgICAgIHNjcm9sbGVyV2lkdGg6IDAK
LSAgICB9OwotCi0gICAgdGhpcy5sYXllckNvbmZpZyA9IHsKLSAgICAgICAgd2lkdGggOiAxLAot
ICAgICAgICBwYWRkaW5nIDogMCwKLSAgICAgICAgZmlyc3RSb3cgOiAwLAotICAgICAgICBmaXJz
dFJvd1NjcmVlbjogMCwKLSAgICAgICAgbGFzdFJvdyA6IDAsCi0gICAgICAgIGxpbmVIZWlnaHQg
OiAxLAotICAgICAgICBjaGFyYWN0ZXJXaWR0aCA6IDEsCi0gICAgICAgIG1pbkhlaWdodCA6IDEs
Ci0gICAgICAgIG1heEhlaWdodCA6IDEsCi0gICAgICAgIG9mZnNldCA6IDAsCi0gICAgICAgIGhl
aWdodCA6IDEKLSAgICB9OwotCi0gICAgdGhpcy4kbG9vcCA9IG5ldyBSZW5kZXJMb29wKAotICAg
ICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzLmJpbmQodGhpcyksCi0gICAgICAgIHRoaXMuY29udGFp
bmVyLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcKLSAgICApOwotICAgIHRoaXMuJGxvb3Auc2No
ZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7Ci0KLSAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlclNpemUo
KTsKLSAgICB0aGlzLnNldFBhZGRpbmcoNCk7Ci0gICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0aGlz
KTsKLSAgICBjb25maWcuX2VtaXQoInJlbmRlcmVyIiwgdGhpcyk7Ci19OwotCi0oZnVuY3Rpb24o
KSB7Ci0KLSAgICB0aGlzLkNIQU5HRV9DVVJTT1IgPSAxOwotICAgIHRoaXMuQ0hBTkdFX01BUktF
UiA9IDI7Ci0gICAgdGhpcy5DSEFOR0VfR1VUVEVSID0gNDsKLSAgICB0aGlzLkNIQU5HRV9TQ1JP
TEwgPSA4OwotICAgIHRoaXMuQ0hBTkdFX0xJTkVTID0gMTY7Ci0gICAgdGhpcy5DSEFOR0VfVEVY
VCA9IDMyOwotICAgIHRoaXMuQ0hBTkdFX1NJWkUgPSA2NDsKLSAgICB0aGlzLkNIQU5HRV9NQVJL
RVJfQkFDSyA9IDEyODsKLSAgICB0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQgPSAyNTY7Ci0gICAg
dGhpcy5DSEFOR0VfRlVMTCA9IDUxMjsKLSAgICB0aGlzLkNIQU5HRV9IX1NDUk9MTCA9IDEwMjQ7
Ci0KLSAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7Ci0KLSAgICB0aGlzLnVw
ZGF0ZUNoYXJhY3RlclNpemUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuJHRleHRM
YXllci5hbGxvd0JvbGRGb250cyAhPSB0aGlzLiRhbGxvd0JvbGRGb250cykgewotICAgICAgICAg
ICAgdGhpcy4kYWxsb3dCb2xkRm9udHMgPSB0aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9udHM7
Ci0gICAgICAgICAgICB0aGlzLnNldFN0eWxlKCJhY2Vfbm9ib2xkIiwgIXRoaXMuJGFsbG93Qm9s
ZEZvbnRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuY2hhcmFjdGVyV2lkdGggPSB0aGlz
LiR0ZXh0TGF5ZXIuZ2V0Q2hhcmFjdGVyV2lkdGgoKTsKLSAgICAgICAgdGhpcy5saW5lSGVpZ2h0
ID0gdGhpcy4kdGV4dExheWVyLmdldExpbmVIZWlnaHQoKTsKLSAgICAgICAgdGhpcy4kdXBkYXRl
UHJpbnRNYXJnaW4oKTsKLSAgICB9OwotICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNl
c3Npb24pIHsKLSAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKLQotICAgICAgICB0aGlz
LnNjcm9sbGVyLmNsYXNzTmFtZSA9ICJhY2Vfc2Nyb2xsZXIiOwotCi0gICAgICAgIHRoaXMuJGN1
cnNvckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7Ci0gICAgICAgIHRoaXMuJG1hcmtlckJhY2su
c2V0U2Vzc2lvbihzZXNzaW9uKTsKLSAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vzc2lv
bihzZXNzaW9uKTsKLSAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9u
KTsKLSAgICAgICAgdGhpcy4kdGV4dExheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7Ci0gICAgICAg
IHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7Ci0KLSAgICB9OwotICAgIHRo
aXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAgICBp
ZiAobGFzdFJvdyA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgbGFzdFJvdyA9IEluZmluaXR5
OwotCi0gICAgICAgIGlmICghdGhpcy4kY2hhbmdlZExpbmVzKSB7Ci0gICAgICAgICAgICB0aGlz
LiRjaGFuZ2VkTGluZXMgPSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RSb3c6IGZpcnN0Um93LAot
ICAgICAgICAgICAgICAgIGxhc3RSb3c6IGxhc3RSb3cKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmZp
cnN0Um93ID4gZmlyc3RSb3cpCi0gICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmZp
cnN0Um93ID0gZmlyc3RSb3c7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMu
bGFzdFJvdyA8IGxhc3RSb3cpCi0gICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxh
c3RSb3cgPSBsYXN0Um93OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRM
aW5lcy5maXJzdFJvdyA+IHRoaXMubGF5ZXJDb25maWcubGFzdFJvdyB8fAotICAgICAgICAgICAg
dGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPCB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93KQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hB
TkdFX0xJTkVTKTsKLSAgICB9OwotCi0gICAgdGhpcy5vbkNoYW5nZVRhYlNpemUgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUIHwgdGhp
cy5DSEFOR0VfTUFSS0VSKTsKLSAgICAgICAgdGhpcy4kdGV4dExheWVyLm9uQ2hhbmdlVGFiU2l6
ZSgpOwotICAgIH07Ci0gICAgdGhpcy51cGRhdGVUZXh0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7Ci0gICAgfTsKLSAgICB0aGlz
LnVwZGF0ZUZ1bGwgPSBmdW5jdGlvbihmb3JjZSkgewotICAgICAgICBpZiAoZm9yY2UpCi0gICAg
ICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzKHRoaXMuQ0hBTkdFX0ZVTEwsIHRydWUpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZV
TEwpOwotICAgIH07Ci0gICAgdGhpcy51cGRhdGVGb250U2l6ZSA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpOwotICAgIH07Ci0gICAg
dGhpcy5vblJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlLCBndXR0ZXJXaWR0aCwgd2lkdGgsIGhlaWdo
dCkgewotICAgICAgICB2YXIgY2hhbmdlcyA9IDA7Ci0gICAgICAgIHZhciBzaXplID0gdGhpcy4k
c2l6ZTsKLQotICAgICAgICBpZiAodGhpcy5yZXNpemluZyA+IDIpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMucmVzaXppbmcgPiAxKQotICAgICAgICAgICAgdGhp
cy5yZXNpemluZysrOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLnJlc2l6aW5nID0g
Zm9yY2UgPyAxIDogMDsKLSAgICAgICAgaWYgKCFoZWlnaHQpCi0gICAgICAgICAgICBoZWlnaHQg
PSBkb20uZ2V0SW5uZXJIZWlnaHQodGhpcy5jb250YWluZXIpOwotCi0gICAgICAgIGlmIChoZWln
aHQgJiYgKGZvcmNlIHx8IHNpemUuaGVpZ2h0ICE9IGhlaWdodCkpIHsKLSAgICAgICAgICAgIHNp
emUuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICAgICAgY2hhbmdlcyA9IHRoaXMuQ0hBTkdFX1NJ
WkU7Ci0KLSAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJIZWlnaHQgPSB0aGlzLnNjcm9sbGVyLmNs
aWVudEhlaWdodDsKLSAgICAgICAgICAgIGlmICghc2l6ZS5zY3JvbGxlckhlaWdodCkgewotICAg
ICAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJIZWlnaHQgPSBzaXplLmhlaWdodDsKLSAgICAgICAg
ICAgICAgICBpZiAodGhpcy4kaG9yaXpTY3JvbGwpCi0gICAgICAgICAgICAgICAgICAgIHNpemUu
c2Nyb2xsZXJIZWlnaHQgLT0gdGhpcy5zY3JvbGxCYXIuZ2V0V2lkdGgoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldEhlaWdodChzaXplLnNjcm9sbGVySGVp
Z2h0KTsKLQotICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbikgewotICAgICAgICAgICAgICAg
IHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodGhpcy5nZXRTY3JvbGxUb3AoKSk7Ci0gICAgICAg
ICAgICAgICAgY2hhbmdlcyA9IGNoYW5nZXMgfCB0aGlzLkNIQU5HRV9GVUxMOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF3aWR0aCkKLSAgICAgICAgICAgIHdpZHRo
ID0gZG9tLmdldElubmVyV2lkdGgodGhpcy5jb250YWluZXIpOwotCi0gICAgICAgIGlmICh3aWR0
aCAmJiAoZm9yY2UgfHwgdGhpcy5yZXNpemluZyA+IDEgfHwgc2l6ZS53aWR0aCAhPSB3aWR0aCkp
IHsKLSAgICAgICAgICAgIGNoYW5nZXMgPSB0aGlzLkNIQU5HRV9TSVpFOwotICAgICAgICAgICAg
c2l6ZS53aWR0aCA9IHdpZHRoOwotCi0gICAgICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSB0aGlz
LiRzaG93R3V0dGVyID8gdGhpcy4kZ3V0dGVyLm9mZnNldFdpZHRoIDogMDsKLSAgICAgICAgICAg
IHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgInB4IjsKLSAgICAgICAg
ICAgIHNpemUuc2Nyb2xsZXJXaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gZ3V0dGVyV2lkdGgg
LSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIu
c3R5bGUucmlnaHQgPSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpICsgInB4IjsKLQotICAgICAg
ICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMuYWRqdXN0V3Jh
cExpbWl0KCkgfHwgZm9yY2UpCi0gICAgICAgICAgICAgICAgY2hhbmdlcyA9IGNoYW5nZXMgfCB0
aGlzLkNIQU5HRV9GVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvcmNlKQotICAgICAg
ICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyhjaGFuZ2VzLCB0cnVlKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZShjaGFuZ2VzKTsKLQotICAgICAgICBpZiAo
Zm9yY2UpCi0gICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci4kcGFkZGluZyA9IG51bGw7Ci0K
LSAgICAgICAgaWYgKGZvcmNlKQotICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVzaXppbmc7Ci0g
ICAgfTsKLQotICAgIHRoaXMub25HdXR0ZXJSZXNpemUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
dmFyIHdpZHRoID0gdGhpcy4kc2l6ZS53aWR0aDsKLSAgICAgICAgdmFyIGd1dHRlcldpZHRoID0g
dGhpcy4kc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRXaWR0aCA6IDA7Ci0gICAgICAg
IHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgInB4IjsKLSAgICAgICAg
dGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggLSBndXR0ZXJXaWR0
aCAtIHRoaXMuc2Nyb2xsQmFyLmdldFdpZHRoKCkpOwotCi0gICAgICAgIGlmICh0aGlzLnNlc3Np
b24uZ2V0VXNlV3JhcE1vZGUoKSAmJiB0aGlzLmFkanVzdFdyYXBMaW1pdCgpKQotICAgICAgICAg
ICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKLSAgICB9OwotICAgIHRo
aXMuYWRqdXN0V3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBhdmFpbGFibGVX
aWR0aCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHRoaXMuJHBhZGRpbmcgKiAyOwotICAg
ICAgICB2YXIgbGltaXQgPSBNYXRoLmZsb29yKGF2YWlsYWJsZVdpZHRoIC8gdGhpcy5jaGFyYWN0
ZXJXaWR0aCk7Ci0gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uYWRqdXN0V3JhcExpbWl0KGxp
bWl0KTsKLSAgICB9OwotICAgIHRoaXMuc2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbihzaG91
bGRBbmltYXRlKXsKLSAgICAgICAgdGhpcy5zZXRPcHRpb24oImFuaW1hdGVkU2Nyb2xsIiwgc2hv
dWxkQW5pbWF0ZSk7Ci0gICAgfTsKLSAgICB0aGlzLmdldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRhbmltYXRlZFNjcm9sbDsKLSAgICB9OwotICAg
IHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykgewotICAg
ICAgICB0aGlzLnNldE9wdGlvbigic2hvd0ludmlzaWJsZXMiLCBzaG93SW52aXNpYmxlcyk7Ci0g
ICAgfTsKLSAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLmdldE9wdGlvbigic2hvd0ludmlzaWJsZXMiKTsKLSAgICB9OwotICAgIHRo
aXMuZ2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4g
dGhpcy5nZXRPcHRpb24oImRpc3BsYXlJbmRlbnRHdWlkZXMiKTsKLSAgICB9OwotCi0gICAgdGhp
cy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkgewotICAgICAgICB0
aGlzLnNldE9wdGlvbigiZGlzcGxheUluZGVudEd1aWRlcyIsIGRpc3BsYXkpOwotICAgIH07Ci0g
ICAgdGhpcy5zZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsK
LSAgICAgICAgdGhpcy5zZXRPcHRpb24oInNob3dQcmludE1hcmdpbiIsIHNob3dQcmludE1hcmdp
bik7Ci0gICAgfTsKLSAgICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICB0aGlzLmdldE9wdGlvbigic2hvd1ByaW50TWFyZ2luIik7Ci0gICAgfTsKLSAgICB0
aGlzLnNldFByaW50TWFyZ2luQ29sdW1uID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7Ci0g
ICAgICAgIHRoaXMuc2V0T3B0aW9uKCJwcmludE1hcmdpbkNvbHVtbiIsIHNob3dQcmludE1hcmdp
bik7Ci0gICAgfTsKLSAgICB0aGlzLmdldFByaW50TWFyZ2luQ29sdW1uID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigicHJpbnRNYXJnaW5Db2x1bW4iKTsKLSAg
ICB9OwotICAgIHRoaXMuZ2V0U2hvd0d1dHRlciA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgIHJldHVy
biB0aGlzLmdldE9wdGlvbigic2hvd0d1dHRlciIpOwotICAgIH07Ci0gICAgdGhpcy5zZXRTaG93
R3V0dGVyID0gZnVuY3Rpb24oc2hvdyl7Ci0gICAgICAgIHJldHVybiB0aGlzLnNldE9wdGlvbigi
c2hvd0d1dHRlciIsIHNob3cpOwotICAgIH07Ci0KLSAgICB0aGlzLmdldEZhZGVGb2xkV2lkZ2V0
cyA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiZmFkZUZvbGRX
aWRnZXRzIikKLSAgICB9OwotCi0gICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlv
bihzaG93KSB7Ci0gICAgICAgIHRoaXMuc2V0T3B0aW9uKCJmYWRlRm9sZFdpZGdldHMiLCBzaG93
KTsKLSAgICB9OwotCi0gICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24o
c2hvdWxkSGlnaGxpZ2h0KSB7Ci0gICAgICAgIHRoaXMuc2V0T3B0aW9uKCJoaWdobGlnaHRHdXR0
ZXJMaW5lIiwgc2hvdWxkSGlnaGxpZ2h0KTsKLSAgICB9OwotCi0gICAgdGhpcy5nZXRIaWdobGln
aHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlv
bigiaGlnaGxpZ2h0R3V0dGVyTGluZSIpOwotICAgIH07Ci0KLSAgICB0aGlzLiR1cGRhdGVHdXR0
ZXJMaW5lSGlnaGxpZ2h0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBwb3MgPSB0aGlzLiRj
dXJzb3JMYXllci4kcGl4ZWxQb3M7Ci0gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmxheWVyQ29u
ZmlnLmxpbmVIZWlnaHQ7Ci0gICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUo
KSkgewotICAgICAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0
Q3Vyc29yKCk7Ci0gICAgICAgICAgICBjdXJzb3IuY29sdW1uID0gMDsKLSAgICAgICAgICAgIHBv
cyA9IHRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oY3Vyc29yLCB0cnVlKTsKLSAg
ICAgICAgICAgIGhlaWdodCAqPSB0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoKGN1cnNvci5yb3cp
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUudG9w
ID0gcG9zLnRvcCAtIHRoaXMubGF5ZXJDb25maWcub2Zmc2V0ICsgInB4IjsKLSAgICAgICAgdGhp
cy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwotICAg
IH07Ci0KLSAgICB0aGlzLiR1cGRhdGVQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICBpZiAoIXRoaXMuJHNob3dQcmludE1hcmdpbiAmJiAhdGhpcy4kcHJpbnRNYXJnaW5FbCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXRoaXMuJHByaW50TWFyZ2luRWwpIHsK
LSAgICAgICAgICAgIHZhciBjb250YWluZXJFbCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICAgICAgICAgIGNvbnRhaW5lckVsLmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNlX3ByaW50
LW1hcmdpbi1sYXllciI7Ci0gICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsID0gZG9tLmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgdGhpcy4kcHJpbnRNYXJnaW5FbC5jbGFz
c05hbWUgPSAiYWNlX3ByaW50LW1hcmdpbiI7Ci0gICAgICAgICAgICBjb250YWluZXJFbC5hcHBl
bmRDaGlsZCh0aGlzLiRwcmludE1hcmdpbkVsKTsKLSAgICAgICAgICAgIHRoaXMuY29udGVudC5p
bnNlcnRCZWZvcmUoY29udGFpbmVyRWwsIHRoaXMuY29udGVudC5maXJzdENoaWxkKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuJHByaW50TWFyZ2luRWwuc3R5bGU7Ci0g
ICAgICAgIHN0eWxlLmxlZnQgPSAoKHRoaXMuY2hhcmFjdGVyV2lkdGggKiB0aGlzLiRwcmludE1h
cmdpbkNvbHVtbikgKyB0aGlzLiRwYWRkaW5nKSArICJweCI7Ci0gICAgICAgIHN0eWxlLnZpc2li
aWxpdHkgPSB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPyAidmlzaWJsZSIgOiAiaGlkZGVuIjsKLSAg
ICB9OwotICAgIHRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGhpcy5jb250YWluZXI7Ci0gICAgfTsKLSAgICB0aGlzLmdldE1vdXNlRXZlbnRU
YXJnZXQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudDsKLSAgICB9
OwotICAgIHRoaXMuZ2V0VGV4dEFyZWFDb250YWluZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuY29udGFpbmVyOwotICAgIH07Ci0gICAgdGhpcy4kbW92ZVRleHRBcmVhVG9D
dXJzb3IgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCF0aGlzLiRrZWVwVGV4dEFyZWFBdEN1
cnNvcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMubGF5
ZXJDb25maWc7Ci0gICAgICAgIHZhciBwb3NUb3AgPSB0aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQ
b3MudG9wOwotICAgICAgICB2YXIgcG9zTGVmdCA9IHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBv
cy5sZWZ0OwotICAgICAgICBwb3NUb3AgLT0gY29uZmlnLm9mZnNldDsKLQotICAgICAgICBpZiAo
cG9zVG9wIDwgMCB8fCBwb3NUb3AgPiBjb25maWcuaGVpZ2h0IC0gdGhpcy5saW5lSGVpZ2h0KQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciB3ID0gdGhpcy5jaGFyYWN0ZXJXaWR0
aDsKLSAgICAgICAgaWYgKHRoaXMuJGNvbXBvc2l0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgdmFs
ID0gdGhpcy50ZXh0YXJlYS52YWx1ZS5yZXBsYWNlKC9eXHgwMSsvLCAiIik7Ci0gICAgICAgICAg
ICB3ICo9IHRoaXMuc2Vzc2lvbi4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgodmFsKVswXTsKLSAgICAg
ICAgfQotICAgICAgICBwb3NMZWZ0IC09IHRoaXMuc2Nyb2xsTGVmdDsKLSAgICAgICAgaWYgKHBv
c0xlZnQgPiB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSB3KQotICAgICAgICAgICAgcG9zTGVm
dCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHc7Ci0KLSAgICAgICAgcG9zTGVmdCAtPSB0
aGlzLnNjcm9sbEJhci53aWR0aDsKLQotICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmhlaWdo
dCA9IHRoaXMubGluZUhlaWdodCArICJweCI7Ci0gICAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUu
d2lkdGggPSB3ICsgInB4IjsKLSAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5yaWdodCA9IHRo
aXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHBvc0xlZnQgLSB3ICsgInB4IjsKLSAgICAgICAgdGhp
cy50ZXh0YXJlYS5zdHlsZS5ib3R0b20gPSB0aGlzLiRzaXplLmhlaWdodCAtIHBvc1RvcCAtIHRo
aXMubGluZUhlaWdodCArICJweCI7Ci0gICAgfTsKLSAgICB0aGlzLmdldEZpcnN0VmlzaWJsZVJv
dyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJv
dzsKLSAgICB9OwotICAgIHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3cgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3cgKyAodGhpcy5sYXll
ckNvbmZpZy5vZmZzZXQgPT09IDAgPyAwIDogMSk7Ci0gICAgfTsKLSAgICB0aGlzLmdldExhc3RG
dWxseVZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGZsaW50ID0gTWF0aC5m
bG9vcigodGhpcy5sYXllckNvbmZpZy5oZWlnaHQgKyB0aGlzLmxheWVyQ29uZmlnLm9mZnNldCkg
LyB0aGlzLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQpOwotICAgICAgICByZXR1cm4gdGhpcy5sYXll
ckNvbmZpZy5maXJzdFJvdyAtIDEgKyBmbGludDsKLSAgICB9OwotICAgIHRoaXMuZ2V0TGFzdFZp
c2libGVSb3cgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcu
bGFzdFJvdzsKLSAgICB9OwotCi0gICAgdGhpcy4kcGFkZGluZyA9IG51bGw7Ci0gICAgdGhpcy5z
ZXRQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZykgewotICAgICAgICB0aGlzLiRwYWRkaW5nID0g
cGFkZGluZzsKLSAgICAgICAgdGhpcy4kdGV4dExheWVyLnNldFBhZGRpbmcocGFkZGluZyk7Ci0g
ICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNldFBhZGRpbmcocGFkZGluZyk7Ci0gICAgICAgIHRo
aXMuJG1hcmtlckZyb250LnNldFBhZGRpbmcocGFkZGluZyk7Ci0gICAgICAgIHRoaXMuJG1hcmtl
ckJhY2suc2V0UGFkZGluZyhwYWRkaW5nKTsKLSAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0
aGlzLkNIQU5HRV9GVUxMKTsKLSAgICAgICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKLSAg
ICB9OwotICAgIHRoaXMuZ2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZTsKLSAgICB9Owot
ICAgIHRoaXMuc2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbihhbHdheXNWaXNp
YmxlKSB7Ci0gICAgICAgIGlmICh0aGlzLiRob3JpelNjcm9sbEFsd2F5c1Zpc2libGUgIT0gYWx3
YXlzVmlzaWJsZSkgewotICAgICAgICAgICAgdGhpcy4kaG9yaXpTY3JvbGxBbHdheXNWaXNpYmxl
ID0gYWx3YXlzVmlzaWJsZTsKLSAgICAgICAgICAgIGlmICghdGhpcy4kaG9yaXpTY3JvbGxBbHdh
eXNWaXNpYmxlIHx8ICF0aGlzLiRob3JpelNjcm9sbCkKLSAgICAgICAgICAgICAgICB0aGlzLiRs
b29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuc2Ny
b2xsQmFyLnNldElubmVySGVpZ2h0KHRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0KTsKLSAgICAg
ICAgdGhpcy5zY3JvbGxCYXIuc2V0U2Nyb2xsVG9wKHRoaXMuc2Nyb2xsVG9wKTsKLSAgICB9Owot
Ci0gICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyA9IGZ1bmN0aW9uKGNoYW5nZXMsIGZvcmNlKSB7Ci0g
ICAgICAgIGlmICghZm9yY2UgJiYgKCFjaGFuZ2VzIHx8ICF0aGlzLnNlc3Npb24gfHwgIXRoaXMu
Y29udGFpbmVyLm9mZnNldFdpZHRoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
aGlzLl9zaWduYWwoImJlZm9yZVJlbmRlciIpOwotICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMu
Q0hBTkdFX0ZVTEwgfHwKLSAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9TSVpFIHx8
Ci0gICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fAotICAgICAgICAgICAg
Y2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTIHx8Ci0gICAgICAgICAgICBjaGFuZ2VzICYgdGhp
cy5DSEFOR0VfU0NST0xMCi0gICAgICAgICkKLSAgICAgICAgICAgIHRoaXMuJGNvbXB1dGVMYXll
ckNvbmZpZygpOwotICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0hfU0NST0xMKSB7
Ci0gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7
Ci0gICAgICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsZXIuc2Nyb2xsTGVmdDsK
LSAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7Ci0gICAgICAgICAgICB0
aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTsKLQotICAgICAgICAgICAgdGhp
cy5zY3JvbGxlci5jbGFzc05hbWUgPSB0aGlzLnNjcm9sbExlZnQgPT0gMCA/ICJhY2Vfc2Nyb2xs
ZXIiIDogImFjZV9zY3JvbGxlciBhY2Vfc2Nyb2xsLWxlZnQiOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfRlVMTCkgewotICAgICAgICAgICAgdGhpcy4kdGV4
dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKLSAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVNj
cm9sbEJhcigpOwotICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVy
Q29uZmlnKTsKLSAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKQotICAgICAgICAgICAg
ICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKLSAgICAgICAg
ICAgIHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwotICAgICAgICAg
ICAgdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwotICAgICAgICAg
ICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwotICAgICAgICAg
ICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKLSAgICAgICAgICAgIHRoaXMuJGhpZ2hs
aWdodEd1dHRlckxpbmUgJiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOwotICAg
ICAgICAgICAgdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0NST0xMKSB7
Ci0gICAgICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQgfHwgY2hhbmdlcyAm
IHRoaXMuQ0hBTkdFX0xJTkVTKQotICAgICAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRh
dGUodGhpcy5sYXllckNvbmZpZyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
dGhpcy4kdGV4dExheWVyLnNjcm9sbExpbmVzKHRoaXMubGF5ZXJDb25maWcpOwotCi0gICAgICAg
ICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKLSAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJM
YXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7Ci0gICAgICAgICAgICB0aGlzLiRtYXJrZXJC
YWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKLSAgICAgICAgICAgIHRoaXMuJG1hcmtlckZy
b250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKLSAgICAgICAgICAgIHRoaXMuJGN1cnNvckxh
eWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKLSAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdo
dEd1dHRlckxpbmUgJiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOwotICAgICAg
ICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKLSAgICAgICAgICAgIHRoaXMuJHVw
ZGF0ZVNjcm9sbEJhcigpOwotICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNoYW5nZXMg
JiB0aGlzLkNIQU5HRV9URVhUKSB7Ci0gICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRl
KHRoaXMubGF5ZXJDb25maWcpOwotICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpCi0g
ICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9MSU5F
UykgewotICAgICAgICAgICAgaWYgKHRoaXMuJHVwZGF0ZUxpbmVzKCkgfHwgKGNoYW5nZXMgJiB0
aGlzLkNIQU5HRV9HVVRURVIpICYmIHRoaXMuJHNob3dHdXR0ZXIpCi0gICAgICAgICAgICAgICAg
dGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8IGNoYW5nZXMgJiB0
aGlzLkNIQU5HRV9HVVRURVIpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKQot
ICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmln
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfQ1VSU09S
KSB7Ci0gICAgICAgICAgICB0aGlzLiRjdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZp
Zyk7Ci0gICAgICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOwotICAgICAgICAg
ICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSAmJiB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGln
aGxpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2hhbmdlcyAmICh0aGlzLkNIQU5H
RV9NQVJLRVIgfCB0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQpKSB7Ci0gICAgICAgICAgICB0aGlz
LiRtYXJrZXJGcm9udC51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoY2hhbmdlcyAmICh0aGlzLkNIQU5HRV9NQVJLRVIgfCB0aGlzLkNIQU5HRV9NQVJL
RVJfQkFDSykpIHsKLSAgICAgICAgICAgIHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5
ZXJDb25maWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5H
RV9TSVpFKQotICAgICAgICAgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyKCk7Ci0KLSAgICAgICAg
dGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIpOwotICAgIH07Ci0KLSAgICB0aGlzLiRjb21wdXRl
TGF5ZXJDb25maWcgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCF0aGlzLiRzaXplLnNjcm9s
bGVySGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMub25SZXNpemUodHJ1ZSk7Ci0KLSAg
ICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247Ci0KLSAgICAgICAgdmFyIG9mZnNldCA9
IHRoaXMuc2Nyb2xsVG9wICUgdGhpcy5saW5lSGVpZ2h0OwotICAgICAgICB2YXIgbWluSGVpZ2h0
ID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCArIHRoaXMubGluZUhlaWdodDsKLQotICAgICAg
ICB2YXIgbG9uZ2VzdExpbmUgPSB0aGlzLiRnZXRMb25nZXN0TGluZSgpOwotCi0gICAgICAgIHZh
ciBob3JpelNjcm9sbCA9IHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZSB8fCB0aGlzLiRz
aXplLnNjcm9sbGVyV2lkdGggLSBsb25nZXN0TGluZSA8IDA7Ci0gICAgICAgIHZhciBob3JpelNj
cm9sbENoYW5nZWQgPSB0aGlzLiRob3JpelNjcm9sbCAhPT0gaG9yaXpTY3JvbGw7Ci0gICAgICAg
IHRoaXMuJGhvcml6U2Nyb2xsID0gaG9yaXpTY3JvbGw7Ci0gICAgICAgIGlmIChob3JpelNjcm9s
bENoYW5nZWQpIHsKLSAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3dYID0g
aG9yaXpTY3JvbGwgPyAic2Nyb2xsIiA6ICJoaWRkZW4iOwotICAgICAgICAgICAgaWYgKCFob3Jp
elNjcm9sbCkKLSAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCgwKTsK
LSAgICAgICAgfQotICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmdldFNjcmVl
bkxlbmd0aCgpICogdGhpcy5saW5lSGVpZ2h0OwotICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Ny
b2xsVG9wKE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuc2Nyb2xsVG9wLCBtYXhIZWlnaHQgLSB0
aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KSkpOwotCi0gICAgICAgIHZhciBsaW5lQ291bnQgPSBN
YXRoLmNlaWwobWluSGVpZ2h0IC8gdGhpcy5saW5lSGVpZ2h0KSAtIDE7Ci0gICAgICAgIHZhciBm
aXJzdFJvdyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKHRoaXMuc2Nyb2xsVG9wIC0gb2Zmc2V0
KSAvIHRoaXMubGluZUhlaWdodCkpOwotICAgICAgICB2YXIgbGFzdFJvdyA9IGZpcnN0Um93ICsg
bGluZUNvdW50OwotICAgICAgICB2YXIgZmlyc3RSb3dTY3JlZW4sIGZpcnN0Um93SGVpZ2h0Owot
ICAgICAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMubGluZUhlaWdodDsKLSAgICAgICAgZmlyc3RS
b3cgPSBzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRSb3coZmlyc3RSb3csIDApOwotICAgICAgICB2
YXIgZm9sZExpbmUgPSBzZXNzaW9uLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKLSAgICAgICAgaWYg
KGZvbGRMaW5lKSB7Ci0gICAgICAgICAgICBmaXJzdFJvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsK
LSAgICAgICAgfQotCi0gICAgICAgIGZpcnN0Um93U2NyZWVuID0gc2Vzc2lvbi5kb2N1bWVudFRv
U2NyZWVuUm93KGZpcnN0Um93LCAwKTsKLSAgICAgICAgZmlyc3RSb3dIZWlnaHQgPSBzZXNzaW9u
LmdldFJvd0xlbmd0aChmaXJzdFJvdykgKiBsaW5lSGVpZ2h0OwotCi0gICAgICAgIGxhc3RSb3cg
PSBNYXRoLm1pbihzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRSb3cobGFzdFJvdywgMCksIHNlc3Np
b24uZ2V0TGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgbWluSGVpZ2h0ID0gdGhpcy4kc2l6ZS5zY3Jv
bGxlckhlaWdodCArIHNlc3Npb24uZ2V0Um93TGVuZ3RoKGxhc3RSb3cpICogbGluZUhlaWdodCAr
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJv
d0hlaWdodDsKLQotICAgICAgICBvZmZzZXQgPSB0aGlzLnNjcm9sbFRvcCAtIGZpcnN0Um93U2Ny
ZWVuICogbGluZUhlaWdodDsKLQotICAgICAgICB0aGlzLmxheWVyQ29uZmlnID0gewotICAgICAg
ICAgICAgd2lkdGggOiBsb25nZXN0TGluZSwKLSAgICAgICAgICAgIHBhZGRpbmcgOiB0aGlzLiRw
YWRkaW5nLAotICAgICAgICAgICAgZmlyc3RSb3cgOiBmaXJzdFJvdywKLSAgICAgICAgICAgIGZp
cnN0Um93U2NyZWVuOiBmaXJzdFJvd1NjcmVlbiwKLSAgICAgICAgICAgIGxhc3RSb3cgOiBsYXN0
Um93LAotICAgICAgICAgICAgbGluZUhlaWdodCA6IGxpbmVIZWlnaHQsCi0gICAgICAgICAgICBj
aGFyYWN0ZXJXaWR0aCA6IHRoaXMuY2hhcmFjdGVyV2lkdGgsCi0gICAgICAgICAgICBtaW5IZWln
aHQgOiBtaW5IZWlnaHQsCi0gICAgICAgICAgICBtYXhIZWlnaHQgOiBtYXhIZWlnaHQsCi0gICAg
ICAgICAgICBvZmZzZXQgOiBvZmZzZXQsCi0gICAgICAgICAgICBoZWlnaHQgOiB0aGlzLiRzaXpl
LnNjcm9sbGVySGVpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIu
ZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AgPSAoLW9mZnNldCkgKyAicHgiOwotICAgICAgICB0aGlz
LmNvbnRlbnQuc3R5bGUubWFyZ2luVG9wID0gKC1vZmZzZXQpICsgInB4IjsKLSAgICAgICAgdGhp
cy5jb250ZW50LnN0eWxlLndpZHRoID0gbG9uZ2VzdExpbmUgKyAyICogdGhpcy4kcGFkZGluZyAr
ICJweCI7Ci0gICAgICAgIHRoaXMuY29udGVudC5zdHlsZS5oZWlnaHQgPSBtaW5IZWlnaHQgKyAi
cHgiOwotICAgICAgICBpZiAoaG9yaXpTY3JvbGxDaGFuZ2VkKQotICAgICAgICAgICAgdGhpcy5v
blJlc2l6ZSh0cnVlKTsKLSAgICB9OwotCi0gICAgdGhpcy4kdXBkYXRlTGluZXMgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgdmFyIGZpcnN0Um93ID0gdGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93
OwotICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93OwotICAg
ICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSBudWxsOwotCi0gICAgICAgIHZhciBsYXllckNvbmZp
ZyA9IHRoaXMubGF5ZXJDb25maWc7Ci0KLSAgICAgICAgaWYgKGZpcnN0Um93ID4gbGF5ZXJDb25m
aWcubGFzdFJvdyArIDEpIHsgcmV0dXJuOyB9Ci0gICAgICAgIGlmIChsYXN0Um93IDwgbGF5ZXJD
b25maWcuZmlyc3RSb3cpIHsgcmV0dXJuOyB9Ci0gICAgICAgIGlmIChsYXN0Um93ID09PSBJbmZp
bml0eSkgewotICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpCi0gICAgICAgICAgICAg
ICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTsKLSAgICAgICAgICAgIHRo
aXMuJHRleHRMYXllci51cGRhdGUobGF5ZXJDb25maWcpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGVMaW5lcyhsYXllckNvbmZp
ZywgZmlyc3RSb3csIGxhc3RSb3cpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9OwotCi0g
ICAgdGhpcy4kZ2V0TG9uZ2VzdExpbmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGNoYXJD
b3VudCA9IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5XaWR0aCgpOwotICAgICAgICBpZiAodGhpcy4k
dGV4dExheWVyLnNob3dJbnZpc2libGVzKQotICAgICAgICAgICAgY2hhckNvdW50ICs9IDE7Ci0K
LSAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIDIgKiB0
aGlzLiRwYWRkaW5nLCBNYXRoLnJvdW5kKGNoYXJDb3VudCAqIHRoaXMuY2hhcmFjdGVyV2lkdGgp
KTsKLSAgICB9OwotICAgIHRoaXMudXBkYXRlRnJvbnRNYXJrZXJzID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRoaXMuJG1hcmtlckZyb250LnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtl
cnModHJ1ZSkpOwotICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX01BUktF
Ul9GUk9OVCk7Ci0gICAgfTsKLSAgICB0aGlzLnVwZGF0ZUJhY2tNYXJrZXJzID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0TWFya2Vycyh0aGlzLnNlc3Npb24uZ2V0
TWFya2VycygpKTsKLSAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJL
RVJfQkFDSyk7Ci0gICAgfTsKLSAgICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlv
bihyb3csIGNsYXNzTmFtZSl7Ci0gICAgICAgIHRoaXMuJGd1dHRlckxheWVyLmFkZEd1dHRlckRl
Y29yYXRpb24ocm93LCBjbGFzc05hbWUpOwotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVHdXR0ZXJE
ZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpewotICAgICAgICB0aGlzLiRndXR0
ZXJMYXllci5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTsKLSAgICB9Owot
ICAgIHRoaXMudXBkYXRlQnJlYWtwb2ludHMgPSBmdW5jdGlvbihyb3dzKSB7Ci0gICAgICAgIHRo
aXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKLSAgICB9OwotICAgIHRoaXMu
c2V0QW5ub3RhdGlvbnMgPSBmdW5jdGlvbihhbm5vdGF0aW9ucykgewotICAgICAgICB0aGlzLiRn
dXR0ZXJMYXllci5zZXRBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7Ci0gICAgICAgIHRoaXMuJGxv
b3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKLSAgICB9OwotICAgIHRoaXMudXBkYXRl
Q3Vyc29yID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5D
SEFOR0VfQ1VSU09SKTsKLSAgICB9OwotICAgIHRoaXMuaGlkZUN1cnNvciA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5oaWRlQ3Vyc29yKCk7Ci0gICAgfTsKLSAgICB0
aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIu
c2hvd0N1cnNvcigpOwotICAgIH07Ci0KLSAgICB0aGlzLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3
ID0gZnVuY3Rpb24oYW5jaG9yLCBsZWFkLCBvZmZzZXQpIHsKLSAgICAgICAgdGhpcy5zY3JvbGxD
dXJzb3JJbnRvVmlldyhhbmNob3IsIG9mZnNldCk7Ci0gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29y
SW50b1ZpZXcobGVhZCwgb2Zmc2V0KTsKLSAgICB9OwotICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50
b1ZpZXcgPSBmdW5jdGlvbihjdXJzb3IsIG9mZnNldCkgewotICAgICAgICBpZiAodGhpcy4kc2l6
ZS5zY3JvbGxlckhlaWdodCA9PT0gMCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihjdXJzb3IpOwotCi0g
ICAgICAgIHZhciBsZWZ0ID0gcG9zLmxlZnQ7Ci0gICAgICAgIHZhciB0b3AgPSBwb3MudG9wOwot
Ci0gICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCA+IHRvcCkgewotICAgICAgICAgICAgaWYgKG9m
ZnNldCkKLSAgICAgICAgICAgICAgICB0b3AgLT0gb2Zmc2V0ICogdGhpcy4kc2l6ZS5zY3JvbGxl
ckhlaWdodDsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodG9wKTsKLSAg
ICAgICAgfSBlbHNlIGlmICh0aGlzLnNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWln
aHQgPCB0b3AgKyB0aGlzLmxpbmVIZWlnaHQpIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXQpCi0g
ICAgICAgICAgICAgICAgdG9wICs9IG9mZnNldCAqIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7
Ci0gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvcCArIHRoaXMubGluZUhl
aWdodCAtIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyIHNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7Ci0KLSAgICAgICAgaWYgKHNjcm9sbExl
ZnQgPiBsZWZ0KSB7Ci0gICAgICAgICAgICBpZiAobGVmdCA8IHRoaXMuJHBhZGRpbmcgKyAyICog
dGhpcy5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aCkKLSAgICAgICAgICAgICAgICBsZWZ0ID0g
MDsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGxlZnQpOwotICAgICAg
ICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgKyB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggPCBsZWZ0
ICsgdGhpcy5jaGFyYWN0ZXJXaWR0aCkgewotICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNj
cm9sbExlZnQoTWF0aC5yb3VuZChsZWZ0ICsgdGhpcy5jaGFyYWN0ZXJXaWR0aCAtIHRoaXMuJHNp
emUuc2Nyb2xsZXJXaWR0aCkpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICB0aGlzLmdldFNjcm9s
bFRvcCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9s
bFRvcCgpOwotICAgIH07Ci0gICAgdGhpcy5nZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpOwotICAgIH07Ci0gICAg
dGhpcy5nZXRTY3JvbGxUb3BSb3cgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
c2Nyb2xsVG9wIC8gdGhpcy5saW5lSGVpZ2h0OwotICAgIH07Ci0gICAgdGhpcy5nZXRTY3JvbGxC
b3R0b21Sb3cgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgu
Zmxvb3IoKHRoaXMuc2Nyb2xsVG9wICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCkgLyB0aGlz
LmxpbmVIZWlnaHQpIC0gMSk7Ci0gICAgfTsKLSAgICB0aGlzLnNjcm9sbFRvUm93ID0gZnVuY3Rp
b24ocm93KSB7Ci0gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aocm93ICogdGhpcy5s
aW5lSGVpZ2h0KTsKLSAgICB9OwotCi0gICAgdGhpcy5hbGlnbkN1cnNvciA9IGZ1bmN0aW9uKGN1
cnNvciwgYWxpZ25tZW50KSB7Ci0gICAgICAgIGlmICh0eXBlb2YgY3Vyc29yID09ICJudW1iZXIi
KQotICAgICAgICAgICAgY3Vyc29yID0ge3JvdzogY3Vyc29yLCBjb2x1bW46IDB9OwotCi0gICAg
ICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvcik7
Ci0gICAgICAgIHZhciBoID0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMubGluZUhl
aWdodDsKLSAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3AgLSBoICogKGFsaWdubWVudCB8fCAw
KTsKLQotICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKG9mZnNldCk7Ci0gICAgICAg
IHJldHVybiBvZmZzZXQ7Ci0gICAgfTsKLQotICAgIHRoaXMuU1RFUFMgPSA4OwotICAgIHRoaXMu
JGNhbGNTdGVwcyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgdG9WYWx1ZSl7Ci0gICAgICAgIHZhciBp
ID0gMDsKLSAgICAgICAgdmFyIGwgPSB0aGlzLlNURVBTOwotICAgICAgICB2YXIgc3RlcHMgPSBb
XTsKLQotICAgICAgICB2YXIgZnVuYyAgPSBmdW5jdGlvbih0LCB4X21pbiwgZHgpIHsKLSAgICAg
ICAgICAgIHJldHVybiBkeCAqIChNYXRoLnBvdyh0IC0gMSwgMykgKyAxKSArIHhfbWluOwotICAg
ICAgICB9OwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyArK2kpCi0gICAgICAgICAgICBz
dGVwcy5wdXNoKGZ1bmMoaSAvIHRoaXMuU1RFUFMsIGZyb21WYWx1ZSwgdG9WYWx1ZSAtIGZyb21W
YWx1ZSkpOwotCi0gICAgICAgIHJldHVybiBzdGVwczsKLSAgICB9OwotICAgIHRoaXMuc2Nyb2xs
VG9MaW5lID0gZnVuY3Rpb24obGluZSwgY2VudGVyLCBhbmltYXRlLCBjYWxsYmFjaykgewotICAg
ICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OiBs
aW5lLCBjb2x1bW46IDB9KTsKLSAgICAgICAgdmFyIG9mZnNldCA9IHBvcy50b3A7Ci0gICAgICAg
IGlmIChjZW50ZXIpCi0gICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy4kc2l6ZS5zY3JvbGxlckhl
aWdodCAvIDI7Ci0KLSAgICAgICAgdmFyIGluaXRpYWxTY3JvbGwgPSB0aGlzLnNjcm9sbFRvcDsK
LSAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChvZmZzZXQpOwotICAgICAgICBpZiAo
YW5pbWF0ZSAhPT0gZmFsc2UpCi0gICAgICAgICAgICB0aGlzLmFuaW1hdGVTY3JvbGxpbmcoaW5p
dGlhbFNjcm9sbCwgY2FsbGJhY2spOwotICAgIH07Ci0KLSAgICB0aGlzLmFuaW1hdGVTY3JvbGxp
bmcgPSBmdW5jdGlvbihmcm9tVmFsdWUsIGNhbGxiYWNrKSB7Ci0gICAgICAgIHZhciB0b1ZhbHVl
ID0gdGhpcy5zY3JvbGxUb3A7Ci0gICAgICAgIGlmICh0aGlzLiRhbmltYXRlZFNjcm9sbCAmJiBN
YXRoLmFicyhmcm9tVmFsdWUgLSB0b1ZhbHVlKSA8IDEwMDAwMCkgewotICAgICAgICAgICAgdmFy
IF9zZWxmID0gdGhpczsKLSAgICAgICAgICAgIHZhciBzdGVwcyA9IF9zZWxmLiRjYWxjU3RlcHMo
ZnJvbVZhbHVlLCB0b1ZhbHVlKTsKLSAgICAgICAgICAgIHRoaXMuJGluU2Nyb2xsQW5pbWF0aW9u
ID0gdHJ1ZTsKLQotICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiR0aW1lcik7Ci0KLSAg
ICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHN0ZXBzLnNoaWZ0KCkpOwotICAg
ICAgICAgICAgdGhpcy4kdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RlcHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIF9zZWxmLnNl
c3Npb24uc2V0U2Nyb2xsVG9wKHN0ZXBzLnNoaWZ0KCkpOwotICAgICAgICAgICAgICAgICAgICBf
c2VsZi5zZXNzaW9uLiRzY3JvbGxUb3AgPSB0b1ZhbHVlOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodG9WYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIF9zZWxmLnNlc3Np
b24uJHNjcm9sbFRvcCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBfc2VsZi5zZXNzaW9uLnNl
dFNjcm9sbFRvcCh0b1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgdG9WYWx1ZSA9IG51bGw7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgX3NlbGYuJHRp
bWVyID0gY2xlYXJJbnRlcnZhbChfc2VsZi4kdGltZXIpOwotICAgICAgICAgICAgICAgICAgICBf
c2VsZi4kaW5TY3JvbGxBbmltYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgJiYgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCAx
MCk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMuc2Nyb2xsVG9ZID0gZnVuY3Rpb24oc2Ny
b2xsVG9wKSB7Ci0gICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCAhPT0gc2Nyb2xsVG9wKSB7Ci0g
ICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCk7Ci0gICAg
ICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKLSAgICAgICAgfQotICAgIH07Ci0g
ICAgdGhpcy5zY3JvbGxUb1ggPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7Ci0gICAgICAgIGlmIChz
Y3JvbGxMZWZ0IDwgMCkKLSAgICAgICAgICAgIHNjcm9sbExlZnQgPSAwOwotCi0gICAgICAgIGlm
ICh0aGlzLnNjcm9sbExlZnQgIT09IHNjcm9sbExlZnQpCi0gICAgICAgICAgICB0aGlzLnNjcm9s
bExlZnQgPSBzY3JvbGxMZWZ0OwotICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hB
TkdFX0hfU0NST0xMKTsKLSAgICB9OwotICAgIHRoaXMuc2Nyb2xsQnkgPSBmdW5jdGlvbihkZWx0
YVgsIGRlbHRhWSkgewotICAgICAgICBkZWx0YVkgJiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRv
cCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyBkZWx0YVkpOwotICAgICAgICBkZWx0YVgg
JiYgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQodGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQo
KSArIGRlbHRhWCk7Ci0gICAgfTsKLSAgICB0aGlzLmlzU2Nyb2xsYWJsZUJ5ID0gZnVuY3Rpb24o
ZGVsdGFYLCBkZWx0YVkpIHsKLSAgICAgICAgaWYgKGRlbHRhWSA8IDAgJiYgdGhpcy5zZXNzaW9u
LmdldFNjcm9sbFRvcCgpID49IDEpCi0gICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAoZGVsdGFZID4gMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgKyB0aGlzLiRzaXpl
LnNjcm9sbGVySGVpZ2h0IC0gdGhpcy5sYXllckNvbmZpZy5tYXhIZWlnaHQgPCAtMSkKLSAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLQotICAgIHRoaXMucGl4ZWxUb1NjcmVlbkNvb3Jk
aW5hdGVzID0gZnVuY3Rpb24oeCwgeSkgewotICAgICAgICB2YXIgY2FudmFzUG9zID0gdGhpcy5z
Y3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLQotICAgICAgICB2YXIgb2Zmc2V0ID0g
KHggKyB0aGlzLnNjcm9sbExlZnQgLSBjYW52YXNQb3MubGVmdCAtIHRoaXMuJHBhZGRpbmcpIC8g
dGhpcy5jaGFyYWN0ZXJXaWR0aDsKLSAgICAgICAgdmFyIHJvdyA9IE1hdGguZmxvb3IoKHkgKyB0
aGlzLnNjcm9sbFRvcCAtIGNhbnZhc1Bvcy50b3ApIC8gdGhpcy5saW5lSGVpZ2h0KTsKLSAgICAg
ICAgdmFyIGNvbCA9IE1hdGgucm91bmQob2Zmc2V0KTsKLQotICAgICAgICByZXR1cm4ge3Jvdzog
cm93LCBjb2x1bW46IGNvbCwgc2lkZTogb2Zmc2V0IC0gY29sID4gMCA/IDEgOiAtMX07Ci0gICAg
fTsKLQotICAgIHRoaXMuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMgPSBmdW5jdGlvbih4LCB5KSB7
Ci0gICAgICAgIHZhciBjYW52YXNQb3MgPSB0aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpOwotCi0gICAgICAgIHZhciBjb2wgPSBNYXRoLnJvdW5kKAotICAgICAgICAgICAgKHgg
KyB0aGlzLnNjcm9sbExlZnQgLSBjYW52YXNQb3MubGVmdCAtIHRoaXMuJHBhZGRpbmcpIC8gdGhp
cy5jaGFyYWN0ZXJXaWR0aAotICAgICAgICApOwotICAgICAgICB2YXIgcm93ID0gTWF0aC5mbG9v
cigKLSAgICAgICAgICAgICh5ICsgdGhpcy5zY3JvbGxUb3AgLSBjYW52YXNQb3MudG9wKSAvIHRo
aXMubGluZUhlaWdodAotICAgICAgICApOwotCi0gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24u
c2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgTWF0aC5tYXgoY29sLCAwKSk7Ci0gICAgfTsK
LSAgICB0aGlzLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzID0gZnVuY3Rpb24ocm93LCBjb2x1bW4p
IHsKLSAgICAgICAgdmFyIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0gICAgICAgIHZhciBwb3MgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVl
blBvc2l0aW9uKHJvdywgY29sdW1uKTsKLQotICAgICAgICB2YXIgeCA9IHRoaXMuJHBhZGRpbmcg
KyBNYXRoLnJvdW5kKHBvcy5jb2x1bW4gKiB0aGlzLmNoYXJhY3RlcldpZHRoKTsKLSAgICAgICAg
dmFyIHkgPSBwb3Mucm93ICogdGhpcy5saW5lSGVpZ2h0OwotCi0gICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICBwYWdlWDogY2FudmFzUG9zLmxlZnQgKyB4IC0gdGhpcy5zY3JvbGxMZWZ0LAot
ICAgICAgICAgICAgcGFnZVk6IGNhbnZhc1Bvcy50b3AgKyB5IC0gdGhpcy5zY3JvbGxUb3AKLSAg
ICAgICAgfTsKLSAgICB9OwotICAgIHRoaXMudmlzdWFsaXplRm9jdXMgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2ZvY3VzIik7Ci0g
ICAgfTsKLSAgICB0aGlzLnZpc3VhbGl6ZUJsdXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgZG9t
LnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2ZvY3VzIik7Ci0gICAgfTsKLSAg
ICB0aGlzLnNob3dDb21wb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7Ci0gICAgICAgIGlm
ICghdGhpcy4kY29tcG9zaXRpb24pCi0gICAgICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IHsK
LSAgICAgICAgICAgICAgICBrZWVwVGV4dEFyZWFBdEN1cnNvcjogdGhpcy4ka2VlcFRleHRBcmVh
QXRDdXJzb3IsCi0gICAgICAgICAgICAgICAgY3NzVGV4dDogdGhpcy50ZXh0YXJlYS5zdHlsZS5j
c3NUZXh0Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vy
c29yID0gdHJ1ZTsKLSAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMudGV4dGFyZWEsICJhY2Vf
Y29tcG9zaXRpb24iKTsKLSAgICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5jc3NUZXh0ID0gIiI7
Ci0gICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7Ci0gICAgfTsKLSAgICB0aGlz
LnNldENvbXBvc2l0aW9uVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHsKLSAgICAgICAgdGhpcy4kbW92
ZVRleHRBcmVhVG9DdXJzb3IoKTsKLSAgICB9OwotICAgIHRoaXMuaGlkZUNvbXBvc2l0aW9uID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICghdGhpcy4kY29tcG9zaXRpb24pCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMudGV4dGFyZWEsICJh
Y2VfY29tcG9zaXRpb24iKTsKLSAgICAgICAgdGhpcy4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0
aGlzLiRjb21wb3NpdGlvbi5rZWVwVGV4dEFyZWFBdEN1cnNvcjsKLSAgICAgICAgdGhpcy50ZXh0
YXJlYS5zdHlsZS5jc3NUZXh0ID0gdGhpcy4kY29tcG9zaXRpb24uY3NzVGV4dDsKLSAgICAgICAg
dGhpcy4kY29tcG9zaXRpb24gPSBudWxsOwotICAgIH07Ci0gICAgdGhpcy5zZXRUaGVtZSA9IGZ1
bmN0aW9uKHRoZW1lKSB7Ci0gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7Ci0gICAgICAgIHRoaXMu
JHRoZW1lVmFsdWUgPSB0aGVtZTsKLSAgICAgICAgX3NlbGYuX2Rpc3BhdGNoRXZlbnQoJ3RoZW1l
Q2hhbmdlJyx7dGhlbWU6dGhlbWV9KTsKLQotICAgICAgICBpZiAoIXRoZW1lIHx8IHR5cGVvZiB0
aGVtZSA9PSAic3RyaW5nIikgewotICAgICAgICAgICAgdmFyIG1vZHVsZU5hbWUgPSB0aGVtZSB8
fCAiYWNlL3RoZW1lL3RleHRtYXRlIjsKLSAgICAgICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsi
dGhlbWUiLCBtb2R1bGVOYW1lXSwgYWZ0ZXJMb2FkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGFmdGVyTG9hZCh0aGVtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBh
ZnRlckxvYWQodGhlbWUpIHsKLSAgICAgICAgICAgIGRvbS5pbXBvcnRDc3NTdHJpbmcoCi0gICAg
ICAgICAgICAgICAgdGhlbWUuY3NzVGV4dCwKLSAgICAgICAgICAgICAgICB0aGVtZS5jc3NDbGFz
cywKLSAgICAgICAgICAgICAgICBfc2VsZi5jb250YWluZXIub3duZXJEb2N1bWVudAotICAgICAg
ICAgICAgKTsKLQotICAgICAgICAgICAgaWYgKF9zZWxmLnRoZW1lKQotICAgICAgICAgICAgICAg
IGRvbS5yZW1vdmVDc3NDbGFzcyhfc2VsZi5jb250YWluZXIsIF9zZWxmLnRoZW1lLmNzc0NsYXNz
KTsKLSAgICAgICAgICAgIF9zZWxmLiR0aGVtZSA9IHRoZW1lLmNzc0NsYXNzOwotCi0gICAgICAg
ICAgICBfc2VsZi50aGVtZSA9IHRoZW1lOwotICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKF9z
ZWxmLmNvbnRhaW5lciwgdGhlbWUuY3NzQ2xhc3MpOwotICAgICAgICAgICAgZG9tLnNldENzc0Ns
YXNzKF9zZWxmLmNvbnRhaW5lciwgImFjZV9kYXJrIiwgdGhlbWUuaXNEYXJrKTsKLQotICAgICAg
ICAgICAgdmFyIHBhZGRpbmcgPSB0aGVtZS5wYWRkaW5nIHx8IDQ7Ci0gICAgICAgICAgICBpZiAo
X3NlbGYuJHBhZGRpbmcgJiYgcGFkZGluZyAhPSBfc2VsZi4kcGFkZGluZykKLSAgICAgICAgICAg
ICAgICBfc2VsZi5zZXRQYWRkaW5nKHBhZGRpbmcpOwotICAgICAgICAgICAgaWYgKF9zZWxmLiRz
aXplKSB7Ci0gICAgICAgICAgICAgICAgX3NlbGYuJHNpemUud2lkdGggPSAwOwotICAgICAgICAg
ICAgICAgIF9zZWxmLm9uUmVzaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9z
ZWxmLl9kaXNwYXRjaEV2ZW50KCd0aGVtZUxvYWRlZCcse3RoZW1lOnRoZW1lfSk7Ci0gICAgICAg
IH0KLSAgICB9OwotICAgIHRoaXMuZ2V0VGhlbWUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuJHRoZW1lVmFsdWU7Ci0gICAgfTsKLSAgICB0aGlzLnNldFN0eWxlID0gZnVuY3Rp
b24gc2V0U3R5bGUoc3R5bGUsIGluY2x1ZGUpIHsKLSAgICAgICAgZG9tLnNldENzc0NsYXNzKHRo
aXMuY29udGFpbmVyLCBzdHlsZSwgaW5jbHVkZSAhPSBmYWxzZSk7Ci0gICAgfTsKLSAgICB0aGlz
LnVuc2V0U3R5bGUgPSBmdW5jdGlvbiB1bnNldFN0eWxlKHN0eWxlKSB7Ci0gICAgICAgIGRvbS5y
ZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgc3R5bGUpOwotICAgIH07Ci0gICAgdGhpcy5k
ZXN0cm95ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJHRleHRMYXllci5kZXN0cm95KCk7
Ci0gICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmRlc3Ryb3koKTsKLSAgICB9OwotCi19KS5jYWxs
KFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUpOwotCi0KLWNvbmZpZy5kZWZpbmVPcHRpb25zKFZp
cnR1YWxSZW5kZXJlci5wcm90b3R5cGUsICJyZW5kZXJlciIsIHsKLSAgICBhbmltYXRlZFNjcm9s
bDoge2luaXRpYWxWYWx1ZTogZmFsc2V9LAotICAgIHNob3dJbnZpc2libGVzOiB7Ci0gICAgICAg
IHNldDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIu
c2V0U2hvd0ludmlzaWJsZXModmFsdWUpKQotICAgICAgICAgICAgICAgIHRoaXMuJGxvb3Auc2No
ZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7Ci0gICAgICAgIH0sCi0gICAgICAgIGluaXRpYWxWYWx1
ZTogZmFsc2UKLSAgICB9LAotICAgIHNob3dQcmludE1hcmdpbjogewotICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCkgeyB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOyB9LAotICAgICAgICBpbml0aWFs
VmFsdWU6IHRydWUKLSAgICB9LAotICAgIHByaW50TWFyZ2luQ29sdW1uOiB7Ci0gICAgICAgIHNl
dDogZnVuY3Rpb24oKSB7IHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7IH0sCi0gICAgICAgIGlu
aXRpYWxWYWx1ZTogODAKLSAgICB9LAotICAgIHNob3dHdXR0ZXI6IHsKLSAgICAgICAgc2V0OiBm
dW5jdGlvbihzaG93KXsKLSAgICAgICAgICAgIHRoaXMuJGd1dHRlci5zdHlsZS5kaXNwbGF5ID0g
c2hvdyA/ICJibG9jayIgOiAibm9uZSI7Ci0gICAgICAgICAgICB0aGlzLm9uR3V0dGVyUmVzaXpl
KCk7Ci0gICAgICAgIH0sCi0gICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZQotICAgIH0sCi0gICAg
ZmFkZUZvbGRXaWRnZXRzOiB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24oc2hvdykgewotICAgICAg
ICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuJGd1dHRlciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0
cyIsIHNob3cpOwotICAgICAgICB9LAotICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlCi0gICAg
fSwKLSAgICBzaG93Rm9sZFdpZGdldHM6IHsKLSAgICAgICAgc2V0OiBmdW5jdGlvbihzaG93KSB7
dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpfSwKLSAgICAgICAgaW5p
dGlhbFZhbHVlOiB0cnVlCi0gICAgfSwKLSAgICBkaXNwbGF5SW5kZW50R3VpZGVzOiB7Ci0gICAg
ICAgIHNldDogZnVuY3Rpb24oc2hvdykgewotICAgICAgICAgICAgaWYgKHRoaXMuJHRleHRMYXll
ci5zZXREaXNwbGF5SW5kZW50R3VpZGVzKHNob3cpKQotICAgICAgICAgICAgICAgIHRoaXMuJGxv
b3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7Ci0gICAgICAgIH0sCi0gICAgICAgIGluaXRp
YWxWYWx1ZTogdHJ1ZQotICAgIH0sCi0gICAgaGlnaGxpZ2h0R3V0dGVyTGluZTogewotICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgewotICAgICAgICAgICAgaWYgKCF0aGlz
LiRndXR0ZXJMaW5lSGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGlu
ZUhpZ2hsaWdodCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICB0
aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LmNsYXNzTmFtZSA9ICJhY2VfZ3V0dGVyLWFjdGl2ZS1s
aW5lIjsKLSAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0
dGVyTGluZUhpZ2hsaWdodCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLmRpc3BsYXkg
PSBzaG91bGRIaWdobGlnaHQgPyAiIiA6ICJub25lIjsKLSAgICAgICAgICAgIGlmICh0aGlzLiRj
dXJzb3JMYXllci4kcGl4ZWxQb3MpCi0gICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlR3V0dGVy
TGluZUhpZ2hsaWdodCgpOwotICAgICAgICB9LAotICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNl
LAotICAgICAgICB2YWx1ZTogdHJ1ZQotICAgIH0KLX0pOwotCi1leHBvcnRzLlZpcnR1YWxSZW5k
ZXJlciA9IFZpcnR1YWxSZW5kZXJlcjsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbGF5ZXIvZ3V0
dGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbScsICdh
Y2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBkb20gPSByZXF1aXJl
KCIuLi9saWIvZG9tIik7Ci12YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwotdmFyIGxh
bmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwotdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUo
Ii4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwotCi12YXIgR3V0dGVyID0gZnVu
Y3Rpb24ocGFyZW50RWwpIHsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudCgi
ZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNlX2d1dHRl
ci1sYXllciI7Ci0gICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKLSAgICB0
aGlzLnNldFNob3dGb2xkV2lkZ2V0cyh0aGlzLiRzaG93Rm9sZFdpZGdldHMpOwotICAgIAotICAg
IHRoaXMuZ3V0dGVyV2lkdGggPSAwOwotCi0gICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBbXTsKLSAg
ICB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyA9IHRoaXMuJHVwZGF0ZUFubm90YXRpb25zLmJpbmQo
dGhpcyk7Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2
ZW50RW1pdHRlcik7Ci0KLSAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7
Ci0gICAgICAgIGlmICh0aGlzLnNlc3Npb24pCi0gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVt
b3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMpOwotICAg
ICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwotICAgICAgICBzZXNzaW9uLm9uKCJjaGFuZ2Ui
LCB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyk7Ci0gICAgfTsKLQotICAgIHRoaXMuYWRkR3V0dGVy
RGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXsKLSAgICAgICAgaWYgKHdpbmRv
dy5jb25zb2xlKQotICAgICAgICAgICAgY29uc29sZS53YXJuICYmIGNvbnNvbGUud2FybigiZGVw
cmVjYXRlZCB1c2Ugc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uIik7Ci0gICAgICAgIHRoaXMu
c2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTsKLSAgICB9OwotCi0g
ICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUp
ewotICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpCi0gICAgICAgICAgICBjb25zb2xlLndhcm4g
JiYgY29uc29sZS53YXJuKCJkZXByZWNhdGVkIHVzZSBzZXNzaW9uLnJlbW92ZUd1dHRlckRlY29y
YXRpb24iKTsKLSAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24ocm93
LCBjbGFzc05hbWUpOwotICAgIH07Ci0KLSAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rp
b24oYW5ub3RhdGlvbnMpIHsKLSAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBbXQotICAgICAg
ICB2YXIgcm93SW5mbywgcm93OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFubm90YXRp
b25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRp
b25zW2ldOwotICAgICAgICAgICAgdmFyIHJvdyA9IGFubm90YXRpb24ucm93OwotICAgICAgICAg
ICAgdmFyIHJvd0luZm8gPSB0aGlzLiRhbm5vdGF0aW9uc1tyb3ddOwotICAgICAgICAgICAgaWYg
KCFyb3dJbmZvKQotICAgICAgICAgICAgICAgIHJvd0luZm8gPSB0aGlzLiRhbm5vdGF0aW9uc1ty
b3ddID0ge3RleHQ6IFtdfTsKLSAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgYW5ub1RleHQg
PSBhbm5vdGF0aW9uLnRleHQ7Ci0gICAgICAgICAgICBhbm5vVGV4dCA9IGFubm9UZXh0ID8gbGFu
Zy5lc2NhcGVIVE1MKGFubm9UZXh0KSA6IGFubm90YXRpb24uaHRtbCB8fCAiIjsKLQotICAgICAg
ICAgICAgaWYgKHJvd0luZm8udGV4dC5pbmRleE9mKGFubm9UZXh0KSA9PT0gLTEpCi0gICAgICAg
ICAgICAgICAgcm93SW5mby50ZXh0LnB1c2goYW5ub1RleHQpOwotCi0gICAgICAgICAgICB2YXIg
dHlwZSA9IGFubm90YXRpb24udHlwZTsKLSAgICAgICAgICAgIGlmICh0eXBlID09ICJlcnJvciIp
Ci0gICAgICAgICAgICAgICAgcm93SW5mby5jbGFzc05hbWUgPSAiIGFjZV9lcnJvciI7Ci0gICAg
ICAgICAgICBlbHNlIGlmICh0eXBlID09ICJ3YXJuaW5nIiAmJiByb3dJbmZvLmNsYXNzTmFtZSAh
PSAiIGFjZV9lcnJvciIpCi0gICAgICAgICAgICAgICAgcm93SW5mby5jbGFzc05hbWUgPSAiIGFj
ZV93YXJuaW5nIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImluZm8iICYmICghcm93
SW5mby5jbGFzc05hbWUpKQotICAgICAgICAgICAgICAgIHJvd0luZm8uY2xhc3NOYW1lID0gIiBh
Y2VfaW5mbyI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy4kdXBkYXRlQW5ub3RhdGlv
bnMgPSBmdW5jdGlvbiAoZSkgewotICAgICAgICBpZiAoIXRoaXMuJGFubm90YXRpb25zLmxlbmd0
aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGRlbHRhID0gZS5kYXRhOwotICAg
ICAgICB2YXIgcmFuZ2UgPSBkZWx0YS5yYW5nZTsKLSAgICAgICAgdmFyIGZpcnN0Um93ID0gcmFu
Z2Uuc3RhcnQucm93OwotICAgICAgICB2YXIgbGVuID0gcmFuZ2UuZW5kLnJvdyAtIGZpcnN0Um93
OwotICAgICAgICBpZiAobGVuID09PSAwKSB7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0
aW9uID09ICJyZW1vdmVUZXh0IiB8fCBkZWx0YS5hY3Rpb24gPT0gInJlbW92ZUxpbmVzIikgewot
ICAgICAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMuc3BsaWNlKGZpcnN0Um93LCBsZW4gKyAxLCBu
dWxsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVu
ICsgMSk7Ci0gICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDEpOwotICAgICAgICAg
ICAgdGhpcy4kYW5ub3RhdGlvbnMuc3BsaWNlLmFwcGx5KHRoaXMuJGFubm90YXRpb25zLCBhcmdz
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZp
ZykgewotICAgICAgICB2YXIgZW1wdHlBbm5vID0ge2NsYXNzTmFtZTogIiJ9OwotICAgICAgICB2
YXIgaHRtbCA9IFtdOwotICAgICAgICB2YXIgaSA9IGNvbmZpZy5maXJzdFJvdzsKLSAgICAgICAg
dmFyIGxhc3RSb3cgPSBjb25maWcubGFzdFJvdzsKLSAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNl
c3Npb24uZ2V0TmV4dEZvbGRMaW5lKGkpOwotICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZCA/
IGZvbGQuc3RhcnQucm93IDogSW5maW5pdHk7Ci0gICAgICAgIHZhciBmb2xkV2lkZ2V0cyA9IHRo
aXMuJHNob3dGb2xkV2lkZ2V0cyAmJiB0aGlzLnNlc3Npb24uZm9sZFdpZGdldHM7Ci0gICAgICAg
IHZhciBicmVha3BvaW50cyA9IHRoaXMuc2Vzc2lvbi4kYnJlYWtwb2ludHM7Ci0gICAgICAgIHZh
ciBkZWNvcmF0aW9ucyA9IHRoaXMuc2Vzc2lvbi4kZGVjb3JhdGlvbnM7Ci0gICAgICAgIHZhciBm
aXJzdExpbmVOdW1iZXIgPSB0aGlzLnNlc3Npb24uJGZpcnN0TGluZU51bWJlcjsKLSAgICAgICAg
dmFyIGxhc3RMaW5lTnVtYmVyID0gMDsKLQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICAgICAgaWYoaSA+IGZvbGRTdGFydCkgewotICAgICAgICAgICAgICAgIGkgPSBmb2xkLmVuZC5y
b3cgKyAxOwotICAgICAgICAgICAgICAgIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRM
aW5lKGksIGZvbGQpOwotICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQuc3Rh
cnQucm93IDpJbmZpbml0eTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKGkgPiBsYXN0
Um93KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICB2YXIgYW5ub3RhdGlv
biA9IHRoaXMuJGFubm90YXRpb25zW2ldIHx8IGVtcHR5QW5ubzsKLSAgICAgICAgICAgIGh0bWwu
cHVzaCgKLSAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nYWNlX2d1dHRlci1jZWxsICIsCi0g
ICAgICAgICAgICAgICAgYnJlYWtwb2ludHNbaV0gfHwgIiIsIGRlY29yYXRpb25zW2ldIHx8ICIi
LCBhbm5vdGF0aW9uLmNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAiJyBzdHlsZT0naGVpZ2h0
OiIsIHRoaXMuc2Vzc2lvbi5nZXRSb3dMZW5ndGgoaSkgKiBjb25maWcubGluZUhlaWdodCwgInB4
Oyc+IiwgCi0gICAgICAgICAgICAgICAgbGFzdExpbmVOdW1iZXIgPSBpICsgZmlyc3RMaW5lTnVt
YmVyCi0gICAgICAgICAgICApOwotCi0gICAgICAgICAgICBpZiAoZm9sZFdpZGdldHMpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgYyA9IGZvbGRXaWRnZXRzW2ldOwotICAgICAgICAgICAgICAgIGlm
IChjID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGMgPSBmb2xkV2lkZ2V0c1tpXSA9IHRo
aXMuc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmIChjKQotICAg
ICAgICAgICAgICAgICAgICBodG1sLnB1c2goCi0gICAgICAgICAgICAgICAgICAgICAgICAiPHNw
YW4gY2xhc3M9J2FjZV9mb2xkLXdpZGdldCBhY2VfIiwgYywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGMgPT0gInN0YXJ0IiAmJiBpID09IGZvbGRTdGFydCAmJiBpIDwgZm9sZC5lbmQucm93ID8g
IiBhY2VfY2xvc2VkIiA6ICIgYWNlX29wZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIicg
c3R5bGU9J2hlaWdodDoiLCBjb25maWcubGluZUhlaWdodCwgInB4IiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICInPjwvc3Bhbj4iCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGh0bWwucHVzaCgiPC9kaXY+Iik7Ci0KLSAgICAgICAgICAgIGkr
KzsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZWxlbWVudCA9IGRvbS5zZXRJbm5lckh0bWwo
dGhpcy5lbGVtZW50LCBodG1sLmpvaW4oIiIpKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxl
LmhlaWdodCA9IGNvbmZpZy5taW5IZWlnaHQgKyAicHgiOwotICAgICAgICAKLSAgICAgICAgaWYg
KHRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUgfHwgdGhpcy5zZXNzaW9uLiRmaXhlZEd1dHRlcldp
ZHRoKQotICAgICAgICAgICAgbGFzdExpbmVOdW1iZXIgPSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3Ro
KCk7Ci0gICAgICAgIAotICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSAoIiIgKyBsYXN0TGluZU51
bWJlcikubGVuZ3RoICogY29uZmlnLmNoYXJhY3RlcldpZHRoOwotICAgICAgICB2YXIgcGFkZGlu
ZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTsKLSAgICAgICAgZ3V0
dGVyV2lkdGggKz0gcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDsKLSAgICAgICAgaWYgKGd1
dHRlcldpZHRoICE9PSB0aGlzLmd1dHRlcldpZHRoKSB7Ci0gICAgICAgICAgICB0aGlzLmd1dHRl
cldpZHRoID0gZ3V0dGVyV2lkdGg7Ci0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lk
dGggPSBNYXRoLmNlaWwodGhpcy5ndXR0ZXJXaWR0aCkgKyAicHgiOwotICAgICAgICAgICAgdGhp
cy5fZW1pdCgiY2hhbmdlR3V0dGVyV2lkdGgiLCBndXR0ZXJXaWR0aCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGhpcy4kc2hvd0ZvbGRXaWRnZXRzID0gdHJ1ZTsKLSAgICB0aGlzLnNldFNo
b3dGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKHNob3cpIHsKLSAgICAgICAgaWYgKHNob3cpCi0gICAg
ICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2ZvbGRpbmctZW5hYmxl
ZCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5l
bGVtZW50LCAiYWNlX2ZvbGRpbmctZW5hYmxlZCIpOwotCi0gICAgICAgIHRoaXMuJHNob3dGb2xk
V2lkZ2V0cyA9IHNob3c7Ci0gICAgICAgIHRoaXMuJHBhZGRpbmcgPSBudWxsOwotICAgIH07Ci0g
ICAgCi0gICAgdGhpcy5nZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuJHNob3dGb2xkV2lkZ2V0czsKLSAgICB9OwotCi0gICAgdGhpcy4kY29tcHV0
ZVBhZGRpbmcgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZmlyc3RD
aGlsZCkKLSAgICAgICAgICAgIHJldHVybiB7bGVmdDogMCwgcmlnaHQ6IDB9OwotICAgICAgICB2
YXIgc3R5bGUgPSBkb20uY29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7Ci0g
ICAgICAgIHRoaXMuJHBhZGRpbmcgPSB7fQotICAgICAgICB0aGlzLiRwYWRkaW5nLmxlZnQgPSBw
YXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCkgKyAxOwotICAgICAgICB0aGlzLiRwYWRkaW5nLnJp
Z2h0ID0gcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KTsgIAotICAgICAgICByZXR1cm4gdGhp
cy4kcGFkZGluZzsKLSAgICB9OwotCi0gICAgdGhpcy5nZXRSZWdpb24gPSBmdW5jdGlvbihwb2lu
dCkgewotICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0
ZVBhZGRpbmcoKTsKLSAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7Ci0gICAgICAgIGlmIChwb2ludC54IDwgcGFkZGluZy5sZWZ0ICsgcmVjdC5s
ZWZ0KQotICAgICAgICAgICAgcmV0dXJuICJtYXJrZXJzIjsKLSAgICAgICAgaWYgKHRoaXMuJHNo
b3dGb2xkV2lkZ2V0cyAmJiBwb2ludC54ID4gcmVjdC5yaWdodCAtIHBhZGRpbmcucmlnaHQpCi0g
ICAgICAgICAgICByZXR1cm4gImZvbGRXaWRnZXRzIjsKLSAgICB9OwotCi19KS5jYWxsKEd1dHRl
ci5wcm90b3R5cGUpOwotCi1leHBvcnRzLkd1dHRlciA9IEd1dHRlcjsKLQotfSk7Ci0KLWFjZS5k
ZWZpbmUoJ2FjZS9sYXllci9tYXJrZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUn
ICwgJ2FjZS9yYW5nZScsICdhY2UvbGliL2RvbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKLQotCi12YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwot
dmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKLQotdmFyIE1hcmtlciA9IGZ1bmN0aW9u
KHBhcmVudEVsKSB7Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9tYXJrZXItbGF5
ZXIiOwotICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7Ci19OwotCi0oZnVu
Y3Rpb24oKSB7Ci0KLSAgICB0aGlzLiRwYWRkaW5nID0gMDsKLQotICAgIHRoaXMuc2V0UGFkZGlu
ZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKLSAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7
Ci0gICAgfTsKLSAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7Ci0gICAg
ICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgfTsKLSAgICAKLSAgICB0aGlzLnNldE1h
cmtlcnMgPSBmdW5jdGlvbihtYXJrZXJzKSB7Ci0gICAgICAgIHRoaXMubWFya2VycyA9IG1hcmtl
cnM7Ci0gICAgfTsKLQotICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7Ci0gICAg
ICAgIHZhciBjb25maWcgPSBjb25maWcgfHwgdGhpcy5jb25maWc7Ci0gICAgICAgIGlmICghY29u
ZmlnKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmln
OwotCi0KLSAgICAgICAgdmFyIGh0bWwgPSBbXTsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIHRo
aXMubWFya2VycykgewotICAgICAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMubWFya2Vyc1trZXld
OwotCi0gICAgICAgICAgICBpZiAoIW1hcmtlci5yYW5nZSkgewotICAgICAgICAgICAgICAgIG1h
cmtlci51cGRhdGUoaHRtbCwgdGhpcywgdGhpcy5zZXNzaW9uLCBjb25maWcpOwotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcmFuZ2Ug
PSBtYXJrZXIucmFuZ2UuY2xpcFJvd3MoY29uZmlnLmZpcnN0Um93LCBjb25maWcubGFzdFJvdyk7
Ci0gICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSBjb250aW51ZTsKLQotICAgICAgICAg
ICAgcmFuZ2UgPSByYW5nZS50b1NjcmVlblJhbmdlKHRoaXMuc2Vzc2lvbik7Ci0gICAgICAgICAg
ICBpZiAobWFya2VyLnJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRvcCA9IHRoaXMu
JGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgdmFyIGxl
ZnQgPSB0aGlzLiRwYWRkaW5nICsgcmFuZ2Uuc3RhcnQuY29sdW1uICogY29uZmlnLmNoYXJhY3Rl
cldpZHRoOwotICAgICAgICAgICAgICAgIG1hcmtlci5yZW5kZXJlcihodG1sLCByYW5nZSwgbGVm
dCwgdG9wLCBjb25maWcpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSAi
ZnVsbExpbmUiKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5kcmF3RnVsbExpbmVNYXJrZXIoaHRt
bCwgcmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
bWFya2VyLnR5cGUgPT0gInNjcmVlbkxpbmUiKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5kcmF3
U2NyZWVuTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5pc011bHRpTGluZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1hcmtlci50eXBlID09ICJ0ZXh0IikKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5k
cmF3VGV4dE1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3TXVsdGlMaW5lTWFy
a2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenosIGNvbmZpZyk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIoaHRtbCwgcmFu
Z2UsIG1hcmtlci5jbGF6eiArICIgYWNlX3N0YXJ0IiwgY29uZmlnKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb20uc2V0SW5uZXJIdG1sKHRoaXMu
ZWxlbWVudCwgaHRtbC5qb2luKCIiKSk7Ci0gICAgfTsKLQotICAgIHRoaXMuJGdldFRvcCA9IGZ1
bmN0aW9uKHJvdywgbGF5ZXJDb25maWcpIHsKLSAgICAgICAgcmV0dXJuIChyb3cgLSBsYXllckNv
bmZpZy5maXJzdFJvd1NjcmVlbikgKiBsYXllckNvbmZpZy5saW5lSGVpZ2h0OwotICAgIH07Ci0g
ICAgdGhpcy5kcmF3VGV4dE1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBj
bGF6eiwgbGF5ZXJDb25maWcpIHsKLSAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsK
LQotICAgICAgICB2YXIgbGluZVJhbmdlID0gbmV3IFJhbmdlKAotICAgICAgICAgICAgcm93LCBy
YW5nZS5zdGFydC5jb2x1bW4sCi0gICAgICAgICAgICByb3csIHRoaXMuc2Vzc2lvbi5nZXRTY3Jl
ZW5MYXN0Um93Q29sdW1uKHJvdykKLSAgICAgICAgKTsKLSAgICAgICAgdGhpcy5kcmF3U2luZ2xl
TGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCBsaW5lUmFuZ2UsIGNsYXp6ICsgIiBhY2Vfc3RhcnQi
LCBsYXllckNvbmZpZywgMSwgInRleHQiKTsKLSAgICAgICAgcm93ID0gcmFuZ2UuZW5kLnJvdzsK
LSAgICAgICAgbGluZVJhbmdlID0gbmV3IFJhbmdlKHJvdywgMCwgcm93LCByYW5nZS5lbmQuY29s
dW1uKTsKLSAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihzdHJpbmdCdWlsZGVyLCBs
aW5lUmFuZ2UsIGNsYXp6LCBsYXllckNvbmZpZywgMCwgInRleHQiKTsKLQotICAgICAgICBmb3Ig
KHJvdyA9IHJhbmdlLnN0YXJ0LnJvdyArIDE7IHJvdyA8IHJhbmdlLmVuZC5yb3c7IHJvdysrKSB7
Ci0gICAgICAgICAgICBsaW5lUmFuZ2Uuc3RhcnQucm93ID0gcm93OwotICAgICAgICAgICAgbGlu
ZVJhbmdlLmVuZC5yb3cgPSByb3c7Ci0gICAgICAgICAgICBsaW5lUmFuZ2UuZW5kLmNvbHVtbiA9
IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKHJvdyk7Ci0gICAgICAgICAgICB0
aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIGxpbmVSYW5nZSwgY2xhenos
IGxheWVyQ29uZmlnLCAxLCAidGV4dCIpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICB0aGlzLmRy
YXdNdWx0aUxpbmVNYXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenos
IGNvbmZpZywgdHlwZSkgewotICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmc7Ci0g
ICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcubGluZUhlaWdodDsKLSAgICAgICAgdmFyIHRvcCA9
IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7Ci0gICAgICAgIHZhciBsZWZ0
ID0gcGFkZGluZyArIHJhbmdlLnN0YXJ0LmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsK
LQotICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goCi0gICAgICAgICAgICAiPGRpdiBjbGFzcz0n
IiwgY2xhenosICIgYWNlX3N0YXJ0JyBzdHlsZT0nIiwKLSAgICAgICAgICAgICJoZWlnaHQ6Iiwg
aGVpZ2h0LCAicHg7IiwKLSAgICAgICAgICAgICJyaWdodDowOyIsCi0gICAgICAgICAgICAidG9w
OiIsIHRvcCwgInB4OyIsCi0gICAgICAgICAgICAibGVmdDoiLCBsZWZ0LCAicHg7Jz48L2Rpdj4i
Ci0gICAgICAgICk7Ci0gICAgICAgIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5lbmQucm93LCBj
b25maWcpOwotICAgICAgICB2YXIgd2lkdGggPSByYW5nZS5lbmQuY29sdW1uICogY29uZmlnLmNo
YXJhY3RlcldpZHRoOwotCi0gICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKLSAgICAgICAgICAg
ICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwgIicgc3R5bGU9JyIsCi0gICAgICAgICAgICAiaGVpZ2h0
OiIsIGhlaWdodCwgInB4OyIsCi0gICAgICAgICAgICAid2lkdGg6Iiwgd2lkdGgsICJweDsiLAot
ICAgICAgICAgICAgInRvcDoiLCB0b3AsICJweDsiLAotICAgICAgICAgICAgImxlZnQ6IiwgcGFk
ZGluZywgInB4Oyc+PC9kaXY+IgotICAgICAgICApOwotICAgICAgICBoZWlnaHQgPSAocmFuZ2Uu
ZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyAtIDEpICogY29uZmlnLmxpbmVIZWlnaHQ7Ci0gICAg
ICAgIGlmIChoZWlnaHQgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0b3AgPSB0
aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93ICsgMSwgY29uZmlnKTsKLQotICAgICAgICBzdHJp
bmdCdWlsZGVyLnB1c2goCi0gICAgICAgICAgICAiPGRpdiBjbGFzcz0nIiwgY2xhenosICInIHN0
eWxlPSciLAotICAgICAgICAgICAgImhlaWdodDoiLCBoZWlnaHQsICJweDsiLAotICAgICAgICAg
ICAgInJpZ2h0OjA7IiwKLSAgICAgICAgICAgICJ0b3A6IiwgdG9wLCAicHg7IiwKLSAgICAgICAg
ICAgICJsZWZ0OiIsIHBhZGRpbmcsICJweDsnPjwvZGl2PiIKLSAgICAgICAgKTsKLSAgICB9Owot
ICAgIHRoaXMuZHJhd1NpbmdsZUxpbmVNYXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCBy
YW5nZSwgY2xhenosIGNvbmZpZywgZXh0cmFMZW5ndGgpIHsKLSAgICAgICAgdmFyIGhlaWdodCA9
IGNvbmZpZy5saW5lSGVpZ2h0OwotICAgICAgICB2YXIgd2lkdGggPSAocmFuZ2UuZW5kLmNvbHVt
biArIChleHRyYUxlbmd0aCB8fCAwKSAtIHJhbmdlLnN0YXJ0LmNvbHVtbikgKiBjb25maWcuY2hh
cmFjdGVyV2lkdGg7Ci0KLSAgICAgICAgdmFyIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFy
dC5yb3csIGNvbmZpZyk7Ci0gICAgICAgIHZhciBsZWZ0ID0gdGhpcy4kcGFkZGluZyArIHJhbmdl
LnN0YXJ0LmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKLQotICAgICAgICBzdHJpbmdC
dWlsZGVyLnB1c2goCi0gICAgICAgICAgICAiPGRpdiBjbGFzcz0nIiwgY2xhenosICInIHN0eWxl
PSciLAotICAgICAgICAgICAgImhlaWdodDoiLCBoZWlnaHQsICJweDsiLAotICAgICAgICAgICAg
IndpZHRoOiIsIHdpZHRoLCAicHg7IiwKLSAgICAgICAgICAgICJ0b3A6IiwgdG9wLCAicHg7IiwK
LSAgICAgICAgICAgICJsZWZ0OiIsIGxlZnQsInB4Oyc+PC9kaXY+IgotICAgICAgICApOwotICAg
IH07Ci0KLSAgICB0aGlzLmRyYXdGdWxsTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxk
ZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnKSB7Ci0gICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRU
b3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpOwotICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmln
LmxpbmVIZWlnaHQ7Ci0gICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgIT0gcmFuZ2UuZW5kLnJv
dykKLSAgICAgICAgICAgIGhlaWdodCArPSB0aGlzLiRnZXRUb3AocmFuZ2UuZW5kLnJvdywgY29u
ZmlnKSAtIHRvcDsKLQotICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goCi0gICAgICAgICAgICAi
PGRpdiBjbGFzcz0nIiwgY2xhenosICInIHN0eWxlPSciLAotICAgICAgICAgICAgImhlaWdodDoi
LCBoZWlnaHQsICJweDsiLAotICAgICAgICAgICAgInRvcDoiLCB0b3AsICJweDsiLAotICAgICAg
ICAgICAgImxlZnQ6MDtyaWdodDowOyc+PC9kaXY+IgotICAgICAgICApOwotICAgIH07Ci0gICAg
Ci0gICAgdGhpcy5kcmF3U2NyZWVuTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIs
IHJhbmdlLCBjbGF6eiwgY29uZmlnKSB7Ci0gICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3Ao
cmFuZ2Uuc3RhcnQucm93LCBjb25maWcpOwotICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxp
bmVIZWlnaHQ7Ci0KLSAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKAotICAgICAgICAgICAgIjxk
aXYgY2xhc3M9JyIsIGNsYXp6LCAiJyBzdHlsZT0nIiwKLSAgICAgICAgICAgICJoZWlnaHQ6Iiwg
aGVpZ2h0LCAicHg7IiwKLSAgICAgICAgICAgICJ0b3A6IiwgdG9wLCAicHg7IiwKLSAgICAgICAg
ICAgICJsZWZ0OjA7cmlnaHQ6MDsnPjwvZGl2PiIKLSAgICAgICAgKTsKLSAgICB9OwotCi19KS5j
YWxsKE1hcmtlci5wcm90b3R5cGUpOwotCi1leHBvcnRzLk1hcmtlciA9IE1hcmtlcjsKLQotfSk7
Ci0KLWFjZS5kZWZpbmUoJ2FjZS9sYXllci90ZXh0JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAn
bW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2xhbmcnLCAn
YWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIv
b29wIik7Ci12YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwotdmFyIGxhbmcgPSByZXF1
aXJlKCIuLi9saWIvbGFuZyIpOwotdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2Vy
YWdlbnQiKTsKLXZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRfZW1pdHRl
ciIpLkV2ZW50RW1pdHRlcjsKLQotdmFyIFRleHQgPSBmdW5jdGlvbihwYXJlbnRFbCkgewotICAg
IHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1l
bnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfdGV4dC1sYXllciI7Ci0gICAgcGFyZW50RWwu
YXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKLQotICAgIHRoaXMuJGNoYXJhY3RlclNpemUgPSB7
d2lkdGg6IDAsIGhlaWdodDogMH07Ci0gICAgdGhpcy5jaGVja0ZvclNpemVDaGFuZ2VzKCk7Ci0g
ICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzKCk7Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICBv
b3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7Ci0KLSAgICB0aGlzLkVPRl9DSEFSID0g
Ilx4QjYiOyAvLyImcGFyYTsiOwotICAgIHRoaXMuRU9MX0NIQVIgPSAiXHhBQyI7IC8vIiZub3Q7
IjsKLSAgICB0aGlzLlRBQl9DSEFSID0gIlx1MjE5MiI7IC8vIiZyYXJyOyIgIlx1MjFFNSI7Ci0g
ICAgdGhpcy5TUEFDRV9DSEFSID0gIlx4QjciOyAvLyImbWlkZG90OyI7Ci0gICAgdGhpcy4kcGFk
ZGluZyA9IDA7Ci0KLSAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7Ci0g
ICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOwotICAgICAgICB0aGlzLmVsZW1lbnQuc3R5
bGUucGFkZGluZyA9ICIwICIgKyBwYWRkaW5nICsgInB4IjsKLSAgICB9OwotCi0gICAgdGhpcy5n
ZXRMaW5lSGVpZ2h0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRjaGFyYWN0
ZXJTaXplLmhlaWdodCB8fCAxOwotICAgIH07Ci0KLSAgICB0aGlzLmdldENoYXJhY3RlcldpZHRo
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRjaGFyYWN0ZXJTaXplLndpZHRo
IHx8IDE7Ci0gICAgfTsKLQotICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcyA9IGZ1bmN0aW9u
KCkgewotICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJG1lYXN1cmVTaXplcygpOwotICAgICAgICBp
ZiAoc2l6ZSAmJiAodGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCAhPT0gc2l6ZS53aWR0aCB8fCB0
aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCAhPT0gc2l6ZS5oZWlnaHQpKSB7Ci0gICAgICAgICAg
ICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gImJvbGQiOwotICAgICAgICAg
ICAgdmFyIGJvbGRTaXplID0gdGhpcy4kbWVhc3VyZVNpemVzKCk7Ci0gICAgICAgICAgICB0aGlz
LiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gIiI7Ci0gICAgICAgICAgICB0aGlzLiRj
aGFyYWN0ZXJTaXplID0gc2l6ZTsKLSAgICAgICAgICAgIHRoaXMuYWxsb3dCb2xkRm9udHMgPSBi
b2xkU2l6ZSAmJiBib2xkU2l6ZS53aWR0aCA9PT0gc2l6ZS53aWR0aCAmJiBib2xkU2l6ZS5oZWln
aHQgPT09IHNpemUuaGVpZ2h0OwotICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQ2hhcmFj
dGVyU2l6ZSIsIHtkYXRhOiBzaXplfSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy4k
cG9sbFNpemVDaGFuZ2VzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsK
LSAgICAgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIHNlbGYuY2hlY2tGb3JTaXplQ2hhbmdlcygpOwotICAgICAgICB9
LCA1MDApOwotICAgIH07Ci0KLSAgICB0aGlzLiRmb250U3R5bGVzID0gewotICAgICAgICBmb250
RmFtaWx5IDogMSwKLSAgICAgICAgZm9udFNpemUgOiAxLAotICAgICAgICBmb250V2VpZ2h0IDog
MSwKLSAgICAgICAgZm9udFN0eWxlIDogMSwKLSAgICAgICAgbGluZUhlaWdodCA6IDEKLSAgICB9
OwotCi0gICAgdGhpcy4kbWVhc3VyZVNpemVzID0gdXNlcmFnZW50LmlzSUUgfHwgdXNlcmFnZW50
LmlzT2xkR2Vja28gPyBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIG4gPSAxMDAwOwotICAgICAg
ICBpZiAoIXRoaXMuJG1lYXN1cmVOb2RlKSB7Ci0gICAgICAgICAgICB2YXIgbWVhc3VyZU5vZGUg
PSB0aGlzLiRtZWFzdXJlTm9kZSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAg
ICAgIHZhciBzdHlsZSA9IG1lYXN1cmVOb2RlLnN0eWxlOwotCi0gICAgICAgICAgICBzdHlsZS53
aWR0aCA9IHN0eWxlLmhlaWdodCA9ICJhdXRvIjsKLSAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBz
dHlsZS50b3AgPSAoLW4gKiA0MCkgICsgInB4IjsKLQotICAgICAgICAgICAgc3R5bGUudmlzaWJp
bGl0eSA9ICJoaWRkZW4iOwotICAgICAgICAgICAgc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwot
ICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7Ci0gICAgICAgICAgICBzdHls
ZS53aGl0ZVNwYWNlID0gIm5vd3JhcCI7Ci0gICAgICAgICAgICBtZWFzdXJlTm9kZS5pbm5lckhU
TUwgPSBsYW5nLnN0cmluZ1JlcGVhdCgiWHkiLCBuKTsKLQotICAgICAgICAgICAgaWYgKHRoaXMu
ZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1l
bnQub3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lYXN1cmVOb2RlKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuZWxlbWVu
dC5wYXJlbnROb2RlOwotICAgICAgICAgICAgICAgIHdoaWxlICghZG9tLmhhc0Nzc0NsYXNzKGNv
bnRhaW5lciwgImFjZV9lZGl0b3IiKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0g
Y29udGFpbmVyLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENo
aWxkKG1lYXN1cmVOb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo
IXRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0g
ICAgICAgIHZhciBzdHlsZSA9IHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlOwotICAgICAgICB2YXIg
Y29tcHV0ZWRTdHlsZSA9IGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCk7Ci0gICAgICAg
IGZvciAodmFyIHByb3AgaW4gdGhpcy4kZm9udFN0eWxlcykKLSAgICAgICAgICAgIHN0eWxlW3By
b3BdID0gY29tcHV0ZWRTdHlsZVtwcm9wXTsKLQotICAgICAgICB2YXIgc2l6ZSA9IHsKLSAgICAg
ICAgICAgIGhlaWdodDogdGhpcy4kbWVhc3VyZU5vZGUub2Zmc2V0SGVpZ2h0LAotICAgICAgICAg
ICAgd2lkdGg6IHRoaXMuJG1lYXN1cmVOb2RlLm9mZnNldFdpZHRoIC8gKG4gKiAyKQotICAgICAg
ICB9OwotICAgICAgICBpZiAoc2l6ZS53aWR0aCA9PSAwIHx8IHNpemUuaGVpZ2h0ID09IDApCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0g
ICAgOiBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCF0aGlzLiRtZWFzdXJlTm9kZSkgewotICAg
ICAgICAgICAgdmFyIG1lYXN1cmVOb2RlID0gdGhpcy4kbWVhc3VyZU5vZGUgPSBkb20uY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICB2YXIgc3R5bGUgPSBtZWFzdXJlTm9kZS5zdHls
ZTsKLQotICAgICAgICAgICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQgPSAiYXV0byI7Ci0g
ICAgICAgICAgICBzdHlsZS5sZWZ0ID0gc3R5bGUudG9wID0gLTEwMCArICJweCI7Ci0KLSAgICAg
ICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKLSAgICAgICAgICAgIHN0eWxlLnBv
c2l0aW9uID0gImZpeGVkIjsKLSAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gInZpc2libGUi
OwotICAgICAgICAgICAgc3R5bGUud2hpdGVTcGFjZSA9ICJub3dyYXAiOwotCi0gICAgICAgICAg
ICBtZWFzdXJlTm9kZS5pbm5lckhUTUwgPSAiWCI7Ci0KLSAgICAgICAgICAgIHZhciBjb250YWlu
ZXIgPSB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIHdoaWxlIChjb250YWlu
ZXIgJiYgIWRvbS5oYXNDc3NDbGFzcyhjb250YWluZXIsICJhY2VfZWRpdG9yIikpCi0gICAgICAg
ICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7Ci0KLSAgICAgICAgICAg
IGlmICghY29udGFpbmVyKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRtZWFzdXJlTm9k
ZSA9IG51bGw7Ci0KLSAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtZWFzdXJlTm9k
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcmVjdCA9IHRoaXMuJG1lYXN1cmVOb2RlLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotCi0gICAgICAgIHZhciBzaXplID0gewotICAgICAgICAg
ICAgaGVpZ2h0OiByZWN0LmhlaWdodCwKLSAgICAgICAgICAgIHdpZHRoOiByZWN0LndpZHRoCi0g
ICAgICAgIH07Ci0gICAgICAgIGlmIChzaXplLndpZHRoID09IDAgfHwgc2l6ZS5oZWlnaHQgPT0g
MCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiBzaXplOwotICAg
IH07Ci0KLSAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7Ci0gICAgICAg
IHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmco
KTsKLSAgICB9OwotCi0gICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IGZhbHNlOwotICAgIHRoaXMu
c2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykgewotICAgICAgICBp
ZiAodGhpcy5zaG93SW52aXNpYmxlcyA9PSBzaG93SW52aXNpYmxlcykKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICB0aGlzLnNob3dJbnZpc2libGVzID0gc2hvd0ludmlzaWJs
ZXM7Ci0gICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfTsKLQotICAgIHRoaXMuZGlzcGxheUluZGVudEd1aWRlcyA9IHRydWU7Ci0gICAg
dGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkgewotICAgICAg
ICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID09IGRpc3BsYXkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID0gZGlzcGxh
eTsKLSAgICAgICAgdGhpcy4kY29tcHV0ZVRhYlN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9OwotCi0gICAgdGhpcy4kdGFiU3RyaW5ncyA9IFtdOwotICAgIHRoaXMub25DaGFu
Z2VUYWJTaXplID0KLSAgICB0aGlzLiRjb21wdXRlVGFiU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciB0YWJTaXplID0gdGhpcy5zZXNzaW9uLmdldFRhYlNpemUoKTsKLSAgICAgICAg
dGhpcy50YWJTaXplID0gdGFiU2l6ZTsKLSAgICAgICAgdmFyIHRhYlN0ciA9IHRoaXMuJHRhYlN0
cmluZ3MgPSBbMF07Ci0gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGFiU2l6ZSArIDE7IGkr
KykgewotICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsKLSAgICAgICAgICAg
ICAgICB0YWJTdHIucHVzaCgiPHNwYW4gY2xhc3M9J2FjZV9pbnZpc2libGUnPiIKLSAgICAgICAg
ICAgICAgICAgICAgKyB0aGlzLlRBQl9DSEFSCi0gICAgICAgICAgICAgICAgICAgICsgbGFuZy5z
dHJpbmdSZXBlYXQoIlx4YTAiLCBpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgKyAiPC9zcGFu
PiIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0YWJTdHIucHVzaChs
YW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKSB7Ci0gICAgICAgICAgICB0aGlz
LiRpbmRlbnRHdWlkZVJlID0gIC9cc1xTfCBcdHxcdCB8XHMkLzsKLSAgICAgICAgICAgIHZhciBj
bGFzc05hbWUgPSAiYWNlX2luZGVudC1ndWlkZSI7Ci0gICAgICAgICAgICBpZiAodGhpcy5zaG93
SW52aXNpYmxlcykgewotICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSAiIGFjZV9pbnZpc2li
bGUiOwotICAgICAgICAgICAgICAgIHZhciBzcGFjZUNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVh
dCh0aGlzLlNQQUNFX0NIQVIsIHRoaXMudGFiU2l6ZSk7Ci0gICAgICAgICAgICAgICAgdmFyIHRh
YkNvbnRlbnQgPSB0aGlzLlRBQl9DSEFSICsgbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCB0aGlz
LnRhYlNpemUgLSAxKTsKLSAgICAgICAgICAgIH0gZWxzZXsKLSAgICAgICAgICAgICAgICB2YXIg
c3BhY2VDb250ZW50ID0gbGFuZy5zdHJpbmdSZXBlYXQoIlx4YTAiLCB0aGlzLnRhYlNpemUpOwot
ICAgICAgICAgICAgICAgIHZhciB0YWJDb250ZW50ID0gc3BhY2VDb250ZW50OwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB0aGlzLiR0YWJTdHJpbmdzWyIgIl0gPSAiPHNwYW4gY2xhc3M9
JyIgKyBjbGFzc05hbWUgKyAiJz4iICsgc3BhY2VDb250ZW50ICsgIjwvc3Bhbj4iOwotICAgICAg
ICAgICAgdGhpcy4kdGFiU3RyaW5nc1siXHQiXSA9ICI8c3BhbiBjbGFzcz0nIiArIGNsYXNzTmFt
ZSArICInPiIgKyB0YWJDb250ZW50ICsgIjwvc3Bhbj4iOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0Um93LCBsYXN0Um93
KSB7Ci0gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXN0Um93ICE9IGNvbmZpZy5sYXN0Um93IHx8
Ci0gICAgICAgICAgICB0aGlzLmNvbmZpZy5maXJzdFJvdyAhPSBjb25maWcuZmlyc3RSb3cpIHsK
LSAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGluZXMoY29uZmlnKTsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKLQotICAgICAgICB2YXIgZmlyc3QgPSBNYXRoLm1heChm
aXJzdFJvdywgY29uZmlnLmZpcnN0Um93KTsKLSAgICAgICAgdmFyIGxhc3QgPSBNYXRoLm1pbihs
YXN0Um93LCBjb25maWcubGFzdFJvdyk7Ci0KLSAgICAgICAgdmFyIGxpbmVFbGVtZW50cyA9IHRo
aXMuZWxlbWVudC5jaGlsZE5vZGVzOwotICAgICAgICB2YXIgbGluZUVsZW1lbnRzSWR4ID0gMDsK
LQotICAgICAgICBmb3IgKHZhciByb3cgPSBjb25maWcuZmlyc3RSb3c7IHJvdyA8IGZpcnN0OyBy
b3crKykgewotICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRM
aW5lKHJvdyk7Ci0gICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoZm9sZExpbmUuY29udGFpbnNSb3coZmlyc3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZp
cnN0ID0gZm9sZExpbmUuc3RhcnQucm93OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGlu
ZS5lbmQucm93OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxpbmVFbGVtZW50c0lkeCArKzsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciByb3cgPSBmaXJz
dDsKLSAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShy
b3cpOwotICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5y
b3cgOiBJbmZpbml0eTsKLQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaWYg
KHJvdyA+IGZvbGRTdGFydCkgewotICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5y
b3crMTsKLSAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9s
ZExpbmUocm93LCBmb2xkTGluZSk7Ci0gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExp
bmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHJvdyA+IGxhc3QpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIHZhciBsaW5lRWxlbWVudCA9IGxpbmVFbGVtZW50c1tsaW5lRWxlbWVudHNJZHgrK107Ci0g
ICAgICAgICAgICBpZiAobGluZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgaHRtbCA9
IFtdOwotICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoCi0gICAgICAgICAgICAgICAg
ICAgIGh0bWwsIHJvdywgIXRoaXMuJHVzZUxpbmVHcm91cHMoKSwgcm93ID09IGZvbGRTdGFydCA/
IGZvbGRMaW5lIDogZmFsc2UKLSAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIGRv
bS5zZXRJbm5lckh0bWwobGluZUVsZW1lbnQsIGh0bWwuam9pbigiIikpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcm93Kys7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy5zY3Jv
bGxMaW5lcyA9IGZ1bmN0aW9uKGNvbmZpZykgewotICAgICAgICB2YXIgb2xkQ29uZmlnID0gdGhp
cy5jb25maWc7Ci0gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOwotCi0gICAgICAgIGlmICgh
b2xkQ29uZmlnIHx8IG9sZENvbmZpZy5sYXN0Um93IDwgY29uZmlnLmZpcnN0Um93KQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGNvbmZpZyk7Ci0KLSAgICAgICAgaWYgKGNvbmZpZy5s
YXN0Um93IDwgb2xkQ29uZmlnLmZpcnN0Um93KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBk
YXRlKGNvbmZpZyk7Ci0KLSAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50OwotICAgICAgICBp
ZiAob2xkQ29uZmlnLmZpcnN0Um93IDwgY29uZmlnLmZpcnN0Um93KQotICAgICAgICAgICAgZm9y
ICh2YXIgcm93PXRoaXMuc2Vzc2lvbi5nZXRGb2xkZWRSb3dDb3VudChvbGRDb25maWcuZmlyc3RS
b3csIGNvbmZpZy5maXJzdFJvdyAtIDEpOyByb3c+MDsgcm93LS0pCi0gICAgICAgICAgICAgICAg
ZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7Ci0KLSAgICAgICAgaWYgKG9sZENvbmZpZy5s
YXN0Um93ID4gY29uZmlnLmxhc3RSb3cpCi0gICAgICAgICAgICBmb3IgKHZhciByb3c9dGhpcy5z
ZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KGNvbmZpZy5sYXN0Um93ICsgMSwgb2xkQ29uZmlnLmxh
c3RSb3cpOyByb3c+MDsgcm93LS0pCi0gICAgICAgICAgICAgICAgZWwucmVtb3ZlQ2hpbGQoZWwu
bGFzdENoaWxkKTsKLQotICAgICAgICBpZiAoY29uZmlnLmZpcnN0Um93IDwgb2xkQ29uZmlnLmZp
cnN0Um93KSB7Ci0gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLiRyZW5kZXJMaW5lc0Zy
YWdtZW50KGNvbmZpZywgY29uZmlnLmZpcnN0Um93LCBvbGRDb25maWcuZmlyc3RSb3cgLSAxKTsK
LSAgICAgICAgICAgIGlmIChlbC5maXJzdENoaWxkKQotICAgICAgICAgICAgICAgIGVsLmluc2Vy
dEJlZm9yZShmcmFnbWVudCwgZWwuZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGNvbmZpZy5sYXN0Um93ID4gb2xkQ29uZmlnLmxhc3RSb3cpIHsKLSAgICAgICAgICAg
IHZhciBmcmFnbWVudCA9IHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoY29uZmlnLCBvbGRDb25m
aWcubGFzdFJvdyArIDEsIGNvbmZpZy5sYXN0Um93KTsKLSAgICAgICAgICAgIGVsLmFwcGVuZENo
aWxkKGZyYWdtZW50KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0aGlzLiRyZW5kZXJMaW5l
c0ZyYWdtZW50ID0gZnVuY3Rpb24oY29uZmlnLCBmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAg
ICB2YXIgZnJhZ21lbnQgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCk7Ci0gICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKLSAgICAgICAgdmFyIGZv
bGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cpOwotICAgICAgICB2YXIg
Zm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKLQot
ICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkg
ewotICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3crMTsKLSAgICAgICAgICAg
ICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93LCBmb2xkTGlu
ZSk7Ci0gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFy
dC5yb3cgOiBJbmZpbml0eTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyb3cgPiBs
YXN0Um93KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICB2YXIgY29udGFp
bmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotCi0gICAgICAgICAgICB2YXIgaHRtbCA9
IFtdOwotICAgICAgICAgICAgdGhpcy4kcmVuZGVyTGluZShodG1sLCByb3csIGZhbHNlLCByb3cg
PT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7Ci0gICAgICAgICAgICBjb250YWluZXIu
aW5uZXJIVE1MID0gaHRtbC5qb2luKCIiKTsKLSAgICAgICAgICAgIGlmICh0aGlzLiR1c2VMaW5l
R3JvdXBzKCkpIHsKLSAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2FjZV9s
aW5lX2dyb3VwJzsKLSAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250YWlu
ZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBj
b250YWluZXIuY2hpbGROb2RlcwotICAgICAgICAgICAgICAgIHdoaWxlKGxpbmVzLmxlbmd0aCkK
LSAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQobGluZXNbMF0pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByb3crKzsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7Ci0gICAgfTsKLQotICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmln
KSB7Ci0gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOwotCi0gICAgICAgIHZhciBodG1sID0g
W107Ci0gICAgICAgIHZhciBmaXJzdFJvdyA9IGNvbmZpZy5maXJzdFJvdywgbGFzdFJvdyA9IGNv
bmZpZy5sYXN0Um93OwotCi0gICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKLSAgICAgICAgdmFy
IGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShyb3cpOwotICAgICAgICB2
YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsK
LQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFy
dCkgewotICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3crMTsKLSAgICAgICAg
ICAgICAgICBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93LCBmb2xk
TGluZSk7Ci0gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5z
dGFydC5yb3cgOkluZmluaXR5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJvdyA+
IGxhc3RSb3cpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICh0aGlz
LiR1c2VMaW5lR3JvdXBzKCkpCi0gICAgICAgICAgICAgICAgaHRtbC5wdXNoKCI8ZGl2IGNsYXNz
PSdhY2VfbGluZV9ncm91cCc+IikKLQotICAgICAgICAgICAgdGhpcy4kcmVuZGVyTGluZShodG1s
LCByb3csIGZhbHNlLCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7Ci0KLSAg
ICAgICAgICAgIGlmICh0aGlzLiR1c2VMaW5lR3JvdXBzKCkpCi0gICAgICAgICAgICAgICAgaHRt
bC5wdXNoKCI8L2Rpdj4iKTsgLy8gZW5kIHRoZSBsaW5lIGdyb3VwCi0KLSAgICAgICAgICAgIHJv
dysrOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuZWxlbWVudCA9IGRvbS5zZXRJbm5lckh0bWwo
dGhpcy5lbGVtZW50LCBodG1sLmpvaW4oIiIpKTsKLSAgICB9OwotCi0gICAgdGhpcy4kdGV4dFRv
a2VuID0gewotICAgICAgICAidGV4dCI6IHRydWUsCi0gICAgICAgICJycGFyZW4iOiB0cnVlLAot
ICAgICAgICAibHBhcmVuIjogdHJ1ZQotICAgIH07Ci0KLSAgICB0aGlzLiRyZW5kZXJUb2tlbiA9
IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKSB7Ci0g
ICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgdmFyIHJlcGxhY2VSZWcgPSAvXHR8Jnw8
fCggKyl8KFtceDAwLVx4MWZceDgwLVx4YTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDBmXHUyMDI4
XHUyMDI5XHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGXSl8W1x1MTEwMC1cdTExNUZcdTExQTMtXHUx
MUE3XHUxMUZBLVx1MTFGRlx1MjMyOS1cdTIzMkFcdTJFODAtXHUyRTk5XHUyRTlCLVx1MkVGM1x1
MkYwMC1cdTJGRDVcdTJGRjAtXHUyRkZCXHUzMDAwLVx1MzAzRVx1MzA0MS1cdTMwOTZcdTMwOTkt
XHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxOTAtXHUzMUJBXHUzMUMwLVx1MzFF
M1x1MzFGMC1cdTMyMUVcdTMyMjAtXHUzMjQ3XHUzMjUwLVx1MzJGRVx1MzMwMC1cdTREQkZcdTRF
MDAtXHVBNDhDXHVBNDkwLVx1QTRDNlx1QTk2MC1cdUE5N0NcdUFDMDAtXHVEN0EzXHVEN0IwLVx1
RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQUZGXHVGRTEwLVx1RkUxOVx1RkUzMC1cdUZFNTJc
dUZFNTQtXHVGRTY2XHVGRTY4LVx1RkU2Qlx1RkYwMS1cdUZGNjBcdUZGRTAtXHVGRkU2XS9nOwot
ICAgICAgICB2YXIgcmVwbGFjZUZ1bmMgPSBmdW5jdGlvbihjLCBhLCBiLCB0YWJJZHgsIGlkeDQp
IHsKLSAgICAgICAgICAgIGlmIChhKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2hv
d0ludmlzaWJsZXMgPwotICAgICAgICAgICAgICAgICAgICAiPHNwYW4gY2xhc3M9J2FjZV9pbnZp
c2libGUnPiIgKyBsYW5nLnN0cmluZ1JlcGVhdChzZWxmLlNQQUNFX0NIQVIsIGMubGVuZ3RoKSAr
ICI8L3NwYW4+IiA6Ci0gICAgICAgICAgICAgICAgICAgIGxhbmcuc3RyaW5nUmVwZWF0KCJceGEw
IiwgYy5sZW5ndGgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICImIikgewotICAgICAg
ICAgICAgICAgIHJldHVybiAiJiMzODsiOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICI8
IikgewotICAgICAgICAgICAgICAgIHJldHVybiAiJiM2MDsiOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChjID09ICJcdCIpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGFiU2l6ZSA9IHNlbGYuc2Vz
c2lvbi5nZXRTY3JlZW5UYWJTaXplKHNjcmVlbkNvbHVtbiArIHRhYklkeCk7Ci0gICAgICAgICAg
ICAgICAgc2NyZWVuQ29sdW1uICs9IHRhYlNpemUgLSAxOwotICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLiR0YWJTdHJpbmdzW3RhYlNpemVdOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09
ICJcdTMwMDAiKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNsYXNzVG9Vc2UgPSBzZWxmLnNob3dJ
bnZpc2libGVzID8gImFjZV9jamsgYWNlX2ludmlzaWJsZSIgOiAiYWNlX2NqayI7Ci0gICAgICAg
ICAgICAgICAgdmFyIHNwYWNlID0gc2VsZi5zaG93SW52aXNpYmxlcyA/IHNlbGYuU1BBQ0VfQ0hB
UiA6ICIiOwotICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxOwotICAgICAgICAgICAg
ICAgIHJldHVybiAiPHNwYW4gY2xhc3M9JyIgKyBjbGFzc1RvVXNlICsgIicgc3R5bGU9J3dpZHRo
OiIgKwotICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuY2hhcmFjdGVyV2lkdGggKiAy
KSArCi0gICAgICAgICAgICAgICAgICAgICJweCc+IiArIHNwYWNlICsgIjwvc3Bhbj4iOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChiKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBj
bGFzcz0nYWNlX2ludmlzaWJsZSBhY2VfaW52YWxpZCc+IiArIHNlbGYuU1BBQ0VfQ0hBUiArICI8
L3NwYW4+IjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NyZWVuQ29s
dW1uICs9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0nYWNlX2Nqaycg
c3R5bGU9J3dpZHRoOiIgKwotICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuY2hhcmFj
dGVyV2lkdGggKiAyKSArCi0gICAgICAgICAgICAgICAgICAgICJweCc+IiArIGMgKyAiPC9zcGFu
PiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIG91dHB1dCA9IHZh
bHVlLnJlcGxhY2UocmVwbGFjZVJlZywgcmVwbGFjZUZ1bmMpOwotCi0gICAgICAgIGlmICghdGhp
cy4kdGV4dFRva2VuW3Rva2VuLnR5cGVdKSB7Ci0gICAgICAgICAgICB2YXIgY2xhc3NlcyA9ICJh
Y2VfIiArIHRva2VuLnR5cGUucmVwbGFjZSgvXC4vZywgIiBhY2VfIik7Ci0gICAgICAgICAgICB2
YXIgc3R5bGUgPSAiIjsKLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09ICJmb2xkIikKLSAg
ICAgICAgICAgICAgICBzdHlsZSA9ICIgc3R5bGU9J3dpZHRoOiIgKyAodG9rZW4udmFsdWUubGVu
Z3RoICogdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgpICsgInB4OycgIjsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIucHVzaCgiPHNwYW4gY2xhc3M9JyIsIGNsYXNzZXMsICInIiwgc3R5bGUs
ICI+Iiwgb3V0cHV0LCAiPC9zcGFuPiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKG91dHB1dCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHNjcmVlbkNvbHVtbiArIHZhbHVlLmxlbmd0aDsKLSAgICB9OwotCi0gICAgdGhpcy5y
ZW5kZXJJbmRlbnRHdWlkZSA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHZhbHVlKSB7Ci0gICAg
ICAgIHZhciBjb2xzID0gdmFsdWUuc2VhcmNoKHRoaXMuJGluZGVudEd1aWRlUmUpOwotICAgICAg
ICBpZiAoY29scyA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICBpZiAo
dmFsdWVbMF0gPT0gIiAiKSB7Ci0gICAgICAgICAgICBjb2xzIC09IGNvbHMgJSB0aGlzLnRhYlNp
emU7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5zdHJpbmdSZXBlYXQodGhp
cy4kdGFiU3RyaW5nc1siICJdLCBjb2xzL3RoaXMudGFiU2l6ZSkpOwotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLnN1YnN0cihjb2xzKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVswXSA9PSAi
XHQiKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2gobGFuZy5zdHJpbmdSZXBlYXQo
dGhpcy4kdGFiU3RyaW5nc1siXHQiXSwgY29scykpOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LnN1YnN0cihjb2xzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfTsK
LQotICAgIHRoaXMuJHJlbmRlcldyYXBwZWRMaW5lID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwg
dG9rZW5zLCBzcGxpdHMsIG9ubHlDb250ZW50cykgewotICAgICAgICB2YXIgY2hhcnMgPSAwOwot
ICAgICAgICB2YXIgc3BsaXQgPSAwOwotICAgICAgICB2YXIgc3BsaXRDaGFycyA9IHNwbGl0c1sw
XTsKLSAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRv
a2Vuc1tpXTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOwotICAgICAgICAg
ICAgaWYgKGkgPT0gMCAmJiB0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpIHsKLSAgICAgICAgICAg
ICAgICBjaGFycyA9IHZhbHVlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMu
cmVuZGVySW5kZW50R3VpZGUoc3RyaW5nQnVpbGRlciwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmICghdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIGNoYXJzIC09IHZhbHVlLmxlbmd0aDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGNoYXJzICsgdmFsdWUubGVuZ3RoIDwgc3BsaXRDaGFycykgewotICAgICAgICAgICAgICAg
IHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNv
bHVtbiwgdG9rZW4sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBjaGFycyArPSB2YWx1ZS5sZW5n
dGg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdoaWxlIChjaGFycyAr
IHZhbHVlLmxlbmd0aCA+PSBzcGxpdENoYXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmVl
bkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKAotICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlciwgc2NyZWVuQ29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4s
IHZhbHVlLnN1YnN0cmluZygwLCBzcGxpdENoYXJzIC0gY2hhcnMpCi0gICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKHNwbGl0
Q2hhcnMgLSBjaGFycyk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJzID0gc3BsaXRDaGFyczsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoIW9ubHlDb250ZW50cykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKCI8L2Rpdj4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdhY2VfbGluZScgc3R5bGU9J2hlaWdodDoiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWlnaHQsICJweCc+Igot
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHNwbGl0ICsrOwotICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1
bW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXJzID0gc3BsaXRzW3NwbGl0XSB8
fCBOdW1iZXIuTUFYX1ZBTFVFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAodmFsdWUubGVuZ3RoICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhcnMgKz0gdmFs
dWUubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5k
ZXJUb2tlbigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIsIHNjcmVlbkNv
bHVtbiwgdG9rZW4sIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRoaXMuJHJlbmRl
clNpbXBsZUxpbmUgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCB0b2tlbnMpIHsKLSAgICAgICAg
dmFyIHNjcmVlbkNvbHVtbiA9IDA7Ci0gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1swXTsKLSAg
ICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7Ci0gICAgICAgIGlmICh0aGlzLmRpc3BsYXlJ
bmRlbnRHdWlkZXMpCi0gICAgICAgICAgICB2YWx1ZSA9IHRoaXMucmVuZGVySW5kZW50R3VpZGUo
c3RyaW5nQnVpbGRlciwgdmFsdWUpOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBz
Y3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1
bW4sIHRva2VuLCB2YWx1ZSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG9rZW5zLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKLSAgICAgICAgICAg
IHZhbHVlID0gdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRy
ZW5kZXJUb2tlbihzdHJpbmdCdWlsZGVyLCBzY3JlZW5Db2x1bW4sIHRva2VuLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMuJHJlbmRlckxpbmUgPSBmdW5jdGlvbihzdHJpbmdC
dWlsZGVyLCByb3csIG9ubHlDb250ZW50cywgZm9sZExpbmUpIHsKLSAgICAgICAgaWYgKCFmb2xk
TGluZSAmJiBmb2xkTGluZSAhPSBmYWxzZSkKLSAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5z
ZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7Ci0KLSAgICAgICAgaWYgKGZvbGRMaW5lKQotICAgICAg
ICAgICAgdmFyIHRva2VucyA9IHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zKHJvdywgZm9sZExpbmUp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5zZXNzaW9uLmdl
dFRva2Vucyhyb3cpOwotCi0KLSAgICAgICAgaWYgKCFvbmx5Q29udGVudHMpIHsKLSAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKLSAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nYWNl
X2xpbmUnIHN0eWxlPSdoZWlnaHQ6IiwgdGhpcy5jb25maWcubGluZUhlaWdodCwgInB4Jz4iCi0g
ICAgICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2Vucy5sZW5ndGgpIHsK
LSAgICAgICAgICAgIHZhciBzcGxpdHMgPSB0aGlzLnNlc3Npb24uZ2V0Um93U3BsaXREYXRhKHJv
dyk7Ci0gICAgICAgICAgICBpZiAoc3BsaXRzICYmIHNwbGl0cy5sZW5ndGgpCi0gICAgICAgICAg
ICAgICAgdGhpcy4kcmVuZGVyV3JhcHBlZExpbmUoc3RyaW5nQnVpbGRlciwgdG9rZW5zLCBzcGxp
dHMsIG9ubHlDb250ZW50cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhp
cy4kcmVuZGVyU2ltcGxlTGluZShzdHJpbmdCdWlsZGVyLCB0b2tlbnMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsKLSAgICAgICAgICAgIGlmIChmb2xk
TGluZSkKLSAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93Ci0KLSAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIucHVzaCgKLSAgICAgICAgICAgICAgICAiPHNwYW4gY2xhc3M9J2Fj
ZV9pbnZpc2libGUnPiIsCi0gICAgICAgICAgICAgICAgcm93ID09IHRoaXMuc2Vzc2lvbi5nZXRM
ZW5ndGgoKSAtIDEgPyB0aGlzLkVPRl9DSEFSIDogdGhpcy5FT0xfQ0hBUiwKLSAgICAgICAgICAg
ICAgICAiPC9zcGFuPiIKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFv
bmx5Q29udGVudHMpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goIjwvZGl2PiIpOwot
ICAgIH07Ci0KLSAgICB0aGlzLiRnZXRGb2xkTGluZVRva2VucyA9IGZ1bmN0aW9uKHJvdywgZm9s
ZExpbmUpIHsKLSAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247Ci0gICAgICAgIHZh
ciByZW5kZXJUb2tlbnMgPSBbXTsKLQotICAgICAgICBmdW5jdGlvbiBhZGRUb2tlbnModG9rZW5z
LCBmcm9tLCB0bykgewotICAgICAgICAgICAgdmFyIGlkeCA9IDAsIGNvbCA9IDA7Ci0gICAgICAg
ICAgICB3aGlsZSAoKGNvbCArIHRva2Vuc1tpZHhdLnZhbHVlLmxlbmd0aCkgPCBmcm9tKSB7Ci0g
ICAgICAgICAgICAgICAgY29sICs9IHRva2Vuc1tpZHhdLnZhbHVlLmxlbmd0aDsKLSAgICAgICAg
ICAgICAgICBpZHgrKzsKLQotICAgICAgICAgICAgICAgIGlmIChpZHggPT0gdG9rZW5zLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGNvbCAhPSBmcm9tKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW5z
W2lkeF0udmFsdWUuc3Vic3RyaW5nKGZyb20gLSBjb2wpOwotICAgICAgICAgICAgICAgIGlmICh2
YWx1ZS5sZW5ndGggPiAodG8gLSBmcm9tKSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZS5zdWJzdHJpbmcoMCwgdG8gLSBmcm9tKTsKLQotICAgICAgICAgICAgICAgIHJlbmRlclRv
a2Vucy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogdG9rZW5zW2lkeF0udHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCi0gICAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgICBjb2wgPSBmcm9tICsgdmFsdWUubGVuZ3RoOwotICAgICAgICAgICAg
ICAgIGlkeCArPSAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAoY29sIDwg
dG8gJiYgaWR4IDwgdG9rZW5zLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9
IHRva2Vuc1tpZHhdLnZhbHVlOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggKyBj
b2wgPiB0bykgewotICAgICAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGNvbCkKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJlbmRlclRva2Vucy5wdXNoKHRva2Vuc1tpZHhdKTsKLSAgICAgICAgICAgICAgICBjb2wg
Kz0gdmFsdWUubGVuZ3RoOwotICAgICAgICAgICAgICAgIGlkeCArPSAxOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJv
dyk7Ci0gICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJvdywgY29s
dW1uLCBsYXN0Q29sdW1uLCBpc05ld1JvdykgewotICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVy
ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh7Ci0gICAgICAg
ICAgICAgICAgICAgIHR5cGU6ICJmb2xkIiwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBs
YWNlaG9sZGVyCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmIChpc05ld1JvdykKLSAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0g
c2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKLQotICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVu
Z3RoKQotICAgICAgICAgICAgICAgICAgICBhZGRUb2tlbnModG9rZW5zLCBsYXN0Q29sdW1uLCBj
b2x1bW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9LCBmb2xkTGluZS5lbmQucm93LCB0aGlz
LnNlc3Npb24uZ2V0TGluZShmb2xkTGluZS5lbmQucm93KS5sZW5ndGgpOwotCi0gICAgICAgIHJl
dHVybiByZW5kZXJUb2tlbnM7Ci0gICAgfTsKLQotICAgIHRoaXMuJHVzZUxpbmVHcm91cHMgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgp
OwotICAgIH07Ci0KLSAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgY2xl
YXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcik7Ci0gICAgICAgIGlmICh0aGlz
LiRtZWFzdXJlTm9kZSkKLSAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQodGhpcy4kbWVhc3VyZU5vZGUpOwotICAgICAgICBkZWxldGUgdGhpcy4kbWVh
c3VyZU5vZGU7Ci0gICAgfTsKLQotfSkuY2FsbChUZXh0LnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMu
VGV4dCA9IFRleHQ7Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbGF5ZXIvY3Vyc29yJywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbSddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgZG9tID0gcmVxdWlyZSgiLi4vbGli
L2RvbSIpOwotCi12YXIgQ3Vyc29yID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKLSAgICB0aGlzLmVs
ZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNz
TmFtZSA9ICJhY2VfbGF5ZXIgYWNlX2N1cnNvci1sYXllciI7Ci0gICAgcGFyZW50RWwuYXBwZW5k
Q2hpbGQodGhpcy5lbGVtZW50KTsKLQotICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7Ci0gICAg
dGhpcy5pc0JsaW5raW5nID0gdHJ1ZTsKLSAgICB0aGlzLmJsaW5rSW50ZXJ2YWwgPSAxMDAwOwot
ICAgIHRoaXMuc21vb3RoQmxpbmtpbmcgPSBmYWxzZTsKLQotICAgIHRoaXMuY3Vyc29ycyA9IFtd
OwotICAgIHRoaXMuY3Vyc29yID0gdGhpcy5hZGRDdXJzb3IoKTsKLSAgICBkb20uYWRkQ3NzQ2xh
c3ModGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7Ci19OwotCi0oZnVuY3Rpb24o
KSB7Ci0KLSAgICB0aGlzLiRwYWRkaW5nID0gMDsKLSAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5j
dGlvbihwYWRkaW5nKSB7Ci0gICAgICAgIHRoaXMuJHBhZGRpbmcgPSBwYWRkaW5nOwotICAgIH07
Ci0KLSAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7Ci0gICAgICAgIHRo
aXMuc2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgfTsKLQotICAgIHRoaXMuc2V0QmxpbmtpbmcgPSBm
dW5jdGlvbihibGlua2luZykgewotICAgICAgICBpZiAoYmxpbmtpbmcgIT0gdGhpcy5pc0JsaW5r
aW5nKXsKLSAgICAgICAgICAgIHRoaXMuaXNCbGlua2luZyA9IGJsaW5raW5nOwotICAgICAgICAg
ICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0aGlzLnNl
dEJsaW5rSW50ZXJ2YWwgPSBmdW5jdGlvbihibGlua0ludGVydmFsKSB7Ci0gICAgICAgIGlmIChi
bGlua0ludGVydmFsICE9IHRoaXMuYmxpbmtJbnRlcnZhbCl7Ci0gICAgICAgICAgICB0aGlzLmJs
aW5rSW50ZXJ2YWwgPSBibGlua0ludGVydmFsOwotICAgICAgICAgICAgdGhpcy5yZXN0YXJ0VGlt
ZXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0aGlzLnNldFNtb290aEJsaW5raW5nID0g
ZnVuY3Rpb24oc21vb3RoQmxpbmtpbmcpIHsKLSAgICAgICAgaWYgKHNtb290aEJsaW5raW5nICE9
IHRoaXMuc21vb3RoQmxpbmtpbmcpIHsKLSAgICAgICAgICAgIHRoaXMuc21vb3RoQmxpbmtpbmcg
PSBzbW9vdGhCbGlua2luZzsKLSAgICAgICAgICAgIGlmIChzbW9vdGhCbGlua2luZykKLSAgICAg
ICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX3Ntb290aC1ibGlu
a2luZyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3ND
bGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7Ci0gICAgICAgICAgICB0
aGlzLnJlc3RhcnRUaW1lcigpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRoaXMuYWRkQ3Vy
c29yID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBlbCA9IGRvbS5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgZWwuY2xhc3NOYW1lID0gImFjZV9jdXJzb3IiOwotICAgICAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpOwotICAgICAgICB0aGlzLmN1cnNvcnMucHVzaChlbCk7
Ci0gICAgICAgIHJldHVybiBlbDsKLSAgICB9OwotCi0gICAgdGhpcy5yZW1vdmVDdXJzb3IgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuY3Vyc29ycy5sZW5ndGggPiAxKSB7Ci0gICAg
ICAgICAgICB2YXIgZWwgPSB0aGlzLmN1cnNvcnMucG9wKCk7Ci0gICAgICAgICAgICBlbC5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKLSAgICAgICAgICAgIHJldHVybiBlbDsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0aGlzLmhpZGVDdXJzb3IgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5pc1Zpc2libGUgPSBmYWxzZTsKLSAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxl
bWVudCwgImFjZV9oaWRkZW4tY3Vyc29ycyIpOwotICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigp
OwotICAgIH07Ci0KLSAgICB0aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5pc1Zpc2libGUgPSB0cnVlOwotICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5l
bGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7Ci0gICAgICAgIHRoaXMucmVzdGFydFRpbWVy
KCk7Ci0gICAgfTsKLQotICAgIHRoaXMucmVzdGFydFRpbWVyID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTsKLSAgICAgICAgY2xlYXJUaW1lb3V0
KHRoaXMudGltZW91dElkKTsKLSAgICAgICAgaWYgKHRoaXMuc21vb3RoQmxpbmtpbmcpCi0gICAg
ICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX3Ntb290aC1ibGlu
a2luZyIpOwotICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jdXJzb3JzLmxlbmd0aDsgaS0tOyAp
Ci0gICAgICAgICAgICB0aGlzLmN1cnNvcnNbaV0uc3R5bGUub3BhY2l0eSA9ICIiOwotCi0gICAg
ICAgIGlmICghdGhpcy5pc0JsaW5raW5nIHx8ICF0aGlzLmJsaW5rSW50ZXJ2YWwgfHwgIXRoaXMu
aXNWaXNpYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLnNtb290
aEJsaW5raW5nKQotICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewotICAgICAgICAg
ICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5n
Iik7Ci0gICAgICAgICAgICB9LmJpbmQodGhpcykpOwotCi0gICAgICAgIHZhciBibGluayA9IGZ1
bmN0aW9uKCl7Ci0gICAgICAgICAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY3Vyc29ycy5sZW5ndGg7
IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yc1tpXS5zdHlsZS5vcGFj
aXR5ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LmJpbmQodGhpcyksIDAu
NiAqIHRoaXMuYmxpbmtJbnRlcnZhbCk7Ci0gICAgICAgIH0uYmluZCh0aGlzKTsKLQotICAgICAg
ICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSB0aGlzLmN1cnNvcnMubGVuZ3RoOyBpLS07ICkgewotICAgICAgICAgICAg
ICAgIHRoaXMuY3Vyc29yc1tpXS5zdHlsZS5vcGFjaXR5ID0gIiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBibGluaygpOwotICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuYmxpbmtJbnRl
cnZhbCk7Ci0KLSAgICAgICAgYmxpbmsoKTsKLSAgICB9OwotCi0gICAgdGhpcy5nZXRQaXhlbFBv
c2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24sIG9uU2NyZWVuKSB7Ci0gICAgICAgIGlmICghdGhp
cy5jb25maWcgfHwgIXRoaXMuc2Vzc2lvbikKLSAgICAgICAgICAgIHJldHVybiB7bGVmdCA6IDAs
IHRvcCA6IDB9OwotCi0gICAgICAgIGlmICghcG9zaXRpb24pCi0gICAgICAgICAgICBwb3NpdGlv
biA9IHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7Ci0gICAgICAgIHZhciBwb3Mg
PSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAg
ICAgdmFyIGN1cnNvckxlZnQgPSB0aGlzLiRwYWRkaW5nICsgcG9zLmNvbHVtbiAqIHRoaXMuY29u
ZmlnLmNoYXJhY3RlcldpZHRoOwotICAgICAgICB2YXIgY3Vyc29yVG9wID0gKHBvcy5yb3cgLSAo
b25TY3JlZW4gPyB0aGlzLmNvbmZpZy5maXJzdFJvd1NjcmVlbiA6IDApKSAqCi0gICAgICAgICAg
ICB0aGlzLmNvbmZpZy5saW5lSGVpZ2h0OwotCi0gICAgICAgIHJldHVybiB7bGVmdCA6IGN1cnNv
ckxlZnQsIHRvcCA6IGN1cnNvclRvcH07Ci0gICAgfTsKLQotICAgIHRoaXMudXBkYXRlID0gZnVu
Y3Rpb24oY29uZmlnKSB7Ci0gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOwotCi0gICAgICAg
IHZhciBzZWxlY3Rpb25zID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzOwotICAgICAg
ICB2YXIgaSA9IDAsIGN1cnNvckluZGV4ID0gMDsKLQotICAgICAgICBpZiAoc2VsZWN0aW9ucyA9
PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbnMubGVuZ3RoID09PSAwKXsKLSAgICAgICAgICAgIHNl
bGVjdGlvbnMgPSBbe2N1cnNvcjogbnVsbH1dOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2
YXIgaSA9IDAsIG4gPSBzZWxlY3Rpb25zLmxlbmd0aDsgaSA8IG47IGkrKykgewotICAgICAgICAg
ICAgdmFyIHBpeGVsUG9zID0gdGhpcy5nZXRQaXhlbFBvc2l0aW9uKHNlbGVjdGlvbnNbaV0uY3Vy
c29yLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICgocGl4ZWxQb3MudG9wID4gY29uZmlnLmhlaWdo
dCArIGNvbmZpZy5vZmZzZXQgfHwKLSAgICAgICAgICAgICAgICAgcGl4ZWxQb3MudG9wIDwgLWNv
bmZpZy5vZmZzZXQpICYmIGkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBzdHlsZSA9ICh0aGlzLmN1cnNvcnNbY3Vyc29y
SW5kZXgrK10gfHwgdGhpcy5hZGRDdXJzb3IoKSkuc3R5bGU7Ci0KLSAgICAgICAgICAgIHN0eWxl
LmxlZnQgPSBwaXhlbFBvcy5sZWZ0ICsgInB4IjsKLSAgICAgICAgICAgIHN0eWxlLnRvcCA9IHBp
eGVsUG9zLnRvcCArICJweCI7Ci0gICAgICAgICAgICBzdHlsZS53aWR0aCA9IGNvbmZpZy5jaGFy
YWN0ZXJXaWR0aCArICJweCI7Ci0gICAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBjb25maWcubGlu
ZUhlaWdodCArICJweCI7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHRoaXMuY3Vyc29ycy5s
ZW5ndGggPiBjdXJzb3JJbmRleCkKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ3Vyc29yKCk7Ci0K
LSAgICAgICAgdmFyIG92ZXJ3cml0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKTsKLSAg
ICAgICAgdGhpcy4kc2V0T3ZlcndyaXRlKG92ZXJ3cml0ZSk7Ci0gICAgICAgIHRoaXMuJHBpeGVs
UG9zID0gcGl4ZWxQb3M7Ci0gICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7Ci0gICAgfTsKLQot
ICAgIHRoaXMuJHNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgewotICAgICAgICBp
ZiAob3ZlcndyaXRlICE9IHRoaXMub3ZlcndyaXRlKSB7Ci0gICAgICAgICAgICB0aGlzLm92ZXJ3
cml0ZSA9IG92ZXJ3cml0ZTsKLSAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpCi0gICAgICAgICAg
ICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9vdmVyd3JpdGUtY3Vyc29y
cyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFz
cyh0aGlzLmVsZW1lbnQsICJhY2Vfb3ZlcndyaXRlLWN1cnNvcnMiKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgY2xlYXJJbnRl
cnZhbCh0aGlzLmludGVydmFsSWQpOwotICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0
SWQpOwotICAgIH07Ci0KLX0pLmNhbGwoQ3Vyc29yLnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMuQ3Vy
c29yID0gQ3Vyc29yOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL3Njcm9sbGJhcicsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9kb20n
LCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29v
cCIpOwotdmFyIGRvbSA9IHJlcXVpcmUoIi4vbGliL2RvbSIpOwotdmFyIGV2ZW50ID0gcmVxdWly
ZSgiLi9saWIvZXZlbnQiKTsKLXZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVu
dF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwotdmFyIFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVu
dCkgewotICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxiYXIiOwotCi0gICAgdGhpcy5pbm5l
ciA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmlubmVyLmNsYXNzTmFtZSA9
ICJhY2Vfc2Nyb2xsYmFyLWlubmVyIjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5pbm5lcik7Ci0KLSAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKLSAgICB0
aGlzLndpZHRoID0gZG9tLnNjcm9sbGJhcldpZHRoKHBhcmVudC5vd25lckRvY3VtZW50KTsKLSAg
ICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSAodGhpcy53aWR0aCB8fCAxNSkgKyA1ICsgInB4
IjsKLQotICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgInNjcm9sbCIsIHRoaXMu
b25TY3JvbGwuYmluZCh0aGlzKSk7Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0gICAgb29wLmltcGxl
bWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwotICAgIHRoaXMub25TY3JvbGwgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKCF0aGlzLnNraXBFdmVudCkgewotICAgICAgICAgICAgdGhpcy5zY3Jv
bGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwotICAgICAgICAgICAgdGhpcy5fZW1pdCgi
c2Nyb2xsIiwge2RhdGE6IHRoaXMuc2Nyb2xsVG9wfSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy5za2lwRXZlbnQgPSBmYWxzZTsKLSAgICB9OwotICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMud2lkdGg7Ci0gICAgfTsKLSAgICB0aGlzLnNldEhl
aWdodCA9IGZ1bmN0aW9uKGhlaWdodCkgewotICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVp
Z2h0ID0gaGVpZ2h0ICsgInB4IjsKLSAgICB9OwotICAgIHRoaXMuc2V0SW5uZXJIZWlnaHQgPSBm
dW5jdGlvbihoZWlnaHQpIHsKLSAgICAgICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPSBoZWln
aHQgKyAicHgiOwotICAgIH07Ci0gICAgdGhpcy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3Jv
bGxUb3ApIHsKLSAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wICE9IHNjcm9sbFRvcCkgewotICAg
ICAgICAgICAgdGhpcy5za2lwRXZlbnQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5zY3JvbGxU
b3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOwotICAgICAgICB9Ci0gICAg
fTsKLQotfSkuY2FsbChTY3JvbGxCYXIucHJvdG90eXBlKTsKLQotZXhwb3J0cy5TY3JvbGxCYXIg
PSBTY3JvbGxCYXI7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL3JlbmRlcmxvb3AnLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIv
ZXZlbnQiKTsKLQotCi12YXIgUmVuZGVyTG9vcCA9IGZ1bmN0aW9uKG9uUmVuZGVyLCB3aW4pIHsK
LSAgICB0aGlzLm9uUmVuZGVyID0gb25SZW5kZXI7Ci0gICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7
Ci0gICAgdGhpcy5jaGFuZ2VzID0gMDsKLSAgICB0aGlzLndpbmRvdyA9IHdpbiB8fCB3aW5kb3c7
Ci19OwotCi0oZnVuY3Rpb24oKSB7Ci0KLQotICAgIHRoaXMuc2NoZWR1bGUgPSBmdW5jdGlvbihj
aGFuZ2UpIHsKLSAgICAgICAgdGhpcy5jaGFuZ2VzID0gdGhpcy5jaGFuZ2VzIHwgY2hhbmdlOwot
ICAgICAgICBpZiAoIXRoaXMucGVuZGluZykgewotICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICBldmVudC5u
ZXh0RnJhbWUoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgX3NlbGYucGVuZGluZyA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VzOwotICAgICAgICAgICAgICAgIHdoaWxl
IChjaGFuZ2VzID0gX3NlbGYuY2hhbmdlcykgewotICAgICAgICAgICAgICAgICAgICBfc2VsZi5j
aGFuZ2VzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgX3NlbGYub25SZW5kZXIoY2hhbmdlcyk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgdGhpcy53aW5kb3cpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotfSkuY2FsbChSZW5kZXJMb29wLnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMu
UmVuZGVyTG9vcCA9IFJlbmRlckxvb3A7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL211bHRpX3Nl
bGVjdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlX2xpc3Qn
LCAnYWNlL3JhbmdlJywgJ2FjZS9zZWxlY3Rpb24nLCAnYWNlL21vdXNlL211bHRpX3NlbGVjdF9o
YW5kbGVyJywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9jb21tYW5kcy9t
dWx0aV9zZWxlY3RfY29tbWFuZHMnLCAnYWNlL3NlYXJjaCcsICdhY2UvZWRpdF9zZXNzaW9uJywg
J2FjZS9lZGl0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLXZh
ciBSYW5nZUxpc3QgPSByZXF1aXJlKCIuL3JhbmdlX2xpc3QiKS5SYW5nZUxpc3Q7Ci12YXIgUmFu
Z2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Ci12YXIgU2VsZWN0aW9uID0gcmVxdWlyZSgi
Li9zZWxlY3Rpb24iKS5TZWxlY3Rpb247Ci12YXIgb25Nb3VzZURvd24gPSByZXF1aXJlKCIuL21v
dXNlL211bHRpX3NlbGVjdF9oYW5kbGVyIikub25Nb3VzZURvd247Ci12YXIgZXZlbnQgPSByZXF1
aXJlKCIuL2xpYi9ldmVudCIpOwotdmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7Ci12
YXIgY29tbWFuZHMgPSByZXF1aXJlKCIuL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kcyIp
OwotZXhwb3J0cy5jb21tYW5kcyA9IGNvbW1hbmRzLmRlZmF1bHRDb21tYW5kcy5jb25jYXQoY29t
bWFuZHMubXVsdGlTZWxlY3RDb21tYW5kcyk7Ci12YXIgU2VhcmNoID0gcmVxdWlyZSgiLi9zZWFy
Y2giKS5TZWFyY2g7Ci12YXIgc2VhcmNoID0gbmV3IFNlYXJjaCgpOwotCi1mdW5jdGlvbiBmaW5k
KHNlc3Npb24sIG5lZWRsZSwgZGlyKSB7Ci0gICAgc2VhcmNoLiRvcHRpb25zLndyYXAgPSB0cnVl
OwotICAgIHNlYXJjaC4kb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGU7Ci0gICAgc2VhcmNoLiRvcHRp
b25zLmJhY2t3YXJkcyA9IGRpciA9PSAtMTsKLSAgICByZXR1cm4gc2VhcmNoLmZpbmQoc2Vzc2lv
bik7Ci19Ci12YXIgRWRpdFNlc3Npb24gPSByZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRT
ZXNzaW9uOwotKGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZ2V0U2VsZWN0aW9uTWFya2VycyA9IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kc2VsZWN0aW9uTWFya2VyczsKLSAgICB9
OwotfSkuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOwotKGZ1bmN0aW9uKCkgewotICAgIHRo
aXMucmFuZ2VzID0gbnVsbDsKLSAgICB0aGlzLnJhbmdlTGlzdCA9IG51bGw7Ci0gICAgdGhpcy5h
ZGRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlLCAkYmxvY2tDaGFuZ2VFdmVudHMpIHsKLSAgICAgICAg
aWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXRoaXMuaW5N
dWx0aVNlbGVjdE1vZGUgJiYgdGhpcy5yYW5nZUNvdW50ID09IDApIHsKLSAgICAgICAgICAgIHZh
ciBvbGRSYW5nZSA9IHRoaXMudG9PcmllbnRlZFJhbmdlKCk7Ci0gICAgICAgICAgICBpZiAocmFu
Z2UuaW50ZXJzZWN0cyhvbGRSYW5nZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICRibG9ja0No
YW5nZUV2ZW50cyB8fCB0aGlzLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTsKLQotICAgICAgICAg
ICAgdGhpcy5yYW5nZUxpc3QuYWRkKG9sZFJhbmdlKTsKLSAgICAgICAgICAgIHRoaXMuJG9uQWRk
UmFuZ2Uob2xkUmFuZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFyYW5nZS5jdXJzb3Ip
Ci0gICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7Ci0KLSAgICAgICAgdmFyIHJl
bW92ZWQgPSB0aGlzLnJhbmdlTGlzdC5hZGQocmFuZ2UpOwotCi0gICAgICAgIHRoaXMuJG9uQWRk
UmFuZ2UocmFuZ2UpOwotCi0gICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkKLSAgICAgICAgICAg
IHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7Ci0KLSAgICAgICAgaWYgKHRoaXMucmFuZ2VD
b3VudCA+IDEgJiYgIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKLSAgICAgICAgICAgIHRoaXMu
X2VtaXQoIm11bHRpU2VsZWN0Iik7Ci0gICAgICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RNb2Rl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IGZhbHNlOwot
ICAgICAgICAgICAgdGhpcy5yYW5nZUxpc3QuYXR0YWNoKHRoaXMuc2Vzc2lvbik7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gJGJsb2NrQ2hhbmdlRXZlbnRzIHx8IHRoaXMuZnJvbU9yaWVu
dGVkUmFuZ2UocmFuZ2UpOwotICAgIH07Ci0KLSAgICB0aGlzLnRvU2luZ2xlUmFuZ2UgPSBmdW5j
dGlvbihyYW5nZSkgewotICAgICAgICByYW5nZSA9IHJhbmdlIHx8IHRoaXMucmFuZ2VzWzBdOwot
ICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LnJlbW92ZUFsbCgpOwotICAgICAg
ICBpZiAocmVtb3ZlZC5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJl
bW92ZWQpOwotCi0gICAgICAgIHJhbmdlICYmIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2Up
OwotICAgIH07Ci0gICAgdGhpcy5zdWJzdHJhY3RQb2ludCA9IGZ1bmN0aW9uKHBvcykgewotICAg
ICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LnN1YnN0cmFjdFBvaW50KHBvcyk7Ci0g
ICAgICAgIGlmIChyZW1vdmVkKSB7Ci0gICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJl
bW92ZWQpOwotICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWRbMF07Ci0gICAgICAgIH0KLSAgICB9
OwotICAgIHRoaXMubWVyZ2VPdmVybGFwcGluZ1JhbmdlcyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0Lm1lcmdlKCk7Ci0gICAgICAgIGlmIChyZW1v
dmVkLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7Ci0g
ICAgICAgIGVsc2UgaWYodGhpcy5yYW5nZXNbMF0pCi0gICAgICAgICAgICB0aGlzLmZyb21Pcmll
bnRlZFJhbmdlKHRoaXMucmFuZ2VzWzBdKTsKLSAgICB9OwotCi0gICAgdGhpcy4kb25BZGRSYW5n
ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IHRoaXMucmFu
Z2VMaXN0LnJhbmdlcy5sZW5ndGg7Ci0gICAgICAgIHRoaXMucmFuZ2VzLnVuc2hpZnQocmFuZ2Up
OwotICAgICAgICB0aGlzLl9lbWl0KCJhZGRSYW5nZSIsIHtyYW5nZTogcmFuZ2V9KTsKLSAgICB9
OwotCi0gICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKHJlbW92ZWQpIHsKLSAgICAg
ICAgdGhpcy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsKLSAgICAg
ICAgaWYgKHRoaXMucmFuZ2VDb3VudCA9PSAxICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsK
LSAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXMucG9wKCk7
Ci0gICAgICAgICAgICByZW1vdmVkLnB1c2gobGFzdFJhbmdlKTsKLSAgICAgICAgICAgIHRoaXMu
cmFuZ2VDb3VudCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gcmVtb3Zl
ZC5sZW5ndGg7IGktLTsgKSB7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJhbmdlcy5p
bmRleE9mKHJlbW92ZWRbaV0pOwotICAgICAgICAgICAgdGhpcy5yYW5nZXMuc3BsaWNlKGluZGV4
LCAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2VtaXQoInJlbW92ZVJhbmdlIiwge3Jh
bmdlczogcmVtb3ZlZH0pOwotCi0gICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPT0gMCAmJiB0
aGlzLmluTXVsdGlTZWxlY3RNb2RlKSB7Ci0gICAgICAgICAgICB0aGlzLmluTXVsdGlTZWxlY3RN
b2RlID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0KCJzaW5nbGVTZWxlY3QiKTsKLSAg
ICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IHRydWU7Ci0gICAgICAgICAgICB0
aGlzLnJhbmdlTGlzdC5kZXRhY2godGhpcy5zZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGxhc3RSYW5nZSA9IGxhc3RSYW5nZSB8fCB0aGlzLnJhbmdlc1swXTsKLSAgICAgICAgaWYgKGxh
c3RSYW5nZSAmJiAhbGFzdFJhbmdlLmlzRXF1YWwodGhpcy5nZXRSYW5nZSgpKSkKLSAgICAgICAg
ICAgIHRoaXMuZnJvbU9yaWVudGVkUmFuZ2UobGFzdFJhbmdlKTsKLSAgICB9OwotICAgIHRoaXMu
JGluaXRSYW5nZUxpc3QgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMucmFuZ2VMaXN0
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMucmFuZ2VMaXN0ID0gbmV3IFJh
bmdlTGlzdCgpOwotICAgICAgICB0aGlzLnJhbmdlcyA9IFtdOwotICAgICAgICB0aGlzLnJhbmdl
Q291bnQgPSAwOwotICAgIH07Ci0gICAgdGhpcy5nZXRBbGxSYW5nZXMgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5jb25jYXQoKTsKLSAgICB9Owot
Ci0gICAgdGhpcy5zcGxpdEludG9MaW5lcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKHRo
aXMucmFuZ2VDb3VudCA+IDEpIHsKLSAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdl
TGlzdC5yYW5nZXM7Ci0gICAgICAgICAgICB2YXIgbGFzdFJhbmdlID0gcmFuZ2VzW3Jhbmdlcy5s
ZW5ndGggLSAxXTsKLSAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFu
Z2VzWzBdLnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTsKLQotICAgICAgICAgICAgdGhpcy50b1Npbmds
ZVJhbmdlKCk7Ci0gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBsYXN0
UmFuZ2UuY3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7Ci0gICAgICAgICAgICB2YXIgaXNC
YWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7Ci0gICAgICAgICAgICB2YXIgc3RhcnRSb3cg
PSByYW5nZS5zdGFydC5yb3c7Ci0gICAgICAgICAgICB2YXIgZW5kUm93ID0gcmFuZ2UuZW5kLnJv
dzsKLSAgICAgICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaXNCYWNrd2FyZHMpCi0gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdl
LmVuZCwgZW5kID0gcmFuZ2Uuc3RhcnQ7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICB2YXIgc3RhcnQgPSByYW5nZS5zdGFydCwgZW5kID0gcmFuZ2UuZW5kOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UoUmFuZ2UuZnJvbVBv
aW50cyhlbmQsIGVuZCkpOwotICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UoUmFuZ2UuZnJv
bVBvaW50cyhzdGFydCwgc3RhcnQpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZhciByZWN0U2VsID0gW107Ci0gICAgICAgICAgICB2YXIg
ciA9IHRoaXMuZ2V0TGluZVJhbmdlKHN0YXJ0Um93LCB0cnVlKTsKLSAgICAgICAgICAgIHIuc3Rh
cnQuY29sdW1uID0gcmFuZ2Uuc3RhcnQuY29sdW1uOwotICAgICAgICAgICAgcmVjdFNlbC5wdXNo
KHIpOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgKyAxOyBpIDwgZW5kUm93
OyBpKyspCi0gICAgICAgICAgICAgICAgcmVjdFNlbC5wdXNoKHRoaXMuZ2V0TGluZVJhbmdlKGks
IHRydWUpKTsKLQotICAgICAgICAgICAgciA9IHRoaXMuZ2V0TGluZVJhbmdlKGVuZFJvdywgdHJ1
ZSk7Ci0gICAgICAgICAgICByLmVuZC5jb2x1bW4gPSByYW5nZS5lbmQuY29sdW1uOwotICAgICAg
ICAgICAgcmVjdFNlbC5wdXNoKHIpOwotCi0gICAgICAgICAgICByZWN0U2VsLmZvckVhY2godGhp
cy5hZGRSYW5nZSwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMudG9nZ2xlQmxv
Y2tTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQg
PiAxKSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzOwot
ICAgICAgICAgICAgdmFyIGxhc3RSYW5nZSA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV07Ci0g
ICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHJhbmdlc1swXS5zdGFydCwg
bGFzdFJhbmdlLmVuZCk7Ci0KLSAgICAgICAgICAgIHRoaXMudG9TaW5nbGVSYW5nZSgpOwotICAg
ICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgbGFzdFJhbmdlLmN1cnNvciA9
PSBsYXN0UmFuZ2Uuc3RhcnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGN1
cnNvciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zZWxlY3Rp
b25MZWFkKTsKLSAgICAgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRU
b1NjcmVlblBvc2l0aW9uKHRoaXMuc2VsZWN0aW9uQW5jaG9yKTsKLQotICAgICAgICAgICAgdmFy
IHJlY3RTZWwgPSB0aGlzLnJlY3Rhbmd1bGFyUmFuZ2VCbG9jayhjdXJzb3IsIGFuY2hvcik7Ci0g
ICAgICAgICAgICByZWN0U2VsLmZvckVhY2godGhpcy5hZGRSYW5nZSwgdGhpcyk7Ci0gICAgICAg
IH0KLSAgICB9OwotICAgIHRoaXMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrID0gZnVuY3Rpb24oc2Ny
ZWVuQ3Vyc29yLCBzY3JlZW5BbmNob3IsIGluY2x1ZGVFbXB0eUxpbmVzKSB7Ci0gICAgICAgIHZh
ciByZWN0U2VsID0gW107Ci0KLSAgICAgICAgdmFyIHhCYWNrd2FyZHMgPSBzY3JlZW5DdXJzb3Iu
Y29sdW1uIDwgc2NyZWVuQW5jaG9yLmNvbHVtbjsKLSAgICAgICAgaWYgKHhCYWNrd2FyZHMpIHsK
LSAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkN1cnNvci5jb2x1bW47Ci0gICAg
ICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQW5jaG9yLmNvbHVtbjsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkFuY2hvci5jb2x1bW47
Ci0gICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2NyZWVuQ3Vyc29yLmNvbHVtbjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB5QmFja3dhcmRzID0gc2NyZWVuQ3Vyc29yLnJvdyA8IHNjcmVl
bkFuY2hvci5yb3c7Ci0gICAgICAgIGlmICh5QmFja3dhcmRzKSB7Ci0gICAgICAgICAgICB2YXIg
c3RhcnRSb3cgPSBzY3JlZW5DdXJzb3Iucm93OwotICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNj
cmVlbkFuY2hvci5yb3c7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgc3RhcnRS
b3cgPSBzY3JlZW5BbmNob3Iucm93OwotICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNjcmVlbkN1
cnNvci5yb3c7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RhcnRDb2x1bW4gPCAwKQotICAg
ICAgICAgICAgc3RhcnRDb2x1bW4gPSAwOwotICAgICAgICBpZiAoc3RhcnRSb3cgPCAwKQotICAg
ICAgICAgICAgc3RhcnRSb3cgPSAwOwotCi0gICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cp
Ci0gICAgICAgICAgICBpbmNsdWRlRW1wdHlMaW5lcyA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh2
YXIgcm93ID0gc3RhcnRSb3c7IHJvdyA8PSBlbmRSb3c7IHJvdysrKSB7Ci0gICAgICAgICAgICB2
YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKAotICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lv
bi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93LCBzdGFydENvbHVtbiksCi0gICAgICAgICAg
ICAgICAgdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIGVuZENvbHVt
bikKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRvY0VuZCAmJiBpc1NhbWVQb2ludChyYW5nZS5lbmQsIGRvY0Vu
ZCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHZhciBkb2NF
bmQgPSByYW5nZS5lbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByYW5nZS5jdXJzb3Ig
PSB4QmFja3dhcmRzID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7Ci0gICAgICAgICAgICByZWN0
U2VsLnB1c2gocmFuZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHlCYWNrd2FyZHMpCi0g
ICAgICAgICAgICByZWN0U2VsLnJldmVyc2UoKTsKLQotICAgICAgICBpZiAoIWluY2x1ZGVFbXB0
eUxpbmVzKSB7Ci0gICAgICAgICAgICB2YXIgZW5kID0gcmVjdFNlbC5sZW5ndGggLSAxOwotICAg
ICAgICAgICAgd2hpbGUgKHJlY3RTZWxbZW5kXS5pc0VtcHR5KCkgJiYgZW5kID4gMCkKLSAgICAg
ICAgICAgICAgICBlbmQtLTsKLSAgICAgICAgICAgIGlmIChlbmQgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSAocmVjdFNlbFtzdGFy
dF0uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBzdGFydCsrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IGVuZDsgaSA+PSBzdGFydDsgaS0tKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlY3RTZWxbaV0uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAg
ICByZWN0U2VsLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiByZWN0U2VsOwotICAgIH07Ci19KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUp
OwotdmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwotKGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVw
ZGF0ZUJhY2tNYXJrZXJzKCk7Ci0gICAgfTsKLSAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlciA9
IGZ1bmN0aW9uKG9yaWVudGVkUmFuZ2UpIHsKLSAgICAgICAgaWYgKCFvcmllbnRlZFJhbmdlLmN1
cnNvcikKLSAgICAgICAgICAgIG9yaWVudGVkUmFuZ2UuY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5l
bmQ7Ci0KLSAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpOwotICAg
ICAgICBvcmllbnRlZFJhbmdlLm1hcmtlciA9IHRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIob3JpZW50
ZWRSYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHlsZSk7Ci0KLSAgICAgICAgdGhpcy5zZXNzaW9u
LiRzZWxlY3Rpb25NYXJrZXJzLnB1c2gob3JpZW50ZWRSYW5nZSk7Ci0gICAgICAgIHRoaXMuc2Vz
c2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vy
cy5sZW5ndGg7Ci0gICAgICAgIHJldHVybiBvcmllbnRlZFJhbmdlOwotICAgIH07Ci0gICAgdGhp
cy5yZW1vdmVTZWxlY3Rpb25NYXJrZXIgPSBmdW5jdGlvbihyYW5nZSkgewotICAgICAgICBpZiAo
IXJhbmdlLm1hcmtlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5zZXNzaW9u
LnJlbW92ZU1hcmtlcihyYW5nZS5tYXJrZXIpOwotICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNl
c3Npb24uJHNlbGVjdGlvbk1hcmtlcnMuaW5kZXhPZihyYW5nZSk7Ci0gICAgICAgIGlmIChpbmRl
eCAhPSAtMSkKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5zcGxp
Y2UoaW5kZXgsIDEpOwotICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQg
PSB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMubGVuZ3RoOwotICAgIH07Ci0KLSAgICB0
aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMgPSBmdW5jdGlvbihyYW5nZXMpIHsKLSAgICAgICAg
dmFyIG1hcmtlckxpc3QgPSB0aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnM7Ci0gICAgICAg
IGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07ICkgewotICAgICAgICAgICAgdmFyIHJh
bmdlID0gcmFuZ2VzW2ldOwotICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXJrZXIpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2Vy
KHJhbmdlLm1hcmtlcik7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSBtYXJrZXJMaXN0LmluZGV4
T2YocmFuZ2UpOwotICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICAgICAgICAg
IG1hcmtlckxpc3Quc3BsaWNlKGluZGV4LCAxKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnNl
c3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQgPSBtYXJrZXJMaXN0Lmxlbmd0aDsKLSAgICB9Owot
Ci0gICAgdGhpcy4kb25BZGRSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdGhpcy5hZGRT
ZWxlY3Rpb25NYXJrZXIoZS5yYW5nZSk7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vy
c29yKCk7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKLSAgICB9
OwotCi0gICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdGhp
cy5yZW1vdmVTZWxlY3Rpb25NYXJrZXJzKGUucmFuZ2VzKTsKLSAgICAgICAgdGhpcy5yZW5kZXJl
ci51cGRhdGVDdXJzb3IoKTsKLSAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2Vy
cygpOwotICAgIH07Ci0KLSAgICB0aGlzLiRvbk11bHRpU2VsZWN0ID0gZnVuY3Rpb24oZSkgewot
ICAgICAgICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSA9IHRydWU7Ci0KLSAgICAgICAgdGhpcy5z
ZXRTdHlsZSgiYWNlX211bHRpc2VsZWN0Iik7Ci0gICAgICAgIHRoaXMua2V5QmluZGluZy5hZGRL
ZXlib2FyZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKLSAgICAgICAgdGhpcy5j
b21tYW5kcy5vbigiZXhlYyIsIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKTsKLQotICAgICAgICB0
aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0
ZUJhY2tNYXJrZXJzKCk7Ci0gICAgfTsKLQotICAgIHRoaXMuJG9uU2luZ2xlU2VsZWN0ID0gZnVu
Y3Rpb24oZSkgewotICAgICAgICBpZiAodGhpcy5zZXNzaW9uLm11bHRpU2VsZWN0LmluVmlydHVh
bE1vZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuaW5NdWx0aVNlbGVjdE1v
ZGUgPSBmYWxzZTsKLQotICAgICAgICB0aGlzLnVuc2V0U3R5bGUoImFjZV9tdWx0aXNlbGVjdCIp
OwotICAgICAgICB0aGlzLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKGNvbW1hbmRz
LmtleWJvYXJkSGFuZGxlcik7Ci0KLSAgICAgICAgdGhpcy5jb21tYW5kcy5yZW1vdmVFdmVudExp
c3RlbmVyKCJleGVjIiwgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMpOwotICAgICAgICB0aGlzLnJl
bmRlcmVyLnVwZGF0ZUN1cnNvcigpOwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tN
YXJrZXJzKCk7Ci0gICAgfTsKLQotICAgIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjID0gZnVuY3Rp
b24oZSkgewotICAgICAgICB2YXIgY29tbWFuZCA9IGUuY29tbWFuZDsKLSAgICAgICAgdmFyIGVk
aXRvciA9IGUuZWRpdG9yOwotICAgICAgICBpZiAoIWVkaXRvci5tdWx0aVNlbGVjdCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFjb21tYW5kLm11bHRpU2VsZWN0QWN0aW9uKSB7
Ci0gICAgICAgICAgICBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30pOwotICAgICAg
ICAgICAgZWRpdG9yLm11bHRpU2VsZWN0LmFkZFJhbmdlKGVkaXRvci5tdWx0aVNlbGVjdC50b09y
aWVudGVkUmFuZ2UoKSk7Ci0gICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QubWVyZ2VPdmVy
bGFwcGluZ1JhbmdlcygpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RB
Y3Rpb24gPT0gImZvckVhY2giKSB7Ci0gICAgICAgICAgICBlZGl0b3IuZm9yRWFjaFNlbGVjdGlv
bihjb21tYW5kLCBlLmFyZ3MpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxl
Y3RBY3Rpb24gPT0gInNpbmdsZSIpIHsKLSAgICAgICAgICAgIGVkaXRvci5leGl0TXVsdGlTZWxl
Y3RNb2RlKCk7Ci0gICAgICAgICAgICBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30p
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlv
bihlZGl0b3IsIGUuYXJncyB8fCB7fSk7Ci0gICAgICAgIH0KLSAgICAgICAgZS5wcmV2ZW50RGVm
YXVsdCgpOwotICAgIH07IAotICAgIHRoaXMuZm9yRWFjaFNlbGVjdGlvbiA9IGZ1bmN0aW9uKGNt
ZCwgYXJncykgewotICAgICAgICBpZiAodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwot
ICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247Ci0gICAgICAgIHZhciByYW5n
ZUxpc3QgPSBzZWxlY3Rpb24ucmFuZ2VMaXN0OwotCi0gICAgICAgIHZhciByZWcgPSBzZWxlY3Rp
b24uX2V2ZW50UmVnaXN0cnk7Ci0gICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHt9
OwotCi0gICAgICAgIHZhciB0bXBTZWwgPSBuZXcgU2VsZWN0aW9uKHNlc3Npb24pOwotICAgICAg
ICB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgPSB0cnVlOwotICAgICAgICBmb3IgKHZhciBp
ID0gcmFuZ2VMaXN0LnJhbmdlcy5sZW5ndGg7IGktLTspIHsKLSAgICAgICAgICAgIHRtcFNlbC5m
cm9tT3JpZW50ZWRSYW5nZShyYW5nZUxpc3QucmFuZ2VzW2ldKTsKLSAgICAgICAgICAgIHRoaXMu
c2VsZWN0aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSB0bXBTZWw7Ci0gICAgICAgICAgICBjbWQu
ZXhlYyh0aGlzLCBhcmdzIHx8IHt9KTsKLSAgICAgICAgICAgIHRtcFNlbC50b09yaWVudGVkUmFu
Z2UocmFuZ2VMaXN0LnJhbmdlc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wU2VsLmRldGFj
aCgpOwotCi0gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2Vzc2lvbi5zZWxlY3Rpb24gPSBzZWxl
Y3Rpb247Ci0gICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IGZhbHNlOwotICAg
ICAgICBzZWxlY3Rpb24uX2V2ZW50UmVnaXN0cnkgPSByZWc7Ci0gICAgICAgIHNlbGVjdGlvbi5t
ZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCk7Ci0KLSAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZSgp
OwotICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7Ci0gICAgfTsKLSAgICB0aGlzLmV4
aXRNdWx0aVNlbGVjdE1vZGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuaW5WaXJ0
dWFsU2VsZWN0aW9uTW9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5tdWx0
aVNlbGVjdC50b1NpbmdsZVJhbmdlKCk7Ci0gICAgfTsKLQotICAgIHRoaXMuZ2V0Q29weVRleHQg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHRleHQgPSAiIjsKLSAgICAgICAgaWYgKHRoaXMu
aW5NdWx0aVNlbGVjdE1vZGUpIHsKLSAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLm11bHRp
U2VsZWN0LnJhbmdlTGlzdC5yYW5nZXM7Ci0gICAgICAgICAgICB0ZXh0ID0gW107Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgIHRleHQucHVzaCh0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlc1tpXSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdGV4dCA9IHRleHQuam9pbih0aGlzLnNlc3Npb24u
Z2V0RG9jdW1lbnQoKS5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpOwotICAgICAgICB9IGVsc2UgaWYg
KCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHRleHQgPSB0aGlzLnNl
c3Npb24uZ2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gdGV4dDsKLSAgICB9OwotICAgIHRoaXMub25QYXN0ZSA9IGZ1bmN0
aW9uKHRleHQpIHsKLSAgICAgICAgaWYgKHRoaXMuJHJlYWRPbmx5KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHRoaXMuX3NpZ25hbCgicGFzdGUiLCB0ZXh0KTsKLSAgICAgICAgaWYg
KCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlIHx8IHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydCh0ZXh0KTsKLQotICAgICAgICB2YXIgbGlu
ZXMgPSB0ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7Ci0gICAgICAgIHZhciByYW5nZXMgPSB0aGlz
LnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzOwotCi0gICAgICAgIGlmIChsaW5lcy5sZW5ndGgg
PiByYW5nZXMubGVuZ3RoIHx8IChsaW5lcy5sZW5ndGggPD0gMiB8fCAhbGluZXNbMV0pKQotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZHMuZXhlYygiaW5zZXJ0c3RyaW5nIiwgdGhpcywg
dGV4dCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTsgKSB7Ci0g
ICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07Ci0gICAgICAgICAgICBpZiAoIXJhbmdl
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsK
LQotICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydChyYW5nZS5zdGFydCwgbGluZXNbaV0p
OwotICAgICAgICB9Ci0gICAgfTsKLSAgICB0aGlzLmZpbmRBbGwgPSBmdW5jdGlvbihuZWVkbGUs
IG9wdGlvbnMsIGFkZGl0aXZlKSB7Ci0gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9Owot
ICAgICAgICBvcHRpb25zLm5lZWRsZSA9IG5lZWRsZSB8fCBvcHRpb25zLm5lZWRsZTsKLSAgICAg
ICAgdGhpcy4kc2VhcmNoLnNldChvcHRpb25zKTsKLQotICAgICAgICB2YXIgcmFuZ2VzID0gdGhp
cy4kc2VhcmNoLmZpbmRBbGwodGhpcy5zZXNzaW9uKTsKLSAgICAgICAgaWYgKCFyYW5nZXMubGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgdGhpcy4kYmxvY2tTY3JvbGxp
bmcgKz0gMTsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMubXVsdGlTZWxlY3Q7Ci0KLSAg
ICAgICAgaWYgKCFhZGRpdGl2ZSkKLSAgICAgICAgICAgIHNlbGVjdGlvbi50b1NpbmdsZVJhbmdl
KHJhbmdlc1swXSk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTsg
KQotICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlc1tpXSwgdHJ1ZSk7Ci0KLSAg
ICAgICAgdGhpcy4kYmxvY2tTY3JvbGxpbmcgLT0gMTsKLQotICAgICAgICByZXR1cm4gcmFuZ2Vz
Lmxlbmd0aDsKLSAgICB9OwotICAgIHRoaXMuc2VsZWN0TW9yZUxpbmVzID0gZnVuY3Rpb24oZGly
LCBza2lwKSB7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnRvT3JpZW50ZWRS
YW5nZSgpOwotICAgICAgICB2YXIgaXNCYWNrd2FyZHMgPSByYW5nZS5jdXJzb3IgPT0gcmFuZ2Uu
ZW5kOwotCi0gICAgICAgIHZhciBzY3JlZW5MZWFkID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9T
Y3JlZW5Qb3NpdGlvbihyYW5nZS5jdXJzb3IpOwotICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24u
JGRlc2lyZWRDb2x1bW4pCi0gICAgICAgICAgICBzY3JlZW5MZWFkLmNvbHVtbiA9IHRoaXMuc2Vs
ZWN0aW9uLiRkZXNpcmVkQ29sdW1uOwotCi0gICAgICAgIHZhciBsZWFkID0gdGhpcy5zZXNzaW9u
LnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5MZWFkLnJvdyArIGRpciwgc2NyZWVuTGVh
ZC5jb2x1bW4pOwotCi0gICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICB2YXIgc2NyZWVuQW5jaG9yID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlv
bihpc0JhY2t3YXJkcyA/IHJhbmdlLmVuZCA6IHJhbmdlLnN0YXJ0KTsKLSAgICAgICAgICAgIHZh
ciBhbmNob3IgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlbkFu
Y2hvci5yb3cgKyBkaXIsIHNjcmVlbkFuY2hvci5jb2x1bW4pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgdmFyIGFuY2hvciA9IGxlYWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aXNCYWNrd2FyZHMpIHsKLSAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IFJhbmdlLmZyb21Qb2lu
dHMobGVhZCwgYW5jaG9yKTsKLSAgICAgICAgICAgIG5ld1JhbmdlLmN1cnNvciA9IG5ld1Jhbmdl
LnN0YXJ0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0gUmFu
Z2UuZnJvbVBvaW50cyhhbmNob3IsIGxlYWQpOwotICAgICAgICAgICAgbmV3UmFuZ2UuY3Vyc29y
ID0gbmV3UmFuZ2UuZW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3UmFuZ2UuZGVzaXJlZENv
bHVtbiA9IHNjcmVlbkxlYWQuY29sdW1uOwotICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlu
TXVsdGlTZWxlY3RNb2RlKSB7Ci0gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5hZGRSYW5nZShy
YW5nZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2tpcCkKLSAgICAgICAg
ICAgICAgICB2YXIgdG9SZW1vdmUgPSByYW5nZS5jdXJzb3I7Ci0gICAgICAgIH0KLQotICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7Ci0gICAgICAgIGlmICh0b1JlbW92
ZSkKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnN1YnN0cmFjdFBvaW50KHRvUmVtb3ZlKTsK
LSAgICB9OwotICAgIHRoaXMudHJhbnNwb3NlU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKGRpcikgewot
ICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKLSAgICAgICAgdmFyIHNlbCA9IHNl
c3Npb24ubXVsdGlTZWxlY3Q7Ci0gICAgICAgIHZhciBhbGwgPSBzZWwucmFuZ2VzOwotCi0gICAg
ICAgIGZvciAodmFyIGkgPSBhbGwubGVuZ3RoOyBpLS07ICkgewotICAgICAgICAgICAgdmFyIHJh
bmdlID0gYWxsW2ldOwotICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgIHZhciB0bXAgPSBzZXNzaW9uLmdldFdvcmRSYW5nZShyYW5nZS5zdGFydC5yb3cs
IHJhbmdlLnN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0g
dG1wLnN0YXJ0LnJvdzsKLSAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0bXAu
c3RhcnQuY29sdW1uOwotICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSB0bXAuZW5kLnJv
dzsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdG1wLmVuZC5jb2x1bW47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2VsLm1lcmdlT3ZlcmxhcHBpbmdSYW5n
ZXMoKTsKLQotICAgICAgICB2YXIgd29yZHMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IGFs
bC5sZW5ndGg7IGktLTsgKSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBhbGxbaV07Ci0gICAg
ICAgICAgICB3b3Jkcy51bnNoaWZ0KHNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoZGlyIDwgMCkKLSAgICAgICAgICAgIHdvcmRzLnVuc2hpZnQo
d29yZHMucG9wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB3b3Jkcy5wdXNoKHdvcmRz
LnNoaWZ0KCkpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSBhbGwubGVuZ3RoOyBpLS07ICkgewot
ICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldOwotICAgICAgICAgICAgdmFyIHRtcCA9IHJh
bmdlLmNsb25lKCk7Ci0gICAgICAgICAgICBzZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHdvcmRzW2ld
KTsKLSAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IHRtcC5zdGFydC5yb3c7Ci0gICAgICAg
ICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0bXAuc3RhcnQuY29sdW1uOwotICAgICAgICB9Ci0g
ICAgfTsKLSAgICB0aGlzLnNlbGVjdE1vcmUgPSBmdW5jdGlvbihkaXIsIHNraXApIHsKLSAgICAg
ICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247Ci0gICAgICAgIHZhciBzZWwgPSBzZXNzaW9u
Lm11bHRpU2VsZWN0OwotCi0gICAgICAgIHZhciByYW5nZSA9IHNlbC50b09yaWVudGVkUmFuZ2Uo
KTsKLSAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdmFyIHJhbmdl
ID0gc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1
bW4pOwotICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gcmFuZ2UuZW5kOwotICAgICAgICAgICAg
dGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShyYW5nZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFy
IG5lZWRsZSA9IHNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKLQotICAgICAgICB2YXIgbmV3
UmFuZ2UgPSBmaW5kKHNlc3Npb24sIG5lZWRsZSwgZGlyKTsKLSAgICAgICAgaWYgKG5ld1Jhbmdl
KSB7Ci0gICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBkaXIgPT0gLTEgPyBuZXdSYW5nZS5z
dGFydCA6IG5ld1JhbmdlLmVuZDsKLSAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3QuYWRkUmFu
Z2UobmV3UmFuZ2UpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChza2lwKQotICAgICAgICAgICAg
dGhpcy5tdWx0aVNlbGVjdC5zdWJzdHJhY3RQb2ludChyYW5nZS5jdXJzb3IpOwotICAgIH07Ci0g
ICAgdGhpcy5hbGlnbkN1cnNvcnMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHNlc3Npb24g
PSB0aGlzLnNlc3Npb247Ci0gICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0Owot
ICAgICAgICB2YXIgcmFuZ2VzID0gc2VsLnJhbmdlczsKLQotICAgICAgICBpZiAoIXJhbmdlcy5s
ZW5ndGgpIHsKLSAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdl
KCk7Ci0gICAgICAgICAgICB2YXIgZnIgPSByYW5nZS5zdGFydC5yb3csIGxyID0gcmFuZ2UuZW5k
LnJvdzsKLSAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuc2Vzc2lvbi5kb2MucmVtb3ZlTGlu
ZXMoZnIsIGxyKTsKLSAgICAgICAgICAgIGxpbmVzID0gdGhpcy4kcmVBbGlnblRleHQobGluZXMp
OwotICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRvYy5pbnNlcnRMaW5lcyhmciwgbGluZXMpOwot
ICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsKLSAgICAgICAgICAgIHJhbmdlLmVu
ZC5jb2x1bW4gPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7Ci0gICAgICAgICAgICB0
aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB2YXIgcm93ID0gLTE7Ci0gICAgICAgICAgICB2YXIgc2FtZVJvd1JhbmdlcyA9IHJhbmdl
cy5maWx0ZXIoZnVuY3Rpb24ocikgewotICAgICAgICAgICAgICAgIGlmIChyLmN1cnNvci5yb3cg
PT0gcm93KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICByb3cgPSByLmN1cnNvci5yb3c7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHNlbC4k
b25SZW1vdmVSYW5nZShzYW1lUm93UmFuZ2VzKTsKLQotICAgICAgICAgICAgdmFyIG1heENvbCA9
IDA7Ci0gICAgICAgICAgICB2YXIgbWluU3BhY2UgPSBJbmZpbml0eTsKLSAgICAgICAgICAgIHZh
ciBzcGFjZU9mZnNldHMgPSByYW5nZXMubWFwKGZ1bmN0aW9uKHIpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcCA9IHIuY3Vyc29yOwotICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5n
ZXRMaW5lKHAucm93KTsKLSAgICAgICAgICAgICAgICB2YXIgc3BhY2VPZmZzZXQgPSBsaW5lLnN1
YnN0cihwLmNvbHVtbikuc2VhcmNoKC9cUy9nKTsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VP
ZmZzZXQgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHNwYWNlT2Zmc2V0ID0gMDsKLQotICAg
ICAgICAgICAgICAgIGlmIChwLmNvbHVtbiA+IG1heENvbCkKLSAgICAgICAgICAgICAgICAgICAg
bWF4Q29sID0gcC5jb2x1bW47Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlT2Zmc2V0IDwgbWlu
U3BhY2UpCi0gICAgICAgICAgICAgICAgICAgIG1pblNwYWNlID0gc3BhY2VPZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHNwYWNlT2Zmc2V0OwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICByYW5nZXMuZm9yRWFjaChmdW5jdGlvbihyLCBpKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHAgPSByLmN1cnNvcjsKLSAgICAgICAgICAgICAgICB2YXIgbCA9IG1heENvbCAtIHAuY29sdW1u
OwotICAgICAgICAgICAgICAgIHZhciBkID0gc3BhY2VPZmZzZXRzW2ldIC0gbWluU3BhY2U7Ci0g
ICAgICAgICAgICAgICAgaWYgKGwgPiBkKQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmlu
c2VydChwLCBsYW5nLnN0cmluZ1JlcGVhdCgiICIsIGwgLSBkKSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZShuZXcgUmFuZ2UocC5yb3cs
IHAuY29sdW1uLCBwLnJvdywgcC5jb2x1bW4gLSBsICsgZCkpOwotCi0gICAgICAgICAgICAgICAg
ci5zdGFydC5jb2x1bW4gPSByLmVuZC5jb2x1bW4gPSBtYXhDb2w7Ci0gICAgICAgICAgICAgICAg
ci5zdGFydC5yb3cgPSByLmVuZC5yb3cgPSBwLnJvdzsKLSAgICAgICAgICAgICAgICByLmN1cnNv
ciA9IHIuZW5kOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBzZWwuZnJvbU9yaWVudGVk
UmFuZ2UocmFuZ2VzWzBdKTsKLSAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29y
KCk7Ci0gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGhpcy4kcmVBbGlnblRleHQgPSBmdW5jdGlvbihsaW5lcykg
ewotICAgICAgICB2YXIgaXNMZWZ0QWxpZ25lZCA9IHRydWUsIGlzUmlnaHRBbGlnbmVkID0gdHJ1
ZTsKLSAgICAgICAgdmFyIHN0YXJ0VywgdGV4dFcsIGVuZFc7Ci0KLSAgICAgICAgcmV0dXJuIGxp
bmVzLm1hcChmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgICAgICB2YXIgbSA9IGxpbmUubWF0Y2go
LyhccyopKC4qPykoXHMqKShbPTpdLiopLyk7Ci0gICAgICAgICAgICBpZiAoIW0pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFtsaW5lXTsKLQotICAgICAgICAgICAgaWYgKHN0YXJ0VyA9PSBudWxs
KSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRXID0gbVsxXS5sZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgdGV4dFcgPSBtWzJdLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBlbmRXID0gbVszXS5sZW5n
dGg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChzdGFydFcgKyB0ZXh0VyArIGVuZFcgIT0gbVsxXS5sZW5ndGggKyBtWzJdLmxlbmd0
aCArIG1bM10ubGVuZ3RoKQotICAgICAgICAgICAgICAgIGlzUmlnaHRBbGlnbmVkID0gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoc3RhcnRXICE9IG1bMV0ubGVuZ3RoKQotICAgICAgICAgICAgICAg
IGlzTGVmdEFsaWduZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHN0YXJ0VyA+IG1bMV0u
bGVuZ3RoKQotICAgICAgICAgICAgICAgIHN0YXJ0VyA9IG1bMV0ubGVuZ3RoOwotICAgICAgICAg
ICAgaWYgKHRleHRXIDwgbVsyXS5sZW5ndGgpCi0gICAgICAgICAgICAgICAgdGV4dFcgPSBtWzJd
Lmxlbmd0aDsKLSAgICAgICAgICAgIGlmIChlbmRXID4gbVszXS5sZW5ndGgpCi0gICAgICAgICAg
ICAgICAgZW5kVyA9IG1bM10ubGVuZ3RoOwotCi0gICAgICAgICAgICByZXR1cm4gbTsKLSAgICAg
ICAgfSkubWFwKGlzTGVmdEFsaWduZWQgPyBpc1JpZ2h0QWxpZ25lZCA/IGFsaWduUmlnaHQgOiBh
bGlnbkxlZnQgOiB1bkFsaWduKTsKLQotICAgICAgICBmdW5jdGlvbiBzcGFjZXMobikgewotICAg
ICAgICAgICAgcmV0dXJuIGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgbik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBhbGlnbkxlZnQobSkgewotICAgICAgICAgICAgcmV0dXJuICFtWzJd
ID8gbVswXSA6IHNwYWNlcyhzdGFydFcpICsgbVsyXQotICAgICAgICAgICAgICAgICsgc3BhY2Vz
KHRleHRXIC0gbVsyXS5sZW5ndGggKyBlbmRXKQotICAgICAgICAgICAgICAgICsgbVs0XS5yZXBs
YWNlKC9eKFs9Ol0pXHMrLywgIiQxICIpCi0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gYWxp
Z25SaWdodChtKSB7Ci0gICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0
YXJ0VyArIHRleHRXIC0gbVsyXS5sZW5ndGgpICsgbVsyXQotICAgICAgICAgICAgICAgICsgc3Bh
Y2VzKGVuZFcsICIgIikKLSAgICAgICAgICAgICAgICArIG1bNF0ucmVwbGFjZSgvXihbPTpdKVxz
Ky8sICIkMSAiKQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIHVuQWxpZ24obSkgewotICAg
ICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhzdGFydFcpICsgbVsyXQotICAg
ICAgICAgICAgICAgICsgc3BhY2VzKGVuZFcpCi0gICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxh
Y2UoL14oWz06XSlccysvLCAiJDEgIikKLSAgICAgICAgfQotICAgIH0KLX0pLmNhbGwoRWRpdG9y
LnByb3RvdHlwZSk7Ci0KLQotZnVuY3Rpb24gaXNTYW1lUG9pbnQocDEsIHAyKSB7Ci0gICAgcmV0
dXJuIHAxLnJvdyA9PSBwMi5yb3cgJiYgcDEuY29sdW1uID09IHAyLmNvbHVtbjsKLX0KLWV4cG9y
dHMub25TZXNzaW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgewotICAgIHZhciBzZXNzaW9uID0gZS5z
ZXNzaW9uOwotICAgIGlmICghc2Vzc2lvbi5tdWx0aVNlbGVjdCkgewotICAgICAgICBzZXNzaW9u
LiRzZWxlY3Rpb25NYXJrZXJzID0gW107Ci0gICAgICAgIHNlc3Npb24uc2VsZWN0aW9uLiRpbml0
UmFuZ2VMaXN0KCk7Ci0gICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QgPSBzZXNzaW9uLnNlbGVj
dGlvbjsKLSAgICB9Ci0gICAgdGhpcy5tdWx0aVNlbGVjdCA9IHNlc3Npb24ubXVsdGlTZWxlY3Q7
Ci0KLSAgICB2YXIgb2xkU2Vzc2lvbiA9IGUub2xkU2Vzc2lvbjsKLSAgICBpZiAob2xkU2Vzc2lv
bikgewotICAgICAgICBpZiAob2xkU2Vzc2lvbi5tdWx0aVNlbGVjdCAmJiBvbGRTZXNzaW9uLm11
bHRpU2VsZWN0LmVkaXRvciA9PSB0aGlzKQotICAgICAgICAgICAgb2xkU2Vzc2lvbi5tdWx0aVNl
bGVjdC5lZGl0b3IgPSBudWxsOwotCi0gICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiYWRkUmFuZ2UiLCB0aGlzLiRvbkFkZFJhbmdlKTsKLSAgICAgICAgc2Vz
c2lvbi5tdWx0aVNlbGVjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZW1vdmVSYW5nZSIsIHRoaXMu
JG9uUmVtb3ZlUmFuZ2UpOwotICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0LnJlbW92ZUV2ZW50
TGlzdGVuZXIoIm11bHRpU2VsZWN0IiwgdGhpcy4kb25NdWx0aVNlbGVjdCk7Ci0gICAgICAgIHNl
c3Npb24ubXVsdGlTZWxlY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2luZ2xlU2VsZWN0IiwgdGhp
cy4kb25TaW5nbGVTZWxlY3QpOwotICAgIH0KLQotICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24o
ImFkZFJhbmdlIiwgdGhpcy4kb25BZGRSYW5nZSk7Ci0gICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5v
bigicmVtb3ZlUmFuZ2UiLCB0aGlzLiRvblJlbW92ZVJhbmdlKTsKLSAgICBzZXNzaW9uLm11bHRp
U2VsZWN0Lm9uKCJtdWx0aVNlbGVjdCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpOwotICAgIHNlc3Np
b24ubXVsdGlTZWxlY3Qub24oInNpbmdsZVNlbGVjdCIsIHRoaXMuJG9uU2luZ2xlU2VsZWN0KTsK
LQotICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlICE9IHNlc3Npb24uc2VsZWN0aW9uLmlu
TXVsdGlTZWxlY3RNb2RlKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uLnNlbGVjdGlvbi5pbk11bHRp
U2VsZWN0TW9kZSkKLSAgICAgICAgICAgIHRoaXMuJG9uTXVsdGlTZWxlY3QoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGhpcy4kb25TaW5nbGVTZWxlY3QoKTsKLSAgICB9Ci19OwotZnVu
Y3Rpb24gTXVsdGlTZWxlY3QoZWRpdG9yKSB7Ci0gICAgZWRpdG9yLiRvbkFkZFJhbmdlID0gZWRp
dG9yLiRvbkFkZFJhbmdlLmJpbmQoZWRpdG9yKTsKLSAgICBlZGl0b3IuJG9uUmVtb3ZlUmFuZ2Ug
PSBlZGl0b3IuJG9uUmVtb3ZlUmFuZ2UuYmluZChlZGl0b3IpOwotICAgIGVkaXRvci4kb25NdWx0
aVNlbGVjdCA9IGVkaXRvci4kb25NdWx0aVNlbGVjdC5iaW5kKGVkaXRvcik7Ci0gICAgZWRpdG9y
LiRvblNpbmdsZVNlbGVjdCA9IGVkaXRvci4kb25TaW5nbGVTZWxlY3QuYmluZChlZGl0b3IpOwot
Ci0gICAgZXhwb3J0cy5vblNlc3Npb25DaGFuZ2UuY2FsbChlZGl0b3IsIGVkaXRvcik7Ci0gICAg
ZWRpdG9yLm9uKCJjaGFuZ2VTZXNzaW9uIiwgZXhwb3J0cy5vblNlc3Npb25DaGFuZ2UuYmluZChl
ZGl0b3IpKTsKLQotICAgIGVkaXRvci5vbigibW91c2Vkb3duIiwgb25Nb3VzZURvd24pOwotICAg
IGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhjb21tYW5kcy5kZWZhdWx0Q29tbWFuZHMpOwot
Ci0gICAgYWRkQWx0Q3Vyc29yTGlzdGVuZXJzKGVkaXRvcik7Ci19Ci0KLWZ1bmN0aW9uIGFkZEFs
dEN1cnNvckxpc3RlbmVycyhlZGl0b3IpewotICAgIHZhciBlbCA9IGVkaXRvci50ZXh0SW5wdXQu
Z2V0RWxlbWVudCgpOwotICAgIHZhciBhbHRDdXJzb3IgPSBmYWxzZTsKLSAgICB2YXIgY29udGVu
dEVsID0gZWRpdG9yLnJlbmRlcmVyLmNvbnRlbnQ7Ci0gICAgZXZlbnQuYWRkTGlzdGVuZXIoZWws
ICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAoZS5rZXlDb2RlID09IDE4ICYm
ICEoZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5KSkgewotICAgICAgICAgICAg
aWYgKCFhbHRDdXJzb3IpIHsKLSAgICAgICAgICAgICAgICBjb250ZW50RWwuc3R5bGUuY3Vyc29y
ID0gImNyb3NzaGFpciI7Ci0gICAgICAgICAgICAgICAgYWx0Q3Vyc29yID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChhbHRDdXJzb3IpIHsKLSAgICAgICAgICAgIGNv
bnRlbnRFbC5zdHlsZS5jdXJzb3IgPSAiIjsKLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgZXZl
bnQuYWRkTGlzdGVuZXIoZWwsICJrZXl1cCIsIHJlc2V0KTsKLSAgICBldmVudC5hZGRMaXN0ZW5l
cihlbCwgImJsdXIiLCByZXNldCk7Ci0gICAgZnVuY3Rpb24gcmVzZXQoKSB7Ci0gICAgICAgIGlm
IChhbHRDdXJzb3IpIHsKLSAgICAgICAgICAgIGNvbnRlbnRFbC5zdHlsZS5jdXJzb3IgPSAiIjsK
LSAgICAgICAgICAgIGFsdEN1cnNvciA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1l
eHBvcnRzLk11bHRpU2VsZWN0ID0gTXVsdGlTZWxlY3Q7Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdh
Y2UvcmFuZ2VfbGlzdCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rp
b24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotCi12YXIgUmFuZ2VMaXN0ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdGhpcy5yYW5nZXMgPSBbXTsKLX07Ci0KLShmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKLSAgICAgICAgcmV0dXJu
IHAxLnJvdyAtIHAyLnJvdyB8fCBwMS5jb2x1bW4gLSBwMi5jb2x1bW47Ci0gICAgfTsKLQotICAg
IHRoaXMucG9pbnRJbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRJbmRleCkgewotICAgICAgICB2
YXIgbGlzdCA9IHRoaXMucmFuZ2VzOwotCi0gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4
IHx8IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBs
aXN0W2ldOwotICAgICAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVBvaW50cyhwb3MsIHJh
bmdlLmVuZCk7Ci0KLSAgICAgICAgICAgIGlmIChjbXAgPiAwKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKGNtcCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlUG9pbnRzKHBvcywgcmFuZ2Uuc3Rh
cnQpOwotICAgICAgICAgICAgaWYgKGNtcCA+PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBp
OwotCi0gICAgICAgICAgICByZXR1cm4gLWktMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
LWkgLSAxOwotICAgIH07Ci0KLSAgICB0aGlzLmFkZCA9IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAg
ICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5wb2ludEluZGV4KHJhbmdlLnN0YXJ0KTsKLSAgICAg
ICAgaWYgKHN0YXJ0SW5kZXggPCAwKQotICAgICAgICAgICAgc3RhcnRJbmRleCA9IC1zdGFydElu
ZGV4IC0gMTsKLQotICAgICAgICB2YXIgZW5kSW5kZXggPSB0aGlzLnBvaW50SW5kZXgocmFuZ2Uu
ZW5kLCBzdGFydEluZGV4KTsKLQotICAgICAgICBpZiAoZW5kSW5kZXggPCAwKQotICAgICAgICAg
ICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBl
bmRJbmRleCsrOwotCi0gICAgICAgIHJldHVybiB0aGlzLnJhbmdlcy5zcGxpY2Uoc3RhcnRJbmRl
eCwgZW5kSW5kZXggLSBzdGFydEluZGV4LCByYW5nZSk7Ci0gICAgfTsKLQotICAgIHRoaXMuYWRk
TGlzdCA9IGZ1bmN0aW9uKGxpc3QpIHsKLSAgICAgICAgdmFyIHJlbW92ZWQgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07ICkgewotICAgICAgICAgICAgcmVtb3Zl
ZC5wdXNoLmNhbGwocmVtb3ZlZCwgdGhpcy5hZGQobGlzdFtpXSkpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiByZW1vdmVkOwotICAgIH07Ci0KLSAgICB0aGlzLnN1YnN0cmFjdFBvaW50ID0g
ZnVuY3Rpb24ocG9zKSB7Ci0gICAgICAgIHZhciBpID0gdGhpcy5wb2ludEluZGV4KHBvcyk7Ci0K
LSAgICAgICAgaWYgKGkgPj0gMCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlcy5zcGxp
Y2UoaSwgMSk7Ci0gICAgfTsKLSAgICB0aGlzLm1lcmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHZhciByZW1vdmVkID0gW107Ci0gICAgICAgIHZhciBsaXN0ID0gdGhpcy5yYW5nZXM7Ci0gICAg
ICAgIHZhciBuZXh0ID0gbGlzdFswXSwgcmFuZ2U7Ci0gICAgICAgIGZvciAodmFyIGkgPSAxOyBp
IDwgbGlzdC5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgcmFuZ2UgPSBuZXh0OwotICAgICAg
ICAgICAgbmV4dCA9IGxpc3RbaV07Ci0gICAgICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJl
UG9pbnRzKHJhbmdlLmVuZCwgbmV4dC5zdGFydCk7Ci0gICAgICAgICAgICBpZiAoY21wIDwgMCkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGNtcCA9PSAwICYm
ICEocmFuZ2UuaXNFbXB0eSgpIHx8IG5leHQuaXNFbXB0eSgpKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgaWYgKHRoaXMuY29tcGFyZVBvaW50cyhyYW5nZS5lbmQs
IG5leHQuZW5kKSA8IDApIHsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbmV4dC5l
bmQucm93OwotICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBuZXh0LmVuZC5jb2x1
bW47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpOwotICAg
ICAgICAgICAgcmVtb3ZlZC5wdXNoKG5leHQpOwotICAgICAgICAgICAgbmV4dCA9IHJhbmdlOwot
ICAgICAgICAgICAgaS0tOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlbW92ZWQ7Ci0g
ICAgfTsKLQotICAgIHRoaXMuY29udGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewotICAg
ICAgICByZXR1cm4gdGhpcy5wb2ludEluZGV4KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KSA+
PSAwOwotICAgIH07Ci0KLSAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbihwb3MpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRJbmRleChwb3MpID49IDA7Ci0gICAgfTsKLQotICAg
IHRoaXMucmFuZ2VBdFBvaW50ID0gZnVuY3Rpb24ocG9zKSB7Ci0gICAgICAgIHZhciBpID0gdGhp
cy5wb2ludEluZGV4KHBvcyk7Ci0gICAgICAgIGlmIChpID49IDApCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5yYW5nZXNbaV07Ci0gICAgfTsKLQotCi0gICAgdGhpcy5jbGlwUm93cyA9IGZ1bmN0
aW9uKHN0YXJ0Um93LCBlbmRSb3cpIHsKLSAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlczsK
LSAgICAgICAgaWYgKGxpc3RbMF0uc3RhcnQucm93ID4gZW5kUm93IHx8IGxpc3RbbGlzdC5sZW5n
dGggLSAxXS5zdGFydC5yb3cgPCBzdGFydFJvdykKLSAgICAgICAgICAgIHJldHVybiBbXTsKLQot
ICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMucG9pbnRJbmRleCh7cm93OiBzdGFydFJvdywg
Y29sdW1uOiAwfSk7Ci0gICAgICAgIGlmIChzdGFydEluZGV4IDwgMCkKLSAgICAgICAgICAgIHN0
YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7Ci0gICAgICAgIHZhciBlbmRJbmRleCA9IHRoaXMu
cG9pbnRJbmRleCh7cm93OiBlbmRSb3csIGNvbHVtbjogMH0sIHN0YXJ0SW5kZXgpOwotICAgICAg
ICBpZiAoZW5kSW5kZXggPCAwKQotICAgICAgICAgICAgZW5kSW5kZXggPSAtZW5kSW5kZXggLSAx
OwotCi0gICAgICAgIHZhciBjbGlwcGVkID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSBzdGFy
dEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykgewotICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGxp
c3RbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjbGlwcGVkOwotICAgIH07Ci0KLSAg
ICB0aGlzLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5yYW5n
ZXMuc3BsaWNlKDAsIHRoaXMucmFuZ2VzLmxlbmd0aCk7Ci0gICAgfTsKLQotICAgIHRoaXMuYXR0
YWNoID0gZnVuY3Rpb24oc2Vzc2lvbikgewotICAgICAgICBpZiAodGhpcy5zZXNzaW9uKQotICAg
ICAgICAgICAgdGhpcy5kZXRhY2goKTsKLQotICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9u
OwotICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy4kb25DaGFuZ2UuYmluZCh0aGlzKTsKLQot
ICAgICAgICB0aGlzLnNlc3Npb24ub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UpOwotICAgIH07
Ci0KLSAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoIXRoaXMuc2Vz
c2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUxp
c3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTsKLSAgICAgICAgdGhpcy5zZXNzaW9uID0g
bnVsbDsKLSAgICB9OwotCi0gICAgdGhpcy4kb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7Ci0gICAg
ICAgIHZhciBjaGFuZ2VSYW5nZSA9IGUuZGF0YS5yYW5nZTsKLSAgICAgICAgaWYgKGUuZGF0YS5h
Y3Rpb25bMF0gPT0gImkiKXsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IGNoYW5nZVJhbmdlLnN0
YXJ0OwotICAgICAgICAgICAgdmFyIGVuZCA9IGNoYW5nZVJhbmdlLmVuZDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHZhciBlbmQgPSBjaGFuZ2VSYW5nZS5zdGFydDsKLSAgICAgICAg
ICAgIHZhciBzdGFydCA9IGNoYW5nZVJhbmdlLmVuZDsKLSAgICAgICAgfQotICAgICAgICB2YXIg
c3RhcnRSb3cgPSBzdGFydC5yb3c7Ci0gICAgICAgIHZhciBlbmRSb3cgPSBlbmQucm93OwotICAg
ICAgICB2YXIgbGluZURpZiA9IGVuZFJvdyAtIHN0YXJ0Um93OwotCi0gICAgICAgIHZhciBjb2xE
aWZmID0gLXN0YXJ0LmNvbHVtbiArIGVuZC5jb2x1bW47Ci0gICAgICAgIHZhciByYW5nZXMgPSB0
aGlzLnJhbmdlczsKLQotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHJhbmdlcy5sZW5ndGg7
IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIHZhciByID0gcmFuZ2VzW2ldOwotICAgICAgICAg
ICAgaWYgKHIuZW5kLnJvdyA8IHN0YXJ0Um93KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKHIuc3RhcnQucm93ID4gc3RhcnRSb3cpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChyLnN0YXJ0LnJvdyA9PSBzdGFydFJvdyAmJiByLnN0
YXJ0LmNvbHVtbiA+PSBzdGFydC5jb2x1bW4gKSB7Ci0gICAgICAgICAgICAgICAgci5zdGFydC5j
b2x1bW4gKz0gY29sRGlmZjsKLSAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyArPSBsaW5lRGlm
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHIuZW5kLnJvdyA9PSBzdGFydFJvdyAm
JiByLmVuZC5jb2x1bW4gPj0gIHN0YXJ0LmNvbHVtbikgewotICAgICAgICAgICAgICAgIHIuZW5k
LmNvbHVtbiArPSBjb2xEaWZmOwotICAgICAgICAgICAgICAgIHIuZW5kLnJvdyArPSBsaW5lRGlm
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxpbmVEaWYgIT0gMCAm
JiBpIDwgbikgewotICAgICAgICAgICAgZm9yICg7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICB2YXIgciA9IHJhbmdlc1tpXTsKLSAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyArPSBs
aW5lRGlmOwotICAgICAgICAgICAgICAgIHIuZW5kLnJvdyArPSBsaW5lRGlmOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfSkuY2FsbChSYW5nZUxpc3QucHJvdG90eXBlKTsK
LQotZXhwb3J0cy5SYW5nZUxpc3QgPSBSYW5nZUxpc3Q7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNl
L21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2UvbGliL2V2ZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgewotCi12YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKLWZ1bmN0aW9uIGlz
U2FtZVBvaW50KHAxLCBwMikgewotICAgIHJldHVybiBwMS5yb3cgPT0gcDIucm93ICYmIHAxLmNv
bHVtbiA9PSBwMi5jb2x1bW47Ci19Ci0KLWZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKLSAgICB2
YXIgZXYgPSBlLmRvbUV2ZW50OwotICAgIHZhciBhbHQgPSBldi5hbHRLZXk7Ci0gICAgdmFyIHNo
aWZ0ID0gZXYuc2hpZnRLZXk7Ci0gICAgdmFyIGN0cmwgPSBlLmdldEFjY2VsS2V5KCk7Ci0gICAg
dmFyIGJ1dHRvbiA9IGUuZ2V0QnV0dG9uKCk7Ci0KLSAgICBpZiAoZS5lZGl0b3IuaW5NdWx0aVNl
bGVjdE1vZGUgJiYgYnV0dG9uID09IDIpIHsKLSAgICAgICAgZS5lZGl0b3IudGV4dElucHV0Lm9u
Q29udGV4dE1lbnUoZS5kb21FdmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFjdHJsICYmICFhbHQpIHsKLSAgICAgICAgaWYgKGJ1dHRvbiA9PSAwICYmIGUuZWRp
dG9yLmluTXVsdGlTZWxlY3RNb2RlKQotICAgICAgICAgICAgZS5lZGl0b3IuZXhpdE11bHRpU2Vs
ZWN0TW9kZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGVkaXRvciA9IGUu
ZWRpdG9yOwotICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uOwotICAgIHZhciBp
c011bHRpU2VsZWN0ID0gZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlOwotICAgIHZhciBwb3MgPSBl
LmdldERvY3VtZW50UG9zaXRpb24oKTsKLSAgICB2YXIgY3Vyc29yID0gc2VsZWN0aW9uLmdldEN1
cnNvcigpOwotICAgIHZhciBpblNlbGVjdGlvbiA9IGUuaW5TZWxlY3Rpb24oKSB8fCAoc2VsZWN0
aW9uLmlzRW1wdHkoKSAmJiBpc1NhbWVQb2ludChwb3MsIGN1cnNvcikpOwotCi0KLSAgICB2YXIg
bW91c2VYID0gZS54LCBtb3VzZVkgPSBlLnk7Ci0gICAgdmFyIG9uTW91c2VTZWxlY3Rpb24gPSBm
dW5jdGlvbihlKSB7Ci0gICAgICAgIG1vdXNlWCA9IGUuY2xpZW50WDsKLSAgICAgICAgbW91c2VZ
ID0gZS5jbGllbnRZOwotICAgIH07Ci0KLSAgICB2YXIgYmxvY2tTZWxlY3QgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgdmFyIG5ld0N1cnNvciA9IGVkaXRvci5yZW5kZXJlci5waXhlbFRvU2NyZWVu
Q29vcmRpbmF0ZXMobW91c2VYLCBtb3VzZVkpOwotICAgICAgICB2YXIgY3Vyc29yID0gc2Vzc2lv
bi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24obmV3Q3Vyc29yLnJvdywgbmV3Q3Vyc29yLmNvbHVt
bik7Ci0KLSAgICAgICAgaWYgKGlzU2FtZVBvaW50KHNjcmVlbkN1cnNvciwgbmV3Q3Vyc29yKQot
ICAgICAgICAgICAgJiYgaXNTYW1lUG9pbnQoY3Vyc29yLCBzZWxlY3Rpb24uc2VsZWN0aW9uTGVh
ZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNjcmVlbkN1cnNvciA9IG5ld0N1cnNv
cjsKLQotICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGN1cnNv
cik7Ci0gICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKLSAgICAgICAg
ZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7Ci0KLSAgICAgICAgZWRpdG9y
LnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMocmVjdFNlbCk7Ci0gICAgICAgIHJlY3RTZWwgPSBzZWxl
Y3Rpb24ucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKHNjcmVlbkN1cnNvciwgc2NyZWVuQW5jaG9yKTsK
LSAgICAgICAgcmVjdFNlbC5mb3JFYWNoKGVkaXRvci5hZGRTZWxlY3Rpb25NYXJrZXIsIGVkaXRv
cik7Ci0gICAgICAgIGVkaXRvci51cGRhdGVTZWxlY3Rpb25NYXJrZXJzKCk7Ci0gICAgfTsKLSAg
ICAKLSAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwotICAgIHZhciBzY3JlZW5BbmNo
b3IgPSBlZGl0b3IucmVuZGVyZXIucGl4ZWxUb1NjcmVlbkNvb3JkaW5hdGVzKG1vdXNlWCwgbW91
c2VZKTsKLSAgICB2YXIgc2NyZWVuQ3Vyc29yID0gc2NyZWVuQW5jaG9yOwotCi0gICAgCi0KLSAg
ICBpZiAoY3RybCAmJiAhc2hpZnQgJiYgIWFsdCAmJiBidXR0b24gPT0gMCkgewotICAgICAgICBp
ZiAoIWlzTXVsdGlTZWxlY3QgJiYgaW5TZWxlY3Rpb24pCi0gICAgICAgICAgICByZXR1cm47IC8v
IGRyYWdnaW5nCi0KLSAgICAgICAgaWYgKCFpc011bHRpU2VsZWN0KSB7Ci0gICAgICAgICAgICB2
YXIgcmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7Ci0gICAgICAgICAgICBlZGl0
b3IuYWRkU2VsZWN0aW9uTWFya2VyKHJhbmdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBv
bGRSYW5nZSA9IHNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VBdFBvaW50KHBvcyk7Ci0KLSAgICAg
ICAgZXZlbnQuY2FwdHVyZShlZGl0b3IuY29udGFpbmVyLCBmdW5jdGlvbigpe30sIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgdmFyIHRtcFNlbCA9IHNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2Uo
KTsKLQotICAgICAgICAgICAgaWYgKG9sZFJhbmdlICYmIHRtcFNlbC5pc0VtcHR5KCkgJiYgaXNT
YW1lUG9pbnQob2xkUmFuZ2UuY3Vyc29yLCB0bXBTZWwuY3Vyc29yKSkKLSAgICAgICAgICAgICAg
ICBzZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQodG1wU2VsLmN1cnNvcik7Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtlcihyYW5nZSk7Ci0gICAgICAgICAgICAgICAgICAg
IHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0bXBTZWwpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9KTsKLQotICAgIH0gZWxzZSBpZiAoYWx0ICYmIGJ1dHRvbiA9PSAwKSB7Ci0gICAgICAgIGUu
c3RvcCgpOwotCi0gICAgICAgIGlmIChpc011bHRpU2VsZWN0ICYmICFjdHJsKQotICAgICAgICAg
ICAgc2VsZWN0aW9uLnRvU2luZ2xlUmFuZ2UoKTsKLSAgICAgICAgZWxzZSBpZiAoIWlzTXVsdGlT
ZWxlY3QgJiYgY3RybCkKLSAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSgpOwotCi0gICAg
ICAgIHZhciByZWN0U2VsID0gW107Ci0gICAgICAgIGlmIChzaGlmdCkgewotICAgICAgICAgICAg
c2NyZWVuQW5jaG9yID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oc2VsZWN0aW9u
LmxlYWQpOwotICAgICAgICAgICAgYmxvY2tTZWxlY3QoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOwotICAgICAgICAg
ICAgc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHZh
ciBvbk1vdXNlU2VsZWN0aW9uRW5kID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgY2xlYXJJ
bnRlcnZhbCh0aW1lcklkKTsKLSAgICAgICAgICAgIGVkaXRvci5yZW1vdmVTZWxlY3Rpb25NYXJr
ZXJzKHJlY3RTZWwpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0U2VsLmxl
bmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyZWN0U2VsW2ld
KTsKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgb25TZWxlY3Rpb25JbnRlcnZhbCA9IGJsb2Nr
U2VsZWN0OwotCi0gICAgICAgIGV2ZW50LmNhcHR1cmUoZWRpdG9yLmNvbnRhaW5lciwgb25Nb3Vz
ZVNlbGVjdGlvbiwgb25Nb3VzZVNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIHZhciB0aW1lcklkID0g
c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7b25TZWxlY3Rpb25JbnRlcnZhbCgpO30sIDIwKTsKLQot
ICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0KLX0KLQotCi1leHBvcnRz
Lm9uTW91c2VEb3duID0gb25Nb3VzZURvd247Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvY29t
bWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgewotZXhwb3J0cy5kZWZhdWx0Q29tbWFuZHMgPSBbewotICAgIG5hbWU6
ICJhZGRDdXJzb3JBYm92ZSIsCi0gICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5z
ZWxlY3RNb3JlTGluZXMoLTEpOyB9LAotICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1VcCIs
IG1hYzogIkN0cmwtQWx0LVVwIn0sCi0gICAgcmVhZG9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1l
OiAiYWRkQ3Vyc29yQmVsb3ciLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iu
c2VsZWN0TW9yZUxpbmVzKDEpOyB9LAotICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1Eb3du
IiwgbWFjOiAiQ3RybC1BbHQtRG93biJ9LAotICAgIHJlYWRvbmx5OiB0cnVlCi19LCB7Ci0gICAg
bmFtZTogImFkZEN1cnNvckFib3ZlU2tpcEN1cnJlbnQiLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVk
aXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKC0xLCB0cnVlKTsgfSwKLSAgICBiaW5kS2V5
OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtVXAiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1VcCJ9LAot
ICAgIHJlYWRvbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogImFkZEN1cnNvckJlbG93U2tpcEN1
cnJlbnQiLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxp
bmVzKDEsIHRydWUpOyB9LAotICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1TaGlmdC1Eb3du
IiwgbWFjOiAiQ3RybC1BbHQtU2hpZnQtRG93biJ9LAotICAgIHJlYWRvbmx5OiB0cnVlCi19LCB7
Ci0gICAgbmFtZTogInNlbGVjdE1vcmVCZWZvcmUiLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRv
cikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgtMSk7IH0sCi0gICAgYmluZEtleToge3dpbjogIkN0cmwt
QWx0LUxlZnQiLCBtYWM6ICJDdHJsLUFsdC1MZWZ0In0sCi0gICAgcmVhZG9ubHk6IHRydWUKLX0s
IHsKLSAgICBuYW1lOiAic2VsZWN0TW9yZUFmdGVyIiwKLSAgICBleGVjOiBmdW5jdGlvbihlZGl0
b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoMSk7IH0sCi0gICAgYmluZEtleToge3dpbjogIkN0cmwt
QWx0LVJpZ2h0IiwgbWFjOiAiQ3RybC1BbHQtUmlnaHQifSwKLSAgICByZWFkb25seTogdHJ1ZQot
fSwgewotICAgIG5hbWU6ICJzZWxlY3ROZXh0QmVmb3JlIiwKLSAgICBleGVjOiBmdW5jdGlvbihl
ZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoLTEsIHRydWUpOyB9LAotICAgIGJpbmRLZXk6IHt3
aW46ICJDdHJsLUFsdC1TaGlmdC1MZWZ0IiwgbWFjOiAiQ3RybC1BbHQtU2hpZnQtTGVmdCJ9LAot
ICAgIHJlYWRvbmx5OiB0cnVlCi19LCB7Ci0gICAgbmFtZTogInNlbGVjdE5leHRBZnRlciIsCi0g
ICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKDEsIHRydWUpOyB9
LAotICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLUFsdC1TaGlmdC1SaWdodCIsIG1hYzogIkN0cmwt
QWx0LVNoaWZ0LVJpZ2h0In0sCi0gICAgcmVhZG9ubHk6IHRydWUKLX0sIHsKLSAgICBuYW1lOiAi
c3BsaXRJbnRvTGluZXMiLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubXVs
dGlTZWxlY3Quc3BsaXRJbnRvTGluZXMoKTsgfSwKLSAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1B
bHQtTCIsIG1hYzogIkN0cmwtQWx0LUwifSwKLSAgICByZWFkb25seTogdHJ1ZQotfSwgewotICAg
IG5hbWU6ICJhbGlnbkN1cnNvcnMiLAotICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0
b3IuYWxpZ25DdXJzb3JzKCk7IH0sCi0gICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LUEiLCBt
YWM6ICJDdHJsLUFsdC1BIn0KLX1dOwotZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRzID0gW3sK
LSAgICBuYW1lOiAic2luZ2xlU2VsZWN0aW9uIiwKLSAgICBiaW5kS2V5OiAiZXNjIiwKLSAgICBl
eGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsgfSwK
LSAgICByZWFkb25seTogdHJ1ZSwKLSAgICBpc0F2YWlsYWJsZTogZnVuY3Rpb24oZWRpdG9yKSB7
cmV0dXJuIGVkaXRvciAmJiBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGV9Ci19XTsKLQotdmFyIEhh
c2hIYW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRs
ZXI7Ci1leHBvcnRzLmtleWJvYXJkSGFuZGxlciA9IG5ldyBIYXNoSGFuZGxlcihleHBvcnRzLm11
bHRpU2VsZWN0Q29tbWFuZHMpOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL3dvcmtlci93b3Jr
ZXJfY2xpZW50JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29v
cCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL2NvbmZpZyddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29v
cCIpOwotdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIiku
RXZlbnRFbWl0dGVyOwotdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOwotCi12YXIg
V29ya2VyQ2xpZW50ID0gZnVuY3Rpb24odG9wTGV2ZWxOYW1lc3BhY2VzLCBtb2QsIGNsYXNzbmFt
ZSkgewotICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQo
dGhpcyk7Ci0gICAgdGhpcy5vbk1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZS5iaW5kKHRoaXMpOwot
ICAgIHRoaXMub25FcnJvciA9IHRoaXMub25FcnJvci5iaW5kKHRoaXMpOwotCi0gICAgdmFyIHdv
cmtlclVybDsKLSAgICBpZiAoY29uZmlnLmdldCgicGFja2FnZWQiKSkgewotICAgICAgICB3b3Jr
ZXJVcmwgPSBjb25maWcubW9kdWxlVXJsKG1vZCwgIndvcmtlciIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHZhciBub3JtYWxpemVQYXRoID0gdGhpcy4kbm9ybWFsaXplUGF0aDsKLSAgICAgICAg
aWYgKHR5cGVvZiByZXF1aXJlLnN1cHBvcnRzICE9PSAidW5kZWZpbmVkIiAmJiByZXF1aXJlLnN1
cHBvcnRzLmluZGV4T2YoInVjanMyLXBpbmYtMCIpID49IDApIHsKLSAgICAgICAgICAgIHdvcmtl
clVybCA9IHJlcXVpcmUubmFtZVRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlcl9zb3VyY2VtaW50Iik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZS5uYW1lVG9VcmwgJiYg
IXJlcXVpcmUudG9VcmwpCi0gICAgICAgICAgICAgICAgcmVxdWlyZS50b1VybCA9IHJlcXVpcmUu
bmFtZVRvVXJsOwotICAgICAgICAgICAgd29ya2VyVXJsID0gbm9ybWFsaXplUGF0aChyZXF1aXJl
LnRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlciIsIG51bGwsICJfIikpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIHRsbnMgPSB7fTsKLSAgICAgICAgdG9wTGV2ZWxOYW1lc3BhY2VzLmZvckVhY2go
ZnVuY3Rpb24obnMpIHsKLSAgICAgICAgICAgIHRsbnNbbnNdID0gbm9ybWFsaXplUGF0aChyZXF1
aXJlLnRvVXJsKG5zLCBudWxsLCAiXyIpLnJlcGxhY2UoLy5qcyhcPy4qKT8kLywgIiIpKTsKLSAg
ICAgICAgfSk7Ci0gICAgfQotCi0gICAgdGhpcy4kd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJV
cmwpOwotICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Ci0gICAgICAgIGluaXQgOiB0cnVl
LAotICAgICAgICB0bG5zOiB0bG5zLAotICAgICAgICBtb2R1bGU6IG1vZCwKLSAgICAgICAgY2xh
c3NuYW1lOiBjbGFzc25hbWUKLSAgICB9KTsKLQotICAgIHRoaXMuY2FsbGJhY2tJZCA9IDE7Ci0g
ICAgdGhpcy5jYWxsYmFja3MgPSB7fTsKLQotICAgIHRoaXMuJHdvcmtlci5vbmVycm9yID0gdGhp
cy5vbkVycm9yOwotICAgIHRoaXMuJHdvcmtlci5vbm1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZTsK
LX07Ci0KLShmdW5jdGlvbigpewotCi0gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0
ZXIpOwotCi0gICAgdGhpcy5vbkVycm9yID0gZnVuY3Rpb24oZSkgewotICAgICAgICB3aW5kb3cu
Y29uc29sZSAmJiBjb25zb2xlLmxvZyAmJiBjb25zb2xlLmxvZyhlKTsKLSAgICAgICAgdGhyb3cg
ZTsKLSAgICB9OwotCi0gICAgdGhpcy5vbk1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAg
IHZhciBtc2cgPSBlLmRhdGE7Ci0gICAgICAgIHN3aXRjaChtc2cudHlwZSkgewotICAgICAgICAg
ICAgY2FzZSAibG9nIjoKLSAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xl
LmxvZyAmJiBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBtc2cuZGF0YSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgImV2ZW50IjoKLSAgICAgICAgICAgICAg
ICB0aGlzLl9lbWl0KG1zZy5uYW1lLCB7ZGF0YTogbXNnLmRhdGF9KTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAiY2FsbCI6Ci0gICAgICAgICAgICAgICAgdmFy
IGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbbXNnLmlkXTsKLSAgICAgICAgICAgICAgICBpZiAo
Y2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobXNnLmRhdGEpOwotICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbbXNnLmlkXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGhpcy4kbm9ybWFsaXplUGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKLSAgICAgICAgaWYgKCFs
b2NhdGlvbi5ob3N0KSAvLyBuZWVkZWQgZm9yIGZpbGU6Ly8gcHJvdG9jb2wKLSAgICAgICAgICAg
IHJldHVybiBwYXRoOwotICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eW2Etel0rOlwvXC9b
XlwvXSsvLCAiIik7IC8vIFJlbW92ZSBkb21haW4gbmFtZSBhbmQgcmVidWlsZCBpdAotICAgICAg
ICBwYXRoID0gbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICsgbG9jYXRpb24uaG9zdAotICAgICAg
ICAgICAgKyAocGF0aC5jaGFyQXQoMCkgPT0gIi8iID8gIiIgOiBsb2NhdGlvbi5wYXRobmFtZS5y
ZXBsYWNlKC9cL1teXC9dKiQvLCAiIikpCi0gICAgICAgICAgICArICIvIiArIHBhdGgucmVwbGFj
ZSgvXltcL10rLywgIiIpOwotICAgICAgICByZXR1cm4gcGF0aDsKLSAgICB9OwotCi0gICAgdGhp
cy50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5fZW1pdCgidGVybWluYXRl
Iiwge30pOwotICAgICAgICB0aGlzLiR3b3JrZXIudGVybWluYXRlKCk7Ci0gICAgICAgIHRoaXMu
JHdvcmtlciA9IG51bGw7Ci0gICAgICAgIHRoaXMuJGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJj
aGFuZ2UiLCB0aGlzLmNoYW5nZUxpc3RlbmVyKTsKLSAgICAgICAgdGhpcy4kZG9jID0gbnVsbDsK
LSAgICB9OwotCi0gICAgdGhpcy5zZW5kID0gZnVuY3Rpb24oY21kLCBhcmdzKSB7Ci0gICAgICAg
IHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDogY21kLCBhcmdzOiBhcmdzfSk7Ci0g
ICAgfTsKLQotICAgIHRoaXMuY2FsbCA9IGZ1bmN0aW9uKGNtZCwgYXJncywgY2FsbGJhY2spIHsK
LSAgICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmNhbGxi
YWNrSWQrKzsKLSAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrOwotICAg
ICAgICAgICAgYXJncy5wdXNoKGlkKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnNlbmQoY21k
LCBhcmdzKTsKLSAgICB9OwotCi0gICAgdGhpcy5lbWl0ID0gZnVuY3Rpb24oZXZlbnQsIGRhdGEp
IHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7
ZXZlbnQ6IGV2ZW50LCBkYXRhOiB7ZGF0YTogZGF0YS5kYXRhfX0pOwotICAgICAgICB9Ci0gICAg
ICAgIGNhdGNoKGV4KSB7fQotICAgIH07Ci0KLSAgICB0aGlzLmF0dGFjaFRvRG9jdW1lbnQgPSBm
dW5jdGlvbihkb2MpIHsKLSAgICAgICAgaWYodGhpcy4kZG9jKQotICAgICAgICAgICAgdGhpcy50
ZXJtaW5hdGUoKTsKLQotICAgICAgICB0aGlzLiRkb2MgPSBkb2M7Ci0gICAgICAgIHRoaXMuY2Fs
bCgic2V0VmFsdWUiLCBbZG9jLmdldFZhbHVlKCldKTsKLSAgICAgICAgZG9jLm9uKCJjaGFuZ2Ui
LCB0aGlzLmNoYW5nZUxpc3RlbmVyKTsKLSAgICB9OwotCi0gICAgdGhpcy5jaGFuZ2VMaXN0ZW5l
ciA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgZS5yYW5nZSA9IHsKLSAgICAgICAgICAgIHN0YXJ0
OiBlLmRhdGEucmFuZ2Uuc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGUuZGF0YS5yYW5nZS5lbmQK
LSAgICAgICAgfTsKLSAgICAgICAgdGhpcy5lbWl0KCJjaGFuZ2UiLCBlKTsKLSAgICB9OwotCi19
KS5jYWxsKFdvcmtlckNsaWVudC5wcm90b3R5cGUpOwotCi0KLXZhciBVSVdvcmtlckNsaWVudCA9
IGZ1bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUpIHsKLSAgICB0aGlz
LmNoYW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpOwotICAgIHRo
aXMuY2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlzLm1l
c3NhZ2VCdWZmZXIgPSBbXTsKLQotICAgIHZhciBtYWluID0gbnVsbDsKLSAgICB2YXIgc2VuZGVy
ID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIpOwotICAgIHZhciBfc2VsZiA9IHRoaXM7Ci0K
LSAgICB0aGlzLiR3b3JrZXIgPSB7fQotICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUgPSBmdW5j
dGlvbigpIHt9OwotICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgX3NlbGYubWVzc2FnZUJ1ZmZlci5wdXNoKGUpOwotICAgICAgICBtYWluICYmIHNl
dFRpbWVvdXQocHJvY2Vzc05leHQpOwotICAgIH07Ci0KLSAgICB2YXIgcHJvY2Vzc05leHQgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgdmFyIG1zZyA9IF9zZWxmLm1lc3NhZ2VCdWZmZXIuc2hpZnQo
KTsKLSAgICAgICAgaWYgKG1zZy5jb21tYW5kKQotICAgICAgICAgICAgbWFpblttc2cuY29tbWFu
ZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpOwotICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQpCi0g
ICAgICAgICAgICBzZW5kZXIuX2VtaXQobXNnLmV2ZW50LCBtc2cuZGF0YSk7Ci0gICAgfTsKLQot
ICAgIHNlbmRlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKG1zZykgewotICAgICAgICBfc2VsZi5v
bk1lc3NhZ2Uoe2RhdGE6IG1zZ30pOwotICAgIH07Ci0gICAgc2VuZGVyLmNhbGxiYWNrID0gZnVu
Y3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewotICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHt0eXBl
OiAiY2FsbCIsIGlkOiBjYWxsYmFja0lkLCBkYXRhOiBkYXRhfSk7Ci0gICAgfTsKLSAgICBzZW5k
ZXIuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKLSAgICAgICAgdGhpcy5wb3N0TWVzc2Fn
ZSh7dHlwZTogImV2ZW50IiwgbmFtZTogbmFtZSwgZGF0YTogZGF0YX0pOwotICAgIH07Ci0KLSAg
ICBjb25maWcubG9hZE1vZHVsZShbIndvcmtlciIsIG1vZF0sIGZ1bmN0aW9uKE1haW4pIHsKLSAg
ICAgICAgbWFpbiA9IG5ldyBNYWluW2NsYXNzbmFtZV0oc2VuZGVyKTsKLSAgICAgICAgd2hpbGUg
KF9zZWxmLm1lc3NhZ2VCdWZmZXIubGVuZ3RoKQotICAgICAgICAgICAgcHJvY2Vzc05leHQoKTsK
LSAgICB9KTsKLX07Ci0KLVVJV29ya2VyQ2xpZW50LnByb3RvdHlwZSA9IFdvcmtlckNsaWVudC5w
cm90b3R5cGU7Ci0KLWV4cG9ydHMuVUlXb3JrZXJDbGllbnQgPSBVSVdvcmtlckNsaWVudDsKLWV4
cG9ydHMuV29ya2VyQ2xpZW50ID0gV29ya2VyQ2xpZW50OwotCi19KTsKLWFjZS5kZWZpbmUoJ2Fj
ZS9wbGFjZWhvbGRlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3Jh
bmdlJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsICdhY2UvbGliL29vcCddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3Jh
bmdlIikuUmFuZ2U7Ci12YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1p
dHRlciIpLkV2ZW50RW1pdHRlcjsKLXZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKLQot
dmFyIFBsYWNlSG9sZGVyID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGVuZ3RoLCBwb3MsIG90aGVycywg
bWFpbkNsYXNzLCBvdGhlcnNDbGFzcykgewotICAgIHZhciBfc2VsZiA9IHRoaXM7Ci0gICAgdGhp
cy5sZW5ndGggPSBsZW5ndGg7Ci0gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKLSAgICB0aGlz
LmRvYyA9IHNlc3Npb24uZ2V0RG9jdW1lbnQoKTsKLSAgICB0aGlzLm1haW5DbGFzcyA9IG1haW5D
bGFzczsKLSAgICB0aGlzLm90aGVyc0NsYXNzID0gb3RoZXJzQ2xhc3M7Ci0gICAgdGhpcy4kb25V
cGRhdGUgPSB0aGlzLm9uVXBkYXRlLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5kb2Mub24oImNoYW5n
ZSIsIHRoaXMuJG9uVXBkYXRlKTsKLSAgICB0aGlzLiRvdGhlcnMgPSBvdGhlcnM7Ci0gICAgCi0g
ICAgdGhpcy4kb25DdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIF9zZWxmLm9uQ3Vyc29yQ2hhbmdlKCk7Ci0gICAg
ICAgIH0pOwotICAgIH07Ci0gICAgCi0gICAgdGhpcy4kcG9zID0gcG9zOwotICAgIHZhciB1bmRv
U3RhY2sgPSBzZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9TdGFjayB8fCBzZXNzaW9uLmdl
dFVuZG9NYW5hZ2VyKCkuJHVuZG9zdGFjayB8fCB7bGVuZ3RoOiAtMX07Ci0gICAgdGhpcy4kdW5k
b1N0YWNrRGVwdGggPSAgdW5kb1N0YWNrLmxlbmd0aDsKLSAgICB0aGlzLnNldHVwKCk7Ci0KLSAg
ICBzZXNzaW9uLnNlbGVjdGlvbi5vbigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25DdXJzb3JDaGFu
Z2UpOwotfTsKLQotKGZ1bmN0aW9uKCkgewotCi0gICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVu
dEVtaXR0ZXIpOwotICAgIHRoaXMuc2V0dXAgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIF9z
ZWxmID0gdGhpczsKLSAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwotICAgICAgICB2YXIgc2Vz
c2lvbiA9IHRoaXMuc2Vzc2lvbjsKLSAgICAgICAgdmFyIHBvcyA9IHRoaXMuJHBvczsKLQotICAg
ICAgICB0aGlzLnBvcyA9IGRvYy5jcmVhdGVBbmNob3IocG9zLnJvdywgcG9zLmNvbHVtbik7Ci0g
ICAgICAgIHRoaXMubWFya2VySWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFuZ2UocG9zLnJv
dywgcG9zLmNvbHVtbiwgcG9zLnJvdywgcG9zLmNvbHVtbiArIHRoaXMubGVuZ3RoKSwgdGhpcy5t
YWluQ2xhc3MsIG51bGwsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5wb3Mub24oImNoYW5nZSIsIGZ1
bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihfc2VsZi5t
YXJrZXJJZCk7Ci0gICAgICAgICAgICBfc2VsZi5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2Vy
KG5ldyBSYW5nZShldmVudC52YWx1ZS5yb3csIGV2ZW50LnZhbHVlLmNvbHVtbiwgZXZlbnQudmFs
dWUucm93LCBldmVudC52YWx1ZS5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgX3NlbGYubWFpbkNsYXNz
LCBudWxsLCBmYWxzZSk7Ci0gICAgICAgIH0pOwotICAgICAgICB0aGlzLm90aGVycyA9IFtdOwot
ICAgICAgICB0aGlzLiRvdGhlcnMuZm9yRWFjaChmdW5jdGlvbihvdGhlcikgewotICAgICAgICAg
ICAgdmFyIGFuY2hvciA9IGRvYy5jcmVhdGVBbmNob3Iob3RoZXIucm93LCBvdGhlci5jb2x1bW4p
OwotICAgICAgICAgICAgX3NlbGYub3RoZXJzLnB1c2goYW5jaG9yKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHNlc3Npb24uc2V0VW5kb1NlbGVjdChmYWxzZSk7Ci0gICAgfTsKLSAgICB0aGlzLnNo
b3dPdGhlck1hcmtlcnMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYodGhpcy5vdGhlcnNBY3Rp
dmUpIHJldHVybjsKLSAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247Ci0gICAgICAg
IHZhciBfc2VsZiA9IHRoaXM7Ci0gICAgICAgIHRoaXMub3RoZXJzQWN0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5vdGhlcnMuZm9yRWFjaChmdW5jdGlvbihhbmNob3IpIHsKLSAgICAgICAgICAg
IGFuY2hvci5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShhbmNob3Iucm93
LCBhbmNob3IuY29sdW1uLCBhbmNob3Iucm93LCBhbmNob3IuY29sdW1uK19zZWxmLmxlbmd0aCks
IF9zZWxmLm90aGVyc0NsYXNzLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgICAgICBhbmNob3Iub24o
ImNoYW5nZSIsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1v
dmVNYXJrZXIoYW5jaG9yLm1hcmtlcklkKTsKLSAgICAgICAgICAgICAgICBhbmNob3IubWFya2Vy
SWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFuZ2UoZXZlbnQudmFsdWUucm93LCBldmVudC52
YWx1ZS5jb2x1bW4sIGV2ZW50LnZhbHVlLnJvdywgZXZlbnQudmFsdWUuY29sdW1uK19zZWxmLmxl
bmd0aCksIF9zZWxmLm90aGVyc0NsYXNzLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfSk7Ci0gICAgfTsKLSAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYoIXRoaXMub3RoZXJzQWN0aXZlKSByZXR1cm47Ci0gICAgICAgIHRo
aXMub3RoZXJzQWN0aXZlID0gZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5vdGhlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVN
YXJrZXIodGhpcy5vdGhlcnNbaV0ubWFya2VySWQpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICB0
aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgdmFyIGRlbHRhID0gZXZl
bnQuZGF0YTsKLSAgICAgICAgdmFyIHJhbmdlID0gZGVsdGEucmFuZ2U7Ci0gICAgICAgIGlmKHJh
bmdlLnN0YXJ0LnJvdyAhPT0gcmFuZ2UuZW5kLnJvdykgcmV0dXJuOwotICAgICAgICBpZihyYW5n
ZS5zdGFydC5yb3cgIT09IHRoaXMucG9zLnJvdykgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy4k
dXBkYXRpbmcpIHJldHVybjsKLSAgICAgICAgdGhpcy4kdXBkYXRpbmcgPSB0cnVlOwotICAgICAg
ICB2YXIgbGVuZ3RoRGlmZiA9IGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiID8gcmFuZ2Uu
ZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbiA6IHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHJh
bmdlLmVuZC5jb2x1bW47Ci0gICAgICAgIAotICAgICAgICBpZihyYW5nZS5zdGFydC5jb2x1bW4g
Pj0gdGhpcy5wb3MuY29sdW1uICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8PSB0aGlzLnBvcy5jb2x1
bW4gKyB0aGlzLmxlbmd0aCArIDEpIHsKLSAgICAgICAgICAgIHZhciBkaXN0YW5jZUZyb21TdGFy
dCA9IHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHRoaXMucG9zLmNvbHVtbjsKLSAgICAgICAgICAgIHRo
aXMubGVuZ3RoICs9IGxlbmd0aERpZmY7Ci0gICAgICAgICAgICBpZighdGhpcy5zZXNzaW9uLiRm
cm9tVW5kbykgewotICAgICAgICAgICAgICAgIGlmKGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRl
eHQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLm90aGVycy5sZW5n
dGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVy
UG9zID0gdGhpcy5vdGhlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UG9z
ID0ge3Jvdzogb3RoZXJQb3Mucm93LCBjb2x1bW46IG90aGVyUG9zLmNvbHVtbiArIGRpc3RhbmNl
RnJvbVN0YXJ0fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKG90aGVyUG9zLnJvdyA9PT0g
cmFuZ2Uuc3RhcnQucm93ICYmIHJhbmdlLnN0YXJ0LmNvbHVtbiA8IG90aGVyUG9zLmNvbHVtbikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQb3MuY29sdW1uICs9IGxlbmd0aERpZmY7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvYy5pbnNlcnQobmV3UG9zLCBkZWx0YS50
ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZihk
ZWx0YS5hY3Rpb24gPT09ICJyZW1vdmVUZXh0IikgewotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBvdGhlclBvcyA9IHRoaXMub3RoZXJzW2ldOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6IG90aGVyUG9zLnJvdywgY29sdW1uOiBv
dGhlclBvcy5jb2x1bW4gKyBkaXN0YW5jZUZyb21TdGFydH07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZihvdGhlclBvcy5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJiByYW5nZS5zdGFydC5j
b2x1bW4gPCBvdGhlclBvcy5jb2x1bW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
UG9zLmNvbHVtbiArPSBsZW5ndGhEaWZmOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
b2MucmVtb3ZlKG5ldyBSYW5nZShuZXdQb3Mucm93LCBuZXdQb3MuY29sdW1uLCBuZXdQb3Mucm93
LCBuZXdQb3MuY29sdW1uIC0gbGVuZ3RoRGlmZikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKHJhbmdlLnN0YXJ0LmNvbHVtbiA9
PT0gdGhpcy5wb3MuY29sdW1uICYmIGRlbHRhLmFjdGlvbiA9PT0gImluc2VydFRleHQiKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnBvcy5zZXRQb3NpdGlvbih0aGlzLnBvcy5yb3csIHRoaXMucG9zLmNv
bHVtbiAtIGxlbmd0aERpZmYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLm90aGVycy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBvdGhlciA9IHRoaXMub3RoZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBuZXdQb3MgPSB7cm93OiBvdGhlci5yb3csIGNvbHVtbjogb3RoZXIuY29sdW1u
IC0gbGVuZ3RoRGlmZn07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYob3RoZXIucm93
ID09PSByYW5nZS5zdGFydC5yb3cgJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDwgb3RoZXIuY29sdW1u
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQb3MuY29sdW1uICs9IGxlbmd0
aERpZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuc2V0UG9zaXRpb24obmV3
UG9zLnJvdywgbmV3UG9zLmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgaWYocmFuZ2Uuc3RhcnQuY29sdW1uID09PSB0aGlzLnBvcy5jb2x1
bW4gJiYgZGVsdGEuYWN0aW9uID09PSAicmVtb3ZlVGV4dCIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5vdGhlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgb3RoZXIgPSB0aGlzLm90aGVyc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZihvdGhlci5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJiByYW5nZS5z
dGFydC5jb2x1bW4gPCBvdGhlci5jb2x1bW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3RoZXIuc2V0UG9zaXRpb24ob3RoZXIucm93LCBvdGhlci5jb2x1bW4gLSBsZW5ndGhE
aWZmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5wb3MuX2VtaXQoImNoYW5n
ZSIsIHt2YWx1ZTogdGhpcy5wb3N9KTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5vdGhlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICB0aGlzLm90aGVyc1tp
XS5fZW1pdCgiY2hhbmdlIiwge3ZhbHVlOiB0aGlzLm90aGVyc1tpXX0pOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuJHVwZGF0aW5nID0gZmFsc2U7Ci0gICAgfTsKLQot
ICAgIHRoaXMub25DdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbihldmVudCkgewotICAgICAgICBpZiAo
dGhpcy4kdXBkYXRpbmcpIHJldHVybjsKLSAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5z
ZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7Ci0gICAgICAgIGlmKHBvcy5yb3cgPT09IHRoaXMucG9zLnJv
dyAmJiBwb3MuY29sdW1uID49IHRoaXMucG9zLmNvbHVtbiAmJiBwb3MuY29sdW1uIDw9IHRoaXMu
cG9zLmNvbHVtbiArIHRoaXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aGlzLnNob3dPdGhlck1h
cmtlcnMoKTsKLSAgICAgICAgICAgIHRoaXMuX2VtaXQoImN1cnNvckVudGVyIiwgZXZlbnQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5oaWRlT3RoZXJNYXJrZXJzKCk7Ci0g
ICAgICAgICAgICB0aGlzLl9lbWl0KCJjdXJzb3JMZWF2ZSIsIGV2ZW50KTsKLSAgICAgICAgfQot
ICAgIH07ICAgIAotICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMu
c2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5tYXJrZXJJZCk7Ci0gICAgICAgIHRoaXMuaGlkZU90
aGVyTWFya2VycygpOwotICAgICAgICB0aGlzLmRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFu
Z2UiLCB0aGlzLiRvblVwZGF0ZSk7Ci0gICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24ucmVt
b3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOwot
ICAgICAgICB0aGlzLnBvcy5kZXRhY2goKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLm90aGVycy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdGhpcy5vdGhlcnNbaV0uZGV0
YWNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5zZXNzaW9uLnNldFVuZG9TZWxlY3QodHJ1
ZSk7Ci0gICAgfTsKLSAgICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZih0
aGlzLiR1bmRvU3RhY2tEZXB0aCA9PT0gLTEpCi0gICAgICAgICAgICB0aHJvdyBFcnJvcigiQ2Fu
Y2VsaW5nIHBsYWNlaG9sZGVycyBvbmx5IHN1cHBvcnRlZCB3aXRoIHVuZG8gbWFuYWdlciBhdHRh
Y2hlZCB0byBzZXNzaW9uLiIpOwotICAgICAgICB2YXIgdW5kb01hbmFnZXIgPSB0aGlzLnNlc3Np
b24uZ2V0VW5kb01hbmFnZXIoKTsKLSAgICAgICAgdmFyIHVuZG9zUmVxdWlyZWQgPSAodW5kb01h
bmFnZXIuJHVuZG9TdGFjayB8fCB1bmRvTWFuYWdlci4kdW5kb3N0YWNrKS5sZW5ndGggLSB0aGlz
LiR1bmRvU3RhY2tEZXB0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmRvc1JlcXVp
cmVkOyBpKyspIHsKLSAgICAgICAgICAgIHVuZG9NYW5hZ2VyLnVuZG8odHJ1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotfSkuY2FsbChQbGFjZUhvbGRlci5wcm90b3R5cGUpOwotCi0KLWV4cG9ydHMu
UGxhY2VIb2xkZXIgPSBQbGFjZUhvbGRlcjsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS9m
b2xkaW5nL2ZvbGRfbW9kZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBS
YW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Ci0KLXZhciBGb2xkTW9kZSA9IGV4
cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9OwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICB0
aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG51bGw7Ci0gICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtl
ciA9IG51bGw7Ci0gICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9s
ZFN0eWxlLCByb3cpIHsKLSAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsK
LSAgICAgICAgaWYgKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QobGluZSkpCi0gICAgICAg
ICAgICByZXR1cm4gInN0YXJ0IjsKLSAgICAgICAgaWYgKGZvbGRTdHlsZSA9PSAibWFya2JlZ2lu
ZW5kIgotICAgICAgICAgICAgICAgICYmIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIKLSAgICAgICAg
ICAgICAgICAmJiB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QobGluZSkpCi0gICAgICAgICAg
ICByZXR1cm4gImVuZCI7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9OwotCi0gICAgdGhpcy5n
ZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewot
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9OwotCi0gICAgdGhpcy5pbmRlbnRhdGlvbkJsb2Nr
ID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHsKLSAgICAgICAgdmFyIHJlID0gL1xT
LzsKLSAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKLSAgICAgICAgdmFy
IHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7Ci0gICAgICAgIGlmIChzdGFydExldmVsID09
IC0xKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzdGFydENvbHVtbiA9IGNv
bHVtbiB8fCBsaW5lLmxlbmd0aDsKLSAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVu
Z3RoKCk7Ci0gICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKLSAgICAgICAgdmFyIGVuZFJvdyA9
IHJvdzsKLQotICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKLSAgICAgICAgICAgIHZh
ciBsZXZlbCA9IHNlc3Npb24uZ2V0TGluZShyb3cpLnNlYXJjaChyZSk7Ci0KLSAgICAgICAgICAg
IGlmIChsZXZlbCA9PSAtMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgaWYgKGxldmVsIDw9IHN0YXJ0TGV2ZWwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGVuZFJvdyA9IHJvdzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlbmRSb3cg
PiBzdGFydFJvdykgewotICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGlu
ZShlbmRSb3cpLmxlbmd0aDsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3cs
IHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgYnJhY2tldCwg
cm93LCBjb2x1bW4sIHR5cGVSZSkgewotICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiByb3csIGNv
bHVtbjogY29sdW1uICsgMX07Ci0gICAgICAgIHZhciBlbmQgPSBzZXNzaW9uLiRmaW5kQ2xvc2lu
Z0JyYWNrZXQoYnJhY2tldCwgc3RhcnQsIHR5cGVSZSk7Ci0gICAgICAgIGlmICghZW5kKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBmdyA9IHNlc3Npb24uZm9sZFdpZGdldHNb
ZW5kLnJvd107Ci0gICAgICAgIGlmIChmdyA9PSBudWxsKQotICAgICAgICAgICAgZncgPSB0aGlz
LmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZW5kLnJvdyk7Ci0KLSAgICAgICAgaWYgKGZ3ID09ICJz
dGFydCIgJiYgZW5kLnJvdyA+IHN0YXJ0LnJvdykgewotICAgICAgICAgICAgZW5kLnJvdyAtLTsK
LSAgICAgICAgICAgIGVuZC5jb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kLnJvdykubGVuZ3Ro
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQp
OwotICAgIH07Ci0KLSAgICB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2sgPSBmdW5jdGlvbihzZXNz
aW9uLCBicmFja2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7Ci0gICAgICAgIHZhciBlbmQgPSB7
cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKLSAgICAgICAgdmFyIHN0YXJ0ID0gc2Vzc2lvbi4k
ZmluZE9wZW5pbmdCcmFja2V0KGJyYWNrZXQsIGVuZCk7Ci0KLSAgICAgICAgaWYgKCFzdGFydCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBzdGFydC5jb2x1bW4rKzsKLSAgICAgICAg
ZW5kLmNvbHVtbi0tOwotCi0gICAgICAgIHJldHVybiAgUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwg
ZW5kKTsKLSAgICB9OwotfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwotCi19KTsKLQotYWNl
LmRlZmluZSgnYWNlL3RoZW1lL3RleHRtYXRlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2UvbGliL2RvbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUp
IHsKLQotCi1leHBvcnRzLmlzRGFyayA9IGZhbHNlOwotZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2Ut
dG0iOwotZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2UtdG0gLmFjZV9ndXR0ZXIge1wKLWJhY2tncm91
bmQ6ICNmMGYwZjA7XAotY29sb3I6ICMzMzM7XAotfVwKLS5hY2UtdG0gLmFjZV9wcmludC1tYXJn
aW4ge1wKLXdpZHRoOiAxcHg7XAotYmFja2dyb3VuZDogI2U4ZThlODtcCi19XAotLmFjZS10bSAu
YWNlX2ZvbGQge1wKLWJhY2tncm91bmQtY29sb3I6ICM2QjcyRTY7XAotfVwKLS5hY2UtdG0gLmFj
ZV9zY3JvbGxlciB7XAotYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcCi19XAotLmFjZS10bSAu
YWNlX2N1cnNvciB7XAotYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjaztcCi19XAotLmFjZS10
bSAuYWNlX292ZXJ3cml0ZS1jdXJzb3JzIC5hY2VfY3Vyc29yIHtcCi1ib3JkZXItbGVmdDogMHB4
O1wKLWJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjaztcCi19XAotLmFjZS10bSAuYWNlX2lu
dmlzaWJsZSB7XAotY29sb3I6IHJnYigxOTEsIDE5MSwgMTkxKTtcCi19XAotLmFjZS10bSAuYWNl
X3N0b3JhZ2UsXAotLmFjZS10bSAuYWNlX2tleXdvcmQge1wKLWNvbG9yOiBibHVlO1wKLX1cCi0u
YWNlLXRtIC5hY2VfY29uc3RhbnQge1wKLWNvbG9yOiByZ2IoMTk3LCA2LCAxMSk7XAotfVwKLS5h
Y2UtdG0gLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7XAotY29sb3I6IHJnYig4OCwgNzIsIDI0
Nik7XAotfVwKLS5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2Uge1wKLWNvbG9yOiBy
Z2IoODgsIDkyLCAyNDYpO1wKLX1cCi0uYWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkg
e1wKLWNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAotfVwKLS5hY2UtdG0gLmFjZV9pbnZhbGlkIHtc
Ci1iYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwgMC4xKTtcCi1jb2xvcjogcmVkO1wK
LX1cCi0uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKLWNvbG9yOiByZ2IoNjAs
IDc2LCAxMTQpO1wKLX1cCi0uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKLWNv
bG9yOiByZ2IoNiwgMTUwLCAxNCk7XAotfVwKLS5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV90eXBl
LFwKLS5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7XAotY29sb3I6IHJnYigxMDksIDEy
MSwgMjIyKTtcCi19XAotLmFjZS10bSAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCi1jb2xv
cjogcmdiKDEwNCwgMTE4LCAxMzUpO1wKLX1cCi0uYWNlLXRtIC5hY2Vfc3RyaW5nIHtcCi1jb2xv
cjogcmdiKDMsIDEwNiwgNyk7XAotfVwKLS5hY2UtdG0gLmFjZV9jb21tZW50IHtcCi1jb2xvcjog
cmdiKDc2LCAxMzYsIDEwNyk7XAotfVwKLS5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2Mge1wK
LWNvbG9yOiByZ2IoMCwgMTAyLCAyNTUpO1wKLX1cCi0uYWNlLXRtIC5hY2VfY29tbWVudC5hY2Vf
ZG9jLmFjZV90YWcge1wKLWNvbG9yOiByZ2IoMTI4LCAxNTksIDE5MSk7XAotfVwKLS5hY2UtdG0g
LmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XAotY29sb3I6IHJnYigwLCAwLCAyMDUpO1wKLX1c
Ci0uYWNlLXRtIC5hY2VfdmFyaWFibGUge1wKLWNvbG9yOiByZ2IoNDksIDEzMiwgMTQ5KTtcCi19
XAotLmFjZS10bSAuYWNlX3htbC1wZSB7XAotY29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO1wKLX1c
Ci0uYWNlLXRtIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7XAotY29sb3I6ICMw
MDAwQTI7XAotfVwKLS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcge1wKLWNvbG9yOiBy
Z2IoMTIsIDcsIDI1NSk7XAotfVwKLS5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2xpc3Qge1wKLWNv
bG9yOnJnYigxODUsIDYsIDE0NCk7XAotfVwKLS5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcge1wK
LWNvbG9yOnJnYigwLCAyMiwgMTQyKTtcCi19XAotLmFjZS10bSAuYWNlX3N0cmluZy5hY2VfcmVn
ZXgge1wKLWNvbG9yOiByZ2IoMjU1LCAwLCAwKVwKLX1cCi0uYWNlLXRtIC5hY2VfbWFya2VyLWxh
eWVyIC5hY2Vfc2VsZWN0aW9uIHtcCi1iYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7XAot
fVwKLS5hY2UtdG0uYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XAot
Ym94LXNoYWRvdzogMCAwIDNweCAwcHggd2hpdGU7XAotYm9yZGVyLXJhZGl1czogMnB4O1wKLX1c
Ci0uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XAotYmFja2dyb3VuZDogcmdi
KDI1MiwgMjU1LCAwKTtcCi19XAotLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNr
IHtcCi1iYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7XAotfVwKLS5hY2UtdG0gLmFjZV9t
YXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCi1tYXJnaW46IC0xcHggMCAwIC0xcHg7XAotYm9y
ZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO1wKLX1cCi0uYWNlLXRtIC5hY2VfbWFy
a2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKLWJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwg
MC4wNyk7XAotfVwKLS5hY2UtdG0gLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKLWJhY2tncm91
bmQtY29sb3IgOiAjZGNkY2RjO1wKLX1cCi0uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vf
c2VsZWN0ZWQtd29yZCB7XAotYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpO1wKLWJvcmRl
cjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTtcCi19XAotLmFjZS10bSAuYWNlX2luZGVu
dC1ndWlkZSB7XAotYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9S
dzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8v
Ly9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVh
dC15O1wKLX1cCi0iOwotCi12YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwotZG9tLmlt
cG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwotfSk7Ci07
Ci0gICAgICAgICAgICAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgYWNlLnJlcXVpcmUo
WyJhY2UvYWNlIl0sIGZ1bmN0aW9uKGEpIHsKLSAgICAgICAgICAgICAgICAgICAgYSAmJiBhLmNv
bmZpZy5pbml0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LmFjZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hY2UgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIga2V5IGluIGEpIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBhY2Vba2V5XSA9IGFba2V5XTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0pKCk7Ci0gICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRv
b2xzLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZWRldnRv
b2xzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQwZjU4Yi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2VkZXZ0b29scy5j
c3MKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0uYWNlX2VkaXRvciAqIHsKLSAgICAt
d2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotfQotCi0uYWNlLWVkaXRvci1jb250YWlu
ZXIgewotICAgIGhlaWdodDogMTAwJTsKLX0KLQotLndlYmtpdC1leGVjdXRpb24tbGluZSB7Ci0g
ICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE3MSwgMTkxLCAyNTQpOwotICAgIG91dGxpbmU6IDFw
eCBzb2xpZCByZ2IoNjQsIDExNSwgMjQ0KTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci19Ci0K
LS53ZWJraXQtZ3V0dGVyLWV4ZWN1dGlvbi1saW5lIHsKLSAgICBjb2xvcjogdHJhbnNwYXJlbnQ7
Ci0gICAgYm9yZGVyLXdpZHRoOiAwIDEwcHggMHB4IDJweDsKLSAgICAtd2Via2l0LWJvcmRlci1p
bWFnZTogdXJsKEltYWdlcy9wcm9ncmFtQ291bnRlckJvcmRlci5wbmcpIDAgMTAgMCAyOwotfQot
Ci0ud2Via2l0LWd1dHRlci1leGVjdXRpb24tbGluZS53ZWJraXQtYnJlYWtwb2ludCB7Ci0gICAg
LXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvdW50ZXJCb3JkZXIu
cG5nKSAwIDEwIDAgMjsKLX0KLQotLndlYmtpdC1ndXR0ZXItZXhlY3V0aW9uLWxpbmUud2Via2l0
LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwgewotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwo
SW1hZ2VzL2JyZWFrcG9pbnRDb25kaXRpb25hbENvdW50ZXJCb3JkZXIucG5nKSAwIDEwIDAgMjsK
LX0KLQotLmFjZV9ndXR0ZXItY2VsbC53ZWJraXQtYnJlYWtwb2ludCB7Ci0gICAgY29sb3I6IHdo
aXRlOwotICAgIGJvcmRlci13aWR0aDogMCAxMHB4IDBweCAycHg7Ci0gICAgLXdlYmtpdC1ib3Jk
ZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludEJvcmRlci5wbmcpIDAgMTAgMCAyOwotICAg
IHBhZGRpbmctcmlnaHQ6IDBweCAhaW1wb3J0YW50OwotICAgIHBhZGRpbmctbGVmdDogNHB4ICFp
bXBvcnRhbnQ7Ci19Ci0KLS5hY2VfZ3V0dGVyLWNlbGwud2Via2l0LWJyZWFrcG9pbnQtY29uZGl0
aW9uYWwgewotICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICAtd2Via2l0LWJvcmRlci1pbWFn
ZTogdXJsKEltYWdlcy9icmVha3BvaW50Q29uZGl0aW9uYWxDb3VudGVyQm9yZGVyLnBuZykgMCAx
MCAwIDI7Ci19Ci0KLS5hY2VfZ3V0dGVyLWNlbGwud2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQg
ewotICAgIG9wYWNpdHk6IDAuNTsKLX0KLQotLmFjZV9ndXR0ZXItY2VsbCB7Ci0gICAgcGFkZGlu
Zy1sZWZ0OiA2cHggIWltcG9ydGFudDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4ICFpbXBvcnRh
bnQ7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
YWNlL21vZGVfY3NzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2Uv
bW9kZV9jc3MuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYWUxMmUuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9jc3Mu
anMKKysrIC9kZXYvbnVsbApAQCAtMSw3NTEgKzAsMCBAQAotLyogKioqKiogQkVHSU4gTElDRU5T
RSBCTE9DSyAqKioqKgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgotICoK
LSAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5WLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QWpheC5vcmcgQi5WLiBub3IgdGhlCi0gKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgICAgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICoq
KioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL2Nz
cycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNl
L21vZGUvdGV4dCcsICdhY2UvdG9rZW5pemVyJywgJ2FjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVs
ZXMnLCAnYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCcsICdhY2Uvd29ya2VyL3dvcmtl
cl9jbGllbnQnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzcycsICdhY2UvbW9kZS9mb2xkaW5nL2Nz
dHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgb29w
ID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwotdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0
IikuTW9kZTsKLXZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6
ZXI7Ci12YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVs
ZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKLXZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVp
cmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50OwotdmFy
IFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2Vy
Q2xpZW50OwotdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNz
c0JlaGF2aW91cjsKLXZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5
bGUiKS5Gb2xkTW9kZTsKLQotdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLiR0b2tl
bml6ZXIgPSBuZXcgVG9rZW5pemVyKG5ldyBDc3NIaWdobGlnaHRSdWxlcygpLmdldFJ1bGVzKCks
ICJpIik7Ci0gICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwot
ICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKLSAgICB0aGlzLmZvbGRp
bmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwotfTsKLW9vcC5pbmhlcml0cyhNb2RlLCBU
ZXh0TW9kZSk7Ci0KLShmdW5jdGlvbigpIHsKLQotICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gImNT
dHlsZSI7Ci0KLSAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxp
bmUsIHRhYikgewotICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwot
ICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy4kdG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwg
c3RhdGUpLnRva2VuczsKLSAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vu
cy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKLSAgICAgICAgICAgIHJldHVybiBpbmRl
bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipce1xz
KiQvKTsKLSAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGluZGVudDsKLSAgICB9OwotCi0gICAgdGhpcy5j
aGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKLSAgICB9OwotCi0g
ICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewotICAgICAg
ICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKLSAgICB9OwotCi0gICAgdGhp
cy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7Ci0gICAgICAgIHZhciB3b3JrZXIg
PSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9jc3Nfd29ya2VyIiwgIldvcmtl
ciIpOwotICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50
KCkpOwotCi0gICAgICAgIHdvcmtlci5vbigiY3NzbGludCIsIGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKLSAgICAgICAgfSk7Ci0KLSAg
ICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHNl
c3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4g
d29ya2VyOwotICAgIH07Ci0KLX0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwotCi1leHBvcnRzLk1v
ZGUgPSBNb2RlOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9y
dWxlcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAn
YWNlL2xpYi9sYW5nJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0aW9u
KHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuLi9s
aWIvb29wIik7Ci12YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7Ci12YXIgVGV4dEhp
Z2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdo
bGlnaHRSdWxlczsKLXZhciBzdXBwb3J0VHlwZSA9IGV4cG9ydHMuc3VwcG9ydFR5cGUgPSAiYW5p
bWF0aW9uLWZpbGwtbW9kZXxhbGlnbm1lbnQtYWRqdXN0fGFsaWdubWVudC1iYXNlbGluZXxhbmlt
YXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0
aW9uLWl0ZXJhdGlvbi1jb3VudHxhbmltYXRpb24tbmFtZXxhbmltYXRpb24tcGxheS1zdGF0ZXxh
bmltYXRpb24tdGltaW5nLWZ1bmN0aW9ufGFuaW1hdGlvbnxhcHBlYXJhbmNlfGF6aW11dGh8YmFj
a2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kLWF0dGFjaG1lbnR8YmFja2dyb3VuZC1icmVha3xi
YWNrZ3JvdW5kLWNsaXB8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91
bmQtb3JpZ2lufGJhY2tncm91bmQtcG9zaXRpb258YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3Vu
ZC1zaXplfGJhY2tncm91bmR8YmFzZWxpbmUtc2hpZnR8YmluZGluZ3xibGVlZHxib29rbWFyay1s
YWJlbHxib29rbWFyay1sZXZlbHxib29rbWFyay1zdGF0ZXxib29rbWFyay10YXJnZXR8Ym9yZGVy
LWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9y
ZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9t
LXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1p
bWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVy
LWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQt
Y29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xi
b3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXIt
cmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVy
LXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVz
fGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym9yZGVyfGJv
dHRvbXxib3gtYWxpZ258Ym94LWRlY29yYXRpb24tYnJlYWt8Ym94LWRpcmVjdGlvbnxib3gtZmxl
eC1ncm91cHxib3gtZmxleHxib3gtbGluZXN8Ym94LW9yZGluYWwtZ3JvdXB8Ym94LW9yaWVudHxi
b3gtcGFja3xib3gtc2hhZG93fGJveC1zaXppbmd8YnJlYWstYWZ0ZXJ8YnJlYWstYmVmb3JlfGJy
ZWFrLWluc2lkZXxjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvci1wcm9maWxlfGNvbG9yfGNv
bHVtbi1jb3VudHxjb2x1bW4tZmlsbHxjb2x1bW4tZ2FwfGNvbHVtbi1ydWxlfGNvbHVtbi1ydWxl
LWNvbG9yfGNvbHVtbi1ydWxlLXN0eWxlfGNvbHVtbi1ydWxlLXdpZHRofGNvbHVtbi1zcGFufGNv
bHVtbi13aWR0aHxjb2x1bW5zfGNvbnRlbnR8Y291bnRlci1pbmNyZW1lbnR8Y291bnRlci1yZXNl
dHxjcm9wfGN1ZS1hZnRlcnxjdWUtYmVmb3JlfGN1ZXxjdXJzb3J8ZGlyZWN0aW9ufGRpc3BsYXl8
ZG9taW5hbnQtYmFzZWxpbmV8ZHJvcC1pbml0aWFsLWFmdGVyLWFkanVzdHxkcm9wLWluaXRpYWwt
YWZ0ZXItYWxpZ258ZHJvcC1pbml0aWFsLWJlZm9yZS1hZGp1c3R8ZHJvcC1pbml0aWFsLWJlZm9y
ZS1hbGlnbnxkcm9wLWluaXRpYWwtc2l6ZXxkcm9wLWluaXRpYWwtdmFsdWV8ZWxldmF0aW9ufGVt
cHR5LWNlbGxzfGZpdHxmaXQtcG9zaXRpb258ZmxvYXQtb2Zmc2V0fGZsb2F0fGZvbnQtZmFtaWx5
fGZvbnQtc2l6ZXxmb250LXNpemUtYWRqdXN0fGZvbnQtc3RyZXRjaHxmb250LXN0eWxlfGZvbnQt
dmFyaWFudHxmb250LXdlaWdodHxmb250fGdyaWQtY29sdW1uc3xncmlkLXJvd3N8aGFuZ2luZy1w
dW5jdHVhdGlvbnxoZWlnaHR8aHlwaGVuYXRlLWFmdGVyfGh5cGhlbmF0ZS1iZWZvcmV8aHlwaGVu
YXRlLWNoYXJhY3RlcnxoeXBoZW5hdGUtbGluZXN8aHlwaGVuYXRlLXJlc291cmNlfGh5cGhlbnN8
aWNvbnxpbWFnZS1vcmllbnRhdGlvbnxpbWFnZS1yZW5kZXJpbmd8aW1hZ2UtcmVzb2x1dGlvbnxp
bmxpbmUtYm94LWFsaWdufGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGluZS1zdGFj
a2luZy1ydWJ5fGxpbmUtc3RhY2tpbmctc2hpZnR8bGluZS1zdGFja2luZy1zdHJhdGVneXxsaW5l
LXN0YWNraW5nfGxpc3Qtc3R5bGUtaW1hZ2V8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxl
LXR5cGV8bGlzdC1zdHlsZXxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxt
YXJnaW4tdG9wfG1hcmdpbnxtYXJrLWFmdGVyfG1hcmstYmVmb3JlfG1hcmt8bWFya3N8bWFycXVl
ZS1kaXJlY3Rpb258bWFycXVlZS1wbGF5LWNvdW50fG1hcnF1ZWUtc3BlZWR8bWFycXVlZS1zdHls
ZXxtYXgtaGVpZ2h0fG1heC13aWR0aHxtaW4taGVpZ2h0fG1pbi13aWR0aHxtb3ZlLXRvfG5hdi1k
b3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JwaGFuc3xv
dXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxv
dXRsaW5lfG92ZXJmbG93LXN0eWxlfG92ZXJmbG93LXh8b3ZlcmZsb3cteXxvdmVyZmxvd3xwYWRk
aW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWRkaW5n
fHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGFn
ZS1wb2xpY3l8cGFnZXxwYXVzZS1hZnRlcnxwYXVzZS1iZWZvcmV8cGF1c2V8cGVyc3BlY3RpdmUt
b3JpZ2lufHBlcnNwZWN0aXZlfHBob25lbWVzfHBpdGNoLXJhbmdlfHBpdGNofHBsYXktZHVyaW5n
fHBvc2l0aW9ufHByZXNlbnRhdGlvbi1sZXZlbHxwdW5jdHVhdGlvbi10cmltfHF1b3Rlc3xyZW5k
ZXJpbmctaW50ZW50fHJlc2l6ZXxyZXN0LWFmdGVyfHJlc3QtYmVmb3JlfHJlc3R8cmljaG5lc3N8
cmlnaHR8cm90YXRpb24tcG9pbnR8cm90YXRpb258cnVieS1hbGlnbnxydWJ5LW92ZXJoYW5nfHJ1
YnktcG9zaXRpb258cnVieS1zcGFufHNpemV8c3BlYWstaGVhZGVyfHNwZWFrLW51bWVyYWx8c3Bl
YWstcHVuY3R1YXRpb258c3BlYWt8c3BlZWNoLXJhdGV8c3RyZXNzfHN0cmluZy1zZXR8dGFibGUt
bGF5b3V0fHRhcmdldC1uYW1lfHRhcmdldC1uZXd8dGFyZ2V0LXBvc2l0aW9ufHRhcmdldHx0ZXh0
LWFsaWduLWxhc3R8dGV4dC1hbGlnbnx0ZXh0LWRlY29yYXRpb258dGV4dC1lbXBoYXNpc3x0ZXh0
LWhlaWdodHx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdXRsaW5lfHRleHQtc2hhZG93
fHRleHQtdHJhbnNmb3JtfHRleHQtd3JhcHx0b3B8dHJhbnNmb3JtLW9yaWdpbnx0cmFuc2Zvcm0t
c3R5bGV8dHJhbnNmb3JtfHRyYW5zaXRpb24tZGVsYXl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFu
c2l0aW9uLXByb3BlcnR5fHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHRyYW5zaXRpb258dW5p
Y29kZS1iaWRpfHZlcnRpY2FsLWFsaWdufHZpc2liaWxpdHl8dm9pY2UtYmFsYW5jZXx2b2ljZS1k
dXJhdGlvbnx2b2ljZS1mYW1pbHl8dm9pY2UtcGl0Y2gtcmFuZ2V8dm9pY2UtcGl0Y2h8dm9pY2Ut
cmF0ZXx2b2ljZS1zdHJlc3N8dm9pY2Utdm9sdW1lfHZvbHVtZXx3aGl0ZS1zcGFjZS1jb2xsYXBz
ZXx3aGl0ZS1zcGFjZXx3aWRvd3N8d2lkdGh8d29yZC1icmVha3x3b3JkLXNwYWNpbmd8d29yZC13
cmFwfHotaW5kZXgiOwotdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0
aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwotdmFyIHN1cHBvcnRD
b25zdGFudCA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50ID0gImFic29sdXRlfGFmdGVyLWVkZ2V8
YWZ0ZXJ8YWxsLXNjcm9sbHxhbGx8YWxwaGFiZXRpY3xhbHdheXN8YW50aWFsaWFzZWR8YXJtZW5p
YW58YXV0b3xhdm9pZC1jb2x1bW58YXZvaWQtcGFnZXxhdm9pZHxiYWxhbmNlfGJhc2VsaW5lfGJl
Zm9yZS1lZGdlfGJlZm9yZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrLWxpbmUtaGVpZ2h0fGJs
b2NrfGJvbGR8Ym9sZGVyfGJvcmRlci1ib3h8Ym90aHxib3R0b218Ym94fGJyZWFrLWFsbHxicmVh
ay13b3JkfGNhcGl0YWxpemV8Y2Fwcy1oZWlnaHR8Y2FwdGlvbnxjZW50ZXJ8Y2VudHJhbHxjaGFy
fGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y2xvbmV8Y2xvc2UtcXVvdGV8Y29sLXJlc2l6ZXxjb2xs
YXBzZXxjb2x1bW58Y29uc2lkZXItc2hpZnRzfGNvbnRhaW58Y29udGVudC1ib3h8Y292ZXJ8Y3Jv
c3NoYWlyfGN1YmljLWJlemllcnxkYXNoZWR8ZGVjaW1hbC1sZWFkaW5nLXplcm98ZGVjaW1hbHxk
ZWZhdWx0fGRpc2FibGVkfGRpc2N8ZGlzcmVnYXJkLXNoaWZ0c3xkaXN0cmlidXRlLWFsbC1saW5l
c3xkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRv
dWJsZXxlLXJlc2l6ZXxlYXNlLWlufGVhc2UtaW4tb3V0fGVhc2Utb3V0fGVhc2V8ZWxsaXBzaXN8
ZW5kfGV4Y2x1ZGUtcnVieXxmaWxsfGZpeGVkfGdlb3JnaWFufGdseXBoc3xncmlkLWhlaWdodHxn
cm9vdmV8aGFuZHxoYW5naW5nfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJh
Z2FuYXxob3Jpem9udGFsfGljb258aWRlb2dyYXBoLWFscGhhfGlkZW9ncmFwaC1udW1lcmljfGlk
ZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtc3BhY2V8aWRlb2dyYXBoaWN8aW5hY3RpdmV8
aW5jbHVkZS1ydWJ5fGluaGVyaXR8aW5pdGlhbHxpbmxpbmUtYmxvY2t8aW5saW5lLWJveHxpbmxp
bmUtbGluZS1oZWlnaHR8aW5saW5lLXRhYmxlfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRl
b2dyYXBofGludGVyLXdvcmR8aW52ZXJ0fGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGth
dGFrYW5hfGtlZXAtYWxsfGxhc3R8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8
bGluZXxsaW5lYXJ8bGlzdC1pdGVtfGxvY2FsfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVr
fGxvd2VyLWxhdGlufGxvd2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWF0aGVtYXRpY2Fs
fG1heC1oZWlnaHR8bWF4LXNpemV8bWVkaXVtfG1lbnV8bWVzc2FnZS1ib3h8bWlkZGxlfG1vdmV8
bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1jaGFuZ2V8bm8tY2xvc2UtcXVvdGV8bm8t
ZHJvcHxuby1vcGVuLXF1b3RlfG5vLXJlcGVhdHxub25lfG5vcm1hbHxub3QtYWxsb3dlZHxub3dy
YXB8bnctcmVzaXplfG9ibGlxdWV8b3Blbi1xdW90ZXxvdXRzZXR8b3V0c2lkZXxvdmVybGluZXxw
YWRkaW5nLWJveHxwYWdlfHBvaW50ZXJ8cHJlLWxpbmV8cHJlLXdyYXB8cHJlfHByZXNlcnZlLTNk
fHByb2dyZXNzfHJlbGF0aXZlfHJlcGVhdC14fHJlcGVhdC15fHJlcGVhdHxyZXBsYWNlZHxyZXNl
dC1zaXplfHJpZGdlfHJpZ2h0fHJvdW5kfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxz
ZS1yZXNpemV8c2VwYXJhdGV8c2xpY2V8c21hbGwtY2Fwc3xzbWFsbC1jYXB0aW9ufHNvbGlkfHNw
YWNlfHNxdWFyZXxzdGFydHxzdGF0aWN8c3RhdHVzLWJhcnxzdGVwLWVuZHxzdGVwLXN0YXJ0fHN0
ZXBzfHN0cmV0Y2h8c3RyaWN0fHN1YnxzdXBlcnxzdy1yZXNpemV8dGFibGUtY2FwdGlvbnx0YWJs
ZS1jZWxsfHRhYmxlLWNvbHVtbi1ncm91cHx0YWJsZS1jb2x1bW58dGFibGUtZm9vdGVyLWdyb3Vw
fHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1yb3ctZ3JvdXB8dGFibGUtcm93fHRhYmxlfHRiLXJs
fHRleHQtYWZ0ZXItZWRnZXx0ZXh0LWJlZm9yZS1lZGdlfHRleHQtYm90dG9tfHRleHQtc2l6ZXx0
ZXh0LXRvcHx0ZXh0fHRoaWNrfHRoaW58dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhh
fHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx1c2Utc2NyaXB0fHZlcnRpY2FsLWlk
ZW9ncmFwaGljfHZlcnRpY2FsLXRleHR8dmlzaWJsZXx3LXJlc2l6ZXx3YWl0fHdoaXRlc3BhY2V8
ei1pbmRleHx6ZXJvIjsKLXZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9y
dENvbnN0YW50Q29sb3IgPSAiYXF1YXxibGFja3xibHVlfGZ1Y2hzaWF8Z3JheXxncmVlbnxsaW1l
fG1hcm9vbnxuYXZ5fG9saXZlfG9yYW5nZXxwdXJwbGV8cmVkfHNpbHZlcnx0ZWFsfHdoaXRlfHll
bGxvdyI7Ci12YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFu
dEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxnYXJhbW9uZHxnZW9yZ2lhfGhl
bHZldGljYXxpbXBhY3R8bHVjaWRhfHN5bWJvbHxzeXN0ZW18dGFob21hfHRpbWVzfHRyZWJ1Y2hl
dHx1dG9waWF8dmVyZGFuYXx3ZWJkaW5nc3xzYW5zLXNlcmlmfHNlcmlmfG1vbm9zcGFjZSI7Ci0K
LXZhciBudW1SZSA9IGV4cG9ydHMubnVtUmUgPSAiXFwtPyg/Oig/OlswLTldKyl8KD86WzAtOV0q
XFwuWzAtOV0rKSkiOwotdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50
cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1z
ZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7Ci12YXIgcHNldWRvQ2xhc3NlcyAgPSBleHBvcnRzLnBz
ZXVkb0NsYXNzZXMgPSAgIig6KVxcYihhY3RpdmV8Y2hlY2tlZHxkaXNhYmxlZHxlbXB0eXxlbmFi
bGVkfGZpcnN0LWNoaWxkfGZpcnN0LW9mLXR5cGV8Zm9jdXN8aG92ZXJ8aW5kZXRlcm1pbmF0ZXxp
bnZhbGlkfGxhc3QtY2hpbGR8bGFzdC1vZi10eXBlfGxpbmt8bm90fG50aC1jaGlsZHxudGgtbGFz
dC1jaGlsZHxudGgtbGFzdC1vZi10eXBlfG50aC1vZi10eXBlfG9ubHktY2hpbGR8b25seS1vZi10
eXBlfHJlcXVpcmVkfHJvb3R8dGFyZ2V0fHZhbGlkfHZpc2l0ZWQpXFxiIjsKLQotdmFyIENzc0hp
Z2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7Ci0KLSAgICB2YXIga2V5d29yZE1hcHBlciA9IHRo
aXMuY3JlYXRlS2V5d29yZE1hcHBlcih7Ci0gICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3Vw
cG9ydEZ1bmN0aW9uLAotICAgICAgICAic3VwcG9ydC5jb25zdGFudCI6IHN1cHBvcnRDb25zdGFu
dCwKLSAgICAgICAgInN1cHBvcnQudHlwZSI6IHN1cHBvcnRUeXBlLAotICAgICAgICAic3VwcG9y
dC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAotICAgICAgICAic3VwcG9y
dC5jb25zdGFudC5mb250cyI6IHN1cHBvcnRDb25zdGFudEZvbnRzCi0gICAgfSwgInRleHQiLCB0
cnVlKTsKLQotICAgIHZhciBiYXNlX3J1bGVzZXQgPSBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKLSAgICAgICAgICAgIHJl
Z2V4IDogIlxcL1xcKiIsCi0gICAgICAgICAgICBuZXh0IDogInJ1bGVzZXRfY29tbWVudCIKLSAg
ICAgICAgfSwgewotICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUK
LSAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0n
Ci0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBs
aW5lCi0gICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/
WyddIgotICAgICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJp
YyIsICJrZXl3b3JkIl0sCi0gICAgICAgICAgICByZWdleCA6ICIoIiArIG51bVJlICsgIikoY2h8
Y218ZGVnfGVtfGV4fGZyfGdkfGdyYWR8SHp8aW58a0h6fG1tfG1zfHBjfHB0fHB4fHJhZHxyZW18
c3x0dXJufHZofHZtfHZ3fCUpIgotICAgICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6ICJj
b25zdGFudC5udW1lcmljIiwKLSAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKLSAgICAgICAgfSwg
ewotICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsICAvLyBoZXg2IGNvbG9y
Ci0gICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCi0gICAgICAgIH0sIHsKLSAgICAg
ICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgzIGNvbG9yCi0gICAgICAg
ICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRv
a2VuIDogWyJwdW5jdHVhdGlvbiIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRv
LWVsZW1lbnQuY3NzIl0sCi0gICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCi0gICAg
ICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbiIsICJlbnRpdHkub3Ro
ZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWNsYXNzLmNzcyJdLAotICAgICAgICAgICAgcmVnZXgg
OiBwc2V1ZG9DbGFzc2VzCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDoga2V5d29y
ZE1hcHBlciwKLSAgICAgICAgICAgIHJlZ2V4IDogIlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xc
LV0qIgotICAgICAgICB9Ci0gICAgICBdOwotCi0gICAgdmFyIHJ1bGVzZXQgPSBsYW5nLmNvcHlB
cnJheShiYXNlX3J1bGVzZXQpOwotICAgIHJ1bGVzZXQudW5zaGlmdCh7Ci0gICAgICAgIHRva2Vu
IDogInBhcmVuLnJwYXJlbiIsCi0gICAgICAgIHJlZ2V4IDogIlxcfSIsCi0gICAgICAgIG5leHQ6
ICAgInN0YXJ0IgotICAgIH0pOwotCi0gICAgdmFyIG1lZGlhX3J1bGVzZXQgPSBsYW5nLmNvcHlB
cnJheSggYmFzZV9ydWxlc2V0ICk7Ci0gICAgbWVkaWFfcnVsZXNldC51bnNoaWZ0KHsKLSAgICAg
ICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKLSAgICAgICAgcmVnZXggOiAiXFx9IiwKLSAgICAg
ICAgbmV4dDogICAibWVkaWEiCi0gICAgfSk7Ci0KLSAgICB2YXIgYmFzZV9jb21tZW50ID0gW3sK
LSAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY29tbWVudCBzcGFubmluZyB3aG9sZSBs
aW5lCi0gICAgICAgICAgcmVnZXggOiAiLisiCi0gICAgfV07Ci0KLSAgICB2YXIgY29tbWVudCA9
IGxhbmcuY29weUFycmF5KGJhc2VfY29tbWVudCk7Ci0gICAgY29tbWVudC51bnNoaWZ0KHsKLSAg
ICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50Ci0gICAgICAgICAg
cmVnZXggOiAiLio/XFwqXFwvIiwKLSAgICAgICAgICBuZXh0IDogInN0YXJ0IgotICAgIH0pOwot
Ci0gICAgdmFyIG1lZGlhX2NvbW1lbnQgPSBsYW5nLmNvcHlBcnJheShiYXNlX2NvbW1lbnQpOwot
ICAgIG1lZGlhX2NvbW1lbnQudW5zaGlmdCh7Ci0gICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIs
IC8vIGNsb3NpbmcgY29tbWVudAotICAgICAgICAgIHJlZ2V4IDogIi4qP1xcKlxcLyIsCi0gICAg
ICAgICAgbmV4dCA6ICJtZWRpYSIKLSAgICB9KTsKLQotICAgIHZhciBydWxlc2V0X2NvbW1lbnQg
PSBsYW5nLmNvcHlBcnJheShiYXNlX2NvbW1lbnQpOwotICAgIHJ1bGVzZXRfY29tbWVudC51bnNo
aWZ0KHsKLSAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50Ci0g
ICAgICAgICAgcmVnZXggOiAiLio/XFwqXFwvIiwKLSAgICAgICAgICBuZXh0IDogInJ1bGVzZXQi
Ci0gICAgfSk7Ci0KLSAgICB0aGlzLiRydWxlcyA9IHsKLSAgICAgICAgInN0YXJ0IiA6IFt7Ci0g
ICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50Ci0gICAg
ICAgICAgICByZWdleCA6ICJcXC9cXCoiLAotICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50Igot
ICAgICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCi0gICAgICAg
ICAgICByZWdleDogIlxceyIsCi0gICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCi0gICAgICAg
IH0sIHsKLSAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKLSAgICAgICAgICAgIHJlZ2V4OiAi
QC4qP3siLAotICAgICAgICAgICAgbmV4dDogICJtZWRpYSIKLSAgICAgICAgfSx7Ci0gICAgICAg
ICAgICB0b2tlbjogImtleXdvcmQiLAotICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsi
Ci0gICAgICAgIH0sewotICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCi0gICAgICAgICAg
ICByZWdleDogIlxcLlthLXowLTktX10rIgotICAgICAgICB9LHsKLSAgICAgICAgICAgIHRva2Vu
OiAic3RyaW5nIiwKLSAgICAgICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgotICAgICAgICB9
LHsKLSAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAotICAgICAgICAgICAgcmVnZXg6ICJb
YS16MC05LV9dKyIKLSAgICAgICAgfV0sCi0KLSAgICAgICAgIm1lZGlhIiA6IFsgewotICAgICAg
ICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAotICAgICAgICAg
ICAgcmVnZXggOiAiXFwvXFwqIiwKLSAgICAgICAgICAgIG5leHQgOiAibWVkaWFfY29tbWVudCIK
LSAgICAgICAgfSwgewotICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAotICAgICAg
ICAgICAgcmVnZXg6ICJcXHsiLAotICAgICAgICAgICAgbmV4dDogICJtZWRpYV9ydWxlc2V0Igot
ICAgICAgICB9LHsKLSAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKLSAgICAgICAgICAgIHJl
Z2V4OiAiXFx9IiwKLSAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCi0gICAgICAgIH0sewotICAg
ICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKLSAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTkt
X10rIgotICAgICAgICB9LHsKLSAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAotICAgICAg
ICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKLSAgICAgICAgfSx7Ci0gICAgICAgICAgICB0
b2tlbjogInN0cmluZyIsCi0gICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKLSAgICAg
ICAgfSx7Ci0gICAgICAgICAgICB0b2tlbjogImNvbnN0YW50IiwKLSAgICAgICAgICAgIHJlZ2V4
OiAiW2EtejAtOS1fXSsiCi0gICAgICAgIH1dLAotCi0gICAgICAgICJjb21tZW50IiA6IGNvbW1l
bnQsCi0KLSAgICAgICAgInJ1bGVzZXQiIDogcnVsZXNldCwKLSAgICAgICAgInJ1bGVzZXRfY29t
bWVudCIgOiBydWxlc2V0X2NvbW1lbnQsCi0KLSAgICAgICAgIm1lZGlhX3J1bGVzZXQiIDogbWVk
aWFfcnVsZXNldCwKLSAgICAgICAgIm1lZGlhX2NvbW1lbnQiIDogbWVkaWFfY29tbWVudAotICAg
IH07Ci19OwotCi1vb3AuaW5oZXJpdHMoQ3NzSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRS
dWxlcyk7Ci0KLWV4cG9ydHMuQ3NzSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsK
LQotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQnLCBb
J3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9yYW5nZSddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9y
YW5nZSIpLlJhbmdlOwotCi12YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9
OwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxp
bmUsIGlucHV0KSB7Ci0gICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7
Ci0gICAgfTsKLQotICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewot
ICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7Ci0gICAgICAgIHZhciBtYXRjaCA9
IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7Ci0KLSAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7
Ci0KLSAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKLSAgICAgICAgdmFyIG9w
ZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBj
b2x1bW59KTsKLQotICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93
ID09IHJvdykgcmV0dXJuIDA7Ci0KLSAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVu
dChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7Ci0gICAgICAgIGRvYy5yZXBsYWNlKG5l
dyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwotICAgIH07Ci0KLSAgICB0
aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBtYXRjaCA9IGxp
bmUubWF0Y2goL14oXHMrKS8pOwotICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgIHJl
dHVybiBtYXRjaFsxXTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Owot
Ci19KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMuTWF0
Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKLX0pOwotCi1hY2UuZGVm
aW5lKCdhY2UvbW9kZS9iZWhhdmlvdXIvY3NzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9kZS9iZWhhdmlvdXInLCAnYWNlL21vZGUvYmVo
YXZpb3VyL2NzdHlsZScsICdhY2UvdG9rZW5faXRlcmF0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3Ai
KTsKLXZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Ci12
YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7
Ci12YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9r
ZW5JdGVyYXRvcjsKLQotdmFyIENzc0JlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKLQotICAgIHRo
aXMuaW5oZXJpdChDc3R5bGVCZWhhdmlvdXIpOwotCi0gICAgdGhpcy5hZGQoImNvbG9uIiwgImlu
c2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQp
IHsKLSAgICAgICAgaWYgKHRleHQgPT09ICc6JykgewotICAgICAgICAgICAgdmFyIGN1cnNvciA9
IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwotICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0g
bmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7Ci0g
ICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKLSAgICAg
ICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKLSAgICAgICAg
ICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpOwotICAgICAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJz
b3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0
Q2hhciA9PT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgIHRleHQ6ICcnLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IFsxLCAxXQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmICghbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikubWF0Y2goL15ccyo7
LykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dDogJzo7JywKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0pOwotCi0gICAgdGhpcy5hZGQoImNvbG9uIiwgImRlbGV0aW9uIiwg
ZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKLSAgICAg
ICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKLSAgICAg
ICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09PSAnOicpIHsKLSAgICAg
ICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwot
ICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1
bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKLSAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09
ICc7JykgewotICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0K
LSAgICB0aGlzLmFkZCgic2VtaWNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwg
YWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKLSAgICAgICAgaWYgKHRleHQgPT09ICc7
JykgewotICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigp
OwotICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cp
OwotICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1
bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKLSAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7
JykgewotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgdGV4dDog
JycsCi0gICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLQotfQotb29wLmluaGVyaXRz
KENzc0JlaGF2aW91ciwgQ3N0eWxlQmVoYXZpb3VyKTsKLQotZXhwb3J0cy5Dc3NCZWhhdmlvdXIg
PSBDc3NCZWhhdmlvdXI7Ci19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2Nz
dHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAn
YWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS90b2tlbl9pdGVyYXRvcicsICdhY2UvbGliL2xhbmcn
XSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9vcCA9IHJl
cXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKLXZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhh
dmlvdXIiKS5CZWhhdmlvdXI7Ci12YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rv
a2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKLXZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4v
bGliL2xhbmciKTsKLQotdmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9Ci0gICAgWyJ0ZXh0Iiwg
InBhcmVuLnJwYXJlbiIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciJdOwotdmFyIFNBRkVfSU5TRVJU
X0JFRk9SRV9UT0tFTlMgPQotICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRp
b24ub3BlcmF0b3IiLCAiY29tbWVudCJdOwotCi0KLXZhciBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9
IDA7Ci12YXIgYXV0b0luc2VydGVkUm93ID0gLTE7Ci12YXIgYXV0b0luc2VydGVkTGluZUVuZCA9
ICIiOwotdmFyIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Ci12YXIgbWF5YmVJbnNlcnRlZFJv
dyA9IC0xOwotdmFyIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSAiIjsKLXZhciBtYXliZUluc2Vy
dGVkTGluZUVuZCA9ICIiOwotCi12YXIgQ3N0eWxlQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewot
ICAgIAotICAgIENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24gPSBmdW5jdGlvbihlZGl0
b3IsIHNlc3Npb24pIHsKLSAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3Np
dGlvbigpOwotICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9u
LCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKLSAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRv
a2VuVHlwZShpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCAidGV4dCIsIFNBRkVfSU5TRVJU
X0lOX1RPS0VOUykpIHsKLSAgICAgICAgICAgIHZhciBpdGVyYXRvcjIgPSBuZXcgVG9rZW5JdGVy
YXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uICsgMSk7Ci0gICAgICAgICAg
ICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yMi5nZXRDdXJyZW50VG9rZW4oKSB8
fCAidGV4dCIsIFNBRkVfSU5TRVJUX0lOX1RPS0VOUykpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7Ci0gICAg
ICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8
fAotICAgICAgICAgICAgdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TKTsKLSAgICB9OwotICAg
IAotICAgIENzdHlsZUJlaGF2aW91ci4kbWF0Y2hUb2tlblR5cGUgPSBmdW5jdGlvbih0b2tlbiwg
dHlwZXMpIHsKLSAgICAgICAgcmV0dXJuIHR5cGVzLmluZGV4T2YodG9rZW4udHlwZSB8fCB0b2tl
bikgPiAtMTsKLSAgICB9OwotICAgIAotICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5z
ZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7Ci0gICAgICAgIHZhciBj
dXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgdmFyIGxpbmUgPSBz
ZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwotICAgICAgICBpZiAoIXRoaXMuaXNBdXRv
SW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgYXV0b0luc2VydGVkTGluZUVuZFswXSkpCi0g
ICAgICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Ci0gICAgICAgIGF1dG9JbnNlcnRl
ZFJvdyA9IGN1cnNvci5yb3c7Ci0gICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBicmFja2V0
ICsgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7Ci0gICAgICAgIGF1dG9JbnNlcnRlZEJyYWNr
ZXRzKys7Ci0gICAgfTsKLSAgICAKLSAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNl
cnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKLSAgICAgICAgdmFyIGN1
cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwotICAgICAgICB2YXIgbGluZSA9IHNl
c3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7Ci0gICAgICAgIGlmICghdGhpcy5pc01heWJl
SW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSkpCi0gICAgICAgICAgICBtYXliZUluc2VydGVk
QnJhY2tldHMgPSAwOwotICAgICAgICBtYXliZUluc2VydGVkUm93ID0gY3Vyc29yLnJvdzsKLSAg
ICAgICAgbWF5YmVJbnNlcnRlZExpbmVTdGFydCA9IGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1
bW4pICsgYnJhY2tldDsKLSAgICAgICAgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSBsaW5lLnN1YnN0
cihjdXJzb3IuY29sdW1uKTsKLSAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzKys7Ci0gICAg
fTsKLSAgICAKLSAgICBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVu
Y3Rpb24oY3Vyc29yLCBsaW5lLCBicmFja2V0KSB7Ci0gICAgICAgIHJldHVybiBhdXRvSW5zZXJ0
ZWRCcmFja2V0cyA+IDAgJiYKLSAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IGF1dG9JbnNlcnRl
ZFJvdyAmJgotICAgICAgICAgICAgYnJhY2tldCA9PT0gYXV0b0luc2VydGVkTGluZUVuZFswXSAm
JgotICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikgPT09IGF1dG9JbnNlcnRl
ZExpbmVFbmQ7Ci0gICAgfTsKLSAgICAKLSAgICBDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2Vy
dGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSkgewotICAgICAgICByZXR1cm4gbWF5
YmVJbnNlcnRlZEJyYWNrZXRzID4gMCAmJgotICAgICAgICAgICAgY3Vyc29yLnJvdyA9PT0gbWF5
YmVJbnNlcnRlZFJvdyAmJgotICAgICAgICAgICAgbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbikg
PT09IG1heWJlSW5zZXJ0ZWRMaW5lRW5kICYmCi0gICAgICAgICAgICBsaW5lLnN1YnN0cigwLCBj
dXJzb3IuY29sdW1uKSA9PSBtYXliZUluc2VydGVkTGluZVN0YXJ0OwotICAgIH07Ci0gICAgCi0g
ICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgYXV0b0luc2VydGVkTGluZUVuZCA9IGF1dG9JbnNlcnRlZExpbmVFbmQuc3Vic3Ry
KDEpOwotICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cy0tOwotICAgIH07Ci0gICAgCi0gICAg
Q3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKLSAgICAgICAgbWF5YmVJbnNlcnRl
ZFJvdyA9IC0xOwotICAgIH07Ci0KLSAgICB0aGlzLmFkZCgiYnJhY2VzIiwgImluc2VydGlvbiIs
IGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKLSAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwotICAgICAgICB2YXIg
bGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7Ci0gICAgICAgIGlmICh0ZXh0
ID09ICd7JykgewotICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rp
b25SYW5nZSgpOwotICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4
dFJhbmdlKHNlbGVjdGlvbik7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNl
bGVjdGVkICE9PSAieyIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snICsg
c2VsZWN0ZWQgKyAnfScsCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIu
aXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKLSAgICAgICAgICAgICAgICBpZiAo
L1tcXVx9XCldLy50ZXN0KGxpbmVbY3Vyc29yLmNvbHVtbl0pKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIn0i
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQ6ICd7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQot
ICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRNYXliZUluc2VydChlZGl0b3IsIHNl
c3Npb24sICJ7Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAneycsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246
IFsxLCAxXQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICd9JykgewotICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1
bW4gKyAxKTsKLSAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCd9Jywge2Nv
bHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOwotICAgICAgICAgICAg
ICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNBdXRvSW5zZXJ0
ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ3N0
eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGV4
dCA9PSAiXG4iIHx8IHRleHQgPT0gIlxyXG4iKSB7Ci0gICAgICAgICAgICB2YXIgY2xvc2luZyA9
ICIiOwotICAgICAgICAgICAgaWYgKENzdHlsZUJlaGF2aW91ci5pc01heWJlSW5zZXJ0ZWRDbG9z
aW5nKGN1cnNvciwgbGluZSkpIHsKLSAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJp
bmdSZXBlYXQoIn0iLCBtYXliZUluc2VydGVkQnJhY2tldHMpOwotICAgICAgICAgICAgICAgIENz
dHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVt
biwgY3Vyc29yLmNvbHVtbiArIDEpOwotICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnfScg
fHwgY2xvc2luZyAhPT0gIiIpIHsKLSAgICAgICAgICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0g
c2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vy
c29yLmNvbHVtbn0sICd9Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MpCi0g
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgICAgIHZhciBp
bmRlbnQgPSB0aGlzLmdldE5leHRMaW5lSW5kZW50KHN0YXRlLCBsaW5lLnN1YnN0cmluZygwLCBj
dXJzb3IuY29sdW1uKSwgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAg
dmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdc
bicgKyBuZXh0X2luZGVudCArIGNsb3NpbmcsCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
bjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCi0gICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgdGhpcy5hZGQoImJy
YWNlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Np
b24sIHJhbmdlKSB7Ci0gICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRS
YW5nZShyYW5nZSk7Ci0gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3Rl
ZCA9PSAneycpIHsKLSAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShy
YW5nZS5zdGFydC5yb3cpOwotICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3Ry
aW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKLSAgICAgICAgICAg
IGlmIChyaWdodENoYXIgPT0gJ30nKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVt
bisrOwotICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzLS07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHRoaXMuYWRkKCJwYXJlbnMiLCAiaW5zZXJ0aW9u
IiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewotICAg
ICAgICBpZiAodGV4dCA9PSAnKCcpIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0
b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Np
b24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGVk
ICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCcgKyBzZWxlY3Rl
ZCArICcpJywKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQotICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJ
bnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgewotICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2
aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIikiKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnKCknLAotICAgICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnKScpIHsKLSAgICAgICAgICAgIHZh
ciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKLSAgICAgICAgICAgIHZhciBy
aWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsg
MSk7Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgewotICAgICAgICAgICAgICAg
IHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnKScsIHtjb2x1bW46
IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKLSAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xv
c2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENzdHlsZUJl
aGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0
aGlzLmFkZCgicGFyZW5zIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVk
aXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5k
b2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKLSAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgp
ICYmIHNlbGVjdGVkID09ICcoJykgewotICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRv
Yy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7Ci0gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0g
bGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1u
ICsgMik7Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICcpJykgewotICAgICAgICAgICAg
ICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHRoaXMuYWRkKCJicmFja2V0
cyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9u
LCB0ZXh0KSB7Ci0gICAgICAgIGlmICh0ZXh0ID09ICdbJykgewotICAgICAgICAgICAgdmFyIHNl
bGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwotICAgICAgICAgICAgdmFyIHNl
bGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7Ci0gICAgICAgICAg
ICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQo
KSkgewotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQ6
ICdbJyArIHNlbGVjdGVkICsgJ10nLAotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZh
bHNlCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVo
YXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7Ci0gICAgICAgICAgICAg
ICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAiXSIp
OwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdb
XScsCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCi0gICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICddJykgewot
ICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwotICAg
ICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwotICAg
ICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1
cnNvci5jb2x1bW4gKyAxKTsKLSAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0
KCddJywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOwotICAg
ICAgICAgICAgICAgIGlmIChtYXRjaGluZyAhPT0gbnVsbCAmJiBDc3R5bGVCZWhhdmlvdXIuaXNB
dXRvSW5zZXJ0ZWRDbG9zaW5nKGN1cnNvciwgbGluZSwgdGV4dCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9KTsKLQotICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChz
dGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7Ci0gICAgICAgIHZhciBzZWxl
Y3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7Ci0gICAgICAgIGlmICghcmFu
Z2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnWycpIHsKLSAgICAgICAgICAgIHZhciBs
aW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwotICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJh
bmdlLnN0YXJ0LmNvbHVtbiArIDIpOwotICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnXScp
IHsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJhbmdlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0
aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBh
Y3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewotICAgICAgICBpZiAodGV4dCA9PSAnIicg
fHwgdGV4dCA9PSAiJyIpIHsKLSAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7Ci0gICAgICAg
ICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAg
ICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsK
LSAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICInIiAmJiBz
ZWxlY3RlZCAhPSAnIicgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUg
KyBzZWxlY3RlZCArIHF1b3RlLAotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNl
Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwotICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKLSAgICAgICAg
ICAgICAgICB2YXIgbGVmdENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLTEsIGN1
cnNvci5jb2x1bW4pOwotICAgICAgICAgICAgICAgIGlmIChsZWZ0Q2hhciA9PSAnXFwnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMoc2VsZWN0aW9uLnN0YXJ0
LnJvdyk7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbCA9IDAsIHRva2VuOwotICAgICAgICAgICAg
ICAgIHZhciBxdW90ZXBvcyA9IC0xOyAvLyBUcmFjayB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBv
cGVuIHF1b3RlLgotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0b2tlbnMu
bGVuZ3RoOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbeF07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09ICJzdHJpbmciKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgcXVvdGVwb3MgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChxdW90ZXBvcyA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBxdW90ZXBvcyA9IHRv
a2VuLnZhbHVlLmluZGV4T2YocXVvdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICgodG9rZW4udmFsdWUubGVuZ3RoICsgY29sKSA+IHNlbGVjdGlvbi5z
dGFydC5jb2x1bW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbCArPSB0b2tlbnNbeF0udmFsdWUu
bGVuZ3RoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8
IChxdW90ZXBvcyA8IDAgJiYgdG9rZW4udHlwZSAhPT0gImNvbW1lbnQiICYmICh0b2tlbi50eXBl
ICE9PSAic3RyaW5nIiB8fCAoKHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gIT09IHRva2VuLnZhbHVl
Lmxlbmd0aCtjb2wtMSkgJiYgdG9rZW4udmFsdWUubGFzdEluZGV4T2YocXVvdGUpID09PSB0b2tl
bi52YWx1ZS5sZW5ndGgtMSkpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIUNzdHlsZUJl
aGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgcXVvdGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb246IFsxLDFdCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAic3RyaW5nIikgewotICAg
ICAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNv
bHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRD
aGFyID09IHF1b3RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbjogWzEsIDFdCi0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfSk7Ci0KLSAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24i
LCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewotICAg
ICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwotICAg
ICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICciJyB8fCBzZWxl
Y3RlZCA9PSAiJyIpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExp
bmUocmFuZ2Uuc3RhcnQucm93KTsKLSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1
YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsK
LSAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAg
ICByYW5nZS5lbmQuY29sdW1uKys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLX07Ci0KLW9vcC5pbmhlcml0cyhDc3R5
bGVCZWhhdmlvdXIsIEJlaGF2aW91cik7Ci0KLWV4cG9ydHMuQ3N0eWxlQmVoYXZpb3VyID0gQ3N0
eWxlQmVoYXZpb3VyOwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxl
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uv
cmFuZ2UnLCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3Ai
KTsKLXZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Ci12YXIgQmFzZUZv
bGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKLQotdmFyIEZvbGRNb2Rl
ID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Ci1vb3AuaW5oZXJpdHMoRm9sZE1v
ZGUsIEJhc2VGb2xkTW9kZSk7Ci0KLShmdW5jdGlvbigpIHsKLQotICAgIHRoaXMuZm9sZGluZ1N0
YXJ0TWFya2VyID0gLyhce3xcWylbXlx9XF1dKiR8XlxzKihcL1wqKS87Ci0gICAgdGhpcy5mb2xk
aW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLzsKLQotICAg
IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCBy
b3cpIHsKLSAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKLSAgICAgICAg
dmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7Ci0gICAgICAg
IGlmIChtYXRjaCkgewotICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKLQotICAgICAg
ICAgICAgaWYgKG1hdGNoWzFdKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdC
cmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3Ro
LCAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb2xkU3R5bGUgIT09ICJtYXJrYmVnaW5l
bmQiKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0
Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7Ci0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAg
ICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKLQotICAgICAgICAg
ICAgaWYgKG1hdGNoWzFdKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFj
a2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7Ci0KLSAgICAgICAgICAgIHJldHVy
biBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi19KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Ci0KLX0pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvbW9kZV9odG1sLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzgzYWFmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL21vZGVfaHRtbC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDE4ODYgKzAsMCBAQAotLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICog
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgotICoKLSAqIENvcHlyaWdodCAoYykg
MjAxMCwgQWpheC5vcmcgQi5WLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3Ig
dGhlCi0gKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYu
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICoqKioqIEVORCBMSUNFTlNFIEJM
T0NLICoqKioqICovCi0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL2h0bWwnLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNl
L21vZGUvamF2YXNjcmlwdCcsICdhY2UvbW9kZS9jc3MnLCAnYWNlL3Rva2VuaXplcicsICdhY2Uv
bW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9iZWhhdmlvdXIvaHRtbCcsICdh
Y2UvbW9kZS9mb2xkaW5nL2h0bWwnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7Ci0KLQotdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKLXZhciBUZXh0TW9kZSA9
IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7Ci12YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIu
L2phdmFzY3JpcHQiKS5Nb2RlOwotdmFyIENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7
Ci12YXIgVG9rZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwotdmFy
IEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5I
dG1sSGlnaGxpZ2h0UnVsZXM7Ci12YXIgSHRtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZp
b3VyL2h0bWwiKS5IdG1sQmVoYXZpb3VyOwotdmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4v
Zm9sZGluZy9odG1sIikuRm9sZE1vZGU7Ci0KLXZhciBNb2RlID0gZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIGhpZ2hsaWdodGVyID0gbmV3IEh0bWxIaWdobGlnaHRSdWxlcygpOwotICAgIHRoaXMuJHRv
a2VuaXplciA9IG5ldyBUb2tlbml6ZXIoaGlnaGxpZ2h0ZXIuZ2V0UnVsZXMoKSk7Ci0gICAgdGhp
cy4kYmVoYXZpb3VyID0gbmV3IEh0bWxCZWhhdmlvdXIoKTsKLSAgICAKLSAgICB0aGlzLiRlbWJl
ZHMgPSBoaWdobGlnaHRlci5nZXRFbWJlZHMoKTsKLSAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0
ZXMoewotICAgICAgICAianMtIjogSmF2YVNjcmlwdE1vZGUsCi0gICAgICAgICJjc3MtIjogQ3Nz
TW9kZQotICAgIH0pOwotICAgIAotICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xk
TW9kZSgpOwotfTsKLW9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7Ci0KLShmdW5jdGlvbigp
IHsKLQotICAgIAotICAgIHRoaXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUs
IGRvYywgc3RhcnRSb3csIGVuZFJvdykgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9OwotCi0g
ICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKLSAgICB9OwotCi0gICAgdGhp
cy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLX0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwotCi1leHBv
cnRzLk1vZGUgPSBNb2RlOwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHQn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9t
b2RlL3RleHQnLCAnYWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdo
dF9ydWxlcycsICdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS9yYW5nZScs
ICdhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScs
ICdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBt
b2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwotdmFyIFRleHRN
b2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKLXZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIu
Li90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7Ci12YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0g
cmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGln
aHRSdWxlczsKLXZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdf
YnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50OwotdmFyIFJhbmdlID0gcmVxdWly
ZSgiLi4vcmFuZ2UiKS5SYW5nZTsKLXZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3Jr
ZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKLXZhciBDc3R5bGVCZWhhdmlvdXIgPSBy
ZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Ci12YXIgQ1N0eWxl
Rm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Ci0KLXZhciBN
b2RlID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihu
ZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSk7Ci0gICAgdGhpcy4kb3V0
ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwotICAgIHRoaXMuJGJlaGF2aW91ciA9
IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKLSAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5
bGVGb2xkTW9kZSgpOwotfTsKLW9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7Ci0KLShmdW5j
dGlvbigpIHsKLQotCi0gICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0
ZSwgZG9jLCBzdGFydFJvdywgZW5kUm93KSB7Ci0gICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsK
LSAgICAgICAgdmFyIHJlID0gL14oXHMqKVwvXC8vOwotCi0gICAgICAgIGZvciAodmFyIGk9c3Rh
cnRSb3c7IGk8PSBlbmRSb3c7IGkrKykgewotICAgICAgICAgICAgaWYgKCFyZS50ZXN0KGRvYy5n
ZXRMaW5lKGkpKSkgewotICAgICAgICAgICAgICAgIG91dGRlbnQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChv
dXRkZW50KSB7Ci0gICAgICAgICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwg
MCwgMCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShp
KTsKLSAgICAgICAgICAgICAgICB2YXIgbSA9IGxpbmUubWF0Y2gocmUpOwotICAgICAgICAgICAg
ICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9IGk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlUmFu
Z2UuZW5kLnJvdyA9IGk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9
IG1bMF0ubGVuZ3RoOwotICAgICAgICAgICAgICAgIGRvYy5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBt
WzFdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGRvYy5pbmRlbnRSb3dzKHN0YXJ0Um93LCBlbmRSb3csICIvLyIpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGlu
ZSwgdGFiKSB7Ci0gICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7Ci0K
LSAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2Vu
cyhsaW5lLCBzdGF0ZSk7Ci0gICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2Vu
czsKLSAgICAgICAgdmFyIGVuZFN0YXRlID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKLQotICAgICAg
ICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJj
b21tZW50IikgewotICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2FsbG93
ZWQiKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2Vc
Yi4qXDp8W1x7XChcW10pXHMqJC8pOwotICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAg
ICAgICAgICAgaW5kZW50ICs9IHRhYjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewotICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJz
dGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRj
aCgvXlxzKihcLz8pXCovKTsKLSAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAg
ICAgIGlmIChtYXRjaFsxXSkgewotICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpbmRlbnQ7Ci0gICAgfTsKLQot
ICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7Ci0g
ICAgfTsKLQotICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cp
IHsKLSAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7Ci0gICAgfTsK
LSAgICAKLSAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKLSAgICAg
ICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFz
Y3JpcHRfd29ya2VyIiwgIkphdmFTY3JpcHRXb3JrZXIiKTsKLSAgICAgICAgd29ya2VyLmF0dGFj
aFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKLQotICAgICAgICB3b3JrZXIub24o
ImpzbGludCIsIGZ1bmN0aW9uKHJlc3VsdHMpIHsKLSAgICAgICAgICAgIHNlc3Npb24uc2V0QW5u
b3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICB3
b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgc2Vzc2lvbi5j
bGVhckFubm90YXRpb25zKCk7Ci0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHdvcmtlcjsKLSAgICB9OwotCi19KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKLQotZXhwb3J0cy5N
b2RlID0gTW9kZTsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hs
aWdodF9ydWxlcycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL3Rl
eHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
ewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Ci12YXIgRG9jQ29tbWVudEhp
Z2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5E
b2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7Ci12YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWly
ZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKLQotdmFyIEph
dmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBrZXl3b3JkTWFw
cGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKLSAgICAgICAgInZhcmlhYmxlLmxhbmd1
YWdlIjoKLSAgICAgICAgICAgICJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8
TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fCIgICsgLy8gQ29uc3RydWN0b3JzCi0g
ICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAotICAgICAgICAgICAgIkFycmF5
QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fElu
dDhBcnJheXwiICAgKwotICAgICAgICAgICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4
QXJyYXl8VWludDhDbGFtcGVkQXJyYXl8IiAgICAgICAgICAgICAgICAgICAgKwotICAgICAgICAg
ICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJy
b3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKLSAgICAgICAgICAgICJTeW50YXhFcnJv
cnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsKLSAgICAgICAgICAgICJkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29k
ZVVSSXxlbmNvZGVVUklDb21wb25lbnR8ZXZhbHxpc0Zpbml0ZXwiICsgLy8gTm9uLWNvbnN0cnVj
dG9yIGZ1bmN0aW9ucwotICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAgICAg
ICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgotICAgICAgICAgICAgInRoaXN8YXJndW1l
bnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAvLyBQc2V1ZG8KLSAgICAgICAgImtleXdvcmQiOgotICAgICAgICAgICAgImNvbnN0
fHlpZWxkfGltcG9ydHxnZXR8c2V0fCIgKwotICAgICAgICAgICAgImJyZWFrfGNhc2V8Y2F0Y2h8
Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnwiICsK
LSAgICAgICAgICAgICJpZnxpbnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRy
eXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwotICAgICAgICAgICAgIl9f
cGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKLSAg
ICAgICAgICAgICJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJp
dmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIsCi0gICAgICAg
ICJzdG9yYWdlLnR5cGUiOgotICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAot
ICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOgotICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8
TmFOfHVuZGVmaW5lZCIsCi0gICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKLSAgICAgICAgICAg
ICJhbGVydCIsCi0gICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFs
c2UiCi0gICAgfSwgImlkZW50aWZpZXIiKTsKLSAgICB2YXIga3dCZWZvcmVSZSA9ICJjYXNlfGRv
fGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxk
fHZvaWQiOwotICAgIHZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZm
XVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qXFxiIjsKLQotICAgIHZhciBlc2NhcGVkUmUg
PSAiXFxcXCg/OnhbMC05YS1mQS1GXXsyfXwiICsgLy8gaGV4Ci0gICAgICAgICJ1WzAtOWEtZkEt
Rl17NH18IiArIC8vIHVuaWNvZGUKLSAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0
Ci0gICAgICAgICIzWzAtNl1bMC03XT98IiArIC8vIG9jdAotICAgICAgICAiMzdbMC03XT98IiAr
IC8vIG9jdAotICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0Ci0gICAgICAgICIuKSI7Ci0K
LSAgICB0aGlzLiRydWxlcyA9IHsKLSAgICAgICAgInN0YXJ0IiA6IFsKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKLSAgICAgICAgICAgICAgICByZWdl
eCA6IC9cL1wvLiokLwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIERvY0NvbW1lbnRIaWdo
bGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKLSAg
ICAgICAgICAgICAgICByZWdleCA6IC9cL1wqLywKLSAgICAgICAgICAgICAgICBuZXh0IDogImNv
bW1lbnQiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5n
IiwKLSAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAotICAgICAgICAgICAgICAgIG5l
eHQgIDogInFzdHJpbmciCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4g
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAotICAgICAgICAg
ICAgICAgIG5leHQgIDogInFxc3RyaW5nIgotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAg
ICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKLSAgICAgICAgICAgICAgICBy
ZWdleCA6IC8wW3hYXVswLTlhLWZBLUZdK1xiLwotICAgICAgICAgICAgfSwgewotICAgICAgICAg
ICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAotICAgICAgICAgICAg
ICAgIHJlZ2V4IDogL1srLV0/XGQrKD86KD86XC5cZCopPyg/OltlRV1bKy1dP1xkKyk/KT9cYi8K
LSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6IFsKLSAgICAgICAgICAg
ICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0
LmZ1bmN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwg
ImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgotICAgICAg
ICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUg
KyAiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KSIs
Ci0gICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKLSAgICAgICAgICAg
IH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6IFsKLSAgICAgICAgICAgICAgICAgICAgInN0
b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlv
biIsICJ0ZXh0IiwKLSAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4
dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCi0gICAgICAgICAgICAg
ICAgXSwKLSAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxc
LikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxc
KCkiLAotICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0gICAgICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiBbCi0gICAgICAgICAgICAgICAgICAg
ICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4
dCIsICJzdG9yYWdlLnR5cGUiLAotICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJwYXJlbi5s
cGFyZW4iCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICByZWdleCA6ICIoIiAr
IGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAot
ICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0gICAgICAgICAgICB9
LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiBbCi0gICAgICAgICAgICAgICAgICAgICJzdG9y
YWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24i
LCAidGV4dCIsCi0gICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQi
LAotICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5h
bWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCi0gICAgICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiAr
IGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxc
cyopKFxcKCkiLAotICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0g
ICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiBbCi0gICAgICAgICAgICAg
ICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0
ZXh0IiwgInBhcmVuLmxwYXJlbiIKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAg
IHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxc
KCkiLAotICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0gICAgICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiBbCi0gICAgICAgICAgICAgICAgICAg
ICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwK
LSAgICAgICAgICAgICAgICAgICAgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFy
ZW4ubHBhcmVuIgotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgcmVnZXggOiAi
KCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwo
KSIsCi0gICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKLSAgICAgICAg
ICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6IFsKLSAgICAgICAgICAgICAgICAgICAg
InRleHQiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCi0g
ICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVu
Y3Rpb24pKFxccyopKFxcKCkiLAotICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1
bWVudHMiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29y
ZCIsCi0gICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIs
Ci0gICAgICAgICAgICAgICAgbmV4dCA6ICJyZWdleF9hbGxvd2VkIgotICAgICAgICAgICAgfSwg
ewotICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBw
b3J0LmZ1bmN0aW9uIl0sCi0gICAgICAgICAgICAgICAgcmVnZXggOiAvKFwuKShzKD86aCg/Omlm
dHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86
UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wenp6enxyaWtlKXxpKD86bnx6ZVRvQ29udGVudHxk
ZWJhcnxnblRleHQpfG9ydHx1KD86cHxiKD86c3RyKD86aW5nKT8pPyl8cGxpKD86Y2V8dCl8ZSg/
Om5kfHQoPzpSZSg/OnNpemFibGV8cXVlc3RIZWFkZXIpfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25k
cyl8b250aCl8U2Vjb25kc3xIbyg/OnRLZXlzfHVycyl8WWVhcnxDdXJzb3J8VGltZSg/Om91dCk/
fEludGVydmFsfFpPcHRpb25zfERhdGV8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxv
bnRoKXxTZWNvbmRzfEhvdXJzfERhdGV8RnVsbFllYXIpfEZ1bGxZZWFyfEFjdGl2ZSl8YXJjaCl8
cXJ0fGxpY2V8YXZlUHJlZmVyZW5jZXN8bWFsbCl8aCg/Om9tZXxhbmRsZUV2ZW50KXxuYXZpZ2F0
ZXxjKD86aGFyKD86Q29kZUF0fEF0KXxvKD86c3xuKD86Y2F0fHRleHR1YWx8ZmlybSl8bXBpbGUp
fGVpbHxsZWFyKD86VGltZW91dHxJbnRlcnZhbCk/fGEoPzpwdHVyZUV2ZW50c3xsbCl8cmVhdGUo
PzpTdHlsZVNoZWV0fFBvcHVwfEV2ZW50T2JqZWN0KSl8dCg/Om8oPzpHTVRTdHJpbmd8Uyg/OnRy
aW5nfG91cmNlKXxVKD86VENTdHJpbmd8cHBlckNhc2UpfExvKD86Y2FsZVN0cmluZ3x3ZXJDYXNl
KSl8ZXN0fGEoPzpufGludCg/OkVuYWJsZWQpPykpfGkoPzpzKD86TmFOfEZpbml0ZSl8bmRleE9m
fHRhbGljcyl8ZCg/OmlzYWJsZUV4dGVybmFsQ2FwdHVyZXx1bXB8ZXRhY2hFdmVudCl8dSg/Om4o
PzpzaGlmdHx0YWludHxlc2NhcGV8d2F0Y2gpfHBkYXRlQ29tbWFuZHMpfGooPzpvaW58YXZhRW5h
YmxlZCl8cCg/Om8oPzpwfHcpfHVzaHxsdWdpbnMucmVmcmVzaHxhKD86ZGRpbmdzfHJzZSg/Oklu
dHxGbG9hdCk/KXxyKD86aW50fG9tcHR8ZWZlcmVuY2UpKXxlKD86c2NhcGV8bmFibGVFeHRlcm5h
bENhcHR1cmV8dmFsfGxlbWVudEZyb21Qb2ludHx4KD86cHxlYyg/OlNjcmlwdHxDb21tYW5kKT8p
KXx2YWx1ZU9mfFVUQ3xxdWVyeUNvbW1hbmQoPzpTdGF0ZXxJbmRldGVybXxFbmFibGVkfFZhbHVl
KXxmKD86aSg/Om5kfGxlKD86TW9kaWZpZWREYXRlfFNpemV8Q3JlYXRlZERhdGV8VXBkYXRlZERh
dGUpfHhlZCl8byg/Om50KD86c2l6ZXxjb2xvcil8cndhcmQpfGxvb3J8cm9tQ2hhckNvZGUpfHdh
dGNofGwoPzppbmt8byg/OmFkfGcpfGFzdEluZGV4T2YpfGEoPzpzaW58bmNob3J8Y29zfHQoPzp0
YWNoRXZlbnR8b2J8YW4oPzoyKT8pfHBwbHl8bGVydHxiKD86c3xvcnQpKXxyKD86b3UoPzpuZHx0
ZUV2ZW50cyl8ZSg/OnNpemUoPzpCeXxUbyl8Y2FsY3x0dXJuVmFsdWV8cGxhY2V8dmVyc2V8bCg/
Om9hZHxlYXNlKD86Q2FwdHVyZXxFdmVudHMpKSl8YW5kb20pfGcoPzpvfGV0KD86UmVzcG9uc2VI
ZWFkZXJ8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZSg/OmNvbmRzfGxlY3Rpb24p
fEhvdXJzfFllYXJ8VGltZSg/OnpvbmVPZmZzZXQpP3xEYSg/Onl8dGUpfFVUQyg/Ok0oPzppKD86
bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFy
KXxGdWxsWWVhcnxBKD86dHRlbnRpb258bGxSZXNwb25zZUhlYWRlcnMpKSl8bSg/OmlufG92ZSg/
OkIoPzp5fGVsb3cpfFRvKD86QWJzb2x1dGUpP3xBYm92ZSl8ZXJnZUF0dHJpYnV0ZXN8YSg/OnRj
aHxyZ2luc3x4KSl8Yig/OnRvYXxpZ3xvKD86bGR8cmRlcldpZHRocyl8bGlua3xhY2spKVxiKD89
XCgpLwotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVh
dGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uLmRvbSJdLAotICAgICAgICAgICAgICAg
IHJlZ2V4IDogLyhcLikocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86
TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVh
dHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpv
bW1lbnR8REFUQVNlY3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50
RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQp
fEF0dHJpYnV0ZSkpfHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0
ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRh
KXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0
fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpO
b2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWUpfEJ5
SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KLSAgICAgICAgICAgIH0sIHsK
LSAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9y
dC5jb25zdGFudCJdLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhcLikocyg/OnlzdGVtTGFu
Z3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNo
ZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZm
aXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0
KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/
OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxj
KD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9y
RGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJk
RGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/
Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFn
cyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9y
ZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86
SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FU
SVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxB
cmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVj
a2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86
aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0
fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJp
Z2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNl
dCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1w
dGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVy
bmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8
VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/
OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8
d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpj
YSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEo
PzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkp
fGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWls
KD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxi
b3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRl
KSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJv
dHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218
cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8
TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIv
Ci0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlw
ZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSwK
LSAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJy
b3J8dGltZXx0aW1lRW5kfGFzc2VydClcYi8KLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAg
ICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCi0gICAgICAgICAgICAgICAgcmVnZXggOiBpZGVu
dGlmaWVyUmUKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3
b3JkLm9wZXJhdG9yIiwKLSAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFshJCUmKitc
LX5dfD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XHxcfHxc
P1w6fFwqPXwlPXxcKz18XC09fCY9fFxePS8sCi0gICAgICAgICAgICAgICAgbmV4dCAgOiAicmVn
ZXhfYWxsb3dlZCIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6ICJw
dW5jdHVhdGlvbi5vcGVyYXRvciIsCi0gICAgICAgICAgICAgICAgcmVnZXggOiAvXD98XDp8XCx8
XDt8XC4vLAotICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCi0gICAgICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKLSAgICAg
ICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAotICAgICAgICAgICAgICAgIG5leHQgIDogInJl
Z2V4X2FsbG93ZWQiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAi
cGFyZW4ucnBhcmVuIiwKLSAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCi0gICAgICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCi0g
ICAgICAgICAgICAgICAgcmVnZXggOiAvXC89Py8sCi0gICAgICAgICAgICAgICAgbmV4dCAgOiAi
cmVnZXhfYWxsb3dlZCIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbjog
ImNvbW1lbnQiLAotICAgICAgICAgICAgICAgIHJlZ2V4OiAvXiMhLiokLwotICAgICAgICAgICAg
fQotICAgICAgICBdLAotICAgICAgICAicmVnZXhfYWxsb3dlZCI6IFsKLSAgICAgICAgICAgIERv
Y0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5l
IGNvbW1lbnQKLSAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAotICAgICAgICAgICAg
ICAgIG5leHQgOiAiY29tbWVudF9yZWdleF9hbGxvd2VkIgotICAgICAgICAgICAgfSwgewotICAg
ICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAotICAgICAgICAgICAgICAgIHJlZ2V4IDog
IlxcL1xcLy4qJCIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbjogInN0
cmluZy5yZWdleHAiLAotICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKLSAgICAgICAgICAg
ICAgICBuZXh0OiAicmVnZXgiLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRv
a2VuIDogInRleHQiLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCi0gICAgICAgICAg
ICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCi0gICAgICAgICAgICAgICAg
cmVnZXg6ICIiLAotICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKLSAgICAgICAgICAgIH0K
LSAgICAgICAgXSwKLSAgICAgICAgInJlZ2V4IjogWwotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAotICAgICAgICAgICAgICAg
IHJlZ2V4OiAiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCi0gICAg
ICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKLSAg
ICAgICAgICAgICAgICByZWdleDogIi9cXHcqIiwKLSAgICAgICAgICAgICAgICBuZXh0OiAic3Rh
cnQiLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQi
LAotICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCssPyg/OlxkKyk/fVsrKl18WysqJF4/XVsr
Kl18WyReXVs/XXxcP3szLH0vCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9r
ZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKLSAgICAgICAgICAgICAgICByZWdleDog
L1woXD9bOj0hXXxcKXx7XGQrLD8oPzpcZCspP318eyxcZCt9fFsrKl1cP3xbKCkkXisqP10vCi0g
ICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3Vh
Z2UuZGVsaW1pdGVyIiwKLSAgICAgICAgICAgICAgICByZWdleDogL1x8LwotICAgICAgICAgICAg
fSwgewotICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwK
LSAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKLSAgICAgICAgICAgICAgICBuZXh0OiAi
cmVnZXhfY2hhcmFjdGVyX2NsYXNzIiwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAg
ICB0b2tlbjogImVtcHR5IiwKLSAgICAgICAgICAgICAgICByZWdleDogIiQiLAotICAgICAgICAg
ICAgICAgIG5leHQ6ICJzdGFydCIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgotICAgICAgICAgICAgfQotICAgICAgICBdLAot
ICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAotICAgICAgICAgICAg
ICAgIHJlZ2V4OiAiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCi0g
ICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFn
ZS5lc2NhcGUiLAotICAgICAgICAgICAgICAgIHJlZ2V4OiAiXSIsCi0gICAgICAgICAgICAgICAg
bmV4dDogInJlZ2V4IiwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbjog
ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCi0gICAgICAgICAgICAgICAgcmVnZXg6ICItIgot
ICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAotICAgICAg
ICAgICAgICAgIHJlZ2V4OiAiJCIsCi0gICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgotICAg
ICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdl
eHAuY2hhcmFjaHRlcmNsYXNzIgotICAgICAgICAgICAgfQotICAgICAgICBdLAotICAgICAgICAi
ZnVuY3Rpb25fYXJndW1lbnRzIjogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRv
a2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKLSAgICAgICAgICAgICAgICByZWdleDogaWRlbnRp
ZmllclJlCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVh
dGlvbi5vcGVyYXRvciIsCi0gICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIsCi0gICAgICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIs
Ci0gICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAg
ICAgICAgICB0b2tlbjogImVtcHR5IiwKLSAgICAgICAgICAgICAgICByZWdleDogIiIsCi0gICAg
ICAgICAgICAgICAgbmV4dDogInN0YXJ0IgotICAgICAgICAgICAgfQotICAgICAgICBdLAotICAg
ICAgICAiY29tbWVudF9yZWdleF9hbGxvd2VkIiA6IFsKLSAgICAgICAgICAgIHt0b2tlbiA6ICJj
b21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJyZWdleF9hbGxvd2VkIn0sCi0gICAg
ICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQifQotICAgICAgICBdLAotICAgICAgICAi
Y29tbWVudCIgOiBbCi0gICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxc
KlxcLyIsIG5leHQgOiAic3RhcnQifSwKLSAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29t
bWVudCJ9Ci0gICAgICAgIF0sCi0gICAgICAgICJxcXN0cmluZyIgOiBbCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKLSAg
ICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQotICAgICAgICAgICAgfSwgewotICAgICAg
ICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCi0gICAgICAgICAgICAgICAgcmVnZXggOiAiXFxc
XCQiLAotICAgICAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIiwKLSAgICAgICAgICAgIH0s
IHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgIHJl
Z2V4IDogJyJ8JCcsCi0gICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAotICAgICAgICAg
ICAgfSwgewotICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgXSwKLSAgICAgICAgInFzdHJpbmciIDogWwotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCi0gICAg
ICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAg
ICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwk
IiwKLSAgICAgICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIiwKLSAgICAgICAgICAgIH0sIHsK
LSAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgIHJlZ2V4
IDogIid8JCIsCi0gICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAotICAgICAgICAgICAg
fSwgewotICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKLSAgICAgICAgICAg
IH0KLSAgICAgICAgXQotICAgIH07Ci0KLSAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhp
Z2hsaWdodFJ1bGVzLCAiZG9jLSIsCi0gICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVz
LmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Ci19OwotCi1vb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhp
Z2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwotCi1leHBvcnRzLkphdmFTY3JpcHRI
aWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKLX0pOwotCi1hY2UuZGVm
aW5lKCdhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxp
Z2h0X3J1bGVzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZh
ciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Ci12YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0g
cmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKLQot
dmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewotCi0gICAgdGhpcy4k
cnVsZXMgPSB7Ci0gICAgICAgICJzdGFydCIgOiBbIHsKLSAgICAgICAgICAgIHRva2VuIDogImNv
bW1lbnQuZG9jLnRhZyIsCi0gICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9E
TzogZml4IGVtYWlsIGFkZHJlc3NlcwotICAgICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6
ICJjb21tZW50LmRvYy50YWciLAotICAgICAgICAgICAgcmVnZXggOiAiXFxiVE9ET1xcYiIKLSAg
ICAgICAgfSwgewotICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIgotICAg
ICAgICB9XQotICAgIH07Ci19OwotCi1vb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1
bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwotCi1Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0
U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKLSAgICByZXR1cm4gewotICAgICAgICB0b2tl
biA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50Ci0gICAgICAgIHJlZ2V4IDogIlxcL1xc
Kig/PVxcKikiLAotICAgICAgICBuZXh0ICA6IHN0YXJ0Ci0gICAgfTsKLX07Ci0KLURvY0NvbW1l
bnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBjbG9zaW5nIGNvbW1lbnQK
LSAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKLSAgICAgICAgbmV4dCAgOiBzdGFydAotICAgIH07
Ci19OwotCi0KLWV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhp
Z2hsaWdodFJ1bGVzOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvbWF0Y2hpbmdfYnJh
Y2Vfb3V0ZGVudCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3Jhbmdl
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBSYW5nZSA9
IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Ci0KLXZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9
IGZ1bmN0aW9uKCkge307Ci0KLShmdW5jdGlvbigpIHsKLQotICAgIHRoaXMuY2hlY2tPdXRkZW50
ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKLSAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxp
bmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiAvXlxzKlx9
Ly50ZXN0KGlucHV0KTsKLSAgICB9OwotCi0gICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9u
KGRvYywgcm93KSB7Ci0gICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKLSAgICAg
ICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKLQotICAgICAgICBpZiAoIW1h
dGNoKSByZXR1cm4gMDsKLQotICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwot
ICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzog
cm93LCBjb2x1bW46IGNvbHVtbn0pOwotCi0gICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9w
ZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKLQotICAgICAgICB2YXIgaW5kZW50ID0g
dGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKLSAgICAgICAg
ZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7Ci0g
ICAgfTsKLQotICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAg
dmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccyspLyk7Ci0gICAgICAgIGlmIChtYXRjaCkgewot
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
ICIiOwotICAgIH07Ci0KLX0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsK
LQotZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owot
fSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91
cicsICdhY2UvdG9rZW5faXRlcmF0b3InLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIv
b29wIik7Ci12YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3Vy
OwotdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRv
a2VuSXRlcmF0b3I7Ci12YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7Ci0KLXZh
ciBTQUZFX0lOU0VSVF9JTl9UT0tFTlMgPQotICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAi
cHVuY3R1YXRpb24ub3BlcmF0b3IiXTsKLXZhciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0K
LSAgICBbInRleHQiLCAicGFyZW4ucnBhcmVuIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNv
bW1lbnQiXTsKLQotCi12YXIgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwotdmFyIGF1dG9JbnNl
cnRlZFJvdyA9IC0xOwotdmFyIGF1dG9JbnNlcnRlZExpbmVFbmQgPSAiIjsKLXZhciBtYXliZUlu
c2VydGVkQnJhY2tldHMgPSAwOwotdmFyIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKLXZhciBtYXli
ZUluc2VydGVkTGluZVN0YXJ0ID0gIiI7Ci12YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsK
LQotdmFyIENzdHlsZUJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKLSAgICAKLSAgICBDc3R5bGVC
ZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7Ci0g
ICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAg
dmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vy
c29yLmNvbHVtbik7Ci0gICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3Iu
Z2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7Ci0g
ICAgICAgICAgICB2YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vy
c29yLnJvdywgY3Vyc29yLmNvbHVtbiArIDEpOwotICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRj
aFRva2VuVHlwZShpdGVyYXRvcjIuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lO
U0VSVF9JTl9UT0tFTlMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwotICAgICAgICByZXR1cm4gaXRlcmF0
b3IuZ2V0Q3VycmVudFRva2VuUm93KCkgIT09IGN1cnNvci5yb3cgfHwKLSAgICAgICAgICAgIHRo
aXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0Iiwg
U0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyk7Ci0gICAgfTsKLSAgICAKLSAgICBDc3R5bGVCZWhh
dmlvdXIuJG1hdGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7Ci0gICAgICAg
IHJldHVybiB0eXBlcy5pbmRleE9mKHRva2VuLnR5cGUgfHwgdG9rZW4pID4gLTE7Ci0gICAgfTsK
LSAgICAKLSAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVk
aXRvciwgc2Vzc2lvbiwgYnJhY2tldCkgewotICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdl
dEN1cnNvclBvc2l0aW9uKCk7Ci0gICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGlu
ZShjdXJzb3Iucm93KTsKLSAgICAgICAgaWYgKCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhj
dXJzb3IsIGxpbmUsIGF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQotICAgICAgICAgICAgYXV0b0lu
c2VydGVkQnJhY2tldHMgPSAwOwotICAgICAgICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93
OwotICAgICAgICBhdXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1
cnNvci5jb2x1bW4pOwotICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0cysrOwotICAgIH07Ci0g
ICAgCi0gICAgQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRp
dG9yLCBzZXNzaW9uLCBicmFja2V0KSB7Ci0gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0
Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5l
KGN1cnNvci5yb3cpOwotICAgICAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhj
dXJzb3IsIGxpbmUpKQotICAgICAgICAgICAgbWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKLSAg
ICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7Ci0gICAgICAgIG1heWJlSW5zZXJ0
ZWRMaW5lU3RhcnQgPSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7Ci0g
ICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7
Ci0gICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cysrOwotICAgIH07Ci0gICAgCi0gICAgQ3N0
eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGlu
ZSwgYnJhY2tldCkgewotICAgICAgICByZXR1cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYm
Ci0gICAgICAgICAgICBjdXJzb3Iucm93ID09PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKLSAgICAgICAg
ICAgIGJyYWNrZXQgPT09IGF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKLSAgICAgICAgICAgIGxp
bmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOwotICAgIH07
Ci0gICAgCi0gICAgQ3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5j
dGlvbihjdXJzb3IsIGxpbmUpIHsKLSAgICAgICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0
cyA+IDAgJiYKLSAgICAgICAgICAgIGN1cnNvci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYK
LSAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVk
TGluZUVuZCAmJgotICAgICAgICAgICAgbGluZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0g
bWF5YmVJbnNlcnRlZExpbmVTdGFydDsKLSAgICB9OwotICAgIAotICAgIENzdHlsZUJlaGF2aW91
ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGF1dG9JbnNl
cnRlZExpbmVFbmQgPSBhdXRvSW5zZXJ0ZWRMaW5lRW5kLnN1YnN0cigxKTsKLSAgICAgICAgYXV0
b0luc2VydGVkQnJhY2tldHMtLTsKLSAgICB9OwotICAgIAotICAgIENzdHlsZUJlaGF2aW91ci5j
bGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIG1heWJlSW5z
ZXJ0ZWRCcmFja2V0cyA9IDA7Ci0gICAgICAgIG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKLSAgICB9
OwotCi0gICAgdGhpcy5hZGQoImJyYWNlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUs
IGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7Ci0gICAgICAgIHZhciBjdXJzb3IgPSBl
ZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRv
Yy5nZXRMaW5lKGN1cnNvci5yb3cpOwotICAgICAgICBpZiAodGV4dCA9PSAneycpIHsKLSAgICAg
ICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAgICAg
ICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24p
OwotICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYm
IGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAot
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCi0gICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihl
ZGl0b3IsIHNlc3Npb24pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChs
aW5lW2N1cnNvci5jb2x1bW5dKSkgewotICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlv
dXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAne30nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDc3R5
bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDog
J3snLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSBpZiAodGV4dCA9PSAnfScpIHsKLSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBs
aW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7Ci0gICAgICAg
ICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgewotICAgICAgICAgICAgICAgIHZhciBtYXRjaGlu
ZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1
bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcg
IT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3Is
IGxpbmUsIHRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BB
dXRvSW5zZXJ0ZWRDbG9zaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbjogWzEsIDFdCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0
ID09ICJcclxuIikgewotICAgICAgICAgICAgdmFyIGNsb3NpbmcgPSAiIjsKLSAgICAgICAgICAg
IGlmIChDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUp
KSB7Ci0gICAgICAgICAgICAgICAgY2xvc2luZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5
YmVJbnNlcnRlZEJyYWNrZXRzKTsKLSAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xl
YXJNYXliZUluc2VydGVkQ2xvc2luZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFy
IHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4g
KyAxKTsKLSAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIi
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNo
aW5nQnJhY2tldCh7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScp
OwotICAgICAgICAgICAgICAgIGlmICghb3BlbkJyYWNlUG9zKQotICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXRO
ZXh0TGluZUluZGVudChzdGF0ZSwgbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNl
c3Npb24uZ2V0VGFiU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9
IHRoaXMuJGdldEluZGVudChsaW5lKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHQ6ICdcbicgKyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQg
KyBjbG9zaW5nLAotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVu
Z3RoLCAxLCBpbmRlbnQubGVuZ3RoXQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24i
LCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewotICAg
ICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwotICAg
ICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7Ci0gICAg
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsK
LSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29s
dW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09
ICd9JykgewotICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmFuZ2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IG1heWJlSW5zZXJ0ZWRCcmFja2V0cy0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fSk7Ci0KLSAgICB0aGlzLmFkZCgicGFyZW5zIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0
ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKLSAgICAgICAgaWYgKHRleHQgPT0g
JygnKSB7Ci0gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJh
bmdlKCk7Ci0gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFu
Z2Uoc2VsZWN0aW9uKTsKLSAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9y
LmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICAgICAgdGV4dDogJygnICsgc2VsZWN0ZWQgKyAnKScsCi0gICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwg
c2Vzc2lvbikpIHsKLSAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0lu
c2VydChlZGl0b3IsIHNlc3Npb24sICIpIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGV4dDogJygpJywKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKHRleHQgPT0gJyknKSB7Ci0gICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9y
LmdldEN1cnNvclBvc2l0aW9uKCk7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9j
LmdldExpbmUoY3Vyc29yLnJvdyk7Ci0gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5z
dWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwotICAgICAgICAgICAg
aWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBz
ZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsg
MSwgcm93OiBjdXJzb3Iucm93fSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBu
dWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5l
LCB0ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0lu
c2VydGVkQ2xvc2luZygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dDogJycsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b246IFsxLCAxXQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgdGhpcy5hZGQoInBhcmVucyIs
ICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJh
bmdlKSB7Ci0gICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShy
YW5nZSk7Ci0gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAn
KCcpIHsKLSAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5z
dGFydC5yb3cpOwotICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJh
bmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOwotICAgICAgICAg
ICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29s
dW1uKys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwg
ZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewotICAgICAg
ICBpZiAodGV4dCA9PSAnWycpIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iu
Z2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24u
ZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9
PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCAr
ICddJywKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQotICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNl
cnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgewotICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91
ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnW10nLAotICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKLSAgICAgICAgICAgIHZhciBj
dXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHZhciBsaW5l
ID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKLSAgICAgICAgICAgIHZhciByaWdo
dENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7
Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykgewotICAgICAgICAgICAgICAgIHZh
ciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1
cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsKLSAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2lu
ZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2
aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0aGlz
LmFkZCgiYnJhY2tldHMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRp
dG9yLCBzZXNzaW9uLCByYW5nZSkgewotICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRv
Yy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwotICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkg
JiYgc2VsZWN0ZWQgPT0gJ1snKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9j
LmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKLSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBs
aW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4g
KyAyKTsKLSAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7Ci0gICAgICAgICAgICAg
ICAgcmFuZ2UuZW5kLmNvbHVtbisrOwotICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgdGhpcy5hZGQoInN0cmluZ19k
cXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNl
c3Npb24sIHRleHQpIHsKLSAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7
Ci0gICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OwotICAgICAgICAgICAgdmFyIHNlbGVjdGlv
biA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwotICAgICAgICAgICAgdmFyIHNlbGVjdGVk
ID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7Ci0gICAgICAgICAgICBpZiAo
c2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYm
IGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90
ZSwKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBl
ZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNl
c3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7Ci0gICAgICAgICAgICAgICAgdmFyIGxlZnRD
aGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKLSAg
ICAgICAgICAgICAgICBpZiAobGVmdENoYXIgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIHRv
a2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHNlbGVjdGlvbi5zdGFydC5yb3cpOwotICAgICAgICAg
ICAgICAgIHZhciBjb2wgPSAwLCB0b2tlbjsKLSAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3Mg
PSAtMTsgLy8gVHJhY2sgd2hldGhlciB3ZSdyZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KLQotICAg
ICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW3hdOwotICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICAgIHF1
b3RlcG9zID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgcXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9m
KHF1b3RlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo
KHRva2VuLnZhbHVlLmxlbmd0aCArIGNvbCkgPiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5zW3hdLnZhbHVlLmxlbmd0aDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYm
IHRva2VuLnR5cGUgIT09ICJjb21tZW50IiAmJiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwg
KChzZWxlY3Rpb24uc3RhcnQuY29sdW1uICE9PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYm
IHRva2VuLnZhbHVlLmxhc3RJbmRleE9mKHF1b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEp
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5z
ZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0OiBxdW90ZSArIHF1b3RlLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBb
MSwxXQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
dG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1
bW4gKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsx
LCAxXQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotCi0g
ICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRl
LCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKLSAgICAgICAgdmFyIHNlbGVjdGVk
ID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKLSAgICAgICAgaWYgKCFyYW5nZS5p
c011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgewot
ICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJv
dyk7Ci0gICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3Rh
cnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7Ci0gICAgICAgICAgICBpZiAo
cmlnaHRDaGFyID09IHNlbGVjdGVkKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVt
bisrOwotICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0pOwotCi19OwotCi1vb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhh
dmlvdXIpOwotCi1leHBvcnRzLkNzdHlsZUJlaGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKLX0p
OwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2Rl
L2ZvbGRpbmcvZm9sZF9tb2RlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
ewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Ci12YXIgUmFuZ2UgPSBy
ZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwotdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUo
Ii4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Ci0KLXZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1v
ZGUgPSBmdW5jdGlvbigpIHt9Owotb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUp
OwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8
XFspW15cfVxdXSokfF5ccyooXC9cKikvOwotICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAv
XlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihcKlwvKS87Ci0KLSAgICB0aGlzLmdldEZvbGRXaWRn
ZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7Ci0gICAgICAgIHZh
ciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7Ci0gICAgICAgIHZhciBtYXRjaCA9IGxpbmUu
bWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwotICAgICAgICBpZiAobWF0Y2gpIHsKLSAg
ICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaFsx
XSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Np
b24sIG1hdGNoWzFdLCByb3csIGkpOwotCi0gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRD
b21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZm9sZFN0eWxlICE9PSAibWFya2JlZ2luZW5kIikKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0
b3BNYXJrZXIpOwotICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgIHZhciBpID0gbWF0
Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaFsxXSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24s
IG1hdGNoWzFdLCByb3csIGkpOwotCi0gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21t
ZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwotICAgICAgICB9Ci0gICAgfTsKLQotfSkuY2FsbChG
b2xkTW9kZS5wcm90b3R5cGUpOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvY3NzJywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbW9k
ZS90ZXh0JywgJ2FjZS90b2tlbml6ZXInLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcycs
ICdhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50JywgJ2FjZS93b3JrZXIvd29ya2VyX2Ns
aWVudCcsICdhY2UvbW9kZS9iZWhhdmlvdXIvY3NzJywgJ2FjZS9tb2RlL2ZvbGRpbmcvY3N0eWxl
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSBy
ZXF1aXJlKCIuLi9saWIvb29wIik7Ci12YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5N
b2RlOwotdmFyIFRva2VuaXplciA9IHJlcXVpcmUoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcjsK
LXZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIp
LkNzc0hpZ2hsaWdodFJ1bGVzOwotdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgi
Li9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Ci12YXIgV29y
a2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGll
bnQ7Ci12YXIgQ3NzQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVo
YXZpb3VyOwotdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIp
LkZvbGRNb2RlOwotCi12YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuJHRva2VuaXpl
ciA9IG5ldyBUb2tlbml6ZXIobmV3IENzc0hpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKSwgImki
KTsKLSAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7Ci0gICAg
dGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwotICAgIHRoaXMuZm9sZGluZ1J1
bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Ci19Owotb29wLmluaGVyaXRzKE1vZGUsIFRleHRN
b2RlKTsKLQotKGZ1bmN0aW9uKCkgewotCi0gICAgdGhpcy5mb2xkaW5nUnVsZXMgPSAiY1N0eWxl
IjsKLQotICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwg
dGFiKSB7Ci0gICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7Ci0gICAg
ICAgIHZhciB0b2tlbnMgPSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0
ZSkudG9rZW5zOwotICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxl
bmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewotICAgICAgICAgICAgcmV0dXJuIGluZGVudDsK
LSAgICAgICAgfQotCi0gICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8p
OwotICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgIGluZGVudCArPSB0YWI7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gaW5kZW50OwotICAgIH07Ci0KLSAgICB0aGlzLmNoZWNr
T3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewotICAgICAgICByZXR1cm4g
dGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwotICAgIH07Ci0KLSAgICB0
aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7Ci0gICAgICAgIHRo
aXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwotICAgIH07Ci0KLSAgICB0aGlzLmNy
ZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKLSAgICAgICAgdmFyIHdvcmtlciA9IG5l
dyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7
Ci0gICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7
Ci0KLSAgICAgICAgd29ya2VyLm9uKCJjc3NsaW50IiwgZnVuY3Rpb24oZSkgewotICAgICAgICAg
ICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwotICAgICAgICB9KTsKLQotICAgICAg
ICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgc2Vzc2lv
bi5jbGVhckFubm90YXRpb25zKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiB3b3Jr
ZXI7Ci0gICAgfTsKLQotfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7Ci0KLWV4cG9ydHMuTW9kZSA9
IE1vZGU7Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVz
JywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2Uv
bGliL2xhbmcnLCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMnXSwgZnVuY3Rpb24ocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9v
b3AiKTsKLXZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKLXZhciBUZXh0SGlnaGxp
Z2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdo
dFJ1bGVzOwotdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbmltYXRp
b24tZmlsbC1tb2RlfGFsaWdubWVudC1hZGp1c3R8YWxpZ25tZW50LWJhc2VsaW5lfGFuaW1hdGlv
bi1kZWxheXxhbmltYXRpb24tZGlyZWN0aW9ufGFuaW1hdGlvbi1kdXJhdGlvbnxhbmltYXRpb24t
aXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1h
dGlvbi10aW1pbmctZnVuY3Rpb258YW5pbWF0aW9ufGFwcGVhcmFuY2V8YXppbXV0aHxiYWNrZmFj
ZS12aXNpYmlsaXR5fGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJyZWFrfGJhY2tn
cm91bmQtY2xpcHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1v
cmlnaW58YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXNp
emV8YmFja2dyb3VuZHxiYXNlbGluZS1zaGlmdHxiaW5kaW5nfGJsZWVkfGJvb2ttYXJrLWxhYmVs
fGJvb2ttYXJrLWxldmVsfGJvb2ttYXJrLXN0YXRlfGJvb2ttYXJrLXRhcmdldHxib3JkZXItYm90
dG9tfGJvcmRlci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXIt
Ym90dG9tLXJpZ2h0LXJhZGl1c3xib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lk
dGh8Ym9yZGVyLWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItaW1hZ2V8Ym9yZGVyLWltYWdl
LW91dHNldHxib3JkZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1h
Z2Utc291cmNlfGJvcmRlci1pbWFnZS13aWR0aHxib3JkZXItbGVmdHxib3JkZXItbGVmdC1jb2xv
cnxib3JkZXItbGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItcmFkaXVzfGJvcmRl
ci1yaWdodHxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdo
dC13aWR0aHxib3JkZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcHxib3JkZXItdG9w
LWNvbG9yfGJvcmRlci10b3AtbGVmdC1yYWRpdXN8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9y
ZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci13aWR0aHxib3JkZXJ8Ym90dG9t
fGJveC1hbGlnbnxib3gtZGVjb3JhdGlvbi1icmVha3xib3gtZGlyZWN0aW9ufGJveC1mbGV4LWdy
b3VwfGJveC1mbGV4fGJveC1saW5lc3xib3gtb3JkaW5hbC1ncm91cHxib3gtb3JpZW50fGJveC1w
YWNrfGJveC1zaGFkb3d8Ym94LXNpemluZ3xicmVhay1hZnRlcnxicmVhay1iZWZvcmV8YnJlYWst
aW5zaWRlfGNhcHRpb24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yLXByb2ZpbGV8Y29sb3J8Y29sdW1u
LWNvdW50fGNvbHVtbi1maWxsfGNvbHVtbi1nYXB8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtY29s
b3J8Y29sdW1uLXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXNwYW58Y29sdW1u
LXdpZHRofGNvbHVtbnN8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGNy
b3B8Y3VlLWFmdGVyfGN1ZS1iZWZvcmV8Y3VlfGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxkb21p
bmFudC1iYXNlbGluZXxkcm9wLWluaXRpYWwtYWZ0ZXItYWRqdXN0fGRyb3AtaW5pdGlhbC1hZnRl
ci1hbGlnbnxkcm9wLWluaXRpYWwtYmVmb3JlLWFkanVzdHxkcm9wLWluaXRpYWwtYmVmb3JlLWFs
aWdufGRyb3AtaW5pdGlhbC1zaXplfGRyb3AtaW5pdGlhbC12YWx1ZXxlbGV2YXRpb258ZW1wdHkt
Y2VsbHN8Zml0fGZpdC1wb3NpdGlvbnxmbG9hdC1vZmZzZXR8ZmxvYXR8Zm9udC1mYW1pbHl8Zm9u
dC1zaXplfGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJp
YW50fGZvbnQtd2VpZ2h0fGZvbnR8Z3JpZC1jb2x1bW5zfGdyaWQtcm93c3xoYW5naW5nLXB1bmN0
dWF0aW9ufGhlaWdodHxoeXBoZW5hdGUtYWZ0ZXJ8aHlwaGVuYXRlLWJlZm9yZXxoeXBoZW5hdGUt
Y2hhcmFjdGVyfGh5cGhlbmF0ZS1saW5lc3xoeXBoZW5hdGUtcmVzb3VyY2V8aHlwaGVuc3xpY29u
fGltYWdlLW9yaWVudGF0aW9ufGltYWdlLXJlbmRlcmluZ3xpbWFnZS1yZXNvbHV0aW9ufGlubGlu
ZS1ib3gtYWxpZ258bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaW5lLXN0YWNraW5n
LXJ1Ynl8bGluZS1zdGFja2luZy1zaGlmdHxsaW5lLXN0YWNraW5nLXN0cmF0ZWd5fGxpbmUtc3Rh
Y2tpbmd8bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlw
ZXxsaXN0LXN0eWxlfG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdp
bi10b3B8bWFyZ2lufG1hcmstYWZ0ZXJ8bWFyay1iZWZvcmV8bWFya3xtYXJrc3xtYXJxdWVlLWRp
cmVjdGlvbnxtYXJxdWVlLXBsYXktY291bnR8bWFycXVlZS1zcGVlZHxtYXJxdWVlLXN0eWxlfG1h
eC1oZWlnaHR8bWF4LXdpZHRofG1pbi1oZWlnaHR8bWluLXdpZHRofG1vdmUtdG98bmF2LWRvd258
bmF2LWluZGV4fG5hdi1sZWZ0fG5hdi1yaWdodHxuYXYtdXB8b3BhY2l0eXxvcnBoYW5zfG91dGxp
bmUtY29sb3J8b3V0bGluZS1vZmZzZXR8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG91dGxp
bmV8b3ZlcmZsb3ctc3R5bGV8b3ZlcmZsb3cteHxvdmVyZmxvdy15fG92ZXJmbG93fHBhZGRpbmct
Ym90dG9tfHBhZGRpbmctbGVmdHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZGRpbmd8cGFn
ZS1icmVhay1hZnRlcnxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLXBv
bGljeXxwYWdlfHBhdXNlLWFmdGVyfHBhdXNlLWJlZm9yZXxwYXVzZXxwZXJzcGVjdGl2ZS1vcmln
aW58cGVyc3BlY3RpdmV8cGhvbmVtZXN8cGl0Y2gtcmFuZ2V8cGl0Y2h8cGxheS1kdXJpbmd8cG9z
aXRpb258cHJlc2VudGF0aW9uLWxldmVsfHB1bmN0dWF0aW9uLXRyaW18cXVvdGVzfHJlbmRlcmlu
Zy1pbnRlbnR8cmVzaXplfHJlc3QtYWZ0ZXJ8cmVzdC1iZWZvcmV8cmVzdHxyaWNobmVzc3xyaWdo
dHxyb3RhdGlvbi1wb2ludHxyb3RhdGlvbnxydWJ5LWFsaWdufHJ1Ynktb3Zlcmhhbmd8cnVieS1w
b3NpdGlvbnxydWJ5LXNwYW58c2l6ZXxzcGVhay1oZWFkZXJ8c3BlYWstbnVtZXJhbHxzcGVhay1w
dW5jdHVhdGlvbnxzcGVha3xzcGVlY2gtcmF0ZXxzdHJlc3N8c3RyaW5nLXNldHx0YWJsZS1sYXlv
dXR8dGFyZ2V0LW5hbWV8dGFyZ2V0LW5ld3x0YXJnZXQtcG9zaXRpb258dGFyZ2V0fHRleHQtYWxp
Z24tbGFzdHx0ZXh0LWFsaWdufHRleHQtZGVjb3JhdGlvbnx0ZXh0LWVtcGhhc2lzfHRleHQtaGVp
Z2h0fHRleHQtaW5kZW50fHRleHQtanVzdGlmeXx0ZXh0LW91dGxpbmV8dGV4dC1zaGFkb3d8dGV4
dC10cmFuc2Zvcm18dGV4dC13cmFwfHRvcHx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybS1zdHls
ZXx0cmFuc2Zvcm18dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRp
b24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dHJhbnNpdGlvbnx1bmljb2Rl
LWJpZGl8dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx2b2ljZS1iYWxhbmNlfHZvaWNlLWR1cmF0
aW9ufHZvaWNlLWZhbWlseXx2b2ljZS1waXRjaC1yYW5nZXx2b2ljZS1waXRjaHx2b2ljZS1yYXRl
fHZvaWNlLXN0cmVzc3x2b2ljZS12b2x1bWV8dm9sdW1lfHdoaXRlLXNwYWNlLWNvbGxhcHNlfHdo
aXRlLXNwYWNlfHdpZG93c3x3aWR0aHx3b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8
ei1pbmRleCI7Ci12YXIgc3VwcG9ydEZ1bmN0aW9uID0gZXhwb3J0cy5zdXBwb3J0RnVuY3Rpb24g
PSAicmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyI7Ci12YXIgc3VwcG9ydENvbnN0
YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRl
cnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxh
dXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3Jl
LWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8
Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdv
cmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2ly
Y2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNl
fGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hh
aXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1
bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRp
c3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91Ymxl
fGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8
ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292
ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5h
fGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dy
YXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNs
dWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1s
aW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3Jh
cGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWth
bmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5l
fGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93
ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4
LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJl
c2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9w
fG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxu
dy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRp
bmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJv
Z3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNp
emV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJl
c2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8
c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8
c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNl
bGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFi
bGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4
dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQt
dG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBw
ZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dy
YXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWlu
ZGV4fHplcm8iOwotdmFyIHN1cHBvcnRDb25zdGFudENvbG9yID0gZXhwb3J0cy5zdXBwb3J0Q29u
c3RhbnRDb2xvciA9ICJhcXVhfGJsYWNrfGJsdWV8ZnVjaHNpYXxncmF5fGdyZWVufGxpbWV8bWFy
b29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93
IjsKLXZhciBzdXBwb3J0Q29uc3RhbnRGb250cyA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Rm9u
dHMgPSAiYXJpYWx8Y2VudHVyeXxjb21pY3xjb3VyaWVyfGdhcmFtb25kfGdlb3JnaWF8aGVsdmV0
aWNhfGltcGFjdHxsdWNpZGF8c3ltYm9sfHN5c3RlbXx0YWhvbWF8dGltZXN8dHJlYnVjaGV0fHV0
b3BpYXx2ZXJkYW5hfHdlYmRpbmdzfHNhbnMtc2VyaWZ8c2VyaWZ8bW9ub3NwYWNlIjsKLQotdmFy
IG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5b
MC05XSspKSI7Ci12YXIgcHNldWRvRWxlbWVudHMgPSBleHBvcnRzLnBzZXVkb0VsZW1lbnRzID0g
IihcXDorKVxcYihhZnRlcnxiZWZvcmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8bW96LXNlbGVj
dGlvbnxzZWxlY3Rpb24pXFxiIjsKLXZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRv
Q2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8
Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFs
aWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNo
aWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8
cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwotCi12YXIgQ3NzSGlnaGxp
Z2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKLQotICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5j
cmVhdGVLZXl3b3JkTWFwcGVyKHsKLSAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBzdXBwb3J0
RnVuY3Rpb24sCi0gICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAot
ICAgICAgICAic3VwcG9ydC50eXBlIjogc3VwcG9ydFR5cGUsCi0gICAgICAgICJzdXBwb3J0LmNv
bnN0YW50LmNvbG9yIjogc3VwcG9ydENvbnN0YW50Q29sb3IsCi0gICAgICAgICJzdXBwb3J0LmNv
bnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKLSAgICB9LCAidGV4dCIsIHRydWUp
OwotCi0gICAgdmFyIGJhc2VfcnVsZXNldCA9IFsKLSAgICAgICAgewotICAgICAgICAgICAgdG9r
ZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAotICAgICAgICAgICAgcmVnZXgg
OiAiXFwvXFwqIiwKLSAgICAgICAgICAgIG5leHQgOiAicnVsZXNldF9jb21tZW50IgotICAgICAg
ICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQotICAg
ICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKLSAg
ICAgICAgfSwgewotICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUK
LSAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10i
Ci0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDogWyJjb25zdGFudC5udW1lcmljIiwg
ImtleXdvcmQiXSwKLSAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxk
ZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1
cm58dmh8dm18dnd8JSkiCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDogImNvbnN0
YW50Lm51bWVyaWMiLAotICAgICAgICAgICAgcmVnZXggOiBudW1SZQotICAgICAgICB9LCB7Ci0g
ICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgIC8vIGhleDYgY29sb3IKLSAg
ICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXs2fSIKLSAgICAgICAgfSwgewotICAgICAgICAg
ICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleDMgY29sb3IKLSAgICAgICAgICAg
IHJlZ2V4IDogIiNbYS1mMC05XXszfSIKLSAgICAgICAgfSwgewotICAgICAgICAgICAgdG9rZW4g
OiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tZWxl
bWVudC5jc3MiXSwKLSAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvRWxlbWVudHMKLSAgICAgICAg
fSwgewotICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5h
dHRyaWJ1dGUtbmFtZS5wc2V1ZG8tY2xhc3MuY3NzIl0sCi0gICAgICAgICAgICByZWdleCA6IHBz
ZXVkb0NsYXNzZXMKLSAgICAgICAgfSwgewotICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFw
cGVyLAotICAgICAgICAgICAgcmVnZXggOiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoi
Ci0gICAgICAgIH0KLSAgICAgIF07Ci0KLSAgICB2YXIgcnVsZXNldCA9IGxhbmcuY29weUFycmF5
KGJhc2VfcnVsZXNldCk7Ci0gICAgcnVsZXNldC51bnNoaWZ0KHsKLSAgICAgICAgdG9rZW4gOiAi
cGFyZW4ucnBhcmVuIiwKLSAgICAgICAgcmVnZXggOiAiXFx9IiwKLSAgICAgICAgbmV4dDogICAi
c3RhcnQiCi0gICAgfSk7Ci0KLSAgICB2YXIgbWVkaWFfcnVsZXNldCA9IGxhbmcuY29weUFycmF5
KCBiYXNlX3J1bGVzZXQgKTsKLSAgICBtZWRpYV9ydWxlc2V0LnVuc2hpZnQoewotICAgICAgICB0
b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAotICAgICAgICByZWdleCA6ICJcXH0iLAotICAgICAgICBu
ZXh0OiAgICJtZWRpYSIKLSAgICB9KTsKLQotICAgIHZhciBiYXNlX2NvbW1lbnQgPSBbewotICAg
ICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUK
LSAgICAgICAgICByZWdleCA6ICIuKyIKLSAgICB9XTsKLQotICAgIHZhciBjb21tZW50ID0gbGFu
Zy5jb3B5QXJyYXkoYmFzZV9jb21tZW50KTsKLSAgICBjb21tZW50LnVuc2hpZnQoewotICAgICAg
ICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKLSAgICAgICAgICByZWdl
eCA6ICIuKj9cXCpcXC8iLAotICAgICAgICAgIG5leHQgOiAic3RhcnQiCi0gICAgfSk7Ci0KLSAg
ICB2YXIgbWVkaWFfY29tbWVudCA9IGxhbmcuY29weUFycmF5KGJhc2VfY29tbWVudCk7Ci0gICAg
bWVkaWFfY29tbWVudC51bnNoaWZ0KHsKLSAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8g
Y2xvc2luZyBjb21tZW50Ci0gICAgICAgICAgcmVnZXggOiAiLio/XFwqXFwvIiwKLSAgICAgICAg
ICBuZXh0IDogIm1lZGlhIgotICAgIH0pOwotCi0gICAgdmFyIHJ1bGVzZXRfY29tbWVudCA9IGxh
bmcuY29weUFycmF5KGJhc2VfY29tbWVudCk7Ci0gICAgcnVsZXNldF9jb21tZW50LnVuc2hpZnQo
ewotICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKLSAgICAg
ICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAotICAgICAgICAgIG5leHQgOiAicnVsZXNldCIKLSAg
ICB9KTsKLQotICAgIHRoaXMuJHJ1bGVzID0gewotICAgICAgICAic3RhcnQiIDogW3sKLSAgICAg
ICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKLSAgICAgICAg
ICAgIHJlZ2V4IDogIlxcL1xcKiIsCi0gICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCi0gICAg
ICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKLSAgICAgICAgICAg
IHJlZ2V4OiAiXFx7IiwKLSAgICAgICAgICAgIG5leHQ6ICAicnVsZXNldCIKLSAgICAgICAgfSwg
ewotICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAotICAgICAgICAgICAgcmVnZXg6ICJALio/
eyIsCi0gICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgotICAgICAgICB9LHsKLSAgICAgICAgICAg
IHRva2VuOiAia2V5d29yZCIsCi0gICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKLSAg
ICAgICAgfSx7Ci0gICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKLSAgICAgICAgICAgIHJl
Z2V4OiAiXFwuW2EtejAtOS1fXSsiCi0gICAgICAgIH0sewotICAgICAgICAgICAgdG9rZW46ICJz
dHJpbmciLAotICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCi0gICAgICAgIH0sewot
ICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCi0gICAgICAgICAgICByZWdleDogIlthLXow
LTktX10rIgotICAgICAgICB9XSwKLQotICAgICAgICAibWVkaWEiIDogWyB7Ci0gICAgICAgICAg
ICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50Ci0gICAgICAgICAgICBy
ZWdleCA6ICJcXC9cXCoiLAotICAgICAgICAgICAgbmV4dCA6ICJtZWRpYV9jb21tZW50IgotICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCi0gICAgICAgICAg
ICByZWdleDogIlxceyIsCi0gICAgICAgICAgICBuZXh0OiAgIm1lZGlhX3J1bGVzZXQiCi0gICAg
ICAgIH0sewotICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAotICAgICAgICAgICAgcmVnZXg6
ICJcXH0iLAotICAgICAgICAgICAgbmV4dDogICJzdGFydCIKLSAgICAgICAgfSx7Ci0gICAgICAg
ICAgICB0b2tlbjogImtleXdvcmQiLAotICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsi
Ci0gICAgICAgIH0sewotICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCi0gICAgICAgICAg
ICByZWdleDogIlxcLlthLXowLTktX10rIgotICAgICAgICB9LHsKLSAgICAgICAgICAgIHRva2Vu
OiAic3RyaW5nIiwKLSAgICAgICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgotICAgICAgICB9
LHsKLSAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAotICAgICAgICAgICAgcmVnZXg6ICJb
YS16MC05LV9dKyIKLSAgICAgICAgfV0sCi0KLSAgICAgICAgImNvbW1lbnQiIDogY29tbWVudCwK
LQotICAgICAgICAicnVsZXNldCIgOiBydWxlc2V0LAotICAgICAgICAicnVsZXNldF9jb21tZW50
IiA6IHJ1bGVzZXRfY29tbWVudCwKLQotICAgICAgICAibWVkaWFfcnVsZXNldCIgOiBtZWRpYV9y
dWxlc2V0LAotICAgICAgICAibWVkaWFfY29tbWVudCIgOiBtZWRpYV9jb21tZW50Ci0gICAgfTsK
LX07Ci0KLW9vcC5pbmhlcml0cyhDc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVz
KTsKLQotZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwotCi19
KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2NzcycsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywg
J2FjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUnLCAnYWNlL3Rva2VuX2l0ZXJhdG9yJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIu
Li8uLi9saWIvb29wIik7Ci12YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIiku
QmVoYXZpb3VyOwotdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0
eWxlQmVoYXZpb3VyOwotdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9p
dGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Ci0KLXZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAo
KSB7Ci0KLSAgICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKLQotICAgIHRoaXMuYWRk
KCJjb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBz
ZXNzaW9uLCB0ZXh0KSB7Ci0gICAgICAgIGlmICh0ZXh0ID09PSAnOicpIHsKLSAgICAgICAgICAg
IHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHZh
ciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNv
ci5jb2x1bW4pOwotICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8p
KSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3Vw
cG9ydC50eXBlJykgewotICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0
TGluZShjdXJzb3Iucm93KTsKLSAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5z
dWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwotICAgICAgICAgICAg
ICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4p
Lm1hdGNoKC9eXHMqOy8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogWzEsIDFdCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHRoaXMuYWRkKCJjb2xvbiIs
ICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJh
bmdlKSB7Ci0gICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShy
YW5nZSk7Ci0gICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0g
JzonKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uu
c3RhcnQucm93KTsKLSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhy
YW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7Ci0gICAgICAgICAgICBpZiAo
cmlnaHRDaGFyID09PSAnOycpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsr
OwotICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0pOwotCi0gICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5j
dGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7Ci0gICAgICAgIGlm
ICh0ZXh0ID09PSAnOycpIHsKLSAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vy
c29yUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGlu
ZShjdXJzb3Iucm93KTsKLSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmlu
ZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7Ci0gICAgICAgICAgICBpZiAocmln
aHRDaGFyID09PSAnOycpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
ICAgICAgIHRleHQ6ICcnLAotICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLX0K
LW9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7Ci0KLWV4cG9ydHMu
Q3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2Rl
L2h0bWxfaGlnaGxpZ2h0X3J1bGVzJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9y
dWxlcycsICdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS94
bWxfdXRpbCcsICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyddLCBmdW5jdGlvbihyZXF1
aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29v
cCIpOwotdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwotdmFyIENzc0hpZ2hsaWdo
dFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVs
ZXM7Ci12YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0
X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKLXZhciB4bWxVdGls
ID0gcmVxdWlyZSgiLi94bWxfdXRpbCIpOwotdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVp
cmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Ci0KLXZhciB0
YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7Ci0gICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKLSAg
ICBidXR0b24gICAgICA6ICdmb3JtJywKLSAgICBmb3JtICAgICAgICA6ICdmb3JtJywKLSAgICBp
bWcgICAgICAgICA6ICdpbWFnZScsCi0gICAgaW5wdXQgICAgICAgOiAnZm9ybScsCi0gICAgbGFi
ZWwgICAgICAgOiAnZm9ybScsCi0gICAgc2NyaXB0ICAgICAgOiAnc2NyaXB0JywKLSAgICBzZWxl
Y3QgICAgICA6ICdmb3JtJywKLSAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKLSAgICBzdHlsZSAg
ICAgICA6ICdzdHlsZScsCi0gICAgdGFibGUgICAgICAgOiAndGFibGUnLAotICAgIHRib2R5ICAg
ICAgIDogJ3RhYmxlJywKLSAgICB0ZCAgICAgICAgICA6ICd0YWJsZScsCi0gICAgdGZvb3QgICAg
ICAgOiAndGFibGUnLAotICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKLSAgICB0ciAgICAgICAg
ICA6ICd0YWJsZScKLX0pOwotCi12YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy4kcnVsZXMgPSB7Ci0gICAgICAgIHN0YXJ0IDogW3sKLSAgICAgICAgICAgIHRv
a2VuIDogInRleHQiLAotICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwKLSAg
ICAgICAgICAgIG5leHQgOiAiY2RhdGEiCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2Vu
IDogInhtbC1wZSIsCi0gICAgICAgICAgICByZWdleCA6ICI8XFw/Lio/XFw/PiIKLSAgICAgICAg
fSwgewotICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCi0gICAgICAgICAgICByZWdleCA6
ICI8XFwhLS0iLAotICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgotICAgICAgICB9LCB7Ci0g
ICAgICAgICAgICB0b2tlbiA6ICJ4bWwtcGUiLAotICAgICAgICAgICAgcmVnZXggOiAiPFxcIS4q
Pz4iCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwKLSAgICAg
ICAgICAgIHJlZ2V4IDogIjwoPz1zY3JpcHRcXGIpIiwKLSAgICAgICAgICAgIG5leHQgOiAic2Ny
aXB0IgotICAgICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZyIsCi0gICAg
ICAgICAgICByZWdleCA6ICI8KD89c3R5bGVcXGIpIiwKLSAgICAgICAgICAgIG5leHQgOiAic3R5
bGUiCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDogIm1ldGEudGFnIiwgLy8gb3Bl
bmluZyB0YWcKLSAgICAgICAgICAgIHJlZ2V4IDogIjxcXC8/IiwKLSAgICAgICAgICAgIG5leHQg
OiAidGFnIgotICAgICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKLSAgICAg
ICAgICAgIHJlZ2V4IDogIlxccysiCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIHRva2VuIDog
ImNvbnN0YW50LmNoYXJhY3Rlci5lbnRpdHkiLAotICAgICAgICAgICAgcmVnZXggOiAiKD86JiNb
MC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCi0g
ICAgICAgIH1dLAotICAgIAotICAgICAgICBjZGF0YSA6IFsgewotICAgICAgICAgICAgdG9rZW4g
OiAidGV4dCIsCi0gICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IiwKLSAgICAgICAgICAgIG5l
eHQgOiAic3RhcnQiCi0gICAgICAgIH0gXSwKLQotICAgICAgICBjb21tZW50IDogWyB7Ci0gICAg
ICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKLSAgICAgICAgICAgIHJlZ2V4IDogIi4qPy0tPiIs
Ci0gICAgICAgICAgICBuZXh0IDogInN0YXJ0IgotICAgICAgICB9LCB7Ci0gICAgICAgICAgICBk
ZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKLSAgICAgICAgfSBdCi0gICAgfTsKLSAgICAKLSAgICB4
bWxVdGlsLnRhZyh0aGlzLiRydWxlcywgInRhZyIsICJzdGFydCIsIHRhZ01hcCk7Ci0gICAgeG1s
VXRpbC50YWcodGhpcy4kcnVsZXMsICJzdHlsZSIsICJjc3Mtc3RhcnQiLCB0YWdNYXApOwotICAg
IHhtbFV0aWwudGFnKHRoaXMuJHJ1bGVzLCAic2NyaXB0IiwgImpzLXN0YXJ0IiwgdGFnTWFwKTsK
LSAgICAKLSAgICB0aGlzLmVtYmVkUnVsZXMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCAianMt
IiwgW3sKLSAgICAgICAgdG9rZW46ICJjb21tZW50IiwKLSAgICAgICAgcmVnZXg6ICJcXC9cXC8u
Kig/PTxcXC9zY3JpcHQ+KSIsCi0gICAgICAgIG5leHQ6ICJ0YWciCi0gICAgfSwgewotICAgICAg
ICB0b2tlbjogIm1ldGEudGFnIiwKLSAgICAgICAgcmVnZXg6ICI8XFwvKD89c2NyaXB0KSIsCi0g
ICAgICAgIG5leHQ6ICJ0YWciCi0gICAgfV0pOwotICAgIAotICAgIHRoaXMuZW1iZWRSdWxlcyhD
c3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCBbewotICAgICAgICB0b2tlbjogIm1ldGEudGFnIiwK
LSAgICAgICAgcmVnZXg6ICI8XFwvKD89c3R5bGUpIiwKLSAgICAgICAgbmV4dDogInRhZyIKLSAg
ICB9XSk7Ci19OwotCi1vb3AuaW5oZXJpdHMoSHRtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxp
Z2h0UnVsZXMpOwotCi1leHBvcnRzLkh0bWxIaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRS
dWxlczsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS94bWxfdXRpbCcsIFsncmVxdWlyZScs
ICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxl
KSB7Ci0KLQotZnVuY3Rpb24gc3RyaW5nKHN0YXRlKSB7Ci0gICAgcmV0dXJuIFt7Ci0gICAgICAg
IHRva2VuIDogInN0cmluZyIsCi0gICAgICAgIHJlZ2V4IDogJyInLAotICAgICAgICBuZXh0IDog
c3RhdGUgKyAiX3Fxc3RyaW5nIgotICAgIH0sIHsKLSAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwK
LSAgICAgICAgcmVnZXggOiAiJyIsCi0gICAgICAgIG5leHQgOiBzdGF0ZSArICJfcXN0cmluZyIK
LSAgICB9XTsKLX0KLQotZnVuY3Rpb24gbXVsdGlMaW5lU3RyaW5nKHF1b3RlLCBzdGF0ZSkgewot
ICAgIHJldHVybiBbCi0gICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6IHF1b3RlLCBu
ZXh0IDogc3RhdGV9LAotICAgICAgICB7Ci0gICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5s
YW5ndWFnZS5lc2NhcGUiLAotICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzom
I3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiIAotICAgICAgICB9LAot
ICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZyJ9Ci0gICAgXTsKLX0KLQotZXhwb3J0cy50
YWcgPSBmdW5jdGlvbihzdGF0ZXMsIG5hbWUsIG5leHRTdGF0ZSwgdGFnTWFwKSB7Ci0gICAgc3Rh
dGVzW25hbWVdID0gW3sKLSAgICAgICAgdG9rZW4gOiAidGV4dCIsCi0gICAgICAgIHJlZ2V4IDog
IlxccysiCi0gICAgfSwgewotICAgICAgICAKLSAgICB0b2tlbiA6ICF0YWdNYXAgPyAibWV0YS50
YWcudGFnLW5hbWUiIDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh0YWdNYXBb
dmFsdWVdKQotICAgICAgICAgICAgICAgIHJldHVybiAibWV0YS50YWcudGFnLW5hbWUuIiArIHRh
Z01hcFt2YWx1ZV07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuICJt
ZXRhLnRhZy50YWctbmFtZSI7Ci0gICAgICAgIH0sCi0gICAgICAgIHJlZ2V4IDogIlstX2EtekEt
WjAtOTpdKyIsCi0gICAgICAgIG5leHQgOiBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIg
Ci0gICAgfSwgewotICAgICAgICB0b2tlbjogImVtcHR5IiwKLSAgICAgICAgcmVnZXg6ICIiLAot
ICAgICAgICBuZXh0IDogbmFtZSArICJfZW1iZWRfYXR0cmlidXRlX2xpc3QiCi0gICAgfV07Ci0K
LSAgICBzdGF0ZXNbbmFtZSArICJfcXN0cmluZyJdID0gbXVsdGlMaW5lU3RyaW5nKCInIiwgbmFt
ZSArICJfZW1iZWRfYXR0cmlidXRlX2xpc3QiKTsKLSAgICBzdGF0ZXNbbmFtZSArICJfcXFzdHJp
bmciXSA9IG11bHRpTGluZVN0cmluZygiXCIiLCBuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlz
dCIpOwotICAgIAotICAgIHN0YXRlc1tuYW1lICsgIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCJdID0g
W3sKLSAgICAgICAgdG9rZW4gOiAibWV0YS50YWcuciIsCi0gICAgICAgIHJlZ2V4IDogIi8/PiIs
Ci0gICAgICAgIG5leHQgOiBuZXh0U3RhdGUKLSAgICB9LCB7Ci0gICAgICAgIHRva2VuIDogImtl
eXdvcmQub3BlcmF0b3IiLAotICAgICAgICByZWdleCA6ICI9IgotICAgIH0sIHsKLSAgICAgICAg
dG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIiwKLSAgICAgICAgcmVnZXggOiAi
Wy1fYS16QS1aMC05Ol0rIgotICAgIH0sIHsKLSAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVt
ZXJpYyIsIC8vIGZsb2F0Ci0gICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCop
Pyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgotICAgIH0sIHsKLSAgICAgICAgdG9rZW4gOiAidGV4
dCIsCi0gICAgICAgIHJlZ2V4IDogIlxccysiCi0gICAgfV0uY29uY2F0KHN0cmluZyhuYW1lKSk7
Ci19OwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvYmVoYXZpb3VyL2h0bWwnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2Jl
aGF2aW91ci94bWwnLCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvdG9rZW5faXRl
cmF0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9v
cCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKLXZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJl
KCIuLi9iZWhhdmlvdXIveG1sIikuWG1sQmVoYXZpb3VyOwotdmFyIENzdHlsZUJlaGF2aW91ciA9
IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwotdmFyIFRva2VuSXRlcmF0b3Ig
PSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Ci12YXIgdm9p
ZEVsZW1lbnRzID0gWydhcmVhJywgJ2Jhc2UnLCAnYnInLCAnY29sJywgJ2NvbW1hbmQnLCAnZW1i
ZWQnLCAnaHInLCAnaW1nJywgJ2lucHV0JywgJ2tleWdlbicsICdsaW5rJywgJ21ldGEnLCAncGFy
YW0nLCAnc291cmNlJywgJ3RyYWNrJywgJ3diciddOwotCi1mdW5jdGlvbiBoYXNUeXBlKHRva2Vu
LCB0eXBlKSB7Ci0gICAgdmFyIGhhc1R5cGUgPSB0cnVlOwotICAgIHZhciB0eXBlTGlzdCA9IHRv
a2VuLnR5cGUuc3BsaXQoJy4nKTsKLSAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4n
KTsKLSAgICBuZWVkbGVMaXN0LmZvckVhY2goZnVuY3Rpb24obmVlZGxlKXsKLSAgICAgICAgaWYg
KHR5cGVMaXN0LmluZGV4T2YobmVlZGxlKSA9PSAtMSkgewotICAgICAgICAgICAgaGFzVHlwZSA9
IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIGhhc1R5cGU7Ci19Ci0KLXZhciBIdG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkg
ewotCi0gICAgdGhpcy5pbmhlcml0KFhtbEJlaGF2aW91cik7IC8vIEdldCB4bWwgYmVoYXZpb3Vy
Ci0gICAgCi0gICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9u
IChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKLSAgICAgICAgaWYgKHRl
eHQgPT0gJz4nKSB7Ci0gICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0Q3Vyc29y
UG9zaXRpb24oKTsKLSAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9y
KHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKLSAgICAgICAgICAgIHZh
ciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwotICAgICAgICAgICAgdmFyIGF0
Q3Vyc29yID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2Vu
LCAnbWV0YS50YWcnKSAmJiAhKGhhc1R5cGUodG9rZW4sICd0ZXh0JykgJiYgdG9rZW4udmFsdWUu
bWF0Y2goJy8nKSkpewotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAg
dG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxl
ICh0b2tlbiAmJiAoaGFzVHlwZSh0b2tlbiwgJ3N0cmluZycpIHx8IGhhc1R5cGUodG9rZW4sICdr
ZXl3b3JkLm9wZXJhdG9yJykgfHwgaGFzVHlwZSh0b2tlbiwgJ2VudGl0eS5hdHRyaWJ1dGUtbmFt
ZScpIHx8IGhhc1R5cGUodG9rZW4sICd0ZXh0JykpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgYXRDdXJzb3IgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCF0b2tlbiB8fCAhaGFzVHlwZSh0b2tlbiwgJ21ldGEudGFnLW5hbWUnKSB8fCBpdGVy
YXRvci5zdGVwQmFja3dhcmQoKS52YWx1ZS5tYXRjaCgnLycpKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZh
bHVlOwotICAgICAgICAgICAgaWYgKGF0Q3Vyc29yKXsKLSAgICAgICAgICAgICAgICB2YXIgZWxl
bWVudCA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuLnN0YXJ0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2b2lkRWxlbWVudHMuaW5kZXhPZihl
bGVtZW50KSAhPT0gLTEpewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICB0ZXh0OiAnPicgKyAnPC8nICsg
ZWxlbWVudCArICc+JywKLSAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCi0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLW9vcC5pbmhlcml0cyhIdG1sQmVoYXZpb3Vy
LCBYbWxCZWhhdmlvdXIpOwotCi1leHBvcnRzLkh0bWxCZWhhdmlvdXIgPSBIdG1sQmVoYXZpb3Vy
OwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL2JlaGF2aW91ci94bWwnLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91
cicsICdhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlJywgJ2FjZS90b2tlbl9pdGVyYXRvciddLCBm
dW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVxdWly
ZSgiLi4vLi4vbGliL29vcCIpOwotdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91
ciIpLkJlaGF2aW91cjsKLXZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2NzdHlsZSIp
LkNzdHlsZUJlaGF2aW91cjsKLXZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9r
ZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwotCi1mdW5jdGlvbiBoYXNUeXBlKHRva2VuLCB0
eXBlKSB7Ci0gICAgdmFyIGhhc1R5cGUgPSB0cnVlOwotICAgIHZhciB0eXBlTGlzdCA9IHRva2Vu
LnR5cGUuc3BsaXQoJy4nKTsKLSAgICB2YXIgbmVlZGxlTGlzdCA9IHR5cGUuc3BsaXQoJy4nKTsK
LSAgICBuZWVkbGVMaXN0LmZvckVhY2goZnVuY3Rpb24obmVlZGxlKXsKLSAgICAgICAgaWYgKHR5
cGVMaXN0LmluZGV4T2YobmVlZGxlKSA9PSAtMSkgewotICAgICAgICAgICAgaGFzVHlwZSA9IGZh
bHNlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIGhhc1R5cGU7Ci19Ci0KLXZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgCi0gICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91ciwgWyJzdHJpbmdfZHF1b3RlcyJd
KTsgLy8gR2V0IHN0cmluZyBiZWhhdmlvdXIKLSAgICAKLSAgICB0aGlzLmFkZCgiYXV0b2Nsb3Np
bmciLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lv
biwgdGV4dCkgewotICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKLSAgICAgICAgICAgIHZhciBw
b3NpdGlvbiA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwotICAgICAgICAgICAgdmFyIGl0
ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlv
bi5jb2x1bW4pOwotICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRv
a2VuKCk7Ci0gICAgICAgICAgICB2YXIgYXRDdXJzb3IgPSBmYWxzZTsKLSAgICAgICAgICAgIGlm
ICghdG9rZW4gfHwgIWhhc1R5cGUodG9rZW4sICdtZXRhLnRhZycpICYmICEoaGFzVHlwZSh0b2tl
biwgJ3RleHQnKSAmJiB0b2tlbi52YWx1ZS5tYXRjaCgnLycpKSl7Ci0gICAgICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgp
OwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmIChoYXNUeXBlKHRva2VuLCAnc3Ry
aW5nJykgfHwgaGFzVHlwZSh0b2tlbiwgJ2tleXdvcmQub3BlcmF0b3InKSB8fCBoYXNUeXBlKHRv
a2VuLCAnZW50aXR5LmF0dHJpYnV0ZS1uYW1lJykgfHwgaGFzVHlwZSh0b2tlbiwgJ3RleHQnKSkp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdEN1cnNvciA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXRva2VuIHx8ICFoYXNUeXBlKHRva2Vu
LCAnbWV0YS50YWctbmFtZScpIHx8IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLnZhbHVlLm1hdGNo
KCcvJykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKLSAgICAgICAgICAgIGlmIChhdEN1cnNvcil7Ci0g
ICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRhZy5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1u
IC0gdG9rZW4uc3RhcnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgdGV4dDogJz4nICsgJzwvJyArIHRhZyArICc+JywKLSAgICAgICAgICAg
ICAgIHNlbGVjdGlvbjogWzEsIDFdCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsK
LQotICAgIHRoaXMuYWRkKCdhdXRvaW5kZW50JywgJ2luc2VydGlvbicsIGZ1bmN0aW9uIChzdGF0
ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKLSAgICAgICAgaWYgKHRleHQgPT0g
IlxuIikgewotICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlv
bigpOwotICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5y
b3cpOwotICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhcnMgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3Iu
Y29sdW1uLCBjdXJzb3IuY29sdW1uICsgMik7Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFycyA9
PSAnPC8nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChz
ZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpKSArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7
Ci0gICAgICAgICAgICAgICAgdmFyIG5leHRfaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHNlc3Np
b24uZG9jLmdldExpbmUoY3Vyc29yLnJvdykpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2lu
ZGVudCwKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwg
MSwgaW5kZW50Lmxlbmd0aF0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9KTsKLSAgICAKLX0KLW9vcC5pbmhlcml0cyhYbWxCZWhhdmlvdXIsIEJlaGF2
aW91cik7Ci0KLWV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwotfSk7Ci0KLWFj
ZS5kZWZpbmUoJ2FjZS9tb2RlL2ZvbGRpbmcvaHRtbCcsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZm9sZGluZy9taXhlZCcsICdhY2Uv
bW9kZS9mb2xkaW5nL3htbCcsICdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSddLCBmdW5jdGlvbihy
ZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVxdWlyZSgiLi4vLi4v
bGliL29vcCIpOwotdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1v
ZGU7Ci12YXIgWG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL3htbCIpLkZvbGRNb2RlOwotdmFyIENT
dHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKLQotdmFyIEZvbGRN
b2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkgewotICAgIE1peGVkRm9sZE1vZGUu
Y2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUoewotICAgICAgICAiYXJlYSI6IDEsCi0gICAgICAg
ICJiYXNlIjogMSwKLSAgICAgICAgImJyIjogMSwKLSAgICAgICAgImNvbCI6IDEsCi0gICAgICAg
ICJjb21tYW5kIjogMSwKLSAgICAgICAgImVtYmVkIjogMSwKLSAgICAgICAgImhyIjogMSwKLSAg
ICAgICAgImltZyI6IDEsCi0gICAgICAgICJpbnB1dCI6IDEsCi0gICAgICAgICJrZXlnZW4iOiAx
LAotICAgICAgICAibGluayI6IDEsCi0gICAgICAgICJtZXRhIjogMSwKLSAgICAgICAgInBhcmFt
IjogMSwKLSAgICAgICAgInNvdXJjZSI6IDEsCi0gICAgICAgICJ0cmFjayI6IDEsCi0gICAgICAg
ICJ3YnIiOiAxLAotICAgICAgICAibGkiOiAxLAotICAgICAgICAiZHQiOiAxLAotICAgICAgICAi
ZGQiOiAxLAotICAgICAgICAicCI6IDEsCi0gICAgICAgICJydCI6IDEsCi0gICAgICAgICJycCI6
IDEsCi0gICAgICAgICJvcHRncm91cCI6IDEsCi0gICAgICAgICJvcHRpb24iOiAxLAotICAgICAg
ICAiY29sZ3JvdXAiOiAxLAotICAgICAgICAidGQiOiAxLAotICAgICAgICAidGgiOiAxCi0gICAg
fSksIHsKLSAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAotICAgICAgICAiY3Nz
LSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpCi0gICAgfSk7Ci19OwotCi1vb3AuaW5oZXJpdHMoRm9s
ZE1vZGUsIE1peGVkRm9sZE1vZGUpOwotCi19KTsKLQotYWNlLmRlZmluZSgnYWNlL21vZGUvZm9s
ZGluZy9taXhlZCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9v
b3AnLCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsK
LXZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwotCi12
YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oZGVmYXVsdE1vZGUsIHN1
Yk1vZGVzKSB7Ci0gICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwotICAgIHRoaXMu
c3ViTW9kZXMgPSBzdWJNb2RlczsKLX07Ci1vb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xk
TW9kZSk7Ci0KLShmdW5jdGlvbigpIHsKLQotCi0gICAgdGhpcy4kZ2V0TW9kZSA9IGZ1bmN0aW9u
KHN0YXRlKSB7Ci0gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RhdGUuaW5kZXhPZihrZXkpID09PSAwKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnN1Yk1vZGVzW2tleV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgfTsKLSAgICAKLSAgICB0aGlzLiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Np
b24sIGZvbGRTdHlsZSwgcm93KSB7Ci0gICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShz
dGF0ZSk7Ci0gICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9u
LCBmb2xkU3R5bGUsIHJvdykgOiAiIik7Ci0gICAgfTsKLQotICAgIHRoaXMuZ2V0Rm9sZFdpZGdl
dCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7Ci0gICAgICAgIHJldHVybiAo
Ci0gICAgICAgICAgICB0aGlzLiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpLCBzZXNz
aW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKLSAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lv
bi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKLSAgICAgICAgICAg
IHRoaXMuZGVmYXVsdE1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykK
LSAgICAgICAgKTsKLSAgICB9OwotCi0gICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5j
dGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewotICAgICAgICB2YXIgbW9kZSA9IHRoaXMu
JGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFtb2RlIHx8ICFtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQot
ICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Np
b24sIGZvbGRTdHlsZSwgcm93KSkKLSAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2Rl
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Np
b24sIGZvbGRTdHlsZSwgcm93KTsKLSAgICB9OwotCi19KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlw
ZSk7Ci0KLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS9mb2xkaW5nL3htbCcsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywg
J2FjZS9yYW5nZScsICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvdG9rZW5faXRl
cmF0b3InXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotdmFyIG9v
cCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKLXZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4v
bGliL2xhbmciKTsKLXZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Ci12
YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKLXZhciBU
b2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJh
dG9yOwotCi12YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVs
ZW1lbnRzKSB7Ci0gICAgQmFzZUZvbGRNb2RlLmNhbGwodGhpcyk7Ci0gICAgdGhpcy52b2lkRWxl
bWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307Ci19Owotb29wLmluaGVyaXRzKEZvbGRNb2RlLCBC
YXNlRm9sZE1vZGUpOwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICB0aGlzLmdldEZvbGRXaWRnZXQg
PSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewotICAgICAgICB2YXIgdGFnID0g
dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKLQotICAgICAgICBpZiAodGFn
LmNsb3NpbmcpCi0gICAgICAgICAgICByZXR1cm4gZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQi
ID8gImVuZCIgOiAiIjsKLQotICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRoaXMudm9pZEVs
ZW1lbnRzW3RhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCldKQotICAgICAgICAgICAgcmV0dXJuICIi
OwotCi0gICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpCi0gICAgICAgICAgICByZXR1cm4gIiI7
Ci0KLSAgICAgICAgaWYgKHRhZy52YWx1ZS5pbmRleE9mKCIvIiArIHRhZy50YWdOYW1lKSAhPT0g
LTEpCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICAgICAgcmV0dXJuICJzdGFydCI7Ci0g
ICAgfTsKLSAgICAKLSAgICB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Np
b24sIHJvdykgewotICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsK
LSAgICAgICAgdmFyIHZhbHVlID0gIiI7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9r
ZW5zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07Ci0g
ICAgICAgICAgICBpZiAodG9rZW4udHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpID09PSAwKQotICAg
ICAgICAgICAgICAgIHZhbHVlICs9IHRva2VuLnZhbHVlOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHZhbHVlICs9IGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgdG9rZW4udmFsdWUu
bGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNl
VGFnKHZhbHVlKTsKLSAgICB9OwotCi0gICAgdGhpcy50YWdSZSA9IC9eKFxzKikoPD8oXC8/KShb
LV9hLXpBLVowLTk6IV0qKVxzKihcLz8pPj8pLzsKLSAgICB0aGlzLl9wYXJzZVRhZyA9IGZ1bmN0
aW9uKHRhZykgewotICAgICAgICAKLSAgICAgICAgdmFyIG1hdGNoID0gdGhpcy50YWdSZS5leGVj
KHRhZyk7Ci0gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhZ1JlLmxhc3RJbmRleCB8fCAwOwot
ICAgICAgICB0aGlzLnRhZ1JlLmxhc3RJbmRleCA9IDA7Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgIHZhbHVlOiB0YWcsCi0gICAgICAgICAgICBtYXRjaDogbWF0Y2ggPyBtYXRjaFsy
XSA6ICIiLAotICAgICAgICAgICAgY2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzNdIDogZmFsc2Us
Ci0gICAgICAgICAgICBzZWxmQ2xvc2luZzogbWF0Y2ggPyAhIW1hdGNoWzVdIHx8IG1hdGNoWzJd
ID09ICIvPiIgOiBmYWxzZSwKLSAgICAgICAgICAgIHRhZ05hbWU6IG1hdGNoID8gbWF0Y2hbNF0g
OiAiIiwKLSAgICAgICAgICAgIGNvbHVtbjogbWF0Y2hbMV0gPyBjb2x1bW4gKyBtYXRjaFsxXS5s
ZW5ndGggOiBjb2x1bW4KLSAgICAgICAgfTsKLSAgICB9OwotICAgIHRoaXMuX3JlYWRUYWdGb3J3
YXJkID0gZnVuY3Rpb24oaXRlcmF0b3IpIHsKLSAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3Iu
Z2V0Q3VycmVudFRva2VuKCk7Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICB2YXIgdmFsdWUgPSAiIjsKLSAgICAgICAg
dmFyIHN0YXJ0OwotICAgICAgICAKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKHRva2Vu
LnR5cGUuaW5kZXhPZigibWV0YS50YWciKSA9PT0gMCkgewotICAgICAgICAgICAgICAgIGlmICgh
c3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gewotICAgICAgICAgICAg
ICAgICAgICAgICAgcm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkK
LSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdmFsdWUgKz0gdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4
T2YoIj4iKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3Bh
cnNlVGFnKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0ID0gc3RhcnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHRhZy5lbmQgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
b3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29sdW1uOiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVl
Lmxlbmd0aAotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBpdGVy
YXRvci5zdGVwRm9yd2FyZCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0
ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfTsKLSAgICAKLSAgICB0aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRv
cikgewotICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKLSAg
ICAgICAgaWYgKCF0b2tlbikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAg
Ci0gICAgICAgIHZhciB2YWx1ZSA9ICIiOwotICAgICAgICB2YXIgZW5kOwotCi0gICAgICAgIGRv
IHsKLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlLmluZGV4T2YoIm1ldGEudGFnIikgPT09IDAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWVuZCkgewotICAgICAgICAgICAgICAgICAgICBlbmQg
PSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3c6IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tl
blJvdygpLAotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpdGVyYXRvci5nZXRDdXJy
ZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aAotICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZh
bHVlICsgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIjwiKSAhPT0g
LTEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRoaXMuX3BhcnNlVGFnKHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgdGFnLmVuZCA9IGVuZDsKLSAgICAgICAgICAgICAgICAg
ICAgdGFnLnN0YXJ0ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpdGVyYXRvci5n
ZXRDdXJyZW50VG9rZW5Sb3coKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRl
cmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0YWc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9IHdoaWxlKHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfTsKLSAgICAKLSAgICB0aGlzLl9wb3AgPSBmdW5j
dGlvbihzdGFjaywgdGFnKSB7Ci0gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgdmFyIHRvcCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXTsKLSAg
ICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAodGhpcy52b2lkRWxlbWVudHNbdGFnLnRhZ05hbWVdKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52
b2lkRWxlbWVudHNbdG9wLnRhZ05hbWVdKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsK
LSAgICAKLSAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZv
bGRTdHlsZSwgcm93KSB7Ci0gICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFn
SW5MaW5lKHNlc3Npb24sIHJvdyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZpcnN0VGFnLm1h
dGNoKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIAotICAgICAgICB2YXIgaXNC
YWNrd2FyZCA9IGZpcnN0VGFnLmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7Ci0gICAg
ICAgIHZhciBzdGFjayA9IFtdOwotICAgICAgICB2YXIgdGFnOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFpc0JhY2t3YXJkKSB7Ci0gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5J
dGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmNvbHVtbik7Ci0gICAgICAgICAgICB2YXIg
c3RhcnQgPSB7Ci0gICAgICAgICAgICAgICAgcm93OiByb3csCi0gICAgICAgICAgICAgICAgY29s
dW1uOiBmaXJzdFRhZy5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICB3aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0ZvcndhcmQo
aXRlcmF0b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICh0YWcuY2xvc2luZykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRh
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3RhY2sucHVzaCh0YWcpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0g
bmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5jb2x1bW4gKyBmaXJzdFRh
Zy5tYXRjaC5sZW5ndGgpOwotICAgICAgICAgICAgdmFyIGVuZCA9IHsKLSAgICAgICAgICAgICAg
ICByb3c6IHJvdywKLSAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLmNvbHVtbgotICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMu
X3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKLSAgICAgICAgICAgICAgICBpZiAodGFnLnNl
bGZDbG9zaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxl
bmd0aCArIDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0
LCB0YWcuZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCF0YWcuY2xvc2luZykgewotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9wb3Aoc3RhY2ssIHRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5n
dGggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0
YWcudGFnTmFtZS5sZW5ndGggKyAyOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJh
bmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBzdGFjay5wdXNoKHRhZykKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgfTsKLQotfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUp
OwotCi19KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
YWNlL21vZGVfamF2YXNjcmlwdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvYWNlL21vZGVfamF2YXNjcmlwdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTk1ZTg0ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2FjZS9tb2RlX2phdmFzY3JpcHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4OTYgKzAsMCBAQAot
LyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJTRCBsaWNlbnNlOgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5W
LgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlIG1ldDoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhlCi0gKiAgICAgICBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cwotICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICoKLSAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0KLWFj
ZS5kZWZpbmUoJ2FjZS9tb2RlL2phdmFzY3JpcHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdt
b2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3Rva2VuaXplcics
ICdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9tYXRjaGlu
Z19icmFjZV9vdXRkZW50JywgJ2FjZS9yYW5nZScsICdhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQn
LCAnYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZScsICdhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSdd
LCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKLQotCi12YXIgb29wID0gcmVx
dWlyZSgiLi4vbGliL29vcCIpOwotdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9k
ZTsKLXZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7Ci12
YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hs
aWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKLXZhciBNYXRjaGluZ0JyYWNl
T3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJh
Y2VPdXRkZW50OwotdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKLXZhciBX
b3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNs
aWVudDsKLXZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUi
KS5Dc3R5bGVCZWhhdmlvdXI7Ci12YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRp
bmcvY3N0eWxlIikuRm9sZE1vZGU7Ci0KLXZhciBNb2RlID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhp
cy4kdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVz
KCkuZ2V0UnVsZXMoKSk7Ci0gICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0
ZGVudCgpOwotICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKLSAg
ICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwotfTsKLW9vcC5pbmhl
cml0cyhNb2RlLCBUZXh0TW9kZSk7Ci0KLShmdW5jdGlvbigpIHsKLQotCi0gICAgdGhpcy50b2dn
bGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCBzdGFydFJvdywgZW5kUm93KSB7
Ci0gICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsKLSAgICAgICAgdmFyIHJlID0gL14oXHMqKVwv
XC8vOwotCi0gICAgICAgIGZvciAodmFyIGk9c3RhcnRSb3c7IGk8PSBlbmRSb3c7IGkrKykgewot
ICAgICAgICAgICAgaWYgKCFyZS50ZXN0KGRvYy5nZXRMaW5lKGkpKSkgewotICAgICAgICAgICAg
ICAgIG91dGRlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvdXRkZW50KSB7Ci0gICAgICAgICAgICB2YXIg
ZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICBmb3IgKHZh
ciBpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShpKTsKLSAgICAgICAgICAgICAgICB2YXIgbSA9
IGxpbmUubWF0Y2gocmUpOwotICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9
IGk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9IGk7Ci0gICAgICAgICAg
ICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IG1bMF0ubGVuZ3RoOwotICAgICAgICAgICAg
ICAgIGRvYy5yZXBsYWNlKGRlbGV0ZVJhbmdlLCBtWzFdKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRvYy5pbmRlbnRSb3dzKHN0YXJ0Um93
LCBlbmRSb3csICIvLyIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRoaXMuZ2V0TmV4dExp
bmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7Ci0gICAgICAgIHZhciBpbmRl
bnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7Ci0KLSAgICAgICAgdmFyIHRva2VuaXplZExpbmUg
PSB0aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7Ci0gICAgICAgIHZh
ciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKLSAgICAgICAgdmFyIGVuZFN0YXRlID0g
dG9rZW5pemVkTGluZS5zdGF0ZTsKLQotICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tl
bnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewotICAgICAgICAgICAgcmV0
dXJuIGluZGVudDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0YXRlID09ICJz
dGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2FsbG93ZWQiKSB7Ci0gICAgICAgICAgICB2YXIgbWF0
Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qXDp8W1x7XChcW10pXHMqJC8pOwotICAg
ICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0Iikgewot
ICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gInJlZ2V4X2Fs
bG93ZWQiKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKLSAgICAgICAg
ICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewotICAgICAg
ICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpbmRlbnQgKz0gIiogIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBpbmRlbnQ7Ci0gICAgfTsKLQotICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVu
Y3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50
LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7Ci0gICAgfTsKLQotICAgIHRoaXMuYXV0b091dGRl
bnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKLSAgICAgICAgdGhpcy4kb3V0ZGVudC5h
dXRvT3V0ZGVudChkb2MsIHJvdyk7Ci0gICAgfTsKLSAgICAKLSAgICB0aGlzLmNyZWF0ZVdvcmtl
ciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKLSAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJD
bGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwgIkphdmFTY3JpcHRX
b3JrZXIiKTsKLSAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1
bWVudCgpKTsKLQotICAgICAgICB3b3JrZXIub24oImpzbGludCIsIGZ1bmN0aW9uKHJlc3VsdHMp
IHsKLSAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHdvcmtlcjsKLSAgICB9OwotCi19KS5jYWxs
KE1vZGUucHJvdG90eXBlKTsKLQotZXhwb3J0cy5Nb2RlID0gTW9kZTsKLX0pOwotCi1hY2UuZGVm
aW5lKCdhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcycsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9vb3AnLCAnYWNlL21vZGUvZG9jX2NvbW1lbnRf
aGlnaGxpZ2h0X3J1bGVzJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIu
Li9saWIvb29wIik7Ci12YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9k
b2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7Ci12
YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIp
LlRleHRIaWdobGlnaHRSdWxlczsKLQotdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1
bmN0aW9uKCkgewotICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFw
cGVyKHsKLSAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKLSAgICAgICAgICAgICJBcnJheXxC
b29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5n
fFByb3h5fCIgICsgLy8gQ29uc3RydWN0b3JzCi0gICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1l
fFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArIC8vIEU0WAotICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0
QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwotICAgICAgICAgICAg
IlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXl8IiAg
ICAgICAgICAgICAgICAgICAgKwotICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5h
bEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBF
cnJvcnMKLSAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgICAgICAgICJkZWNv
ZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVVUklDb21wb25lbnR8ZXZh
bHxpc0Zpbml0ZXwiICsgLy8gTm9uLWNvbnN0cnVjdG9yIGZ1bmN0aW9ucwotICAgICAgICAgICAg
ImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKwotICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBP
dGhlcgotICAgICAgICAgICAgInRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1l
bnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAvLyBQc2V1ZG8KLSAgICAgICAg
ImtleXdvcmQiOgotICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fCIgKwot
ICAgICAgICAgICAgImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98
ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnwiICsKLSAgICAgICAgICAgICJpZnxpbnxpbnN0YW5j
ZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRo
fGRlYnVnZ2VyfCIgKwotICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1
bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKLSAgICAgICAgICAgICJjbGFzc3xlbnVtfGV4dGVu
ZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2th
Z2V8cHJvdGVjdGVkfHN0YXRpYyIsCi0gICAgICAgICJzdG9yYWdlLnR5cGUiOgotICAgICAgICAg
ICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAotICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2Ui
OgotICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCi0gICAgICAgICJz
dXBwb3J0LmZ1bmN0aW9uIjoKLSAgICAgICAgICAgICJhbGVydCIsCi0gICAgICAgICJjb25zdGFu
dC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCi0gICAgfSwgImlkZW50aWZpZXIiKTsK
LSAgICB2YXIga3dCZWZvcmVSZSA9ICJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9m
fHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkfHZvaWQiOwotICAgIHZhciBpZGVudGlmaWVy
UmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZm
Zl0qXFxiIjsKLQotICAgIHZhciBlc2NhcGVkUmUgPSAiXFxcXCg/OnhbMC05YS1mQS1GXXsyfXwi
ICsgLy8gaGV4Ci0gICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKLSAgICAg
ICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0Ci0gICAgICAgICIzWzAtNl1bMC03XT98IiAr
IC8vIG9jdAotICAgICAgICAiMzdbMC03XT98IiArIC8vIG9jdAotICAgICAgICAiWzQtN11bMC03
XT98IiArIC8vb2N0Ci0gICAgICAgICIuKSI7Ci0KLSAgICB0aGlzLiRydWxlcyA9IHsKLSAgICAg
ICAgInN0YXJ0IiA6IFsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6ICJj
b21tZW50IiwKLSAgICAgICAgICAgICAgICByZWdleCA6IC9cL1wvLiokLwotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRv
Yy1zdGFydCIpLAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1l
bnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKLSAgICAgICAgICAgICAgICByZWdleCA6IC9cL1wq
LywKLSAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCi0gICAgICAgICAgICB9LCB7Ci0g
ICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICByZWdleCA6
ICInKD89LikiLAotICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCi0gICAgICAgICAg
ICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAg
ICByZWdleCA6ICciKD89LiknLAotICAgICAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIgot
ICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVy
aWMiLCAvLyBoZXgKLSAgICAgICAgICAgICAgICByZWdleCA6IC8wW3hYXVswLTlhLWZBLUZdK1xi
LwotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51
bWVyaWMiLCAvLyBmbG9hdAotICAgICAgICAgICAgICAgIHJlZ2V4IDogL1srLV0/XGQrKD86KD86
XC5cZCopPyg/OltlRV1bKy1dP1xkKyk/KT9cYi8KLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAg
ICAgICAgICB0b2tlbiA6IFsKLSAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJw
dW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIiwKLSAgICAgICAgICAgICAg
ICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRl
eHQiLCJrZXl3b3JkLm9wZXJhdG9yIgotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAg
ICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgi
ICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KSIsCi0gICAgICAgICAgICAgICAgbmV4dDogImZ1
bmN0aW9uX2FyZ3VtZW50cyIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tl
biA6IFsKLSAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5v
cGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKLSAgICAgICAgICAgICAg
ICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIs
ICJwYXJlbi5scGFyZW4iCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICByZWdl
eCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxz
KikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAotICAgICAgICAgICAgICAgIG5leHQ6
ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAg
dG9rZW4gOiBbCi0gICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0
ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAotICAgICAg
ICAgICAgICAgICAgICAidGV4dCIsICJwYXJlbi5scGFyZW4iCi0gICAgICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSko
XFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAotICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5j
dGlvbl9hcmd1bWVudHMiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4g
OiBbCi0gICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3Bl
cmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCi0gICAgICAgICAgICAgICAg
ICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAotICAgICAgICAgICAgICAgICAgICAic3Rv
cmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJl
bi5scGFyZW4iCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICByZWdleCA6ICIo
IiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSko
XFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAotICAgICAgICAgICAgICAg
IG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAg
ICAgICAgdG9rZW4gOiBbCi0gICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4
dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKLSAgICAg
ICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKyko
IiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAotICAgICAgICAgICAgICAgIG5leHQ6
ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAg
dG9rZW4gOiBbCi0gICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0
ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKLSAgICAgICAgICAgICAgICAgICAgInRleHQi
LCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgotICAgICAgICAgICAgICAg
IF0sCi0gICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMq
KSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCi0gICAgICAgICAgICAgICAgbmV4dDog
ImZ1bmN0aW9uX2FyZ3VtZW50cyIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0
b2tlbiA6IFsKLSAgICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4dCIsICJzdG9yYWdlLnR5
cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAg
ICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAotICAgICAg
ICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCi0gICAgICAgICAgICB9LCB7Ci0g
ICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgcmVnZXgg
OiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCi0gICAgICAgICAgICAgICAgbmV4dCA6ICJy
ZWdleF9hbGxvd2VkIgotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDog
WyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIl0sCi0gICAgICAgICAg
ICAgICAgcmVnZXggOiAvKFwuKShzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFs
RGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9w
enp6enxyaWtlKXxpKD86bnx6ZVRvQ29udGVudHxkZWJhcnxnblRleHQpfG9ydHx1KD86cHxiKD86
c3RyKD86aW5nKT8pPyl8cGxpKD86Y2V8dCl8ZSg/Om5kfHQoPzpSZSg/OnNpemFibGV8cXVlc3RI
ZWFkZXIpfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIbyg/OnRLZXlz
fHVycyl8WWVhcnxDdXJzb3J8VGltZSg/Om91dCk/fEludGVydmFsfFpPcHRpb25zfERhdGV8VVRD
KD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhdGV8RnVs
bFllYXIpfEZ1bGxZZWFyfEFjdGl2ZSl8YXJjaCl8cXJ0fGxpY2V8YXZlUHJlZmVyZW5jZXN8bWFs
bCl8aCg/Om9tZXxhbmRsZUV2ZW50KXxuYXZpZ2F0ZXxjKD86aGFyKD86Q29kZUF0fEF0KXxvKD86
c3xuKD86Y2F0fHRleHR1YWx8ZmlybSl8bXBpbGUpfGVpbHxsZWFyKD86VGltZW91dHxJbnRlcnZh
bCk/fGEoPzpwdHVyZUV2ZW50c3xsbCl8cmVhdGUoPzpTdHlsZVNoZWV0fFBvcHVwfEV2ZW50T2Jq
ZWN0KSl8dCg/Om8oPzpHTVRTdHJpbmd8Uyg/OnRyaW5nfG91cmNlKXxVKD86VENTdHJpbmd8cHBl
ckNhc2UpfExvKD86Y2FsZVN0cmluZ3x3ZXJDYXNlKSl8ZXN0fGEoPzpufGludCg/OkVuYWJsZWQp
PykpfGkoPzpzKD86TmFOfEZpbml0ZSl8bmRleE9mfHRhbGljcyl8ZCg/OmlzYWJsZUV4dGVybmFs
Q2FwdHVyZXx1bXB8ZXRhY2hFdmVudCl8dSg/Om4oPzpzaGlmdHx0YWludHxlc2NhcGV8d2F0Y2gp
fHBkYXRlQ29tbWFuZHMpfGooPzpvaW58YXZhRW5hYmxlZCl8cCg/Om8oPzpwfHcpfHVzaHxsdWdp
bnMucmVmcmVzaHxhKD86ZGRpbmdzfHJzZSg/OkludHxGbG9hdCk/KXxyKD86aW50fG9tcHR8ZWZl
cmVuY2UpKXxlKD86c2NhcGV8bmFibGVFeHRlcm5hbENhcHR1cmV8dmFsfGxlbWVudEZyb21Qb2lu
dHx4KD86cHxlYyg/OlNjcmlwdHxDb21tYW5kKT8pKXx2YWx1ZU9mfFVUQ3xxdWVyeUNvbW1hbmQo
PzpTdGF0ZXxJbmRldGVybXxFbmFibGVkfFZhbHVlKXxmKD86aSg/Om5kfGxlKD86TW9kaWZpZWRE
YXRlfFNpemV8Q3JlYXRlZERhdGV8VXBkYXRlZERhdGUpfHhlZCl8byg/Om50KD86c2l6ZXxjb2xv
cil8cndhcmQpfGxvb3J8cm9tQ2hhckNvZGUpfHdhdGNofGwoPzppbmt8byg/OmFkfGcpfGFzdElu
ZGV4T2YpfGEoPzpzaW58bmNob3J8Y29zfHQoPzp0YWNoRXZlbnR8b2J8YW4oPzoyKT8pfHBwbHl8
bGVydHxiKD86c3xvcnQpKXxyKD86b3UoPzpuZHx0ZUV2ZW50cyl8ZSg/OnNpemUoPzpCeXxUbyl8
Y2FsY3x0dXJuVmFsdWV8cGxhY2V8dmVyc2V8bCg/Om9hZHxlYXNlKD86Q2FwdHVyZXxFdmVudHMp
KSl8YW5kb20pfGcoPzpvfGV0KD86UmVzcG9uc2VIZWFkZXJ8TSg/OmkoPzpudXRlc3xsbGlzZWNv
bmRzKXxvbnRoKXxTZSg/OmNvbmRzfGxlY3Rpb24pfEhvdXJzfFllYXJ8VGltZSg/OnpvbmVPZmZz
ZXQpP3xEYSg/Onl8dGUpfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vj
b25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFyKXxGdWxsWWVhcnxBKD86dHRlbnRpb258bGxS
ZXNwb25zZUhlYWRlcnMpKSl8bSg/OmlufG92ZSg/OkIoPzp5fGVsb3cpfFRvKD86QWJzb2x1dGUp
P3xBYm92ZSl8ZXJnZUF0dHJpYnV0ZXN8YSg/OnRjaHxyZ2luc3x4KSl8Yig/OnRvYXxpZ3xvKD86
bGR8cmRlcldpZHRocyl8bGlua3xhY2spKVxiKD89XCgpLwotICAgICAgICAgICAgfSwgewotICAg
ICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1
bmN0aW9uLmRvbSJdLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhcLikocyg/OnViKD86c3Ry
aW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5vZGUp
Pyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86aWNr
fG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258YXB0aW9uKXxU
KD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3RydWN0
aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYkluZGV4fGkoPzpu
c2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMoPzpl
bGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/OmRk
fHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92ZSg/
Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVtfEVs
ZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1
cilcYig/PVwoKS8KLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6IFsi
cHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5jb25zdGFudCJdLAotICAgICAgICAgICAg
ICAgIHJlZ2V4IDogLyhcLikocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVu
KD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxp
YmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98
bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8
WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQ
cm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1
Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVy
cmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2Vk
fGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zv
cm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5l
cig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86
cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8
ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8
YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNj
cmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIo
PzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2
YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5z
fGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/
OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86
dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpu
KD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJp
bGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVf
SU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1l
KXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVU
eXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3Ny
Yyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfElu
ZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1l
fENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxs
bHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xl
KD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVs
dGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8
Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90
dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93
fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAg
ICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIs
ICJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSwKLSAgICAgICAgICAgICAgICByZWdleCA6IC8o
Y29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0aW1lRW5kfGFzc2VydClcYi8K
LSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIs
Ci0gICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKLSAgICAgICAgICAgIH0sIHsK
LSAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKLSAgICAgICAgICAg
ICAgICByZWdleCA6IC8tLXxcK1wrfFshJCUmKitcLX5dfD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8
PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XHxcfHxcP1w6fFwqPXwlPXxcKz18XC09fCY9fFxePS8s
Ci0gICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKLSAgICAgICAgICAgIH0s
IHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCi0gICAg
ICAgICAgICAgICAgcmVnZXggOiAvXD98XDp8XCx8XDt8XC4vLAotICAgICAgICAgICAgICAgIG5l
eHQgIDogInJlZ2V4X2FsbG93ZWQiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAg
dG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKLSAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10v
LAotICAgICAgICAgICAgICAgIG5leHQgIDogInJlZ2V4X2FsbG93ZWQiCi0gICAgICAgICAgICB9
LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKLSAgICAgICAgICAg
ICAgICByZWdleCA6IC9bXF0pfV0vCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAg
dG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCi0gICAgICAgICAgICAgICAgcmVnZXggOiAvXC89
Py8sCi0gICAgICAgICAgICAgICAgbmV4dCAgOiAicmVnZXhfYWxsb3dlZCIKLSAgICAgICAgICAg
IH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAotICAgICAgICAgICAgICAg
IHJlZ2V4OiAvXiMhLiokLwotICAgICAgICAgICAgfQotICAgICAgICBdLAotICAgICAgICAicmVn
ZXhfYWxsb3dlZCI6IFsKLSAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRT
dGFydFJ1bGUoImRvYy1zdGFydCIpLAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRv
a2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKLSAgICAgICAgICAgICAgICBy
ZWdleCA6ICJcXC9cXCoiLAotICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudF9yZWdleF9h
bGxvd2VkIgotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1l
bnQiLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKLSAgICAgICAgICAgIH0s
IHsKLSAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAotICAgICAgICAgICAg
ICAgIHJlZ2V4OiAiXFwvIiwKLSAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgiLAotICAgICAg
ICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAotICAgICAgICAgICAg
ICAgIHJlZ2V4IDogIlxccysiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9r
ZW46ICJlbXB0eSIsCi0gICAgICAgICAgICAgICAgcmVnZXg6ICIiLAotICAgICAgICAgICAgICAg
IG5leHQ6ICJzdGFydCIKLSAgICAgICAgICAgIH0KLSAgICAgICAgXSwKLSAgICAgICAgInJlZ2V4
IjogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdv
cmQub3BlcmF0b3IiLAotICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/OnVbXFxkYS1mQS1G
XXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAg
ICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKLSAgICAgICAgICAgICAgICByZWdleDogIi9cXHcq
IiwKLSAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiLAotICAgICAgICAgICAgfSwgewotICAg
ICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAotICAgICAgICAgICAgICAgIHJlZ2V4OiAv
XHtcZCssPyg/OlxkKyk/fVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCi0gICAgICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNj
YXBlIiwKLSAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXx7XGQrLD8oPzpcZCsp
P318eyxcZCt9fFsrKl1cP3xbKCkkXisqP10vCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAg
ICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKLSAgICAgICAgICAg
ICAgICByZWdleDogL1x8LwotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2Vu
OiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKLSAgICAgICAgICAgICAgICByZWdleDogL1xb
XF4/LywKLSAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIiwKLSAg
ICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKLSAgICAgICAg
ICAgICAgICByZWdleDogIiQiLAotICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKLSAgICAg
ICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhw
IgotICAgICAgICAgICAgfQotICAgICAgICBdLAotICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2Ns
YXNzIjogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtl
eXdvcmQub3BlcmF0b3IiLAotICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/OnVbXFxkYS1m
QS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAg
ICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAotICAgICAgICAgICAgICAg
IHJlZ2V4OiAiXSIsCi0gICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IiwKLSAgICAgICAgICAg
IH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIs
Ci0gICAgICAgICAgICAgICAgcmVnZXg6ICItIgotICAgICAgICAgICAgfSwgewotICAgICAgICAg
ICAgICAgIHRva2VuOiAiZW1wdHkiLAotICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCi0gICAg
ICAgICAgICAgICAgbmV4dDogInN0YXJ0IgotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAg
ICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgotICAgICAg
ICAgICAgfQotICAgICAgICBdLAotICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwK
LSAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCi0gICAgICAgICAgICB9LCB7Ci0g
ICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCi0gICAgICAgICAg
ICAgICAgcmVnZXg6ICJbLCBdKyIsCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAg
dG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCi0gICAgICAgICAgICAgICAgcmVnZXg6ICIk
IiwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKLSAg
ICAgICAgICAgICAgICByZWdleDogIiIsCi0gICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0Igot
ICAgICAgICAgICAgfQotICAgICAgICBdLAotICAgICAgICAiY29tbWVudF9yZWdleF9hbGxvd2Vk
IiA6IFsKLSAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwg
bmV4dCA6ICJyZWdleF9hbGxvd2VkIn0sCi0gICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNv
bW1lbnQifQotICAgICAgICBdLAotICAgICAgICAiY29tbWVudCIgOiBbCi0gICAgICAgICAgICB7
dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxcKlxcLyIsIG5leHQgOiAic3RhcnQifSwKLSAg
ICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9Ci0gICAgICAgIF0sCi0gICAgICAg
ICJxcXN0cmluZyIgOiBbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gOiAi
Y29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKLSAgICAgICAgICAgICAgICByZWdleCA6IGVzY2Fw
ZWRSZQotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIs
Ci0gICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAotICAgICAgICAgICAgICAgIG5leHQg
IDogInFxc3RyaW5nIiwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6
ICJzdHJpbmciLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCi0gICAgICAgICAgICAg
ICAgbmV4dCAgOiAic3RhcnQiLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIGRl
ZmF1bHRUb2tlbjogInN0cmluZyIKLSAgICAgICAgICAgIH0KLSAgICAgICAgXSwKLSAgICAgICAg
InFzdHJpbmciIDogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRva2VuIDogImNv
bnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCi0gICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVk
UmUKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAot
ICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKLSAgICAgICAgICAgICAgICBuZXh0ICA6
ICJxc3RyaW5nIiwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA6ICJz
dHJpbmciLAotICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCi0gICAgICAgICAgICAgICAg
bmV4dCAgOiAic3RhcnQiLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIGRlZmF1
bHRUb2tlbjogInN0cmluZyIKLSAgICAgICAgICAgIH0KLSAgICAgICAgXQotICAgIH07Ci0KLSAg
ICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCi0gICAg
ICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Ci19
OwotCi1vb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0
UnVsZXMpOwotCi1leHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRI
aWdobGlnaHRSdWxlczsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS9kb2NfY29tbWVudF9o
aWdobGlnaHRfcnVsZXMnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9s
aWIvb29wJywgJ2FjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29w
Iik7Ci12YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9y
dWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKLQotdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxl
cyA9IGZ1bmN0aW9uKCkgewotCi0gICAgdGhpcy4kcnVsZXMgPSB7Ci0gICAgICAgICJzdGFydCIg
OiBbIHsKLSAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCi0gICAgICAgICAg
ICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwotICAg
ICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAotICAgICAg
ICAgICAgcmVnZXggOiAiXFxiVE9ET1xcYiIKLSAgICAgICAgfSwgewotICAgICAgICAgICAgZGVm
YXVsdFRva2VuIDogImNvbW1lbnQuZG9jIgotICAgICAgICB9XQotICAgIH07Ci19OwotCi1vb3Au
aW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwot
Ci1Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQp
IHsKLSAgICByZXR1cm4gewotICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBj
b21tZW50Ci0gICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAotICAgICAgICBuZXh0ICA6
IHN0YXJ0Ci0gICAgfTsKLX07Ci0KLURvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxl
ID0gZnVuY3Rpb24gKHN0YXJ0KSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgdG9rZW4gOiAiY29t
bWVudC5kb2MiLCAvLyBjbG9zaW5nIGNvbW1lbnQKLSAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwK
LSAgICAgICAgbmV4dCAgOiBzdGFydAotICAgIH07Ci19OwotCi0KLWV4cG9ydHMuRG9jQ29tbWVu
dEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwotCi19KTsKLQotYWNl
LmRlZmluZSgnYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCcsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgewotCi0KLXZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7
Ci0KLXZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307Ci0KLShmdW5jdGlv
bigpIHsKLQotICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsK
LSAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKLSAgICB9OwotCi0g
ICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7Ci0gICAgICAgIHZhciBs
aW5lID0gZG9jLmdldExpbmUocm93KTsKLSAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgv
XihccypcfSkvKTsKLQotICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKLQotICAgICAgICB2
YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwotICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0g
ZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwotCi0g
ICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1
cm4gMDsKLQotICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5l
KG9wZW5CcmFjZVBvcy5yb3cpKTsKLSAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywg
MCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7Ci0gICAgfTsKLQotICAgIHRoaXMuJGdldEluZGVu
dCA9IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihc
cyspLyk7Ci0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFd
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICIiOwotICAgIH07Ci0KLX0pLmNhbGwoTWF0
Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKLQotZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0
ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50OwotfSk7Ci0KLWFjZS5kZWZpbmUoJ2FjZS9tb2Rl
L2JlaGF2aW91ci9jc3R5bGUnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2Fj
ZS9saWIvb29wJywgJ2FjZS9tb2RlL2JlaGF2aW91cicsICdhY2UvdG9rZW5faXRlcmF0b3InLCAn
YWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0K
LXZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7Ci12YXIgQmVoYXZpb3VyID0gcmVx
dWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwotdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1
aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Ci12YXIgbGFuZyA9IHJl
cXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7Ci0KLXZhciBTQUZFX0lOU0VSVF9JTl9UT0tFTlMgPQot
ICAgIFsidGV4dCIsICJwYXJlbi5ycGFyZW4iLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiXTsKLXZh
ciBTQUZFX0lOU0VSVF9CRUZPUkVfVE9LRU5TID0KLSAgICBbInRleHQiLCAicGFyZW4ucnBhcmVu
IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImNvbW1lbnQiXTsKLQotCi12YXIgYXV0b0luc2Vy
dGVkQnJhY2tldHMgPSAwOwotdmFyIGF1dG9JbnNlcnRlZFJvdyA9IC0xOwotdmFyIGF1dG9JbnNl
cnRlZExpbmVFbmQgPSAiIjsKLXZhciBtYXliZUluc2VydGVkQnJhY2tldHMgPSAwOwotdmFyIG1h
eWJlSW5zZXJ0ZWRSb3cgPSAtMTsKLXZhciBtYXliZUluc2VydGVkTGluZVN0YXJ0ID0gIiI7Ci12
YXIgbWF5YmVJbnNlcnRlZExpbmVFbmQgPSAiIjsKLQotdmFyIENzdHlsZUJlaGF2aW91ciA9IGZ1
bmN0aW9uICgpIHsKLSAgICAKLSAgICBDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uID0g
ZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uKSB7Ci0gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3Iu
Z2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRl
cmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7Ci0gICAgICAgIGlmICgh
dGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgInRleHQi
LCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKSB7Ci0gICAgICAgICAgICB2YXIgaXRlcmF0b3IyID0g
bmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiArIDEp
OwotICAgICAgICAgICAgaWYgKCF0aGlzLiRtYXRjaFRva2VuVHlwZShpdGVyYXRvcjIuZ2V0Q3Vy
cmVudFRva2VuKCkgfHwgInRleHQiLCBTQUZFX0lOU0VSVF9JTl9UT0tFTlMpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpdGVyYXRvci5zdGVwRm9y
d2FyZCgpOwotICAgICAgICByZXR1cm4gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCkgIT09
IGN1cnNvci5yb3cgfHwKLSAgICAgICAgICAgIHRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9y
LmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyk7
Ci0gICAgfTsKLSAgICAKLSAgICBDc3R5bGVCZWhhdmlvdXIuJG1hdGNoVG9rZW5UeXBlID0gZnVu
Y3Rpb24odG9rZW4sIHR5cGVzKSB7Ci0gICAgICAgIHJldHVybiB0eXBlcy5pbmRleE9mKHRva2Vu
LnR5cGUgfHwgdG9rZW4pID4gLTE7Ci0gICAgfTsKLSAgICAKLSAgICBDc3R5bGVCZWhhdmlvdXIu
cmVjb3JkQXV0b0luc2VydCA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbiwgYnJhY2tldCkgewot
ICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7Ci0gICAgICAg
IHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKLSAgICAgICAgaWYg
KCF0aGlzLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIGF1dG9JbnNlcnRlZExp
bmVFbmRbMF0pKQotICAgICAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwotICAgICAg
ICBhdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OwotICAgICAgICBhdXRvSW5zZXJ0ZWRMaW5l
RW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pOwotICAgICAgICBhdXRv
SW5zZXJ0ZWRCcmFja2V0cysrOwotICAgIH07Ci0gICAgCi0gICAgQ3N0eWxlQmVoYXZpb3VyLnJl
Y29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7Ci0g
ICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLSAgICAgICAg
dmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwotICAgICAgICBpZiAo
IXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKQotICAgICAgICAgICAg
bWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKLSAgICAgICAgbWF5YmVJbnNlcnRlZFJvdyA9IGN1
cnNvci5yb3c7Ci0gICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSBsaW5lLnN1YnN0cigw
LCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7Ci0gICAgICAgIG1heWJlSW5zZXJ0ZWRMaW5lRW5k
ID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7Ci0gICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFj
a2V0cysrOwotICAgIH07Ci0gICAgCi0gICAgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVk
Q2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJhY2tldCkgewotICAgICAgICByZXR1
cm4gYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCi0gICAgICAgICAgICBjdXJzb3Iucm93ID09
PSBhdXRvSW5zZXJ0ZWRSb3cgJiYKLSAgICAgICAgICAgIGJyYWNrZXQgPT09IGF1dG9JbnNlcnRl
ZExpbmVFbmRbMF0gJiYKLSAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pID09
PSBhdXRvSW5zZXJ0ZWRMaW5lRW5kOwotICAgIH07Ci0gICAgCi0gICAgQ3N0eWxlQmVoYXZpb3Vy
LmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3IsIGxpbmUpIHsKLSAgICAg
ICAgcmV0dXJuIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKLSAgICAgICAgICAgIGN1cnNv
ci5yb3cgPT09IG1heWJlSW5zZXJ0ZWRSb3cgJiYKLSAgICAgICAgICAgIGxpbmUuc3Vic3RyKGN1
cnNvci5jb2x1bW4pID09PSBtYXliZUluc2VydGVkTGluZUVuZCAmJgotICAgICAgICAgICAgbGlu
ZS5zdWJzdHIoMCwgY3Vyc29yLmNvbHVtbikgPT0gbWF5YmVJbnNlcnRlZExpbmVTdGFydDsKLSAg
ICB9OwotICAgIAotICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQgPSBhdXRvSW5zZXJ0ZWRM
aW5lRW5kLnN1YnN0cigxKTsKLSAgICAgICAgYXV0b0luc2VydGVkQnJhY2tldHMtLTsKLSAgICB9
OwotICAgIAotICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cyA9IDA7Ci0gICAgICAg
IG1heWJlSW5zZXJ0ZWRSb3cgPSAtMTsKLSAgICB9OwotCi0gICAgdGhpcy5hZGQoImJyYWNlcyIs
ICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0
ZXh0KSB7Ci0gICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsK
LSAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwotICAg
ICAgICBpZiAodGV4dCA9PSAneycpIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0
b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Np
b24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGVk
ICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gInsiICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0Vu
YWJsZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAg
IHRleHQ6ICd7JyArIHNlbGVjdGVkICsgJ30nLAotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b246IGZhbHNlCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoQ3N0
eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbihlZGl0b3IsIHNlc3Npb24pKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKC9bXF1cfVwpXS8udGVzdChsaW5lW2N1cnNvci5jb2x1bW5dKSkgewotICAg
ICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3Is
IHNlc3Npb24sICJ9Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0OiAne30nLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNl
cnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3snLAotICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnfScpIHsK
LSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1u
LCBjdXJzb3IuY29sdW1uICsgMSk7Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9Jykg
ewotICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJh
Y2tldCgnfScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNvci5yb3d9KTsK
LSAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3Vy
LmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAn
JywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCi0gICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKHRleHQgPT0gIlxuIiB8fCB0ZXh0ID09ICJcclxuIikgewotICAgICAgICAgICAg
dmFyIGNsb3NpbmcgPSAiIjsKLSAgICAgICAgICAgIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNNYXli
ZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgY2xvc2lu
ZyA9IGxhbmcuc3RyaW5nUmVwZWF0KCJ9IiwgbWF5YmVJbnNlcnRlZEJyYWNrZXRzKTsKLSAgICAg
ICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5n
KGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKLSAgICAgICAgICAgIGlmIChyaWdo
dENoYXIgPT0gJ30nIHx8IGNsb3NpbmcgIT09ICIiKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9w
ZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiBjdXJzb3Iucm93
LCBjb2x1bW46IGN1cnNvci5jb2x1bW59LCAnfScpOwotICAgICAgICAgICAgICAgIGlmICghb3Bl
bkJyYWNlUG9zKQotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy5nZXROZXh0TGluZUluZGVudChzdGF0ZSwgbGluZS5z
dWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpOwotICAg
ICAgICAgICAgICAgIHZhciBuZXh0X2luZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKLQot
ICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdcbicg
KyBpbmRlbnQgKyAnXG4nICsgbmV4dF9pbmRlbnQgKyBjbG9zaW5nLAotICAgICAgICAgICAgICAg
ICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQotICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAg
IHRoaXMuYWRkKCJicmFjZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwg
ZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewotICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9u
LmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwotICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5l
KCkgJiYgc2VsZWN0ZWQgPT0gJ3snKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24u
ZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKLSAgICAgICAgICAgIHZhciByaWdodENoYXIg
PSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7
Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgewotICAgICAgICAgICAgICAgIHJh
bmdlLmVuZC5jb2x1bW4rKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0cy0tOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0aGlzLmFkZCgicGFyZW5z
IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24s
IHRleHQpIHsKLSAgICAgICAgaWYgKHRleHQgPT0gJygnKSB7Ci0gICAgICAgICAgICB2YXIgc2Vs
ZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7Ci0gICAgICAgICAgICB2YXIgc2Vs
ZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKLSAgICAgICAgICAg
IGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dDog
JygnICsgc2VsZWN0ZWQgKyAnKScsCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFs
c2UKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhh
dmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKLSAgICAgICAgICAgICAg
ICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICIpIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dDogJygp
JywKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KLSAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRleHQgPT0gJyknKSB7Ci0g
ICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7Ci0gICAg
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7Ci0gICAg
ICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vy
c29yLmNvbHVtbiArIDEpOwotICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQo
JyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93fSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1
dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgewotICAgICAgICAgICAgICAg
ICAgICBDc3R5bGVCZWhhdmlvdXIucG9wQXV0b0luc2VydGVkQ2xvc2luZygpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQotICAgICAgICAgICAgICAg
ICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0pOwotCi0gICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0
ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7Ci0gICAgICAgIHZhciBzZWxlY3Rl
ZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7Ci0gICAgICAgIGlmICghcmFuZ2Uu
aXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsKLSAgICAgICAgICAgIHZhciBsaW5l
ID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwotICAgICAgICAgICAgdmFy
IHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdl
LnN0YXJ0LmNvbHVtbiArIDIpOwotICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsK
LSAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJhbmdlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0aGlz
LmFkZCgiYnJhY2tldHMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVk
aXRvciwgc2Vzc2lvbiwgdGV4dCkgewotICAgICAgICBpZiAodGV4dCA9PSAnWycpIHsKLSAgICAg
ICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKLSAgICAg
ICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShzZWxlY3Rpb24p
OwotICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2
aW91cnNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiAnWycgKyBzZWxlY3RlZCArICddJywKLSAgICAgICAgICAgICAgICAgICAg
c2VsZWN0aW9uOiBmYWxzZQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKENzdHlsZUJlaGF2aW91ci5pc1NhbmVJbnNlcnRpb24oZWRpdG9yLCBzZXNzaW9uKSkgewot
ICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwg
c2Vzc2lvbiwgIl0iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
ICAgICB0ZXh0OiAnW10nLAotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQot
ICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGV4
dCA9PSAnXScpIHsKLSAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9z
aXRpb24oKTsKLSAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJz
b3Iucm93KTsKLSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJz
b3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFy
ID09ICddJykgewotICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHNlc3Npb24uJGZpbmRP
cGVuaW5nQnJhY2tldCgnXScsIHtjb2x1bW46IGN1cnNvci5jb2x1bW4gKyAxLCByb3c6IGN1cnNv
ci5yb3d9KTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxl
QmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5n
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCi0g
ICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICB0aGlzLmFkZCgiYnJhY2tldHMiLCAiZGVsZXRpb24i
LCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewotICAg
ICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwotICAg
ICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT0gJ1snKSB7Ci0gICAg
ICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsK
LSAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5j
b2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKLSAgICAgICAgICAgIGlmIChyaWdo
dENoYXIgPT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwotICAg
ICAgICAgICAgICAgIHJldHVybiByYW5nZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0pOwotCi0gICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0
aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKLSAgICAgICAgaWYg
KHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7Ci0gICAgICAgICAgICB2YXIgcXVvdGUgPSB0
ZXh0OwotICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5n
ZSgpOwotICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdl
KHNlbGVjdGlvbik7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVk
ICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0Vu
YWJsZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAg
IHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKLSAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uOiBmYWxzZQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsK
LSAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJv
dyk7Ci0gICAgICAgICAgICAgICAgdmFyIGxlZnRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29y
LmNvbHVtbi0xLCBjdXJzb3IuY29sdW1uKTsKLSAgICAgICAgICAgICAgICBpZiAobGVmdENoYXIg
PT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHNl
bGVjdGlvbi5zdGFydC5yb3cpOwotICAgICAgICAgICAgICAgIHZhciBjb2wgPSAwLCB0b2tlbjsK
LSAgICAgICAgICAgICAgICB2YXIgcXVvdGVwb3MgPSAtMTsgLy8gVHJhY2sgd2hldGhlciB3ZSdy
ZSBpbnNpZGUgYW4gb3BlbiBxdW90ZS4KLQotICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAw
OyB4IDwgdG9rZW5zLmxlbmd0aDsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuID0g
dG9rZW5zW3hdOwotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PSAic3RyaW5n
IikgewotICAgICAgICAgICAgICAgICAgICAgIHF1b3RlcG9zID0gLTE7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocXVvdGVwb3MgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
cXVvdGVwb3MgPSB0b2tlbi52YWx1ZS5pbmRleE9mKHF1b3RlKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuLnZhbHVlLmxlbmd0aCArIGNvbCkg
PiBzZWxlY3Rpb24uc3RhcnQuY29sdW1uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb2wgKz0gdG9r
ZW5zW3hdLnZhbHVlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKCF0b2tlbiB8fCAocXVvdGVwb3MgPCAwICYmIHRva2VuLnR5cGUgIT09ICJjb21tZW50IiAm
JiAodG9rZW4udHlwZSAhPT0gInN0cmluZyIgfHwgKChzZWxlY3Rpb24uc3RhcnQuY29sdW1uICE9
PSB0b2tlbi52YWx1ZS5sZW5ndGgrY29sLTEpICYmIHRva2VuLnZhbHVlLmxhc3RJbmRleE9mKHF1
b3RlKSA9PT0gdG9rZW4udmFsdWUubGVuZ3RoLTEpKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHF1b3RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwxXQotICAgICAgICAgICAgICAgICAgICB9
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gInN0
cmluZyIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3Ry
aW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQotICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVz
IiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwg
cmFuZ2UpIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdl
KHJhbmdlKTsKLSAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9
PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgewotICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNz
aW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7Ci0gICAgICAgICAgICB2YXIgcmlnaHRD
aGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQu
Y29sdW1uICsgMik7Ci0gICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHNlbGVjdGVkKSB7Ci0g
ICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwotICAgICAgICAgICAgICAgIHJldHVy
biByYW5nZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotCi19OwotCi1vb3Au
aW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIpOwotCi1leHBvcnRzLkNzdHlsZUJl
aGF2aW91ciA9IENzdHlsZUJlaGF2aW91cjsKLX0pOwotCi1hY2UuZGVmaW5lKCdhY2UvbW9kZS9m
b2xkaW5nL2NzdHlsZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9vb3AnLCAnYWNlL3JhbmdlJywgJ2FjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlJ10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotCi0KLXZhciBvb3AgPSByZXF1aXJlKCIu
Li8uLi9saWIvb29wIik7Ci12YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdl
OwotdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Ci0K
LXZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owotb29wLmlu
aGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwotCi0oZnVuY3Rpb24oKSB7Ci0KLSAgICB0
aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXHt8XFspW15cfVxdXSokfF5ccyooXC9cKikvOwot
ICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce10qKFx9fFxdKXxeW1xzXCpdKihc
KlwvKS87Ci0KLSAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24s
IGZvbGRTdHlsZSwgcm93KSB7Ci0gICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJv
dyk7Ci0gICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJr
ZXIpOwotICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5k
ZXg7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwotCi0g
ICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1h
dGNoWzBdLmxlbmd0aCwgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm9sZFN0eWxlICE9
PSAibWFya2JlZ2luZW5kIikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbWF0
Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwotICAgICAgICBpZiAobWF0
Y2gpIHsKLSAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7
Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwotCi0gICAg
ICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwotCi19KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL3RoZW1l
X3RleHRtYXRlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvdGhl
bWVfdGV4dG1hdGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjY3ZmEuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvdGhlbWVf
dGV4dG1hdGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyogKioqKiogQkVH
SU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBsaWNl
bnNlOgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5WLgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgQWpheC5vcmcgQi5WLiBub3IgdGhlCi0gKiAgICAgICBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICog
ICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICoKLSAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0KLWFjZS5kZWZpbmUoJ2Fj
ZS90aGVtZS90ZXh0bWF0ZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNl
L2xpYi9kb20nXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Ci0KLQotZXhw
b3J0cy5pc0RhcmsgPSBmYWxzZTsKLWV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLXRtIjsKLWV4cG9y
dHMuY3NzVGV4dCA9ICIuYWNlLXRtIC5hY2VfZ3V0dGVyIHtcCi1iYWNrZ3JvdW5kOiAjZjBmMGYw
O1wKLWNvbG9yOiAjMzMzO1wKLX1cCi0uYWNlLXRtIC5hY2VfcHJpbnQtbWFyZ2luIHtcCi13aWR0
aDogMXB4O1wKLWJhY2tncm91bmQ6ICNlOGU4ZTg7XAotfVwKLS5hY2UtdG0gLmFjZV9mb2xkIHtc
Ci1iYWNrZ3JvdW5kLWNvbG9yOiAjNkI3MkU2O1wKLX1cCi0uYWNlLXRtIC5hY2Vfc2Nyb2xsZXIg
e1wKLWJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XAotfVwKLS5hY2UtdG0gLmFjZV9jdXJzb3Ig
e1wKLWJvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7XAotfVwKLS5hY2UtdG0gLmFjZV9vdmVy
d3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XAotYm9yZGVyLWxlZnQ6IDBweDtcCi1ib3JkZXIt
Ym90dG9tOiAxcHggc29saWQgYmxhY2s7XAotfVwKLS5hY2UtdG0gLmFjZV9pbnZpc2libGUge1wK
LWNvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7XAotfVwKLS5hY2UtdG0gLmFjZV9zdG9yYWdlLFwK
LS5hY2UtdG0gLmFjZV9rZXl3b3JkIHtcCi1jb2xvcjogYmx1ZTtcCi19XAotLmFjZS10bSAuYWNl
X2NvbnN0YW50IHtcCi1jb2xvcjogcmdiKDE5NywgNiwgMTEpO1wKLX1cCi0uYWNlLXRtIC5hY2Vf
Y29uc3RhbnQuYWNlX2J1aWxkaW4ge1wKLWNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO1wKLX1cCi0u
YWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCi1jb2xvcjogcmdiKDg4LCA5Miwg
MjQ2KTtcCi19XAotLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHtcCi1jb2xvcjog
cmdiKDYsIDE1MCwgMTQpO1wKLX1cCi0uYWNlLXRtIC5hY2VfaW52YWxpZCB7XAotYmFja2dyb3Vu
ZC1jb2xvcjogcmdiYSgyNTUsIDAsIDAsIDAuMSk7XAotY29sb3I6IHJlZDtcCi19XAotLmFjZS10
bSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCi1jb2xvcjogcmdiKDYwLCA3NiwgMTE0KTtc
Ci19XAotLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCi1jb2xvcjogcmdiKDYs
IDE1MCwgMTQpO1wKLX1cCi0uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSxcCi0uYWNlLXRt
IC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3Mge1wKLWNvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7XAot
fVwKLS5hY2UtdG0gLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XAotY29sb3I6IHJnYigxMDQs
IDExOCwgMTM1KTtcCi19XAotLmFjZS10bSAuYWNlX3N0cmluZyB7XAotY29sb3I6IHJnYigzLCAx
MDYsIDcpO1wKLX1cCi0uYWNlLXRtIC5hY2VfY29tbWVudCB7XAotY29sb3I6IHJnYig3NiwgMTM2
LCAxMDcpO1wKLX1cCi0uYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jIHtcCi1jb2xvcjogcmdi
KDAsIDEwMiwgMjU1KTtcCi19XAotLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFn
IHtcCi1jb2xvcjogcmdiKDEyOCwgMTU5LCAxOTEpO1wKLX1cCi0uYWNlLXRtIC5hY2VfY29uc3Rh
bnQuYWNlX251bWVyaWMge1wKLWNvbG9yOiByZ2IoMCwgMCwgMjA1KTtcCi19XAotLmFjZS10bSAu
YWNlX3ZhcmlhYmxlIHtcCi1jb2xvcjogcmdiKDQ5LCAxMzIsIDE0OSk7XAotfVwKLS5hY2UtdG0g
LmFjZV94bWwtcGUge1wKLWNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTtcCi19XAotLmFjZS10bSAu
YWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24ge1wKLWNvbG9yOiAjMDAwMEEyO1wKLX1c
Ci0uYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHtcCi1jb2xvcjogcmdiKDEyLCA3LCAy
NTUpO1wKLX1cCi0uYWNlLXRtIC5hY2VfbWFya3VwLmFjZV9saXN0IHtcCi1jb2xvcjpyZ2IoMTg1
LCA2LCAxNDQpO1wKLX1cCi0uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHtcCi1jb2xvcjpyZ2Io
MCwgMjIsIDE0Mik7XAotfVwKLS5hY2UtdG0gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHtcCi1jb2xv
cjogcmdiKDI1NSwgMCwgMClcCi19XAotLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3Nl
bGVjdGlvbiB7XAotYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1wKLX1cCi0uYWNlLXRt
LmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKLWJveC1zaGFkb3c6
IDAgMCAzcHggMHB4IHdoaXRlO1wKLWJvcmRlci1yYWRpdXM6IDJweDtcCi19XAotLmFjZS10bSAu
YWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKLWJhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwg
MCk7XAotfVwKLS5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7XAotYmFja2dy
b3VuZDogcmdiKDE2NCwgMjI5LCAxMDEpO1wKLX1cCi0uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVy
IC5hY2VfYnJhY2tldCB7XAotbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKLWJvcmRlcjogMXB4IHNv
bGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcCi19XAotLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAu
YWNlX2FjdGl2ZS1saW5lIHtcCi1iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO1wKLX1c
Ci0uYWNlLXRtIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCi1iYWNrZ3JvdW5kLWNvbG9yIDog
I2RjZGNkYztcCi19XAotLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdv
cmQge1wKLWJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcCi1ib3JkZXI6IDFweCBzb2xp
ZCByZ2IoMjAwLCAyMDAsIDI1MCk7XAotfVwKLS5hY2UtdG0gLmFjZV9pbmRlbnQtZ3VpZGUge1wK
LWJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFO
U1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9C
d0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PVwiKSByaWdodCByZXBlYXQteTtcCi19XAot
IjsKLQotdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKLWRvbS5pbXBvcnRDc3NTdHJp
bmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKLX0pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9MSUNFTlNFIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzOTE2ZTk2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvY20vTElDRU5TRQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUNv
cHlyaWdodCAoQykgMjAxMiBieSBNYXJpam4gSGF2ZXJiZWtlIDxtYXJpam5oQGdtYWlsLmNvbT4K
LQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw
ZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk
b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLWluIHRoZSBTb2Z0
d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRo
ZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0
ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0
byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk
ZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl
LgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP
RiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF
RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s
IERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O
VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09O
TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElO
Ci1USEUgU09GVFdBUkUuCi0KLVBsZWFzZSBub3RlIHRoYXQgc29tZSBzdWJkaXJlY3RvcmllcyBv
ZiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24KLWluY2x1ZGUgdGhlaXIgb3duIExJQ0VOU0Ug
ZmlsZXMsIGFuZCBhcmUgcmVsZWFzZWQgdW5kZXIgZGlmZmVyZW50Ci1saWNlbmNlcy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY2xvc2VicmFja2V0
cy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY2xvc2VicmFja2V0
cy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ2Y2FjYS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2Nsb3NlYnJhY2tldHMuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBERUZB
VUxUX0JSQUNLRVRTID0gIigpW117fScnXCJcIiI7Ci0gIHZhciBTUEFDRV9DSEFSX1JFR0VYID0g
L1xzLzsKLQotICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbigiYXV0b0Nsb3NlQnJhY2tldHMiLCBm
YWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7Ci0gICAgdmFyIHdhc09uID0gb2xkICYmIG9s
ZCAhPSBDb2RlTWlycm9yLkluaXQ7Ci0gICAgaWYgKHZhbCAmJiAhd2FzT24pCi0gICAgICBjbS5h
ZGRLZXlNYXAoYnVpbGRLZXltYXAodHlwZW9mIHZhbCA9PSAic3RyaW5nIiA/IHZhbCA6IERFRkFV
TFRfQlJBQ0tFVFMpKTsKLSAgICBlbHNlIGlmICghdmFsICYmIHdhc09uKQotICAgICAgY20ucmVt
b3ZlS2V5TWFwKCJhdXRvQ2xvc2VCcmFja2V0cyIpOwotICB9KTsKLQotICBmdW5jdGlvbiBidWls
ZEtleW1hcChwYWlycykgewotICAgIHZhciBtYXAgPSB7Ci0gICAgICBuYW1lIDogImF1dG9DbG9z
ZUJyYWNrZXRzIiwKLSAgICAgIEJhY2tzcGFjZTogZnVuY3Rpb24oY20pIHsKLSAgICAgICAgaWYg
KGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAg
IHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpOwot
ICAgICAgICBpZiAoY3VyLmNoICYmIGN1ci5jaCA8IGxpbmUubGVuZ3RoICYmCi0gICAgICAgICAg
ICBwYWlycy5pbmRleE9mKGxpbmUuc2xpY2UoY3VyLmNoIC0gMSwgY3VyLmNoICsgMSkpICUgMiA9
PSAwKQotICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgQ29kZU1pcnJvci5Qb3MoY3VyLmxp
bmUsIGN1ci5jaCAtIDEpLCBDb2RlTWlycm9yLlBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgIH0K
LSAgICB9OwotICAgIHZhciBjbG9zaW5nQnJhY2tldHMgPSBbXTsKLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBhaXJzLmxlbmd0aDsgaSArPSAyKSAoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHsKLSAg
ICAgIGlmIChsZWZ0ICE9IHJpZ2h0KSBjbG9zaW5nQnJhY2tldHMucHVzaChyaWdodCk7Ci0gICAg
ICBmdW5jdGlvbiBzdXJyb3VuZChjbSkgewotICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBjbS5n
ZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKGxlZnQgKyBzZWxl
Y3Rpb24gKyByaWdodCk7Ci0gICAgICB9Ci0gICAgICBmdW5jdGlvbiBtYXliZU92ZXJ3cml0ZShj
bSkgewotICAgICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGFoZWFkID0gY20uZ2V0UmFu
Z2UoY3VyLCBDb2RlTWlycm9yLlBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpOwotICAgICAgICBp
ZiAoYWhlYWQgIT0gcmlnaHQgfHwgY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuIENvZGVN
aXJyb3IuUGFzczsKLSAgICAgICAgZWxzZSBjbS5leGVjQ29tbWFuZCgiZ29DaGFyUmlnaHQiKTsK
LSAgICAgIH0KLSAgICAgIG1hcFsiJyIgKyBsZWZ0ICsgIiciXSA9IGZ1bmN0aW9uKGNtKSB7Ci0g
ICAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm4gc3Vycm91bmQoY20pOwot
ICAgICAgICBpZiAobGVmdCA9PSByaWdodCAmJiBtYXliZU92ZXJ3cml0ZShjbSkgIT0gQ29kZU1p
cnJvci5QYXNzKSByZXR1cm47Ci0gICAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgYWhl
YWQgPSBDb2RlTWlycm9yLlBvcyhjdXIubGluZSwgY3VyLmNoICsgMSk7Ci0gICAgICAgIHZhciBs
aW5lID0gY20uZ2V0TGluZShjdXIubGluZSksIG5leHRDaGFyID0gbGluZS5jaGFyQXQoY3VyLmNo
KTsKLSAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09IGN1ci5jaCB8fCBjbG9zaW5nQnJhY2tldHMu
aW5kZXhPZihuZXh0Q2hhcikgPj0gMCB8fCBTUEFDRV9DSEFSX1JFR0VYLnRlc3QobmV4dENoYXIp
KQotICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGVmdCArIHJpZ2h0LCB7aGVhZDogYWhl
YWQsIGFuY2hvcjogYWhlYWR9KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBDb2Rl
TWlycm9yLlBhc3M7Ci0gICAgICB9OwotICAgICAgaWYgKGxlZnQgIT0gcmlnaHQpIG1hcFsiJyIg
KyByaWdodCArICInIl0gPSBtYXliZU92ZXJ3cml0ZTsKLSAgICB9KShwYWlycy5jaGFyQXQoaSks
IHBhaXJzLmNoYXJBdChpICsgMSkpOwotICAgIHJldHVybiBtYXA7Ci0gIH0KLX0pKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NtZGV2dG9vbHMu
Y3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jbWRldnRvb2xzLmNz
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0MGZmZi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NtZGV2dG9vbHMuY3NzCisrKyAv
ZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS5Db2RlTWlycm9yICogewotICAtd2Via2l0LWJv
eC1zaXppbmc6IGNvbnRlbnQtYm94OwotfQotCi0uQ29kZU1pcnJvciB7Ci0gIGxpbmUtaGVpZ2h0
OiAxLjJlbSAhaW1wb3J0YW50OwotICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKLSAgYmFja2dy
b3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKLX0KLQotLkNvZGVNaXJyb3IgLnNv
dXJjZS1mcmFtZS1ldmFsLWV4cHJlc3Npb24gewotICBvdXRsaW5lOiAwcHg7Ci0gIGJvcmRlcjog
MXB4IHNvbGlkIHJnYigxNjMsIDQxLCAzNCk7Ci0gIGJvcmRlci1sZWZ0LXdpZHRoOiAwcHg7Ci0g
IGJvcmRlci1yaWdodC13aWR0aDogMHB4OwotfQotCi0uQ29kZU1pcnJvciAuc291cmNlLWZyYW1l
LWV2YWwtZXhwcmVzc2lvbi1lbmQgewotICBib3JkZXItcmlnaHQtd2lkdGg6IDFweDsKLSAgbWFy
Z2luLXJpZ2h0OiAtMXB4OwotfQotCi0uQ29kZU1pcnJvciAuc291cmNlLWZyYW1lLWV2YWwtZXhw
cmVzc2lvbi1zdGFydCB7Ci0gIGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7Ci0gIG1hcmdpbi1sZWZ0
OiAtMXB4OwotfQotCi0KLS5Db2RlTWlycm9yLWxpbmVudW1iZXIgewotICBwYWRkaW5nLXRvcDog
MXB4ICFpbXBvcnRhbnQ7Ci0gIG1pbi13aWR0aDogMjJweCAhaW1wb3J0YW50OwotfQotCi0uY20t
aGlnaGxpZ2h0IHsKLSAgLXdlYmtpdC1hbmltYXRpb246ICJmYWRlb3V0IiAycyAwczsKLX0KLUAt
d2Via2l0LWtleWZyYW1lcyBmYWRlb3V0IHsKLSAgICBmcm9tIHtiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2IoMjU1LCAyNTUsIDEyMCk7IH0KLSAgICB0byB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9
Ci19Ci0uY20tYnJlYWtwb2ludCB7Ci0gIGNvbG9yOiB3aGl0ZTsKLSAgcG9zaXRpb246IGFic29s
dXRlOwotICByaWdodDogM3B4OwotICBtYXJnaW46IDAgLThweCAwIC02cHggIWltcG9ydGFudDsK
LSAgYm9yZGVyLXdpZHRoOiAwIDhweCAwcHggMnB4ICFpbXBvcnRhbnQ7Ci0gIC13ZWJraXQtYm9y
ZGVyLWltYWdlOiB1cmwoSW1hZ2VzL2JyZWFrcG9pbnRCb3JkZXIucG5nKSAxIDE0IDEgMjsKLSAg
cGFkZGluZzogMCAwIDFweCAxMDBweDsKLX0KLS5jbS1icmVha3BvaW50LWRpc2FibGVkIHsKLSAg
b3BhY2l0eTogMC41OwotfQotCi0uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewotICBib3Jk
ZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7Ci0gIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owot
fQotCi0uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewotICBjb2xvcjogYmxhY2sgIWlt
cG9ydGFudDsKLX0KLQotLmNtLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwgewotICAtd2Via2l0LWJv
cmRlci1pbWFnZTogdXJsKEltYWdlcy9icmVha3BvaW50Q29uZGl0aW9uYWxCb3JkZXIucG5nKSAx
IDE0IDEgMjsKLX0KLQotLmNtLWV4ZWN1dGlvbi1saW5lIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZ2IoMTcxLCAxOTEsIDI1NCkgIWltcG9ydGFudDsKLSAgICBvdXRsaW5lOiAxcHggc29saWQg
cmdiKDY0LCAxMTUsIDI0NCk7Ci19Ci0KLS5jbS10b2tlbi1oaWdobGlnaHQgewotICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKLX0KLQotLmNtLXRva2VuLWhpZ2hsaWdodDpiZWZvcmUgewotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBncmF5OwotICAgIGJvcmRl
ci1yYWRpdXM6IDNweDsKLSAgICB0b3A6IDBweDsKLSAgICBib3R0b206IDBweDsKLSAgICBsZWZ0
OiAwcHg7Ci0gICAgcmlnaHQ6IDBweDsKLSAgICBjb250ZW50OiAiIjsKLX0KLQotLmNtLWxpbmUt
d2l0aC1zZWxlY3Rpb24gLmNtLWNvbHVtbi13aXRoLXNlbGVjdGlvbjpiZWZvcmUgewotICAgIGJv
cmRlcjogMHB4OwotfQotCi0uY20tcy13ZWItaW5zcGVjdG9yLWpzIHNwYW4uY20ta2V5d29yZCB7
Y29sb3I6IHJnYigxNzAsIDEzLCAxNDUpO30KLS5jbS1zLXdlYi1pbnNwZWN0b3ItanMgc3Bhbi5j
bS1udW1iZXIge2NvbG9yOiByZ2IoMjgsIDAsIDIwNyk7fQotLmNtLXMtd2ViLWluc3BlY3Rvci1q
cyBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiByZ2IoMCwgMTE2LCAwKTt9Ci0uY20tcy13ZWItaW5z
cGVjdG9yLWpzIHNwYW4uY20tc3RyaW5nIHtjb2xvcjogcmdiKDE5NiwgMjYsIDIyKTt9Ci0uY20t
cy13ZWItaW5zcGVjdG9yLWpzIHNwYW4uY20tc3RyaW5nLTIge2NvbG9yOiByZ2IoMTk2LCAyNiwg
MjIpO30KLQotLmNtLXMtd2ViLWluc3BlY3Rvci1jc3Mgc3Bhbi5jbS1rZXl3b3JkIHsgY29sb3I6
IHJnYig3LCAxNDQsIDE1NCk7fQotLmNtLXMtd2ViLWluc3BlY3Rvci1jc3Mgc3Bhbi5jbS1udW1i
ZXIge2NvbG9yOiByZ2IoNTAsIDAsIDI1NSk7fQotLmNtLXMtd2ViLWluc3BlY3Rvci1jc3Mgc3Bh
bi5jbS1jb21tZW50IHtjb2xvcjogcmdiKDAsIDExNiwgMCk7fQotLmNtLXMtd2ViLWluc3BlY3Rv
ci1jc3Mgc3Bhbi5jbS1tZXRhIHtjb2xvcjogcmdiKDIwMCwgMCwgMCk7fQotLmNtLXMtd2ViLWlu
c3BlY3Rvci1jc3Mgc3Bhbi5jbS1hdG9tIHtjb2xvcjogcmdiKDcsIDE0NCwgMTU0KTt9Ci0uY20t
cy13ZWItaW5zcGVjdG9yLWNzcyBzcGFuLmNtLXN0cmluZyB7Y29sb3I6IHJnYig3LCAxNDQsIDE1
NCk7fQotLmNtLXMtd2ViLWluc3BlY3Rvci1jc3Mgc3Bhbi5jbS1zdHJpbmctMiB7Y29sb3I6IHJn
Yig3LCAxNDQsIDE1NCk7fQotLmNtLXMtd2ViLWluc3BlY3Rvci1jc3Mgc3Bhbi5jbS1saW5rIHtj
b2xvcjogcmdiKDcsIDE0NCwgMTU0KTt9Ci0uY20tcy13ZWItaW5zcGVjdG9yLWNzcyBzcGFuLmNt
LXZhcmlhYmxlIHtjb2xvcjogcmdiKDIwMCwgMCwgMCk7fQotLmNtLXMtd2ViLWluc3BlY3Rvci1j
c3Mgc3Bhbi5jbS1wcm9wZXJ0eSB7Y29sb3I6IHJnYigyMDAsIDAsIDApO30KLQotLmNtLXMtd2Vi
LWluc3BlY3Rvci1odG1sIHNwYW4uY20tbWV0YSB7Y29sb3I6IHJnYigxOTIsIDE5MiwgMTkyKTt9
Ci0uY20tcy13ZWItaW5zcGVjdG9yLWh0bWwgc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogcmdiKDM1
LCAxMTAsIDM3KTt9Ci0uY20tcy13ZWItaW5zcGVjdG9yLWh0bWwgc3Bhbi5jbS1zdHJpbmcge2Nv
bG9yOiByZ2IoMjYsIDI2LCAxNjYpO30KLS5jbS1zLXdlYi1pbnNwZWN0b3ItaHRtbCBzcGFuLmNt
LXRhZyB7Y29sb3I6IHJnYigxMzYsIDE4LCAxMjgpO30KLS5jbS1zLXdlYi1pbnNwZWN0b3ItaHRt
bCBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6IHJnYigxNTMsIDY5LCAwKTt9Ci0uY20tcy13ZWIt
aW5zcGVjdG9yLWh0bWwgc3Bhbi5jbS1saW5rIHtjb2xvcjogIzAwZTt9Ci0KLS5Db2RlTWlycm9y
IC53ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJsZSB7Ci0gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBi
bGFjayAwcHggMnB4IDVweDsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDsKLSAgICAt
d2Via2l0LWJvcmRlci1maXQ6IGxpbmVzOwotICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICBmb250
LWZhbWlseTogTHVjaWRhIEdyYW5kZSwgc2Fucy1zZXJpZjsKLSAgICBmb250LXdlaWdodDogYm9s
ZDsKLSAgICBtYXJnaW46IDNweCAxMHB4OwotICAgIHBhZGRpbmc6IDFweCAycHggMDsKLSAgICB6
LWluZGV4OiA1OwotfQotCi0uQ29kZU1pcnJvciAud2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUg
aW1nIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAxcHg7Ci0gICAgbWFyZ2lu
LXJpZ2h0OiAycHg7Ci19Ci0KLS5Db2RlTWlycm9yIC53ZWJraXQtaHRtbC13YXJuaW5nLW1lc3Nh
Z2UgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMDAlLCA2MiUsIDQyJSk7Ci0gICAgYm9y
ZGVyOiAycHggc29saWQgcmdiKDEwMCUsIDUyJSwgMjElKTsKLX0KLQotLkNvZGVNaXJyb3IgLndl
YmtpdC1odG1sLWVycm9yLW1lc3NhZ2UgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMDAl
LCA0MiUsIDQyJSk7Ci0gICAgYm9yZGVyOiAycHggc29saWQgcmdiKDEwMCUsIDMxJSwgMzElKTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY29k
ZW1pcnJvci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVt
aXJyb3IuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTNhMWE5Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5j
c3MKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyogQkFTSUNTICovCi0KLS5Db2Rl
TWlycm9yIHsKLSAgLyogU2V0IGhlaWdodCwgd2lkdGgsIGJvcmRlcnMsIGFuZCBnbG9iYWwgZm9u
dCBwcm9wZXJ0aWVzIGhlcmUgKi8KLSAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKLSAgaGVpZ2h0
OiAzMDBweDsKLX0KLS5Db2RlTWlycm9yLXNjcm9sbCB7Ci0gIC8qIFNldCBzY3JvbGxpbmcgYmVo
YXZpb3VyIGhlcmUgKi8KLSAgb3ZlcmZsb3c6IGF1dG87Ci19Ci0KLS8qIFBBRERJTkcgKi8KLQot
LkNvZGVNaXJyb3ItbGluZXMgewotICBwYWRkaW5nOiA0cHggMDsgLyogVmVydGljYWwgcGFkZGlu
ZyBhcm91bmQgY29udGVudCAqLwotfQotLkNvZGVNaXJyb3IgcHJlIHsKLSAgcGFkZGluZzogMCA0
cHg7IC8qIEhvcml6b250YWwgcGFkZGluZyBvZiBjb250ZW50ICovCi19Ci0KLS5Db2RlTWlycm9y
LXNjcm9sbGJhci1maWxsZXIgewotICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxp
dHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KLX0KLQotLyogR1VUVEVS
ICovCi0KLS5Db2RlTWlycm9yLWd1dHRlcnMgewotICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAj
ZGRkOwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwotfQotLkNvZGVNaXJyb3ItbGluZW51
bWJlcnMge30KLS5Db2RlTWlycm9yLWxpbmVudW1iZXIgewotICBwYWRkaW5nOiAwIDNweCAwIDVw
eDsKLSAgbWluLXdpZHRoOiAyMHB4OwotICB0ZXh0LWFsaWduOiByaWdodDsKLSAgY29sb3I6ICM5
OTk7Ci19Ci0KLS8qIENVUlNPUiAqLwotCi0uQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJz
b3IgewotICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwotICB6LWluZGV4OiAzOwotfQot
LyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwotLkNvZGVNaXJy
b3IgZGl2LkNvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIHsKLSAgYm9yZGVyLWxlZnQ6IDFweCBz
b2xpZCBzaWx2ZXI7Ci19Ci0uQ29kZU1pcnJvci5jbS1rZXltYXAtZmF0LWN1cnNvciBkaXYuQ29k
ZU1pcnJvci1jdXJzb3IgewotICB3aWR0aDogYXV0bzsKLSAgYm9yZGVyOiAwOwotICBiYWNrZ3Jv
dW5kOiAjN2U3OwotICB6LWluZGV4OiAxOwotfQotLyogQ2FuIHN0eWxlIGN1cnNvciBkaWZmZXJl
bnQgaW4gb3ZlcndyaXRlIChub24taW5zZXJ0KSBtb2RlICovCi0uQ29kZU1pcnJvciBkaXYuQ29k
ZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUge30KLQotLyogREVGQVVMVCBUSEVN
RSAqLwotCi0uY20tcy1kZWZhdWx0IC5jbS1rZXl3b3JkIHtjb2xvcjogIzcwODt9Ci0uY20tcy1k
ZWZhdWx0IC5jbS1hdG9tIHtjb2xvcjogIzIxOTt9Ci0uY20tcy1kZWZhdWx0IC5jbS1udW1iZXIg
e2NvbG9yOiAjMTY0O30KLS5jbS1zLWRlZmF1bHQgLmNtLWRlZiB7Y29sb3I6ICMwMGY7fQotLmNt
LXMtZGVmYXVsdCAuY20tdmFyaWFibGUge2NvbG9yOiBibGFjazt9Ci0uY20tcy1kZWZhdWx0IC5j
bS12YXJpYWJsZS0yIHtjb2xvcjogIzA1YTt9Ci0uY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZS0z
IHtjb2xvcjogIzA4NTt9Ci0uY20tcy1kZWZhdWx0IC5jbS1wcm9wZXJ0eSB7Y29sb3I6IGJsYWNr
O30KLS5jbS1zLWRlZmF1bHQgLmNtLW9wZXJhdG9yIHtjb2xvcjogYmxhY2s7fQotLmNtLXMtZGVm
YXVsdCAuY20tY29tbWVudCB7Y29sb3I6ICNhNTA7fQotLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5n
IHtjb2xvcjogI2ExMTt9Ci0uY20tcy1kZWZhdWx0IC5jbS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7
fQotLmNtLXMtZGVmYXVsdCAuY20tbWV0YSB7Y29sb3I6ICM1NTU7fQotLmNtLXMtZGVmYXVsdCAu
Y20tZXJyb3Ige2NvbG9yOiAjZjAwO30KLS5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7Y29s
b3I6ICM1NTU7fQotLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7Y29sb3I6ICMzMGE7fQotLmNt
LXMtZGVmYXVsdCAuY20tYnJhY2tldCB7Y29sb3I6ICM5OTc7fQotLmNtLXMtZGVmYXVsdCAuY20t
dGFnIHtjb2xvcjogIzE3MDt9Ci0uY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUge2NvbG9yOiAj
MDBjO30KLS5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7Y29sb3I6IGJsdWU7fQotLmNtLXMtZGVm
YXVsdCAuY20tcXVvdGUge2NvbG9yOiAjMDkwO30KLS5jbS1zLWRlZmF1bHQgLmNtLWhyIHtjb2xv
cjogIzk5OTt9Ci0uY20tcy1kZWZhdWx0IC5jbS1saW5rIHtjb2xvcjogIzAwYzt9Ci0KLS5jbS1u
ZWdhdGl2ZSB7Y29sb3I6ICNkNDQ7fQotLmNtLXBvc2l0aXZlIHtjb2xvcjogIzI5Mjt9Ci0uY20t
aGVhZGVyLCAuY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9Ci0uY20tZW0ge2ZvbnQtc3R5
bGU6IGl0YWxpYzt9Ci0uY20tbGluayB7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQotCi0u
Y20taW52YWxpZGNoYXIge2NvbG9yOiAjZjAwO30KLQotZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2Rl
TWlycm9yLW1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICMwZjA7fQotZGl2LkNvZGVNaXJyb3Igc3Bh
bi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQotCi0vKiBTVE9Q
ICovCi0KLS8qIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBjb250YWlucyBzdHlsZXMgcmVsYXRlZCB0
byB0aGUgbWVjaGFuaWNzIG9mCi0gICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0
IHRvdWNoIHRoZW0uICovCi0KLS5Db2RlTWlycm9yIHsKLSAgbGluZS1oZWlnaHQ6IDE7Ci0gIHBv
c2l0aW9uOiByZWxhdGl2ZTsKLSAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgYmFja2dyb3VuZDogd2hp
dGU7Ci0gIGNvbG9yOiBibGFjazsKLX0KLQotLkNvZGVNaXJyb3Itc2Nyb2xsIHsKLSAgLyogMzBw
eCBpcyB0aGUgbWFnaWMgbWFyZ2luIHVzZWQgdG8gaGlkZSB0aGUgZWxlbWVudCdzIHJlYWwgc2Ny
b2xsYmFycyAqLwotICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciwgYW5k
IHRoZSBwYWRkaW5ncyBpbiAuQ29kZU1pcnJvci1zaXplciAqLwotICBtYXJnaW4tYm90dG9tOiAt
MzBweDsgbWFyZ2luLXJpZ2h0OiAtMzBweDsKLSAgcGFkZGluZy1ib3R0b206IDMwcHg7IHBhZGRp
bmctcmlnaHQ6IDMwcHg7Ci0gIGhlaWdodDogMTAwJTsKLSAgb3V0bGluZTogbm9uZTsgLyogUHJl
dmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwotICBwb3NpdGlv
bjogcmVsYXRpdmU7Ci19Ci0uQ29kZU1pcnJvci1zaXplciB7Ci0gIHBvc2l0aW9uOiByZWxhdGl2
ZTsKLX0KLQotLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSBy
ZWRyYXcgZHVyaW5nIHNjcm9sbGluZwotICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBl
bnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAotICAgZmxpY2tlcmluZyBhcnRpZmFjdHMu
ICovCi0uQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29k
ZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKLSAgcG9zaXRpb246IGFic29sdXRlOwotICB6LWlu
ZGV4OiA2OwotICBkaXNwbGF5OiBub25lOwotfQotLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7Ci0g
IHJpZ2h0OiAwOyB0b3A6IDA7Ci0gIG92ZXJmbG93LXg6IGhpZGRlbjsKLSAgb3ZlcmZsb3cteTog
c2Nyb2xsOwotfQotLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7Ci0gIGJvdHRvbTogMDsgbGVmdDog
MDsKLSAgb3ZlcmZsb3cteTogaGlkZGVuOwotICBvdmVyZmxvdy14OiBzY3JvbGw7Ci19Ci0uQ29k
ZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKLSAgcmlnaHQ6IDA7IGJvdHRvbTogMDsKLSAgei1p
bmRleDogNjsKLX0KLQotLkNvZGVNaXJyb3ItZ3V0dGVycyB7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0
ZTsgbGVmdDogMDsgdG9wOiAwOwotICBoZWlnaHQ6IDEwMCU7Ci0gIHBhZGRpbmctYm90dG9tOiAz
MHB4OwotICB6LWluZGV4OiAzOwotfQotLkNvZGVNaXJyb3ItZ3V0dGVyIHsKLSAgaGVpZ2h0OiAx
MDAlOwotICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gIC8qIEhhY2sgdG8gbWFrZSBJRTcgYmVo
YXZlICovCi0gICp6b29tOjE7Ci0gICpkaXNwbGF5OmlubGluZTsKLX0KLS5Db2RlTWlycm9yLWd1
dHRlci1lbHQgewotICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gIGN1cnNvcjogZGVmYXVsdDsKLSAg
ei1pbmRleDogNDsKLX0KLQotLkNvZGVNaXJyb3ItbGluZXMgewotICBjdXJzb3I6IHRleHQ7Ci19
Ci0uQ29kZU1pcnJvciBwcmUgewotICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0
IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCi0gIC1tb3otYm9yZGVyLXJhZGl1czogMDsg
LXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtby1ib3JkZXItcmFkaXVzOiAwOyBib3JkZXItcmFk
aXVzOiAwOwotICBib3JkZXItd2lkdGg6IDA7Ci0gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owot
ICBmb250LWZhbWlseTogaW5oZXJpdDsKLSAgZm9udC1zaXplOiBpbmhlcml0OwotICBtYXJnaW46
IDA7Ci0gIHdoaXRlLXNwYWNlOiBwcmU7Ci0gIHdvcmQtd3JhcDogbm9ybWFsOwotICBsaW5lLWhl
aWdodDogaW5oZXJpdDsKLSAgY29sb3I6IGluaGVyaXQ7Ci0gIHotaW5kZXg6IDI7Ci0gIHBvc2l0
aW9uOiByZWxhdGl2ZTsKLSAgb3ZlcmZsb3c6IHZpc2libGU7Ci19Ci0uQ29kZU1pcnJvci13cmFw
IHByZSB7Ci0gIHdvcmQtd3JhcDogYnJlYWstd29yZDsKLSAgd2hpdGUtc3BhY2U6IHByZS13cmFw
OwotICB3b3JkLWJyZWFrOiBub3JtYWw7Ci19Ci0uQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7
Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90
dG9tOiAwOwotICB6LWluZGV4OiAwOwotfQotCi0uQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKLSAg
cG9zaXRpb246IHJlbGF0aXZlOwotICB6LWluZGV4OiAyOwotICBvdmVyZmxvdzogYXV0bzsKLX0K
LQotLkNvZGVNaXJyb3Itd2lkZ2V0IHsKLSAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotfQotCi0u
Q29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLXNjcm9sbCB7Ci0gIG92ZXJmbG93LXg6IGhpZGRl
bjsKLX0KLQotLkNvZGVNaXJyb3ItbWVhc3VyZSB7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
d2lkdGg6IDEwMCU7IGhlaWdodDogMHB4OwotICBvdmVyZmxvdzogaGlkZGVuOwotICB2aXNpYmls
aXR5OiBoaWRkZW47Ci19Ci0uQ29kZU1pcnJvci1tZWFzdXJlIHByZSB7IHBvc2l0aW9uOiBzdGF0
aWM7IH0KLQotLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKLSAgcG9zaXRpb246
IGFic29sdXRlOwotICB2aXNpYmlsaXR5OiBoaWRkZW47Ci0gIGJvcmRlci1yaWdodDogbm9uZTsK
LSAgd2lkdGg6IDA7Ci19Ci0uQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNv
ciB7Ci0gIHZpc2liaWxpdHk6IHZpc2libGU7Ci19Ci0KLS5Db2RlTWlycm9yLXNlbGVjdGVkIHsg
YmFja2dyb3VuZDogI2Q5ZDlkOTsgfQotLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1z
ZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH0KLQotLmNtLXNlYXJjaGluZyB7Ci0gIGJh
Y2tncm91bmQ6ICNmZmE7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKLX0K
LQotLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRU
b3BzIG9uIHRoZSBzcGFucyAqLwotLkNvZGVNaXJyb3Igc3BhbiB7ICp2ZXJ0aWNhbC1hbGlnbjog
dGV4dC1ib3R0b207IH0KLQotQG1lZGlhIHByaW50IHsKLSAgLyogSGlkZSB0aGUgY3Vyc29yIHdo
ZW4gcHJpbnRpbmcgKi8KLSAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKLSAg
ICB2aXNpYmlsaXR5OiBoaWRkZW47Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvY20vY29kZW1pcnJvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2E0MGMwNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTA5ICswLDAg
QEAKLS8vIENvZGVNaXJyb3IgaXMgdGhlIG9ubHkgZ2xvYmFsIHZhciB3ZSBjbGFpbQotd2luZG93
LkNvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICAvLyBCUk9X
U0VSIFNOSUZGSU5HCi0KLSAgLy8gQ3J1ZGUsIGJ1dCBuZWNlc3NhcnkgdG8gaGFuZGxlIGEgbnVt
YmVyIG9mIGhhcmQtdG8tZmVhdHVyZS1kZXRlY3QKLSAgLy8gYnVncyBhbmQgYmVoYXZpb3IgZGlm
ZmVyZW5jZXMuCi0gIHZhciBnZWNrbyA9IC9nZWNrb1wvXGQvaS50ZXN0KG5hdmlnYXRvci51c2Vy
QWdlbnQpOwotICB2YXIgaWUgPSAvTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsK
LSAgdmFyIGllX2x0OCA9IGllICYmIChkb2N1bWVudC5kb2N1bWVudE1vZGUgPT0gbnVsbCB8fCBk
b2N1bWVudC5kb2N1bWVudE1vZGUgPCA4KTsKLSAgdmFyIGllX2x0OSA9IGllICYmIChkb2N1bWVu
dC5kb2N1bWVudE1vZGUgPT0gbnVsbCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPCA5KTsKLSAg
dmFyIHdlYmtpdCA9IC9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFy
IHF0d2Via2l0ID0gd2Via2l0ICYmIC9RdFwvXGQrXC5cZCsvLnRlc3QobmF2aWdhdG9yLnVzZXJB
Z2VudCk7Ci0gIHZhciBjaHJvbWUgPSAvQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2Vu
dCk7Ci0gIHZhciBvcGVyYSA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwot
ICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpOwot
ICB2YXIga2h0bWwgPSAvS0hUTUxcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFy
IG1hY19nZUxpb24gPSAvTWFjIE9TIFggMVxkXEQoWzctOV18XGRcZClcRC8udGVzdChuYXZpZ2F0
b3IudXNlckFnZW50KTsKLSAgdmFyIG1hY19nZU1vdW50YWluTGlvbiA9IC9NYWMgT1MgWCAxXGRc
RChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgcGhhbnRv
bSA9IC9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0KLSAgdmFyIGlvcyA9
IC9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvTW9iaWxlXC9cdysv
LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIC8vIFRoaXMgaXMgd29lZnVsbHkgaW5jb21w
bGV0ZS4gU3VnZ2VzdGlvbnMgZm9yIGFsdGVybmF0aXZlIG1ldGhvZHMgd2VsY29tZS4KLSAgdmFy
IG1vYmlsZSA9IGlvcyB8fCAvQW5kcm9pZHx3ZWJPU3xCbGFja0JlcnJ5fE9wZXJhIE1pbml8T3Bl
cmEgTW9iaXxJRU1vYmlsZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBtYWMg
PSBpb3MgfHwgL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwotICB2YXIgd2luZG93cyA9
IC93aW5kb3dzL2kudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwotCi0gIHZhciBvcGVyYV92ZXJz
aW9uID0gb3BlcmEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwu
XGQqKS8pOwotICBpZiAob3BlcmFfdmVyc2lvbikgb3BlcmFfdmVyc2lvbiA9IE51bWJlcihvcGVy
YV92ZXJzaW9uWzFdKTsKLSAgLy8gU29tZSBicm93c2VycyB1c2UgdGhlIHdyb25nIGV2ZW50IHBy
b3BlcnRpZXMgdG8gc2lnbmFsIGNtZC9jdHJsIG9uIE9TIFgKLSAgdmFyIGZsaXBDdHJsQ21kID0g
bWFjICYmIChxdHdlYmtpdCB8fCBvcGVyYSAmJiAob3BlcmFfdmVyc2lvbiA9PSBudWxsIHx8IG9w
ZXJhX3ZlcnNpb24gPCAxMi4xMSkpOwotICB2YXIgY2FwdHVyZU1pZGRsZUNsaWNrID0gZ2Vja28g
fHwgKGllICYmICFpZV9sdDkpOwotCi0gIC8vIE9wdGltaXplIHNvbWUgY29kZSB3aGVuIHRoZXNl
IGZlYXR1cmVzIGFyZSBub3QgdXNlZAotICB2YXIgc2F3UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBz
YXdDb2xsYXBzZWRTcGFucyA9IGZhbHNlOwotCi0gIC8vIENPTlNUUlVDVE9SCi0KLSAgZnVuY3Rp
b24gQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucykgewotICAgIGlmICghKHRoaXMgaW5zdGFuY2Vv
ZiBDb2RlTWlycm9yKSkgcmV0dXJuIG5ldyBDb2RlTWlycm9yKHBsYWNlLCBvcHRpb25zKTsKLQot
ICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotICAgIC8vIERldGVy
bWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRz
LgotICAgIGZvciAodmFyIG9wdCBpbiBkZWZhdWx0cykgaWYgKCFvcHRpb25zLmhhc093blByb3Bl
cnR5KG9wdCkgJiYgZGVmYXVsdHMuaGFzT3duUHJvcGVydHkob3B0KSkKLSAgICAgIG9wdGlvbnNb
b3B0XSA9IGRlZmF1bHRzW29wdF07Ci0gICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9wdGlv
bnMpOwotCi0gICAgdmFyIGRvY1N0YXJ0ID0gdHlwZW9mIG9wdGlvbnMudmFsdWUgPT0gInN0cmlu
ZyIgPyAwIDogb3B0aW9ucy52YWx1ZS5maXJzdDsKLSAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlz
cGxheSA9IG1ha2VEaXNwbGF5KHBsYWNlLCBkb2NTdGFydCk7Ci0gICAgZGlzcGxheS53cmFwcGVy
LkNvZGVNaXJyb3IgPSB0aGlzOwotICAgIHVwZGF0ZUd1dHRlcnModGhpcyk7Ci0gICAgaWYgKG9w
dGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIGZvY3VzSW5wdXQodGhpcyk7Ci0KLSAgICB0aGlz
LnN0YXRlID0ge2tleU1hcHM6IFtdLAotICAgICAgICAgICAgICAgICAgb3ZlcmxheXM6IFtdLAot
ICAgICAgICAgICAgICAgICAgbW9kZUdlbjogMCwKLSAgICAgICAgICAgICAgICAgIG92ZXJ3cml0
ZTogZmFsc2UsIGZvY3VzZWQ6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgc3VwcHJlc3NFZGl0
czogZmFsc2UsIHBhc3RlSW5jb21pbmc6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgZHJhZ2dp
bmdUZXh0OiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQo
KX07Ci0KLSAgICB0aGVtZUNoYW5nZWQodGhpcyk7Ci0gICAgaWYgKG9wdGlvbnMubGluZVdyYXBw
aW5nKQotICAgICAgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJv
ci13cmFwIjsKLQotICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlOwotICAgIGlmICh0eXBlb2Yg
ZG9jID09ICJzdHJpbmciKSBkb2MgPSBuZXcgRG9jKG9wdGlvbnMudmFsdWUsIG9wdGlvbnMubW9k
ZSk7Ci0gICAgb3BlcmF0aW9uKHRoaXMsIGF0dGFjaERvYykodGhpcywgZG9jKTsKLQotICAgIC8v
IE92ZXJyaWRlIG1hZ2ljIHRleHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1l
cyBkb2VzCi0gICAgLy8gb24gb3VyIGhpZGRlbiB0ZXh0YXJlYSBvbiByZWxvYWQKLSAgICBpZiAo
aWUpIHNldFRpbWVvdXQoYmluZChyZXNldElucHV0LCB0aGlzLCB0cnVlKSwgMjApOwotCi0gICAg
cmVnaXN0ZXJFdmVudEhhbmRsZXJzKHRoaXMpOwotICAgIC8vIElFIHRocm93cyB1bnNwZWNpZmll
ZCBlcnJvciBpbiBjZXJ0YWluIGNhc2VzLCB3aGVuCi0gICAgLy8gdHJ5aW5nIHRvIGFjY2VzcyBh
Y3RpdmVFbGVtZW50IGJlZm9yZSBvbmxvYWQKLSAgICB2YXIgaGFzRm9jdXM7IHRyeSB7IGhhc0Zv
Y3VzID0gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZGlzcGxheS5pbnB1dCk7IH0gY2F0Y2go
ZSkgeyB9Ci0gICAgaWYgKGhhc0ZvY3VzIHx8IChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxl
KSkgc2V0VGltZW91dChiaW5kKG9uRm9jdXMsIHRoaXMpLCAyMCk7Ci0gICAgZWxzZSBvbkJsdXIo
dGhpcyk7Ci0KLSAgICBvcGVyYXRpb24odGhpcywgZnVuY3Rpb24oKSB7Ci0gICAgICBmb3IgKHZh
ciBvcHQgaW4gb3B0aW9uSGFuZGxlcnMpCi0gICAgICAgIGlmIChvcHRpb25IYW5kbGVycy5wcm9w
ZXJ0eUlzRW51bWVyYWJsZShvcHQpKQotICAgICAgICAgIG9wdGlvbkhhbmRsZXJzW29wdF0odGhp
cywgb3B0aW9uc1tvcHRdLCBJbml0KTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdEhv
b2tzLmxlbmd0aDsgKytpKSBpbml0SG9va3NbaV0odGhpcyk7Ci0gICAgfSkoKTsKLSAgfQotCi0g
IC8vIERJU1BMQVkgQ09OU1RSVUNUT1IKLQotICBmdW5jdGlvbiBtYWtlRGlzcGxheShwbGFjZSwg
ZG9jU3RhcnQpIHsKLSAgICB2YXIgZCA9IHt9OwotCi0gICAgdmFyIGlucHV0ID0gZC5pbnB1dCA9
IGVsdCgidGV4dGFyZWEiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5n
OiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZTsiKTsKLSAgICBpZiAo
d2Via2l0KSBpbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAwcHgiOwotICAgIGVsc2UgaW5wdXQuc2V0
QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOwotICAgIC8vIGlmIGJvcmRlcjogMDsgLS0gaU9TIGZh
aWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KQotICAgIGlmIChpb3MpIGlucHV0LnN0
eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxhY2siOwotICAgIGlucHV0LnNldEF0dHJpYnV0ZSgi
YXV0b2NvcnJlY3QiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUi
LCAib2ZmIik7Ci0KLSAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKLSAgICBk
LmlucHV0RGl2ID0gZWx0KCJkaXYiLCBbaW5wdXRdLCBudWxsLCAib3ZlcmZsb3c6IGhpZGRlbjsg
cG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiKTsKLSAgICAvLyBU
aGUgYWN0dWFsIGZha2Ugc2Nyb2xsYmFycy4KLSAgICBkLnNjcm9sbGJhckggPSBlbHQoImRpdiIs
IFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJoZWlnaHQ6IDFweCIpXSwgIkNvZGVNaXJyb3ItaHNj
cm9sbGJhciIpOwotICAgIGQuc2Nyb2xsYmFyViA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVs
bCwgbnVsbCwgIndpZHRoOiAxcHgiKV0sICJDb2RlTWlycm9yLXZzY3JvbGxiYXIiKTsKLSAgICBk
LnNjcm9sbGJhckZpbGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3Itc2Nyb2xsYmFy
LWZpbGxlciIpOwotICAgIC8vIERJVnMgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGFuZCB0aGUg
YWN0dWFsIGNvZGUKLSAgICBkLmxpbmVEaXYgPSBlbHQoImRpdiIpOwotICAgIGQuc2VsZWN0aW9u
RGl2ID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4
OiAxIik7Ci0gICAgLy8gQmxpbmt5IGN1cnNvciwgYW5kIGVsZW1lbnQgdXNlZCB0byBlbnN1cmUg
Y3Vyc29yIGZpdHMgYXQgdGhlIGVuZCBvZiBhIGxpbmUKLSAgICBkLmN1cnNvciA9IGVsdCgiZGl2
IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIpOwotICAgIC8vIFNlY29uZGFyeSBjdXJz
b3IsIHNob3duIHdoZW4gb24gYSAnanVtcCcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dAotICAgIGQu
b3RoZXJDdXJzb3IgPSBlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IgQ29k
ZU1pcnJvci1zZWNvbmRhcnljdXJzb3IiKTsKLSAgICAvLyBVc2VkIHRvIG1lYXN1cmUgdGV4dCBz
aXplCi0gICAgZC5tZWFzdXJlID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1tZWFzdXJl
Iik7Ci0gICAgLy8gV3JhcHMgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4aXN0IGluc2lkZSB0
aGUgdmVydGljYWxseS1wYWRkZWQgY29vcmRpbmF0ZSBzeXN0ZW0KLSAgICBkLmxpbmVTcGFjZSA9
IGVsdCgiZGl2IiwgW2QubWVhc3VyZSwgZC5zZWxlY3Rpb25EaXYsIGQubGluZURpdiwgZC5jdXJz
b3IsIGQub3RoZXJDdXJzb3JdLAotICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsICJwb3Np
dGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKTsKLSAgICAvLyBNb3ZlZCBhcm91bmQgaXRz
IHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcKLSAgICBkLm1vdmVyID0gZWx0KCJkaXYiLCBb
ZWx0KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAiQ29kZU1pcnJvci1saW5lcyIpXSwgbnVsbCwgInBv
c2l0aW9uOiByZWxhdGl2ZSIpOwotICAgIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0
LCBjYXVzZXMgc2Nyb2xsaW5nCi0gICAgZC5zaXplciA9IGVsdCgiZGl2IiwgW2QubW92ZXJdLCAi
Q29kZU1pcnJvci1zaXplciIpOwotICAgIC8vIEQgaXMgbmVlZGVkIGJlY2F1c2UgYmVoYXZpb3Ig
b2YgZWx0cyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCBwYWRkaW5nIGlzIGluY29uc2lzdGVudCBh
Y3Jvc3MgYnJvd3NlcnMKLSAgICBkLmhlaWdodEZvcmNlciA9IGVsdCgiZGl2IiwgbnVsbCwgbnVs
bCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiICsgc2Nyb2xsZXJDdXRPZmYgKyAicHg7
IHdpZHRoOiAxcHg7Iik7Ci0gICAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnkK
LSAgICBkLmd1dHRlcnMgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlcnMiKTsK
LSAgICBkLmxpbmVHdXR0ZXIgPSBudWxsOwotICAgIC8vIEhlbHBlciBlbGVtZW50IHRvIHByb3Bl
cmx5IHNpemUgdGhlIGd1dHRlciBiYWNrZ3JvdW5kcwotICAgIHZhciBzY3JvbGxlcklubmVyID0g
ZWx0KCJkaXYiLCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sIG51bGwsICJw
b3NpdGlvbjogcmVsYXRpdmU7IG1pbi1oZWlnaHQ6IDEwMCUiKTsKLSAgICAvLyBQcm92aWRlcyBz
Y3JvbGxpbmcKLSAgICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbc2Nyb2xsZXJJbm5lcl0sICJD
b2RlTWlycm9yLXNjcm9sbCIpOwotICAgIGQuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRl
eCIsICItMSIpOwotICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMu
Ci0gICAgZC53cmFwcGVyID0gZWx0KCJkaXYiLCBbZC5pbnB1dERpdiwgZC5zY3JvbGxiYXJILCBk
LnNjcm9sbGJhclYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zY3JvbGxiYXJGaWxs
ZXIsIGQuc2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIpOwotICAgIC8vIFdvcmsgYXJvdW5kIElFNyB6
LWluZGV4IGJ1ZwotICAgIGlmIChpZV9sdDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0x
OyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH0KLSAgICBpZiAocGxhY2UuYXBw
ZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7IGVsc2UgcGxhY2UoZC53cmFw
cGVyKTsKLQotICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVlIGJsaW5raW5nIGN1cnNvciBv
biBNb2JpbGUgU2FmYXJpCi0gICAgaWYgKGlvcykgaW5wdXQuc3R5bGUud2lkdGggPSAiMHB4IjsK
LSAgICBpZiAoIXdlYmtpdCkgZC5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOwotICAgIC8vIE5l
ZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAotICAgIGlmIChraHRtbCkgeyBkLmlucHV0
RGl2LnN0eWxlLmhlaWdodCA9ICIxcHgiOyBkLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFi
c29sdXRlIjsgfQotICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhl
IHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KLSAgICBlbHNl
IGlmIChpZV9sdDgpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5XaWR0aCA9IGQuc2Nyb2xsYmFyVi5z
dHlsZS5taW5XaWR0aCA9ICIxOHB4IjsKLQotICAgIC8vIEN1cnJlbnQgdmlzaWJsZSByYW5nZSAo
bWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCi0gICAgZC52aWV3T2Zmc2V0ID0g
ZC5sYXN0U2l6ZUMgPSAwOwotICAgIGQuc2hvd2luZ0Zyb20gPSBkLnNob3dpbmdUbyA9IGRvY1N0
YXJ0OwotCi0gICAgLy8gVXNlZCB0byBvbmx5IHJlc2l6ZSB0aGUgbGluZSBudW1iZXIgZ3V0dGVy
IHdoZW4gbmVjZXNzYXJ5ICh3aGVuCi0gICAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBjcm9zc2Vz
IGEgYm91bmRhcnkgdGhhdCBtYWtlcyBpdHMgd2lkdGggY2hhbmdlKQotICAgIGQubGluZU51bVdp
ZHRoID0gZC5saW5lTnVtSW5uZXJXaWR0aCA9IGQubGluZU51bUNoYXJzID0gbnVsbDsKLSAgICAv
LyBTZWUgcmVhZElucHV0IGFuZCByZXNldElucHV0Ci0gICAgZC5wcmV2SW5wdXQgPSAiIjsKLSAg
ICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xsaW5nIHdpZGdldCBp
cyBhZGRlZC4gQXMKLSAgICAvLyBhbiBvcHRpbWl6YXRpb24sIHdpZGdldCBhbGlnbmluZyBpcyBz
a2lwcGVkIHdoZW4gZCBpcyBmYWxzZS4KLSAgICBkLmFsaWduV2lkZ2V0cyA9IGZhbHNlOwotICAg
IC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBjdXJyZW50bHkgZXhwZWN0IGlucHV0
IHRvIGFwcGVhcgotICAgIC8vIChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tleXByZXNzJyBvciAn
aW5wdXQnKSBhbmQgYXJlIHBvbGxpbmcKLSAgICAvLyBpbnRlbnNpdmVseS4KLSAgICBkLnBvbGxp
bmdGYXN0ID0gZmFsc2U7Ci0gICAgLy8gU2VsZi1yZXNldHRpbmcgdGltZW91dCBmb3IgdGhlIHBv
bGxlcgotICAgIGQucG9sbCA9IG5ldyBEZWxheWVkKCk7Ci0gICAgLy8gVHJ1ZSB3aGVuIGEgZHJh
ZyBmcm9tIHRoZSBlZGl0b3IgaXMgYWN0aXZlCi0gICAgZC5kcmFnZ2luZ1RleHQgPSBmYWxzZTsK
LQotICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gbnVsbDsKLSAg
ICBkLm1lYXN1cmVMaW5lQ2FjaGUgPSBbXTsKLSAgICBkLm1lYXN1cmVMaW5lQ2FjaGVQb3MgPSAw
OwotCi0gICAgLy8gVHJhY2tzIHdoZW4gcmVzZXRJbnB1dCBoYXMgcHVudGVkIHRvIGp1c3QgcHV0
dGluZyBhIHNob3J0Ci0gICAgLy8gc3RyaW5nIGluc3RlYWQgb2YgdGhlIChsYXJnZSkgc2VsZWN0
aW9uLgotICAgIGQuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZhbHNlOwotCi0gICAgLy8gVHJhY2tz
IHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFy
Ci0gICAgLy8gY2FuIGJlIGtlcHQgc3RhdGljIHdoZW4gc2Nyb2xsaW5nLgotICAgIGQubWF4TGlu
ZSA9IG51bGw7Ci0gICAgZC5tYXhMaW5lTGVuZ3RoID0gMDsKLSAgICBkLm1heExpbmVDaGFuZ2Vk
ID0gZmFsc2U7Ci0KLSAgICAvLyBVc2VkIGZvciBtZWFzdXJpbmcgd2hlZWwgc2Nyb2xsaW5nIGdy
YW51bGFyaXR5Ci0gICAgZC53aGVlbERYID0gZC53aGVlbERZID0gZC53aGVlbFN0YXJ0WCA9IGQu
d2hlZWxTdGFydFkgPSBudWxsOwotCi0gICAgcmV0dXJuIGQ7Ci0gIH0KLQotICAvLyBTVEFURSBV
UERBVEVTCi0KLSAgLy8gVXNlZCB0byBnZXQgdGhlIGVkaXRvciBpbnRvIGEgY29uc2lzdGVudCBz
dGF0ZSBhZ2FpbiB3aGVuIG9wdGlvbnMgY2hhbmdlLgotCi0gIGZ1bmN0aW9uIGxvYWRNb2RlKGNt
KSB7Ci0gICAgY20uZG9jLm1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY20ub3B0aW9ucywgY20u
ZG9jLm1vZGVPcHRpb24pOwotICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAg
IGlmIChsaW5lLnN0YXRlQWZ0ZXIpIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7Ci0gICAgICBpZiAo
bGluZS5zdHlsZXMpIGxpbmUuc3R5bGVzID0gbnVsbDsKLSAgICB9KTsKLSAgICBjbS5kb2MuZnJv
bnRpZXIgPSBjbS5kb2MuZmlyc3Q7Ci0gICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7Ci0gICAgY20u
c3RhdGUubW9kZUdlbisrOwotICAgIGlmIChjbS5jdXJPcCkgcmVnQ2hhbmdlKGNtKTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIHdyYXBwaW5nQ2hhbmdlZChjbSkgewotICAgIGlmIChjbS5vcHRpb25zLmxp
bmVXcmFwcGluZykgewotICAgICAgY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSArPSAiIENv
ZGVNaXJyb3Itd3JhcCI7Ci0gICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0g
IiI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBj
bS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCAi
Iik7Ci0gICAgICBjb21wdXRlTWF4TGVuZ3RoKGNtKTsKLSAgICB9Ci0gICAgZXN0aW1hdGVMaW5l
SGVpZ2h0cyhjbSk7Ci0gICAgcmVnQ2hhbmdlKGNtKTsKLSAgICBjbGVhckNhY2hlcyhjbSk7Ci0g
ICAgc2V0VGltZW91dChmdW5jdGlvbigpe3VwZGF0ZVNjcm9sbGJhcnMoY20uZGlzcGxheSwgY20u
ZG9jLmhlaWdodCk7fSwgMTAwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNt
KSB7Ci0gICAgdmFyIHRoID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KSwgd3JhcHBpbmcgPSBjbS5v
cHRpb25zLmxpbmVXcmFwcGluZzsKLSAgICB2YXIgcGVyTGluZSA9IHdyYXBwaW5nICYmIE1hdGgu
bWF4KDUsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoY20uZGlz
cGxheSkgLSAzKTsKLSAgICByZXR1cm4gZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxpbmVJ
c0hpZGRlbihjbS5kb2MsIGxpbmUpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGVsc2UgaWYg
KHdyYXBwaW5nKQotICAgICAgICByZXR1cm4gKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8g
cGVyTGluZSkgfHwgMSkgKiB0aDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHRoOwotICAg
IH07Ci0gIH0KLQotICBmdW5jdGlvbiBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKSB7Ci0gICAgdmFy
IGRvYyA9IGNtLmRvYywgZXN0ID0gZXN0aW1hdGVIZWlnaHQoY20pOwotICAgIGRvYy5pdGVyKGZ1
bmN0aW9uKGxpbmUpIHsKLSAgICAgIHZhciBlc3RIZWlnaHQgPSBlc3QobGluZSk7Ci0gICAgICBp
ZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGVzdEhl
aWdodCk7Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBrZXlNYXBDaGFuZ2VkKGNtKSB7Ci0g
ICAgdmFyIHN0eWxlID0ga2V5TWFwW2NtLm9wdGlvbnMua2V5TWFwXS5zdHlsZTsKLSAgICBjbS5k
aXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5y
ZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csICIiKSArCi0gICAgICAoc3R5bGUgPyAiIGNtLWtl
eW1hcC0iICsgc3R5bGUgOiAiIik7Ci0gIH0KLQotICBmdW5jdGlvbiB0aGVtZUNoYW5nZWQoY20p
IHsKLSAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVy
LmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCAiIikgKwotICAgICAgY20ub3B0aW9u
cy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIpOwotICAgIGNsZWFyQ2FjaGVz
KGNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGd1dHRlcnNDaGFuZ2VkKGNtKSB7Ci0gICAgdXBkYXRl
R3V0dGVycyhjbSk7Ci0gICAgcmVnQ2hhbmdlKGNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHVwZGF0
ZUd1dHRlcnMoY20pIHsKLSAgICB2YXIgZ3V0dGVycyA9IGNtLmRpc3BsYXkuZ3V0dGVycywgc3Bl
Y3MgPSBjbS5vcHRpb25zLmd1dHRlcnM7Ci0gICAgcmVtb3ZlQ2hpbGRyZW4oZ3V0dGVycyk7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGVjcy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIGd1
dHRlckNsYXNzID0gc3BlY3NbaV07Ci0gICAgICB2YXIgZ0VsdCA9IGd1dHRlcnMuYXBwZW5kQ2hp
bGQoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXIgIiArIGd1dHRlckNsYXNzKSk7
Ci0gICAgICBpZiAoZ3V0dGVyQ2xhc3MgPT0gIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKSB7Ci0g
ICAgICAgIGNtLmRpc3BsYXkubGluZUd1dHRlciA9IGdFbHQ7Ci0gICAgICAgIGdFbHQuc3R5bGUu
d2lkdGggPSAoY20uZGlzcGxheS5saW5lTnVtV2lkdGggfHwgMSkgKyAicHgiOwotICAgICAgfQot
ICAgIH0KLSAgICBndXR0ZXJzLnN0eWxlLmRpc3BsYXkgPSBpID8gIiIgOiAibm9uZSI7Ci0gIH0K
LQotICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGRvYywgbGluZSkgewotICAgIGlmIChsaW5lLmhlaWdo
dCA9PSAwKSByZXR1cm4gMDsKLSAgICB2YXIgbGVuID0gbGluZS50ZXh0Lmxlbmd0aCwgbWVyZ2Vk
LCBjdXIgPSBsaW5lOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChj
dXIpKSB7Ci0gICAgICB2YXIgZm91bmQgPSBtZXJnZWQuZmluZCgpOwotICAgICAgY3VyID0gZ2V0
TGluZShkb2MsIGZvdW5kLmZyb20ubGluZSk7Ci0gICAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAt
IGZvdW5kLnRvLmNoOwotICAgIH0KLSAgICBjdXIgPSBsaW5lOwotICAgIHdoaWxlIChtZXJnZWQg
PSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkgewotICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZp
bmQoKTsKLSAgICAgIGxlbiAtPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZC5mcm9tLmNoOwotICAg
ICAgY3VyID0gZ2V0TGluZShkb2MsIGZvdW5kLnRvLmxpbmUpOwotICAgICAgbGVuICs9IGN1ci50
ZXh0Lmxlbmd0aCAtIGZvdW5kLnRvLmNoOwotICAgIH0KLSAgICByZXR1cm4gbGVuOwotICB9Ci0K
LSAgZnVuY3Rpb24gY29tcHV0ZU1heExlbmd0aChjbSkgewotICAgIHZhciBkID0gY20uZGlzcGxh
eSwgZG9jID0gY20uZG9jOwotICAgIGQubWF4TGluZSA9IGdldExpbmUoZG9jLCBkb2MuZmlyc3Qp
OwotICAgIGQubWF4TGluZUxlbmd0aCA9IGxpbmVMZW5ndGgoZG9jLCBkLm1heExpbmUpOwotICAg
IGQubWF4TGluZUNoYW5nZWQgPSB0cnVlOwotICAgIGRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsK
LSAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGRvYywgbGluZSk7Ci0gICAgICBpZiAobGVuID4g
ZC5tYXhMaW5lTGVuZ3RoKSB7Ci0gICAgICAgIGQubWF4TGluZUxlbmd0aCA9IGxlbjsKLSAgICAg
ICAgZC5tYXhMaW5lID0gbGluZTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIE1ha2Ug
c3VyZSB0aGUgZ3V0dGVycyBvcHRpb25zIGNvbnRhaW5zIHRoZSBlbGVtZW50Ci0gIC8vICJDb2Rl
TWlycm9yLWxpbmVudW1iZXJzIiB3aGVuIHRoZSBsaW5lTnVtYmVycyBvcHRpb24gaXMgdHJ1ZS4K
LSAgZnVuY3Rpb24gc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9wdGlvbnMpIHsKLSAgICB2YXIg
Zm91bmQgPSBmYWxzZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMuZ3V0dGVycy5s
ZW5ndGg7ICsraSkgewotICAgICAgaWYgKG9wdGlvbnMuZ3V0dGVyc1tpXSA9PSAiQ29kZU1pcnJv
ci1saW5lbnVtYmVycyIpIHsKLSAgICAgICAgaWYgKG9wdGlvbnMubGluZU51bWJlcnMpIGZvdW5k
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBvcHRpb25zLmd1dHRlcnMuc3BsaWNlKGktLSwgMSk7Ci0g
ICAgICB9Ci0gICAgfQotICAgIGlmICghZm91bmQgJiYgb3B0aW9ucy5saW5lTnVtYmVycykKLSAg
ICAgIG9wdGlvbnMuZ3V0dGVycy5wdXNoKCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7Ci0gIH0K
LQotICAvLyBTQ1JPTExCQVJTCi0KLSAgLy8gUmUtc3luY2hyb25pemUgdGhlIGZha2Ugc2Nyb2xs
YmFycyB3aXRoIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKLSAgLy8gY29udGVudC4gT3B0aW9uYWxs
eSBmb3JjZSBhIHNjcm9sbFRvcC4KLSAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhkIC8qIGRp
c3BsYXkgKi8sIGRvY0hlaWdodCkgewotICAgIHZhciB0b3RhbEhlaWdodCA9IGRvY0hlaWdodCAr
IHBhZGRpbmdWZXJ0KGQpOwotICAgIGQuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gZC5oZWlnaHRG
b3JjZXIuc3R5bGUudG9wID0gdG90YWxIZWlnaHQgKyAicHgiOwotICAgIHZhciBzY3JvbGxIZWln
aHQgPSBNYXRoLm1heCh0b3RhbEhlaWdodCwgZC5zY3JvbGxlci5zY3JvbGxIZWlnaHQpOwotICAg
IHZhciBuZWVkc0ggPSBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoID4gZC5zY3JvbGxlci5jbGllbnRX
aWR0aDsKLSAgICB2YXIgbmVlZHNWID0gc2Nyb2xsSGVpZ2h0ID4gZC5zY3JvbGxlci5jbGllbnRI
ZWlnaHQ7Ci0gICAgaWYgKG5lZWRzVikgewotICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRpc3Bs
YXkgPSAiYmxvY2siOwotICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/
IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiIDogIjAiOwotICAgICAgZC5zY3JvbGxi
YXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0KLSAgICAgICAgKHNjcm9sbEhlaWdodCAtIGQu
c2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgZC5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCkgKyAicHgi
OwotICAgIH0gZWxzZSBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIGlmIChu
ZWVkc0gpIHsKLSAgICAgIGQuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAg
ICAgIGQuc2Nyb2xsYmFySC5zdHlsZS5yaWdodCA9IG5lZWRzViA/IHNjcm9sbGJhcldpZHRoKGQu
bWVhc3VyZSkgKyAicHgiIDogIjAiOwotICAgICAgZC5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5
bGUud2lkdGggPQotICAgICAgICAoZC5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGQuc2Nyb2xsZXIu
Y2xpZW50V2lkdGggKyBkLnNjcm9sbGJhckguY2xpZW50V2lkdGgpICsgInB4IjsKLSAgICB9IGVs
c2UgZC5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBpZiAobmVlZHNIICYmIG5l
ZWRzVikgewotICAgICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7
Ci0gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBkLnNjcm9sbGJhckZpbGxl
ci5zdHlsZS53aWR0aCA9IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiOwotICAgIH0g
ZWxzZSBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0KLSAgICBpZiAobWFj
X2dlTGlvbiAmJiBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpID09PSAwKQotICAgICAgZC5zY3Jv
bGxiYXJWLnN0eWxlLm1pbldpZHRoID0gZC5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodCA9IG1h
Y19nZU1vdW50YWluTGlvbiA/ICIxOHB4IiA6ICIxMnB4IjsKLSAgfQotCi0gIGZ1bmN0aW9uIHZp
c2libGVMaW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdQb3J0KSB7Ci0gICAgdmFyIHRvcCA9IGRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsVG9wLCBoZWlnaHQgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVp
Z2h0OwotICAgIGlmICh0eXBlb2Ygdmlld1BvcnQgPT0gIm51bWJlciIpIHRvcCA9IHZpZXdQb3J0
OwotICAgIGVsc2UgaWYgKHZpZXdQb3J0KSB7dG9wID0gdmlld1BvcnQudG9wOyBoZWlnaHQgPSB2
aWV3UG9ydC5ib3R0b20gLSB2aWV3UG9ydC50b3A7fQotICAgIHRvcCA9IE1hdGguZmxvb3IodG9w
IC0gcGFkZGluZ1RvcChkaXNwbGF5KSk7Ci0gICAgdmFyIGJvdHRvbSA9IE1hdGguY2VpbCh0b3Ag
KyBoZWlnaHQpOwotICAgIHJldHVybiB7ZnJvbTogbGluZUF0SGVpZ2h0KGRvYywgdG9wKSwgdG86
IGxpbmVBdEhlaWdodChkb2MsIGJvdHRvbSl9OwotICB9Ci0KLSAgLy8gTElORSBOVU1CRVJTCi0K
LSAgZnVuY3Rpb24gYWxpZ25Ib3Jpem9udGFsbHkoY20pIHsKLSAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXk7Ci0gICAgaWYgKCFkaXNwbGF5LmFsaWduV2lkZ2V0cyAmJiAoIWRpc3BsYXkuZ3V0
dGVycy5maXJzdENoaWxkIHx8ICFjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSkgcmV0dXJuOwotICAg
IHZhciBjb21wID0gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgLSBkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbExlZnQgKyBjbS5kb2Muc2Nyb2xsTGVmdDsKLSAgICB2YXIgZ3V0dGVyVyA9IGRp
c3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwgbCA9IGNvbXAgKyAicHgiOwotICAgIGZvciAodmFy
IG4gPSBkaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcpIGlm
IChuLmFsaWduYWJsZSkgewotICAgICAgZm9yICh2YXIgaSA9IDAsIGEgPSBuLmFsaWduYWJsZTsg
aSA8IGEubGVuZ3RoOyArK2kpIGFbaV0uc3R5bGUubGVmdCA9IGw7Ci0gICAgfQotICAgIGlmIChj
bS5vcHRpb25zLmZpeGVkR3V0dGVyKQotICAgICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQg
PSAoY29tcCArIGd1dHRlclcpICsgInB4IjsKLSAgfQotCi0gIGZ1bmN0aW9uIG1heWJlVXBkYXRl
TGluZU51bWJlcldpZHRoKGNtKSB7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYywgbGFzdCA9IGxpbmVOdW1iZXJGb3Io
Y20ub3B0aW9ucywgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSwgZGlzcGxheSA9IGNtLmRpc3Bs
YXk7Ci0gICAgaWYgKGxhc3QubGVuZ3RoICE9IGRpc3BsYXkubGluZU51bUNoYXJzKSB7Ci0gICAg
ICB2YXIgdGVzdCA9IGRpc3BsYXkubWVhc3VyZS5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtlbHQo
ImRpdiIsIGxhc3QpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKTsK
LSAgICAgIHZhciBpbm5lclcgPSB0ZXN0LmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsIHBhZGRpbmcg
PSB0ZXN0Lm9mZnNldFdpZHRoIC0gaW5uZXJXOwotICAgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0
eWxlLndpZHRoID0gIiI7Ci0gICAgICBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoID0gTWF0aC5t
YXgoaW5uZXJXLCBkaXNwbGF5LmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGggLSBwYWRkaW5nKTsKLSAg
ICAgIGRpc3BsYXkubGluZU51bVdpZHRoID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArIHBh
ZGRpbmc7Ci0gICAgICBkaXNwbGF5LmxpbmVOdW1DaGFycyA9IGRpc3BsYXkubGluZU51bUlubmVy
V2lkdGggPyBsYXN0Lmxlbmd0aCA6IC0xOwotICAgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0eWxl
LndpZHRoID0gZGlzcGxheS5saW5lTnVtV2lkdGggKyAicHgiOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGxpbmVOdW1iZXJG
b3Iob3B0aW9ucywgaSkgewotICAgIHJldHVybiBTdHJpbmcob3B0aW9ucy5saW5lTnVtYmVyRm9y
bWF0dGVyKGkgKyBvcHRpb25zLmZpcnN0TGluZU51bWJlcikpOwotICB9Ci0gIGZ1bmN0aW9uIGNv
bXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHsKLSAgICByZXR1cm4gZ2V0UmVjdChkaXNwbGF5
LnNjcm9sbGVyKS5sZWZ0IC0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKS5sZWZ0OwotICB9Ci0KLSAg
Ly8gRElTUExBWSBEUkFXSU5HCi0KLSAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheShjbSwgY2hhbmdl
cywgdmlld1BvcnQpIHsKLSAgICB2YXIgb2xkRnJvbSA9IGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20s
IG9sZFRvID0gY20uZGlzcGxheS5zaG93aW5nVG87Ci0gICAgdmFyIHVwZGF0ZWQgPSB1cGRhdGVE
aXNwbGF5SW5uZXIoY20sIGNoYW5nZXMsIHZpZXdQb3J0KTsKLSAgICBpZiAodXBkYXRlZCkgewot
ICAgICAgc2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7Ci0gICAgICBpZiAoY20uZGlzcGxh
eS5zaG93aW5nRnJvbSAhPSBvbGRGcm9tIHx8IGNtLmRpc3BsYXkuc2hvd2luZ1RvICE9IG9sZFRv
KQotICAgICAgICBzaWduYWxMYXRlcihjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3Bs
YXkuc2hvd2luZ0Zyb20sIGNtLmRpc3BsYXkuc2hvd2luZ1RvKTsKLSAgICB9Ci0gICAgdXBkYXRl
U2VsZWN0aW9uKGNtKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLmRpc3BsYXksIGNtLmRvYy5o
ZWlnaHQpOwotCi0gICAgcmV0dXJuIHVwZGF0ZWQ7Ci0gIH0KLQotICAvLyBVc2VzIGEgc2V0IG9m
IGNoYW5nZXMgcGx1cyB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gdG8KLSAgLy8gZGV0ZXJt
aW5lIHdoaWNoIERPTSB1cGRhdGVzIGhhdmUgdG8gYmUgbWFkZSwgYW5kIG1ha2VzIHRoZQotICAv
LyB1cGRhdGVzLgotICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SW5uZXIoY20sIGNoYW5nZXMsIHZp
ZXdQb3J0KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7Ci0g
ICAgaWYgKCFkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgpIHsKLSAgICAgIGRpc3BsYXkuc2hv
d2luZ0Zyb20gPSBkaXNwbGF5LnNob3dpbmdUbyA9IGRvYy5maXJzdDsKLSAgICAgIGRpc3BsYXku
dmlld09mZnNldCA9IDA7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0ZSB0
aGUgbmV3IHZpc2libGUgd2luZG93Ci0gICAgLy8gSWYgc2Nyb2xsVG9wIGlzIHNwZWNpZmllZCwg
dXNlIHRoYXQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxpbmVzCi0gICAgLy8gdG8gcmVuZGVyIGluc3Rl
YWQgb2YgdGhlIGN1cnJlbnQgc2Nyb2xsYmFyIHBvc2l0aW9uLgotICAgIHZhciB2aXNpYmxlID0g
dmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYywgdmlld1BvcnQpOwotICAgIC8vIEJhaWwgb3V0IGlm
IHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2Vk
LgotICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA9PSAwICYmCi0gICAgICAgIHZpc2libGUuZnJvbSA+
IGRpc3BsYXkuc2hvd2luZ0Zyb20gJiYgdmlzaWJsZS50byA8IGRpc3BsYXkuc2hvd2luZ1RvKQot
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSkK
LSAgICAgIGNoYW5nZXMgPSBbe2Zyb206IGRvYy5maXJzdCwgdG86IGRvYy5maXJzdCArIGRvYy5z
aXplfV07Ci0gICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkxlZnQg
PSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHgiOwotICAgIGRpc3BsYXkuc2Nyb2xs
YmFySC5zdHlsZS5sZWZ0ID0gY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcgOiAiMCI7
Ci0KLSAgICAvLyBVc2VkIHRvIGRldGVybWluZSB3aGljaCBsaW5lcyBuZWVkIHRoZWlyIGxpbmUg
bnVtYmVycyB1cGRhdGVkCi0gICAgdmFyIHBvc2l0aW9uc0NoYW5nZWRGcm9tID0gSW5maW5pdHk7
Ci0gICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMpCi0gICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNoYW5nZXMubGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChjaGFuZ2VzW2ldLmRpZmYpIHsg
cG9zaXRpb25zQ2hhbmdlZEZyb20gPSBjaGFuZ2VzW2ldLmZyb207IGJyZWFrOyB9Ci0KLSAgICB2
YXIgZW5kID0gZG9jLmZpcnN0ICsgZG9jLnNpemU7Ci0gICAgdmFyIGZyb20gPSBNYXRoLm1heCh2
aXNpYmxlLmZyb20gLSBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3QpOwotICAg
IHZhciB0byA9IE1hdGgubWluKGVuZCwgdmlzaWJsZS50byArIGNtLm9wdGlvbnMudmlld3BvcnRN
YXJnaW4pOwotICAgIGlmIChkaXNwbGF5LnNob3dpbmdGcm9tIDwgZnJvbSAmJiBmcm9tIC0gZGlz
cGxheS5zaG93aW5nRnJvbSA8IDIwKSBmcm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0LCBkaXNwbGF5
LnNob3dpbmdGcm9tKTsKLSAgICBpZiAoZGlzcGxheS5zaG93aW5nVG8gPiB0byAmJiBkaXNwbGF5
LnNob3dpbmdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5taW4oZW5kLCBkaXNwbGF5LnNob3dpbmdU
byk7Ci0gICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zKSB7Ci0gICAgICBmcm9tID0gbGluZU5vKHZp
c3VhbExpbmUoZG9jLCBnZXRMaW5lKGRvYywgZnJvbSkpKTsKLSAgICAgIHdoaWxlICh0byA8IGVu
ZCAmJiBsaW5lSXNIaWRkZW4oZG9jLCBnZXRMaW5lKGRvYywgdG8pKSkgKyt0bzsKLSAgICB9Ci0K
LSAgICAvLyBDcmVhdGUgYSByYW5nZSBvZiB0aGVvcmV0aWNhbGx5IGludGFjdCBsaW5lcywgYW5k
IHB1bmNoIGhvbGVzCi0gICAgLy8gaW4gdGhhdCB1c2luZyB0aGUgY2hhbmdlIGluZm8uCi0gICAg
dmFyIGludGFjdCA9IFt7ZnJvbTogTWF0aC5tYXgoZGlzcGxheS5zaG93aW5nRnJvbSwgZG9jLmZp
cnN0KSwKLSAgICAgICAgICAgICAgICAgICB0bzogTWF0aC5taW4oZGlzcGxheS5zaG93aW5nVG8s
IGVuZCl9XTsKLSAgICBpZiAoaW50YWN0WzBdLmZyb20gPj0gaW50YWN0WzBdLnRvKSBpbnRhY3Qg
PSBbXTsKLSAgICBlbHNlIGludGFjdCA9IGNvbXB1dGVJbnRhY3QoaW50YWN0LCBjaGFuZ2VzKTsK
LSAgICAvLyBXaGVuIG1lcmdlZCBsaW5lcyBhcmUgcHJlc2VudCwgd2UgbWlnaHQgaGF2ZSB0byBy
ZWR1Y2UgdGhlCi0gICAgLy8gaW50YWN0IHJhbmdlcyBiZWNhdXNlIGNoYW5nZXMgaW4gY29udGlu
dWVkIGZyYWdtZW50cyBvZiB0aGUKLSAgICAvLyBpbnRhY3QgbGluZXMgZG8gcmVxdWlyZSB0aGUg
bGluZXMgdG8gYmUgcmVkcmF3bi4KLSAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMpCi0gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGludGFjdC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgcmFu
Z2UgPSBpbnRhY3RbaV0sIG1lcmdlZDsKLSAgICAgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNl
ZFNwYW5BdEVuZChnZXRMaW5lKGRvYywgcmFuZ2UudG8gLSAxKSkpIHsKLSAgICAgICAgICB2YXIg
bmV3VG8gPSBtZXJnZWQuZmluZCgpLmZyb20ubGluZTsKLSAgICAgICAgICBpZiAobmV3VG8gPiBy
YW5nZS5mcm9tKSByYW5nZS50byA9IG5ld1RvOwotICAgICAgICAgIGVsc2UgeyBpbnRhY3Quc3Bs
aWNlKGktLSwgMSk7IGJyZWFrOyB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIC8vIENsaXAg
b2ZmIHRoZSBwYXJ0cyB0aGF0IHdvbid0IGJlIHZpc2libGUKLSAgICB2YXIgaW50YWN0TGluZXMg
PSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7Ci0gICAg
ICB2YXIgcmFuZ2UgPSBpbnRhY3RbaV07Ci0gICAgICBpZiAocmFuZ2UuZnJvbSA8IGZyb20pIHJh
bmdlLmZyb20gPSBmcm9tOwotICAgICAgaWYgKHJhbmdlLnRvID4gdG8pIHJhbmdlLnRvID0gdG87
Ci0gICAgICBpZiAocmFuZ2UuZnJvbSA+PSByYW5nZS50bykgaW50YWN0LnNwbGljZShpLS0sIDEp
OwotICAgICAgZWxzZSBpbnRhY3RMaW5lcyArPSByYW5nZS50byAtIHJhbmdlLmZyb207Ci0gICAg
fQotICAgIGlmIChpbnRhY3RMaW5lcyA9PSB0byAtIGZyb20gJiYgZnJvbSA9PSBkaXNwbGF5LnNo
b3dpbmdGcm9tICYmIHRvID09IGRpc3BsYXkuc2hvd2luZ1RvKSB7Ci0gICAgICB1cGRhdGVWaWV3
T2Zmc2V0KGNtKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50YWN0LnNvcnQoZnVuY3Rp
b24oYSwgYikge3JldHVybiBhLmZyb20gLSBiLmZyb207fSk7Ci0KLSAgICB2YXIgZm9jdXNlZCA9
IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Ci0gICAgaWYgKGludGFjdExpbmVzIDwgKHRvIC0gZnJv
bSkgKiAuNykgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgcGF0
Y2hEaXNwbGF5KGNtLCBmcm9tLCB0bywgaW50YWN0LCBwb3NpdGlvbnNDaGFuZ2VkRnJvbSk7Ci0g
ICAgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBpZiAoZG9jdW1lbnQu
YWN0aXZlRWxlbWVudCAhPSBmb2N1c2VkICYmIGZvY3VzZWQub2Zmc2V0SGVpZ2h0KSBmb2N1c2Vk
LmZvY3VzKCk7Ci0KLSAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAhPSBkaXNwbGF5LnNob3dpbmdG
cm9tIHx8IHRvICE9IGRpc3BsYXkuc2hvd2luZ1RvIHx8Ci0gICAgICBkaXNwbGF5Lmxhc3RTaXpl
QyAhPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OwotICAgIC8vIFRoaXMgaXMganVzdCBh
IGJvZ3VzIGZvcm11bGEgdGhhdCBkZXRlY3RzIHdoZW4gdGhlIGVkaXRvciBpcwotICAgIC8vIHJl
c2l6ZWQgb3IgdGhlIGZvbnQgc2l6ZSBjaGFuZ2VzLgotICAgIGlmIChkaWZmZXJlbnQpIGRpc3Bs
YXkubGFzdFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICBkaXNwbGF5
LnNob3dpbmdGcm9tID0gZnJvbTsgZGlzcGxheS5zaG93aW5nVG8gPSB0bzsKLSAgICBzdGFydFdv
cmtlcihjbSwgMTAwKTsKLQotICAgIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5saW5lRGl2Lm9m
ZnNldFRvcDsKLSAgICBmb3IgKHZhciBub2RlID0gZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQs
IGhlaWdodDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIGlmIChub2RlLmxpbmVPYmop
IHsKLSAgICAgIGlmIChpZV9sdDgpIHsKLSAgICAgICAgdmFyIGJvdCA9IG5vZGUub2Zmc2V0VG9w
ICsgbm9kZS5vZmZzZXRIZWlnaHQ7Ci0gICAgICAgIGhlaWdodCA9IGJvdCAtIHByZXZCb3R0b207
Ci0gICAgICAgIHByZXZCb3R0b20gPSBib3Q7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIg
Ym94ID0gZ2V0UmVjdChub2RlKTsKLSAgICAgICAgaGVpZ2h0ID0gYm94LmJvdHRvbSAtIGJveC50
b3A7Ci0gICAgICB9Ci0gICAgICB2YXIgZGlmZiA9IG5vZGUubGluZU9iai5oZWlnaHQgLSBoZWln
aHQ7Ci0gICAgICBpZiAoaGVpZ2h0IDwgMikgaGVpZ2h0ID0gdGV4dEhlaWdodChkaXNwbGF5KTsK
LSAgICAgIGlmIChkaWZmID4gLjAwMSB8fCBkaWZmIDwgLS4wMDEpIHsKLSAgICAgICAgdXBkYXRl
TGluZUhlaWdodChub2RlLmxpbmVPYmosIGhlaWdodCk7Ci0gICAgICAgIHZhciB3aWRnZXRzID0g
bm9kZS5saW5lT2JqLndpZGdldHM7Ci0gICAgICAgIGlmICh3aWRnZXRzKSBmb3IgKHZhciBpID0g
MDsgaSA8IHdpZGdldHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgd2lkZ2V0c1tpXS5oZWlnaHQg
PSB3aWRnZXRzW2ldLm5vZGUub2Zmc2V0SGVpZ2h0OwotICAgICAgfQotICAgIH0KLSAgICB1cGRh
dGVWaWV3T2Zmc2V0KGNtKTsKLQotICAgIGlmICh2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2
aWV3UG9ydCkudG8gPiB0bykKLSAgICAgIHVwZGF0ZURpc3BsYXlJbm5lcihjbSwgW10sIHZpZXdQ
b3J0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHVwZGF0ZVZpZXdPZmZz
ZXQoY20pIHsKLSAgICB2YXIgb2ZmID0gY20uZGlzcGxheS52aWV3T2Zmc2V0ID0gaGVpZ2h0QXRM
aW5lKGNtLCBnZXRMaW5lKGNtLmRvYywgY20uZGlzcGxheS5zaG93aW5nRnJvbSkpOwotICAgIC8v
IFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVudCB2aXJ0dWFs
IHNjcm9sbCBwb3NpdGlvbgotICAgIGNtLmRpc3BsYXkubW92ZXIuc3R5bGUudG9wID0gb2ZmICsg
InB4IjsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbXB1dGVJbnRhY3QoaW50YWN0LCBjaGFuZ2VzKSB7
Ci0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGFuZ2VzLmxlbmd0aCB8fCAwOyBpIDwgbDsgKytp
KSB7Ci0gICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXSwgaW50YWN0MiA9IFtdLCBkaWZmID0g
Y2hhbmdlLmRpZmYgfHwgMDsKLSAgICAgIGZvciAodmFyIGogPSAwLCBsMiA9IGludGFjdC5sZW5n
dGg7IGogPCBsMjsgKytqKSB7Ci0gICAgICAgIHZhciByYW5nZSA9IGludGFjdFtqXTsKLSAgICAg
ICAgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tICYmIGNoYW5nZS5kaWZmKSB7Ci0gICAgICAg
ICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tICsgZGlmZiwgdG86IHJhbmdlLnRvICsg
ZGlmZn0pOwotICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tIHx8IGNo
YW5nZS5mcm9tID49IHJhbmdlLnRvKSB7Ci0gICAgICAgICAgaW50YWN0Mi5wdXNoKHJhbmdlKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoY2hhbmdlLmZyb20gPiByYW5nZS5mcm9t
KQotICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tLCB0bzogY2hhbmdl
LmZyb219KTsKLSAgICAgICAgICBpZiAoY2hhbmdlLnRvIDwgcmFuZ2UudG8pCi0gICAgICAgICAg
ICBpbnRhY3QyLnB1c2goe2Zyb206IGNoYW5nZS50byArIGRpZmYsIHRvOiByYW5nZS50byArIGRp
ZmZ9KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaW50YWN0ID0gaW50YWN0MjsKLSAgICB9
Ci0gICAgcmV0dXJuIGludGFjdDsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldERpbWVuc2lvbnMoY20p
IHsKLSAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGxlZnQgPSB7fSwgd2lkdGggPSB7fTsKLSAgICBm
b3IgKHZhciBuID0gZC5ndXR0ZXJzLmZpcnN0Q2hpbGQsIGkgPSAwOyBuOyBuID0gbi5uZXh0U2li
bGluZywgKytpKSB7Ci0gICAgICBsZWZ0W2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNl
dExlZnQ7Ci0gICAgICB3aWR0aFtjbS5vcHRpb25zLmd1dHRlcnNbaV1dID0gbi5vZmZzZXRXaWR0
aDsKLSAgICB9Ci0gICAgcmV0dXJuIHtmaXhlZFBvczogY29tcGVuc2F0ZUZvckhTY3JvbGwoZCks
Ci0gICAgICAgICAgICBndXR0ZXJUb3RhbFdpZHRoOiBkLmd1dHRlcnMub2Zmc2V0V2lkdGgsCi0g
ICAgICAgICAgICBndXR0ZXJMZWZ0OiBsZWZ0LAotICAgICAgICAgICAgZ3V0dGVyV2lkdGg6IHdp
ZHRoLAotICAgICAgICAgICAgd3JhcHBlcldpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGh9Owot
ICB9Ci0KLSAgZnVuY3Rpb24gcGF0Y2hEaXNwbGF5KGNtLCBmcm9tLCB0bywgaW50YWN0LCB1cGRh
dGVOdW1iZXJzRnJvbSkgewotICAgIHZhciBkaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7Ci0gICAg
dmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBsaW5lTnVtYmVycyA9IGNtLm9wdGlvbnMubGluZU51
bWJlcnM7Ci0gICAgaWYgKCFpbnRhY3QubGVuZ3RoICYmICghd2Via2l0IHx8ICFjbS5kaXNwbGF5
LmN1cnJlbnRXaGVlbFRhcmdldCkpCi0gICAgICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LmxpbmVE
aXYpOwotICAgIHZhciBjb250YWluZXIgPSBkaXNwbGF5LmxpbmVEaXYsIGN1ciA9IGNvbnRhaW5l
ci5maXJzdENoaWxkOwotCi0gICAgZnVuY3Rpb24gcm0obm9kZSkgewotICAgICAgdmFyIG5leHQg
PSBub2RlLm5leHRTaWJsaW5nOwotICAgICAgaWYgKHdlYmtpdCAmJiBtYWMgJiYgY20uZGlzcGxh
eS5jdXJyZW50V2hlZWxUYXJnZXQgPT0gbm9kZSkgewotICAgICAgICBub2RlLnN0eWxlLmRpc3Bs
YXkgPSAibm9uZSI7Ci0gICAgICAgIG5vZGUubGluZU9iaiA9IG51bGw7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gbmV4dDsKLSAgICB9Ci0KLSAgICB2YXIgbmV4dEludGFjdCA9IGludGFjdC5z
aGlmdCgpLCBsaW5lTiA9IGZyb207Ci0gICAgY20uZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9u
KGxpbmUpIHsKLSAgICAgIGlmIChuZXh0SW50YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gbGluZU4p
IG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKTsKLSAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20u
ZG9jLCBsaW5lKSkgewotICAgICAgICBpZiAobGluZS5oZWlnaHQgIT0gMCkgdXBkYXRlTGluZUhl
aWdodChsaW5lLCAwKTsKLSAgICAgICAgaWYgKGxpbmUud2lkZ2V0cyAmJiBjdXIucHJldmlvdXNT
aWJsaW5nKSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7ICsraSkKLSAg
ICAgICAgICBpZiAobGluZS53aWRnZXRzW2ldLnNob3dJZkhpZGRlbikgewotICAgICAgICAgICAg
dmFyIHByZXYgPSBjdXIucHJldmlvdXNTaWJsaW5nOwotICAgICAgICAgICAgaWYgKC9wcmUvaS50
ZXN0KHByZXYubm9kZU5hbWUpKSB7Ci0gICAgICAgICAgICAgIHZhciB3cmFwID0gZWx0KCJkaXYi
LCBudWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIik7Ci0gICAgICAgICAgICAgIHByZXYu
cGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod3JhcCwgcHJldik7Ci0gICAgICAgICAgICAgIHdyYXAu
YXBwZW5kQ2hpbGQocHJldik7Ci0gICAgICAgICAgICAgIHByZXYgPSB3cmFwOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdmFyIHdub2RlID0gcHJldi5hcHBlbmRDaGlsZChlbHQoImRpdiIs
IFtsaW5lLndpZGdldHNbaV0ubm9kZV0sICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7Ci0gICAg
ICAgICAgICBwb3NpdGlvbkxpbmVXaWRnZXQobGluZS53aWRnZXRzW2ldLCB3bm9kZSwgcHJldiwg
ZGltcyk7Ci0gICAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChuZXh0SW50YWN0ICYmIG5leHRJ
bnRhY3QuZnJvbSA8PSBsaW5lTiAmJiBuZXh0SW50YWN0LnRvID4gbGluZU4pIHsKLSAgICAgICAg
Ly8gVGhpcyBsaW5lIGlzIGludGFjdC4gU2tpcCB0byB0aGUgYWN0dWFsIG5vZGUuIFVwZGF0ZSBp
dHMKLSAgICAgICAgLy8gbGluZSBudW1iZXIgaWYgbmVlZGVkLgotICAgICAgICB3aGlsZSAoY3Vy
LmxpbmVPYmogIT0gbGluZSkgY3VyID0gcm0oY3VyKTsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXJz
ICYmIHVwZGF0ZU51bWJlcnNGcm9tIDw9IGxpbmVOICYmIGN1ci5saW5lTnVtYmVyKQotICAgICAg
ICAgIHNldFRleHRDb250ZW50KGN1ci5saW5lTnVtYmVyLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlv
bnMsIGxpbmVOKSk7Ci0gICAgICAgIGN1ciA9IGN1ci5uZXh0U2libGluZzsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIEZvciBsaW5lcyB3aXRoIHdpZGdldHMsIG1ha2UgYW4gYXR0ZW1wdCB0
byBmaW5kIGFuZCByZXVzZQotICAgICAgICAvLyB0aGUgZXhpc3RpbmcgZWxlbWVudCwgc28gdGhh
dCB3aWRnZXRzIGFyZW4ndCBuZWVkbGVzc2x5Ci0gICAgICAgIC8vIHJlbW92ZWQgYW5kIHJlLWlu
c2VydGVkIGludG8gdGhlIGRvbQotICAgICAgICBpZiAobGluZS53aWRnZXRzKSBmb3IgKHZhciBq
ID0gMCwgc2VhcmNoID0gY3VyLCByZXVzZTsgc2VhcmNoICYmIGogPCAyMDsgKytqLCBzZWFyY2gg
PSBzZWFyY2gubmV4dFNpYmxpbmcpCi0gICAgICAgICAgaWYgKHNlYXJjaC5saW5lT2JqID09IGxp
bmUgJiYgL2Rpdi9pLnRlc3Qoc2VhcmNoLm5vZGVOYW1lKSkgeyByZXVzZSA9IHNlYXJjaDsgYnJl
YWs7IH0KLSAgICAgICAgLy8gVGhpcyBsaW5lIG5lZWRzIHRvIGJlIGdlbmVyYXRlZC4KLSAgICAg
ICAgdmFyIGxpbmVOb2RlID0gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZSwgbGluZU4sIGRpbXMs
IHJldXNlKTsKLSAgICAgICAgaWYgKGxpbmVOb2RlICE9IHJldXNlKSB7Ci0gICAgICAgICAgY29u
dGFpbmVyLmluc2VydEJlZm9yZShsaW5lTm9kZSwgY3VyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICB3aGlsZSAoY3VyICE9IHJldXNlKSBjdXIgPSBybShjdXIpOwotICAgICAgICAgIGN1
ciA9IGN1ci5uZXh0U2libGluZzsKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVOb2RlLmxpbmVP
YmogPSBsaW5lOwotICAgICAgfQotICAgICAgKytsaW5lTjsKLSAgICB9KTsKLSAgICB3aGlsZSAo
Y3VyKSBjdXIgPSBybShjdXIpOwotICB9Ci0KLSAgZnVuY3Rpb24gYnVpbGRMaW5lRWxlbWVudChj
bSwgbGluZSwgbGluZU5vLCBkaW1zLCByZXVzZSkgewotICAgIHZhciBsaW5lRWxlbWVudCA9IGxp
bmVDb250ZW50KGNtLCBsaW5lKTsKLSAgICB2YXIgbWFya2VycyA9IGxpbmUuZ3V0dGVyTWFya2Vy
cywgZGlzcGxheSA9IGNtLmRpc3BsYXksIHdyYXA7Ci0KLSAgICBpZiAoIWNtLm9wdGlvbnMubGlu
ZU51bWJlcnMgJiYgIW1hcmtlcnMgJiYgIWxpbmUuYmdDbGFzcyAmJiAhbGluZS53cmFwQ2xhc3Mg
JiYgIWxpbmUud2lkZ2V0cykKLSAgICAgIHJldHVybiBsaW5lRWxlbWVudDsKLQotICAgIC8vIExp
bmVzIHdpdGggZ3V0dGVyIGVsZW1lbnRzLCB3aWRnZXRzIG9yIGEgYmFja2dyb3VuZCBjbGFzcyBu
ZWVkCi0gICAgLy8gdG8gYmUgd3JhcHBlZCBhZ2FpbiwgYW5kIGhhdmUgdGhlIGV4dHJhIGVsZW1l
bnRzIGFkZGVkIHRvIHRoZQotICAgIC8vIHdyYXBwZXIgZGl2Ci0KLSAgICBpZiAocmV1c2UpIHsK
LSAgICAgIHJldXNlLmFsaWduYWJsZSA9IG51bGw7Ci0gICAgICB2YXIgaXNPayA9IHRydWUsIHdp
ZGdldHNTZWVuID0gMDsKLSAgICAgIGZvciAodmFyIG4gPSByZXVzZS5maXJzdENoaWxkLCBuZXh0
OyBuOyBuID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gbi5uZXh0U2libGluZzsKLSAgICAgICAg
aWYgKCEvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChuLmNsYXNzTmFtZSkpIHsKLSAg
ICAgICAgICByZXVzZS5yZW1vdmVDaGlsZChuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBmb3IgKHZhciBpID0gMCwgZmlyc3QgPSB0cnVlOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICB2YXIgd2lkZ2V0ID0gbGluZS53aWRnZXRzW2ldLCBpc0ZpcnN0
ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIXdpZGdldC5hYm92ZSkgeyBpc0ZpcnN0ID0gZmly
c3Q7IGZpcnN0ID0gZmFsc2U7IH0KLSAgICAgICAgICAgIGlmICh3aWRnZXQubm9kZSA9PSBuLmZp
cnN0Q2hpbGQpIHsKLSAgICAgICAgICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbiwg
cmV1c2UsIGRpbXMpOwotICAgICAgICAgICAgICArK3dpZGdldHNTZWVuOwotICAgICAgICAgICAg
ICBpZiAoaXNGaXJzdCkgcmV1c2UuaW5zZXJ0QmVmb3JlKGxpbmVFbGVtZW50LCBuKTsKLSAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlm
IChpID09IGxpbmUud2lkZ2V0cy5sZW5ndGgpIHsgaXNPayA9IGZhbHNlOyBicmVhazsgfQotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoaXNPayAmJiB3aWRnZXRzU2VlbiA9PSBsaW5lLndp
ZGdldHMubGVuZ3RoKSB7Ci0gICAgICAgIHdyYXAgPSByZXVzZTsKLSAgICAgICAgcmV1c2UuY2xh
c3NOYW1lID0gbGluZS53cmFwQ2xhc3MgfHwgIiI7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICgh
d3JhcCkgewotICAgICAgd3JhcCA9IGVsdCgiZGl2IiwgbnVsbCwgbGluZS53cmFwQ2xhc3MsICJw
b3NpdGlvbjogcmVsYXRpdmUiKTsKLSAgICAgIHdyYXAuYXBwZW5kQ2hpbGQobGluZUVsZW1lbnQp
OwotICAgIH0KLSAgICAvLyBLbHVkZ2UgdG8gbWFrZSBzdXJlIHRoZSBzdHlsZWQgZWxlbWVudCBs
aWVzIGJlaGluZCB0aGUgc2VsZWN0aW9uIChieSB6LWluZGV4KQotICAgIGlmIChsaW5lLmJnQ2xh
c3MpCi0gICAgICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGwsIGxpbmUuYmdDbGFz
cyArICIgQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCIpLCB3cmFwLmZpcnN0Q2hpbGQpOwotICAg
IGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHsKLSAgICAgIHZhciBndXR0
ZXJXcmFwID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRp
b246IGFic29sdXRlOyBsZWZ0OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZGltcy5maXhlZFBvcyA6IC1k
aW1zLmd1dHRlclRvdGFsV2lkdGgpICsgInB4IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXAuZmlyc3RDaGlsZCk7Ci0gICAgICBpZiAoY20ub3B0aW9ucy5m
aXhlZEd1dHRlcikgKHdyYXAuYWxpZ25hYmxlIHx8ICh3cmFwLmFsaWduYWJsZSA9IFtdKSkucHVz
aChndXR0ZXJXcmFwKTsKLSAgICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICghbWFy
a2VycyB8fCAhbWFya2Vyc1siQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKSkKLSAgICAgICAgd3Jh
cC5saW5lTnVtYmVyID0gZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZCgKLSAgICAgICAgICBlbHQoImRp
diIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU5vKSwKLSAgICAgICAgICAgICAgIkNv
ZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLAotICAgICAgICAgICAg
ICAibGVmdDogIiArIGRpbXMuZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdICsg
InB4OyB3aWR0aDogIgotICAgICAgICAgICAgICArIGRpc3BsYXkubGluZU51bUlubmVyV2lkdGgg
KyAicHgiKSk7Ci0gICAgICBpZiAobWFya2VycykKLSAgICAgICAgZm9yICh2YXIgayA9IDA7IGsg
PCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2spIHsKLSAgICAgICAgICB2YXIgaWQgPSBj
bS5vcHRpb25zLmd1dHRlcnNba10sIGZvdW5kID0gbWFya2Vycy5oYXNPd25Qcm9wZXJ0eShpZCkg
JiYgbWFya2Vyc1tpZF07Ci0gICAgICAgICAgaWYgKGZvdW5kKQotICAgICAgICAgICAgZ3V0dGVy
V3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtmb3VuZF0sICJDb2RlTWlycm9yLWd1dHRlci1l
bHQiLCAibGVmdDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aW1zLmd1dHRlckxlZnRbaWRdICsgInB4OyB3aWR0aDogIiArIGRpbXMuZ3V0dGVyV2lkdGhbaWRd
ICsgInB4IikpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpZV9sdDgpIHdyYXAuc3R5bGUu
ekluZGV4ID0gMjsKLSAgICBpZiAobGluZS53aWRnZXRzICYmIHdyYXAgIT0gcmV1c2UpIGZvciAo
dmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoImRpdiIsIFt3aWRnZXQubm9kZV0sICJD
b2RlTWlycm9yLWxpbmV3aWRnZXQiKTsKLSAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQs
IG5vZGUsIHdyYXAsIGRpbXMpOwotICAgICAgaWYgKHdpZGdldC5hYm92ZSkKLSAgICAgICAgd3Jh
cC5pbnNlcnRCZWZvcmUobm9kZSwgY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiBsaW5lLmhlaWdo
dCAhPSAwID8gZ3V0dGVyV3JhcCA6IGxpbmVFbGVtZW50KTsKLSAgICAgIGVsc2UKLSAgICAgICAg
d3JhcC5hcHBlbmRDaGlsZChub2RlKTsKLSAgICAgIHNpZ25hbExhdGVyKHdpZGdldCwgInJlZHJh
dyIpOwotICAgIH0KLSAgICByZXR1cm4gd3JhcDsKLSAgfQotCi0gIGZ1bmN0aW9uIHBvc2l0aW9u
TGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIHdyYXAsIGRpbXMpIHsKLSAgICBpZiAod2lkZ2V0Lm5v
SFNjcm9sbCkgewotICAgICAgKHdyYXAuYWxpZ25hYmxlIHx8ICh3cmFwLmFsaWduYWJsZSA9IFtd
KSkucHVzaChub2RlKTsKLSAgICAgIHZhciB3aWR0aCA9IGRpbXMud3JhcHBlcldpZHRoOwotICAg
ICAgbm9kZS5zdHlsZS5sZWZ0ID0gZGltcy5maXhlZFBvcyArICJweCI7Ci0gICAgICBpZiAoIXdp
ZGdldC5jb3Zlckd1dHRlcikgewotICAgICAgICB3aWR0aCAtPSBkaW1zLmd1dHRlclRvdGFsV2lk
dGg7Ci0gICAgICAgIG5vZGUuc3R5bGUucGFkZGluZ0xlZnQgPSBkaW1zLmd1dHRlclRvdGFsV2lk
dGggKyAicHgiOwotICAgICAgfQotICAgICAgbm9kZS5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4
IjsKLSAgICB9Ci0gICAgaWYgKHdpZGdldC5jb3Zlckd1dHRlcikgewotICAgICAgbm9kZS5zdHls
ZS56SW5kZXggPSA1OwotICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0g
ICAgICBpZiAoIXdpZGdldC5ub0hTY3JvbGwpIG5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IC1kaW1z
Lmd1dHRlclRvdGFsV2lkdGggKyAicHgiOwotICAgIH0KLSAgfQotCi0gIC8vIFNFTEVDVElPTiAv
IENVUlNPUgotCi0gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihjbSkgewotICAgIHZhciBkaXNw
bGF5ID0gY20uZGlzcGxheTsKLSAgICB2YXIgY29sbGFwc2VkID0gcG9zRXEoY20uZG9jLnNlbC5m
cm9tLCBjbS5kb2Muc2VsLnRvKTsKLSAgICBpZiAoY29sbGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hv
d0N1cnNvcldoZW5TZWxlY3RpbmcpCi0gICAgICB1cGRhdGVTZWxlY3Rpb25DdXJzb3IoY20pOwot
ICAgIGVsc2UKLSAgICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5Lm90
aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgaWYgKCFjb2xsYXBzZWQpCi0g
ICAgICB1cGRhdGVTZWxlY3Rpb25SYW5nZShjbSk7Ci0gICAgZWxzZQotICAgICAgZGlzcGxheS5z
ZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLQotICAgIC8vIE1vdmUgdGhlIGhp
ZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZh
Y3RzCi0gICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIGNtLmRvYy5zZWwuaGVhZCwg
ImRpdiIpOwotICAgIHZhciB3cmFwT2ZmID0gZ2V0UmVjdChkaXNwbGF5LndyYXBwZXIpLCBsaW5l
T2ZmID0gZ2V0UmVjdChkaXNwbGF5LmxpbmVEaXYpOwotICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5
bGUudG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdo
dCAtIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVhZFBvcy50b3AgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSkgKyAicHgiOwot
ICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRp
c3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCAtIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MubGVmdCArIGxpbmVPZmYubGVm
dCAtIHdyYXBPZmYubGVmdCkpICsgInB4IjsKLSAgfQotCi0gIC8vIE5vIHNlbGVjdGlvbiwgcGxh
aW4gY3Vyc29yCi0gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbkN1cnNvcihjbSkgewotICAgIHZh
ciBkaXNwbGF5ID0gY20uZGlzcGxheSwgcG9zID0gY3Vyc29yQ29vcmRzKGNtLCBjbS5kb2Muc2Vs
LmhlYWQsICJkaXYiKTsKLSAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQg
KyAicHgiOwotICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLnRvcCA9IHBvcy50b3AgKyAicHgiOwot
ICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KDAsIHBvcy5ib3R0b20g
LSBwb3MudG9wKSAqIGNtLm9wdGlvbnMuY3Vyc29ySGVpZ2h0ICsgInB4IjsKLSAgICBkaXNwbGF5
LmN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0KLSAgICBpZiAocG9zLm90aGVyKSB7Ci0gICAg
ICBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGRpc3BsYXku
b3RoZXJDdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5vdGhlci5sZWZ0ICsgInB4IjsKLSAgICAgIGRp
c3BsYXkub3RoZXJDdXJzb3Iuc3R5bGUudG9wID0gcG9zLm90aGVyLnRvcCArICJweCI7Ci0gICAg
ICBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodCA9IChwb3Mub3RoZXIuYm90dG9tIC0g
cG9zLm90aGVyLnRvcCkgKiAuODUgKyAicHgiOwotICAgIH0gZWxzZSB7IGRpc3BsYXkub3RoZXJD
dXJzb3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgfQotICB9Ci0KLSAgLy8gSGlnaGxpZ2h0IHNl
bGVjdGlvbgotICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb25SYW5nZShjbSkgewotICAgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jLCBzZWwgPSBjbS5kb2Muc2VsOwotICAg
IHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICB2
YXIgY2xpZW50V2lkdGggPSBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRXaWR0aCwgcGwgPSBwYWRk
aW5nTGVmdChjbS5kaXNwbGF5KTsKLQotICAgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0b3AsIHdpZHRo
LCBib3R0b20pIHsKLSAgICAgIGlmICh0b3AgPCAwKSB0b3AgPSAwOwotICAgICAgZnJhZ21lbnQu
YXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1zZWxlY3RlZCIsICJwb3Np
dGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKyBsZWZ0ICsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicHg7IHRvcDogIiArIHRvcCArICJweDsgd2lkdGg6ICIgKyAod2lkdGggPT0gbnVs
bCA/IGNsaWVudFdpZHRoIC0gbGVmdCA6IHdpZHRoKSArCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInB4OyBoZWlnaHQ6ICIgKyAoYm90dG9tIC0gdG9wKSArICJweCIpKTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBkcmF3Rm9yTGluZShsaW5lLCBmcm9tQXJnLCB0b0FyZywgcmV0VG9w
KSB7Ci0gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKLSAgICAgIHZhciBs
aW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aCwgclZhbCA9IHJldFRvcCA/IEluZmluaXR5IDog
LUluZmluaXR5OwotICAgICAgZnVuY3Rpb24gY29vcmRzKGNoKSB7Ci0gICAgICAgIHJldHVybiBj
aGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCAiZGl2IiwgbGluZU9iaik7Ci0gICAgICB9Ci0K
LSAgICAgIGl0ZXJhdGVCaWRpU2VjdGlvbnMoZ2V0T3JkZXIobGluZU9iaiksIGZyb21BcmcgfHwg
MCwgdG9BcmcgPT0gbnVsbCA/IGxpbmVMZW4gOiB0b0FyZywgZnVuY3Rpb24oZnJvbSwgdG8sIGRp
cikgewotICAgICAgICB2YXIgbGVmdFBvcyA9IGNvb3JkcyhkaXIgPT0gInJ0bCIgPyB0byAtIDEg
OiBmcm9tKTsKLSAgICAgICAgdmFyIHJpZ2h0UG9zID0gY29vcmRzKGRpciA9PSAicnRsIiA/IGZy
b20gOiB0byAtIDEpOwotICAgICAgICB2YXIgbGVmdCA9IGxlZnRQb3MubGVmdCwgcmlnaHQgPSBy
aWdodFBvcy5yaWdodDsKLSAgICAgICAgaWYgKHJpZ2h0UG9zLnRvcCAtIGxlZnRQb3MudG9wID4g
MykgeyAvLyBEaWZmZXJlbnQgbGluZXMsIGRyYXcgdG9wIHBhcnQKLSAgICAgICAgICBhZGQobGVm
dCwgbGVmdFBvcy50b3AsIG51bGwsIGxlZnRQb3MuYm90dG9tKTsKLSAgICAgICAgICBsZWZ0ID0g
cGw7Ci0gICAgICAgICAgaWYgKGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSBhZGQobGVm
dCwgbGVmdFBvcy5ib3R0b20sIG51bGwsIHJpZ2h0UG9zLnRvcCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGluZUxlbikgcmlnaHQgPSBjbGllbnRXaWR0
aDsKLSAgICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBwbDsK
LSAgICAgICAgclZhbCA9IHJldFRvcCA/IE1hdGgubWluKHJpZ2h0UG9zLnRvcCwgclZhbCkgOiBN
YXRoLm1heChyaWdodFBvcy5ib3R0b20sIHJWYWwpOwotICAgICAgICBpZiAobGVmdCA8IHBsICsg
MSkgbGVmdCA9IHBsOwotICAgICAgICBhZGQobGVmdCwgcmlnaHRQb3MudG9wLCByaWdodCAtIGxl
ZnQsIHJpZ2h0UG9zLmJvdHRvbSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiByVmFsOwotICAg
IH0KLQotICAgIGlmIChzZWwuZnJvbS5saW5lID09IHNlbC50by5saW5lKSB7Ci0gICAgICBkcmF3
Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaCwgc2VsLnRvLmNoKTsKLSAgICB9IGVs
c2UgewotICAgICAgdmFyIGZyb21PYmogPSBnZXRMaW5lKGRvYywgc2VsLmZyb20ubGluZSk7Ci0g
ICAgICB2YXIgY3VyID0gZnJvbU9iaiwgbWVyZ2VkLCBwYXRoID0gW3NlbC5mcm9tLmxpbmUsIHNl
bC5mcm9tLmNoXSwgc2luZ2xlTGluZTsKLSAgICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRT
cGFuQXRFbmQoY3VyKSkgewotICAgICAgICB2YXIgZm91bmQgPSBtZXJnZWQuZmluZCgpOwotICAg
ICAgICBwYXRoLnB1c2goZm91bmQuZnJvbS5jaCwgZm91bmQudG8ubGluZSwgZm91bmQudG8uY2gp
OwotICAgICAgICBpZiAoZm91bmQudG8ubGluZSA9PSBzZWwudG8ubGluZSkgewotICAgICAgICAg
IHBhdGgucHVzaChzZWwudG8uY2gpOwotICAgICAgICAgIHNpbmdsZUxpbmUgPSB0cnVlOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGN1ciA9IGdldExpbmUoZG9jLCBmb3Vu
ZC50by5saW5lKTsKLSAgICAgIH0KLQotICAgICAgLy8gVGhpcyBpcyBhIHNpbmdsZSwgbWVyZ2Vk
IGxpbmUKLSAgICAgIGlmIChzaW5nbGVMaW5lKSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGF0aC5sZW5ndGg7IGkgKz0gMykKLSAgICAgICAgICBkcmF3Rm9yTGluZShwYXRoW2ldLCBw
YXRoW2krMV0sIHBhdGhbaSsyXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgbWlkZGxl
VG9wLCBtaWRkbGVCb3QsIHRvT2JqID0gZ2V0TGluZShkb2MsIHNlbC50by5saW5lKTsKLSAgICAg
ICAgaWYgKHNlbC5mcm9tLmNoKQotICAgICAgICAgIC8vIERyYXcgdGhlIGZpcnN0IGxpbmUgb2Yg
c2VsZWN0aW9uLgotICAgICAgICAgIG1pZGRsZVRvcCA9IGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxp
bmUsIHNlbC5mcm9tLmNoLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAv
LyBTaW1wbHkgaW5jbHVkZSBpdCBpbiB0aGUgbWlkZGxlIGJsb2NrLgotICAgICAgICAgIG1pZGRs
ZVRvcCA9IGhlaWdodEF0TGluZShjbSwgZnJvbU9iaikgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7Ci0K
LSAgICAgICAgaWYgKCFzZWwudG8uY2gpCi0gICAgICAgICAgbWlkZGxlQm90ID0gaGVpZ2h0QXRM
aW5lKGNtLCB0b09iaikgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICBtaWRkbGVCb3QgPSBkcmF3Rm9yTGluZShzZWwudG8ubGluZSwgY29sbGFwc2VkU3BhbkF0
U3RhcnQodG9PYmopID8gbnVsbCA6IDAsIHNlbC50by5jaCwgdHJ1ZSk7Ci0KLSAgICAgICAgaWYg
KG1pZGRsZVRvcCA8IG1pZGRsZUJvdCkgYWRkKHBsLCBtaWRkbGVUb3AsIG51bGwsIG1pZGRsZUJv
dCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5z
ZWxlY3Rpb25EaXYsIGZyYWdtZW50KTsKLSAgICBkaXNwbGF5LnNlbGVjdGlvbkRpdi5zdHlsZS5k
aXNwbGF5ID0gIiI7Ci0gIH0KLQotICAvLyBDdXJzb3ItYmxpbmtpbmcKLSAgZnVuY3Rpb24gcmVz
dGFydEJsaW5rKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIGNsZWFy
SW50ZXJ2YWwoZGlzcGxheS5ibGlua2VyKTsKLSAgICB2YXIgb24gPSB0cnVlOwotICAgIGRpc3Bs
YXkuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLnZp
c2liaWxpdHkgPSAiIjsKLSAgICBkaXNwbGF5LmJsaW5rZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlv
bigpIHsKLSAgICAgIGlmICghZGlzcGxheS5jdXJzb3Iub2Zmc2V0SGVpZ2h0KSByZXR1cm47Ci0g
ICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gZGlzcGxheS5vdGhlckN1cnNv
ci5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/ICIiIDogImhpZGRlbiI7Ci0gICAgfSwg
Y20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOwotICB9Ci0KLSAgLy8gSElHSExJR0hUIFdPUktF
UgotCi0gIGZ1bmN0aW9uIHN0YXJ0V29ya2VyKGNtLCB0aW1lKSB7Ci0gICAgaWYgKGNtLmRvYy5t
b2RlLnN0YXJ0U3RhdGUgJiYgY20uZG9jLmZyb250aWVyIDwgY20uZGlzcGxheS5zaG93aW5nVG8p
Ci0gICAgICBjbS5zdGF0ZS5oaWdobGlnaHQuc2V0KHRpbWUsIGJpbmQoaGlnaGxpZ2h0V29ya2Vy
LCBjbSkpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKGNtKSB7Ci0gICAgdmFy
IGRvYyA9IGNtLmRvYzsKLSAgICBpZiAoZG9jLmZyb250aWVyIDwgZG9jLmZpcnN0KSBkb2MuZnJv
bnRpZXIgPSBkb2MuZmlyc3Q7Ci0gICAgaWYgKGRvYy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnNo
b3dpbmdUbykgcmV0dXJuOwotICAgIHZhciBlbmQgPSArbmV3IERhdGUgKyBjbS5vcHRpb25zLndv
cmtUaW1lOwotICAgIHZhciBzdGF0ZSA9IGNvcHlTdGF0ZShkb2MubW9kZSwgZ2V0U3RhdGVCZWZv
cmUoY20sIGRvYy5mcm9udGllcikpOwotICAgIHZhciBjaGFuZ2VkID0gW10sIHByZXZDaGFuZ2U7
Ci0gICAgZG9jLml0ZXIoZG9jLmZyb250aWVyLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6
ZSwgY20uZGlzcGxheS5zaG93aW5nVG8gKyA1MDApLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBp
ZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20pIHsgLy8gVmlzaWJsZQot
ICAgICAgICB2YXIgb2xkU3R5bGVzID0gbGluZS5zdHlsZXM7Ci0gICAgICAgIGxpbmUuc3R5bGVz
ID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUpOwotICAgICAgICB2YXIgaXNjaGFuZ2Ug
PSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgIWlzY2hhbmdlICYmIGkgPCBvbGRTdHlsZXMubGVuZ3Ro
OyArK2kpIGlzY2hhbmdlID0gb2xkU3R5bGVzW2ldICE9IGxpbmUuc3R5bGVzW2ldOwotICAgICAg
ICBpZiAoaXNjaGFuZ2UpIHsKLSAgICAgICAgICBpZiAocHJldkNoYW5nZSAmJiBwcmV2Q2hhbmdl
LmVuZCA9PSBkb2MuZnJvbnRpZXIpIHByZXZDaGFuZ2UuZW5kKys7Ci0gICAgICAgICAgZWxzZSBj
aGFuZ2VkLnB1c2gocHJldkNoYW5nZSA9IHtzdGFydDogZG9jLmZyb250aWVyLCBlbmQ6IGRvYy5m
cm9udGllciArIDF9KTsKLSAgICAgICAgfQotICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb3B5
U3RhdGUoZG9jLm1vZGUsIHN0YXRlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHByb2Nlc3NM
aW5lKGNtLCBsaW5lLCBzdGF0ZSk7Ci0gICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGRvYy5mcm9u
dGllciAlIDUgPT0gMCA/IGNvcHlTdGF0ZShkb2MubW9kZSwgc3RhdGUpIDogbnVsbDsKLSAgICAg
IH0KLSAgICAgICsrZG9jLmZyb250aWVyOwotICAgICAgaWYgKCtuZXcgRGF0ZSA+IGVuZCkgewot
ICAgICAgICBzdGFydFdvcmtlcihjbSwgY20ub3B0aW9ucy53b3JrRGVsYXkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAoY2hhbmdlZC5sZW5ndGgpCi0g
ICAgICBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgewotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNoYW5nZWQubGVuZ3RoOyArK2kpCi0gICAgICAgICAgcmVnQ2hhbmdlKHRoaXMsIGNoYW5n
ZWRbaV0uc3RhcnQsIGNoYW5nZWRbaV0uZW5kKTsKLSAgICAgIH0pKCk7Ci0gIH0KLQotICAvLyBG
aW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMg
dG8KLSAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0
YXJ0IHdpdGggYQotICAvLyB2YWxpZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0
aGUgbGluZSB3aXRoIHRoZQotICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMg
dG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0bwotICAvLyBwYXJzZSBjb3JyZWN0bHkuCi0gIGZ1
bmN0aW9uIGZpbmRTdGFydExpbmUoY20sIG4pIHsKLSAgICB2YXIgbWluaW5kZW50LCBtaW5saW5l
LCBkb2MgPSBjbS5kb2M7Ci0gICAgZm9yICh2YXIgc2VhcmNoID0gbiwgbGltID0gbiAtIDEwMDsg
c2VhcmNoID4gbGltOyAtLXNlYXJjaCkgewotICAgICAgaWYgKHNlYXJjaCA8PSBkb2MuZmlyc3Qp
IHJldHVybiBkb2MuZmlyc3Q7Ci0gICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBzZWFyY2gg
LSAxKTsKLSAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7Ci0gICAgICB2
YXIgaW5kZW50ZWQgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIGNtLm9wdGlvbnMudGFi
U2l6ZSk7Ci0gICAgICBpZiAobWlubGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVk
KSB7Ci0gICAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxOwotICAgICAgICBtaW5pbmRlbnQgPSBp
bmRlbnRlZDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1pbmxpbmU7Ci0gIH0KLQotICBm
dW5jdGlvbiBnZXRTdGF0ZUJlZm9yZShjbSwgbikgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGRp
c3BsYXkgPSBjbS5kaXNwbGF5OwotICAgICAgaWYgKCFkb2MubW9kZS5zdGFydFN0YXRlKSByZXR1
cm4gdHJ1ZTsKLSAgICB2YXIgcG9zID0gZmluZFN0YXJ0TGluZShjbSwgbiksIHN0YXRlID0gcG9z
ID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBwb3MtMSkuc3RhdGVBZnRlcjsKLSAgICBpZiAo
IXN0YXRlKSBzdGF0ZSA9IHN0YXJ0U3RhdGUoZG9jLm1vZGUpOwotICAgIGVsc2Ugc3RhdGUgPSBj
b3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKTsKLSAgICBkb2MuaXRlcihwb3MsIG4sIGZ1bmN0aW9u
KGxpbmUpIHsKLSAgICAgIHByb2Nlc3NMaW5lKGNtLCBsaW5lLCBzdGF0ZSk7Ci0gICAgICB2YXIg
c2F2ZSA9IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkuc2hv
d2luZ0Zyb20gJiYgcG9zIDwgZGlzcGxheS5zaG93aW5nVG87Ci0gICAgICBsaW5lLnN0YXRlQWZ0
ZXIgPSBzYXZlID8gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBudWxsOwotICAgICAgKytw
b3M7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHN0YXRlOwotICB9Ci0KLSAgLy8gUE9TSVRJT04gTUVB
U1VSRU1FTlQKLQotICBmdW5jdGlvbiBwYWRkaW5nVG9wKGRpc3BsYXkpIHtyZXR1cm4gZGlzcGxh
eS5saW5lU3BhY2Uub2Zmc2V0VG9wO30KLSAgZnVuY3Rpb24gcGFkZGluZ1ZlcnQoZGlzcGxheSkg
e3JldHVybiBkaXNwbGF5Lm1vdmVyLm9mZnNldEhlaWdodCAtIGRpc3BsYXkubGluZVNwYWNlLm9m
ZnNldEhlaWdodDt9Ci0gIGZ1bmN0aW9uIHBhZGRpbmdMZWZ0KGRpc3BsYXkpIHsKLSAgICB2YXIg
ZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiLCBudWxs
LCBudWxsLCAidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCAieCIp
KTsKLSAgICByZXR1cm4gZS5vZmZzZXRMZWZ0OwotICB9Ci0KLSAgZnVuY3Rpb24gbWVhc3VyZUNo
YXIoY20sIGxpbmUsIGNoLCBkYXRhKSB7Ci0gICAgdmFyIGRpciA9IC0xOwotICAgIGRhdGEgPSBk
YXRhIHx8IG1lYXN1cmVMaW5lKGNtLCBsaW5lKTsKLQotICAgIGZvciAodmFyIHBvcyA9IGNoOzsg
cG9zICs9IGRpcikgewotICAgICAgdmFyIHIgPSBkYXRhW3Bvc107Ci0gICAgICBpZiAocikgYnJl
YWs7Ci0gICAgICBpZiAoZGlyIDwgMCAmJiBwb3MgPT0gMCkgZGlyID0gMTsKLSAgICB9Ci0gICAg
cmV0dXJuIHtsZWZ0OiBwb3MgPCBjaCA/IHIucmlnaHQgOiByLmxlZnQsCi0gICAgICAgICAgICBy
aWdodDogcG9zID4gY2ggPyByLmxlZnQgOiByLnJpZ2h0LAotICAgICAgICAgICAgdG9wOiByLnRv
cCwgYm90dG9tOiByLmJvdHRvbX07Ci0gIH0KLQotICBmdW5jdGlvbiBmaW5kQ2FjaGVkTWVhc3Vy
ZW1lbnQoY20sIGxpbmUpIHsKLSAgICB2YXIgY2FjaGUgPSBjbS5kaXNwbGF5Lm1lYXN1cmVMaW5l
Q2FjaGU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZS5sZW5ndGg7ICsraSkgewotICAg
ICAgdmFyIG1lbW8gPSBjYWNoZVtpXTsKLSAgICAgIGlmIChtZW1vLnRleHQgPT0gbGluZS50ZXh0
ICYmIG1lbW8ubWFya2VkU3BhbnMgPT0gbGluZS5tYXJrZWRTcGFucyAmJgotICAgICAgICAgIGNt
LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gbWVtby53aWR0aCAmJgotICAgICAgICAg
IG1lbW8uY2xhc3NlcyA9PSBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxpbmUuYmdDbGFzcyArICJ8
IiArIGxpbmUud3JhcENsYXNzKQotICAgICAgICByZXR1cm4gbWVtby5tZWFzdXJlOwotICAgIH0K
LSAgfQotCi0gIGZ1bmN0aW9uIG1lYXN1cmVMaW5lKGNtLCBsaW5lKSB7Ci0gICAgLy8gRmlyc3Qg
bG9vayBpbiB0aGUgY2FjaGUKLSAgICB2YXIgbWVhc3VyZSA9IGZpbmRDYWNoZWRNZWFzdXJlbWVu
dChjbSwgbGluZSk7Ci0gICAgaWYgKCFtZWFzdXJlKSB7Ci0gICAgICAvLyBGYWlsaW5nIHRoYXQs
IHJlY29tcHV0ZSBhbmQgc3RvcmUgcmVzdWx0IGluIGNhY2hlCi0gICAgICBtZWFzdXJlID0gbWVh
c3VyZUxpbmVJbm5lcihjbSwgbGluZSk7Ci0gICAgICB2YXIgY2FjaGUgPSBjbS5kaXNwbGF5Lm1l
YXN1cmVMaW5lQ2FjaGU7Ci0gICAgICB2YXIgbWVtbyA9IHt0ZXh0OiBsaW5lLnRleHQsIHdpZHRo
OiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLAotICAgICAgICAgICAgICAgICAgbWFy
a2VkU3BhbnM6IGxpbmUubWFya2VkU3BhbnMsIG1lYXN1cmU6IG1lYXN1cmUsCi0gICAgICAgICAg
ICAgICAgICBjbGFzc2VzOiBsaW5lLnRleHRDbGFzcyArICJ8IiArIGxpbmUuYmdDbGFzcyArICJ8
IiArIGxpbmUud3JhcENsYXNzfTsKLSAgICAgIGlmIChjYWNoZS5sZW5ndGggPT0gMTYpIGNhY2hl
WysrY20uZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zICUgMTZdID0gbWVtbzsKLSAgICAgIGVs
c2UgY2FjaGUucHVzaChtZW1vKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lYXN1cmU7Ci0gIH0KLQot
ICBmdW5jdGlvbiBtZWFzdXJlTGluZUlubmVyKGNtLCBsaW5lKSB7Ci0gICAgdmFyIGRpc3BsYXkg
PSBjbS5kaXNwbGF5LCBtZWFzdXJlID0gZW1wdHlBcnJheShsaW5lLnRleHQubGVuZ3RoKTsKLSAg
ICB2YXIgcHJlID0gbGluZUNvbnRlbnQoY20sIGxpbmUsIG1lYXN1cmUpOwotCi0gICAgLy8gSUUg
ZG9lcyBub3QgY2FjaGUgZWxlbWVudCBwb3NpdGlvbnMgb2YgaW5saW5lIGVsZW1lbnRzIGJldHdl
ZW4KLSAgICAvLyBjYWxscyB0byBnZXRCb3VuZGluZ0NsaWVudFJlY3QuIFRoaXMgbWFrZXMgdGhl
IGxvb3AgYmVsb3csCi0gICAgLy8gd2hpY2ggZ2F0aGVycyB0aGUgcG9zaXRpb25zIG9mIGFsbCB0
aGUgY2hhcmFjdGVycyBvbiB0aGUgbGluZSwKLSAgICAvLyBkbyBhbiBhbW91bnQgb2YgbGF5b3V0
IHdvcmsgcXVhZHJhdGljIHRvIHRoZSBudW1iZXIgb2YKLSAgICAvLyBjaGFyYWN0ZXJzLiBXaGVu
IGxpbmUgd3JhcHBpbmcgaXMgb2ZmLCB3ZSB0cnkgdG8gaW1wcm92ZSB0aGluZ3MKLSAgICAvLyBi
eSBmaXJzdCBzdWJkaXZpZGluZyB0aGUgbGluZSBpbnRvIGEgYnVuY2ggb2YgaW5saW5lIGJsb2Nr
cywgc28KLSAgICAvLyB0aGF0IElFIGNhbiByZXVzZSBtb3N0IG9mIHRoZSBsYXlvdXQgaW5mb3Jt
YXRpb24gZnJvbSBjYWNoZXMKLSAgICAvLyBmb3IgdGhvc2UgYmxvY2tzLiBUaGlzIGRvZXMgaW50
ZXJmZXJlIHdpdGggbGluZSB3cmFwcGluZywgc28gaXQKLSAgICAvLyBkb2Vzbid0IHdvcmsgd2hl
biB3cmFwcGluZyBpcyBvbiwgYnV0IGluIHRoYXQgY2FzZSB0aGUKLSAgICAvLyBzaXR1YXRpb24g
aXMgc2xpZ2h0bHkgYmV0dGVyLCBzaW5jZSBJRSBkb2VzIGNhY2hlIGxpbmUtd3JhcHBpbmcKLSAg
ICAvLyBpbmZvcm1hdGlvbiBhbmQgb25seSByZWNvbXB1dGVzIHBlci1saW5lLgotICAgIGlmIChp
ZSAmJiAhaWVfbHQ4ICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBwcmUuY2hpbGROb2Rl
cy5sZW5ndGggPiAxMDApIHsKLSAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTsKLSAgICAgIHZhciBjaHVuayA9IDEwLCBuID0gcHJlLmNoaWxkTm9k
ZXMubGVuZ3RoOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGNodW5rcyA9IE1hdGguY2VpbChuIC8g
Y2h1bmspOyBpIDwgY2h1bmtzOyArK2kpIHsKLSAgICAgICAgdmFyIHdyYXAgPSBlbHQoImRpdiIs
IG51bGwsIG51bGwsICJkaXNwbGF5OiBpbmxpbmUtYmxvY2siKTsKLSAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCBjaHVuayAmJiBuOyArK2opIHsKLSAgICAgICAgICB3cmFwLmFwcGVuZENoaWxk
KHByZS5maXJzdENoaWxkKTsKLSAgICAgICAgICAtLW47Ci0gICAgICAgIH0KLSAgICAgICAgZnJh
Z21lbnQuYXBwZW5kQ2hpbGQod3JhcCk7Ci0gICAgICB9Ci0gICAgICBwcmUuYXBwZW5kQ2hpbGQo
ZnJhZ21lbnQpOwotICAgIH0KLQotICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVh
c3VyZSwgcHJlKTsKLQotICAgIHZhciBvdXRlciA9IGdldFJlY3QoZGlzcGxheS5saW5lRGl2KTsK
LSAgICB2YXIgdnJhbmdlcyA9IFtdLCBkYXRhID0gZW1wdHlBcnJheShsaW5lLnRleHQubGVuZ3Ro
KSwgbWF4Qm90ID0gcHJlLm9mZnNldEhlaWdodDsKLSAgICAvLyBXb3JrIGFyb3VuZCBhbiBJRTcv
OCBidWcgd2hlcmUgaXQgd2lsbCBzb21ldGltZXMgaGF2ZSByYW5kb21seQotICAgIC8vIHJlcGxh
Y2VkIG91ciBwcmUgd2l0aCBhIGNsb25lIGF0IHRoaXMgcG9pbnQuCi0gICAgaWYgKGllX2x0OSAm
JiBkaXNwbGF5Lm1lYXN1cmUuZmlyc3QgIT0gcHJlKQotICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRB
ZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGN1cjsgaSA8
IG1lYXN1cmUubGVuZ3RoOyArK2kpIGlmIChjdXIgPSBtZWFzdXJlW2ldKSB7Ci0gICAgICB2YXIg
c2l6ZSA9IGdldFJlY3QoY3VyKTsKLSAgICAgIHZhciB0b3AgPSBNYXRoLm1heCgwLCBzaXplLnRv
cCAtIG91dGVyLnRvcCksIGJvdCA9IE1hdGgubWluKHNpemUuYm90dG9tIC0gb3V0ZXIudG9wLCBt
YXhCb3QpOwotICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2cmFuZ2VzLmxlbmd0aDsgaiArPSAy
KSB7Ci0gICAgICAgIHZhciBydG9wID0gdnJhbmdlc1tqXSwgcmJvdCA9IHZyYW5nZXNbaisxXTsK
LSAgICAgICAgaWYgKHJ0b3AgPiBib3QgfHwgcmJvdCA8IHRvcCkgY29udGludWU7Ci0gICAgICAg
IGlmIChydG9wIDw9IHRvcCAmJiByYm90ID49IGJvdCB8fAotICAgICAgICAgICAgdG9wIDw9IHJ0
b3AgJiYgYm90ID49IHJib3QgfHwKLSAgICAgICAgICAgIE1hdGgubWluKGJvdCwgcmJvdCkgLSBN
YXRoLm1heCh0b3AsIHJ0b3ApID49IChib3QgLSB0b3ApID4+IDEpIHsKLSAgICAgICAgICB2cmFu
Z2VzW2pdID0gTWF0aC5taW4odG9wLCBydG9wKTsKLSAgICAgICAgICB2cmFuZ2VzW2orMV0gPSBN
YXRoLm1heChib3QsIHJib3QpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBpZiAoaiA9PSB2cmFuZ2VzLmxlbmd0aCkgdnJhbmdlcy5wdXNoKHRvcCwgYm90KTsK
LSAgICAgIHZhciByaWdodCA9IHNpemUucmlnaHQ7Ci0gICAgICBpZiAoY3VyLm1lYXN1cmVSaWdo
dCkgcmlnaHQgPSBnZXRSZWN0KGN1ci5tZWFzdXJlUmlnaHQpLmxlZnQ7Ci0gICAgICBkYXRhW2ld
ID0ge2xlZnQ6IHNpemUubGVmdCAtIG91dGVyLmxlZnQsIHJpZ2h0OiByaWdodCAtIG91dGVyLmxl
ZnQsIHRvcDogan07Ci0gICAgfQotICAgIGZvciAodmFyIGkgPSAwLCBjdXI7IGkgPCBkYXRhLmxl
bmd0aDsgKytpKSBpZiAoY3VyID0gZGF0YVtpXSkgewotICAgICAgdmFyIHZyID0gY3VyLnRvcDsK
LSAgICAgIGN1ci50b3AgPSB2cmFuZ2VzW3ZyXTsgY3VyLmJvdHRvbSA9IHZyYW5nZXNbdnIrMV07
Ci0gICAgfQotCi0gICAgcmV0dXJuIGRhdGE7Ci0gIH0KLQotICBmdW5jdGlvbiBtZWFzdXJlTGlu
ZVdpZHRoKGNtLCBsaW5lKSB7Ci0gICAgdmFyIGhhc0JhZFNwYW4gPSBmYWxzZTsKLSAgICBpZiAo
bGluZS5tYXJrZWRTcGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zOyAr
K2kpIHsKLSAgICAgIHZhciBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07Ci0gICAgICBpZiAoc3Au
Y29sbGFwc2VkICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRvID09IGxpbmUudGV4dC5sZW5ndGgp
KSBoYXNCYWRTcGFuID0gdHJ1ZTsKLSAgICB9Ci0gICAgdmFyIGNhY2hlZCA9ICFoYXNCYWRTcGFu
ICYmIGZpbmRDYWNoZWRNZWFzdXJlbWVudChjbSwgbGluZSk7Ci0gICAgaWYgKGNhY2hlZCkgcmV0
dXJuIG1lYXN1cmVDaGFyKGNtLCBsaW5lLCBsaW5lLnRleHQubGVuZ3RoLCBjYWNoZWQpLnJpZ2h0
OwotCi0gICAgdmFyIHByZSA9IGxpbmVDb250ZW50KGNtLCBsaW5lKTsKLSAgICB2YXIgZW5kID0g
cHJlLmFwcGVuZENoaWxkKHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7Ci0g
ICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5tZWFzdXJlLCBwcmUpOwotICAgIHJl
dHVybiBnZXRSZWN0KGVuZCkucmlnaHQgLSBnZXRSZWN0KGNtLmRpc3BsYXkubGluZURpdikubGVm
dDsKLSAgfQotCi0gIGZ1bmN0aW9uIGNsZWFyQ2FjaGVzKGNtKSB7Ci0gICAgY20uZGlzcGxheS5t
ZWFzdXJlTGluZUNhY2hlLmxlbmd0aCA9IGNtLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyA9
IDA7Ci0gICAgY20uZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSBjbS5kaXNwbGF5LmNhY2hlZFRl
eHRIZWlnaHQgPSBudWxsOwotICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOwot
ICAgIGNtLmRpc3BsYXkubGluZU51bUNoYXJzID0gbnVsbDsKLSAgfQotCi0gIC8vIENvbnRleHQg
aXMgb25lIG9mICJsaW5lIiwgImRpdiIgKGRpc3BsYXkubGluZURpdiksICJsb2NhbCIvbnVsbCAo
ZWRpdG9yKSwgb3IgInBhZ2UiCi0gIGZ1bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9i
aiwgcmVjdCwgY29udGV4dCkgewotICAgIGlmIChsaW5lT2JqLndpZGdldHMpIGZvciAodmFyIGkg
PSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytpKSBpZiAobGluZU9iai53aWRnZXRz
W2ldLmFib3ZlKSB7Ci0gICAgICB2YXIgc2l6ZSA9IHdpZGdldEhlaWdodChsaW5lT2JqLndpZGdl
dHNbaV0pOwotICAgICAgcmVjdC50b3AgKz0gc2l6ZTsgcmVjdC5ib3R0b20gKz0gc2l6ZTsKLSAg
ICB9Ci0gICAgaWYgKGNvbnRleHQgPT0gImxpbmUiKSByZXR1cm4gcmVjdDsKLSAgICBpZiAoIWNv
bnRleHQpIGNvbnRleHQgPSAibG9jYWwiOwotICAgIHZhciB5T2ZmID0gaGVpZ2h0QXRMaW5lKGNt
LCBsaW5lT2JqKTsKLSAgICBpZiAoY29udGV4dCAhPSAibG9jYWwiKSB5T2ZmIC09IGNtLmRpc3Bs
YXkudmlld09mZnNldDsKLSAgICBpZiAoY29udGV4dCA9PSAicGFnZSIpIHsKLSAgICAgIHZhciBs
T2ZmID0gZ2V0UmVjdChjbS5kaXNwbGF5LmxpbmVTcGFjZSk7Ci0gICAgICB5T2ZmICs9IGxPZmYu
dG9wICsgKHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8
IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcCk7Ci0gICAgICB2YXIgeE9mZiA9IGxPZmYubGVmdCAr
ICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1
bWVudC5ib2R5KS5zY3JvbGxMZWZ0KTsKLSAgICAgIHJlY3QubGVmdCArPSB4T2ZmOyByZWN0LnJp
Z2h0ICs9IHhPZmY7Ci0gICAgfQotICAgIHJlY3QudG9wICs9IHlPZmY7IHJlY3QuYm90dG9tICs9
IHlPZmY7Ci0gICAgcmV0dXJuIHJlY3Q7Ci0gIH0KLQotICAvLyBDb250ZXh0IG1heSBiZSAid2lu
ZG93IiwgInBhZ2UiLCAiZGl2Iiwgb3IgImxvY2FsIi9udWxsCi0gIC8vIFJlc3VsdCBpcyBpbiBs
b2NhbCBjb29yZHMKLSAgZnVuY3Rpb24gZnJvbUNvb3JkU3lzdGVtKGNtLCBjb29yZHMsIGNvbnRl
eHQpIHsKLSAgICBpZiAoY29udGV4dCA9PSAiZGl2IikgcmV0dXJuIGNvb3JkczsKLSAgICB2YXIg
bGVmdCA9IGNvb3Jkcy5sZWZ0LCB0b3AgPSBjb29yZHMudG9wOwotICAgIGlmIChjb250ZXh0ID09
ICJwYWdlIikgewotICAgICAgbGVmdCAtPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0OwotICAgICAgdG9w
IC09IHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRv
Y3VtZW50LmJvZHkpLnNjcm9sbFRvcDsKLSAgICB9Ci0gICAgdmFyIGxpbmVTcGFjZUJveCA9IGdl
dFJlY3QoY20uZGlzcGxheS5saW5lU3BhY2UpOwotICAgIGxlZnQgLT0gbGluZVNwYWNlQm94Lmxl
ZnQ7Ci0gICAgdG9wIC09IGxpbmVTcGFjZUJveC50b3A7Ci0gICAgaWYgKGNvbnRleHQgPT0gImxv
Y2FsIiB8fCAhY29udGV4dCkgewotICAgICAgdmFyIGVkaXRvckJveCA9IGdldFJlY3QoY20uZGlz
cGxheS53cmFwcGVyKTsKLSAgICAgIGxlZnQgLT0gZWRpdG9yQm94LmxlZnQ7Ci0gICAgICB0b3Ag
LT0gZWRpdG9yQm94LnRvcDsKLSAgICB9Ci0gICAgcmV0dXJuIHtsZWZ0OiBsZWZ0LCB0b3A6IHRv
cH07Ci0gIH0KLQotICBmdW5jdGlvbiBjaGFyQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVP
YmopIHsKLSAgICBpZiAoIWxpbmVPYmopIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxp
bmUpOwotICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFy
KGNtLCBsaW5lT2JqLCBwb3MuY2gpLCBjb250ZXh0KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGN1cnNv
ckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBtZWFzdXJlbWVudCkgewotICAgIGxp
bmVPYmogPSBsaW5lT2JqIHx8IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7Ci0gICAgaWYgKCFt
ZWFzdXJlbWVudCkgbWVhc3VyZW1lbnQgPSBtZWFzdXJlTGluZShjbSwgbGluZU9iaik7Ci0gICAg
ZnVuY3Rpb24gZ2V0KGNoLCByaWdodCkgewotICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhcihjbSwg
bGluZU9iaiwgY2gsIG1lYXN1cmVtZW50KTsKLSAgICAgIGlmIChyaWdodCkgbS5sZWZ0ID0gbS5y
aWdodDsgZWxzZSBtLnJpZ2h0ID0gbS5sZWZ0OwotICAgICAgcmV0dXJuIGludG9Db29yZFN5c3Rl
bShjbSwgbGluZU9iaiwgbSwgY29udGV4dCk7Ci0gICAgfQotICAgIHZhciBvcmRlciA9IGdldE9y
ZGVyKGxpbmVPYmopLCBjaCA9IHBvcy5jaDsKLSAgICBpZiAoIW9yZGVyKSByZXR1cm4gZ2V0KGNo
KTsKLSAgICB2YXIgbWFpbiwgb3RoZXIsIGxpbmVkaXIgPSBvcmRlclswXS5sZXZlbDsKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgcGFydCA9
IG9yZGVyW2ldLCBydGwgPSBwYXJ0LmxldmVsICUgMiwgbmIsIGhlcmU7Ci0gICAgICBpZiAocGFy
dC5mcm9tIDwgY2ggJiYgcGFydC50byA+IGNoKSByZXR1cm4gZ2V0KGNoLCBydGwpOwotICAgICAg
dmFyIGxlZnQgPSBydGwgPyBwYXJ0LnRvIDogcGFydC5mcm9tLCByaWdodCA9IHJ0bCA/IHBhcnQu
ZnJvbSA6IHBhcnQudG87Ci0gICAgICBpZiAobGVmdCA9PSBjaCkgewotICAgICAgICAvLyBJRSBy
ZXR1cm5zIGJvZ3VzIG9mZnNldHMgYW5kIHdpZHRocyBmb3IgZWRnZXMgd2hlcmUgdGhlCi0gICAg
ICAgIC8vIGRpcmVjdGlvbiBmbGlwcywgYnV0IG9ubHkgZm9yIHRoZSBzaWRlIHdpdGggdGhlIGxv
d2VyCi0gICAgICAgIC8vIGxldmVsLiBTbyB3ZSB0cnkgdG8gdXNlIHRoZSBzaWRlIHdpdGggdGhl
IGhpZ2hlciBsZXZlbC4KLSAgICAgICAgaWYgKGkgJiYgcGFydC5sZXZlbCA8IChuYiA9IG9yZGVy
W2ktMV0pLmxldmVsKSBoZXJlID0gZ2V0KG5iLmxldmVsICUgMiA/IG5iLmZyb20gOiBuYi50byAt
IDEsIHRydWUpOwotICAgICAgICBlbHNlIGhlcmUgPSBnZXQocnRsICYmIHBhcnQuZnJvbSAhPSBw
YXJ0LnRvID8gY2ggLSAxIDogY2gpOwotICAgICAgICBpZiAocnRsID09IGxpbmVkaXIpIG1haW4g
PSBoZXJlOyBlbHNlIG90aGVyID0gaGVyZTsKLSAgICAgIH0gZWxzZSBpZiAocmlnaHQgPT0gY2gp
IHsKLSAgICAgICAgdmFyIG5iID0gaSA8IG9yZGVyLmxlbmd0aCAtIDEgJiYgb3JkZXJbaSsxXTsK
LSAgICAgICAgaWYgKCFydGwgJiYgbmIgJiYgbmIuZnJvbSA9PSBuYi50bykgY29udGludWU7Ci0g
ICAgICAgIGlmIChuYiAmJiBwYXJ0LmxldmVsIDwgbmIubGV2ZWwpIGhlcmUgPSBnZXQobmIubGV2
ZWwgJSAyID8gbmIudG8gLSAxIDogbmIuZnJvbSk7Ci0gICAgICAgIGVsc2UgaGVyZSA9IGdldChy
dGwgPyBjaCA6IGNoIC0gMSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChydGwgPT0gbGluZWRpcikgbWFp
biA9IGhlcmU7IGVsc2Ugb3RoZXIgPSBoZXJlOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobGlu
ZWRpciAmJiAhY2gpIG90aGVyID0gZ2V0KG9yZGVyWzBdLnRvIC0gMSk7Ci0gICAgaWYgKCFtYWlu
KSByZXR1cm4gb3RoZXI7Ci0gICAgaWYgKG90aGVyKSBtYWluLm90aGVyID0gb3RoZXI7Ci0gICAg
cmV0dXJuIG1haW47Ci0gIH0KLQotICBmdW5jdGlvbiBQb3NNYXliZU91dHNpZGUobGluZSwgY2gs
IG91dHNpZGUpIHsKLSAgICB2YXIgcG9zID0gbmV3IFBvcyhsaW5lLCBjaCk7Ci0gICAgaWYgKG91
dHNpZGUpIHBvcy5vdXRzaWRlID0gdHJ1ZTsKLSAgICByZXR1cm4gcG9zOwotICB9Ci0KLSAgLy8g
Q29vcmRzIG11c3QgYmUgbGluZVNwYWNlLWxvY2FsCi0gIGZ1bmN0aW9uIGNvb3Jkc0NoYXIoY20s
IHgsIHkpIHsKLSAgICB2YXIgZG9jID0gY20uZG9jOwotICAgIHkgKz0gY20uZGlzcGxheS52aWV3
T2Zmc2V0OwotICAgIGlmICh5IDwgMCkgcmV0dXJuIFBvc01heWJlT3V0c2lkZShkb2MuZmlyc3Qs
IDAsIHRydWUpOwotICAgIHZhciBsaW5lTm8gPSBsaW5lQXRIZWlnaHQoZG9jLCB5KSwgbGFzdCA9
IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsKLSAgICBpZiAobGluZU5vID4gbGFzdCkKLSAgICAg
IHJldHVybiBQb3NNYXliZU91dHNpZGUoZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5l
KGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIHRydWUpOwotICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0K
LSAgICBmb3IgKDs7KSB7Ci0gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lTm8p
OwotICAgICAgdmFyIGZvdW5kID0gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8s
IHgsIHkpOwotICAgICAgdmFyIG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lT2JqKTsK
LSAgICAgIHZhciBtZXJnZWRQb3MgPSBtZXJnZWQgJiYgbWVyZ2VkLmZpbmQoKTsKLSAgICAgIGlm
IChtZXJnZWQgJiYgZm91bmQuY2ggPj0gbWVyZ2VkUG9zLmZyb20uY2gpCi0gICAgICAgIGxpbmVO
byA9IG1lcmdlZFBvcy50by5saW5lOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZm91bmQ7
Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBs
aW5lTm8sIHgsIHkpIHsKLSAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGNtLCBs
aW5lT2JqKTsKLSAgICB2YXIgd3JvbmdMaW5lID0gZmFsc2UsIGFkanVzdCA9IDIgKiBjbS5kaXNw
bGF5LndyYXBwZXIuY2xpZW50V2lkdGg7Ci0gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZUxp
bmUoY20sIGxpbmVPYmopOwotCi0gICAgZnVuY3Rpb24gZ2V0WChjaCkgewotICAgICAgdmFyIHNw
ID0gY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBjaCksICJsaW5lIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lT2JqLCBtZWFzdXJlbWVudCk7Ci0gICAgICB3cm9uZ0xpbmUg
PSB0cnVlOwotICAgICAgaWYgKGlubmVyT2ZmID4gc3AuYm90dG9tKSByZXR1cm4gc3AubGVmdCAt
IGFkanVzdDsKLSAgICAgIGVsc2UgaWYgKGlubmVyT2ZmIDwgc3AudG9wKSByZXR1cm4gc3AubGVm
dCArIGFkanVzdDsKLSAgICAgIGVsc2Ugd3JvbmdMaW5lID0gZmFsc2U7Ci0gICAgICByZXR1cm4g
c3AubGVmdDsKLSAgICB9Ci0KLSAgICB2YXIgYmlkaSA9IGdldE9yZGVyKGxpbmVPYmopLCBkaXN0
ID0gbGluZU9iai50ZXh0Lmxlbmd0aDsKLSAgICB2YXIgZnJvbSA9IGxpbmVMZWZ0KGxpbmVPYmop
LCB0byA9IGxpbmVSaWdodChsaW5lT2JqKTsKLSAgICB2YXIgZnJvbVggPSBnZXRYKGZyb20pLCBm
cm9tT3V0c2lkZSA9IHdyb25nTGluZSwgdG9YID0gZ2V0WCh0byksIHRvT3V0c2lkZSA9IHdyb25n
TGluZTsKLQotICAgIGlmICh4ID4gdG9YKSByZXR1cm4gUG9zTWF5YmVPdXRzaWRlKGxpbmVObywg
dG8sIHRvT3V0c2lkZSk7Ci0gICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIGJldHdlZW4gdGhlc2Ug
Ym91bmRzLgotICAgIGZvciAoOzspIHsKLSAgICAgIGlmIChiaWRpID8gdG8gPT0gZnJvbSB8fCB0
byA9PSBtb3ZlVmlzdWFsbHkobGluZU9iaiwgZnJvbSwgMSkgOiB0byAtIGZyb20gPD0gMSkgewot
ICAgICAgICB2YXIgYWZ0ZXIgPSB4IC0gZnJvbVggPCB0b1ggLSB4LCBjaCA9IGFmdGVyID8gZnJv
bSA6IHRvOwotICAgICAgICB3aGlsZSAoaXNFeHRlbmRpbmdDaGFyLnRlc3QobGluZU9iai50ZXh0
LmNoYXJBdChjaCkpKSArK2NoOwotICAgICAgICB2YXIgcG9zID0gUG9zTWF5YmVPdXRzaWRlKGxp
bmVObywgY2gsIGFmdGVyID8gZnJvbU91dHNpZGUgOiB0b091dHNpZGUpOwotICAgICAgICBwb3Mu
YWZ0ZXIgPSBhZnRlcjsKLSAgICAgICAgcmV0dXJuIHBvczsKLSAgICAgIH0KLSAgICAgIHZhciBz
dGVwID0gTWF0aC5jZWlsKGRpc3QgLyAyKSwgbWlkZGxlID0gZnJvbSArIHN0ZXA7Ci0gICAgICBp
ZiAoYmlkaSkgewotICAgICAgICBtaWRkbGUgPSBmcm9tOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHN0ZXA7ICsraSkgbWlkZGxlID0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIG1pZGRsZSwg
MSk7Ci0gICAgICB9Ci0gICAgICB2YXIgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKLSAgICAgIGlm
IChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYOyBpZiAodG9PdXRzaWRl
ID0gd3JvbmdMaW5lKSB0b1ggKz0gMTAwMDsgZGlzdCAtPSBzdGVwO30KLSAgICAgIGVsc2Uge2Zy
b20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDsgZnJvbU91dHNpZGUgPSB3cm9uZ0xpbmU7IGRp
c3QgPSBzdGVwO30KLSAgICB9Ci0gIH0KLQotICB2YXIgbWVhc3VyZVRleHQ7Ci0gIGZ1bmN0aW9u
IHRleHRIZWlnaHQoZGlzcGxheSkgewotICAgIGlmIChkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQg
IT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDsKLSAgICBpZiAobWVhc3Vy
ZVRleHQgPT0gbnVsbCkgewotICAgICAgbWVhc3VyZVRleHQgPSBlbHQoInByZSIpOwotICAgICAg
Ly8gTWVhc3VyZSBhIGJ1bmNoIG9mIGxpbmVzLCBmb3IgYnJvd3NlcnMgdGhhdCBjb21wdXRlCi0g
ICAgICAvLyBmcmFjdGlvbmFsIGhlaWdodHMuCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ5
OyArK2kpIHsKLSAgICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIngiKSk7Ci0gICAgICAgIG1lYXN1cmVUZXh0LmFwcGVuZENoaWxkKGVsdCgiYnIi
KSk7Ci0gICAgICB9Ci0gICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgieCIpKTsKLSAgICB9Ci0gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxh
eS5tZWFzdXJlLCBtZWFzdXJlVGV4dCk7Ci0gICAgdmFyIGhlaWdodCA9IG1lYXN1cmVUZXh0Lm9m
ZnNldEhlaWdodCAvIDUwOwotICAgIGlmIChoZWlnaHQgPiAzKSBkaXNwbGF5LmNhY2hlZFRleHRI
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5tZWFzdXJlKTsKLSAg
ICByZXR1cm4gaGVpZ2h0IHx8IDE7Ci0gIH0KLQotICBmdW5jdGlvbiBjaGFyV2lkdGgoZGlzcGxh
eSkgewotICAgIGlmIChkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCAhPSBudWxsKSByZXR1cm4gZGlz
cGxheS5jYWNoZWRDaGFyV2lkdGg7Ci0gICAgdmFyIGFuY2hvciA9IGVsdCgic3BhbiIsICJ4Iik7
Ci0gICAgdmFyIHByZSA9IGVsdCgicHJlIiwgW2FuY2hvcl0pOwotICAgIHJlbW92ZUNoaWxkcmVu
QW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTsKLSAgICB2YXIgd2lkdGggPSBhbmNob3Iub2Zm
c2V0V2lkdGg7Ci0gICAgaWYgKHdpZHRoID4gMikgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3
aWR0aDsKLSAgICByZXR1cm4gd2lkdGggfHwgMTA7Ci0gIH0KLQotICAvLyBPUEVSQVRJT05TCi0K
LSAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGNoYW5nZXMgaW4gc3VjaCBhIHdheSB0
aGF0IGVhY2gKLSAgLy8gY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZSBjdXJzb3IgYW5k
IGRpc3BsYXkgKHdoaWNoIHdvdWxkCi0gIC8vIGJlIGF3a3dhcmQsIHNsb3csIGFuZCBlcnJvci1w
cm9uZSksIGJ1dCBpbnN0ZWFkIHVwZGF0ZXMgYXJlCi0gIC8vIGJhdGNoZWQgYW5kIHRoZW4gYWxs
IGNvbWJpbmVkIGFuZCBleGVjdXRlZCBhdCBvbmNlLgotCi0gIHZhciBuZXh0T3BJZCA9IDA7Ci0g
IGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKGNtKSB7Ci0gICAgY20uY3VyT3AgPSB7Ci0gICAgICAv
LyBBbiBhcnJheSBvZiByYW5nZXMgb2YgbGluZXMgdGhhdCBoYXZlIHRvIGJlIHVwZGF0ZWQuIFNl
ZQotICAgICAgLy8gdXBkYXRlRGlzcGxheS4KLSAgICAgIGNoYW5nZXM6IFtdLAotICAgICAgdXBk
YXRlSW5wdXQ6IG51bGwsCi0gICAgICB1c2VyU2VsQ2hhbmdlOiBudWxsLAotICAgICAgdGV4dENo
YW5nZWQ6IG51bGwsCi0gICAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmYWxzZSwKLSAgICAgIHVwZGF0
ZU1heExpbmU6IGZhbHNlLAotICAgICAgdXBkYXRlU2Nyb2xsUG9zOiBmYWxzZSwKLSAgICAgIGlk
OiArK25leHRPcElkCi0gICAgfTsKLSAgICBpZiAoIWRlbGF5ZWRDYWxsYmFja0RlcHRoKyspIGRl
bGF5ZWRDYWxsYmFja3MgPSBbXTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbihjbSkg
ewotICAgIHZhciBvcCA9IGNtLmN1ck9wLCBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNw
bGF5OwotICAgIGNtLmN1ck9wID0gbnVsbDsKLQotICAgIGlmIChvcC51cGRhdGVNYXhMaW5lKSBj
b21wdXRlTWF4TGVuZ3RoKGNtKTsKLSAgICBpZiAoZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiAh
Y20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIHZhciB3aWR0aCA9IG1lYXN1cmVMaW5l
V2lkdGgoY20sIGRpc3BsYXkubWF4TGluZSk7Ci0gICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1p
bldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzICsgc2Nyb2xsZXJDdXRPZmYpICsgInB4IjsK
LSAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgIHZhciBtYXhTY3Jv
bGxMZWZ0ID0gTWF0aC5tYXgoMCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgZGlzcGxheS5z
aXplci5vZmZzZXRXaWR0aCAtIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpOwotICAgICAg
aWYgKG1heFNjcm9sbExlZnQgPCBkb2Muc2Nyb2xsTGVmdCAmJiAhb3AudXBkYXRlU2Nyb2xsUG9z
KQotICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNj
cm9sbExlZnQsIG1heFNjcm9sbExlZnQpLCB0cnVlKTsKLSAgICB9Ci0gICAgdmFyIG5ld1Njcm9s
bFBvcywgdXBkYXRlZDsKLSAgICBpZiAob3AudXBkYXRlU2Nyb2xsUG9zKSB7Ci0gICAgICBuZXdT
Y3JvbGxQb3MgPSBvcC51cGRhdGVTY3JvbGxQb3M7Ci0gICAgfSBlbHNlIGlmIChvcC5zZWxlY3Rp
b25DaGFuZ2VkICYmIGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSB7IC8vIGRvbid0IHJl
c2Nyb2xsIGlmIG5vdCB2aXNpYmxlCi0gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNt
LCBkb2Muc2VsLmhlYWQpOwotICAgICAgbmV3U2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9z
KGNtLCBjb29yZHMubGVmdCwgY29vcmRzLnRvcCwgY29vcmRzLmxlZnQsIGNvb3Jkcy5ib3R0b20p
OwotICAgIH0KLSAgICBpZiAob3AuY2hhbmdlcy5sZW5ndGggfHwgbmV3U2Nyb2xsUG9zICYmIG5l
d1Njcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkgewotICAgICAgdXBkYXRlZCA9IHVwZGF0ZURp
c3BsYXkoY20sIG9wLmNoYW5nZXMsIG5ld1Njcm9sbFBvcyAmJiBuZXdTY3JvbGxQb3Muc2Nyb2xs
VG9wKTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLm9mZnNldEhlaWdodCkgY20uZG9j
LnNjcm9sbFRvcCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwotICAgIH0KLSAgICBp
ZiAoIXVwZGF0ZWQgJiYgb3Auc2VsZWN0aW9uQ2hhbmdlZCkgdXBkYXRlU2VsZWN0aW9uKGNtKTsK
LSAgICBpZiAob3AudXBkYXRlU2Nyb2xsUG9zKSB7Ci0gICAgICBkaXNwbGF5LnNjcm9sbGVyLnNj
cm9sbFRvcCA9IGRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSBkb2Muc2Nyb2xsVG9wID0g
bmV3U2Nyb2xsUG9zLnNjcm9sbFRvcDsKLSAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVm
dCA9IGRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ID0gZG9jLnNjcm9sbExlZnQgPSBuZXdT
Y3JvbGxQb3Muc2Nyb2xsTGVmdDsKLSAgICAgIGFsaWduSG9yaXpvbnRhbGx5KGNtKTsKLSAgICB9
IGVsc2UgaWYgKG5ld1Njcm9sbFBvcykgewotICAgICAgc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoY20p
OwotICAgIH0KLSAgICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgcmVzdGFydEJsaW5rKGNtKTsK
LQotICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KQotICAgICAgcmVz
ZXRJbnB1dChjbSwgb3AudXNlclNlbENoYW5nZSk7Ci0KLSAgICB2YXIgaGlkZGVuID0gb3AubWF5
YmVIaWRkZW5NYXJrZXJzLCB1bmhpZGRlbiA9IG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzOwotICAg
IGlmIChoaWRkZW4pIGZvciAodmFyIGkgPSAwOyBpIDwgaGlkZGVuLmxlbmd0aDsgKytpKQotICAg
ICAgaWYgKCFoaWRkZW5baV0ubGluZXMubGVuZ3RoKSBzaWduYWwoaGlkZGVuW2ldLCAiaGlkZSIp
OwotICAgIGlmICh1bmhpZGRlbikgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmhpZGRlbi5sZW5ndGg7
ICsraSkKLSAgICAgIGlmICh1bmhpZGRlbltpXS5saW5lcy5sZW5ndGgpIHNpZ25hbCh1bmhpZGRl
bltpXSwgInVuaGlkZSIpOwotCi0gICAgdmFyIGRlbGF5ZWQ7Ci0gICAgaWYgKCEtLWRlbGF5ZWRD
YWxsYmFja0RlcHRoKSB7Ci0gICAgICBkZWxheWVkID0gZGVsYXllZENhbGxiYWNrczsKLSAgICAg
IGRlbGF5ZWRDYWxsYmFja3MgPSBudWxsOwotICAgIH0KLSAgICBpZiAob3AudGV4dENoYW5nZWQp
Ci0gICAgICBzaWduYWwoY20sICJjaGFuZ2UiLCBjbSwgb3AudGV4dENoYW5nZWQpOwotICAgIGlm
IChvcC5zZWxlY3Rpb25DaGFuZ2VkKSBzaWduYWwoY20sICJjdXJzb3JBY3Rpdml0eSIsIGNtKTsK
LSAgICBpZiAoZGVsYXllZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsgKytp
KSBkZWxheWVkW2ldKCk7Ci0gIH0KLQotICAvLyBXcmFwcyBhIGZ1bmN0aW9uIGluIGFuIG9wZXJh
dGlvbi4gUmV0dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbi4KLSAgZnVuY3Rpb24gb3BlcmF0aW9u
KGNtMSwgZikgewotICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBjbSA9IGNtMSB8
fCB0aGlzLCB3aXRoT3AgPSAhY20uY3VyT3A7Ci0gICAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJh
dGlvbihjbSk7Ci0gICAgICB0cnkgeyB2YXIgcmVzdWx0ID0gZi5hcHBseShjbSwgYXJndW1lbnRz
KTsgfQotICAgICAgZmluYWxseSB7IGlmICh3aXRoT3ApIGVuZE9wZXJhdGlvbihjbSk7IH0KLSAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkb2NPcGVyYXRpb24o
ZikgewotICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciB3aXRoT3AgPSB0aGlzLmNt
ICYmICF0aGlzLmNtLmN1ck9wLCByZXN1bHQ7Ci0gICAgICBpZiAod2l0aE9wKSBzdGFydE9wZXJh
dGlvbih0aGlzLmNtKTsKLSAgICAgIHRyeSB7IHJlc3VsdCA9IGYuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsgfQotICAgICAgZmluYWxseSB7IGlmICh3aXRoT3ApIGVuZE9wZXJhdGlvbih0aGlzLmNt
KTsgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIHJ1bklu
T3AoY20sIGYpIHsKLSAgICB2YXIgd2l0aE9wID0gIWNtLmN1ck9wLCByZXN1bHQ7Ci0gICAgaWYg
KHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIHRyeSB7IHJlc3VsdCA9IGYoKTsgfQot
ICAgIGZpbmFsbHkgeyBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20pOyB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlZ0NoYW5nZShjbSwgZnJvbSwgdG8sIGxlbmRp
ZmYpIHsKLSAgICBpZiAoZnJvbSA9PSBudWxsKSBmcm9tID0gY20uZG9jLmZpcnN0OwotICAgIGlm
ICh0byA9PSBudWxsKSB0byA9IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplOwotICAgIGNtLmN1
ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbSwgdG86IHRvLCBkaWZmOiBsZW5kaWZmfSk7Ci0g
IH0KLQotICAvLyBJTlBVVCBIQU5ETElORwotCi0gIGZ1bmN0aW9uIHNsb3dQb2xsKGNtKSB7Ci0g
ICAgaWYgKGNtLmRpc3BsYXkucG9sbGluZ0Zhc3QpIHJldHVybjsKLSAgICBjbS5kaXNwbGF5LnBv
bGwuc2V0KGNtLm9wdGlvbnMucG9sbEludGVydmFsLCBmdW5jdGlvbigpIHsKLSAgICAgIHJlYWRJ
bnB1dChjbSk7Ci0gICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2xvd1BvbGwoY20pOwotICAg
IH0pOwotICB9Ci0KLSAgZnVuY3Rpb24gZmFzdFBvbGwoY20pIHsKLSAgICB2YXIgbWlzc2VkID0g
ZmFsc2U7Ci0gICAgY20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IHRydWU7Ci0gICAgZnVuY3Rpb24g
cCgpIHsKLSAgICAgIHZhciBjaGFuZ2VkID0gcmVhZElucHV0KGNtKTsKLSAgICAgIGlmICghY2hh
bmdlZCAmJiAhbWlzc2VkKSB7bWlzc2VkID0gdHJ1ZTsgY20uZGlzcGxheS5wb2xsLnNldCg2MCwg
cCk7fQotICAgICAgZWxzZSB7Y20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IGZhbHNlOyBzbG93UG9s
bChjbSk7fQotICAgIH0KLSAgICBjbS5kaXNwbGF5LnBvbGwuc2V0KDIwLCBwKTsKLSAgfQotCi0g
IC8vIHByZXZJbnB1dCBpcyBhIGhhY2sgdG8gd29yayB3aXRoIElNRS4gSWYgd2UgcmVzZXQgdGhl
IHRleHRhcmVhCi0gIC8vIG9uIGV2ZXJ5IGNoYW5nZSwgdGhhdCBicmVha3MgSU1FLiBTbyB3ZSBs
b29rIGZvciBjaGFuZ2VzCi0gIC8vIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBjb250ZW50IGlu
c3RlYWQuIChNb2Rlcm4gYnJvd3NlcnMgaGF2ZQotICAvLyBldmVudHMgdGhhdCBpbmRpY2F0ZSBJ
TUUgdGFraW5nIHBsYWNlLCBidXQgdGhlc2UgYXJlIG5vdCB3aWRlbHkKLSAgLy8gc3VwcG9ydGVk
IG9yIGNvbXBhdGlibGUgZW5vdWdoIHlldCB0byByZWx5IG9uLikKLSAgZnVuY3Rpb24gcmVhZElu
cHV0KGNtKSB7Ci0gICAgdmFyIGlucHV0ID0gY20uZGlzcGxheS5pbnB1dCwgcHJldklucHV0ID0g
Y20uZGlzcGxheS5wcmV2SW5wdXQsIGRvYyA9IGNtLmRvYywgc2VsID0gZG9jLnNlbDsKLSAgICBp
ZiAoIWNtLnN0YXRlLmZvY3VzZWQgfHwgaGFzU2VsZWN0aW9uKGlucHV0KSB8fCBpc1JlYWRPbmx5
KGNtKSkgcmV0dXJuIGZhbHNlOwotICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7Ci0gICAgaWYg
KHRleHQgPT0gcHJldklucHV0ICYmIHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gZmFs
c2U7Ci0gICAgLy8gSUUgZW5qb3lzIHJhbmRvbWx5IGRlc2VsZWN0aW5nIG91ciBpbnB1dCdzIHRl
eHQgd2hlbgotICAgIC8vIHJlLWZvY3VzaW5nLiBJZiB0aGUgc2VsZWN0aW9uIGlzIGdvbmUgYnV0
IHRoZSBjdXJzb3IgaXMgYXQgdGhlCi0gICAgLy8gc3RhcnQgb2YgdGhlIGlucHV0LCB0aGF0J3Mg
cHJvYmFibHkgd2hhdCBoYXBwZW5lZC4KLSAgICBpZiAoaWUgJiYgdGV4dCAmJiBpbnB1dC5zZWxl
Y3Rpb25TdGFydCA9PT0gMCkgewotICAgICAgcmVzZXRJbnB1dChjbSwgdHJ1ZSk7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZhciB3aXRoT3AgPSAhY20uY3VyT3A7Ci0gICAgaWYg
KHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIHNlbC5zaGlmdCA9IGZhbHNlOwotICAg
IHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3Ro
KTsKLSAgICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0W3NhbWVdID09IHRleHRbc2FtZV0p
ICsrc2FtZTsKLSAgICB2YXIgZnJvbSA9IHNlbC5mcm9tLCB0byA9IHNlbC50bzsKLSAgICBpZiAo
c2FtZSA8IHByZXZJbnB1dC5sZW5ndGgpCi0gICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJv
bS5jaCAtIChwcmV2SW5wdXQubGVuZ3RoIC0gc2FtZSkpOwotICAgIGVsc2UgaWYgKGNtLnN0YXRl
Lm92ZXJ3cml0ZSAmJiBwb3NFcShmcm9tLCB0bykgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcp
Ci0gICAgICB0byA9IFBvcyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGluZSku
dGV4dC5sZW5ndGgsIHRvLmNoICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpKTsKLSAgICB2YXIgdXBk
YXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDsKLSAgICBtYWtlQ2hhbmdlKGNtLmRvYywg
e2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LnNsaWNlKHNhbWUpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/
ICJwYXN0ZSIgOiAiK2lucHV0In0sICJlbmQiKTsKLQotICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0
ID0gdXBkYXRlSW5wdXQ7Ci0gICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCkgaW5wdXQudmFsdWUg
PSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9ICIiOwotICAgIGVsc2UgY20uZGlzcGxheS5wcmV2SW5w
dXQgPSB0ZXh0OwotICAgIGlmICh3aXRoT3ApIGVuZE9wZXJhdGlvbihjbSk7Ci0gICAgY20uc3Rh
dGUucGFzdGVJbmNvbWluZyA9IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgZnVu
Y3Rpb24gcmVzZXRJbnB1dChjbSwgdXNlcikgewotICAgIHZhciBtaW5pbWFsLCBzZWxlY3RlZCwg
ZG9jID0gY20uZG9jOwotICAgIGlmICghcG9zRXEoZG9jLnNlbC5mcm9tLCBkb2Muc2VsLnRvKSkg
ewotICAgICAgY20uZGlzcGxheS5wcmV2SW5wdXQgPSAiIjsKLSAgICAgIG1pbmltYWwgPSBoYXND
b3B5RXZlbnQgJiYKLSAgICAgICAgKGRvYy5zZWwudG8ubGluZSAtIGRvYy5zZWwuZnJvbS5saW5l
ID4gMTAwIHx8IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlvbigpKS5sZW5ndGggPiAxMDAwKTsK
LSAgICAgIGlmIChtaW5pbWFsKSBjbS5kaXNwbGF5LmlucHV0LnZhbHVlID0gIi0iOwotICAgICAg
ZWxzZSBjbS5kaXNwbGF5LmlucHV0LnZhbHVlID0gc2VsZWN0ZWQgfHwgY20uZ2V0U2VsZWN0aW9u
KCk7Ci0gICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxheS5p
bnB1dCk7Ci0gICAgfSBlbHNlIGlmICh1c2VyKSBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IGNtLmRp
c3BsYXkuaW5wdXQudmFsdWUgPSAiIjsKLSAgICBjbS5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rp
b24gPSBtaW5pbWFsOwotICB9Ci0KLSAgZnVuY3Rpb24gZm9jdXNJbnB1dChjbSkgewotICAgIGlm
IChjbS5vcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1cnNvciIgJiYgKCFtb2JpbGUgfHwgZG9jdW1l
bnQuYWN0aXZlRWxlbWVudCAhPSBjbS5kaXNwbGF5LmlucHV0KSkKLSAgICAgIGNtLmRpc3BsYXku
aW5wdXQuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzUmVhZE9ubHkoY20pIHsKLSAgICBy
ZXR1cm4gY20ub3B0aW9ucy5yZWFkT25seSB8fCBjbS5kb2MuY2FudEVkaXQ7Ci0gIH0KLQotICAv
LyBFVkVOVCBIQU5ETEVSUwotCi0gIGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyhjbSkg
ewotICAgIHZhciBkID0gY20uZGlzcGxheTsKLSAgICBvbihkLnNjcm9sbGVyLCAibW91c2Vkb3du
Iiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpOwotICAgIG9uKGQuc2Nyb2xsZXIsICJkYmxj
bGljayIsIG9wZXJhdGlvbihjbSwgZV9wcmV2ZW50RGVmYXVsdCkpOwotICAgIG9uKGQubGluZVNw
YWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihlKSB7Ci0gICAgICBpZiAoIWV2ZW50SW5XaWRn
ZXQoZCwgZSkpIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgfSk7Ci0gICAgLy8gR2Vja28gYnJv
d3NlcnMgZmlyZSBjb250ZXh0bWVudSAqYWZ0ZXIqIG9wZW5pbmcgdGhlIG1lbnUsIGF0Ci0gICAg
Ly8gd2hpY2ggcG9pbnQgd2UgY2FuJ3QgbWVzcyB3aXRoIGl0IGFueW1vcmUuIENvbnRleHQgbWVu
dSBpcwotICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIEdlY2tvLgotICAgIGlmICgh
Y2FwdHVyZU1pZGRsZUNsaWNrKSBvbihkLnNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBmdW5jdGlv
bihlKSB7b25Db250ZXh0TWVudShjbSwgZSk7fSk7Ci0KLSAgICBvbihkLnNjcm9sbGVyLCAic2Ny
b2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHsK
LSAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBkLnNjcm9sbGVyLnNjcm9sbFRvcCk7Ci0gICAgICAg
IHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdHJ1ZSk7Ci0gICAgICAg
IHNpZ25hbChjbSwgInNjcm9sbCIsIGNtKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBvbihkLnNj
cm9sbGJhclYsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChkLnNjcm9sbGVyLmNs
aWVudEhlaWdodCkgc2V0U2Nyb2xsVG9wKGNtLCBkLnNjcm9sbGJhclYuc2Nyb2xsVG9wKTsKLSAg
ICB9KTsKLSAgICBvbihkLnNjcm9sbGJhckgsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKLSAgICAg
IGlmIChkLnNjcm9sbGVyLmNsaWVudEhlaWdodCkgc2V0U2Nyb2xsTGVmdChjbSwgZC5zY3JvbGxi
YXJILnNjcm9sbExlZnQpOwotICAgIH0pOwotCi0gICAgb24oZC5zY3JvbGxlciwgIm1vdXNld2hl
ZWwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKLSAgICBvbihkLnNjcm9s
bGVyLCAiRE9NTW91c2VTY3JvbGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9
KTsKLQotICAgIGZ1bmN0aW9uIHJlRm9jdXMoKSB7IGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZXRU
aW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAwKTsgfQotICAgIG9uKGQuc2Nyb2xsYmFySCwg
Im1vdXNlZG93biIsIHJlRm9jdXMpOwotICAgIG9uKGQuc2Nyb2xsYmFyViwgIm1vdXNlZG93biIs
IHJlRm9jdXMpOwotICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nCi0g
ICAgb24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5zY3JvbGxU
b3AgPSBkLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOwotCi0gICAgZnVuY3Rpb24gb25SZXNp
emUoKSB7Ci0gICAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRpb24sIGNsZWFy
IHNpemUgY2FjaGVzLgotICAgICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWln
aHQgPSBudWxsOwotICAgICAgY2xlYXJDYWNoZXMoY20pOwotICAgICAgcnVuSW5PcChjbSwgYmlu
ZChyZWdDaGFuZ2UsIGNtKSk7Ci0gICAgfQotICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIG9uUmVz
aXplKTsKLSAgICAvLyBBYm92ZSBoYW5kbGVyIGhvbGRzIG9uIHRvIHRoZSBlZGl0b3IgYW5kIGl0
cyBkYXRhIHN0cnVjdHVyZXMuCi0gICAgLy8gSGVyZSB3ZSBwb2xsIHRvIHVucmVnaXN0ZXIgaXQg
d2hlbiB0aGUgZWRpdG9yIGlzIG5vIGxvbmdlciBpbgotICAgIC8vIHRoZSBkb2N1bWVudCwgc28g
dGhhdCBpdCBjYW4gYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuCi0gICAgZnVuY3Rpb24gdW5yZWdpc3Rl
cigpIHsKLSAgICAgIGZvciAodmFyIHAgPSBkLndyYXBwZXIucGFyZW50Tm9kZTsgcCAmJiBwICE9
IGRvY3VtZW50LmJvZHk7IHAgPSBwLnBhcmVudE5vZGUpIHt9Ci0gICAgICBpZiAocCkgc2V0VGlt
ZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKLSAgICAgIGVsc2Ugb2ZmKHdpbmRvdywgInJlc2l6ZSIs
IG9uUmVzaXplKTsKLSAgICB9Ci0gICAgc2V0VGltZW91dCh1bnJlZ2lzdGVyLCA1MDAwKTsKLQot
ICAgIG9uKGQuaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZSkgewotICAg
ICAgaWYgKGNtLm9wdGlvbnMub25LZXlFdmVudCAmJiBjbS5vcHRpb25zLm9uS2V5RXZlbnQoY20s
IGFkZFN0b3AoZSkpKSByZXR1cm47Ci0gICAgICBpZiAoZS5rZXlDb2RlID09IDE2KSBjbS5kb2Mu
c2VsLnNoaWZ0ID0gZmFsc2U7Ci0gICAgfSkpOwotICAgIG9uKGQuaW5wdXQsICJpbnB1dCIsIGJp
bmQoZmFzdFBvbGwsIGNtKSk7Ci0gICAgb24oZC5pbnB1dCwgImtleWRvd24iLCBvcGVyYXRpb24o
Y20sIG9uS2V5RG93bikpOwotICAgIG9uKGQuaW5wdXQsICJrZXlwcmVzcyIsIG9wZXJhdGlvbihj
bSwgb25LZXlQcmVzcykpOwotICAgIG9uKGQuaW5wdXQsICJmb2N1cyIsIGJpbmQob25Gb2N1cywg
Y20pKTsKLSAgICBvbihkLmlucHV0LCAiYmx1ciIsIGJpbmQob25CbHVyLCBjbSkpOwotCi0gICAg
ZnVuY3Rpb24gZHJhZ18oZSkgewotICAgICAgaWYgKGNtLm9wdGlvbnMub25EcmFnRXZlbnQgJiYg
Y20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKLSAgICAgIGVf
c3RvcChlKTsKLSAgICB9Ci0gICAgaWYgKGNtLm9wdGlvbnMuZHJhZ0Ryb3ApIHsKLSAgICAgIG9u
KGQuc2Nyb2xsZXIsICJkcmFnc3RhcnQiLCBmdW5jdGlvbihlKXtvbkRyYWdTdGFydChjbSwgZSk7
fSk7Ci0gICAgICBvbihkLnNjcm9sbGVyLCAiZHJhZ2VudGVyIiwgZHJhZ18pOwotICAgICAgb24o
ZC5zY3JvbGxlciwgImRyYWdvdmVyIiwgZHJhZ18pOwotICAgICAgb24oZC5zY3JvbGxlciwgImRy
b3AiLCBvcGVyYXRpb24oY20sIG9uRHJvcCkpOwotICAgIH0KLSAgICBvbihkLnNjcm9sbGVyLCAi
cGFzdGUiLCBmdW5jdGlvbihlKXsKLSAgICAgIGlmIChldmVudEluV2lkZ2V0KGQsIGUpKSByZXR1
cm47Ci0gICAgICBmb2N1c0lucHV0KGNtKTsKLSAgICAgIGZhc3RQb2xsKGNtKTsKLSAgICB9KTsK
LSAgICBvbihkLmlucHV0LCAicGFzdGUiLCBmdW5jdGlvbigpIHsKLSAgICAgIGNtLnN0YXRlLnBh
c3RlSW5jb21pbmcgPSB0cnVlOwotICAgICAgZmFzdFBvbGwoY20pOwotICAgIH0pOwotCi0gICAg
ZnVuY3Rpb24gcHJlcGFyZUNvcHkoKSB7Ci0gICAgICBpZiAoZC5pbmFjY3VyYXRlU2VsZWN0aW9u
KSB7Ci0gICAgICAgIGQucHJldklucHV0ID0gIiI7Ci0gICAgICAgIGQuaW5hY2N1cmF0ZVNlbGVj
dGlvbiA9IGZhbHNlOwotICAgICAgICBkLmlucHV0LnZhbHVlID0gY20uZ2V0U2VsZWN0aW9uKCk7
Ci0gICAgICAgIHNlbGVjdElucHV0KGQuaW5wdXQpOwotICAgICAgfQotICAgIH0KLSAgICBvbihk
LmlucHV0LCAiY3V0IiwgcHJlcGFyZUNvcHkpOwotICAgIG9uKGQuaW5wdXQsICJjb3B5IiwgcHJl
cGFyZUNvcHkpOwotCi0gICAgLy8gTmVlZGVkIHRvIGhhbmRsZSBUYWIga2V5IGluIEtIVE1MCi0g
ICAgaWYgKGtodG1sKSBvbihkLnNpemVyLCAibW91c2V1cCIsIGZ1bmN0aW9uKCkgewotICAgICAg
ICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkLmlucHV0KSBkLmlucHV0LmJsdXIoKTsK
LSAgICAgICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBldmVu
dEluV2lkZ2V0KGRpc3BsYXksIGUpIHsKLSAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4g
IT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7Ci0gICAgICBpZiAoIW4pIHJl
dHVybiB0cnVlOwotICAgICAgaWYgKC9cYkNvZGVNaXJyb3ItKD86bGluZSk/d2lkZ2V0XGIvLnRl
c3Qobi5jbGFzc05hbWUpIHx8Ci0gICAgICAgICAgbi5wYXJlbnROb2RlID09IGRpc3BsYXkuc2l6
ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBm
dW5jdGlvbiBwb3NGcm9tTW91c2UoY20sIGUsIGxpYmVyYWwpIHsKLSAgICB2YXIgZGlzcGxheSA9
IGNtLmRpc3BsYXk7Ci0gICAgaWYgKCFsaWJlcmFsKSB7Ci0gICAgICB2YXIgdGFyZ2V0ID0gZV90
YXJnZXQoZSk7Ci0gICAgICBpZiAodGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFySCB8fCB0YXJn
ZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQgfHwKLSAgICAgICAgICB0YXJnZXQg
PT0gZGlzcGxheS5zY3JvbGxiYXJWIHx8IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhclYuZmly
c3RDaGlsZCB8fAotICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckZpbGxlcikg
cmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHZhciB4LCB5LCBzcGFjZSA9IGdldFJlY3QoZGlzcGxh
eS5saW5lU3BhY2UpOwotICAgIC8vIEZhaWxzIHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4g
bW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVpY2tseS4KLSAgICB0cnkgeyB4ID0gZS5jbGllbnRY
OyB5ID0gZS5jbGllbnRZOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9Ci0gICAgcmV0dXJu
IGNvb3Jkc0NoYXIoY20sIHggLSBzcGFjZS5sZWZ0LCB5IC0gc3BhY2UudG9wKTsKLSAgfQotCi0g
IHZhciBsYXN0Q2xpY2ssIGxhc3REb3VibGVDbGljazsKLSAgZnVuY3Rpb24gb25Nb3VzZURvd24o
ZSkgewotICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5k
b2MsIHNlbCA9IGRvYy5zZWw7Ci0gICAgc2VsLnNoaWZ0ID0gZS5zaGlmdEtleTsKLQotICAgIGlm
IChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpKSB7Ci0gICAgICBpZiAoIXdlYmtpdCkgewotICAg
ICAgICBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlOwotICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7ZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlO30sIDEwMCk7
Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjbGlja0luR3V0dGVyKGNt
LCBlKSkgcmV0dXJuOwotICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7Ci0KLSAg
ICBzd2l0Y2ggKGVfYnV0dG9uKGUpKSB7Ci0gICAgY2FzZSAzOgotICAgICAgaWYgKGNhcHR1cmVN
aWRkbGVDbGljaykgb25Db250ZXh0TWVudS5jYWxsKGNtLCBjbSwgZSk7Ci0gICAgICByZXR1cm47
Ci0gICAgY2FzZSAyOgotICAgICAgaWYgKHN0YXJ0KSBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBz
dGFydCk7Ci0gICAgICBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAyMCk7Ci0gICAg
ICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGb3Ig
YnV0dG9uIDEsIGlmIGl0IHdhcyBjbGlja2VkIGluc2lkZSB0aGUgZWRpdG9yCi0gICAgLy8gKHBv
c0Zyb21Nb3VzZSByZXR1cm5pbmcgbm9uLW51bGwpLCB3ZSBoYXZlIHRvIGFkanVzdCB0aGUKLSAg
ICAvLyBzZWxlY3Rpb24uCi0gICAgaWYgKCFzdGFydCkge2lmIChlX3RhcmdldChlKSA9PSBkaXNw
bGF5LnNjcm9sbGVyKSBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47fQotCi0gICAgaWYgKCFj
bS5zdGF0ZS5mb2N1c2VkKSBvbkZvY3VzKGNtKTsKLQotICAgIHZhciBub3cgPSArbmV3IERhdGUs
IHR5cGUgPSAic2luZ2xlIjsKLSAgICBpZiAobGFzdERvdWJsZUNsaWNrICYmIGxhc3REb3VibGVD
bGljay50aW1lID4gbm93IC0gNDAwICYmIHBvc0VxKGxhc3REb3VibGVDbGljay5wb3MsIHN0YXJ0
KSkgewotICAgICAgdHlwZSA9ICJ0cmlwbGUiOwotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsK
LSAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIwKTsKLSAgICAgIHNlbGVj
dExpbmUoY20sIHN0YXJ0LmxpbmUpOwotICAgIH0gZWxzZSBpZiAobGFzdENsaWNrICYmIGxhc3RD
bGljay50aW1lID4gbm93IC0gNDAwICYmIHBvc0VxKGxhc3RDbGljay5wb3MsIHN0YXJ0KSkgewot
ICAgICAgdHlwZSA9ICJkb3VibGUiOwotICAgICAgbGFzdERvdWJsZUNsaWNrID0ge3RpbWU6IG5v
dywgcG9zOiBzdGFydH07Ci0gICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgdmFyIHdv
cmQgPSBmaW5kV29yZEF0KGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0LCBzdGFydCk7Ci0g
ICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmZyb20sIHdvcmQudG8pOwotICAgIH0g
ZWxzZSB7IGxhc3RDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OyB9Ci0KLSAgICB2YXIg
bGFzdCA9IHN0YXJ0OwotICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9w
ICYmICFpc1JlYWRPbmx5KGNtKSAmJiAhcG9zRXEoc2VsLmZyb20sIHNlbC50bykgJiYKLSAgICAg
ICAgIXBvc0xlc3Moc3RhcnQsIHNlbC5mcm9tKSAmJiAhcG9zTGVzcyhzZWwudG8sIHN0YXJ0KSAm
JiB0eXBlID09ICJzaW5nbGUiKSB7Ci0gICAgICB2YXIgZHJhZ0VuZCA9IG9wZXJhdGlvbihjbSwg
ZnVuY3Rpb24oZTIpIHsKLSAgICAgICAgaWYgKHdlYmtpdCkgZGlzcGxheS5zY3JvbGxlci5kcmFn
Z2FibGUgPSBmYWxzZTsKLSAgICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZmFsc2U7Ci0g
ICAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCBkcmFnRW5kKTsKLSAgICAgICAgb2ZmKGRp
c3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwgZHJhZ0VuZCk7Ci0gICAgICAgIGlmIChNYXRoLmFicyhl
LmNsaWVudFggLSBlMi5jbGllbnRYKSArIE1hdGguYWJzKGUuY2xpZW50WSAtIGUyLmNsaWVudFkp
IDwgMTApIHsKLSAgICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUyKTsKLSAgICAgICAgICBleHRl
bmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7Ci0gICAgICAgICAgZm9jdXNJbnB1dChjbSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgLy8gTGV0IHRoZSBkcmFnIGhhbmRsZXIgaGFuZGxl
IHRoaXMuCi0gICAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRy
dWU7Ci0gICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBkcmFnRW5kOwotICAgICAgLy8gSUUn
cyBhcHByb2FjaCB0byBkcmFnZ2FibGUKLSAgICAgIGlmIChkaXNwbGF5LnNjcm9sbGVyLmRyYWdE
cm9wKSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKCk7Ci0gICAgICBvbihkb2N1bWVudCwgIm1v
dXNldXAiLCBkcmFnRW5kKTsKLSAgICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwgZHJh
Z0VuZCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0g
ICAgaWYgKHR5cGUgPT0gInNpbmdsZSIpIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIGNsaXBQb3Mo
ZG9jLCBzdGFydCkpOwotCi0gICAgdmFyIHN0YXJ0c3RhcnQgPSBzZWwuZnJvbSwgc3RhcnRlbmQg
PSBzZWwudG87Ci0KLSAgICBmdW5jdGlvbiBkb1NlbGVjdChjdXIpIHsKLSAgICAgIGlmICh0eXBl
ID09ICJzaW5nbGUiKSB7Ci0gICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIGNsaXBQb3Mo
ZG9jLCBzdGFydCksIGN1cik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgc3Rh
cnRzdGFydCA9IGNsaXBQb3MoZG9jLCBzdGFydHN0YXJ0KTsKLSAgICAgIHN0YXJ0ZW5kID0gY2xp
cFBvcyhkb2MsIHN0YXJ0ZW5kKTsKLSAgICAgIGlmICh0eXBlID09ICJkb3VibGUiKSB7Ci0gICAg
ICAgIHZhciB3b3JkID0gZmluZFdvcmRBdChnZXRMaW5lKGRvYywgY3VyLmxpbmUpLnRleHQsIGN1
cik7Ci0gICAgICAgIGlmIChwb3NMZXNzKGN1ciwgc3RhcnRzdGFydCkpIGV4dGVuZFNlbGVjdGlv
bihjbS5kb2MsIHdvcmQuZnJvbSwgc3RhcnRlbmQpOwotICAgICAgICBlbHNlIGV4dGVuZFNlbGVj
dGlvbihjbS5kb2MsIHN0YXJ0c3RhcnQsIHdvcmQudG8pOwotICAgICAgfSBlbHNlIGlmICh0eXBl
ID09ICJ0cmlwbGUiKSB7Ci0gICAgICAgIGlmIChwb3NMZXNzKGN1ciwgc3RhcnRzdGFydCkpIGV4
dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0ZW5kLCBjbGlwUG9zKGRvYywgUG9zKGN1ci5saW5l
LCAwKSkpOwotICAgICAgICBlbHNlIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0c3RhcnQs
IGNsaXBQb3MoZG9jLCBQb3MoY3VyLmxpbmUgKyAxLCAwKSkpOwotICAgICAgfQotICAgIH0KLQot
ICAgIHZhciBlZGl0b3JTaXplID0gZ2V0UmVjdChkaXNwbGF5LndyYXBwZXIpOwotICAgIC8vIFVz
ZWQgdG8gZW5zdXJlIHRpbWVvdXQgcmUtdHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0
ZW5kCi0gICAgLy8gaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3Qg
cmVsaWFibGUgLS0gYXQKLSAgICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGls
bCBoYXBwZW4gZXZlbiB3aGVuIGNsZWFyZWQsCi0gICAgLy8gaWYgdGhlIGNsZWFyIGhhcHBlbnMg
YWZ0ZXIgdGhlaXIgc2NoZWR1bGVkIGZpcmluZyB0aW1lKS4KLSAgICB2YXIgY291bnRlciA9IDA7
Ci0KLSAgICBmdW5jdGlvbiBleHRlbmQoZSkgewotICAgICAgdmFyIGN1ckNvdW50ID0gKytjb3Vu
dGVyOwotICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSk7Ci0gICAgICBp
ZiAoIWN1cikgcmV0dXJuOwotICAgICAgaWYgKCFwb3NFcShjdXIsIGxhc3QpKSB7Ci0gICAgICAg
IGlmICghY20uc3RhdGUuZm9jdXNlZCkgb25Gb2N1cyhjbSk7Ci0gICAgICAgIGxhc3QgPSBjdXI7
Ci0gICAgICAgIGRvU2VsZWN0KGN1cik7Ci0gICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxp
bmVzKGRpc3BsYXksIGRvYyk7Ci0gICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8
IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQotICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9u
KGNtLCBmdW5jdGlvbigpe2lmIChjb3VudGVyID09IGN1ckNvdW50KSBleHRlbmQoZSk7fSksIDE1
MCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgb3V0c2lkZSA9IGUuY2xpZW50WSA8IGVk
aXRvclNpemUudG9wID8gLTIwIDogZS5jbGllbnRZID4gZWRpdG9yU2l6ZS5ib3R0b20gPyAyMCA6
IDA7Ci0gICAgICAgIGlmIChvdXRzaWRlKSBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgaWYgKGNvdW50ZXIgIT0gY3VyQ291bnQpIHJldHVybjsKLSAgICAg
ICAgICBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCArPSBvdXRzaWRlOwotICAgICAgICAgIGV4
dGVuZChlKTsKLSAgICAgICAgfSksIDUwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBkb25lKGUpIHsKLSAgICAgIGNvdW50ZXIgPSBJbmZpbml0eTsKLSAgICAgIHZhciBjdXIgPSBw
b3NGcm9tTW91c2UoY20sIGUpOwotICAgICAgaWYgKGN1cikgZG9TZWxlY3QoY3VyKTsKLSAgICAg
IGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBmb2N1c0lucHV0KGNtKTsKLSAgICAgIG9mZihk
b2N1bWVudCwgIm1vdXNlbW92ZSIsIG1vdmUpOwotICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2V1
cCIsIHVwKTsKLSAgICB9Ci0KLSAgICB2YXIgbW92ZSA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24o
ZSkgewotICAgICAgaWYgKCFpZSAmJiAhZV9idXR0b24oZSkpIGRvbmUoZSk7Ci0gICAgICBlbHNl
IGV4dGVuZChlKTsKLSAgICB9KTsKLSAgICB2YXIgdXAgPSBvcGVyYXRpb24oY20sIGRvbmUpOwot
ICAgIG9uKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgbW92ZSk7Ci0gICAgb24oZG9jdW1lbnQsICJt
b3VzZXVwIiwgdXApOwotICB9Ci0KLSAgZnVuY3Rpb24gb25Ecm9wKGUpIHsKLSAgICB2YXIgY20g
PSB0aGlzOwotICAgIGlmIChldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpIHx8IChjbS5vcHRp
b25zLm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkp
KSkKLSAgICAgIHJldHVybjsKLSAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgIHZhciBwb3Mg
PSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVz
OwotICAgIGlmICghcG9zIHx8IGlzUmVhZE9ubHkoY20pKSByZXR1cm47Ci0gICAgaWYgKGZpbGVz
ICYmIGZpbGVzLmxlbmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZSkgewot
ICAgICAgdmFyIG4gPSBmaWxlcy5sZW5ndGgsIHRleHQgPSBBcnJheShuKSwgcmVhZCA9IDA7Ci0g
ICAgICB2YXIgbG9hZEZpbGUgPSBmdW5jdGlvbihmaWxlLCBpKSB7Ci0gICAgICAgIHZhciByZWFk
ZXIgPSBuZXcgRmlsZVJlYWRlcjsKLSAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgIHRleHRbaV0gPSByZWFkZXIucmVzdWx0OwotICAgICAgICAgIGlmICgrK3Jl
YWQgPT0gbikgewotICAgICAgICAgICAgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7Ci0gICAg
ICAgICAgICBtYWtlQ2hhbmdlKGNtLmRvYywge2Zyb206IHBvcywgdG86IHBvcywgdGV4dDogc3Bs
aXRMaW5lcyh0ZXh0LmpvaW4oIlxuIikpLCBvcmlnaW46ICJwYXN0ZSJ9LCAiYXJvdW5kIik7Ci0g
ICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsK
LSAgICAgIH07Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgbG9hZEZpbGUoZmls
ZXNbaV0sIGkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBEb24ndCBkbyBhIHJlcGxhY2UgaWYg
dGhlIGRyb3AgaGFwcGVuZWQgaW5zaWRlIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LgotICAgICAgaWYg
KGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhKHBvc0xlc3MocG9zLCBjbS5kb2Muc2VsLmZyb20p
IHx8IHBvc0xlc3MoY20uZG9jLnNlbC50bywgcG9zKSkpIHsKLSAgICAgICAgY20uc3RhdGUuZHJh
Z2dpbmdUZXh0KGUpOwotICAgICAgICAvLyBFbnN1cmUgdGhlIGVkaXRvciBpcyByZS1mb2N1c2Vk
Ci0gICAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIwKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgICAgdHJ5IHsKLSAgICAgICAgdmFyIHRleHQgPSBlLmRhdGFU
cmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7Ci0gICAgICAgIGlmICh0ZXh0KSB7Ci0gICAgICAgICAg
dmFyIGN1ckZyb20gPSBjbS5kb2Muc2VsLmZyb20sIGN1clRvID0gY20uZG9jLnNlbC50bzsKLSAg
ICAgICAgICBzZXRTZWxlY3Rpb24oY20uZG9jLCBwb3MsIHBvcyk7Ci0gICAgICAgICAgaWYgKGNt
LnN0YXRlLmRyYWdnaW5nVGV4dCkgcmVwbGFjZVJhbmdlKGNtLmRvYywgIiIsIGN1ckZyb20sIGN1
clRvLCAicGFzdGUiKTsKLSAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHRleHQsIG51bGws
ICJwYXN0ZSIpOwotICAgICAgICAgIGZvY3VzSW5wdXQoY20pOwotICAgICAgICAgIG9uRm9jdXMo
Y20pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaChlKXt9Ci0gICAgfQotICB9Ci0K
LSAgZnVuY3Rpb24gY2xpY2tJbkd1dHRlcihjbSwgZSkgewotICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheTsKLSAgICB0cnkgeyB2YXIgbVggPSBlLmNsaWVudFgsIG1ZID0gZS5jbGllbnRZOyB9
Ci0gICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGlmIChtWCA+PSBNYXRoLmZs
b29yKGdldFJlY3QoZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpIHJldHVybiBmYWxzZTsKLSAgICBl
X3ByZXZlbnREZWZhdWx0KGUpOwotICAgIGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNsaWNr
IikpIHJldHVybiB0cnVlOwotCi0gICAgdmFyIGxpbmVCb3ggPSBnZXRSZWN0KGRpc3BsYXkubGlu
ZURpdik7Ci0gICAgaWYgKG1ZID4gbGluZUJveC5ib3R0b20pIHJldHVybiB0cnVlOwotICAgIG1Z
IC09IGxpbmVCb3gudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0OwotCi0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBnID0g
ZGlzcGxheS5ndXR0ZXJzLmNoaWxkTm9kZXNbaV07Ci0gICAgICBpZiAoZyAmJiBnZXRSZWN0KGcp
LnJpZ2h0ID49IG1YKSB7Ci0gICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywg
bVkpOwotICAgICAgICB2YXIgZ3V0dGVyID0gY20ub3B0aW9ucy5ndXR0ZXJzW2ldOwotICAgICAg
ICBzaWduYWxMYXRlcihjbSwgImd1dHRlckNsaWNrIiwgY20sIGxpbmUsIGd1dHRlciwgZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNtLCBlKSB7Ci0gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20u
ZGlzcGxheSwgZSkpIHJldHVybjsKLQotICAgIHZhciB0eHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsK
LSAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IiwgdHh0KTsKLQotICAgIC8vIFVzZSBk
dW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2UuCi0gICAgLy8gUmVj
ZW50IFNhZmFyaSAofjYuMC4yKSBoYXZlIGEgdGVuZGVuY3kgdG8gc2VnZmF1bHQgd2hlbiB0aGlz
IGhhcHBlbnMsIHNvIHdlIGRvbid0IGRvIGl0IHRoZXJlLgotICAgIGlmIChlLmRhdGFUcmFuc2Zl
ci5zZXREcmFnSW1hZ2UpIHsKLSAgICAgIHZhciBpbWcgPSBlbHQoImltZyIsIG51bGwsIG51bGws
ICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTsKLSAgICAgIGlmIChvcGVyYSkg
ewotICAgICAgICBpbWcud2lkdGggPSBpbWcuaGVpZ2h0ID0gMTsKLSAgICAgICAgY20uZGlzcGxh
eS53cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7Ci0gICAgICAgIC8vIEZvcmNlIGEgcmVsYXlvdXQs
IG9yIE9wZXJhIHdvbid0IHVzZSBvdXIgaW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFzb24KLSAg
ICAgICAgaW1nLl90b3AgPSBpbWcub2Zmc2V0VG9wOwotICAgICAgfQotICAgICAgaWYgKHNhZmFy
aSkgewotICAgICAgICBpZiAoY20uZGlzcGxheS5kcmFnSW1nKSB7Ci0gICAgICAgICAgaW1nID0g
Y20uZGlzcGxheS5kcmFnSW1nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNtLmRpc3Bs
YXkuZHJhZ0ltZyA9IGltZzsKLSAgICAgICAgICBpbWcuc3JjID0gImRhdGE6aW1hZ2UvZ2lmO2Jh
c2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09
IjsKLSAgICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwg
MCk7Ci0gICAgICBpZiAob3BlcmEpIGltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGltZyk7Ci0g
ICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2V0U2Nyb2xsVG9wKGNtLCB2YWwpIHsKLSAgICBpZiAo
TWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSByZXR1cm47Ci0gICAgY20uZG9j
LnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoIWdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCBbXSwg
dmFsKTsKLSAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0gdmFsKSBjbS5k
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoY20uZGlzcGxheS5zY3Jv
bGxiYXJWLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3Ag
PSB2YWw7Ci0gICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtLCBbXSk7Ci0gIH0KLSAgZnVu
Y3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyKSB7Ci0gICAgaWYgKGlzU2Ny
b2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExlZnQgOiBNYXRoLmFicyhjbS5kb2Muc2Nyb2xs
TGVmdCAtIHZhbCkgPCAyKSByZXR1cm47Ci0gICAgdmFsID0gTWF0aC5taW4odmFsLCBjbS5kaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0
aCk7Ci0gICAgY20uZG9jLnNjcm9sbExlZnQgPSB2YWw7Ci0gICAgYWxpZ25Ib3Jpem9udGFsbHko
Y20pOwotICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gdmFsKSBjbS5k
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgPSB2YWw7Ci0gICAgaWYgKGNtLmRpc3BsYXkuc2Ny
b2xsYmFySC5zY3JvbGxMZWZ0ICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExl
ZnQgPSB2YWw7Ci0gIH0KLQotICAvLyBTaW5jZSB0aGUgZGVsdGEgdmFsdWVzIHJlcG9ydGVkIG9u
IG1vdXNlIHdoZWVsIGV2ZW50cyBhcmUKLSAgLy8gdW5zdGFuZGFyZGl6ZWQgYmV0d2VlbiBicm93
c2VycyBhbmQgZXZlbiBicm93c2VyIHZlcnNpb25zLCBhbmQKLSAgLy8gZ2VuZXJhbGx5IGhvcnJp
Ymx5IHVucHJlZGljdGFibGUsIHRoaXMgY29kZSBzdGFydHMgYnkgbWVhc3VyaW5nCi0gIC8vIHRo
ZSBzY3JvbGwgZWZmZWN0IHRoYXQgdGhlIGZpcnN0IGZldyBtb3VzZSB3aGVlbCBldmVudHMgaGF2
ZSwKLSAgLy8gYW5kLCBmcm9tIHRoYXQsIGRldGVjdHMgdGhlIHdheSBpdCBjYW4gY29udmVydCBk
ZWx0YXMgdG8gcGl4ZWwKLSAgLy8gb2Zmc2V0cyBhZnRlcndhcmRzLgotICAvLwotICAvLyBUaGUg
cmVhc29uIHdlIHdhbnQgdG8ga25vdyB0aGUgYW1vdW50IGEgd2hlZWwgZXZlbnQgd2lsbCBzY3Jv
bGwKLSAgLy8gaXMgdGhhdCBpdCBnaXZlcyB1cyBhIGNoYW5jZSB0byB1cGRhdGUgdGhlIGRpc3Bs
YXkgYmVmb3JlIHRoZQotICAvLyBhY3R1YWwgc2Nyb2xsaW5nIGhhcHBlbnMsIHJlZHVjaW5nIGZs
aWNrZXJpbmcuCi0KLSAgdmFyIHdoZWVsU2FtcGxlcyA9IDAsIHdoZWVsUGl4ZWxzUGVyVW5pdCA9
IG51bGw7Ci0gIC8vIEZpbGwgaW4gYSBicm93c2VyLWRldGVjdGVkIHN0YXJ0aW5nIHZhbHVlIG9u
IGJyb3dzZXJzIHdoZXJlIHdlCi0gIC8vIGtub3cgb25lLiBUaGVzZSBkb24ndCBoYXZlIHRvIGJl
IGFjY3VyYXRlIC0tIHRoZSByZXN1bHQgb2YgdGhlbQotICAvLyBiZWluZyB3cm9uZyB3b3VsZCBq
dXN0IGJlIGEgc2xpZ2h0IGZsaWNrZXIgb24gdGhlIGZpcnN0IHdoZWVsCi0gIC8vIHNjcm9sbCAo
aWYgaXQgaXMgbGFyZ2UgZW5vdWdoKS4KLSAgaWYgKGllKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAt
LjUzOwotICBlbHNlIGlmIChnZWNrbykgd2hlZWxQaXhlbHNQZXJVbml0ID0gMTU7Ci0gIGVsc2Ug
aWYgKGNocm9tZSkgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS43OwotICBlbHNlIGlmIChzYWZhcmkp
IHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0xLzM7Ci0KLSAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChj
bSwgZSkgewotICAgIHZhciBkeCA9IGUud2hlZWxEZWx0YVgsIGR5ID0gZS53aGVlbERlbHRhWTsK
LSAgICBpZiAoZHggPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFM
X0FYSVMpIGR4ID0gZS5kZXRhaWw7Ci0gICAgaWYgKGR5ID09IG51bGwgJiYgZS5kZXRhaWwgJiYg
ZS5heGlzID09IGUuVkVSVElDQUxfQVhJUykgZHkgPSBlLmRldGFpbDsKLSAgICBlbHNlIGlmIChk
eSA9PSBudWxsKSBkeSA9IGUud2hlZWxEZWx0YTsKLQotICAgIC8vIFdlYmtpdCBicm93c2VycyBv
biBPUyBYIGFib3J0IG1vbWVudHVtIHNjcm9sbHMgd2hlbiB0aGUgdGFyZ2V0Ci0gICAgLy8gb2Yg
dGhlIHNjcm9sbCBldmVudCBpcyByZW1vdmVkIGZyb20gdGhlIHNjcm9sbGFibGUgZWxlbWVudC4K
LSAgICAvLyBUaGlzIGhhY2sgKHNlZSByZWxhdGVkIGNvZGUgaW4gcGF0Y2hEaXNwbGF5KSBtYWtl
cyBzdXJlIHRoZQotICAgIC8vIGVsZW1lbnQgaXMga2VwdCBhcm91bmQuCi0gICAgaWYgKGR5ICYm
IG1hYyAmJiB3ZWJraXQpIHsKLSAgICAgIGZvciAodmFyIGN1ciA9IGUudGFyZ2V0OyBjdXIgIT0g
c2Nyb2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkgewotICAgICAgICBpZiAoY3VyLmxpbmVPYmop
IHsKLSAgICAgICAgICBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9IGN1cjsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHZhciBkaXNwbGF5
ID0gY20uZGlzcGxheSwgc2Nyb2xsID0gZGlzcGxheS5zY3JvbGxlcjsKLSAgICAvLyBPbiBzb21l
IGJyb3dzZXJzLCBob3Jpem9udGFsIHNjcm9sbGluZyB3aWxsIGNhdXNlIHJlZHJhd3MgdG8KLSAg
ICAvLyBoYXBwZW4gYmVmb3JlIHRoZSBndXR0ZXIgaGFzIGJlZW4gcmVhbGlnbmVkLCBjYXVzaW5n
IGl0IHRvCi0gICAgLy8gd3JpZ2dsZSBhcm91bmQgaW4gYSBtb3N0IHVuc2VlbWx5IHdheS4gV2hl
biB3ZSBoYXZlIGFuCi0gICAgLy8gZXN0aW1hdGVkIHBpeGVscy9kZWx0YSB2YWx1ZSwgd2UganVz
dCBoYW5kbGUgaG9yaXpvbnRhbAotICAgIC8vIHNjcm9sbGluZyBlbnRpcmVseSBoZXJlLiBJdCds
bCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRpdmUsIGJ1dAotICAgIC8vIGJldHRlciB0aGFuIGds
aXRjaGluZyBvdXQuCi0gICAgaWYgKGR4ICYmICFnZWNrbyAmJiAhb3BlcmEgJiYgd2hlZWxQaXhl
bHNQZXJVbml0ICE9IG51bGwpIHsKLSAgICAgIGlmIChkeSkKLSAgICAgICAgc2V0U2Nyb2xsVG9w
KGNtLCBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsVG9wICsgZHkgKiB3aGVlbFBp
eGVsc1BlclVuaXQsIHNjcm9sbC5zY3JvbGxIZWlnaHQgLSBzY3JvbGwuY2xpZW50SGVpZ2h0KSkp
OwotICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNj
cm9sbExlZnQgKyBkeCAqIHdoZWVsUGl4ZWxzUGVyVW5pdCwgc2Nyb2xsLnNjcm9sbFdpZHRoIC0g
c2Nyb2xsLmNsaWVudFdpZHRoKSkpOwotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAg
IGRpc3BsYXkud2hlZWxTdGFydFggPSBudWxsOyAvLyBBYm9ydCBtZWFzdXJlbWVudCwgaWYgaW4g
cHJvZ3Jlc3MKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZHkgJiYgd2hlZWxQaXhl
bHNQZXJVbml0ICE9IG51bGwpIHsKLSAgICAgIHZhciBwaXhlbHMgPSBkeSAqIHdoZWVsUGl4ZWxz
UGVyVW5pdDsKLSAgICAgIHZhciB0b3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBib3QgPSB0b3AgKyBk
aXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OwotICAgICAgaWYgKHBpeGVscyA8IDApIHRvcCA9
IE1hdGgubWF4KDAsIHRvcCArIHBpeGVscyAtIDUwKTsKLSAgICAgIGVsc2UgYm90ID0gTWF0aC5t
aW4oY20uZG9jLmhlaWdodCwgYm90ICsgcGl4ZWxzICsgNTApOwotICAgICAgdXBkYXRlRGlzcGxh
eShjbSwgW10sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTsKLSAgICB9Ci0KLSAgICBpZiAod2hl
ZWxTYW1wbGVzIDwgMjApIHsKLSAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwp
IHsKLSAgICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IHNjcm9sbC5zY3JvbGxMZWZ0OyBkaXNw
bGF5LndoZWVsU3RhcnRZID0gc2Nyb2xsLnNjcm9sbFRvcDsKLSAgICAgICAgZGlzcGxheS53aGVl
bERYID0gZHg7IGRpc3BsYXkud2hlZWxEWSA9IGR5OwotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewotICAgICAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwpIHJldHVy
bjsKLSAgICAgICAgICB2YXIgbW92ZWRYID0gc2Nyb2xsLnNjcm9sbExlZnQgLSBkaXNwbGF5Lndo
ZWVsU3RhcnRYOwotICAgICAgICAgIHZhciBtb3ZlZFkgPSBzY3JvbGwuc2Nyb2xsVG9wIC0gZGlz
cGxheS53aGVlbFN0YXJ0WTsKLSAgICAgICAgICB2YXIgc2FtcGxlID0gKG1vdmVkWSAmJiBkaXNw
bGF5LndoZWVsRFkgJiYgbW92ZWRZIC8gZGlzcGxheS53aGVlbERZKSB8fAotICAgICAgICAgICAg
KG1vdmVkWCAmJiBkaXNwbGF5LndoZWVsRFggJiYgbW92ZWRYIC8gZGlzcGxheS53aGVlbERYKTsK
LSAgICAgICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gZGlzcGxheS53aGVlbFN0YXJ0WSA9IG51
bGw7Ci0gICAgICAgICAgaWYgKCFzYW1wbGUpIHJldHVybjsKLSAgICAgICAgICB3aGVlbFBpeGVs
c1BlclVuaXQgPSAod2hlZWxQaXhlbHNQZXJVbml0ICogd2hlZWxTYW1wbGVzICsgc2FtcGxlKSAv
ICh3aGVlbFNhbXBsZXMgKyAxKTsKLSAgICAgICAgICArK3doZWVsU2FtcGxlczsKLSAgICAgICAg
fSwgMjAwKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpc3BsYXkud2hlZWxEWCArPSBkeDsg
ZGlzcGxheS53aGVlbERZICs9IGR5OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9u
IGRvSGFuZGxlQmluZGluZyhjbSwgYm91bmQsIGRyb3BTaGlmdCkgewotICAgIGlmICh0eXBlb2Yg
Ym91bmQgPT0gInN0cmluZyIpIHsKLSAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdOwotICAg
ICAgaWYgKCFib3VuZCkgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBFbnN1cmUgcHJldmlv
dXMgaW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGEKLSAgICAv
LyBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGRvY3VtZW50Ci0gICAgaWYgKGNtLmRpc3BsYXkucG9s
bGluZ0Zhc3QgJiYgcmVhZElucHV0KGNtKSkgY20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IGZhbHNl
OwotICAgIHZhciBkb2MgPSBjbS5kb2MsIHByZXZTaGlmdCA9IGRvYy5zZWwuc2hpZnQsIGRvbmUg
PSBmYWxzZTsKLSAgICB0cnkgewotICAgICAgaWYgKGlzUmVhZE9ubHkoY20pKSBjbS5zdGF0ZS5z
dXBwcmVzc0VkaXRzID0gdHJ1ZTsKLSAgICAgIGlmIChkcm9wU2hpZnQpIGRvYy5zZWwuc2hpZnQg
PSBmYWxzZTsKLSAgICAgIGRvbmUgPSBib3VuZChjbSkgIT0gUGFzczsKLSAgICB9IGZpbmFsbHkg
ewotICAgICAgZG9jLnNlbC5zaGlmdCA9IHByZXZTaGlmdDsKLSAgICAgIGNtLnN0YXRlLnN1cHBy
ZXNzRWRpdHMgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGRvbmU7Ci0gIH0KLQotICBmdW5j
dGlvbiBhbGxLZXlNYXBzKGNtKSB7Ci0gICAgdmFyIG1hcHMgPSBjbS5zdGF0ZS5rZXlNYXBzLnNs
aWNlKDApOwotICAgIG1hcHMucHVzaChjbS5vcHRpb25zLmtleU1hcCk7Ci0gICAgaWYgKGNtLm9w
dGlvbnMuZXh0cmFLZXlzKSBtYXBzLnVuc2hpZnQoY20ub3B0aW9ucy5leHRyYUtleXMpOwotICAg
IHJldHVybiBtYXBzOwotICB9Ci0KLSAgdmFyIG1heWJlVHJhbnNpdGlvbjsKLSAgZnVuY3Rpb24g
aGFuZGxlS2V5QmluZGluZyhjbSwgZSkgewotICAgIC8vIEhhbmRsZSBhdXRvIGtleW1hcCB0cmFu
c2l0aW9ucwotICAgIHZhciBzdGFydE1hcCA9IGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCks
IG5leHQgPSBzdGFydE1hcC5hdXRvOwotICAgIGNsZWFyVGltZW91dChtYXliZVRyYW5zaXRpb24p
OwotICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVyS2V5KGUpKSBtYXliZVRyYW5zaXRpb24gPSBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGdldEtleU1hcChjbS5vcHRpb25zLmtl
eU1hcCkgPT0gc3RhcnRNYXApCi0gICAgICAgIGNtLm9wdGlvbnMua2V5TWFwID0gKG5leHQuY2Fs
bCA/IG5leHQuY2FsbChudWxsLCBjbSkgOiBuZXh0KTsKLSAgICB9LCA1MCk7Ci0KLSAgICB2YXIg
bmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSksIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW5hbWUp
IHJldHVybiBmYWxzZTsKLSAgICB2YXIga2V5bWFwcyA9IGFsbEtleU1hcHMoY20pOwotCi0gICAg
aWYgKGUuc2hpZnRLZXkpIHsKLSAgICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1bGwgbmFt
ZSAoaW5jbHVkaW5nICdTaGlmdC0nKS4gRmFpbGluZwotICAgICAgLy8gdGhhdCwgc2VlIGlmIHRo
ZXJlIGlzIGEgY3Vyc29yLW1vdGlvbiBjb21tYW5kIChzdGFydGluZyB3aXRoCi0gICAgICAvLyAn
Z28nKSBib3VuZCB0byB0aGUga2V5bmFtZSB3aXRob3V0ICdTaGlmdC0nLgotICAgICAgaGFuZGxl
ZCA9IGxvb2t1cEtleSgiU2hpZnQtIiArIG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHtyZXR1
cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTt9KQotICAgICAgICAgICAgIHx8IGxvb2t1
cEtleShuYW1lLCBrZXltYXBzLCBmdW5jdGlvbihiKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAo
dHlwZW9mIGIgPT0gInN0cmluZyIgJiYgL15nb1tBLVpdLy50ZXN0KGIpKSByZXR1cm4gZG9IYW5k
bGVCaW5kaW5nKGNtLCBiKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICB9IGVsc2UgewotICAg
ICAgaGFuZGxlZCA9IGxvb2t1cEtleShuYW1lLCBrZXltYXBzLCBmdW5jdGlvbihiKSB7IHJldHVy
biBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOyB9KTsKLSAgICB9Ci0gICAgaWYgKGhhbmRsZWQgPT0g
InN0b3AiKSBoYW5kbGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoaGFuZGxlZCkgewotICAgICAgZV9w
cmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIHJlc3RhcnRCbGluayhjbSk7Ci0gICAgICBpZiAoaWVf
bHQ5KSB7IGUub2xkS2V5Q29kZSA9IGUua2V5Q29kZTsgZS5rZXlDb2RlID0gMDsgfQotICAgIH0K
LSAgICByZXR1cm4gaGFuZGxlZDsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhbmRsZUNoYXJCaW5kaW5n
KGNtLCBlLCBjaCkgewotICAgIHZhciBoYW5kbGVkID0gbG9va3VwS2V5KCInIiArIGNoICsgIici
LCBhbGxLZXlNYXBzKGNtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihi
KSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KTsKLSAgICBpZiAoaGFu
ZGxlZCkgewotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIHJlc3RhcnRCbGluayhj
bSk7Ci0gICAgfQotICAgIHJldHVybiBoYW5kbGVkOwotICB9Ci0KLSAgdmFyIGxhc3RTdG9wcGVk
S2V5ID0gbnVsbDsKLSAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHsKLSAgICB2YXIgY20gPSB0aGlz
OwotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgb25Gb2N1cyhjbSk7Ci0gICAgaWYgKGllICYm
IGUua2V5Q29kZSA9PSAyNykgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH0KLSAgICBpZiAoY20u
b3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChl
KSkpIHJldHVybjsKLSAgICB2YXIgY29kZSA9IGUua2V5Q29kZTsKLSAgICAvLyBJRSBkb2VzIHN0
cmFuZ2UgdGhpbmdzIHdpdGggZXNjYXBlLgotICAgIGNtLmRvYy5zZWwuc2hpZnQgPSBjb2RlID09
IDE2IHx8IGUuc2hpZnRLZXk7Ci0gICAgLy8gRmlyc3QgZ2l2ZSBvbktleUV2ZW50IG9wdGlvbiBh
IGNoYW5jZSB0byBoYW5kbGUgdGhpcy4KLSAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRp
bmcoY20sIGUpOwotICAgIGlmIChvcGVyYSkgewotICAgICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5k
bGVkID8gY29kZSA6IG51bGw7Ci0gICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdl
IHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvCi0gICAgICBpZiAoIWhhbmRsZWQg
JiYgY29kZSA9PSA4OCAmJiAhaGFzQ29weUV2ZW50ICYmIChtYWMgPyBlLm1ldGFLZXkgOiBlLmN0
cmxLZXkpKQotICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKCIiKTsKLSAgICB9Ci0gIH0KLQot
ICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKLSAgICB2YXIgY20gPSB0aGlzOwotICAgIGlmIChj
bS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20ub3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9w
KGUpKSkgcmV0dXJuOwotICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUu
Y2hhckNvZGU7Ci0gICAgaWYgKG9wZXJhICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHts
YXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9Ci0gICAg
aWYgKCgob3BlcmEgJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpIHx8IGtodG1sKSAmJiBo
YW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgcmV0dXJuOwotICAgIHZhciBjaCA9IFN0cmluZy5mcm9t
Q2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFyQ29kZSk7Ci0gICAgaWYg
KHRoaXMub3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmIHRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFy
cyAmJgotICAgICAgICB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQgJiYgIWlzUmVhZE9ubHkodGhp
cykgJiYKLSAgICAgICAgdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoY2gpID4g
LTEpCi0gICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7aW5kZW50TGlu
ZShjbSwgY20uZG9jLnNlbC50by5saW5lLCAic21hcnQiKTt9KSwgNzUpOwotICAgIGlmIChoYW5k
bGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSByZXR1cm47Ci0gICAgZmFzdFBvbGwoY20pOwotICB9
Ci0KLSAgZnVuY3Rpb24gb25Gb2N1cyhjbSkgewotICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5
ID09ICJub2N1cnNvciIpIHJldHVybjsKLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsKLSAg
ICAgIHNpZ25hbChjbSwgImZvY3VzIiwgY20pOwotICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IHRy
dWU7Ci0gICAgICBpZiAoY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29k
ZU1pcnJvci1mb2N1c2VkXGIvKSA9PSAtMSkKLSAgICAgICAgY20uZGlzcGxheS53cmFwcGVyLmNs
YXNzTmFtZSArPSAiIENvZGVNaXJyb3ItZm9jdXNlZCI7Ci0gICAgICByZXNldElucHV0KGNtLCB0
cnVlKTsKLSAgICB9Ci0gICAgc2xvd1BvbGwoY20pOwotICAgIHJlc3RhcnRCbGluayhjbSk7Ci0g
IH0KLSAgZnVuY3Rpb24gb25CbHVyKGNtKSB7Ci0gICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHsK
LSAgICAgIHNpZ25hbChjbSwgImJsdXIiLCBjbSk7Ci0gICAgICBjbS5zdGF0ZS5mb2N1c2VkID0g
ZmFsc2U7Ci0gICAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53
cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mb2N1c2VkIiwgIiIpOwotICAg
IH0KLSAgICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7Ci0gICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHtpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIGNtLmRvYy5zZWwuc2hpZnQgPSBm
YWxzZTt9LCAxNTApOwotICB9Ci0KLSAgdmFyIGRldGVjdGluZ1NlbGVjdEFsbDsKLSAgZnVuY3Rp
b24gb25Db250ZXh0TWVudShjbSwgZSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwg
c2VsID0gY20uZG9jLnNlbDsKLSAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkgcmV0
dXJuOwotCi0gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSksIHNjcm9sbFBvcyA9IGRp
c3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwotICAgIGlmICghcG9zIHx8IG9wZXJhKSByZXR1cm47
IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC4KLSAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykg
fHwgcG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCAhcG9zTGVzcyhwb3MsIHNlbC50bykpCi0gICAg
ICBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBwb3MsIHBvcyk7Ci0KLSAgICB2
YXIgb2xkQ1NTID0gZGlzcGxheS5pbnB1dC5zdHlsZS5jc3NUZXh0OwotICAgIGRpc3BsYXkuaW5w
dXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwotICAgIGRpc3BsYXkuaW5wdXQuc3R5
bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7
IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCi0gICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGll
bnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdoaXRlOyBvdXRsaW5l
OiBub25lOyIgKwotICAgICAgImJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZs
b3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyAtbXMtb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhh
KG9wYWNpdHk9NSk7IjsKLSAgICBmb2N1c0lucHV0KGNtKTsKLSAgICByZXNldElucHV0KGNtLCB0
cnVlKTsKLSAgICAvLyBBZGRzICJTZWxlY3QgYWxsIiB0byBjb250ZXh0IG1lbnUgaW4gRkYKLSAg
ICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIGRpc3BsYXkuaW5wdXQudmFsdWUgPSBkaXNw
bGF5LnByZXZJbnB1dCA9ICIgIjsKLQotICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKLSAgICAgIGRp
c3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAgICAgZGlzcGxh
eS5pbnB1dC5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOwotICAgICAgaWYgKGllX2x0OSkgZGlzcGxh
eS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Ny
b2xsUG9zOwotICAgICAgc2xvd1BvbGwoY20pOwotCi0gICAgICAvLyBUcnkgdG8gZGV0ZWN0IHRo
ZSB1c2VyIGNob29zaW5nIHNlbGVjdC1hbGwKLSAgICAgIGlmIChkaXNwbGF5LmlucHV0LnNlbGVj
dGlvblN0YXJ0ICE9IG51bGwgJiYgKCFpZSB8fCBpZV9sdDkpKSB7Ci0gICAgICAgIGNsZWFyVGlt
ZW91dChkZXRlY3RpbmdTZWxlY3RBbGwpOwotICAgICAgICB2YXIgZXh0dmFsID0gZGlzcGxheS5p
bnB1dC52YWx1ZSA9ICIgIiArIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSA/ICIiIDogZGlzcGxh
eS5pbnB1dC52YWx1ZSksIGkgPSAwOwotICAgICAgICBkaXNwbGF5LnByZXZJbnB1dCA9ICIgIjsK
LSAgICAgICAgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCA9IDE7IGRpc3BsYXkuaW5wdXQu
c2VsZWN0aW9uRW5kID0gZXh0dmFsLmxlbmd0aDsKLSAgICAgICAgdmFyIHBvbGwgPSBmdW5jdGlv
bigpewotICAgICAgICAgIGlmIChkaXNwbGF5LnByZXZJbnB1dCA9PSAiICIgJiYgZGlzcGxheS5p
bnB1dC5zZWxlY3Rpb25TdGFydCA9PSAwKQotICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBjb21t
YW5kcy5zZWxlY3RBbGwpKGNtKTsKLSAgICAgICAgICBlbHNlIGlmIChpKysgPCAxMCkgZGV0ZWN0
aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCA1MDApOwotICAgICAgICAgIGVsc2UgcmVz
ZXRJbnB1dChjbSk7Ci0gICAgICAgIH07Ci0gICAgICAgIGRldGVjdGluZ1NlbGVjdEFsbCA9IHNl
dFRpbWVvdXQocG9sbCwgMjAwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2FwdHVyZU1p
ZGRsZUNsaWNrKSB7Ci0gICAgICBlX3N0b3AoZSk7Ci0gICAgICB2YXIgbW91c2V1cCA9IGZ1bmN0
aW9uKCkgewotICAgICAgICBvZmYod2luZG93LCAibW91c2V1cCIsIG1vdXNldXApOwotICAgICAg
ICBzZXRUaW1lb3V0KHJlaGlkZSwgMjApOwotICAgICAgfTsKLSAgICAgIG9uKHdpbmRvdywgIm1v
dXNldXAiLCBtb3VzZXVwKTsKLSAgICB9IGVsc2UgewotICAgICAgc2V0VGltZW91dChyZWhpZGUs
IDUwKTsKLSAgICB9Ci0gIH0KLQotICAvLyBVUERBVElORwotCi0gIGZ1bmN0aW9uIGNoYW5nZUVu
ZChjaGFuZ2UpIHsKLSAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4
dC5sZW5ndGggLSAxLAotICAgICAgICAgICAgICAgbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAo
Y2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApKTsKLSAgfQotCi0g
IC8vIE1ha2Ugc3VyZSBhIHBvc2l0aW9uIHdpbGwgYmUgdmFsaWQgYWZ0ZXIgdGhlIGdpdmVuIGNo
YW5nZS4KLSAgZnVuY3Rpb24gY2xpcFBvc3RDaGFuZ2UoZG9jLCBjaGFuZ2UsIHBvcykgewotICAg
IGlmICghcG9zTGVzcyhjaGFuZ2UuZnJvbSwgcG9zKSkgcmV0dXJuIGNsaXBQb3MoZG9jLCBwb3Mp
OwotICAgIHZhciBkaWZmID0gKGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEpIC0gKGNoYW5nZS50by5s
aW5lIC0gY2hhbmdlLmZyb20ubGluZSk7Ci0gICAgaWYgKHBvcy5saW5lID4gY2hhbmdlLnRvLmxp
bmUgKyBkaWZmKSB7Ci0gICAgICB2YXIgcHJlTGluZSA9IHBvcy5saW5lIC0gZGlmZiwgbGFzdExp
bmUgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7Ci0gICAgICBpZiAocHJlTGluZSA+IGxhc3RM
aW5lKSByZXR1cm4gUG9zKGxhc3RMaW5lLCBnZXRMaW5lKGRvYywgbGFzdExpbmUpLnRleHQubGVu
Z3RoKTsKLSAgICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcHJlTGluZSku
dGV4dC5sZW5ndGgpOwotICAgIH0KLSAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUg
KyBkaWZmKQotICAgICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGxzdChjaGFuZ2UudGV4dCkubGVu
Z3RoICsgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxID8gY2hhbmdlLmZyb20uY2ggOiAwKSArCi0g
ICAgICAgICAgICAgICAgICAgICAgIGdldExpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkudGV4dC5s
ZW5ndGggLSBjaGFuZ2UudG8uY2gpOwotICAgIHZhciBpbnNpZGUgPSBwb3MubGluZSAtIGNoYW5n
ZS5mcm9tLmxpbmU7Ci0gICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGNoYW5nZS50ZXh0W2luc2lk
ZV0ubGVuZ3RoICsgKGluc2lkZSA/IDAgOiBjaGFuZ2UuZnJvbS5jaCkpOwotICB9Ci0KLSAgLy8g
SGludCBjYW4gYmUgbnVsbHwiZW5kInwic3RhcnQifCJhcm91bmQifHthbmNob3IsaGVhZH0KLSAg
ZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBoaW50KSB7Ci0gICAg
aWYgKGhpbnQgJiYgdHlwZW9mIGhpbnQgPT0gIm9iamVjdCIpIC8vIEFzc3VtZWQgdG8gYmUge2Fu
Y2hvciwgaGVhZH0gb2JqZWN0Ci0gICAgICByZXR1cm4ge2FuY2hvcjogY2xpcFBvc3RDaGFuZ2Uo
ZG9jLCBjaGFuZ2UsIGhpbnQuYW5jaG9yKSwKLSAgICAgICAgICAgICAgaGVhZDogY2xpcFBvc3RD
aGFuZ2UoZG9jLCBjaGFuZ2UsIGhpbnQuaGVhZCl9OwotCi0gICAgaWYgKGhpbnQgPT0gInN0YXJ0
IikgcmV0dXJuIHthbmNob3I6IGNoYW5nZS5mcm9tLCBoZWFkOiBjaGFuZ2UuZnJvbX07Ci0KLSAg
ICB2YXIgZW5kID0gY2hhbmdlRW5kKGNoYW5nZSk7Ci0gICAgaWYgKGhpbnQgPT0gImFyb3VuZCIp
IHJldHVybiB7YW5jaG9yOiBjaGFuZ2UuZnJvbSwgaGVhZDogZW5kfTsKLSAgICBpZiAoaGludCA9
PSAiZW5kIikgcmV0dXJuIHthbmNob3I6IGVuZCwgaGVhZDogZW5kfTsKLQotICAgIC8vIGhpbnQg
aXMgbnVsbCwgbGVhdmUgdGhlIHNlbGVjdGlvbiBhbG9uZSBhcyBtdWNoIGFzIHBvc3NpYmxlCi0g
ICAgdmFyIGFkanVzdFBvcyA9IGZ1bmN0aW9uKHBvcykgewotICAgICAgaWYgKHBvc0xlc3MocG9z
LCBjaGFuZ2UuZnJvbSkpIHJldHVybiBwb3M7Ci0gICAgICBpZiAoIXBvc0xlc3MoY2hhbmdlLnRv
LCBwb3MpKSByZXR1cm4gZW5kOwotCi0gICAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdl
LnRleHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBj
aCA9IHBvcy5jaDsKLSAgICAgIGlmIChwb3MubGluZSA9PSBjaGFuZ2UudG8ubGluZSkgY2ggKz0g
ZW5kLmNoIC0gY2hhbmdlLnRvLmNoOwotICAgICAgcmV0dXJuIFBvcyhsaW5lLCBjaCk7Ci0gICAg
fTsKLSAgICByZXR1cm4ge2FuY2hvcjogYWRqdXN0UG9zKGRvYy5zZWwuYW5jaG9yKSwgaGVhZDog
YWRqdXN0UG9zKGRvYy5zZWwuaGVhZCl9OwotICB9Ci0KLSAgZnVuY3Rpb24gZmlsdGVyQ2hhbmdl
KGRvYywgY2hhbmdlKSB7Ci0gICAgdmFyIG9iaiA9IHsKLSAgICAgIGNhbmNlbGVkOiBmYWxzZSwK
LSAgICAgIGZyb206IGNoYW5nZS5mcm9tLAotICAgICAgdG86IGNoYW5nZS50bywKLSAgICAgIHRl
eHQ6IGNoYW5nZS50ZXh0LAotICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luLAotICAgICAgdXBk
YXRlOiBmdW5jdGlvbihmcm9tLCB0bywgdGV4dCwgb3JpZ2luKSB7Ci0gICAgICAgIGlmIChmcm9t
KSB0aGlzLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7Ci0gICAgICAgIGlmICh0bykgdGhpcy50
byA9IGNsaXBQb3MoZG9jLCB0byk7Ci0gICAgICAgIGlmICh0ZXh0KSB0aGlzLnRleHQgPSB0ZXh0
OwotICAgICAgICBpZiAob3JpZ2luICE9PSB1bmRlZmluZWQpIHRoaXMub3JpZ2luID0gb3JpZ2lu
OwotICAgICAgfSwKLSAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7IHRoaXMuY2FuY2VsZWQgPSB0
cnVlOyB9Ci0gICAgfTsKLSAgICBzaWduYWwoZG9jLCAiYmVmb3JlQ2hhbmdlIiwgZG9jLCBvYmop
OwotICAgIGlmIChkb2MuY20pIHNpZ25hbChkb2MuY20sICJiZWZvcmVDaGFuZ2UiLCBkb2MuY20s
IG9iaik7Ci0KLSAgICBpZiAob2JqLmNhbmNlbGVkKSByZXR1cm4gbnVsbDsKLSAgICByZXR1cm4g
e2Zyb206IG9iai5mcm9tLCB0bzogb2JqLnRvLCB0ZXh0OiBvYmoudGV4dCwgb3JpZ2luOiBvYmou
b3JpZ2lufTsKLSAgfQotCi0gIC8vIFJlcGxhY2UgdGhlIHJhbmdlIGZyb20gZnJvbSB0byB0byBi
eSB0aGUgc3RyaW5ncyBpbiByZXBsYWNlbWVudC4KLSAgLy8gY2hhbmdlIGlzIGEge2Zyb20sIHRv
LCB0ZXh0IFssIG9yaWdpbl19IG9iamVjdAotICBmdW5jdGlvbiBtYWtlQ2hhbmdlKGRvYywgY2hh
bmdlLCBzZWxVcGRhdGUsIGlnbm9yZVJlYWRPbmx5KSB7Ci0gICAgaWYgKGRvYy5jbSkgewotICAg
ICAgaWYgKCFkb2MuY20uY3VyT3ApIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdl
KShkb2MsIGNoYW5nZSwgc2VsVXBkYXRlLCBpZ25vcmVSZWFkT25seSk7Ci0gICAgICBpZiAoZG9j
LmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaGFzSGFu
ZGxlcihkb2MsICJiZWZvcmVDaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20s
ICJiZWZvcmVDaGFuZ2UiKSkgewotICAgICAgY2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRvYywgY2hh
bmdlKTsKLSAgICAgIGlmICghY2hhbmdlKSByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUG9zc2li
bHkgc3BsaXQgb3Igc3VwcHJlc3MgdGhlIHVwZGF0ZSBiYXNlZCBvbiB0aGUgcHJlc2VuY2UKLSAg
ICAvLyBvZiByZWFkLW9ubHkgc3BhbnMgaW4gaXRzIHJhbmdlLgotICAgIHZhciBzcGxpdCA9IHNh
d1JlYWRPbmx5U3BhbnMgJiYgIWlnbm9yZVJlYWRPbmx5ICYmIHJlbW92ZVJlYWRPbmx5UmFuZ2Vz
KGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7Ci0gICAgaWYgKHNwbGl0KSB7Ci0gICAgICBm
b3IgKHZhciBpID0gc3BsaXQubGVuZ3RoIC0gMTsgaSA+PSAxOyAtLWkpCi0gICAgICAgIG1ha2VD
aGFuZ2VOb1JlYWRvbmx5KGRvYywge2Zyb206IHNwbGl0W2ldLmZyb20sIHRvOiBzcGxpdFtpXS50
bywgdGV4dDogWyIiXX0pOwotICAgICAgaWYgKHNwbGl0Lmxlbmd0aCkKLSAgICAgICAgbWFrZUNo
YW5nZU5vUmVhZG9ubHkoZG9jLCB7ZnJvbTogc3BsaXRbMF0uZnJvbSwgdG86IHNwbGl0WzBdLnRv
LCB0ZXh0OiBjaGFuZ2UudGV4dH0sIHNlbFVwZGF0ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1h
a2VDaGFuZ2VOb1JlYWRvbmx5KGRvYywgY2hhbmdlLCBzZWxVcGRhdGUpOwotICAgIH0KLSAgfQot
Ci0gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VOb1JlYWRvbmx5KGRvYywgY2hhbmdlLCBzZWxVcGRhdGUp
IHsKLSAgICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2Us
IHNlbFVwZGF0ZSk7Ci0gICAgYWRkVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgZG9j
LmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOKTsKLQotICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2Mo
ZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdl
KSk7Ci0gICAgdmFyIHJlYmFzZWQgPSBbXTsKLQotICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlv
bihkb2MsIHNoYXJlZEhpc3QpIHsKLSAgICAgIGlmICghc2hhcmVkSGlzdCAmJiBpbmRleE9mKHJl
YmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkgewotICAgICAgICByZWJhc2VIaXN0KGRvYy5oaXN0
b3J5LCBjaGFuZ2UpOwotICAgICAgICByZWJhc2VkLnB1c2goZG9jLmhpc3RvcnkpOwotICAgICAg
fQotICAgICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgbnVsbCwgc3RyZXRjaFNw
YW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSkpOwotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24g
bWFrZUNoYW5nZUZyb21IaXN0b3J5KGRvYywgdHlwZSkgewotICAgIHZhciBoaXN0ID0gZG9jLmhp
c3Rvcnk7Ci0gICAgdmFyIGV2ZW50ID0gKHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlz
dC51bmRvbmUpLnBvcCgpOwotICAgIGlmICghZXZlbnQpIHJldHVybjsKLSAgICBoaXN0LmRpcnR5
Q291bnRlciArPSB0eXBlID09ICJ1bmRvIiA/IC0xIDogMTsKLQotICAgIHZhciBhbnRpID0ge2No
YW5nZXM6IFtdLCBhbmNob3JCZWZvcmU6IGV2ZW50LmFuY2hvckFmdGVyLCBoZWFkQmVmb3JlOiBl
dmVudC5oZWFkQWZ0ZXIsCi0gICAgICAgICAgICAgICAgYW5jaG9yQWZ0ZXI6IGV2ZW50LmFuY2hv
ckJlZm9yZSwgaGVhZEFmdGVyOiBldmVudC5oZWFkQmVmb3JlfTsKLSAgICAodHlwZSA9PSAidW5k
byIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZSkucHVzaChhbnRpKTsKLQotICAgIGZvciAodmFy
IGkgPSBldmVudC5jaGFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICB2YXIg
Y2hhbmdlID0gZXZlbnQuY2hhbmdlc1tpXTsKLSAgICAgIGNoYW5nZS5vcmlnaW4gPSB0eXBlOwot
ICAgICAgYW50aS5jaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFu
Z2UpKTsKLQotICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2Ms
IGNoYW5nZSwgbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgOiB7YW5jaG9yOiBldmVudC5hbmNo
b3JCZWZvcmUsIGhlYWQ6IGV2ZW50LmhlYWRCZWZvcmV9OwotICAgICAgbWFrZUNoYW5nZVNpbmds
ZURvYyhkb2MsIGNoYW5nZSwgYWZ0ZXIsIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpKTsKLSAg
ICAgIHZhciByZWJhc2VkID0gW107Ci0KLSAgICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbihk
b2MsIHNoYXJlZEhpc3QpIHsKLSAgICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4T2YocmVi
YXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7Ci0gICAgICAgICAgcmViYXNlSGlzdChkb2MuaGlz
dG9yeSwgY2hhbmdlKTsKLSAgICAgICAgICByZWJhc2VkLnB1c2goZG9jLmhpc3RvcnkpOwotICAg
ICAgICB9Ci0gICAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIG1l
cmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpKTsKLSAgICAgIH0pOwotICAgIH0KLSAgfQotCi0gIGZ1
bmN0aW9uIHNoaWZ0RG9jKGRvYywgZGlzdGFuY2UpIHsKLSAgICBmdW5jdGlvbiBzaGlmdFBvcyhw
b3MpIHtyZXR1cm4gUG9zKHBvcy5saW5lICsgZGlzdGFuY2UsIHBvcy5jaCk7fQotICAgIGRvYy5m
aXJzdCArPSBkaXN0YW5jZTsKLSAgICBpZiAoZG9jLmNtKSByZWdDaGFuZ2UoZG9jLmNtLCBkb2Mu
Zmlyc3QsIGRvYy5maXJzdCwgZGlzdGFuY2UpOwotICAgIGRvYy5zZWwuaGVhZCA9IHNoaWZ0UG9z
KGRvYy5zZWwuaGVhZCk7IGRvYy5zZWwuYW5jaG9yID0gc2hpZnRQb3MoZG9jLnNlbC5hbmNob3Ip
OwotICAgIGRvYy5zZWwuZnJvbSA9IHNoaWZ0UG9zKGRvYy5zZWwuZnJvbSk7IGRvYy5zZWwudG8g
PSBzaGlmdFBvcyhkb2Muc2VsLnRvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5n
bGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgewotICAgIGlmIChkb2MuY20gJiYg
IWRvYy5jbS5jdXJPcCkKLSAgICAgIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdl
U2luZ2xlRG9jKShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKTsKLQotICAgIGlmIChjaGFu
Z2UudG8ubGluZSA8IGRvYy5maXJzdCkgewotICAgICAgc2hpZnREb2MoZG9jLCBjaGFuZ2UudGV4
dC5sZW5ndGggLSAxIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkpOwotICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGlu
ZSgpKSByZXR1cm47Ci0KLSAgICAvLyBDbGlwIHRoZSBjaGFuZ2UgdG8gdGhlIHNpemUgb2YgdGhp
cyBkb2MKLSAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA8IGRvYy5maXJzdCkgewotICAgICAgdmFy
IHNoaWZ0ID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJv
bS5saW5lKTsKLSAgICAgIHNoaWZ0RG9jKGRvYywgc2hpZnQpOwotICAgICAgY2hhbmdlID0ge2Zy
b206IFBvcyhkb2MuZmlyc3QsIDApLCB0bzogUG9zKGNoYW5nZS50by5saW5lICsgc2hpZnQsIGNo
YW5nZS50by5jaCksCi0gICAgICAgICAgICAgICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBv
cmlnaW46IGNoYW5nZS5vcmlnaW59OwotICAgIH0KLSAgICB2YXIgbGFzdCA9IGRvYy5sYXN0TGlu
ZSgpOwotICAgIGlmIChjaGFuZ2UudG8ubGluZSA+IGxhc3QpIHsKLSAgICAgIGNoYW5nZSA9IHtm
cm9tOiBjaGFuZ2UuZnJvbSwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5s
ZW5ndGgpLAotICAgICAgICAgICAgICAgIHRleHQ6IFtjaGFuZ2UudGV4dFswXV0sIG9yaWdpbjog
Y2hhbmdlLm9yaWdpbn07Ci0gICAgfQotCi0gICAgY2hhbmdlLnJlbW92ZWQgPSBnZXRCZXR3ZWVu
KGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7Ci0KLSAgICBpZiAoIXNlbEFmdGVyKSBzZWxB
ZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSwgbnVsbCk7Ci0gICAgaWYg
KGRvYy5jbSkgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFu
cywgc2VsQWZ0ZXIpOwotICAgIGVsc2UgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucywgc2Vs
QWZ0ZXIpOwotICB9Ci0KLSAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGNt
LCBjaGFuZ2UsIHNwYW5zLCBzZWxBZnRlcikgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3Bs
YXkgPSBjbS5kaXNwbGF5LCBmcm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hhbmdlLnRvOwotCi0g
ICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBjaGVja1dpZHRoU3RhcnQgPSBmcm9t
LmxpbmU7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewotICAgICAgY2hlY2tX
aWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZG9jLCBnZXRMaW5lKGRvYywgZnJvbS5saW5l
KSkpOwotICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rp
b24obGluZSkgewotICAgICAgICBpZiAobGluZSA9PSBkaXNwbGF5Lm1heExpbmUpIHsKLSAgICAg
ICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSB0cnVlOwotICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICB1cGRhdGVEb2MoZG9jLCBjaGFuZ2Us
IHNwYW5zLCBzZWxBZnRlciwgZXN0aW1hdGVIZWlnaHQoY20pKTsKLQotICAgIGlmICghY20ub3B0
aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwgZnJv
bS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZh
ciBsZW4gPSBsaW5lTGVuZ3RoKGRvYywgbGluZSk7Ci0gICAgICAgIGlmIChsZW4gPiBkaXNwbGF5
Lm1heExpbmVMZW5ndGgpIHsKLSAgICAgICAgICBkaXNwbGF5Lm1heExpbmUgPSBsaW5lOwotICAg
ICAgICAgIGRpc3BsYXkubWF4TGluZUxlbmd0aCA9IGxlbjsKLSAgICAgICAgICBkaXNwbGF5Lm1h
eExpbmVDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBpZiAocmVjb21wdXRlTWF4TGVuZ3RoKSBj
bS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBBZGp1c3QgZnJv
bnRpZXIsIHNjaGVkdWxlIHdvcmtlcgotICAgIGRvYy5mcm9udGllciA9IE1hdGgubWluKGRvYy5m
cm9udGllciwgZnJvbS5saW5lKTsKLSAgICBzdGFydFdvcmtlcihjbSwgNDAwKTsKLQotICAgIHZh
ciBsZW5kaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0g
MTsKLSAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGlu
ZyB0aGUgZGlzcGxheQotICAgIHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSwg
bGVuZGlmZik7Ci0KLSAgICBpZiAoaGFzSGFuZGxlcihjbSwgImNoYW5nZSIpKSB7Ci0gICAgICB2
YXIgY2hhbmdlT2JqID0ge2Zyb206IGZyb20sIHRvOiB0bywKLSAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dDogY2hhbmdlLnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IGNo
YW5nZS5yZW1vdmVkLAotICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IGNoYW5nZS5vcmln
aW59OwotICAgICAgaWYgKGNtLmN1ck9wLnRleHRDaGFuZ2VkKSB7Ci0gICAgICAgIGZvciAodmFy
IGN1ciA9IGNtLmN1ck9wLnRleHRDaGFuZ2VkOyBjdXIubmV4dDsgY3VyID0gY3VyLm5leHQpIHt9
Ci0gICAgICAgIGN1ci5uZXh0ID0gY2hhbmdlT2JqOwotICAgICAgfSBlbHNlIGNtLmN1ck9wLnRl
eHRDaGFuZ2VkID0gY2hhbmdlT2JqOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHJlcGxhY2VS
YW5nZShkb2MsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHsKLSAgICBpZiAoIXRvKSB0byA9IGZy
b207Ci0gICAgaWYgKHBvc0xlc3ModG8sIGZyb20pKSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9t
OyBmcm9tID0gdG1wOyB9Ci0gICAgaWYgKHR5cGVvZiBjb2RlID09ICJzdHJpbmciKSBjb2RlID0g
c3BsaXRMaW5lcyhjb2RlKTsKLSAgICBtYWtlQ2hhbmdlKGRvYywge2Zyb206IGZyb20sIHRvOiB0
bywgdGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59LCBudWxsKTsKLSAgfQotCi0gIC8vIFBPU0lU
SU9OIE9CSkVDVAotCi0gIGZ1bmN0aW9uIFBvcyhsaW5lLCBjaCkgewotICAgIGlmICghKHRoaXMg
aW5zdGFuY2VvZiBQb3MpKSByZXR1cm4gbmV3IFBvcyhsaW5lLCBjaCk7Ci0gICAgdGhpcy5saW5l
ID0gbGluZTsgdGhpcy5jaCA9IGNoOwotICB9Ci0gIENvZGVNaXJyb3IuUG9zID0gUG9zOwotCi0g
IGZ1bmN0aW9uIHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNoID09
IGIuY2g7fQotICBmdW5jdGlvbiBwb3NMZXNzKGEsIGIpIHtyZXR1cm4gYS5saW5lIDwgYi5saW5l
IHx8IChhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPCBiLmNoKTt9Ci0gIGZ1bmN0aW9uIGNvcHlQ
b3MoeCkge3JldHVybiBQb3MoeC5saW5lLCB4LmNoKTt9Ci0KLSAgLy8gU0VMRUNUSU9OCi0KLSAg
ZnVuY3Rpb24gY2xpcExpbmUoZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0
aC5taW4obiwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSk7fQotICBmdW5jdGlvbiBjbGlwUG9z
KGRvYywgcG9zKSB7Ci0gICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSByZXR1cm4gUG9zKGRv
Yy5maXJzdCwgMCk7Ci0gICAgdmFyIGxhc3QgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE7Ci0g
ICAgaWYgKHBvcy5saW5lID4gbGFzdCkgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFz
dCkudGV4dC5sZW5ndGgpOwotICAgIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywg
cG9zLmxpbmUpLnRleHQubGVuZ3RoKTsKLSAgfQotICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBs
aW5lbGVuKSB7Ci0gICAgdmFyIGNoID0gcG9zLmNoOwotICAgIGlmIChjaCA9PSBudWxsIHx8IGNo
ID4gbGluZWxlbikgcmV0dXJuIFBvcyhwb3MubGluZSwgbGluZWxlbik7Ci0gICAgZWxzZSBpZiAo
Y2ggPCAwKSByZXR1cm4gUG9zKHBvcy5saW5lLCAwKTsKLSAgICBlbHNlIHJldHVybiBwb3M7Ci0g
IH0KLSAgZnVuY3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IGRvYy5maXJzdCAmJiBs
IDwgZG9jLmZpcnN0ICsgZG9jLnNpemU7fQotCi0gIC8vIElmIHNoaWZ0IGlzIGhlbGQsIHRoaXMg
d2lsbCBtb3ZlIHRoZSBzZWxlY3Rpb24gYW5jaG9yLiBPdGhlcndpc2UsCi0gIC8vIGl0J2xsIHNl
dCB0aGUgd2hvbGUgc2VsZWN0aW9uLgotICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oZG9jLCBw
b3MsIG90aGVyLCBiaWFzKSB7Ci0gICAgaWYgKGRvYy5zZWwuc2hpZnQgfHwgZG9jLnNlbC5leHRl
bmQpIHsKLSAgICAgIHZhciBhbmNob3IgPSBkb2Muc2VsLmFuY2hvcjsKLSAgICAgIGlmIChvdGhl
cikgewotICAgICAgICB2YXIgcG9zQmVmb3JlID0gcG9zTGVzcyhwb3MsIGFuY2hvcik7Ci0gICAg
ICAgIGlmIChwb3NCZWZvcmUgIT0gcG9zTGVzcyhvdGhlciwgYW5jaG9yKSkgewotICAgICAgICAg
IGFuY2hvciA9IHBvczsKLSAgICAgICAgICBwb3MgPSBvdGhlcjsKLSAgICAgICAgfSBlbHNlIGlm
IChwb3NCZWZvcmUgIT0gcG9zTGVzcyhwb3MsIG90aGVyKSkgewotICAgICAgICAgIHBvcyA9IG90
aGVyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBhbmNob3Is
IHBvcywgYmlhcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIHBvcywg
b3RoZXIgfHwgcG9zLCBiaWFzKTsKLSAgICB9Ci0gICAgaWYgKGRvYy5jbSkgZG9jLmNtLmN1ck9w
LnVzZXJTZWxDaGFuZ2UgPSB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9u
Q2hhbmdlKGRvYywgYW5jaG9yLCBoZWFkKSB7Ci0gICAgdmFyIG9iaiA9IHthbmNob3I6IGFuY2hv
ciwgaGVhZDogaGVhZH07Ci0gICAgc2lnbmFsKGRvYywgImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIs
IGRvYywgb2JqKTsKLSAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVmb3JlU2VsZWN0
aW9uQ2hhbmdlIiwgZG9jLmNtLCBvYmopOwotICAgIG9iai5hbmNob3IgPSBjbGlwUG9zKGRvYywg
b2JqLmFuY2hvcik7IG9iai5oZWFkID0gY2xpcFBvcyhkb2MsIG9iai5oZWFkKTsKLSAgICByZXR1
cm4gb2JqOwotICB9Ci0KLSAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3Mg
YXJlIG9ubHkgdXNlZCBieQotICAvLyB1cGRhdGVEb2MsIHNpbmNlIHRoZXkgaGF2ZSB0byBiZSBl
eHByZXNzZWQgaW4gdGhlIGxpbmUKLSAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KLSAg
ZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGRvYywgYW5jaG9yLCBoZWFkLCBiaWFzLCBjaGVja0F0b21p
YykgewotICAgIGlmICghY2hlY2tBdG9taWMgJiYgaGFzSGFuZGxlcihkb2MsICJiZWZvcmVTZWxl
Y3Rpb25DaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVTZWxl
Y3Rpb25DaGFuZ2UiKSkgewotICAgICAgdmFyIGZpbHRlcmVkID0gZmlsdGVyU2VsZWN0aW9uQ2hh
bmdlKGRvYywgYW5jaG9yLCBoZWFkKTsKLSAgICAgIGhlYWQgPSBmaWx0ZXJlZC5oZWFkOwotICAg
ICAgYW5jaG9yID0gZmlsdGVyZWQuYW5jaG9yOwotICAgIH0KLQotICAgIHZhciBzZWwgPSBkb2Mu
c2VsOwotICAgIHNlbC5nb2FsQ29sdW1uID0gbnVsbDsKLSAgICAvLyBTa2lwIG92ZXIgYXRvbWlj
IHNwYW5zLgotICAgIGlmIChjaGVja0F0b21pYyB8fCAhcG9zRXEoYW5jaG9yLCBzZWwuYW5jaG9y
KSkKLSAgICAgIGFuY2hvciA9IHNraXBBdG9taWMoZG9jLCBhbmNob3IsIGJpYXMsIGNoZWNrQXRv
bWljICE9ICJwdXNoIik7Ci0gICAgaWYgKGNoZWNrQXRvbWljIHx8ICFwb3NFcShoZWFkLCBzZWwu
aGVhZCkpCi0gICAgICBoZWFkID0gc2tpcEF0b21pYyhkb2MsIGhlYWQsIGJpYXMsIGNoZWNrQXRv
bWljICE9ICJwdXNoIik7Ci0KLSAgICBpZiAocG9zRXEoc2VsLmFuY2hvciwgYW5jaG9yKSAmJiBw
b3NFcShzZWwuaGVhZCwgaGVhZCkpIHJldHVybjsKLQotICAgIHNlbC5hbmNob3IgPSBhbmNob3I7
IHNlbC5oZWFkID0gaGVhZDsKLSAgICB2YXIgaW52ID0gcG9zTGVzcyhoZWFkLCBhbmNob3IpOwot
ICAgIHNlbC5mcm9tID0gaW52ID8gaGVhZCA6IGFuY2hvcjsKLSAgICBzZWwudG8gPSBpbnYgPyBh
bmNob3IgOiBoZWFkOwotCi0gICAgaWYgKGRvYy5jbSkKLSAgICAgIGRvYy5jbS5jdXJPcC51cGRh
dGVJbnB1dCA9IGRvYy5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKLQotICAgIHNp
Z25hbExhdGVyKGRvYywgImN1cnNvckFjdGl2aXR5IiwgZG9jKTsKLSAgfQotCi0gIGZ1bmN0aW9u
IHJlQ2hlY2tTZWxlY3Rpb24oY20pIHsKLSAgICBzZXRTZWxlY3Rpb24oY20uZG9jLCBjbS5kb2Mu
c2VsLmZyb20sIGNtLmRvYy5zZWwudG8sIG51bGwsICJwdXNoIik7Ci0gIH0KLQotICBmdW5jdGlv
biBza2lwQXRvbWljKGRvYywgcG9zLCBiaWFzLCBtYXlDbGVhcikgewotICAgIHZhciBmbGlwcGVk
ID0gZmFsc2UsIGN1clBvcyA9IHBvczsKLSAgICB2YXIgZGlyID0gYmlhcyB8fCAxOwotICAgIGRv
Yy5jYW50RWRpdCA9IGZhbHNlOwotICAgIHNlYXJjaDogZm9yICg7OykgewotICAgICAgdmFyIGxp
bmUgPSBnZXRMaW5lKGRvYywgY3VyUG9zLmxpbmUpLCB0b0NsZWFyOwotICAgICAgaWYgKGxpbmUu
bWFya2VkU3BhbnMpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNw
YW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgdmFyIHNwID0gbGluZS5tYXJrZWRTcGFuc1tp
XSwgbSA9IHNwLm1hcmtlcjsKLSAgICAgICAgICBpZiAoKHNwLmZyb20gPT0gbnVsbCB8fCAobS5p
bmNsdXNpdmVMZWZ0ID8gc3AuZnJvbSA8PSBjdXJQb3MuY2ggOiBzcC5mcm9tIDwgY3VyUG9zLmNo
KSkgJiYKLSAgICAgICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgKG0uaW5jbHVzaXZlUmlnaHQg
PyBzcC50byA+PSBjdXJQb3MuY2ggOiBzcC50byA+IGN1clBvcy5jaCkpKSB7Ci0gICAgICAgICAg
ICBpZiAobWF5Q2xlYXIgJiYgbS5jbGVhck9uRW50ZXIpIHsKLSAgICAgICAgICAgICAgKHRvQ2xl
YXIgfHwgKHRvQ2xlYXIgPSBbXSkpLnB1c2gobSk7Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICghbS5hdG9taWMpIGNvbnRpbnVlOwotICAgICAgICAgICAg
dmFyIG5ld1BvcyA9IG0uZmluZCgpW2RpciA8IDAgPyAiZnJvbSIgOiAidG8iXTsKLSAgICAgICAg
ICAgIGlmIChwb3NFcShuZXdQb3MsIGN1clBvcykpIHsKLSAgICAgICAgICAgICAgbmV3UG9zLmNo
ICs9IGRpcjsKLSAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5jaCA8IDApIHsKLSAgICAgICAgICAg
ICAgICBpZiAobmV3UG9zLmxpbmUgPiBkb2MuZmlyc3QpIG5ld1BvcyA9IGNsaXBQb3MoZG9jLCBQ
b3MobmV3UG9zLmxpbmUgLSAxKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBuZXdQb3MgPSBudWxs
OwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvcy5jaCA+IGxpbmUudGV4dC5sZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPCBkb2MuZmlyc3QgKyBkb2Muc2l6
ZSAtIDEpIG5ld1BvcyA9IFBvcyhuZXdQb3MubGluZSArIDEsIDApOwotICAgICAgICAgICAgICAg
IGVsc2UgbmV3UG9zID0gbnVsbDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAo
IW5ld1BvcykgewotICAgICAgICAgICAgICAgIGlmIChmbGlwcGVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAvLyBEcml2ZW4gaW4gYSBjb3JuZXIgLS0gbm8gdmFsaWQgY3Vyc29yIHBvc2l0aW9uIGZv
dW5kIGF0IGFsbAotICAgICAgICAgICAgICAgICAgLy8gLS0gdHJ5IGFnYWluICp3aXRoKiBjbGVh
cmluZywgaWYgd2UgZGlkbid0IGFscmVhZHkKLSAgICAgICAgICAgICAgICAgIGlmICghbWF5Q2xl
YXIpIHJldHVybiBza2lwQXRvbWljKGRvYywgcG9zLCBiaWFzLCB0cnVlKTsKLSAgICAgICAgICAg
ICAgICAgIC8vIE90aGVyd2lzZSwgdHVybiBvZmYgZWRpdGluZyB1bnRpbCBmdXJ0aGVyIG5vdGlj
ZSwgYW5kIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRvYwotICAgICAgICAgICAgICAgICAgZG9j
LmNhbnRFZGl0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBQb3MoZG9jLmZpcnN0
LCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmxpcHBlZCA9IHRydWU7
IG5ld1BvcyA9IHBvczsgZGlyID0gLWRpcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY3VyUG9zID0gbmV3UG9zOwotICAgICAgICAgICAgY29udGludWUgc2Vh
cmNoOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodG9DbGVhcikgZm9yICh2
YXIgaSA9IDA7IGkgPCB0b0NsZWFyLmxlbmd0aDsgKytpKSB0b0NsZWFyW2ldLmNsZWFyKCk7Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gY3VyUG9zOwotICAgIH0KLSAgfQotCi0gIC8vIFNDUk9MTElO
RwotCi0gIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KGNtKSB7Ci0gICAgdmFyIGNvb3Jk
cyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbS5kb2Muc2VsLmhlYWQpOwotICAgIGlmICghY20u
c3RhdGUuZm9jdXNlZCkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94
ID0gZ2V0UmVjdChkaXNwbGF5LnNpemVyKSwgZG9TY3JvbGwgPSBudWxsLCBwVG9wID0gcGFkZGlu
Z1RvcChjbS5kaXNwbGF5KTsKLSAgICBpZiAoY29vcmRzLnRvcCArIHBUb3AgKyBib3gudG9wIDwg
MCkgZG9TY3JvbGwgPSB0cnVlOwotICAgIGVsc2UgaWYgKGNvb3Jkcy5ib3R0b20gKyBwVG9wICsg
Ym94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
LmNsaWVudEhlaWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7Ci0gICAgaWYgKGRvU2Nyb2xsICE9IG51
bGwgJiYgIXBoYW50b20pIHsKLSAgICAgIHZhciBoaWRkZW4gPSBkaXNwbGF5LmN1cnNvci5zdHls
ZS5kaXNwbGF5ID09ICJub25lIjsKLSAgICAgIGlmIChoaWRkZW4pIHsKLSAgICAgICAgZGlzcGxh
eS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHls
ZS5sZWZ0ID0gY29vcmRzLmxlZnQgKyAicHgiOwotICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHls
ZS50b3AgPSAoY29vcmRzLnRvcCAtIGRpc3BsYXkudmlld09mZnNldCkgKyAicHgiOwotICAgICAg
fQotICAgICAgZGlzcGxheS5jdXJzb3Iuc2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpOwotICAgICAg
aWYgKGhpZGRlbikgZGlzcGxheS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICB9
Ci0gIH0KLQotICBmdW5jdGlvbiBzY3JvbGxQb3NJbnRvVmlldyhjbSwgcG9zLCBtYXJnaW4pIHsK
LSAgICBpZiAobWFyZ2luID09IG51bGwpIG1hcmdpbiA9IDA7Ci0gICAgZm9yICg7OykgewotICAg
ICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpOwot
ICAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgY29vcmRzLmxlZnQs
IGNvb3Jkcy50b3AgLSBtYXJnaW4sIGNvb3Jkcy5sZWZ0LCBjb29yZHMuYm90dG9tICsgbWFyZ2lu
KTsKLSAgICAgIHZhciBzdGFydFRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIHN0YXJ0TGVmdCA9IGNt
LmRvYy5zY3JvbGxMZWZ0OwotICAgICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkg
ewotICAgICAgICBzZXRTY3JvbGxUb3AoY20sIHNjcm9sbFBvcy5zY3JvbGxUb3ApOwotICAgICAg
ICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHN0YXJ0VG9wKSA+IDEpIGNoYW5nZWQg
PSB0cnVlOwotICAgICAgfQotICAgICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxMZWZ0ICE9IG51bGwp
IHsKLSAgICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgc2Nyb2xsUG9zLnNjcm9sbExlZnQpOwotICAg
ICAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbExlZnQgLSBzdGFydExlZnQpID4gMSkgY2hh
bmdlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoIWNoYW5nZWQpIHJldHVybiBjb29yZHM7
Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoY20sIHgxLCB5MSwgeDIs
IHkyKSB7Ci0gICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkx
LCB4MiwgeTIpOwotICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHNldFNjcm9s
bFRvcChjbSwgc2Nyb2xsUG9zLnNjcm9sbFRvcCk7Ci0gICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxM
ZWZ0ICE9IG51bGwpIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsKLSAg
fQotCi0gIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgeDEsIHkxLCB4MiwgeTIpIHsK
LSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHB0ID0gcGFkZGluZ1RvcChkaXNwbGF5KTsK
LSAgICB5MSArPSBwdDsgeTIgKz0gcHQ7Ci0gICAgdmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xs
ZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVlbnRvcCA9IGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsVG9wLCByZXN1bHQgPSB7fTsKLSAgICB2YXIgZG9jQm90dG9tID0gY20uZG9j
LmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpOwotICAgIHZhciBhdFRvcCA9IHkxIDwgcHQg
KyAxMCwgYXRCb3R0b20gPSB5MiArIHB0ID4gZG9jQm90dG9tIC0gMTA7Ci0gICAgaWYgKHkxIDwg
c2NyZWVudG9wKSByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogTWF0aC5tYXgoMCwgeTEp
OwotICAgIGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSByZXN1bHQuc2Nyb2xsVG9w
ID0gKGF0Qm90dG9tID8gZG9jQm90dG9tIDogeTIpIC0gc2NyZWVuOwotCi0gICAgdmFyIHNjcmVl
bncgPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVl
bmxlZnQgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQ7Ci0gICAgeDEgKz0gZGlzcGxheS5n
dXR0ZXJzLm9mZnNldFdpZHRoOyB4MiArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0g
ICAgdmFyIGd1dHRlcncgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGF0
TGVmdCA9IHgxIDwgZ3V0dGVydyArIDEwOwotICAgIGlmICh4MSA8IHNjcmVlbmxlZnQgKyBndXR0
ZXJ3IHx8IGF0TGVmdCkgewotICAgICAgaWYgKGF0TGVmdCkgeDEgPSAwOwotICAgICAgcmVzdWx0
LnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7Ci0gICAgfSBlbHNl
IGlmICh4MiA+IHNjcmVlbncgKyBzY3JlZW5sZWZ0IC0gMykgewotICAgICAgcmVzdWx0LnNjcm9s
bExlZnQgPSB4MiArIDEwIC0gc2NyZWVudzsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
fQotCi0gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFBvcyhjbSwgbGVmdCwgdG9wKSB7Ci0gICAgY20u
Y3VyT3AudXBkYXRlU2Nyb2xsUG9zID0ge3Njcm9sbExlZnQ6IGxlZnQsIHNjcm9sbFRvcDogdG9w
fTsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZFRvU2Nyb2xsUG9zKGNtLCBsZWZ0LCB0b3ApIHsKLSAg
ICB2YXIgcG9zID0gY20uY3VyT3AudXBkYXRlU2Nyb2xsUG9zIHx8IChjbS5jdXJPcC51cGRhdGVT
Y3JvbGxQb3MgPSB7c2Nyb2xsTGVmdDogY20uZG9jLnNjcm9sbExlZnQsIHNjcm9sbFRvcDogY20u
ZG9jLnNjcm9sbFRvcH0pOwotICAgIHZhciBzY3JvbGwgPSBjbS5kaXNwbGF5LnNjcm9sbGVyOwot
ICAgIHBvcy5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGwuc2Nyb2xsSGVp
Z2h0IC0gc2Nyb2xsLmNsaWVudEhlaWdodCwgcG9zLnNjcm9sbFRvcCArIHRvcCkpOwotICAgIHBv
cy5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9sbFdpZHRoIC0g
c2Nyb2xsLmNsaWVudFdpZHRoLCBwb3Muc2Nyb2xsTGVmdCArIGxlZnQpKTsKLSAgfQotCi0gIC8v
IEFQSSBVVElMSVRJRVMKLQotICBmdW5jdGlvbiBpbmRlbnRMaW5lKGNtLCBuLCBob3csIGFnZ3Jl
c3NpdmUpIHsKLSAgICB2YXIgZG9jID0gY20uZG9jOwotICAgIGlmICghaG93KSBob3cgPSAiYWRk
IjsKLSAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKLSAgICAgIGlmICghY20uZG9jLm1vZGUuaW5k
ZW50KSBob3cgPSAicHJldiI7Ci0gICAgICBlbHNlIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3Jl
KGNtLCBuKTsKLSAgICB9Ci0KLSAgICB2YXIgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsK
LSAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwgY3VyU3BhY2UgPSBjb3VudENvbHVtbihs
aW5lLnRleHQsIG51bGwsIHRhYlNpemUpOwotICAgIHZhciBjdXJTcGFjZVN0cmluZyA9IGxpbmUu
dGV4dC5tYXRjaCgvXlxzKi8pWzBdLCBpbmRlbnRhdGlvbjsKLSAgICBpZiAoaG93ID09ICJzbWFy
dCIpIHsKLSAgICAgIGluZGVudGF0aW9uID0gY20uZG9jLm1vZGUuaW5kZW50KHN0YXRlLCBsaW5l
LnRleHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKLSAgICAgIGlm
IChpbmRlbnRhdGlvbiA9PSBQYXNzKSB7Ci0gICAgICAgIGlmICghYWdncmVzc2l2ZSkgcmV0dXJu
OwotICAgICAgICBob3cgPSAicHJldiI7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChob3cgPT0g
InByZXYiKSB7Ci0gICAgICBpZiAobiA+IGRvYy5maXJzdCkgaW5kZW50YXRpb24gPSBjb3VudENv
bHVtbihnZXRMaW5lKGRvYywgbi0xKS50ZXh0LCBudWxsLCB0YWJTaXplKTsKLSAgICAgIGVsc2Ug
aW5kZW50YXRpb24gPSAwOwotICAgIH0gZWxzZSBpZiAoaG93ID09ICJhZGQiKSB7Ci0gICAgICBp
bmRlbnRhdGlvbiA9IGN1clNwYWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0OwotICAgIH0gZWxz
ZSBpZiAoaG93ID09ICJzdWJ0cmFjdCIpIHsKLSAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2Ug
LSBjbS5vcHRpb25zLmluZGVudFVuaXQ7Ci0gICAgfQotICAgIGluZGVudGF0aW9uID0gTWF0aC5t
YXgoMCwgaW5kZW50YXRpb24pOwotCi0gICAgdmFyIGluZGVudFN0cmluZyA9ICIiLCBwb3MgPSAw
OwotICAgIGlmIChjbS5vcHRpb25zLmluZGVudFdpdGhUYWJzKQotICAgICAgZm9yICh2YXIgaSA9
IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyB0YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IHRhYlNp
emU7IGluZGVudFN0cmluZyArPSAiXHQiO30KLSAgICBpZiAocG9zIDwgaW5kZW50YXRpb24pIGlu
ZGVudFN0cmluZyArPSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7Ci0KLSAgICBpZiAoaW5k
ZW50U3RyaW5nICE9IGN1clNwYWNlU3RyaW5nKQotICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywg
aW5kZW50U3RyaW5nLCBQb3MobiwgMCksIFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCAi
K2lucHV0Iik7Ci0gICAgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKLSAgfQotCi0gIGZ1bmN0aW9u
IGNoYW5nZUxpbmUoY20sIGhhbmRsZSwgb3ApIHsKLSAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUg
PSBoYW5kbGUsIGRvYyA9IGNtLmRvYzsKLSAgICBpZiAodHlwZW9mIGhhbmRsZSA9PSAibnVtYmVy
IikgbGluZSA9IGdldExpbmUoZG9jLCBjbGlwTGluZShkb2MsIGhhbmRsZSkpOwotICAgIGVsc2Ug
bm8gPSBsaW5lTm8oaGFuZGxlKTsKLSAgICBpZiAobm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0g
ICAgaWYgKG9wKGxpbmUsIG5vKSkgcmVnQ2hhbmdlKGNtLCBubywgbm8gKyAxKTsKLSAgICBlbHNl
IHJldHVybiBudWxsOwotICAgIHJldHVybiBsaW5lOwotICB9Ci0KLSAgZnVuY3Rpb24gZmluZFBv
c0goZG9jLCBwb3MsIGRpciwgdW5pdCwgdmlzdWFsbHkpIHsKLSAgICB2YXIgbGluZSA9IHBvcy5s
aW5lLCBjaCA9IHBvcy5jaDsKLSAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsK
LSAgICB2YXIgcG9zc2libGUgPSB0cnVlOwotICAgIGZ1bmN0aW9uIGZpbmROZXh0TGluZSgpIHsK
LSAgICAgIHZhciBsID0gbGluZSArIGRpcjsKLSAgICAgIGlmIChsIDwgZG9jLmZpcnN0IHx8IGwg
Pj0gZG9jLmZpcnN0ICsgZG9jLnNpemUpIHJldHVybiAocG9zc2libGUgPSBmYWxzZSk7Ci0gICAg
ICBsaW5lID0gbDsKLSAgICAgIHJldHVybiBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGwpOwotICAg
IH0KLSAgICBmdW5jdGlvbiBtb3ZlT25jZShib3VuZFRvTGluZSkgewotICAgICAgdmFyIG5leHQg
PSAodmlzdWFsbHkgPyBtb3ZlVmlzdWFsbHkgOiBtb3ZlTG9naWNhbGx5KShsaW5lT2JqLCBjaCwg
ZGlyLCB0cnVlKTsKLSAgICAgIGlmIChuZXh0ID09IG51bGwpIHsKLSAgICAgICAgaWYgKCFib3Vu
ZFRvTGluZSAmJiBmaW5kTmV4dExpbmUoKSkgewotICAgICAgICAgIGlmICh2aXN1YWxseSkgY2gg
PSAoZGlyIDwgMCA/IGxpbmVSaWdodCA6IGxpbmVMZWZ0KShsaW5lT2JqKTsKLSAgICAgICAgICBl
bHNlIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggOiAwOwotICAgICAgICB9IGVs
c2UgcmV0dXJuIChwb3NzaWJsZSA9IGZhbHNlKTsKLSAgICAgIH0gZWxzZSBjaCA9IG5leHQ7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodW5pdCA9PSAiY2hhciIpIG1vdmVP
bmNlKCk7Ci0gICAgZWxzZSBpZiAodW5pdCA9PSAiY29sdW1uIikgbW92ZU9uY2UodHJ1ZSk7Ci0g
ICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIgfHwgdW5pdCA9PSAiZ3JvdXAiKSB7Ci0gICAgICB2
YXIgc2F3VHlwZSA9IG51bGwsIGdyb3VwID0gdW5pdCA9PSAiZ3JvdXAiOwotICAgICAgZm9yICh2
YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkgewotICAgICAgICBpZiAoZGlyIDwgMCAm
JiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7Ci0gICAgICAgIHZhciBjdXIgPSBsaW5lT2JqLnRl
eHQuY2hhckF0KGNoKSB8fCAiXG4iOwotICAgICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3Vy
KSA/ICJ3IgotICAgICAgICAgIDogIWdyb3VwID8gbnVsbAotICAgICAgICAgIDogL1xzLy50ZXN0
KGN1cikgPyBudWxsCi0gICAgICAgICAgOiAicCI7Ci0gICAgICAgIGlmIChzYXdUeXBlICYmIHNh
d1R5cGUgIT0gdHlwZSkgewotICAgICAgICAgIGlmIChkaXIgPCAwKSB7ZGlyID0gMTsgbW92ZU9u
Y2UoKTt9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUpIHNh
d1R5cGUgPSB0eXBlOwotICAgICAgICBpZiAoZGlyID4gMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkg
YnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHZhciByZXN1bHQgPSBza2lwQXRvbWljKGRvYywg
UG9zKGxpbmUsIGNoKSwgZGlyLCB0cnVlKTsKLSAgICBpZiAoIXBvc3NpYmxlKSByZXN1bHQuaGl0
U2lkZSA9IHRydWU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpbmRQ
b3NWKGNtLCBwb3MsIGRpciwgdW5pdCkgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIHggPSBwb3Mu
bGVmdCwgeTsKLSAgICBpZiAodW5pdCA9PSAicGFnZSIpIHsKLSAgICAgIHZhciBwYWdlU2l6ZSA9
IE1hdGgubWluKGNtLmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhl
aWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTsKLSAgICAgIHkg
PSBwb3MudG9wICsgZGlyICogKHBhZ2VTaXplIC0gKGRpciA8IDAgPyAxLjUgOiAuNSkgKiB0ZXh0
SGVpZ2h0KGNtLmRpc3BsYXkpKTsKLSAgICB9IGVsc2UgaWYgKHVuaXQgPT0gImxpbmUiKSB7Ci0g
ICAgICB5ID0gZGlyID4gMCA/IHBvcy5ib3R0b20gKyAzIDogcG9zLnRvcCAtIDM7Ci0gICAgfQot
ICAgIGZvciAoOzspIHsKLSAgICAgIHZhciB0YXJnZXQgPSBjb29yZHNDaGFyKGNtLCB4LCB5KTsK
LSAgICAgIGlmICghdGFyZ2V0Lm91dHNpZGUpIGJyZWFrOwotICAgICAgaWYgKGRpciA8IDAgPyB5
IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFyZ2V0LmhpdFNpZGUgPSB0cnVlOyBicmVhazsg
fQotICAgICAgeSArPSBkaXIgKiA1OwotICAgIH0KLSAgICByZXR1cm4gdGFyZ2V0OwotICB9Ci0K
LSAgZnVuY3Rpb24gZmluZFdvcmRBdChsaW5lLCBwb3MpIHsKLSAgICB2YXIgc3RhcnQgPSBwb3Mu
Y2gsIGVuZCA9IHBvcy5jaDsKLSAgICBpZiAobGluZSkgewotICAgICAgaWYgKHBvcy5hZnRlciA9
PT0gZmFsc2UgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAtLXN0YXJ0OyBlbHNlICsrZW5kOwotICAg
ICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsKLSAgICAgIHZhciBjaGVjayA9
IGlzV29yZENoYXIoc3RhcnRDaGFyKSA/IGlzV29yZENoYXIKLSAgICAgICAgOiAvXHMvLnRlc3Qo
c3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fQotICAgICAg
ICA6IGZ1bmN0aW9uKGNoKSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNo
KTt9OwotICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAt
IDEpKSkgLS1zdGFydDsKLSAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhs
aW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7Ci0gICAgfQotICAgIHJldHVybiB7ZnJvbTogUG9zKHBv
cy5saW5lLCBzdGFydCksIHRvOiBQb3MocG9zLmxpbmUsIGVuZCl9OwotICB9Ci0KLSAgZnVuY3Rp
b24gc2VsZWN0TGluZShjbSwgbGluZSkgewotICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIFBv
cyhsaW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhsaW5lICsgMSwgMCkpKTsKLSAgfQotCi0g
IC8vIFBST1RPVFlQRQotCi0gIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0
IG9wZXJhdGlvbihudWxsLCBmKSBtZWFucwotICAvLyAnd3JhcCBmIGluIGFuIG9wZXJhdGlvbiwg
cGVyZm9ybWVkIG9uIGl0cyBgdGhpc2AgcGFyYW1ldGVyJwotCi0gIENvZGVNaXJyb3IucHJvdG90
eXBlID0gewotICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyBmb2N1c0lucHV0
KHRoaXMpOyBvbkZvY3VzKHRoaXMpOyBmYXN0UG9sbCh0aGlzKTt9LAotCi0gICAgc2V0T3B0aW9u
OiBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7Ci0gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0
aW9ucywgb2xkID0gb3B0aW9uc1tvcHRpb25dOwotICAgICAgaWYgKG9wdGlvbnNbb3B0aW9uXSA9
PSB2YWx1ZSAmJiBvcHRpb24gIT0gIm1vZGUiKSByZXR1cm47Ci0gICAgICBvcHRpb25zW29wdGlv
bl0gPSB2YWx1ZTsKLSAgICAgIGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHRp
b24pKQotICAgICAgICBvcGVyYXRpb24odGhpcywgb3B0aW9uSGFuZGxlcnNbb3B0aW9uXSkodGhp
cywgdmFsdWUsIG9sZCk7Ci0gICAgfSwKLQotICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9u
KSB7cmV0dXJuIHRoaXMub3B0aW9uc1tvcHRpb25dO30sCi0gICAgZ2V0RG9jOiBmdW5jdGlvbigp
IHtyZXR1cm4gdGhpcy5kb2M7fSwKLQotICAgIGFkZEtleU1hcDogZnVuY3Rpb24obWFwKSB7Ci0g
ICAgICB0aGlzLnN0YXRlLmtleU1hcHMucHVzaChtYXApOwotICAgIH0sCi0gICAgcmVtb3ZlS2V5
TWFwOiBmdW5jdGlvbihtYXApIHsKLSAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBz
OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKQotICAgICAgICBp
ZiAoKHR5cGVvZiBtYXAgPT0gInN0cmluZyIgPyBtYXBzW2ldLm5hbWUgOiBtYXBzW2ldKSA9PSBt
YXApIHsKLSAgICAgICAgICBtYXBzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBhZGRPdmVybGF5OiBvcGVyYXRpb24obnVsbCwg
ZnVuY3Rpb24oc3BlYywgb3B0aW9ucykgewotICAgICAgdmFyIG1vZGUgPSBzcGVjLnRva2VuID8g
c3BlYyA6IENvZGVNaXJyb3IuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsIHNwZWMpOwotICAgICAgaWYg
KG1vZGUuc3RhcnRTdGF0ZSkgdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0
YXRlZnVsLiIpOwotICAgICAgdGhpcy5zdGF0ZS5vdmVybGF5cy5wdXNoKHttb2RlOiBtb2RlLCBt
b2RlU3BlYzogc3BlYywgb3BhcXVlOiBvcHRpb25zICYmIG9wdGlvbnMub3BhcXVlfSk7Ci0gICAg
ICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKLSAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICB9KSwK
LSAgICByZW1vdmVPdmVybGF5OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oc3BlYykgewotICAg
ICAgdmFyIG92ZXJsYXlzID0gdGhpcy5zdGF0ZS5vdmVybGF5czsKLSAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb3ZlcmxheXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKG92ZXJsYXlzW2ld
Lm1vZGVTcGVjID09IHNwZWMpIHsKLSAgICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7Ci0g
ICAgICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7Ci0gICAgICAgICAgcmVnQ2hhbmdlKHRoaXMp
OwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pLAotCi0gICAg
aW5kZW50TGluZTogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKG4sIGRpciwgYWdncmVzc2l2ZSkg
ewotICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIpIHsKLSAgICAgICAgaWYgKGRpciA9
PSBudWxsKSBkaXIgPSB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQgPyAic21hcnQiIDogInByZXYi
OwotICAgICAgICBlbHNlIGRpciA9IGRpciA/ICJhZGQiIDogInN1YnRyYWN0IjsKLSAgICAgIH0K
LSAgICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSBpbmRlbnRMaW5lKHRoaXMsIG4sIGRpciwg
YWdncmVzc2l2ZSk7Ci0gICAgfSksCi0gICAgaW5kZW50U2VsZWN0aW9uOiBvcGVyYXRpb24obnVs
bCwgZnVuY3Rpb24oaG93KSB7Ci0gICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsOwotICAgICAg
aWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gaW5kZW50TGluZSh0aGlzLCBzZWwu
ZnJvbS5saW5lLCBob3cpOwotICAgICAgdmFyIGUgPSBzZWwudG8ubGluZSAtIChzZWwudG8uY2gg
PyAwIDogMSk7Ci0gICAgICBmb3IgKHZhciBpID0gc2VsLmZyb20ubGluZTsgaSA8PSBlOyArK2kp
IGluZGVudExpbmUodGhpcywgaSwgaG93KTsKLSAgICB9KSwKLQotICAgIC8vIEZldGNoIHRoZSBw
YXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCi0gICAg
Ly8gdGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRp
b24pLgotICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcykgewotICAgICAgdmFyIGRvYyA9IHRo
aXMuZG9jOwotICAgICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7Ci0gICAgICB2YXIgc3RhdGUg
PSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBwb3MubGluZSksIG1vZGUgPSB0aGlzLmRvYy5tb2RlOwot
ICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpOwotICAgICAgdmFyIHN0cmVh
bSA9IG5ldyBTdHJpbmdTdHJlYW0obGluZS50ZXh0LCB0aGlzLm9wdGlvbnMudGFiU2l6ZSk7Ci0g
ICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHBvcy5jaCAmJiAhc3RyZWFtLmVvbCgpKSB7Ci0gICAg
ICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7Ci0gICAgICAgIHZhciBzdHlsZSA9IG1vZGUu
dG9rZW4oc3RyZWFtLCBzdGF0ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge3N0YXJ0OiBzdHJl
YW0uc3RhcnQsCi0gICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKLSAgICAgICAgICAgICAg
c3RyaW5nOiBzdHJlYW0uY3VycmVudCgpLAotICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxl
IHx8IG51bGwsIC8vIERlcHJlY2F0ZWQsIHVzZSAndHlwZScgaW5zdGVhZAotICAgICAgICAgICAg
ICB0eXBlOiBzdHlsZSB8fCBudWxsLAotICAgICAgICAgICAgICBzdGF0ZTogc3RhdGV9OwotICAg
IH0sCi0KLSAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgZG9j
ID0gdGhpcy5kb2M7Ci0gICAgICBsaW5lID0gY2xpcExpbmUoZG9jLCBsaW5lID09IG51bGwgPyBk
b2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6IGxpbmUpOwotICAgICAgcmV0dXJuIGdldFN0YXRlQmVm
b3JlKHRoaXMsIGxpbmUgKyAxKTsKLSAgICB9LAotCi0gICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlv
bihzdGFydCwgbW9kZSkgewotICAgICAgdmFyIHBvcywgc2VsID0gdGhpcy5kb2Muc2VsOwotICAg
ICAgaWYgKHN0YXJ0ID09IG51bGwpIHBvcyA9IHNlbC5oZWFkOwotICAgICAgZWxzZSBpZiAodHlw
ZW9mIHN0YXJ0ID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBzdGFydCk7Ci0g
ICAgICBlbHNlIHBvcyA9IHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG87Ci0gICAgICByZXR1cm4g
Y3Vyc29yQ29vcmRzKHRoaXMsIHBvcywgbW9kZSB8fCAicGFnZSIpOwotICAgIH0sCi0KLSAgICBj
aGFyQ29vcmRzOiBmdW5jdGlvbihwb3MsIG1vZGUpIHsKLSAgICAgIHJldHVybiBjaGFyQ29vcmRz
KHRoaXMsIGNsaXBQb3ModGhpcy5kb2MsIHBvcyksIG1vZGUgfHwgInBhZ2UiKTsKLSAgICB9LAot
Ci0gICAgY29vcmRzQ2hhcjogZnVuY3Rpb24oY29vcmRzLCBtb2RlKSB7Ci0gICAgICBjb29yZHMg
PSBmcm9tQ29vcmRTeXN0ZW0odGhpcywgY29vcmRzLCBtb2RlIHx8ICJwYWdlIik7Ci0gICAgICBy
ZXR1cm4gY29vcmRzQ2hhcih0aGlzLCBjb29yZHMubGVmdCwgY29vcmRzLnRvcCk7Ci0gICAgfSwK
LQotICAgIGRlZmF1bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRIZWlnaHQo
dGhpcy5kaXNwbGF5KTsgfSwKLSAgICBkZWZhdWx0Q2hhcldpZHRoOiBmdW5jdGlvbigpIHsgcmV0
dXJuIGNoYXJXaWR0aCh0aGlzLmRpc3BsYXkpOyB9LAotCi0gICAgc2V0R3V0dGVyTWFya2VyOiBv
cGVyYXRpb24obnVsbCwgZnVuY3Rpb24obGluZSwgZ3V0dGVySUQsIHZhbHVlKSB7Ci0gICAgICBy
ZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBsaW5lLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZh
ciBtYXJrZXJzID0gbGluZS5ndXR0ZXJNYXJrZXJzIHx8IChsaW5lLmd1dHRlck1hcmtlcnMgPSB7
fSk7Ci0gICAgICAgIG1hcmtlcnNbZ3V0dGVySURdID0gdmFsdWU7Ci0gICAgICAgIGlmICghdmFs
dWUgJiYgaXNFbXB0eShtYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIGNsZWFyR3V0dGVyOiBv
cGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZ3V0dGVySUQpIHsKLSAgICAgIHZhciBjbSA9IHRoaXMs
IGRvYyA9IGNtLmRvYywgaSA9IGRvYy5maXJzdDsKLSAgICAgIGRvYy5pdGVyKGZ1bmN0aW9uKGxp
bmUpIHsKLSAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRlck1hcmtl
cnNbZ3V0dGVySURdKSB7Ci0gICAgICAgICAgbGluZS5ndXR0ZXJNYXJrZXJzW2d1dHRlcklEXSA9
IG51bGw7Ci0gICAgICAgICAgcmVnQ2hhbmdlKGNtLCBpLCBpICsgMSk7Ci0gICAgICAgICAgaWYg
KGlzRW1wdHkobGluZS5ndXR0ZXJNYXJrZXJzKSkgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsK
LSAgICAgICAgfQotICAgICAgICArK2k7Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIGFkZExp
bmVDbGFzczogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgewot
ICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7Ci0g
ICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIgOiB3aGVyZSA9
PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFzcyIgOiAid3JhcENsYXNzIjsKLSAgICAgICAgaWYgKCFs
aW5lW3Byb3BdKSBsaW5lW3Byb3BdID0gY2xzOwotICAgICAgICBlbHNlIGlmIChuZXcgUmVnRXhw
KCJcXGIiICsgY2xzICsgIlxcYiIpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIHJlbW92ZUxpbmVDbGFzczogb3BlcmF0aW9uKG51
bGwsIGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgewotICAgICAgcmV0dXJuIGNoYW5nZUxp
bmUodGhpcywgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBwcm9wID0gd2hl
cmUgPT0gInRleHQiID8gInRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdD
bGFzcyIgOiAid3JhcENsYXNzIjsKLSAgICAgICAgdmFyIGN1ciA9IGxpbmVbcHJvcF07Ci0gICAg
ICAgIGlmICghY3VyKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGNscyA9PSBudWxs
KSBsaW5lW3Byb3BdID0gbnVsbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdmFyIHVwZCA9
IGN1ci5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iICsgY2xzICsgIlxcYlxccyp8XFxzKlxcYiIgKyBj
bHMgKyAiXFxiIiksICIiKTsKLSAgICAgICAgICBpZiAodXBkID09IGN1cikgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgIGxpbmVbcHJvcF0gPSB1cGQgfHwgbnVsbDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0pOwotICAgIH0pLAotCi0gICAgYWRkTGluZVdpZGdldDog
b3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewotICAgICAg
cmV0dXJuIGFkZExpbmVXaWRnZXQodGhpcywgaGFuZGxlLCBub2RlLCBvcHRpb25zKTsKLSAgICB9
KSwKLQotICAgIHJlbW92ZUxpbmVXaWRnZXQ6IGZ1bmN0aW9uKHdpZGdldCkgeyB3aWRnZXQuY2xl
YXIoKTsgfSwKLQotICAgIGxpbmVJbmZvOiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAodHlw
ZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKLSAgICAgICAgaWYgKCFpc0xpbmUodGhpcy5kb2MsIGxp
bmUpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIG4gPSBsaW5lOwotICAgICAgICBsaW5lID0g
Z2V0TGluZSh0aGlzLmRvYywgbGluZSk7Ci0gICAgICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgbiA9IGxpbmVObyhsaW5lKTsKLSAgICAgICAg
aWYgKG4gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge2xpbmU6
IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50ZXh0LCBndXR0ZXJNYXJrZXJzOiBsaW5lLmd1
dHRlck1hcmtlcnMsCi0gICAgICAgICAgICAgIHRleHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJn
Q2xhc3M6IGxpbmUuYmdDbGFzcywgd3JhcENsYXNzOiBsaW5lLndyYXBDbGFzcywKLSAgICAgICAg
ICAgICAgd2lkZ2V0czogbGluZS53aWRnZXRzfTsKLSAgICB9LAotCi0gICAgZ2V0Vmlld3BvcnQ6
IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2Zyb206IHRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSwgdG86
IHRoaXMuZGlzcGxheS5zaG93aW5nVG99O30sCi0KLSAgICBhZGRXaWRnZXQ6IGZ1bmN0aW9uKHBv
cywgbm9kZSwgc2Nyb2xsLCB2ZXJ0LCBob3JpeikgewotICAgICAgdmFyIGRpc3BsYXkgPSB0aGlz
LmRpc3BsYXk7Ci0gICAgICBwb3MgPSBjdXJzb3JDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRv
YywgcG9zKSk7Ci0gICAgICB2YXIgdG9wID0gcG9zLmJvdHRvbSwgbGVmdCA9IHBvcy5sZWZ0Owot
ICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7Ci0gICAgICBkaXNwbGF5LnNp
emVyLmFwcGVuZENoaWxkKG5vZGUpOwotICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB7Ci0gICAg
ICAgIHRvcCA9IHBvcy50b3A7Ci0gICAgICB9IGVsc2UgaWYgKHZlcnQgPT0gImFib3ZlIiB8fCB2
ZXJ0ID09ICJuZWFyIikgewotICAgICAgICB2YXIgdnNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS53
cmFwcGVyLmNsaWVudEhlaWdodCwgdGhpcy5kb2MuaGVpZ2h0KSwKLSAgICAgICAgaHNwYWNlID0g
TWF0aC5tYXgoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5saW5lU3BhY2UuY2xp
ZW50V2lkdGgpOwotICAgICAgICAvLyBEZWZhdWx0IHRvIHBvc2l0aW9uaW5nIGFib3ZlIChpZiBz
cGVjaWZpZWQgYW5kIHBvc3NpYmxlKTsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gcG9zaXRpb25pbmcg
YmVsb3cKLSAgICAgICAgaWYgKCh2ZXJ0ID09ICdhYm92ZScgfHwgcG9zLmJvdHRvbSArIG5vZGUu
b2Zmc2V0SGVpZ2h0ID4gdnNwYWNlKSAmJiBwb3MudG9wID4gbm9kZS5vZmZzZXRIZWlnaHQpCi0g
ICAgICAgICAgdG9wID0gcG9zLnRvcCAtIG5vZGUub2Zmc2V0SGVpZ2h0OwotICAgICAgICBlbHNl
IGlmIChwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPD0gdnNwYWNlKQotICAgICAgICAg
IHRvcCA9IHBvcy5ib3R0b207Ci0gICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+
IGhzcGFjZSkKLSAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKLSAg
ICAgIH0KLSAgICAgIG5vZGUuc3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdUb3AoZGlzcGxheSkp
ICsgInB4IjsKLSAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUucmlnaHQgPSAiIjsK
LSAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7Ci0gICAgICAgIGxlZnQgPSBkaXNwbGF5LnNp
emVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDsKLSAgICAgICAgbm9kZS5zdHlsZS5y
aWdodCA9ICIwcHgiOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGhvcml6ID09ICJsZWZ0
IikgbGVmdCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKGhvcml6ID09ICJtaWRkbGUiKSBsZWZ0ID0g
KGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoKSAvIDI7Ci0gICAg
ICAgIG5vZGUuc3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOwotICAgICAgfQotICAgICAgaWYgKHNj
cm9sbCkKLSAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcywgbGVmdCwgdG9wLCBsZWZ0ICsgbm9k
ZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQpOwotICAgIH0sCi0KLSAgICB0
cmlnZ2VyT25LZXlEb3duOiBvcGVyYXRpb24obnVsbCwgb25LZXlEb3duKSwKLQotICAgIGV4ZWND
b21tYW5kOiBmdW5jdGlvbihjbWQpIHtyZXR1cm4gY29tbWFuZHNbY21kXSh0aGlzKTt9LAotCi0g
ICAgZmluZFBvc0g6IGZ1bmN0aW9uKGZyb20sIGFtb3VudCwgdW5pdCwgdmlzdWFsbHkpIHsKLSAg
ICAgIHZhciBkaXIgPSAxOwotICAgICAgaWYgKGFtb3VudCA8IDApIHsgZGlyID0gLTE7IGFtb3Vu
dCA9IC1hbW91bnQ7IH0KLSAgICAgIGZvciAodmFyIGkgPSAwLCBjdXIgPSBjbGlwUG9zKHRoaXMu
ZG9jLCBmcm9tKTsgaSA8IGFtb3VudDsgKytpKSB7Ci0gICAgICAgIGN1ciA9IGZpbmRQb3NIKHRo
aXMuZG9jLCBjdXIsIGRpciwgdW5pdCwgdmlzdWFsbHkpOwotICAgICAgICBpZiAoY3VyLmhpdFNp
ZGUpIGJyZWFrOwotICAgICAgfQotICAgICAgcmV0dXJuIGN1cjsKLSAgICB9LAotCi0gICAgbW92
ZUg6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkaXIsIHVuaXQpIHsKLSAgICAgIHZhciBzZWwg
PSB0aGlzLmRvYy5zZWwsIHBvczsKLSAgICAgIGlmIChzZWwuc2hpZnQgfHwgc2VsLmV4dGVuZCB8
fCBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkKLSAgICAgICAgcG9zID0gZmluZFBvc0godGhpcy5k
b2MsIHNlbC5oZWFkLCBkaXIsIHVuaXQsIHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOwot
ICAgICAgZWxzZQotICAgICAgICBwb3MgPSBkaXIgPCAwID8gc2VsLmZyb20gOiBzZWwudG87Ci0g
ICAgICBleHRlbmRTZWxlY3Rpb24odGhpcy5kb2MsIHBvcywgcG9zLCBkaXIpOwotICAgIH0pLAot
Ci0gICAgZGVsZXRlSDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5pdCkgewotICAg
ICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbDsKLSAgICAgIGlmICghcG9zRXEoc2VsLmZyb20sIHNl
bC50bykpIHJlcGxhY2VSYW5nZSh0aGlzLmRvYywgIiIsIHNlbC5mcm9tLCBzZWwudG8sICIrZGVs
ZXRlIik7Ci0gICAgICBlbHNlIHJlcGxhY2VSYW5nZSh0aGlzLmRvYywgIiIsIHNlbC5mcm9tLCBm
aW5kUG9zSCh0aGlzLmRvYywgc2VsLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpLCAiK2RlbGV0ZSIp
OwotICAgICAgdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKLSAgICB9KSwKLQotICAg
IGZpbmRQb3NWOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIGdvYWxDb2x1bW4pIHsKLSAg
ICAgIHZhciBkaXIgPSAxLCB4ID0gZ29hbENvbHVtbjsKLSAgICAgIGlmIChhbW91bnQgPCAwKSB7
IGRpciA9IC0xOyBhbW91bnQgPSAtYW1vdW50OyB9Ci0gICAgICBmb3IgKHZhciBpID0gMCwgY3Vy
ID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7IGkgPCBhbW91bnQ7ICsraSkgewotICAgICAgICB2
YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKHRoaXMsIGN1ciwgImRpdiIpOwotICAgICAgICBpZiAo
eCA9PSBudWxsKSB4ID0gY29vcmRzLmxlZnQ7Ci0gICAgICAgIGVsc2UgY29vcmRzLmxlZnQgPSB4
OwotICAgICAgICBjdXIgPSBmaW5kUG9zVih0aGlzLCBjb29yZHMsIGRpciwgdW5pdCk7Ci0gICAg
ICAgIGlmIChjdXIuaGl0U2lkZSkgYnJlYWs7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY3VyOwot
ICAgIH0sCi0KLSAgICBtb3ZlVjogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGRpciwgdW5pdCkg
ewotICAgICAgdmFyIHNlbCA9IHRoaXMuZG9jLnNlbDsKLSAgICAgIHZhciBwb3MgPSBjdXJzb3JD
b29yZHModGhpcywgc2VsLmhlYWQsICJkaXYiKTsKLSAgICAgIGlmIChzZWwuZ29hbENvbHVtbiAh
PSBudWxsKSBwb3MubGVmdCA9IHNlbC5nb2FsQ29sdW1uOwotICAgICAgdmFyIHRhcmdldCA9IGZp
bmRQb3NWKHRoaXMsIHBvcywgZGlyLCB1bml0KTsKLQotICAgICAgaWYgKHVuaXQgPT0gInBhZ2Ui
KSBhZGRUb1Njcm9sbFBvcyh0aGlzLCAwLCBjaGFyQ29vcmRzKHRoaXMsIHRhcmdldCwgImRpdiIp
LnRvcCAtIHBvcy50b3ApOwotICAgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMuZG9jLCB0YXJnZXQs
IHRhcmdldCwgZGlyKTsKLSAgICAgIHNlbC5nb2FsQ29sdW1uID0gcG9zLmxlZnQ7Ci0gICAgfSks
Ci0KLSAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuc3Rh
dGUub3ZlcndyaXRlID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKQotICAgICAgICB0aGlzLmRpc3Bs
YXkuY3Vyc29yLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3Itb3ZlcndyaXRlIjsKLSAgICAgIGVs
c2UKLSAgICAgICAgdGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUgPSB0aGlzLmRpc3BsYXku
Y3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCAiIik7Ci0g
ICAgfSwKLSAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnN0YXRlLmZvY3Vz
ZWQ7IH0sCi0KLSAgICBzY3JvbGxUbzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHgsIHkpIHsK
LSAgICAgIHVwZGF0ZVNjcm9sbFBvcyh0aGlzLCB4LCB5KTsKLSAgICB9KSwKLSAgICBnZXRTY3Jv
bGxJbmZvOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5z
Y3JvbGxlciwgY28gPSBzY3JvbGxlckN1dE9mZjsKLSAgICAgIHJldHVybiB7bGVmdDogc2Nyb2xs
ZXIuc2Nyb2xsTGVmdCwgdG9wOiBzY3JvbGxlci5zY3JvbGxUb3AsCi0gICAgICAgICAgICAgIGhl
aWdodDogc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY28sIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxX
aWR0aCAtIGNvLAotICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhl
aWdodCAtIGNvLCBjbGllbnRXaWR0aDogc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBjb307Ci0gICAg
fSwKLQotICAgIHNjcm9sbEludG9WaWV3OiBmdW5jdGlvbihwb3MsIG1hcmdpbikgewotICAgICAg
aWYgKHR5cGVvZiBwb3MgPT0gIm51bWJlciIpIHBvcyA9IFBvcyhwb3MsIDApOwotICAgICAgaWYg
KCFwb3MgfHwgcG9zLmxpbmUgIT0gbnVsbCkgewotICAgICAgICBwb3MgPSBwb3MgPyBjbGlwUG9z
KHRoaXMuZG9jLCBwb3MpIDogdGhpcy5kb2Muc2VsLmhlYWQ7Ci0gICAgICAgIHNjcm9sbFBvc0lu
dG9WaWV3KHRoaXMsIHBvcywgbWFyZ2luKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNjcm9s
bEludG9WaWV3KHRoaXMsIHBvcy5sZWZ0LCBwb3MudG9wIC0gbWFyZ2luLCBwb3MucmlnaHQsIHBv
cy5ib3R0b20gKyBtYXJnaW4pOwotICAgICAgfQotICAgIH0sCi0KLSAgICBzZXRTaXplOiBmdW5j
dGlvbih3aWR0aCwgaGVpZ2h0KSB7Ci0gICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7Ci0g
ICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09ICJudW1iZXIiIHx8IC9eXGQrJC8udGVzdChTdHJp
bmcodmFsKSkgPyB2YWwgKyAicHgiIDogdmFsOwotICAgICAgfQotICAgICAgaWYgKHdpZHRoICE9
IG51bGwpIHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRo
KTsKLSAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUu
aGVpZ2h0ID0gaW50ZXJwcmV0KGhlaWdodCk7Ci0gICAgICB0aGlzLnJlZnJlc2goKTsKLSAgICB9
LAotCi0gICAgb246IGZ1bmN0aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9LAotICAg
IG9mZjogZnVuY3Rpb24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9LAotCi0gICAgb3Bl
cmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKTt9LAotCi0gICAgcmVm
cmVzaDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKCkgewotICAgICAgY2xlYXJDYWNoZXModGhp
cyk7Ci0gICAgICB1cGRhdGVTY3JvbGxQb3ModGhpcywgdGhpcy5kb2Muc2Nyb2xsTGVmdCwgdGhp
cy5kb2Muc2Nyb2xsVG9wKTsKLSAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICB9KSwKLQotICAg
IHN3YXBEb2M6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkb2MpIHsKLSAgICAgIHZhciBvbGQg
PSB0aGlzLmRvYzsKLSAgICAgIG9sZC5jbSA9IG51bGw7Ci0gICAgICBhdHRhY2hEb2ModGhpcywg
ZG9jKTsKLSAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpOwotICAgICAgdXBkYXRlU2Nyb2xsUG9zKHRo
aXMsIGRvYy5zY3JvbGxMZWZ0LCBkb2Muc2Nyb2xsVG9wKTsKLSAgICAgIHJldHVybiBvbGQ7Ci0g
ICAgfSksCi0KLSAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3Bs
YXkuaW5wdXQ7fSwKLSAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5kaXNwbGF5LndyYXBwZXI7fSwKLSAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcjt9LAotICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzO30KLSAgfTsKLQotICAvLyBPUFRJ
T04gREVGQVVMVFMKLQotICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhh
bmRsZXJzID0ge307Ci0KLSAgLy8gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvcHRpb25zLgot
ICB2YXIgZGVmYXVsdHMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307Ci0KLSAgZnVuY3Rpb24g
b3B0aW9uKG5hbWUsIGRlZmx0LCBoYW5kbGUsIG5vdE9uSW5pdCkgewotICAgIENvZGVNaXJyb3Iu
ZGVmYXVsdHNbbmFtZV0gPSBkZWZsdDsKLSAgICBpZiAoaGFuZGxlKSBvcHRpb25IYW5kbGVyc1tu
YW1lXSA9Ci0gICAgICBub3RPbkluaXQgPyBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtpZiAob2xk
ICE9IEluaXQpIGhhbmRsZShjbSwgdmFsLCBvbGQpO30gOiBoYW5kbGU7Ci0gIH0KLQotICB2YXIg
SW5pdCA9IENvZGVNaXJyb3IuSW5pdCA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gIkNv
ZGVNaXJyb3IuSW5pdCI7fX07Ci0KLSAgLy8gVGhlc2UgdHdvIGFyZSwgb24gaW5pdCwgY2FsbGVk
IGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2UgdGhleQotICAvLyBoYXZlIHRvIGJlIGluaXRp
YWxpemVkIGJlZm9yZSB0aGUgZWRpdG9yIGNhbiBzdGFydCBhdCBhbGwuCi0gIG9wdGlvbigidmFs
dWUiLCAiIiwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGNtLnNldFZhbHVlKHZhbCk7Ci0gIH0s
IHRydWUpOwotICBvcHRpb24oIm1vZGUiLCBudWxsLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAg
Y20uZG9jLm1vZGVPcHRpb24gPSB2YWw7Ci0gICAgbG9hZE1vZGUoY20pOwotICB9LCB0cnVlKTsK
LQotICBvcHRpb24oImluZGVudFVuaXQiLCAyLCBsb2FkTW9kZSwgdHJ1ZSk7Ci0gIG9wdGlvbigi
aW5kZW50V2l0aFRhYnMiLCBmYWxzZSk7Ci0gIG9wdGlvbigic21hcnRJbmRlbnQiLCB0cnVlKTsK
LSAgb3B0aW9uKCJ0YWJTaXplIiwgNCwgZnVuY3Rpb24oY20pIHsKLSAgICBsb2FkTW9kZShjbSk7
Ci0gICAgY2xlYXJDYWNoZXMoY20pOwotICAgIHJlZ0NoYW5nZShjbSk7Ci0gIH0sIHRydWUpOwot
ICBvcHRpb24oImVsZWN0cmljQ2hhcnMiLCB0cnVlKTsKLSAgb3B0aW9uKCJydGxNb3ZlVmlzdWFs
bHkiLCAhd2luZG93cyk7Ci0KLSAgb3B0aW9uKCJ0aGVtZSIsICJkZWZhdWx0IiwgZnVuY3Rpb24o
Y20pIHsKLSAgICB0aGVtZUNoYW5nZWQoY20pOwotICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTsKLSAg
fSwgdHJ1ZSk7Ci0gIG9wdGlvbigia2V5TWFwIiwgImRlZmF1bHQiLCBrZXlNYXBDaGFuZ2VkKTsK
LSAgb3B0aW9uKCJleHRyYUtleXMiLCBudWxsKTsKLQotICBvcHRpb24oIm9uS2V5RXZlbnQiLCBu
dWxsKTsKLSAgb3B0aW9uKCJvbkRyYWdFdmVudCIsIG51bGwpOwotCi0gIG9wdGlvbigibGluZVdy
YXBwaW5nIiwgZmFsc2UsIHdyYXBwaW5nQ2hhbmdlZCwgdHJ1ZSk7Ci0gIG9wdGlvbigiZ3V0dGVy
cyIsIFtdLCBmdW5jdGlvbihjbSkgewotICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5v
cHRpb25zKTsKLSAgICBndXR0ZXJzQ2hhbmdlZChjbSk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24o
ImZpeGVkR3V0dGVyIiwgdHJ1ZSwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGNtLmRpc3BsYXku
Z3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29tcGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxh
eSkgKyAicHgiIDogIjAiOwotICAgIGNtLnJlZnJlc2goKTsKLSAgfSwgdHJ1ZSk7Ci0gIG9wdGlv
bigibGluZU51bWJlcnMiLCBmYWxzZSwgZnVuY3Rpb24oY20pIHsKLSAgICBzZXRHdXR0ZXJzRm9y
TGluZU51bWJlcnMoY20ub3B0aW9ucyk7Ci0gICAgZ3V0dGVyc0NoYW5nZWQoY20pOwotICB9LCB0
cnVlKTsKLSAgb3B0aW9uKCJmaXJzdExpbmVOdW1iZXIiLCAxLCBndXR0ZXJzQ2hhbmdlZCwgdHJ1
ZSk7Ci0gIG9wdGlvbigibGluZU51bWJlckZvcm1hdHRlciIsIGZ1bmN0aW9uKGludGVnZXIpIHty
ZXR1cm4gaW50ZWdlcjt9LCBndXR0ZXJzQ2hhbmdlZCwgdHJ1ZSk7Ci0gIG9wdGlvbigic2hvd0N1
cnNvcldoZW5TZWxlY3RpbmciLCBmYWxzZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTsKLQotICBv
cHRpb24oInJlYWRPbmx5IiwgZmFsc2UsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKLSAgICBpZiAodmFs
ID09ICJub2N1cnNvciIpIHtvbkJsdXIoY20pOyBjbS5kaXNwbGF5LmlucHV0LmJsdXIoKTt9Ci0g
ICAgZWxzZSBpZiAoIXZhbCkgcmVzZXRJbnB1dChjbSwgdHJ1ZSk7Ci0gIH0pOwotICBvcHRpb24o
ImRyYWdEcm9wIiwgdHJ1ZSk7Ci0KLSAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOwot
ICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEpOwotICBvcHRpb24oIndvcmtUaW1lIiwgMTAwKTsK
LSAgb3B0aW9uKCJ3b3JrRGVsYXkiLCAxMDApOwotICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRy
dWUpOwotICBvcHRpb24oInBvbGxJbnRlcnZhbCIsIDEwMCk7Ci0gIG9wdGlvbigidW5kb0RlcHRo
IiwgNDAsIGZ1bmN0aW9uKGNtLCB2YWwpe2NtLmRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9IHZhbDt9
KTsKLSAgb3B0aW9uKCJ2aWV3cG9ydE1hcmdpbiIsIDEwLCBmdW5jdGlvbihjbSl7Y20ucmVmcmVz
aCgpO30sIHRydWUpOwotCi0gIG9wdGlvbigidGFiaW5kZXgiLCBudWxsLCBmdW5jdGlvbihjbSwg
dmFsKSB7Ci0gICAgY20uZGlzcGxheS5pbnB1dC50YWJJbmRleCA9IHZhbCB8fCAiIjsKLSAgfSk7
Ci0gIG9wdGlvbigiYXV0b2ZvY3VzIiwgbnVsbCk7Ci0KLSAgLy8gTU9ERSBERUZJTklUSU9OIEFO
RCBRVUVSWUlORwotCi0gIC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FCi0gIHZh
ciBtb2RlcyA9IENvZGVNaXJyb3IubW9kZXMgPSB7fSwgbWltZU1vZGVzID0gQ29kZU1pcnJvci5t
aW1lTW9kZXMgPSB7fTsKLQotICBDb2RlTWlycm9yLmRlZmluZU1vZGUgPSBmdW5jdGlvbihuYW1l
LCBtb2RlKSB7Ci0gICAgaWYgKCFDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgJiYgbmFtZSAhPSAi
bnVsbCIpIENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7Ci0gICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPiAyKSB7Ci0gICAgICBtb2RlLmRlcGVuZGVuY2llcyA9IFtdOwotICAgICAgZm9y
ICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIG1vZGUuZGVwZW5kZW5jaWVz
LnB1c2goYXJndW1lbnRzW2ldKTsKLSAgICB9Ci0gICAgbW9kZXNbbmFtZV0gPSBtb2RlOwotICB9
OwotCi0gIENvZGVNaXJyb3IuZGVmaW5lTUlNRSA9IGZ1bmN0aW9uKG1pbWUsIHNwZWMpIHsKLSAg
ICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwotICB9OwotCi0gIENvZGVNaXJyb3IucmVzb2x2ZU1v
ZGUgPSBmdW5jdGlvbihzcGVjKSB7Ci0gICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYm
IG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkKLSAgICAgIHNwZWMgPSBtaW1lTW9kZXNb
c3BlY107Ci0gICAgZWxzZSBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgL15bXHdcLV0r
XC9bXHdcLV0rXCt4bWwkLy50ZXN0KHNwZWMpKQotICAgICAgcmV0dXJuIENvZGVNaXJyb3IucmVz
b2x2ZU1vZGUoImFwcGxpY2F0aW9uL3htbCIpOwotICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3Ry
aW5nIikgcmV0dXJuIHtuYW1lOiBzcGVjfTsKLSAgICBlbHNlIHJldHVybiBzcGVjIHx8IHtuYW1l
OiAibnVsbCJ9OwotICB9OwotCi0gIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlv
bnMsIHNwZWMpIHsKLSAgICBzcGVjID0gQ29kZU1pcnJvci5yZXNvbHZlTW9kZShzcGVjKTsKLSAg
ICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdOwotICAgIGlmICghbWZhY3RvcnkpIHJl
dHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgInRleHQvcGxhaW4iKTsKLSAgICB2YXIg
bW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpOwotICAgIGlmIChtb2RlRXh0ZW5zaW9u
cy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7Ci0gICAgICB2YXIgZXh0cyA9IG1vZGVFeHRl
bnNpb25zW3NwZWMubmFtZV07Ci0gICAgICBmb3IgKHZhciBwcm9wIGluIGV4dHMpIHsKLSAgICAg
ICAgaWYgKCFleHRzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTsKLSAgICAgICAgaWYg
KG1vZGVPYmouaGFzT3duUHJvcGVydHkocHJvcCkpIG1vZGVPYmpbIl8iICsgcHJvcF0gPSBtb2Rl
T2JqW3Byb3BdOwotICAgICAgICBtb2RlT2JqW3Byb3BdID0gZXh0c1twcm9wXTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgbW9kZU9iai5uYW1lID0gc3BlYy5uYW1lOwotICAgIHJldHVybiBtb2RlT2Jq
OwotICB9OwotCi0gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgibnVsbCIsIGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB7dG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkge3N0cmVhbS5za2lwVG9FbmQoKTt9
fTsKLSAgfSk7Ci0gIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsICJudWxsIik7
Ci0KLSAgdmFyIG1vZGVFeHRlbnNpb25zID0gQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9ucyA9IHt9
OwotICBDb2RlTWlycm9yLmV4dGVuZE1vZGUgPSBmdW5jdGlvbihtb2RlLCBwcm9wZXJ0aWVzKSB7
Ci0gICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShtb2RlKSA/IG1v
ZGVFeHRlbnNpb25zW21vZGVdIDogKG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30pOwotICAgIGNv
cHlPYmoocHJvcGVydGllcywgZXh0cyk7Ci0gIH07Ci0KLSAgLy8gRVhURU5TSU9OUwotCi0gIENv
ZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSwgZnVuYykgewotICAgIENv
ZGVNaXJyb3IucHJvdG90eXBlW25hbWVdID0gZnVuYzsKLSAgfTsKLQotICBDb2RlTWlycm9yLmRl
ZmluZU9wdGlvbiA9IG9wdGlvbjsKLQotICB2YXIgaW5pdEhvb2tzID0gW107Ci0gIENvZGVNaXJy
b3IuZGVmaW5lSW5pdEhvb2sgPSBmdW5jdGlvbihmKSB7aW5pdEhvb2tzLnB1c2goZik7fTsKLQot
ICAvLyBNT0RFIFNUQVRFIEhBTkRMSU5HCi0KLSAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdv
cmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBtb2RlcwotICAvLyBzb21ldGltZXMg
bmVlZCB0byBkbyB0aGlzLgotICBmdW5jdGlvbiBjb3B5U3RhdGUobW9kZSwgc3RhdGUpIHsKLSAg
ICBpZiAoc3RhdGUgPT09IHRydWUpIHJldHVybiBzdGF0ZTsKLSAgICBpZiAobW9kZS5jb3B5U3Rh
dGUpIHJldHVybiBtb2RlLmNvcHlTdGF0ZShzdGF0ZSk7Ci0gICAgdmFyIG5zdGF0ZSA9IHt9Owot
ICAgIGZvciAodmFyIG4gaW4gc3RhdGUpIHsKLSAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTsKLSAg
ICAgIGlmICh2YWwgaW5zdGFuY2VvZiBBcnJheSkgdmFsID0gdmFsLmNvbmNhdChbXSk7Ci0gICAg
ICBuc3RhdGVbbl0gPSB2YWw7Ci0gICAgfQotICAgIHJldHVybiBuc3RhdGU7Ci0gIH0KLSAgQ29k
ZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7Ci0KLSAgZnVuY3Rpb24gc3RhcnRTdGF0ZSht
b2RlLCBhMSwgYTIpIHsKLSAgICByZXR1cm4gbW9kZS5zdGFydFN0YXRlID8gbW9kZS5zdGFydFN0
YXRlKGExLCBhMikgOiB0cnVlOwotICB9Ci0gIENvZGVNaXJyb3Iuc3RhcnRTdGF0ZSA9IHN0YXJ0
U3RhdGU7Ci0KLSAgQ29kZU1pcnJvci5pbm5lck1vZGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkg
ewotICAgIHdoaWxlIChtb2RlLmlubmVyTW9kZSkgewotICAgICAgdmFyIGluZm8gPSBtb2RlLmlu
bmVyTW9kZShzdGF0ZSk7Ci0gICAgICBzdGF0ZSA9IGluZm8uc3RhdGU7Ci0gICAgICBtb2RlID0g
aW5mby5tb2RlOwotICAgIH0KLSAgICByZXR1cm4gaW5mbyB8fCB7bW9kZTogbW9kZSwgc3RhdGU6
IHN0YXRlfTsKLSAgfTsKLQotICAvLyBTVEFOREFSRCBDT01NQU5EUwotCi0gIHZhciBjb21tYW5k
cyA9IENvZGVNaXJyb3IuY29tbWFuZHMgPSB7Ci0gICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkg
e2NtLnNldFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUo
KSkpO30sCi0gICAga2lsbExpbmU6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIgZnJvbSA9IGNt
LmdldEN1cnNvcih0cnVlKSwgdG8gPSBjbS5nZXRDdXJzb3IoZmFsc2UpLCBzZWwgPSAhcG9zRXEo
ZnJvbSwgdG8pOwotICAgICAgaWYgKCFzZWwgJiYgY20uZ2V0TGluZShmcm9tLmxpbmUpLmxlbmd0
aCA9PSBmcm9tLmNoKQotICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIFBvcyhmcm9t
LmxpbmUgKyAxLCAwKSwgIitkZWxldGUiKTsKLSAgICAgIGVsc2UgY20ucmVwbGFjZVJhbmdlKCIi
LCBmcm9tLCBzZWwgPyB0byA6IFBvcyhmcm9tLmxpbmUpLCAiK2RlbGV0ZSIpOwotICAgIH0sCi0g
ICAgZGVsZXRlTGluZTogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBsID0gY20uZ2V0Q3Vyc29y
KCkubGluZTsKLSAgICAgIGNtLnJlcGxhY2VSYW5nZSgiIiwgUG9zKGwsIDApLCBQb3MobCksICIr
ZGVsZXRlIik7Ci0gICAgfSwKLSAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAot
ICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCi0gICAgZ29Eb2NTdGFydDogZnVu
Y3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSk7fSwK
LSAgICBnb0RvY0VuZDogZnVuY3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmxh
c3RMaW5lKCkpKTt9LAotICAgIGdvTGluZVN0YXJ0OiBmdW5jdGlvbihjbSkgewotICAgICAgY20u
ZXh0ZW5kU2VsZWN0aW9uKGxpbmVTdGFydChjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSkpOwotICAg
IH0sCi0gICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBjdXIg
PSBjbS5nZXRDdXJzb3IoKSwgc3RhcnQgPSBsaW5lU3RhcnQoY20sIGN1ci5saW5lKTsKLSAgICAg
IHZhciBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5saW5lKTsKLSAgICAgIHZhciBvcmRl
ciA9IGdldE9yZGVyKGxpbmUpOwotICAgICAgaWYgKCFvcmRlciB8fCBvcmRlclswXS5sZXZlbCA9
PSAwKSB7Ci0gICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNl
YXJjaCgvXFMvKSk7Ci0gICAgICAgIHZhciBpbldTID0gY3VyLmxpbmUgPT0gc3RhcnQubGluZSAm
JiBjdXIuY2ggPD0gZmlyc3ROb25XUyAmJiBjdXIuY2g7Ci0gICAgICAgIGNtLmV4dGVuZFNlbGVj
dGlvbihQb3Moc3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJzdE5vbldTKSk7Ci0gICAgICB9IGVs
c2UgY20uZXh0ZW5kU2VsZWN0aW9uKHN0YXJ0KTsKLSAgICB9LAotICAgIGdvTGluZUVuZDogZnVu
Y3Rpb24oY20pIHsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihsaW5lRW5kKGNtLCBjbS5nZXRD
dXJzb3IoKS5saW5lKSk7Ci0gICAgfSwKLSAgICBnb0xpbmVSaWdodDogZnVuY3Rpb24oY20pIHsK
LSAgICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKGNtLmdldEN1cnNvcigpLCAiZGl2IikudG9w
ICsgNTsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbihjbS5jb29yZHNDaGFyKHtsZWZ0OiBjbS5k
aXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGggKyAxMDAsIHRvcDogdG9wfSwgImRpdiIpKTsKLSAg
ICB9LAotICAgIGdvTGluZUxlZnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICB2YXIgdG9wID0gY20u
Y2hhckNvb3JkcyhjbS5nZXRDdXJzb3IoKSwgImRpdiIpLnRvcCArIDU7Ci0gICAgICBjbS5leHRl
bmRTZWxlY3Rpb24oY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2IikpOwot
ICAgIH0sCi0gICAgZ29MaW5lVXA6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoLTEsICJsaW5lIik7
fSwKLSAgICBnb0xpbmVEb3duOiBmdW5jdGlvbihjbSkge2NtLm1vdmVWKDEsICJsaW5lIik7fSwK
LSAgICBnb1BhZ2VVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgInBhZ2UiKTt9LAotICAg
IGdvUGFnZURvd246IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoMSwgInBhZ2UiKTt9LAotICAgIGdv
Q2hhckxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJjaGFyIik7fSwKLSAgICBnb0No
YXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY2hhciIpO30sCi0gICAgZ29Db2x1
bW5MZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiY29sdW1uIik7fSwKLSAgICBnb0Nv
bHVtblJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJjb2x1bW4iKTt9LAotICAgIGdv
V29yZExlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJ3b3JkIik7fSwKLSAgICBnb0dy
b3VwUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoMSwgImdyb3VwIik7fSwKLSAgICBnb0dy
b3VwTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwgImdyb3VwIik7fSwKLSAgICBnb1dv
cmRSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAid29yZCIpO30sCi0gICAgZGVsQ2hh
ckJlZm9yZTogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKC0xLCAiY2hhciIpO30sCi0gICAgZGVs
Q2hhckFmdGVyOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoMSwgImNoYXIiKTt9LAotICAgIGRl
bFdvcmRCZWZvcmU6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgtMSwgIndvcmQiKTt9LAotICAg
IGRlbFdvcmRBZnRlcjogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJ3b3JkIik7fSwKLSAg
ICBkZWxHcm91cEJlZm9yZTogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKC0xLCAiZ3JvdXAiKTt9
LAotICAgIGRlbEdyb3VwQWZ0ZXI6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAiZ3JvdXAi
KTt9LAotICAgIGluZGVudEF1dG86IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJz
bWFydCIpO30sCi0gICAgaW5kZW50TW9yZTogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rp
b24oImFkZCIpO30sCi0gICAgaW5kZW50TGVzczogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxl
Y3Rpb24oInN1YnRyYWN0Iik7fSwKLSAgICBpbnNlcnRUYWI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVw
bGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIiwgIitpbnB1dCIpO30sCi0gICAgZGVmYXVsdFRhYjog
ZnVuY3Rpb24oY20pIHsKLSAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSBjbS5pbmRl
bnRTZWxlY3Rpb24oImFkZCIpOwotICAgICAgZWxzZSBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcdCIs
ICJlbmQiLCAiK2lucHV0Iik7Ci0gICAgfSwKLSAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24o
Y20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgbGluZSA9IGNtLmdldExpbmUo
Y3VyLmxpbmUpOwotICAgICAgaWYgKGN1ci5jaCA+IDAgJiYgY3VyLmNoIDwgbGluZS5sZW5ndGgg
LSAxKQotICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoKSArIGxpbmUu
Y2hhckF0KGN1ci5jaCAtIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5l
LCBjdXIuY2ggLSAxKSwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7Ci0gICAgfSwKLSAgICBu
ZXdsaW5lQW5kSW5kZW50OiBmdW5jdGlvbihjbSkgewotICAgICAgb3BlcmF0aW9uKGNtLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiXG4iLCAiZW5kIiwgIitpbnB1
dCIpOwotICAgICAgICBjbS5pbmRlbnRMaW5lKGNtLmdldEN1cnNvcigpLmxpbmUsIG51bGwsIHRy
dWUpOwotICAgICAgfSkoKTsKLSAgICB9LAotICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24o
Y20pIHtjbS50b2dnbGVPdmVyd3JpdGUoKTt9Ci0gIH07Ci0KLSAgLy8gU1RBTkRBUkQgS0VZTUFQ
UwotCi0gIHZhciBrZXlNYXAgPSBDb2RlTWlycm9yLmtleU1hcCA9IHt9OwotICBrZXlNYXAuYmFz
aWMgPSB7Ci0gICAgIkxlZnQiOiAiZ29DaGFyTGVmdCIsICJSaWdodCI6ICJnb0NoYXJSaWdodCIs
ICJVcCI6ICJnb0xpbmVVcCIsICJEb3duIjogImdvTGluZURvd24iLAotICAgICJFbmQiOiAiZ29M
aW5lRW5kIiwgIkhvbWUiOiAiZ29MaW5lU3RhcnRTbWFydCIsICJQYWdlVXAiOiAiZ29QYWdlVXAi
LCAiUGFnZURvd24iOiAiZ29QYWdlRG93biIsCi0gICAgIkRlbGV0ZSI6ICJkZWxDaGFyQWZ0ZXIi
LCAiQmFja3NwYWNlIjogImRlbENoYXJCZWZvcmUiLCAiVGFiIjogImRlZmF1bHRUYWIiLCAiU2hp
ZnQtVGFiIjogImluZGVudEF1dG8iLAotICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Iiwg
Ikluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiCi0gIH07Ci0gIC8vIE5vdGUgdGhhdCB0aGUgc2F2
ZSBhbmQgZmluZC1yZWxhdGVkIGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5Ci0gIC8vIGRlZmF1
bHQuIFVua25vd24gY29tbWFuZHMgYXJlIHNpbXBseSBpZ25vcmVkLgotICBrZXlNYXAucGNEZWZh
dWx0ID0gewotICAgICJDdHJsLUEiOiAic2VsZWN0QWxsIiwgIkN0cmwtRCI6ICJkZWxldGVMaW5l
IiwgIkN0cmwtWiI6ICJ1bmRvIiwgIlNoaWZ0LUN0cmwtWiI6ICJyZWRvIiwgIkN0cmwtWSI6ICJy
ZWRvIiwKLSAgICAiQ3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQWx0LVVwIjogImdvRG9jU3Rh
cnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKLSAg
ICAiQ3RybC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwgIkN0cmwtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0
IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAot
ICAgICJDdHJsLUJhY2tzcGFjZSI6ICJkZWxHcm91cEJlZm9yZSIsICJDdHJsLURlbGV0ZSI6ICJk
ZWxHcm91cEFmdGVyIiwgIkN0cmwtUyI6ICJzYXZlIiwgIkN0cmwtRiI6ICJmaW5kIiwKLSAgICAi
Q3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1D
dHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCi0gICAgIkN0
cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0cmwtXSI6ICJpbmRlbnRNb3JlIiwKLSAgICBmYWxsdGhy
b3VnaDogImJhc2ljIgotICB9OwotICBrZXlNYXAubWFjRGVmYXVsdCA9IHsKLSAgICAiQ21kLUEi
OiAic2VsZWN0QWxsIiwgIkNtZC1EIjogImRlbGV0ZUxpbmUiLCAiQ21kLVoiOiAidW5kbyIsICJT
aGlmdC1DbWQtWiI6ICJyZWRvIiwgIkNtZC1ZIjogInJlZG8iLAotICAgICJDbWQtVXAiOiAiZ29E
b2NTdGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5kIiwgIkNtZC1Eb3duIjogImdvRG9jRW5kIiwg
IkFsdC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwKLSAgICAiQWx0LVJpZ2h0IjogImdvR3JvdXBSaWdo
dCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lRW5kIiwg
IkFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLAotICAgICJDdHJsLUFsdC1CYWNrc3Bh
Y2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ21k
LVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKLSAgICAiQ21kLUciOiAiZmluZE5leHQiLCAi
U2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxhY2UiLCAiU2hpZnQt
Q21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAotICAgICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwgIkNt
ZC1dIjogImluZGVudE1vcmUiLAotICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJd
Ci0gIH07Ci0gIGtleU1hcFsiZGVmYXVsdCJdID0gbWFjID8ga2V5TWFwLm1hY0RlZmF1bHQgOiBr
ZXlNYXAucGNEZWZhdWx0OwotICBrZXlNYXAuZW1hY3N5ID0gewotICAgICJDdHJsLUYiOiAiZ29D
aGFyUmlnaHQiLCAiQ3RybC1CIjogImdvQ2hhckxlZnQiLCAiQ3RybC1QIjogImdvTGluZVVwIiwg
IkN0cmwtTiI6ICJnb0xpbmVEb3duIiwKLSAgICAiQWx0LUYiOiAiZ29Xb3JkUmlnaHQiLCAiQWx0
LUIiOiAiZ29Xb3JkTGVmdCIsICJDdHJsLUEiOiAiZ29MaW5lU3RhcnQiLCAiQ3RybC1FIjogImdv
TGluZUVuZCIsCi0gICAgIkN0cmwtViI6ICJnb1BhZ2VEb3duIiwgIlNoaWZ0LUN0cmwtViI6ICJn
b1BhZ2VVcCIsICJDdHJsLUQiOiAiZGVsQ2hhckFmdGVyIiwgIkN0cmwtSCI6ICJkZWxDaGFyQmVm
b3JlIiwKLSAgICAiQWx0LUQiOiAiZGVsV29yZEFmdGVyIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVs
V29yZEJlZm9yZSIsICJDdHJsLUsiOiAia2lsbExpbmUiLCAiQ3RybC1UIjogInRyYW5zcG9zZUNo
YXJzIgotICB9OwotCi0gIC8vIEtFWU1BUCBESVNQQVRDSAotCi0gIGZ1bmN0aW9uIGdldEtleU1h
cCh2YWwpIHsKLSAgICBpZiAodHlwZW9mIHZhbCA9PSAic3RyaW5nIikgcmV0dXJuIGtleU1hcFt2
YWxdOwotICAgIGVsc2UgcmV0dXJuIHZhbDsKLSAgfQotCi0gIGZ1bmN0aW9uIGxvb2t1cEtleShu
YW1lLCBtYXBzLCBoYW5kbGUpIHsKLSAgICBmdW5jdGlvbiBsb29rdXAobWFwKSB7Ci0gICAgICBt
YXAgPSBnZXRLZXlNYXAobWFwKTsKLSAgICAgIHZhciBmb3VuZCA9IG1hcFtuYW1lXTsKLSAgICAg
IGlmIChmb3VuZCA9PT0gZmFsc2UpIHJldHVybiAic3RvcCI7Ci0gICAgICBpZiAoZm91bmQgIT0g
bnVsbCAmJiBoYW5kbGUoZm91bmQpKSByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChtYXAubm9mYWxs
dGhyb3VnaCkgcmV0dXJuICJzdG9wIjsKLQotICAgICAgdmFyIGZhbGx0aHJvdWdoID0gbWFwLmZh
bGx0aHJvdWdoOwotICAgICAgaWYgKGZhbGx0aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxzZTsK
LSAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmFsbHRocm91Z2gpICE9
ICJbb2JqZWN0IEFycmF5XSIpCi0gICAgICAgIHJldHVybiBsb29rdXAoZmFsbHRocm91Z2gpOwot
ICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBmYWxsdGhyb3VnaC5sZW5ndGg7IGkgPCBlOyArK2kp
IHsKLSAgICAgICAgdmFyIGRvbmUgPSBsb29rdXAoZmFsbHRocm91Z2hbaV0pOwotICAgICAgICBp
ZiAoZG9uZSkgcmV0dXJuIGRvbmU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2
YXIgZG9uZSA9IGxvb2t1cChtYXBzW2ldKTsKLSAgICAgIGlmIChkb25lKSByZXR1cm4gZG9uZTsK
LSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24gaXNNb2RpZmllcktleShldmVudCkgewotICAgIHZhciBu
YW1lID0ga2V5TmFtZXNbZXZlbnQua2V5Q29kZV07Ci0gICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwi
IHx8IG5hbWUgPT0gIkFsdCIgfHwgbmFtZSA9PSAiU2hpZnQiIHx8IG5hbWUgPT0gIk1vZCI7Ci0g
IH0KLSAgZnVuY3Rpb24ga2V5TmFtZShldmVudCwgbm9TaGlmdCkgewotICAgIHZhciBuYW1lID0g
a2V5TmFtZXNbZXZlbnQua2V5Q29kZV07Ci0gICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBldmVudC5h
bHRHcmFwaEtleSkgcmV0dXJuIGZhbHNlOwotICAgIGlmIChldmVudC5hbHRLZXkpIG5hbWUgPSAi
QWx0LSIgKyBuYW1lOwotICAgIGlmIChmbGlwQ3RybENtZCA/IGV2ZW50Lm1ldGFLZXkgOiBldmVu
dC5jdHJsS2V5KSBuYW1lID0gIkN0cmwtIiArIG5hbWU7Ci0gICAgaWYgKGZsaXBDdHJsQ21kID8g
ZXZlbnQuY3RybEtleSA6IGV2ZW50Lm1ldGFLZXkpIG5hbWUgPSAiQ21kLSIgKyBuYW1lOwotICAg
IGlmICghbm9TaGlmdCAmJiBldmVudC5zaGlmdEtleSkgbmFtZSA9ICJTaGlmdC0iICsgbmFtZTsK
LSAgICByZXR1cm4gbmFtZTsKLSAgfQotICBDb2RlTWlycm9yLmxvb2t1cEtleSA9IGxvb2t1cEtl
eTsKLSAgQ29kZU1pcnJvci5pc01vZGlmaWVyS2V5ID0gaXNNb2RpZmllcktleTsKLSAgQ29kZU1p
cnJvci5rZXlOYW1lID0ga2V5TmFtZTsKLQotICAvLyBGUk9NVEVYVEFSRUEKLQotICBDb2RlTWly
cm9yLmZyb21UZXh0QXJlYSA9IGZ1bmN0aW9uKHRleHRhcmVhLCBvcHRpb25zKSB7Ci0gICAgaWYg
KCFvcHRpb25zKSBvcHRpb25zID0ge307Ci0gICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZh
bHVlOwotICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJpbmRleCkKLSAg
ICAgIG9wdGlvbnMudGFiaW5kZXggPSB0ZXh0YXJlYS50YWJpbmRleDsKLSAgICBpZiAoIW9wdGlv
bnMucGxhY2Vob2xkZXIgJiYgdGV4dGFyZWEucGxhY2Vob2xkZXIpCi0gICAgICBvcHRpb25zLnBs
YWNlaG9sZGVyID0gdGV4dGFyZWEucGxhY2Vob2xkZXI7Ci0gICAgLy8gU2V0IGF1dG9mb2N1cyB0
byB0cnVlIGlmIHRoaXMgdGV4dGFyZWEgaXMgZm9jdXNlZCwgb3IgaWYgaXQgaGFzCi0gICAgLy8g
YXV0b2ZvY3VzIGFuZCBubyBvdGhlciBlbGVtZW50IGlzIGZvY3VzZWQuCi0gICAgaWYgKG9wdGlv
bnMuYXV0b2ZvY3VzID09IG51bGwpIHsKLSAgICAgIHZhciBoYXNGb2N1cyA9IGRvY3VtZW50LmJv
ZHk7Ci0gICAgICAvLyBkb2MuYWN0aXZlRWxlbWVudCBvY2Nhc2lvbmFsbHkgdGhyb3dzIG9uIElF
Ci0gICAgICB0cnkgeyBoYXNGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IH0gY2F0Y2go
ZSkge30KLSAgICAgIG9wdGlvbnMuYXV0b2ZvY3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHwK
LSAgICAgICAgdGV4dGFyZWEuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSAhPSBudWxsICYmIGhh
c0ZvY3VzID09IGRvY3VtZW50LmJvZHk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2F2ZSgpIHt0
ZXh0YXJlYS52YWx1ZSA9IGNtLmdldFZhbHVlKCk7fQotICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7
Ci0gICAgICBvbih0ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7Ci0gICAgICAvLyBEZXBs
b3JhYmxlIGhhY2sgdG8gbWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcu
Ci0gICAgICBpZiAoIW9wdGlvbnMubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkgewotICAgICAgICB2
YXIgZm9ybSA9IHRleHRhcmVhLmZvcm0sIHJlYWxTdWJtaXQgPSBmb3JtLnN1Ym1pdDsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICB2YXIgd3JhcHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICBzYXZlKCk7Ci0gICAgICAgICAgICBmb3JtLnN1Ym1pdCA9
IHJlYWxTdWJtaXQ7Ci0gICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICAgICAgZm9y
bS5zdWJtaXQgPSB3cmFwcGVkU3VibWl0OwotICAgICAgICAgIH07Ci0gICAgICAgIH0gY2F0Y2go
ZSkge30KLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5v
bmUiOwotICAgIHZhciBjbSA9IENvZGVNaXJyb3IoZnVuY3Rpb24obm9kZSkgewotICAgICAgdGV4
dGFyZWEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcp
OwotICAgIH0sIG9wdGlvbnMpOwotICAgIGNtLnNhdmUgPSBzYXZlOwotICAgIGNtLmdldFRleHRB
cmVhID0gZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0YXJlYTsgfTsKLSAgICBjbS50b1RleHRBcmVh
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICBzYXZlKCk7Ci0gICAgICB0ZXh0YXJlYS5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKGNtLmdldFdyYXBwZXJFbGVtZW50KCkpOwotICAgICAgdGV4dGFyZWEuc3R5
bGUuZGlzcGxheSA9ICIiOwotICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHsKLSAgICAgICAgb2Zm
KHRleHRhcmVhLmZvcm0sICJzdWJtaXQiLCBzYXZlKTsKLSAgICAgICAgaWYgKHR5cGVvZiB0ZXh0
YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKQotICAgICAgICAgIHRleHRhcmVhLmZvcm0u
c3VibWl0ID0gcmVhbFN1Ym1pdDsKLSAgICAgIH0KLSAgICB9OwotICAgIHJldHVybiBjbTsKLSAg
fTsKLQotICAvLyBTVFJJTkcgU1RSRUFNCi0KLSAgLy8gRmVkIHRvIHRoZSBtb2RlIHBhcnNlcnMs
IHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZQotICAvLyBwYXJzZXJzIG1vcmUgc3Vj
Y2luY3QuCi0KLSAgLy8gVGhlIGNoYXJhY3RlciBzdHJlYW0gdXNlZCBieSBhIG1vZGUncyBwYXJz
ZXIuCi0gIGZ1bmN0aW9uIFN0cmluZ1N0cmVhbShzdHJpbmcsIHRhYlNpemUpIHsKLSAgICB0aGlz
LnBvcyA9IHRoaXMuc3RhcnQgPSAwOwotICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwotICAgIHRo
aXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODsKLSAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlz
Lmxhc3RDb2x1bW5WYWx1ZSA9IDA7Ci0gIH0KLQotICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0g
ewotICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxl
bmd0aDt9LAotICAgIHNvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID09IDA7fSwKLSAg
ICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSB8
fCB1bmRlZmluZWQ7fSwKLSAgICBuZXh0OiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLnBv
cyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJB
dCh0aGlzLnBvcysrKTsKLSAgICB9LAotICAgIGVhdDogZnVuY3Rpb24obWF0Y2gpIHsKLSAgICAg
IHZhciBjaCA9IHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7Ci0gICAgICBpZiAodHlwZW9m
IG1hdGNoID09ICJzdHJpbmciKSB2YXIgb2sgPSBjaCA9PSBtYXRjaDsKLSAgICAgIGVsc2UgdmFy
IG9rID0gY2ggJiYgKG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKSk7Ci0g
ICAgICBpZiAob2spIHsrK3RoaXMucG9zOyByZXR1cm4gY2g7fQotICAgIH0sCi0gICAgZWF0V2hp
bGU6IGZ1bmN0aW9uKG1hdGNoKSB7Ci0gICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKLSAgICAg
IHdoaWxlICh0aGlzLmVhdChtYXRjaCkpe30KLSAgICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0
OwotICAgIH0sCi0gICAgZWF0U3BhY2U6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHN0YXJ0ID0g
dGhpcy5wb3M7Ci0gICAgICB3aGlsZSAoL1tcc1x1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hh
ckF0KHRoaXMucG9zKSkpICsrdGhpcy5wb3M7Ci0gICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFy
dDsKLSAgICB9LAotICAgIHNraXBUb0VuZDogZnVuY3Rpb24oKSB7dGhpcy5wb3MgPSB0aGlzLnN0
cmluZy5sZW5ndGg7fSwKLSAgICBza2lwVG86IGZ1bmN0aW9uKGNoKSB7Ci0gICAgICB2YXIgZm91
bmQgPSB0aGlzLnN0cmluZy5pbmRleE9mKGNoLCB0aGlzLnBvcyk7Ci0gICAgICBpZiAoZm91bmQg
PiAtMSkge3RoaXMucG9zID0gZm91bmQ7IHJldHVybiB0cnVlO30KLSAgICB9LAotICAgIGJhY2tV
cDogZnVuY3Rpb24obikge3RoaXMucG9zIC09IG47fSwKLSAgICBjb2x1bW46IGZ1bmN0aW9uKCkg
ewotICAgICAgaWYgKHRoaXMubGFzdENvbHVtblBvcyA8IHRoaXMuc3RhcnQpIHsKLSAgICAgICAg
dGhpcy5sYXN0Q29sdW1uVmFsdWUgPSBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFy
dCwgdGhpcy50YWJTaXplLCB0aGlzLmxhc3RDb2x1bW5Qb3MsIHRoaXMubGFzdENvbHVtblZhbHVl
KTsKLSAgICAgICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5zdGFydDsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiB0aGlzLmxhc3RDb2x1bW5WYWx1ZTsKLSAgICB9LAotICAgIGluZGVudGF0aW9u
OiBmdW5jdGlvbigpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIG51bGwsIHRoaXMu
dGFiU2l6ZSk7fSwKLSAgICBtYXRjaDogZnVuY3Rpb24ocGF0dGVybiwgY29uc3VtZSwgY2FzZUlu
c2Vuc2l0aXZlKSB7Ci0gICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gInN0cmluZyIpIHsKLSAg
ICAgICAgdmFyIGNhc2VkID0gZnVuY3Rpb24oc3RyKSB7cmV0dXJuIGNhc2VJbnNlbnNpdGl2ZSA/
IHN0ci50b0xvd2VyQ2FzZSgpIDogc3RyO307Ci0gICAgICAgIHZhciBzdWJzdHIgPSB0aGlzLnN0
cmluZy5zdWJzdHIodGhpcy5wb3MsIHBhdHRlcm4ubGVuZ3RoKTsKLSAgICAgICAgaWYgKGNhc2Vk
KHN1YnN0cikgPT0gY2FzZWQocGF0dGVybikpIHsKLSAgICAgICAgICBpZiAoY29uc3VtZSAhPT0g
ZmFsc2UpIHRoaXMucG9zICs9IHBhdHRlcm4ubGVuZ3RoOwotICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0
cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2gocGF0dGVybik7Ci0gICAgICAgIGlmIChtYXRjaCAm
JiBtYXRjaC5pbmRleCA+IDApIHJldHVybiBudWxsOwotICAgICAgICBpZiAobWF0Y2ggJiYgY29u
c3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKLSAgICAgICAgcmV0
dXJuIG1hdGNoOwotICAgICAgfQotICAgIH0sCi0gICAgY3VycmVudDogZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpO30KLSAgfTsKLSAgQ29k
ZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBTdHJpbmdTdHJlYW07Ci0KLSAgLy8gVEVYVE1BUktFUlMK
LQotICBmdW5jdGlvbiBUZXh0TWFya2VyKGRvYywgdHlwZSkgewotICAgIHRoaXMubGluZXMgPSBb
XTsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMuZG9jID0gZG9jOwotICB9Ci0gIENv
ZGVNaXJyb3IuVGV4dE1hcmtlciA9IFRleHRNYXJrZXI7Ci0KLSAgVGV4dE1hcmtlci5wcm90b3R5
cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkg
cmV0dXJuOwotICAgIHZhciBjbSA9IHRoaXMuZG9jLmNtLCB3aXRoT3AgPSBjbSAmJiAhY20uY3Vy
T3A7Ci0gICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIHZhciBtaW4gPSBu
dWxsLCBtYXggPSBudWxsOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5n
dGg7ICsraSkgewotICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOwotICAgICAgdmFyIHNw
YW4gPSBnZXRNYXJrZWRTcGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMpOwotICAgICAgaWYg
KHNwYW4udG8gIT0gbnVsbCkgbWF4ID0gbGluZU5vKGxpbmUpOwotICAgICAgbGluZS5tYXJrZWRT
cGFucyA9IHJlbW92ZU1hcmtlZFNwYW4obGluZS5tYXJrZWRTcGFucywgc3Bhbik7Ci0gICAgICBp
ZiAoc3Bhbi5mcm9tICE9IG51bGwpCi0gICAgICAgIG1pbiA9IGxpbmVObyhsaW5lKTsKLSAgICAg
IGVsc2UgaWYgKHRoaXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4odGhpcy5kb2MsIGxpbmUp
ICYmIGNtKQotICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRleHRIZWlnaHQoY20uZGlz
cGxheSkpOwotICAgIH0KLSAgICBpZiAoY20gJiYgdGhpcy5jb2xsYXBzZWQgJiYgIWNtLm9wdGlv
bnMubGluZVdyYXBwaW5nKSBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGNtLmRvYywgdGhpcy5saW5lc1tp
XSksIGxlbiA9IGxpbmVMZW5ndGgoY20uZG9jLCB2aXN1YWwpOwotICAgICAgaWYgKGxlbiA+IGNt
LmRpc3BsYXkubWF4TGluZUxlbmd0aCkgewotICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmUgPSB2
aXN1YWw7Ci0gICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUxlbmd0aCA9IGxlbjsKLSAgICAgICAg
Y20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKG1pbiAhPSBudWxsICYmIGNtKSByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7Ci0gICAg
dGhpcy5saW5lcy5sZW5ndGggPSAwOwotICAgIHRoaXMuZXhwbGljaXRseUNsZWFyZWQgPSB0cnVl
OwotICAgIGlmICh0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmRvYy5jYW50RWRpdCkgewotICAgICAg
dGhpcy5kb2MuY2FudEVkaXQgPSBmYWxzZTsKLSAgICAgIGlmIChjbSkgcmVDaGVja1NlbGVjdGlv
bihjbSk7Ci0gICAgfQotICAgIGlmICh3aXRoT3ApIGVuZE9wZXJhdGlvbihjbSk7Ci0gICAgc2ln
bmFsTGF0ZXIodGhpcywgImNsZWFyIik7Ci0gIH07Ci0KLSAgVGV4dE1hcmtlci5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBmcm9tLCB0bzsKLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBsaW5lID0gdGhpcy5s
aW5lc1tpXTsKLSAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNw
YW5zLCB0aGlzKTsKLSAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCB8fCBzcGFuLnRvICE9IG51
bGwpIHsKLSAgICAgICAgdmFyIGZvdW5kID0gbGluZU5vKGxpbmUpOwotICAgICAgICBpZiAoc3Bh
bi5mcm9tICE9IG51bGwpIGZyb20gPSBQb3MoZm91bmQsIHNwYW4uZnJvbSk7Ci0gICAgICAgIGlm
IChzcGFuLnRvICE9IG51bGwpIHRvID0gUG9zKGZvdW5kLCBzcGFuLnRvKTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKHRoaXMudHlwZSA9PSAiYm9va21hcmsiKSByZXR1cm4gZnJvbTsKLSAgICBy
ZXR1cm4gZnJvbSAmJiB7ZnJvbTogZnJvbSwgdG86IHRvfTsKLSAgfTsKLQotICBUZXh0TWFya2Vy
LnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24oY29weVdpZGdldCkgewotICAgIHZhciBy
ZXBsID0gdGhpcy5yZXBsYWNlZFdpdGg7Ci0gICAgcmV0dXJuIHtjbGFzc05hbWU6IHRoaXMuY2xh
c3NOYW1lLAotICAgICAgICAgICAgaW5jbHVzaXZlTGVmdDogdGhpcy5pbmNsdXNpdmVMZWZ0LCBp
bmNsdXNpdmVSaWdodDogdGhpcy5pbmNsdXNpdmVSaWdodCwKLSAgICAgICAgICAgIGF0b21pYzog
dGhpcy5hdG9taWMsCi0gICAgICAgICAgICBjb2xsYXBzZWQ6IHRoaXMuY29sbGFwc2VkLAotICAg
ICAgICAgICAgY2xlYXJPbkVudGVyOiB0aGlzLmNsZWFyT25FbnRlciwKLSAgICAgICAgICAgIHJl
cGxhY2VkV2l0aDogY29weVdpZGdldCA/IHJlcGwgJiYgcmVwbC5jbG9uZU5vZGUodHJ1ZSkgOiBy
ZXBsLAotICAgICAgICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZE9ubHksCi0gICAgICAgICAgICBz
dGFydFN0eWxlOiB0aGlzLnN0YXJ0U3R5bGUsIGVuZFN0eWxlOiB0aGlzLmVuZFN0eWxlfTsKLSAg
fTsKLQotICBUZXh0TWFya2VyLnByb3RvdHlwZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24obGluZSkg
ewotICAgIGlmICghdGhpcy5saW5lcy5sZW5ndGggJiYgdGhpcy5kb2MuY20pIHsKLSAgICAgIHZh
ciBvcCA9IHRoaXMuZG9jLmNtLmN1ck9wOwotICAgICAgaWYgKCFvcC5tYXliZUhpZGRlbk1hcmtl
cnMgfHwgaW5kZXhPZihvcC5tYXliZUhpZGRlbk1hcmtlcnMsIHRoaXMpID09IC0xKQotICAgICAg
ICAob3AubWF5YmVVbmhpZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzID0g
W10pKS5wdXNoKHRoaXMpOwotICAgIH0KLSAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7Ci0gIH07
Ci0gIFRleHRNYXJrZXIucHJvdG90eXBlLmRldGFjaExpbmUgPSBmdW5jdGlvbihsaW5lKSB7Ci0g
ICAgdGhpcy5saW5lcy5zcGxpY2UoaW5kZXhPZih0aGlzLmxpbmVzLCBsaW5lKSwgMSk7Ci0gICAg
aWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkgewotICAgICAgdmFyIG9wID0g
dGhpcy5kb2MuY20uY3VyT3A7Ci0gICAgICAob3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IChvcC5t
YXliZUhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1c2godGhpcyk7Ci0gICAgfQotICB9OwotCi0gIGZ1
bmN0aW9uIG1hcmtUZXh0KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIHsKLSAgICBpZiAo
b3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZCkgcmV0dXJuIG1hcmtUZXh0U2hhcmVkKGRvYywgZnJv
bSwgdG8sIG9wdGlvbnMsIHR5cGUpOwotICAgIGlmIChkb2MuY20gJiYgIWRvYy5jbS5jdXJPcCkg
cmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1hcmtUZXh0KShkb2MsIGZyb20sIHRvLCBvcHRpb25z
LCB0eXBlKTsKLQotICAgIHZhciBtYXJrZXIgPSBuZXcgVGV4dE1hcmtlcihkb2MsIHR5cGUpOwot
ICAgIGlmICh0eXBlID09ICJyYW5nZSIgJiYgIXBvc0xlc3MoZnJvbSwgdG8pKSByZXR1cm4gbWFy
a2VyOwotICAgIGlmIChvcHRpb25zKSBjb3B5T2JqKG9wdGlvbnMsIG1hcmtlcik7Ci0gICAgaWYg
KG1hcmtlci5yZXBsYWNlZFdpdGgpIHsKLSAgICAgIG1hcmtlci5jb2xsYXBzZWQgPSB0cnVlOwot
ICAgICAgbWFya2VyLnJlcGxhY2VkV2l0aCA9IGVsdCgic3BhbiIsIFttYXJrZXIucmVwbGFjZWRX
aXRoXSwgIkNvZGVNaXJyb3Itd2lkZ2V0Iik7Ci0gICAgfQotICAgIGlmIChtYXJrZXIuY29sbGFw
c2VkKSBzYXdDb2xsYXBzZWRTcGFucyA9IHRydWU7Ci0KLSAgICB2YXIgY3VyTGluZSA9IGZyb20u
bGluZSwgc2l6ZSA9IDAsIGNvbGxhcHNlZEF0U3RhcnQsIGNvbGxhcHNlZEF0RW5kLCBjbSA9IGRv
Yy5jbSwgdXBkYXRlTWF4TGluZTsKLSAgICBkb2MuaXRlcihjdXJMaW5lLCB0by5saW5lICsgMSwg
ZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGNtICYmIG1hcmtlci5jb2xsYXBzZWQgJiYgIWNt
Lm9wdGlvbnMubGluZVdyYXBwaW5nICYmIHZpc3VhbExpbmUoZG9jLCBsaW5lKSA9PSBjbS5kaXNw
bGF5Lm1heExpbmUpCi0gICAgICAgIHVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAgdmFyIHNw
YW4gPSB7ZnJvbTogbnVsbCwgdG86IG51bGwsIG1hcmtlcjogbWFya2VyfTsKLSAgICAgIHNpemUg
Kz0gbGluZS50ZXh0Lmxlbmd0aDsKLSAgICAgIGlmIChjdXJMaW5lID09IGZyb20ubGluZSkge3Nw
YW4uZnJvbSA9IGZyb20uY2g7IHNpemUgLT0gZnJvbS5jaDt9Ci0gICAgICBpZiAoY3VyTGluZSA9
PSB0by5saW5lKSB7c3Bhbi50byA9IHRvLmNoOyBzaXplIC09IGxpbmUudGV4dC5sZW5ndGggLSB0
by5jaDt9Ci0gICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgewotICAgICAgICBpZiAoY3VyTGlu
ZSA9PSB0by5saW5lKSBjb2xsYXBzZWRBdEVuZCA9IGNvbGxhcHNlZFNwYW5BdChsaW5lLCB0by5j
aCk7Ci0gICAgICAgIGlmIChjdXJMaW5lID09IGZyb20ubGluZSkgY29sbGFwc2VkQXRTdGFydCA9
IGNvbGxhcHNlZFNwYW5BdChsaW5lLCBmcm9tLmNoKTsKLSAgICAgICAgZWxzZSB1cGRhdGVMaW5l
SGVpZ2h0KGxpbmUsIDApOwotICAgICAgfQotICAgICAgYWRkTWFya2VkU3BhbihsaW5lLCBzcGFu
KTsKLSAgICAgICsrY3VyTGluZTsKLSAgICB9KTsKLSAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkg
ZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewotICAgICAg
aWYgKGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOwot
ICAgIH0pOwotCi0gICAgaWYgKG1hcmtlci5yZWFkT25seSkgewotICAgICAgc2F3UmVhZE9ubHlT
cGFucyA9IHRydWU7Ci0gICAgICBpZiAoZG9jLmhpc3RvcnkuZG9uZS5sZW5ndGggfHwgZG9jLmhp
c3RvcnkudW5kb25lLmxlbmd0aCkKLSAgICAgICAgZG9jLmNsZWFySGlzdG9yeSgpOwotICAgIH0K
LSAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgewotICAgICAgaWYgKGNvbGxhcHNlZEF0U3RhcnQg
IT0gY29sbGFwc2VkQXRFbmQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNv
bGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7Ci0gICAgICBtYXJr
ZXIuc2l6ZSA9IHNpemU7Ci0gICAgICBtYXJrZXIuYXRvbWljID0gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKGNtKSB7Ci0gICAgICBpZiAodXBkYXRlTWF4TGluZSkgY20uY3VyT3AudXBkYXRlTWF4TGlu
ZSA9IHRydWU7Ci0gICAgICBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIuc3RhcnRTdHls
ZSB8fCBtYXJrZXIuZW5kU3R5bGUgfHwgbWFya2VyLmNvbGxhcHNlZCkKLSAgICAgICAgcmVnQ2hh
bmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxKTsKLSAgICAgIGlmIChtYXJrZXIuYXRvbWlj
KSByZUNoZWNrU2VsZWN0aW9uKGNtKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlcjsKLSAgfQot
Ci0gIC8vIFNIQVJFRCBURVhUTUFSS0VSUwotCi0gIGZ1bmN0aW9uIFNoYXJlZFRleHRNYXJrZXIo
bWFya2VycywgcHJpbWFyeSkgewotICAgIHRoaXMubWFya2VycyA9IG1hcmtlcnM7Ci0gICAgdGhp
cy5wcmltYXJ5ID0gcHJpbWFyeTsKLSAgICBmb3IgKHZhciBpID0gMCwgbWUgPSB0aGlzOyBpIDwg
bWFya2Vycy5sZW5ndGg7ICsraSkgewotICAgICAgbWFya2Vyc1tpXS5wYXJlbnQgPSB0aGlzOwot
ICAgICAgb24obWFya2Vyc1tpXSwgImNsZWFyIiwgZnVuY3Rpb24oKXttZS5jbGVhcigpO30pOwot
ICAgIH0KLSAgfQotICBDb2RlTWlycm9yLlNoYXJlZFRleHRNYXJrZXIgPSBTaGFyZWRUZXh0TWFy
a2VyOwotCi0gIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7
Ci0gICAgaWYgKHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHJldHVybjsKLSAgICB0aGlzLmV4cGxp
Y2l0bHlDbGVhcmVkID0gdHJ1ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWFya2Vy
cy5sZW5ndGg7ICsraSkKLSAgICAgIHRoaXMubWFya2Vyc1tpXS5jbGVhcigpOwotICAgIHNpZ25h
bExhdGVyKHRoaXMsICJjbGVhciIpOwotICB9OwotICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlw
ZS5maW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMucHJpbWFyeS5maW5kKCk7Ci0g
IH07Ci0gIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbihj
b3B5V2lkZ2V0KSB7Ci0gICAgdmFyIGlubmVyID0gdGhpcy5wcmltYXJ5LmdldE9wdGlvbnMoY29w
eVdpZGdldCk7Ci0gICAgaW5uZXIuc2hhcmVkID0gdHJ1ZTsKLSAgICByZXR1cm4gaW5uZXI7Ci0g
IH07Ci0KLSAgZnVuY3Rpb24gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywg
dHlwZSkgewotICAgIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpOwotICAgIG9wdGlvbnMuc2hh
cmVkID0gZmFsc2U7Ci0gICAgdmFyIG1hcmtlcnMgPSBbbWFya1RleHQoZG9jLCBmcm9tLCB0bywg
b3B0aW9ucywgdHlwZSldLCBwcmltYXJ5ID0gbWFya2Vyc1swXTsKLSAgICB2YXIgd2lkZ2V0ID0g
b3B0aW9ucy5yZXBsYWNlZFdpdGg7Ci0gICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uKGRvYykg
ewotICAgICAgaWYgKHdpZGdldCkgb3B0aW9ucy5yZXBsYWNlZFdpdGggPSB3aWRnZXQuY2xvbmVO
b2RlKHRydWUpOwotICAgICAgbWFya2Vycy5wdXNoKG1hcmtUZXh0KGRvYywgY2xpcFBvcyhkb2Ms
IGZyb20pLCBjbGlwUG9zKGRvYywgdG8pLCBvcHRpb25zLCB0eXBlKSk7Ci0gICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGRvYy5saW5rZWQubGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChkb2MubGlu
a2VkW2ldLmlzUGFyZW50KSByZXR1cm47Ci0gICAgICBwcmltYXJ5ID0gbHN0KG1hcmtlcnMpOwot
ICAgIH0pOwotICAgIHJldHVybiBuZXcgU2hhcmVkVGV4dE1hcmtlcihtYXJrZXJzLCBwcmltYXJ5
KTsKLSAgfQotCi0gIC8vIFRFWFRNQVJLRVIgU1BBTlMKLQotICBmdW5jdGlvbiBnZXRNYXJrZWRT
cGFuRm9yKHNwYW5zLCBtYXJrZXIpIHsKLSAgICBpZiAoc3BhbnMpIGZvciAodmFyIGkgPSAwOyBp
IDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBzcGFuID0gc3BhbnNbaV07Ci0gICAg
ICBpZiAoc3Bhbi5tYXJrZXIgPT0gbWFya2VyKSByZXR1cm4gc3BhbjsKLSAgICB9Ci0gIH0KLSAg
ZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3BhbikgewotICAgIGZvciAodmFyIHIs
IGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCi0gICAgICBpZiAoc3BhbnNbaV0gIT0gc3Bh
bikgKHIgfHwgKHIgPSBbXSkpLnB1c2goc3BhbnNbaV0pOwotICAgIHJldHVybiByOwotICB9Ci0g
IGZ1bmN0aW9uIGFkZE1hcmtlZFNwYW4obGluZSwgc3BhbikgewotICAgIGxpbmUubWFya2VkU3Bh
bnMgPSBsaW5lLm1hcmtlZFNwYW5zID8gbGluZS5tYXJrZWRTcGFucy5jb25jYXQoW3NwYW5dKSA6
IFtzcGFuXTsKLSAgICBzcGFuLm1hcmtlci5hdHRhY2hMaW5lKGxpbmUpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gbWFya2VkU3BhbnNCZWZvcmUob2xkLCBzdGFydENoLCBpc0luc2VydCkgewotICAgIGlm
IChvbGQpIGZvciAodmFyIGkgPSAwLCBudzsgaSA8IG9sZC5sZW5ndGg7ICsraSkgewotICAgICAg
dmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyOwotICAgICAgdmFyIHN0YXJ0
c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNw
YW4uZnJvbSA8PSBzdGFydENoIDogc3Bhbi5mcm9tIDwgc3RhcnRDaCk7Ci0gICAgICBpZiAoc3Rh
cnRzQmVmb3JlIHx8IG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgc3Bhbi5mcm9tID09IHN0
YXJ0Q2ggJiYgKCFpc0luc2VydCB8fCAhc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHsKLSAgICAg
ICAgdmFyIGVuZHNBZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJp
Z2h0ID8gc3Bhbi50byA+PSBzdGFydENoIDogc3Bhbi50byA+IHN0YXJ0Q2gpOwotICAgICAgICAo
bncgfHwgKG53ID0gW10pKS5wdXNoKHtmcm9tOiBzcGFuLmZyb20sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRvOiBlbmRzQWZ0ZXIgPyBudWxsIDogc3Bhbi50bywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtYXJrZXJ9KTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIG53OwotICB9Ci0KLSAgZnVuY3Rpb24gbWFya2VkU3BhbnNBZnRlcihvbGQs
IGVuZENoLCBpc0luc2VydCkgewotICAgIGlmIChvbGQpIGZvciAodmFyIGkgPSAwLCBudzsgaSA8
IG9sZC5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNw
YW4ubWFya2VyOwotICAgICAgdmFyIGVuZHNBZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFy
a2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBlbmRDaCA6IHNwYW4udG8gPiBlbmRDaCk7
Ci0gICAgICBpZiAoZW5kc0FmdGVyIHx8IG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgc3Bh
bi5mcm9tID09IGVuZENoICYmICghaXNJbnNlcnQgfHwgc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkp
IHsKLSAgICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJr
ZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBlbmRDaCA6IHNwYW4uZnJvbSA8IGVuZENo
KTsKLSAgICAgICAgKG53IHx8IChudyA9IFtdKSkucHVzaCh7ZnJvbTogc3RhcnRzQmVmb3JlID8g
bnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0bzogc3Bhbi50byA9PSBudWxsID8gbnVsbCA6IHNwYW4udG8gLSBlbmRDaCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtYXJrZXJ9KTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIG53OwotICB9Ci0KLSAgZnVuY3Rpb24gc3RyZXRjaFNwYW5zT3ZlckNoYW5n
ZShkb2MsIGNoYW5nZSkgewotICAgIHZhciBvbGRGaXJzdCA9IGlzTGluZShkb2MsIGNoYW5nZS5m
cm9tLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKS5tYXJrZWRTcGFuczsK
LSAgICB2YXIgb2xkTGFzdCA9IGlzTGluZShkb2MsIGNoYW5nZS50by5saW5lKSAmJiBnZXRMaW5l
KGRvYywgY2hhbmdlLnRvLmxpbmUpLm1hcmtlZFNwYW5zOwotICAgIGlmICghb2xkRmlyc3QgJiYg
IW9sZExhc3QpIHJldHVybiBudWxsOwotCi0gICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5j
aCwgZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gcG9zRXEoY2hhbmdlLmZyb20sIGNo
YW5nZS50byk7Ci0gICAgLy8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGgg
c2lkZXMKLSAgICB2YXIgZmlyc3QgPSBtYXJrZWRTcGFuc0JlZm9yZShvbGRGaXJzdCwgc3RhcnRD
aCwgaXNJbnNlcnQpOwotICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBl
bmRDaCwgaXNJbnNlcnQpOwotCi0gICAgLy8gTmV4dCwgbWVyZ2UgdGhvc2UgdHdvIGVuZHMKLSAg
ICB2YXIgc2FtZUxpbmUgPSBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSwgb2Zmc2V0ID0gbHN0KGNo
YW5nZS50ZXh0KS5sZW5ndGggKyAoc2FtZUxpbmUgPyBzdGFydENoIDogMCk7Ci0gICAgaWYgKGZp
cnN0KSB7Ci0gICAgICAvLyBGaXggdXAgLnRvIHByb3BlcnRpZXMgb2YgZmlyc3QKLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHNwYW4g
PSBmaXJzdFtpXTsKLSAgICAgICAgaWYgKHNwYW4udG8gPT0gbnVsbCkgewotICAgICAgICAgIHZh
ciBmb3VuZCA9IGdldE1hcmtlZFNwYW5Gb3IobGFzdCwgc3Bhbi5tYXJrZXIpOwotICAgICAgICAg
IGlmICghZm91bmQpIHNwYW4udG8gPSBzdGFydENoOwotICAgICAgICAgIGVsc2UgaWYgKHNhbWVM
aW5lKSBzcGFuLnRvID0gZm91bmQudG8gPT0gbnVsbCA/IG51bGwgOiBmb3VuZC50byArIG9mZnNl
dDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAobGFzdCkgewotICAgICAgLy8g
Rml4IHVwIC5mcm9tIGluIGxhc3QgKG9yIG1vdmUgdGhlbSBpbnRvIGZpcnN0IGluIGNhc2Ugb2Yg
c2FtZUxpbmUpCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3QubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgdmFyIHNwYW4gPSBsYXN0W2ldOwotICAgICAgICBpZiAoc3Bhbi50byAhPSBudWxs
KSBzcGFuLnRvICs9IG9mZnNldDsKLSAgICAgICAgaWYgKHNwYW4uZnJvbSA9PSBudWxsKSB7Ci0g
ICAgICAgICAgdmFyIGZvdW5kID0gZ2V0TWFya2VkU3BhbkZvcihmaXJzdCwgc3Bhbi5tYXJrZXIp
OwotICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIHNwYW4uZnJvbSA9IG9mZnNl
dDsKLSAgICAgICAgICAgIGlmIChzYW1lTGluZSkgKGZpcnN0IHx8IChmaXJzdCA9IFtdKSkucHVz
aChzcGFuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3Bhbi5m
cm9tICs9IG9mZnNldDsKLSAgICAgICAgICBpZiAoc2FtZUxpbmUpIChmaXJzdCB8fCAoZmlyc3Qg
PSBbXSkpLnB1c2goc3Bhbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2YXIg
bmV3TWFya2VycyA9IFtmaXJzdF07Ci0gICAgaWYgKCFzYW1lTGluZSkgewotICAgICAgLy8gRmls
bCBnYXAgd2l0aCB3aG9sZS1saW5lLXNwYW5zCi0gICAgICB2YXIgZ2FwID0gY2hhbmdlLnRleHQu
bGVuZ3RoIC0gMiwgZ2FwTWFya2VyczsKLSAgICAgIGlmIChnYXAgPiAwICYmIGZpcnN0KQotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0aDsgKytpKQotICAgICAgICAgIGlm
IChmaXJzdFtpXS50byA9PSBudWxsKQotICAgICAgICAgICAgKGdhcE1hcmtlcnMgfHwgKGdhcE1h
cmtlcnMgPSBbXSkpLnB1c2goe2Zyb206IG51bGwsIHRvOiBudWxsLCBtYXJrZXI6IGZpcnN0W2ld
Lm1hcmtlcn0pOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnYXA7ICsraSkKLSAgICAgICAg
bmV3TWFya2Vycy5wdXNoKGdhcE1hcmtlcnMpOwotICAgICAgbmV3TWFya2Vycy5wdXNoKGxhc3Qp
OwotICAgIH0KLSAgICByZXR1cm4gbmV3TWFya2VyczsKLSAgfQotCi0gIGZ1bmN0aW9uIG1lcmdl
T2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHsKLSAgICB2YXIgb2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBj
aGFuZ2UpOwotICAgIHZhciBzdHJldGNoZWQgPSBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywg
Y2hhbmdlKTsKLSAgICBpZiAoIW9sZCkgcmV0dXJuIHN0cmV0Y2hlZDsKLSAgICBpZiAoIXN0cmV0
Y2hlZCkgcmV0dXJuIG9sZDsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsg
KytpKSB7Ci0gICAgICB2YXIgb2xkQ3VyID0gb2xkW2ldLCBzdHJldGNoQ3VyID0gc3RyZXRjaGVk
W2ldOwotICAgICAgaWYgKG9sZEN1ciAmJiBzdHJldGNoQ3VyKSB7Ci0gICAgICAgIHNwYW5zOiBm
b3IgKHZhciBqID0gMDsgaiA8IHN0cmV0Y2hDdXIubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICB2
YXIgc3BhbiA9IHN0cmV0Y2hDdXJbal07Ci0gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBv
bGRDdXIubGVuZ3RoOyArK2spCi0gICAgICAgICAgICBpZiAob2xkQ3VyW2tdLm1hcmtlciA9PSBz
cGFuLm1hcmtlcikgY29udGludWUgc3BhbnM7Ci0gICAgICAgICAgb2xkQ3VyLnB1c2goc3Bhbik7
Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoc3RyZXRjaEN1cikgewotICAgICAgICBvbGRb
aV0gPSBzdHJldGNoQ3VyOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb2xkOwotICB9Ci0K
LSAgZnVuY3Rpb24gcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykgewotICAgIHZh
ciBtYXJrZXJzID0gbnVsbDsKLSAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBm
dW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAobGluZS5tYXJrZWRTcGFucykgZm9yICh2YXIgaSA9
IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBtYXJr
ID0gbGluZS5tYXJrZWRTcGFuc1tpXS5tYXJrZXI7Ci0gICAgICAgIGlmIChtYXJrLnJlYWRPbmx5
ICYmICghbWFya2VycyB8fCBpbmRleE9mKG1hcmtlcnMsIG1hcmspID09IC0xKSkKLSAgICAgICAg
ICAobWFya2VycyB8fCAobWFya2VycyA9IFtdKSkucHVzaChtYXJrKTsKLSAgICAgIH0KLSAgICB9
KTsKLSAgICBpZiAoIW1hcmtlcnMpIHJldHVybiBudWxsOwotICAgIHZhciBwYXJ0cyA9IFt7ZnJv
bTogZnJvbSwgdG86IHRvfV07Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsuZmluZCgpOwotICAg
ICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJ0cy5sZW5ndGg7ICsraikgewotICAgICAgICB2YXIg
cCA9IHBhcnRzW2pdOwotICAgICAgICBpZiAocG9zTGVzcyhwLnRvLCBtLmZyb20pIHx8IHBvc0xl
c3MobS50bywgcC5mcm9tKSkgY29udGludWU7Ci0gICAgICAgIHZhciBuZXdQYXJ0cyA9IFtqLCAx
XTsKLSAgICAgICAgaWYgKHBvc0xlc3MocC5mcm9tLCBtLmZyb20pIHx8ICFtay5pbmNsdXNpdmVM
ZWZ0ICYmIHBvc0VxKHAuZnJvbSwgbS5mcm9tKSkKLSAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHtm
cm9tOiBwLmZyb20sIHRvOiBtLmZyb219KTsKLSAgICAgICAgaWYgKHBvc0xlc3MobS50bywgcC50
bykgfHwgIW1rLmluY2x1c2l2ZVJpZ2h0ICYmIHBvc0VxKHAudG8sIG0udG8pKQotICAgICAgICAg
IG5ld1BhcnRzLnB1c2goe2Zyb206IG0udG8sIHRvOiBwLnRvfSk7Ci0gICAgICAgIHBhcnRzLnNw
bGljZS5hcHBseShwYXJ0cywgbmV3UGFydHMpOwotICAgICAgICBqICs9IG5ld1BhcnRzLmxlbmd0
aCAtIDE7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIGZ1bmN0
aW9uIGNvbGxhcHNlZFNwYW5BdChsaW5lLCBjaCkgewotICAgIHZhciBzcHMgPSBzYXdDb2xsYXBz
ZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDsKLSAgICBpZiAoc3BzKSBmb3IgKHZh
ciBzcCwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHNwID0gc3BzW2ldOwot
ICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSBjb250aW51ZTsKLSAgICAgIGlmICgoc3Au
ZnJvbSA9PSBudWxsIHx8IHNwLmZyb20gPCBjaCkgJiYKLSAgICAgICAgICAoc3AudG8gPT0gbnVs
bCB8fCBzcC50byA+IGNoKSAmJgotICAgICAgICAgICghZm91bmQgfHwgZm91bmQud2lkdGggPCBz
cC5tYXJrZXIud2lkdGgpKQotICAgICAgICBmb3VuZCA9IHNwLm1hcmtlcjsKLSAgICB9Ci0gICAg
cmV0dXJuIGZvdW5kOwotICB9Ci0gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUp
IHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdChsaW5lLCAtMSk7IH0KLSAgZnVuY3Rpb24gY29sbGFw
c2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdChsaW5lLCBsaW5lLnRl
eHQubGVuZ3RoICsgMSk7IH0KLQotICBmdW5jdGlvbiB2aXN1YWxMaW5lKGRvYywgbGluZSkgewot
ICAgIHZhciBtZXJnZWQ7Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0
KGxpbmUpKQotICAgICAgbGluZSA9IGdldExpbmUoZG9jLCBtZXJnZWQuZmluZCgpLmZyb20ubGlu
ZSk7Ci0gICAgcmV0dXJuIGxpbmU7Ci0gIH0KLQotICBmdW5jdGlvbiBsaW5lSXNIaWRkZW4oZG9j
LCBsaW5lKSB7Ci0gICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2Vk
U3BhbnM7Ci0gICAgaWYgKHNwcykgZm9yICh2YXIgc3AsIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICBzcCA9IHNwc1tpXTsKLSAgICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNl
ZCkgY29udGludWU7Ci0gICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGlmIChzcC5mcm9tID09IDAgJiYgc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbGluZUlz
SGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgfQotICBmdW5jdGlvbiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwYW4pIHsKLSAg
ICBpZiAoc3Bhbi50byA9PSBudWxsKSB7Ci0gICAgICB2YXIgZW5kID0gc3Bhbi5tYXJrZXIuZmlu
ZCgpLnRvLCBlbmRMaW5lID0gZ2V0TGluZShkb2MsIGVuZC5saW5lKTsKLSAgICAgIHJldHVybiBs
aW5lSXNIaWRkZW5Jbm5lcihkb2MsIGVuZExpbmUsIGdldE1hcmtlZFNwYW5Gb3IoZW5kTGluZS5t
YXJrZWRTcGFucywgc3Bhbi5tYXJrZXIpKTsKLSAgICB9Ci0gICAgaWYgKHNwYW4ubWFya2VyLmlu
Y2x1c2l2ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVu
Z3RoOyArK2kpIHsKLSAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKLSAgICAgIGlmIChz
cC5tYXJrZXIuY29sbGFwc2VkICYmIHNwLmZyb20gPT0gc3Bhbi50byAmJgotICAgICAgICAgIChz
cC5tYXJrZXIuaW5jbHVzaXZlTGVmdCB8fCBzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCkgJiYK
LSAgICAgICAgICBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkgcmV0dXJuIHRydWU7
Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkgewotICAg
IHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgaWYgKCFzcGFucykgcmV0dXJuOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCi0gICAgICBzcGFuc1tp
XS5tYXJrZXIuZGV0YWNoTGluZShsaW5lKTsKLSAgICBsaW5lLm1hcmtlZFNwYW5zID0gbnVsbDsK
LSAgfQotCi0gIGZ1bmN0aW9uIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIHNwYW5zKSB7Ci0gICAg
aWYgKCFzcGFucykgcmV0dXJuOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3Ro
OyArK2kpCi0gICAgICBzcGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsKLSAgICBsaW5l
Lm1hcmtlZFNwYW5zID0gc3BhbnM7Ci0gIH0KLQotICAvLyBMSU5FIFdJREdFVFMKLQotICB2YXIg
TGluZVdpZGdldCA9IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGNtLCBub2RlLCBv
cHRpb25zKSB7Ci0gICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093
blByb3BlcnR5KG9wdCkpCi0gICAgICB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07Ci0gICAgdGhp
cy5jbSA9IGNtOwotICAgIHRoaXMubm9kZSA9IG5vZGU7Ci0gIH07Ci0gIGZ1bmN0aW9uIHdpZGdl
dE9wZXJhdGlvbihmKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHdpdGhP
cCA9ICF0aGlzLmNtLmN1ck9wOwotICAgICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24odGhp
cy5jbSk7Ci0gICAgICB0cnkge3ZhciByZXN1bHQgPSBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
fQotICAgICAgZmluYWxseSB7aWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKHRoaXMuY20pO30KLSAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLSAgfQotICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5j
bGVhciA9IHdpZGdldE9wZXJhdGlvbihmdW5jdGlvbigpIHsKLSAgICB2YXIgd3MgPSB0aGlzLmxp
bmUud2lkZ2V0cywgbm8gPSBsaW5lTm8odGhpcy5saW5lKTsKLSAgICBpZiAobm8gPT0gbnVsbCB8
fCAhd3MpIHJldHVybjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytpKSBp
ZiAod3NbaV0gPT0gdGhpcykgd3Muc3BsaWNlKGktLSwgMSk7Ci0gICAgaWYgKCF3cy5sZW5ndGgp
IHRoaXMubGluZS53aWRnZXRzID0gbnVsbDsKLSAgICB1cGRhdGVMaW5lSGVpZ2h0KHRoaXMubGlu
ZSwgTWF0aC5tYXgoMCwgdGhpcy5saW5lLmhlaWdodCAtIHdpZGdldEhlaWdodCh0aGlzKSkpOwot
ICAgIHJlZ0NoYW5nZSh0aGlzLmNtLCBubywgbm8gKyAxKTsKLSAgfSk7Ci0gIExpbmVXaWRnZXQu
cHJvdG90eXBlLmNoYW5nZWQgPSB3aWRnZXRPcGVyYXRpb24oZnVuY3Rpb24oKSB7Ci0gICAgdmFy
IG9sZEggPSB0aGlzLmhlaWdodDsKLSAgICB0aGlzLmhlaWdodCA9IG51bGw7Ci0gICAgdmFyIGRp
ZmYgPSB3aWRnZXRIZWlnaHQodGhpcykgLSBvbGRIOwotICAgIGlmICghZGlmZikgcmV0dXJuOwot
ICAgIHVwZGF0ZUxpbmVIZWlnaHQodGhpcy5saW5lLCB0aGlzLmxpbmUuaGVpZ2h0ICsgZGlmZik7
Ci0gICAgdmFyIG5vID0gbGluZU5vKHRoaXMubGluZSk7Ci0gICAgcmVnQ2hhbmdlKHRoaXMuY20s
IG5vLCBubyArIDEpOwotICB9KTsKLQotICBmdW5jdGlvbiB3aWRnZXRIZWlnaHQod2lkZ2V0KSB7
Ci0gICAgaWYgKHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgcmV0dXJuIHdpZGdldC5oZWlnaHQ7Ci0g
ICAgaWYgKCF3aWRnZXQubm9kZS5wYXJlbnROb2RlIHx8IHdpZGdldC5ub2RlLnBhcmVudE5vZGUu
bm9kZVR5cGUgIT0gMSkKLSAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHdpZGdldC5jbS5kaXNw
bGF5Lm1lYXN1cmUsIGVsdCgiZGl2IiwgW3dpZGdldC5ub2RlXSwgbnVsbCwgInBvc2l0aW9uOiBy
ZWxhdGl2ZSIpKTsKLSAgICByZXR1cm4gd2lkZ2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNl
dEhlaWdodDsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoY20sIGhhbmRsZSwgbm9k
ZSwgb3B0aW9ucykgewotICAgIHZhciB3aWRnZXQgPSBuZXcgTGluZVdpZGdldChjbSwgbm9kZSwg
b3B0aW9ucyk7Ci0gICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRn
ZXRzID0gdHJ1ZTsKLSAgICBjaGFuZ2VMaW5lKGNtLCBoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsK
LSAgICAgIChsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKSkucHVzaCh3aWRnZXQp
OwotICAgICAgd2lkZ2V0LmxpbmUgPSBsaW5lOwotICAgICAgaWYgKCFsaW5lSXNIaWRkZW4oY20u
ZG9jLCBsaW5lKSB8fCB3aWRnZXQuc2hvd0lmSGlkZGVuKSB7Ci0gICAgICAgIHZhciBhYm92ZVZp
c2libGUgPSBoZWlnaHRBdExpbmUoY20sIGxpbmUpIDwgY20uZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxUb3A7Ci0gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRn
ZXRIZWlnaHQod2lkZ2V0KSk7Ci0gICAgICAgIGlmIChhYm92ZVZpc2libGUpIGFkZFRvU2Nyb2xs
UG9zKGNtLCAwLCB3aWRnZXQuaGVpZ2h0KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0pOwotICAgIHJldHVybiB3aWRnZXQ7Ci0gIH0KLQotICAvLyBMSU5FIERBVEEgU1RSVUNU
VVJFCi0KLSAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBs
aW5lLCBpbmNsdWRpbmcKLSAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkp
LgotICBmdW5jdGlvbiBtYWtlTGluZSh0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQp
IHsKLSAgICB2YXIgbGluZSA9IHt0ZXh0OiB0ZXh0fTsKLSAgICBhdHRhY2hNYXJrZWRTcGFucyhs
aW5lLCBtYXJrZWRTcGFucyk7Ci0gICAgbGluZS5oZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVz
dGltYXRlSGVpZ2h0KGxpbmUpIDogMTsKLSAgICByZXR1cm4gbGluZTsKLSAgfQotCi0gIGZ1bmN0
aW9uIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7
Ci0gICAgbGluZS50ZXh0ID0gdGV4dDsKLSAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSBsaW5lLnN0
YXRlQWZ0ZXIgPSBudWxsOwotICAgIGlmIChsaW5lLnN0eWxlcykgbGluZS5zdHlsZXMgPSBudWxs
OwotICAgIGlmIChsaW5lLm9yZGVyICE9IG51bGwpIGxpbmUub3JkZXIgPSBudWxsOwotICAgIGRl
dGFjaE1hcmtlZFNwYW5zKGxpbmUpOwotICAgIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIG1hcmtl
ZFNwYW5zKTsKLSAgICB2YXIgZXN0SGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhl
aWdodChsaW5lKSA6IDE7Ci0gICAgaWYgKGVzdEhlaWdodCAhPSBsaW5lLmhlaWdodCkgdXBkYXRl
TGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xlYW5VcExp
bmUobGluZSkgewotICAgIGxpbmUucGFyZW50ID0gbnVsbDsKLSAgICBkZXRhY2hNYXJrZWRTcGFu
cyhsaW5lKTsKLSAgfQotCi0gIC8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNlciBvdmVyIGEg
bGluZSwgdXBkYXRlIHRoZSBzdHlsZXMKLSAgLy8gYXJyYXksIHdoaWNoIGNvbnRhaW5zIGFsdGVy
bmF0aW5nIGZyYWdtZW50cyBvZiB0ZXh0IGFuZCBDU1MKLSAgLy8gY2xhc3Nlcy4KLSAgZnVuY3Rp
b24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYpIHsKLSAgICB2YXIgZmxhdHRlblNw
YW5zID0gbW9kZS5mbGF0dGVuU3BhbnM7Ci0gICAgaWYgKGZsYXR0ZW5TcGFucyA9PSBudWxsKSBm
bGF0dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsKLSAgICB2YXIgY3VyVGV4dCA9
ICIiLCBjdXJTdHlsZSA9IG51bGw7Ci0gICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0o
dGV4dCwgY20ub3B0aW9ucy50YWJTaXplKTsKLSAgICBpZiAodGV4dCA9PSAiIiAmJiBtb2RlLmJs
YW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwotICAgIHdoaWxlICghc3RyZWFtLmVvbCgp
KSB7Ci0gICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwotICAgICAg
aWYgKHN0cmVhbS5wb3MgPiA1MDAwKSB7Ci0gICAgICAgIGZsYXR0ZW5TcGFucyA9IGZhbHNlOwot
ICAgICAgICAvLyBXZWJraXQgc2VlbXMgdG8gcmVmdXNlIHRvIHJlbmRlciB0ZXh0IG5vZGVzIGxv
bmdlciB0aGFuIDU3NDQ0IGNoYXJhY3RlcnMKLSAgICAgICAgc3RyZWFtLnBvcyA9IE1hdGgubWlu
KHRleHQubGVuZ3RoLCBzdHJlYW0uc3RhcnQgKyA1MDAwMCk7Ci0gICAgICAgIHN0eWxlID0gbnVs
bDsKLSAgICAgIH0KLSAgICAgIHZhciBzdWJzdHIgPSBzdHJlYW0uY3VycmVudCgpOwotICAgICAg
c3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKLSAgICAgIGlmICghZmxhdHRlblNwYW5zIHx8IGN1
clN0eWxlICE9IHN0eWxlKSB7Ci0gICAgICAgIGlmIChjdXJUZXh0KSBmKGN1clRleHQsIGN1clN0
eWxlKTsKLSAgICAgICAgY3VyVGV4dCA9IHN1YnN0cjsgY3VyU3R5bGUgPSBzdHlsZTsKLSAgICAg
IH0gZWxzZSBjdXJUZXh0ID0gY3VyVGV4dCArIHN1YnN0cjsKLSAgICB9Ci0gICAgaWYgKGN1clRl
eHQpIGYoY3VyVGV4dCwgY3VyU3R5bGUpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGlnaGxpZ2h0TGlu
ZShjbSwgbGluZSwgc3RhdGUpIHsKLSAgICAvLyBBIHN0eWxlcyBhcnJheSBhbHdheXMgc3RhcnRz
IHdpdGggYSBudW1iZXIgaWRlbnRpZnlpbmcgdGhlCi0gICAgLy8gbW9kZS9vdmVybGF5cyB0aGF0
IGl0IGlzIGJhc2VkIG9uIChmb3IgZWFzeSBpbnZhbGlkYXRpb24pLgotICAgIHZhciBzdCA9IFtj
bS5zdGF0ZS5tb2RlR2VuXTsKLSAgICAvLyBDb21wdXRlIHRoZSBiYXNlIGFycmF5IG9mIHN0eWxl
cwotICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgY20uZG9jLm1vZGUsIHN0YXRlLCBmdW5jdGlv
bih0eHQsIHN0eWxlKSB7c3QucHVzaCh0eHQsIHN0eWxlKTt9KTsKLQotICAgIC8vIFJ1biBvdmVy
bGF5cywgYWRqdXN0IHN0eWxlIGFycmF5LgotICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3Rh
dGUub3ZlcmxheXMubGVuZ3RoOyArK28pIHsKLSAgICAgIHZhciBvdmVybGF5ID0gY20uc3RhdGUu
b3ZlcmxheXNbb10sIGkgPSAxOwotICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVybGF5
Lm1vZGUsIHRydWUsIGZ1bmN0aW9uKHR4dCwgc3R5bGUpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0g
aSwgbGVuID0gdHh0Lmxlbmd0aDsKLSAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBl
bmQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFuZCB0aGF0IGkgcG9pbnRzIGF0IGl0Ci0gICAg
ICAgIHdoaWxlIChsZW4pIHsKLSAgICAgICAgICB2YXIgY3VyID0gc3RbaV0sIGxlbl8gPSBjdXIu
bGVuZ3RoOwotICAgICAgICAgIGlmIChsZW5fIDw9IGxlbikgewotICAgICAgICAgICAgbGVuIC09
IGxlbl87Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0LnNwbGljZShpLCAxLCBj
dXIuc2xpY2UoMCwgbGVuKSwgc3RbaSsxXSwgY3VyLnNsaWNlKGxlbikpOwotICAgICAgICAgICAg
bGVuID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaSArPSAyOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghc3R5bGUpIHJldHVybjsKLSAgICAgICAgaWYgKG92ZXJsYXkub3BhcXVlKSB7Ci0g
ICAgICAgICAgc3Quc3BsaWNlKHN0YXJ0LCBpIC0gc3RhcnQsIHR4dCwgc3R5bGUpOwotICAgICAg
ICAgIGkgPSBzdGFydCArIDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZm9yICg7IHN0
YXJ0IDwgaTsgc3RhcnQgKz0gMikgewotICAgICAgICAgICAgdmFyIGN1ciA9IHN0W3N0YXJ0KzFd
OwotICAgICAgICAgICAgc3Rbc3RhcnQrMV0gPSBjdXIgPyBjdXIgKyAiICIgKyBzdHlsZSA6IHN0
eWxlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHN0OwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0TGluZVN0eWxlcyhjbSwgbGluZSkgewotICAg
IGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikK
LSAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgbGluZS5zdGF0ZUFm
dGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxpbmVObyhsaW5lKSkpOwotICAgIHJldHVybiBsaW5l
LnN0eWxlczsKLSAgfQotCi0gIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHBy
b2NlZWQgb3ZlciB0aGlzIGxpbmUgYW5kCi0gIC8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNh
dmUgYSBzdHlsZSBhcnJheS4KLSAgZnVuY3Rpb24gcHJvY2Vzc0xpbmUoY20sIGxpbmUsIHN0YXRl
KSB7Ci0gICAgdmFyIG1vZGUgPSBjbS5kb2MubW9kZTsKLSAgICB2YXIgc3RyZWFtID0gbmV3IFN0
cmluZ1N0cmVhbShsaW5lLnRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSk7Ci0gICAgaWYgKGxpbmUu
dGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwotICAg
IHdoaWxlICghc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5wb3MgPD0gNTAwMCkgewotICAgICAgbW9k
ZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKLSAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7
Ci0gICAgfQotICB9Ci0KLSAgdmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge307Ci0gIGZ1bmN0aW9u
IHN0eWxlVG9DbGFzcyhzdHlsZSkgewotICAgIGlmICghc3R5bGUpIHJldHVybiBudWxsOwotICAg
IHJldHVybiBzdHlsZVRvQ2xhc3NDYWNoZVtzdHlsZV0gfHwKLSAgICAgIChzdHlsZVRvQ2xhc3ND
YWNoZVtzdHlsZV0gPSAiY20tIiArIHN0eWxlLnJlcGxhY2UoLyArL2csICIgY20tIikpOwotICB9
Ci0KLSAgZnVuY3Rpb24gbGluZUNvbnRlbnQoY20sIHJlYWxMaW5lLCBtZWFzdXJlKSB7Ci0gICAg
dmFyIG1lcmdlZCwgbGluZSA9IHJlYWxMaW5lLCBsaW5lQmVmb3JlLCBzYXdCZWZvcmUsIHNpbXBs
ZSA9IHRydWU7Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUp
KSB7Ci0gICAgICBzaW1wbGUgPSBmYWxzZTsKLSAgICAgIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywg
bWVyZ2VkLmZpbmQoKS5mcm9tLmxpbmUpOwotICAgICAgaWYgKCFsaW5lQmVmb3JlKSBsaW5lQmVm
b3JlID0gbGluZTsKLSAgICB9Ci0KLSAgICB2YXIgYnVpbGRlciA9IHtwcmU6IGVsdCgicHJlIiks
IGNvbDogMCwgcG9zOiAwLCBkaXNwbGF5OiAhbWVhc3VyZSwKLSAgICAgICAgICAgICAgICAgICBt
ZWFzdXJlOiBudWxsLCBhZGRlZE9uZTogZmFsc2UsIGNtOiBjbX07Ci0gICAgaWYgKGxpbmUudGV4
dENsYXNzKSBidWlsZGVyLnByZS5jbGFzc05hbWUgPSBsaW5lLnRleHRDbGFzczsKLQotICAgIGRv
IHsKLSAgICAgIGJ1aWxkZXIubWVhc3VyZSA9IGxpbmUgPT0gcmVhbExpbmUgJiYgbWVhc3VyZTsK
LSAgICAgIGJ1aWxkZXIucG9zID0gMDsKLSAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZGVy
Lm1lYXN1cmUgPyBidWlsZFRva2VuTWVhc3VyZSA6IGJ1aWxkVG9rZW47Ci0gICAgICBpZiAoKGll
IHx8IHdlYmtpdCkgJiYgY20uZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSkKLSAgICAgICAgYnVp
bGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhidWlsZGVyLmFkZFRva2VuKTsK
LSAgICAgIGlmIChtZWFzdXJlICYmIHNhd0JlZm9yZSAmJiBsaW5lICE9IHJlYWxMaW5lICYmICFi
dWlsZGVyLmFkZGVkT25lKSB7Ci0gICAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBl
bmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpOwotICAgICAgICBi
dWlsZGVyLmFkZGVkT25lID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHZhciBuZXh0ID0gaW5zZXJ0
TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSkpOwotICAg
ICAgc2F3QmVmb3JlID0gbGluZSA9PSBsaW5lQmVmb3JlOwotICAgICAgaWYgKG5leHQpIHsKLSAg
ICAgICAgbGluZSA9IGdldExpbmUoY20uZG9jLCBuZXh0LnRvLmxpbmUpOwotICAgICAgICBzaW1w
bGUgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChuZXh0KTsKLQotICAgIGlmIChtZWFz
dXJlICYmICFidWlsZGVyLmFkZGVkT25lKQotICAgICAgbWVhc3VyZVswXSA9IGJ1aWxkZXIucHJl
LmFwcGVuZENoaWxkKHNpbXBsZSA/IGVsdCgic3BhbiIsICJcdTAwYTAiKSA6IHplcm9XaWR0aEVs
ZW1lbnQoY20uZGlzcGxheS5tZWFzdXJlKSk7Ci0gICAgaWYgKCFidWlsZGVyLnByZS5maXJzdENo
aWxkICYmICFsaW5lSXNIaWRkZW4oY20uZG9jLCByZWFsTGluZSkpCi0gICAgICBidWlsZGVyLnBy
ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUwMGEwIikpOwotCi0gICAg
dmFyIG9yZGVyOwotICAgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gd2l0aCB0aGUgcmVwb3J0ZWQg
ZGltZW5zaW9ucyBvZiBzaW5nbGUtY2hhcgotICAgIC8vIGRpcmVjdGlvbiBzcGFucyBvbiBJRSAo
aXNzdWUgIzExMjkpLiBTZWUgYWxzbyB0aGUgY29tbWVudCBpbgotICAgIC8vIGN1cnNvckNvb3Jk
cy4KLSAgICBpZiAobWVhc3VyZSAmJiBpZSAmJiAob3JkZXIgPSBnZXRPcmRlcihsaW5lKSkpIHsK
LSAgICAgIHZhciBsID0gb3JkZXIubGVuZ3RoIC0gMTsKLSAgICAgIGlmIChvcmRlcltsXS5mcm9t
ID09IG9yZGVyW2xdLnRvKSAtLWw7Ci0gICAgICB2YXIgbGFzdCA9IG9yZGVyW2xdLCBwcmV2ID0g
b3JkZXJbbCAtIDFdOwotICAgICAgaWYgKGxhc3QuZnJvbSArIDEgPT0gbGFzdC50byAmJiBwcmV2
ICYmIGxhc3QubGV2ZWwgPCBwcmV2LmxldmVsKSB7Ci0gICAgICAgIHZhciBzcGFuID0gbWVhc3Vy
ZVtidWlsZGVyLnBvcyAtIDFdOwotICAgICAgICBpZiAoc3Bhbikgc3Bhbi5wYXJlbnROb2RlLmlu
c2VydEJlZm9yZShzcGFuLm1lYXN1cmVSaWdodCA9IHplcm9XaWR0aEVsZW1lbnQoY20uZGlzcGxh
eS5tZWFzdXJlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Bhbi5uZXh0U2libGluZyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc2lnbmFsKGNtLCAi
cmVuZGVyTGluZSIsIGNtLCByZWFsTGluZSwgYnVpbGRlci5wcmUpOwotICAgIHJldHVybiBidWls
ZGVyLnByZTsKLSAgfQotCi0gIHZhciB0b2tlblNwZWNpYWxDaGFycyA9IC9bXHRcdTAwMDAtXHUw
MDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVGRUZGXS9nOwotICBmdW5jdGlvbiBidWlsZFRv
a2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSkgewotICAgIGlm
ICghdGV4dCkgcmV0dXJuOwotICAgIGlmICghdG9rZW5TcGVjaWFsQ2hhcnMudGVzdCh0ZXh0KSkg
ewotICAgICAgYnVpbGRlci5jb2wgKz0gdGV4dC5sZW5ndGg7Ci0gICAgICB2YXIgY29udGVudCA9
IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIg
Y29udGVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgcG9zID0gMDsKLSAg
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHRva2VuU3BlY2lhbENoYXJzLmxhc3RJbmRleCA9
IHBvczsKLSAgICAgICAgdmFyIG0gPSB0b2tlblNwZWNpYWxDaGFycy5leGVjKHRleHQpOwotICAg
ICAgICB2YXIgc2tpcHBlZCA9IG0gPyBtLmluZGV4IC0gcG9zIDogdGV4dC5sZW5ndGggLSBwb3M7
Ci0gICAgICAgIGlmIChza2lwcGVkKSB7Ci0gICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBlZCkpKTsK
LSAgICAgICAgICBidWlsZGVyLmNvbCArPSBza2lwcGVkOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghbSkgYnJlYWs7Ci0gICAgICAgIHBvcyArPSBza2lwcGVkICsgMTsKLSAgICAgICAgaWYgKG1b
MF0gPT0gIlx0IikgewotICAgICAgICAgIHZhciB0YWJTaXplID0gYnVpbGRlci5jbS5vcHRpb25z
LnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29sICUgdGFiU2l6ZTsKLSAg
ICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIHNwYWNlU3RyKHRhYldpZHRo
KSwgImNtLXRhYiIpKTsKLSAgICAgICAgICBidWlsZGVyLmNvbCArPSB0YWJXaWR0aDsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCAiXHUyMDIyIiwg
ImNtLWludmFsaWRjaGFyIik7Ci0gICAgICAgICAgdG9rZW4udGl0bGUgPSAiXFx1IiArIG1bMF0u
Y2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7Ci0gICAgICAgICAgY29udGVudC5hcHBlbmRDaGls
ZCh0b2tlbik7Ci0gICAgICAgICAgYnVpbGRlci5jb2wgKz0gMTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBidWls
ZGVyLm1lYXN1cmUpIHsKLSAgICAgIHZhciBmdWxsU3R5bGUgPSBzdHlsZSB8fCAiIjsKLSAgICAg
IGlmIChzdGFydFN0eWxlKSBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZTsKLSAgICAgIGlmIChlbmRT
dHlsZSkgZnVsbFN0eWxlICs9IGVuZFN0eWxlOwotICAgICAgcmV0dXJuIGJ1aWxkZXIucHJlLmFw
cGVuZENoaWxkKGVsdCgic3BhbiIsIFtjb250ZW50XSwgZnVsbFN0eWxlKSk7Ci0gICAgfQotICAg
IGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGNvbnRlbnQpOwotICB9Ci0KLSAgZnVuY3Rpb24gYnVp
bGRUb2tlbk1lYXN1cmUoYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxl
KSB7Ci0gICAgdmFyIHdyYXBwaW5nID0gYnVpbGRlci5jbS5vcHRpb25zLmxpbmVXcmFwcGluZzsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBj
aCA9IHRleHQuY2hhckF0KGkpLCBzdGFydCA9IGkgPT0gMDsKLSAgICAgIGlmIChjaCA+PSAiXHVk
ODAwIiAmJiBjaCA8ICJcdWRiZmYiICYmIGkgPCB0ZXh0Lmxlbmd0aCAtIDEpIHsKLSAgICAgICAg
Y2ggPSB0ZXh0LnNsaWNlKGksIGkgKyAyKTsKLSAgICAgICAgKytpOwotICAgICAgfSBlbHNlIGlm
IChpICYmIHdyYXBwaW5nICYmCi0gICAgICAgICAgICAgICAgIHNwYW5BZmZlY3RzV3JhcHBpbmcu
dGVzdCh0ZXh0LnNsaWNlKGkgLSAxLCBpICsgMSkpKSB7Ci0gICAgICAgIGJ1aWxkZXIucHJlLmFw
cGVuZENoaWxkKGVsdCgid2JyIikpOwotICAgICAgfQotICAgICAgdmFyIHNwYW4gPSBidWlsZGVy
Lm1lYXN1cmVbYnVpbGRlci5wb3NdID0KLSAgICAgICAgYnVpbGRUb2tlbihidWlsZGVyLCBjaCwg
c3R5bGUsCi0gICAgICAgICAgICAgICAgICAgc3RhcnQgJiYgc3RhcnRTdHlsZSwgaSA9PSB0ZXh0
Lmxlbmd0aCAtIDEgJiYgZW5kU3R5bGUpOwotICAgICAgLy8gSW4gSUUgc2luZ2xlLXNwYWNlIG5v
ZGVzIHdyYXAgZGlmZmVyZW50bHkgdGhhbiBzcGFjZXMKLSAgICAgIC8vIGVtYmVkZGVkIGluIGxh
cmdlciB0ZXh0IG5vZGVzLCBleGNlcHQgd2hlbiBzZXQgdG8KLSAgICAgIC8vIHdoaXRlLXNwYWNl
OiBub3JtYWwgKGlzc3VlICMxMjY4KS4KLSAgICAgIGlmIChpZSAmJiB3cmFwcGluZyAmJiBjaCA9
PSAiICIgJiYgaSAmJiAhL1xzLy50ZXN0KHRleHQuY2hhckF0KGkgLSAxKSkgJiYKLSAgICAgICAg
ICBpIDwgdGV4dC5sZW5ndGggLSAxICYmICEvXHMvLnRlc3QodGV4dC5jaGFyQXQoaSArIDEpKSkK
LSAgICAgICAgc3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0gIm5vcm1hbCI7Ci0gICAgICBidWlsZGVy
LnBvcyArPSBjaC5sZW5ndGg7Ci0gICAgfQotICAgIGlmICh0ZXh0Lmxlbmd0aCkgYnVpbGRlci5h
ZGRlZE9uZSA9IHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZFRva2VuU3BsaXRTcGFjZXMo
aW5uZXIpIHsKLSAgICBmdW5jdGlvbiBzcGxpdChvbGQpIHsKLSAgICAgIHZhciBvdXQgPSAiICI7
Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGggLSAyOyArK2kpIG91dCArPSBp
ICUgMiA/ICIgIiA6ICJcdTAwYTAiOwotICAgICAgb3V0ICs9ICIgIjsKLSAgICAgIHJldHVybiBv
dXQ7Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3Rh
cnRTdHlsZSwgZW5kU3R5bGUpIHsKLSAgICAgIHJldHVybiBpbm5lcihidWlsZGVyLCB0ZXh0LnJl
cGxhY2UoLyB7Myx9Lywgc3BsaXQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUpOwotICAg
IH07Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgc2l6ZSwg
d2lkZ2V0KSB7Ci0gICAgaWYgKHdpZGdldCkgewotICAgICAgaWYgKCFidWlsZGVyLmRpc3BsYXkp
IHdpZGdldCA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgICBidWlsZGVyLnByZS5hcHBl
bmRDaGlsZCh3aWRnZXQpOwotICAgICAgaWYgKGJ1aWxkZXIubWVhc3VyZSAmJiBzaXplKSB7Ci0g
ICAgICAgIGJ1aWxkZXIubWVhc3VyZVtidWlsZGVyLnBvc10gPSB3aWRnZXQ7Ci0gICAgICAgIGJ1
aWxkZXIuYWRkZWRPbmUgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBidWlsZGVyLnBvcyAr
PSBzaXplOwotICB9Ci0KLSAgLy8gT3V0cHV0cyBhIG51bWJlciBvZiBzcGFucyB0byBtYWtlIHVw
IGEgbGluZSwgdGFraW5nIGhpZ2hsaWdodGluZwotICAvLyBhbmQgbWFya2VkIHRleHQgaW50byBh
Y2NvdW50LgotICBmdW5jdGlvbiBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBzdHls
ZXMpIHsKLSAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zOwotICAgIGlmICghc3BhbnMp
IHsKLSAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSs9MikKLSAgICAg
ICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBzdHlsZXNbaV0sIHN0eWxlVG9DbGFzcyhzdHls
ZXNbaSsxXSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciBhbGxUZXh0ID0gbGlu
ZS50ZXh0LCBsZW4gPSBhbGxUZXh0Lmxlbmd0aDsKLSAgICB2YXIgcG9zID0gMCwgaSA9IDEsIHRl
eHQgPSAiIiwgc3R5bGU7Ci0gICAgdmFyIG5leHRDaGFuZ2UgPSAwLCBzcGFuU3R5bGUsIHNwYW5F
bmRTdHlsZSwgc3BhblN0YXJ0U3R5bGUsIGNvbGxhcHNlZDsKLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICBpZiAobmV4dENoYW5nZSA9PSBwb3MpIHsgLy8gVXBkYXRlIGN1cnJlbnQgbWFya2VyIHNldAot
ICAgICAgICBzcGFuU3R5bGUgPSBzcGFuRW5kU3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9ICIiOwot
ICAgICAgICBjb2xsYXBzZWQgPSBudWxsOyBuZXh0Q2hhbmdlID0gSW5maW5pdHk7Ci0gICAgICAg
IHZhciBmb3VuZEJvb2ttYXJrID0gbnVsbDsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBz
cGFucy5sZW5ndGg7ICsraikgewotICAgICAgICAgIHZhciBzcCA9IHNwYW5zW2pdLCBtID0gc3Au
bWFya2VyOwotICAgICAgICAgIGlmIChzcC5mcm9tIDw9IHBvcyAmJiAoc3AudG8gPT0gbnVsbCB8
fCBzcC50byA+IHBvcykpIHsKLSAgICAgICAgICAgIGlmIChzcC50byAhPSBudWxsICYmIG5leHRD
aGFuZ2UgPiBzcC50bykgeyBuZXh0Q2hhbmdlID0gc3AudG87IHNwYW5FbmRTdHlsZSA9ICIiOyB9
Ci0gICAgICAgICAgICBpZiAobS5jbGFzc05hbWUpIHNwYW5TdHlsZSArPSAiICIgKyBtLmNsYXNz
TmFtZTsKLSAgICAgICAgICAgIGlmIChtLnN0YXJ0U3R5bGUgJiYgc3AuZnJvbSA9PSBwb3MpIHNw
YW5TdGFydFN0eWxlICs9ICIgIiArIG0uc3RhcnRTdHlsZTsKLSAgICAgICAgICAgIGlmIChtLmVu
ZFN0eWxlICYmIHNwLnRvID09IG5leHRDaGFuZ2UpIHNwYW5FbmRTdHlsZSArPSAiICIgKyBtLmVu
ZFN0eWxlOwotICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNv
bGxhcHNlZC5tYXJrZXIud2lkdGggPCBtLndpZHRoKSkKLSAgICAgICAgICAgICAgY29sbGFwc2Vk
ID0gc3A7Ci0gICAgICAgICAgfSBlbHNlIGlmIChzcC5mcm9tID4gcG9zICYmIG5leHRDaGFuZ2Ug
PiBzcC5mcm9tKSB7Ci0gICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJvbTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgaWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9z
ICYmIG0ucmVwbGFjZWRXaXRoKQotICAgICAgICAgICAgZm91bmRCb29rbWFyayA9IG0ucmVwbGFj
ZWRXaXRoOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb2xsYXBzZWQgJiYgKGNvbGxhcHNlZC5m
cm9tIHx8IDApID09IHBvcykgewotICAgICAgICAgIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVy
LCAoY29sbGFwc2VkLnRvID09IG51bGwgPyBsZW4gOiBjb2xsYXBzZWQudG8pIC0gcG9zLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQuZnJvbSAhPSBudWxsICYmIGNvbGxh
cHNlZC5tYXJrZXIucmVwbGFjZWRXaXRoKTsKLSAgICAgICAgICBpZiAoY29sbGFwc2VkLnRvID09
IG51bGwpIHJldHVybiBjb2xsYXBzZWQubWFya2VyLmZpbmQoKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoZm91bmRCb29rbWFyayAmJiAhY29sbGFwc2VkKSBidWlsZENvbGxhcHNlZFNwYW4oYnVp
bGRlciwgMCwgZm91bmRCb29rbWFyayk7Ci0gICAgICB9Ci0gICAgICBpZiAocG9zID49IGxlbikg
YnJlYWs7Ci0KLSAgICAgIHZhciB1cHRvID0gTWF0aC5taW4obGVuLCBuZXh0Q2hhbmdlKTsKLSAg
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmICh0ZXh0KSB7Ci0gICAgICAgICAgdmFyIGVu
ZCA9IHBvcyArIHRleHQubGVuZ3RoOwotICAgICAgICAgIGlmICghY29sbGFwc2VkKSB7Ci0gICAg
ICAgICAgICB2YXIgdG9rZW5UZXh0ID0gZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAt
IHBvcykgOiB0ZXh0OwotICAgICAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCB0b2tl
blRleHQsIHN0eWxlID8gc3R5bGUgKyBzcGFuU3R5bGUgOiBzcGFuU3R5bGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRleHQubGVuZ3Ro
ID09IG5leHRDaGFuZ2UgPyBzcGFuRW5kU3R5bGUgOiAiIik7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3Mg
PSB1cHRvOyBicmVhazt9Ci0gICAgICAgICAgcG9zID0gZW5kOwotICAgICAgICAgIHNwYW5TdGFy
dFN0eWxlID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dCA9IHN0eWxlc1tpKytdOyBzdHls
ZSA9IHN0eWxlVG9DbGFzcyhzdHlsZXNbaSsrXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
Ly8gRE9DVU1FTlQgREFUQSBTVFJVQ1RVUkUKLQotICBmdW5jdGlvbiB1cGRhdGVEb2MoZG9jLCBj
aGFuZ2UsIG1hcmtlZFNwYW5zLCBzZWxBZnRlciwgZXN0aW1hdGVIZWlnaHQpIHsKLSAgICBmdW5j
dGlvbiBzcGFuc0ZvcihuKSB7cmV0dXJuIG1hcmtlZFNwYW5zID8gbWFya2VkU3BhbnNbbl0gOiBu
dWxsO30KLSAgICBmdW5jdGlvbiB1cGRhdGUobGluZSwgdGV4dCwgc3BhbnMpIHsKLSAgICAgIHVw
ZGF0ZUxpbmUobGluZSwgdGV4dCwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KTsKLSAgICAgIHNpZ25h
bExhdGVyKGxpbmUsICJjaGFuZ2UiLCBsaW5lLCBjaGFuZ2UpOwotICAgIH0KLQotICAgIHZhciBm
cm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hhbmdlLnRvLCB0ZXh0ID0gY2hhbmdlLnRleHQ7Ci0g
ICAgdmFyIGZpcnN0TGluZSA9IGdldExpbmUoZG9jLCBmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdl
dExpbmUoZG9jLCB0by5saW5lKTsKLSAgICB2YXIgbGFzdFRleHQgPSBsc3QodGV4dCksIGxhc3RT
cGFucyA9IHNwYW5zRm9yKHRleHQubGVuZ3RoIC0gMSksIG5saW5lcyA9IHRvLmxpbmUgLSBmcm9t
LmxpbmU7Ci0KLSAgICAvLyBGaXJzdCBhZGp1c3QgdGhlIGxpbmUgc3RydWN0dXJlCi0gICAgaWYg
KGZyb20uY2ggPT0gMCAmJiB0by5jaCA9PSAwICYmIGxhc3RUZXh0ID09ICIiKSB7Ci0gICAgICAv
LyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtl
Ci0gICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9z
ZWQgdG8uCi0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQg
PSBbXTsgaSA8IGU7ICsraSkKLSAgICAgICAgYWRkZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBz
cGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKLSAgICAgIHVwZGF0ZShsYXN0TGluZSwgbGFz
dExpbmUudGV4dCwgbGFzdFNwYW5zKTsKLSAgICAgIGlmIChubGluZXMpIGRvYy5yZW1vdmUoZnJv
bS5saW5lLCBubGluZXMpOwotICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgZG9jLmluc2VydChmcm9t
LmxpbmUsIGFkZGVkKTsKLSAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkgewot
ICAgICAgaWYgKHRleHQubGVuZ3RoID09IDEpIHsKLSAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwg
Zmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4dCArIGZpcnN0TGluZS50
ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZv
ciAodmFyIGFkZGVkID0gW10sIGkgPSAxLCBlID0gdGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytp
KQotICAgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVz
dGltYXRlSGVpZ2h0KSk7Ci0gICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUobGFzdFRleHQgKyBm
aXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQpKTsK
LSAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5j
aCkgKyB0ZXh0WzBdLCBzcGFuc0ZvcigwKSk7Ci0gICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5l
ICsgMSwgYWRkZWQpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAodGV4dC5sZW5ndGggPT0gMSkg
ewotICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5j
aCkgKyB0ZXh0WzBdICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIHNwYW5zRm9yKDApKTsK
LSAgICAgIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkg
KyB0ZXh0WzBdLCBzcGFuc0ZvcigwKSk7Ci0gICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0
ICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7Ci0gICAgICBmb3IgKHZh
ciBpID0gMSwgZSA9IHRleHQubGVuZ3RoIC0gMSwgYWRkZWQgPSBbXTsgaSA8IGU7ICsraSkKLSAg
ICAgICAgYWRkZWQucHVzaChtYWtlTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVI
ZWlnaHQpKTsKLSAgICAgIGlmIChubGluZXMgPiAxKSBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEs
IG5saW5lcyAtIDEpOwotICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7Ci0g
ICAgfQotCi0gICAgc2lnbmFsTGF0ZXIoZG9jLCAiY2hhbmdlIiwgZG9jLCBjaGFuZ2UpOwotICAg
IHNldFNlbGVjdGlvbihkb2MsIHNlbEFmdGVyLmFuY2hvciwgc2VsQWZ0ZXIuaGVhZCwgbnVsbCwg
dHJ1ZSk7Ci0gIH0KLQotICBmdW5jdGlvbiBMZWFmQ2h1bmsobGluZXMpIHsKLSAgICB0aGlzLmxp
bmVzID0gbGluZXM7Ci0gICAgdGhpcy5wYXJlbnQgPSBudWxsOwotICAgIGZvciAodmFyIGkgPSAw
LCBlID0gbGluZXMubGVuZ3RoLCBoZWlnaHQgPSAwOyBpIDwgZTsgKytpKSB7Ci0gICAgICBsaW5l
c1tpXS5wYXJlbnQgPSB0aGlzOwotICAgICAgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKLSAg
ICB9Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gIH0KLQotICBMZWFmQ2h1bmsucHJvdG90
eXBlID0gewotICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVzLmxl
bmd0aDsgfSwKLSAgICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHsKLSAgICAgIGZvciAo
dmFyIGkgPSBhdCwgZSA9IGF0ICsgbjsgaSA8IGU7ICsraSkgewotICAgICAgICB2YXIgbGluZSA9
IHRoaXMubGluZXNbaV07Ci0gICAgICAgIHRoaXMuaGVpZ2h0IC09IGxpbmUuaGVpZ2h0OwotICAg
ICAgICBjbGVhblVwTGluZShsaW5lKTsKLSAgICAgICAgc2lnbmFsTGF0ZXIobGluZSwgImRlbGV0
ZSIpOwotICAgICAgfQotICAgICAgdGhpcy5saW5lcy5zcGxpY2UoYXQsIG4pOwotICAgIH0sCi0g
ICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7Ci0gICAgICBsaW5lcy5zcGxpY2UuYXBwbHko
bGluZXMsIFtsaW5lcy5sZW5ndGgsIDBdLmNvbmNhdCh0aGlzLmxpbmVzKSk7Ci0gICAgfSwKLSAg
ICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKLSAgICAgIHRoaXMu
aGVpZ2h0ICs9IGhlaWdodDsKLSAgICAgIHRoaXMubGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKDAs
IGF0KS5jb25jYXQobGluZXMpLmNvbmNhdCh0aGlzLmxpbmVzLnNsaWNlKGF0KSk7Ci0gICAgICBm
b3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgbGluZXNbaV0ucGFy
ZW50ID0gdGhpczsKLSAgICB9LAotICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKLSAg
ICAgIGZvciAodmFyIGUgPSBhdCArIG47IGF0IDwgZTsgKythdCkKLSAgICAgICAgaWYgKG9wKHRo
aXMubGluZXNbYXRdKSkgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIEJy
YW5jaENodW5rKGNoaWxkcmVuKSB7Ci0gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwotICAg
IHZhciBzaXplID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNoaWxk
cmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewotICAgICAgdmFyIGNoID0gY2hpbGRyZW5baV07Ci0g
ICAgICBzaXplICs9IGNoLmNodW5rU2l6ZSgpOyBoZWlnaHQgKz0gY2guaGVpZ2h0OwotICAgICAg
Y2gucGFyZW50ID0gdGhpczsKLSAgICB9Ci0gICAgdGhpcy5zaXplID0gc2l6ZTsKLSAgICB0aGlz
LmhlaWdodCA9IGhlaWdodDsKLSAgICB0aGlzLnBhcmVudCA9IG51bGw7Ci0gIH0KLQotICBCcmFu
Y2hDaHVuay5wcm90b3R5cGUgPSB7Ci0gICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJu
IHRoaXMuc2l6ZTsgfSwKLSAgICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHsKLSAgICAg
IHRoaXMuc2l6ZSAtPSBuOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVu
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6
ID0gY2hpbGQuY2h1bmtTaXplKCk7Ci0gICAgICAgIGlmIChhdCA8IHN6KSB7Ci0gICAgICAgICAg
dmFyIHJtID0gTWF0aC5taW4obiwgc3ogLSBhdCksIG9sZEhlaWdodCA9IGNoaWxkLmhlaWdodDsK
LSAgICAgICAgICBjaGlsZC5yZW1vdmVJbm5lcihhdCwgcm0pOwotICAgICAgICAgIHRoaXMuaGVp
Z2h0IC09IG9sZEhlaWdodCAtIGNoaWxkLmhlaWdodDsKLSAgICAgICAgICBpZiAoc3ogPT0gcm0p
IHsgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaS0tLCAxKTsgY2hpbGQucGFyZW50ID0gbnVsbDsgfQot
ICAgICAgICAgIGlmICgobiAtPSBybSkgPT0gMCkgYnJlYWs7Ci0gICAgICAgICAgYXQgPSAwOwot
ICAgICAgICB9IGVsc2UgYXQgLT0gc3o7Ci0gICAgICB9Ci0gICAgICBpZiAodGhpcy5zaXplIC0g
biA8IDI1KSB7Ci0gICAgICAgIHZhciBsaW5lcyA9IFtdOwotICAgICAgICB0aGlzLmNvbGxhcHNl
KGxpbmVzKTsKLSAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtuZXcgTGVhZkNodW5rKGxpbmVzKV07
Ci0gICAgICAgIHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50ID0gdGhpczsKLSAgICAgIH0KLSAgICB9
LAotICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgewotICAgICAgZm9yICh2YXIgaSA9IDAs
IGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgdGhpcy5jaGlsZHJlbltpXS5j
b2xsYXBzZShsaW5lcyk7Ci0gICAgfSwKLSAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxp
bmVzLCBoZWlnaHQpIHsKLSAgICAgIHRoaXMuc2l6ZSArPSBsaW5lcy5sZW5ndGg7Ci0gICAgICB0
aGlzLmhlaWdodCArPSBoZWlnaHQ7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuY2hp
bGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7Ci0gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hp
bGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7Ci0gICAgICAgIGlmIChhdCA8PSBzeikg
ewotICAgICAgICAgIGNoaWxkLmluc2VydElubmVyKGF0LCBsaW5lcywgaGVpZ2h0KTsKLSAgICAg
ICAgICBpZiAoY2hpbGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKLSAgICAg
ICAgICAgIHdoaWxlIChjaGlsZC5saW5lcy5sZW5ndGggPiA1MCkgewotICAgICAgICAgICAgICB2
YXIgc3BpbGxlZCA9IGNoaWxkLmxpbmVzLnNwbGljZShjaGlsZC5saW5lcy5sZW5ndGggLSAyNSwg
MjUpOwotICAgICAgICAgICAgICB2YXIgbmV3bGVhZiA9IG5ldyBMZWFmQ2h1bmsoc3BpbGxlZCk7
Ci0gICAgICAgICAgICAgIGNoaWxkLmhlaWdodCAtPSBuZXdsZWFmLmhlaWdodDsKLSAgICAgICAg
ICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaSArIDEsIDAsIG5ld2xlYWYpOwotICAgICAgICAg
ICAgICBuZXdsZWFmLnBhcmVudCA9IHRoaXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0
aGlzLm1heWJlU3BpbGwoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgYXQgLT0gc3o7Ci0gICAgICB9Ci0gICAgfSwKLSAgICBtYXliZVNwaWxsOiBm
dW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8PSAxMCkgcmV0dXJu
OwotICAgICAgdmFyIG1lID0gdGhpczsKLSAgICAgIGRvIHsKLSAgICAgICAgdmFyIHNwaWxsZWQg
PSBtZS5jaGlsZHJlbi5zcGxpY2UobWUuY2hpbGRyZW4ubGVuZ3RoIC0gNSwgNSk7Ci0gICAgICAg
IHZhciBzaWJsaW5nID0gbmV3IEJyYW5jaENodW5rKHNwaWxsZWQpOwotICAgICAgICBpZiAoIW1l
LnBhcmVudCkgeyAvLyBCZWNvbWUgdGhlIHBhcmVudCBub2RlCi0gICAgICAgICAgdmFyIGNvcHkg
PSBuZXcgQnJhbmNoQ2h1bmsobWUuY2hpbGRyZW4pOwotICAgICAgICAgIGNvcHkucGFyZW50ID0g
bWU7Ci0gICAgICAgICAgbWUuY2hpbGRyZW4gPSBbY29weSwgc2libGluZ107Ci0gICAgICAgICAg
bWUgPSBjb3B5OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG1lLnNpemUgLT0gc2libGlu
Zy5zaXplOwotICAgICAgICAgIG1lLmhlaWdodCAtPSBzaWJsaW5nLmhlaWdodDsKLSAgICAgICAg
ICB2YXIgbXlJbmRleCA9IGluZGV4T2YobWUucGFyZW50LmNoaWxkcmVuLCBtZSk7Ci0gICAgICAg
ICAgbWUucGFyZW50LmNoaWxkcmVuLnNwbGljZShteUluZGV4ICsgMSwgMCwgc2libGluZyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgc2libGluZy5wYXJlbnQgPSBtZS5wYXJlbnQ7Ci0gICAgICB9IHdo
aWxlIChtZS5jaGlsZHJlbi5sZW5ndGggPiAxMCk7Ci0gICAgICBtZS5wYXJlbnQubWF5YmVTcGls
bCgpOwotICAgIH0sCi0gICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkgewotICAgICAgZm9y
ICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewotICAg
ICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgp
OwotICAgICAgICBpZiAoYXQgPCBzeikgewotICAgICAgICAgIHZhciB1c2VkID0gTWF0aC5taW4o
biwgc3ogLSBhdCk7Ci0gICAgICAgICAgaWYgKGNoaWxkLml0ZXJOKGF0LCB1c2VkLCBvcCkpIHJl
dHVybiB0cnVlOwotICAgICAgICAgIGlmICgobiAtPSB1c2VkKSA9PSAwKSBicmVhazsKLSAgICAg
ICAgICBhdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBhdCAtPSBzejsKLSAgICAgIH0KLSAgICB9Ci0g
IH07Ci0KLSAgdmFyIG5leHREb2NJZCA9IDA7Ci0gIHZhciBEb2MgPSBDb2RlTWlycm9yLkRvYyA9
IGZ1bmN0aW9uKHRleHQsIG1vZGUsIGZpcnN0TGluZSkgewotICAgIGlmICghKHRoaXMgaW5zdGFu
Y2VvZiBEb2MpKSByZXR1cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUpOwotICAgIGlm
IChmaXJzdExpbmUgPT0gbnVsbCkgZmlyc3RMaW5lID0gMDsKLQotICAgIEJyYW5jaENodW5rLmNh
bGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW21ha2VMaW5lKCIiLCBudWxsKV0pXSk7Ci0gICAgdGhp
cy5maXJzdCA9IGZpcnN0TGluZTsKLSAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVm
dCA9IDA7Ci0gICAgdGhpcy5jYW50RWRpdCA9IGZhbHNlOwotICAgIHRoaXMuaGlzdG9yeSA9IG1h
a2VIaXN0b3J5KCk7Ci0gICAgdGhpcy5mcm9udGllciA9IGZpcnN0TGluZTsKLSAgICB2YXIgc3Rh
cnQgPSBQb3MoZmlyc3RMaW5lLCAwKTsKLSAgICB0aGlzLnNlbCA9IHtmcm9tOiBzdGFydCwgdG86
IHN0YXJ0LCBoZWFkOiBzdGFydCwgYW5jaG9yOiBzdGFydCwgc2hpZnQ6IGZhbHNlLCBleHRlbmQ6
IGZhbHNlLCBnb2FsQ29sdW1uOiBudWxsfTsKLSAgICB0aGlzLmlkID0gKytuZXh0RG9jSWQ7Ci0g
ICAgdGhpcy5tb2RlT3B0aW9uID0gbW9kZTsKLQotICAgIGlmICh0eXBlb2YgdGV4dCA9PSAic3Ry
aW5nIikgdGV4dCA9IHNwbGl0TGluZXModGV4dCk7Ci0gICAgdXBkYXRlRG9jKHRoaXMsIHtmcm9t
OiBzdGFydCwgdG86IHN0YXJ0LCB0ZXh0OiB0ZXh0fSwgbnVsbCwge2hlYWQ6IHN0YXJ0LCBhbmNo
b3I6IHN0YXJ0fSk7Ci0gIH07Ci0KLSAgRG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihCcmFuY2hD
aHVuay5wcm90b3R5cGUsIHsKLSAgICBpdGVyOiBmdW5jdGlvbihmcm9tLCB0bywgb3ApIHsKLSAg
ICAgIGlmIChvcCkgdGhpcy5pdGVyTihmcm9tIC0gdGhpcy5maXJzdCwgdG8gLSBmcm9tLCBvcCk7
Ci0gICAgICBlbHNlIHRoaXMuaXRlck4odGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6
ZSwgZnJvbSk7Ci0gICAgfSwKLQotICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7Ci0g
ICAgICB2YXIgaGVpZ2h0ID0gMDsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVu
Z3RoOyBpIDwgZTsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OwotICAgICAgdGhpcy5p
bnNlcnRJbm5lcihhdCAtIHRoaXMuZmlyc3QsIGxpbmVzLCBoZWlnaHQpOwotICAgIH0sCi0gICAg
cmVtb3ZlOiBmdW5jdGlvbihhdCwgbikgeyB0aGlzLnJlbW92ZUlubmVyKGF0IC0gdGhpcy5maXJz
dCwgbik7IH0sCi0KLSAgICBnZXRWYWx1ZTogZnVuY3Rpb24obGluZVNlcCkgewotICAgICAgdmFy
IGxpbmVzID0gZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6
ZSk7Ci0gICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHJldHVybiBsaW5lczsKLSAgICAgIHJl
dHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgIlxuIik7Ci0gICAgfSwKLSAgICBzZXRWYWx1ZTog
ZnVuY3Rpb24oY29kZSkgewotICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFz
dCA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxOwotICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7
ZnJvbTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2lu
OiAic2V0VmFsdWUifSwKLSAgICAgICAgICAgICAgICAge2hlYWQ6IHRvcCwgYW5jaG9yOiB0b3B9
LCB0cnVlKTsKLSAgICB9LAotICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oY29kZSwgZnJvbSwg
dG8sIG9yaWdpbikgewotICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7Ci0gICAgICB0
byA9IHRvID8gY2xpcFBvcyh0aGlzLCB0bykgOiBmcm9tOwotICAgICAgcmVwbGFjZVJhbmdlKHRo
aXMsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pOwotICAgIH0sCi0gICAgZ2V0UmFuZ2U6IGZ1bmN0
aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7Ci0gICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRo
aXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTsKLSAgICAgIGlmIChs
aW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwotICAgICAgcmV0dXJuIGxpbmVzLmpvaW4o
bGluZVNlcCB8fCAiXG4iKTsKLSAgICB9LAotCi0gICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkg
e3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwK
LSAgICBzZXRMaW5lOiBmdW5jdGlvbihsaW5lLCB0ZXh0KSB7Ci0gICAgICBpZiAoaXNMaW5lKHRo
aXMsIGxpbmUpKQotICAgICAgICByZXBsYWNlUmFuZ2UodGhpcywgdGV4dCwgUG9zKGxpbmUsIDAp
LCBjbGlwUG9zKHRoaXMsIFBvcyhsaW5lKSkpOwotICAgIH0sCi0gICAgcmVtb3ZlTGluZTogZnVu
Y3Rpb24obGluZSkgewotICAgICAgaWYgKGlzTGluZSh0aGlzLCBsaW5lKSkKLSAgICAgICAgcmVw
bGFjZVJhbmdlKHRoaXMsICIiLCBQb3MobGluZSwgMCksIGNsaXBQb3ModGhpcywgUG9zKGxpbmUg
KyAxLCAwKSkpOwotICAgIH0sCi0KLSAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7
aWYgKGlzTGluZSh0aGlzLCBsaW5lKSkgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSk7fSwKLSAg
ICBnZXRMaW5lTnVtYmVyOiBmdW5jdGlvbihsaW5lKSB7cmV0dXJuIGxpbmVObyhsaW5lKTt9LAot
Ci0gICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplO30sCi0gICAgZmly
c3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdDt9LAotICAgIGxhc3RMaW5lOiBm
dW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCArIHRoaXMuc2l6ZSAtIDE7fSwKLQotICAgIGNs
aXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyk7fSwKLQotICAg
IGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKLSAgICAgIHZhciBzZWwgPSB0aGlzLnNlbCwg
cG9zOwotICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPT0gImhlYWQiKSBwb3MgPSBz
ZWwuaGVhZDsKLSAgICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJhbmNob3IiKSBwb3MgPSBzZWwuYW5j
aG9yOwotICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gImVuZCIgfHwgc3RhcnQgPT09IGZhbHNlKSBw
b3MgPSBzZWwudG87Ci0gICAgICBlbHNlIHBvcyA9IHNlbC5mcm9tOwotICAgICAgcmV0dXJuIGNv
cHlQb3MocG9zKTsKLSAgICB9LAotICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHty
ZXR1cm4gIXBvc0VxKHRoaXMuc2VsLmhlYWQsIHRoaXMuc2VsLmFuY2hvcik7fSwKLQotICAgIHNl
dEN1cnNvcjogZG9jT3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIGNoLCBleHRlbmQpIHsKLSAgICAg
IHZhciBwb3MgPSBjbGlwUG9zKHRoaXMsIHR5cGVvZiBsaW5lID09ICJudW1iZXIiID8gUG9zKGxp
bmUsIGNoIHx8IDApIDogbGluZSk7Ci0gICAgICBpZiAoZXh0ZW5kKSBleHRlbmRTZWxlY3Rpb24o
dGhpcywgcG9zKTsKLSAgICAgIGVsc2Ugc2V0U2VsZWN0aW9uKHRoaXMsIHBvcywgcG9zKTsKLSAg
ICB9KSwKLSAgICBzZXRTZWxlY3Rpb246IGRvY09wZXJhdGlvbihmdW5jdGlvbihhbmNob3IsIGhl
YWQpIHsKLSAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNs
aXBQb3ModGhpcywgaGVhZCB8fCBhbmNob3IpKTsKLSAgICB9KSwKLSAgICBleHRlbmRTZWxlY3Rp
b246IGRvY09wZXJhdGlvbihmdW5jdGlvbihmcm9tLCB0bykgewotICAgICAgZXh0ZW5kU2VsZWN0
aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIHRvICYmIGNsaXBQb3ModGhpcywgdG8pKTsK
LSAgICB9KSwKLQotICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24obGluZVNlcCkge3JldHVybiB0
aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sIHRoaXMuc2VsLnRvLCBsaW5lU2VwKTt9LAotICAg
IHJlcGxhY2VTZWxlY3Rpb246IGZ1bmN0aW9uKGNvZGUsIGNvbGxhcHNlLCBvcmlnaW4pIHsKLSAg
ICAgIG1ha2VDaGFuZ2UodGhpcywge2Zyb206IHRoaXMuc2VsLmZyb20sIHRvOiB0aGlzLnNlbC50
bywgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiBvcmlnaW59LCBjb2xsYXBzZSB8fCAi
YXJvdW5kIik7Ci0gICAgfSwKLSAgICB1bmRvOiBkb2NPcGVyYXRpb24oZnVuY3Rpb24oKSB7bWFr
ZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIik7fSksCi0gICAgcmVkbzogZG9jT3BlcmF0
aW9uKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCAicmVkbyIpO30pLAot
Ci0gICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2YWwpIHt0aGlzLnNlbC5leHRlbmQgPSB2YWw7
fSwKLQotICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBoaXN0ID0gdGhp
cy5oaXN0b3J5OwotICAgICAgcmV0dXJuIHt1bmRvOiBoaXN0LmRvbmUubGVuZ3RoLCByZWRvOiBo
aXN0LnVuZG9uZS5sZW5ndGh9OwotICAgIH0sCi0gICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigp
IHt0aGlzLmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpO30sCi0KLSAgICBtYXJrQ2xlYW46IGZ1bmN0
aW9uKCkgewotICAgICAgdGhpcy5oaXN0b3J5LmRpcnR5Q291bnRlciA9IDA7Ci0gICAgICB0aGlz
Lmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBudWxsOwotICAgIH0s
Ci0gICAgaXNDbGVhbjogZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLmhpc3RvcnkuZGlydHlDb3Vu
dGVyID09IDA7fSwKLQotICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJu
IHtkb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lKSwKLSAgICAgICAgICAg
ICAgdW5kb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfTsKLSAgICB9
LAotICAgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uKGhpc3REYXRhKSB7Ci0gICAgICB2YXIgaGlzdCA9
IHRoaXMuaGlzdG9yeSA9IG1ha2VIaXN0b3J5KCk7Ci0gICAgICBoaXN0LmRvbmUgPSBoaXN0RGF0
YS5kb25lLnNsaWNlKDApOwotICAgICAgaGlzdC51bmRvbmUgPSBoaXN0RGF0YS51bmRvbmUuc2xp
Y2UoMCk7Ci0gICAgfSwKLQotICAgIG1hcmtUZXh0OiBmdW5jdGlvbihmcm9tLCB0bywgb3B0aW9u
cykgewotICAgICAgcmV0dXJuIG1hcmtUZXh0KHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNs
aXBQb3ModGhpcywgdG8pLCBvcHRpb25zLCAicmFuZ2UiKTsKLSAgICB9LAotICAgIHNldEJvb2tt
YXJrOiBmdW5jdGlvbihwb3MsIG9wdGlvbnMpIHsKLSAgICAgIHZhciByZWFsT3B0cyA9IHtyZXBs
YWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMubm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlvbnMu
d2lkZ2V0IDogb3B0aW9ucyksCi0gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVmdDogb3B0
aW9ucyAmJiBvcHRpb25zLmluc2VydExlZnR9OwotICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLCBw
b3MpOwotICAgICAgcmV0dXJuIG1hcmtUZXh0KHRoaXMsIHBvcywgcG9zLCByZWFsT3B0cywgImJv
b2ttYXJrIik7Ci0gICAgfSwKLSAgICBmaW5kTWFya3NBdDogZnVuY3Rpb24ocG9zKSB7Ci0gICAg
ICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7Ci0gICAgICB2YXIgbWFya2VycyA9IFtdLCBzcGFu
cyA9IGdldExpbmUodGhpcywgcG9zLmxpbmUpLm1hcmtlZFNwYW5zOwotICAgICAgaWYgKHNwYW5z
KSBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBz
cGFuID0gc3BhbnNbaV07Ci0gICAgICAgIGlmICgoc3Bhbi5mcm9tID09IG51bGwgfHwgc3Bhbi5m
cm9tIDw9IHBvcy5jaCkgJiYKLSAgICAgICAgICAgIChzcGFuLnRvID09IG51bGwgfHwgc3Bhbi50
byA+PSBwb3MuY2gpKQotICAgICAgICAgIG1hcmtlcnMucHVzaChzcGFuLm1hcmtlci5wYXJlbnQg
fHwgc3Bhbi5tYXJrZXIpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1hcmtlcnM7Ci0gICAgfSwK
LSAgICBnZXRBbGxNYXJrczogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgbWFya2VycyA9IFtdOwot
ICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIHNwcyA9IGxpbmUu
bWFya2VkU3BhbnM7Ci0gICAgICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxl
bmd0aDsgKytpKQotICAgICAgICAgIGlmIChzcHNbaV0uZnJvbSAhPSBudWxsKSBtYXJrZXJzLnB1
c2goc3BzW2ldLm1hcmtlcik7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiBtYXJrZXJzOwotICAg
IH0sCi0KLSAgICBwb3NGcm9tSW5kZXg6IGZ1bmN0aW9uKG9mZikgewotICAgICAgdmFyIGNoLCBs
aW5lTm8gPSB0aGlzLmZpcnN0OwotICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAg
ICAgICAgdmFyIHN6ID0gbGluZS50ZXh0Lmxlbmd0aCArIDE7Ci0gICAgICAgIGlmIChzeiA+IG9m
ZikgeyBjaCA9IG9mZjsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgb2ZmIC09IHN6OwotICAgICAg
ICArK2xpbmVObzsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIGNsaXBQb3ModGhpcywgUG9zKGxp
bmVObywgY2gpKTsKLSAgICB9LAotICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3Jkcykg
ewotICAgICAgY29vcmRzID0gY2xpcFBvcyh0aGlzLCBjb29yZHMpOwotICAgICAgdmFyIGluZGV4
ID0gY29vcmRzLmNoOwotICAgICAgaWYgKGNvb3Jkcy5saW5lIDwgdGhpcy5maXJzdCB8fCBjb29y
ZHMuY2ggPCAwKSByZXR1cm4gMDsKLSAgICAgIHRoaXMuaXRlcih0aGlzLmZpcnN0LCBjb29yZHMu
bGluZSwgZnVuY3Rpb24gKGxpbmUpIHsKLSAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0
aCArIDE7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiBpbmRleDsKLSAgICB9LAotCi0gICAgY29w
eTogZnVuY3Rpb24oY29weUhpc3RvcnkpIHsKLSAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdldExp
bmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLCB0aGlzLm1vZGVP
cHRpb24sIHRoaXMuZmlyc3QpOwotICAgICAgZG9jLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9w
OyBkb2Muc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKLSAgICAgIGRvYy5zZWwgPSB7ZnJv
bTogdGhpcy5zZWwuZnJvbSwgdG86IHRoaXMuc2VsLnRvLCBoZWFkOiB0aGlzLnNlbC5oZWFkLCBh
bmNob3I6IHRoaXMuc2VsLmFuY2hvciwKLSAgICAgICAgICAgICAgICAgc2hpZnQ6IHRoaXMuc2Vs
LnNoaWZ0LCBleHRlbmQ6IGZhbHNlLCBnb2FsQ29sdW1uOiB0aGlzLnNlbC5nb2FsQ29sdW1ufTsK
LSAgICAgIGlmIChjb3B5SGlzdG9yeSkgewotICAgICAgICBkb2MuaGlzdG9yeS51bmRvRGVwdGgg
PSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoOwotICAgICAgICBkb2Muc2V0SGlzdG9yeSh0aGlzLmdl
dEhpc3RvcnkoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZG9jOwotICAgIH0sCi0KLSAgICBs
aW5rZWREb2M6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAgIGlmICghb3B0aW9ucykgb3B0aW9u
cyA9IHt9OwotICAgICAgdmFyIGZyb20gPSB0aGlzLmZpcnN0LCB0byA9IHRoaXMuZmlyc3QgKyB0
aGlzLnNpemU7Ci0gICAgICBpZiAob3B0aW9ucy5mcm9tICE9IG51bGwgJiYgb3B0aW9ucy5mcm9t
ID4gZnJvbSkgZnJvbSA9IG9wdGlvbnMuZnJvbTsKLSAgICAgIGlmIChvcHRpb25zLnRvICE9IG51
bGwgJiYgb3B0aW9ucy50byA8IHRvKSB0byA9IG9wdGlvbnMudG87Ci0gICAgICB2YXIgY29weSA9
IG5ldyBEb2MoZ2V0TGluZXModGhpcywgZnJvbSwgdG8pLCBvcHRpb25zLm1vZGUgfHwgdGhpcy5t
b2RlT3B0aW9uLCBmcm9tKTsKLSAgICAgIGlmIChvcHRpb25zLnNoYXJlZEhpc3QpIGNvcHkuaGlz
dG9yeSA9IHRoaXMuaGlzdG9yeTsKLSAgICAgICh0aGlzLmxpbmtlZCB8fCAodGhpcy5saW5rZWQg
PSBbXSkpLnB1c2goe2RvYzogY29weSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fSk7
Ci0gICAgICBjb3B5LmxpbmtlZCA9IFt7ZG9jOiB0aGlzLCBpc1BhcmVudDogdHJ1ZSwgc2hhcmVk
SGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fV07Ci0gICAgICByZXR1cm4gY29weTsKLSAgICB9LAot
ICAgIHVubGlua0RvYzogZnVuY3Rpb24ob3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciBpbnN0YW5j
ZW9mIENvZGVNaXJyb3IpIG90aGVyID0gb3RoZXIuZG9jOwotICAgICAgaWYgKHRoaXMubGlua2Vk
KSBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlua2VkLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IHZhciBsaW5rID0gdGhpcy5saW5rZWRbaV07Ci0gICAgICAgIGlmIChsaW5rLmRvYyAhPSBvdGhl
cikgY29udGludWU7Ci0gICAgICAgIHRoaXMubGlua2VkLnNwbGljZShpLCAxKTsKLSAgICAgICAg
b3RoZXIudW5saW5rRG9jKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8v
IElmIHRoZSBoaXN0b3JpZXMgd2VyZSBzaGFyZWQsIHNwbGl0IHRoZW0gYWdhaW4KLSAgICAgIGlm
IChvdGhlci5oaXN0b3J5ID09IHRoaXMuaGlzdG9yeSkgewotICAgICAgICB2YXIgc3BsaXRJZHMg
PSBbb3RoZXIuaWRdOwotICAgICAgICBsaW5rZWREb2NzKG90aGVyLCBmdW5jdGlvbihkb2MpIHtz
cGxpdElkcy5wdXNoKGRvYy5pZCk7fSwgdHJ1ZSk7Ci0gICAgICAgIG90aGVyLmhpc3RvcnkgPSBt
YWtlSGlzdG9yeSgpOwotICAgICAgICBvdGhlci5oaXN0b3J5LmRvbmUgPSBjb3B5SGlzdG9yeUFy
cmF5KHRoaXMuaGlzdG9yeS5kb25lLCBzcGxpdElkcyk7Ci0gICAgICAgIG90aGVyLmhpc3Rvcnku
dW5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxpdElkcyk7
Ci0gICAgICB9Ci0gICAgfSwKLSAgICBpdGVyTGlua2VkRG9jczogZnVuY3Rpb24oZikge2xpbmtl
ZERvY3ModGhpcywgZik7fSwKLQotICAgIGdldE1vZGU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlz
Lm1vZGU7fSwKLSAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtO30KLSAg
fSk7Ci0KLSAgRG9jLnByb3RvdHlwZS5lYWNoTGluZSA9IERvYy5wcm90b3R5cGUuaXRlcjsKLQot
ICAvLyBUaGUgRG9jIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIENvZGVNaXJy
b3IgaW5zdGFuY2VzCi0gIHZhciBkb250RGVsZWdhdGUgPSAiaXRlciBpbnNlcnQgcmVtb3ZlIGNv
cHkgZ2V0RWRpdG9yIi5zcGxpdCgiICIpOwotICBmb3IgKHZhciBwcm9wIGluIERvYy5wcm90b3R5
cGUpIGlmIChEb2MucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGluZGV4T2YoZG9u
dERlbGVnYXRlLCBwcm9wKSA8IDApCi0gICAgQ29kZU1pcnJvci5wcm90b3R5cGVbcHJvcF0gPSAo
ZnVuY3Rpb24obWV0aG9kKSB7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7cmV0dXJuIG1ldGhv
ZC5hcHBseSh0aGlzLmRvYywgYXJndW1lbnRzKTt9OwotICAgIH0pKERvYy5wcm90b3R5cGVbcHJv
cF0pOwotCi0gIGZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkgewot
ICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZShkb2MsIHNraXAsIHNoYXJlZEhpc3QpIHsKLSAgICAgIGlm
IChkb2MubGlua2VkKSBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5saW5rZWQubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgdmFyIHJlbCA9IGRvYy5saW5rZWRbaV07Ci0gICAgICAgIGlmIChyZWwuZG9j
ID09IHNraXApIGNvbnRpbnVlOwotICAgICAgICB2YXIgc2hhcmVkID0gc2hhcmVkSGlzdCAmJiBy
ZWwuc2hhcmVkSGlzdDsKLSAgICAgICAgaWYgKHNoYXJlZEhpc3RPbmx5ICYmICFzaGFyZWQpIGNv
bnRpbnVlOwotICAgICAgICBmKHJlbC5kb2MsIHNoYXJlZCk7Ci0gICAgICAgIHByb3BhZ2F0ZShy
ZWwuZG9jLCBkb2MsIHNoYXJlZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHByb3BhZ2F0ZShkb2Ms
IG51bGwsIHRydWUpOwotICB9Ci0KLSAgZnVuY3Rpb24gYXR0YWNoRG9jKGNtLCBkb2MpIHsKLSAg
ICBpZiAoZG9jLmNtKSB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBp
biB1c2UuIik7Ci0gICAgY20uZG9jID0gZG9jOwotICAgIGRvYy5jbSA9IGNtOwotICAgIGVzdGlt
YXRlTGluZUhlaWdodHMoY20pOwotICAgIGxvYWRNb2RlKGNtKTsKLSAgICBpZiAoIWNtLm9wdGlv
bnMubGluZVdyYXBwaW5nKSBjb21wdXRlTWF4TGVuZ3RoKGNtKTsKLSAgICBjbS5vcHRpb25zLm1v
ZGUgPSBkb2MubW9kZU9wdGlvbjsKLSAgICByZWdDaGFuZ2UoY20pOwotICB9Ci0KLSAgLy8gTElO
RSBVVElMSVRJRVMKLQotICBmdW5jdGlvbiBnZXRMaW5lKGNodW5rLCBuKSB7Ci0gICAgbiAtPSBj
aHVuay5maXJzdDsKLSAgICB3aGlsZSAoIWNodW5rLmxpbmVzKSB7Ci0gICAgICBmb3IgKHZhciBp
ID0gMDs7ICsraSkgewotICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgc3og
PSBjaGlsZC5jaHVua1NpemUoKTsKLSAgICAgICAgaWYgKG4gPCBzeikgeyBjaHVuayA9IGNoaWxk
OyBicmVhazsgfQotICAgICAgICBuIC09IHN6OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
Y2h1bmsubGluZXNbbl07Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRCZXR3ZWVuKGRvYywgc3RhcnQs
IGVuZCkgewotICAgIHZhciBvdXQgPSBbXSwgbiA9IHN0YXJ0LmxpbmU7Ci0gICAgZG9jLml0ZXIo
c3RhcnQubGluZSwgZW5kLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgdGV4
dCA9IGxpbmUudGV4dDsKLSAgICAgIGlmIChuID09IGVuZC5saW5lKSB0ZXh0ID0gdGV4dC5zbGlj
ZSgwLCBlbmQuY2gpOwotICAgICAgaWYgKG4gPT0gc3RhcnQubGluZSkgdGV4dCA9IHRleHQuc2xp
Y2Uoc3RhcnQuY2gpOwotICAgICAgb3V0LnB1c2godGV4dCk7Ci0gICAgICArK247Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotICBmdW5jdGlvbiBnZXRMaW5lcyhkb2MsIGZyb20sIHRv
KSB7Ci0gICAgdmFyIG91dCA9IFtdOwotICAgIGRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihs
aW5lKSB7IG91dC5wdXNoKGxpbmUudGV4dCk7IH0pOwotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQot
ICBmdW5jdGlvbiB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGhlaWdodCkgewotICAgIHZhciBkaWZm
ID0gaGVpZ2h0IC0gbGluZS5oZWlnaHQ7Ci0gICAgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4gPSBu
LnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKLSAgfQotCi0gIGZ1bmN0aW9uIGxpbmVObyhsaW5l
KSB7Ci0gICAgaWYgKGxpbmUucGFyZW50ID09IG51bGwpIHJldHVybiBudWxsOwotICAgIHZhciBj
dXIgPSBsaW5lLnBhcmVudCwgbm8gPSBpbmRleE9mKGN1ci5saW5lcywgbGluZSk7Ci0gICAgZm9y
ICh2YXIgY2h1bmsgPSBjdXIucGFyZW50OyBjaHVuazsgY3VyID0gY2h1bmssIGNodW5rID0gY2h1
bmsucGFyZW50KSB7Ci0gICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkgewotICAgICAgICBpZiAo
Y2h1bmsuY2hpbGRyZW5baV0gPT0gY3VyKSBicmVhazsKLSAgICAgICAgbm8gKz0gY2h1bmsuY2hp
bGRyZW5baV0uY2h1bmtTaXplKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBubyArIGN1
ci5maXJzdDsKLSAgfQotCi0gIGZ1bmN0aW9uIGxpbmVBdEhlaWdodChjaHVuaywgaCkgewotICAg
IHZhciBuID0gY2h1bmsuZmlyc3Q7Ci0gICAgb3V0ZXI6IGRvIHsKLSAgICAgIGZvciAodmFyIGkg
PSAwLCBlID0gY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7Ci0gICAgICAgIHZh
ciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBjaCA9IGNoaWxkLmhlaWdodDsKLSAgICAgICAg
aWYgKGggPCBjaCkgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlcjsgfQotICAgICAgICBo
IC09IGNoOwotICAgICAgICBuICs9IGNoaWxkLmNodW5rU2l6ZSgpOwotICAgICAgfQotICAgICAg
cmV0dXJuIG47Ci0gICAgfSB3aGlsZSAoIWNodW5rLmxpbmVzKTsKLSAgICBmb3IgKHZhciBpID0g
MCwgZSA9IGNodW5rLmxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgewotICAgICAgdmFyIGxpbmUg
PSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDsKLSAgICAgIGlmIChoIDwgbGgpIGJy
ZWFrOwotICAgICAgaCAtPSBsaDsKLSAgICB9Ci0gICAgcmV0dXJuIG4gKyBpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lT2JqKSB7Ci0gICAgbGluZU9iaiA9IHZpc3Vh
bExpbmUoY20uZG9jLCBsaW5lT2JqKTsKLQotICAgIHZhciBoID0gMCwgY2h1bmsgPSBsaW5lT2Jq
LnBhcmVudDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxpbmVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldOwotICAgICAgaWYgKGxpbmUgPT0g
bGluZU9iaikgYnJlYWs7Ci0gICAgICBlbHNlIGggKz0gbGluZS5oZWlnaHQ7Ci0gICAgfQotICAg
IGZvciAodmFyIHAgPSBjaHVuay5wYXJlbnQ7IHA7IGNodW5rID0gcCwgcCA9IGNodW5rLnBhcmVu
dCkgewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIHZhciBjdXIgPSBwLmNoaWxkcmVuW2ldOwotICAgICAgICBpZiAoY3VyID09IGNo
dW5rKSBicmVhazsKLSAgICAgICAgZWxzZSBoICs9IGN1ci5oZWlnaHQ7Ci0gICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBoOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0T3JkZXIobGluZSkgewotICAg
IHZhciBvcmRlciA9IGxpbmUub3JkZXI7Ci0gICAgaWYgKG9yZGVyID09IG51bGwpIG9yZGVyID0g
bGluZS5vcmRlciA9IGJpZGlPcmRlcmluZyhsaW5lLnRleHQpOwotICAgIHJldHVybiBvcmRlcjsK
LSAgfQotCi0gIC8vIEhJU1RPUlkKLQotICBmdW5jdGlvbiBtYWtlSGlzdG9yeSgpIHsKLSAgICBy
ZXR1cm4gewotICAgICAgLy8gQXJyYXlzIG9mIGhpc3RvcnkgZXZlbnRzLiBEb2luZyBzb21ldGhp
bmcgYWRkcyBhbiBldmVudCB0bwotICAgICAgLy8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9p
bmcgbW92ZXMgZXZlbnRzIGZyb20gZG9uZSB0bwotICAgICAgLy8gdW5kb25lLCByZWRvaW5nIG1v
dmVzIHRoZW0gaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KLSAgICAgIGRvbmU6IFtdLCB1bmRvbmU6
IFtdLCB1bmRvRGVwdGg6IEluZmluaXR5LAotICAgICAgLy8gVXNlZCB0byB0cmFjayB3aGVuIGNo
YW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG8KLSAgICAgIC8vIGV2ZW50Ci0g
ICAgICBsYXN0VGltZTogMCwgbGFzdE9wOiBudWxsLCBsYXN0T3JpZ2luOiBudWxsLAotICAgICAg
Ly8gVXNlZCBieSB0aGUgaXNDbGVhbigpIG1ldGhvZAotICAgICAgZGlydHlDb3VudGVyOiAwCi0g
ICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZy
b20sIHRvKSB7Ci0gICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXSwg
biA9IDA7Ci0gICAgZG9jLml0ZXIoTWF0aC5tYXgoZG9jLmZpcnN0LCBmcm9tKSwgTWF0aC5taW4o
ZG9jLmZpcnN0ICsgZG9jLnNpemUsIHRvKSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxp
bmUubWFya2VkU3BhbnMpCi0gICAgICAgIChleGlzdGluZyB8fCAoZXhpc3RpbmcgPSBjaGFuZ2Vb
InNwYW5zXyIgKyBkb2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgICAr
K247Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShk
b2MsIGNoYW5nZSkgewotICAgIHZhciBoaXN0Q2hhbmdlID0ge2Zyb206IGNoYW5nZS5mcm9tLCB0
bzogY2hhbmdlRW5kKGNoYW5nZSksIHRleHQ6IGdldEJldHdlZW4oZG9jLCBjaGFuZ2UuZnJvbSwg
Y2hhbmdlLnRvKX07Ci0gICAgYXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2UsIGNoYW5n
ZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7Ci0gICAgbGlua2VkRG9jcyhkb2MsIGZ1
bmN0aW9uKGRvYykge2F0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJv
bS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpO30sIHRydWUpOwotICAgIHJldHVybiBoaXN0Q2hh
bmdlOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRl
ciwgb3BJZCkgewotICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rvcnk7Ci0gICAgaGlzdC51bmRvbmUu
bGVuZ3RoID0gMDsKLSAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyID0gbHN0KGhpc3QuZG9u
ZSk7Ci0KLSAgICBpZiAoY3VyICYmCi0gICAgICAgIChoaXN0Lmxhc3RPcCA9PSBvcElkIHx8Ci0g
ICAgICAgICBoaXN0Lmxhc3RPcmlnaW4gPT0gY2hhbmdlLm9yaWdpbiAmJiBjaGFuZ2Uub3JpZ2lu
ICYmCi0gICAgICAgICAoKGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09ICIrIiAmJiBoaXN0Lmxh
c3RUaW1lID4gdGltZSAtIDYwMCkgfHwgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gIioiKSkp
IHsKLSAgICAgIC8vIE1lcmdlIHRoaXMgY2hhbmdlIGludG8gdGhlIGxhc3QgZXZlbnQKLSAgICAg
IHZhciBsYXN0ID0gbHN0KGN1ci5jaGFuZ2VzKTsKLSAgICAgIGlmIChwb3NFcShjaGFuZ2UuZnJv
bSwgY2hhbmdlLnRvKSAmJiBwb3NFcShjaGFuZ2UuZnJvbSwgbGFzdC50bykpIHsKLSAgICAgICAg
Ly8gT3B0aW1pemVkIGNhc2UgZm9yIHNpbXBsZSBpbnNlcnRpb24gLS0gZG9uJ3Qgd2FudCB0byBh
ZGQKLSAgICAgICAgLy8gbmV3IGNoYW5nZXNldHMgZm9yIGV2ZXJ5IGNoYXJhY3RlciB0eXBlZAot
ICAgICAgICBsYXN0LnRvID0gY2hhbmdlRW5kKGNoYW5nZSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICAvLyBBZGQgbmV3IHN1Yi1ldmVudAotICAgICAgICBjdXIuY2hhbmdlcy5wdXNoKGhpc3Rv
cnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7Ci0gICAgICB9Ci0gICAgICBjdXIuYW5j
aG9yQWZ0ZXIgPSBzZWxBZnRlci5hbmNob3I7IGN1ci5oZWFkQWZ0ZXIgPSBzZWxBZnRlci5oZWFk
OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcg
ZXZlbnQuCi0gICAgICBjdXIgPSB7Y2hhbmdlczogW2hpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRv
YywgY2hhbmdlKV0sCi0gICAgICAgICAgICAgYW5jaG9yQmVmb3JlOiBkb2Muc2VsLmFuY2hvciwg
aGVhZEJlZm9yZTogZG9jLnNlbC5oZWFkLAotICAgICAgICAgICAgIGFuY2hvckFmdGVyOiBzZWxB
ZnRlci5hbmNob3IsIGhlYWRBZnRlcjogc2VsQWZ0ZXIuaGVhZH07Ci0gICAgICBoaXN0LmRvbmUu
cHVzaChjdXIpOwotICAgICAgd2hpbGUgKGhpc3QuZG9uZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0
aCkKLSAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7Ci0gICAgICBpZiAoaGlzdC5kaXJ0eUNvdW50
ZXIgPCAwKQotICAgICAgICAvLyBUaGUgdXNlciBoYXMgbWFkZSBhIGNoYW5nZSBhZnRlciB1bmRv
aW5nIHBhc3QgdGhlIGxhc3QgY2xlYW4gc3RhdGUuCi0gICAgICAgIC8vIFdlIGNhbiBuZXZlciBn
ZXQgYmFjayB0byBhIGNsZWFuIHN0YXRlIG5vdyB1bnRpbCBtYXJrQ2xlYW4oKSBpcyBjYWxsZWQu
Ci0gICAgICAgIGhpc3QuZGlydHlDb3VudGVyID0gTmFOOwotICAgICAgZWxzZQotICAgICAgICBo
aXN0LmRpcnR5Q291bnRlcisrOwotICAgIH0KLSAgICBoaXN0Lmxhc3RUaW1lID0gdGltZTsKLSAg
ICBoaXN0Lmxhc3RPcCA9IG9wSWQ7Ci0gICAgaGlzdC5sYXN0T3JpZ2luID0gY2hhbmdlLm9yaWdp
bjsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZUNsZWFyZWRTcGFucyhzcGFucykgewotICAgIGlm
ICghc3BhbnMpIHJldHVybiBudWxsOwotICAgIGZvciAodmFyIGkgPSAwLCBvdXQ7IGkgPCBzcGFu
cy5sZW5ndGg7ICsraSkgewotICAgICAgaWYgKHNwYW5zW2ldLm1hcmtlci5leHBsaWNpdGx5Q2xl
YXJlZCkgeyBpZiAoIW91dCkgb3V0ID0gc3BhbnMuc2xpY2UoMCwgaSk7IH0KLSAgICAgIGVsc2Ug
aWYgKG91dCkgb3V0LnB1c2goc3BhbnNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gIW91dCA/IHNw
YW5zIDogb3V0Lmxlbmd0aCA/IG91dCA6IG51bGw7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRPbGRT
cGFucyhkb2MsIGNoYW5nZSkgewotICAgIHZhciBmb3VuZCA9IGNoYW5nZVsic3BhbnNfIiArIGRv
Yy5pZF07Ci0gICAgaWYgKCFmb3VuZCkgcmV0dXJuIG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAs
IG53ID0gW107IGkgPCBjaGFuZ2UudGV4dC5sZW5ndGg7ICsraSkKLSAgICAgIG53LnB1c2gocmVt
b3ZlQ2xlYXJlZFNwYW5zKGZvdW5kW2ldKSk7Ci0gICAgcmV0dXJuIG53OwotICB9Ci0KLSAgLy8g
VXNlZCBib3RoIHRvIHByb3ZpZGUgYSBKU09OLXNhZmUgb2JqZWN0IGluIC5nZXRIaXN0b3J5LCBh
bmQsIHdoZW4KLSAgLy8gZGV0YWNoaW5nIGEgZG9jdW1lbnQsIHRvIHNwbGl0IHRoZSBoaXN0b3J5
IGluIHR3bwotICBmdW5jdGlvbiBjb3B5SGlzdG9yeUFycmF5KGV2ZW50cywgbmV3R3JvdXApIHsK
LSAgICBmb3IgKHZhciBpID0gMCwgY29weSA9IFtdOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV0sIGNoYW5nZXMgPSBldmVudC5jaGFuZ2VzLCBu
ZXdDaGFuZ2VzID0gW107Ci0gICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5ld0NoYW5nZXMsIGFu
Y2hvckJlZm9yZTogZXZlbnQuYW5jaG9yQmVmb3JlLCBoZWFkQmVmb3JlOiBldmVudC5oZWFkQmVm
b3JlLAotICAgICAgICAgICAgICAgICBhbmNob3JBZnRlcjogZXZlbnQuYW5jaG9yQWZ0ZXIsIGhl
YWRBZnRlcjogZXZlbnQuaGVhZEFmdGVyfSk7Ci0gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNo
YW5nZXMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbal0sIG07
Ci0gICAgICAgIG5ld0NoYW5nZXMucHVzaCh7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2Uu
dG8sIHRleHQ6IGNoYW5nZS50ZXh0fSk7Ci0gICAgICAgIGlmIChuZXdHcm91cCkgZm9yICh2YXIg
cHJvcCBpbiBjaGFuZ2UpIGlmIChtID0gcHJvcC5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSB7Ci0g
ICAgICAgICAgaWYgKGluZGV4T2YobmV3R3JvdXAsIE51bWJlcihtWzFdKSkgPiAtMSkgewotICAg
ICAgICAgICAgbHN0KG5ld0NoYW5nZXMpW3Byb3BdID0gY2hhbmdlW3Byb3BdOwotICAgICAgICAg
ICAgZGVsZXRlIGNoYW5nZVtwcm9wXTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIGNvcHk7Ci0gIH0KLQotICAvLyBSZWJhc2luZy9yZXNldHRpbmcg
aGlzdG9yeSB0byBkZWFsIHdpdGggZXh0ZXJuYWxseS1zb3VyY2VkIGNoYW5nZXMKLQotICBmdW5j
dGlvbiByZWJhc2VIaXN0U2VsKHBvcywgZnJvbSwgdG8sIGRpZmYpIHsKLSAgICBpZiAodG8gPCBw
b3MubGluZSkgewotICAgICAgcG9zLmxpbmUgKz0gZGlmZjsKLSAgICB9IGVsc2UgaWYgKGZyb20g
PCBwb3MubGluZSkgewotICAgICAgcG9zLmxpbmUgPSBmcm9tOwotICAgICAgcG9zLmNoID0gMDsK
LSAgICB9Ci0gIH0KLQotICAvLyBUcmllcyB0byByZWJhc2UgYW4gYXJyYXkgb2YgaGlzdG9yeSBl
dmVudHMgZ2l2ZW4gYSBjaGFuZ2UgaW4gdGhlCi0gIC8vIGRvY3VtZW50LiBJZiB0aGUgY2hhbmdl
IHRvdWNoZXMgdGhlIHNhbWUgbGluZXMgYXMgdGhlIGV2ZW50LCB0aGUKLSAgLy8gZXZlbnQsIGFu
ZCBldmVyeXRoaW5nICdiZWhpbmQnIGl0LCBpcyBkaXNjYXJkZWQuIElmIHRoZSBjaGFuZ2UgaXMK
LSAgLy8gYmVmb3JlIHRoZSBldmVudCwgdGhlIGV2ZW50J3MgcG9zaXRpb25zIGFyZSB1cGRhdGVk
LiBVc2VzIGEKLSAgLy8gY29weS1vbi13cml0ZSBzY2hlbWUgZm9yIHRoZSBwb3NpdGlvbnMsIHRv
IGF2b2lkIGhhdmluZyB0bwotICAvLyByZWFsbG9jYXRlIHRoZW0gYWxsIG9uIGV2ZXJ5IHJlYmFz
ZSwgYnV0IGFsc28gYXZvaWQgcHJvYmxlbXMgd2l0aAotICAvLyBzaGFyZWQgcG9zaXRpb24gb2Jq
ZWN0cyBiZWluZyB1bnNhZmVseSB1cGRhdGVkLgotICBmdW5jdGlvbiByZWJhc2VIaXN0QXJyYXko
YXJyYXksIGZyb20sIHRvLCBkaWZmKSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgewotICAgICAgdmFyIHN1YiA9IGFycmF5W2ldLCBvayA9IHRydWU7Ci0gICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5jaGFuZ2VzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAg
IHZhciBjdXIgPSBzdWIuY2hhbmdlc1tqXTsKLSAgICAgICAgaWYgKCFzdWIuY29waWVkKSB7IGN1
ci5mcm9tID0gY29weVBvcyhjdXIuZnJvbSk7IGN1ci50byA9IGNvcHlQb3MoY3VyLnRvKTsgfQot
ICAgICAgICBpZiAodG8gPCBjdXIuZnJvbS5saW5lKSB7Ci0gICAgICAgICAgY3VyLmZyb20ubGlu
ZSArPSBkaWZmOwotICAgICAgICAgIGN1ci50by5saW5lICs9IGRpZmY7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoZnJvbSA8PSBjdXIudG8ubGluZSkgewotICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghc3ViLmNvcGllZCkg
ewotICAgICAgICBzdWIuYW5jaG9yQmVmb3JlID0gY29weVBvcyhzdWIuYW5jaG9yQmVmb3JlKTsg
c3ViLmhlYWRCZWZvcmUgPSBjb3B5UG9zKHN1Yi5oZWFkQmVmb3JlKTsKLSAgICAgICAgc3ViLmFu
Y2hvckFmdGVyID0gY29weVBvcyhzdWIuYW5jaG9yQWZ0ZXIpOyBzdWIucmVhZEFmdGVyID0gY29w
eVBvcyhzdWIuaGVhZEFmdGVyKTsKLSAgICAgICAgc3ViLmNvcGllZCA9IHRydWU7Ci0gICAgICB9
Ci0gICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIGFycmF5LnNwbGljZSgwLCBpICsgMSk7Ci0gICAg
ICAgIGkgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmViYXNlSGlzdFNlbChzdWIuYW5j
aG9yQmVmb3JlKTsgcmViYXNlSGlzdFNlbChzdWIuaGVhZEJlZm9yZSk7Ci0gICAgICAgIHJlYmFz
ZUhpc3RTZWwoc3ViLmFuY2hvckFmdGVyKTsgcmViYXNlSGlzdFNlbChzdWIuaGVhZEFmdGVyKTsK
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiByZWJhc2VIaXN0KGhpc3QsIGNoYW5n
ZSkgewotICAgIHZhciBmcm9tID0gY2hhbmdlLmZyb20ubGluZSwgdG8gPSBjaGFuZ2UudG8ubGlu
ZSwgZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pIC0gMTsKLSAgICByZWJh
c2VIaXN0QXJyYXkoaGlzdC5kb25lLCBmcm9tLCB0bywgZGlmZik7Ci0gICAgcmViYXNlSGlzdEFy
cmF5KGhpc3QudW5kb25lLCBmcm9tLCB0bywgZGlmZik7Ci0gIH0KLQotICAvLyBFVkVOVCBPUEVS
QVRPUlMKLQotICBmdW5jdGlvbiBzdG9wTWV0aG9kKCkge2Vfc3RvcCh0aGlzKTt9Ci0gIC8vIEVu
c3VyZSBhbiBldmVudCBoYXMgYSBzdG9wIG1ldGhvZC4KLSAgZnVuY3Rpb24gYWRkU3RvcChldmVu
dCkgewotICAgIGlmICghZXZlbnQuc3RvcCkgZXZlbnQuc3RvcCA9IHN0b3BNZXRob2Q7Ci0gICAg
cmV0dXJuIGV2ZW50OwotICB9Ci0KLSAgZnVuY3Rpb24gZV9wcmV2ZW50RGVmYXVsdChlKSB7Ci0g
ICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTsKLSAgICBlbHNlIGUu
cmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgfQotICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihl
KSB7Ci0gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSBlLnN0b3BQcm9wYWdhdGlvbigpOwotICAg
IGVsc2UgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIGVfc3RvcChlKSB7
ZV9wcmV2ZW50RGVmYXVsdChlKTsgZV9zdG9wUHJvcGFnYXRpb24oZSk7fQotICBDb2RlTWlycm9y
LmVfc3RvcCA9IGVfc3RvcDsKLSAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2
ZW50RGVmYXVsdDsKLSAgQ29kZU1pcnJvci5lX3N0b3BQcm9wYWdhdGlvbiA9IGVfc3RvcFByb3Bh
Z2F0aW9uOwotCi0gIGZ1bmN0aW9uIGVfdGFyZ2V0KGUpIHtyZXR1cm4gZS50YXJnZXQgfHwgZS5z
cmNFbGVtZW50O30KLSAgZnVuY3Rpb24gZV9idXR0b24oZSkgewotICAgIHZhciBiID0gZS53aGlj
aDsKLSAgICBpZiAoYiA9PSBudWxsKSB7Ci0gICAgICBpZiAoZS5idXR0b24gJiAxKSBiID0gMTsK
LSAgICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgMikgYiA9IDM7Ci0gICAgICBlbHNlIGlmIChlLmJ1
dHRvbiAmIDQpIGIgPSAyOwotICAgIH0KLSAgICBpZiAobWFjICYmIGUuY3RybEtleSAmJiBiID09
IDEpIGIgPSAzOwotICAgIHJldHVybiBiOwotICB9Ci0KLSAgLy8gRVZFTlQgSEFORExJTkcKLQot
ICBmdW5jdGlvbiBvbihlbWl0dGVyLCB0eXBlLCBmKSB7Ci0gICAgaWYgKGVtaXR0ZXIuYWRkRXZl
bnRMaXN0ZW5lcikKLSAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxz
ZSk7Ci0gICAgZWxzZSBpZiAoZW1pdHRlci5hdHRhY2hFdmVudCkKLSAgICAgIGVtaXR0ZXIuYXR0
YWNoRXZlbnQoIm9uIiArIHR5cGUsIGYpOwotICAgIGVsc2UgewotICAgICAgdmFyIG1hcCA9IGVt
aXR0ZXIuX2hhbmRsZXJzIHx8IChlbWl0dGVyLl9oYW5kbGVycyA9IHt9KTsKLSAgICAgIHZhciBh
cnIgPSBtYXBbdHlwZV0gfHwgKG1hcFt0eXBlXSA9IFtdKTsKLSAgICAgIGFyci5wdXNoKGYpOwot
ICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIG9mZihlbWl0dGVyLCB0eXBlLCBmKSB7Ci0gICAgaWYg
KGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcikKLSAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRM
aXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7Ci0gICAgZWxzZSBpZiAoZW1pdHRlci5kZXRhY2hFdmVu
dCkKLSAgICAgIGVtaXR0ZXIuZGV0YWNoRXZlbnQoIm9uIiArIHR5cGUsIGYpOwotICAgIGVsc2Ug
ewotICAgICAgdmFyIGFyciA9IGVtaXR0ZXIuX2hhbmRsZXJzICYmIGVtaXR0ZXIuX2hhbmRsZXJz
W3R5cGVdOwotICAgICAgaWYgKCFhcnIpIHJldHVybjsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJyLmxlbmd0aDsgKytpKQotICAgICAgICBpZiAoYXJyW2ldID09IGYpIHsgYXJyLnNwbGlj
ZShpLCAxKTsgYnJlYWs7IH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzaWduYWwoZW1pdHRl
ciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKLSAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxl
cnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07Ci0gICAgaWYgKCFhcnIpIHJldHVybjsKLSAg
ICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIGFycltpXS5hcHBseShudWxs
LCBhcmdzKTsKLSAgfQotCi0gIHZhciBkZWxheWVkQ2FsbGJhY2tzLCBkZWxheWVkQ2FsbGJhY2tE
ZXB0aCA9IDA7Ci0gIGZ1bmN0aW9uIHNpZ25hbExhdGVyKGVtaXR0ZXIsIHR5cGUgLyosIHZhbHVl
cy4uLiovKSB7Ci0gICAgdmFyIGFyciA9IGVtaXR0ZXIuX2hhbmRsZXJzICYmIGVtaXR0ZXIuX2hh
bmRsZXJzW3R5cGVdOwotICAgIGlmICghYXJyKSByZXR1cm47Ci0gICAgdmFyIGFyZ3MgPSBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAgIGlmICghZGVsYXllZENh
bGxiYWNrcykgewotICAgICAgKytkZWxheWVkQ2FsbGJhY2tEZXB0aDsKLSAgICAgIGRlbGF5ZWRD
YWxsYmFja3MgPSBbXTsKLSAgICAgIHNldFRpbWVvdXQoZmlyZURlbGF5ZWQsIDApOwotICAgIH0K
LSAgICBmdW5jdGlvbiBibmQoZikge3JldHVybiBmdW5jdGlvbigpe2YuYXBwbHkobnVsbCwgYXJn
cyk7fTt9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKQotICAgICAg
ZGVsYXllZENhbGxiYWNrcy5wdXNoKGJuZChhcnJbaV0pKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGZp
cmVEZWxheWVkKCkgewotICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7Ci0gICAgdmFyIGRlbGF5
ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwotICAgIGRlbGF5ZWRDYWxsYmFja3MgPSBudWxsOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgZGVsYXllZFtpXSgpOwot
ICB9Ci0KLSAgZnVuY3Rpb24gaGFzSGFuZGxlcihlbWl0dGVyLCB0eXBlKSB7Ci0gICAgdmFyIGFy
ciA9IGVtaXR0ZXIuX2hhbmRsZXJzICYmIGVtaXR0ZXIuX2hhbmRsZXJzW3R5cGVdOwotICAgIHJl
dHVybiBhcnIgJiYgYXJyLmxlbmd0aCA+IDA7Ci0gIH0KLQotICBDb2RlTWlycm9yLm9uID0gb247
IENvZGVNaXJyb3Iub2ZmID0gb2ZmOyBDb2RlTWlycm9yLnNpZ25hbCA9IHNpZ25hbDsKLQotICAv
LyBNSVNDIFVUSUxJVElFUwotCi0gIC8vIE51bWJlciBvZiBwaXhlbHMgYWRkZWQgdG8gc2Nyb2xs
ZXIgYW5kIHNpemVyIHRvIGhpZGUgc2Nyb2xsYmFyCi0gIHZhciBzY3JvbGxlckN1dE9mZiA9IDMw
OwotCi0gIC8vIFJldHVybmVkIG9yIHRocm93biBieSB2YXJpb3VzIHByb3RvY29scyB0byBzaWdu
YWwgJ0knbSBub3QKLSAgLy8gaGFuZGxpbmcgdGhpcycuCi0gIHZhciBQYXNzID0gQ29kZU1pcnJv
ci5QYXNzID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3JldHVybiAiQ29kZU1pcnJvci5QYXNzIjt9
fTsKLQotICBmdW5jdGlvbiBEZWxheWVkKCkge3RoaXMuaWQgPSBudWxsO30KLSAgRGVsYXllZC5w
cm90b3R5cGUgPSB7c2V0OiBmdW5jdGlvbihtcywgZikge2NsZWFyVGltZW91dCh0aGlzLmlkKTsg
dGhpcy5pZCA9IHNldFRpbWVvdXQoZiwgbXMpO319OwotCi0gIC8vIENvdW50cyB0aGUgY29sdW1u
IG9mZnNldCBpbiBhIHN0cmluZywgdGFraW5nIHRhYnMgaW50byBhY2NvdW50LgotICAvLyBVc2Vk
IG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgotICBmdW5jdGlvbiBjb3VudENvbHVtbihzdHJp
bmcsIGVuZCwgdGFiU2l6ZSwgc3RhcnRJbmRleCwgc3RhcnRWYWx1ZSkgewotICAgIGlmIChlbmQg
PT0gbnVsbCkgewotICAgICAgZW5kID0gc3RyaW5nLnNlYXJjaCgvW15cc1x1MDBhMF0vKTsKLSAg
ICAgIGlmIChlbmQgPT0gLTEpIGVuZCA9IHN0cmluZy5sZW5ndGg7Ci0gICAgfQotICAgIGZvciAo
dmFyIGkgPSBzdGFydEluZGV4IHx8IDAsIG4gPSBzdGFydFZhbHVlIHx8IDA7IGkgPCBlbmQ7ICsr
aSkgewotICAgICAgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gIlx0IikgbiArPSB0YWJTaXplIC0g
KG4gJSB0YWJTaXplKTsKLSAgICAgIGVsc2UgKytuOwotICAgIH0KLSAgICByZXR1cm4gbjsKLSAg
fQotICBDb2RlTWlycm9yLmNvdW50Q29sdW1uID0gY291bnRDb2x1bW47Ci0KLSAgdmFyIHNwYWNl
U3RycyA9IFsiIl07Ci0gIGZ1bmN0aW9uIHNwYWNlU3RyKG4pIHsKLSAgICB3aGlsZSAoc3BhY2VT
dHJzLmxlbmd0aCA8PSBuKQotICAgICAgc3BhY2VTdHJzLnB1c2gobHN0KHNwYWNlU3RycykgKyAi
ICIpOwotICAgIHJldHVybiBzcGFjZVN0cnNbbl07Ci0gIH0KLQotICBmdW5jdGlvbiBsc3QoYXJy
KSB7IHJldHVybiBhcnJbYXJyLmxlbmd0aC0xXTsgfQotCi0gIGZ1bmN0aW9uIHNlbGVjdElucHV0
KG5vZGUpIHsKLSAgICBpZiAoaW9zKSB7IC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMg
YSBidWcgd2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLgotICAgICAgbm9kZS5zZWxlY3Rpb25TdGFy
dCA9IDA7Ci0gICAgICBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3RoOwotICAg
IH0gZWxzZSBub2RlLnNlbGVjdCgpOwotICB9Ci0KLSAgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0
aW9uLCBlbHQpIHsKLSAgICBpZiAoY29sbGVjdGlvbi5pbmRleE9mKSByZXR1cm4gY29sbGVjdGlv
bi5pbmRleE9mKGVsdCk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjb2xsZWN0aW9uLmxlbmd0
aDsgaSA8IGU7ICsraSkKLSAgICAgIGlmIChjb2xsZWN0aW9uW2ldID09IGVsdCkgcmV0dXJuIGk7
Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3Bz
KSB7Ci0gICAgZnVuY3Rpb24gT2JqKCkge30KLSAgICBPYmoucHJvdG90eXBlID0gYmFzZTsKLSAg
ICB2YXIgaW5zdCA9IG5ldyBPYmooKTsKLSAgICBpZiAocHJvcHMpIGNvcHlPYmoocHJvcHMsIGlu
c3QpOwotICAgIHJldHVybiBpbnN0OwotICB9Ci0KLSAgZnVuY3Rpb24gY29weU9iaihvYmosIHRh
cmdldCkgewotICAgIGlmICghdGFyZ2V0KSB0YXJnZXQgPSB7fTsKLSAgICBmb3IgKHZhciBwcm9w
IGluIG9iaikgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgdGFyZ2V0W3Byb3BdID0gb2Jq
W3Byb3BdOwotICAgIHJldHVybiB0YXJnZXQ7Ci0gIH0KLQotICBmdW5jdGlvbiBlbXB0eUFycmF5
KHNpemUpIHsKLSAgICBmb3IgKHZhciBhID0gW10sIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSBhLnB1
c2godW5kZWZpbmVkKTsKLSAgICByZXR1cm4gYTsKLSAgfQotCi0gIGZ1bmN0aW9uIGJpbmQoZikg
ewotICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAx
KTsKLSAgICByZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTt9Owot
ICB9Ci0KLSAgdmFyIG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyID0gL1tcdTMwNDAtXHUzMDlm
XHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXS87Ci0gIGZ1bmN0aW9uIGlz
V29yZENoYXIoY2gpIHsKLSAgICByZXR1cm4gL1x3Ly50ZXN0KGNoKSB8fCBjaCA+ICJceDgwIiAm
JgotICAgICAgKGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8fCBub25BU0NJ
SVNpbmdsZUNhc2VXb3JkQ2hhci50ZXN0KGNoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0VtcHR5
KG9iaikgewotICAgIGZvciAodmFyIG4gaW4gb2JqKSBpZiAob2JqLmhhc093blByb3BlcnR5KG4p
ICYmIG9ialtuXSkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgdmFy
IGlzRXh0ZW5kaW5nQ2hhciA9IC9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUw
NDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUw
NjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1
MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0Rc
dUE2OUZcdWRjMDAtXHVkZmZmXS87Ci0KLSAgLy8gRE9NIFVUSUxJVElFUwotCi0gIGZ1bmN0aW9u
IGVsdCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpIHsKLSAgICB2YXIgZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKLSAgICBpZiAoY2xhc3NOYW1lKSBlLmNsYXNzTmFtZSA9
IGNsYXNzTmFtZTsKLSAgICBpZiAoc3R5bGUpIGUuc3R5bGUuY3NzVGV4dCA9IHN0eWxlOwotICAg
IGlmICh0eXBlb2YgY29udGVudCA9PSAic3RyaW5nIikgc2V0VGV4dENvbnRlbnQoZSwgY29udGVu
dCk7Ci0gICAgZWxzZSBpZiAoY29udGVudCkgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250ZW50Lmxl
bmd0aDsgKytpKSBlLmFwcGVuZENoaWxkKGNvbnRlbnRbaV0pOwotICAgIHJldHVybiBlOwotICB9
Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4oZSkgewotICAgIC8vIElFIHdpbGwgYnJlYWsg
YWxsIHBhcmVudC1jaGlsZCByZWxhdGlvbnMgaW4gc3Vibm9kZXMgd2hlbiBzZXR0aW5nIGlubmVy
SFRNTAotICAgIGlmICghaWUpIGUuaW5uZXJIVE1MID0gIiI7Ci0gICAgZWxzZSB3aGlsZSAoZS5m
aXJzdENoaWxkKSBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7Ci0gICAgcmV0dXJuIGU7Ci0g
IH0KLQotICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbkFuZEFkZChwYXJlbnQsIGUpIHsKLSAgICBy
ZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIHNldFRleHRDb250ZW50KGUsIHN0cikgewotICAgIGlmIChpZV9sdDkpIHsKLSAgICAg
IGUuaW5uZXJIVE1MID0gIiI7Ci0gICAgICBlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHN0cikpOwotICAgIH0gZWxzZSBlLnRleHRDb250ZW50ID0gc3RyOwotICB9Ci0KLSAg
ZnVuY3Rpb24gZ2V0UmVjdChub2RlKSB7Ci0gICAgcmV0dXJuIG5vZGUuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0gIH0KLSAgQ29kZU1pcnJvci5yZXBsYWNlR2V0UmVjdCA9IGZ1bmN0aW9uKGYp
IHsgZ2V0UmVjdCA9IGY7IH07Ci0KLSAgLy8gRkVBVFVSRSBERVRFQ1RJT04KLQotICAvLyBEZXRl
Y3QgZHJhZy1hbmQtZHJvcAotICB2YXIgZHJhZ0FuZERyb3AgPSBmdW5jdGlvbigpIHsKLSAgICAv
LyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9wIHN1cHBvcnQgaW4gSUU2LTgs
IGJ1dCBJCi0gICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0LgotICAgIGlmIChpZV9s
dDkpIHJldHVybiBmYWxzZTsKLSAgICB2YXIgZGl2ID0gZWx0KCdkaXYnKTsKLSAgICByZXR1cm4g
ImRyYWdnYWJsZSIgaW4gZGl2IHx8ICJkcmFnRHJvcCIgaW4gZGl2OwotICB9KCk7Ci0KLSAgLy8g
Rm9yIGEgcmVhc29uIEkgaGF2ZSB5ZXQgdG8gZmlndXJlIG91dCwgc29tZSBicm93c2VycyBkaXNh
bGxvdwotICAvLyB3b3JkIHdyYXBwaW5nIGJldHdlZW4gY2VydGFpbiBjaGFyYWN0ZXJzICpvbmx5
KiBpZiBhIG5ldyBpbmxpbmUKLSAgLy8gZWxlbWVudCBpcyBzdGFydGVkIGJldHdlZW4gdGhlbS4g
VGhpcyBtYWtlcyBpdCBoYXJkIHRvIHJlbGlhYmx5Ci0gIC8vIG1lYXN1cmUgdGhlIHBvc2l0aW9u
IG9mIHRoaW5ncywgc2luY2UgdGhhdCByZXF1aXJlcyBpbnNlcnRpbmcgYW4KLSAgLy8gZXh0cmEg
c3Bhbi4gVGhpcyB0ZXJyaWJseSBmcmFnaWxlIHNldCBvZiByZWdleHBzIG1hdGNoZXMgdGhlCi0g
IC8vIGNoYXJhY3RlciBjb21iaW5hdGlvbnMgdGhhdCBzdWZmZXIgZnJvbSB0aGlzIHBoZW5vbWVu
b24gb24gdGhlCi0gIC8vIHZhcmlvdXMgYnJvd3NlcnMuCi0gIHZhciBzcGFuQWZmZWN0c1dyYXBw
aW5nID0gL14kLzsgLy8gV29uJ3QgbWF0Y2ggYW55IHR3by1jaGFyYWN0ZXIgc3RyaW5nCi0gIGlm
IChnZWNrbykgc3BhbkFmZmVjdHNXcmFwcGluZyA9IC8kJy87Ci0gIGVsc2UgaWYgKHNhZmFyaSAm
JiAhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSBz
cGFuQWZmZWN0c1dyYXBwaW5nID0gL1wtW14gXC0/XXxcP1teICEnXCJcKSwuXC1cLzo7XD9cXVx9
XS87Ci0gIGVsc2UgaWYgKHdlYmtpdCkgc3BhbkFmZmVjdHNXcmFwcGluZyA9IC9bfiEjJSYqKT0r
fVxdfFwiXC4+LDo7XVsoe1s8XXwtW15cLT9cLl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XS87
Ci0KLSAgdmFyIGtub3duU2Nyb2xsYmFyV2lkdGg7Ci0gIGZ1bmN0aW9uIHNjcm9sbGJhcldpZHRo
KG1lYXN1cmUpIHsKLSAgICBpZiAoa25vd25TY3JvbGxiYXJXaWR0aCAhPSBudWxsKSByZXR1cm4g
a25vd25TY3JvbGxiYXJXaWR0aDsKLSAgICB2YXIgdGVzdCA9IGVsdCgiZGl2IiwgbnVsbCwgbnVs
bCwgIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpOwotICAg
IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIHRlc3QpOwotICAgIGlmICh0ZXN0Lm9mZnNl
dFdpZHRoKQotICAgICAga25vd25TY3JvbGxiYXJXaWR0aCA9IHRlc3Qub2Zmc2V0SGVpZ2h0IC0g
dGVzdC5jbGllbnRIZWlnaHQ7Ci0gICAgcmV0dXJuIGtub3duU2Nyb2xsYmFyV2lkdGggfHwgMDsK
LSAgfQotCi0gIHZhciB6d3NwU3VwcG9ydGVkOwotICBmdW5jdGlvbiB6ZXJvV2lkdGhFbGVtZW50
KG1lYXN1cmUpIHsKLSAgICBpZiAoendzcFN1cHBvcnRlZCA9PSBudWxsKSB7Ci0gICAgICB2YXIg
dGVzdCA9IGVsdCgic3BhbiIsICJcdTIwMGIiKTsKLSAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRk
KG1lYXN1cmUsIGVsdCgic3BhbiIsIFt0ZXN0LCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIp
XSkpOwotICAgICAgaWYgKG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgIT0gMCkKLSAg
ICAgICAgendzcFN1cHBvcnRlZCA9IHRlc3Qub2Zmc2V0V2lkdGggPD0gMSAmJiB0ZXN0Lm9mZnNl
dEhlaWdodCA+IDIgJiYgIWllX2x0ODsKLSAgICB9Ci0gICAgaWYgKHp3c3BTdXBwb3J0ZWQpIHJl
dHVybiBlbHQoInNwYW4iLCAiXHUyMDBiIik7Ci0gICAgZWxzZSByZXR1cm4gZWx0KCJzcGFuIiwg
Ilx1MDBhMCIsIG51bGwsICJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdp
bi1yaWdodDogLTFweCIpOwotICB9Ci0KLSAgLy8gU2VlIGlmICIiLnNwbGl0IGlzIHRoZSBicm9r
ZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KLSAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRv
IHNwbGl0IGxpbmVzLgotICB2YXIgc3BsaXRMaW5lcyA9ICJcblxuYiIuc3BsaXQoL1xuLykubGVu
Z3RoICE9IDMgPyBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICB2YXIgcG9zID0gMCwgcmVzdWx0ID0g
W10sIGwgPSBzdHJpbmcubGVuZ3RoOwotICAgIHdoaWxlIChwb3MgPD0gbCkgewotICAgICAgdmFy
IG5sID0gc3RyaW5nLmluZGV4T2YoIlxuIiwgcG9zKTsKLSAgICAgIGlmIChubCA9PSAtMSkgbmwg
PSBzdHJpbmcubGVuZ3RoOwotICAgICAgdmFyIGxpbmUgPSBzdHJpbmcuc2xpY2UocG9zLCBzdHJp
bmcuY2hhckF0KG5sIC0gMSkgPT0gIlxyIiA/IG5sIC0gMSA6IG5sKTsKLSAgICAgIHZhciBydCA9
IGxpbmUuaW5kZXhPZigiXHIiKTsKLSAgICAgIGlmIChydCAhPSAtMSkgewotICAgICAgICByZXN1
bHQucHVzaChsaW5lLnNsaWNlKDAsIHJ0KSk7Ci0gICAgICAgIHBvcyArPSBydCArIDE7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXN1bHQucHVzaChsaW5lKTsKLSAgICAgICAgcG9zID0gbmwg
KyAxOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9IDogZnVuY3Rpb24o
c3RyaW5nKXtyZXR1cm4gc3RyaW5nLnNwbGl0KC9cclxuP3xcbi8pO307Ci0gIENvZGVNaXJyb3Iu
c3BsaXRMaW5lcyA9IHNwbGl0TGluZXM7Ci0KLSAgdmFyIGhhc1NlbGVjdGlvbiA9IHdpbmRvdy5n
ZXRTZWxlY3Rpb24gPyBmdW5jdGlvbih0ZSkgewotICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rp
b25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQ7IH0KLSAgICBjYXRjaChlKSB7IHJldHVybiBmYWxz
ZTsgfQotICB9IDogZnVuY3Rpb24odGUpIHsKLSAgICB0cnkge3ZhciByYW5nZSA9IHRlLm93bmVy
RG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fQotICAgIGNhdGNoKGUpIHt9Ci0gICAg
aWYgKCFyYW5nZSB8fCByYW5nZS5wYXJlbnRFbGVtZW50KCkgIT0gdGUpIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gcmFuZ2UuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsIHJhbmdlKSAh
PSAwOwotICB9OwotCi0gIHZhciBoYXNDb3B5RXZlbnQgPSAoZnVuY3Rpb24oKSB7Ci0gICAgdmFy
IGUgPSBlbHQoImRpdiIpOwotICAgIGlmICgib25jb3B5IiBpbiBlKSByZXR1cm4gdHJ1ZTsKLSAg
ICBlLnNldEF0dHJpYnV0ZSgib25jb3B5IiwgInJldHVybjsiKTsKLSAgICByZXR1cm4gdHlwZW9m
IGUub25jb3B5ID09ICdmdW5jdGlvbic7Ci0gIH0pKCk7Ci0KLSAgLy8gS0VZIE5BTUlORwotCi0g
IHZhciBrZXlOYW1lcyA9IHszOiAiRW50ZXIiLCA4OiAiQmFja3NwYWNlIiwgOTogIlRhYiIsIDEz
OiAiRW50ZXIiLCAxNjogIlNoaWZ0IiwgMTc6ICJDdHJsIiwgMTg6ICJBbHQiLAotICAgICAgICAg
ICAgICAgICAgMTk6ICJQYXVzZSIsIDIwOiAiQ2Fwc0xvY2siLCAyNzogIkVzYyIsIDMyOiAiU3Bh
Y2UiLCAzMzogIlBhZ2VVcCIsIDM0OiAiUGFnZURvd24iLCAzNTogIkVuZCIsCi0gICAgICAgICAg
ICAgICAgICAzNjogIkhvbWUiLCAzNzogIkxlZnQiLCAzODogIlVwIiwgMzk6ICJSaWdodCIsIDQw
OiAiRG93biIsIDQ0OiAiUHJpbnRTY3JuIiwgNDU6ICJJbnNlcnQiLAotICAgICAgICAgICAgICAg
ICAgNDY6ICJEZWxldGUiLCA1OTogIjsiLCA5MTogIk1vZCIsIDkyOiAiTW9kIiwgOTM6ICJNb2Qi
LCAxMDk6ICItIiwgMTA3OiAiPSIsIDEyNzogIkRlbGV0ZSIsCi0gICAgICAgICAgICAgICAgICAx
ODY6ICI7IiwgMTg3OiAiPSIsIDE4ODogIiwiLCAxODk6ICItIiwgMTkwOiAiLiIsIDE5MTogIi8i
LCAxOTI6ICJgIiwgMjE5OiAiWyIsIDIyMDogIlxcIiwKLSAgICAgICAgICAgICAgICAgIDIyMTog
Il0iLCAyMjI6ICInIiwgNjMyNzY6ICJQYWdlVXAiLCA2MzI3NzogIlBhZ2VEb3duIiwgNjMyNzU6
ICJFbmQiLCA2MzI3MzogIkhvbWUiLAotICAgICAgICAgICAgICAgICAgNjMyMzQ6ICJMZWZ0Iiwg
NjMyMzI6ICJVcCIsIDYzMjM1OiAiUmlnaHQiLCA2MzIzMzogIkRvd24iLCA2MzMwMjogIkluc2Vy
dCIsIDYzMjcyOiAiRGVsZXRlIn07Ci0gIENvZGVNaXJyb3Iua2V5TmFtZXMgPSBrZXlOYW1lczsK
LSAgKGZ1bmN0aW9uKCkgewotICAgIC8vIE51bWJlciBrZXlzCi0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgaSsrKSBrZXlOYW1lc1tpICsgNDhdID0gU3RyaW5nKGkpOwotICAgIC8vIEFscGhh
YmV0aWMga2V5cwotICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSBrZXlOYW1lc1tp
XSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7Ci0gICAgLy8gRnVuY3Rpb24ga2V5cwotICAgIGZv
ciAodmFyIGkgPSAxOyBpIDw9IDEyOyBpKyspIGtleU5hbWVzW2kgKyAxMTFdID0ga2V5TmFtZXNb
aSArIDYzMjM1XSA9ICJGIiArIGk7Ci0gIH0pKCk7Ci0KLSAgLy8gQklESSBIRUxQRVJTCi0KLSAg
ZnVuY3Rpb24gaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbSwgdG8sIGYpIHsKLSAgICBp
ZiAoIW9yZGVyKSByZXR1cm4gZihmcm9tLCB0bywgImx0ciIpOwotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBwYXJ0ID0gb3JkZXJbaV07Ci0g
ICAgICBpZiAocGFydC5mcm9tIDwgdG8gJiYgcGFydC50byA+IGZyb20gfHwgZnJvbSA9PSB0byAm
JiBwYXJ0LnRvID09IGZyb20pCi0gICAgICAgIGYoTWF0aC5tYXgocGFydC5mcm9tLCBmcm9tKSwg
TWF0aC5taW4ocGFydC50bywgdG8pLCBwYXJ0LmxldmVsID09IDEgPyAicnRsIiA6ICJsdHIiKTsK
LSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBiaWRpTGVmdChwYXJ0KSB7IHJldHVybiBwYXJ0Lmxl
dmVsICUgMiA/IHBhcnQudG8gOiBwYXJ0LmZyb207IH0KLSAgZnVuY3Rpb24gYmlkaVJpZ2h0KHBh
cnQpIHsgcmV0dXJuIHBhcnQubGV2ZWwgJSAyID8gcGFydC5mcm9tIDogcGFydC50bzsgfQotCi0g
IGZ1bmN0aW9uIGxpbmVMZWZ0KGxpbmUpIHsgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7IHJl
dHVybiBvcmRlciA/IGJpZGlMZWZ0KG9yZGVyWzBdKSA6IDA7IH0KLSAgZnVuY3Rpb24gbGluZVJp
Z2h0KGxpbmUpIHsKLSAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lKTsKLSAgICBpZiAoIW9y
ZGVyKSByZXR1cm4gbGluZS50ZXh0Lmxlbmd0aDsKLSAgICByZXR1cm4gYmlkaVJpZ2h0KGxzdChv
cmRlcikpOwotICB9Ci0KLSAgZnVuY3Rpb24gbGluZVN0YXJ0KGNtLCBsaW5lTikgewotICAgIHZh
ciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKTsKLSAgICB2YXIgdmlzdWFsID0gdmlzdWFs
TGluZShjbS5kb2MsIGxpbmUpOwotICAgIGlmICh2aXN1YWwgIT0gbGluZSkgbGluZU4gPSBsaW5l
Tm8odmlzdWFsKTsKLSAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcih2aXN1YWwpOwotICAgIHZhciBj
aCA9ICFvcmRlciA/IDAgOiBvcmRlclswXS5sZXZlbCAlIDIgPyBsaW5lUmlnaHQodmlzdWFsKSA6
IGxpbmVMZWZ0KHZpc3VhbCk7Ci0gICAgcmV0dXJuIFBvcyhsaW5lTiwgY2gpOwotICB9Ci0gIGZ1
bmN0aW9uIGxpbmVFbmQoY20sIGxpbmVOKSB7Ci0gICAgdmFyIG1lcmdlZCwgbGluZTsKLSAgICB3
aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywg
bGluZU4pKSkKLSAgICAgIGxpbmVOID0gbWVyZ2VkLmZpbmQoKS50by5saW5lOwotICAgIHZhciBv
cmRlciA9IGdldE9yZGVyKGxpbmUpOwotICAgIHZhciBjaCA9ICFvcmRlciA/IGxpbmUudGV4dC5s
ZW5ndGggOiBvcmRlclswXS5sZXZlbCAlIDIgPyBsaW5lTGVmdChsaW5lKSA6IGxpbmVSaWdodChs
aW5lKTsKLSAgICByZXR1cm4gUG9zKGxpbmVOLCBjaCk7Ci0gIH0KLQotICAvLyBUaGlzIGlzIHNv
bWV3aGF0IGludm9sdmVkLiBJdCBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbW92ZQotICAvLyAndmlz
dWFsbHknIHRocm91Z2ggYmktZGlyZWN0aW9uYWwgdGV4dCAtLSBpLmUuLCBwcmVzc2luZyBsZWZ0
Ci0gIC8vIHNob3VsZCBtYWtlIHRoZSBjdXJzb3IgZ28gbGVmdCwgZXZlbiB3aGVuIGluIFJUTCB0
ZXh0LiBUaGUKLSAgLy8gdHJpY2t5IHBhcnQgaXMgdGhlICdqdW1wcycsIHdoZXJlIFJUTCBhbmQg
TFRSIHRleHQgdG91Y2ggZWFjaAotICAvLyBvdGhlci4gVGhpcyBvZnRlbiByZXF1aXJlcyB0aGUg
Y3Vyc29yIG9mZnNldCB0byBtb3ZlIG1vcmUgdGhhbgotICAvLyBvbmUgdW5pdCwgaW4gb3JkZXIg
dG8gdmlzdWFsbHkgbW92ZSBvbmUgdW5pdC4KLSAgZnVuY3Rpb24gbW92ZVZpc3VhbGx5KGxpbmUs
IHN0YXJ0LCBkaXIsIGJ5VW5pdCkgewotICAgIHZhciBiaWRpID0gZ2V0T3JkZXIobGluZSk7Ci0g
ICAgaWYgKCFiaWRpKSByZXR1cm4gbW92ZUxvZ2ljYWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVu
aXQpOwotICAgIHZhciBtb3ZlT25lVW5pdCA9IGJ5VW5pdCA/IGZ1bmN0aW9uKHBvcywgZGlyKSB7
Ci0gICAgICBkbyBwb3MgKz0gZGlyOwotICAgICAgd2hpbGUgKHBvcyA+IDAgJiYgaXNFeHRlbmRp
bmdDaGFyLnRlc3QobGluZS50ZXh0LmNoYXJBdChwb3MpKSk7Ci0gICAgICByZXR1cm4gcG9zOwot
ICAgIH0gOiBmdW5jdGlvbihwb3MsIGRpcikgeyByZXR1cm4gcG9zICsgZGlyOyB9OwotICAgIHZh
ciBsaW5lZGlyID0gYmlkaVswXS5sZXZlbDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpZGku
bGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBwYXJ0ID0gYmlkaVtpXSwgc3RpY2t5ID0gcGFydC5s
ZXZlbCAlIDIgPT0gbGluZWRpcjsKLSAgICAgIGlmICgocGFydC5mcm9tIDwgc3RhcnQgJiYgcGFy
dC50byA+IHN0YXJ0KSB8fAotICAgICAgICAgIChzdGlja3kgJiYgKHBhcnQuZnJvbSA9PSBzdGFy
dCB8fCBwYXJ0LnRvID09IHN0YXJ0KSkpIGJyZWFrOwotICAgIH0KLSAgICB2YXIgdGFyZ2V0ID0g
bW92ZU9uZVVuaXQoc3RhcnQsIHBhcnQubGV2ZWwgJSAyID8gLWRpciA6IGRpcik7Ci0KLSAgICB3
aGlsZSAodGFyZ2V0ICE9IG51bGwpIHsKLSAgICAgIGlmIChwYXJ0LmxldmVsICUgMiA9PSBsaW5l
ZGlyKSB7Ci0gICAgICAgIGlmICh0YXJnZXQgPCBwYXJ0LmZyb20gfHwgdGFyZ2V0ID4gcGFydC50
bykgewotICAgICAgICAgIHBhcnQgPSBiaWRpW2kgKz0gZGlyXTsKLSAgICAgICAgICB0YXJnZXQg
PSBwYXJ0ICYmIChkaXIgPiAwID09IHBhcnQubGV2ZWwgJSAyID8gbW92ZU9uZVVuaXQocGFydC50
bywgLTEpIDogbW92ZU9uZVVuaXQocGFydC5mcm9tLCAxKSk7Ci0gICAgICAgIH0gZWxzZSBicmVh
azsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gYmlkaUxlZnQocGFydCkp
IHsKLSAgICAgICAgICBwYXJ0ID0gYmlkaVstLWldOwotICAgICAgICAgIHRhcmdldCA9IHBhcnQg
JiYgYmlkaVJpZ2h0KHBhcnQpOwotICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBiaWRpUmln
aHQocGFydCkpIHsKLSAgICAgICAgICBwYXJ0ID0gYmlkaVsrK2ldOwotICAgICAgICAgIHRhcmdl
dCA9IHBhcnQgJiYgYmlkaUxlZnQocGFydCk7Ci0gICAgICAgIH0gZWxzZSBicmVhazsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGFyZ2V0IDwgMCB8fCB0YXJnZXQgPiBsaW5lLnRleHQu
bGVuZ3RoID8gbnVsbCA6IHRhcmdldDsKLSAgfQotCi0gIGZ1bmN0aW9uIG1vdmVMb2dpY2FsbHko
bGluZSwgc3RhcnQsIGRpciwgYnlVbml0KSB7Ci0gICAgdmFyIHRhcmdldCA9IHN0YXJ0ICsgZGly
OwotICAgIGlmIChieVVuaXQpIHdoaWxlICh0YXJnZXQgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50
ZXN0KGxpbmUudGV4dC5jaGFyQXQodGFyZ2V0KSkpIHRhcmdldCArPSBkaXI7Ci0gICAgcmV0dXJu
IHRhcmdldCA8IDAgfHwgdGFyZ2V0ID4gbGluZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7
Ci0gIH0KLQotICAvLyBCaWRpcmVjdGlvbmFsIG9yZGVyaW5nIGFsZ29yaXRobQotICAvLyBTZWUg
aHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5L3RyOS0xMy5odG1sIGZvciB0aGUgYWxnb3Jp
dGhtCi0gIC8vIHRoYXQgdGhpcyAocGFydGlhbGx5KSBpbXBsZW1lbnRzLgotCi0gIC8vIE9uZS1j
aGFyIGNvZGVzIHVzZWQgZm9yIGNoYXJhY3RlciB0eXBlczoKLSAgLy8gTCAoTCk6ICAgTGVmdC10
by1SaWdodAotICAvLyBSIChSKTogICBSaWdodC10by1MZWZ0Ci0gIC8vIHIgKEFMKTogIFJpZ2h0
LXRvLUxlZnQgQXJhYmljCi0gIC8vIDEgKEVOKTogIEV1cm9wZWFuIE51bWJlcgotICAvLyArIChF
Uyk6ICBFdXJvcGVhbiBOdW1iZXIgU2VwYXJhdG9yCi0gIC8vICUgKEVUKTogIEV1cm9wZWFuIE51
bWJlciBUZXJtaW5hdG9yCi0gIC8vIG4gKEFOKTogIEFyYWJpYyBOdW1iZXIKLSAgLy8gLCAoQ1Mp
OiAgQ29tbW9uIE51bWJlciBTZXBhcmF0b3IKLSAgLy8gbSAoTlNNKTogTm9uLVNwYWNpbmcgTWFy
awotICAvLyBiIChCTik6ICBCb3VuZGFyeSBOZXV0cmFsCi0gIC8vIHMgKEIpOiAgIFBhcmFncmFw
aCBTZXBhcmF0b3IKLSAgLy8gdCAoUyk6ICAgU2VnbWVudCBTZXBhcmF0b3IKLSAgLy8gdyAoV1Mp
OiAgV2hpdGVzcGFjZQotICAvLyBOIChPTik6ICBPdGhlciBOZXV0cmFscwotCi0gIC8vIFJldHVy
bnMgbnVsbCBpZiBjaGFyYWN0ZXJzIGFyZSBvcmRlcmVkIGFzIHRoZXkgYXBwZWFyCi0gIC8vIChs
ZWZ0LXRvLXJpZ2h0KSwgb3IgYW4gYXJyYXkgb2Ygc2VjdGlvbnMgKHtmcm9tLCB0bywgbGV2ZWx9
Ci0gIC8vIG9iamVjdHMpIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VyIHZpc3VhbGx5
LgotICB2YXIgYmlkaU9yZGVyaW5nID0gKGZ1bmN0aW9uKCkgewotICAgIC8vIENoYXJhY3RlciB0
eXBlcyBmb3IgY29kZXBvaW50cyAwIHRvIDB4ZmYKLSAgICB2YXIgbG93VHlwZXMgPSAiYmJiYmJi
YmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5O
Tk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExM
TExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4l
JTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExM
TExMTExMTExMTExMTE5MTExMTExMTCI7Ci0gICAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBjb2Rl
cG9pbnRzIDB4NjAwIHRvIDB4NmZmCi0gICAgdmFyIGFyYWJpY1R5cGVzID0gInJycnJycnJycnJy
cixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1y
cnJycnJycnJycnJycnJycnIiOwotICAgIGZ1bmN0aW9uIGNoYXJUeXBlKGNvZGUpIHsKLSAgICAg
IGlmIChjb2RlIDw9IDB4ZmYpIHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29kZSk7Ci0gICAgICBl
bHNlIGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHJldHVybiAiUiI7Ci0gICAg
ICBlbHNlIGlmICgweDYwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg2ZmYpIHJldHVybiBhcmFiaWNU
eXBlcy5jaGFyQXQoY29kZSAtIDB4NjAwKTsKLSAgICAgIGVsc2UgaWYgKDB4NzAwIDw9IGNvZGUg
JiYgY29kZSA8PSAweDhhYykgcmV0dXJuICJyIjsKLSAgICAgIGVsc2UgcmV0dXJuICJMIjsKLSAg
ICB9Ci0KLSAgICB2YXIgYmlkaVJFID0gL1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcw
MC1cdTA4YWNdLzsKLSAgICB2YXIgaXNOZXV0cmFsID0gL1tzdHdOXS8sIGlzU3Ryb25nID0gL1tM
UnJdLywgY291bnRzQXNMZWZ0ID0gL1tMYjFuXS8sIGNvdW50c0FzTnVtID0gL1sxbl0vOwotICAg
IC8vIEJyb3dzZXJzIHNlZW0gdG8gYWx3YXlzIHRyZWF0IHRoZSBib3VuZGFyaWVzIG9mIGJsb2Nr
IGVsZW1lbnRzIGFzIGJlaW5nIEwuCi0gICAgdmFyIG91dGVyVHlwZSA9ICJMIjsKLQotICAgIHJl
dHVybiBmdW5jdGlvbihzdHIpIHsKLSAgICAgIGlmICghYmlkaVJFLnRlc3Qoc3RyKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGgsIHR5cGVzID0gW107Ci0gICAgICBm
b3IgKHZhciBpID0gMCwgdHlwZTsgaSA8IGxlbjsgKytpKQotICAgICAgICB0eXBlcy5wdXNoKHR5
cGUgPSBjaGFyVHlwZShzdHIuY2hhckNvZGVBdChpKSkpOwotCi0gICAgICAvLyBXMS4gRXhhbWlu
ZSBlYWNoIG5vbi1zcGFjaW5nIG1hcmsgKE5TTSkgaW4gdGhlIGxldmVsIHJ1biwgYW5kCi0gICAg
ICAvLyBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIE5TTSB0byB0aGUgdHlwZSBvZiB0aGUgcHJldmlv
dXMKLSAgICAgIC8vIGNoYXJhY3Rlci4gSWYgdGhlIE5TTSBpcyBhdCB0aGUgc3RhcnQgb2YgdGhl
IGxldmVsIHJ1biwgaXQgd2lsbAotICAgICAgLy8gZ2V0IHRoZSB0eXBlIG9mIHNvci4KLSAgICAg
IGZvciAodmFyIGkgPSAwLCBwcmV2ID0gb3V0ZXJUeXBlOyBpIDwgbGVuOyArK2kpIHsKLSAgICAg
ICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKLSAgICAgICAgaWYgKHR5cGUgPT0gIm0iKSB0eXBlc1tp
XSA9IHByZXY7Ci0gICAgICAgIGVsc2UgcHJldiA9IHR5cGU7Ci0gICAgICB9Ci0KLSAgICAgIC8v
IFcyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51
bWJlcgotICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBBTCwgb3Ig
c29yKSBpcyBmb3VuZC4gSWYgYW4KLSAgICAgIC8vIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5
cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWMKLSAgICAgIC8vIG51bWJlci4KLSAg
ICAgIC8vIFczLiBDaGFuZ2UgYWxsIEFMcyB0byBSLgotICAgICAgZm9yICh2YXIgaSA9IDAsIGN1
ciA9IG91dGVyVHlwZTsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIHZhciB0eXBlID0gdHlwZXNb
aV07Ci0gICAgICAgIGlmICh0eXBlID09ICIxIiAmJiBjdXIgPT0gInIiKSB0eXBlc1tpXSA9ICJu
IjsKLSAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlKSkgeyBjdXIgPSB0eXBlOyBp
ZiAodHlwZSA9PSAiciIpIHR5cGVzW2ldID0gIlIiOyB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFc0
LiBBIHNpbmdsZSBFdXJvcGVhbiBzZXBhcmF0b3IgYmV0d2VlbiB0d28gRXVyb3BlYW4gbnVtYmVy
cwotICAgICAgLy8gY2hhbmdlcyB0byBhIEV1cm9wZWFuIG51bWJlci4gQSBzaW5nbGUgY29tbW9u
IHNlcGFyYXRvciBiZXR3ZWVuCi0gICAgICAvLyB0d28gbnVtYmVycyBvZiB0aGUgc2FtZSB0eXBl
IGNoYW5nZXMgdG8gdGhhdCB0eXBlLgotICAgICAgZm9yICh2YXIgaSA9IDEsIHByZXYgPSB0eXBl
c1swXTsgaSA8IGxlbiAtIDE7ICsraSkgewotICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOwot
ICAgICAgICBpZiAodHlwZSA9PSAiKyIgJiYgcHJldiA9PSAiMSIgJiYgdHlwZXNbaSsxXSA9PSAi
MSIpIHR5cGVzW2ldID0gIjEiOwotICAgICAgICBlbHNlIGlmICh0eXBlID09ICIsIiAmJiBwcmV2
ID09IHR5cGVzW2krMV0gJiYKLSAgICAgICAgICAgICAgICAgKHByZXYgPT0gIjEiIHx8IHByZXYg
PT0gIm4iKSkgdHlwZXNbaV0gPSBwcmV2OwotICAgICAgICBwcmV2ID0gdHlwZTsKLSAgICAgIH0K
LQotICAgICAgLy8gVzUuIEEgc2VxdWVuY2Ugb2YgRXVyb3BlYW4gdGVybWluYXRvcnMgYWRqYWNl
bnQgdG8gRXVyb3BlYW4KLSAgICAgIC8vIG51bWJlcnMgY2hhbmdlcyB0byBhbGwgRXVyb3BlYW4g
bnVtYmVycy4KLSAgICAgIC8vIFc2LiBPdGhlcndpc2UsIHNlcGFyYXRvcnMgYW5kIHRlcm1pbmF0
b3JzIGNoYW5nZSB0byBPdGhlcgotICAgICAgLy8gTmV1dHJhbC4KLSAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKLSAgICAg
ICAgaWYgKHR5cGUgPT0gIiwiKSB0eXBlc1tpXSA9ICJOIjsKLSAgICAgICAgZWxzZSBpZiAodHlw
ZSA9PSAiJSIpIHsKLSAgICAgICAgICBmb3IgKHZhciBlbmQgPSBpICsgMTsgZW5kIDwgbGVuICYm
IHR5cGVzW2VuZF0gPT0gIiUiOyArK2VuZCkge30KLSAgICAgICAgICB2YXIgcmVwbGFjZSA9IChp
ICYmIHR5cGVzW2ktMV0gPT0gIiEiKSB8fCAoZW5kIDwgbGVuIC0gMSAmJiB0eXBlc1tlbmRdID09
ICIxIikgPyAiMSIgOiAiTiI7Ci0gICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBlbmQ7ICsr
aikgdHlwZXNbal0gPSByZXBsYWNlOwotICAgICAgICAgIGkgPSBlbmQgLSAxOwotICAgICAgICB9
Ci0gICAgICB9Ci0KLSAgICAgIC8vIFc3LiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0
YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlcgotICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9u
ZyB0eXBlIChSLCBMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhbiBMIGlzCi0gICAgICAvLyBmb3Vu
ZCwgdGhlbiBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBMLgotICAg
ICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IG91dGVyVHlwZTsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgIHZhciB0eXBlID0gdHlwZXNbaV07Ci0gICAgICAgIGlmIChjdXIgPT0gIkwiICYmIHR5cGUg
PT0gIjEiKSB0eXBlc1tpXSA9ICJMIjsKLSAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0
eXBlKSkgY3VyID0gdHlwZTsKLSAgICAgIH0KLQotICAgICAgLy8gTjEuIEEgc2VxdWVuY2Ugb2Yg
bmV1dHJhbHMgdGFrZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUKLSAgICAgIC8vIHN1cnJvdW5kaW5n
IHN0cm9uZyB0ZXh0IGlmIHRoZSB0ZXh0IG9uIGJvdGggc2lkZXMgaGFzIHRoZSBzYW1lCi0gICAg
ICAvLyBkaXJlY3Rpb24uIEV1cm9wZWFuIGFuZCBBcmFiaWMgbnVtYmVycyBhY3QgYXMgaWYgdGhl
eSB3ZXJlIFIgaW4KLSAgICAgIC8vIHRlcm1zIG9mIHRoZWlyIGluZmx1ZW5jZSBvbiBuZXV0cmFs
cy4gU3RhcnQtb2YtbGV2ZWwtcnVuIChzb3IpCi0gICAgICAvLyBhbmQgZW5kLW9mLWxldmVsLXJ1
biAoZW9yKSBhcmUgdXNlZCBhdCBsZXZlbCBydW4gYm91bmRhcmllcy4KLSAgICAgIC8vIE4yLiBB
bnkgcmVtYWluaW5nIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24uCi0gICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChpc05ldXRyYWwu
dGVzdCh0eXBlc1tpXSkpIHsKLSAgICAgICAgICBmb3IgKHZhciBlbmQgPSBpICsgMTsgZW5kIDwg
bGVuICYmIGlzTmV1dHJhbC50ZXN0KHR5cGVzW2VuZF0pOyArK2VuZCkge30KLSAgICAgICAgICB2
YXIgYmVmb3JlID0gKGkgPyB0eXBlc1tpLTFdIDogb3V0ZXJUeXBlKSA9PSAiTCI7Ci0gICAgICAg
ICAgdmFyIGFmdGVyID0gKGVuZCA8IGxlbiAtIDEgPyB0eXBlc1tlbmRdIDogb3V0ZXJUeXBlKSA9
PSAiTCI7Ci0gICAgICAgICAgdmFyIHJlcGxhY2UgPSBiZWZvcmUgfHwgYWZ0ZXIgPyAiTCIgOiAi
UiI7Ci0gICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBlbmQ7ICsraikgdHlwZXNbal0gPSBy
ZXBsYWNlOwotICAgICAgICAgIGkgPSBlbmQgLSAxOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAg
ICAgIC8vIEhlcmUgd2UgZGVwYXJ0IGZyb20gdGhlIGRvY3VtZW50ZWQgYWxnb3JpdGhtLCBpbiBv
cmRlciB0byBhdm9pZAotICAgICAgLy8gYnVpbGRpbmcgdXAgYW4gYWN0dWFsIGxldmVscyBhcnJh
eS4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUKLSAgICAgIC8vIGxldmVscyAoMCwgMSwgMikg
aW4gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHRha2UKLSAgICAgIC8vIGV4cGxpY2l0
IGVtYmVkZGluZyBpbnRvIGFjY291bnQsIHdlIGNhbiBidWlsZCB1cCB0aGUgb3JkZXIgb24KLSAg
ICAgIC8vIHRoZSBmbHksIHdpdGhvdXQgZm9sbG93aW5nIHRoZSBsZXZlbC1iYXNlZCBhbGdvcml0
aG0uCi0gICAgICB2YXIgb3JkZXIgPSBbXSwgbTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuOykgewotICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaV0pKSB7Ci0gICAg
ICAgICAgdmFyIHN0YXJ0ID0gaTsKLSAgICAgICAgICBmb3IgKCsraTsgaSA8IGxlbiAmJiBjb3Vu
dHNBc0xlZnQudGVzdCh0eXBlc1tpXSk7ICsraSkge30KLSAgICAgICAgICBvcmRlci5wdXNoKHtm
cm9tOiBzdGFydCwgdG86IGksIGxldmVsOiAwfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgdmFyIHBvcyA9IGksIGF0ID0gb3JkZXIubGVuZ3RoOwotICAgICAgICAgIGZvciAoKytpOyBp
IDwgbGVuICYmIHR5cGVzW2ldICE9ICJMIjsgKytpKSB7fQotICAgICAgICAgIGZvciAodmFyIGog
PSBwb3M7IGogPCBpOykgewotICAgICAgICAgICAgaWYgKGNvdW50c0FzTnVtLnRlc3QodHlwZXNb
al0pKSB7Ci0gICAgICAgICAgICAgIGlmIChwb3MgPCBqKSBvcmRlci5zcGxpY2UoYXQsIDAsIHtm
cm9tOiBwb3MsIHRvOiBqLCBsZXZlbDogMX0pOwotICAgICAgICAgICAgICB2YXIgbnN0YXJ0ID0g
ajsKLSAgICAgICAgICAgICAgZm9yICgrK2o7IGogPCBpICYmIGNvdW50c0FzTnVtLnRlc3QodHlw
ZXNbal0pOyArK2opIHt9Ci0gICAgICAgICAgICAgIG9yZGVyLnNwbGljZShhdCwgMCwge2Zyb206
IG5zdGFydCwgdG86IGosIGxldmVsOiAyfSk7Ci0gICAgICAgICAgICAgIHBvcyA9IGo7Ci0gICAg
ICAgICAgICB9IGVsc2UgKytqOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocG9zIDwgaSkg
b3JkZXIuc3BsaWNlKGF0LCAwLCB7ZnJvbTogcG9zLCB0bzogaSwgbGV2ZWw6IDF9KTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDEgJiYgKG0gPSBzdHIu
bWF0Y2goL15ccysvKSkpIHsKLSAgICAgICAgb3JkZXJbMF0uZnJvbSA9IG1bMF0ubGVuZ3RoOwot
ICAgICAgICBvcmRlci51bnNoaWZ0KHtmcm9tOiAwLCB0bzogbVswXS5sZW5ndGgsIGxldmVsOiAw
fSk7Ci0gICAgICB9Ci0gICAgICBpZiAobHN0KG9yZGVyKS5sZXZlbCA9PSAxICYmIChtID0gc3Ry
Lm1hdGNoKC9ccyskLykpKSB7Ci0gICAgICAgIGxzdChvcmRlcikudG8gLT0gbVswXS5sZW5ndGg7
Ci0gICAgICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiAtIG1bMF0ubGVuZ3RoLCB0bzogbGVuLCBs
ZXZlbDogMH0pOwotICAgICAgfQotICAgICAgaWYgKG9yZGVyWzBdLmxldmVsICE9IGxzdChvcmRl
cikubGV2ZWwpCi0gICAgICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiwgdG86IGxlbiwgbGV2ZWw6
IG9yZGVyWzBdLmxldmVsfSk7Ci0KLSAgICAgIHJldHVybiBvcmRlcjsKLSAgICB9OwotICB9KSgp
OwotCi0gIC8vIFRIRSBFTkQKLQotICBDb2RlTWlycm9yLnZlcnNpb24gPSAiMy4xICsiOwotCi0g
IHJldHVybiBDb2RlTWlycm9yOwotfSkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvY20vY3NzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9jbS9jc3MuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZWY3NmMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jc3Mu
anMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjUgKzAsMCBAQAotQ29kZU1pcnJvci5kZWZpbmVNb2Rl
KCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKLSAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5k
ZW50VW5pdCwgdHlwZTsKLSAgCi0gIHZhciBhdE1lZGlhVHlwZXMgPSBrZXlTZXQoWwotICAgICJh
bGwiLCAiYXVyYWwiLCAiYnJhaWxsZSIsICJoYW5kaGVsZCIsICJwcmludCIsICJwcm9qZWN0aW9u
IiwgInNjcmVlbiIsCi0gICAgInR0eSIsICJ0diIsICJlbWJvc3NlZCIKLSAgXSk7Ci0gIAotICB2
YXIgYXRNZWRpYUZlYXR1cmVzID0ga2V5U2V0KFsKLSAgICAid2lkdGgiLCAibWluLXdpZHRoIiwg
Im1heC13aWR0aCIsICJoZWlnaHQiLCAibWluLWhlaWdodCIsICJtYXgtaGVpZ2h0IiwKLSAgICAi
ZGV2aWNlLXdpZHRoIiwgIm1pbi1kZXZpY2Utd2lkdGgiLCAibWF4LWRldmljZS13aWR0aCIsICJk
ZXZpY2UtaGVpZ2h0IiwKLSAgICAibWluLWRldmljZS1oZWlnaHQiLCAibWF4LWRldmljZS1oZWln
aHQiLCAiYXNwZWN0LXJhdGlvIiwKLSAgICAibWluLWFzcGVjdC1yYXRpbyIsICJtYXgtYXNwZWN0
LXJhdGlvIiwgImRldmljZS1hc3BlY3QtcmF0aW8iLAotICAgICJtaW4tZGV2aWNlLWFzcGVjdC1y
YXRpbyIsICJtYXgtZGV2aWNlLWFzcGVjdC1yYXRpbyIsICJjb2xvciIsICJtaW4tY29sb3IiLAot
ICAgICJtYXgtY29sb3IiLCAiY29sb3ItaW5kZXgiLCAibWluLWNvbG9yLWluZGV4IiwgIm1heC1j
b2xvci1pbmRleCIsCi0gICAgIm1vbm9jaHJvbWUiLCAibWluLW1vbm9jaHJvbWUiLCAibWF4LW1v
bm9jaHJvbWUiLCAicmVzb2x1dGlvbiIsCi0gICAgIm1pbi1yZXNvbHV0aW9uIiwgIm1heC1yZXNv
bHV0aW9uIiwgInNjYW4iLCAiZ3JpZCIKLSAgXSk7Ci0KLSAgdmFyIHByb3BlcnR5S2V5d29yZHMg
PSBrZXlTZXQoWwotICAgICJhbGlnbi1jb250ZW50IiwgImFsaWduLWl0ZW1zIiwgImFsaWduLXNl
bGYiLCAiYWxpZ25tZW50LWFkanVzdCIsCi0gICAgImFsaWdubWVudC1iYXNlbGluZSIsICJhbmNo
b3ItcG9pbnQiLCAiYW5pbWF0aW9uIiwgImFuaW1hdGlvbi1kZWxheSIsCi0gICAgImFuaW1hdGlv
bi1kaXJlY3Rpb24iLCAiYW5pbWF0aW9uLWR1cmF0aW9uIiwgImFuaW1hdGlvbi1pdGVyYXRpb24t
Y291bnQiLAotICAgICJhbmltYXRpb24tbmFtZSIsICJhbmltYXRpb24tcGxheS1zdGF0ZSIsICJh
bmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwKLSAgICAiYXBwZWFyYW5jZSIsICJhemltdXRoIiwg
ImJhY2tmYWNlLXZpc2liaWxpdHkiLCAiYmFja2dyb3VuZCIsCi0gICAgImJhY2tncm91bmQtYXR0
YWNobWVudCIsICJiYWNrZ3JvdW5kLWNsaXAiLCAiYmFja2dyb3VuZC1jb2xvciIsCi0gICAgImJh
Y2tncm91bmQtaW1hZ2UiLCAiYmFja2dyb3VuZC1vcmlnaW4iLCAiYmFja2dyb3VuZC1wb3NpdGlv
biIsCi0gICAgImJhY2tncm91bmQtcmVwZWF0IiwgImJhY2tncm91bmQtc2l6ZSIsICJiYXNlbGlu
ZS1zaGlmdCIsICJiaW5kaW5nIiwKLSAgICAiYmxlZWQiLCAiYm9va21hcmstbGFiZWwiLCAiYm9v
a21hcmstbGV2ZWwiLCAiYm9va21hcmstc3RhdGUiLAotICAgICJib29rbWFyay10YXJnZXQiLCAi
Ym9yZGVyIiwgImJvcmRlci1ib3R0b20iLCAiYm9yZGVyLWJvdHRvbS1jb2xvciIsCi0gICAgImJv
cmRlci1ib3R0b20tbGVmdC1yYWRpdXMiLCAiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLAot
ICAgICJib3JkZXItYm90dG9tLXN0eWxlIiwgImJvcmRlci1ib3R0b20td2lkdGgiLCAiYm9yZGVy
LWNvbGxhcHNlIiwKLSAgICAiYm9yZGVyLWNvbG9yIiwgImJvcmRlci1pbWFnZSIsICJib3JkZXIt
aW1hZ2Utb3V0c2V0IiwKLSAgICAiYm9yZGVyLWltYWdlLXJlcGVhdCIsICJib3JkZXItaW1hZ2Ut
c2xpY2UiLCAiYm9yZGVyLWltYWdlLXNvdXJjZSIsCi0gICAgImJvcmRlci1pbWFnZS13aWR0aCIs
ICJib3JkZXItbGVmdCIsICJib3JkZXItbGVmdC1jb2xvciIsCi0gICAgImJvcmRlci1sZWZ0LXN0
eWxlIiwgImJvcmRlci1sZWZ0LXdpZHRoIiwgImJvcmRlci1yYWRpdXMiLCAiYm9yZGVyLXJpZ2h0
IiwKLSAgICAiYm9yZGVyLXJpZ2h0LWNvbG9yIiwgImJvcmRlci1yaWdodC1zdHlsZSIsICJib3Jk
ZXItcmlnaHQtd2lkdGgiLAotICAgICJib3JkZXItc3BhY2luZyIsICJib3JkZXItc3R5bGUiLCAi
Ym9yZGVyLXRvcCIsICJib3JkZXItdG9wLWNvbG9yIiwKLSAgICAiYm9yZGVyLXRvcC1sZWZ0LXJh
ZGl1cyIsICJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsICJib3JkZXItdG9wLXN0eWxlIiwKLSAg
ICAiYm9yZGVyLXRvcC13aWR0aCIsICJib3JkZXItd2lkdGgiLCAiYm90dG9tIiwgImJveC1kZWNv
cmF0aW9uLWJyZWFrIiwKLSAgICAiYm94LXNoYWRvdyIsICJib3gtc2l6aW5nIiwgImJyZWFrLWFm
dGVyIiwgImJyZWFrLWJlZm9yZSIsICJicmVhay1pbnNpZGUiLAotICAgICJjYXB0aW9uLXNpZGUi
LCAiY2xlYXIiLCAiY2xpcCIsICJjb2xvciIsICJjb2xvci1wcm9maWxlIiwgImNvbHVtbi1jb3Vu
dCIsCi0gICAgImNvbHVtbi1maWxsIiwgImNvbHVtbi1nYXAiLCAiY29sdW1uLXJ1bGUiLCAiY29s
dW1uLXJ1bGUtY29sb3IiLAotICAgICJjb2x1bW4tcnVsZS1zdHlsZSIsICJjb2x1bW4tcnVsZS13
aWR0aCIsICJjb2x1bW4tc3BhbiIsICJjb2x1bW4td2lkdGgiLAotICAgICJjb2x1bW5zIiwgImNv
bnRlbnQiLCAiY291bnRlci1pbmNyZW1lbnQiLCAiY291bnRlci1yZXNldCIsICJjcm9wIiwgImN1
ZSIsCi0gICAgImN1ZS1hZnRlciIsICJjdWUtYmVmb3JlIiwgImN1cnNvciIsICJkaXJlY3Rpb24i
LCAiZGlzcGxheSIsCi0gICAgImRvbWluYW50LWJhc2VsaW5lIiwgImRyb3AtaW5pdGlhbC1hZnRl
ci1hZGp1c3QiLAotICAgICJkcm9wLWluaXRpYWwtYWZ0ZXItYWxpZ24iLCAiZHJvcC1pbml0aWFs
LWJlZm9yZS1hZGp1c3QiLAotICAgICJkcm9wLWluaXRpYWwtYmVmb3JlLWFsaWduIiwgImRyb3At
aW5pdGlhbC1zaXplIiwgImRyb3AtaW5pdGlhbC12YWx1ZSIsCi0gICAgImVsZXZhdGlvbiIsICJl
bXB0eS1jZWxscyIsICJmaXQiLCAiZml0LXBvc2l0aW9uIiwgImZsZXgiLCAiZmxleC1iYXNpcyIs
Ci0gICAgImZsZXgtZGlyZWN0aW9uIiwgImZsZXgtZmxvdyIsICJmbGV4LWdyb3ciLCAiZmxleC1z
aHJpbmsiLCAiZmxleC13cmFwIiwKLSAgICAiZmxvYXQiLCAiZmxvYXQtb2Zmc2V0IiwgImZvbnQi
LCAiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwgImZvbnQtZmFtaWx5IiwKLSAgICAiZm9udC1rZXJu
aW5nIiwgImZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUiLCAiZm9udC1zaXplIiwgImZvbnQtc2l6ZS1h
ZGp1c3QiLAotICAgICJmb250LXN0cmV0Y2giLCAiZm9udC1zdHlsZSIsICJmb250LXN5bnRoZXNp
cyIsICJmb250LXZhcmlhbnQiLAotICAgICJmb250LXZhcmlhbnQtYWx0ZXJuYXRlcyIsICJmb250
LXZhcmlhbnQtY2FwcyIsICJmb250LXZhcmlhbnQtZWFzdC1hc2lhbiIsCi0gICAgImZvbnQtdmFy
aWFudC1saWdhdHVyZXMiLCAiZm9udC12YXJpYW50LW51bWVyaWMiLCAiZm9udC12YXJpYW50LXBv
c2l0aW9uIiwKLSAgICAiZm9udC13ZWlnaHQiLCAiZ3JpZC1jZWxsIiwgImdyaWQtY29sdW1uIiwg
ImdyaWQtY29sdW1uLWFsaWduIiwKLSAgICAiZ3JpZC1jb2x1bW4tc2l6aW5nIiwgImdyaWQtY29s
dW1uLXNwYW4iLCAiZ3JpZC1jb2x1bW5zIiwgImdyaWQtZmxvdyIsCi0gICAgImdyaWQtcm93Iiwg
ImdyaWQtcm93LWFsaWduIiwgImdyaWQtcm93LXNpemluZyIsICJncmlkLXJvdy1zcGFuIiwKLSAg
ICAiZ3JpZC1yb3dzIiwgImdyaWQtdGVtcGxhdGUiLCAiaGFuZ2luZy1wdW5jdHVhdGlvbiIsICJo
ZWlnaHQiLCAiaHlwaGVucyIsCi0gICAgImljb24iLCAiaW1hZ2Utb3JpZW50YXRpb24iLCAiaW1h
Z2UtcmVuZGVyaW5nIiwgImltYWdlLXJlc29sdXRpb24iLAotICAgICJpbmxpbmUtYm94LWFsaWdu
IiwgImp1c3RpZnktY29udGVudCIsICJsZWZ0IiwgImxldHRlci1zcGFjaW5nIiwKLSAgICAibGlu
ZS1icmVhayIsICJsaW5lLWhlaWdodCIsICJsaW5lLXN0YWNraW5nIiwgImxpbmUtc3RhY2tpbmct
cnVieSIsCi0gICAgImxpbmUtc3RhY2tpbmctc2hpZnQiLCAibGluZS1zdGFja2luZy1zdHJhdGVn
eSIsICJsaXN0LXN0eWxlIiwKLSAgICAibGlzdC1zdHlsZS1pbWFnZSIsICJsaXN0LXN0eWxlLXBv
c2l0aW9uIiwgImxpc3Qtc3R5bGUtdHlwZSIsICJtYXJnaW4iLAotICAgICJtYXJnaW4tYm90dG9t
IiwgIm1hcmdpbi1sZWZ0IiwgIm1hcmdpbi1yaWdodCIsICJtYXJnaW4tdG9wIiwKLSAgICAibWFy
a2VyLW9mZnNldCIsICJtYXJrcyIsICJtYXJxdWVlLWRpcmVjdGlvbiIsICJtYXJxdWVlLWxvb3Ai
LAotICAgICJtYXJxdWVlLXBsYXktY291bnQiLCAibWFycXVlZS1zcGVlZCIsICJtYXJxdWVlLXN0
eWxlIiwgIm1heC1oZWlnaHQiLAotICAgICJtYXgtd2lkdGgiLCAibWluLWhlaWdodCIsICJtaW4t
d2lkdGgiLCAibW92ZS10byIsICJuYXYtZG93biIsICJuYXYtaW5kZXgiLAotICAgICJuYXYtbGVm
dCIsICJuYXYtcmlnaHQiLCAibmF2LXVwIiwgIm9wYWNpdHkiLCAib3JkZXIiLCAib3JwaGFucyIs
ICJvdXRsaW5lIiwKLSAgICAib3V0bGluZS1jb2xvciIsICJvdXRsaW5lLW9mZnNldCIsICJvdXRs
aW5lLXN0eWxlIiwgIm91dGxpbmUtd2lkdGgiLAotICAgICJvdmVyZmxvdyIsICJvdmVyZmxvdy1z
dHlsZSIsICJvdmVyZmxvdy13cmFwIiwgIm92ZXJmbG93LXgiLCAib3ZlcmZsb3cteSIsCi0gICAg
InBhZGRpbmciLCAicGFkZGluZy1ib3R0b20iLCAicGFkZGluZy1sZWZ0IiwgInBhZGRpbmctcmln
aHQiLCAicGFkZGluZy10b3AiLAotICAgICJwYWdlIiwgInBhZ2UtYnJlYWstYWZ0ZXIiLCAicGFn
ZS1icmVhay1iZWZvcmUiLCAicGFnZS1icmVhay1pbnNpZGUiLAotICAgICJwYWdlLXBvbGljeSIs
ICJwYXVzZSIsICJwYXVzZS1hZnRlciIsICJwYXVzZS1iZWZvcmUiLCAicGVyc3BlY3RpdmUiLAot
ICAgICJwZXJzcGVjdGl2ZS1vcmlnaW4iLCAicGl0Y2giLCAicGl0Y2gtcmFuZ2UiLCAicGxheS1k
dXJpbmciLCAicG9zaXRpb24iLAotICAgICJwcmVzZW50YXRpb24tbGV2ZWwiLCAicHVuY3R1YXRp
b24tdHJpbSIsICJxdW90ZXMiLCAicmVuZGVyaW5nLWludGVudCIsCi0gICAgInJlc2l6ZSIsICJy
ZXN0IiwgInJlc3QtYWZ0ZXIiLCAicmVzdC1iZWZvcmUiLCAicmljaG5lc3MiLCAicmlnaHQiLAot
ICAgICJyb3RhdGlvbiIsICJyb3RhdGlvbi1wb2ludCIsICJydWJ5LWFsaWduIiwgInJ1Ynktb3Zl
cmhhbmciLAotICAgICJydWJ5LXBvc2l0aW9uIiwgInJ1Ynktc3BhbiIsICJzaXplIiwgInNwZWFr
IiwgInNwZWFrLWFzIiwgInNwZWFrLWhlYWRlciIsCi0gICAgInNwZWFrLW51bWVyYWwiLCAic3Bl
YWstcHVuY3R1YXRpb24iLCAic3BlZWNoLXJhdGUiLCAic3RyZXNzIiwgInN0cmluZy1zZXQiLAot
ICAgICJ0YWItc2l6ZSIsICJ0YWJsZS1sYXlvdXQiLCAidGFyZ2V0IiwgInRhcmdldC1uYW1lIiwg
InRhcmdldC1uZXciLAotICAgICJ0YXJnZXQtcG9zaXRpb24iLCAidGV4dC1hbGlnbiIsICJ0ZXh0
LWFsaWduLWxhc3QiLCAidGV4dC1kZWNvcmF0aW9uIiwKLSAgICAidGV4dC1kZWNvcmF0aW9uLWNv
bG9yIiwgInRleHQtZGVjb3JhdGlvbi1saW5lIiwgInRleHQtZGVjb3JhdGlvbi1za2lwIiwKLSAg
ICAidGV4dC1kZWNvcmF0aW9uLXN0eWxlIiwgInRleHQtZW1waGFzaXMiLCAidGV4dC1lbXBoYXNp
cy1jb2xvciIsCi0gICAgInRleHQtZW1waGFzaXMtcG9zaXRpb24iLCAidGV4dC1lbXBoYXNpcy1z
dHlsZSIsICJ0ZXh0LWhlaWdodCIsCi0gICAgInRleHQtaW5kZW50IiwgInRleHQtanVzdGlmeSIs
ICJ0ZXh0LW91dGxpbmUiLCAidGV4dC1zaGFkb3ciLAotICAgICJ0ZXh0LXNwYWNlLWNvbGxhcHNl
IiwgInRleHQtdHJhbnNmb3JtIiwgInRleHQtdW5kZXJsaW5lLXBvc2l0aW9uIiwKLSAgICAidGV4
dC13cmFwIiwgInRvcCIsICJ0cmFuc2Zvcm0iLCAidHJhbnNmb3JtLW9yaWdpbiIsICJ0cmFuc2Zv
cm0tc3R5bGUiLAotICAgICJ0cmFuc2l0aW9uIiwgInRyYW5zaXRpb24tZGVsYXkiLCAidHJhbnNp
dGlvbi1kdXJhdGlvbiIsCi0gICAgInRyYW5zaXRpb24tcHJvcGVydHkiLCAidHJhbnNpdGlvbi10
aW1pbmctZnVuY3Rpb24iLCAidW5pY29kZS1iaWRpIiwKLSAgICAidmVydGljYWwtYWxpZ24iLCAi
dmlzaWJpbGl0eSIsICJ2b2ljZS1iYWxhbmNlIiwgInZvaWNlLWR1cmF0aW9uIiwKLSAgICAidm9p
Y2UtZmFtaWx5IiwgInZvaWNlLXBpdGNoIiwgInZvaWNlLXJhbmdlIiwgInZvaWNlLXJhdGUiLCAi
dm9pY2Utc3RyZXNzIiwKLSAgICAidm9pY2Utdm9sdW1lIiwgInZvbHVtZSIsICJ3aGl0ZS1zcGFj
ZSIsICJ3aWRvd3MiLCAid2lkdGgiLCAid29yZC1icmVhayIsCi0gICAgIndvcmQtc3BhY2luZyIs
ICJ3b3JkLXdyYXAiLCAiei1pbmRleCIKLSAgXSk7Ci0KLSAgdmFyIGNvbG9yS2V5d29yZHMgPSBr
ZXlTZXQoWwotICAgICJibGFjayIsICJzaWx2ZXIiLCAiZ3JheSIsICJ3aGl0ZSIsICJtYXJvb24i
LCAicmVkIiwgInB1cnBsZSIsICJmdWNoc2lhIiwKLSAgICAiZ3JlZW4iLCAibGltZSIsICJvbGl2
ZSIsICJ5ZWxsb3ciLCAibmF2eSIsICJibHVlIiwgInRlYWwiLCAiYXF1YSIKLSAgXSk7Ci0gIAot
ICB2YXIgdmFsdWVLZXl3b3JkcyA9IGtleVNldChbCi0gICAgImFib3ZlIiwgImFic29sdXRlIiwg
ImFjdGl2ZWJvcmRlciIsICJhY3RpdmVjYXB0aW9uIiwgImFmYXIiLAotICAgICJhZnRlci13aGl0
ZS1zcGFjZSIsICJhaGVhZCIsICJhbGlhcyIsICJhbGwiLCAiYWxsLXNjcm9sbCIsICJhbHRlcm5h
dGUiLAotICAgICJhbHdheXMiLCAiYW1oYXJpYyIsICJhbWhhcmljLWFiZWdlZGUiLCAiYW50aWFs
aWFzZWQiLCAiYXBwd29ya3NwYWNlIiwKLSAgICAiYXJhYmljLWluZGljIiwgImFybWVuaWFuIiwg
ImFzdGVyaXNrcyIsICJhdXRvIiwgImF2b2lkIiwgImJhY2tncm91bmQiLAotICAgICJiYWNrd2Fy
ZHMiLCAiYmFzZWxpbmUiLCAiYmVsb3ciLCAiYmlkaS1vdmVycmlkZSIsICJiaW5hcnkiLCAiYmVu
Z2FsaSIsCi0gICAgImJsaW5rIiwgImJsb2NrIiwgImJsb2NrLWF4aXMiLCAiYm9sZCIsICJib2xk
ZXIiLCAiYm9yZGVyIiwgImJvcmRlci1ib3giLAotICAgICJib3RoIiwgImJvdHRvbSIsICJicmVh
ay1hbGwiLCAiYnJlYWstd29yZCIsICJidXR0b24iLCAiYnV0dG9uLWJldmVsIiwKLSAgICAiYnV0
dG9uZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAiYnV0dG9uc2hhZG93IiwgImJ1dHRvbnRleHQi
LCAiY2FtYm9kaWFuIiwKLSAgICAiY2FwaXRhbGl6ZSIsICJjYXBzLWxvY2staW5kaWNhdG9yIiwg
ImNhcHRpb24iLCAiY2FwdGlvbnRleHQiLCAiY2FyZXQiLAotICAgICJjZWxsIiwgImNlbnRlciIs
ICJjaGVja2JveCIsICJjaXJjbGUiLCAiY2prLWVhcnRobHktYnJhbmNoIiwKLSAgICAiY2prLWhl
YXZlbmx5LXN0ZW0iLCAiY2prLWlkZW9ncmFwaGljIiwgImNsZWFyIiwgImNsaXAiLCAiY2xvc2Ut
cXVvdGUiLAotICAgICJjb2wtcmVzaXplIiwgImNvbGxhcHNlIiwgImNvbXBhY3QiLCAiY29uZGVu
c2VkIiwgImNvbnRhaW4iLCAiY29udGVudCIsCi0gICAgImNvbnRlbnQtYm94IiwgImNvbnRleHQt
bWVudSIsICJjb250aW51b3VzIiwgImNvcHkiLCAiY292ZXIiLCAiY3JvcCIsCi0gICAgImNyb3Nz
IiwgImNyb3NzaGFpciIsICJjdXJyZW50Y29sb3IiLCAiY3Vyc2l2ZSIsICJkYXNoZWQiLCAiZGVj
aW1hbCIsCi0gICAgImRlY2ltYWwtbGVhZGluZy16ZXJvIiwgImRlZmF1bHQiLCAiZGVmYXVsdC1i
dXR0b24iLCAiZGVzdGluYXRpb24tYXRvcCIsCi0gICAgImRlc3RpbmF0aW9uLWluIiwgImRlc3Rp
bmF0aW9uLW91dCIsICJkZXN0aW5hdGlvbi1vdmVyIiwgImRldmFuYWdhcmkiLAotICAgICJkaXNj
IiwgImRpc2NhcmQiLCAiZG9jdW1lbnQiLCAiZG90LWRhc2giLCAiZG90LWRvdC1kYXNoIiwgImRv
dHRlZCIsCi0gICAgImRvdWJsZSIsICJkb3duIiwgImUtcmVzaXplIiwgImVhc2UiLCAiZWFzZS1p
biIsICJlYXNlLWluLW91dCIsICJlYXNlLW91dCIsCi0gICAgImVsZW1lbnQiLCAiZWxsaXBzaXMi
LCAiZW1iZWQiLCAiZW5kIiwgImV0aGlvcGljIiwgImV0aGlvcGljLWFiZWdlZGUiLAotICAgICJl
dGhpb3BpYy1hYmVnZWRlLWFtLWV0IiwgImV0aGlvcGljLWFiZWdlZGUtZ2V6IiwgImV0aGlvcGlj
LWFiZWdlZGUtdGktZXIiLAotICAgICJldGhpb3BpYy1hYmVnZWRlLXRpLWV0IiwgImV0aGlvcGlj
LWhhbGVoYW1lLWFhLWVyIiwKLSAgICAiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXQiLCAiZXRoaW9w
aWMtaGFsZWhhbWUtYW0tZXQiLAotICAgICJldGhpb3BpYy1oYWxlaGFtZS1nZXoiLCAiZXRoaW9w
aWMtaGFsZWhhbWUtb20tZXQiLAotICAgICJldGhpb3BpYy1oYWxlaGFtZS1zaWQtZXQiLCAiZXRo
aW9waWMtaGFsZWhhbWUtc28tZXQiLAotICAgICJldGhpb3BpYy1oYWxlaGFtZS10aS1lciIsICJl
dGhpb3BpYy1oYWxlaGFtZS10aS1ldCIsCi0gICAgImV0aGlvcGljLWhhbGVoYW1lLXRpZyIsICJl
dy1yZXNpemUiLCAiZXhwYW5kZWQiLCAiZXh0cmEtY29uZGVuc2VkIiwKLSAgICAiZXh0cmEtZXhw
YW5kZWQiLCAiZmFudGFzeSIsICJmYXN0IiwgImZpbGwiLCAiZml4ZWQiLCAiZmxhdCIsICJmb290
bm90ZXMiLAotICAgICJmb3J3YXJkcyIsICJmcm9tIiwgImdlb21ldHJpY1ByZWNpc2lvbiIsICJn
ZW9yZ2lhbiIsICJncmF5dGV4dCIsICJncm9vdmUiLAotICAgICJndWphcmF0aSIsICJndXJtdWto
aSIsICJoYW5kIiwgImhhbmd1bCIsICJoYW5ndWwtY29uc29uYW50IiwgImhlYnJldyIsCi0gICAg
ImhlbHAiLCAiaGlkZGVuIiwgImhpZGUiLCAiaGlnaGVyIiwgImhpZ2hsaWdodCIsICJoaWdobGln
aHR0ZXh0IiwKLSAgICAiaGlyYWdhbmEiLCAiaGlyYWdhbmEtaXJvaGEiLCAiaG9yaXpvbnRhbCIs
ICJoc2wiLCAiaHNsYSIsICJpY29uIiwgImlnbm9yZSIsCi0gICAgImluYWN0aXZlYm9yZGVyIiwg
ImluYWN0aXZlY2FwdGlvbiIsICJpbmFjdGl2ZWNhcHRpb250ZXh0IiwgImluZmluaXRlIiwKLSAg
ICAiaW5mb2JhY2tncm91bmQiLCAiaW5mb3RleHQiLCAiaW5oZXJpdCIsICJpbml0aWFsIiwgImlu
bGluZSIsICJpbmxpbmUtYXhpcyIsCi0gICAgImlubGluZS1ibG9jayIsICJpbmxpbmUtdGFibGUi
LCAiaW5zZXQiLCAiaW5zaWRlIiwgImludHJpbnNpYyIsICJpbnZlcnQiLAotICAgICJpdGFsaWMi
LCAianVzdGlmeSIsICJrYW5uYWRhIiwgImthdGFrYW5hIiwgImthdGFrYW5hLWlyb2hhIiwgImto
bWVyIiwKLSAgICAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJnZXIiLCAibGVmdCIs
ICJsZXZlbCIsICJsaWdodGVyIiwKLSAgICAibGluZS10aHJvdWdoIiwgImxpbmVhciIsICJsaW5l
cyIsICJsaXN0LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsCi0gICAgImxvY2FsIiwgImxv
Z2ljYWwiLCAibG91ZCIsICJsb3dlciIsICJsb3dlci1hbHBoYSIsICJsb3dlci1hcm1lbmlhbiIs
Ci0gICAgImxvd2VyLWdyZWVrIiwgImxvd2VyLWhleGFkZWNpbWFsIiwgImxvd2VyLWxhdGluIiwg
Imxvd2VyLW5vcndlZ2lhbiIsCi0gICAgImxvd2VyLXJvbWFuIiwgImxvd2VyY2FzZSIsICJsdHIi
LCAibWFsYXlhbGFtIiwgIm1hdGNoIiwKLSAgICAibWVkaWEtY29udHJvbHMtYmFja2dyb3VuZCIs
ICJtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheSIsCi0gICAgIm1lZGlhLWZ1bGxzY3JlZW4tYnV0
dG9uIiwgIm1lZGlhLW11dGUtYnV0dG9uIiwgIm1lZGlhLXBsYXktYnV0dG9uIiwKLSAgICAibWVk
aWEtcmV0dXJuLXRvLXJlYWx0aW1lLWJ1dHRvbiIsICJtZWRpYS1yZXdpbmQtYnV0dG9uIiwKLSAg
ICAibWVkaWEtc2Vlay1iYWNrLWJ1dHRvbiIsICJtZWRpYS1zZWVrLWZvcndhcmQtYnV0dG9uIiwg
Im1lZGlhLXNsaWRlciIsCi0gICAgIm1lZGlhLXNsaWRlcnRodW1iIiwgIm1lZGlhLXRpbWUtcmVt
YWluaW5nLWRpc3BsYXkiLCAibWVkaWEtdm9sdW1lLXNsaWRlciIsCi0gICAgIm1lZGlhLXZvbHVt
ZS1zbGlkZXItY29udGFpbmVyIiwgIm1lZGlhLXZvbHVtZS1zbGlkZXJ0aHVtYiIsICJtZWRpdW0i
LAotICAgICJtZW51IiwgIm1lbnVsaXN0IiwgIm1lbnVsaXN0LWJ1dHRvbiIsICJtZW51bGlzdC10
ZXh0IiwKLSAgICAibWVudWxpc3QtdGV4dGZpZWxkIiwgIm1lbnV0ZXh0IiwgIm1lc3NhZ2UtYm94
IiwgIm1pZGRsZSIsICJtaW4taW50cmluc2ljIiwKLSAgICAibWl4IiwgIm1vbmdvbGlhbiIsICJt
b25vc3BhY2UiLCAibW92ZSIsICJtdWx0aXBsZSIsICJteWFubWFyIiwgIm4tcmVzaXplIiwKLSAg
ICAibmFycm93ZXIiLCAibmF2eSIsICJuZS1yZXNpemUiLCAibmVzdy1yZXNpemUiLCAibm8tY2xv
c2UtcXVvdGUiLCAibm8tZHJvcCIsCi0gICAgIm5vLW9wZW4tcXVvdGUiLCAibm8tcmVwZWF0Iiwg
Im5vbmUiLCAibm9ybWFsIiwgIm5vdC1hbGxvd2VkIiwgIm5vd3JhcCIsCi0gICAgIm5zLXJlc2l6
ZSIsICJudy1yZXNpemUiLCAibndzZS1yZXNpemUiLCAib2JsaXF1ZSIsICJvY3RhbCIsICJvcGVu
LXF1b3RlIiwKLSAgICAib3B0aW1pemVMZWdpYmlsaXR5IiwgIm9wdGltaXplU3BlZWQiLCAib3Jp
eWEiLCAib3JvbW8iLCAib3V0c2V0IiwKLSAgICAib3V0c2lkZSIsICJvdmVybGF5IiwgIm92ZXJs
aW5lIiwgInBhZGRpbmciLCAicGFkZGluZy1ib3giLCAicGFpbnRlZCIsCi0gICAgInBhdXNlZCIs
ICJwZXJzaWFuIiwgInBsdXMtZGFya2VyIiwgInBsdXMtbGlnaHRlciIsICJwb2ludGVyIiwgInBv
cnRyYWl0IiwKLSAgICAicHJlIiwgInByZS1saW5lIiwgInByZS13cmFwIiwgInByZXNlcnZlLTNk
IiwgInByb2dyZXNzIiwgInB1c2gtYnV0dG9uIiwKLSAgICAicmFkaW8iLCAicmVhZC1vbmx5Iiwg
InJlYWQtd3JpdGUiLCAicmVhZC13cml0ZS1wbGFpbnRleHQtb25seSIsICJyZWxhdGl2ZSIsCi0g
ICAgInJlcGVhdCIsICJyZXBlYXQteCIsICJyZXBlYXQteSIsICJyZXNldCIsICJyZXZlcnNlIiwg
InJnYiIsICJyZ2JhIiwKLSAgICAicmlkZ2UiLCAicmlnaHQiLCAicm91bmQiLCAicm93LXJlc2l6
ZSIsICJydGwiLCAicnVuLWluIiwgInJ1bm5pbmciLAotICAgICJzLXJlc2l6ZSIsICJzYW5zLXNl
cmlmIiwgInNjcm9sbCIsICJzY3JvbGxiYXIiLCAic2UtcmVzaXplIiwgInNlYXJjaGZpZWxkIiwK
LSAgICAic2VhcmNoZmllbGQtY2FuY2VsLWJ1dHRvbiIsICJzZWFyY2hmaWVsZC1kZWNvcmF0aW9u
IiwKLSAgICAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLCAic2VhcmNoZmllbGQtcmVzdWx0
cy1kZWNvcmF0aW9uIiwKLSAgICAic2VtaS1jb25kZW5zZWQiLCAic2VtaS1leHBhbmRlZCIsICJz
ZXBhcmF0ZSIsICJzZXJpZiIsICJzaG93IiwgInNpZGFtYSIsCi0gICAgInNpbmdsZSIsICJza2lw
LXdoaXRlLXNwYWNlIiwgInNsaWRlIiwgInNsaWRlci1ob3Jpem9udGFsIiwKLSAgICAic2xpZGVy
LXZlcnRpY2FsIiwgInNsaWRlcnRodW1iLWhvcml6b250YWwiLCAic2xpZGVydGh1bWItdmVydGlj
YWwiLCAic2xvdyIsCi0gICAgInNtYWxsIiwgInNtYWxsLWNhcHMiLCAic21hbGwtY2FwdGlvbiIs
ICJzbWFsbGVyIiwgInNvbGlkIiwgInNvbWFsaSIsCi0gICAgInNvdXJjZS1hdG9wIiwgInNvdXJj
ZS1pbiIsICJzb3VyY2Utb3V0IiwgInNvdXJjZS1vdmVyIiwgInNwYWNlIiwgInNxdWFyZSIsCi0g
ICAgInNxdWFyZS1idXR0b24iLCAic3RhcnQiLCAic3RhdGljIiwgInN0YXR1cy1iYXIiLCAic3Ry
ZXRjaCIsICJzdHJva2UiLAotICAgICJzdWIiLCAic3VicGl4ZWwtYW50aWFsaWFzZWQiLCAic3Vw
ZXIiLCAic3ctcmVzaXplIiwgInRhYmxlIiwKLSAgICAidGFibGUtY2FwdGlvbiIsICJ0YWJsZS1j
ZWxsIiwgInRhYmxlLWNvbHVtbiIsICJ0YWJsZS1jb2x1bW4tZ3JvdXAiLAotICAgICJ0YWJsZS1m
b290ZXItZ3JvdXAiLCAidGFibGUtaGVhZGVyLWdyb3VwIiwgInRhYmxlLXJvdyIsICJ0YWJsZS1y
b3ctZ3JvdXAiLAotICAgICJ0ZWx1Z3UiLCAidGV4dCIsICJ0ZXh0LWJvdHRvbSIsICJ0ZXh0LXRv
cCIsICJ0ZXh0YXJlYSIsICJ0ZXh0ZmllbGQiLCAidGhhaSIsCi0gICAgInRoaWNrIiwgInRoaW4i
LCAidGhyZWVkZGFya3NoYWRvdyIsICJ0aHJlZWRmYWNlIiwgInRocmVlZGhpZ2hsaWdodCIsCi0g
ICAgInRocmVlZGxpZ2h0c2hhZG93IiwgInRocmVlZHNoYWRvdyIsICJ0aWJldGFuIiwgInRpZ3Jl
IiwgInRpZ3JpbnlhLWVyIiwKLSAgICAidGlncmlueWEtZXItYWJlZ2VkZSIsICJ0aWdyaW55YS1l
dCIsICJ0aWdyaW55YS1ldC1hYmVnZWRlIiwgInRvIiwgInRvcCIsCi0gICAgInRyYW5zcGFyZW50
IiwgInVsdHJhLWNvbmRlbnNlZCIsICJ1bHRyYS1leHBhbmRlZCIsICJ1bmRlcmxpbmUiLCAidXAi
LAotICAgICJ1cHBlci1hbHBoYSIsICJ1cHBlci1hcm1lbmlhbiIsICJ1cHBlci1ncmVlayIsICJ1
cHBlci1oZXhhZGVjaW1hbCIsCi0gICAgInVwcGVyLWxhdGluIiwgInVwcGVyLW5vcndlZ2lhbiIs
ICJ1cHBlci1yb21hbiIsICJ1cHBlcmNhc2UiLCAidXJkdSIsICJ1cmwiLAotICAgICJ2ZXJ0aWNh
bCIsICJ2ZXJ0aWNhbC10ZXh0IiwgInZpc2libGUiLCAidmlzaWJsZUZpbGwiLCAidmlzaWJsZVBh
aW50ZWQiLAotICAgICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0
IiwgIndhdmUiLCAid2hpdGUiLCAid2lkZXIiLAotICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUi
LCAid2luZG93dGV4dCIsICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwKLSAgICAieHgtbGFy
Z2UiLCAieHgtc21hbGwiLCAieWVsbG93IgotICBdKTsKLQotICBmdW5jdGlvbiBrZXlTZXQoYXJy
YXkpIHsgdmFyIGtleXMgPSB7fTsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsr
aSkga2V5c1thcnJheVtpXV0gPSB0cnVlOyByZXR1cm4ga2V5czsgfQotICBmdW5jdGlvbiByZXQo
c3R5bGUsIHRwKSB7dHlwZSA9IHRwOyByZXR1cm4gc3R5bGU7fQotCi0gIGZ1bmN0aW9uIHRva2Vu
QmFzZShzdHJlYW0sIHN0YXRlKSB7Ci0gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKLSAgICBp
ZiAoY2ggPT0gIkAiKSB7c3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOyByZXR1cm4gcmV0KCJk
ZWYiLCBzdHJlYW0uY3VycmVudCgpKTt9Ci0gICAgZWxzZSBpZiAoY2ggPT0gIi8iICYmIHN0cmVh
bS5lYXQoIioiKSkgewotICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwotICAg
ICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCIhIikpIHsKLSAgICAgIHN0YXRlLnRva2VuaXpl
ID0gdG9rZW5TR01MQ29tbWVudDsKLSAgICAgIHJldHVybiB0b2tlblNHTUxDb21tZW50KHN0cmVh
bSwgc3RhdGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChjaCA9PSAiPSIpIHJldChudWxsLCAiY29t
cGFyZSIpOwotICAgIGVsc2UgaWYgKChjaCA9PSAifiIgfHwgY2ggPT0gInwiKSAmJiBzdHJlYW0u
ZWF0KCI9IikpIHJldHVybiByZXQobnVsbCwgImNvbXBhcmUiKTsKLSAgICBlbHNlIGlmIChjaCA9
PSAiXCIiIHx8IGNoID09ICInIikgewotICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmlu
ZyhjaCk7Ci0gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGNoID09ICIjIikgewotICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdc
XFwtXS8pOwotICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJoYXNoIik7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGNoID09ICIhIikgewotICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7Ci0gICAg
ICByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImltcG9ydGFudCIpOwotICAgIH0KLSAgICBlbHNlIGlm
ICgvXGQvLnRlc3QoY2gpKSB7Ci0gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcdy4lXS8pOwotICAg
ICAgcmV0dXJuIHJldCgibnVtYmVyIiwgInVuaXQiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2gg
PT09ICItIikgewotICAgICAgaWYgKC9cZC8udGVzdChzdHJlYW0ucGVlaygpKSkgewotICAgICAg
ICBzdHJlYW0uZWF0V2hpbGUoL1tcdy4lXS8pOwotICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIi
LCAidW5pdCIpOwotICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15bXi1dKy0vKSkgewot
ICAgICAgICByZXR1cm4gcmV0KCJtZXRhIiwgIm1ldGEiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSBpZiAoL1ssKz4qXC9dLy50ZXN0KGNoKSkgewotICAgICAgcmV0dXJuIHJldChudWxsLCAi
c2VsZWN0LW9wIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0
Y2goL14tP1tfYS16XVtfYS16MC05LV0qL2kpKSB7Ci0gICAgICByZXR1cm4gcmV0KCJxdWFsaWZp
ZXIiLCAicXVhbGlmaWVyIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoID09ICI6IikgewotICAg
ICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBjaCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKC9bO3t9
XFtcXVwoXCldLy50ZXN0KGNoKSkgewotICAgICAgcmV0dXJuIHJldChudWxsLCBjaCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGNoID09ICJ1IiAmJiBzdHJlYW0ubWF0Y2goInJsKCIpKSB7Ci0gICAg
ICBzdHJlYW0uYmFja1VwKDEpOwotICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblBhcmVudGhl
c2l6ZWQ7Ci0gICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ2YXJpYWJsZSIpOwotICAgIH0K
LSAgICBlbHNlIHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKLSAgICAgIHJl
dHVybiByZXQoInByb3BlcnR5IiwgInZhcmlhYmxlIik7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rp
b24gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7Ci0gICAgdmFyIG1heWJlRW5kID0gZmFs
c2UsIGNoOwotICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7Ci0gICAg
ICBpZiAobWF5YmVFbmQgJiYgY2ggPT0gIi8iKSB7Ci0gICAgICAgIHN0YXRlLnRva2VuaXplID0g
dG9rZW5CYXNlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIG1heWJlRW5kID0gKGNo
ID09ICIqIik7Ci0gICAgfQotICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwot
ICB9Ci0KLSAgZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7Ci0gICAg
dmFyIGRhc2hlcyA9IDAsIGNoOwotICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBu
dWxsKSB7Ci0gICAgICBpZiAoZGFzaGVzID49IDIgJiYgY2ggPT0gIj4iKSB7Ci0gICAgICAgIHN0
YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAg
IGRhc2hlcyA9IChjaCA9PSAiLSIpID8gZGFzaGVzICsgMSA6IDA7Ci0gICAgfQotICAgIHJldHVy
biByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwotICB9Ci0KLSAgZnVuY3Rpb24gdG9rZW5TdHJp
bmcocXVvdGUsIG5vbkluY2x1c2l2ZSkgewotICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0
YXRlKSB7Ci0gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBjaDsKLSAgICAgIHdoaWxlICgoY2gg
PSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAh
ZXNjYXBlZCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYm
IGNoID09ICJcXCI7Ci0gICAgICB9Ci0gICAgICBpZiAoIWVzY2FwZWQpIHsKLSAgICAgICAgaWYg
KG5vbkluY2x1c2l2ZSkgc3RyZWFtLmJhY2tVcCgxKTsKLSAgICAgICAgc3RhdGUudG9rZW5pemUg
PSB0b2tlbkJhc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5n
Iik7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRva2VuUGFyZW50aGVzaXplZChzdHJlYW0s
IHN0YXRlKSB7Ci0gICAgc3RyZWFtLm5leHQoKTsgLy8gTXVzdCBiZSAnKCcKLSAgICBpZiAoIXN0
cmVhbS5tYXRjaCgvXHMqW1wiXCddLywgZmFsc2UpKQotICAgICAgc3RhdGUudG9rZW5pemUgPSB0
b2tlblN0cmluZygiKSIsIHRydWUpOwotICAgIGVsc2UKLSAgICAgIHN0YXRlLnRva2VuaXplID0g
dG9rZW5CYXNlOwotICAgIHJldHVybiByZXQobnVsbCwgIigiKTsKLSAgfQotCi0gIHJldHVybiB7
Ci0gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewotICAgICAgcmV0dXJuIHt0b2tlbml6
ZTogdG9rZW5CYXNlLAotICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCi0gICAg
ICAgICAgICAgIHN0YWNrOiBbXX07Ci0gICAgfSwKLQotICAgIHRva2VuOiBmdW5jdGlvbihzdHJl
YW0sIHN0YXRlKSB7Ci0gICAgICAKLSAgICAgIC8vIFVzZSB0aGVzZSB0ZXJtcyB3aGVuIGFwcGxp
Y2FibGUgKHNlZSBodHRwOi8vd3d3LnhhbnRoaXIuY29tL2Jsb2cvYjRFNTApCi0gICAgICAvLyAK
LSAgICAgIC8vIHJ1bGUqKiBvciAqKnJ1bGVzZXQ6Ci0gICAgICAvLyBBIHNlbGVjdG9yICsgYnJh
Y2VzIGNvbWJvLCBvciBhbiBhdC1ydWxlLgotICAgICAgLy8gCi0gICAgICAvLyBkZWNsYXJhdGlv
biBibG9jazoKLSAgICAgIC8vIEEgc2VxdWVuY2Ugb2YgZGVjbGFyYXRpb25zLgotICAgICAgLy8g
Ci0gICAgICAvLyBkZWNsYXJhdGlvbjoKLSAgICAgIC8vIEEgcHJvcGVydHkgKyBjb2xvbiArIHZh
bHVlIGNvbWJvLgotICAgICAgLy8gCi0gICAgICAvLyBwcm9wZXJ0eSB2YWx1ZToKLSAgICAgIC8v
IFRoZSBlbnRpcmUgdmFsdWUgb2YgYSBwcm9wZXJ0eS4KLSAgICAgIC8vIAotICAgICAgLy8gY29t
cG9uZW50IHZhbHVlOgotICAgICAgLy8gQSBzaW5nbGUgcGllY2Ugb2YgYSBwcm9wZXJ0eSB2YWx1
ZS4gTGlrZSB0aGUgNXB4IGluCi0gICAgICAvLyB0ZXh0LXNoYWRvdzogMCAwIDVweCBibHVlOy4g
Q2FuIGFsc28gcmVmZXIgdG8gdGhpbmdzIHRoYXQgYXJlCi0gICAgICAvLyBtdWx0aXBsZSB0ZXJt
cywgbGlrZSB0aGUgMS00IHRlcm1zIHRoYXQgbWFrZSB1cCB0aGUgYmFja2dyb3VuZC1zaXplCi0g
ICAgICAvLyBwb3J0aW9uIG9mIHRoZSBiYWNrZ3JvdW5kIHNob3J0aGFuZC4KLSAgICAgIC8vIAot
ICAgICAgLy8gdGVybToKLSAgICAgIC8vIFRoZSBiYXNpYyB1bml0IG9mIGF1dGhvci1mYWNpbmcg
Q1NTLCBsaWtlIGEgc2luZ2xlIG51bWJlciAoNSksCi0gICAgICAvLyBkaW1lbnNpb24gKDVweCks
IHN0cmluZyAoImZvbyIpLCBvciBmdW5jdGlvbi4gT2ZmaWNpYWxseSBkZWZpbmVkCi0gICAgICAv
LyAgYnkgdGhlIENTUyAyLjEgZ3JhbW1hciAobG9vayBmb3IgdGhlICd0ZXJtJyBwcm9kdWN0aW9u
KQotICAgICAgLy8gCi0gICAgICAvLyAKLSAgICAgIC8vIHNpbXBsZSBzZWxlY3RvcjoKLSAgICAg
IC8vIEEgc2luZ2xlIGF0b21pYyBzZWxlY3RvciwgbGlrZSBhIHR5cGUgc2VsZWN0b3IsIGFuIGF0
dHIgc2VsZWN0b3IsIGEKLSAgICAgIC8vIGNsYXNzIHNlbGVjdG9yLCBldGMuCi0gICAgICAvLyAK
LSAgICAgIC8vIGNvbXBvdW5kIHNlbGVjdG9yOgotICAgICAgLy8gT25lIG9yIG1vcmUgc2ltcGxl
IHNlbGVjdG9ycyB3aXRob3V0IGEgY29tYmluYXRvci4gZGl2LmV4YW1wbGUgaXMKLSAgICAgIC8v
IGNvbXBvdW5kLCBkaXYgPiAuZXhhbXBsZSBpcyBub3QuCi0gICAgICAvLyAKLSAgICAgIC8vIGNv
bXBsZXggc2VsZWN0b3I6Ci0gICAgICAvLyBPbmUgb3IgbW9yZSBjb21wb3VuZCBzZWxlY3RvcnMg
Y2hhaW5lZCB3aXRoIGNvbWJpbmF0b3JzLgotICAgICAgLy8gCi0gICAgICAvLyBjb21iaW5hdG9y
OgotICAgICAgLy8gVGhlIHBhcnRzIG9mIHNlbGVjdG9ycyB0aGF0IGV4cHJlc3MgcmVsYXRpb25z
aGlwcy4gVGhlcmUgYXJlIGZvdXIKLSAgICAgIC8vIGN1cnJlbnRseSAtIHRoZSBzcGFjZSAoZGVz
Y2VuZGFudCBjb21iaW5hdG9yKSwgdGhlIGdyZWF0ZXItdGhhbgotICAgICAgLy8gYnJhY2tldCAo
Y2hpbGQgY29tYmluYXRvciksIHRoZSBwbHVzIHNpZ24gKG5leHQgc2libGluZyBjb21iaW5hdG9y
KSwKLSAgICAgIC8vIGFuZCB0aGUgdGlsZGEgKGZvbGxvd2luZyBzaWJsaW5nIGNvbWJpbmF0b3Ip
LgotICAgICAgLy8gCi0gICAgICAvLyBzZXF1ZW5jZSBvZiBzZWxlY3RvcnM6Ci0gICAgICAvLyBP
bmUgb3IgbW9yZSBvZiB0aGUgbmFtZWQgdHlwZSBvZiBzZWxlY3RvciBjaGFpbmVkIHdpdGggY29t
bWFzLgotCi0gICAgICBpZiAoc3RhdGUudG9rZW5pemUgPT0gdG9rZW5CYXNlICYmIHN0cmVhbS5l
YXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKLSAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXpl
KHN0cmVhbSwgc3RhdGUpOwotCi0gICAgICAvLyBDaGFuZ2luZyBzdHlsZSByZXR1cm5lZCBiYXNl
ZCBvbiBjb250ZXh0Ci0gICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNr
Lmxlbmd0aC0xXTsKLSAgICAgIGlmIChzdHlsZSA9PSAicHJvcGVydHkiKSB7Ci0gICAgICAgIGlm
IChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIil7Ci0gICAgICAgICAgaWYgKHZhbHVlS2V5d29y
ZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKLSAgICAgICAgICAgIHN0eWxlID0gInN0cmluZy0yIjsK
LSAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yS2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsK
LSAgICAgICAgICAgIHN0eWxlID0gImtleXdvcmQiOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBzdHlsZSA9ICJ2YXJpYWJsZS0yIjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoY29udGV4dCA9PSAicnVsZSIpIHsKLSAgICAgICAgICBpZiAoIXByb3BlcnR5S2V5d29y
ZHNbc3RyZWFtLmN1cnJlbnQoKV0pIHsKLSAgICAgICAgICAgIHN0eWxlICs9ICIgZXJyb3IiOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJA
bWVkaWF7IikgewotICAgICAgICAgIHN0eWxlID0gInRhZyI7Ci0gICAgICAgIH0gZWxzZSBpZiAo
Y29udGV4dCA9PSAiQG1lZGlhIikgewotICAgICAgICAgIGlmIChhdE1lZGlhVHlwZXNbc3RyZWFt
LmN1cnJlbnQoKV0pIHsKLSAgICAgICAgICAgIHN0eWxlID0gImF0dHJpYnV0ZSI7IC8vIEtub3du
IGF0dHJpYnV0ZQotICAgICAgICAgIH0gZWxzZSBpZiAoL14ob25seXxub3QpJC9pLnRlc3Qoc3Ry
ZWFtLmN1cnJlbnQoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlID0gImtleXdvcmQiOwotICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7
Ci0gICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7IC8vICJhbmQiIGlzIG9ubHkgYWxsb3dlZCBp
biBAbWVkaWFUeXBlCi0gICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXNbc3RyZWFt
LmN1cnJlbnQoKV0pIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24gcHJv
cGVydHksIHNob3VsZCBiZSBpbiBAbWVkaWFUeXBlKAotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBVbmtub3duLCBleHBlY3Rpbmcga2V5d29yZCBvciBhdHRyaWJ1dGUsIGFzc3Vt
aW5nIGF0dHJpYnV0ZQotICAgICAgICAgICAgc3R5bGUgPSAiYXR0cmlidXRlIGVycm9yIjsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSIpIHsK
LSAgICAgICAgICBpZiAoYXRNZWRpYVR5cGVzW3N0cmVhbS5jdXJyZW50KCldKSB7Ci0gICAgICAg
ICAgICBzdHlsZSA9ICJhdHRyaWJ1dGUiOwotICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmN1
cnJlbnQoKS50b0xvd2VyQ2FzZSgpID09ICJhbmQiKSB7Ci0gICAgICAgICAgICBzdHlsZSA9ICJv
cGVyYXRvciI7Ci0gICAgICAgICAgfSBlbHNlIGlmICgvXihvbmx5fG5vdCkkL2kudGVzdChzdHJl
YW0uY3VycmVudCgpKSkgewotICAgICAgICAgICAgc3R5bGUgPSAiZXJyb3IiOyAvLyBPbmx5IGFs
bG93ZWQgaW4gQG1lZGlhCi0gICAgICAgICAgfSBlbHNlIGlmIChhdE1lZGlhRmVhdHVyZXNbc3Ry
ZWFtLmN1cnJlbnQoKV0pIHsKLSAgICAgICAgICAgIHN0eWxlID0gImVycm9yIjsgLy8gS25vd24g
cHJvcGVydHksIHNob3VsZCBiZSBpbiBwYXJlbnRoZXNlcwotICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSwgYnV0IGV4cGVjdGlu
ZyBwcm9wZXJ0eSAocHJlY2VkZWQKLSAgICAgICAgICAgIC8vIGJ5ICJhbmQiKS4gU2hvdWxkIGJl
IGluIHBhcmVudGhlc2VzCi0gICAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7Ci0gICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUoIikgewotICAgICAg
ICAgIGlmIChwcm9wZXJ0eUtleXdvcmRzW3N0cmVhbS5jdXJyZW50KCldKSB7Ci0gICAgICAgICAg
ICAvLyBkbyBub3RoaW5nLCByZW1haW5zICJwcm9wZXJ0eSIKLSAgICAgICAgICB9IGVsc2UgaWYg
KGF0TWVkaWFUeXBlc1tzdHJlYW0uY3VycmVudCgpXSkgewotICAgICAgICAgICAgc3R5bGUgPSAi
ZXJyb3IiOyAvLyBLbm93biBwcm9wZXJ0eSwgc2hvdWxkIGJlIGluIHBhcmVudGhlc2VzCi0gICAg
ICAgICAgfSBlbHNlIGlmIChzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkgPT0gImFuZCIp
IHsKLSAgICAgICAgICAgIHN0eWxlID0gIm9wZXJhdG9yIjsKLSAgICAgICAgICB9IGVsc2UgaWYg
KC9eKG9ubHl8bm90KSQvaS50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7Ci0gICAgICAgICAgICBz
dHlsZSA9ICJlcnJvciI7IC8vIE9ubHkgYWxsb3dlZCBpbiBAbWVkaWEKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgc3R5bGUgKz0gIiBlcnJvciI7Ci0gICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIHN0eWxlID0gImVycm9yIjsKLSAgICAgICAgfQotICAgICAg
fSBlbHNlIGlmIChzdHlsZSA9PSAiYXRvbSIpIHsKLSAgICAgICAgaWYoIWNvbnRleHQgfHwgY29u
dGV4dCA9PSAiQG1lZGlheyIpIHsKLSAgICAgICAgICBzdHlsZSA9ICJidWlsdGluIjsKLSAgICAg
ICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIikgewotICAgICAgICAgIGlm
ICghL14jKFswLTlhLWZBLWZdezN9fFswLTlhLWZBLWZdezZ9KSQvLnRlc3Qoc3RyZWFtLmN1cnJl
bnQoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlICs9ICIgZXJyb3IiOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdHlsZSA9ICJlcnJvciI7Ci0gICAgICAgIH0KLSAg
ICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhIiAmJiB0eXBlID09ICJ7IikgewotICAg
ICAgICBzdHlsZSA9ICJlcnJvciI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFB1c2gvcG9wIGNvbnRl
eHQgc3RhY2sKLSAgICAgIGlmICh0eXBlID09ICJ7IikgewotICAgICAgICBpZiAoY29udGV4dCA9
PSAiQG1lZGlhIiB8fCBjb250ZXh0ID09ICJAbWVkaWFUeXBlIikgewotICAgICAgICAgIHN0YXRl
LnN0YWNrLnBvcCgpOwotICAgICAgICAgIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0x
XSA9ICJAbWVkaWF7IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHN0YXRlLnN0YWNrLnB1c2go
InJ1bGUiKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIn0iKSB7Ci0gICAgICAg
IHN0YXRlLnN0YWNrLnBvcCgpOwotICAgICAgICBpZiAoY29udGV4dCA9PSAicHJvcGVydHlWYWx1
ZSIpIHN0YXRlLnN0YWNrLnBvcCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAodHlwZSA9PSAi
QG1lZGlhIikgc3RhdGUuc3RhY2sucHVzaCgiQG1lZGlhIik7Ci0gICAgICBlbHNlIGlmIChjb250
ZXh0ID09ICJAbWVkaWEiICYmIC9cYihrZXl3b3JkfGF0dHJpYnV0ZSlcYi8udGVzdChzdHlsZSkp
Ci0gICAgICAgIHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYVR5cGUiKTsKLSAgICAgIGVsc2UgaWYg
KGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiICYmIHN0cmVhbS5jdXJyZW50KCkgPT0gIiwiKSBzdGF0
ZS5zdGFjay5wb3AoKTsKLSAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gIkBtZWRpYVR5cGUiICYm
IHR5cGUgPT0gIigiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWFUeXBlKCIpOwotICAgICAgZWxz
ZSBpZiAoY29udGV4dCA9PSAiQG1lZGlhVHlwZSgiICYmIHR5cGUgPT0gIikiKSBzdGF0ZS5zdGFj
ay5wb3AoKTsKLSAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gInJ1bGUiICYmIHR5cGUgPT0gIjoi
KSBzdGF0ZS5zdGFjay5wdXNoKCJwcm9wZXJ0eVZhbHVlIik7Ci0gICAgICBlbHNlIGlmIChjb250
ZXh0ID09ICJwcm9wZXJ0eVZhbHVlIiAmJiB0eXBlID09ICI7Iikgc3RhdGUuc3RhY2sucG9wKCk7
Ci0gICAgICByZXR1cm4gc3R5bGU7Ci0gICAgfSwKLQotICAgIGluZGVudDogZnVuY3Rpb24oc3Rh
dGUsIHRleHRBZnRlcikgewotICAgICAgdmFyIG4gPSBzdGF0ZS5zdGFjay5sZW5ndGg7Ci0gICAg
ICBpZiAoL15cfS8udGVzdCh0ZXh0QWZ0ZXIpKQotICAgICAgICBuIC09IHN0YXRlLnN0YWNrW3N0
YXRlLnN0YWNrLmxlbmd0aC0xXSA9PSAicHJvcGVydHlWYWx1ZSIgPyAyIDogMTsKLSAgICAgIHJl
dHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7Ci0gICAgfSwKLQotICAgIGVs
ZWN0cmljQ2hhcnM6ICJ9IgotICB9OwotfSk7Ci0KLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4
dC9jc3MiLCAiY3NzIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2NtL2h0bWxtaXhlZC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvY20vaHRtbG1peGVkLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmRkMDFk
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vaHRt
bG1peGVkLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcpIHsKLSAgdmFyIGh0bWxNb2RlID0g
Q29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX0p
OwotICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImphdmFzY3JpcHQi
KTsKLSAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiY3NzIik7Ci0K
LSAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7Ci0gICAgdmFyIHN0eWxlID0gaHRtbE1v
ZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwotICAgIGlmICgvKD86Xnxccyl0YWco
Pzpcc3wkKS8udGVzdChzdHlsZSkgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUu
aHRtbFN0YXRlLmNvbnRleHQpIHsKLSAgICAgIGlmICgvXnNjcmlwdCQvaS50ZXN0KHN0YXRlLmh0
bWxTdGF0ZS5jb250ZXh0LnRhZ05hbWUpKSB7Ci0gICAgICAgIHN0YXRlLnRva2VuID0gamF2YXNj
cmlwdDsKLSAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxN
b2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
ICgvXnN0eWxlJC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKLSAg
ICAgICAgc3RhdGUudG9rZW4gPSBjc3M7Ci0gICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBjc3NN
b2RlLnN0YXJ0U3RhdGUoaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgIiIpKTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0gIGZ1bmN0aW9uIG1heWJlQmFj
a3VwKHN0cmVhbSwgcGF0LCBzdHlsZSkgewotICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgp
OwotICAgIHZhciBjbG9zZSA9IGN1ci5zZWFyY2gocGF0KSwgbTsKLSAgICBpZiAoY2xvc2UgPiAt
MSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xvc2UpOwotICAgIGVsc2UgaWYgKG0gPSBj
dXIubWF0Y2goLzxcLz8kLykpIHsKLSAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCk7Ci0g
ICAgICBpZiAoIXN0cmVhbS5tYXRjaChwYXQsIGZhbHNlKSkgc3RyZWFtLm1hdGNoKGN1clswXSk7
Ci0gICAgfQotICAgIHJldHVybiBzdHlsZTsKLSAgfQotICBmdW5jdGlvbiBqYXZhc2NyaXB0KHN0
cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFwvXHMqc2NyaXB0XHMqPi9p
LCBmYWxzZSkpIHsKLSAgICAgIHN0YXRlLnRva2VuID0gaHRtbDsKLSAgICAgIHN0YXRlLmxvY2Fs
U3RhdGUgPSBudWxsOwotICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7Ci0gICAgfQot
ICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzY3JpcHRccyo+LywKLSAgICAg
ICAgICAgICAgICAgICAgICAganNNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkp
OwotICB9Ci0gIGZ1bmN0aW9uIGNzcyhzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHN0cmVhbS5t
YXRjaCgvXjxcL1xzKnN0eWxlXHMqPi9pLCBmYWxzZSkpIHsKLSAgICAgIHN0YXRlLnRva2VuID0g
aHRtbDsKLSAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwotICAgICAgcmV0dXJuIGh0bWwo
c3RyZWFtLCBzdGF0ZSk7Ci0gICAgfQotICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88
XC9ccypzdHlsZVxzKj4vLAotICAgICAgICAgICAgICAgICAgICAgICBjc3NNb2RlLnRva2VuKHN0
cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwotICB9Ci0KLSAgcmV0dXJuIHsKLSAgICBzdGFydFN0
YXRlOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBzdGF0ZSA9IGh0bWxNb2RlLnN0YXJ0U3RhdGUo
KTsKLSAgICAgIHJldHVybiB7dG9rZW46IGh0bWwsIGxvY2FsU3RhdGU6IG51bGwsIG1vZGU6ICJo
dG1sIiwgaHRtbFN0YXRlOiBzdGF0ZX07Ci0gICAgfSwKLQotICAgIGNvcHlTdGF0ZTogZnVuY3Rp
b24oc3RhdGUpIHsKLSAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlKQotICAgICAgICB2YXIgbG9j
YWwgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS50b2tlbiA9PSBjc3MgPyBjc3NNb2RlIDog
anNNb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKTsKLSAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRv
a2VuLCBsb2NhbFN0YXRlOiBsb2NhbCwgbW9kZTogc3RhdGUubW9kZSwKLSAgICAgICAgICAgICAg
aHRtbFN0YXRlOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgc3RhdGUuaHRtbFN0YXRl
KX07Ci0gICAgfSwKLQotICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAg
ICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7Ci0gICAgfSwKLQotICAgIGluZGVu
dDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewotICAgICAgaWYgKHN0YXRlLnRva2VuID09
IGh0bWwgfHwgL15ccyo8XC8vLnRlc3QodGV4dEFmdGVyKSkKLSAgICAgICAgcmV0dXJuIGh0bWxN
b2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsIHRleHRBZnRlcik7Ci0gICAgICBlbHNlIGlmIChz
dGF0ZS50b2tlbiA9PSBqYXZhc2NyaXB0KQotICAgICAgICByZXR1cm4ganNNb2RlLmluZGVudChz
dGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4g
Y3NzTW9kZS5pbmRlbnQoc3RhdGUubG9jYWxTdGF0ZSwgdGV4dEFmdGVyKTsKLSAgICB9LAotCi0g
ICAgZWxlY3RyaWNDaGFyczogIi97fToiLAotCi0gICAgaW5uZXJNb2RlOiBmdW5jdGlvbihzdGF0
ZSkgewotICAgICAgdmFyIG1vZGUgPSBzdGF0ZS50b2tlbiA9PSBodG1sID8gaHRtbE1vZGUgOiBz
dGF0ZS50b2tlbiA9PSBqYXZhc2NyaXB0ID8ganNNb2RlIDogY3NzTW9kZTsKLSAgICAgIHJldHVy
biB7c3RhdGU6IHN0YXRlLmxvY2FsU3RhdGUgfHwgc3RhdGUuaHRtbFN0YXRlLCBtb2RlOiBtb2Rl
fTsKLSAgICB9Ci0gIH07Ci19LCAieG1sIiwgImphdmFzY3JpcHQiLCAiY3NzIik7Ci0KLUNvZGVN
aXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwgImh0bWxtaXhlZCIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9qYXZhc2NyaXB0LmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9qYXZhc2NyaXB0LmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjZkMjIzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vamF2YXNjcmlwdC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDQxOSArMCwwIEBACi0vLyBUT0RPIGFjdHVhbGx5IHJlY29nbml6ZSBzeW50YXggb2YgVHlw
ZVNjcmlwdCBjb25zdHJ1Y3RzCi0KLUNvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7Ci0gIHZhciBpbmRlbnRVbml0ID0gY29u
ZmlnLmluZGVudFVuaXQ7Ci0gIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwotICB2
YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0OwotCi0gIC8vIFRva2VuaXplcgotCi0g
IHZhciBrZXl3b3JkcyA9IGZ1bmN0aW9uKCl7Ci0gICAgZnVuY3Rpb24ga3codHlwZSkge3JldHVy
biB7dHlwZTogdHlwZSwgc3R5bGU6ICJrZXl3b3JkIn07fQotICAgIHZhciBBID0ga3coImtleXdv
cmQgYSIpLCBCID0ga3coImtleXdvcmQgYiIpLCBDID0ga3coImtleXdvcmQgYyIpOwotICAgIHZh
ciBvcGVyYXRvciA9IGt3KCJvcGVyYXRvciIpLCBhdG9tID0ge3R5cGU6ICJhdG9tIiwgc3R5bGU6
ICJhdG9tIn07Ci0gICAgCi0gICAgdmFyIGpzS2V5d29yZHMgPSB7Ci0gICAgICAiaWYiOiBBLCAi
d2hpbGUiOiBBLCAid2l0aCI6IEEsICJlbHNlIjogQiwgImRvIjogQiwgInRyeSI6IEIsICJmaW5h
bGx5IjogQiwKLSAgICAgICJyZXR1cm4iOiBDLCAiYnJlYWsiOiBDLCAiY29udGludWUiOiBDLCAi
bmV3IjogQywgImRlbGV0ZSI6IEMsICJ0aHJvdyI6IEMsCi0gICAgICAidmFyIjoga3coInZhciIp
LCAiY29uc3QiOiBrdygidmFyIiksICJsZXQiOiBrdygidmFyIiksCi0gICAgICAiZnVuY3Rpb24i
OiBrdygiZnVuY3Rpb24iKSwgImNhdGNoIjoga3coImNhdGNoIiksCi0gICAgICAiZm9yIjoga3co
ImZvciIpLCAic3dpdGNoIjoga3coInN3aXRjaCIpLCAiY2FzZSI6IGt3KCJjYXNlIiksICJkZWZh
dWx0Ijoga3coImRlZmF1bHQiKSwKLSAgICAgICJpbiI6IG9wZXJhdG9yLCAidHlwZW9mIjogb3Bl
cmF0b3IsICJpbnN0YW5jZW9mIjogb3BlcmF0b3IsCi0gICAgICAidHJ1ZSI6IGF0b20sICJmYWxz
ZSI6IGF0b20sICJudWxsIjogYXRvbSwgInVuZGVmaW5lZCI6IGF0b20sICJOYU4iOiBhdG9tLCAi
SW5maW5pdHkiOiBhdG9tCi0gICAgfTsKLQotICAgIC8vIEV4dGVuZCB0aGUgJ25vcm1hbCcga2V5
d29yZHMgd2l0aCB0aGUgVHlwZVNjcmlwdCBsYW5ndWFnZSBleHRlbnNpb25zCi0gICAgaWYgKGlz
VFMpIHsKLSAgICAgIHZhciB0eXBlID0ge3R5cGU6ICJ2YXJpYWJsZSIsIHN0eWxlOiAidmFyaWFi
bGUtMyJ9OwotICAgICAgdmFyIHRzS2V5d29yZHMgPSB7Ci0gICAgICAgIC8vIG9iamVjdC1saWtl
IHRoaW5ncwotICAgICAgICAiaW50ZXJmYWNlIjoga3coImludGVyZmFjZSIpLAotICAgICAgICAi
Y2xhc3MiOiBrdygiY2xhc3MiKSwKLSAgICAgICAgImV4dGVuZHMiOiBrdygiZXh0ZW5kcyIpLAot
ICAgICAgICAiY29uc3RydWN0b3IiOiBrdygiY29uc3RydWN0b3IiKSwKLQotICAgICAgICAvLyBz
Y29wZSBtb2RpZmllcnMKLSAgICAgICAgInB1YmxpYyI6IGt3KCJwdWJsaWMiKSwKLSAgICAgICAg
InByaXZhdGUiOiBrdygicHJpdmF0ZSIpLAotICAgICAgICAicHJvdGVjdGVkIjoga3coInByb3Rl
Y3RlZCIpLAotICAgICAgICAic3RhdGljIjoga3coInN0YXRpYyIpLAotCi0gICAgICAgICJzdXBl
ciI6IGt3KCJzdXBlciIpLAotCi0gICAgICAgIC8vIHR5cGVzCi0gICAgICAgICJzdHJpbmciOiB0
eXBlLCAibnVtYmVyIjogdHlwZSwgImJvb2wiOiB0eXBlLCAiYW55IjogdHlwZQotICAgICAgfTsK
LQotICAgICAgZm9yICh2YXIgYXR0ciBpbiB0c0tleXdvcmRzKSB7Ci0gICAgICAgIGpzS2V5d29y
ZHNbYXR0cl0gPSB0c0tleXdvcmRzW2F0dHJdOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBqc0tleXdvcmRzOwotICB9KCk7Ci0KLSAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9
PD4hP3xdLzsKLQotICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7Ci0gICAgc3Rh
dGUudG9rZW5pemUgPSBmOwotICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgZW5kKSB7Ci0gICAgdmFyIGVzY2Fw
ZWQgPSBmYWxzZSwgbmV4dDsKLSAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBu
dWxsKSB7Ci0gICAgICBpZiAobmV4dCA9PSBlbmQgJiYgIWVzY2FwZWQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7Ci0gICAg
fQotICAgIHJldHVybiBlc2NhcGVkOwotICB9Ci0KLSAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlh
YmxlcyB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dAotICAvLyBjb25zaW5n
IHVwIHRvbnMgb2Ygb2JqZWN0cy4KLSAgdmFyIHR5cGUsIGNvbnRlbnQ7Ci0gIGZ1bmN0aW9uIHJl
dCh0cCwgc3R5bGUsIGNvbnQpIHsKLSAgICB0eXBlID0gdHA7IGNvbnRlbnQgPSBjb250OwotICAg
IHJldHVybiBzdHlsZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGpzVG9rZW5CYXNlKHN0cmVhbSwgc3Rh
dGUpIHsKLSAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwotICAgIGlmIChjaCA9PSAnIicgfHwg
Y2ggPT0gIiciKQotICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIGpzVG9rZW5TdHJp
bmcoY2gpKTsKLSAgICBlbHNlIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkKLSAg
ICAgIHJldHVybiByZXQoY2gpOwotICAgIGVsc2UgaWYgKGNoID09ICIwIiAmJiBzdHJlYW0uZWF0
KC94L2kpKSB7Ci0gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZl0vaSk7Ci0gICAgICByZXR1
cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7Ci0gICAgfSAgICAgIAotICAgIGVsc2UgaWYgKC9c
ZC8udGVzdChjaCkgfHwgY2ggPT0gIi0iICYmIHN0cmVhbS5lYXQoL1xkLykpIHsKLSAgICAgIHN0
cmVhbS5tYXRjaCgvXlxkKig/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vKTsKLSAgICAgIHJl
dHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2ggPT0g
Ii8iKSB7Ci0gICAgICBpZiAoc3RyZWFtLmVhdCgiKiIpKSB7Ci0gICAgICAgIHJldHVybiBjaGFp
bihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuQ29tbWVudCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChzdHJlYW0uZWF0KCIvIikpIHsKLSAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwotICAgICAg
ICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKLSAgICAgIH0KLSAgICAgIGVsc2Ug
aWYgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gImtl
eXdvcmQgYyIgfHwKLSAgICAgICAgICAgICAgIC9eW1xbe31cKCw7Ol0kLy50ZXN0KHN0YXRlLmxh
c3RUeXBlKSkgewotICAgICAgICBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCAiLyIpOwotICAg
ICAgICBzdHJlYW0uZWF0V2hpbGUoL1tnaW15XS8pOyAvLyAneScgaXMgInN0aWNreSIgb3B0aW9u
IGluIE1vemlsbGEKLSAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgInN0cmluZy0yIik7Ci0g
ICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JD
aGFyKTsKLSAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVu
dCgpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7Ci0gICAgICAg
IHN0cmVhbS5za2lwVG9FbmQoKTsKLSAgICAgICAgcmV0dXJuIHJldCgiZXJyb3IiLCAiZXJyb3Ii
KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsKLSAgICAg
IHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7Ci0gICAgICByZXR1cm4gcmV0KCJvcGVy
YXRvciIsIG51bGwsIHN0cmVhbS5jdXJyZW50KCkpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAg
IHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwotICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3Vy
cmVudCgpLCBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtl
eXdvcmRzW3dvcmRdOwotICAgICAgcmV0dXJuIChrbm93biAmJiBzdGF0ZS5sYXN0VHlwZSAhPSAi
LiIpID8gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKSA6Ci0gICAgICAgICAgICAg
ICAgICAgICByZXQoInZhcmlhYmxlIiwgInZhcmlhYmxlIiwgd29yZCk7Ci0gICAgfQotICB9Ci0K
LSAgZnVuY3Rpb24ganNUb2tlblN0cmluZyhxdW90ZSkgewotICAgIHJldHVybiBmdW5jdGlvbihz
dHJlYW0sIHN0YXRlKSB7Ci0gICAgICBpZiAoIW5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sIHF1
b3RlKSkKLSAgICAgICAgc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKLSAgICAgIHJldHVy
biByZXQoInN0cmluZyIsICJzdHJpbmciKTsKLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24ganNU
b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewotICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBj
aDsKLSAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7Ci0gICAgICBpZiAoY2ggPT0gIi8i
ICYmIG1heWJlRW5kKSB7Ci0gICAgICAgIHN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7Ci0gIH0KLQotICAvLyBQ
YXJzZXIKLQotICB2YXIgYXRvbWljVHlwZXMgPSB7ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1
ZSwgInZhcmlhYmxlIjogdHJ1ZSwgInN0cmluZyI6IHRydWUsICJyZWdleHAiOiB0cnVlfTsKLQot
ICBmdW5jdGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYs
IGluZm8pIHsKLSAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7Ci0gICAgdGhpcy5jb2x1bW4g
PSBjb2x1bW47Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0aGlzLnByZXYgPSBwcmV2Owot
ICAgIHRoaXMuaW5mbyA9IGluZm87Ci0gICAgaWYgKGFsaWduICE9IG51bGwpIHRoaXMuYWxpZ24g
PSBhbGlnbjsKLSAgfQotCi0gIGZ1bmN0aW9uIGluU2NvcGUoc3RhdGUsIHZhcm5hbWUpIHsKLSAg
ICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KQotICAgICAgaWYg
KHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBhcnNl
SlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pIHsKLSAgICB2YXIgY2MgPSBz
dGF0ZS5jYzsKLSAgICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRv
cnMuCi0gICAgLy8gKExlc3Mgd2FzdGVmdWwgdGhhbiBjb25zaW5nIHVwIGEgaHVuZHJlZCBjbG9z
dXJlcyBvbiBldmVyeSBjYWxsLikKLSAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBz
dHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7Ci0gIAotICAgIGlmICghc3RhdGUu
bGV4aWNhbC5oYXNPd25Qcm9wZXJ0eSgiYWxpZ24iKSkKLSAgICAgIHN0YXRlLmxleGljYWwuYWxp
Z24gPSB0cnVlOwotCi0gICAgd2hpbGUodHJ1ZSkgewotICAgICAgdmFyIGNvbWJpbmF0b3IgPSBj
Yy5sZW5ndGggPyBjYy5wb3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDsK
LSAgICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7Ci0gICAgICAgIHdoaWxlKGNj
Lmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpCi0gICAgICAgICAgY2MucG9wKCkoKTsK
LSAgICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDsKLSAgICAgICAgaWYgKHR5
cGUgPT0gInZhcmlhYmxlIiAmJiBpblNjb3BlKHN0YXRlLCBjb250ZW50KSkgcmV0dXJuICJ2YXJp
YWJsZS0yIjsKLSAgICAgICAgcmV0dXJuIHN0eWxlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IC8vIENvbWJpbmF0b3IgdXRpbHMKLQotICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjog
bnVsbCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07Ci0gIGZ1bmN0aW9uIHBhc3MoKSB7Ci0gICAg
Zm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVz
aChhcmd1bWVudHNbaV0pOwotICB9Ci0gIGZ1bmN0aW9uIGNvbnQoKSB7Ci0gICAgcGFzcy5hcHBs
eShudWxsLCBhcmd1bWVudHMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIHJl
Z2lzdGVyKHZhcm5hbWUpIHsKLSAgICBmdW5jdGlvbiBpbkxpc3QobGlzdCkgewotICAgICAgZm9y
ICh2YXIgdiA9IGxpc3Q7IHY7IHYgPSB2Lm5leHQpCi0gICAgICAgIGlmICh2Lm5hbWUgPT0gdmFy
bmFtZSkgcmV0dXJuIHRydWU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZhciBz
dGF0ZSA9IGN4LnN0YXRlOwotICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7Ci0gICAgICBjeC5tYXJr
ZWQgPSAiZGVmIjsKLSAgICAgIGlmIChpbkxpc3Qoc3RhdGUubG9jYWxWYXJzKSkgcmV0dXJuOwot
ICAgICAgc3RhdGUubG9jYWxWYXJzID0ge25hbWU6IHZhcm5hbWUsIG5leHQ6IHN0YXRlLmxvY2Fs
VmFyc307Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChpbkxpc3Qoc3RhdGUuZ2xvYmFsVmFycykp
IHJldHVybjsKLSAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSB7bmFtZTogdmFybmFtZSwgbmV4dDog
c3RhdGUuZ2xvYmFsVmFyc307Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29tYmluYXRvcnMKLQotICB2
YXIgZGVmYXVsdFZhcnMgPSB7bmFtZTogInRoaXMiLCBuZXh0OiB7bmFtZTogImFyZ3VtZW50cyJ9
fTsKLSAgZnVuY3Rpb24gcHVzaGNvbnRleHQoKSB7Ci0gICAgY3guc3RhdGUuY29udGV4dCA9IHtw
cmV2OiBjeC5zdGF0ZS5jb250ZXh0LCB2YXJzOiBjeC5zdGF0ZS5sb2NhbFZhcnN9OwotICAgIGN4
LnN0YXRlLmxvY2FsVmFycyA9IGRlZmF1bHRWYXJzOwotICB9Ci0gIGZ1bmN0aW9uIHBvcGNvbnRl
eHQoKSB7Ci0gICAgY3guc3RhdGUubG9jYWxWYXJzID0gY3guc3RhdGUuY29udGV4dC52YXJzOwot
ICAgIGN4LnN0YXRlLmNvbnRleHQgPSBjeC5zdGF0ZS5jb250ZXh0LnByZXY7Ci0gIH0KLSAgZnVu
Y3Rpb24gcHVzaGxleCh0eXBlLCBpbmZvKSB7Ci0gICAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkg
ewotICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7Ci0gICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3
IEpTTGV4aWNhbChzdGF0ZS5pbmRlbnRlZCwgY3guc3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxs
LCBzdGF0ZS5sZXhpY2FsLCBpbmZvKTsKLSAgICB9OwotICAgIHJlc3VsdC5sZXggPSB0cnVlOwot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgZnVuY3Rpb24gcG9wbGV4KCkgewotICAgIHZhciBz
dGF0ZSA9IGN4LnN0YXRlOwotICAgIGlmIChzdGF0ZS5sZXhpY2FsLnByZXYpIHsKLSAgICAgIGlm
IChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gIikiKQotICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0
YXRlLmxleGljYWwuaW5kZW50ZWQ7Ci0gICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNh
bC5wcmV2OwotICAgIH0KLSAgfQotICBwb3BsZXgubGV4ID0gdHJ1ZTsKLQotICBmdW5jdGlvbiBl
eHBlY3Qod2FudGVkKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uIGV4cGVjdGluZyh0eXBlKSB7Ci0g
ICAgICBpZiAodHlwZSA9PSB3YW50ZWQpIHJldHVybiBjb250KCk7Ci0gICAgICBlbHNlIGlmICh3
YW50ZWQgPT0gIjsiKSByZXR1cm4gcGFzcygpOwotICAgICAgZWxzZSByZXR1cm4gY29udChhcmd1
bWVudHMuY2FsbGVlKTsKLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gc3RhdGVtZW50KHR5cGUp
IHsKLSAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQocHVzaGxleCgidmFyZGVmIiks
IHZhcmRlZjEsIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwotICAgIGlmICh0eXBlID09ICJrZXl3b3Jk
IGEiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHN0YXRlbWVudCwg
cG9wbGV4KTsKLSAgICBpZiAodHlwZSA9PSAia2V5d29yZCBiIikgcmV0dXJuIGNvbnQocHVzaGxl
eCgiZm9ybSIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1
cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwotICAgIGlmICh0eXBlID09ICI7
IikgcmV0dXJuIGNvbnQoKTsKLSAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29u
dChmdW5jdGlvbmRlZik7Ci0gICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KHB1c2hs
ZXgoImZvcm0iKSwgZXhwZWN0KCIoIiksIHB1c2hsZXgoIikiKSwgZm9yc3BlYzEsIGV4cGVjdCgi
KSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BsZXgsIHN0YXRl
bWVudCwgcG9wbGV4KTsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZXR1cm4gY29udChw
dXNobGV4KCJzdGF0IiksIG1heWJlbGFiZWwpOwotICAgIGlmICh0eXBlID09ICJzd2l0Y2giKSBy
ZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHB1c2hsZXgoIn0iLCAic3dp
dGNoIiksIGV4cGVjdCgieyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwotICAgIGlmICh0eXBlID09ICJjYXNlIikgcmV0
dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6IikpOwotICAgIGlmICh0eXBlID09ICJkZWZh
dWx0IikgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IikpOwotICAgIGlmICh0eXBlID09ICJjYXRjaCIp
IHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgcHVzaGNvbnRleHQsIGV4cGVjdCgiKCIpLCBm
dW5hcmcsIGV4cGVjdCgiKSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250ZXh0KTsKLSAgICByZXR1cm4gcGFzcyhwdXNo
bGV4KCJzdGF0IiksIGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwotICB9Ci0gIGZ1
bmN0aW9uIGV4cHJlc3Npb24odHlwZSkgewotICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9w
ZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7Ci0gICAgaWYgKHR5cGUgPT0g
ImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwotICAgIGlmICh0eXBlID09ICJr
ZXl3b3JkIGMiKSByZXR1cm4gY29udChtYXliZWV4cHJlc3Npb24pOwotICAgIGlmICh0eXBlID09
ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdCgi
KSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwotICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIp
IHJldHVybiBjb250KGV4cHJlc3Npb24pOwotICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNv
bnQocHVzaGxleCgiXSIpLCBjb21tYXNlcChleHByZXNzaW9uLCAiXSIpLCBwb3BsZXgsIG1heWJl
b3BlcmF0b3IpOwotICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIp
LCBjb21tYXNlcChvYmpwcm9wLCAifSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwotICAgIHJl
dHVybiBjb250KCk7Ci0gIH0KLSAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHsKLSAg
ICBpZiAodHlwZS5tYXRjaCgvWztcfVwpXF0sXS8pKSByZXR1cm4gcGFzcygpOwotICAgIHJldHVy
biBwYXNzKGV4cHJlc3Npb24pOwotICB9Ci0gICAgCi0gIGZ1bmN0aW9uIG1heWJlb3BlcmF0b3Io
dHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiICYmIC9cK1wrfC0tLy50
ZXN0KHZhbHVlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7Ci0gICAgaWYgKHR5cGUgPT0g
Im9wZXJhdG9yIiAmJiB2YWx1ZSA9PSAiPyIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVj
dCgiOiIpLCBleHByZXNzaW9uKTsKLSAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybjsKLSAgICBp
ZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgY29tbWFzZXAoZXhwcmVz
c2lvbiwgIikiKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKLSAgICBpZiAodHlwZSA9PSAiLiIp
IHJldHVybiBjb250KHByb3BlcnR5LCBtYXliZW9wZXJhdG9yKTsKLSAgICBpZiAodHlwZSA9PSAi
WyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBv
cGxleCwgbWF5YmVvcGVyYXRvcik7Ci0gIH0KLSAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0eXBlKSB7
Ci0gICAgaWYgKHR5cGUgPT0gIjoiKSByZXR1cm4gY29udChwb3BsZXgsIHN0YXRlbWVudCk7Ci0g
ICAgcmV0dXJuIHBhc3MobWF5YmVvcGVyYXRvciwgZXhwZWN0KCI7IiksIHBvcGxleCk7Ci0gIH0K
LSAgZnVuY3Rpb24gcHJvcGVydHkodHlwZSkgewotICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIp
IHtjeC5tYXJrZWQgPSAicHJvcGVydHkiOyByZXR1cm4gY29udCgpO30KLSAgfQotICBmdW5jdGlv
biBvYmpwcm9wKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSBjeC5tYXJrZWQg
PSAicHJvcGVydHkiOwotICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkg
cmV0dXJuIGNvbnQoZXhwZWN0KCI6IiksIGV4cHJlc3Npb24pOwotICB9Ci0gIGZ1bmN0aW9uIGNv
bW1hc2VwKHdoYXQsIGVuZCkgewotICAgIGZ1bmN0aW9uIHByb2NlZWQodHlwZSkgewotICAgICAg
aWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udCh3aGF0LCBwcm9jZWVkKTsKLSAgICAgIGlmICh0
eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIHJldHVybiBjb250KGV4cGVjdChlbmQp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbW1hU2VwYXJhdGVkKHR5cGUpIHsKLSAg
ICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIGVsc2UgcmV0dXJuIHBh
c3Mod2hhdCwgcHJvY2VlZCk7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBibG9jayh0eXBlKSB7
Ci0gICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwotICAgIHJldHVybiBwYXNzKHN0
YXRlbWVudCwgYmxvY2spOwotICB9Ci0gIGZ1bmN0aW9uIG1heWJldHlwZSh0eXBlKSB7Ci0gICAg
aWYgKHR5cGUgPT0gIjoiKSByZXR1cm4gY29udCh0eXBlZGVmKTsKLSAgICByZXR1cm4gcGFzcygp
OwotICB9Ci0gIGZ1bmN0aW9uIHR5cGVkZWYodHlwZSkgewotICAgIGlmICh0eXBlID09ICJ2YXJp
YWJsZSIpe2N4Lm1hcmtlZCA9ICJ2YXJpYWJsZS0zIjsgcmV0dXJuIGNvbnQoKTt9Ci0gICAgcmV0
dXJuIHBhc3MoKTsKLSAgfQotICBmdW5jdGlvbiB2YXJkZWYxKHR5cGUsIHZhbHVlKSB7Ci0gICAg
aWYgKHR5cGUgPT0gInZhcmlhYmxlIikgewotICAgICAgcmVnaXN0ZXIodmFsdWUpOwotICAgICAg
cmV0dXJuIGlzVFMgPyBjb250KG1heWJldHlwZSwgdmFyZGVmMikgOiBjb250KHZhcmRlZjIpOwot
ICAgIH0KLSAgICByZXR1cm4gcGFzcygpOwotICB9Ci0gIGZ1bmN0aW9uIHZhcmRlZjIodHlwZSwg
dmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0gIj0iKSByZXR1cm4gY29udChleHByZXNzaW9uLCB2
YXJkZWYyKTsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRlZjEpOwotICB9
Ci0gIGZ1bmN0aW9uIGZvcnNwZWMxKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0
dXJuIGNvbnQodmFyZGVmMSwgZXhwZWN0KCI7IiksIGZvcnNwZWMyKTsKLSAgICBpZiAodHlwZSA9
PSAiOyIpIHJldHVybiBjb250KGZvcnNwZWMyKTsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUi
KSByZXR1cm4gY29udChmb3JtYXliZWluKTsKLSAgICByZXR1cm4gY29udChmb3JzcGVjMik7Ci0g
IH0KLSAgZnVuY3Rpb24gZm9ybWF5YmVpbihfdHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodmFsdWUg
PT0gImluIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7Ci0gICAgcmV0dXJuIGNvbnQobWF5YmVv
cGVyYXRvciwgZm9yc3BlYzIpOwotICB9Ci0gIGZ1bmN0aW9uIGZvcnNwZWMyKHR5cGUsIHZhbHVl
KSB7Ci0gICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udChmb3JzcGVjMyk7Ci0gICAgaWYg
KHZhbHVlID09ICJpbiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwotICAgIHJldHVybiBjb250
KGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBmb3JzcGVjMyk7Ci0gIH0KLSAgZnVuY3Rpb24gZm9y
c3BlYzModHlwZSkgewotICAgIGlmICh0eXBlICE9ICIpIikgY29udChleHByZXNzaW9uKTsKLSAg
fQotICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09
ICJ2YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9
Ci0gICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIHB1c2hjb250
ZXh0LCBjb21tYXNlcChmdW5hcmcsICIpIiksIHBvcGxleCwgc3RhdGVtZW50LCBwb3Bjb250ZXh0
KTsKLSAgfQotICBmdW5jdGlvbiBmdW5hcmcodHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9
PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gaXNUUyA/IGNvbnQobWF5YmV0
eXBlKSA6IGNvbnQoKTt9Ci0gIH0KLQotICAvLyBJbnRlcmZhY2UKLQotICByZXR1cm4gewotICAg
IHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKLSAgICAgIHJldHVybiB7Ci0gICAg
ICAgIHRva2VuaXplOiBqc1Rva2VuQmFzZSwKLSAgICAgICAgbGFzdFR5cGU6IG51bGwsCi0gICAg
ICAgIGNjOiBbXSwKLSAgICAgICAgbGV4aWNhbDogbmV3IEpTTGV4aWNhbCgoYmFzZWNvbHVtbiB8
fCAwKSAtIGluZGVudFVuaXQsIDAsICJibG9jayIsIGZhbHNlKSwKLSAgICAgICAgbG9jYWxWYXJz
OiBwYXJzZXJDb25maWcubG9jYWxWYXJzLAotICAgICAgICBnbG9iYWxWYXJzOiBwYXJzZXJDb25m
aWcuZ2xvYmFsVmFycywKLSAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAm
JiB7dmFyczogcGFyc2VyQ29uZmlnLmxvY2FsVmFyc30sCi0gICAgICAgIGluZGVudGVkOiAwCi0g
ICAgICB9OwotICAgIH0sCi0KLSAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewot
ICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewotICAgICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFz
T3duUHJvcGVydHkoImFsaWduIikpCi0gICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZh
bHNlOwotICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwotICAg
ICAgfQotICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKLSAgICAgIHZh
ciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwotICAgICAgaWYgKHR5cGUg
PT0gImNvbW1lbnQiKSByZXR1cm4gc3R5bGU7Ci0gICAgICBzdGF0ZS5sYXN0VHlwZSA9IHR5cGU7
Ci0gICAgICByZXR1cm4gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVh
bSk7Ci0gICAgfSwKLQotICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewot
ICAgICAgaWYgKHN0YXRlLnRva2VuaXplID09IGpzVG9rZW5Db21tZW50KSByZXR1cm4gQ29kZU1p
cnJvci5QYXNzOwotICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IGpzVG9rZW5CYXNlKSByZXR1
cm4gMDsKLSAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJB
dCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWw7Ci0gICAgICBpZiAobGV4aWNhbC50eXBlID09
ICJzdGF0IiAmJiBmaXJzdENoYXIgPT0gIn0iKSBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OwotICAg
ICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsK
LSAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChz
dGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiA/IDQg
OiAwKTsKLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIp
IHJldHVybiBsZXhpY2FsLmluZGVudGVkOwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZm9ybSIp
IHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDsKLSAgICAgIGVsc2UgaWYgKHR5
cGUgPT0gInN0YXQiKQotICAgICAgICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChzdGF0ZS5s
YXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiA/IGluZGVudFVu
aXQgOiAwKTsKLSAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAmJiAhY2xv
c2luZykKLSAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoL14oPzpjYXNlfGRlZmF1
bHQpXGIvLnRlc3QodGV4dEFmdGVyKSA/IGluZGVudFVuaXQgOiAyICogaW5kZW50VW5pdCk7Ci0g
ICAgICBlbHNlIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNhbC5jb2x1bW4gKyAoY2xv
c2luZyA/IDAgOiAxKTsKLSAgICAgIGVsc2UgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoY2xv
c2luZyA/IDAgOiBpbmRlbnRVbml0KTsKLSAgICB9LAotCi0gICAgZWxlY3RyaWNDaGFyczogIjp7
fSIsCi0KLSAgICBqc29uTW9kZToganNvbk1vZGUKLSAgfTsKLX0pOwotCi1Db2RlTWlycm9yLmRl
ZmluZU1JTUUoInRleHQvamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7Ci1Db2RlTWlycm9yLmRl
ZmluZU1JTUUoImFwcGxpY2F0aW9uL2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0
cnVlfSk7Ci1Db2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdHlwZXNjcmlwdCIsIHsgbmFtZTog
ImphdmFzY3JpcHQiLCB0eXBlc2NyaXB0OiB0cnVlIH0pOwotQ29kZU1pcnJvci5kZWZpbmVNSU1F
KCJhcHBsaWNhdGlvbi90eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3Jp
cHQ6IHRydWUgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2NtL21hdGNoYnJhY2tldHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2NtL21hdGNoYnJhY2tldHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0
OTI1YjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9j
bS9tYXRjaGJyYWNrZXRzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotKGZ1bmN0
aW9uKCkgewotICB2YXIgaWVfbHQ4ID0gL01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2Vu
dCkgJiYKLSAgICAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09IG51bGwgfHwgZG9jdW1lbnQuZG9j
dW1lbnRNb2RlIDwgOCk7Ci0KLSAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zOwotICAvLyBEaXNh
YmxlIGJyYWNlIG1hdGNoaW5nIGluIGxvbmcgbGluZXMsIHNpbmNlIGl0J2xsIGNhdXNlIGh1Z2Vs
eSBzbG93IHVwZGF0ZXMgIAotICB2YXIgbWF4TGluZUxlbiA9IDEwMDA7Ci0KLSAgdmFyIG1hdGNo
aW5nID0geyIoIjogIik+IiwgIikiOiAiKDwiLCAiWyI6ICJdPiIsICJdIjogIls8IiwgInsiOiAi
fT4iLCAifSI6ICJ7PCJ9OwotICBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdCcmFja2V0KGNtKSB7Ci0g
ICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShjdXIu
bGluZSksIHBvcyA9IGN1ci5jaCAtIDE7Ci0gICAgdmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1h
dGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0pIHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFy
QXQoKytwb3MpXTsKLSAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKLSAgICB2YXIgZm9yd2Fy
ZCA9IG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIsIGQgPSBmb3J3YXJkID8gMSA6IC0xOwotICAgIHZh
ciBzdHlsZSA9IGNtLmdldFRva2VuQXQoUG9zKGN1ci5saW5lLCBwb3MgKyAxKSkudHlwZTsKLQot
ICAgIHZhciBzdGFjayA9IFtsaW5lLnRleHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0v
OwotICAgIGZ1bmN0aW9uIHNjYW4obGluZSwgbGluZU5vLCBzdGFydCkgewotICAgICAgaWYgKCFs
aW5lLnRleHQpIHJldHVybjsKLSAgICAgIHZhciBwb3MgPSBmb3J3YXJkID8gMCA6IGxpbmUudGV4
dC5sZW5ndGggLSAxLCBlbmQgPSBmb3J3YXJkID8gbGluZS50ZXh0Lmxlbmd0aCA6IC0xOwotICAg
ICAgaWYgKHN0YXJ0ICE9IG51bGwpIHBvcyA9IHN0YXJ0ICsgZDsKLSAgICAgIGZvciAoOyBwb3Mg
IT0gZW5kOyBwb3MgKz0gZCkgewotICAgICAgICB2YXIgY2ggPSBsaW5lLnRleHQuY2hhckF0KHBv
cyk7Ci0gICAgICAgIGlmIChyZS50ZXN0KGNoKSAmJiBjbS5nZXRUb2tlbkF0KFBvcyhsaW5lTm8s
IHBvcyArIDEpKS50eXBlID09IHN0eWxlKSB7Ci0gICAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hp
bmdbY2hdOwotICAgICAgICAgIGlmIChtYXRjaC5jaGFyQXQoMSkgPT0gIj4iID09IGZvcndhcmQp
IHN0YWNrLnB1c2goY2gpOwotICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNo
LmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKLSAgICAgICAgICBl
bHNlIGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZm9yICh2YXIgaSA9IGN1ci5saW5lLCBmb3Vu
ZCwgZSA9IGZvcndhcmQgPyBNYXRoLm1pbihpICsgMTAwLCBjbS5saW5lQ291bnQoKSkgOiBNYXRo
Lm1heCgtMSwgaSAtIDEwMCk7IGkgIT0gZTsgaSs9ZCkgewotICAgICAgaWYgKGkgPT0gY3VyLmxp
bmUpIGZvdW5kID0gc2NhbihsaW5lLCBpLCBwb3MpOwotICAgICAgZWxzZSBmb3VuZCA9IHNjYW4o
Y20uZ2V0TGluZUhhbmRsZShpKSwgaSk7Ci0gICAgICBpZiAoZm91bmQpIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4ge2Zyb206IFBvcyhjdXIubGluZSwgcG9zKSwgdG86IGZvdW5kICYmIFBvcyhp
LCBmb3VuZC5wb3MpLCBtYXRjaDogZm91bmQgJiYgZm91bmQubWF0Y2h9OwotICB9Ci0KLSAgZnVu
Y3Rpb24gbWF0Y2hCcmFja2V0cyhjbSwgYXV0b2NsZWFyKSB7Ci0gICAgdmFyIGZvdW5kID0gZmlu
ZE1hdGNoaW5nQnJhY2tldChjbSk7Ci0gICAgaWYgKCFmb3VuZCB8fCBjbS5nZXRMaW5lKGZvdW5k
LmZyb20ubGluZSkubGVuZ3RoID4gbWF4TGluZUxlbiB8fAotICAgICAgIGZvdW5kLnRvICYmIGNt
LmdldExpbmUoZm91bmQudG8ubGluZSkubGVuZ3RoID4gbWF4TGluZUxlbikKLSAgICAgIHJldHVy
bjsKLQotICAgIHZhciBzdHlsZSA9IGZvdW5kLm1hdGNoID8gIkNvZGVNaXJyb3ItbWF0Y2hpbmdi
cmFja2V0IiA6ICJDb2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCI7Ci0gICAgdmFyIG9uZSA9
IGNtLm1hcmtUZXh0KGZvdW5kLmZyb20sIFBvcyhmb3VuZC5mcm9tLmxpbmUsIGZvdW5kLmZyb20u
Y2ggKyAxKSwge2NsYXNzTmFtZTogc3R5bGV9KTsKLSAgICB2YXIgdHdvID0gZm91bmQudG8gJiYg
Y20ubWFya1RleHQoZm91bmQudG8sIFBvcyhmb3VuZC50by5saW5lLCBmb3VuZC50by5jaCArIDEp
LCB7Y2xhc3NOYW1lOiBzdHlsZX0pOwotICAgIC8vIEtsdWRnZSB0byB3b3JrIGFyb3VuZCB0aGUg
SUUgYnVnIGZyb20gaXNzdWUgIzExOTMsIHdoZXJlIHRleHQKLSAgICAvLyBpbnB1dCBzdG9wcyBn
b2luZyB0byB0aGUgdGV4dGFyZSB3aGV2ZXIgdGhpcyBmaXJlcy4KLSAgICBpZiAoaWVfbHQ4ICYm
IGNtLnN0YXRlLmZvY3VzZWQpIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKLSAgICB2YXIgY2xl
YXIgPSBmdW5jdGlvbigpIHsKLSAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgb25lLmNs
ZWFyKCk7IHR3byAmJiB0d28uY2xlYXIoKTsgfSk7Ci0gICAgfTsKLSAgICBpZiAoYXV0b2NsZWFy
KSBzZXRUaW1lb3V0KGNsZWFyLCA4MDApOwotICAgIGVsc2UgcmV0dXJuIGNsZWFyOwotICB9Ci0K
LSAgdmFyIGN1cnJlbnRseUhpZ2hsaWdodGVkID0gbnVsbDsKLSAgZnVuY3Rpb24gZG9NYXRjaEJy
YWNrZXRzKGNtKSB7Ci0gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGN1
cnJlbnRseUhpZ2hsaWdodGVkKSB7Y3VycmVudGx5SGlnaGxpZ2h0ZWQoKTsgY3VycmVudGx5SGln
aGxpZ2h0ZWQgPSBudWxsO30KLSAgICAgIGlmICghY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgY3Vy
cmVudGx5SGlnaGxpZ2h0ZWQgPSBtYXRjaEJyYWNrZXRzKGNtLCBmYWxzZSk7Ci0gICAgfSk7Ci0g
IH0KLQotICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbigibWF0Y2hCcmFja2V0cyIsIGZhbHNlLCBm
dW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgaWYgKHZhbCkgY20ub24oImN1cnNvckFjdGl2aXR5Iiwg
ZG9NYXRjaEJyYWNrZXRzKTsKLSAgICBlbHNlIGNtLm9mZigiY3Vyc29yQWN0aXZpdHkiLCBkb01h
dGNoQnJhY2tldHMpOwotICB9KTsKLQotICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigibWF0
Y2hCcmFja2V0cyIsIGZ1bmN0aW9uKCkge21hdGNoQnJhY2tldHModGhpcywgdHJ1ZSk7fSk7Ci0g
IENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJmaW5kTWF0Y2hpbmdCcmFja2V0IiwgZnVuY3Rp
b24oKXtyZXR1cm4gZmluZE1hdGNoaW5nQnJhY2tldCh0aGlzKTt9KTsKLX0pKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL3htbC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20veG1sLmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3YjExZmQ2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvY20veG1sLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAK
LUNvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKLSAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKLSAgdmFyIEtsdWRn
ZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7Ci0gICAgYXV0b1NlbGZDbG9zZXJzOiB7J2Fy
ZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUsICdjb2wnOiB0cnVlLCAnY29tbWFu
ZCc6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkJzogdHJ1ZSwgJ2ZyYW1lJzog
dHJ1ZSwgJ2hyJzogdHJ1ZSwgJ2ltZyc6IHRydWUsICdpbnB1dCc6IHRydWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgJ2tleWdlbic6IHRydWUsICdsaW5rJzogdHJ1ZSwgJ21ldGEnOiB0cnVlLCAn
cGFyYW0nOiB0cnVlLCAnc291cmNlJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAndHJh
Y2snOiB0cnVlLCAnd2JyJzogdHJ1ZX0sCi0gICAgaW1wbGljaXRseUNsb3NlZDogeydkZCc6IHRy
dWUsICdsaSc6IHRydWUsICdvcHRncm91cCc6IHRydWUsICdvcHRpb24nOiB0cnVlLCAncCc6IHRy
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICdycCc6IHRydWUsICdydCc6IHRydWUsICd0Ym9k
eSc6IHRydWUsICd0ZCc6IHRydWUsICd0Zm9vdCc6IHRydWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICd0aCc6IHRydWUsICd0cic6IHRydWV9LAotICAgIGNvbnRleHRHcmFiYmVyczogewotICAg
ICAgJ2RkJzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LAotICAgICAgJ2R0JzogeydkZCc6IHRy
dWUsICdkdCc6IHRydWV9LAotICAgICAgJ2xpJzogeydsaSc6IHRydWV9LAotICAgICAgJ29wdGlv
bic6IHsnb3B0aW9uJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZX0sCi0gICAgICAnb3B0Z3JvdXAn
OiB7J29wdGdyb3VwJzogdHJ1ZX0sCi0gICAgICAncCc6IHsnYWRkcmVzcyc6IHRydWUsICdhcnRp
Y2xlJzogdHJ1ZSwgJ2FzaWRlJzogdHJ1ZSwgJ2Jsb2NrcXVvdGUnOiB0cnVlLCAnZGlyJzogdHJ1
ZSwKLSAgICAgICAgICAgICdkaXYnOiB0cnVlLCAnZGwnOiB0cnVlLCAnZmllbGRzZXQnOiB0cnVl
LCAnZm9vdGVyJzogdHJ1ZSwgJ2Zvcm0nOiB0cnVlLAotICAgICAgICAgICAgJ2gxJzogdHJ1ZSwg
J2gyJzogdHJ1ZSwgJ2gzJzogdHJ1ZSwgJ2g0JzogdHJ1ZSwgJ2g1JzogdHJ1ZSwgJ2g2JzogdHJ1
ZSwKLSAgICAgICAgICAgICdoZWFkZXInOiB0cnVlLCAnaGdyb3VwJzogdHJ1ZSwgJ2hyJzogdHJ1
ZSwgJ21lbnUnOiB0cnVlLCAnbmF2JzogdHJ1ZSwgJ29sJzogdHJ1ZSwKLSAgICAgICAgICAgICdw
JzogdHJ1ZSwgJ3ByZSc6IHRydWUsICdzZWN0aW9uJzogdHJ1ZSwgJ3RhYmxlJzogdHJ1ZSwgJ3Vs
JzogdHJ1ZX0sCi0gICAgICAncnAnOiB7J3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZX0sCi0gICAgICAn
cnQnOiB7J3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZX0sCi0gICAgICAndGJvZHknOiB7J3Rib2R5Jzog
dHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sCi0gICAgICAndGQnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1
ZX0sCi0gICAgICAndGZvb3QnOiB7J3Rib2R5JzogdHJ1ZX0sCi0gICAgICAndGgnOiB7J3RkJzog
dHJ1ZSwgJ3RoJzogdHJ1ZX0sCi0gICAgICAndGhlYWQnOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290
JzogdHJ1ZX0sCi0gICAgICAndHInOiB7J3RyJzogdHJ1ZX0KLSAgICB9LAotICAgIGRvTm90SW5k
ZW50OiB7InByZSI6IHRydWV9LAotICAgIGFsbG93VW5xdW90ZWQ6IHRydWUsCi0gICAgYWxsb3dN
aXNzaW5nOiB0cnVlCi0gIH0gOiB7Ci0gICAgYXV0b1NlbGZDbG9zZXJzOiB7fSwKLSAgICBpbXBs
aWNpdGx5Q2xvc2VkOiB7fSwKLSAgICBjb250ZXh0R3JhYmJlcnM6IHt9LAotICAgIGRvTm90SW5k
ZW50OiB7fSwKLSAgICBhbGxvd1VucXVvdGVkOiBmYWxzZSwKLSAgICBhbGxvd01pc3Npbmc6IGZh
bHNlCi0gIH07Ci0gIHZhciBhbGlnbkNEQVRBID0gcGFyc2VyQ29uZmlnLmFsaWduQ0RBVEE7Ci0K
LSAgLy8gUmV0dXJuIHZhcmlhYmxlcyBmb3IgdG9rZW5pemVycwotICB2YXIgdGFnTmFtZSwgdHlw
ZTsKLQotICBmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkgewotICAgIGZ1bmN0aW9uIGNo
YWluKHBhcnNlcikgewotICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7Ci0gICAgICByZXR1
cm4gcGFyc2VyKHN0cmVhbSwgc3RhdGUpOwotICAgIH0KLQotICAgIHZhciBjaCA9IHN0cmVhbS5u
ZXh0KCk7Ci0gICAgaWYgKGNoID09ICI8IikgewotICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkg
ewotICAgICAgICBpZiAoc3RyZWFtLmVhdCgiWyIpKSB7Ci0gICAgICAgICAgaWYgKHN0cmVhbS5t
YXRjaCgiQ0RBVEFbIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJhdG9tIiwgIl1dPiIpKTsKLSAg
ICAgICAgICBlbHNlIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0
cmVhbS5tYXRjaCgiLS0iKSkgcmV0dXJuIGNoYWluKGluQmxvY2soImNvbW1lbnQiLCAiLS0+Iikp
OwotICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIkRPQ1RZUEUiLCB0cnVlLCB0cnVlKSkg
ewotICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5fXC1dLyk7Ci0gICAgICAgICAgcmV0
dXJuIGNoYWluKGRvY3R5cGUoMSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgcmV0dXJuIG51
bGw7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KCI/IikpIHsKLSAgICAgICAg
c3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKLSAgICAgICAgc3RhdGUudG9rZW5pemUgPSBp
bkJsb2NrKCJtZXRhIiwgIj8+Iik7Ci0gICAgICAgIHJldHVybiAibWV0YSI7Ci0gICAgICB9Ci0g
ICAgICBlbHNlIHsKLSAgICAgICAgdmFyIGlzQ2xvc2UgPSBzdHJlYW0uZWF0KCIvIik7Ci0gICAg
ICAgIHRhZ05hbWUgPSAiIjsKLSAgICAgICAgdmFyIGM7Ci0gICAgICAgIHdoaWxlICgoYyA9IHN0
cmVhbS5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pKSkgdGFnTmFtZSArPSBjOwotICAgICAg
ICBpZiAoIXRhZ05hbWUpIHJldHVybiAiZXJyb3IiOwotICAgICAgICB0eXBlID0gaXNDbG9zZSA/
ICJjbG9zZVRhZyIgOiAib3BlblRhZyI7Ci0gICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7
Ci0gICAgICAgIHJldHVybiAidGFnIjsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoY2gg
PT0gIiYiKSB7Ci0gICAgICB2YXIgb2s7Ci0gICAgICBpZiAoc3RyZWFtLmVhdCgiIyIpKSB7Ci0g
ICAgICAgIGlmIChzdHJlYW0uZWF0KCJ4IikpIHsKLSAgICAgICAgICBvayA9IHN0cmVhbS5lYXRX
aGlsZSgvW2EtZkEtRlxkXS8pICYmIHN0cmVhbS5lYXQoIjsiKTsgICAgICAgICAgCi0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcZF0vKSAmJiBzdHJl
YW0uZWF0KCI7Iik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9rID0gc3Ry
ZWFtLmVhdFdoaWxlKC9bXHdcLlwtOl0vKSAmJiBzdHJlYW0uZWF0KCI7Iik7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gb2sgPyAiYXRvbSIgOiAiZXJyb3IiOwotICAgIH0KLSAgICBlbHNlIHsKLSAg
ICAgIHN0cmVhbS5lYXRXaGlsZSgvW14mPF0vKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0K
LSAgfQotCi0gIGZ1bmN0aW9uIGluVGFnKHN0cmVhbSwgc3RhdGUpIHsKLSAgICB2YXIgY2ggPSBz
dHJlYW0ubmV4dCgpOwotICAgIGlmIChjaCA9PSAiPiIgfHwgKGNoID09ICIvIiAmJiBzdHJlYW0u
ZWF0KCI+IikpKSB7Ci0gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKLSAgICAgIHR5cGUg
PSBjaCA9PSAiPiIgPyAiZW5kVGFnIiA6ICJzZWxmY2xvc2VUYWciOwotICAgICAgcmV0dXJuICJ0
YWciOwotICAgIH0KLSAgICBlbHNlIGlmIChjaCA9PSAiPSIpIHsKLSAgICAgIHR5cGUgPSAiZXF1
YWxzIjsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBlbHNlIGlmICgvW1wnXCJdLy50
ZXN0KGNoKSkgewotICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7Ci0gICAg
ICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7Ci0gICAgfQotICAgIGVsc2Ug
ewotICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKTsKLSAgICAgIHJl
dHVybiAid29yZCI7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gaW5BdHRyaWJ1dGUocXVvdGUp
IHsKLSAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgd2hpbGUgKCFz
dHJlYW0uZW9sKCkpIHsKLSAgICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gcXVvdGUpIHsKLSAg
ICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gInN0cmluZyI7Ci0gICAgfTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24o
c3RyZWFtLCBzdGF0ZSkgewotICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKLSAgICAgICAg
aWYgKHN0cmVhbS5tYXRjaCh0ZXJtaW5hdG9yKSkgewotICAgICAgICAgIHN0YXRlLnRva2VuaXpl
ID0gaW5UZXh0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN0cmVhbS5u
ZXh0KCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3R5bGU7Ci0gICAgfTsKLSAgfQotICBmdW5j
dGlvbiBkb2N0eXBlKGRlcHRoKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUp
IHsKLSAgICAgIHZhciBjaDsKLSAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBu
dWxsKSB7Ci0gICAgICAgIGlmIChjaCA9PSAiPCIpIHsKLSAgICAgICAgICBzdGF0ZS50b2tlbml6
ZSA9IGRvY3R5cGUoZGVwdGggKyAxKTsKLSAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUo
c3RyZWFtLCBzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIj4iKSB7Ci0gICAgICAg
ICAgaWYgKGRlcHRoID09IDEpIHsKLSAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0
YXRlLnRva2VuaXplID0gZG9jdHlwZShkZXB0aCAtIDEpOwotICAgICAgICAgICAgcmV0dXJuIHN0
YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfQotICAgICAgcmV0dXJuICJtZXRhIjsKLSAgICB9OwotICB9Ci0KLSAgdmFyIGN1clN0YXRl
LCBzZXRTdHlsZTsKLSAgZnVuY3Rpb24gcGFzcygpIHsKLSAgICBmb3IgKHZhciBpID0gYXJndW1l
bnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjdXJTdGF0ZS5jYy5wdXNoKGFyZ3VtZW50c1tp
XSk7Ci0gIH0KLSAgZnVuY3Rpb24gY29udCgpIHsKLSAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBwdXNoQ29udGV4dCh0
YWdOYW1lLCBzdGFydE9mTGluZSkgewotICAgIHZhciBub0luZGVudCA9IEtsdWRnZXMuZG9Ob3RJ
bmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKGN1clN0YXRlLmNvbnRleHQgJiYgY3Vy
U3RhdGUuY29udGV4dC5ub0luZGVudCk7Ci0gICAgY3VyU3RhdGUuY29udGV4dCA9IHsKLSAgICAg
IHByZXY6IGN1clN0YXRlLmNvbnRleHQsCi0gICAgICB0YWdOYW1lOiB0YWdOYW1lLAotICAgICAg
aW5kZW50OiBjdXJTdGF0ZS5pbmRlbnRlZCwKLSAgICAgIHN0YXJ0T2ZMaW5lOiBzdGFydE9mTGlu
ZSwKLSAgICAgIG5vSW5kZW50OiBub0luZGVudAotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gcG9w
Q29udGV4dCgpIHsKLSAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgY3VyU3RhdGUuY29udGV4dCA9
IGN1clN0YXRlLmNvbnRleHQucHJldjsKLSAgfQotCi0gIGZ1bmN0aW9uIGVsZW1lbnQodHlwZSkg
ewotICAgIGlmICh0eXBlID09ICJvcGVuVGFnIikgewotICAgICAgY3VyU3RhdGUudGFnTmFtZSA9
IHRhZ05hbWU7Ci0gICAgICByZXR1cm4gY29udChhdHRyaWJ1dGVzLCBlbmR0YWcoY3VyU3RhdGUu
c3RhcnRPZkxpbmUpKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImNsb3NlVGFnIikgewotICAg
ICAgdmFyIGVyciA9IGZhbHNlOwotICAgICAgaWYgKGN1clN0YXRlLmNvbnRleHQpIHsKLSAgICAg
ICAgaWYgKGN1clN0YXRlLmNvbnRleHQudGFnTmFtZSAhPSB0YWdOYW1lKSB7Ci0gICAgICAgICAg
aWYgKEtsdWRnZXMuaW1wbGljaXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShjdXJTdGF0ZS5jb250
ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpIHsKLSAgICAgICAgICAgIHBvcENvbnRleHQoKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgZXJyID0gIWN1clN0YXRlLmNvbnRleHQgfHwgY3VyU3Rh
dGUuY29udGV4dC50YWdOYW1lICE9IHRhZ05hbWU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVyciA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoZXJyKSBzZXRTdHlsZSA9
ICJlcnJvciI7Ci0gICAgICByZXR1cm4gY29udChlbmRjbG9zZXRhZyhlcnIpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGNvbnQoKTsKLSAgfQotICBmdW5jdGlvbiBlbmR0YWcoc3RhcnRPZkxpbmUpIHsK
LSAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkgewotICAgICAgdmFyIHRhZ05hbWUgPSBjdXJTdGF0
ZS50YWdOYW1lOwotICAgICAgY3VyU3RhdGUudGFnTmFtZSA9IG51bGw7Ci0gICAgICBpZiAodHlw
ZSA9PSAic2VsZmNsb3NlVGFnIiB8fAotICAgICAgICAgICh0eXBlID09ICJlbmRUYWciICYmIEts
dWRnZXMuYXV0b1NlbGZDbG9zZXJzLmhhc093blByb3BlcnR5KHRhZ05hbWUudG9Mb3dlckNhc2Uo
KSkpKSB7Ci0gICAgICAgIG1heWJlUG9wQ29udGV4dCh0YWdOYW1lLnRvTG93ZXJDYXNlKCkpOwot
ICAgICAgICByZXR1cm4gY29udCgpOwotICAgICAgfQotICAgICAgaWYgKHR5cGUgPT0gImVuZFRh
ZyIpIHsKLSAgICAgICAgbWF5YmVQb3BDb250ZXh0KHRhZ05hbWUudG9Mb3dlckNhc2UoKSk7Ci0g
ICAgICAgIHB1c2hDb250ZXh0KHRhZ05hbWUsIHN0YXJ0T2ZMaW5lKTsKLSAgICAgICAgcmV0dXJu
IGNvbnQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjb250KCk7Ci0gICAgfTsKLSAgfQotICBm
dW5jdGlvbiBlbmRjbG9zZXRhZyhlcnIpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkgewot
ICAgICAgaWYgKGVycikgc2V0U3R5bGUgPSAiZXJyb3IiOwotICAgICAgaWYgKHR5cGUgPT0gImVu
ZFRhZyIpIHsgcG9wQ29udGV4dCgpOyByZXR1cm4gY29udCgpOyB9Ci0gICAgICBzZXRTdHlsZSA9
ICJlcnJvciI7Ci0gICAgICByZXR1cm4gY29udChhcmd1bWVudHMuY2FsbGVlKTsKLSAgICB9Owot
ICB9Ci0gIGZ1bmN0aW9uIG1heWJlUG9wQ29udGV4dChuZXh0VGFnTmFtZSkgewotICAgIHZhciBw
YXJlbnRUYWdOYW1lOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBpZiAoIWN1clN0YXRlLmNv
bnRleHQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcGFyZW50VGFnTmFtZSA9
IGN1clN0YXRlLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgaWYgKCFLbHVk
Z2VzLmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRUYWdOYW1lKSB8fAotICAg
ICAgICAgICFLbHVkZ2VzLmNvbnRleHRHcmFiYmVyc1twYXJlbnRUYWdOYW1lXS5oYXNPd25Qcm9w
ZXJ0eShuZXh0VGFnTmFtZSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcG9w
Q29udGV4dCgpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGF0dHJpYnV0ZXModHlwZSkgewot
ICAgIGlmICh0eXBlID09ICJ3b3JkIikge3NldFN0eWxlID0gImF0dHJpYnV0ZSI7IHJldHVybiBj
b250KGF0dHJpYnV0ZSwgYXR0cmlidXRlcyk7fQotICAgIGlmICh0eXBlID09ICJlbmRUYWciIHx8
IHR5cGUgPT0gInNlbGZjbG9zZVRhZyIpIHJldHVybiBwYXNzKCk7Ci0gICAgc2V0U3R5bGUgPSAi
ZXJyb3IiOwotICAgIHJldHVybiBjb250KGF0dHJpYnV0ZXMpOwotICB9Ci0gIGZ1bmN0aW9uIGF0
dHJpYnV0ZSh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gImVxdWFscyIpIHJldHVybiBjb250KGF0
dHZhbHVlLCBhdHRyaWJ1dGVzKTsKLSAgICBpZiAoIUtsdWRnZXMuYWxsb3dNaXNzaW5nKSBzZXRT
dHlsZSA9ICJlcnJvciI7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAid29yZCIpIHNldFN0eWxlID0g
ImF0dHJpYnV0ZSI7Ci0gICAgcmV0dXJuICh0eXBlID09ICJlbmRUYWciIHx8IHR5cGUgPT0gInNl
bGZjbG9zZVRhZyIpID8gcGFzcygpIDogY29udCgpOwotICB9Ci0gIGZ1bmN0aW9uIGF0dHZhbHVl
KHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVt
YXliZSk7Ci0gICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIEtsdWRnZXMuYWxsb3dVbnF1b3RlZCkg
e3NldFN0eWxlID0gInN0cmluZyI7IHJldHVybiBjb250KCk7fQotICAgIHNldFN0eWxlID0gImVy
cm9yIjsKLSAgICByZXR1cm4gKHR5cGUgPT0gImVuZFRhZyIgfHwgdHlwZSA9PSAic2VsZkNsb3Nl
VGFnIikgPyBwYXNzKCkgOiBjb250KCk7Ci0gIH0KLSAgZnVuY3Rpb24gYXR0dmFsdWVtYXliZSh0
eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250KGF0dHZhbHVlbWF5
YmUpOwotICAgIGVsc2UgcmV0dXJuIHBhc3MoKTsKLSAgfQotCi0gIHJldHVybiB7Ci0gICAgc3Rh
cnRTdGF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4ge3Rva2VuaXplOiBpblRleHQsIGNj
OiBbXSwgaW5kZW50ZWQ6IDAsIHN0YXJ0T2ZMaW5lOiB0cnVlLCB0YWdOYW1lOiBudWxsLCBjb250
ZXh0OiBudWxsfTsKLSAgICB9LAotCi0gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUp
IHsKLSAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKLSAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUg
PSB0cnVlOwotICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwot
ICAgICAgfQotICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKLQotICAg
ICAgc2V0U3R5bGUgPSB0eXBlID0gdGFnTmFtZSA9IG51bGw7Ci0gICAgICB2YXIgc3R5bGUgPSBz
dGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKLSAgICAgIHN0YXRlLnR5cGUgPSB0eXBlOwot
ICAgICAgaWYgKChzdHlsZSB8fCB0eXBlKSAmJiBzdHlsZSAhPSAiY29tbWVudCIpIHsKLSAgICAg
ICAgY3VyU3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICB2
YXIgY29tYiA9IHN0YXRlLmNjLnBvcCgpIHx8IGVsZW1lbnQ7Ci0gICAgICAgICAgaWYgKGNvbWIo
dHlwZSB8fCBzdHlsZSkpIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdGF0ZS5z
dGFydE9mTGluZSA9IGZhbHNlOwotICAgICAgcmV0dXJuIHNldFN0eWxlIHx8IHN0eWxlOwotICAg
IH0sCi0KLSAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGZ1bGxMaW5lKSB7
Ci0gICAgICB2YXIgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7Ci0gICAgICBpZiAoKHN0YXRlLnRv
a2VuaXplICE9IGluVGFnICYmIHN0YXRlLnRva2VuaXplICE9IGluVGV4dCkgfHwKLSAgICAgICAg
ICBjb250ZXh0ICYmIGNvbnRleHQubm9JbmRlbnQpCi0gICAgICAgIHJldHVybiBmdWxsTGluZSA/
IGZ1bGxMaW5lLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGggOiAwOwotICAgICAgaWYgKGFsaWdu
Q0RBVEEgJiYgLzwhXFtDREFUQVxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwOwotICAgICAg
aWYgKGNvbnRleHQgJiYgL148XC8vLnRlc3QodGV4dEFmdGVyKSkKLSAgICAgICAgY29udGV4dCA9
IGNvbnRleHQucHJldjsKLSAgICAgIHdoaWxlIChjb250ZXh0ICYmICFjb250ZXh0LnN0YXJ0T2ZM
aW5lKQotICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2OwotICAgICAgaWYgKGNvbnRleHQp
IHJldHVybiBjb250ZXh0LmluZGVudCArIGluZGVudFVuaXQ7Ci0gICAgICBlbHNlIHJldHVybiAw
OwotICAgIH0sCi0KLSAgICBlbGVjdHJpY0NoYXJzOiAiLyIsCi0KLSAgICBjb25maWd1cmF0aW9u
OiBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyAiaHRtbCIgOiAieG1sIgotICB9OwotfSk7Ci0KLUNv
ZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94bWwiLCAieG1sIik7Ci1Db2RlTWlycm9yLmRlZmlu
ZU1JTUUoImFwcGxpY2F0aW9uL3htbCIsICJ4bWwiKTsKLWlmICghQ29kZU1pcnJvci5taW1lTW9k
ZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpKQotICBDb2RlTWlycm9yLmRlZmluZU1JTUUo
InRleHQvaHRtbCIsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKLS0gCjEuOC4xLjIK
Cg==
</data>
<flag name="review"
          id="236348"
          type_id="1"
          status="+"
          setter="timothy"
    />
    <flag name="commit-queue"
          id="236354"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213906</attachid>
            <date>2013-10-10 11:26:25 -0700</date>
            <delta_ts>2013-10-10 14:31:02 -0700</delta_ts>
            <desc>Patch - Part 3/3 </desc>
            <filename>0003-Web-Inspector-Remove-the-old-front-end-from-WebKit.patch</filename>
            <type>text/plain</type>
            <size>4377210</size>
            <attacher name="Marcelo Morais">m.morais</attacher>
            
              <data encoding="base64">RnJvbSBmOWFlNDdiMTgyNzVkYjU1ODA0MThmZDc1OThhMTkwMDExZjVlMTkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJjZWxvIE1vcmFpcyA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+
CkRhdGU6IFRodSwgMTAgT2N0IDIwMTMgMTE6MDE6MTUgLTA0MDAKU3ViamVjdDogW1BBVENIIDMv
M10gV2ViIEluc3BlY3RvcjogUmVtb3ZlIHRoZSBvbGQgZnJvbnQtZW5kIGZyb20gV2ViS2l0CiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMjk1CgpSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCk5vdyB0aGF0IGVmbC9ndGsvbWFjL3dpbiB1c2UgdGhlIG5ldyBX
ZWIgSW5zcGVjdG9yLCB0aGUgb2xkIGZyb250LWVuZCBjYW4gYmUgcmVtb3ZlZC4KCiogU291cmNl
L1BsYXRmb3JtR1RLLmNtYWtlOiBSZW1vdmVkLiBUaGlzIGZpbGUgd2FzIHVzaW5nIGZpbGVzIGZy
b20gdGhlCm9sZCBpbnNwZWN0b3IsIG5vdCBuZWVkZWQgYW55bW9yZS4KClNvdXJjZS9XZWJDb3Jl
OgoKRHVlIHRvIHBhdGNoIHNpemUgbGltaXRzLCB0aGUgcmVtb3Rpb24gb2YgdGhlIGZyb250LWVu
ZCB3aWxsIGJlIGRvbmUgaW4gdHdvIHBhcnRzLgoKUGFydCAyOiBSZW1vdmluZyB0aGUgZm9sZGVy
IGluc3BlY3Rvci9mcm9udC1lbmQgYW5kIHVwZGF0aW5nIHRoZSBwcm9qZWN0IGZpbGVzIHRvCnJl
bW92ZSBhbGwgcmVmZXJlbmNlcyBmcm9tIHRoZSBvbGQgaW5zcGVjdG9yIGZyb250LWVuZC4KCiog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajogUmVtb3ZlZCB0aGUgcmVmZXJlbmNlcyBm
b3IgdGhlIG9sZAppbnNwZWN0b3IgZnJvbnQtZW5kLgoqIFdlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVyczogRGl0dG8uCiogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBEaXR0by4KKiBpbnNwZWN0b3IvZnJvbnQtZW5kOiBSZW1vdmVkLgoKU291cmNlL1dlYktp
dDoKCiogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBSZW1vdmVkIHRoZSByZWZlcmVuY2VzIGZv
ciB0aGUgb2xkCmluc3BlY3RvciBmcm9udC1lbmQuCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIFNvdXJjZS9QbGF0Zm9ybUdU
Sy5jbWFrZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCAtCiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKwogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiAgICAgfCAgMjU5IC0tCiAuLi4v
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzICAgICAgICB8ICA3ODAgLS0t
LQogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAg
IDQyIC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcyAg
IHwgIDQzOCAtLS0KIC4uLi9mcm9udC1lbmQvQWR2YW5jZWRTZWFyY2hDb250cm9sbGVyLmpzICAg
ICAgICAgIHwgIDY5OSAtLS0tCiAuLi4vZnJvbnQtZW5kL0FwcGxpY2F0aW9uQ2FjaGVJdGVtc1Zp
ZXcuanMgICAgICAgICB8ICAyNzMgLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0FwcGxpY2F0
aW9uQ2FjaGVNb2RlbC5qcyAgIHwgIDI1MyAtLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9BdWRpdENhdGVnb3JpZXMuanMgfCAgIDc5IC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQXVkaXRDb250cm9sbGVyLmpzIHwgIDE0NSAtCiAuLi4vV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0F1ZGl0Rm9ybWF0dGVycy5qcyB8ICAxMjggLQogLi4uL2luc3BlY3Rvci9m
cm9udC1lbmQvQXVkaXRMYXVuY2hlclZpZXcuanMgICAgICAgfCAgMzA2IC0tCiAuLi4vV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UmVzdWx0Vmlldy5qcyB8ICAxMjkgLQogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzICAgfCAxNDA0IC0tLS0t
LS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0c1BhbmVsLmpzICB8
ICA1MjIgLS0tCiAuLi4vZnJvbnQtZW5kL0JvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qcyAg
ICAgICB8ICAyOTIgLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2Vy
LmpzICAgICAgIHwgIDY3MCAtLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50
c1NpZGViYXJQYW5lLmpzICB8ICA2NzkgLS0tLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9DUFVQcm9maWxlVmlldy5qcyAgfCAgNzg5IC0tLS0KIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ1NTTWV0YWRhdGEuanMgIHwgIDk2MiAtLS0tLQogLi4uL2Zyb250LWVu
ZC9DU1NOYW1lZEZsb3dDb2xsZWN0aW9uc1ZpZXcuanMgICAgICAgfCAgNDMxIC0tLQogLi4uL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRGbG93Vmlldy5qcyAgICAgICAgfCAgMjU2IC0tCiAu
Li4vaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzICB8ICAzOTkg
LS0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMgICB8
IDE1MzkgLS0tLS0tLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQ
YW5lLmpzICAgIHwgIDIxNiAtLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmls
ZVZpZXcuanMgICAgICAgfCAgOTQ1IC0tLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NoZWNrYm94LmpzICAgICB8ICAgNjcgLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29kZU1pcnJvclRleHRFZGl0b3IuanMgICAgfCAgNzQ2IC0tLS0KIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMgICAgICAgIHwgIDgyOSAtLS0tLQogLi4uL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzICAgfCAgMTkzIC0KIC4uLi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1lc3NhZ2UuanMgIHwgIDkzNyAtLS0t
LQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlTW9kZWwuanMgfCAg
MzEwIC0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5q
cyB8ICAxNTUgLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmll
dy5qcyAgfCAgODg1IC0tLS0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRl
bnRQcm92aWRlci5qcyB8ICAgOTUgLQogLi4uL0NvbnRlbnRQcm92aWRlckJhc2VkUHJvamVjdERl
bGVnYXRlLmpzICAgICAgICAgfCAgMTUyIC0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRl
bnRQcm92aWRlcnMuanMgICAgICAgIHwgIDI5OCAtLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Db250ZXh0TWVudS5qcyAgfCAgMjg5IC0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0Nvb2tpZUl0ZW1zVmlldy5qcyB8ICAyMzEgLS0KIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29va2llUGFyc2VyLmpzIHwgIDQ2NCAtLS0KIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29va2llc1RhYmxlLmpzIHwgIDI4OCAtLQogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcyAgICAgfCAxNDkzIC0t
LS0tLS0tCiAuLi4vZnJvbnQtZW5kL0RPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMgICAgICAg
ICB8ICA0MDIgLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9ET01Db3VudGVyc0dyYXBoLmpz
ICAgICAgICB8ICAzMjIgLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9N
RXh0ZW5zaW9uLmpzIHwgIDYyMiAtLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9ET01QcmVz
ZW50YXRpb25VdGlscy5qcyAgICB8ICAxNjAgLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01TdG9yYWdlLmpzICAgfCAgMzA4IC0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01TdG9yYWdlSXRlbXNWaWV3LmpzICAgICB8ICAyNjIgLS0KIC4uLi9pbnNwZWN0b3IvZnJv
bnQtZW5kL0RPTVN5bnRheEhpZ2hsaWdodGVyLmpzICAgIHwgICA4NSAtCiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzICAgICB8IDE3NDcgLS0tLS0tLS0tCiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlLmpzICAgICB8ICAyMDcg
LS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlWaWV3LmpzICAgICAgIHwg
IDIwNSAtLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VUYWJsZVZpZXcuanMgICAg
ICAgfCAgMTAxIC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2Rl
bC5qcyAgIHwgIDg1MyAtLS0tLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJTY3Jp
cHRNYXBwaW5nLmpzICAgfCAgIDY2IC0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRT
Y3JpcHRNYXBwaW5nLmpzICAgIHwgIDE1NSAtCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZh
dWx0VGV4dEVkaXRvci5qcyAgICAgICB8IDM3NTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGlhbG9nLmpzICAgICAgIHwgIDE4MCAtCiAu
Li4vaW5zcGVjdG9yL2Zyb250LWVuZC9EaXJlY3RvcnlDb250ZW50Vmlldy5qcyAgICB8ICAxODQg
LQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Eb2NrQ29udHJvbGxlci5qcyAgfCAg
MTk5IC0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcyAgICAg
ICB8ICAyNDEgLS0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5l
bC5qcyAgIHwgMTE3MSAtLS0tLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFu
ZWxEZXNjcmlwdG9yLmpzIHwgIDE2MCAtCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50
c1RyZWVPdXRsaW5lLmpzICAgICB8IDIyNzAgLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0VtcHR5Vmlldy5qcyAgICB8ICAgNTcgLQogLi4uL2Zyb250LWVu
ZC9FdmVudExpc3RlbmVyc1NpZGViYXJQYW5lLmpzICAgICAgICAgfCAgMjY2IC0tCiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvbkFQSS5qcyB8ICA4OTUgLS0tLS0K
IC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnkuanMgIHwgIDIx
NSAtLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25QYW5lbC5qcyAg
fCAgMjQ3IC0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25SZWdpc3RyeVN0dWIu
anMgICB8ICAgNDggLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25T
ZXJ2ZXIuanMgfCAgODY3IC0tLS0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4
dGVuc2lvblZpZXcuanMgICB8ICAxMDAgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9GaWxlQ29udGVudFZpZXcuanMgfCAgMTcxIC0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRmlsZU1hbmFnZXIuanMgIHwgIDExNiAtCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ZpbGVNYXBwaW5nLmpzICB8ICAxMTUgLQogLi4uL2luc3BlY3Rvci9mcm9u
dC1lbmQvRmlsZVN5c3RlbU1hcHBpbmcuanMgICAgICAgfCAgMTMyIC0KIC4uLi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3RlbU1vZGVsLmpzIHwgIDU0NyAtLS0KIC4uLi9mcm9u
dC1lbmQvRmlsZVN5c3RlbVByb2plY3REZWxlZ2F0ZS5qcyAgICAgICAgIHwgIDI3NSAtLQogLi4u
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlU3lzdGVtVmlldy5qcyAgfCAgMjMzIC0t
CiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5qcyAgICB8ICA0
MTAgLS0tCiAuLi4vZnJvbnQtZW5kL0ZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5qcyAgICAg
ICB8ICA4MjUgLS0tLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmxhbWVD
aGFydC5qcyAgIHwgIDY3MiAtLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ZvbnRWaWV3LmpzICAgICB8ICAxNDEgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Hb1RvTGluZURpYWxvZy5qcyAgfCAgMTE4IC0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSEFSRW50cnkuanMgICAgIHwgIDQzOSAtLS0KIC4uLi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSGFuZGxlclJlZ2lzdHJ5LmpzIHwgIDIzNCAtLQogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMgfCAxNzM4IC0tLS0tLS0tLQogLi4u
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzICAgfCAgODA3IC0t
LS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RHcmlkTm9kZXMuanMgICB8
IDExMTkgLS0tLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIu
anMgICAgICB8ICAxOTcgLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJv
eHkuanMgICAgICAgfCAgNTcwIC0tLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90Vmlldy5qcyAgICAgICAgfCAxMTY3IC0tLS0tLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90V29ya2VyLmpzICAgICAgfCAgIDkzIC0KIC4uLi9mcm9udC1lbmQvSGVhcFNu
YXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyAgICAgIHwgICA5NCAtCiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0hlbHBTY3JlZW4uanMgICB8ICAxNTMgLQogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZVZpZXcuanMgICAgfCAgMTQ2IC0KIC4uLi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5kZXhlZERCTW9kZWwuanMgIHwgIDQ4MiAtLS0KIC4u
Li9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5kZXhlZERCVmlld3MuanMgIHwgIDQ0MiAt
LS0KIC4uLi9mcm9udC1lbmQvSW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci5qcyAgICAgIHwg
ICA4MiAtCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kLmpzICAgICAg
ICB8ICAzOTYgLS0tCiAuLi4vZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5xcmMg
ICAgICAgICB8ICAgIDYgLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRl
bmRBUEkuanMgICAgfCAgMjEwIC0tCiAuLi4vZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9z
dFN0dWIuanMgICAgICAgICB8ICAyNzYgLS0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5zcGVjdG9yVmlldy5qcyAgIHwgIDI4NSAtLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQv
SXNvbGF0ZWRGaWxlU3lzdGVtLmpzICAgICAgfCAgMzAyIC0tCiAuLi4vZnJvbnQtZW5kL0lzb2xh
dGVkRmlsZVN5c3RlbU1hbmFnZXIuanMgICAgICAgICB8ICAyNDggLS0KIC4uLi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSlNIZWFwU25hcHNob3QuanMgIHwgIDUzOSAtLS0KIC4uLi9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRGb3JtYXR0ZXIuanMgICAgIHwgIDkxNSAtLS0tLQog
Li4uL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpzICAgfCAgNjA2
IC0tLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL0tleWJvYXJkU2hvcnRjdXQuanMgICAgICAg
IHwgIDIyMyAtLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9MaW5raWZpZXIu
anMgICAgfCAgMTgzIC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTGl2ZUVkaXRT
dXBwb3J0LmpzIHwgIDE0NSAtCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9NZW1vcnlTdGF0aXN0
aWNzLmpzICAgICAgICB8ICA0NDkgLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNz
U2lkZWJhclBhbmUuanMgICAgICB8ICA0MjUgLS0tCiAuLi4vZnJvbnQtZW5kL05hdGl2ZUJyZWFr
cG9pbnRzU2lkZWJhclBhbmUuanMgICAgICB8ICAgODMgLQogLi4uL2luc3BlY3Rvci9mcm9udC1l
bmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzICAgICAgfCAgMjc4IC0tCiAuLi4vaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVNZW1vcnlHcmFwaC5qcyAgICAgICB8ICAzNjIgLS0KIC4uLi9mcm9udC1l
bmQvTmF2aWdhdG9yT3ZlcmxheUNvbnRyb2xsZXIuanMgICAgICAgIHwgIDE4MCAtCiAuLi4vV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdmlnYXRvclZpZXcuanMgICB8IDEwMzggLS0tLS0t
CiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtJdGVtVmlldy5qcyB8ICAx
ODMgLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrTG9nLmpzICAg
fCAgMTUwIC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0d29ya01hbmFnZXIu
anMgIHwgIDU4NCAtLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0d29y
a1BhbmVsLmpzIHwgMjQ4OSAtLS0tLS0tLS0tLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9O
ZXR3b3JrUGFuZWxEZXNjcmlwdG9yLmpzICB8ICAgNTQgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9OZXR3b3JrUmVxdWVzdC5qcyAgfCAgOTY0IC0tLS0tCiAuLi4vZnJvbnQtZW5k
L05ldHdvcmtVSVNvdXJjZUNvZGVQcm92aWRlci5qcyAgICAgICB8ICAxNDIgLQogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3QuanMgICAgICAgfCAgMTg2IC0KIC4uLi9p
bnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFBvcG92ZXJIZWxwZXIuanMgICAgIHwgIDE2MSAtCiAu
Li4vaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyB8ICA4ODkg
LS0tLS0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT3ZlcnJpZGVzVmlldy5qcyAg
IHwgIDY0NCAtLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL092ZXJ2aWV3
R3JpZC5qcyB8ICA0NjcgLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Bh
bmVsLmpzICAgICAgICB8ICAzMjkgLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsRW5h
YmxlclZpZXcuanMgICAgICAgIHwgIDEwMCAtCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1BhcnNlZFVSTC5qcyAgICB8ICAyMjUgLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUGxhY2FyZC5qcyAgICAgIHwgIDExOCAtCiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMgICAgICB8ICA0NjYgLS0tCiAuLi4vZnJvbnQtZW5k
L1ByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlSGVscGVyLmpzICB8ICAxNjggLQogLi4uL2luc3Bl
Y3Rvci9mcm9udC1lbmQvUHJvZmlsZURhdGFHcmlkVHJlZS5qcyAgICAgfCAgNDM2IC0tLQogLi4u
L2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZUxhdW5jaGVyVmlldy5qcyAgICAgfCAgMTg4IC0K
IC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyAgIHwgMTQz
NCAtLS0tLS0tLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbERlc2NyaXB0
b3IuanMgfCAgIDc3IC0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZ3Jl
c3MuanMgICAgIHwgIDE3NyAtCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9ncmVzc0luZGlj
YXRvci5qcyAgICAgICB8ICAxMjUgLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvcGVydGll
c1NlY3Rpb24uanMgICAgICAgfCAgIDUyIC0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb3Bl
cnRpZXNTaWRlYmFyUGFuZS5qcyAgIHwgIDEwNSAtCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Jhd1NvdXJjZUNvZGUuanMgICB8ICAgIDAKIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzIHwgIDYwMiAtLS0tCiAuLi4vaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXF1ZXN0Q29va2llc1ZpZXcuanMgICAgICB8ICAgOTUgLQogLi4uL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1ZXN0SFRNTFZpZXcuanMgfCAgIDcyIC0KIC4uLi9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RIZWFkZXJzVmlldy5qcyAgICAgIHwgIDQ2MSAtLS0KIC4u
Li9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdEpTT05WaWV3LmpzIHwgIDExNiAt
CiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1ZXN0UHJldmlld1ZpZXcuanMgICAgICB8ICAx
MjEgLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdFJlc3BvbnNlVmlldy5qcyAgICAg
fCAgIDY5IC0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RUaW1pbmdWaWV3LmpzICAg
ICAgIHwgIDE2NyAtCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RW
aWV3LmpzICB8ICAgNzkgLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZS5qcyAgICAgfCAgMzU2IC0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVNj
cmlwdE1hcHBpbmcuanMgICB8ICA0MzggLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZVRyZWVNb2RlbC5qcyAgICAgICB8ICA3MTQgLS0tLQogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9SZXNvdXJjZVR5cGUuanMgfCAgMTI0IC0KIC4uLi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvUmVzb3VyY2VVdGlscy5qcyAgIHwgIDIzNiAtLQogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanMgfCAgMTAzIC0KIC4uLi9mcm9u
dC1lbmQvUmVzb3VyY2VXZWJTb2NrZXRGcmFtZVZpZXcuanMgICAgICAgIHwgIDEwMCAtCiAuLi4v
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzICB8IDIzMTQgLS0t
LS0tLS0tLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9SZXZpc2lvbkhpc3RvcnlWaWV3Lmpz
ICAgICB8ICAzMTggLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGlt
ZU1vZGVsLmpzIHwgIDQ1NyAtLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VN
YXBwaW5nLmpzICAgICAgIHwgIDI4OSAtLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvU2NvcGVD
aGFpblNpZGViYXJQYW5lLmpzICAgfCAgMTc5IC0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0LmpzICAgICAgIHwgIDI5MCAtLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMgfCAgMjcwIC0tCiAuLi4vaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMgICB8ICAyMzUgLS0KIC4uLi9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdFNuaXBwZXRNb2RlbC5qcyAgICAgIHwgIDU0NCAtLS0KIC4uLi9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNOYXZpZ2F0b3IuanMgICAgICAgIHwgIDIzOCAtLQog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgfCAxMzQx
IC0tLS0tLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbERlc2NyaXB0b3Iu
anMgIHwgIDExOCAtCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzU2VhcmNoU2NvcGUu
anMgICAgICB8ICAxMzYgLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvU2VhcmNoQ29udHJvbGxl
ci5qcyAgICAgICAgfCAgNDYyIC0tLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TZWN0aW9uLmpzICAgICAgfCAgMjIwIC0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NldHRpbmdzLmpzICAgICB8ICA0MjMgLS0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NldHRpbmdzU2NyZWVuLmpzICB8ICA4MzYgLS0tLS0KIC4uLi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2hvcnRjdXRzU2NyZWVuLmpzIHwgIDIwNSAtLQogLi4uL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2hvd01vcmVEYXRhR3JpZE5vZGUuanMgICAgfCAgMTQ3IC0KIC4uLi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2lkZWJhck92ZXJsYXkuanMgIHwgIDE4MCAtCiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJQYW5lLmpzICB8ICAyMDEg
LS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJUcmVlRWxlbWVudC5qcyAgICAgIHwg
IDIyOCAtLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TaWRlYmFyVmlldy5q
cyAgfCAgMTYzIC0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpbXBsZVdvcmtzcGFjZVByb3Zp
ZGVyLmpzIHwgIDI0MCAtLQogLi4uL2Zyb250LWVuZC9TbmlwcGV0SmF2YVNjcmlwdFNvdXJjZUZy
YW1lLmpzICAgICAgfCAgIDgzIC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU25p
cHBldFN0b3JhZ2UuanMgIHwgIDIxMCAtLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb2Z0Q29udGV4dE1lbnUuanMgfCAgNDAwIC0tLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQv
U291cmNlQ1NTVG9rZW5pemVyLmpzICAgICAgfCAxNTcxIC0tLS0tLS0tCiAuLi4vaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIucmUyanMgICB8ICAzMzkgLS0KIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgIHwgIDc2NiAtLS0tCiAu
Li4vaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VIVE1MVG9rZW5pemVyLmpzICAgICB8ICA4MTYg
LS0tLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUhUTUxUb2tlbml6ZXIucmUyanMg
IHwgIDM5MSAtLQogLi4uL2Zyb250LWVuZC9Tb3VyY2VKYXZhU2NyaXB0VG9rZW5pemVyLmpzICAg
ICAgICAgfCAyNDkwIC0tLS0tLS0tLS0tLS0KIC4uLi9mcm9udC1lbmQvU291cmNlSmF2YVNjcmlw
dFRva2VuaXplci5yZTJqcyAgICAgIHwgIDIxMCAtLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VNYXAuanMgICAgfCAgMzAyIC0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZU1hcHBpbmcuanMgICB8ICAgNzIgLQogLi4uL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VUb2tlbml6ZXIuanMgfCAgMTI4IC0KIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3BlY3RydW0uanMgICAgIHwgIDUwOCAtLS0KIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3BsaXRWaWV3LmpzICAgIHwgIDQ0OCAtLS0K
IC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3RhdHVzQmFyQnV0dG9uLmpzIHwgIDM2
NCAtLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVTaGVldE91dGxpbmVEaWFsb2cuanMg
fCAgMTY1IC0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzICAg
ICAgIHwgMjc0MiAtLS0tLS0tLS0tLS0tLQogLi4uL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVz
U291cmNlTWFwcGluZy5qcyAgICAgfCAgMzMzIC0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1N1Z2dlc3RCb3guanMgICB8ICAzOTIgLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1RhYmJlZEVkaXRvckNvbnRhaW5lci5qcyAgIHwgIDY3NSAtLS0tCiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RhYmJlZFBhbmUuanMgICB8ICA4NjggLS0tLS0KIC4uLi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGVzdENvbnRyb2xsZXIuanMgIHwgICA0OSAtCiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3IuanMgICB8ICAyOTkg
LS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JIaWdobGlnaHRlci5qcyAgIHwg
IDI4OCAtLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yTW9kZWwu
anMgfCAgODg2IC0tLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQ
cm9tcHQuanMgICB8ICA5NDAgLS0tLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dFV0aWxzLmpzICAgIHwgIDExNCAtCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1l
bGluZUZyYW1lQ29udHJvbGxlci5qcyB8ICAxNDcgLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9UaW1lbGluZUdyaWQuanMgfCAgMjQxIC0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RpbWVsaW5lTWFuYWdlci5qcyB8ICAxMDUgLQogLi4uL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzICAgfCAgNDU4IC0tLQogLi4uL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGltZWxpbmVPdmVydmlld1BhbmUuanMgICAgfCAgODkwIC0tLS0tCiAu
Li4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMgICB8IDE2MjUg
LS0tLS0tLS0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsRGVzY3JpcHRv
ci5qcyB8ICAgNjMgLQogLi4uL2Zyb250LWVuZC9UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmpz
ICAgICAgICAgfCAxNDYwIC0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Rvb2xiYXIuanMgICAgICB8ICA0MzMgLS0tCiAuLi4vZnJvbnQtZW5kL1RvcERvd25Qcm9m
aWxlRGF0YUdyaWRUcmVlLmpzICAgICAgICB8ICAxNDMgLQogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9VSVNvdXJjZUNvZGUuanMgfCAgOTYyIC0tLS0tCiAuLi4vaW5zcGVjdG9y
L2Zyb250LWVuZC9VSVNvdXJjZUNvZGVGcmFtZS5qcyAgICAgICB8ICAxNjUgLQogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9VSVN0cmluZy5qcyAgICAgfCAgIDU1IC0KIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVUlVdGlscy5qcyAgICAgIHwgMTA4NSAtLS0t
LS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL1VzZXJBZ2VudFN1cHBvcnQuanMgICAgICAgIHwg
IDM4NCAtLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Vc2VyTWV0cmljcy5q
cyAgfCAgMTMwIC0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVmlldy5qcyAg
ICAgICAgIHwgIDUxNiAtLS0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVmlld3Bv
cnRDb250cm9sLmpzIHwgIDE2NSAtCiAuLi4vZnJvbnQtZW5kL1dhdGNoRXhwcmVzc2lvbnNTaWRl
YmFyUGFuZS5qcyAgICAgICB8ICA0OTAgLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmMgICAgICB8ICA0MTcgLS0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dvcmtlck1hbmFnZXIuanMgICB8ICAzMDMgLS0KIC4uLi9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dvcmtlcnNTaWRlYmFyUGFuZS5qcyAgICAgIHwgIDEyNCAtCiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dvcmtzcGFjZS5qcyAgICB8ICA1MjUgLS0tCiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2F1ZGl0c1BhbmVsLmNzcyB8ICAyNDIgLS0KIC4u
Li9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYnJlYWRjcnVtYkxpc3QuY3NzIHwgICA5OSAt
CiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9icmVha3BvaW50c0xpc3QuY3NzICAgICAgICB8ICAx
MTIgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9idWlsZFN5c3RlbU9ubHkuanMg
fCAgICA3IC0KIC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY2FudmFzUHJvZmlsZXIu
Y3NzIHwgIDEwMCAtCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2Nzc05hbWVkRmxv
d3MuY3NzICB8ICAgOTYgLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9kYXRh
R3JpZC5jc3MgICAgfCAgMjI4IC0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2RpYWxvZy5jc3MgICAgICB8ICAgNDQgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9lbGVtZW50c1BhbmVsLmNzcyAgfCAgNjAwIC0tLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvZXh0ZXJucy5qcyAgICAgIHwgIDM1MyAtLQogLi4uL2Zyb250LWVuZC9maWx0
ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuY3NzICAgICAgfCAgIDUzIC0KIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvZmxhbWVDaGFydC5jc3MgIHwgICAyMyAtCiAuLi4vV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQcm9maWxlci5jc3MgICB8ICAyNjUgLS0KIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaGVscFNjcmVlbi5jc3MgIHwgIDQ5MiAtLS0K
IC4uLi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5kZXhlZERCVmlld3MuY3NzIHwgIDEy
NCAtCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgICB8
IDI4NzggLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sICB8ICAyMTEgLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzICAgIHwgMTAyMyAtLS0tLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3RvckNvbW1vbi5jc3MgICAgICAgIHwgIDIzMCAtLQogLi4uL2Zyb250LWVuZC9p
bnNwZWN0b3JTeW50YXhIaWdobGlnaHQuY3NzICAgICAgICAgfCAgMTQxIC0KIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvanNkaWZmbGliLmpzICAgIHwgIDQwOSAtLS0KIC4uLi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvbmF2aWdhdG9yVmlldy5jc3MgIHwgIDE0OSAtCiAu
Li4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtMb2dWaWV3LmNzcyB8ICA1NDAg
LS0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtQYW5lbC5jc3MgICB8
ICAzMzkgLS0KIC4uLi9pbnNwZWN0b3IvZnJvbnQtZW5kL3BhbmVsRW5hYmxlclZpZXcuY3NzICAg
ICAgIHwgIDE3MiAtCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3BvcG92ZXIu
Y3NzICAgICB8ICAxMjYgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9wcm9maWxl
c1BhbmVsLmNzcyAgfCAgMjE2IC0tCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Jl
c291cmNlVmlldy5jc3MgICB8ICAxMDkgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9yZXNvdXJjZXNQYW5lbC5jc3MgfCAgMzI5IC0tCiAuLi4vaW5zcGVjdG9yL2Zyb250LWVuZC9y
ZXZpc2lvbkhpc3RvcnkuY3NzICAgICAgICB8ICAgOTAgLQogLi4uL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9zY3JpcHRzUGFuZWwuY3NzICAgfCAgMzMyIC0tCiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL3NpZGViYXJQYW5lLmNzcyB8ICAxNzMgLQogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9zcGVjdHJ1bS5jc3MgICAgfCAgMTE0IC0KIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvc3BsaXRWaWV3LmNzcyAgIHwgIDE0NSAtCiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RhYmJlZFBhbmUuY3NzICB8ICAxNTcgLQog
Li4uL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXN0LXJ1bm5lci5odG1sICAgfCAgMzY2
IC0tCiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzICB8
ICAyMTkgLS0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFByb21wdC5j
c3MgIHwgICA2OSAtCiAuLi4vV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RpbWVsaW5lUGFu
ZWwuY3NzICB8ICA2NTQgLS0tLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90
cmVlb3V0bGluZS5qcyAgfCAxMDY3IC0tLS0tLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC91dGlsaXRpZXMuanMgICAgfCAxMDA3IC0tLS0tLQogU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlICAgICAgICAgICAgIHwgICAyNyAtCiAyODIgZmlsZXMg
Y2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgMTIxNzY1IGRlbGV0aW9ucygtKQogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWR2YW5jZWRT
ZWFyY2hDb250cm9sbGVyLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9BcHBsaWNhdGlvbkNhY2hlSXRlbXNWaWV3LmpzCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BcHBsaWNhdGlvbkNh
Y2hlTW9kZWwuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0F1ZGl0Q2F0ZWdvcmllcy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRDb250cm9sbGVyLmpzCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdEZvcm1hdHRl
cnMuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0F1ZGl0TGF1bmNoZXJWaWV3LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJlc3VsdFZpZXcuanMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0
c1BhbmVsLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpz
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50c1NpZGViYXJQYW5lLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DUFVQcm9maWxlVmlldy5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTWV0YWRhdGEuanMKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU05h
bWVkRmxvd0NvbGxlY3Rpb25zVmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRGbG93Vmlldy5qcwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU2VsZWN0b3JQcm9m
aWxlVmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2Zp
bGVWaWV3LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9DaGVja2JveC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29kZU1pcnJvclRleHRFZGl0b3IuanMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbG9yLmpzCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNj
cmlwdE1hcHBpbmcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbnNvbGVNZXNzYWdlLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlTW9kZWwuanMKIGRlbGV0ZSBtb2Rl
IDEwMDc1NSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5q
cwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29uc29sZVZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbnRlbnRQcm92aWRlci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29udGVudFByb3ZpZGVyQmFzZWRQcm9qZWN0
RGVsZWdhdGUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NvbnRlbnRQcm92aWRlcnMuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRleHRNZW51LmpzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJdGVtc1ZpZXcu
anMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0Nvb2tpZVBhcnNlci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29va2llc1RhYmxlLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQnJlYWtwb2ludHNTaWRl
YmFyUGFuZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NQ291bnRlcnNHcmFwaC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NRXh0ZW5zaW9uLmpzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01QcmVzZW50YXRpb25V
dGlscy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRE9NU3RvcmFnZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0ZW1zVmlldy5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3ludGF4SGlnaGxpZ2h0
ZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RhdGFHcmlkLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EYXRhYmFzZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlVGFibGVW
aWV3LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclNjcmlwdE1hcHBpbmcuanMKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRTY3JpcHRN
YXBwaW5nLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGlhbG9nLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EaXJlY3RvcnlDb250ZW50Vmlldy5q
cwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RG9ja0NvbnRyb2xsZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwogZGVsZXRlIG1vZGUgMTAwNzU1IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbERlc2Ny
aXB0b3IuanMKIGRlbGV0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VtcHR5Vmlldy5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXZlbnRMaXN0ZW5lcnNTaWRl
YmFyUGFuZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRXh0ZW5zaW9uQVBJLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25BdWRpdENhdGVnb3J5LmpzCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25Q
YW5lbC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRXh0ZW5zaW9uUmVnaXN0cnlTdHViLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblZp
ZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0ZpbGVDb250ZW50Vmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZU1hbmFnZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVNYXBwaW5nLmpzCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlU3lzdGVt
TWFwcGluZy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRmlsZVN5c3RlbU1vZGVsLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlU3lzdGVtUHJvamVjdERlbGVnYXRlLmpzCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxl
U3lzdGVtVmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRmlsZVV0aWxzLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuanMKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZsYW1l
Q2hhcnQuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ZvbnRWaWV3LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Hb1RvTGluZURpYWxvZy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSEFSRW50cnkuanMKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hhbmRsZXJSZWdpc3Ry
eS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdEdyaWRO
b2Rlcy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
Vmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90V29ya2VyLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpz
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWxwU2NyZWVuLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZVZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luZGV4ZWREQk1vZGVsLmpzCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVkREJWaWV3cy5qcwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5z
cGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZC5qcwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLnFyYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9z
dFN0dWIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvclZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lzb2xhdGVkRmlsZVN5c3RlbS5qcwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSXNvbGF0ZWRGaWxlU3lz
dGVtTWFuYWdlci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSlNIZWFwU25hcHNob3QuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRGb3JtYXR0ZXIuanMKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3Jp
cHRTb3VyY2VGcmFtZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvS2V5Ym9hcmRTaG9ydGN1dC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTGlua2lmaWVyLmpzCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9MaXZlRWRpdFN1cHBv
cnQuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL01lbW9yeVN0YXRpc3RpY3MuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlHcmFwaC5qcwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF2
aWdhdG9yT3ZlcmxheUNvbnRyb2xsZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdmlnYXRvclZpZXcuanMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtJdGVtVmlldy5q
cwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
TmV0d29ya0xvZy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvTmV0d29ya01hbmFnZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtQYW5lbC5qcwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0d29ya1BhbmVsRGVz
Y3JpcHRvci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvTmV0d29ya1JlcXVlc3QuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtVSVNvdXJjZUNvZGVQcm92aWRlci5qcwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2Jq
ZWN0LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9PYmplY3RQb3BvdmVySGVscGVyLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT3ZlcnJp
ZGVzVmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvT3ZlcnZpZXdHcmlkLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWxFbmFibGVyVmlldy5qcwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFyc2VkVVJM
LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9QbGFjYXJkLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Qb3BvdmVyLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9QcmVzZW50YXRpb25Db25zb2xlTWVzc2FnZUhlbHBlci5qcwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJv
ZmlsZURhdGFHcmlkVHJlZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZUxhdW5jaGVyVmlldy5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJv
ZmlsZXNQYW5lbERlc2NyaXB0b3IuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2dyZXNzLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9ncmVzc0luZGljYXRvci5qcwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvcGVy
dGllc1NlY3Rpb24uanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1Byb3BlcnRpZXNTaWRlYmFyUGFuZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmF3U291cmNlQ29kZS5qcwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVtb3Rl
T2JqZWN0LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXF1ZXN0Q29va2llc1ZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RIVE1MVmlldy5qcwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdEhlYWRl
cnNWaWV3LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXF1ZXN0SlNPTlZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RQcmV2aWV3Vmlldy5qcwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdFJlc3Bv
bnNlVmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVxdWVzdFRpbWluZ1ZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RWaWV3LmpzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3Vy
Y2VTY3JpcHRNYXBwaW5nLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2RlbC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUeXBlLmpzCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZVV0aWxzLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZVZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlV2ViU29ja2V0RnJhbWVWaWV3LmpzCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmV2aXNpb25IaXN0b3J5Vmlldy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TQVNTU291cmNlTWFw
cGluZy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NvcGVDaGFpblNpZGViYXJQYW5lLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2Ny
aXB0Rm9ybWF0dGVyV29ya2VyLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRTbmlwcGV0TW9kZWwuanMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNOYXZpZ2F0b3Iu
anMKIGRlbGV0ZSBtb2RlIDEwMDc1NSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsRGVzY3JpcHRvci5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1NlYXJjaFNjb3Bl
LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TZWFyY2hDb250cm9sbGVyLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TZWN0aW9uLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3NTY3JlZW4uanMK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1No
b3J0Y3V0c1NjcmVlbi5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2hvd01vcmVEYXRhR3JpZE5vZGUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJPdmVybGF5LmpzCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TaWRl
YmFyUGFuZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2lkZWJhclRyZWVFbGVtZW50LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TaWRlYmFyVmlldy5qcwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2ltcGxlV29ya3NwYWNl
UHJvdmlkZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NuaXBwZXRKYXZhU2NyaXB0U291cmNlRnJhbWUuanMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRTdG9yYWdlLmpz
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
b2Z0Q29udGV4dE1lbnUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUNTU1Rva2VuaXplci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlQ1NTVG9rZW5pemVyLnJl
MmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb3VyY2VGcmFtZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlSFRNTFRva2VuaXplci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlSFRNTFRva2VuaXplci5y
ZTJqcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5y
ZTJqcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlTWFwLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VNYXBwaW5nLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VUb2tlbml6ZXIuanMKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NwZWN0cnVtLmpz
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
cGxpdFZpZXcuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1N0YXR1c0JhckJ1dHRvbi5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVTaGVldE91dGxpbmVEaWFsb2cuanMKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxl
c1NpZGViYXJQYW5lLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TdHlsZXNTb3VyY2VNYXBwaW5nLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdWdnZXN0Qm94LmpzCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UYWJiZWRFZGl0
b3JDb250YWluZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RhYmJlZFBhbmUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rlc3RDb250cm9sbGVyLmpzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0
RWRpdG9ySGlnaGxpZ2h0ZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFV0aWxz
LmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UaW1lbGluZUZyYW1lQ29udHJvbGxlci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVHcmlkLmpzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1hbmFnZXIu
anMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RpbWVsaW5lTW9kZWwuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lT3ZlcnZpZXdQYW5lLmpzCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1l
bGluZVBhbmVsRGVzY3JpcHRvci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5qcwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5q
cwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VJU291cmNlQ29kZS5qcwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVUlTb3VyY2VDb2RlRnJh
bWUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1VJU3RyaW5nLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9VSVV0aWxzLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Vc2VyQWdlbnRTdXBwb3J0LmpzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Vc2VyTWV0cmljcy5qcwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVmll
dy5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVmlld3BvcnRDb250cm9sLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUuanMKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dvcmtlck1hbmFnZXIuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dvcmtlcnNTaWRlYmFyUGFuZS5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV29ya3NwYWNlLmpzCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9hdWRpdHNQYW5l
bC5jc3MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2JyZWFkY3J1bWJMaXN0LmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvYnJlYWtwb2ludHNMaXN0LmNzcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYnVpbGRTeXN0ZW1Pbmx5Lmpz
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9j
YW52YXNQcm9maWxlci5jc3MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2Nzc05hbWVkRmxvd3MuY3NzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9kYXRhR3JpZC5jc3MKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2RpYWxvZy5jc3MKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1l
bnRzUGFuZWwuY3NzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9leHRlcm5zLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9maWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuY3NzCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9mbGFtZUNo
YXJ0LmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaGVhcFByb2ZpbGVyLmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaGVscFNjcmVlbi5jc3MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luZGV4ZWREQlZpZXdzLmNzcwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yQ29tbW9uLmNzcwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
U3ludGF4SGlnaGxpZ2h0LmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvanNkaWZmbGliLmpzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9uYXZpZ2F0b3JWaWV3LmNzcwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvbmV0d29ya0xvZ1Zp
ZXcuY3NzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9uZXR3b3JrUGFuZWwuY3NzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9wYW5lbEVuYWJsZXJWaWV3LmNzcwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcG9wb3Zlci5jc3MKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVz
UGFuZWwuY3NzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9yZXNvdXJjZVZpZXcuY3NzCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9yZXNvdXJjZXNQYW5lbC5jc3MKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3JldmlzaW9uSGlzdG9yeS5j
c3MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3NjcmlwdHNQYW5lbC5jc3MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL3NpZGViYXJQYW5lLmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvc3BlY3RydW0uY3NzCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9zcGxpdFZpZXcuY3NzCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90YWJi
ZWRQYW5lLmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdGVzdC1ydW5uZXIuaHRtbAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dEVkaXRvci5jc3MKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRQcm9tcHQuY3NzCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90aW1lbGlu
ZVBhbmVsLmNzcwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdHJlZW91dGxpbmUuanMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwoKZGlmZiAtLWdpdCBhL0NoYW5nZUxv
ZyBiL0NoYW5nZUxvZwppbmRleCBmYzIxMjI2Li4wYTMyYWZlIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMTAtMTAgIE1hcmNlbG8g
TW9yYWlzICA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
UmVtb3ZlIHRoZSBvbGQgZnJvbnQtZW5kIGZyb20gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyOTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZTog
UmVtb3ZlZC4gVGhpcyBmaWxlIHdhcyB1c2luZyBmaWxlcyBmcm9tIHRoZQorICAgICAgICBvbGQg
aW5zcGVjdG9yLCBub3QgbmVlZGVkIGFueW1vcmUuCisKIDIwMTMtMTAtMDkgIEp1bGllbiBCcmlh
bmNlYXUgIDxqYnJpYW5jZUBjaXNjby5jb20+CiAKICAgICAgICAgW3NoNF0gQWRkIHNoNCBzdXBw
b3J0IHdoZW4gYnVpbGRpbmcgd2l0aCBDTWFrZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bUdUSy5jbWFrZSBiL1NvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGFmNzEwMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvUGxhdGZvcm1HVEsuY21h
a2UKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1pZiAoRU5BQkxFX0lOU1BFQ1RPUikK
LSAgICBhZGRfY3VzdG9tX3RhcmdldCgKLSAgICAgICAgd2ViLWluc3BlY3Rvci1yZXNvdXJjZXMg
QUxMCi0gICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5X2RpcmVjdG9yeSAk
e1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvZnJvbnQtZW5kICR7REFUQV9CVUlMRF9ESVJ9L3dlYmlu
c3BlY3RvcgotICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSAke1dFQkNP
UkVfRElSfS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgJHtEQVRBX0JVSUxEX0RJ
Un0vd2ViaW5zcGVjdG9yCi0gICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5
ICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZnJvbnQtZW5kL2luc3Bl
Y3RvclBhZ2VJbmRleC5odG1sICR7REFUQV9CVUlMRF9ESVJ9L3dlYmluc3BlY3RvcgotICAgICAg
ICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzICR7REFUQV9CVUlMRF9ESVJ9L3dl
Ymluc3BlY3RvcgotICAgICAgICBERVBFTkRTIFdlYkNvcmUKLSAgICAgICAgV09SS0lOR19ESVJF
Q1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfQotICAgICkKLSAgICBpbnN0YWxsKERJUkVDVE9SWSAi
JHtEQVRBX0JVSUxEX0RJUn0vd2ViaW5zcGVjdG9yIgotICAgICAgICBERVNUSU5BVElPTiAiJHtE
QVRBX0lOU1RBTExfRElSfS93ZWJpbnNwZWN0b3IiCi0gICAgICAgIEZJTEVTX01BVENISU5HIFBB
VFRFUk4gIiouanMiCi0gICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIiouaHRtbCIKLSAg
ICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5jc3MiCi0gICAgICAgICAgICAgICAgICAg
ICAgIFBBVFRFUk4gIiouZ2lmIgotICAgICAgICAgICAgICAgICAgICAgICBQQVRURVJOICIqLnBu
ZyIpCi1lbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNiNTZmMGIuLjY4MjQ1NjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTcsNiArNywyNCBAQAogCiAgICAgICAgIER1ZSB0byBwYXRjaCBzaXplIGxpbWl0cywgdGhl
IHJlbW90aW9uIG9mIHRoZSBmcm9udC1lbmQgd2lsbCBiZSBkb25lIGluIHR3byBwYXJ0cy4KIAor
ICAgICAgICBQYXJ0IDI6IFJlbW92aW5nIHRoZSBmb2xkZXIgaW5zcGVjdG9yL2Zyb250LWVuZCBh
bmQgdXBkYXRpbmcgdGhlIHByb2plY3QgZmlsZXMgdG8KKyAgICAgICAgcmVtb3ZlIGFsbCByZWZl
cmVuY2VzIGZyb20gdGhlIG9sZCBpbnNwZWN0b3IgZnJvbnQtZW5kLgorICAgICAgICAKKyAgICAg
ICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOiBSZW1vdmVkIHRoZSByZWZlcmVu
Y2VzIGZvciB0aGUgb2xkCisgICAgICAgIGluc3BlY3RvciBmcm9udC1lbmQuCisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOiBEaXR0by4KKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQ6IFJlbW92ZWQuCisKKzIwMTMtMTAtMTAgIE1hcmNlbG8gTW9yYWlz
ICA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3Zl
IHRoZSBvbGQgZnJvbnQtZW5kIGZyb20gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBEdWUgdG8gcGF0Y2ggc2l6ZSBsaW1pdHMsIHRoZSByZW1v
dGlvbiBvZiB0aGUgZnJvbnQtZW5kIHdpbGwgYmUgZG9uZSBpbiB0d28gcGFydHMuCisKICAgICAg
ICAgUGFydCAxOiBSZW1vdmluZyB0aGUgZm9sZGVycyBpbnNpZGUgb2YgaW5zcGVjdG9yL2Zyb250
LWVuZCBwYXRoIGFuZAogICAgICAgICB0aGUgY29tcGlsZSBmcm9udC1lbmQgc291cmNlLgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCAz
ODMyNGE1Li4wN2U4MGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oKQEAgLTIwNTg3LDI2NSArMjA1ODcsNiBAQAogICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGJpbmRpbmdzXHNjcmlwdHNcSURMQXR0cmlidXRlcy50eHQiIC8+CiAgICAgPE5vbmUg
SW5jbHVkZT0iLi5cYmluZGluZ3Ncc2NyaXB0c1xJRExQYXJzZXIucG0iIC8+CiAgICAgPE5vbmUg
SW5jbHVkZT0iLi5cYmluZGluZ3Ncc2NyaXB0c1xwcmVwcm9jZXNzLWlkbHMucGwiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBZHZhbmNlZFNlYXJjaENvbnRy
b2xsZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxB
cHBsaWNhdGlvbkNhY2hlSXRlbXNWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcQXBwbGljYXRpb25DYWNoZU1vZGVsLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRDYXRlZ29yaWVzLmpzIiAvPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRGb3JtYXR0ZXJz
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRM
YXVuY2hlclZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxBdWRpdFJlc3VsdFZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxBdWRpdFJ1bGVzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcYXVkaXRzUGFuZWwuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRzUGFuZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUu
anMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxicmVhZGNy
dW1iTGlzdC5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxCcmVha3BvaW50TWFuYWdlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXEJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDYWxsU3RhY2tTaWRlYmFyUGFuZS5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNhbnZhc1Byb2ZpbGVy
LmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENhbnZh
c1Byb2ZpbGVWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcQ2hlY2tib3guanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxjbVxjbWRldnRvb2xzLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXGNtXGNvZGVtaXJyb3IuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY21cY29kZW1pcnJvci5qcyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvZGVNaXJyb3JUZXh0RWRpdG9yLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29sb3IuanMiIC8+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb21waWxlclNjcmlw
dE1hcHBpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxDb25zb2xlTWVzc2FnZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXENvbnNvbGVNb2RlbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVQYW5lbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29udGVudFByb3ZpZGVyLmpzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29udGVudFByb3ZpZGVycy5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnRleHRNZW51
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29va2ll
SXRlbXNWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcQ29va2llUGFyc2VyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcQ29va2llc1RhYmxlLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcQ1BVUHJvZmlsZVZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjc3MuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxDU1NNZXRhZGF0YS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENTU05hbWVkRmxvd0NvbGxlY3Rpb25zVmlldy5q
cyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNzc05hbWVk
Rmxvd3MuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
Q1NTTmFtZWRGbG93Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXENTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDU1NTdHlsZU1vZGVsLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRGF0YWJhc2UuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEYXRhYmFzZVF1ZXJ5Vmlldy5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERhdGFiYXNlVGFi
bGVWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
ZGF0YUdyaWQuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcRGF0YUdyaWQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxEZWJ1Z2dlck1vZGVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcRGVidWdnZXJTY3JpcHRNYXBwaW5nLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRGVmYXVsdFNjcmlwdE1hcHBpbmcuanMiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEZWZhdWx0VGV4dEVkaXRv
ci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGRpYWxv
Zy5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEaWFs
b2cuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEaXJl
Y3RvcnlDb250ZW50Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXERvY2tDb250cm9sbGVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcRE9NQWdlbnQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxET01CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRE9NRXh0ZW5zaW9uLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRE9NUHJlc2VudGF0
aW9uVXRpbHMuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxET01TdG9yYWdlLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRE9NU3RvcmFnZUl0ZW1zVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXERPTVN5bnRheEhpZ2hsaWdodGVyLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRHJhd2VyLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcZWxlbWVudHNQYW5lbC5jc3MiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFbGVtZW50c1BhbmVsLmpz
IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRWxlbWVudHNQ
YW5lbERlc2NyaXB0b3IuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxFbGVtZW50c1RyZWVPdXRsaW5lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcRW1wdHlWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRXZlbnRMaXN0ZW5lcnNTaWRlYmFyUGFuZS5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvbkFQSS5q
cyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lv
bkF1ZGl0Q2F0ZWdvcnkuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxFeHRlbnNpb25QYW5lbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvblJlZ2lzdHJ5U3R1Yi5qcyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvblNlcnZlci5qcyIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvblZpZXcuanMi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGaWxlQ29udGVu
dFZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxG
aWxlTWFuYWdlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXEZpbGVNYXBwaW5nLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcRmlsZVN5c3RlbU1hcHBpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxGaWxlU3lzdGVtTW9kZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGaWxlU3lzdGVtVmlldy5qcyIgLz4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZpbGVTeXN0ZW1Xb3Jrc3BhY2VQ
cm92aWRlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XEZpbGVVdGlscy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXGZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuanMi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGbGFtZUNoYXJ0
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRm9udFZp
ZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxHb1Rv
TGluZURpYWxvZy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXEhhbmRsZXJSZWdpc3RyeS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXEhBUkVudHJ5LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcaGVhcFByb2ZpbGVyLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdERhdGFHcmlkcy5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdEdy
aWROb2Rlcy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XEhlYXBTbmFwc2hvdExvYWRlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdFByb3h5LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90Vmlldy5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdFdvcmtlci5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hv
dFdvcmtlckRpc3BhdGNoZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxoZWxwU2NyZWVuLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEhlbHBTY3JlZW4uanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxjbVxodG1sbWl4ZWQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjbG9zZWJyYWNrZXRzLmpzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY21cbWF0Y2hicmFja2V0cy5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEltYWdlVmlldy5q
cyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEluZGV4ZWRE
Qk1vZGVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
aW5kZXhlZERCVmlld3MuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcSW5kZXhlZERCVmlld3MuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3IuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcaW5zcGVjdG9yLmh0bWwiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3IuanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJbnNwZWN0b3JCYWNrZW5kLmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcaW5zcGVjdG9yQ29tbW9uLmNz
cyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEluc3BlY3Rv
ckZyb250ZW5kQVBJLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGluc3BlY3RvclN5bnRheEhpZ2hsaWdodC5jc3MiIC8+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJbnNwZWN0b3JWaWV3
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSXNvbGF0
ZWRGaWxlU3lzdGVtTW9kZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxjbVxqYXZhc2NyaXB0LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcSmF2YVNjcmlwdEZvcm1hdHRlci5qcyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEphdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGpzZGlmZmxpYi5q
cyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEpTSGVhcFNu
YXBzaG90LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
S2V5Ym9hcmRTaG9ydGN1dC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXExpbmtpZmllci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXExpdmVFZGl0U3VwcG9ydC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXE1ldHJpY3NTaWRlYmFyUGFuZS5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5hdGl2ZUJyZWFrcG9pbnRzU2lkZWJh
clBhbmUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxO
YXRpdmVIZWFwR3JhcGguanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxOYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXG5hdmlnYXRvclZpZXcuY3NzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTmF2aWdhdG9yVmlldy5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5ldHdvcmtJdGVtVmll
dy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5ldHdv
cmtMb2cuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxu
ZXR3b3JrTG9nVmlldy5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxOZXR3b3JrTWFuYWdlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXG5ldHdvcmtQYW5lbC5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3b3JrUGFuZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3b3JrUGFuZWxEZXNjcmlwdG9yLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTmV0d29ya1JlcXVl
c3QuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3
b3JrVUlTb3VyY2VDb2RlUHJvdmlkZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxJbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyLmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcT2JqZWN0LmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcT2JqZWN0UG9wb3ZlckhlbHBl
ci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE9iamVj
dFByb3BlcnRpZXNTZWN0aW9uLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcT3ZlcnJpZGVzVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXE92ZXJ2aWV3R3JpZC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFBhbmVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRccGFuZWxFbmFibGVyVmlldy5jc3MiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQYW5lbEVuYWJsZXJWaWV3LmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVWdsaWZ5SlNccGFy
c2UtanMuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQ
YXJzZWRVUkwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxQbGFjYXJkLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRccG9wb3Zlci5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxQb3BvdmVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcUHJlc2VudGF0aW9uQ29uc29sZU1lc3NhZ2VIZWxwZXIuanMiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9maWxlRGF0YUdyaWRUcmVlLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUHJvZmlsZUxhdW5j
aGVyVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XFByb2ZpbGVzUGFuZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxQcm9ncmVzcy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFByb2dyZXNzSW5kaWNhdG9yLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcUHJvcGVydGllc1NlY3Rpb24uanMiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9wZXJ0aWVzU2lkZWJhclBhbmUuanMi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZW1vdGVPYmpl
Y3QuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXF1
ZXN0Q29va2llc1ZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxSZXF1ZXN0SGVhZGVyc1ZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0SFRNTFZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0SlNPTlZpZXcuanMiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0UHJldmlld1ZpZXcu
anMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0
UmVzcG9uc2VWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcUmVxdWVzdFRpbWluZ1ZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlc291cmNlLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2VTY3JpcHRNYXBwaW5nLmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRccmVzb3VyY2VzUGFuZWwuY3Nz
IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2Vz
UGFuZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxS
ZXNvdXJjZVRyZWVNb2RlbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFJlc291cmNlVHlwZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFJlc291cmNlVXRpbHMuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxyZXNvdXJjZVZpZXcuY3NzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2VWaWV3LmpzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2VXZWJTb2NrZXRGcmFt
ZVZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxy
ZXZpc2lvbkhpc3RvcnkuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcUmV2aXNpb25IaXN0b3J5Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJ1bnRpbWVNb2RlbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNBU1NTb3VyY2VNYXBwaW5nLmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2NvcGVDaGFpblNpZGViYXJQ
YW5lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2Ny
aXB0LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2Ny
aXB0Rm9ybWF0dGVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcU2NyaXB0c05hdmlnYXRvci5qcyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjcmlwdFNuaXBwZXRNb2RlbC5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHNjcmlwdHNQYW5lbC5j
c3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHRz
UGFuZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxT
Y3JpcHRzUGFuZWxEZXNjcmlwdG9yLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcU2NyaXB0c1NlYXJjaFNjb3BlLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2VhcmNoQ29udHJvbGxlci5qcyIgLz4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNlY3Rpb24uanMiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTZXR0aW5ncy5qcyIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNldHRpbmdzU2NyZWVuLmpz
IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2hvcnRjdXRz
U2NyZWVuLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
U2hvd01vcmVEYXRhR3JpZE5vZGUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxTaWRlYmFyT3ZlcmxheS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNpZGViYXJQYW5lLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2lkZWJhclRyZWVFbGVtZW50LmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2lkZWJhclZpZXcuanMiIC8+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTaW1wbGVXb3Jrc3Bh
Y2VQcm92aWRlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFNuaXBwZXRKYXZhU2NyaXB0U291cmNlRnJhbWUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTbmlwcGV0U3RvcmFnZS5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvZnRDb250ZXh0TWVudS5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJjZUNTU1Rva2Vu
aXplci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNv
dXJjZUZyYW1lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcU291cmNlSFRNTFRva2VuaXplci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VNYXAuanMiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VNYXBwaW5nLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU291cmNlVG9rZW5p
emVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcc3Bl
Y3RydW0uY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
U3BlY3RydW0uanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxzcGxpdFZpZXcuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcU3BsaXRWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcU3RhdHVzQmFyQnV0dG9uLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcU3R5bGVTaGVldE91dGxpbmVEaWFsb2cuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTdHlsZXNTaWRlYmFyUGFuZS5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFN0eWxlc1NvdXJj
ZU1hcHBpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxUYWJiZWRFZGl0b3JDb250YWluZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFx0YWJiZWRQYW5lLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRhYmJlZFBhbmUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXN0Q29udHJvbGxlci5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHRleHRFZGl0b3IuY3NzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvci5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0b3JIaWdo
bGlnaHRlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XFRleHRFZGl0b3JNb2RlbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXHRleHRQcm9tcHQuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcVGV4dFByb21wdC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXFRpbWVsaW5lRnJhbWVDb250cm9sbGVyLmpzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVHcmlkLmpzIiAvPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVNYW5hZ2Vy
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxp
bmVNb2RlbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XFRpbWVsaW5lT3ZlcnZpZXdQYW5lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcdGltZWxpbmVQYW5lbC5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxUaW1lbGluZVBhbmVsLmpzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVQYW5lbERlc2NyaXB0b3IuanMi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUaW1lbGluZVBy
ZXNlbnRhdGlvbk1vZGVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcVG9vbGJhci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcdHJlZW91dGxpbmUuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxVSVNvdXJjZUNvZGUuanMiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxVSVNvdXJjZUNvZGVGcmFt
ZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFVJU3Ry
aW5nLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVUlV
dGlscy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFVz
ZXJBZ2VudFN1cHBvcnQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxVc2VyTWV0cmljcy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXHV0aWxpdGllcy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxXYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxXb3JrZXJzU2lkZWJhclBhbmUuanMi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxXb3Jrc3BhY2Uu
anMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVx4bWwu
anMiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cUmVzb3VyY2VzXHBsdWdJbnMuanMiIC8+CiAg
ICAgPE5vbmUgSW5jbHVkZT0iV2ViQ29yZVBvc3RCdWlsZC5jbWQiIC8+CiAgICAgPE5vbmUgSW5j
bHVkZT0iV2ViQ29yZVByZUJ1aWxkLmNtZCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBhYWIyZDk2Li43
MjIwNGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0yNzQsOSArMjc0LDYgQEAKICAgICA8RmlsdGVyIElu
Y2x1ZGU9Imluc3BlY3RvciI+CiAgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NTdhOTMyNTktYmMy
NS00NGQ1LWJmM2ItMDdiMmJlZDQ0MGJkfTwvVW5pcXVlSWRlbnRpZmllcj4KICAgICA8L0ZpbHRl
cj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9Imluc3BlY3Rvclxmcm9udC1lbmQiPgotICAgICAgPFVu
aXF1ZUlkZW50aWZpZXI+ezMyYWJhZDc4LWU0ODQtNGViYi1iMTgxLTNhNjEyYmRmNjdmOX08L1Vu
aXF1ZUlkZW50aWZpZXI+Ci0gICAgPC9GaWx0ZXI+CiAgICAgPEZpbHRlciBJbmNsdWRlPSJGb3J3
YXJkaW5nSGVhZGVyc1xydW50aW1lIj4KICAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnsyOTM0OGI5
YS04NTFlLTQzYWItYjEwYi02NTNjYzBkODkwMmF9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwv
RmlsdGVyPgpAQCAtMTQ1ODIsNzgzICsxNDU3OSw2IEBACiAgICAgPE5vbmUgSW5jbHVkZT0iLi5c
YmluZGluZ3Ncc2NyaXB0c1xwcmVwcm9jZXNzLWlkbHMucGwiPgogICAgICAgPEZpbHRlcj5iaW5k
aW5nc1xzY3JpcHRzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcQWR2YW5jZWRTZWFyY2hDb250cm9sbGVyLmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEFwcGxpY2F0aW9uQ2FjaGVJdGVt
c1ZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXBw
bGljYXRpb25DYWNoZU1vZGVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXEF1ZGl0Q2F0ZWdvcmllcy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxBdWRpdEZvcm1hdHRlcnMuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRMYXVuY2hlclZpZXcuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRSZXN1bHRWaWV3LmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEF1ZGl0UnVsZXMuanMiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcYXVkaXRzUGFuZWwuY3Nz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEF1ZGl0c1BhbmVs
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJvdHRvbVVw
UHJvZmlsZURhdGFHcmlkVHJlZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxicmVhZGNydW1iTGlzdC5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcQnJlYWtwb2ludE1hbmFnZXIuanMiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDYWxsU3RhY2tTaWRlYmFy
UGFuZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAg
ICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjYW52
YXNQcm9maWxlci5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcQ2FudmFzUHJvZmlsZVZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcQ2hlY2tib3guanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcY21cY21kZXZ0b29scy5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcY21cY29kZW1pcnJvci5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY21cY29kZW1pcnJvci5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb2RlTWlycm9yVGV4dEVkaXRvci5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb2xvci5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb21waWxlclNjcmlwdE1hcHBp
bmcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29s
ZU1lc3NhZ2UuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
Q29uc29sZU1vZGVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXENvbnNvbGVQYW5lbC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxDb25zb2xlVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxDb250ZW50UHJvdmlkZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcQ29udGVudFByb3ZpZGVycy5qcyI+Ci0gICAgICA8RmlsdGVyPmlu
c3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb250ZXh0TWVudS5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb29raWVJdGVtc1ZpZXcuanMiPgotICAgICAg
PEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29va2llUGFyc2VyLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvb2tpZXNUYWJsZS5qcyI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDUFVQcm9maWxlVmll
dy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjc3Mu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ1NTTWV0YWRh
dGEuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ1NTTmFt
ZWRGbG93Q29sbGVjdGlvbnNWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250
LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXGNzc05hbWVkRmxvd3MuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXENTU05hbWVkRmxvd1ZpZXcuanMiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDU1NTdHlsZU1vZGVsLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERhdGFiYXNlLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERhdGFiYXNlUXVl
cnlWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERh
dGFiYXNlVGFibGVWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXGRhdGFHcmlkLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxEYXRhR3JpZC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxEZWJ1Z2dlck1vZGVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250
LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXERlYnVnZ2VyU2NyaXB0TWFwcGluZy5qcyI+Ci0gICAgICA8RmlsdGVyPmlu
c3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEZWZhdWx0U2NyaXB0TWFwcGluZy5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEZWZhdWx0VGV4dEVkaXRvci5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxkaWFsb2cuY3Nz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERpYWxvZy5qcyI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEaXJlY3RvcnlDb250
ZW50Vmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxE
b2NrQ29udHJvbGxlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxET01BZ2VudC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxET01CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTUV4dGVuc2lvbi5qcyI+Ci0gICAgICA8RmlsdGVyPmlu
c3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxET01QcmVzZW50YXRpb25VdGlscy5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxET01TdG9yYWdlLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTVN0b3JhZ2VJdGVtc1Zp
ZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRE9NU3lu
dGF4SGlnaGxpZ2h0ZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRHJhd2VyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXGVsZW1lbnRzUGFuZWwuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXEVsZW1lbnRzUGFuZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcRWxlbWVudHNQYW5lbERlc2NyaXB0b3IuanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRWxlbWVudHNUcmVlT3V0bGluZS5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFbXB0eVZpZXcuanMiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRXZlbnRMaXN0ZW5lcnNT
aWRlYmFyUGFuZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxFeHRlbnNpb25BUEkuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRXh0ZW5zaW9uQXVkaXRDYXRlZ29yeS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxFeHRlbnNpb25QYW5lbC5qcyI+Ci0gICAgICA8RmlsdGVyPmlu
c3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFeHRlbnNpb25SZWdpc3RyeVN0dWIuanMiPgotICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRXh0ZW5zaW9uU2VydmVyLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvblZp
ZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZUNv
bnRlbnRWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XEZpbGVNYW5hZ2VyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXEZpbGVNYXBwaW5nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXEZpbGVTeXN0ZW1NYXBwaW5nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEZpbGVTeXN0ZW1Nb2RlbC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxGaWxlU3lzdGVtVmlldy5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGaWxlU3lzdGVtV29ya3NwYWNlUHJvdmlkZXIu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZVV0aWxz
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGZpbHRlcmVk
SXRlbVNlbGVjdGlvbkRpYWxvZy5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcRmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmpzIj4KLSAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZsYW1lQ2hhcnQuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRm9udFZpZXcuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcR29Ub0xpbmVEaWFsb2cuanMiPgotICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGFuZGxlclJlZ2lzdHJ5Lmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhBUkVudHJ5Lmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGhlYXBQcm9maWxl
ci5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNu
YXBzaG90LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhl
YXBTbmFwc2hvdERhdGFHcmlkcy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxIZWFwU25hcHNob3RHcmlkTm9kZXMuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90TG9hZGVyLmpzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdFByb3h5LmpzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdFZp
ZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNu
YXBzaG90V29ya2VyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXEhlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcaGVscFNjcmVlbi5jc3MiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVscFNjcmVlbi5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxodG1sbWl4ZWQuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY21cY2xvc2VicmFja2V0cy5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxtYXRjaGJyYWNrZXRz
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEltYWdlVmll
dy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJbmRleGVk
REJNb2RlbC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxp
bmRleGVkREJWaWV3cy5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcSW5kZXhlZERCVmlld3MuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcaW5zcGVjdG9yLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9u
dC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxpbnNwZWN0b3IuaHRtbCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3IuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcSW5zcGVjdG9yQmFja2VuZC5qcyI+Ci0gICAgICA8RmlsdGVyPmlu
c3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3JDb21tb24uY3NzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEluc3BlY3RvckZyb250ZW5kQVBJLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEluc3BlY3RvckZy
b250ZW5kSG9zdFN0dWIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcaW5zcGVjdG9yU3ludGF4SGlnaGxpZ2h0LmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxJbnNwZWN0b3JWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXElzb2xhdGVkRmlsZVN5c3RlbU1vZGVsLmpzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGphdmFzY3JpcHQu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSmF2YVNjcmlw
dEZvcm1hdHRlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxKYXZhU2NyaXB0U291cmNlRnJhbWUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcanNkaWZmbGliLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEpTSGVhcFNuYXBzaG90LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXEtleWJvYXJkU2hvcnRjdXQuanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTGlua2lmaWVyLmpzIj4KLSAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXExpdmVFZGl0U3VwcG9ydC5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxNZXRyaWNzU2lkZWJhclBhbmUu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTmF0aXZlQnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxOYXRpdmVIZWFwR3JhcGguanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcTmF2aWdhdG9yT3ZlcmxheUNvbnRyb2xsZXIuanMiPgotICAgICAg
PEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcbmF2aWdhdG9yVmlldy5jc3MiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTmF2aWdhdG9yVmlldy5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3b3JrSXRl
bVZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTmV0
d29ya0xvZy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxu
ZXR3b3JrTG9nVmlldy5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcTmV0d29ya01hbmFnZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcbmV0d29ya1BhbmVsLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxOZXR3b3JrUGFuZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcTmV0d29ya1BhbmVsRGVzY3JpcHRvci5qcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3b3JrUmVxdWVzdC5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3b3JrVUlTb3VyY2VD
b2RlUHJvdmlkZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcSW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxPYmplY3QuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcT2JqZWN0UG9wb3ZlckhlbHBlci5qcyI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxPYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxPdmVycmlkZXNW
aWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAg
IDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE92ZXJ2
aWV3R3JpZC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQ
YW5lbC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAg
ICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxwYW5l
bEVuYWJsZXJWaWV3LmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxQYW5lbEVuYWJsZXJWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250
LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXFVnbGlmeUpTXHBhcnNlLWpzLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFBhcnNlZFVSTC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxQbGFjYXJkLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXHBvcG92ZXIuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFBvcG92ZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcUHJlc2VudGF0aW9uQ29uc29sZU1lc3NhZ2VIZWxwZXIuanMi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25l
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUHJvZmlsZURhdGFH
cmlkVHJlZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQ
cm9maWxlTGF1bmNoZXJWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFByb2ZpbGVzUGFuZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcUHJvZ3Jlc3MuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcUHJvZ3Jlc3NJbmRpY2F0b3IuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUHJvcGVydGllc1NlY3Rpb24uanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUHJvcGVydGllc1NpZGViYXJQYW5lLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlbW90ZU9iamVj
dC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0
Q29va2llc1ZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcUmVxdWVzdEhlYWRlcnNWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250
LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXFJlcXVlc3RIVE1MVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0SlNPTlZpZXcuanMiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVxdWVzdFByZXZpZXdWaWV3LmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlcXVlc3RSZXNwb25zZVZpZXcu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVxdWVzdFRp
bWluZ1ZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
UmVxdWVzdFZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcUmVzb3VyY2UuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcUmVzb3VyY2VTY3JpcHRNYXBwaW5nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXHJlc291cmNlc1BhbmVsLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZXNQYW5lbC5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZVRyZWVNb2RlbC5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZVR5cGUuanMiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2VVdGlscy5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxyZXNvdXJjZVZp
ZXcuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAg
IDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlc291
cmNlVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxS
ZXNvdXJjZVdlYlNvY2tldEZyYW1lVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxyZXZpc2lvbkhpc3RvcnkuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5z
cGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJldmlzaW9uSGlzdG9yeVZpZXcuanMiPgotICAgICAg
PEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUnVudGltZU1vZGVsLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNBU1NTb3VyY2VNYXBwaW5n
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjb3BlQ2hh
aW5TaWRlYmFyUGFuZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxTY3JpcHQuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcU2NyaXB0Rm9ybWF0dGVyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFNjcmlwdEZvcm1hdHRlcldvcmtlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHRzTmF2aWdhdG9yLmpzIj4KLSAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjcmlwdFNuaXBwZXRNb2RlbC5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxzY3JpcHRzUGFuZWwuY3Nz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjcmlwdHNQYW5l
bC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHRz
UGFuZWxEZXNjcmlwdG9yLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFNjcmlwdHNTZWFyY2hTY29wZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxTZWFyY2hDb250cm9sbGVyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5z
cGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNlY3Rpb24uanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2V0dGluZ3MuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2V0dGluZ3NTY3JlZW4uanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2hvcnRjdXRzU2NyZWVuLmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNob3dNb3JlRGF0YUdyaWROb2Rl
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNpZGViYXJP
dmVybGF5LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNp
ZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XFNpZGViYXJUcmVlRWxlbWVudC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxTaWRlYmFyVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9u
dC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxTaW1wbGVXb3Jrc3BhY2VQcm92aWRlci5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTbmlwcGV0SmF2YVNjcmlwdFNvdXJjZUZyYW1l
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNuaXBwZXRT
dG9yYWdlLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNv
ZnRDb250ZXh0TWVudS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxTb3VyY2VDU1NUb2tlbml6ZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcU291cmNlRnJhbWUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcU291cmNlSFRNTFRva2VuaXplci5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VKYXZhU2NyaXB0VG9rZW5pemVyLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJjZU1hcC5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VNYXBw
aW5nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAg
IDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJj
ZVRva2VuaXplci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxzcGVjdHJ1bS5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcU3BlY3RydW0uanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcc3BsaXRWaWV3LmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxTcGxpdFZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcU3RhdHVzQmFyQnV0dG9uLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250
LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXFN0eWxlU2hlZXRPdXRsaW5lRGlhbG9nLmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFN0eWxlc1NpZGViYXJQYW5lLmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFN0eWxlc1NvdXJjZU1hcHBpbmcu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGFiYmVkRWRp
dG9yQ29udGFpbmVyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXHRhYmJlZFBhbmUuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFRhYmJlZFBhbmUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcVGVzdENvbnRyb2xsZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcdGV4dEVkaXRvci5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxUZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvck1vZGVsLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHRleHRQcm9tcHQuY3NzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRQcm9tcHQuanMi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25l
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVGcmFt
ZUNvbnRyb2xsZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcVGltZWxpbmVHcmlkLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFRpbWVsaW5lTWFuYWdlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9u
dC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxUaW1lbGluZU1vZGVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXFRpbWVsaW5lT3ZlcnZpZXdQYW5lLmpzIj4KLSAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHRpbWVsaW5lUGFuZWwuY3NzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRpbWVsaW5lUGFuZWwuanMiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVQYW5lbERl
c2NyaXB0b3IuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
VGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxUb29sYmFyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHRyZWVvdXRsaW5lLmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFVJU291cmNlQ29kZS5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxVSVNvdXJjZUNvZGVGcmFt
ZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxVSVN0cmlu
Zy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxVSVV0aWxz
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFVzZXJBZ2Vu
dFN1cHBvcnQuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
VXNlck1ldHJpY3MuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcdXRpbGl0aWVzLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
V2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXFdvcmtlcnNTaWRlYmFyUGFuZS5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxXb3Jrc3BhY2UuanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY21ceG1sLmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KICAgICA8Tm9uZSBJbmNs
dWRlPSJXZWJDb3JlUG9zdEJ1aWxkLmNtZCIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSJXZWJDb3Jl
UHJlQnVpbGQuY21kIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXGNzc1xtYXRobWwuY3NzIj4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA1ZjMxMTMxLi45ODc4MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDgxMyw0OCArMjQ4MTMsNiBAQAogLyogRW5k
IFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTaGVsbFNj
cmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkxQzVGOUQ3NjBFMDlBMUI0MDBFOTFEMEEgLyog
U3RyZWFtbGluZSBJbnNwZWN0b3IgU291cmNlICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3Jp
cHRCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJKTsKLQkJCWlucHV0UGF0aHMgPSAoCi0JCQkJIiQoVEFSR0VUX0JVSUxEX0RJUikv
JChVTkxPQ0FMSVpFRF9SRVNPVVJDRVNfRk9MREVSX1BBVEgpL2luc3BlY3RvciIsCi0JCQkJIiQo
U1JDUk9PVCkvaW5zcGVjdG9yL2NvbWJpbmUtamF2YXNjcmlwdC1yZXNvdXJjZXMucGwiLAotCQkJ
CSIkKFNSQ1JPT1QpL2luc3BlY3Rvci9pbmxpbmUtamF2YXNjcmlwdC1pbXBvcnRzLnB5IiwKLQkJ
CSk7Ci0JCQluYW1lID0gIlN0cmVhbWxpbmUgSW5zcGVjdG9yIFNvdXJjZSI7Ci0JCQlvdXRwdXRQ
YXRocyA9ICgKLQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS9XZWJDb3JlL2luc3BlY3Rvci5odG1s
IiwKLQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS9XZWJDb3JlL2luc3BlY3Rvci5qcyIsCi0JCQkJ
IiQoREVSSVZFRF9GSUxFX0RJUikvV2ViQ29yZS9FbGVtZW50c1BhbmVsLmpzIiwKLQkJCQkiJChE
RVJJVkVEX0ZJTEVfRElSKS9XZWJDb3JlL1Jlc291cmNlc1BhbmVsLmpzIiwKLQkJCQkiJChERVJJ
VkVEX0ZJTEVfRElSKS9XZWJDb3JlL05ldHdvcmtQYW5lbC5qcyIsCi0JCQkJIiQoREVSSVZFRF9G
SUxFX0RJUikvV2ViQ29yZS9TY3JpcHRzUGFuZWwuanMiLAotCQkJCSIkKERFUklWRURfRklMRV9E
SVIpL1dlYkNvcmUvVGltZWxpbmVQYW5lbC5qcyIsCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikv
V2ViQ29yZS9Qcm9maWxlc1BhbmVsLmpzIiwKLQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS9XZWJD
b3JlL0F1ZGl0c1BhbmVsLmpzIiwKLQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS9XZWJDb3JlL0Nv
ZGVNaXJyb3JUZXh0RWRpdG9yLmpzIiwKLQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS9XZWJDb3Jl
L1NjcmlwdEZvcm1hdHRlcldvcmtlci5qcyIsCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxT
Y3JpcHQgPSAiIyBEb24ndCBkbyBhbnl0aGluZyBmb3IgRGVidWcgYnVpbGRzLCBzbyB0aGUgSW5z
cGVjdG9yIGlzIGVhc2llciB0byBkZWJ1Zy5cbiMgRG9uJ3QgZG8gYW55dGhpbmcgZm9yIFByb2R1
Y3Rpb24gYnVpbGRzLCBzaW5jZSB0aGUgSW5zcGVjdG9yIGlzbid0IGluc3RhbGxlZC5cbmlmIFtb
ICR7Q09ORklHVVJBVElPTjo9RGVidWd9ID09IFwiRGVidWdcIiB8fCAke0NPTkZJR1VSQVRJT046
PVByb2R1Y3Rpb259ID09IFwiUHJvZHVjdGlvblwiIF1dOyB0aGVuXG4gICAgZXhpdFxuZmlcblxu
IyBDb21iaW5lIGFsbCBzY3JpcHQgcmVzb3VyY2VzIGluIHRoZSBpbnNwZWN0b3IuaHRtbCBmaWxl
LlxuXCIkU1JDUk9PVC9pbnNwZWN0b3IvY29tYmluZS1qYXZhc2NyaXB0LXJlc291cmNlcy5wbFwi
IC0taW5wdXQtaHRtbCBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
aHRtbFwiIC0tZ2VuZXJhdGVkLXNjcmlwdHMtZGlyIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmVcIiAtLW91dHB1dC1kaXIgXCIke0RFUklWRURfRklMRV9ESVJ9
L1dlYkNvcmVcIiAtLW91dHB1dC1zY3JpcHQtbmFtZSBpbnNwZWN0b3IuanNcblxuIyBJbmxpbmUg
c2NyaXB0IGltcG9ydHMgaW4gRWxlbWVudHNQYW5lbC5qcyBmaWxlLlxuXCIkU1JDUk9PVC9pbnNw
ZWN0b3IvaW5saW5lLWphdmFzY3JpcHQtaW1wb3J0cy5weVwiIFwiJHtTUkNST09UfS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanNcIiBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zy
b250LWVuZFwiIFwiJHtERVJJVkVEX0ZJTEVfRElSfS9XZWJDb3JlL0VsZW1lbnRzUGFuZWwuanNc
IlxuXG4jIElubGluZSBzY3JpcHQgaW1wb3J0cyBpbiBSZXNvdXJjZXNQYW5lbC5qcyBmaWxlLlxu
XCIkU1JDUk9PVC9pbnNwZWN0b3IvaW5saW5lLWphdmFzY3JpcHQtaW1wb3J0cy5weVwiIFwiJHtT
UkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzXCIgXCIke1NSQ1JP
T1R9L2luc3BlY3Rvci9mcm9udC1lbmRcIiBcIiR7REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9S
ZXNvdXJjZXNQYW5lbC5qc1wiXG5cbiMgSW5saW5lIHNjcmlwdCBpbXBvcnRzIGluIE5ldHdvcmtQ
YW5lbC5qcyBmaWxlLlxuXCIkU1JDUk9PVC9pbnNwZWN0b3IvaW5saW5lLWphdmFzY3JpcHQtaW1w
b3J0cy5weVwiIFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtQYW5lbC5q
c1wiIFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kXCIgXCIke0RFUklWRURfRklMRV9E
SVJ9L1dlYkNvcmUvTmV0d29ya1BhbmVsLmpzXCJcblxuIyBJbmxpbmUgc2NyaXB0IGltcG9ydHMg
aW4gU2NyaXB0c1BhbmVsLmpzIGZpbGUuXG5cIiRTUkNST09UL2luc3BlY3Rvci9pbmxpbmUtamF2
YXNjcmlwdC1pbXBvcnRzLnB5XCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmQvU2Ny
aXB0c1BhbmVsLmpzXCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmRcIiBcIiR7REVS
SVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9TY3JpcHRzUGFuZWwuanNcIlxuXG4jIElubGluZSBzY3Jp
cHQgaW1wb3J0cyBpbiBUaW1lbGluZVBhbmVsLmpzIGZpbGUuXG5cIiRTUkNST09UL2luc3BlY3Rv
ci9pbmxpbmUtamF2YXNjcmlwdC1pbXBvcnRzLnB5XCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9m
cm9udC1lbmQvVGltZWxpbmVQYW5lbC5qc1wiIFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQt
ZW5kXCIgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUvVGltZWxpbmVQYW5lbC5qc1wiXG5c
biMgSW5saW5lIHNjcmlwdCBpbXBvcnRzIGluIFByb2ZpbGVzUGFuZWwuanMgZmlsZS5cblwiJFNS
Q1JPT1QvaW5zcGVjdG9yL2lubGluZS1qYXZhc2NyaXB0LWltcG9ydHMucHlcIiBcIiR7U1JDUk9P
VH0vaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzXCIgXCIke1NSQ1JPT1R9L2lu
c3BlY3Rvci9mcm9udC1lbmRcIiBcIiR7REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9Qcm9maWxl
c1BhbmVsLmpzXCJcblxuIyBJbmxpbmUgc2NyaXB0IGltcG9ydHMgaW4gQXVkaXRzUGFuZWwuanMg
ZmlsZS5cblwiJFNSQ1JPT1QvaW5zcGVjdG9yL2lubGluZS1qYXZhc2NyaXB0LWltcG9ydHMucHlc
IiBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdHNQYW5lbC5qc1wiIFwiJHtT
UkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kXCIgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNv
cmUvQXVkaXRzUGFuZWwuanNcIlxuXG4jIElubGluZSBzY3JpcHQgaW1wb3J0cyBpbiBDb2RlTWly
cm9yVGV4dEVkaXRvci5qcyBmaWxlLlxuXCIkU1JDUk9PVC9pbnNwZWN0b3IvaW5saW5lLWphdmFz
Y3JpcHQtaW1wb3J0cy5weVwiIFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvZGVN
aXJyb3JUZXh0RWRpdG9yLmpzXCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmRcIiBc
IiR7REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9Db2RlTWlycm9yVGV4dEVkaXRvci5qc1wiXG5c
biMgSW5saW5lIHNjcmlwdCBpbXBvcnRzIGluIFNjcmlwdEZvcm1hdHRlcldvcmtlci5qcyBmaWxl
LlxuXCIkU1JDUk9PVC9pbnNwZWN0b3IvaW5saW5lLWphdmFzY3JpcHQtaW1wb3J0cy5weVwiIFwi
JHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlcldvcmtlci5qc1wi
IFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kXCIgXCIke0RFUklWRURfRklMRV9ESVJ9
L1dlYkNvcmUvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzXCJcblxuaWYgWyAtZCBcIiR7VEFSR0VU
X0JVSUxEX0RJUn0vJHtVTkxPQ0FMSVpFRF9SRVNPVVJDRVNfRk9MREVSX1BBVEh9L2luc3BlY3Rv
clwiIF07IHRoZW5cbiAgICBjZCBcIiR7VEFSR0VUX0JVSUxEX0RJUn0vJHtVTkxPQ0FMSVpFRF9S
RVNPVVJDRVNfRk9MREVSX1BBVEh9L2luc3BlY3RvclwiXG5cbiAgICAjIFJlbW92ZSBhbnkgdG9w
LWxldmVsIEphdmFTY3JpcHQgZmlsZXMsIHNpbmNlIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRo
IHRoZSBjb21iaW5lZCBmaWxlLlxuICAgICMgS2VlcCBJbnNwZWN0b3JCYWNrZW5kKi5qcyBmaWxl
cyBzbyB0aGV5IGNhbiBiZSB1c2VkIGJ5IG90aGVyIGZyb250LWVuZHMuXG4gICAgZmluZCAuIC1k
ZXB0aCAxIC1uYW1lIFwiKi5qc1wiIC1ub3QgLW5hbWUgXCJJbnNwZWN0b3JCYWNrZW5kKi5qc1wi
IHwgeGFyZ3Mgcm0gLXJmXG5cbiAgICAjIENvcHkgdGhlIG1vZGlmaWVkIEhUTUwgZmlsZSBhbmQg
dGhlIGNvbWJpbmVkIHNjcmlwdHMuXG4gICAgY3AgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNv
cmUvaW5zcGVjdG9yLmh0bWxcIiBpbnNwZWN0b3IuaHRtbFxuICAgIGNwIFwiJHtERVJJVkVEX0ZJ
TEVfRElSfS9XZWJDb3JlL2luc3BlY3Rvci5qc1wiIGluc3BlY3Rvci5qc1xuICAgIGNwIFwiJHtE
RVJJVkVEX0ZJTEVfRElSfS9XZWJDb3JlL0VsZW1lbnRzUGFuZWwuanNcIiBFbGVtZW50c1BhbmVs
LmpzXG4gICAgY3AgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUvUmVzb3VyY2VzUGFuZWwu
anNcIiBSZXNvdXJjZXNQYW5lbC5qc1xuICAgIGNwIFwiJHtERVJJVkVEX0ZJTEVfRElSfS9XZWJD
b3JlL05ldHdvcmtQYW5lbC5qc1wiIE5ldHdvcmtQYW5lbC5qc1xuICAgIGNwIFwiJHtERVJJVkVE
X0ZJTEVfRElSfS9XZWJDb3JlL1NjcmlwdHNQYW5lbC5qc1wiIFNjcmlwdHNQYW5lbC5qc1xuICAg
IGNwIFwiJHtERVJJVkVEX0ZJTEVfRElSfS9XZWJDb3JlL1RpbWVsaW5lUGFuZWwuanNcIiBUaW1l
bGluZVBhbmVsLmpzXG4gICAgY3AgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUvUHJvZmls
ZXNQYW5lbC5qc1wiIFByb2ZpbGVzUGFuZWwuanNcbiAgICBjcCBcIiR7REVSSVZFRF9GSUxFX0RJ
Un0vV2ViQ29yZS9BdWRpdHNQYW5lbC5qc1wiIEF1ZGl0c1BhbmVsLmpzXG4gICAgY3AgXCIke0RF
UklWRURfRklMRV9ESVJ9L1dlYkNvcmUvQ29kZU1pcnJvclRleHRFZGl0b3IuanNcIiBDb2RlTWly
cm9yVGV4dEVkaXRvci5qc1xuICAgIGNwIFwiJHtERVJJVkVEX0ZJTEVfRElSfS9XZWJDb3JlL1Nj
cmlwdEZvcm1hdHRlcldvcmtlci5qc1wiIFNjcmlwdEZvcm1hdHRlcldvcmtlci5qc1xuZmlcbiI7
Ci0JCX07Ci0JCTFDODFCQTMzMEU5NzM1N0MwMDI2NkUwNyAvKiBDb3B5IEluc3BlY3RvciBSZXNv
dXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQ
YXRocyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gIkNvcHkgSW5zcGVjdG9yIFJlc291cmNlcyI7Ci0J
CQlvdXRwdXRQYXRocyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKLQkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICJp
ZiBbWyAke0NPTkZJR1VSQVRJT046PVByb2R1Y3Rpb259ID09IFwiUHJvZHVjdGlvblwiIF1dOyB0
aGVuXG4gICAgIyBEb24ndCBpbnN0YWxsIHRoZSBJbnNwZWN0b3IgZnJvbnQtZW5kIGluIFByb2R1
Y3Rpb24gYnVpbGRzLlxuICAgICMgS2VlcCBJbnNwZWN0b3JCYWNrZW5kKi5qcyBmaWxlcyBzbyB0
aGV5IGNhbiBiZSB1c2VkIGJ5IG90aGVyIGZyb250LWVuZHMuXG4gICAgZGl0dG8gXCIke1NSQ1JP
T1R9L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZC5qc1wiIFwiJHtUQVJHRVRf
QlVJTERfRElSfS8ke1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFUSH0vaW5zcGVjdG9y
L1wiXG4gICAgZGl0dG8gXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanNcIiBcIiR7VEFSR0VUX0JVSUxEX0RJUn0v
JHtVTkxPQ0FMSVpFRF9SRVNPVVJDRVNfRk9MREVSX1BBVEh9L2luc3BlY3Rvci9cIlxuICAgIGV4
aXRcbmZpXG5cbiMgQ29weSBhbGwgdGhlIEluc3BlY3RvciBmcm9udC1lbmQgcmVzb3VyY2VzLlxu
ZGl0dG8gXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmRcIiBcIiR7VEFSR0VUX0JVSUxE
X0RJUn0vJHtVTkxPQ0FMSVpFRF9SRVNPVVJDRVNfRk9MREVSX1BBVEh9L2luc3BlY3RvclwiXG5k
aXR0byBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qc1wiIFwiJHtUQVJHRVRfQlVJTERfRElSfS8ke1VOTE9DQUxJ
WkVEX1JFU09VUkNFU19GT0xERVJfUEFUSH0vaW5zcGVjdG9yL1wiXG5cbiMgUmVtb3ZlIGFueSBx
cmMgZmlsZXMgc2luY2UgdGhleSBhcmUgbm90IHVzZWQgb24gdGhlIE1hYyAodGhleSBhcmUgZm9y
IFF0KS5cbnJtIC1mIFwiJHtUQVJHRVRfQlVJTERfRElSfS8ke1VOTE9DQUxJWkVEX1JFU09VUkNF
U19GT0xERVJfUEFUSH0vaW5zcGVjdG9yL1wiKi5xcmNcblxuIyBSZW1vdmUgKi5yZTJqcyBmaWxl
cywgdGhleSBhcmUgb25seSB1c2VkIHRvIGdlbmVyYXRlIHNvbWUgLmpzIGZpbGVzLlxucm0gLWYg
XCIke1RBUkdFVF9CVUlMRF9ESVJ9LyR7VU5MT0NBTElaRURfUkVTT1VSQ0VTX0ZPTERFUl9QQVRI
fS9pbnNwZWN0b3IvXCIqLnJlMmpzXG5cbiMgUmVtb3ZlIGFueSAuc3ZuIGRpcmVjdG9yaWVzIHRo
YXQgbWF5IGhhdmUgYmVlbiBjb3BpZWQgb3Zlci5cbmZpbmQgXCIke1RBUkdFVF9CVUlMRF9ESVJ9
LyR7VU5MT0NBTElaRURfUkVTT1VSQ0VTX0ZPTERFUl9QQVRIfS9pbnNwZWN0b3JcIiAtbmFtZSBc
Ii5zdm5cIiAtdHlwZSBkIHwgeGFyZ3Mgcm0gLXJmXG4iOwotCQl9OwogCQkzN0ExRUFBMzE0MjY5
OUJDMDA4N0Y0MjUgLyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgT2JqZWN0aXZlLUMgQ2xhc3Mg
TmFtZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5YzMxM2I5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQWNlVGV4dEVkaXRvci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQzOCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWltcG9y
dFNjcmlwdCgiYWNlL2FjZS5qcyIpOwotCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3J9Ci0gKiBAcGFyYW0gez9zdHJpbmd9IHVybAotICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckRlbGVnYXRlfSBkZWxlZ2F0ZQotICovCi0KLVdlYkluc3BlY3Rvci5BY2VU
ZXh0RWRpdG9yID0gZnVuY3Rpb24odXJsLCBkZWxlZ2F0ZSkKLXsKLSAgICBXZWJJbnNwZWN0b3Iu
Vmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci0gICAgdGhp
cy5fdXJsID0gdXJsOwotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlLWVkaXRvci1j
b250YWluZXIgc291cmNlLWNvZGUiOwotCi0gICAgdmFyIHByZWZpeCA9IHdpbmRvdy5mbGF0dGVu
SW1wb3J0cyA/ICIiIDogImFjZS8iOwotICAgIGFjZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2Uv
bW9kZS9qYXZhc2NyaXB0IiwgcHJlZml4ICsgIm1vZGVfamF2YXNjcmlwdC5qcyIpOwotICAgIGFj
ZS5jb25maWcuc2V0TW9kdWxlVXJsKCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwgcHJlZml4ICsgIm1v
ZGVfY3NzLmpzIik7Ci0gICAgYWNlLmNvbmZpZy5zZXRNb2R1bGVVcmwoImFjZS9tb2RlL2phdmFz
Y3JpcHQiLCBwcmVmaXggKyAibW9kZV9odG1sLmpzIik7Ci0gICAgYWNlLmNvbmZpZy5zZXRNb2R1
bGVVcmwoImFjZS90aGVtZS90ZXh0bWF0ZSIsIHByZWZpeCArICJ0aGVtZV90ZXh0bWF0ZS5qcyIp
OwotICAgIHRoaXMuX2FjZUVkaXRvciA9IHdpbmRvdy5hY2UuZWRpdCh0aGlzLmVsZW1lbnQpOwot
Ci0gICAgdGhpcy5fYWNlRWRpdG9yLnNldFNob3dGb2xkV2lkZ2V0cyhmYWxzZSk7Ci0gICAgdGhp
cy5fYWNlRWRpdG9yLnNlc3Npb24uc2V0Rml4ZWRHdXR0ZXJXaWR0aCh0cnVlKTsKLSAgICB0aGlz
Ll9hY2VFZGl0b3Iub24oImd1dHRlcmNsaWNrIiwgdGhpcy5fZ3V0dGVyQ2xpY2suYmluZCh0aGlz
KSk7Ci0gICAgdGhpcy5fYWNlRWRpdG9yLm9uKCJjaGFuZ2UiLCB0aGlzLl9vblRleHRDaGFuZ2Uu
YmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fYWNlRWRpdG9yLnNldEhpZ2hsaWdodEFjdGl2ZUxpbmUo
ZmFsc2UpOwotICAgIHRoaXMuX2FjZUVkaXRvci5zZXNzaW9uLnNldFVzZVdvcmtlcihmYWxzZSk7
Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJhY2UvYWNlZGV2dG9vbHMuY3NzIik7Ci0g
ICAgdGhpcy5fYXR0cmlidXRlcyA9IFtdOwotfQotCi1XZWJJbnNwZWN0b3IuQWNlVGV4dEVkaXRv
ci5wcm90b3R5cGUgPSB7Ci0KLSAgICBfdXBkYXRlQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2FjZUVkaXRvci5zZXNzaW9uLmNsZWFyQnJlYWtwb2ludHMoKTsK
LSAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuX2F0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIHZh
ciBicmVha3BvaW50ID0gdGhpcy5nZXRBdHRyaWJ1dGUoaSwgImFjZV9icmVha3BvaW50Iik7Ci0g
ICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gYnJlYWtwb2ludC5jb25kaXRpb25hbCA/ICJ3ZWJr
aXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIgOiAid2Via2l0LWJyZWFrcG9pbnQiOwotICAgICAg
ICAgICAgaWYgKGJyZWFrcG9pbnQuZGlzYWJsZWQpIGNsYXNzTmFtZSArPSAiIHdlYmtpdC1icmVh
a3BvaW50LWRpc2FibGVkIjsKLSAgICAgICAgICAgIHRoaXMuX2FjZUVkaXRvci5zZXNzaW9uLnNl
dEJyZWFrcG9pbnQoaSwgY2xhc3NOYW1lKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfdXBk
YXRlTGluZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGRlbHRhKSB7Ci0gICAgICAgIHZhciByYW5nZSA9
IGRlbHRhLnJhbmdlOwotICAgICAgICB2YXIgbGVuZ3RoLCBpbnNlcnRpb25JbmRleDsKLQotICAg
ICAgICBpZiAocmFuZ2UuZW5kLnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93KQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT09ICJpbnNlcnRUZXh0Iikgewot
ICAgICAgICAgICAgbGVuZ3RoID0gcmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsKLSAg
ICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gcmFuZ2Uuc3RhcnQuY29sdW1uID09PSAwID8gcmFu
Z2Uuc3RhcnQucm93OiByYW5nZS5zdGFydC5yb3cgKyAxOwotICAgICAgICB9IGVsc2UgaWYgKGRl
bHRhLmFjdGlvbiA9PT0gImluc2VydExpbmVzIikgewotICAgICAgICAgICAgbGVuZ3RoID0gcmFu
Z2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdzsKLSAgICAgICAgICAgIGluc2VydGlvbkluZGV4
ID0gcmFuZ2Uuc3RhcnQucm93OwotICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PT0g
InJlbW92ZVRleHQiKSB7Ci0gICAgICAgICAgICBsZW5ndGggPSByYW5nZS5zdGFydC5yb3cgLSBy
YW5nZS5lbmQucm93OwotICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXggPSByYW5nZS5zdGFydC5y
b3c7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09PSAicmVtb3ZlTGluZXMiKSB7
Ci0gICAgICAgICAgICBsZW5ndGggPSByYW5nZS5zdGFydC5yb3cgLSByYW5nZS5lbmQucm93Owot
ICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXggPSByYW5nZS5zdGFydC5yb3c7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobGVuZ3RoID4gMCkgewotICAgICAgICAgICAgdmFyIHNwbGljZUFyZ3Vt
ZW50cyA9IG5ldyBBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgc3BsaWNlQXJndW1lbnRzLnVu
c2hpZnQoaW5zZXJ0aW9uSW5kZXgsIDApOwotICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNw
bGljZS5hcHBseSh0aGlzLl9hdHRyaWJ1dGVzLCBzcGxpY2VBcmd1bWVudHMpOwotICAgICAgICB9
IGVsc2UgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMuc3Bs
aWNlKGluc2VydGlvbkluZGV4LCAtbGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl91
cGRhdGVCcmVha3BvaW50cygpOwotICAgIH0sCi0KLSAgICBfb25UZXh0Q2hhbmdlOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUxpbmVBdHRyaWJ1dGVzKGV2ZW50
LmRhdGEpOwotICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRleHRDaGFuZ2VkKG51bGwsIG51bGwp
OwotICAgIH0sCi0KLSAgICBfZ3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJzZUludChldmVudC5kb21FdmVudC50YXJnZXQudGV4
dENvbnRlbnQpIC0gMTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnRzLkd1dHRlckNsaWNrLCB7IGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsIGV2ZW50OiBldmVudC5kb21FdmVudCB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gICAgICovCi0gICAgc2V0IG1pbWVUeXBl
KG1pbWVUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoKG1pbWVUeXBlKSB7Ci0gICAgICAgIGNh
c2UgInRleHQvaHRtbCI6Ci0gICAgICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigp
LnNldE1vZGUoImFjZS9tb2RlL2h0bWwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlICJ0ZXh0L2NzcyI6Ci0gICAgICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigp
LnNldE1vZGUoImFjZS9tb2RlL2NzcyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgInRleHQvamF2YXNjcmlwdCI6Ci0gICAgICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vz
c2lvbigpLnNldE1vZGUoImFjZS9tb2RlL2phdmFzY3JpcHQiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
cmVhZE9ubHkKLSAgICAgKi8KLSAgICBzZXRSZWFkT25seTogZnVuY3Rpb24ocmVhZE9ubHkpCi0g
ICAgewotICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2V0UmVhZE9ubHkocmVhZE9ubHkpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHJl
YWRPbmx5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYWNlRWRpdG9y
LmdldFJlYWRPbmx5KCk7Ci0gICAgfSwKLQotICAgIGZvY3VzOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZm9jdXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7RWxlbWVudH0KLSAgICAgKi8KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZmlyc3RDaGls
ZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2V4Ci0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcn0KLSAgICAgKi8KLSAgICBo
aWdobGlnaHRSZWdleDogZnVuY3Rpb24ocmVnZXgsIGNzc0NsYXNzKQotICAgIHsKLSAgICAgICAg
Y29uc29sZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRSZWdleCBub3QgaW1wbGVtZW50ZWQiKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
fSByYW5nZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzcwotICAgICAqLwotICAgIGhp
Z2hsaWdodFJhbmdlOiBmdW5jdGlvbihyYW5nZSwgY3NzQ2xhc3MpCi0gICAgewotICAgICAgICBj
b25zb2xlLmxvZygiYWNlRWRpdG9yLmhpZ2hsaWdodFJhbmdlIG5vdCBpbXBsZW1lbnRlZCIpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLkhpZ2hsaWdodERlc2NyaXB0b3J9IGhpZ2hsaWdodERlc2NyaXB0b3IKLSAgICAg
Ki8KLSAgICByZW1vdmVIaWdobGlnaHQ6IGZ1bmN0aW9uKGhpZ2hsaWdodERlc2NyaXB0b3IpCi0g
ICAgewotICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLnJlbW92ZUhpZ2hsaWdodCBub3Qg
aW1wbGVtZW50ZWQiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVy
KSB7Ci0gICAgICAgIHRoaXMuX2FjZUVkaXRvci5zY3JvbGxUb0xpbmUobGluZU51bWJlciwgZmFs
c2UsIHRydWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZU51bWJlcgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGNvbmRpdGlvbmFsCi0gICAgICovCi0gICAgYWRkQnJlYWtwb2ludDogZnVuY3Rp
b24obGluZU51bWJlciwgZGlzYWJsZWQsIGNvbmRpdGlvbmFsKQotICAgIHsKLSAgICAgICAgdGhp
cy5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImFjZV9icmVha3BvaW50IiwgewotICAgICAgICAg
ICAgZGlzYWJsZWQ6IGRpc2FibGVkLAotICAgICAgICAgICAgY29uZGl0aW9uYWw6IGNvbmRpdGlv
bmFsCi0gICAgICAgIH0pOwotICAgICAgICB0aGlzLl91cGRhdGVCcmVha3BvaW50cygpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAq
LwotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAg
ICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYWNlX2JyZWFrcG9pbnQiKTsK
LSAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtwb2ludHMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBzZXRFeGVjdXRp
b25MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fZXhlY3V0
aW9uTGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIGNvbnN0IFJhbmdlID0gYWNlLnJlcXVpcmUo
J2FjZS9yYW5nZScpLlJhbmdlOwotICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lTWFya2VyID0g
dGhpcy5fYWNlRWRpdG9yLnNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShsaW5lTnVtYmVyLCAw
LCBsaW5lTnVtYmVyLCBJbmZpbml0eSksICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiLCAiZnVsbExp
bmUiKTsKLSAgICAgICAgdGhpcy5fYWNlRWRpdG9yLnNlc3Npb24uYWRkR3V0dGVyRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCAid2Via2l0LWd1dHRlci1leGVjdXRpb24tbGluZSIpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCi0g
ICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGNvcHlSYW5nZTogZnVuY3Rpb24o
cmFuZ2UpCi0gICAgewotICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmNvcHlSYW5nZSBu
b3QgaW1wbGVtZW50ZWQiKTsKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0sCi0KLSAgICBjbGVh
ckV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2FjZUVkaXRv
ci5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLl9leGVjdXRpb25MaW5lTWFya2VyKTsKLSAgICAg
ICAgdGhpcy5fYWNlRWRpdG9yLnNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbih0aGlzLl9l
eGVjdXRpb25MaW5lLCAid2Via2l0LWd1dHRlci1leGVjdXRpb24tbGluZSIpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJh
bSB7RWxlbWVudH0gZWxlbWVudAotICAgICAqLwotICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9u
KGxpbmVOdW1iZXIsIGVsZW1lbnQpCi0gICAgewotICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRp
dG9yLmFkZERlY29yYXRpb24gbm90IGltcGxlbWVudGVkIik7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtFbGVtZW50
fSBlbGVtZW50Ci0gICAgICovCi0gICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51
bWJlciwgZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3IucmVt
b3ZlRGVjb3JhdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqLwotICAgIG1h
cmtBbmRSZXZlYWxSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAgICBjb25zb2xl
LmxvZygiYWNlRWRpdG9yLm1hcmtBbmRSZXZlYWxSYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAg
Ki8KLSAgICBoaWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAg
ICAgY29uc29sZS5sb2coImFjZUVkaXRvci5oaWdobGlnaHRMaW5lIG5vdCBpbXBsZW1lbnRlZCIp
OwotICAgIH0sCi0KLSAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkgewotICAgICAg
ICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmNsZWFyTGluZUhpZ2hsaWdodCBub3QgaW1wbGVtZW50
ZWQiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+
fQotICAgICAqLwotICAgIGVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW107Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3J9IHRleHRFZGl0b3IKLSAgICAgKi8K
LSAgICBpbmhlcml0U2Nyb2xsUG9zaXRpb25zOiBmdW5jdGlvbih0ZXh0RWRpdG9yKQotICAgIHsK
LSAgICAgICAgY29uc29sZS5sb2coImFjZUVkaXRvci5pbmhlcml0U2Nyb2xsUG9zaXRpb25zIG5v
dCBpbXBsZW1lbnRlZCIpOwotICAgIH0sCi0KLSAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkg
eyB9LAotCi0gICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBvblJlc2l6ZTog
ZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5U
ZXh0UmFuZ2V9IHJhbmdlCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKiBAcmV0
dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQotICAgICAqLwotICAgIGVkaXRSYW5nZTogZnVu
Y3Rpb24ocmFuZ2UsIHRleHQpCi0gICAgewotICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9y
LmVkaXRSYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBzY3JvbGxUb0xpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICB0aGlzLl9hY2VFZGl0b3Iuc2Nyb2xs
VG9MaW5lKGxpbmVOdW1iZXIsIGZhbHNlLCB0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICBzZWxlY3Rp
b246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCJhY2VFZGl0b3Iuc2Vs
ZWN0aW9uIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlP30KLSAgICAgKi8KLSAgICBsYXN0U2VsZWN0aW9u
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBjb25zb2xlLmxvZygiYWNlRWRpdG9yLmxhc3RT
ZWxlY3Rpb24gbm90IGltcGxlbWVudGVkIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gdGV4dFJhbmdlCi0gICAgICovCi0gICAgc2V0
U2VsZWN0aW9uOiBmdW5jdGlvbih0ZXh0UmFuZ2UpCi0gICAgewotICAgICAgICB0aGlzLl9hY2VF
ZGl0b3Iuc2Nyb2xsVG9MaW5lKHRleHRSYW5nZS5zdGFydExpbmUsIHRydWUpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dAotICAgICAqLwotICAgIHNldFRl
eHQ6IGZ1bmN0aW9uKHRleHQpCi0gICAgewotICAgICAgICB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vz
c2lvbigpLnNldFZhbHVlKHRleHQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtzdHJpbmd9Ci0gICAgICovCi0gICAgdGV4dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX2FjZUVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAg
Ki8KLSAgICByYW5nZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgY29uc29sZS5sb2coImFj
ZUVkaXRvci5yYW5nZSBub3QgaW1wbGVtZW50ZWQiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0g
ICAgICovCi0gICAgbGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9hY2VFZGl0b3IuZ2V0U2Vzc2lvbigpLmdldExpbmUobGluZU51bWJlcik7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBn
ZXQgbGluZXNDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2FjZUVkaXRvci5nZXRTZXNz
aW9uKCkuZ2V0TGVuZ3RoKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtP
YmplY3R8bnVsbH0gdmFsdWUKLSAgICAgKi8KLSAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxp
bmUsIG5hbWUpCi0gICAgewotICAgICAgICB2YXIgYXR0cnMgPSB0aGlzLl9hdHRyaWJ1dGVzW2xp
bmVdOwotICAgICAgICByZXR1cm4gYXR0cnMgPyBhdHRyc1tuYW1lXSA6IG51bGw7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUKLSAgICAgKiBAcGFyYW0ge09iamVjdD99IHZhbHVlCi0gICAgICovCi0gICAg
c2V0QXR0cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lLCB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHZhciBhdHRycyA9IHRoaXMuX2F0dHJpYnV0ZXNbbGluZV07Ci0gICAgICAgIGlmICghYXR0cnMp
IHsKLSAgICAgICAgICAgIGF0dHJzID0ge307Ci0gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVz
W2xpbmVdID0gYXR0cnM7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAqLwotICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rp
b24obGluZSwgbmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBhdHRycyA9IHRoaXMuX2F0dHJpYnV0
ZXNbbGluZV07Ci0gICAgICAgIGlmIChhdHRycykKLSAgICAgICAgICAgIGRlbGV0ZSBhdHRyc1tu
YW1lXTsKLSAgICB9LAotCi0gICAgd2FzU2hvd246IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWR2YW5jZWRTZWFyY2hDb250cm9sbGVyLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BZHZhbmNlZFNlYXJjaENvbnRy
b2xsZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Mzk5Y2MuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BZHZhbmNlZFNlYXJjaENv
bnRyb2xsZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2OTkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5D
LgotICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuQWR2YW5jZWRTZWFy
Y2hDb250cm9sbGVyID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuX3Nob3J0Y3V0ID0gV2ViSW5z
cGVjdG9yLkFkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5jcmVhdGVTaG9ydGN1dCgpOwotICAgIHRo
aXMuX3NlYXJjaElkID0gMDsKLSAgICAKLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYWR2YW5j
ZWRTZWFyY2hDb25maWcgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZygiYWR2
YW5jZWRTZWFyY2hDb25maWciLCBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaENvbmZpZygiIiwgdHJ1
ZSwgZmFsc2UpKTsKLSAgICAKLSAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5G
cmFtZU5hdmlnYXRlZCwgdGhpcy5fZnJhbWVOYXZpZ2F0ZWQsIHRoaXMpOwotfQotCi0vKioKLSAq
IEByZXR1cm4geyFXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5EZXNjcmlwdG9yfQotICov
Ci1XZWJJbnNwZWN0b3IuQWR2YW5jZWRTZWFyY2hDb250cm9sbGVyLmNyZWF0ZVNob3J0Y3V0ID0g
ZnVuY3Rpb24oKQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSkKLSAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKCJmIiwgV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLk1ldGEgfCBXZWJJbnNwZWN0b3Iu
S2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQWx0KTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigiZiIsIFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsIHwgV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLlNoaWZ0KTsKLX0KLQotV2ViSW5zcGVjdG9yLkFkdmFu
Y2VkU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtLZXlib2FyZEV2ZW50fSBldmVudAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICov
Ci0gICAgaGFuZGxlU2hvcnRjdXQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYg
KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXlGcm9tRXZlbnQoZXZlbnQpID09
PSB0aGlzLl9zaG9ydGN1dC5rZXkpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5fc2VhcmNoVmll
dyB8fCAhdGhpcy5fc2VhcmNoVmlldy5pc1Nob3dpbmcoKSB8fCB0aGlzLl9zZWFyY2hWaWV3Ll9z
ZWFyY2ggIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3Iuc2hvd1BhbmVsKCJzY3JpcHRzIik7Ci0gICAgICAgICAgICAgICAgdGhpcy5zaG93
KCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7Ci0g
ICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBfZnJhbWVO
YXZpZ2F0ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVzZXRTZWFyY2goKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2VhcmNoU2Nv
cGV9IHNlYXJjaFNjb3BlCi0gICAgICovCi0gICAgcmVnaXN0ZXJTZWFyY2hTY29wZTogZnVuY3Rp
b24oc2VhcmNoU2NvcGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IG11bHRp
cGxlIHNlYXJjaCBzY29wZXMuCi0gICAgICAgIHRoaXMuX3NlYXJjaFNjb3BlID0gc2VhcmNoU2Nv
cGU7Ci0gICAgfSwKLQotICAgIHNob3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fc2VhcmNoVmlldykKLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaFZpZXcgPSBuZXcgV2Vi
SW5zcGVjdG9yLlNlYXJjaFZpZXcodGhpcyk7Ci0gICAgICAgIAotICAgICAgICB0aGlzLl9zZWFy
Y2hWaWV3LnN5bmNUb1NlbGVjdGlvbigpOwotCi0gICAgICAgIGlmICh0aGlzLl9zZWFyY2hWaWV3
LmlzU2hvd2luZygpKQotICAgICAgICAgICAgdGhpcy5fc2VhcmNoVmlldy5mb2N1cygpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1ZpZXdJbkRyYXdlcih0aGlz
Ll9zZWFyY2hWaWV3Ll9zZWFyY2hQYW5lbEVsZW1lbnQsIHRoaXMuX3NlYXJjaFZpZXcsIHRoaXMu
c3RvcFNlYXJjaC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgY2xvc2U6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpOwotICAgICAgICBXZWJJbnNwZWN0b3Iu
Y2xvc2VWaWV3SW5EcmF3ZXIoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IHNlYXJjaElkCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2Vh
cmNoUmVzdWx0c1BhbmUuU2VhcmNoUmVzdWx0fSBzZWFyY2hSZXN1bHQKLSAgICAgKi8KLSAgICBf
b25TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKHNlYXJjaElkLCBzZWFyY2hSZXN1bHQpCi0gICAgewot
ICAgICAgICBpZiAoc2VhcmNoSWQgIT09IHRoaXMuX3NlYXJjaElkKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHRoaXMuX3NlYXJjaFZpZXcuYWRkU2VhcmNoUmVzdWx0KHNlYXJjaFJl
c3VsdCk7Ci0gICAgICAgIGlmICghc2VhcmNoUmVzdWx0LnNlYXJjaE1hdGNoZXMubGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hS
ZXN1bHRzUGFuZSkgCi0gICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzUGFuZSA9IHRoaXMu
X2N1cnJlbnRTZWFyY2hTY29wZS5jcmVhdGVTZWFyY2hSZXN1bHRzUGFuZSh0aGlzLl9zZWFyY2hD
b25maWcpOyAgICAgICAgCi0gICAgICAgIHRoaXMuX3NlYXJjaFZpZXcucmVzdWx0c1BhbmUgPSB0
aGlzLl9zZWFyY2hSZXN1bHRzUGFuZTsgCi0gICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHNQYW5l
LmFkZFNlYXJjaFJlc3VsdChzZWFyY2hSZXN1bHQpOwotICAgIH0sCi0gICAgCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IHNlYXJjaElkCi0gICAgICogQHBhcmFtIHtib29sZWFufSBm
aW5pc2hlZAotICAgICAqLwotICAgIF9vblNlYXJjaEZpbmlzaGVkOiBmdW5jdGlvbihzZWFyY2hJ
ZCwgZmluaXNoZWQpCi0gICAgewotICAgICAgICBpZiAoc2VhcmNoSWQgIT09IHRoaXMuX3NlYXJj
aElkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghdGhpcy5fc2VhcmNoUmVz
dWx0c1BhbmUpCi0gICAgICAgICAgICB0aGlzLl9zZWFyY2hWaWV3Lm5vdGhpbmdGb3VuZCgpOwot
ICAgICAgICAKLSAgICAgICAgdGhpcy5fc2VhcmNoVmlldy5zZWFyY2hGaW5pc2hlZChmaW5pc2hl
ZCk7Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5T
ZWFyY2hDb25maWd9IHNlYXJjaENvbmZpZwotICAgICAqLwotICAgIHN0YXJ0U2VhcmNoOiBmdW5j
dGlvbihzZWFyY2hDb25maWcpCi0gICAgewotICAgICAgICB0aGlzLnJlc2V0U2VhcmNoKCk7Ci0g
ICAgICAgICsrdGhpcy5fc2VhcmNoSWQ7Ci0KLSAgICAgICAgdGhpcy5fc2VhcmNoQ29uZmlnID0g
c2VhcmNoQ29uZmlnOwotICAgICAgICAvLyBGSVhNRTogdGhpcy5fY3VycmVudFNlYXJjaFNjb3Bl
IHNob3VsZCBiZSBpbml0aWFsaXplZCBiYXNlZCBvbiBzZWFyY2hDb25maWcKLSAgICAgICAgdGhp
cy5fY3VycmVudFNlYXJjaFNjb3BlID0gdGhpcy5fc2VhcmNoU2NvcGU7Ci0KLSAgICAgICAgdmFy
IHRvdGFsU2VhcmNoUmVzdWx0c0NvdW50ID0gdGhpcy5fY3VycmVudFNlYXJjaFNjb3BlLnBlcmZv
cm1TZWFyY2goc2VhcmNoQ29uZmlnLCB0aGlzLl9vblNlYXJjaFJlc3VsdC5iaW5kKHRoaXMsIHRo
aXMuX3NlYXJjaElkKSwgdGhpcy5fb25TZWFyY2hGaW5pc2hlZC5iaW5kKHRoaXMsIHRoaXMuX3Nl
YXJjaElkKSk7Ci0gICAgICAgIHRoaXMuX3NlYXJjaFZpZXcuc2VhcmNoU3RhcnRlZCh0b3RhbFNl
YXJjaFJlc3VsdHNDb3VudCk7Ci0gICAgfSwKLSAgICAKLSAgICByZXNldFNlYXJjaDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7Ci0KLSAgICAgICAgaWYgKHRo
aXMuX3NlYXJjaFJlc3VsdHNQYW5lKSB7Ci0gICAgICAgICAgICB0aGlzLl9zZWFyY2hWaWV3LnJl
c2V0UmVzdWx0cygpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaFJlc3VsdHNQYW5l
OwotICAgICAgICB9Ci0gICAgfSwKLSAgICAKLSAgICBzdG9wU2VhcmNoOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fY3VycmVudFNlYXJjaFNjb3BlKQotICAgICAgICAgICAg
dGhpcy5fY3VycmVudFNlYXJjaFNjb3BlLnN0b3BTZWFyY2goKTsKLSAgICB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5BZHZhbmNlZFNlYXJjaENvbnRyb2xsZXJ9IGNvbnRyb2xsZXIKLSAq
LwotV2ViSW5zcGVjdG9yLlNlYXJjaFZpZXcgPSBmdW5jdGlvbihjb250cm9sbGVyKQotewotICAg
IFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVk
Q1NTKCJ0ZXh0RWRpdG9yLmNzcyIpOwotICAgIAotICAgIHRoaXMuX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotCi0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJzZWFyY2gtdmlldyI7Ci0K
LSAgICB0aGlzLl9zZWFyY2hQYW5lbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgdGhpcy5fc2VhcmNoUGFuZWxFbGVtZW50LmNsYXNzTmFtZSA9ICJzZWFyY2gt
ZHJhd2VyLWhlYWRlciI7Ci0gICAgdGhpcy5fc2VhcmNoUGFuZWxFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImtleWRvd24iLCB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAg
IAotICAgIHRoaXMuX3NlYXJjaFJlc3VsdHNFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNo
aWxkKCJkaXYiKTsKLSAgICB0aGlzLl9zZWFyY2hSZXN1bHRzRWxlbWVudC5jbGFzc05hbWUgPSAi
c2VhcmNoLXJlc3VsdHMiOwotICAgIAotICAgIHRoaXMuX3NlYXJjaExhYmVsID0gdGhpcy5fc2Vh
cmNoUGFuZWxFbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIik7Ci0gICAgdGhpcy5fc2VhcmNoTGFi
ZWwudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNlYXJjaCBzb3VyY2VzIik7
Ci0gICAgdGhpcy5fc2VhcmNoID0gdGhpcy5fc2VhcmNoUGFuZWxFbGVtZW50LmNyZWF0ZUNoaWxk
KCJpbnB1dCIpOwotICAgIHRoaXMuX3NlYXJjaC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAic2VhcmNo
Iik7Ci0gICAgdGhpcy5fc2VhcmNoLmFkZFN0eWxlQ2xhc3MoInNlYXJjaC1jb25maWctc2VhcmNo
Iik7Ci0gICAgdGhpcy5fc2VhcmNoLnNldEF0dHJpYnV0ZSgicmVzdWx0cyIsICIwIik7Ci0gICAg
dGhpcy5fc2VhcmNoLnNldEF0dHJpYnV0ZSgic2l6ZSIsIDMwKTsKLQotICAgIHRoaXMuX2lnbm9y
ZUNhc2VMYWJlbCA9IHRoaXMuX3NlYXJjaFBhbmVsRWxlbWVudC5jcmVhdGVDaGlsZCgibGFiZWwi
KTsKLSAgICB0aGlzLl9pZ25vcmVDYXNlTGFiZWwuYWRkU3R5bGVDbGFzcygic2VhcmNoLWNvbmZp
Zy1sYWJlbCIpOwotICAgIHRoaXMuX2lnbm9yZUNhc2VDaGVja2JveCA9IHRoaXMuX2lnbm9yZUNh
c2VMYWJlbC5jcmVhdGVDaGlsZCgiaW5wdXQiKTsKLSAgICB0aGlzLl9pZ25vcmVDYXNlQ2hlY2ti
b3guc2V0QXR0cmlidXRlKCJ0eXBlIiwgImNoZWNrYm94Iik7Ci0gICAgdGhpcy5faWdub3JlQ2Fz
ZUNoZWNrYm94LmFkZFN0eWxlQ2xhc3MoInNlYXJjaC1jb25maWctY2hlY2tib3giKTsKLSAgICB0
aGlzLl9pZ25vcmVDYXNlTGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJZ25vcmUgY2FzZSIpKSk7Ci0gICAgCi0gICAgdGhpcy5f
cmVnZXhMYWJlbCA9IHRoaXMuX3NlYXJjaFBhbmVsRWxlbWVudC5jcmVhdGVDaGlsZCgibGFiZWwi
KTsKLSAgICB0aGlzLl9yZWdleExhYmVsLmFkZFN0eWxlQ2xhc3MoInNlYXJjaC1jb25maWctbGFi
ZWwiKTsKLSAgICB0aGlzLl9yZWdleENoZWNrYm94ID0gdGhpcy5fcmVnZXhMYWJlbC5jcmVhdGVD
aGlsZCgiaW5wdXQiKTsKLSAgICB0aGlzLl9yZWdleENoZWNrYm94LnNldEF0dHJpYnV0ZSgidHlw
ZSIsICJjaGVja2JveCIpOwotICAgIHRoaXMuX3JlZ2V4Q2hlY2tib3guYWRkU3R5bGVDbGFzcygi
c2VhcmNoLWNvbmZpZy1jaGVja2JveCIpOwotICAgIHRoaXMuX3JlZ2V4TGFiZWwuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZWd1bGFy
IGV4cHJlc3Npb24iKSkpOwotICAgIAotICAgIHRoaXMuX3NlYXJjaFN0YXR1c0JhckVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9zZWFyY2hTdGF0dXNC
YXJFbGVtZW50LmNsYXNzTmFtZSA9ICJzZWFyY2gtc3RhdHVzLWJhci1pdGVtIjsKLSAgICB0aGlz
Ll9zZWFyY2hNZXNzYWdlRWxlbWVudCA9IHRoaXMuX3NlYXJjaFN0YXR1c0JhckVsZW1lbnQuY3Jl
YXRlQ2hpbGQoImRpdiIpOwotICAgIHRoaXMuX3NlYXJjaE1lc3NhZ2VFbGVtZW50LmNsYXNzTmFt
ZSA9ICJzZWFyY2gtc3RhdHVzLWJhci1tZXNzYWdlIjsKLQotICAgIHRoaXMuX3NlYXJjaFJlc3Vs
dHNNZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICB0
aGlzLl9zZWFyY2hSZXN1bHRzTWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gInNlYXJjaC1yZXN1
bHRzLXN0YXR1cy1iYXItbWVzc2FnZSI7Ci0KLSAgICB0aGlzLl9sb2FkKCk7Ci19Ci0KLS8vIE51
bWJlciBvZiByZWNlbnQgc2VhcmNoIHF1ZXJpZXMgdG8gc3RvcmUuCi1XZWJJbnNwZWN0b3IuU2Vh
cmNoVmlldy5tYXhRdWVyaWVzQ291bnQgPSAyMDsKLQotV2ViSW5zcGVjdG9yLlNlYXJjaFZpZXcu
cHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxFbGVtZW50Pn0K
LSAgICAgKi8KLSAgICBzdGF0dXNCYXJJdGVtczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIFt0aGlzLl9zZWFyY2hTdGF0dXNCYXJFbGVtZW50LCB0aGlzLl9zZWFyY2hSZXN1bHRz
TWVzc2FnZUVsZW1lbnRdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuU2VhcmNoQ29uZmlnfQotICAgICAqLwotICAgIGdldCBzZWFyY2hDb25maWcoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuU2VhcmNoQ29uZmlnKHRoaXMu
X3NlYXJjaC52YWx1ZSwgdGhpcy5faWdub3JlQ2FzZUNoZWNrYm94LmNoZWNrZWQsIHRoaXMuX3Jl
Z2V4Q2hlY2tib3guY2hlY2tlZCk7Ci0gICAgfSwKLQotICAgIHN5bmNUb1NlbGVjdGlvbjogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rp
b24oKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50KQotICAgICAgICAgICAgdGhp
cy5fc2VhcmNoLnZhbHVlID0gc2VsZWN0aW9uLnRvU3RyaW5nKCkucmVwbGFjZSgvXHI/XG4uKi8s
ICIiKTsKLSAgICB9LAotICAgIAotICAgIC8qKgotICAgICAqIEB0eXBlIHtXZWJJbnNwZWN0b3Iu
U2VhcmNoUmVzdWx0c1BhbmV9Ci0gICAgICovCi0gICAgc2V0IHJlc3VsdHNQYW5lKHJlc3VsdHNQ
YW5lKQotICAgIHsKLSAgICAgICAgdGhpcy5yZXNldFJlc3VsdHMoKTsKLSAgICAgICAgdGhpcy5f
c2VhcmNoUmVzdWx0c0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVzdWx0c1BhbmUuZWxlbWVudCk7Ci0g
ICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxTZWFyY2hS
ZXN1bHRzQ291bnQKLSAgICAgKi8KLSAgICBzZWFyY2hTdGFydGVkOiBmdW5jdGlvbih0b3RhbFNl
YXJjaFJlc3VsdHNDb3VudCkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVzZXRSZXN1bHRzKCk7Ci0g
ICAgICAgIHRoaXMuX3Jlc2V0Q291bnRlcnMoKTsKLQotICAgICAgICB0aGlzLl9zZWFyY2hNZXNz
YWdlRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2VhcmNoaW5n
Li4uIik7Ci0gICAgICAgIHRoaXMuX3Byb2dyZXNzSW5kaWNhdG9yID0gbmV3IFdlYkluc3BlY3Rv
ci5Qcm9ncmVzc0luZGljYXRvcigpOwotICAgICAgICB0aGlzLl9wcm9ncmVzc0luZGljYXRvci5z
ZXRUb3RhbFdvcmsodG90YWxTZWFyY2hSZXN1bHRzQ291bnQpOwotICAgICAgICB0aGlzLl9wcm9n
cmVzc0luZGljYXRvci5zaG93KHRoaXMuX3NlYXJjaFN0YXR1c0JhckVsZW1lbnQpOwotICAgICAg
ICAKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0c01lc3NhZ2UoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghdGhpcy5fc2VhcmNoaW5nVmlldykKLSAgICAgICAgICAgIHRoaXMuX3Nl
YXJjaGluZ1ZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkVtcHR5VmlldyhXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlNlYXJjaGluZy4uLiIpKTsKLSAgICAgICAgdGhpcy5fc2VhcmNoaW5nVmlldy5zaG93
KHRoaXMuX3NlYXJjaFJlc3VsdHNFbGVtZW50KTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVNlYXJj
aFJlc3VsdHNNZXNzYWdlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2Vh
cmNoTWF0Y2hlc0NvdW50ICYmIHRoaXMuX3NlYXJjaFJlc3VsdHNDb3VudCkKLSAgICAgICAgICAg
IHRoaXMuX3NlYXJjaFJlc3VsdHNNZXNzYWdlRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiRm91bmQgJWQgbWF0Y2hlcyBpbiAlZCBmaWxlcy4iLCB0aGlzLl9zZWFy
Y2hNYXRjaGVzQ291bnQsIHRoaXMuX25vbkVtcHR5U2VhcmNoUmVzdWx0c0NvdW50KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0c01lc3NhZ2VFbGVtZW50LnRl
eHRDb250ZW50ID0gIiI7Ci0gICAgfSwKLQotICAgIHJlc2V0UmVzdWx0czogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaGluZ1ZpZXcpCi0gICAgICAgICAgICB0aGlz
Ll9zZWFyY2hpbmdWaWV3LmRldGFjaCgpOwotICAgICAgICBpZiAodGhpcy5fbm90Rm91bmRWaWV3
KQotICAgICAgICAgICAgdGhpcy5fbm90Rm91bmRWaWV3LmRldGFjaCgpOwotICAgICAgICB0aGlz
Ll9zZWFyY2hSZXN1bHRzRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgIH0sCi0KLSAgICBf
cmVzZXRDb3VudGVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2VhcmNoTWF0
Y2hlc0NvdW50ID0gMDsKLSAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0c0NvdW50ID0gMDsKLSAg
ICAgICAgdGhpcy5fbm9uRW1wdHlTZWFyY2hSZXN1bHRzQ291bnQgPSAwOwotICAgIH0sCi0KLSAg
ICBub3RoaW5nRm91bmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVzZXRSZXN1
bHRzKCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9ub3RGb3VuZFZpZXcpCi0gICAgICAgICAgICB0
aGlzLl9ub3RGb3VuZFZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkVtcHR5VmlldyhXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIk5vIG1hdGNoZXMgZm91bmQuIikpOwotICAgICAgICB0aGlzLl9ub3RGb3Vu
ZFZpZXcuc2hvdyh0aGlzLl9zZWFyY2hSZXN1bHRzRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX3Nl
YXJjaFJlc3VsdHNNZXNzYWdlRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiTm8gbWF0Y2hlcyBmb3VuZC4iKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2VhcmNoUmVzdWx0c1BhbmUuU2VhcmNoUmVzdWx0
fSBzZWFyY2hSZXN1bHQKLSAgICAgKi8KLSAgICBhZGRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKHNl
YXJjaFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NlYXJjaE1hdGNoZXNDb3VudCArPSBz
ZWFyY2hSZXN1bHQuc2VhcmNoTWF0Y2hlcy5sZW5ndGg7Ci0gICAgICAgIHRoaXMuX3NlYXJjaFJl
c3VsdHNDb3VudCsrOwotICAgICAgICBpZiAoc2VhcmNoUmVzdWx0LnNlYXJjaE1hdGNoZXMubGVu
Z3RoKQotICAgICAgICAgICAgdGhpcy5fbm9uRW1wdHlTZWFyY2hSZXN1bHRzQ291bnQrKzsKLSAg
ICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0c01lc3NhZ2UoKTsKLSAgICAgICAgaWYgKHRo
aXMuX3Byb2dyZXNzSW5kaWNhdG9yLmlzQ2FuY2VsZWQoKSkKLSAgICAgICAgICAgIHRoaXMuX29u
Q2FuY2VsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzSW5kaWNh
dG9yLnNldFdvcmtlZCh0aGlzLl9zZWFyY2hSZXN1bHRzQ291bnQpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZpbmlzaGVkCi0gICAgICovCi0gICAgc2VhcmNo
RmluaXNoZWQ6IGZ1bmN0aW9uKGZpbmlzaGVkKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZ3Jl
c3NJbmRpY2F0b3IuZG9uZSgpOwotICAgICAgICB0aGlzLl9zZWFyY2hNZXNzYWdlRWxlbWVudC50
ZXh0Q29udGVudCA9IGZpbmlzaGVkID8gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZWFyY2ggZmlu
aXNoZWQuIikgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNlYXJjaCBpbnRlcnJ1cHRlZC4iKTsK
LSAgICB9LAotCi0gICAgZm9jdXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5zZXRDdXJyZW50Rm9jdXNFbGVtZW50KHRoaXMuX3NlYXJjaCk7Ci0gICAgICAgIHRoaXMu
X3NlYXJjaC5zZWxlY3QoKTsKLSAgICB9LAotCi0gICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuZm9jdXMoKTsKLSAgICB9LAotCi0gICAgd2lsbEhpZGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NvbnRyb2xsZXIuc3RvcFNlYXJjaCgpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAg
IF9vbktleURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChldmVu
dC5rZXlDb2RlKSB7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQu
S2V5cy5FbnRlci5jb2RlOgotICAgICAgICAgICAgdGhpcy5fb25BY3Rpb24oKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lktl
eXMuRXNjLmNvZGU6Ci0gICAgICAgICAgICB0aGlzLl9jb250cm9sbGVyLmNsb3NlKCk7Ci0gICAg
ICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0gICAgICAgIAotICAgIH0sCi0gICAgCi0gICAgX3NhdmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBzZWFyY2hDb25maWcgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaENvbmZpZyh0
aGlzLnNlYXJjaENvbmZpZy5xdWVyeSwgdGhpcy5zZWFyY2hDb25maWcuaWdub3JlQ2FzZSwgdGhp
cy5zZWFyY2hDb25maWcuaXNSZWdleCk7IAotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
YWR2YW5jZWRTZWFyY2hDb25maWcuc2V0KHNlYXJjaENvbmZpZyk7Ci0gICAgfSwKLSAgICAKLSAg
ICBfbG9hZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNlYXJjaENvbmZpZyA9IFdl
Ykluc3BlY3Rvci5zZXR0aW5ncy5hZHZhbmNlZFNlYXJjaENvbmZpZy5nZXQoKTsKLSAgICAgICAg
dGhpcy5fc2VhcmNoLnZhbHVlID0gc2VhcmNoQ29uZmlnLnF1ZXJ5OwotICAgICAgICB0aGlzLl9p
Z25vcmVDYXNlQ2hlY2tib3guY2hlY2tlZCA9IHNlYXJjaENvbmZpZy5pZ25vcmVDYXNlOwotICAg
ICAgICB0aGlzLl9yZWdleENoZWNrYm94LmNoZWNrZWQgPSBzZWFyY2hDb25maWcuaXNSZWdleDsK
LSAgICB9LAotCi0gICAgX29uQ2FuY2VsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Ll9jb250cm9sbGVyLnN0b3BTZWFyY2goKTsKLSAgICAgICAgdGhpcy5mb2N1cygpOwotICAgIH0s
Ci0gICAgCi0gICAgX29uQWN0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuc2VhcmNoQ29uZmlnLnF1ZXJ5IHx8ICF0aGlzLnNlYXJjaENvbmZpZy5xdWVyeS5sZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB0aGlzLl9zYXZlKCk7Ci0g
ICAgICAgIHRoaXMuX2NvbnRyb2xsZXIuc3RhcnRTZWFyY2godGhpcy5zZWFyY2hDb25maWcpOwot
ICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQot
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAqIEBw
YXJhbSB7Ym9vbGVhbn0gaWdub3JlQ2FzZQotICogQHBhcmFtIHtib29sZWFufSBpc1JlZ2V4Ci0g
Ki8KLVdlYkluc3BlY3Rvci5TZWFyY2hDb25maWcgPSBmdW5jdGlvbihxdWVyeSwgaWdub3JlQ2Fz
ZSwgaXNSZWdleCkKLXsKLSAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7Ci0gICAgdGhpcy5pZ25vcmVD
YXNlID0gaWdub3JlQ2FzZTsKLSAgICB0aGlzLmlzUmVnZXggPSBpc1JlZ2V4OwotfQotCi0vKioK
LSAqIEBpbnRlcmZhY2UKLSAqLwotV2ViSW5zcGVjdG9yLlNlYXJjaFNjb3BlID0gZnVuY3Rpb24o
KQotewotfQotCi1XZWJJbnNwZWN0b3IuU2VhcmNoU2NvcGUucHJvdG90eXBlID0gewotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNlYXJjaENvbmZpZ30gc2VhcmNoQ29uZmln
Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2VhcmNoUmVz
dWx0c1BhbmUuU2VhcmNoUmVzdWx0KX0gc2VhcmNoUmVzdWx0Q2FsbGJhY2sKLSAgICAgKiBAcGFy
YW0ge2Z1bmN0aW9uKGJvb2xlYW4pfSBzZWFyY2hGaW5pc2hlZENhbGxiYWNrCi0gICAgICovCi0g
ICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24oc2VhcmNoQ29uZmlnLCBzZWFyY2hSZXN1bHRDYWxs
YmFjaywgc2VhcmNoRmluaXNoZWRDYWxsYmFjaykgeyB9LAotCi0gICAgc3RvcFNlYXJjaDogZnVu
Y3Rpb24oKSB7IH0sCi0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
U2VhcmNoQ29uZmlnfSBzZWFyY2hDb25maWcKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
U2VhcmNoUmVzdWx0c1BhbmV9Ci0gICAgICovCi0gICAgY3JlYXRlU2VhcmNoUmVzdWx0c1BhbmU6
IGZ1bmN0aW9uKHNlYXJjaENvbmZpZykgeyB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0Ci0gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoCi0gKi8K
LVdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbihvZmZzZXQsIGxlbmd0aCkKLXsK
LSAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDsgICAg
Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TZWFy
Y2hDb25maWd9IHNlYXJjaENvbmZpZwotICovCi1XZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1Bh
bmUgPSBmdW5jdGlvbihzZWFyY2hDb25maWcpCi17Ci0gICAgdGhpcy5fc2VhcmNoQ29uZmlnID0g
c2VhcmNoQ29uZmlnOwotICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotfQotCi1XZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1BhbmUucHJvdG90eXBlID0g
ewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5TZWFyY2hDb25maWd9Ci0g
ICAgICovCi0gICAgZ2V0IHNlYXJjaENvbmZpZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fc2VhcmNoQ29uZmlnOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5GaWxlQmFzZWRTZWFyY2hSZXN1bHRzUGFuZS5TZWFyY2hSZXN1bHR9IHNlYXJjaFJl
c3VsdAotICAgICAqLwotICAgIGFkZFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oc2VhcmNoUmVzdWx0
KSB7IH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuU2VhcmNoUmVzdWx0c1BhbmV9IAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2VhcmNoQ29u
ZmlnfSBzZWFyY2hDb25maWcKLSAqLwotV2ViSW5zcGVjdG9yLkZpbGVCYXNlZFNlYXJjaFJlc3Vs
dHNQYW5lID0gZnVuY3Rpb24oc2VhcmNoQ29uZmlnKQotewotICAgIFdlYkluc3BlY3Rvci5TZWFy
Y2hSZXN1bHRzUGFuZS5jYWxsKHRoaXMsIHNlYXJjaENvbmZpZyk7Ci0gICAgCi0gICAgdGhpcy5f
c2VhcmNoUmVzdWx0cyA9IFtdOwotCi0gICAgdGhpcy5lbGVtZW50LmlkID0ic2VhcmNoLXJlc3Vs
dHMtcGFuZS1maWxlLWJhc2VkIjsKLSAgICAKLSAgICB0aGlzLl90cmVlT3V0bGluZUVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwotICAgIHRoaXMuX3RyZWVPdXRsaW5lRWxl
bWVudC5jbGFzc05hbWUgPSAic2VhcmNoLXJlc3VsdHMtb3V0bGluZS1kaXNjbG9zdXJlIjsKLSAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fdHJlZU91dGxpbmVFbGVtZW50KTsKLSAg
ICB0aGlzLl90cmVlT3V0bGluZSA9IG5ldyBUcmVlT3V0bGluZSh0aGlzLl90cmVlT3V0bGluZUVs
ZW1lbnQpOwotICAgIAotICAgIHRoaXMuX21hdGNoZXNFeHBhbmRlZENvdW50ID0gMDsKLX0KLQot
V2ViSW5zcGVjdG9yLkZpbGVCYXNlZFNlYXJjaFJlc3VsdHNQYW5lLm1hdGNoZXNFeHBhbmRlZEJ5
RGVmYXVsdENvdW50ID0gMjA7Ci1XZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2VhcmNoUmVzdWx0c1Bh
bmUuZmlsZU1hdGNoZXNTaG93bkF0T25jZSA9IDIwOwotCi1XZWJJbnNwZWN0b3IuRmlsZUJhc2Vk
U2VhcmNoUmVzdWx0c1BhbmUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uTnVtYmVyCi0g
ICAgICogQHJldHVybiB7RWxlbWVudH0KLSAgICAgKi8KLSAgICBfY3JlYXRlQW5jaG9yOiBmdW5j
dGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAg
ICAgIHZhciBhbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgICAgIGFu
Y2hvci5wcmVmZXJyZWRQYW5lbCA9ICJzY3JpcHRzIjsKLSAgICAgICAgYW5jaG9yLmhyZWYgPSBz
YW5pdGl6ZUhyZWYodWlTb3VyY2VDb2RlLm9yaWdpblVSTCgpKTsKLSAgICAgICAgYW5jaG9yLnVp
U291cmNlQ29kZSA9IHVpU291cmNlQ29kZTsKLSAgICAgICAgYW5jaG9yLmxpbmVOdW1iZXIgPSBs
aW5lTnVtYmVyOwotICAgICAgICByZXR1cm4gYW5jaG9yOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5GaWxlQmFzZWRTZWFyY2hSZXN1bHRzUGFuZS5TZWFy
Y2hSZXN1bHR9IHNlYXJjaFJlc3VsdAotICAgICAqLwotICAgIGFkZFNlYXJjaFJlc3VsdDogZnVu
Y3Rpb24oc2VhcmNoUmVzdWx0KQotICAgIHsKLSAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cy5w
dXNoKHNlYXJjaFJlc3VsdCk7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSBzZWFyY2hSZXN1
bHQudWlTb3VyY2VDb2RlOwotICAgICAgICB2YXIgc2VhcmNoTWF0Y2hlcyA9IHNlYXJjaFJlc3Vs
dC5zZWFyY2hNYXRjaGVzOwotCi0gICAgICAgIHZhciBmaWxlVHJlZUVsZW1lbnQgPSB0aGlzLl9h
ZGRGaWxlVHJlZUVsZW1lbnQodWlTb3VyY2VDb2RlLm9yaWdpblVSTCgpLCBzZWFyY2hNYXRjaGVz
Lmxlbmd0aCwgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggLSAxKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2VhcmNoUmVzdWx0c1Bh
bmUuU2VhcmNoUmVzdWx0fSBzZWFyY2hSZXN1bHQKLSAgICAgKiBAcGFyYW0ge1RyZWVFbGVtZW50
fSBmaWxlVHJlZUVsZW1lbnQKLSAgICAgKi8KLSAgICBfZmlsZVRyZWVFbGVtZW50RXhwYW5kZWQ6
IGZ1bmN0aW9uKHNlYXJjaFJlc3VsdCwgZmlsZVRyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAg
aWYgKGZpbGVUcmVlRWxlbWVudC5faW5pdGlhbGl6ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICB2YXIgdG9JbmRleCA9IE1hdGgubWluKHNlYXJjaFJlc3VsdC5zZWFy
Y2hNYXRjaGVzLmxlbmd0aCwgV2ViSW5zcGVjdG9yLkZpbGVCYXNlZFNlYXJjaFJlc3VsdHNQYW5l
LmZpbGVNYXRjaGVzU2hvd25BdE9uY2UpOwotICAgICAgICBpZiAodG9JbmRleCA8IHNlYXJjaFJl
c3VsdC5zZWFyY2hNYXRjaGVzLmxlbmd0aCkgewotICAgICAgICAgICAgdGhpcy5fYXBwZW5kU2Vh
cmNoTWF0Y2hlcyhmaWxlVHJlZUVsZW1lbnQsIHNlYXJjaFJlc3VsdCwgMCwgdG9JbmRleCAtIDEp
OwotICAgICAgICAgICAgdGhpcy5fYXBwZW5kU2hvd01vcmVNYXRjaGVzRWxlbWVudChmaWxlVHJl
ZUVsZW1lbnQsIHNlYXJjaFJlc3VsdCwgdG9JbmRleCAtIDEpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHRoaXMuX2FwcGVuZFNlYXJjaE1hdGNoZXMoZmlsZVRyZWVFbGVtZW50LCBzZWFy
Y2hSZXN1bHQsIDAsIHRvSW5kZXgpOwotICAgICAgICAKLSAgICAgICAgZmlsZVRyZWVFbGVtZW50
Ll9pbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
VHJlZUVsZW1lbnR9IGZpbGVUcmVlRWxlbWVudAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkZpbGVCYXNlZFNlYXJjaFJlc3VsdHNQYW5lLlNlYXJjaFJlc3VsdH0gc2VhcmNoUmVzdWx0Ci0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0
b0luZGV4Ci0gICAgICovCi0gICAgX2FwcGVuZFNlYXJjaE1hdGNoZXM6IGZ1bmN0aW9uKGZpbGVU
cmVlRWxlbWVudCwgc2VhcmNoUmVzdWx0LCBmcm9tSW5kZXgsIHRvSW5kZXgpCi0gICAgewotICAg
ICAgICB2YXIgdWlTb3VyY2VDb2RlID0gc2VhcmNoUmVzdWx0LnVpU291cmNlQ29kZTsKLSAgICAg
ICAgdmFyIHNlYXJjaE1hdGNoZXMgPSBzZWFyY2hSZXN1bHQuc2VhcmNoTWF0Y2hlczsKLQotICAg
ICAgICB2YXIgcmVnZXggPSBjcmVhdGVTZWFyY2hSZWdleCh0aGlzLl9zZWFyY2hDb25maWcucXVl
cnksICF0aGlzLl9zZWFyY2hDb25maWcuaWdub3JlQ2FzZSwgdGhpcy5fc2VhcmNoQ29uZmlnLmlz
UmVnZXgpOwotICAgICAgICBmb3IgKHZhciBpID0gZnJvbUluZGV4OyBpIDwgdG9JbmRleDsgKytp
KSB7Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHNlYXJjaE1hdGNoZXNbaV0ubGluZU51
bWJlcjsKLSAgICAgICAgICAgIHZhciBsaW5lQ29udGVudCA9IHNlYXJjaE1hdGNoZXNbaV0ubGlu
ZUNvbnRlbnQ7Ci0gICAgICAgICAgICB2YXIgbWF0Y2hSYW5nZXMgPSB0aGlzLl9yZWdleE1hdGNo
UmFuZ2VzKGxpbmVDb250ZW50LCByZWdleCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZh
ciBhbmNob3IgPSB0aGlzLl9jcmVhdGVBbmNob3IodWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBt
YXRjaFJhbmdlc1swXS5vZmZzZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgbnVt
YmVyU3RyaW5nID0gbnVtYmVyVG9TdHJpbmdXaXRoU3BhY2VzUGFkZGluZyhsaW5lTnVtYmVyICsg
MSwgNCk7Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJlclNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyU3Bhbi5hZGRTdHlsZUNsYXNz
KCJ3ZWJraXQtbGluZS1udW1iZXIiKTsKLSAgICAgICAgICAgIGxpbmVOdW1iZXJTcGFuLmFkZFN0
eWxlQ2xhc3MoInNlYXJjaC1tYXRjaC1saW5lLW51bWJlciIpOwotICAgICAgICAgICAgbGluZU51
bWJlclNwYW4udGV4dENvbnRlbnQgPSBudW1iZXJTdHJpbmc7Ci0gICAgICAgICAgICBhbmNob3Iu
YXBwZW5kQ2hpbGQobGluZU51bWJlclNwYW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2
YXIgY29udGVudFNwYW4gPSB0aGlzLl9jcmVhdGVDb250ZW50U3BhbihsaW5lQ29udGVudCwgbWF0
Y2hSYW5nZXMpOwotICAgICAgICAgICAgYW5jaG9yLmFwcGVuZENoaWxkKGNvbnRlbnRTcGFuKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHNlYXJjaE1hdGNoRWxlbWVudCA9IG5ldyBU
cmVlRWxlbWVudCgiIiwgbnVsbCwgZmFsc2UpOwotICAgICAgICAgICAgZmlsZVRyZWVFbGVtZW50
LmFwcGVuZENoaWxkKHNlYXJjaE1hdGNoRWxlbWVudCk7Ci0gICAgICAgICAgICBzZWFyY2hNYXRj
aEVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmNsYXNzTmFtZSA9ICJzZWFyY2gtbWF0Y2ggc291cmNl
LWNvZGUiOwotICAgICAgICAgICAgc2VhcmNoTWF0Y2hFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5h
cHBlbmRDaGlsZChhbmNob3IpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7VHJlZUVsZW1lbnR9IGZpbGVUcmVlRWxlbWVudAotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkZpbGVCYXNlZFNlYXJjaFJlc3VsdHNQYW5lLlNlYXJjaFJlc3VsdH0gc2VhcmNo
UmVzdWx0Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0TWF0Y2hJbmRleAotICAgICAqLwot
ICAgIF9hcHBlbmRTaG93TW9yZU1hdGNoZXNFbGVtZW50OiBmdW5jdGlvbihmaWxlVHJlZUVsZW1l
bnQsIHNlYXJjaFJlc3VsdCwgc3RhcnRNYXRjaEluZGV4KQotICAgIHsKLSAgICAgICAgdmFyIG1h
dGNoZXNMZWZ0Q291bnQgPSBzZWFyY2hSZXN1bHQuc2VhcmNoTWF0Y2hlcy5sZW5ndGggLSBzdGFy
dE1hdGNoSW5kZXg7Ci0gICAgICAgIHZhciBzaG93TW9yZU1hdGNoZXNUZXh0ID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJTaG93IGFsbCBtYXRjaGVzICglZCBtb3JlKS4iLCBtYXRjaGVzTGVmdENv
dW50KTsKLSAgICAgICAgdmFyIHNob3dNb3JlTWF0Y2hlc0VsZW1lbnQgPSBuZXcgVHJlZUVsZW1l
bnQoc2hvd01vcmVNYXRjaGVzVGV4dCwgbnVsbCwgZmFsc2UpOwotICAgICAgICBmaWxlVHJlZUVs
ZW1lbnQuYXBwZW5kQ2hpbGQoc2hvd01vcmVNYXRjaGVzRWxlbWVudCk7Ci0gICAgICAgIHNob3dN
b3JlTWF0Y2hlc0VsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNob3ctbW9y
ZS1tYXRjaGVzIik7Ci0gICAgICAgIHNob3dNb3JlTWF0Y2hlc0VsZW1lbnQub25zZWxlY3QgPSB0
aGlzLl9zaG93TW9yZU1hdGNoZXNFbGVtZW50U2VsZWN0ZWQuYmluZCh0aGlzLCBzZWFyY2hSZXN1
bHQsIHN0YXJ0TWF0Y2hJbmRleCwgc2hvd01vcmVNYXRjaGVzRWxlbWVudCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZpbGVCYXNlZFNlYXJjaFJlc3Vs
dHNQYW5lLlNlYXJjaFJlc3VsdH0gc2VhcmNoUmVzdWx0Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9
IHN0YXJ0TWF0Y2hJbmRleAotICAgICAqIEBwYXJhbSB7VHJlZUVsZW1lbnR9IHNob3dNb3JlTWF0
Y2hlc0VsZW1lbnQKLSAgICAgKi8KLSAgICBfc2hvd01vcmVNYXRjaGVzRWxlbWVudFNlbGVjdGVk
OiBmdW5jdGlvbihzZWFyY2hSZXN1bHQsIHN0YXJ0TWF0Y2hJbmRleCwgc2hvd01vcmVNYXRjaGVz
RWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHZhciBmaWxlVHJlZUVsZW1lbnQgPSBzaG93TW9yZU1h
dGNoZXNFbGVtZW50LnBhcmVudDsKLSAgICAgICAgZmlsZVRyZWVFbGVtZW50LnJlbW92ZUNoaWxk
KHNob3dNb3JlTWF0Y2hlc0VsZW1lbnQpOwotICAgICAgICB0aGlzLl9hcHBlbmRTZWFyY2hNYXRj
aGVzKGZpbGVUcmVlRWxlbWVudCwgc2VhcmNoUmVzdWx0LCBzdGFydE1hdGNoSW5kZXgsIHNlYXJj
aFJlc3VsdC5zZWFyY2hNYXRjaGVzLmxlbmd0aCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzZWFyY2hN
YXRjaGVzQ291bnQKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc2VhcmNoUmVzdWx0SW5kZXgKLSAg
ICAgKi8KLSAgICBfYWRkRmlsZVRyZWVFbGVtZW50OiBmdW5jdGlvbihmaWxlTmFtZSwgc2VhcmNo
TWF0Y2hlc0NvdW50LCBzZWFyY2hSZXN1bHRJbmRleCkKLSAgICB7Ci0gICAgICAgIHZhciBmaWxl
VHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoIiIsIG51bGwsIHRydWUpOwotICAgICAgICBm
aWxlVHJlZUVsZW1lbnQudG9nZ2xlT25DbGljayA9IHRydWU7Ci0gICAgICAgIGZpbGVUcmVlRWxl
bWVudC5zZWxlY3RhYmxlID0gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5fdHJlZU91dGxpbmUuYXBw
ZW5kQ2hpbGQoZmlsZVRyZWVFbGVtZW50KTsKLSAgICAgICAgZmlsZVRyZWVFbGVtZW50Lmxpc3RJ
dGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzZWFyY2gtcmVzdWx0Iik7Ci0KLSAgICAgICAgdmFy
IGZpbGVOYW1lU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAg
ZmlsZU5hbWVTcGFuLmNsYXNzTmFtZSA9ICJzZWFyY2gtcmVzdWx0LWZpbGUtbmFtZSI7Ci0gICAg
ICAgIGZpbGVOYW1lU3Bhbi50ZXh0Q29udGVudCA9IGZpbGVOYW1lOwotICAgICAgICBmaWxlVHJl
ZUVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGZpbGVOYW1lU3Bhbik7Ci0KLSAg
ICAgICAgdmFyIG1hdGNoZXNDb3VudFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7Ci0gICAgICAgIG1hdGNoZXNDb3VudFNwYW4uY2xhc3NOYW1lID0gInNlYXJjaC1yZXN1bHQt
bWF0Y2hlcy1jb3VudCI7Ci0gICAgICAgIGlmIChzZWFyY2hNYXRjaGVzQ291bnQgPT09IDEpCi0g
ICAgICAgICAgICBtYXRjaGVzQ291bnRTcGFuLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIoJWQgbWF0Y2gpIiwgc2VhcmNoTWF0Y2hlc0NvdW50KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbWF0Y2hlc0NvdW50U3Bhbi50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiKCVkIG1hdGNoZXMpIiwgc2VhcmNoTWF0Y2hlc0NvdW50KTsKLSAgICAgICAgCi0g
ICAgICAgIGZpbGVUcmVlRWxlbWVudC5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQobWF0Y2hl
c0NvdW50U3Bhbik7Ci0gICAgICAgIAotICAgICAgICB2YXIgc2VhcmNoUmVzdWx0ID0gdGhpcy5f
c2VhcmNoUmVzdWx0c1tzZWFyY2hSZXN1bHRJbmRleF07Ci0gICAgICAgIGZpbGVUcmVlRWxlbWVu
dC5vbmV4cGFuZCA9IHRoaXMuX2ZpbGVUcmVlRWxlbWVudEV4cGFuZGVkLmJpbmQodGhpcywgc2Vh
cmNoUmVzdWx0LCBmaWxlVHJlZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIEV4cGFuZCB1bnRpbCBh
dCBsZWFzdCBjZXJ0YWluIGFtb3VudCBvZiBtYXRjaGVzIGlzIGV4cGFuZGVkLgotICAgICAgICBp
ZiAodGhpcy5fbWF0Y2hlc0V4cGFuZGVkQ291bnQgPCBXZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2Vh
cmNoUmVzdWx0c1BhbmUubWF0Y2hlc0V4cGFuZGVkQnlEZWZhdWx0Q291bnQpCi0gICAgICAgICAg
ICBmaWxlVHJlZUVsZW1lbnQuZXhwYW5kKCk7Ci0gICAgICAgIHRoaXMuX21hdGNoZXNFeHBhbmRl
ZENvdW50ICs9IHNlYXJjaFJlc3VsdC5zZWFyY2hNYXRjaGVzLmxlbmd0aDsKLQotICAgICAgICBy
ZXR1cm4gZmlsZVRyZWVFbGVtZW50OyAKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IGxpbmVDb250ZW50Ci0gICAgICogQHBhcmFtIHtSZWdFeHB9IHJlZ2V4Ci0gICAg
ICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHQ+fQotICAgICAqLwot
ICAgIF9yZWdleE1hdGNoUmFuZ2VzOiBmdW5jdGlvbihsaW5lQ29udGVudCwgcmVnZXgpCi0gICAg
ewotICAgICAgICByZWdleC5sYXN0SW5kZXggPSAwOwotICAgICAgICB2YXIgbWF0Y2g7Ci0gICAg
ICAgIHZhciBvZmZzZXQgPSAwOwotICAgICAgICB2YXIgbWF0Y2hSYW5nZXMgPSBbXTsKLSAgICAg
ICAgd2hpbGUgKChyZWdleC5sYXN0SW5kZXggPCBsaW5lQ29udGVudC5sZW5ndGgpICYmIChtYXRj
aCA9IHJlZ2V4LmV4ZWMobGluZUNvbnRlbnQpKSkKLSAgICAgICAgICAgIG1hdGNoUmFuZ2VzLnB1
c2gobmV3IFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdLmxl
bmd0aCkpOwotCi0gICAgICAgIHJldHVybiBtYXRjaFJhbmdlczsKLSAgICB9LAotICAgIAotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lQ29udGVudAotICAgICAqIEBwYXJhbSB7
QXJyYXkuPFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHQ+fSBtYXRjaFJhbmdlcwotICAgICAqLwot
ICAgIF9jcmVhdGVDb250ZW50U3BhbjogZnVuY3Rpb24obGluZUNvbnRlbnQsIG1hdGNoUmFuZ2Vz
KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRlbnRTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOwotICAgICAgICBjb250ZW50U3Bhbi5jbGFzc05hbWUgPSAic2VhcmNoLW1hdGNo
LWNvbnRlbnQiOwotICAgICAgICBjb250ZW50U3Bhbi50ZXh0Q29udGVudCA9IGxpbmVDb250ZW50
OwotICAgICAgICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MoY29u
dGVudFNwYW4sIG1hdGNoUmFuZ2VzLCAiaGlnaGxpZ2h0ZWQtbWF0Y2giKTsKLSAgICAgICAgcmV0
dXJuIGNvbnRlbnRTcGFuOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5T
ZWFyY2hSZXN1bHRzUGFuZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gKiBAcGFy
YW0ge0FycmF5LjxPYmplY3Q+fSBzZWFyY2hNYXRjaGVzCi0gKi8KLVdlYkluc3BlY3Rvci5GaWxl
QmFzZWRTZWFyY2hSZXN1bHRzUGFuZS5TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbih1aVNvdXJjZUNv
ZGUsIHNlYXJjaE1hdGNoZXMpIHsKLSAgICB0aGlzLnVpU291cmNlQ29kZSA9IHVpU291cmNlQ29k
ZTsKLSAgICB0aGlzLnNlYXJjaE1hdGNoZXMgPSBzZWFyY2hNYXRjaGVzOwotfQotCi0vKioKLSAq
IEB0eXBlIHtXZWJJbnNwZWN0b3IuQWR2YW5jZWRTZWFyY2hDb250cm9sbGVyfQotICovCi1XZWJJ
bnNwZWN0b3IuYWR2YW5jZWRTZWFyY2hDb250cm9sbGVyID0gbnVsbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXBwbGljYXRpb25DYWNoZUl0ZW1zVmll
dy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXBwbGljYXRpb25DYWNo
ZUl0ZW1zVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3NmU1OS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FwcGxpY2F0aW9u
Q2FjaGVJdGVtc1ZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZp
ZXd9Ci0gKi8KLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlSXRlbXNWaWV3ID0gZnVuY3Rp
b24obW9kZWwsIGZyYW1lSWQpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsK
LSAgICAKLSAgICB0aGlzLl9tb2RlbCA9IG1vZGVsOwotCi0gICAgdGhpcy5lbGVtZW50LmFkZFN0
eWxlQ2xhc3MoInN0b3JhZ2UtdmlldyIpOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJ0YWJsZSIpOwotCi0gICAgLy8gRklYTUU6IE5lZWRzIGJldHRlciB0b29sdGlwLiAoTG9jYWxp
emVkKQotICAgIHRoaXMuZGVsZXRlQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJC
dXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWxldGUiKSwgImRlbGV0ZS1zdG9yYWdlLXN0
YXR1cy1iYXItaXRlbSIpOwotICAgIHRoaXMuZGVsZXRlQnV0dG9uLnZpc2libGUgPSBmYWxzZTsK
LSAgICB0aGlzLmRlbGV0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2Rl
bGV0ZUJ1dHRvbkNsaWNrZWQsIHRoaXMpOwotCi0gICAgdGhpcy5jb25uZWN0aXZpdHlJY29uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci0gICAgdGhpcy5jb25uZWN0aXZpdHlJY29u
LmNsYXNzTmFtZSA9ICJzdG9yYWdlLWFwcGxpY2F0aW9uLWNhY2hlLWNvbm5lY3Rpdml0eS1pY29u
IjsKLSAgICB0aGlzLmNvbm5lY3Rpdml0eUljb24uc3JjID0gIiI7Ci0gICAgdGhpcy5jb25uZWN0
aXZpdHlNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIHRoaXMu
Y29ubmVjdGl2aXR5TWVzc2FnZS5jbGFzc05hbWUgPSAic3RvcmFnZS1hcHBsaWNhdGlvbi1jYWNo
ZS1jb25uZWN0aXZpdHkiOwotICAgIHRoaXMuY29ubmVjdGl2aXR5TWVzc2FnZS50ZXh0Q29udGVu
dCA9ICIiOwotCi0gICAgdGhpcy5kaXZpZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOwotICAgIHRoaXMuZGl2aWRlci5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtIHN0YXR1
cy1iYXItZGl2aWRlciI7Ci0KLSAgICB0aGlzLnN0YXR1c0ljb24gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJpbWciKTsKLSAgICB0aGlzLnN0YXR1c0ljb24uY2xhc3NOYW1lID0gInN0b3JhZ2Ut
YXBwbGljYXRpb24tY2FjaGUtc3RhdHVzLWljb24iOwotICAgIHRoaXMuc3RhdHVzSWNvbi5zcmMg
PSAiIjsKLSAgICB0aGlzLnN0YXR1c01lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgdGhpcy5zdGF0dXNNZXNzYWdlLmNsYXNzTmFtZSA9ICJzdG9yYWdlLWFwcGxp
Y2F0aW9uLWNhY2hlLXN0YXR1cyI7Ci0gICAgdGhpcy5zdGF0dXNNZXNzYWdlLnRleHRDb250ZW50
ID0gIiI7Ci0KLSAgICB0aGlzLl9mcmFtZUlkID0gZnJhbWVJZDsKLQotICAgIHRoaXMuX2VtcHR5
VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRW1wdHlWaWV3KFdlYkluc3BlY3Rvci5VSVN0cmluZygi
Tm8gQXBwbGljYXRpb24gQ2FjaGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLiIpKTsKLSAgICB0aGlz
Ll9lbXB0eVZpZXcuc2hvdyh0aGlzLmVsZW1lbnQpOwotCi0gICAgdGhpcy5fbWFya0RpcnR5KCk7
Ci0gICAgCi0gICAgdmFyIHN0YXR1cyA9IHRoaXMuX21vZGVsLmZyYW1lTWFuaWZlc3RTdGF0dXMo
ZnJhbWVJZCk7Ci0gICAgdGhpcy51cGRhdGVTdGF0dXMoc3RhdHVzKTsKLSAgICAKLSAgICB0aGlz
LnVwZGF0ZU5ldHdvcmtTdGF0ZSh0aGlzLl9tb2RlbC5vbkxpbmUpOwotCi0gICAgLy8gRklYTUU6
IFN0YXR1cyBiYXIgaXRlbXMgZG9uJ3Qgd29yayB3ZWxsIGVub3VnaCB5ZXQsIHNvIHRoZXkgYXJl
IGJlaW5nIGhpZGRlbi4KLSAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzQxNjM3IFdlYiBJbnNw
ZWN0b3I6IEdpdmUgU2VtYW50aWNzIHRvICJSZWZyZXNoIiBhbmQgIkRlbGV0ZSIgQnV0dG9ucyBp
biBBcHBsaWNhdGlvbkNhY2hlIERhdGFHcmlkCi0gICAgdGhpcy5kZWxldGVCdXR0b24uZWxlbWVu
dC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotfQotCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25D
YWNoZUl0ZW1zVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgc3RhdHVzQmFySXRlbXM6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICB0aGlzLmRlbGV0ZUJ1dHRv
bi5lbGVtZW50LAotICAgICAgICAgICAgdGhpcy5jb25uZWN0aXZpdHlJY29uLCB0aGlzLmNvbm5l
Y3Rpdml0eU1lc3NhZ2UsIHRoaXMuZGl2aWRlciwKLSAgICAgICAgICAgIHRoaXMuc3RhdHVzSWNv
biwgdGhpcy5zdGF0dXNNZXNzYWdlCi0gICAgICAgIF07Ci0gICAgfSwKLQotICAgIHdhc1Nob3du
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9tYXliZVVwZGF0ZSgpOwotICAgIH0s
Ci0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5kZWxldGVC
dXR0b24udmlzaWJsZSA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBfbWF5YmVVcGRhdGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcoKSB8fCAhdGhpcy5fdmll
d0RpcnR5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgdGhpcy5fdXBk
YXRlKCk7Ci0gICAgICAgIHRoaXMuX3ZpZXdEaXJ0eSA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBf
bWFya0RpcnR5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl92aWV3RGlydHkgPSB0
cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzCi0g
ICAgICovCi0gICAgdXBkYXRlU3RhdHVzOiBmdW5jdGlvbihzdGF0dXMpCi0gICAgewotICAgICAg
ICB2YXIgb2xkU3RhdHVzID0gdGhpcy5fc3RhdHVzOwotICAgICAgICB0aGlzLl9zdGF0dXMgPSBz
dGF0dXM7Ci0gICAgICAgIAotICAgICAgICB2YXIgc3RhdHVzSW5mb3JtYXRpb24gPSB7fTsKLSAg
ICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgVU5DQUNIRUQgc3RhdHVzLCBzaW5jZSB3ZSBy
ZW1vdmUgZnJhbWVzIHdpdGggVU5DQUNIRUQgYXBwbGljYXRpb24gY2FjaGUgc3RhdHVzIGZyb20g
dGhlIHRyZWUuIAotICAgICAgICBzdGF0dXNJbmZvcm1hdGlvblthcHBsaWNhdGlvbkNhY2hlLlVO
Q0FDSEVEXSAgICA9IHsgc3JjOiAiSW1hZ2VzL2Vycm9yUmVkRG90LnBuZyIsIHRleHQ6ICJVTkNB
Q0hFRCIgfTsKLSAgICAgICAgc3RhdHVzSW5mb3JtYXRpb25bYXBwbGljYXRpb25DYWNoZS5JRExF
XSAgICAgICAgPSB7IHNyYzogIkltYWdlcy9zdWNjZXNzR3JlZW5Eb3QucG5nIiwgdGV4dDogIklE
TEUiIH07Ci0gICAgICAgIHN0YXR1c0luZm9ybWF0aW9uW2FwcGxpY2F0aW9uQ2FjaGUuQ0hFQ0tJ
TkddICAgID0geyBzcmM6ICJJbWFnZXMvd2FybmluZ09yYW5nZURvdC5wbmciLCAgdGV4dDogIkNI
RUNLSU5HIiB9OwotICAgICAgICBzdGF0dXNJbmZvcm1hdGlvblthcHBsaWNhdGlvbkNhY2hlLkRP
V05MT0FESU5HXSA9IHsgc3JjOiAiSW1hZ2VzL3dhcm5pbmdPcmFuZ2VEb3QucG5nIiwgIHRleHQ6
ICJET1dOTE9BRElORyIgfTsKLSAgICAgICAgc3RhdHVzSW5mb3JtYXRpb25bYXBwbGljYXRpb25D
YWNoZS5VUERBVEVSRUFEWV0gPSB7IHNyYzogIkltYWdlcy9zdWNjZXNzR3JlZW5Eb3QucG5nIiwg
IHRleHQ6ICJVUERBVEVSRUFEWSIgfTsKLSAgICAgICAgc3RhdHVzSW5mb3JtYXRpb25bYXBwbGlj
YXRpb25DYWNoZS5PQlNPTEVURV0gICAgPSB7IHNyYzogIkltYWdlcy9lcnJvclJlZERvdC5wbmci
LCAgICAgIHRleHQ6ICJPQlNPTEVURSIgfTsKLQotICAgICAgICB2YXIgaW5mbyA9IHN0YXR1c0lu
Zm9ybWF0aW9uW3N0YXR1c10gfHwgc3RhdHVzSW5mb3JtYXRpb25bYXBwbGljYXRpb25DYWNoZS5V
TkNBQ0hFRF07Ci0KLSAgICAgICAgdGhpcy5zdGF0dXNJY29uLnNyYyA9IGluZm8uc3JjOwotICAg
ICAgICB0aGlzLnN0YXR1c01lc3NhZ2UudGV4dENvbnRlbnQgPSBpbmZvLnRleHQ7Ci0gICAgICAg
IAotICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmcoKSAmJiB0aGlzLl9zdGF0dXMgPT09IGFwcGxp
Y2F0aW9uQ2FjaGUuSURMRSAmJiAob2xkU3RhdHVzID09PSBhcHBsaWNhdGlvbkNhY2hlLlVQREFU
RVJFQURZIHx8ICF0aGlzLl9yZXNvdXJjZXMpKQotICAgICAgICAgICAgdGhpcy5fbWFya0RpcnR5
KCk7Ci0gICAgICAgIHRoaXMuX21heWJlVXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNOb3dPbmxpbmUKLSAgICAgKi8KLSAgICB1cGRhdGVOZXR3
b3JrU3RhdGU6IGZ1bmN0aW9uKGlzTm93T25saW5lKQotICAgIHsKLSAgICAgICAgaWYgKGlzTm93
T25saW5lKSB7Ci0gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpdml0eUljb24uc3JjID0gIkltYWdl
cy9zdWNjZXNzR3JlZW5Eb3QucG5nIjsKLSAgICAgICAgICAgIHRoaXMuY29ubmVjdGl2aXR5TWVz
c2FnZS50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiT25saW5lIik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpdml0eUljb24uc3JjID0gIklt
YWdlcy9lcnJvclJlZERvdC5wbmciOwotICAgICAgICAgICAgdGhpcy5jb25uZWN0aXZpdHlNZXNz
YWdlLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPZmZsaW5lIik7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgX3VwZGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fbW9kZWwucmVxdWVzdEFwcGxpY2F0aW9uQ2FjaGUodGhpcy5fZnJhbWVJZCwgdGhpcy5f
dXBkYXRlQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBhcHBsaWNhdGlvbkNhY2hlCi0gICAgICovCi0gICAgX3VwZGF0ZUNhbGxi
YWNrOiBmdW5jdGlvbihhcHBsaWNhdGlvbkNhY2hlKQotICAgIHsKLSAgICAgICAgaWYgKCFhcHBs
aWNhdGlvbkNhY2hlIHx8ICFhcHBsaWNhdGlvbkNhY2hlLm1hbmlmZXN0VVJMKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgdGhpcy5fbWFuaWZlc3Q7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fY3Jl
YXRpb25UaW1lOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZVRpbWU7Ci0gICAgICAg
ICAgICBkZWxldGUgdGhpcy5fc2l6ZTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXNvdXJj
ZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRoaXMuX2VtcHR5Vmlldy5zaG93KHRoaXMu
ZWxlbWVudCk7Ci0gICAgICAgICAgICB0aGlzLmRlbGV0ZUJ1dHRvbi52aXNpYmxlID0gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAodGhpcy5fZGF0YUdyaWQpCi0gICAgICAgICAgICAgICAgdGhpcy5f
ZGF0YUdyaWQuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogYXJlIHRoZXNlIHZhcmlhYmxlcyBu
ZWVkZWQgYW55d2hlcmUgZWxzZT8KLSAgICAgICAgdGhpcy5fbWFuaWZlc3QgPSBhcHBsaWNhdGlv
bkNhY2hlLm1hbmlmZXN0VVJMOwotICAgICAgICB0aGlzLl9jcmVhdGlvblRpbWUgPSBhcHBsaWNh
dGlvbkNhY2hlLmNyZWF0aW9uVGltZTsKLSAgICAgICAgdGhpcy5fdXBkYXRlVGltZSA9IGFwcGxp
Y2F0aW9uQ2FjaGUudXBkYXRlVGltZTsKLSAgICAgICAgdGhpcy5fc2l6ZSA9IGFwcGxpY2F0aW9u
Q2FjaGUuc2l6ZTsKLSAgICAgICAgdGhpcy5fcmVzb3VyY2VzID0gYXBwbGljYXRpb25DYWNoZS5y
ZXNvdXJjZXM7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9kYXRhR3JpZCkKLSAgICAgICAgICAgIHRo
aXMuX2NyZWF0ZURhdGFHcmlkKCk7Ci0KLSAgICAgICAgdGhpcy5fcG9wdWxhdGVEYXRhR3JpZCgp
OwotICAgICAgICB0aGlzLl9kYXRhR3JpZC5hdXRvU2l6ZUNvbHVtbnMoMjAsIDgwKTsKLSAgICAg
ICAgdGhpcy5fZGF0YUdyaWQuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAg
ICAgICAgdGhpcy5fZW1wdHlWaWV3LmRldGFjaCgpOwotICAgICAgICB0aGlzLmRlbGV0ZUJ1dHRv
bi52aXNpYmxlID0gdHJ1ZTsKLQotICAgICAgICAvLyBGSVhNRTogRm9yIENocm9tZSwgcHV0IGNy
ZWF0aW9uVGltZSBhbmQgdXBkYXRlVGltZSBzb21ld2hlcmUuCi0gICAgICAgIC8vIE5PVEU6IGxv
Y2FsaXplZFN0cmluZyBoYXMgbm90IHlldCBiZWVuIGFkZGVkLgotICAgICAgICAvLyBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIiglcykgQ3JlYXRlZDogJXMgVXBkYXRlZDogJXMiLCB0aGlzLl9zaXpl
LCB0aGlzLl9jcmVhdGlvblRpbWUsIHRoaXMuX3VwZGF0ZVRpbWUpOwotICAgIH0sCi0KLSAgICBf
Y3JlYXRlRGF0YUdyaWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjb2x1bW5zID0g
WwotICAgICAgICAgICAge3RpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc291cmNlIiks
IHNvcnQ6IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5PcmRlci5Bc2NlbmRpbmcsIHNvcnRhYmxlOiB0
cnVlfSwKLSAgICAgICAgICAgIHt0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUeXBlIiks
IHNvcnRhYmxlOiB0cnVlfSwKLSAgICAgICAgICAgIHt0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJTaXplIiksIGFsaWduOiBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuQWxpZ24uUmlnaHQsIHNv
cnRhYmxlOiB0cnVlfQotICAgICAgICBdOwotICAgICAgICB0aGlzLl9kYXRhR3JpZCA9IG5ldyBX
ZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLnNo
b3codGhpcy5lbGVtZW50KTsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRGF0YUdyaWQuRXZlbnRzLlNvcnRpbmdDaGFuZ2VkLCB0aGlzLl9wb3B1
bGF0ZURhdGFHcmlkLCB0aGlzKTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlRGF0YUdyaWQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxlY3RlZFJlc291cmNlID0gdGhpcy5fZGF0
YUdyaWQuc2VsZWN0ZWROb2RlID8gdGhpcy5fZGF0YUdyaWQuc2VsZWN0ZWROb2RlLnJlc291cmNl
IDogbnVsbDsKLSAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSB0aGlzLl9kYXRhR3JpZC5pc1Nv
cnRPcmRlckFzY2VuZGluZygpID8gMSA6IC0xOwotCi0gICAgICAgIGZ1bmN0aW9uIG51bWJlckNv
bXBhcmUoZmllbGQsIHJlc291cmNlMSwgcmVzb3VyY2UyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gc29ydERpcmVjdGlvbiAqIChyZXNvdXJjZTFbZmllbGRdIC0gcmVzb3VyY2UyW2Zp
ZWxkXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gbG9jYWxlQ29tcGFyZShmaWVsZCwg
cmVzb3VyY2UxLCByZXNvdXJjZTIpCi0gICAgICAgIHsKLSAgICAgICAgICAgICByZXR1cm4gc29y
dERpcmVjdGlvbiAqIChyZXNvdXJjZTFbZmllbGRdICsgIiIpLmxvY2FsZUNvbXBhcmUocmVzb3Vy
Y2UyW2ZpZWxkXSArICIiKQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGNvbXBhcmF0b3I7Ci0g
ICAgICAgIHN3aXRjaCAocGFyc2VJbnQodGhpcy5fZGF0YUdyaWQuc29ydENvbHVtbklkZW50aWZp
ZXIoKSwgMTApKSB7Ci0gICAgICAgICAgICBjYXNlIDA6IGNvbXBhcmF0b3IgPSBsb2NhbGVDb21w
YXJlLmJpbmQodGhpcywgIm5hbWUiKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6IGNvbXBh
cmF0b3IgPSBsb2NhbGVDb21wYXJlLmJpbmQodGhpcywgInR5cGUiKTsgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIDI6IGNvbXBhcmF0b3IgPSBudW1iZXJDb21wYXJlLmJpbmQodGhpcywgInNpemUi
KTsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBsb2NhbGVDb21wYXJlLmJpbmQodGhpcywg
InJlc291cmNlIik7IC8vIEZJWE1FOiBjb21wYXJhdG9yID0gPwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5fcmVzb3VyY2VzLnNvcnQoY29tcGFyYXRvcik7Ci0gICAgICAgIHRoaXMuX2RhdGFH
cmlkLnJvb3ROb2RlKCkucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICB2YXIgbm9kZVRvU2Vs
ZWN0OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Jlc291cmNlcy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTsKLSAgICAgICAgICAgIHZhciByZXNv
dXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpXTsKLSAgICAgICAgICAgIGRhdGFbMF0gPSByZXNvdXJj
ZS51cmw7Ci0gICAgICAgICAgICBkYXRhWzFdID0gcmVzb3VyY2UudHlwZTsKLSAgICAgICAgICAg
IGRhdGFbMl0gPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyhyZXNvdXJjZS5zaXplKTsKLSAgICAgICAg
ICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoZGF0YSk7Ci0gICAg
ICAgICAgICBub2RlLnJlc291cmNlID0gcmVzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLnNlbGVj
dGFibGUgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQucm9vdE5vZGUoKS5hcHBl
bmRDaGlsZChub2RlKTsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZSA9PT0gc2VsZWN0ZWRSZXNv
dXJjZSkgewotICAgICAgICAgICAgICAgIG5vZGVUb1NlbGVjdCA9IG5vZGU7Ci0gICAgICAgICAg
ICAgICAgbm9kZVRvU2VsZWN0LnNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbm9kZVRvU2VsZWN0ICYmIHRoaXMuX2RhdGFHcmlkLnJvb3RO
b2RlKCkuY2hpbGRyZW4ubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQucm9vdE5v
ZGUoKS5jaGlsZHJlblswXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgfSwKLQotICAgIF9kZWxldGVC
dXR0b25DbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
ZGF0YUdyaWQgfHwgIXRoaXMuX2RhdGFHcmlkLnNlbGVjdGVkTm9kZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBGSVhNRTogRGVsZXRlIEJ1dHRvbiBzZW1hbnRpY3MgYXJlIG5v
dCB5ZXQgZGVmaW5lZC4gKERlbGV0ZSBhIHNpbmdsZSwgb3IgYWxsPykKLSAgICAgICAgdGhpcy5f
ZGVsZXRlQ2FsbGJhY2sodGhpcy5fZGF0YUdyaWQuc2VsZWN0ZWROb2RlKTsKLSAgICB9LAotCi0g
ICAgX2RlbGV0ZUNhbGxiYWNrOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBkZWxldGUgYSBzaW5nbGUgKHNlbGVjdGVkKSByZXNvdXJjZSBvciBhbGwg
cmVzb3VyY2VzPwotICAgICAgICAvLyBJbnNwZWN0b3JCYWNrZW5kLmRlbGV0ZUNhY2hlZFJlc291
cmNlKC4uLikKLSAgICAgICAgLy8gdGhpcy5fdXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXBwbGljYXRpb25DYWNoZU1vZGVsLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BcHBsaWNhdGlvbkNhY2hlTW9kZWwu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDA4MzAuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BcHBsaWNhdGlvbkNhY2hlTW9kZWwu
anMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLgotICogT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8K
LVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTW9kZWwgPSBmdW5jdGlvbigpCi17Ci0gICAg
QXBwbGljYXRpb25DYWNoZUFnZW50LmVuYWJsZSgpOwotICAgIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJBcHBsaWNhdGlvbkNhY2hlRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkFwcGxpY2F0
aW9uQ2FjaGVEaXNwYXRjaGVyKHRoaXMpKTsKLSAgICAKLSAgICBXZWJJbnNwZWN0b3IucmVzb3Vy
Y2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9k
ZWwuRXZlbnRUeXBlcy5GcmFtZU5hdmlnYXRlZCwgdGhpcy5fZnJhbWVOYXZpZ2F0ZWQsIHRoaXMp
OwotICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLkZyYW1lRGV0YWNoZWQsIHRo
aXMuX2ZyYW1lRGV0YWNoZWQsIHRoaXMpOwotICAgIAotICAgIHRoaXMuX3N0YXR1c2VzID0ge307
Ci0gICAgdGhpcy5fbWFuaWZlc3RVUkxzQnlGcmFtZSA9IHt9OwotCi0gICAgdGhpcy5fbWFpbkZy
YW1lTmF2aWdhdGVkKCk7Ci0gICAgCi0gICAgdGhpcy5fb25MaW5lID0gdHJ1ZTsKLX0KLQotV2Vi
SW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNb2RlbC5FdmVudFR5cGVzID0gewotICAgIEZyYW1l
TWFuaWZlc3RTdGF0dXNVcGRhdGVkOiAiRnJhbWVNYW5pZmVzdFN0YXR1c1VwZGF0ZWQiLAotICAg
IEZyYW1lTWFuaWZlc3RBZGRlZDogIkZyYW1lTWFuaWZlc3RBZGRlZCIsCi0gICAgRnJhbWVNYW5p
ZmVzdFJlbW92ZWQ6ICJGcmFtZU1hbmlmZXN0UmVtb3ZlZCIsCi0gICAgTmV0d29ya1N0YXRlQ2hh
bmdlZDogIk5ldHdvcmtTdGF0ZUNoYW5nZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlv
bkNhY2hlTW9kZWwucHJvdG90eXBlID0gewotICAgIF9mcmFtZU5hdmlnYXRlZDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZnJhbWUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rv
ci5SZXNvdXJjZVRyZWVGcmFtZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICBpZiAoZnJhbWUu
aXNNYWluRnJhbWUoKSkgewotICAgICAgICAgICAgdGhpcy5fbWFpbkZyYW1lTmF2aWdhdGVkKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuZ2V0TWFuaWZlc3RGb3JGcmFtZShmcmFtZS5pZCwgdGhpcy5fbWFuaWZlc3RGb3JG
cmFtZUxvYWRlZC5iaW5kKHRoaXMsIGZyYW1lLmlkKSk7Ci0gICAgfSwKLSAgICAKLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBf
ZnJhbWVEZXRhY2hlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZnJhbWUg
PSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0gKi8gKGV2ZW50LmRh
dGEpOwotICAgICAgICB0aGlzLl9mcmFtZU1hbmlmZXN0UmVtb3ZlZChmcmFtZS5pZCk7Ci0gICAg
fSwKLSAgICAKLSAgICBfbWFpbkZyYW1lTmF2aWdhdGVkOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyh0aGlzLl9m
cmFtZXNXaXRoTWFuaWZlc3RzTG9hZGVkLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnJhbWVJZAotICAgICAqIEBwYXJhbSB7P1Byb3RvY29s
LkVycm9yfSBlcnJvcgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdFVSTAotICAgICAq
LwotICAgIF9tYW5pZmVzdEZvckZyYW1lTG9hZGVkOiBmdW5jdGlvbihmcmFtZUlkLCBlcnJvciwg
bWFuaWZlc3RVUkwpCi0gICAgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW1hbmlmZXN0VVJMKQotICAgICAgICAgICAgdGhpcy5fZnJhbWVN
YW5pZmVzdFJlbW92ZWQoZnJhbWVJZCk7Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAgKiBA
cGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuRnJhbWVXaXRoTWFuaWZlc3Q+fSBmcmFtZXNXaXRoTWFuaWZlc3Rz
Ci0gICAgICovCi0gICAgX2ZyYW1lc1dpdGhNYW5pZmVzdHNMb2FkZWQ6IGZ1bmN0aW9uKGVycm9y
LCBmcmFtZXNXaXRoTWFuaWZlc3RzKQotICAgIHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAg
ICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzV2l0aE1hbmlmZXN0cy5s
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RVcGRhdGVkKGZyYW1l
c1dpdGhNYW5pZmVzdHNbaV0uZnJhbWVJZCwgZnJhbWVzV2l0aE1hbmlmZXN0c1tpXS5tYW5pZmVz
dFVSTCwgZnJhbWVzV2l0aE1hbmlmZXN0c1tpXS5zdGF0dXMpOwotICAgIH0sCi0gICAgCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZyYW1lSWQKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gbWFuaWZlc3RVUkwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzCi0gICAgICovCi0g
ICAgX2ZyYW1lTWFuaWZlc3RVcGRhdGVkOiBmdW5jdGlvbihmcmFtZUlkLCBtYW5pZmVzdFVSTCwg
c3RhdHVzKQotICAgIHsKLSAgICAgICAgaWYgKHN0YXR1cyA9PT0gYXBwbGljYXRpb25DYWNoZS5V
TkNBQ0hFRCkgewotICAgICAgICAgICAgdGhpcy5fZnJhbWVNYW5pZmVzdFJlbW92ZWQoZnJhbWVJ
ZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoIW1hbmlmZXN0VVJMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0g
ICAgICAgIGlmICh0aGlzLl9tYW5pZmVzdFVSTHNCeUZyYW1lW2ZyYW1lSWRdICYmIG1hbmlmZXN0
VVJMICE9PSB0aGlzLl9tYW5pZmVzdFVSTHNCeUZyYW1lW2ZyYW1lSWRdKQotICAgICAgICAgICAg
dGhpcy5fZnJhbWVNYW5pZmVzdFJlbW92ZWQoZnJhbWVJZCk7Ci0gICAgICAgIAotICAgICAgICB2
YXIgc3RhdHVzQ2hhbmdlZCA9IHRoaXMuX3N0YXR1c2VzW2ZyYW1lSWRdICE9PSBzdGF0dXM7Ci0g
ICAgICAgIHRoaXMuX3N0YXR1c2VzW2ZyYW1lSWRdID0gc3RhdHVzOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCF0aGlzLl9tYW5pZmVzdFVSTHNCeUZyYW1lW2ZyYW1lSWRdKSB7Ci0gICAgICAgICAg
ICB0aGlzLl9tYW5pZmVzdFVSTHNCeUZyYW1lW2ZyYW1lSWRdID0gbWFuaWZlc3RVUkw7Ci0gICAg
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQXBwbGlj
YXRpb25DYWNoZU1vZGVsLkV2ZW50VHlwZXMuRnJhbWVNYW5pZmVzdEFkZGVkLCBmcmFtZUlkKTsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmIChzdGF0dXNDaGFuZ2VkKQotICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkFwcGxp
Y2F0aW9uQ2FjaGVNb2RlbC5FdmVudFR5cGVzLkZyYW1lTWFuaWZlc3RTdGF0dXNVcGRhdGVkLCBm
cmFtZUlkKTsKLSAgICB9LAotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBm
cmFtZUlkCi0gICAgICovCi0gICAgX2ZyYW1lTWFuaWZlc3RSZW1vdmVkOiBmdW5jdGlvbihmcmFt
ZUlkKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tYW5pZmVzdFVSTHNCeUZyYW1lW2ZyYW1l
SWRdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBtYW5pZmVzdFVSTCA9IHRo
aXMuX21hbmlmZXN0VVJMc0J5RnJhbWVbZnJhbWVJZF07Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9t
YW5pZmVzdFVSTHNCeUZyYW1lW2ZyYW1lSWRdOwotICAgICAgICBkZWxldGUgdGhpcy5fc3RhdHVz
ZXNbZnJhbWVJZF07Ci0gICAgICAgIAotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1vZGVsLkV2ZW50VHlwZXMuRnJhbWVN
YW5pZmVzdFJlbW92ZWQsIGZyYW1lSWQpOwotICAgIH0sCi0gICAgCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IGZyYW1lSWQKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgZnJhbWVNYW5pZmVzdFVSTDogZnVuY3Rpb24oZnJhbWVJZCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9tYW5pZmVzdFVSTHNCeUZyYW1lW2ZyYW1lSWRdIHx8ICIiOwotICAgIH0s
Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZyYW1lSWQKLSAgICAgKiBA
cmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgZnJhbWVNYW5pZmVzdFN0YXR1czogZnVuY3Rp
b24oZnJhbWVJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXNlc1tmcmFtZUlk
XSB8fCBhcHBsaWNhdGlvbkNhY2hlLlVOQ0FDSEVEOwotICAgIH0sCi0gICAgCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBnZXQgb25MaW5lKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9vbkxpbmU7Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gZnJhbWVJZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYW5p
ZmVzdFVSTAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXMKLSAgICAgKi8KLSAgICBfc3Rh
dHVzVXBkYXRlZDogZnVuY3Rpb24oZnJhbWVJZCwgbWFuaWZlc3RVUkwsIHN0YXR1cykKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RVcGRhdGVkKGZyYW1lSWQsIG1hbmlmZXN0VVJM
LCBzdGF0dXMpOwotICAgIH0sCi0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IGZyYW1lSWQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKE9iamVjdCl9IGNhbGxiYWNrCi0gICAg
ICovCi0gICAgcmVxdWVzdEFwcGxpY2F0aW9uQ2FjaGU6IGZ1bmN0aW9uKGZyYW1lSWQsIGNhbGxi
YWNrKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKGVycm9yLCBhcHBs
aWNhdGlvbkNhY2hlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFj
ayhudWxsKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhbGxiYWNrKGFwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0QXBwbGljYXRpb25D
YWNoZUZvckZyYW1lKGZyYW1lSWQsIGNhbGxiYWNrV3JhcHBlci5iaW5kKHRoaXMpKTsKLSAgICB9
LAotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNOb3dPbmxpbmUKLSAg
ICAgKi8KLSAgICBfbmV0d29ya1N0YXRlVXBkYXRlZDogZnVuY3Rpb24oaXNOb3dPbmxpbmUpCi0g
ICAgewotICAgICAgICB0aGlzLl9vbkxpbmUgPSBpc05vd09ubGluZTsKLSAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNb2Rl
bC5FdmVudFR5cGVzLk5ldHdvcmtTdGF0ZUNoYW5nZWQsIGlzTm93T25saW5lKTsKLSAgICB9LAot
Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge0FwcGxpY2F0aW9uQ2FjaGVBZ2VudC5E
aXNwYXRjaGVyfQotICovCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZURpc3BhdGNoZXIg
PSBmdW5jdGlvbihhcHBsaWNhdGlvbkNhY2hlTW9kZWwpCi17Ci0gICAgdGhpcy5fYXBwbGljYXRp
b25DYWNoZU1vZGVsID0gYXBwbGljYXRpb25DYWNoZU1vZGVsOwotfQotCi1XZWJJbnNwZWN0b3Iu
QXBwbGljYXRpb25DYWNoZURpc3BhdGNoZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBmcmFtZUlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG1hbmlmZXN0
VVJMCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1cwotICAgICAqLwotICAgIGFwcGxpY2F0
aW9uQ2FjaGVTdGF0dXNVcGRhdGVkOiBmdW5jdGlvbihmcmFtZUlkLCBtYW5pZmVzdFVSTCwgc3Rh
dHVzKQotICAgIHsKLSAgICAgICAgdGhpcy5fYXBwbGljYXRpb25DYWNoZU1vZGVsLl9zdGF0dXNV
cGRhdGVkKGZyYW1lSWQsIG1hbmlmZXN0VVJMLCBzdGF0dXMpOwotICAgIH0sCi0gICAgCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBpc05vd09ubGluZQotICAgICAqLwotICAgIG5l
dHdvcmtTdGF0ZVVwZGF0ZWQ6IGZ1bmN0aW9uKGlzTm93T25saW5lKQotICAgIHsKLSAgICAgICAg
dGhpcy5fYXBwbGljYXRpb25DYWNoZU1vZGVsLl9uZXR3b3JrU3RhdGVVcGRhdGVkKGlzTm93T25s
aW5lKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0F1ZGl0Q2F0ZWdvcmllcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQXVkaXRDYXRlZ29yaWVzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
ZmQzZjYzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QXVkaXRDYXRlZ29yaWVzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnl9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3JpZXMuUGFnZVBlcmZvcm1hbmNlID0gZnVuY3Rp
b24oKSB7Ci0gICAgV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnkuY2FsbCh0aGlzLCBXZWJJbnNw
ZWN0b3IuQXVkaXRDYXRlZ29yaWVzLlBhZ2VQZXJmb3JtYW5jZS5BdWRpdENhdGVnb3J5TmFtZSk7
Ci19Ci0KLVdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3JpZXMuUGFnZVBlcmZvcm1hbmNlLkF1ZGl0
Q2F0ZWdvcnlOYW1lID0gIldlYiBQYWdlIFBlcmZvcm1hbmNlIjsKLQotV2ViSW5zcGVjdG9yLkF1
ZGl0Q2F0ZWdvcmllcy5QYWdlUGVyZm9ybWFuY2UucHJvdG90eXBlID0gewotICAgIGluaXRpYWxp
emU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZSgpLCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLlNl
dmVyaXR5Lldhcm5pbmcpOwotICAgICAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVzLkNzc0luSGVhZFJ1bGUoKSwgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZlcml0
eS5TZXZlcmUpOwotICAgICAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLlN0eWxlc1NjcmlwdHNPcmRlclJ1bGUoKSwgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZl
cml0eS5TZXZlcmUpOwotICAgICAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLlZlbmRvclByZWZpeGVkQ1NTUHJvcGVydGllcygpLCBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlLlNldmVyaXR5Lldhcm5pbmcpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5BdWRpdENhdGVnb3J5LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5fQotICovCi1XZWJJbnNwZWN0
b3IuQXVkaXRDYXRlZ29yaWVzLk5ldHdvcmtVdGlsaXphdGlvbiA9IGZ1bmN0aW9uKCkgewotICAg
IFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5LmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkF1ZGl0
Q2F0ZWdvcmllcy5OZXR3b3JrVXRpbGl6YXRpb24uQXVkaXRDYXRlZ29yeU5hbWUpOwotfQotCi1X
ZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yaWVzLk5ldHdvcmtVdGlsaXphdGlvbi5BdWRpdENhdGVn
b3J5TmFtZSA9ICJOZXR3b3JrIFV0aWxpemF0aW9uIjsKLQotV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0
ZWdvcmllcy5OZXR3b3JrVXRpbGl6YXRpb24ucHJvdG90eXBlID0gewotICAgIGluaXRpYWxpemU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuR3ppcFJ1bGUoKSwgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZlcml0eS5T
ZXZlcmUpOwotICAgICAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
LkltYWdlRGltZW5zaW9uc1J1bGUoKSwgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZlcml0eS5X
YXJuaW5nKTsKLSAgICAgICAgdGhpcy5hZGRSdWxlKG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5Db29raWVTaXplUnVsZSg0MDApLCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLlNldmVyaXR5Lldh
cm5pbmcpOwotICAgICAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
LlN0YXRpY0Nvb2tpZWxlc3NSdWxlKDUpLCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLlNldmVyaXR5
Lldhcm5pbmcpOwotICAgICAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNvbWJpbmVKc1Jlc291cmNlc1J1bGUoMiksIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuU2V2
ZXJpdHkuU2V2ZXJlKTsKLSAgICAgICAgdGhpcy5hZGRSdWxlKG5ldyBXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5Db21iaW5lQ3NzUmVzb3VyY2VzUnVsZSgyKSwgV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZS5TZXZlcml0eS5TZXZlcmUpOwotICAgICAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLk1pbmltaXplRG5zTG9va3Vwc1J1bGUoNCksIFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGUuU2V2ZXJpdHkuV2FybmluZyk7Ci0gICAgICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuUGFyYWxsZWxpemVEb3dubG9hZFJ1bGUoNCwgMTAsIDAuNSksIFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGUuU2V2ZXJpdHkuV2FybmluZyk7Ci0gICAgICAgIHRoaXMuYWRk
UnVsZShuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQnJvd3NlckNhY2hlQ29udHJvbFJ1bGUo
KSwgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZlcml0eS5TZXZlcmUpOwotICAgICAgICB0aGlz
LmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlByb3h5Q2FjaGVDb250cm9sUnVs
ZSgpLCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLlNldmVyaXR5Lldhcm5pbmcpOwotICAgIH0sCi0K
LSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5LnByb3RvdHlwZQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdENvbnRy
b2xsZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0Q29udHJv
bGxlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3NDhmMi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0Q29udHJvbGxlci5q
cworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQXVkaXRzUGFuZWx9IGF1ZGl0c1BhbmVsCi0g
Ki8KLVdlYkluc3BlY3Rvci5BdWRpdENvbnRyb2xsZXIgPSBmdW5jdGlvbihhdWRpdHNQYW5lbCkK
LXsKLSAgICB0aGlzLl9hdWRpdHNQYW5lbCA9IGF1ZGl0c1BhbmVsOwotICAgIFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJj
ZVRyZWVNb2RlbC5FdmVudFR5cGVzLk9uTG9hZCwgdGhpcy5fZGlkTWFpblJlc291cmNlTG9hZCwg
dGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5BdWRpdENvbnRyb2xsZXIucHJvdG90eXBlID0gewot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdv
cnk+fSBjYXRlZ29yaWVzCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcsICFBcnJheS48
IVdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5UmVzdWx0Pil9IHJlc3VsdENhbGxiYWNrCi0gICAg
ICovCi0gICAgX2V4ZWN1dGVBdWRpdDogZnVuY3Rpb24oY2F0ZWdvcmllcywgcmVzdWx0Q2FsbGJh
Y2spCi0gICAgewotICAgICAgICB0aGlzLl9wcm9ncmVzcy5zZXRUaXRsZShXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlJ1bm5pbmcgYXVkaXQiKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcnVsZVJlc3Vs
dFJlYWR5Q2FsbGJhY2soY2F0ZWdvcnlSZXN1bHQsIHJ1bGVSZXN1bHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChydWxlUmVzdWx0ICYmIHJ1bGVSZXN1bHQuY2hpbGRyZW4pCi0gICAgICAg
ICAgICAgICAgY2F0ZWdvcnlSZXN1bHQuYWRkUnVsZVJlc3VsdChydWxlUmVzdWx0KTsKLQotICAg
ICAgICAgICAgaWYgKHRoaXMuX3Byb2dyZXNzLmlzQ2FuY2VsZWQoKSkKLSAgICAgICAgICAgICAg
ICB0aGlzLl9wcm9ncmVzcy5kb25lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcmVzdWx0
cyA9IFtdOwotICAgICAgICB2YXIgbWFpblJlc291cmNlVVJMID0gV2ViSW5zcGVjdG9yLmluc3Bl
Y3RlZFBhZ2VVUkw7Ci0gICAgICAgIHZhciBjYXRlZ29yaWVzRG9uZSA9IDA7Ci0gICAgICAgIGZ1
bmN0aW9uIGNhdGVnb3J5RG9uZUNhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCsrY2F0ZWdvcmllc0RvbmUgIT09IGNhdGVnb3JpZXMubGVuZ3RoKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmRvbmUoKTsKLSAgICAgICAgICAg
IHJlc3VsdENhbGxiYWNrKG1haW5SZXNvdXJjZVVSTCwgcmVzdWx0cykKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciByZXF1ZXN0cyA9IFdlYkluc3BlY3Rvci5uZXR3b3JrTG9nLnJlcXVlc3RzLnNs
aWNlKCk7Ci0gICAgICAgIHZhciBjb21wb3NpdGVQcm9ncmVzcyA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q29tcG9zaXRlUHJvZ3Jlc3ModGhpcy5fcHJvZ3Jlc3MpOwotICAgICAgICB2YXIgc3VicHJvZ3Jl
c3NlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBzdWJwcm9ncmVzc2VzLnB1c2goY29tcG9zaXRlUHJvZ3Jlc3Mu
Y3JlYXRlU3ViUHJvZ3Jlc3MoKSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2F0ZWdv
cmllcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGNhdGVnb3J5ID0gY2F0ZWdvcmll
c1tpXTsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0
ZWdvcnlSZXN1bHQoY2F0ZWdvcnkpOwotICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7
Ci0gICAgICAgICAgICBjYXRlZ29yeS5ydW4ocmVxdWVzdHMsIHJ1bGVSZXN1bHRSZWFkeUNhbGxi
YWNrLmJpbmQodGhpcywgcmVzdWx0KSwgY2F0ZWdvcnlEb25lQ2FsbGJhY2suYmluZCh0aGlzKSwg
c3VicHJvZ3Jlc3Nlc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtmdW5jdGlvbigpfSBsYXVuY2hlckNhbGxiYWNrCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IG1haW5SZXNvdXJjZVVSTAotICAgICAqIEBwYXJhbSB7IUFycmF5LjwhV2ViSW5zcGVjdG9y
LkF1ZGl0Q2F0ZWdvcnlSZXN1bHQ+fSByZXN1bHRzCi0gICAgICovCi0gICAgX2F1ZGl0RmluaXNo
ZWRDYWxsYmFjazogZnVuY3Rpb24obGF1bmNoZXJDYWxsYmFjaywgbWFpblJlc291cmNlVVJMLCBy
ZXN1bHRzKQotICAgIHsKLSAgICAgICAgdGhpcy5fYXVkaXRzUGFuZWwuYXVkaXRGaW5pc2hlZENh
bGxiYWNrKG1haW5SZXNvdXJjZVVSTCwgcmVzdWx0cyk7Ci0gICAgICAgIGlmICghdGhpcy5fcHJv
Z3Jlc3MuaXNDYW5jZWxlZCgpKQotICAgICAgICAgICAgbGF1bmNoZXJDYWxsYmFjaygpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBjYXRlZ29yeUlk
cwotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2dyZXNzfSBwcm9ncmVzcwotICAgICAq
IEBwYXJhbSB7Ym9vbGVhbn0gcnVuSW1tZWRpYXRlbHkKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9u
KCl9IHN0YXJ0ZWRDYWxsYmFjawotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZmluaXNoZWRD
YWxsYmFjawotICAgICAqLwotICAgIGluaXRpYXRlQXVkaXQ6IGZ1bmN0aW9uKGNhdGVnb3J5SWRz
LCBwcm9ncmVzcywgcnVuSW1tZWRpYXRlbHksIHN0YXJ0ZWRDYWxsYmFjaywgZmluaXNoZWRDYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIGlmICghY2F0ZWdvcnlJZHMgfHwgIWNhdGVnb3J5SWRzLmxl
bmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHBy
b2dyZXNzOwotCi0gICAgICAgIHZhciBjYXRlZ29yaWVzID0gW107Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2F0ZWdvcnlJZHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYXRlZ29y
aWVzLnB1c2godGhpcy5fYXVkaXRzUGFuZWwuY2F0ZWdvcmllc0J5SWRbY2F0ZWdvcnlJZHNbaV1d
KTsKLQotICAgICAgICBmdW5jdGlvbiBzdGFydEF1ZGl0V2hlblJlc291cmNlc1JlYWR5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3RhcnRlZENhbGxiYWNrKCk7Ci0gICAgICAgICAgICB0aGlz
Ll9leGVjdXRlQXVkaXQoY2F0ZWdvcmllcywgdGhpcy5fYXVkaXRGaW5pc2hlZENhbGxiYWNrLmJp
bmQodGhpcywgZmluaXNoZWRDYWxsYmFjaykpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1
bkltbWVkaWF0ZWx5KQotICAgICAgICAgICAgc3RhcnRBdWRpdFdoZW5SZXNvdXJjZXNSZWFkeS5j
YWxsKHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9yZWxvYWRSZXNvdXJj
ZXMoc3RhcnRBdWRpdFdoZW5SZXNvdXJjZXNSZWFkeS5iaW5kKHRoaXMpKTsKLQotICAgICAgICBX
ZWJJbnNwZWN0b3IudXNlck1ldHJpY3MuQXVkaXRzU3RhcnRlZC5yZWNvcmQoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbigpPX0gY2FsbGJhY2sKLSAgICAgKi8K
LSAgICBfcmVsb2FkUmVzb3VyY2VzOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAg
IHRoaXMuX3BhZ2VSZWxvYWRDYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgICBQYWdlQWdlbnQu
cmVsb2FkKGZhbHNlKTsKLSAgICB9LAotCi0gICAgX2RpZE1haW5SZXNvdXJjZUxvYWQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9wYWdlUmVsb2FkQ2FsbGJhY2spIHsKLSAg
ICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX3BhZ2VSZWxvYWRDYWxsYmFjazsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9wYWdlUmVsb2FkQ2FsbGJhY2s7Ci0gICAgICAgICAgICBjYWxs
YmFjaygpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdEZvcm1hdHRlcnMuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0Rm9ybWF0dGVycy5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWZiMDQ4NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0F1ZGl0Rm9ybWF0dGVycy5qcworKysgL2Rldi9udWxsCkBAIC0xLDEyOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkF1ZGl0Rm9ybWF0
dGVycyA9IGZ1bmN0aW9uKCkKLXsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0Rm9ybWF0dGVycy5S
ZWdpc3RyeSA9IHsKLSAgICB0ZXh0OiBmdW5jdGlvbih0ZXh0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOwotICAgIH0sCi0KLSAgICBzbmlwcGV0
OiBmdW5jdGlvbihzbmlwcGV0VGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciBkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgZGl2LnRleHRDb250ZW50ID0gc25pcHBl
dFRleHQ7Ci0gICAgICAgIGRpdi5jbGFzc05hbWUgPSAic291cmNlLWNvZGUiOwotICAgICAgICBy
ZXR1cm4gZGl2OwotICAgIH0sCi0KLSAgICBjb25jYXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAg
IGZvciAodmFyIGFyZyA9IDA7IGFyZyA8IGFyZ3VtZW50cy5sZW5ndGg7ICsrYXJnKQotICAgICAg
ICAgICAgcGFyZW50LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5hdWRpdEZvcm1hdHRlcnMuYXBw
bHkoYXJndW1lbnRzW2FyZ10pKTsKLSAgICAgICAgcmV0dXJuIHBhcmVudDsKLSAgICB9LAotCi0g
ICAgdXJsOiBmdW5jdGlvbih1cmwsIGRpc3BsYXlUZXh0LCBhbGxvd0V4dGVybmFsTmF2aWdhdGlv
bikKLSAgICB7Ci0gICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwot
ICAgICAgICBhLmhyZWYgPSBzYW5pdGl6ZUhyZWYodXJsKTsKLSAgICAgICAgYS50aXRsZSA9IHVy
bDsKLSAgICAgICAgYS50ZXh0Q29udGVudCA9IGRpc3BsYXlUZXh0IHx8IHVybDsKLSAgICAgICAg
aWYgKGFsbG93RXh0ZXJuYWxOYXZpZ2F0aW9uKQotICAgICAgICAgICAgYS50YXJnZXQgPSAiX2Js
YW5rIjsKLSAgICAgICAgcmV0dXJuIGE7Ci0gICAgfSwKLQotICAgIHJlc291cmNlTGluazogZnVu
Y3Rpb24odXJsLCBsaW5lKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IHVzZSBXZWJJbnNwZWN0
b3IuTGlua2lmaWVyCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IubGlua2lmeVJlc291cmNl
QXNOb2RlKHVybCwgbGluZSwgImNvbnNvbGUtbWVzc2FnZS11cmwgd2Via2l0LWh0bWwtcmVzb3Vy
Y2UtbGluayIpOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5BdWRpdEZvcm1hdHRlcnMucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW58bnVtYmVy
fE9iamVjdH0gdmFsdWUKLSAgICAgKi8KLSAgICBhcHBseTogZnVuY3Rpb24odmFsdWUpCi0gICAg
ewotICAgICAgICB2YXIgZm9ybWF0dGVyOwotICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1
ZTsKLSAgICAgICAgdmFyIGFyZ3M7Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAg
IGNhc2UgInN0cmluZyI6Ci0gICAgICAgIGNhc2UgImJvb2xlYW4iOgotICAgICAgICBjYXNlICJu
dW1iZXIiOgotICAgICAgICAgICAgZm9ybWF0dGVyID0gV2ViSW5zcGVjdG9yLkF1ZGl0Rm9ybWF0
dGVycy5SZWdpc3RyeS50ZXh0OwotICAgICAgICBhcmdzID0gWyB2YWx1ZS50b1N0cmluZygpIF07
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgIm9iamVjdCI6Ci0gICAgICAgICAgICBp
ZiAodmFsdWUgaW5zdGFuY2VvZiBOb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
LSAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7Ci0gICAgICAgICAgICAg
ICAgZm9ybWF0dGVyID0gV2ViSW5zcGVjdG9yLkF1ZGl0Rm9ybWF0dGVycy5SZWdpc3RyeS5jb25j
YXQ7Ci0gICAgICAgICAgICAgICAgYXJncyA9IHZhbHVlOwotICAgICAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZS50eXBlICYmIHZhbHVlLmFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgIGZvcm1h
dHRlciA9IFdlYkluc3BlY3Rvci5BdWRpdEZvcm1hdHRlcnMuUmVnaXN0cnlbdmFsdWUudHlwZV07
Ci0gICAgICAgICAgICAgICAgYXJncyA9IHZhbHVlLmFyZ3VtZW50czsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoIWZvcm1hdHRlcikKLSAgICAgICAgICAgIHRocm93ICJJ
bnZhbGlkIHZhbHVlIG9yIGZvcm1hdHRlcjogIiArIHR5cGUgKyBKU09OLnN0cmluZ2lmeSh2YWx1
ZSk7Ci0KLSAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5hcHBseShudWxsLCBhcmdzKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGZvcm1hdHRlcnMKLSAgICAgKiBA
cGFyYW0ge09iamVjdH0gdGhpc0FyZ3VtZW50Ci0gICAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVh
bnxudW1iZXJ8T2JqZWN0fSB2YWx1ZQotICAgICAqLwotICAgIHBhcnRpYWxseUFwcGx5OiBmdW5j
dGlvbihmb3JtYXR0ZXJzLCB0aGlzQXJndW1lbnQsIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKHRo
aXMucGFydGlhbGx5QXBwbHkuYmluZCh0aGlzLCBmb3JtYXR0ZXJzLCB0aGlzQXJndW1lbnQpKTsK
LSAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIGZvcm1hdHRl
cnNbdmFsdWUudHlwZV0gPT09ICJmdW5jdGlvbiIgJiYgdmFsdWUuYXJndW1lbnRzKQotICAgICAg
ICAgICAgcmV0dXJuIGZvcm1hdHRlcnNbdmFsdWUudHlwZV0uYXBwbHkodGhpc0FyZ3VtZW50LCB2
YWx1ZS5hcmd1bWVudHMpOwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuYXVkaXRGb3JtYXR0ZXJzID0gbmV3IFdlYkluc3BlY3Rvci5BdWRpdEZvcm1hdHRl
cnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVk
aXRMYXVuY2hlclZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1
ZGl0TGF1bmNoZXJWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzgyOWIy
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRM
YXVuY2hlclZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5BdWRpdENvbnRyb2xsZXJ9IGF1ZGl0
Q29udHJvbGxlcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQotICovCi1XZWJJbnNw
ZWN0b3IuQXVkaXRMYXVuY2hlclZpZXcgPSBmdW5jdGlvbihhdWRpdENvbnRyb2xsZXIpCi17Ci0g
ICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX2F1ZGl0Q29udHJv
bGxlciA9IGF1ZGl0Q29udHJvbGxlcjsKLQotICAgIHRoaXMuX2NhdGVnb3J5SWRQcmVmaXggPSAi
YXVkaXQtY2F0ZWdvcnktaXRlbS0iOwotICAgIHRoaXMuX2F1ZGl0UnVubmluZyA9IGZhbHNlOwot
Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImF1ZGl0LWxhdW5jaGVyLXZpZXciKTsK
LSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygicGFuZWwtZW5hYmxlci12aWV3Iik7Ci0K
LSAgICB0aGlzLl9jb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgIHRoaXMuX2NvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJhdWRpdC1sYXVuY2hlci12
aWV3LWNvbnRlbnQiOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50
RWxlbWVudCk7Ci0gICAgdGhpcy5fYm91bmRDYXRlZ29yeUNsaWNrTGlzdGVuZXIgPSB0aGlzLl9j
YXRlZ29yeUNsaWNrZWQuYmluZCh0aGlzKTsKLQotICAgIHRoaXMuX3Jlc2V0UmVzb3VyY2VDb3Vu
dCgpOwotCi0gICAgdGhpcy5fc29ydGVkQ2F0ZWdvcmllcyA9IFtdOwotCi0gICAgdGhpcy5faGVh
ZGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIik7Ci0gICAgdGhpcy5faGVh
ZGVyRWxlbWVudC5jbGFzc05hbWUgPSAibm8tYXVkaXRzIjsKLSAgICB0aGlzLl9oZWFkZXJFbGVt
ZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBhdWRpdHMgdG8gcnVu
Iik7Ci0gICAgdGhpcy5fY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5faGVhZGVyRWxl
bWVudCk7Ci0KLSAgICBXZWJJbnNwZWN0b3IubmV0d29ya01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuTmV0d29ya01hbmFnZXIuRXZlbnRUeXBlcy5SZXF1ZXN0U3RhcnRlZCwg
dGhpcy5fb25SZXF1ZXN0U3RhcnRlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLm5ldHdvcmtN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5ldHdvcmtNYW5hZ2VyLkV2ZW50
VHlwZXMuUmVxdWVzdEZpbmlzaGVkLCB0aGlzLl9vblJlcXVlc3RGaW5pc2hlZCwgdGhpcyk7Ci0K
LSAgICB2YXIgZGVmYXVsdFNlbGVjdGVkQXVkaXRDYXRlZ29yeSA9IHt9OwotICAgIGRlZmF1bHRT
ZWxlY3RlZEF1ZGl0Q2F0ZWdvcnlbV2ViSW5zcGVjdG9yLkF1ZGl0TGF1bmNoZXJWaWV3LkFsbENh
dGVnb3JpZXNLZXldID0gdHJ1ZTsKLSAgICB0aGlzLl9zZWxlY3RlZENhdGVnb3JpZXNTZXR0aW5n
ID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmNyZWF0ZVNldHRpbmcoInNlbGVjdGVkQXVkaXRDYXRl
Z29yaWVzIiwgZGVmYXVsdFNlbGVjdGVkQXVkaXRDYXRlZ29yeSk7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5BdWRpdExhdW5jaGVyVmlldy5BbGxDYXRlZ29yaWVzS2V5ID0gIl9fQWxsQ2F0ZWdvcmllcyI7
Ci0KLVdlYkluc3BlY3Rvci5BdWRpdExhdW5jaGVyVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgX3Jl
c2V0UmVzb3VyY2VDb3VudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbG9hZGVk
UmVzb3VyY2VzID0gMDsKLSAgICAgICAgdGhpcy5fdG90YWxSZXNvdXJjZXMgPSAwOwotICAgIH0s
Ci0KLSAgICBfb25SZXF1ZXN0U3RhcnRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgcmVxdWVzdCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSAq
LyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIC8vIElnbm9yZSBsb25nLWxpdmluZyBXZWJTb2NrZXRz
IGZvciB0aGUgc2FrZSBvZiBwcm9ncmVzcyBpbmRpY2F0b3IsIGFzIHdlIHdvbid0IGJlIHdhaXRp
bmcgdGhlbSBhbnl3YXkuCi0gICAgICAgIGlmIChyZXF1ZXN0LnR5cGUgPT09IFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVR5cGVzLldlYlNvY2tldCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Kyt0aGlzLl90b3RhbFJlc291cmNlczsKLSAgICAgICAgdGhpcy5fdXBkYXRlUmVzb3VyY2VQcm9n
cmVzcygpOwotICAgIH0sCi0KLSAgICBfb25SZXF1ZXN0RmluaXNoZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5O
ZXR3b3JrUmVxdWVzdH0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICAvLyBTZWUgcmVzb3JjZVN0
YXJ0ZWQgZm9yIGRldGFpbHMuCi0gICAgICAgIGlmIChyZXF1ZXN0LnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5yZXNvdXJjZVR5cGVzLldlYlNvY2tldCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgKyt0aGlzLl9sb2FkZWRSZXNvdXJjZXM7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVJlc291cmNl
UHJvZ3Jlc3MoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVj
dG9yLkF1ZGl0Q2F0ZWdvcnl9IGNhdGVnb3J5Ci0gICAgICovCi0gICAgYWRkQ2F0ZWdvcnk6IGZ1
bmN0aW9uKGNhdGVnb3J5KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zb3J0ZWRDYXRlZ29y
aWVzLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUxhdW5jaGVyVUkoKTsKLQotICAg
ICAgICB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzID0gdGhpcy5fc2VsZWN0ZWRDYXRlZ29yaWVzU2V0
dGluZy5nZXQoKTsKLSAgICAgICAgdmFyIGNhdGVnb3J5RWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNh
dGVnb3J5RWxlbWVudChjYXRlZ29yeS5kaXNwbGF5TmFtZSwgY2F0ZWdvcnkuaWQpOwotICAgICAg
ICBjYXRlZ29yeS5fY2hlY2tib3hFbGVtZW50ID0gY2F0ZWdvcnlFbGVtZW50LmZpcnN0Q2hpbGQ7
Ci0gICAgICAgIGlmICh0aGlzLl9zZWxlY3RBbGxDaGVja2JveEVsZW1lbnQuY2hlY2tlZCB8fCBz
ZWxlY3RlZENhdGVnb3JpZXNbY2F0ZWdvcnkuZGlzcGxheU5hbWVdKSB7Ci0gICAgICAgICAgICBj
YXRlZ29yeS5fY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSB0cnVlOwotICAgICAgICAgICAgKyt0
aGlzLl9jdXJyZW50Q2F0ZWdvcmllc0NvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gY29tcGFyZUNhdGVnb3JpZXMoYSwgYikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGFU
aXRsZSA9IGEuZGlzcGxheU5hbWUgfHwgIiI7Ci0gICAgICAgICAgICB2YXIgYlRpdGxlID0gYi5k
aXNwbGF5TmFtZSB8fCAiIjsKLSAgICAgICAgICAgIHJldHVybiBhVGl0bGUubG9jYWxlQ29tcGFy
ZShiVGl0bGUpOwotICAgICAgICB9Ci0gICAgICAgIHZhciBpbnNlcnRCZWZvcmUgPSBpbnNlcnRp
b25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24oY2F0ZWdvcnksIHRoaXMuX3Nv
cnRlZENhdGVnb3JpZXMsIGNvbXBhcmVDYXRlZ29yaWVzKTsKLSAgICAgICAgdGhpcy5fY2F0ZWdv
cmllc0VsZW1lbnQuaW5zZXJ0QmVmb3JlKGNhdGVnb3J5RWxlbWVudCwgdGhpcy5fY2F0ZWdvcmll
c0VsZW1lbnQuY2hpbGRyZW5baW5zZXJ0QmVmb3JlXSk7Ci0gICAgICAgIHRoaXMuX3NvcnRlZENh
dGVnb3JpZXMuc3BsaWNlKGluc2VydEJlZm9yZSwgMCwgY2F0ZWdvcnkpOwotICAgICAgICB0aGlz
Ll9zZWxlY3RlZENhdGVnb3JpZXNVcGRhdGVkKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7Ym9vbGVhbn0gYXVkaXRSdW5uaW5nCi0gICAgICovCi0gICAgX3NldEF1ZGl0UnVu
bmluZzogZnVuY3Rpb24oYXVkaXRSdW5uaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2F1
ZGl0UnVubmluZyA9PT0gYXVkaXRSdW5uaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB0aGlzLl9hdWRpdFJ1bm5pbmcgPSBhdWRpdFJ1bm5pbmc7Ci0gICAgICAgIHRoaXMuX3VwZGF0
ZUJ1dHRvbigpOwotICAgICAgICB0aGlzLl90b2dnbGVVSUNvbXBvbmVudHModGhpcy5fYXVkaXRS
dW5uaW5nKTsKLSAgICAgICAgaWYgKHRoaXMuX2F1ZGl0UnVubmluZykKLSAgICAgICAgICAgIHRo
aXMuX3N0YXJ0QXVkaXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fc3RvcEF1
ZGl0KCk7Ci0gICAgfSwKLQotICAgIF9zdGFydEF1ZGl0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgY2F0SWRzID0gW107Ci0gICAgICAgIGZvciAodmFyIGNhdGVnb3J5ID0gMDsgY2F0
ZWdvcnkgPCB0aGlzLl9zb3J0ZWRDYXRlZ29yaWVzLmxlbmd0aDsgKytjYXRlZ29yeSkgewotICAg
ICAgICAgICAgaWYgKHRoaXMuX3NvcnRlZENhdGVnb3JpZXNbY2F0ZWdvcnldLl9jaGVja2JveEVs
ZW1lbnQuY2hlY2tlZCkKLSAgICAgICAgICAgICAgICBjYXRJZHMucHVzaCh0aGlzLl9zb3J0ZWRD
YXRlZ29yaWVzW2NhdGVnb3J5XS5pZCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9yZXNl
dFJlc291cmNlQ291bnQoKTsKLSAgICAgICAgdGhpcy5fcHJvZ3Jlc3NJbmRpY2F0b3IgPSBuZXcg
V2ViSW5zcGVjdG9yLlByb2dyZXNzSW5kaWNhdG9yKCk7Ci0gICAgICAgIHRoaXMuX2J1dHRvbkNv
bnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fcHJvZ3Jlc3NJbmRpY2F0b3IuZWxlbWVu
dCk7Ci0gICAgICAgIHRoaXMuX2Rpc3BsYXlSZXNvdXJjZUxvYWRpbmdQcm9ncmVzcyA9IHRydWU7
Ci0KLSAgICAgICAgZnVuY3Rpb24gb25BdWRpdFN0YXJ0ZWQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0aGlzLl9kaXNwbGF5UmVzb3VyY2VMb2FkaW5nUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9hdWRpdENvbnRyb2xsZXIuaW5pdGlhdGVBdWRpdChjYXRJZHMs
IHRoaXMuX3Byb2dyZXNzSW5kaWNhdG9yLCB0aGlzLl9hdWRpdFByZXNlbnRTdGF0ZUVsZW1lbnQu
Y2hlY2tlZCwgb25BdWRpdFN0YXJ0ZWQuYmluZCh0aGlzKSwgdGhpcy5fc2V0QXVkaXRSdW5uaW5n
LmJpbmQodGhpcywgZmFsc2UpKTsKLSAgICB9LAotCi0gICAgX3N0b3BBdWRpdDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fZGlzcGxheVJlc291cmNlTG9hZGluZ1Byb2dyZXNzID0g
ZmFsc2U7Ci0gICAgICAgIHRoaXMuX3Byb2dyZXNzSW5kaWNhdG9yLmNhbmNlbCgpOwotICAgICAg
ICB0aGlzLl9wcm9ncmVzc0luZGljYXRvci5kb25lKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9w
cm9ncmVzc0luZGljYXRvcjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29s
ZWFufSBkaXNhYmxlCi0gICAgICovCi0gICAgX3RvZ2dsZVVJQ29tcG9uZW50czogZnVuY3Rpb24o
ZGlzYWJsZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94RWxlbWVudC5k
aXNhYmxlZCA9IGRpc2FibGU7Ci0gICAgICAgIHRoaXMuX2NhdGVnb3JpZXNFbGVtZW50LmRpc2Fi
bGVkID0gZGlzYWJsZTsKLSAgICAgICAgdGhpcy5fYXVkaXRQcmVzZW50U3RhdGVFbGVtZW50LmRp
c2FibGVkID0gZGlzYWJsZTsKLSAgICAgICAgdGhpcy5fYXVkaXRSZWxvYWRlZFN0YXRlRWxlbWVu
dC5kaXNhYmxlZCA9IGRpc2FibGU7Ci0gICAgfSwKLQotICAgIF9sYXVuY2hCdXR0b25DbGlja2Vk
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NldEF1ZGl0UnVubmluZygh
dGhpcy5fYXVkaXRSdW5uaW5nKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHti
b29sZWFufSBjaGVja0NhdGVnb3JpZXMKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB1c2VyR2Vz
dHVyZQotICAgICAqLwotICAgIF9zZWxlY3RBbGxDbGlja2VkOiBmdW5jdGlvbihjaGVja0NhdGVn
b3JpZXMsIHVzZXJHZXN0dXJlKQotICAgIHsKLSAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlz
Ll9jYXRlZ29yaWVzRWxlbWVudC5jaGlsZE5vZGVzOwotICAgICAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IGNoaWxkTm9kZXNbaV0uZmlyc3RDaGlsZC5jaGVja2VkID0gY2hlY2tDYXRlZ29yaWVzOwotICAg
ICAgICB0aGlzLl9jdXJyZW50Q2F0ZWdvcmllc0NvdW50ID0gY2hlY2tDYXRlZ29yaWVzID8gdGhp
cy5fc29ydGVkQ2F0ZWdvcmllcy5sZW5ndGggOiAwOwotICAgICAgICB0aGlzLl9zZWxlY3RlZENh
dGVnb3JpZXNVcGRhdGVkKHVzZXJHZXN0dXJlKTsKLSAgICB9LAotCi0gICAgX2NhdGVnb3J5Q2xp
Y2tlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9jdXJyZW50Q2F0ZWdv
cmllc0NvdW50ICs9IGV2ZW50LnRhcmdldC5jaGVja2VkID8gMSA6IC0xOwotICAgICAgICB0aGlz
Ll9zZWxlY3RBbGxDaGVja2JveEVsZW1lbnQuY2hlY2tlZCA9IHRoaXMuX2N1cnJlbnRDYXRlZ29y
aWVzQ291bnQgPT09IHRoaXMuX3NvcnRlZENhdGVnb3JpZXMubGVuZ3RoOwotICAgICAgICB0aGlz
Ll9zZWxlY3RlZENhdGVnb3JpZXNVcGRhdGVkKHRydWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAg
ICAgKi8KLSAgICBfY3JlYXRlQ2F0ZWdvcnlFbGVtZW50OiBmdW5jdGlvbih0aXRsZSwgaWQpCi0g
ICAgewotICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
bGFiZWwiKTsKLSAgICAgICAgbGFiZWxFbGVtZW50LmlkID0gdGhpcy5fY2F0ZWdvcnlJZFByZWZp
eCArIGlkOwotCi0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aW5wdXQiKTsKLSAgICAgICAgZWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKLSAgICAgICAgaWYg
KGlkICE9PSAiIikKLSAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl9ib3VuZENhdGVnb3J5Q2xpY2tMaXN0ZW5lciwgZmFsc2UpOwotICAgICAgICBsYWJl
bEVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0gICAgICAgIGxhYmVsRWxlbWVudC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aXRsZSkpOwotICAgICAgICBsYWJlbEVs
ZW1lbnQuX19kaXNwbGF5TmFtZSA9IHRpdGxlOwotCi0gICAgICAgIHJldHVybiBsYWJlbEVsZW1l
bnQ7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVMYXVuY2hlclVJOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9oZWFkZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEi
KTsKLSAgICAgICAgdGhpcy5faGVhZGVyRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiU2VsZWN0IGF1ZGl0cyB0byBydW4iKTsKLQotICAgICAgICBmb3IgKHZhciBj
aGlsZCA9IDA7IGNoaWxkIDwgdGhpcy5fY29udGVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyAr
K2NoaWxkKQotICAgICAgICAgICAgdGhpcy5fY29udGVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhp
cy5fY29udGVudEVsZW1lbnQuY2hpbGRyZW5bY2hpbGRdKTsKLQotICAgICAgICB0aGlzLl9jb250
ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9oZWFkZXJFbGVtZW50KTsKLQotICAgICAgICBm
dW5jdGlvbiBoYW5kbGVTZWxlY3RBbGxDbGljayhldmVudCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdGhpcy5fc2VsZWN0QWxsQ2xpY2tlZChldmVudC50YXJnZXQuY2hlY2tlZCwgdHJ1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdmFyIGNhdGVnb3J5RWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNhdGVn
b3J5RWxlbWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNlbGVjdCBBbGwiKSwgIiIpOwotICAg
ICAgICBjYXRlZ29yeUVsZW1lbnQuaWQgPSAiYXVkaXQtbGF1bmNoZXItc2VsZWN0YWxsIjsKLSAg
ICAgICAgdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hFbGVtZW50ID0gY2F0ZWdvcnlFbGVtZW50LmZp
cnN0Q2hpbGQ7Ci0gICAgICAgIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94RWxlbWVudC5jaGVja2Vk
ID0gdGhpcy5fc2VsZWN0ZWRDYXRlZ29yaWVzU2V0dGluZy5nZXQoKVtXZWJJbnNwZWN0b3IuQXVk
aXRMYXVuY2hlclZpZXcuQWxsQ2F0ZWdvcmllc0tleV07Ci0gICAgICAgIHRoaXMuX3NlbGVjdEFs
bENoZWNrYm94RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGhhbmRsZVNlbGVjdEFs
bENsaWNrLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fY29udGVudEVsZW1lbnQu
YXBwZW5kQ2hpbGQoY2F0ZWdvcnlFbGVtZW50KTsKLQotICAgICAgICB0aGlzLl9jYXRlZ29yaWVz
RWxlbWVudCA9IHRoaXMuX2NvbnRlbnRFbGVtZW50LmNyZWF0ZUNoaWxkKCJmaWVsZHNldCIsICJh
dWRpdC1jYXRlZ29yaWVzLWNvbnRhaW5lciIpOwotICAgICAgICB0aGlzLl9jdXJyZW50Q2F0ZWdv
cmllc0NvdW50ID0gMDsKLQotICAgICAgICB0aGlzLl9jb250ZW50RWxlbWVudC5jcmVhdGVDaGls
ZCgiZGl2IiwgImZsZXhpYmxlLXNwYWNlIik7Ci0KLSAgICAgICAgdGhpcy5fYnV0dG9uQ29udGFp
bmVyRWxlbWVudCA9IHRoaXMuX2NvbnRlbnRFbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiYnV0
dG9uLWNvbnRhaW5lciIpOwotCi0gICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSB0aGlzLl9idXR0
b25Db250YWluZXJFbGVtZW50LmNyZWF0ZUNoaWxkKCJsYWJlbCIpOwotICAgICAgICB0aGlzLl9h
dWRpdFByZXNlbnRTdGF0ZUVsZW1lbnQgPSBsYWJlbEVsZW1lbnQuY3JlYXRlQ2hpbGQoImlucHV0
Iik7Ci0gICAgICAgIHRoaXMuX2F1ZGl0UHJlc2VudFN0YXRlRWxlbWVudC5uYW1lID0gImF1ZGl0
LW1vZGUiOwotICAgICAgICB0aGlzLl9hdWRpdFByZXNlbnRTdGF0ZUVsZW1lbnQudHlwZSA9ICJy
YWRpbyI7Ci0gICAgICAgIHRoaXMuX2F1ZGl0UHJlc2VudFN0YXRlRWxlbWVudC5jaGVja2VkID0g
dHJ1ZTsKLSAgICAgICAgdGhpcy5fYXVkaXRQcmVzZW50U3RhdGVMYWJlbEVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkF1ZGl0IFByZXNlbnQg
U3RhdGUiKSk7Ci0gICAgICAgIGxhYmVsRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9hdWRpdFBy
ZXNlbnRTdGF0ZUxhYmVsRWxlbWVudCk7Ci0KLSAgICAgICAgbGFiZWxFbGVtZW50ID0gdGhpcy5f
YnV0dG9uQ29udGFpbmVyRWxlbWVudC5jcmVhdGVDaGlsZCgibGFiZWwiKTsKLSAgICAgICAgdGhp
cy5fYXVkaXRSZWxvYWRlZFN0YXRlRWxlbWVudCA9IGxhYmVsRWxlbWVudC5jcmVhdGVDaGlsZCgi
aW5wdXQiKTsKLSAgICAgICAgdGhpcy5fYXVkaXRSZWxvYWRlZFN0YXRlRWxlbWVudC5uYW1lID0g
ImF1ZGl0LW1vZGUiOwotICAgICAgICB0aGlzLl9hdWRpdFJlbG9hZGVkU3RhdGVFbGVtZW50LnR5
cGUgPSAicmFkaW8iOwotICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIlJlbG9hZCBQYWdlIGFuZCBBdWRpdCBvbiBMb2FkIikpOwotCi0gICAg
ICAgIHRoaXMuX2xhdW5jaEJ1dHRvbiA9IHRoaXMuX2J1dHRvbkNvbnRhaW5lckVsZW1lbnQuY3Jl
YXRlQ2hpbGQoImJ1dHRvbiIpOwotICAgICAgICB0aGlzLl9sYXVuY2hCdXR0b24udGV4dENvbnRl
bnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJ1biIpOwotICAgICAgICB0aGlzLl9sYXVuY2hC
dXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9sYXVuY2hCdXR0b25DbGlja2Vk
LmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgICAgICB0aGlzLl9zZWxlY3RBbGxDbGlja2VkKHRo
aXMuX3NlbGVjdEFsbENoZWNrYm94RWxlbWVudC5jaGVja2VkKTsKLSAgICB9LAotCi0gICAgX3Vw
ZGF0ZVJlc291cmNlUHJvZ3Jlc3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9kaXNwbGF5UmVzb3VyY2VMb2FkaW5nUHJvZ3Jlc3MpCi0gICAgICAgICAgICB0aGlzLl9wcm9n
cmVzc0luZGljYXRvci5zZXRUaXRsZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmcgKCVk
IG9mICVkKSIsIHRoaXMuX2xvYWRlZFJlc291cmNlcywgdGhpcy5fdG90YWxSZXNvdXJjZXMpKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gdXNlckdlc3R1cmUK
LSAgICAgKi8KLSAgICBfc2VsZWN0ZWRDYXRlZ29yaWVzVXBkYXRlZDogZnVuY3Rpb24odXNlckdl
c3R1cmUpCi0gICAgewotICAgICAgICAvLyBTYXZlIHByZXNlbnQgY2F0ZWdvcmllcyBvbmx5IHVw
b24gdXNlciBnZXN0dXJlIHRvIGNsZWFuIHVwIGp1bmsgZnJvbSBwYXN0IHZlcnNpb25zIGFuZCBy
ZW1vdmVkIGV4dGVuc2lvbnMuCi0gICAgICAgIC8vIERvIG5vdCByZW1vdmUgb2xkIGNhdGVnb3Jp
ZXMgaWYgbm90IGhhbmRsaW5nIGEgdXNlciBnZXN0dXJlLCBhcyB0aGVyZSdzIGNoYW5jZSBjYXRl
Z29yaWVzIHdpbGwgYmUgYWRkZWQKLSAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIHN0YXJ0LXVwLgot
ICAgICAgICB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzID0gdXNlckdlc3R1cmUgPyB7fSA6IHRoaXMu
X3NlbGVjdGVkQ2F0ZWdvcmllc1NldHRpbmcuZ2V0KCk7Ci0gICAgICAgIHZhciBjaGlsZE5vZGVz
ID0gdGhpcy5fY2F0ZWdvcmllc0VsZW1lbnQuY2hpbGROb2RlczsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBzZWxlY3RlZENhdGVnb3JpZXNbY2hpbGROb2Rlc1tpXS5fX2Rpc3BsYXlOYW1lXSA9
IGNoaWxkTm9kZXNbaV0uZmlyc3RDaGlsZC5jaGVja2VkOwotICAgICAgICBzZWxlY3RlZENhdGVn
b3JpZXNbV2ViSW5zcGVjdG9yLkF1ZGl0TGF1bmNoZXJWaWV3LkFsbENhdGVnb3JpZXNLZXldID0g
dGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hFbGVtZW50LmNoZWNrZWQ7Ci0gICAgICAgIHRoaXMuX3Nl
bGVjdGVkQ2F0ZWdvcmllc1NldHRpbmcuc2V0KHNlbGVjdGVkQ2F0ZWdvcmllcyk7Ci0gICAgICAg
IHRoaXMuX3VwZGF0ZUJ1dHRvbigpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlQnV0dG9uOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9sYXVuY2hCdXR0b24udGV4dENvbnRlbnQgPSB0
aGlzLl9hdWRpdFJ1bm5pbmcgPyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0b3AiKSA6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiUnVuIik7Ci0gICAgICAgIHRoaXMuX2xhdW5jaEJ1dHRvbi5kaXNh
YmxlZCA9ICF0aGlzLl9jdXJyZW50Q2F0ZWdvcmllc0NvdW50OwotICAgIH0sCi0KLSAgICBfX3By
b3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJlc3VsdFZpZXcuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UmVzdWx0Vmlldy5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3NjZhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UmVzdWx0Vmlldy5qcworKysgL2Rldi9udWxsCkBA
IC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNw
ZWN0b3IuU2lkZWJhclBhbmVTdGFja30KLSAqIEBwYXJhbSB7IUFycmF5LjwhV2ViSW5zcGVjdG9y
LkF1ZGl0Q2F0ZWdvcnlSZXN1bHQ+fSBjYXRlZ29yeVJlc3VsdHMKLSAqLwotV2ViSW5zcGVjdG9y
LkF1ZGl0UmVzdWx0VmlldyA9IGZ1bmN0aW9uKGNhdGVnb3J5UmVzdWx0cykKLXsKLSAgICBXZWJJ
bnNwZWN0b3IuU2lkZWJhclBhbmVTdGFjay5jYWxsKHRoaXMpOwotICAgIHRoaXMuZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJhdWRpdC1yZXN1bHQtdmlldyIpOwotCi0gICAgZnVuY3Rpb24gY2F0ZWdv
cnlTb3J0ZXIoYSwgYikgewotICAgICAgICByZXR1cm4gKGEudGl0bGUgfHwgIiIpLmxvY2FsZUNv
bXBhcmUoYi50aXRsZSB8fCAiIik7Ci0gICAgfQotICAgIGNhdGVnb3J5UmVzdWx0cy5zb3J0KGNh
dGVnb3J5U29ydGVyKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhdGVnb3J5UmVzdWx0cy5s
ZW5ndGg7ICsraSkKLSAgICAgICAgdGhpcy5hZGRQYW5lKG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRD
YXRlZ29yeVJlc3VsdFBhbmUoY2F0ZWdvcnlSZXN1bHRzW2ldKSk7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5BdWRpdFJlc3VsdFZpZXcucHJvdG90eXBlID0gewotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLlNpZGViYXJQYW5lU3RhY2sucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lfQotICogQHBhcmFtIHshV2Vi
SW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnlSZXN1bHR9IGNhdGVnb3J5UmVzdWx0Ci0gKi8KLVdlYklu
c3BlY3Rvci5BdWRpdENhdGVnb3J5UmVzdWx0UGFuZSA9IGZ1bmN0aW9uKGNhdGVnb3J5UmVzdWx0
KQotewotICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5jYWxsKHRoaXMsIGNhdGVnb3J5UmVz
dWx0LnRpdGxlKTsKLSAgICB2YXIgdHJlZU91dGxpbmVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgib2wiKTsKLSAgICB0aGlzLmJvZHlFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImF1ZGl0
LXJlc3VsdC10cmVlIik7Ci0gICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlT3V0
bGluZUVsZW1lbnQpOwotCi0gICAgdGhpcy5fdHJlZU91dGxpbmUgPSBuZXcgVHJlZU91dGxpbmUo
dHJlZU91dGxpbmVFbGVtZW50KTsKLSAgICB0aGlzLl90cmVlT3V0bGluZS5leHBhbmRUcmVlRWxl
bWVudHNXaGVuQXJyb3dpbmcgPSB0cnVlOwotCi0gICAgZnVuY3Rpb24gcnVsZVNvcnRlcihhLCBi
KQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuU2V2
ZXJpdHlPcmRlclthLnNldmVyaXR5IHx8IDBdIC0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZl
cml0eU9yZGVyW2Iuc2V2ZXJpdHkgfHwgMF07Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAg
ICAgICAgcmVzdWx0ID0gKGEudmFsdWUgfHwgIiIpLmxvY2FsZUNvbXBhcmUoYi52YWx1ZSB8fCAi
Iik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgY2F0ZWdvcnlSZXN1bHQu
cnVsZVJlc3VsdHMuc29ydChydWxlU29ydGVyKTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y2F0ZWdvcnlSZXN1bHQucnVsZVJlc3VsdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHJ1
bGVSZXN1bHQgPSBjYXRlZ29yeVJlc3VsdC5ydWxlUmVzdWx0c1tpXTsKLSAgICAgICAgdmFyIHRy
ZWVFbGVtZW50ID0gdGhpcy5fYXBwZW5kUmVzdWx0KHRoaXMuX3RyZWVPdXRsaW5lLCBydWxlUmVz
dWx0KTsKLSAgICAgICAgdHJlZUVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
ImF1ZGl0LXJlc3VsdCIpOwotCi0gICAgICAgIGlmIChydWxlUmVzdWx0LnNldmVyaXR5KSB7Ci0g
ICAgICAgICAgICB2YXIgc2V2ZXJpdHlFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aW1nIik7Ci0gICAgICAgICAgICBzZXZlcml0eUVsZW1lbnQuY2xhc3NOYW1lID0gInNldmVyaXR5
LSIgKyBydWxlUmVzdWx0LnNldmVyaXR5OwotICAgICAgICAgICAgdHJlZUVsZW1lbnQubGlzdEl0
ZW1FbGVtZW50LmFwcGVuZENoaWxkKHNldmVyaXR5RWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgdGhpcy5leHBhbmQoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnlSZXN1
bHRQYW5lLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyhUcmVlT3V0bGlu
ZXxUcmVlRWxlbWVudCl9IHBhcmVudFRyZWVFbGVtZW50Ci0gICAgICogQHBhcmFtIHshV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZVJlc3VsdH0gcmVzdWx0Ci0gICAgICovCi0gICAgX2FwcGVuZFJlc3Vs
dDogZnVuY3Rpb24ocGFyZW50VHJlZUVsZW1lbnQsIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHZh
ciB0aXRsZSA9ICIiOwotCi0gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0LnZhbHVlID09PSAic3Ry
aW5nIikgewotICAgICAgICAgICAgdGl0bGUgPSByZXN1bHQudmFsdWU7Ci0gICAgICAgICAgICBp
ZiAocmVzdWx0LnZpb2xhdGlvbkNvdW50KQotICAgICAgICAgICAgICAgIHRpdGxlID0gU3RyaW5n
LnNwcmludGYoIiVzICglZCkiLCB0aXRsZSwgcmVzdWx0LnZpb2xhdGlvbkNvdW50KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChudWxsLCBu
dWxsLCAhIXJlc3VsdC5jaGlsZHJlbik7Ci0gICAgICAgIHRyZWVFbGVtZW50LnRpdGxlID0gdGl0
bGU7Ci0gICAgICAgIHBhcmVudFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKHRyZWVFbGVtZW50KTsK
LQotICAgICAgICBpZiAocmVzdWx0LmNsYXNzTmFtZSkKLSAgICAgICAgICAgIHRyZWVFbGVtZW50
Lmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKHJlc3VsdC5jbGFzc05hbWUpOwotICAgICAg
ICBpZiAodHlwZW9mIHJlc3VsdC52YWx1ZSAhPT0gInN0cmluZyIpCi0gICAgICAgICAgICB0cmVl
RWxlbWVudC5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmF1ZGl0Rm9y
bWF0dGVycy5hcHBseShyZXN1bHQudmFsdWUpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmNoaWxk
cmVuKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5jaGlsZHJlbi5s
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRSZXN1bHQodHJlZUVsZW1l
bnQsIHJlc3VsdC5jaGlsZHJlbltpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5l
eHBhbmRlZCkgewotICAgICAgICAgICAgdHJlZUVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LnJlbW92
ZVN0eWxlQ2xhc3MoInBhcmVudCIpOwotICAgICAgICAgICAgdHJlZUVsZW1lbnQubGlzdEl0ZW1F
bGVtZW50LmFkZFN0eWxlQ2xhc3MoInBhcmVudC1leHBhbmRlZCIpOwotICAgICAgICAgICAgdHJl
ZUVsZW1lbnQuZXhwYW5kKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50
OwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90
b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QXVkaXRSdWxlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRS
dWxlcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI1Njc0NC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JUEFk
ZHJlc3NSZWdleHAgPSAvXlxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30kLzsKLQot
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVhYmxlUmVzcG9uc2VDb2RlcyA9Ci17Ci0gICAg
MjAwOiB0cnVlLAotICAgIDIwMzogdHJ1ZSwKLSAgICAyMDY6IHRydWUsCi0gICAgMzAwOiB0cnVl
LAotICAgIDMwMTogdHJ1ZSwKLSAgICA0MTA6IHRydWUsCi0KLSAgICAzMDQ6IHRydWUgLy8gVW5k
ZXJseWluZyByZXF1ZXN0IGlzIGNhY2hlYWJsZQotfQotCi0vKioKLSAqIEBwYXJhbSB7IUFycmF5
LjwhV2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0Pn0gcmVxdWVzdHMKLSAqIEBwYXJhbSB7QXJy
YXkuPCFXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcz59IHR5cGVzCi0gKiBAcGFyYW0ge2Jvb2xl
YW59IG5lZWRGdWxsUmVzb3VyY2VzCi0gKiBAcmV0dXJuIHsoT2JqZWN0LjxzdHJpbmcsICFBcnJh
eS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD4+fE9iamVjdC48c3RyaW5nLCAhQXJyYXku
PHN0cmluZz4+KX0KLSAqLwotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZ2V0RG9tYWluVG9SZXNv
dXJjZXNNYXAgPSBmdW5jdGlvbihyZXF1ZXN0cywgdHlwZXMsIG5lZWRGdWxsUmVzb3VyY2VzKQot
ewotICAgIHZhciBkb21haW5Ub1Jlc291cmNlc01hcCA9IHt9OwotICAgIGZvciAodmFyIGkgPSAw
LCBzaXplID0gcmVxdWVzdHMubGVuZ3RoOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIHZhciBy
ZXF1ZXN0ID0gcmVxdWVzdHNbaV07Ci0gICAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5pbmRleE9m
KHJlcXVlc3QudHlwZSkgPT09IC0xKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHZh
ciBwYXJzZWRVUkwgPSByZXF1ZXN0LnVybC5hc1BhcnNlZFVSTCgpOwotICAgICAgICBpZiAoIXBh
cnNlZFVSTCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB2YXIgZG9tYWluID0gcGFy
c2VkVVJMLmhvc3Q7Ci0gICAgICAgIHZhciBkb21haW5SZXNvdXJjZXMgPSBkb21haW5Ub1Jlc291
cmNlc01hcFtkb21haW5dOwotICAgICAgICBpZiAoZG9tYWluUmVzb3VyY2VzID09PSB1bmRlZmlu
ZWQpIHsKLSAgICAgICAgICBkb21haW5SZXNvdXJjZXMgPSBbXTsKLSAgICAgICAgICBkb21haW5U
b1Jlc291cmNlc01hcFtkb21haW5dID0gZG9tYWluUmVzb3VyY2VzOwotICAgICAgICB9Ci0gICAg
ICAgIGRvbWFpblJlc291cmNlcy5wdXNoKG5lZWRGdWxsUmVzb3VyY2VzID8gcmVxdWVzdCA6IHJl
cXVlc3QudXJsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRvbWFpblRvUmVzb3VyY2VzTWFwOwotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5BdWRpdFJ1
bGV9Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkd6aXBSdWxlID0gZnVuY3Rpb24oKQot
ewotICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuY2FsbCh0aGlzLCAibmV0d29yay1nemlwIiwg
IkVuYWJsZSBnemlwIGNvbXByZXNzaW9uIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
Lkd6aXBSdWxlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFBcnJheS48
IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gICAgICogQHBhcmFtIHsh
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdH0gcmVzdWx0Ci0gICAgICogQHBhcmFtIHtmdW5j
dGlvbihXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0KX0gY2FsbGJhY2sKLSAgICAgKiBAcGFy
YW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9IHByb2dyZXNzCi0gICAgICovCi0gICAgZG9SdW46
IGZ1bmN0aW9uKHJlcXVlc3RzLCByZXN1bHQsIGNhbGxiYWNrLCBwcm9ncmVzcykKLSAgICB7Ci0g
ICAgICAgIHZhciB0b3RhbFNhdmluZ3MgPSAwOwotICAgICAgICB2YXIgY29tcHJlc3NlZFNpemUg
PSAwOwotICAgICAgICB2YXIgY2FuZGlkYXRlU2l6ZSA9IDA7Ci0gICAgICAgIHZhciBzdW1tYXJ5
ID0gcmVzdWx0LmFkZENoaWxkKCIiLCB0cnVlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IHJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2
YXIgcmVxdWVzdCA9IHJlcXVlc3RzW2ldOwotICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVz
Q29kZSA9PT0gMzA0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBEbyBub3QgdGVzdCAz
MDQgTm90IE1vZGlmaWVkIHJlcXVlc3RzIGFzIHRoZWlyIGNvbnRlbnRzIGFyZSBhbHdheXMgZW1w
dHkuCi0gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkQ29tcHJlc3MocmVxdWVzdCkpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHJlcXVlc3QucmVzb3VyY2VTaXplOwotICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZVNpemUgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5f
aXNDb21wcmVzc2VkKHJlcXVlc3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWRT
aXplICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgc2F2aW5ncyA9IDIgKiBzaXplIC8gMzsKLSAgICAg
ICAgICAgICAgICB0b3RhbFNhdmluZ3MgKz0gc2F2aW5nczsKLSAgICAgICAgICAgICAgICBzdW1t
YXJ5LmFkZEZvcm1hdHRlZCgiJXIgY291bGQgc2F2ZSB+JXMiLCByZXF1ZXN0LnVybCwgTnVtYmVy
LmJ5dGVzVG9TdHJpbmcoc2F2aW5ncykpOwotICAgICAgICAgICAgICAgIHJlc3VsdC52aW9sYXRp
b25Db3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghdG90YWxT
YXZpbmdzKQotICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpOwotICAgICAgICBzdW1t
YXJ5LnZhbHVlID0gU3RyaW5nLnNwcmludGYoIkNvbXByZXNzaW5nIHRoZSBmb2xsb3dpbmcgcmVz
b3VyY2VzIHdpdGggZ3ppcCBjb3VsZCByZWR1Y2UgdGhlaXIgdHJhbnNmZXIgc2l6ZSBieSBhYm91
dCB0d28gdGhpcmRzICh+JXMpOiIsIE51bWJlci5ieXRlc1RvU3RyaW5nKHRvdGFsU2F2aW5ncykp
OwotICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgIH0sCi0KLSAgICBfaXNDb21wcmVzc2Vk
OiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgdmFyIGVuY29kaW5nSGVhZGVyID0g
cmVxdWVzdC5yZXNwb25zZUhlYWRlclZhbHVlKCJDb250ZW50LUVuY29kaW5nIik7Ci0gICAgICAg
IGlmICghZW5jb2RpbmdIZWFkZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgcmV0dXJuIC9cYig/Omd6aXB8ZGVmbGF0ZSlcYi8udGVzdChlbmNvZGluZ0hlYWRlcik7Ci0g
ICAgfSwKLQotICAgIF9zaG91bGRDb21wcmVzczogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiByZXF1ZXN0LnR5cGUuaXNUZXh0VHlwZSgpICYmIHJlcXVlc3QucGFyc2Vk
VVJMLmhvc3QgJiYgcmVxdWVzdC5yZXNvdXJjZVNpemUgIT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0
LnJlc291cmNlU2l6ZSA+IDE1MDsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5BdWRpdFJ1bGV9Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNlc1J1bGUgPSBmdW5jdGlvbihpZCwgbmFtZSwgdHlw
ZSwgcmVzb3VyY2VUeXBlTmFtZSwgYWxsb3dlZFBlckRvbWFpbikKLXsKLSAgICBXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlLmNhbGwodGhpcywgaWQsIG5hbWUpOwotICAgIHRoaXMuX3R5cGUgPSB0eXBl
OwotICAgIHRoaXMuX3Jlc291cmNlVHlwZU5hbWUgPSByZXNvdXJjZVR5cGVOYW1lOwotICAgIHRo
aXMuX2FsbG93ZWRQZXJEb21haW4gPSBhbGxvd2VkUGVyRG9tYWluOwotfQotCi1XZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Db21iaW5lRXh0ZXJuYWxSZXNvdXJjZXNSdWxlLnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVx
dWVzdD59IHJlcXVlc3RzCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJl
c3VsdH0gcmVzdWx0Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlUmVzdWx0KX0gY2FsbGJhY2sKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jl
c3N9IHByb2dyZXNzCi0gICAgICovCi0gICAgZG9SdW46IGZ1bmN0aW9uKHJlcXVlc3RzLCByZXN1
bHQsIGNhbGxiYWNrLCBwcm9ncmVzcykKLSAgICB7Ci0gICAgICAgIHZhciBkb21haW5Ub1Jlc291
cmNlc01hcCA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmdldERvbWFpblRvUmVzb3VyY2VzTWFw
KHJlcXVlc3RzLCBbdGhpcy5fdHlwZV0sIGZhbHNlKTsKLSAgICAgICAgdmFyIHBlbmFsaXplZFJl
c291cmNlQ291bnQgPSAwOwotICAgICAgICAvLyBUT0RPOiByZWZhY3RvciBhY2NvcmRpbmcgdG8g
dGhlIGNob3NlbiBpMThuIGFwcHJvYWNoCi0gICAgICAgIHZhciBzdW1tYXJ5ID0gcmVzdWx0LmFk
ZENoaWxkKCIiLCB0cnVlKTsKLSAgICAgICAgZm9yICh2YXIgZG9tYWluIGluIGRvbWFpblRvUmVz
b3VyY2VzTWFwKSB7Ci0gICAgICAgICAgICB2YXIgZG9tYWluUmVzb3VyY2VzID0gZG9tYWluVG9S
ZXNvdXJjZXNNYXBbZG9tYWluXTsKLSAgICAgICAgICAgIHZhciBleHRyYVJlc291cmNlQ291bnQg
PSBkb21haW5SZXNvdXJjZXMubGVuZ3RoIC0gdGhpcy5fYWxsb3dlZFBlckRvbWFpbjsKLSAgICAg
ICAgICAgIGlmIChleHRyYVJlc291cmNlQ291bnQgPD0gMCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIHBlbmFsaXplZFJlc291cmNlQ291bnQgKz0gZXh0cmFSZXNvdXJj
ZUNvdW50IC0gMTsKLSAgICAgICAgICAgIHN1bW1hcnkuYWRkQ2hpbGQoU3RyaW5nLnNwcmludGYo
IiVkICVzIHJlc291cmNlcyBzZXJ2ZWQgZnJvbSAlcy4iLCBkb21haW5SZXNvdXJjZXMubGVuZ3Ro
LCB0aGlzLl9yZXNvdXJjZVR5cGVOYW1lLCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LnJl
c291cmNlRG9tYWluKGRvbWFpbikpKTsKLSAgICAgICAgICAgIHJlc3VsdC52aW9sYXRpb25Db3Vu
dCArPSBkb21haW5SZXNvdXJjZXMubGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcGVu
YWxpemVkUmVzb3VyY2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTsK
LQotICAgICAgICBzdW1tYXJ5LnZhbHVlID0gIlRoZXJlIGFyZSBtdWx0aXBsZSByZXNvdXJjZXMg
c2VydmVkIGZyb20gc2FtZSBkb21haW4uIENvbnNpZGVyIGNvbWJpbmluZyB0aGVtIGludG8gYXMg
ZmV3IGZpbGVzIGFzIHBvc3NpYmxlLiI7Ci0gICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90b3R5cGUKLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5Db21iaW5lRXh0ZXJuYWxSZXNvdXJjZXNSdWxlfQotICovCi1XZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5Db21iaW5lSnNSZXNvdXJjZXNSdWxlID0gZnVuY3Rpb24oYWxsb3dlZFBlckRvbWFp
bikgewotICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNl
c1J1bGUuY2FsbCh0aGlzLCAicGFnZS1leHRlcm5hbGpzIiwgIkNvbWJpbmUgZXh0ZXJuYWwgSmF2
YVNjcmlwdCIsIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlNjcmlwdCwgIkphdmFTY3JpcHQi
LCBhbGxvd2VkUGVyRG9tYWluKTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29tYmlu
ZUpzUmVzb3VyY2VzUnVsZS5wcm90b3R5cGUgPSB7Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Db21iaW5lRXh0ZXJuYWxSZXNvdXJjZXNSdWxlLnByb3RvdHlwZQotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNlc1J1bGV9Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLkNvbWJpbmVDc3NSZXNvdXJjZXNSdWxlID0gZnVuY3Rpb24oYWxsb3dlZFBlckRvbWFp
bikgewotICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNl
c1J1bGUuY2FsbCh0aGlzLCAicGFnZS1leHRlcm5hbGNzcyIsICJDb21iaW5lIGV4dGVybmFsIENT
UyIsIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsICJDU1MiLCBhbGxvd2Vk
UGVyRG9tYWluKTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29tYmluZUNzc1Jlc291
cmNlc1J1bGUucHJvdG90eXBlID0gewotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuQ29tYmluZUV4dGVybmFsUmVzb3VyY2VzUnVsZS5wcm90b3R5cGUKLX0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQXVkaXRSdWxlfQotICov
Ci1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5NaW5pbWl6ZURuc0xvb2t1cHNSdWxlID0gZnVuY3Rp
b24oaG9zdENvdW50VGhyZXNob2xkKSB7Ci0gICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxs
KHRoaXMsICJuZXR3b3JrLW1pbmltaXplbG9va3VwcyIsICJNaW5pbWl6ZSBETlMgbG9va3VwcyIp
OwotICAgIHRoaXMuX2hvc3RDb3VudFRocmVzaG9sZCA9IGhvc3RDb3VudFRocmVzaG9sZDsKLX0K
LQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuTWluaW1pemVEbnNMb29rdXBzUnVsZS5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuTmV0
d29ya1JlcXVlc3Q+fSByZXF1ZXN0cwotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVSZXN1bHR9IHJlc3VsdAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZVJlc3VsdCl9IGNhbGxiYWNrCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9y
LlByb2dyZXNzfSBwcm9ncmVzcwotICAgICAqLwotICAgIGRvUnVuOiBmdW5jdGlvbihyZXF1ZXN0
cywgcmVzdWx0LCBjYWxsYmFjaywgcHJvZ3Jlc3MpCi0gICAgewotICAgICAgICB2YXIgc3VtbWFy
eSA9IHJlc3VsdC5hZGRDaGlsZCgiIik7Ci0gICAgICAgIHZhciBkb21haW5Ub1Jlc291cmNlc01h
cCA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmdldERvbWFpblRvUmVzb3VyY2VzTWFwKHJlcXVl
c3RzLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgIGZvciAodmFyIGRvbWFpbiBpbiBkb21haW5Ub1Jl
c291cmNlc01hcCkgewotICAgICAgICAgICAgaWYgKGRvbWFpblRvUmVzb3VyY2VzTWFwW2RvbWFp
bl0ubGVuZ3RoID4gMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZh
ciBwYXJzZWRVUkwgPSBkb21haW4uYXNQYXJzZWRVUkwoKTsKLSAgICAgICAgICAgIGlmICghcGFy
c2VkVVJMKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFwYXJz
ZWRVUkwuaG9zdC5zZWFyY2goV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSVBBZGRyZXNzUmVnZXhw
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gYW4gSVAgYWRkcmVzcwotICAgICAgICAg
ICAgc3VtbWFyeS5hZGRTbmlwcGV0KGRvbWFpbik7Ci0gICAgICAgICAgICByZXN1bHQudmlvbGF0
aW9uQ291bnQrKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXN1bW1hcnkuY2hpbGRyZW4gfHwg
c3VtbWFyeS5jaGlsZHJlbi5sZW5ndGggPD0gdGhpcy5faG9zdENvdW50VGhyZXNob2xkKQotICAg
ICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpOwotCi0gICAgICAgIHN1bW1hcnkudmFsdWUg
PSAiVGhlIGZvbGxvd2luZyBkb21haW5zIG9ubHkgc2VydmUgb25lIHJlc291cmNlIGVhY2guIElm
IHBvc3NpYmxlLCBhdm9pZCB0aGUgZXh0cmEgRE5TIGxvb2t1cHMgYnkgc2VydmluZyB0aGVzZSBy
ZXNvdXJjZXMgZnJvbSBleGlzdGluZyBkb21haW5zLiI7Ci0gICAgICAgIGNhbGxiYWNrKHJlc3Vs
dCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90
b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlfQotICovCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5QYXJhbGxlbGl6ZURv
d25sb2FkUnVsZSA9IGZ1bmN0aW9uKG9wdGltYWxIb3N0bmFtZUNvdW50LCBtaW5SZXF1ZXN0VGhy
ZXNob2xkLCBtaW5CYWxhbmNlVGhyZXNob2xkKQotewotICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGUuY2FsbCh0aGlzLCAibmV0d29yay1wYXJhbGxlbGl6ZWhvc3RzIiwgIlBhcmFsbGVsaXplIGRv
d25sb2FkcyBhY3Jvc3MgaG9zdG5hbWVzIik7Ci0gICAgdGhpcy5fb3B0aW1hbEhvc3RuYW1lQ291
bnQgPSBvcHRpbWFsSG9zdG5hbWVDb3VudDsKLSAgICB0aGlzLl9taW5SZXF1ZXN0VGhyZXNob2xk
ID0gbWluUmVxdWVzdFRocmVzaG9sZDsKLSAgICB0aGlzLl9taW5CYWxhbmNlVGhyZXNob2xkID0g
bWluQmFsYW5jZVRocmVzaG9sZDsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuUGFyYWxs
ZWxpemVEb3dubG9hZFJ1bGUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
IUFycmF5LjwhV2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0Pn0gcmVxdWVzdHMKLSAgICAgKiBA
cGFyYW0geyFXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0fSByZXN1bHQKLSAgICAgKiBAcGFy
YW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQpfSBjYWxsYmFjawotICAg
ICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9ncmVzc30gcHJvZ3Jlc3MKLSAgICAgKi8KLSAg
ICBkb1J1bjogZnVuY3Rpb24ocmVxdWVzdHMsIHJlc3VsdCwgY2FsbGJhY2ssIHByb2dyZXNzKQot
ICAgIHsKLSAgICAgICAgZnVuY3Rpb24gaG9zdFNvcnRlcihhLCBiKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2YXIgYUNvdW50ID0gZG9tYWluVG9SZXNvdXJjZXNNYXBbYV0ubGVuZ3RoOwotICAg
ICAgICAgICAgdmFyIGJDb3VudCA9IGRvbWFpblRvUmVzb3VyY2VzTWFwW2JdLmxlbmd0aDsKLSAg
ICAgICAgICAgIHJldHVybiAoYUNvdW50IDwgYkNvdW50KSA/IDEgOiAoYUNvdW50ID09IGJDb3Vu
dCkgPyAwIDogLTE7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZG9tYWluVG9SZXNvdXJjZXNN
YXAgPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5nZXREb21haW5Ub1Jlc291cmNlc01hcCgKLSAg
ICAgICAgICAgIHJlcXVlc3RzLAotICAgICAgICAgICAgW1dlYkluc3BlY3Rvci5yZXNvdXJjZVR5
cGVzLlN0eWxlc2hlZXQsIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLkltYWdlXSwKLSAgICAg
ICAgICAgIHRydWUpOwotCi0gICAgICAgIHZhciBob3N0cyA9IFtdOwotICAgICAgICBmb3IgKHZh
ciB1cmwgaW4gZG9tYWluVG9SZXNvdXJjZXNNYXApCi0gICAgICAgICAgICBob3N0cy5wdXNoKHVy
bCk7Ci0KLSAgICAgICAgaWYgKCFob3N0cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gY2Fs
bGJhY2sobnVsbCk7IC8vIG5vIGhvc3RzIChsb2NhbCBmaWxlIG9yIHNvbWV0aGluZykKLQotICAg
ICAgICBob3N0cy5zb3J0KGhvc3RTb3J0ZXIpOwotCi0gICAgICAgIHZhciBvcHRpbWFsSG9zdG5h
bWVDb3VudCA9IHRoaXMuX29wdGltYWxIb3N0bmFtZUNvdW50OwotICAgICAgICBpZiAoaG9zdHMu
bGVuZ3RoID4gb3B0aW1hbEhvc3RuYW1lQ291bnQpCi0gICAgICAgICAgICBob3N0cy5zcGxpY2Uo
b3B0aW1hbEhvc3RuYW1lQ291bnQpOwotCi0gICAgICAgIHZhciBidXNpZXN0SG9zdFJlc291cmNl
Q291bnQgPSBkb21haW5Ub1Jlc291cmNlc01hcFtob3N0c1swXV0ubGVuZ3RoOwotICAgICAgICB2
YXIgcmVxdWVzdENvdW50QWJvdmVUaHJlc2hvbGQgPSBidXNpZXN0SG9zdFJlc291cmNlQ291bnQg
LSB0aGlzLl9taW5SZXF1ZXN0VGhyZXNob2xkOwotICAgICAgICBpZiAocmVxdWVzdENvdW50QWJv
dmVUaHJlc2hvbGQgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTsKLQot
ICAgICAgICB2YXIgYXZnUmVzb3VyY2VzUGVySG9zdCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwLCBzaXplID0gaG9zdHMubGVuZ3RoOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgYXZn
UmVzb3VyY2VzUGVySG9zdCArPSBkb21haW5Ub1Jlc291cmNlc01hcFtob3N0c1tpXV0ubGVuZ3Ro
OwotCi0gICAgICAgIC8vIEFzc3VtZSBvcHRpbWFsIHBhcmFsbGVsaXphdGlvbi4KLSAgICAgICAg
YXZnUmVzb3VyY2VzUGVySG9zdCAvPSBvcHRpbWFsSG9zdG5hbWVDb3VudDsKLSAgICAgICAgYXZn
UmVzb3VyY2VzUGVySG9zdCA9IE1hdGgubWF4KGF2Z1Jlc291cmNlc1Blckhvc3QsIDEpOwotCi0g
ICAgICAgIHZhciBwY3RBYm92ZUF2ZyA9IChyZXF1ZXN0Q291bnRBYm92ZVRocmVzaG9sZCAvIGF2
Z1Jlc291cmNlc1Blckhvc3QpIC0gMS4wOwotICAgICAgICB2YXIgbWluQmFsYW5jZVRocmVzaG9s
ZCA9IHRoaXMuX21pbkJhbGFuY2VUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChwY3RBYm92ZUF2ZyA8
IG1pbkJhbGFuY2VUaHJlc2hvbGQpCi0gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7
Ci0KLSAgICAgICAgdmFyIHJlcXVlc3RzT25CdXNpZXN0SG9zdCA9IGRvbWFpblRvUmVzb3VyY2Vz
TWFwW2hvc3RzWzBdXTsKLSAgICAgICAgdmFyIGVudHJ5ID0gcmVzdWx0LmFkZENoaWxkKFN0cmlu
Zy5zcHJpbnRmKCJUaGlzIHBhZ2UgbWFrZXMgJWQgcGFyYWxsZWxpemFibGUgcmVxdWVzdHMgdG8g
JXMuIEluY3JlYXNlIGRvd25sb2FkIHBhcmFsbGVsaXphdGlvbiBieSBkaXN0cmlidXRpbmcgdGhl
IGZvbGxvd2luZyByZXF1ZXN0cyBhY3Jvc3MgbXVsdGlwbGUgaG9zdG5hbWVzLiIsIGJ1c2llc3RI
b3N0UmVzb3VyY2VDb3VudCwgaG9zdHNbMF0pLCB0cnVlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCByZXF1ZXN0c09uQnVzaWVzdEhvc3QubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBl
bnRyeS5hZGRVUkwocmVxdWVzdHNPbkJ1c2llc3RIb3N0W2ldLnVybCk7Ci0KLSAgICAgICAgcmVz
dWx0LnZpb2xhdGlvbkNvdW50ID0gcmVxdWVzdHNPbkJ1c2llc3RIb3N0Lmxlbmd0aDsKLSAgICAg
ICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlLnByb3RvdHlwZQotfQotCi0vKioKLSAqIFRoZSByZXBvcnRlZCBDU1MgcnVs
ZSBzaXplIGlzIGluY29ycmVjdCAocGFyc2VkICE9IG9yaWdpbmFsIGluIFdlYktpdCksCi0gKiBz
byB1c2UgcGVyY2VudGFnZXMgaW5zdGVhZCwgd2hpY2ggZ2l2ZXMgYSBiZXR0ZXIgYXBwcm94aW1h
dGlvbi4KLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5BdWRpdFJ1
bGV9Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENzc1J1bGUgPSBmdW5jdGlv
bigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsICJwYWdlLXVudXNl
ZGNzcyIsICJSZW1vdmUgdW51c2VkIENTUyBydWxlcyIpOwotfQotCi1XZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gICAg
ICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdH0gcmVzdWx0Ci0gICAgICog
QHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0KX0gY2FsbGJhY2sK
LSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9IHByb2dyZXNzCi0gICAgICov
Ci0gICAgZG9SdW46IGZ1bmN0aW9uKHJlcXVlc3RzLCByZXN1bHQsIGNhbGxiYWNrLCBwcm9ncmVz
cykKLSAgICB7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLQotICAgICAgICBmdW5jdGlvbiBl
dmFsQ2FsbGJhY2soc3R5bGVTaGVldHMpIHsKLSAgICAgICAgICAgIGlmIChwcm9ncmVzcy5pc0Nh
bmNlbGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoIXN0
eWxlU2hlZXRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7
Ci0KLSAgICAgICAgICAgIHZhciBwc2V1ZG9TZWxlY3RvclJlZ2V4cCA9IC86aG92ZXJ8Omxpbmt8
OmFjdGl2ZXw6dmlzaXRlZHw6Zm9jdXN8OmJlZm9yZXw6YWZ0ZXIvOwotICAgICAgICAgICAgdmFy
IHNlbGVjdG9ycyA9IFtdOwotICAgICAgICAgICAgdmFyIHRlc3RlZFNlbGVjdG9ycyA9IHt9Owot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVNoZWV0cy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHNbaV07Ci0gICAg
ICAgICAgICAgICAgZm9yICh2YXIgY3VyUnVsZSA9IDA7IGN1clJ1bGUgPCBzdHlsZVNoZWV0LnJ1
bGVzLmxlbmd0aDsgKytjdXJSdWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rv
clRleHQgPSBzdHlsZVNoZWV0LnJ1bGVzW2N1clJ1bGVdLnNlbGVjdG9yVGV4dDsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNlbGVjdG9yVGV4dC5tYXRjaChwc2V1ZG9TZWxlY3RvclJlZ2V4cCkg
fHwgdGVzdGVkU2VsZWN0b3JzW3NlbGVjdG9yVGV4dF0pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2goc2VsZWN0b3JU
ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdGVkU2VsZWN0b3JzW3NlbGVjdG9yVGV4dF0g
PSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVu
Y3Rpb24gc2VsZWN0b3JzQ2FsbGJhY2soY2FsbGJhY2ssIHN0eWxlU2hlZXRzLCB0ZXN0ZWRTZWxl
Y3RvcnMsIGZvdW5kU2VsZWN0b3JzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChwcm9ncmVzcy5pc0NhbmNlbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAgICAgICAgIHZhciBpbmxpbmVCbG9ja09yZGluYWwgPSAwOwotICAgICAgICAgICAg
ICAgIHZhciB0b3RhbFN0eWxlc2hlZXRTaXplID0gMDsKLSAgICAgICAgICAgICAgICB2YXIgdG90
YWxVbnVzZWRTdHlsZXNoZWV0U2l6ZSA9IDA7Ci0gICAgICAgICAgICAgICAgdmFyIHN1bW1hcnk7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gc3R5bGVTaGVl
dHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1bnVzZWRSdWxlcyA9IFtdOwotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBjdXJSdWxlID0gMDsgY3VyUnVsZSA8IHN0eWxlU2hlZXQu
cnVsZXMubGVuZ3RoOyArK2N1clJ1bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBy
dWxlID0gc3R5bGVTaGVldC5ydWxlc1tjdXJSdWxlXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghdGVzdGVkU2VsZWN0b3JzW3J1bGUuc2VsZWN0b3JUZXh0XSB8fCBmb3VuZFNlbGVjdG9y
c1tydWxlLnNlbGVjdG9yVGV4dF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRSdWxlcy5wdXNoKHJ1bGUuc2VsZWN0
b3JUZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0b3Rh
bFN0eWxlc2hlZXRTaXplICs9IHN0eWxlU2hlZXQucnVsZXMubGVuZ3RoOwotICAgICAgICAgICAg
ICAgICAgICB0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplICs9IHVudXNlZFJ1bGVzLmxlbmd0aDsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoIXVudXNlZFJ1bGVzLmxlbmd0aCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciByZXNv
dXJjZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZUZvclVSTChzdHlsZVNoZWV0LnNvdXJjZVVSTCk7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpc0lubGluZUJsb2NrID0gcmVzb3VyY2UgJiYgcmVz
b3VyY2UucmVxdWVzdCAmJiByZXNvdXJjZS5yZXF1ZXN0LnR5cGUgPT0gV2ViSW5zcGVjdG9yLnJl
c291cmNlVHlwZXMuRG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAhaXNJ
bmxpbmVCbG9jayA/IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQubGlua2lmeURpc3BsYXlO
YW1lKHN0eWxlU2hlZXQuc291cmNlVVJMKSA6IFN0cmluZy5zcHJpbnRmKCJJbmxpbmUgYmxvY2sg
IyVkIiwgKytpbmxpbmVCbG9ja09yZGluYWwpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcGN0
VW51c2VkID0gTWF0aC5yb3VuZCgxMDAgKiB1bnVzZWRSdWxlcy5sZW5ndGggLyBzdHlsZVNoZWV0
LnJ1bGVzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSByZXN1bHQuYWRkQ2hpbGQoIiIsIHRydWUpOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdW1tYXJ5LmFkZEZvcm1hdHRlZCgiJXM6
ICVkJSBpcyBub3QgdXNlZCBieSB0aGUgY3VycmVudCBwYWdlLiIsIHVybCwgcGN0VW51c2VkKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHVudXNlZFJ1bGVzLmxl
bmd0aDsgKytqKQotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuYWRkU25pcHBldCh1bnVz
ZWRSdWxlc1tqXSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnZpb2xhdGlvbkNvdW50
ICs9IHVudXNlZFJ1bGVzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjYWxsYmFjayhudWxsKTsKLQotICAgICAgICAgICAgICAgIHZhciB0b3RhbFVudXNl
ZFBlcmNlbnQgPSBNYXRoLnJvdW5kKDEwMCAqIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgLyB0
b3RhbFN0eWxlc2hlZXRTaXplKTsKLSAgICAgICAgICAgICAgICBzdW1tYXJ5LnZhbHVlID0gU3Ry
aW5nLnNwcmludGYoIiVzIHJ1bGVzICglZCUpIG9mIENTUyBub3QgdXNlZCBieSB0aGUgY3VycmVu
dCBwYWdlLiIsIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUsIHRvdGFsVW51c2VkUGVyY2VudCk7
Ci0KLSAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2YXIgZm91bmRTZWxlY3RvcnMgPSB7fTsKLSAgICAgICAgICAgIGZ1bmN0aW9u
IHF1ZXJ5Q2FsbGJhY2soYm91bmRTZWxlY3RvcnNDYWxsYmFjaywgc2VsZWN0b3IsIHN0eWxlU2hl
ZXRzLCB0ZXN0ZWRTZWxlY3RvcnMsIG5vZGVJZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZUlkKQotICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdG9yc1tzZWxl
Y3Rvcl0gPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChib3VuZFNlbGVjdG9yc0NhbGxiYWNr
KQotICAgICAgICAgICAgICAgICAgICBib3VuZFNlbGVjdG9yc0NhbGxiYWNrKGZvdW5kU2VsZWN0
b3JzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gZG9jdW1lbnRMb2Fk
ZWQoc2VsZWN0b3JzLCBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cm9ncmVzcy5pc0NhbmNlbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5xdWVyeVNlbGVjdG9yKGRv
Y3VtZW50LmlkLCBzZWxlY3RvcnNbaV0sIHF1ZXJ5Q2FsbGJhY2suYmluZChudWxsLCBpID09PSBz
ZWxlY3RvcnMubGVuZ3RoIC0gMSA/IHNlbGVjdG9yc0NhbGxiYWNrLmJpbmQobnVsbCwgY2FsbGJh
Y2ssIHN0eWxlU2hlZXRzLCB0ZXN0ZWRTZWxlY3RvcnMpIDogbnVsbCwgc2VsZWN0b3JzW2ldLCBz
dHlsZVNoZWV0cywgdGVzdGVkU2VsZWN0b3JzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQucmVxdWVzdERvY3Vt
ZW50KGRvY3VtZW50TG9hZGVkLmJpbmQobnVsbCwgc2VsZWN0b3JzKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBzdHlsZVNoZWV0Q2FsbGJhY2soc3R5bGVTaGVldHMsIHNvdXJjZVVS
TCwgY29udGludWF0aW9uLCBzdHlsZVNoZWV0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
cHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKHN0eWxlU2hlZXQpIHsKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0LnNvdXJj
ZVVSTCA9IHNvdXJjZVVSTDsKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0cy5wdXNoKHN0eWxl
U2hlZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKLSAg
ICAgICAgICAgICAgICBjb250aW51YXRpb24oc3R5bGVTaGVldHMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gYWxsU3R5bGVzQ2FsbGJhY2soZXJyb3IsIHN0eWxlU2hlZXRJbmZvcykK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyZXNzLmlzQ2FuY2VsZWQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChlcnJvciB8fCAhc3R5bGVTaGVl
dEluZm9zIHx8ICFzdHlsZVNoZWV0SW5mb3MubGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVy
biBldmFsQ2FsbGJhY2soW10pOwotICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXRzID0gW107Ci0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hlZXRJbmZvcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgIHZhciBpbmZvID0gc3R5bGVTaGVldEluZm9zW2ldOwotICAg
ICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LmNyZWF0ZUZvcklkKGluZm8u
c3R5bGVTaGVldElkLCBzdHlsZVNoZWV0Q2FsbGJhY2suYmluZChudWxsLCBzdHlsZVNoZWV0cywg
aW5mby5zb3VyY2VVUkwsIGkgPT0gc3R5bGVTaGVldEluZm9zLmxlbmd0aCAtIDEgPyBldmFsQ2Fs
bGJhY2sgOiBudWxsKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDU1NB
Z2VudC5nZXRBbGxTdHlsZVNoZWV0cyhhbGxTdHlsZXNDYWxsYmFjayk7Ci0gICAgfSwKLQotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90b3R5cGUKLX0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQXVkaXRSdWxlfQotICov
Ci1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlID0gZnVuY3Rpb24oaWQs
IG5hbWUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsIGlkLCBuYW1l
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5NaWxsaXNQ
ZXJNb250aCA9IDEwMDAgKiA2MCAqIDYwICogMjQgKiAzMDsKLQotV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBh
cmFtIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3Q+fSByZXF1ZXN0cwotICAg
ICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHR9IHJlc3VsdAotICAgICAq
IEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdCl9IGNhbGxiYWNr
Ci0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2dyZXNzfSBwcm9ncmVzcwotICAgICAq
LwotICAgIGRvUnVuOiBmdW5jdGlvbihyZXF1ZXN0cywgcmVzdWx0LCBjYWxsYmFjaywgcHJvZ3Jl
c3MpCi0gICAgewotICAgICAgICB2YXIgY2FjaGVhYmxlQW5kTm9uQ2FjaGVhYmxlUmVzb3VyY2Vz
ID0gdGhpcy5fY2FjaGVhYmxlQW5kTm9uQ2FjaGVhYmxlUmVzb3VyY2VzKHJlcXVlc3RzKTsKLSAg
ICAgICAgaWYgKGNhY2hlYWJsZUFuZE5vbkNhY2hlYWJsZVJlc291cmNlc1swXS5sZW5ndGgpCi0g
ICAgICAgICAgICB0aGlzLnJ1bkNoZWNrcyhjYWNoZWFibGVBbmROb25DYWNoZWFibGVSZXNvdXJj
ZXNbMF0sIHJlc3VsdCk7Ci0gICAgICAgIHRoaXMuaGFuZGxlTm9uQ2FjaGVhYmxlUmVzb3VyY2Vz
KGNhY2hlYWJsZUFuZE5vbkNhY2hlYWJsZVJlc291cmNlc1sxXSwgcmVzdWx0KTsKLQotICAgICAg
ICBjYWxsYmFjayhyZXN1bHQpOwotICAgIH0sCi0KLSAgICBoYW5kbGVOb25DYWNoZWFibGVSZXNv
dXJjZXM6IGZ1bmN0aW9uKHJlcXVlc3RzLCByZXN1bHQpCi0gICAgewotICAgIH0sCi0KLSAgICBf
Y2FjaGVhYmxlQW5kTm9uQ2FjaGVhYmxlUmVzb3VyY2VzOiBmdW5jdGlvbihyZXF1ZXN0cykKLSAg
ICB7Ci0gICAgICAgIHZhciBwcm9jZXNzZWRSZXNvdXJjZXMgPSBbW10sIFtdXTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
dmFyIHJlcXVlc3QgPSByZXF1ZXN0c1tpXTsKLSAgICAgICAgICAgIGlmICghdGhpcy5pc0NhY2hl
YWJsZVJlc291cmNlKHJlcXVlc3QpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHRoaXMuX2lzRXhwbGljaXRseU5vbkNhY2hlYWJsZShyZXF1ZXN0KSkKLSAgICAg
ICAgICAgICAgICBwcm9jZXNzZWRSZXNvdXJjZXNbMV0ucHVzaChyZXF1ZXN0KTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9jZXNzZWRSZXNvdXJjZXNbMF0ucHVzaChyZXF1
ZXN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcHJvY2Vzc2VkUmVzb3VyY2VzOwotICAg
IH0sCi0KLSAgICBleGVjQ2hlY2s6IGZ1bmN0aW9uKG1lc3NhZ2VUZXh0LCByZXF1ZXN0Q2hlY2tG
dW5jdGlvbiwgcmVxdWVzdHMsIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHZhciByZXF1ZXN0Q291
bnQgPSByZXF1ZXN0cy5sZW5ndGg7Ci0gICAgICAgIHZhciB1cmxzID0gW107Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcmVxdWVzdENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChy
ZXF1ZXN0Q2hlY2tGdW5jdGlvbi5jYWxsKHRoaXMsIHJlcXVlc3RzW2ldKSkKLSAgICAgICAgICAg
ICAgICB1cmxzLnB1c2gocmVxdWVzdHNbaV0udXJsKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
dXJscy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHZhciBlbnRyeSA9IHJlc3VsdC5hZGRDaGlsZCht
ZXNzYWdlVGV4dCwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbnRyeS5hZGRVUkxzKHVybHMpOwotICAg
ICAgICAgICAgcmVzdWx0LnZpb2xhdGlvbkNvdW50ICs9IHVybHMubGVuZ3RoOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIGZyZXNobmVzc0xpZmV0aW1lR3JlYXRlclRoYW46IGZ1bmN0aW9uKHJl
cXVlc3QsIHRpbWVNcykKLSAgICB7Ci0gICAgICAgIHZhciBkYXRlSGVhZGVyID0gdGhpcy5yZXNw
b25zZUhlYWRlcihyZXF1ZXN0LCAiRGF0ZSIpOwotICAgICAgICBpZiAoIWRhdGVIZWFkZXIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIGRhdGVIZWFkZXJNcyA9IERh
dGUucGFyc2UoZGF0ZUhlYWRlcik7Ci0gICAgICAgIGlmIChpc05hTihkYXRlSGVhZGVyTXMpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciBmcmVzaG5lc3NMaWZldGlt
ZU1zOwotICAgICAgICB2YXIgbWF4QWdlTWF0Y2ggPSB0aGlzLnJlc3BvbnNlSGVhZGVyTWF0Y2go
cmVxdWVzdCwgIkNhY2hlLUNvbnRyb2wiLCAibWF4LWFnZT0oXFxkKykiKTsKLQotICAgICAgICBp
ZiAobWF4QWdlTWF0Y2gpCi0gICAgICAgICAgICBmcmVzaG5lc3NMaWZldGltZU1zID0gKG1heEFn
ZU1hdGNoWzFdKSA/IDEwMDAgKiBtYXhBZ2VNYXRjaFsxXSA6IDA7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgdmFyIGV4cGlyZXNIZWFkZXIgPSB0aGlzLnJlc3BvbnNlSGVhZGVyKHJlcXVl
c3QsICJFeHBpcmVzIik7Ci0gICAgICAgICAgICBpZiAoZXhwaXJlc0hlYWRlcikgewotICAgICAg
ICAgICAgICAgIHZhciBleHBEYXRlID0gRGF0ZS5wYXJzZShleHBpcmVzSGVhZGVyKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWlzTmFOKGV4cERhdGUpKQotICAgICAgICAgICAgICAgICAgICBmcmVz
aG5lc3NMaWZldGltZU1zID0gZXhwRGF0ZSAtIGRhdGVIZWFkZXJNczsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAoaXNOYU4oZnJlc2huZXNzTGlmZXRpbWVNcykp
ID8gZmFsc2UgOiBmcmVzaG5lc3NMaWZldGltZU1zID4gdGltZU1zOwotICAgIH0sCi0KLSAgICBy
ZXNwb25zZUhlYWRlcjogZnVuY3Rpb24ocmVxdWVzdCwgaGVhZGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHJlcXVlc3QucmVzcG9uc2VIZWFkZXJWYWx1ZShoZWFkZXIpOwotICAgIH0sCi0KLSAg
ICBoYXNSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24ocmVxdWVzdCwgaGVhZGVyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHJlcXVlc3QucmVzcG9uc2VIZWFkZXJWYWx1ZShoZWFkZXIpICE9PSB1bmRl
ZmluZWQ7Ci0gICAgfSwKLQotICAgIGlzQ29tcHJlc3NpYmxlOiBmdW5jdGlvbihyZXF1ZXN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHJlcXVlc3QudHlwZS5pc1RleHRUeXBlKCk7Ci0gICAgfSwK
LQotICAgIGlzUHVibGljbHlDYWNoZWFibGU6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5faXNFeHBsaWNpdGx5Tm9uQ2FjaGVhYmxlKHJlcXVlc3QpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh0aGlzLnJlc3BvbnNlSGVhZGVyTWF0
Y2gocmVxdWVzdCwgIkNhY2hlLUNvbnRyb2wiLCAicHVibGljIikpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gcmVxdWVzdC51cmwuaW5kZXhPZigiPyIpID09IC0x
ICYmICF0aGlzLnJlc3BvbnNlSGVhZGVyTWF0Y2gocmVxdWVzdCwgIkNhY2hlLUNvbnRyb2wiLCAi
cHJpdmF0ZSIpOwotICAgIH0sCi0KLSAgICByZXNwb25zZUhlYWRlck1hdGNoOiBmdW5jdGlvbihy
ZXF1ZXN0LCBoZWFkZXIsIHJlZ2V4cCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXF1ZXN0LnJl
c3BvbnNlSGVhZGVyVmFsdWUoaGVhZGVyKQotICAgICAgICAgICAgPyByZXF1ZXN0LnJlc3BvbnNl
SGVhZGVyVmFsdWUoaGVhZGVyKS5tYXRjaChuZXcgUmVnRXhwKHJlZ2V4cCwgImltIikpCi0gICAg
ICAgICAgICA6IHVuZGVmaW5lZDsKLSAgICB9LAotCi0gICAgaGFzRXhwbGljaXRFeHBpcmF0aW9u
OiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaGFzUmVzcG9u
c2VIZWFkZXIocmVxdWVzdCwgIkRhdGUiKSAmJgotICAgICAgICAgICAgKHRoaXMuaGFzUmVzcG9u
c2VIZWFkZXIocmVxdWVzdCwgIkV4cGlyZXMiKSB8fCB0aGlzLnJlc3BvbnNlSGVhZGVyTWF0Y2go
cmVxdWVzdCwgIkNhY2hlLUNvbnRyb2wiLCAibWF4LWFnZSIpKTsKLSAgICB9LAotCi0gICAgX2lz
RXhwbGljaXRseU5vbkNhY2hlYWJsZTogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAg
IHZhciBoYXNFeHBsaWNpdEV4cCA9IHRoaXMuaGFzRXhwbGljaXRFeHBpcmF0aW9uKHJlcXVlc3Qp
OwotICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUhlYWRlck1hdGNoKHJlcXVlc3QsICJDYWNo
ZS1Db250cm9sIiwgIihuby1jYWNoZXxuby1zdG9yZXxtdXN0LXJldmFsaWRhdGUpIikgfHwKLSAg
ICAgICAgICAgIHRoaXMucmVzcG9uc2VIZWFkZXJNYXRjaChyZXF1ZXN0LCAiUHJhZ21hIiwgIm5v
LWNhY2hlIikgfHwKLSAgICAgICAgICAgIChoYXNFeHBsaWNpdEV4cCAmJiAhdGhpcy5mcmVzaG5l
c3NMaWZldGltZUdyZWF0ZXJUaGFuKHJlcXVlc3QsIDApKSB8fAotICAgICAgICAgICAgKCFoYXNF
eHBsaWNpdEV4cCAmJiByZXF1ZXN0LnVybCAmJiByZXF1ZXN0LnVybC5pbmRleE9mKCI/IikgPj0g
MCkgfHwKLSAgICAgICAgICAgICghaGFzRXhwbGljaXRFeHAgJiYgIXRoaXMuaXNDYWNoZWFibGVS
ZXNvdXJjZShyZXF1ZXN0KSk7Ci0gICAgfSwKLQotICAgIGlzQ2FjaGVhYmxlUmVzb3VyY2U6IGZ1
bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAgICAgICByZXR1cm4gcmVxdWVzdC5zdGF0dXNDb2Rl
ICE9PSB1bmRlZmluZWQgJiYgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVhYmxlUmVzcG9u
c2VDb2Rlc1tyZXF1ZXN0LnN0YXR1c0NvZGVdOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGUucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZX0K
LSAqLwotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQnJvd3NlckNhY2hlQ29udHJvbFJ1bGUgPSBm
dW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVs
ZS5jYWxsKHRoaXMsICJodHRwLWJyb3dzZXJjYWNoZSIsICJMZXZlcmFnZSBicm93c2VyIGNhY2hp
bmciKTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQnJvd3NlckNhY2hlQ29udHJvbFJ1
bGUucHJvdG90eXBlID0gewotICAgIGhhbmRsZU5vbkNhY2hlYWJsZVJlc291cmNlczogZnVuY3Rp
b24ocmVxdWVzdHMsIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGlmIChyZXF1ZXN0cy5sZW5ndGgp
IHsKLSAgICAgICAgICAgIHZhciBlbnRyeSA9IHJlc3VsdC5hZGRDaGlsZCgiVGhlIGZvbGxvd2lu
ZyByZXNvdXJjZXMgYXJlIGV4cGxpY2l0bHkgbm9uLWNhY2hlYWJsZS4gQ29uc2lkZXIgbWFraW5n
IHRoZW0gY2FjaGVhYmxlIGlmIHBvc3NpYmxlOiIsIHRydWUpOwotICAgICAgICAgICAgcmVzdWx0
LnZpb2xhdGlvbkNvdW50ICs9IHJlcXVlc3RzLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgZW50cnku
YWRkVVJMKHJlcXVlc3RzW2ldLnVybCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcnVuQ2hl
Y2tzOiBmdW5jdGlvbihyZXF1ZXN0cywgcmVzdWx0LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAg
IHRoaXMuZXhlY0NoZWNrKCJUaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgbWlzc2luZyBhIGNh
Y2hlIGV4cGlyYXRpb24uIFJlc291cmNlcyB0aGF0IGRvIG5vdCBzcGVjaWZ5IGFuIGV4cGlyYXRp
b24gbWF5IG5vdCBiZSBjYWNoZWQgYnkgYnJvd3NlcnM6IiwKLSAgICAgICAgICAgIHRoaXMuX21p
c3NpbmdFeHBpcmF0aW9uQ2hlY2ssIHJlcXVlc3RzLCByZXN1bHQpOwotICAgICAgICB0aGlzLmV4
ZWNDaGVjaygiVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgc3BlY2lmeSBhIFwiVmFyeVwiIGhlYWRl
ciB0aGF0IGRpc2FibGVzIGNhY2hpbmcgaW4gbW9zdCB2ZXJzaW9ucyBvZiBJbnRlcm5ldCBFeHBs
b3JlcjoiLAotICAgICAgICAgICAgdGhpcy5fdmFyeUNoZWNrLCByZXF1ZXN0cywgcmVzdWx0KTsK
LSAgICAgICAgdGhpcy5leGVjQ2hlY2soIlRoZSBmb2xsb3dpbmcgY2FjaGVhYmxlIHJlc291cmNl
cyBoYXZlIGEgc2hvcnQgZnJlc2huZXNzIGxpZmV0aW1lOiIsCi0gICAgICAgICAgICB0aGlzLl9v
bmVNb250aEV4cGlyYXRpb25DaGVjaywgcmVxdWVzdHMsIHJlc3VsdCk7Ci0KLSAgICAgICAgLy8g
VW5hYmxlIHRvIGltcGxlbWVudCB0aGUgZmF2aWNvbiBjaGVjayBkdWUgdG8gdGhlIFdlYktpdCBs
aW1pdGF0aW9ucy4KLSAgICAgICAgdGhpcy5leGVjQ2hlY2soIlRvIGZ1cnRoZXIgaW1wcm92ZSBj
YWNoZSBoaXQgcmF0ZSwgc3BlY2lmeSBhbiBleHBpcmF0aW9uIG9uZSB5ZWFyIGluIHRoZSBmdXR1
cmUgZm9yIHRoZSBmb2xsb3dpbmcgY2FjaGVhYmxlIHJlc291cmNlczoiLAotICAgICAgICAgICAg
dGhpcy5fb25lWWVhckV4cGlyYXRpb25DaGVjaywgcmVxdWVzdHMsIHJlc3VsdCk7Ci0gICAgfSwK
LQotICAgIF9taXNzaW5nRXhwaXJhdGlvbkNoZWNrOiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuaXNDYWNoZWFibGVSZXNvdXJjZShyZXF1ZXN0KSAmJiAhdGhp
cy5oYXNSZXNwb25zZUhlYWRlcihyZXF1ZXN0LCAiU2V0LUNvb2tpZSIpICYmICF0aGlzLmhhc0V4
cGxpY2l0RXhwaXJhdGlvbihyZXF1ZXN0KTsKLSAgICB9LAotCi0gICAgX3ZhcnlDaGVjazogZnVu
Y3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHZhciB2YXJ5SGVhZGVyID0gdGhpcy5yZXNw
b25zZUhlYWRlcihyZXF1ZXN0LCAiVmFyeSIpOwotICAgICAgICBpZiAodmFyeUhlYWRlcikgewot
ICAgICAgICAgICAgdmFyeUhlYWRlciA9IHZhcnlIZWFkZXIucmVwbGFjZSgvVXNlci1BZ2VudC9n
aSwgIiIpOwotICAgICAgICAgICAgdmFyeUhlYWRlciA9IHZhcnlIZWFkZXIucmVwbGFjZSgvQWNj
ZXB0LUVuY29kaW5nL2dpLCAiIik7Ci0gICAgICAgICAgICB2YXJ5SGVhZGVyID0gdmFyeUhlYWRl
ci5yZXBsYWNlKC9bLCBdKi9nLCAiIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhcnlI
ZWFkZXIgJiYgdmFyeUhlYWRlci5sZW5ndGggJiYgdGhpcy5pc0NhY2hlYWJsZVJlc291cmNlKHJl
cXVlc3QpICYmIHRoaXMuZnJlc2huZXNzTGlmZXRpbWVHcmVhdGVyVGhhbihyZXF1ZXN0LCAwKTsK
LSAgICB9LAotCi0gICAgX29uZU1vbnRoRXhwaXJhdGlvbkNoZWNrOiBmdW5jdGlvbihyZXF1ZXN0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNDYWNoZWFibGVSZXNvdXJjZShyZXF1ZXN0
KSAmJgotICAgICAgICAgICAgIXRoaXMuaGFzUmVzcG9uc2VIZWFkZXIocmVxdWVzdCwgIlNldC1D
b29raWUiKSAmJgotICAgICAgICAgICAgIXRoaXMuZnJlc2huZXNzTGlmZXRpbWVHcmVhdGVyVGhh
bihyZXF1ZXN0LCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlLk1pbGxp
c1Blck1vbnRoKSAmJgotICAgICAgICAgICAgdGhpcy5mcmVzaG5lc3NMaWZldGltZUdyZWF0ZXJU
aGFuKHJlcXVlc3QsIDApOwotICAgIH0sCi0KLSAgICBfb25lWWVhckV4cGlyYXRpb25DaGVjazog
ZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmlzQ2FjaGVhYmxl
UmVzb3VyY2UocmVxdWVzdCkgJiYKLSAgICAgICAgICAgICF0aGlzLmhhc1Jlc3BvbnNlSGVhZGVy
KHJlcXVlc3QsICJTZXQtQ29va2llIikgJiYKLSAgICAgICAgICAgICF0aGlzLmZyZXNobmVzc0xp
ZmV0aW1lR3JlYXRlclRoYW4ocmVxdWVzdCwgMTEgKiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5D
YWNoZUNvbnRyb2xSdWxlLk1pbGxpc1Blck1vbnRoKSAmJgotICAgICAgICAgICAgdGhpcy5mcmVz
aG5lc3NMaWZldGltZUdyZWF0ZXJUaGFuKHJlcXVlc3QsIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
LkNhY2hlQ29udHJvbFJ1bGUuTWlsbGlzUGVyTW9udGgpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlCi19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuQ2FjaGVDb250cm9sUnVsZX0KLSAqLwotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuUHJv
eHlDYWNoZUNvbnRyb2xSdWxlID0gZnVuY3Rpb24oKSB7Ci0gICAgV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5jYWxsKHRoaXMsICJodHRwLXByb3h5Y2FjaGUiLCAiTGV2
ZXJhZ2UgcHJveHkgY2FjaGluZyIpOwotfQotCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Qcm94
eUNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlID0gewotICAgIHJ1bkNoZWNrczogZnVuY3Rpb24o
cmVxdWVzdHMsIHJlc3VsdCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLmV4ZWNDaGVj
aygiUmVzb3VyY2VzIHdpdGggYSBcIj9cIiBpbiB0aGUgVVJMIGFyZSBub3QgY2FjaGVkIGJ5IG1v
c3QgcHJveHkgY2FjaGluZyBzZXJ2ZXJzOiIsCi0gICAgICAgICAgICB0aGlzLl9xdWVzdGlvbk1h
cmtDaGVjaywgcmVxdWVzdHMsIHJlc3VsdCk7Ci0gICAgICAgIHRoaXMuZXhlY0NoZWNrKCJDb25z
aWRlciBhZGRpbmcgYSBcIkNhY2hlLUNvbnRyb2w6IHB1YmxpY1wiIGhlYWRlciB0byB0aGUgZm9s
bG93aW5nIHJlc291cmNlczoiLAotICAgICAgICAgICAgdGhpcy5fcHVibGljQ2FjaGluZ0NoZWNr
LCByZXF1ZXN0cywgcmVzdWx0KTsKLSAgICAgICAgdGhpcy5leGVjQ2hlY2soIlRoZSBmb2xsb3dp
bmcgcHVibGljbHkgY2FjaGVhYmxlIHJlc291cmNlcyBjb250YWluIGEgU2V0LUNvb2tpZSBoZWFk
ZXIuIFRoaXMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBjYW4gY2F1c2UgY29va2llcyB0byBiZSBz
aGFyZWQgYnkgbXVsdGlwbGUgdXNlcnMuIiwKLSAgICAgICAgICAgIHRoaXMuX3NldENvb2tpZUNh
Y2hlYWJsZUNoZWNrLCByZXF1ZXN0cywgcmVzdWx0KTsKLSAgICB9LAotCi0gICAgX3F1ZXN0aW9u
TWFya0NoZWNrOiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlcXVl
c3QudXJsLmluZGV4T2YoIj8iKSA+PSAwICYmICF0aGlzLmhhc1Jlc3BvbnNlSGVhZGVyKHJlcXVl
c3QsICJTZXQtQ29va2llIikgJiYgdGhpcy5pc1B1YmxpY2x5Q2FjaGVhYmxlKHJlcXVlc3QpOwot
ICAgIH0sCi0KLSAgICBfcHVibGljQ2FjaGluZ0NoZWNrOiBmdW5jdGlvbihyZXF1ZXN0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNDYWNoZWFibGVSZXNvdXJjZShyZXF1ZXN0KSAmJgot
ICAgICAgICAgICAgIXRoaXMuaXNDb21wcmVzc2libGUocmVxdWVzdCkgJiYKLSAgICAgICAgICAg
ICF0aGlzLnJlc3BvbnNlSGVhZGVyTWF0Y2gocmVxdWVzdCwgIkNhY2hlLUNvbnRyb2wiLCAicHVi
bGljIikgJiYKLSAgICAgICAgICAgICF0aGlzLmhhc1Jlc3BvbnNlSGVhZGVyKHJlcXVlc3QsICJT
ZXQtQ29va2llIik7Ci0gICAgfSwKLQotICAgIF9zZXRDb29raWVDYWNoZWFibGVDaGVjazogZnVu
Y3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmhhc1Jlc3BvbnNlSGVh
ZGVyKHJlcXVlc3QsICJTZXQtQ29va2llIikgJiYgdGhpcy5pc1B1YmxpY2x5Q2FjaGVhYmxlKHJl
cXVlc3QpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
LkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZX0KLSAqLwotV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlLmNhbGwodGhpcywgInBhZ2UtaW1hZ2VkaW1zIiwgIlNwZWNpZnkgaW1h
Z2UgZGltZW5zaW9ucyIpOwotfQotCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVu
c2lvbnNSdWxlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFBcnJheS48
IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gICAgICogQHBhcmFtIHsh
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdH0gcmVzdWx0Ci0gICAgICogQHBhcmFtIHtmdW5j
dGlvbihXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0KX0gY2FsbGJhY2sKLSAgICAgKiBAcGFy
YW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9IHByb2dyZXNzCi0gICAgICovCi0gICAgZG9SdW46
IGZ1bmN0aW9uKHJlcXVlc3RzLCByZXN1bHQsIGNhbGxiYWNrLCBwcm9ncmVzcykKLSAgICB7Ci0g
ICAgICAgIHZhciB1cmxUb05vRGltZW5zaW9uQ291bnQgPSB7fTsKLQotICAgICAgICBmdW5jdGlv
biBkb25lQ2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciB1cmwgaW4g
dXJsVG9Ob0RpbWVuc2lvbkNvdW50KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW50
cnkgfHwgcmVzdWx0LmFkZENoaWxkKCJBIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHNwZWNp
ZmllZCBmb3IgYWxsIGltYWdlcyBpbiBvcmRlciB0byBzcGVlZCB1cCBwYWdlIGRpc3BsYXkuIFRo
ZSBmb2xsb3dpbmcgaW1hZ2UocykgYXJlIG1pc3NpbmcgYSB3aWR0aCBhbmQvb3IgaGVpZ2h0OiIs
IHRydWUpOwotICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSAiJXIiOwotICAgICAgICAgICAg
ICAgIGlmICh1cmxUb05vRGltZW5zaW9uQ291bnRbdXJsXSA+IDEpCi0gICAgICAgICAgICAgICAg
ICAgIGZvcm1hdCArPSAiICglZCB1c2VzKSI7Ci0gICAgICAgICAgICAgICAgZW50cnkuYWRkRm9y
bWF0dGVkKGZvcm1hdCwgdXJsLCB1cmxUb05vRGltZW5zaW9uQ291bnRbdXJsXSk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LnZpb2xhdGlvbkNvdW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYWxsYmFjayhlbnRyeSA/IHJlc3VsdCA6IG51bGwpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gaW1hZ2VTdHlsZXNSZWFkeShpbWFnZUlkLCBzdHlsZXMsIGlzTGFzdFN0eWxl
LCBjb21wdXRlZFN0eWxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jlc3MuaXND
YW5jZWxlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgY29uc3Qg
bm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQoaW1hZ2VJZCk7Ci0gICAgICAg
ICAgICB2YXIgc3JjID0gbm9kZS5nZXRBdHRyaWJ1dGUoInNyYyIpOwotICAgICAgICAgICAgaWYg
KCFzcmMuYXNQYXJzZWRVUkwoKSkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGZyYW1lT3du
ZXJDYW5kaWRhdGUgPSBub2RlOyBmcmFtZU93bmVyQ2FuZGlkYXRlOyBmcmFtZU93bmVyQ2FuZGlk
YXRlID0gZnJhbWVPd25lckNhbmRpZGF0ZS5wYXJlbnROb2RlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChmcmFtZU93bmVyQ2FuZGlkYXRlLmJhc2VVUkwpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBjb21wbGV0ZVNyYyA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwuY29tcGxldGVV
UkwoZnJhbWVPd25lckNhbmRpZGF0ZS5iYXNlVVJMLCBzcmMpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29tcGxldGVTcmMpCi0gICAgICAgICAgICAg
ICAgc3JjID0gY29tcGxldGVTcmM7Ci0KLSAgICAgICAgICAgIGlmIChjb21wdXRlZFN0eWxlLmdl
dFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIikgPT09ICJhYnNvbHV0ZSIpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNMYXN0U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIGRvbmVDYWxsYmFjaygp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHN0eWxlcy5hdHRyaWJ1dGVzU3R5bGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgd2lkdGhG
b3VuZCA9ICEhc3R5bGVzLmF0dHJpYnV0ZXNTdHlsZS5nZXRMaXZlUHJvcGVydHkoIndpZHRoIik7
Ci0gICAgICAgICAgICAgICAgdmFyIGhlaWdodEZvdW5kID0gISFzdHlsZXMuYXR0cmlidXRlc1N0
eWxlLmdldExpdmVQcm9wZXJ0eSgiaGVpZ2h0Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZhciBpbmxpbmVTdHlsZSA9IHN0eWxlcy5pbmxpbmVTdHlsZTsKLSAgICAgICAgICAgIGlm
IChpbmxpbmVTdHlsZSkgewotICAgICAgICAgICAgICAgIGlmIChpbmxpbmVTdHlsZS5nZXRQcm9w
ZXJ0eVZhbHVlKCJ3aWR0aCIpICE9PSAiIikKLSAgICAgICAgICAgICAgICAgICAgd2lkdGhGb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlubGluZVN0eWxlLmdldFByb3BlcnR5VmFs
dWUoImhlaWdodCIpICE9PSAiIikKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Rm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gc3R5bGVzLm1h
dGNoZWRDU1NSdWxlcy5sZW5ndGggLSAxOyBpID49IDAgJiYgISh3aWR0aEZvdW5kICYmIGhlaWdo
dEZvdW5kKTsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0eWxlID0gc3R5bGVzLm1hdGNo
ZWRDU1NSdWxlc1tpXS5zdHlsZTsKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVy
dHlWYWx1ZSgid2lkdGgiKSAhPT0gIiIpCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoRm91bmQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCJoZWln
aHQiKSAhPT0gIiIpCi0gICAgICAgICAgICAgICAgICAgIGhlaWdodEZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF3aWR0aEZvdW5kIHx8ICFoZWlnaHRGb3Vu
ZCkgewotICAgICAgICAgICAgICAgIGlmIChzcmMgaW4gdXJsVG9Ob0RpbWVuc2lvbkNvdW50KQot
ICAgICAgICAgICAgICAgICAgICArK3VybFRvTm9EaW1lbnNpb25Db3VudFtzcmNdOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdXJsVG9Ob0RpbWVuc2lvbkNvdW50
W3NyY10gPSAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaXNMYXN0U3R5bGUp
Ci0gICAgICAgICAgICAgICAgZG9uZUNhbGxiYWNrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBnZXRTdHlsZXMobm9kZUlkcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHBy
b2dyZXNzLmlzQ2FuY2VsZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB2YXIgdGFyZ2V0UmVzdWx0ID0ge307Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGlubGluZUNh
bGxiYWNrKGlubGluZVN0eWxlLCBhdHRyaWJ1dGVzU3R5bGUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdGFyZ2V0UmVzdWx0LmlubGluZVN0eWxlID0gaW5saW5lU3R5bGU7Ci0gICAg
ICAgICAgICAgICAgdGFyZ2V0UmVzdWx0LmF0dHJpYnV0ZXNTdHlsZSA9IGF0dHJpYnV0ZXNTdHls
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gbWF0Y2hlZENhbGxiYWNr
KHJlc3VsdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQotICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRSZXN1bHQubWF0Y2hlZENTU1J1bGVzID0gcmVzdWx0Lm1h
dGNoZWRDU1NSdWxlczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFub2RlSWRz
IHx8ICFub2RlSWRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBkb25lQ2FsbGJhY2soKTsKLQot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IG5vZGVJZHMgJiYgaSA8IG5vZGVJZHMubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0TWF0Y2hl
ZFN0eWxlc0FzeW5jKG5vZGVJZHNbaV0sIGZhbHNlLCBmYWxzZSwgbWF0Y2hlZENhbGxiYWNrKTsK
LSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0SW5saW5lU3R5bGVzQXN5
bmMobm9kZUlkc1tpXSwgaW5saW5lQ2FsbGJhY2spOwotICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5jc3NNb2RlbC5nZXRDb21wdXRlZFN0eWxlQXN5bmMobm9kZUlkc1tpXSwgaW1hZ2VTdHls
ZXNSZWFkeS5iaW5kKG51bGwsIG5vZGVJZHNbaV0sIHRhcmdldFJlc3VsdCwgaSA9PT0gbm9kZUlk
cy5sZW5ndGggLSAxKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBvbkRvY3VtZW50QXZhaWxhYmxlKHJvb3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChwcm9ncmVzcy5pc0NhbmNlbGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LnF1ZXJ5U2VsZWN0b3JBbGwocm9vdC5pZCwgImlt
Z1tzcmNdIiwgZ2V0U3R5bGVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcm9ncmVzcy5p
c0NhbmNlbGVkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFdlYkluc3BlY3Rvci5k
b21BZ2VudC5yZXF1ZXN0RG9jdW1lbnQob25Eb2N1bWVudEF2YWlsYWJsZSk7Ci0gICAgfSwKLQot
ICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90b3R5cGUKLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQXVkaXRSdWxlfQot
ICovCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Dc3NJbkhlYWRSdWxlID0gZnVuY3Rpb24oKQot
ewotICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuY2FsbCh0aGlzLCAicGFnZS1jc3NpbmhlYWQi
LCAiUHV0IENTUyBpbiB0aGUgZG9jdW1lbnQgaGVhZCIpOwotfQotCi1XZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5Dc3NJbkhlYWRSdWxlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gICAg
ICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdH0gcmVzdWx0Ci0gICAgICog
QHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0KX0gY2FsbGJhY2sK
LSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9IHByb2dyZXNzCi0gICAgICov
Ci0gICAgZG9SdW46IGZ1bmN0aW9uKHJlcXVlc3RzLCByZXN1bHQsIGNhbGxiYWNrLCBwcm9ncmVz
cykKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFjayhldmFsUmVzdWx0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCFldmFsUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTsKLQotICAgICAgICAgICAgdmFyIHN1bW1hcnkg
PSByZXN1bHQuYWRkQ2hpbGQoIiIpOwotCi0gICAgICAgICAgICB2YXIgb3V0cHV0TWVzc2FnZXMg
PSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIHVybCBpbiBldmFsUmVzdWx0KSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHVybFZpb2xhdGlvbnMgPSBldmFsUmVzdWx0W3VybF07Ci0gICAgICAgICAg
ICAgICAgaWYgKHVybFZpb2xhdGlvbnNbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFkZEZvcm1hdHRlZCgiJXMgc3R5bGUgYmxvY2socykgaW4gdGhlICVyIGJvZHkgc2hvdWxkIGJl
IG1vdmVkIHRvIHRoZSBkb2N1bWVudCBoZWFkLiIsIHVybFZpb2xhdGlvbnNbMF0sIHVybCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC52aW9sYXRpb25Db3VudCArPSB1cmxWaW9sYXRpb25z
WzBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHVybFZpb2xhdGlvbnNbMV0ubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hZGRGb3JtYXR0ZWQoIkxpbmsgbm9kZSAlciBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGRv
Y3VtZW50IGhlYWQgaW4gJXIiLCB1cmxWaW9sYXRpb25zWzFdW2ldLCB1cmwpOwotICAgICAgICAg
ICAgICAgIHJlc3VsdC52aW9sYXRpb25Db3VudCArPSB1cmxWaW9sYXRpb25zWzFdLmxlbmd0aDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1bW1hcnkudmFsdWUgPSBTdHJpbmcuc3ByaW50
ZigiQ1NTIGluIHRoZSBkb2N1bWVudCBib2R5IGFkdmVyc2VseSBpbXBhY3RzIHJlbmRlcmluZyBw
ZXJmb3JtYW5jZS4iKTsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiBleHRlcm5hbFN0eWxlc2hlZXRzUmVjZWl2ZWQocm9vdCwgaW5s
aW5lU3R5bGVOb2RlSWRzLCBub2RlSWRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJv
Z3Jlc3MuaXNDYW5jZWxlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgaWYgKCFub2RlSWRzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZh
ciBleHRlcm5hbFN0eWxlc2hlZXROb2RlSWRzID0gbm9kZUlkczsKLSAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBudWxsOwotICAgICAgICAgICAgaWYgKGlubGluZVN0eWxlTm9kZUlkcy5sZW5ndGgg
fHwgZXh0ZXJuYWxTdHlsZXNoZWV0Tm9kZUlkcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB2
YXIgdXJsVG9WaW9sYXRpb25zQXJyYXkgPSB7fTsKLSAgICAgICAgICAgICAgICB2YXIgZXh0ZXJu
YWxTdHlsZXNoZWV0SHJlZnMgPSBbXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IGV4dGVybmFsU3R5bGVzaGVldE5vZGVJZHMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGxpbmtOb2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChl
eHRlcm5hbFN0eWxlc2hlZXROb2RlSWRzW2pdKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNv
bXBsZXRlSHJlZiA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwuY29tcGxldGVVUkwobGlua05vZGUu
b3duZXJEb2N1bWVudC5iYXNlVVJMLCBsaW5rTm9kZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU3R5bGVzaGVldEhyZWZzLnB1c2goY29tcGxldGVI
cmVmIHx8ICI8ZW1wdHk+Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVy
bFRvVmlvbGF0aW9uc0FycmF5W3Jvb3QuZG9jdW1lbnRVUkxdID0gW2lubGluZVN0eWxlTm9kZUlk
cy5sZW5ndGgsIGV4dGVybmFsU3R5bGVzaGVldEhyZWZzXTsKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSB1cmxUb1Zpb2xhdGlvbnNBcnJheTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2
YWxDYWxsYmFjayhyZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaW5saW5l
U3R5bGVzUmVjZWl2ZWQocm9vdCwgbm9kZUlkcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHByb2dyZXNzLmlzQ2FuY2VsZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIGlmICghbm9kZUlkcykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQucXVlcnlTZWxlY3RvckFsbChyb290LmlkLCAiYm9keSBs
aW5rW3JlbH49J3N0eWxlc2hlZXQnXVtocmVmXSIsIGV4dGVybmFsU3R5bGVzaGVldHNSZWNlaXZl
ZC5iaW5kKG51bGwsIHJvb3QsIG5vZGVJZHMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIG9uRG9jdW1lbnRBdmFpbGFibGUocm9vdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHByb2dyZXNzLmlzQ2FuY2VsZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5xdWVyeVNlbGVjdG9yQWxsKHJvb3QuaWQsICJi
b2R5IHN0eWxlIiwgaW5saW5lU3R5bGVzUmVjZWl2ZWQuYmluZChudWxsLCByb290KSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQucmVxdWVzdERvY3VtZW50KG9u
RG9jdW1lbnRBdmFpbGFibGUpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGUucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZX0KLSAqLwotV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZXMuU3R5bGVzU2NyaXB0c09yZGVyUnVsZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlLmNhbGwodGhpcywgInBhZ2Utc3R5bGVzY3JpcHRvcmRlciIsICJPcHRpbWl6
ZSB0aGUgb3JkZXIgb2Ygc3R5bGVzIGFuZCBzY3JpcHRzIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVzLlN0eWxlc1NjcmlwdHNPcmRlclJ1bGUucHJvdG90eXBlID0gewotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0Pn0gcmVx
dWVzdHMKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0fSByZXN1
bHQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQp
fSBjYWxsYmFjawotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9ncmVzc30gcHJvZ3Jl
c3MKLSAgICAgKi8KLSAgICBkb1J1bjogZnVuY3Rpb24ocmVxdWVzdHMsIHJlc3VsdCwgY2FsbGJh
Y2ssIHByb2dyZXNzKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZXZhbENhbGxiYWNrKHJlc3Vs
dFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jlc3MuaXNDYW5jZWxlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7Ci0KLSAgICAgICAgICAg
IHZhciBsYXRlQ3NzVXJscyA9IHJlc3VsdFZhbHVlWzBdOwotICAgICAgICAgICAgdmFyIGNzc0Jl
Zm9yZUlubGluZUNvdW50ID0gcmVzdWx0VmFsdWVbMV07Ci0KLSAgICAgICAgICAgIHZhciBlbnRy
eSA9IHJlc3VsdC5hZGRDaGlsZCgiVGhlIGZvbGxvd2luZyBleHRlcm5hbCBDU1MgZmlsZXMgd2Vy
ZSBpbmNsdWRlZCBhZnRlciBhbiBleHRlcm5hbCBKYXZhU2NyaXB0IGZpbGUgaW4gdGhlIGRvY3Vt
ZW50IGhlYWQuIFRvIGVuc3VyZSBDU1MgZmlsZXMgYXJlIGRvd25sb2FkZWQgaW4gcGFyYWxsZWws
IGFsd2F5cyBpbmNsdWRlIGV4dGVybmFsIENTUyBiZWZvcmUgZXh0ZXJuYWwgSmF2YVNjcmlwdC4i
LCB0cnVlKTsKLSAgICAgICAgICAgIGVudHJ5LmFkZFVSTHMobGF0ZUNzc1VybHMpOwotICAgICAg
ICAgICAgcmVzdWx0LnZpb2xhdGlvbkNvdW50ICs9IGxhdGVDc3NVcmxzLmxlbmd0aDsKLQotICAg
ICAgICAgICAgaWYgKGNzc0JlZm9yZUlubGluZUNvdW50KSB7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0LmFkZENoaWxkKFN0cmluZy5zcHJpbnRmKCIgJWQgaW5saW5lIHNjcmlwdCBibG9jayVzIGZv
dW5kIGluIHRoZSBoZWFkIGJldHdlZW4gYW4gZXh0ZXJuYWwgQ1NTIGZpbGUgYW5kIGFub3RoZXIg
cmVzb3VyY2UuIFRvIGFsbG93IHBhcmFsbGVsIGRvd25sb2FkaW5nLCBtb3ZlIHRoZSBpbmxpbmUg
c2NyaXB0IGJlZm9yZSB0aGUgZXh0ZXJuYWwgQ1NTIGZpbGUsIG9yIGFmdGVyIHRoZSBuZXh0IHJl
c291cmNlLiIsIGNzc0JlZm9yZUlubGluZUNvdW50LCBjc3NCZWZvcmVJbmxpbmVDb3VudCA+IDEg
PyAicyB3ZXJlIiA6ICIgd2FzIikpOwotICAgICAgICAgICAgICAgIHJlc3VsdC52aW9sYXRpb25D
b3VudCArPSBjc3NCZWZvcmVJbmxpbmVDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjc3NCZWZv
cmVJbmxpbmVSZWNlaXZlZChsYXRlU3R5bGVJZHMsIG5vZGVJZHMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChwcm9ncmVzcy5pc0NhbmNlbGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICBpZiAoIW5vZGVJZHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICB2YXIgY3NzQmVmb3JlSW5saW5lQ291bnQgPSBub2RlSWRzLmxlbmd0aDsK
LSAgICAgICAgICAgIHZhciByZXN1bHQgPSBudWxsOwotICAgICAgICAgICAgaWYgKGxhdGVTdHls
ZUlkcy5sZW5ndGggfHwgY3NzQmVmb3JlSW5saW5lQ291bnQpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbGF0ZVN0eWxlVXJscyA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGF0ZVN0eWxlSWRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBs
YXRlU3R5bGVOb2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChsYXRlU3R5bGVJ
ZHNbaV0pOwotICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxldGVIcmVmID0gV2ViSW5zcGVj
dG9yLlBhcnNlZFVSTC5jb21wbGV0ZVVSTChsYXRlU3R5bGVOb2RlLm93bmVyRG9jdW1lbnQuYmFz
ZVVSTCwgbGF0ZVN0eWxlTm9kZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxhdGVTdHlsZVVybHMucHVzaChjb21wbGV0ZUhyZWYgfHwgIjxlbXB0eT4iKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gWyBsYXRlU3R5bGVVcmxz
LCBjc3NCZWZvcmVJbmxpbmVDb3VudCBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBl
dmFsQ2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGxhdGVT
dHlsZXNSZWNlaXZlZChyb290LCBub2RlSWRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
cHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKCFub2RlSWRzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LnF1ZXJ5U2VsZWN0b3JBbGwocm9vdC5pZCwgImhlYWQg
bGlua1tyZWx+PSdzdHlsZXNoZWV0J11baHJlZl0gfiBzY3JpcHQ6bm90KFtzcmNdKSIsIGNzc0Jl
Zm9yZUlubGluZVJlY2VpdmVkLmJpbmQobnVsbCwgbm9kZUlkcykpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gb25Eb2N1bWVudEF2YWlsYWJsZShyb290KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAocHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
cm9vdC5pZCwgImhlYWQgc2NyaXB0W3NyY10gfiBsaW5rW3JlbH49J3N0eWxlc2hlZXQnXVtocmVm
XSIsIGxhdGVTdHlsZXNSZWNlaXZlZC5iaW5kKG51bGwsIHJvb3QpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5yZXF1ZXN0RG9jdW1lbnQob25Eb2N1bWVudEF2
YWlsYWJsZSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlfQotICovCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DU1NSdWxl
QmFzZSA9IGZ1bmN0aW9uKGlkLCBuYW1lKQotewotICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUu
Y2FsbCh0aGlzLCBpZCwgbmFtZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNTU1J1
bGVCYXNlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFBcnJheS48IVdl
Ykluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gICAgICogQHBhcmFtIHshV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdH0gcmVzdWx0Ci0gICAgICogQHBhcmFtIHtmdW5jdGlv
bihXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0KX0gY2FsbGJhY2sKLSAgICAgKiBAcGFyYW0g
eyFXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9IHByb2dyZXNzCi0gICAgICovCi0gICAgZG9SdW46IGZ1
bmN0aW9uKHJlcXVlc3RzLCByZXN1bHQsIGNhbGxiYWNrLCBwcm9ncmVzcykKLSAgICB7Ci0gICAg
ICAgIENTU0FnZW50LmdldEFsbFN0eWxlU2hlZXRzKHNoZWV0c0NhbGxiYWNrLmJpbmQodGhpcykp
OwotCi0gICAgICAgIGZ1bmN0aW9uIHNoZWV0c0NhbGxiYWNrKGVycm9yLCBoZWFkZXJzKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNh
bGxiYWNrKG51bGwpOwotCi0gICAgICAgICAgICBpZiAoIWhlYWRlcnMubGVuZ3RoKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBoZWFk
ZXIgPSBoZWFkZXJzW2ldOwotICAgICAgICAgICAgICAgIGlmIChoZWFkZXIuZGlzYWJsZWQpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBEbyBub3QgY2hlY2sgZGlzYWJsZWQgc3R5
bGVzaGVldHMuCi0KLSAgICAgICAgICAgICAgICB0aGlzLl92aXNpdFN0eWxlU2hlZXQoaGVhZGVy
LnN0eWxlU2hlZXRJZCwgaSA9PT0gaGVhZGVycy5sZW5ndGggLSAxID8gZmluaXNoZWRDYWxsYmFj
ayA6IG51bGwsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gZmluaXNoZWRDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3Zpc2l0U3R5
bGVTaGVldDogZnVuY3Rpb24oc3R5bGVTaGVldElkLCBjYWxsYmFjaywgcmVzdWx0LCBwcm9ncmVz
cykKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LmNyZWF0ZUZvcklk
KHN0eWxlU2hlZXRJZCwgc2hlZXRDYWxsYmFjay5iaW5kKHRoaXMpKTsKLQotICAgICAgICBmdW5j
dGlvbiBzaGVldENhbGxiYWNrKHN0eWxlU2hlZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChwcm9ncmVzcy5pc0NhbmNlbGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICBpZiAoIXN0eWxlU2hlZXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sp
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLnZpc2l0U3R5bGVTaGVldChzdHls
ZVNoZWV0LCByZXN1bHQpOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxl
U2hlZXQucnVsZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fdmlzaXRSdWxl
KHN0eWxlU2hlZXQsIHN0eWxlU2hlZXQucnVsZXNbaV0sIHJlc3VsdCk7Ci0KLSAgICAgICAgICAg
IHRoaXMuZGlkVmlzaXRTdHlsZVNoZWV0KHN0eWxlU2hlZXQsIHJlc3VsdCk7Ci0KLSAgICAgICAg
ICAgIGlmIChjYWxsYmFjaykKLSAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIF92aXNpdFJ1bGU6IGZ1bmN0aW9uKHN0eWxlU2hlZXQsIHJ1bGUsIHJl
c3VsdCkKLSAgICB7Ci0gICAgICAgIHRoaXMudmlzaXRSdWxlKHN0eWxlU2hlZXQsIHJ1bGUsIHJl
c3VsdCk7Ci0gICAgICAgIHZhciBhbGxQcm9wZXJ0aWVzID0gcnVsZS5zdHlsZS5hbGxQcm9wZXJ0
aWVzOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0aGlzLnZpc2l0UHJvcGVydHkoc3R5bGVTaGVldCwgYWxsUHJvcGVy
dGllc1tpXSwgcmVzdWx0KTsKLSAgICAgICAgdGhpcy5kaWRWaXNpdFJ1bGUoc3R5bGVTaGVldCwg
cnVsZSwgcmVzdWx0KTsKLSAgICB9LAotCi0gICAgdmlzaXRTdHlsZVNoZWV0OiBmdW5jdGlvbihz
dHlsZVNoZWV0LCByZXN1bHQpCi0gICAgewotICAgICAgICAvLyBTdWJjbGFzc2VzIGNhbiBpbXBs
ZW1lbnQuCi0gICAgfSwKLQotICAgIGRpZFZpc2l0U3R5bGVTaGVldDogZnVuY3Rpb24oc3R5bGVT
aGVldCwgcmVzdWx0KQotICAgIHsKLSAgICAgICAgLy8gU3ViY2xhc3NlcyBjYW4gaW1wbGVtZW50
LgotICAgIH0sCi0gICAgCi0gICAgdmlzaXRSdWxlOiBmdW5jdGlvbihzdHlsZVNoZWV0LCBydWxl
LCByZXN1bHQpCi0gICAgewotICAgICAgICAvLyBTdWJjbGFzc2VzIGNhbiBpbXBsZW1lbnQuCi0g
ICAgfSwKLQotICAgIGRpZFZpc2l0UnVsZTogZnVuY3Rpb24oc3R5bGVTaGVldCwgcnVsZSwgcmVz
dWx0KQotICAgIHsKLSAgICAgICAgLy8gU3ViY2xhc3NlcyBjYW4gaW1wbGVtZW50LgotICAgIH0s
Ci0gICAgCi0gICAgdmlzaXRQcm9wZXJ0eTogZnVuY3Rpb24oc3R5bGVTaGVldCwgcHJvcGVydHks
IHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIC8vIFN1YmNsYXNzZXMgY2FuIGltcGxlbWVudC4KLSAg
ICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLnByb3RvdHlwZQot
fQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLkNTU1J1bGVCYXNlfQotICovCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5WZW5kb3JQ
cmVmaXhlZENTU1Byb3BlcnRpZXMgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuQ1NTUnVsZUJhc2UuY2FsbCh0aGlzLCAicGFnZS12ZW5kb3JwcmVmaXhlZGNzcyIs
ICJVc2Ugbm9ybWFsIENTUyBwcm9wZXJ0eSBuYW1lcyBpbnN0ZWFkIG9mIHZlbmRvci1wcmVmaXhl
ZCBvbmVzIik7Ci0gICAgdGhpcy5fd2Via2l0UHJlZml4ID0gIi13ZWJraXQtIjsKLX0KLQotV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuVmVuZG9yUHJlZml4ZWRDU1NQcm9wZXJ0aWVzLnN1cHBvcnRl
ZFByb3BlcnRpZXMgPSBbCi0gICAgImJhY2tncm91bmQtY2xpcCIsICJiYWNrZ3JvdW5kLW9yaWdp
biIsICJiYWNrZ3JvdW5kLXNpemUiLAotICAgICJib3JkZXItcmFkaXVzIiwgImJvcmRlci1ib3R0
b20tbGVmdC1yYWRpdXMiLCAiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLCAiYm9yZGVyLXRv
cC1sZWZ0LXJhZGl1cyIsICJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsCi0gICAgImJveC1zaGFk
b3ciLCAiYm94LXNpemluZyIsICJvcGFjaXR5IiwgInRleHQtc2hhZG93IgotXS5rZXlTZXQoKTsK
LQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVmVuZG9yUHJlZml4ZWRDU1NQcm9wZXJ0aWVzLnBy
b3RvdHlwZSA9IHsKLSAgICBkaWRWaXNpdFN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXQp
Ci0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fc3R5bGVTaGVldFJlc3VsdDsKLSAgICB9LAot
Ci0gICAgdmlzaXRSdWxlOiBmdW5jdGlvbihydWxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWVu
dGlvbmVkUHJvcGVydGllcyA9IHt9OwotICAgIH0sCi0KLSAgICBkaWRWaXNpdFJ1bGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9ydWxlUmVzdWx0OwotICAgICAgICBk
ZWxldGUgdGhpcy5fbWVudGlvbmVkUHJvcGVydGllczsKLSAgICB9LAotCi0gICAgdmlzaXRQcm9w
ZXJ0eTogZnVuY3Rpb24oc3R5bGVTaGVldCwgcHJvcGVydHksIHJlc3VsdCkKLSAgICB7Ci0gICAg
ICAgIGlmICghcHJvcGVydHkubmFtZS5zdGFydHNXaXRoKHRoaXMuX3dlYmtpdFByZWZpeCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG5vcm1hbFByb3BlcnR5TmFtZSA9IHBy
b3BlcnR5Lm5hbWUuc3Vic3RyaW5nKHRoaXMuX3dlYmtpdFByZWZpeC5sZW5ndGgpLnRvTG93ZXJD
YXNlKCk7IC8vIFN0YXJ0IGp1c3QgYWZ0ZXIgdGhlICItd2Via2l0LSIgcHJlZml4LgotICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVmVuZG9yUHJlZml4ZWRDU1NQcm9wZXJ0aWVz
LnN1cHBvcnRlZFByb3BlcnRpZXNbbm9ybWFsUHJvcGVydHlOYW1lXSAmJiAhdGhpcy5fbWVudGlv
bmVkUHJvcGVydGllc1tub3JtYWxQcm9wZXJ0eU5hbWVdKSB7Ci0gICAgICAgICAgICB2YXIgc3R5
bGUgPSBwcm9wZXJ0eS5vd25lclN0eWxlOwotICAgICAgICAgICAgdmFyIGxpdmVQcm9wZXJ0eSA9
IHN0eWxlLmdldExpdmVQcm9wZXJ0eShub3JtYWxQcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAg
aWYgKGxpdmVQcm9wZXJ0eSAmJiAhbGl2ZVByb3BlcnR5LnN0eWxlQmFzZWQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOyAvLyBXZWJDb3JlIGNhbiBwcm92aWRlIG5vcm1hbCB2ZXJzaW9ucyBvZiBw
cmVmaXhlZCBwcm9wZXJ0aWVzIGF1dG9tYXRpY2FsbHksIHNvIGJlIGNhcmVmdWwgdG8gc2tpcCBv
bmx5IG5vcm1hbCBzb3VyY2UtYmFzZWQgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgdmFyIHJ1
bGUgPSBzdHlsZS5wYXJlbnRSdWxlOwotICAgICAgICAgICAgdGhpcy5fbWVudGlvbmVkUHJvcGVy
dGllc1tub3JtYWxQcm9wZXJ0eU5hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICghdGhpcy5f
c3R5bGVTaGVldFJlc3VsdCkKLSAgICAgICAgICAgICAgICB0aGlzLl9zdHlsZVNoZWV0UmVzdWx0
ID0gcmVzdWx0LmFkZENoaWxkKHJ1bGUuc291cmNlVVJMID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlS
ZXNvdXJjZUFzTm9kZShydWxlLnNvdXJjZVVSTCkgOiAiPHVua25vd24+Iik7Ci0gICAgICAgICAg
ICBpZiAoIXRoaXMuX3J1bGVSZXN1bHQpIHsKLSAgICAgICAgICAgICAgICB2YXIgYW5jaG9yID0g
V2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUocnVsZS5zb3VyY2VVUkwsIHJ1bGUuc2VsZWN0
b3JUZXh0KTsKLSAgICAgICAgICAgICAgICBhbmNob3IucHJlZmVycmVkUGFuZWwgPSAicmVzb3Vy
Y2VzIjsKLSAgICAgICAgICAgICAgICBhbmNob3IubGluZU51bWJlciA9IHJ1bGUuc291cmNlTGlu
ZTsKLSAgICAgICAgICAgICAgICB0aGlzLl9ydWxlUmVzdWx0ID0gdGhpcy5fc3R5bGVTaGVldFJl
c3VsdC5hZGRDaGlsZChhbmNob3IpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytyZXN1
bHQudmlvbGF0aW9uQ291bnQ7Ci0gICAgICAgICAgICB0aGlzLl9ydWxlUmVzdWx0LmFkZFNuaXBw
ZXQoU3RyaW5nLnNwcmludGYoIlwiIiArIHRoaXMuX3dlYmtpdFByZWZpeCArICIlc1wiIGlzIHVz
ZWQsIGJ1dCBcIiVzXCIgaXMgc3VwcG9ydGVkLiIsIG5vcm1hbFByb3BlcnR5TmFtZSwgbm9ybWFs
UHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5DU1NSdWxlQmFzZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQXVkaXRSdWxlfQotICovCi1X
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVSdWxlQmFzZSA9IGZ1bmN0aW9uKGlkLCBuYW1l
KQotewotICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuY2FsbCh0aGlzLCBpZCwgbmFtZSk7Ci19
Ci0KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVJ1bGVCYXNlLnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVx
dWVzdD59IHJlcXVlc3RzCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJl
c3VsdH0gcmVzdWx0Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlUmVzdWx0KX0gY2FsbGJhY2sKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jl
c3N9IHByb2dyZXNzCi0gICAgICovCi0gICAgZG9SdW46IGZ1bmN0aW9uKHJlcXVlc3RzLCByZXN1
bHQsIGNhbGxiYWNrLCBwcm9ncmVzcykKLSAgICB7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsK
LSAgICAgICAgZnVuY3Rpb24gcmVzdWx0Q2FsbGJhY2socmVjZWl2ZWRDb29raWVzLCBpc0FkdmFu
Y2VkKSB7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgc2VsZi5wcm9jZXNzQ29va2llcyhpc0FkdmFu
Y2VkID8gcmVjZWl2ZWRDb29raWVzIDogW10sIHJlcXVlc3RzLCByZXN1bHQpOwotICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFdlYkluc3BlY3Rvci5D
b29raWVzLmdldENvb2tpZXNBc3luYyhyZXN1bHRDYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIG1h
cFJlc291cmNlQ29va2llczogZnVuY3Rpb24ocmVxdWVzdHNCeURvbWFpbiwgYWxsQ29va2llcywg
Y2FsbGJhY2spCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbENvb2tpZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAodmFyIHJlcXVlc3REb21haW4gaW4gcmVx
dWVzdHNCeURvbWFpbikgewotICAgICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuQ29va2ll
cy5jb29raWVEb21haW5NYXRjaGVzUmVzb3VyY2VEb21haW4oYWxsQ29va2llc1tpXS5kb21haW4o
KSwgcmVxdWVzdERvbWFpbikpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrRm9y
UmVzb3VyY2VDb29raWVQYWlycyhyZXF1ZXN0c0J5RG9tYWluW3JlcXVlc3REb21haW5dLCBhbGxD
b29raWVzW2ldLCBjYWxsYmFjayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgX2NhbGxiYWNrRm9yUmVzb3VyY2VDb29raWVQYWlyczogZnVuY3Rpb24ocmVxdWVzdHMs
IGNvb2tpZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBpZiAoIXJlcXVlc3RzKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLkNvb2tpZXMuY29va2llTWF0
Y2hlc1Jlc291cmNlVVJMKGNvb2tpZSwgcmVxdWVzdHNbaV0udXJsKSkKLSAgICAgICAgICAgICAg
ICBjYWxsYmFjayhyZXF1ZXN0c1tpXSwgY29va2llKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUucHJvdG90eXBlCi19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29v
a2llUnVsZUJhc2V9Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVNpemVSdWxl
ID0gZnVuY3Rpb24oYXZnQnl0ZXNUaHJlc2hvbGQpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuQ29va2llUnVsZUJhc2UuY2FsbCh0aGlzLCAiaHR0cC1jb29raWVzaXplIiwgIk1pbmlt
aXplIGNvb2tpZSBzaXplIik7Ci0gICAgdGhpcy5fYXZnQnl0ZXNUaHJlc2hvbGQgPSBhdmdCeXRl
c1RocmVzaG9sZDsKLSAgICB0aGlzLl9tYXhCeXRlc1RocmVzaG9sZCA9IDEwMDA7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVNpemVSdWxlLnByb3RvdHlwZSA9IHsKLSAgICBf
YXZlcmFnZTogZnVuY3Rpb24oY29va2llQXJyYXkpCi0gICAgewotICAgICAgICB2YXIgdG90YWwg
PSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvb2tpZUFycmF5Lmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdG90YWwgKz0gY29va2llQXJyYXlbaV0uc2l6ZSgpOwotICAgICAgICBy
ZXR1cm4gY29va2llQXJyYXkubGVuZ3RoID8gTWF0aC5yb3VuZCh0b3RhbCAvIGNvb2tpZUFycmF5
Lmxlbmd0aCkgOiAwOwotICAgIH0sCi0KLSAgICBfbWF4OiBmdW5jdGlvbihjb29raWVBcnJheSkK
LSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNvb2tpZUFycmF5Lmxlbmd0aDsgKytpKQotICAgICAgICAgICAgcmVzdWx0ID0gTWF0aC5t
YXgoY29va2llQXJyYXlbaV0uc2l6ZSgpLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0sCi0KLSAgICBwcm9jZXNzQ29va2llczogZnVuY3Rpb24oYWxsQ29va2llcywgcmVx
dWVzdHMsIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIG1heFNpemVTb3J0ZXIoYSwg
YikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGIubWF4Q29va2llU2l6ZSAtIGEubWF4
Q29va2llU2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGF2Z1NpemVTb3J0ZXIo
YSwgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGIuYXZnQ29va2llU2l6ZSAtIGEu
YXZnQ29va2llU2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb29raWVzUGVyUmVzb3Vy
Y2VEb21haW4gPSB7fTsKLQotICAgICAgICBmdW5jdGlvbiBjb2xsZWN0b3JDYWxsYmFjayhyZXF1
ZXN0LCBjb29raWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBjb29raWVzID0gY29va2ll
c1BlclJlc291cmNlRG9tYWluW3JlcXVlc3QucGFyc2VkVVJMLmhvc3RdOwotICAgICAgICAgICAg
aWYgKCFjb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgY29va2llcyA9IFtdOwotICAgICAgICAg
ICAgICAgIGNvb2tpZXNQZXJSZXNvdXJjZURvbWFpbltyZXF1ZXN0LnBhcnNlZFVSTC5ob3N0XSA9
IGNvb2tpZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb29raWVzLnB1c2goY29va2ll
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghYWxsQ29va2llcy5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNvcnRlZENvb2tpZVNpemVzID0gW107Ci0KLSAg
ICAgICAgdmFyIGRvbWFpblRvUmVzb3VyY2VzTWFwID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
Z2V0RG9tYWluVG9SZXNvdXJjZXNNYXAocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgbnVsbCwK
LSAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgdmFyIG1hdGNoaW5nUmVzb3VyY2VEYXRh
ID0ge307Ci0gICAgICAgIHRoaXMubWFwUmVzb3VyY2VDb29raWVzKGRvbWFpblRvUmVzb3VyY2Vz
TWFwLCBhbGxDb29raWVzLCBjb2xsZWN0b3JDYWxsYmFjay5iaW5kKHRoaXMpKTsKLQotICAgICAg
ICBmb3IgKHZhciByZXF1ZXN0RG9tYWluIGluIGNvb2tpZXNQZXJSZXNvdXJjZURvbWFpbikgewot
ICAgICAgICAgICAgdmFyIGNvb2tpZXMgPSBjb29raWVzUGVyUmVzb3VyY2VEb21haW5bcmVxdWVz
dERvbWFpbl07Ci0gICAgICAgICAgICBzb3J0ZWRDb29raWVTaXplcy5wdXNoKHsKLSAgICAgICAg
ICAgICAgICBkb21haW46IHJlcXVlc3REb21haW4sCi0gICAgICAgICAgICAgICAgYXZnQ29va2ll
U2l6ZTogdGhpcy5fYXZlcmFnZShjb29raWVzKSwKLSAgICAgICAgICAgICAgICBtYXhDb29raWVT
aXplOiB0aGlzLl9tYXgoY29va2llcykKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAg
ICAgIHZhciBhdmdBbGxDb29raWVzU2l6ZSA9IHRoaXMuX2F2ZXJhZ2UoYWxsQ29va2llcyk7Ci0K
LSAgICAgICAgdmFyIGh1Z2VDb29raWVEb21haW5zID0gW107Ci0gICAgICAgIHNvcnRlZENvb2tp
ZVNpemVzLnNvcnQobWF4U2l6ZVNvcnRlcik7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxl
biA9IHNvcnRlZENvb2tpZVNpemVzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAg
ICB2YXIgbWF4Q29va2llU2l6ZSA9IHNvcnRlZENvb2tpZVNpemVzW2ldLm1heENvb2tpZVNpemU7
Ci0gICAgICAgICAgICBpZiAobWF4Q29va2llU2l6ZSA+IHRoaXMuX21heEJ5dGVzVGhyZXNob2xk
KQotICAgICAgICAgICAgICAgIGh1Z2VDb29raWVEb21haW5zLnB1c2goV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZVJlc3VsdC5yZXNvdXJjZURvbWFpbihzb3J0ZWRDb29raWVTaXplc1tpXS5kb21haW4p
ICsgIjogIiArIE51bWJlci5ieXRlc1RvU3RyaW5nKG1heENvb2tpZVNpemUpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBiaWdBdmdDb29raWVEb21haW5zID0gW107Ci0gICAgICAgIHNvcnRl
ZENvb2tpZVNpemVzLnNvcnQoYXZnU2l6ZVNvcnRlcik7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
LCBsZW4gPSBzb3J0ZWRDb29raWVTaXplcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAg
ICAgICAgdmFyIGRvbWFpbiA9IHNvcnRlZENvb2tpZVNpemVzW2ldLmRvbWFpbjsKLSAgICAgICAg
ICAgIHZhciBhdmdDb29raWVTaXplID0gc29ydGVkQ29va2llU2l6ZXNbaV0uYXZnQ29va2llU2l6
ZTsKLSAgICAgICAgICAgIGlmIChhdmdDb29raWVTaXplID4gdGhpcy5fYXZnQnl0ZXNUaHJlc2hv
bGQgJiYgYXZnQ29va2llU2l6ZSA8IHRoaXMuX21heEJ5dGVzVGhyZXNob2xkKQotICAgICAgICAg
ICAgICAgIGJpZ0F2Z0Nvb2tpZURvbWFpbnMucHVzaChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVz
dWx0LnJlc291cmNlRG9tYWluKGRvbWFpbikgKyAiOiAiICsgTnVtYmVyLmJ5dGVzVG9TdHJpbmco
YXZnQ29va2llU2l6ZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hZGRDaGlsZChTdHJp
bmcuc3ByaW50ZigiVGhlIGF2ZXJhZ2UgY29va2llIHNpemUgZm9yIGFsbCByZXF1ZXN0cyBvbiB0
aGlzIHBhZ2UgaXMgJXMiLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyhhdmdBbGxDb29raWVzU2l6ZSkp
KTsKLQotICAgICAgICB2YXIgbWVzc2FnZTsKLSAgICAgICAgaWYgKGh1Z2VDb29raWVEb21haW5z
Lmxlbmd0aCkgewotICAgICAgICAgICAgdmFyIGVudHJ5ID0gcmVzdWx0LmFkZENoaWxkKCJUaGUg
Zm9sbG93aW5nIGRvbWFpbnMgaGF2ZSBhIGNvb2tpZSBzaXplIGluIGV4Y2VzcyBvZiAxS0IuIFRo
aXMgaXMgaGFybWZ1bCBiZWNhdXNlIHJlcXVlc3RzIHdpdGggY29va2llcyBsYXJnZXIgdGhhbiAx
S0IgdHlwaWNhbGx5IGNhbm5vdCBmaXQgaW50byBhIHNpbmdsZSBuZXR3b3JrIHBhY2tldC4iLCB0
cnVlKTsKLSAgICAgICAgICAgIGVudHJ5LmFkZFVSTHMoaHVnZUNvb2tpZURvbWFpbnMpOwotICAg
ICAgICAgICAgcmVzdWx0LnZpb2xhdGlvbkNvdW50ICs9IGh1Z2VDb29raWVEb21haW5zLmxlbmd0
aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiaWdBdmdDb29raWVEb21haW5zLmxlbmd0aCkg
ewotICAgICAgICAgICAgdmFyIGVudHJ5ID0gcmVzdWx0LmFkZENoaWxkKFN0cmluZy5zcHJpbnRm
KCJUaGUgZm9sbG93aW5nIGRvbWFpbnMgaGF2ZSBhbiBhdmVyYWdlIGNvb2tpZSBzaXplIGluIGV4
Y2VzcyBvZiAlZCBieXRlcy4gUmVkdWNpbmcgdGhlIHNpemUgb2YgY29va2llcyBmb3IgdGhlc2Ug
ZG9tYWlucyBjYW4gcmVkdWNlIHRoZSB0aW1lIGl0IHRha2VzIHRvIHNlbmQgcmVxdWVzdHMuIiwg
dGhpcy5fYXZnQnl0ZXNUaHJlc2hvbGQpLCB0cnVlKTsKLSAgICAgICAgICAgIGVudHJ5LmFkZFVS
THMoYmlnQXZnQ29va2llRG9tYWlucyk7Ci0gICAgICAgICAgICByZXN1bHQudmlvbGF0aW9uQ291
bnQgKz0gYmlnQXZnQ29va2llRG9tYWlucy5sZW5ndGg7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVSdWxlQmFzZS5wcm90
b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Db29raWVSdWxlQmFzZX0KLSAqLwotV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZXMuU3RhdGljQ29va2llbGVzc1J1bGUgPSBmdW5jdGlvbihtaW5SZXNvdXJjZXMpCi17Ci0gICAg
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2UuY2FsbCh0aGlzLCAiaHR0cC1z
dGF0aWNjb29raWVsZXNzIiwgIlNlcnZlIHN0YXRpYyBjb250ZW50IGZyb20gYSBjb29raWVsZXNz
IGRvbWFpbiIpOwotICAgIHRoaXMuX21pblJlc291cmNlcyA9IG1pblJlc291cmNlczsKLX0KLQot
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3RhdGljQ29va2llbGVzc1J1bGUucHJvdG90eXBlID0g
ewotICAgIHByb2Nlc3NDb29raWVzOiBmdW5jdGlvbihhbGxDb29raWVzLCByZXF1ZXN0cywgcmVz
dWx0KQotICAgIHsKLSAgICAgICAgdmFyIGRvbWFpblRvUmVzb3VyY2VzTWFwID0gV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuZ2V0RG9tYWluVG9SZXNvdXJjZXNNYXAocmVxdWVzdHMsCi0gICAgICAg
ICAgICAgICAgW1dlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsCi0gICAgICAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLkltYWdlXSwKLSAgICAgICAgICAg
ICAgICB0cnVlKTsKLSAgICAgICAgdmFyIHRvdGFsU3RhdGljUmVzb3VyY2VzID0gMDsKLSAgICAg
ICAgZm9yICh2YXIgZG9tYWluIGluIGRvbWFpblRvUmVzb3VyY2VzTWFwKQotICAgICAgICAgICAg
dG90YWxTdGF0aWNSZXNvdXJjZXMgKz0gZG9tYWluVG9SZXNvdXJjZXNNYXBbZG9tYWluXS5sZW5n
dGg7Ci0gICAgICAgIGlmICh0b3RhbFN0YXRpY1Jlc291cmNlcyA8IHRoaXMuX21pblJlc291cmNl
cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIG1hdGNoaW5nUmVzb3VyY2VEYXRh
ID0ge307Ci0gICAgICAgIHRoaXMubWFwUmVzb3VyY2VDb29raWVzKGRvbWFpblRvUmVzb3VyY2Vz
TWFwLCBhbGxDb29raWVzLCB0aGlzLl9jb2xsZWN0b3JDYWxsYmFjay5iaW5kKHRoaXMsIG1hdGNo
aW5nUmVzb3VyY2VEYXRhKSk7Ci0KLSAgICAgICAgdmFyIGJhZFVybHMgPSBbXTsKLSAgICAgICAg
dmFyIGNvb2tpZUJ5dGVzID0gMDsKLSAgICAgICAgZm9yICh2YXIgdXJsIGluIG1hdGNoaW5nUmVz
b3VyY2VEYXRhKSB7Ci0gICAgICAgICAgICBiYWRVcmxzLnB1c2godXJsKTsKLSAgICAgICAgICAg
IGNvb2tpZUJ5dGVzICs9IG1hdGNoaW5nUmVzb3VyY2VEYXRhW3VybF0KLSAgICAgICAgfQotICAg
ICAgICBpZiAoYmFkVXJscy5sZW5ndGggPCB0aGlzLl9taW5SZXNvdXJjZXMpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGVudHJ5ID0gcmVzdWx0LmFkZENoaWxkKFN0cmluZy5z
cHJpbnRmKCIlcyBvZiBjb29raWVzIHdlcmUgc2VudCB3aXRoIHRoZSBmb2xsb3dpbmcgc3RhdGlj
IHJlc291cmNlcy4gU2VydmUgdGhlc2Ugc3RhdGljIHJlc291cmNlcyBmcm9tIGEgZG9tYWluIHRo
YXQgZG9lcyBub3Qgc2V0IGNvb2tpZXM6IiwgTnVtYmVyLmJ5dGVzVG9TdHJpbmcoY29va2llQnl0
ZXMpKSwgdHJ1ZSk7Ci0gICAgICAgIGVudHJ5LmFkZFVSTHMoYmFkVXJscyk7Ci0gICAgICAgIHJl
c3VsdC52aW9sYXRpb25Db3VudCA9IGJhZFVybHMubGVuZ3RoOwotICAgIH0sCi0KLSAgICBfY29s
bGVjdG9yQ2FsbGJhY2s6IGZ1bmN0aW9uKG1hdGNoaW5nUmVzb3VyY2VEYXRhLCByZXF1ZXN0LCBj
b29raWUpCi0gICAgewotICAgICAgICBtYXRjaGluZ1Jlc291cmNlRGF0YVtyZXF1ZXN0LnVybF0g
PSAobWF0Y2hpbmdSZXNvdXJjZURhdGFbcmVxdWVzdC51cmxdIHx8IDApICsgY29va2llLnNpemUo
KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29r
aWVSdWxlQmFzZS5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQXVkaXRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0F1ZGl0c1BhbmVsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
YTliY2JjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QXVkaXRzUGFuZWwuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlBhbmVsfQotICovCi1XZWJJbnNw
ZWN0b3IuQXVkaXRzUGFuZWwgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlBhbmVs
LmNhbGwodGhpcywgImF1ZGl0cyIpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygicGFu
ZWxFbmFibGVyVmlldy5jc3MiKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1MoImF1ZGl0
c1BhbmVsLmNzcyIpOwotCi0gICAgdGhpcy5jcmVhdGVTaWRlYmFyVmlld1dpdGhUcmVlKCk7Ci0g
ICAgdGhpcy5hdWRpdHNUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rp
b25UcmVlRWxlbWVudCgiIiwge30sIHRydWUpOwotICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5k
Q2hpbGQodGhpcy5hdWRpdHNUcmVlRWxlbWVudCk7Ci0gICAgdGhpcy5hdWRpdHNUcmVlRWxlbWVu
dC5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0KLSAgICB0aGlzLmF1
ZGl0c0l0ZW1UcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRzU2lkZWJhclRyZWVF
bGVtZW50KHRoaXMpOwotICAgIHRoaXMuYXVkaXRzVHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5hdWRpdHNJdGVtVHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy5hdWRpdFJlc3VsdHNUcmVlRWxl
bWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudChXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlJFU1VMVFMiKSwge30sIHRydWUpOwotICAgIHRoaXMuc2lkZWJhclRy
ZWUuYXBwZW5kQ2hpbGQodGhpcy5hdWRpdFJlc3VsdHNUcmVlRWxlbWVudCk7Ci0gICAgdGhpcy5h
dWRpdFJlc3VsdHNUcmVlRWxlbWVudC5leHBhbmQoKTsKLQotICAgIHRoaXMuY2xlYXJSZXN1bHRz
QnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDbGVhciBhdWRpdCByZXN1bHRzLiIpLCAiY2xlYXItc3RhdHVzLWJhci1pdGVtIik7
Ci0gICAgdGhpcy5jbGVhclJlc3VsdHNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0
aGlzLl9jbGVhckJ1dHRvbkNsaWNrZWQsIHRoaXMpOwotCi0gICAgdGhpcy52aWV3c0NvbnRhaW5l
ckVsZW1lbnQgPSB0aGlzLnNwbGl0Vmlldy5tYWluRWxlbWVudDsKLQotICAgIHRoaXMuX2NvbnN0
cnVjdENhdGVnb3JpZXMoKTsKLQotICAgIHRoaXMuX2F1ZGl0Q29udHJvbGxlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuQXVkaXRDb250cm9sbGVyKHRoaXMpOwotICAgIHRoaXMuX2xhdW5jaGVyVmlldyA9
IG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRMYXVuY2hlclZpZXcodGhpcy5fYXVkaXRDb250cm9sbGVy
KTsKLSAgICBmb3IgKHZhciBpZCBpbiB0aGlzLmNhdGVnb3JpZXNCeUlkKQotICAgICAgICB0aGlz
Ll9sYXVuY2hlclZpZXcuYWRkQ2F0ZWdvcnkodGhpcy5jYXRlZ29yaWVzQnlJZFtpZF0pOwotfQot
Ci1XZWJJbnNwZWN0b3IuQXVkaXRzUGFuZWwucHJvdG90eXBlID0gewotICAgIHN0YXR1c0Jhckl0
ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMuY2xlYXJSZXN1bHRz
QnV0dG9uLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHshT2Jq
ZWN0LjxzdHJpbmcsICFXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeT59Ci0gICAgICovCi0gICAg
Z2V0IGNhdGVnb3JpZXNCeUlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hdWRpdENh
dGVnb3JpZXNCeUlkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNw
ZWN0b3IuQXVkaXRDYXRlZ29yeX0gY2F0ZWdvcnkKLSAgICAgKi8KLSAgICBhZGRDYXRlZ29yeTog
ZnVuY3Rpb24oY2F0ZWdvcnkpCi0gICAgewotICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkW2Nh
dGVnb3J5LmlkXSA9IGNhdGVnb3J5OwotICAgICAgICB0aGlzLl9sYXVuY2hlclZpZXcuYWRkQ2F0
ZWdvcnkoY2F0ZWdvcnkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gaWQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeX0KLSAgICAg
Ki8KLSAgICBnZXRDYXRlZ29yeTogZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5jYXRlZ29yaWVzQnlJZFtpZF07Ci0gICAgfSwKLQotICAgIF9jb25zdHJ1Y3RDYXRlZ29y
aWVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9hdWRpdENhdGVnb3JpZXNCeUlk
ID0ge307Ci0gICAgICAgIGZvciAodmFyIGNhdGVnb3J5Q3RvcklEIGluIFdlYkluc3BlY3Rvci5B
dWRpdENhdGVnb3JpZXMpIHsKLSAgICAgICAgICAgIHZhciBhdWRpdENhdGVnb3J5ID0gbmV3IFdl
Ykluc3BlY3Rvci5BdWRpdENhdGVnb3JpZXNbY2F0ZWdvcnlDdG9ySURdKCk7Ci0gICAgICAgICAg
ICBhdWRpdENhdGVnb3J5Ll9pZCA9IGNhdGVnb3J5Q3RvcklEOwotICAgICAgICAgICAgdGhpcy5j
YXRlZ29yaWVzQnlJZFtjYXRlZ29yeUN0b3JJRF0gPSBhdWRpdENhdGVnb3J5OwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYWluUmVzb3VyY2VV
UkwKLSAgICAgKiBAcGFyYW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5UmVz
dWx0Pn0gcmVzdWx0cwotICAgICAqLwotICAgIGF1ZGl0RmluaXNoZWRDYWxsYmFjazogZnVuY3Rp
b24obWFpblJlc291cmNlVVJMLCByZXN1bHRzKQotICAgIHsKLSAgICAgICAgdmFyIGNoaWxkcmVu
ID0gdGhpcy5hdWRpdFJlc3VsdHNUcmVlRWxlbWVudC5jaGlsZHJlbjsKLSAgICAgICAgdmFyIG9y
ZGluYWwgPSAxOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubWFpblJlc291cmNlVVJMID09PSBt
YWluUmVzb3VyY2VVUkwpCi0gICAgICAgICAgICAgICAgb3JkaW5hbCsrOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIHJlc3VsdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5BdWRpdFJl
c3VsdFNpZGViYXJUcmVlRWxlbWVudCh0aGlzLCByZXN1bHRzLCBtYWluUmVzb3VyY2VVUkwsIG9y
ZGluYWwpOwotICAgICAgICB0aGlzLmF1ZGl0UmVzdWx0c1RyZWVFbGVtZW50LmFwcGVuZENoaWxk
KHJlc3VsdFRyZWVFbGVtZW50KTsKLSAgICAgICAgcmVzdWx0VHJlZUVsZW1lbnQucmV2ZWFsQW5k
U2VsZWN0KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IUFycmF5LjwhV2Vi
SW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnlSZXN1bHQ+fSBjYXRlZ29yeVJlc3VsdHMKLSAgICAgKi8K
LSAgICBzaG93UmVzdWx0czogZnVuY3Rpb24oY2F0ZWdvcnlSZXN1bHRzKQotICAgIHsKLSAgICAg
ICAgaWYgKCFjYXRlZ29yeVJlc3VsdHMuX3Jlc3VsdFZpZXcpCi0gICAgICAgICAgICBjYXRlZ29y
eVJlc3VsdHMuX3Jlc3VsdFZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UmVzdWx0Vmlldyhj
YXRlZ29yeVJlc3VsdHMpOwotCi0gICAgICAgIHRoaXMudmlzaWJsZVZpZXcgPSBjYXRlZ29yeVJl
c3VsdHMuX3Jlc3VsdFZpZXc7Ci0gICAgfSwKLQotICAgIHNob3dMYXVuY2hlclZpZXc6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMudmlzaWJsZVZpZXcgPSB0aGlzLl9sYXVuY2hlclZp
ZXc7Ci0gICAgfSwKLQotICAgIGdldCB2aXNpYmxlVmlldygpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fdmlzaWJsZVZpZXc7Ci0gICAgfSwKLQotICAgIHNldCB2aXNpYmxlVmlldyh4KQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3Zpc2libGVWaWV3ID09PSB4KQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLl92aXNpYmxlVmlldykKLSAgICAgICAgICAgIHRo
aXMuX3Zpc2libGVWaWV3LmRldGFjaCgpOwotCi0gICAgICAgIHRoaXMuX3Zpc2libGVWaWV3ID0g
eDsKLQotICAgICAgICBpZiAoeCkKLSAgICAgICAgICAgIHguc2hvdyh0aGlzLnZpZXdzQ29udGFp
bmVyRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLndhc1Nob3duLmNhbGwodGhpcyk7
Ci0gICAgICAgIGlmICghdGhpcy5fdmlzaWJsZVZpZXcpCi0gICAgICAgICAgICB0aGlzLmF1ZGl0
c0l0ZW1UcmVlRWxlbWVudC5zZWxlY3QoKTsKLSAgICB9LAotCi0gICAgX2NsZWFyQnV0dG9uQ2xp
Y2tlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5hdWRpdHNJdGVtVHJlZUVsZW1l
bnQucmV2ZWFsQW5kU2VsZWN0KCk7Ci0gICAgICAgIHRoaXMuYXVkaXRSZXN1bHRzVHJlZUVsZW1l
bnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuUGFuZWwucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0g
e3N0cmluZ30gZGlzcGxheU5hbWUKLSAqLwotV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnkgPSBm
dW5jdGlvbihkaXNwbGF5TmFtZSkKLXsKLSAgICB0aGlzLl9kaXNwbGF5TmFtZSA9IGRpc3BsYXlO
YW1lOwotICAgIHRoaXMuX3J1bGVzID0gW107Ci19Ci0KLVdlYkluc3BlY3Rvci5BdWRpdENhdGVn
b3J5LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAg
ICovCi0gICAgZ2V0IGlkKCkKLSAgICB7Ci0gICAgICAgIC8vIHRoaXMuX2lkIHZhbHVlIGlzIGlu
amVjdGVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lLgotICAgICAgICByZXR1cm4gdGhpcy5faWQ7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBn
ZXQgZGlzcGxheU5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlOYW1l
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlfSBydWxlCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZlcml0
eX0gc2V2ZXJpdHkKLSAgICAgKi8KLSAgICBhZGRSdWxlOiBmdW5jdGlvbihydWxlLCBzZXZlcml0
eSkKLSAgICB7Ci0gICAgICAgIHJ1bGUuc2V2ZXJpdHkgPSBzZXZlcml0eTsKLSAgICAgICAgdGhp
cy5fcnVsZXMucHVzaChydWxlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsh
QXJyYXkuPCFXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3Q+fSByZXF1ZXN0cwotICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdCl9IHJ1bGVSZXN1bHRD
YWxsYmFjawotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2F0ZWdvcnlEb25lQ2FsbGJhY2sK
LSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9IHByb2dyZXNzCi0gICAgICov
Ci0gICAgcnVuOiBmdW5jdGlvbihyZXF1ZXN0cywgcnVsZVJlc3VsdENhbGxiYWNrLCBjYXRlZ29y
eURvbmVDYWxsYmFjaywgcHJvZ3Jlc3MpCi0gICAgewotICAgICAgICB0aGlzLl9lbnN1cmVJbml0
aWFsaXplZCgpOwotICAgICAgICB2YXIgcmVtYWluaW5nUnVsZXNDb3VudCA9IHRoaXMuX3J1bGVz
Lmxlbmd0aDsKLSAgICAgICAgcHJvZ3Jlc3Muc2V0VG90YWxXb3JrKHJlbWFpbmluZ1J1bGVzQ291
bnQpOwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFja1dyYXBwZXIocmVzdWx0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBydWxlUmVzdWx0Q2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIHBy
b2dyZXNzLndvcmtlZCgpOwotICAgICAgICAgICAgaWYgKCEtLXJlbWFpbmluZ1J1bGVzQ291bnQp
Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnlEb25lQ2FsbGJhY2soKTsKLSAgICAgICAgfQotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3J1bGVzLmxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgdGhpcy5fcnVsZXNbaV0ucnVuKHJlcXVlc3RzLCBjYWxsYmFja1dyYXBwZXIsIHByb2dy
ZXNzKTsKLSAgICB9LAotCi0gICAgX2Vuc3VyZUluaXRpYWxpemVkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICBpZiAoImlu
aXRpYWxpemUiIGluIHRoaXMpCi0gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7Ci0g
ICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAqIEBwYXJh
bSB7c3RyaW5nfSBkaXNwbGF5TmFtZQotICovCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlID0gZnVu
Y3Rpb24oaWQsIGRpc3BsYXlOYW1lKQotewotICAgIHRoaXMuX2lkID0gaWQ7Ci0gICAgdGhpcy5f
ZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTsKLX0KLQotLyoqCi0gKiBAZW51bSB7c3RyaW5nfQot
ICovCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlLlNldmVyaXR5ID0gewotICAgIEluZm86ICJpbmZv
IiwKLSAgICBXYXJuaW5nOiAid2FybmluZyIsCi0gICAgU2V2ZXJlOiAic2V2ZXJlIgotfQotCi0v
KioKLSAqIEB0eXBlIHtPYmplY3QuPFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuU2V2ZXJpdHksIG51
bWJlcj59Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuU2V2ZXJpdHlPcmRlciA9IHsKLSAg
ICAiaW5mbyI6IDMsCi0gICAgIndhcm5pbmciOiAyLAotICAgICJzZXZlcmUiOiAxCi19Ci0KLVdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGUucHJvdG90eXBlID0gewotICAgIGdldCBpZCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5faWQ7Ci0gICAgfSwKLQotICAgIGdldCBkaXNwbGF5TmFtZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheU5hbWU7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5TZXZlcml0eX0gc2V2
ZXJpdHkKLSAgICAgKi8KLSAgICBzZXQgc2V2ZXJpdHkoc2V2ZXJpdHkpCi0gICAgewotICAgICAg
ICB0aGlzLl9zZXZlcml0eSA9IHNldmVyaXR5OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0g
ICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0KX0gY2Fs
bGJhY2sKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9IHByb2dyZXNzCi0g
ICAgICovCi0gICAgcnVuOiBmdW5jdGlvbihyZXF1ZXN0cywgY2FsbGJhY2ssIHByb2dyZXNzKQot
ICAgIHsKLSAgICAgICAgaWYgKHByb2dyZXNzLmlzQ2FuY2VsZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVS
ZXN1bHQodGhpcy5kaXNwbGF5TmFtZSk7Ci0gICAgICAgIHJlc3VsdC5zZXZlcml0eSA9IHRoaXMu
X3NldmVyaXR5OwotICAgICAgICB0aGlzLmRvUnVuKHJlcXVlc3RzLCByZXN1bHQsIGNhbGxiYWNr
LCBwcm9ncmVzcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0fSByZXN1bHQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9u
KFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQpfSBjYWxsYmFjawotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlByb2dyZXNzfSBwcm9ncmVzcwotICAgICAqLwotICAgIGRvUnVuOiBmdW5j
dGlvbihyZXF1ZXN0cywgcmVzdWx0LCBjYWxsYmFjaywgcHJvZ3Jlc3MpCi0gICAgewotICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoImRvUnVuKCkgbm90IGltcGxlbWVudGVkIik7Ci0gICAgfQotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0
ZWdvcnl9IGNhdGVnb3J5Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5UmVzdWx0ID0g
ZnVuY3Rpb24oY2F0ZWdvcnkpCi17Ci0gICAgdGhpcy50aXRsZSA9IGNhdGVnb3J5LmRpc3BsYXlO
YW1lOwotICAgIHRoaXMucnVsZVJlc3VsdHMgPSBbXTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0
Q2F0ZWdvcnlSZXN1bHQucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdl
Ykluc3BlY3Rvci5BdWRpdENhdGVnb3J5UmVzdWx0fSBydWxlUmVzdWx0Ci0gICAgICovCi0gICAg
YWRkUnVsZVJlc3VsdDogZnVuY3Rpb24ocnVsZVJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
cnVsZVJlc3VsdHMucHVzaChydWxlUmVzdWx0KTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0geyhzdHJpbmd8Ym9vbGVhbnxudW1iZXJ8T2JqZWN0KX0gdmFsdWUK
LSAqIEBwYXJhbSB7Ym9vbGVhbj19IGV4cGFuZGVkCi0gKiBAcGFyYW0ge3N0cmluZz19IGNsYXNz
TmFtZQotICovCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0ID0gZnVuY3Rpb24odmFsdWUs
IGV4cGFuZGVkLCBjbGFzc05hbWUpCi17Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgIHRo
aXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgIHRoaXMuZXhwYW5kZWQgPSBleHBhbmRlZDsK
LSAgICB0aGlzLnZpb2xhdGlvbkNvdW50ID0gMDsKLSAgICB0aGlzLl9mb3JtYXR0ZXJzID0gewot
ICAgICAgICByOiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LmxpbmtpZnlEaXNwbGF5TmFt
ZQotICAgIH07Ci0gICAgdmFyIHN0YW5kYXJkRm9ybWF0dGVycyA9IE9iamVjdC5rZXlzKFN0cmlu
Zy5zdGFuZGFyZEZvcm1hdHRlcnMpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhbmRhcmRG
b3JtYXR0ZXJzLmxlbmd0aDsgKytpKQotICAgICAgICB0aGlzLl9mb3JtYXR0ZXJzW3N0YW5kYXJk
Rm9ybWF0dGVyc1tpXV0gPSBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzW3N0YW5kYXJkRm9ybWF0
dGVyc1tpXV07Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IHVybAotICogQHJldHVybiB7
IUVsZW1lbnR9Ci0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQubGlua2lmeURpc3Bs
YXlOYW1lID0gZnVuY3Rpb24odXJsKQotewotICAgIHJldHVybiBXZWJJbnNwZWN0b3IubGlua2lm
eVVSTEFzTm9kZSh1cmwsIFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh1cmwpKTsKLX0K
LQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5yZXNvdXJjZURvbWFpbiA9IGZ1bmN0aW9u
KGRvbWFpbikKLXsKLSAgICByZXR1cm4gZG9tYWluIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
W2VtcHR5IGRvbWFpbl0iKTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHsoc3RyaW5nfGJvb2xlYW58bnVtYmVy
fE9iamVjdCl9IHZhbHVlCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gZXhwYW5kZWQKLSAgICAg
KiBAcGFyYW0ge3N0cmluZz19IGNsYXNzTmFtZQotICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlUmVzdWx0fQotICAgICAqLwotICAgIGFkZENoaWxkOiBmdW5jdGlvbih2YWx1
ZSwgZXhwYW5kZWQsIGNsYXNzTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5jaGlsZHJl
bikKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKLSAgICAgICAgdmFyIGVudHJ5ID0g
bmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQodmFsdWUsIGV4cGFuZGVkLCBjbGFzc05h
bWUpOwotICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goZW50cnkpOwotICAgICAgICByZXR1cm4g
ZW50cnk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAg
ICAgKi8KLSAgICBhZGRVUkw6IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWRk
Q2hpbGQoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5saW5raWZ5RGlzcGxheU5hbWUodXJs
KSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSB1
cmxzCi0gICAgICovCi0gICAgYWRkVVJMczogZnVuY3Rpb24odXJscykKLSAgICB7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMu
YWRkVVJMKHVybHNbaV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gc25pcHBldAotICAgICAqLwotICAgIGFkZFNuaXBwZXQ6IGZ1bmN0aW9uKHNuaXBwZXQpCi0g
ICAgewotICAgICAgICB0aGlzLmFkZENoaWxkKHNuaXBwZXQsIGZhbHNlLCAic291cmNlLWNvZGUi
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdAotICAg
ICAqIEBwYXJhbSB7Li4uKn0gdmFyYXJnCi0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVSZXN1bHR9Ci0gICAgICovCi0gICAgYWRkRm9ybWF0dGVkOiBmdW5jdGlvbihmb3Jt
YXQsIHZhcmFyZykKLSAgICB7Ci0gICAgICAgIHZhciBzdWJzdGl0dXRpb25zID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICAgICAgdmFyIGZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotCi0gICAgICAgIGZ1bmN0aW9uIGFw
cGVuZChhLCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgTm9k
ZSkpCi0gICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIpOwotICAg
ICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKLSAgICAgICAgICAgIHJldHVybiBhOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIGZvcm1hdHRlZFJlc3VsdCA9IFN0cmluZy5mb3JtYXQoZm9ybWF0
LCBzdWJzdGl0dXRpb25zLCB0aGlzLl9mb3JtYXR0ZXJzLCBmcmFnbWVudCwgYXBwZW5kKS5mb3Jt
YXR0ZWRSZXN1bHQ7Ci0gICAgICAgIGlmIChmb3JtYXR0ZWRSZXN1bHQgaW5zdGFuY2VvZiBOb2Rl
KQotICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0Lm5vcm1hbGl6ZSgpOwotICAgICAgICByZXR1
cm4gdGhpcy5hZGRDaGlsZChmb3JtYXR0ZWRSZXN1bHQpOwotICAgIH0KLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50
fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQXVkaXRzUGFuZWx9IHBhbmVsCi0gKi8KLVdlYklu
c3BlY3Rvci5BdWRpdHNTaWRlYmFyVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihwYW5lbCkKLXsKLSAg
ICB0aGlzLl9wYW5lbCA9IHBhbmVsOwotICAgIHRoaXMuc21hbGwgPSBmYWxzZTsKLSAgICBXZWJJ
bnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LmNhbGwodGhpcywgImF1ZGl0cy1zaWRlYmFyLXRy
ZWUtaXRlbSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQXVkaXRzIiksICIiLCBudWxsLCBmYWxz
ZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5BdWRpdHNTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBl
ID0gewotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0
b3IuU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaC5jYWxsKHRoaXMpOwotICAg
IH0sCi0KLSAgICBvbnNlbGVjdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFu
ZWwuc2hvd0xhdW5jaGVyVmlldygpOwotICAgIH0sCi0KLSAgICBnZXQgc2VsZWN0YWJsZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgcmVmcmVzaDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5yZWZyZXNoVGl0bGVzKCk7Ci0gICAgfSwKLQotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU2lkZWJh
clRyZWVFbGVtZW50fQotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkF1ZGl0c1BhbmVsfSBwYW5l
bAotICogQHBhcmFtIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeVJlc3VsdD59
IHJlc3VsdHMKLSAqIEBwYXJhbSB7c3RyaW5nfSBtYWluUmVzb3VyY2VVUkwKLSAqIEBwYXJhbSB7
bnVtYmVyfSBvcmRpbmFsCi0gKi8KLVdlYkluc3BlY3Rvci5BdWRpdFJlc3VsdFNpZGViYXJUcmVl
RWxlbWVudCA9IGZ1bmN0aW9uKHBhbmVsLCByZXN1bHRzLCBtYWluUmVzb3VyY2VVUkwsIG9yZGlu
YWwpCi17Ci0gICAgdGhpcy5fcGFuZWwgPSBwYW5lbDsKLSAgICB0aGlzLnJlc3VsdHMgPSByZXN1
bHRzOwotICAgIHRoaXMubWFpblJlc291cmNlVVJMID0gbWFpblJlc291cmNlVVJMOwotICAgIFdl
Ykluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAiYXVkaXQtcmVzdWx0LXNp
ZGViYXItdHJlZS1pdGVtIiwgU3RyaW5nLnNwcmludGYoIiVzICglZCkiLCBtYWluUmVzb3VyY2VV
UkwsIG9yZGluYWwpLCAiIiwge30sIGZhbHNlKTsKLX0KLQotV2ViSW5zcGVjdG9yLkF1ZGl0UmVz
dWx0U2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbnNlbGVjdDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFuZWwuc2hvd1Jlc3VsdHModGhpcy5yZXN1bHRz
KTsKLSAgICB9LAotCi0gICAgZ2V0IHNlbGVjdGFibGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVl
RWxlbWVudC5wcm90b3R5cGUKLX0KLQotLy8gQ29udHJpYnV0ZWQgYXVkaXQgcnVsZXMgc2hvdWxk
IGdvIGludG8gdGhpcyBuYW1lc3BhY2UuCi1XZWJJbnNwZWN0b3IuQXVkaXRSdWxlcyA9IHt9Owot
Ci0vKioKLSAqIENvbnRyaWJ1dGVkIGF1ZGl0IGNhdGVnb3JpZXMgc2hvdWxkIGdvIGludG8gdGhp
cyBuYW1lc3BhY2UuCi0gKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uKG5ldzpXZWJJ
bnNwZWN0b3IuQXVkaXRDYXRlZ29yeSk+fQotICovCi1XZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29y
aWVzID0ge307Ci0KLWltcG9ydFNjcmlwdCgiQXVkaXRDYXRlZ29yaWVzLmpzIik7Ci1pbXBvcnRT
Y3JpcHQoIkF1ZGl0Q29udHJvbGxlci5qcyIpOwotaW1wb3J0U2NyaXB0KCJBdWRpdEZvcm1hdHRl
cnMuanMiKTsKLWltcG9ydFNjcmlwdCgiQXVkaXRMYXVuY2hlclZpZXcuanMiKTsKLWltcG9ydFNj
cmlwdCgiQXVkaXRSZXN1bHRWaWV3LmpzIik7Ci1pbXBvcnRTY3JpcHQoIkF1ZGl0UnVsZXMuanMi
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQm90dG9t
VXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDEzZDE1OGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwyOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAyODAgTm9ydGggSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBCb3R0b20gVXAgUHJvZmlsaW5nIHNob3dzIHRoZSBlbnRpcmUgY2FsbHN0
YWNrIGJhY2t3YXJkczoKLS8vIFRoZSByb290IG5vZGUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBl
YWNoIGluZGl2aWR1YWwgZnVuY3Rpb24gY2FsbGVkLCBhbmQgZWFjaCBjaGlsZCBvZiB0aGF0IG5v
ZGUgcmVwcmVzZW50cwotLy8gYSByZXZlcnNlLWNhbGxzdGFjayBzaG93aW5nIGhvdyBtYW55IG9m
IHRob3NlIGNhbGxzIGNhbWUgZnJvbSBpdC4gU28sIHVubGlrZSB0b3AtZG93biwgdGhlIHN0YXRp
c3RpY3MgaW4KLS8vIGVhY2ggY2hpbGQgc3RpbGwgcmVwcmVzZW50IHRoZSByb290IG5vZGUuIFdl
IGhhdmUgdG8gYmUgcGFydGljdWxhcmx5IGNhcmVmdWwgb2YgcmVjdXJzaW9uIHdpdGggdGhpcyBt
b2RlCi0vLyBiZWNhdXNlIGEgcm9vdCBub2RlIGNhbiByZXByZXNlbnQgaXRzZWxmIEFORCBhbiBh
bmNlc3Rvci4KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuUHJvZmlsZURhdGFHcmlkTm9kZX0KLSAqIEBwYXJhbSB7IVByb2ZpbGVyQWdlbnQuQ1BVUHJv
ZmlsZU5vZGV9IHByb2ZpbGVOb2RlCi0gKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuVG9wRG93blBy
b2ZpbGVEYXRhR3JpZFRyZWV9IG93bmluZ1RyZWUKLSAqLwotV2ViSW5zcGVjdG9yLkJvdHRvbVVw
UHJvZmlsZURhdGFHcmlkTm9kZSA9IGZ1bmN0aW9uKHByb2ZpbGVOb2RlLCBvd25pbmdUcmVlKQot
ewotICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLmNhbGwodGhpcywgcHJvZmls
ZU5vZGUsIG93bmluZ1RyZWUsIHRoaXMuX3dpbGxIYXZlQ2hpbGRyZW4ocHJvZmlsZU5vZGUpKTsK
LQotICAgIHRoaXMuX3JlbWFpbmluZ05vZGVJbmZvcyA9IFtdOwotfQotCi1XZWJJbnNwZWN0b3Iu
Qm90dG9tVXBQcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAg
KiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZX0gcHJvZmlsZURhdGFH
cmlkTm9kZQotICAgICAqLwotICAgIF90YWtlUHJvcGVydGllc0Zyb21Qcm9maWxlRGF0YUdyaWRO
b2RlOiBmdW5jdGlvbihwcm9maWxlRGF0YUdyaWROb2RlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
c2F2ZSgpOwotCi0gICAgICAgIHRoaXMuc2VsZlRpbWUgPSBwcm9maWxlRGF0YUdyaWROb2RlLnNl
bGZUaW1lOwotICAgICAgICB0aGlzLnRvdGFsVGltZSA9IHByb2ZpbGVEYXRhR3JpZE5vZGUudG90
YWxUaW1lOwotICAgICAgICB0aGlzLm51bWJlck9mQ2FsbHMgPSBwcm9maWxlRGF0YUdyaWROb2Rl
Lm51bWJlck9mQ2FsbHM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIFdoZW4gZm9jdXNpbmcs
IHdlIGtlZXAganVzdCB0aGUgbWVtYmVycyBvZiB0aGUgY2FsbHN0YWNrLgotICAgICAqIEBwYXJh
bSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlfSBjaGlsZAotICAgICAqLwotICAg
IF9rZWVwT25seUNoaWxkOiBmdW5jdGlvbihjaGlsZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nh
dmUoKTsKLQotICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuYXBw
ZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0sCi0KLSAgICBfZXhjbHVkZTogZnVuY3Rpb24oYUNhbGxV
SUQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmVtYWluaW5nTm9kZUluZm9zKQotICAgICAg
ICAgICAgdGhpcy5wb3B1bGF0ZSgpOwotCi0gICAgICAgIHRoaXMuX3NhdmUoKTsKLQotICAgICAg
ICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOwotICAgICAgICB2YXIgaW5kZXggPSB0aGlz
LmNoaWxkcmVuLmxlbmd0aDsKLQotICAgICAgICB3aGlsZSAoaW5kZXgtLSkKLSAgICAgICAgICAg
IGNoaWxkcmVuW2luZGV4XS5fZXhjbHVkZShhQ2FsbFVJRCk7Ci0KLSAgICAgICAgdmFyIGNoaWxk
ID0gdGhpcy5jaGlsZHJlbkJ5Q2FsbFVJRFthQ2FsbFVJRF07Ci0KLSAgICAgICAgaWYgKGNoaWxk
KQotICAgICAgICAgICAgdGhpcy5fbWVyZ2UoY2hpbGQsIHRydWUpOwotICAgIH0sCi0KLSAgICBf
cmVzdG9yZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVE
YXRhR3JpZE5vZGUucHJvdG90eXBlLl9yZXN0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLmNo
aWxkcmVuLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSB0aGlzLl93aWxs
SGF2ZUNoaWxkcmVuKHRoaXMucHJvZmlsZU5vZGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZX0gY2hpbGQKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZEFic29yYgotICAgICAqLwotICAgIF9tZXJnZTogZnVu
Y3Rpb24oY2hpbGQsIHNob3VsZEFic29yYikKLSAgICB7Ci0gICAgICAgIHRoaXMuc2VsZlRpbWUg
LT0gY2hpbGQuc2VsZlRpbWU7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3Jp
ZE5vZGUucHJvdG90eXBlLl9tZXJnZS5jYWxsKHRoaXMsIGNoaWxkLCBzaG91bGRBYnNvcmIpOwot
ICAgIH0sCi0KLSAgICBfc2hhcmVkUG9wdWxhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHZhciByZW1haW5pbmdOb2RlSW5mb3MgPSB0aGlzLl9yZW1haW5pbmdOb2RlSW5mb3M7Ci0gICAg
ICAgIHZhciBjb3VudCA9IHJlbWFpbmluZ05vZGVJbmZvcy5sZW5ndGg7Ci0KLSAgICAgICAgZm9y
ICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB2
YXIgbm9kZUluZm8gPSByZW1haW5pbmdOb2RlSW5mb3NbaW5kZXhdOwotICAgICAgICAgICAgdmFy
IGFuY2VzdG9yID0gbm9kZUluZm8uYW5jZXN0b3I7Ci0gICAgICAgICAgICB2YXIgZm9jdXNOb2Rl
ID0gbm9kZUluZm8uZm9jdXNOb2RlOwotICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5k
Q2hpbGQoYW5jZXN0b3IpOwotCi0gICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhp
cyBjaGlsZCwgdGhlbiBtZXJnZSB0aGUgZGF0YSB0b2dldGhlci4KLSAgICAgICAgICAgIGlmIChj
aGlsZCkgewotICAgICAgICAgICAgICAgIHZhciB0b3RhbFRpbWVBY2NvdW50ZWRGb3IgPSBub2Rl
SW5mby50b3RhbFRpbWVBY2NvdW50ZWRGb3I7Ci0KLSAgICAgICAgICAgICAgICBjaGlsZC5zZWxm
VGltZSArPSBmb2N1c05vZGUuc2VsZlRpbWU7Ci0gICAgICAgICAgICAgICAgY2hpbGQubnVtYmVy
T2ZDYWxscyArPSBmb2N1c05vZGUubnVtYmVyT2ZDYWxsczsKLQotICAgICAgICAgICAgICAgIGlm
ICghdG90YWxUaW1lQWNjb3VudGVkRm9yKQotICAgICAgICAgICAgICAgICAgICBjaGlsZC50b3Rh
bFRpbWUgKz0gZm9jdXNOb2RlLnRvdGFsVGltZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgbm90LCBhZGQgaXQgYXMgYSB0cnVlIGFuY2VzdG9yLgotICAgICAg
ICAgICAgICAgIC8vIEluIGhlYXZ5IG1vZGUsIHdlIHRha2Ugb3VyIHZpc3VhbCBpZGVudGl0eSBm
cm9tIGFuY2VzdG9yIG5vZGUuLi4KLSAgICAgICAgICAgICAgICBjaGlsZCA9IG5ldyBXZWJJbnNw
ZWN0b3IuQm90dG9tVXBQcm9maWxlRGF0YUdyaWROb2RlKGFuY2VzdG9yLCB0aGlzLnRyZWUpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKGFuY2VzdG9yICE9PSBmb2N1c05vZGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYnV0IHRoZSBhY3R1YWwgc3RhdGlzdGljcyBmcm9tIHRoZSAicm9vdCIg
bm9kZSAoYm90dG9tIG9mIHRoZSBjYWxsc3RhY2spLgotICAgICAgICAgICAgICAgICAgICBjaGls
ZC5zZWxmVGltZSA9IGZvY3VzTm9kZS5zZWxmVGltZTsKLSAgICAgICAgICAgICAgICAgICAgY2hp
bGQudG90YWxUaW1lID0gZm9jdXNOb2RlLnRvdGFsVGltZTsKLSAgICAgICAgICAgICAgICAgICAg
Y2hpbGQubnVtYmVyT2ZDYWxscyA9IGZvY3VzTm9kZS5udW1iZXJPZkNhbGxzOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcGFyZW50ID0gYW5jZXN0b3IucGFyZW50Owot
ICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50KSB7Ci0gICAgICAgICAgICAg
ICAgbm9kZUluZm8uYW5jZXN0b3IgPSBwYXJlbnQ7Ci0gICAgICAgICAgICAgICAgY2hpbGQuX3Jl
bWFpbmluZ05vZGVJbmZvcy5wdXNoKG5vZGVJbmZvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1haW5pbmdOb2RlSW5mb3M7Ci0gICAgfSwKLQot
ICAgIF93aWxsSGF2ZUNoaWxkcmVuOiBmdW5jdGlvbihwcm9maWxlTm9kZSkKLSAgICB7Ci0gICAg
ICAgIC8vIEluIGJvdHRvbSB1cCBtb2RlLCBvdXIgcGFyZW50cyBhcmUgb3VyIGNoaWxkcmVuIHNp
bmNlIHdlIGRpc3BsYXkgYW4gaW52ZXJ0ZWQgdHJlZS4KLSAgICAgICAgLy8gSG93ZXZlciwgd2Ug
ZG9uJ3Qgd2FudCB0byBzaG93IHRoZSB2ZXJ5IHRvcCBwYXJlbnQgc2luY2UgaXQgaXMgcmVkdW5k
YW50LgotICAgICAgICByZXR1cm4gISEocHJvZmlsZU5vZGUucGFyZW50ICYmIHByb2ZpbGVOb2Rl
LnBhcmVudC5wYXJlbnQpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Q
cm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWRUcmVlfQotICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXd9IHByb2ZpbGVWaWV3Ci0gKiBAcGFyYW0ge1By
b2ZpbGVyQWdlbnQuQ1BVUHJvZmlsZU5vZGV9IHJvb3RQcm9maWxlTm9kZQotICovCi1XZWJJbnNw
ZWN0b3IuQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlID0gZnVuY3Rpb24ocHJvZmlsZVZpZXcs
IHJvb3RQcm9maWxlTm9kZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkVHJl
ZS5jYWxsKHRoaXMsIHByb2ZpbGVWaWV3LCByb290UHJvZmlsZU5vZGUpOwotCi0gICAgLy8gSXRl
cmF0ZSBlYWNoIG5vZGUgaW4gcHJlLW9yZGVyLgotICAgIHZhciBwcm9maWxlTm9kZVVJRHMgPSAw
OwotICAgIHZhciBwcm9maWxlTm9kZUdyb3VwcyA9IFtbXSwgW3Jvb3RQcm9maWxlTm9kZV1dOwot
ICAgIHZhciB2aXNpdGVkUHJvZmlsZU5vZGVzRm9yQ2FsbFVJRCA9IHt9OwotCi0gICAgdGhpcy5f
cmVtYWluaW5nTm9kZUluZm9zID0gW107Ci0KLSAgICBmb3IgKHZhciBwcm9maWxlTm9kZUdyb3Vw
SW5kZXggPSAwOyBwcm9maWxlTm9kZUdyb3VwSW5kZXggPCBwcm9maWxlTm9kZUdyb3Vwcy5sZW5n
dGg7ICsrcHJvZmlsZU5vZGVHcm91cEluZGV4KSB7Ci0gICAgICAgIHZhciBwYXJlbnRQcm9maWxl
Tm9kZXMgPSBwcm9maWxlTm9kZUdyb3Vwc1twcm9maWxlTm9kZUdyb3VwSW5kZXhdOwotICAgICAg
ICB2YXIgcHJvZmlsZU5vZGVzID0gcHJvZmlsZU5vZGVHcm91cHNbKytwcm9maWxlTm9kZUdyb3Vw
SW5kZXhdOwotICAgICAgICB2YXIgY291bnQgPSBwcm9maWxlTm9kZXMubGVuZ3RoOwotCi0gICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewotICAgICAg
ICAgICAgdmFyIHByb2ZpbGVOb2RlID0gcHJvZmlsZU5vZGVzW2luZGV4XTsKLQotICAgICAgICAg
ICAgaWYgKCFwcm9maWxlTm9kZS5VSUQpCi0gICAgICAgICAgICAgICAgcHJvZmlsZU5vZGUuVUlE
ID0gKytwcm9maWxlTm9kZVVJRHM7Ci0KLSAgICAgICAgICAgIGlmIChwcm9maWxlTm9kZS5oZWFk
ICYmIHByb2ZpbGVOb2RlICE9PSBwcm9maWxlTm9kZS5oZWFkKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIHRvdGFsIHRpbWUgb2YgdGhpcyBhbmNlc3RvciBpcyBhY2NvdW50ZWQgZm9yIGlmIHdl
J3JlIGluIGFueSBmb3JtIG9mIHJlY3Vyc2l2ZSBjeWNsZS4KLSAgICAgICAgICAgICAgICB2YXIg
dmlzaXRlZE5vZGVzID0gdmlzaXRlZFByb2ZpbGVOb2Rlc0ZvckNhbGxVSURbcHJvZmlsZU5vZGUu
Y2FsbFVJRF07Ci0gICAgICAgICAgICAgICAgdmFyIHRvdGFsVGltZUFjY291bnRlZEZvciA9IGZh
bHNlOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2aXNpdGVkTm9kZXMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmlzaXRlZE5vZGVzID0ge30KLSAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFBy
b2ZpbGVOb2Rlc0ZvckNhbGxVSURbcHJvZmlsZU5vZGUuY2FsbFVJRF0gPSB2aXNpdGVkTm9kZXM7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRv
dGFsIHRpbWUgZm9yIHRoaXMgbm9kZSBoYXMgYWxyZWFkeSBiZWVuIGFjY291bnRlZCBmb3IgaWZm
IG9uZSBvZiBpdCdzIHBhcmVudHMgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkLgotICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4gZG8gdGhpcyBjaGVjayBpbiB0aGlzIHN0eWxlIGJlY2F1c2Ug
d2UgYXJlIHRyYXZlcnNpbmcgdGhlIHRyZWUgaW4gcHJlLW9yZGVyLgotICAgICAgICAgICAgICAg
ICAgICB2YXIgcGFyZW50Q291bnQgPSBwYXJlbnRQcm9maWxlTm9kZXMubGVuZ3RoOwotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBwYXJlbnRJbmRleCA9IDA7IHBhcmVudEluZGV4IDwgcGFy
ZW50Q291bnQ7ICsrcGFyZW50SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
aXNpdGVkTm9kZXNbcGFyZW50UHJvZmlsZU5vZGVzW3BhcmVudEluZGV4XS5VSURdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxUaW1lQWNjb3VudGVkRm9yID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZpc2l0ZWROb2Rlc1twcm9maWxlTm9kZS5VSURdID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgICAgIHRoaXMuX3JlbWFpbmluZ05vZGVJbmZvcy5wdXNoKHsgYW5jZXN0b3I6cHJvZmlsZU5v
ZGUsIGZvY3VzTm9kZTpwcm9maWxlTm9kZSwgdG90YWxUaW1lQWNjb3VudGVkRm9yOnRvdGFsVGlt
ZUFjY291bnRlZEZvciB9KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNoaWxk
cmVuID0gcHJvZmlsZU5vZGUuY2hpbGRyZW47Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZU5vZGVHcm91cHMucHVzaChwYXJlbnRQcm9m
aWxlTm9kZXMuY29uY2F0KFtwcm9maWxlTm9kZV0pKQotICAgICAgICAgICAgICAgIHByb2ZpbGVO
b2RlR3JvdXBzLnB1c2goY2hpbGRyZW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gUG9wdWxhdGUgdGhlIHRvcCBsZXZlbCBub2Rlcy4KLSAgICB2YXIgYW55ID0g
LyoqIEB0eXBleyp9ICovKHRoaXMpOwotICAgIHZhciBub2RlID0gLyoqIEB0eXBle1dlYkluc3Bl
Y3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlfSAqLyhhbnkpOwotICAgIFdlYkluc3BlY3Rvci5Cb3R0
b21VcFByb2ZpbGVEYXRhR3JpZE5vZGUucHJvdG90eXBlLnBvcHVsYXRlLmNhbGwobm9kZSk7Ci0K
LSAgICByZXR1cm4gdGhpczsKLX0KLQotV2ViSW5zcGVjdG9yLkJvdHRvbVVwUHJvZmlsZURhdGFH
cmlkVHJlZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogV2hlbiBmb2N1c2luZywgd2Ug
a2VlcCB0aGUgZW50aXJlIGNhbGxzdGFjayB1cCB0byB0aGlzIGFuY2VzdG9yLgotICAgICAqIEBw
YXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlfSBwcm9maWxlRGF0YUdyaWRO
b2RlCi0gICAgICovCi0gICAgZm9jdXM6IGZ1bmN0aW9uKHByb2ZpbGVEYXRhR3JpZE5vZGUpCi0g
ICAgewotICAgICAgICBpZiAoIXByb2ZpbGVEYXRhR3JpZE5vZGUpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdGhpcy5fc2F2ZSgpOwotCi0gICAgICAgIHZhciBjdXJyZW50Tm9kZSA9
IHByb2ZpbGVEYXRhR3JpZE5vZGU7Ci0gICAgICAgIHZhciBmb2N1c05vZGUgPSBwcm9maWxlRGF0
YUdyaWROb2RlOwotCi0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5wYXJlbnQgJiYgKGN1cnJl
bnROb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZE5vZGUpKSB7Ci0g
ICAgICAgICAgICBjdXJyZW50Tm9kZS5fdGFrZVByb3BlcnRpZXNGcm9tUHJvZmlsZURhdGFHcmlk
Tm9kZShwcm9maWxlRGF0YUdyaWROb2RlKTsKLQotICAgICAgICAgICAgZm9jdXNOb2RlID0gY3Vy
cmVudE5vZGU7Ci0gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudDsK
LQotICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlBy
b2ZpbGVEYXRhR3JpZE5vZGUpCi0gICAgICAgICAgICAgICAgY3VycmVudE5vZGUuX2tlZXBPbmx5
Q2hpbGQoZm9jdXNOb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBb
Zm9jdXNOb2RlXTsKLSAgICAgICAgdGhpcy50b3RhbFRpbWUgPSBwcm9maWxlRGF0YUdyaWROb2Rl
LnRvdGFsVGltZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVj
dG9yLlByb2ZpbGVEYXRhR3JpZE5vZGV9IHByb2ZpbGVEYXRhR3JpZE5vZGUKLSAgICAgKi8KLSAg
ICBleGNsdWRlOiBmdW5jdGlvbihwcm9maWxlRGF0YUdyaWROb2RlKQotICAgIHsKLSAgICAgICAg
aWYgKCFwcm9maWxlRGF0YUdyaWROb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHRoaXMuX3NhdmUoKTsKLQotICAgICAgICB2YXIgZXhjbHVkZWRDYWxsVUlEID0gcHJvZmlsZURh
dGFHcmlkTm9kZS5jYWxsVUlEOwotICAgICAgICB2YXIgZXhjbHVkZWRUb3BMZXZlbENoaWxkID0g
dGhpcy5jaGlsZHJlbkJ5Q2FsbFVJRFtleGNsdWRlZENhbGxVSURdOwotCi0gICAgICAgIC8vIElm
IHdlIGhhdmUgYSB0b3AgbGV2ZWwgbm9kZSB0aGF0IGlzIGV4Y2x1ZGVkLCBnZXQgcmlkIG9mIGl0
IGNvbXBsZXRlbHkgKG5vdCBrZWVwaW5nIGNoaWxkcmVuKSwKLSAgICAgICAgLy8gc2luY2UgYm90
dG9tIHVwIGRhdGEgcmVsaWVzIGVudGlyZWx5IG9uIHRoZSByb290IG5vZGUuCi0gICAgICAgIGlm
IChleGNsdWRlZFRvcExldmVsQ2hpbGQpCi0gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnJlbW92
ZShleGNsdWRlZFRvcExldmVsQ2hpbGQpOwotCi0gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMu
Y2hpbGRyZW47Ci0gICAgICAgIHZhciBjb3VudCA9IGNoaWxkcmVuLmxlbmd0aDsKLQotICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCi0gICAgICAgICAg
ICBjaGlsZHJlbltpbmRleF0uX2V4Y2x1ZGUoZXhjbHVkZWRDYWxsVUlEKTsKLQotICAgICAgICBp
ZiAodGhpcy5sYXN0Q29tcGFyYXRvcikKLSAgICAgICAgICAgIHRoaXMuc29ydCh0aGlzLmxhc3RD
b21wYXJhdG9yLCB0cnVlKTsKLSAgICB9LAotCi0gICAgX3NoYXJlZFBvcHVsYXRlOiBXZWJJbnNw
ZWN0b3IuQm90dG9tVXBQcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fc2hhcmVkUG9wdWxh
dGUsCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWRUcmVlLnBy
b3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludE1hbmFnZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0
Nzg3OWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50TWFuYWdlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDY3MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuU2V0dGluZ30gYnJlYWtwb2ludFN0b3JhZ2UKLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWx9IGRlYnVnZ2VyTW9kZWwKLSAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLldvcmtzcGFjZX0gd29ya3NwYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlciA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRTdG9yYWdlLCBkZWJ1Z2dlck1vZGVsLCB3
b3Jrc3BhY2UpCi17Ci0gICAgdGhpcy5fc3RvcmFnZSA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIuU3RvcmFnZSh0aGlzLCBicmVha3BvaW50U3RvcmFnZSk7Ci0gICAgdGhpcy5f
ZGVidWdnZXJNb2RlbCA9IGRlYnVnZ2VyTW9kZWw7Ci0gICAgdGhpcy5fd29ya3NwYWNlID0gd29y
a3NwYWNlOwotCi0gICAgdGhpcy5fYnJlYWtwb2ludHMgPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5f
YnJlYWtwb2ludEZvckRlYnVnZ2VySWQgPSB7fTsKLSAgICB0aGlzLl9icmVha3BvaW50c0ZvclVJ
U291cmNlQ29kZSA9IG5ldyBNYXAoKTsKLSAgICB0aGlzLl9zb3VyY2VGaWxlc1dpdGhSZXN0b3Jl
ZEJyZWFrcG9pbnRzID0ge307Ci0KLSAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZl
ZCwgdGhpcy5fYnJlYWtwb2ludFJlc29sdmVkLCB0aGlzKTsKLSAgICB0aGlzLl93b3Jrc3BhY2Uu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuV29ya3NwYWNlLkV2ZW50cy5Qcm9qZWN0V2ls
bFJlc2V0LCB0aGlzLl9wcm9qZWN0V2lsbFJlc2V0LCB0aGlzKTsKLSAgICB0aGlzLl93b3Jrc3Bh
Y2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlUHJvdmlkZXIuRXZl
bnRzLlVJU291cmNlQ29kZUFkZGVkLCB0aGlzLl91aVNvdXJjZUNvZGVBZGRlZCwgdGhpcyk7Ci19
Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5FdmVudHMgPSB7Ci0gICAgQnJlYWtw
b2ludEFkZGVkOiAiYnJlYWtwb2ludC1hZGRlZCIsCi0gICAgQnJlYWtwb2ludFJlbW92ZWQ6ICJi
cmVha3BvaW50LXJlbW92ZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5z
b3VyY2VGaWxlSWQgPSBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi17Ci0gICAgaWYgKCF1aVNvdXJj
ZUNvZGUudXJsKQotICAgICAgICByZXR1cm4gIiI7Ci0gICAgdmFyIGRlb2JmdXNjYXRlZFByZWZp
eCA9IHVpU291cmNlQ29kZS5mb3JtYXR0ZWQoKSA/ICJkZW9iZnVzY2F0ZWQ6IiA6ICIiOwotICAg
IHJldHVybiBkZW9iZnVzY2F0ZWRQcmVmaXggKyB1aVNvdXJjZUNvZGUudXJpKCk7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAg
Ki8KLSAgICBfcmVzdG9yZUJyZWFrcG9pbnRzOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAg
ewotICAgICAgICB2YXIgc291cmNlRmlsZUlkID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnNvdXJjZUZpbGVJZCh1aVNvdXJjZUNvZGUpOwotICAgICAgICBpZiAoIXNvdXJjZUZpbGVJ
ZCB8fCB0aGlzLl9zb3VyY2VGaWxlc1dpdGhSZXN0b3JlZEJyZWFrcG9pbnRzW3NvdXJjZUZpbGVJ
ZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3NvdXJjZUZpbGVzV2l0aFJl
c3RvcmVkQnJlYWtwb2ludHNbc291cmNlRmlsZUlkXSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRXJh
c2UgcHJvdmlzaW9uYWwgYnJlYWtwb2ludHMgcHJpb3IgdG8gcmVzdG9yaW5nIHRoZW0uCi0gICAg
ICAgIGZvciAodmFyIGRlYnVnZ2VySWQgaW4gdGhpcy5fYnJlYWtwb2ludEZvckRlYnVnZ2VySWQp
IHsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludEZvckRlYnVn
Z2VySWRbZGVidWdnZXJJZF07Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5fc291cmNlRmls
ZUlkICE9PSBzb3VyY2VGaWxlSWQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBicmVha3BvaW50LnJlbW92ZSh0cnVlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9z
dG9yYWdlLl9yZXN0b3JlQnJlYWtwb2ludHModWlTb3VyY2VDb2RlKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0g
ICAgX3VpU291cmNlQ29kZUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZh
ciB1aVNvdXJjZUNvZGUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICov
IChldmVudC5kYXRhKTsKLSAgICAgICAgdGhpcy5fcmVzdG9yZUJyZWFrcG9pbnRzKHVpU291cmNl
Q29kZSk7Ci0gICAgICAgIGlmICh1aVNvdXJjZUNvZGUuY29udGVudFR5cGUoKSA9PT0gV2ViSW5z
cGVjdG9yLnJlc291cmNlVHlwZXMuU2NyaXB0IHx8IHVpU291cmNlQ29kZS5jb250ZW50VHlwZSgp
ID09PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5Eb2N1bWVudCkgewotICAgICAgICAgICAg
dWlTb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5F
dmVudHMuU291cmNlTWFwcGluZ0NoYW5nZWQsIHRoaXMuX3VpU291cmNlQ29kZU1hcHBpbmdDaGFu
Z2VkLCB0aGlzKTsKLSAgICAgICAgICAgIHVpU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLkZvcm1hdHRlZENoYW5nZWQsIHRoaXMuX3Vp
U291cmNlQ29kZUZvcm1hdHRlZCwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAg
X3VpU291cmNlQ29kZUZvcm1hdHRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2
YXIgdWlTb3VyY2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAq
LyAoZXZlbnQudGFyZ2V0KTsKLSAgICAgICAgdGhpcy5fcmVzdG9yZUJyZWFrcG9pbnRzKHVpU291
cmNlQ29kZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX3Jlc2V0QnJlYWtwb2lu
dHM6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VGaWxl
SWQgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuc291cmNlRmlsZUlkKHVpU291cmNl
Q29kZSk7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzLmtleXMo
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAgICAgICAg
ICAgIGlmIChicmVha3BvaW50Ll9zb3VyY2VGaWxlSWQgIT09IHNvdXJjZUZpbGVJZCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkKCkp
IHsKLSAgICAgICAgICAgICAgICBicmVha3BvaW50Ll9yZW1vdmVGcm9tRGVidWdnZXIoKTsKLSAg
ICAgICAgICAgICAgICBicmVha3BvaW50Ll9zZXRJbkRlYnVnZ2VyKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX3VpU291cmNlQ29kZU1hcHBpbmdDaGFuZ2Vk
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBpZGVudGl0eUhhc0NoYW5nZWQg
PSAvKiogQHR5cGUge2Jvb2xlYW59ICovIChldmVudC5kYXRhLmlkZW50aXR5SGFzQ2hhbmdlZCk7
Ci0gICAgICAgIGlmICghaWRlbnRpdHlIYXNDaGFuZ2VkKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3Vy
Y2VDb2RlfSAqLyAoZXZlbnQudGFyZ2V0KTsKLSAgICAgICAgdGhpcy5fcmVzZXRCcmVha3BvaW50
cyh1aVNvdXJjZUNvZGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmRpdGlvbgotICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gZW5hYmxlZAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5CcmVha3BvaW50fQotICAgICAqLwotICAgIHNldEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKQotICAg
IHsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50c0FjdGl2ZSh0cnVl
KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU2V0QnJlYWtwb2ludCh1aVNvdXJjZUNvZGUs
IGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29u
ZGl0aW9uCi0gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkCi0gICAgICogQHJldHVybiB7
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnR9Ci0gICAgICovCi0gICAg
X2lubmVyU2V0QnJlYWtwb2ludDogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBj
b25kaXRpb24sIGVuYWJsZWQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMu
ZmluZEJyZWFrcG9pbnQodWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKGJy
ZWFrcG9pbnQpIHsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQuX3VwZGF0ZUJyZWFrcG9pbnQoY29u
ZGl0aW9uLCBlbmFibGVkKTsKLSAgICAgICAgICAgIHJldHVybiBicmVha3BvaW50OwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLkJyZWFrcG9pbnQodGhpcywgdWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb25kaXRpb24s
IGVuYWJsZWQpOwotICAgICAgICB0aGlzLl9icmVha3BvaW50cy5wdXQoYnJlYWtwb2ludCk7Ci0g
ICAgICAgIHJldHVybiBicmVha3BvaW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5CcmVha3BvaW50fQotICAgICAqLwotICAgIGZpbmRCcmVha3BvaW50OiBm
dW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICB2YXIgYnJl
YWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50c0ZvclVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VD
b2RlKTsKLSAgICAgICAgdmFyIGxpbmVCcmVha3BvaW50cyA9IGJyZWFrcG9pbnRzID8gYnJlYWtw
b2ludHNbbGluZU51bWJlcl0gOiBudWxsOwotICAgICAgICByZXR1cm4gbGluZUJyZWFrcG9pbnRz
ID8gbGluZUJyZWFrcG9pbnRzWzBdIDogbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBA
cmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnQ+
fQotICAgICAqLwotICAgIGJyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlOiBmdW5jdGlvbih1aVNv
dXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIHZhciBi
cmVha3BvaW50cyA9IC8qKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5CcmVha3BvaW50Pn0gKi8odGhpcy5fYnJlYWtwb2ludHMua2V5cygpKTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKLSAgICAgICAgICAgIHZhciB1aUxv
Y2F0aW9uID0gYnJlYWtwb2ludC5fcHJpbWFyeVVJTG9jYXRpb247Ci0gICAgICAgICAgICBpZiAo
dWlMb2NhdGlvbi51aVNvdXJjZUNvZGUgPT09IHVpU291cmNlQ29kZSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQucHVzaChicmVha3BvaW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnQ+fQotICAgICAqLwotICAgIGFsbEJyZWFr
cG9pbnRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAg
ICAgIHZhciBicmVha3BvaW50cyA9IC8qKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5CcmVha3BvaW50Pn0gKi8odGhpcy5fYnJlYWtwb2ludHMua2V5cygpKTsK
LSAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBy
ZXR1cm4ge0FycmF5Ljx7YnJlYWtwb2ludDogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LkJyZWFrcG9pbnQsIHVpTG9jYXRpb246IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9ufT59Ci0gICAg
ICovCi0gICAgYnJlYWtwb2ludExvY2F0aW9uc0ZvclVJU291cmNlQ29kZTogZnVuY3Rpb24odWlT
b3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICB2YXIg
YnJlYWtwb2ludHMgPSAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuQnJlYWtwb2ludD59ICovKHRoaXMuX2JyZWFrcG9pbnRzLmtleXMoKSk7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07Ci0gICAgICAgICAgICB2YXIgdWlM
b2NhdGlvbnMgPSBPYmplY3QudmFsdWVzKGJyZWFrcG9pbnQuX3VpTG9jYXRpb25zKTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdWlMb2NhdGlvbnMubGVuZ3RoOyArK2opIHsKLSAg
ICAgICAgICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IHVpTG9jYXRpb25zW2pdOwotICAgICAgICAg
ICAgICAgIGlmICh1aUxvY2F0aW9uLnVpU291cmNlQ29kZSA9PT0gdWlTb3VyY2VDb2RlKQotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7YnJlYWtwb2ludDogYnJlYWtwb2ludCwgdWlM
b2NhdGlvbjogdWlMb2NhdGlvbnNbal19KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtB
cnJheS48e2JyZWFrcG9pbnQ6IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3Bv
aW50LCB1aUxvY2F0aW9uOiBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0+fQotICAgICAqLwotICAg
IGFsbEJyZWFrcG9pbnRMb2NhdGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBy
ZXN1bHQgPSBbXTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gLyoqIEB0eXBlIHtBcnJheS48
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnQ+fSAqLyh0aGlzLl9icmVh
a3BvaW50cy5rZXlzKCkpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRz
W2ldOwotICAgICAgICAgICAgdmFyIHVpTG9jYXRpb25zID0gT2JqZWN0LnZhbHVlcyhicmVha3Bv
aW50Ll91aUxvY2F0aW9ucyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHVpTG9j
YXRpb25zLmxlbmd0aDsgKytqKQotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHticmVha3Bv
aW50OiBicmVha3BvaW50LCB1aUxvY2F0aW9uOiB1aUxvY2F0aW9uc1tqXX0pOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gdG9nZ2xlU3RhdGUKLSAgICAgKi8KLSAgICB0b2dnbGVBbGxCcmVha3BvaW50
czogZnVuY3Rpb24odG9nZ2xlU3RhdGUpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludHMg
PSAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtw
b2ludD59ICovKHRoaXMuX2JyZWFrcG9pbnRzLmtleXMoKSk7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBicmVh
a3BvaW50ID0gYnJlYWtwb2ludHNbaV07Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFi
bGVkKCkgIT0gdG9nZ2xlU3RhdGUpCi0gICAgICAgICAgICAgICAgYnJlYWtwb2ludC5zZXRFbmFi
bGVkKHRvZ2dsZVN0YXRlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZW1vdmVBbGxCcmVh
a3BvaW50czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gLyoq
IEB0eXBlIHtBcnJheS48V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnQ+
fSAqLyh0aGlzLl9icmVha3BvaW50cy5rZXlzKCkpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnJlYWtwb2ludHNbaV0u
cmVtb3ZlKCk7Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICAvLyBSZW1vdmUgYWxsIGJyZWFrcG9pbnRzIGZyb20gVUkgYW5kIGRlYnVnZ2VyLCBkbyBub3Qg
dXBkYXRlIHN0b3JhZ2UuCi0gICAgICAgIHRoaXMuX3N0b3JhZ2UuX211dGVkID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5yZW1vdmVBbGxCcmVha3BvaW50cygpOwotICAgICAgICBkZWxldGUgdGhpcy5f
c3RvcmFnZS5fbXV0ZWQ7Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGFsbCBwcm92aXNpb25hbCBicmVh
a3BvaW50cyBmcm9tIHRoZSBkZWJ1Z2dlci4KLSAgICAgICAgZm9yICh2YXIgZGVidWdnZXJJZCBp
biB0aGlzLl9icmVha3BvaW50Rm9yRGVidWdnZXJJZCkKLSAgICAgICAgICAgIHRoaXMuX2RlYnVn
Z2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z2dlcklkKTsKLSAgICAgICAgdGhpcy5fYnJl
YWtwb2ludEZvckRlYnVnZ2VySWQgPSB7fTsKLSAgICAgICAgdGhpcy5fc291cmNlRmlsZXNXaXRo
UmVzdG9yZWRCcmVha3BvaW50cyA9IHt9OwotICAgIH0sCi0KLSAgICBfcHJvamVjdFdpbGxSZXNl
dDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcHJvamVjdCA9IC8qKiBAdHlw
ZSB7V2ViSW5zcGVjdG9yLlByb2plY3R9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgdmFyIHVp
U291cmNlQ29kZXMgPSBwcm9qZWN0LnVpU291cmNlQ29kZXMoKTsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB1aVNvdXJjZUNvZGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2Rlc1tpXTsKLSAgICAgICAgICAgIHZhciBicmVha3Bv
aW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlLmdldCh1aVNvdXJjZUNvZGUp
IHx8IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBicmVha3BvaW50cykg
ewotICAgICAgICAgICAgICAgIHZhciBsaW5lQnJlYWtwb2ludHMgPSBicmVha3BvaW50c1tsaW5l
TnVtYmVyXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmVCcmVha3Bv
aW50cy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IGxpbmVCcmVha3BvaW50c1tqXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5fcmVz
ZXRMb2NhdGlvbnMoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0aGlzLl9icmVha3BvaW50c0ZvclVJU291cmNlQ29kZS5yZW1vdmUodWlTb3VyY2VDb2Rl
KTsKLQotICAgICAgICAgICAgYnJlYWtwb2ludHMgPSB0aGlzLmJyZWFrcG9pbnRzRm9yVUlTb3Vy
Y2VDb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJy
ZWFrcG9pbnRzLmxlbmd0aDsgKytqKSB7IAotICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50
ID0gYnJlYWtwb2ludHNbal07Ci0gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMucmVt
b3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50Ll9wcmlt
YXJ5VUlMb2NhdGlvbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHNvdXJjZUZp
bGVJZCA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5zb3VyY2VGaWxlSWQodWlTb3Vy
Y2VDb2RlKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VGaWxlc1dpdGhSZXN0b3Jl
ZEJyZWFrcG9pbnRzW3NvdXJjZUZpbGVJZF07Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2Jy
ZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gLyoqIEB0eXBlIHtEZWJ1Z2dlckFnZW50LkJyZWFrcG9pbnRJZH0gKi8gKGV2
ZW50LmRhdGEuYnJlYWtwb2ludElkKTsKLSAgICAgICAgdmFyIGxvY2F0aW9uID0gLyoqIEB0eXBl
IHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5Mb2NhdGlvbn0gKi8gKGV2ZW50LmRhdGEubG9j
YXRpb24pOwotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRGb3JEZWJ1
Z2dlcklkW2JyZWFrcG9pbnRJZF07Ci0gICAgICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKCF0aGlzLl9icmVha3BvaW50cy5jb250YWlucyhicmVh
a3BvaW50KSkKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLnB1dChicmVha3BvaW50KTsK
LSAgICAgICAgYnJlYWtwb2ludC5fYWRkUmVzb2x2ZWRMb2NhdGlvbihsb2NhdGlvbik7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlbW92
ZUZyb21TdG9yYWdlCi0gICAgICovCi0gICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJy
ZWFrcG9pbnQsIHJlbW92ZUZyb21TdG9yYWdlKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3Nl
cnQoIWJyZWFrcG9pbnQuX2RlYnVnZ2VySWQpCi0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLnJl
bW92ZShicmVha3BvaW50KTsKLSAgICAgICAgaWYgKHJlbW92ZUZyb21TdG9yYWdlKQotICAgICAg
ICAgICAgdGhpcy5fc3RvcmFnZS5fcmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuQnJlYWtwb2ludH0gYnJlYWtwb2ludAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJ
TG9jYXRpb259IHVpTG9jYXRpb24KLSAgICAgKi8KLSAgICBfdWlMb2NhdGlvbkFkZGVkOiBmdW5j
dGlvbihicmVha3BvaW50LCB1aUxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9p
bnRzID0gdGhpcy5fYnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGUuZ2V0KHVpTG9jYXRpb24udWlT
b3VyY2VDb2RlKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50cykgewotICAgICAgICAgICAgYnJl
YWtwb2ludHMgPSB7fTsKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzRm9yVUlTb3VyY2VD
b2RlLnB1dCh1aUxvY2F0aW9uLnVpU291cmNlQ29kZSwgYnJlYWtwb2ludHMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdmFyIGxpbmVCcmVha3BvaW50cyA9IGJyZWFrcG9pbnRzW3VpTG9jYXRpb24u
bGluZU51bWJlcl07Ci0gICAgICAgIGlmICghbGluZUJyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAg
ICBsaW5lQnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgICAgIGJyZWFrcG9pbnRzW3VpTG9jYXRp
b24ubGluZU51bWJlcl0gPSBsaW5lQnJlYWtwb2ludHM7Ci0gICAgICAgIH0KLQotICAgICAgICBs
aW5lQnJlYWtwb2ludHMucHVzaChicmVha3BvaW50KTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5CcmVh
a3BvaW50QWRkZWQsIHticmVha3BvaW50OiBicmVha3BvaW50LCB1aUxvY2F0aW9uOiB1aUxvY2F0
aW9ufSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5VSUxvY2F0aW9ufSB1aUxvY2F0aW9uCi0gICAgICovCi0gICAgX3VpTG9jYXRp
b25SZW1vdmVkOiBmdW5jdGlvbihicmVha3BvaW50LCB1aUxvY2F0aW9uKQotICAgIHsKLSAgICAg
IHZhciBicmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlLmdldCh1
aUxvY2F0aW9uLnVpU291cmNlQ29kZSk7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludHMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGxpbmVCcmVha3BvaW50cyA9IGJyZWFrcG9p
bnRzW3VpTG9jYXRpb24ubGluZU51bWJlcl07Ci0gICAgICAgIGlmICghbGluZUJyZWFrcG9pbnRz
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxpbmVCcmVha3BvaW50cy5yZW1vdmUo
YnJlYWtwb2ludCk7Ci0gICAgICAgIGlmICghbGluZUJyZWFrcG9pbnRzLmxlbmd0aCkKLSAgICAg
ICAgICAgIGRlbGV0ZSBicmVha3BvaW50c1t1aUxvY2F0aW9uLmxpbmVOdW1iZXJdOwotICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB7YnJlYWtwb2ludDogYnJlYWtwb2ludCwg
dWlMb2NhdGlvbjogdWlMb2NhdGlvbn0pOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcn0gYnJlYWtwb2ludE1hbmFnZXIK
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICogQHBhcmFtIHtzdHJpbmd9IGNvbmRpdGlvbgot
ICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkCi0gKi8KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5CcmVha3BvaW50ID0gZnVuY3Rpb24oYnJlYWtwb2ludE1hbmFnZXIsIHVpU291cmNl
Q29kZSwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKQotewotICAgIHRoaXMuX2JyZWFr
cG9pbnRNYW5hZ2VyID0gYnJlYWtwb2ludE1hbmFnZXI7Ci0gICAgdGhpcy5fcHJpbWFyeVVJTG9j
YXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVt
YmVyLCAwKTsKLSAgICB0aGlzLl9zb3VyY2VGaWxlSWQgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIuc291cmNlRmlsZUlkKHVpU291cmNlQ29kZSk7Ci0gICAgLyoqIEB0eXBlIHtBcnJh
eS48V2ViSW5zcGVjdG9yLlNjcmlwdC5Mb2NhdGlvbj59ICovCi0gICAgdGhpcy5fbGl2ZUxvY2F0
aW9ucyA9IFtdOwotICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5V
SUxvY2F0aW9uPn0gKi8KLSAgICB0aGlzLl91aUxvY2F0aW9ucyA9IHt9OwotCi0gICAgLy8gRm9y
Y2UgYnJlYWtwb2ludCB1cGRhdGUuCi0gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovIHRoaXMuX2Nv
bmRpdGlvbjsKLSAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovIHRoaXMuX2VuYWJsZWQ7Ci0gICAg
dGhpcy5fdXBkYXRlQnJlYWtwb2ludChjb25kaXRpb24sIGVuYWJsZWQpOwotfQotCi1XZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259Ci0gICAgICovCi0gICAg
cHJpbWFyeVVJTG9jYXRpb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9wcmltYXJ5VUlMb2NhdGlvbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5Mb2NhdGlvbn0gbG9jYXRpb24KLSAgICAgKi8KLSAg
ICBfYWRkUmVzb2x2ZWRMb2NhdGlvbjogZnVuY3Rpb24obG9jYXRpb24pCi0gICAgewotICAgICAg
ICB0aGlzLl9saXZlTG9jYXRpb25zLnB1c2godGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX2RlYnVn
Z2VyTW9kZWwuY3JlYXRlTGl2ZUxvY2F0aW9uKGxvY2F0aW9uLCB0aGlzLl9sb2NhdGlvblVwZGF0
ZWQuYmluZCh0aGlzLCBsb2NhdGlvbikpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5Mb2NhdGlvbn0gbG9jYXRpb24KLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufSB1aUxvY2F0aW9uCi0gICAgICovCi0g
ICAgX2xvY2F0aW9uVXBkYXRlZDogZnVuY3Rpb24obG9jYXRpb24sIHVpTG9jYXRpb24pCi0gICAg
ewotICAgICAgICB2YXIgc3RyaW5naWZpZWRMb2NhdGlvbiA9IGxvY2F0aW9uLnNjcmlwdElkICsg
IjoiICsgbG9jYXRpb24ubGluZU51bWJlciArICI6IiArIGxvY2F0aW9uLmNvbHVtbk51bWJlcjsK
LSAgICAgICAgdmFyIG9sZFVJTG9jYXRpb24gPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSUxv
Y2F0aW9ufSAqLyAodGhpcy5fdWlMb2NhdGlvbnNbc3RyaW5naWZpZWRMb2NhdGlvbl0pOwotICAg
ICAgICBpZiAob2xkVUlMb2NhdGlvbikKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5h
Z2VyLl91aUxvY2F0aW9uUmVtb3ZlZCh0aGlzLCBvbGRVSUxvY2F0aW9uKTsKLSAgICAgICAgaWYg
KHRoaXMuX3VpTG9jYXRpb25zWyIiXSkgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3VpTG9j
YXRpb25zWyIiXTsKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl91aUxvY2F0
aW9uUmVtb3ZlZCh0aGlzLCB0aGlzLl9wcmltYXJ5VUlMb2NhdGlvbik7Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy5fdWlMb2NhdGlvbnNbc3RyaW5naWZpZWRMb2NhdGlvbl0gPSB1aUxvY2F0aW9u
OwotICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fdWlMb2NhdGlvbkFkZGVkKHRoaXMs
IHVpTG9jYXRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFu
fQotICAgICAqLwotICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9lbmFibGVkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IGVuYWJsZWQKLSAgICAgKi8KLSAgICBzZXRFbmFibGVkOiBmdW5jdGlvbihlbmFibGVkKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtwb2ludCh0aGlzLl9jb25kaXRpb24sIGVu
YWJsZWQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAg
ICovCi0gICAgY29uZGl0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fY29uZGl0aW9uOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
Y29uZGl0aW9uCi0gICAgICovCi0gICAgc2V0Q29uZGl0aW9uOiBmdW5jdGlvbihjb25kaXRpb24p
Ci0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVCcmVha3BvaW50KGNvbmRpdGlvbiwgdGhpcy5f
ZW5hYmxlZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb25k
aXRpb24KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQKLSAgICAgKi8KLSAgICBfdXBk
YXRlQnJlYWtwb2ludDogZnVuY3Rpb24oY29uZGl0aW9uLCBlbmFibGVkKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX2VuYWJsZWQgPT09IGVuYWJsZWQgJiYgdGhpcy5fY29uZGl0aW9uID09PSBj
b25kaXRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX2VuYWJs
ZWQpCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVGcm9tRGVidWdnZXIoKTsKLQotICAgICAgICB0
aGlzLl9lbmFibGVkID0gZW5hYmxlZDsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9uID0gY29uZGl0
aW9uOwotICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fc3RvcmFnZS5fdXBkYXRlQnJl
YWtwb2ludCh0aGlzKTsKLQotICAgICAgICB2YXIgc2NyaXB0RmlsZSA9IHRoaXMuX3ByaW1hcnlV
SUxvY2F0aW9uLnVpU291cmNlQ29kZS5zY3JpcHRGaWxlKCk7Ci0gICAgICAgIGlmICh0aGlzLl9l
bmFibGVkICYmICEoc2NyaXB0RmlsZSAmJiBzY3JpcHRGaWxlLmhhc0RpdmVyZ2VkRnJvbVZNKCkp
KSB7Ci0gICAgICAgICAgICB0aGlzLl9zZXRJbkRlYnVnZ2VyKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9mYWtlQnJlYWtwb2ludEF0UHJpbWFyeUxv
Y2F0aW9uKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGtl
ZXBJblN0b3JhZ2UKLSAgICAgKi8KLSAgICByZW1vdmU6IGZ1bmN0aW9uKGtlZXBJblN0b3JhZ2Up
Ci0gICAgewotICAgICAgICB2YXIgcmVtb3ZlRnJvbVN0b3JhZ2UgPSAha2VlcEluU3RvcmFnZTsK
LSAgICAgICAgdGhpcy5fcmVzZXRMb2NhdGlvbnMoKTsKLSAgICAgICAgdGhpcy5fcmVtb3ZlRnJv
bURlYnVnZ2VyKCk7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9yZW1vdmVCcmVh
a3BvaW50KHRoaXMsIHJlbW92ZUZyb21TdG9yYWdlKTsKLSAgICB9LAotCi0gICAgX3NldEluRGVi
dWdnZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9k
ZWJ1Z2dlcklkKTsKLSAgICAgICAgdmFyIHJhd0xvY2F0aW9uID0gdGhpcy5fcHJpbWFyeVVJTG9j
YXRpb24udWlMb2NhdGlvblRvUmF3TG9jYXRpb24oKTsKLSAgICAgICAgdmFyIGRlYnVnZ2VyTW9k
ZWxMb2NhdGlvbiA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRp
b259ICovIChyYXdMb2NhdGlvbik7Ci0gICAgICAgIGlmIChkZWJ1Z2dlck1vZGVsTG9jYXRpb24p
Ci0gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fZGVidWdnZXJNb2RlbC5zZXRC
cmVha3BvaW50QnlTY3JpcHRMb2NhdGlvbihkZWJ1Z2dlck1vZGVsTG9jYXRpb24sIHRoaXMuX2Nv
bmRpdGlvbiwgZGlkU2V0QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtw
b2ludEJ5VVJMKHRoaXMuX3ByaW1hcnlVSUxvY2F0aW9uLnVpU291cmNlQ29kZS51cmwsIHRoaXMu
X3ByaW1hcnlVSUxvY2F0aW9uLmxpbmVOdW1iZXIsIDAsIHRoaXMuX2NvbmRpdGlvbiwgZGlkU2V0
QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMg
e1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50fQotICAgICAgICAgKiBA
cGFyYW0gez9EZWJ1Z2dlckFnZW50LkJyZWFrcG9pbnRJZH0gYnJlYWtwb2ludElkCi0gICAgICAg
ICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9uPn0g
bG9jYXRpb25zCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBkaWRTZXRCcmVha3BvaW50
KGJyZWFrcG9pbnRJZCwgbG9jYXRpb25zKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWJy
ZWFrcG9pbnRJZCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0TG9jYXRpb25zKCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3JlbW92ZUJyZWFrcG9pbnQo
dGhpcywgZmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdGhpcy5fZGVidWdnZXJJZCA9IGJyZWFrcG9pbnRJZDsKLSAgICAgICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9icmVha3BvaW50Rm9yRGVidWdnZXJJZFticmVha3Bv
aW50SWRdID0gdGhpczsKLQotICAgICAgICAgICAgaWYgKCFsb2NhdGlvbnMubGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fZmFrZUJyZWFrcG9pbnRBdFByaW1hcnlMb2NhdGlvbigpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhp
cy5fcmVzZXRMb2NhdGlvbnMoKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9j
YXRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNjcmlwdCA9IHRoaXMu
X2JyZWFrcG9pbnRNYW5hZ2VyLl9kZWJ1Z2dlck1vZGVsLnNjcmlwdEZvcklkKGxvY2F0aW9uc1tp
XS5zY3JpcHRJZCk7Ci0gICAgICAgICAgICAgICAgdmFyIHVpTG9jYXRpb24gPSBzY3JpcHQucmF3
TG9jYXRpb25Ub1VJTG9jYXRpb24obG9jYXRpb25zW2ldLmxpbmVOdW1iZXIsIGxvY2F0aW9uc1tp
XS5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50TWFu
YWdlci5maW5kQnJlYWtwb2ludCh1aUxvY2F0aW9uLnVpU291cmNlQ29kZSwgdWlMb2NhdGlvbi5s
aW5lTnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiBjbGFzaAotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0
aGlzLl9hZGRSZXNvbHZlZExvY2F0aW9uKGxvY2F0aW9uc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX3JlbW92ZUZyb21EZWJ1Z2dlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX2RlYnVnZ2VySWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5h
Z2VyLl9kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fZGVidWdnZXJJZCk7Ci0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX2JyZWFrcG9pbnRGb3JE
ZWJ1Z2dlcklkW3RoaXMuX2RlYnVnZ2VySWRdOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Rl
YnVnZ2VySWQ7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3Jlc2V0TG9jYXRpb25zOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBzdHJpbmdpZmllZExvY2F0aW9uIGluIHRo
aXMuX3VpTG9jYXRpb25zKQotICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3Vp
TG9jYXRpb25SZW1vdmVkKHRoaXMsIHRoaXMuX3VpTG9jYXRpb25zW3N0cmluZ2lmaWVkTG9jYXRp
b25dKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xpdmVMb2NhdGlvbnMu
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9saXZlTG9jYXRpb25zW2ldLmRpc3Bvc2Uo
KTsKLSAgICAgICAgdGhpcy5fbGl2ZUxvY2F0aW9ucyA9IFtdOwotCi0gICAgICAgIHRoaXMuX3Vp
TG9jYXRpb25zID0ge307Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmlu
Z30KLSAgICAgKi8KLSAgICBfYnJlYWtwb2ludFN0b3JhZ2VJZDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VGaWxlSWQpCi0gICAgICAgICAgICByZXR1cm4gIiI7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VGaWxlSWQgKyAiOiIgKyB0aGlzLl9wcmltYXJ5
VUlMb2NhdGlvbi5saW5lTnVtYmVyOwotICAgIH0sCi0KLSAgICBfZmFrZUJyZWFrcG9pbnRBdFBy
aW1hcnlMb2NhdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzZXRMb2Nh
dGlvbnMoKTsKLSAgICAgICAgdGhpcy5fdWlMb2NhdGlvbnNbIiJdID0gdGhpcy5fcHJpbWFyeVVJ
TG9jYXRpb247Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl91aUxvY2F0aW9uQWRk
ZWQodGhpcywgdGhpcy5fcHJpbWFyeVVJTG9jYXRpb24pOwotICAgIH0KLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyfSBi
cmVha3BvaW50TWFuYWdlcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2V0dGluZ30gc2V0dGlu
ZwotICovCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuU3RvcmFnZSA9IGZ1bmN0aW9u
KGJyZWFrcG9pbnRNYW5hZ2VyLCBzZXR0aW5nKQotewotICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5h
Z2VyID0gYnJlYWtwb2ludE1hbmFnZXI7Ci0gICAgdGhpcy5fc2V0dGluZyA9IHNldHRpbmc7Ci0g
ICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fc2V0dGluZy5nZXQoKTsKLSAgICAvKiogQHR5cGUg
e09iamVjdC48c3RyaW5nLFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5TdG9yYWdlLkl0
ZW0+fSAqLwotICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLlN0b3JhZ2UuSXRlbX0g
Ki8gKGJyZWFrcG9pbnRzW2ldKTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2lu
dC5zb3VyY2VGaWxlSWQgKyAiOiIgKyBicmVha3BvaW50LmxpbmVOdW1iZXJdID0gYnJlYWtwb2lu
dDsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5TdG9yYWdlLnBy
b3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJj
ZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqLwotICAgIF9yZXN0b3JlQnJlYWtwb2ludHM6IGZ1
bmN0aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX211dGVkID0gdHJ1ZTsK
LSAgICAgICAgdmFyIHNvdXJjZUZpbGVJZCA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5zb3VyY2VGaWxlSWQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhp
cy5fYnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJl
YWtwb2ludHNbaWRdOwotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlRmlsZUlkID09
PSBzb3VyY2VGaWxlSWQpCi0gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIu
X2lubmVyU2V0QnJlYWtwb2ludCh1aVNvdXJjZUNvZGUsIGJyZWFrcG9pbnQubGluZU51bWJlciwg
YnJlYWtwb2ludC5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZGVsZXRlIHRoaXMuX211dGVkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50fSBicmVha3BvaW50
Ci0gICAgICovCi0gICAgX3VwZGF0ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fbXV0ZWQgfHwgIWJyZWFrcG9pbnQuX2JyZWFrcG9pbnRT
dG9yYWdlSWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dHNbYnJlYWtwb2ludC5fYnJlYWtwb2ludFN0b3JhZ2VJZCgpXSA9IG5ldyBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIuU3RvcmFnZS5JdGVtKGJyZWFrcG9pbnQpOwotICAgICAgICB0aGlz
Ll9zYXZlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKLSAgICAgKi8KLSAgICBf
cmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9tdXRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVsZXRlIHRoaXMu
X2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuX2JyZWFrcG9pbnRTdG9yYWdlSWQoKV07Ci0gICAgICAg
IHRoaXMuX3NhdmUoKTsKLSAgICB9LAotCi0gICAgX3NhdmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBicmVha3BvaW50c0FycmF5ID0gW107Ci0gICAgICAgIGZvciAodmFyIGlkIGlu
IHRoaXMuX2JyZWFrcG9pbnRzKQotICAgICAgICAgICAgYnJlYWtwb2ludHNBcnJheS5wdXNoKHRo
aXMuX2JyZWFrcG9pbnRzW2lkXSk7Ci0gICAgICAgIHRoaXMuX3NldHRpbmcuc2V0KGJyZWFrcG9p
bnRzQXJyYXkpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKLSAq
LwotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLlN0b3JhZ2UuSXRlbSA9IGZ1bmN0aW9u
KGJyZWFrcG9pbnQpCi17Ci0gICAgdmFyIHByaW1hcnlVSUxvY2F0aW9uID0gYnJlYWtwb2ludC5w
cmltYXJ5VUlMb2NhdGlvbigpOwotICAgIHRoaXMuc291cmNlRmlsZUlkID0gYnJlYWtwb2ludC5f
c291cmNlRmlsZUlkOwotICAgIHRoaXMubGluZU51bWJlciA9IHByaW1hcnlVSUxvY2F0aW9uLmxp
bmVOdW1iZXI7Ci0gICAgdGhpcy5jb25kaXRpb24gPSBicmVha3BvaW50LmNvbmRpdGlvbigpOwot
ICAgIHRoaXMuZW5hYmxlZCA9IGJyZWFrcG9pbnQuZW5hYmxlZCgpOwotfQotCi0vKiogQHR5cGUg
e1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcn0gKi8KLVdlYkluc3BlY3Rvci5icmVha3Bv
aW50TWFuYWdlciA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDliNzdjYzguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsNjc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXJ9IGJyZWFrcG9pbnRNYW5hZ2VyCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVj
dG9yLlNpZGViYXJQYW5lfQotICovCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRz
U2lkZWJhclBhbmUgPSBmdW5jdGlvbihicmVha3BvaW50TWFuYWdlciwgc2hvd1NvdXJjZUxpbmVE
ZWxlZ2F0ZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkJyZWFrcG9pbnRzIikpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1
aXJlZENTUygiYnJlYWtwb2ludHNMaXN0LmNzcyIpOwotCi0gICAgdGhpcy5fYnJlYWtwb2ludE1h
bmFnZXIgPSBicmVha3BvaW50TWFuYWdlcjsKLSAgICB0aGlzLl9zaG93U291cmNlTGluZURlbGVn
YXRlID0gc2hvd1NvdXJjZUxpbmVEZWxlZ2F0ZTsKLQotICAgIHRoaXMubGlzdEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwotICAgIHRoaXMubGlzdEVsZW1lbnQuY2xhc3NO
YW1lID0gImJyZWFrcG9pbnQtbGlzdCI7Ci0KLSAgICB0aGlzLmVtcHR5RWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZW1wdHlFbGVtZW50LmNsYXNzTmFt
ZSA9ICJpbmZvIjsKLSAgICB0aGlzLmVtcHR5RWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiTm8gQnJlYWtwb2ludHMiKTsKLQotICAgIHRoaXMuYm9keUVsZW1lbnQu
YXBwZW5kQ2hpbGQodGhpcy5lbXB0eUVsZW1lbnQpOwotCi0gICAgdGhpcy5faXRlbXMgPSBuZXcg
TWFwKCk7Ci0gICAgCi0gICAgdmFyIGJyZWFrcG9pbnRMb2NhdGlvbnMgPSB0aGlzLl9icmVha3Bv
aW50TWFuYWdlci5hbGxCcmVha3BvaW50TG9jYXRpb25zKCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBicmVha3BvaW50TG9jYXRpb25zLmxlbmd0aDsgKytpKQotICAgICAgICB0aGlzLl9hZGRC
cmVha3BvaW50KGJyZWFrcG9pbnRMb2NhdGlvbnNbaV0uYnJlYWtwb2ludCwgYnJlYWtwb2ludExv
Y2F0aW9uc1tpXS51aUxvY2F0aW9uKTsKLQotICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5CcmVh
a3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0gICAgdGhpcy5fYnJl
YWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwg
dGhpcyk7Ci0KLSAgICB0aGlzLmVtcHR5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0
bWVudSIsIHRoaXMuX2VtcHR5RWxlbWVudENvbnRleHRNZW51LmJpbmQodGhpcyksIHRydWUpOwot
fQotCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90
eXBlID0gewotICAgIF9lbXB0eUVsZW1lbnRDb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRN
ZW51KGV2ZW50KTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRBY3RpdmUgPSBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5icmVha3BvaW50c0FjdGl2ZSgpOwotICAgICAgICB2YXIgYnJlYWtwb2lu
dEFjdGl2ZVRpdGxlID0gYnJlYWtwb2ludEFjdGl2ZSA/Ci0gICAgICAgICAgICBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJEZWFj
dGl2YXRlIGJyZWFrcG9pbnRzIiA6ICJEZWFjdGl2YXRlIEJyZWFrcG9pbnRzIikgOgotICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51
VGl0bGVzKCkgPyAiQWN0aXZhdGUgYnJlYWtwb2ludHMiIDogIkFjdGl2YXRlIEJyZWFrcG9pbnRz
Iik7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oYnJlYWtwb2ludEFjdGl2ZVRpdGxl
LCBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50c0FjdGl2ZS5iaW5kKFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLCAhYnJlYWtwb2ludEFjdGl2ZSkpOwotICAgICAgICBj
b250ZXh0TWVudS5zaG93KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQoZXZl
bnQpOwotCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludH0gKi8gKGV2ZW50LmRhdGEuYnJlYWtwb2ludCk7
Ci0gICAgICAgIHZhciB1aUxvY2F0aW9uID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlMb2Nh
dGlvbn0gKi8gKGV2ZW50LmRhdGEudWlMb2NhdGlvbik7Ci0gICAgICAgIHRoaXMuX2FkZEJyZWFr
cG9pbnQoYnJlYWtwb2ludCwgdWlMb2NhdGlvbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnR9IGJyZWFr
cG9pbnQKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufSB1aUxvY2F0aW9u
Ci0gICAgICovCi0gICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIHVpTG9j
YXRpb24pCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImxpIik7Ci0gICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY3Vyc29yLXBvaW50ZXIi
KTsKLSAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMu
X2JyZWFrcG9pbnRDb250ZXh0TWVudS5iaW5kKHRoaXMsIGJyZWFrcG9pbnQpLCB0cnVlKTsKLSAg
ICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2JyZWFrcG9pbnRD
bGlja2VkLmJpbmQodGhpcywgdWlMb2NhdGlvbiksIGZhbHNlKTsKLQotICAgICAgICB2YXIgY2hl
Y2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgICBjaGVja2Jv
eC5jbGFzc05hbWUgPSAiY2hlY2tib3gtZWxlbSI7Ci0gICAgICAgIGNoZWNrYm94LnR5cGUgPSAi
Y2hlY2tib3giOwotICAgICAgICBjaGVja2JveC5jaGVja2VkID0gYnJlYWtwb2ludC5lbmFibGVk
KCk7Ci0gICAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fYnJl
YWtwb2ludENoZWNrYm94Q2xpY2tlZC5iaW5kKHRoaXMsIGJyZWFrcG9pbnQpLCBmYWxzZSk7Ci0g
ICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hlY2tib3gpOwotCi0gICAgICAgIHZhciBsYWJl
bEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuZm9ybWF0TGlu
a1RleHQodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUub3JpZ2luVVJMKCksIHVpTG9jYXRpb24ubGlu
ZU51bWJlcikpOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7Ci0K
LSAgICAgICAgdmFyIHNuaXBwZXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgICAgIHNuaXBwZXRFbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtdGV4dCBtb25v
c3BhY2UiOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHNuaXBwZXRFbGVtZW50KTsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBjb250ZW50Ci0gICAgICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29kZWQKLSAgICAgICAgICogQHBhcmFtIHtz
dHJpbmd9IG1pbWVUeXBlCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0
Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciBsaW5lRW5kaW5ncyA9IGNvbnRlbnQubGluZUVuZGluZ3MoKTsKLSAgICAg
ICAgICAgIGlmICh1aUxvY2F0aW9uLmxpbmVOdW1iZXIgPCBsaW5lRW5kaW5ncy5sZW5ndGgpCi0g
ICAgICAgICAgICAgICAgc25pcHBldEVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50LnN1YnN0
cmluZyhsaW5lRW5kaW5nc1t1aUxvY2F0aW9uLmxpbmVOdW1iZXIgLSAxXSwgbGluZUVuZGluZ3Nb
dWlMb2NhdGlvbi5saW5lTnVtYmVyXSk7Ci0gICAgICAgIH0KLSAgICAgICAgdWlMb2NhdGlvbi51
aVNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoZGlkUmVxdWVzdENvbnRlbnQuYmluZCh0aGlzKSk7
Ci0KLSAgICAgICAgZWxlbWVudC5fZGF0YSA9IHVpTG9jYXRpb247Ci0gICAgICAgIHZhciBjdXJy
ZW50RWxlbWVudCA9IHRoaXMubGlzdEVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgd2hpbGUg
KGN1cnJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuX2RhdGEg
JiYgdGhpcy5fY29tcGFyZUJyZWFrcG9pbnRzKGN1cnJlbnRFbGVtZW50Ll9kYXRhLCBlbGVtZW50
Ll9kYXRhKSA+IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjdXJyZW50
RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50Lm5leHRTaWJsaW5nOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMuX2FkZExpc3RFbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRFbGVtZW50KTsKLQotICAgICAg
ICB2YXIgYnJlYWtwb2ludEl0ZW0gPSB7fTsKLSAgICAgICAgYnJlYWtwb2ludEl0ZW0uZWxlbWVu
dCA9IGVsZW1lbnQ7Ci0gICAgICAgIGJyZWFrcG9pbnRJdGVtLmNoZWNrYm94ID0gY2hlY2tib3g7
Ci0gICAgICAgIHRoaXMuX2l0ZW1zLnB1dChicmVha3BvaW50LCBicmVha3BvaW50SXRlbSk7Ci0K
LSAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2JyZWFrcG9pbnRSZW1v
dmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gLyoq
IEB0eXBlIHtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludH0gKi8gKGV2
ZW50LmRhdGEuYnJlYWtwb2ludCk7Ci0gICAgICAgIHZhciB1aUxvY2F0aW9uID0gLyoqIEB0eXBl
IHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0gKi8gKGV2ZW50LmRhdGEudWlMb2NhdGlvbik7Ci0g
ICAgICAgIHZhciBicmVha3BvaW50SXRlbSA9IHRoaXMuX2l0ZW1zLmdldChicmVha3BvaW50KTsK
LSAgICAgICAgaWYgKCFicmVha3BvaW50SXRlbSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgdGhpcy5faXRlbXMucmVtb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICB0aGlzLl9yZW1vdmVM
aXN0RWxlbWVudChicmVha3BvaW50SXRlbS5lbGVtZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludH0g
YnJlYWtwb2ludAotICAgICAqLwotICAgIGhpZ2hsaWdodEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJy
ZWFrcG9pbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludEl0ZW0gPSB0aGlzLl9pdGVt
cy5nZXQoYnJlYWtwb2ludCk7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludEl0ZW0pCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrcG9pbnRJdGVtLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygiYnJlYWtwb2ludC1oaXQiKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRCcmVha3BvaW50
SXRlbSA9IGJyZWFrcG9pbnRJdGVtOwotICAgIH0sCi0KLSAgICBjbGVhckJyZWFrcG9pbnRIaWdo
bGlnaHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRlZEJy
ZWFrcG9pbnRJdGVtKSB7Ci0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRlZEJyZWFrcG9pbnRJ
dGVtLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiYnJlYWtwb2ludC1oaXQiKTsKLSAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRlZEJyZWFrcG9pbnRJdGVtOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9icmVha3BvaW50Q2xpY2tlZDogZnVuY3Rpb24odWlMb2NhdGlvbiwgZXZl
bnQpCi0gICAgewotICAgICAgICB0aGlzLl9zaG93U291cmNlTGluZURlbGVnYXRlKHVpTG9jYXRp
b24udWlTb3VyY2VDb2RlLCB1aUxvY2F0aW9uLmxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3Bv
aW50fSBicmVha3BvaW50Ci0gICAgICovCi0gICAgX2JyZWFrcG9pbnRDaGVja2JveENsaWNrZWQ6
IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGV2ZW50KQotICAgIHsKLSAgICAgICAgLy8gQnJlYWtwb2lu
dCBlbGVtZW50IGhhcyBpdCdzIG93biBjbGljayBoYW5kbGVyLgotICAgICAgICBldmVudC5jb25z
dW1lKCk7Ci0gICAgICAgIGJyZWFrcG9pbnQuc2V0RW5hYmxlZChldmVudC50YXJnZXQuY2hlY2tl
ZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKLSAgICAgKi8KLSAgICBfYnJlYWtw
b2ludENvbnRleHRNZW51OiBmdW5jdGlvbihicmVha3BvaW50LCBldmVudCkKLSAgICB7Ci0gICAg
ICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX2l0ZW1zLnZhbHVlcygpOwotICAgICAgICB2YXIg
Y29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVj
dG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJSZW1vdmUgYnJlYWtwb2ludCIgOiAiUmVt
b3ZlIEJyZWFrcG9pbnQiKSwgYnJlYWtwb2ludC5yZW1vdmUuYmluZChicmVha3BvaW50KSk7Ci0g
ICAgICAgIGlmIChicmVha3BvaW50cy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICB2YXIgcmVt
b3ZlQWxsVGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2Vy
Q2FzZU1lbnVUaXRsZXMoKSA/ICJSZW1vdmUgYWxsIGJyZWFrcG9pbnRzIiA6ICJSZW1vdmUgQWxs
IEJyZWFrcG9pbnRzIik7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKHJlbW92
ZUFsbFRpdGxlLCB0aGlzLl9icmVha3BvaW50TWFuYWdlci5yZW1vdmVBbGxCcmVha3BvaW50cy5i
aW5kKHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRBY3RpdmUg
PSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5icmVha3BvaW50c0FjdGl2ZSgpOwotICAgICAg
ICB2YXIgYnJlYWtwb2ludEFjdGl2ZVRpdGxlID0gYnJlYWtwb2ludEFjdGl2ZSA/Ci0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVU
aXRsZXMoKSA/ICJEZWFjdGl2YXRlIGJyZWFrcG9pbnRzIiA6ICJEZWFjdGl2YXRlIEJyZWFrcG9p
bnRzIikgOgotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51
c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQWN0aXZhdGUgYnJlYWtwb2ludHMiIDogIkFjdGl2
YXRlIEJyZWFrcG9pbnRzIik7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oYnJlYWtw
b2ludEFjdGl2ZVRpdGxlLCBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50
c0FjdGl2ZS5iaW5kKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLCAhYnJlYWtwb2ludEFjdGl2
ZSkpOwotCi0gICAgICAgIGZ1bmN0aW9uIGVuYWJsZWRCcmVha3BvaW50Q291bnQoYnJlYWtwb2lu
dHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBjb3VudCA9IDA7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJyZWFrcG9pbnRzW2ldLmNoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgICAg
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY291bnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJyZWFrcG9pbnRzLmxlbmd0aCA+IDEpIHsKLSAgICAg
ICAgICAgIHZhciBlbmFibGVCcmVha3BvaW50Q291bnQgPSBlbmFibGVkQnJlYWtwb2ludENvdW50
KGJyZWFrcG9pbnRzKTsKLSAgICAgICAgICAgIHZhciBlbmFibGVUaXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkVuYWJs
ZSBhbGwgYnJlYWtwb2ludHMiIDogIkVuYWJsZSBBbGwgQnJlYWtwb2ludHMiKTsKLSAgICAgICAg
ICAgIHZhciBkaXNhYmxlVGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9y
LnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJEaXNhYmxlIGFsbCBicmVha3BvaW50cyIgOiAi
RGlzYWJsZSBBbGwgQnJlYWtwb2ludHMiKTsKLQotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kU2VwYXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oZW5h
YmxlVGl0bGUsIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLnRvZ2dsZUFsbEJyZWFrcG9pbnRzLmJp
bmQodGhpcy5fYnJlYWtwb2ludE1hbmFnZXIsIHRydWUpLCAhKGVuYWJsZUJyZWFrcG9pbnRDb3Vu
dCAhPSBicmVha3BvaW50cy5sZW5ndGgpKTsKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oZGlzYWJsZVRpdGxlLCB0aGlzLl9icmVha3BvaW50TWFuYWdlci50b2dnbGVBbGxCcmVh
a3BvaW50cy5iaW5kKHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLCBmYWxzZSksICEoZW5hYmxlQnJl
YWtwb2ludENvdW50ID4gMSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29udGV4dE1lbnUuc2hv
dygpOwotICAgIH0sCi0KLSAgICBfYWRkTGlzdEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGJl
Zm9yZUVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiAoYmVmb3JlRWxlbWVudCkKLSAgICAgICAg
ICAgIHRoaXMubGlzdEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIGJlZm9yZUVsZW1lbnQp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5saXN0RWxlbWVudC5maXJz
dENoaWxkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5yZW1vdmVDaGlsZCh0
aGlzLmVtcHR5RWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRo
aXMubGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgX3JlbW92ZUxpc3RFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50KQotICAgIHsKLSAgICAg
ICAgdGhpcy5saXN0RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50KTsKLSAgICAgICAgaWYgKCF0
aGlzLmxpc3RFbGVtZW50LmZpcnN0Q2hpbGQpIHsKLSAgICAgICAgICAgIHRoaXMuYm9keUVsZW1l
bnQucmVtb3ZlQ2hpbGQodGhpcy5saXN0RWxlbWVudCk7Ci0gICAgICAgICAgICB0aGlzLmJvZHlF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZW1wdHlFbGVtZW50KTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfY29tcGFyZTogZnVuY3Rpb24oeCwgeSkKLSAgICB7Ci0gICAgICAgIGlmICh4ICE9
PSB5KQotICAgICAgICAgICAgcmV0dXJuIHggPCB5ID8gLTEgOiAxOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9LAotCi0gICAgX2NvbXBhcmVCcmVha3BvaW50czogZnVuY3Rpb24oYjEsIGIyKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBhcmUoYjEudWlTb3VyY2VDb2RlLm9yaWdp
blVSTCgpLCBiMi51aVNvdXJjZUNvZGUub3JpZ2luVVJMKCkpIHx8IHRoaXMuX2NvbXBhcmUoYjEu
bGluZU51bWJlciwgYjIubGluZU51bWJlcik7Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLmxpc3RFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0g
ICAgICAgIGlmICh0aGlzLmxpc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgICAg
IHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5saXN0RWxlbWVudCk7Ci0gICAgICAg
ICAgICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZW1wdHlFbGVtZW50KTsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLl9pdGVtcy5jbGVhcigpOwotICAgIH0sCi0KLSAgICBfX3By
b3RvX186IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludHNT
aWRlYmFyUGFuZX0KLSAqLwotV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnRzU2lkZWJhclBhbmUg
PSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnRzU2lkZWJh
clBhbmUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlhIUiBCcmVha3BvaW50cyIp
KTsKLQotICAgIHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50cyA9IHt9OwotCi0gICAgdmFyIGFkZEJ1
dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwotICAgIGFkZEJ1dHRvbi5j
bGFzc05hbWUgPSAicGFuZS10aXRsZS1idXR0b24gYWRkIjsKLSAgICBhZGRCdXR0b24uYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9hZGRCdXR0b25DbGlja2VkLmJpbmQodGhpcyksIGZh
bHNlKTsKLSAgICBhZGRCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCBY
SFIgYnJlYWtwb2ludCIpOwotICAgIHRoaXMudGl0bGVFbGVtZW50LmFwcGVuZENoaWxkKGFkZEJ1
dHRvbik7Ci0KLSAgICB0aGlzLmVtcHR5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0
bWVudSIsIHRoaXMuX2VtcHR5RWxlbWVudENvbnRleHRNZW51LmJpbmQodGhpcyksIHRydWUpOwot
Ci0gICAgdGhpcy5fcmVzdG9yZUJyZWFrcG9pbnRzKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5YSFJC
cmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKLSAgICBfZW1wdHlFbGVtZW50Q29u
dGV4dE1lbnU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRNZW51
ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudShldmVudCk7Ci0gICAgICAgIGNvbnRleHRN
ZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dl
ckNhc2VNZW51VGl0bGVzKCkgPyAiQWRkIGJyZWFrcG9pbnQiIDogIkFkZCBCcmVha3BvaW50Iiks
IHRoaXMuX2FkZEJ1dHRvbkNsaWNrZWQuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51
LnNob3coKTsKLSAgICB9LAotCi0gICAgX2FkZEJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50KQotICAgICAgICAgICAgZXZlbnQuY29uc3VtZSgp
OwotCi0gICAgICAgIHRoaXMuZXhwYW5kKCk7Ci0KLSAgICAgICAgdmFyIGlucHV0RWxlbWVudENv
bnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKLSAgICAgICAgaW5wdXRFbGVt
ZW50Q29udGFpbmVyLmNsYXNzTmFtZSA9ICJicmVha3BvaW50LWNvbmRpdGlvbiI7Ci0gICAgICAg
IHZhciBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ICAgIGlucHV0RWxlbWVudENvbnRhaW5lci50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiQnJlYWsgd2hlbiBVUkwgY29udGFpbnM6Iik7Ci0gICAgICAgIGlucHV0RWxlbWVudC5j
bGFzc05hbWUgPSAiZWRpdGluZyI7Ci0gICAgICAgIGlucHV0RWxlbWVudC5pZCA9ICJicmVha3Bv
aW50LWNvbmRpdGlvbi1pbnB1dCI7Ci0gICAgICAgIGlucHV0RWxlbWVudENvbnRhaW5lci5hcHBl
bmRDaGlsZChpbnB1dEVsZW1lbnQpOwotICAgICAgICB0aGlzLl9hZGRMaXN0RWxlbWVudChpbnB1
dEVsZW1lbnRDb250YWluZXIsIHRoaXMubGlzdEVsZW1lbnQuZmlyc3RDaGlsZCk7Ci0KLSAgICAg
ICAgZnVuY3Rpb24gZmluaXNoRWRpdGluZyhhY2NlcHQsIGUsIHRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRoaXMuX3JlbW92ZUxpc3RFbGVtZW50KGlucHV0RWxlbWVudENvbnRhaW5lcik7
Ci0gICAgICAgICAgICBpZiAoYWNjZXB0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJl
YWtwb2ludCh0ZXh0LCB0cnVlKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2lu
dHMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb25maWcgPSBu
ZXcgV2ViSW5zcGVjdG9yLkVkaXRpbmdDb25maWcoZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIHRy
dWUpLCBmaW5pc2hFZGl0aW5nLmJpbmQodGhpcywgZmFsc2UpKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLnN0YXJ0RWRpdGluZyhpbnB1dEVsZW1lbnQsIGNvbmZpZyk7Ci0gICAgfSwKLQotICAgIF9z
ZXRCcmVha3BvaW50OiBmdW5jdGlvbih1cmwsIGVuYWJsZWQpCi0gICAgewotICAgICAgICBpZiAo
dXJsIGluIHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50cykKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7Ci0gICAg
ICAgIGVsZW1lbnQuX3VybCA9IHVybDsKLSAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJpbmQodGhpcywgdXJsKSwgdHJ1ZSk7
Ci0KLSAgICAgICAgdmFyIGNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImlucHV0Iik7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVudC5jbGFzc05hbWUgPSAiY2hlY2tib3gt
ZWxlbSI7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKLSAgICAg
ICAgY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSBlbmFibGVkOwotICAgICAgICBjaGVja2JveEVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9jaGVja2JveENsaWNrZWQuYmlu
ZCh0aGlzLCB1cmwpLCBmYWxzZSk7Ci0gICAgICAgIGVsZW1lbnQuX2NoZWNrYm94RWxlbWVudCA9
IGNoZWNrYm94RWxlbWVudDsKLSAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjaGVja2JveEVs
ZW1lbnQpOwotCi0gICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7Ci0gICAgICAgIGlmICghdXJsKQotICAgICAgICAgICAgbGFiZWxFbGVtZW50
LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBbnkgWEhSIik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiVVJMIGNvbnRhaW5zIFwiJXNcIiIsIHVybCk7Ci0gICAgICAgIGxhYmVsRWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJjdXJzb3ItYXV0byIpOwotICAgICAgICBsYWJlbEVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLl9sYWJlbENsaWNrZWQuYmluZCh0aGlz
LCB1cmwpLCBmYWxzZSk7Ci0gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50
KTsKLQotICAgICAgICB2YXIgY3VycmVudEVsZW1lbnQgPSB0aGlzLmxpc3RFbGVtZW50LmZpcnN0
Q2hpbGQ7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCkgewotICAgICAgICAgICAgaWYg
KGN1cnJlbnRFbGVtZW50Ll91cmwgJiYgY3VycmVudEVsZW1lbnQuX3VybCA8IGVsZW1lbnQuX3Vy
bCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0g
Y3VycmVudEVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fYWRk
TGlzdEVsZW1lbnQoZWxlbWVudCwgY3VycmVudEVsZW1lbnQpOwotICAgICAgICB0aGlzLl9icmVh
a3BvaW50RWxlbWVudHNbdXJsXSA9IGVsZW1lbnQ7Ci0gICAgICAgIGlmIChlbmFibGVkKQotICAg
ICAgICAgICAgRE9NRGVidWdnZXJBZ2VudC5zZXRYSFJCcmVha3BvaW50KHVybCk7Ci0gICAgfSwK
LQotICAgIF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICB2
YXIgZWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50c1t1cmxdOwotICAgICAgICBpZiAo
IWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcmVtb3ZlTGlz
dEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50RWxlbWVu
dHNbdXJsXTsKLSAgICAgICAgaWYgKGVsZW1lbnQuX2NoZWNrYm94RWxlbWVudC5jaGVja2VkKQot
ICAgICAgICAgICAgRE9NRGVidWdnZXJBZ2VudC5yZW1vdmVYSFJCcmVha3BvaW50KHVybCk7Ci0g
ICAgfSwKLQotICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24odXJsLCBldmVudCkKLSAgICB7Ci0g
ICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoZXZl
bnQpOwotICAgICAgICBmdW5jdGlvbiByZW1vdmVCcmVha3BvaW50KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludCh1cmwpOwotICAgICAgICAgICAgdGhpcy5f
c2F2ZUJyZWFrcG9pbnRzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQWxs
QnJlYWtwb2ludHMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciB1cmwgaW4gdGhp
cy5fYnJlYWtwb2ludEVsZW1lbnRzKQotICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFr
cG9pbnQodXJsKTsKLSAgICAgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50cygpOwotICAgICAg
ICB9Ci0gICAgICAgIHZhciByZW1vdmVBbGxUaXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZyhX
ZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIlJlbW92ZSBhbGwgYnJlYWtw
b2ludHMiIDogIlJlbW92ZSBBbGwgQnJlYWtwb2ludHMiKTsKLQotICAgICAgICBjb250ZXh0TWVu
dS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJD
YXNlTWVudVRpdGxlcygpID8gIkFkZCBicmVha3BvaW50IiA6ICJBZGQgQnJlYWtwb2ludCIpLCB0
aGlzLl9hZGRCdXR0b25DbGlja2VkLmJpbmQodGhpcykpOwotICAgICAgICBjb250ZXh0TWVudS5h
cHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNl
TWVudVRpdGxlcygpID8gIlJlbW92ZSBicmVha3BvaW50IiA6ICJSZW1vdmUgQnJlYWtwb2ludCIp
LCByZW1vdmVCcmVha3BvaW50LmJpbmQodGhpcykpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKHJlbW92ZUFsbFRpdGxlLCByZW1vdmVBbGxCcmVha3BvaW50cy5iaW5kKHRoaXMpKTsK
LSAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgIH0sCi0KLSAgICBfY2hlY2tib3hDbGlj
a2VkOiBmdW5jdGlvbih1cmwsIGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LnRhcmdl
dC5jaGVja2VkKQotICAgICAgICAgICAgRE9NRGVidWdnZXJBZ2VudC5zZXRYSFJCcmVha3BvaW50
KHVybCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIERPTURlYnVnZ2VyQWdlbnQucmVtb3Zl
WEhSQnJlYWtwb2ludCh1cmwpOwotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKLSAg
ICB9LAotCi0gICAgX2xhYmVsQ2xpY2tlZDogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAg
dmFyIGVsZW1lbnQgPSB0aGlzLl9icmVha3BvaW50RWxlbWVudHNbdXJsXTsKLSAgICAgICAgdmFy
IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAg
aW5wdXRFbGVtZW50LmNsYXNzTmFtZSA9ICJicmVha3BvaW50LWNvbmRpdGlvbiBlZGl0aW5nIjsK
LSAgICAgICAgaW5wdXRFbGVtZW50LnRleHRDb250ZW50ID0gdXJsOwotICAgICAgICB0aGlzLmxp
c3RFbGVtZW50Lmluc2VydEJlZm9yZShpbnB1dEVsZW1lbnQsIGVsZW1lbnQpOwotICAgICAgICBl
bGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmlz
aEVkaXRpbmcoYWNjZXB0LCBlLCB0ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9y
ZW1vdmVMaXN0RWxlbWVudChpbnB1dEVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGFjY2VwdCkg
ewotICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQodXJsKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KHRleHQsIGVsZW1lbnQuX2NoZWNrYm94RWxlbWVu
dC5jaGVja2VkKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKLSAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlU3R5bGVDbGFz
cygiaGlkZGVuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0
aW5nKGlucHV0RWxlbWVudCwgbmV3IFdlYkluc3BlY3Rvci5FZGl0aW5nQ29uZmlnKGZpbmlzaEVk
aXRpbmcuYmluZCh0aGlzLCB0cnVlKSwgZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIGZhbHNlKSkp
OwotICAgIH0sCi0KLSAgICBoaWdobGlnaHRCcmVha3BvaW50OiBmdW5jdGlvbih1cmwpCi0gICAg
ewotICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50c1t1cmxdOwot
ICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMu
ZXhwYW5kKCk7Ci0gICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiYnJlYWtwb2ludC1oaXQi
KTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRFbGVtZW50ID0gZWxlbWVudDsKLSAgICB9LAot
Ci0gICAgY2xlYXJCcmVha3BvaW50SGlnaGxpZ2h0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5faGlnaGxpZ2h0ZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLl9oaWdo
bGlnaHRlZEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiYnJlYWtwb2ludC1oaXQiKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRlZEVsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX3NhdmVCcmVha3BvaW50czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IGJyZWFrcG9pbnRzID0gW107Ci0gICAgICAgIGZvciAodmFyIHVybCBpbiB0aGlzLl9icmVha3Bv
aW50RWxlbWVudHMpCi0gICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHsgdXJsOiB1cmwsIGVu
YWJsZWQ6IHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50c1t1cmxdLl9jaGVja2JveEVsZW1lbnQuY2hl
Y2tlZCB9KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnhockJyZWFrcG9pbnRzLnNl
dChicmVha3BvaW50cyk7Ci0gICAgfSwKLQotICAgIF9yZXN0b3JlQnJlYWtwb2ludHM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5zZXR0
aW5ncy54aHJCcmVha3BvaW50cy5nZXQoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBi
cmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBi
cmVha3BvaW50c1tpXTsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50ICYmIHR5cGVvZiBicmVh
a3BvaW50LnVybCA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtw
b2ludChicmVha3BvaW50LnVybCwgYnJlYWtwb2ludC5lbmFibGVkKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50c1NpZGVi
YXJQYW5lLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5TaWRlYmFyUGFuZX0KLSAqLwotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50c1NpZGViYXJQYW5lID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rv
ci5TaWRlYmFyUGFuZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXZlbnQgTGlz
dGVuZXIgQnJlYWtwb2ludHMiKSk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJicmVh
a3BvaW50c0xpc3QuY3NzIik7Ci0KLSAgICB0aGlzLmNhdGVnb3JpZXNFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgib2wiKTsKLSAgICB0aGlzLmNhdGVnb3JpZXNFbGVtZW50LnRhYklu
ZGV4ID0gMDsKLSAgICB0aGlzLmNhdGVnb3JpZXNFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInByb3Bl
cnRpZXMtdHJlZSIpOwotICAgIHRoaXMuY2F0ZWdvcmllc0VsZW1lbnQuYWRkU3R5bGVDbGFzcygi
ZXZlbnQtbGlzdGVuZXItYnJlYWtwb2ludHMiKTsKLSAgICB0aGlzLmNhdGVnb3JpZXNUcmVlT3V0
bGluZSA9IG5ldyBUcmVlT3V0bGluZSh0aGlzLmNhdGVnb3JpZXNFbGVtZW50KTsKLSAgICB0aGlz
LmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY2F0ZWdvcmllc0VsZW1lbnQpOwotCi0gICAg
dGhpcy5fYnJlYWtwb2ludEl0ZW1zID0ge307Ci0gICAgLy8gRklYTUU6IHVuY29tbWVudCBmb2xs
b3dpbmcgb25jZSBpbnNwZWN0b3Igc3RvcHMgYmVpbmcgZHJvcCB0YXJnZXIgaW4gbWFqb3IgcG9y
dHMuCi0gICAgLy8gT3RoZXJ3aXNlLCBpbnNwZWN0b3IgcGFnZSByZWFjdHMgb24gZHJvcCBldmVu
dCBhbmQgdHJpZXMgdG8gbG9hZCB0aGUgZXZlbnQgZGF0YS4KLSAgICAvLyB0aGlzLl9jcmVhdGVD
YXRlZ29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRyYWciKSwgdHJ1ZSwgWyJkcmFnIiwgImRy
b3AiLCAiZHJhZ3N0YXJ0IiwgImRyYWdlbmQiLCAiZHJhZ2VudGVyIiwgImRyYWdsZWF2ZSIsICJk
cmFnb3ZlciJdKTsKLSAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeShXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkFuaW1hdGlvbiIpLCBmYWxzZSwgWyJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAiY2FuY2Vs
QW5pbWF0aW9uRnJhbWUiLCAiYW5pbWF0aW9uRnJhbWVGaXJlZCJdKTsKLSAgICB0aGlzLl9jcmVh
dGVDYXRlZ29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRyb2wiKSwgdHJ1ZSwgWyJyZXNp
emUiLCAic2Nyb2xsIiwgInpvb20iLCAiZm9jdXMiLCAiYmx1ciIsICJzZWxlY3QiLCAiY2hhbmdl
IiwgInN1Ym1pdCIsICJyZXNldCJdKTsKLSAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeShXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkNsaXBib2FyZCIpLCB0cnVlLCBbImNvcHkiLCAiY3V0IiwgInBhc3Rl
IiwgImJlZm9yZWNvcHkiLCAiYmVmb3JlY3V0IiwgImJlZm9yZXBhc3RlIl0pOwotICAgIHRoaXMu
X2NyZWF0ZUNhdGVnb3J5KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRE9NIE11dGF0aW9uIiksIHRy
dWUsIFsiRE9NQWN0aXZhdGUiLCAiRE9NRm9jdXNJbiIsICJET01Gb2N1c091dCIsICJET01BdHRy
TW9kaWZpZWQiLCAiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgIkRPTU5vZGVJbnNlcnRlZCIs
ICJET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQiLCAiRE9NTm9kZVJlbW92ZWQiLCAiRE9NTm9k
ZVJlbW92ZWRGcm9tRG9jdW1lbnQiLCAiRE9NU3VidHJlZU1vZGlmaWVkIiwgIkRPTUNvbnRlbnRM
b2FkZWQiXSk7Ci0gICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJEZXZpY2UiKSwgdHJ1ZSwgWyJkZXZpY2VvcmllbnRhdGlvbiIsICJkZXZpY2Vtb3Rpb24iXSk7
Ci0gICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJLZXlib2Fy
ZCIpLCB0cnVlLCBbImtleWRvd24iLCAia2V5dXAiLCAia2V5cHJlc3MiLCAiaW5wdXQiXSk7Ci0g
ICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkIiksIHRy
dWUsIFsibG9hZCIsICJ1bmxvYWQiLCAiYWJvcnQiLCAiZXJyb3IiXSk7Ci0gICAgdGhpcy5fY3Jl
YXRlQ2F0ZWdvcnkoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJNb3VzZSIpLCB0cnVlLCBbImNsaWNr
IiwgImRibGNsaWNrIiwgIm1vdXNlZG93biIsICJtb3VzZXVwIiwgIm1vdXNlb3ZlciIsICJtb3Vz
ZW1vdmUiLCAibW91c2VvdXQiLCAibW91c2V3aGVlbCJdKTsKLSAgICB0aGlzLl9jcmVhdGVDYXRl
Z29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRpbWVyIiksIGZhbHNlLCBbInNldFRpbWVyIiwg
ImNsZWFyVGltZXIiLCAidGltZXJGaXJlZCJdKTsKLSAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeShX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRvdWNoIiksIHRydWUsIFsidG91Y2hzdGFydCIsICJ0b3Vj
aG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5jZWwiXSk7Ci0KLSAgICB0aGlzLl9yZXN0b3Jl
QnJlYWtwb2ludHMoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50
c1NpZGViYXJQYW5lLmNhdGVnb3R5TGlzdGVuZXIgPSAibGlzdGVuZXI6IjsKLVdlYkluc3BlY3Rv
ci5FdmVudExpc3RlbmVyQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5jYXRlZ290eUluc3RydW1lbnRh
dGlvbiA9ICJpbnN0cnVtZW50YXRpb246IjsKLQotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJC
cmVha3BvaW50c1NpZGViYXJQYW5lLmV2ZW50TmFtZUZvclVJID0gZnVuY3Rpb24oZXZlbnROYW1l
KQotewotICAgIGlmICghV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGVi
YXJQYW5lLl9ldmVudE5hbWVzRm9yVUkpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLl9ldmVudE5hbWVzRm9yVUkgPSB7Ci0gICAgICAg
ICAgICAiaW5zdHJ1bWVudGF0aW9uOnNldFRpbWVyIjogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJT
ZXQgVGltZXIiKSwKLSAgICAgICAgICAgICJpbnN0cnVtZW50YXRpb246Y2xlYXJUaW1lciI6IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQ2xlYXIgVGltZXIiKSwKLSAgICAgICAgICAgICJpbnN0cnVt
ZW50YXRpb246dGltZXJGaXJlZCI6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGltZXIgRmlyZWQi
KSwKLSAgICAgICAgICAgICJpbnN0cnVtZW50YXRpb246cmVxdWVzdEFuaW1hdGlvbkZyYW1lIjog
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSIpLAotICAgICAg
ICAgICAgImluc3RydW1lbnRhdGlvbjpjYW5jZWxBbmltYXRpb25GcmFtZSI6IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ2FuY2VsIEFuaW1hdGlvbiBGcmFtZSIpLAotICAgICAgICAgICAgImluc3Ry
dW1lbnRhdGlvbjphbmltYXRpb25GcmFtZUZpcmVkIjogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJB
bmltYXRpb24gRnJhbWUgRmlyZWQiKQotICAgICAgICB9OwotICAgIH0KLSAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLl9ldmVudE5hbWVz
Rm9yVUlbZXZlbnROYW1lXSB8fCBldmVudE5hbWUuc3Vic3RyaW5nKGV2ZW50TmFtZS5pbmRleE9m
KCI6IikgKyAxKTsKLX0KLQotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1Np
ZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKLSAgICBfY3JlYXRlQ2F0ZWdvcnk6IGZ1bmN0aW9uKG5h
bWUsIGlzRE9NRXZlbnQsIGV2ZW50TmFtZXMpCi0gICAgewotICAgICAgICB2YXIgY2F0ZWdvcnlJ
dGVtID0ge307Ci0gICAgICAgIGNhdGVnb3J5SXRlbS5lbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50
KG5hbWUpOwotICAgICAgICB0aGlzLmNhdGVnb3JpZXNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZChj
YXRlZ29yeUl0ZW0uZWxlbWVudCk7Ci0gICAgICAgIGNhdGVnb3J5SXRlbS5lbGVtZW50Lmxpc3RJ
dGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJldmVudC1jYXRlZ29yeSIpOwotICAgICAgICBjYXRl
Z29yeUl0ZW0uZWxlbWVudC5zZWxlY3RhYmxlID0gdHJ1ZTsKLQotICAgICAgICBjYXRlZ29yeUl0
ZW0uY2hlY2tib3ggPSB0aGlzLl9jcmVhdGVDaGVja2JveChjYXRlZ29yeUl0ZW0uZWxlbWVudCk7
Ci0gICAgICAgIGNhdGVnb3J5SXRlbS5jaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
IHRoaXMuX2NhdGVnb3J5Q2hlY2tib3hDbGlja2VkLmJpbmQodGhpcywgY2F0ZWdvcnlJdGVtKSwg
dHJ1ZSk7Ci0KLSAgICAgICAgY2F0ZWdvcnlJdGVtLmNoaWxkcmVuID0ge307Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZXZlbnROYW1lcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
dmFyIGV2ZW50TmFtZSA9IChpc0RPTUV2ZW50ID8gV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJC
cmVha3BvaW50c1NpZGViYXJQYW5lLmNhdGVnb3R5TGlzdGVuZXIgOiAgV2ViSW5zcGVjdG9yLkV2
ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLmNhdGVnb3R5SW5zdHJ1bWVudGF0aW9u
KSArIGV2ZW50TmFtZXNbaV07Ci0KLSAgICAgICAgICAgIHZhciBicmVha3BvaW50SXRlbSA9IHt9
OwotICAgICAgICAgICAgdmFyIHRpdGxlID0gV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50c1NpZGViYXJQYW5lLmV2ZW50TmFtZUZvclVJKGV2ZW50TmFtZSk7Ci0gICAgICAgICAg
ICBicmVha3BvaW50SXRlbS5lbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KHRpdGxlKTsKLSAgICAg
ICAgICAgIGNhdGVnb3J5SXRlbS5lbGVtZW50LmFwcGVuZENoaWxkKGJyZWFrcG9pbnRJdGVtLmVs
ZW1lbnQpOwotICAgICAgICAgICAgdmFyIGhpdE1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICAgICAgaGl0TWFya2VyLmNsYXNzTmFtZSA9ICJicmVha3BvaW50
LWhpdC1tYXJrZXIiOwotICAgICAgICAgICAgYnJlYWtwb2ludEl0ZW0uZWxlbWVudC5saXN0SXRl
bUVsZW1lbnQuYXBwZW5kQ2hpbGQoaGl0TWFya2VyKTsKLSAgICAgICAgICAgIGJyZWFrcG9pbnRJ
dGVtLmVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS1jb2RlIik7
Ci0gICAgICAgICAgICBicmVha3BvaW50SXRlbS5lbGVtZW50LnNlbGVjdGFibGUgPSB0cnVlOwot
Ci0gICAgICAgICAgICBicmVha3BvaW50SXRlbS5jaGVja2JveCA9IHRoaXMuX2NyZWF0ZUNoZWNr
Ym94KGJyZWFrcG9pbnRJdGVtLmVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWtwb2ludEl0ZW0u
Y2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9icmVha3BvaW50Q2hlY2ti
b3hDbGlja2VkLmJpbmQodGhpcywgZXZlbnROYW1lKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBicmVh
a3BvaW50SXRlbS5wYXJlbnQgPSBjYXRlZ29yeUl0ZW07Ci0KLSAgICAgICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRJdGVtc1tldmVudE5hbWVdID0gYnJlYWtwb2ludEl0ZW07Ci0gICAgICAgICAgICBj
YXRlZ29yeUl0ZW0uY2hpbGRyZW5bZXZlbnROYW1lXSA9IGJyZWFrcG9pbnRJdGVtOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF9jcmVhdGVDaGVja2JveDogZnVuY3Rpb24odHJlZUVsZW1lbnQp
Ci0gICAgewotICAgICAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJp
bnB1dCIpOwotICAgICAgICBjaGVja2JveC5jbGFzc05hbWUgPSAiY2hlY2tib3gtZWxlbSI7Ci0g
ICAgICAgIGNoZWNrYm94LnR5cGUgPSAiY2hlY2tib3giOwotICAgICAgICB0cmVlRWxlbWVudC5s
aXN0SXRlbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNoZWNrYm94LCB0cmVlRWxlbWVudC5saXN0SXRl
bUVsZW1lbnQuZmlyc3RDaGlsZCk7Ci0gICAgICAgIHJldHVybiBjaGVja2JveDsKLSAgICB9LAot
Ci0gICAgX2NhdGVnb3J5Q2hlY2tib3hDbGlja2VkOiBmdW5jdGlvbihjYXRlZ29yeUl0ZW0pCi0g
ICAgewotICAgICAgICB2YXIgY2hlY2tlZCA9IGNhdGVnb3J5SXRlbS5jaGVja2JveC5jaGVja2Vk
OwotICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gY2F0ZWdvcnlJdGVtLmNoaWxkcmVuKSB7
Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludEl0ZW0gPSBjYXRlZ29yeUl0ZW0uY2hpbGRyZW5b
ZXZlbnROYW1lXTsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50SXRlbS5jaGVja2JveC5jaGVj
a2VkID09PSBjaGVja2VkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKGNoZWNrZWQpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChldmVudE5h
bWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFr
cG9pbnQoZXZlbnROYW1lKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2lu
dHMoKTsKLSAgICB9LAotCi0gICAgX2JyZWFrcG9pbnRDaGVja2JveENsaWNrZWQ6IGZ1bmN0aW9u
KGV2ZW50TmFtZSwgZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNr
ZWQpCi0gICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGV2ZW50TmFtZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoZXZlbnROYW1lKTsKLSAg
ICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7Ci0gICAgfSwKLQotICAgIF9zZXRCcmVha3Bv
aW50OiBmdW5jdGlvbihldmVudE5hbWUpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludEl0
ZW0gPSB0aGlzLl9icmVha3BvaW50SXRlbXNbZXZlbnROYW1lXTsKLSAgICAgICAgaWYgKCFicmVh
a3BvaW50SXRlbSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWtwb2ludEl0ZW0u
Y2hlY2tib3guY2hlY2tlZCA9IHRydWU7Ci0gICAgICAgIGlmIChldmVudE5hbWUuc3RhcnRzV2l0
aChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBhbmUuY2F0ZWdv
dHlMaXN0ZW5lcikpCi0gICAgICAgICAgICBET01EZWJ1Z2dlckFnZW50LnNldEV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50KGV2ZW50TmFtZS5zdWJzdHJpbmcoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLmNhdGVnb3R5TGlzdGVuZXIubGVuZ3RoKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5zdGFydHNXaXRoKFdlYkluc3BlY3Rvci5FdmVudExpc3Rl
bmVyQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5jYXRlZ290eUluc3RydW1lbnRhdGlvbikpCi0gICAg
ICAgICAgICBET01EZWJ1Z2dlckFnZW50LnNldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQoZXZl
bnROYW1lLnN1YnN0cmluZyhXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lk
ZWJhclBhbmUuY2F0ZWdvdHlJbnN0cnVtZW50YXRpb24ubGVuZ3RoKSk7Ci0gICAgICAgIHRoaXMu
X3VwZGF0ZUNhdGVnb3J5Q2hlY2tib3goYnJlYWtwb2ludEl0ZW0ucGFyZW50KTsKLSAgICB9LAot
Ci0gICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSkKLSAgICB7Ci0gICAg
ICAgIHZhciBicmVha3BvaW50SXRlbSA9IHRoaXMuX2JyZWFrcG9pbnRJdGVtc1tldmVudE5hbWVd
OwotICAgICAgICBpZiAoIWJyZWFrcG9pbnRJdGVtKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBicmVha3BvaW50SXRlbS5jaGVja2JveC5jaGVja2VkID0gZmFsc2U7Ci0gICAgICAgIGlm
IChldmVudE5hbWUuc3RhcnRzV2l0aChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnRzU2lkZWJhclBhbmUuY2F0ZWdvdHlMaXN0ZW5lcikpCi0gICAgICAgICAgICBET01EZWJ1Z2dl
ckFnZW50LnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZS5zdWJzdHJpbmco
V2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLmNhdGVnb3R5
TGlzdGVuZXIubGVuZ3RoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5zdGFydHNXaXRo
KFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5jYXRlZ290
eUluc3RydW1lbnRhdGlvbikpCi0gICAgICAgICAgICBET01EZWJ1Z2dlckFnZW50LnJlbW92ZUlu
c3RydW1lbnRhdGlvbkJyZWFrcG9pbnQoZXZlbnROYW1lLnN1YnN0cmluZyhXZWJJbnNwZWN0b3Iu
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBhbmUuY2F0ZWdvdHlJbnN0cnVtZW50YXRp
b24ubGVuZ3RoKSk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUNhdGVnb3J5Q2hlY2tib3goYnJlYWtw
b2ludEl0ZW0ucGFyZW50KTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZUNhdGVnb3J5Q2hlY2tib3g6
IGZ1bmN0aW9uKGNhdGVnb3J5SXRlbSkKLSAgICB7Ci0gICAgICAgIHZhciBoYXNFbmFibGVkID0g
ZmFsc2UsIGhhc0Rpc2FibGVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBp
biBjYXRlZ29yeUl0ZW0uY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50SXRl
bSA9IGNhdGVnb3J5SXRlbS5jaGlsZHJlbltldmVudE5hbWVdOwotICAgICAgICAgICAgaWYgKGJy
ZWFrcG9pbnRJdGVtLmNoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgICAgICAgaGFzRW5hYmxl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaGFzRGlzYWJsZWQg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhdGVnb3J5SXRlbS5jaGVja2JveC5jaGVja2Vk
ID0gaGFzRW5hYmxlZDsKLSAgICAgICAgY2F0ZWdvcnlJdGVtLmNoZWNrYm94LmluZGV0ZXJtaW5h
dGUgPSBoYXNFbmFibGVkICYmIGhhc0Rpc2FibGVkOwotICAgIH0sCi0KLSAgICBoaWdobGlnaHRC
cmVha3BvaW50OiBmdW5jdGlvbihldmVudE5hbWUpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtw
b2ludEl0ZW0gPSB0aGlzLl9icmVha3BvaW50SXRlbXNbZXZlbnROYW1lXTsKLSAgICAgICAgaWYg
KCFicmVha3BvaW50SXRlbSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5leHBh
bmQoKTsKLSAgICAgICAgYnJlYWtwb2ludEl0ZW0ucGFyZW50LmVsZW1lbnQuZXhwYW5kKCk7Ci0g
ICAgICAgIGJyZWFrcG9pbnRJdGVtLmVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xh
c3MoImJyZWFrcG9pbnQtaGl0Iik7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkRWxlbWVudCA9
IGJyZWFrcG9pbnRJdGVtLmVsZW1lbnQubGlzdEl0ZW1FbGVtZW50OwotICAgIH0sCi0KLSAgICBj
bGVhckJyZWFrcG9pbnRIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9oaWdobGlnaHRlZEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVk
RWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJicmVha3BvaW50LWhpdCIpOwotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVkRWxlbWVudDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfc2F2ZUJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtw
b2ludHMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHRoaXMuX2JyZWFrcG9p
bnRJdGVtcykgewotICAgICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRJdGVtc1tldmVudE5h
bWVdLmNoZWNrYm94LmNoZWNrZWQpCi0gICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh7
IGV2ZW50TmFtZTogZXZlbnROYW1lIH0pOwotICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuc2V0KGJyZWFrcG9pbnRzKTsKLSAg
ICB9LAotCi0gICAgX3Jlc3RvcmVCcmVha3BvaW50czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmV2ZW50TGlzdGVuZXJC
cmVha3BvaW50cy5nZXQoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50
c1tpXTsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50ICYmIHR5cGVvZiBicmVha3BvaW50LmV2
ZW50TmFtZSA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2lu
dChicmVha3BvaW50LmV2ZW50TmFtZSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90
b19fOiBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NQVVByb2ZpbGVWaWV3LmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DUFVQcm9maWxlVmlldy5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmZTBjMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NQVVByb2ZpbGVWaWV3LmpzCisrKyAvZGV2L251bGwK
QEAgLTEsNzg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5W
aWV3fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQot
ICovCi1XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcgPSBmdW5jdGlvbihwcm9maWxlKQotewot
ICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRk
U3R5bGVDbGFzcygicHJvZmlsZS12aWV3Iik7Ci0gICAgCi0gICAgdGhpcy5zaG93U2VsZlRpbWVB
c1BlcmNlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZygiY3B1UHJvZmls
ZXJTaG93U2VsZlRpbWVBc1BlcmNlbnQiLCB0cnVlKTsKLSAgICB0aGlzLnNob3dUb3RhbFRpbWVB
c1BlcmNlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZygiY3B1UHJvZmls
ZXJTaG93VG90YWxUaW1lQXNQZXJjZW50IiwgdHJ1ZSk7Ci0gICAgdGhpcy5zaG93QXZlcmFnZVRp
bWVBc1BlcmNlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZygiY3B1UHJv
ZmlsZXJTaG93QXZlcmFnZVRpbWVBc1BlcmNlbnQiLCB0cnVlKTsKLSAgICB0aGlzLl92aWV3VHlw
ZSA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKCJjcHVQcm9maWxlclZpZXci
LCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcuX1R5cGVIZWF2eSk7Ci0KLSAgICB2YXIgY29s
dW1ucyA9IFtdOwotICAgIGNvbHVtbnMucHVzaCh7aWQ6ICJzZWxmIiwgdGl0bGU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiU2VsZiIpLCB3aWR0aDogIjcycHgiLCBzb3J0OiBXZWJJbnNwZWN0b3Iu
RGF0YUdyaWQuT3JkZXIuRGVzY2VuZGluZywgc29ydGFibGU6IHRydWV9KTsKLSAgICBjb2x1bW5z
LnB1c2goe2lkOiAidG90YWwiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUb3RhbCIp
LCB3aWR0aDogIjcycHgiLCBzb3J0YWJsZTogdHJ1ZX0pOwotICAgIGlmICghQ2FwYWJpbGl0aWVz
LnNhbXBsaW5nQ1BVUHJvZmlsZXIpIHsKLSAgICAgICAgY29sdW1ucy5wdXNoKHtpZDogImF2ZXJh
Z2UiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBdmVyYWdlIiksIHdpZHRoOiAiNzJw
eCIsIHNvcnRhYmxlOiB0cnVlfSk7Ci0gICAgICAgIGNvbHVtbnMucHVzaCh7aWQ6ICJjYWxscyIs
IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhbGxzIiksIHdpZHRoOiAiNTRweCIsIHNv
cnRhYmxlOiB0cnVlfSk7Ci0gICAgfQotICAgIGNvbHVtbnMucHVzaCh7aWQ6ICJmdW5jdGlvbiIs
IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZ1bmN0aW9uIiksIGRpc2Nsb3N1cmU6IHRy
dWUsIHNvcnRhYmxlOiB0cnVlfSk7Ci0KLSAgICB0aGlzLmRhdGFHcmlkID0gbmV3IFdlYkluc3Bl
Y3Rvci5EYXRhR3JpZChjb2x1bW5zKTsKLSAgICB0aGlzLmRhdGFHcmlkLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkV2ZW50cy5Tb3J0aW5nQ2hhbmdlZCwgdGhpcy5fc29y
dFByb2ZpbGUsIHRoaXMpOwotICAgIHRoaXMuZGF0YUdyaWQuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURvd25JbkRhdGFHcmlkLmJpbmQodGhpcyksIHRy
dWUpOwotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLmNwdUZsYW1l
Q2hhcnQuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgdGhpcy5fc3BsaXRWaWV3ID0gbmV3IFdlYklu
c3BlY3Rvci5TcGxpdFZpZXcoZmFsc2UsICJmbGFtZUNoYXJ0U3BsaXRMb2NhdGlvbiIpOwotICAg
ICAgICB0aGlzLl9zcGxpdFZpZXcuc2hvdyh0aGlzLmVsZW1lbnQpOwotCi0gICAgICAgIHRoaXMu
ZmxhbWVDaGFydCA9IG5ldyBXZWJJbnNwZWN0b3IuRmxhbWVDaGFydCh0aGlzKTsKLSAgICAgICAg
dGhpcy5mbGFtZUNoYXJ0LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZsYW1lQ2hhcnQu
RXZlbnRzLlNlbGVjdGVkTm9kZSwgdGhpcy5fcmV2ZWFsUHJvZmlsZXJOb2RlLmJpbmQodGhpcykp
OwotICAgICAgICB0aGlzLmZsYW1lQ2hhcnQuc2hvdyh0aGlzLl9zcGxpdFZpZXcuZmlyc3RFbGVt
ZW50KCkpOwotCi0gICAgICAgIHRoaXMuZGF0YUdyaWQuc2hvdyh0aGlzLl9zcGxpdFZpZXcuc2Vj
b25kRWxlbWVudCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGhpcy5kYXRhR3JpZC5zaG93KHRo
aXMuZWxlbWVudCk7Ci0KLSAgICB0aGlzLnZpZXdTZWxlY3RDb21ib0JveCA9IG5ldyBXZWJJbnNw
ZWN0b3IuU3RhdHVzQmFyQ29tYm9Cb3godGhpcy5fY2hhbmdlVmlldy5iaW5kKHRoaXMpKTsKLQot
ICAgIHZhciBoZWF2eVZpZXdPcHRpb24gPSB0aGlzLnZpZXdTZWxlY3RDb21ib0JveC5jcmVhdGVP
cHRpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIZWF2eSAoQm90dG9tIFVwKSIpLCAiIiwgV2Vi
SW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3Ll9UeXBlSGVhdnkpOwotICAgIHZhciB0cmVlVmlld09w
dGlvbiA9IHRoaXMudmlld1NlbGVjdENvbWJvQm94LmNyZWF0ZU9wdGlvbihXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlRyZWUgKFRvcCBEb3duKSIpLCAiIiwgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVW
aWV3Ll9UeXBlVHJlZSk7Ci0gICAgdGhpcy52aWV3U2VsZWN0Q29tYm9Cb3guc2VsZWN0KHRoaXMu
X3ZpZXdUeXBlLmdldCgpID09PSBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcuX1R5cGVIZWF2
eSA/IGhlYXZ5Vmlld09wdGlvbiA6IHRyZWVWaWV3T3B0aW9uKTsKLQotICAgIHRoaXMucGVyY2Vu
dEJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKCIiLCAicGVyY2VudC10
aW1lLXN0YXR1cy1iYXItaXRlbSIpOwotICAgIHRoaXMucGVyY2VudEJ1dHRvbi5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIHRoaXMuX3BlcmNlbnRDbGlja2VkLCB0aGlzKTsKLQotICAgIHRoaXMu
Zm9jdXNCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkZvY3VzIHNlbGVjdGVkIGZ1bmN0aW9uLiIpLCAiZm9jdXMtcHJvZmlsZS1u
b2RlLXN0YXR1cy1iYXItaXRlbSIpOwotICAgIHRoaXMuZm9jdXNCdXR0b24uc2V0RW5hYmxlZChm
YWxzZSk7Ci0gICAgdGhpcy5mb2N1c0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRo
aXMuX2ZvY3VzQ2xpY2tlZCwgdGhpcyk7Ci0KLSAgICB0aGlzLmV4Y2x1ZGVCdXR0b24gPSBuZXcg
V2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkV4Y2x1
ZGUgc2VsZWN0ZWQgZnVuY3Rpb24uIiksICJleGNsdWRlLXByb2ZpbGUtbm9kZS1zdGF0dXMtYmFy
LWl0ZW0iKTsKLSAgICB0aGlzLmV4Y2x1ZGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAg
dGhpcy5leGNsdWRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fZXhjbHVk
ZUNsaWNrZWQsIHRoaXMpOwotCi0gICAgdGhpcy5yZXNldEJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0
b3IuU3RhdHVzQmFyQnV0dG9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVzdG9yZSBhbGwgZnVu
Y3Rpb25zLiIpLCAicmVzZXQtcHJvZmlsZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLnJl
c2V0QnV0dG9uLnZpc2libGUgPSBmYWxzZTsKLSAgICB0aGlzLnJlc2V0QnV0dG9uLmFkZEV2ZW50
TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcmVzZXRDbGlja2VkLCB0aGlzKTsKLQotICAgIHRoaXMu
cHJvZmlsZUhlYWQgPSAvKiogQHR5cGUgez9Qcm9maWxlckFnZW50LkNQVVByb2ZpbGVOb2RlfSAq
LyAobnVsbCk7Ci0gICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTsKLQotICAgIHRoaXMuX2xpbmtp
ZmllciA9IG5ldyBXZWJJbnNwZWN0b3IuTGlua2lmaWVyKG5ldyBXZWJJbnNwZWN0b3IuTGlua2lm
aWVyLkRlZmF1bHRGb3JtYXR0ZXIoMzApKTsKLQotICAgIFByb2ZpbGVyQWdlbnQuZ2V0Q1BVUHJv
ZmlsZSh0aGlzLnByb2ZpbGUudWlkLCB0aGlzLl9nZXRDUFVQcm9maWxlQ2FsbGJhY2suYmluZCh0
aGlzKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5fVHlwZVRyZWUgPSAiVHJl
ZSI7Ci1XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcuX1R5cGVIZWF2eSA9ICJIZWF2eSI7Ci0K
LVdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgX3JldmVhbFBy
b2ZpbGVyTm9kZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY3VycmVudCA9
IHRoaXMucHJvZmlsZURhdGFHcmlkVHJlZS5jaGlsZHJlblswXTsKLQotICAgICAgICB3aGlsZSAo
Y3VycmVudCAmJiBjdXJyZW50LnByb2ZpbGVOb2RlICE9PSBldmVudC5kYXRhKQotICAgICAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQudHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgbnVsbCwgZmFsc2Up
OwotCi0gICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgY3VycmVudC5yZXZlYWxBbmRT
ZWxlY3QoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJy
b3J9IGVycm9yCi0gICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LkNQVVByb2ZpbGV9IHByb2Zp
bGUKLSAgICAgKi8KLSAgICBfZ2V0Q1BVUHJvZmlsZUNhbGxiYWNrOiBmdW5jdGlvbihlcnJvciwg
cHJvZmlsZSkKLSAgICB7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBpZiAoIXByb2ZpbGUuaGVhZCkgewotICAgICAgICAgICAgLy8gUHJvZmlsaW5n
IHdhcyB0ZW50YXRpdmVseSB0ZXJtaW5hdGVkIHdpdGggdGhlICJDbGVhciBhbGwgcHJvZmlsZXMu
IiBidXR0b24uCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5w
cm9maWxlSGVhZCA9IHByb2ZpbGUuaGVhZDsKLSAgICAgICAgdGhpcy5zYW1wbGVzID0gcHJvZmls
ZS5zYW1wbGVzOwotCi0gICAgICAgIGlmIChwcm9maWxlLmlkbGVUaW1lKQotICAgICAgICAgICAg
dGhpcy5faW5qZWN0SWRsZVRpbWVOb2RlKHByb2ZpbGUpOwotCi0gICAgICAgIHRoaXMuX2Fzc2ln
blBhcmVudHNJblByb2ZpbGUoKTsKLSAgICAgICAgaWYgKHRoaXMuc2FtcGxlcykKLSAgICAgICAg
ICAgIHRoaXMuX2J1aWxkSWRUb05vZGVNYXAoKTsKLSAgICAgICAgdGhpcy5fY2hhbmdlVmlldygp
OwotICAgICAgICB0aGlzLl91cGRhdGVQZXJjZW50QnV0dG9uKCk7Ci0gICAgICAgIGlmICh0aGlz
LmZsYW1lQ2hhcnQpCi0gICAgICAgICAgICB0aGlzLmZsYW1lQ2hhcnQudXBkYXRlKCk7Ci0gICAg
fSwKLQotICAgIHN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gW3RoaXMudmlld1NlbGVjdENvbWJvQm94LmVsZW1lbnQsIHRoaXMucGVyY2VudEJ1dHRvbi5l
bGVtZW50LCB0aGlzLmZvY3VzQnV0dG9uLmVsZW1lbnQsIHRoaXMuZXhjbHVkZUJ1dHRvbi5lbGVt
ZW50LCB0aGlzLnJlc2V0QnV0dG9uLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZFRyZWV9Ci0gICAgICovCi0g
ICAgX2dldEJvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9ib3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUpCi0gICAgICAgICAg
ICB0aGlzLl9ib3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9yLkJv
dHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZSh0aGlzLCB0aGlzLnByb2ZpbGVIZWFkKTsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2JvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWRUcmVl
fQotICAgICAqLwotICAgIF9nZXRUb3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl90b3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZSkK
LSAgICAgICAgICAgIHRoaXMuX3RvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlID0gbmV3IFdlYklu
c3BlY3Rvci5Ub3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZSh0aGlzLCB0aGlzLnByb2ZpbGVIZWFk
KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlOwotICAg
IH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3Vy
cmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7Ci0gICAgfSwKLQotICAgIHJlZnJlc2g6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxlY3RlZFByb2ZpbGVOb2RlID0gdGhpcy5kYXRh
R3JpZC5zZWxlY3RlZE5vZGUgPyB0aGlzLmRhdGFHcmlkLnNlbGVjdGVkTm9kZS5wcm9maWxlTm9k
ZSA6IG51bGw7Ci0KLSAgICAgICAgdGhpcy5kYXRhR3JpZC5yb290Tm9kZSgpLnJlbW92ZUNoaWxk
cmVuKCk7Ci0KLSAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9maWxlRGF0YUdyaWRUcmVl
LmNoaWxkcmVuOwotICAgICAgICB2YXIgY291bnQgPSBjaGlsZHJlbi5sZW5ndGg7Ci0KLSAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KQotICAgICAgICAg
ICAgdGhpcy5kYXRhR3JpZC5yb290Tm9kZSgpLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7
Ci0KLSAgICAgICAgaWYgKHNlbGVjdGVkUHJvZmlsZU5vZGUpCi0gICAgICAgICAgICBzZWxlY3Rl
ZFByb2ZpbGVOb2RlLnNlbGVjdGVkID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgcmVmcmVzaFZpc2li
bGVEYXRhOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmRhdGFH
cmlkLnJvb3ROb2RlKCkuY2hpbGRyZW5bMF07Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewotICAg
ICAgICAgICAgY2hpbGQucmVmcmVzaCgpOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC50cmF2
ZXJzZU5leHROb2RlKGZhbHNlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICByZWZyZXNoU2hvd0FzUGVyY2VudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3VwZGF0ZVBlcmNlbnRCdXR0b24oKTsKLSAgICAgICAgdGhpcy5yZWZyZXNoVmlzaWJsZURhdGEo
KTsKLSAgICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9zZWFyY2hSZXN1bHRzKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcHJvZmlsZU5vZGUgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW2ldLnByb2ZpbGVOb2RlOwot
Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHByb2ZpbGVOb2RlLl9zZWFyY2hNYXRjaGVkU2VsZkNv
bHVtbjsKLSAgICAgICAgICAgICAgICBkZWxldGUgcHJvZmlsZU5vZGUuX3NlYXJjaE1hdGNoZWRU
b3RhbENvbHVtbjsKLSAgICAgICAgICAgICAgICBkZWxldGUgcHJvZmlsZU5vZGUuX3NlYXJjaE1h
dGNoZWRBdmVyYWdlQ29sdW1uOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9maWxlTm9kZS5f
c2VhcmNoTWF0Y2hlZENhbGxzQ29sdW1uOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9maWxl
Tm9kZS5fc2VhcmNoTWF0Y2hlZEZ1bmN0aW9uQ29sdW1uOwotCi0gICAgICAgICAgICAgICAgcHJv
ZmlsZU5vZGUucmVmcmVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
ZGVsZXRlIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2s7Ci0gICAgICAgIHRoaXMuX2N1cnJl
bnRTZWFyY2hSZXN1bHRJbmRleCA9IC0xOwotICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0g
W107Ci0gICAgfSwKLQotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBmaW5pc2hl
ZENhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLy8gQ2FsbCBzZWFyY2hDYW5jZWxlZCBzaW5jZSBp
dCB3aWxsIHJlc2V0IGV2ZXJ5dGhpbmcgd2UgbmVlZCBiZWZvcmUgZG9pbmcgYSBuZXcgc2VhcmNo
LgotICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7Ci0KLSAgICAgICAgcXVlcnkgPSBxdWVy
eS50cmltKCk7Ci0KLSAgICAgICAgaWYgKCFxdWVyeS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayA9IGZpbmlzaGVkQ2Fs
bGJhY2s7Ci0KLSAgICAgICAgdmFyIGdyZWF0ZXJUaGFuID0gKHF1ZXJ5LnN0YXJ0c1dpdGgoIj4i
KSk7Ci0gICAgICAgIHZhciBsZXNzVGhhbiA9IChxdWVyeS5zdGFydHNXaXRoKCI8IikpOwotICAg
ICAgICB2YXIgZXF1YWxUbyA9IChxdWVyeS5zdGFydHNXaXRoKCI9IikgfHwgKChncmVhdGVyVGhh
biB8fCBsZXNzVGhhbikgJiYgcXVlcnkuaW5kZXhPZigiPSIpID09PSAxKSk7Ci0gICAgICAgIHZh
ciBwZXJjZW50VW5pdHMgPSAocXVlcnkubGFzdEluZGV4T2YoIiUiKSA9PT0gKHF1ZXJ5Lmxlbmd0
aCAtIDEpKTsKLSAgICAgICAgdmFyIG1pbGxpc2Vjb25kc1VuaXRzID0gKHF1ZXJ5Lmxlbmd0aCA+
IDIgJiYgcXVlcnkubGFzdEluZGV4T2YoIm1zIikgPT09IChxdWVyeS5sZW5ndGggLSAyKSk7Ci0g
ICAgICAgIHZhciBzZWNvbmRzVW5pdHMgPSAoIW1pbGxpc2Vjb25kc1VuaXRzICYmIHF1ZXJ5Lmxh
c3RJbmRleE9mKCJzIikgPT09IChxdWVyeS5sZW5ndGggLSAxKSk7Ci0KLSAgICAgICAgdmFyIHF1
ZXJ5TnVtYmVyID0gcGFyc2VGbG9hdChxdWVyeSk7Ci0gICAgICAgIGlmIChncmVhdGVyVGhhbiB8
fCBsZXNzVGhhbiB8fCBlcXVhbFRvKSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxUbyAmJiAoZ3Jl
YXRlclRoYW4gfHwgbGVzc1RoYW4pKQotICAgICAgICAgICAgICAgIHF1ZXJ5TnVtYmVyID0gcGFy
c2VGbG9hdChxdWVyeS5zdWJzdHJpbmcoMikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHF1ZXJ5TnVtYmVyID0gcGFyc2VGbG9hdChxdWVyeS5zdWJzdHJpbmcoMSkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIHF1ZXJ5TnVtYmVyTWlsbGlzZWNvbmRzID0gKHNlY29uZHNV
bml0cyA/IChxdWVyeU51bWJlciAqIDEwMDApIDogcXVlcnlOdW1iZXIpOwotCi0gICAgICAgIC8v
IE1ha2UgZXF1YWxUbyBpbXBsaWNpdGx5IHRydWUgaWYgaXQgd2Fzbid0IHNwZWNpZmllZCB0aGVy
ZSBpcyBubyBvdGhlciBvcGVyYXRvci4KLSAgICAgICAgaWYgKCFpc05hTihxdWVyeU51bWJlcikg
JiYgIShncmVhdGVyVGhhbiB8fCBsZXNzVGhhbikpCi0gICAgICAgICAgICBlcXVhbFRvID0gdHJ1
ZTsKLQotICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAocXVlcnkuZXNjYXBlRm9yUmVn
RXhwKCksICJpIik7Ci0KLSAgICAgICAgZnVuY3Rpb24gbWF0Y2hlc1F1ZXJ5KC8qUHJvZmlsZURh
dGFHcmlkTm9kZSovIHByb2ZpbGVEYXRhR3JpZE5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRlbGV0ZSBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2VsZkNvbHVtbjsKLSAg
ICAgICAgICAgIGRlbGV0ZSBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkVG90YWxD
b2x1bW47Ci0gICAgICAgICAgICBkZWxldGUgcHJvZmlsZURhdGFHcmlkTm9kZS5fc2VhcmNoTWF0
Y2hlZEF2ZXJhZ2VDb2x1bW47Ci0gICAgICAgICAgICBkZWxldGUgcHJvZmlsZURhdGFHcmlkTm9k
ZS5fc2VhcmNoTWF0Y2hlZENhbGxzQ29sdW1uOwotICAgICAgICAgICAgZGVsZXRlIHByb2ZpbGVE
YXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRGdW5jdGlvbkNvbHVtbjsKLQotICAgICAgICAgICAg
aWYgKHBlcmNlbnRVbml0cykgewotICAgICAgICAgICAgICAgIGlmIChsZXNzVGhhbikgewotICAg
ICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZURhdGFHcmlkTm9kZS5zZWxmUGVyY2VudCA8IHF1
ZXJ5TnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZURhdGFHcmlkTm9kZS5f
c2VhcmNoTWF0Y2hlZFNlbGZDb2x1bW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvZmlsZURhdGFHcmlkTm9kZS50b3RhbFBlcmNlbnQgPCBxdWVyeU51bWJlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRUb3RhbENv
bHVtbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9maWxlRGF0YUdyaWROb2Rl
LmF2ZXJhZ2VQZXJjZW50IDwgcXVlcnlOdW1iZXJNaWxsaXNlY29uZHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQXZlcmFnZUNvbHVt
biA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChncmVhdGVyVGhhbikgewotICAg
ICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZURhdGFHcmlkTm9kZS5zZWxmUGVyY2VudCA+IHF1
ZXJ5TnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZURhdGFHcmlkTm9kZS5f
c2VhcmNoTWF0Y2hlZFNlbGZDb2x1bW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvZmlsZURhdGFHcmlkTm9kZS50b3RhbFBlcmNlbnQgPiBxdWVyeU51bWJlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRUb3RhbENv
bHVtbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9maWxlRGF0YUdyaWROb2Rl
LmF2ZXJhZ2VQZXJjZW50IDwgcXVlcnlOdW1iZXJNaWxsaXNlY29uZHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQXZlcmFnZUNvbHVt
biA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGVxdWFs
VG8pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGVEYXRhR3JpZE5vZGUuc2VsZlBl
cmNlbnQgPT0gcXVlcnlOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlRGF0
YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2VsZkNvbHVtbiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChwcm9maWxlRGF0YUdyaWROb2RlLnRvdGFsUGVyY2VudCA9PSBxdWVyeU51bWJl
cikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUuX3NlYXJjaE1h
dGNoZWRUb3RhbENvbHVtbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9maWxl
RGF0YUdyaWROb2RlLmF2ZXJhZ2VQZXJjZW50IDwgcXVlcnlOdW1iZXJNaWxsaXNlY29uZHMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVk
QXZlcmFnZUNvbHVtbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIGlmIChtaWxsaXNlY29uZHNVbml0cyB8fCBzZWNvbmRzVW5pdHMpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobGVzc1RoYW4pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGVEYXRh
R3JpZE5vZGUuc2VsZlRpbWUgPCBxdWVyeU51bWJlck1pbGxpc2Vjb25kcykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRTZWxmQ29sdW1u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGVEYXRhR3JpZE5vZGUudG90
YWxUaW1lIDwgcXVlcnlOdW1iZXJNaWxsaXNlY29uZHMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkVG90YWxDb2x1bW4gPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZURhdGFHcmlkTm9kZS5hdmVyYWdlVGltZSA8
IHF1ZXJ5TnVtYmVyTWlsbGlzZWNvbmRzKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmls
ZURhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZEF2ZXJhZ2VDb2x1bW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZ3JlYXRlclRoYW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHByb2ZpbGVEYXRhR3JpZE5vZGUuc2VsZlRpbWUgPiBxdWVyeU51bWJlck1pbGxpc2Vjb25k
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUuX3NlYXJjaE1h
dGNoZWRTZWxmQ29sdW1uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb2ZpbGVE
YXRhR3JpZE5vZGUudG90YWxUaW1lID4gcXVlcnlOdW1iZXJNaWxsaXNlY29uZHMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkVG90YWxD
b2x1bW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZURhdGFHcmlkTm9k
ZS5hdmVyYWdlVGltZSA+IHF1ZXJ5TnVtYmVyTWlsbGlzZWNvbmRzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvZmlsZURhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZEF2ZXJhZ2VDb2x1bW4g
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChlcXVhbFRv
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9maWxlRGF0YUdyaWROb2RlLnNlbGZUaW1l
ID09IHF1ZXJ5TnVtYmVyTWlsbGlzZWNvbmRzKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJv
ZmlsZURhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNlbGZDb2x1bW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBpZiAocHJvZmlsZURhdGFHcmlkTm9kZS50b3RhbFRpbWUgPT0gcXVlcnlO
dW1iZXJNaWxsaXNlY29uZHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlRGF0YUdy
aWROb2RlLl9zZWFyY2hNYXRjaGVkVG90YWxDb2x1bW4gPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvZmlsZURhdGFHcmlkTm9kZS5hdmVyYWdlVGltZSA9PSBxdWVyeU51bWJlck1p
bGxpc2Vjb25kcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUu
X3NlYXJjaE1hdGNoZWRBdmVyYWdlQ29sdW1uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChlcXVhbFRvICYmIHByb2Zp
bGVEYXRhR3JpZE5vZGUubnVtYmVyT2ZDYWxscyA9PSBxdWVyeU51bWJlcikKLSAgICAgICAgICAg
ICAgICAgICAgcHJvZmlsZURhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZENhbGxzQ29sdW1uID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JlYXRlclRoYW4gJiYgcHJvZmlsZURhdGFHcmlk
Tm9kZS5udW1iZXJPZkNhbGxzID4gcXVlcnlOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHBy
b2ZpbGVEYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDYWxsc0NvbHVtbiA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKGxlc3NUaGFuICYmIHByb2ZpbGVEYXRhR3JpZE5vZGUubnVtYmVyT2ZD
YWxscyA8IHF1ZXJ5TnVtYmVyKQotICAgICAgICAgICAgICAgICAgICBwcm9maWxlRGF0YUdyaWRO
b2RlLl9zZWFyY2hNYXRjaGVkQ2FsbHNDb2x1bW4gPSB0cnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAocHJvZmlsZURhdGFHcmlkTm9kZS5mdW5jdGlvbk5hbWUubWF0Y2gobWF0
Y2hlcikgfHwgKHByb2ZpbGVEYXRhR3JpZE5vZGUudXJsICYmIHByb2ZpbGVEYXRhR3JpZE5vZGUu
dXJsLm1hdGNoKG1hdGNoZXIpKSkKLSAgICAgICAgICAgICAgICBwcm9maWxlRGF0YUdyaWROb2Rl
Ll9zZWFyY2hNYXRjaGVkRnVuY3Rpb25Db2x1bW4gPSB0cnVlOwotCi0gICAgICAgICAgICBpZiAo
cHJvZmlsZURhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNlbGZDb2x1bW4gfHwKLSAgICAgICAg
ICAgICAgICBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkVG90YWxDb2x1bW4gfHwK
LSAgICAgICAgICAgICAgICBwcm9maWxlRGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQXZlcmFn
ZUNvbHVtbiB8fAotICAgICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUuX3NlYXJjaE1h
dGNoZWRDYWxsc0NvbHVtbiB8fAotICAgICAgICAgICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUu
X3NlYXJjaE1hdGNoZWRGdW5jdGlvbkNvbHVtbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBwcm9maWxlRGF0YUdyaWROb2RlLnJlZnJlc2goKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLnByb2ZpbGVEYXRhR3JpZFRyZWUu
Y2hpbGRyZW5bMF07Ci0KLSAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgICAgIGlm
IChtYXRjaGVzUXVlcnkoY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWFyY2hS
ZXN1bHRzLnB1c2goeyBwcm9maWxlTm9kZTogY3VycmVudCB9KTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQudHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgbnVs
bCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluaXNoZWRDYWxsYmFjayh0aGlzLCB0
aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7Ci0gICAgfSwKLQotICAgIGp1bXBUb0ZpcnN0U2Vh
cmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJl
c3VsdHMgfHwgIXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAwOwotICAgICAgICB0
aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4KTsK
LSAgICB9LAotCi0gICAganVtcFRvTGFzdFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hSZXN1bHRzIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRz
Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fY3VycmVudFNlYXJj
aFJlc3VsdEluZGV4ID0gKHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoIC0gMSk7Ci0gICAgICAg
IHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXgp
OwotICAgIH0sCi0KLSAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMgfHwgIXRoaXMuX3NlYXJjaFJlc3Vs
dHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoKyt0aGlzLl9jdXJy
ZW50U2VhcmNoUmVzdWx0SW5kZXggPj0gdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCi0gICAg
ICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAwOwotICAgICAgICB0aGlz
Ll9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4KTsKLSAg
ICB9LAotCi0gICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5fc2VhcmNoUmVzdWx0cyB8fCAhdGhpcy5fc2VhcmNoUmVzdWx0
cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgtLXRoaXMuX2N1cnJl
bnRTZWFyY2hSZXN1bHRJbmRleCA8IDApCi0gICAgICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNo
UmVzdWx0SW5kZXggPSAodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggLSAxKTsKLSAgICAgICAg
dGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCk7
Ci0gICAgfSwKLQotICAgIHNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPT09IDAp
OwotICAgIH0sCi0KLSAgICBzaG93aW5nTGFzdFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICh0aGlzLl9zZWFyY2hSZXN1bHRzICYmIHRoaXMuX2N1cnJlbnRT
ZWFyY2hSZXN1bHRJbmRleCA9PT0gKHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoIC0gMSkpOwot
ICAgIH0sCi0KLSAgICBfanVtcFRvU2VhcmNoUmVzdWx0OiBmdW5jdGlvbihpbmRleCkKLSAgICB7
Ci0gICAgICAgIHZhciBzZWFyY2hSZXN1bHQgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW2luZGV4XTsK
LSAgICAgICAgaWYgKCFzZWFyY2hSZXN1bHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdmFyIHByb2ZpbGVOb2RlID0gc2VhcmNoUmVzdWx0LnByb2ZpbGVOb2RlOwotICAgICAgICBw
cm9maWxlTm9kZS5yZXZlYWxBbmRTZWxlY3QoKTsKLSAgICB9LAotCi0gICAgX2NoYW5nZVZpZXc6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5wcm9maWxlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHN3aXRjaCAodGhpcy52aWV3U2VsZWN0Q29tYm9Cb3guc2Vs
ZWN0ZWRPcHRpb24oKS52YWx1ZSkgewotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5DUFVQcm9m
aWxlVmlldy5fVHlwZVRyZWU6Ci0gICAgICAgICAgICB0aGlzLnByb2ZpbGVEYXRhR3JpZFRyZWUg
PSB0aGlzLl9nZXRUb3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZSgpOwotICAgICAgICAgICAgdGhp
cy5fc29ydFByb2ZpbGUoKTsKLSAgICAgICAgICAgIHRoaXMuX3ZpZXdUeXBlLnNldChXZWJJbnNw
ZWN0b3IuQ1BVUHJvZmlsZVZpZXcuX1R5cGVUcmVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5fVHlwZUhlYXZ5OgotICAgICAg
ICAgICAgdGhpcy5wcm9maWxlRGF0YUdyaWRUcmVlID0gdGhpcy5fZ2V0Qm90dG9tVXBQcm9maWxl
RGF0YUdyaWRUcmVlKCk7Ci0gICAgICAgICAgICB0aGlzLl9zb3J0UHJvZmlsZSgpOwotICAgICAg
ICAgICAgdGhpcy5fdmlld1R5cGUuc2V0KFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5fVHlw
ZUhlYXZ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdGhpcy5jdXJyZW50UXVlcnkgfHwg
IXRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgfHwgIXRoaXMuX3NlYXJjaFJlc3VsdHMpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gVGhlIGN1cnJlbnQgc2VhcmNoIG5lZWRz
IHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi4gRmlyc3QgbmVnYXRlIG91dCBwcmV2aW91cyBtYXRjaAot
ICAgICAgICAvLyBjb3VudCBieSBjYWxsaW5nIHRoZSBzZWFyY2ggZmluaXNoZWQgY2FsbGJhY2sg
d2l0aCBhIG5lZ2F0aXZlIG51bWJlciBvZiBtYXRjaGVzLgotICAgICAgICAvLyBUaGVuIHBlcmZv
cm0gdGhlIHNlYXJjaCBhZ2FpbiB0aGUgd2l0aCBzYW1lIHF1ZXJ5IGFuZCBjYWxsYmFjay4KLSAg
ICAgICAgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayh0aGlzLCAtdGhpcy5fc2VhcmNoUmVz
dWx0cy5sZW5ndGgpOwotICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2godGhpcy5jdXJyZW50UXVl
cnksIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfcGVyY2Vu
dENsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGN1cnJlbnRTdGF0
ZSA9IHRoaXMuc2hvd1NlbGZUaW1lQXNQZXJjZW50LmdldCgpICYmIHRoaXMuc2hvd1RvdGFsVGlt
ZUFzUGVyY2VudC5nZXQoKSAmJiB0aGlzLnNob3dBdmVyYWdlVGltZUFzUGVyY2VudC5nZXQoKTsK
LSAgICAgICAgdGhpcy5zaG93U2VsZlRpbWVBc1BlcmNlbnQuc2V0KCFjdXJyZW50U3RhdGUpOwot
ICAgICAgICB0aGlzLnNob3dUb3RhbFRpbWVBc1BlcmNlbnQuc2V0KCFjdXJyZW50U3RhdGUpOwot
ICAgICAgICB0aGlzLnNob3dBdmVyYWdlVGltZUFzUGVyY2VudC5zZXQoIWN1cnJlbnRTdGF0ZSk7
Ci0gICAgICAgIHRoaXMucmVmcmVzaFNob3dBc1BlcmNlbnRzKCk7Ci0gICAgfSwKLQotICAgIF91
cGRhdGVQZXJjZW50QnV0dG9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5z
aG93U2VsZlRpbWVBc1BlcmNlbnQuZ2V0KCkgJiYgdGhpcy5zaG93VG90YWxUaW1lQXNQZXJjZW50
LmdldCgpICYmIHRoaXMuc2hvd0F2ZXJhZ2VUaW1lQXNQZXJjZW50LmdldCgpKSB7Ci0gICAgICAg
ICAgICB0aGlzLnBlcmNlbnRCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNo
b3cgYWJzb2x1dGUgdG90YWwgYW5kIHNlbGYgdGltZXMuIik7Ci0gICAgICAgICAgICB0aGlzLnBl
cmNlbnRCdXR0b24udG9nZ2xlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICB0aGlzLnBlcmNlbnRCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cg
dG90YWwgYW5kIHNlbGYgdGltZXMgYXMgcGVyY2VudGFnZXMuIik7Ci0gICAgICAgICAgICB0aGlz
LnBlcmNlbnRCdXR0b24udG9nZ2xlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IF9mb2N1c0NsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
LmRhdGFHcmlkLnNlbGVjdGVkTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
aGlzLnJlc2V0QnV0dG9uLnZpc2libGUgPSB0cnVlOwotICAgICAgICB0aGlzLnByb2ZpbGVEYXRh
R3JpZFRyZWUuZm9jdXModGhpcy5kYXRhR3JpZC5zZWxlY3RlZE5vZGUpOwotICAgICAgICB0aGlz
LnJlZnJlc2goKTsKLSAgICAgICAgdGhpcy5yZWZyZXNoVmlzaWJsZURhdGEoKTsKLSAgICB9LAot
Ci0gICAgX2V4Y2x1ZGVDbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzZWxlY3RlZE5vZGUgPSB0aGlzLmRhdGFHcmlkLnNlbGVjdGVkTm9kZQotCi0gICAgICAgIGlm
ICghc2VsZWN0ZWROb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHNlbGVjdGVk
Tm9kZS5kZXNlbGVjdCgpOwotCi0gICAgICAgIHRoaXMucmVzZXRCdXR0b24udmlzaWJsZSA9IHRy
dWU7Ci0gICAgICAgIHRoaXMucHJvZmlsZURhdGFHcmlkVHJlZS5leGNsdWRlKHNlbGVjdGVkTm9k
ZSk7Ci0gICAgICAgIHRoaXMucmVmcmVzaCgpOwotICAgICAgICB0aGlzLnJlZnJlc2hWaXNpYmxl
RGF0YSgpOwotICAgIH0sCi0KLSAgICBfcmVzZXRDbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMucmVzZXRCdXR0b24udmlzaWJsZSA9IGZhbHNlOwotICAgICAgICB0
aGlzLnByb2ZpbGVEYXRhR3JpZFRyZWUucmVzdG9yZSgpOwotICAgICAgICB0aGlzLl9saW5raWZp
ZXIucmVzZXQoKTsKLSAgICAgICAgdGhpcy5yZWZyZXNoKCk7Ci0gICAgICAgIHRoaXMucmVmcmVz
aFZpc2libGVEYXRhKCk7Ci0gICAgfSwKLQotICAgIF9kYXRhR3JpZE5vZGVTZWxlY3RlZDogZnVu
Y3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuZm9jdXNCdXR0b24uc2V0RW5hYmxlZCh0
cnVlKTsKLSAgICAgICAgdGhpcy5leGNsdWRlQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAg
fSwKLQotICAgIF9kYXRhR3JpZE5vZGVEZXNlbGVjdGVkOiBmdW5jdGlvbihub2RlKQotICAgIHsK
LSAgICAgICAgdGhpcy5mb2N1c0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgdGhp
cy5leGNsdWRlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0sCi0KLSAgICBfc29ydFBy
b2ZpbGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0gdGhp
cy5kYXRhR3JpZC5pc1NvcnRPcmRlckFzY2VuZGluZygpOwotICAgICAgICB2YXIgc29ydENvbHVt
bklkZW50aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyKCk7Ci0gICAg
ICAgIHZhciBzb3J0UHJvcGVydHkgPSB7Ci0gICAgICAgICAgICAgICAgImF2ZXJhZ2UiOiAiYXZl
cmFnZVRpbWUiLAotICAgICAgICAgICAgICAgICJzZWxmIjogInNlbGZUaW1lIiwKLSAgICAgICAg
ICAgICAgICAidG90YWwiOiAidG90YWxUaW1lIiwKLSAgICAgICAgICAgICAgICAiY2FsbHMiOiAi
bnVtYmVyT2ZDYWxscyIsCi0gICAgICAgICAgICAgICAgImZ1bmN0aW9uIjogImZ1bmN0aW9uTmFt
ZSIKLSAgICAgICAgICAgIH1bc29ydENvbHVtbklkZW50aWZpZXJdOwotCi0gICAgICAgIHRoaXMu
cHJvZmlsZURhdGFHcmlkVHJlZS5zb3J0KFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWRUcmVl
LnByb3BlcnR5Q29tcGFyYXRvcihzb3J0UHJvcGVydHksIHNvcnRBc2NlbmRpbmcpKTsKLQotICAg
ICAgICB0aGlzLnJlZnJlc2goKTsKLSAgICB9LAotCi0gICAgX21vdXNlRG93bkluRGF0YUdyaWQ6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA8IDIpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNlbGwgPSBldmVudC50YXJnZXQuZW5j
bG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgidGQiKTsKLSAgICAgICAgaWYgKCFjZWxsIHx8
ICghY2VsbC5oYXNTdHlsZUNsYXNzKCJ0b3RhbC1jb2x1bW4iKSAmJiAhY2VsbC5oYXNTdHlsZUNs
YXNzKCJzZWxmLWNvbHVtbiIpICYmICFjZWxsLmhhc1N0eWxlQ2xhc3MoImF2ZXJhZ2UtY29sdW1u
IikpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChjZWxsLmhhc1N0eWxlQ2xh
c3MoInRvdGFsLWNvbHVtbiIpKQotICAgICAgICAgICAgdGhpcy5zaG93VG90YWxUaW1lQXNQZXJj
ZW50LnNldCghdGhpcy5zaG93VG90YWxUaW1lQXNQZXJjZW50LmdldCgpKTsKLSAgICAgICAgZWxz
ZSBpZiAoY2VsbC5oYXNTdHlsZUNsYXNzKCJzZWxmLWNvbHVtbiIpKQotICAgICAgICAgICAgdGhp
cy5zaG93U2VsZlRpbWVBc1BlcmNlbnQuc2V0KCF0aGlzLnNob3dTZWxmVGltZUFzUGVyY2VudC5n
ZXQoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGNlbGwuaGFzU3R5bGVDbGFzcygiYXZlcmFnZS1jb2x1
bW4iKSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0F2ZXJhZ2VUaW1lQXNQZXJjZW50LnNldCghdGhp
cy5zaG93QXZlcmFnZVRpbWVBc1BlcmNlbnQuZ2V0KCkpOwotCi0gICAgICAgIHRoaXMucmVmcmVz
aFNob3dBc1BlcmNlbnRzKCk7Ci0KLSAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICB9
LAotCi0gICAgX2Fzc2lnblBhcmVudHNJblByb2ZpbGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciBoZWFkID0gdGhpcy5wcm9maWxlSGVhZDsKLSAgICAgICAgaGVhZC5wYXJlbnQgPSBu
dWxsOwotICAgICAgICBoZWFkLmhlYWQgPSBudWxsOwotICAgICAgICB2YXIgbm9kZXNUb1RyYXZl
cnNlID0gWyB7IHBhcmVudDogaGVhZCwgY2hpbGRyZW46IGhlYWQuY2hpbGRyZW4gfSBdOwotICAg
ICAgICB3aGlsZSAobm9kZXNUb1RyYXZlcnNlLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIHZh
ciBwYWlyID0gbm9kZXNUb1RyYXZlcnNlLnBvcCgpOwotICAgICAgICAgICAgdmFyIHBhcmVudCA9
IHBhaXIucGFyZW50OwotICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gcGFpci5jaGlsZHJlbjsK
LSAgICAgICAgICAgIHZhciBsZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGRy
ZW5baV0uaGVhZCA9IGhlYWQ7Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0ucGFyZW50ID0g
cGFyZW50OwotICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5jaGlsZHJlbi5sZW5ndGgg
PiAwKQotICAgICAgICAgICAgICAgICAgICBub2Rlc1RvVHJhdmVyc2UucHVzaCh7IHBhcmVudDog
Y2hpbGRyZW5baV0sIGNoaWxkcmVuOiBjaGlsZHJlbltpXS5jaGlsZHJlbiB9KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfYnVpbGRJZFRvTm9kZU1hcDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdmFyIGlkVG9Ob2RlID0gdGhpcy5faWRUb05vZGUgPSB7fTsK
LSAgICAgICAgdmFyIHN0YWNrID0gW3RoaXMucHJvZmlsZUhlYWRdOwotICAgICAgICB3aGlsZSAo
c3RhY2subGVuZ3RoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHN0YWNrLnBvcCgpOwotICAg
ICAgICAgICAgaWRUb05vZGVbbm9kZS5pZF0gPSBub2RlOwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHN0
YWNrLnB1c2gobm9kZS5jaGlsZHJlbltpXSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LkNQVVByb2ZpbGV9IHByb2ZpbGUKLSAgICAg
Ki8KLSAgICBfaW5qZWN0SWRsZVRpbWVOb2RlOiBmdW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAg
ICAgICAgdmFyIGlkbGVUaW1lID0gcHJvZmlsZS5pZGxlVGltZTsKLSAgICAgICAgdmFyIG5vZGVz
ID0gcHJvZmlsZS5oZWFkLmNoaWxkcmVuOwotCi0gICAgICAgIHZhciBwcm9ncmFtTm9kZSA9IHtz
ZWxmVGltZTogMH07Ci0gICAgICAgIGZvciAodmFyIGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKG5vZGVzW2ldLmZ1bmN0aW9uTmFtZSA9PT0gIihw
cm9ncmFtKSIpIHsKLSAgICAgICAgICAgICAgICBwcm9ncmFtTm9kZSA9IG5vZGVzW2ldOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHZh
ciBwcm9ncmFtVGltZSA9IHByb2dyYW1Ob2RlLnNlbGZUaW1lOwotICAgICAgICBpZiAoaWRsZVRp
bWUgPiBwcm9ncmFtVGltZSkKLSAgICAgICAgICAgIGlkbGVUaW1lID0gcHJvZ3JhbVRpbWU7Ci0g
ICAgICAgIHByb2dyYW1UaW1lID0gcHJvZ3JhbVRpbWUgLSBpZGxlVGltZTsKLSAgICAgICAgcHJv
Z3JhbU5vZGUuc2VsZlRpbWUgPSBwcm9ncmFtVGltZTsKLSAgICAgICAgcHJvZ3JhbU5vZGUudG90
YWxUaW1lID0gcHJvZ3JhbVRpbWU7Ci0gICAgICAgIHZhciBpZGxlTm9kZSA9IHsKLSAgICAgICAg
ICAgIGZ1bmN0aW9uTmFtZTogIihpZGxlKSIsCi0gICAgICAgICAgICB1cmw6IG51bGwsCi0gICAg
ICAgICAgICBsaW5lTnVtYmVyOiAwLAotICAgICAgICAgICAgdG90YWxUaW1lOiBpZGxlVGltZSwK
LSAgICAgICAgICAgIHNlbGZUaW1lOiBpZGxlVGltZSwKLSAgICAgICAgICAgIG51bWJlck9mQ2Fs
bHM6IDAsCi0gICAgICAgICAgICB2aXNpYmxlOiB0cnVlLAotICAgICAgICAgICAgY2FsbFVJRDog
MCwKLSAgICAgICAgICAgIGNoaWxkcmVuOiBbXQotICAgICAgICB9OwotICAgICAgICBub2Rlcy5w
dXNoKGlkbGVOb2RlKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmll
dy5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGV9Ci0gKiBAaW1wbGVtZW50cyB7UHJvZmlsZXJBZ2VudC5EaXNw
YXRjaGVyfQotICovCi1XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUgPSBmdW5jdGlvbigpCi17
Ci0gICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkNQ
VVByb2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb2xsZWN0IEphdmFT
Y3JpcHQgQ1BVIFByb2ZpbGUiKSk7Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclByb2Zp
bGVyRGlzcGF0Y2hlcih0aGlzKTsKLSAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxzZTsKLSAgICBX
ZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUuaW5zdGFuY2UgPSB0aGlzOwotfQotCi1XZWJJbnNw
ZWN0b3IuQ1BVUHJvZmlsZVR5cGUuVHlwZUlkID0gIkNQVSI7Ci0KLVdlYkluc3BlY3Rvci5DUFVQ
cm9maWxlVHlwZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IGJ1dHRvblRvb2x0aXAoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29yZGluZyA/IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
U3RvcCBDUFUgcHJvZmlsaW5nLiIpIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdGFydCBDUFUg
cHJvZmlsaW5nLiIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAg
KiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZWNvcmRpbmcpIHsKLSAgICAgICAgICAgIHRo
aXMuc3RvcFJlY29yZGluZ1Byb2ZpbGUoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmdQcm9maWxlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBnZXQg
dHJlZUl0ZW1UaXRsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJDUFUgUFJPRklMRVMiKTsKLSAgICB9LAotCi0gICAgZ2V0IGRlc2NyaXB0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNQVSBwcm9maWxlcyBz
aG93IHdoZXJlIHRoZSBleGVjdXRpb24gdGltZSBpcyBzcGVudCBpbiB5b3VyIHBhZ2UncyBKYXZh
U2NyaXB0IGZ1bmN0aW9ucy4iKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtQ
cm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGVIZWFkZXIKLSAgICAgKi8KLSAgICBh
ZGRQcm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlSGVhZGVyKQotICAgIHsKLSAgICAgICAg
dGhpcy5hZGRQcm9maWxlKHRoaXMuY3JlYXRlUHJvZmlsZShwcm9maWxlSGVhZGVyKSk7Ci0gICAg
fSwKLQotICAgIGlzUmVjb3JkaW5nUHJvZmlsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3JlY29yZGluZzsKLSAgICB9LAotCi0gICAgc3RhcnRSZWNvcmRpbmdQcm9m
aWxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSB0cnVlOwot
ICAgICAgICBXZWJJbnNwZWN0b3IudXNlck1ldHJpY3MuUHJvZmlsZXNDUFVQcm9maWxlVGFrZW4u
cmVjb3JkKCk7Ci0gICAgICAgIFByb2ZpbGVyQWdlbnQuc3RhcnQoKTsKLSAgICB9LAotCi0gICAg
c3RvcFJlY29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jl
Y29yZGluZyA9IGZhbHNlOwotICAgICAgICBQcm9maWxlckFnZW50LnN0b3AoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBpc1Byb2ZpbGluZwotICAgICAqLwot
ICAgIHNldFJlY29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9uKGlzUHJvZmlsaW5nKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fcmVjb3JkaW5nID0gaXNQcm9maWxpbmc7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdGl0bGUKLSAgICAgKiBA
cmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gICAgICovCi0gICAgY3JlYXRl
VGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odGl0bGUpCi0gICAgewotICAgICAgICB0aXRsZSA9
IHRpdGxlIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVjb3JkaW5nXHUyMDI2Iik7Ci0gICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVIZWFkZXIodGhpcywgdGl0bGUp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge1By
b2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAqIEByZXR1cm4geyFXZWJJ
bnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KLSAgICAgKi8KLSAgICBjcmVhdGVQcm9maWxlOiBmdW5j
dGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1BV
UHJvZmlsZUhlYWRlcih0aGlzLCBwcm9maWxlLnRpdGxlLCBwcm9maWxlLnVpZCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rv
ci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCi0gICAgICovCi0gICAgcmVtb3ZlUHJvZmlsZTogZnVu
Y3Rpb24ocHJvZmlsZSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5w
cm90b3R5cGUucmVtb3ZlUHJvZmlsZS5jYWxsKHRoaXMsIHByb2ZpbGUpOwotICAgICAgICBpZiAo
IXByb2ZpbGUuaXNUZW1wb3JhcnkpCi0gICAgICAgICAgICBQcm9maWxlckFnZW50LnJlbW92ZVBy
b2ZpbGUodGhpcy5pZCwgcHJvZmlsZS51aWQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
b3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHRoaXM6V2ViSW5zcGVjdG9yLlByb2Zp
bGVUeXBlLCA/c3RyaW5nLCBBcnJheS48UHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyPil9IHBv
cHVsYXRlQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBfcmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQ6
IGZ1bmN0aW9uKHBvcHVsYXRlQ2FsbGJhY2spCi0gICAgewotICAgICAgICBQcm9maWxlckFnZW50
LmdldFByb2ZpbGVIZWFkZXJzKHBvcHVsYXRlQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICByZXNldFByb2ZpbGVzOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl9yZXNldCgpOwotICAgIH0sCi0KLSAgICAvKiogQGRlcHJl
Y2F0ZWQgVG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBwcm90b2NvbCAqLwotICAgIGFkZEhlYXBTbmFw
c2hvdENodW5rOiBmdW5jdGlvbih1aWQsIGNodW5rKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJOZXZlciBjYWxsZWQiKTsKLSAgICB9LAotCi0gICAgLyoqIEBkZXByZWNhdGVkIFRv
IGJlIHJlbW92ZWQgZnJvbSB0aGUgcHJvdG9jb2wgKi8KLSAgICBmaW5pc2hIZWFwU25hcHNob3Q6
IGZ1bmN0aW9uKHVpZCkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTmV2ZXIgY2Fs
bGVkIik7Ci0gICAgfSwKLQotICAgIC8qKiBAZGVwcmVjYXRlZCBUbyBiZSByZW1vdmVkIGZyb20g
dGhlIHByb3RvY29sICovCi0gICAgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3M6IGZ1bmN0aW9u
KGRvbmUsIHRvdGFsKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOZXZlciBjYWxs
ZWQiKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUu
cHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuQ1BVUHJvZmls
ZVR5cGV9IHR5cGUKLSAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICogQHBhcmFtIHtudW1iZXI9
fSB1aWQKLSAqLwotV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVIZWFkZXIgPSBmdW5jdGlvbih0eXBl
LCB0aXRsZSwgdWlkKQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyLmNhbGwodGhp
cywgdHlwZSwgdGl0bGUsIHVpZCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5DUFVQcm9maWxlSGVhZGVy
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICBj
cmVhdGVTaWRlYmFyVHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQodGhpcywgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJQcm9maWxlICVkIiksICJwcm9maWxlLXNpZGViYXItdHJlZS1pdGVt
Iik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKi8KLSAgICBj
cmVhdGVWaWV3OiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcodGhpcyk7Ci0gICAgfSwKLQotICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU01ldGFkYXRhLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NNZXRhZGF0YS5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM0YTA5Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU01ldGFkYXRhLmpzCisrKyAvZGV2L251bGwKQEAg
LTEsOTYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTmlraXRhIFZhc2lseWV2
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEpvc2VwaCBQZWNv
cmFyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge0Fy
cmF5LjxDU1NBZ2VudC5DU1NQcm9wZXJ0eUluZm98c3RyaW5nPn0gcHJvcGVydGllcwotICovCi1X
ZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKQotewotICAgIHRo
aXMuX3ZhbHVlcyA9IC8qKiAhQXJyYXkuPHN0cmluZz4gKi8gKFtdKTsKLSAgICB0aGlzLl9sb25n
aGFuZHMgPSB7fTsKLSAgICB0aGlzLl9zaG9ydGhhbmRzID0ge307Ci0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9
IHByb3BlcnRpZXNbaV07Ci0gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICJzdHJpbmci
KSB7Ci0gICAgICAgICAgICB0aGlzLl92YWx1ZXMucHVzaChwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9w
ZXJ0eS5uYW1lOwotICAgICAgICB0aGlzLl92YWx1ZXMucHVzaChwcm9wZXJ0eU5hbWUpOwotCi0g
ICAgICAgIHZhciBsb25naGFuZHMgPSBwcm9wZXJ0aWVzW2ldLmxvbmdoYW5kczsKLSAgICAgICAg
aWYgKGxvbmdoYW5kcykgewotICAgICAgICAgICAgdGhpcy5fbG9uZ2hhbmRzW3Byb3BlcnR5TmFt
ZV0gPSBsb25naGFuZHM7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxvbmdoYW5k
cy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgIHZhciBsb25naGFuZE5hbWUgPSBsb25n
aGFuZHNbal07Ci0gICAgICAgICAgICAgICAgdmFyIHNob3J0aGFuZHMgPSB0aGlzLl9zaG9ydGhh
bmRzW2xvbmdoYW5kTmFtZV07Ci0gICAgICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmRzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZHMgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fc2hvcnRoYW5kc1tsb25naGFuZE5hbWVdID0gc2hvcnRoYW5kczsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgc2hvcnRoYW5kcy5wdXNoKHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdGhpcy5fdmFsdWVzLnNvcnQoKTsK
LX0KLQotLyoqCi0gKiBAdHlwZSB7IVdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YX0KLSAqLwotV2Vi
SW5zcGVjdG9yLkNTU01ldGFkYXRhLmNzc1Byb3BlcnRpZXNNZXRhaW5mbyA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ1NTTWV0YWRhdGEoW10pOwotCi1XZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuaXNDb2xv
ckF3YXJlUHJvcGVydHkgPSBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5DU1NNZXRhZGF0YS5fY29sb3JBd2FyZVByb3BlcnRpZXNbcHJvcGVydHlOYW1l
XSA9PT0gdHJ1ZTsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLmNvbG9ycyA9IGZ1bmN0
aW9uKCkKLXsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5fY29sb3JzS2V5U2V0
KQotICAgICAgICBXZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuX2NvbG9yc0tleVNldCA9IFdlYklu
c3BlY3Rvci5DU1NNZXRhZGF0YS5fY29sb3JzLmtleVNldCgpOwotICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuQ1NTTWV0YWRhdGEuX2NvbG9yc0tleVNldDsKLX0KLQotLy8gVGFrZW4gZnJvbSBodHRw
Oi8vd3d3LnczLm9yZy9UUi9DU1MyMS9wcm9waWR4Lmh0bWwuCi1XZWJJbnNwZWN0b3IuQ1NTTWV0
YWRhdGEuSW5oZXJpdGVkUHJvcGVydGllcyA9IFsKLSAgICAiYXppbXV0aCIsICJib3JkZXItY29s
bGFwc2UiLCAiYm9yZGVyLXNwYWNpbmciLCAiY2FwdGlvbi1zaWRlIiwgImNvbG9yIiwgImN1cnNv
ciIsICJkaXJlY3Rpb24iLCAiZWxldmF0aW9uIiwKLSAgICAiZW1wdHktY2VsbHMiLCAiZm9udC1m
YW1pbHkiLCAiZm9udC1zaXplIiwgImZvbnQtc3R5bGUiLCAiZm9udC12YXJpYW50IiwgImZvbnQt
d2VpZ2h0IiwgImZvbnQiLCAibGV0dGVyLXNwYWNpbmciLAotICAgICJsaW5lLWhlaWdodCIsICJs
aXN0LXN0eWxlLWltYWdlIiwgImxpc3Qtc3R5bGUtcG9zaXRpb24iLCAibGlzdC1zdHlsZS10eXBl
IiwgImxpc3Qtc3R5bGUiLCAib3JwaGFucyIsICJwaXRjaC1yYW5nZSIsCi0gICAgInBpdGNoIiwg
InF1b3RlcyIsICJyZXNpemUiLCAicmljaG5lc3MiLCAic3BlYWstaGVhZGVyIiwgInNwZWFrLW51
bWVyYWwiLCAic3BlYWstcHVuY3R1YXRpb24iLCAic3BlYWsiLCAic3BlZWNoLXJhdGUiLCAic3Ry
ZXNzIiwKLSAgICAidGV4dC1hbGlnbiIsICJ0ZXh0LWluZGVudCIsICJ0ZXh0LXRyYW5zZm9ybSIs
ICJ0ZXh0LXNoYWRvdyIsICJ2aXNpYmlsaXR5IiwgInZvaWNlLWZhbWlseSIsICJ2b2x1bWUiLCAi
d2hpdGUtc3BhY2UiLCAid2lkb3dzIiwKLSAgICAid29yZC1zcGFjaW5nIiwgInpvb20iCi1dLmtl
eVNldCgpOwotCi1XZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuX2NvbG9ycyA9IFsKLSAgICAiYXF1
YSIsICJibGFjayIsICJibHVlIiwgImZ1Y2hzaWEiLCAiZ3JheSIsICJncmVlbiIsICJsaW1lIiwg
Im1hcm9vbiIsICJuYXZ5IiwgIm9saXZlIiwgIm9yYW5nZSIsICJwdXJwbGUiLCAicmVkIiwKLSAg
ICAic2lsdmVyIiwgInRlYWwiLCAid2hpdGUiLCAieWVsbG93IiwgInRyYW5zcGFyZW50IiwgImN1
cnJlbnRjb2xvciIsICJncmV5IiwgImFsaWNlYmx1ZSIsICJhbnRpcXVld2hpdGUiLAotICAgICJh
cXVhbWFyaW5lIiwgImF6dXJlIiwgImJlaWdlIiwgImJpc3F1ZSIsICJibGFuY2hlZGFsbW9uZCIs
ICJibHVldmlvbGV0IiwgImJyb3duIiwgImJ1cmx5d29vZCIsICJjYWRldGJsdWUiLAotICAgICJj
aGFydHJldXNlIiwgImNob2NvbGF0ZSIsICJjb3JhbCIsICJjb3JuZmxvd2VyYmx1ZSIsICJjb3Ju
c2lsayIsICJjcmltc29uIiwgImN5YW4iLCAiZGFya2JsdWUiLCAiZGFya2N5YW4iLAotICAgICJk
YXJrZ29sZGVucm9kIiwgImRhcmtncmF5IiwgImRhcmtncmVlbiIsICJkYXJrZ3JleSIsICJkYXJr
a2hha2kiLCAiZGFya21hZ2VudGEiLCAiZGFya29saXZlZ3JlZW4iLCAiZGFya29yYW5nZSIsCi0g
ICAgImRhcmtvcmNoaWQiLCAiZGFya3JlZCIsICJkYXJrc2FsbW9uIiwgImRhcmtzZWFncmVlbiIs
ICJkYXJrc2xhdGVibHVlIiwgImRhcmtzbGF0ZWdyYXkiLCAiZGFya3NsYXRlZ3JleSIsCi0gICAg
ImRhcmt0dXJxdW9pc2UiLCAiZGFya3Zpb2xldCIsICJkZWVwcGluayIsICJkZWVwc2t5Ymx1ZSIs
ICJkaW1ncmF5IiwgImRpbWdyZXkiLCAiZG9kZ2VyYmx1ZSIsICJmaXJlYnJpY2siLAotICAgICJm
bG9yYWx3aGl0ZSIsICJmb3Jlc3RncmVlbiIsICJnYWluc2Jvcm8iLCAiZ2hvc3R3aGl0ZSIsICJn
b2xkIiwgImdvbGRlbnJvZCIsICJncmVlbnllbGxvdyIsICJob25leWRldyIsICJob3RwaW5rIiwK
LSAgICAiaW5kaWFucmVkIiwgImluZGlnbyIsICJpdm9yeSIsICJraGFraSIsICJsYXZlbmRlciIs
ICJsYXZlbmRlcmJsdXNoIiwgImxhd25ncmVlbiIsICJsZW1vbmNoaWZmb24iLCAibGlnaHRibHVl
IiwKLSAgICAibGlnaHRjb3JhbCIsICJsaWdodGN5YW4iLCAibGlnaHRnb2xkZW5yb2R5ZWxsb3ci
LCAibGlnaHRncmF5IiwgImxpZ2h0Z3JlZW4iLCAibGlnaHRncmV5IiwgImxpZ2h0cGluayIsCi0g
ICAgImxpZ2h0c2FsbW9uIiwgImxpZ2h0c2VhZ3JlZW4iLCAibGlnaHRza3libHVlIiwgImxpZ2h0
c2xhdGVncmF5IiwgImxpZ2h0c2xhdGVncmV5IiwgImxpZ2h0c3RlZWxibHVlIiwgImxpZ2h0eWVs
bG93IiwKLSAgICAibGltZWdyZWVuIiwgImxpbmVuIiwgIm1hZ2VudGEiLCAibWVkaXVtYXF1YW1h
cmluZSIsICJtZWRpdW1ibHVlIiwgIm1lZGl1bW9yY2hpZCIsICJtZWRpdW1wdXJwbGUiLCAibWVk
aXVtc2VhZ3JlZW4iLAotICAgICJtZWRpdW1zbGF0ZWJsdWUiLCAibWVkaXVtc3ByaW5nZ3JlZW4i
LCAibWVkaXVtdHVycXVvaXNlIiwgIm1lZGl1bXZpb2xldHJlZCIsICJtaWRuaWdodGJsdWUiLCAi
bWludGNyZWFtIiwKLSAgICAibWlzdHlyb3NlIiwgIm1vY2Nhc2luIiwgIm5hdmFqb3doaXRlIiwg
Im9sZGxhY2UiLCAib2xpdmVkcmFiIiwgIm9yYW5nZXJlZCIsICJvcmNoaWQiLCAicGFsZWdvbGRl
bnJvZCIsICJwYWxlZ3JlZW4iLAotICAgICJwYWxldHVycXVvaXNlIiwgInBhbGV2aW9sZXRyZWQi
LCAicGFwYXlhd2hpcCIsICJwZWFjaHB1ZmYiLCAicGVydSIsICJwaW5rIiwgInBsdW0iLCAicG93
ZGVyYmx1ZSIsICJyb3N5YnJvd24iLAotICAgICJyb3lhbGJsdWUiLCAic2FkZGxlYnJvd24iLCAi
c2FsbW9uIiwgInNhbmR5YnJvd24iLCAic2VhZ3JlZW4iLCAic2Vhc2hlbGwiLCAic2llbm5hIiwg
InNreWJsdWUiLCAic2xhdGVibHVlIiwKLSAgICAic2xhdGVncmF5IiwgInNsYXRlZ3JleSIsICJz
bm93IiwgInNwcmluZ2dyZWVuIiwgInN0ZWVsYmx1ZSIsICJ0YW4iLCAidGhpc3RsZSIsICJ0b21h
dG8iLCAidHVycXVvaXNlIiwgInZpb2xldCIsCi0gICAgIndoZWF0IiwgIndoaXRlc21va2UiLCAi
eWVsbG93Z3JlZW4iCi1dOwotCi1XZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuX2NvbG9yQXdhcmVQ
cm9wZXJ0aWVzID0gWwotICAgICJiYWNrZ3JvdW5kIiwgImJhY2tncm91bmQtY29sb3IiLCAiYmFj
a2dyb3VuZC1pbWFnZSIsICJib3JkZXIiLCAiYm9yZGVyLWNvbG9yIiwgImJvcmRlci10b3AiLCAi
Ym9yZGVyLXJpZ2h0IiwgImJvcmRlci1ib3R0b20iLAotICAgICJib3JkZXItbGVmdCIsICJib3Jk
ZXItdG9wLWNvbG9yIiwgImJvcmRlci1yaWdodC1jb2xvciIsICJib3JkZXItYm90dG9tLWNvbG9y
IiwgImJvcmRlci1sZWZ0LWNvbG9yIiwgImJveC1zaGFkb3ciLCAiY29sb3IiLAotICAgICJmaWxs
IiwgIm91dGxpbmUiLCAib3V0bGluZS1jb2xvciIsICJzdHJva2UiLCAidGV4dC1saW5lLXRocm91
Z2giLCAidGV4dC1saW5lLXRocm91Z2gtY29sb3IiLCAidGV4dC1vdmVybGluZSIsICJ0ZXh0LW92
ZXJsaW5lLWNvbG9yIiwKLSAgICAidGV4dC1zaGFkb3ciLCAidGV4dC11bmRlcmxpbmUiLCAidGV4
dC11bmRlcmxpbmUtY29sb3IiLCAiLXdlYmtpdC1ib3gtc2hhZG93IiwgIi13ZWJraXQtY29sdW1u
LXJ1bGUtY29sb3IiLAotICAgICItd2Via2l0LXRleHQtZGVjb3JhdGlvbi1jb2xvciIsICItd2Vi
a2l0LXRleHQtZW1waGFzaXMiLCAiLXdlYmtpdC10ZXh0LWVtcGhhc2lzLWNvbG9yIgotXS5rZXlT
ZXQoKTsKLQotV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLl9wcm9wZXJ0eURhdGFNYXAgPSB7Ci0g
ICAgInRhYmxlLWxheW91dCI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJhdXRvIiwgImZpeGVkIgot
ICAgIF0gfSwKLSAgICAidmlzaWJpbGl0eSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJoaWRkZW4i
LCAidmlzaWJsZSIsICJjb2xsYXBzZSIKLSAgICBdIH0sCi0gICAgImJhY2tncm91bmQtcmVwZWF0
IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgInJlcGVhdCIsICJyZXBlYXQteCIsICJyZXBlYXQteSIs
ICJuby1yZXBlYXQiLCAic3BhY2UiLCAicm91bmQiCi0gICAgXSB9LAotICAgICJ0ZXh0LXVuZGVy
bGluZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJub25lIiwgImRvdHRlZCIsICJkYXNoZWQiLCAi
c29saWQiLCAiZG91YmxlIiwgImRvdC1kYXNoIiwgImRvdC1kb3QtZGFzaCIsICJ3YXZlIgotICAg
IF0gfSwKLSAgICAiY29udGVudCI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJsaXN0LWl0ZW0iLCAi
Y2xvc2UtcXVvdGUiLCAibm8tY2xvc2UtcXVvdGUiLCAibm8tb3Blbi1xdW90ZSIsICJvcGVuLXF1
b3RlIgotICAgIF0gfSwKLSAgICAibGlzdC1zdHlsZS1pbWFnZSI6IHsgdmFsdWVzOiBbCi0gICAg
ICAgICJub25lIgotICAgIF0gfSwKLSAgICAiY2xlYXIiOiB7IHZhbHVlczogWwotICAgICAgICAi
bm9uZSIsICJsZWZ0IiwgInJpZ2h0IiwgImJvdGgiCi0gICAgXSB9LAotICAgICJ0ZXh0LXVuZGVy
bGluZS1tb2RlIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImNvbnRpbnVvdXMiLCAic2tpcC13aGl0
ZS1zcGFjZSIKLSAgICBdIH0sCi0gICAgIm92ZXJmbG93LXgiOiB7IHZhbHVlczogWwotICAgICAg
ICAiaGlkZGVuIiwgImF1dG8iLCAidmlzaWJsZSIsICJvdmVybGF5IiwgInNjcm9sbCIKLSAgICBd
IH0sCi0gICAgInN0cm9rZS1saW5lam9pbiI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJyb3VuZCIs
ICJtaXRlciIsICJiZXZlbCIKLSAgICBdIH0sCi0gICAgImJhc2VsaW5lLXNoaWZ0IjogeyB2YWx1
ZXM6IFsKLSAgICAgICAgImJhc2VsaW5lIiwgInN1YiIsICJzdXBlciIKLSAgICBdIH0sCi0gICAg
ImJvcmRlci1ib3R0b20td2lkdGgiOiB7IHZhbHVlczogWwotICAgICAgICAibWVkaXVtIiwgInRo
aWNrIiwgInRoaW4iCi0gICAgXSB9LAotICAgICJtYXJxdWVlLXNwZWVkIjogeyB2YWx1ZXM6IFsK
LSAgICAgICAgIm5vcm1hbCIsICJzbG93IiwgImZhc3QiCi0gICAgXSB9LAotICAgICJtYXJnaW4t
dG9wLWNvbGxhcHNlIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImNvbGxhcHNlIiwgInNlcGFyYXRl
IiwgImRpc2NhcmQiCi0gICAgXSB9LAotICAgICJtYXgtaGVpZ2h0IjogeyB2YWx1ZXM6IFsKLSAg
ICAgICAgIm5vbmUiCi0gICAgXSB9LAotICAgICJib3gtb3JpZW50IjogeyB2YWx1ZXM6IFsKLSAg
ICAgICAgImhvcml6b250YWwiLCAidmVydGljYWwiLCAiaW5saW5lLWF4aXMiLCAiYmxvY2stYXhp
cyIKLSAgICBdLCB9LAotICAgICJmb250LXN0cmV0Y2giOiB7IHZhbHVlczogWwotICAgICAgICAi
bm9ybWFsIiwgIndpZGVyIiwgIm5hcnJvd2VyIiwgInVsdHJhLWNvbmRlbnNlZCIsICJleHRyYS1j
b25kZW5zZWQiLCAiY29uZGVuc2VkIiwgInNlbWktY29uZGVuc2VkIiwKLSAgICAgICAgInNlbWkt
ZXhwYW5kZWQiLCAiZXhwYW5kZWQiLCAiZXh0cmEtZXhwYW5kZWQiLCAidWx0cmEtZXhwYW5kZWQi
Ci0gICAgXSB9LAotICAgICItd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24iOiB7IHZhbHVlczogWwot
ICAgICAgICAiZGVmYXVsdCIsICJzcmdiIgotICAgIF0gfSwKLSAgICAidGV4dC11bmRlcmxpbmUt
c3R5bGUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIsICJkb3R0ZWQiLCAiZGFzaGVkIiwg
InNvbGlkIiwgImRvdWJsZSIsICJkb3QtZGFzaCIsICJkb3QtZG90LWRhc2giLCAid2F2ZSIKLSAg
ICBdIH0sCi0gICAgInRleHQtb3ZlcmxpbmUtbW9kZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJj
b250aW51b3VzIiwgInNraXAtd2hpdGUtc3BhY2UiCi0gICAgXSB9LAotICAgICItd2Via2l0LWJh
Y2tncm91bmQtY29tcG9zaXRlIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImhpZ2hsaWdodCIsICJj
bGVhciIsICJjb3B5IiwgInNvdXJjZS1vdmVyIiwgInNvdXJjZS1pbiIsICJzb3VyY2Utb3V0Iiwg
InNvdXJjZS1hdG9wIiwgImRlc3RpbmF0aW9uLW92ZXIiLAotICAgICAgICAiZGVzdGluYXRpb24t
aW4iLCAiZGVzdGluYXRpb24tb3V0IiwgImRlc3RpbmF0aW9uLWF0b3AiLCAieG9yIiwgInBsdXMt
ZGFya2VyIiwgInBsdXMtbGlnaHRlciIKLSAgICBdIH0sCi0gICAgImJvcmRlci1sZWZ0LXdpZHRo
IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm1lZGl1bSIsICJ0aGljayIsICJ0aGluIgotICAgIF0g
fSwKLSAgICAiLXdlYmtpdC13cml0aW5nLW1vZGUiOiB7IHZhbHVlczogWwotICAgICAgICAibHIi
LCAicmwiLCAidGIiLCAibHItdGIiLCAicmwtdGIiLCAidGItcmwiLCAiaG9yaXpvbnRhbC10YiIs
ICJ2ZXJ0aWNhbC1ybCIsICJ2ZXJ0aWNhbC1sciIsICJob3Jpem9udGFsLWJ0IgotICAgIF0gfSwK
LSAgICAidGV4dC1saW5lLXRocm91Z2gtbW9kZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJjb250
aW51b3VzIiwgInNraXAtd2hpdGUtc3BhY2UiCi0gICAgXSB9LAotICAgICJib3JkZXItY29sbGFw
c2UiOiB7IHZhbHVlczogWwotICAgICAgICAiY29sbGFwc2UiLCAic2VwYXJhdGUiCi0gICAgXSB9
LAotICAgICJwYWdlLWJyZWFrLWluc2lkZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJhdXRvIiwg
ImF2b2lkIgotICAgIF0gfSwKLSAgICAiYm9yZGVyLXRvcC13aWR0aCI6IHsgdmFsdWVzOiBbCi0g
ICAgICAgICJtZWRpdW0iLCAidGhpY2siLCAidGhpbiIKLSAgICBdIH0sCi0gICAgIm91dGxpbmUt
Y29sb3IiOiB7IHZhbHVlczogWwotICAgICAgICAiaW52ZXJ0IgotICAgIF0gfSwKLSAgICAidGV4
dC1saW5lLXRocm91Z2gtc3R5bGUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIsICJkb3R0
ZWQiLCAiZGFzaGVkIiwgInNvbGlkIiwgImRvdWJsZSIsICJkb3QtZGFzaCIsICJkb3QtZG90LWRh
c2giLCAid2F2ZSIKLSAgICBdIH0sCi0gICAgIm91dGxpbmUtc3R5bGUiOiB7IHZhbHVlczogWwot
ICAgICAgICAibm9uZSIsICJoaWRkZW4iLCAiaW5zZXQiLCAiZ3Jvb3ZlIiwgInJpZGdlIiwgIm91
dHNldCIsICJkb3R0ZWQiLCAiZGFzaGVkIiwgInNvbGlkIiwgImRvdWJsZSIKLSAgICBdIH0sCi0g
ICAgImN1cnNvciI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJub25lIiwgImNvcHkiLCAiYXV0byIs
ICJjcm9zc2hhaXIiLCAiZGVmYXVsdCIsICJwb2ludGVyIiwgIm1vdmUiLCAidmVydGljYWwtdGV4
dCIsICJjZWxsIiwgImNvbnRleHQtbWVudSIsCi0gICAgICAgICJhbGlhcyIsICJwcm9ncmVzcyIs
ICJuby1kcm9wIiwgIm5vdC1hbGxvd2VkIiwgIi13ZWJraXQtem9vbS1pbiIsICItd2Via2l0LXpv
b20tb3V0IiwgImUtcmVzaXplIiwgIm5lLXJlc2l6ZSIsCi0gICAgICAgICJudy1yZXNpemUiLCAi
bi1yZXNpemUiLCAic2UtcmVzaXplIiwgInN3LXJlc2l6ZSIsICJzLXJlc2l6ZSIsICJ3LXJlc2l6
ZSIsICJldy1yZXNpemUiLCAibnMtcmVzaXplIiwKLSAgICAgICAgIm5lc3ctcmVzaXplIiwgIm53
c2UtcmVzaXplIiwgImNvbC1yZXNpemUiLCAicm93LXJlc2l6ZSIsICJ0ZXh0IiwgIndhaXQiLCAi
aGVscCIsICJhbGwtc2Nyb2xsIiwgIi13ZWJraXQtZ3JhYiIsCi0gICAgICAgICItd2Via2l0LWdy
YWJiaW5nIgotICAgIF0gfSwKLSAgICAiYm9yZGVyLXdpZHRoIjogeyB2YWx1ZXM6IFsKLSAgICAg
ICAgIm1lZGl1bSIsICJ0aGljayIsICJ0aGluIgotICAgIF0gfSwKLSAgICAic2l6ZSI6IHsgdmFs
dWVzOiBbCi0gICAgICAgICJhMyIsICJhNCIsICJhNSIsICJiNCIsICJiNSIsICJsYW5kc2NhcGUi
LCAibGVkZ2VyIiwgImxlZ2FsIiwgImxldHRlciIsICJwb3J0cmFpdCIKLSAgICBdIH0sCi0gICAg
ImJhY2tncm91bmQtc2l6ZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJjb250YWluIiwgImNvdmVy
IgotICAgIF0gfSwKLSAgICAiZGlyZWN0aW9uIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImx0ciIs
ICJydGwiCi0gICAgXSB9LAotICAgICJtYXJxdWVlLWRpcmVjdGlvbiI6IHsgdmFsdWVzOiBbCi0g
ICAgICAgICJsZWZ0IiwgInJpZ2h0IiwgImF1dG8iLCAicmV2ZXJzZSIsICJmb3J3YXJkcyIsICJi
YWNrd2FyZHMiLCAiYWhlYWQiLCAidXAiLCAiZG93biIKLSAgICBdIH0sCi0gICAgImVuYWJsZS1i
YWNrZ3JvdW5kIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImFjY3VtdWxhdGUiLCAibmV3IgotICAg
IF0gfSwKLSAgICAiZmxvYXQiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIsICJsZWZ0Iiwg
InJpZ2h0IgotICAgIF0gfSwKLSAgICAib3ZlcmZsb3cteSI6IHsgdmFsdWVzOiBbCi0gICAgICAg
ICJoaWRkZW4iLCAiYXV0byIsICJ2aXNpYmxlIiwgIm92ZXJsYXkiLCAic2Nyb2xsIgotICAgIF0g
fSwKLSAgICAibWFyZ2luLWJvdHRvbS1jb2xsYXBzZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJj
b2xsYXBzZSIsICAic2VwYXJhdGUiLCAiZGlzY2FyZCIKLSAgICBdIH0sCi0gICAgImJveC1yZWZs
ZWN0IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImxlZnQiLCAicmlnaHQiLCAiYWJvdmUiLCAiYmVs
b3ciCi0gICAgXSB9LAotICAgICJvdmVyZmxvdyI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJoaWRk
ZW4iLCAiYXV0byIsICJ2aXNpYmxlIiwgIm92ZXJsYXkiLCAic2Nyb2xsIgotICAgIF0gfSwKLSAg
ICAidGV4dC1yZW5kZXJpbmciOiB7IHZhbHVlczogWwotICAgICAgICAiYXV0byIsICJvcHRpbWl6
ZVNwZWVkIiwgIm9wdGltaXplTGVnaWJpbGl0eSIsICJnZW9tZXRyaWNQcmVjaXNpb24iCi0gICAg
XSB9LAotICAgICJ0ZXh0LWFsaWduIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIi13ZWJraXQtYXV0
byIsICJzdGFydCIsICJlbmQiLCAibGVmdCIsICJyaWdodCIsICJjZW50ZXIiLCAianVzdGlmeSIs
ICItd2Via2l0LWxlZnQiLCAiLXdlYmtpdC1yaWdodCIsICItd2Via2l0LWNlbnRlciIKLSAgICBd
IH0sCi0gICAgImxpc3Qtc3R5bGUtcG9zaXRpb24iOiB7IHZhbHVlczogWwotICAgICAgICAib3V0
c2lkZSIsICJpbnNpZGUiLCAiaGFuZ2luZyIKLSAgICBdIH0sCi0gICAgIm1hcmdpbi1ib3R0b20i
OiB7IHZhbHVlczogWwotICAgICAgICAiYXV0byIKLSAgICBdIH0sCi0gICAgImNvbG9yLWludGVy
cG9sYXRpb24iOiB7IHZhbHVlczogWwotICAgICAgICAibGluZWFycmdiIgotICAgIF0gfSwKLSAg
ICAiYmFja2dyb3VuZC1vcmlnaW4iOiB7IHZhbHVlczogWwotICAgICAgICAiYm9yZGVyLWJveCIs
ICJjb250ZW50LWJveCIsICJwYWRkaW5nLWJveCIKLSAgICBdIH0sCi0gICAgIndvcmQtd3JhcCI6
IHsgdmFsdWVzOiBbCi0gICAgICAgICJub3JtYWwiLCAiYnJlYWstd29yZCIKLSAgICBdIH0sCi0g
ICAgImZvbnQtd2VpZ2h0IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vcm1hbCIsICJib2xkIiwg
ImJvbGRlciIsICJsaWdodGVyIiwgIjEwMCIsICIyMDAiLCAiMzAwIiwgIjQwMCIsICI1MDAiLCAi
NjAwIiwgIjcwMCIsICI4MDAiLCAiOTAwIgotICAgIF0gfSwKLSAgICAibWFyZ2luLWJlZm9yZS1j
b2xsYXBzZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJjb2xsYXBzZSIsICJzZXBhcmF0ZSIsICJk
aXNjYXJkIgotICAgIF0gfSwKLSAgICAidGV4dC1vdmVybGluZS13aWR0aCI6IHsgdmFsdWVzOiBb
Ci0gICAgICAgICJub3JtYWwiLCAibWVkaXVtIiwgImF1dG8iLCAidGhpY2siLCAidGhpbiIKLSAg
ICBdIH0sCi0gICAgInRleHQtdHJhbnNmb3JtIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vbmUi
LCAiY2FwaXRhbGl6ZSIsICJ1cHBlcmNhc2UiLCAibG93ZXJjYXNlIgotICAgIF0gfSwKLSAgICAi
Ym9yZGVyLXJpZ2h0LXN0eWxlIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vbmUiLCAiaGlkZGVu
IiwgImluc2V0IiwgImdyb292ZSIsICJyaWRnZSIsICJvdXRzZXQiLCAiZG90dGVkIiwgImRhc2hl
ZCIsICJzb2xpZCIsICJkb3VibGUiCi0gICAgXSB9LAotICAgICJib3JkZXItbGVmdC1zdHlsZSI6
IHsgdmFsdWVzOiBbCi0gICAgICAgICJub25lIiwgImhpZGRlbiIsICJpbnNldCIsICJncm9vdmUi
LCAicmlkZ2UiLCAib3V0c2V0IiwgImRvdHRlZCIsICJkYXNoZWQiLCAic29saWQiLCAiZG91Ymxl
IgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC10ZXh0LWVtcGhhc2lzIjogeyB2YWx1ZXM6IFsKLSAg
ICAgICAgImNpcmNsZSIsICJmaWxsZWQiLCAib3BlbiIsICJkb3QiLCAiZG91YmxlLWNpcmNsZSIs
ICJ0cmlhbmdsZSIsICJzZXNhbWUiCi0gICAgXSB9LAotICAgICJmb250LXN0eWxlIjogeyB2YWx1
ZXM6IFsKLSAgICAgICAgIml0YWxpYyIsICJvYmxpcXVlIiwgIm5vcm1hbCIKLSAgICBdIH0sCi0g
ICAgInNwZWFrIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vbmUiLCAibm9ybWFsIiwgInNwZWxs
LW91dCIsICJkaWdpdHMiLCAibGl0ZXJhbC1wdW5jdHVhdGlvbiIsICJuby1wdW5jdHVhdGlvbiIK
LSAgICBdIH0sCi0gICAgInRleHQtbGluZS10aHJvdWdoIjogeyB2YWx1ZXM6IFsKLSAgICAgICAg
Im5vbmUiLCAiZG90dGVkIiwgImRhc2hlZCIsICJzb2xpZCIsICJkb3VibGUiLCAiZG90LWRhc2gi
LCAiZG90LWRvdC1kYXNoIiwgIndhdmUiLCAiY29udGludW91cyIsCi0gICAgICAgICJza2lwLXdo
aXRlLXNwYWNlIgotICAgIF0gfSwKLSAgICAiY29sb3ItcmVuZGVyaW5nIjogeyB2YWx1ZXM6IFsK
LSAgICAgICAgImF1dG8iLCAib3B0aW1pemVTcGVlZCIsICJvcHRpbWl6ZVF1YWxpdHkiCi0gICAg
XSB9LAotICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIs
ICJpbmxpbmUiLCAiZGlzYyIsICJjaXJjbGUiLCAic3F1YXJlIiwgImRlY2ltYWwiLCAiZGVjaW1h
bC1sZWFkaW5nLXplcm8iLCAiYXJhYmljLWluZGljIiwgImJpbmFyeSIsICJiZW5nYWxpIiwKLSAg
ICAgICAgImNhbWJvZGlhbiIsICJraG1lciIsICJkZXZhbmFnYXJpIiwgImd1amFyYXRpIiwgImd1
cm11a2hpIiwgImthbm5hZGEiLCAibG93ZXItaGV4YWRlY2ltYWwiLCAibGFvIiwgIm1hbGF5YWxh
bSIsCi0gICAgICAgICJtb25nb2xpYW4iLCAibXlhbm1hciIsICJvY3RhbCIsICJvcml5YSIsICJw
ZXJzaWFuIiwgInVyZHUiLCAidGVsdWd1IiwgInRpYmV0YW4iLCAidGhhaSIsICJ1cHBlci1oZXhh
ZGVjaW1hbCIsCi0gICAgICAgICJsb3dlci1yb21hbiIsICJ1cHBlci1yb21hbiIsICJsb3dlci1n
cmVlayIsICJsb3dlci1hbHBoYSIsICJsb3dlci1sYXRpbiIsICJ1cHBlci1hbHBoYSIsICJ1cHBl
ci1sYXRpbiIsICJhZmFyIiwKLSAgICAgICAgImV0aGlvcGljLWhhbGVoYW1lLWFhLWV0IiwgImV0
aGlvcGljLWhhbGVoYW1lLWFhLWVyIiwgImFtaGFyaWMiLCAiZXRoaW9waWMtaGFsZWhhbWUtYW0t
ZXQiLCAiYW1oYXJpYy1hYmVnZWRlIiwKLSAgICAgICAgImV0aGlvcGljLWFiZWdlZGUtYW0tZXQi
LCAiY2prLWVhcnRobHktYnJhbmNoIiwgImNqay1oZWF2ZW5seS1zdGVtIiwgImV0aGlvcGljIiwg
ImV0aGlvcGljLWhhbGVoYW1lLWdleiIsCi0gICAgICAgICJldGhpb3BpYy1hYmVnZWRlIiwgImV0
aGlvcGljLWFiZWdlZGUtZ2V6IiwgImhhbmd1bC1jb25zb25hbnQiLCAiaGFuZ3VsIiwgImxvd2Vy
LW5vcndlZ2lhbiIsICJvcm9tbyIsCi0gICAgICAgICJldGhpb3BpYy1oYWxlaGFtZS1vbS1ldCIs
ICJzaWRhbWEiLCAiZXRoaW9waWMtaGFsZWhhbWUtc2lkLWV0IiwgInNvbWFsaSIsICJldGhpb3Bp
Yy1oYWxlaGFtZS1zby1ldCIsICJ0aWdyZSIsCi0gICAgICAgICJldGhpb3BpYy1oYWxlaGFtZS10
aWciLCAidGlncmlueWEtZXIiLCAiZXRoaW9waWMtaGFsZWhhbWUtdGktZXIiLCAidGlncmlueWEt
ZXItYWJlZ2VkZSIsCi0gICAgICAgICJldGhpb3BpYy1hYmVnZWRlLXRpLWVyIiwgInRpZ3Jpbnlh
LWV0IiwgImV0aGlvcGljLWhhbGVoYW1lLXRpLWV0IiwgInRpZ3JpbnlhLWV0LWFiZWdlZGUiLAot
ICAgICAgICAiZXRoaW9waWMtYWJlZ2VkZS10aS1ldCIsICJ1cHBlci1ncmVlayIsICJ1cHBlci1u
b3J3ZWdpYW4iLCAiYXN0ZXJpc2tzIiwgImZvb3Rub3RlcyIsICJoZWJyZXciLCAiYXJtZW5pYW4i
LAotICAgICAgICAibG93ZXItYXJtZW5pYW4iLCAidXBwZXItYXJtZW5pYW4iLCAiZ2VvcmdpYW4i
LCAiY2prLWlkZW9ncmFwaGljIiwgImhpcmFnYW5hIiwgImthdGFrYW5hIiwgImhpcmFnYW5hLWly
b2hhIiwKLSAgICAgICAgImthdGFrYW5hLWlyb2hhIgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC10
ZXh0LWNvbWJpbmUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIsICJob3Jpem9udGFsIgot
ICAgIF0gfSwKLSAgICAib3V0bGluZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJub25lIiwgImhp
ZGRlbiIsICJpbnNldCIsICJncm9vdmUiLCAicmlkZ2UiLCAib3V0c2V0IiwgImRvdHRlZCIsICJk
YXNoZWQiLCAic29saWQiLCAiZG91YmxlIgotICAgIF0gfSwKLSAgICAiZm9udCI6IHsgdmFsdWVz
OiBbCi0gICAgICAgICJjYXB0aW9uIiwgImljb24iLCAibWVudSIsICJtZXNzYWdlLWJveCIsICJz
bWFsbC1jYXB0aW9uIiwgIi13ZWJraXQtbWluaS1jb250cm9sIiwgIi13ZWJraXQtc21hbGwtY29u
dHJvbCIsCi0gICAgICAgICItd2Via2l0LWNvbnRyb2wiLCAic3RhdHVzLWJhciIsICJpdGFsaWMi
LCAib2JsaXF1ZSIsICJzbWFsbC1jYXBzIiwgIm5vcm1hbCIsICJib2xkIiwgImJvbGRlciIsICJs
aWdodGVyIiwKLSAgICAgICAgIjEwMCIsICIyMDAiLCAiMzAwIiwgIjQwMCIsICI1MDAiLCAiNjAw
IiwgIjcwMCIsICI4MDAiLCAiOTAwIiwgInh4LXNtYWxsIiwgIngtc21hbGwiLCAic21hbGwiLCAi
bWVkaXVtIiwKLSAgICAgICAgImxhcmdlIiwgIngtbGFyZ2UiLCAieHgtbGFyZ2UiLCAiLXdlYmtp
dC14eHgtbGFyZ2UiLCAic21hbGxlciIsICJsYXJnZXIiLCAic2VyaWYiLCAic2Fucy1zZXJpZiIs
ICJjdXJzaXZlIiwKLSAgICAgICAgImZhbnRhc3kiLCAibW9ub3NwYWNlIiwgIi13ZWJraXQtYm9k
eSIsICItd2Via2l0LXBpY3RvZ3JhcGgiCi0gICAgXSB9LAotICAgICJkb21pbmFudC1iYXNlbGlu
ZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJtaWRkbGUiLCAiYXV0byIsICJjZW50cmFsIiwgInRl
eHQtYmVmb3JlLWVkZ2UiLCAidGV4dC1hZnRlci1lZGdlIiwgImlkZW9ncmFwaGljIiwgImFscGhh
YmV0aWMiLCAiaGFuZ2luZyIsCi0gICAgICAgICJtYXRoZW1hdGljYWwiLCAidXNlLXNjcmlwdCIs
ICJuby1jaGFuZ2UiLCAicmVzZXQtc2l6ZSIKLSAgICBdIH0sCi0gICAgImRpc3BsYXkiOiB7IHZh
bHVlczogWwotICAgICAgICAibm9uZSIsICJpbmxpbmUiLCAiYmxvY2siLCAibGlzdC1pdGVtIiwg
InJ1bi1pbiIsICJjb21wYWN0IiwgImlubGluZS1ibG9jayIsICJ0YWJsZSIsICJpbmxpbmUtdGFi
bGUiLAotICAgICAgICAidGFibGUtcm93LWdyb3VwIiwgInRhYmxlLWhlYWRlci1ncm91cCIsICJ0
YWJsZS1mb290ZXItZ3JvdXAiLCAidGFibGUtcm93IiwgInRhYmxlLWNvbHVtbi1ncm91cCIsCi0g
ICAgICAgICJ0YWJsZS1jb2x1bW4iLCAidGFibGUtY2VsbCIsICJ0YWJsZS1jYXB0aW9uIiwgIi13
ZWJraXQtYm94IiwgIi13ZWJraXQtaW5saW5lLWJveCIsICItd2FwLW1hcnF1ZWUiCi0gICAgXSB9
LAotICAgICItd2Via2l0LXRleHQtZW1waGFzaXMtcG9zaXRpb24iOiB7IHZhbHVlczogWwotICAg
ICAgICAib3ZlciIsICJ1bmRlciIKLSAgICBdIH0sCi0gICAgImltYWdlLXJlbmRlcmluZyI6IHsg
dmFsdWVzOiBbCi0gICAgICAgICJhdXRvIiwgIm9wdGltaXplU3BlZWQiLCAib3B0aW1pemVRdWFs
aXR5IgotICAgIF0gfSwKLSAgICAiYWxpZ25tZW50LWJhc2VsaW5lIjogeyB2YWx1ZXM6IFsKLSAg
ICAgICAgImJhc2VsaW5lIiwgIm1pZGRsZSIsICJhdXRvIiwgImJlZm9yZS1lZGdlIiwgImFmdGVy
LWVkZ2UiLCAiY2VudHJhbCIsICJ0ZXh0LWJlZm9yZS1lZGdlIiwgInRleHQtYWZ0ZXItZWRnZSIs
Ci0gICAgICAgICJpZGVvZ3JhcGhpYyIsICJhbHBoYWJldGljIiwgImhhbmdpbmciLCAibWF0aGVt
YXRpY2FsIgotICAgIF0gfSwKLSAgICAib3V0bGluZS13aWR0aCI6IHsgdmFsdWVzOiBbCi0gICAg
ICAgICJtZWRpdW0iLCAidGhpY2siLCAidGhpbiIKLSAgICBdIH0sCi0gICAgInRleHQtbGluZS10
aHJvdWdoLXdpZHRoIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vcm1hbCIsICJtZWRpdW0iLCAi
YXV0byIsICJ0aGljayIsICJ0aGluIgotICAgIF0gfSwKLSAgICAiYm94LWFsaWduIjogeyB2YWx1
ZXM6IFsKLSAgICAgICAgImJhc2VsaW5lIiwgImNlbnRlciIsICJzdHJldGNoIiwgInN0YXJ0Iiwg
ImVuZCIKLSAgICBdIH0sCi0gICAgImJvcmRlci1yaWdodC13aWR0aCI6IHsgdmFsdWVzOiBbCi0g
ICAgICAgICJtZWRpdW0iLCAidGhpY2siLCAidGhpbiIKLSAgICBdIH0sCi0gICAgImJvcmRlci10
b3Atc3R5bGUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIsICJoaWRkZW4iLCAiaW5zZXQi
LCAiZ3Jvb3ZlIiwgInJpZGdlIiwgIm91dHNldCIsICJkb3R0ZWQiLCAiZGFzaGVkIiwgInNvbGlk
IiwgImRvdWJsZSIKLSAgICBdIH0sCi0gICAgImxpbmUtaGVpZ2h0IjogeyB2YWx1ZXM6IFsKLSAg
ICAgICAgIm5vcm1hbCIKLSAgICBdIH0sCi0gICAgInRleHQtb3ZlcmZsb3ciOiB7IHZhbHVlczog
WwotICAgICAgICAiY2xpcCIsICJlbGxpcHNpcyIKLSAgICBdIH0sCi0gICAgIm92ZXJmbG93LXdy
YXAiOiB7IHZhbHVlczogWwotICAgICAgICAibm9ybWFsIiwgImJyZWFrLXdvcmQiCi0gICAgXSB9
LAotICAgICJib3gtZGlyZWN0aW9uIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vcm1hbCIsICJy
ZXZlcnNlIgotICAgIF0gfSwKLSAgICAibWFyZ2luLWFmdGVyLWNvbGxhcHNlIjogeyB2YWx1ZXM6
IFsKLSAgICAgICAgImNvbGxhcHNlIiwgInNlcGFyYXRlIiwgImRpc2NhcmQiCi0gICAgXSB9LAot
ICAgICJwYWdlLWJyZWFrLWJlZm9yZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJsZWZ0IiwgInJp
Z2h0IiwgImF1dG8iLCAiYWx3YXlzIiwgImF2b2lkIgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC1o
eXBoZW5zIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vbmUiLCAiYXV0byIsICJtYW51YWwiCi0g
ICAgXSB9LAotICAgICJib3JkZXItaW1hZ2UiOiB7IHZhbHVlczogWwotICAgICAgICAicmVwZWF0
IiwgInN0cmV0Y2giCi0gICAgXSB9LAotICAgICJ0ZXh0LWRlY29yYXRpb24iOiB7IHZhbHVlczog
WwotICAgICAgICAiYmxpbmsiLCAibGluZS10aHJvdWdoIiwgIm92ZXJsaW5lIiwgInVuZGVybGlu
ZSIKLSAgICBdIH0sCi0gICAgInBvc2l0aW9uIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImFic29s
dXRlIiwgImZpeGVkIiwgInJlbGF0aXZlIiwgInN0YXRpYyIKLSAgICBdIH0sCi0gICAgImZvbnQt
ZmFtaWx5IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgInNlcmlmIiwgInNhbnMtc2VyaWYiLCAiY3Vy
c2l2ZSIsICJmYW50YXN5IiwgIm1vbm9zcGFjZSIsICItd2Via2l0LWJvZHkiLCAiLXdlYmtpdC1w
aWN0b2dyYXBoIgotICAgIF0gfSwKLSAgICAidGV4dC1vdmVyZmxvdy1tb2RlIjogeyB2YWx1ZXM6
IFsKLSAgICAgICAgImNsaXAiLCAiZWxsaXBzaXMiCi0gICAgXSB9LAotICAgICJib3JkZXItYm90
dG9tLXN0eWxlIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vbmUiLCAiaGlkZGVuIiwgImluc2V0
IiwgImdyb292ZSIsICJyaWRnZSIsICJvdXRzZXQiLCAiZG90dGVkIiwgImRhc2hlZCIsICJzb2xp
ZCIsICJkb3VibGUiCi0gICAgXSB9LAotICAgICJ1bmljb2RlLWJpZGkiOiB7IHZhbHVlczogWwot
ICAgICAgICAibm9ybWFsIiwgImJpZGktb3ZlcnJpZGUiLCAiZW1iZWQiCi0gICAgXSB9LAotICAg
ICJjbGlwLXJ1bGUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uemVybyIsICJldmVub2RkIgot
ICAgIF0gfSwKLSAgICAibWFyZ2luLWxlZnQiOiB7IHZhbHVlczogWwotICAgICAgICAiYXV0byIK
LSAgICBdIH0sCi0gICAgIm1hcmdpbi10b3AiOiB7IHZhbHVlczogWwotICAgICAgICAiYXV0byIK
LSAgICBdIH0sCi0gICAgInpvb20iOiB7IHZhbHVlczogWwotICAgICAgICAibm9ybWFsIiwgImRv
Y3VtZW50IiwgInJlc2V0IgotICAgIF0gfSwKLSAgICAidGV4dC1vdmVybGluZS1zdHlsZSI6IHsg
dmFsdWVzOiBbCi0gICAgICAgICJub25lIiwgImRvdHRlZCIsICJkYXNoZWQiLCAic29saWQiLCAi
ZG91YmxlIiwgImRvdC1kYXNoIiwgImRvdC1kb3QtZGFzaCIsICJ3YXZlIgotICAgIF0gfSwKLSAg
ICAibWF4LXdpZHRoIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vbmUiCi0gICAgXSB9LAotICAg
ICJjYXB0aW9uLXNpZGUiOiB7IHZhbHVlczogWwotICAgICAgICAidG9wIiwgImJvdHRvbSIKLSAg
ICBdIH0sCi0gICAgImVtcHR5LWNlbGxzIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImhpZGUiLCAi
c2hvdyIKLSAgICBdIH0sCi0gICAgInBvaW50ZXItZXZlbnRzIjogeyB2YWx1ZXM6IFsKLSAgICAg
ICAgIm5vbmUiLCAiYWxsIiwgImF1dG8iLCAidmlzaWJsZSIsICJ2aXNpYmxlcGFpbnRlZCIsICJ2
aXNpYmxlZmlsbCIsICJ2aXNpYmxlc3Ryb2tlIiwgInBhaW50ZWQiLCAiZmlsbCIsICJzdHJva2Ui
Ci0gICAgXSB9LAotICAgICJsZXR0ZXItc3BhY2luZyI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJu
b3JtYWwiCi0gICAgXSB9LAotICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7IHZhbHVlczogWwotICAg
ICAgICAiYm9yZGVyLWJveCIsICJjb250ZW50LWJveCIsICJwYWRkaW5nLWJveCIKLSAgICBdIH0s
Ci0gICAgIi13ZWJraXQtZm9udC1zbW9vdGhpbmciOiB7IHZhbHVlczogWwotICAgICAgICAibm9u
ZSIsICJhdXRvIiwgImFudGlhbGlhc2VkIiwgInN1YnBpeGVsLWFudGlhbGlhc2VkIgotICAgIF0g
fSwKLSAgICAiYm9yZGVyIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vbmUiLCAiaGlkZGVuIiwg
Imluc2V0IiwgImdyb292ZSIsICJyaWRnZSIsICJvdXRzZXQiLCAiZG90dGVkIiwgImRhc2hlZCIs
ICJzb2xpZCIsICJkb3VibGUiCi0gICAgXSB9LAotICAgICJmb250LXNpemUiOiB7IHZhbHVlczog
WwotICAgICAgICAieHgtc21hbGwiLCAieC1zbWFsbCIsICJzbWFsbCIsICJtZWRpdW0iLCAibGFy
Z2UiLCAieC1sYXJnZSIsICJ4eC1sYXJnZSIsICItd2Via2l0LXh4eC1sYXJnZSIsICJzbWFsbGVy
IiwKLSAgICAgICAgImxhcmdlciIKLSAgICBdIH0sCi0gICAgImZvbnQtdmFyaWFudCI6IHsgdmFs
dWVzOiBbCi0gICAgICAgICJzbWFsbC1jYXBzIiwgIm5vcm1hbCIKLSAgICBdIH0sCi0gICAgInZl
cnRpY2FsLWFsaWduIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImJhc2VsaW5lIiwgIm1pZGRsZSIs
ICJzdWIiLCAic3VwZXIiLCAidGV4dC10b3AiLCAidGV4dC1ib3R0b20iLCAidG9wIiwgImJvdHRv
bSIsICItd2Via2l0LWJhc2VsaW5lLW1pZGRsZSIKLSAgICBdIH0sCi0gICAgIm1hcnF1ZWUtc3R5
bGUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIsICJzY3JvbGwiLCAic2xpZGUiLCAiYWx0
ZXJuYXRlIgotICAgIF0gfSwKLSAgICAid2hpdGUtc3BhY2UiOiB7IHZhbHVlczogWwotICAgICAg
ICAibm9ybWFsIiwgIm5vd3JhcCIsICJwcmUiLCAicHJlLWxpbmUiLCAicHJlLXdyYXAiCi0gICAg
XSB9LAotICAgICJ0ZXh0LXVuZGVybGluZS13aWR0aCI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJu
b3JtYWwiLCAibWVkaXVtIiwgImF1dG8iLCAidGhpY2siLCAidGhpbiIKLSAgICBdIH0sCi0gICAg
ImJveC1saW5lcyI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJzaW5nbGUiLCAibXVsdGlwbGUiCi0g
ICAgXSB9LAotICAgICJwYWdlLWJyZWFrLWFmdGVyIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImxl
ZnQiLCAicmlnaHQiLCAiYXV0byIsICJhbHdheXMiLCAiYXZvaWQiCi0gICAgXSB9LAotICAgICJj
bGlwLXBhdGgiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIKLSAgICBdIH0sCi0gICAgIm1h
cmdpbiI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJhdXRvIgotICAgIF0gfSwKLSAgICAibWFycXVl
ZS1yZXBldGl0aW9uIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImluZmluaXRlIgotICAgIF0gfSwK
LSAgICAibWFyZ2luLXJpZ2h0IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImF1dG8iCi0gICAgXSB9
LAotICAgICJ3b3JkLWJyZWFrIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgIm5vcm1hbCIsICJicmVh
ay1hbGwiLCAiYnJlYWstd29yZCIKLSAgICBdIH0sCi0gICAgIndvcmQtc3BhY2luZyI6IHsgdmFs
dWVzOiBbCi0gICAgICAgICJub3JtYWwiCi0gICAgXSB9LAotICAgICItd2Via2l0LXRleHQtZW1w
aGFzaXMtc3R5bGUiOiB7IHZhbHVlczogWwotICAgICAgICAiY2lyY2xlIiwgImZpbGxlZCIsICJv
cGVuIiwgImRvdCIsICJkb3VibGUtY2lyY2xlIiwgInRyaWFuZ2xlIiwgInNlc2FtZSIKLSAgICBd
IH0sCi0gICAgIi13ZWJraXQtdHJhbnNmb3JtIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgInNjYWxl
IiwgInNjYWxlWCIsICJzY2FsZVkiLCAic2NhbGUzZCIsICJyb3RhdGUiLCAicm90YXRlWCIsICJy
b3RhdGVZIiwgInJvdGF0ZVoiLCAicm90YXRlM2QiLCAic2tldyIsICJza2V3WCIsICJza2V3WSIs
Ci0gICAgICAgICJ0cmFuc2xhdGUiLCAidHJhbnNsYXRlWCIsICJ0cmFuc2xhdGVZIiwgInRyYW5z
bGF0ZVoiLCAidHJhbnNsYXRlM2QiLCAibWF0cml4IiwgIm1hdHJpeDNkIiwgInBlcnNwZWN0aXZl
IgotICAgIF0gfSwKLSAgICAiaW1hZ2UtcmVzb2x1dGlvbiI6IHsgdmFsdWVzOiBbCi0gICAgICAg
ICJmcm9tLWltYWdlIiwgInNuYXAiCi0gICAgXSB9LAotICAgICJib3gtc2l6aW5nIjogeyB2YWx1
ZXM6IFsKLSAgICAgICAgImNvbnRlbnQtYm94IiwgInBhZGRpbmctYm94IiwgImJvcmRlci1ib3gi
Ci0gICAgXSB9LAotICAgICJjbGlwIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImF1dG8iCi0gICAg
XSB9LAotICAgICJyZXNpemUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIsICJib3RoIiwg
Imhvcml6b250YWwiLCAidmVydGljYWwiCi0gICAgXSB9LAotICAgICItd2Via2l0LWFsaWduLWNv
bnRlbnQiOiB7IHZhbHVlczogWwotICAgICAgICAiZmxleC1zdGFydCIsICJmbGV4LWVuZCIsICJj
ZW50ZXIiLCAic3BhY2UtYmV0d2VlbiIsICJzcGFjZS1hcm91bmQiLCAic3RyZXRjaCIKLSAgICBd
IH0sCi0gICAgIi13ZWJraXQtYWxpZ24taXRlbXMiOiB7ICB2YWx1ZXM6IFsKLSAgICAgICAgImZs
ZXgtc3RhcnQiLCAiZmxleC1lbmQiLCAiY2VudGVyIiwgImJhc2VsaW5lIiwgInN0cmV0Y2giCi0g
ICAgXSB9LAotICAgICItd2Via2l0LWFsaWduLXNlbGYiOiB7ICB2YWx1ZXM6IFsKLSAgICAgICAg
ImF1dG8iLCAiZmxleC1zdGFydCIsICJmbGV4LWVuZCIsICJjZW50ZXIiLCAiYmFzZWxpbmUiLCAi
c3RyZXRjaCIKLSAgICBdIH0sCi0gICAgIi13ZWJraXQtZmxleC1kaXJlY3Rpb24iOiB7IHZhbHVl
czogWwotICAgICAgICAicm93IiwgInJvdy1yZXZlcnNlIiwgImNvbHVtbiIsICJjb2x1bW4tcmV2
ZXJzZSIKLSAgICBdIH0sCi0gICAgIi13ZWJraXQtanVzdGlmeS1jb250ZW50IjogeyB2YWx1ZXM6
IFsKLSAgICAgICAgImZsZXgtc3RhcnQiLCAiZmxleC1lbmQiLCAiY2VudGVyIiwgInNwYWNlLWJl
dHdlZW4iLCAic3BhY2UtYXJvdW5kIgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC1mbGV4LXdyYXAi
OiB7IHZhbHVlczogWwotICAgICAgICAibm93cmFwIiwgIndyYXAiLCAid3JhcC1yZXZlcnNlIgot
ICAgIF0gfSwKLSAgICAiLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIjogeyB2YWx1
ZXM6IFsKLSAgICAgICAgImVhc2UiLCAibGluZWFyIiwgImVhc2UtaW4iLCAiZWFzZS1vdXQiLCAi
ZWFzZS1pbi1vdXQiLCAic3RlcC1zdGFydCIsICJzdGVwLWVuZCIsICJzdGVwcyIsICJjdWJpYy1i
ZXppZXIiCi0gICAgXSB9LAotICAgICItd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb24iOiB7IHZh
bHVlczogWwotICAgICAgICAibm9ybWFsIiwgInJldmVyc2UiLCAiYWx0ZXJuYXRlIiwgImFsdGVy
bmF0ZS1yZXZlcnNlIgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0
ZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJydW5uaW5nIiwgInBhdXNlZCIKLSAgICBdIH0sCi0g
ICAgIi13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJu
b25lIiwgImZvcndhcmRzIiwgImJhY2t3YXJkcyIsICJib3RoIgotICAgIF0gfSwKLSAgICAiLXdl
YmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgInZpc2libGUi
LCAiaGlkZGVuIgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhayI6
IHsgdmFsdWVzOiBbCi0gICAgICAgICJzbGljZSIsICJjbG9uZSIKLSAgICBdIH0sCi0gICAgIi13
ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImF1dG8iLCAi
YWx3YXlzIiwgImF2b2lkIiwgImxlZnQiLCAicmlnaHQiLCAicGFnZSIsICJjb2x1bW4iLCAiYXZv
aWQtcGFnZSIsICJhdm9pZC1jb2x1bW4iCi0gICAgXSB9LAotICAgICItd2Via2l0LWNvbHVtbi1i
cmVhay1iZWZvcmUiOiB7IHZhbHVlczogWwotICAgICAgICAiYXV0byIsICJhbHdheXMiLCAiYXZv
aWQiLCAibGVmdCIsICJyaWdodCIsICJwYWdlIiwgImNvbHVtbiIsICJhdm9pZC1wYWdlIiwgImF2
b2lkLWNvbHVtbiIKLSAgICBdIH0sCi0gICAgIi13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZSI6
IHsgdmFsdWVzOiBbCi0gICAgICAgICJhdXRvIiwgImF2b2lkIiwgImF2b2lkLXBhZ2UiLCAiYXZv
aWQtY29sdW1uIgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC1jb2x1bW4tc3BhbiI6IHsgdmFsdWVz
OiBbCi0gICAgICAgICJub25lIiwgImFsbCIKLSAgICBdIH0sCi0gICAgIi13ZWJraXQtY29sdW1u
LWNvdW50IjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImF1dG8iCi0gICAgXSB9LAotICAgICItd2Vi
a2l0LWNvbHVtbi1nYXAiOiB7IHZhbHVlczogWwotICAgICAgICAibm9ybWFsIgotICAgIF0gfSwK
LSAgICAiLXdlYmtpdC1saW5lLWJyZWFrIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImF1dG8iLCAi
bG9vc2UiLCAibm9ybWFsIiwgInN0cmljdCIKLSAgICBdIH0sCi0gICAgIi13ZWJraXQtcGVyc3Bl
Y3RpdmUiOiB7IHZhbHVlczogWwotICAgICAgICAibm9uZSIKLSAgICBdIH0sCi0gICAgIi13ZWJr
aXQtcGVyc3BlY3RpdmUtb3JpZ2luIjogeyB2YWx1ZXM6IFsKLSAgICAgICAgImxlZnQiLCAiY2Vu
dGVyIiwgInJpZ2h0IiwgInRvcCIsICJib3R0b20iCi0gICAgXSB9LAotICAgICItd2Via2l0LXRl
eHQtYWxpZ24tbGFzdCI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJhdXRvIiwgInN0YXJ0IiwgImVu
ZCIsICJsZWZ0IiwgInJpZ2h0IiwgImNlbnRlciIsICJqdXN0aWZ5IgotICAgIF0gfSwKLSAgICAi
LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tbGluZSI6IHsgdmFsdWVzOiBbCi0gICAgICAgICJub25l
IiwgInVuZGVybGluZSIsICJvdmVybGluZSIsICJsaW5lLXRocm91Z2giLCAiYmxpbmsiCi0gICAg
XSB9LAotICAgICItd2Via2l0LXRleHQtZGVjb3JhdGlvbi1zdHlsZSI6IHsgdmFsdWVzOiBbCi0g
ICAgICAgICJzb2xpZCIsICJkb3VibGUiLCAiZG90dGVkIiwgImRhc2hlZCIsICJ3YXZ5IgotICAg
IF0gfSwKLSAgICAiLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcCI6IHsgdmFsdWVzOiBbCi0g
ICAgICAgICJub25lIiwgIm9iamVjdHMiLCAic3BhY2VzIiwgImluayIsICJlZGdlcyIsICJib3gt
ZGVjb3JhdGlvbiIKLSAgICBdIH0sCi0gICAgIi13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbiI6IHsg
dmFsdWVzOiBbCi0gICAgICAgICJsZWZ0IiwgImNlbnRlciIsICJyaWdodCIsICJ0b3AiLCAiYm90
dG9tIgotICAgIF0gfSwKLSAgICAiLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGUiOiB7IHZhbHVlczog
WwotICAgICAgICAiZmxhdCIsICJwcmVzZXJ2ZS0zZCIKLSAgICBdIH0sCi0gICAgIi13ZWJraXQt
dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiB7IHZhbHVlczogWwotICAgICAgICAiZWFzZSIs
ICJsaW5lYXIiLCAiZWFzZS1pbiIsICJlYXNlLW91dCIsICJlYXNlLWluLW91dCIsICJzdGVwLXN0
YXJ0IiwgInN0ZXAtZW5kIiwgInN0ZXBzIiwgImN1YmljLWJlemllciIKLSAgICBdIH0sCi0KLSAg
ICAiLXdlYmtpdC1mbGV4IjogeyBtOiAiZmxleGJveCIgfSwKLSAgICAiLXdlYmtpdC1mbGV4LWJh
c2lzIjogeyBtOiAiZmxleGJveCIgfSwKLSAgICAiLXdlYmtpdC1mbGV4LWZsb3ciOiB7IG06ICJm
bGV4Ym94IiB9LAotICAgICItd2Via2l0LWZsZXgtZ3JvdyI6IHsgbTogImZsZXhib3giIH0sCi0g
ICAgIi13ZWJraXQtZmxleC1zaHJpbmsiOiB7IG06ICJmbGV4Ym94IiB9LAotICAgICItd2Via2l0
LWFuaW1hdGlvbiI6IHsgbTogImFuaW1hdGlvbnMiIH0sCi0gICAgIi13ZWJraXQtYW5pbWF0aW9u
LWRlbGF5IjogeyBtOiAiYW5pbWF0aW9ucyIgfSwKLSAgICAiLXdlYmtpdC1hbmltYXRpb24tZHVy
YXRpb24iOiB7IG06ICJhbmltYXRpb25zIiB9LAotICAgICItd2Via2l0LWFuaW1hdGlvbi1pdGVy
YXRpb24tY291bnQiOiB7IG06ICJhbmltYXRpb25zIiB9LAotICAgICItd2Via2l0LWFuaW1hdGlv
bi1uYW1lIjogeyBtOiAiYW5pbWF0aW9ucyIgfSwKLSAgICAiLXdlYmtpdC1jb2x1bW4tcnVsZSI6
IHsgbTogIm11bHRpY29sIiB9LAotICAgICItd2Via2l0LWNvbHVtbi1ydWxlLWNvbG9yIjogeyBt
OiAibXVsdGljb2wiLCBhOiAiY3JjIiB9LAotICAgICItd2Via2l0LWNvbHVtbi1ydWxlLXN0eWxl
IjogeyBtOiAibXVsdGljb2wiLCBhOiAiY3JzIiB9LAotICAgICItd2Via2l0LWNvbHVtbi1ydWxl
LXdpZHRoIjogeyBtOiAibXVsdGljb2wiLCBhOiAiY3J3IiB9LAotICAgICItd2Via2l0LWNvbHVt
bi13aWR0aCI6IHsgbTogIm11bHRpY29sIiwgYTogImN3IiB9LAotICAgICItd2Via2l0LWNvbHVt
bnMiOiB7IG06ICJtdWx0aWNvbCIgfSwKLSAgICAiLXdlYmtpdC1ncmlkLWNvbHVtbnMiOiB7IG06
ICJncmlkIiB9LAotICAgICItd2Via2l0LWdyaWQtcm93cyI6IHsgbTogImdyaWQiIH0sCi0gICAg
Ii13ZWJraXQtb3JkZXIiOiB7IG06ICJmbGV4Ym94IiB9LAotICAgICItd2Via2l0LXRleHQtZGVj
b3JhdGlvbi1jb2xvciI6IHsgbTogInRleHQtZGVjb3IiIH0sCi0gICAgIi13ZWJraXQtdGV4dC1l
bXBoYXNpcy1jb2xvciI6IHsgbTogInRleHQtZGVjb3IiIH0sCi0gICAgIi13ZWJraXQtdHJhbnNp
dGlvbiI6IHsgbTogInRyYW5zaXRpb25zIiB9LAotICAgICItd2Via2l0LXRyYW5zaXRpb24tZGVs
YXkiOiB7IG06ICJ0cmFuc2l0aW9ucyIgfSwKLSAgICAiLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0
aW9uIjogeyBtOiAidHJhbnNpdGlvbnMiIH0sCi0gICAgIi13ZWJraXQtdHJhbnNpdGlvbi1wcm9w
ZXJ0eSI6IHsgbTogInRyYW5zaXRpb25zIiB9LAotICAgICJiYWNrZ3JvdW5kIjogeyBtOiAiYmFj
a2dyb3VuZCIgfSwKLSAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyBtOiAiYmFja2dyb3Vu
ZCIgfSwKLSAgICAiYmFja2dyb3VuZC1jb2xvciI6IHsgbTogImJhY2tncm91bmQiIH0sCi0gICAg
ImJhY2tncm91bmQtaW1hZ2UiOiB7IG06ICJiYWNrZ3JvdW5kIiB9LAotICAgICJiYWNrZ3JvdW5k
LXBvc2l0aW9uIjogeyBtOiAiYmFja2dyb3VuZCIgfSwKLSAgICAiYmFja2dyb3VuZC1wb3NpdGlv
bi14IjogeyBtOiAiYmFja2dyb3VuZCIgfSwKLSAgICAiYmFja2dyb3VuZC1wb3NpdGlvbi15Ijog
eyBtOiAiYmFja2dyb3VuZCIgfSwKLSAgICAiYmFja2dyb3VuZC1yZXBlYXQteCI6IHsgbTogImJh
Y2tncm91bmQiIH0sCi0gICAgImJhY2tncm91bmQtcmVwZWF0LXkiOiB7IG06ICJiYWNrZ3JvdW5k
IiB9LAotICAgICJib3JkZXItdG9wIjogeyBtOiAiYmFja2dyb3VuZCIgfSwKLSAgICAiYm9yZGVy
LXJpZ2h0IjogeyBtOiAiYmFja2dyb3VuZCIgfSwKLSAgICAiYm9yZGVyLWJvdHRvbSI6IHsgbTog
ImJhY2tncm91bmQiIH0sCi0gICAgImJvcmRlci1sZWZ0IjogeyBtOiAiYmFja2dyb3VuZCIgfSwK
LSAgICAiYm9yZGVyLXJhZGl1cyI6IHsgbTogImJhY2tncm91bmQiIH0sCi0gICAgImJvdHRvbSI6
IHsgbTogInZpc3VyZW4iIH0sCi0gICAgImJveC1zaGFkb3ciOiB7IG06ICJiYWNrZ3JvdW5kIiB9
LAotICAgICJjb2xvciI6IHsgbTogImNvbG9yIiwgYTogImZvcmVncm91bmQiIH0sCi0gICAgImNv
dW50ZXItaW5jcmVtZW50IjogeyBtOiAiZ2VuZXJhdGUiIH0sCi0gICAgImNvdW50ZXItcmVzZXQi
OiB7IG06ICJnZW5lcmF0ZSIgfSwKLSAgICAiaGVpZ2h0IjogeyBtOiAiYm94IiB9LAotICAgICJp
bWFnZS1vcmllbnRhdGlvbiI6IHsgbTogImltYWdlcyIgfSwKLSAgICAibGVmdCI6IHsgbTogInZp
c3VyZW4iIH0sCi0gICAgImxpc3Qtc3R5bGUiOiB7IG06ICJsaXN0cyIgfSwKLSAgICAibWluLWhl
aWdodCI6IHsgbTogImJveCIgfSwKLSAgICAibWluLXdpZHRoIjogeyBtOiAiYm94IiB9LAotICAg
ICJvcGFjaXR5IjogeyBtOiAiY29sb3IiLCBhOiAidHJhbnNwYXJlbmN5IiB9LAotICAgICJvcnBo
YW5zIjogeyBtOiAicGFnZSIgfSwKLSAgICAib3V0bGluZS1vZmZzZXQiOiB7IG06ICJ1aSIgfSwK
LSAgICAicGFkZGluZyI6IHsgbTogImJveCIsIGE6ICJwYWRkaW5nMSIgfSwKLSAgICAicGFkZGlu
Zy1ib3R0b20iOiB7IG06ICJib3giIH0sCi0gICAgInBhZGRpbmctbGVmdCI6IHsgbTogImJveCIg
fSwKLSAgICAicGFkZGluZy1yaWdodCI6IHsgbTogImJveCIgfSwKLSAgICAicGFkZGluZy10b3Ai
OiB7IG06ICJib3giIH0sCi0gICAgInBhZ2UiOiB7IG06ICJwYWdlIiB9LAotICAgICJxdW90ZXMi
OiB7IG06ICJnZW5lcmF0ZSIgfSwKLSAgICAicmlnaHQiOiB7IG06ICJ2aXN1cmVuIiB9LAotICAg
ICJ0YWItc2l6ZSI6IHsgbTogInRleHQiIH0sCi0gICAgInRleHQtaW5kZW50IjogeyBtOiAidGV4
dCIgfSwKLSAgICAidGV4dC1zaGFkb3ciOiB7IG06ICJ0ZXh0LWRlY29yIiB9LAotICAgICJ0b3Ai
OiB7IG06ICJ2aXN1cmVuIiB9LAotICAgICJ1bmljb2RlLXJhbmdlIjogeyBtOiAiZm9udHMiLCBh
OiAiZGVzY2RlZi11bmljb2RlLXJhbmdlIiB9LAotICAgICJ3aWRvd3MiOiB7IG06ICJwYWdlIiB9
LAotICAgICJ3aWR0aCI6IHsgbTogImJveCIgfSwKLSAgICAiei1pbmRleCI6IHsgbTogInZpc3Vy
ZW4iIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lCi0gKiBAcmV0
dXJuIHshV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhfQotICovCi1XZWJJbnNwZWN0b3IuQ1NTTWV0
YWRhdGEua2V5d29yZHNGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uKHByb3BlcnR5TmFtZSkKLXsKLSAg
ICB2YXIgYWNjZXB0ZWRLZXl3b3JkcyA9IFsiaW5oZXJpdCIsICJpbml0aWFsIl07Ci0gICAgdmFy
IGRlc2NyaXB0b3IgPSBXZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuZGVzY3JpcHRvcihwcm9wZXJ0
eU5hbWUpOwotICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWVzKQotICAgICAg
ICBhY2NlcHRlZEtleXdvcmRzLnB1c2guYXBwbHkoYWNjZXB0ZWRLZXl3b3JkcywgZGVzY3JpcHRv
ci52YWx1ZXMpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gV2ViSW5zcGVjdG9yLkNTU01ldGFk
YXRhLl9jb2xvckF3YXJlUHJvcGVydGllcykKLSAgICAgICAgYWNjZXB0ZWRLZXl3b3Jkcy5wdXNo
LmFwcGx5KGFjY2VwdGVkS2V5d29yZHMsIFdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5fY29sb3Jz
KTsKLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YShhY2NlcHRlZEtleXdv
cmRzKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lCi0gKiBAcmV0
dXJuIHtPYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5kZXNjcmlwdG9yID0g
ZnVuY3Rpb24ocHJvcGVydHlOYW1lKQotewotICAgIGlmICghcHJvcGVydHlOYW1lKQotICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICB2YXIgdW5wcmVmaXhlZE5hbWUgPSBwcm9wZXJ0eU5hbWUucmVw
bGFjZSgvXi13ZWJraXQtLywgIiIpOwotICAgIHZhciBlbnRyeSA9IFdlYkluc3BlY3Rvci5DU1NN
ZXRhZGF0YS5fcHJvcGVydHlEYXRhTWFwW3Byb3BlcnR5TmFtZV07Ci0gICAgaWYgKCFlbnRyeSAm
JiB1bnByZWZpeGVkTmFtZSAhPT0gcHJvcGVydHlOYW1lKQotICAgICAgICBlbnRyeSA9IFdlYklu
c3BlY3Rvci5DU1NNZXRhZGF0YS5fcHJvcGVydHlEYXRhTWFwW3VucHJlZml4ZWROYW1lXTsKLSAg
ICByZXR1cm4gZW50cnkgfHwgbnVsbDsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLnJl
cXVlc3RDU1NTaG9ydGhhbmREYXRhID0gZnVuY3Rpb24oKQotewotICAgIGZ1bmN0aW9uIHByb3Bl
cnR5TmFtZXNDYWxsYmFjayhlcnJvciwgcHJvcGVydGllcykKLSAgICB7Ci0gICAgICAgIGlmICgh
ZXJyb3IpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuY3NzUHJvcGVydGll
c01ldGFpbmZvID0gbmV3IFdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YShwcm9wZXJ0aWVzKTsKLSAg
ICB9Ci0gICAgQ1NTQWdlbnQuZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhwcm9wZXJ0eU5hbWVz
Q2FsbGJhY2spOwotfQotCi1XZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuY3NzUHJvcGVydGllc01l
dGFpbmZvS2V5U2V0ID0gZnVuY3Rpb24oKQotewotICAgIGlmICghV2ViSW5zcGVjdG9yLkNTU01l
dGFkYXRhLl9jc3NQcm9wZXJ0aWVzTWV0YWluZm9LZXlTZXQpCi0gICAgICAgIFdlYkluc3BlY3Rv
ci5DU1NNZXRhZGF0YS5fY3NzUHJvcGVydGllc01ldGFpbmZvS2V5U2V0ID0gV2ViSW5zcGVjdG9y
LkNTU01ldGFkYXRhLmNzc1Byb3BlcnRpZXNNZXRhaW5mby5rZXlTZXQoKTsKLSAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLl9jc3NQcm9wZXJ0aWVzTWV0YWluZm9LZXlTZXQ7Ci19
Ci0KLS8vIFdlaWdodCBvZiBDU1MgcHJvcGVydGllcyBiYXNlZCB0aGVpciB1c2FnZSBvbiBmZXcg
cG9wdWxhciB3ZWJzaXRlcyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8zNzUxNDM2Ci1XZWJJbnNw
ZWN0b3IuQ1NTTWV0YWRhdGEuV2VpZ2h0ID0gewotICAgICItd2Via2l0LWFuaW1hdGlvbiI6IDEs
Ci0gICAgIi13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uIjogMSwKLSAgICAiLXdlYmtpdC1hbmlt
YXRpb24taXRlcmF0aW9uLWNvdW50IjogMSwKLSAgICAiLXdlYmtpdC1hbmltYXRpb24tbmFtZSI6
IDEsCi0gICAgIi13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiI6IDEsCi0gICAgIi13
ZWJraXQtYXBwZWFyYW5jZSI6IDEsCi0gICAgIi13ZWJraXQtYmFja2dyb3VuZC1jbGlwIjogMiwK
LSAgICAiLXdlYmtpdC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nIjogMSwKLSAgICAiLXdlYmtp
dC1ib3JkZXItdmVydGljYWwtc3BhY2luZyI6IDEsCi0gICAgIi13ZWJraXQtYm94LXNoYWRvdyI6
IDI0LAotICAgICItd2Via2l0LWZvbnQtc21vb3RoaW5nIjogMiwKLSAgICAiLXdlYmtpdC10cmFu
c2Zvcm0iOiAxLAotICAgICItd2Via2l0LXRyYW5zaXRpb24iOiA4LAotICAgICItd2Via2l0LXRy
YW5zaXRpb24tZGVsYXkiOiA3LAotICAgICItd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb24iOiA3
LAotICAgICItd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHkiOiA3LAotICAgICItd2Via2l0LXRy
YW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIjogNiwKLSAgICAiLXdlYmtpdC11c2VyLXNlbGVjdCI6
IDEsCi0gICAgImJhY2tncm91bmQiOiAyMjIsCi0gICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6
IDE0NCwKLSAgICAiYmFja2dyb3VuZC1jbGlwIjogMTQzLAotICAgICJiYWNrZ3JvdW5kLWNvbG9y
IjogMjIyLAotICAgICJiYWNrZ3JvdW5kLWltYWdlIjogMjAxLAotICAgICJiYWNrZ3JvdW5kLW9y
aWdpbiI6IDE0MiwKLSAgICAiYmFja2dyb3VuZC1zaXplIjogMjUsCi0gICAgImJvcmRlciI6IDEy
MSwKLSAgICAiYm9yZGVyLWJvdHRvbSI6IDEyMSwKLSAgICAiYm9yZGVyLWJvdHRvbS1jb2xvciI6
IDEyMSwKLSAgICAiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyI6IDUwLAotICAgICJib3JkZXIt
Ym90dG9tLXJpZ2h0LXJhZGl1cyI6IDUwLAotICAgICJib3JkZXItYm90dG9tLXN0eWxlIjogMTE0
LAotICAgICJib3JkZXItYm90dG9tLXdpZHRoIjogMTIwLAotICAgICJib3JkZXItY29sbGFwc2Ui
OiAzLAotICAgICJib3JkZXItbGVmdCI6IDk1LAotICAgICJib3JkZXItbGVmdC1jb2xvciI6IDk1
LAotICAgICJib3JkZXItbGVmdC1zdHlsZSI6IDg5LAotICAgICJib3JkZXItbGVmdC13aWR0aCI6
IDk0LAotICAgICJib3JkZXItcmFkaXVzIjogNTAsCi0gICAgImJvcmRlci1yaWdodCI6IDkzLAot
ICAgICJib3JkZXItcmlnaHQtY29sb3IiOiA5MywKLSAgICAiYm9yZGVyLXJpZ2h0LXN0eWxlIjog
ODgsCi0gICAgImJvcmRlci1yaWdodC13aWR0aCI6IDkzLAotICAgICJib3JkZXItdG9wIjogMTEx
LAotICAgICJib3JkZXItdG9wLWNvbG9yIjogMTExLAotICAgICJib3JkZXItdG9wLWxlZnQtcmFk
aXVzIjogNDksCi0gICAgImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogNDksCi0gICAgImJvcmRl
ci10b3Atc3R5bGUiOiAxMDQsCi0gICAgImJvcmRlci10b3Atd2lkdGgiOiAxMDksCi0gICAgImJv
dHRvbSI6IDE2LAotICAgICJib3gtc2hhZG93IjogMjUsCi0gICAgImJveC1zaXppbmciOiAyLAot
ICAgICJjbGVhciI6IDIzLAotICAgICJjb2xvciI6IDIzNywKLSAgICAiY3Vyc29yIjogMzQsCi0g
ICAgImRpcmVjdGlvbiI6IDQsCi0gICAgImRpc3BsYXkiOiAyMTAsCi0gICAgImZpbGwiOiAyLAot
ICAgICJmaWx0ZXIiOiAxLAotICAgICJmbG9hdCI6IDEwNSwKLSAgICAiZm9udCI6IDE3NCwKLSAg
ICAiZm9udC1mYW1pbHkiOiAyNSwKLSAgICAiZm9udC1zaXplIjogMTc0LAotICAgICJmb250LXN0
eWxlIjogOSwKLSAgICAiZm9udC13ZWlnaHQiOiA4OSwKLSAgICAiaGVpZ2h0IjogMTYxLAotICAg
ICJsZWZ0IjogNTQsCi0gICAgImxldHRlci1zcGFjaW5nIjogMywKLSAgICAibGluZS1oZWlnaHQi
OiA3NSwKLSAgICAibGlzdC1zdHlsZSI6IDE3LAotICAgICJsaXN0LXN0eWxlLWltYWdlIjogOCwK
LSAgICAibGlzdC1zdHlsZS1wb3NpdGlvbiI6IDgsCi0gICAgImxpc3Qtc3R5bGUtdHlwZSI6IDE3
LAotICAgICJtYXJnaW4iOiAyNDEsCi0gICAgIm1hcmdpbi1ib3R0b20iOiAyMjYsCi0gICAgIm1h
cmdpbi1sZWZ0IjogMjI1LAotICAgICJtYXJnaW4tcmlnaHQiOiAyMTMsCi0gICAgIm1hcmdpbi10
b3AiOiAyNDEsCi0gICAgIm1heC1oZWlnaHQiOiA1LAotICAgICJtYXgtd2lkdGgiOiAxMSwKLSAg
ICAibWluLWhlaWdodCI6IDksCi0gICAgIm1pbi13aWR0aCI6IDYsCi0gICAgIm9wYWNpdHkiOiAy
NCwKLSAgICAib3V0bGluZSI6IDEwLAotICAgICJvdXRsaW5lLWNvbG9yIjogMTAsCi0gICAgIm91
dGxpbmUtc3R5bGUiOiAxMCwKLSAgICAib3V0bGluZS13aWR0aCI6IDEwLAotICAgICJvdmVyZmxv
dyI6IDU3LAotICAgICJvdmVyZmxvdy14IjogNTYsCi0gICAgIm92ZXJmbG93LXkiOiA1NywKLSAg
ICAicGFkZGluZyI6IDIxNiwKLSAgICAicGFkZGluZy1ib3R0b20iOiAyMDgsCi0gICAgInBhZGRp
bmctbGVmdCI6IDIxNiwKLSAgICAicGFkZGluZy1yaWdodCI6IDIwNiwKLSAgICAicGFkZGluZy10
b3AiOiAyMTYsCi0gICAgInBvc2l0aW9uIjogMTM2LAotICAgICJyZXNpemUiOiAxLAotICAgICJy
aWdodCI6IDI5LAotICAgICJzdHJva2UiOiAxLAotICAgICJzdHJva2Utd2lkdGgiOiAxLAotICAg
ICJ0YWJsZS1sYXlvdXQiOiAxLAotICAgICJ0ZXh0LWFsaWduIjogNjYsCi0gICAgInRleHQtZGVj
b3JhdGlvbiI6IDUzLAotICAgICJ0ZXh0LWluZGVudCI6IDksCi0gICAgInRleHQtb3ZlcmZsb3ci
OiA4LAotICAgICJ0ZXh0LXNoYWRvdyI6IDE5LAotICAgICJ0ZXh0LXRyYW5zZm9ybSI6IDUsCi0g
ICAgInRvcCI6IDcxLAotICAgICJ1bmljb2RlLWJpZGkiOiAxLAotICAgICJ2ZXJ0aWNhbC1hbGln
biI6IDM3LAotICAgICJ2aXNpYmlsaXR5IjogMTEsCi0gICAgIndoaXRlLXNwYWNlIjogMjQsCi0g
ICAgIndpZHRoIjogMjU1LAotICAgICJ3b3JkLXdyYXAiOiA2LAotICAgICJ6LWluZGV4IjogMzIs
Ci0gICAgInpvb20iOiAxMAotfTsKLQotCi1XZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEucHJvdG90
eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXgKLSAgICAgKiBA
cmV0dXJuIHshQXJyYXkuPHN0cmluZz59Ci0gICAgICovCi0gICAgc3RhcnRzV2l0aDogZnVuY3Rp
b24ocHJlZml4KQotICAgIHsKLSAgICAgICAgdmFyIGZpcnN0SW5kZXggPSB0aGlzLl9maXJzdElu
ZGV4T2ZQcmVmaXgocHJlZml4KTsKLSAgICAgICAgaWYgKGZpcnN0SW5kZXggPT09IC0xKQotICAg
ICAgICAgICAgcmV0dXJuIFtdOwotCi0gICAgICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgICAg
IHdoaWxlIChmaXJzdEluZGV4IDwgdGhpcy5fdmFsdWVzLmxlbmd0aCAmJiB0aGlzLl92YWx1ZXNb
Zmlyc3RJbmRleF0uc3RhcnRzV2l0aChwcmVmaXgpKQotICAgICAgICAgICAgcmVzdWx0cy5wdXNo
KHRoaXMuX3ZhbHVlc1tmaXJzdEluZGV4KytdKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHByb3BlcnRp
ZXMKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgbW9zdFVzZWRPZjogZnVu
Y3Rpb24ocHJvcGVydGllcykKLSAgICB7Ci0gICAgICAgIHZhciBtYXhXZWlnaHQgPSAwOwotICAg
ICAgICB2YXIgaW5kZXggPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRp
ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciB3ZWlnaHQgPSBXZWJJbnNwZWN0b3Iu
Q1NTTWV0YWRhdGEuV2VpZ2h0W3Byb3BlcnRpZXNbaV1dOwotICAgICAgICAgICAgaWYgKHdlaWdo
dCA+IG1heFdlaWdodCkgewotICAgICAgICAgICAgICAgIG1heFdlaWdodCA9IHdlaWdodDsKLSAg
ICAgICAgICAgICAgICBpbmRleCA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGluZGV4OwotICAgIH0sCi0KLSAgICBfZmlyc3RJbmRleE9mUHJlZml4OiBmdW5j
dGlvbihwcmVmaXgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlcy5sZW5ndGgpCi0g
ICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmICghcHJlZml4KQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAgICAgdmFyIG1heEluZGV4ID0gdGhpcy5fdmFsdWVzLmxlbmd0aCAt
IDE7Ci0gICAgICAgIHZhciBtaW5JbmRleCA9IDA7Ci0gICAgICAgIHZhciBmb3VuZEluZGV4Owot
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHZhciBtaWRkbGVJbmRleCA9IChtYXhJbmRleCAr
IG1pbkluZGV4KSA+PiAxOwotICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc1ttaWRkbGVJbmRl
eF0uc3RhcnRzV2l0aChwcmVmaXgpKSB7Ci0gICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IG1p
ZGRsZUluZGV4OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHRoaXMuX3ZhbHVlc1ttaWRkbGVJbmRleF0gPCBwcmVmaXgpCi0gICAgICAgICAg
ICAgICAgbWluSW5kZXggPSBtaWRkbGVJbmRleCArIDE7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbWF4SW5kZXggPSBtaWRkbGVJbmRleCAtIDE7Ci0gICAgICAgIH0gd2hpbGUg
KG1pbkluZGV4IDw9IG1heEluZGV4KTsKLQotICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gdW5k
ZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIHdoaWxlIChmb3VuZElu
ZGV4ICYmIHRoaXMuX3ZhbHVlc1tmb3VuZEluZGV4IC0gMV0uc3RhcnRzV2l0aChwcmVmaXgpKQot
ICAgICAgICAgICAgZm91bmRJbmRleC0tOwotCi0gICAgICAgIHJldHVybiBmb3VuZEluZGV4Owot
ICAgIH0sCi0KLSAgICBrZXlTZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fa2V5U2V0KQotICAgICAgICAgICAgdGhpcy5fa2V5U2V0ID0gdGhpcy5fdmFsdWVzLmtleVNl
dCgpOwotICAgICAgICByZXR1cm4gdGhpcy5fa2V5U2V0OwotICAgIH0sCi0KLSAgICBuZXh0OiBm
dW5jdGlvbihzdHIsIHByZWZpeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZXN0
KHN0ciwgcHJlZml4LCAxKTsKLSAgICB9LAotCi0gICAgcHJldmlvdXM6IGZ1bmN0aW9uKHN0ciwg
cHJlZml4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3Nlc3Qoc3RyLCBwcmVmaXgs
IC0xKTsKLSAgICB9LAotCi0gICAgX2Nsb3Nlc3Q6IGZ1bmN0aW9uKHN0ciwgcHJlZml4LCBzaGlm
dCkKLSAgICB7Ci0gICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgcmV0dXJuICIiOwotCi0g
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3ZhbHVlcy5pbmRleE9mKHN0cik7Ci0gICAgICAgIGlm
IChpbmRleCA9PT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICAgICAgaWYgKCFw
cmVmaXgpIHsKLSAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgdGhpcy5fdmFsdWVzLmxlbmd0
aCArIHNoaWZ0KSAlIHRoaXMuX3ZhbHVlcy5sZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5fdmFsdWVzW2luZGV4XTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBwcm9wZXJ0aWVzV2l0
aFByZWZpeCA9IHRoaXMuc3RhcnRzV2l0aChwcmVmaXgpOwotICAgICAgICB2YXIgaiA9IHByb3Bl
cnRpZXNXaXRoUHJlZml4LmluZGV4T2Yoc3RyKTsKLSAgICAgICAgaiA9IChqICsgcHJvcGVydGll
c1dpdGhQcmVmaXgubGVuZ3RoICsgc2hpZnQpICUgcHJvcGVydGllc1dpdGhQcmVmaXgubGVuZ3Ro
OwotICAgICAgICByZXR1cm4gcHJvcGVydGllc1dpdGhQcmVmaXhbal07Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaG9ydGhhbmQKLSAgICAgKiBAcmV0dXJuIHs/
QXJyYXkuPHN0cmluZz59Ci0gICAgICovCi0gICAgbG9uZ2hhbmRzOiBmdW5jdGlvbihzaG9ydGhh
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ2hhbmRzW3Nob3J0aGFuZF07Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb25naGFuZAotICAgICAq
IEByZXR1cm4gez9BcnJheS48c3RyaW5nPn0KLSAgICAgKi8KLSAgICBzaG9ydGhhbmRzOiBmdW5j
dGlvbihsb25naGFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zaG9ydGhhbmRzW2xv
bmdoYW5kXTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NTU05hbWVkRmxvd0NvbGxlY3Rpb25zVmlldy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRGbG93Q29sbGVjdGlvbnNWaWV3LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTU1NTgxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRGbG93Q29sbGVjdGlvbnNWaWV3Lmpz
CisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
LSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlNpZGViYXJWaWV3fQotICovCi1XZWJJbnNw
ZWN0b3IuQ1NTTmFtZWRGbG93Q29sbGVjdGlvbnNWaWV3ID0gZnVuY3Rpb24oKQotewotICAgIFdl
Ykluc3BlY3Rvci5TaWRlYmFyVmlldy5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5TaWRlYmFyVmll
dy5TaWRlYmFyUG9zaXRpb24uU3RhcnQpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygi
Y3NzTmFtZWRGbG93cy5jc3MiKTsKLQotICAgIHRoaXMuX25hbWVkRmxvd3MgPSB7fTsKLSAgICB0
aGlzLl9jb250ZW50Tm9kZXMgPSB7fTsKLSAgICB0aGlzLl9yZWdpb25Ob2RlcyA9IHt9OwotCi0g
ICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNzcy1uYW1lZC1mbG93LWNvbGxlY3Rpb25z
LXZpZXciKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZmlsbCIpOwotCi0gICAg
dGhpcy5fc3RhdHVzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAg
ICB0aGlzLl9zdGF0dXNFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJDU1MgTmFtZWQgRmxvd3MiKTsKLQotICAgIHZhciBzaWRlYmFySGVhZGVyID0gdGhpcy5maXJz
dEVsZW1lbnQoKS5jcmVhdGVDaGlsZCgiZGl2IiwgInRhYmJlZC1wYW5lLWhlYWRlciBzZWxlY3Rl
ZCBzaWRlYmFyLWhlYWRlciIpOwotICAgIHZhciB0YWIgPSBzaWRlYmFySGVhZGVyLmNyZWF0ZUNo
aWxkKCJkaXYiLCAidGFiYmVkLXBhbmUtaGVhZGVyLXRhYiIpOwotICAgIHRhYi5jcmVhdGVDaGls
ZCgic3BhbiIsICJ0YWJiZWQtcGFuZS1oZWFkZXItdGFiLXRpdGxlIikudGV4dENvbnRlbnQgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNTUyBOYW1lZCBGbG93cyIpOwotCi0gICAgdGhpcy5fc2lk
ZWJhckNvbnRlbnRFbGVtZW50ID0gdGhpcy5maXJzdEVsZW1lbnQoKS5jcmVhdGVDaGlsZCgiZGl2
IiwgInNpZGViYXItY29udGVudCBvdXRsaW5lLWRpc2Nsb3N1cmUiKTsKLSAgICB0aGlzLl9mbG93
TGlzdEVsZW1lbnQgPSB0aGlzLl9zaWRlYmFyQ29udGVudEVsZW1lbnQuY3JlYXRlQ2hpbGQoIm9s
Iik7Ci0gICAgdGhpcy5fZmxvd1RyZWUgPSBuZXcgVHJlZU91dGxpbmUodGhpcy5fZmxvd0xpc3RF
bGVtZW50KTsKLQotICAgIHRoaXMuX2VtcHR5RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgIHRoaXMuX2VtcHR5RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJpbmZvIik7
Ci0gICAgdGhpcy5fZW1wdHlFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJObyBDU1MgTmFtZWQgRmxvd3MiKTsKLQotICAgIHRoaXMuX3RhYmJlZFBhbmUgPSBuZXcg
V2ViSW5zcGVjdG9yLlRhYmJlZFBhbmUoKTsKLSAgICB0aGlzLl90YWJiZWRQYW5lLmNsb3NlYWJs
ZVRhYnMgPSB0cnVlOwotICAgIHRoaXMuX3RhYmJlZFBhbmUuc2hvdyh0aGlzLnNlY29uZEVsZW1l
bnQoKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5DU1NOYW1lZEZsb3dDb2xsZWN0aW9uc1ZpZXcucHJv
dG90eXBlID0gewotICAgIHNob3dJbkRyYXdlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLnNob3dWaWV3SW5EcmF3ZXIodGhpcy5fc3RhdHVzRWxlbWVudCwgdGhpcyk7
Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuX2RvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFdlYkluc3BlY3Rv
ci5jc3NNb2RlbC5nZXROYW1lZEZsb3dDb2xsZWN0aW9uQXN5bmModGhpcy5fZG9jdW1lbnQuaWQs
IHRoaXMuX3Jlc2V0TmFtZWRGbG93cy5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRE9NRG9jdW1lbnR9IGRvY3VtZW50Ci0gICAgICov
Ci0gICAgX3NldERvY3VtZW50OiBmdW5jdGlvbihkb2N1bWVudCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2RvY3VtZW50ID0gZG9jdW1lbnQ7Ci0gICAgICAgIHRoaXMucmVzZXQoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAg
ICovCi0gICAgX2RvY3VtZW50VXBkYXRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgZG9jdW1lbnQgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5ET01Eb2N1bWVudH0gKi8g
KGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9zZXREb2N1bWVudChkb2N1bWVudCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQ29udGVudAotICAgICAq
LwotICAgIF9zZXRTaWRlYmFySGFzQ29udGVudDogZnVuY3Rpb24oaGFzQ29udGVudCkKLSAgICB7
Ci0gICAgICAgIGlmIChoYXNDb250ZW50KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2VtcHR5
RWxlbWVudC5wYXJlbnROb2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgdGhpcy5fc2lkZWJhckNvbnRlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VtcHR5RWxl
bWVudCk7Ci0gICAgICAgICAgICB0aGlzLl9zaWRlYmFyQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fZmxvd0xpc3RFbGVtZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghdGhpcy5fZmxvd0xpc3RFbGVtZW50LnBhcmVudE5vZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICB0aGlzLl9zaWRlYmFyQ29udGVudEVsZW1lbnQucmVtb3Zl
Q2hpbGQodGhpcy5fZmxvd0xpc3RFbGVtZW50KTsKLSAgICAgICAgICAgIHRoaXMuX3NpZGViYXJD
b250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbXB0eUVsZW1lbnQpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hbWVkRmxv
d30gZmxvdwotICAgICAqLwotICAgIF9hcHBlbmROYW1lZEZsb3c6IGZ1bmN0aW9uKGZsb3cpCi0g
ICAgewotICAgICAgICB2YXIgZmxvd0hhc2ggPSB0aGlzLl9oYXNoTmFtZWRGbG93KGZsb3cuZG9j
dW1lbnROb2RlSWQsIGZsb3cubmFtZSk7Ci0gICAgICAgIHZhciBmbG93Q29udGFpbmVyID0geyBm
bG93OiBmbG93LCBmbG93SGFzaDogZmxvd0hhc2ggfTsKLQotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGZsb3cuY29udGVudC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2NvbnRl
bnROb2Rlc1tmbG93LmNvbnRlbnRbaV1dID0gZmxvd0hhc2g7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZmxvdy5yZWdpb25zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fcmVn
aW9uTm9kZXNbZmxvdy5yZWdpb25zW2ldLm5vZGVJZF0gPSBmbG93SGFzaDsKLQotICAgICAgICB2
YXIgZmxvd1RyZWVJdGVtID0gbmV3IFdlYkluc3BlY3Rvci5GbG93VHJlZUVsZW1lbnQoZmxvd0Nv
bnRhaW5lcik7Ci0gICAgICAgIGZsb3dUcmVlSXRlbS5vbnNlbGVjdCA9IHRoaXMuX3NlbGVjdE5h
bWVkRmxvd1RhYi5iaW5kKHRoaXMsIGZsb3dIYXNoKTsKLQotICAgICAgICBmbG93Q29udGFpbmVy
LmZsb3dUcmVlSXRlbSA9IGZsb3dUcmVlSXRlbTsKLSAgICAgICAgdGhpcy5fbmFtZWRGbG93c1tm
bG93SGFzaF0gPSBmbG93Q29udGFpbmVyOwotCi0gICAgICAgIGlmICghdGhpcy5fZmxvd1RyZWUu
Y2hpbGRyZW4ubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fc2V0U2lkZWJhckhhc0NvbnRlbnQo
dHJ1ZSk7Ci0gICAgICAgIHRoaXMuX2Zsb3dUcmVlLmFwcGVuZENoaWxkKGZsb3dUcmVlSXRlbSk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmbG93SGFzaAotICAg
ICAqLwotICAgIF9yZW1vdmVOYW1lZEZsb3c6IGZ1bmN0aW9uKGZsb3dIYXNoKQotICAgIHsKLSAg
ICAgICAgdmFyIGZsb3dDb250YWluZXIgPSB0aGlzLl9uYW1lZEZsb3dzW2Zsb3dIYXNoXTsKLQot
ICAgICAgICBpZiAodGhpcy5fdGFiYmVkUGFuZS5fdGFic0J5SWRbZmxvd0hhc2hdKQotICAgICAg
ICAgICAgdGhpcy5fdGFiYmVkUGFuZS5jbG9zZVRhYihmbG93SGFzaCk7Ci0gICAgICAgIHRoaXMu
X2Zsb3dUcmVlLnJlbW92ZUNoaWxkKGZsb3dDb250YWluZXIuZmxvd1RyZWVJdGVtKTsKLQotICAg
ICAgICB2YXIgZmxvdyA9IGZsb3dDb250YWluZXIuZmxvdzsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBmbG93LmNvbnRlbnQubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkZWxldGUgdGhp
cy5fY29udGVudE5vZGVzW2Zsb3cuY29udGVudFtpXV07Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZmxvdy5yZWdpb25zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGVsZXRlIHRoaXMu
X3JlZ2lvbk5vZGVzW2Zsb3cucmVnaW9uc1tpXS5ub2RlSWRdOwotCi0gICAgICAgIGRlbGV0ZSB0
aGlzLl9uYW1lZEZsb3dzW2Zsb3dIYXNoXTsKLQotICAgICAgICBpZiAoIXRoaXMuX2Zsb3dUcmVl
LmNoaWxkcmVuLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuX3NldFNpZGViYXJIYXNDb250ZW50
KGZhbHNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
TmFtZWRGbG93fSBmbG93Ci0gICAgICovCi0gICAgX3VwZGF0ZU5hbWVkRmxvdzogZnVuY3Rpb24o
ZmxvdykKLSAgICB7Ci0gICAgICAgIHZhciBmbG93SGFzaCA9IHRoaXMuX2hhc2hOYW1lZEZsb3co
Zmxvdy5kb2N1bWVudE5vZGVJZCwgZmxvdy5uYW1lKTsKLSAgICAgICAgdmFyIGZsb3dDb250YWlu
ZXIgPSB0aGlzLl9uYW1lZEZsb3dzW2Zsb3dIYXNoXTsKLQotICAgICAgICBpZiAoIWZsb3dDb250
YWluZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG9sZEZsb3cgPSBmbG93
Q29udGFpbmVyLmZsb3c7Ci0gICAgICAgIGZsb3dDb250YWluZXIuZmxvdyA9IGZsb3c7Ci0KLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGRGbG93LmNvbnRlbnQubGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGVudE5vZGVzW29sZEZsb3cuY29udGVudFtpXV07
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkRmxvdy5yZWdpb25zLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JlZ2lvbk5vZGVzW29sZEZsb3cucmVnaW9uc1tp
XS5ub2RlSWRdOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmxvdy5jb250ZW50Lmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fY29udGVudE5vZGVzW2Zsb3cuY29udGVudFtp
XV0gPSBmbG93SGFzaDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbG93LnJlZ2lvbnMu
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9yZWdpb25Ob2Rlc1tmbG93LnJlZ2lvbnNb
aV0ubm9kZUlkXSA9IGZsb3dIYXNoOwotCi0gICAgICAgIGZsb3dDb250YWluZXIuZmxvd1RyZWVJ
dGVtLnNldE92ZXJzZXQoZmxvdy5vdmVyc2V0KTsKLQotICAgICAgICBpZiAoZmxvd0NvbnRhaW5l
ci5mbG93VmlldykKLSAgICAgICAgICAgIGZsb3dDb250YWluZXIuZmxvd1ZpZXcuZmxvdyA9IGZs
b3c7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hbWVk
Rmxvd0NvbGxlY3Rpb259IG5hbWVkRmxvd0NvbGxlY3Rpb24KLSAgICAgKi8KLSAgICBfcmVzZXRO
YW1lZEZsb3dzOiBmdW5jdGlvbihuYW1lZEZsb3dDb2xsZWN0aW9uKQotICAgIHsKLSAgICAgICAg
Zm9yICh2YXIgZmxvd0hhc2ggaW4gdGhpcy5fbmFtZWRGbG93cykKLSAgICAgICAgICAgIHRoaXMu
X3JlbW92ZU5hbWVkRmxvdyhmbG93SGFzaCk7Ci0KLSAgICAgICAgdmFyIG5hbWVkRmxvd3MgPSBu
YW1lZEZsb3dDb2xsZWN0aW9uLm5hbWVkRmxvd01hcDsKLSAgICAgICAgZm9yICh2YXIgZmxvd05h
bWUgaW4gbmFtZWRGbG93cykKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZE5hbWVkRmxvdyhuYW1l
ZEZsb3dzW2Zsb3dOYW1lXSk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9mbG93VHJlZS5jaGlsZHJl
bi5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLl9zZXRTaWRlYmFySGFzQ29udGVudChmYWxzZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3Nob3dOYW1lZEZsb3dGb3JOb2RlKFdl
Ykluc3BlY3Rvci5wYW5lbCgiZWxlbWVudHMiKS50cmVlT3V0bGluZS5zZWxlY3RlZERPTU5vZGUo
KSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50
fSBldmVudAotICAgICAqLwotICAgIF9uYW1lZEZsb3dDcmVhdGVkOiBmdW5jdGlvbihldmVudCkK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBvbmx5IGhhdmUgc3VwcG9ydCBmb3IgTmFtZWQg
Rmxvd3MgaW4gdGhlIG1haW4gZG9jdW1lbnQuCi0gICAgICAgIGlmIChldmVudC5kYXRhLmRvY3Vt
ZW50Tm9kZUlkICE9PSB0aGlzLl9kb2N1bWVudC5pZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB2YXIgZmxvdyA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLk5hbWVkRmxvd30gKi8g
KGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9hcHBlbmROYW1lZEZsb3coZmxvdyk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAot
ICAgICAqLwotICAgIF9uYW1lZEZsb3dSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBXZSBvbmx5IGhhdmUgc3VwcG9ydCBmb3IgTmFtZWQgRmxvd3MgaW4g
dGhlIG1haW4gZG9jdW1lbnQuCi0gICAgICAgIGlmIChldmVudC5kYXRhLmRvY3VtZW50Tm9kZUlk
ICE9PSB0aGlzLl9kb2N1bWVudC5pZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
aGlzLl9yZW1vdmVOYW1lZEZsb3codGhpcy5faGFzaE5hbWVkRmxvdyhldmVudC5kYXRhLmRvY3Vt
ZW50Tm9kZUlkLCBldmVudC5kYXRhLmZsb3dOYW1lKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9yZWdp
b25MYXlvdXRVcGRhdGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBvbmx5IGhhdmUgc3VwcG9ydCBmb3IgTmFtZWQgRmxvd3MgaW4gdGhlIG1haW4gZG9jdW1l
bnQuCi0gICAgICAgIGlmIChldmVudC5kYXRhLmRvY3VtZW50Tm9kZUlkICE9PSB0aGlzLl9kb2N1
bWVudC5pZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgZmxvdyA9IC8qKiBA
dHlwZSB7V2ViSW5zcGVjdG9yLk5hbWVkRmxvd30gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0
aGlzLl91cGRhdGVOYW1lZEZsb3coZmxvdyk7Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfcmVnaW9u
T3ZlcnNldENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IFdlIG9ubHkgaGF2ZSBzdXBwb3J0IGZvciBOYW1lZCBGbG93cyBpbiB0aGUgbWFpbiBkb2N1bWVu
dC4KLSAgICAgICAgaWYgKGV2ZW50LmRhdGEuZG9jdW1lbnROb2RlSWQgIT09IHRoaXMuX2RvY3Vt
ZW50LmlkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgdmFyIGZsb3cg
PSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5OYW1lZEZsb3d9ICovIChldmVudC5kYXRhKTsKLSAg
ICAgICAgdGhpcy5fdXBkYXRlTmFtZWRGbG93KGZsb3cpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gZG9jdW1lbnROb2RlSWQKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gZmxvd05hbWUKLSAgICAgKi8KLSAgICBfaGFzaE5hbWVkRmxvdzogZnVuY3Rp
b24oZG9jdW1lbnROb2RlSWQsIGZsb3dOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50Tm9kZUlkICsgInwiICsgZmxvd05hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBmbG93SGFzaAotICAgICAqLwotICAgIF9zaG93TmFtZWRGbG93OiBmdW5j
dGlvbihmbG93SGFzaCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NlbGVjdE5hbWVkRmxvd0luU2lk
ZWJhcihmbG93SGFzaCk7Ci0gICAgICAgIHRoaXMuX3NlbGVjdE5hbWVkRmxvd1RhYihmbG93SGFz
aCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmbG93SGFzaAot
ICAgICAqLwotICAgIF9zZWxlY3ROYW1lZEZsb3dJblNpZGViYXI6IGZ1bmN0aW9uKGZsb3dIYXNo
KQotICAgIHsKLSAgICAgICAgdGhpcy5fbmFtZWRGbG93c1tmbG93SGFzaF0uZmxvd1RyZWVJdGVt
LnNlbGVjdCh0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IGZsb3dIYXNoCi0gICAgICovCi0gICAgX3NlbGVjdE5hbWVkRmxvd1RhYjogZnVuY3Rpb24oZmxv
d0hhc2gpCi0gICAgewotICAgICAgICB2YXIgZmxvd0NvbnRhaW5lciA9IHRoaXMuX25hbWVkRmxv
d3NbZmxvd0hhc2hdOwotCi0gICAgICAgIGlmICh0aGlzLl90YWJiZWRQYW5lLnNlbGVjdGVkVGFi
SWQgPT09IGZsb3dIYXNoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghdGhp
cy5fdGFiYmVkUGFuZS5zZWxlY3RUYWIoZmxvd0hhc2gpKSB7Ci0gICAgICAgICAgICBpZiAoIWZs
b3dDb250YWluZXIuZmxvd1ZpZXcpCi0gICAgICAgICAgICAgICAgZmxvd0NvbnRhaW5lci5mbG93
VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTTmFtZWRGbG93VmlldyhmbG93Q29udGFpbmVyLmZs
b3cpOwotCi0gICAgICAgICAgICB0aGlzLl90YWJiZWRQYW5lLmFwcGVuZFRhYihmbG93SGFzaCwg
Zmxvd0NvbnRhaW5lci5mbG93Lm5hbWUsIGZsb3dDb250YWluZXIuZmxvd1ZpZXcpOwotICAgICAg
ICAgICAgdGhpcy5fdGFiYmVkUGFuZS5zZWxlY3RUYWIoZmxvd0hhc2gpOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVu
dAotICAgICAqLwotICAgIF9zZWxlY3RlZE5vZGVDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHZhciBub2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRE9NTm9kZX0g
Ki8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9zaG93TmFtZWRGbG93Rm9yTm9kZShub2Rl
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9
IGV2ZW50Ci0gICAgICovCi0gICAgX3RhYlNlbGVjdGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3NlbGVjdE5hbWVkRmxvd0luU2lkZWJhcihldmVudC5kYXRhLnRhYklk
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9
IGV2ZW50Ci0gICAgICovCi0gICAgX3RhYkNsb3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICB0aGlzLl9uYW1lZEZsb3dzW2V2ZW50LmRhdGEudGFiSWRdLmZsb3dUcmVlSXRlbS5k
ZXNlbGVjdCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gez9XZWJJbnNwZWN0
b3IuRE9NTm9kZX0gbm9kZQotICAgICAqLwotICAgIF9zaG93TmFtZWRGbG93Rm9yTm9kZTogZnVu
Y3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAodGhpcy5fcmVnaW9uTm9kZXNbbm9kZS5pZF0pIHsKLSAgICAgICAg
ICAgIHRoaXMuX3Nob3dOYW1lZEZsb3codGhpcy5fcmVnaW9uTm9kZXNbbm9kZS5pZF0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAg
ICAgICAgICAgIGlmICh0aGlzLl9jb250ZW50Tm9kZXNbbm9kZS5pZF0pIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9zaG93TmFtZWRGbG93KHRoaXMuX2NvbnRlbnROb2Rlc1tub2RlLmlkXSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBub2Rl
ID0gbm9kZS5wYXJlbnROb2RlOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclZpZXcucHJvdG90
eXBlLndhc1Nob3duLmNhbGwodGhpcyk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50
LnJlcXVlc3REb2N1bWVudCh0aGlzLl9zZXREb2N1bWVudC5iaW5kKHRoaXMpKTsKLQotICAgICAg
ICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9N
QWdlbnQuRXZlbnRzLkRvY3VtZW50VXBkYXRlZCwgdGhpcy5fZG9jdW1lbnRVcGRhdGVkLCB0aGlz
KTsKLQotICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FdmVudHMuTmFtZWRGbG93Q3JlYXRlZCwgdGhpcy5fbmFt
ZWRGbG93Q3JlYXRlZCwgdGhpcyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkV2ZW50cy5OYW1lZEZsb3dS
ZW1vdmVkLCB0aGlzLl9uYW1lZEZsb3dSZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmNzc01vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwu
RXZlbnRzLlJlZ2lvbkxheW91dFVwZGF0ZWQsIHRoaXMuX3JlZ2lvbkxheW91dFVwZGF0ZWQsIHRo
aXMpOwotICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FdmVudHMuUmVnaW9uT3ZlcnNldENoYW5nZWQsIHRoaXMu
X3JlZ2lvbk92ZXJzZXRDaGFuZ2VkLCB0aGlzKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWwoImVsZW1lbnRzIikudHJlZU91dGxpbmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RWxlbWVudHNUcmVlT3V0bGluZS5FdmVudHMuU2VsZWN0ZWROb2RlQ2hhbmdlZCwgdGhpcy5fc2Vs
ZWN0ZWROb2RlQ2hhbmdlZCwgdGhpcyk7Ci0KLSAgICAgICAgdGhpcy5fdGFiYmVkUGFuZS5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UYWJiZWRQYW5lLkV2ZW50VHlwZXMuVGFiU2VsZWN0
ZWQsIHRoaXMuX3RhYlNlbGVjdGVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fdGFiYmVkUGFuZS5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UYWJiZWRQYW5lLkV2ZW50VHlwZXMuVGFiQ2xv
c2VkLCB0aGlzLl90YWJDbG9zZWQsIHRoaXMpOwotICAgIH0sCi0KLSAgICB3aWxsSGlkZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5Eb2N1bWVudFVwZGF0ZWQsIHRo
aXMuX2RvY3VtZW50VXBkYXRlZCwgdGhpcyk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01v
ZGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRXZlbnRz
Lk5hbWVkRmxvd0NyZWF0ZWQsIHRoaXMuX25hbWVkRmxvd0NyZWF0ZWQsIHRoaXMpOwotICAgICAg
ICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVNb2RlbC5FdmVudHMuTmFtZWRGbG93UmVtb3ZlZCwgdGhpcy5fbmFtZWRGbG93UmVt
b3ZlZCwgdGhpcyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5yZW1vdmVFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkV2ZW50cy5SZWdpb25MYXlvdXRVcGRh
dGVkLCB0aGlzLl9yZWdpb25MYXlvdXRVcGRhdGVkLCB0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmNzc01vZGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwuRXZlbnRzLlJlZ2lvbk92ZXJzZXRDaGFuZ2VkLCB0aGlzLl9yZWdpb25PdmVyc2V0Q2hhbmdl
ZCwgdGhpcyk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVsKCJlbGVtZW50cyIpLnRyZWVP
dXRsaW5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxp
bmUuRXZlbnRzLlNlbGVjdGVkTm9kZUNoYW5nZWQsIHRoaXMuX3NlbGVjdGVkTm9kZUNoYW5nZWQs
IHRoaXMpOwotCi0gICAgICAgIHRoaXMuX3RhYmJlZFBhbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuVGFiYmVkUGFuZS5FdmVudFR5cGVzLlRhYlNlbGVjdGVkLCB0aGlzLl90YWJT
ZWxlY3RlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3RhYmJlZFBhbmUucmVtb3ZlRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuVGFiYmVkUGFuZS5FdmVudFR5cGVzLlRhYkNsb3NlZCwgdGhpcy5f
dGFiQ2xvc2VkLCB0aGlzKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
U2lkZWJhclZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7VHJlZUVsZW1lbnR9Ci0gKi8KLVdlYkluc3BlY3Rvci5GbG93VHJlZUVsZW1lbnQgPSBm
dW5jdGlvbihmbG93Q29udGFpbmVyKQotewotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBjb250YWluZXIuY3JlYXRlQ2hpbGQoImRpdiIsICJz
ZWxlY3Rpb24iKTsKLSAgICBjb250YWluZXIuY3JlYXRlQ2hpbGQoInNwYW4iLCAidGl0bGUiKS5j
cmVhdGVDaGlsZCgic3BhbiIpLnRleHRDb250ZW50ID0gZmxvd0NvbnRhaW5lci5mbG93Lm5hbWU7
Ci0KLSAgICBUcmVlRWxlbWVudC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgZmxvd0NvbnRhaW5lciwg
ZmFsc2UpOwotCi0gICAgdGhpcy5fb3ZlcnNldCA9IGZhbHNlOwotICAgIHRoaXMuc2V0T3ZlcnNl
dChmbG93Q29udGFpbmVyLmZsb3cub3ZlcnNldCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5GbG93VHJl
ZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
bmV3T3ZlcnNldAotICAgICAqLwotICAgIHNldE92ZXJzZXQ6IGZ1bmN0aW9uKG5ld092ZXJzZXQp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fb3ZlcnNldCA9PT0gbmV3T3ZlcnNldCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobmV3T3ZlcnNldCkgewotICAgICAgICAgICAg
dGhpcy50aXRsZS5hZGRTdHlsZUNsYXNzKCJuYW1lZC1mbG93LW92ZXJmbG93Iik7Ci0gICAgICAg
ICAgICB0aGlzLnRvb2x0aXAgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk92ZXJmbG93cy4iKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMudGl0bGUucmVtb3ZlU3R5bGVDbGFz
cygibmFtZWQtZmxvdy1vdmVyZmxvdyIpOwotICAgICAgICAgICAgdGhpcy50b29sdGlwID0gIiI7
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9vdmVyc2V0ID0gbmV3T3ZlcnNldDsKLSAgICB9
LAotCi0gICAgX19wcm90b19fOiBUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRGbG93Vmlldy5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRGbG93Vmlldy5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlMjY0My4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU05hbWVkRmxvd1ZpZXcuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5h
bWVkRmxvd30gZmxvdwotICovCi1XZWJJbnNwZWN0b3IuQ1NTTmFtZWRGbG93VmlldyA9IGZ1bmN0
aW9uKGZsb3cpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlz
LmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY3NzLW5hbWVkLWZsb3ciKTsKLSAgICB0aGlzLmVsZW1l
bnQuYWRkU3R5bGVDbGFzcygib3V0bGluZS1kaXNjbG9zdXJlIik7Ci0KLSAgICB0aGlzLl90cmVl
T3V0bGluZSA9IG5ldyBUcmVlT3V0bGluZSh0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoIm9sIiks
IHRydWUpOwotCi0gICAgdGhpcy5fY29udGVudFRyZWVJdGVtID0gbmV3IFRyZWVFbGVtZW50KFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiY29udGVudCIpLCBudWxsLCB0cnVlKTsKLSAgICB0aGlzLl90
cmVlT3V0bGluZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50VHJlZUl0ZW0pOwotCi0gICAgdGhp
cy5fcmVnaW9uc1RyZWVJdGVtID0gbmV3IFRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygicmVnaW9uIGNoYWluIiksIG51bGwsIHRydWUpOwotICAgIHRoaXMuX3JlZ2lvbnNUcmVlSXRl
bS5leHBhbmQoKTsKLSAgICB0aGlzLl90cmVlT3V0bGluZS5hcHBlbmRDaGlsZCh0aGlzLl9yZWdp
b25zVHJlZUl0ZW0pOwotCi0gICAgdGhpcy5fZmxvdyA9IGZsb3c7Ci0KLSAgICB2YXIgY29udGVu
dCA9IGZsb3cuY29udGVudDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3Ro
OyArK2kpCi0gICAgICAgIHRoaXMuX2luc2VydENvbnRlbnROb2RlKGNvbnRlbnRbaV0pOwotCi0g
ICAgdmFyIHJlZ2lvbnMgPSBmbG93LnJlZ2lvbnM7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
ZWdpb25zLmxlbmd0aDsgKytpKQotICAgICAgICB0aGlzLl9pbnNlcnRSZWdpb24ocmVnaW9uc1tp
XSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5DU1NOYW1lZEZsb3dWaWV3Lk92ZXJzZXRUeXBlTWVzc2Fn
ZU1hcCA9IHsKLSAgICBlbXB0eTogImVtcHR5IiwKLSAgICBmaXQ6ICJmaXQiLAotICAgIG92ZXJz
ZXQ6ICJvdmVyc2V0IgotfQotCi1XZWJJbnNwZWN0b3IuQ1NTTmFtZWRGbG93Vmlldy5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRE9NTm9kZT19IHJv
b3RET01Ob2RlCi0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRs
aW5lfQotICAgICAqLwotICAgIF9jcmVhdGVGbG93VHJlZU91dGxpbmU6IGZ1bmN0aW9uKHJvb3RE
T01Ob2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFyb290RE9NTm9kZSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotCi0gICAgICAgIHZhciB0cmVlT3V0bGluZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
RWxlbWVudHNUcmVlT3V0bGluZShmYWxzZSwgZmFsc2UsIHRydWUpOwotICAgICAgICB0cmVlT3V0
bGluZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5hbWVkLWZsb3ctZWxlbWVudCIpOwotICAgICAg
ICB0cmVlT3V0bGluZS5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgICB0cmVlT3V0bGluZS5yb290
RE9NTm9kZSA9IHJvb3RET01Ob2RlOwotICAgICAgICB0cmVlT3V0bGluZS53aXJlVG9Eb21BZ2Vu
dCgpOwotICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkRvY3VtZW50VXBkYXRlZCwgdHJlZU91dGxpbmUu
X2VsZW1lbnRzVHJlZVVwZGF0ZXIuX2RvY3VtZW50VXBkYXRlZCwgdHJlZU91dGxpbmUuX2VsZW1l
bnRzVHJlZVVwZGF0ZXIpOwotCi0gICAgICAgIHJldHVybiB0cmVlT3V0bGluZTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IGNvbnRlbnROb2RlSWQK
LSAgICAgKiBAcGFyYW0ge251bWJlcj19IGluZGV4Ci0gICAgICovCi0gICAgX2luc2VydENvbnRl
bnROb2RlOiBmdW5jdGlvbihjb250ZW50Tm9kZUlkLCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHZh
ciB0cmVlT3V0bGluZSA9IHRoaXMuX2NyZWF0ZUZsb3dUcmVlT3V0bGluZShXZWJJbnNwZWN0b3Iu
ZG9tQWdlbnQubm9kZUZvcklkKGNvbnRlbnROb2RlSWQpKTsKLSAgICAgICAgdmFyIHRyZWVJdGVt
ID0gbmV3IFRyZWVFbGVtZW50KHRyZWVPdXRsaW5lLmVsZW1lbnQsIHRyZWVPdXRsaW5lKTsKLQot
ICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgdGhpcy5fY29u
dGVudFRyZWVJdGVtLmFwcGVuZENoaWxkKHRyZWVJdGVtKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2NvbnRlbnRUcmVlSXRlbS5pbnNlcnRDaGlsZCh0
cmVlSXRlbSwgaW5kZXgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NTU0Fn
ZW50LlJlZ2lvbn0gcmVnaW9uCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSBpbmRleAotICAgICAq
LwotICAgIF9pbnNlcnRSZWdpb246IGZ1bmN0aW9uKHJlZ2lvbiwgaW5kZXgpCi0gICAgewotICAg
ICAgICB2YXIgdHJlZU91dGxpbmUgPSB0aGlzLl9jcmVhdGVGbG93VHJlZU91dGxpbmUoV2ViSW5z
cGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChyZWdpb24ubm9kZUlkKSk7Ci0gICAgICAgIHRyZWVP
dXRsaW5lLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygicmVnaW9uLSIgKyByZWdpb24ucmVnaW9uT3Zl
cnNldCk7Ci0KLSAgICAgICAgdmFyIHRyZWVJdGVtID0gbmV3IFRyZWVFbGVtZW50KHRyZWVPdXRs
aW5lLmVsZW1lbnQsIHRyZWVPdXRsaW5lKTsKLSAgICAgICAgdmFyIG92ZXJzZXRUZXh0ID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci5DU1NOYW1lZEZsb3dWaWV3Lk92ZXJzZXRU
eXBlTWVzc2FnZU1hcFtyZWdpb24ucmVnaW9uT3ZlcnNldF0pOwotICAgICAgICB0cmVlSXRlbS50
b29sdGlwID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZWdpb24gaXMgJXMuIiwgb3ZlcnNldFRl
eHQpOwotCi0gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICB0
aGlzLl9yZWdpb25zVHJlZUl0ZW0uYXBwZW5kQ2hpbGQodHJlZUl0ZW0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcmVnaW9uc1RyZWVJdGVtLmluc2Vy
dENoaWxkKHRyZWVJdGVtLCBpbmRleCk7Ci0gICAgfSwKLQotICAgIGdldCBmbG93KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9mbG93OwotICAgIH0sCi0KLSAgICBzZXQgZmxvdyhuZXdG
bG93KQotICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlKG5ld0Zsb3cpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1RyZWVFbGVtZW50fSByZWdpb25UcmVlSXRlbQotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBuZXdSZWdpb25PdmVyc2V0Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9
IG9sZFJlZ2lvbk92ZXJzZXQKLSAgICAgKi8KLSAgICBfdXBkYXRlUmVnaW9uT3ZlcnNldDogZnVu
Y3Rpb24ocmVnaW9uVHJlZUl0ZW0sIG5ld1JlZ2lvbk92ZXJzZXQsIG9sZFJlZ2lvbk92ZXJzZXQp
Ci0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IHJlZ2lvblRyZWVJdGVtLnJlcHJlc2VudGVk
T2JqZWN0LmVsZW1lbnQ7Ci0gICAgICAgIGVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygicmVnaW9u
LSIgKyBvbGRSZWdpb25PdmVyc2V0KTsKLSAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJy
ZWdpb24tIiArIG5ld1JlZ2lvbk92ZXJzZXQpOwotCi0gICAgICAgIHZhciBvdmVyc2V0VGV4dCA9
IFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IuQ1NTTmFtZWRGbG93Vmlldy5PdmVy
c2V0VHlwZU1lc3NhZ2VNYXBbbmV3UmVnaW9uT3ZlcnNldF0pOwotICAgICAgICByZWdpb25UcmVl
SXRlbS50b29sdGlwID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZWdpb24gaXMgJXMuIiAsIG92
ZXJzZXRUZXh0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48RE9N
QWdlbnQuTm9kZUlkPn0gb2xkQ29udGVudAotICAgICAqIEBwYXJhbSB7QXJyYXkuPERPTUFnZW50
Lk5vZGVJZD59IG5ld0NvbnRlbnQKLSAgICAgKi8KLSAgICBfbWVyZ2VDb250ZW50Tm9kZXM6IGZ1
bmN0aW9uKG9sZENvbnRlbnQsIG5ld0NvbnRlbnQpCi0gICAgewotICAgICAgICB2YXIgbm9kZUlk
U2V0ID0ge307Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q29udGVudC5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIG5vZGVJZFNldFtuZXdDb250ZW50W2ldXSA9IHRydWU7Ci0KLSAg
ICAgICAgdmFyIG9sZENvbnRlbnRJbmRleCA9IDA7Ci0gICAgICAgIHZhciBuZXdDb250ZW50SW5k
ZXggPSAwOwotICAgICAgICB2YXIgY29udGVudFRyZWVDaGlsZEluZGV4ID0gMDsKLQotICAgICAg
ICB3aGlsZShvbGRDb250ZW50SW5kZXggPCBvbGRDb250ZW50Lmxlbmd0aCB8fCBuZXdDb250ZW50
SW5kZXggPCBuZXdDb250ZW50Lmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKG9sZENvbnRlbnRJ
bmRleCA9PT0gb2xkQ29udGVudC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9pbnNl
cnRDb250ZW50Tm9kZShuZXdDb250ZW50W25ld0NvbnRlbnRJbmRleF0pOwotICAgICAgICAgICAg
ICAgICsrbmV3Q29udGVudEluZGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmV3Q29udGVudEluZGV4ID09PSBuZXdDb250ZW50
Lmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUcmVlSXRlbS5yZW1vdmVD
aGlsZEF0SW5kZXgoY29udGVudFRyZWVDaGlsZEluZGV4KTsKLSAgICAgICAgICAgICAgICArK29s
ZENvbnRlbnRJbmRleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKG9sZENvbnRlbnRbb2xkQ29udGVudEluZGV4XSA9PT0gbmV3Q29u
dGVudFtuZXdDb250ZW50SW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgKytvbGRDb250ZW50SW5k
ZXg7Ci0gICAgICAgICAgICAgICAgKytuZXdDb250ZW50SW5kZXg7Ci0gICAgICAgICAgICAgICAg
Kytjb250ZW50VHJlZUNoaWxkSW5kZXg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChub2RlSWRTZXRbb2xkQ29udGVudFtvbGRDb250
ZW50SW5kZXhdXSkgewotICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydENvbnRlbnROb2RlKG5l
d0NvbnRlbnRbbmV3Q29udGVudEluZGV4XSwgY29udGVudFRyZWVDaGlsZEluZGV4KTsKLSAgICAg
ICAgICAgICAgICArK25ld0NvbnRlbnRJbmRleDsKLSAgICAgICAgICAgICAgICArK2NvbnRlbnRU
cmVlQ2hpbGRJbmRleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdGhpcy5fY29udGVudFRyZWVJdGVtLnJlbW92ZUNoaWxkQXRJbmRleChj
b250ZW50VHJlZUNoaWxkSW5kZXgpOwotICAgICAgICAgICAgKytvbGRDb250ZW50SW5kZXg7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48Q1NTQWdl
bnQuUmVnaW9uPn0gb2xkUmVnaW9ucwotICAgICAqIEBwYXJhbSB7QXJyYXkuPENTU0FnZW50LlJl
Z2lvbj59IG5ld1JlZ2lvbnMKLSAgICAgKi8KLSAgICBfbWVyZ2VSZWdpb25zOiBmdW5jdGlvbihv
bGRSZWdpb25zLCBuZXdSZWdpb25zKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVJZFNldCA9IHt9
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1JlZ2lvbnMubGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICBub2RlSWRTZXRbbmV3UmVnaW9uc1tpXS5ub2RlSWRdID0gdHJ1ZTsKLQotICAg
ICAgICB2YXIgb2xkUmVnaW9uc0luZGV4ID0gMDsKLSAgICAgICAgdmFyIG5ld1JlZ2lvbnNJbmRl
eCA9IDA7Ci0gICAgICAgIHZhciByZWdpb25zVHJlZUNoaWxkSW5kZXggPSAwOwotCi0gICAgICAg
IHdoaWxlKG9sZFJlZ2lvbnNJbmRleCA8IG9sZFJlZ2lvbnMubGVuZ3RoIHx8IG5ld1JlZ2lvbnNJ
bmRleCA8IG5ld1JlZ2lvbnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAob2xkUmVnaW9uc0lu
ZGV4ID09PSBvbGRSZWdpb25zLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHRoaXMuX2luc2Vy
dFJlZ2lvbihuZXdSZWdpb25zW25ld1JlZ2lvbnNJbmRleF0pOwotICAgICAgICAgICAgICAgICsr
bmV3UmVnaW9uc0luZGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobmV3UmVnaW9uc0luZGV4ID09PSBuZXdSZWdpb25zLmxlbmd0
aCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lvbnNUcmVlSXRlbS5yZW1vdmVDaGlsZEF0
SW5kZXgocmVnaW9uc1RyZWVDaGlsZEluZGV4KTsKLSAgICAgICAgICAgICAgICArK29sZFJlZ2lv
bnNJbmRleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKG9sZFJlZ2lvbnNbb2xkUmVnaW9uc0luZGV4XS5ub2RlSWQgPT09IG5ld1Jl
Z2lvbnNbbmV3UmVnaW9uc0luZGV4XS5ub2RlSWQpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xk
UmVnaW9uc1tvbGRSZWdpb25zSW5kZXhdLnJlZ2lvbk92ZXJzZXQgIT09IG5ld1JlZ2lvbnNbbmV3
UmVnaW9uc0luZGV4XS5yZWdpb25PdmVyc2V0KQotICAgICAgICAgICAgICAgICAgICB0aGlzLl91
cGRhdGVSZWdpb25PdmVyc2V0KHRoaXMuX3JlZ2lvbnNUcmVlSXRlbS5jaGlsZHJlbltyZWdpb25z
VHJlZUNoaWxkSW5kZXhdLCBuZXdSZWdpb25zW25ld1JlZ2lvbnNJbmRleF0ucmVnaW9uT3ZlcnNl
dCwgb2xkUmVnaW9uc1tvbGRSZWdpb25zSW5kZXhdLnJlZ2lvbk92ZXJzZXQpOwotICAgICAgICAg
ICAgICAgICsrb2xkUmVnaW9uc0luZGV4OwotICAgICAgICAgICAgICAgICsrbmV3UmVnaW9uc0lu
ZGV4OwotICAgICAgICAgICAgICAgICsrcmVnaW9uc1RyZWVDaGlsZEluZGV4OwotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobm9kZUlk
U2V0W29sZFJlZ2lvbnNbb2xkUmVnaW9uc0luZGV4XS5ub2RlSWRdKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5faW5zZXJ0UmVnaW9uKG5ld1JlZ2lvbnNbbmV3UmVnaW9uc0luZGV4XSwgcmVnaW9u
c1RyZWVDaGlsZEluZGV4KTsKLSAgICAgICAgICAgICAgICArK25ld1JlZ2lvbnNJbmRleDsKLSAg
ICAgICAgICAgICAgICArK3JlZ2lvbnNUcmVlQ2hpbGRJbmRleDsKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5fcmVnaW9uc1RyZWVJ
dGVtLnJlbW92ZUNoaWxkQXRJbmRleChyZWdpb25zVHJlZUNoaWxkSW5kZXgpOwotICAgICAgICAg
ICAgKytvbGRSZWdpb25zSW5kZXg7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmFtZWRGbG93fSBuZXdGbG93Ci0gICAgICovCi0gICAg
X3VwZGF0ZTogZnVuY3Rpb24obmV3RmxvdykKLSAgICB7Ci0gICAgICAgIHRoaXMuX21lcmdlQ29u
dGVudE5vZGVzKHRoaXMuX2Zsb3cuY29udGVudCwgbmV3Rmxvdy5jb250ZW50KTsKLSAgICAgICAg
dGhpcy5fbWVyZ2VSZWdpb25zKHRoaXMuX2Zsb3cucmVnaW9ucywgbmV3Rmxvdy5yZWdpb25zKTsK
LQotICAgICAgICB0aGlzLl9mbG93ID0gbmV3RmxvdzsKLSAgICB9LAotCi0gICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzMTkwNS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMK
KysrIC9kZXYvbnVsbApAQCAtMSwzOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1NTU2Vs
ZWN0b3JQcm9maWxlVmlld30gcHJvZmlsZVZpZXcKLSAqIEBwYXJhbSB7Q1NTQWdlbnQuU2VsZWN0
b3JQcm9maWxlfSBkYXRhCi0gKi8KLVdlYkluc3BlY3Rvci5DU1NTZWxlY3RvckRhdGFHcmlkTm9k
ZSA9IGZ1bmN0aW9uKHByb2ZpbGVWaWV3LCBkYXRhKQotewotICAgIFdlYkluc3BlY3Rvci5EYXRh
R3JpZE5vZGUuY2FsbCh0aGlzLCBkYXRhLCBmYWxzZSk7Ci0gICAgdGhpcy5fcHJvZmlsZVZpZXcg
PSBwcm9maWxlVmlldzsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yRGF0YUdyaWROb2Rl
LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgZGF0YSgpCi0gICAgewotICAgICAgICB2YXIgZGF0YSA9
IHt9OwotICAgICAgICBkYXRhLnNlbGVjdG9yID0gdGhpcy5fZGF0YS5zZWxlY3RvcjsKLSAgICAg
ICAgZGF0YS5tYXRjaGVzID0gdGhpcy5fZGF0YS5tYXRjaENvdW50OwotCi0gICAgICAgIGlmICh0
aGlzLl9wcm9maWxlVmlldy5zaG93VGltZUFzUGVyY2VudC5nZXQoKSkKLSAgICAgICAgICAgIGRh
dGEudGltZSA9IE51bWJlcih0aGlzLl9kYXRhLnRpbWVQZXJjZW50KS50b0ZpeGVkKDEpICsgIiUi
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhLnRpbWUgPSBOdW1iZXIuc2Vjb25kc1Rv
U3RyaW5nKHRoaXMuX2RhdGEudGltZSAvIDEwMDAsIHRydWUpOwotCi0gICAgICAgIHJldHVybiBk
YXRhOwotICAgIH0sCi0KLSAgICBnZXQgcmF3RGF0YSgpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fZGF0YTsKLSAgICB9LAotCi0gICAgY3JlYXRlQ2VsbDogZnVuY3Rpb24oY29sdW1uSWRl
bnRpZmllcikKLSAgICB7Ci0gICAgICAgIHZhciBjZWxsID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlk
Tm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbC5jYWxsKHRoaXMsIGNvbHVtbklkZW50aWZpZXIpOwot
ICAgICAgICBpZiAoY29sdW1uSWRlbnRpZmllciA9PT0gInNlbGVjdG9yIiAmJiBjZWxsLmZpcnN0
Q2hpbGQpIHsKLSAgICAgICAgICAgIGNlbGwuZmlyc3RDaGlsZC50aXRsZSA9IHRoaXMucmF3RGF0
YS5zZWxlY3RvcjsKLSAgICAgICAgICAgIHJldHVybiBjZWxsOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGNvbHVtbklkZW50aWZpZXIgIT09ICJzb3VyY2UiKQotICAgICAgICAgICAgcmV0dXJu
IGNlbGw7Ci0KLSAgICAgICAgY2VsbC5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIGlmICh0
aGlzLnJhd0RhdGEudXJsKSB7Ci0gICAgICAgICAgICB2YXIgd3JhcHBlckRpdiA9IGNlbGwuY3Jl
YXRlQ2hpbGQoImRpdiIpOwotICAgICAgICAgICAgd3JhcHBlckRpdi5hcHBlbmRDaGlsZChXZWJJ
bnNwZWN0b3IubGlua2lmeVJlc291cmNlQXNOb2RlKHRoaXMucmF3RGF0YS51cmwsIHRoaXMucmF3
RGF0YS5saW5lTnVtYmVyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2VsbDsKLSAg
ICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMgV2ViSW5zcGVjdG9yLlZp
ZXcKLSAqIEBwYXJhbSB7Q1NTQWdlbnQuU2VsZWN0b3JQcm9maWxlfSBwcm9maWxlCi0gKi8KLVdl
Ykluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVWaWV3ID0gZnVuY3Rpb24ocHJvZmlsZSkKLXsK
LSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotCi0gICAgdGhpcy5lbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoInByb2ZpbGUtdmlldyIpOwotCi0gICAgdGhpcy5zaG93VGltZUFzUGVyY2Vu
dCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKCJzZWxlY3RvclByb2ZpbGVy
U2hvd1RpbWVBc1BlcmNlbnQiLCB0cnVlKTsKLQotICAgIHZhciBjb2x1bW5zID0gWwotICAgICAg
ICB7aWQ6ICJzZWxlY3RvciIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNlbGVjdG9y
IiksIHdpZHRoOiAiNTUwcHgiLCBzb3J0YWJsZTogdHJ1ZX0sCi0gICAgICAgIHtpZDogInNvdXJj
ZSIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNvdXJjZSIpLCB3aWR0aDogIjEwMHB4
Iiwgc29ydGFibGU6IHRydWV9LAotICAgICAgICB7aWQ6ICJ0aW1lIiwgdGl0bGU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiVG90YWwiKSwgd2lkdGg6ICI3MnB4Iiwgc29ydDogV2ViSW5zcGVjdG9y
LkRhdGFHcmlkLk9yZGVyLkRlc2NlbmRpbmcsIHNvcnRhYmxlOiB0cnVlfSwKLSAgICAgICAge2lk
OiAibWF0Y2hlcyIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk1hdGNoZXMiKSwgd2lk
dGg6ICI3MnB4Iiwgc29ydGFibGU6IHRydWV9Ci0gICAgXTsKLQotICAgIHRoaXMuZGF0YUdyaWQg
PSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkKGNvbHVtbnMpOwotICAgIHRoaXMuZGF0YUdyaWQu
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzZWxlY3Rvci1wcm9maWxlLXZpZXciKTsKLSAgICB0aGlz
LmRhdGFHcmlkLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkV2ZW50cy5T
b3J0aW5nQ2hhbmdlZCwgdGhpcy5fc29ydFByb2ZpbGUsIHRoaXMpOwotICAgIHRoaXMuZGF0YUdy
aWQuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURvd25J
bkRhdGFHcmlkLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuZGF0YUdyaWQuc2hvdyh0aGlz
LmVsZW1lbnQpOwotCi0gICAgdGhpcy5wZXJjZW50QnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5T
dGF0dXNCYXJCdXR0b24oIiIsICJwZXJjZW50LXRpbWUtc3RhdHVzLWJhci1pdGVtIik7Ci0gICAg
dGhpcy5wZXJjZW50QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcGVyY2Vu
dENsaWNrZWQsIHRoaXMpOwotCi0gICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTsKLQotICAgIHRo
aXMuX2NyZWF0ZVByb2ZpbGVOb2RlcygpOwotICAgIHRoaXMuX3NvcnRQcm9maWxlKCk7Ci0gICAg
dGhpcy5fdXBkYXRlUGVyY2VudEJ1dHRvbigpOwotfQotCi1XZWJJbnNwZWN0b3IuQ1NTU2VsZWN0
b3JQcm9maWxlVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgc3RhdHVzQmFySXRlbXM6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5wZXJjZW50QnV0dG9uLmVsZW1lbnRdOwot
ICAgIH0sCi0KLSAgICBnZXQgcHJvZmlsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
cHJvZmlsZTsKLSAgICB9LAotCi0gICAgc2V0IHByb2ZpbGUocHJvZmlsZSkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX3Byb2ZpbGUgPSBwcm9maWxlOwotICAgIH0sCi0KLSAgICBfY3JlYXRlUHJvZmls
ZU5vZGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZGF0YSA9IHRoaXMucHJvZmls
ZS5kYXRhOwotICAgICAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSBwcm9maWxl
ciBtYXkgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgd2l0aCB0aGUgIkNsZWFyIGFsbCBwcm9maWxlcy4i
IGJ1dHRvbi4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
cHJvZmlsZS5jaGlsZHJlbiA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGRhdGFbaV0udGltZVBlcmNlbnQgPSBkYXRhW2ld
LnRpbWUgKiAxMDAgLyB0aGlzLnByb2ZpbGUudG90YWxUaW1lOwotICAgICAgICAgICAgdmFyIG5v
ZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yRGF0YUdyaWROb2RlKHRoaXMsIGRhdGFb
aV0pOwotICAgICAgICAgICAgdGhpcy5wcm9maWxlLmNoaWxkcmVuLnB1c2gobm9kZSk7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgcmVidWlsZEdyaWRJdGVtczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5kYXRhR3JpZC5yb290Tm9kZSgpLnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAg
ICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9maWxlLmNoaWxkcmVuOwotICAgICAgICB2YXIg
Y291bnQgPSBjaGlsZHJlbi5sZW5ndGg7Ci0KLSAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBp
bmRleCA8IGNvdW50OyArK2luZGV4KQotICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5yb290Tm9k
ZSgpLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7Ci0gICAgfSwKLQotICAgIHJlZnJlc2hE
YXRhOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmRhdGFHcmlk
LnJvb3ROb2RlKCkuY2hpbGRyZW5bMF07Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAg
ICAgICAgY2hpbGQucmVmcmVzaCgpOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC50cmF2ZXJz
ZU5leHROb2RlKGZhbHNlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBy
ZWZyZXNoU2hvd0FzUGVyY2VudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Vw
ZGF0ZVBlcmNlbnRCdXR0b24oKTsKLSAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpOwotICAgIH0s
Ci0KLSAgICBfcGVyY2VudENsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dGhpcy5zaG93VGltZUFzUGVyY2VudC5zZXQoIXRoaXMuc2hvd1RpbWVBc1BlcmNlbnQuZ2V0KCkp
OwotICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOwotICAgIH0sCi0KLSAgICBf
dXBkYXRlUGVyY2VudEJ1dHRvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
c2hvd1RpbWVBc1BlcmNlbnQuZ2V0KCkpIHsKLSAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRv
bi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBhYnNvbHV0ZSB0aW1lcy4iKTsK
LSAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRvbi50b2dnbGVkID0gdHJ1ZTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRvbi50aXRsZSA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiU2hvdyB0aW1lcyBhcyBwZXJjZW50YWdlcy4iKTsKLSAgICAgICAgICAg
IHRoaXMucGVyY2VudEJ1dHRvbi50b2dnbGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgX3NvcnRQcm9maWxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc29ydEFz
Y2VuZGluZyA9IHRoaXMuZGF0YUdyaWQuaXNTb3J0T3JkZXJBc2NlbmRpbmcoKTsKLSAgICAgICAg
dmFyIHNvcnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5kYXRhR3JpZC5zb3J0Q29sdW1uSWRlbnRp
ZmllcigpOwotCi0gICAgICAgIGZ1bmN0aW9uIHNlbGVjdG9yQ29tcGFyYXRvcihhLCBiKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYi5yYXdEYXRhLnNlbGVjdG9yLmNvbXBh
cmVUbyhhLnJhd0RhdGEuc2VsZWN0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHNvcnRBc2NlbmRp
bmcgPyAtcmVzdWx0IDogcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc291
cmNlQ29tcGFyYXRvcihhLCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYVJhd0RhdGEg
PSBhLnJhd0RhdGE7Ci0gICAgICAgICAgICB2YXIgYlJhd0RhdGEgPSBiLnJhd0RhdGE7Ci0gICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gYlJhd0RhdGEudXJsLmNvbXBhcmVUbyhhUmF3RGF0YS51cmwp
OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYlJh
d0RhdGEubGluZU51bWJlciAtIGFSYXdEYXRhLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICByZXR1
cm4gc29ydEFzY2VuZGluZyA/IC1yZXN1bHQgOiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiB0aW1lQ29tcGFyYXRvcihhLCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b25zdCByZXN1bHQgPSBiLnJhd0RhdGEudGltZSAtIGEucmF3RGF0YS50aW1lOwotICAgICAgICAg
ICAgcmV0dXJuIHNvcnRBc2NlbmRpbmcgPyAtcmVzdWx0IDogcmVzdWx0OwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gbWF0Y2hlc0NvbXBhcmF0b3IoYSwgYikKLSAgICAgICAgewotICAg
ICAgICAgICAgY29uc3QgcmVzdWx0ID0gYi5yYXdEYXRhLm1hdGNoQ291bnQgLSBhLnJhd0RhdGEu
bWF0Y2hDb3VudDsKLSAgICAgICAgICAgIHJldHVybiBzb3J0QXNjZW5kaW5nID8gLXJlc3VsdCA6
IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb21wYXJhdG9yOwotICAgICAgICBz
d2l0Y2ggKHNvcnRDb2x1bW5JZGVudGlmaWVyKSB7Ci0gICAgICAgIGNhc2UgInRpbWUiOgotICAg
ICAgICAgICAgY29tcGFyYXRvciA9IHRpbWVDb21wYXJhdG9yOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgIm1hdGNoZXMiOgotICAgICAgICAgICAgY29tcGFyYXRvciA9IG1hdGNo
ZXNDb21wYXJhdG9yOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgInNlbGVjdG9y
IjoKLSAgICAgICAgICAgIGNvbXBhcmF0b3IgPSBzZWxlY3RvckNvbXBhcmF0b3I7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAic291cmNlIjoKLSAgICAgICAgICAgIGNvbXBhcmF0
b3IgPSBzb3VyY2VDb21wYXJhdG9yOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICB0aGlzLnByb2ZpbGUuY2hpbGRyZW4uc29ydChjb21wYXJhdG9yKTsKLQotICAgICAg
ICB0aGlzLnJlYnVpbGRHcmlkSXRlbXMoKTsKLSAgICB9LAotCi0gICAgX21vdXNlRG93bkluRGF0
YUdyaWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA8
IDIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNlbGwgPSBldmVudC50YXJn
ZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgidGQiKTsKLSAgICAgICAgaWYgKCFj
ZWxsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChjZWxsLmhhc1N0eWxlQ2xh
c3MoInRpbWUtY29sdW1uIikpCi0gICAgICAgICAgICB0aGlzLnNob3dUaW1lQXNQZXJjZW50LnNl
dCghdGhpcy5zaG93VGltZUFzUGVyY2VudC5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOwotCi0g
ICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfQotICovCi1XZWJJbnNwZWN0b3IuQ1NT
U2VsZWN0b3JQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5U
eXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29sbGVjdCBDU1MgU2VsZWN0b3IgUHJvZmls
ZSIpKTsKLSAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxzZTsKLSAgICB0aGlzLl9wcm9maWxlVWlk
ID0gMTsKLSAgICBXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5pbnN0YW5jZSA9
IHRoaXM7Ci19Ci0KLVdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVUeXBlLlR5cGVJZCA9
ICJTRUxFQ1RPUiI7Ci0KLVdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVUeXBlLnByb3Rv
dHlwZSA9IHsKLSAgICBnZXQgYnV0dG9uVG9vbHRpcCgpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fcmVjb3JkaW5nID8gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdG9wIENTUyBzZWxlY3Rv
ciBwcm9maWxpbmcuIikgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0YXJ0IENTUyBzZWxlY3Rv
ciBwcm9maWxpbmcuIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAg
ICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlY29yZGluZykgewotICAgICAgICAgICAg
dGhpcy5fc3RvcFJlY29yZGluZ1Byb2ZpbGUoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nUHJvZmls
ZSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
Z2V0IHRyZWVJdGVtVGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQ1NTIFNFTEVDVE9SIFBST0ZJTEVTIik7Ci0gICAgfSwKLQotICAgIGdldCBkZXNj
cmlwdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJD
U1Mgc2VsZWN0b3IgcHJvZmlsZXMgc2hvdyBob3cgbG9uZyB0aGUgc2VsZWN0b3IgbWF0Y2hpbmcg
aGFzIHRha2VuIGluIHRvdGFsIGFuZCBob3cgbWFueSB0aW1lcyBhIGNlcnRhaW4gc2VsZWN0b3Ig
aGFzIG1hdGNoZWQgRE9NIGVsZW1lbnRzICh0aGUgcmVzdWx0cyBhcmUgYXBwcm94aW1hdGUgZHVl
IHRvIG1hdGNoaW5nIGFsZ29yaXRobSBvcHRpbWl6YXRpb25zLikiKTsKLSAgICB9LAotCi0gICAg
cmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVVaWQgPSAxOwot
ICAgIH0sCi0KLSAgICBzZXRSZWNvcmRpbmdQcm9maWxlOiBmdW5jdGlvbihpc1Byb2ZpbGluZykK
LSAgICB7Ci0gICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGlzUHJvZmlsaW5nOwotICAgIH0sCi0K
LSAgICBfc3RhcnRSZWNvcmRpbmdQcm9maWxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLl9yZWNvcmRpbmcgPSB0cnVlOwotICAgICAgICBDU1NBZ2VudC5zdGFydFNlbGVjdG9yUHJv
ZmlsZXIoKTsKLSAgICB9LAotCi0gICAgX3N0b3BSZWNvcmRpbmdQcm9maWxlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9
IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7Q1NTQWdlbnQuU2VsZWN0b3JQcm9maWxlfSBwcm9m
aWxlCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgcHJvZmls
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgdmFyIHVpZCA9IHRoaXMuX3Byb2ZpbGVVaWQrKzsKLSAgICAg
ICAgICAgIHZhciB0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJvZmlsZSAlZCIsIHVp
ZCkgKyBTdHJpbmcuc3ByaW50ZigiICglcykiLCBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKHByb2Zp
bGUudG90YWxUaW1lIC8gMTAwMCkpOwotICAgICAgICAgICAgdGhpcy5hZGRQcm9maWxlKG5ldyBX
ZWJJbnNwZWN0b3IuQ1NTUHJvZmlsZUhlYWRlcih0aGlzLCB0aXRsZSwgdWlkLCBwcm9maWxlKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxzZTsKLSAgICAgICAg
Q1NTQWdlbnQuc3RvcFNlbGVjdG9yUHJvZmlsZXIoY2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0g
dGl0bGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KLSAgICAg
Ki8KLSAgICBjcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0aXRsZSkKLSAgICB7Ci0g
ICAgICAgIHRpdGxlID0gdGl0bGUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZWNvcmRpbmdc
dTIwMjYiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvZmlsZUhlYWRl
cih0aGlzLCB0aXRsZSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlBy
b2ZpbGVUeXBlLnByb3RvdHlwZQotfQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gKiBAcGFyYW0geyFXZWJJbnNwZWN0
b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZX0gdHlwZQotICogQHBhcmFtIHtzdHJpbmd9IHRpdGxl
Ci0gKiBAcGFyYW0ge251bWJlcj19IHVpZAotICogQHBhcmFtIHtDU1NBZ2VudC5TZWxlY3RvclBy
b2ZpbGU9fSBwcm90b2NvbERhdGEKLSAqLwotV2ViSW5zcGVjdG9yLkNTU1Byb2ZpbGVIZWFkZXIg
PSBmdW5jdGlvbih0eXBlLCB0aXRsZSwgdWlkLCBwcm90b2NvbERhdGEpCi17Ci0gICAgV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRsZSwgdWlkKTsKLSAgICB0
aGlzLl9wcm90b2NvbERhdGEgPSBwcm90b2NvbERhdGE7Ci19Ci0KLVdlYkluc3BlY3Rvci5DU1NQ
cm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAg
ICAgKi8KLSAgICBjcmVhdGVTaWRlYmFyVHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQo
dGhpcywgdGhpcy50aXRsZSwgInByb2ZpbGUtc2lkZWJhci10cmVlLWl0ZW0iKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
UHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICAgICAqLwotICAgIGNyZWF0ZVZpZXc6IGZ1
bmN0aW9uKHByb2ZpbGVzUGFuZWwpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IC8qKiBA
dHlwZSB7Q1NTQWdlbnQuU2VsZWN0b3JQcm9maWxlfSAqLyAodGhpcy5fcHJvdG9jb2xEYXRhKTsK
LSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVmlldyhw
cm9maWxlKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZUhl
YWRlci5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Qw
ZDAxZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NT
U1N0eWxlTW9kZWwuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTM5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5Xb3Jrc3BhY2V9IHdvcmtzcGFjZQotICovCi1XZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNb2RlbCA9IGZ1bmN0aW9uKHdvcmtzcGFjZSkKLXsKLSAgICB0aGlzLl93b3Jrc3BhY2Ug
PSB3b3Jrc3BhY2U7Ci0gICAgdGhpcy5fcGVuZGluZ0NvbW1hbmRzTWFqb3JTdGF0ZSA9IFtdOwot
ICAgIC8qKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkxpdmVMb2Nh
dGlvbj59ICovCi0gICAgdGhpcy5fbG9jYXRpb25zID0gW107Ci0gICAgdGhpcy5fc291cmNlTWFw
cGluZ3MgPSB7fTsKLSAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLlVuZG9SZWRvUmVxdWVzdGVkLCB0aGlzLl91bmRv
UmVkb1JlcXVlc3RlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5VbmRvUmVkb0NvbXBsZXRlZCwg
dGhpcy5fdW5kb1JlZG9Db21wbGV0ZWQsIHRoaXMpOwotICAgIHRoaXMuX3Jlc291cmNlQmluZGlu
ZyA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbFJlc291cmNlQmluZGluZygpOwotICAg
IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLk1haW5GcmFtZUNyZWF0ZWRPck5hdmln
YXRlZCwgdGhpcy5fbWFpbkZyYW1lQ3JlYXRlZE9yTmF2aWdhdGVkLCB0aGlzKTsKLSAgICB0aGlz
Ll9uYW1lZEZsb3dDb2xsZWN0aW9ucyA9IHt9OwotICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuRG9jdW1lbnRVcGRh
dGVkLCB0aGlzLl9yZXNldE5hbWVkRmxvd0NvbGxlY3Rpb25zLCB0aGlzKTsKLSAgICBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ1NTRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkNTU0Rpc3Bh
dGNoZXIodGhpcykpOwotICAgIENTU0FnZW50LmVuYWJsZSgpOwotfQotCi0vKioKLSAqIEBwYXJh
bSB7QXJyYXkuPENTU0FnZW50LkNTU1J1bGU+fSBydWxlQXJyYXkKLSAqLwotV2ViSW5zcGVjdG9y
LkNTU1N0eWxlTW9kZWwucGFyc2VSdWxlQXJyYXlQYXlsb2FkID0gZnVuY3Rpb24ocnVsZUFycmF5
KQotewotICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVB
cnJheS5sZW5ndGg7ICsraSkKLSAgICAgICAgcmVzdWx0LnB1c2goV2ViSW5zcGVjdG9yLkNTU1J1
bGUucGFyc2VQYXlsb2FkKHJ1bGVBcnJheVtpXSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0g
ICAgCi0vKioKLSAqIEBwYXJhbSB7QXJyYXkuPENTU0FnZW50LlJ1bGVNYXRjaD59IG1hdGNoQXJy
YXkKLSAqLwotV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucGFyc2VSdWxlTWF0Y2hBcnJheVBh
eWxvYWQgPSBmdW5jdGlvbihtYXRjaEFycmF5KQotewotICAgIHZhciByZXN1bHQgPSBbXTsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoQXJyYXkubGVuZ3RoOyArK2kpCi0gICAgICAgIHJl
c3VsdC5wdXNoKFdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNlUGF5bG9hZChtYXRjaEFycmF5W2ld
LnJ1bGUsIG1hdGNoQXJyYXlbaV0ubWF0Y2hpbmdTZWxlY3RvcnMpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1XZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FdmVudHMgPSB7Ci0gICAgU3R5
bGVTaGVldENoYW5nZWQ6ICJTdHlsZVNoZWV0Q2hhbmdlZCIsCi0gICAgTWVkaWFRdWVyeVJlc3Vs
dENoYW5nZWQ6ICJNZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCIsCi0gICAgTmFtZWRGbG93Q3JlYXRl
ZDogIk5hbWVkRmxvd0NyZWF0ZWQiLAotICAgIE5hbWVkRmxvd1JlbW92ZWQ6ICJOYW1lZEZsb3dS
ZW1vdmVkIiwKLSAgICBSZWdpb25MYXlvdXRVcGRhdGVkOiAiUmVnaW9uTGF5b3V0VXBkYXRlZCIs
Ci0gICAgUmVnaW9uT3ZlcnNldENoYW5nZWQ6ICJSZWdpb25PdmVyc2V0Q2hhbmdlZCIKLX0KLQot
V2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTWVkaWFUeXBlcyA9IFsiYWxsIiwgImJyYWlsbGUi
LCAiZW1ib3NzZWQiLCAiaGFuZGhlbGQiLCAicHJpbnQiLCAicHJvamVjdGlvbiIsICJzY3JlZW4i
LCAic3BlZWNoIiwgInR0eSIsICJ0diJdOwotCi1XZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IG5v
ZGVJZAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbmVlZFBzZXVkbwotICAgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gbmVlZEluaGVyaXRlZAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oPyopfSB1c2Vy
Q2FsbGJhY2sKLSAgICAgKi8KLSAgICBnZXRNYXRjaGVkU3R5bGVzQXN5bmM6IGZ1bmN0aW9uKG5v
ZGVJZCwgbmVlZFBzZXVkbywgbmVlZEluaGVyaXRlZCwgdXNlckNhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oPyopfSB1c2VyQ2FsbGJhY2sK
LSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBw
YXJhbSB7QXJyYXkuPENTU0FnZW50LlJ1bGVNYXRjaD49fSBtYXRjaGVkUGF5bG9hZAotICAgICAg
ICAgKiBAcGFyYW0ge0FycmF5LjxDU1NBZ2VudC5Qc2V1ZG9JZE1hdGNoZXM+PX0gcHNldWRvUGF5
bG9hZAotICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxDU1NBZ2VudC5Jbmhlcml0ZWRTdHlsZUVu
dHJ5Pj19IGluaGVyaXRlZFBheWxvYWQKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNh
bGxiYWNrKHVzZXJDYWxsYmFjaywgZXJyb3IsIG1hdGNoZWRQYXlsb2FkLCBwc2V1ZG9QYXlsb2Fk
LCBpbmhlcml0ZWRQYXlsb2FkKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgICAgICAgICBpZiAodXNlckNhbGxiYWNrKQotICAgICAgICAgICAgICAgICAgICB1
c2VyQ2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgICAgICAgICBpZiAobWF0Y2hl
ZFBheWxvYWQpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lm1hdGNoZWRDU1NSdWxlcyA9IFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNlUnVsZU1hdGNoQXJyYXlQYXlsb2FkKG1hdGNoZWRQ
YXlsb2FkKTsKLQotICAgICAgICAgICAgaWYgKHBzZXVkb1BheWxvYWQpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQucHNldWRvRWxlbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHBzZXVkb1BheWxvYWQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGVudHJ5UGF5bG9hZCA9IHBzZXVkb1BheWxvYWRbaV07Ci0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5wc2V1ZG9FbGVtZW50cy5wdXNoKHsgcHNldWRvSWQ6IGVudHJ5UGF5bG9h
ZC5wc2V1ZG9JZCwgcnVsZXM6IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNlUnVsZU1h
dGNoQXJyYXlQYXlsb2FkKGVudHJ5UGF5bG9hZC5tYXRjaGVzKSB9KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmhlcml0ZWRQYXlsb2FkKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmluaGVyaXRlZCA9IFtdOwotICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkUGF5bG9hZC5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICB2YXIgZW50cnlQYXlsb2FkID0gaW5oZXJpdGVkUGF5bG9hZFtpXTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0ge307Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChlbnRyeVBheWxvYWQuaW5saW5lU3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBl
bnRyeS5pbmxpbmVTdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNl
UGF5bG9hZChlbnRyeVBheWxvYWQuaW5saW5lU3R5bGUpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZW50cnlQYXlsb2FkLm1hdGNoZWRDU1NSdWxlcykKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVudHJ5Lm1hdGNoZWRDU1NSdWxlcyA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNl
UnVsZU1hdGNoQXJyYXlQYXlsb2FkKGVudHJ5UGF5bG9hZC5tYXRjaGVkQ1NTUnVsZXMpOwotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuaW5oZXJpdGVkLnB1c2goZW50cnkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVzZXJDYWxsYmFjaykK
LSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIENTU0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKG5vZGVJZCwgbmVlZFBzZXVkbywg
bmVlZEluaGVyaXRlZCwgY2FsbGJhY2suYmluZChudWxsLCB1c2VyQ2FsbGJhY2spKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IG5vZGVJZAotICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKX0g
dXNlckNhbGxiYWNrCi0gICAgICovCi0gICAgZ2V0Q29tcHV0ZWRTdHlsZUFzeW5jOiBmdW5jdGlv
bihub2RlSWQsIHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBA
cGFyYW0ge2Z1bmN0aW9uKD9XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbil9IHVzZXJD
YWxsYmFjawotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXNlckNhbGxi
YWNrLCBlcnJvciwgY29tcHV0ZWRQYXlsb2FkKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
ZXJyb3IgfHwgIWNvbXB1dGVkUGF5bG9hZCkKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2so
bnVsbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKFdl
Ykluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlQ29tcHV0ZWRTdHlsZVBheWxvYWQo
Y29tcHV0ZWRQYXlsb2FkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBDU1NBZ2VudC5nZXRDb21w
dXRlZFN0eWxlRm9yTm9kZShub2RlSWQsIGNhbGxiYWNrLmJpbmQobnVsbCwgdXNlckNhbGxiYWNr
KSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBu
b2RlSWQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbiwgP1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKX0gdXNlckNhbGxiYWNr
Ci0gICAgICovCi0gICAgZ2V0SW5saW5lU3R5bGVzQXN5bmM6IGZ1bmN0aW9uKG5vZGVJZCwgdXNl
ckNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oP1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLCA/V2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb24pfSB1c2VyQ2FsbGJhY2sKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9j
b2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7P0NTU0FnZW50LkNTU1N0eWxlPX0g
aW5saW5lUGF5bG9hZAotICAgICAgICAgKiBAcGFyYW0gez9DU1NBZ2VudC5DU1NTdHlsZT19IGF0
dHJpYnV0ZXNTdHlsZVBheWxvYWQKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxi
YWNrKHVzZXJDYWxsYmFjaywgZXJyb3IsIGlubGluZVBheWxvYWQsIGF0dHJpYnV0ZXNTdHlsZVBh
eWxvYWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvciB8fCAhaW5saW5lUGF5bG9h
ZCkKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobnVsbCwgbnVsbCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChpbmxpbmVQYXlsb2FkKSwgYXR0cmlidXRlc1N0eWxl
UGF5bG9hZCA/IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChh
dHRyaWJ1dGVzU3R5bGVQYXlsb2FkKSA6IG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ1NT
QWdlbnQuZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShub2RlSWQsIGNhbGxiYWNrLmJpbmQobnVsbCwg
dXNlckNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9NQWdl
bnQuTm9kZUlkfSBub2RlSWQKLSAgICAgKiBAcGFyYW0gez9BcnJheS48c3RyaW5nPnx1bmRlZmlu
ZWR9IGZvcmNlZFBzZXVkb0NsYXNzZXMKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk9fSB1c2Vy
Q2FsbGJhY2sKLSAgICAgKi8KLSAgICBmb3JjZVBzZXVkb1N0YXRlOiBmdW5jdGlvbihub2RlSWQs
IGZvcmNlZFBzZXVkb0NsYXNzZXMsIHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIENTU0Fn
ZW50LmZvcmNlUHNldWRvU3RhdGUobm9kZUlkLCBmb3JjZWRQc2V1ZG9DbGFzc2VzIHx8IFtdLCB1
c2VyQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50
Lk5vZGVJZH0gZG9jdW1lbnROb2RlSWQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9XZWJJbnNw
ZWN0b3IuTmFtZWRGbG93Q29sbGVjdGlvbil9IHVzZXJDYWxsYmFjawotICAgICAqLwotICAgIGdl
dE5hbWVkRmxvd0NvbGxlY3Rpb25Bc3luYzogZnVuY3Rpb24oZG9jdW1lbnROb2RlSWQsIHVzZXJD
YWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBuYW1lZEZsb3dDb2xsZWN0aW9uID0gdGhpcy5f
bmFtZWRGbG93Q29sbGVjdGlvbnNbZG9jdW1lbnROb2RlSWRdOwotICAgICAgICBpZiAobmFtZWRG
bG93Q29sbGVjdGlvbikgewotICAgICAgICAgICAgdXNlckNhbGxiYWNrKG5hbWVkRmxvd0NvbGxl
Y3Rpb24pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5OYW1lZEZsb3dDb2xsZWN0
aW9uKX0gdXNlckNhbGxiYWNrCi0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBl
cnJvcgotICAgICAgICAgKiBAcGFyYW0gez9BcnJheS48Q1NTQWdlbnQuTmFtZWRGbG93Pn0gbmFt
ZWRGbG93UGF5bG9hZAotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXNl
ckNhbGxiYWNrLCBlcnJvciwgbmFtZWRGbG93UGF5bG9hZCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGVycm9yIHx8ICFuYW1lZEZsb3dQYXlsb2FkKQotICAgICAgICAgICAgICAgIHVzZXJD
YWxsYmFjayhudWxsKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBu
YW1lZEZsb3dDb2xsZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5OYW1lZEZsb3dDb2xsZWN0aW9u
KG5hbWVkRmxvd1BheWxvYWQpOwotICAgICAgICAgICAgICAgIHRoaXMuX25hbWVkRmxvd0NvbGxl
Y3Rpb25zW2RvY3VtZW50Tm9kZUlkXSA9IG5hbWVkRmxvd0NvbGxlY3Rpb247Ci0gICAgICAgICAg
ICAgICAgdXNlckNhbGxiYWNrKG5hbWVkRmxvd0NvbGxlY3Rpb24pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgQ1NTQWdlbnQuZ2V0TmFtZWRGbG93Q29sbGVjdGlvbihkb2N1
bWVudE5vZGVJZCwgY2FsbGJhY2suYmluZCh0aGlzLCB1c2VyQ2FsbGJhY2spKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IGRvY3VtZW50Tm9kZUlk
Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZsb3dOYW1lCi0gICAgICogQHBhcmFtIHtmdW5jdGlv
big/V2ViSW5zcGVjdG9yLk5hbWVkRmxvdyl9IHVzZXJDYWxsYmFjawotICAgICAqLwotICAgIGdl
dEZsb3dCeU5hbWVBc3luYzogZnVuY3Rpb24oZG9jdW1lbnROb2RlSWQsIGZsb3dOYW1lLCB1c2Vy
Q2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgbmFtZWRGbG93Q29sbGVjdGlvbiA9IHRoaXMu
X25hbWVkRmxvd0NvbGxlY3Rpb25zW2RvY3VtZW50Tm9kZUlkXTsKLSAgICAgICAgaWYgKG5hbWVk
Rmxvd0NvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIHVzZXJDYWxsYmFjayhuYW1lZEZsb3dDb2xs
ZWN0aW9uLmZsb3dCeU5hbWUoZmxvd05hbWUpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9XZWJJbnNw
ZWN0b3IuTmFtZWRGbG93KX0gdXNlckNhbGxiYWNrCi0gICAgICAgICAqIEBwYXJhbSB7P1dlYklu
c3BlY3Rvci5OYW1lZEZsb3dDb2xsZWN0aW9ufSBuYW1lZEZsb3dDb2xsZWN0aW9uCi0gICAgICAg
ICAqLwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIG5hbWVkRmxvd0Nv
bGxlY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbmFtZWRGbG93Q29sbGVjdGlv
bikKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKG5hbWVkRmxvd0NvbGxlY3Rpb24uZmxvd0J5
TmFtZShmbG93TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5nZXROYW1lZEZsb3dD
b2xsZWN0aW9uQXN5bmMoZG9jdW1lbnROb2RlSWQsIGNhbGxiYWNrLmJpbmQodGhpcywgdXNlckNh
bGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q1NTQWdlbnQuQ1NT
UnVsZUlkfSBydWxlSWQKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1NlbGVjdG9yCi0gICAgICogQHBhcmFtIHtmdW5jdGlv
bihXZWJJbnNwZWN0b3IuQ1NTUnVsZSwgYm9vbGVhbil9IHN1Y2Nlc3NDYWxsYmFjawotICAgICAq
IEBwYXJhbSB7ZnVuY3Rpb24oKX0gZmFpbHVyZUNhbGxiYWNrCi0gICAgICovCi0gICAgc2V0UnVs
ZVNlbGVjdG9yOiBmdW5jdGlvbihydWxlSWQsIG5vZGVJZCwgbmV3U2VsZWN0b3IsIHN1Y2Nlc3ND
YWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAq
IEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKLSAgICAgICAgICogQHBhcmFtIHtmdW5j
dGlvbihXZWJJbnNwZWN0b3IuQ1NTUnVsZSwgYm9vbGVhbil9IHN1Y2Nlc3NDYWxsYmFjawotICAg
ICAgICAgKiBAcGFyYW0ge0NTU0FnZW50LkNTU1J1bGV9IHJ1bGVQYXlsb2FkCi0gICAgICAgICAq
IEBwYXJhbSB7P0FycmF5LjxET01BZ2VudC5Ob2RlSWQ+fSBzZWxlY3RlZE5vZGVJZHMKLSAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNoZWNrQWZmZWN0c0NhbGxiYWNrKG5vZGVJZCwgc3Vj
Y2Vzc0NhbGxiYWNrLCBydWxlUGF5bG9hZCwgc2VsZWN0ZWROb2RlSWRzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZUlkcykKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB2YXIgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSA9IChzZWxlY3RlZE5vZGVJ
ZHMuaW5kZXhPZihub2RlSWQpID49IDApOwotICAgICAgICAgICAgdmFyIHJ1bGUgPSBXZWJJbnNw
ZWN0b3IuQ1NTUnVsZS5wYXJzZVBheWxvYWQocnVsZVBheWxvYWQpOwotICAgICAgICAgICAgc3Vj
Y2Vzc0NhbGxiYWNrKHJ1bGUsIGRvZXNBZmZlY3RTZWxlY3RlZE5vZGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQK
LSAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQ1NTUnVsZSwgYm9vbGVh
bil9IHN1Y2Nlc3NDYWxsYmFjawotICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZhaWx1
cmVDYWxsYmFjawotICAgICAgICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAg
ICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1NlbGVjdG9yCi0gICAgICAgICAqIEBwYXJhbSB7
P0NTU0FnZW50LkNTU1J1bGV9IHJ1bGVQYXlsb2FkCi0gICAgICAgICAqLwotICAgICAgICBmdW5j
dGlvbiBjYWxsYmFjayhub2RlSWQsIHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrLCBu
ZXdTZWxlY3RvciwgZXJyb3IsIHJ1bGVQYXlsb2FkKQotICAgICAgICB7Ci0gICAgICAgICAgICB0
aGlzLl9wZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRlLnBvcCgpOwotICAgICAgICAgICAgaWYgKGVy
cm9yKQotICAgICAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm1hcmtVbmRvYWJsZVN0
YXRlKCk7Ci0gICAgICAgICAgICAgICAgdmFyIG93bmVyRG9jdW1lbnRJZCA9IHRoaXMuX293bmVy
RG9jdW1lbnRJZChub2RlSWQpOwotICAgICAgICAgICAgICAgIGlmIChvd25lckRvY3VtZW50SWQp
Ci0gICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5xdWVyeVNlbGVjdG9y
QWxsKG93bmVyRG9jdW1lbnRJZCwgbmV3U2VsZWN0b3IsIGNoZWNrQWZmZWN0c0NhbGxiYWNrLmJp
bmQodGhpcywgbm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIHJ1bGVQYXlsb2FkKSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3BlbmRpbmdDb21tYW5kc01h
am9yU3RhdGUucHVzaCh0cnVlKTsKLSAgICAgICAgQ1NTQWdlbnQuc2V0UnVsZVNlbGVjdG9yKHJ1
bGVJZCwgbmV3U2VsZWN0b3IsIGNhbGxiYWNrLmJpbmQodGhpcywgbm9kZUlkLCBzdWNjZXNzQ2Fs
bGJhY2ssIGZhaWx1cmVDYWxsYmFjaywgbmV3U2VsZWN0b3IpKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IG5vZGVJZAotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBzZWxlY3RvcgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkNT
U1J1bGUsIGJvb2xlYW4pfSBzdWNjZXNzQ2FsbGJhY2sKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9u
KCl9IGZhaWx1cmVDYWxsYmFjawotICAgICAqLwotICAgIGFkZFJ1bGU6IGZ1bmN0aW9uKG5vZGVJ
ZCwgc2VsZWN0b3IsIHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKLSAg
ICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQ1NTUnVsZSwgYm9vbGVhbil9
IHN1Y2Nlc3NDYWxsYmFjawotICAgICAgICAgKiBAcGFyYW0ge0NTU0FnZW50LkNTU1J1bGV9IHJ1
bGVQYXlsb2FkCi0gICAgICAgICAqIEBwYXJhbSB7P0FycmF5LjxET01BZ2VudC5Ob2RlSWQ+fSBz
ZWxlY3RlZE5vZGVJZHMKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNoZWNrQWZmZWN0
c0NhbGxiYWNrKG5vZGVJZCwgc3VjY2Vzc0NhbGxiYWNrLCBydWxlUGF5bG9hZCwgc2VsZWN0ZWRO
b2RlSWRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZUlkcykKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHZhciBkb2VzQWZmZWN0U2VsZWN0
ZWROb2RlID0gKHNlbGVjdGVkTm9kZUlkcy5pbmRleE9mKG5vZGVJZCkgPj0gMCk7Ci0gICAgICAg
ICAgICB2YXIgcnVsZSA9IFdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNlUGF5bG9hZChydWxlUGF5
bG9hZCk7Ci0gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2socnVsZSwgZG9lc0FmZmVjdFNlbGVj
dGVkTm9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtm
dW5jdGlvbihXZWJJbnNwZWN0b3IuQ1NTUnVsZSwgYm9vbGVhbil9IHN1Y2Nlc3NDYWxsYmFjawot
ICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZhaWx1cmVDYWxsYmFjawotICAgICAgICAg
KiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wu
RXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7P0NTU0FnZW50LkNTU1J1bGV9IHJ1bGVQ
YXlsb2FkCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdWNjZXNzQ2Fs
bGJhY2ssIGZhaWx1cmVDYWxsYmFjaywgc2VsZWN0b3IsIGVycm9yLCBydWxlUGF5bG9hZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NvbW1hbmRzTWFqb3JTdGF0ZS5wb3Ao
KTsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIC8vIEludmFsaWQg
c3ludGF4IGZvciBhIHNlbGVjdG9yCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21B
Z2VudC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotICAgICAgICAgICAgICAgIHZhciBvd25lckRvY3Vt
ZW50SWQgPSB0aGlzLl9vd25lckRvY3VtZW50SWQobm9kZUlkKTsKLSAgICAgICAgICAgICAgICBp
ZiAob3duZXJEb2N1bWVudElkKQotICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9t
QWdlbnQucXVlcnlTZWxlY3RvckFsbChvd25lckRvY3VtZW50SWQsIHNlbGVjdG9yLCBjaGVja0Fm
ZmVjdHNDYWxsYmFjay5iaW5kKHRoaXMsIG5vZGVJZCwgc3VjY2Vzc0NhbGxiYWNrLCBydWxlUGF5
bG9hZCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZmFpbHVy
ZUNhbGxiYWNrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9w
ZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRlLnB1c2godHJ1ZSk7Ci0gICAgICAgIENTU0FnZW50LmFk
ZFJ1bGUobm9kZUlkLCBzZWxlY3RvciwgY2FsbGJhY2suYmluZCh0aGlzLCBzdWNjZXNzQ2FsbGJh
Y2ssIGZhaWx1cmVDYWxsYmFjaywgc2VsZWN0b3IpKTsKLSAgICB9LAotCi0gICAgbWVkaWFRdWVy
eVJlc3VsdENoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkV2ZW50cy5NZWRpYVF1
ZXJ5UmVzdWx0Q2hhbmdlZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9N
QWdlbnQuTm9kZUlkfSBub2RlSWQKLSAgICAgKi8KLSAgICBfb3duZXJEb2N1bWVudElkOiBmdW5j
dGlvbihub2RlSWQpCi0gICAgewotICAgICAgICB2YXIgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21B
Z2VudC5ub2RlRm9ySWQobm9kZUlkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgPyBub2RlLm93
bmVyRG9jdW1lbnQuaWQgOiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e0NTU0FnZW50LlN0eWxlU2hlZXRJZH0gc3R5bGVTaGVldElkCi0gICAgICovCi0gICAgX2ZpcmVT
dHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oc3R5bGVTaGVldElkKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9wZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRlLmxlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB2YXIgbWFqb3JDaGFuZ2UgPSB0aGlzLl9wZW5kaW5nQ29tbWFu
ZHNNYWpvclN0YXRlW3RoaXMuX3BlbmRpbmdDb21tYW5kc01ham9yU3RhdGUubGVuZ3RoIC0gMV07
Ci0KLSAgICAgICAgaWYgKCFtYWpvckNoYW5nZSB8fCAhc3R5bGVTaGVldElkIHx8ICF0aGlzLmhh
c0V2ZW50TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkV2ZW50cy5TdHlsZVNo
ZWV0Q2hhbmdlZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRXZlbnRzLlN0eWxl
U2hlZXRDaGFuZ2VkLCB7IHN0eWxlU2hlZXRJZDogc3R5bGVTaGVldElkLCBtYWpvckNoYW5nZTog
bWFqb3JDaGFuZ2UgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q1NTQWdl
bnQuTmFtZWRGbG93fSBuYW1lZEZsb3dQYXlsb2FkCi0gICAgICovCi0gICAgX25hbWVkRmxvd0Ny
ZWF0ZWQ6IGZ1bmN0aW9uKG5hbWVkRmxvd1BheWxvYWQpCi0gICAgewotICAgICAgICB2YXIgbmFt
ZWRGbG93ID0gV2ViSW5zcGVjdG9yLk5hbWVkRmxvdy5wYXJzZVBheWxvYWQobmFtZWRGbG93UGF5
bG9hZCk7Ci0gICAgICAgIHZhciBuYW1lZEZsb3dDb2xsZWN0aW9uID0gdGhpcy5fbmFtZWRGbG93
Q29sbGVjdGlvbnNbbmFtZWRGbG93LmRvY3VtZW50Tm9kZUlkXTsKLQotICAgICAgICBpZiAoIW5h
bWVkRmxvd0NvbGxlY3Rpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmFtZWRG
bG93Q29sbGVjdGlvbi5fYXBwZW5kTmFtZWRGbG93KG5hbWVkRmxvdyk7Ci0gICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkV2ZW50
cy5OYW1lZEZsb3dDcmVhdGVkLCBuYW1lZEZsb3cpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gZG9jdW1lbnROb2RlSWQKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gZmxvd05hbWUKLSAgICAgKi8KLSAgICBfbmFtZWRGbG93UmVtb3ZlZDogZnVuY3Rp
b24oZG9jdW1lbnROb2RlSWQsIGZsb3dOYW1lKQotICAgIHsKLSAgICAgICAgdmFyIG5hbWVkRmxv
d0NvbGxlY3Rpb24gPSB0aGlzLl9uYW1lZEZsb3dDb2xsZWN0aW9uc1tkb2N1bWVudE5vZGVJZF07
Ci0KLSAgICAgICAgaWYgKCFuYW1lZEZsb3dDb2xsZWN0aW9uKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIG5hbWVkRmxvd0NvbGxlY3Rpb24uX3JlbW92ZU5hbWVkRmxvdyhmbG93TmFt
ZSk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5D
U1NTdHlsZU1vZGVsLkV2ZW50cy5OYW1lZEZsb3dSZW1vdmVkLCB7IGRvY3VtZW50Tm9kZUlkOiBk
b2N1bWVudE5vZGVJZCwgZmxvd05hbWU6IGZsb3dOYW1lIH0pOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0NTU0FnZW50Lk5hbWVkRmxvd30gbmFtZWRGbG93UGF5bG9hZAotICAg
ICAqLwotICAgIF9yZWdpb25MYXlvdXRVcGRhdGVkOiBmdW5jdGlvbihuYW1lZEZsb3dQYXlsb2Fk
KQotICAgIHsKLSAgICAgICAgdmFyIG5hbWVkRmxvdyA9IFdlYkluc3BlY3Rvci5OYW1lZEZsb3cu
cGFyc2VQYXlsb2FkKG5hbWVkRmxvd1BheWxvYWQpOwotICAgICAgICB2YXIgbmFtZWRGbG93Q29s
bGVjdGlvbiA9IHRoaXMuX25hbWVkRmxvd0NvbGxlY3Rpb25zW25hbWVkRmxvdy5kb2N1bWVudE5v
ZGVJZF07Ci0KLSAgICAgICAgaWYgKCFuYW1lZEZsb3dDb2xsZWN0aW9uKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIG5hbWVkRmxvd0NvbGxlY3Rpb24uX2FwcGVuZE5hbWVkRmxvdyhu
YW1lZEZsb3cpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbC5FdmVudHMuUmVnaW9uTGF5b3V0VXBkYXRlZCwgbmFtZWRGbG93
KTsKLSAgICB9LAotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q1NTQWdlbnQuTmFtZWRG
bG93fSBuYW1lZEZsb3dQYXlsb2FkCi0gICAgICovCi0gICAgX3JlZ2lvbk92ZXJzZXRDaGFuZ2Vk
OiBmdW5jdGlvbihuYW1lZEZsb3dQYXlsb2FkKQotICAgIHsKLSAgICAgICAgdmFyIG5hbWVkRmxv
dyA9IFdlYkluc3BlY3Rvci5OYW1lZEZsb3cucGFyc2VQYXlsb2FkKG5hbWVkRmxvd1BheWxvYWQp
OwotICAgICAgICB2YXIgbmFtZWRGbG93Q29sbGVjdGlvbiA9IHRoaXMuX25hbWVkRmxvd0NvbGxl
Y3Rpb25zW25hbWVkRmxvdy5kb2N1bWVudE5vZGVJZF07Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5hbWVkRmxvd0NvbGxlY3Rpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICBuYW1lZEZsb3dDb2xsZWN0aW9uLl9hcHBlbmROYW1lZEZsb3cobmFtZWRGbG93KTsKLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TW9kZWwuRXZlbnRzLlJlZ2lvbk92ZXJzZXRDaGFuZ2VkLCBuYW1lZEZsb3cpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NTU0FnZW50LlN0eWxlU2hlZXRJZH0gc3R5bGVTaGVl
dElkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1RleHQKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IG1ham9yQ2hhbmdlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nKX0gdXNlckNh
bGxiYWNrCi0gICAgICovCi0gICAgc2V0U3R5bGVTaGVldFRleHQ6IGZ1bmN0aW9uKHN0eWxlU2hl
ZXRJZCwgbmV3VGV4dCwgbWFqb3JDaGFuZ2UsIHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9w
ZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRlLnBvcCgpOwotICAgICAgICAgICAgaWYgKCFlcnJvciAm
JiBtYWpvckNoYW5nZSkKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubWFy
a1VuZG9hYmxlU3RhdGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFlcnJvciAm
JiB1c2VyQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKGVycm9yKTsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLl9wZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRlLnB1c2gobWFq
b3JDaGFuZ2UpOwotICAgICAgICBDU1NBZ2VudC5zZXRTdHlsZVNoZWV0VGV4dChzdHlsZVNoZWV0
SWQsIG5ld1RleHQsIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBfdW5kb1Jl
ZG9SZXF1ZXN0ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BlbmRpbmdDb21t
YW5kc01ham9yU3RhdGUucHVzaCh0cnVlKTsKLSAgICB9LAotCi0gICAgX3VuZG9SZWRvQ29tcGxl
dGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9wZW5kaW5nQ29tbWFuZHNNYWpv
clN0YXRlLnBvcCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5DU1NSdWxlfSBydWxlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9y
LlJlc291cmNlKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBnZXRWaWFJbnNwZWN0b3JSZXNvdXJj
ZUZvclJ1bGU6IGZ1bmN0aW9uKHJ1bGUsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgaWYgKCFy
dWxlLmlkKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhudWxsKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9yZXNvdXJjZUJpbmRpbmcuX3JlcXVlc3RWaWFJ
bnNwZWN0b3JSZXNvdXJjZShydWxlLmlkLnN0eWxlU2hlZXRJZCwgY2FsbGJhY2spOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbFJl
c291cmNlQmluZGluZ30KLSAgICAgKi8KLSAgICByZXNvdXJjZUJpbmRpbmc6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZUJpbmRpbmc7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAq
LwotICAgIF9tYWluRnJhbWVDcmVhdGVkT3JOYXZpZ2F0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdGhpcy5fcmVzZXRTb3VyY2VNYXBwaW5ncygpOwotICAgICAgICB0aGlzLl9y
ZXNvdXJjZUJpbmRpbmcuX3Jlc2V0KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXBwaW5n
fSBzb3VyY2VNYXBwaW5nCi0gICAgICovCi0gICAgc2V0U291cmNlTWFwcGluZzogZnVuY3Rpb24o
dXJsLCBzb3VyY2VNYXBwaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmcpCi0g
ICAgICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZU1hcHBpbmdzW3VybF07
Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUxvY2F0aW9ucygpOwotICAgIH0sCi0KLSAgICBfcmVzZXRT
b3VyY2VNYXBwaW5nczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc291cmNlTWFw
cGluZ3MgPSB7fTsKLSAgICB9LAotCi0gICAgX3Jlc2V0TmFtZWRGbG93Q29sbGVjdGlvbnM6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX25hbWVkRmxvd0NvbGxlY3Rpb25zID0ge307
Ci0gICAgfSwKLQotICAgIF91cGRhdGVMb2NhdGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbG9jYXRpb25zLmxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgdGhpcy5fbG9jYXRpb25zW2ldLnVwZGF0ZSgpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DU1NSdWxlfSBjc3NSdWxlCi0gICAgICogQHBh
cmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbik6KGJvb2xlYW58dW5kZWZpbmVk
KX0gdXBkYXRlRGVsZWdhdGUKLSAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLkxpdmVMb2Nh
dGlvbn0KLSAgICAgKi8KLSAgICBjcmVhdGVMaXZlTG9jYXRpb246IGZ1bmN0aW9uKGNzc1J1bGUs
IHVwZGF0ZURlbGVnYXRlKQotICAgIHsKLSAgICAgICAgaWYgKCFjc3NSdWxlLl9yYXdMb2NhdGlv
bikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgbG9jYXRpb24gPSBuZXcg
V2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2ZUxvY2F0aW9uKGNzc1J1bGUuX3Jhd0xvY2F0
aW9uLCB1cGRhdGVEZWxlZ2F0ZSk7Ci0gICAgICAgIGlmICghbG9jYXRpb24udWlMb2NhdGlvbigp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHRoaXMuX2xvY2F0aW9ucy5wdXNo
KGxvY2F0aW9uKTsKLSAgICAgICAgbG9jYXRpb24udXBkYXRlKCk7Ci0gICAgICAgIHJldHVybiBs
b2NhdGlvbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
Q1NTTG9jYXRpb259IHJhd0xvY2F0aW9uCi0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5V
SUxvY2F0aW9ufQotICAgICAqLwotICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlv
bihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdGhpcy5f
c291cmNlTWFwcGluZ3NbcmF3TG9jYXRpb24udXJsXTsKLSAgICAgICAgaWYgKHNvdXJjZU1hcHBp
bmcpIHsKLSAgICAgICAgICAgIHZhciB1aUxvY2F0aW9uID0gc291cmNlTWFwcGluZy5yYXdMb2Nh
dGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7Ci0gICAgICAgICAgICBpZiAodWlMb2NhdGlv
bikKLSAgICAgICAgICAgICAgICByZXR1cm4gdWlMb2NhdGlvbjsKLSAgICAgICAgfQotICAgICAg
ICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSTChy
YXdMb2NhdGlvbi51cmwpOwotICAgICAgICBpZiAoIXVpU291cmNlQ29kZSkKLSAgICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9u
KHVpU291cmNlQ29kZSwgcmF3TG9jYXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1u
TnVtYmVyKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3Bl
Y3Rvci5MaXZlTG9jYXRpb259Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DU1NMb2NhdGlvbn0g
cmF3TG9jYXRpb24KLSAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24p
Oihib29sZWFufHVuZGVmaW5lZCl9IHVwZGF0ZURlbGVnYXRlCi0gKi8KLVdlYkluc3BlY3Rvci5D
U1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlvbiA9IGZ1bmN0aW9uKHJhd0xvY2F0aW9uLCB1cGRhdGVE
ZWxlZ2F0ZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9uLmNhbGwodGhpcywgcmF3
TG9jYXRpb24sIHVwZGF0ZURlbGVnYXRlKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KLSAgICAgKi8KLSAgICB1aUxvY2F0aW9uOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgY3NzTG9jYXRpb24gPSAvKiogQHR5cGUgV2ViSW5zcGVj
dG9yLkNTU0xvY2F0aW9uICovICh0aGlzLnJhd0xvY2F0aW9uKCkpOwotICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLmNzc01vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNzc0xvY2F0aW9u
KTsKLSAgICB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLkxpdmVMb2NhdGlvbi5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpOwotICAg
ICAgICB2YXIgbG9jYXRpb25zID0gV2ViSW5zcGVjdG9yLmNzc01vZGVsLl9sb2NhdGlvbnM7Ci0g
ICAgICAgIGlmIChsb2NhdGlvbnMpCi0gICAgICAgICAgICBsb2NhdGlvbnMucmVtb3ZlKHRoaXMp
OwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5MaXZlTG9jYXRpb24ucHJv
dG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5z
cGVjdG9yLlJhd0xvY2F0aW9ufQotICogQHBhcmFtIHtzdHJpbmd9IHVybAotICogQHBhcmFtIHtu
dW1iZXJ9IGxpbmVOdW1iZXIKLSAqIEBwYXJhbSB7bnVtYmVyPX0gY29sdW1uTnVtYmVyCi0gKi8K
LVdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiA9IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyKQotewotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubGluZU51bWJlciA9
IGxpbmVOdW1iZXI7Ci0gICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXIgfHwgMDsK
LX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7Q1NTQWdlbnQuQ1NTU3R5bGV9
IHBheWxvYWQKLSAqLwotV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlv
bihwYXlsb2FkKQotewotICAgIHRoaXMuaWQgPSBwYXlsb2FkLnN0eWxlSWQ7Ci0gICAgdGhpcy53
aWR0aCA9IHBheWxvYWQud2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBwYXlsb2FkLmhlaWdodDsK
LSAgICB0aGlzLnJhbmdlID0gcGF5bG9hZC5yYW5nZTsKLSAgICB0aGlzLl9zaG9ydGhhbmRWYWx1
ZXMgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5idWlsZFNob3J0aGFuZFZhbHVl
TWFwKHBheWxvYWQuc2hvcnRoYW5kRW50cmllcyk7Ci0gICAgdGhpcy5fbGl2ZVByb3BlcnR5TWFw
ID0ge307IC8vIExJVkUgcHJvcGVydGllcyAoc291cmNlLWJhc2VkIG9yIHN0eWxlLWJhc2VkKSA6
IHsgbmFtZSAtPiBDU1NQcm9wZXJ0eSB9Ci0gICAgdGhpcy5fYWxsUHJvcGVydGllcyA9IFtdOyAv
LyBBTEwgcHJvcGVydGllczogWyBDU1NQcm9wZXJ0eSBdCi0gICAgdGhpcy5fX2Rpc2FibGVkUHJv
cGVydGllcyA9IHt9OyAvLyBESVNBQkxFRCBwcm9wZXJ0aWVzOiB7IGluZGV4IC0+IENTU1Byb3Bl
cnR5IH0KLSAgICB2YXIgcGF5bG9hZFByb3BlcnR5Q291bnQgPSBwYXlsb2FkLmNzc1Byb3BlcnRp
ZXMubGVuZ3RoOwotCi0gICAgdmFyIHByb3BlcnR5SW5kZXggPSAwOwotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcGF5bG9hZFByb3BlcnR5Q291bnQ7ICsraSkgewotICAgICAgICB2YXIgcHJvcGVy
dHkgPSBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucGFyc2VQYXlsb2FkKHRoaXMsIGksIHBheWxv
YWQuY3NzUHJvcGVydGllc1tpXSk7Ci0gICAgICAgIHRoaXMuX2FsbFByb3BlcnRpZXMucHVzaChw
cm9wZXJ0eSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eS5kaXNhYmxlZCkKLSAgICAgICAgICAgIHRo
aXMuX19kaXNhYmxlZFByb3BlcnRpZXNbaV0gPSBwcm9wZXJ0eTsKLSAgICAgICAgaWYgKCFwcm9w
ZXJ0eS5hY3RpdmUgJiYgIXByb3BlcnR5LnN0eWxlQmFzZWQpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgdmFyIG5hbWUgPSBwcm9wZXJ0eS5uYW1lOwotICAgICAgICB0aGlzW3Byb3Bl
cnR5SW5kZXhdID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGl2ZVByb3BlcnR5TWFwW25hbWVdID0g
cHJvcGVydHk7Ci0gICAgICAgICsrcHJvcGVydHlJbmRleDsKLSAgICB9Ci0gICAgdGhpcy5sZW5n
dGggPSBwcm9wZXJ0eUluZGV4OwotICAgIGlmICgiY3NzVGV4dCIgaW4gcGF5bG9hZCkKLSAgICAg
ICAgdGhpcy5jc3NUZXh0ID0gcGF5bG9hZC5jc3NUZXh0OwotfQotCi0vKioKLSAqIEBwYXJhbSB7
QXJyYXkuPENTU0FnZW50LlNob3J0aGFuZEVudHJ5Pn0gc2hvcnRoYW5kRW50cmllcwotICogQHJl
dHVybiB7T2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5idWls
ZFNob3J0aGFuZFZhbHVlTWFwID0gZnVuY3Rpb24oc2hvcnRoYW5kRW50cmllcykKLXsKLSAgICB2
YXIgcmVzdWx0ID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaG9ydGhhbmRFbnRyaWVz
Lmxlbmd0aDsgKytpKQotICAgICAgICByZXN1bHRbc2hvcnRoYW5kRW50cmllc1tpXS5uYW1lXSA9
IHNob3J0aGFuZEVudHJpZXNbaV0udmFsdWU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoq
Ci0gKiBAcGFyYW0ge0NTU0FnZW50LkNTU1N0eWxlfSBwYXlsb2FkCi0gKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbn0KLSAqLwotV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCkKLXsKLSAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKHBheWxvYWQpOwotfQotCi0v
KioKLSAqIEBwYXJhbSB7QXJyYXkuPENTU0FnZW50LkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT59
IHBheWxvYWQKLSAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9ufQot
ICovCi1XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZUNvbXB1dGVkU3R5bGVQ
YXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCkKLXsKLSAgICB2YXIgbmV3UGF5bG9hZCA9IC8qKiBA
dHlwZSB7Q1NTQWdlbnQuQ1NTU3R5bGV9ICovICh7IGNzc1Byb3BlcnRpZXM6IFtdLCBzaG9ydGhh
bmRFbnRyaWVzOiBbXSwgd2lkdGg6ICIiLCBoZWlnaHQ6ICIiIH0pOwotICAgIGlmIChwYXlsb2Fk
KQotICAgICAgICBuZXdQYXlsb2FkLmNzc1Byb3BlcnRpZXMgPSBwYXlsb2FkOwotCi0gICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbihuZXdQYXlsb2FkKTsKLX0K
LQotV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlID0gewotICAgIGdl
dCBhbGxQcm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hbGxQcm9wZXJ0
aWVzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAg
ICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eXx1bmRlZmluZWR9Ci0gICAgICov
Ci0gICAgZ2V0TGl2ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2xpdmVQcm9wZXJ0eU1hcFtuYW1lXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgZ2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHRoaXMuX2xpdmVQcm9wZXJ0eU1hcFtuYW1lXTsKLSAgICAgICAgcmV0dXJu
IHByb3BlcnR5ID8gcHJvcGVydHkudmFsdWUgOiAiIjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgZ2V0UHJvcGVydHlQcmlvcml0eTogZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAg
IHZhciBwcm9wZXJ0eSA9IHRoaXMuX2xpdmVQcm9wZXJ0eU1hcFtuYW1lXTsKLSAgICAgICAgcmV0
dXJuIHByb3BlcnR5ID8gcHJvcGVydHkucHJpb3JpdHkgOiAiIjsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQot
ICAgICAqLwotICAgIGlzUHJvcGVydHlJbXBsaWNpdDogZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0g
ICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuX2xpdmVQcm9wZXJ0eU1hcFtuYW1lXTsKLSAgICAg
ICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHkuaW1wbGljaXQgOiAiIjsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtBcnJh
eS48V2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5Pn0KLSAgICAgKi8KLSAgICBsb25naGFuZFByb3Bl
cnRpZXM6IGZ1bmN0aW9uKG5hbWUpCi0gICAgewotICAgICAgICB2YXIgbG9uZ2hhbmRzID0gV2Vi
SW5zcGVjdG9yLkNTU01ldGFkYXRhLmNzc1Byb3BlcnRpZXNNZXRhaW5mby5sb25naGFuZHMobmFt
ZSk7Ci0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGxv
bmdoYW5kcyAmJiBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
cHJvcGVydHkgPSB0aGlzLl9saXZlUHJvcGVydHlNYXBbbG9uZ2hhbmRzW2ldXTsKLSAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwcm9wZXJ0eSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IHNob3J0aGFuZFByb3BlcnR5Ci0gICAgICogQHJldHVybiB7
c3RyaW5nfQotICAgICAqLwotICAgIHNob3J0aGFuZFZhbHVlOiBmdW5jdGlvbihzaG9ydGhhbmRQ
cm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zaG9ydGhhbmRWYWx1ZXNbc2hv
cnRoYW5kUHJvcGVydHldOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJl
cn0gaW5kZXgKLSAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5fQotICAg
ICAqLwotICAgIHByb3BlcnR5QXQ6IGZ1bmN0aW9uKGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIChpbmRleCA8IHRoaXMuYWxsUHJvcGVydGllcy5sZW5ndGgpID8gdGhpcy5hbGxQcm9wZXJ0
aWVzW2luZGV4XSA6IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251
bWJlcn0KLSAgICAgKi8KLSAgICBwYXN0TGFzdFNvdXJjZVByb3BlcnR5SW5kZXg6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmFsbFByb3BlcnRpZXMubGVuZ3Ro
IC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuYWxs
UHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5hY3RpdmUgfHwgcHJvcGVy
dHkuZGlzYWJsZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJl
cj19IGluZGV4Ci0gICAgICovCi0gICAgbmV3QmxhbmtQcm9wZXJ0eTogZnVuY3Rpb24oaW5kZXgp
Ci0gICAgewotICAgICAgICBpbmRleCA9ICh0eXBlb2YgaW5kZXggPT09ICJ1bmRlZmluZWQiKSA/
IHRoaXMucGFzdExhc3RTb3VyY2VQcm9wZXJ0eUluZGV4KCkgOiBpbmRleDsKLSAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkodGhpcywgaW5kZXgsICIiLCAiIiwgIiIs
ICJhY3RpdmUiLCB0cnVlLCBmYWxzZSwgIiIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3Bl
Y3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKT19IHVzZXJDYWxsYmFjawotICAgICAqLwotICAgIGlu
c2VydFByb3BlcnR5QXQ6IGZ1bmN0aW9uKGluZGV4LCBuYW1lLCB2YWx1ZSwgdXNlckNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gZXJyb3IK
LSAgICAgICAgICogQHBhcmFtIHtDU1NBZ2VudC5DU1NTdHlsZX0gcGF5bG9hZAotICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHBheWxvYWQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fcGVuZGluZ0NvbW1hbmRzTWFqb3JT
dGF0ZS5wb3AoKTsKLSAgICAgICAgICAgIGlmICghdXNlckNhbGxiYWNrKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKG51bGwp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2soV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHBheWxvYWQpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdGhpcy5pZCkKLSAgICAgICAg
ICAgIHRocm93ICJObyBzdHlsZSBpZCI7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVs
Ll9wZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRlLnB1c2godHJ1ZSk7Ci0gICAgICAgIENTU0FnZW50
LnNldFByb3BlcnR5VGV4dCh0aGlzLmlkLCBpbmRleCwgbmFtZSArICI6ICIgKyB2YWx1ZSArICI7
IiwgZmFsc2UsIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQotICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKT19
IHVzZXJDYWxsYmFjawotICAgICAqLwotICAgIGFwcGVuZFByb3BlcnR5OiBmdW5jdGlvbihuYW1l
LCB2YWx1ZSwgdXNlckNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdGhpcy5pbnNlcnRQcm9wZXJ0
eUF0KHRoaXMuYWxsUHJvcGVydGllcy5sZW5ndGgsIG5hbWUsIHZhbHVlLCB1c2VyQ2FsbGJhY2sp
OwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7Q1NTQWdlbnQu
Q1NTUnVsZX0gcGF5bG9hZAotICogQHBhcmFtIHtBcnJheS48bnVtYmVyPj19IG1hdGNoaW5nU2Vs
ZWN0b3JzCi0gKi8KLVdlYkluc3BlY3Rvci5DU1NSdWxlID0gZnVuY3Rpb24ocGF5bG9hZCwgbWF0
Y2hpbmdTZWxlY3RvcnMpCi17Ci0gICAgdGhpcy5pZCA9IHBheWxvYWQucnVsZUlkOwotICAgIGlm
IChtYXRjaGluZ1NlbGVjdG9ycykKLSAgICAgICAgdGhpcy5tYXRjaGluZ1NlbGVjdG9ycyA9IG1h
dGNoaW5nU2VsZWN0b3JzOwotICAgIHRoaXMuc2VsZWN0b3JzID0gcGF5bG9hZC5zZWxlY3Rvckxp
c3Quc2VsZWN0b3JzOwotICAgIHRoaXMuc2VsZWN0b3JUZXh0ID0gdGhpcy5zZWxlY3RvcnMuam9p
bigiLCAiKTsKLSAgICB0aGlzLnNlbGVjdG9yUmFuZ2UgPSBwYXlsb2FkLnNlbGVjdG9yTGlzdC5y
YW5nZTsKLSAgICB0aGlzLnNvdXJjZUxpbmUgPSBwYXlsb2FkLnNvdXJjZUxpbmU7Ci0gICAgdGhp
cy5zb3VyY2VVUkwgPSBwYXlsb2FkLnNvdXJjZVVSTDsKLSAgICB0aGlzLm9yaWdpbiA9IHBheWxv
YWQub3JpZ2luOwotICAgIHRoaXMuc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbi5wYXJzZVBheWxvYWQocGF5bG9hZC5zdHlsZSk7Ci0gICAgdGhpcy5zdHlsZS5wYXJlbnRS
dWxlID0gdGhpczsKLSAgICBpZiAocGF5bG9hZC5tZWRpYSkKLSAgICAgICAgdGhpcy5tZWRpYSA9
IFdlYkluc3BlY3Rvci5DU1NNZWRpYS5wYXJzZU1lZGlhQXJyYXlQYXlsb2FkKHBheWxvYWQubWVk
aWEpOwotICAgIHRoaXMuX3NldFJhd0xvY2F0aW9uKHBheWxvYWQpOwotfQotCi0vKioKLSAqIEBw
YXJhbSB7Q1NTQWdlbnQuQ1NTUnVsZX0gcGF5bG9hZAotICogQHBhcmFtIHtBcnJheS48bnVtYmVy
Pj19IG1hdGNoaW5nSW5kaWNlcwotICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkNTU1J1bGV9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNlUGF5bG9hZCA9IGZ1bmN0aW9uKHBheWxvYWQs
IG1hdGNoaW5nSW5kaWNlcykKLXsKLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NSdWxl
KHBheWxvYWQsIG1hdGNoaW5nSW5kaWNlcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5DU1NSdWxlLnBy
b3RvdHlwZSA9IHsKLSAgICBfc2V0UmF3TG9jYXRpb246IGZ1bmN0aW9uKHBheWxvYWQpCi0gICAg
ewotICAgICAgICBpZiAoIXBheWxvYWQuc291cmNlVVJMKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBpZiAodGhpcy5zZWxlY3RvclJhbmdlKSB7Ci0gICAgICAgICAgICB2YXIgcmVzb3Vy
Y2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwucmVzb3VyY2VGb3JVUkwocGF5bG9h
ZC5zb3VyY2VVUkwpOwotICAgICAgICAgICAgaWYgKHJlc291cmNlICYmIHJlc291cmNlLnR5cGUg
PT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9yYXdMb2NhdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24ocGF5
bG9hZC5zb3VyY2VVUkwsIHRoaXMuc2VsZWN0b3JSYW5nZS5zdGFydExpbmUsIHRoaXMuc2VsZWN0
b3JSYW5nZS5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3Jhd0xvY2F0aW9uID0gbmV3IFdlYkluc3Bl
Y3Rvci5DU1NMb2NhdGlvbihwYXlsb2FkLnNvdXJjZVVSTCwgcGF5bG9hZC5zb3VyY2VMaW5lKTsK
LSAgICB9LAotCi0gICAgZ2V0IGlzVXNlckFnZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLm9yaWdpbiA9PT0gInVzZXItYWdlbnQiOwotICAgIH0sCi0KLSAgICBnZXQgaXNVc2VyKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm9yaWdpbiA9PT0gInVzZXIiOwotICAgIH0sCi0K
LSAgICBnZXQgaXNWaWFJbnNwZWN0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMub3Jp
Z2luID09PSAiaW5zcGVjdG9yIjsKLSAgICB9LAotCi0gICAgZ2V0IGlzUmVndWxhcigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW4gPT09ICJyZWd1bGFyIjsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBpc1NvdXJjZU5h
dmlnYWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnNvdXJjZVVSTCkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFyIHJlc291cmNlID0gV2ViSW5z
cGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLnJlc291cmNlRm9yVVJMKHRoaXMuc291cmNlVVJMKTsK
LSAgICAgICAgcmV0dXJuICEhcmVzb3VyY2UgJiYgcmVzb3VyY2UuY29udGVudFR5cGUoKSA9PT0g
V2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldDsKLSAgICB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0gez9XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbn0gb3duZXJTdHlsZQotICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gKiBAcGFyYW0ge3N0
cmluZ30gbmFtZQotICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCi0gKiBAcGFyYW0gez9zdHJpbmd9
IHByaW9yaXR5Ci0gKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzCi0gKiBAcGFyYW0ge2Jvb2xlYW59
IHBhcnNlZE9rCi0gKiBAcGFyYW0ge2Jvb2xlYW59IGltcGxpY2l0Ci0gKiBAcGFyYW0gez9zdHJp
bmc9fSB0ZXh0Ci0gKiBAcGFyYW0ge0NTU0FnZW50LlNvdXJjZVJhbmdlPX0gcmFuZ2UKLSAqLwot
V2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5h
bWUsIHZhbHVlLCBwcmlvcml0eSwgc3RhdHVzLCBwYXJzZWRPaywgaW1wbGljaXQsIHRleHQsIHJh
bmdlKQotewotICAgIHRoaXMub3duZXJTdHlsZSA9IG93bmVyU3R5bGU7Ci0gICAgdGhpcy5pbmRl
eCA9IGluZGV4OwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVl
OwotICAgIHRoaXMucHJpb3JpdHkgPSBwcmlvcml0eTsKLSAgICB0aGlzLnN0YXR1cyA9IHN0YXR1
czsKLSAgICB0aGlzLnBhcnNlZE9rID0gcGFyc2VkT2s7Ci0gICAgdGhpcy5pbXBsaWNpdCA9IGlt
cGxpY2l0OwotICAgIHRoaXMudGV4dCA9IHRleHQ7Ci0gICAgdGhpcy5yYW5nZSA9IHJhbmdlOwot
fQotCi0vKioKLSAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9ufSBv
d25lclN0eWxlCi0gKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAqIEBwYXJhbSB7Q1NTQWdlbnQu
Q1NTUHJvcGVydHl9IHBheWxvYWQKLSAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5DU1NQcm9wZXJ0
eX0KLSAqLwotV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCA9IGZ1bmN0aW9u
KG93bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkKQotewotICAgIC8vIFRoZSBmb2xsb3dpbmcgZGVm
YXVsdCBmaWVsZCB2YWx1ZXMgYXJlIHVzZWQgaW4gdGhlIHBheWxvYWQ6Ci0gICAgLy8gcHJpb3Jp
dHk6ICIiCi0gICAgLy8gcGFyc2VkT2s6IHRydWUKLSAgICAvLyBpbXBsaWNpdDogZmFsc2UKLSAg
ICAvLyBzdGF0dXM6ICJzdHlsZSIKLSAgICB2YXIgcmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rvci5D
U1NQcm9wZXJ0eSgKLSAgICAgICAgb3duZXJTdHlsZSwgaW5kZXgsIHBheWxvYWQubmFtZSwgcGF5
bG9hZC52YWx1ZSwgcGF5bG9hZC5wcmlvcml0eSB8fCAiIiwgcGF5bG9hZC5zdGF0dXMgfHwgInN0
eWxlIiwgKCJwYXJzZWRPayIgaW4gcGF5bG9hZCkgPyAhIXBheWxvYWQucGFyc2VkT2sgOiB0cnVl
LCAhIXBheWxvYWQuaW1wbGljaXQsIHBheWxvYWQudGV4dCwgcGF5bG9hZC5yYW5nZSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZSA9
IHsKLSAgICBnZXQgcHJvcGVydHlUZXh0KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnRleHQg
IT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQ7Ci0KLSAgICAgICAg
aWYgKHRoaXMubmFtZSA9PT0gIiIpCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIHJl
dHVybiB0aGlzLm5hbWUgKyAiOiAiICsgdGhpcy52YWx1ZSArICh0aGlzLnByaW9yaXR5ID8gIiAh
IiArIHRoaXMucHJpb3JpdHkgOiAiIikgKyAiOyI7Ci0gICAgfSwKLQotICAgIGdldCBpc0xpdmUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlIHx8IHRoaXMuc3R5bGVCYXNlZDsK
LSAgICB9LAotCi0gICAgZ2V0IGFjdGl2ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5z
dGF0dXMgPT09ICJhY3RpdmUiOwotICAgIH0sCi0KLSAgICBnZXQgc3R5bGVCYXNlZCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09ICJzdHlsZSI7Ci0gICAgfSwKLQotICAg
IGdldCBpbmFjdGl2ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09ICJp
bmFjdGl2ZSI7Ci0gICAgfSwKLQotICAgIGdldCBkaXNhYmxlZCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5zdGF0dXMgPT09ICJkaXNhYmxlZCI7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIFJlcGxhY2VzICJwcm9wZXJ0eU5hbWU6IHByb3BlcnR5VmFsdWUgWyFpbXBvcnRhbnRdOyIg
aW4gdGhlIHN0eWxlc2hlZXQgYnkgYW4gYXJiaXRyYXJ5IHByb3BlcnR5VGV4dC4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRleHQKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IG1ham9yQ2hhbmdlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBvdmVyd3JpdGUKLSAgICAg
KiBAcGFyYW0ge2Z1bmN0aW9uKD9XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbik9fSB1
c2VyQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZXRUZXh0OiBmdW5jdGlvbihwcm9wZXJ0eVRleHQs
IG1ham9yQ2hhbmdlLCBvdmVyd3JpdGUsIHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8q
KgotICAgICAgICAgKiBAcGFyYW0gez9XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbn0g
c3R5bGUKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGVuYWJsZWRDYWxsYmFjayhzdHls
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHVzZXJDYWxsYmFjaykKLSAgICAgICAgICAg
ICAgICB1c2VyQ2FsbGJhY2soc3R5bGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIEBwYXJhbSB7P3N0cmluZ30gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHs/Q1NTQWdl
bnQuQ1NTU3R5bGV9IHN0eWxlUGF5bG9hZAotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
Y2FsbGJhY2soZXJyb3IsIHN0eWxlUGF5bG9hZCkKLSAgICAgICAgewotICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmNzc01vZGVsLl9wZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRlLnBvcCgpOwotICAg
ICAgICAgICAgaWYgKCFlcnJvcikgewotICAgICAgICAgICAgICAgIGlmIChtYWpvckNoYW5nZSkK
LSAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm1hcmtVbmRvYWJsZVN0
YXRlKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gcHJvcGVydHlUZXh0OwotICAgICAg
ICAgICAgICAgIHZhciBzdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBh
cnNlUGF5bG9hZChzdHlsZVBheWxvYWQpOwotICAgICAgICAgICAgICAgIHZhciBuZXdQcm9wZXJ0
eSA9IHN0eWxlLmFsbFByb3BlcnRpZXNbdGhpcy5pbmRleF07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobmV3UHJvcGVydHkgJiYgdGhpcy5kaXNhYmxlZCAmJiAhcHJvcGVydHlUZXh0Lm1hdGNoKC9e
XHMqJC8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BlcnR5LnNldERpc2FibGVkKGZh
bHNlLCBlbmFibGVkQ2FsbGJhY2spOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHVzZXJDYWxsYmFjaykKLSAgICAg
ICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKHN0eWxlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHVzZXJDYWxsYmFjaykKLSAgICAgICAgICAgICAgICAgICAg
dXNlckNhbGxiYWNrKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCF0aGlzLm93bmVyU3R5bGUpCi0gICAgICAgICAgICB0aHJvdyAiTm8gb3duZXJTdHlsZSBm
b3IgcHJvcGVydHkiOwotCi0gICAgICAgIGlmICghdGhpcy5vd25lclN0eWxlLmlkKQotICAgICAg
ICAgICAgdGhyb3cgIk5vIG93bmVyIHN0eWxlIGlkIjsKLQotICAgICAgICAvLyBBbiBpbmRleCBw
YXN0IGFsbCB0aGUgcHJvcGVydGllcyBhZGRzIGEgbmV3IHByb3BlcnR5IHRvIHRoZSBzdHlsZS4K
LSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLl9wZW5kaW5nQ29tbWFuZHNNYWpvclN0YXRl
LnB1c2gobWFqb3JDaGFuZ2UpOwotICAgICAgICBDU1NBZ2VudC5zZXRQcm9wZXJ0eVRleHQodGhp
cy5vd25lclN0eWxlLmlkLCB0aGlzLmluZGV4LCBwcm9wZXJ0eVRleHQsIG92ZXJ3cml0ZSwgY2Fs
bGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuZXdWYWx1ZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWFqb3JDaGFuZ2UKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IG92ZXJ3cml0ZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dl
Ykluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKT19IHVzZXJDYWxsYmFjawotICAgICAqLwot
ICAgIHNldFZhbHVlOiBmdW5jdGlvbihuZXdWYWx1ZSwgbWFqb3JDaGFuZ2UsIG92ZXJ3cml0ZSwg
dXNlckNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLm5hbWUgKyAiOiAi
ICsgbmV3VmFsdWUgKyAodGhpcy5wcmlvcml0eSA/ICIgISIgKyB0aGlzLnByaW9yaXR5IDogIiIp
ICsgIjsiCi0gICAgICAgIHRoaXMuc2V0VGV4dCh0ZXh0LCBtYWpvckNoYW5nZSwgb3ZlcndyaXRl
LCB1c2VyQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IGRpc2FibGVkCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb24pPX0gdXNlckNhbGxiYWNrCi0gICAgICovCi0gICAgc2V0RGlzYWJsZWQ6
IGZ1bmN0aW9uKGRpc2FibGVkLCB1c2VyQ2FsbGJhY2spCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMub3duZXJTdHlsZSAmJiB1c2VyQ2FsbGJhY2spCi0gICAgICAgICAgICB1c2VyQ2FsbGJhY2so
bnVsbCk7Ci0gICAgICAgIGlmIChkaXNhYmxlZCA9PT0gdGhpcy5kaXNhYmxlZCAmJiB1c2VyQ2Fs
bGJhY2spCi0gICAgICAgICAgICB1c2VyQ2FsbGJhY2sodGhpcy5vd25lclN0eWxlKTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBlcnJvcgotICAgICAgICAgKiBA
cGFyYW0ge0NTU0FnZW50LkNTU1N0eWxlfSBzdHlsZVBheWxvYWQKLSAgICAgICAgICovCi0gICAg
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCBzdHlsZVBheWxvYWQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fcGVuZGluZ0NvbW1hbmRzTWFqb3JTdGF0
ZS5wb3AoKTsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIGlmICh1
c2VyQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubWFya1VuZG9hYmxlU3RhdGUoKTsKLSAgICAgICAgICAgIGlmICh1c2Vy
Q2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoc3R5bGVQYXlsb2FkKTsKLSAgICAgICAgICAg
ICAgICB1c2VyQ2FsbGJhY2soc3R5bGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCF0aGlzLm93bmVyU3R5bGUuaWQpCi0gICAgICAgICAgICB0aHJvdyAiTm8gb3du
ZXIgc3R5bGUgaWQiOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fcGVuZGluZ0Nv
bW1hbmRzTWFqb3JTdGF0ZS5wdXNoKGZhbHNlKTsKLSAgICAgICAgQ1NTQWdlbnQudG9nZ2xlUHJv
cGVydHkodGhpcy5vd25lclN0eWxlLmlkLCB0aGlzLmluZGV4LCBkaXNhYmxlZCwgY2FsbGJhY2su
YmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
Zm9yTmFtZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufQotICAgICAq
LwotICAgIHVpTG9jYXRpb246IGZ1bmN0aW9uKGZvck5hbWUpCi0gICAgewotICAgICAgICBpZiAo
IXRoaXMucmFuZ2UgfHwgIXRoaXMub3duZXJTdHlsZSB8fCAhdGhpcy5vd25lclN0eWxlLnBhcmVu
dFJ1bGUgfHwgIXRoaXMub3duZXJTdHlsZS5wYXJlbnRSdWxlLnNvdXJjZVVSTCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2U7Ci0gICAg
ICAgIHZhciBsaW5lID0gZm9yTmFtZSA/IHJhbmdlLnN0YXJ0TGluZSA6IHJhbmdlLmVuZExpbmU7
Ci0gICAgICAgIC8vIEVuZCBvZiByYW5nZSBpcyBleGNsdXNpdmUsIHNvIHN1YnRyYWN0IDEgZnJv
bSB0aGUgZW5kIG9mZnNldC4KLSAgICAgICAgdmFyIGNvbHVtbiA9IGZvck5hbWUgPyByYW5nZS5z
dGFydENvbHVtbiA6IHJhbmdlLmVuZENvbHVtbiAtIDE7Ci0gICAgICAgIHZhciByYXdMb2NhdGlv
biA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24odGhpcy5vd25lclN0eWxlLnBhcmVudFJ1
bGUuc291cmNlVVJMLCBsaW5lLCBjb2x1bW4pOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LmNzc01vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xvY2F0aW9uKTsKLSAgICB9Ci19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge0NTU0FnZW50LkNTU01lZGlhfSBw
YXlsb2FkCi0gKi8KLVdlYkluc3BlY3Rvci5DU1NNZWRpYSA9IGZ1bmN0aW9uKHBheWxvYWQpCi17
Ci0gICAgdGhpcy50ZXh0ID0gcGF5bG9hZC50ZXh0OwotICAgIHRoaXMuc291cmNlID0gcGF5bG9h
ZC5zb3VyY2U7Ci0gICAgdGhpcy5zb3VyY2VVUkwgPSBwYXlsb2FkLnNvdXJjZVVSTCB8fCAiIjsK
LSAgICB0aGlzLnNvdXJjZUxpbmUgPSB0eXBlb2YgcGF5bG9hZC5zb3VyY2VMaW5lID09PSAidW5k
ZWZpbmVkIiB8fCB0aGlzLnNvdXJjZSA9PT0gImxpbmtlZFNoZWV0IiA/IC0xIDogcGF5bG9hZC5z
b3VyY2VMaW5lOwotfQotCi1XZWJJbnNwZWN0b3IuQ1NTTWVkaWEuU291cmNlID0gewotICAgIExJ
TktFRF9TSEVFVDogImxpbmtlZFNoZWV0IiwKLSAgICBJTkxJTkVfU0hFRVQ6ICJpbmxpbmVTaGVl
dCIsCi0gICAgTUVESUFfUlVMRTogIm1lZGlhUnVsZSIsCi0gICAgSU1QT1JUX1JVTEU6ICJpbXBv
cnRSdWxlIgotfTsKLQotLyoqCi0gKiBAcGFyYW0ge0NTU0FnZW50LkNTU01lZGlhfSBwYXlsb2Fk
Ci0gKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuQ1NTTWVkaWF9Ci0gKi8KLVdlYkluc3BlY3Rvci5D
U1NNZWRpYS5wYXJzZVBheWxvYWQgPSBmdW5jdGlvbihwYXlsb2FkKQotewotICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLkNTU01lZGlhKHBheWxvYWQpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7
QXJyYXkuPENTU0FnZW50LkNTU01lZGlhPn0gcGF5bG9hZAotICogQHJldHVybiB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5DU1NNZWRpYT59Ci0gKi8KLVdlYkluc3BlY3Rvci5DU1NNZWRpYS5wYXJzZU1l
ZGlhQXJyYXlQYXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCkKLXsKLSAgICB2YXIgcmVzdWx0ID0g
W107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXlsb2FkLmxlbmd0aDsgKytpKQotICAgICAg
ICByZXN1bHQucHVzaChXZWJJbnNwZWN0b3IuQ1NTTWVkaWEucGFyc2VQYXlsb2FkKHBheWxvYWRb
aV0pKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICog
QHBhcmFtIHtDU1NBZ2VudC5DU1NTdHlsZVNoZWV0Qm9keX0gcGF5bG9hZAotICovCi1XZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVTaGVldCA9IGZ1bmN0aW9uKHBheWxvYWQpCi17Ci0gICAgdGhpcy5pZCA9
IHBheWxvYWQuc3R5bGVTaGVldElkOwotICAgIHRoaXMucnVsZXMgPSBbXTsKLSAgICB0aGlzLnN0
eWxlcyA9IHt9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZC5ydWxlcy5sZW5ndGg7
ICsraSkgewotICAgICAgICB2YXIgcnVsZSA9IFdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNlUGF5
bG9hZChwYXlsb2FkLnJ1bGVzW2ldKTsKLSAgICAgICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpOwot
ICAgICAgICBpZiAocnVsZS5zdHlsZSkKLSAgICAgICAgICAgIHRoaXMuc3R5bGVzW3J1bGUuc3R5
bGUuaWRdID0gcnVsZS5zdHlsZTsKLSAgICB9Ci0gICAgaWYgKCJ0ZXh0IiBpbiBwYXlsb2FkKQot
ICAgICAgICB0aGlzLl90ZXh0ID0gcGF5bG9hZC50ZXh0OwotfQotCi0vKioKLSAqIEBwYXJhbSB7
Q1NTQWdlbnQuU3R5bGVTaGVldElkfSBzdHlsZVNoZWV0SWQKLSAqIEBwYXJhbSB7ZnVuY3Rpb24o
P1dlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0KX0gdXNlckNhbGxiYWNrCi0gKi8KLVdlYkluc3Bl
Y3Rvci5DU1NTdHlsZVNoZWV0LmNyZWF0ZUZvcklkID0gZnVuY3Rpb24oc3R5bGVTaGVldElkLCB1
c2VyQ2FsbGJhY2spCi17Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/c3RyaW5nfSBlcnJvcgot
ICAgICAqIEBwYXJhbSB7Q1NTQWdlbnQuQ1NTU3R5bGVTaGVldEJvZHl9IHN0eWxlU2hlZXRQYXls
b2FkCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHN0eWxlU2hlZXRQYXls
b2FkKQotICAgIHsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgdXNlckNhbGxiYWNr
KG51bGwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1c2VyQ2FsbGJhY2sobmV3IFdlYklu
c3BlY3Rvci5DU1NTdHlsZVNoZWV0KHN0eWxlU2hlZXRQYXlsb2FkKSk7Ci0gICAgfQotICAgIENT
U0FnZW50LmdldFN0eWxlU2hlZXQoc3R5bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsK
LX0KLQotV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlID0gewotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9Ci0gICAgICovCi0gICAgZ2V0VGV4dDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdUZXh0Ci0gICAgICogQHBhcmFtIHti
b29sZWFufSBtYWpvckNoYW5nZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyk9fSB1
c2VyQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZXRUZXh0OiBmdW5jdGlvbihuZXdUZXh0LCBtYWpv
ckNoYW5nZSwgdXNlckNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBw
YXJhbSB7P3N0cmluZ30gZXJyb3IKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxi
YWNrKGVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWVycm9yKQotICAgICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotCi0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuX3BlbmRpbmdDb21tYW5kc01ham9yU3RhdGUu
cG9wKCk7Ci0gICAgICAgICAgICBpZiAodXNlckNhbGxiYWNrKQotICAgICAgICAgICAgICAgIHVz
ZXJDYWxsYmFjayhlcnJvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3IuY3Nz
TW9kZWwuX3BlbmRpbmdDb21tYW5kc01ham9yU3RhdGUucHVzaChtYWpvckNoYW5nZSk7Ci0gICAg
ICAgIENTU0FnZW50LnNldFN0eWxlU2hlZXRUZXh0KHRoaXMuaWQsIG5ld1RleHQsIGNhbGxiYWNr
LmJpbmQodGhpcykpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlTW9kZWxSZXNvdXJjZUJpbmRpbmcgPSBmdW5jdGlvbigpCi17Ci0g
ICAgdGhpcy5fcmVzZXQoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWxSZXNvdXJj
ZUJpbmRpbmcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlJlc291cmNlfSByZXNvdXJjZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP0NTU0FnZW50
LlN0eWxlU2hlZXRJZCl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdFN0eWxlU2hlZXRJ
ZEZvclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSwgY2FsbGJhY2spCi0gICAgewotICAgICAg
ICBmdW5jdGlvbiBpbm5lckNhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgY2FsbGJh
Y2sodGhpcy5fc3R5bGVTaGVldElkRm9yUmVzb3VyY2UocmVzb3VyY2UpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuX3N0eWxlU2hlZXRJZEZvclJlc291cmNlKHJlc291
cmNlKSkKLSAgICAgICAgICAgIGlubmVyQ2FsbGJhY2suY2FsbCh0aGlzKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpcy5fbG9hZFN0eWxlU2hlZXRIZWFkZXJzKGlubmVyQ2FsbGJhY2su
YmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q1NTQWdlbnQu
U3R5bGVTaGVldElkfSBzdHlsZVNoZWV0SWQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJp
bmcpfSBjYWxsYmFjawotICAgICAqLwotICAgIHJlcXVlc3RSZXNvdXJjZVVSTEZvclN0eWxlU2hl
ZXRJZDogZnVuY3Rpb24oc3R5bGVTaGVldElkLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGZ1
bmN0aW9uIGlubmVyQ2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaGVhZGVy
ID0gdGhpcy5fc3R5bGVTaGVldElkVG9IZWFkZXJbc3R5bGVTaGVldElkXTsKLSAgICAgICAgICAg
IGlmICghaGVhZGVyKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgZnJhbWUg
PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuZnJhbWVGb3JJZChoZWFkZXIuZnJhbWVJ
ZCk7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2so
bnVsbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2YXIgc3R5bGVTaGVldFVSTCA9IGhlYWRlci5vcmlnaW4gPT09ICJpbnNwZWN0b3IiID8g
dGhpcy5fdmlhSW5zcGVjdG9yUmVzb3VyY2VVUkwoaGVhZGVyLnNvdXJjZVVSTCkgOiBoZWFkZXIu
c291cmNlVVJMOwotICAgICAgICAgICAgY2FsbGJhY2soc3R5bGVTaGVldFVSTCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLl9zdHlsZVNoZWV0SWRUb0hlYWRlcltzdHls
ZVNoZWV0SWRdKQotICAgICAgICAgICAgaW5uZXJDYWxsYmFjay5jYWxsKHRoaXMpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9sb2FkU3R5bGVTaGVldEhlYWRlcnMoaW5uZXJDYWxs
YmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuUmVzb3VyY2V9IHJlc291cmNlCi0gICAgICogQHJldHVybiB7Q1NTQWdlbnQuU3R5
bGVTaGVldElkfQotICAgICAqLwotICAgIF9zdHlsZVNoZWV0SWRGb3JSZXNvdXJjZTogZnVuY3Rp
b24ocmVzb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWVBbmRVUkxUb1N0
eWxlU2hlZXRJZFtyZXNvdXJjZS5mcmFtZUlkICsgIjoiICsgcmVzb3VyY2UudXJsXTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nKX0gY2FsbGJhY2sK
LSAgICAgKi8KLSAgICBfbG9hZFN0eWxlU2hlZXRIZWFkZXJzOiBmdW5jdGlvbihjYWxsYmFjaykK
LSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGVycm9yCi0g
ICAgICAgICAqIEBwYXJhbSB7QXJyYXkuPENTU0FnZW50LkNTU1N0eWxlU2hlZXRIZWFkZXI+fSBp
bmZvcwotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZGlkR2V0QWxsU3R5bGVTaGVldHMo
ZXJyb3IsIGluZm9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZm9zLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGluZm8gPSBpbmZvc1tpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoaW5mby5vcmlnaW4gPT09ICJpbnNwZWN0b3IiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2dldE9yQ3JlYXRlSW5zcGVjdG9yUmVzb3VyY2UoaW5mbyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB0aGlzLl9mcmFtZUFuZFVSTFRvU3R5bGVTaGVldElkW2luZm8uZnJhbWVJZCArICI6IiArIGlu
Zm8uc291cmNlVVJMXSA9IGluZm8uc3R5bGVTaGVldElkOwotICAgICAgICAgICAgICAgIHRoaXMu
X3N0eWxlU2hlZXRJZFRvSGVhZGVyW2luZm8uc3R5bGVTaGVldElkXSA9IGluZm87Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYWxsYmFjayhudWxsKTsKLSAgICAgICAgfQotICAgICAgICBD
U1NBZ2VudC5nZXRBbGxTdHlsZVNoZWV0cyhkaWRHZXRBbGxTdHlsZVNoZWV0cy5iaW5kKHRoaXMp
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDU1NBZ2VudC5TdHlsZVNoZWV0
SWR9IHN0eWxlU2hlZXRJZAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5S
ZXNvdXJjZSl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgX3JlcXVlc3RWaWFJbnNwZWN0b3JSZXNv
dXJjZTogZnVuY3Rpb24oc3R5bGVTaGVldElkLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZh
ciBoZWFkZXIgPSB0aGlzLl9zdHlsZVNoZWV0SWRUb0hlYWRlcltzdHlsZVNoZWV0SWRdOwotICAg
ICAgICBpZiAoaGVhZGVyKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9nZXRPckNyZWF0
ZUluc3BlY3RvclJlc291cmNlKGhlYWRlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaGVhZGVyc0xvYWRlZCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZhciBoZWFkZXIgPSB0aGlzLl9zdHlsZVNoZWV0SWRUb0hlYWRlcltzdHlsZVNoZWV0
SWRdOwotICAgICAgICAgICAgaWYgKGhlYWRlcikKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh0
aGlzLl9nZXRPckNyZWF0ZUluc3BlY3RvclJlc291cmNlKGhlYWRlcikpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMuX2xvYWRTdHlsZVNoZWV0SGVhZGVycyhoZWFkZXJzTG9hZGVkLmJpbmQodGhpcykpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NTU0FnZW50LkNTU1N0eWxlU2hlZXRI
ZWFkZXJ9IGhlYWRlcgotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuUmVzb3VyY2V9Ci0g
ICAgICovCi0gICAgX2dldE9yQ3JlYXRlSW5zcGVjdG9yUmVzb3VyY2U6IGZ1bmN0aW9uKGhlYWRl
cikKLSAgICB7Ci0gICAgICAgIHZhciBmcmFtZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVN
b2RlbC5mcmFtZUZvcklkKGhlYWRlci5mcmFtZUlkKTsKLSAgICAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciB2aWFJbnNwZWN0b3JVUkwgPSB0
aGlzLl92aWFJbnNwZWN0b3JSZXNvdXJjZVVSTChoZWFkZXIuc291cmNlVVJMKTsgICAgCi0gICAg
ICAgIHZhciBpbnNwZWN0b3JSZXNvdXJjZSA9IGZyYW1lLnJlc291cmNlRm9yVVJMKHZpYUluc3Bl
Y3RvclVSTCk7Ci0gICAgICAgIGlmIChpbnNwZWN0b3JSZXNvdXJjZSkKLSAgICAgICAgICAgIHJl
dHVybiBpbnNwZWN0b3JSZXNvdXJjZTsKLQotICAgICAgICB2YXIgcmVzb3VyY2UgPSBmcmFtZS5y
ZXNvdXJjZUZvclVSTChoZWFkZXIuc291cmNlVVJMKTsKLSAgICAgICAgaWYgKCFyZXNvdXJjZSkK
LSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHRoaXMuX2ZyYW1lQW5kVVJMVG9T
dHlsZVNoZWV0SWRbaGVhZGVyLmZyYW1lSWQgKyAiOiIgKyB2aWFJbnNwZWN0b3JVUkxdID0gaGVh
ZGVyLnN0eWxlU2hlZXRJZDsKLSAgICAgICAgdGhpcy5fc3R5bGVTaGVldElkVG9IZWFkZXJbaGVh
ZGVyLnN0eWxlU2hlZXRJZF0gPSBoZWFkZXI7Ci0gICAgICAgIGluc3BlY3RvclJlc291cmNlID0g
bmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZShudWxsLCB2aWFJbnNwZWN0b3JVUkwsIHJlc291cmNl
LmRvY3VtZW50VVJMLCByZXNvdXJjZS5mcmFtZUlkLCByZXNvdXJjZS5sb2FkZXJJZCwgV2ViSW5z
cGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldCwgInRleHQvY3NzIiwgdHJ1ZSk7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmcsIGJvb2xlYW4sIHN0
cmluZyl9IGNhbGxiYWNrCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBvdmVycmlkZVJl
cXVlc3RDb250ZW50KGNhbGxiYWNrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBj
YWxsYmFja1dyYXBwZXIoZXJyb3IsIGNvbnRlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY2FsbGJhY2soZXJyb3IgPyAiIiA6IGNvbnRlbnQsIGZhbHNlLCAidGV4dC9jc3MiKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENTU0FnZW50LmdldFN0eWxlU2hlZXRUZXh0KGhl
YWRlci5zdHlsZVNoZWV0SWQsIGNhbGxiYWNrV3JhcHBlcik7Ci0gICAgICAgIH0KLSAgICAgICAg
aW5zcGVjdG9yUmVzb3VyY2UucmVxdWVzdENvbnRlbnQgPSBvdmVycmlkZVJlcXVlc3RDb250ZW50
OwotICAgICAgICBmcmFtZS5hZGRSZXNvdXJjZShpbnNwZWN0b3JSZXNvdXJjZSk7Ci0gICAgICAg
IHJldHVybiBpbnNwZWN0b3JSZXNvdXJjZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGRvY3VtZW50VVJMCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAq
LwotICAgIF92aWFJbnNwZWN0b3JSZXNvdXJjZVVSTDogZnVuY3Rpb24oZG9jdW1lbnRVUkwpCi0g
ICAgewotICAgICAgICB2YXIgcGFyc2VkVVJMID0gbmV3IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwo
ZG9jdW1lbnRVUkwpOwotICAgICAgICB2YXIgZmFrZVVSTCA9ICJpbnNwZWN0b3I6Ly8iICsgcGFy
c2VkVVJMLmhvc3QgKyBwYXJzZWRVUkwuZm9sZGVyUGF0aENvbXBvbmVudHM7Ci0gICAgICAgIGlm
ICghZmFrZVVSTC5lbmRzV2l0aCgiLyIpKQotICAgICAgICAgICAgZmFrZVVSTCArPSAiLyI7Ci0g
ICAgICAgIGZha2VVUkwgKz0gImluc3BlY3Rvci1zdHlsZXNoZWV0IjsKLSAgICAgICAgcmV0dXJu
IGZha2VVUkw7Ci0gICAgfSwKLQotICAgIF9yZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgLy8gTWFpbiBmcmFtZSBuYXZpZ2F0aW9uIC0gY2xlYXIgaGlzdG9yeS4KLSAgICAgICAgdGhp
cy5fZnJhbWVBbmRVUkxUb1N0eWxlU2hlZXRJZCA9IHt9OwotICAgICAgICB0aGlzLl9zdHlsZVNo
ZWV0SWRUb0hlYWRlciA9IHt9OwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBpbXBsZW1lbnRzIHtDU1NBZ2VudC5EaXNwYXRjaGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVNb2RlbH0gY3NzTW9kZWwKLSAqLwotV2ViSW5zcGVjdG9yLkNTU0Rpc3BhdGNo
ZXIgPSBmdW5jdGlvbihjc3NNb2RlbCkKLXsKLSAgICB0aGlzLl9jc3NNb2RlbCA9IGNzc01vZGVs
OwotfQotCi1XZWJJbnNwZWN0b3IuQ1NTRGlzcGF0Y2hlci5wcm90b3R5cGUgPSB7Ci0gICAgbWVk
aWFRdWVyeVJlc3VsdENoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Nz
c01vZGVsLm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7Q1NTQWdlbnQuU3R5bGVTaGVldElkfSBzdHlsZVNoZWV0SWQKLSAgICAgKi8K
LSAgICBzdHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oc3R5bGVTaGVldElkKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fY3NzTW9kZWwuX2ZpcmVTdHlsZVNoZWV0Q2hhbmdlZChzdHlsZVNoZWV0SWQp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NTU0FnZW50Lk5hbWVkRmxvd30g
bmFtZWRGbG93UGF5bG9hZAotICAgICAqLwotICAgIG5hbWVkRmxvd0NyZWF0ZWQ6IGZ1bmN0aW9u
KG5hbWVkRmxvd1BheWxvYWQpCi0gICAgewotICAgICAgICB0aGlzLl9jc3NNb2RlbC5fbmFtZWRG
bG93Q3JlYXRlZChuYW1lZEZsb3dQYXlsb2FkKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IGRvY3VtZW50Tm9kZUlkCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IGZsb3dOYW1lCi0gICAgICovCi0gICAgbmFtZWRGbG93UmVtb3ZlZDogZnVuY3Rpb24o
ZG9jdW1lbnROb2RlSWQsIGZsb3dOYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3NzTW9kZWwu
X25hbWVkRmxvd1JlbW92ZWQoZG9jdW1lbnROb2RlSWQsIGZsb3dOYW1lKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtDU1NBZ2VudC5OYW1lZEZsb3d9IG5hbWVkRmxvd1BheWxv
YWQKLSAgICAgKi8KLSAgICByZWdpb25MYXlvdXRVcGRhdGVkOiBmdW5jdGlvbihuYW1lZEZsb3dQ
YXlsb2FkKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3NzTW9kZWwuX3JlZ2lvbkxheW91dFVwZGF0
ZWQobmFtZWRGbG93UGF5bG9hZCk7Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge0NTU0FnZW50Lk5hbWVkRmxvd30gbmFtZWRGbG93UGF5bG9hZAotICAgICAqLwotICAgIHJl
Z2lvbk92ZXJzZXRDaGFuZ2VkOiBmdW5jdGlvbihuYW1lZEZsb3dQYXlsb2FkKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fY3NzTW9kZWwuX3JlZ2lvbk92ZXJzZXRDaGFuZ2VkKG5hbWVkRmxvd1BheWxv
YWQpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7Q1NTQWdl
bnQuTmFtZWRGbG93fSBwYXlsb2FkCi0gKi8KLVdlYkluc3BlY3Rvci5OYW1lZEZsb3cgPSBmdW5j
dGlvbihwYXlsb2FkKQotewotICAgIHRoaXMuZG9jdW1lbnROb2RlSWQgPSBwYXlsb2FkLmRvY3Vt
ZW50Tm9kZUlkOwotICAgIHRoaXMubmFtZSA9IHBheWxvYWQubmFtZTsKLSAgICB0aGlzLm92ZXJz
ZXQgPSBwYXlsb2FkLm92ZXJzZXQ7Ci0gICAgdGhpcy5jb250ZW50ID0gcGF5bG9hZC5jb250ZW50
OwotICAgIHRoaXMucmVnaW9ucyA9IHBheWxvYWQucmVnaW9uczsKLX0KLQotLyoqCi0gKiBAcGFy
YW0ge0NTU0FnZW50Lk5hbWVkRmxvd30gcGF5bG9hZAotICogQHJldHVybiB7V2ViSW5zcGVjdG9y
Lk5hbWVkRmxvd30KLSAqLwotV2ViSW5zcGVjdG9yLk5hbWVkRmxvdy5wYXJzZVBheWxvYWQgPSBm
dW5jdGlvbihwYXlsb2FkKQotewotICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLk5hbWVkRmxv
dyhwYXlsb2FkKTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7QXJyYXku
PENTU0FnZW50Lk5hbWVkRmxvdz59IHBheWxvYWQKLSAqLwotV2ViSW5zcGVjdG9yLk5hbWVkRmxv
d0NvbGxlY3Rpb24gPSBmdW5jdGlvbihwYXlsb2FkKQotewotICAgIC8qKiBAdHlwZSB7T2JqZWN0
LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5OYW1lZEZsb3c+fSAqLwotICAgIHRoaXMubmFtZWRGbG93
TWFwID0ge307Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBheWxvYWQubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgdmFyIG5hbWVkRmxvdyA9IFdlYkluc3BlY3Rvci5OYW1lZEZsb3cucGFyc2VQ
YXlsb2FkKHBheWxvYWRbaV0pOwotICAgICAgICB0aGlzLm5hbWVkRmxvd01hcFtuYW1lZEZsb3cu
bmFtZV0gPSBuYW1lZEZsb3c7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuTmFtZWRGbG93Q29s
bGVjdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuTmFtZWRGbG93fSBuYW1lZEZsb3cKLSAgICAgKi8KLSAgICBfYXBwZW5kTmFtZWRGbG93OiBm
dW5jdGlvbihuYW1lZEZsb3cpCi0gICAgewotICAgICAgICB0aGlzLm5hbWVkRmxvd01hcFtuYW1l
ZEZsb3cubmFtZV0gPSBuYW1lZEZsb3c7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBmbG93TmFtZQotICAgICAqLwotICAgIF9yZW1vdmVOYW1lZEZsb3c6IGZ1bmN0
aW9uKGZsb3dOYW1lKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMubmFtZWRGbG93TWFwW2Zs
b3dOYW1lXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZsb3dO
YW1lCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLk5hbWVkRmxvd30KLSAgICAgKi8KLSAg
ICBmbG93QnlOYW1lOiBmdW5jdGlvbihmbG93TmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBuYW1l
ZEZsb3cgPSB0aGlzLm5hbWVkRmxvd01hcFtmbG93TmFtZV07Ci0KLSAgICAgICAgaWYgKCFuYW1l
ZEZsb3cpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIG5hbWVkRmxv
dzsKLSAgICB9Ci19Ci0vKioKLSAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbH0K
LSAqLwotV2ViSW5zcGVjdG9yLmNzc01vZGVsID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2EwZTQwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2Vi
SW5zcGVjdG9yLlNpZGViYXJQYW5lfQotICovCi1XZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJh
clBhbmUgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwo
dGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDYWxsIFN0YWNrIikpOwotICAgIHRoaXMuX21v
ZGVsID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWw7Ci0KLSAgICB0aGlzLmJvZHlFbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9rZXlEb3duLmJpbmQodGhpcyksIHRy
dWUpOwotICAgIHRoaXMuYm9keUVsZW1lbnQudGFiSW5kZXggPSAwOwotfQotCi1XZWJJbnNwZWN0
b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUucHJvdG90eXBlID0gewotICAgIHVwZGF0ZTogZnVuY3Rp
b24oY2FsbEZyYW1lcykKLSAgICB7Ci0gICAgICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hp
bGRyZW4oKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXR1c01lc3NhZ2VFbGVtZW50OwotICAg
ICAgICB0aGlzLnBsYWNhcmRzID0gW107Ci0KLSAgICAgICAgaWYgKCFjYWxsRnJhbWVzKSB7Ci0g
ICAgICAgICAgICB2YXIgaW5mb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICAgICAgICAgIGluZm9FbGVtZW50LmNsYXNzTmFtZSA9ICJpbmZvIjsKLSAgICAgICAg
ICAgIGluZm9FbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOb3Qg
UGF1c2VkIik7Ci0gICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKGluZm9F
bGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY2FsbEZyYW1lcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFy
IGNhbGxGcmFtZSA9IGNhbGxGcmFtZXNbaV07Ci0gICAgICAgICAgICB2YXIgcGxhY2FyZCA9IG5l
dyBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUuUGxhY2FyZChjYWxsRnJhbWUsIHRo
aXMpOwotICAgICAgICAgICAgcGxhY2FyZC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IiwgdGhpcy5fcGxhY2FyZFNlbGVjdGVkLmJpbmQodGhpcywgcGxhY2FyZCksIGZhbHNlKTsKLSAg
ICAgICAgICAgIHRoaXMucGxhY2FyZHMucHVzaChwbGFjYXJkKTsKLSAgICAgICAgICAgIHRoaXMu
Ym9keUVsZW1lbnQuYXBwZW5kQ2hpbGQocGxhY2FyZC5lbGVtZW50KTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBzZXRTZWxlY3RlZENhbGxGcmFtZTogZnVuY3Rpb24oeCkKLSAgICB7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wbGFjYXJkcy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIHBsYWNhcmQgPSB0aGlzLnBsYWNhcmRzW2ldOwotICAgICAgICAgICAgcGxh
Y2FyZC5zZWxlY3RlZCA9IChwbGFjYXJkLl9jYWxsRnJhbWUgPT09IHgpOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX3NlbGVjdE5leHRDYWxsRnJhbWVPblN0YWNr
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlbGVj
dGVkQ2FsbEZyYW1lSW5kZXgoKTsKLSAgICAgICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHRoaXMuX3NlbGVjdGVkUGxhY2FyZEJ5SW5kZXgoaW5k
ZXggKyAxKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICov
Ci0gICAgX3NlbGVjdFByZXZpb3VzQ2FsbEZyYW1lT25TdGFjazogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWxlY3RlZENhbGxGcmFtZUluZGV4KCk7
Ci0gICAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB0aGlzLl9zZWxlY3RlZFBsYWNhcmRCeUluZGV4KGluZGV4IC0gMSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5k
ZXgKLSAgICAgKi8KLSAgICBfc2VsZWN0ZWRQbGFjYXJkQnlJbmRleDogZnVuY3Rpb24oaW5kZXgp
Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGxhY2FyZHMu
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9wbGFjYXJkU2VsZWN0
ZWQodGhpcy5wbGFjYXJkc1tpbmRleF0pCi0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBfc2VsZWN0ZWRDYWxsRnJhbWVJbmRleDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tb2RlbC5zZWxlY3RlZENhbGxGcmFtZSgp
KQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMucGxhY2FyZHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBwbGFjYXJkID0gdGhp
cy5wbGFjYXJkc1tpXTsKLSAgICAgICAgICAgIGlmIChwbGFjYXJkLl9jYWxsRnJhbWUgPT09IHRo
aXMuX21vZGVsLnNlbGVjdGVkQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0sCi0KLSAgICBfcGxhY2FyZFNl
bGVjdGVkOiBmdW5jdGlvbihwbGFjYXJkKQotICAgIHsKLSAgICAgICAgdGhpcy5fbW9kZWwuc2V0
U2VsZWN0ZWRDYWxsRnJhbWUocGxhY2FyZC5fY2FsbEZyYW1lKTsKLSAgICB9LAotCi0gICAgX2Nv
cHlTdGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgdGV4dCA9ICIiOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGxhY2FyZHMubGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICB0ZXh0ICs9IHRoaXMucGxhY2FyZHNbaV0udGl0bGUgKyAiICgiICsgdGhpcy5w
bGFjYXJkc1tpXS5zdWJ0aXRsZSArICIpXG4iOwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3QuY29weVRleHQodGV4dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oIUFycmF5LjwhV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuRGVzY3JpcHRvcj4s
IGZ1bmN0aW9uKEV2ZW50PSk6Ym9vbGVhbil9IHJlZ2lzdGVyU2hvcnRjdXREZWxlZ2F0ZQotICAg
ICAqLwotICAgIHJlZ2lzdGVyU2hvcnRjdXRzOiBmdW5jdGlvbihyZWdpc3RlclNob3J0Y3V0RGVs
ZWdhdGUpCi0gICAgewotICAgICAgICByZWdpc3RlclNob3J0Y3V0RGVsZWdhdGUoV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLk5leHRDYWxsRnJhbWUsIHRo
aXMuX3NlbGVjdE5leHRDYWxsRnJhbWVPblN0YWNrLmJpbmQodGhpcykpOwotICAgICAgICByZWdp
c3RlclNob3J0Y3V0RGVsZWdhdGUoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbERlc2NyaXB0b3Iu
U2hvcnRjdXRLZXlzLlByZXZDYWxsRnJhbWUsIHRoaXMuX3NlbGVjdFByZXZpb3VzQ2FsbEZyYW1l
T25TdGFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgc2V0U3RhdHVzOiBmdW5jdGlvbihz
dGF0dXMpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3N0YXR1c01lc3NhZ2VFbGVtZW50KSB7
Ci0gICAgICAgICAgICB0aGlzLl9zdGF0dXNNZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgdGhpcy5fc3RhdHVzTWVzc2FnZUVsZW1lbnQu
Y2xhc3NOYW1lID0gImluZm8iOwotICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLl9zdGF0dXNNZXNzYWdlRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHR5cGVvZiBzdGF0dXMgPT09ICJzdHJpbmciKQotICAgICAgICAgICAgdGhpcy5fc3RhdHVzTWVz
c2FnZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdGF0dXM7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgdGhpcy5fc3RhdHVzTWVzc2FnZUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgIHRoaXMuX3N0YXR1c01lc3NhZ2VFbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1cyk7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgX2tleURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRh
S2V5IHx8IGV2ZW50LmN0cmxLZXkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVcCIpIHsKLSAgICAgICAgICAgIHRoaXMuX3NlbGVj
dFByZXZpb3VzQ2FsbEZyYW1lT25TdGFjaygpOwotICAgICAgICAgICAgZXZlbnQuY29uc3VtZSgp
OwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIikgewot
ICAgICAgICAgICAgdGhpcy5fc2VsZWN0TmV4dENhbGxGcmFtZU9uU3RhY2soKTsKLSAgICAgICAg
ICAgIGV2ZW50LmNvbnN1bWUoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUGxhY2FyZH0KLSAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuQ2FsbEZyYW1lfSBjYWxsRnJhbWUKLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkNhbGxTdGFja1NpZGViYXJQYW5lfSBwYW5lCi0gKi8KLVdlYkluc3BlY3Rv
ci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5QbGFjYXJkID0gZnVuY3Rpb24oY2FsbEZyYW1lLCBwYW5l
KQotewotICAgIFdlYkluc3BlY3Rvci5QbGFjYXJkLmNhbGwodGhpcywgY2FsbEZyYW1lLmZ1bmN0
aW9uTmFtZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIiks
ICIiKTsKLSAgICBjYWxsRnJhbWUuY3JlYXRlTGl2ZUxvY2F0aW9uKHRoaXMuX3VwZGF0ZS5iaW5k
KHRoaXMpKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUi
LCB0aGlzLl9wbGFjYXJkQ29udGV4dE1lbnUuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgdGhpcy5f
Y2FsbEZyYW1lID0gY2FsbEZyYW1lOwotICAgIHRoaXMuX3BhbmUgPSBwYW5lOwotfQotCi1XZWJJ
bnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUuUGxhY2FyZC5wcm90b3R5cGUgPSB7Ci0gICAg
X3VwZGF0ZTogZnVuY3Rpb24odWlMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMuc3VidGl0
bGUgPSBXZWJJbnNwZWN0b3IuZm9ybWF0TGlua1RleHQodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUu
b3JpZ2luVVJMKCksIHVpTG9jYXRpb24ubGluZU51bWJlcikuY2VudGVyRWxsaXBzaXplZFRvTGVu
Z3RoKDEwMCk7Ci0gICAgfSwKLQotICAgIF9wbGFjYXJkQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5D
b250ZXh0TWVudShldmVudCk7Ci0KLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1v
ZGVsLmNhblNldFNjcmlwdFNvdXJjZSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVu
dVRpdGxlcygpID8gIlJlc3RhcnQgZnJhbWUiIDogIlJlc3RhcnQgRnJhbWUiKSwgdGhpcy5fcmVz
dGFydEZyYW1lLmJpbmQodGhpcykpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2Vw
YXJhdG9yKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/
ICJDb3B5IHN0YWNrIHRyYWNlIiA6ICJDb3B5IFN0YWNrIFRyYWNlIiksIHRoaXMuX3BhbmUuX2Nv
cHlTdGFja1RyYWNlLmJpbmQodGhpcy5fcGFuZSkpOwotCi0gICAgICAgIGNvbnRleHRNZW51LnNo
b3coKTsKLSAgICB9LAotCi0gICAgX3Jlc3RhcnRGcmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fY2FsbEZyYW1lLnJlc3RhcnQodW5kZWZpbmVkKTsKLSAgICB9LAotCi0gICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuUGxhY2FyZC5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3Lmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGNiOGQ1Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw5NDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICovCi1XZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZp
ZXcgPSBmdW5jdGlvbihwcm9maWxlKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhp
cyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJjYW52YXNQcm9maWxlci5jc3MiKTsK
LSAgICB0aGlzLl9wcm9maWxlID0gcHJvZmlsZTsKLSAgICB0aGlzLl90cmFjZUxvZ0lkID0gcHJv
ZmlsZS50cmFjZUxvZ0lkKCk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNhbnZh
cy1wcm9maWxlLXZpZXciKTsKLQotICAgIHRoaXMuX2xpbmtpZmllciA9IG5ldyBXZWJJbnNwZWN0
b3IuTGlua2lmaWVyKCk7Ci0gICAgdGhpcy5fc3BsaXRWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5T
cGxpdFZpZXcoZmFsc2UsICJjYW52YXNQcm9maWxlVmlld1NwbGl0TG9jYXRpb24iLCAzMDApOwot
Ci0gICAgdmFyIHJlcGxheUltYWdlQ29udGFpbmVyID0gdGhpcy5fc3BsaXRWaWV3LmZpcnN0RWxl
bWVudCgpOwotICAgIHJlcGxheUltYWdlQ29udGFpbmVyLmlkID0gImNhbnZhcy1yZXBsYXktaW1h
Z2UtY29udGFpbmVyIjsKLSAgICB0aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQgPSByZXBsYXlJbWFn
ZUNvbnRhaW5lci5jcmVhdGVDaGlsZCgiaW1hZ2UiLCAiY2FudmFzLXJlcGxheS1pbWFnZSIpOwot
ICAgIHRoaXMuX2RlYnVnSW5mb0VsZW1lbnQgPSByZXBsYXlJbWFnZUNvbnRhaW5lci5jcmVhdGVD
aGlsZCgiZGl2IiwgImNhbnZhcy1kZWJ1Zy1pbmZvIGhpZGRlbiIpOwotICAgIHRoaXMuX3NwaW5u
ZXJJY29uID0gcmVwbGF5SW1hZ2VDb250YWluZXIuY3JlYXRlQ2hpbGQoImltZyIsICJjYW52YXMt
c3Bpbm5lci1pY29uIGhpZGRlbiIpOwotCi0gICAgdmFyIHJlcGxheUluZm9Db250YWluZXIgPSB0
aGlzLl9zcGxpdFZpZXcuc2Vjb25kRWxlbWVudCgpOwotICAgIHZhciBjb250cm9sc0NvbnRhaW5l
ciA9IHJlcGxheUluZm9Db250YWluZXIuY3JlYXRlQ2hpbGQoImRpdiIsICJzdGF0dXMtYmFyIik7
Ci0gICAgdmFyIGxvZ0dyaWRDb250YWluZXIgPSByZXBsYXlJbmZvQ29udGFpbmVyLmNyZWF0ZUNo
aWxkKCJkaXYiLCAiY2FudmFzLXJlcGxheS1sb2ciKTsKLQotICAgIHRoaXMuX2NyZWF0ZUNvbnRy
b2xCdXR0b24oY29udHJvbHNDb250YWluZXIsICJjYW52YXMtcmVwbGF5LWZpcnN0LXN0ZXAiLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZpcnN0IGNhbGwuIiksIHRoaXMuX29uUmVwbGF5Rmlyc3RT
dGVwQ2xpY2suYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fY3JlYXRlQ29udHJvbEJ1dHRvbihjb250
cm9sc0NvbnRhaW5lciwgImNhbnZhcy1yZXBsYXktcHJldi1zdGVwIiwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJQcmV2aW91cyBjYWxsLiIpLCB0aGlzLl9vblJlcGxheVN0ZXBDbGljay5iaW5kKHRo
aXMsIGZhbHNlKSk7Ci0gICAgdGhpcy5fY3JlYXRlQ29udHJvbEJ1dHRvbihjb250cm9sc0NvbnRh
aW5lciwgImNhbnZhcy1yZXBsYXktbmV4dC1zdGVwIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJO
ZXh0IGNhbGwuIiksIHRoaXMuX29uUmVwbGF5U3RlcENsaWNrLmJpbmQodGhpcywgdHJ1ZSkpOwot
ICAgIHRoaXMuX2NyZWF0ZUNvbnRyb2xCdXR0b24oY29udHJvbHNDb250YWluZXIsICJjYW52YXMt
cmVwbGF5LXByZXYtZHJhdyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJldmlvdXMgZHJhd2lu
ZyBjYWxsLiIpLCB0aGlzLl9vblJlcGxheURyYXdpbmdDYWxsQ2xpY2suYmluZCh0aGlzLCBmYWxz
ZSkpOwotICAgIHRoaXMuX2NyZWF0ZUNvbnRyb2xCdXR0b24oY29udHJvbHNDb250YWluZXIsICJj
YW52YXMtcmVwbGF5LW5leHQtZHJhdyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTmV4dCBkcmF3
aW5nIGNhbGwuIiksIHRoaXMuX29uUmVwbGF5RHJhd2luZ0NhbGxDbGljay5iaW5kKHRoaXMsIHRy
dWUpKTsKLSAgICB0aGlzLl9jcmVhdGVDb250cm9sQnV0dG9uKGNvbnRyb2xzQ29udGFpbmVyLCAi
Y2FudmFzLXJlcGxheS1sYXN0LXN0ZXAiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxhc3QgY2Fs
bC4iKSwgdGhpcy5fb25SZXBsYXlMYXN0U3RlcENsaWNrLmJpbmQodGhpcykpOwotCi0gICAgdGhp
cy5fcmVwbGF5Q29udGV4dFNlbGVjdG9yID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJDb21i
b0JveCh0aGlzLl9vblJlcGxheUNvbnRleHRDaGFuZ2VkLmJpbmQodGhpcykpOwotICAgIHRoaXMu
X3JlcGxheUNvbnRleHRTZWxlY3Rvci5jcmVhdGVPcHRpb24oIjxzY3JlZW5zaG90IGF1dG8+Iiwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IHNjcmVlbnNob3Qgb2YgdGhlIGxhc3QgcmVwbGF5
ZWQgcmVzb3VyY2UuIiksICIiKTsKLSAgICBjb250cm9sc0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0
aGlzLl9yZXBsYXlDb250ZXh0U2VsZWN0b3IuZWxlbWVudCk7Ci0KLSAgICAvKiogQHR5cGUgeyFP
YmplY3QuPHN0cmluZywgYm9vbGVhbj59ICovCi0gICAgdGhpcy5fcmVwbGF5Q29udGV4dHMgPSB7
fTsKLSAgICAvKiogQHR5cGUgeyFPYmplY3QuPHN0cmluZywgQ2FudmFzQWdlbnQuUmVzb3VyY2VT
dGF0ZT59ICovCi0gICAgdGhpcy5fY3VycmVudFJlc291cmNlU3RhdGVzID0ge307Ci0KLSAgICB2
YXIgY29sdW1ucyA9IFsKLSAgICAgICAge3RpdGxlOiAiIyIsIHNvcnRhYmxlOiB0cnVlLCB3aWR0
aDogIjUlIn0sCi0gICAgICAgIHt0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDYWxsIiks
IHNvcnRhYmxlOiB0cnVlLCB3aWR0aDogIjc1JSIsIGRpc2Nsb3N1cmU6IHRydWV9LAotICAgICAg
ICB7dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9jYXRpb24iKSwgc29ydGFibGU6IHRy
dWUsIHdpZHRoOiAiMjAlIn0KLSAgICBdOwotCi0gICAgdGhpcy5fbG9nR3JpZCA9IG5ldyBXZWJJ
bnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7Ci0gICAgdGhpcy5fbG9nR3JpZC5lbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoImZpbGwiKTsKLSAgICB0aGlzLl9sb2dHcmlkLnNob3cobG9nR3JpZENvbnRh
aW5lcik7Ci0gICAgdGhpcy5fbG9nR3JpZC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
YXRhR3JpZC5FdmVudHMuU2VsZWN0ZWROb2RlLCB0aGlzLl9yZXBsYXlUcmFjZUxvZy5iaW5kKHRo
aXMpKTsKLQotICAgIHRoaXMuX3NwbGl0Vmlldy5zaG93KHRoaXMuZWxlbWVudCk7Ci0gICAgdGhp
cy5fcmVxdWVzdFRyYWNlTG9nKDApOwotfQotCi0vKioKLSAqIEBjb25zdAotICogQHR5cGUge251
bWJlcn0KLSAqLwotV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3LlRyYWNlTG9nUG9sbGlu
Z0ludGVydmFsID0gNTAwOwotCi1XZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcucHJvdG90
eXBlID0gewotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xp
bmtpZmllci5yZXNldCgpOwotICAgIH0sCi0KLSAgICBzdGF0dXNCYXJJdGVtczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgIH0sCi0KLSAgICBnZXQgcHJvZmlsZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcHJvZmlsZTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQotICAg
ICAqLwotICAgIGVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMuX2xvZ0dyaWQuc2Nyb2xsQ29udGFpbmVyXTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxl
Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbih0aGlzOldlYkluc3BlY3Rvci5DYW52YXNQcm9maWxl
Vmlldyl9IGNsaWNrQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBfY3JlYXRlQ29udHJvbEJ1dHRvbjog
ZnVuY3Rpb24ocGFyZW50LCBjbGFzc05hbWUsIHRpdGxlLCBjbGlja0NhbGxiYWNrKQotICAgIHsK
LSAgICAgICAgdmFyIGJ1dHRvbiA9IHBhcmVudC5jcmVhdGVDaGlsZCgiYnV0dG9uIiwgInN0YXR1
cy1iYXItaXRlbSIpOwotICAgICAgICBidXR0b24uYWRkU3R5bGVDbGFzcyhjbGFzc05hbWUpOwot
ICAgICAgICBidXR0b24udGl0bGUgPSB0aXRsZTsKLSAgICAgICAgYnV0dG9uLmNyZWF0ZUNoaWxk
KCJpbWciKTsKLSAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xpY2tD
YWxsYmFjaywgZmFsc2UpOwotICAgIH0sCi0KLSAgICBfb25SZXBsYXlDb250ZXh0Q2hhbmdlZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P1Byb3Rv
Y29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge0NhbnZhc0FnZW50LlJlc291cmNl
U3RhdGV9IHJlc291cmNlU3RhdGUKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZFJl
Y2VpdmVSZXNvdXJjZVN0YXRlKGVycm9yLCByZXNvdXJjZVN0YXRlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0aGlzLl9lbmFibGVXYWl0SWNvbihmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoZXJy
b3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICB0aGlzLl9jdXJyZW50
UmVzb3VyY2VTdGF0ZXNbcmVzb3VyY2VTdGF0ZS5pZF0gPSByZXNvdXJjZVN0YXRlOwotCi0gICAg
ICAgICAgICB2YXIgc2VsZWN0ZWRDb250ZXh0SWQgPSB0aGlzLl9yZXBsYXlDb250ZXh0U2VsZWN0
b3Iuc2VsZWN0ZWRPcHRpb24oKS52YWx1ZTsKLSAgICAgICAgICAgIGlmIChzZWxlY3RlZENvbnRl
eHRJZCA9PT0gcmVzb3VyY2VTdGF0ZS5pZCkKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYXlJ
bWFnZUVsZW1lbnQuc3JjID0gcmVzb3VyY2VTdGF0ZS5pbWFnZVVSTDsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBzZWxlY3RlZENvbnRleHRJZCA9IHRoaXMuX3JlcGxheUNvbnRleHRTZWxlY3Rv
ci5zZWxlY3RlZE9wdGlvbigpLnZhbHVlIHx8ICJhdXRvIjsKLSAgICAgICAgdmFyIHJlc291cmNl
U3RhdGUgPSB0aGlzLl9jdXJyZW50UmVzb3VyY2VTdGF0ZXNbc2VsZWN0ZWRDb250ZXh0SWRdOwot
ICAgICAgICBpZiAocmVzb3VyY2VTdGF0ZSkKLSAgICAgICAgICAgIHRoaXMuX3JlcGxheUltYWdl
RWxlbWVudC5zcmMgPSByZXNvdXJjZVN0YXRlLmltYWdlVVJMOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHRoaXMuX2VuYWJsZVdhaXRJY29uKHRydWUpOwotICAgICAgICAgICAgdGhpcy5f
cmVwbGF5SW1hZ2VFbGVtZW50LnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhB
UUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSI7IC8vIEVtcHR5IHRy
YW5zcGFyZW50IGltYWdlLgotICAgICAgICAgICAgQ2FudmFzQWdlbnQuZ2V0UmVzb3VyY2VTdGF0
ZSh0aGlzLl90cmFjZUxvZ0lkLCBzZWxlY3RlZENvbnRleHRJZCwgZGlkUmVjZWl2ZVJlc291cmNl
U3RhdGUuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtib29sZWFufSBmb3J3YXJkCi0gICAgICovCi0gICAgX29uUmVwbGF5U3RlcENsaWNr
OiBmdW5jdGlvbihmb3J3YXJkKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkTm9kZSA9IHRo
aXMuX2xvZ0dyaWQuc2VsZWN0ZWROb2RlOwotICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIG5leHROb2RlID0gZm9yd2FyZCA/IHNlbGVj
dGVkTm9kZS50cmF2ZXJzZU5leHROb2RlKGZhbHNlKSA6IHNlbGVjdGVkTm9kZS50cmF2ZXJzZVBy
ZXZpb3VzTm9kZShmYWxzZSk7Ci0gICAgICAgIChuZXh0Tm9kZSB8fCBzZWxlY3RlZE5vZGUpLnJl
dmVhbEFuZFNlbGVjdCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IGZvcndhcmQKLSAgICAgKi8KLSAgICBfb25SZXBsYXlEcmF3aW5nQ2FsbENsaWNrOiBmdW5j
dGlvbihmb3J3YXJkKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkTm9kZSA9IHRoaXMuX2xv
Z0dyaWQuc2VsZWN0ZWROb2RlOwotICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdmFyIG5leHROb2RlID0gc2VsZWN0ZWROb2RlOwotICAgICAg
ICB3aGlsZSAobmV4dE5vZGUpIHsKLSAgICAgICAgICAgIHZhciBzaWJsaW5nID0gZm9yd2FyZCA/
IG5leHROb2RlLm5leHRTaWJsaW5nIDogbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nOwotICAgICAg
ICAgICAgaWYgKHNpYmxpbmcpIHsKLSAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IHNpYmxpbmc7
Ci0gICAgICAgICAgICAgICAgaWYgKG5leHROb2RlLmhhc0NoaWxkcmVuIHx8IG5leHROb2RlLmNh
bGwuaXNEcmF3aW5nQ2FsbCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUucGFyZW50Owot
ICAgICAgICAgICAgICAgIGlmICghZm9yd2FyZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuZXh0Tm9kZSAmJiBmb3J3
YXJkKQotICAgICAgICAgICAgdGhpcy5fb25SZXBsYXlMYXN0U3RlcENsaWNrKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIChuZXh0Tm9kZSB8fCBzZWxlY3RlZE5vZGUpLnJldmVhbEFuZFNl
bGVjdCgpOwotICAgIH0sCi0KLSAgICBfb25SZXBsYXlGaXJzdFN0ZXBDbGljazogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIGZpcnN0Tm9kZSA9IHRoaXMuX2xvZ0dyaWQucm9vdE5vZGUo
KS5jaGlsZHJlblswXTsKLSAgICAgICAgaWYgKGZpcnN0Tm9kZSkKLSAgICAgICAgICAgIGZpcnN0
Tm9kZS5yZXZlYWxBbmRTZWxlY3QoKTsKLSAgICB9LAotCi0gICAgX29uUmVwbGF5TGFzdFN0ZXBD
bGljazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGxhc3ROb2RlID0gdGhpcy5fbG9n
R3JpZC5yb290Tm9kZSgpLmNoaWxkcmVuLnBlZWtMYXN0KCk7Ci0gICAgICAgIGlmICghbGFzdE5v
ZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdoaWxlIChsYXN0Tm9kZS5leHBhbmRl
ZCkgewotICAgICAgICAgICAgdmFyIGxhc3RDaGlsZCA9IGxhc3ROb2RlLmNoaWxkcmVuLnBlZWtM
YXN0KCk7Ci0gICAgICAgICAgICBpZiAoIWxhc3RDaGlsZCkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGxhc3ROb2RlID0gbGFzdENoaWxkOwotICAgICAgICB9Ci0gICAgICAg
IGxhc3ROb2RlLnJldmVhbEFuZFNlbGVjdCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW59IGVuYWJsZQotICAgICAqLwotICAgIF9lbmFibGVXYWl0SWNvbjogZnVu
Y3Rpb24oZW5hYmxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fc3Bpbm5lckljb24uZW5hYmxlU3R5
bGVDbGFzcygiaGlkZGVuIiwgIWVuYWJsZSk7Ci0gICAgICAgIHRoaXMuX2RlYnVnSW5mb0VsZW1l
bnQuZW5hYmxlU3R5bGVDbGFzcygiaGlkZGVuIiwgZW5hYmxlKTsKLSAgICB9LAotCi0gICAgX3Jl
cGxheVRyYWNlTG9nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcGVuZGlu
Z1JlcGxheVRyYWNlTG9nRXZlbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBp
bmRleCA9IHRoaXMuX3NlbGVjdGVkQ2FsbEluZGV4KCk7Ci0gICAgICAgIGlmIChpbmRleCA9PT0g
LTEgfHwgaW5kZXggPT09IHRoaXMuX2xhc3RSZXBsYXlDYWxsSW5kZXgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHRoaXMuX2xhc3RSZXBsYXlDYWxsSW5kZXggPSBpbmRleDsKLSAgICAg
ICAgdGhpcy5fcGVuZGluZ1JlcGxheVRyYWNlTG9nRXZlbnQgPSB0cnVlOwotICAgICAgICB2YXIg
dGltZSA9IERhdGUubm93KCk7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0gez9Qcm90
b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5SZXNvdXJj
ZVN0YXRlfSByZXNvdXJjZVN0YXRlCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBkaWRS
ZXBsYXlUcmFjZUxvZyhlcnJvciwgcmVzb3VyY2VTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsYXlUcmFjZUxvZ0V2ZW50OwotCi0gICAgICAgICAg
ICBpZiAoaW5kZXggIT09IHRoaXMuX3NlbGVjdGVkQ2FsbEluZGV4KCkpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9yZXBsYXlUcmFjZUxvZygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5fZW5hYmxlV2FpdEljb24oZmFsc2UpOwot
ICAgICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgdGhpcy5fY3VycmVudFJlc291cmNlU3RhdGVzID0ge307Ci0gICAgICAgICAgICB0aGlz
Ll9jdXJyZW50UmVzb3VyY2VTdGF0ZXNbImF1dG8iXSA9IHJlc291cmNlU3RhdGU7Ci0gICAgICAg
ICAgICB0aGlzLl9jdXJyZW50UmVzb3VyY2VTdGF0ZXNbcmVzb3VyY2VTdGF0ZS5pZF0gPSByZXNv
dXJjZVN0YXRlOwotCi0gICAgICAgICAgICB0aGlzLl9kZWJ1Z0luZm9FbGVtZW50LnRleHRDb250
ZW50ID0gIlJlcGxheSB0aW1lOiAiICsgKERhdGUubm93KCkgLSB0aW1lKSArICJtcyI7Ci0gICAg
ICAgICAgICB0aGlzLl9vblJlcGxheUNvbnRleHRDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy5fZW5hYmxlV2FpdEljb24odHJ1ZSk7Ci0gICAgICAgIENhbnZhc0FnZW50LnJlcGxh
eVRyYWNlTG9nKHRoaXMuX3RyYWNlTG9nSWQsIGluZGV4LCBkaWRSZXBsYXlUcmFjZUxvZy5iaW5k
KHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJy
b3J9IGVycm9yCi0gICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFjZUxvZ30gdHJhY2VMb2cK
LSAgICAgKi8KLSAgICBfZGlkUmVjZWl2ZVRyYWNlTG9nOiBmdW5jdGlvbihlcnJvciwgdHJhY2VM
b2cpCi0gICAgewotICAgICAgICB0aGlzLl9lbmFibGVXYWl0SWNvbihmYWxzZSk7Ci0gICAgICAg
IGlmIChlcnJvciB8fCAhdHJhY2VMb2cpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZh
ciBjYWxsTm9kZXMgPSBbXTsKLSAgICAgICAgdmFyIGNhbGxzID0gdHJhY2VMb2cuY2FsbHM7Ci0g
ICAgICAgIHZhciBpbmRleCA9IHRyYWNlTG9nLnN0YXJ0T2Zmc2V0OwotICAgICAgICBmb3IgKHZh
ciBpID0gMCwgbiA9IGNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgdmFy
IGNhbGwgPSBjYWxsc1tpXTsKLSAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RSZXBsYXlDb250ZXh0
SW5mbyhjYWxsLmNvbnRleHRJZCk7Ci0gICAgICAgICAgICB2YXIgZ3JpZE5vZGUgPSB0aGlzLl9j
cmVhdGVDYWxsTm9kZShpbmRleCsrLCBjYWxsKTsKLSAgICAgICAgICAgIGNhbGxOb2Rlcy5wdXNo
KGdyaWROb2RlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9hcHBlbmRDYWxsTm9kZXMoY2Fs
bE5vZGVzKTsKLSAgICAgICAgaWYgKHRyYWNlTG9nLmFsaXZlKQotICAgICAgICAgICAgc2V0VGlt
ZW91dCh0aGlzLl9yZXF1ZXN0VHJhY2VMb2cuYmluZCh0aGlzLCBpbmRleCksIFdlYkluc3BlY3Rv
ci5DYW52YXNQcm9maWxlVmlldy5UcmFjZUxvZ1BvbGxpbmdJbnRlcnZhbCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRoaXMuX2ZsYXR0ZW5TaW5nbGVGcmFtZU5vZGUoKTsKLSAgICAgICAg
dGhpcy5fcHJvZmlsZS5fdXBkYXRlQ2FwdHVyaW5nU3RhdHVzKHRyYWNlTG9nKTsKLSAgICAgICAg
dGhpcy5fb25SZXBsYXlMYXN0U3RlcENsaWNrKCk7IC8vIEF1dG9tYXRpY2FsbHkgcmVwbGF5IHRo
ZSBsYXN0IHN0ZXAuCi0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBv
ZmZzZXQKLSAgICAgKi8KLSAgICBfcmVxdWVzdFRyYWNlTG9nOiBmdW5jdGlvbihvZmZzZXQpCi0g
ICAgewotICAgICAgICB0aGlzLl9lbmFibGVXYWl0SWNvbih0cnVlKTsKLSAgICAgICAgQ2FudmFz
QWdlbnQuZ2V0VHJhY2VMb2codGhpcy5fdHJhY2VMb2dJZCwgb2Zmc2V0LCB1bmRlZmluZWQsIHRo
aXMuX2RpZFJlY2VpdmVUcmFjZUxvZy5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHRJZAotICAgICAqLwotICAgIF9yZXF1ZXN0UmVw
bGF5Q29udGV4dEluZm86IGZ1bmN0aW9uKGNvbnRleHRJZCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9yZXBsYXlDb250ZXh0c1tjb250ZXh0SWRdKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB0aGlzLl9yZXBsYXlDb250ZXh0c1tjb250ZXh0SWRdID0gdHJ1ZTsKLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKiBA
cGFyYW0ge0NhbnZhc0FnZW50LlJlc291cmNlSW5mb30gcmVzb3VyY2VJbmZvCi0gICAgICAgICAq
LwotICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZlUmVzb3VyY2VJbmZvKGVycm9yLCByZXNvdXJj
ZUluZm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9yZXBsYXlDb250ZXh0c1tjb250ZXh0SWRdOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX3JlcGxheUNvbnRl
eHRTZWxlY3Rvci5jcmVhdGVPcHRpb24ocmVzb3VyY2VJbmZvLmRlc2NyaXB0aW9uLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlNob3cgc2NyZWVuc2hvdCBvZiB0aGlzIGNvbnRleHQncyBjYW52YXMu
IiksIGNvbnRleHRJZCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ2FudmFzQWdlbnQuZ2V0UmVzb3Vy
Y2VJbmZvKGNvbnRleHRJZCwgZGlkUmVjZWl2ZVJlc291cmNlSW5mby5iaW5kKHRoaXMpKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIF9z
ZWxlY3RlZENhbGxJbmRleDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLl9sb2dHcmlkLnNlbGVjdGVkTm9kZTsKLSAgICAgICAgcmV0dXJuIG5vZGUgPyB0aGlzLl9w
ZWVrTGFzdFJlY3Vyc2l2ZWx5KG5vZGUpLmluZGV4IDogLTE7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9IG5vZGUKLSAgICAgKiBA
cmV0dXJuIHshV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZX0KLSAgICAgKi8KLSAgICBfcGVla0xh
c3RSZWN1cnNpdmVseTogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHZhciBsYXN0Q2hp
bGQ7Ci0gICAgICAgIHdoaWxlICgobGFzdENoaWxkID0gbm9kZS5jaGlsZHJlbi5wZWVrTGFzdCgp
KSkKLSAgICAgICAgICAgIG5vZGUgPSAvKiogQHR5cGUgeyFXZWJJbnNwZWN0b3IuRGF0YUdyaWRO
b2RlfSAqLyAobGFzdENoaWxkKTsKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZT59
IGNhbGxOb2RlcwotICAgICAqLwotICAgIF9hcHBlbmRDYWxsTm9kZXM6IGZ1bmN0aW9uKGNhbGxO
b2RlcykKLSAgICB7Ci0gICAgICAgIHZhciByb290Tm9kZSA9IHRoaXMuX2xvZ0dyaWQucm9vdE5v
ZGUoKTsKLSAgICAgICAgdmFyIGZyYW1lTm9kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkRh
dGFHcmlkTm9kZX0gKi8gKHJvb3ROb2RlLmNoaWxkcmVuLnBlZWtMYXN0KCkpOwotICAgICAgICBp
ZiAoZnJhbWVOb2RlICYmIHRoaXMuX3BlZWtMYXN0UmVjdXJzaXZlbHkoZnJhbWVOb2RlKS5jYWxs
LmlzRnJhbWVFbmRDYWxsKQotICAgICAgICAgICAgZnJhbWVOb2RlID0gbnVsbDsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIG4gPSBjYWxsTm9kZXMubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIWZyYW1lTm9kZSkgewotICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHJv
b3ROb2RlLmNoaWxkcmVuLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9Owot
ICAgICAgICAgICAgICAgIGRhdGFbMF0gPSAiIjsKLSAgICAgICAgICAgICAgICBkYXRhWzFdID0g
IkZyYW1lICMiICsgKGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgZGF0YVsyXSA9ICIiOwot
ICAgICAgICAgICAgICAgIGZyYW1lTm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2Rl
KGRhdGEpOwotICAgICAgICAgICAgICAgIGZyYW1lTm9kZS5zZWxlY3RhYmxlID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICByb290Tm9kZS5hcHBlbmRDaGlsZChmcmFtZU5vZGUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdmFyIG5leHRGcmFtZUNhbGxJbmRleCA9IGkgKyAxOwotICAgICAg
ICAgICAgd2hpbGUgKG5leHRGcmFtZUNhbGxJbmRleCA8IG4gJiYgIWNhbGxOb2Rlc1tuZXh0RnJh
bWVDYWxsSW5kZXggLSAxXS5jYWxsLmlzRnJhbWVFbmRDYWxsKQotICAgICAgICAgICAgICAgICsr
bmV4dEZyYW1lQ2FsbEluZGV4OwotICAgICAgICAgICAgdGhpcy5fYXBwZW5kQ2FsbE5vZGVzVG9G
cmFtZU5vZGUoZnJhbWVOb2RlLCBjYWxsTm9kZXMsIGksIG5leHRGcmFtZUNhbGxJbmRleCk7Ci0g
ICAgICAgICAgICBpID0gbmV4dEZyYW1lQ2FsbEluZGV4IC0gMTsKLSAgICAgICAgICAgIGZyYW1l
Tm9kZSA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHshV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZX0gZnJhbWVOb2RlCi0gICAgICogQHBhcmFtIHsh
QXJyYXkuPCFXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlPn0gY2FsbE5vZGVzCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IGZyb21JbmRleAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IG5v
dCBpbmNsdXNpdmUKLSAgICAgKi8KLSAgICBfYXBwZW5kQ2FsbE5vZGVzVG9GcmFtZU5vZGU6IGZ1
bmN0aW9uKGZyYW1lTm9kZSwgY2FsbE5vZGVzLCBmcm9tSW5kZXgsIHRvSW5kZXgpCi0gICAgewot
ICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGFwcGVuZERyYXdDYWxs
R3JvdXAoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLl9kcmF3Q2Fs
bEdyb3Vwc0NvdW50IHx8IDA7Ci0gICAgICAgICAgICB2YXIgZGF0YSA9IHt9OwotICAgICAgICAg
ICAgZGF0YVswXSA9ICIiOwotICAgICAgICAgICAgZGF0YVsxXSA9ICJEcmF3IGNhbGwgZ3JvdXAg
IyIgKyAoaW5kZXggKyAxKTsKLSAgICAgICAgICAgIGRhdGFbMl0gPSAiIjsKLSAgICAgICAgICAg
IHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoZGF0YSk7Ci0gICAgICAg
ICAgICBub2RlLnNlbGVjdGFibGUgPSB0cnVlOwotICAgICAgICAgICAgc2VsZi5fZHJhd0NhbGxH
cm91cHNDb3VudCA9IGluZGV4ICsgMTsKLSAgICAgICAgICAgIGZyYW1lTm9kZS5hcHBlbmRDaGls
ZChub2RlKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gc3BsaXREcmF3Q2FsbEdyb3VwKGRyYXdDYWxsR3JvdXApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciBzcGxpdEluZGV4ID0gMDsKLSAgICAgICAgICAgIHZhciBzcGxpdE5vZGU7
Ci0gICAgICAgICAgICB3aGlsZSAoKHNwbGl0Tm9kZSA9IGRyYXdDYWxsR3JvdXAuY2hpbGRyZW5b
c3BsaXRJbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwbGl0Tm9kZS5jYWxsLmlzRHJh
d2luZ0NhbGwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICsr
c3BsaXRJbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBuZXdEcmF3Q2FsbEdy
b3VwID0gYXBwZW5kRHJhd0NhbGxHcm91cCgpOwotICAgICAgICAgICAgdmFyIGxhc3ROb2RlOwot
ICAgICAgICAgICAgd2hpbGUgKChsYXN0Tm9kZSA9IGRyYXdDYWxsR3JvdXAuY2hpbGRyZW5bc3Bs
aXRJbmRleCArIDFdKSkKLSAgICAgICAgICAgICAgICBuZXdEcmF3Q2FsbEdyb3VwLmFwcGVuZENo
aWxkKGxhc3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdEcmF3Q2FsbEdyb3VwOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIGRyYXdDYWxsR3JvdXAgPSBmcmFtZU5vZGUuY2hpbGRyZW4u
cGVla0xhc3QoKTsKLSAgICAgICAgdmFyIGdyb3VwSGFzRHJhd0NhbGwgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKGRyYXdDYWxsR3JvdXApIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0g
ZHJhd0NhbGxHcm91cC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoZHJhd0NhbGxHcm91cC5jaGlsZHJlbltpXS5jYWxsLmlzRHJhd2luZ0NhbGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgZ3JvdXBIYXNEcmF3Q2FsbCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBkcmF3Q2FsbEdyb3VwID0gYXBwZW5kRHJhd0NhbGxHcm91
cCgpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gY2FsbE5vZGVzW2ldOwotICAgICAgICAgICAgZHJh
d0NhbGxHcm91cC5hcHBlbmRDaGlsZChub2RlKTsKLSAgICAgICAgICAgIGlmIChub2RlLmNhbGwu
aXNEcmF3aW5nQ2FsbCkgewotICAgICAgICAgICAgICAgIGlmIChncm91cEhhc0RyYXdDYWxsKQot
ICAgICAgICAgICAgICAgICAgICBkcmF3Q2FsbEdyb3VwID0gc3BsaXREcmF3Q2FsbEdyb3VwKGRy
YXdDYWxsR3JvdXApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
Z3JvdXBIYXNEcmF3Q2FsbCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gICAgICogQHBhcmFt
IHtDYW52YXNBZ2VudC5DYWxsfSBjYWxsCi0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5E
YXRhR3JpZE5vZGV9Ci0gICAgICovCi0gICAgX2NyZWF0ZUNhbGxOb2RlOiBmdW5jdGlvbihpbmRl
eCwgY2FsbCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRhID0ge307Ci0gICAgICAgIGRhdGFbMF0g
PSBpbmRleCArIDE7Ci0gICAgICAgIGRhdGFbMV0gPSBjYWxsLmZ1bmN0aW9uTmFtZSB8fCAiY29u
dGV4dC4iICsgY2FsbC5wcm9wZXJ0eTsKLSAgICAgICAgZGF0YVsyXSA9ICIiOwotICAgICAgICBp
ZiAoY2FsbC5zb3VyY2VVUkwpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FKDYyNzI1KTogc3RhY2sg
dHJhY2UgbGluZS9jb2x1bW4gbnVtYmVycyBhcmUgb25lLWJhc2VkLgotICAgICAgICAgICAgdmFy
IGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCBjYWxsLmxpbmVOdW1iZXIgLSAxKSB8fCAwOwotICAg
ICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IE1hdGgubWF4KDAsIGNhbGwuY29sdW1uTnVtYmVy
IC0gMSkgfHwgMDsKLSAgICAgICAgICAgIGRhdGFbMl0gPSB0aGlzLl9saW5raWZpZXIubGlua2lm
eUxvY2F0aW9uKGNhbGwuc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGNhbGwuYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICB2YXIg
YXJncyA9IGNhbGwuYXJndW1lbnRzLm1hcChmdW5jdGlvbihhcmd1bWVudCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBhcmd1bWVudC5kZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgZGF0YVsxXSArPSAiKCIgKyBhcmdzLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgZGF0YVsxXSArPSAiID0gIiArIGNhbGwudmFsdWUuZGVzY3Jp
cHRpb247Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBjYWxsLnJlc3VsdCAhPT0gInVuZGVmaW5lZCIp
Ci0gICAgICAgICAgICBkYXRhWzFdICs9ICIgPT4gIiArIGNhbGwucmVzdWx0LmRlc2NyaXB0aW9u
OwotCi0gICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoZGF0
YSk7Ci0gICAgICAgIG5vZGUuaW5kZXggPSBpbmRleDsKLSAgICAgICAgbm9kZS5zZWxlY3RhYmxl
ID0gdHJ1ZTsKLSAgICAgICAgbm9kZS5jYWxsID0gY2FsbDsKLSAgICAgICAgcmV0dXJuIG5vZGU7
Ci0gICAgfSwKLQotICAgIF9mbGF0dGVuU2luZ2xlRnJhbWVOb2RlOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLl9sb2dHcmlkLnJvb3ROb2RlKCk7Ci0gICAg
ICAgIGlmIChyb290Tm9kZS5jaGlsZHJlbi5sZW5ndGggIT09IDEpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHZhciBmcmFtZU5vZGUgPSByb290Tm9kZS5jaGlsZHJlblswXTsKLSAgICAg
ICAgd2hpbGUgKGZyYW1lTm9kZS5jaGlsZHJlblswXSkKLSAgICAgICAgICAgIHJvb3ROb2RlLmFw
cGVuZENoaWxkKGZyYW1lTm9kZS5jaGlsZHJlblswXSk7Ci0gICAgICAgIHJvb3ROb2RlLnJlbW92
ZUNoaWxkKGZyYW1lTm9kZSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
LlZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfQotICovCi1XZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmls
ZVR5cGUgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLmNhbGwo
dGhpcywgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJDYXB0dXJlIENhbnZhcyBGcmFtZSIpKTsKLSAgICB0aGlzLl9uZXh0UHJvZmls
ZVVpZCA9IDE7Ci0gICAgdGhpcy5fcmVjb3JkaW5nID0gZmFsc2U7Ci0gICAgdGhpcy5fbGFzdFBy
b2ZpbGVIZWFkZXIgPSBudWxsOwotCi0gICAgdGhpcy5fY2FwdHVyaW5nTW9kZVNlbGVjdG9yID0g
bmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJDb21ib0JveCh0aGlzLl9kaXNwYXRjaFZpZXdVcGRh
dGVkRXZlbnQuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fY2FwdHVyaW5nTW9kZVNlbGVjdG9yLmVs
ZW1lbnQudGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhbnZhcyBjYXB0dXJlIG1vZGUu
Iik7Ci0gICAgdGhpcy5fY2FwdHVyaW5nTW9kZVNlbGVjdG9yLmNyZWF0ZU9wdGlvbihXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlNpbmdsZSBGcmFtZSIpLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNh
cHR1cmUgYSBzaW5nbGUgY2FudmFzIGZyYW1lLiIpLCAiIik7Ci0gICAgdGhpcy5fY2FwdHVyaW5n
TW9kZVNlbGVjdG9yLmNyZWF0ZU9wdGlvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnNlY3V0
aXZlIEZyYW1lcyIpLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmUgY29uc2VjdXRpdmUg
Y2FudmFzIGZyYW1lcy4iKSwgIjEiKTsKLQotICAgIC8qKiBAdHlwZSB7IU9iamVjdC48c3RyaW5n
LCBFbGVtZW50Pn0gKi8KLSAgICB0aGlzLl9mcmFtZU9wdGlvbnMgPSB7fTsKLQotICAgIC8qKiBA
dHlwZSB7IU9iamVjdC48c3RyaW5nLCBib29sZWFuPn0gKi8KLSAgICB0aGlzLl9mcmFtZXNXaXRo
Q2FudmFzZXMgPSB7fTsKLQotICAgIHRoaXMuX2ZyYW1lU2VsZWN0b3IgPSBuZXcgV2ViSW5zcGVj
dG9yLlN0YXR1c0JhckNvbWJvQm94KHRoaXMuX2Rpc3BhdGNoVmlld1VwZGF0ZWRFdmVudC5iaW5k
KHRoaXMpKTsKLSAgICB0aGlzLl9mcmFtZVNlbGVjdG9yLmVsZW1lbnQudGl0bGUgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkZyYW1lIGNvbnRhaW5pbmcgdGhlIGNhbnZhc2VzIHRvIGNhcHR1cmUu
Iik7Ci0gICAgdGhpcy5fZnJhbWVTZWxlY3Rvci5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRl
biIpOwotICAgIFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwuY29udGV4dExpc3RzKCkuZm9yRWFj
aCh0aGlzLl9hZGRGcmFtZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2RlbC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SdW50aW1lTW9kZWwuRXZlbnRzLkZyYW1lRXhl
Y3V0aW9uQ29udGV4dExpc3RBZGRlZCwgdGhpcy5fZnJhbWVBZGRlZCwgdGhpcyk7Ci0gICAgV2Vi
SW5zcGVjdG9yLnJ1bnRpbWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SdW50
aW1lTW9kZWwuRXZlbnRzLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3RSZW1vdmVkLCB0aGlzLl9m
cmFtZVJlbW92ZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fZGVjb3JhdGlvbkVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9kZWNvcmF0aW9uRWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJwcm9maWxlLWNhbnZhcy1kZWNvcmF0aW9uIik7Ci0gICAgdGhpcy5fZGVj
b3JhdGlvbkVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgdGhpcy5fZGVjb3Jh
dGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoZXJlIGlz
IGFuIHVuaW5zdHJ1bWVudGVkIGNhbnZhcyBvbiB0aGUgcGFnZS4gUmVsb2FkIHRoZSBwYWdlIHRv
IGluc3RydW1lbnQgaXQuIik7Ci0gICAgdmFyIHJlbG9hZFBhZ2VCdXR0b24gPSB0aGlzLl9kZWNv
cmF0aW9uRWxlbWVudC5jcmVhdGVDaGlsZCgiYnV0dG9uIik7Ci0gICAgcmVsb2FkUGFnZUJ1dHRv
bi50eXBlID0gImJ1dHRvbiI7Ci0gICAgcmVsb2FkUGFnZUJ1dHRvbi50ZXh0Q29udGVudCA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUmVsb2FkIik7Ci0gICAgcmVsb2FkUGFnZUJ1dHRvbi5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uUmVsb2FkUGFnZUJ1dHRvbkNsaWNrLmJpbmQo
dGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX2Rpc3BhdGNoZXIgPSBuZXcgV2ViSW5zcGVjdG9y
LkNhbnZhc0Rpc3BhdGNoZXIodGhpcyk7Ci0KLSAgICAvLyBGSVhNRTogZW5hYmxlL2Rpc2FibGUg
YnkgYSBVSSBhY3Rpb24/Ci0gICAgQ2FudmFzQWdlbnQuZW5hYmxlKHRoaXMuX3VwZGF0ZURlY29y
YXRpb25FbGVtZW50LmJpbmQodGhpcykpOwotICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVN
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVu
dFR5cGVzLk1haW5GcmFtZU5hdmlnYXRlZCwgdGhpcy5fdXBkYXRlRGVjb3JhdGlvbkVsZW1lbnQs
IHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUuVHlwZUlkID0gIkNB
TlZBU19QUk9GSUxFIjsKLQotV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlw
ZSA9IHsKLSAgICBzdGF0dXNCYXJJdGVtczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFt0aGlzLl9jYXB0dXJpbmdNb2RlU2VsZWN0b3IuZWxlbWVudCwgdGhpcy5fZnJhbWVTZWxl
Y3Rvci5lbGVtZW50XTsKLSAgICB9LAotCi0gICAgZ2V0IGJ1dHRvblRvb2x0aXAoKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX2lzU2luZ2xlRnJhbWVNb2RlKCkpCi0gICAgICAgICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDYXB0dXJlIG5leHQgY2FudmFzIGZyYW1lLiIpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVjb3JkaW5nID8gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJTdG9wIGNhcHR1cmluZyBjYW52YXMgZnJhbWVzLiIpIDogV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJTdGFydCBjYXB0dXJpbmcgY2FudmFzIGZyYW1lcy4iKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0K
LSAgICAgKi8KLSAgICBidXR0b25DbGlja2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBp
ZiAodGhpcy5fcmVjb3JkaW5nKSB7Ci0gICAgICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHRoaXMuX3N0b3BGcmFtZUNhcHR1cmluZygpOwotICAgICAgICB9IGVs
c2UgaWYgKHRoaXMuX2lzU2luZ2xlRnJhbWVNb2RlKCkpIHsKLSAgICAgICAgICAgIHRoaXMuX3Jl
Y29yZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5fcnVuU2luZ2xlRnJhbWVDYXB0dXJp
bmcoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IHRy
dWU7Ci0gICAgICAgICAgICB0aGlzLl9zdGFydEZyYW1lQ2FwdHVyaW5nKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29yZGluZzsKLSAgICB9LAotCi0gICAgX3J1blNpbmds
ZUZyYW1lQ2FwdHVyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZnJhbWVJZCA9
IHRoaXMuX3NlbGVjdGVkRnJhbWVJZCgpOwotICAgICAgICBDYW52YXNBZ2VudC5jYXB0dXJlRnJh
bWUoZnJhbWVJZCwgdGhpcy5fZGlkU3RhcnRDYXB0dXJpbmdGcmFtZS5iaW5kKHRoaXMsIGZyYW1l
SWQpKTsKLSAgICB9LAotCi0gICAgX3N0YXJ0RnJhbWVDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHZhciBmcmFtZUlkID0gdGhpcy5fc2VsZWN0ZWRGcmFtZUlkKCk7Ci0gICAg
ICAgIENhbnZhc0FnZW50LnN0YXJ0Q2FwdHVyaW5nKGZyYW1lSWQsIHRoaXMuX2RpZFN0YXJ0Q2Fw
dHVyaW5nRnJhbWUuYmluZCh0aGlzLCBmcmFtZUlkKSk7Ci0gICAgfSwKLQotICAgIF9zdG9wRnJh
bWVDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbGFzdFBy
b2ZpbGVIZWFkZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBwcm9maWxlSGVh
ZGVyID0gdGhpcy5fbGFzdFByb2ZpbGVIZWFkZXI7Ci0gICAgICAgIHZhciB0cmFjZUxvZ0lkID0g
cHJvZmlsZUhlYWRlci50cmFjZUxvZ0lkKCk7Ci0gICAgICAgIHRoaXMuX2xhc3RQcm9maWxlSGVh
ZGVyID0gbnVsbDsKLSAgICAgICAgZnVuY3Rpb24gZGlkU3RvcENhcHR1cmluZygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHByb2ZpbGVIZWFkZXIuX3VwZGF0ZUNhcHR1cmluZ1N0YXR1cygpOwot
ICAgICAgICB9Ci0gICAgICAgIENhbnZhc0FnZW50LnN0b3BDYXB0dXJpbmcodHJhY2VMb2dJZCwg
ZGlkU3RvcENhcHR1cmluZy5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBmcmFtZUlkCi0gICAgICogQHBhcmFtIHs/UHJvdG9j
b2wuRXJyb3J9IGVycm9yCi0gICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFjZUxvZ0lkfSB0
cmFjZUxvZ0lkCi0gICAgICovCi0gICAgX2RpZFN0YXJ0Q2FwdHVyaW5nRnJhbWU6IGZ1bmN0aW9u
KGZyYW1lSWQsIGVycm9yLCB0cmFjZUxvZ0lkKQotICAgIHsKLSAgICAgICAgaWYgKGVycm9yIHx8
IHRoaXMuX2xhc3RQcm9maWxlSGVhZGVyICYmIHRoaXMuX2xhc3RQcm9maWxlSGVhZGVyLnRyYWNl
TG9nSWQoKSA9PT0gdHJhY2VMb2dJZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFy
IHByb2ZpbGVIZWFkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIodGhp
cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUcmFjZSBMb2cgJWQiLCB0aGlzLl9uZXh0UHJvZmls
ZVVpZCksIHRoaXMuX25leHRQcm9maWxlVWlkLCB0cmFjZUxvZ0lkLCBmcmFtZUlkKTsKLSAgICAg
ICAgKyt0aGlzLl9uZXh0UHJvZmlsZVVpZDsKLSAgICAgICAgdGhpcy5fbGFzdFByb2ZpbGVIZWFk
ZXIgPSBwcm9maWxlSGVhZGVyOwotICAgICAgICB0aGlzLmFkZFByb2ZpbGUocHJvZmlsZUhlYWRl
cik7Ci0gICAgICAgIHByb2ZpbGVIZWFkZXIuX3VwZGF0ZUNhcHR1cmluZ1N0YXR1cygpOwotICAg
IH0sCi0KLSAgICBnZXQgdHJlZUl0ZW1UaXRsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJDQU5WQVMgUFJPRklMRSIpOwotICAgIH0sCi0KLSAgICBnZXQg
ZGVzY3JpcHRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQ2FudmFzIGNhbGxzIGluc3RydW1lbnRhdGlvbiIpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIGRl
Y29yYXRpb25FbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
ZGVjb3JhdGlvbkVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQot
ICAgICAqLwotICAgIF9yZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5fcmVzZXQuY2FsbCh0aGlzKTsKLSAgICAgICAgdGhp
cy5fbmV4dFByb2ZpbGVVaWQgPSAxOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQot
ICAgICAqLwotICAgIHJlbW92ZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUuY2Fs
bCh0aGlzLCBwcm9maWxlKTsKLSAgICAgICAgaWYgKHRoaXMuX3JlY29yZGluZyAmJiBwcm9maWxl
ID09PSB0aGlzLl9sYXN0UHJvZmlsZUhlYWRlcikKLSAgICAgICAgICAgIHRoaXMuX3JlY29yZGlu
ZyA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBzZXRSZWNvcmRpbmdQcm9maWxlOiBmdW5jdGlvbihp
c1Byb2ZpbGluZykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGlzUHJvZmlsaW5n
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge3N0
cmluZz19IHRpdGxlCi0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVy
fQotICAgICAqLwotICAgIGNyZWF0ZVRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9uKHRpdGxlKQot
ICAgIHsKLSAgICAgICAgdGl0bGUgPSB0aXRsZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNh
cHR1cmluZ1x1MjAyNiIpOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DYW52YXNQ
cm9maWxlSGVhZGVyKHRoaXMsIHRpdGxlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92
ZXJyaWRlCi0gICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2Zp
bGUKLSAgICAgKiBAcmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gICAgICov
Ci0gICAgY3JlYXRlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIodGhpcywgcHJvZmlsZS50
aXRsZSwgLTEpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlRGVjb3JhdGlvbkVsZW1lbnQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0gez9Qcm90b2NvbC5F
cnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtib29sZWFufSByZXN1bHQKLSAgICAgICAg
ICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciBoaWRlV2FybmluZyA9IChlcnJvciB8fCAhcmVzdWx0KTsKLSAgICAg
ICAgICAgIHRoaXMuX2RlY29yYXRpb25FbGVtZW50LmVuYWJsZVN0eWxlQ2xhc3MoImhpZGRlbiIs
IGhpZGVXYXJuaW5nKTsKLSAgICAgICAgfQotICAgICAgICBDYW52YXNBZ2VudC5oYXNVbmluc3Ry
dW1lbnRlZENhbnZhc2VzKGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uUmVsb2Fk
UGFnZUJ1dHRvbkNsaWNrOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIFBhZ2VBZ2Vu
dC5yZWxvYWQoZXZlbnQuc2hpZnRLZXkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9pc1NpbmdsZUZyYW1lTW9kZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICF0aGlzLl9jYXB0dXJpbmdNb2RlU2VsZWN0b3Iuc2Vs
ZWN0ZWRPcHRpb24oKS52YWx1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2ZyYW1lQWRkZWQ6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRMaXN0ID0gLyoqIEB0eXBlIHtX
ZWJJbnNwZWN0b3IuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdH0gKi8gKGV2ZW50LmRhdGEpOwot
ICAgICAgICB0aGlzLl9hZGRGcmFtZShjb250ZXh0TGlzdCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3R9IGNv
bnRleHRMaXN0Ci0gICAgICovCi0gICAgX2FkZEZyYW1lOiBmdW5jdGlvbihjb250ZXh0TGlzdCkK
LSAgICB7Ci0gICAgICAgIHZhciBmcmFtZUlkID0gY29udGV4dExpc3QuZnJhbWVJZDsKLSAgICAg
ICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwotICAgICAg
ICBvcHRpb24udGV4dCA9IGNvbnRleHRMaXN0LmRpc3BsYXlOYW1lOwotICAgICAgICBvcHRpb24u
dGl0bGUgPSBjb250ZXh0TGlzdC51cmw7Ci0gICAgICAgIG9wdGlvbi52YWx1ZSA9IGZyYW1lSWQ7
Ci0KLSAgICAgICAgdGhpcy5fZnJhbWVPcHRpb25zW2ZyYW1lSWRdID0gb3B0aW9uOwotCi0gICAg
ICAgIGlmICh0aGlzLl9mcmFtZXNXaXRoQ2FudmFzZXNbZnJhbWVJZF0pIHsKLSAgICAgICAgICAg
IHRoaXMuX2ZyYW1lU2VsZWN0b3IuYWRkT3B0aW9uKG9wdGlvbik7Ci0gICAgICAgICAgICB0aGlz
Ll9kaXNwYXRjaFZpZXdVcGRhdGVkRXZlbnQoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAg
ICBfZnJhbWVSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjb250
ZXh0TGlzdCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExp
c3R9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgdmFyIGZyYW1lSWQgPSBjb250ZXh0TGlzdC5m
cmFtZUlkOwotICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5fZnJhbWVPcHRpb25zW2ZyYW1lSWRd
OwotICAgICAgICBpZiAob3B0aW9uICYmIHRoaXMuX2ZyYW1lc1dpdGhDYW52YXNlc1tmcmFtZUlk
XSkgewotICAgICAgICAgICAgdGhpcy5fZnJhbWVTZWxlY3Rvci5yZW1vdmVPcHRpb24ob3B0aW9u
KTsKLSAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoVmlld1VwZGF0ZWRFdmVudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9mcmFtZU9wdGlvbnNbZnJhbWVJZF07Ci0gICAgICAg
IGRlbGV0ZSB0aGlzLl9mcmFtZXNXaXRoQ2FudmFzZXNbZnJhbWVJZF07Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmcmFtZUlkCi0gICAgICovCi0gICAgX2NvbnRl
eHRDcmVhdGVkOiBmdW5jdGlvbihmcmFtZUlkKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Zy
YW1lc1dpdGhDYW52YXNlc1tmcmFtZUlkXSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dGhpcy5fZnJhbWVzV2l0aENhbnZhc2VzW2ZyYW1lSWRdID0gdHJ1ZTsKLSAgICAgICAgdmFyIG9w
dGlvbiA9IHRoaXMuX2ZyYW1lT3B0aW9uc1tmcmFtZUlkXTsKLSAgICAgICAgaWYgKG9wdGlvbikg
ewotICAgICAgICAgICAgdGhpcy5fZnJhbWVTZWxlY3Rvci5hZGRPcHRpb24ob3B0aW9uKTsKLSAg
ICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoVmlld1VwZGF0ZWRFdmVudCgpOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LkZyYW1lSWQ9fSBm
cmFtZUlkCi0gICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFjZUxvZ0lkPX0gdHJhY2VMb2dJ
ZAotICAgICAqLwotICAgIF90cmFjZUxvZ3NSZW1vdmVkOiBmdW5jdGlvbihmcmFtZUlkLCB0cmFj
ZUxvZ0lkKQotICAgIHsKLSAgICAgICAgdmFyIHNpZGViYXJFbGVtZW50c1RvRGVsZXRlID0gW107
Ci0gICAgICAgIHZhciBzaWRlYmFyRWxlbWVudHMgPSAvKiogQHR5cGUgeyFBcnJheS48V2ViSW5z
cGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQ+fSAqLyAoKHRoaXMudHJlZUVsZW1lbnQg
JiYgdGhpcy50cmVlRWxlbWVudC5jaGlsZHJlbikgfHwgW10pOwotICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbiA9IHNpZGViYXJFbGVtZW50cy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAg
ICAgIHZhciBoZWFkZXIgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVh
ZGVyfSAqLyAoc2lkZWJhckVsZW1lbnRzW2ldLnByb2ZpbGUpOwotICAgICAgICAgICAgaWYgKCFo
ZWFkZXIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZnJhbWVJ
ZCAmJiBmcmFtZUlkICE9PSBoZWFkZXIuZnJhbWVJZCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKHRyYWNlTG9nSWQgJiYgdHJhY2VMb2dJZCAhPT0gaGVhZGVy
LnRyYWNlTG9nSWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNp
ZGViYXJFbGVtZW50c1RvRGVsZXRlLnB1c2goc2lkZWJhckVsZW1lbnRzW2ldKTsKLSAgICAgICAg
fQotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHNpZGViYXJFbGVtZW50c1RvRGVsZXRlLmxl
bmd0aDsgaSA8IG47ICsraSkKLSAgICAgICAgICAgIHNpZGViYXJFbGVtZW50c1RvRGVsZXRlW2ld
Lm9uZGVsZXRlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ3x1
bmRlZmluZWR9Ci0gICAgICovCi0gICAgX3NlbGVjdGVkRnJhbWVJZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMuX2ZyYW1lU2VsZWN0b3Iuc2VsZWN0ZWRPcHRp
b24oKTsKLSAgICAgICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbi52YWx1ZSA6IHVuZGVmaW5lZDsK
LSAgICB9LAotCi0gICAgX2Rpc3BhdGNoVmlld1VwZGF0ZWRFdmVudDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fZnJhbWVTZWxlY3Rvci5lbGVtZW50LmVuYWJsZVN0eWxlQ2xhc3Mo
ImhpZGRlbiIsIHRoaXMuX2ZyYW1lU2VsZWN0b3Iuc2l6ZSgpIDw9IDEpOwotICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRz
LlZpZXdVcGRhdGVkKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVt
ZW50cyB7Q2FudmFzQWdlbnQuRGlzcGF0Y2hlcn0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNh
bnZhc1Byb2ZpbGVUeXBlfSBwcm9maWxlVHlwZQotICovCi1XZWJJbnNwZWN0b3IuQ2FudmFzRGlz
cGF0Y2hlciA9IGZ1bmN0aW9uKHByb2ZpbGVUeXBlKQotewotICAgIHRoaXMuX3Byb2ZpbGVUeXBl
ID0gcHJvZmlsZVR5cGU7Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNhbnZhc0Rpc3Bh
dGNoZXIodGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5DYW52YXNEaXNwYXRjaGVyLnByb3RvdHlw
ZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnJhbWVJZAotICAgICAqLwot
ICAgIGNvbnRleHRDcmVhdGVkOiBmdW5jdGlvbihmcmFtZUlkKQotICAgIHsKLSAgICAgICAgdGhp
cy5fcHJvZmlsZVR5cGUuX2NvbnRleHRDcmVhdGVkKGZyYW1lSWQpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5GcmFtZUlkPX0gZnJhbWVJZAotICAgICAq
IEBwYXJhbSB7Q2FudmFzQWdlbnQuVHJhY2VMb2dJZD19IHRyYWNlTG9nSWQKLSAgICAgKi8KLSAg
ICB0cmFjZUxvZ3NSZW1vdmVkOiBmdW5jdGlvbihmcmFtZUlkLCB0cmFjZUxvZ0lkKQotICAgIHsK
LSAgICAgICAgdGhpcy5fcHJvZmlsZVR5cGUuX3RyYWNlTG9nc1JlbW92ZWQoZnJhbWVJZCwgdHJh
Y2VMb2dJZCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkNh
bnZhc1Byb2ZpbGVUeXBlfSB0eXBlCi0gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAqIEBwYXJh
bSB7bnVtYmVyPX0gdWlkCi0gKiBAcGFyYW0ge0NhbnZhc0FnZW50LlRyYWNlTG9nSWQ9fSB0cmFj
ZUxvZ0lkCi0gKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5GcmFtZUlkPX0gZnJhbWVJZAotICovCi1X
ZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlciA9IGZ1bmN0aW9uKHR5cGUsIHRpdGxlLCB1
aWQsIHRyYWNlTG9nSWQsIGZyYW1lSWQpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFk
ZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRsZSwgdWlkKTsKLSAgICAvKiogQHR5cGUge0NhbnZhc0Fn
ZW50LlRyYWNlTG9nSWR9ICovCi0gICAgdGhpcy5fdHJhY2VMb2dJZCA9IHRyYWNlTG9nSWQgfHwg
IiI7Ci0gICAgdGhpcy5fZnJhbWVJZCA9IGZyYW1lSWQ7Ci0gICAgdGhpcy5fYWxpdmUgPSB0cnVl
OwotICAgIHRoaXMuX3RyYWNlTG9nU2l6ZSA9IDA7Ci19Ci0KLVdlYkluc3BlY3Rvci5DYW52YXNQ
cm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtDYW52
YXNBZ2VudC5UcmFjZUxvZ0lkfQotICAgICAqLwotICAgIHRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90cmFjZUxvZ0lkOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtOZXR3b3JrQWdlbnQuRnJhbWVJZHx1bmRlZmluZWR9Ci0gICAg
ICovCi0gICAgZnJhbWVJZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2ZyYW1lSWQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVFbGVtZW50fQotICAgICAqLwot
ICAgIGNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGViYXJUcmVlRWxlbWVudCh0aGlzLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRyYWNlIExvZyAlZCIpLCAicHJvZmlsZS1zaWRlYmFyLXRy
ZWUtaXRlbSIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gICAgICov
Ci0gICAgY3JlYXRlVmlldzogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3KHRoaXMpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICBkaXNwb3NlOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdHJhY2VMb2dJZCkgewotICAgICAgICAg
ICAgQ2FudmFzQWdlbnQuZHJvcFRyYWNlTG9nKHRoaXMuX3RyYWNlTG9nSWQpOwotICAgICAgICAg
ICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlcXVlc3RTdGF0dXNUaW1lcik7Ci0gICAgICAgICAgICB0
aGlzLl9hbGl2ZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7Q2FudmFzQWdlbnQuVHJhY2VMb2c9fSB0cmFjZUxvZwotICAgICAqLwotICAgIF91
cGRhdGVDYXB0dXJpbmdTdGF0dXM6IGZ1bmN0aW9uKHRyYWNlTG9nKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLnNpZGViYXJFbGVtZW50IHx8ICF0aGlzLl90cmFjZUxvZ0lkKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0cmFjZUxvZykgewotICAgICAgICAgICAgdGhpcy5f
YWxpdmUgPSB0cmFjZUxvZy5hbGl2ZTsKLSAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nU2l6ZSA9
IHRyYWNlTG9nLnRvdGFsQXZhaWxhYmxlQ2FsbHM7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
LnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gdGhpcy5fYWxpdmUgPyBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkNhcHR1cmluZ1x1MjAyNiAlZCBjYWxscyIsIHRoaXMuX3RyYWNlTG9nU2l6ZSkgOiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmVkICVkIGNhbGxzIiwgdGhpcy5fdHJhY2VMb2dT
aXplKTsKLSAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC53YWl0ID0gdGhpcy5fYWxpdmU7Ci0K
LSAgICAgICAgaWYgKHRoaXMuX2FsaXZlKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhp
cy5fcmVxdWVzdFN0YXR1c1RpbWVyKTsKLSAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RTdGF0dXNU
aW1lciA9IHNldFRpbWVvdXQodGhpcy5fcmVxdWVzdENhcHR1cmluZ1N0YXR1cy5iaW5kKHRoaXMp
LCBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcuVHJhY2VMb2dQb2xsaW5nSW50ZXJ2YWwp
OwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9yZXF1ZXN0Q2FwdHVyaW5nU3RhdHVzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wu
RXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7Q2FudmFzQWdlbnQuVHJhY2VMb2d9IHRy
YWNlTG9nCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZlVHJhY2VMb2co
ZXJyb3IsIHRyYWNlTG9nKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdGhpcy5fYWxpdmUgPSB0cmFjZUxvZy5h
bGl2ZTsKLSAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nU2l6ZSA9IHRyYWNlTG9nLnRvdGFsQXZh
aWxhYmxlQ2FsbHM7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVDYXB0dXJpbmdTdGF0dXMoKTsK
LSAgICAgICAgfQotICAgICAgICBDYW52YXNBZ2VudC5nZXRUcmFjZUxvZyh0aGlzLl90cmFjZUxv
Z0lkLCAwLCAwLCBkaWRSZWNlaXZlVHJhY2VMb2cuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NoZWNrYm94LmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DaGVja2JveC5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjcxNTkwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NoZWNrYm94LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmc9fSB0b29sdGlwCi0gKi8KLVdl
Ykluc3BlY3Rvci5DaGVja2JveCA9IGZ1bmN0aW9uKGxhYmVsLCBjbGFzc05hbWUsIHRvb2x0aXAp
Ci17Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTsK
LSAgICB0aGlzLl9pbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcp
OwotICAgIHRoaXMuX2lucHV0RWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKLQotICAgIHRoaXMu
ZWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMuX2lucHV0RWxlbWVudCk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKGxhYmVsKSk7Ci0gICAgaWYgKHRvb2x0aXApCi0gICAgICAg
IHRoaXMuZWxlbWVudC50aXRsZSA9IHRvb2x0aXA7Ci19Ci0KLVdlYkluc3BlY3Rvci5DaGVja2Jv
eC5wcm90b3R5cGUgPSB7Ci0gICAgc2V0IGNoZWNrZWQoY2hlY2tlZCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2lucHV0RWxlbWVudC5jaGVja2VkID0gY2hlY2tlZDsKLSAgICB9LAotCi0gICAgZ2V0
IGNoZWNrZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudC5jaGVj
a2VkOwotICAgIH0sCi0KLSAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbihsaXN0ZW5lcikK
LSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyV3JhcHBlcihldmVudCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGxpc3RlbmVyKQotICAgICAgICAgICAgICAgIGxpc3RlbmVyKGV2
ZW50KTsKLSAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUoKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgbGlzdGVuZXJXcmFwcGVyLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGxpc3RlbmVyV3JhcHBlciwgZmFsc2UpOwot
ICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29kZU1pcnJvclRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvZGVNaXJyb3JUZXh0RWRpdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkZDUyNGMyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ29kZU1pcnJvclRleHRFZGl0b3IuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3NDYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LWltcG9ydFNjcmlwdCgiY20vY29kZW1pcnJvci5qcyIpOwotaW1wb3J0U2NyaXB0KCJjbS9jc3Mu
anMiKTsKLWltcG9ydFNjcmlwdCgiY20vamF2YXNjcmlwdC5qcyIpOwotaW1wb3J0U2NyaXB0KCJj
bS94bWwuanMiKTsKLWltcG9ydFNjcmlwdCgiY20vaHRtbG1peGVkLmpzIik7Ci1pbXBvcnRTY3Jp
cHQoImNtL21hdGNoYnJhY2tldHMuanMiKTsKLWltcG9ydFNjcmlwdCgiY20vY2xvc2VicmFja2V0
cy5qcyIpOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rv
ci5WaWV3fQotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yfQotICogQHBh
cmFtIHs/c3RyaW5nfSB1cmwKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxl
Z2F0ZX0gZGVsZWdhdGUKLSAqLwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yID0g
ZnVuY3Rpb24odXJsLCBkZWxlZ2F0ZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRo
aXMpOwotICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci0gICAgdGhpcy5fdXJsID0gdXJs
OwotCi0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJjbS9jb2RlbWlycm9yLmNzcyIpOwot
ICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygiY20vY21kZXZ0b29scy5jc3MiKTsKLQotICAg
IHRoaXMuX2NvZGVNaXJyb3IgPSB3aW5kb3cuQ29kZU1pcnJvcih0aGlzLmVsZW1lbnQsIHsKLSAg
ICAgICAgbGluZU51bWJlcnM6IHRydWUsCi0gICAgICAgIGd1dHRlcnM6IFsiQ29kZU1pcnJvci1s
aW5lbnVtYmVycyIsICJicmVha3BvaW50cyJdLAotICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVl
LAotICAgICAgICBhdXRvQ2xvc2VCcmFja2V0czogV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0
dGluZ3MudGV4dEVkaXRvclNtYXJ0QnJhY2VzLmlzRW5hYmxlZCgpCi0gICAgfSk7Ci0KLSAgICB2
YXIgaW5kZW50ID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0b3JJbmRlbnQuZ2V0KCk7
Ci0gICAgaWYgKGluZGVudCA9PT0gV2ViSW5zcGVjdG9yLlRleHRVdGlscy5JbmRlbnQuVGFiQ2hh
cmFjdGVyKSB7Ci0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0T3B0aW9uKCJpbmRlbnRXaXRo
VGFicyIsIHRydWUpOwotICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldE9wdGlvbigiaW5kZW50
VW5pdCIsIDQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0T3B0
aW9uKCJpbmRlbnRXaXRoVGFicyIsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5z
ZXRPcHRpb24oImluZGVudFVuaXQiLCBpbmRlbnQubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICB0aGlz
Ll90b2tlbkhpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRv
ci5Ub2tlbkhpZ2hsaWdodGVyKHRoaXMuX2NvZGVNaXJyb3IpOwotICAgIHRoaXMuX2Jsb2NrSW5k
ZW50Q29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IuQmxv
Y2tJbmRlbnRDb250cm9sbGVyKHRoaXMuX2NvZGVNaXJyb3IpOwotICAgIHRoaXMuX2ZpeFdvcmRN
b3ZlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IuRml4V29yZE1v
dmVtZW50KHRoaXMuX2NvZGVNaXJyb3IpOwotCi0gICAgdGhpcy5fY29kZU1pcnJvci5vbigiY2hh
bmdlIiwgdGhpcy5fY2hhbmdlLmJpbmQodGhpcykpOwotICAgIHRoaXMuX2NvZGVNaXJyb3Iub24o
Imd1dHRlckNsaWNrIiwgdGhpcy5fZ3V0dGVyQ2xpY2suYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5f
Y29kZU1pcnJvci5vbigiY3Vyc29yQWN0aXZpdHkiLCB0aGlzLl9jdXJzb3JBY3Rpdml0eS5iaW5k
KHRoaXMpKTsKLSAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwu
YmluZCh0aGlzKSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRt
ZW51IiwgdGhpcy5fY29udGV4dE1lbnUuYmluZCh0aGlzKSk7Ci0KLSAgICB0aGlzLl9sYXN0UmFu
Z2UgPSB0aGlzLnJhbmdlKCk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZC5hZGRTdHls
ZUNsYXNzKCJzb3VyY2UtY29kZSIpOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJm
aWxsIik7Ci0gICAgdGhpcy5tYXJrQXNMYXlvdXRCb3VuZGFyeSgpOwotCi0gICAgdGhpcy5fZWxl
bWVudFRvV2lkZ2V0ID0gbmV3IE1hcCgpOwotICAgIHRoaXMuX25lc3RlZFVwZGF0ZXNDb3VudGVy
ID0gMDsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMu
X2hhbmRsZUVsZW1lbnRGb2N1cy5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50
LnRhYkluZGV4ID0gMDsKLX0KLQotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVy
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbgotICAgICAqIEByZXR1cm4gez97eDogbnVt
YmVyLCB5OiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX0KLSAgICAgKi8KLSAgICBjdXJzb3JQb3Np
dGlvblRvQ29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbikKLSAgICB7Ci0g
ICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX2NvZGVNaXJyb3IubGluZUNvdW50IHx8IGNv
bHVtbiA+IHRoaXMuX2NvZGVNaXJyb3IuZ2V0TGluZShsaW5lTnVtYmVyKS5sZW5ndGggfHwgbGlu
ZU51bWJlciA8IDAgfHwgY29sdW1uIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0g
ICAgICAgIHZhciBtZXRyaWNzID0gdGhpcy5fY29kZU1pcnJvci5jdXJzb3JDb29yZHMoQ29kZU1p
cnJvci5Qb3MobGluZU51bWJlciwgY29sdW1uKSk7Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgIHg6IG1ldHJpY3MubGVmdCwKLSAgICAgICAgICAgIHk6IG1ldHJpY3MudG9wLAotICAg
ICAgICAgICAgaGVpZ2h0OiBtZXRyaWNzLmJvdHRvbSAtIG1ldHJpY3MudG9wCi0gICAgICAgIH07
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4Ci0gICAgICogQHBh
cmFtIHtudW1iZXJ9IHkKLSAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0K
LSAgICAgKi8KLSAgICBjb29yZGluYXRlc1RvQ3Vyc29yUG9zaXRpb246IGZ1bmN0aW9uKHgsIHkp
Ci0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQo
eCwgeSk7Ci0gICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5pc1NlbGZPckRlc2NlbmRh
bnQodGhpcy5fY29kZU1pcnJvci5nZXRXcmFwcGVyRWxlbWVudCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICB2YXIgZ3V0dGVyQm94ID0gdGhpcy5fY29kZU1pcnJvci5nZXRH
dXR0ZXJFbGVtZW50KCkuYm94SW5XaW5kb3coKTsKLSAgICAgICAgaWYgKHggPj0gZ3V0dGVyQm94
LnggJiYgeCA8PSBndXR0ZXJCb3gueCArIGd1dHRlckJveC53aWR0aCAmJgotICAgICAgICAgICAg
eSA+PSBndXR0ZXJCb3gueSAmJiB5IDw9IGd1dHRlckJveC55ICsgZ3V0dGVyQm94LmhlaWdodCkK
LSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgY29vcmRzID0gdGhpcy5fY29k
ZU1pcnJvci5jb29yZHNDaGFyKHtsZWZ0OiB4LCB0b3A6IHl9KTsKLSAgICAgICAgKytjb29yZHMu
Y2g7Ci0gICAgICAgIHJldHVybiB0aGlzLl90b1JhbmdlKGNvb3JkcywgY29vcmRzKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gY29sdW1uCi0gICAgICogQHJldHVybiB7P3tzdGFydENvbHVtbjogbnVt
YmVyLCBlbmRDb2x1bW46IG51bWJlciwgdG9rZW46IHN0cmluZ319Ci0gICAgICovCi0gICAgdG9r
ZW5BdFRleHRQb3NpdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uKQotICAgIHsKLSAg
ICAgICAgaWYgKGxpbmVOdW1iZXIgPCAwIHx8IGxpbmVOdW1iZXIgPj0gdGhpcy5fY29kZU1pcnJv
ci5saW5lQ291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgdG9r
ZW4gPSB0aGlzLl9jb2RlTWlycm9yLmdldFRva2VuQXQoQ29kZU1pcnJvci5Qb3MobGluZU51bWJl
ciwgY29sdW1uIHx8IDEpKTsKLSAgICAgICAgaWYgKCF0b2tlbiB8fCAhdG9rZW4udHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgY29udmVydGVkVHlwZSA9IG51bGw7
Ci0gICAgICAgIGlmICh0b2tlbi50eXBlLnN0YXJ0c1dpdGgoInZhcmlhYmxlIikgfHwgdG9rZW4u
dHlwZS5zdGFydHNXaXRoKCJwcm9wZXJ0eSIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHN0YXJ0Q29sdW1uOiB0b2tlbi5zdGFydCwKLSAgICAgICAgICAgICAgICBl
bmRDb2x1bW46IHRva2VuLmVuZCAtIDEsCi0gICAgICAgICAgICAgICAgdHlwZTogImphdmFzY3Jp
cHQtaWRlbnQiCi0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFu
Z2V9IHRleHRSYW5nZQotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBjb3B5
UmFuZ2U6IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAgICB7Ci0gICAgICAgIHZhciBwb3MgPSB0aGlz
Ll90b1Bvcyh0ZXh0UmFuZ2UpOwotICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5nZXRS
YW5nZShwb3Muc3RhcnQsIHBvcy5lbmQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzQ2xlYW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLmlzQ2xlYW4oKTsKLSAgICB9LAotCi0gICAg
bWFya0NsZWFuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm1h
cmtDbGVhbigpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWlt
ZVR5cGUKLSAgICAgKi8KLSAgICBzZXQgbWltZVR5cGUobWltZVR5cGUpCi0gICAgewotICAgICAg
ICB0aGlzLl9jb2RlTWlycm9yLnNldE9wdGlvbigibW9kZSIsIG1pbWVUeXBlKTsKLSAgICAgICAg
c3dpdGNoKG1pbWVUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlICJ0ZXh0L2h0bWwiOiB0aGlzLl9j
b2RlTWlycm9yLnNldE9wdGlvbigidGhlbWUiLCAid2ViLWluc3BlY3Rvci1odG1sIik7IGJyZWFr
OwotICAgICAgICAgICAgY2FzZSAidGV4dC9jc3MiOiB0aGlzLl9jb2RlTWlycm9yLnNldE9wdGlv
bigidGhlbWUiLCAid2ViLWluc3BlY3Rvci1jc3MiKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
ICJ0ZXh0L2phdmFzY3JpcHQiOiB0aGlzLl9jb2RlTWlycm9yLnNldE9wdGlvbigidGhlbWUiLCAi
d2ViLWluc3BlY3Rvci1qcyIpOyBicmVhazsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWRPbmx5Ci0gICAgICovCi0gICAgc2V0UmVhZE9u
bHk6IGZ1bmN0aW9uKHJlYWRPbmx5KQotICAgIHsKLSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5z
ZXRPcHRpb24oInJlYWRPbmx5IiwgcmVhZE9ubHkgPyAibm9jdXJzb3IiIDogZmFsc2UpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHJl
YWRPbmx5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gISF0aGlzLl9jb2RlTWly
cm9yLmdldE9wdGlvbigicmVhZE9ubHkiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtPYmplY3R9IGhpZ2hsaWdodERlc2NyaXB0b3IKLSAgICAgKi8KLSAgICByZW1vdmVIaWdo
bGlnaHQ6IGZ1bmN0aW9uKGhpZ2hsaWdodERlc2NyaXB0b3IpCi0gICAgewotICAgICAgICBoaWdo
bGlnaHREZXNjcmlwdG9yLmNsZWFyKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
Y3NzQ2xhc3MKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgaGlnaGxpZ2h0
UmFuZ2U6IGZ1bmN0aW9uKHJhbmdlLCBjc3NDbGFzcykKLSAgICB7Ci0gICAgICAgIHZhciBwb3Mg
PSB0aGlzLl90b1BvcyhyYW5nZSk7Ci0gICAgICAgICsrcG9zLmVuZC5jaDsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2NvZGVNaXJyb3IubWFya1RleHQocG9zLnN0YXJ0LCBwb3MuZW5kLCB7Ci0gICAg
ICAgICAgICBjbGFzc05hbWU6IGNzc0NsYXNzLAotICAgICAgICAgICAgc3RhcnRTdHlsZTogY3Nz
Q2xhc3MgKyAiLXN0YXJ0IiwKLSAgICAgICAgICAgIGVuZFN0eWxlOiBjc3NDbGFzcyArICItZW5k
IgotICAgICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7RWxlbWVu
dH0KLSAgICAgKi8KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIGZvY3VzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9jb2RlTWlycm9yLmZvY3VzKCk7Ci0gICAgfSwK
LQotICAgIF9oYW5kbGVFbGVtZW50Rm9jdXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2NvZGVNaXJyb3IuZm9jdXMoKTsKLSAgICB9LAotCi0gICAgYmVnaW5VcGRhdGVzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICArK3RoaXMuX25lc3RlZFVwZGF0ZXNDb3VudGVyOwotICAg
IH0sCi0KLSAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIS0t
dGhpcy5fbmVzdGVkVXBkYXRlc0NvdW50ZXIpOwotICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5yZWZyZXNoKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBs
aW5lTnVtYmVyCi0gICAgICovCi0gICAgcmV2ZWFsTGluZTogZnVuY3Rpb24obGluZU51bWJlcikK
LSAgICB7Ci0gICAgICAgIHZhciBwb3MgPSBDb2RlTWlycm9yLlBvcyhsaW5lTnVtYmVyLCAwKTsK
LSAgICAgICAgdmFyIHRvcExpbmUgPSB0aGlzLl90b3BTY3JvbGxlZExpbmUoKTsKLSAgICAgICAg
dmFyIGJvdHRvbUxpbmUgPSB0aGlzLl9ib3R0b21TY3JvbGxlZExpbmUoKTsKLQotICAgICAgICB2
YXIgbWFyZ2luID0gbnVsbDsKLSAgICAgICAgdmFyIGxpbmVNYXJnaW4gPSAzOwotICAgICAgICB2
YXIgc2Nyb2xsSW5mbyA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0U2Nyb2xsSW5mbygpOwotICAgICAg
ICBpZiAoKGxpbmVOdW1iZXIgPCB0b3BMaW5lICsgbGluZU1hcmdpbikgfHwgKGxpbmVOdW1iZXIg
Pj0gYm90dG9tTGluZSAtIGxpbmVNYXJnaW4pKSB7Ci0gICAgICAgICAgICAvLyBzY3JvbGxJbnRv
VmlldyBjb3VsZCBnZXQgaW50byBpbmZpbml0ZSBsb29wIGlmIG1hcmdpbiBleGNlZWRzIGhhbGYg
b2YgdGhlIGNsaWVudEhlaWdodC4KLSAgICAgICAgICAgIG1hcmdpbiA9IChzY3JvbGxJbmZvLmNs
aWVudEhlaWdodCowLjkvMikgPj4+IDA7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fY29kZU1p
cnJvci5zY3JvbGxJbnRvVmlldyhwb3MsIG1hcmdpbik7Ci0gICAgfSwKLQotICAgIF9ndXR0ZXJD
bGljazogZnVuY3Rpb24oaW5zdGFuY2UsIGxpbmVOdW1iZXIsIGd1dHRlciwgZXZlbnQpCi0gICAg
ewotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5FdmVudHMuR3V0dGVyQ2xpY2ssIHsgbGluZU51bWJlcjogbGluZU51bWJlciwgZXZl
bnQ6IGV2ZW50IH0pOwotICAgIH0sCi0KLSAgICBfY29udGV4dE1lbnU6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250
ZXh0TWVudShldmVudCk7Ci0gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhDbGFzcygiQ29kZU1pcnJvci1ndXR0ZXItZWx0Iik7Ci0gICAgICAg
IGlmICh0YXJnZXQpCi0gICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5wb3B1bGF0ZUxpbmVHdXR0
ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgcGFyc2VJbnQodGFyZ2V0LnRleHRDb250ZW50LCAx
MCkgLSAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUucG9wdWxh
dGVUZXh0QXJlYUNvbnRleHRNZW51KGNvbnRleHRNZW51LCBudWxsKTsKLSAgICAgICAgY29udGV4
dE1lbnUuc2hvdygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
bGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IGNvbmRpdGlvbmFsCi0gICAgICovCi0gICAgYWRkQnJlYWtwb2ludDogZnVu
Y3Rpb24obGluZU51bWJlciwgZGlzYWJsZWQsIGNvbmRpdGlvbmFsKQotICAgIHsKLSAgICAgICAg
dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGVs
ZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVyICsgMTsKLSAgICAgICAgZWxlbWVudC5jbGFz
c05hbWUgPSAiY20tYnJlYWtwb2ludCIgKyAoZGlzYWJsZWQgPyAiIGNtLWJyZWFrcG9pbnQtZGlz
YWJsZWQiIDogIiIpICsgKGNvbmRpdGlvbmFsID8gIiBjbS1icmVha3BvaW50LWNvbmRpdGlvbmFs
IiA6ICIiKTsKLSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRHdXR0ZXJNYXJrZXIobGluZU51
bWJlciwgImJyZWFrcG9pbnRzIiwgZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAgcmVtb3ZlQnJlYWtwb2lu
dDogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iu
c2V0R3V0dGVyTWFya2VyKGxpbmVOdW1iZXIsICJicmVha3BvaW50cyIsIG51bGwpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqLwot
ICAgIHNldEV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAgICAg
ICB0aGlzLl9leGVjdXRpb25MaW5lID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lSGFuZGxlKGxp
bmVOdW1iZXIpOwotICAgICAgICB0aGlzLl9jb2RlTWlycm9yLmFkZExpbmVDbGFzcyh0aGlzLl9l
eGVjdXRpb25MaW5lLCBudWxsLCAiY20tZXhlY3V0aW9uLWxpbmUiKTsKLSAgICB9LAotCi0gICAg
Y2xlYXJFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
ZXhlY3V0aW9uTGluZSkKLSAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IucmVtb3ZlTGluZUNs
YXNzKHRoaXMuX2V4ZWN1dGlvbkxpbmUsIG51bGwsICJjbS1leGVjdXRpb24tbGluZSIpOwotICAg
ICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9uTGluZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVs
ZW1lbnQKLSAgICAgKi8KLSAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBl
bGVtZW50KQotICAgIHsKLSAgICAgICAgdmFyIHdpZGdldCA9IHRoaXMuX2NvZGVNaXJyb3IuYWRk
TGluZVdpZGdldChsaW5lTnVtYmVyLCBlbGVtZW50KTsKLSAgICAgICAgdGhpcy5fZWxlbWVudFRv
V2lkZ2V0LnB1dChlbGVtZW50LCB3aWRnZXQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVu
dAotICAgICAqLwotICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGVs
ZW1lbnQpCi0gICAgewotICAgICAgICB2YXIgd2lkZ2V0ID0gdGhpcy5fZWxlbWVudFRvV2lkZ2V0
LnJlbW92ZShlbGVtZW50KTsKLSAgICAgICAgaWYgKHdpZGdldCkKLSAgICAgICAgICAgIHRoaXMu
X2NvZGVNaXJyb3IucmVtb3ZlTGluZVdpZGdldCh3aWRnZXQpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCi0gICAgICovCi0g
ICAgbWFya0FuZFJldmVhbFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIGlm
IChyYW5nZSkKLSAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHJhbmdlKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAg
ICBoaWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhp
cy5jbGVhckxpbmVIaWdobGlnaHQoKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lID0g
dGhpcy5fY29kZU1pcnJvci5nZXRMaW5lSGFuZGxlKGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAo
IXRoaXMuX2hpZ2hsaWdodGVkTGluZSkKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMu
cmV2ZWFsTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5hZGRMaW5l
Q2xhc3ModGhpcy5faGlnaGxpZ2h0ZWRMaW5lLCBudWxsLCAiY20taGlnaGxpZ2h0Iik7Ci0gICAg
ICAgIHRoaXMuX2NsZWFySGlnaGxpZ2h0VGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5jbGVhckxp
bmVIaWdobGlnaHQuYmluZCh0aGlzKSwgMjAwMCk7Ci0gICAgfSwKLQotICAgIGNsZWFyTGluZUhp
Z2hsaWdodDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NsZWFySGlnaGxp
Z2h0VGltZW91dCkKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckhpZ2hsaWdo
dFRpbWVvdXQpOwotICAgICAgICBkZWxldGUgdGhpcy5fY2xlYXJIaWdobGlnaHRUaW1lb3V0Owot
Ci0gICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0ZWRMaW5lKQotICAgICAgICAgICAgdGhpcy5f
Y29kZU1pcnJvci5yZW1vdmVMaW5lQ2xhc3ModGhpcy5faGlnaGxpZ2h0ZWRMaW5lLCBudWxsLCAi
Y20taGlnaGxpZ2h0Iik7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRlZExpbmU7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxFbGVtZW50Pn0KLSAgICAg
Ki8KLSAgICBlbGVtZW50c1RvUmVzdG9yZVNjcm9sbFBvc2l0aW9uc0ZvcjogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yfSB0ZXh0RWRpdG9yCi0gICAgICovCi0gICAgaW5o
ZXJpdFNjcm9sbFBvc2l0aW9uczogZnVuY3Rpb24odGV4dEVkaXRvcikKLSAgICB7Ci0gICAgfSwK
LQotICAgIG9uUmVzaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLnJlZnJlc2goKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICBlZGl0UmFu
Z2U6IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KQotICAgIHsKLSAgICAgICAgdmFyIHBvcyA9IHRoaXMu
X3RvUG9zKHJhbmdlKTsKLSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5yZXBsYWNlUmFuZ2UodGV4
dCwgcG9zLnN0YXJ0LCBwb3MuZW5kKTsKLSAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fdG9S
YW5nZShwb3Muc3RhcnQsIHRoaXMuX2NvZGVNaXJyb3IucG9zRnJvbUluZGV4KHRoaXMuX2NvZGVN
aXJyb3IuaW5kZXhGcm9tUG9zKHBvcy5zdGFydCkgKyB0ZXh0Lmxlbmd0aCkpOwotICAgICAgICB0
aGlzLl9kZWxlZ2F0ZS5vblRleHRDaGFuZ2VkKHJhbmdlLCBuZXdSYW5nZSk7Ci0gICAgICAgIHJl
dHVybiBuZXdSYW5nZTsKLSAgICB9LAotCi0gICAgX2NoYW5nZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdmFyIHdpZGdldHMgPSB0aGlzLl9lbGVtZW50VG9XaWRnZXQudmFsdWVzKCk7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkZ2V0cy5sZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIHRoaXMuX2NvZGVNaXJyb3IucmVtb3ZlTGluZVdpZGdldCh3aWRnZXRzW2ldKTsKLSAgICAg
ICAgdGhpcy5fZWxlbWVudFRvV2lkZ2V0LmNsZWFyKCk7Ci0KLSAgICAgICAgdmFyIG5ld1Jhbmdl
ID0gdGhpcy5yYW5nZSgpOwotICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRleHRDaGFuZ2VkKHRo
aXMuX2xhc3RSYW5nZSwgbmV3UmFuZ2UpOwotICAgICAgICB0aGlzLl9sYXN0UmFuZ2UgPSBuZXdS
YW5nZTsKLSAgICB9LAotCi0gICAgX2N1cnNvckFjdGl2aXR5OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcigiYW5jaG9yIik7
Ci0gICAgICAgIHZhciBlbmQgPSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcigiaGVhZCIpOwot
ICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZWxlY3Rpb25DaGFuZ2VkKHRoaXMuX3RvUmFuZ2Uoc3Rh
cnQsIGVuZCkpOwotICAgIH0sCi0KLSAgICBfY29vcmRzQ2hhckxvY2FsOiBmdW5jdGlvbihjb29y
ZHMpCi0gICAgewotICAgICAgICB2YXIgdG9wID0gY29vcmRzLnRvcDsKLSAgICAgICAgdmFyIHRv
dGFsTGluZXMgPSB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgpOwotICAgICAgICB2YXIgYmVn
aW4gPSAwOwotICAgICAgICB2YXIgZW5kID0gdG90YWxMaW5lcyAtIDE7Ci0gICAgICAgIHdoaWxl
IChlbmQgLSBiZWdpbiA+IDEpIHsKLSAgICAgICAgICAgIHZhciBtaWRkbGUgPSAoYmVnaW4gKyBl
bmQpID4+IDE7Ci0gICAgICAgICAgICB2YXIgY29vcmRzID0gdGhpcy5fY29kZU1pcnJvci5jaGFy
Q29vcmRzKENvZGVNaXJyb3IuUG9zKG1pZGRsZSwgMCksICJsb2NhbCIpOwotICAgICAgICAgICAg
aWYgKGNvb3Jkcy50b3AgPj0gdG9wKQotICAgICAgICAgICAgICAgIGVuZCA9IG1pZGRsZTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiZWdpbiA9IG1pZGRsZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBlbmQ7Ci0gICAgfSwKLQotICAgIF90b3BTY3JvbGxlZExpbmU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzY3JvbGxJbmZvID0gdGhpcy5fY29kZU1p
cnJvci5nZXRTY3JvbGxJbmZvKCk7Ci0gICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENvZGVNaXJy
b3IncyBjb29yZHNDaGFyIGluY29ycmVjdCByZXN1bHQgZm9yICJsb2NhbCIgbW9kZS4KLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2Nvb3Jkc0NoYXJMb2NhbChzY3JvbGxJbmZvKTsKLSAgICB9LAotCi0g
ICAgX2JvdHRvbVNjcm9sbGVkTGluZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNj
cm9sbEluZm8gPSB0aGlzLl9jb2RlTWlycm9yLmdldFNjcm9sbEluZm8oKTsKLSAgICAgICAgc2Ny
b2xsSW5mby50b3AgKz0gc2Nyb2xsSW5mby5jbGllbnRIZWlnaHQ7Ci0gICAgICAgIC8vIFdvcmth
cm91bmQgZm9yIENvZGVNaXJyb3IncyBjb29yZHNDaGFyIGluY29ycmVjdCByZXN1bHQgZm9yICJs
b2NhbCIgbW9kZS4KLSAgICAgICAgcmV0dXJuIHRoaXMuX2Nvb3Jkc0NoYXJMb2NhbChzY3JvbGxJ
bmZvKTsKLSAgICB9LAotCi0gICAgX3Njcm9sbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fZGVsZWdhdGUuc2Nyb2xsQ2hhbmdlZCh0aGlzLl90b3BTY3JvbGxlZExpbmUoKSk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAg
ICovCi0gICAgc2Nyb2xsVG9MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAg
ICAgZnVuY3Rpb24gcGVyZm9ybVNjcm9sbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBw
b3MgPSBDb2RlTWlycm9yLlBvcyhsaW5lTnVtYmVyLCAwKTsKLSAgICAgICAgICAgIHZhciBjb29y
ZHMgPSB0aGlzLl9jb2RlTWlycm9yLmNoYXJDb29yZHMocG9zLCAibG9jYWwiKTsKLSAgICAgICAg
ICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2Nyb2xsVG8oMCwgY29vcmRzLnRvcCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzZXRUaW1lb3V0KHBlcmZvcm1TY3JvbGwuYmluZCh0aGlzKSwgMCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9Ci0g
ICAgICovCi0gICAgc2VsZWN0aW9uOiBmdW5jdGlvbih0ZXh0UmFuZ2UpCi0gICAgewotICAgICAg
ICB2YXIgc3RhcnQgPSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcih0cnVlKTsKLSAgICAgICAg
dmFyIGVuZCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKGZhbHNlKTsKLQotICAgICAgICBp
ZiAoc3RhcnQubGluZSA+IGVuZC5saW5lIHx8IChzdGFydC5saW5lID09IGVuZC5saW5lICYmIHN0
YXJ0LmNoID4gZW5kLmNoKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1JhbmdlKGVuZCwg
c3RhcnQpOwotCi0gICAgICAgIHJldHVybiB0aGlzLl90b1JhbmdlKHN0YXJ0LCBlbmQpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlP30K
LSAgICAgKi8KLSAgICBsYXN0U2VsZWN0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fbGFzdFNlbGVjdGlvbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSB0ZXh0UmFuZ2UKLSAgICAgKi8KLSAgICBzZXRT
ZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHBl
cmZvcm1TZWxlY3Rpb25TZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9sYXN0U2Vs
ZWN0aW9uID0gdGV4dFJhbmdlOwotICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuX3RvUG9zKHRl
eHRSYW5nZSk7Ci0gICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldFNlbGVjdGlvbihwb3Mu
c3RhcnQsIHBvcy5lbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0VGltZW91dChwZXJmb3Jt
U2VsZWN0aW9uU2V0LmJpbmQodGhpcyksIDApOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gdGV4dAotICAgICAqLwotICAgIHNldFRleHQ6IGZ1bmN0aW9uKHRleHQp
Ci0gICAgewotICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldFZhbHVlKHRleHQpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgdGV4dDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuZ2V0VmFs
dWUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRl
eHRSYW5nZX0KLSAgICAgKi8KLSAgICByYW5nZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIGxpbmVDb3VudCA9IHRoaXMubGluZXNDb3VudDsKLSAgICAgICAgdmFyIGxhc3RMaW5lID0g
dGhpcy5fY29kZU1pcnJvci5nZXRMaW5lKGxpbmVDb3VudCAtIDEpOwotICAgICAgICByZXR1cm4g
dGhpcy5fdG9SYW5nZSh7IGxpbmU6IDAsIGNoOiAwIH0sIHsgbGluZTogbGluZUNvdW50IC0gMSwg
Y2g6IGxhc3RMaW5lLmxlbmd0aCB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0g
ICAgbGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9jb2RlTWlycm9yLmdldExpbmUobGluZU51bWJlcik7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgbGluZXNDb3VudCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gbmFtZQotICAgICAqIEBwYXJhbSB7T2JqZWN0P30gdmFsdWUKLSAgICAgKi8KLSAgICBz
ZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxpbmUsIG5hbWUsIHZhbHVlKQotICAgIHsKLSAgICAgICAg
dmFyIGhhbmRsZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0TGluZUhhbmRsZShsaW5lKTsKLSAgICAg
ICAgaWYgKGhhbmRsZS5hdHRyaWJ1dGVzID09PSB1bmRlZmluZWQpIGhhbmRsZS5hdHRyaWJ1dGVz
ID0ge307Ci0gICAgICAgIGhhbmRsZS5hdHRyaWJ1dGVzW25hbWVdID0gdmFsdWU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gdmFsdWUKLSAgICAgKi8K
LSAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxpbmUsIG5hbWUpCi0gICAgewotICAgICAgICB2
YXIgaGFuZGxlID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lSGFuZGxlKGxpbmUpOwotICAgICAg
ICByZXR1cm4gaGFuZGxlLmF0dHJpYnV0ZXMgJiYgaGFuZGxlLmF0dHJpYnV0ZXNbbmFtZV0gIT09
IHVuZGVmaW5lZCA/IGhhbmRsZS5hdHRyaWJ1dGVzW25hbWVdIDogbnVsbDsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gbmFtZQotICAgICAqLwotICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFt
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBoYW5kbGUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmVI
YW5kbGUobGluZSk7Ci0gICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLmF0dHJpYnV0ZXMpCi0g
ICAgICAgICAgICBkZWxldGUgaGFuZGxlLmF0dHJpYnV0ZXNbbmFtZV07Ci0gICAgfSwKLQotICAg
IF90b1BvczogZnVuY3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgc3RhcnQ6IHtsaW5lOiByYW5nZS5zdGFydExpbmUsIGNoOiByYW5nZS5zdGFydENvbHVt
bn0sCi0gICAgICAgICAgICBlbmQ6IHtsaW5lOiByYW5nZS5lbmRMaW5lLCBjaDogcmFuZ2UuZW5k
Q29sdW1ufQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF90b1JhbmdlOiBmdW5jdGlvbihzdGFy
dCwgZW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
KHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCBlbmQubGluZSwgZW5kLmNoKTsKLSAgICB9LAotCi0gICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KLQotV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUZXh0RWRpdG9yLlRva2VuSGlnaGxpZ2h0ZXIgPSBmdW5jdGlvbihjb2RlTWly
cm9yKQotewotICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOwotICAgIHRoaXMuX2Nv
ZGVNaXJyb3Iub24oImN1cnNvckFjdGl2aXR5IiwgdGhpcy5fY3Vyc29yQ2hhbmdlLmJpbmQodGhp
cykpOwotfQotCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IuVG9rZW5IaWdobGln
aHRlci5wcm90b3R5cGUgPSB7Ci0gICAgX2N1cnNvckNoYW5nZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24odGhpcy5fcmVtb3ZlSGlnaGxpZ2h0
LmJpbmQodGhpcykpOwotICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLl9jb2RlTWly
cm9yLmdldEN1cnNvcigic3RhcnQiKTsKLSAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHRoaXMu
X2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJlbmQiKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0
LmxpbmUgIT09IHNlbGVjdGlvbkVuZC5saW5lKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoc2VsZWN0aW9uU3RhcnQuY2ggPT09IHNlbGVjdGlvbkVuZC5jaCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB2YXIgc2VsZWN0ZWRUZXh0ID0gdGhpcy5fY29kZU1pcnJvci5n
ZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKHRoaXMuX2lzV29yZChzZWxlY3RlZFRleHQsIHNl
bGVjdGlvblN0YXJ0LmxpbmUsIHNlbGVjdGlvblN0YXJ0LmNoLCBzZWxlY3Rpb25FbmQuY2gpKQot
ICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24odGhpcy5fYWRkSGlnaGxpZ2h0
LmJpbmQodGhpcywgc2VsZWN0ZWRUZXh0LCBzZWxlY3Rpb25TdGFydCkpOwotICAgIH0sCi0KLSAg
ICBfaXNXb3JkOiBmdW5jdGlvbihzZWxlY3RlZFRleHQsIGxpbmVOdW1iZXIsIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4pCi0gICAgewotICAgICAgICB2YXIgbGluZSA9IHRoaXMuX2NvZGVNaXJyb3Iu
Z2V0TGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgdmFyIGxlZnRCb3VuZCA9IHN0YXJ0Q29sdW1u
ID09PSAwIHx8ICFXZWJJbnNwZWN0b3IuVGV4dFV0aWxzLmlzV29yZENoYXIobGluZS5jaGFyQXQo
c3RhcnRDb2x1bW4gLSAxKSk7Ci0gICAgICAgIHZhciByaWdodEJvdW5kID0gZW5kQ29sdW1uID09
PSBsaW5lLmxlbmd0aCB8fCAhV2ViSW5zcGVjdG9yLlRleHRVdGlscy5pc1dvcmRDaGFyKGxpbmUu
Y2hhckF0KGVuZENvbHVtbikpOwotICAgICAgICByZXR1cm4gbGVmdEJvdW5kICYmIHJpZ2h0Qm91
bmQgJiYgV2ViSW5zcGVjdG9yLlRleHRVdGlscy5pc1dvcmQoc2VsZWN0ZWRUZXh0KTsKLSAgICB9
LAotCi0gICAgX3JlbW92ZUhpZ2hsaWdodDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX2hpZ2hsaWdodERlc2NyaXB0b3IpIHsKLSAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJy
b3IucmVtb3ZlT3ZlcmxheSh0aGlzLl9oaWdobGlnaHREZXNjcmlwdG9yLm92ZXJsYXkpOwotICAg
ICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5yZW1vdmVMaW5lQ2xhc3ModGhpcy5faGlnaGxpZ2h0
RGVzY3JpcHRvci5zZWxlY3Rpb25TdGFydC5saW5lLCAid3JhcCIsICJjbS1saW5lLXdpdGgtc2Vs
ZWN0aW9uIik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5faGlnaGxpZ2h0RGVzY3JpcHRvcjsK
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfYWRkSGlnaGxpZ2h0OiBmdW5jdGlvbih0b2tlbiwg
c2VsZWN0aW9uU3RhcnQpCi0gICAgewotICAgICAgICBjb25zdCB0b2tlbkZpcnN0Q2hhciA9IHRv
a2VuLmNoYXJBdCgwKTsKLSAgICAgICAgZnVuY3Rpb24gbmV4dFRva2VuKHN0cmVhbSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0b2tlbikgJiYgKHN0cmVhbS5lb2wo
KSB8fCAhV2ViSW5zcGVjdG9yLlRleHRVdGlscy5pc1dvcmRDaGFyKHN0cmVhbS5wZWVrKCkpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLmNvbHVtbigpID09PSBzZWxlY3Rpb25TdGFy
dC5jaCA/ICJ0b2tlbi1oaWdobGlnaHQgY29sdW1uLXdpdGgtc2VsZWN0aW9uIiA6ICJ0b2tlbi1o
aWdobGlnaHQiOwotCi0gICAgICAgICAgICB2YXIgZWF0ZW5DaGFyOwotICAgICAgICAgICAgZG8g
ewotICAgICAgICAgICAgICAgIGVhdGVuQ2hhciA9IHN0cmVhbS5uZXh0KCk7Ci0gICAgICAgICAg
ICB9IHdoaWxlIChlYXRlbkNoYXIgJiYgKFdlYkluc3BlY3Rvci5UZXh0VXRpbHMuaXNXb3JkQ2hh
cihlYXRlbkNoYXIpIHx8IHN0cmVhbS5wZWVrKCkgIT09IHRva2VuRmlyc3RDaGFyKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgb3ZlcmxheU1vZGUgPSB7Ci0gICAgICAgICAgICB0b2tlbjog
bmV4dFRva2VuCi0gICAgICAgIH07Ci0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3IuYWRkT3Zlcmxh
eShvdmVybGF5TW9kZSk7Ci0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3IuYWRkTGluZUNsYXNzKHNl
bGVjdGlvblN0YXJ0LmxpbmUsICJ3cmFwIiwgImNtLWxpbmUtd2l0aC1zZWxlY3Rpb24iKQotICAg
ICAgICB0aGlzLl9oaWdobGlnaHREZXNjcmlwdG9yID0gewotICAgICAgICAgICAgb3ZlcmxheTog
b3ZlcmxheU1vZGUsCi0gICAgICAgICAgICBzZWxlY3Rpb25TdGFydDogc2VsZWN0aW9uU3RhcnQK
LSAgICAgICAgfTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRv
ci5CbG9ja0luZGVudENvbnRyb2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9yKQotewotICAgIGNv
ZGVNaXJyb3IuYWRkS2V5TWFwKHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRl
eHRFZGl0b3IuQmxvY2tJbmRlbnRDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBuYW1lOiAi
YmxvY2tJbmRlbnRLZXltYXAiLAotCi0gICAgRW50ZXI6IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCi0g
ICAgewotICAgICAgICBpZiAoY29kZU1pcnJvci5zb21ldGhpbmdTZWxlY3RlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAgdmFyIGN1cnNvciA9IGNvZGVN
aXJyb3IuZ2V0Q3Vyc29yKCk7Ci0gICAgICAgIHZhciBsaW5lID0gY29kZU1pcnJvci5nZXRMaW5l
KGN1cnNvci5saW5lKTsKLSAgICAgICAgaWYgKGxpbmUuc3Vic3RyKGN1cnNvci5jaCAtIDEsIDIp
ID09PSAie30iKSB7Ci0gICAgICAgICAgICBjb2RlTWlycm9yLmV4ZWNDb21tYW5kKCJuZXdsaW5l
QW5kSW5kZW50Iik7Ci0gICAgICAgICAgICBjb2RlTWlycm9yLnNldEN1cnNvcihjdXJzb3IpOwot
ICAgICAgICAgICAgY29kZU1pcnJvci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAg
fQotfQotCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IuRml4V29yZE1vdmVtZW50
ID0gZnVuY3Rpb24oY29kZU1pcnJvcikKLXsKLSAgICBmdW5jdGlvbiBtb3ZlTGVmdChzaGlmdCwg
Y29kZU1pcnJvcikKLSAgICB7Ci0gICAgICAgIHZhciBjdXJzb3IgPSBjb2RlTWlycm9yLmdldEN1
cnNvcigiaGVhZCIpOwotICAgICAgICBpZiAoY3Vyc29yLmNoICE9PSAwIHx8IGN1cnNvci5saW5l
ID09PSAwKQotICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAgY29k
ZU1pcnJvci5zZXRFeHRlbmRpbmcoc2hpZnQpOwotICAgICAgICBjb2RlTWlycm9yLmV4ZWNDb21t
YW5kKCJnb0xpbmVVcCIpOwotICAgICAgICBjb2RlTWlycm9yLmV4ZWNDb21tYW5kKCJnb0xpbmVF
bmQiKQotICAgICAgICBjb2RlTWlycm9yLnNldEV4dGVuZGluZyhmYWxzZSk7Ci0gICAgfQotICAg
IGZ1bmN0aW9uIG1vdmVSaWdodChzaGlmdCwgY29kZU1pcnJvcikKLSAgICB7Ci0gICAgICAgIHZh
ciBjdXJzb3IgPSBjb2RlTWlycm9yLmdldEN1cnNvcigiaGVhZCIpOwotICAgICAgICB2YXIgbGlu
ZSA9IGNvZGVNaXJyb3IuZ2V0TGluZShjdXJzb3IubGluZSk7Ci0gICAgICAgIGlmIChjdXJzb3Iu
Y2ggIT09IGxpbmUubGVuZ3RoIHx8IGN1cnNvci5saW5lICsgMSA9PT0gY29kZU1pcnJvci5saW5l
Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAgIGNv
ZGVNaXJyb3Iuc2V0RXh0ZW5kaW5nKHNoaWZ0KTsKLSAgICAgICAgY29kZU1pcnJvci5leGVjQ29t
bWFuZCgiZ29MaW5lRG93biIpOwotICAgICAgICBjb2RlTWlycm9yLmV4ZWNDb21tYW5kKCJnb0xp
bmVTdGFydCIpOwotICAgICAgICBjb2RlTWlycm9yLnNldEV4dGVuZGluZyhmYWxzZSk7Ci0gICAg
fQotCi0gICAgdmFyIG1vZGlmaWVyS2V5ID0gV2ViSW5zcGVjdG9yLmlzTWFjKCkgPyAiQWx0IiA6
ICJDdHJsIjsKLSAgICB2YXIgbGVmdEtleSA9IG1vZGlmaWVyS2V5ICsgIi1MZWZ0IjsKLSAgICB2
YXIgcmlnaHRLZXkgPSBtb2RpZmllcktleSArICItUmlnaHQiOwotICAgIHZhciBrZXlNYXAgPSB7
fTsKLSAgICBrZXlNYXBbbGVmdEtleV0gPSBtb3ZlTGVmdC5iaW5kKHRoaXMsIGZhbHNlKTsKLSAg
ICBrZXlNYXBbcmlnaHRLZXldID0gbW92ZVJpZ2h0LmJpbmQodGhpcywgZmFsc2UpOwotICAgIGtl
eU1hcFsiU2hpZnQtIiArIGxlZnRLZXldID0gbW92ZUxlZnQuYmluZCh0aGlzLCB0cnVlKTsKLSAg
ICBrZXlNYXBbIlNoaWZ0LSIgKyByaWdodEtleV0gPSBtb3ZlUmlnaHQuYmluZCh0aGlzLCB0cnVl
KTsKLSAgICBjb2RlTWlycm9yLmFkZEtleU1hcChrZXlNYXApOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkyNzQxYTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Db2xvci5qcworKysgL2Rldi9udWxsCkBAIC0xLDgyOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBEb24ndCBjYWxsIGRpcmVjdGx5
LCB1c2UgV2ViSW5zcGVjdG9yLkNvbG9yLnBhcnNlKCkuIAotICogQGNvbnN0cnVjdG9yIAotICov
Ci1XZWJJbnNwZWN0b3IuQ29sb3IgPSBmdW5jdGlvbihzdHIpCi17Ci0gICAgdGhpcy52YWx1ZSA9
IHN0cjsKLX0KLQotV2ViSW5zcGVjdG9yLkNvbG9yLnBhcnNlID0gZnVuY3Rpb24oc3RyKQotewot
ICAgIHZhciBtYXliZUNvbG9yID0gbmV3IFdlYkluc3BlY3Rvci5Db2xvcihzdHIpOwotICAgIHJl
dHVybiBtYXliZUNvbG9yLl9wYXJzZSgpID8gbWF5YmVDb2xvciA6IG51bGw7Ci19Ci0vKioKLSAq
IEBwYXJhbSB7bnVtYmVyPX0gYQotICovCi1XZWJJbnNwZWN0b3IuQ29sb3IuZnJvbVJHQkEgPSBm
dW5jdGlvbihyLCBnLCBiLCBhKQotewotICAgIHJldHVybiBXZWJJbnNwZWN0b3IuQ29sb3IucGFy
c2UoInJnYmEoIiArIHIgKyAiLCIgKyBnICsgIiwiICsgYiArICIsIiArICh0eXBlb2YgYSA9PT0g
InVuZGVmaW5lZCIgPyAxIDogYSkgKyAiKSIpOwotfQotCi1XZWJJbnNwZWN0b3IuQ29sb3IuZnJv
bVJHQiA9IGZ1bmN0aW9uKHIsIGcsIGIpCi17Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Db2xv
ci5wYXJzZSgicmdiKCIgKyByICsgIiwiICsgZyArICIsIiArIGIgKyAiKSIpOwotfQotCi1XZWJJ
bnNwZWN0b3IuQ29sb3IucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0
cmluZ30KLSAgICAgKi8KLSAgICBnZXQgc2hvcnRoZXgoKQotICAgIHsKLSAgICAgICAgaWYgKCJf
c2hvcnQiIGluIHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hvcnQ7Ci0KLSAgICAg
ICAgaWYgKCF0aGlzLnNpbXBsZSkKLSAgICAgICAgICAgIHJldHVybiAiIjsKLQotICAgICAgICB2
YXIgaGV4ID0gdGhpcy5oZXg7Ci0gICAgICAgIGlmIChoZXguY2hhckF0KDApID09PSBoZXguY2hh
ckF0KDEpICYmIGhleC5jaGFyQXQoMikgPT09IGhleC5jaGFyQXQoMykgJiYgaGV4LmNoYXJBdCg0
KSA9PT0gaGV4LmNoYXJBdCg1KSkKLSAgICAgICAgICAgIHRoaXMuX3Nob3J0ID0gaGV4LmNoYXJB
dCgwKSArIGhleC5jaGFyQXQoMikgKyBoZXguY2hhckF0KDQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0aGlzLl9zaG9ydCA9IGhleDsKLQotICAgICAgICByZXR1cm4gdGhpcy5fc2hvcnQ7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAg
ICBnZXQgaGV4KCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5zaW1wbGUpCi0gICAgICAgICAg
ICByZXR1cm4gIiI7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuX2hleDsKLSAgICB9LAotCi0gICAg
c2V0IGhleCh4KQotICAgIHsKLSAgICAgICAgdGhpcy5faGV4ID0geDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICovCi0gICAgZ2V0IHJn
YigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmdiKQotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3JnYjsKLQotICAgICAgICBpZiAodGhpcy5zaW1wbGUpCi0gICAgICAgICAgICB0aGlzLl9y
Z2IgPSB0aGlzLl9oZXhUb1JHQih0aGlzLmhleCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgdmFyIHJnYmEgPSB0aGlzLnJnYmE7Ci0gICAgICAgICAgICB0aGlzLl9yZ2IgPSBbcmdiYVsw
XSwgcmdiYVsxXSwgcmdiYVsyXV07Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5f
cmdiOwotICAgIH0sCi0KLSAgICBzZXQgcmdiKHgpCi0gICAgewotICAgICAgICB0aGlzLl9yZ2Ig
PSB4OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0K
LSAgICAgKi8KLSAgICBnZXQgaHNsKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9oc2wpCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5faHNsOwotCi0gICAgICAgIHRoaXMuX2hzbCA9IHRoaXMu
X3JnYlRvSFNMKHRoaXMucmdiKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2hzbDsKLSAgICB9LAot
Ci0gICAgc2V0IGhzbCh4KQotICAgIHsKLSAgICAgICAgdGhpcy5faHNsID0geDsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGdldCBuaWNr
bmFtZSgpCi0gICAgewotICAgICAgICBpZiAodHlwZW9mIHRoaXMuX25pY2tuYW1lICE9PSAidW5k
ZWZpbmVkIikgLy8gd291bGQgYmUgc2V0IG9uIHBhcnNlIGlmIHRoZXJlIHdhcyBhIG5pY2tuYW1l
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmlja25hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJldHVybiAiIjsKLSAgICB9LAotCi0gICAgc2V0IG5pY2tuYW1lKHgpCi0gICAgewot
ICAgICAgICB0aGlzLl9uaWNrbmFtZSA9IHg7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge0FycmF5LjxudW1iZXI+fQotICAgICAqLwotICAgIGdldCByZ2JhKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9yZ2JhOwotICAgIH0sCi0KLSAgICBzZXQgcmdiYSh4KQotICAg
IHsKLSAgICAgICAgdGhpcy5fcmdiYSA9IHg7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge0FycmF5LjxudW1iZXI+fQotICAgICAqLwotICAgIGdldCBoc2xhKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9oc2xhOwotICAgIH0sCi0KLSAgICBzZXQgaHNsYSh4KQotICAg
IHsKLSAgICAgICAgdGhpcy5faHNsYSA9IHg7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaGFzU2hvcnRIZXg6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHZhciBzaG9ydGhleCA9IHRoaXMuc2hvcnRoZXg7Ci0gICAgICAgIHJldHVy
biAoISFzaG9ydGhleCAmJiBzaG9ydGhleC5sZW5ndGggPT09IDMpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgdG9TdHJpbmc6IGZ1bmN0
aW9uKGZvcm1hdCkKLSAgICB7Ci0gICAgICAgIGlmICghZm9ybWF0KQotICAgICAgICAgICAgZm9y
bWF0ID0gdGhpcy5mb3JtYXQ7Ci0KLSAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAg
ICAgIGNhc2UgIm9yaWdpbmFsIjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsK
LSAgICAgICAgICAgIGNhc2UgInJnYiI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJyZ2IoIiAr
IHRoaXMucmdiLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICAgICAgICBjYXNlICJyZ2JhIjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gInJnYmEoIiArIHRoaXMucmdiYS5qb2luKCIsICIpICsgIiki
OwotICAgICAgICAgICAgY2FzZSAiaHNsIjoKLSAgICAgICAgICAgICAgICB2YXIgaHNsID0gdGhp
cy5oc2w7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJoc2woIiArIGhzbFswXSArICIsICIgKyBo
c2xbMV0gKyAiJSwgIiArIGhzbFsyXSArICIlKSI7Ci0gICAgICAgICAgICBjYXNlICJoc2xhIjoK
LSAgICAgICAgICAgICAgICB2YXIgaHNsYSA9IHRoaXMuaHNsYTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gImhzbGEoIiArIGhzbGFbMF0gKyAiLCAiICsgaHNsYVsxXSArICIlLCAiICsgaHNsYVsy
XSArICIlLCAiICsgaHNsYVszXSArICIpIjsKLSAgICAgICAgICAgIGNhc2UgImhleCI6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICIjIiArIHRoaXMuaGV4OwotICAgICAgICAgICAgY2FzZSAic2hv
cnRoZXgiOgotICAgICAgICAgICAgICAgIHJldHVybiAiIyIgKyB0aGlzLnNob3J0aGV4OwotICAg
ICAgICAgICAgY2FzZSAibmlja25hbWUiOgotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5p
Y2tuYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICJpbnZhbGlkIGNvbG9yIGZvcm1h
dDogIiArIGZvcm1hdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7T2JqZWN0
fQotICAgICAqLwotICAgIHRvUHJvdG9jb2xSR0JBOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fcHJvdG9jb2xSR0JBKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3Rv
Y29sUkdCQTsKLQotICAgICAgICB2YXIgY29tcG9uZW50cyA9IHRoaXMucmdiYTsKLSAgICAgICAg
aWYgKGNvbXBvbmVudHMpCi0gICAgICAgICAgICB0aGlzLl9wcm90b2NvbFJHQkEgPSB7IHI6IE51
bWJlcihjb21wb25lbnRzWzBdKSwgZzogTnVtYmVyKGNvbXBvbmVudHNbMV0pLCBiOiBOdW1iZXIo
Y29tcG9uZW50c1syXSksIGE6IE51bWJlcihjb21wb25lbnRzWzNdKSB9OwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGNvbXBvbmVudHMgPSB0aGlzLnJnYjsKLSAgICAgICAgICAgIHRoaXMu
X3Byb3RvY29sUkdCQSA9IHsgcjogTnVtYmVyKGNvbXBvbmVudHNbMF0pLCBnOiBOdW1iZXIoY29t
cG9uZW50c1sxXSksIGI6IE51bWJlcihjb21wb25lbnRzWzJdKSB9OwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9wcm90b2NvbFJHQkE7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSB2YWx1ZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4KLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbWF4Ci0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwot
ICAgIF9jbGFtcDogZnVuY3Rpb24odmFsdWUsIG1pbiwgbWF4KQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlIDwgbWluKQotICAgICAgICAgICAgcmV0dXJuIG1pbjsKLSAgICAgICAgaWYgKHZhbHVl
ID4gbWF4KQotICAgICAgICAgICAgcmV0dXJuIG1heDsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJnYlZhbHVl
Ci0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIF9pbmRpdmlkdWFsUkdCVmFs
dWVUb0Zsb2F0VmFsdWU6IGZ1bmN0aW9uKHJnYlZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHR5
cGVvZiByZ2JWYWx1ZSA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xh
bXAocmdiVmFsdWUsIDAsIDI1NSk7Ci0KLSAgICAgICAgaWYgKHJnYlZhbHVlLmluZGV4T2YoIiUi
KSA9PT0gLTEpIHsKLSAgICAgICAgICAgIHZhciBpbnRWYWx1ZSA9IHBhcnNlSW50KHJnYlZhbHVl
LCAxMCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xhbXAoaW50VmFsdWUsIDAsIDI1NSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcGVyY2VudFZhbHVlID0gcGFyc2VGbG9hdChyZ2JW
YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jbGFtcChwZXJjZW50VmFsdWUsIDAsIDEwMCkg
KiAyLjU1OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9
IHJnYlZhbHVlCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIF9pbmRpdmlk
dWFsUkdCVmFsdWVUb0hleFZhbHVlOiBmdW5jdGlvbihyZ2JWYWx1ZSkKLSAgICB7Ci0gICAgICAg
IHZhciBmbG9hdFZhbHVlID0gdGhpcy5faW5kaXZpZHVhbFJHQlZhbHVlVG9GbG9hdFZhbHVlKHJn
YlZhbHVlKTsKLSAgICAgICAgdmFyIGhleCA9IE1hdGgucm91bmQoZmxvYXRWYWx1ZSkudG9TdHJp
bmcoMTYpOwotICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSkKLSAgICAgICAgICAgIGhleCA9
ICIwIiArIGhleDsKLSAgICAgICAgcmV0dXJuIGhleDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcmdiCi0gICAgICogQHJldHVybiB7c3RyaW5nfQot
ICAgICAqLwotICAgIF9yZ2JTdHJpbmdzVG9IZXg6IGZ1bmN0aW9uKHJnYikKLSAgICB7Ci0gICAg
ICAgIHZhciByID0gdGhpcy5faW5kaXZpZHVhbFJHQlZhbHVlVG9IZXhWYWx1ZShyZ2JbMF0pOwot
ICAgICAgICB2YXIgZyA9IHRoaXMuX2luZGl2aWR1YWxSR0JWYWx1ZVRvSGV4VmFsdWUocmdiWzFd
KTsKLSAgICAgICAgdmFyIGIgPSB0aGlzLl9pbmRpdmlkdWFsUkdCVmFsdWVUb0hleFZhbHVlKHJn
YlsyXSk7Ci0gICAgICAgIHJldHVybiAociArIGcgKyBiKS50b1VwcGVyQ2FzZSgpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByZ2IKLSAgICAgKiBA
cmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgX3JnYlRvSGV4OiBmdW5jdGlvbihyZ2IpCi0g
ICAgewotICAgICAgICB2YXIgciA9IHRoaXMuX2luZGl2aWR1YWxSR0JWYWx1ZVRvSGV4VmFsdWUo
cmdiWzBdKTsKLSAgICAgICAgdmFyIGcgPSB0aGlzLl9pbmRpdmlkdWFsUkdCVmFsdWVUb0hleFZh
bHVlKHJnYlsxXSk7Ci0gICAgICAgIHZhciBiID0gdGhpcy5faW5kaXZpZHVhbFJHQlZhbHVlVG9I
ZXhWYWx1ZShyZ2JbMl0pOwotICAgICAgICByZXR1cm4gKHIgKyBnICsgYikudG9VcHBlckNhc2Uo
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGhleAotICAgICAq
IEByZXR1cm4ge0FycmF5LjxudW1iZXI+fQotICAgICAqLwotICAgIF9oZXhUb1JHQjogZnVuY3Rp
b24oaGV4KQotICAgIHsKLSAgICAgICAgdmFyIHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAs
MiksIDE2KTsKLSAgICAgICAgdmFyIGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsNCksIDE2
KTsKLSAgICAgICAgdmFyIGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsNiksIDE2KTsKLQot
ICAgICAgICByZXR1cm4gW3IsIGcsIGJdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge0FycmF5LjxzdHJpbmd8bnVtYmVyPn0gcmdiCi0gICAgICogQHJldHVybiB7QXJyYXkuPG51
bWJlcj59Ci0gICAgICovCi0gICAgX3JnYlRvSFNMOiBmdW5jdGlvbihyZ2IpCi0gICAgewotICAg
ICAgICB2YXIgciA9IHRoaXMuX2luZGl2aWR1YWxSR0JWYWx1ZVRvRmxvYXRWYWx1ZShyZ2JbMF0p
IC8gMjU1OwotICAgICAgICB2YXIgZyA9IHRoaXMuX2luZGl2aWR1YWxSR0JWYWx1ZVRvRmxvYXRW
YWx1ZShyZ2JbMV0pIC8gMjU1OwotICAgICAgICB2YXIgYiA9IHRoaXMuX2luZGl2aWR1YWxSR0JW
YWx1ZVRvRmxvYXRWYWx1ZShyZ2JbMl0pIC8gMjU1OwotICAgICAgICB2YXIgbWF4ID0gTWF0aC5t
YXgociwgZywgYik7Ci0gICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTsKLSAgICAg
ICAgdmFyIGRpZmYgPSBtYXggLSBtaW47Ci0gICAgICAgIHZhciBhZGQgPSBtYXggKyBtaW47Ci0K
LSAgICAgICAgaWYgKG1pbiA9PT0gbWF4KQotICAgICAgICAgICAgdmFyIGggPSAwOwotICAgICAg
ICBlbHNlIGlmIChyID09PSBtYXgpCi0gICAgICAgICAgICB2YXIgaCA9ICgoNjAgKiAoZyAtIGIp
IC8gZGlmZikgKyAzNjApICUgMzYwOwotICAgICAgICBlbHNlIGlmIChnID09PSBtYXgpCi0gICAg
ICAgICAgICB2YXIgaCA9ICg2MCAqIChiIC0gcikgLyBkaWZmKSArIDEyMDsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmFyIGggPSAoNjAgKiAociAtIGcpIC8gZGlmZikgKyAyNDA7Ci0KLSAg
ICAgICAgdmFyIGwgPSAwLjUgKiBhZGQ7Ci0KLSAgICAgICAgaWYgKGwgPT09IDApCi0gICAgICAg
ICAgICB2YXIgcyA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKGwgPT09IDEpCi0gICAgICAgICAgICB2
YXIgcyA9IDE7Ci0gICAgICAgIGVsc2UgaWYgKGwgPD0gMC41KQotICAgICAgICAgICAgdmFyIHMg
PSBkaWZmIC8gYWRkOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YXIgcyA9IGRpZmYgLyAo
MiAtIGFkZCk7Ci0KLSAgICAgICAgaCA9IE1hdGgucm91bmQoaCk7Ci0gICAgICAgIHMgPSBNYXRo
LnJvdW5kKHMqMTAwKTsKLSAgICAgICAgbCA9IE1hdGgucm91bmQobCoxMDApOwotCi0gICAgICAg
IHJldHVybiBbaCwgcywgbF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJy
YXkuPG51bWJlcj59IGhzbAotICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fQotICAgICAq
LwotICAgIF9oc2xUb1JHQjogZnVuY3Rpb24oaHNsKQotICAgIHsKLSAgICAgICAgdmFyIGggPSBw
YXJzZUZsb2F0KGhzbFswXSkgLyAzNjA7Ci0gICAgICAgIHZhciBzID0gcGFyc2VGbG9hdChoc2xb
MV0pIC8gMTAwOwotICAgICAgICB2YXIgbCA9IHBhcnNlRmxvYXQoaHNsWzJdKSAvIDEwMDsKLQot
ICAgICAgICBpZiAocyA8IDApCi0gICAgICAgICAgICBzID0gMDsKLQotICAgICAgICBpZiAobCA8
PSAwLjUpCi0gICAgICAgICAgICB2YXIgcSA9IGwgKiAoMSArIHMpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB2YXIgcSA9IGwgKyBzIC0gKGwgKiBzKTsKLQotICAgICAgICB2YXIgcCA9IDIg
KiBsIC0gcTsKLQotICAgICAgICB2YXIgdHIgPSBoICsgKDEgLyAzKTsKLSAgICAgICAgdmFyIHRn
ID0gaDsKLSAgICAgICAgdmFyIHRiID0gaCAtICgxIC8gMyk7Ci0KLSAgICAgICAgdmFyIHIgPSBN
YXRoLnJvdW5kKGh1ZVRvUkdCKHAsIHEsIHRyKSAqIDI1NSk7Ci0gICAgICAgIHZhciBnID0gTWF0
aC5yb3VuZChodWVUb1JHQihwLCBxLCB0ZykgKiAyNTUpOwotICAgICAgICB2YXIgYiA9IE1hdGgu
cm91bmQoaHVlVG9SR0IocCwgcSwgdGIpICogMjU1KTsKLSAgICAgICAgcmV0dXJuIFtyLCBnLCBi
XTsKLQotICAgICAgICBmdW5jdGlvbiBodWVUb1JHQihwLCBxLCBoKSB7Ci0gICAgICAgICAgICBp
ZiAoaCA8IDApCi0gICAgICAgICAgICAgICAgaCArPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAo
aCA+IDEpCi0gICAgICAgICAgICAgICAgaCAtPSAxOwotCi0gICAgICAgICAgICBpZiAoKGggKiA2
KSA8IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogaCAqIDY7Ci0gICAg
ICAgICAgICBlbHNlIGlmICgoaCAqIDIpIDwgMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKChoICogMykgPCAyKQotICAgICAgICAgICAgICAgIHJldHVy
biBwICsgKHEgLSBwKSAqICgoMiAvIDMpIC0gaCkgKiA2OwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHJnYmEKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48
bnVtYmVyPn0KLSAgICAgKi8KLSAgICBfcmdiYVRvSFNMQTogZnVuY3Rpb24ocmdiYSwgYWxwaGEp
Ci0gICAgewotICAgICAgICB2YXIgaHNsID0gdGhpcy5fcmdiVG9IU0wocmdiYSkKLSAgICAgICAg
aHNsLnB1c2goYWxwaGEpOwotICAgICAgICByZXR1cm4gaHNsOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBoc2xhCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGFscGhhCi0gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICovCi0gICAg
X2hzbGFUb1JHQkE6IGZ1bmN0aW9uKGhzbGEsIGFscGhhKQotICAgIHsKLSAgICAgICAgdmFyIHJn
YiA9IHRoaXMuX2hzbFRvUkdCKGhzbGEpOwotICAgICAgICByZ2IucHVzaChhbHBoYSk7Ci0gICAg
ICAgIHJldHVybiByZ2I7Ci0gICAgfSwKLQotICAgIF9wYXJzZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgLy8gU3BlY2lhbCBWYWx1ZXMgLSBBZHZhbmNlZCBidXQgTXVzdCBCZSBQYXJzZWQg
Rmlyc3QgLSB0cmFuc3BhcmVudAotICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvTG93
ZXJDYXNlKCkucmVwbGFjZSgvJXxccysvZywgIiIpOwotICAgICAgICBpZiAodmFsdWUgaW4gV2Vi
SW5zcGVjdG9yLkNvbG9yLkFkdmFuY2VkTmlja05hbWVzKSB7Ci0gICAgICAgICAgICB0aGlzLmZv
cm1hdCA9ICJuaWNrbmFtZSI7Ci0gICAgICAgICAgICB2YXIgc2V0ID0gV2ViSW5zcGVjdG9yLkNv
bG9yLkFkdmFuY2VkTmlja05hbWVzW3ZhbHVlXTsKLSAgICAgICAgICAgIHRoaXMuc2ltcGxlID0g
ZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLnJnYmEgPSBzZXRbMF07Ci0gICAgICAgICAgICB0aGlz
LmhzbGEgPSBzZXRbMV07Ci0gICAgICAgICAgICB0aGlzLm5pY2tuYW1lID0gc2V0WzJdOwotICAg
ICAgICAgICAgdGhpcy5hbHBoYSA9IHNldFswXVszXTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2ltcGxlIC0gI2hleCwgcmdiKCksIG5pY2tuYW1l
LCBoc2woKQotICAgICAgICB2YXIgc2ltcGxlID0gL14oPzojKFswLTlhLWZdezMsNn0pfHJnYlwo
KFteKV0rKVwpfChcdyspfGhzbFwoKFteKV0rKVwpKSQvaTsKLSAgICAgICAgdmFyIG1hdGNoID0g
dGhpcy52YWx1ZS5tYXRjaChzaW1wbGUpOwotICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAg
ICAgIHRoaXMuc2ltcGxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7IC8v
IGhleAotICAgICAgICAgICAgICAgIHZhciBoZXggPSBtYXRjaFsxXS50b1VwcGVyQ2FzZSgpOwot
ICAgICAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuZm9ybWF0ID0gInNob3J0aGV4IjsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5o
ZXggPSBoZXguY2hhckF0KDApICsgaGV4LmNoYXJBdCgwKSArIGhleC5jaGFyQXQoMSkgKyBoZXgu
Y2hhckF0KDEpICsgaGV4LmNoYXJBdCgyKSArIGhleC5jaGFyQXQoMik7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSAiaGV4IjsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5oZXggPSBoZXg7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIGlmIChtYXRjaFsyXSkgeyAvLyByZ2IKLSAgICAgICAgICAgICAgICB0
aGlzLmZvcm1hdCA9ICJyZ2IiOwotICAgICAgICAgICAgICAgIHZhciByZ2IgPSBtYXRjaFsyXS5z
cGxpdCgvXHMqLFxzKi8pOwotICAgICAgICAgICAgICAgIHRoaXMucmdiID0gcmdiOwotICAgICAg
ICAgICAgICAgIHRoaXMuaGV4ID0gdGhpcy5fcmdiU3RyaW5nc1RvSGV4KHJnYik7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKG1hdGNoWzNdKSB7IC8vIG5pY2tuYW1lCi0gICAgICAgICAgICAgICAg
dmFyIG5pY2tuYW1lID0gbWF0Y2hbM10udG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICBp
ZiAobmlja25hbWUgaW4gV2ViSW5zcGVjdG9yLkNvbG9yLk5pY2tuYW1lcykgewotICAgICAgICAg
ICAgICAgICAgICB0aGlzLmZvcm1hdCA9ICJuaWNrbmFtZSI7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuaGV4ID0gV2ViSW5zcGVjdG9yLkNvbG9yLk5pY2tuYW1lc1tuaWNrbmFtZV07Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIC8vIHVua25vd24gbmFtZQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzRdKSB7IC8vIGhzbAot
ICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gImhzbCI7Ci0gICAgICAgICAgICAgICAgdmFy
IGhzbCA9IG1hdGNoWzRdLnJlcGxhY2UoLyUvZywgIiIpLnNwbGl0KC9ccyosXHMqLyk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5oc2wgPSBoc2w7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZ2IgPSB0
aGlzLl9oc2xUb1JHQihoc2wpOwotICAgICAgICAgICAgICAgIHRoaXMuaGV4ID0gdGhpcy5fcmdi
VG9IZXgodGhpcy5yZ2IpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGaWxsIGlu
IHRoZSB2YWx1ZXMgaWYgdGhpcyBpcyBhIGtub3duIGhleCBjb2xvcgotICAgICAgICAgICAgdmFy
IGhleCA9IHRoaXMuaGV4OwotICAgICAgICAgICAgaWYgKGhleCAmJiBoZXggaW4gV2ViSW5zcGVj
dG9yLkNvbG9yLkhleFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNldCA9IFdlYkluc3Bl
Y3Rvci5Db2xvci5IZXhUYWJsZVtoZXhdOwotICAgICAgICAgICAgICAgIHRoaXMucmdiID0gc2V0
WzBdOwotICAgICAgICAgICAgICAgIHRoaXMuaHNsID0gc2V0WzFdOwotICAgICAgICAgICAgICAg
IHRoaXMubmlja25hbWUgPSBzZXRbMl07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWR2YW5jZWQgLSByZ2JhKCksIGhz
bGEoKQotICAgICAgICB2YXIgYWR2YW5jZWQgPSAvXig/OnJnYmFcKChbXildKylcKXxoc2xhXCgo
W14pXSspXCkpJC87Ci0gICAgICAgIG1hdGNoID0gdGhpcy52YWx1ZS5tYXRjaChhZHZhbmNlZCk7
Ci0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgdGhpcy5zaW1wbGUgPSBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgeyAvLyByZ2JhCi0gICAgICAgICAgICAgICAgdGhp
cy5mb3JtYXQgPSAicmdiYSI7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZ2JhID0gbWF0Y2hbMV0u
c3BsaXQoL1xzKixccyovKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJnYmFbM10gPSB0aGlzLmFs
cGhhID0gdGhpcy5fY2xhbXAodGhpcy5yZ2JhWzNdLCAwLCAxKTsKLSAgICAgICAgICAgICAgICB0
aGlzLmhzbGEgPSB0aGlzLl9yZ2JhVG9IU0xBKHRoaXMucmdiYSwgdGhpcy5hbHBoYSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzJdKSB7IC8vIGhzbGEKLSAgICAgICAgICAgICAgICB0
aGlzLmZvcm1hdCA9ICJoc2xhIjsKLSAgICAgICAgICAgICAgICB0aGlzLmhzbGEgPSBtYXRjaFsy
XS5yZXBsYWNlKC8lL2csICIiKS5zcGxpdCgvXHMqLFxzKi8pOwotICAgICAgICAgICAgICAgIHRo
aXMuaHNsYVszXSA9IHRoaXMuYWxwaGEgPSB0aGlzLl9jbGFtcCh0aGlzLmhzbGFbM10sIDAsIDEp
OwotICAgICAgICAgICAgICAgIHRoaXMucmdiYSA9IHRoaXMuX2hzbGFUb1JHQkEodGhpcy5oc2xh
LCB0aGlzLmFscGhhKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb3VsZCBub3QgcGFyc2UgYXMgYSB2YWxpZCBjb2xv
cgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBTaW1wbGUgVmFsdWVzOiBb
cmdiLCBoc2wsIG5pY2tuYW1lXQotV2ViSW5zcGVjdG9yLkNvbG9yLkhleFRhYmxlID0gewotICAg
ICIwMDAwMDAiOiBbWzAsIDAsIDBdLCBbMCwgMCwgMF0sICJibGFjayJdLAotICAgICIwMDAwODAi
OiBbWzAsIDAsIDEyOF0sIFsyNDAsIDEwMCwgMjVdLCAibmF2eSJdLAotICAgICIwMDAwOEIiOiBb
WzAsIDAsIDEzOV0sIFsyNDAsIDEwMCwgMjddLCAiZGFya0JsdWUiXSwKLSAgICAiMDAwMENEIjog
W1swLCAwLCAyMDVdLCBbMjQwLCAxMDAsIDQwXSwgIm1lZGl1bUJsdWUiXSwKLSAgICAiMDAwMEZG
IjogW1swLCAwLCAyNTVdLCBbMjQwLCAxMDAsIDUwXSwgImJsdWUiXSwKLSAgICAiMDA2NDAwIjog
W1swLCAxMDAsIDBdLCBbMTIwLCAxMDAsIDIwXSwgImRhcmtHcmVlbiJdLAotICAgICIwMDgwMDAi
OiBbWzAsIDEyOCwgMF0sIFsxMjAsIDEwMCwgMjVdLCAiZ3JlZW4iXSwKLSAgICAiMDA4MDgwIjog
W1swLCAxMjgsIDEyOF0sIFsxODAsIDEwMCwgMjVdLCAidGVhbCJdLAotICAgICIwMDhCOEIiOiBb
WzAsIDEzOSwgMTM5XSwgWzE4MCwgMTAwLCAyN10sICJkYXJrQ3lhbiJdLAotICAgICIwMEJGRkYi
OiBbWzAsIDE5MSwgMjU1XSwgWzE5NSwgMTAwLCA1MF0sICJkZWVwU2t5Qmx1ZSJdLAotICAgICIw
MENFRDEiOiBbWzAsIDIwNiwgMjA5XSwgWzE4MSwgMTAwLCA0MV0sICJkYXJrVHVycXVvaXNlIl0s
Ci0gICAgIjAwRkE5QSI6IFtbMCwgMjUwLCAxNTRdLCBbMTU3LCAxMDAsIDQ5XSwgIm1lZGl1bVNw
cmluZ0dyZWVuIl0sCi0gICAgIjAwRkYwMCI6IFtbMCwgMjU1LCAwXSwgWzEyMCwgMTAwLCA1MF0s
ICJsaW1lIl0sCi0gICAgIjAwRkY3RiI6IFtbMCwgMjU1LCAxMjddLCBbMTUwLCAxMDAsIDUwXSwg
InNwcmluZ0dyZWVuIl0sCi0gICAgIjAwRkZGRiI6IFtbMCwgMjU1LCAyNTVdLCBbMTgwLCAxMDAs
IDUwXSwgImN5YW4iXSwKLSAgICAiMTkxOTcwIjogW1syNSwgMjUsIDExMl0sIFsyNDAsIDY0LCAy
N10sICJtaWRuaWdodEJsdWUiXSwKLSAgICAiMUU5MEZGIjogW1szMCwgMTQ0LCAyNTVdLCBbMjEw
LCAxMDAsIDU2XSwgImRvZGdlckJsdWUiXSwKLSAgICAiMjBCMkFBIjogW1szMiwgMTc4LCAxNzBd
LCBbMTc3LCA3MCwgNDFdLCAibGlnaHRTZWFHcmVlbiJdLAotICAgICIyMjhCMjIiOiBbWzM0LCAx
MzksIDM0XSwgWzEyMCwgNjEsIDM0XSwgImZvcmVzdEdyZWVuIl0sCi0gICAgIjJFOEI1NyI6IFtb
NDYsIDEzOSwgODddLCBbMTQ2LCA1MCwgMzZdLCAic2VhR3JlZW4iXSwKLSAgICAiMkY0RjRGIjog
W1s0NywgNzksIDc5XSwgWzE4MCwgMjUsIDI1XSwgImRhcmtTbGF0ZUdyYXkiXSwKLSAgICAiMzJD
RDMyIjogW1s1MCwgMjA1LCA1MF0sIFsxMjAsIDYxLCA1MF0sICJsaW1lR3JlZW4iXSwKLSAgICAi
M0NCMzcxIjogW1s2MCwgMTc5LCAxMTNdLCBbMTQ3LCA1MCwgNDddLCAibWVkaXVtU2VhR3JlZW4i
XSwKLSAgICAiNDBFMEQwIjogW1s2NCwgMjI0LCAyMDhdLCBbMTc0LCA3MiwgNTZdLCAidHVycXVv
aXNlIl0sCi0gICAgIjQxNjlFMSI6IFtbNjUsIDEwNSwgMjI1XSwgWzIyNSwgNzMsIDU3XSwgInJv
eWFsQmx1ZSJdLAotICAgICI0NjgyQjQiOiBbWzcwLCAxMzAsIDE4MF0sIFsyMDcsIDQ0LCA0OV0s
ICJzdGVlbEJsdWUiXSwKLSAgICAiNDgzRDhCIjogW1s3MiwgNjEsIDEzOV0sIFsyNDgsIDM5LCAz
OV0sICJkYXJrU2xhdGVCbHVlIl0sCi0gICAgIjQ4RDFDQyI6IFtbNzIsIDIwOSwgMjA0XSwgWzE3
OCwgNjAsIDU1XSwgIm1lZGl1bVR1cnF1b2lzZSJdLAotICAgICI0QjAwODIiOiBbWzc1LCAwLCAx
MzBdLCBbMjc1LCAxMDAsIDI1XSwgImluZGlnbyJdLAotICAgICI1NTZCMkYiOiBbWzg1LCAxMDcs
IDQ3XSwgWzgyLCAzOSwgMzBdLCAiZGFya09saXZlR3JlZW4iXSwKLSAgICAiNUY5RUEwIjogW1s5
NSwgMTU4LCAxNjBdLCBbMTgyLCAyNSwgNTBdLCAiY2FkZXRCbHVlIl0sCi0gICAgIjY0OTVFRCI6
IFtbMTAwLCAxNDksIDIzN10sIFsyMTksIDc5LCA2Nl0sICJjb3JuZmxvd2VyQmx1ZSJdLAotICAg
ICI2NkNEQUEiOiBbWzEwMiwgMjA1LCAxNzBdLCBbMTYwLCA1MSwgNjBdLCAibWVkaXVtQXF1YU1h
cmluZSJdLAotICAgICI2OTY5NjkiOiBbWzEwNSwgMTA1LCAxMDVdLCBbMCwgMCwgNDFdLCAiZGlt
R3JheSJdLAotICAgICI2QTVBQ0QiOiBbWzEwNiwgOTAsIDIwNV0sIFsyNDgsIDUzLCA1OF0sICJz
bGF0ZUJsdWUiXSwKLSAgICAiNkI4RTIzIjogW1sxMDcsIDE0MiwgMzVdLCBbODAsIDYwLCAzNV0s
ICJvbGl2ZURyYWIiXSwKLSAgICAiNzA4MDkwIjogW1sxMTIsIDEyOCwgMTQ0XSwgWzIxMCwgMTMs
IDUwXSwgInNsYXRlR3JheSJdLAotICAgICI3Nzg4OTkiOiBbWzExOSwgMTM2LCAxNTNdLCBbMjEw
LCAxNCwgNTNdLCAibGlnaHRTbGF0ZUdyYXkiXSwKLSAgICAiN0I2OEVFIjogW1sxMjMsIDEwNCwg
MjM4XSwgWzI0OSwgODAsIDY3XSwgIm1lZGl1bVNsYXRlQmx1ZSJdLAotICAgICI3Q0ZDMDAiOiBb
WzEyNCwgMjUyLCAwXSwgWzkwLCAxMDAsIDQ5XSwgImxhd25HcmVlbiJdLAotICAgICI3RkZGMDAi
OiBbWzEyNywgMjU1LCAwXSwgWzkwLCAxMDAsIDUwXSwgImNoYXJ0cmV1c2UiXSwKLSAgICAiN0ZG
RkQ0IjogW1sxMjcsIDI1NSwgMjEyXSwgWzE2MCwgMTAwLCA3NV0sICJhcXVhbWFyaW5lIl0sCi0g
ICAgIjgwMDAwMCI6IFtbMTI4LCAwLCAwXSwgWzAsIDEwMCwgMjVdLCAibWFyb29uIl0sCi0gICAg
IjgwMDA4MCI6IFtbMTI4LCAwLCAxMjhdLCBbMzAwLCAxMDAsIDI1XSwgInB1cnBsZSJdLAotICAg
ICI4MDgwMDAiOiBbWzEyOCwgMTI4LCAwXSwgWzYwLCAxMDAsIDI1XSwgIm9saXZlIl0sCi0gICAg
IjgwODA4MCI6IFtbMTI4LCAxMjgsIDEyOF0sIFswLCAwLCA1MF0sICJncmF5Il0sCi0gICAgIjg3
Q0VFQiI6IFtbMTM1LCAyMDYsIDIzNV0sIFsxOTcsIDcxLCA3M10sICJza3lCbHVlIl0sCi0gICAg
Ijg3Q0VGQSI6IFtbMTM1LCAyMDYsIDI1MF0sIFsyMDMsIDkyLCA3NV0sICJsaWdodFNreUJsdWUi
XSwKLSAgICAiOEEyQkUyIjogW1sxMzgsIDQzLCAyMjZdLCBbMjcxLCA3NiwgNTNdLCAiYmx1ZVZp
b2xldCJdLAotICAgICI4QjAwMDAiOiBbWzEzOSwgMCwgMF0sIFswLCAxMDAsIDI3XSwgImRhcmtS
ZWQiXSwKLSAgICAiOEIwMDhCIjogW1sxMzksIDAsIDEzOV0sIFszMDAsIDEwMCwgMjddLCAiZGFy
a01hZ2VudGEiXSwKLSAgICAiOEI0NTEzIjogW1sxMzksIDY5LCAxOV0sIFsyNSwgNzYsIDMxXSwg
InNhZGRsZUJyb3duIl0sCi0gICAgIjhGQkM4RiI6IFtbMTQzLCAxODgsIDE0M10sIFsxMjAsIDI1
LCA2NV0sICJkYXJrU2VhR3JlZW4iXSwKLSAgICAiOTBFRTkwIjogW1sxNDQsIDIzOCwgMTQ0XSwg
WzEyMCwgNzMsIDc1XSwgImxpZ2h0R3JlZW4iXSwKLSAgICAiOTM3MEQ4IjogW1sxNDcsIDExMiwg
MjE5XSwgWzI2MCwgNjAsIDY1XSwgIm1lZGl1bVB1cnBsZSJdLAotICAgICI5NDAwRDMiOiBbWzE0
OCwgMCwgMjExXSwgWzI4MiwgMTAwLCA0MV0sICJkYXJrVmlvbGV0Il0sCi0gICAgIjk4RkI5OCI6
IFtbMTUyLCAyNTEsIDE1Ml0sIFsxMjAsIDkzLCA3OV0sICJwYWxlR3JlZW4iXSwKLSAgICAiOTkz
MkNDIjogW1sxNTMsIDUwLCAyMDRdLCBbMjgwLCA2MSwgNTBdLCAiZGFya09yY2hpZCJdLAotICAg
ICI5QUNEMzIiOiBbWzE1NCwgMjA1LCA1MF0sIFs4MCwgNjEsIDUwXSwgInllbGxvd0dyZWVuIl0s
Ci0gICAgIkEwNTIyRCI6IFtbMTYwLCA4MiwgNDVdLCBbMTksIDU2LCA0MF0sICJzaWVubmEiXSwK
LSAgICAiQTUyQTJBIjogW1sxNjUsIDQyLCA0Ml0sIFswLCA1OSwgNDFdLCAiYnJvd24iXSwKLSAg
ICAiQTlBOUE5IjogW1sxNjksIDE2OSwgMTY5XSwgWzAsIDAsIDY2XSwgImRhcmtHcmF5Il0sCi0g
ICAgIkFERDhFNiI6IFtbMTczLCAyMTYsIDIzMF0sIFsxOTUsIDUzLCA3OV0sICJsaWdodEJsdWUi
XSwKLSAgICAiQURGRjJGIjogW1sxNzMsIDI1NSwgNDddLCBbODQsIDEwMCwgNTldLCAiZ3JlZW5Z
ZWxsb3ciXSwKLSAgICAiQUZFRUVFIjogW1sxNzUsIDIzOCwgMjM4XSwgWzE4MCwgNjUsIDgxXSwg
InBhbGVUdXJxdW9pc2UiXSwKLSAgICAiQjBDNERFIjogW1sxNzYsIDE5NiwgMjIyXSwgWzIxNCwg
NDEsIDc4XSwgImxpZ2h0U3RlZWxCbHVlIl0sCi0gICAgIkIwRTBFNiI6IFtbMTc2LCAyMjQsIDIz
MF0sIFsxODcsIDUyLCA4MF0sICJwb3dkZXJCbHVlIl0sCi0gICAgIkIyMjIyMiI6IFtbMTc4LCAz
NCwgMzRdLCBbMCwgNjgsIDQyXSwgImZpcmVCcmljayJdLAotICAgICJCODg2MEIiOiBbWzE4NCwg
MTM0LCAxMV0sIFs0MywgODksIDM4XSwgImRhcmtHb2xkZW5yb2QiXSwKLSAgICAiQkE1NUQzIjog
W1sxODYsIDg1LCAyMTFdLCBbMjg4LCA1OSwgNThdLCAibWVkaXVtT3JjaGlkIl0sCi0gICAgIkJD
OEY4RiI6IFtbMTg4LCAxNDMsIDE0M10sIFswLCAyNSwgNjVdLCAicm9zeUJyb3duIl0sCi0gICAg
IkJEQjc2QiI6IFtbMTg5LCAxODMsIDEwN10sIFs1NiwgMzgsIDU4XSwgImRhcmtLaGFraSJdLAot
ICAgICJDMEMwQzAiOiBbWzE5MiwgMTkyLCAxOTJdLCBbMCwgMCwgNzVdLCAic2lsdmVyIl0sCi0g
ICAgIkM3MTU4NSI6IFtbMTk5LCAyMSwgMTMzXSwgWzMyMiwgODEsIDQzXSwgIm1lZGl1bVZpb2xl
dFJlZCJdLAotICAgICJDRDVDNUMiOiBbWzIwNSwgOTIsIDkyXSwgWzAsIDUzLCA1OF0sICJpbmRp
YW5SZWQiXSwKLSAgICAiQ0Q4NTNGIjogW1syMDUsIDEzMywgNjNdLCBbMzAsIDU5LCA1M10sICJw
ZXJ1Il0sCi0gICAgIkQyNjkxRSI6IFtbMjEwLCAxMDUsIDMwXSwgWzI1LCA3NSwgNDddLCAiY2hv
Y29sYXRlIl0sCi0gICAgIkQyQjQ4QyI6IFtbMjEwLCAxODAsIDE0MF0sIFszNCwgNDQsIDY5XSwg
InRhbiJdLAotICAgICJEM0QzRDMiOiBbWzIxMSwgMjExLCAyMTFdLCBbMCwgMCwgODNdLCAibGln
aHRHcmV5Il0sCi0gICAgIkQ4NzA5MyI6IFtbMjE5LCAxMTIsIDE0N10sIFszNDAsIDYwLCA2NV0s
ICJwYWxlVmlvbGV0UmVkIl0sCi0gICAgIkQ4QkZEOCI6IFtbMjE2LCAxOTEsIDIxNl0sIFszMDAs
IDI0LCA4MF0sICJ0aGlzdGxlIl0sCi0gICAgIkRBNzBENiI6IFtbMjE4LCAxMTIsIDIxNF0sIFsz
MDIsIDU5LCA2NV0sICJvcmNoaWQiXSwKLSAgICAiREFBNTIwIjogW1syMTgsIDE2NSwgMzJdLCBb
NDMsIDc0LCA0OV0sICJnb2xkZW5yb2QiXSwKLSAgICAiREMxNDNDIjogW1syMzcsIDIwLCA2MV0s
IFszNSwgODMsIDU4XSwgImNyaW1zb24iXSwKLSAgICAiRENEQ0RDIjogW1syMjAsIDIyMCwgMjIw
XSwgWzAsIDAsIDg2XSwgImdhaW5zYm9ybyJdLAotICAgICJEREEwREQiOiBbWzIyMSwgMTYwLCAy
MjFdLCBbMzAwLCA0NywgNzVdLCAicGx1bSJdLAotICAgICJERUI4ODciOiBbWzIyMiwgMTg0LCAx
MzVdLCBbMzQsIDU3LCA3MF0sICJidXJseVdvb2QiXSwKLSAgICAiRTBGRkZGIjogW1syMjQsIDI1
NSwgMjU1XSwgWzE4MCwgMTAwLCA5NF0sICJsaWdodEN5YW4iXSwKLSAgICAiRTZFNkZBIjogW1sy
MzAsIDIzMCwgMjUwXSwgWzI0MCwgNjcsIDk0XSwgImxhdmVuZGVyIl0sCi0gICAgIkU5OTY3QSI6
IFtbMjMzLCAxNTAsIDEyMl0sIFsxNSwgNzIsIDcwXSwgImRhcmtTYWxtb24iXSwKLSAgICAiRUU4
MkVFIjogW1syMzgsIDEzMCwgMjM4XSwgWzMwMCwgNzYsIDcyXSwgInZpb2xldCJdLAotICAgICJF
RUU4QUEiOiBbWzIzOCwgMjMyLCAxNzBdLCBbNTUsIDY3LCA4MF0sICJwYWxlR29sZGVucm9kIl0s
Ci0gICAgIkYwODA4MCI6IFtbMjQwLCAxMjgsIDEyOF0sIFswLCA3OSwgNzJdLCAibGlnaHRDb3Jh
bCJdLAotICAgICJGMEU2OEMiOiBbWzI0MCwgMjMwLCAxNDBdLCBbNTQsIDc3LCA3NV0sICJraGFr
aSJdLAotICAgICJGMEY4RkYiOiBbWzI0MCwgMjQ4LCAyNTVdLCBbMjA4LCAxMDAsIDk3XSwgImFs
aWNlQmx1ZSJdLAotICAgICJGMEZGRjAiOiBbWzI0MCwgMjU1LCAyNDBdLCBbMTIwLCAxMDAsIDk3
XSwgImhvbmV5RGV3Il0sCi0gICAgIkYwRkZGRiI6IFtbMjQwLCAyNTUsIDI1NV0sIFsxODAsIDEw
MCwgOTddLCAiYXp1cmUiXSwKLSAgICAiRjRBNDYwIjogW1syNDQsIDE2NCwgOTZdLCBbMjgsIDg3
LCA2N10sICJzYW5keUJyb3duIl0sCi0gICAgIkY1REVCMyI6IFtbMjQ1LCAyMjIsIDE3OV0sIFsz
OSwgNzcsIDgzXSwgIndoZWF0Il0sCi0gICAgIkY1RjVEQyI6IFtbMjQ1LCAyNDUsIDIyMF0sIFs2
MCwgNTYsIDkxXSwgImJlaWdlIl0sCi0gICAgIkY1RjVGNSI6IFtbMjQ1LCAyNDUsIDI0NV0sIFsw
LCAwLCA5Nl0sICJ3aGl0ZVNtb2tlIl0sCi0gICAgIkY1RkZGQSI6IFtbMjQ1LCAyNTUsIDI1MF0s
IFsxNTAsIDEwMCwgOThdLCAibWludENyZWFtIl0sCi0gICAgIkY4RjhGRiI6IFtbMjQ4LCAyNDgs
IDI1NV0sIFsyNDAsIDEwMCwgOTldLCAiZ2hvc3RXaGl0ZSJdLAotICAgICJGQTgwNzIiOiBbWzI1
MCwgMTI4LCAxMTRdLCBbNiwgOTMsIDcxXSwgInNhbG1vbiJdLAotICAgICJGQUVCRDciOiBbWzI1
MCwgMjM1LCAyMTVdLCBbMzQsIDc4LCA5MV0sICJhbnRpcXVlV2hpdGUiXSwKLSAgICAiRkFGMEU2
IjogW1syNTAsIDI0MCwgMjMwXSwgWzMwLCA2NywgOTRdLCAibGluZW4iXSwKLSAgICAiRkFGQUQy
IjogW1syNTAsIDI1MCwgMjEwXSwgWzYwLCA4MCwgOTBdLCAibGlnaHRHb2xkZW5yb2RZZWxsb3ci
XSwKLSAgICAiRkRGNUU2IjogW1syNTMsIDI0NSwgMjMwXSwgWzM5LCA4NSwgOTVdLCAib2xkTGFj
ZSJdLAotICAgICJGRjAwMDAiOiBbWzI1NSwgMCwgMF0sIFswLCAxMDAsIDUwXSwgInJlZCJdLAot
ICAgICJGRjAwRkYiOiBbWzI1NSwgMCwgMjU1XSwgWzMwMCwgMTAwLCA1MF0sICJtYWdlbnRhIl0s
Ci0gICAgIkZGMTQ5MyI6IFtbMjU1LCAyMCwgMTQ3XSwgWzMyOCwgMTAwLCA1NF0sICJkZWVwUGlu
ayJdLAotICAgICJGRjQ1MDAiOiBbWzI1NSwgNjksIDBdLCBbMTYsIDEwMCwgNTBdLCAib3Jhbmdl
UmVkIl0sCi0gICAgIkZGNjM0NyI6IFtbMjU1LCA5OSwgNzFdLCBbOSwgMTAwLCA2NF0sICJ0b21h
dG8iXSwKLSAgICAiRkY2OUI0IjogW1syNTUsIDEwNSwgMTgwXSwgWzMzMCwgMTAwLCA3MV0sICJo
b3RQaW5rIl0sCi0gICAgIkZGN0Y1MCI6IFtbMjU1LCAxMjcsIDgwXSwgWzE2LCAxMDAsIDY2XSwg
ImNvcmFsIl0sCi0gICAgIkZGOEMwMCI6IFtbMjU1LCAxNDAsIDBdLCBbMzMsIDEwMCwgNTBdLCAi
ZGFya09yYW5nZSJdLAotICAgICJGRkEwN0EiOiBbWzI1NSwgMTYwLCAxMjJdLCBbMTcsIDEwMCwg
NzRdLCAibGlnaHRTYWxtb24iXSwKLSAgICAiRkZBNTAwIjogW1syNTUsIDE2NSwgMF0sIFszOSwg
MTAwLCA1MF0sICJvcmFuZ2UiXSwKLSAgICAiRkZCNkMxIjogW1syNTUsIDE4MiwgMTkzXSwgWzM1
MSwgMTAwLCA4Nl0sICJsaWdodFBpbmsiXSwKLSAgICAiRkZDMENCIjogW1syNTUsIDE5MiwgMjAz
XSwgWzM1MCwgMTAwLCA4OF0sICJwaW5rIl0sCi0gICAgIkZGRDcwMCI6IFtbMjU1LCAyMTUsIDBd
LCBbNTEsIDEwMCwgNTBdLCAiZ29sZCJdLAotICAgICJGRkRBQjkiOiBbWzI1NSwgMjE4LCAxODVd
LCBbMjgsIDEwMCwgODZdLCAicGVhY2hQdWZmIl0sCi0gICAgIkZGREVBRCI6IFtbMjU1LCAyMjIs
IDE3M10sIFszNiwgMTAwLCA4NF0sICJuYXZham9XaGl0ZSJdLAotICAgICJGRkU0QjUiOiBbWzI1
NSwgMjI4LCAxODFdLCBbMzgsIDEwMCwgODVdLCAibW9jY2FzaW4iXSwKLSAgICAiRkZFNEM0Ijog
W1syNTUsIDIyOCwgMTk2XSwgWzMzLCAxMDAsIDg4XSwgImJpc3F1ZSJdLAotICAgICJGRkU0RTEi
OiBbWzI1NSwgMjI4LCAyMjVdLCBbNiwgMTAwLCA5NF0sICJtaXN0eVJvc2UiXSwKLSAgICAiRkZF
QkNEIjogW1syNTUsIDIzNSwgMjA1XSwgWzM2LCAxMDAsIDkwXSwgImJsYW5jaGVkQWxtb25kIl0s
Ci0gICAgIkZGRUZENSI6IFtbMjU1LCAyMzksIDIxM10sIFszNywgMTAwLCA5Ml0sICJwYXBheWFX
aGlwIl0sCi0gICAgIkZGRjBGNSI6IFtbMjU1LCAyNDAsIDI0NV0sIFszNDAsIDEwMCwgOTddLCAi
bGF2ZW5kZXJCbHVzaCJdLAotICAgICJGRkY1RUUiOiBbWzI1NSwgMjQ1LCAyMzhdLCBbMjUsIDEw
MCwgOTddLCAic2VhU2hlbGwiXSwKLSAgICAiRkZGOERDIjogW1syNTUsIDI0OCwgMjIwXSwgWzQ4
LCAxMDAsIDkzXSwgImNvcm5zaWxrIl0sCi0gICAgIkZGRkFDRCI6IFtbMjU1LCAyNTAsIDIwNV0s
IFs1NCwgMTAwLCA5MF0sICJsZW1vbkNoaWZmb24iXSwKLSAgICAiRkZGQUYwIjogW1syNTUsIDI1
MCwgMjQwXSwgWzQwLCAxMDAsIDk3XSwgImZsb3JhbFdoaXRlIl0sCi0gICAgIkZGRkFGQSI6IFtb
MjU1LCAyNTAsIDI1MF0sIFswLCAxMDAsIDk5XSwgInNub3ciXSwKLSAgICAiRkZGRjAwIjogW1sy
NTUsIDI1NSwgMF0sIFs2MCwgMTAwLCA1MF0sICJ5ZWxsb3ciXSwKLSAgICAiRkZGRkUwIjogW1sy
NTUsIDI1NSwgMjI0XSwgWzYwLCAxMDAsIDk0XSwgImxpZ2h0WWVsbG93Il0sCi0gICAgIkZGRkZG
MCI6IFtbMjU1LCAyNTUsIDI0MF0sIFs2MCwgMTAwLCA5N10sICJpdm9yeSJdLAotICAgICJGRkZG
RkYiOiBbWzI1NSwgMjU1LCAyNTVdLCBbMCwgMTAwLCAxMDBdLCAid2hpdGUiXQotfTsKLQotLy8g
U2ltcGxlIFZhbHVlcwotV2ViSW5zcGVjdG9yLkNvbG9yLk5pY2tuYW1lcyA9IHsKLSAgICAiYWxp
Y2VibHVlIjogIkYwRjhGRiIsCi0gICAgImFudGlxdWV3aGl0ZSI6ICJGQUVCRDciLAotICAgICJh
cXVhIjogIjAwRkZGRiIsCi0gICAgImFxdWFtYXJpbmUiOiAiN0ZGRkQ0IiwKLSAgICAiYXp1cmUi
OiAiRjBGRkZGIiwKLSAgICAiYmVpZ2UiOiAiRjVGNURDIiwKLSAgICAiYmlzcXVlIjogIkZGRTRD
NCIsCi0gICAgImJsYWNrIjogIjAwMDAwMCIsCi0gICAgImJsYW5jaGVkYWxtb25kIjogIkZGRUJD
RCIsCi0gICAgImJsdWUiOiAiMDAwMEZGIiwKLSAgICAiYmx1ZXZpb2xldCI6ICI4QTJCRTIiLAot
ICAgICJicm93biI6ICJBNTJBMkEiLAotICAgICJidXJseXdvb2QiOiAiREVCODg3IiwKLSAgICAi
Y2FkZXRibHVlIjogIjVGOUVBMCIsCi0gICAgImNoYXJ0cmV1c2UiOiAiN0ZGRjAwIiwKLSAgICAi
Y2hvY29sYXRlIjogIkQyNjkxRSIsCi0gICAgImNvcmFsIjogIkZGN0Y1MCIsCi0gICAgImNvcm5m
bG93ZXJibHVlIjogIjY0OTVFRCIsCi0gICAgImNvcm5zaWxrIjogIkZGRjhEQyIsCi0gICAgImNy
aW1zb24iOiAiREMxNDNDIiwKLSAgICAiY3lhbiI6ICIwMEZGRkYiLAotICAgICJkYXJrYmx1ZSI6
ICIwMDAwOEIiLAotICAgICJkYXJrY3lhbiI6ICIwMDhCOEIiLAotICAgICJkYXJrZ29sZGVucm9k
IjogIkI4ODYwQiIsCi0gICAgImRhcmtncmF5IjogIkE5QTlBOSIsCi0gICAgImRhcmtncmVlbiI6
ICIwMDY0MDAiLAotICAgICJkYXJra2hha2kiOiAiQkRCNzZCIiwKLSAgICAiZGFya21hZ2VudGEi
OiAiOEIwMDhCIiwKLSAgICAiZGFya29saXZlZ3JlZW4iOiAiNTU2QjJGIiwKLSAgICAiZGFya29y
YW5nZSI6ICJGRjhDMDAiLAotICAgICJkYXJrb3JjaGlkIjogIjk5MzJDQyIsCi0gICAgImRhcmty
ZWQiOiAiOEIwMDAwIiwKLSAgICAiZGFya3NhbG1vbiI6ICJFOTk2N0EiLAotICAgICJkYXJrc2Vh
Z3JlZW4iOiAiOEZCQzhGIiwKLSAgICAiZGFya3NsYXRlYmx1ZSI6ICI0ODNEOEIiLAotICAgICJk
YXJrc2xhdGVncmF5IjogIjJGNEY0RiIsCi0gICAgImRhcmt0dXJxdW9pc2UiOiAiMDBDRUQxIiwK
LSAgICAiZGFya3Zpb2xldCI6ICI5NDAwRDMiLAotICAgICJkZWVwcGluayI6ICJGRjE0OTMiLAot
ICAgICJkZWVwc2t5Ymx1ZSI6ICIwMEJGRkYiLAotICAgICJkaW1ncmF5IjogIjY5Njk2OSIsCi0g
ICAgImRvZGdlcmJsdWUiOiAiMUU5MEZGIiwKLSAgICAiZmlyZWJyaWNrIjogIkIyMjIyMiIsCi0g
ICAgImZsb3JhbHdoaXRlIjogIkZGRkFGMCIsCi0gICAgImZvcmVzdGdyZWVuIjogIjIyOEIyMiIs
Ci0gICAgImZ1Y2hzaWEiOiAiRkYwMEZGIiwKLSAgICAiZ2FpbnNib3JvIjogIkRDRENEQyIsCi0g
ICAgImdob3N0d2hpdGUiOiAiRjhGOEZGIiwKLSAgICAiZ29sZCI6ICJGRkQ3MDAiLAotICAgICJn
b2xkZW5yb2QiOiAiREFBNTIwIiwKLSAgICAiZ3JheSI6ICI4MDgwODAiLAotICAgICJncmVlbiI6
ICIwMDgwMDAiLAotICAgICJncmVlbnllbGxvdyI6ICJBREZGMkYiLAotICAgICJob25leWRldyI6
ICJGMEZGRjAiLAotICAgICJob3RwaW5rIjogIkZGNjlCNCIsCi0gICAgImluZGlhbnJlZCI6ICJD
RDVDNUMiLAotICAgICJpbmRpZ28iOiAiNEIwMDgyIiwKLSAgICAiaXZvcnkiOiAiRkZGRkYwIiwK
LSAgICAia2hha2kiOiAiRjBFNjhDIiwKLSAgICAibGF2ZW5kZXIiOiAiRTZFNkZBIiwKLSAgICAi
bGF2ZW5kZXJibHVzaCI6ICJGRkYwRjUiLAotICAgICJsYXduZ3JlZW4iOiAiN0NGQzAwIiwKLSAg
ICAibGVtb25jaGlmZm9uIjogIkZGRkFDRCIsCi0gICAgImxpZ2h0Ymx1ZSI6ICJBREQ4RTYiLAot
ICAgICJsaWdodGNvcmFsIjogIkYwODA4MCIsCi0gICAgImxpZ2h0Y3lhbiI6ICJFMEZGRkYiLAot
ICAgICJsaWdodGdvbGRlbnJvZHllbGxvdyI6ICJGQUZBRDIiLAotICAgICJsaWdodGdyZWVuIjog
IjkwRUU5MCIsCi0gICAgImxpZ2h0Z3JleSI6ICJEM0QzRDMiLAotICAgICJsaWdodHBpbmsiOiAi
RkZCNkMxIiwKLSAgICAibGlnaHRzYWxtb24iOiAiRkZBMDdBIiwKLSAgICAibGlnaHRzZWFncmVl
biI6ICIyMEIyQUEiLAotICAgICJsaWdodHNreWJsdWUiOiAiODdDRUZBIiwKLSAgICAibGlnaHRz
bGF0ZWdyYXkiOiAiNzc4ODk5IiwKLSAgICAibGlnaHRzdGVlbGJsdWUiOiAiQjBDNERFIiwKLSAg
ICAibGlnaHR5ZWxsb3ciOiAiRkZGRkUwIiwKLSAgICAibGltZSI6ICIwMEZGMDAiLAotICAgICJs
aW1lZ3JlZW4iOiAiMzJDRDMyIiwKLSAgICAibGluZW4iOiAiRkFGMEU2IiwKLSAgICAibWFnZW50
YSI6ICJGRjAwRkYiLAotICAgICJtYXJvb24iOiAiODAwMDAwIiwKLSAgICAibWVkaXVtYXF1YW1h
cmluZSI6ICI2NkNEQUEiLAotICAgICJtZWRpdW1ibHVlIjogIjAwMDBDRCIsCi0gICAgIm1lZGl1
bW9yY2hpZCI6ICJCQTU1RDMiLAotICAgICJtZWRpdW1wdXJwbGUiOiAiOTM3MERCIiwKLSAgICAi
bWVkaXVtc2VhZ3JlZW4iOiAiM0NCMzcxIiwKLSAgICAibWVkaXVtc2xhdGVibHVlIjogIjdCNjhF
RSIsCi0gICAgIm1lZGl1bXNwcmluZ2dyZWVuIjogIjAwRkE5QSIsCi0gICAgIm1lZGl1bXR1cnF1
b2lzZSI6ICI0OEQxQ0MiLAotICAgICJtZWRpdW12aW9sZXRyZWQiOiAiQzcxNTg1IiwKLSAgICAi
bWlkbmlnaHRibHVlIjogIjE5MTk3MCIsCi0gICAgIm1pbnRjcmVhbSI6ICJGNUZGRkEiLAotICAg
ICJtaXN0eXJvc2UiOiAiRkZFNEUxIiwKLSAgICAibW9jY2FzaW4iOiAiRkZFNEI1IiwKLSAgICAi
bmF2YWpvd2hpdGUiOiAiRkZERUFEIiwKLSAgICAibmF2eSI6ICIwMDAwODAiLAotICAgICJvbGRs
YWNlIjogIkZERjVFNiIsCi0gICAgIm9saXZlIjogIjgwODAwMCIsCi0gICAgIm9saXZlZHJhYiI6
ICI2QjhFMjMiLAotICAgICJvcmFuZ2UiOiAiRkZBNTAwIiwKLSAgICAib3JhbmdlcmVkIjogIkZG
NDUwMCIsCi0gICAgIm9yY2hpZCI6ICJEQTcwRDYiLAotICAgICJwYWxlZ29sZGVucm9kIjogIkVF
RThBQSIsCi0gICAgInBhbGVncmVlbiI6ICI5OEZCOTgiLAotICAgICJwYWxldHVycXVvaXNlIjog
IkFGRUVFRSIsCi0gICAgInBhbGV2aW9sZXRyZWQiOiAiREI3MDkzIiwKLSAgICAicGFwYXlhd2hp
cCI6ICJGRkVGRDUiLAotICAgICJwZWFjaHB1ZmYiOiAiRkZEQUI5IiwKLSAgICAicGVydSI6ICJD
RDg1M0YiLAotICAgICJwaW5rIjogIkZGQzBDQiIsCi0gICAgInBsdW0iOiAiRERBMEREIiwKLSAg
ICAicG93ZGVyYmx1ZSI6ICJCMEUwRTYiLAotICAgICJwdXJwbGUiOiAiODAwMDgwIiwKLSAgICAi
cmVkIjogIkZGMDAwMCIsCi0gICAgInJvc3licm93biI6ICJCQzhGOEYiLAotICAgICJyb3lhbGJs
dWUiOiAiNDE2OUUxIiwKLSAgICAic2FkZGxlYnJvd24iOiAiOEI0NTEzIiwKLSAgICAic2FsbW9u
IjogIkZBODA3MiIsCi0gICAgInNhbmR5YnJvd24iOiAiRjRBNDYwIiwKLSAgICAic2VhZ3JlZW4i
OiAiMkU4QjU3IiwKLSAgICAic2Vhc2hlbGwiOiAiRkZGNUVFIiwKLSAgICAic2llbm5hIjogIkEw
NTIyRCIsCi0gICAgInNpbHZlciI6ICJDMEMwQzAiLAotICAgICJza3libHVlIjogIjg3Q0VFQiIs
Ci0gICAgInNsYXRlYmx1ZSI6ICI2QTVBQ0QiLAotICAgICJzbGF0ZWdyYXkiOiAiNzA4MDkwIiwK
LSAgICAic25vdyI6ICJGRkZBRkEiLAotICAgICJzcHJpbmdncmVlbiI6ICIwMEZGN0YiLAotICAg
ICJzdGVlbGJsdWUiOiAiNDY4MkI0IiwKLSAgICAidGFuIjogIkQyQjQ4QyIsCi0gICAgInRlYWwi
OiAiMDA4MDgwIiwKLSAgICAidGhpc3RsZSI6ICJEOEJGRDgiLAotICAgICJ0b21hdG8iOiAiRkY2
MzQ3IiwKLSAgICAidHVycXVvaXNlIjogIjQwRTBEMCIsCi0gICAgInZpb2xldCI6ICJFRTgyRUUi
LAotICAgICJ3aGVhdCI6ICJGNURFQjMiLAotICAgICJ3aGl0ZSI6ICJGRkZGRkYiLAotICAgICJ3
aGl0ZXNtb2tlIjogIkY1RjVGNSIsCi0gICAgInllbGxvdyI6ICJGRkZGMDAiLAotICAgICJ5ZWxs
b3dncmVlbiI6ICI5QUNEMzIiCi19OwotCi0vLyBBZHZhbmNlZCBWYWx1ZXMgW3JnYmEsIGhzbGEs
IG5pY2tuYW1lXQotV2ViSW5zcGVjdG9yLkNvbG9yLkFkdmFuY2VkTmlja05hbWVzID0gewotICAg
ICJ0cmFuc3BhcmVudCI6IFtbMCwgMCwgMCwgMF0sIFswLCAwLCAwLCAwXSwgInRyYW5zcGFyZW50
Il0sCi0gICAgInJnYmEoMCwwLDAsMCkiOiBbWzAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMF0sICJ0
cmFuc3BhcmVudCJdLAotICAgICJoc2xhKDAsMCwwLDApIjogW1swLCAwLCAwLCAwXSwgWzAsIDAs
IDAsIDBdLCAidHJhbnNwYXJlbnQiXSwKLX07Ci0KLVdlYkluc3BlY3Rvci5Db2xvci5QYWdlSGln
aGxpZ2h0ID0gewotICAgIENvbnRlbnQ6IFdlYkluc3BlY3Rvci5Db2xvci5mcm9tUkdCQSgxMTEs
IDE2OCwgMjIwLCAuNjYpLAotICAgIENvbnRlbnRMaWdodDogV2ViSW5zcGVjdG9yLkNvbG9yLmZy
b21SR0JBKDExMSwgMTY4LCAyMjAsIC41KSwKLSAgICBDb250ZW50T3V0bGluZTogV2ViSW5zcGVj
dG9yLkNvbG9yLmZyb21SR0JBKDksIDgzLCAxNDgpLAotICAgIFBhZGRpbmc6IFdlYkluc3BlY3Rv
ci5Db2xvci5mcm9tUkdCQSgxNDcsIDE5NiwgMTI1LCAuNTUpLAotICAgIFBhZGRpbmdMaWdodDog
V2ViSW5zcGVjdG9yLkNvbG9yLmZyb21SR0JBKDE0NywgMTk2LCAxMjUsIC40KSwKLSAgICBCb3Jk
ZXI6IFdlYkluc3BlY3Rvci5Db2xvci5mcm9tUkdCQSgyNTUsIDIyOSwgMTUzLCAuNjYpLAotICAg
IEJvcmRlckxpZ2h0OiBXZWJJbnNwZWN0b3IuQ29sb3IuZnJvbVJHQkEoMjU1LCAyMjksIDE1Mywg
LjUpLAotICAgIE1hcmdpbjogV2ViSW5zcGVjdG9yLkNvbG9yLmZyb21SR0JBKDI0NiwgMTc4LCAx
MDcsIC42NiksCi0gICAgTWFyZ2luTGlnaHQ6IFdlYkluc3BlY3Rvci5Db2xvci5mcm9tUkdCQSgy
NDYsIDE3OCwgMTA3LCAuNSkKLX0KLQotV2ViSW5zcGVjdG9yLkNvbG9yLkZvcm1hdCA9IHsKLSAg
ICBPcmlnaW5hbDogIm9yaWdpbmFsIiwKLSAgICBOaWNrbmFtZTogIm5pY2tuYW1lIiwKLSAgICBI
RVg6ICJoZXgiLAotICAgIFNob3J0SEVYOiAic2hvcnRoZXgiLAotICAgIFJHQjogInJnYiIsCi0g
ICAgUkdCQTogInJnYmEiLAotICAgIEhTTDogImhzbCIsCi0gICAgSFNMQTogImhzbGEiCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2Ny
aXB0TWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGls
ZXJTY3JpcHRNYXBwaW5nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2JkY2Y0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGls
ZXJTY3JpcHRNYXBwaW5nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5TY3JpcHRTb3VyY2VN
YXBwaW5nfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuV29ya3NwYWNlfSB3b3Jrc3BhY2UKLSAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNpbXBsZVdvcmtzcGFjZVByb3ZpZGVyfSBuZXR3b3JrV29y
a3NwYWNlUHJvdmlkZXIKLSAqLwotV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZyA9
IGZ1bmN0aW9uKHdvcmtzcGFjZSwgbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyKQotewotICAgIHRo
aXMuX3dvcmtzcGFjZSA9IHdvcmtzcGFjZTsKLSAgICB0aGlzLl93b3Jrc3BhY2UuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlUHJvdmlkZXIuRXZlbnRzLlVJU291cmNl
Q29kZUFkZGVkLCB0aGlzLl91aVNvdXJjZUNvZGVBZGRlZFRvV29ya3NwYWNlLCB0aGlzKTsKLSAg
ICB0aGlzLl9uZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIgPSBuZXR3b3JrV29ya3NwYWNlUHJvdmlk
ZXI7Ci0gICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cD59ICovCi0gICAgdGhpcy5fc291cmNlTWFwRm9yU291cmNlTWFwVVJMID0ge307Ci0gICAgLyoq
IEB0eXBlIHtPYmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcD59ICovCi0gICAg
dGhpcy5fc291cmNlTWFwRm9yU2NyaXB0SWQgPSB7fTsKLSAgICB0aGlzLl9zY3JpcHRGb3JTb3Vy
Y2VNYXAgPSBuZXcgTWFwKCk7Ci0gICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgV2ViSW5z
cGVjdG9yLlNvdXJjZU1hcD59ICovCi0gICAgdGhpcy5fc291cmNlTWFwRm9yVVJMID0ge307Ci0g
ICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuR2xvYmFsT2JqZWN0Q2xlYXJlZCwgdGhpcy5fZGVidWdn
ZXJSZXNldCwgdGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db21waWxlclNjcmlwdE1hcHBpbmcu
cHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhd0xv
Y2F0aW9ufSByYXdMb2NhdGlvbgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSUxvY2F0
aW9ufQotICAgICAqLwotICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdM
b2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciBkZWJ1Z2dlck1vZGVsTG9jYXRpb24gPSAvKiog
QHR5cGUge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufSAqLyAocmF3TG9jYXRp
b24pOwotICAgICAgICB2YXIgc291cmNlTWFwID0gdGhpcy5fc291cmNlTWFwRm9yU2NyaXB0SWRb
ZGVidWdnZXJNb2RlbExvY2F0aW9uLnNjcmlwdElkXTsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIg
PSBkZWJ1Z2dlck1vZGVsTG9jYXRpb24ubGluZU51bWJlcjsKLSAgICAgICAgdmFyIGNvbHVtbk51
bWJlciA9IGRlYnVnZ2VyTW9kZWxMb2NhdGlvbi5jb2x1bW5OdW1iZXIgfHwgMDsKLSAgICAgICAg
dmFyIGVudHJ5ID0gc291cmNlTWFwLmZpbmRFbnRyeShsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
OwotICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5Lmxlbmd0aCA9PT0gMikKLSAgICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICB2YXIgdXJsID0gZW50cnlbMl07Ci0gICAgICAgIHZhciB1
aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJMKHVybCk7Ci0g
ICAgICAgIGlmICghdWlTb3VyY2VDb2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBlbnRy
eVszXSwgZW50cnlbNF0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgotICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufQotICAgICAqLwot
ICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICghdWlTb3VyY2VDb2RlLnVy
bCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgc291cmNlTWFwID0gdGhp
cy5fc291cmNlTWFwRm9yVVJMW3VpU291cmNlQ29kZS51cmxdOwotICAgICAgICBpZiAoIXNvdXJj
ZU1hcCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgZW50cnkgPSBzb3Vy
Y2VNYXAuZmluZEVudHJ5UmV2ZXJzZWQodWlTb3VyY2VDb2RlLnVybCwgbGluZU51bWJlcik7Ci0g
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5jcmVhdGVSYXdMb2NhdGlv
bih0aGlzLl9zY3JpcHRGb3JTb3VyY2VNYXAuZ2V0KHNvdXJjZU1hcCksIGVudHJ5WzBdLCBlbnRy
eVsxXSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAg
ICovCi0gICAgaXNJZGVudGl0eTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3Jp
cHR9IHNjcmlwdAotICAgICAqLwotICAgIGFkZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQotICAg
IHsKLSAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMubG9hZFNvdXJjZU1hcEZvclNjcmlwdChz
Y3JpcHQpOwotICAgICAgICBpZiAoIXNvdXJjZU1hcCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAodGhpcy5fc2NyaXB0Rm9yU291cmNlTWFwLmdldChzb3VyY2VNYXApKSB7Ci0g
ICAgICAgICAgICB0aGlzLl9zb3VyY2VNYXBGb3JTY3JpcHRJZFtzY3JpcHQuc2NyaXB0SWRdID0g
c291cmNlTWFwOwotICAgICAgICAgICAgc2NyaXB0LnB1c2hTb3VyY2VNYXBwaW5nKHRoaXMpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc291cmNlTWFw
Rm9yU2NyaXB0SWRbc2NyaXB0LnNjcmlwdElkXSA9IHNvdXJjZU1hcDsKLSAgICAgICAgdGhpcy5f
c2NyaXB0Rm9yU291cmNlTWFwLnB1dChzb3VyY2VNYXAsIHNjcmlwdCk7Ci0KLSAgICAgICAgdmFy
IHNvdXJjZVVSTHMgPSBzb3VyY2VNYXAuc291cmNlcygpOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNvdXJjZVVSTHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzb3VyY2VV
UkwgPSBzb3VyY2VVUkxzW2ldOwotICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZU1hcEZvclVS
TFtzb3VyY2VVUkxdKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdGhp
cy5fc291cmNlTWFwRm9yVVJMW3NvdXJjZVVSTF0gPSBzb3VyY2VNYXA7Ci0gICAgICAgICAgICBp
ZiAoIXRoaXMuX3dvcmtzcGFjZS5oYXNNYXBwaW5nRm9yVVJMKHNvdXJjZVVSTCkgJiYgIXRoaXMu
X3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkwoc291cmNlVVJMKSkgewotICAgICAgICAgICAg
ICAgIHZhciBzb3VyY2VDb250ZW50ID0gc291cmNlTWFwLnNvdXJjZUNvbnRlbnQoc291cmNlVVJM
KTsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudFByb3ZpZGVyOwotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2VDb250ZW50KQotICAgICAgICAgICAgICAgICAgICBjb250ZW50UHJvdmlkZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLlN0YXRpY0NvbnRlbnRQcm92aWRlcihXZWJJbnNwZWN0b3IucmVz
b3VyY2VUeXBlcy5TY3JpcHQsIHNvdXJjZUNvbnRlbnQpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYkluc3BlY3Rvci5D
b21waWxlclNvdXJjZU1hcHBpbmdDb250ZW50UHJvdmlkZXIoc291cmNlVVJMKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9uZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIuYWRkRmlsZUZvclVSTChzb3Vy
Y2VVUkwsIGNvbnRlbnRQcm92aWRlciwgdHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSTChz
b3VyY2VVUkwpOwotICAgICAgICAgICAgaWYgKHVpU291cmNlQ29kZSkgewotICAgICAgICAgICAg
ICAgIHRoaXMuX2JpbmRVSVNvdXJjZUNvZGUodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAgICAg
ICB1aVNvdXJjZUNvZGUuaXNDb250ZW50U2NyaXB0ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzY3JpcHQucHVzaFNvdXJjZU1hcHBp
bmcodGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX2JpbmRVSVNvdXJjZUNv
ZGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIHVpU291cmNlQ29kZS5z
ZXRTb3VyY2VNYXBwaW5nKHRoaXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfdWlTb3VyY2VDb2RlQWRk
ZWRUb1dvcmtzcGFjZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAqLyAoZXZlbnQu
ZGF0YSk7Ci0gICAgICAgIGlmICghdWlTb3VyY2VDb2RlLnVybCB8fCAhdGhpcy5fc291cmNlTWFw
Rm9yVVJMW3VpU291cmNlQ29kZS51cmxdKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLl9iaW5kVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gc2NyaXB0Ci0gICAgICogQHJldHVy
biB7P1dlYkluc3BlY3Rvci5Tb3VyY2VNYXB9Ci0gICAgICovCi0gICAgbG9hZFNvdXJjZU1hcEZv
clNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAgICAgICAgLy8gc2NyaXB0LnNvdXJj
ZVVSTCBjYW4gYmUgYSByYW5kb20gc3RyaW5nLCBidXQgaXMgZ2VuZXJhbGx5IGFuIGFic29sdXRl
IHBhdGggLT4gY29tcGxldGUgaXQgdG8gaW5zcGVjdGVkIHBhZ2UgdXJsIGZvcgotICAgICAgICAv
LyByZWxhdGl2ZSBsaW5rcy4KLSAgICAgICAgaWYgKCFzY3JpcHQuc291cmNlTWFwVVJMKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBzY3JpcHRVUkwgPSBXZWJJbnNwZWN0
b3IuUGFyc2VkVVJMLmNvbXBsZXRlVVJMKFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlVVJMLCBz
Y3JpcHQuc291cmNlVVJMKTsKLSAgICAgICAgaWYgKCFzY3JpcHRVUkwpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIHNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5QYXJz
ZWRVUkwuY29tcGxldGVVUkwoc2NyaXB0VVJMLCBzY3JpcHQuc291cmNlTWFwVVJMKTsKLSAgICAg
ICAgaWYgKCFzb3VyY2VNYXBVUkwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAg
dmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTFtzb3VyY2VNYXBV
UkxdOwotICAgICAgICBpZiAoc291cmNlTWFwKQotICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1h
cDsKLQotICAgICAgICBzb3VyY2VNYXAgPSBXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWQoc291
cmNlTWFwVVJMLCBzY3JpcHRVUkwpOwotICAgICAgICBpZiAoIXNvdXJjZU1hcCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgICB0aGlzLl9zb3VyY2VNYXBGb3JTb3VyY2VNYXBVUkxb
c291cmNlTWFwVVJMXSA9IHNvdXJjZU1hcDsKLSAgICAgICAgcmV0dXJuIHNvdXJjZU1hcDsKLSAg
ICB9LAotCi0gICAgX2RlYnVnZ2VyUmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTCA9IHt9OwotICAgICAgICB0aGlzLl9zb3VyY2VN
YXBGb3JTY3JpcHRJZCA9IHt9OwotICAgICAgICB0aGlzLl9zY3JpcHRGb3JTb3VyY2VNYXAgPSBu
ZXcgTWFwKCk7Ci0gICAgICAgIHRoaXMuX3NvdXJjZU1hcEZvclVSTCA9IHt9OwotICAgIH0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1l
c3NhZ2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVNZXNz
YWdlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmRlMzQ5Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZU1lc3NhZ2UuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw5MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfQotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBzb3Vy
Y2UKLSAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbAotICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UK
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkxpbmtpZmllcn0gbGlua2lmaWVyCi0gKiBAcGFyYW0g
e3N0cmluZz19IHR5cGUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gdXJsCi0gKiBAcGFyYW0ge251bWJl
cj19IGxpbmUKLSAqIEBwYXJhbSB7bnVtYmVyPX0gcmVwZWF0Q291bnQKLSAqIEBwYXJhbSB7QXJy
YXkuPFJ1bnRpbWVBZ2VudC5SZW1vdGVPYmplY3Q+PX0gcGFyYW1ldGVycwotICogQHBhcmFtIHtD
b25zb2xlQWdlbnQuU3RhY2tUcmFjZT19IHN0YWNrVHJhY2UKLSAqIEBwYXJhbSB7TmV0d29ya0Fn
ZW50LlJlcXVlc3RJZD19IHJlcXVlc3RJZAotICogQHBhcmFtIHtib29sZWFuPX0gaXNPdXRkYXRl
ZAotICovCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsID0gZnVuY3Rpb24oc291cmNl
LCBsZXZlbCwgbWVzc2FnZSwgbGlua2lmaWVyLCB0eXBlLCB1cmwsIGxpbmUsIHJlcGVhdENvdW50
LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0SWQsIGlzT3V0ZGF0ZWQpCi17Ci0gICAg
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNhbGwodGhpcywgc291cmNlLCBsZXZlbCwgdXJs
LCBsaW5lLCByZXBlYXRDb3VudCk7Ci0KLSAgICB0aGlzLl9saW5raWZpZXIgPSBsaW5raWZpZXI7
Ci0gICAgdGhpcy50eXBlID0gdHlwZSB8fCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuTG9nOwotICAgIHRoaXMuX21lc3NhZ2VUZXh0ID0gbWVzc2FnZTsKLSAgICB0aGlz
Ll9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tU
cmFjZTsKLSAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdElkID8gV2ViSW5zcGVjdG9yLm5ldHdv
cmtMb2cucmVxdWVzdEZvcklkKHJlcXVlc3RJZCkgOiBudWxsOwotICAgIHRoaXMuX2lzT3V0ZGF0
ZWQgPSBpc091dGRhdGVkOwotICAgIHRoaXMuX2RhdGFHcmlkcyA9IFtdOwotICAgIHRoaXMuX2Rh
dGFHcmlkUGFyZW50cyA9IG5ldyBNYXAoKTsKLQotICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMg
PSB7Ci0gICAgICAgICJvYmplY3QiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAg
ICAgICAgImFycmF5IjogIHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXksCi0gICAgICAgICJu
b2RlIjogICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUsCi0gICAgICAgICJzdHJpbmciOiB0
aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZwotICAgIH07Ci19Ci0KLVdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZUltcGwucHJvdG90eXBlID0gewotICAgIHdhc1Nob3duOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgdGhpcy5fZGF0YUdyaWRzICYmIGkgPCB0
aGlzLl9kYXRhR3JpZHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBkYXRhR3JpZCA9
IHRoaXMuX2RhdGFHcmlkc1tpXTsKLSAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhp
cy5fZGF0YUdyaWRQYXJlbnRzLmdldChkYXRhR3JpZCk7Ci0gICAgICAgICAgICBkYXRhR3JpZC5z
aG93KHBhcmVudEVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgdGhpcy5fZGF0YUdyaWRz
ICYmIGkgPCB0aGlzLl9kYXRhR3JpZHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBk
YXRhR3JpZCA9IHRoaXMuX2RhdGFHcmlkc1tpXTsKLSAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlk
UGFyZW50cy5wdXQoZGF0YUdyaWQsIGRhdGFHcmlkLmVsZW1lbnQucGFyZW50RWxlbWVudCk7Ci0g
ICAgICAgICAgICBkYXRhR3JpZC5kZXRhY2goKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBf
Zm9ybWF0TWVzc2FnZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZm9ybWF0dGVk
TWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgdGhpcy5f
Zm9ybWF0dGVkTWVzc2FnZS5jbGFzc05hbWUgPSAiY29uc29sZS1tZXNzYWdlLXRleHQgc291cmNl
LWNvZGUiOwotCi0gICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuQ29uc29sZUFQSSkgewotICAgICAgICAgICAgc3dpdGNo
ICh0aGlzLnR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZToKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVz
c2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiY29uc29sZS50cmFjZSgpIik7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkNsZWFyOgotICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9tZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiQ29uc29sZSB3YXMgY2xlYXJlZCIpKTsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWluZm8i
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuQXNzZXJ0OgotICAgICAgICAgICAg
ICAgICAgICB2YXIgYXJncyA9IFtXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFzc2VydGlvbiBmYWls
ZWQ6IildOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFyYW1ldGVycykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdCh0aGlzLl9wYXJhbWV0ZXJzKTsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUVsZW1lbnQgPSB0aGlzLl9mb3JtYXQo
YXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkRpcjoKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3BhcmFtZXRlcnMgPyB0aGlzLl9wYXJhbWV0ZXJzWzBd
IDogdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFsiJU8iLCBvYmpd
OwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlRWxlbWVudCA9IHRoaXMuX2Zvcm1h
dChhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUHJvZmlsZToKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWxEZXNj
cmlwdG9yLnJlc29sdmVQcm9maWxlVGl0bGUodGhpcy5fbWVzc2FnZVRleHQpOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9tZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJvZmlsZSAnJXMnIHN0YXJ0ZWQuIiwgdGl0bGUpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUHJvZmlsZUVuZDoKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGhhc2hJbmRleCA9IHRoaXMuX21lc3NhZ2VUZXh0Lmxhc3RJbmRleE9mKCIj
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IFdlYkluc3BlY3Rvci5Qcm9maWxl
c1BhbmVsRGVzY3JpcHRvci5yZXNvbHZlUHJvZmlsZVRpdGxlKHRoaXMuX21lc3NhZ2VUZXh0LnN1
YnN0cmluZygwLCBoYXNoSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHVpZCA9IHRo
aXMuX21lc3NhZ2VUZXh0LnN1YnN0cmluZyhoYXNoSW5kZXggKyAxKTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGZvcm1hdCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJvZmlsZSAnJXMnIGZp
bmlzaGVkLiIsICIlXyIpOwotICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IFdlYkluc3Bl
Y3Rvci5saW5raWZ5VVJMQXNOb2RlKCJ3ZWJraXQtcHJvZmlsZTovL0NQVS8iICsgdWlkLCB0aXRs
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRX
aXRoU3Vic3RpdHV0aW9uU3RyaW5nKGZvcm1hdCwgW2xpbmtdLCB0aGlzLl9tZXNzYWdlRWxlbWVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5fcGFyYW1ldGVycyB8fCBbdGhp
cy5fbWVzc2FnZVRleHRdOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlRWxlbWVu
dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3Vy
Y2UuTmV0d29yaykgewotICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gdGhpcy5fcmVxdWVzdC5pbml0aWF0b3Iuc3RhY2tU
cmFjZTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5pbml0aWF0b3IgJiYgdGhp
cy5fcmVxdWVzdC5pbml0aWF0b3IudXJsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudXJs
ID0gdGhpcy5fcmVxdWVzdC5pbml0aWF0b3IudXJsOwotICAgICAgICAgICAgICAgICAgICB0aGlz
LmxpbmUgPSB0aGlzLl9yZXF1ZXN0LmluaXRpYXRvci5saW5lTnVtYmVyOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5sZXZlbCA9PT0g
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcikgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSh0aGlzLl9yZXF1ZXN0LnJlcXVlc3RNZXRob2QgKyAiICIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUVsZW1lbnQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVj
dG9yLmxpbmtpZnlSZXF1ZXN0QXNOb2RlKHRoaXMuX3JlcXVlc3QpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX3JlcXVlc3QuZmFpbGVkKQotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fbWVzc2FnZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
IiAiICsgdGhpcy5fcmVxdWVzdC5sb2NhbGl6ZWRGYWlsRGVzY3JpcHRpb24pKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiICsgdGhpcy5fcmVx
dWVzdC5zdGF0dXNDb2RlICsgIiAoIiArIHRoaXMuX3JlcXVlc3Quc3RhdHVzVGV4dCArICIpIikp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmcmFn
bWVudCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudFdpdGhDdXN0b21MaW5r
aWZpZXIodGhpcy5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5saW5raWZ5UmVxdWVzdEFzTm9k
ZS5iaW5kKG51bGwsIHRoaXMuX3JlcXVlc3QsICIiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX21lc3NhZ2VFbGVtZW50LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnVybCkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgaXNFeHRlcm5hbCA9ICFXZWJJbnNwZWN0b3IucmVz
b3VyY2VGb3JVUkwodGhpcy51cmwpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbmNob3JF
bGVtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUodGhpcy51cmwsIHRoaXMudXJs
LCAiY29uc29sZS1tZXNzYWdlLXVybCIsIGlzRXh0ZXJuYWwpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlRWxlbWVudCA9IHRoaXMuX2Zvcm1hdChbdGhp
cy5fbWVzc2FnZVRleHRdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHZhciBhcmdzID0gdGhpcy5fcGFyYW1ldGVycyB8fCBbdGhpcy5fbWVzc2FnZVRleHRd
OwotICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUVsZW1lbnQgPSB0aGlzLl9mb3JtYXQoYXJncyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5zb3VyY2UgIT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmsgfHwgdGhpcy5fcmVxdWVzdCkgewot
ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YWNrVHJhY2UgJiYgdGhpcy5fc3RhY2tUcmFjZS5sZW5n
dGggJiYgdGhpcy5fc3RhY2tUcmFjZVswXS51cmwpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9h
bmNob3JFbGVtZW50ID0gdGhpcy5fbGlua2lmeUNhbGxGcmFtZSh0aGlzLl9zdGFja1RyYWNlWzBd
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51cmwgJiYgdGhpcy51cmwgIT09ICJ1bmRl
ZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYW5jaG9yRWxlbWVudCA9IHRoaXMuX2xp
bmtpZnlMb2NhdGlvbih0aGlzLnVybCwgdGhpcy5saW5lLCAwKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQodGhp
cy5fbWVzc2FnZUVsZW1lbnQpOwotICAgICAgICBpZiAodGhpcy5fYW5jaG9yRWxlbWVudCkgewot
ICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2Uu
YXBwZW5kQ2hpbGQodGhpcy5fYW5jaG9yRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZhciBkdW1wU3RhY2tUcmFjZSA9ICEhdGhpcy5fc3RhY2tUcmFjZSAmJiB0aGlzLl9z
dGFja1RyYWNlLmxlbmd0aCAmJiAodGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmsgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciB8fCB0aGlzLnR5cGUgPT09IFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZSk7Ci0gICAgICAgIGlm
IChkdW1wU3RhY2tUcmFjZSkgewotICAgICAgICAgICAgdmFyIG9sID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgib2wiKTsKLSAgICAgICAgICAgIG9sLmNsYXNzTmFtZSA9ICJvdXRsaW5lLWRpc2Ns
b3N1cmUiOwotICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFRyZWVPdXRsaW5lKG9s
KTsKLQotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlOwot
ICAgICAgICAgICAgdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCwgbnVsbCwgdHJ1
ZSk7Ci0gICAgICAgICAgICBjb250ZW50LnRyZWVFbGVtZW50Rm9yVGVzdCA9IHJvb3Q7Ci0gICAg
ICAgICAgICB0cmVlT3V0bGluZS5hcHBlbmRDaGlsZChyb290KTsKLSAgICAgICAgICAgIGlmICh0
aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFj
ZSkKLSAgICAgICAgICAgICAgICByb290LmV4cGFuZCgpOwotCi0gICAgICAgICAgICB0aGlzLl9w
b3B1bGF0ZVN0YWNrVHJhY2VUcmVlRWxlbWVudChyb290KTsKLSAgICAgICAgICAgIHRoaXMuX2Zv
cm1hdHRlZE1lc3NhZ2UgPSBvbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgaXMgdXNl
ZCBmb3IgaW5saW5lIG1lc3NhZ2UgYnViYmxlcyBpbiBTb3VyY2VGcmFtZXMsIG9yIG90aGVyIHBs
YWluLXRleHQgcmVwcmVzZW50YXRpb25zLgotICAgICAgICB0aGlzLl9tZXNzYWdlID0gdGhpcy5f
bWVzc2FnZUVsZW1lbnQudGV4dENvbnRlbnQ7Ci0gICAgfSwKLQotICAgIGdldCBtZXNzYWdlKCkK
LSAgICB7Ci0gICAgICAgIC8vIGZvcmNlIG1lc3NhZ2UgZm9ybWF0dGluZwotICAgICAgICB2YXIg
Zm9ybWF0dGVkTWVzc2FnZSA9IHRoaXMuZm9ybWF0dGVkTWVzc2FnZTsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX21lc3NhZ2U7Ci0gICAgfSwKLQotICAgIGdldCBmb3JtYXR0ZWRNZXNzYWdlKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSkKLSAgICAgICAgICAgIHRo
aXMuX2Zvcm1hdE1lc3NhZ2UoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZE1lc3Nh
Z2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuTmV0
d29ya1JlcXVlc3R9Ci0gICAgICovCi0gICAgcmVxdWVzdDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3Q7Ci0gICAgfSwKLQotICAgIF9saW5raWZ5TG9jYXRp
b246IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUUoNjI3MjUpOiBzdGFjayB0cmFjZSBsaW5lL2NvbHVtbiBudW1iZXJzIGFyZSBv
bmUtYmFzZWQuCi0gICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyID8gbGluZU51bWJlciAt
IDEgOiAwOwotICAgICAgICBjb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXIgPyBjb2x1bW5OdW1i
ZXIgLSAxIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmtpZmllci5saW5raWZ5TG9jYXRp
b24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7
Ci0gICAgfSwKLQotICAgIF9saW5raWZ5Q2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmws
IGNhbGxGcmFtZS5saW5lTnVtYmVyLCBjYWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKLSAgICB9LAot
Ci0gICAgaXNFcnJvck9yV2FybmluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
ICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
Lldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VMZXZlbC5FcnJvcik7Ci0gICAgfSwKLQotICAgIF9mb3JtYXQ6IGZ1bmN0aW9uKHBhcmFt
ZXRlcnMpCi0gICAgewotICAgICAgICAvLyBUaGlzIG5vZGUgaXMgdXNlZCBsaWtlIGEgQnVpbGRl
ci4gVmFsdWVzIGFyZSBjb250aW51YWxseSBhcHBlbmRlZCBvbnRvIGl0LgotICAgICAgICB2YXIg
Zm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAg
ICBpZiAoIXBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFJl
c3VsdDsKLQotICAgICAgICAvLyBGb3JtYXR0aW5nIGNvZGUgYmVsb3cgYXNzdW1lcyB0aGF0IHBh
cmFtZXRlcnMgYXJlIGFsbCB3cmFwcGVycyB3aGVyZWFzIGZyb250ZW5kIGNvbnNvbGUKLSAgICAg
ICAgLy8gQVBJIGFsbG93cyBwYXNzaW5nIGFyYml0cmFyeSB2YWx1ZXMgYXMgbWVzc2FnZXMgKHN0
cmluZ3MsIG51bWJlcnMsIGV0Yy4pLiBXcmFwIHRoZW0gaGVyZS4KLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogT25seSBwYXNzIHJ1bnRpbWUgd3JhcHBlcnMgaGVyZS4KLSAgICAgICAgICAgIGlmIChwYXJh
bWV0ZXJzW2ldIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ld
ID09PSAib2JqZWN0IikKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVj
dG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXJhbWV0ZXJzW2ldKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUocGFyYW1ldGVyc1tpXSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBUaGVyZSBjYW4gYmUgc3RyaW5nIGxvZyBhbmQgc3RyaW5nIGV2YWwgcmVzdWx0
LiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYmFzZWQgb24gbWVzc2FnZSB0eXBlLgotICAg
ICAgICB2YXIgc2hvdWxkRm9ybWF0TWVzc2FnZSA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3Qu
dHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0gInN0cmluZyIgJiYgdGhpcy50eXBlICE9PSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0OwotCi0gICAgICAgIC8vIE11
bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgYmVpbmcgYSBmb3JtYXQgc3RyaW5nLiBT
YXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgotICAgICAgICBpZiAoc2hvdWxkRm9ybWF0TWVzc2Fn
ZSkgewotICAgICAgICAgICAgLy8gTXVsdGlwbGUgcGFyYW1ldGVycyB3aXRoIHRoZSBmaXJzdCBi
ZWluZyBhIGZvcm1hdCBzdHJpbmcuIFNhdmUgdW51c2VkIHN1YnN0aXR1dGlvbnMuCi0gICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZyhwYXJh
bWV0ZXJzWzBdLmRlc2NyaXB0aW9uLCBwYXJhbWV0ZXJzLnNsaWNlKDEpLCBmb3JtYXR0ZWRSZXN1
bHQpOwotICAgICAgICAgICAgcGFyYW1ldGVycyA9IHJlc3VsdC51bnVzZWRTdWJzdGl0dXRpb25z
OwotICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIGZv
cm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UYWJsZSkgewotICAgICAgICAgICAgZm9ybWF0dGVkUmVz
dWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzVGFibGUocGFyYW1ldGVycykp
OwotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdDsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFNpbmdsZSBwYXJhbWV0ZXIsIG9yIHVudXNlZCBzdWJzdGl0dXRpb25zIGZyb20gYWJv
dmUuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgLy8gSW5saW5lIHN0cmluZ3Mgd2hlbiBmb3JtYXR0aW5nLgotICAgICAg
ICAgICAgaWYgKHNob3VsZEZvcm1hdE1lc3NhZ2UgJiYgcGFyYW1ldGVyc1tpXS50eXBlID09PSAi
c3RyaW5nIikKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUocGFyYW1ldGVyc1tpXS5kZXNjcmlwdGlvbikpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0
aGlzLl9mb3JtYXRQYXJhbWV0ZXIocGFyYW1ldGVyc1tpXSwgZmFsc2UsIHRydWUpKTsKLSAgICAg
ICAgICAgIGlmIChpIDwgcGFyYW1ldGVycy5sZW5ndGggLSAxKQotICAgICAgICAgICAgICAgIGZv
cm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gb3V0cHV0Ci0gICAgICogQHBhcmFtIHtib29s
ZWFuPX0gZm9yY2VPYmplY3RGb3JtYXQKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpbmNsdWRl
UHJldmlldwotICAgICAqLwotICAgIF9mb3JtYXRQYXJhbWV0ZXI6IGZ1bmN0aW9uKG91dHB1dCwg
Zm9yY2VPYmplY3RGb3JtYXQsIGluY2x1ZGVQcmV2aWV3KQotICAgIHsKLSAgICAgICAgdmFyIHR5
cGU7Ci0gICAgICAgIGlmIChmb3JjZU9iamVjdEZvcm1hdCkKLSAgICAgICAgICAgIHR5cGUgPSAi
b2JqZWN0IjsKLSAgICAgICAgZWxzZSBpZiAob3V0cHV0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9y
LlJlbW90ZU9iamVjdCkKLSAgICAgICAgICAgIHR5cGUgPSBvdXRwdXQuc3VidHlwZSB8fCBvdXRw
dXQudHlwZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiBvdXRwdXQ7
Ci0KLSAgICAgICAgdmFyIGZvcm1hdHRlciA9IHRoaXMuX2N1c3RvbUZvcm1hdHRlcnNbdHlwZV07
Ci0gICAgICAgIGlmICghZm9ybWF0dGVyKSB7Ci0gICAgICAgICAgICBmb3JtYXR0ZXIgPSB0aGlz
Ll9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOwotICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmRl
c2NyaXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0gImNvbnNvbGUtZm9y
bWF0dGVkLSIgKyB0eXBlICsgIiBzb3VyY2UtY29kZSI7Ci0gICAgICAgIGZvcm1hdHRlci5jYWxs
KHRoaXMsIG91dHB1dCwgc3BhbiwgaW5jbHVkZVByZXZpZXcpOwotICAgICAgICByZXR1cm4gc3Bh
bjsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFBhcmFtZXRlckFzVmFsdWU6IGZ1bmN0aW9uKHZhbCwg
ZWxlbSkKLSAgICB7Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUodmFsKSk7Ci0gICAgfSwKLQotICAgIF9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdDogZnVu
Y3Rpb24ob2JqLCBlbGVtLCBpbmNsdWRlUHJldmlldykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Zv
cm1hdFBhcmFtZXRlckFzQXJyYXlPck9iamVjdChvYmosIG9iai5kZXNjcmlwdGlvbiwgZWxlbSwg
aW5jbHVkZVByZXZpZXcpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5SZW1vdGVPYmplY3R9IG9iagotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlw
dGlvbgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbQotICAgICAqIEBwYXJhbSB7Ym9vbGVh
bn0gaW5jbHVkZVByZXZpZXcKLSAgICAgKi8KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNBcnJheU9y
T2JqZWN0OiBmdW5jdGlvbihvYmosIGRlc2NyaXB0aW9uLCBlbGVtLCBpbmNsdWRlUHJldmlldykK
LSAgICB7Ci0gICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbikKLSAgICAgICAgICAgIHRpdGxlRWxl
bWVudC5jcmVhdGVUZXh0Q2hpbGQoZGVzY3JpcHRpb24pOwotICAgICAgICBpZiAoaW5jbHVkZVBy
ZXZpZXcgJiYgb2JqLnByZXZpZXcpIHsKLSAgICAgICAgICAgIHRpdGxlRWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJjb25zb2xlLW9iamVjdC1wcmV2aWV3Iik7Ci0gICAgICAgICAgICB2YXIgbG9zc2xl
c3MgPSB0aGlzLl9hcHBlbmRPYmplY3RQcmV2aWV3KG9iaiwgZGVzY3JpcHRpb24sIHRpdGxlRWxl
bWVudCk7Ci0gICAgICAgICAgICBpZiAobG9zc2xlc3MpIHsKLSAgICAgICAgICAgICAgICBlbGVt
LmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHZhciBzZWN0aW9uID0gbmV3IFdlYkluc3Bl
Y3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbihvYmosIHRpdGxlRWxlbWVudCk7Ci0gICAgICAg
IHNlY3Rpb24uZW5hYmxlQ29udGV4dE1lbnUoKTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChz
ZWN0aW9uLmVsZW1lbnQpOwotCi0gICAgICAgIHZhciBub3RlID0gc2VjdGlvbi50aXRsZUVsZW1l
bnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAib2JqZWN0LWluZm8tc3RhdGUtbm90ZSIpOwotICAgICAg
ICBub3RlLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPYmplY3Qgc3RhdGUgYmVsb3cg
aXMgY2FwdHVyZWQgdXBvbiBmaXJzdCBleHBhbnNpb24iKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0fSBvYmoKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gZGVzY3JpcHRpb24KLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRpdGxlRWxl
bWVudAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWZmIHByZXZpZXcgY2FwdHVyZWQg
YWxsIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIF9hcHBlbmRPYmplY3RQcmV2aWV3OiBmdW5j
dGlvbihvYmosIGRlc2NyaXB0aW9uLCB0aXRsZUVsZW1lbnQpCi0gICAgewotICAgICAgICB2YXIg
cHJldmlldyA9IG9iai5wcmV2aWV3OwotICAgICAgICB2YXIgaXNBcnJheSA9IG9iai5zdWJ0eXBl
ID09PSAiYXJyYXkiOwotCi0gICAgICAgIGlmIChkZXNjcmlwdGlvbikKLSAgICAgICAgICAgIHRp
dGxlRWxlbWVudC5jcmVhdGVUZXh0Q2hpbGQoIiAiKTsKLSAgICAgICAgdGl0bGVFbGVtZW50LmNy
ZWF0ZVRleHRDaGlsZChpc0FycmF5ID8gIlsiIDogInsiKTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwcmV2aWV3LnByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChpID4gMCkKLSAgICAgICAgICAgICAgICB0aXRsZUVsZW1lbnQuY3JlYXRlVGV4dENoaWxkKCIs
ICIpOwotCi0gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnRpZXNbaV07
Ci0gICAgICAgICAgICBpZiAoIWlzQXJyYXkgfHwgcHJvcGVydHkubmFtZSAhPSBpKSB7Ci0gICAg
ICAgICAgICAgICAgdGl0bGVFbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgIm5hbWUiKS50ZXh0
Q29udGVudCA9IHByb3BlcnR5Lm5hbWU7Ci0gICAgICAgICAgICAgICAgdGl0bGVFbGVtZW50LmNy
ZWF0ZVRleHRDaGlsZCgiOiAiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGl0bGVF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3JlbmRlclByb3BlcnR5UHJldmlldyhwcm9wZXJ0eSkp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChwcmV2aWV3Lm92ZXJmbG93KQotICAgICAgICAgICAg
dGl0bGVFbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIikudGV4dENvbnRlbnQgPSAiXHUyMDI2IjsK
LSAgICAgICAgdGl0bGVFbGVtZW50LmNyZWF0ZVRleHRDaGlsZChpc0FycmF5ID8gIl0iIDogIn0i
KTsKLSAgICAgICAgcmV0dXJuIHByZXZpZXcubG9zc2xlc3M7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7UnVudGltZUFnZW50LlByb3BlcnR5UHJldmlld30gcHJvcGVydHkKLSAg
ICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIF9yZW5kZXJQcm9wZXJ0eVByZXZp
ZXc6IGZ1bmN0aW9uKHByb3BlcnR5KQotICAgIHsKLSAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0gImNvbnNv
bGUtZm9ybWF0dGVkLSIgKyBwcm9wZXJ0eS50eXBlOwotCi0gICAgICAgIGlmIChwcm9wZXJ0eS50
eXBlID09PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gImZ1
bmN0aW9uIjsKLSAgICAgICAgICAgIHJldHVybiBzcGFuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHByb3BlcnR5LnR5cGUgPT09ICJvYmplY3QiICYmIHByb3BlcnR5LnN1YnR5cGUgPT09ICJy
ZWdleHAiKSB7Ci0gICAgICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtZm9ybWF0
dGVkLXN0cmluZyIpOwotICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHByb3BlcnR5LnZh
bHVlOwotICAgICAgICAgICAgcmV0dXJuIHNwYW47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cHJvcGVydHkudHlwZSA9PT0gIm9iamVjdCIgJiYgcHJvcGVydHkuc3VidHlwZSA9PT0gIm5vZGUi
ICYmIHByb3BlcnR5LnZhbHVlKSB7Ci0gICAgICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImNv
bnNvbGUtZm9ybWF0dGVkLXByZXZpZXctbm9kZSIpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LkRPTVByZXNlbnRhdGlvblV0aWxzLmNyZWF0ZVNwYW5zRm9yTm9kZVRpdGxlKHNwYW4sIHByb3Bl
cnR5LnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBzcGFuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICBzcGFuLnRl
eHRDb250ZW50ID0gIlwiIiArIHByb3BlcnR5LnZhbHVlICsgIlwiIjsKLSAgICAgICAgICAgIHJl
dHVybiBzcGFuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHByb3Bl
cnR5LnZhbHVlOwotICAgICAgICByZXR1cm4gc3BhbjsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFBh
cmFtZXRlckFzTm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQotICAgIHsKLSAgICAgICAgZnVu
Y3Rpb24gcHJpbnROb2RlKG5vZGVJZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFub2Rl
SWQpIHsKLSAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgRE9NIGlzIGxvYWRlZCBhZnRlciB0
aGUgc3luYyBtZXNzYWdlIGlzIGJlaW5nIGZvcm1hdHRlZCwgc28gd2UgZ2V0IG5vCi0gICAgICAg
ICAgICAgICAgLy8gbm9kZUlkIGhlcmUuIFNvIHdlIGZhbGwgYmFjayB0byBvYmplY3QgZm9ybWF0
dGluZyBoZXJlLgotICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0
KG9iamVjdCwgZWxlbSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciB0cmVlT3V0bGluZSA9IG5ldyBXZWJJbnNwZWN0b3IuRWxl
bWVudHNUcmVlT3V0bGluZShmYWxzZSwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgdHJlZU91
dGxpbmUuc2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLnJvb3RET01O
b2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwotICAgICAgICAg
ICAgdHJlZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJvdXRsaW5lLWRpc2Nsb3N1cmUi
KTsKLSAgICAgICAgICAgIGlmICghdHJlZU91dGxpbmUuY2hpbGRyZW5bMF0uaGFzQ2hpbGRyZW4p
Ci0gICAgICAgICAgICAgICAgdHJlZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaW5n
bGUtbm9kZSIpOwotICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0cmVlT3V0bGluZS5lbGVt
ZW50KTsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLmVsZW1lbnQudHJlZUVsZW1lbnRGb3JUZXN0
ID0gdHJlZU91dGxpbmUuY2hpbGRyZW5bMF07Ci0gICAgICAgIH0KLSAgICAgICAgb2JqZWN0LnB1
c2hOb2RlVG9Gcm9udGVuZChwcmludE5vZGUuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gYXJyYXkKLSAgICAg
KiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHVzZUFycmF5UHJldmlld0luRm9ybWF0
dGVyOiBmdW5jdGlvbihhcnJheSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnR5cGUgIT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5EaXJYTUwgJiYgISFhcnJh
eS5wcmV2aWV3OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5SZW1vdGVPYmplY3R9IGFycmF5Ci0gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtCi0gICAg
ICovCi0gICAgX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXk6IGZ1bmN0aW9uKGFycmF5LCBlbGVtKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMudXNlQXJyYXlQcmV2aWV3SW5Gb3JtYXR0ZXIoYXJyYXkp
KSB7Ci0gICAgICAgICAgICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5T3JPYmplY3QoYXJy
YXksICIiLCBlbGVtLCB0cnVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IG1heEZsYXRBcnJheUxlbmd0aCA9IDEwMDsKLSAgICAgICAgaWYgKHRoaXMu
X2lzT3V0ZGF0ZWQgfHwgYXJyYXkuYXJyYXlMZW5ndGgoKSA+IG1heEZsYXRBcnJheUxlbmd0aCkK
LSAgICAgICAgICAgIHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0KGFycmF5LCBlbGVtLCBm
YWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFycmF5LmdldE93blByb3BlcnRpZXMo
dGhpcy5fcHJpbnRBcnJheS5iaW5kKHRoaXMsIGFycmF5LCBlbGVtKSk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3Q+fSBw
YXJhbWV0ZXJzCi0gICAgICogQHJldHVybiB7RWxlbWVudH0KLSAgICAgKi8KLSAgICBfZm9ybWF0
UGFyYW1ldGVyQXNUYWJsZTogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHZh
ciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB2YXIg
dGFibGUgPSBwYXJhbWV0ZXJzWzBdOwotICAgICAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS5wcmV2
aWV3KQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIGNvbHVtbk5h
bWVzID0gW107Ci0gICAgICAgIHZhciBwcmV2aWV3ID0gdGFibGUucHJldmlldzsKLSAgICAgICAg
dmFyIHJvd3MgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3Bl
cnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciByb3dQcm9wZXJ0eSA9IHByZXZp
ZXcucHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIHZhciByb3dQcmV2aWV3ID0gcm93UHJvcGVy
dHkudmFsdWVQcmV2aWV3OwotICAgICAgICAgICAgaWYgKCFyb3dQcmV2aWV3KQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB2YXIgcm93VmFsdWUgPSB7fTsKLSAgICAg
ICAgICAgIGNvbnN0IG1heENvbHVtbnNUb1JlbmRlciA9IDIwOwotICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCByb3dQcmV2aWV3LnByb3BlcnRpZXMubGVuZ3RoICYmIGNvbHVtbk5hbWVz
Lmxlbmd0aCA8IG1heENvbHVtbnNUb1JlbmRlcjsgKytqKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNlbGxQcm9wZXJ0eSA9IHJvd1ByZXZpZXcucHJvcGVydGllc1tqXTsKLSAgICAgICAgICAgICAg
ICBpZiAoY29sdW1uTmFtZXMuaW5kZXhPZihjZWxsUHJvcGVydHkubmFtZSkgPT09IC0xKQotICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5wdXNoKGNlbGxQcm9wZXJ0eS5uYW1lKTsKLSAg
ICAgICAgICAgICAgICByb3dWYWx1ZVtjZWxsUHJvcGVydHkubmFtZV0gPSB0aGlzLl9yZW5kZXJQ
cm9wZXJ0eVByZXZpZXcoY2VsbFByb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJvd3MucHVzaChbcm93UHJvcGVydHkubmFtZSwgcm93VmFsdWVdKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBmbGF0VmFsdWVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cm93cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHJvd05hbWUgPSByb3dzW2ldWzBd
OwotICAgICAgICAgICAgdmFyIHJvd1ZhbHVlID0gcm93c1tpXVsxXTsKLSAgICAgICAgICAgIGZs
YXRWYWx1ZXMucHVzaChyb3dOYW1lKTsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
Y29sdW1uTmFtZXMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNo
KHJvd1ZhbHVlW2NvbHVtbk5hbWVzW2pdXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZs
YXRWYWx1ZXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIGNv
bHVtbk5hbWVzLnVuc2hpZnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoaW5kZXgpIikpOwotICAg
ICAgICB2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuY3JlYXRlU29ydGFibGVE
YXRhR3JpZChjb2x1bW5OYW1lcywgZmxhdFZhbHVlcyk7Ci0gICAgICAgIGRhdGFHcmlkLnJlbmRl
cklubGluZSgpOwotICAgICAgICB0aGlzLl9kYXRhR3JpZHMucHVzaChkYXRhR3JpZCk7Ci0gICAg
ICAgIHRoaXMuX2RhdGFHcmlkUGFyZW50cy5wdXQoZGF0YUdyaWQsIGVsZW1lbnQpOwotICAgICAg
ICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFBhcmFtZXRlckFzU3RyaW5n
OiBmdW5jdGlvbihvdXRwdXQsIGVsZW0pCi0gICAgewotICAgICAgICB2YXIgc3BhbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAiY29u
c29sZS1mb3JtYXR0ZWQtc3RyaW5nIHNvdXJjZS1jb2RlIjsKLSAgICAgICAgc3Bhbi5hcHBlbmRD
aGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnQob3V0cHV0LmRlc2NyaXB0
aW9uKSk7Ci0KLSAgICAgICAgLy8gTWFrZSBibGFjayBxdW90ZXMuCi0gICAgICAgIGVsZW0ucmVt
b3ZlU3R5bGVDbGFzcygiY29uc29sZS1mb3JtYXR0ZWQtc3RyaW5nIik7Ci0gICAgICAgIGVsZW0u
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlwiIikpOwotICAgICAgICBlbGVt
LmFwcGVuZENoaWxkKHNwYW4pOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJcIiIpKTsKLSAgICB9LAotCi0gICAgX3ByaW50QXJyYXk6IGZ1bmN0aW9u
KGFycmF5LCBlbGVtLCBwcm9wZXJ0aWVzKQotICAgIHsKLSAgICAgICAgaWYgKCFwcm9wZXJ0aWVz
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBlbGVtZW50cyA9IFtdOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICB2YXIgbmFt
ZSA9IHByb3BlcnR5Lm5hbWU7Ci0gICAgICAgICAgICBpZiAoIWlzTmFOKG5hbWUpKQotICAgICAg
ICAgICAgICAgIGVsZW1lbnRzW25hbWVdID0gdGhpcy5fZm9ybWF0QXNBcnJheUVudHJ5KHByb3Bl
cnR5LnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoIlsiKSk7Ci0gICAgICAgIHZhciBsYXN0Tm9uRW1wdHlJbmRleCA9
IC0xOwotCi0gICAgICAgIGZ1bmN0aW9uIGFwcGVuZFVuZGVmaW5lZChlbGVtLCBpbmRleCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4IC0gbGFzdE5vbkVtcHR5SW5kZXggPD0gMSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2YXIgc3BhbiA9IGVsZW0uY3Jl
YXRlQ2hpbGQoInNwYW4iLCAiY29uc29sZS1mb3JtYXR0ZWQtdW5kZWZpbmVkIik7Ci0gICAgICAg
ICAgICBzcGFuLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJ1bmRlZmluZWQg
w5cgJWQiLCBpbmRleCAtIGxhc3ROb25FbXB0eUluZGV4IC0gMSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgbGVuZ3RoID0gYXJyYXkuYXJyYXlMZW5ndGgoKTsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVt
ZW50c1tpXTsKLSAgICAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgaWYgKGkgLSBsYXN0Tm9uRW1wdHlJbmRleCA+IDEpIHsKLSAg
ICAgICAgICAgICAgICBhcHBlbmRVbmRlZmluZWQoZWxlbSwgaSk7Ci0gICAgICAgICAgICAgICAg
ZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLCAiKSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0gICAgICAg
ICAgICBsYXN0Tm9uRW1wdHlJbmRleCA9IGk7Ci0gICAgICAgICAgICBpZiAoaSA8IGxlbmd0aCAt
IDEpCi0gICAgICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgiLCAiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXBwZW5kVW5kZWZpbmVkKGVsZW0sIGxl
bmd0aCk7Ci0KLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiXSIpKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdEFzQXJyYXlFbnRyeTogZnVuY3Rpb24ob3V0
cHV0KQotICAgIHsKLSAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBleHBhbnNpb24gb2YgY3Jv
c3MtcmVmZXJlbmNpbmcgYXJyYXlzLgotICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0UGFyYW1l
dGVyKG91dHB1dCwgb3V0cHV0LnN1YnR5cGUgJiYgb3V0cHV0LnN1YnR5cGUgPT09ICJhcnJheSIs
IGZhbHNlKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmc6IGZ1
bmN0aW9uKGZvcm1hdCwgcGFyYW1ldGVycywgZm9ybWF0dGVkUmVzdWx0KQotICAgIHsKLSAgICAg
ICAgdmFyIGZvcm1hdHRlcnMgPSB7fTsKLQotICAgICAgICBmdW5jdGlvbiBwYXJhbWV0ZXJGb3Jt
YXR0ZXIoZm9yY2UsIG9iaikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zv
cm1hdFBhcmFtZXRlcihvYmosIGZvcmNlLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBzdHJpbmdGb3JtYXR0ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gb2JqLmRlc2NyaXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZmxvYXRG
b3JtYXR0ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9iai52YWx1
ZSAhPT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgcmV0dXJuICJOYU4iOwotICAgICAgICAg
ICAgcmV0dXJuIG9iai52YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGludGVn
ZXJGb3JtYXR0ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9iai52
YWx1ZSAhPT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgcmV0dXJuICJOYU4iOwotICAgICAg
ICAgICAgcmV0dXJuIE1hdGguZmxvb3Iob2JqLnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGJ5cGFzc0Zvcm1hdHRlcihvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiAob2JqIGluc3RhbmNlb2YgTm9kZSkgPyBvYmogOiAiIjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBjdXJyZW50U3R5bGUgPSBudWxsOwotICAgICAgICBmdW5jdGlvbiBzdHlsZUZvcm1h
dHRlcihvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IHt9OwotICAg
ICAgICAgICAgdmFyIGJ1ZmZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAg
ICAgICAgICAgIGJ1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgb2JqLmRlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyLnN0eWxlLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYnVmZmVyLnN0eWxlW2ldOwotICAg
ICAgICAgICAgICAgIGlmIChpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpKQotICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U3R5bGVbcHJvcGVydHldID0gYnVmZmVyLnN0eWxlW3Byb3Bl
cnR5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGlzV2hp
dGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHBy
ZWZpeGVzID0gWyJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJjb2xvciIsICJmb250IiwgImxpbmUi
LCAibWFyZ2luIiwgInBhZGRpbmciLCAidGV4dCIsICItd2Via2l0LWJhY2tncm91bmQiLCAiLXdl
YmtpdC1ib3JkZXIiLCAiLXdlYmtpdC1mb250IiwgIi13ZWJraXQtbWFyZ2luIiwgIi13ZWJraXQt
cGFkZGluZyIsICItd2Via2l0LXRleHQiXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydHku
c3RhcnRzV2l0aChwcmVmaXhlc1tpXSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVvIGZvciBmb3JtYXR0aW5nIG9iamVjdHMuCi0gICAg
ICAgIGZvcm1hdHRlcnMubyA9IHBhcmFtZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIGZhbHNlKTsK
LSAgICAgICAgZm9ybWF0dGVycy5zID0gc3RyaW5nRm9ybWF0dGVyOwotICAgICAgICBmb3JtYXR0
ZXJzLmYgPSBmbG9hdEZvcm1hdHRlcjsKLSAgICAgICAgLy8gRmlyZWJ1ZyBhbGxvd3MgYm90aCAl
aSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMuCi0gICAgICAgIGZvcm1hdHRlcnMuaSA9
IGludGVnZXJGb3JtYXR0ZXI7Ci0gICAgICAgIGZvcm1hdHRlcnMuZCA9IGludGVnZXJGb3JtYXR0
ZXI7Ci0KLSAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVjIGZvciBzdHlsaW5nIHRoZSBtZXNzYWdl
LgotICAgICAgICBmb3JtYXR0ZXJzLmMgPSBzdHlsZUZvcm1hdHRlcjsKLQotICAgICAgICAvLyBT
dXBwb3J0ICVPIHRvIGZvcmNlIG9iamVjdCBmb3JtYXR0aW5nLCBpbnN0ZWFkIG9mIHRoZSB0eXBl
LWJhc2VkICVvIGZvcm1hdHRpbmcuCi0gICAgICAgIGZvcm1hdHRlcnMuTyA9IHBhcmFtZXRlckZv
cm1hdHRlci5iaW5kKHRoaXMsIHRydWUpOwotCi0gICAgICAgIGZvcm1hdHRlcnMuXyA9IGJ5cGFz
c0Zvcm1hdHRlcjsKLQotICAgICAgICBmdW5jdGlvbiBhcHBlbmQoYSwgYikKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBOb2RlKQotICAgICAgICAgICAgICAgIGEuYXBw
ZW5kQ2hpbGQoYik7Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYiAhPT0gInVuZGVmaW5l
ZCIpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9BcHBlbmQgPSBXZWJJbnNwZWN0b3IubGlua2lm
eVN0cmluZ0FzRnJhZ21lbnQoU3RyaW5nKGIpKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3BhbicpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4g
Y3VycmVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5zdHlsZVtrZXld
ID0gY3VycmVudFN0eWxlW2tleV07Ci0gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5k
Q2hpbGQodG9BcHBlbmQpOwotICAgICAgICAgICAgICAgICAgICB0b0FwcGVuZCA9IHdyYXBwZXI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQodG9BcHBl
bmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGE7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBTdHJpbmcuZm9ybWF0IGRvZXMgdHJlYXQgZm9ybWF0dGVkUmVzdWx0IGxpa2Ug
YSBCdWlsZGVyLCByZXN1bHQgaXMgYW4gb2JqZWN0LgotICAgICAgICByZXR1cm4gU3RyaW5nLmZv
cm1hdChmb3JtYXQsIHBhcmFtZXRlcnMsIGZvcm1hdHRlcnMsIGZvcm1hdHRlZFJlc3VsdCwgYXBw
ZW5kKTsKLSAgICB9LAotCi0gICAgY2xlYXJIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgaGlnaGxpZ2h0ZWRNZXNzYWdlID0gdGhpcy5fZm9ybWF0dGVkTWVzc2Fn
ZTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2U7Ci0gICAgICAgIGRlbGV0
ZSB0aGlzLl9hbmNob3JFbGVtZW50OwotICAgICAgICBkZWxldGUgdGhpcy5fbWVzc2FnZUVsZW1l
bnQ7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdE1lc3NhZ2UoKTsKLSAgICAgICAgdGhpcy5fZWxlbWVu
dC5yZXBsYWNlQ2hpbGQodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSwgaGlnaGxpZ2h0ZWRNZXNzYWdl
KTsKLSAgICB9LAotCi0gICAgaGlnaGxpZ2h0U2VhcmNoUmVzdWx0czogZnVuY3Rpb24ocmVnZXhP
YmplY3QpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0U2VhcmNoUmVzdWx0c0lu
RWxlbWVudChyZWdleE9iamVjdCwgdGhpcy5fbWVzc2FnZUVsZW1lbnQpOwotICAgICAgICBpZiAo
dGhpcy5fYW5jaG9yRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFNlYXJjaFJl
c3VsdHNJbkVsZW1lbnQocmVnZXhPYmplY3QsIHRoaXMuX2FuY2hvckVsZW1lbnQpOwotCi0gICAg
ICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwotICAgIH0sCi0KLSAg
ICBfaGlnaGxpZ2h0U2VhcmNoUmVzdWx0c0luRWxlbWVudDogZnVuY3Rpb24ocmVnZXhPYmplY3Qs
IGVsZW1lbnQpCi0gICAgewotICAgICAgICByZWdleE9iamVjdC5sYXN0SW5kZXggPSAwOwotICAg
ICAgICB2YXIgdGV4dCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7Ci0gICAgICAgIHZhciBtYXRjaCA9
IHJlZ2V4T2JqZWN0LmV4ZWModGV4dCk7Ci0gICAgICAgIHZhciBtYXRjaFJhbmdlcyA9IFtdOwot
ICAgICAgICB3aGlsZSAobWF0Y2gpIHsKLSAgICAgICAgICAgIG1hdGNoUmFuZ2VzLnB1c2goeyBv
ZmZzZXQ6IG1hdGNoLmluZGV4LCBsZW5ndGg6IG1hdGNoWzBdLmxlbmd0aCB9KTsKLSAgICAgICAg
ICAgIG1hdGNoID0gcmVnZXhPYmplY3QuZXhlYyh0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBX
ZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNoUmVzdWx0cyhlbGVtZW50LCBtYXRjaFJhbmdlcyk7
Ci0gICAgfSwKLQotICAgIG1hdGNoZXNSZWdleDogZnVuY3Rpb24ocmVnZXhPYmplY3QpCi0gICAg
ewotICAgICAgICByZXR1cm4gcmVnZXhPYmplY3QudGVzdCh0aGlzLl9tZXNzYWdlKSB8fCAodGhp
cy5fYW5jaG9yRWxlbWVudCAmJiByZWdleE9iamVjdC50ZXN0KHRoaXMuX2FuY2hvckVsZW1lbnQu
dGV4dENvbnRlbnQpKTsKLSAgICB9LAotCi0gICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4g
dGhpcy5fZWxlbWVudDsKLQotICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgICAgICBlbGVtZW50Lm1lc3NhZ2UgPSB0aGlzOwotICAgICAgICBl
bGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UiOwotCi0gICAgICAgIHRoaXMuX2Vs
ZW1lbnQgPSBlbGVtZW50OwotCi0gICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewotICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgotICAg
ICAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWxvZy1sZXZlbCIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
Y29uc29sZS1kZWJ1Zy1sZXZlbCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAg
ICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLXdhcm5pbmctbGV2ZWwiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuRXJyb3I6Ci0gICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
ImNvbnNvbGUtZXJyb3ItbGV2ZWwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLlN0YXJ0R3JvdXAgfHwgdGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxhcHNlZCkKLSAgICAgICAgICAgIGVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS1ncm91cC10aXRsZSIpOwotCi0gICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5mb3JtYXR0ZWRNZXNzYWdlKTsKLQotICAgICAgICBpZiAo
dGhpcy5yZXBlYXRDb3VudCA+IDEpCi0gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlcGVhdENvdW50
KCk7Ci0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9wb3B1bGF0ZVN0
YWNrVHJhY2VUcmVlRWxlbWVudDogZnVuY3Rpb24ocGFyZW50VHJlZUVsZW1lbnQpCi0gICAgewot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07Ci0KLSAgICAg
ICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
ICAgICAgICB2YXIgbWVzc2FnZVRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOwotICAgICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25z
b2xlLW1lc3NhZ2UtdGV4dCBzb3VyY2UtY29kZSI7Ci0gICAgICAgICAgICB2YXIgZnVuY3Rpb25O
YW1lID0gZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255
bW91cyBmdW5jdGlvbikiKTsKLSAgICAgICAgICAgIG1lc3NhZ2VUZXh0RWxlbWVudC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmdW5jdGlvbk5hbWUpKTsKLSAgICAgICAgICAg
IGNvbnRlbnQuYXBwZW5kQ2hpbGQobWVzc2FnZVRleHRFbGVtZW50KTsKLQotICAgICAgICAgICAg
aWYgKGZyYW1lLnVybCkgewotICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgICAgICAgICAgICAgdmFyIHVybEVsZW1l
bnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZyYW1lKTsKLSAgICAgICAgICAgICAgICBjb250
ZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2YXIgdHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCk7Ci0gICAgICAgICAg
ICBwYXJlbnRUcmVlRWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlRWxlbWVudCk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgdXBkYXRlUmVwZWF0Q291bnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAoIXRoaXMuX2VsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCF0
aGlzLnJlcGVhdENvdW50RWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5yZXBlYXRDb3VudEVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICB0aGlz
LnJlcGVhdENvdW50RWxlbWVudC5jbGFzc05hbWUgPSAiYnViYmxlIjsKLQotICAgICAgICAgICAg
dGhpcy5fZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5yZXBlYXRDb3VudEVsZW1lbnQsIHRoaXMu
X2VsZW1lbnQuZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInJlcGVhdGVkLW1lc3NhZ2UiKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnJlcGVh
dENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucmVwZWF0Q291bnQ7Ci0gICAgfSwKLQot
ICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc291cmNlU3RyaW5n
OwotICAgICAgICBzd2l0Y2ggKHRoaXMuc291cmNlKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLlhNTDoKLSAgICAgICAgICAgICAg
ICBzb3VyY2VTdHJpbmcgPSAiWE1MIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSlM6Ci0g
ICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkpTIjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VT
b3VyY2UuTmV0d29yazoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiTmV0d29yayI7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkNvbnNvbGVBUEk6Ci0gICAgICAgICAgICAgICAg
c291cmNlU3RyaW5nID0gIkNvbnNvbGVBUEkiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5T
dG9yYWdlOgotICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJTdG9yYWdlIjsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VTb3VyY2UuQXBwQ2FjaGU6Ci0gICAgICAgICAgICAgICAgc291cmNlU3Ry
aW5nID0gIkFwcENhY2hlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuUmVuZGVyaW5nOgot
ICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJSZW5kZXJpbmciOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVNvdXJjZS5DU1M6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkNTUyI7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLlNlY3VyaXR5OgotICAgICAgICAgICAgICAgIHNv
dXJjZVN0cmluZyA9ICJTZWN1cml0eSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk90aGVy
OgotICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJPdGhlciI7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdHlwZVN0cmluZzsKLSAgICAgICAg
c3dpdGNoICh0aGlzLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZzoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0g
IkxvZyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5EaXI6Ci0gICAgICAgICAgICAgICAgdHlw
ZVN0cmluZyA9ICJEaXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyWE1MOgotICAgICAg
ICAgICAgICAgIHR5cGVTdHJpbmcgPSAiRGlyIFhNTCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5UcmFjZToKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIlRyYWNlIjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQ6Ci0gICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwOgotICAgICAg
ICAgICAgICAgIHR5cGVTdHJpbmcgPSAiU3RhcnQgR3JvdXAiOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuRW5kR3JvdXA6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJFbmQgR3JvdXAi
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuQXNzZXJ0OgotICAgICAgICAgICAgICAgIHR5cGVT
dHJpbmcgPSAiQXNzZXJ0IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3VsdDoKLSAgICAg
ICAgICAgICAgICB0eXBlU3RyaW5nID0gIlJlc3VsdCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5Qcm9maWxlOgotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuUHJvZmlsZUVuZDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIlBy
b2ZpbGluZyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgbGV2ZWxTdHJpbmc7Ci0gICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewotICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoKLSAg
ICAgICAgICAgICAgICBsZXZlbFN0cmluZyA9ICJMb2ciOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxl
dmVsLldhcm5pbmc6Ci0gICAgICAgICAgICAgICAgbGV2ZWxTdHJpbmcgPSAiV2FybmluZyI7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6Ci0gICAgICAgICAgICAgICAgbGV2ZWxTdHJp
bmcgPSAiRGVidWciOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgotICAgICAgICAg
ICAgICAgIGxldmVsU3RyaW5nID0gIkVycm9yIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBzb3VyY2VTdHJpbmcgKyAiICIgKyB0eXBlU3RyaW5n
ICsgIiAiICsgbGV2ZWxTdHJpbmcgKyAiOiAiICsgdGhpcy5mb3JtYXR0ZWRNZXNzYWdlLnRleHRD
b250ZW50ICsgIlxuIiArIHRoaXMudXJsICsgIiBsaW5lICIgKyB0aGlzLmxpbmU7Ci0gICAgfSwK
LQotICAgIGdldCB0ZXh0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlVGV4
dDsKLSAgICB9LAotCi0gICAgbG9jYXRpb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FKDYyNzI1KTogc3RhY2sgdHJhY2UgbGluZS9jb2x1bW4gbnVtYmVycyBhcmUgb25lLWJh
c2VkLgotICAgICAgICB2YXIgbGluZU51bWJlciA9IHRoaXMuc3RhY2tUcmFjZSA/IHRoaXMuc3Rh
Y2tUcmFjZVswXS5saW5lTnVtYmVyIC0gMSA6IHRoaXMubGluZSAtIDE7Ci0gICAgICAgIHZhciBj
b2x1bW5OdW1iZXIgPSB0aGlzLnN0YWNrVHJhY2UgJiYgdGhpcy5zdGFja1RyYWNlWzBdLmNvbHVt
bk51bWJlciA/IHRoaXMuc3RhY2tUcmFjZVswXS5jb2x1bW5OdW1iZXIgLSAxIDogMDsKLSAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmNyZWF0ZVJhd0xvY2F0aW9uQnlV
UkwodGhpcy51cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgfSwKLQotICAgIGlz
RXF1YWw6IGZ1bmN0aW9uKG1zZykKLSAgICB7Ci0gICAgICAgIGlmICghbXNnKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh0aGlzLl9zdGFja1RyYWNlKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1zZy5fc3RhY2tUcmFjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB2YXIgbCA9IHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAgICAgICAgICB2
YXIgciA9IG1zZy5fc3RhY2tUcmFjZTsKLSAgICAgICAgICAgIGlmIChsLmxlbmd0aCAhPT0gci5s
ZW5ndGgpIAotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChsW2ld
LnVybCAhPT0gcltpXS51cmwgfHwKLSAgICAgICAgICAgICAgICAgICAgbFtpXS5mdW5jdGlvbk5h
bWUgIT09IHJbaV0uZnVuY3Rpb25OYW1lIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0ubGlu
ZU51bWJlciAhPT0gcltpXS5saW5lTnVtYmVyIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0u
Y29sdW1uTnVtYmVyICE9PSByW2ldLmNvbHVtbk51bWJlcikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
ICh0aGlzLnNvdXJjZSA9PT0gbXNnLnNvdXJjZSkKLSAgICAgICAgICAgICYmICh0aGlzLnR5cGUg
PT09IG1zZy50eXBlKQotICAgICAgICAgICAgJiYgKHRoaXMubGV2ZWwgPT09IG1zZy5sZXZlbCkK
LSAgICAgICAgICAgICYmICh0aGlzLmxpbmUgPT09IG1zZy5saW5lKQotICAgICAgICAgICAgJiYg
KHRoaXMudXJsID09PSBtc2cudXJsKQotICAgICAgICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PT0g
bXNnLm1lc3NhZ2UpCi0gICAgICAgICAgICAmJiAodGhpcy5fcmVxdWVzdCA9PT0gbXNnLl9yZXF1
ZXN0KTsKLSAgICB9LAotCi0gICAgZ2V0IHN0YWNrVHJhY2UoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZX0KLSAgICAgKi8KLSAgICBjbG9uZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5j
cmVhdGUodGhpcy5zb3VyY2UsIHRoaXMubGV2ZWwsIHRoaXMuX21lc3NhZ2VUZXh0LCB0aGlzLnR5
cGUsIHRoaXMudXJsLCB0aGlzLmxpbmUsIHRoaXMucmVwZWF0Q291bnQsIHRoaXMuX3BhcmFtZXRl
cnMsIHRoaXMuX3N0YWNrVHJhY2UsIHRoaXMuX3JlcXVlc3QgPyB0aGlzLl9yZXF1ZXN0LnJlcXVl
c3RJZCA6IHVuZGVmaW5lZCwgdGhpcy5faXNPdXRkYXRlZCk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlTW9kZWwuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVNb2RlbC5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhODZiYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVNb2RlbC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDMxMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNw
ZWN0b3IuT2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1vZGVsID0gZnVuY3Rpb24o
KQotewotICAgIHRoaXMubWVzc2FnZXMgPSBbXTsKLSAgICB0aGlzLndhcm5pbmdzID0gMDsKLSAg
ICB0aGlzLmVycm9ycyA9IDA7Ci0gICAgdGhpcy5faW50ZXJydXB0UmVwZWF0Q291bnQgPSBmYWxz
ZTsKLSAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29uc29sZURpc3BhdGNoZXIobmV3IFdl
Ykluc3BlY3Rvci5Db25zb2xlRGlzcGF0Y2hlcih0aGlzKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5D
b25zb2xlTW9kZWwuRXZlbnRzID0gewotICAgIENvbnNvbGVDbGVhcmVkOiAiY29uc29sZS1jbGVh
cmVkIiwKLSAgICBNZXNzYWdlQWRkZWQ6ICJjb25zb2xlLW1lc3NhZ2UtYWRkZWQiLAotICAgIFJl
cGVhdENvdW50VXBkYXRlZDogInJlcGVhdC1jb3VudC11cGRhdGVkIgotfQotCi1XZWJJbnNwZWN0
b3IuQ29uc29sZU1vZGVsLnByb3RvdHlwZSA9IHsKLSAgICBlbmFibGVBZ2VudDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5tb25pdG9yaW5nWEhS
RW5hYmxlZC5nZXQoKSkKLSAgICAgICAgICAgIENvbnNvbGVBZ2VudC5zZXRNb25pdG9yaW5nWEhS
RW5hYmxlZCh0cnVlKTsKLQotICAgICAgICB0aGlzLl9lbmFibGluZ0NvbnNvbGUgPSB0cnVlOwot
ICAgICAgICBmdW5jdGlvbiBjYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLl9lbmFibGluZ0NvbnNvbGU7Ci0gICAgICAgIH0KLSAgICAgICAgQ29uc29sZUFnZW50
LmVuYWJsZShjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBlbmFibGluZ0NvbnNvbGU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsaW5nQ29uc29sZTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2V9
IG1zZwotICAgICAqLwotICAgIGFkZE1lc3NhZ2U6IGZ1bmN0aW9uKG1zZykKLSAgICB7Ci0gICAg
ICAgIHRoaXMubWVzc2FnZXMucHVzaChtc2cpOwotICAgICAgICB0aGlzLl9wcmV2aW91c01lc3Nh
Z2UgPSBtc2c7Ci0gICAgICAgIHRoaXMuX2luY3JlbWVudEVycm9yV2FybmluZ0NvdW50KG1zZyk7
Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Db25z
b2xlTW9kZWwuRXZlbnRzLk1lc3NhZ2VBZGRlZCwgbXNnKTsKLSAgICAgICAgdGhpcy5faW50ZXJy
dXB0UmVwZWF0Q291bnQgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2V9IG1zZwotICAgICAqLwotICAgIF9pbmNyZW1l
bnRFcnJvcldhcm5pbmdDb3VudDogZnVuY3Rpb24obXNnKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChtc2cubGV2ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3Mg
Kz0gbXNnLnJlcGVhdERlbHRhOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgotICAg
ICAgICAgICAgICAgIHRoaXMuZXJyb3JzICs9IG1zZy5yZXBlYXREZWx0YTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZXF1ZXN0Q2xlYXJNZXNzYWdl
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQ29uc29sZUFnZW50LmNsZWFyTWVzc2FnZXMo
KTsKLSAgICAgICAgdGhpcy5jbGVhck1lc3NhZ2VzKCk7Ci0gICAgfSwKLQotICAgIGNsZWFyTWVz
c2FnZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTsKLSAg
ICAgICAgZGVsZXRlIHRoaXMuX3ByZXZpb3VzTWVzc2FnZTsKLQotICAgICAgICB0aGlzLmVycm9y
cyA9IDA7Ci0gICAgICAgIHRoaXMud2FybmluZ3MgPSAwOwotCi0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Db25zb2xlTW9kZWwuRXZlbnRzLkNvbnNv
bGVDbGVhcmVkKTsKLSAgICB9LAotCi0gICAgaW50ZXJydXB0UmVwZWF0Q291bnQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2ludGVycnVwdFJlcGVhdENvdW50ID0gdHJ1ZTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50Ci0gICAgICovCi0g
ICAgX21lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQ6IGZ1bmN0aW9uKGNvdW50KQotICAgIHsKLSAg
ICAgICAgdmFyIG1zZyA9IHRoaXMuX3ByZXZpb3VzTWVzc2FnZTsKLSAgICAgICAgaWYgKCFtc2cp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHByZXZSZXBlYXRDb3VudCA9IG1z
Zy50b3RhbFJlcGVhdENvdW50OwotCi0gICAgICAgIGlmICghdGhpcy5faW50ZXJydXB0UmVwZWF0
Q291bnQpIHsKLSAgICAgICAgICAgIG1zZy5yZXBlYXREZWx0YSA9IGNvdW50IC0gcHJldlJlcGVh
dENvdW50OwotICAgICAgICAgICAgbXNnLnJlcGVhdENvdW50ID0gbXNnLnJlcGVhdENvdW50ICsg
bXNnLnJlcGVhdERlbHRhOwotICAgICAgICAgICAgbXNnLnRvdGFsUmVwZWF0Q291bnQgPSBjb3Vu
dDsKLSAgICAgICAgICAgIG1zZy51cGRhdGVSZXBlYXRDb3VudCgpOwotCi0gICAgICAgICAgICB0
aGlzLl9pbmNyZW1lbnRFcnJvcldhcm5pbmdDb3VudChtc2cpOwotICAgICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkNvbnNvbGVNb2RlbC5FdmVudHMu
UmVwZWF0Q291bnRVcGRhdGVkLCBtc2cpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
dmFyIG1zZ0NvcHkgPSBtc2cuY2xvbmUoKTsKLSAgICAgICAgICAgIG1zZ0NvcHkudG90YWxSZXBl
YXRDb3VudCA9IGNvdW50OwotICAgICAgICAgICAgbXNnQ29weS5yZXBlYXRDb3VudCA9IChjb3Vu
dCAtIHByZXZSZXBlYXRDb3VudCkgfHwgMTsKLSAgICAgICAgICAgIG1zZ0NvcHkucmVwZWF0RGVs
dGEgPSBtc2dDb3B5LnJlcGVhdENvdW50OwotICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKG1z
Z0NvcHkpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
Lk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7
c3RyaW5nfSBzb3VyY2UKLSAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbAotICogQHBhcmFtIHtzdHJp
bmc9fSB1cmwKLSAqIEBwYXJhbSB7bnVtYmVyPX0gbGluZQotICogQHBhcmFtIHtudW1iZXI9fSBy
ZXBlYXRDb3VudAotICovCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UgPSBmdW5jdGlvbihz
b3VyY2UsIGxldmVsLCB1cmwsIGxpbmUsIHJlcGVhdENvdW50KQotewotICAgIHRoaXMuc291cmNl
ID0gc291cmNlOwotICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKLSAgICB0aGlzLnVybCA9IHVybCB8
fCBudWxsOwotICAgIHRoaXMubGluZSA9IGxpbmUgfHwgMDsKLSAgICB0aGlzLm1lc3NhZ2UgPSAi
IjsKLQotICAgIHJlcGVhdENvdW50ID0gcmVwZWF0Q291bnQgfHwgMTsKLSAgICB0aGlzLnJlcGVh
dENvdW50ID0gcmVwZWF0Q291bnQ7Ci0gICAgdGhpcy5yZXBlYXREZWx0YSA9IHJlcGVhdENvdW50
OwotICAgIHRoaXMudG90YWxSZXBlYXRDb3VudCA9IHJlcGVhdENvdW50OwotfQotCi1XZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNFcnJvck9yV2FybmluZzogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7Ci0gICAgfSwKLQotICAgIHVw
ZGF0ZVJlcGVhdENvdW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBJbXBsZW1lbnRl
ZCBieSBjb25jcmV0ZSBpbnN0YW5jZXMKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfQotICAgICAqLwotICAgIGNsb25lOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBjb25jcmV0ZSBpbnN0YW5j
ZXMKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTW9kZWwuTG9jYXRpb259Ci0gICAgICovCi0gICAgbG9jYXRpb246IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IGNvbmNyZXRlIGluc3RhbmNlcwotICAgIH0K
LX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlCi0gKiBAcGFyYW0ge3N0cmluZ30g
bGV2ZWwKLSAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlCi0gKiBAcGFyYW0ge3N0cmluZz19IHR5
cGUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gdXJsCi0gKiBAcGFyYW0ge251bWJlcj19IGxpbmUKLSAq
IEBwYXJhbSB7bnVtYmVyPX0gcmVwZWF0Q291bnQKLSAqIEBwYXJhbSB7QXJyYXkuPFJ1bnRpbWVB
Z2VudC5SZW1vdGVPYmplY3Q+PX0gcGFyYW1ldGVycwotICogQHBhcmFtIHtDb25zb2xlQWdlbnQu
U3RhY2tUcmFjZT19IHN0YWNrVHJhY2UKLSAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlcXVlc3RJ
ZD19IHJlcXVlc3RJZAotICogQHBhcmFtIHtib29sZWFuPX0gaXNPdXRkYXRlZAotICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfQotICovCi1XZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuY3JlYXRlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgdHlwZSwg
dXJsLCBsaW5lLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdElk
LCBpc091dGRhdGVkKQotewotfQotCi0vLyBOb3RlOiBLZWVwIHRoZXNlIGNvbnN0YW50cyBpbiBz
eW5jIHdpdGggdGhlIG9uZXMgaW4gQ29uc29sZS5oCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVNvdXJjZSA9IHsKLSAgICBYTUw6ICJ4bWwiLAotICAgIEpTOiAiamF2YXNjcmlw
dCIsCi0gICAgTmV0d29yazogIm5ldHdvcmsiLAotICAgIENvbnNvbGVBUEk6ICJjb25zb2xlLWFw
aSIsCi0gICAgU3RvcmFnZTogInN0b3JhZ2UiLAotICAgIEFwcENhY2hlOiAiYXBwY2FjaGUiLAot
ICAgIFJlbmRlcmluZzogInJlbmRlcmluZyIsCi0gICAgQ1NTOiAiY3NzIiwKLSAgICBTZWN1cml0
eTogInNlY3VyaXR5IiwKLSAgICBPdGhlcjogIm90aGVyIgotfQotCi1XZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUgPSB7Ci0gICAgTG9nOiAibG9nIiwKLSAgICBEaXI6ICJk
aXIiLAotICAgIERpclhNTDogImRpcnhtbCIsCi0gICAgVGFibGU6ICJ0YWJsZSIsCi0gICAgVHJh
Y2U6ICJ0cmFjZSIsCi0gICAgQ2xlYXI6ICJjbGVhciIsCi0gICAgU3RhcnRHcm91cDogInN0YXJ0
R3JvdXAiLAotICAgIFN0YXJ0R3JvdXBDb2xsYXBzZWQ6ICJzdGFydEdyb3VwQ29sbGFwc2VkIiwK
LSAgICBFbmRHcm91cDogImVuZEdyb3VwIiwKLSAgICBBc3NlcnQ6ICJhc3NlcnQiLAotICAgIFJl
c3VsdDogInJlc3VsdCIsCi0gICAgUHJvZmlsZTogInByb2ZpbGUiLAotICAgIFByb2ZpbGVFbmQ6
ICJwcm9maWxlRW5kIgotfQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxl
dmVsID0gewotICAgIExvZzogImxvZyIsCi0gICAgV2FybmluZzogIndhcm5pbmciLAotICAgIEVy
cm9yOiAiZXJyb3IiLAotICAgIERlYnVnOiAiZGVidWciCi19Ci0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtDb25zb2xlQWdlbnQuRGlzcGF0Y2hlcn0KLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkNvbnNvbGVNb2RlbH0gY29uc29sZQotICovCi1XZWJJbnNwZWN0b3Iu
Q29uc29sZURpc3BhdGNoZXIgPSBmdW5jdGlvbihjb25zb2xlKQotewotICAgIHRoaXMuX2NvbnNv
bGUgPSBjb25zb2xlOwotfQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZURpc3BhdGNoZXIucHJvdG90
eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q29uc29sZUFnZW50LkNvbnNvbGVNZXNz
YWdlfSBwYXlsb2FkCi0gICAgICovCi0gICAgbWVzc2FnZUFkZGVkOiBmdW5jdGlvbihwYXlsb2Fk
KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnNvbGVNZXNzYWdlID0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLmNyZWF0ZSgKLSAgICAgICAgICAgIHBheWxvYWQuc291cmNlLAotICAgICAgICAg
ICAgcGF5bG9hZC5sZXZlbCwKLSAgICAgICAgICAgIHBheWxvYWQudGV4dCwKLSAgICAgICAgICAg
IHBheWxvYWQudHlwZSwKLSAgICAgICAgICAgIHBheWxvYWQudXJsLAotICAgICAgICAgICAgcGF5
bG9hZC5saW5lLAotICAgICAgICAgICAgcGF5bG9hZC5yZXBlYXRDb3VudCwKLSAgICAgICAgICAg
IHBheWxvYWQucGFyYW1ldGVycywKLSAgICAgICAgICAgIHBheWxvYWQuc3RhY2tUcmFjZSwKLSAg
ICAgICAgICAgIHBheWxvYWQubmV0d29ya1JlcXVlc3RJZCwKLSAgICAgICAgICAgIHRoaXMuX2Nv
bnNvbGUuX2VuYWJsaW5nQ29uc29sZSk7Ci0gICAgICAgIHRoaXMuX2NvbnNvbGUuYWRkTWVzc2Fn
ZShjb25zb2xlTWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBjb3VudAotICAgICAqLwotICAgIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQ6IGZ1bmN0
aW9uKGNvdW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fY29uc29sZS5fbWVzc2FnZVJlcGVhdENv
dW50VXBkYXRlZChjb3VudCk7Ci0gICAgfSwKLQotICAgIG1lc3NhZ2VzQ2xlYXJlZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJlc2VydmVD
b25zb2xlTG9nLmdldCgpKQotICAgICAgICAgICAgdGhpcy5fY29uc29sZS5jbGVhck1lc3NhZ2Vz
KCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLkNvbnNvbGVNb2Rl
bH0KLSAqLwotV2ViSW5zcGVjdG9yLmNvbnNvbGUgPSBudWxsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggZGE2MjkyNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlBhbmVsfQotICovCi1XZWJJ
bnNwZWN0b3IuQ29uc29sZVBhbmVsID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5Q
YW5lbC5jYWxsKHRoaXMsICJjb25zb2xlIik7Ci0KLSAgICBXZWJJbnNwZWN0b3IuY29uc29sZVZp
ZXcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcuRXZlbnRzLkVudHJ5
QWRkZWQsIHRoaXMuX2NvbnNvbGVNZXNzYWdlQWRkZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rv
ci5jb25zb2xlVmlldy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5F
dmVudHMuQ29uc29sZUNsZWFyZWQsIHRoaXMuX2NvbnNvbGVDbGVhcmVkLCB0aGlzKTsKLSAgICB0
aGlzLl92aWV3ID0gV2ViSW5zcGVjdG9yLmNvbnNvbGVWaWV3OwotfQotCi1XZWJJbnNwZWN0b3Iu
Q29uc29sZVBhbmVsLnByb3RvdHlwZSA9IHsKLSAgICBzdGF0dXNCYXJJdGVtczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3ZpZXcuc3RhdHVzQmFySXRlbXMoKTsKLSAg
ICB9LAotCi0gICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5QYW5lbC5wcm90b3R5cGUud2FzU2hvd24uY2FsbCh0aGlzKTsKLSAgICAgICAgaWYgKFdl
Ykluc3BlY3Rvci5kcmF3ZXIudmlzaWJsZSkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRy
YXdlci5oaWRlKFdlYkluc3BlY3Rvci5EcmF3ZXIuQW5pbWF0aW9uVHlwZS5JbW1lZGlhdGVseSk7
Ci0gICAgICAgICAgICB0aGlzLl9kcmF3ZXJXYXNWaXNpYmxlID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLl92aWV3LnNob3codGhpcy5lbGVtZW50KTsKLSAgICB9LAotCi0gICAgd2ls
bEhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kcmF3ZXJXYXNWaXNp
YmxlKSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZHJhd2VyLnNob3codGhpcy5fdmlldywg
V2ViSW5zcGVjdG9yLkRyYXdlci5BbmltYXRpb25UeXBlLkltbWVkaWF0ZWx5KTsKLSAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9kcmF3ZXJXYXNWaXNpYmxlOwotICAgICAgICB9Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUud2lsbEhpZGUuY2FsbCh0aGlzKTsKLSAgICB9LAot
Ci0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Ns
ZWFyQ3VycmVudFNlYXJjaFJlc3VsdEhpZ2hsaWdodCgpOwotICAgICAgICBkZWxldGUgdGhpcy5f
c2VhcmNoUmVzdWx0czsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaFJlZ2V4OwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKi8KLSAgICBw
ZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKLSAg
ICAgICAgdGhpcy5zZWFyY2hDYW5jZWxlZCgpOwotICAgICAgICB0aGlzLl9zZWFyY2hSZWdleCA9
IGNyZWF0ZVBsYWluVGV4dFNlYXJjaFJlZ2V4KHF1ZXJ5LCAiZ2kiKTsKLQotICAgICAgICB0aGlz
Ll9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAgICAgIHZhciBtZXNzYWdlcyA9IFdlYkluc3BlY3Rv
ci5jb25zb2xlLm1lc3NhZ2VzOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2Vz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZXNbaV0ubWF0Y2hlc1JlZ2V4
KHRoaXMuX3NlYXJjaFJlZ2V4KSkgewotICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3Vs
dHMucHVzaChtZXNzYWdlc1tpXSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVnZXgu
bGFzdEluZGV4ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBXZWJJbnNw
ZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fc2Vh
cmNoUmVzdWx0cy5sZW5ndGgsIHRoaXMpOwotICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVz
dWx0SW5kZXggPSAtMTsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKQot
ICAgICAgICAgICAgdGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KDApOwotICAgIH0sCi0KLSAgICBq
dW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuX3NlYXJjaFJlc3VsdHMgfHwgIXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQoKHRoaXMuX2N1
cnJlbnRTZWFyY2hSZXN1bHRJbmRleCArIDEpICUgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgp
OwotICAgIH0sCi0KLSAgICBqdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hSZXN1bHRzIHx8ICF0aGlzLl9zZWFyY2hS
ZXN1bHRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGluZGV4ID0g
dGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4IC0gMTsKLSAgICAgICAgaWYgKGluZGV4ID09
PSAtMSkKLSAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggLSAx
OwotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQoaW5kZXgpOwotICAgIH0sCi0KLSAg
ICBfY2xlYXJDdXJyZW50U2VhcmNoUmVzdWx0SGlnaGxpZ2h0OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHZhciBoaWdobGlnaHRlZE1lc3NhZ2UgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW3RoaXMu
X2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleF07Ci0gICAgICAgIGlmIChoaWdobGlnaHRlZE1lc3Nh
Z2UpCi0gICAgICAgICAgICBoaWdobGlnaHRlZE1lc3NhZ2UuY2xlYXJIaWdobGlnaHQoKTsKLSAg
ICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7Ci0gICAgfSwKLQotICAg
IF9qdW1wVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGluZGV4KQotICAgIHsKLSAgICAgICAgdGhp
cy5fY2xlYXJDdXJyZW50U2VhcmNoUmVzdWx0SGlnaGxpZ2h0KCk7Ci0gICAgICAgIHRoaXMuX2N1
cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IGluZGV4OwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2Vh
cmNoQ29udHJvbGxlci51cGRhdGVDdXJyZW50TWF0Y2hJbmRleCh0aGlzLl9jdXJyZW50U2VhcmNo
UmVzdWx0SW5kZXgsIHRoaXMpOwotICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzW2luZGV4XS5o
aWdobGlnaHRTZWFyY2hSZXN1bHRzKHRoaXMuX3NlYXJjaFJlZ2V4KTsKLSAgICB9LAotCi0gICAg
X2NvbnNvbGVNZXNzYWdlQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLl9zZWFyY2hSZWdleCB8fCAhdGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOwotICAgICAgICB0aGlzLl9z
ZWFyY2hSZWdleC5sYXN0SW5kZXggPSAwOwotICAgICAgICBpZiAobWVzc2FnZS5tYXRjaGVzUmVn
ZXgodGhpcy5fc2VhcmNoUmVnZXgpKSB7Ci0gICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRz
LnB1c2gobWVzc2FnZSk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxl
ci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgsIHRo
aXMpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9jb25zb2xlQ2xlYXJlZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hSZXN1bHRzKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLl9jbGVhckN1cnJlbnRTZWFyY2hSZXN1bHRIaWdobGlnaHQo
KTsKLSAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggPSAwOwotICAgICAgICBpZiAo
dGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9s
bGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKLSAgICB9LAotCi0gICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmIwYWQxZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsODg1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioK
LSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBjb25zdHJ1Y3RvcgotICogQHBh
cmFtIHtib29sZWFufSBoaWRlQ29udGV4dFNlbGVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5Db25z
b2xlVmlldyA9IGZ1bmN0aW9uKGhpZGVDb250ZXh0U2VsZWN0b3IpCi17Ci0gICAgV2ViSW5zcGVj
dG9yLlZpZXcuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuZWxlbWVudC5pZCA9ICJjb25zb2xlLXZp
ZXciOwotICAgIHRoaXMuX21lc3NhZ2VVUkxGaWx0ZXJzID0gV2ViSW5zcGVjdG9yLnNldHRpbmdz
Lm1lc3NhZ2VVUkxGaWx0ZXJzLmdldCgpOwotICAgIHRoaXMuX3Zpc2libGVNZXNzYWdlcyA9IFtd
OwotICAgIHRoaXMuX21lc3NhZ2VzID0gW107Ci0gICAgdGhpcy5fdXJsVG9NZXNzYWdlQ291bnQg
PSB7fTsKLQotICAgIHRoaXMuX2NsZWFyQ29uc29sZUJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3Iu
U3RhdHVzQmFyQnV0dG9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xlYXIgY29uc29sZSBsb2cu
IiksICJjbGVhci1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLl9jbGVhckNvbnNvbGVCdXR0
b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9yZXF1ZXN0Q2xlYXJNZXNzYWdlcywg
dGhpcyk7Ci0KLSAgICB0aGlzLl9mcmFtZVNlbGVjdG9yID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0
dXNCYXJDb21ib0JveCh0aGlzLl9mcmFtZUNoYW5nZWQuYmluZCh0aGlzKSwgImNvbnNvbGUtY29u
dGV4dCIpOwotICAgIHRoaXMuX2NvbnRleHRTZWxlY3RvciA9IG5ldyBXZWJJbnNwZWN0b3IuU3Rh
dHVzQmFyQ29tYm9Cb3godGhpcy5fY29udGV4dENoYW5nZWQuYmluZCh0aGlzKSwgImNvbnNvbGUt
Y29udGV4dCIpOwotCi0gICAgaWYgKGhpZGVDb250ZXh0U2VsZWN0b3IpIHsKLSAgICAgICAgdGhp
cy5fZnJhbWVTZWxlY3Rvci5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAg
ICB0aGlzLl9jb250ZXh0U2VsZWN0b3IuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsK
LSAgICB9Ci0KLSAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmlkID0gImNvbnNvbGUtbWVzc2Fn
ZXMiOwotICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOwot
ICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5f
bWVzc2FnZXNDbGlja2VkLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuZWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLm1lc3NhZ2VzRWxlbWVudCk7Ci0gICAgdGhpcy5fc2Nyb2xsZWRUb0JvdHRv
bSA9IHRydWU7Ci0KLSAgICB0aGlzLnByb21wdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICB0aGlzLnByb21wdEVsZW1lbnQuaWQgPSAiY29uc29sZS1wcm9tcHQi
OwotICAgIHRoaXMucHJvbXB0RWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLWNvZGUiOwotICAg
IHRoaXMucHJvbXB0RWxlbWVudC5zcGVsbGNoZWNrID0gZmFsc2U7Ci0gICAgdGhpcy5tZXNzYWdl
c0VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wcm9tcHRFbGVtZW50KTsKLSAgICB0aGlzLm1lc3Nh
Z2VzRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKLQot
ICAgIHRoaXMudG9wR3JvdXAgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cChudWxsKTsK
LSAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy50b3BHcm91cC5lbGVt
ZW50LCB0aGlzLnByb21wdEVsZW1lbnQpOwotICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy50
b3BHcm91cDsKLQotICAgIHRoaXMuX2ZpbHRlckJhckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9maWx0ZXJCYXJFbGVtZW50LmNsYXNzTmFtZSA9ICJz
Y29wZS1iYXIgc3RhdHVzLWJhci1pdGVtIjsKLQotICAgIGZ1bmN0aW9uIGNyZWF0ZURpdmlkZXJF
bGVtZW50KCkKLSAgICB7Ci0gICAgICAgIHZhciBkaXZpZGVyRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBkaXZpZGVyRWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJzY29wZS1iYXItZGl2aWRlciIpOwotICAgICAgICB0aGlzLl9maWx0ZXJCYXJFbGVtZW50LmFw
cGVuZENoaWxkKGRpdmlkZXJFbGVtZW50KTsKLSAgICB9Ci0KLSAgICB2YXIgdXBkYXRlRmlsdGVy
SGFuZGxlciA9IHRoaXMuX3VwZGF0ZUZpbHRlci5iaW5kKHRoaXMpOwotCi0gICAgZnVuY3Rpb24g
Y3JlYXRlRmlsdGVyRWxlbWVudChjYXRlZ29yeSwgbGFiZWwpCi0gICAgewotICAgICAgICB2YXIg
Y2F0ZWdvcnlFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKLSAgICAgICAg
Y2F0ZWdvcnlFbGVtZW50LmNhdGVnb3J5ID0gY2F0ZWdvcnk7Ci0gICAgICAgIGNhdGVnb3J5RWxl
bWVudC5jbGFzc05hbWUgPSBjYXRlZ29yeTsKLSAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdXBkYXRlRmlsdGVySGFuZGxlciwgZmFsc2UpOwotICAgICAg
ICBjYXRlZ29yeUVsZW1lbnQudGV4dENvbnRlbnQgPSBsYWJlbDsKLQotICAgICAgICB0aGlzLl9m
aWx0ZXJCYXJFbGVtZW50LmFwcGVuZENoaWxkKGNhdGVnb3J5RWxlbWVudCk7Ci0KLSAgICAgICAg
cmV0dXJuIGNhdGVnb3J5RWxlbWVudDsKLSAgICB9Ci0KLSAgICB0aGlzLmFsbEVsZW1lbnQgPSBj
cmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgImFsbCIsIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQWxsIikpOwotICAgIGNyZWF0ZURpdmlkZXJFbGVtZW50LmNhbGwodGhpcyk7Ci0gICAgdGhp
cy5lcnJvckVsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgImVycm9ycyIs
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXJyb3JzIikpOwotICAgIHRoaXMud2FybmluZ0VsZW1l
bnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgIndhcm5pbmdzIiwgV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJXYXJuaW5ncyIpKTsKLSAgICB0aGlzLmxvZ0VsZW1lbnQgPSBjcmVhdGVG
aWx0ZXJFbGVtZW50LmNhbGwodGhpcywgImxvZ3MiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxv
Z3MiKSk7Ci0gICAgdGhpcy5kZWJ1Z0VsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwo
dGhpcywgImRlYnVnIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWJ1ZyIpKTsKLQotICAgIHRo
aXMuZmlsdGVyKHRoaXMuYWxsRWxlbWVudCwgZmFsc2UpOwotICAgIHRoaXMuX3JlZ2lzdGVyU2hv
cnRjdXRzKCk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJ0ZXh0UHJvbXB0LmNzcyIp
OwotCi0gICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1l
bnUiLCB0aGlzLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50LmJpbmQodGhpcyksIGZhbHNlKTsKLQot
ICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5tb25pdG9yaW5nWEhSRW5hYmxlZC5hZGRDaGFuZ2VM
aXN0ZW5lcih0aGlzLl9tb25pdG9yaW5nWEhSRW5hYmxlZFNldHRpbmdDaGFuZ2VkLmJpbmQodGhp
cykpOwotCi0gICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuQ29uc29sZU1vZGVsLkV2ZW50cy5NZXNzYWdlQWRkZWQsIHRoaXMuX2NvbnNvbGVNZXNz
YWdlQWRkZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5jb25zb2xlLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkNvbnNvbGVNb2RlbC5FdmVudHMuQ29uc29sZUNsZWFyZWQsIHRoaXMu
X2NvbnNvbGVDbGVhcmVkLCB0aGlzKTsKLQotICAgIHRoaXMuX2xpbmtpZmllciA9IG5ldyBXZWJJ
bnNwZWN0b3IuTGlua2lmaWVyKCk7Ci0KLSAgICB0aGlzLnByb21wdCA9IG5ldyBXZWJJbnNwZWN0
b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5KFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwuY29tcGxl
dGlvbnNGb3JUZXh0UHJvbXB0LmJpbmQoV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2RlbCkpOwotICAg
IHRoaXMucHJvbXB0LnNldFN1Z2dlc3RCb3hFbmFibGVkKCJnZW5lcmljLXN1Z2dlc3QiKTsKLSAg
ICB0aGlzLnByb21wdC5yZW5kZXJBc0Jsb2NrKCk7Ci0gICAgdGhpcy5wcm9tcHQuYXR0YWNoKHRo
aXMucHJvbXB0RWxlbWVudCk7Ci0gICAgdGhpcy5wcm9tcHQucHJveHlFbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9wcm9tcHRLZXlEb3duLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLnByb21wdC5zZXRIaXN0b3J5RGF0YShXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
Y29uc29sZUhpc3RvcnkuZ2V0KCkpOwotCi0gICAgV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2RlbC5j
b250ZXh0TGlzdHMoKS5mb3JFYWNoKHRoaXMuX2FkZEZyYW1lLCB0aGlzKTsKLSAgICBXZWJJbnNw
ZWN0b3IucnVudGltZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJ1bnRpbWVN
b2RlbC5FdmVudHMuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdEFkZGVkLCB0aGlzLl9mcmFtZUFk
ZGVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVsLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5FdmVudHMuRnJhbWVFeGVjdXRpb25Db250ZXh0
TGlzdFJlbW92ZWQsIHRoaXMuX2ZyYW1lUmVtb3ZlZCwgdGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5Db25zb2xlVmlldy5FdmVudHMgPSB7Ci0gIENvbnNvbGVDbGVhcmVkOiAiY29uc29sZS1jbGVh
cmVkIiwKLSAgRW50cnlBZGRlZDogImNvbnNvbGUtZW50cnktYWRkZWQiLAotfQotCi1XZWJJbnNw
ZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewotICAgIHN0YXR1c0Jhckl0ZW1zOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMuX2NsZWFyQ29uc29sZUJ1dHRvbi5l
bGVtZW50LCB0aGlzLl9mcmFtZVNlbGVjdG9yLmVsZW1lbnQsIHRoaXMuX2NvbnRleHRTZWxlY3Rv
ci5lbGVtZW50LCB0aGlzLl9maWx0ZXJCYXJFbGVtZW50XTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2Zy
YW1lQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRMaXN0
ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdH0gKi8g
KGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9hZGRGcmFtZShjb250ZXh0TGlzdCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9u
Q29udGV4dExpc3R9IGNvbnRleHRMaXN0Ci0gICAgICovCi0gICAgX2FkZEZyYW1lOiBmdW5jdGlv
bihjb250ZXh0TGlzdCkKLSAgICB7Ci0gICAgICAgIHZhciBvcHRpb24gPSB0aGlzLl9mcmFtZVNl
bGVjdG9yLmNyZWF0ZU9wdGlvbihjb250ZXh0TGlzdC5kaXNwbGF5TmFtZSwgY29udGV4dExpc3Qu
dXJsKTsKLSAgICAgICAgb3B0aW9uLl9jb250ZXh0TGlzdCA9IGNvbnRleHRMaXN0OwotICAgICAg
ICBjb250ZXh0TGlzdC5fY29uc29sZU9wdGlvbiA9IG9wdGlvbjsKLSAgICAgICAgY29udGV4dExp
c3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlz
dC5FdmVudFR5cGVzLkNvbnRleHRzVXBkYXRlZCwgdGhpcy5fZnJhbWVVcGRhdGVkLCB0aGlzKTsK
LSAgICAgICAgY29udGV4dExpc3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWVF
eGVjdXRpb25Db250ZXh0TGlzdC5FdmVudFR5cGVzLkNvbnRleHRBZGRlZCwgdGhpcy5fY29udGV4
dEFkZGVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fZnJhbWVDaGFuZ2VkKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAq
LwotICAgIF9mcmFtZVJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFy
IGNvbnRleHRMaXN0ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRnJhbWVFeGVjdXRpb25Db250
ZXh0TGlzdH0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9mcmFtZVNlbGVjdG9yLnJl
bW92ZU9wdGlvbihjb250ZXh0TGlzdC5fY29uc29sZU9wdGlvbik7Ci0gICAgICAgIHRoaXMuX2Zy
YW1lQ2hhbmdlZCgpOwotICAgIH0sCi0KLSAgICBfZnJhbWVDaGFuZ2VkOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2N1cnJlbnRGcmFtZSgpOwotICAgICAg
ICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwu
c2V0Q3VycmVudEV4ZWN1dGlvbkNvbnRleHQobnVsbCk7Ci0gICAgICAgICAgICB0aGlzLl9jb250
ZXh0U2VsZWN0b3IuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBleGVjdXRpb25Db250ZXh0cyA9IGNv
bnRleHQuZXhlY3V0aW9uQ29udGV4dHMoKTsKLSAgICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRz
Lmxlbmd0aCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwuc2V0Q3VycmVu
dEV4ZWN1dGlvbkNvbnRleHQoZXhlY3V0aW9uQ29udGV4dHNbMF0pOwotCi0gICAgICAgIGlmIChl
eGVjdXRpb25Db250ZXh0cy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRl
eHRTZWxlY3Rvci5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbnRleHRTZWxlY3Rvci5lbGVtZW50
LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICB0aGlzLl9jb250ZXh0U2VsZWN0
b3IucmVtb3ZlT3B0aW9ucygpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4ZWN1dGlv
bkNvbnRleHRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgdGhpcy5fYXBwZW5kQ29udGV4dE9w
dGlvbihleGVjdXRpb25Db250ZXh0c1tpXSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHR9IGV4ZWN1dGlvbkNvbnRleHQKLSAg
ICAgKi8KLSAgICBfYXBwZW5kQ29udGV4dE9wdGlvbjogZnVuY3Rpb24oZXhlY3V0aW9uQ29udGV4
dCkKLSAgICB7Ci0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2RlbC5jdXJyZW50
RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2Rl
bC5zZXRDdXJyZW50RXhlY3V0aW9uQ29udGV4dChleGVjdXRpb25Db250ZXh0KTsKLSAgICAgICAg
dmFyIG9wdGlvbiA9IHRoaXMuX2NvbnRleHRTZWxlY3Rvci5jcmVhdGVPcHRpb24oZXhlY3V0aW9u
Q29udGV4dC5uYW1lLCBleGVjdXRpb25Db250ZXh0LmlkKTsKLSAgICAgICAgb3B0aW9uLl9leGVj
dXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfY29udGV4dENoYW5nZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMuX2NvbnRleHRT
ZWxlY3Rvci5zZWxlY3RlZE9wdGlvbigpOwotICAgICAgICBXZWJJbnNwZWN0b3IucnVudGltZU1v
ZGVsLnNldEN1cnJlbnRFeGVjdXRpb25Db250ZXh0KG9wdGlvbiA/IG9wdGlvbi5fZXhlY3V0aW9u
Q29udGV4dCA6IG51bGwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfZnJhbWVVcGRhdGVkOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjb250ZXh0TGlzdCA9IC8qKiB7V2ViSW5zcGVj
dG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3QgKi8gZXZlbnQuZGF0YTsKLSAgICAgICAgdmFy
IG9wdGlvbiA9IGNvbnRleHRMaXN0Ll9jb25zb2xlT3B0aW9uOwotICAgICAgICBvcHRpb24udGV4
dCA9IGNvbnRleHRMaXN0LmRpc3BsYXlOYW1lOwotICAgICAgICBvcHRpb24udGl0bGUgPSBjb250
ZXh0TGlzdC51cmw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9jb250ZXh0QWRkZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRMaXN0ID0gLyoqIHtXZWJJbnNwZWN0b3Iu
RnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdCAqLyBldmVudC5kYXRhOwotICAgICAgICBpZiAoY29u
dGV4dExpc3QgPT09IHRoaXMuX2N1cnJlbnRGcmFtZSgpKQotICAgICAgICAgICAgdGhpcy5fZnJh
bWVDaGFuZ2VkKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0fHVuZGVmaW5lZH0KLSAgICAgKi8KLSAgICBf
Y3VycmVudEZyYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgb3B0aW9uID0gdGhp
cy5fZnJhbWVTZWxlY3Rvci5zZWxlY3RlZE9wdGlvbigpOwotICAgICAgICByZXR1cm4gb3B0aW9u
ID8gb3B0aW9uLl9jb250ZXh0TGlzdCA6IHVuZGVmaW5lZDsKLSAgICB9LAotCi0gICAgX3VwZGF0
ZUZpbHRlcjogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBpc01hYyA9IFdlYkluc3Bl
Y3Rvci5pc01hYygpOwotICAgICAgICB2YXIgc2VsZWN0TXVsdGlwbGUgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKGlzTWFjICYmIGUubWV0YUtleSAmJiAhZS5jdHJsS2V5ICYmICFlLmFsdEtleSAmJiAh
ZS5zaGlmdEtleSkKLSAgICAgICAgICAgIHNlbGVjdE11bHRpcGxlID0gdHJ1ZTsKLSAgICAgICAg
aWYgKCFpc01hYyAmJiBlLmN0cmxLZXkgJiYgIWUubWV0YUtleSAmJiAhZS5hbHRLZXkgJiYgIWUu
c2hpZnRLZXkpCi0gICAgICAgICAgICBzZWxlY3RNdWx0aXBsZSA9IHRydWU7Ci0KLSAgICAgICAg
dGhpcy5maWx0ZXIoZS50YXJnZXQsIHNlbGVjdE11bHRpcGxlKTsKLSAgICB9LAotCi0gICAgZmls
dGVyOiBmdW5jdGlvbih0YXJnZXQsIHNlbGVjdE11bHRpcGxlKQotICAgIHsKLSAgICAgICAgZnVu
Y3Rpb24gdW5zZWxlY3RBbGwoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmFsbEVsZW1l
bnQucmVtb3ZlU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAgICAgIHRoaXMuZXJyb3JF
bGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICB0aGlzLndh
cm5pbmdFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICB0
aGlzLmxvZ0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAgICAg
IHRoaXMuZGVidWdFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0KLSAgICAg
ICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImZpbHRlci1hbGwi
LCAiZmlsdGVyLWVycm9ycyIsICJmaWx0ZXItd2FybmluZ3MiLCAiZmlsdGVyLWxvZ3MiLCAiZmls
dGVyLWRlYnVnIik7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdGFyZ2V0RmlsdGVyQ2xhc3Mg
PSAiZmlsdGVyLSIgKyB0YXJnZXQuY2F0ZWdvcnk7Ci0KLSAgICAgICAgaWYgKHRhcmdldC5jYXRl
Z29yeSA9PT0gImFsbCIpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzU3R5bGVDbGFzcygi
c2VsZWN0ZWQiKSkgewotICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHVuc2VsZWN0IGFsbCwg
c28gd2UgYnJlYWsgZWFybHkgaGVyZQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdW5zZWxlY3RBbGwuY2FsbCh0aGlzKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIFNvbWV0aGluZyBvdGhlciB0aGFuIGFsbCBpcyBiZWluZyBz
ZWxlY3RlZCwgc28gd2Ugd2FudCB0byB1bnNlbGVjdCBhbGwKLSAgICAgICAgICAgIGlmICh0aGlz
LmFsbEVsZW1lbnQuaGFzU3R5bGVDbGFzcygic2VsZWN0ZWQiKSkgewotICAgICAgICAgICAgICAg
IHRoaXMuYWxsRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotICAgICAgICAg
ICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImZpbHRlci1hbGwi
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc2VsZWN0TXVsdGlw
bGUpIHsKLSAgICAgICAgICAgIC8vIElmIG11bHRpcGxlIHNlbGVjdGlvbiBpcyBvZmYsIHdlIHdh
bnQgdG8gdW5zZWxlY3QgZXZlcnl0aGluZyBlbHNlCi0gICAgICAgICAgICAvLyBhbmQganVzdCBz
ZWxlY3Qgb3Vyc2VsdmVzLgotICAgICAgICAgICAgdW5zZWxlY3RBbGwuY2FsbCh0aGlzKTsKLQot
ICAgICAgICAgICAgdGFyZ2V0LmFkZFN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAg
ICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5hZGRTdHlsZUNsYXNzKHRhcmdldEZpbHRlckNsYXNzKTsK
LQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldC5o
YXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7Ci0gICAgICAgICAgICAvLyBJZiBzZWxlY3RNdWx0
aXBsZSBpcyB0dXJuZWQgb24sIGFuZCB3ZSB3ZXJlIHNlbGVjdGVkLCB3ZSBqdXN0Ci0gICAgICAg
ICAgICAvLyB3YW50IHRvIHVuc2VsZWN0IG91cnNlbHZlcy4KLSAgICAgICAgICAgIHRhcmdldC5y
ZW1vdmVTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotICAgICAgICAgICAgdGhpcy5tZXNzYWdlc0Vs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyh0YXJnZXRGaWx0ZXJDbGFzcyk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBJZiBzZWxlY3RNdWx0aXBsZSBpcyB0dXJuZWQgb24sIGFuZCB3
ZSB3ZXJlbid0IHNlbGVjdGVkLCB3ZSBqdXN0Ci0gICAgICAgICAgICAvLyB3YW50IHRvIHNlbGVj
dCBvdXJzZWx2ZXMuCi0gICAgICAgICAgICB0YXJnZXQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQi
KTsKLSAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmFkZFN0eWxlQ2xhc3ModGFyZ2V0
RmlsdGVyQ2xhc3MpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLnByb21wdC5oaWRlU3VnZ2VzdEJveCgpOwotICAgICAg
ICB0aGlzLnByb21wdC5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKLSAgICB9LAotCi0gICAgd2Fz
U2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5wcm9tcHQuaXNDYXJl
dEluc2lkZVByb21wdCgpKQotICAgICAgICAgICAgdGhpcy5wcm9tcHQubW92ZUNhcmV0VG9FbmRP
ZlByb21wdCgpOwotICAgIH0sCi0KLSAgICBhZnRlclNob3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5zZXRDdXJyZW50Rm9jdXNFbGVtZW50KHRoaXMucHJvbXB0RWxl
bWVudCk7Ci0gICAgfSwKLQotICAgIHN0b3JlU2Nyb2xsUG9zaXRpb25zOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc3RvcmVTY3JvbGxQb3Np
dGlvbnMuY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5fc2Nyb2xsZWRUb0JvdHRvbSA9IHRoaXMu
bWVzc2FnZXNFbGVtZW50LmlzU2Nyb2xsZWRUb0JvdHRvbSgpOwotICAgIH0sCi0KLSAgICByZXN0
b3JlU2Nyb2xsUG9zaXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
c2Nyb2xsZWRUb0JvdHRvbSkKLSAgICAgICAgICAgIHRoaXMuX2ltbWVkaWF0ZWx5U2Nyb2xsSW50
b1ZpZXcoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJv
dG90eXBlLnJlc3RvcmVTY3JvbGxQb3NpdGlvbnMuY2FsbCh0aGlzKTsKLSAgICB9LAotCi0gICAg
b25SZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVzdG9yZVNjcm9sbFBv
c2l0aW9ucygpOwotICAgIH0sCi0KLSAgICBfaXNTY3JvbGxJbnRvVmlld1NjaGVkdWxlZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fc2Nyb2xsSW50b1ZpZXdUaW1l
cjsKLSAgICB9LAotCi0gICAgX3NjaGVkdWxlU2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLl9zY3JvbGxJbnRvVmlld1RpbWVyKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Njcm9sbEludG9WaWV3VGltZXI7Ci0gICAgICAgICAg
ICB0aGlzLnByb21wdEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXdUaW1lciA9IHNldFRpbWVvdXQoc2Nyb2xsSW50b1Zp
ZXcuYmluZCh0aGlzKSwgMjApOwotICAgIH0sCi0KLSAgICBfaW1tZWRpYXRlbHlTY3JvbGxJbnRv
VmlldzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5wcm9tcHRFbGVtZW50LnNjcm9s
bEludG9WaWV3KHRydWUpOwotICAgICAgICB0aGlzLl9jYW5jZWxTY2hlZHVsZWRTY3JvbGxJbnRv
VmlldygpOwotICAgIH0sCi0KLSAgICBfY2FuY2VsU2NoZWR1bGVkU2Nyb2xsSW50b1ZpZXc6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5faXNTY3JvbGxJbnRvVmlld1NjaGVk
dWxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNsZWFyVGltZW91dCh0aGlz
Ll9zY3JvbGxJbnRvVmlld1RpbWVyKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3Njcm9sbEludG9W
aWV3VGltZXI7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9jb25zb2xlTWVzc2FnZUFkZGVkOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gLyoqIEB0eXBlIHtXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2V9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgdGhpcy5fbWVz
c2FnZXMucHVzaChtZXNzYWdlKTsKLQotICAgICAgICBpZiAodGhpcy5fdXJsVG9NZXNzYWdlQ291
bnRbbWVzc2FnZS51cmxdKQotICAgICAgICAgICAgdGhpcy5fdXJsVG9NZXNzYWdlQ291bnRbbWVz
c2FnZS51cmxdKys7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3VybFRvTWVzc2Fn
ZUNvdW50W21lc3NhZ2UudXJsXSA9IDE7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3Nob3VsZEJlVmlz
aWJsZShtZXNzYWdlKSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZENvbnNvbGVNZXNzYWdlKG1l
c3NhZ2UpOwotICAgIH0sCi0KLSAgICBfYXBwZW5kQ29uc29sZU1lc3NhZ2U6IGZ1bmN0aW9uKG1l
c3NhZ2UpCi0gICAgewotICAgICAgICAvLyB0aGlzLm1lc3NhZ2VzRWxlbWVudC5pc1Njcm9sbGVk
VG9Cb3R0b20oKSBpcyBmb3JjaW5nIHN0eWxlIHJlY2FsY3VsYXRpb24uCi0gICAgICAgIC8vIFdl
IGp1c3Qgc2tpcCBpdCBpZiB0aGUgc2Nyb2xsIGFjdGlvbiBoYXMgYmVlbiBzY2hlZHVsZWQuCi0g
ICAgICAgIGlmICghdGhpcy5faXNTY3JvbGxJbnRvVmlld1NjaGVkdWxlZCgpICYmICgobWVzc2Fn
ZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdCkgfHwgdGhpcy5t
ZXNzYWdlc0VsZW1lbnQuaXNTY3JvbGxlZFRvQm90dG9tKCkpKQotICAgICAgICAgICAgdGhpcy5f
c2NoZWR1bGVTY3JvbGxJbnRvVmlldygpOwotCi0gICAgICAgIHRoaXMuX3Zpc2libGVNZXNzYWdl
cy5wdXNoKG1lc3NhZ2UpOwotCi0gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cCkgewotICAgICAgICAgICAg
dmFyIHBhcmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAucGFyZW50R3JvdXAKLSAgICAgICAg
ICAgIGlmIChwYXJlbnRHcm91cCkKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRHcm91cCA9
IHBhcmVudEdyb3VwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1lc3NhZ2Uu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3Jv
dXAgfHwgbWVzc2FnZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuU3RhcnRHcm91cENvbGxhcHNlZCkgewotICAgICAgICAgICAgICAgIHZhciBncm91cCA9
IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwKHRoaXMuY3VycmVudEdyb3VwKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC5tZXNzYWdlc0VsZW1lbnQuYXBwZW5kQ2hpbGQo
Z3JvdXAuZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAgPSBncm91
cDsKLSAgICAgICAgICAgICAgICBtZXNzYWdlLmdyb3VwID0gZ3JvdXA7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC5hZGRNZXNzYWdlKG1lc3NhZ2UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLkNvbnNvbGVWaWV3LkV2ZW50cy5FbnRyeUFkZGVkLCBtZXNzYWdlKTsKLSAgICB9LAotCi0g
ICAgX2NvbnNvbGVDbGVhcmVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9zY3Jv
bGxlZFRvQm90dG9tID0gdHJ1ZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl92
aXNpYmxlTWVzc2FnZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl92aXNpYmxlTWVz
c2FnZXNbaV0ud2lsbEhpZGUoKTsKLSAgICAgICAgdGhpcy5fdmlzaWJsZU1lc3NhZ2VzID0gW107
Ci0gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107Ci0KLSAgICAgICAgdGhpcy5jdXJyZW50R3Jv
dXAgPSB0aGlzLnRvcEdyb3VwOwotICAgICAgICB0aGlzLnRvcEdyb3VwLm1lc3NhZ2VzRWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5FdmVudHMuQ29uc29sZUNsZWFyZWQpOwotCi0g
ICAgICAgIHRoaXMuX2xpbmtpZmllci5yZXNldCgpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlQ29u
dGV4dE1lbnVFdmVudDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIXdpbmRv
dy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgYSBzZWxlY3Rpb24sIHdlIHdhbnQgdG8gc2hvdyBvdXIgbm9ybWFsIGNvbnRleHQgbWVudQot
ICAgICAgICAgICAgLy8gKHdpdGggQ29weSwgZXRjLiksIGFuZCBub3QgQ2xlYXIgQ29uc29sZS4K
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChldmVudC50YXJn
ZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgiYSIpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4
dE1lbnUoZXZlbnQpOwotCi0gICAgICAgIGZ1bmN0aW9uIG1vbml0b3JpbmdYSFJJdGVtQWN0aW9u
KCkKLSAgICAgICAgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLm1vbml0b3Jp
bmdYSFJFbmFibGVkLnNldCghV2ViSW5zcGVjdG9yLnNldHRpbmdzLm1vbml0b3JpbmdYSFJFbmFi
bGVkLmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2Jv
eEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2cgWE1MSHR0cFJlcXVlc3RzIiksIG1vbml0
b3JpbmdYSFJJdGVtQWN0aW9uLmJpbmQodGhpcyksIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5tb25p
dG9yaW5nWEhSRW5hYmxlZC5nZXQoKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcHJlc2VydmVMb2dJ
dGVtQWN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdz
LnByZXNlcnZlQ29uc29sZUxvZy5zZXQoIVdlYkluc3BlY3Rvci5zZXR0aW5ncy5wcmVzZXJ2ZUNv
bnNvbGVMb2cuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZENo
ZWNrYm94SXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2Fz
ZU1lbnVUaXRsZXMoKSA/ICJQcmVzZXJ2ZSBsb2cgdXBvbiBuYXZpZ2F0aW9uIiA6ICJQcmVzZXJ2
ZSBMb2cgdXBvbiBOYXZpZ2F0aW9uIiksIHByZXNlcnZlTG9nSXRlbUFjdGlvbi5iaW5kKHRoaXMp
LCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJlc2VydmVDb25zb2xlTG9nLmdldCgpKTsKLQotICAg
ICAgICB2YXIgc291cmNlRWxlbWVudCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxm
V2l0aENsYXNzKCJjb25zb2xlLW1lc3NhZ2UiKTsKLQotICAgICAgICB2YXIgZmlsdGVyU3ViTWVu
dSA9IGNvbnRleHRNZW51LmFwcGVuZFN1Yk1lbnVJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
RmlsdGVyIikpOwotCi0gICAgICAgIGlmIChzb3VyY2VFbGVtZW50ICYmIHNvdXJjZUVsZW1lbnQu
bWVzc2FnZS51cmwpCi0gICAgICAgICAgICBmaWx0ZXJTdWJNZW51LmFwcGVuZEl0ZW0oV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAi
SGlkZSBtZXNzYWdlcyBmcm9tICVzIiA6ICJIaWRlIE1lc3NhZ2VzIGZyb20gJXMiLCBuZXcgV2Vi
SW5zcGVjdG9yLlBhcnNlZFVSTChzb3VyY2VFbGVtZW50Lm1lc3NhZ2UudXJsKS5kaXNwbGF5TmFt
ZSksIHRoaXMuX2FkZE1lc3NhZ2VVUkxGaWx0ZXIuYmluZCh0aGlzLCBzb3VyY2VFbGVtZW50Lm1l
c3NhZ2UudXJsKSk7Ci0KLSAgICAgICAgZmlsdGVyU3ViTWVudS5hcHBlbmRTZXBhcmF0b3IoKTsK
LSAgICAgICAgdmFyIHVuaGlkZUFsbCA9IGZpbHRlclN1Yk1lbnUuYXBwZW5kSXRlbShXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJV
bmhpZGUgYWxsIiA6ICJVbmhpZGUgQWxsIiksIHRoaXMuX3JlbW92ZU1lc3NhZ2VVUkxGaWx0ZXIu
YmluZCh0aGlzKSk7Ci0gICAgICAgIGZpbHRlclN1Yk1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0K
LSAgICAgICAgdmFyIGhhc0ZpbHRlcnMgPSBmYWxzZTsKLSAgICAgICAgZm9yICh2YXIgdXJsIGlu
IHRoaXMuX21lc3NhZ2VVUkxGaWx0ZXJzKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fbWVzc2Fn
ZVVSTEZpbHRlcnMuaGFzT3duUHJvcGVydHkodXJsKSkgewotICAgICAgICAgICAgICAgIGZpbHRl
clN1Yk1lbnUuYXBwZW5kQ2hlY2tib3hJdGVtKFN0cmluZy5zcHJpbnRmKCIlcyAoJWQpIiwgbmV3
IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwodXJsKS5kaXNwbGF5TmFtZSwgdGhpcy5fdXJsVG9NZXNz
YWdlQ291bnRbdXJsXSksIHRoaXMuX3JlbW92ZU1lc3NhZ2VVUkxGaWx0ZXIuYmluZCh0aGlzLCB1
cmwpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBoYXNGaWx0ZXJzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZpbHRlclN1Yk1lbnUuc2V0RW5hYmxlZChoYXNG
aWx0ZXJzIHx8IChzb3VyY2VFbGVtZW50ICYmIHNvdXJjZUVsZW1lbnQubWVzc2FnZS51cmwpKTsK
LSAgICAgICAgdW5oaWRlQWxsLnNldEVuYWJsZWQoaGFzRmlsdGVycyk7Ci0KLSAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0
ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0
bGVzKCkgPyAiQ2xlYXIgY29uc29sZSIgOiAiQ2xlYXIgQ29uc29sZSIpLCB0aGlzLl9yZXF1ZXN0
Q2xlYXJNZXNzYWdlcy5iaW5kKHRoaXMpKTsKLQotICAgICAgICB2YXIgbWVzc2FnZUVsZW1lbnQg
PSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygiY29uc29sZS1tZXNz
YWdlIik7Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gKG1lc3NhZ2VFbGVtZW50ICYmIG1lc3NhZ2VF
bGVtZW50Lm1lc3NhZ2UpID8gbWVzc2FnZUVsZW1lbnQubWVzc2FnZS5yZXF1ZXN0KCkgOiBudWxs
OwotICAgICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnR5cGUgPT09IFdlYkluc3BlY3Rvci5y
ZXNvdXJjZVR5cGVzLlhIUikgewotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJh
dG9yKCk7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiUmVwbGF5IFhIUiIpLCBOZXR3b3JrQWdlbnQucmVwbGF5WEhSLmJpbmQobnVsbCwg
cmVxdWVzdC5yZXF1ZXN0SWQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHRNZW51LnNo
b3coKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAotICAg
ICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgX2FkZE1lc3NhZ2VVUkxGaWx0ZXI6IGZ1bmN0aW9u
KHVybCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21lc3NhZ2VVUkxGaWx0ZXJzW3VybF0gPSB0cnVl
OwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubWVzc2FnZVVSTEZpbHRlcnMuc2V0KHRo
aXMuX21lc3NhZ2VVUkxGaWx0ZXJzKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTWVzc2FnZUxpc3Qo
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAotICAgICAq
IEBwcml2YXRlCi0gICAgICovCi0gICAgX3JlbW92ZU1lc3NhZ2VVUkxGaWx0ZXI6IGZ1bmN0aW9u
KHVybCkKLSAgICB7Ci0gICAgICAgIGlmICghdXJsKQotICAgICAgICAgICAgdGhpcy5fbWVzc2Fn
ZVVSTEZpbHRlcnMgPSB7fTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlIHRoaXMu
X21lc3NhZ2VVUkxGaWx0ZXJzW3VybF07Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdz
Lm1lc3NhZ2VVUkxGaWx0ZXJzLnNldCh0aGlzLl9tZXNzYWdlVVJMRmlsdGVycyk7Ci0KLSAgICAg
ICAgdGhpcy5fdXBkYXRlTWVzc2FnZUxpc3QoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2V9IG1lc3NhZ2UKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgX3Nob3VsZEJlVmlz
aWJsZTogZnVuY3Rpb24obWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAobWVzc2FnZS50
eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91
cCB8fCBtZXNzYWdlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkIHx8IG1lc3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwKSB8fAotICAgICAgICAgICAgKCFt
ZXNzYWdlLnVybCB8fCAhdGhpcy5fbWVzc2FnZVVSTEZpbHRlcnNbbWVzc2FnZS51cmxdKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBfdXBkYXRlTWVz
c2FnZUxpc3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBncm91cCA9IHRoaXMudG9w
R3JvdXA7Ci0gICAgICAgIHZhciBzb3VyY2VNZXNzYWdlcyA9IHRoaXMuX21lc3NhZ2VzOwotICAg
ICAgICB2YXIgdmlzaWJsZU1lc3NhZ2VJbmRleCA9IDA7Ci0gICAgICAgIHZhciBuZXdWaXNpYmxl
TWVzc2FnZXMgPSBbXTsKLSAgICAgICAgdmFyIGFuY2hvciA9IG51bGw7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc291cmNlTWVzc2FnZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
IHZhciBzb3VyY2VNZXNzYWdlID0gc291cmNlTWVzc2FnZXNbaV07Ci0gICAgICAgICAgICB2YXIg
dmlzaWJsZU1lc3NhZ2UgPSB0aGlzLl92aXNpYmxlTWVzc2FnZXNbdmlzaWJsZU1lc3NhZ2VJbmRl
eF07Ci0KLSAgICAgICAgICAgIGlmICh2aXNpYmxlTWVzc2FnZSA9PT0gc291cmNlTWVzc2FnZSkg
ewotICAgICAgICAgICAgICAgIHZpc2libGVNZXNzYWdlSW5kZXgrKzsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fc2hvdWxkQmVWaXNpYmxlKHZpc2libGVNZXNzYWdlKSkgewotICAgICAgICAg
ICAgICAgICAgICBuZXdWaXNpYmxlTWVzc2FnZXMucHVzaCh2aXNpYmxlTWVzc2FnZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2VNZXNzYWdlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYW5jaG9yID0gZ3JvdXAuZWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdy
b3VwID0gZ3JvdXAucGFyZW50R3JvdXAgfHwgZ3JvdXA7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc291cmNlTWVzc2FnZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCB8fCBzb3VyY2VNZXNzYWdlLnR5cGUgPT09IFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IHNvdXJjZU1lc3NhZ2UuZ3JvdXA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IgPSBncm91cC5tZXNzYWdlc0VsZW1lbnQuZmly
c3RDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZpc2libGVNZXNzYWdlLndpbGxIaWRlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHZpc2libGVNZXNzYWdlLnRvTWVzc2FnZUVsZW1lbnQoKS5yZW1vdmVTZWxm
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fc2hvdWxkQmVWaXNpYmxlKHNvdXJjZU1lc3NhZ2UpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdyb3VwLmFkZE1lc3NhZ2Uoc291cmNlTWVzc2FnZSwgYW5jaG9yID8gYW5j
aG9yLm5leHRTaWJsaW5nIDogZ3JvdXAubWVzc2FnZXNFbGVtZW50LmZpcnN0Q2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBuZXdWaXNpYmxlTWVzc2FnZXMucHVzaChzb3VyY2VNZXNzYWdlKTsK
LSAgICAgICAgICAgICAgICAgICAgYW5jaG9yID0gc291cmNlTWVzc2FnZS50b01lc3NhZ2VFbGVt
ZW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgdGhpcy5fdmlzaWJsZU1lc3NhZ2VzID0gbmV3VmlzaWJsZU1lc3NhZ2VzOwotICAgIH0s
Ci0KLSAgICBfbW9uaXRvcmluZ1hIUkVuYWJsZWRTZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICBDb25zb2xlQWdlbnQuc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQo
ZXZlbnQuZGF0YSk7Ci0gICAgfSwKLQotICAgIF9tZXNzYWdlc0NsaWNrZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnByb21wdC5pc0NhcmV0SW5zaWRlUHJvbXB0
KCkgJiYgd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgdGhp
cy5wcm9tcHQubW92ZUNhcmV0VG9FbmRPZlByb21wdCgpOwotICAgIH0sCi0KLSAgICBfcmVnaXN0
ZXJTaG9ydGN1dHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3J0Y3V0cyA9
IHt9OwotCi0gICAgICAgIHZhciBzaG9ydGN1dCA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0OwotICAgICAgICB2YXIgc2VjdGlvbiA9IFdlYkluc3BlY3Rvci5zaG9ydGN1dHNTY3JlZW4u
c2VjdGlvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnNvbGUiKSk7Ci0KLSAgICAgICAgdmFy
IHNob3J0Y3V0TCA9IHNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKCJsIiwgV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLkN0cmwpOwotICAgICAgICB0aGlzLl9zaG9ydGN1dHNb
c2hvcnRjdXRMLmtleV0gPSB0aGlzLl9yZXF1ZXN0Q2xlYXJNZXNzYWdlcy5iaW5kKHRoaXMpOwot
ICAgICAgICB2YXIga2V5cyA9IFtzaG9ydGN1dExdOwotICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LmlzTWFjKCkpIHsKLSAgICAgICAgICAgIHZhciBzaG9ydGN1dEsgPSBzaG9ydGN1dC5tYWtlRGVz
Y3JpcHRvcigiayIsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5NZXRh
KTsKLSAgICAgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dEsua2V5XSA9IHRoaXMuX3Jl
cXVlc3RDbGVhck1lc3NhZ2VzLmJpbmQodGhpcyk7Ci0gICAgICAgICAgICBrZXlzLnVuc2hpZnQo
c2hvcnRjdXRLKTsKLSAgICAgICAgfQotICAgICAgICBzZWN0aW9uLmFkZEFsdGVybmF0ZUtleXMo
a2V5cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGVhciBjb25zb2xlIikpOwotCi0gICAgICAg
IHNlY3Rpb24uYWRkS2V5KHNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKHNob3J0Y3V0LktleXMuVGFi
KSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBdXRvY29tcGxldGUgY29tbW9uIHByZWZpeCIpKTsK
LSAgICAgICAgc2VjdGlvbi5hZGRLZXkoc2hvcnRjdXQubWFrZURlc2NyaXB0b3Ioc2hvcnRjdXQu
S2V5cy5SaWdodCksIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWNjZXB0IHN1Z2dlc3Rpb24iKSk7
Ci0KLSAgICAgICAga2V5cyA9IFsKLSAgICAgICAgICAgIHNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9y
KHNob3J0Y3V0LktleXMuRG93biksCi0gICAgICAgICAgICBzaG9ydGN1dC5tYWtlRGVzY3JpcHRv
cihzaG9ydGN1dC5LZXlzLlVwKQotICAgICAgICBdOwotICAgICAgICBzZWN0aW9uLmFkZFJlbGF0
ZWRLZXlzKGtleXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTmV4dC9wcmV2aW91cyBsaW5lIikp
OwotCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSkgewotICAgICAgICAgICAga2V5
cyA9IFsKLSAgICAgICAgICAgICAgICBzaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigiTiIsIHNob3J0
Y3V0Lk1vZGlmaWVycy5BbHQpLAotICAgICAgICAgICAgICAgIHNob3J0Y3V0Lm1ha2VEZXNjcmlw
dG9yKCJQIiwgc2hvcnRjdXQuTW9kaWZpZXJzLkFsdCkKLSAgICAgICAgICAgIF07Ci0gICAgICAg
ICAgICBzZWN0aW9uLmFkZFJlbGF0ZWRLZXlzKGtleXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
TmV4dC9wcmV2aW91cyBjb21tYW5kIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbi5h
ZGRLZXkoc2hvcnRjdXQubWFrZURlc2NyaXB0b3Ioc2hvcnRjdXQuS2V5cy5FbnRlciksIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRXhlY3V0ZSBjb21tYW5kIikpOwotICAgIH0sCi0KLSAgICBfcmVx
dWVzdENsZWFyTWVzc2FnZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5jb25zb2xlLnJlcXVlc3RDbGVhck1lc3NhZ2VzKCk7Ci0gICAgfSwKLQotICAgIF9wcm9tcHRL
ZXlEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChpc0VudGVyS2V5KGV2
ZW50KSkgewotICAgICAgICAgICAgdGhpcy5fZW50ZXJLZXlQcmVzc2VkKGV2ZW50KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzaG9ydGN1dCA9IFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXlGcm9tRXZlbnQoZXZlbnQpOwotICAgICAg
ICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF07Ci0gICAgICAgIGlmICho
YW5kbGVyKSB7Ci0gICAgICAgICAgICBoYW5kbGVyKCk7Ci0gICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSwKLQot
ICAgIGV2YWx1YXRlVXNpbmdUZXh0UHJvbXB0OiBmdW5jdGlvbihleHByZXNzaW9uLCBzaG93UmVz
dWx0T25seSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2FwcGVuZENvbW1hbmQoZXhwcmVzc2lvbiwg
dGhpcy5wcm9tcHQudGV4dCwgZmFsc2UsIHNob3dSZXN1bHRPbmx5KTsKLSAgICB9LAotCi0gICAg
X2VudGVyS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoZXZl
bnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLQotICAgICAgICB0aGlz
LnByb21wdC5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKLQotICAgICAgICB2YXIgc3RyID0gdGhp
cy5wcm9tcHQudGV4dDsKLSAgICAgICAgaWYgKCFzdHIubGVuZ3RoKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0aGlzLl9hcHBlbmRDb21tYW5kKHN0ciwgIiIsIHRydWUsIGZhbHNlKTsK
LSAgICB9LAotCi0gICAgX3ByaW50UmVzdWx0OiBmdW5jdGlvbihyZXN1bHQsIHdhc1Rocm93biwg
b3JpZ2luYXRpbmdDb21tYW5kKQotICAgIHsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHZhciBtZXNzYWdlID0gbmV3IFdlYkluc3BlY3Rvci5Db25z
b2xlQ29tbWFuZFJlc3VsdChyZXN1bHQsIHdhc1Rocm93biwgb3JpZ2luYXRpbmdDb21tYW5kLCB0
aGlzLl9saW5raWZpZXIpOwotICAgICAgICB0aGlzLl9tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpOwot
ICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2FnZShtZXNzYWdlKTsKLSAgICB9LAotCi0g
ICAgX2FwcGVuZENvbW1hbmQ6IGZ1bmN0aW9uKHRleHQsIG5ld1Byb21wdFRleHQsIHVzZUNvbW1h
bmRMaW5lQVBJLCBzaG93UmVzdWx0T25seSkKLSAgICB7Ci0gICAgICAgIGlmICghc2hvd1Jlc3Vs
dE9ubHkpIHsKLSAgICAgICAgICAgIHZhciBjb21tYW5kTWVzc2FnZSA9IG5ldyBXZWJJbnNwZWN0
b3IuQ29uc29sZUNvbW1hbmQodGV4dCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuY29uc29s
ZS5pbnRlcnJ1cHRSZXBlYXRDb3VudCgpOwotICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXMucHVz
aChjb21tYW5kTWVzc2FnZSk7Ci0gICAgICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2Fn
ZShjb21tYW5kTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5wcm9tcHQudGV4dCA9
IG5ld1Byb21wdFRleHQ7Ci0KLSAgICAgICAgZnVuY3Rpb24gcHJpbnRSZXN1bHQocmVzdWx0LCB3
YXNUaHJvd24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCFzaG93UmVzdWx0T25seSkgewotICAg
ICAgICAgICAgICAgIHRoaXMucHJvbXB0LnB1c2hIaXN0b3J5SXRlbSh0ZXh0KTsKLSAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29uc29sZUhpc3Rvcnkuc2V0KHRoaXMucHJv
bXB0Lmhpc3RvcnlEYXRhLnNsaWNlKC0zMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICB0aGlzLl9wcmludFJlc3VsdChyZXN1bHQsIHdhc1Rocm93biwgY29tbWFu
ZE1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwu
ZXZhbHVhdGUodGV4dCwgImNvbnNvbGUiLCB1c2VDb21tYW5kTGluZUFQSSwgZmFsc2UsIGZhbHNl
LCB0cnVlLCBwcmludFJlc3VsdC5iaW5kKHRoaXMpKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iu
dXNlck1ldHJpY3MuQ29uc29sZUV2YWx1YXRlZC5yZWNvcmQoKTsKLSAgICB9LAotCi0gICAgZWxl
bWVudHNUb1Jlc3RvcmVTY3JvbGxQb3NpdGlvbnNGb3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBbdGhpcy5tZXNzYWdlc0VsZW1lbnRdOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICovCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmQgPSBmdW5jdGlvbihjb21tYW5kKQot
ewotICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xl
Q29tbWFuZC5wcm90b3R5cGUgPSB7Ci0gICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICBj
bGVhckhpZ2hsaWdodDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGhpZ2hsaWdodGVk
TWVzc2FnZSA9IHRoaXMuX2Zvcm1hdHRlZENvbW1hbmQ7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9m
b3JtYXR0ZWRDb21tYW5kOwotICAgICAgICB0aGlzLl9mb3JtYXRDb21tYW5kKCk7Ci0gICAgICAg
IHRoaXMuX2VsZW1lbnQucmVwbGFjZUNoaWxkKHRoaXMuX2Zvcm1hdHRlZENvbW1hbmQsIGhpZ2hs
aWdodGVkTWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIGhpZ2hsaWdodFNlYXJjaFJlc3VsdHM6IGZ1
bmN0aW9uKHJlZ2V4T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmVnZXhPYmplY3QubGFzdEluZGV4
ID0gMDsKLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLmNvbW1hbmQ7Ci0gICAgICAgIHZhciBtYXRj
aCA9IHJlZ2V4T2JqZWN0LmV4ZWModGV4dCk7Ci0gICAgICAgIHZhciBvZmZzZXQgPSAwOwotICAg
ICAgICB2YXIgbWF0Y2hSYW5nZXMgPSBbXTsKLSAgICAgICAgd2hpbGUgKG1hdGNoKSB7Ci0gICAg
ICAgICAgICBtYXRjaFJhbmdlcy5wdXNoKHsgb2Zmc2V0OiBtYXRjaC5pbmRleCwgbGVuZ3RoOiBt
YXRjaFswXS5sZW5ndGggfSk7Ci0gICAgICAgICAgICBtYXRjaCA9IHJlZ2V4T2JqZWN0LmV4ZWMo
dGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmhpZ2hsaWdodFNlYXJjaFJl
c3VsdHModGhpcy5fZm9ybWF0dGVkQ29tbWFuZCwgbWF0Y2hSYW5nZXMpOwotICAgICAgICB0aGlz
Ll9lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKLSAgICB9LAotCi0gICAgbWF0Y2hl
c1JlZ2V4OiBmdW5jdGlvbihyZWdleE9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdl
eE9iamVjdC50ZXN0KHRoaXMuY29tbWFuZCk7Ci0gICAgfSwKLQotICAgIHRvTWVzc2FnZUVsZW1l
bnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZWxlbWVudCkgewotICAg
ICAgICAgICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
ICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jb21tYW5kID0gdGhpczsKLSAgICAgICAgICAgIHRo
aXMuX2VsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtdXNlci1jb21tYW5kIjsKLQotICAgICAg
ICAgICAgdGhpcy5fZm9ybWF0Q29tbWFuZCgpOwotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLl9mb3JtYXR0ZWRDb21tYW5kKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdGhpcy5fZWxlbWVudDsKLSAgICB9LAotCi0gICAgX2Zvcm1hdENvbW1hbmQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbW1hbmQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbW1hbmQuY2xh
c3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IHNvdXJjZS1jb2RlIjsKLSAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29tbWFuZC50ZXh0Q29udGVudCA9IHRoaXMuY29tbWFuZDsKLSAgICB9LAot
fQotCi0vKioKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsfQot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5MaW5raWZpZXJ9IGxpbmtp
ZmllcgotICovCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQgPSBmdW5jdGlvbihy
ZXN1bHQsIHdhc1Rocm93biwgb3JpZ2luYXRpbmdDb21tYW5kLCBsaW5raWZpZXIpCi17Ci0gICAg
dmFyIGxldmVsID0gKHdhc1Rocm93biA/IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuRXJyb3IgOiBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
LkxvZyk7Ci0gICAgdGhpcy5vcmlnaW5hdGluZ0NvbW1hbmQgPSBvcmlnaW5hdGluZ0NvbW1hbmQ7
Ci0gICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5jYWxsKHRoaXMsIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLCBsZXZlbCwgIiIsIGxpbmtpZmll
ciwgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3VsdCwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW3Jlc3VsdF0pOwotfQotCi1XZWJJbnNwZWN0b3Iu
Q29uc29sZUNvbW1hbmRSZXN1bHQucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVy
cmlkZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gYXJyYXkKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHVzZUFycmF5UHJldmlld0luRm9y
bWF0dGVyOiBmdW5jdGlvbihhcnJheSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9LAotCi0gICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIGVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS50
b01lc3NhZ2VFbGVtZW50LmNhbGwodGhpcyk7Ci0gICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFz
cygiY29uc29sZS11c2VyLWNvbW1hbmQtcmVzdWx0Iik7Ci0gICAgICAgIHJldHVybiBlbGVtZW50
OwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUlt
cGwucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rv
ci5Db25zb2xlR3JvdXAgPSBmdW5jdGlvbihwYXJlbnRHcm91cCkKLXsKLSAgICB0aGlzLnBhcmVu
dEdyb3VwID0gcGFyZW50R3JvdXA7Ci0KLSAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtZ3JvdXAi
OwotICAgIGVsZW1lbnQuZ3JvdXAgPSB0aGlzOwotICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7
Ci0KLSAgICBpZiAocGFyZW50R3JvdXApIHsKLSAgICAgICAgdmFyIGJyYWNrZXRFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGJyYWNrZXRFbGVtZW50LmNs
YXNzTmFtZSA9ICJjb25zb2xlLWdyb3VwLWJyYWNrZXQiOwotICAgICAgICBlbGVtZW50LmFwcGVu
ZENoaWxkKGJyYWNrZXRFbGVtZW50KTsKLSAgICB9Ci0KLSAgICB2YXIgbWVzc2FnZXNFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgbWVzc2FnZXNFbGVtZW50LmNs
YXNzTmFtZSA9ICJjb25zb2xlLWdyb3VwLW1lc3NhZ2VzIjsKLSAgICBlbGVtZW50LmFwcGVuZENo
aWxkKG1lc3NhZ2VzRWxlbWVudCk7Ci0gICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQgPSBtZXNzYWdl
c0VsZW1lbnQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlID0gewot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfSBtZXNz
YWdlCi0gICAgICogQHBhcmFtIHtOb2RlPX0gbm9kZQotICAgICAqLwotICAgIGFkZE1lc3NhZ2U6
IGZ1bmN0aW9uKG1lc3NhZ2UsIG5vZGUpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IG1l
c3NhZ2UudG9NZXNzYWdlRWxlbWVudCgpOwotCi0gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwIHx8IG1l
c3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0
YXJ0R3JvdXBDb2xsYXBzZWQpIHsKLSAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LnBh
cmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHRoaXMubWVzc2FnZXNFbGVtZW50KTsKLSAg
ICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90aXRsZUNs
aWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICAgICAgdmFyIGdyb3VwRWxlbWVudCA9
IGVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygiY29uc29sZS1ncm91cCIpOwot
ICAgICAgICAgICAgaWYgKGdyb3VwRWxlbWVudCAmJiBtZXNzYWdlLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKQotICAg
ICAgICAgICAgICAgIGdyb3VwRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjb2xsYXBzZWQiKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50Lmluc2VydEJl
Zm9yZShlbGVtZW50LCBub2RlIHx8IG51bGwpOwotICAgICAgICAgICAgbWVzc2FnZS53YXNTaG93
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQucHJldmlvdXNTaWJsaW5nICYm
IG1lc3NhZ2Uub3JpZ2luYXRpbmdDb21tYW5kICYmIGVsZW1lbnQucHJldmlvdXNTaWJsaW5nLmNv
bW1hbmQgPT09IG1lc3NhZ2Uub3JpZ2luYXRpbmdDb21tYW5kKQotICAgICAgICAgICAgZWxlbWVu
dC5wcmV2aW91c1NpYmxpbmcuYWRkU3R5bGVDbGFzcygiY29uc29sZS1hZGphY2VudC11c2VyLWNv
bW1hbmQtcmVzdWx0Iik7Ci0gICAgfSwKLQotICAgIF90aXRsZUNsaWNrZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGdyb3VwVGl0bGVFbGVtZW50ID0gZXZlbnQudGFyZ2V0
LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoImNvbnNvbGUtZ3JvdXAtdGl0bGUiKTsKLSAg
ICAgICAgaWYgKGdyb3VwVGl0bGVFbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgZ3JvdXBFbGVt
ZW50ID0gZ3JvdXBUaXRsZUVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygiY29u
c29sZS1ncm91cCIpOwotICAgICAgICAgICAgaWYgKGdyb3VwRWxlbWVudCkKLSAgICAgICAgICAg
ICAgICBpZiAoZ3JvdXBFbGVtZW50Lmhhc1N0eWxlQ2xhc3MoImNvbGxhcHNlZCIpKQotICAgICAg
ICAgICAgICAgICAgICBncm91cEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiY29sbGFwc2VkIik7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBncm91cEVsZW1lbnQu
YWRkU3R5bGVDbGFzcygiY29sbGFwc2VkIik7Ci0gICAgICAgICAgICBncm91cFRpdGxlRWxlbWVu
dC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXZl
bnQuY29uc3VtZSh0cnVlKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQHR5cGUgez9XZWJJbnNwZWN0
b3IuQ29uc29sZVZpZXd9Ci0gKi8KLVdlYkluc3BlY3Rvci5jb25zb2xlVmlldyA9IG51bGw7Ci0K
LVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIGxl
dmVsLCBtZXNzYWdlLCB0eXBlLCB1cmwsIGxpbmUsIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBz
dGFja1RyYWNlLCByZXF1ZXN0SWQsIGlzT3V0ZGF0ZWQpCi17Ci0gICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJbXBsKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIFdlYklu
c3BlY3Rvci5jb25zb2xlVmlldy5fbGlua2lmaWVyLCB0eXBlLCB1cmwsIGxpbmUsIHJlcGVhdENv
dW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0SWQsIGlzT3V0ZGF0ZWQpOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZW50UHJv
dmlkZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRlbnRQcm92
aWRlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM3YTcwMS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRlbnRQcm92aWRlci5q
cworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwot
V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlciA9IGZ1bmN0aW9uKCkgeyB9Ci0KLVdlYkluc3Bl
Y3Rvci5Db250ZW50UHJvdmlkZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBjb250ZW50VVJMOiBmdW5jdGlvbigpIHsgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGV9Ci0gICAg
ICovCi0gICAgY29udGVudFR5cGU6IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nLGJvb2xlYW4sc3RyaW5nKX0gY2FsbGJhY2sKLSAgICAg
Ki8KLSAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spIHsgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
Y2FzZVNlbnNpdGl2ZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZWdleAotICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb24oQXJyYXkuPFdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXIuU2VhcmNo
TWF0Y2g+KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZWFyY2hJbkNvbnRlbnQ6IGZ1bmN0aW9u
KHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCBjYWxsYmFjaykgeyB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICogQHBhcmFt
IHtzdHJpbmd9IGxpbmVDb250ZW50Ci0gKi8KLVdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXIu
U2VhcmNoTWF0Y2ggPSBmdW5jdGlvbihsaW5lTnVtYmVyLCBsaW5lQ29udGVudCkgewotICAgIHRo
aXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgdGhpcy5saW5lQ29udGVudCA9IGxpbmVD
b250ZW50OwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50Ci0gKiBAcGFyYW0g
e3N0cmluZ30gcXVlcnkKLSAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FzZVNlbnNpdGl2ZQotICogQHBh
cmFtIHtib29sZWFufSBpc1JlZ2V4Ci0gKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLkNv
bnRlbnRQcm92aWRlci5TZWFyY2hNYXRjaD59Ci0gKi8KLVdlYkluc3BlY3Rvci5Db250ZW50UHJv
dmlkZXIucGVyZm9ybVNlYXJjaEluQ29udGVudCA9IGZ1bmN0aW9uKGNvbnRlbnQsIHF1ZXJ5LCBj
YXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KQotewotICAgIHZhciByZWdleCA9IGNyZWF0ZVNlYXJjaFJl
Z2V4KHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKLQotICAgIHZhciByZXN1bHQgPSBb
XTsKLSAgICB2YXIgbGluZUVuZGluZ3MgPSBjb250ZW50LmxpbmVFbmRpbmdzKCk7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaW5lRW5kaW5ncy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIg
bGluZVN0YXJ0ID0gaSA+IDAgPyBsaW5lRW5kaW5nc1tpIC0gMV0gKyAxIDogMDsKLSAgICAgICAg
dmFyIGxpbmVFbmQgPSBsaW5lRW5kaW5nc1tpXTsKLSAgICAgICAgdmFyIGxpbmVDb250ZW50ID0g
Y29udGVudC5zdWJzdHJpbmcobGluZVN0YXJ0LCBsaW5lRW5kKTsKLSAgICAgICAgaWYgKGxpbmVD
b250ZW50Lmxlbmd0aCA+IDAgJiYgbGluZUNvbnRlbnQuY2hhckF0KGxpbmVDb250ZW50Lmxlbmd0
aCAtIDEpID09PSAiXHIiKQotICAgICAgICAgICAgbGluZUNvbnRlbnQgPSBsaW5lQ29udGVudC5z
dWJzdHJpbmcoMCwgbGluZUNvbnRlbnQubGVuZ3RoIC0gMSkKLQotICAgICAgICBpZiAocmVnZXgu
ZXhlYyhsaW5lQ29udGVudCkpCi0gICAgICAgICAgICByZXN1bHQucHVzaChuZXcgV2ViSW5zcGVj
dG9yLkNvbnRlbnRQcm92aWRlci5TZWFyY2hNYXRjaChpLCBsaW5lQ29udGVudCkpOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Db250ZW50UHJvdmlkZXJCYXNlZFByb2plY3REZWxlZ2F0ZS5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29udGVudFByb3ZpZGVyQmFzZWRQcm9q
ZWN0RGVsZWdhdGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNDg5N2UuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZW50UHJv
dmlkZXJCYXNlZFByb2plY3REZWxlZ2F0ZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotIC8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlBy
b2plY3REZWxlZ2F0ZX0KLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQHBh
cmFtIHtzdHJpbmd9IHR5cGUKLSAqLwotV2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlckJhc2Vk
UHJvamVjdERlbGVnYXRlID0gZnVuY3Rpb24odHlwZSkKLXsKLSAgICB0aGlzLl90eXBlID0gdHlw
ZTsKLSAgICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuQ29udGVudFBy
b3ZpZGVyPn0gKi8KLSAgICB0aGlzLl9jb250ZW50UHJvdmlkZXJzID0ge307Ci19Ci0KLVdlYklu
c3BlY3Rvci5Db250ZW50UHJvdmlkZXJCYXNlZFByb2plY3REZWxlZ2F0ZS5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGlkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICAvLyBPdmVycmlkZGRlbiBieSBzdWJjbGFzc2VzCi0gICAg
ICAgIHJldHVybiAiIjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5n
fQotICAgICAqLwotICAgIHR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl90eXBlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0g
ICAgICovCi0gICAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIE92
ZXJyaWRkZGVuIGJ5IHN1YmNsYXNzZXMKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoCi0gICAgICogQHBhcmFt
IHtmdW5jdGlvbig/c3RyaW5nLGJvb2xlYW4sc3RyaW5nKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAg
ICByZXF1ZXN0RmlsZUNvbnRlbnQ6IGZ1bmN0aW9uKHBhdGgsIGNhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IHRoaXMuX2NvbnRlbnRQcm92aWRlcnNbcGF0aC5q
b2luKCIvIildOwotICAgICAgICBjb250ZW50UHJvdmlkZXIucmVxdWVzdENvbnRlbnQoY2FsbGJh
Y2spOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAq
LwotICAgIGNhblNldEZpbGVDb250ZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmlu
Zz59IHBhdGgKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3Q29udGVudAotICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb24oP3N0cmluZyl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgc2V0RmlsZUNvbnRl
bnQ6IGZ1bmN0aW9uKHBhdGgsIG5ld0NvbnRlbnQsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAg
Y2FsbGJhY2sobnVsbCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXku
PHN0cmluZz59IHBhdGgKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IGNhc2VTZW5zaXRpdmUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVn
ZXgKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxXZWJJbnNwZWN0b3IuQ29udGVudFBy
b3ZpZGVyLlNlYXJjaE1hdGNoPil9IGNhbGxiYWNrCi0gICAgICovCi0gICAgc2VhcmNoSW5GaWxl
Q29udGVudDogZnVuY3Rpb24ocGF0aCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgsIGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IHRoaXMuX2NvbnRl
bnRQcm92aWRlcnNbcGF0aC5qb2luKCIvIildOwotICAgICAgICBjb250ZW50UHJvdmlkZXIuc2Vh
cmNoSW5Db250ZW50KHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCBjYWxsYmFjayk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGgKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29u
dGVudFByb3ZpZGVyfSBjb250ZW50UHJvdmlkZXIKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlz
RWRpdGFibGUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0NvbnRlbnRTY3JpcHQKLSAgICAg
KiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0KLSAgICAgKi8KLSAgICBhZGRDb250ZW50UHJvdmlk
ZXI6IGZ1bmN0aW9uKHBhdGgsIHVybCwgY29udGVudFByb3ZpZGVyLCBpc0VkaXRhYmxlLCBpc0Nv
bnRlbnRTY3JpcHQpCi0gICAgewotICAgICAgICB2YXIgZmlsZURlc2NyaXB0b3IgPSBuZXcgV2Vi
SW5zcGVjdG9yLkZpbGVEZXNjcmlwdG9yKHBhdGgsIHVybCwgdXJsLCBjb250ZW50UHJvdmlkZXIu
Y29udGVudFR5cGUoKSwgaXNFZGl0YWJsZSwgaXNDb250ZW50U2NyaXB0KTsKLSAgICAgICAgdGhp
cy5fY29udGVudFByb3ZpZGVyc1twYXRoLmpvaW4oIi8iKV0gPSBjb250ZW50UHJvdmlkZXI7Ci0g
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9qZWN0
RGVsZWdhdGUuRXZlbnRzLkZpbGVBZGRlZCwgZmlsZURlc2NyaXB0b3IpOwotICAgICAgICByZXR1
cm4gcGF0aDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5n
Pn0gcGF0aAotICAgICAqLwotICAgIHJlbW92ZUZpbGU6IGZ1bmN0aW9uKHBhdGgpCi0gICAgewot
ICAgICAgICBkZWxldGUgdGhpcy5fY29udGVudFByb3ZpZGVyc1twYXRoLmpvaW4oIi8iKV07Ci0g
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9qZWN0
RGVsZWdhdGUuRXZlbnRzLkZpbGVSZW1vdmVkLCBwYXRoKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlk
ZXI+fQotICAgICAqLwotICAgIGNvbnRlbnRQcm92aWRlcnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50UHJvdmlkZXJzOwotICAgIH0sCi0KLSAgICByZXNl
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY29udGVudFByb3ZpZGVycyA9IHt9
OwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUHJv
amVjdERlbGVnYXRlLkV2ZW50cy5SZXNldCwgbnVsbCk7Ci0gICAgfSwKLSAgICAKLSAgICBfX3By
b3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRlbnRQcm92aWRlcnMuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRlbnRQcm92aWRlcnMuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0Njk2MDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZW50UHJvdmlkZXJzLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMjk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMg
e1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9Ci0gKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNw
ZWN0b3IuU2NyaXB0Pn0gc2NyaXB0cwotICovCi1XZWJJbnNwZWN0b3IuQ29uY2F0ZW5hdGVkU2Ny
aXB0c0NvbnRlbnRQcm92aWRlciA9IGZ1bmN0aW9uKHNjcmlwdHMpCi17Ci0gICAgdGhpcy5fbWlt
ZVR5cGUgPSAidGV4dC9odG1sIjsKLSAgICB0aGlzLl9zY3JpcHRzID0gc2NyaXB0czsKLX0KLQot
V2ViSW5zcGVjdG9yLkNvbmNhdGVuYXRlZFNjcmlwdHNDb250ZW50UHJvdmlkZXIuc2NyaXB0T3Bl
blRhZyA9ICI8c2NyaXB0PiI7Ci1XZWJJbnNwZWN0b3IuQ29uY2F0ZW5hdGVkU2NyaXB0c0NvbnRl
bnRQcm92aWRlci5zY3JpcHRDbG9zZVRhZyA9ICI8L3NjcmlwdD4iOwotCi1XZWJJbnNwZWN0b3Iu
Q29uY2F0ZW5hdGVkU2NyaXB0c0NvbnRlbnRQcm92aWRlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5TY3JpcHQ+fQotICAgICAqLwot
ICAgIF9zb3J0ZWRTY3JpcHRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
c29ydGVkU2NyaXB0c0FycmF5KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRlZFNjcmlw
dHNBcnJheTsKLQotICAgICAgICB0aGlzLl9zb3J0ZWRTY3JpcHRzQXJyYXkgPSBbXTsKLSAgICAg
ICAgCi0gICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0cy5zbGljZSgpOwotICAgICAg
ICBzY3JpcHRzLnNvcnQoZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4geC5saW5lT2Zmc2V0IC0geS5s
aW5lT2Zmc2V0IHx8IHguY29sdW1uT2Zmc2V0IC0geS5jb2x1bW5PZmZzZXQ7IH0pOwotICAgICAg
ICAKLSAgICAgICAgdmFyIHNjcmlwdE9wZW5UYWdMZW5ndGggPSBXZWJJbnNwZWN0b3IuQ29uY2F0
ZW5hdGVkU2NyaXB0c0NvbnRlbnRQcm92aWRlci5zY3JpcHRPcGVuVGFnLmxlbmd0aDsKLSAgICAg
ICAgdmFyIHNjcmlwdENsb3NlVGFnTGVuZ3RoID0gV2ViSW5zcGVjdG9yLkNvbmNhdGVuYXRlZFNj
cmlwdHNDb250ZW50UHJvdmlkZXIuc2NyaXB0Q2xvc2VUYWcubGVuZ3RoOwotICAgICAgICAKLSAg
ICAgICAgdGhpcy5fc29ydGVkU2NyaXB0c0FycmF5LnB1c2goc2NyaXB0c1swXSk7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAxOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
dmFyIHByZXZpb3VzU2NyaXB0ID0gdGhpcy5fc29ydGVkU2NyaXB0c0FycmF5W3RoaXMuX3NvcnRl
ZFNjcmlwdHNBcnJheS5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFy
IGxpbmVOdW1iZXIgPSBwcmV2aW91c1NjcmlwdC5lbmRMaW5lOwotICAgICAgICAgICAgdmFyIGNv
bHVtbk51bWJlciA9IHByZXZpb3VzU2NyaXB0LmVuZENvbHVtbiArIHNjcmlwdENsb3NlVGFnTGVu
Z3RoICsgc2NyaXB0T3BlblRhZ0xlbmd0aDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPCBzY3JpcHRzW2ldLmxpbmVPZmZzZXQgfHwgKGxpbmVOdW1iZXIgPT09IHNj
cmlwdHNbaV0ubGluZU9mZnNldCAmJiBjb2x1bW5OdW1iZXIgPD0gc2NyaXB0c1tpXS5jb2x1bW5P
ZmZzZXQpKQotICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRlZFNjcmlwdHNBcnJheS5wdXNoKHNj
cmlwdHNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl9zb3J0ZWRTY3JpcHRz
QXJyYXk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAg
Ki8KLSAgICBjb250ZW50VVJMOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gIiI7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJj
ZVR5cGV9Ci0gICAgICovCi0gICAgY29udGVudFR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5Eb2N1bWVudDsKLSAgICB9LAot
ICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyxib29sZWFuLHN0
cmluZyl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9zb3J0ZWRTY3JpcHRz
KCk7Ci0gICAgICAgIHZhciBzb3VyY2VzID0gW107Ci0gICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVl
c3RTb3VyY2UoY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzb3VyY2VzLnB1c2goY29udGVudCk7Ci0gICAgICAgICAgICBpZiAoc291cmNl
cy5sZW5ndGggPT0gc2NyaXB0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2sodGhp
cy5fY29uY2F0ZW5hdGVTY3JpcHRzQ29udGVudChzY3JpcHRzLCBzb3VyY2VzKSwgZmFsc2UsIHRo
aXMuX21pbWVUeXBlKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNj
cmlwdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzY3JpcHRzW2ldLnJlcXVlc3RDb250ZW50
KGRpZFJlcXVlc3RTb3VyY2UuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FzZVNlbnNp
dGl2ZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZWdleAotICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oQXJyYXkuPFdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXIuU2VhcmNoTWF0Y2g+KX0g
Y2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZWFyY2hJbkNvbnRlbnQ6IGZ1bmN0aW9uKHF1ZXJ5LCBj
YXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXN1
bHRzID0ge307Ci0gICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc29ydGVkU2NyaXB0cygpOwot
ICAgICAgICB2YXIgc2NyaXB0c0xlZnQgPSBzY3JpcHRzLmxlbmd0aDsKLQotICAgICAgICBmdW5j
dGlvbiBtYXliZUNhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNjcmlwdHNM
ZWZ0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQocmVzdWx0c1tzY3JpcHRz
W2ldLnNjcmlwdElkXSk7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0g
c2NyaXB0Ci0gICAgICAgICAqIEBwYXJhbSB7QXJyYXkuPFBhZ2VBZ2VudC5TZWFyY2hNYXRjaD59
IHNlYXJjaE1hdGNoZXMKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHNlYXJjaENhbGxi
YWNrKHNjcmlwdCwgc2VhcmNoTWF0Y2hlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0
c1tzY3JpcHQuc2NyaXB0SWRdID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNlYXJjaE1hdGNoZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VhcmNo
TWF0Y2ggPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlci5TZWFyY2hNYXRjaChzZWFy
Y2hNYXRjaGVzW2ldLmxpbmVOdW1iZXIgKyBzY3JpcHQubGluZU9mZnNldCwgc2VhcmNoTWF0Y2hl
c1tpXS5saW5lQ29udGVudCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0c1tzY3JpcHQuc2NyaXB0
SWRdLnB1c2goc2VhcmNoTWF0Y2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2NyaXB0
c0xlZnQtLTsKLSAgICAgICAgICAgIG1heWJlQ2FsbGJhY2suY2FsbCh0aGlzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1heWJlQ2FsbGJhY2soKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzY3JpcHRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgc2NyaXB0c1tpXS5zZWFyY2hJbkNv
bnRlbnQocXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgsIHNlYXJjaENhbGxiYWNrLmJpbmQo
dGhpcywgc2NyaXB0c1tpXSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtz
dHJpbmd9Ci0gICAgICovCi0gICAgX2NvbmNhdGVuYXRlU2NyaXB0c0NvbnRlbnQ6IGZ1bmN0aW9u
KHNjcmlwdHMsIHNvdXJjZXMpCi0gICAgewotICAgICAgICB2YXIgY29udGVudCA9ICIiOwotICAg
ICAgICB2YXIgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSAwOwot
Ci0gICAgICAgIHZhciBzY3JpcHRPcGVuVGFnID0gV2ViSW5zcGVjdG9yLkNvbmNhdGVuYXRlZFNj
cmlwdHNDb250ZW50UHJvdmlkZXIuc2NyaXB0T3BlblRhZzsKLSAgICAgICAgdmFyIHNjcmlwdENs
b3NlVGFnID0gV2ViSW5zcGVjdG9yLkNvbmNhdGVuYXRlZFNjcmlwdHNDb250ZW50UHJvdmlkZXIu
c2NyaXB0Q2xvc2VUYWc7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgLy8gRmlsbCB0aGUgZ2FwIHdpdGggd2hpdGVzcGFjZSBj
aGFyYWN0ZXJzLgotICAgICAgICAgICAgZm9yICh2YXIgbmV3TGluZXNDb3VudCA9IHNjcmlwdHNb
aV0ubGluZU9mZnNldCAtIGxpbmVOdW1iZXI7IG5ld0xpbmVzQ291bnQgPiAwOyAtLW5ld0xpbmVz
Q291bnQpIHsKLSAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAg
ICAgIGNvbnRlbnQgKz0gIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodmFy
IHNwYWNlc0NvdW50ID0gc2NyaXB0c1tpXS5jb2x1bW5PZmZzZXQgLSBjb2x1bW5OdW1iZXIgLSBz
Y3JpcHRPcGVuVGFnLmxlbmd0aDsgc3BhY2VzQ291bnQgPiAwOyAtLXNwYWNlc0NvdW50KQotICAg
ICAgICAgICAgICAgIGNvbnRlbnQgKz0gIiAiOwotCi0gICAgICAgICAgICAvLyBBZGQgc2NyaXB0
IHRhZy4KLSAgICAgICAgICAgIGNvbnRlbnQgKz0gc2NyaXB0T3BlblRhZzsKLSAgICAgICAgICAg
IGNvbnRlbnQgKz0gc291cmNlc1tpXTsKLSAgICAgICAgICAgIGNvbnRlbnQgKz0gc2NyaXB0Q2xv
c2VUYWc7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyID0gc2NyaXB0c1tpXS5lbmRMaW5lOwotICAg
ICAgICAgICAgY29sdW1uTnVtYmVyID0gc2NyaXB0c1tpXS5lbmRDb2x1bW4gKyBzY3JpcHRDbG9z
ZVRhZy5sZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICB9
LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyLnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVVS
TAotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9Ci0gKi8KLVdl
Ykluc3BlY3Rvci5Db21waWxlclNvdXJjZU1hcHBpbmdDb250ZW50UHJvdmlkZXIgPSBmdW5jdGlv
bihzb3VyY2VVUkwpCi17Ci0gICAgdGhpcy5fc291cmNlVVJMID0gc291cmNlVVJMOwotfQotCi1X
ZWJJbnNwZWN0b3IuQ29tcGlsZXJTb3VyY2VNYXBwaW5nQ29udGVudFByb3ZpZGVyLnByb3RvdHlw
ZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgY29u
dGVudFVSTDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVVS
TDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJlc291
cmNlVHlwZX0KLSAgICAgKi8KLSAgICBjb250ZW50VHlwZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlNjcmlwdDsKLSAgICB9LAot
ICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyxib29sZWFuLHN0
cmluZyl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSAiIjsKLSAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHNlbmRSZXF1ZXN0IGFzeW5jLgotICAgICAg
ICAgICAgc291cmNlQ29kZSA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KHRoaXMuX3NvdXJjZVVSTCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgewotICAgICAg
ICAgICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxi
YWNrKHNvdXJjZUNvZGUsIGZhbHNlLCAidGV4dC9qYXZhc2NyaXB0Iik7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqIEBwYXJhbSB7Ym9vbGVh
bn0gY2FzZVNlbnNpdGl2ZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZWdleAotICAgICAq
IEBwYXJhbSB7ZnVuY3Rpb24oQXJyYXkuPFdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXIuU2Vh
cmNoTWF0Y2g+KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZWFyY2hJbkNvbnRlbnQ6IGZ1bmN0
aW9uKHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCBjYWxsYmFjaykKLSAgICB7Ci0gICAg
ICAgIGNhbGxiYWNrKFtdKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
Q29udGVudFByb3ZpZGVyLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICog
QGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9Ci0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5SZXNvdXJjZVR5cGV9IGNvbnRlbnRUeXBlIAotICogQHBhcmFtIHtzdHJpbmd9
IGNvbnRlbnQKLSAqIEBwYXJhbSB7c3RyaW5nPX0gbWltZVR5cGUKLSAqLwotV2ViSW5zcGVjdG9y
LlN0YXRpY0NvbnRlbnRQcm92aWRlciA9IGZ1bmN0aW9uKGNvbnRlbnRUeXBlLCBjb250ZW50LCBt
aW1lVHlwZSkKLXsKLSAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKLSAgICB0aGlzLl9jb250
ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwotICAgIHRoaXMuX21pbWVUeXBlID0gbWltZVR5cGU7Ci19
Ci0KLVdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIucHJvdG90eXBlID0gewotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBjb250ZW50VVJMOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGV9Ci0gICAgICovCi0gICAg
Y29udGVudFR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb250
ZW50VHlwZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3Ry
aW5nLGJvb2xlYW4sc3RyaW5nKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICByZXF1ZXN0Q29udGVu
dDogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICBjYWxsYmFjayh0aGlzLl9jb250
ZW50LCBmYWxzZSwgdGhpcy5fbWltZVR5cGUgfHwgdGhpcy5fY29udGVudFR5cGUuY2Fub25pY2Fs
TWltZVR5cGUoKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBx
dWVyeQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FzZVNlbnNpdGl2ZQotICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gaXNSZWdleAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oQXJyYXkuPFdlYklu
c3BlY3Rvci5Db250ZW50UHJvdmlkZXIuU2VhcmNoTWF0Y2g+KX0gY2FsbGJhY2sKLSAgICAgKi8K
LSAgICBzZWFyY2hJbkNvbnRlbnQ6IGZ1bmN0aW9uKHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHBlcmZvcm1TZWFyY2goKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXZWJJbnNwZWN0b3IuQ29udGVudFByb3Zp
ZGVyLnBlcmZvcm1TZWFyY2hJbkNvbnRlbnQodGhpcy5fY29udGVudCwgcXVlcnksIGNhc2VTZW5z
aXRpdmUsIGlzUmVnZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHNlYXJjaEluQ29udGVu
dCBzaG91bGQgY2FsbCBiYWNrIGxhdGVyLgotICAgICAgICB3aW5kb3cuc2V0VGltZW91dChwZXJm
b3JtU2VhcmNoLmJpbmQodGhpcyksIDApOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5Db250ZW50UHJvdmlkZXIucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnRleHRNZW51LmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db250ZXh0TWVudS5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOThiZjFhNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbnRleHRNZW51LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGV4dFN1
Yk1lbnVJdGVtfSB0b3BMZXZlbE1lbnUKLSAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlCi0gKiBAcGFy
YW0ge3N0cmluZz19IGxhYmVsCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBkaXNhYmxlZAotICogQHBh
cmFtIHtib29sZWFuPX0gY2hlY2tlZAotICovCi1XZWJJbnNwZWN0b3IuQ29udGV4dE1lbnVJdGVt
ID0gZnVuY3Rpb24odG9wTGV2ZWxNZW51LCB0eXBlLCBsYWJlbCwgZGlzYWJsZWQsIGNoZWNrZWQp
Ci17Ci0gICAgdGhpcy5fdHlwZSA9IHR5cGU7Ci0gICAgdGhpcy5fbGFiZWwgPSBsYWJlbDsKLSAg
ICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkOwotICAgIHRoaXMuX2NoZWNrZWQgPSBjaGVja2Vk
OwotICAgIHRoaXMuX2NvbnRleHRNZW51ID0gdG9wTGV2ZWxNZW51OwotICAgIGlmICh0eXBlID09
PSAiaXRlbSIgfHwgdHlwZSA9PT0gImNoZWNrYm94IikKLSAgICAgICAgdGhpcy5faWQgPSB0b3BM
ZXZlbE1lbnUubmV4dElkKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db250ZXh0TWVudUl0ZW0ucHJv
dG90eXBlID0gewotICAgIGlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5faWQ7Ci0gICAgfSwKLQotICAgIHR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl90eXBlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIGlzRW5hYmxlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICF0aGlzLl9kaXNhYmxlZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtib29sZWFufSBlbmFibGVkCi0gICAgICovCi0gICAgc2V0RW5hYmxlZDogZnVuY3Rpb24oZW5h
YmxlZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gIWVuYWJsZWQ7Ci0gICAgfSwK
LQotICAgIF9idWlsZERlc2NyaXB0b3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAodGhpcy5fdHlwZSkgewotICAgICAgICBjYXNlICJpdGVtIjoKLSAgICAgICAgICAgIHJldHVy
biB7IHR5cGU6ICJpdGVtIiwgaWQ6IHRoaXMuX2lkLCBsYWJlbDogdGhpcy5fbGFiZWwsIGVuYWJs
ZWQ6ICF0aGlzLl9kaXNhYmxlZCB9OwotICAgICAgICBjYXNlICJzZXBhcmF0b3IiOgotICAgICAg
ICAgICAgcmV0dXJuIHsgdHlwZTogInNlcGFyYXRvciIgfTsKLSAgICAgICAgY2FzZSAiY2hlY2ti
b3giOgotICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImNoZWNrYm94IiwgaWQ6IHRoaXMuX2lk
LCBsYWJlbDogdGhpcy5fbGFiZWwsIGNoZWNrZWQ6ICEhdGhpcy5fY2hlY2tlZCwgZW5hYmxlZDog
IXRoaXMuX2Rpc2FibGVkIH07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51SXRlbX0KLSAqIEBw
YXJhbSB0b3BMZXZlbE1lbnUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gbGFiZWwKLSAqIEBwYXJhbSB7
Ym9vbGVhbj19IGRpc2FibGVkCi0gKi8KLVdlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW0g
PSBmdW5jdGlvbih0b3BMZXZlbE1lbnUsIGxhYmVsLCBkaXNhYmxlZCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnVJdGVtLmNhbGwodGhpcywgdG9wTGV2ZWxNZW51LCAic3ViTWVudSIs
IGxhYmVsLCBkaXNhYmxlZCk7Ci0gICAgLyoqIEB0eXBlIHshQXJyYXkuPCFXZWJJbnNwZWN0b3Iu
Q29udGV4dE1lbnVJdGVtPn0gKi8KLSAgICB0aGlzLl9pdGVtcyA9IFtdOwotfQotCi1XZWJJbnNw
ZWN0b3IuQ29udGV4dFN1Yk1lbnVJdGVtLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gbGFiZWwKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD8pfSBoYW5kbGVy
Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gZGlzYWJsZWQKLSAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuQ29udGV4dE1lbnVJdGVtfQotICAgICAqLwotICAgIGFwcGVuZEl0ZW06IGZ1bmN0
aW9uKGxhYmVsLCBoYW5kbGVyLCBkaXNhYmxlZCkKLSAgICB7Ci0gICAgICAgIHZhciBpdGVtID0g
bmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudUl0ZW0odGhpcy5fY29udGV4dE1lbnUsICJpdGVt
IiwgbGFiZWwsIGRpc2FibGVkKTsKLSAgICAgICAgdGhpcy5fcHVzaEl0ZW0oaXRlbSk7Ci0gICAg
ICAgIHRoaXMuX2NvbnRleHRNZW51Ll9zZXRIYW5kbGVyKGl0ZW0uaWQoKSwgaGFuZGxlcik7Ci0g
ICAgICAgIHJldHVybiBpdGVtOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gbGFiZWwKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBkaXNhYmxlZAotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudUl0ZW19Ci0gICAgICovCi0gICAgYXBwZW5k
U3ViTWVudUl0ZW06IGZ1bmN0aW9uKGxhYmVsLCBkaXNhYmxlZCkKLSAgICB7Ci0gICAgICAgIHZh
ciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW0odGhpcy5fY29udGV4
dE1lbnUsIGxhYmVsLCBkaXNhYmxlZCk7Ci0gICAgICAgIHRoaXMuX3B1c2hJdGVtKGl0ZW0pOwot
ICAgICAgICByZXR1cm4gaXRlbTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHti
b29sZWFuPX0gZGlzYWJsZWQKLSAgICAgKi8KLSAgICBhcHBlbmRDaGVja2JveEl0ZW06IGZ1bmN0
aW9uKGxhYmVsLCBoYW5kbGVyLCBjaGVja2VkLCBkaXNhYmxlZCkKLSAgICB7Ci0gICAgICAgIHZh
ciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudUl0ZW0odGhpcy5fY29udGV4dE1l
bnUsICJjaGVja2JveCIsIGxhYmVsLCBkaXNhYmxlZCwgY2hlY2tlZCk7Ci0gICAgICAgIHRoaXMu
X3B1c2hJdGVtKGl0ZW0pOwotICAgICAgICB0aGlzLl9jb250ZXh0TWVudS5fc2V0SGFuZGxlcihp
dGVtLmlkKCksIGhhbmRsZXIpOwotICAgICAgICByZXR1cm4gaXRlbTsKLSAgICB9LAotCi0gICAg
YXBwZW5kU2VwYXJhdG9yOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5faXRl
bXMubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1NlcGFyYXRvciA9IHRydWU7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Db250ZXh0TWVu
dUl0ZW19IGl0ZW0KLSAgICAgKi8KLSAgICBfcHVzaEl0ZW06IGZ1bmN0aW9uKGl0ZW0pCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1NlcGFyYXRvcikgewotICAgICAgICAgICAgdGhp
cy5faXRlbXMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51SXRlbSh0aGlzLl9jb250
ZXh0TWVudSwgInNlcGFyYXRvciIpKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5n
U2VwYXJhdG9yOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2l0ZW1zLnB1c2goaXRlbSk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAg
aXNFbXB0eTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICF0aGlzLl9pdGVtcy5s
ZW5ndGg7Ci0gICAgfSwKLQotICAgIF9idWlsZERlc2NyaXB0b3I6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciByZXN1bHQgPSB7IHR5cGU6ICJzdWJNZW51IiwgbGFiZWw6IHRoaXMuX2xh
YmVsLCBlbmFibGVkOiAhdGhpcy5fZGlzYWJsZWQsIHN1Ykl0ZW1zOiBbXSB9OwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAg
cmVzdWx0LnN1Ykl0ZW1zLnB1c2godGhpcy5faXRlbXNbaV0uX2J1aWxkRGVzY3JpcHRvcigpKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnVJdGVtLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Db250ZXh0U3ViTWVudUl0ZW19Ci0gKi8KLVdl
Ykluc3BlY3Rvci5Db250ZXh0TWVudSA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgV2ViSW5zcGVj
dG9yLkNvbnRleHRTdWJNZW51SXRlbS5jYWxsKHRoaXMsIHRoaXMsICIiKTsKLSAgICB0aGlzLl9l
dmVudCA9IGV2ZW50OwotICAgIHRoaXMuX2hhbmRsZXJzID0ge307Ci0gICAgdGhpcy5faWQgPSAw
OwotfQotCi1XZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUucHJvdG90eXBlID0gewotICAgIG5leHRJ
ZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lkKys7Ci0gICAgfSwK
LQotICAgIHNob3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBtZW51T2JqZWN0ID0g
dGhpcy5fYnVpbGREZXNjcmlwdG9yKCk7Ci0KLSAgICAgICAgaWYgKG1lbnVPYmplY3QubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuX2NvbnRleHRNZW51ID0gdGhpczsKLSAgICAg
ICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zaG93Q29udGV4dE1lbnUodGhpcy5fZXZlbnQs
IG1lbnVPYmplY3QpOwotICAgICAgICAgICAgdGhpcy5fZXZlbnQuY29uc3VtZSgpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIHNob3dTb2Z0TWVudTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIG1lbnVPYmplY3QgPSB0aGlzLl9idWlsZERlc2NyaXB0b3IoKTsKLQotICAgICAgICBp
ZiAobWVudU9iamVjdC5sZW5ndGgpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5fY29udGV4
dE1lbnUgPSB0aGlzOwotICAgICAgICAgICAgdmFyIHNvZnRNZW51ID0gbmV3IFdlYkluc3BlY3Rv
ci5Tb2Z0Q29udGV4dE1lbnUobWVudU9iamVjdCk7Ci0gICAgICAgICAgICBzb2Z0TWVudS5zaG93
KHRoaXMuX2V2ZW50LCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9ldmVudC5jb25z
dW1lKCk7Ci0gICAgfSwKLQotICAgIF9zZXRIYW5kbGVyOiBmdW5jdGlvbihpZCwgaGFuZGxlcikK
LSAgICB7Ci0gICAgICAgIGlmIChoYW5kbGVyKQotICAgICAgICAgICAgdGhpcy5faGFuZGxlcnNb
aWRdID0gaGFuZGxlcjsKLSAgICB9LAotCi0gICAgX2J1aWxkRGVzY3JpcHRvcjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX2l0ZW1zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgcmVzdWx0LnB1c2go
dGhpcy5faXRlbXNbaV0uX2J1aWxkRGVzY3JpcHRvcigpKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9LAotCi0gICAgX2l0ZW1TZWxlY3RlZDogZnVuY3Rpb24oaWQpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5faGFuZGxlcnNbaWRdKQotICAgICAgICAgICAgdGhpcy5faGFuZGxlcnNb
aWRdLmNhbGwodGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0
fSB0YXJnZXQKLSAgICAgKi8KLSAgICBhcHBlbmRBcHBsaWNhYmxlSXRlbXM6IGZ1bmN0aW9uKHRh
cmdldCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgV2ViSW5zcGVjdG9yLkNv
bnRleHRNZW51Ll9wcm92aWRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBwcm92
aWRlciA9IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5fcHJvdmlkZXJzW2ldOwotICAgICAgICAg
ICAgdGhpcy5hcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIHByb3ZpZGVyLmFwcGVuZEFw
cGxpY2FibGVJdGVtcyh0aGlzLl9ldmVudCwgdGhpcywgdGFyZ2V0KTsKLSAgICAgICAgICAgIHRo
aXMuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuQ29udGV4dFN1Yk1lbnVJdGVtLnByb3RvdHlwZQotfQotCi0vKioKLSAq
IEBpbnRlcmZhY2UKLSAqLwotV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LlByb3ZpZGVyID0gZnVu
Y3Rpb24oKSB7IAotfQotCi1XZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUuUHJvdmlkZXIucHJvdG90
eXBlID0gewotICAgIC8qKiAKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVu
dX0gY29udGV4dE1lbnUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0Ci0gICAgICovCi0g
ICAgYXBwZW5kQXBwbGljYWJsZUl0ZW1zOiBmdW5jdGlvbihldmVudCwgY29udGV4dE1lbnUsIHRh
cmdldCkgeyB9Ci19Ci0KLS8qKgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUu
UHJvdmlkZXJ9IHByb3ZpZGVyCi0gKi8KLVdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5yZWdpc3Rl
clByb3ZpZGVyID0gZnVuY3Rpb24ocHJvdmlkZXIpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkNvbnRl
eHRNZW51Ll9wcm92aWRlcnMucHVzaChwcm92aWRlcik7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db250
ZXh0TWVudS5fcHJvdmlkZXJzID0gW107Ci0KLVdlYkluc3BlY3Rvci5jb250ZXh0TWVudUl0ZW1T
ZWxlY3RlZCA9IGZ1bmN0aW9uKGlkKQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuX2NvbnRleHRN
ZW51KQotICAgICAgICBXZWJJbnNwZWN0b3IuX2NvbnRleHRNZW51Ll9pdGVtU2VsZWN0ZWQoaWQp
OwotfQotCi1XZWJJbnNwZWN0b3IuY29udGV4dE1lbnVDbGVhcmVkID0gZnVuY3Rpb24oKQotewot
ICAgIC8vIEZJWE1FOiBVbmZvcnR1bmF0ZWx5LCBjb250ZXh0TWVudUNsZWFyZWQgaXMgaW52b2tl
ZCBiZXR3ZWVuIHNob3cgYW5kIGl0ZW0gc2VsZWN0ZWQKLSAgICAvLyBzbyB3ZSBjYW4ndCBkZWxl
dGUgbGFzdCBtZW51IG9iamVjdCBmcm9tIFdlYkluc3BlY3Rvci4gRml4IHRoZSBjb250cmFjdC4K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29va2ll
SXRlbXNWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJ
dGVtc1ZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDQxMmQuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJdGVtc1Zp
ZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKi8KLVdlYkluc3BlY3Rvci5Db29raWVJdGVtc1ZpZXcgPSBm
dW5jdGlvbih0cmVlRWxlbWVudCwgY29va2llRG9tYWluKQotewotICAgIFdlYkluc3BlY3Rvci5W
aWV3LmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygic3RvcmFn
ZS12aWV3Iik7Ci0KLSAgICB0aGlzLl9kZWxldGVCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0
YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRlbGV0ZSIpLCAiZGVsZXRlLXN0
b3JhZ2Utc3RhdHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5fZGVsZXRlQnV0dG9uLnZpc2libGUg
PSBmYWxzZTsKLSAgICB0aGlzLl9kZWxldGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl9kZWxldGVCdXR0b25DbGlja2VkLCB0aGlzKTsKLQotICAgIHRoaXMuX2NsZWFyQnV0
dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJDbGVhciIpLCAiY2xlYXItc3RvcmFnZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlz
Ll9jbGVhckJ1dHRvbi52aXNpYmxlID0gZmFsc2U7Ci0gICAgdGhpcy5fY2xlYXJCdXR0b24uYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9jbGVhckJ1dHRvbkNsaWNrZWQsIHRoaXMpOwot
Ci0gICAgdGhpcy5fcmVmcmVzaEJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0
dG9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVmcmVzaCIpLCAicmVmcmVzaC1zdG9yYWdlLXN0
YXR1cy1iYXItaXRlbSIpOwotICAgIHRoaXMuX3JlZnJlc2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCB0aGlzLl9yZWZyZXNoQnV0dG9uQ2xpY2tlZCwgdGhpcyk7Ci0KLSAgICB0aGlz
Ll90cmVlRWxlbWVudCA9IHRyZWVFbGVtZW50OwotICAgIHRoaXMuX2Nvb2tpZURvbWFpbiA9IGNv
b2tpZURvbWFpbjsKLQotICAgIHRoaXMuX2VtcHR5VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRW1w
dHlWaWV3KFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGhpcyBzaXRlIGhhcyBubyBjb29raWVzLiIp
KTsKLSAgICB0aGlzLl9lbXB0eVZpZXcuc2hvdyh0aGlzLmVsZW1lbnQpOwotCi0gICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnUu
YmluZCh0aGlzKSwgdHJ1ZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db29raWVJdGVtc1ZpZXcucHJv
dG90eXBlID0gewotICAgIHN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gW3RoaXMuX3JlZnJlc2hCdXR0b24uZWxlbWVudCwgdGhpcy5fY2xlYXJCdXR0b24u
ZWxlbWVudCwgdGhpcy5fZGVsZXRlQnV0dG9uLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICB3YXNT
aG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlKCk7Ci0gICAgfSwK
LQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9kZWxldGVC
dXR0b24udmlzaWJsZSA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBfdXBkYXRlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuQ29va2llcy5nZXRDb29raWVzQXN5bmModGhp
cy5fdXBkYXRlV2l0aENvb2tpZXMuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5Db29raWU+fSBhbGxDb29raWVzCi0gICAg
ICogQHBhcmFtIHtib29sZWFufSBpc0FkdmFuY2VkCi0gICAgICovCi0gICAgX3VwZGF0ZVdpdGhD
b29raWVzOiBmdW5jdGlvbihhbGxDb29raWVzLCBpc0FkdmFuY2VkKQotICAgIHsKLSAgICAgICAg
dGhpcy5fY29va2llcyA9IGlzQWR2YW5jZWQgPyB0aGlzLl9maWx0ZXJDb29raWVzRm9yRG9tYWlu
KGFsbENvb2tpZXMpIDogYWxsQ29va2llczsKLQotICAgICAgICBpZiAoIXRoaXMuX2Nvb2tpZXMu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIHNob3cuCi0gICAgICAgICAgICB0
aGlzLl9lbXB0eVZpZXcuc2hvdyh0aGlzLmVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5fY2xl
YXJCdXR0b24udmlzaWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5fZGVsZXRlQnV0dG9u
LnZpc2libGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9jb29raWVzVGFibGUpCi0g
ICAgICAgICAgICAgICAgdGhpcy5fY29va2llc1RhYmxlLmRldGFjaCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9jb29raWVzVGFibGUpCi0g
ICAgICAgICAgICB0aGlzLl9jb29raWVzVGFibGUgPSBpc0FkdmFuY2VkID8gbmV3IFdlYkluc3Bl
Y3Rvci5Db29raWVzVGFibGUoZmFsc2UsIHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpLCB0aGlzLl9z
aG93RGVsZXRlQnV0dG9uLmJpbmQodGhpcykpIDogbmV3IFdlYkluc3BlY3Rvci5TaW1wbGVDb29r
aWVzVGFibGUoKTsKLQotICAgICAgICB0aGlzLl9jb29raWVzVGFibGUuc2V0Q29va2llcyh0aGlz
Ll9jb29raWVzKTsKLSAgICAgICAgdGhpcy5fZW1wdHlWaWV3LmRldGFjaCgpOwotICAgICAgICB0
aGlzLl9jb29raWVzVGFibGUuc2hvdyh0aGlzLmVsZW1lbnQpOwotICAgICAgICBpZiAoaXNBZHZh
bmNlZCkgewotICAgICAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnQuc3VidGl0bGUgPSBTdHJpbmcu
c3ByaW50ZihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVkIGNvb2tpZXMgKCVzKSIpLCB0aGlzLl9j
b29raWVzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlz
Ll90b3RhbFNpemUpKTsKLSAgICAgICAgICAgIHRoaXMuX2NsZWFyQnV0dG9uLnZpc2libGUgPSB0
cnVlOwotICAgICAgICAgICAgdGhpcy5fZGVsZXRlQnV0dG9uLnZpc2libGUgPSAhIXRoaXMuX2Nv
b2tpZXNUYWJsZS5zZWxlY3RlZENvb2tpZSgpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5Db29raWU+fSBhbGxDb29raWVz
Ci0gICAgICovCi0gICAgX2ZpbHRlckNvb2tpZXNGb3JEb21haW46IGZ1bmN0aW9uKGFsbENvb2tp
ZXMpCi0gICAgewotICAgICAgICB2YXIgY29va2llcyA9IFtdOwotICAgICAgICB2YXIgcmVzb3Vy
Y2VVUkxzRm9yRG9jdW1lbnRVUkwgPSBbXTsKLSAgICAgICAgdGhpcy5fdG90YWxTaXplID0gMDsK
LQotICAgICAgICBmdW5jdGlvbiBwb3B1bGF0ZVJlc291cmNlc0ZvckRvY3VtZW50cyhyZXNvdXJj
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHVybCA9IHJlc291cmNlLmRvY3VtZW50VVJM
LmFzUGFyc2VkVVJMKCk7Ci0gICAgICAgICAgICBpZiAodXJsICYmIHVybC5ob3N0ID09IHRoaXMu
X2Nvb2tpZURvbWFpbikKLSAgICAgICAgICAgICAgICByZXNvdXJjZVVSTHNGb3JEb2N1bWVudFVS
TC5wdXNoKHJlc291cmNlLnVybCk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmZv
ckFsbFJlc291cmNlcyhwb3B1bGF0ZVJlc291cmNlc0ZvckRvY3VtZW50cy5iaW5kKHRoaXMpKTsK
LQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbENvb2tpZXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBwdXNoZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBzaXplID0g
YWxsQ29va2llc1tpXS5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJl
c291cmNlVVJMc0ZvckRvY3VtZW50VVJMLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHJlc291cmNlVVJMID0gcmVzb3VyY2VVUkxzRm9yRG9jdW1lbnRVUkxbal07Ci0gICAgICAg
ICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Db29raWVzLmNvb2tpZU1hdGNoZXNSZXNvdXJjZVVS
TChhbGxDb29raWVzW2ldLCByZXNvdXJjZVVSTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fdG90YWxTaXplICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHVzaGVkKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY29va2llcy5wdXNoKGFsbENvb2tpZXNbaV0pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBjb29raWVzOwotICAgIH0sCi0KLSAgICBjbGVhcjogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fY29va2llc1RhYmxlLmNsZWFyKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0
ZSgpOwotICAgIH0sCi0KLSAgICBfY2xlYXJCdXR0b25DbGlja2VkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLmNsZWFyKCk7Ci0gICAgfSwKLQotICAgIF9zaG93RGVsZXRlQnV0dG9u
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9kZWxldGVCdXR0b24udmlzaWJsZSA9
IHRydWU7Ci0gICAgfSwKLQotICAgIF9kZWxldGVCdXR0b25DbGlja2VkOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB2YXIgc2VsZWN0ZWRDb29raWUgPSB0aGlzLl9jb29raWVzVGFibGUuc2Vs
ZWN0ZWRDb29raWUoKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkQ29va2llKSB7Ci0gICAgICAgICAg
ICBzZWxlY3RlZENvb2tpZS5yZW1vdmUoKTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoQnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGUoKTsKLSAgICB9LAotCi0gICAgX2Nv
bnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY29v
a2llcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
SXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlZnJlc2giKSwgdGhpcy5fdXBkYXRlLmJpbmQo
dGhpcykpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgICAgICB9Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKi8K
LVdlYkluc3BlY3Rvci5TaW1wbGVDb29raWVzVGFibGUgPSBmdW5jdGlvbigpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLQotICAgIHZhciBjb2x1bW5zID0gWwotICAgICAg
ICB7dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTmFtZSIpfSwKLSAgICAgICAge3RpdGxl
OiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVlIil9Ci0gICAgXTsKLQotICAgIHRoaXMuX2Rh
dGFHcmlkID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZChjb2x1bW5zKTsKLSAgICB0aGlzLl9k
YXRhR3JpZC5hdXRvU2l6ZUNvbHVtbnMoMjAsIDgwKTsKLSAgICB0aGlzLl9kYXRhR3JpZC5zaG93
KHRoaXMuZWxlbWVudCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TaW1wbGVDb29raWVzVGFibGUucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5D
b29raWU+fSBjb29raWVzCi0gICAgICovCi0gICAgc2V0Q29va2llczogZnVuY3Rpb24oY29va2ll
cykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLnJvb3ROb2RlKCkucmVtb3ZlQ2hpbGRy
ZW4oKTsKLSAgICAgICAgdmFyIGFkZGVkQ29va2llcyA9IHt9OwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhZGRlZENv
b2tpZXNbY29va2llc1tpXS5uYW1lKCldKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgYWRkZWRDb29raWVzW2Nvb2tpZXNbaV0ubmFtZSgpXSA9IHRydWU7Ci0gICAgICAg
ICAgICB2YXIgZGF0YSA9IHt9OwotICAgICAgICAgICAgZGF0YVswXSA9IGNvb2tpZXNbaV0ubmFt
ZSgpOwotICAgICAgICAgICAgZGF0YVsxXSA9IGNvb2tpZXNbaV0udmFsdWUoKTsKLQotICAgICAg
ICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZShkYXRhLCBmYWxz
ZSk7Ci0gICAgICAgICAgICBub2RlLnNlbGVjdGFibGUgPSB0cnVlOwotICAgICAgICAgICAgdGhp
cy5fZGF0YUdyaWQucm9vdE5vZGUoKS5hcHBlbmRDaGlsZChub2RlKTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLl9kYXRhR3JpZC5yb290Tm9kZSgpLmNoaWxkcmVuWzBdLnNlbGVjdGVkID0gdHJ1
ZTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29va2ll
UGFyc2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVQYXJz
ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNmJiMDMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVQYXJzZXIuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw0NjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIElkZWFsbHksIHdlIHdvdWxkIHJlbHkgb24g
cGxhdGZvcm0gc3VwcG9ydCBmb3IgcGFyc2luZyBhIGNvb2tpZSwgc2luY2UKLS8vIHRoaXMgd291
bGQgc2F2ZSB1cyBmcm9tIGFueSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jeS4gSG93ZXZlciwgZXhw
b3NpbmcKLS8vIHBsYXRmb3JtIGNvb2tpZSBwYXJzaW5nIGxvZ2ljIHdvdWxkIHJlcXVpcmUgcXVp
dGUgYSBiaXQgb2YgYWRkaXRpb25hbAotLy8gcGx1bWJpbmcsIGFuZCBhdCBsZWFzdCBzb21lIHBs
YXRmb3JtcyBsYWNrIHN1cHBvcnQgZm9yIHBhcnNpbmcgQ29va2llLAotLy8gd2hpY2ggaXMgaW4g
YSBmb3JtYXQgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gU2V0LUNvb2tpZSBhbmQgaXMgbm9ybWFs
bHkKLS8vIG9ubHkgcmVxdWlyZWQgb24gdGhlIHNlcnZlciBzaWRlLgotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuQ29va2llUGFyc2VyID0gZnVuY3Rpb24oKQotewot
fQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IGtleQotICogQHBh
cmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZQotICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9u
Ci0gKi8KLVdlYkluc3BlY3Rvci5Db29raWVQYXJzZXIuS2V5VmFsdWUgPSBmdW5jdGlvbihrZXks
IHZhbHVlLCBwb3NpdGlvbikKLXsKLSAgICB0aGlzLmtleSA9IGtleTsKLSAgICB0aGlzLnZhbHVl
ID0gdmFsdWU7Ci0gICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi1XZWJJbnNwZWN0
b3IuQ29va2llUGFyc2VyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtB
cnJheS48V2ViSW5zcGVjdG9yLkNvb2tpZT59Ci0gICAgICovCi0gICAgY29va2llczogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Nvb2tpZXM7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gY29va2llSGVhZGVyCi0gICAg
ICogQHJldHVybiB7P0FycmF5LjxXZWJJbnNwZWN0b3IuQ29va2llPn0KLSAgICAgKi8KLSAgICBw
YXJzZUNvb2tpZTogZnVuY3Rpb24oY29va2llSGVhZGVyKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLl9pbml0aWFsaXplKGNvb2tpZUhlYWRlcikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsK
LQotICAgICAgICBmb3IgKHZhciBrdiA9IHRoaXMuX2V4dHJhY3RLZXlWYWx1ZSgpOyBrdjsga3Yg
PSB0aGlzLl9leHRyYWN0S2V5VmFsdWUoKSkgewotICAgICAgICAgICAgaWYgKGt2LmtleS5jaGFy
QXQoMCkgPT09ICIkIiAmJiB0aGlzLl9sYXN0Q29va2llKQotICAgICAgICAgICAgICAgIHRoaXMu
X2xhc3RDb29raWUuYWRkQXR0cmlidXRlKGt2LmtleS5zbGljZSgxKSwga3YudmFsdWUpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoa3Yua2V5LnRvTG93ZXJDYXNlKCkgIT09ICIkdmVyc2lvbiIgJiYg
dHlwZW9mIGt2LnZhbHVlID09PSAic3RyaW5nIikKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGRD
b29raWUoa3YsIFdlYkluc3BlY3Rvci5Db29raWUuVHlwZS5SZXF1ZXN0KTsKLSAgICAgICAgICAg
IHRoaXMuX2FkdmFuY2VBbmRDaGVja0Nvb2tpZURlbGltaXRlcigpOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMuX2ZsdXNoQ29va2llKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb29raWVzOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHNldENv
b2tpZUhlYWRlcgotICAgICAqIEByZXR1cm4gez9BcnJheS48V2ViSW5zcGVjdG9yLkNvb2tpZT59
Ci0gICAgICovCi0gICAgcGFyc2VTZXRDb29raWU6IGZ1bmN0aW9uKHNldENvb2tpZUhlYWRlcikK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZShzZXRDb29raWVIZWFkZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZvciAodmFyIGt2ID0gdGhpcy5fZXh0
cmFjdEtleVZhbHVlKCk7IGt2OyBrdiA9IHRoaXMuX2V4dHJhY3RLZXlWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5fbGFzdENvb2tpZSkKLSAgICAgICAgICAgICAgICB0aGlzLl9sYXN0
Q29va2llLmFkZEF0dHJpYnV0ZShrdi5rZXksIGt2LnZhbHVlKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB0aGlzLl9hZGRDb29raWUoa3YsIFdlYkluc3BlY3Rvci5Db29raWUu
VHlwZS5SZXNwb25zZSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fYWR2YW5jZUFuZENoZWNrQ29v
a2llRGVsaW1pdGVyKCkpCi0gICAgICAgICAgICAgICAgdGhpcy5fZmx1c2hDb29raWUoKTsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLl9mbHVzaENvb2tpZSgpOwotICAgICAgICByZXR1cm4gdGhp
cy5fY29va2llczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd8dW5k
ZWZpbmVkfSBoZWFkZXJWYWx1ZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0g
ICAgX2luaXRpYWxpemU6IGZ1bmN0aW9uKGhlYWRlclZhbHVlKQotICAgIHsKLSAgICAgICAgdGhp
cy5faW5wdXQgPSBoZWFkZXJWYWx1ZTsKLSAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXJWYWx1ZSAh
PT0gInN0cmluZyIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRoaXMuX2Nv
b2tpZXMgPSBbXTsKLSAgICAgICAgdGhpcy5fbGFzdENvb2tpZSA9IG51bGw7Ci0gICAgICAgIHRo
aXMuX29yaWdpbmFsSW5wdXRMZW5ndGggPSB0aGlzLl9pbnB1dC5sZW5ndGg7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBfZmx1c2hDb29raWU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLl9sYXN0Q29va2llKQotICAgICAgICAgICAgdGhpcy5fbGFzdENv
b2tpZS5zZXRTaXplKHRoaXMuX29yaWdpbmFsSW5wdXRMZW5ndGggLSB0aGlzLl9pbnB1dC5sZW5n
dGggLSB0aGlzLl9sYXN0Q29va2llUG9zaXRpb24pOwotICAgICAgICB0aGlzLl9sYXN0Q29va2ll
ID0gbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LkNvb2tpZVBhcnNlci5LZXlWYWx1ZX0KLSAgICAgKi8KLSAgICBfZXh0cmFjdEtleVZhbHVlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2lucHV0IHx8ICF0aGlzLl9pbnB1
dC5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgLy8gTm90ZTogUkZD
cyBvZmZlciBhbiBvcHRpb24gZm9yIHF1b3RlZCB2YWx1ZXMgdGhhdCBtYXkgY29udGFpbiBjb21t
YXMgYW5kIHNlbWljb2xvbnMuCi0gICAgICAgIC8vIE1hbnkgYnJvd3NlcnMvcGxhdGZvcm1zIGRv
IG5vdCBzdXBwb3J0IHRoaXMsIGhvd2V2ZXIgKHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzE2Njk5
Ci0gICAgICAgIC8vIGFuZCBodHRwOi8vY3JidWcuY29tLzEyMzYxKS4gVGhlIGxvZ2ljIGJlbG93
IG1hdGNoZXMgbGF0ZXN0IHZlcnNpb25zIG9mIElFLCBGaXJlZm94LAotICAgICAgICAvLyBDaHJv
bWUgYW5kIFNhZmFyaSBvbiBzb21lIG9sZCBwbGF0Zm9ybXMuIFRoZSBsYXRlc3QgdmVyc2lvbiBv
ZiBTYWZhcmkgc3VwcG9ydHMgcXVvdGVkCi0gICAgICAgIC8vIGNvb2tpZSB2YWx1ZXMsIHRob3Vn
aC4KLSAgICAgICAgdmFyIGtleVZhbHVlTWF0Y2ggPSAvXlsgXHRdKihbXlxzPTtdKylbIFx0XSoo
Pzo9WyBcdF0qKFteO1xuXSopKT8vLmV4ZWModGhpcy5faW5wdXQpOwotICAgICAgICBpZiAoIWtl
eVZhbHVlTWF0Y2gpIHsKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGYWlsZWQgcGFyc2luZyBj
b29raWUgaGVhZGVyIGJlZm9yZTogIiArIHRoaXMuX2lucHV0KTsKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0
b3IuQ29va2llUGFyc2VyLktleVZhbHVlKGtleVZhbHVlTWF0Y2hbMV0sIGtleVZhbHVlTWF0Y2hb
Ml0gJiYga2V5VmFsdWVNYXRjaFsyXS50cmltKCksIHRoaXMuX29yaWdpbmFsSW5wdXRMZW5ndGgg
LSB0aGlzLl9pbnB1dC5sZW5ndGgpOwotICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0
LnNsaWNlKGtleVZhbHVlTWF0Y2hbMF0ubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAg
ICBfYWR2YW5jZUFuZENoZWNrQ29va2llRGVsaW1pdGVyOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgbWF0Y2ggPSAvXlxzKltcbjtdXHMqLy5leGVjKHRoaXMuX2lucHV0KTsKLSAgICAg
ICAgaWYgKCFtYXRjaCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdGhpcy5f
aW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpOwotICAgICAgICByZXR1
cm4gbWF0Y2hbMF0ubWF0Y2goIlxuIikgIT09IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Db29raWVQYXJzZXIuS2V5VmFsdWV9IGtleVZhbHVl
Ci0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkNvb2tpZS5UeXBlfSB0eXBlCi0gICAgICov
Ci0gICAgX2FkZENvb2tpZTogZnVuY3Rpb24oa2V5VmFsdWUsIHR5cGUpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fbGFzdENvb2tpZSkKLSAgICAgICAgICAgIHRoaXMuX2xhc3RDb29raWUuc2V0
U2l6ZShrZXlWYWx1ZS5wb3NpdGlvbiAtIHRoaXMuX2xhc3RDb29raWVQb3NpdGlvbik7Ci0gICAg
ICAgIC8vIE1vemlsbGEgYnVnIDE2OTA5MTogTW96aWxsYSwgSUUgYW5kIENocm9tZSB0cmVhdCBz
aW5nbGUgdG9rZW4gKHcvbyAiPSIpIGFzCi0gICAgICAgIC8vIHNwZWNpZnlpbmcgYSB2YWx1ZSBm
b3IgYSBjb29raWUgd2l0aCBlbXB0eSBuYW1lLgotICAgICAgICB0aGlzLl9sYXN0Q29va2llID0g
dHlwZW9mIGtleVZhbHVlLnZhbHVlID09PSAic3RyaW5nIiA/IG5ldyBXZWJJbnNwZWN0b3IuQ29v
a2llKGtleVZhbHVlLmtleSwga2V5VmFsdWUudmFsdWUsIHR5cGUpIDoKLSAgICAgICAgICAgIG5l
dyBXZWJJbnNwZWN0b3IuQ29va2llKCIiLCBrZXlWYWx1ZS5rZXksIHR5cGUpOwotICAgICAgICB0
aGlzLl9sYXN0Q29va2llUG9zaXRpb24gPSBrZXlWYWx1ZS5wb3NpdGlvbjsKLSAgICAgICAgdGhp
cy5fY29va2llcy5wdXNoKHRoaXMuX2xhc3RDb29raWUpOwotICAgIH0KLX07Ci0KLS8qKgotICog
QHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBoZWFkZXIKLSAqIEByZXR1cm4gez9BcnJheS48V2Vi
SW5zcGVjdG9yLkNvb2tpZT59Ci0gKi8KLVdlYkluc3BlY3Rvci5Db29raWVQYXJzZXIucGFyc2VD
b29raWUgPSBmdW5jdGlvbihoZWFkZXIpCi17Ci0gICAgcmV0dXJuIChuZXcgV2ViSW5zcGVjdG9y
LkNvb2tpZVBhcnNlcigpKS5wYXJzZUNvb2tpZShoZWFkZXIpOwotfQotCi0vKioKLSAqIEBwYXJh
bSB7c3RyaW5nfHVuZGVmaW5lZH0gaGVhZGVyCi0gKiBAcmV0dXJuIHs/QXJyYXkuPFdlYkluc3Bl
Y3Rvci5Db29raWU+fQotICovCi1XZWJJbnNwZWN0b3IuQ29va2llUGFyc2VyLnBhcnNlU2V0Q29v
a2llID0gZnVuY3Rpb24oaGVhZGVyKQotewotICAgIHJldHVybiAobmV3IFdlYkluc3BlY3Rvci5D
b29raWVQYXJzZXIoKSkucGFyc2VTZXRDb29raWUoaGVhZGVyKTsKLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gKiBAcGFyYW0ge3N0cmluZ30gdmFs
dWUKLSAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5Db29raWUuVHlwZX0gdHlwZQotICovCi1XZWJJ
bnNwZWN0b3IuQ29va2llID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIHR5cGUpCi17Ci0gICAgdGhp
cy5fbmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKLSAgICB0aGlzLl90eXBl
ID0gdHlwZTsKLSAgICB0aGlzLl9hdHRyaWJ1dGVzID0ge307Ci19Ci0KLVdlYkluc3BlY3Rvci5D
b29raWUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAg
ICAgKi8KLSAgICBuYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
bmFtZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAq
LwotICAgIHZhbHVlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdmFs
dWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuQ29v
a2llLlR5cGV9Ci0gICAgICovCi0gICAgdHlwZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3R5cGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jv
b2xlYW59Ci0gICAgICovCi0gICAgaHR0cE9ubHk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAiaHR0cG9ubHkiIGluIHRoaXMuX2F0dHJpYnV0ZXM7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgc2VjdXJlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gInNlY3VyZSIgaW4gdGhpcy5fYXR0cmlidXRlczsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAg
ICBzZXNzaW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBSRkMgMjk2NSBzdWdnZXN0
cyB1c2luZyBEaXNjYXJkIGF0dHJpYnV0ZSB0byBtYXJrIHNlc3Npb24gY29va2llcywgYnV0IHRo
aXMgZG9lcyBub3Qgc2VlbSB0byBiZSB3aWRlbHkgdXNlZC4KLSAgICAgICAgLy8gQ2hlY2sgZm9y
IGFic2VuY2Ugb2YgZXhwbGljaXRseSBtYXgtYWdlIG9yIGV4cGlyeSBkYXRlIGluc3RlYWQuCi0g
ICAgICAgIHJldHVybiAhKCJleHBpcmVzIiBpbiB0aGlzLl9hdHRyaWJ1dGVzIHx8ICJtYXgtYWdl
IiBpbiB0aGlzLl9hdHRyaWJ1dGVzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7c3RyaW5nfQotICAgICAqLwotICAgIHBhdGg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzWyJwYXRoIl07Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBwb3J0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fYXR0cmlidXRlc1sicG9ydCJdOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZG9tYWluOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYXR0cmlidXRlc1siZG9tYWluIl07
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAg
ICBleHBpcmVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYXR0cmli
dXRlc1siZXhwaXJlcyJdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJp
bmd9Ci0gICAgICovCi0gICAgbWF4QWdlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fYXR0cmlidXRlc1sibWF4LWFnZSJdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgc2l6ZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBzaXplCi0gICAgICovCi0gICAgc2V0U2l6ZTogZnVuY3Rpb24oc2l6ZSkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX3NpemUgPSBzaXplOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtEYXRlfQotICAgICAqLwotICAgIGV4cGlyZXNEYXRlOiBmdW5jdGlvbihy
ZXF1ZXN0RGF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIFJGQyA2MjY1IGluZGljYXRlcyB0aGF0IHRo
ZSBtYXgtYWdlIGF0dHJpYnV0ZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGV4cGlyZXMgYXR0
cmlidXRlCi0gICAgICAgIGlmICh0aGlzLm1heEFnZSgpKSB7Ci0gICAgICAgICAgICB2YXIgdGFy
Z2V0RGF0ZSA9IHJlcXVlc3REYXRlID09PSBudWxsID8gbmV3IERhdGUoKSA6IHJlcXVlc3REYXRl
OwotICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpICsgMTAw
MCAqIHRoaXMubWF4QWdlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuZXhwaXJl
cygpKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZXhwaXJlcygpKTsKLQotICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7T2Jq
ZWN0fQotICAgICAqLwotICAgIGF0dHJpYnV0ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30ga2V5IAotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgCi0gICAgICov
Ci0gICAgYWRkQXR0cmlidXRlOiBmdW5jdGlvbihrZXksIHZhbHVlKQotICAgIHsKLSAgICAgICAg
dGhpcy5fYXR0cmlidXRlc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9jb2wuRXJyb3IpPX0gY2FsbGJh
Y2sKLSAgICAgKi8KLSAgICByZW1vdmU6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAg
ICAgUGFnZUFnZW50LmRlbGV0ZUNvb2tpZSh0aGlzLm5hbWUoKSwgKHRoaXMuc2VjdXJlKCkgPyAi
aHR0cHM6Ly8iIDogImh0dHA6Ly8iKSArIHRoaXMuZG9tYWluKCkgKyB0aGlzLnBhdGgoKSwgY2Fs
bGJhY2spOwotICAgIH0KLX0KLQotLyoqCi0gKiBAZW51bSB7bnVtYmVyfQotICovCi1XZWJJbnNw
ZWN0b3IuQ29va2llLlR5cGUgPSB7Ci0gICAgUmVxdWVzdDogMCwKLSAgICBSZXNwb25zZTogMQot
fTsKLQotV2ViSW5zcGVjdG9yLkNvb2tpZXMgPSB7fQotCi0vKioKLSAqIEBwYXJhbSB7ZnVuY3Rp
b24oIUFycmF5LjwhV2ViSW5zcGVjdG9yLkNvb2tpZT4sIGJvb2xlYW4pfSBjYWxsYmFjawotICov
Ci1XZWJJbnNwZWN0b3IuQ29va2llcy5nZXRDb29raWVzQXN5bmMgPSBmdW5jdGlvbihjYWxsYmFj
aykKLXsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IgCi0g
ICAgICogQHBhcmFtIHtBcnJheS48UGFnZUFnZW50LkNvb2tpZT59IGNvb2tpZXMKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gY29va2llc1N0cmluZwotICAgICAqLyAKLSAgICBmdW5jdGlvbiBteWNh
bGxiYWNrKGVycm9yLCBjb29raWVzLCBjb29raWVzU3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYg
KGVycm9yKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoY29va2llc1N0cmluZykK
LSAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5Db29raWVzLmJ1aWxkQ29va2llc0Zy
b21TdHJpbmcoY29va2llc1N0cmluZyksIGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbGJhY2soY29va2llcy5tYXAoV2ViSW5zcGVjdG9yLkNvb2tpZXMuYnVpbGRDb29raWVQ
cm90b2NvbE9iamVjdCksIHRydWUpOwotICAgIH0KLQotICAgIFBhZ2VBZ2VudC5nZXRDb29raWVz
KG15Y2FsbGJhY2spOwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSByYXdDb29raWVTdHJp
bmcgCi0gKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuQ29va2llPn0KLSAqLwotV2Vi
SW5zcGVjdG9yLkNvb2tpZXMuYnVpbGRDb29raWVzRnJvbVN0cmluZyA9IGZ1bmN0aW9uKHJhd0Nv
b2tpZVN0cmluZykKLXsKLSAgICB2YXIgcmF3Q29va2llcyA9IHJhd0Nvb2tpZVN0cmluZy5zcGxp
dCgvO1xzKi8pOwotICAgIHZhciBjb29raWVzID0gW107Ci0KLSAgICBpZiAoISgvXlxzKiQvLnRl
c3QocmF3Q29va2llU3RyaW5nKSkpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdD
b29raWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcmF3Q29va2llID0gcmF3Q29v
a2llc1tpXTsKLSAgICAgICAgICAgIHZhciBkZWxpbUluZGV4ID0gcmF3Q29va2llLmluZGV4T2Yo
Ij0iKTsKLSAgICAgICAgICAgIHZhciBuYW1lID0gcmF3Q29va2llLnN1YnN0cmluZygwLCBkZWxp
bUluZGV4KTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJhd0Nvb2tpZS5zdWJzdHJpbmcoZGVs
aW1JbmRleCArIDEpOwotICAgICAgICAgICAgdmFyIHNpemUgPSBuYW1lLmxlbmd0aCArIHZhbHVl
Lmxlbmd0aDsKLSAgICAgICAgICAgIHZhciBjb29raWUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvb2tp
ZShuYW1lLCB2YWx1ZSwgbnVsbCk7Ci0gICAgICAgICAgICBjb29raWUuc2V0U2l6ZShzaXplKTsK
LSAgICAgICAgICAgIGNvb2tpZXMucHVzaChjb29raWUpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGNvb2tpZXM7Ci19Ci0KLS8qKgotICogQHBhcmFtIHshUGFnZUFnZW50LkNvb2tp
ZX0gcHJvdG9jb2xDb29raWUKLSAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3IuQ29va2llfQotICov
Ci1XZWJJbnNwZWN0b3IuQ29va2llcy5idWlsZENvb2tpZVByb3RvY29sT2JqZWN0ID0gZnVuY3Rp
b24ocHJvdG9jb2xDb29raWUpCi17Ci0gICAgdmFyIGNvb2tpZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q29va2llKHByb3RvY29sQ29va2llLm5hbWUsIHByb3RvY29sQ29va2llLnZhbHVlLCBudWxsKTsK
LSAgICBjb29raWUuYWRkQXR0cmlidXRlKCJkb21haW4iLCBwcm90b2NvbENvb2tpZVsiZG9tYWlu
Il0pOwotICAgIGNvb2tpZS5hZGRBdHRyaWJ1dGUoInBhdGgiLCBwcm90b2NvbENvb2tpZVsicGF0
aCJdKTsKLSAgICBjb29raWUuYWRkQXR0cmlidXRlKCJwb3J0IiwgcHJvdG9jb2xDb29raWVbInBv
cnQiXSk7Ci0gICAgaWYgKHByb3RvY29sQ29va2llWyJleHBpcmVzIl0pCi0gICAgICAgIGNvb2tp
ZS5hZGRBdHRyaWJ1dGUoImV4cGlyZXMiLCBwcm90b2NvbENvb2tpZVsiZXhwaXJlcyJdKTsKLSAg
ICBpZiAocHJvdG9jb2xDb29raWVbImh0dHBPbmx5Il0pCi0gICAgICAgIGNvb2tpZS5hZGRBdHRy
aWJ1dGUoImh0dHBPbmx5Iik7Ci0gICAgaWYgKHByb3RvY29sQ29va2llWyJzZWN1cmUiXSkKLSAg
ICAgICAgY29va2llLmFkZEF0dHJpYnV0ZSgic2VjdXJlIik7Ci0gICAgY29va2llLnNldFNpemUo
cHJvdG9jb2xDb29raWVbInNpemUiXSk7Ci0gICAgcmV0dXJuIGNvb2tpZTsKLX0KLQotLyoqCi0g
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db29raWV9IGNvb2tpZSAKLSAqIEBwYXJhbSB7c3RyaW5n
fSByZXNvdXJjZVVSTAotICovCi1XZWJJbnNwZWN0b3IuQ29va2llcy5jb29raWVNYXRjaGVzUmVz
b3VyY2VVUkwgPSBmdW5jdGlvbihjb29raWUsIHJlc291cmNlVVJMKQotewotICAgIHZhciB1cmwg
PSByZXNvdXJjZVVSTC5hc1BhcnNlZFVSTCgpOwotICAgIGlmICghdXJsIHx8ICFXZWJJbnNwZWN0
b3IuQ29va2llcy5jb29raWVEb21haW5NYXRjaGVzUmVzb3VyY2VEb21haW4oY29va2llLmRvbWFp
bigpLCB1cmwuaG9zdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKHVybC5w
YXRoLnN0YXJ0c1dpdGgoY29va2llLnBhdGgoKSkKLSAgICAgICAgJiYgKCFjb29raWUucG9ydCgp
IHx8IHVybC5wb3J0ID09IGNvb2tpZS5wb3J0KCkpCi0gICAgICAgICYmICghY29va2llLnNlY3Vy
ZSgpIHx8IHVybC5zY2hlbWUgPT09ICJodHRwcyIpKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0
cmluZ30gY29va2llRG9tYWluIAotICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlRG9tYWluCi0g
Ki8KLVdlYkluc3BlY3Rvci5Db29raWVzLmNvb2tpZURvbWFpbk1hdGNoZXNSZXNvdXJjZURvbWFp
biA9IGZ1bmN0aW9uKGNvb2tpZURvbWFpbiwgcmVzb3VyY2VEb21haW4pCi17Ci0gICAgaWYgKGNv
b2tpZURvbWFpbi5jaGFyQXQoMCkgIT09ICcuJykKLSAgICAgICAgcmV0dXJuIHJlc291cmNlRG9t
YWluID09PSBjb29raWVEb21haW47Ci0gICAgcmV0dXJuICEhcmVzb3VyY2VEb21haW4ubWF0Y2go
bmV3IFJlZ0V4cCgiXihbXlxcLl0rXFwuKSoiICsgY29va2llRG9tYWluLnN1YnN0cmluZygxKS5l
c2NhcGVGb3JSZWdFeHAoKSArICIkIiwgImkiKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nvb2tpZXNUYWJsZS5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29va2llc1RhYmxlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkZjA3NTE0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29va2llc1RhYmxlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFyYW0ge2Jvb2xl
YW59IGV4cGFuZGFibGUKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKT19IHJlZnJlc2hDYWxsYmFjawot
ICogQHBhcmFtIHtmdW5jdGlvbigpPX0gc2VsZWN0ZWRDYWxsYmFjawotICovCi1XZWJJbnNwZWN0
b3IuQ29va2llc1RhYmxlID0gZnVuY3Rpb24oZXhwYW5kYWJsZSwgcmVmcmVzaENhbGxiYWNrLCBz
ZWxlY3RlZENhbGxiYWNrKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0g
ICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJmaWxsIjsKLQotICAgIHZhciByZWFkT25seSA9
IGV4cGFuZGFibGU7Ci0gICAgdGhpcy5fcmVmcmVzaENhbGxiYWNrID0gcmVmcmVzaENhbGxiYWNr
OwotCi0gICAgdmFyIGNvbHVtbnMgPSBbCi0gICAgICAgIHtpZDogIm5hbWUiLCB0aXRsZTogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJOYW1lIiksIHNvcnRhYmxlOiB0cnVlLCBkaXNjbG9zdXJlOiBl
eHBhbmRhYmxlLCBzb3J0OiBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuT3JkZXIuQXNjZW5kaW5nLCB3
aWR0aDogIjI0JSJ9LAotICAgICAgICB7aWQ6ICJ2YWx1ZSIsIHRpdGxlOiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlZhbHVlIiksIHNvcnRhYmxlOiB0cnVlLCB3aWR0aDogIjM0JSJ9LAotICAgICAg
ICB7aWQ6ICJkb21haW4iLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEb21haW4iKSwg
c29ydGFibGU6IHRydWUsIHdpZHRoOiAiNyUifSwKLSAgICAgICAge2lkOiAicGF0aCIsIHRpdGxl
OiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBhdGgiKSwgc29ydGFibGU6IHRydWUsIHdpZHRoOiAi
NyUifSwKLSAgICAgICAge2lkOiAiZXhwaXJlcyIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkV4cGlyZXMgLyBNYXgtQWdlIiksIHNvcnRhYmxlOiB0cnVlLCB3aWR0aDogIjclIn0sCi0g
ICAgICAgIHtpZDogInNpemUiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaXplIiks
IHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkFsaWduLlJpZ2h0
LCB3aWR0aDogIjclIn0sCi0gICAgICAgIHtpZDogImh0dHBPbmx5IiwgdGl0bGU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiSFRUUCIpLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246IFdlYkluc3BlY3Rv
ci5EYXRhR3JpZC5BbGlnbi5DZW50ZXIsIHdpZHRoOiAiNyUifSwKLSAgICAgICAge2lkOiAic2Vj
dXJlIiwgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2VjdXJlIiksIHNvcnRhYmxlOiB0
cnVlLCBhbGlnbjogV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkFsaWduLkNlbnRlciwgd2lkdGg6ICI3
JSJ9Ci0gICAgXTsKLQotICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQg
PSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkKGNvbHVtbnMpOwotICAgIGVsc2UKLSAgICAgICAg
dGhpcy5fZGF0YUdyaWQgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkKGNvbHVtbnMsIHVuZGVm
aW5lZCwgdGhpcy5fb25EZWxldGVDb29raWUuYmluZCh0aGlzKSwgcmVmcmVzaENhbGxiYWNrLCB0
aGlzLl9vbkNvbnRleHRNZW51LmJpbmQodGhpcykpOwotCi0gICAgdGhpcy5fZGF0YUdyaWQuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGF0YUdyaWQuRXZlbnRzLlNvcnRpbmdDaGFuZ2Vk
LCB0aGlzLl9yZWJ1aWxkVGFibGUsIHRoaXMpOwotCi0gICAgaWYgKHNlbGVjdGVkQ2FsbGJhY2sp
Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRh
dGFHcmlkLkV2ZW50cy5TZWxlY3RlZE5vZGUsIHNlbGVjdGVkQ2FsbGJhY2ssIHRoaXMpOwotCi0g
ICAgdGhpcy5fbmV4dFNlbGVjdGVkQ29va2llID0gLyoqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLkNv
b2tpZX0gKi8gKG51bGwpOwotCi0gICAgdGhpcy5fZGF0YUdyaWQuc2hvdyh0aGlzLmVsZW1lbnQp
OwotICAgIHRoaXMuX2RhdGEgPSBbXTsKLX0KLQotV2ViSW5zcGVjdG9yLkNvb2tpZXNUYWJsZS5w
cm90b3R5cGUgPSB7Ci0gICAgdXBkYXRlV2lkdGhzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fZGF0YUdyaWQpCi0gICAgICAgICAgICB0aGlzLl9kYXRhR3JpZC51cGRhdGVX
aWR0aHMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/c3RyaW5nfSBkb21h
aW4KLSAgICAgKi8KLSAgICBfY2xlYXJBbmRSZWZyZXNoOiBmdW5jdGlvbihkb21haW4pCi0gICAg
ewotICAgICAgICB0aGlzLmNsZWFyKGRvbWFpbik7Ci0gICAgICAgIHRoaXMuX3JlZnJlc2goKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkNvbnRleHRN
ZW51fSBjb250ZXh0TWVudQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9k
ZX0gbm9kZQotICAgICAqLwotICAgIF9vbkNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0TWVu
dSwgbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChub2RlID09PSB0aGlzLl9kYXRhR3JpZC5jcmVh
dGlvbk5vZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBjb29raWUgPSBub2Rl
LmNvb2tpZTsKLSAgICAgICAgdmFyIGRvbWFpbiA9IGNvb2tpZS5kb21haW4oKTsKLSAgICAgICAg
aWYgKGRvbWFpbikKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQ2xl
YXIgYWxsIGZyb20gXCIlc1wiIiA6ICJDbGVhciBBbGwgZnJvbSBcIiVzXCIiLCBkb21haW4pLCB0
aGlzLl9jbGVhckFuZFJlZnJlc2guYmluZCh0aGlzLCBkb21haW4pKTsKLSAgICAgICAgY29udGV4
dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxv
d2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJDbGVhciBhbGwiIDogIkNsZWFyIEFsbCIpLCB0aGlzLl9j
bGVhckFuZFJlZnJlc2guYmluZCh0aGlzLCBudWxsKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLkNvb2tpZT59IGNvb2tpZXMKLSAgICAg
Ki8KLSAgICBzZXRDb29raWVzOiBmdW5jdGlvbihjb29raWVzKQotICAgIHsKLSAgICAgICAgdGhp
cy5zZXRDb29raWVGb2xkZXJzKFt7Y29va2llczogY29va2llc31dKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHshQXJyYXkuPCF7Zm9sZGVyTmFtZTogP3N0cmluZywgY29va2ll
czogIUFycmF5LjwhV2ViSW5zcGVjdG9yLkNvb2tpZT59Pn0gY29va2llRm9sZGVycwotICAgICAq
LwotICAgIHNldENvb2tpZUZvbGRlcnM6IGZ1bmN0aW9uKGNvb2tpZUZvbGRlcnMpCi0gICAgewot
ICAgICAgICB0aGlzLl9kYXRhID0gY29va2llRm9sZGVyczsKLSAgICAgICAgdGhpcy5fcmVidWls
ZFRhYmxlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0
b3IuQ29va2llfQotICAgICAqLwotICAgIHNlbGVjdGVkQ29va2llOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX2RhdGFHcmlkLnNlbGVjdGVkTm9kZTsKLSAgICAg
ICAgcmV0dXJuIG5vZGUgPyBub2RlLmNvb2tpZSA6IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7P3N0cmluZz19IGRvbWFpbgotICAgICAqLwotICAgIGNsZWFyOiBmdW5j
dGlvbihkb21haW4pCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gdGhp
cy5fZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGNvb2tp
ZXMgPSB0aGlzLl9kYXRhW2ldLmNvb2tpZXM7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMCwg
Y29va2llQ291bnQgPSBjb29raWVzLmxlbmd0aDsgaiA8IGNvb2tpZUNvdW50OyArK2opIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWRvbWFpbiB8fCBjb29raWVzW2pdLmRvbWFpbigpID09PSBkb21h
aW4pCi0gICAgICAgICAgICAgICAgICAgIGNvb2tpZXNbal0ucmVtb3ZlKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3JlYnVpbGRUYWJsZTogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkQ29va2llID0gdGhpcy5fbmV4dFNlbGVjdGVkQ29v
a2llIHx8IHRoaXMuc2VsZWN0ZWRDb29raWUoKTsKLSAgICAgICAgdGhpcy5fbmV4dFNlbGVjdGVk
Q29va2llID0gbnVsbDsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQucm9vdE5vZGUoKS5yZW1vdmVD
aGlsZHJlbigpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2RhdGEubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fZGF0YVtpXTsKLSAgICAgICAg
ICAgIGlmIChpdGVtLmZvbGRlck5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgZ3JvdXBEYXRh
ID0ge25hbWU6IGl0ZW0uZm9sZGVyTmFtZSwgdmFsdWU6ICIiLCBkb21haW46ICIiLCBwYXRoOiAi
IiwgZXhwaXJlczogIiIsIHNpemU6IHRoaXMuX3RvdGFsU2l6ZShpdGVtLmNvb2tpZXMpLCBodHRw
T25seTogIiIsIHNlY3VyZTogIiJ9OwotICAgICAgICAgICAgICAgIHZhciBncm91cE5vZGUgPSBu
ZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZShncm91cERhdGEpOwotICAgICAgICAgICAgICAg
IGdyb3VwTm9kZS5zZWxlY3RhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0aGlzLl9kYXRh
R3JpZC5yb290Tm9kZSgpLmFwcGVuZENoaWxkKGdyb3VwTm9kZSk7Ci0gICAgICAgICAgICAgICAg
Z3JvdXBOb2RlLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygicm93LWdyb3VwIik7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fcG9wdWxhdGVOb2RlKGdyb3VwTm9kZSwgaXRlbS5jb29raWVzLCBzZWxlY3Rl
ZENvb2tpZSk7Ci0gICAgICAgICAgICAgICAgZ3JvdXBOb2RlLmV4cGFuZCgpOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVOb2RlKHRoaXMuX2RhdGFH
cmlkLnJvb3ROb2RlKCksIGl0ZW0uY29va2llcywgc2VsZWN0ZWRDb29raWUpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5EYXRhR3Jp
ZE5vZGV9IHBhcmVudE5vZGUKLSAgICAgKiBAcGFyYW0gez9BcnJheS48IVdlYkluc3BlY3Rvci5D
b29raWU+fSBjb29raWVzCi0gICAgICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLkNvb2tpZX0gc2Vs
ZWN0ZWRDb29raWUKLSAgICAgKi8KLSAgICBfcG9wdWxhdGVOb2RlOiBmdW5jdGlvbihwYXJlbnRO
b2RlLCBjb29raWVzLCBzZWxlY3RlZENvb2tpZSkKLSAgICB7Ci0gICAgICAgIHBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgaWYgKCFjb29raWVzKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHRoaXMuX3NvcnRDb29raWVzKGNvb2tpZXMpOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBj
b29raWUgPSBjb29raWVzW2ldOwotICAgICAgICAgICAgdmFyIGNvb2tpZU5vZGUgPSB0aGlzLl9j
cmVhdGVHcmlkTm9kZShjb29raWUpOwotICAgICAgICAgICAgcGFyZW50Tm9kZS5hcHBlbmRDaGls
ZChjb29raWVOb2RlKTsKLSAgICAgICAgICAgIGlmIChzZWxlY3RlZENvb2tpZSAmJiBzZWxlY3Rl
ZENvb2tpZS5uYW1lKCkgPT09IGNvb2tpZS5uYW1lKCkgJiYgc2VsZWN0ZWRDb29raWUuZG9tYWlu
KCkgPT09IGNvb2tpZS5kb21haW4oKSAmJiBzZWxlY3RlZENvb2tpZS5wYXRoKCkgPT09IGNvb2tp
ZS5wYXRoKCkpCi0gICAgICAgICAgICAgICAgY29va2llTm9kZS5zZWxlY3QoKTsKLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICBfdG90YWxTaXplOiBmdW5jdGlvbihjb29raWVzKQotICAgIHsKLSAg
ICAgICAgdmFyIHRvdGFsU2l6ZSA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBjb29raWVz
ICYmIGkgPCBjb29raWVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdG90YWxTaXplICs9IGNv
b2tpZXNbaV0uc2l6ZSgpOwotICAgICAgICByZXR1cm4gdG90YWxTaXplOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5Db29raWU+fSBjb29r
aWVzCi0gICAgICovCi0gICAgX3NvcnRDb29raWVzOiBmdW5jdGlvbihjb29raWVzKQotICAgIHsK
LSAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSB0aGlzLl9kYXRhR3JpZC5pc1NvcnRPcmRlckFz
Y2VuZGluZygpID8gMSA6IC0xOwotCi0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVUbyhnZXR0ZXIs
IGNvb2tpZTEsIGNvb2tpZTIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzb3J0RGly
ZWN0aW9uICogKGdldHRlci5hcHBseShjb29raWUxKSArICIiKS5jb21wYXJlVG8oZ2V0dGVyLmFw
cGx5KGNvb2tpZTIpICsgIiIpCi0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBudW1iZXJD
b21wYXJlKGdldHRlciwgY29va2llMSwgY29va2llMikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIHNvcnREaXJlY3Rpb24gKiAoZ2V0dGVyLmFwcGx5KGNvb2tpZTEpIC0gZ2V0dGVyLmFw
cGx5KGNvb2tpZTIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGV4cGlyZXNDb21w
YXJlKGNvb2tpZTEsIGNvb2tpZTIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb29raWUx
LnNlc3Npb24oKSAhPT0gY29va2llMi5zZXNzaW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHNvcnREaXJlY3Rpb24gKiAoY29va2llMS5zZXNzaW9uKCkgPyAxIDogLTEpOwotCi0gICAgICAg
ICAgICBpZiAoY29va2llMS5zZXNzaW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgICAgIGlmIChjb29raWUxLm1heEFnZSgpICYmIGNvb2tpZTIubWF4QWdlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNvcnREaXJlY3Rpb24gKiAoY29va2llMS5tYXhBZ2UoKSAt
IGNvb2tpZTIubWF4QWdlKCkpOwotICAgICAgICAgICAgaWYgKGNvb2tpZTEuZXhwaXJlcygpICYm
IGNvb2tpZTIuZXhwaXJlcygpKQotICAgICAgICAgICAgICAgIHJldHVybiBzb3J0RGlyZWN0aW9u
ICogKGNvb2tpZTEuZXhwaXJlcygpIC0gY29va2llMi5leHBpcmVzKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHNvcnREaXJlY3Rpb24gKiAoY29va2llMS5leHBpcmVzKCkgPyAxIDogLTEpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIGNvbXBhcmF0b3I7Ci0gICAgICAgIHN3aXRjaCAodGhpcy5f
ZGF0YUdyaWQuc29ydENvbHVtbklkZW50aWZpZXIoKSkgewotICAgICAgICAgICAgY2FzZSAibmFt
ZSI6IGNvbXBhcmF0b3IgPSBjb21wYXJlVG8uYmluZChudWxsLCBXZWJJbnNwZWN0b3IuQ29va2ll
LnByb3RvdHlwZS5uYW1lKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJ2YWx1ZSI6IGNvbXBh
cmF0b3IgPSBjb21wYXJlVG8uYmluZChudWxsLCBXZWJJbnNwZWN0b3IuQ29va2llLnByb3RvdHlw
ZS52YWx1ZSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAiZG9tYWluIjogY29tcGFyYXRvciA9
IGNvbXBhcmVUby5iaW5kKG51bGwsIFdlYkluc3BlY3Rvci5Db29raWUucHJvdG90eXBlLmRvbWFp
bik7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAicGF0aCI6IGNvbXBhcmF0b3IgPSBjb21wYXJl
VG8uYmluZChudWxsLCBXZWJJbnNwZWN0b3IuQ29va2llLnByb3RvdHlwZS5wYXRoKTsgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlICJleHBpcmVzIjogY29tcGFyYXRvciA9IGV4cGlyZXNDb21wYXJl
OyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNpemUiOiBjb21wYXJhdG9yID0gbnVtYmVyQ29t
cGFyZS5iaW5kKG51bGwsIFdlYkluc3BlY3Rvci5Db29raWUucHJvdG90eXBlLnNpemUpOyBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgImh0dHBPbmx5IjogY29tcGFyYXRvciA9IGNvbXBhcmVUby5i
aW5kKG51bGwsIFdlYkluc3BlY3Rvci5Db29raWUucHJvdG90eXBlLmh0dHBPbmx5KTsgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlICJzZWN1cmUiOiBjb21wYXJhdG9yID0gY29tcGFyZVRvLmJpbmQo
bnVsbCwgV2ViSW5zcGVjdG9yLkNvb2tpZS5wcm90b3R5cGUuc2VjdXJlKTsgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OiBjb21wYXJlVG8uYmluZChudWxsLCBXZWJJbnNwZWN0b3IuQ29va2ll
LnByb3RvdHlwZS5uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvb2tpZXMuc29ydChjb21w
YXJhdG9yKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9y
LkNvb2tpZX0gY29va2llCi0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5EYXRhR3JpZE5v
ZGV9Ci0gICAgICovCi0gICAgX2NyZWF0ZUdyaWROb2RlOiBmdW5jdGlvbihjb29raWUpCi0gICAg
ewotICAgICAgICB2YXIgZGF0YSA9IHt9OwotICAgICAgICBkYXRhLm5hbWUgPSBjb29raWUubmFt
ZSgpOwotICAgICAgICBkYXRhLnZhbHVlID0gY29va2llLnZhbHVlKCk7Ci0gICAgICAgIGRhdGEu
ZG9tYWluID0gY29va2llLmRvbWFpbigpIHx8ICIiOwotICAgICAgICBkYXRhLnBhdGggPSBjb29r
aWUucGF0aCgpIHx8ICIiOwotICAgICAgICBpZiAoY29va2llLnR5cGUoKSA9PT0gV2ViSW5zcGVj
dG9yLkNvb2tpZS5UeXBlLlJlcXVlc3QpCi0gICAgICAgICAgICBkYXRhLmV4cGlyZXMgPSAiIjsK
LSAgICAgICAgZWxzZSBpZiAoY29va2llLm1heEFnZSgpKQotICAgICAgICAgICAgZGF0YS5leHBp
cmVzID0gTnVtYmVyLnNlY29uZHNUb1N0cmluZyhwYXJzZUludChjb29raWUubWF4QWdlKCksIDEw
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGNvb2tpZS5leHBpcmVzKCkpCi0gICAgICAgICAgICBkYXRh
LmV4cGlyZXMgPSBuZXcgRGF0ZShjb29raWUuZXhwaXJlcygpKS50b0dNVFN0cmluZygpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhLmV4cGlyZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlNlc3Npb24iKTsKLSAgICAgICAgZGF0YS5zaXplID0gY29va2llLnNpemUoKTsKLSAgICAg
ICAgY29uc3QgY2hlY2ttYXJrID0gIlx1MjcxMyI7Ci0gICAgICAgIGRhdGEuaHR0cE9ubHkgPSAo
Y29va2llLmh0dHBPbmx5KCkgPyBjaGVja21hcmsgOiAiIik7Ci0gICAgICAgIGRhdGEuc2VjdXJl
ID0gKGNvb2tpZS5zZWN1cmUoKSA/IGNoZWNrbWFyayA6ICIiKTsKLQotICAgICAgICB2YXIgbm9k
ZSA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlKGRhdGEpOwotICAgICAgICBub2RlLmNv
b2tpZSA9IGNvb2tpZTsKLSAgICAgICAgbm9kZS5zZWxlY3RhYmxlID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgfSwKLQotICAgIF9vbkRlbGV0ZUNvb2tpZTogZnVuY3Rpb24obm9k
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBjb29raWUgPSBub2RlLmNvb2tpZTsKLSAgICAgICAgdmFy
IG5laWdoYm91ciA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZSgpIHx8IG5vZGUudHJhdmVyc2VQcmV2
aW91c05vZGUoKTsKLSAgICAgICAgaWYgKG5laWdoYm91cikKLSAgICAgICAgICAgIHRoaXMuX25l
eHRTZWxlY3RlZENvb2tpZSA9IG5laWdoYm91ci5jb29raWU7Ci0gICAgICAgIGNvb2tpZS5yZW1v
dmUoKTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaCgpOwotICAgIH0sCi0KLSAgICBfcmVmcmVzaDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlZnJlc2hDYWxsYmFjaykKLSAg
ICAgICAgICAgIHRoaXMuX3JlZnJlc2hDYWxsYmFjaygpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkyMjFkY2QuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9ET01BZ2VudC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0OTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5ET01BZ2VudH0gZG9tQWdlbnQKLSAqIEBwYXJhbSB7
P1dlYkluc3BlY3Rvci5ET01Eb2N1bWVudH0gZG9jCi0gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSW5T
aGFkb3dUcmVlCi0gKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGV9IHBheWxvYWQKLSAqLwotV2ViSW5z
cGVjdG9yLkRPTU5vZGUgPSBmdW5jdGlvbihkb21BZ2VudCwgZG9jLCBpc0luU2hhZG93VHJlZSwg
cGF5bG9hZCkgewotICAgIHRoaXMuX2RvbUFnZW50ID0gZG9tQWdlbnQ7Ci0gICAgdGhpcy5vd25l
ckRvY3VtZW50ID0gZG9jOwotICAgIHRoaXMuX2lzSW5TaGFkb3dUcmVlID0gaXNJblNoYWRvd1Ry
ZWU7Ci0KLSAgICB0aGlzLmlkID0gcGF5bG9hZC5ub2RlSWQ7Ci0gICAgZG9tQWdlbnQuX2lkVG9E
T01Ob2RlW3RoaXMuaWRdID0gdGhpczsKLSAgICB0aGlzLl9ub2RlVHlwZSA9IHBheWxvYWQubm9k
ZVR5cGU7Ci0gICAgdGhpcy5fbm9kZU5hbWUgPSBwYXlsb2FkLm5vZGVOYW1lOwotICAgIHRoaXMu
X2xvY2FsTmFtZSA9IHBheWxvYWQubG9jYWxOYW1lOwotICAgIHRoaXMuX25vZGVWYWx1ZSA9IHBh
eWxvYWQubm9kZVZhbHVlOwotCi0gICAgdGhpcy5fc2hhZG93Um9vdHMgPSBbXTsKLQotICAgIHRo
aXMuX2F0dHJpYnV0ZXMgPSBbXTsKLSAgICB0aGlzLl9hdHRyaWJ1dGVzTWFwID0ge307Ci0gICAg
aWYgKHBheWxvYWQuYXR0cmlidXRlcykKLSAgICAgICAgdGhpcy5fc2V0QXR0cmlidXRlc1BheWxv
YWQocGF5bG9hZC5hdHRyaWJ1dGVzKTsKLQotICAgIHRoaXMuX3VzZXJQcm9wZXJ0aWVzID0ge307
Ci0gICAgdGhpcy5fZGVzY2VuZGFudFVzZXJQcm9wZXJ0eUNvdW50ZXJzID0ge307Ci0KLSAgICB0
aGlzLl9jaGlsZE5vZGVDb3VudCA9IHBheWxvYWQuY2hpbGROb2RlQ291bnQ7Ci0gICAgdGhpcy5j
aGlsZHJlbiA9IG51bGw7Ci0KLSAgICB0aGlzLm5leHRTaWJsaW5nID0gbnVsbDsKLSAgICB0aGlz
LnByZXZpb3VzU2libGluZyA9IG51bGw7Ci0gICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDsKLSAg
ICB0aGlzLmxhc3RDaGlsZCA9IG51bGw7Ci0gICAgdGhpcy5wYXJlbnROb2RlID0gbnVsbDsKLQot
ICAgIGlmIChwYXlsb2FkLnNoYWRvd1Jvb3RzICYmIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93
U2hhZG93RE9NLmdldCgpKSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZC5z
aGFkb3dSb290cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHJvb3QgPSBwYXlsb2Fk
LnNoYWRvd1Jvb3RzW2ldOwotICAgICAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9y
LkRPTU5vZGUodGhpcy5fZG9tQWdlbnQsIHRoaXMub3duZXJEb2N1bWVudCwgdHJ1ZSwgcm9vdCk7
Ci0gICAgICAgICAgICB0aGlzLl9zaGFkb3dSb290cy5wdXNoKG5vZGUpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHBheWxvYWQudGVtcGxhdGVDb250ZW50KQotICAgICAgICB0aGlzLl90
ZW1wbGF0ZUNvbnRlbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTU5vZGUodGhpcy5fZG9tQWdlbnQs
IHRoaXMub3duZXJEb2N1bWVudCwgdHJ1ZSwgcGF5bG9hZC50ZW1wbGF0ZUNvbnRlbnQpOwotCi0g
ICAgaWYgKHBheWxvYWQuY2hpbGRyZW4pCi0gICAgICAgIHRoaXMuX3NldENoaWxkcmVuUGF5bG9h
ZChwYXlsb2FkLmNoaWxkcmVuKTsKLQotICAgIGlmIChwYXlsb2FkLmNvbnRlbnREb2N1bWVudCkg
ewotICAgICAgICB0aGlzLl9jb250ZW50RG9jdW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTURv
Y3VtZW50KGRvbUFnZW50LCBwYXlsb2FkLmNvbnRlbnREb2N1bWVudCk7Ci0gICAgICAgIHRoaXMu
Y2hpbGRyZW4gPSBbdGhpcy5fY29udGVudERvY3VtZW50XTsKLSAgICAgICAgdGhpcy5fcmVudW1i
ZXIoKTsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy5fbm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9O
T0RFKSB7Ci0gICAgICAgIC8vIEhUTUwgYW5kIEJPRFkgZnJvbSBpbnRlcm5hbCBpZnJhbWVzIHNo
b3VsZCBub3Qgb3ZlcndyaXRlIHRvcC1sZXZlbCBvbmVzLgotICAgICAgICBpZiAodGhpcy5vd25l
ckRvY3VtZW50ICYmICF0aGlzLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIHRoaXMu
X25vZGVOYW1lID09PSAiSFRNTCIpCi0gICAgICAgICAgICB0aGlzLm93bmVyRG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50ID0gdGhpczsKLSAgICAgICAgaWYgKHRoaXMub3duZXJEb2N1bWVudCAmJiAh
dGhpcy5vd25lckRvY3VtZW50LmJvZHkgJiYgdGhpcy5fbm9kZU5hbWUgPT09ICJCT0RZIikKLSAg
ICAgICAgICAgIHRoaXMub3duZXJEb2N1bWVudC5ib2R5ID0gdGhpczsKLSAgICB9IGVsc2UgaWYg
KHRoaXMuX25vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERSkgewotICAgICAgICB0
aGlzLnB1YmxpY0lkID0gcGF5bG9hZC5wdWJsaWNJZDsKLSAgICAgICAgdGhpcy5zeXN0ZW1JZCA9
IHBheWxvYWQuc3lzdGVtSWQ7Ci0gICAgICAgIHRoaXMuaW50ZXJuYWxTdWJzZXQgPSBwYXlsb2Fk
LmludGVybmFsU3Vic2V0OwotICAgIH0gZWxzZSBpZiAodGhpcy5fbm9kZVR5cGUgPT09IE5vZGUu
QVRUUklCVVRFX05PREUpIHsKLSAgICAgICAgdGhpcy5uYW1lID0gcGF5bG9hZC5uYW1lOwotICAg
ICAgICB0aGlzLnZhbHVlID0gcGF5bG9hZC52YWx1ZTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKLSAqIEBwYXJhbSB7Ym9vbGVhbn0g
b3B0aW1pemVkCi0gKi8KLVdlYkluc3BlY3Rvci5ET01Ob2RlLlhQYXRoU3RlcCA9IGZ1bmN0aW9u
KHZhbHVlLCBvcHRpbWl6ZWQpCi17Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgIHRoaXMu
b3B0aW1pemVkID0gb3B0aW1pemVkOwotfQotCi1XZWJJbnNwZWN0b3IuRE9NTm9kZS5YUGF0aFN0
ZXAucHJvdG90eXBlID0gewotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy52YWx1ZTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5ET01Ob2RlLnBy
b3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwot
ICAgIGhhc0F0dHJpYnV0ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9hdHRyaWJ1dGVzLmxlbmd0aCA+IDA7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaGFzQ2hpbGROb2RlczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkTm9kZUNvdW50ID4gMCB8fCAhIXRoaXMuX3No
YWRvd1Jvb3RzLmxlbmd0aCB8fCAhIXRoaXMuX3RlbXBsYXRlQ29udGVudDsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBoYXNTaGFkb3dS
b290czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fc2hhZG93Um9v
dHMubGVuZ3RoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0g
ICAgICovCi0gICAgbm9kZVR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9ub2RlVHlwZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5n
fQotICAgICAqLwotICAgIG5vZGVOYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fbm9kZU5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jv
b2xlYW59Ci0gICAgICovCi0gICAgaXNJblNoYWRvd1RyZWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9pc0luU2hhZG93VHJlZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIG5vZGVOYW1lSW5Db3JyZWN0Q2Fz
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNYTUxOb2RlKCkgPyB0
aGlzLm5vZGVOYW1lKCkgOiB0aGlzLm5vZGVOYW1lKCkudG9Mb3dlckNhc2UoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcGFyYW0ge2Z1
bmN0aW9uKD9Qcm90b2NvbC5FcnJvcik9fSBjYWxsYmFjawotICAgICAqLwotICAgIHNldE5vZGVO
YW1lOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIERPTUFnZW50LnNl
dE5vZGVOYW1lKHRoaXMuaWQsIG5hbWUsIFdlYkluc3BlY3Rvci5kb21BZ2VudC5fbWFya1Jldmlz
aW9uKHRoaXMsIGNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e3N0cmluZ30KLSAgICAgKi8KLSAgICBsb2NhbE5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9sb2NhbE5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBub2RlVmFsdWU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9ub2RlVmFsdWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1Byb3Rv
Y29sLkVycm9yKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgc2V0Tm9kZVZhbHVlOiBmdW5jdGlv
bih2YWx1ZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBET01BZ2VudC5zZXROb2RlVmFsdWUo
dGhpcy5pZCwgdmFsdWUsIFdlYkluc3BlY3Rvci5kb21BZ2VudC5fbWFya1JldmlzaW9uKHRoaXMs
IGNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBu
YW1lCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGdldEF0dHJpYnV0ZTog
ZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBhdHRyID0gdGhpcy5fYXR0cmlidXRl
c01hcFtuYW1lXTsKLSAgICAgICAgcmV0dXJuIGF0dHIgPyBhdHRyLnZhbHVlIDogdW5kZWZpbmVk
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9jb2wu
RXJyb3IpPX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKG5h
bWUsIHRleHQsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgRE9NQWdlbnQuc2V0QXR0cmlidXRl
c0FzVGV4dCh0aGlzLmlkLCB0ZXh0LCBuYW1lLCBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuX21hcmtS
ZXZpc2lvbih0aGlzLCBjYWxsYmFjaykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gbmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQotICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb24oP1Byb3RvY29sLkVycm9yKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAg
c2V0QXR0cmlidXRlVmFsdWU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBjYWxsYmFjaykKLSAgICB7
Ci0gICAgICAgIERPTUFnZW50LnNldEF0dHJpYnV0ZVZhbHVlKHRoaXMuaWQsIG5hbWUsIHZhbHVl
LCBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuX21hcmtSZXZpc2lvbih0aGlzLCBjYWxsYmFjaykpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAg
YXR0cmlidXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2F0dHJp
YnV0ZXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0g
ICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9jb2wuRXJyb3IpPX0gY2FsbGJhY2sKLSAgICAg
Ki8KLSAgICByZW1vdmVBdHRyaWJ1dGU6IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKQotICAgIHsK
LSAgICAgICAgLyoqCi0gICAgICAgICAqICBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IK
LSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG15Y2FsbGJhY2soZXJyb3IpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fYXR0cmlidXRlc01hcFtuYW1lXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
IGkgPCB0aGlzLl9hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9hdHRyaWJ1dGVzW2ldLm5hbWUgPT09IG5hbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5fbWFy
a1JldmlzaW9uKHRoaXMsIGNhbGxiYWNrKShlcnJvcik7Ci0gICAgICAgIH0KLSAgICAgICAgRE9N
QWdlbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMuaWQsIG5hbWUsIG15Y2FsbGJhY2suYmluZCh0aGlz
KSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oQXJyYXkuPFdl
Ykluc3BlY3Rvci5ET01Ob2RlPik9fSBjYWxsYmFjawotICAgICAqLwotICAgIGdldENoaWxkTm9k
ZXM6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4p
IHsKLSAgICAgICAgICAgIGlmIChjYWxsYmFjaykKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh0
aGlzLmNoaWxkcmVuKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8qKgotICAgICAgICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLkRPTU5vZGV9Ci0gICAgICAgICAq
IEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKi8KLSAgICAgICAgZnVu
Y3Rpb24gbXljYWxsYmFjayhlcnJvcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFlcnJv
ciAmJiBjYWxsYmFjaykKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh0aGlzLmNoaWxkcmVuKTsK
LSAgICAgICAgfQotCi0gICAgICAgIERPTUFnZW50LnJlcXVlc3RDaGlsZE5vZGVzKHRoaXMuaWQs
IHVuZGVmaW5lZCwgbXljYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJh
eS48V2ViSW5zcGVjdG9yLkRPTU5vZGU+KT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgZ2V0U3Vi
dHJlZTogZnVuY3Rpb24oZGVwdGgsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIEB0aGlzIHtXZWJJbnNwZWN0b3IuRE9NTm9kZX0KLSAgICAgICAgICogQHBhcmFtIHs/
UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBteWNh
bGxiYWNrKGVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAg
ICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IgPyBudWxsIDogdGhpcy5jaGlsZHJlbik7ICAgICAg
ICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgRE9NQWdlbnQucmVxdWVzdENoaWxkTm9k
ZXModGhpcy5pZCwgZGVwdGgsIG15Y2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1Byb3RvY29sLkVycm9yKT19IGNhbGxiYWNr
Ci0gICAgICovCi0gICAgZ2V0T3V0ZXJIVE1MOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0g
ICAgICAgIERPTUFnZW50LmdldE91dGVySFRNTCh0aGlzLmlkLCBjYWxsYmFjayk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sCi0gICAgICogQHBhcmFtIHtm
dW5jdGlvbig/UHJvdG9jb2wuRXJyb3IpPX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZXRPdXRl
ckhUTUw6IGZ1bmN0aW9uKGh0bWwsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgRE9NQWdlbnQu
c2V0T3V0ZXJIVE1MKHRoaXMuaWQsIGh0bWwsIFdlYkluc3BlY3Rvci5kb21BZ2VudC5fbWFya1Jl
dmlzaW9uKHRoaXMsIGNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb24oP1Byb3RvY29sLkVycm9yKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVt
b3ZlTm9kZTogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICBET01BZ2VudC5yZW1v
dmVOb2RlKHRoaXMuaWQsIFdlYkluc3BlY3Rvci5kb21BZ2VudC5fbWFya1JldmlzaW9uKHRoaXMs
IGNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIGNvcHlOb2RlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBmdW5jdGlvbiBjb3B5KGVycm9yLCB0ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWVycm9yKQotICAgICAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5jb3B5
VGV4dCh0ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBET01BZ2VudC5nZXRPdXRlckhUTUwodGhp
cy5pZCwgY29weSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
b3B0aW1pemVkCi0gICAgICovCi0gICAgY29weVhQYXRoOiBmdW5jdGlvbihvcHRpbWl6ZWQpCi0g
ICAgewotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGhpcy54UGF0aChv
cHRpbWl6ZWQpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG9i
amVjdEdyb3VwSWQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9Qcm90b2NvbC5FcnJvcik9fSBj
YWxsYmFjawotICAgICAqLwotICAgIGV2ZW50TGlzdGVuZXJzOiBmdW5jdGlvbihvYmplY3RHcm91
cElkLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIERPTUFnZW50LmdldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZSh0aGlzLmlkLCBvYmplY3RHcm91cElkLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBwYXRoOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgcGF0aCA9IFtdOwotICAgICAgICB2YXIgbm9kZSA9IHRo
aXM7Ci0gICAgICAgIHdoaWxlIChub2RlICYmICJpbmRleCIgaW4gbm9kZSAmJiBub2RlLl9ub2Rl
TmFtZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHBhdGgucHVzaChbbm9kZS5pbmRleCwgbm9kZS5f
bm9kZU5hbWVdKTsKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7Ci0gICAgICAg
IH0KLSAgICAgICAgcGF0aC5yZXZlcnNlKCk7Ci0gICAgICAgIHJldHVybiBwYXRoLmpvaW4oIiwi
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBqdXN0U2VsZWN0
b3IKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgYXBwcm9wcmlhdGVTZWxl
Y3RvckZvcjogZnVuY3Rpb24oanVzdFNlbGVjdG9yKQotICAgIHsKLSAgICAgICAgdmFyIGxvd2Vy
Q2FzZU5hbWUgPSB0aGlzLmxvY2FsTmFtZSgpIHx8IHRoaXMubm9kZU5hbWUoKS50b0xvd2VyQ2Fz
ZSgpOwotCi0gICAgICAgIHZhciBpZCA9IHRoaXMuZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgICAg
ICBpZiAoaWQpIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICIjIiArIGlkOwotICAgICAg
ICAgICAgcmV0dXJuIChqdXN0U2VsZWN0b3IgPyBzZWxlY3RvciA6IGxvd2VyQ2FzZU5hbWUgKyBz
ZWxlY3Rvcik7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRB
dHRyaWJ1dGUoImNsYXNzIik7Ci0gICAgICAgIGlmIChjbGFzc05hbWUpIHsKLSAgICAgICAgICAg
IHZhciBzZWxlY3RvciA9ICIuIiArIGNsYXNzTmFtZS50cmltKCkucmVwbGFjZSgvXHMrL2csICIu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gKGp1c3RTZWxlY3RvciA/IHNlbGVjdG9yIDogbG93ZXJD
YXNlTmFtZSArIHNlbGVjdG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb3dlckNhc2VO
YW1lID09PSAiaW5wdXQiICYmIHRoaXMuZ2V0QXR0cmlidXRlKCJ0eXBlIikpCi0gICAgICAgICAg
ICByZXR1cm4gbG93ZXJDYXNlTmFtZSArICJbdHlwZT1cIiIgKyB0aGlzLmdldEF0dHJpYnV0ZSgi
dHlwZSIpICsgIlwiXSI7Ci0KLSAgICAgICAgcmV0dXJuIGxvd2VyQ2FzZU5hbWU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRPTU5vZGV9IG5vZGUKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzQW5jZXN0b3I6IGZ1bmN0aW9u
KG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlOwotICAgICAg
ICB3aGlsZSAoY3VycmVudE5vZGUpIHsKLSAgICAgICAgICAgIGlmICh0aGlzID09PSBjdXJyZW50
Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGN1cnJlbnRO
b2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRP
TU5vZGV9IGRlc2NlbmRhbnQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAg
IGlzRGVzY2VuZGFudDogZnVuY3Rpb24oZGVzY2VuZGFudCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBkZXNjZW5kYW50ICE9PSBudWxsICYmIGRlc2NlbmRhbnQuaXNBbmNlc3Rvcih0aGlzKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gYXR0cnMKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9zZXRBdHRyaWJ1dGVzUGF5bG9h
ZDogZnVuY3Rpb24oYXR0cnMpCi0gICAgewotICAgICAgICB2YXIgYXR0cmlidXRlc0NoYW5nZWQg
PSAhdGhpcy5fYXR0cmlidXRlcyB8fCBhdHRycy5sZW5ndGggIT09IHRoaXMuX2F0dHJpYnV0ZXMu
bGVuZ3RoICogMjsKLSAgICAgICAgdmFyIG9sZEF0dHJpYnV0ZXNNYXAgPSB0aGlzLl9hdHRyaWJ1
dGVzTWFwIHx8IHt9OwotCi0gICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBbXTsKLSAgICAgICAg
dGhpcy5fYXR0cmlidXRlc01hcCA9IHt9OwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YXR0cnMubGVuZ3RoOyBpICs9IDIpIHsKLSAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cnNbaV07
Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBhdHRyc1tpICsgMV07Ci0gICAgICAgICAgICB0aGlz
Ll9hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwotCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRl
c0NoYW5nZWQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICgh
b2xkQXR0cmlidXRlc01hcFtuYW1lXSB8fCBvbGRBdHRyaWJ1dGVzTWFwW25hbWVdLnZhbHVlICE9
PSB2YWx1ZSkKLSAgICAgICAgICAgICAgYXR0cmlidXRlc0NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzQ2hhbmdlZDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRE9NTm9kZX0gcHJldgotICAgICAqIEBwYXJh
bSB7RE9NQWdlbnQuTm9kZX0gcGF5bG9hZAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5E
T01Ob2RlfQotICAgICAqLwotICAgIF9pbnNlcnRDaGlsZDogZnVuY3Rpb24ocHJldiwgcGF5bG9h
ZCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlKHRo
aXMuX2RvbUFnZW50LCB0aGlzLm93bmVyRG9jdW1lbnQsIHRoaXMuX2lzSW5TaGFkb3dUcmVlLCBw
YXlsb2FkKTsKLSAgICAgICAgaWYgKCFwcmV2KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY2hp
bGRyZW4pIHsKLSAgICAgICAgICAgICAgICAvLyBGaXJzdCBub2RlCi0gICAgICAgICAgICAgICAg
dGhpcy5jaGlsZHJlbiA9IHRoaXMuX3NoYWRvd1Jvb3RzLnNsaWNlKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMuX3RlbXBsYXRlQ29udGVudCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5j
aGlsZHJlbi5wdXNoKHRoaXMuX3RlbXBsYXRlQ29udGVudCk7Ci0KLSAgICAgICAgICAgICAgICB0
aGlzLmNoaWxkcmVuLnB1c2gobm9kZSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICB0aGlzLmNoaWxkcmVuLnVuc2hpZnQobm9kZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UodGhpcy5jaGlsZHJlbi5pbmRleE9mKHByZXYpICsg
MSwgMCwgbm9kZSk7Ci0gICAgICAgIHRoaXMuX3JlbnVtYmVyKCk7Ci0gICAgICAgIHJldHVybiBu
b2RlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5ET01O
b2RlfSBub2RlCi0gICAgICovCi0gICAgX3JlbW92ZUNoaWxkOiBmdW5jdGlvbihub2RlKQotICAg
IHsKLSAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UodGhpcy5jaGlsZHJlbi5pbmRleE9mKG5v
ZGUpLCAxKTsKLSAgICAgICAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDsKLSAgICAgICAgbm9kZS5f
dXBkYXRlQ2hpbGRVc2VyUHJvcGVydHlDb3VudHNPblJlbW92YWwodGhpcyk7Ci0gICAgICAgIHRo
aXMuX3JlbnVtYmVyKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXku
PERPTUFnZW50Lk5vZGU+fSBwYXlsb2FkcwotICAgICAqLwotICAgIF9zZXRDaGlsZHJlblBheWxv
YWQ6IGZ1bmN0aW9uKHBheWxvYWRzKQotICAgIHsKLSAgICAgICAgLy8gV2Ugc2V0IGNoaWxkcmVu
IGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnREb2N1bWVudCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmNoaWxkcmVuID0gdGhpcy5fc2hh
ZG93Um9vdHMuc2xpY2UoKTsKLSAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlQ29udGVudCkKLSAg
ICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaCh0aGlzLl90ZW1wbGF0ZUNvbnRlbnQpOwotCi0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZHMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBwYXlsb2FkID0gcGF5bG9hZHNbaV07Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IG5ldyBXZWJJbnNwZWN0b3IuRE9NTm9kZSh0aGlzLl9kb21BZ2VudCwgdGhpcy5vd25lckRvY3Vt
ZW50LCB0aGlzLl9pc0luU2hhZG93VHJlZSwgcGF5bG9hZCk7Ci0gICAgICAgICAgICB0aGlzLmNo
aWxkcmVuLnB1c2gobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fcmVudW1iZXIoKTsK
LSAgICB9LAotCi0gICAgX3JlbnVtYmVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Ll9jaGlsZE5vZGVDb3VudCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOwotICAgICAgICBpZiAodGhp
cy5fY2hpbGROb2RlQ291bnQgPT0gMCkgewotICAgICAgICAgICAgdGhpcy5maXJzdENoaWxkID0g
bnVsbDsKLSAgICAgICAgICAgIHRoaXMubGFzdENoaWxkID0gbnVsbDsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmZpcnN0Q2hpbGQgPSB0aGlzLmNoaWxkcmVu
WzBdOwotICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5fY2hpbGRO
b2RlQ291bnQgLSAxXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jaGlsZE5v
ZGVDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ld
OwotICAgICAgICAgICAgY2hpbGQuaW5kZXggPSBpOwotICAgICAgICAgICAgY2hpbGQubmV4dFNp
YmxpbmcgPSBpICsgMSA8IHRoaXMuX2NoaWxkTm9kZUNvdW50ID8gdGhpcy5jaGlsZHJlbltpICsg
MV0gOiBudWxsOwotICAgICAgICAgICAgY2hpbGQucHJldmlvdXNTaWJsaW5nID0gaSAtIDEgPj0g
MCA/IHRoaXMuY2hpbGRyZW5baSAtIDFdIDogbnVsbDsKLSAgICAgICAgICAgIGNoaWxkLnBhcmVu
dE5vZGUgPSB0aGlzOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBuYW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCi0gICAgICovCi0g
ICAgX2FkZEF0dHJpYnV0ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUpCi0gICAgewotICAgICAgICB2
YXIgYXR0ciA9IHsKLSAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgICAgICB2YWx1ZTog
dmFsdWUsCi0gICAgICAgICAgICBfbm9kZTogdGhpcwotICAgICAgICB9OwotICAgICAgICB0aGlz
Ll9hdHRyaWJ1dGVzTWFwW25hbWVdID0gYXR0cjsKLSAgICAgICAgdGhpcy5fYXR0cmlidXRlcy5w
dXNoKGF0dHIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFt
ZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQotICAgICAqLwotICAgIF9zZXRBdHRyaWJ1
dGU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKQotICAgIHsKLSAgICAgICAgdmFyIGF0dHIgPSB0aGlz
Ll9hdHRyaWJ1dGVzTWFwW25hbWVdOwotICAgICAgICBpZiAoYXR0cikKLSAgICAgICAgICAgIGF0
dHIudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fYWRkQXR0
cmlidXRlKG5hbWUsIHZhbHVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUKLSAgICAgKi8KLSAgICBfcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbihuYW1l
KQotICAgIHsKLSAgICAgICAgdmFyIGF0dHIgPSB0aGlzLl9hdHRyaWJ1dGVzTWFwW25hbWVdOwot
ICAgICAgICBpZiAoYXR0cikgewotICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlcy5yZW1vdmUo
YXR0cik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fYXR0cmlidXRlc01hcFtuYW1lXTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5E
T01Ob2RlfSB0YXJnZXROb2RlCi0gICAgICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLkRPTU5vZGV9
IGFuY2hvck5vZGUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9Qcm90b2NvbC5FcnJvcik9fSBj
YWxsYmFjawotICAgICAqLwotICAgIG1vdmVUbzogZnVuY3Rpb24odGFyZ2V0Tm9kZSwgYW5jaG9y
Tm9kZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBET01BZ2VudC5tb3ZlVG8odGhpcy5pZCwg
dGFyZ2V0Tm9kZS5pZCwgYW5jaG9yTm9kZSA/IGFuY2hvck5vZGUuaWQgOiB1bmRlZmluZWQsIFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5fbWFya1JldmlzaW9uKHRoaXMsIGNhbGxiYWNrKSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNY
TUxOb2RlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gISF0aGlzLm93bmVyRG9j
dW1lbnQgJiYgISF0aGlzLm93bmVyRG9jdW1lbnQueG1sVmVyc2lvbjsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpbWl6ZWQKLSAgICAgKiBAcmV0dXJuIHtz
dHJpbmd9Ci0gICAgICovCi0gICAgeFBhdGg6IGZ1bmN0aW9uKG9wdGltaXplZCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKQotICAgICAg
ICAgICAgcmV0dXJuICIvIjsKLQotICAgICAgICB2YXIgc3RlcHMgPSBbXTsKLSAgICAgICAgdmFy
IGNvbnRleHROb2RlID0gdGhpczsKLSAgICAgICAgd2hpbGUgKGNvbnRleHROb2RlKSB7Ci0gICAg
ICAgICAgICB2YXIgc3RlcCA9IGNvbnRleHROb2RlLl94UGF0aFZhbHVlKG9wdGltaXplZCk7Ci0g
ICAgICAgICAgICBpZiAoIXN0ZXApCi0gICAgICAgICAgICAgICAgYnJlYWs7IC8vIEVycm9yIC0g
YmFpbCBvdXQgZWFybHkuCi0gICAgICAgICAgICBzdGVwcy5wdXNoKHN0ZXApOwotICAgICAgICAg
ICAgaWYgKHN0ZXAub3B0aW1pemVkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY29udGV4dE5vZGUgPSBjb250ZXh0Tm9kZS5wYXJlbnROb2RlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgc3RlcHMucmV2ZXJzZSgpOwotICAgICAgICByZXR1cm4gKHN0ZXBzLmxlbmd0aCAmJiBz
dGVwc1swXS5vcHRpbWl6ZWQgPyAiIiA6ICIvIikgKyBzdGVwcy5qb2luKCIvIik7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW1pemVkCi0gICAgICogQHJl
dHVybiB7V2ViSW5zcGVjdG9yLkRPTU5vZGUuWFBhdGhTdGVwfQotICAgICAqLwotICAgIF94UGF0
aFZhbHVlOiBmdW5jdGlvbihvcHRpbWl6ZWQpCi0gICAgewotICAgICAgICB2YXIgb3duVmFsdWU7
Ci0gICAgICAgIHZhciBvd25JbmRleCA9IHRoaXMuX3hQYXRoSW5kZXgoKTsKLSAgICAgICAgaWYg
KG93bkluZGV4ID09PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBFcnJvci4KLQot
ICAgICAgICBzd2l0Y2ggKHRoaXMuX25vZGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgTm9kZS5FTEVN
RU5UX05PREU6Ci0gICAgICAgICAgICBpZiAob3B0aW1pemVkICYmIHRoaXMuZ2V0QXR0cmlidXRl
KCJpZCIpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkRPTU5vZGUu
WFBhdGhTdGVwKCIvLypbQGlkPVwiIiArIHRoaXMuZ2V0QXR0cmlidXRlKCJpZCIpICsgIlwiXSIs
IHRydWUpOwotICAgICAgICAgICAgb3duVmFsdWUgPSB0aGlzLl9sb2NhbE5hbWU7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFOgotICAgICAgICAg
ICAgb3duVmFsdWUgPSAiQCIgKyB0aGlzLl9ub2RlTmFtZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOgotICAgICAgICBjYXNlIE5vZGUuQ0RBVEFfU0VD
VElPTl9OT0RFOgotICAgICAgICAgICAgb3duVmFsdWUgPSAidGV4dCgpIjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgot
ICAgICAgICAgICAgb3duVmFsdWUgPSAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbigpIjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOgotICAgICAgICAg
ICAgb3duVmFsdWUgPSAiY29tbWVudCgpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE5vZGUuRE9DVU1FTlRfTk9ERToKLSAgICAgICAgICAgIG93blZhbHVlID0gIiI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG93blZhbHVlID0g
IiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvd25JbmRl
eCA+IDApCi0gICAgICAgICAgICBvd25WYWx1ZSArPSAiWyIgKyBvd25JbmRleCArICJdIjsKLQot
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlLlhQYXRoU3RlcChvd25WYWx1
ZSwgdGhpcy5fbm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBfeFBhdGhJbmRleDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gUmV0dXJucyAtMSBpbiBjYXNlIG9mIGVycm9y
LCAwIGlmIG5vIHNpYmxpbmdzIG1hdGNoaW5nIHRoZSBzYW1lIGV4cHJlc3Npb24sIDxYUGF0aCBp
bmRleCBhbW9uZyB0aGUgc2FtZSBleHByZXNzaW9uLW1hdGNoaW5nIHNpYmxpbmcgbm9kZXM+IG90
aGVyd2lzZS4KLSAgICAgICAgZnVuY3Rpb24gYXJlTm9kZXNTaW1pbGFyKGxlZnQsIHJpZ2h0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGVmdCA9PT0gcmlnaHQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChsZWZ0Ll9ub2RlVHlwZSA9PT0gTm9k
ZS5FTEVNRU5UX05PREUgJiYgcmlnaHQuX25vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5fbG9jYWxOYW1lID09PSByaWdodC5fbG9jYWxO
YW1lOwotCi0gICAgICAgICAgICBpZiAobGVmdC5fbm9kZVR5cGUgPT09IHJpZ2h0Ll9ub2RlVHlw
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gWFBhdGgg
dHJlYXRzIENEQVRBIGFzIHRleHQgbm9kZXMuCi0gICAgICAgICAgICB2YXIgbGVmdFR5cGUgPSBs
ZWZ0Ll9ub2RlVHlwZSA9PT0gTm9kZS5DREFUQV9TRUNUSU9OX05PREUgPyBOb2RlLlRFWFRfTk9E
RSA6IGxlZnQuX25vZGVUeXBlOwotICAgICAgICAgICAgdmFyIHJpZ2h0VHlwZSA9IHJpZ2h0Ll9u
b2RlVHlwZSA9PT0gTm9kZS5DREFUQV9TRUNUSU9OX05PREUgPyBOb2RlLlRFWFRfTk9ERSA6IHJp
Z2h0Ll9ub2RlVHlwZTsKLSAgICAgICAgICAgIHJldHVybiBsZWZ0VHlwZSA9PT0gcmlnaHRUeXBl
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNpYmxpbmdzID0gdGhpcy5wYXJlbnROb2RlID8g
dGhpcy5wYXJlbnROb2RlLmNoaWxkcmVuIDogbnVsbDsKLSAgICAgICAgaWYgKCFzaWJsaW5ncykK
LSAgICAgICAgICAgIHJldHVybiAwOyAvLyBSb290IG5vZGUgLSBubyBzaWJsaW5ncy4KLSAgICAg
ICAgdmFyIGhhc1NhbWVOYW1lZEVsZW1lbnRzOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNpYmxpbmdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYXJlTm9kZXNTaW1pbGFy
KHRoaXMsIHNpYmxpbmdzW2ldKSAmJiBzaWJsaW5nc1tpXSAhPT0gdGhpcykgewotICAgICAgICAg
ICAgICAgIGhhc1NhbWVOYW1lZEVsZW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhc1NhbWVOYW1lZEVs
ZW1lbnRzKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHZhciBvd25JbmRleCA9IDE7
IC8vIFhQYXRoIGluZGljZXMgc3RhcnQgd2l0aCAxLgotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHNpYmxpbmdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYXJlTm9kZXNTaW1p
bGFyKHRoaXMsIHNpYmxpbmdzW2ldKSkgewotICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nc1tp
XSA9PT0gdGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG93bkluZGV4OwotICAgICAg
ICAgICAgICAgICsrb3duSW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIC0xOyAvLyBBbiBlcnJvciBvY2N1cnJlZDogfHRoaXN8IG5vdCBmb3VuZCBpbiBwYXJl
bnQncyBjaGlsZHJlbi4KLSAgICB9LAotCi0gICAgX3VwZGF0ZUNoaWxkVXNlclByb3BlcnR5Q291
bnRzT25SZW1vdmFsOiBmdW5jdGlvbihwYXJlbnROb2RlKQotICAgIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IHt9OwotICAgICAgICBpZiAodGhpcy5fdXNlclByb3BlcnRpZXMpIHsKLSAgICAgICAg
ICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdXNlclByb3BlcnRpZXMpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0W25hbWVdID0gKHJlc3VsdFtuYW1lXSB8fCAwKSArIDE7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAodGhpcy5fZGVzY2VuZGFudFVzZXJQcm9wZXJ0eUNvdW50ZXJzKSB7Ci0gICAg
ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX2Rlc2NlbmRhbnRVc2VyUHJvcGVydHlDb3Vu
dGVycykgewotICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gdGhpcy5fZGVzY2VuZGFudFVz
ZXJQcm9wZXJ0eUNvdW50ZXJzW25hbWVdOwotICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9
IChyZXN1bHRbbmFtZV0gfHwgMCkgKyBjb3VudGVyOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgZm9yICh2YXIgbmFtZSBpbiByZXN1bHQpCi0gICAgICAgICAgICBwYXJlbnRO
b2RlLl91cGRhdGVEZXNjZW5kYW50VXNlclByb3BlcnR5Q291bnQobmFtZSwgLXJlc3VsdFtuYW1l
XSk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVEZXNjZW5kYW50VXNlclByb3BlcnR5Q291bnQ6IGZ1
bmN0aW9uKG5hbWUsIGRlbHRhKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9kZXNjZW5kYW50
VXNlclByb3BlcnR5Q291bnRlcnMuaGFzT3duUHJvcGVydHkobmFtZSkpCi0gICAgICAgICAgICB0
aGlzLl9kZXNjZW5kYW50VXNlclByb3BlcnR5Q291bnRlcnNbbmFtZV0gPSAwOwotICAgICAgICB0
aGlzLl9kZXNjZW5kYW50VXNlclByb3BlcnR5Q291bnRlcnNbbmFtZV0gKz0gZGVsdGE7Ci0gICAg
ICAgIGlmICghdGhpcy5fZGVzY2VuZGFudFVzZXJQcm9wZXJ0eUNvdW50ZXJzW25hbWVdKQotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2Rlc2NlbmRhbnRVc2VyUHJvcGVydHlDb3VudGVyc1tuYW1l
XTsKLSAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkKLSAgICAgICAgICAgIHRoaXMucGFyZW50
Tm9kZS5fdXBkYXRlRGVzY2VuZGFudFVzZXJQcm9wZXJ0eUNvdW50KG5hbWUsIGRlbHRhKTsKLSAg
ICB9LAotCi0gICAgc2V0VXNlclByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgewotICAgICAgICAgICAgdGhpcy5yZW1vdmVV
c2VyUHJvcGVydHkobmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodGhpcy5wYXJlbnROb2RlICYmICF0aGlzLl91c2VyUHJvcGVydGllcy5oYXNPd25Q
cm9wZXJ0eShuYW1lKSkKLSAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5fdXBkYXRlRGVzY2Vu
ZGFudFVzZXJQcm9wZXJ0eUNvdW50KG5hbWUsIDEpOwotCi0gICAgICAgIHRoaXMuX3VzZXJQcm9w
ZXJ0aWVzW25hbWVdID0gdmFsdWU7Ci0gICAgfSwKLQotICAgIHJlbW92ZVVzZXJQcm9wZXJ0eTog
ZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fdXNlclByb3BlcnRpZXMu
aGFzT3duUHJvcGVydHkobmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVs
ZXRlIHRoaXMuX3VzZXJQcm9wZXJ0aWVzW25hbWVdOwotICAgICAgICBpZiAodGhpcy5wYXJlbnRO
b2RlKQotICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLl91cGRhdGVEZXNjZW5kYW50VXNlclBy
b3BlcnR5Q291bnQobmFtZSwgLTEpOwotICAgIH0sCi0KLSAgICBnZXRVc2VyUHJvcGVydHk6IGZ1
bmN0aW9uKG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdXNlclByb3BlcnRpZXMg
PyB0aGlzLl91c2VyUHJvcGVydGllc1tuYW1lXSA6IG51bGw7Ci0gICAgfSwKLQotICAgIGRlc2Nl
bmRhbnRVc2VyUHJvcGVydHlDb3VudDogZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9kZXNjZW5kYW50VXNlclByb3BlcnR5Q291bnRlcnMgJiYgdGhpcy5fZGVzY2Vu
ZGFudFVzZXJQcm9wZXJ0eUNvdW50ZXJzW25hbWVdID8gdGhpcy5fZGVzY2VuZGFudFVzZXJQcm9w
ZXJ0eUNvdW50ZXJzW25hbWVdIDogMDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IHVybAotICAgICAqIEByZXR1cm4gez9zdHJpbmd9Ci0gICAgICovCi0gICAgcmVz
b2x2ZVVSTDogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgaWYgKCF1cmwpCi0gICAgICAg
ICAgICByZXR1cm4gdXJsOwotICAgICAgICBmb3IgKHZhciBmcmFtZU93bmVyQ2FuZGlkYXRlID0g
dGhpczsgZnJhbWVPd25lckNhbmRpZGF0ZTsgZnJhbWVPd25lckNhbmRpZGF0ZSA9IGZyYW1lT3du
ZXJDYW5kaWRhdGUucGFyZW50Tm9kZSkgewotICAgICAgICAgICAgaWYgKGZyYW1lT3duZXJDYW5k
aWRhdGUuYmFzZVVSTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlBhcnNl
ZFVSTC5jb21wbGV0ZVVSTChmcmFtZU93bmVyQ2FuZGlkYXRlLmJhc2VVUkwsIHVybCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQotCi0vKioKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuRE9NTm9kZX0KLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuRE9NQWdlbnR9IGRvbUFnZW50Ci0gKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGV9IHBh
eWxvYWQKLSAqLwotV2ViSW5zcGVjdG9yLkRPTURvY3VtZW50ID0gZnVuY3Rpb24oZG9tQWdlbnQs
IHBheWxvYWQpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkRPTU5vZGUuY2FsbCh0aGlzLCBkb21BZ2Vu
dCwgdGhpcywgZmFsc2UsIHBheWxvYWQpOwotICAgIHRoaXMuZG9jdW1lbnRVUkwgPSBwYXlsb2Fk
LmRvY3VtZW50VVJMIHx8ICIiOwotICAgIHRoaXMuYmFzZVVSTCA9IC8qKiBAdHlwZSB7c3RyaW5n
fSAqLyAocGF5bG9hZC5iYXNlVVJMKTsKLSAgICBjb25zb2xlLmFzc2VydCh0aGlzLmJhc2VVUkwp
OwotICAgIHRoaXMueG1sVmVyc2lvbiA9IHBheWxvYWQueG1sVmVyc2lvbjsKLSAgICB0aGlzLl9s
aXN0ZW5lcnMgPSB7fTsKLX0KLQotV2ViSW5zcGVjdG9yLkRPTURvY3VtZW50LnByb3RvdHlwZSA9
IHsKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZQotfQotCi0v
KioKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQGNvbnN0cnVjdG9yCi0g
Ki8KLVdlYkluc3BlY3Rvci5ET01BZ2VudCA9IGZ1bmN0aW9uKCkgewotICAgIC8qKiBAdHlwZSB7
T2JqZWN0fHVuZGVmaW5lZH0gKi8KLSAgICB0aGlzLl9pZFRvRE9NTm9kZSA9IHt9OwotICAgIHRo
aXMuX2RvY3VtZW50ID0gbnVsbDsKLSAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkcyA9IHt9
OwotICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJET01EaXNwYXRjaGVyKG5ldyBXZWJJbnNw
ZWN0b3IuRE9NRGlzcGF0Y2hlcih0aGlzKSk7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5zZXR0aW5n
cy5lbXVsYXRlVG91Y2hFdmVudHMuZ2V0KCkpCi0gICAgICAgIHRoaXMuX2VtdWxhdGVUb3VjaEV2
ZW50c0NoYW5nZWQoKTsKLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZW11bGF0ZVRvdWNoRXZl
bnRzLmFkZENoYW5nZUxpc3RlbmVyKHRoaXMuX2VtdWxhdGVUb3VjaEV2ZW50c0NoYW5nZWQsIHRo
aXMpOwotfQotCi1XZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzID0gewotICAgIEF0dHJNb2Rp
ZmllZDogIkF0dHJNb2RpZmllZCIsCi0gICAgQXR0clJlbW92ZWQ6ICJBdHRyUmVtb3ZlZCIsCi0g
ICAgQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiAiQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwKLSAgICBO
b2RlSW5zZXJ0ZWQ6ICJOb2RlSW5zZXJ0ZWQiLAotICAgIE5vZGVSZW1vdmVkOiAiTm9kZVJlbW92
ZWQiLAotICAgIERvY3VtZW50VXBkYXRlZDogIkRvY3VtZW50VXBkYXRlZCIsCi0gICAgQ2hpbGRO
b2RlQ291bnRVcGRhdGVkOiAiQ2hpbGROb2RlQ291bnRVcGRhdGVkIiwKLSAgICBJbnNwZWN0RWxl
bWVudFJlcXVlc3RlZDogIkluc3BlY3RFbGVtZW50UmVxdWVzdGVkIiwKLSAgICBVbmRvUmVkb1Jl
cXVlc3RlZDogIlVuZG9SZWRvUmVxdWVzdGVkIiwKLSAgICBVbmRvUmVkb0NvbXBsZXRlZDogIlVu
ZG9SZWRvQ29tcGxldGVkIgotfQotCi1XZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlID0g
ewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkRPTURvY3Vt
ZW50KT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdERvY3VtZW50OiBmdW5jdGlvbihj
YWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudCkgewotICAgICAgICAg
ICAgaWYgKGNhbGxiYWNrKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX2RvY3VtZW50
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9w
ZW5kaW5nRG9jdW1lbnRSZXF1ZXN0Q2FsbGJhY2tzKSB7Ci0gICAgICAgICAgICB0aGlzLl9wZW5k
aW5nRG9jdW1lbnRSZXF1ZXN0Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcGVuZGluZ0RvY3VtZW50UmVxdWVz
dENhbGxiYWNrcyA9IFtjYWxsYmFja107Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEB0aGlz
IHtXZWJJbnNwZWN0b3IuRE9NQWdlbnR9Ci0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVy
cm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGV9IHJvb3QKLSAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG9uRG9jdW1lbnRBdmFpbGFibGUoZXJyb3IsIHJvb3Qp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZXJyb3IpCi0gICAgICAgICAgICAgICAgdGhp
cy5fc2V0RG9jdW1lbnQocm9vdCk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5fcGVuZGluZ0RvY3VtZW50UmVxdWVzdENhbGxiYWNrcy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX3BlbmRpbmdEb2N1bWVudFJlcXVlc3RD
YWxsYmFja3NbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQotICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFjayh0aGlzLl9kb2N1bWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ0RvY3VtZW50UmVxdWVzdENhbGxiYWNrczsKLSAgICAg
ICAgfQotCi0gICAgICAgIERPTUFnZW50LmdldERvY3VtZW50KG9uRG9jdW1lbnRBdmFpbGFibGUu
YmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5ET01Eb2N1bWVudD99Ci0gICAgICovCi0gICAgZXhpc3RpbmdEb2N1bWVudDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50OwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1J1bnRpbWVBZ2VudC5SZW1vdGVPYmplY3RJZH0gb2JqZWN0
SWQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9ET01BZ2VudC5Ob2RlSWQpPX0gY2FsbGJhY2sK
LSAgICAgKi8KLSAgICBwdXNoTm9kZVRvRnJvbnRlbmQ6IGZ1bmN0aW9uKG9iamVjdElkLCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBjYWxsYmFja0Nhc3QgPSAvKiogQHR5cGUge2Z1bmN0
aW9uKCopfSAqLyhjYWxsYmFjayk7Ci0gICAgICAgIHRoaXMuX2Rpc3BhdGNoV2hlbkRvY3VtZW50
QXZhaWxhYmxlKERPTUFnZW50LnJlcXVlc3ROb2RlLmJpbmQoRE9NQWdlbnQsIG9iamVjdElkKSwg
Y2FsbGJhY2tDYXN0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHBhdGgKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9XZWJJbnNwZWN0b3IuRE9NTm9kZSk9fSBj
YWxsYmFjawotICAgICAqLwotICAgIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZDogZnVuY3Rpb24o
cGF0aCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgY2FsbGJhY2tDYXN0ID0gLyoqIEB0
eXBlIHtmdW5jdGlvbigqKX0gKi8oY2FsbGJhY2spOwotICAgICAgICB0aGlzLl9kaXNwYXRjaFdo
ZW5Eb2N1bWVudEF2YWlsYWJsZShET01BZ2VudC5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQuYmlu
ZChET01BZ2VudCwgcGF0aCksIGNhbGxiYWNrQ2FzdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oKik9fSBjYWxsYmFjawotICAgICAqIEByZXR1cm4ge2Z1bmN0
aW9uKD9Qcm90b2NvbC5FcnJvciwqPSl8dW5kZWZpbmVkfQotICAgICAqLwotICAgIF93cmFwQ2xp
ZW50Q2FsbGJhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgaWYgKCFjYWxs
YmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJh
bSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0geyo9fSByZXN1bHQK
LSAgICAgICAgICovCi0gICAgICAgIHJldHVybiBmdW5jdGlvbihlcnJvciwgcmVzdWx0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5n
IHRoZSBhY3R1YWwgZXJyb3IuCi0gICAgICAgICAgICBjYWxsYmFjayhlcnJvciA/IG51bGwgOiBy
ZXN1bHQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oZnVuY3Rpb24oP1Byb3RvY29sLkVycm9yLCAqPSkpfSBmdW5jCi0gICAgICogQHBhcmFt
IHtmdW5jdGlvbigqKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgX2Rpc3BhdGNoV2hlbkRvY3Vt
ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihmdW5jLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZh
ciBjYWxsYmFja1dyYXBwZXIgPSAvKiogQHR5cGUge2Z1bmN0aW9uKD9Qcm90b2NvbC5FcnJvciwg
Kj0pfSAqLyh0aGlzLl93cmFwQ2xpZW50Q2FsbGJhY2soY2FsbGJhY2spKTsKLQotICAgICAgICBm
dW5jdGlvbiBvbkRvY3VtZW50QXZhaWxhYmxlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHRoaXMuX2RvY3VtZW50KQotICAgICAgICAgICAgICAgIGZ1bmMoY2FsbGJhY2tXcmFwcGVyKTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1dyYXBwZXIp
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrV3JhcHBlcigiTm8gZG9jdW1lbnQiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB0aGlzLnJlcXVlc3REb2N1bWVudChvbkRv
Y3VtZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKLSAgICAgKi8KLSAgICBfYXR0cmlidXRl
TW9kaWZpZWQ6IGZ1bmN0aW9uKG5vZGVJZCwgbmFtZSwgdmFsdWUpCi0gICAgewotICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuX2lkVG9ET01Ob2RlW25vZGVJZF07Ci0gICAgICAgIGlmICghbm9kZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBub2RlLl9zZXRBdHRyaWJ1dGUobmFtZSwg
dmFsdWUpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuRE9NQWdlbnQuRXZlbnRzLkF0dHJNb2RpZmllZCwgeyBub2RlOiBub2RlLCBuYW1lOiBuYW1l
IH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0g
bm9kZUlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKi8KLSAgICBfYXR0cmli
dXRlUmVtb3ZlZDogZnVuY3Rpb24obm9kZUlkLCBuYW1lKQotICAgIHsKLSAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRdOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG5vZGUuX3JlbW92ZUF0dHJpYnV0ZShuYW1lKTsKLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTUFnZW50
LkV2ZW50cy5BdHRyUmVtb3ZlZCwgeyBub2RlOiBub2RlLCBuYW1lOiBuYW1lIH0pOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxET01BZ2VudC5Ob2RlSWQ+fSBub2Rl
SWRzCi0gICAgICovCi0gICAgX2lubGluZVN0eWxlSW52YWxpZGF0ZWQ6IGZ1bmN0aW9uKG5vZGVJ
ZHMpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkc1tub2RlSWRzW2ldXSA9
IHRydWU7Ci0gICAgICAgIGlmICgiX2xvYWROb2RlQXR0cmlidXRlc1RpbWVvdXQiIGluIHRoaXMp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2xvYWROb2RlQXR0cmlidXRlc1Rp
bWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX2xvYWROb2RlQXR0cmlidXRlcy5iaW5kKHRoaXMpLCAw
KTsKLSAgICB9LAotCi0gICAgX2xvYWROb2RlQXR0cmlidXRlczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgLyoqCi0gICAgICAgICAqIEB0aGlzIHtXZWJJbnNwZWN0b3IuRE9NQWdlbnR9Ci0g
ICAgICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKLSAgICAgICAgICogQHBh
cmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0
cmluZz59IGF0dHJpYnV0ZXMKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KG5vZGVJZCwgZXJyb3IsIGF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChl
cnJvcikgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBjYWxsaW5nIF9sb2FkTm9kZUF0dHJp
YnV0ZXMgYXN5bmNocm9ub3VzbHksIGl0IGlzIG9rIGlmIG5vZGUgaXMgbm90IGZvdW5kLgotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKLSAgICAgICAgICAgIGlmIChub2RlKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUuX3NldEF0dHJpYnV0ZXNQYXlsb2FkKGF0dHJpYnV0ZXMp
KQotICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkF0dHJNb2RpZmllZCwgeyBub2RlOiBub2RlLCBuYW1l
OiAic3R5bGUiIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRl
IHRoaXMuX2xvYWROb2RlQXR0cmlidXRlc1RpbWVvdXQ7Ci0KLSAgICAgICAgZm9yICh2YXIgbm9k
ZUlkIGluIHRoaXMuX2F0dHJpYnV0ZUxvYWROb2RlSWRzKSB7Ci0gICAgICAgICAgICB2YXIgbm9k
ZUlkQXNOdW1iZXIgPSBwYXJzZUludChub2RlSWQsIDEwKTsKLSAgICAgICAgICAgIERPTUFnZW50
LmdldEF0dHJpYnV0ZXMobm9kZUlkQXNOdW1iZXIsIGNhbGxiYWNrLmJpbmQodGhpcywgbm9kZUlk
QXNOdW1iZXIpKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlk
cyA9IHt9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJ
ZH0gbm9kZUlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbHVlCi0gICAgICovCi0gICAg
X2NoYXJhY3RlckRhdGFNb2RpZmllZDogZnVuY3Rpb24obm9kZUlkLCBuZXdWYWx1ZSkKLSAgICB7
Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKLSAgICAgICAg
bm9kZS5fbm9kZVZhbHVlID0gbmV3VmFsdWU7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkLCBub2RlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5O
b2RlSWR9IG5vZGVJZAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5ET01Ob2RlfHVuZGVm
aW5lZH0KLSAgICAgKi8KLSAgICBub2RlRm9ySWQ6IGZ1bmN0aW9uKG5vZGVJZCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRdOwotICAgIH0sCi0KLSAgICBf
ZG9jdW1lbnRVcGRhdGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9zZXREb2N1
bWVudChudWxsKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5O
b2RlfSBwYXlsb2FkCi0gICAgICovCi0gICAgX3NldERvY3VtZW50OiBmdW5jdGlvbihwYXlsb2Fk
KQotICAgIHsKLSAgICAgICAgdGhpcy5faWRUb0RPTU5vZGUgPSB7fTsKLSAgICAgICAgaWYgKHBh
eWxvYWQgJiYgIm5vZGVJZCIgaW4gcGF5bG9hZCkKLSAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50
ID0gbmV3IFdlYkluc3BlY3Rvci5ET01Eb2N1bWVudCh0aGlzLCBwYXlsb2FkKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSBudWxsOwotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkRvY3Vt
ZW50VXBkYXRlZCwgdGhpcy5fZG9jdW1lbnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge0RPTUFnZW50Lk5vZGV9IHBheWxvYWQKLSAgICAgKi8KLSAgICBfc2V0RGV0YWNoZWRS
b290OiBmdW5jdGlvbihwYXlsb2FkKQotICAgIHsKLSAgICAgICAgaWYgKHBheWxvYWQubm9kZU5h
bWUgPT09ICIjZG9jdW1lbnQiKQotICAgICAgICAgICAgbmV3IFdlYkluc3BlY3Rvci5ET01Eb2N1
bWVudCh0aGlzLCBwYXlsb2FkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3IFdlYklu
c3BlY3Rvci5ET01Ob2RlKHRoaXMsIG51bGwsIGZhbHNlLCBwYXlsb2FkKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IHBhcmVudElkCi0gICAgICog
QHBhcmFtIHtBcnJheS48RE9NQWdlbnQuTm9kZT59IHBheWxvYWRzCi0gICAgICovCi0gICAgX3Nl
dENoaWxkTm9kZXM6IGZ1bmN0aW9uKHBhcmVudElkLCBwYXlsb2FkcykKLSAgICB7Ci0gICAgICAg
IGlmICghcGFyZW50SWQgJiYgcGF5bG9hZHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aGlzLl9z
ZXREZXRhY2hlZFJvb3QocGF5bG9hZHNbMF0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuX2lkVG9ET01Ob2RlW3BhcmVudElkXTsK
LSAgICAgICAgcGFyZW50Ll9zZXRDaGlsZHJlblBheWxvYWQocGF5bG9hZHMpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IG5ld1ZhbHVlCi0gICAgICovCi0gICAgX2NoaWxkTm9kZUNvdW50VXBk
YXRlZDogZnVuY3Rpb24obm9kZUlkLCBuZXdWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHZhciBub2Rl
ID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKLSAgICAgICAgbm9kZS5fY2hpbGROb2RlQ291
bnQgPSBuZXdWYWx1ZTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5DaGlsZE5vZGVDb3VudFVwZGF0ZWQsIG5vZGUpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gcGFyZW50
SWQKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gcHJldklkCi0gICAgICogQHBhcmFt
IHtET01BZ2VudC5Ob2RlfSBwYXlsb2FkCi0gICAgICovCi0gICAgX2NoaWxkTm9kZUluc2VydGVk
OiBmdW5jdGlvbihwYXJlbnRJZCwgcHJldklkLCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgdmFy
IHBhcmVudCA9IHRoaXMuX2lkVG9ET01Ob2RlW3BhcmVudElkXTsKLSAgICAgICAgdmFyIHByZXYg
PSB0aGlzLl9pZFRvRE9NTm9kZVtwcmV2SWRdOwotICAgICAgICB2YXIgbm9kZSA9IHBhcmVudC5f
aW5zZXJ0Q2hpbGQocHJldiwgcGF5bG9hZCk7Ci0gICAgICAgIHRoaXMuX2lkVG9ET01Ob2RlW25v
ZGUuaWRdID0gbm9kZTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5Ob2RlSW5zZXJ0ZWQsIG5vZGUpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gcGFyZW50SWQKLSAgICAg
KiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCi0gICAgICovCi0gICAgX2NoaWxkTm9k
ZVJlbW92ZWQ6IGZ1bmN0aW9uKHBhcmVudElkLCBub2RlSWQpCi0gICAgewotICAgICAgICB2YXIg
cGFyZW50ID0gdGhpcy5faWRUb0RPTU5vZGVbcGFyZW50SWRdOwotICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuX2lkVG9ET01Ob2RlW25vZGVJZF07Ci0gICAgICAgIHBhcmVudC5fcmVtb3ZlQ2hpbGQo
bm9kZSk7Ci0gICAgICAgIHRoaXMuX3VuYmluZChub2RlKTsKLSAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5Ob2RlUmVtb3Zl
ZCwge25vZGU6IG5vZGUsIHBhcmVudDogcGFyZW50fSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSByb290SWQKLSAgICAgKi8KLSAgICBfc2hhZG93
Um9vdFBvcHBlZDogZnVuY3Rpb24ocm9vdElkKQotICAgIHsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRE9NTm9kZX0gbm9kZQotICAgICAqLwotICAgIF91
bmJpbmQ6IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5faWRUb0RP
TU5vZGVbbm9kZS5pZF07Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBub2RlLmNoaWxkcmVuICYm
IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fdW5iaW5k
KG5vZGUuY2hpbGRyZW5baV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gbm9kZUlkCi0gICAgICovCi0gICAgaW5zcGVjdEVsZW1lbnQ6IGZ1bmN0aW9uKG5vZGVJ
ZCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsK
LSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkluc3BlY3RFbGVtZW50UmVxdWVzdGVk
LCBub2RlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5
Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihudW1iZXIpfSBzZWFyY2hDYWxsYmFjawotICAgICAq
LwotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBzZWFyY2hDYWxsYmFjaykKLSAg
ICB7Ci0gICAgICAgIHRoaXMuY2FuY2VsU2VhcmNoKCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge3N0
cmluZ30gc2VhcmNoSWQKLSAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHJlc3VsdHNDb3VudAot
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHNlYXJjaElkLCBy
ZXN1bHRzQ291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaElkID0gc2Vh
cmNoSWQ7Ci0gICAgICAgICAgICBzZWFyY2hDYWxsYmFjayhyZXN1bHRzQ291bnQpOwotICAgICAg
ICB9Ci0gICAgICAgIERPTUFnZW50LnBlcmZvcm1TZWFyY2gocXVlcnksIGNhbGxiYWNrLmJpbmQo
dGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgK
LSAgICAgKiBAcGFyYW0gez9mdW5jdGlvbihET01BZ2VudC5Ob2RlKX0gY2FsbGJhY2sKLSAgICAg
Ki8KLSAgICBzZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGluZGV4LCBjYWxsYmFjaykKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9zZWFyY2hJZCkgewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICAgICAqIEBwYXJh
bSB7QXJyYXkuPG51bWJlcj59IG5vZGVJZHMKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
ZnVuY3Rpb24gbXljYWxsYmFjayhlcnJvciwgbm9kZUlkcykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cihlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChub2RlSWRzLmxlbmd0aCAhPSAxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRzWzBdXSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBET01BZ2VudC5nZXRTZWFyY2hSZXN1bHRzKHRoaXMu
X3NlYXJjaElkLCBpbmRleCwgaW5kZXggKyAxLCBteWNhbGxiYWNrLmJpbmQodGhpcykpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwotICAgIH0sCi0KLSAgICBj
YW5jZWxTZWFyY2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZWFyY2hJ
ZCkgewotICAgICAgICAgICAgRE9NQWdlbnQuZGlzY2FyZFNlYXJjaFJlc3VsdHModGhpcy5fc2Vh
cmNoSWQpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaElkOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JzCi0gICAgICogQHBhcmFtIHtmdW5jdGlv
big/RE9NQWdlbnQuTm9kZUlkKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgcXVlcnlTZWxlY3Rv
cjogZnVuY3Rpb24obm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAg
dmFyIGNhbGxiYWNrQ2FzdCA9IC8qKiBAdHlwZSB7ZnVuY3Rpb24oKil8dW5kZWZpbmVkfSAqLyhj
YWxsYmFjayk7Ci0gICAgICAgIERPTUFnZW50LnF1ZXJ5U2VsZWN0b3Iobm9kZUlkLCBzZWxlY3Rv
cnMsIHRoaXMuX3dyYXBDbGllbnRDYWxsYmFjayhjYWxsYmFja0Nhc3QpKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IG5vZGVJZAotICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBzZWxlY3RvcnMKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9BcnJheS48
RE9NQWdlbnQuTm9kZUlkPik9fSBjYWxsYmFjawotICAgICAqLwotICAgIHF1ZXJ5U2VsZWN0b3JB
bGw6IGZ1bmN0aW9uKG5vZGVJZCwgc2VsZWN0b3JzLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAg
IHZhciBjYWxsYmFja0Nhc3QgPSAvKiogQHR5cGUge2Z1bmN0aW9uKCopfHVuZGVmaW5lZH0gKi8o
Y2FsbGJhY2spOwotICAgICAgICBET01BZ2VudC5xdWVyeVNlbGVjdG9yQWxsKG5vZGVJZCwgc2Vs
ZWN0b3JzLCB0aGlzLl93cmFwQ2xpZW50Q2FsbGJhY2soY2FsbGJhY2tDYXN0KSk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkPX0gbm9kZUlkCi0gICAg
ICogQHBhcmFtIHtzdHJpbmc9fSBtb2RlCi0gICAgICogQHBhcmFtIHtSdW50aW1lQWdlbnQuUmVt
b3RlT2JqZWN0SWQ9fSBvYmplY3RJZAotICAgICAqLwotICAgIGhpZ2hsaWdodERPTU5vZGU6IGZ1
bmN0aW9uKG5vZGVJZCwgbW9kZSwgb2JqZWN0SWQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
aGlkZURPTU5vZGVIaWdobGlnaHRUaW1lb3V0KSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQo
dGhpcy5faGlkZURPTU5vZGVIaWdobGlnaHRUaW1lb3V0KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9oaWRlRE9NTm9kZUhpZ2hsaWdodFRpbWVvdXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAob2JqZWN0SWQgfHwgbm9kZUlkKQotICAgICAgICAgICAgRE9NQWdlbnQuaGlnaGxpZ2h0Tm9k
ZSh0aGlzLl9idWlsZEhpZ2hsaWdodENvbmZpZyhtb2RlKSwgb2JqZWN0SWQgPyB1bmRlZmluZWQg
OiBub2RlSWQsIG9iamVjdElkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgRE9NQWdlbnQu
aGlkZUhpZ2hsaWdodCgpOwotICAgIH0sCi0KLSAgICBoaWRlRE9NTm9kZUhpZ2hsaWdodDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5oaWdobGlnaHRET01Ob2RlKDApOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCi0gICAg
ICovCi0gICAgaGlnaGxpZ2h0RE9NTm9kZUZvclR3b1NlY29uZHM6IGZ1bmN0aW9uKG5vZGVJZCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuaGlnaGxpZ2h0RE9NTm9kZShub2RlSWQpOwotICAgICAgICB0
aGlzLl9oaWRlRE9NTm9kZUhpZ2hsaWdodFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuaGlkZURP
TU5vZGVIaWdobGlnaHQuYmluZCh0aGlzKSwgMjAwMCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1By
b3RvY29sLkVycm9yKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgc2V0SW5zcGVjdE1vZGVFbmFi
bGVkOiBmdW5jdGlvbihlbmFibGVkLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIERPTUFnZW50
LnNldEluc3BlY3RNb2RlRW5hYmxlZChlbmFibGVkLCB0aGlzLl9idWlsZEhpZ2hsaWdodENvbmZp
ZygpLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5n
PX0gbW9kZQotICAgICAqLwotICAgIF9idWlsZEhpZ2hsaWdodENvbmZpZzogZnVuY3Rpb24obW9k
ZSkKLSAgICB7Ci0gICAgICAgIG1vZGUgPSBtb2RlIHx8ICJhbGwiOwotICAgICAgICB2YXIgaGln
aGxpZ2h0Q29uZmlnID0geyBzaG93SW5mbzogbW9kZSA9PT0gImFsbCIsIHNob3dSdWxlcnM6IFdl
Ykluc3BlY3Rvci5zZXR0aW5ncy5zaG93TWV0cmljc1J1bGVycy5nZXQoKSB9OwotICAgICAgICBp
ZiAobW9kZSA9PT0gImFsbCIgfHwgbW9kZSA9PT0gImNvbnRlbnQiKQotICAgICAgICAgICAgaGln
aGxpZ2h0Q29uZmlnLmNvbnRlbnRDb2xvciA9IFdlYkluc3BlY3Rvci5Db2xvci5QYWdlSGlnaGxp
Z2h0LkNvbnRlbnQudG9Qcm90b2NvbFJHQkEoKTsKLQotICAgICAgICBpZiAobW9kZSA9PT0gImFs
bCIgfHwgbW9kZSA9PT0gInBhZGRpbmciKQotICAgICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLnBh
ZGRpbmdDb2xvciA9IFdlYkluc3BlY3Rvci5Db2xvci5QYWdlSGlnaGxpZ2h0LlBhZGRpbmcudG9Q
cm90b2NvbFJHQkEoKTsKLQotICAgICAgICBpZiAobW9kZSA9PT0gImFsbCIgfHwgbW9kZSA9PT0g
ImJvcmRlciIpCi0gICAgICAgICAgICBoaWdobGlnaHRDb25maWcuYm9yZGVyQ29sb3IgPSBXZWJJ
bnNwZWN0b3IuQ29sb3IuUGFnZUhpZ2hsaWdodC5Cb3JkZXIudG9Qcm90b2NvbFJHQkEoKTsKLQot
ICAgICAgICBpZiAobW9kZSA9PT0gImFsbCIgfHwgbW9kZSA9PT0gIm1hcmdpbiIpCi0gICAgICAg
ICAgICBoaWdobGlnaHRDb25maWcubWFyZ2luQ29sb3IgPSBXZWJJbnNwZWN0b3IuQ29sb3IuUGFn
ZUhpZ2hsaWdodC5NYXJnaW4udG9Qcm90b2NvbFJHQkEoKTsKLQotICAgICAgICByZXR1cm4gaGln
aGxpZ2h0Q29uZmlnOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5ET01Ob2RlfSBub2RlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9jb2wuRXJy
b3IpPX0gY2FsbGJhY2sKLSAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbig/UHJvdG9jb2wuRXJyb3Ip
fQotICAgICAqLwotICAgIF9tYXJrUmV2aXNpb246IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKQot
ICAgIHsKLSAgICAgICAgZnVuY3Rpb24gd3JhcHBlckZ1bmN0aW9uKGVycm9yKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIWVycm9yKQotICAgICAgICAgICAgICAgIHRoaXMubWFya1VuZG9h
YmxlU3RhdGUoKTsKLQotICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQotICAgICAgICAgICAgICAg
IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHdyYXBwZXJGdW5jdGlvbi5iaW5kKHRoaXMpOwotICAgIH0sCi0KLSAgICBfZW11bGF0ZVRv
dWNoRXZlbnRzQ2hhbmdlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgY29uc3QgaW5qZWN0
ZWRGdW5jdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgY29uc3QgdG91Y2hFdmVudHMg
PSBbIm9udG91Y2hzdGFydCIsICJvbnRvdWNoZW5kIiwgIm9udG91Y2htb3ZlIiwgIm9udG91Y2hj
YW5jZWwiXTsKLSAgICAgICAgICAgIHZhciByZWNlcGllbnRzID0gW3dpbmRvdy5fX3Byb3RvX18s
IGRvY3VtZW50Ll9fcHJvdG9fX107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRv
dWNoRXZlbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCByZWNlcGllbnRzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
KHRvdWNoRXZlbnRzW2ldIGluIHJlY2VwaWVudHNbal0pKQotICAgICAgICAgICAgICAgICAgICAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlY2VwaWVudHNbal0sIHRvdWNoRXZlbnRzW2ldLCB7
IHZhbHVlOiBudWxsLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJh
YmxlOiB0cnVlIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBlbXVsYXRpb25FbmFibGVkID0gV2ViSW5zcGVjdG9yLnNldHRpbmdz
LmVtdWxhdGVUb3VjaEV2ZW50cy5nZXQoKTsKLSAgICAgICAgaWYgKGVtdWxhdGlvbkVuYWJsZWQg
JiYgIXRoaXMuX2FkZFRvdWNoRXZlbnRzU2NyaXB0SW5qZWN0aW5nKSB7Ci0gICAgICAgICAgICB0
aGlzLl9hZGRUb3VjaEV2ZW50c1NjcmlwdEluamVjdGluZyA9IHRydWU7Ci0gICAgICAgICAgICBQ
YWdlQWdlbnQuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCgiKCIgKyBpbmplY3RlZEZ1bmN0aW9u
LnRvU3RyaW5nKCkgKyAiKSgpIiwgc2NyaXB0QWRkZWRDYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fYWRkVG91Y2hFdmVu
dHNTY3JpcHRJZCAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBQYWdlQWdlbnQu
cmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCh0aGlzLl9hZGRUb3VjaEV2ZW50c1NjcmlwdElk
KTsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYWRkVG91Y2hFdmVudHNTY3JpcHRJZDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNjcmlwdEFkZGVk
Q2FsbGJhY2soZXJyb3IsIHNjcmlwdElkKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUg
dGhpcy5fYWRkVG91Y2hFdmVudHNTY3JpcHRJbmplY3Rpbmc7Ci0gICAgICAgICAgICBpZiAoZXJy
b3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdGhpcy5fYWRkVG91Y2hF
dmVudHNTY3JpcHRJZCA9IHNjcmlwdElkOwotICAgICAgICB9Ci0KLSAgICAgICAgUGFnZUFnZW50
LnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZChlbXVsYXRpb25FbmFibGVkKTsKLSAgICB9LAotCi0g
ICAgbWFya1VuZG9hYmxlU3RhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIERPTUFnZW50
Lm1hcmtVbmRvYWJsZVN0YXRlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
ZnVuY3Rpb24oP1Byb3RvY29sLkVycm9yKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgdW5kbzog
ZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICBmdW5jdGlvbiBteWNhbGxiYWNrKGVy
cm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLlVuZG9SZWRvQ29tcGxldGVkKTsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKGVycm9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuVW5kb1JlZG9S
ZXF1ZXN0ZWQpOwotICAgICAgICBET01BZ2VudC51bmRvKGNhbGxiYWNrKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9jb2wuRXJyb3IpPX0gY2FsbGJh
Y2sKLSAgICAgKi8KLSAgICByZWRvOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAg
IGZ1bmN0aW9uIG15Y2FsbGJhY2soZXJyb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuVW5k
b1JlZG9Db21wbGV0ZWQpOwotICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRP
TUFnZW50LkV2ZW50cy5VbmRvUmVkb1JlcXVlc3RlZCk7Ci0gICAgICAgIERPTUFnZW50LnJlZG8o
Y2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7RE9N
QWdlbnQuRGlzcGF0Y2hlcn0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRPTUFnZW50fSBkb21B
Z2VudAotICovCi1XZWJJbnNwZWN0b3IuRE9NRGlzcGF0Y2hlciA9IGZ1bmN0aW9uKGRvbUFnZW50
KQotewotICAgIHRoaXMuX2RvbUFnZW50ID0gZG9tQWdlbnQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5E
T01EaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLSAgICBkb2N1bWVudFVwZGF0ZWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RvbUFnZW50Ll9kb2N1bWVudFVwZGF0ZWQoKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IG5vZGVJZAot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVl
Ci0gICAgICovCi0gICAgYXR0cmlidXRlTW9kaWZpZWQ6IGZ1bmN0aW9uKG5vZGVJZCwgbmFtZSwg
dmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLl9kb21BZ2VudC5fYXR0cmlidXRlTW9kaWZpZWQo
bm9kZUlkLCBuYW1lLCB2YWx1ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAg
ICAqLwotICAgIGF0dHJpYnV0ZVJlbW92ZWQ6IGZ1bmN0aW9uKG5vZGVJZCwgbmFtZSkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2RvbUFnZW50Ll9hdHRyaWJ1dGVSZW1vdmVkKG5vZGVJZCwgbmFtZSk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPERPTUFnZW50Lk5vZGVJ
ZD59IG5vZGVJZHMKLSAgICAgKi8KLSAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkOiBmdW5jdGlv
bihub2RlSWRzKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tQWdlbnQuX2lubGluZVN0eWxlSW52
YWxpZGF0ZWQobm9kZUlkcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9N
QWdlbnQuTm9kZUlkfSBub2RlSWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyRGF0
YQotICAgICAqLwotICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZDogZnVuY3Rpb24obm9kZUlkLCBj
aGFyYWN0ZXJEYXRhKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tQWdlbnQuX2NoYXJhY3RlckRh
dGFNb2RpZmllZChub2RlSWQsIGNoYXJhY3RlckRhdGEpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gcGFyZW50SWQKLSAgICAgKiBAcGFyYW0ge0Fy
cmF5LjxET01BZ2VudC5Ob2RlPn0gcGF5bG9hZHMKLSAgICAgKi8KLSAgICBzZXRDaGlsZE5vZGVz
OiBmdW5jdGlvbihwYXJlbnRJZCwgcGF5bG9hZHMpCi0gICAgewotICAgICAgICB0aGlzLl9kb21B
Z2VudC5fc2V0Q2hpbGROb2RlcyhwYXJlbnRJZCwgcGF5bG9hZHMpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGNoaWxkTm9kZUNvdW50Ci0gICAgICovCi0gICAgY2hpbGROb2RlQ291bnRVcGRh
dGVkOiBmdW5jdGlvbihub2RlSWQsIGNoaWxkTm9kZUNvdW50KQotICAgIHsKLSAgICAgICAgdGhp
cy5fZG9tQWdlbnQuX2NoaWxkTm9kZUNvdW50VXBkYXRlZChub2RlSWQsIGNoaWxkTm9kZUNvdW50
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IHBh
cmVudE5vZGVJZAotICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBwcmV2aW91c05vZGVJ
ZAotICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZX0gcGF5bG9hZAotICAgICAqLwotICAgIGNo
aWxkTm9kZUluc2VydGVkOiBmdW5jdGlvbihwYXJlbnROb2RlSWQsIHByZXZpb3VzTm9kZUlkLCBw
YXlsb2FkKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tQWdlbnQuX2NoaWxkTm9kZUluc2VydGVk
KHBhcmVudE5vZGVJZCwgcHJldmlvdXNOb2RlSWQsIHBheWxvYWQpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gcGFyZW50Tm9kZUlkCi0gICAgICog
QHBhcmFtIHtET01BZ2VudC5Ob2RlSWR9IG5vZGVJZAotICAgICAqLwotICAgIGNoaWxkTm9kZVJl
bW92ZWQ6IGZ1bmN0aW9uKHBhcmVudE5vZGVJZCwgbm9kZUlkKQotICAgIHsKLSAgICAgICAgdGhp
cy5fZG9tQWdlbnQuX2NoaWxkTm9kZVJlbW92ZWQocGFyZW50Tm9kZUlkLCBub2RlSWQpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gaG9zdElkCi0g
ICAgICogQHBhcmFtIHtET01BZ2VudC5Ob2RlfSByb290Ci0gICAgICovCi0gICAgc2hhZG93Um9v
dFB1c2hlZDogZnVuY3Rpb24oaG9zdElkLCByb290KQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9t
QWdlbnQuX2NoaWxkTm9kZUluc2VydGVkKGhvc3RJZCwgMCwgcm9vdCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBob3N0SWQKLSAgICAgKiBAcGFy
YW0ge0RPTUFnZW50Lk5vZGVJZH0gcm9vdElkCi0gICAgICovCi0gICAgc2hhZG93Um9vdFBvcHBl
ZDogZnVuY3Rpb24oaG9zdElkLCByb290SWQpCi0gICAgewotICAgICAgICB0aGlzLl9kb21BZ2Vu
dC5fY2hpbGROb2RlUmVtb3ZlZChob3N0SWQsIHJvb3RJZCk7Ci0gICAgfQotfQotCi0vKioKLSAq
IEB0eXBlIHs/V2ViSW5zcGVjdG9yLkRPTUFnZW50fQotICovCi1XZWJJbnNwZWN0b3IuZG9tQWdl
bnQgPSBudWxsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2OGYxMzI4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcworKysgL2Rldi9udWxs
CkBAIC0xLDQwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZX0KLSAqLwotV2ViSW5zcGVjdG9y
LkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVj
dG9yLk5hdGl2ZUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkRPTSBCcmVha3BvaW50cyIpKTsKLQotICAgIHRoaXMuX2JyZWFrcG9pbnRFbGVt
ZW50cyA9IHt9OwotCi0gICAgdGhpcy5fYnJlYWtwb2ludFR5cGVzID0gewotICAgICAgICBTdWJ0
cmVlTW9kaWZpZWQ6ICJzdWJ0cmVlLW1vZGlmaWVkIiwKLSAgICAgICAgQXR0cmlidXRlTW9kaWZp
ZWQ6ICJhdHRyaWJ1dGUtbW9kaWZpZWQiLAotICAgICAgICBOb2RlUmVtb3ZlZDogIm5vZGUtcmVt
b3ZlZCIKLSAgICB9OwotICAgIHRoaXMuX2JyZWFrcG9pbnRUeXBlTGFiZWxzID0ge307Ci0gICAg
dGhpcy5fYnJlYWtwb2ludFR5cGVMYWJlbHNbdGhpcy5fYnJlYWtwb2ludFR5cGVzLlN1YnRyZWVN
b2RpZmllZF0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN1YnRyZWUgTW9kaWZpZWQiKTsKLSAg
ICB0aGlzLl9icmVha3BvaW50VHlwZUxhYmVsc1t0aGlzLl9icmVha3BvaW50VHlwZXMuQXR0cmli
dXRlTW9kaWZpZWRdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBdHRyaWJ1dGUgTW9kaWZpZWQi
KTsKLSAgICB0aGlzLl9icmVha3BvaW50VHlwZUxhYmVsc1t0aGlzLl9icmVha3BvaW50VHlwZXMu
Tm9kZVJlbW92ZWRdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOb2RlIFJlbW92ZWQiKTsKLQot
ICAgIHRoaXMuX2NvbnRleHRNZW51TGFiZWxzID0ge307Ci0gICAgdGhpcy5fY29udGV4dE1lbnVM
YWJlbHNbdGhpcy5fYnJlYWtwb2ludFR5cGVzLlN1YnRyZWVNb2RpZmllZF0gPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJTdWJ0
cmVlIG1vZGlmaWNhdGlvbnMiIDogIlN1YnRyZWUgTW9kaWZpY2F0aW9ucyIpOwotICAgIHRoaXMu
X2NvbnRleHRNZW51TGFiZWxzW3RoaXMuX2JyZWFrcG9pbnRUeXBlcy5BdHRyaWJ1dGVNb2RpZmll
ZF0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVU
aXRsZXMoKSA/ICJBdHRyaWJ1dGVzIG1vZGlmaWNhdGlvbnMiIDogIkF0dHJpYnV0ZXMgTW9kaWZp
Y2F0aW9ucyIpOwotICAgIHRoaXMuX2NvbnRleHRNZW51TGFiZWxzW3RoaXMuX2JyZWFrcG9pbnRU
eXBlcy5Ob2RlUmVtb3ZlZF0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVz
ZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJOb2RlIHJlbW92YWwiIDogIk5vZGUgUmVtb3ZhbCIp
OwotCi0gICAgV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuSW5zcGVjdGVkVVJMQ2hh
bmdlZCwgdGhpcy5faW5zcGVjdGVkVVJMQ2hhbmdlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9y
LmRvbUFnZW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5O
b2RlUmVtb3ZlZCwgdGhpcy5fbm9kZVJlbW92ZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3Iu
RE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7Ci0gICAgX2luc3BlY3RlZFVS
TENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dEVsZW1lbnRzID0ge307Ci0gICAgICAgIHRoaXMuX3Jlc2V0KCk7Ci0gICAgICAgIHZhciB1cmwg
PSBldmVudC5kYXRhOwotICAgICAgICB0aGlzLl9pbnNwZWN0ZWRVUkwgPSB1cmwucmVtb3ZlVVJM
RnJhZ21lbnQoKTsKLSAgICB9LAotCi0gICAgcG9wdWxhdGVOb2RlQ29udGV4dE1lbnU6IGZ1bmN0
aW9uKG5vZGUsIGNvbnRleHRNZW51KQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVCcmVha3BvaW50
cyA9IHt9OwotICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50RWxlbWVudHMp
IHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludEVsZW1lbnRzW2lk
XTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50Ll9ub2RlID09PSBub2RlKQotICAgICAgICAgICAg
ICAgIG5vZGVCcmVha3BvaW50c1tlbGVtZW50Ll90eXBlXSA9IHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiB0b2dnbGVCcmVha3BvaW50KHR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICghbm9kZUJyZWFrcG9pbnRzW3R5cGVdKQotICAgICAgICAgICAgICAgIHRoaXMu
X3NldEJyZWFrcG9pbnQobm9kZSwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludChub2RlLCB0eXBlKTsKLSAgICAgICAg
ICAgIHRoaXMuX3NhdmVCcmVha3BvaW50cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGJy
ZWFrUG9pbnRTdWJNZW51ID0gY29udGV4dE1lbnUuYXBwZW5kU3ViTWVudUl0ZW0oV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJCcmVhayBvbi4uLiIpKTsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIHRo
aXMuX2JyZWFrcG9pbnRUeXBlcykgewotICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLl9icmVh
a3BvaW50VHlwZXNba2V5XTsKLSAgICAgICAgICAgIHZhciBsYWJlbCA9IHRoaXMuX2NvbnRleHRN
ZW51TGFiZWxzW3R5cGVdOwotICAgICAgICAgICAgYnJlYWtQb2ludFN1Yk1lbnUuYXBwZW5kQ2hl
Y2tib3hJdGVtKGxhYmVsLCB0b2dnbGVCcmVha3BvaW50LmJpbmQodGhpcywgdHlwZSksIG5vZGVC
cmVha3BvaW50c1t0eXBlXSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgY3JlYXRlQnJlYWtw
b2ludEhpdFN0YXR1c01lc3NhZ2U6IGZ1bmN0aW9uKGF1eERhdGEsIGNhbGxiYWNrKQotICAgIHsK
LSAgICAgICAgaWYgKGF1eERhdGEudHlwZSA9PT0gdGhpcy5fYnJlYWtwb2ludFR5cGVzLlN1YnRy
ZWVNb2RpZmllZCkgewotICAgICAgICAgICAgdmFyIHRhcmdldE5vZGVPYmplY3QgPSBXZWJJbnNw
ZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKGF1eERhdGFbInRhcmdldE5vZGUiXSk7Ci0g
ICAgICAgICAgICBmdW5jdGlvbiBkaWRQdXNoTm9kZVRvRnJvbnRlbmQodGFyZ2V0Tm9kZUlkKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0YXJnZXROb2RlSWQpCi0gICAgICAg
ICAgICAgICAgICAgIHRhcmdldE5vZGVPYmplY3QucmVsZWFzZSgpOwotICAgICAgICAgICAgICAg
IHRoaXMuX2RvQ3JlYXRlQnJlYWtwb2ludEhpdFN0YXR1c01lc3NhZ2UoYXV4RGF0YSwgdGFyZ2V0
Tm9kZUlkLCBjYWxsYmFjayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0YXJnZXROb2Rl
T2JqZWN0LnB1c2hOb2RlVG9Gcm9udGVuZChkaWRQdXNoTm9kZVRvRnJvbnRlbmQuYmluZCh0aGlz
KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fZG9DcmVhdGVCcmVha3BvaW50
SGl0U3RhdHVzTWVzc2FnZShhdXhEYXRhLCBudWxsLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAg
IF9kb0NyZWF0ZUJyZWFrcG9pbnRIaXRTdGF0dXNNZXNzYWdlOiBmdW5jdGlvbiAoYXV4RGF0YSwg
dGFyZ2V0Tm9kZUlkLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBtZXNzYWdlOwotICAg
ICAgICB2YXIgdHlwZUxhYmVsID0gdGhpcy5fYnJlYWtwb2ludFR5cGVMYWJlbHNbYXV4RGF0YS50
eXBlXTsKLSAgICAgICAgdmFyIGxpbmtpZmllZE5vZGUgPSBXZWJJbnNwZWN0b3IuRE9NUHJlc2Vu
dGF0aW9uVXRpbHMubGlua2lmeU5vZGVCeUlkKGF1eERhdGEubm9kZUlkKTsKLSAgICAgICAgdmFy
IHN1YnN0aXR1dGlvbnMgPSBbdHlwZUxhYmVsLCBsaW5raWZpZWROb2RlXTsKLSAgICAgICAgdmFy
IHRhcmdldE5vZGUgPSAiIjsKLSAgICAgICAgaWYgKHRhcmdldE5vZGVJZCkKLSAgICAgICAgICAg
IHRhcmdldE5vZGUgPSBXZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0aW9uVXRpbHMubGlua2lmeU5v
ZGVCeUlkKHRhcmdldE5vZGVJZCk7Ci0KLSAgICAgICAgaWYgKGF1eERhdGEudHlwZSA9PT0gdGhp
cy5fYnJlYWtwb2ludFR5cGVzLlN1YnRyZWVNb2RpZmllZCkgewotICAgICAgICAgICAgaWYgKGF1
eERhdGEuaW5zZXJ0aW9uKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldE5vZGVJZCAhPT0g
YXV4RGF0YS5ub2RlSWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJQYXVzZWQg
b24gYSBcIiVzXCIgYnJlYWtwb2ludCBzZXQgb24gJXMsIGJlY2F1c2UgYSBuZXcgY2hpbGQgd2Fz
IGFkZGVkIHRvIGl0cyBkZXNjZW5kYW50ICVzLiI7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnN0
aXR1dGlvbnMucHVzaCh0YXJnZXROb2RlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJQYXVzZWQgb24gYSBcIiVzXCIgYnJlYWtwb2ludCBz
ZXQgb24gJXMsIGJlY2F1c2UgYSBuZXcgY2hpbGQgd2FzIGFkZGVkIHRvIHRoYXQgbm9kZS4iOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gIlBhdXNlZCBv
biBhIFwiJXNcIiBicmVha3BvaW50IHNldCBvbiAlcywgYmVjYXVzZSBpdHMgZGVzY2VuZGFudCAl
cyB3YXMgcmVtb3ZlZC4iOwotICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaCh0YXJn
ZXROb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtZXNz
YWdlID0gIlBhdXNlZCBvbiBhIFwiJXNcIiBicmVha3BvaW50IHNldCBvbiAlcy4iOwotCi0gICAg
ICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAg
ICB2YXIgZm9ybWF0dGVycyA9IHsKLSAgICAgICAgICAgIHM6IGZ1bmN0aW9uKHN1YnN0aXR1dGlv
bikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0aW9uOwot
ICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBmdW5jdGlvbiBhcHBlbmQoYSwgYikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09PSAic3RyaW5nIikKLSAgICAg
ICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYik7Ci0gICAgICAgICAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGIpOwotICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5m
b3JtYXRMb2NhbGl6ZWQobWVzc2FnZSwgc3Vic3RpdHV0aW9ucywgZm9ybWF0dGVycywgIiIsIGFw
cGVuZCk7Ci0KLSAgICAgICAgY2FsbGJhY2soZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9ub2Rl
UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbm9kZSA9IGV2ZW50
LmRhdGEubm9kZTsKLSAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludHNGb3JOb2RlKGV2ZW50
LmRhdGEubm9kZSk7Ci0gICAgICAgIGlmICghbm9kZS5jaGlsZHJlbikKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsg
KytpKQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludHNGb3JOb2RlKG5vZGUuY2hp
bGRyZW5baV0pOwotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKLSAgICB9LAotCi0g
ICAgX3JlbW92ZUJyZWFrcG9pbnRzRm9yTm9kZTogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAg
ICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50cykgewotICAgICAgICAg
ICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9icmVha3BvaW50RWxlbWVudHNbaWRdOwotICAgICAgICAg
ICAgaWYgKGVsZW1lbnQuX25vZGUgPT09IG5vZGUpCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVt
b3ZlQnJlYWtwb2ludChlbGVtZW50Ll9ub2RlLCBlbGVtZW50Ll90eXBlKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24obm9kZSwgdHlwZSwgZW5hYmxl
ZCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVCcmVha3Bv
aW50SWQobm9kZS5pZCwgdHlwZSk7Ci0gICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5f
YnJlYWtwb2ludEVsZW1lbnRzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBl
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKLSAgICAgICAgZWxlbWVudC5f
bm9kZSA9IG5vZGU7Ci0gICAgICAgIGVsZW1lbnQuX3R5cGUgPSB0eXBlOwotICAgICAgICBlbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnUuYmlu
ZCh0aGlzLCBub2RlLCB0eXBlKSwgdHJ1ZSk7Ci0KLSAgICAgICAgdmFyIGNoZWNrYm94RWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGNoZWNrYm94RWxl
bWVudC5jbGFzc05hbWUgPSAiY2hlY2tib3gtZWxlbSI7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVu
dC50eXBlID0gImNoZWNrYm94IjsKLSAgICAgICAgY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSBl
bmFibGVkOwotICAgICAgICBjaGVja2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl9jaGVja2JveENsaWNrZWQuYmluZCh0aGlzLCBub2RlLCB0eXBlKSwgZmFsc2UpOwot
ICAgICAgICBlbGVtZW50Ll9jaGVja2JveEVsZW1lbnQgPSBjaGVja2JveEVsZW1lbnQ7Ci0gICAg
ICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hlY2tib3hFbGVtZW50KTsKLQotICAgICAgICB2YXIg
bGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7Ci0KLSAgICAgICAgdmFyIGxpbmtpZmll
ZE5vZGUgPSBXZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0aW9uVXRpbHMubGlua2lmeU5vZGVCeUlk
KG5vZGUuaWQpOwotICAgICAgICBsaW5raWZpZWROb2RlLmFkZFN0eWxlQ2xhc3MoIm1vbm9zcGFj
ZSIpOwotICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQobGlua2lmaWVkTm9kZSk7Ci0K
LSAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0gICAgICAgIGRlc2NyaXB0aW9uLmNsYXNzTmFtZSA9ICJzb3VyY2UtdGV4dCI7Ci0gICAgICAg
IGRlc2NyaXB0aW9uLnRleHRDb250ZW50ID0gdGhpcy5fYnJlYWtwb2ludFR5cGVMYWJlbHNbdHlw
ZV07Ci0gICAgICAgIGxhYmVsRWxlbWVudC5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7Ci0KLSAg
ICAgICAgdmFyIGN1cnJlbnRFbGVtZW50ID0gdGhpcy5saXN0RWxlbWVudC5maXJzdENoaWxkOwot
ICAgICAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50
RWxlbWVudC5fdHlwZSAmJiBjdXJyZW50RWxlbWVudC5fdHlwZSA8IGVsZW1lbnQuX3R5cGUpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJl
bnRFbGVtZW50Lm5leHRTaWJsaW5nOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2FkZExpc3RF
bGVtZW50KGVsZW1lbnQsIGN1cnJlbnRFbGVtZW50KTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dEVsZW1lbnRzW2JyZWFrcG9pbnRJZF0gPSBlbGVtZW50OwotICAgICAgICBpZiAoZW5hYmxlZCkK
LSAgICAgICAgICAgIERPTURlYnVnZ2VyQWdlbnQuc2V0RE9NQnJlYWtwb2ludChub2RlLmlkLCB0
eXBlKTsKLSAgICB9LAotCi0gICAgX3JlbW92ZUFsbEJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50RWxlbWVudHMpIHsK
LSAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludEVsZW1lbnRzW2lkXTsK
LSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoZWxlbWVudC5fbm9kZSwgZWxlbWVu
dC5fdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7Ci0g
ICAgfSwKLQotICAgIF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihub2RlLCB0eXBlKQotICAg
IHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnRJZChu
b2RlLmlkLCB0eXBlKTsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9icmVha3BvaW50RWxl
bWVudHNbYnJlYWtwb2ludElkXTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3JlbW92ZUxpc3RFbGVtZW50KGVsZW1lbnQpOwotICAg
ICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludEVsZW1lbnRzW2JyZWFrcG9pbnRJZF07Ci0gICAg
ICAgIGlmIChlbGVtZW50Ll9jaGVja2JveEVsZW1lbnQuY2hlY2tlZCkKLSAgICAgICAgICAgIERP
TURlYnVnZ2VyQWdlbnQucmVtb3ZlRE9NQnJlYWtwb2ludChub2RlLmlkLCB0eXBlKTsKLSAgICB9
LAotCi0gICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihub2RlLCB0eXBlLCBldmVudCkKLSAgICB7
Ci0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUo
ZXZlbnQpOwotICAgICAgICBmdW5jdGlvbiByZW1vdmVCcmVha3BvaW50KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludChub2RlLCB0eXBlKTsKLSAgICAgICAg
ICAgIHRoaXMuX3NhdmVCcmVha3BvaW50cygpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHRN
ZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dl
ckNhc2VNZW51VGl0bGVzKCkgPyAiUmVtb3ZlIGJyZWFrcG9pbnQiIDogIlJlbW92ZSBCcmVha3Bv
aW50IiksIHJlbW92ZUJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51
LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNh
c2VNZW51VGl0bGVzKCkgPyAiUmVtb3ZlIGFsbCBET00gYnJlYWtwb2ludHMiIDogIlJlbW92ZSBB
bGwgRE9NIEJyZWFrcG9pbnRzIiksIHRoaXMuX3JlbW92ZUFsbEJyZWFrcG9pbnRzLmJpbmQodGhp
cykpOwotICAgICAgICBjb250ZXh0TWVudS5zaG93KCk7Ci0gICAgfSwKLQotICAgIF9jaGVja2Jv
eENsaWNrZWQ6IGZ1bmN0aW9uKG5vZGUsIHR5cGUsIGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYg
KGV2ZW50LnRhcmdldC5jaGVja2VkKQotICAgICAgICAgICAgRE9NRGVidWdnZXJBZ2VudC5zZXRE
T01CcmVha3BvaW50KG5vZGUuaWQsIHR5cGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBE
T01EZWJ1Z2dlckFnZW50LnJlbW92ZURPTUJyZWFrcG9pbnQobm9kZS5pZCwgdHlwZSk7Ci0gICAg
ICAgIHRoaXMuX3NhdmVCcmVha3BvaW50cygpOwotICAgIH0sCi0KLSAgICBoaWdobGlnaHRCcmVh
a3BvaW50OiBmdW5jdGlvbihhdXhEYXRhKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJ
ZCA9IHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnRJZChhdXhEYXRhLm5vZGVJZCwgYXV4RGF0YS50eXBl
KTsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9icmVha3BvaW50RWxlbWVudHNbYnJlYWtw
b2ludElkXTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB0aGlzLmV4cGFuZCgpOwotICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImJyZWFr
cG9pbnQtaGl0Iik7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkRWxlbWVudCA9IGVsZW1lbnQ7
Ci0gICAgfSwKLQotICAgIGNsZWFyQnJlYWtwb2ludEhpZ2hsaWdodDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodGVkRWxlbWVudCkgewotICAgICAgICAgICAg
dGhpcy5faGlnaGxpZ2h0ZWRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImJyZWFrcG9pbnQtaGl0
Iik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5faGlnaGxpZ2h0ZWRFbGVtZW50OwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF9jcmVhdGVCcmVha3BvaW50SWQ6IGZ1bmN0aW9uKG5vZGVJZCwg
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlSWQgKyAiOiIgKyB0eXBlOwotICAgIH0s
Ci0KLSAgICBfc2F2ZUJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
YnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgdmFyIHN0b3JlZEJyZWFrcG9pbnRzID0gV2ViSW5z
cGVjdG9yLnNldHRpbmdzLmRvbUJyZWFrcG9pbnRzLmdldCgpOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0b3JlZEJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHN0b3JlZEJyZWFrcG9pbnRzW2ldOwotICAgICAgICAgICAgaWYgKGJy
ZWFrcG9pbnQudXJsICE9PSB0aGlzLl9pbnNwZWN0ZWRVUkwpCi0gICAgICAgICAgICAgICAgYnJl
YWtwb2ludHMucHVzaChicmVha3BvaW50KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBp
ZCBpbiB0aGlzLl9icmVha3BvaW50RWxlbWVudHMpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50
ID0gdGhpcy5fYnJlYWtwb2ludEVsZW1lbnRzW2lkXTsKLSAgICAgICAgICAgIGJyZWFrcG9pbnRz
LnB1c2goeyB1cmw6IHRoaXMuX2luc3BlY3RlZFVSTCwgcGF0aDogZWxlbWVudC5fbm9kZS5wYXRo
KCksIHR5cGU6IGVsZW1lbnQuX3R5cGUsIGVuYWJsZWQ6IGVsZW1lbnQuX2NoZWNrYm94RWxlbWVu
dC5jaGVja2VkIH0pOwotICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5k
b21CcmVha3BvaW50cy5zZXQoYnJlYWtwb2ludHMpOwotICAgIH0sCi0KLSAgICByZXN0b3JlQnJl
YWtwb2ludHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBwYXRoVG9CcmVha3BvaW50
cyA9IHt9OwotCi0gICAgICAgIGZ1bmN0aW9uIGRpZFB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChw
YXRoLCBub2RlSWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gV2ViSW5zcGVj
dG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwotICAgICAgICAgICAgaWYgKCFub2RlKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0g
cGF0aFRvQnJlYWtwb2ludHNbcGF0aF07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFr
cG9pbnQobm9kZSwgYnJlYWtwb2ludHNbaV0udHlwZSwgYnJlYWtwb2ludHNbaV0uZW5hYmxlZCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MuZG9tQnJlYWtwb2ludHMuZ2V0KCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0g
YnJlYWtwb2ludHNbaV07Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC51cmwgIT09IHRoaXMu
X2luc3BlY3RlZFVSTCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZh
ciBwYXRoID0gYnJlYWtwb2ludC5wYXRoOwotICAgICAgICAgICAgaWYgKCFwYXRoVG9CcmVha3Bv
aW50c1twYXRoXSkgewotICAgICAgICAgICAgICAgIHBhdGhUb0JyZWFrcG9pbnRzW3BhdGhdID0g
W107Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LnB1c2hOb2RlQnlQYXRo
VG9Gcm9udGVuZChwYXRoLCBkaWRQdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQuYmluZCh0aGlzLCBw
YXRoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoVG9CcmVha3BvaW50c1twYXRo
XS5wdXNoKGJyZWFrcG9pbnQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBhbmVsfSBwYW5lbAotICAgICAqLwotICAgIGNyZWF0ZVBy
b3h5OiBmdW5jdGlvbihwYW5lbCkKLSAgICB7Ci0gICAgICAgIHZhciBwcm94eSA9IG5ldyBXZWJJ
bnNwZWN0b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5Qcm94eSh0aGlzLCBwYW5lbCk7Ci0g
ICAgICAgIGlmICghdGhpcy5fcHJveGllcykKLSAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBb
XTsKLSAgICAgICAgdGhpcy5fcHJveGllcy5wdXNoKHByb3h5KTsKLSAgICAgICAgcmV0dXJuIHBy
b3h5OwotICAgIH0sCi0KLSAgICBvbkNvbnRlbnRSZWFkeTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIT0gdGhpcy5fcHJveGllcy5sZW5ndGg7IGkrKykKLSAg
ICAgICAgICAgIHRoaXMuX3Byb3hpZXNbaV0ub25Db250ZW50UmVhZHkoKTsKLSAgICB9LAotCi0g
ICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5w
cm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNw
ZWN0b3IuU2lkZWJhclBhbmV9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5ET01CcmVha3BvaW50
c1NpZGViYXJQYW5lfSBwYW5lCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5QYW5lbH0gcGFuZWwK
LSAqLwotV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuUHJveHkgPSBmdW5j
dGlvbihwYW5lLCBwYW5lbCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5fYXNzZXJ0KCFwYW5l
LnRpdGxlRWxlbWVudC5maXJzdENoaWxkLCAiQ2Fubm90IGNyZWF0ZSBwcm94eSBmb3IgYSBzaWRl
YmFyIHBhbmUgd2l0aCBhIHRvb2xiYXIiKTsKLQotICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyUGFu
ZS5jYWxsKHRoaXMsIHBhbmUudGl0bGUoKSk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NT
KCJicmVha3BvaW50c0xpc3QuY3NzIik7Ci0KLSAgICB0aGlzLl93cmFwcGVkUGFuZSA9IHBhbmU7
Ci0gICAgdGhpcy5fcGFuZWwgPSBwYW5lbDsKLQotICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3Zl
U2VsZigpOwotICAgIHRoaXMuYm9keUVsZW1lbnQgPSB0aGlzLl93cmFwcGVkUGFuZS5ib2R5RWxl
bWVudDsKLX0KLQotV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuUHJveHku
cHJvdG90eXBlID0gewotICAgIGV4cGFuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fd3JhcHBlZFBhbmUuZXhwYW5kKCk7Ci0gICAgfSwKLQotICAgIG9uQ29udGVudFJlYWR5OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3BhbmVsLmlzU2hvd2luZygpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3JlYXR0YWNoQm9keSgpOwotICAg
ICAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUucHJvdG90eXBlLm9uQ29udGVudFJlYWR5LmNh
bGwodGhpcyk7Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUucHJvdG90eXBlLndhc1Nob3duLmNhbGwodGhp
cyk7Ci0gICAgICAgIHRoaXMuX3JlYXR0YWNoQm9keSgpOwotICAgIH0sCi0KLSAgICBfcmVhdHRh
Y2hCb2R5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5ib2R5RWxlbWVudC5w
YXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5ib2R5RWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLlNpZGViYXJQYW5lLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEB0eXBlIHs/V2Vi
SW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmV9Ci0gKi8KLVdlYkluc3BlY3Rvci5k
b21CcmVha3BvaW50c1NpZGViYXJQYW5lID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQ291bnRlcnNHcmFwaC5qcyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQ291bnRlcnNHcmFwaC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWYwMDRhNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RPTUNvdW50ZXJzR3JhcGguanMKKysrIC9kZXYvbnVsbApAQCAt
MSwzMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVj
dG9yLk1lbW9yeVN0YXRpc3RpY3N9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZVBh
bmVsfSB0aW1lbGluZVBhbmVsCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVs
fSBtb2RlbAotICogQHBhcmFtIHtudW1iZXJ9IHNpZGViYXJXaWR0aAotICovCi1XZWJJbnNwZWN0
b3IuRE9NQ291bnRlcnNHcmFwaCA9IGZ1bmN0aW9uKHRpbWVsaW5lUGFuZWwsIG1vZGVsLCBzaWRl
YmFyV2lkdGgpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk1lbW9yeVN0YXRpc3RpY3MuY2FsbCh0aGlz
LCB0aW1lbGluZVBhbmVsLCBtb2RlbCwgc2lkZWJhcldpZHRoKTsKLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQ291bnRlclVJQmFzZX0KLSAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkRPTUNvdW50ZXJzR3JhcGh9IG1lbW9yeUNvdW50ZXJzUGFuZQot
ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlCi0gKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFZhbHVl
TGFiZWwKLSAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHJnYgotICogQHBhcmFtIHtmdW5jdGlv
bihXZWJJbnNwZWN0b3IuRE9NQ291bnRlcnNHcmFwaC5Db3VudGVyKTpudW1iZXJ9IHZhbHVlR2V0
dGVyCi0gKi8KLVdlYkluc3BlY3Rvci5ET01Db3VudGVyVUkgPSBmdW5jdGlvbihtZW1vcnlDb3Vu
dGVyc1BhbmUsIHRpdGxlLCBjdXJyZW50VmFsdWVMYWJlbCwgcmdiLCB2YWx1ZUdldHRlcikKLXsK
LSAgICB2YXIgc3dhdGNoQ29sb3IgPSAicmdiKCIgKyByZ2Iuam9pbigiLCIpICsgIikiOwotICAg
IFdlYkluc3BlY3Rvci5Db3VudGVyVUlCYXNlLmNhbGwodGhpcywgbWVtb3J5Q291bnRlcnNQYW5l
LCB0aXRsZSwgc3dhdGNoQ29sb3IsIHZhbHVlR2V0dGVyKQotICAgIHRoaXMuX3JhbmdlID0gdGhp
cy5fc3dhdGNoLmVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iKTsKLQotICAgIHRoaXMuX3ZhbHVl
ID0gbWVtb3J5Q291bnRlcnNQYW5lLl9jdXJyZW50VmFsdWVzQmFyLmNyZWF0ZUNoaWxkKCJzcGFu
IiwgIm1lbW9yeS1jb3VudGVyLXZhbHVlIik7Ci0gICAgdGhpcy5fdmFsdWUuc3R5bGUuY29sb3Ig
PSBzd2F0Y2hDb2xvcjsKLSAgICB0aGlzLl9jdXJyZW50VmFsdWVMYWJlbCA9IGN1cnJlbnRWYWx1
ZUxhYmVsOwotCi0gICAgdGhpcy5ncmFwaENvbG9yID0gInJnYmEoIiArIHJnYi5qb2luKCIsIikg
KyAiLDAuOCkiOwotICAgIHRoaXMuZ3JhcGhZVmFsdWVzID0gW107Ci19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk1lbW9yeVN0YXRpc3RpY3MuQ291
bnRlcn0KLSAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lCi0gKiBAcGFyYW0ge251bWJlcn0gZG9jdW1l
bnRDb3VudAotICogQHBhcmFtIHtudW1iZXJ9IG5vZGVDb3VudAotICogQHBhcmFtIHtudW1iZXJ9
IGxpc3RlbmVyQ291bnQKLSAqLwotV2ViSW5zcGVjdG9yLkRPTUNvdW50ZXJzR3JhcGguQ291bnRl
ciA9IGZ1bmN0aW9uKHRpbWUsIGRvY3VtZW50Q291bnQsIG5vZGVDb3VudCwgbGlzdGVuZXJDb3Vu
dCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuTWVtb3J5U3RhdGlzdGljcy5Db3VudGVyLmNhbGwodGhp
cywgdGltZSk7Ci0gICAgdGhpcy5kb2N1bWVudENvdW50ID0gZG9jdW1lbnRDb3VudDsKLSAgICB0
aGlzLm5vZGVDb3VudCA9IG5vZGVDb3VudDsKLSAgICB0aGlzLmxpc3RlbmVyQ291bnQgPSBsaXN0
ZW5lckNvdW50OwotfQotCi1XZWJJbnNwZWN0b3IuRE9NQ291bnRlclVJLnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbWluVmFsdWUKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gbWF4VmFsdWUKLSAgICAgKi8KLSAgICBzZXRSYW5nZTogZnVuY3Rpb24obWluVmFs
dWUsIG1heFZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmFuZ2UudGV4dENvbnRlbnQgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlsgJWQgLSAlZCBdIiwgbWluVmFsdWUsIG1heFZhbHVlKTsK
LSAgICB9LAotCi0gICAgdXBkYXRlQ3VycmVudFZhbHVlOiBmdW5jdGlvbihjb3VudGVyc0VudHJ5
KQotICAgIHsKLSAgICAgICAgdGhpcy5fdmFsdWUudGV4dENvbnRlbnQgPSAgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKHRoaXMuX2N1cnJlbnRWYWx1ZUxhYmVsLCB0aGlzLnZhbHVlR2V0dGVyKGNvdW50
ZXJzRW50cnkpKTsKLSAgICB9LAotCi0gICAgY2xlYXJDdXJyZW50VmFsdWVBbmRNYXJrZXI6IGZ1
bmN0aW9uKGN0eCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3ZhbHVlLnRleHRDb250ZW50ID0gIiI7
Ci0gICAgICAgIHRoaXMucmVzdG9yZUltYWdlVW5kZXJNYXJrZXIoY3R4KTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eAotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSB4Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IHkKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gcmFkaXVzCi0gICAgICovCi0gICAgc2F2ZUltYWdlVW5kZXJNYXJrZXI6
IGZ1bmN0aW9uKGN0eCwgeCwgeSwgcmFkaXVzKQotICAgIHsKLSAgICAgICAgY29uc3QgdyA9IHJh
ZGl1cyArIDE7Ci0gICAgICAgIHZhciBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKHggLSB3
LCB5IC0gdywgMiAqIHcsIDIgKiB3KTsKLSAgICAgICAgdGhpcy5faW1hZ2VVbmRlck1hcmtlciA9
IHsKLSAgICAgICAgICAgIHg6IHggLSB3LAotICAgICAgICAgICAgeTogeSAtIHcsCi0gICAgICAg
ICAgICBpbWFnZURhdGE6IGltYWdlRGF0YQotICAgICAgICB9OwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4Ci0gICAgICovCi0g
ICAgcmVzdG9yZUltYWdlVW5kZXJNYXJrZXI6IGZ1bmN0aW9uKGN0eCkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy52aXNpYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhp
cy5faW1hZ2VVbmRlck1hcmtlcikKLSAgICAgICAgICAgIGN0eC5wdXRJbWFnZURhdGEodGhpcy5f
aW1hZ2VVbmRlck1hcmtlci5pbWFnZURhdGEsIHRoaXMuX2ltYWdlVW5kZXJNYXJrZXIueCwgdGhp
cy5faW1hZ2VVbmRlck1hcmtlci55KTsKLSAgICAgICAgdGhpcy5kaXNjYXJkSW1hZ2VVbmRlck1h
cmtlcigpOwotICAgIH0sCi0KLSAgICBkaXNjYXJkSW1hZ2VVbmRlck1hcmtlcjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2ltYWdlVW5kZXJNYXJrZXI7Ci0gICAgfSwK
LQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkNvdW50ZXJVSUJhc2UucHJvdG90eXBlCi19
Ci0KLQotV2ViSW5zcGVjdG9yLkRPTUNvdW50ZXJzR3JhcGgucHJvdG90eXBlID0gewotICAgIF9j
cmVhdGVDdXJyZW50VmFsdWVzQmFyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9j
dXJyZW50VmFsdWVzQmFyID0gdGhpcy5fY2FudmFzQ29udGFpbmVyLmNyZWF0ZUNoaWxkKCJkaXYi
KTsKLSAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlc0Jhci5pZCA9ICJjb3VudGVyLXZhbHVlcy1i
YXIiOwotICAgICAgICB0aGlzLl9jYW52YXNDb250YWluZXIuYWRkU3R5bGVDbGFzcygiZG9tLWNv
dW50ZXJzIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxXZWJJ
bnNwZWN0b3IuRE9NQ291bnRlclVJPn0KLSAgICAgKi8KLSAgICBfY3JlYXRlQ291bnRlclVJTGlz
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZ2V0RG9jdW1lbnRDb3VudChl
bnRyeSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmRvY3VtZW50Q291bnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gZ2V0Tm9kZUNvdW50KGVudHJ5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnkubm9kZUNvdW50OwotICAgICAgICB9Ci0gICAg
ICAgIGZ1bmN0aW9uIGdldExpc3RlbmVyQ291bnQoZW50cnkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlbnRyeS5saXN0ZW5lckNvdW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBbCi0gICAgICAgICAgICBuZXcgV2ViSW5zcGVjdG9yLkRPTUNvdW50ZXJVSSh0aGlzLCAiRG9j
dW1lbnQgQ291bnQiLCAiRG9jdW1lbnRzOiAlZCIsIFsxMDAsIDAsIDBdLCBnZXREb2N1bWVudENv
dW50KSwKLSAgICAgICAgICAgIG5ldyBXZWJJbnNwZWN0b3IuRE9NQ291bnRlclVJKHRoaXMsICJE
T00gTm9kZSBDb3VudCIsICJOb2RlczogJWQiLCBbMCwgMTAwLCAwXSwgZ2V0Tm9kZUNvdW50KSwK
LSAgICAgICAgICAgIG5ldyBXZWJJbnNwZWN0b3IuRE9NQ291bnRlclVJKHRoaXMsICJFdmVudCBM
aXN0ZW5lciBDb3VudCIsICJMaXN0ZW5lcnM6ICVkIiwgWzAsIDAsIDEwMF0sIGdldExpc3RlbmVy
Q291bnQpCi0gICAgICAgIF07Ci0gICAgfSwKLQotICAgIF9jYW52YXNIZWlnaHQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jYW52YXNDb250YWluZXIub2Zmc2V0SGVp
Z2h0IC0gdGhpcy5fY3VycmVudFZhbHVlc0Jhci5vZmZzZXRIZWlnaHQ7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwot
ICAgIF9vblJlY29yZEFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0
aW9uIGFkZFN0YXRpc3RpY3MocmVjb3JkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY291
bnRlcnMgPSByZWNvcmRbImNvdW50ZXJzIl07Ci0gICAgICAgICAgICBpZiAoIWNvdW50ZXJzKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHRoaXMuX2NvdW50ZXJzLnB1c2go
bmV3IFdlYkluc3BlY3Rvci5ET01Db3VudGVyc0dyYXBoLkNvdW50ZXIoCi0gICAgICAgICAgICAg
ICAgcmVjb3JkLmVuZFRpbWUgfHwgcmVjb3JkLnN0YXJ0VGltZSwKLSAgICAgICAgICAgICAgICBj
b3VudGVyc1siZG9jdW1lbnRzIl0sCi0gICAgICAgICAgICAgICAgY291bnRlcnNbIm5vZGVzIl0s
Ci0gICAgICAgICAgICAgICAgY291bnRlcnNbImpzRXZlbnRMaXN0ZW5lcnMiXQotICAgICAgICAg
ICAgKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0
aW9uTW9kZWwuZm9yQWxsUmVjb3JkcyhbZXZlbnQuZGF0YV0sIG51bGwsIGFkZFN0YXRpc3RpY3Mu
YmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIF9kcmF3OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuTWVtb3J5U3RhdGlzdGljcy5wcm90b3R5cGUuX2RyYXcuY2FsbCh0
aGlzKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb3VudGVyVUkubGVuZ3Ro
OyBpKyspCi0gICAgICAgICAgICB0aGlzLl9kcmF3R3JhcGgodGhpcy5fY291bnRlclVJW2ldKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkR9IGN0eAotICAgICAqLwotICAgIF9yZXN0b3JlSW1hZ2VVbmRlck1hcmtlcjogZnVuY3Rpb24o
Y3R4KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb3VudGVyVUku
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBjb3VudGVyVUkgPSB0aGlzLl9jb3VudGVy
VUlbaV07Ci0gICAgICAgICAgICBpZiAoIWNvdW50ZXJVSS52aXNpYmxlKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY291bnRlclVJLnJlc3RvcmVJbWFnZVVuZGVyTWFy
a2VyKGN0eCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4Ci0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gICAgICovCi0gICAgX3NhdmVJbWFnZVVuZGVy
TWFya2VyOiBmdW5jdGlvbihjdHgsIHgsIGluZGV4KQotICAgIHsKLSAgICAgICAgY29uc3QgcmFk
aXVzID0gMjsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb3VudGVyVUkubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBjb3VudGVyVUkgPSB0aGlzLl9jb3VudGVyVUlb
aV07Ci0gICAgICAgICAgICBpZiAoIWNvdW50ZXJVSS52aXNpYmxlKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIHkgPSBjb3VudGVyVUkuZ3JhcGhZVmFsdWVzW2lu
ZGV4XTsKLSAgICAgICAgICAgIGNvdW50ZXJVSS5zYXZlSW1hZ2VVbmRlck1hcmtlcihjdHgsIHgs
IHksIHJhZGl1cyk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gICAgICovCi0gICAgX2RyYXdNYXJrZXI6
IGZ1bmN0aW9uKGN0eCwgeCwgaW5kZXgpCi0gICAgewotICAgICAgICB0aGlzLl9zYXZlSW1hZ2VV
bmRlck1hcmtlcihjdHgsIHgsIGluZGV4KTsKLSAgICAgICAgY29uc3QgcmFkaXVzID0gMjsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb3VudGVyVUkubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgIHZhciBjb3VudGVyVUkgPSB0aGlzLl9jb3VudGVyVUlbaV07Ci0gICAgICAg
ICAgICBpZiAoIWNvdW50ZXJVSS52aXNpYmxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgdmFyIHkgPSBjb3VudGVyVUkuZ3JhcGhZVmFsdWVzW2luZGV4XTsKLSAgICAg
ICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgIGN0eC5hcmMoeCwgeSwgcmFkaXVz
LCAwLCBNYXRoLlBJICogMiwgdHJ1ZSk7Ci0gICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMTsK
LSAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb3VudGVyVUkuZ3JhcGhDb2xvcjsKLSAgICAg
ICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvdW50ZXJVSS5ncmFwaENvbG9yOwotICAgICAgICAg
ICAgY3R4LmZpbGwoKTsKLSAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKLSAgICAgICAgICAgIGN0
eC5jbG9zZVBhdGgoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5Db3VudGVyVUlCYXNlfSBjb3VudGVyVUkKLSAgICAgKi8KLSAgICBf
ZHJhd0dyYXBoOiBmdW5jdGlvbihjb3VudGVyVUkpCi0gICAgewotICAgICAgICB2YXIgY2FudmFz
ID0gdGhpcy5fY2FudmFzOwotICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJk
Iik7Ci0gICAgICAgIHZhciB3aWR0aCA9IGNhbnZhcy53aWR0aDsKLSAgICAgICAgdmFyIGhlaWdo
dCA9IHRoaXMuX2NsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIHZhciBvcmlnaW5ZID0gdGhpcy5fb3Jp
Z2luWTsKLSAgICAgICAgdmFyIHZhbHVlR2V0dGVyID0gY291bnRlclVJLnZhbHVlR2V0dGVyOwot
Ci0gICAgICAgIGlmICghdGhpcy5fY291bnRlcnMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHZhciBtYXhWYWx1ZTsKLSAgICAgICAgdmFyIG1pblZhbHVlOwotICAgICAg
ICBmb3IgKHZhciBpID0gdGhpcy5fbWluaW11bUluZGV4OyBpIDw9IHRoaXMuX21heGltdW1JbmRl
eDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZUdldHRlcih0aGlzLl9jb3Vu
dGVyc1tpXSk7Ci0gICAgICAgICAgICBpZiAobWluVmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1
ZSA8IG1pblZhbHVlKQotICAgICAgICAgICAgICAgIG1pblZhbHVlID0gdmFsdWU7Ci0gICAgICAg
ICAgICBpZiAobWF4VmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA+IG1heFZhbHVlKQotICAg
ICAgICAgICAgICAgIG1heFZhbHVlID0gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjb3Vu
dGVyVUkuc2V0UmFuZ2UobWluVmFsdWUsIG1heFZhbHVlKTsKLQotICAgICAgICBpZiAoIWNvdW50
ZXJVSS52aXNpYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciB5VmFsdWVz
ID0gY291bnRlclVJLmdyYXBoWVZhbHVlczsKLSAgICAgICAgeVZhbHVlcy5sZW5ndGggPSB0aGlz
Ll9jb3VudGVycy5sZW5ndGg7Ci0KLSAgICAgICAgdmFyIG1heFlSYW5nZSA9IG1heFZhbHVlIC0g
bWluVmFsdWU7Ci0gICAgICAgIHZhciB5RmFjdG9yID0gbWF4WVJhbmdlID8gaGVpZ2h0IC8gKG1h
eFlSYW5nZSkgOiAxOwotCi0gICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgdmFyIGN1
cnJlbnRZID0gb3JpZ2luWSArIChoZWlnaHQgLSAodmFsdWVHZXR0ZXIodGhpcy5fY291bnRlcnNb
dGhpcy5fbWluaW11bUluZGV4XSkgLSBtaW5WYWx1ZSkgKiB5RmFjdG9yKTsKLSAgICAgICAgY3R4
Lm1vdmVUbygwLCBjdXJyZW50WSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9taW5pbXVt
SW5kZXg7IGkgPD0gdGhpcy5fbWF4aW11bUluZGV4OyBpKyspIHsKLSAgICAgICAgICAgICB2YXIg
eCA9IHRoaXMuX2NvdW50ZXJzW2ldLng7Ci0gICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCBjdXJy
ZW50WSk7Ci0gICAgICAgICAgICAgY3VycmVudFkgPSBvcmlnaW5ZICsgKGhlaWdodCAtICh2YWx1
ZUdldHRlcih0aGlzLl9jb3VudGVyc1tpXSkgLSBtaW5WYWx1ZSkgKiB5RmFjdG9yKTsKLSAgICAg
ICAgICAgICBjdHgubGluZVRvKHgsIGN1cnJlbnRZKTsKLQotICAgICAgICAgICAgIHlWYWx1ZXNb
aV0gPSBjdXJyZW50WTsKLSAgICAgICAgfQotICAgICAgICBjdHgubGluZVRvKHdpZHRoLCBjdXJy
ZW50WSk7Ci0gICAgICAgIGN0eC5saW5lV2lkdGggPSAxOwotICAgICAgICBjdHguc3Ryb2tlU3R5
bGUgPSBjb3VudGVyVUkuZ3JhcGhDb2xvcjsKLSAgICAgICAgY3R4LnN0cm9rZSgpOwotICAgICAg
ICBjdHguY2xvc2VQYXRoKCk7Ci0gICAgfSwKLQotICAgIF9kaXNjYXJkSW1hZ2VVbmRlck1hcmtl
cjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9j
b3VudGVyVUkubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB0aGlzLl9jb3VudGVyVUlbaV0uZGlz
Y2FyZEltYWdlVW5kZXJNYXJrZXIoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNw
ZWN0b3IuTWVtb3J5U3RhdGlzdGljcy5wcm90b3R5cGUKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01FeHRlbnNpb24uanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUV4dGVuc2lvbi5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjhkZGJhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RPTUV4dGVuc2lvbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDYyMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqCi0gKiBDb250YWlucyBkaWZmIG1ldGhvZCBiYXNlZCBvbiBKYXZhc2NyaXB0IERpZmYgQWxn
b3JpdGhtIEJ5IEpvaG4gUmVzaWcKLSAqIGh0dHA6Ly9lam9obi5vcmcvZmlsZXMvanNkaWZmLmpz
IChyZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UpLgotICovCi0KLS8qKgotICogQHBhcmFt
IHtzdHJpbmc9fSBkaXJlY3Rpb24KLSAqLwotTm9kZS5wcm90b3R5cGUucmFuZ2VPZldvcmQgPSBm
dW5jdGlvbihvZmZzZXQsIHN0b3BDaGFyYWN0ZXJzLCBzdGF5V2l0aGluTm9kZSwgZGlyZWN0aW9u
KQotewotICAgIHZhciBzdGFydE5vZGU7Ci0gICAgdmFyIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICB2
YXIgZW5kTm9kZTsKLSAgICB2YXIgZW5kT2Zmc2V0ID0gMDsKLQotICAgIGlmICghc3RheVdpdGhp
bk5vZGUpCi0gICAgICAgIHN0YXlXaXRoaW5Ob2RlID0gdGhpczsKLQotICAgIGlmICghZGlyZWN0
aW9uIHx8IGRpcmVjdGlvbiA9PT0gImJhY2t3YXJkIiB8fCBkaXJlY3Rpb24gPT09ICJib3RoIikg
ewotICAgICAgICB2YXIgbm9kZSA9IHRoaXM7Ci0gICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAg
ICAgICAgICBpZiAobm9kZSA9PT0gc3RheVdpdGhpbk5vZGUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIXN0YXJ0Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnROb2RlID0gc3RheVdpdGhp
bk5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewotICAgICAgICAgICAg
ICAgIHZhciBzdGFydCA9IChub2RlID09PSB0aGlzID8gKG9mZnNldCAtIDEpIDogKG5vZGUubm9k
ZVZhbHVlLmxlbmd0aCAtIDEpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7
IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdG9wQ2hhcmFjdGVycy5p
bmRleE9mKG5vZGUubm9kZVZhbHVlW2ldKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0Tm9kZSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNl
dCA9IGkgKyAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChzdGFydE5vZGUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIG5v
ZGUgPSBub2RlLnRyYXZlcnNlUHJldmlvdXNOb2RlKHN0YXlXaXRoaW5Ob2RlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghc3RhcnROb2RlKSB7Ci0gICAgICAgICAgICBzdGFydE5vZGUgPSBz
dGF5V2l0aGluTm9kZTsKLSAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IHRoaXM7Ci0gICAgICAgIHN0YXJ0T2Zm
c2V0ID0gb2Zmc2V0OwotICAgIH0KLQotICAgIGlmICghZGlyZWN0aW9uIHx8IGRpcmVjdGlvbiA9
PT0gImZvcndhcmQiIHx8IGRpcmVjdGlvbiA9PT0gImJvdGgiKSB7Ci0gICAgICAgIG5vZGUgPSB0
aGlzOwotICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUgPT09IHN0
YXlXaXRoaW5Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbmROb2RlKQotICAgICAgICAg
ICAgICAgICAgICBlbmROb2RlID0gc3RheVdpdGhpbk5vZGU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBO
b2RlLlRFWFRfTk9ERSkgewotICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IChub2RlID09PSB0
aGlzID8gb2Zmc2V0IDogMCk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBp
IDwgbm9kZS5ub2RlVmFsdWUubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHN0b3BDaGFyYWN0ZXJzLmluZGV4T2Yobm9kZS5ub2RlVmFsdWVbaV0pICE9PSAtMSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kTm9kZSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbmRPZmZzZXQgPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChlbmROb2RlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKHN0YXlXaXRoaW5Ob2RlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghZW5kTm9kZSkgewotICAgICAgICAgICAgZW5kTm9kZSA9IHN0
YXlXaXRoaW5Ob2RlOwotICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc3RheVdpdGhpbk5vZGUubm9k
ZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFID8gc3RheVdpdGhpbk5vZGUubm9kZVZhbHVlLmxlbmd0
aCA6IHN0YXlXaXRoaW5Ob2RlLmNoaWxkTm9kZXMubGVuZ3RoOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgZW5kTm9kZSA9IHRoaXM7Ci0gICAgICAgIGVuZE9mZnNldCA9IG9mZnNl
dDsKLSAgICB9Ci0KLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZVJh
bmdlKCk7Ci0gICAgcmVzdWx0LnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpOwotICAg
IHJlc3VsdC5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLU5vZGUucHJvdG90eXBlLnRyYXZlcnNlTmV4dFRleHROb2RlID0gZnVuY3Rpb24oc3Rh
eVdpdGhpbikKLXsKLSAgICB2YXIgbm9kZSA9IHRoaXMudHJhdmVyc2VOZXh0Tm9kZShzdGF5V2l0
aGluKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChub2Rl
ICYmIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKQotICAgICAgICBub2RlID0gbm9k
ZS50cmF2ZXJzZU5leHROb2RlKHN0YXlXaXRoaW4pOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0K
LU5vZGUucHJvdG90eXBlLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQgPSBmdW5jdGlvbihvZmZzZXQp
Ci17Ci0gICAgdmFyIG5vZGUgPSB0aGlzLnRyYXZlcnNlTmV4dFRleHROb2RlKHRoaXMpOwotICAg
IHdoaWxlIChub2RlICYmIG9mZnNldCA+IG5vZGUubm9kZVZhbHVlLmxlbmd0aCkgewotICAgICAg
ICBvZmZzZXQgLT0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoOwotICAgICAgICBub2RlID0gbm9kZS50
cmF2ZXJzZU5leHRUZXh0Tm9kZSh0aGlzKTsKLSAgICB9Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm4geyBjb250YWluZXI6IHRoaXMsIG9mZnNldDogMCB9OwotICAgIHJldHVybiB7IGNv
bnRhaW5lcjogbm9kZSwgb2Zmc2V0OiBvZmZzZXQgfTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0
cmluZ30gY2xhc3NOYW1lCi0gKi8KLUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZVN0eWxlQ2xhc3Mg
PSBmdW5jdGlvbihjbGFzc05hbWUpCi17Ci0gICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKGNsYXNz
TmFtZSk7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nU3R5bGVDbGFzc2Vz
ID0gZnVuY3Rpb24oY2xhc3NOYW1lUmVnZXgpCi17Ci0gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4
cCgiKF58XFxzKykiICsgY2xhc3NOYW1lUmVnZXggKyAiKCR8XFxzKykiKTsKLSAgICBpZiAocmVn
ZXgudGVzdCh0aGlzLmNsYXNzTmFtZSkpCi0gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5j
bGFzc05hbWUucmVwbGFjZShyZWdleCwgIiAiKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmlu
Z30gY2xhc3NOYW1lCi0gKi8KLUVsZW1lbnQucHJvdG90eXBlLmFkZFN0eWxlQ2xhc3MgPSBmdW5j
dGlvbihjbGFzc05hbWUpCi17Ci0gICAgdGhpcy5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7Ci19
Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZQotICogQHJldHVybiB7Ym9vbGVh
bn0KLSAqLwotRWxlbWVudC5wcm90b3R5cGUuaGFzU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNz
TmFtZSkKLXsKLSAgICByZXR1cm4gdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsK
LX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lCi0gKiBAcGFyYW0geyp9IGVu
YWJsZQotICovCi1FbGVtZW50LnByb3RvdHlwZS5lbmFibGVTdHlsZUNsYXNzID0gZnVuY3Rpb24o
Y2xhc3NOYW1lLCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgdGhpcy5hZGRT
dHlsZUNsYXNzKGNsYXNzTmFtZSk7Ci0gICAgZWxzZQotICAgICAgICB0aGlzLnJlbW92ZVN0eWxl
Q2xhc3MoY2xhc3NOYW1lKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9
IHgKLSAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0geQotICovCi1FbGVtZW50LnByb3RvdHlw
ZS5wb3NpdGlvbkF0ID0gZnVuY3Rpb24oeCwgeSkKLXsKLSAgICBpZiAodHlwZW9mIHggPT09ICJu
dW1iZXIiKQotICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCJsZWZ0IiwgeCArICJweCIp
OwotICAgIGVsc2UKLSAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgibGVmdCIpOwot
Ci0gICAgaWYgKHR5cGVvZiB5ID09PSAibnVtYmVyIikKLSAgICAgICAgdGhpcy5zdHlsZS5zZXRQ
cm9wZXJ0eSgidG9wIiwgeSArICJweCIpOwotICAgIGVsc2UKLSAgICAgICAgdGhpcy5zdHlsZS5y
ZW1vdmVQcm9wZXJ0eSgidG9wIik7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLmlzU2Nyb2xsZWRU
b0JvdHRvbSA9IGZ1bmN0aW9uKCkKLXsKLSAgICAvLyBUaGlzIGNvZGUgd29ya3Mgb25seSBmb3Ig
MC13aWR0aCBib3JkZXIKLSAgICByZXR1cm4gdGhpcy5zY3JvbGxUb3AgKyB0aGlzLmNsaWVudEhl
aWdodCA9PT0gdGhpcy5zY3JvbGxIZWlnaHQ7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnJlbW92
ZVNlbGYgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKHRoaXMucGFyZW50RWxlbWVudCkKLSAgICAg
ICAgdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpOwotfQotCi1DaGFyYWN0ZXJE
YXRhLnByb3RvdHlwZS5yZW1vdmVTZWxmID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlU2VsZjsK
LURvY3VtZW50VHlwZS5wcm90b3R5cGUucmVtb3ZlU2VsZiA9IEVsZW1lbnQucHJvdG90eXBlLnJl
bW92ZVNlbGY7Ci0KLS8qKgotICogQHBhcmFtIHtOb2RlfSBmcm9tTm9kZQotICogQHBhcmFtIHtO
b2RlfSB0b05vZGUKLSAqLwotZnVuY3Rpb24gcmVtb3ZlU3Vic2VxdWVudE5vZGVzKGZyb21Ob2Rl
LCB0b05vZGUpCi17Ci0gICAgZm9yICh2YXIgbm9kZSA9IGZyb21Ob2RlOyBub2RlICYmIG5vZGUg
IT09IHRvTm9kZTsgKSB7Ci0gICAgICAgIHZhciBub2RlVG9SZW1vdmUgPSBub2RlOwotICAgICAg
ICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgICAgbm9kZVRvUmVtb3ZlLnJlbW92ZVNl
bGYoKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge251bWJl
cn0gd2lkdGgKLSAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQKLSAqLwotZnVuY3Rpb24gU2l6ZSh3
aWR0aCwgaGVpZ2h0KQotewotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdo
dCA9IGhlaWdodDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0VsZW1lbnQ9fSBjb250YWluZXJFbGVt
ZW50Ci0gKiBAcmV0dXJuIHtTaXplfQotICovCi1FbGVtZW50LnByb3RvdHlwZS5tZWFzdXJlUHJl
ZmVycmVkU2l6ZSA9IGZ1bmN0aW9uKGNvbnRhaW5lckVsZW1lbnQpCi17Ci0gICAgY29udGFpbmVy
RWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTsKLSAgICBjb250YWlu
ZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMpOwotICAgIHRoaXMucG9zaXRpb25BdCgwLCAwKTsK
LSAgICB2YXIgcmVzdWx0ID0gbmV3IFNpemUodGhpcy5vZmZzZXRXaWR0aCwgdGhpcy5vZmZzZXRI
ZWlnaHQpOwotICAgIHRoaXMucG9zaXRpb25BdCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7Ci0gICAg
dGhpcy5yZW1vdmVTZWxmKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZS5wcm90b3R5
cGUuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZUluQXJyYXkgPSBmdW5jdGlvbihuYW1l
QXJyYXkpCi17Ci0gICAgZm9yICh2YXIgbm9kZSA9IHRoaXM7IG5vZGUgJiYgbm9kZSAhPT0gdGhp
cy5vd25lckRvY3VtZW50OyBub2RlID0gbm9kZS5wYXJlbnROb2RlKQotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG5hbWVBcnJheS5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGlmIChub2Rl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVBcnJheVtpXS50b0xvd2VyQ2FzZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgIHJldHVybiBudWxsOwotfQotCi1Ob2Rl
LnByb3RvdHlwZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lID0gZnVuY3Rpb24obm9k
ZU5hbWUpCi17Ci0gICAgcmV0dXJuIHRoaXMuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFt
ZUluQXJyYXkoW25vZGVOYW1lXSk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IGNsYXNz
TmFtZQotICogQHBhcmFtIHtFbGVtZW50PX0gc3RheVdpdGhpbgotICovCi1Ob2RlLnByb3RvdHlw
ZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lLCBzdGF5
V2l0aGluKQotewotICAgIGZvciAodmFyIG5vZGUgPSB0aGlzOyBub2RlICYmIG5vZGUgIT09IHN0
YXlXaXRoaW4gJiYgbm9kZSAhPT0gdGhpcy5vd25lckRvY3VtZW50OyBub2RlID0gbm9kZS5wYXJl
bnROb2RlKQotICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUg
JiYgbm9kZS5oYXNTdHlsZUNsYXNzKGNsYXNzTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotRWxlbWVudC5wcm90b3R5cGUucXVlcnkgPSBmdW5j
dGlvbihxdWVyeSkKLXsKLSAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmV2YWx1YXRlKHF1
ZXJ5LCB0aGlzLCBudWxsLCBYUGF0aFJlc3VsdC5GSVJTVF9PUkRFUkVEX05PREVfVFlQRSwgbnVs
bCkuc2luZ2xlTm9kZVZhbHVlOwotfQotCi1FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJl
biA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAodGhpcy5maXJzdENoaWxkKQotICAgICAgICB0aGlz
LnRleHRDb250ZW50ID0gIiI7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLmlzSW5zZXJ0aW9uQ2Fy
ZXRJbnNpZGUgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50IHx8ICFzZWxlY3Rpb24u
aXNDb2xsYXBzZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2YXIgc2VsZWN0aW9uUmFu
Z2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uUmFuZ2Uu
c3RhcnRDb250YWluZXIuaXNTZWxmT3JEZXNjZW5kYW50KHRoaXMpOwotfQotCi0vKioKLSAqIEBw
YXJhbSB7c3RyaW5nPX0gY2xhc3NOYW1lCi0gKi8KLUVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUNo
aWxkID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGNsYXNzTmFtZSkKLXsKLSAgICB2YXIgZWxlbWVu
dCA9IHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnROYW1lKTsKLSAgICBp
ZiAoY2xhc3NOYW1lKQotICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAg
ICB0aGlzLmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi1E
b2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZCA9IEVsZW1lbnQucHJvdG90eXBl
LmNyZWF0ZUNoaWxkOwotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gKi8KLUVsZW1l
bnQucHJvdG90eXBlLmNyZWF0ZVRleHRDaGlsZCA9IGZ1bmN0aW9uKHRleHQpCi17Ci0gICAgdmFy
IGVsZW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7Ci0gICAg
dGhpcy5hcHBlbmRDaGlsZChlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotRG9j
dW1lbnRGcmFnbWVudC5wcm90b3R5cGUuY3JlYXRlVGV4dENoaWxkID0gRWxlbWVudC5wcm90b3R5
cGUuY3JlYXRlVGV4dENoaWxkOwotCi0vKioKLSAqIEByZXR1cm4ge251bWJlcn0KLSAqLwotRWxl
bWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRMZWZ0ID0gZnVuY3Rpb24oKQotewotICAgIHJldHVy
biB0aGlzLnRvdGFsT2Zmc2V0KCkubGVmdDsKLX0KLQotLyoqCi0gKiBAcmV0dXJuIHtudW1iZXJ9
Ci0gKi8KLUVsZW1lbnQucHJvdG90eXBlLnRvdGFsT2Zmc2V0VG9wID0gZnVuY3Rpb24oKQotewot
ICAgIHJldHVybiB0aGlzLnRvdGFsT2Zmc2V0KCkudG9wOwotCi19Ci0KLUVsZW1lbnQucHJvdG90
eXBlLnRvdGFsT2Zmc2V0ID0gZnVuY3Rpb24oKQotewotICAgIHZhciB0b3RhbExlZnQgPSAwOwot
ICAgIHZhciB0b3RhbFRvcCA9IDA7Ci0KLSAgICBmb3IgKHZhciBlbGVtZW50ID0gdGhpczsgZWxl
bWVudDsgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KSB7Ci0gICAgICAgIHRvdGFsTGVm
dCArPSBlbGVtZW50Lm9mZnNldExlZnQ7Ci0gICAgICAgIHRvdGFsVG9wICs9IGVsZW1lbnQub2Zm
c2V0VG9wOwotICAgICAgICBpZiAodGhpcyAhPT0gZWxlbWVudCkgewotICAgICAgICAgICAgdG90
YWxMZWZ0ICs9IGVsZW1lbnQuY2xpZW50TGVmdCAtIGVsZW1lbnQuc2Nyb2xsTGVmdDsKLSAgICAg
ICAgICAgIHRvdGFsVG9wICs9IGVsZW1lbnQuY2xpZW50VG9wIC0gZWxlbWVudC5zY3JvbGxUb3A7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZWZ0OiB0b3RhbExlZnQsIHRvcDog
dG90YWxUb3AgfTsKLX0KLQotRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsT2Zmc2V0ID0gZnVuY3Rp
b24oKQotewotICAgIHZhciBjdXJMZWZ0ID0gMDsKLSAgICB2YXIgY3VyVG9wID0gMDsKLSAgICBm
b3IgKHZhciBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQuc2Nyb2xs
UGFyZW50KSB7Ci0gICAgICAgIGN1ckxlZnQgKz0gZWxlbWVudC5zY3JvbGxMZWZ0OwotICAgICAg
ICBjdXJUb3AgKz0gZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAgfQotICAgIHJldHVybiB7IGxlZnQ6
IGN1ckxlZnQsIHRvcDogY3VyVG9wIH07Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
cGFyYW0ge251bWJlcj19IHgKLSAqIEBwYXJhbSB7bnVtYmVyPX0geQotICogQHBhcmFtIHtudW1i
ZXI9fSB3aWR0aAotICogQHBhcmFtIHtudW1iZXI9fSBoZWlnaHQKLSAqLwotZnVuY3Rpb24gQW5j
aG9yQm94KHgsIHksIHdpZHRoLCBoZWlnaHQpCi17Ci0gICAgdGhpcy54ID0geCB8fCAwOwotICAg
IHRoaXMueSA9IHkgfHwgMDsKLSAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDsKLSAgICB0aGlz
LmhlaWdodCA9IGhlaWdodCB8fCAwOwotfQotCi0vKioKLSAqIEBwYXJhbSB7V2luZG93fSB0YXJn
ZXRXaW5kb3cKLSAqIEByZXR1cm4ge0FuY2hvckJveH0KLSAqLwotRWxlbWVudC5wcm90b3R5cGUu
b2Zmc2V0UmVsYXRpdmVUb1dpbmRvdyA9IGZ1bmN0aW9uKHRhcmdldFdpbmRvdykKLXsKLSAgICB2
YXIgZWxlbWVudE9mZnNldCA9IG5ldyBBbmNob3JCb3goKTsKLSAgICB2YXIgY3VyRWxlbWVudCA9
IHRoaXM7Ci0gICAgdmFyIGN1cldpbmRvdyA9IHRoaXMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmll
dzsKLSAgICB3aGlsZSAoY3VyV2luZG93ICYmIGN1ckVsZW1lbnQpIHsKLSAgICAgICAgZWxlbWVu
dE9mZnNldC54ICs9IGN1ckVsZW1lbnQudG90YWxPZmZzZXRMZWZ0KCk7Ci0gICAgICAgIGVsZW1l
bnRPZmZzZXQueSArPSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0VG9wKCk7Ci0gICAgICAgIGlmIChj
dXJXaW5kb3cgPT09IHRhcmdldFdpbmRvdykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGN1ckVsZW1lbnQgPSBjdXJXaW5kb3cuZnJhbWVFbGVtZW50OwotICAgICAgICBjdXJXaW5kb3cg
PSBjdXJXaW5kb3cucGFyZW50OwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50T2Zmc2V0Owot
fQotCi0vKioKLSAqIEBwYXJhbSB7V2luZG93fSB0YXJnZXRXaW5kb3cKLSAqIEByZXR1cm4ge0Fu
Y2hvckJveH0KLSAqLwotRWxlbWVudC5wcm90b3R5cGUuYm94SW5XaW5kb3cgPSBmdW5jdGlvbih0
YXJnZXRXaW5kb3cpCi17Ci0gICAgdGFyZ2V0V2luZG93ID0gdGFyZ2V0V2luZG93IHx8IHRoaXMu
b3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKLQotICAgIHZhciBhbmNob3JCb3ggPSB0aGlzLm9m
ZnNldFJlbGF0aXZlVG9XaW5kb3cod2luZG93KTsKLSAgICBhbmNob3JCb3gud2lkdGggPSBNYXRo
Lm1pbih0aGlzLm9mZnNldFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCAtIGFuY2hvckJveC54KTsK
LSAgICBhbmNob3JCb3guaGVpZ2h0ID0gTWF0aC5taW4odGhpcy5vZmZzZXRIZWlnaHQsIHdpbmRv
dy5pbm5lckhlaWdodCAtIGFuY2hvckJveC55KTsKLQotICAgIHJldHVybiBhbmNob3JCb3g7Ci19
Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IHRleHQKLSAqLwotRWxlbWVudC5wcm90b3R5cGUu
c2V0VGV4dEFuZFRpdGxlID0gZnVuY3Rpb24odGV4dCkKLXsKLSAgICB0aGlzLnRleHRDb250ZW50
ID0gdGV4dDsKLSAgICB0aGlzLnRpdGxlID0gdGV4dDsKLX0KLQotS2V5Ym9hcmRFdmVudC5wcm90
b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiZGF0YSIsIGZ1bmN0aW9uKCkKLXsKLSAgICAvLyBFbXVs
YXRlICJkYXRhIiBhdHRyaWJ1dGUgZnJvbSBET00gMyBUZXh0SW5wdXQgZXZlbnQuCi0gICAgLy8g
U2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLUV2ZW50
cy1UZXh0RXZlbnQtZGF0YQotICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgIGNhc2Ug
ImtleXByZXNzIjoKLSAgICAgICAgICAgIGlmICghdGhpcy5jdHJsS2V5ICYmICF0aGlzLm1ldGFL
ZXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5jaGFy
Q29kZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuICIiOwotICAg
ICAgICBjYXNlICJrZXlkb3duIjoKLSAgICAgICAgY2FzZSAia2V5dXAiOgotICAgICAgICAgICAg
aWYgKCF0aGlzLmN0cmxLZXkgJiYgIXRoaXMubWV0YUtleSAmJiAhdGhpcy5hbHRLZXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy53aGljaCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuICIiOwotICAgIH0KLX0pOwotCi0v
KioKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IHByZXZlbnREZWZhdWx0Ci0gKi8KLUV2ZW50LnByb3Rv
dHlwZS5jb25zdW1lID0gZnVuY3Rpb24ocHJldmVudERlZmF1bHQpCi17Ci0gICAgdGhpcy5zdG9w
SW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKLSAgICBpZiAocHJldmVudERlZmF1bHQpCi0gICAgICAg
IHRoaXMucHJldmVudERlZmF1bHQoKTsKLSAgICB0aGlzLmhhbmRsZWQgPSB0cnVlOwotfQotCi1U
ZXh0LnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbihzdGFydCwgZW5kKQotewotICAgIHN0YXJ0
ID0gc3RhcnQgfHwgMDsKLSAgICBlbmQgPSBlbmQgfHwgdGhpcy50ZXh0Q29udGVudC5sZW5ndGg7
Ci0KLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IGVuZCArIHN0YXJ0OwotCi0g
ICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRTZWxl
Y3Rpb24oKTsKLSAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7Ci0gICAgdmFyIHJhbmdl
ID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgcmFuZ2Uuc2V0U3RhcnQo
dGhpcywgc3RhcnQpOwotICAgIHJhbmdlLnNldEVuZCh0aGlzLCBlbmQpOwotICAgIHNlbGVjdGlv
bi5hZGRSYW5nZShyYW5nZSk7Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLUVsZW1lbnQucHJvdG90
eXBlLnNlbGVjdGlvbkxlZnRPZmZzZXQgPSBmdW5jdGlvbigpCi17Ci0gICAgLy8gQ2FsY3VsYXRl
IHNlbGVjdGlvbiBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4KLQotICAg
IHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rp
b24uY29udGFpbnNOb2RlKHRoaXMsIHRydWUpKQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
IHZhciBsZWZ0T2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldDsKLSAgICB2YXIgbm9kZSA9
IHNlbGVjdGlvbi5hbmNob3JOb2RlOwotCi0gICAgd2hpbGUgKG5vZGUgIT09IHRoaXMpIHsKLSAg
ICAgICAgd2hpbGUgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7Ci0gICAgICAgICAgICBub2RlID0g
bm9kZS5wcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgICAgICBsZWZ0T2Zmc2V0ICs9IG5vZGUudGV4
dENvbnRlbnQubGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5v
ZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlZnRPZmZzZXQ7Ci19Ci0KLU5vZGUucHJvdG90eXBl
LmlzQW5jZXN0b3IgPSBmdW5jdGlvbihub2RlKQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgdmFyIGN1cnJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlOwot
ICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewotICAgICAgICBpZiAodGhpcyA9PT0gY3VycmVudE5v
ZGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY3VycmVudE5vZGUgPSBjdXJy
ZW50Tm9kZS5wYXJlbnROb2RlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5vZGUu
cHJvdG90eXBlLmlzRGVzY2VuZGFudCA9IGZ1bmN0aW9uKGRlc2NlbmRhbnQpCi17Ci0gICAgcmV0
dXJuICEhZGVzY2VuZGFudCAmJiBkZXNjZW5kYW50LmlzQW5jZXN0b3IodGhpcyk7Ci19Ci0KLU5v
ZGUucHJvdG90eXBlLmlzU2VsZk9yQW5jZXN0b3IgPSBmdW5jdGlvbihub2RlKQotewotICAgIHJl
dHVybiAhIW5vZGUgJiYgKG5vZGUgPT09IHRoaXMgfHwgdGhpcy5pc0FuY2VzdG9yKG5vZGUpKTsK
LX0KLQotTm9kZS5wcm90b3R5cGUuaXNTZWxmT3JEZXNjZW5kYW50ID0gZnVuY3Rpb24obm9kZSkK
LXsKLSAgICByZXR1cm4gISFub2RlICYmIChub2RlID09PSB0aGlzIHx8IHRoaXMuaXNEZXNjZW5k
YW50KG5vZGUpKTsKLX0KLQotTm9kZS5wcm90b3R5cGUudHJhdmVyc2VOZXh0Tm9kZSA9IGZ1bmN0
aW9uKHN0YXlXaXRoaW4pCi17Ci0gICAgdmFyIG5vZGUgPSB0aGlzLmZpcnN0Q2hpbGQ7Ci0gICAg
aWYgKG5vZGUpCi0gICAgICAgIHJldHVybiBub2RlOwotCi0gICAgaWYgKHN0YXlXaXRoaW4gJiYg
dGhpcyA9PT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBub2RlID0g
dGhpcy5uZXh0U2libGluZzsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0K
LSAgICBub2RlID0gdGhpczsKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS5uZXh0U2libGluZyAm
JiAoIXN0YXlXaXRoaW4gfHwgIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUgIT09
IHN0YXlXaXRoaW4pKQotICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICByZXR1cm4gbm9kZS5uZXh0U2libGlu
ZzsKLX0KLQotTm9kZS5wcm90b3R5cGUudHJhdmVyc2VQcmV2aW91c05vZGUgPSBmdW5jdGlvbihz
dGF5V2l0aGluKQotewotICAgIGlmIChzdGF5V2l0aGluICYmIHRoaXMgPT09IHN0YXlXaXRoaW4p
Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIHZhciBub2RlID0gdGhpcy5wcmV2aW91c1NpYmxp
bmc7Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5sYXN0Q2hpbGQpCi0gICAgICAgIG5vZGUgPSBu
b2RlLmxhc3RDaGlsZDsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
cmV0dXJuIHRoaXMucGFyZW50Tm9kZTsKLX0KLQotZnVuY3Rpb24gaXNFbnRlcktleShldmVudCkg
ewotICAgIC8vIENoZWNrIGlmIGluIElNRS4KLSAgICByZXR1cm4gZXZlbnQua2V5Q29kZSAhPT0g
MjI5ICYmIGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJFbnRlciI7Ci19Ci0KLWZ1bmN0aW9uIGNv
bnN1bWVFdmVudChlKQotewotICAgIGUuY29uc3VtZSgpOwotfQotCi0vKioKLSAqIE11dGF0aW9u
IG9ic2VydmVycyBsZWFrIG1lbW9yeS4gS2VlcCB0cmFjayBvZiB0aGVtIGFuZCBkaXNjb25uZWN0
Ci0gKiBvbiB1bmxvYWQuCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oQXJy
YXkuPFdlYktpdE11dGF0aW9uPil9IGhhbmRsZXIKLSAqLwotZnVuY3Rpb24gTm9uTGVha2luZ011
dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlcikKLXsKLSAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZXIpOwotICAgIE5vbkxlYWtpbmdNdXRhdGlvbk9ic2Vy
dmVyLl9pbnN0YW5jZXMucHVzaCh0aGlzKTsKLSAgICBpZiAoIU5vbkxlYWtpbmdNdXRhdGlvbk9i
c2VydmVyLl91bmxvYWRMaXN0ZW5lcikgewotICAgICAgICBOb25MZWFraW5nTXV0YXRpb25PYnNl
cnZlci5fdW5sb2FkTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHdoaWxlIChO
b25MZWFraW5nTXV0YXRpb25PYnNlcnZlci5faW5zdGFuY2VzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICBOb25MZWFraW5nTXV0YXRpb25PYnNlcnZlci5faW5zdGFuY2VzW05vbkxlYWtpbmdNdXRh
dGlvbk9ic2VydmVyLl9pbnN0YW5jZXMubGVuZ3RoIC0gMV0uZGlzY29ubmVjdCgpOwotICAgICAg
ICB9OwotICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgTm9uTGVha2lu
Z011dGF0aW9uT2JzZXJ2ZXIuX3VubG9hZExpc3RlbmVyLCBmYWxzZSk7Ci0gICAgfQotfQotCi1O
b25MZWFraW5nTXV0YXRpb25PYnNlcnZlci5faW5zdGFuY2VzID0gW107Ci0KLU5vbkxlYWtpbmdN
dXRhdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0Vs
ZW1lbnR9IGVsZW1lbnQKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnCi0gICAgICovCi0g
ICAgb2JzZXJ2ZTogZnVuY3Rpb24oZWxlbWVudCwgY29uZmlnKQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX29ic2VydmVyKQotICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZShlbGVt
ZW50LCBjb25maWcpOwotICAgIH0sCi0KLSAgICBkaXNjb25uZWN0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpCi0gICAgICAgICAgICB0aGlzLl9vYnNlcnZl
ci5kaXNjb25uZWN0KCk7Ci0gICAgICAgIE5vbkxlYWtpbmdNdXRhdGlvbk9ic2VydmVyLl9pbnN0
YW5jZXMucmVtb3ZlKHRoaXMpOwotICAgICAgICBkZWxldGUgdGhpcy5fb2JzZXJ2ZXI7Ci0gICAg
fQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TVByZXNlbnRhdGlvblV0aWxzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01QcmVzZW50YXRpb25VdGlscy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGY5ZjQ4My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTVByZXNlbnRhdGlvblV0aWxzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxp
bGVrLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1XZWJJbnNwZWN0
b3IuRE9NUHJlc2VudGF0aW9uVXRpbHMgPSB7fQotCi1XZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0
aW9uVXRpbHMuZGVjb3JhdGVOb2RlTGFiZWwgPSBmdW5jdGlvbihub2RlLCBwYXJlbnRFbGVtZW50
KQotewotICAgIHZhciB0aXRsZSA9IG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7Ci0KLSAg
ICB2YXIgbmFtZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
bmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aXRsZTsKLSAgICBwYXJlbnRFbGVtZW50LmFwcGVu
ZENoaWxkKG5hbWVFbGVtZW50KTsKLQotICAgIHZhciBpZEF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0
cmlidXRlKCJpZCIpOwotICAgIGlmIChpZEF0dHJpYnV0ZSkgewotICAgICAgICB2YXIgaWRFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBwYXJlbnRFbGVt
ZW50LmFwcGVuZENoaWxkKGlkRWxlbWVudCk7Ci0KLSAgICAgICAgdmFyIHBhcnQgPSAiIyIgKyBp
ZEF0dHJpYnV0ZTsKLSAgICAgICAgdGl0bGUgKz0gcGFydDsKLSAgICAgICAgaWRFbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBhcnQpKTsKLQotICAgICAgICAvLyBN
YXJrIHRoZSBuYW1lIGFzIGV4dHJhLCBzaW5jZSB0aGUgSUQgaXMgbW9yZSBpbXBvcnRhbnQuCi0g
ICAgICAgIG5hbWVFbGVtZW50LmNsYXNzTmFtZSA9ICJleHRyYSI7Ci0gICAgfQotCi0gICAgdmFy
IGNsYXNzQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Ci0gICAgaWYgKGNs
YXNzQXR0cmlidXRlKSB7Ci0gICAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NBdHRyaWJ1dGUuc3Bs
aXQoL1xzKy8pOwotICAgICAgICB2YXIgZm91bmRDbGFzc2VzID0ge307Ci0KLSAgICAgICAgaWYg
KGNsYXNzZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB2YXIgY2xhc3Nlc0VsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICBjbGFzc2VzRWxlbWVudC5j
bGFzc05hbWUgPSAiZXh0cmEiOwotICAgICAgICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGls
ZChjbGFzc2VzRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xh
c3Nlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBjbGFz
c2VzW2ldOwotICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgJiYgIShjbGFzc05hbWUgaW4g
Zm91bmRDbGFzc2VzKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcGFydCA9ICIuIiArIGNs
YXNzTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgdGl0bGUgKz0gcGFydDsKLSAgICAgICAgICAg
ICAgICAgICAgY2xhc3Nlc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUocGFydCkpOwotICAgICAgICAgICAgICAgICAgICBmb3VuZENsYXNzZXNbY2xhc3NOYW1lXSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIHBhcmVudEVsZW1lbnQudGl0bGUgPSB0aXRsZTsKLX0KLQotLyoqCi0gKiBAcGFyYW0g
e0VsZW1lbnR9IGNvbnRhaW5lcgotICogQHBhcmFtIHtzdHJpbmd9IG5vZGVUaXRsZQotICovCi1X
ZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0aW9uVXRpbHMuY3JlYXRlU3BhbnNGb3JOb2RlVGl0bGUg
PSBmdW5jdGlvbihjb250YWluZXIsIG5vZGVUaXRsZSkKLXsKLSAgICB2YXIgbWF0Y2ggPSBub2Rl
VGl0bGUubWF0Y2goLyhbXiMuXSspKCNbXi5dKyk/KFwuLiopPy8pOwotICAgIGNvbnRhaW5lci5j
cmVhdGVDaGlsZCgic3BhbiIsICJ3ZWJraXQtaHRtbC10YWctbmFtZSIpLnRleHRDb250ZW50ID0g
bWF0Y2hbMV07Ci0gICAgaWYgKG1hdGNoWzJdKQotICAgICAgICBjb250YWluZXIuY3JlYXRlQ2hp
bGQoInNwYW4iLCAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlIikudGV4dENvbnRlbnQgPSBt
YXRjaFsyXTsKLSAgICBpZiAobWF0Y2hbM10pCi0gICAgICAgIGNvbnRhaW5lci5jcmVhdGVDaGls
ZCgic3BhbiIsICJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUtbmFtZSIpLnRleHRDb250ZW50ID0gbWF0
Y2hbM107Ci19Ci0KLVdlYkluc3BlY3Rvci5ET01QcmVzZW50YXRpb25VdGlscy5saW5raWZ5Tm9k
ZVJlZmVyZW5jZSA9IGZ1bmN0aW9uKG5vZGUpCi17Ci0gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgbGluay5jbGFzc05hbWUgPSAibm9kZS1saW5rIjsK
LSAgICBXZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0aW9uVXRpbHMuZGVjb3JhdGVOb2RlTGFiZWwo
bm9kZSwgbGluayk7Ci0KLSAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgV2ViSW5z
cGVjdG9yLmRvbUFnZW50Lmluc3BlY3RFbGVtZW50LmJpbmQoV2ViSW5zcGVjdG9yLmRvbUFnZW50
LCBub2RlLmlkKSwgZmFsc2UpOwotICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVy
IiwgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmhpZ2hsaWdodERPTU5vZGUuYmluZChXZWJJbnNwZWN0
b3IuZG9tQWdlbnQsIG5vZGUuaWQsICIiLCB1bmRlZmluZWQpLCBmYWxzZSk7Ci0gICAgbGluay5h
ZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIFdlYkluc3BlY3Rvci5kb21BZ2VudC5oaWRlRE9N
Tm9kZUhpZ2hsaWdodC5iaW5kKFdlYkluc3BlY3Rvci5kb21BZ2VudCksIGZhbHNlKTsKLQotICAg
IHJldHVybiBsaW5rOwotfQotCi1XZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0aW9uVXRpbHMubGlu
a2lmeU5vZGVCeUlkID0gZnVuY3Rpb24obm9kZUlkKQotewotICAgIHZhciBub2RlID0gV2ViSW5z
cGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkKLSAgICAg
ICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
PG5vZGU+IikpOwotICAgIHJldHVybiBXZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0aW9uVXRpbHMu
bGlua2lmeU5vZGVSZWZlcmVuY2Uobm9kZSk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9
IGltYWdlVVJMCi0gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dEaW1lbnNpb25zCi0gKiBAcGFyYW0g
e2Z1bmN0aW9uKEVsZW1lbnQ9KX0gdXNlckNhbGxiYWNrCi0gKiBAcGFyYW0ge09iamVjdD19IHBy
ZWNvbXB1dGVkRGltZW5zaW9ucwotICovCi1XZWJJbnNwZWN0b3IuRE9NUHJlc2VudGF0aW9uVXRp
bHMuYnVpbGRJbWFnZVByZXZpZXdDb250ZW50cyA9IGZ1bmN0aW9uKGltYWdlVVJMLCBzaG93RGlt
ZW5zaW9ucywgdXNlckNhbGxiYWNrLCBwcmVjb21wdXRlZERpbWVuc2lvbnMpCi17Ci0gICAgdmFy
IHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLnJlc291cmNlRm9yVVJM
KGltYWdlVVJMKTsKLSAgICBpZiAoIXJlc291cmNlKSB7Ci0gICAgICAgIHVzZXJDYWxsYmFjaygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGltYWdlRWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwotICAgIGltYWdlRWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJsb2FkIiwgYnVpbGRDb250ZW50LCBmYWxzZSk7Ci0gICAgaW1hZ2VFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3JDYWxsYmFjaywgZmFsc2UpOwotICAgIHJlc291cmNl
LnBvcHVsYXRlSW1hZ2VTb3VyY2UoaW1hZ2VFbGVtZW50KTsKLQotICAgIGZ1bmN0aW9uIGVycm9y
Q2FsbGJhY2soKQotICAgIHsKLSAgICAgICAgLy8gRHJvcCB0aGUgZXZlbnQgcGFyYW1ldGVyIHdo
ZW4gaW52b2tpbmcgdXNlckNhbGxiYWNrLgotICAgICAgICB1c2VyQ2FsbGJhY2soKTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBidWlsZENvbnRlbnQoKQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0gICAgICAgIGNvbnRhaW5l
ci5jbGFzc05hbWUgPSAiaW1hZ2UtcHJldmlldy1jb250YWluZXIiOwotICAgICAgICB2YXIgbmF0
dXJhbFdpZHRoID0gcHJlY29tcHV0ZWREaW1lbnNpb25zID8gcHJlY29tcHV0ZWREaW1lbnNpb25z
Lm5hdHVyYWxXaWR0aCA6IGltYWdlRWxlbWVudC5uYXR1cmFsV2lkdGg7Ci0gICAgICAgIHZhciBu
YXR1cmFsSGVpZ2h0ID0gcHJlY29tcHV0ZWREaW1lbnNpb25zID8gcHJlY29tcHV0ZWREaW1lbnNp
b25zLm5hdHVyYWxIZWlnaHQgOiBpbWFnZUVsZW1lbnQubmF0dXJhbEhlaWdodDsKLSAgICAgICAg
dmFyIG9mZnNldFdpZHRoID0gcHJlY29tcHV0ZWREaW1lbnNpb25zID8gcHJlY29tcHV0ZWREaW1l
bnNpb25zLm9mZnNldFdpZHRoIDogbmF0dXJhbFdpZHRoOwotICAgICAgICB2YXIgb2Zmc2V0SGVp
Z2h0ID0gcHJlY29tcHV0ZWREaW1lbnNpb25zID8gcHJlY29tcHV0ZWREaW1lbnNpb25zLm9mZnNl
dEhlaWdodCA6IG5hdHVyYWxIZWlnaHQ7Ci0gICAgICAgIHZhciBkZXNjcmlwdGlvbjsKLSAgICAg
ICAgaWYgKHNob3dEaW1lbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0SGVpZ2h0ID09
PSBuYXR1cmFsSGVpZ2h0ICYmIG9mZnNldFdpZHRoID09PSBuYXR1cmFsV2lkdGgpCi0gICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb24gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVkIFx4ZDcgJWQg
cGl4ZWxzIiwgb2Zmc2V0V2lkdGgsIG9mZnNldEhlaWdodCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVkIFx4
ZDcgJWQgcGl4ZWxzIChOYXR1cmFsOiAlZCBceGQ3ICVkIHBpeGVscykiLCBvZmZzZXRXaWR0aCwg
b2Zmc2V0SGVpZ2h0LCBuYXR1cmFsV2lkdGgsIG5hdHVyYWxIZWlnaHQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29udGFpbmVyLmNyZWF0ZUNoaWxkKCJ0ciIpLmNyZWF0ZUNoaWxkKCJ0ZCIsICJp
bWFnZS1jb250YWluZXIiKS5hcHBlbmRDaGlsZChpbWFnZUVsZW1lbnQpOwotICAgICAgICBpZiAo
ZGVzY3JpcHRpb24pCi0gICAgICAgICAgICBjb250YWluZXIuY3JlYXRlQ2hpbGQoInRyIikuY3Jl
YXRlQ2hpbGQoInRkIikuY3JlYXRlQ2hpbGQoInNwYW4iLCAiZGVzY3JpcHRpb24iKS50ZXh0Q29u
dGVudCA9IGRlc2NyaXB0aW9uOwotICAgICAgICB1c2VyQ2FsbGJhY2soY29udGFpbmVyKTsKLSAg
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TVN0b3JhZ2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3Jh
Z2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMDlmNzIuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlLmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMzA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9r
aWEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1z
dW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJpdHlP
cmlnaW4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb2NhbFN0b3JhZ2UKLSAqLwotV2ViSW5zcGVj
dG9yLkRPTVN0b3JhZ2UgPSBmdW5jdGlvbihzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2Up
Ci17Ci0gICAgdGhpcy5fc2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKLSAgICB0aGlz
Ll9pc0xvY2FsU3RvcmFnZSA9IGlzTG9jYWxTdG9yYWdlOwotfQotCi0vKioKLSAqIEBwYXJhbSB7
c3RyaW5nfSBzZWN1cml0eU9yaWdpbgotICogQHBhcmFtIHtib29sZWFufSBpc0xvY2FsU3RvcmFn
ZQotICogQHJldHVybiB7RE9NU3RvcmFnZUFnZW50LlN0b3JhZ2VJZH0KLSAqLwotV2ViSW5zcGVj
dG9yLkRPTVN0b3JhZ2Uuc3RvcmFnZUlkID0gZnVuY3Rpb24oc2VjdXJpdHlPcmlnaW4sIGlzTG9j
YWxTdG9yYWdlKQotewotICAgIHJldHVybiB7IHNlY3VyaXR5T3JpZ2luOiBzZWN1cml0eU9yaWdp
biwgaXNMb2NhbFN0b3JhZ2U6IGlzTG9jYWxTdG9yYWdlIH07Ci19Ci0KLVdlYkluc3BlY3Rvci5E
T01TdG9yYWdlLnByb3RvdHlwZSA9IHsKLQotICAgIC8qKiBAcmV0dXJuIHtET01TdG9yYWdlQWdl
bnQuU3RvcmFnZUlkfSAqLwotICAgIGdldCBpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLkRPTVN0b3JhZ2Uuc3RvcmFnZUlkKHRoaXMuX3NlY3VyaXR5T3JpZ2luLCB0aGlz
Ll9pc0xvY2FsU3RvcmFnZSk7Ci0gICAgfSwKLQotICAgIC8qKiBAcmV0dXJuIHtzdHJpbmd9ICov
Ci0gICAgZ2V0IHNlY3VyaXR5T3JpZ2luKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9z
ZWN1cml0eU9yaWdpbjsKLSAgICB9LAotCi0gICAgLyoqIEByZXR1cm4ge2Jvb2xlYW59ICovCi0g
ICAgZ2V0IGlzTG9jYWxTdG9yYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pc0xv
Y2FsU3RvcmFnZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/
UHJvdG9jb2wuRXJyb3IsIEFycmF5LjxET01TdG9yYWdlQWdlbnQuSXRlbT4pOnZvaWQ9fSBjYWxs
YmFjawotICAgICAqLwotICAgIGdldEl0ZW1zOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0g
ICAgICAgIERPTVN0b3JhZ2VBZ2VudC5nZXRET01TdG9yYWdlSXRlbXModGhpcy5pZCwgY2FsbGJh
Y2spOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5Ci0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9j
b2wuRXJyb3IpOnZvaWQ9fSBjYWxsYmFjawotICAgICAqLwotICAgIHNldEl0ZW06IGZ1bmN0aW9u
KGtleSwgdmFsdWUsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgRE9NU3RvcmFnZUFnZW50LnNl
dERPTVN0b3JhZ2VJdGVtKHRoaXMuaWQsIGtleSwgdmFsdWUsIGNhbGxiYWNrKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleQotICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oP1Byb3RvY29sLkVycm9yKTp2b2lkPX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICByZW1v
dmVJdGVtOiBmdW5jdGlvbihrZXksIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgRE9NU3RvcmFn
ZUFnZW50LnJlbW92ZURPTVN0b3JhZ2VJdGVtKHRoaXMuaWQsIGtleSwgY2FsbGJhY2spOwotICAg
IH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3Iu
T2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU1vZGVsID0gZnVuY3Rpb24oKQot
ewotICAgIHRoaXMuX3N0b3JhZ2VzID0ge307Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRPTVN0b3JhZ2VEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURpc3BhdGNo
ZXIodGhpcykpOwotICAgIERPTVN0b3JhZ2VBZ2VudC5lbmFibGUoKTsKLSAgICBXZWJJbnNwZWN0
b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5TZWN1cml0eU9yaWdpbkFkZGVkLCB0aGlzLl9zZWN1cml0
eU9yaWdpbkFkZGVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBl
cy5TZWN1cml0eU9yaWdpblJlbW92ZWQsIHRoaXMuX3NlY3VyaXR5T3JpZ2luUmVtb3ZlZCwgdGhp
cyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5ET01TdG9yYWdlTW9kZWwuRXZlbnRzID0gewotICAgIERP
TVN0b3JhZ2VBZGRlZDogIkRPTVN0b3JhZ2VBZGRlZCIsCi0gICAgRE9NU3RvcmFnZVJlbW92ZWQ6
ICJET01TdG9yYWdlUmVtb3ZlZCIsCi0gICAgRE9NU3RvcmFnZUl0ZW1zQ2xlYXJlZDogIkRPTVN0
b3JhZ2VJdGVtc0NsZWFyZWQiLAotICAgIERPTVN0b3JhZ2VJdGVtUmVtb3ZlZDogIkRPTVN0b3Jh
Z2VJdGVtUmVtb3ZlZCIsCi0gICAgRE9NU3RvcmFnZUl0ZW1BZGRlZDogIkRPTVN0b3JhZ2VJdGVt
QWRkZWQiLAotICAgIERPTVN0b3JhZ2VJdGVtVXBkYXRlZDogIkRPTVN0b3JhZ2VJdGVtVXBkYXRl
ZCIKLX0KLQotV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VNb2RlbC5wcm90b3R5cGUgPSB7Ci0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8K
LSAgICBfc2VjdXJpdHlPcmlnaW5BZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgc2VjdXJpdHlPcmlnaW4gPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGV2ZW50LmRhdGEp
OwotICAgICAgICB2YXIgbG9jYWxTdG9yYWdlS2V5ID0gdGhpcy5fc3RvcmFnZUtleShzZWN1cml0
eU9yaWdpbiwgdHJ1ZSk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9zdG9yYWdlc1ts
b2NhbFN0b3JhZ2VLZXldKTsKLSAgICAgICAgdmFyIGxvY2FsU3RvcmFnZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuRE9NU3RvcmFnZShzZWN1cml0eU9yaWdpbiwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuX3N0
b3JhZ2VzW2xvY2FsU3RvcmFnZUtleV0gPSBsb2NhbFN0b3JhZ2U7Ci0gICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlTW9kZWwuRXZlbnRz
LkRPTVN0b3JhZ2VBZGRlZCwgbG9jYWxTdG9yYWdlKTsKLQotICAgICAgICB2YXIgc2Vzc2lvblN0
b3JhZ2VLZXkgPSB0aGlzLl9zdG9yYWdlS2V5KHNlY3VyaXR5T3JpZ2luLCBmYWxzZSk7Ci0gICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9zdG9yYWdlc1tzZXNzaW9uU3RvcmFnZUtleV0pOwot
ICAgICAgICB2YXIgc2Vzc2lvblN0b3JhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2Uo
c2VjdXJpdHlPcmlnaW4sIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fc3RvcmFnZXNbc2Vzc2lvblN0
b3JhZ2VLZXldID0gc2Vzc2lvblN0b3JhZ2U7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlTW9kZWwuRXZlbnRzLkRPTVN0b3JhZ2VB
ZGRlZCwgc2Vzc2lvblN0b3JhZ2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfc2VjdXJpdHlPcmlnaW5S
ZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWN1cml0eU9yaWdp
biA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHZhciBsb2Nh
bFN0b3JhZ2VLZXkgPSB0aGlzLl9zdG9yYWdlS2V5KHNlY3VyaXR5T3JpZ2luLCB0cnVlKTsKLSAg
ICAgICAgdmFyIGxvY2FsU3RvcmFnZSA9IHRoaXMuX3N0b3JhZ2VzW2xvY2FsU3RvcmFnZUtleV07
Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGxvY2FsU3RvcmFnZSk7Ci0gICAgICAgIGRlbGV0ZSB0
aGlzLl9zdG9yYWdlc1tsb2NhbFN0b3JhZ2VLZXldOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU1vZGVsLkV2ZW50cy5ET01TdG9y
YWdlUmVtb3ZlZCwgbG9jYWxTdG9yYWdlKTsKLQotICAgICAgICB2YXIgc2Vzc2lvblN0b3JhZ2VL
ZXkgPSB0aGlzLl9zdG9yYWdlS2V5KHNlY3VyaXR5T3JpZ2luLCBmYWxzZSk7Ci0gICAgICAgIHZh
ciBzZXNzaW9uU3RvcmFnZSA9IHRoaXMuX3N0b3JhZ2VzW3Nlc3Npb25TdG9yYWdlS2V5XTsKLSAg
ICAgICAgY29uc29sZS5hc3NlcnQoc2Vzc2lvblN0b3JhZ2UpOwotICAgICAgICBkZWxldGUgdGhp
cy5fc3RvcmFnZXNbc2Vzc2lvblN0b3JhZ2VLZXldOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU1vZGVsLkV2ZW50cy5ET01TdG9y
YWdlUmVtb3ZlZCwgc2Vzc2lvblN0b3JhZ2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gc2VjdXJpdHlPcmlnaW4KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlz
TG9jYWxTdG9yYWdlCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIF9zdG9y
YWdlS2V5OiBmdW5jdGlvbihzZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2UpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2Uuc3Rv
cmFnZUlkKHNlY3VyaXR5T3JpZ2luLCBpc0xvY2FsU3RvcmFnZSkpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge0RPTVN0b3JhZ2VBZ2VudC5TdG9yYWdlSWR9IHN0b3JhZ2VJZAot
ICAgICAqLwotICAgIF9kb21TdG9yYWdlSXRlbXNDbGVhcmVkOiBmdW5jdGlvbihzdG9yYWdlSWQp
Ci0gICAgewotICAgICAgICB2YXIgZG9tU3RvcmFnZSA9IHRoaXMuc3RvcmFnZUZvcklkKHN0b3Jh
Z2VJZCk7Ci0gICAgICAgIHZhciBzdG9yYWdlRGF0YSA9IHsKLSAgICAgICAgICAgIHN0b3JhZ2U6
IGRvbVN0b3JhZ2UKLSAgICAgICAgfTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VNb2RlbC5FdmVudHMuRE9NU3RvcmFnZUl0ZW1z
Q2xlYXJlZCwgc3RvcmFnZURhdGEpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e0RPTVN0b3JhZ2VBZ2VudC5TdG9yYWdlSWR9IHN0b3JhZ2VJZAotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBrZXkKLSAgICAgKi8KLSAgICBfZG9tU3RvcmFnZUl0ZW1SZW1vdmVkOiBmdW5jdGlvbihz
dG9yYWdlSWQsIGtleSkKLSAgICB7Ci0gICAgICAgIHZhciBkb21TdG9yYWdlID0gdGhpcy5zdG9y
YWdlRm9ySWQoc3RvcmFnZUlkKTsKLSAgICAgICAgdmFyIHN0b3JhZ2VEYXRhID0gewotICAgICAg
ICAgICAgc3RvcmFnZTogZG9tU3RvcmFnZSwKLSAgICAgICAgICAgIGtleToga2V5Ci0gICAgICAg
IH07Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5E
T01TdG9yYWdlTW9kZWwuRXZlbnRzLkRPTVN0b3JhZ2VJdGVtUmVtb3ZlZCwgc3RvcmFnZURhdGEp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTVN0b3JhZ2VBZ2VudC5TdG9y
YWdlSWR9IHN0b3JhZ2VJZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gbmV3VmFsdWUKLSAgICAgKi8KLSAgICBfZG9tU3RvcmFnZUl0ZW1BZGRlZDog
ZnVuY3Rpb24oc3RvcmFnZUlkLCBrZXksIG5ld1ZhbHVlKQotICAgIHsKLSAgICAgICAgdmFyIGRv
bVN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2VGb3JJZChzdG9yYWdlSWQpOwotICAgICAgICB2YXIgc3Rv
cmFnZURhdGEgPSB7Ci0gICAgICAgICAgICBzdG9yYWdlOiBkb21TdG9yYWdlLAotICAgICAgICAg
ICAga2V5OiBrZXksCi0gICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUKLSAgICAgICAgfTsK
LSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVN0
b3JhZ2VNb2RlbC5FdmVudHMuRE9NU3RvcmFnZUl0ZW1BZGRlZCwgc3RvcmFnZURhdGEpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTVN0b3JhZ2VBZ2VudC5TdG9yYWdlSWR9
IHN0b3JhZ2VJZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gb2xkVmFsdWUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmFsdWUKLSAgICAgKi8K
LSAgICBfZG9tU3RvcmFnZUl0ZW1VcGRhdGVkOiBmdW5jdGlvbihzdG9yYWdlSWQsIGtleSwgb2xk
VmFsdWUsIG5ld1ZhbHVlKQotICAgIHsKLSAgICAgICAgdmFyIGRvbVN0b3JhZ2UgPSB0aGlzLl9z
dG9yYWdlc1tzdG9yYWdlSWRdOwotICAgICAgICB2YXIgc3RvcmFnZURhdGEgPSB7Ci0gICAgICAg
ICAgICBzdG9yYWdlOiBkb21TdG9yYWdlLAotICAgICAgICAgICAga2V5OiBrZXksCi0gICAgICAg
ICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsCi0gICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUK
LSAgICAgICAgfTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkRPTVN0b3JhZ2VNb2RlbC5FdmVudHMuRE9NU3RvcmFnZUl0ZW1VcGRhdGVkLCBzdG9y
YWdlRGF0YSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9NU3RvcmFnZUFn
ZW50LlN0b3JhZ2VJZH0gc3RvcmFnZUlkCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkRP
TVN0b3JhZ2V9Ci0gICAgICovCi0gICAgc3RvcmFnZUZvcklkOiBmdW5jdGlvbihzdG9yYWdlSWQp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3RvcmFnZXNbSlNPTi5zdHJpbmdpZnkoc3Rv
cmFnZUlkKV07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxXZWJJ
bnNwZWN0b3IuRE9NU3RvcmFnZT59Ci0gICAgICovCi0gICAgc3RvcmFnZXM6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4g
dGhpcy5fc3RvcmFnZXMpCi0gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLl9zdG9yYWdlc1tp
ZF0pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAaW1wbGVtZW50cyB7RE9NU3RvcmFnZUFnZW50LkRpc3BhdGNoZXJ9Ci0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5ET01TdG9yYWdlTW9kZWx9IG1vZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5ET01T
dG9yYWdlRGlzcGF0Y2hlciA9IGZ1bmN0aW9uKG1vZGVsKQotewotICAgIHRoaXMuX21vZGVsID0g
bW9kZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGlzcGF0Y2hlci5wcm90b3R5cGUg
PSB7Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RPTVN0b3JhZ2VBZ2VudC5TdG9yYWdlSWR9
IHN0b3JhZ2VJZAotICAgICAqLwotICAgIGRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQ6IGZ1bmN0aW9u
KHN0b3JhZ2VJZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21vZGVsLl9kb21TdG9yYWdlSXRlbXND
bGVhcmVkKHN0b3JhZ2VJZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9N
U3RvcmFnZUFnZW50LlN0b3JhZ2VJZH0gc3RvcmFnZUlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IGtleQotICAgICAqLwotICAgIGRvbVN0b3JhZ2VJdGVtUmVtb3ZlZDogZnVuY3Rpb24oc3RvcmFn
ZUlkLCBrZXkpCi0gICAgewotICAgICAgICB0aGlzLl9tb2RlbC5fZG9tU3RvcmFnZUl0ZW1SZW1v
dmVkKHN0b3JhZ2VJZCwga2V5KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtE
T01TdG9yYWdlQWdlbnQuU3RvcmFnZUlkfSBzdG9yYWdlSWQKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30ga2V5Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbHVlCi0gICAgICovCi0gICAgZG9t
U3RvcmFnZUl0ZW1BZGRlZDogZnVuY3Rpb24oc3RvcmFnZUlkLCBrZXksIG5ld1ZhbHVlKQotICAg
IHsKLSAgICAgICAgdGhpcy5fbW9kZWwuX2RvbVN0b3JhZ2VJdGVtQWRkZWQoc3RvcmFnZUlkLCBr
ZXksIG5ld1ZhbHVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01TdG9y
YWdlQWdlbnQuU3RvcmFnZUlkfSBzdG9yYWdlSWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5
Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IG9sZFZhbHVlCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IG5ld1ZhbHVlCi0gICAgICovCi0gICAgZG9tU3RvcmFnZUl0ZW1VcGRhdGVkOiBmdW5jdGlvbihz
dG9yYWdlSWQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
bW9kZWwuX2RvbVN0b3JhZ2VJdGVtVXBkYXRlZChzdG9yYWdlSWQsIGtleSwgb2xkVmFsdWUsIG5l
d1ZhbHVlKTsKLSAgICB9LAotfQotCi0vKioKLSAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRE9NU3Rv
cmFnZU1vZGVsfQotICovCi1XZWJJbnNwZWN0b3IuZG9tU3RvcmFnZU1vZGVsID0gbnVsbDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0
ZW1zVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFn
ZUl0ZW1zVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjYjc1Mi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2VJ
dGVtc1ZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQotICovCi1XZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUl0
ZW1zVmlldyA9IGZ1bmN0aW9uKGRvbVN0b3JhZ2UsIGRvbVN0b3JhZ2VNb2RlbCkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotCi0gICAgdGhpcy5kb21TdG9yYWdlID0gZG9t
U3RvcmFnZTsKLSAgICB0aGlzLmRvbVN0b3JhZ2VNb2RlbCA9IGRvbVN0b3JhZ2VNb2RlbDsKLQot
ICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzdG9yYWdlLXZpZXciKTsKLSAgICB0aGlz
LmVsZW1lbnQuYWRkU3R5bGVDbGFzcygidGFibGUiKTsKLQotICAgIHRoaXMuZGVsZXRlQnV0dG9u
ID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJEZWxldGUiKSwgImRlbGV0ZS1zdG9yYWdlLXN0YXR1cy1iYXItaXRlbSIpOwotICAgIHRoaXMu
ZGVsZXRlQnV0dG9uLnZpc2libGUgPSBmYWxzZTsKLSAgICB0aGlzLmRlbGV0ZUJ1dHRvbi5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2RlbGV0ZUJ1dHRvbkNsaWNrZWQsIHRoaXMpOwot
Ci0gICAgdGhpcy5yZWZyZXNoQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0
b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZWZyZXNoIiksICJyZWZyZXNoLXN0b3JhZ2Utc3Rh
dHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5yZWZyZXNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fcmVmcmVzaEJ1dHRvbkNsaWNrZWQsIHRoaXMpOwotCi0gICAgdGhpcy5k
b21TdG9yYWdlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU1v
ZGVsLkV2ZW50cy5ET01TdG9yYWdlSXRlbXNDbGVhcmVkLCB0aGlzLl9kb21TdG9yYWdlSXRlbXND
bGVhcmVkLCB0aGlzKTsKLSAgICB0aGlzLmRvbVN0b3JhZ2VNb2RlbC5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5ET01TdG9yYWdlTW9kZWwuRXZlbnRzLkRPTVN0b3JhZ2VJdGVtUmVtb3Zl
ZCwgdGhpcy5fZG9tU3RvcmFnZUl0ZW1SZW1vdmVkLCB0aGlzKTsKLSAgICB0aGlzLmRvbVN0b3Jh
Z2VNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlTW9kZWwuRXZl
bnRzLkRPTVN0b3JhZ2VJdGVtQWRkZWQsIHRoaXMuX2RvbVN0b3JhZ2VJdGVtQWRkZWQsIHRoaXMp
OwotICAgIHRoaXMuZG9tU3RvcmFnZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRPTVN0b3JhZ2VNb2RlbC5FdmVudHMuRE9NU3RvcmFnZUl0ZW1VcGRhdGVkLCB0aGlzLl9kb21T
dG9yYWdlSXRlbVVwZGF0ZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUl0
ZW1zVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgc3RhdHVzQmFySXRlbXM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5yZWZyZXNoQnV0dG9uLmVsZW1lbnQsIHRoaXMuZGVs
ZXRlQnV0dG9uLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmRlbGV0ZUJ1dHRvbi52aXNpYmxlID0gZmFs
c2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50
fSBldmVudAotICAgICAqLwotICAgIF9kb21TdG9yYWdlSXRlbXNDbGVhcmVkOiBmdW5jdGlvbihl
dmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB0aGlzLl9kYXRhR3JpZC5yb290Tm9kZSgpLnJlbW92ZUNoaWxk
cmVuKCk7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLmFkZENyZWF0aW9uTm9kZShmYWxzZSk7Ci0g
ICAgICAgIHRoaXMuZGVsZXRlQnV0dG9uLnZpc2libGUgPSBmYWxzZTsKLSAgICAgICAgZXZlbnQu
Y29uc3VtZSh0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2RvbVN0b3JhZ2VJdGVtUmVtb3ZlZDog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuaXNTaG93aW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHN0b3JhZ2VEYXRhID0gZXZlbnQuZGF0
YTsKLSAgICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5fZGF0YUdyaWQucm9vdE5vZGUoKTsKLSAg
ICAgICAgdmFyIGNoaWxkcmVuID0gcm9vdE5vZGUuY2hpbGRyZW47Ci0KLSAgICAgICAgZXZlbnQu
Y29uc3VtZSh0cnVlKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gY2hpbGRyZW5baV07Ci0g
ICAgICAgICAgICBpZiAoY2hpbGROb2RlLmRhdGEua2V5ID09PSBzdG9yYWdlRGF0YS5rZXkpIHsK
LSAgICAgICAgICAgICAgICByb290Tm9kZS5yZW1vdmVDaGlsZChjaGlsZE5vZGUpOwotICAgICAg
ICAgICAgICAgIHRoaXMuZGVsZXRlQnV0dG9uLnZpc2libGUgPSAoY2hpbGRyZW4ubGVuZ3RoID4g
MSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVu
dAotICAgICAqLwotICAgIF9kb21TdG9yYWdlSXRlbUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgc3RvcmFnZURhdGEgPSBldmVudC5kYXRhOwotICAgICAgICB2YXIgcm9v
dE5vZGUgPSB0aGlzLl9kYXRhR3JpZC5yb290Tm9kZSgpOwotICAgICAgICB2YXIgY2hpbGRyZW4g
PSByb290Tm9kZS5jaGlsZHJlbjsKLQotICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAg
ICAgICB0aGlzLmRlbGV0ZUJ1dHRvbi52aXNpYmxlID0gdHJ1ZTsKLQotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgaWYgKGNoaWxk
cmVuW2ldLmRhdGEua2V5ID09PSBzdG9yYWdlRGF0YS5rZXkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBjaGlsZE5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlk
Tm9kZSh7a2V5OiBzdG9yYWdlRGF0YS5rZXksIHZhbHVlOiBzdG9yYWdlRGF0YS5uZXdWYWx1ZX0s
IGZhbHNlKTsKLSAgICAgICAgcm9vdE5vZGUuaW5zZXJ0Q2hpbGQoY2hpbGROb2RlLCBjaGlsZHJl
bi5sZW5ndGggLSAxKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2RvbVN0b3JhZ2VJdGVtVXBkYXRlZDog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuaXNTaG93aW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHN0b3JhZ2VEYXRhID0gZXZlbnQuZGF0
YTsKLSAgICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5fZGF0YUdyaWQucm9vdE5vZGUoKTsKLSAg
ICAgICAgdmFyIGNoaWxkcmVuID0gcm9vdE5vZGUuY2hpbGRyZW47Ci0KLSAgICAgICAgZXZlbnQu
Y29uc3VtZSh0cnVlKTsKLQotICAgICAgICB2YXIga2V5Rm91bmQgPSBmYWxzZTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
dmFyIGNoaWxkTm9kZSA9IGNoaWxkcmVuW2ldOwotICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5k
YXRhLmtleSA9PT0gc3RvcmFnZURhdGEua2V5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLnJlbW92ZUNoaWxkKGNoaWxkTm9k
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAga2V5Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZE5v
ZGUuZGF0YS52YWx1ZSAhPT0gc3RvcmFnZURhdGEubmV3VmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2hpbGROb2RlLmRhdGEudmFsdWUgPSBzdG9yYWdlRGF0YS5uZXdWYWx1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgY2hpbGROb2RlLnJlZnJlc2goKTsKLSAgICAgICAgICAgICAgICAgICAg
Y2hpbGROb2RlLnNlbGVjdCgpOwotICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUucmV2ZWFs
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlQnV0dG9u
LnZpc2libGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IF91cGRhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGV0YWNoQ2hpbGRWaWV3
cygpOwotICAgICAgICB0aGlzLmRvbVN0b3JhZ2UuZ2V0SXRlbXModGhpcy5fc2hvd0RPTVN0b3Jh
Z2VJdGVtcy5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX3Nob3dET01TdG9yYWdlSXRlbXM6
IGZ1bmN0aW9uKGVycm9yLCBpdGVtcykKLSAgICB7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9kYXRhR3JpZCA9IHRoaXMuX2RhdGFHcmlk
Rm9yRE9NU3RvcmFnZUl0ZW1zKGl0ZW1zKTsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQuc2hvdyh0
aGlzLmVsZW1lbnQpOwotICAgICAgICB0aGlzLl9kYXRhR3JpZC5hdXRvU2l6ZUNvbHVtbnMoMTAp
OwotICAgICAgICB0aGlzLmRlbGV0ZUJ1dHRvbi52aXNpYmxlID0gKHRoaXMuX2RhdGFHcmlkLnJv
b3ROb2RlKCkuY2hpbGRyZW4ubGVuZ3RoID4gMSk7Ci0gICAgfSwKLQotICAgIF9kYXRhR3JpZEZv
ckRPTVN0b3JhZ2VJdGVtczogZnVuY3Rpb24oaXRlbXMpCi0gICAgewotICAgICAgICB2YXIgY29s
dW1ucyA9IFsKLSAgICAgICAgICAgIHtpZDogImtleSIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIktleSIpLCBlZGl0YWJsZTogdHJ1ZX0sCi0gICAgICAgICAgICB7aWQ6ICJ2YWx1ZSIs
IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVlIiksIGVkaXRhYmxlOiB0cnVlfQot
ICAgICAgICBdOwotCi0gICAgICAgIHZhciBub2RlcyA9IFtdOwotCi0gICAgICAgIHZhciBrZXlz
ID0gW107Ci0gICAgICAgIHZhciBsZW5ndGggPSBpdGVtcy5sZW5ndGg7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBrZXkg
PSBpdGVtc1tpXVswXTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zW2ldWzFdOwotICAg
ICAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZSh7a2V5OiBr
ZXksIHZhbHVlOiB2YWx1ZX0sIGZhbHNlKTsKLSAgICAgICAgICAgIG5vZGUuc2VsZWN0YWJsZSA9
IHRydWU7Ci0gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOwotICAgICAgICAgICAga2V5cy5w
dXNoKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZGF0YUdyaWQgPSBuZXcgV2ViSW5z
cGVjdG9yLkRhdGFHcmlkKGNvbHVtbnMsIHRoaXMuX2VkaXRpbmdDYWxsYmFjay5iaW5kKHRoaXMp
LCB0aGlzLl9kZWxldGVDYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICAgICAgbGVuZ3RoID0gbm9k
ZXMubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgZGF0YUdyaWQucm9vdE5vZGUoKS5hcHBlbmRDaGlsZChub2Rlc1tpXSk7Ci0gICAg
ICAgIGRhdGFHcmlkLmFkZENyZWF0aW9uTm9kZShmYWxzZSk7Ci0gICAgICAgIGlmIChsZW5ndGgg
PiAwKQotICAgICAgICAgICAgbm9kZXNbMF0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICByZXR1
cm4gZGF0YUdyaWQ7Ci0gICAgfSwKLQotICAgIF9kZWxldGVCdXR0b25DbGlja2VkOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZGF0YUdyaWQgfHwgIXRoaXMuX2Rh
dGFHcmlkLnNlbGVjdGVkTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlz
Ll9kZWxldGVDYWxsYmFjayh0aGlzLl9kYXRhR3JpZC5zZWxlY3RlZE5vZGUpOwotICAgICAgICB0
aGlzLl9kYXRhR3JpZC5jaGFuZ2VOb2RlQWZ0ZXJEZWxldGlvbigpOwotICAgIH0sCi0KLSAgICBf
cmVmcmVzaEJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhp
cy5fdXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIF9lZGl0aW5nQ2FsbGJhY2s6IGZ1bmN0aW9uKGVk
aXRpbmdOb2RlLCBjb2x1bW5JZGVudGlmaWVyLCBvbGRUZXh0LCBuZXdUZXh0KQotICAgIHsKLSAg
ICAgICAgdmFyIGRvbVN0b3JhZ2UgPSB0aGlzLmRvbVN0b3JhZ2U7Ci0gICAgICAgIGlmICgia2V5
IiA9PT0gY29sdW1uSWRlbnRpZmllcikgewotICAgICAgICAgICAgaWYgKG9sZFRleHQpCi0gICAg
ICAgICAgICAgICAgZG9tU3RvcmFnZS5yZW1vdmVJdGVtKG9sZFRleHQpOwotICAgICAgICAgICAg
ZG9tU3RvcmFnZS5zZXRJdGVtKG5ld1RleHQsIGVkaXRpbmdOb2RlLmRhdGEudmFsdWUpOwotICAg
ICAgICAgICAgdGhpcy5fcmVtb3ZlRHVwZXMoZWRpdGluZ05vZGUpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGRvbVN0b3JhZ2Uuc2V0SXRlbShlZGl0aW5nTm9kZS5kYXRhLmtleSwgbmV3
VGV4dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5E
YXRhR3JpZE5vZGV9IG1hc3Rlck5vZGUKLSAgICAgKi8KLSAgICBfcmVtb3ZlRHVwZXM6IGZ1bmN0
aW9uKG1hc3Rlck5vZGUpCi0gICAgewotICAgICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLl9kYXRh
R3JpZC5yb290Tm9kZSgpOwotICAgICAgICB2YXIgY2hpbGRyZW4gPSByb290Tm9kZS5jaGlsZHJl
bjsKLSAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1p
KSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gY2hpbGRyZW5baV07Ci0gICAgICAgICAg
ICBpZiAoKGNoaWxkTm9kZS5kYXRhLmtleSA9PT0gbWFzdGVyTm9kZS5kYXRhLmtleSkgJiYgKG1h
c3Rlck5vZGUgIT09IGNoaWxkTm9kZSkpCi0gICAgICAgICAgICAgICAgcm9vdE5vZGUucmVtb3Zl
Q2hpbGQoY2hpbGROb2RlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfZGVsZXRlQ2FsbGJh
Y2s6IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS5pc0Ny
ZWF0aW9uTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGhpcy5kb21T
dG9yYWdlKQotICAgICAgICAgICAgdGhpcy5kb21TdG9yYWdlLnJlbW92ZUl0ZW0obm9kZS5kYXRh
LmtleSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90
eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TVN5bnRheEhpZ2hsaWdodGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01TeW50YXhIaWdobGlnaHRlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGFlOTdlYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTVN5bnRheEhpZ2hsaWdodGVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5ET01TeW50YXhIaWdobGlnaHRl
ciA9IGZ1bmN0aW9uKG1pbWVUeXBlLCBzdHJpcEV4dHJhV2hpdGVzcGFjZSkKLXsKLSAgICB0aGlz
Ll90b2tlbml6ZXIgPSBXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLlJlZ2lzdHJ5LmdldElu
c3RhbmNlKCkuZ2V0VG9rZW5pemVyKG1pbWVUeXBlKTsKLSAgICB0aGlzLl9zdHJpcEV4dHJhV2hp
dGVzcGFjZSA9IHN0cmlwRXh0cmFXaGl0ZXNwYWNlOwotfQotCi1XZWJJbnNwZWN0b3IuRE9NU3lu
dGF4SGlnaGxpZ2h0ZXIucHJvdG90eXBlID0gewotICAgIGNyZWF0ZVNwYW46IGZ1bmN0aW9uKGNv
bnRlbnQsIGNsYXNzTmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtIiAr
IGNsYXNzTmFtZTsKLSAgICAgICAgaWYgKHRoaXMuX3N0cmlwRXh0cmFXaGl0ZXNwYWNlICYmIGNs
YXNzTmFtZSAhPT0gIndoaXRlc3BhY2UiKQotICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQu
cmVwbGFjZSgvXltcblxyXSovLCAiIikucmVwbGFjZSgvXHMqJC8sICIiKTsKLSAgICAgICAgc3Bh
bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7Ci0gICAgICAg
IHJldHVybiBzcGFuOwotICAgIH0sCi0KLSAgICBzeW50YXhIaWdobGlnaHROb2RlOiBmdW5jdGlv
bihub2RlKQotICAgIHsKLSAgICAgICAgdGhpcy5fdG9rZW5pemVyLmNvbmRpdGlvbiA9IHRoaXMu
X3Rva2VuaXplci5jcmVhdGVJbml0aWFsQ29uZGl0aW9uKCk7Ci0gICAgICAgIHZhciBsaW5lcyA9
IG5vZGUudGV4dENvbnRlbnQuc3BsaXQoIlxuIik7Ci0gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGRy
ZW4oKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gbGluZXNbMF0ubGVuZ3RoID8gMCA6IDE7IGkg
PCBsaW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTsK
LSAgICAgICAgICAgIHZhciBwbGFpblRleHRTdGFydCA9IDA7Ci0gICAgICAgICAgICB0aGlzLl90
b2tlbml6ZXIubGluZSA9IGxpbmU7Ci0gICAgICAgICAgICB2YXIgY29sdW1uID0gMDsKLSAgICAg
ICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICB2YXIgbmV3Q29sdW1uID0gdGhpcy5fdG9rZW5p
emVyLm5leHRUb2tlbihjb2x1bW4pOwotICAgICAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0
aGlzLl90b2tlbml6ZXIudG9rZW5UeXBlOwotICAgICAgICAgICAgICAgIGlmICh0b2tlblR5cGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbiA+IHBsYWluVGV4dFN0YXJ0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxhaW5UZXh0ID0gbGluZS5zdWJzdHJpbmcocGxh
aW5UZXh0U3RhcnQsIGNvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBsYWluVGV4dCkpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IGxpbmUuc3Vic3RyaW5n
KGNvbHVtbiwgbmV3Q29sdW1uKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGls
ZCh0aGlzLmNyZWF0ZVNwYW4odG9rZW4sIHRva2VuVHlwZSkpOwotICAgICAgICAgICAgICAgICAg
ICBwbGFpblRleHRTdGFydCA9IG5ld0NvbHVtbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgY29sdW1uID0gbmV3Q29sdW1uOwotICAgICAgICAgICB9IHdoaWxlIChjb2x1bW4g
PCBsaW5lLmxlbmd0aCkKLQotICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgPCBsaW5lLmxl
bmd0aCkgewotICAgICAgICAgICAgICAgdmFyIHBsYWluVGV4dCA9IGxpbmUuc3Vic3RyaW5nKHBs
YWluVGV4dFN0YXJ0LCBsaW5lLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICBub2RlLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBsYWluVGV4dCkpOwotICAgICAgICAgICB9Ci0g
ICAgICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoIC0gMSkKLSAgICAgICAgICAgICAgIG5vZGUu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Rh
dGFHcmlkLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4OTQ4NS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMTc0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICAgICAg
ICAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFyYW0geyFBcnJheS48IVdlYkluc3Bl
Y3Rvci5EYXRhR3JpZC5Db2x1bW5EZXNjcmlwdG9yPn0gY29sdW1uc0FycmF5Ci0gKiBAcGFyYW0g
e2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUsIHN0cmluZywgc3RyaW5nLCBzdHJp
bmcpPX0gZWRpdENhbGxiYWNrCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5EYXRh
R3JpZE5vZGUpPX0gZGVsZXRlQ2FsbGJhY2sKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKT19IHJlZnJl
c2hDYWxsYmFjawotICogQHBhcmFtIHtmdW5jdGlvbighV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51
LCBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlKT19IGNvbnRleHRNZW51Q2FsbGJhY2sKLSAqLwot
V2ViSW5zcGVjdG9yLkRhdGFHcmlkID0gZnVuY3Rpb24oY29sdW1uc0FycmF5LCBlZGl0Q2FsbGJh
Y2ssIGRlbGV0ZUNhbGxiYWNrLCByZWZyZXNoQ2FsbGJhY2ssIGNvbnRleHRNZW51Q2FsbGJhY2sp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLnJlZ2lzdGVy
UmVxdWlyZWRDU1MoImRhdGFHcmlkLmNzcyIpOwotCi0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFt
ZSA9ICJkYXRhLWdyaWQiOwotICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0gICAgdGhp
cy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9rZXlEb3duLmJpbmQo
dGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX2hlYWRlclRhYmxlID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgidGFibGUiKTsKLSAgICB0aGlzLl9oZWFkZXJUYWJsZS5jbGFzc05hbWUgPSAiaGVh
ZGVyIjsKLSAgICB0aGlzLl9oZWFkZXJUYWJsZUhlYWRlcnMgPSB7fTsKLQotICAgIHRoaXMuX2Rh
dGFUYWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0gICAgdGhpcy5fZGF0
YVRhYmxlLmNsYXNzTmFtZSA9ICJkYXRhIjsKLQotICAgIHRoaXMuX2RhdGFUYWJsZS5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURvd25JbkRhdGFUYWJsZS5iaW5kKHRo
aXMpLCB0cnVlKTsKLSAgICB0aGlzLl9kYXRhVGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl9jbGlja0luRGF0YVRhYmxlLmJpbmQodGhpcyksIHRydWUpOwotCi0gICAgdGhpcy5f
ZGF0YVRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1l
bnVJbkRhdGFUYWJsZS5iaW5kKHRoaXMpLCB0cnVlKTsKLQotICAgIC8vIEZJWE1FOiBBZGQgYSBj
cmVhdGVDYWxsYmFjayB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBlZGl0Q2FsbGJhY2sgYW5kIGhh
cyBkaWZmZXJlbnQKLSAgICAvLyBiZWhhdmlvciB3aGVuIGNyZWF0aW5nIGEgbmV3IG5vZGUuCi0g
ICAgaWYgKGVkaXRDYWxsYmFjaykKLSAgICAgICAgdGhpcy5fZGF0YVRhYmxlLmFkZEV2ZW50TGlz
dGVuZXIoImRibGNsaWNrIiwgdGhpcy5fb25kYmxjbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0g
ICAgdGhpcy5fZWRpdENhbGxiYWNrID0gZWRpdENhbGxiYWNrOwotICAgIHRoaXMuX2RlbGV0ZUNh
bGxiYWNrID0gZGVsZXRlQ2FsbGJhY2s7Ci0gICAgdGhpcy5fcmVmcmVzaENhbGxiYWNrID0gcmVm
cmVzaENhbGxiYWNrOwotICAgIHRoaXMuX2NvbnRleHRNZW51Q2FsbGJhY2sgPSBjb250ZXh0TWVu
dUNhbGxiYWNrOwotCi0gICAgdGhpcy5fc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fc2Nyb2xsQ29udGFpbmVyLmNsYXNzTmFtZSA9ICJk
YXRhLWNvbnRhaW5lciI7Ci0gICAgdGhpcy5fc2Nyb2xsQ29udGFpbmVyLmFwcGVuZENoaWxkKHRo
aXMuX2RhdGFUYWJsZSk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5faGVh
ZGVyVGFibGUpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9zY3JvbGxDb250
YWluZXIpOwotCi0gICAgdmFyIGhlYWRlclJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRy
Iik7Ci0gICAgdmFyIGNvbHVtbkdyb3VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sZ3Jv
dXAiKTsKLSAgICBjb2x1bW5Hcm91cC5zcGFuID0gY29sdW1uc0FycmF5Lmxlbmd0aDsKLQotICAg
IHZhciBmaWxsZXJSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIGZpbGxl
clJvdy5jbGFzc05hbWUgPSAiZmlsbGVyIjsKLQotICAgIHRoaXMuX2NvbHVtbnNBcnJheSA9IGNv
bHVtbnNBcnJheTsKLSAgICB0aGlzLmNvbHVtbnMgPSB7fTsKLQotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY29sdW1uc0FycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBjb2x1bW4gPSBj
b2x1bW5zQXJyYXlbaV07Ci0gICAgICAgIGNvbHVtbi5vcmRpbmFsID0gaTsKLSAgICAgICAgdmFy
IGNvbHVtbklkZW50aWZpZXIgPSBjb2x1bW4uaWRlbnRpZmllciA9IGNvbHVtbi5pZCB8fCBpOwot
ICAgICAgICB0aGlzLmNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0gPSBjb2x1bW47Ci0gICAgICAg
IGlmIChjb2x1bW4uZGlzY2xvc3VyZSkKLSAgICAgICAgICAgIHRoaXMuZGlzY2xvc3VyZUNvbHVt
bklkZW50aWZpZXIgPSBjb2x1bW5JZGVudGlmaWVyOwotCi0gICAgICAgIHZhciBjb2wgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTsKLSAgICAgICAgaWYgKGNvbHVtbi53aWR0aCkKLSAg
ICAgICAgICAgIGNvbC5zdHlsZS53aWR0aCA9IGNvbHVtbi53aWR0aDsKLSAgICAgICAgY29sdW1u
LmVsZW1lbnQgPSBjb2w7Ci0gICAgICAgIGNvbHVtbkdyb3VwLmFwcGVuZENoaWxkKGNvbCk7Ci0K
LSAgICAgICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOwotICAgICAg
ICBjZWxsLmNsYXNzTmFtZSA9IGNvbHVtbklkZW50aWZpZXIgKyAiLWNvbHVtbiI7Ci0gICAgICAg
IGNlbGwuY29sdW1uSWRlbnRpZmllciA9IGNvbHVtbklkZW50aWZpZXI7Ci0gICAgICAgIHRoaXMu
X2hlYWRlclRhYmxlSGVhZGVyc1tjb2x1bW5JZGVudGlmaWVyXSA9IGNlbGw7Ci0KLSAgICAgICAg
dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBpZiAoY29s
dW1uLnRpdGxlRE9NRnJhZ21lbnQpCi0gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoY29sdW1u
LnRpdGxlRE9NRnJhZ21lbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXYudGV4dENv
bnRlbnQgPSBjb2x1bW4udGl0bGU7Ci0gICAgICAgIGNlbGwuYXBwZW5kQ2hpbGQoZGl2KTsKLQot
ICAgICAgICBpZiAoY29sdW1uLnNvcnQpIHsKLSAgICAgICAgICAgIGNlbGwuYWRkU3R5bGVDbGFz
cygic29ydC0iICsgY29sdW1uLnNvcnQpOwotICAgICAgICAgICAgdGhpcy5fc29ydENvbHVtbkNl
bGwgPSBjZWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbHVtbi5zb3J0YWJsZSkgewot
ICAgICAgICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsaWNrSW5I
ZWFkZXJDZWxsLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgICAgIGNlbGwuYWRkU3R5bGVD
bGFzcygic29ydGFibGUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGhlYWRlclJvdy5hcHBlbmRD
aGlsZChjZWxsKTsKLSAgICAgICAgZmlsbGVyUm93LmNyZWF0ZUNoaWxkKCJ0ZCIsIGNvbHVtbklk
ZW50aWZpZXIgKyAiLWNvbHVtbiIpOwotICAgIH0KLQotICAgIGhlYWRlclJvdy5jcmVhdGVDaGls
ZCgidGgiLCAiY29ybmVyIik7Ci0gICAgZmlsbGVyUm93LmNyZWF0ZUNoaWxkKCJ0ZCIsICJjb3Ju
ZXIiKTsKLQotICAgIHRoaXMuX2hlYWRlclRhYmxlQ29sdW1uR3JvdXAgPSBjb2x1bW5Hcm91cDsK
LSAgICB0aGlzLl9oZWFkZXJUYWJsZS5hcHBlbmRDaGlsZCh0aGlzLl9oZWFkZXJUYWJsZUNvbHVt
bkdyb3VwKTsKLSAgICB0aGlzLmhlYWRlclRhYmxlQm9keS5hcHBlbmRDaGlsZChoZWFkZXJSb3cp
OwotCi0gICAgdGhpcy5fZGF0YVRhYmxlQ29sdW1uR3JvdXAgPSBjb2x1bW5Hcm91cC5jbG9uZU5v
ZGUodHJ1ZSk7Ci0gICAgdGhpcy5fZGF0YVRhYmxlLmFwcGVuZENoaWxkKHRoaXMuX2RhdGFUYWJs
ZUNvbHVtbkdyb3VwKTsKLSAgICB0aGlzLmRhdGFUYWJsZUJvZHkuYXBwZW5kQ2hpbGQoZmlsbGVy
Um93KTsKLQotICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbnVsbDsKLSAgICB0aGlzLmV4cGFuZE5v
ZGVzV2hlbkFycm93aW5nID0gZmFsc2U7Ci0gICAgdGhpcy5zZXRSb290Tm9kZShuZXcgV2ViSW5z
cGVjdG9yLkRhdGFHcmlkTm9kZSgpKTsKLSAgICB0aGlzLmluZGVudFdpZHRoID0gMTU7Ci0gICAg
dGhpcy5yZXNpemVycyA9IFtdOwotICAgIHRoaXMuX2NvbHVtbldpZHRoc0luaXRpYWxpemVkID0g
ZmFsc2U7Ci19Ci0KLS8qKiBAdHlwZWRlZiB7e2lkOiA/c3RyaW5nLCBlZGl0YWJsZTogYm9vbGVh
biwgc29ydDogV2ViSW5zcGVjdG9yLkRhdGFHcmlkLk9yZGVyLCBzb3J0YWJsZTogYm9vbGVhbiwg
YWxpZ246IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5BbGlnbn19ICovCi1XZWJJbnNwZWN0b3IuRGF0
YUdyaWQuQ29sdW1uRGVzY3JpcHRvcjsKLQotV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkV2ZW50cyA9
IHsKLSAgICBTZWxlY3RlZE5vZGU6ICJTZWxlY3RlZE5vZGUiLAotICAgIERlc2VsZWN0ZWROb2Rl
OiAiRGVzZWxlY3RlZE5vZGUiLAotICAgIFNvcnRpbmdDaGFuZ2VkOiAiU29ydGluZ0NoYW5nZWQi
LAotICAgIENvbHVtbnNSZXNpemVkOiAiQ29sdW1uc1Jlc2l6ZWQiCi19Ci0KLS8qKiBAZW51bSB7
c3RyaW5nfSAqLwotV2ViSW5zcGVjdG9yLkRhdGFHcmlkLk9yZGVyID0gewotICAgIEFzY2VuZGlu
ZzogImFzY2VuZGluZyIsCi0gICAgRGVzY2VuZGluZzogImRlc2NlbmRpbmciCi19Ci0KLS8qKiBA
ZW51bSB7c3RyaW5nfSAqLwotV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkFsaWduID0gewotICAgIENl
bnRlcjogImNlbnRlciIsCi0gICAgUmlnaHQ6ICJyaWdodCIKLX0KLQotLyoqCi0gKiBAcGFyYW0g
e0FycmF5LjxzdHJpbmc+fSBjb2x1bW5OYW1lcwotICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0g
dmFsdWVzCi0gKi8KLVdlYkluc3BlY3Rvci5EYXRhR3JpZC5jcmVhdGVTb3J0YWJsZURhdGFHcmlk
ID0gZnVuY3Rpb24oY29sdW1uTmFtZXMsIHZhbHVlcykKLXsKLSAgICB2YXIgbnVtQ29sdW1ucyA9
IGNvbHVtbk5hbWVzLmxlbmd0aDsKLSAgICBpZiAoIW51bUNvbHVtbnMpCi0gICAgICAgIHJldHVy
biBudWxsOwotCi0gICAgdmFyIGNvbHVtbnMgPSBbXTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNvbHVtbk5hbWVzLmxlbmd0aDsgKytpKQotICAgICAgICBjb2x1bW5zLnB1c2goe3RpdGxlOiBj
b2x1bW5OYW1lc1tpXSwgd2lkdGg6IGNvbHVtbk5hbWVzW2ldLmxlbmd0aCwgc29ydGFibGU6IHRy
dWV9KTsKLQotICAgIHZhciBub2RlcyA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFs
dWVzLmxlbmd0aCAvIG51bUNvbHVtbnM7ICsraSkgewotICAgICAgICB2YXIgZGF0YSA9IHt9Owot
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbk5hbWVzLmxlbmd0aDsgKytqKQotICAg
ICAgICAgICAgZGF0YVtqXSA9IHZhbHVlc1tudW1Db2x1bW5zICogaSArIGpdOwotCi0gICAgICAg
IHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoZGF0YSwgZmFsc2UpOwot
ICAgICAgICBub2RlLnNlbGVjdGFibGUgPSBmYWxzZTsKLSAgICAgICAgbm9kZXMucHVzaChub2Rl
KTsKLSAgICB9Ci0KLSAgICB2YXIgZGF0YUdyaWQgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlk
KGNvbHVtbnMpOwotICAgIHZhciBsZW5ndGggPSBub2Rlcy5sZW5ndGg7Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgZGF0YUdyaWQucm9vdE5vZGUoKS5hcHBl
bmRDaGlsZChub2Rlc1tpXSk7Ci0KLSAgICBkYXRhR3JpZC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EYXRhR3JpZC5FdmVudHMuU29ydGluZ0NoYW5nZWQsIHNvcnREYXRhR3JpZCwgdGhp
cyk7Ci0KLSAgICBmdW5jdGlvbiBzb3J0RGF0YUdyaWQoKQotICAgIHsKLSAgICAgICAgdmFyIG5v
ZGVzID0gZGF0YUdyaWQuX3Jvb3ROb2RlLmNoaWxkcmVuLnNsaWNlKCk7Ci0gICAgICAgIHZhciBz
b3J0Q29sdW1uSWRlbnRpZmllciA9IGRhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyKCk7Ci0g
ICAgICAgIHZhciBzb3J0RGlyZWN0aW9uID0gZGF0YUdyaWQuaXNTb3J0T3JkZXJBc2NlbmRpbmco
KSA/IDEgOiAtMTsKLSAgICAgICAgdmFyIGNvbHVtbklzTnVtZXJpYyA9IHRydWU7Ci0KLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
aWYgKGlzTmFOKE51bWJlcihub2Rlc1tpXS5kYXRhW3NvcnRDb2x1bW5JZGVudGlmaWVyXSkpKQot
ICAgICAgICAgICAgICAgIGNvbHVtbklzTnVtZXJpYyA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gY29tcGFyYXRvcihkYXRhR3JpZE5vZGUxLCBkYXRhR3JpZE5vZGUyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaXRlbTEgPSBkYXRhR3JpZE5vZGUxLmRhdGFbc29y
dENvbHVtbklkZW50aWZpZXJdOwotICAgICAgICAgICAgdmFyIGl0ZW0yID0gZGF0YUdyaWROb2Rl
Mi5kYXRhW3NvcnRDb2x1bW5JZGVudGlmaWVyXTsKLSAgICAgICAgICAgIGl0ZW0xID0gaXRlbTEg
aW5zdGFuY2VvZiBOb2RlID8gaXRlbTEudGV4dENvbnRlbnQgOiBTdHJpbmcoaXRlbTEpOwotICAg
ICAgICAgICAgaXRlbTIgPSBpdGVtMiBpbnN0YW5jZW9mIE5vZGUgPyBpdGVtMi50ZXh0Q29udGVu
dCA6IFN0cmluZyhpdGVtMik7Ci0KLSAgICAgICAgICAgIHZhciBjb21wYXJpc29uOwotICAgICAg
ICAgICAgaWYgKGNvbHVtbklzTnVtZXJpYykgewotICAgICAgICAgICAgICAgIC8vIFNvcnQgbnVt
YmVycyBiYXNlZCBvbiBjb21wYXJpbmcgdGhlaXIgdmFsdWVzIHJhdGhlciB0aGFuIGEgbGV4aWNv
Z3JhcGhpY2FsIGNvbXBhcmlzb24uCi0gICAgICAgICAgICAgICAgdmFyIG51bWJlcjEgPSBwYXJz
ZUZsb2F0KGl0ZW0xKTsKLSAgICAgICAgICAgICAgICB2YXIgbnVtYmVyMiA9IHBhcnNlRmxvYXQo
aXRlbTIpOwotICAgICAgICAgICAgICAgIGNvbXBhcmlzb24gPSBudW1iZXIxIDwgbnVtYmVyMiA/
IC0xIDogKG51bWJlcjEgPiBudW1iZXIyID8gMSA6IDApOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9IGl0ZW0xIDwgaXRlbTIgPyAtMSA6IChpdGVtMSA+
IGl0ZW0yID8gMSA6IDApOwotCi0gICAgICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiAqIGNv
bXBhcmlzb247Ci0gICAgICAgIH0KLQotICAgICAgICBub2Rlcy5zb3J0KGNvbXBhcmF0b3IpOwot
ICAgICAgICBkYXRhR3JpZC5yb290Tm9kZSgpLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBkYXRhR3Jp
ZC5fcm9vdE5vZGUuYXBwZW5kQ2hpbGQobm9kZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gZGF0
YUdyaWQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZX0gcm9vdE5vZGUKLSAg
ICAgKi8KLSAgICBzZXRSb290Tm9kZTogZnVuY3Rpb24ocm9vdE5vZGUpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fcm9vdE5vZGUpIHsKLSAgICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlLnJlbW92
ZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICB0aGlzLl9yb290Tm9kZS5kYXRhR3JpZCA9IG51bGw7
Ci0gICAgICAgICAgICB0aGlzLl9yb290Tm9kZS5faXNSb290ID0gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgLyoqIEB0eXBlIHshV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZX0gKi8KLSAgICAg
ICAgdGhpcy5fcm9vdE5vZGUgPSByb290Tm9kZTsKLSAgICAgICAgcm9vdE5vZGUuX2lzUm9vdCA9
IHRydWU7Ci0gICAgICAgIHJvb3ROb2RlLmhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgIHJv
b3ROb2RlLl9leHBhbmRlZCA9IHRydWU7Ci0gICAgICAgIHJvb3ROb2RlLl9yZXZlYWxlZCA9IHRy
dWU7Ci0gICAgICAgIHJvb3ROb2RlLmRhdGFHcmlkID0gdGhpczsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9Ci0gICAgICovCi0g
ICAgcm9vdE5vZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yb290
Tm9kZTsKLSAgICB9LAotCi0gICAgX29uZGJsY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX2VkaXRpbmcgfHwgdGhpcy5fZWRpdGluZ05vZGUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNvbHVtbklkZW50aWZpZXIgPSB0aGlzLmNvbHVt
bklkZW50aWZpZXJGcm9tTm9kZShldmVudC50YXJnZXQpOwotICAgICAgICBpZiAoIWNvbHVtbklk
ZW50aWZpZXIgfHwgIXRoaXMuY29sdW1uc1tjb2x1bW5JZGVudGlmaWVyXS5lZGl0YWJsZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fc3RhcnRFZGl0aW5nKGV2ZW50LnRhcmdl
dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5EYXRh
R3JpZE5vZGV9IG5vZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uT3JkaW5hbAotICAg
ICAqLwotICAgIF9zdGFydEVkaXRpbmdDb2x1bW5PZkRhdGFHcmlkTm9kZTogZnVuY3Rpb24obm9k
ZSwgY29sdW1uT3JkaW5hbCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2VkaXRpbmcgPSB0cnVlOwot
ICAgICAgICAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9ICovCi0gICAgICAg
IHRoaXMuX2VkaXRpbmdOb2RlID0gbm9kZTsKLSAgICAgICAgdGhpcy5fZWRpdGluZ05vZGUuc2Vs
ZWN0KCk7Ci0KLSAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9lZGl0aW5nTm9kZS5fZWxlbWVu
dC5jaGlsZHJlbltjb2x1bW5PcmRpbmFsXTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyhlbGVtZW50LCB0aGlzLl9zdGFydEVkaXRpbmdDb25maWcoZWxlbWVudCkpOwotICAgICAg
ICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChlbGVtZW50LCAwLCBlbGVt
ZW50LCAxKTsKLSAgICB9LAotCi0gICAgX3N0YXJ0RWRpdGluZzogZnVuY3Rpb24odGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSB0YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhOb2RlTmFtZSgidGQiKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHRoaXMuX2VkaXRpbmdOb2RlID0gdGhpcy5kYXRhR3JpZE5vZGVGcm9t
Tm9kZSh0YXJnZXQpOwotICAgICAgICBpZiAoIXRoaXMuX2VkaXRpbmdOb2RlKSB7Ci0gICAgICAg
ICAgICBpZiAoIXRoaXMuY3JlYXRpb25Ob2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHRoaXMuX2VkaXRpbmdOb2RlID0gdGhpcy5jcmVhdGlvbk5vZGU7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBGb3JjZSBlZGl0aW5nIHRoZSAxc3QgY29sdW1uIHdoZW4gZWRpdGlu
ZyB0aGUgY3JlYXRpb24gbm9kZQotICAgICAgICBpZiAodGhpcy5fZWRpdGluZ05vZGUuaXNDcmVh
dGlvbk5vZGUpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRFZGl0aW5nQ29sdW1uT2ZE
YXRhR3JpZE5vZGUodGhpcy5fZWRpdGluZ05vZGUsIHRoaXMuX25leHRFZGl0YWJsZUNvbHVtbigt
MSkpOwotCi0gICAgICAgIHRoaXMuX2VkaXRpbmcgPSB0cnVlOwotICAgICAgICBXZWJJbnNwZWN0
b3Iuc3RhcnRFZGl0aW5nKGVsZW1lbnQsIHRoaXMuX3N0YXJ0RWRpdGluZ0NvbmZpZyhlbGVtZW50
KSk7Ci0KLSAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoZWxl
bWVudCwgMCwgZWxlbWVudCwgMSk7Ci0gICAgfSwKLQotICAgIHJlbmRlcklubGluZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImlubGluZSIp
OwotICAgIH0sCi0KLSAgICBfc3RhcnRFZGl0aW5nQ29uZmlnOiBmdW5jdGlvbihlbGVtZW50KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZyh0aGlz
Ll9lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIHRoaXMuX2VkaXRpbmdDYW5jZWxsZWQuYmlu
ZCh0aGlzKSwgZWxlbWVudC50ZXh0Q29udGVudCk7Ci0gICAgfSwKLQotICAgIF9lZGl0aW5nQ29t
bWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdUZXh0LCBvbGRUZXh0LCBjb250ZXh0LCBtb3Zl
RGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGNvbHVtbklkZW50aWZpZXIgPSB0aGlzLmNv
bHVtbklkZW50aWZpZXJGcm9tTm9kZShlbGVtZW50KTsKLSAgICAgICAgaWYgKCFjb2x1bW5JZGVu
dGlmaWVyKSB7Ci0gICAgICAgICAgICB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkKGVsZW1lbnQpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHZhciBjb2x1bW5PcmRpbmFs
ID0gdGhpcy5jb2x1bW5zW2NvbHVtbklkZW50aWZpZXJdLm9yZGluYWw7Ci0gICAgICAgIHZhciB0
ZXh0QmVmb3JlRWRpdGluZyA9IHRoaXMuX2VkaXRpbmdOb2RlLmRhdGFbY29sdW1uSWRlbnRpZmll
cl07Ci0gICAgICAgIHZhciBjdXJyZW50RWRpdGluZ05vZGUgPSB0aGlzLl9lZGl0aW5nTm9kZTsK
LQotICAgICAgICBmdW5jdGlvbiBtb3ZlVG9OZXh0SWZOZWVkZWQod2FzQ2hhbmdlKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1vdmVEaXJlY3Rpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICBpZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiKSB7Ci0gICAgICAgICAg
ICB2YXIgZmlyc3RFZGl0YWJsZUNvbHVtbiA9IHRoaXMuX25leHRFZGl0YWJsZUNvbHVtbigtMSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFZGl0aW5nTm9kZS5pc0NyZWF0aW9uTm9kZSAm
JiBjb2x1bW5PcmRpbmFsID09PSBmaXJzdEVkaXRhYmxlQ29sdW1uICYmICF3YXNDaGFuZ2UpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIHZhciBuZXh0RWRp
dGFibGVDb2x1bW4gPSB0aGlzLl9uZXh0RWRpdGFibGVDb2x1bW4oY29sdW1uT3JkaW5hbCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5leHRFZGl0YWJsZUNvbHVtbiAhPT0gLTEpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEVkaXRpbmdDb2x1bW5PZkRhdGFHcmlkTm9kZShj
dXJyZW50RWRpdGluZ05vZGUsIG5leHRFZGl0YWJsZUNvbHVtbik7Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgbmV4dERhdGFHcmlkTm9kZSA9IGN1cnJlbnRFZGl0aW5nTm9kZS50cmF2ZXJzZU5leHRO
b2RlKHRydWUsIG51bGwsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChuZXh0RGF0YUdyaWRO
b2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRFZGl0aW5nQ29sdW1u
T2ZEYXRhR3JpZE5vZGUobmV4dERhdGFHcmlkTm9kZSwgZmlyc3RFZGl0YWJsZUNvbHVtbik7Ci0g
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFZGl0aW5nTm9kZS5pc0NyZWF0aW9uTm9kZSAmJiB3
YXNDaGFuZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDcmVhdGlvbk5vZGUoZmFs
c2UpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRFZGl0aW5nQ29sdW1u
T2ZEYXRhR3JpZE5vZGUodGhpcy5jcmVhdGlvbk5vZGUsIGZpcnN0RWRpdGFibGVDb2x1bW4pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHByZXZFZGl0YWJsZUNvbHVtbiA9IHRoaXMuX25leHRFZGl0YWJsZUNv
bHVtbihjb2x1bW5PcmRpbmFsLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAocHJldkVkaXRh
YmxlQ29sdW1uICE9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0
RWRpdGluZ0NvbHVtbk9mRGF0YUdyaWROb2RlKGN1cnJlbnRFZGl0aW5nTm9kZSwgcHJldkVkaXRh
YmxlQ29sdW1uKTsKLQotICAgICAgICAgICAgICAgIHZhciBsYXN0RWRpdGFibGVDb2x1bW4gPSB0
aGlzLl9uZXh0RWRpdGFibGVDb2x1bW4odGhpcy5fY29sdW1uc0FycmF5Lmxlbmd0aCwgdHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgdmFyIG5leHREYXRhR3JpZE5vZGUgPSBjdXJyZW50RWRpdGluZ05v
ZGUudHJhdmVyc2VQcmV2aW91c05vZGUodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KG5leHREYXRhR3JpZE5vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFy
dEVkaXRpbmdDb2x1bW5PZkRhdGFHcmlkTm9kZShuZXh0RGF0YUdyaWROb2RlLCBsYXN0RWRpdGFi
bGVDb2x1bW4pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh0ZXh0QmVmb3JlRWRpdGluZyA9PSBuZXdUZXh0KSB7Ci0gICAg
ICAgICAgICB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkKGVsZW1lbnQpOwotICAgICAgICAgICAgbW92
ZVRvTmV4dElmTmVlZGVkLmNhbGwodGhpcywgZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSB0ZXh0IGluIHRoZSBkYXRhZ3JpZCB0
aGF0IHdlIHR5cGVkCi0gICAgICAgIHRoaXMuX2VkaXRpbmdOb2RlLmRhdGFbY29sdW1uSWRlbnRp
Zmllcl0gPSBuZXdUZXh0OwotCi0gICAgICAgIC8vIE1ha2UgdGhlIGNhbGxiYWNrIC0gZXhwZWN0
cyBhbiBlZGl0aW5nIG5vZGUgKHRhYmxlIHJvdyksIHRoZSBjb2x1bW4gbnVtYmVyIHRoYXQgaXMg
YmVpbmcgZWRpdGVkLAotICAgICAgICAvLyB0aGUgdGV4dCB0aGF0IHVzZWQgdG8gYmUgdGhlcmUs
IGFuZCB0aGUgbmV3IHRleHQuCi0gICAgICAgIHRoaXMuX2VkaXRDYWxsYmFjayh0aGlzLl9lZGl0
aW5nTm9kZSwgY29sdW1uSWRlbnRpZmllciwgdGV4dEJlZm9yZUVkaXRpbmcsIG5ld1RleHQpOwot
Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0aW5nTm9kZS5pc0NyZWF0aW9uTm9kZSkKLSAgICAgICAg
ICAgIHRoaXMuYWRkQ3JlYXRpb25Ob2RlKGZhbHNlKTsKLQotICAgICAgICB0aGlzLl9lZGl0aW5n
Q2FuY2VsbGVkKGVsZW1lbnQpOwotICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbCh0aGlz
LCB0cnVlKTsKLSAgICB9LAotCi0gICAgX2VkaXRpbmdDYW5jZWxsZWQ6IGZ1bmN0aW9uKGVsZW1l
bnQpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fZWRpdGluZzsKLSAgICAgICAgdGhpcy5f
ZWRpdGluZ05vZGUgPSBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gY29sdW1uT3JkaW5hbAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IG1vdmVCYWNrd2Fy
ZAotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBfbmV4dEVkaXRhYmxlQ29s
dW1uOiBmdW5jdGlvbihjb2x1bW5PcmRpbmFsLCBtb3ZlQmFja3dhcmQpCi0gICAgewotICAgICAg
ICB2YXIgaW5jcmVtZW50ID0gbW92ZUJhY2t3YXJkID8gLTEgOiAxOwotICAgICAgICB2YXIgY29s
dW1ucyA9IHRoaXMuX2NvbHVtbnNBcnJheTsKLSAgICAgICAgZm9yICh2YXIgaSA9IGNvbHVtbk9y
ZGluYWwgKyBpbmNyZW1lbnQ7IChpID49IDApICYmIChpIDwgY29sdW1ucy5sZW5ndGgpOyBpICs9
IGluY3JlbWVudCkgewotICAgICAgICAgICAgaWYgKGNvbHVtbnNbaV0uZWRpdGFibGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfQotICAgICAqLwotICAgIHNv
cnRDb2x1bW5JZGVudGlmaWVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X3NvcnRDb2x1bW5DZWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9zb3J0Q29sdW1uQ2VsbC5jb2x1bW5JZGVudGlmaWVyOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfQotICAgICAqLwotICAgIHNvcnRPcmRlcjogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zb3J0Q29sdW1uQ2VsbCB8fCB0aGlz
Ll9zb3J0Q29sdW1uQ2VsbC5oYXNTdHlsZUNsYXNzKCJzb3J0LWFzY2VuZGluZyIpKQotICAgICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5PcmRlci5Bc2NlbmRpbmc7Ci0gICAg
ICAgIGlmICh0aGlzLl9zb3J0Q29sdW1uQ2VsbC5oYXNTdHlsZUNsYXNzKCJzb3J0LWRlc2NlbmRp
bmciKSkKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuT3JkZXIuRGVz
Y2VuZGluZzsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNTb3J0T3JkZXJBc2NlbmRpbmc6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhdGhpcy5fc29ydENvbHVtbkNlbGwgfHwg
dGhpcy5fc29ydENvbHVtbkNlbGwuaGFzU3R5bGVDbGFzcygic29ydC1hc2NlbmRpbmciKTsKLSAg
ICB9LAotCi0gICAgZ2V0IGhlYWRlclRhYmxlQm9keSgpCi0gICAgewotICAgICAgICBpZiAoIl9o
ZWFkZXJUYWJsZUJvZHkiIGluIHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVy
VGFibGVCb2R5OwotCi0gICAgICAgIHRoaXMuX2hlYWRlclRhYmxlQm9keSA9IHRoaXMuX2hlYWRl
clRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdOwotICAgICAgICBpZiAoIXRo
aXMuX2hlYWRlclRhYmxlQm9keSkgewotICAgICAgICAgICAgdGhpcy5faGVhZGVyVGFibGVCb2R5
ID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKLSAg
ICAgICAgICAgIHRoaXMuX2hlYWRlclRhYmxlLmluc2VydEJlZm9yZSh0aGlzLl9oZWFkZXJUYWJs
ZUJvZHksIHRoaXMuX2hlYWRlclRhYmxlLnRGb290KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiB0aGlzLl9oZWFkZXJUYWJsZUJvZHk7Ci0gICAgfSwKLQotICAgIGdldCBkYXRhVGFibGVC
b2R5KCkKLSAgICB7Ci0gICAgICAgIGlmICgiX2RhdGFUYWJsZUJvZHkiIGluIHRoaXMpCi0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVRhYmxlQm9keTsKLQotICAgICAgICB0aGlzLl9kYXRh
VGFibGVCb2R5ID0gdGhpcy5fZGF0YVRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIp
WzBdOwotICAgICAgICBpZiAoIXRoaXMuX2RhdGFUYWJsZUJvZHkpIHsKLSAgICAgICAgICAgIHRo
aXMuX2RhdGFUYWJsZUJvZHkgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJ0Ym9keSIpOwotICAgICAgICAgICAgdGhpcy5fZGF0YVRhYmxlLmluc2VydEJlZm9yZSh0
aGlzLl9kYXRhVGFibGVCb2R5LCB0aGlzLl9kYXRhVGFibGUudEZvb3QpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFUYWJsZUJvZHk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHdpZHRocwotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBtaW5QZXJjZW50Ci0gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhQZXJjZW50Ci0gICAg
ICovCi0gICAgX2F1dG9TaXplV2lkdGhzOiBmdW5jdGlvbih3aWR0aHMsIG1pblBlcmNlbnQsIG1h
eFBlcmNlbnQpCi0gICAgewotICAgICAgICBpZiAobWluUGVyY2VudCkKLSAgICAgICAgICAgIG1p
blBlcmNlbnQgPSBNYXRoLm1pbihtaW5QZXJjZW50LCBNYXRoLmZsb29yKDEwMCAvIHdpZHRocy5s
ZW5ndGgpKTsKLSAgICAgICAgdmFyIHRvdGFsV2lkdGggPSAwOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHdpZHRocy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRvdGFsV2lkdGggKz0g
d2lkdGhzW2ldOwotICAgICAgICB2YXIgdG90YWxQZXJjZW50V2lkdGggPSAwOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHdpZHRocy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFy
IHdpZHRoID0gTWF0aC5yb3VuZCgxMDAgKiB3aWR0aHNbaV0gLyB0b3RhbFdpZHRoKTsKLSAgICAg
ICAgICAgIGlmIChtaW5QZXJjZW50ICYmIHdpZHRoIDwgbWluUGVyY2VudCkKLSAgICAgICAgICAg
ICAgICB3aWR0aCA9IG1pblBlcmNlbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChtYXhQZXJjZW50
ICYmIHdpZHRoID4gbWF4UGVyY2VudCkKLSAgICAgICAgICAgICAgICB3aWR0aCA9IG1heFBlcmNl
bnQ7Ci0gICAgICAgICAgICB0b3RhbFBlcmNlbnRXaWR0aCArPSB3aWR0aDsKLSAgICAgICAgICAg
IHdpZHRoc1tpXSA9IHdpZHRoOwotICAgICAgICB9Ci0gICAgICAgIHZhciByZWNvdXBQZXJjZW50
ID0gdG90YWxQZXJjZW50V2lkdGggLSAxMDA7Ci0KLSAgICAgICAgd2hpbGUgKG1pblBlcmNlbnQg
JiYgcmVjb3VwUGVyY2VudCA+IDApIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
d2lkdGhzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoc1tpXSA+IG1p
blBlcmNlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgLS13aWR0aHNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIC0tcmVjb3VwUGVyY2VudDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNv
dXBQZXJjZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKG1heFBlcmNl
bnQgJiYgcmVjb3VwUGVyY2VudCA8IDApIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgd2lkdGhzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoc1tpXSA8
IG1heFBlcmNlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgKyt3aWR0aHNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICsrcmVjb3VwUGVyY2VudDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFy
ZWNvdXBQZXJjZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHdpZHRo
czsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pblBlcmNlbnQK
LSAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heFBlcmNlbnQKLSAgICAgKiBAcGFyYW0ge251bWJl
cj19IG1heERlc2NlbnRMZXZlbAotICAgICAqLwotICAgIGF1dG9TaXplQ29sdW1uczogZnVuY3Rp
b24obWluUGVyY2VudCwgbWF4UGVyY2VudCwgbWF4RGVzY2VudExldmVsKQotICAgIHsKLSAgICAg
ICAgdmFyIHdpZHRocyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2Nv
bHVtbnNBcnJheS5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHdpZHRocy5wdXNoKCh0aGlzLl9j
b2x1bW5zQXJyYXlbaV0udGl0bGUgfHwgIiIpLmxlbmd0aCk7Ci0KLSAgICAgICAgbWF4RGVzY2Vu
dExldmVsID0gbWF4RGVzY2VudExldmVsIHx8IDA7Ci0gICAgICAgIHZhciBjaGlsZHJlbiA9IHRo
aXMuX2VudW1lcmF0ZUNoaWxkcmVuKHRoaXMuX3Jvb3ROb2RlLCBbXSwgbWF4RGVzY2VudExldmVs
ICsgMSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gY2hpbGRyZW5baV07Ci0gICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IHRoaXMuX2NvbHVtbnNBcnJheS5sZW5ndGg7ICsraikgewotICAgICAg
ICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS5kYXRhW3RoaXMuX2NvbHVtbnNBcnJheVtqXS5pZGVu
dGlmaWVyXSB8fCAiIjsKLSAgICAgICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPiB3aWR0aHNb
al0pCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoc1tqXSA9IHRleHQubGVuZ3RoOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgd2lkdGhzID0gdGhpcy5fYXV0b1NpemVXaWR0
aHMod2lkdGhzLCBtaW5QZXJjZW50LCBtYXhQZXJjZW50KTsKLQotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuX2NvbHVtbnNBcnJheS5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRo
aXMuX2NvbHVtbnNBcnJheVtpXS5lbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGhzW2ldICsgIiUi
OwotICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHNJbml0aWFsaXplZCA9IGZhbHNlOwotICAgICAg
ICB0aGlzLnVwZGF0ZVdpZHRocygpOwotICAgIH0sCi0KLSAgICBfZW51bWVyYXRlQ2hpbGRyZW46
IGZ1bmN0aW9uKHJvb3ROb2RlLCByZXN1bHQsIG1heExldmVsKQotICAgIHsKLSAgICAgICAgaWYg
KCFyb290Tm9kZS5faXNSb290KQotICAgICAgICAgICAgcmVzdWx0LnB1c2gocm9vdE5vZGUpOwot
ICAgICAgICBpZiAoIW1heExldmVsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHJvb3ROb2RlLmNoaWxkcmVuLmxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgdGhpcy5fZW51bWVyYXRlQ2hpbGRyZW4ocm9vdE5vZGUuY2hpbGRyZW5baV0sIHJlc3VsdCwg
bWF4TGV2ZWwgLSAxKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgb25S
ZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMudXBkYXRlV2lkdGhzKCk7Ci0g
ICAgfSwKLQotICAgIC8vIFVwZGF0ZXMgdGhlIHdpZHRocyBvZiB0aGUgdGFibGUsIGluY2x1ZGlu
ZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjb2x1bW4KLSAgICAvLyByZXNpemVycy4KLSAgICAvLwot
ICAgIC8vIElNUE9SVEFOVDogVGhpcyBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBvbmNlIGFmdGVy
IHRoZSBlbGVtZW50IG9mIHRoZQotICAgIC8vIERhdGFHcmlkIGlzIGF0dGFjaGVkIHRvIGl0cyBw
YXJlbnQgZWxlbWVudCBhbmQgZXZlcnkgc3Vic2VxdWVudCB0aW1lIHRoZQotICAgIC8vIHdpZHRo
IG9mIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBjaGFuZ2VkIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9z
c2libGUgdG8KLSAgICAvLyByZXNpemUgdGhlIGNvbHVtbnMuCi0gICAgLy8KLSAgICAvLyBJZiB0
aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhlIERhdGFHcmlkIGlzIGF0dGFjaGVk
IHRvIGl0cwotICAgIC8vIHBhcmVudCBlbGVtZW50LCB0aGVuIHRoZSBEYXRhR3JpZCdzIGNvbHVt
bnMgd2lsbCBub3QgYmUgcmVzaXphYmxlLgotICAgIHVwZGF0ZVdpZHRoczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdmFyIGhlYWRlclRhYmxlQ29sdW1ucyA9IHRoaXMuX2hlYWRlclRhYmxl
Q29sdW1uR3JvdXAuY2hpbGRyZW47Ci0KLSAgICAgICAgdmFyIHRhYmxlV2lkdGggPSB0aGlzLl9k
YXRhVGFibGUub2Zmc2V0V2lkdGg7Ci0gICAgICAgIHZhciBudW1Db2x1bW5zID0gaGVhZGVyVGFi
bGVDb2x1bW5zLmxlbmd0aDsKLQotICAgICAgICAvLyBEbyBub3QgYXR0ZW1wdCB0byB1c2Ugb2Zm
c2V0ZXMgaWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudCB0cmVlIHlldC4KLSAg
ICAgICAgaWYgKCF0aGlzLl9jb2x1bW5XaWR0aHNJbml0aWFsaXplZCAmJiB0aGlzLmVsZW1lbnQu
b2Zmc2V0V2lkdGgpIHsKLSAgICAgICAgICAgIC8vIEdpdmUgYWxsIHRoZSBjb2x1bW5zIGluaXRp
YWwgd2lkdGhzIG5vdyBzbyB0aGF0IGR1cmluZyBhIHJlc2l6ZSwKLSAgICAgICAgICAgIC8vIHdo
ZW4gdGhlIHR3byBjb2x1bW5zIHRoYXQgZ2V0IHJlc2l6ZWQgZ2V0IGEgcGVyY2VudCB2YWx1ZSBm
b3IKLSAgICAgICAgICAgIC8vIHRoZWlyIHdpZHRocywgYWxsIHRoZSBvdGhlciBjb2x1bW5zIGFs
cmVhZHkgaGF2ZSBwZXJjZW50IHZhbHVlcwotICAgICAgICAgICAgLy8gZm9yIHRoZWlyIHdpZHRo
cy4KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNvbHVtbldpZHRoID0gdGhpcy5oZWFkZXJUYWJsZUJvZHkucm93
c1swXS5jZWxsc1tpXS5vZmZzZXRXaWR0aDsKLSAgICAgICAgICAgICAgICB2YXIgcGVyY2VudFdp
ZHRoID0gKChjb2x1bW5XaWR0aCAvIHRhYmxlV2lkdGgpICogMTAwKSArICIlIjsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9oZWFkZXJUYWJsZUNvbHVtbkdyb3VwLmNoaWxkcmVuW2ldLnN0eWxlLndp
ZHRoID0gcGVyY2VudFdpZHRoOwotICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFUYWJsZUNvbHVt
bkdyb3VwLmNoaWxkcmVuW2ldLnN0eWxlLndpZHRoID0gcGVyY2VudFdpZHRoOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGhpcy5fY29sdW1uV2lkdGhzSW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3Bvc2l0aW9uUmVzaXplcnMoKTsKLSAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkV2ZW50cy5D
b2x1bW5zUmVzaXplZCk7Ci0gICAgfSwKLQotICAgIGFwcGx5Q29sdW1uV2VpZ2h0czogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdmFyIHN1bU9mV2VpZ2h0cyA9IDAuMDsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb2x1bW5zQXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLl9jb2x1bW5zQXJyYXlbaV07Ci0gICAgICAgICAgICBp
ZiAodGhpcy5pc0NvbHVtblZpc2libGUoY29sdW1uKSkKLSAgICAgICAgICAgICAgICBzdW1PZldl
aWdodHMgKz0gY29sdW1uLndlaWdodDsKLSAgICAgICAgfQotICAgICAgICB2YXIgZmFjdG9yID0g
MTAwIC8gc3VtT2ZXZWlnaHRzOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5f
Y29sdW1uc0FycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhp
cy5fY29sdW1uc0FycmF5W2ldOwotICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5pc0NvbHVt
blZpc2libGUoY29sdW1uKSA/ICgoZmFjdG9yICogY29sdW1uLndlaWdodCkgKyAiJSIpOiAiMCUi
OwotICAgICAgICAgICAgdGhpcy5faGVhZGVyVGFibGVDb2x1bW5Hcm91cC5jaGlsZHJlbltpXS5z
dHlsZS53aWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgdGhpcy5fZGF0YVRhYmxlQ29sdW1uR3Jv
dXAuY2hpbGRyZW5baV0uc3R5bGUud2lkdGggPSB3aWR0aDsKLSAgICAgICAgfQotCi0gICAgICAg
IHRoaXMuX3Bvc2l0aW9uUmVzaXplcnMoKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkV2ZW50cy5Db2x1bW5zUmVzaXplZCk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5EYXRhR3JpZC5D
b2x1bW5EZXNjcmlwdG9yfSBjb2x1bW4KLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAq
LwotICAgIGlzQ29sdW1uVmlzaWJsZTogZnVuY3Rpb24oY29sdW1uKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICFjb2x1bW4uaGlkZGVuOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gY29sdW1uSWRlbnRpZmllcgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmlzaWJs
ZQotICAgICAqLwotICAgIHNldENvbHVtblZpc2libGU6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZp
ZXIsIHZpc2libGUpCi0gICAgewotICAgICAgICBpZiAodmlzaWJsZSA9PT0gIXRoaXMuY29sdW1u
c1tjb2x1bW5JZGVudGlmaWVyXS5oaWRkZW4pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdGhpcy5jb2x1bW5zW2NvbHVtbklkZW50aWZpZXJdLmhpZGRlbiA9ICF2aXNpYmxlOwotICAg
ICAgICB0aGlzLmVsZW1lbnQuZW5hYmxlU3R5bGVDbGFzcygiaGlkZS0iICsgY29sdW1uSWRlbnRp
ZmllciArICItY29sdW1uIiwgIXZpc2libGUpOwotICAgIH0sCi0KLSAgICBnZXQgc2Nyb2xsQ29u
dGFpbmVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxDb250YWluZXI7Ci0g
ICAgfSwKLQotICAgIGlzU2Nyb2xsZWRUb0xhc3RSb3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zY3JvbGxDb250YWluZXIuaXNTY3JvbGxlZFRvQm90dG9tKCk7Ci0g
ICAgfSwKLQotICAgIHNjcm9sbFRvTGFzdFJvdzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHRoaXMuX3Njcm9sbENvbnRhaW5lci5z
Y3JvbGxIZWlnaHQgLSB0aGlzLl9zY3JvbGxDb250YWluZXIub2Zmc2V0SGVpZ2h0OwotICAgIH0s
Ci0KLSAgICBfcG9zaXRpb25SZXNpemVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IGhlYWRlclRhYmxlQ29sdW1ucyA9IHRoaXMuX2hlYWRlclRhYmxlQ29sdW1uR3JvdXAuY2hpbGRy
ZW47Ci0gICAgICAgIHZhciBudW1Db2x1bW5zID0gaGVhZGVyVGFibGVDb2x1bW5zLmxlbmd0aDsK
LSAgICAgICAgdmFyIGxlZnQgPSAwOwotICAgICAgICB2YXIgcHJldmlvdXNSZXNpemVyID0gbnVs
bDsKLQotICAgICAgICAvLyBNYWtlIG4gLSAxIHJlc2l6ZXJzIGZvciBuIGNvbHVtbnMuCi0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29sdW1ucyAtIDE7IGkrKykgewotICAgICAgICAg
ICAgdmFyIHJlc2l6ZXIgPSB0aGlzLnJlc2l6ZXJzW2ldOwotCi0gICAgICAgICAgICBpZiAoIXJl
c2l6ZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvIHVw
ZGF0ZVdpZHRoLCBzbyB0aGUgcmVzaXplcnMgbmVlZAotICAgICAgICAgICAgICAgIC8vIHRvIGJl
IGNyZWF0ZWQuCi0gICAgICAgICAgICAgICAgcmVzaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICAgICAgICAgIHJlc2l6ZXIuYWRkU3R5bGVDbGFzcygiZGF0YS1n
cmlkLXJlc2l6ZXIiKTsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHJlc2l6ZXIgaXMgYXNzb2Np
YXRlZCB3aXRoIHRoZSBjb2x1bW4gdG8gaXRzIHJpZ2h0LgotICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5pbnN0YWxsRHJhZ0hhbmRsZShyZXNpemVyLCB0aGlzLl9zdGFydFJlc2l6ZXJEcmFn
Z2luZy5iaW5kKHRoaXMpLCB0aGlzLl9yZXNpemVyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5f
ZW5kUmVzaXplckRyYWdnaW5nLmJpbmQodGhpcyksICJjb2wtcmVzaXplIik7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJlc2l6ZXIpOwotICAgICAgICAgICAgICAg
IHRoaXMucmVzaXplcnNbaV0gPSByZXNpemVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBHZXQgdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGluIHRoZSBmaXJzdCAoYW5kIG9ubHkpIHJv
dyBvZiB0aGUKLSAgICAgICAgICAgIC8vIGhlYWRlciB0YWJsZSBpbiBvcmRlciB0byBkZXRlcm1p
bmUgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4sIHNpbmNlCi0gICAgICAgICAgICAvLyBpdCBpcyBu
b3QgcG9zc2libGUgdG8gcXVlcnkgYSBjb2x1bW4gZm9yIGl0cyB3aWR0aC4KLSAgICAgICAgICAg
IGxlZnQgKz0gdGhpcy5oZWFkZXJUYWJsZUJvZHkucm93c1swXS5jZWxsc1tpXS5vZmZzZXRXaWR0
aDsKLQotICAgICAgICAgICAgaWYgKCF0aGlzLl9jb2x1bW5zQXJyYXlbaV0uaGlkZGVuKSB7Ci0g
ICAgICAgICAgICAgICAgcmVzaXplci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiZGlzcGxheSIpOwot
ICAgICAgICAgICAgICAgIGlmIChyZXNpemVyLl9wb3NpdGlvbiAhPT0gbGVmdCkgewotICAgICAg
ICAgICAgICAgICAgICByZXNpemVyLl9wb3NpdGlvbiA9IGxlZnQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc2l6ZXIuc3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXNpemVyLmxlZnROZWlnaGJvcmluZ0NvbHVtbkluZGV4ID0gaTsK
LSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNSZXNpemVyKQotICAgICAgICAgICAgICAgICAg
ICBwcmV2aW91c1Jlc2l6ZXIucmlnaHROZWlnaGJvcmluZ0NvbHVtbkluZGV4ID0gaTsKLSAgICAg
ICAgICAgICAgICBwcmV2aW91c1Jlc2l6ZXIgPSByZXNpemVyOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNSZXNpemVyICYmIHByZXZpb3VzUmVzaXpl
ci5fcG9zaXRpb24gIT09IGxlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNSZXNp
emVyLl9wb3NpdGlvbiA9IGxlZnQ7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUmVzaXpl
ci5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJlc2l6ZXIuc3R5bGUuc2V0UHJvcGVydHkoImRpc3BsYXkiLCAibm9uZSIpOwotICAg
ICAgICAgICAgICAgIHJlc2l6ZXIubGVmdE5laWdoYm9yaW5nQ29sdW1uSW5kZXggPSAwOwotICAg
ICAgICAgICAgICAgIHJlc2l6ZXIucmlnaHROZWlnaGJvcmluZ0NvbHVtbkluZGV4ID0gMDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocHJldmlvdXNSZXNpemVyKQotICAg
ICAgICAgICAgcHJldmlvdXNSZXNpemVyLnJpZ2h0TmVpZ2hib3JpbmdDb2x1bW5JbmRleCA9IG51
bUNvbHVtbnMgLSAxOwotICAgIH0sCi0KLSAgICBhZGRDcmVhdGlvbk5vZGU6IGZ1bmN0aW9uKGhh
c0NoaWxkcmVuKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuY3JlYXRpb25Ob2RlKQotICAgICAg
ICAgICAgdGhpcy5jcmVhdGlvbk5vZGUubWFrZU5vcm1hbCgpOwotCi0gICAgICAgIHZhciBlbXB0
eURhdGEgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgY29sdW1uIGluIHRoaXMuY29sdW1ucykKLSAg
ICAgICAgICAgIGVtcHR5RGF0YVtjb2x1bW5dID0gJyc7Ci0gICAgICAgIHRoaXMuY3JlYXRpb25O
b2RlID0gbmV3IFdlYkluc3BlY3Rvci5DcmVhdGlvbkRhdGFHcmlkTm9kZShlbXB0eURhdGEsIGhh
c0NoaWxkcmVuKTsKLSAgICAgICAgdGhpcy5yb290Tm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuY3Jl
YXRpb25Ob2RlKTsKLSAgICB9LAotCi0gICAgc29ydE5vZGVzOiBmdW5jdGlvbihjb21wYXJhdG9y
LCByZXZlcnNlTW9kZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3JXcmFwcGVy
KGEsIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhLl9kYXRhR3JpZE5vZGUuX2RhdGEu
c3VtbWFyeVJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIGlmIChi
Ll9kYXRhR3JpZE5vZGUuX2RhdGEuc3VtbWFyeVJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4g
LTE7Ci0KLSAgICAgICAgICAgIHZhciBhRGF0YUdpcmROb2RlID0gYS5fZGF0YUdyaWROb2RlOwot
ICAgICAgICAgICAgdmFyIGJEYXRhR2lyZE5vZGUgPSBiLl9kYXRhR3JpZE5vZGU7Ci0gICAgICAg
ICAgICByZXR1cm4gcmV2ZXJzZU1vZGUgPyBjb21wYXJhdG9yKGJEYXRhR2lyZE5vZGUsIGFEYXRh
R2lyZE5vZGUpIDogY29tcGFyYXRvcihhRGF0YUdpcmROb2RlLCBiRGF0YUdpcmROb2RlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciB0Ym9keSA9IHRoaXMuZGF0YVRhYmxlQm9keTsKLSAgICAg
ICAgdmFyIHRib2R5UGFyZW50ID0gdGJvZHkucGFyZW50RWxlbWVudDsKLSAgICAgICAgdGJvZHlQ
YXJlbnQucmVtb3ZlQ2hpbGQodGJvZHkpOwotCi0gICAgICAgIHZhciBjaGlsZE5vZGVzID0gdGJv
ZHkuY2hpbGROb2RlczsKLSAgICAgICAgdmFyIGZpbGxlclJvdyA9IGNoaWxkTm9kZXNbY2hpbGRO
b2Rlcy5sZW5ndGggLSAxXTsKLQotICAgICAgICB2YXIgc29ydGVkUm93cyA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGNoaWxkTm9kZXMsIDAsIGNoaWxkTm9kZXMubGVuZ3RoIC0gMSk7Ci0g
ICAgICAgIHNvcnRlZFJvd3Muc29ydChjb21wYXJhdG9yV3JhcHBlcik7Ci0gICAgICAgIHZhciBz
b3J0ZWRSb3dzTGVuZ3RoID0gc29ydGVkUm93cy5sZW5ndGg7Ci0KLSAgICAgICAgdGJvZHkucmVt
b3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdmFyIHByZXZpb3VzU2libGluZ05vZGUgPSBudWxsOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRlZFJvd3NMZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIHJvdyA9IHNvcnRlZFJvd3NbaV07Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHJvdy5fZGF0YUdyaWROb2RlOwotICAgICAgICAgICAgbm9kZS5wcmV2aW91c1NpYmxpbmcgPSBw
cmV2aW91c1NpYmxpbmdOb2RlOwotICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZ05vZGUp
Ci0gICAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nTm9kZS5uZXh0U2libGluZyA9IG5vZGU7
Ci0gICAgICAgICAgICB0Ym9keS5hcHBlbmRDaGlsZChyb3cpOwotICAgICAgICAgICAgcHJldmlv
dXNTaWJsaW5nTm9kZSA9IG5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByZXZpb3VzU2li
bGluZ05vZGUpCi0gICAgICAgICAgICBwcmV2aW91c1NpYmxpbmdOb2RlLm5leHRTaWJsaW5nID0g
bnVsbDsKLQotICAgICAgICB0Ym9keS5hcHBlbmRDaGlsZChmaWxsZXJSb3cpOwotICAgICAgICB0
Ym9keVBhcmVudC5hcHBlbmRDaGlsZCh0Ym9keSk7Ci0gICAgfSwKLQotICAgIF9rZXlEb3duOiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE5vZGUgfHwg
ZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5IHx8IHRoaXMu
X2VkaXRpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGhhbmRsZWQgPSBm
YWxzZTsKLSAgICAgICAgdmFyIG5leHRTZWxlY3RlZE5vZGU7Ci0gICAgICAgIGlmIChldmVudC5r
ZXlJZGVudGlmaWVyID09PSAiVXAiICYmICFldmVudC5hbHRLZXkpIHsKLSAgICAgICAgICAgIG5l
eHRTZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZS50cmF2ZXJzZVByZXZpb3VzTm9kZSh0
cnVlKTsKLSAgICAgICAgICAgIHdoaWxlIChuZXh0U2VsZWN0ZWROb2RlICYmICFuZXh0U2VsZWN0
ZWROb2RlLnNlbGVjdGFibGUpCi0gICAgICAgICAgICAgICAgbmV4dFNlbGVjdGVkTm9kZSA9IG5l
eHRTZWxlY3RlZE5vZGUudHJhdmVyc2VQcmV2aW91c05vZGUodHJ1ZSk7Ci0gICAgICAgICAgICBo
YW5kbGVkID0gbmV4dFNlbGVjdGVkTm9kZSA/IHRydWUgOiBmYWxzZTsKLSAgICAgICAgfSBlbHNl
IGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiRG93biIgJiYgIWV2ZW50LmFsdEtleSkgewot
ICAgICAgICAgICAgbmV4dFNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlLnRyYXZlcnNl
TmV4dE5vZGUodHJ1ZSk7Ci0gICAgICAgICAgICB3aGlsZSAobmV4dFNlbGVjdGVkTm9kZSAmJiAh
bmV4dFNlbGVjdGVkTm9kZS5zZWxlY3RhYmxlKQotICAgICAgICAgICAgICAgIG5leHRTZWxlY3Rl
ZE5vZGUgPSBuZXh0U2VsZWN0ZWROb2RlLnRyYXZlcnNlTmV4dE5vZGUodHJ1ZSk7Ci0gICAgICAg
ICAgICBoYW5kbGVkID0gbmV4dFNlbGVjdGVkTm9kZSA/IHRydWUgOiBmYWxzZTsKLSAgICAgICAg
fSBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiTGVmdCIpIHsKLSAgICAgICAgICAg
IGlmICh0aGlzLnNlbGVjdGVkTm9kZS5leHBhbmRlZCkgewotICAgICAgICAgICAgICAgIGlmIChl
dmVudC5hbHRLZXkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLmNvbGxh
cHNlUmVjdXJzaXZlbHkoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuc2VsZWN0ZWROb2RlLmNvbGxhcHNlKCk7Ci0gICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWROb2RlLnBhcmVu
dCAmJiAhdGhpcy5zZWxlY3RlZE5vZGUucGFyZW50Ll9pc1Jvb3QpIHsKLSAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUu
cGFyZW50LnNlbGVjdGFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV4dFNlbGVjdGVkTm9k
ZSA9IHRoaXMuc2VsZWN0ZWROb2RlLnBhcmVudDsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IG5leHRTZWxlY3RlZE5vZGUgPyB0cnVlIDogZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICh0aGlzLnNlbGVjdGVkTm9kZS5wYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIHRo
aXMuc2VsZWN0ZWROb2RlLnBhcmVudC5jb2xsYXBzZSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJSaWdodCIpIHsKLSAgICAgICAg
ICAgIGlmICghdGhpcy5zZWxlY3RlZE5vZGUucmV2ZWFsZWQpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnNlbGVjdGVkTm9kZS5yZXZlYWwoKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE5vZGUuaGFzQ2hpbGRyZW4p
IHsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5zZWxlY3RlZE5vZGUuZXhwYW5kZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV4dFNl
bGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlLmNoaWxkcmVuWzBdOwotICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVkID0gbmV4dFNlbGVjdGVkTm9kZSA/IHRydWUgOiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5
KQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuZXhwYW5kUmVjdXJz
aXZlbHkoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZWxlY3RlZE5vZGUuZXhwYW5kKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDggfHwgZXZlbnQu
a2V5Q29kZSA9PT0gNDYpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9kZWxldGVDYWxsYmFjaykg
ewotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHRoaXMu
X2RlbGV0ZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWROb2RlKTsKLSAgICAgICAgICAgICAgICB0aGlz
LmNoYW5nZU5vZGVBZnRlckRlbGV0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNFbnRlcktleShldmVudCkpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9lZGl0Q2Fs
bGJhY2spIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9zdGFydEVkaXRpbmcodGhpcy5zZWxlY3RlZE5vZGUuX2VsZW1lbnQuY2hpbGRyZW5b
dGhpcy5fbmV4dEVkaXRhYmxlQ29sdW1uKC0xKV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG5leHRTZWxlY3RlZE5vZGUpIHsKLSAgICAgICAgICAgIG5leHRTZWxl
Y3RlZE5vZGUucmV2ZWFsKCk7Ci0gICAgICAgICAgICBuZXh0U2VsZWN0ZWROb2RlLnNlbGVjdCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhbmRsZWQpCi0gICAgICAgICAgICBldmVudC5j
b25zdW1lKHRydWUpOwotICAgIH0sCi0KLSAgICBjaGFuZ2VOb2RlQWZ0ZXJEZWxldGlvbjogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5leHRTZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVj
dGVkTm9kZS50cmF2ZXJzZU5leHROb2RlKHRydWUpOwotICAgICAgICB3aGlsZSAobmV4dFNlbGVj
dGVkTm9kZSAmJiAhbmV4dFNlbGVjdGVkTm9kZS5zZWxlY3RhYmxlKQotICAgICAgICAgICAgbmV4
dFNlbGVjdGVkTm9kZSA9IG5leHRTZWxlY3RlZE5vZGUudHJhdmVyc2VOZXh0Tm9kZSh0cnVlKTsK
LQotICAgICAgICBpZiAoIW5leHRTZWxlY3RlZE5vZGUgfHwgbmV4dFNlbGVjdGVkTm9kZS5pc0Ny
ZWF0aW9uTm9kZSkgewotICAgICAgICAgICAgbmV4dFNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0
ZWROb2RlLnRyYXZlcnNlUHJldmlvdXNOb2RlKHRydWUpOwotICAgICAgICAgICAgd2hpbGUgKG5l
eHRTZWxlY3RlZE5vZGUgJiYgIW5leHRTZWxlY3RlZE5vZGUuc2VsZWN0YWJsZSkKLSAgICAgICAg
ICAgICAgICBuZXh0U2VsZWN0ZWROb2RlID0gbmV4dFNlbGVjdGVkTm9kZS50cmF2ZXJzZVByZXZp
b3VzTm9kZSh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXh0U2VsZWN0ZWROb2Rl
KSB7Ci0gICAgICAgICAgICBuZXh0U2VsZWN0ZWROb2RlLnJldmVhbCgpOwotICAgICAgICAgICAg
bmV4dFNlbGVjdGVkTm9kZS5zZWxlY3QoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0geyFOb2RlfSB0YXJnZXQKLSAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVj
dG9yLkRhdGFHcmlkTm9kZX0KLSAgICAgKi8KLSAgICBkYXRhR3JpZE5vZGVGcm9tTm9kZTogZnVu
Y3Rpb24odGFyZ2V0KQotICAgIHsKLSAgICAgICAgdmFyIHJvd0VsZW1lbnQgPSB0YXJnZXQuZW5j
bG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgidHIiKTsKLSAgICAgICAgcmV0dXJuIHJvd0Vs
ZW1lbnQgJiYgcm93RWxlbWVudC5fZGF0YUdyaWROb2RlOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0geyFOb2RlfSB0YXJnZXQKLSAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfQotICAg
ICAqLwotICAgIGNvbHVtbklkZW50aWZpZXJGcm9tTm9kZTogZnVuY3Rpb24odGFyZ2V0KQotICAg
IHsKLSAgICAgICAgdmFyIGNlbGxFbGVtZW50ID0gdGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoTm9kZU5hbWUoInRkIik7Ci0gICAgICAgIHJldHVybiBjZWxsRWxlbWVudCAmJiBjZWxsRWxl
bWVudC5jb2x1bW5JZGVudGlmaWVyXzsKLSAgICB9LAotCi0gICAgX2NsaWNrSW5IZWFkZXJDZWxs
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjZWxsID0gZXZlbnQudGFyZ2V0
LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoInRoIik7Ci0gICAgICAgIGlmICghY2Vs
bCB8fCAhY2VsbC5jb2x1bW5JZGVudGlmaWVyIHx8ICFjZWxsLmhhc1N0eWxlQ2xhc3MoInNvcnRh
YmxlIikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNvcnRPcmRlciA9IFdl
Ykluc3BlY3Rvci5EYXRhR3JpZC5PcmRlci5Bc2NlbmRpbmc7Ci0gICAgICAgIGlmICgoY2VsbCA9
PT0gdGhpcy5fc29ydENvbHVtbkNlbGwpICYmIHRoaXMuaXNTb3J0T3JkZXJBc2NlbmRpbmcoKSkK
LSAgICAgICAgICAgIHNvcnRPcmRlciA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5PcmRlci5EZXNj
ZW5kaW5nOwotCi0gICAgICAgIGlmICh0aGlzLl9zb3J0Q29sdW1uQ2VsbCkKLSAgICAgICAgICAg
IHRoaXMuX3NvcnRDb2x1bW5DZWxsLnJlbW92ZU1hdGNoaW5nU3R5bGVDbGFzc2VzKCJzb3J0LVxc
dysiKTsKLSAgICAgICAgdGhpcy5fc29ydENvbHVtbkNlbGwgPSBjZWxsOwotCi0gICAgICAgIGNl
bGwuYWRkU3R5bGVDbGFzcygic29ydC0iICsgc29ydE9yZGVyKTsKLQotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGF0YUdyaWQuRXZlbnRzLlNvcnRp
bmdDaGFuZ2VkKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNv
bHVtbklkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuRGF0YUdyaWQuT3Jk
ZXJ9IHNvcnRPcmRlcgotICAgICAqLwotICAgIG1hcmtDb2x1bW5Bc1NvcnRlZEJ5OiBmdW5jdGlv
bihjb2x1bW5JZGVudGlmaWVyLCBzb3J0T3JkZXIpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
c29ydENvbHVtbkNlbGwpCi0gICAgICAgICAgICB0aGlzLl9zb3J0Q29sdW1uQ2VsbC5yZW1vdmVN
YXRjaGluZ1N0eWxlQ2xhc3Nlcygic29ydC1cXHcrIik7Ci0gICAgICAgIHRoaXMuX3NvcnRDb2x1
bW5DZWxsID0gdGhpcy5faGVhZGVyVGFibGVIZWFkZXJzW2NvbHVtbklkZW50aWZpZXJdOwotICAg
ICAgICB0aGlzLl9zb3J0Q29sdW1uQ2VsbC5hZGRTdHlsZUNsYXNzKCJzb3J0LSIgKyBzb3J0T3Jk
ZXIpOwotICAgIH0sCi0KLSAgICBoZWFkZXJUYWJsZUhlYWRlcjogZnVuY3Rpb24oY29sdW1uSWRl
bnRpZmllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJUYWJsZUhlYWRlcnNb
Y29sdW1uSWRlbnRpZmllcl07Ci0gICAgfSwKLQotICAgIF9tb3VzZURvd25JbkRhdGFUYWJsZTog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZ3JpZE5vZGUgPSB0aGlzLmRhdGFH
cmlkTm9kZUZyb21Ob2RlKGV2ZW50LnRhcmdldCk7Ci0gICAgICAgIGlmICghZ3JpZE5vZGUgfHwg
IWdyaWROb2RlLnNlbGVjdGFibGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KGdyaWROb2RlLmlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUoZXZlbnQpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChldmVudC5tZXRhS2V5KSB7Ci0gICAgICAgICAg
ICBpZiAoZ3JpZE5vZGUuc2VsZWN0ZWQpCi0gICAgICAgICAgICAgICAgZ3JpZE5vZGUuZGVzZWxl
Y3QoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBncmlkTm9kZS5zZWxlY3Qo
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBncmlkTm9kZS5zZWxlY3QoKTsKLSAgICB9
LAotCi0gICAgX2NvbnRleHRNZW51SW5EYXRhVGFibGU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudShl
dmVudCk7Ci0KLSAgICAgICAgdmFyIGdyaWROb2RlID0gdGhpcy5kYXRhR3JpZE5vZGVGcm9tTm9k
ZShldmVudC50YXJnZXQpOwotICAgICAgICBpZiAodGhpcy5fcmVmcmVzaENhbGxiYWNrICYmICgh
Z3JpZE5vZGUgfHwgZ3JpZE5vZGUgIT09IHRoaXMuY3JlYXRpb25Ob2RlKSkKLSAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZWZyZXNoIiks
IHRoaXMuX3JlZnJlc2hDYWxsYmFjay5iaW5kKHRoaXMpKTsKLQotICAgICAgICBpZiAoZ3JpZE5v
ZGUgJiYgZ3JpZE5vZGUuc2VsZWN0YWJsZSAmJiAhZ3JpZE5vZGUuaXNFdmVudFdpdGhpbkRpc2Ns
b3N1cmVUcmlhbmdsZShldmVudCkpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9lZGl0Q2FsbGJh
Y2spIHsKLSAgICAgICAgICAgICAgICBpZiAoZ3JpZE5vZGUgPT09IHRoaXMuY3JlYXRpb25Ob2Rl
KQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rv
ci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkFkZCBu
ZXciIDogIkFkZCBOZXciKSwgdGhpcy5fc3RhcnRFZGl0aW5nLmJpbmQodGhpcywgZXZlbnQudGFy
Z2V0KSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBj
b2x1bW5JZGVudGlmaWVyID0gdGhpcy5jb2x1bW5JZGVudGlmaWVyRnJvbU5vZGUoZXZlbnQudGFy
Z2V0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbklkZW50aWZpZXIgJiYgdGhpcy5j
b2x1bW5zW2NvbHVtbklkZW50aWZpZXJdLmVkaXRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgY29sdW1uVGl0bGUgPSBjb2x1bW5JZGVudGlmaWVyWzBdLnRvVXBwZXJDYXNlKCkg
KyBjb2x1bW5JZGVudGlmaWVyLnNsaWNlKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQg4oCcJXPigJ0i
LCBjb2x1bW5UaXRsZSksIHRoaXMuX3N0YXJ0RWRpdGluZy5iaW5kKHRoaXMsIGV2ZW50LnRhcmdl
dCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZUNhbGxiYWNrICYmIGdyaWROb2RlICE9
PSB0aGlzLmNyZWF0aW9uTm9kZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGVsZXRlIiksIHRoaXMuX2RlbGV0ZUNhbGxiYWNr
LmJpbmQodGhpcywgZ3JpZE5vZGUpKTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0TWVu
dUNhbGxiYWNrKQotICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRNZW51Q2FsbGJhY2soY29u
dGV4dE1lbnUsIGdyaWROb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHRNZW51LnNo
b3coKTsKLSAgICB9LAotCi0gICAgX2NsaWNrSW5EYXRhVGFibGU6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdmFyIGdyaWROb2RlID0gdGhpcy5kYXRhR3JpZE5vZGVGcm9tTm9kZShl
dmVudC50YXJnZXQpOwotICAgICAgICBpZiAoIWdyaWROb2RlIHx8ICFncmlkTm9kZS5oYXNDaGls
ZHJlbikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWdyaWROb2RlLmlzRXZl
bnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUoZXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmIChncmlkTm9kZS5leHBhbmRlZCkgewotICAgICAgICAgICAgaWYgKGV2ZW50
LmFsdEtleSkKLSAgICAgICAgICAgICAgICBncmlkTm9kZS5jb2xsYXBzZVJlY3Vyc2l2ZWx5KCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ3JpZE5vZGUuY29sbGFwc2UoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpCi0gICAgICAg
ICAgICAgICAgZ3JpZE5vZGUuZXhwYW5kUmVjdXJzaXZlbHkoKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBncmlkTm9kZS5leHBhbmQoKTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICBnZXQgcmVzaXplTWV0aG9kKCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5f
cmVzaXplTWV0aG9kID09PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuRGF0YUdyaWQuUmVzaXplTWV0aG9kLk5lYXJlc3Q7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9yZXNpemVNZXRob2Q7Ci0gICAgfSwKLQotICAgIHNldCByZXNpemVNZXRob2QobWV0aG9kKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fcmVzaXplTWV0aG9kID0gbWV0aG9kOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9zdGFydFJlc2l6
ZXJEcmFnZ2luZzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9jdXJyZW50
UmVzaXplciA9IGV2ZW50LnRhcmdldDsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fY3VycmVudFJl
c2l6ZXIucmlnaHROZWlnaGJvcmluZ0NvbHVtbkluZGV4Ci0gICAgfSwKLQotICAgIF9yZXNpemVy
RHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHJlc2l6ZXIgPSB0
aGlzLl9jdXJyZW50UmVzaXplcjsKLSAgICAgICAgaWYgKCFyZXNpemVyKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciB0YWJsZVdpZHRoID0gdGhpcy5fZGF0YVRhYmxlLm9mZnNl
dFdpZHRoOyAvLyBDYWNoZSBpdCBlYXJseSwgYmVmb3JlIHdlIGludmFsaWRhdGUgbGF5b3V0Lgot
Ci0gICAgICAgIC8vIENvbnN0cmFpbiB0aGUgZHJhZ3BvaW50IHRvIGJlIHdpdGhpbiB0aGUgY29u
dGFpbmluZyBkaXYgb2YgdGhlCi0gICAgICAgIC8vIGRhdGFncmlkLgotICAgICAgICB2YXIgZHJh
Z1BvaW50ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZWxlbWVudC50b3RhbE9mZnNldExlZnQoKTsK
LSAgICAgICAgLy8gQ29uc3RyYWluIHRoZSBkcmFncG9pbnQgdG8gYmUgd2l0aGluIHRoZSBzcGFj
ZSBtYWRlIHVwIGJ5IHRoZQotICAgICAgICAvLyBjb2x1bW4gZGlyZWN0bHkgdG8gdGhlIGxlZnQg
YW5kIHRoZSBjb2x1bW4gZGlyZWN0bHkgdG8gdGhlIHJpZ2h0LgotICAgICAgICB2YXIgbGVmdENl
bGxJbmRleCA9IHJlc2l6ZXIubGVmdE5laWdoYm9yaW5nQ29sdW1uSW5kZXg7Ci0gICAgICAgIHZh
ciByaWdodENlbGxJbmRleCA9IHJlc2l6ZXIucmlnaHROZWlnaGJvcmluZ0NvbHVtbkluZGV4Owot
ICAgICAgICB2YXIgZmlyc3RSb3dDZWxscyA9IHRoaXMuaGVhZGVyVGFibGVCb2R5LnJvd3NbMF0u
Y2VsbHM7Ci0gICAgICAgIHZhciBsZWZ0RWRnZU9mUHJldmlvdXNDb2x1bW4gPSAwOwotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlZnRDZWxsSW5kZXg7IGkrKykKLSAgICAgICAgICAgIGxl
ZnRFZGdlT2ZQcmV2aW91c0NvbHVtbiArPSBmaXJzdFJvd0NlbGxzW2ldLm9mZnNldFdpZHRoOwot
Ci0gICAgICAgIC8vIERpZmZlcmVuY2VzIGZvciBvdGhlciByZXNpemUgbWV0aG9kcwotICAgICAg
ICBpZiAodGhpcy5yZXNpemVNZXRob2QgPT0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLlJlc2l6ZU1l
dGhvZC5MYXN0KSB7Ci0gICAgICAgICAgICByaWdodENlbGxJbmRleCA9IHRoaXMucmVzaXplcnMu
bGVuZ3RoOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzaXplTWV0aG9kID09IFdlYkluc3Bl
Y3Rvci5EYXRhR3JpZC5SZXNpemVNZXRob2QuRmlyc3QpIHsKLSAgICAgICAgICAgIGxlZnRFZGdl
T2ZQcmV2aW91c0NvbHVtbiArPSBmaXJzdFJvd0NlbGxzW2xlZnRDZWxsSW5kZXhdLm9mZnNldFdp
ZHRoIC0gZmlyc3RSb3dDZWxsc1swXS5vZmZzZXRXaWR0aDsKLSAgICAgICAgICAgIGxlZnRDZWxs
SW5kZXggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHJpZ2h0RWRnZU9mTmV4dENvbHVt
biA9IGxlZnRFZGdlT2ZQcmV2aW91c0NvbHVtbiArIGZpcnN0Um93Q2VsbHNbbGVmdENlbGxJbmRl
eF0ub2Zmc2V0V2lkdGggKyBmaXJzdFJvd0NlbGxzW3JpZ2h0Q2VsbEluZGV4XS5vZmZzZXRXaWR0
aDsKLQotICAgICAgICAvLyBHaXZlIGVhY2ggY29sdW1uIHNvbWUgcGFkZGluZyBzbyB0aGF0IHRo
ZXkgZG9uJ3QgZGlzYXBwZWFyLgotICAgICAgICB2YXIgbGVmdE1pbmltdW0gPSBsZWZ0RWRnZU9m
UHJldmlvdXNDb2x1bW4gKyB0aGlzLkNvbHVtblJlc2l6ZVBhZGRpbmc7Ci0gICAgICAgIHZhciBy
aWdodE1heGltdW0gPSByaWdodEVkZ2VPZk5leHRDb2x1bW4gLSB0aGlzLkNvbHVtblJlc2l6ZVBh
ZGRpbmc7Ci0KLSAgICAgICAgZHJhZ1BvaW50ID0gTnVtYmVyLmNvbnN0cmFpbihkcmFnUG9pbnQs
IGxlZnRNaW5pbXVtLCByaWdodE1heGltdW0pOwotCi0gICAgICAgIHJlc2l6ZXIuc3R5bGUubGVm
dCA9IChkcmFnUG9pbnQgLSB0aGlzLkNlbnRlclJlc2l6ZXJPdmVyQm9yZGVyQWRqdXN0bWVudCkg
KyAicHgiOwotCi0gICAgICAgIHZhciBwZXJjZW50TGVmdENvbHVtbiA9ICgoKGRyYWdQb2ludCAt
IGxlZnRFZGdlT2ZQcmV2aW91c0NvbHVtbikgLyB0YWJsZVdpZHRoKSAqIDEwMCkgKyAiJSI7Ci0g
ICAgICAgIHRoaXMuX2hlYWRlclRhYmxlQ29sdW1uR3JvdXAuY2hpbGRyZW5bbGVmdENlbGxJbmRl
eF0uc3R5bGUud2lkdGggPSBwZXJjZW50TGVmdENvbHVtbjsKLSAgICAgICAgdGhpcy5fZGF0YVRh
YmxlQ29sdW1uR3JvdXAuY2hpbGRyZW5bbGVmdENlbGxJbmRleF0uc3R5bGUud2lkdGggPSBwZXJj
ZW50TGVmdENvbHVtbjsKLQotICAgICAgICB2YXIgcGVyY2VudFJpZ2h0Q29sdW1uID0gKCgocmln
aHRFZGdlT2ZOZXh0Q29sdW1uIC0gZHJhZ1BvaW50KSAvIHRhYmxlV2lkdGgpICogMTAwKSArICIl
IjsKLSAgICAgICAgdGhpcy5faGVhZGVyVGFibGVDb2x1bW5Hcm91cC5jaGlsZHJlbltyaWdodENl
bGxJbmRleF0uc3R5bGUud2lkdGggPSAgcGVyY2VudFJpZ2h0Q29sdW1uOwotICAgICAgICB0aGlz
Ll9kYXRhVGFibGVDb2x1bW5Hcm91cC5jaGlsZHJlbltyaWdodENlbGxJbmRleF0uc3R5bGUud2lk
dGggPSBwZXJjZW50UmlnaHRDb2x1bW47Ci0KLSAgICAgICAgdmFyIGxlZnRDb2x1bW4gPSB0aGlz
Ll9jb2x1bW5zQXJyYXlbbGVmdENlbGxJbmRleF07Ci0gICAgICAgIHZhciByaWdodENvbHVtbiA9
IHRoaXMuX2NvbHVtbnNBcnJheVtyaWdodENlbGxJbmRleF07Ci0gICAgICAgIGlmIChsZWZ0Q29s
dW1uLndlaWdodCB8fCByaWdodENvbHVtbi53ZWlnaHQpIHsKLSAgICAgICAgICAgIHZhciBzdW1P
ZldlaWdodHMgPSBsZWZ0Q29sdW1uLndlaWdodCArIHJpZ2h0Q29sdW1uLndlaWdodDsKLSAgICAg
ICAgICAgIHZhciBkZWx0YSA9IHJpZ2h0RWRnZU9mTmV4dENvbHVtbiAtIGxlZnRFZGdlT2ZQcmV2
aW91c0NvbHVtbjsKLSAgICAgICAgICAgIGxlZnRDb2x1bW4ud2VpZ2h0ID0gKGRyYWdQb2ludCAt
IGxlZnRFZGdlT2ZQcmV2aW91c0NvbHVtbikgKiBzdW1PZldlaWdodHMgLyBkZWx0YTsKLSAgICAg
ICAgICAgIHJpZ2h0Q29sdW1uLndlaWdodCA9IChyaWdodEVkZ2VPZk5leHRDb2x1bW4gLSBkcmFn
UG9pbnQpICogc3VtT2ZXZWlnaHRzIC8gZGVsdGE7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
Ll9wb3NpdGlvblJlc2l6ZXJzKCk7Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EYXRhR3Jp
ZC5FdmVudHMuQ29sdW1uc1Jlc2l6ZWQpOwotICAgIH0sCi0KLSAgICBfZW5kUmVzaXplckRyYWdn
aW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRSZXNpemVy
ID0gbnVsbDsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLkRhdGFHcmlkLkV2ZW50cy5Db2x1bW5zUmVzaXplZCk7Ci0gICAgfSwKLQotICAgIENvbHVt
blJlc2l6ZVBhZGRpbmc6IDEwLAotCi0gICAgQ2VudGVyUmVzaXplck92ZXJCb3JkZXJBZGp1c3Rt
ZW50OiAzLAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0K
LQotV2ViSW5zcGVjdG9yLkRhdGFHcmlkLlJlc2l6ZU1ldGhvZCA9IHsKLSAgICBOZWFyZXN0OiAi
bmVhcmVzdCIsCi0gICAgRmlyc3Q6ICJmaXJzdCIsCi0gICAgTGFzdDogImxhc3QiCi19Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAq
IEBwYXJhbSB7Kj19IGRhdGEKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IGhhc0NoaWxkcmVuCi0gKi8K
LVdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUgPSBmdW5jdGlvbihkYXRhLCBoYXNDaGlsZHJlbikK
LXsKLSAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlOwotICAgIHRoaXMuX3NlbGVjdGVkID0gZmFs
c2U7Ci0gICAgdGhpcy5fc2hvdWxkUmVmcmVzaENoaWxkcmVuID0gdHJ1ZTsKLSAgICB0aGlzLl9k
YXRhID0gZGF0YSB8fCB7fTsKLSAgICB0aGlzLmhhc0NoaWxkcmVuID0gaGFzQ2hpbGRyZW4gfHwg
ZmFsc2U7Ci0gICAgLyoqIEB0eXBlIHshQXJyYXkuPFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGU+
fSAqLwotICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKLSAgICB0aGlzLmRhdGFHcmlkID0gbnVsbDsK
LSAgICB0aGlzLnBhcmVudCA9IG51bGw7Ci0gICAgLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRGF0
YUdyaWROb2RlfSAqLwotICAgIHRoaXMucHJldmlvdXNTaWJsaW5nID0gbnVsbDsKLSAgICAvKiog
QHR5cGUge1dlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9ICovCi0gICAgdGhpcy5uZXh0U2libGlu
ZyA9IG51bGw7Ci0gICAgdGhpcy5kaXNjbG9zdXJlVG9nZ2xlV2lkdGggPSAxMDsKLX0KLQotV2Vi
SW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqIEB0eXBlIHtib29s
ZWFufSAqLwotICAgIHNlbGVjdGFibGU6IHRydWUsCi0KLSAgICAvKiogQHR5cGUge2Jvb2xlYW59
ICovCi0gICAgX2lzUm9vdDogZmFsc2UsCi0KLSAgICBnZXQgZWxlbWVudCgpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50
OwotCi0gICAgICAgIGlmICghdGhpcy5kYXRhR3JpZCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
OwotCi0gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIp
OwotICAgICAgICB0aGlzLl9lbGVtZW50Ll9kYXRhR3JpZE5vZGUgPSB0aGlzOwotCi0gICAgICAg
IGlmICh0aGlzLmhhc0NoaWxkcmVuKQotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJwYXJlbnQiKTsKLSAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpCi0gICAgICAgICAg
ICB0aGlzLl9lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImV4cGFuZGVkIik7Ci0gICAgICAgIGlmICh0
aGlzLnNlbGVjdGVkKQotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJz
ZWxlY3RlZCIpOwotICAgICAgICBpZiAodGhpcy5yZXZlYWxlZCkKLSAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnQuYWRkU3R5bGVDbGFzcygicmV2ZWFsZWQiKTsKLQotICAgICAgICB0aGlzLmNyZWF0
ZUNlbGxzKCk7Ci0gICAgICAgIHRoaXMuX2VsZW1lbnQuY3JlYXRlQ2hpbGQoInRkIiwgImNvcm5l
ciIpOwotCi0gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OwotICAgIH0sCi0KLSAgICBjcmVh
dGVDZWxsczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGNvbHVtbnNBcnJheSA9IHRo
aXMuZGF0YUdyaWQuX2NvbHVtbnNBcnJheTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
b2x1bW5zQXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBjZWxsID0gdGhpcy5j
cmVhdGVDZWxsKGNvbHVtbnNBcnJheVtpXS5pZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnQuYXBwZW5kQ2hpbGQoY2VsbCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0
IGRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7Ci0gICAgfSwKLQotICAg
IHNldCBkYXRhKHgpCi0gICAgewotICAgICAgICB0aGlzLl9kYXRhID0geCB8fCB7fTsKLSAgICAg
ICAgdGhpcy5yZWZyZXNoKCk7Ci0gICAgfSwKLQotICAgIGdldCByZXZlYWxlZCgpCi0gICAgewot
ICAgICAgICBpZiAoIl9yZXZlYWxlZCIgaW4gdGhpcykKLSAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yZXZlYWxlZDsKLQotICAgICAgICB2YXIgY3VycmVudEFuY2VzdG9yID0gdGhpcy5wYXJlbnQ7
Ci0gICAgICAgIHdoaWxlIChjdXJyZW50QW5jZXN0b3IgJiYgIWN1cnJlbnRBbmNlc3Rvci5faXNS
b290KSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRBbmNlc3Rvci5leHBhbmRlZCkgewotICAg
ICAgICAgICAgICAgIHRoaXMuX3JldmVhbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjdXJyZW50QW5jZXN0b3Ig
PSBjdXJyZW50QW5jZXN0b3IucGFyZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcmV2
ZWFsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgc2V0IGhh
c0NoaWxkcmVuKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5faGFzQ2hpbGRyZW4gPT09IHgp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGFzQ2hpbGRyZW4gPSB4Owot
Ci0gICAgICAgIGlmICghdGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICB0aGlzLl9lbGVtZW50LmVuYWJsZVN0eWxlQ2xhc3MoInBhcmVudCIsIHRoaXMuX2hhc0No
aWxkcmVuKTsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5lbmFibGVTdHlsZUNsYXNzKCJleHBhbmRl
ZCIsIHRoaXMuX2hhc0NoaWxkcmVuICYmIHRoaXMuZXhwYW5kZWQpOwotICAgIH0sCi0KLSAgICBn
ZXQgaGFzQ2hpbGRyZW4oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0NoaWxkcmVu
OwotICAgIH0sCi0KLSAgICBzZXQgcmV2ZWFsZWQoeCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9yZXZlYWxlZCA9PT0geCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9y
ZXZlYWxlZCA9IHg7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCi0gICAgICAgICAgICB0
aGlzLl9lbGVtZW50LmVuYWJsZVN0eWxlQ2xhc3MoInJldmVhbGVkIiwgdGhpcy5fcmV2ZWFsZWQp
OwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmV2ZWFsZWQgPSB4ICYmIHRoaXMuZXhw
YW5kZWQ7Ci0gICAgfSwKLQotICAgIGdldCBkZXB0aCgpCi0gICAgewotICAgICAgICBpZiAoIl9k
ZXB0aCIgaW4gdGhpcykKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDsKLSAgICAgICAg
aWYgKHRoaXMucGFyZW50ICYmICF0aGlzLnBhcmVudC5faXNSb290KQotICAgICAgICAgICAgdGhp
cy5fZGVwdGggPSB0aGlzLnBhcmVudC5kZXB0aCArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHRoaXMuX2RlcHRoID0gMDsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoOwotICAgIH0s
Ci0KLSAgICBnZXQgbGVmdFBhZGRpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlz
Ll9sZWZ0UGFkZGluZyA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVm
dFBhZGRpbmc7Ci0KLSAgICAgICAgdGhpcy5fbGVmdFBhZGRpbmcgPSB0aGlzLmRlcHRoICogdGhp
cy5kYXRhR3JpZC5pbmRlbnRXaWR0aDsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRQYWRkaW5n
OwotICAgIH0sCi0KLSAgICBnZXQgc2hvdWxkUmVmcmVzaENoaWxkcmVuKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW47Ci0gICAgfSwKLQotICAgIHNl
dCBzaG91bGRSZWZyZXNoQ2hpbGRyZW4oeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3VsZFJl
ZnJlc2hDaGlsZHJlbiA9IHg7Ci0gICAgICAgIGlmICh4ICYmIHRoaXMuZXhwYW5kZWQpCi0gICAg
ICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgIH0sCi0KLSAgICBnZXQgc2VsZWN0ZWQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkOwotICAgIH0sCi0KLSAgICBzZXQgc2Vs
ZWN0ZWQoeCkKLSAgICB7Ci0gICAgICAgIGlmICh4KQotICAgICAgICAgICAgdGhpcy5zZWxlY3Qo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5kZXNlbGVjdCgpOwotICAgIH0sCi0K
LSAgICBnZXQgZXhwYW5kZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVk
OwotICAgIH0sCi0KLSAgICBzZXQgZXhwYW5kZWQoeCkKLSAgICB7Ci0gICAgICAgIGlmICh4KQot
ICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhp
cy5jb2xsYXBzZSgpOwotICAgIH0sCi0KLSAgICByZWZyZXNoOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuX2VsZW1lbnQgfHwgIXRoaXMuZGF0YUdyaWQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAg
ICAgICB0aGlzLmNyZWF0ZUNlbGxzKCk7Ci0gICAgICAgIHRoaXMuX2VsZW1lbnQuY3JlYXRlQ2hp
bGQoInRkIiwgImNvcm5lciIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gY29sdW1uSWRlbnRpZmllcgotICAgICAqIEByZXR1cm4geyFFbGVtZW50fQotICAgICAq
LwotICAgIGNyZWF0ZVREOiBmdW5jdGlvbihjb2x1bW5JZGVudGlmaWVyKQotICAgIHsKLSAgICAg
ICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICBjZWxs
LmNsYXNzTmFtZSA9IGNvbHVtbklkZW50aWZpZXIgKyAiLWNvbHVtbiI7Ci0gICAgICAgIGNlbGwu
Y29sdW1uSWRlbnRpZmllcl8gPSBjb2x1bW5JZGVudGlmaWVyOwotCi0gICAgICAgIHZhciBhbGln
bm1lbnQgPSB0aGlzLmRhdGFHcmlkLmNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0uYWxpZ247Ci0g
ICAgICAgIGlmIChhbGlnbm1lbnQpCi0gICAgICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoYWxp
Z25tZW50KTsKLQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbklkZW50aWZpZXIKLSAgICAgKiBAcmV0dXJuIHshRWxl
bWVudH0KLSAgICAgKi8KLSAgICBjcmVhdGVDZWxsOiBmdW5jdGlvbihjb2x1bW5JZGVudGlmaWVy
KQotICAgIHsKLSAgICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVREKGNvbHVtbklkZW50aWZp
ZXIpOwotCi0gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhW2NvbHVtbklkZW50aWZpZXJdOwot
ICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAg
IGlmIChkYXRhIGluc3RhbmNlb2YgTm9kZSkKLSAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChk
YXRhKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGl2LnRleHRDb250ZW50ID0gZGF0YTsK
LSAgICAgICAgY2VsbC5hcHBlbmRDaGlsZChkaXYpOwotCi0gICAgICAgIGlmIChjb2x1bW5JZGVu
dGlmaWVyID09PSB0aGlzLmRhdGFHcmlkLmRpc2Nsb3N1cmVDb2x1bW5JZGVudGlmaWVyKSB7Ci0g
ICAgICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoImRpc2Nsb3N1cmUiKTsKLSAgICAgICAgICAg
IGlmICh0aGlzLmxlZnRQYWRkaW5nKQotICAgICAgICAgICAgICAgIGNlbGwuc3R5bGUuc2V0UHJv
cGVydHkoInBhZGRpbmctbGVmdCIsIHRoaXMubGVmdFBhZGRpbmcgKyAicHgiKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBjZWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgbm9kZUhlaWdodDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdmFyIHJvd0hlaWdodCA9IDE2OwotICAgICAgICBpZiAoIXRoaXMucmV2ZWFsZWQp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkKQotICAg
ICAgICAgICAgcmV0dXJuIHJvd0hlaWdodDsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHJvd0hlaWdo
dDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsr
KQotICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuY2hpbGRyZW5baV0ubm9kZUhlaWdodCgpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9IGNoaWxkCi0gICAgICovCi0gICAgYXBwZW5kQ2hp
bGQ6IGZ1bmN0aW9uKGNoaWxkKQotICAgIHsKLSAgICAgICAgdGhpcy5pbnNlcnRDaGlsZChjaGls
ZCwgdGhpcy5jaGlsZHJlbi5sZW5ndGgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9IGNoaWxkCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGluZGV4Ci0gICAgICovCi0gICAgaW5zZXJ0Q2hpbGQ6IGZ1bmN0aW9uKGNoaWxkLCBpbmRl
eCkKLSAgICB7Ci0gICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICB0aHJvdygiaW5zZXJ0
Q2hpbGQ6IE5vZGUgY2FuJ3QgYmUgdW5kZWZpbmVkIG9yIG51bGwuIik7Ci0gICAgICAgIGlmIChj
aGlsZC5wYXJlbnQgPT09IHRoaXMpCi0gICAgICAgICAgICB0aHJvdygiaW5zZXJ0Q2hpbGQ6IE5v
ZGUgaXMgYWxyZWFkeSBhIGNoaWxkIG9mIHRoaXMgbm9kZS4iKTsKLQotICAgICAgICBpZiAoY2hp
bGQucGFyZW50KQotICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTsK
LQotICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOwotICAgICAg
ICB0aGlzLmhhc0NoaWxkcmVuID0gdHJ1ZTsKLQotICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlz
OwotICAgICAgICBjaGlsZC5kYXRhR3JpZCA9IHRoaXMuZGF0YUdyaWQ7Ci0gICAgICAgIGNoaWxk
Ll9yZWNhbGN1bGF0ZVNpYmxpbmdzKGluZGV4KTsKLQotICAgICAgICBkZWxldGUgY2hpbGQuX2Rl
cHRoOwotICAgICAgICBkZWxldGUgY2hpbGQuX3JldmVhbGVkOwotICAgICAgICBkZWxldGUgY2hp
bGQuX2F0dGFjaGVkOwotICAgICAgICBjaGlsZC5fc2hvdWxkUmVmcmVzaENoaWxkcmVuID0gdHJ1
ZTsKLQotICAgICAgICB2YXIgY3VycmVudCA9IGNoaWxkLmNoaWxkcmVuWzBdOwotICAgICAgICB3
aGlsZSAoY3VycmVudCkgewotICAgICAgICAgICAgY3VycmVudC5kYXRhR3JpZCA9IHRoaXMuZGF0
YUdyaWQ7Ci0gICAgICAgICAgICBkZWxldGUgY3VycmVudC5fZGVwdGg7Ci0gICAgICAgICAgICBk
ZWxldGUgY3VycmVudC5fcmV2ZWFsZWQ7Ci0gICAgICAgICAgICBkZWxldGUgY3VycmVudC5fYXR0
YWNoZWQ7Ci0gICAgICAgICAgICBjdXJyZW50Ll9zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSB0cnVl
OwotICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQudHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwg
Y2hpbGQsIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpCi0g
ICAgICAgICAgICBjaGlsZC5fYXR0YWNoKCk7Ci0gICAgICAgIGlmICghdGhpcy5yZXZlYWxlZCkK
LSAgICAgICAgICAgIGNoaWxkLnJldmVhbGVkID0gZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZX0gY2hpbGQKLSAgICAgKi8K
LSAgICByZW1vdmVDaGlsZDogZnVuY3Rpb24oY2hpbGQpCi0gICAgewotICAgICAgICBpZiAoIWNo
aWxkKQotICAgICAgICAgICAgdGhyb3coInJlbW92ZUNoaWxkOiBOb2RlIGNhbid0IGJlIHVuZGVm
aW5lZCBvciBudWxsLiIpOwotICAgICAgICBpZiAoY2hpbGQucGFyZW50ICE9PSB0aGlzKQotICAg
ICAgICAgICAgdGhyb3coInJlbW92ZUNoaWxkOiBOb2RlIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMg
bm9kZS4iKTsKLQotICAgICAgICBjaGlsZC5kZXNlbGVjdCgpOwotICAgICAgICBjaGlsZC5fZGV0
YWNoKCk7Ci0KLSAgICAgICAgdGhpcy5jaGlsZHJlbi5yZW1vdmUoY2hpbGQsIHRydWUpOwotCi0g
ICAgICAgIGlmIChjaGlsZC5wcmV2aW91c1NpYmxpbmcpCi0gICAgICAgICAgICBjaGlsZC5wcmV2
aW91c1NpYmxpbmcubmV4dFNpYmxpbmcgPSBjaGlsZC5uZXh0U2libGluZzsKLSAgICAgICAgaWYg
KGNoaWxkLm5leHRTaWJsaW5nKQotICAgICAgICAgICAgY2hpbGQubmV4dFNpYmxpbmcucHJldmlv
dXNTaWJsaW5nID0gY2hpbGQucHJldmlvdXNTaWJsaW5nOwotCi0gICAgICAgIGNoaWxkLmRhdGFH
cmlkID0gbnVsbDsKLSAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDsKLSAgICAgICAgY2hpbGQu
bmV4dFNpYmxpbmcgPSBudWxsOwotICAgICAgICBjaGlsZC5wcmV2aW91c1NpYmxpbmcgPSBudWxs
OwotCi0gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8PSAwKQotICAgICAgICAgICAg
dGhpcy5oYXNDaGlsZHJlbiA9IGZhbHNlOwotICAgIH0sCi0KLSAgICByZW1vdmVDaGlsZHJlbjog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxk
cmVuLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVu
W2ldOwotICAgICAgICAgICAgY2hpbGQuZGVzZWxlY3QoKTsKLSAgICAgICAgICAgIGNoaWxkLl9k
ZXRhY2goKTsKLQotICAgICAgICAgICAgY2hpbGQuZGF0YUdyaWQgPSBudWxsOwotICAgICAgICAg
ICAgY2hpbGQucGFyZW50ID0gbnVsbDsKLSAgICAgICAgICAgIGNoaWxkLm5leHRTaWJsaW5nID0g
bnVsbDsKLSAgICAgICAgICAgIGNoaWxkLnByZXZpb3VzU2libGluZyA9IG51bGw7Ci0gICAgICAg
IH0KLQotICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107Ci0gICAgICAgIHRoaXMuaGFzQ2hpbGRy
ZW4gPSBmYWxzZTsKLSAgICB9LAotCi0gICAgX3JlY2FsY3VsYXRlU2libGluZ3M6IGZ1bmN0aW9u
KG15SW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMucGFyZW50KQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciBwcmV2aW91c0NoaWxkID0gKG15SW5kZXggPiAwID8gdGhp
cy5wYXJlbnQuY2hpbGRyZW5bbXlJbmRleCAtIDFdIDogbnVsbCk7Ci0KLSAgICAgICAgaWYgKHBy
ZXZpb3VzQ2hpbGQpIHsKLSAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQubmV4dFNpYmxpbmcgPSB0
aGlzOwotICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NpYmxpbmcgPSBwcmV2aW91c0NoaWxkOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMucHJldmlvdXNTaWJsaW5nID0gbnVsbDsK
LQotICAgICAgICB2YXIgbmV4dENoaWxkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW5bbXlJbmRleCAr
IDFdOwotCi0gICAgICAgIGlmIChuZXh0Q2hpbGQpIHsKLSAgICAgICAgICAgIG5leHRDaGlsZC5w
cmV2aW91c1NpYmxpbmcgPSB0aGlzOwotICAgICAgICAgICAgdGhpcy5uZXh0U2libGluZyA9IG5l
eHRDaGlsZDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLm5leHRTaWJsaW5nID0g
bnVsbDsKLSAgICB9LAotCi0gICAgY29sbGFwc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9pc1Jvb3QpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlz
Ll9lbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJl
eHBhbmRlZCIpOwotCi0gICAgICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7Ci0KLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgdGhpcy5jaGlsZHJlbltpXS5yZXZlYWxlZCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBjb2xs
YXBzZVJlY3Vyc2l2ZWx5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgaXRlbSA9IHRo
aXM7Ci0gICAgICAgIHdoaWxlIChpdGVtKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbS5leHBhbmRl
ZCkKLSAgICAgICAgICAgICAgICBpdGVtLmNvbGxhcHNlKCk7Ci0gICAgICAgICAgICBpdGVtID0g
aXRlbS50cmF2ZXJzZU5leHROb2RlKGZhbHNlLCB0aGlzLCB0cnVlKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBwb3B1bGF0ZTogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBleHBhbmQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5oYXNDaGlsZHJlbiB8fCB0aGlzLmV4cGFu
ZGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5faXNSb290KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLnJldmVhbGVkICYmICF0aGlzLl9z
aG91bGRSZWZyZXNoQ2hpbGRyZW4pCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltp
XS5yZXZlYWxlZCA9IHRydWU7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFJlZnJlc2hDaGls
ZHJlbikgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0uX2RldGFjaCgpOwot
Ci0gICAgICAgICAgICB0aGlzLnBvcHVsYXRlKCk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9h
dHRhY2hlZCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGls
ZHJlbi5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlz
LmNoaWxkcmVuW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXZlYWxlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnJldmVhbGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgY2hpbGQuX2F0dGFjaCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9lbGVtZW50KQotICAgICAgICAgICAgdGhpcy5f
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJleHBhbmRlZCIpOwotCi0gICAgICAgIHRoaXMuX2V4cGFu
ZGVkID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgZXhwYW5kUmVjdXJzaXZlbHk6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciBpdGVtID0gdGhpczsKLSAgICAgICAgd2hpbGUgKGl0ZW0pIHsK
LSAgICAgICAgICAgIGl0ZW0uZXhwYW5kKCk7Ci0gICAgICAgICAgICBpdGVtID0gaXRlbS50cmF2
ZXJzZU5leHROb2RlKGZhbHNlLCB0aGlzKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZXZl
YWw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc1Jvb3QpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHZhciBjdXJyZW50QW5jZXN0b3IgPSB0aGlzLnBhcmVudDsK
LSAgICAgICAgd2hpbGUgKGN1cnJlbnRBbmNlc3RvciAmJiAhY3VycmVudEFuY2VzdG9yLl9pc1Jv
b3QpIHsKLSAgICAgICAgICAgIGlmICghY3VycmVudEFuY2VzdG9yLmV4cGFuZGVkKQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRBbmNlc3Rvci5leHBhbmQoKTsKLSAgICAgICAgICAgIGN1cnJlbnRB
bmNlc3RvciA9IGN1cnJlbnRBbmNlc3Rvci5wYXJlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHN1cHJlc3NTZWxlY3RlZEV2ZW50Ci0gICAg
ICovCi0gICAgc2VsZWN0OiBmdW5jdGlvbihzdXByZXNzU2VsZWN0ZWRFdmVudCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5kYXRhR3JpZCB8fCAhdGhpcy5zZWxlY3RhYmxlIHx8IHRoaXMuc2Vs
ZWN0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuZGF0YUdyaWQu
c2VsZWN0ZWROb2RlKQotICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5zZWxlY3RlZE5vZGUuZGVz
ZWxlY3QoKTsKLQotICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMu
ZGF0YUdyaWQuc2VsZWN0ZWROb2RlID0gdGhpczsKLQotICAgICAgICBpZiAodGhpcy5fZWxlbWVu
dCkKLSAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsK
LQotICAgICAgICBpZiAoIXN1cHJlc3NTZWxlY3RlZEV2ZW50KQotICAgICAgICAgICAgdGhpcy5k
YXRhR3JpZC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkV2
ZW50cy5TZWxlY3RlZE5vZGUpOwotICAgIH0sCi0KLSAgICByZXZlYWxBbmRTZWxlY3Q6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc1Jvb3QpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHRoaXMucmV2ZWFsKCk7Ci0gICAgICAgIHRoaXMuc2VsZWN0KCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHN1cHJlc3NEZXNlbGVjdGVk
RXZlbnQKLSAgICAgKi8KLSAgICBkZXNlbGVjdDogZnVuY3Rpb24oc3VwcmVzc0Rlc2VsZWN0ZWRF
dmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5kYXRhR3JpZCB8fCB0aGlzLmRhdGFHcmlk
LnNlbGVjdGVkTm9kZSAhPT0gdGhpcyB8fCAhdGhpcy5zZWxlY3RlZCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLmRh
dGFHcmlkLnNlbGVjdGVkTm9kZSA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQp
Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7
Ci0KLSAgICAgICAgaWYgKCFzdXByZXNzRGVzZWxlY3RlZEV2ZW50KQotICAgICAgICAgICAgdGhp
cy5kYXRhR3JpZC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRhdGFHcmlk
LkV2ZW50cy5EZXNlbGVjdGVkTm9kZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gc2tpcEhpZGRlbgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRhdGFH
cmlkTm9kZT19IHN0YXlXaXRoaW4KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBkb250UG9wdWxh
dGUKLSAgICAgKiBAcGFyYW0ge09iamVjdD19IGluZm8KLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNw
ZWN0b3IuRGF0YUdyaWROb2RlfQotICAgICAqLwotICAgIHRyYXZlcnNlTmV4dE5vZGU6IGZ1bmN0
aW9uKHNraXBIaWRkZW4sIHN0YXlXaXRoaW4sIGRvbnRQb3B1bGF0ZSwgaW5mbykKLSAgICB7Ci0g
ICAgICAgIGlmICghZG9udFBvcHVsYXRlICYmIHRoaXMuaGFzQ2hpbGRyZW4pCi0gICAgICAgICAg
ICB0aGlzLnBvcHVsYXRlKCk7Ci0KLSAgICAgICAgaWYgKGluZm8pCi0gICAgICAgICAgICBpbmZv
LmRlcHRoQ2hhbmdlID0gMDsKLQotICAgICAgICB2YXIgbm9kZSA9ICghc2tpcEhpZGRlbiB8fCB0
aGlzLnJldmVhbGVkKSA/IHRoaXMuY2hpbGRyZW5bMF0gOiBudWxsOwotICAgICAgICBpZiAobm9k
ZSAmJiAoIXNraXBIaWRkZW4gfHwgdGhpcy5leHBhbmRlZCkpIHsKLSAgICAgICAgICAgIGlmIChp
bmZvKQotICAgICAgICAgICAgICAgIGluZm8uZGVwdGhDaGFuZ2UgPSAxOwotICAgICAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcyA9PT0gc3RheVdpdGhp
bikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIG5vZGUgPSAoIXNraXBIaWRk
ZW4gfHwgdGhpcy5yZXZlYWxlZCkgPyB0aGlzLm5leHRTaWJsaW5nIDogbnVsbDsKLSAgICAgICAg
aWYgKG5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgICAgICBub2RlID0gdGhp
czsKLSAgICAgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUuX2lzUm9vdCAmJiAhKCghc2tpcEhpZGRl
biB8fCBub2RlLnJldmVhbGVkKSA/IG5vZGUubmV4dFNpYmxpbmcgOiBudWxsKSAmJiBub2RlLnBh
cmVudCAhPT0gc3RheVdpdGhpbikgewotICAgICAgICAgICAgaWYgKGluZm8pCi0gICAgICAgICAg
ICAgICAgaW5mby5kZXB0aENoYW5nZSAtPSAxOwotICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFy
ZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0KLSAgICAgICAgcmV0dXJuICghc2tpcEhpZGRlbiB8fCBub2RlLnJldmVhbGVkKSA/
IG5vZGUubmV4dFNpYmxpbmcgOiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IHNraXBIaWRkZW4KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBkb250UG9w
dWxhdGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlfQotICAgICAq
LwotICAgIHRyYXZlcnNlUHJldmlvdXNOb2RlOiBmdW5jdGlvbihza2lwSGlkZGVuLCBkb250UG9w
dWxhdGUpCi0gICAgewotICAgICAgICB2YXIgbm9kZSA9ICghc2tpcEhpZGRlbiB8fCB0aGlzLnJl
dmVhbGVkKSA/IHRoaXMucHJldmlvdXNTaWJsaW5nIDogbnVsbDsKLSAgICAgICAgaWYgKCFkb250
UG9wdWxhdGUgJiYgbm9kZSAmJiBub2RlLmhhc0NoaWxkcmVuKQotICAgICAgICAgICAgbm9kZS5w
b3B1bGF0ZSgpOwotCi0gICAgICAgIHdoaWxlIChub2RlICYmICgoIXNraXBIaWRkZW4gfHwgKG5v
ZGUucmV2ZWFsZWQgJiYgbm9kZS5leHBhbmRlZCkpID8gbm9kZS5jaGlsZHJlbltub2RlLmNoaWxk
cmVuLmxlbmd0aCAtIDFdIDogbnVsbCkpIHsKLSAgICAgICAgICAgIGlmICghZG9udFBvcHVsYXRl
ICYmIG5vZGUuaGFzQ2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbm9kZS5wb3B1bGF0ZSgpOwot
ICAgICAgICAgICAgbm9kZSA9ICgoIXNraXBIaWRkZW4gfHwgKG5vZGUucmV2ZWFsZWQgJiYgbm9k
ZS5leHBhbmRlZCkpID8gbm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdIDog
bnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgIHJldHVy
biBub2RlOwotCi0gICAgICAgIGlmICghdGhpcy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQuX2lzUm9v
dCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiB0aGlzLnBhcmVu
dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8K
LSAgICBpc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFuZ2xlOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5oYXNDaGlsZHJlbikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgdmFyIGNlbGwgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhOb2RlTmFtZSgidGQiKTsKLSAgICAgICAgaWYgKCFjZWxsLmhhc1N0eWxlQ2xhc3MoImRp
c2Nsb3N1cmUiKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgbGVm
dCA9IGNlbGwudG90YWxPZmZzZXRMZWZ0KCkgKyB0aGlzLmxlZnRQYWRkaW5nOwotICAgICAgICBy
ZXR1cm4gZXZlbnQucGFnZVggPj0gbGVmdCAmJiBldmVudC5wYWdlWCA8PSBsZWZ0ICsgdGhpcy5k
aXNjbG9zdXJlVG9nZ2xlV2lkdGg7Ci0gICAgfSwKLQotICAgIF9hdHRhY2g6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5kYXRhR3JpZCB8fCB0aGlzLl9hdHRhY2hlZCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9hdHRhY2hlZCA9IHRydWU7Ci0KLSAg
ICAgICAgdmFyIG5leHROb2RlID0gbnVsbDsKLSAgICAgICAgdmFyIHByZXZpb3VzTm9kZSA9IHRo
aXMudHJhdmVyc2VQcmV2aW91c05vZGUodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChwcmV2aW91
c05vZGUgJiYgcHJldmlvdXNOb2RlLmVsZW1lbnQucGFyZW50Tm9kZSAmJiBwcmV2aW91c05vZGUu
ZWxlbWVudC5uZXh0U2libGluZykKLSAgICAgICAgICAgIG5leHROb2RlID0gcHJldmlvdXNOb2Rl
LmVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgICAgIGlmICghbmV4dE5vZGUpCi0gICAgICAgICAg
ICBuZXh0Tm9kZSA9IHRoaXMuZGF0YUdyaWQuZGF0YVRhYmxlQm9keS5maXJzdENoaWxkOwotICAg
ICAgICB0aGlzLmRhdGFHcmlkLmRhdGFUYWJsZUJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVu
dCwgbmV4dE5vZGUpOwotCi0gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKQotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgICAgIHRoaXMuY2hpbGRyZW5baV0uX2F0dGFjaCgpOwotICAgIH0sCi0KLSAgICBfZGV0YWNo
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2F0dGFjaGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2F0dGFjaGVkID0gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlKQotICAgICAg
ICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQp
OwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0uX2RldGFjaCgpOwotCi0gICAgICAgIHRo
aXMud2FzRGV0YWNoZWQoKTsKLSAgICB9LAotCi0gICAgd2FzRGV0YWNoZWQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgfSwKLQotICAgIHNhdmVQb3NpdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuX3NhdmVkUG9zaXRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgaWYgKCF0aGlzLnBhcmVudCkKLSAgICAgICAgICAgIHRocm93KCJzYXZlUG9zaXRpb246
IE5vZGUgbXVzdCBoYXZlIGEgcGFyZW50LiIpOwotICAgICAgICB0aGlzLl9zYXZlZFBvc2l0aW9u
ID0gewotICAgICAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCwKLSAgICAgICAgICAgIGluZGV4
OiB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpCi0gICAgICAgIH07Ci0gICAgfSwK
LQotICAgIHJlc3RvcmVQb3NpdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLl9zYXZlZFBvc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0
aGlzLnBhcmVudCAhPT0gdGhpcy5fc2F2ZWRQb3NpdGlvbi5wYXJlbnQpCi0gICAgICAgICAgICB0
aGlzLl9zYXZlZFBvc2l0aW9uLnBhcmVudC5pbnNlcnRDaGlsZCh0aGlzLCB0aGlzLl9zYXZlZFBv
c2l0aW9uLmluZGV4KTsKLQotICAgICAgICBkZWxldGUgdGhpcy5fc2F2ZWRQb3NpdGlvbjsKLSAg
ICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5EYXRhR3Jp
ZE5vZGV9Ci0gKi8KLVdlYkluc3BlY3Rvci5DcmVhdGlvbkRhdGFHcmlkTm9kZSA9IGZ1bmN0aW9u
KGRhdGEsIGhhc0NoaWxkcmVuKQotewotICAgIFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUuY2Fs
bCh0aGlzLCBkYXRhLCBoYXNDaGlsZHJlbik7Ci0gICAgdGhpcy5pc0NyZWF0aW9uTm9kZSA9IHRy
dWU7Ci19Ci0KLVdlYkluc3BlY3Rvci5DcmVhdGlvbkRhdGFHcmlkTm9kZS5wcm90b3R5cGUgPSB7
Ci0gICAgbWFrZU5vcm1hbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMu
aXNDcmVhdGlvbk5vZGU7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLm1ha2VOb3JtYWw7Ci0gICAgfSwK
LQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2Uu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzU4YzI1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2UuanMKKysrIC9kZXYvbnVsbApAQCAt
MSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5EYXRhYmFzZU1vZGVsfSBtb2RlbAotICovCi1XZWJJbnNwZWN0b3IuRGF0YWJh
c2UgPSBmdW5jdGlvbihtb2RlbCwgaWQsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbikKLXsKLSAgICB0
aGlzLl9tb2RlbCA9IG1vZGVsOwotICAgIHRoaXMuX2lkID0gaWQ7Ci0gICAgdGhpcy5fZG9tYWlu
ID0gZG9tYWluOwotICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgIHRoaXMuX3ZlcnNpb24gPSB2
ZXJzaW9uOwotfQotCi1XZWJJbnNwZWN0b3IuRGF0YWJhc2UucHJvdG90eXBlID0gewotICAgIC8q
KiBAcmV0dXJuIHtzdHJpbmd9ICovCi0gICAgZ2V0IGlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9pZDsKLSAgICB9LAotCi0gICAgLyoqIEByZXR1cm4ge3N0cmluZ30gKi8KLSAgICBn
ZXQgbmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTsKLSAgICB9LAotCi0g
ICAgc2V0IG5hbWUoeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX25hbWUgPSB4OwotICAgIH0sCi0K
LSAgICAvKiogQHJldHVybiB7c3RyaW5nfSAqLwotICAgIGdldCB2ZXJzaW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uOwotICAgIH0sCi0KLSAgICBzZXQgdmVyc2lvbih4
KQotICAgIHsKLSAgICAgICAgdGhpcy5fdmVyc2lvbiA9IHg7Ci0gICAgfSwKLQotICAgIC8qKiBA
cmV0dXJuIHtzdHJpbmd9ICovCi0gICAgZ2V0IGRvbWFpbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fZG9tYWluOwotICAgIH0sCi0KLSAgICBzZXQgZG9tYWluKHgpCi0gICAgewotICAg
ICAgICB0aGlzLl9kb21haW4gPSB4OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e2Z1bmN0aW9uKEFycmF5LjxzdHJpbmc+KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBnZXRUYWJs
ZU5hbWVzOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHNvcnRp
bmdDYWxsYmFjayhlcnJvciwgbmFtZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZXJy
b3IpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2sobmFtZXMuc29ydCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBEYXRhYmFzZUFnZW50LmdldERhdGFiYXNlVGFibGVOYW1lcyh0aGlzLl9pZCwgc29y
dGluZ0NhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHF1ZXJ5Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48c3RyaW5nPj0sIEFycmF5Ljwq
Pj0pfSBvblN1Y2Nlc3MKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyl9IG9uRXJyb3IK
LSAgICAgKi8KLSAgICBleGVjdXRlU3FsOiBmdW5jdGlvbihxdWVyeSwgb25TdWNjZXNzLCBvbkVy
cm9yKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVy
cm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gY29sdW1uTmFt
ZXMKLSAgICAgICAgICogQHBhcmFtIHtBcnJheS48Kj49fSB2YWx1ZXMKLSAgICAgICAgICogQHBh
cmFtIHtEYXRhYmFzZUFnZW50LkVycm9yPX0gZXJyb3JPYmoKLSAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCBjb2x1bW5OYW1lcywgdmFsdWVzLCBlcnJvck9iaikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgb25F
cnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGVycm9yT2JqKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2U7Ci0g
ICAgICAgICAgICAgICAgaWYgKGVycm9yT2JqLm1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UgPSBlcnJvck9iai5tZXNzYWdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVy
cm9yT2JqLmNvZGUgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiRGF0YWJhc2Ugbm8gbG9uZ2VyIGhhcyBleHBlY3RlZCB2ZXJzaW9uLiIp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQW4gdW5leHBlY3RlZCBlcnJvciAlcyBvY2N1cnJlZC4iLCBl
cnJvck9iai5jb2RlKTsKLSAgICAgICAgICAgICAgICBvbkVycm9yKG1lc3NhZ2UpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9uU3VjY2Vzcyhj
b2x1bW5OYW1lcywgdmFsdWVzKTsKLSAgICAgICAgfQotICAgICAgICBEYXRhYmFzZUFnZW50LmV4
ZWN1dGVTUUwodGhpcy5faWQsIHF1ZXJ5LCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9Ci19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVj
dH0KLSAqLwotV2ViSW5zcGVjdG9yLkRhdGFiYXNlTW9kZWwgPSBmdW5jdGlvbigpCi17Ci0gICAg
dGhpcy5fZGF0YWJhc2VzID0gW107Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFi
YXNlRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkRhdGFiYXNlRGlzcGF0Y2hlcih0aGlzKSk7
Ci0gICAgRGF0YWJhc2VBZ2VudC5lbmFibGUoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkRhdGFiYXNl
TW9kZWwuRXZlbnRzID0gewotICAgIERhdGFiYXNlQWRkZWQ6ICJEYXRhYmFzZUFkZGVkIgotfQot
Ci1XZWJJbnNwZWN0b3IuRGF0YWJhc2VNb2RlbC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5EYXRhYmFzZT59Ci0gICAgICovCi0gICAg
ZGF0YWJhc2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0g
ICAgICAgIGZvciAodmFyIGRhdGFiYXNlSWQgaW4gdGhpcy5fZGF0YWJhc2VzKQotICAgICAgICAg
ICAgcmVzdWx0LnB1c2godGhpcy5fZGF0YWJhc2VzW2RhdGFiYXNlSWRdKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtEYXRhYmFzZUFn
ZW50LkRhdGFiYXNlSWR9IGRhdGFiYXNlSWQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
RGF0YWJhc2V9Ci0gICAgICovCi0gICAgZGF0YWJhc2VGb3JJZDogZnVuY3Rpb24oZGF0YWJhc2VJ
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZXNbZGF0YWJhc2VJZF07Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRhdGFiYXNlfSBk
YXRhYmFzZQotICAgICAqLwotICAgIF9hZGREYXRhYmFzZTogZnVuY3Rpb24oZGF0YWJhc2UpCi0g
ICAgewotICAgICAgICB0aGlzLl9kYXRhYmFzZXMucHVzaChkYXRhYmFzZSk7Ci0gICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EYXRhYmFzZU1vZGVsLkV2
ZW50cy5EYXRhYmFzZUFkZGVkLCBkYXRhYmFzZSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzog
V2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBpbXBsZW1lbnRzIHtEYXRhYmFzZUFnZW50LkRpc3BhdGNoZXJ9Ci0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5EYXRhYmFzZU1vZGVsfSBtb2RlbAotICovCi1XZWJJbnNwZWN0b3IuRGF0YWJh
c2VEaXNwYXRjaGVyID0gZnVuY3Rpb24obW9kZWwpCi17Ci0gICAgdGhpcy5fbW9kZWwgPSBtb2Rl
bDsKLX0KLQotV2ViSW5zcGVjdG9yLkRhdGFiYXNlRGlzcGF0Y2hlci5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtEYXRhYmFzZUFnZW50LkRhdGFiYXNlfSBwYXlsb2FkCi0g
ICAgICovCi0gICAgYWRkRGF0YWJhc2U6IGZ1bmN0aW9uKHBheWxvYWQpCi0gICAgewotICAgICAg
ICB0aGlzLl9tb2RlbC5fYWRkRGF0YWJhc2UobmV3IFdlYkluc3BlY3Rvci5EYXRhYmFzZSgKLSAg
ICAgICAgICAgIHRoaXMuX21vZGVsLAotICAgICAgICAgICAgcGF5bG9hZC5pZCwKLSAgICAgICAg
ICAgIHBheWxvYWQuZG9tYWluLAotICAgICAgICAgICAgcGF5bG9hZC5uYW1lLAotICAgICAgICAg
ICAgcGF5bG9hZC52ZXJzaW9uKSk7Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBlIHtXZWJJbnNw
ZWN0b3IuRGF0YWJhc2VNb2RlbH0KLSAqLwotV2ViSW5zcGVjdG9yLmRhdGFiYXNlTW9kZWwgPSBu
dWxsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRh
YmFzZVF1ZXJ5Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0
YWJhc2VRdWVyeVZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNmNlOWYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFz
ZVF1ZXJ5Vmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqLwotV2ViSW5zcGVjdG9yLkRhdGFi
YXNlUXVlcnlWaWV3ID0gZnVuY3Rpb24oZGF0YWJhc2UpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZp
ZXcuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuZGF0YWJhc2UgPSBkYXRhYmFzZTsKLQotICAgIHRo
aXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzdG9yYWdlLXZpZXciKTsKLSAgICB0aGlzLmVsZW1l
bnQuYWRkU3R5bGVDbGFzcygicXVlcnkiKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygibW9ub3NwYWNlIik7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVj
dHN0YXJ0IiwgdGhpcy5fc2VsZWN0U3RhcnQuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgdGhp
cy5fcHJvbXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRo
aXMuX3Byb21wdEVsZW1lbnQuY2xhc3NOYW1lID0gImRhdGFiYXNlLXF1ZXJ5LXByb21wdCI7Ci0g
ICAgdGhpcy5fcHJvbXB0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJiciIpKTsKLSAgICB0aGlzLl9wcm9tcHRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRv
d24iLCB0aGlzLl9wcm9tcHRLZXlEb3duLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuZWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLl9wcm9tcHRFbGVtZW50KTsKLQotICAgIHRoaXMucHJvbXB0
ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkodGhpcy5jb21wbGV0aW9u
cy5iaW5kKHRoaXMpLCAiICIpOwotICAgIHRoaXMucHJvbXB0LmF0dGFjaCh0aGlzLl9wcm9tcHRF
bGVtZW50KTsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRo
aXMuX21lc3NhZ2VzQ2xpY2tlZC5iaW5kKHRoaXMpLCB0cnVlKTsKLX0KLQotV2ViSW5zcGVjdG9y
LkRhdGFiYXNlUXVlcnlWaWV3LkV2ZW50cyA9IHsKLSAgICBTY2hlbWFVcGRhdGVkOiAiU2NoZW1h
VXBkYXRlZCIKLX0KLQotV2ViSW5zcGVjdG9yLkRhdGFiYXNlUXVlcnlWaWV3LnByb3RvdHlwZSA9
IHsKLSAgICBfbWVzc2FnZXNDbGlja2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
IXRoaXMucHJvbXB0LmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICB0aGlzLnByb21wdC5tb3ZlQ2FyZXRUb0VuZE9m
UHJvbXB0KCk7Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9
IHByb3h5RWxlbWVudAotICAgICAqIEBwYXJhbSB7UmFuZ2V9IHdvcmRSYW5nZQotICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gZm9yY2UKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFBcnJheS48c3Ry
aW5nPiwgbnVtYmVyPSl9IGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjawotICAgICAqLwotICAgIGNv
bXBsZXRpb25zOiBmdW5jdGlvbihwcm94eUVsZW1lbnQsIHdvcmRSYW5nZSwgZm9yY2UsIGNvbXBs
ZXRpb25zUmVhZHlDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBwcmVmaXggPSB3b3JkUmFu
Z2UudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICBpZiAoIXByZWZpeC5sZW5ndGgg
JiYgIWZvcmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciByZXN1bHRzID0g
W107Ci0KLSAgICAgICAgZnVuY3Rpb24gYWNjdW11bGF0ZU1hdGNoZXModGV4dEFycmF5KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRBcnJheS5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gdGV4dEFycmF5W2ldLnRvTG93ZXJD
YXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoIDwgcHJlZml4Lmxlbmd0aCkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0
LnN0YXJ0c1dpdGgocHJlZml4KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRleHRBcnJheVtpXSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB0YWJsZU5hbWVzQ2FsbGJhY2sodGFibGVOYW1l
cykKLSAgICAgICAgewotICAgICAgICAgICAgYWNjdW11bGF0ZU1hdGNoZXModGFibGVOYW1lcy5t
YXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gbmFtZSArICIgIiB9KSk7Ci0gICAgICAgICAgICBh
Y2N1bXVsYXRlTWF0Y2hlcyhbIlNFTEVDVCAiLCAiRlJPTSAiLCAiV0hFUkUgIiwgIkxJTUlUICIs
ICJERUxFVEUgRlJPTSAiLCAiQ1JFQVRFICIsICJEUk9QICIsICJUQUJMRSAiLCAiSU5ERVggIiwg
IlVQREFURSAiLCAiSU5TRVJUIElOVE8gIiwgIlZBTFVFUyAoIl0pOwotCi0gICAgICAgICAgICBj
b21wbGV0aW9uc1JlYWR5Q2FsbGJhY2socmVzdWx0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy5kYXRhYmFzZS5nZXRUYWJsZU5hbWVzKHRhYmxlTmFtZXNDYWxsYmFjayk7Ci0gICAgfSwKLQot
ICAgIF9zZWxlY3RTdGFydDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fc2VsZWN0aW9uVGltZW91dCkKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zZWxl
Y3Rpb25UaW1lb3V0KTsKLQotICAgICAgICB0aGlzLnByb21wdC5jbGVhckF1dG9Db21wbGV0ZSgp
OwotCi0gICAgICAgIGZ1bmN0aW9uIG1vdmVCYWNrSWZPdXRzaWRlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdGlvblRpbWVvdXQ7Ci0gICAgICAgICAgICBpZiAo
IXRoaXMucHJvbXB0LmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICAgICAgdGhpcy5wcm9tcHQubW92ZUNhcmV0VG9F
bmRPZlByb21wdCgpOwotICAgICAgICAgICAgdGhpcy5wcm9tcHQuYXV0b0NvbXBsZXRlU29vbigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZW91dCA9IHNldFRpbWVv
dXQobW92ZUJhY2tJZk91dHNpZGUuYmluZCh0aGlzKSwgMTAwKTsKLSAgICB9LAotCi0gICAgX3By
b21wdEtleURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGlzRW50ZXJL
ZXkoZXZlbnQpKSB7Ci0gICAgICAgICAgICB0aGlzLl9lbnRlcktleVByZXNzZWQoZXZlbnQpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9lbnRlcktleVBy
ZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVl
KTsKLQotICAgICAgICB0aGlzLnByb21wdC5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKLQotICAg
ICAgICB2YXIgcXVlcnkgPSB0aGlzLnByb21wdC50ZXh0OwotICAgICAgICBpZiAoIXF1ZXJ5Lmxl
bmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLnByb21wdC5wdXNoSGlz
dG9yeUl0ZW0ocXVlcnkpOwotICAgICAgICB0aGlzLnByb21wdC50ZXh0ID0gIiI7Ci0KLSAgICAg
ICAgdGhpcy5kYXRhYmFzZS5leGVjdXRlU3FsKHF1ZXJ5LCB0aGlzLl9xdWVyeUZpbmlzaGVkLmJp
bmQodGhpcywgcXVlcnkpLCB0aGlzLl9xdWVyeUVycm9yLmJpbmQodGhpcywgcXVlcnkpKTsKLSAg
ICB9LAotCi0gICAgX3F1ZXJ5RmluaXNoZWQ6IGZ1bmN0aW9uKHF1ZXJ5LCBjb2x1bW5OYW1lcywg
dmFsdWVzKQotICAgIHsKLSAgICAgICAgdmFyIGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLkRhdGFH
cmlkLmNyZWF0ZVNvcnRhYmxlRGF0YUdyaWQoY29sdW1uTmFtZXMsIHZhbHVlcyk7Ci0gICAgICAg
IHZhciB0cmltbWVkUXVlcnkgPSBxdWVyeS50cmltKCk7Ci0KLSAgICAgICAgaWYgKGRhdGFHcmlk
KSB7Ci0gICAgICAgICAgICBkYXRhR3JpZC5yZW5kZXJJbmxpbmUoKTsKLSAgICAgICAgICAgIHRo
aXMuX2FwcGVuZFZpZXdRdWVyeVJlc3VsdCh0cmltbWVkUXVlcnksIGRhdGFHcmlkKTsKLSAgICAg
ICAgICAgIGRhdGFHcmlkLmF1dG9TaXplQ29sdW1ucyg1KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh0cmltbWVkUXVlcnkubWF0Y2goL15jcmVhdGUgL2kpIHx8IHRyaW1tZWRRdWVyeS5tYXRj
aCgvXmRyb3AgdGFibGUgL2kpKQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLkRhdGFiYXNlUXVlcnlWaWV3LkV2ZW50cy5TY2hlbWFVcGRhdGVk
LCB0aGlzLmRhdGFiYXNlKTsKLSAgICB9LAotCi0gICAgX3F1ZXJ5RXJyb3I6IGZ1bmN0aW9uKHF1
ZXJ5LCBlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICB0aGlzLl9hcHBlbmRFcnJvclF1ZXJ5
UmVzdWx0KHF1ZXJ5LCBlcnJvck1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5WaWV3fSB2
aWV3Ci0gICAgICovCi0gICAgX2FwcGVuZFZpZXdRdWVyeVJlc3VsdDogZnVuY3Rpb24ocXVlcnks
IHZpZXcpCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0RWxlbWVudCA9IHRoaXMuX2FwcGVuZFF1
ZXJ5UmVzdWx0KHF1ZXJ5KTsKLSAgICAgICAgdmlldy5zaG93KHJlc3VsdEVsZW1lbnQpOwotCi0g
ICAgICAgIHRoaXMuX3Byb21wdEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gZXJyb3JUZXh0Ci0gICAgICovCi0gICAgX2FwcGVuZEVycm9yUXVlcnlSZXN1bHQ6
IGZ1bmN0aW9uKHF1ZXJ5LCBlcnJvclRleHQpCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0RWxl
bWVudCA9IHRoaXMuX2FwcGVuZFF1ZXJ5UmVzdWx0KHF1ZXJ5KTsKLSAgICAgICAgcmVzdWx0RWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJlcnJvciIpCi0gICAgICAgIHJlc3VsdEVsZW1lbnQudGV4dENv
bnRlbnQgPSBlcnJvclRleHQ7Ci0KLSAgICAgICAgdGhpcy5fcHJvbXB0RWxlbWVudC5zY3JvbGxJ
bnRvVmlldyhmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9hcHBlbmRRdWVyeVJlc3VsdDogZnVuY3Rp
b24ocXVlcnkpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkYXRhYmFzZS11c2Vy
LXF1ZXJ5IjsKLSAgICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCB0aGlz
LnByb21wdC5wcm94eUVsZW1lbnQpOwotCi0gICAgICAgIHZhciBjb21tYW5kVGV4dEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGNvbW1hbmRUZXh0RWxl
bWVudC5jbGFzc05hbWUgPSAiZGF0YWJhc2UtcXVlcnktdGV4dCI7Ci0gICAgICAgIGNvbW1hbmRU
ZXh0RWxlbWVudC50ZXh0Q29udGVudCA9IHF1ZXJ5OwotICAgICAgICBlbGVtZW50LmFwcGVuZENo
aWxkKGNvbW1hbmRUZXh0RWxlbWVudCk7Ci0KLSAgICAgICAgdmFyIHJlc3VsdEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgcmVzdWx0RWxlbWVudC5jbGFz
c05hbWUgPSAiZGF0YWJhc2UtcXVlcnktcmVzdWx0IjsKLSAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChyZXN1bHRFbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdEVsZW1lbnQ7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlVGFibGVW
aWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVRhYmxl
Vmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBlZWRlMC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlVGFibGVWaWV3
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVu
ZHMge1dlYkluc3BlY3Rvci5WaWV3fQotICovCi1XZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZVZp
ZXcgPSBmdW5jdGlvbihkYXRhYmFzZSwgdGFibGVOYW1lKQotewotICAgIFdlYkluc3BlY3Rvci5W
aWV3LmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLmRhdGFiYXNlID0gZGF0YWJhc2U7Ci0gICAgdGhp
cy50YWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygic3RvcmFnZS12aWV3Iik7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInRhYmxl
Iik7Ci0KLSAgICB0aGlzLnJlZnJlc2hCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0Jh
ckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlZnJlc2giKSwgInJlZnJlc2gtc3RvcmFn
ZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLnJlZnJlc2hCdXR0b24uYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLl9yZWZyZXNoQnV0dG9uQ2xpY2tlZCwgdGhpcyk7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5EYXRhYmFzZVRhYmxlVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgd2FzU2hvd246
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMudXBkYXRlKCk7Ci0gICAgfSwKLQotICAg
IHN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMu
cmVmcmVzaEJ1dHRvbi5lbGVtZW50XTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IHRhYmxlTmFtZQotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAg
ICBfZXNjYXBlVGFibGVOYW1lOiBmdW5jdGlvbih0YWJsZU5hbWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGFibGVOYW1lLnJlcGxhY2UoL1wiL2csICJcIlwiIik7Ci0gICAgfSwKLSAgICAKLSAg
ICB1cGRhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGF0YWJhc2UuZXhlY3V0
ZVNxbCgiU0VMRUNUICogRlJPTSBcIiIgKyB0aGlzLl9lc2NhcGVUYWJsZU5hbWUodGhpcy50YWJs
ZU5hbWUpICsgIlwiIiwgdGhpcy5fcXVlcnlGaW5pc2hlZC5iaW5kKHRoaXMpLCB0aGlzLl9xdWVy
eUVycm9yLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBfcXVlcnlGaW5pc2hlZDogZnVuY3Rp
b24oY29sdW1uTmFtZXMsIHZhbHVlcykKLSAgICB7Ci0gICAgICAgIHRoaXMuZGV0YWNoQ2hpbGRW
aWV3cygpOwotICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAg
ICB2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuY3JlYXRlU29ydGFibGVEYXRh
R3JpZChjb2x1bW5OYW1lcywgdmFsdWVzKTsKLSAgICAgICAgaWYgKCFkYXRhR3JpZCkgewotICAg
ICAgICAgICAgdGhpcy5fZW1wdHlWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5FbXB0eVZpZXcoV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJUaGUg4oCcJXPigJ1cbnRhYmxlIGlzIGVtcHR5LiIsIHRoaXMu
dGFibGVOYW1lKSk7Ci0gICAgICAgICAgICB0aGlzLl9lbXB0eVZpZXcuc2hvdyh0aGlzLmVsZW1l
bnQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFHcmlkLnNo
b3codGhpcy5lbGVtZW50KTsKLSAgICAgICAgZGF0YUdyaWQuYXV0b1NpemVDb2x1bW5zKDUpOwot
ICAgIH0sCi0KLSAgICBfcXVlcnlFcnJvcjogZnVuY3Rpb24oZXJyb3IpCi0gICAgewotICAgICAg
ICB0aGlzLmRldGFjaENoaWxkVmlld3MoKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNo
aWxkcmVuKCk7Ci0KLSAgICAgICAgdmFyIGVycm9yTXNnRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBlcnJvck1zZ0VsZW1lbnQuY2xhc3NOYW1lID0gInN0
b3JhZ2UtdGFibGUtZXJyb3IiOwotICAgICAgICBlcnJvck1zZ0VsZW1lbnQudGV4dENvbnRlbnQg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFuIGVycm9yIG9jY3VycmVkIHRyeWluZyB0b1xucmVh
ZCB0aGUg4oCcJXPigJ0gdGFibGUuIiwgdGhpcy50YWJsZU5hbWUpOwotICAgICAgICB0aGlzLmVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZXJyb3JNc2dFbGVtZW50KTsKLSAgICB9LAotCi0gICAgX3JlZnJl
c2hCdXR0b25DbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMudXBk
YXRlKCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90
eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
YnVnZ2VyTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVn
Z2VyTW9kZWwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMzg3OTkuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVs
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsODUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsID0gZnVuY3Rpb24oKQotewotICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
ZWJ1Z2dlckRpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckRpc3BhdGNoZXIodGhp
cykpOwotCi0gICAgdGhpcy5fZGVidWdnZXJQYXVzZWREZXRhaWxzID0gbnVsbDsKLSAgICAvKioK
LSAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5TY3JpcHQ+fQotICAg
ICAqLwotICAgIHRoaXMuX3NjcmlwdHMgPSB7fTsKLSAgICB0aGlzLl9zY3JpcHRzQnlTb3VyY2VV
UkwgPSB7fTsKLQotICAgIHRoaXMuX2NhblNldFNjcmlwdFNvdXJjZSA9IGZhbHNlOwotICAgIHRo
aXMuX2JyZWFrcG9pbnRzQWN0aXZlID0gdHJ1ZTsKLQotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5n
cy5wYXVzZU9uRXhjZXB0aW9uU3RhdGVTdHJpbmcgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3Jl
YXRlU2V0dGluZygicGF1c2VPbkV4Y2VwdGlvblN0YXRlU3RyaW5nIiwgV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwuUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZS5Eb250UGF1c2VPbkV4Y2VwdGlvbnMp
OwotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5wYXVzZU9uRXhjZXB0aW9uU3RhdGVTdHJpbmcu
YWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fcGF1c2VPbkV4Y2VwdGlvblN0YXRlQ2hhbmdlZCwgdGhp
cyk7Ci0KLSAgICBpZiAoIUNhcGFiaWxpdGllcy5kZWJ1Z2dlckNhdXNlc1JlY29tcGlsYXRpb24g
fHwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmRlYnVnZ2VyRW5hYmxlZC5nZXQoKSkKLSAgICAgICAg
dGhpcy5lbmFibGVEZWJ1Z2dlcigpOwotfQotCi0vLyBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCBX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcgotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuUGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHsKLSAgICBEb250UGF1c2VPbkV4Y2VwdGlvbnMgOiAibm9u
ZSIsCi0gICAgUGF1c2VPbkFsbEV4Y2VwdGlvbnMgOiAiYWxsIiwKLSAgICBQYXVzZU9uVW5jYXVn
aHRFeGNlcHRpb25zOiAidW5jYXVnaHQiCi19OwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICog
QGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5SYXdMb2NhdGlvbn0KLSAqIEBwYXJhbSB7c3RyaW5n
fSBzY3JpcHRJZAotICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAqIEBwYXJhbSB7bnVt
YmVyfSBjb2x1bW5OdW1iZXIKLSAqLwotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRp
b24gPSBmdW5jdGlvbihzY3JpcHRJZCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotewotICAg
IHRoaXMuc2NyaXB0SWQgPSBzY3JpcHRJZDsKLSAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVt
YmVyOwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotfQotCi1XZWJJbnNw
ZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMgPSB7Ci0gICAgRGVidWdnZXJXYXNFbmFibGVkOiAi
RGVidWdnZXJXYXNFbmFibGVkIiwKLSAgICBEZWJ1Z2dlcldhc0Rpc2FibGVkOiAiRGVidWdnZXJX
YXNEaXNhYmxlZCIsCi0gICAgRGVidWdnZXJQYXVzZWQ6ICJEZWJ1Z2dlclBhdXNlZCIsCi0gICAg
RGVidWdnZXJSZXN1bWVkOiAiRGVidWdnZXJSZXN1bWVkIiwKLSAgICBQYXJzZWRTY3JpcHRTb3Vy
Y2U6ICJQYXJzZWRTY3JpcHRTb3VyY2UiLAotICAgIEZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2U6
ICJGYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlIiwKLSAgICBCcmVha3BvaW50UmVzb2x2ZWQ6ICJC
cmVha3BvaW50UmVzb2x2ZWQiLAotICAgIEdsb2JhbE9iamVjdENsZWFyZWQ6ICJHbG9iYWxPYmpl
Y3RDbGVhcmVkIiwKLSAgICBDYWxsRnJhbWVTZWxlY3RlZDogIkNhbGxGcmFtZVNlbGVjdGVkIiwK
LSAgICBFeGVjdXRpb25MaW5lQ2hhbmdlZDogIkV4ZWN1dGlvbkxpbmVDaGFuZ2VkIiwKLSAgICBD
b25zb2xlQ29tbWFuZEV2YWx1YXRlZEluU2VsZWN0ZWRDYWxsRnJhbWU6ICJDb25zb2xlQ29tbWFu
ZEV2YWx1YXRlZEluU2VsZWN0ZWRDYWxsRnJhbWUiLAotICAgIEJyZWFrcG9pbnRzQWN0aXZlU3Rh
dGVDaGFuZ2VkOiAiQnJlYWtwb2ludHNBY3RpdmVTdGF0ZUNoYW5nZWQiCi19Ci0KLVdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkJyZWFrUmVhc29uID0gewotICAgIERPTTogIkRPTSIsCi0gICAg
RXZlbnRMaXN0ZW5lcjogIkV2ZW50TGlzdGVuZXIiLAotICAgIFhIUjogIlhIUiIsCi0gICAgRXhj
ZXB0aW9uOiAiZXhjZXB0aW9uIiwKLSAgICBBc3NlcnQ6ICJhc3NlcnQiLAotICAgIENTUFZpb2xh
dGlvbjogIkNTUFZpb2xhdGlvbiIKLX0KLQotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0g
ICAgZGVidWdnZXJFbmFibGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gISF0
aGlzLl9kZWJ1Z2dlckVuYWJsZWQ7Ci0gICAgfSwKLQotICAgIGVuYWJsZURlYnVnZ2VyOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZGVidWdnZXJFbmFibGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCByZXN1bHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuX2NhblNldFNjcmlwdFNvdXJjZSA9IHJlc3Vs
dDsKLSAgICAgICAgfQotICAgICAgICBEZWJ1Z2dlckFnZW50LmNhblNldFNjcmlwdFNvdXJjZShj
YWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICAgICAgRGVidWdnZXJBZ2VudC5lbmFibGUodGhpcy5f
ZGVidWdnZXJXYXNFbmFibGVkLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBkaXNhYmxlRGVi
dWdnZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZGVidWdnZXJFbmFi
bGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIERlYnVnZ2VyQWdlbnQuZGlzYWJs
ZSh0aGlzLl9kZWJ1Z2dlcldhc0Rpc2FibGVkLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGNhblNldFNjcmlwdFNv
dXJjZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NhblNldFNjcmlw
dFNvdXJjZTsKLSAgICB9LAotCi0gICAgX2RlYnVnZ2VyV2FzRW5hYmxlZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgdGhp
cy5fcGF1c2VPbkV4Y2VwdGlvblN0YXRlQ2hhbmdlZCgpOwotICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVidWdn
ZXJXYXNFbmFibGVkKTsKLSAgICB9LAotCi0gICAgX3BhdXNlT25FeGNlcHRpb25TdGF0ZUNoYW5n
ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIERlYnVnZ2VyQWdlbnQuc2V0UGF1c2VPbkV4
Y2VwdGlvbnMoV2ViSW5zcGVjdG9yLnNldHRpbmdzLnBhdXNlT25FeGNlcHRpb25TdGF0ZVN0cmlu
Zy5nZXQoKSk7Ci0gICAgfSwKLQotICAgIF9kZWJ1Z2dlcldhc0Rpc2FibGVkOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl9kZWJ1Z2dlckVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwu
RXZlbnRzLkRlYnVnZ2VyV2FzRGlzYWJsZWQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufSByYXdMb2NhdGlvbgot
ICAgICAqLwotICAgIGNvbnRpbnVlVG9Mb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCi0g
ICAgewotICAgICAgICBEZWJ1Z2dlckFnZW50LmNvbnRpbnVlVG9Mb2NhdGlvbihyYXdMb2NhdGlv
bik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTW9kZWwuTG9jYXRpb259IHJhd0xvY2F0aW9uCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNv
bmRpdGlvbgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP0RlYnVnZ2VyQWdlbnQuQnJlYWtwb2lu
dElkLCBBcnJheS48V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRpb24+KTp2b2lkPX0g
Y2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZXRCcmVha3BvaW50QnlTY3JpcHRMb2NhdGlvbjogZnVu
Y3Rpb24ocmF3TG9jYXRpb24sIGNvbmRpdGlvbiwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2
YXIgc2NyaXB0ID0gdGhpcy5zY3JpcHRGb3JJZChyYXdMb2NhdGlvbi5zY3JpcHRJZCk7Ci0gICAg
ICAgIGlmIChzY3JpcHQuc291cmNlVVJMKQotICAgICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50
QnlVUkwoc2NyaXB0LnNvdXJjZVVSTCwgcmF3TG9jYXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRp
b24uY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGNhbGxiYWNrKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50QnlTb3VyY2VJZChyYXdMb2NhdGlvbiwgY29uZGl0
aW9uLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSB1cmwKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7
bnVtYmVyPX0gY29sdW1uTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSBjb25kaXRpb24K
LSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9EZWJ1Z2dlckFnZW50LkJyZWFrcG9pbnRJZCwgQXJy
YXkuPFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9uPik9fSBjYWxsYmFjawotICAg
ICAqLwotICAgIHNldEJyZWFrcG9pbnRCeVVSTDogZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgY2FsbGJhY2spCi0gICAgewotICAgICAgICAvLyBBZGp1
c3QgY29sdW1uIGlmIG5lZWRlZC4KLSAgICAgICAgdmFyIG1pbkNvbHVtbk51bWJlciA9IDA7Ci0g
ICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0c0J5U291cmNlVVJMW3VybF0gfHwgW107
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2NyaXB0cy5sZW5ndGg7IGkgPCBsOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOwotICAgICAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPT09IHNjcmlwdC5saW5lT2Zmc2V0KQotICAgICAgICAgICAgICAgIG1pbkNv
bHVtbk51bWJlciA9IG1pbkNvbHVtbk51bWJlciA/IE1hdGgubWluKG1pbkNvbHVtbk51bWJlciwg
c2NyaXB0LmNvbHVtbk9mZnNldCkgOiBzY3JpcHQuY29sdW1uT2Zmc2V0OwotICAgICAgICB9Ci0g
ICAgICAgIGNvbHVtbk51bWJlciA9IE1hdGgubWF4KGNvbHVtbk51bWJlciwgbWluQ29sdW1uTnVt
YmVyKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMge1dlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsfQotICAgICAgICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAg
ICAgICAgICogQHBhcmFtIHtEZWJ1Z2dlckFnZW50LkJyZWFrcG9pbnRJZH0gYnJlYWtwb2ludElk
Ci0gICAgICAgICAqIEBwYXJhbSB7QXJyYXkuPERlYnVnZ2VyQWdlbnQuTG9jYXRpb24+fSBsb2Nh
dGlvbnMKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQoZXJy
b3IsIGJyZWFrcG9pbnRJZCwgbG9jYXRpb25zKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
Y2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgcmF3TG9jYXRpb25zID0gLyoqIEB0eXBl
IHtBcnJheS48V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRpb24+fSAqLyAobG9jYXRp
b25zKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvciA/IG51bGwgOiBicmVha3BvaW50
SWQsIHJhd0xvY2F0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgb3B0aW9ucyA9IHtjb25kaXRpb246IGNvbmRpdGlvbn07Ci0gICAgICAgIERlYnVnZ2VyQWdl
bnQuc2V0QnJlYWtwb2ludEJ5VXJsKGxpbmVOdW1iZXIsIHVybCwgdW5kZWZpbmVkLCBjb2x1bW5O
dW1iZXIsIG9wdGlvbnMsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci51c2VyTWV0cmljcy5TY3JpcHRzQnJlYWtwb2ludFNldC5yZWNvcmQoKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2Rl
bC5Mb2NhdGlvbn0gcmF3TG9jYXRpb24KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29uZGl0aW9u
Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/RGVidWdnZXJBZ2VudC5CcmVha3BvaW50SWQsIEFy
cmF5LjxXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5Mb2NhdGlvbj4pPX0gY2FsbGJhY2sKLSAg
ICAgKi8KLSAgICBzZXRCcmVha3BvaW50QnlTb3VyY2VJZDogZnVuY3Rpb24ocmF3TG9jYXRpb24s
IGNvbmRpdGlvbiwgY2FsbGJhY2spCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHRo
aXMge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsfQotICAgICAgICAgKiBAcGFyYW0gez9Qcm90
b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtEZWJ1Z2dlckFnZW50LkJyZWFr
cG9pbnRJZH0gYnJlYWtwb2ludElkCi0gICAgICAgICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5M
b2NhdGlvbn0gYWN0dWFsTG9jYXRpb24KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRp
ZFNldEJyZWFrcG9pbnQoZXJyb3IsIGJyZWFrcG9pbnRJZCwgYWN0dWFsTG9jYXRpb24pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIHZhciBy
YXdMb2NhdGlvbiA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRp
b259ICovIChhY3R1YWxMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3Ig
PyBudWxsIDogYnJlYWtwb2ludElkLCBbcmF3TG9jYXRpb25dKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICB2YXIgb3B0aW9ucyA9IHtjb25kaXRpb246IGNvbmRpdGlvbn07Ci0g
ICAgICAgIERlYnVnZ2VyQWdlbnQuc2V0QnJlYWtwb2ludChyYXdMb2NhdGlvbiwgb3B0aW9ucywg
ZGlkU2V0QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnVzZXJN
ZXRyaWNzLlNjcmlwdHNCcmVha3BvaW50U2V0LnJlY29yZCgpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdlbnQuQnJlYWtwb2ludElkfSBicmVha3BvaW50SWQK
LSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9Qcm90b2NvbC5FcnJvcik9fSBjYWxsYmFjawotICAg
ICAqLwotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgY2FsbGJh
Y2spCi0gICAgewotICAgICAgICBEZWJ1Z2dlckFnZW50LnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludElkLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RGVi
dWdnZXJBZ2VudC5CcmVha3BvaW50SWR9IGJyZWFrcG9pbnRJZAotICAgICAqIEBwYXJhbSB7RGVi
dWdnZXJBZ2VudC5Mb2NhdGlvbn0gbG9jYXRpb24KLSAgICAgKi8KLSAgICBfYnJlYWtwb2ludFJl
c29sdmVkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIGxvY2F0aW9uKQotICAgIHsKLSAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwu
RXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwge2JyZWFrcG9pbnRJZDogYnJlYWtwb2ludElkLCBs
b2NhdGlvbjogbG9jYXRpb259KTsKLSAgICB9LAotCi0gICAgX2dsb2JhbE9iamVjdENsZWFyZWQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NldERlYnVnZ2VyUGF1c2VkRGV0YWls
cyhudWxsKTsKLSAgICAgICAgdGhpcy5fcmVzZXQoKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkdsb2JhbE9i
amVjdENsZWFyZWQpOwotICAgIH0sCi0KLSAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3NjcmlwdHMgPSB7fTsKLSAgICAgICAgdGhpcy5fc2NyaXB0c0J5U291cmNl
VVJMID0ge307Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge09iamVjdC48c3Ry
aW5nLCBXZWJJbnNwZWN0b3IuU2NyaXB0Pn0KLSAgICAgKi8KLSAgICBnZXQgc2NyaXB0cygpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0czsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtEZWJ1Z2dlckFnZW50LlNjcmlwdElkfSBzY3JpcHRJZAotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5TY3JpcHR9Ci0gICAgICovCi0gICAgc2NyaXB0Rm9ySWQ6IGZ1
bmN0aW9uKHNjcmlwdElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdHNbc2Ny
aXB0SWRdIHx8IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RGVidWdn
ZXJBZ2VudC5TY3JpcHRJZH0gc2NyaXB0SWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3U291
cmNlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9jb2wuRXJyb3IpfSBjYWxsYmFjawot
ICAgICAqLwotICAgIHNldFNjcmlwdFNvdXJjZTogZnVuY3Rpb24oc2NyaXB0SWQsIG5ld1NvdXJj
ZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLl9zY3JpcHRzW3NjcmlwdElkXS5lZGl0
U291cmNlKG5ld1NvdXJjZSwgdGhpcy5fZGlkRWRpdFNjcmlwdFNvdXJjZS5iaW5kKHRoaXMsIHNj
cmlwdElkLCBuZXdTb3VyY2UsIGNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7RGVidWdnZXJBZ2VudC5TY3JpcHRJZH0gc2NyaXB0SWQKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gbmV3U291cmNlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/UHJvdG9jb2wuRXJy
b3IpfSBjYWxsYmFjawotICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAg
ICAqIEBwYXJhbSB7QXJyYXkuPERlYnVnZ2VyQWdlbnQuQ2FsbEZyYW1lPj19IGNhbGxGcmFtZXMK
LSAgICAgKi8KLSAgICBfZGlkRWRpdFNjcmlwdFNvdXJjZTogZnVuY3Rpb24oc2NyaXB0SWQsIG5l
d1NvdXJjZSwgY2FsbGJhY2ssIGVycm9yLCBjYWxsRnJhbWVzKQotICAgIHsKLSAgICAgICAgY2Fs
bGJhY2soZXJyb3IpOwotICAgICAgICBpZiAoIWVycm9yICYmIGNhbGxGcmFtZXMgJiYgY2FsbEZy
YW1lcy5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLl9wYXVzZWRTY3JpcHQoY2FsbEZyYW1lcywg
dGhpcy5fZGVidWdnZXJQYXVzZWREZXRhaWxzLnJlYXNvbiwgdGhpcy5fZGVidWdnZXJQYXVzZWRE
ZXRhaWxzLmF1eERhdGEpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJh
eS48RGVidWdnZXJBZ2VudC5DYWxsRnJhbWU+fQotICAgICAqLwotICAgIGdldCBjYWxsRnJhbWVz
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kZWJ1Z2dlclBhdXNlZERldGFpbHMgPyB0
aGlzLl9kZWJ1Z2dlclBhdXNlZERldGFpbHMuY2FsbEZyYW1lcyA6IG51bGw7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuRGVidWdnZXJQYXVzZWREZXRh
aWxzfQotICAgICAqLwotICAgIGRlYnVnZ2VyUGF1c2VkRGV0YWlsczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnZ2VyUGF1c2VkRGV0YWlsczsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLkRlYnVnZ2VyUGF1c2VkRGV0
YWlsc30gZGVidWdnZXJQYXVzZWREZXRhaWxzCi0gICAgICovCi0gICAgX3NldERlYnVnZ2VyUGF1
c2VkRGV0YWlsczogZnVuY3Rpb24oZGVidWdnZXJQYXVzZWREZXRhaWxzKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX2RlYnVnZ2VyUGF1c2VkRGV0YWlscykKLSAgICAgICAgICAgIHRoaXMuX2Rl
YnVnZ2VyUGF1c2VkRGV0YWlscy5kaXNwb3NlKCk7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyUGF1
c2VkRGV0YWlscyA9IGRlYnVnZ2VyUGF1c2VkRGV0YWlsczsKLSAgICAgICAgaWYgKHRoaXMuX2Rl
YnVnZ2VyUGF1c2VkRGV0YWlscykKLSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCwg
dGhpcy5fZGVidWdnZXJQYXVzZWREZXRhaWxzKTsKLSAgICAgICAgaWYgKGRlYnVnZ2VyUGF1c2Vk
RGV0YWlscykgewotICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENhbGxGcmFtZShkZWJ1Z2dl
clBhdXNlZERldGFpbHMuY2FsbEZyYW1lc1swXSk7Ci0gICAgICAgICAgICBEZWJ1Z2dlckFnZW50
LnNldE92ZXJsYXlNZXNzYWdlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGF1c2VkIGluIGRlYnVn
Z2VyIikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENh
bGxGcmFtZShudWxsKTsKLSAgICAgICAgICAgIERlYnVnZ2VyQWdlbnQuc2V0T3ZlcmxheU1lc3Nh
Z2UoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5
LjxEZWJ1Z2dlckFnZW50LkNhbGxGcmFtZT59IGNhbGxGcmFtZXMKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gcmVhc29uCi0gICAgICogQHBhcmFtIHsqfSBhdXhEYXRhCi0gICAgICovCi0gICAgX3Bh
dXNlZFNjcmlwdDogZnVuY3Rpb24oY2FsbEZyYW1lcywgcmVhc29uLCBhdXhEYXRhKQotICAgIHsK
LSAgICAgICAgdGhpcy5fc2V0RGVidWdnZXJQYXVzZWREZXRhaWxzKG5ldyBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJQYXVzZWREZXRhaWxzKHRoaXMsIGNhbGxGcmFtZXMsIHJlYXNvbiwgYXV4RGF0YSkp
OwotICAgIH0sCi0KLSAgICBfcmVzdW1lZFNjcmlwdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fc2V0RGVidWdnZXJQYXVzZWREZXRhaWxzKG51bGwpOwotICAgICAgICBpZiAodGhp
cy5fZXhlY3V0aW9uTGluZUxpdmVMb2NhdGlvbikKLSAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlv
bkxpbmVMaXZlTG9jYXRpb24uZGlzcG9zZSgpOwotICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5l
TGl2ZUxvY2F0aW9uID0gbnVsbDsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUmVzdW1lZCk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5TY3JpcHRJZH0g
c2NyaXB0SWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlVVJMCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IHN0YXJ0TGluZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydENvbHVtbgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRMaW5lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGVu
ZENvbHVtbgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNDb250ZW50U2NyaXB0Ci0gICAgICog
QHBhcmFtIHtzdHJpbmc9fSBzb3VyY2VNYXBVUkwKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBo
YXNTb3VyY2VVUkwKLSAgICAgKi8KLSAgICBfcGFyc2VkU2NyaXB0U291cmNlOiBmdW5jdGlvbihz
Y3JpcHRJZCwgc291cmNlVVJMLCBzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRD
b2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291cmNlTWFwVVJMLCBoYXNTb3VyY2VVUkwpCi0gICAg
ewotICAgICAgICB2YXIgc2NyaXB0ID0gbmV3IFdlYkluc3BlY3Rvci5TY3JpcHQoc2NyaXB0SWQs
IHNvdXJjZVVSTCwgc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwgZW5kQ29sdW1uLCBp
c0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTCwgaGFzU291cmNlVVJMKTsKLSAgICAgICAgaWYg
KCFzY3JpcHQuaXNBbm9ueW1vdXNTY3JpcHQoKSAmJiAhc2NyaXB0LmlzSW5saW5lU2NyaXB0KCkp
IHsKLSAgICAgICAgICAgIHZhciBleGlzdGluZ1NjcmlwdHMgPSB0aGlzLl9zY3JpcHRzQnlTb3Vy
Y2VVUkxbc2NyaXB0LnNvdXJjZVVSTF0gfHwgW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGV4aXN0aW5nU2NyaXB0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
IChleGlzdGluZ1NjcmlwdHNbaV0uaXNJbmxpbmVTY3JpcHQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBzY3JpcHQuc2V0SXNEeW5hbWljU2NyaXB0KHRydWUpOyAKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHRoaXMuX3JlZ2lzdGVyU2NyaXB0KHNjcmlwdCk7Ci0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5QYXJz
ZWRTY3JpcHRTb3VyY2UsIHNjcmlwdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gc2NyaXB0Ci0gICAgICovCi0gICAgX3JlZ2lzdGVyU2Ny
aXB0OiBmdW5jdGlvbihzY3JpcHQpCi0gICAgewotICAgICAgICB0aGlzLl9zY3JpcHRzW3Njcmlw
dC5zY3JpcHRJZF0gPSBzY3JpcHQ7Ci0gICAgICAgIGlmIChzY3JpcHQuc291cmNlVVJMKSB7Ci0g
ICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHNCeVNvdXJjZVVSTFtzY3JpcHQu
c291cmNlVVJMXTsKLSAgICAgICAgICAgIGlmICghc2NyaXB0cykgewotICAgICAgICAgICAgICAg
IHNjcmlwdHMgPSBbXTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zY3JpcHRzQnlTb3VyY2VVUkxb
c2NyaXB0LnNvdXJjZVVSTF0gPSBzY3JpcHRzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
c2NyaXB0cy5wdXNoKHNjcmlwdCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2NyaXB0fSBzY3JpcHQKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIKLSAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5Mb2NhdGlvbn0KLSAgICAg
Ki8KLSAgICBjcmVhdGVSYXdMb2NhdGlvbjogZnVuY3Rpb24oc2NyaXB0LCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpCi0gICAgewotICAgICAgICBpZiAoc2NyaXB0LnNvdXJjZVVSTCkKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVJhd0xvY2F0aW9uQnlVUkwoc2NyaXB0LnNvdXJjZVVS
TCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9uKHNjcmlwdC5zY3JpcHRJZCwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHNvdXJjZVVSTAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufQotICAgICAqLwotICAgIGNyZWF0ZVJhd0xvY2F0aW9uQnlV
Ukw6IGZ1bmN0aW9uKHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsK
LSAgICAgICAgdmFyIGNsb3Nlc3RTY3JpcHQgPSBudWxsOwotICAgICAgICB2YXIgc2NyaXB0cyA9
IHRoaXMuX3NjcmlwdHNCeVNvdXJjZVVSTFtzb3VyY2VVUkxdIHx8IFtdOwotICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IHNjcmlwdHMubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAg
ICB2YXIgc2NyaXB0ID0gc2NyaXB0c1tpXTsKLSAgICAgICAgICAgIGlmICghY2xvc2VzdFNjcmlw
dCkKLSAgICAgICAgICAgICAgICBjbG9zZXN0U2NyaXB0ID0gc2NyaXB0OwotICAgICAgICAgICAg
aWYgKHNjcmlwdC5saW5lT2Zmc2V0ID4gbGluZU51bWJlciB8fCAoc2NyaXB0LmxpbmVPZmZzZXQg
PT09IGxpbmVOdW1iZXIgJiYgc2NyaXB0LmNvbHVtbk9mZnNldCA+IGNvbHVtbk51bWJlcikpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0LmVuZExpbmUg
PCBsaW5lTnVtYmVyIHx8IChzY3JpcHQuZW5kTGluZSA9PT0gbGluZU51bWJlciAmJiBzY3JpcHQu
ZW5kQ29sdW1uIDw9IGNvbHVtbk51bWJlcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBjbG9zZXN0U2NyaXB0ID0gc2NyaXB0OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNsb3Nlc3RTY3JpcHQgPyBuZXcgV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTW9kZWwuTG9jYXRpb24oY2xvc2VzdFNjcmlwdC5zY3JpcHRJZCwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKSA6IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNQYXVzZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAhIXRoaXMuZGVidWdnZXJQYXVzZWREZXRhaWxzKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkNhbGxG
cmFtZX0gY2FsbEZyYW1lCi0gICAgICovCi0gICAgc2V0U2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0
aW9uKGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25MaW5lTGl2
ZUxvY2F0aW9uKQotICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uTGluZUxpdmVMb2NhdGlvbi5k
aXNwb3NlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lTGl2ZUxvY2F0aW9u
OwotCi0gICAgICAgIHRoaXMuX3NlbGVjdGVkQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwotICAgICAg
ICBpZiAoIXRoaXMuX3NlbGVjdGVkQ2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkV2ZW50cy5DYWxsRnJhbWVTZWxlY3RlZCwgY2FsbEZyYW1lKTsKLQotICAgICAgICBm
dW5jdGlvbiB1cGRhdGVFeGVjdXRpb25MaW5lKHVpTG9jYXRpb24pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkV2ZW50cy5FeGVjdXRpb25MaW5lQ2hhbmdlZCwgdWlMb2NhdGlvbik7Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5fZXhlY3V0aW9uTGluZUxpdmVMb2NhdGlvbiA9IGNhbGxGcmFtZS5z
Y3JpcHQuY3JlYXRlTGl2ZUxvY2F0aW9uKGNhbGxGcmFtZS5sb2NhdGlvbiwgdXBkYXRlRXhlY3V0
aW9uTGluZS5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
P1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkNhbGxGcmFtZX0KLSAgICAgKi8KLSAgICBzZWxl
Y3RlZENhbGxGcmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Nl
bGVjdGVkQ2FsbEZyYW1lOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gY29kZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RHcm91cAotICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gaW5jbHVkZUNvbW1hbmRMaW5lQVBJCi0gICAgICogQHBhcmFtIHtib29sZWFu
fSBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUKLSAgICAgKiBAcGFyYW0ge2Jv
b2xlYW59IHJldHVybkJ5VmFsdWUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdlbmVyYXRlUHJl
dmlldwotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5SZW1vdGVPYmplY3Qs
IGJvb2xlYW4sIFJ1bnRpbWVBZ2VudC5SZW1vdGVPYmplY3Q9KX0gY2FsbGJhY2sKLSAgICAgKi8K
LSAgICBldmFsdWF0ZU9uU2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0aW9uKGNvZGUsIG9iamVjdEdy
b3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBjYWxsYmFjaykKLSAgICB7
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0gez9SdW50aW1lQWdlbnQuUmVtb3RlT2Jq
ZWN0fSByZXN1bHQKLSAgICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gd2FzVGhyb3duCi0gICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiBkaWRFdmFsdWF0ZShyZXN1bHQsIHdhc1Rocm93bikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJldHVybkJ5VmFsdWUpCi0gICAgICAgICAgICAg
ICAgY2FsbGJhY2sobnVsbCwgISF3YXNUaHJvd24sIHdhc1Rocm93biA/IG51bGwgOiByZXN1bHQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rv
ci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocmVzdWx0KSwgISF3YXNUaHJvd24pOwotCi0gICAg
ICAgICAgICBpZiAob2JqZWN0R3JvdXAgPT09ICJjb25zb2xlIikKLSAgICAgICAgICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5F
dmVudHMuQ29uc29sZUNvbW1hbmRFdmFsdWF0ZWRJblNlbGVjdGVkQ2FsbEZyYW1lKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsRnJhbWUoKS5ldmFsdWF0ZShjb2RlLCBv
YmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgZGlkRXZhbHVh
dGUuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oT2JqZWN0KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBnZXRTZWxlY3RlZENhbGxGcmFtZVZh
cmlhYmxlczogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0g
eyB0aGlzOiB0cnVlIH07Ci0KLSAgICAgICAgdmFyIHNlbGVjdGVkQ2FsbEZyYW1lID0gdGhpcy5f
c2VsZWN0ZWRDYWxsRnJhbWU7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRDYWxsRnJhbWUpCi0gICAg
ICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotCi0gICAgICAgIHZhciBwZW5kaW5nUmVxdWVzdHMg
PSAwOwotCi0gICAgICAgIGZ1bmN0aW9uIHByb3BlcnRpZXNDb2xsZWN0ZWQocHJvcGVydGllcykK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IHByb3BlcnRpZXMgJiYgaSA8
IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnRp
ZXNbaV0ubmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKC0tcGVuZGluZ1JlcXVlc3RzID09
IDApCi0gICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRDYWxsRnJhbWUuc2NvcGVDaGFpbi5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHNjb3BlID0gc2VsZWN0ZWRDYWxsRnJhbWUuc2Nv
cGVDaGFpbltpXTsKLSAgICAgICAgICAgIHZhciBvYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0LmZyb21QYXlsb2FkKHNjb3BlLm9iamVjdCk7Ci0gICAgICAgICAgICBwZW5kaW5nUmVx
dWVzdHMrKzsKLSAgICAgICAgICAgIG9iamVjdC5nZXRBbGxQcm9wZXJ0aWVzKHByb3BlcnRpZXND
b2xsZWN0ZWQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gYWN0aXZlCi0gICAgICovCi0gICAgc2V0QnJlYWtwb2ludHNBY3RpdmU6IGZ1bmN0
aW9uKGFjdGl2ZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c0FjdGl2ZSA9
PT0gYWN0aXZlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9icmVha3BvaW50
c0FjdGl2ZSA9IGFjdGl2ZTsKLSAgICAgICAgRGVidWdnZXJBZ2VudC5zZXRCcmVha3BvaW50c0Fj
dGl2ZShhY3RpdmUpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludHNBY3RpdmVTdGF0ZUNoYW5n
ZWQsIGFjdGl2ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
Ci0gICAgICovCi0gICAgYnJlYWtwb2ludHNBY3RpdmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50c0FjdGl2ZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5Mb2NhdGlvbn0gcmF3TG9j
YXRpb24KLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKToo
Ym9vbGVhbnx1bmRlZmluZWQpfSB1cGRhdGVEZWxlZ2F0ZQotICAgICAqIEByZXR1cm4ge1dlYklu
c3BlY3Rvci5TY3JpcHQuTG9jYXRpb259Ci0gICAgICovCi0gICAgY3JlYXRlTGl2ZUxvY2F0aW9u
OiBmdW5jdGlvbihyYXdMb2NhdGlvbiwgdXBkYXRlRGVsZWdhdGUpCi0gICAgewotICAgICAgICB2
YXIgc2NyaXB0ID0gdGhpcy5fc2NyaXB0c1tyYXdMb2NhdGlvbi5zY3JpcHRJZF07Ci0gICAgICAg
IHJldHVybiBzY3JpcHQuY3JlYXRlTGl2ZUxvY2F0aW9uKHJhd0xvY2F0aW9uLCB1cGRhdGVEZWxl
Z2F0ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwuTG9jYXRpb259IHJhd0xvY2F0aW9uCi0gICAgICogQHJldHVybiB7P1dlYklu
c3BlY3Rvci5VSUxvY2F0aW9ufQotICAgICAqLwotICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9u
OiBmdW5jdGlvbihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciBzY3JpcHQgPSB0aGlz
Ll9zY3JpcHRzW3Jhd0xvY2F0aW9uLnNjcmlwdElkXTsKLSAgICAgICAgaWYgKCFzY3JpcHQpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIHNjcmlwdC5yYXdMb2NhdGlv
blRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbi5saW5lTnVtYmVyLCByYXdMb2NhdGlvbi5jb2x1bW5O
dW1iZXIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBIYW5kbGVzIG5vdGlmaWNhdGlvbiBm
cm9tIEphdmFTY3JpcHQgVk0gYWJvdXQgdXBkYXRlZCBzdGFjayAobGl2ZWVkaXQgb3IgZnJhbWUg
cmVzdGFydCBhY3Rpb24pLgotICAgICAqIEB0aGlzIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2Rl
bH0KLSAgICAgKiBAcGFyYW0ge0FycmF5LjxEZWJ1Z2dlckFnZW50LkNhbGxGcmFtZT49fSBuZXdD
YWxsRnJhbWVzCi0gICAgICogQHBhcmFtIHtPYmplY3Q9fSBkZXRhaWxzCi0gICAgICovCi0gICAg
Y2FsbFN0YWNrTW9kaWZpZWQ6IGZ1bmN0aW9uKG5ld0NhbGxGcmFtZXMsIGRldGFpbHMpCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogZGVjbGFyZSB0aGlzIHByb3BlcnR5IGluIHByb3RvY29sIGFu
ZCBpbiBKYXZhU2NyaXB0LgotICAgICAgICBpZiAoZGV0YWlscyAmJiBkZXRhaWxzWyJzdGFja191
cGRhdGVfbmVlZHNfc3RlcF9pbiJdKQotICAgICAgICAgICAgRGVidWdnZXJBZ2VudC5zdGVwSW50
bygpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChuZXdDYWxsRnJhbWVzICYmIG5l
d0NhbGxGcmFtZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZFNjcmlwdChu
ZXdDYWxsRnJhbWVzLCB0aGlzLl9kZWJ1Z2dlclBhdXNlZERldGFpbHMucmVhc29uLCB0aGlzLl9k
ZWJ1Z2dlclBhdXNlZERldGFpbHMuYXV4RGF0YSk7Ci0KLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLVdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlckV2ZW50VHlwZXMgPSB7Ci0gICAgSmF2YVNjcmlwdFBhdXNlOiAwLAotICAg
IEphdmFTY3JpcHRCcmVha3BvaW50OiAxLAotICAgIE5hdGl2ZUJyZWFrcG9pbnQ6IDIKLX07Ci0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7RGVidWdnZXJBZ2VudC5EaXNw
YXRjaGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbH0gZGVidWdnZXJN
b2RlbAotICovCi1XZWJJbnNwZWN0b3IuRGVidWdnZXJEaXNwYXRjaGVyID0gZnVuY3Rpb24oZGVi
dWdnZXJNb2RlbCkKLXsKLSAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsID0gZGVidWdnZXJNb2RlbDsK
LX0KLQotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyRGlzcGF0Y2hlci5wcm90b3R5cGUgPSB7Ci0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48RGVidWdnZXJBZ2VudC5DYWxsRnJhbWU+fSBjYWxs
RnJhbWVzCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgotICAgICAqIEBwYXJhbSB7T2Jq
ZWN0PX0gYXV4RGF0YQotICAgICAqLwotICAgIHBhdXNlZDogZnVuY3Rpb24oY2FsbEZyYW1lcywg
cmVhc29uLCBhdXhEYXRhKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fcGF1
c2VkU2NyaXB0KGNhbGxGcmFtZXMsIHJlYXNvbiwgYXV4RGF0YSk7Ci0gICAgfSwKLQotICAgIHJl
c3VtZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwuX3Jl
c3VtZWRTY3JpcHQoKTsKLSAgICB9LAotCi0gICAgZ2xvYmFsT2JqZWN0Q2xlYXJlZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fZ2xvYmFsT2JqZWN0Q2xl
YXJlZCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdlbnQu
U2NyaXB0SWR9IHNjcmlwdElkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVVSTAotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3Rh
cnRDb2x1bW4KLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBlbmRDb2x1bW4KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0NvbnRlbnRTY3Jp
cHQKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19IHNvdXJjZU1hcFVSTAotICAgICAqIEBwYXJhbSB7
Ym9vbGVhbj19IGhhc1NvdXJjZVVSTAotICAgICAqLwotICAgIHNjcmlwdFBhcnNlZDogZnVuY3Rp
b24oc2NyaXB0SWQsIHNvdXJjZVVSTCwgc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwg
ZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTCwgaGFzU291cmNlVVJMKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fcGFyc2VkU2NyaXB0U291cmNlKHNj
cmlwdElkLCBzb3VyY2VVUkwsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENv
bHVtbiwgISFpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTCwgaGFzU291cmNlVVJMKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVVSTAotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRpbmdM
aW5lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGVycm9yTGluZQotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBlcnJvck1lc3NhZ2UKLSAgICAgKi8KLSAgICBzY3JpcHRGYWlsZWRUb1BhcnNlOiBmdW5j
dGlvbihzb3VyY2VVUkwsIHNvdXJjZSwgc3RhcnRpbmdMaW5lLCBlcnJvckxpbmUsIGVycm9yTWVz
c2FnZSkKLSAgICB7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICogQHBhcmFtIHtEZWJ1Z2dlckFn
ZW50LkJyZWFrcG9pbnRJZH0gYnJlYWtwb2ludElkCi0gICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdl
bnQuTG9jYXRpb259IGxvY2F0aW9uCi0gICAgICovCi0gICAgYnJlYWtwb2ludFJlc29sdmVkOiBm
dW5jdGlvbihicmVha3BvaW50SWQsIGxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVi
dWdnZXJNb2RlbC5fYnJlYWtwb2ludFJlc29sdmVkKGJyZWFrcG9pbnRJZCwgbG9jYXRpb24pOwot
ICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlNjcmlwdH0gc2NyaXB0Ci0gKiBAcGFyYW0ge0RlYnVnZ2VyQWdlbnQuQ2FsbEZyYW1lfSBwYXls
b2FkCi0gKi8KLVdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkNhbGxGcmFtZSA9IGZ1bmN0aW9u
KHNjcmlwdCwgcGF5bG9hZCkKLXsKLSAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7Ci0gICAgdGhp
cy5fcGF5bG9hZCA9IHBheWxvYWQ7Ci0gICAgdGhpcy5fbG9jYXRpb25zID0gW107Ci19Ci0KLVdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkNhbGxGcmFtZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNjcmlwdH0KLSAgICAgKi8KLSAgICBnZXQg
c2NyaXB0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgdHlwZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcGF5bG9hZC50eXBlOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0IGlkKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLmNhbGxGcmFtZUlkOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48RGVidWdnZXJBZ2VudC5TY29wZT59Ci0g
ICAgICovCi0gICAgZ2V0IHNjb3BlQ2hhaW4oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X3BheWxvYWQuc2NvcGVDaGFpbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
UnVudGltZUFnZW50LlJlbW90ZU9iamVjdH0KLSAgICAgKi8KLSAgICBnZXQgdGhpcygpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fcGF5bG9hZC50aGlzOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0IGZ1bmN0aW9uTmFtZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcGF5bG9hZC5mdW5jdGlvbk5hbWU7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkxvY2F0aW9ufQotICAgICAqLwotICAgIGdldCBsb2NhdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgcmF3TG9jYXRpb24gPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxv
Y2F0aW9ufSAqLyAodGhpcy5fcGF5bG9hZC5sb2NhdGlvbik7Ci0gICAgICAgIHJldHVybiByYXdM
b2NhdGlvbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0R3JvdXAKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IGluY2x1ZGVDb21tYW5kTGluZUFQSQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9Ob3RQ
YXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBy
ZXR1cm5CeVZhbHVlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBnZW5lcmF0ZVByZXZpZXcKLSAg
ICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9SdW50aW1lQWdlbnQuUmVtb3RlT2JqZWN0LCBib29sZWFu
PSk9fSBjYWxsYmFjawotICAgICAqLwotICAgIGV2YWx1YXRlOiBmdW5jdGlvbihjb2RlLCBvYmpl
Y3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgY2FsbGJhY2spCi0g
ICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMge1dlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkNhbGxGcmFtZX0KLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVy
cm9yCi0gICAgICAgICAqIEBwYXJhbSB7UnVudGltZUFnZW50LlJlbW90ZU9iamVjdH0gcmVzdWx0
Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHdhc1Rocm93bgotICAgICAgICAgKi8KLSAg
ICAgICAgZnVuY3Rpb24gZGlkRXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvciwgcmVzdWx0LCB3YXNU
aHJvd24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGws
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQsIHdhc1Rocm93bik7Ci0gICAgICAgIH0KLSAgICAgICAgRGVi
dWdnZXJBZ2VudC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKHRoaXMuX3BheWxvYWQuY2FsbEZyYW1lSWQs
IGNvZGUsIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90UGF1c2VPbkV4
Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBk
aWRFdmFsdWF0ZU9uQ2FsbEZyYW1lLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9Qcm90b2NvbC5FcnJvcj0pPX0gY2FsbGJhY2sKLSAgICAg
Ki8KLSAgICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8qKgot
ICAgICAgICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuQ2FsbEZyYW1lfQot
ICAgICAgICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBh
cmFtIHtBcnJheS48RGVidWdnZXJBZ2VudC5DYWxsRnJhbWU+PX0gY2FsbEZyYW1lcwotICAgICAg
ICAgKiBAcGFyYW0ge09iamVjdD19IGRldGFpbHMKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIHByb3RvY29sQ2FsbGJhY2soZXJyb3IsIGNhbGxGcmFtZXMsIGRldGFpbHMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghZXJyb3IpCi0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTW9kZWwuY2FsbFN0YWNrTW9kaWZpZWQoY2FsbEZyYW1lcywgZGV0YWlscyk7Ci0g
ICAgICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3Ip
OwotICAgICAgICB9Ci0gICAgICAgIERlYnVnZ2VyQWdlbnQucmVzdGFydEZyYW1lKHRoaXMuX3Bh
eWxvYWQuY2FsbEZyYW1lSWQsIHByb3RvY29sQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKTooYm9vbGVh
bnx1bmRlZmluZWQpfSB1cGRhdGVEZWxlZ2F0ZQotICAgICAqLwotICAgIGNyZWF0ZUxpdmVMb2Nh
dGlvbjogZnVuY3Rpb24odXBkYXRlRGVsZWdhdGUpCi0gICAgewotICAgICAgICB2YXIgbG9jYXRp
b24gPSB0aGlzLl9zY3JpcHQuY3JlYXRlTGl2ZUxvY2F0aW9uKHRoaXMubG9jYXRpb24sIHVwZGF0
ZURlbGVnYXRlKTsKLSAgICAgICAgdGhpcy5fbG9jYXRpb25zLnB1c2gobG9jYXRpb24pOwotICAg
ICAgICByZXR1cm4gbG9jYXRpb247Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKHVw
ZGF0ZURlbGVnYXRlKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9s
b2NhdGlvbnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9sb2NhdGlvbnNbaV0uZGlz
cG9zZSgpOwotICAgICAgICB0aGlzLl9sb2NhdGlvbnMgPSBbXTsKLSAgICB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsfSBt
b2RlbAotICogQHBhcmFtIHtBcnJheS48RGVidWdnZXJBZ2VudC5DYWxsRnJhbWU+fSBjYWxsRnJh
bWVzCi0gKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCi0gKiBAcGFyYW0geyp9IGF1eERhdGEKLSAq
LwotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUGF1c2VkRGV0YWlscyA9IGZ1bmN0aW9uKG1vZGVsLCBj
YWxsRnJhbWVzLCByZWFzb24sIGF1eERhdGEpCi17Ci0gICAgdGhpcy5jYWxsRnJhbWVzID0gW107
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsRnJhbWVzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIHZhciBjYWxsRnJhbWUgPSBjYWxsRnJhbWVzW2ldOwotICAgICAgICB2YXIgc2NyaXB0ID0g
bW9kZWwuc2NyaXB0Rm9ySWQoY2FsbEZyYW1lLmxvY2F0aW9uLnNjcmlwdElkKTsKLSAgICAgICAg
aWYgKHNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMuY2FsbEZyYW1lcy5wdXNoKG5ldyBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNb2RlbC5DYWxsRnJhbWUoc2NyaXB0LCBjYWxsRnJhbWUpKTsKLSAgICB9
Ci0gICAgdGhpcy5yZWFzb24gPSByZWFzb247Ci0gICAgdGhpcy5hdXhEYXRhID0gYXV4RGF0YTsK
LX0KLQotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUGF1c2VkRGV0YWlscy5wcm90b3R5cGUgPSB7Ci0g
ICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLmNhbGxGcmFtZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBjYWxsRnJh
bWUgPSB0aGlzLmNhbGxGcmFtZXNbaV07Ci0gICAgICAgICAgICBjYWxsRnJhbWUuZGlzcG9zZSgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWx9Ci0gKi8KLVdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsID0gbnVsbDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJTY3Jp
cHRNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dl
clNjcmlwdE1hcHBpbmcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODg5M2Mu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dl
clNjcmlwdE1hcHBpbmcuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldvcmtzcGFjZX0gd29ya3NwYWNl
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TaW1wbGVXb3Jrc3BhY2VQcm92aWRlcn0gbmV0d29y
a1dvcmtzcGFjZVByb3ZpZGVyCi0gKi8KLVdlYkluc3BlY3Rvci5EZWJ1Z2dlclNjcmlwdE1hcHBp
bmcgPSBmdW5jdGlvbih3b3Jrc3BhY2UsIG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcikKLXsKLSAg
ICB0aGlzLl9kZWZhdWx0TWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFNjcmlwdE1h
cHBpbmcod29ya3NwYWNlKTsKLSAgICB0aGlzLl9yZXNvdXJjZU1hcHBpbmcgPSBuZXcgV2ViSW5z
cGVjdG9yLlJlc291cmNlU2NyaXB0TWFwcGluZyh3b3Jrc3BhY2UpOwotICAgIHRoaXMuX2NvbXBp
bGVyTWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nKHdvcmtz
cGFjZSwgbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyKTsKLSAgICB0aGlzLl9zbmlwcGV0TWFwcGlu
ZyA9IFdlYkluc3BlY3Rvci5zY3JpcHRTbmlwcGV0TW9kZWwuc2NyaXB0TWFwcGluZzsKLQotICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTW9kZWwuRXZlbnRzLlBhcnNlZFNjcmlwdFNvdXJjZSwgdGhpcy5fcGFyc2VkU2Ny
aXB0U291cmNlLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5GYWlsZWRUb1BhcnNl
U2NyaXB0U291cmNlLCB0aGlzLl9wYXJzZWRTY3JpcHRTb3VyY2UsIHRoaXMpOwotfQotCi1XZWJJ
bnNwZWN0b3IuRGVidWdnZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfcGFy
c2VkU2NyaXB0U291cmNlOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzY3Jp
cHQgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5TY3JpcHR9ICovIChldmVudC5kYXRhKTsKLSAg
ICAgICAgdGhpcy5fZGVmYXVsdE1hcHBpbmcuYWRkU2NyaXB0KHNjcmlwdCk7Ci0KLSAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLnNuaXBwZXRzU3VwcG9ydC5pc0Vu
YWJsZWQoKSAmJiBzY3JpcHQuaXNTbmlwcGV0KCkpIHsKLSAgICAgICAgICAgIHRoaXMuX3NuaXBw
ZXRNYXBwaW5nLmFkZFNjcmlwdChzY3JpcHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhpcy5fcmVzb3VyY2VNYXBwaW5nLmFkZFNjcmlwdChzY3JpcHQpOwot
Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc291cmNlTWFwc0VuYWJsZWQuZ2V0
KCkpCi0gICAgICAgICAgICB0aGlzLl9jb21waWxlck1hcHBpbmcuYWRkU2NyaXB0KHNjcmlwdCk7
Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWZhdWx0U2NyaXB0TWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGVmYXVsdFNjcmlwdE1hcHBpbmcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIxYTU5YmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9EZWZhdWx0U2NyaXB0TWFwcGluZy5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuU2Ny
aXB0U291cmNlTWFwcGluZ30KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldvcmtzcGFjZX0gd29y
a3NwYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5EZWZhdWx0U2NyaXB0TWFwcGluZyA9IGZ1bmN0aW9u
KHdvcmtzcGFjZSkKLXsKLSAgICB0aGlzLl9wcm9qZWN0RGVsZWdhdGUgPSBuZXcgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyUHJvamVjdERlbGVnYXRlKCk7Ci0gICAgdGhpcy5fd29ya3NwYWNlID0gd29y
a3NwYWNlOwotICAgIHRoaXMuX3dvcmtzcGFjZS5hZGRQcm9qZWN0KHRoaXMuX3Byb2plY3REZWxl
Z2F0ZSk7Ci0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuR2xvYmFsT2JqZWN0Q2xlYXJlZCwgdGhp
cy5fZGVidWdnZXJSZXNldCwgdGhpcyk7Ci0gICAgdGhpcy5fZGVidWdnZXJSZXNldCgpOwotfQot
Ci1XZWJJbnNwZWN0b3IuRGVmYXVsdFNjcmlwdE1hcHBpbmcucHJvdG90eXBlID0gewotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhd0xvY2F0aW9ufSByYXdMb2NhdGlvbgot
ICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufQotICAgICAqLwotICAgIHJh
d0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAg
ICAgIHZhciBkZWJ1Z2dlck1vZGVsTG9jYXRpb24gPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufSAqLyAocmF3TG9jYXRpb24pOwotICAgICAgICB2YXIgc2Ny
aXB0ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2NyaXB0Rm9ySWQoZGVidWdnZXJNb2Rl
bExvY2F0aW9uLnNjcmlwdElkKTsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3Vp
U291cmNlQ29kZUZvclNjcmlwdElkW3NjcmlwdC5zY3JpcHRJZF07Ci0gICAgICAgIHZhciBsaW5l
TnVtYmVyID0gZGVidWdnZXJNb2RlbExvY2F0aW9uLmxpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBj
b2x1bW5OdW1iZXIgPSBkZWJ1Z2dlck1vZGVsTG9jYXRpb24uY29sdW1uTnVtYmVyIHx8IDA7Ci0g
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJl
cgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufQot
ICAgICAqLwotICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNv
ZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBzY3JpcHRJ
ZCA9IHRoaXMuX3NjcmlwdElkRm9yVUlTb3VyY2VDb2RlLmdldCh1aVNvdXJjZUNvZGUpOwotICAg
ICAgICB2YXIgc2NyaXB0ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2NyaXB0Rm9ySWQo
c2NyaXB0SWQpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuY3Jl
YXRlUmF3TG9jYXRpb24oc2NyaXB0LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzSWRl
bnRpdHk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAotICAg
ICAqLwotICAgIGFkZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAgICAgICAgdmFy
IHBhdGggPSB0aGlzLl9wcm9qZWN0RGVsZWdhdGUuYWRkU2NyaXB0KHNjcmlwdCk7Ci0gICAgICAg
IHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlKHRoaXMuX3By
b2plY3REZWxlZ2F0ZS5pZCgpLCBwYXRoKTsKLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9y
U2NyaXB0SWRbc2NyaXB0LnNjcmlwdElkXSA9IHVpU291cmNlQ29kZTsKLSAgICAgICAgdGhpcy5f
c2NyaXB0SWRGb3JVSVNvdXJjZUNvZGUucHV0KHVpU291cmNlQ29kZSwgc2NyaXB0LnNjcmlwdElk
KTsKLSAgICAgICAgdWlTb3VyY2VDb2RlLnNldFNvdXJjZU1hcHBpbmcodGhpcyk7Ci0gICAgICAg
IHNjcmlwdC5wdXNoU291cmNlTWFwcGluZyh0aGlzKTsKLSAgICAgICAgc2NyaXB0LmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNjcmlwdC5FdmVudHMuU2NyaXB0RWRpdGVkLCB0aGlzLl9z
Y3JpcHRFZGl0ZWQuYmluZCh0aGlzLCBzY3JpcHQuc2NyaXB0SWQpKTsKLSAgICAgICAgcmV0dXJu
IHVpU291cmNlQ29kZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHNjcmlwdElkCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAg
ICovCi0gICAgX3NjcmlwdEVkaXRlZDogZnVuY3Rpb24oc2NyaXB0SWQsIGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIGNvbnRlbnQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8oZXZlbnQuZGF0YSk7
Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElkW3NjcmlwdElkXS5hZGRSZXZp
c2lvbihjb250ZW50KTsKLSAgICB9LAotCi0gICAgX2RlYnVnZ2VyUmVzZXQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGU+fSAqLwotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVGb3JTY3JpcHRJZCA9
IHt9OwotICAgICAgICB0aGlzLl9zY3JpcHRJZEZvclVJU291cmNlQ29kZSA9IG5ldyBNYXAoKTsK
LSAgICAgICAgdGhpcy5fcHJvamVjdERlbGVnYXRlLnJlc2V0KCk7Ci0gICAgfQotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlk
ZXJCYXNlZFByb2plY3REZWxlZ2F0ZX0KLSAqLwotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJvamVj
dERlbGVnYXRlID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlk
ZXJCYXNlZFByb2plY3REZWxlZ2F0ZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5wcm9qZWN0VHlw
ZXMuRGVidWdnZXIpOwotfQotCi1XZWJJbnNwZWN0b3IuRGVidWdnZXJQcm9qZWN0RGVsZWdhdGUu
cHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8K
LSAgICBpZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJkZWJ1Z2dlcjoiOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAg
ZGlzcGxheU5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiZGVidWdnZXIi
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9
IHNjcmlwdAotICAgICAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fQotICAgICAqLwotICAgIGFk
ZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRlbnRQcm92
aWRlciA9IHNjcmlwdC5pc0lubGluZVNjcmlwdCgpID8gbmV3IFdlYkluc3BlY3Rvci5Db25jYXRl
bmF0ZWRTY3JpcHRzQ29udGVudFByb3ZpZGVyKFtzY3JpcHRdKSA6IHNjcmlwdDsKLSAgICAgICAg
dmFyIHNwbGl0dGVkVVJMID0gV2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5zcGxpdFVSTChzY3JpcHQu
c291cmNlVVJMKTsKLSAgICAgICAgdmFyIG5hbWUgPSBzcGxpdHRlZFVSTFtzcGxpdHRlZFVSTC5s
ZW5ndGggLSAxXTsKLSAgICAgICAgbmFtZSA9ICJbVk1dICIgKyBuYW1lICsgIiAoIiArIHNjcmlw
dC5zY3JpcHRJZCArICIpIjsKLSAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29udGVudFByb3ZpZGVy
KFtuYW1lXSwgc2NyaXB0LnNvdXJjZVVSTCwgY29udGVudFByb3ZpZGVyLCBmYWxzZSwgc2NyaXB0
LmlzQ29udGVudFNjcmlwdCk7Ci0gICAgfSwKLSAgICAKLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5Db250ZW50UHJvdmlkZXJCYXNlZFByb2plY3REZWxlZ2F0ZS5wcm90b3R5cGUKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRF
ZGl0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0
RWRpdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2E2NjFhLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0
b3IuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvcn0KLSAqIEBwYXJhbSB7P3N0cmluZ30gdXJsCi0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yRGVsZWdhdGV9IGRlbGVnYXRlCi0gKi8KLVdlYkluc3BlY3Rv
ci5EZWZhdWx0VGV4dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRl
OwotICAgIHRoaXMuX3VybCA9IHVybDsKLQotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygi
dGV4dEVkaXRvci5jc3MiKTsKLQotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1l
ZGl0b3IgbW9ub3NwYWNlIjsKLSAgICB0aGlzLm1hcmtBc0xheW91dEJvdW5kYXJ5KCk7Ci0KLSAg
ICAvLyBQcmV2ZW50IG1pZGRsZS1jbGljayBwYXN0aW5nIGluIHRoZSBlZGl0b3IgdW5sZXNzIGl0
IGlzIGV4cGxpY2l0bHkgZW5hYmxlZCBmb3IgY2VydGFpbiBjb21wb25lbnQuCi0gICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBwcmV2ZW50RGVmYXVsdE9uTW91c2VV
cC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgZnVuY3Rpb24gcHJldmVudERlZmF1bHRPbk1vdXNl
VXAoZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAxKQotICAgICAg
ICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICB9Ci0KLSAgICB0aGlzLl90ZXh0TW9kZWwg
PSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbCgpOwotICAgIHRoaXMuX3RleHRNb2Rl
bC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwuRXZlbnRzLlRl
eHRDaGFuZ2VkLCB0aGlzLl90ZXh0Q2hhbmdlZCwgdGhpcyk7Ci0KLSAgICB2YXIgc3luY1Njcm9s
bExpc3RlbmVyID0gdGhpcy5fc3luY1Njcm9sbC5iaW5kKHRoaXMpOwotICAgIHZhciBzeW5jRGVj
b3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIgPSB0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lLmJp
bmQodGhpcyk7Ci0gICAgdmFyIHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXIgPSB0aGlzLl9zeW5jTGlu
ZUhlaWdodC5iaW5kKHRoaXMpOwotICAgIHRoaXMuX21haW5QYW5lbCA9IG5ldyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbCh0aGlzLl9kZWxlZ2F0ZSwgdGhpcy5fdGV4dE1vZGVsLCB1
cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKTsK
LSAgICB0aGlzLl9ndXR0ZXJQYW5lbCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRl
clBhbmVsKHRoaXMuX3RleHRNb2RlbCwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyLCBz
eW5jTGluZUhlaWdodExpc3RlbmVyKTsKLQotICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX2hhbmRsZVNjcm9sbENoYW5nZWQuYmluZCh0
aGlzKSwgZmFsc2UpOwotCi0gICAgdGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9vbk1vdXNlRG93bi5iaW5kKHRoaXMpLCB0cnVlKTsK
LQotICAgIC8vIEV4cGxpY2l0bHkgZW5hYmxlIG1pZGRsZS1jbGljayBwYXN0aW5nIGluIHRoZSBl
ZGl0b3IgbWFpbiBwYW5lbC4KLSAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZXVwIiwgY29uc3VtZU1vdXNlVXAuYmluZCh0aGlzKSwgZmFsc2UpOwotICAg
IGZ1bmN0aW9uIGNvbnN1bWVNb3VzZVVwKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50
LmJ1dHRvbiA9PT0gMSkKLSAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUoZmFsc2UpOwotICAgIH0K
LQotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9tYWluUGFuZWwuZWxlbWVudCk7
Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQp
OwotCi0gICAgLy8gRm9yd2FyZCBtb3VzZSB3aGVlbCBldmVudHMgZnJvbSB0aGUgdW5zY3JvbGxh
YmxlIGd1dHRlciB0byB0aGUgbWFpbiBwYW5lbC4KLSAgICBmdW5jdGlvbiBmb3J3YXJkV2hlZWxF
dmVudChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjbG9uZSA9IGRvY3VtZW50LmNyZWF0ZUV2
ZW50KCJXaGVlbEV2ZW50Iik7Ci0gICAgICAgIGNsb25lLmluaXRXZWJLaXRXaGVlbEV2ZW50KGV2
ZW50LndoZWVsRGVsdGFYLCBldmVudC53aGVlbERlbHRhWSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnQudmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnQuc2NyZWVuWCwgZXZlbnQuc2NyZWVuWSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY3RybEtleSwgZXZlbnQuYWx0S2V5LCBldmVu
dC5zaGlmdEtleSwgZXZlbnQubWV0YUtleSk7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVt
ZW50LmRpc3BhdGNoRXZlbnQoY2xvbmUpOwotICAgIH0KLSAgICB0aGlzLl9ndXR0ZXJQYW5lbC5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLCBmb3J3YXJkV2hlZWxFdmVudC5i
aW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIHRoaXMuX2hhbmRsZUtleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRo
aXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRN
ZW51LmJpbmQodGhpcyksIHRydWUpOwotCi0gICAgdGhpcy5fd29yZE1vdmVtZW50Q29udHJvbGxl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IuV29yZE1vdmVtZW50Q29udHJv
bGxlcih0aGlzLCB0aGlzLl90ZXh0TW9kZWwpOwotICAgIHRoaXMuX3JlZ2lzdGVyU2hvcnRjdXRz
KCk7Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5U
ZXh0UmFuZ2V9IHJhbmdlCi0gKiBAcGFyYW0ge3N0cmluZ30gdGV4dAotICovCi1XZWJJbnNwZWN0
b3IuRGVmYXVsdFRleHRFZGl0b3IuRWRpdEluZm8gPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkKLXsK
LSAgICB0aGlzLnJhbmdlID0gcmFuZ2U7Ci0gICAgdGhpcy50ZXh0ID0gdGV4dDsKLX0KLQotV2Vi
SW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzQ2xlYW46IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0TW9kZWwuaXNDbGVhbigpOwotICAgIH0sCi0K
LSAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RleHRNb2Rl
bC5tYXJrQ2xlYW4oKTsKLSAgICB9LAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBs
aW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbgotICAgICAqIEByZXR1cm4g
ez97c3RhcnRDb2x1bW46IG51bWJlciwgZW5kQ29sdW1uOiBudW1iZXIsIHR5cGU6IHN0cmluZ319
Ci0gICAgICovCi0gICAgdG9rZW5BdFRleHRQb3NpdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwg
Y29sdW1uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21haW5QYW5lbC50b2tlbkF0VGV4
dFBvc2l0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbik7Ci0gICAgfSwKLQotICAgIC8qCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1u
Ci0gICAgICogQHJldHVybiB7P3t4OiBudW1iZXIsIHk6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9
fQotICAgICAqLwotICAgIGN1cnNvclBvc2l0aW9uVG9Db29yZGluYXRlczogZnVuY3Rpb24obGlu
ZU51bWJlciwgY29sdW1uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21haW5QYW5lbC5j
dXJzb3JQb3NpdGlvblRvQ29vcmRpbmF0ZXMobGluZU51bWJlciwgY29sdW1uKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHgKLSAgICAgKiBAcGFyYW0ge251bWJl
cn0geQotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQotICAgICAqLwot
ICAgIGNvb3JkaW5hdGVzVG9DdXJzb3JQb3NpdGlvbjogZnVuY3Rpb24oeCwgeSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwuY29vcmRpbmF0ZXNUb0N1cnNvclBvc2l0aW9u
KHgsIHkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5U
ZXh0UmFuZ2V9IHJhbmdlCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGNv
cHlSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdGV4
dE1vZGVsLmNvcHlSYW5nZShyYW5nZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSByZWdleAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzcwotICAgICAq
IEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBoaWdobGlnaHRSZWdleDogZnVuY3Rpb24o
cmVnZXgsIGNzc0NsYXNzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21haW5QYW5lbC5o
aWdobGlnaHRSZWdleChyZWdleCwgY3NzQ2xhc3MpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge09iamVjdH0gaGlnaGxpZ2h0RGVzY3JpcHRvcgotICAgICAqLwotICAgIHJlbW92
ZUhpZ2hsaWdodDogZnVuY3Rpb24oaGlnaGxpZ2h0RGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAg
IHRoaXMuX21haW5QYW5lbC5yZW1vdmVIaWdobGlnaHQoaGlnaGxpZ2h0RGVzY3JpcHRvcik7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0g
cmFuZ2UKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3MKLSAgICAgKiBAcmV0dXJuIHtP
YmplY3R9Ci0gICAgICovCi0gICAgaGlnaGxpZ2h0UmFuZ2U6IGZ1bmN0aW9uKHJhbmdlLCBjc3ND
bGFzcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwuaGlnaGxpZ2h0UmFu
Z2UocmFuZ2UsIGNzc0NsYXNzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IG1pbWVUeXBlCi0gICAgICovCi0gICAgc2V0IG1pbWVUeXBlKG1pbWVUeXBlKQotICAg
IHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLm1pbWVUeXBlID0gbWltZVR5cGU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhZE9ubHkKLSAgICAgKi8KLSAg
ICBzZXRSZWFkT25seTogZnVuY3Rpb24ocmVhZE9ubHkpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fbWFpblBhbmVsLnJlYWRPbmx5KCkgPT09IHJlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB0aGlzLl9tYWluUGFuZWwuc2V0UmVhZE9ubHkocmVhZE9ubHksIHRoaXMuaXNT
aG93aW5nKCkpOwotICAgICAgICBXZWJJbnNwZWN0b3IubWFya0JlaW5nRWRpdGVkKHRoaXMuZWxl
bWVudCwgIXJlYWRPbmx5KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9v
bGVhbn0KLSAgICAgKi8KLSAgICByZWFkT25seTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX21haW5QYW5lbC5yZWFkT25seSgpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVu
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21haW5QYW5lbC5kZWZh
dWx0Rm9jdXNlZEVsZW1lbnQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5l
TnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJldmVhbExpbmUobGluZU51
bWJlcik7Ci0gICAgfSwKLQotICAgIF9vbk1vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoQ2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIpOwotICAgICAgICBpZiAoIXRhcmdldCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnRzLkd1dHRlckNsaWNrLCB7IGxpbmVOdW1iZXI6
IHRhcmdldC5saW5lTnVtYmVyLCBldmVudDogZXZlbnQgfSk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtib29sZWFu
fSBkaXNhYmxlZAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uZGl0aW9uYWwKLSAgICAgKi8K
LSAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkaXNhYmxlZCwgY29uZGl0
aW9uYWwpCi0gICAgewotICAgICAgICB0aGlzLmJlZ2luVXBkYXRlcygpOwotICAgICAgICB0aGlz
Ll9ndXR0ZXJQYW5lbC5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2lu
dCIpOwotICAgICAgICBpZiAoZGlzYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9ndXR0ZXJQYW5l
bC5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5yZW1vdmVEZWNv
cmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAg
ICBpZiAoY29uZGl0aW9uYWwpCi0gICAgICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5hZGREZWNv
cmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5yZW1vdmVEZWNvcmF0aW9u
KGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwotICAgICAgICB0
aGlzLmVuZFVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihs
aW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAg
dGhpcy5fZ3V0dGVyUGFuZWwucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJy
ZWFrcG9pbnQiKTsKLSAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwucmVtb3ZlRGVjb3JhdGlvbihs
aW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKLSAgICAgICAgdGhpcy5f
Z3V0dGVyUGFuZWwucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9p
bnQtY29uZGl0aW9uYWwiKTsKLSAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAg
c2V0RXhlY3V0aW9uTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICB0aGlzLl9tYWlu
UGFuZWwuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWV4ZWN1dGlvbi1saW5lIik7
Ci0gICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndl
YmtpdC1leGVjdXRpb24tbGluZSIpOwotICAgIH0sCi0KLSAgICBjbGVhckV4ZWN1dGlvbkxpbmU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGlu
ZU51bWJlciA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZW1v
dmVEZWNvcmF0aW9uKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9u
LWxpbmUiKTsKLSAgICAgICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLnJlbW92ZURlY29yYXRpb24o
dGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwotICAg
ICAgICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBw
YXJhbSB7RWxlbWVudH0gZWxlbWVudAotICAgICAqLwotICAgIGFkZERlY29yYXRpb246IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGVsZW1lbnQpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwu
YWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBlbGVtZW50KTsKLSAgICAgICAgdGhpcy5fZ3V0dGVy
UGFuZWwuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBlbGVtZW50KTsKLSAgICAgICAgdGhpcy5f
c3luY0RlY29yYXRpb25zRm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9
IGVsZW1lbnQKLSAgICAgKi8KLSAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVt
YmVyLCBlbGVtZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlbW92ZURlY29y
YXRpb24obGluZU51bWJlciwgZWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLnJl
bW92ZURlY29yYXRpb24obGluZU51bWJlciwgZWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX3N5bmNE
ZWNvcmF0aW9uc0ZvckxpbmUobGluZU51bWJlcik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKi8KLSAgICBtYXJr
QW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQotICAgIHsKLSAgICAgICAgaWYgKHJhbmdl
KQotICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24ocmFuZ2UpOwotICAgICAgICB0aGlzLl9t
YWluUGFuZWwubWFya0FuZFJldmVhbFJhbmdlKHJhbmdlKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBoaWdobGlnaHRM
aW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiBsaW5l
TnVtYmVyICE9PSAibnVtYmVyIiB8fCBsaW5lTnVtYmVyIDwgMCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBsaW5lTnVtYmVyID0gTWF0aC5taW4obGluZU51bWJlciwgdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQgLSAxKTsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLmhpZ2hsaWdo
dExpbmUobGluZU51bWJlcik7Ci0gICAgfSwKLQotICAgIGNsZWFyTGluZUhpZ2hsaWdodDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLmNsZWFyTGluZUhpZ2hsaWdo
dCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48RWxlbWVudD59
Ci0gICAgICovCi0gICAgZWxlbWVudHNUb1Jlc3RvcmVTY3JvbGxQb3NpdGlvbnNGb3I6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fbWFpblBhbmVsLmVsZW1lbnRdOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9y
fSB0ZXh0RWRpdG9yCi0gICAgICovCi0gICAgaW5oZXJpdFNjcm9sbFBvc2l0aW9uczogZnVuY3Rp
b24odGV4dEVkaXRvcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50Ll9z
Y3JvbGxUb3AgPSB0ZXh0RWRpdG9yLl9tYWluUGFuZWwuZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAg
ICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50Ll9zY3JvbGxMZWZ0ID0gdGV4dEVkaXRvci5fbWFp
blBhbmVsLmVsZW1lbnQuc2Nyb2xsTGVmdDsKLSAgICB9LAotCi0gICAgYmVnaW5VcGRhdGVzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwuYmVnaW5VcGRhdGVzKCk7
Ci0gICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmJlZ2luVXBkYXRlcygpOwotICAgIH0sCi0KLSAg
ICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwu
ZW5kVXBkYXRlcygpOwotICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5lbmRVcGRhdGVzKCk7Ci0g
ICAgICAgIHRoaXMuX3VwZGF0ZVBhbmVsT2Zmc2V0cygpOwotICAgIH0sCi0KLSAgICBvblJlc2l6
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc2l6ZSgpOwot
ICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5yZXNpemUoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRl
UGFuZWxPZmZzZXRzKCk7Ci0gICAgfSwKLQotICAgIF90ZXh0Q2hhbmdlZDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwudGV4dENoYW5nZWQoZXZlbnQuZGF0
YS5vbGRSYW5nZSwgZXZlbnQuZGF0YS5uZXdSYW5nZSk7Ci0gICAgICAgIHRoaXMuX2d1dHRlclBh
bmVsLnRleHRDaGFuZ2VkKGV2ZW50LmRhdGEub2xkUmFuZ2UsIGV2ZW50LmRhdGEubmV3UmFuZ2Up
OwotICAgICAgICB0aGlzLl91cGRhdGVQYW5lbE9mZnNldHMoKTsKLSAgICAgICAgaWYgKGV2ZW50
LmRhdGEuZWRpdFJhbmdlKQotICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UZXh0Q2hhbmdl
ZChldmVudC5kYXRhLm9sZFJhbmdlLCBldmVudC5kYXRhLm5ld1JhbmdlKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRl
eHRSYW5nZX0KLSAgICAgKi8KLSAgICBlZGl0UmFuZ2U6IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIHRl
eHQsIHRoaXMubGFzdFNlbGVjdGlvbigpKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVBhbmVsT2Zm
c2V0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXJzV2lkdGggPSB0
aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50Lm9mZnNldFdpZHRoOwotICAgICAgICBpZiAobGluZU51
bWJlcnNXaWR0aCkKLSAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LnN0eWxlLnNl
dFByb3BlcnR5KCJsZWZ0IiwgKGxpbmVOdW1iZXJzV2lkdGggKyAyKSArICJweCIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zdHlsZS5yZW1vdmVQ
cm9wZXJ0eSgibGVmdCIpOyAvLyBVc2UgZGVmYXVsdCB2YWx1ZSBzZXQgaW4gQ1NTLgotICAgIH0s
Ci0KLSAgICBfc3luY1Njcm9sbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG1haW5F
bGVtZW50ID0gdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQ7Ci0gICAgICAgIHZhciBndXR0ZXJFbGVt
ZW50ID0gdGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudDsKLSAgICAgICAgLy8gSGFuZGxlIGhvcml6
b250YWwgc2Nyb2xsIGJhciBhdCB0aGUgYm90dG9tIG9mIHRoZSBtYWluIHBhbmVsLgotICAgICAg
ICB0aGlzLl9ndXR0ZXJQYW5lbC5zeW5jQ2xpZW50SGVpZ2h0KG1haW5FbGVtZW50LmNsaWVudEhl
aWdodCk7Ci0gICAgICAgIGd1dHRlckVsZW1lbnQuc2Nyb2xsVG9wID0gbWFpbkVsZW1lbnQuc2Ny
b2xsVG9wOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51
bWJlcgotICAgICAqLwotICAgIF9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lOiBmdW5jdGlvbihsaW5l
TnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVs
LmxpbmVzQ291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG1haW5DaHVu
ayA9IHRoaXMuX21haW5QYW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJlcik7Ci0gICAgICAgIGlm
IChtYWluQ2h1bmsubGluZXNDb3VudCA9PT0gMSAmJiBtYWluQ2h1bmsuaXNEZWNvcmF0ZWQoKSkg
ewotICAgICAgICAgICAgdmFyIGd1dHRlckNodW5rID0gdGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxp
bmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gbWFpbkNodW5r
LmhlaWdodDsKLSAgICAgICAgICAgIGlmIChoZWlnaHQpCi0gICAgICAgICAgICAgICAgZ3V0dGVy
Q2h1bmsuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiaGVpZ2h0IiwgaGVpZ2h0ICsgInB4Iik7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5z
dHlsZS5yZW1vdmVQcm9wZXJ0eSgiaGVpZ2h0Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB2YXIgZ3V0dGVyQ2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5jaHVua0ZvckxpbmUobGlu
ZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAoZ3V0dGVyQ2h1bmsubGluZXNDb3VudCA9PT0gMSkK
LSAgICAgICAgICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5
KCJoZWlnaHQiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e0VsZW1lbnR9IGd1dHRlclJvdwotICAgICAqLwotICAgIF9zeW5jTGluZUhlaWdodDogZnVuY3Rp
b24oZ3V0dGVyUm93KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2xpbmVIZWlnaHRTeW5jZWQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChndXR0ZXJSb3cgJiYgZ3V0dGVyUm93
Lm9mZnNldEhlaWdodCkgewotICAgICAgICAgICAgLy8gRm9yY2UgZXF1YWwgbGluZSBoZWlnaHRz
IGZvciB0aGUgY2hpbGQgcGFuZWxzLgotICAgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnNl
dFByb3BlcnR5KCJsaW5lLWhlaWdodCIsIGd1dHRlclJvdy5vZmZzZXRIZWlnaHQgKyAicHgiKTsK
LSAgICAgICAgICAgIHRoaXMuX2xpbmVIZWlnaHRTeW5jZWQgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9yZWdpc3RlclNob3J0Y3V0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIGtleXMgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzOwotICAgICAg
ICB2YXIgbW9kaWZpZXJzID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJz
OwotCi0gICAgICAgIHRoaXMuX3Nob3J0Y3V0cyA9IHt9OwotCi0gICAgICAgIHRoaXMuX3Nob3J0
Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5TZWxlY3RBbGxdID0gdGhpcy5faGFu
ZGxlU2VsZWN0QWxsLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuX3dvcmRNb3ZlbWVudENvbnRy
b2xsZXIuX3JlZ2lzdGVyU2hvcnRjdXRzKHRoaXMuX3Nob3J0Y3V0cyk7Ci0gICAgfSwKLQotICAg
IF9oYW5kbGVTZWxlY3RBbGw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0U2Vs
ZWN0aW9uKHRoaXMuX3RleHRNb2RlbC5yYW5nZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSwKLQotICAgIF9oYW5kbGVLZXlEb3duOiBmdW5jdGlvbihlKQotICAgIHsKLSAgICAgICAg
Ly8gSWYgdGhlIGV2ZW50IHdhcyBub3QgdHJpZ2dlcmVkIGZyb20gdGhlIGVudGlyZSBlZGl0b3Is
IHRoZW4KLSAgICAgICAgLy8gaWdub3JlIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAyOTA2Ci0gICAgICAgIGlmIChlLnRhcmdldC5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1kZWNvcmF0aW9ucyIpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBzaG9ydGN1dEtleSA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNo
b3J0Y3V0Lm1ha2VLZXlGcm9tRXZlbnQoZSk7Ci0KLSAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlz
Ll9zaG9ydGN1dHNbc2hvcnRjdXRLZXldOwotICAgICAgICBpZiAoaGFuZGxlciAmJiBoYW5kbGVy
KCkpIHsKLSAgICAgICAgICAgIGUuY29uc3VtZSh0cnVlKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLl9tYWluUGFuZWwuaGFuZGxlS2V5RG93bihzaG9ydGN1
dEtleSwgZSk7Ci0gICAgfSwKLQotICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgYW5jaG9yID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNl
bGZXaXRoTm9kZU5hbWUoImEiKTsKLSAgICAgICAgaWYgKGFuY2hvcikKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0
TWVudShldmVudCk7Ci0gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5n
Tm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7Ci0gICAgICAgIGlmICh0
YXJnZXQpCi0gICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5wb3B1bGF0ZUxpbmVHdXR0ZXJDb250
ZXh0TWVudShjb250ZXh0TWVudSwgdGFyZ2V0LmxpbmVOdW1iZXIpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5wb3B1bGF0ZUNvbnRleHRNZW51KGV2ZW50LnRh
cmdldCwgY29udGV4dE1lbnUpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3co
KTsKLSAgICB9LAotCi0gICAgX2hhbmRsZVNjcm9sbENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5fbWFpblBhbmVsLnNjcm9sbFRv
cCgpOwotICAgICAgICB2YXIgZmlyc3RWaXNpYmxlTGluZU51bWJlciA9IHRoaXMuX21haW5QYW5l
bC5saW5lTnVtYmVyQXRPZmZzZXQodmlzaWJsZUZyb20pOwotICAgICAgICB0aGlzLl9kZWxlZ2F0
ZS5zY3JvbGxDaGFuZ2VkKGZpcnN0VmlzaWJsZUxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqLwotICAgIHNjcm9s
bFRvTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5Q
YW5lbC5zY3JvbGxUb0xpbmUobGluZU51bWJlcik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9Ci0gICAgICovCi0gICAgc2VsZWN0aW9u
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWFpblBhbmVsLnNlbGVj
dGlvbigpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlP30KLSAgICAgKi8KLSAgICBsYXN0U2VsZWN0aW9uOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fbWFpblBhbmVsLmxhc3RTZWxlY3Rpb24oKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSB0ZXh0
UmFuZ2UKLSAgICAgKi8KLSAgICBzZXRTZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5zZXRTZWxlY3Rpb24odGV4dFJhbmdlKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKi8KLSAg
ICBzZXRUZXh0OiBmdW5jdGlvbih0ZXh0KQotICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVs
LnNldFRleHQodGV4dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmlu
Z30KLSAgICAgKi8KLSAgICB0ZXh0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fdGV4dE1vZGVsLnRleHQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICByYW5nZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRNb2RlbC5yYW5nZSgpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBsaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAg
Z2V0IGxpbmVzQ291bnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gICAgICogQHBhcmFtIHs/T2JqZWN0fSB2
YWx1ZQotICAgICAqLwotICAgIHNldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSwgdmFs
dWUpCi0gICAgewotICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxpbmUsIG5h
bWUsIHZhbHVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxp
bmUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAqIEByZXR1cm4gez9PYmplY3R9
IHZhbHVlCi0gICAgICovCi0gICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZSwg
bmFtZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKi8KLSAgICByZW1vdmVBdHRyaWJ1dGU6
IGZ1bmN0aW9uKGxpbmUsIG5hbWUpCi0gICAgewotICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVt
b3ZlQXR0cmlidXRlKGxpbmUsIG5hbWUpOwotICAgIH0sCi0KLSAgICB3YXNTaG93bjogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KCkpCi0gICAgICAgICAgICBX
ZWJJbnNwZWN0b3IubWFya0JlaW5nRWRpdGVkKHRoaXMuZWxlbWVudCwgdHJ1ZSk7Ci0KLSAgICAg
ICAgdGhpcy5fbWFpblBhbmVsLndhc1Nob3duKCk7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwud2lsbEhpZGUoKTsKLSAg
ICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwud2lsbEhpZGUoKTsKLQotICAgICAgICBpZiAoIXRoaXMu
cmVhZE9ubHkoKSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5tYXJrQmVpbmdFZGl0ZWQodGhp
cy5lbGVtZW50LCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxl
bWVudH0gZWxlbWVudAotICAgICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHJlc3VsdFJhbmdl
cwotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZUNsYXNzCi0gICAgICogQHBhcmFtIHtBcnJh
eS48T2JqZWN0Pj19IGNoYW5nZXMKLSAgICAgKi8KLSAgICBoaWdobGlnaHRSYW5nZXNXaXRoU3R5
bGVDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgcmVzdWx0UmFuZ2VzLCBzdHlsZUNsYXNzLCBjaGFu
Z2VzKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLmJlZ2luRG9tVXBkYXRlcygpOwot
ICAgICAgICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0eWxlQ2xhc3MoZWxlbWVu
dCwgcmVzdWx0UmFuZ2VzLCBzdHlsZUNsYXNzLCBjaGFuZ2VzKTsKLSAgICAgICAgdGhpcy5fbWFp
blBhbmVsLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IHNjcm9sbFRvcAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjbGllbnRIZWlnaHQK
LSAgICAgKiBAcGFyYW0ge251bWJlcn0gY2h1bmtTaXplCi0gICAgICovCi0gICAgb3ZlcnJpZGVW
aWV3cG9ydEZvclRlc3Q6IGZ1bmN0aW9uKHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBjaHVua1Np
emUpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwub3ZlcnJpZGVWaWV3cG9ydEZvclRl
c3Qoc2Nyb2xsVG9wLCBjbGllbnRIZWlnaHQsIGNodW5rU2l6ZSk7Ci0gICAgfSwKLQotICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWx9IHRleHRNb2Rl
bAotICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbCA9IGZ1bmN0aW9uKHRl
eHRNb2RlbCkKLXsKLSAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7Ci0KLSAgICB0aGlz
LmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZh
bHNlKTsKLQotICAgIHRoaXMuX2RlZmF1bHRDaHVua1NpemUgPSA1MDsKLSAgICB0aGlzLl9wYWlu
dENvYWxlc2NpbmdMZXZlbCA9IDA7Ci0gICAgdGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVs
ID0gMDsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICov
Ci0gICAgc2Nyb2xsVG9MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAg
aWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVuayhsaW5l
TnVtYmVyKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA9IGNodW5rLm9mZnNldFRv
cDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIK
LSAgICAgKi8KLSAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAg
ICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVu
ayhsaW5lTnVtYmVyKTsKLSAgICAgICAgY2h1bmsuZWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVl
ZGVkKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVt
YmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd8RWxlbWVudH0gZGVjb3JhdGlvbgotICAgICAqLwot
ICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCi0gICAg
ewotICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5l
QUNodW5rKGxpbmVOdW1iZXIpOwotICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKGRlY29yYXRp
b24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJl
cgotICAgICAqIEBwYXJhbSB7c3RyaW5nfEVsZW1lbnR9IGRlY29yYXRpb24KLSAgICAgKi8KLSAg
ICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQotICAg
IHsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0Zv
ckxpbmUobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5rLnJlbW92ZURlY29yYXRpb24oZGVjb3Jh
dGlvbik7Ci0gICAgfSwKLQotICAgIGJ1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwotCi0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5y
ZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSArPSB0
aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNy
ZWF0ZU5ld0NodW5rKGksIGkgKyB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKTsKLSAgICAgICAgICAg
IHRoaXMuX3RleHRDaHVua3MucHVzaChjaHVuayk7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWlu
ZXIuYXBwZW5kQ2hpbGQoY2h1bmsuZWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
LnJlcGFpbnRBbGwoKTsKLQotICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcmV0
dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCi0gICAgewotICAgICAgICB2YXIgY2h1bmtOdW1iZXIgPSB0aGlzLmNodW5rTnVtYmVy
Rm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgdmFyIG9sZENodW5rID0gdGhpcy5fdGV4dENo
dW5rc1tjaHVua051bWJlcl07Ci0KLSAgICAgICAgaWYgKCFvbGRDaHVuaykgewotICAgICAgICAg
ICAgY29uc29sZS5lcnJvcigiTm8gY2h1bmsgZm9yIGxpbmUgbnVtYmVyOiAiICsgbGluZU51bWJl
cik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChv
bGRDaHVuay5saW5lc0NvdW50ID09PSAxKQotICAgICAgICAgICAgcmV0dXJuIG9sZENodW5rOwot
Ci0gICAgICAgIHJldHVybiB0aGlzLnNwbGl0Q2h1bmtPbkFMaW5lKGxpbmVOdW1iZXIsIGNodW5r
TnVtYmVyLCB0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY2h1bmtOdW1iZXIKLSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW49fSBjcmVhdGVTdWZmaXhDaHVuawotICAgICAqIEByZXR1cm4ge09iamVj
dH0KLSAgICAgKi8KLSAgICBzcGxpdENodW5rT25BTGluZTogZnVuY3Rpb24obGluZU51bWJlciwg
Y2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKQotICAgIHsKLSAgICAgICAgdGhpcy5iZWdp
bkRvbVVwZGF0ZXMoKTsKLQotICAgICAgICB2YXIgb2xkQ2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtz
W2NodW5rTnVtYmVyXTsKLSAgICAgICAgdmFyIHdhc0V4cGFuZGVkID0gb2xkQ2h1bmsuZXhwYW5k
ZWQoKTsKLSAgICAgICAgb2xkQ2h1bmsuY29sbGFwc2UoKTsKLQotICAgICAgICB2YXIgaW5zZXJ0
SW5kZXggPSBjaHVua051bWJlciArIDE7Ci0KLSAgICAgICAgLy8gUHJlZml4IGNodW5rLgotICAg
ICAgICBpZiAobGluZU51bWJlciA+IG9sZENodW5rLnN0YXJ0TGluZSkgewotICAgICAgICAgICAg
dmFyIHByZWZpeENodW5rID0gdGhpcy5jcmVhdGVOZXdDaHVuayhvbGRDaHVuay5zdGFydExpbmUs
IGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0
SW5kZXgrKywgMCwgcHJlZml4Q2h1bmspOwotICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmlu
c2VydEJlZm9yZShwcmVmaXhDaHVuay5lbGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIExpbmUgY2h1bmsuCi0gICAgICAgIHZhciBlbmRMaW5lID0gY3Jl
YXRlU3VmZml4Q2h1bmsgPyBsaW5lTnVtYmVyICsgMSA6IG9sZENodW5rLnN0YXJ0TGluZSArIG9s
ZENodW5rLmxpbmVzQ291bnQ7Ci0gICAgICAgIHZhciBsaW5lQ2h1bmsgPSB0aGlzLmNyZWF0ZU5l
d0NodW5rKGxpbmVOdW1iZXIsIGVuZExpbmUpOwotICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNw
bGljZShpbnNlcnRJbmRleCsrLCAwLCBsaW5lQ2h1bmspOwotICAgICAgICB0aGlzLl9jb250YWlu
ZXIuaW5zZXJ0QmVmb3JlKGxpbmVDaHVuay5lbGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKLQot
ICAgICAgICAvLyBTdWZmaXggY2h1bmsuCi0gICAgICAgIGlmIChvbGRDaHVuay5zdGFydExpbmUg
KyBvbGRDaHVuay5saW5lc0NvdW50ID4gZW5kTGluZSkgewotICAgICAgICAgICAgdmFyIHN1ZmZp
eENodW5rID0gdGhpcy5jcmVhdGVOZXdDaHVuayhlbmRMaW5lLCBvbGRDaHVuay5zdGFydExpbmUg
KyBvbGRDaHVuay5saW5lc0NvdW50KTsKLSAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3Bs
aWNlKGluc2VydEluZGV4LCAwLCBzdWZmaXhDaHVuayk7Ci0gICAgICAgICAgICB0aGlzLl9jb250
YWluZXIuaW5zZXJ0QmVmb3JlKHN1ZmZpeENodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGVuY2xvc2luZyBjaHVuay4KLSAgICAg
ICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoY2h1bmtOdW1iZXIsIDEpOwotICAgICAgICB0aGlz
Ll9jb250YWluZXIucmVtb3ZlQ2hpbGQob2xkQ2h1bmsuZWxlbWVudCk7Ci0KLSAgICAgICAgaWYg
KHdhc0V4cGFuZGVkKSB7Ci0gICAgICAgICAgICBpZiAocHJlZml4Q2h1bmspCi0gICAgICAgICAg
ICAgICAgcHJlZml4Q2h1bmsuZXhwYW5kKCk7Ci0gICAgICAgICAgICBsaW5lQ2h1bmsuZXhwYW5k
KCk7Ci0gICAgICAgICAgICBpZiAoc3VmZml4Q2h1bmspCi0gICAgICAgICAgICAgICAgc3VmZml4
Q2h1bmsuZXhwYW5kKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMo
KTsKLQotICAgICAgICByZXR1cm4gbGluZUNodW5rOwotICAgIH0sCi0KLSAgICBjcmVhdGVOZXdD
aHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQotICAgIHsKLSAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJjcmVhdGVOZXdDaHVuaygpIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBkZXNj
ZW5kYW50cyIpOwotICAgIH0sCi0KLSAgICBfc2Nyb2xsOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9zY2hlZHVsZVJlcGFpbnRBbGwoKTsKLSAgICAgICAgaWYgKHRoaXMuX3N5bmNT
Y3JvbGxMaXN0ZW5lcikKLSAgICAgICAgICAgIHRoaXMuX3N5bmNTY3JvbGxMaXN0ZW5lcigpOwot
ICAgIH0sCi0KLSAgICBfc2NoZWR1bGVSZXBhaW50QWxsOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fcmVwYWludEFsbFRpbWVyKQotICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KHRoaXMuX3JlcGFpbnRBbGxUaW1lcik7Ci0gICAgICAgIHRoaXMuX3JlcGFpbnRBbGxUaW1lciA9
IHNldFRpbWVvdXQodGhpcy5yZXBhaW50QWxsLmJpbmQodGhpcyksIDUwKTsKLSAgICB9LAotCi0g
ICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9wYWludENv
YWxlc2NpbmdMZXZlbCsrOwotICAgIH0sCi0KLSAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOwotICAgICAgICBpZiAo
IXRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQotICAgICAgICAgICAgdGhpcy5yZXBhaW50QWxs
KCk7Ci0gICAgfSwKLQotICAgIGJlZ2luRG9tVXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsKys7Ci0gICAgfSwKLQotICAgIGVu
ZERvbVVwZGF0ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RvbVVwZGF0ZUNv
YWxlc2NpbmdMZXZlbC0tOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJl
cn0gbGluZU51bWJlcgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBjaHVu
a051bWJlckZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICBmdW5j
dGlvbiBjb21wYXJlTGluZU51bWJlcnModmFsdWUsIGNodW5rKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUgPCBjaHVuay5zdGFydExpbmUgPyAtMSA6IDE7Ci0gICAgICAgIH0K
LSAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0
U29ydGVkQnlGdW5jdGlvbihsaW5lTnVtYmVyLCB0aGlzLl90ZXh0Q2h1bmtzLCBjb21wYXJlTGlu
ZU51bWJlcnMpOwotICAgICAgICByZXR1cm4gaW5zZXJ0QmVmb3JlIC0gMTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcmV0dXJu
IHtPYmplY3R9Ci0gICAgICovCi0gICAgY2h1bmtGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3NbdGhpcy5jaHVua051bWJl
ckZvckxpbmUobGluZU51bWJlcildOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gdmlzaWJsZUZyb20KLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0g
ICAgX2ZpbmRGaXJzdFZpc2libGVDaHVua051bWJlcjogZnVuY3Rpb24odmlzaWJsZUZyb20pCi0g
ICAgewotICAgICAgICBmdW5jdGlvbiBjb21wYXJlT2Zmc2V0VG9wcyh2YWx1ZSwgY2h1bmspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IGNodW5rLm9mZnNldFRvcCA/IC0x
IDogMTsKLSAgICAgICAgfQotICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0aW9uSW5k
ZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHZpc2libGVGcm9tLCB0aGlzLl90ZXh0
Q2h1bmtzLCBjb21wYXJlT2Zmc2V0VG9wcyk7Ci0gICAgICAgIHJldHVybiBpbnNlcnRCZWZvcmUg
LSAxOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdmlzaWJsZUZy
b20KLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdmlzaWJsZVRvCi0gICAgICogQHJldHVybiB7e3N0
YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyfX0KLSAgICAgKi8KLSAgICBmaW5kVmlzaWJsZUNodW5r
czogZnVuY3Rpb24odmlzaWJsZUZyb20sIHZpc2libGVUbykKLSAgICB7Ci0gICAgICAgIHZhciBz
cGFuID0gKHZpc2libGVUbyAtIHZpc2libGVGcm9tKSAqIDAuNTsKLSAgICAgICAgdmlzaWJsZUZy
b20gPSBNYXRoLm1heCh2aXNpYmxlRnJvbSAtIHNwYW4sIDApOwotICAgICAgICB2aXNpYmxlVG8g
PSB2aXNpYmxlVG8gKyBzcGFuOwotCi0gICAgICAgIHZhciBmcm9tID0gdGhpcy5fZmluZEZpcnN0
VmlzaWJsZUNodW5rTnVtYmVyKHZpc2libGVGcm9tKTsKLSAgICAgICAgZm9yICh2YXIgdG8gPSBm
cm9tICsgMTsgdG8gPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKyt0bykgewotICAgICAgICAg
ICAgaWYgKHRoaXMuX3RleHRDaHVua3NbdG9dLm9mZnNldFRvcCA+PSB2aXNpYmxlVG8pCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IGZy
b20sIGVuZDogdG8gfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IHZpc2libGVGcm9tCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGxpbmVO
dW1iZXJBdE9mZnNldDogZnVuY3Rpb24odmlzaWJsZUZyb20pCi0gICAgewotICAgICAgICB2YXIg
Y2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2ZpbmRGaXJzdFZpc2libGVDaHVua051bWJl
cih2aXNpYmxlRnJvbSldOwotICAgICAgICBpZiAoIWNodW5rLmV4cGFuZGVkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gY2h1bmsuc3RhcnRMaW5lOwotCi0gICAgICAgIHZhciBsaW5lTnVtYmVycyA9
IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxpbmVzQ291bnQ7ICsraSkg
ewotICAgICAgICAgICAgbGluZU51bWJlcnMucHVzaChjaHVuay5zdGFydExpbmUgKyBpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVMaW5lUm93T2Zmc2V0VG9wcyh2YWx1
ZSwgbGluZU51bWJlcikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBjaHVu
ay5leHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUg
PCBsaW5lUm93Lm9mZnNldFRvcCA/IC0xIDogMTsKLSAgICAgICAgfQotICAgICAgICB2YXIgaW5z
ZXJ0QmVmb3JlID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9u
KHZpc2libGVGcm9tLCBsaW5lTnVtYmVycywgY29tcGFyZUxpbmVSb3dPZmZzZXRUb3BzKTsKLSAg
ICAgICAgcmV0dXJuIGxpbmVOdW1iZXJzW2luc2VydEJlZm9yZSAtIDFdOwotICAgIH0sCi0KLSAg
ICByZXBhaW50QWxsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fcmVw
YWludEFsbFRpbWVyOwotCi0gICAgICAgIGlmICh0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLnNj
cm9sbFRvcCgpOwotICAgICAgICB2YXIgdmlzaWJsZVRvID0gdmlzaWJsZUZyb20gKyB0aGlzLmNs
aWVudEhlaWdodCgpOwotCi0gICAgICAgIGlmICh2aXNpYmxlVG8pIHsKLSAgICAgICAgICAgIHZh
ciByZXN1bHQgPSB0aGlzLmZpbmRWaXNpYmxlQ2h1bmtzKHZpc2libGVGcm9tLCB2aXNpYmxlVG8p
OwotICAgICAgICAgICAgdGhpcy5leHBhbmRDaHVua3MocmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5k
KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBzY3JvbGxUb3A6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5fc2Nyb2xsVG9wT3ZlcnJpZGVGb3JUZXN0ID09
PSAibnVtYmVyIiA/IHRoaXMuX3Njcm9sbFRvcE92ZXJyaWRlRm9yVGVzdCA6IHRoaXMuZWxlbWVu
dC5zY3JvbGxUb3A7Ci0gICAgfSwKLQotICAgIGNsaWVudEhlaWdodDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9jbGllbnRIZWlnaHRPdmVycmlkZUZvclRl
c3QgPT09ICJudW1iZXIiID8gdGhpcy5fY2xpZW50SGVpZ2h0T3ZlcnJpZGVGb3JUZXN0IDogdGhp
cy5lbGVtZW50LmNsaWVudEhlaWdodDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGZyb21JbmRleAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4Ci0gICAg
ICovCi0gICAgZXhwYW5kQ2h1bmtzOiBmdW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCi0gICAg
ewotICAgICAgICAvLyBGaXJzdCBjb2xsYXBzZSBjaHVua3MgdG8gY29sbGVjdCB0aGUgRE9NIGVs
ZW1lbnRzIGludG8gYSBjYWNoZSB0byByZXVzZSB0aGVtIGxhdGVyLgotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGZyb21JbmRleDsgKytpKQotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5r
c1tpXS5jb2xsYXBzZSgpOwotICAgICAgICBmb3IgKHZhciBpID0gdG9JbmRleDsgaSA8IHRoaXMu
X3RleHRDaHVua3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ld
LmNvbGxhcHNlKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4
OyArK2kpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ldLmV4cGFuZCgpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGZpcnN0RWxlbWVudAotICAgICAq
IEBwYXJhbSB7RWxlbWVudD19IGxhc3RFbGVtZW50Ci0gICAgICogQHJldHVybiB7bnVtYmVyfQot
ICAgICAqLwotICAgIHRvdGFsSGVpZ2h0OiBmdW5jdGlvbihmaXJzdEVsZW1lbnQsIGxhc3RFbGVt
ZW50KQotICAgIHsKLSAgICAgICAgbGFzdEVsZW1lbnQgPSAobGFzdEVsZW1lbnQgfHwgZmlyc3RF
bGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmc7Ci0gICAgICAgIGlmIChsYXN0RWxlbWVudCkKLSAg
ICAgICAgICAgIHJldHVybiBsYXN0RWxlbWVudC5vZmZzZXRUb3AgLSBmaXJzdEVsZW1lbnQub2Zm
c2V0VG9wOwotCi0gICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSBmaXJzdEVsZW1lbnQub2Zmc2V0
UGFyZW50OwotICAgICAgICBpZiAob2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudC5zY3JvbGxI
ZWlnaHQgPiBvZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIG9m
ZnNldFBhcmVudC5zY3JvbGxIZWlnaHQgLSBmaXJzdEVsZW1lbnQub2Zmc2V0VG9wOwotCi0gICAg
ICAgIHZhciB0b3RhbCA9IDA7Ci0gICAgICAgIHdoaWxlIChmaXJzdEVsZW1lbnQgJiYgZmlyc3RF
bGVtZW50ICE9PSBsYXN0RWxlbWVudCkgewotICAgICAgICAgICAgdG90YWwgKz0gZmlyc3RFbGVt
ZW50Lm9mZnNldEhlaWdodDsKLSAgICAgICAgICAgIGZpcnN0RWxlbWVudCA9IGZpcnN0RWxlbWVu
dC5uZXh0RWxlbWVudFNpYmxpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvdGFsOwot
ICAgIH0sCi0KLSAgICByZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVw
YWludEFsbCgpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbH0KLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNb2RlbH0gdGV4dE1vZGVsCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKG51
bWJlcil9IHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcgotICogQHBhcmFtIHtmdW5jdGlv
bihFbGVtZW50KX0gc3luY0xpbmVIZWlnaHRMaXN0ZW5lcgotICovCi1XZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckd1dHRlclBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsLCBzeW5jRGVjb3JhdGlvbnNG
b3JMaW5lTGlzdGVuZXIsIHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXIpCi17Ci0gICAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwuY2FsbCh0aGlzLCB0ZXh0TW9kZWwpOwotCi0gICAg
dGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyID0gc3luY0RlY29yYXRpb25zRm9y
TGluZUxpc3RlbmVyOwotICAgIHRoaXMuX3N5bmNMaW5lSGVpZ2h0TGlzdGVuZXIgPSBzeW5jTGlu
ZUhlaWdodExpc3RlbmVyOwotCi0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVk
aXRvci1saW5lcyI7Ci0KLSAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gImlubmVyLWNvbnRh
aW5lciI7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7Ci0K
LSAgICB0aGlzLl9mcmVlQ2FjaGVkRWxlbWVudHMoKTsKLSAgICB0aGlzLmJ1aWxkQ2h1bmtzKCk7
Ci0gICAgdGhpcy5fZGVjb3JhdGlvbnMgPSB7fTsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUgPSB7Ci0gICAgX2ZyZWVDYWNoZWRFbGVtZW50czogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOwotICAgIH0sCi0K
LSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZnJlZUNhY2hl
ZEVsZW1lbnRzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBz
dGFydExpbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQotICAgICAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmt9Ci0gICAgICovCi0gICAgY3JlYXRl
TmV3Q2h1bms6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBzdGFydExp
bmUsIGVuZExpbmUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5UZXh0UmFuZ2V9IG9sZFJhbmdlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4
dFJhbmdlfSBuZXdSYW5nZQotICAgICAqLwotICAgIHRleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRS
YW5nZSwgbmV3UmFuZ2UpCi0gICAgewotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwot
Ci0gICAgICAgIHZhciBsaW5lc0RpZmYgPSBuZXdSYW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2Uu
bGluZXNDb3VudDsKLSAgICAgICAgaWYgKGxpbmVzRGlmZikgewotICAgICAgICAgICAgLy8gUmVt
b3ZlIG9sZCBjaHVua3MgKGlmIG5lZWRlZCkuCi0gICAgICAgICAgICBmb3IgKHZhciBjaHVua051
bWJlciA9IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMTsgY2h1bmtOdW1iZXIgPj0gMDsgLS1j
aHVua051bWJlcikgewotICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVu
a3NbY2h1bmtOdW1iZXJdOwotICAgICAgICAgICAgICAgIGlmIChjaHVuay5zdGFydExpbmUgKyBj
aHVuay5saW5lc0NvdW50IDw9IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjaHVuay5jb2xsYXBzZSgpOwotICAg
ICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChjaHVuay5lbGVtZW50KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3MubGVuZ3RoID0gY2h1
bmtOdW1iZXIgKyAxOwotCi0gICAgICAgICAgICAvLyBBZGQgbmV3IGNodW5rcyAoaWYgbmVlZGVk
KS4KLSAgICAgICAgICAgIHZhciB0b3RhbExpbmVzID0gMDsKLSAgICAgICAgICAgIGlmICh0aGlz
Ll90ZXh0Q2h1bmtzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHZhciBsYXN0Q2h1bmsgPSB0
aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMV07Ci0gICAgICAgICAg
ICAgICAgdG90YWxMaW5lcyA9IGxhc3RDaHVuay5zdGFydExpbmUgKyBsYXN0Q2h1bmsubGluZXND
b3VudDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRvdGFsTGlu
ZXM7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSArPSB0aGlzLl9kZWZhdWx0Q2h1
bmtTaXplKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jcmVhdGVOZXdDaHVu
ayhpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
dGV4dENodW5rcy5wdXNoKGNodW5rKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIu
YXBwZW5kQ2hpbGQoY2h1bmsuZWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFNoaWZ0IGRlY29yYXRpb25zIGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAgdmFyIGRlY29y
YXRpb25zVG9SZXN0b3JlID0ge307Ci0gICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGlu
IHRoaXMuX2RlY29yYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNl
SW50KGxpbmVOdW1iZXIsIDEwKTsKLQotICAgICAgICAgICAgICAgIC8vIERvIG5vdCBtb3ZlIGRl
Y29yYXRpb25zIGJlZm9yZSB0aGUgc3RhcnQgcG9zaXRpb24uCi0gICAgICAgICAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5zdGFydExpbmUpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIC8vIERlY29yYXRpb25zIGZvbGxvdyB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIG9mIGxpbmUuCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IG9s
ZFJhbmdlLnN0YXJ0TGluZSAmJiBvbGRSYW5nZS5zdGFydENvbHVtbikKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbGluZURlY29yYXRpb25zQ29w
eSA9IHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdLnNsaWNlKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lRGVjb3JhdGlvbnNDb3B5Lmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgbGlu
ZURlY29yYXRpb25zQ29weVtpXSk7Ci0gICAgICAgICAgICAgICAgLy8gRG8gbm90IHJlc3RvcmUg
dGhlIGRlY29yYXRpb25zIGJlZm9yZSB0aGUgZW5kIHBvc2l0aW9uLgotICAgICAgICAgICAgICAg
IGlmIChsaW5lTnVtYmVyID49IG9sZFJhbmdlLmVuZExpbmUpCi0gICAgICAgICAgICAgICAgICAg
IGRlY29yYXRpb25zVG9SZXN0b3JlW2xpbmVOdW1iZXJdID0gbGluZURlY29yYXRpb25zQ29weTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gZGVjb3Jh
dGlvbnNUb1Jlc3RvcmUpIHsKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQo
bGluZU51bWJlciwgMTApOwotICAgICAgICAgICAgICAgIHZhciBsaW5lRGVjb3JhdGlvbnNDb3B5
ID0gZGVjb3JhdGlvbnNUb1Jlc3RvcmVbbGluZU51bWJlcl07Ci0gICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaW5lRGVjb3JhdGlvbnNDb3B5Lmxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmFkZERlY29yYXRpb24obGluZU51bWJlciArIGxpbmVzRGlmZiwg
bGluZURlY29yYXRpb25zQ29weVtpXSk7Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAg
dGhpcy5yZXBhaW50QWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBEZWNv
cmF0aW9ucyBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQsIHNvIHdlIG1heSBoYXZlIHRvIHN5bmMgdGhv
c2UgbGluZXMuCi0gICAgICAgICAgICB2YXIgY2h1bmtOdW1iZXIgPSB0aGlzLmNodW5rTnVtYmVy
Rm9yTGluZShuZXdSYW5nZS5zdGFydExpbmUpOwotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5fdGV4dENodW5rc1tjaHVua051bWJlcl07Ci0gICAgICAgICAgICB3aGlsZSAoY2h1bmsgJiYg
Y2h1bmsuc3RhcnRMaW5lIDw9IG5ld1JhbmdlLmVuZExpbmUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2h1bmsubGluZXNDb3VudCA9PT0gMSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3lu
Y0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKGNodW5rLnN0YXJ0TGluZSk7Ci0gICAgICAgICAg
ICAgICAgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzWysrY2h1bmtOdW1iZXJdOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjbGllbnRIZWlnaHQKLSAgICAgKi8K
LSAgICBzeW5jQ2xpZW50SGVpZ2h0OiBmdW5jdGlvbihjbGllbnRIZWlnaHQpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA+IGNsaWVudEhlaWdodCkKLSAgICAg
ICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20i
LCAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAtIGNsaWVudEhlaWdodCkgKyAicHgiKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3Bl
cnR5KCJwYWRkaW5nLWJvdHRvbSIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7c3RyaW5nfEVsZW1lbnR9IGRlY29y
YXRpb24KLSAgICAgKi8KLSAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBk
ZWNvcmF0aW9uKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2Vk
UGFuZWwucHJvdG90eXBlLmFkZERlY29yYXRpb24uY2FsbCh0aGlzLCBsaW5lTnVtYmVyLCBkZWNv
cmF0aW9uKTsKLSAgICAgICAgdmFyIGRlY29yYXRpb25zID0gdGhpcy5fZGVjb3JhdGlvbnNbbGlu
ZU51bWJlcl07Ci0gICAgICAgIGlmICghZGVjb3JhdGlvbnMpIHsKLSAgICAgICAgICAgIGRlY29y
YXRpb25zID0gW107Ci0gICAgICAgICAgICB0aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXSA9
IGRlY29yYXRpb25zOwotICAgICAgICB9Ci0gICAgICAgIGRlY29yYXRpb25zLnB1c2goZGVjb3Jh
dGlvbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVt
YmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd8RWxlbWVudH0gZGVjb3JhdGlvbgotICAgICAqLwot
ICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5
cGUucmVtb3ZlRGVjb3JhdGlvbi5jYWxsKHRoaXMsIGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwot
ICAgICAgICB2YXIgZGVjb3JhdGlvbnMgPSB0aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXTsK
LSAgICAgICAgaWYgKGRlY29yYXRpb25zKSB7Ci0gICAgICAgICAgICBkZWNvcmF0aW9ucy5yZW1v
dmUoZGVjb3JhdGlvbik7Ci0gICAgICAgICAgICBpZiAoIWRlY29yYXRpb25zLmxlbmd0aCkKLSAg
ICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZGVjb3JhdGlvbnNbbGluZU51bWJlcl07Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbH0gY2h1bmtlZFBhbmVsCi0gKiBA
cGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCi0gKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQotICov
Ci1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVuY3Rpb24oY2h1bmtlZFBh
bmVsLCBzdGFydExpbmUsIGVuZExpbmUpCi17Ci0gICAgdGhpcy5fY2h1bmtlZFBhbmVsID0gY2h1
bmtlZFBhbmVsOwotICAgIHRoaXMuX3RleHRNb2RlbCA9IGNodW5rZWRQYW5lbC5fdGV4dE1vZGVs
OwotCi0gICAgdGhpcy5zdGFydExpbmUgPSBzdGFydExpbmU7Ci0gICAgZW5kTGluZSA9IE1hdGgu
bWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRMaW5lKTsKLSAgICB0aGlzLmxpbmVz
Q291bnQgPSBlbmRMaW5lIC0gc3RhcnRMaW5lOwotCi0gICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxz
ZTsKLQotICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
ICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOwotICAgIHRoaXMuZWxlbWVu
dC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKLQotICAgIGlmICh0aGlzLmxpbmVz
Q291bnQgPT09IDEpIHsKLSAgICAgICAgLy8gU2luZ2xlIGxpbmUgY2h1bmtzIGFyZSB0eXBpY2Fs
bHkgY3JlYXRlZCBmb3IgZGVjb3JhdGlvbnMuIEhvc3QgbGluZSBudW1iZXIgaW4KLSAgICAgICAg
Ly8gdGhlIHN1Yi1lbGVtZW50IGluIG9yZGVyIHRvIGFsbG93IGZsZXhpYmxlIGJvcmRlciAvIG1h
cmdpbiBtYW5hZ2VtZW50LgotICAgICAgICB2YXIgaW5uZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotICAgICAgICBpbm5lclNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1s
aW5lLW51bWJlci1pbm5lciI7Ci0gICAgICAgIGlubmVyU3Bhbi50ZXh0Q29udGVudCA9IHN0YXJ0
TGluZSArIDE7Ci0gICAgICAgIHZhciBvdXRlclNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICAgICAgb3V0ZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1i
ZXItb3V0ZXIiOwotICAgICAgICBvdXRlclNwYW4uYXBwZW5kQ2hpbGQoaW5uZXJTcGFuKTsKLSAg
ICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG91dGVyU3Bhbik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgdmFyIGxpbmVOdW1iZXJzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSBzdGFy
dExpbmU7IGkgPCBlbmRMaW5lOyArK2kpCi0gICAgICAgICAgICBsaW5lTnVtYmVycy5wdXNoKGkg
KyAxKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gbGluZU51bWJlcnMuam9p
bigiXG4iKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsu
cHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZWNvcmF0aW9u
Ci0gICAgICovCi0gICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAgICAg
aWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHRoaXMuZWxl
bWVudC5hZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOwotICAgICAgICB0aGlzLl9jaHVua2VkUGFu
ZWwuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gZGVjb3JhdGlvbgotICAgICAqLwotICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9u
KGRlY29yYXRpb24pCi0gICAgewotICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuYmVnaW5Eb21V
cGRhdGVzKCk7Ci0gICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpCi0g
ICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhkZWNvcmF0aW9uKTsKLSAg
ICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBleHBhbmRlZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkOwotICAgIH0sCi0K
LSAgICBleHBhbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmxpbmVzQ291
bnQgPT09IDEpCi0gICAgICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuX3N5bmNEZWNvcmF0aW9u
c0ZvckxpbmVMaXN0ZW5lcih0aGlzLnN0YXJ0TGluZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2V4
cGFuZGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2V4cGFuZGVkID0g
dHJ1ZTsKLQotICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsK
LQotICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0gW107Ci0gICAgICAgIHZhciBwYXJl
bnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7Ci0gICAgICAgIGZvciAodmFy
IGkgPSB0aGlzLnN0YXJ0TGluZTsgaSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50
OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOwot
ICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobGluZVJvdywgdGhpcy5lbGVt
ZW50KTsKLSAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsK
LSAgICAgICAgfQotICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVu
dCk7Ci0gICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fc3luY0xpbmVIZWlnaHRMaXN0ZW5lcih0
aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdKTsKLQotICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwu
ZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICBjb2xsYXBzZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkKLSAgICAgICAgICAgIHRoaXMu
X2NodW5rZWRQYW5lbC5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKHRoaXMuc3RhcnRM
aW5lKTsKLQotICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHRoaXMu
bGluZXNDb3VudCA9PT0gMSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9j
aHVua2VkUGFuZWwuYmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAgICAgdmFyIGVsZW1lbnRJbnNl
cnRlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVk
TGluZVJvd3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5f
ZXhwYW5kZWRMaW5lUm93c1tpXTsKLSAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gbGlu
ZVJvdy5wYXJlbnRFbGVtZW50OwotICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJbnNlcnRlZCkgewotICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50SW5zZXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVt
ZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGxpbmVSb3cpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmVSb3cpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLl9jYWNoZWRSb3dz
LnB1c2gobGluZVJvdyk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMuX2V4cGFuZGVk
TGluZVJvd3M7Ci0KLSAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLmVuZERvbVVwZGF0ZXMoKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAg
IGdldCBoZWlnaHQoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dz
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NodW5rZWRQYW5lbC50b3RhbEhlaWdodCh0aGlz
LmVsZW1lbnQpOwotICAgICAgICByZXR1cm4gdGhpcy5fY2h1bmtlZFBhbmVsLnRvdGFsSGVpZ2h0
KHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0sIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbdGhpcy5f
ZXhwYW5kZWRMaW5lUm93cy5sZW5ndGggLSAxXSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgb2Zmc2V0VG9wKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAodGhpcy5fZXhwYW5kZWRMaW5lUm93cyAmJiB0aGlzLl9leHBhbmRlZExp
bmVSb3dzLmxlbmd0aCkgPyB0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdLm9mZnNldFRvcCA6IHRo
aXMuZWxlbWVudC5vZmZzZXRUb3A7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHJldHVybiB7RWxlbWVudH0KLSAgICAgKi8KLSAg
ICBfY3JlYXRlUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIGxp
bmVSb3cgPSB0aGlzLl9jaHVua2VkUGFuZWwuX2NhY2hlZFJvd3MucG9wKCkgfHwgZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGxpbmVSb3cubGluZU51bWJlciA9IGxpbmVO
dW1iZXI7Ci0gICAgICAgIGxpbmVSb3cuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlciI7
Ci0gICAgICAgIGxpbmVSb3cudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVyICsgMTsKLSAgICAgICAg
cmV0dXJuIGxpbmVSb3c7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsfQotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlfSBkZWxlZ2F0ZQotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsfSB0ZXh0TW9kZWwKLSAqIEBwYXJhbSB7P3N0cmluZ30g
dXJsCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IHN5bmNTY3JvbGxMaXN0ZW5lcgotICogQHBhcmFt
IHtmdW5jdGlvbihudW1iZXIpfSBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIKLSAqLwot
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgdGV4
dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGluZUxp
c3RlbmVyKQotewotICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLmNhbGwo
dGhpcywgdGV4dE1vZGVsKTsKLQotICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci0gICAg
dGhpcy5fc3luY1Njcm9sbExpc3RlbmVyID0gc3luY1Njcm9sbExpc3RlbmVyOwotICAgIHRoaXMu
X3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciA9IHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVM
aXN0ZW5lcjsKLQotICAgIHRoaXMuX3VybCA9IHVybDsKLSAgICB0aGlzLl9oaWdobGlnaHRlciA9
IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyKHRleHRNb2RlbCwgdGhpcy5f
aGlnaGxpZ2h0RGF0YVJlYWR5LmJpbmQodGhpcykpOwotICAgIHRoaXMuX3JlYWRPbmx5ID0gdHJ1
ZTsKLQotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItY29udGVudHMi
OwotICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0KLSAgICB0aGlzLl9jb250YWluZXIg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9jb250YWluZXIuY2xh
c3NOYW1lID0gImlubmVyLWNvbnRhaW5lciI7Ci0gICAgdGhpcy5fY29udGFpbmVyLnRhYkluZGV4
ID0gMDsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKLQot
ICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX2hhbmRsZUVs
ZW1lbnRGb2N1cy5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoInRleHRJbnB1dCIsIHRoaXMuX2hhbmRsZVRleHRJbnB1dC5iaW5kKHRoaXMpLCBm
YWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImN1dCIsIHRoaXMuX2hh
bmRsZUN1dC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImtleXByZXNzIiwgdGhpcy5faGFuZGxlS2V5UHJlc3MuYmluZCh0aGlzKSwgZmFsc2Up
OwotCi0gICAgdGhpcy5fc2hvd1doaXRlc3BhY2UgPSBXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNT
ZXR0aW5ncy5zaG93V2hpdGVzcGFjZUluRWRpdG9yLmlzRW5hYmxlZCgpOwotCi0gICAgdGhpcy5f
Y29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgdGhpcy5faGFuZGxlRm9jdXNlZC5i
aW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICB0aGlzLl9oaWdobGlnaHREZXNjcmlwdG9ycyA9IFtd
OwotCi0gICAgdGhpcy5fdG9rZW5IaWdobGlnaHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5Ub2tlbkhpZ2hsaWdodGVyKHRoaXMsIHRleHRNb2RlbCk7Ci0gICAgdGhp
cy5fYnJhY2VNYXRjaGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwuQnJhY2VN
YXRjaGVyKHRleHRNb2RlbCk7Ci0gICAgdGhpcy5fYnJhY2VIaWdobGlnaHRlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5CcmFjZUhpZ2hsaWdodENvbnRyb2xsZXIodGhp
cywgdGV4dE1vZGVsLCB0aGlzLl9icmFjZU1hdGNoZXIpOwotICAgIHRoaXMuX3NtYXJ0QnJhY2VD
b250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlNtYXJ0QnJh
Y2VDb250cm9sbGVyKHRoaXMsIHRleHRNb2RlbCwgdGhpcy5fYnJhY2VNYXRjaGVyKTsKLQotICAg
IHRoaXMuX2ZyZWVDYWNoZWRFbGVtZW50cygpOwotICAgIHRoaXMuYnVpbGRDaHVua3MoKTsKLSAg
ICB0aGlzLl9yZWdpc3RlclNob3J0Y3V0cygpOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5fQ29uc2VjdXRpdmVXaGl0ZXNwYWNlQ2hhcnMgPSB7Ci0gICAgMTogIiAiLAot
ICAgIDI6ICIgICIsCi0gICAgNDogIiAgICAiLAotICAgIDg6ICIgICAgICAgICIsCi0gICAgMTY6
ICIgICAgICAgICAgICAgICAgIgotfTsKLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVt
YmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbgotICAgICAqIEByZXR1cm4gez97c3Rh
cnRDb2x1bW46IG51bWJlciwgZW5kQ29sdW1uOiBudW1iZXIsIHR5cGU6IHN0cmluZ319Ci0gICAg
ICovCi0gICAgdG9rZW5BdFRleHRQb3NpdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1u
KQotICAgIHsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVz
Q291bnQgfHwgbGluZU51bWJlciA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
ICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAg
aWYgKGNvbHVtbiA+PSBsaW5lLmxlbmd0aCB8fCBjb2x1bW4gPCAwKQotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0
cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiKTsKLSAgICAgICAgaWYgKCFoaWdobGlnaHQp
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5BdFVuaGlnaGxpZ2h0ZWRMaW5lKGxpbmUs
IGNvbHVtbik7Ci0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmUodmFsdWUsIG9iamVjdCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHZhbHVlID49IG9iamVjdC5zdGFydENvbHVtbiAmJiB2YWx1
ZSA8PSBvYmplY3QuZW5kQ29sdW1uKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlIC0gb2JqZWN0LnN0YXJ0Q29sdW1uOwotICAgICAgICB9Ci0gICAg
ICAgIHZhciBpbmRleCA9IGJpbmFyeVNlYXJjaChjb2x1bW4sIGhpZ2hsaWdodC5yYW5nZXMsIGNv
bXBhcmUpOwotICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAgICAgdmFyIHJhbmdl
ID0gaGlnaGxpZ2h0LnJhbmdlc1tpbmRleF07Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgIHN0YXJ0Q29sdW1uOiByYW5nZS5zdGFydENvbHVtbiwKLSAgICAgICAgICAgICAg
ICBlbmRDb2x1bW46IHJhbmdlLmVuZENvbHVtbiwKLSAgICAgICAgICAgICAgICB0eXBlOiByYW5n
ZS50b2tlbgotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uCi0gICAgICogQHJldHVybiB7P3t4OiBudW1iZXIs
IHk6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9fQotICAgICAqLwotICAgIGN1cnNvclBvc2l0aW9u
VG9Db29yZGluYXRlczogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uKQotICAgIHsKLSAgICAg
ICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgfHwgbGluZU51
bWJlciA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIGxpbmUgPSB0
aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKGNvbHVtbiA+IGxp
bmUubGVuZ3RoIHx8IGNvbHVtbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAg
aWYgKCFjaHVuay5leHBhbmRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
IHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwotICAgICAg
ICB2YXIgcmFuZ2VzID0gW3sKLSAgICAgICAgICAgIHN0YXJ0Q29sdW1uOiBjb2x1bW4sCi0gICAg
ICAgICAgICBlbmRDb2x1bW46IGNvbHVtbiwKLSAgICAgICAgICAgIHRva2VuOiAibWVhc3VyZS1j
dXJzb3ItcG9zaXRpb24iCi0gICAgICAgIH1dOwotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhp
cy5zZWxlY3Rpb24oKTsKLQotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwotICAgICAg
ICB0aGlzLl9yZW5kZXJSYW5nZXMobGluZVJvdywgbGluZSwgcmFuZ2VzKTsKLSAgICAgICAgdmFy
IHNwYW5zID0gbGluZVJvdy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ3ZWJraXQtbWVhc3VyZS1j
dXJzb3ItcG9zaXRpb24iKTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRU
ZXh0RWRpdG9yKQotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3BhbnMubGVuZ3RoID09PSAw
KTsKLSAgICAgICAgdmFyIHRvdGFsT2Zmc2V0ID0gc3BhbnNbMF0udG90YWxPZmZzZXQoKTsKLSAg
ICAgICAgdmFyIGhlaWdodCA9IHNwYW5zWzBdLm9mZnNldEhlaWdodDsKLSAgICAgICAgdGhpcy5f
cGFpbnRMaW5lUm93cyhbbGluZVJvd10pOwotICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsK
LQotICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICB4OiB0b3RhbE9mZnNldC5sZWZ0LAotICAgICAgICAgICAgeTog
dG90YWxPZmZzZXQudG9wLAotICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQKLSAgICAgICAgfTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHgKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0geQotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQot
ICAgICAqLwotICAgIGNvb3JkaW5hdGVzVG9DdXJzb3JQb3NpdGlvbjogZnVuY3Rpb24oeCwgeSkK
LSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4
LCB5KTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgIHZhciBsaW5lUm93ID0gZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNz
KCJ3ZWJraXQtbGluZS1jb250ZW50Iik7Ci0gICAgICAgIGlmICghbGluZVJvdykKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxp
bmUobGluZVJvdy5saW5lTnVtYmVyKSArICIgIjsKLSAgICAgICAgdmFyIHJhbmdlcyA9IFtdOwot
ICAgICAgICBjb25zdCBwcmVmaXggPSAiY2hhcmFjdGVyLXBvc2l0aW9uLSI7Ci0gICAgICAgIGZv
cih2YXIgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICByYW5nZXMu
cHVzaCh7Ci0gICAgICAgICAgICAgICAgc3RhcnRDb2x1bW46IGksCi0gICAgICAgICAgICAgICAg
ZW5kQ29sdW1uOiBpLAotICAgICAgICAgICAgICAgIHRva2VuOiBwcmVmaXggKyBpCi0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVj
dGlvbigpOwotCi0gICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7Ci0gICAgICAgIHRoaXMu
X3JlbmRlclJhbmdlcyhsaW5lUm93LCBsaW5lLCByYW5nZXMpOwotICAgICAgICB2YXIgY2hhckVs
ZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpOwotICAgICAgICB0aGlzLl9w
YWludExpbmVSb3dzKFtsaW5lUm93XSk7Ci0gICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwot
Ci0gICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICAgICAgdmFy
IGNsYXNzTmFtZSA9IGNoYXJFbGVtZW50LmNsYXNzTmFtZTsKLSAgICAgICAgaWYgKGNsYXNzTmFt
ZS5pbmRleE9mKHByZWZpeCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
IHZhciBjb2x1bW4gPSBwYXJzZUludChjbGFzc05hbWUuc3Vic3RyaW5nKGNsYXNzTmFtZS5pbmRl
eE9mKHByZWZpeCkgKyBwcmVmaXgubGVuZ3RoKSwgMTApOwotCi0gICAgICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlLmNyZWF0ZUZyb21Mb2NhdGlvbihsaW5lUm93LmxpbmVOdW1iZXIs
IGNvbHVtbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5l
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbgotICAgICAqIEByZXR1cm4gez97c3RhcnRD
b2x1bW46IG51bWJlciwgZW5kQ29sdW1uOiBudW1iZXIsIHR5cGU6IHN0cmluZ319Ci0gICAgICov
Ci0gICAgX3Rva2VuQXRVbmhpZ2hsaWdodGVkTGluZTogZnVuY3Rpb24obGluZSwgY29sdW1uKQot
ICAgIHsKLSAgICAgICAgdmFyIHRva2VuaXplciA9IFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6
ZXIuUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUb2tlbml6ZXIodGhpcy5taW1lVHlwZSk7Ci0g
ICAgICAgIHRva2VuaXplci5jb25kaXRpb24gPSB0b2tlbml6ZXIuY3JlYXRlSW5pdGlhbENvbmRp
dGlvbigpOwotICAgICAgICB0b2tlbml6ZXIubGluZSA9IGxpbmU7Ci0gICAgICAgIHZhciBsYXN0
VG9rZW5pemVkQ29sdW1uID0gMDsKLSAgICAgICAgd2hpbGUgKGxhc3RUb2tlbml6ZWRDb2x1bW4g
PCBsaW5lLmxlbmd0aCkgewotICAgICAgICAgICAgdmFyIG5ld0NvbHVtbiA9IHRva2VuaXplci5u
ZXh0VG9rZW4obGFzdFRva2VuaXplZENvbHVtbik7Ci0gICAgICAgICAgICBpZiAoY29sdW1uIDwg
bmV3Q29sdW1uKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0b2tlbml6ZXIudG9rZW5UeXBlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgICAgICBzdGFydENvbHVtbjogbGFzdFRva2VuaXplZENvbHVtbiwK
LSAgICAgICAgICAgICAgICAgICAgZW5kQ29sdW1uOiBuZXdDb2x1bW4gLSAxLAotICAgICAgICAg
ICAgICAgICAgICB0eXBlOiB0b2tlbml6ZXIudG9rZW5UeXBlCi0gICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxhc3RUb2tlbml6ZWRDb2x1bW4g
PSBuZXdDb2x1bW47Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQot
ICAgIF9yZWdpc3RlclNob3J0Y3V0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGtl
eXMgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzOwotICAgICAgICB2YXIgbW9k
aWZpZXJzID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzOwotCi0gICAg
ICAgIHRoaXMuX3Nob3J0Y3V0cyA9IHt9OwotCi0gICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KGtleXMuRW50ZXIuY29kZSwgV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLk5vbmUpXSA9IHRoaXMuX2hhbmRsZUVu
dGVyS2V5LmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3Iu
S2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJ6IiwgbW9kaWZpZXJzLkN0cmxPck1ldGEpXSA9IHRo
aXMuX2hhbmRsZVVuZG9SZWRvLmJpbmQodGhpcywgZmFsc2UpOwotCi0gICAgICAgIHZhciBoYW5k
bGVSZWRvID0gdGhpcy5faGFuZGxlVW5kb1JlZG8uYmluZCh0aGlzLCB0cnVlKTsKLSAgICAgICAg
dGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoInoi
LCBtb2RpZmllcnMuU2hpZnQgfCBtb2RpZmllcnMuQ3RybE9yTWV0YSldID0gaGFuZGxlUmVkbzsK
LSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuaXNNYWMoKSkKLSAgICAgICAgICAgIHRoaXMuX3No
b3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJ5IiwgbW9kaWZp
ZXJzLkN0cmxPck1ldGEpXSA9IGhhbmRsZVJlZG87Ci0KLSAgICAgICAgdmFyIGhhbmRsZVRhYktl
eSA9IHRoaXMuX2hhbmRsZVRhYktleVByZXNzLmJpbmQodGhpcywgZmFsc2UpOwotICAgICAgICB2
YXIgaGFuZGxlU2hpZnRUYWJLZXkgPSB0aGlzLl9oYW5kbGVUYWJLZXlQcmVzcy5iaW5kKHRoaXMs
IHRydWUpOwotICAgICAgICB0aGlzLl9zaG9ydGN1dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hv
cnRjdXQubWFrZUtleShrZXlzLlRhYi5jb2RlKV0gPSBoYW5kbGVUYWJLZXk7Ci0gICAgICAgIHRo
aXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KGtleXMu
VGFiLmNvZGUsIG1vZGlmaWVycy5TaGlmdCldID0gaGFuZGxlU2hpZnRUYWJLZXk7Ci0KLSAgICAg
ICAgdmFyIGhvbWVLZXkgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKSA/IGtleXMuUmlnaHQgOiBrZXlz
LkhvbWU7Ci0gICAgICAgIHZhciBob21lTW9kaWZpZXIgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKSA/
IG1vZGlmaWVycy5NZXRhIDogbW9kaWZpZXJzLk5vbmU7Ci0gICAgICAgIHRoaXMuX3Nob3J0Y3V0
c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KGhvbWVLZXkuY29kZSwgaG9t
ZU1vZGlmaWVyKV0gPSB0aGlzLl9oYW5kbGVIb21lS2V5LmJpbmQodGhpcywgZmFsc2UpOwotICAg
ICAgICB0aGlzLl9zaG9ydGN1dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtl
eShob21lS2V5LmNvZGUsIGhvbWVNb2RpZmllciB8IG1vZGlmaWVycy5TaGlmdCldID0gdGhpcy5f
aGFuZGxlSG9tZUtleS5iaW5kKHRoaXMsIHRydWUpOwotCi0gICAgICAgIHRoaXMuX2NoYXJPdmVy
cmlkZXMgPSB7fTsKLQotICAgICAgICB0aGlzLl9zbWFydEJyYWNlQ29udHJvbGxlci5yZWdpc3Rl
clNob3J0Y3V0cyh0aGlzLl9zaG9ydGN1dHMpOwotICAgICAgICB0aGlzLl9zbWFydEJyYWNlQ29u
dHJvbGxlci5yZWdpc3RlckNoYXJPdmVycmlkZXModGhpcy5fY2hhck92ZXJyaWRlcyk7Ci0gICAg
fSwKLQotICAgIF9oYW5kbGVLZXlQcmVzczogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgY2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQud2hpY2gpOwotICAgICAgICB2
YXIgaGFuZGxlciA9IHRoaXMuX2NoYXJPdmVycmlkZXNbY2hhcl07Ci0gICAgICAgIGlmIChoYW5k
bGVyICYmIGhhbmRsZXIoKSkgewotICAgICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9rZXlEb3duQ29kZSA9
IGV2ZW50LmtleUNvZGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVh
bn0gc2hpZnQKLSAgICAgKi8KLSAgICBfaGFuZGxlSG9tZUtleTogZnVuY3Rpb24oc2hpZnQpCi0g
ICAgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24oKTsKLQotICAgICAg
ICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKHNlbGVjdGlvbi5lbmRMaW5lKTsKLSAg
ICAgICAgdmFyIGZpcnN0Tm9uQmxhbmtDaGFyYWN0ZXIgPSAwOwotICAgICAgICB3aGlsZSAoZmly
c3ROb25CbGFua0NoYXJhY3RlciA8IGxpbmUubGVuZ3RoKSB7Ci0gICAgICAgICAgICB2YXIgY2hh
ciA9IGxpbmUuY2hhckF0KGZpcnN0Tm9uQmxhbmtDaGFyYWN0ZXIpOwotICAgICAgICAgICAgaWYg
KGNoYXIgPT09ICIgIiB8fCBjaGFyID09PSAiXHQiKQotICAgICAgICAgICAgICAgICsrZmlyc3RO
b25CbGFua0NoYXJhY3RlcjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAoZmlyc3ROb25CbGFua0NoYXJhY3RlciA+PSBsaW5l
Lmxlbmd0aCB8fCBzZWxlY3Rpb24uZW5kQ29sdW1uID09PSBmaXJzdE5vbkJsYW5rQ2hhcmFjdGVy
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHNlbGVjdGlvbi5lbmRDb2x1
bW4gPSBmaXJzdE5vbkJsYW5rQ2hhcmFjdGVyOwotICAgICAgICBpZiAoIXNoaWZ0KQotICAgICAg
ICAgICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLmNvbGxhcHNlVG9FbmQoKTsKLSAgICAgICAgdGhp
cy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2V4Ci0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGNzc0NsYXNzCi0gICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAqLwot
ICAgIGhpZ2hsaWdodFJlZ2V4OiBmdW5jdGlvbihyZWdleCwgY3NzQ2xhc3MpCi0gICAgewotICAg
ICAgICB2YXIgaGlnaGxpZ2h0RGVzY3JpcHRvciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5SZWdleEhpZ2hsaWdodERlc2NyaXB0b3IobmV3IFJlZ0V4cChyZWdleCwgImci
KSwgY3NzQ2xhc3MpOwotICAgICAgICB0aGlzLl9oaWdobGlnaHREZXNjcmlwdG9ycy5wdXNoKGhp
Z2hsaWdodERlc2NyaXB0b3IpOwotICAgICAgICB0aGlzLl9yZXBhaW50TGluZVJvd3NBZmZlY3Rl
ZEJ5SGlnaGxpZ2h0RGVzY3JpcHRvcnMoW2hpZ2hsaWdodERlc2NyaXB0b3JdKTsKLSAgICAgICAg
cmV0dXJuIGhpZ2hsaWdodERlc2NyaXB0b3I7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBoaWdobGlnaHREZXNjcmlwdG9yCi0gICAgICovCi0gICAgcmVtb3ZlSGln
aGxpZ2h0OiBmdW5jdGlvbihoaWdobGlnaHREZXNjcmlwdG9yKQotICAgIHsKLSAgICAgICAgdGhp
cy5faGlnaGxpZ2h0RGVzY3JpcHRvcnMucmVtb3ZlKGhpZ2hsaWdodERlc2NyaXB0b3IpOwotICAg
ICAgICB0aGlzLl9yZXBhaW50TGluZVJvd3NBZmZlY3RlZEJ5SGlnaGxpZ2h0RGVzY3JpcHRvcnMo
W2hpZ2hsaWdodERlc2NyaXB0b3JdKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBj
c3NDbGFzcwotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBoaWdobGlnaHRS
YW5nZTogZnVuY3Rpb24ocmFuZ2UsIGNzc0NsYXNzKQotICAgIHsKLSAgICAgICAgdmFyIGhpZ2hs
aWdodERlc2NyaXB0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuUmFu
Z2VIaWdobGlnaHREZXNjcmlwdG9yKHJhbmdlLCBjc3NDbGFzcyk7Ci0gICAgICAgIHRoaXMuX2hp
Z2hsaWdodERlc2NyaXB0b3JzLnB1c2goaGlnaGxpZ2h0RGVzY3JpcHRvcik7Ci0gICAgICAgIHRo
aXMuX3JlcGFpbnRMaW5lUm93c0FmZmVjdGVkQnlIaWdobGlnaHREZXNjcmlwdG9ycyhbaGlnaGxp
Z2h0RGVzY3JpcHRvcl0pOwotICAgICAgICByZXR1cm4gaGlnaGxpZ2h0RGVzY3JpcHRvcjsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48V2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcj59IGhpZ2hsaWdodERlc2NyaXB0b3Jz
Ci0gICAgICovCi0gICAgX3JlcGFpbnRMaW5lUm93c0FmZmVjdGVkQnlIaWdobGlnaHREZXNjcmlw
dG9yczogZnVuY3Rpb24oaGlnaGxpZ2h0RGVzY3JpcHRvcnMpCi0gICAgewotICAgICAgICB2YXIg
dmlzaWJsZUZyb20gPSB0aGlzLnNjcm9sbFRvcCgpOwotICAgICAgICB2YXIgdmlzaWJsZVRvID0g
dmlzaWJsZUZyb20gKyB0aGlzLmNsaWVudEhlaWdodCgpOwotCi0gICAgICAgIHZhciB2aXNpYmxl
Q2h1bmtzID0gdGhpcy5maW5kVmlzaWJsZUNodW5rcyh2aXNpYmxlRnJvbSwgdmlzaWJsZVRvKTsK
LQotICAgICAgICB2YXIgYWZmZWN0ZWRMaW5lUm93cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBp
ID0gdmlzaWJsZUNodW5rcy5zdGFydDsgaSA8IHZpc2libGVDaHVua3MuZW5kOyArK2kpIHsKLSAg
ICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbaV07Ci0gICAgICAgICAgICBp
ZiAoIWNodW5rLmV4cGFuZGVkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBmb3IgKHZhciBsaW5lTnVtYmVyID0gY2h1bmsuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDwg
Y2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsgKytsaW5lTnVtYmVyKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBjaHVuay5leHBhbmRlZExpbmVSb3cobGluZU51bWJl
cik7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5l
TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgaGlnaGxpZ2h0RGVz
Y3JpcHRvcnMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdo
dERlc2NyaXB0b3JzW2pdLmFmZmVjdHNMaW5lKGxpbmVOdW1iZXIsIGxpbmUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZmZlY3RlZExpbmVSb3dzLnB1c2gobGluZVJvdyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoYWZmZWN0ZWRM
aW5lUm93cy5sZW5ndGggPT09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBz
ZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbigpOwotICAgICAgICB0aGlzLl9wYWludExpbmVSb3dz
KGFmZmVjdGVkTGluZVJvd3MpOwotICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVj
dGlvbik7Ci0gICAgfSwKLQotICAgIHJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJlc2l6ZS5jYWxs
KHRoaXMpOwotICAgICAgICB0aGlzLl9yZXBhaW50TGluZVJvd3NBZmZlY3RlZEJ5SGlnaGxpZ2h0
RGVzY3JpcHRvcnModGhpcy5faGlnaGxpZ2h0RGVzY3JpcHRvcnMpOwotICAgIH0sCi0KLSAgICB3
YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fYm91bmRTZWxlY3Rpb25D
aGFuZ2VMaXN0ZW5lciA9IHRoaXMuX2hhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpOwot
ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlz
Ll9ib3VuZFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyLCBmYWxzZSk7Ci0KLSAgICAgICAgdGhpcy5f
aXNTaG93aW5nID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fYXR0YWNoTXV0YXRpb25PYnNlcnZlcigp
OwotICAgIH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZG9j
dW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5fYm91bmRT
ZWxlY3Rpb25DaGFuZ2VMaXN0ZW5lciwgZmFsc2UpOwotICAgICAgICBkZWxldGUgdGhpcy5fYm91
bmRTZWxlY3Rpb25DaGFuZ2VMaXN0ZW5lcjsKLQotICAgICAgICB0aGlzLl9kZXRhY2hNdXRhdGlv
bk9ic2VydmVyKCk7Ci0gICAgICAgIHRoaXMuX2lzU2hvd2luZyA9IGZhbHNlOwotICAgICAgICB0
aGlzLl9mcmVlQ2FjaGVkRWxlbWVudHMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtFbGVtZW50fSBldmVudFRhcmdldAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNv
bnRleHRNZW51fSBjb250ZXh0TWVudQotICAgICAqLwotICAgIHBvcHVsYXRlQ29udGV4dE1lbnU6
IGZ1bmN0aW9uKGV2ZW50VGFyZ2V0LCBjb250ZXh0TWVudSkKLSAgICB7Ci0gICAgICAgIHZhciB0
YXJnZXQgPSB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGV2ZW50VGFyZ2V0KTsKLSAgICAg
ICAgdGhpcy5fZGVsZWdhdGUucG9wdWxhdGVUZXh0QXJlYUNvbnRleHRNZW51KGNvbnRleHRNZW51
LCB0YXJnZXQgJiYgdGFyZ2V0LmxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHRleHRSYW5nZQotICAgICAqLwotICAg
IHNldFNlbGVjdGlvbjogZnVuY3Rpb24odGV4dFJhbmdlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
bGFzdFNlbGVjdGlvbiA9IHRleHRSYW5nZTsKLSAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc0Fu
Y2VzdG9yKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKQotICAgICAgICAgICAgdGhpcy5fcmVzdG9y
ZVNlbGVjdGlvbih0ZXh0UmFuZ2UpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlRm9jdXNlZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2xhc3RTZWxlY3Rpb24pCi0gICAgICAg
ICAgICB0aGlzLnNldFNlbGVjdGlvbih0aGlzLl9sYXN0U2VsZWN0aW9uKTsKLSAgICB9LAotCi0g
ICAgX2F0dGFjaE11dGF0aW9uT2JzZXJ2ZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy5faXNTaG93aW5nKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0
aGlzLl9tdXRhdGlvbk9ic2VydmVyKQotICAgICAgICAgICAgdGhpcy5fbXV0YXRpb25PYnNlcnZl
ci5kaXNjb25uZWN0KCk7Ci0gICAgICAgIHRoaXMuX211dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTm9u
TGVha2luZ011dGF0aW9uT2JzZXJ2ZXIodGhpcy5faGFuZGxlTXV0YXRpb25zLmJpbmQodGhpcykp
OwotICAgICAgICB0aGlzLl9tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5fY29udGFpbmVy
LCB7IHN1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9
KTsKLSAgICB9LAotCi0gICAgX2RldGFjaE11dGF0aW9uT2JzZXJ2ZXI6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5faXNTaG93aW5nKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmICh0aGlzLl9tdXRhdGlvbk9ic2VydmVyKSB7Ci0gICAgICAgICAgICB0aGlz
Ll9tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9tdXRhdGlvbk9ic2VydmVyOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQotICAgICAqLwotICAgIHNldCBtaW1lVHlwZShtaW1l
VHlwZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLm1pbWVUeXBlID0gbWltZVR5
cGU7Ci0gICAgfSwKLQotICAgIGdldCBtaW1lVHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5faGlnaGxpZ2h0ZXIubWltZVR5cGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gcmVhZE9ubHkKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcXVlc3RG
b2N1cwotICAgICAqLwotICAgIHNldFJlYWRPbmx5OiBmdW5jdGlvbihyZWFkT25seSwgcmVxdWVz
dEZvY3VzKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5ID09PSByZWFkT25seSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwot
ICAgICAgICB0aGlzLl9yZWFkT25seSA9IHJlYWRPbmx5OwotICAgICAgICBpZiAodGhpcy5fcmVh
ZE9ubHkpCi0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlU3R5bGVDbGFzcygidGV4
dC1lZGl0b3ItZWRpdGFibGUiKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9j
b250YWluZXIuYWRkU3R5bGVDbGFzcygidGV4dC1lZGl0b3ItZWRpdGFibGUiKTsKLSAgICAgICAg
ICAgIGlmIChyZXF1ZXN0Rm9jdXMpCi0gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0
aW9uT25TdGFydEVkaXRpbmcoKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmVuZERvbVVwZGF0
ZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAg
Ki8KLSAgICByZWFkT25seTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X3JlYWRPbmx5OwotICAgIH0sCi0KLSAgICBfaGFuZGxlRWxlbWVudEZvY3VzOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3JlYWRPbmx5KQotICAgICAgICAgICAgdGhpcy5f
Y29udGFpbmVyLmZvY3VzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0Vs
ZW1lbnR9Ci0gICAgICovCi0gICAgZGVmYXVsdEZvY3VzZWRFbGVtZW50OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpCi0gICAgICAgICAgICByZXR1cm4gdGhp
cy5lbGVtZW50OwotICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyOwotICAgIH0sCi0KLSAg
ICBfdXBkYXRlU2VsZWN0aW9uT25TdGFydEVkaXRpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIC8vIGZvY3VzKCkgbmVlZHMgdG8gZ28gZmlyc3QgZm9yIHRoZSBjYXNlIHdoZW4gdGhlIGxh
c3Qgc2VsZWN0aW9uIHdhcyBpbnNpZGUgdGhlIGVkaXRvciBhbmQKLSAgICAgICAgLy8gdGhlICJF
ZGl0IiBidXR0b24gd2FzIGNsaWNrZWQuIEluIHRoaXMgY2FzZSB3ZSBiYWlsIGF0IHRoZSBjaGVj
ayBiZWxvdywgYnV0IHRoZQotICAgICAgICAvLyBlZGl0b3IgZG9lcyBub3QgcmVjZWl2ZSB0aGUg
Zm9jdXMsIHRodXMgIkVzYyIgZG9lcyBub3QgY2FuY2VsIGVkaXRpbmcgdW50aWwgYXQgbGVhc3QK
LSAgICAgICAgLy8gb25lIGNoYW5nZSBoYXMgYmVlbiBtYWRlIHRvIHRoZSBlZGl0b3IgY29udGVu
dHMuCi0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5mb2N1cygpOwotICAgICAgICB2YXIgc2VsZWN0
aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdl
Q291bnQpIHsKLSAgICAgICAgICAgIHZhciBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IHNlbGVj
dGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwotICAgICAgICAgICAg
aWYgKHRoaXMuX2NvbnRhaW5lci5pc1NlbGZPckFuY2VzdG9yKGNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzZWxl
Y3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7Ci0gICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7Ci0gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuX2NvbnRhaW5lciwgMCk7
Ci0gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLl9jb250YWluZXIsIDApOwotICAgICAgICBzZWxl
Y3Rpb24uYWRkUmFuZ2UocmFuZ2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCi0gICAgICovCi0gICAgbWFya0FuZFJldmVh
bFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yYW5nZVRv
TWFyaykgewotICAgICAgICAgICAgdmFyIG1hcmtlZExpbmUgPSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydExpbmU7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcmFuZ2VUb01hcms7Ci0gICAgICAg
ICAgICAvLyBSZW1vdmUgdGhlIG1hcmtlZCByZWdpb24gaW1tZWRpYXRlbHkuCi0gICAgICAgICAg
ICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5j
aHVua0ZvckxpbmUobWFya2VkTGluZSk7Ci0gICAgICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBj
aHVuay5leHBhbmRlZCgpOwotICAgICAgICAgICAgY2h1bmsuY29sbGFwc2UoKTsKLSAgICAgICAg
ICAgIGNodW5rLnVwZGF0ZUNvbGxhcHNlZExpbmVSb3coKTsKLSAgICAgICAgICAgIGlmICh3YXNF
eHBhbmRlZCkKLSAgICAgICAgICAgICAgICBjaHVuay5leHBhbmQoKTsKLSAgICAgICAgICAgIHRo
aXMuZW5kRG9tVXBkYXRlcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhbmdlKSB7Ci0g
ICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOwotICAgICAgICAgICAgdGhpcy5y
ZXZlYWxMaW5lKHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlz
Lm1ha2VMaW5lQUNodW5rKHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgICAgICB0aGlzLl9wYWlu
dExpbmVzKGNodW5rLnN0YXJ0TGluZSwgY2h1bmsuc3RhcnRMaW5lICsgMSk7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX21h
cmtlZFJhbmdlRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZGVsZXRlIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBoaWdobGln
aHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5jbGVhckxp
bmVIaWdobGlnaHQoKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lID0gbGluZU51bWJl
cjsKLSAgICAgICAgdGhpcy5yZXZlYWxMaW5lKGxpbmVOdW1iZXIpOwotCi0gICAgICAgIGlmICgh
dGhpcy5fcmVhZE9ubHkpCi0gICAgICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKFdlYklu
c3BlY3Rvci5UZXh0UmFuZ2UuY3JlYXRlRnJvbUxvY2F0aW9uKGxpbmVOdW1iZXIsIDApLCBmYWxz
ZSk7Ci0KLSAgICAgICAgdGhpcy5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtaGln
aGxpZ2h0ZWQtbGluZSIpOwotICAgIH0sCi0KLSAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lID09
PSAibnVtYmVyIikgewotICAgICAgICAgICAgdGhpcy5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2hp
Z2hsaWdodGVkTGluZSwgIndlYmtpdC1oaWdobGlnaHRlZC1saW5lIik7Ci0gICAgICAgICAgICBk
ZWxldGUgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9m
cmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NhY2hl
ZFNwYW5zID0gW107Ci0gICAgICAgIHRoaXMuX2NhY2hlZFRleHROb2RlcyA9IFtdOwotICAgICAg
ICB0aGlzLl9jYWNoZWRSb3dzID0gW107Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gcmVkbwotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAg
X2hhbmRsZVVuZG9SZWRvOiBmdW5jdGlvbihyZWRvKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
cmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aGlzLmJl
Z2luVXBkYXRlcygpOwotCi0gICAgICAgIHZhciByYW5nZSA9IHJlZG8gPyB0aGlzLl90ZXh0TW9k
ZWwucmVkbygpIDogdGhpcy5fdGV4dE1vZGVsLnVuZG8oKTsKLQotICAgICAgICB0aGlzLmVuZFVw
ZGF0ZXMoKTsKLQotICAgICAgICAvLyBSZXN0b3JlIGxvY2F0aW9uIHBvc3QtcmVwYWludC4KLSAg
ICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihyYW5n
ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hpZnRLZXkKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQot
ICAgICAqLwotICAgIF9oYW5kbGVUYWJLZXlQcmVzczogZnVuY3Rpb24oc2hpZnRLZXkpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5yZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbigpOwotICAgICAgICBp
ZiAoIXNlbGVjdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIg
cmFuZ2UgPSBzZWxlY3Rpb24ubm9ybWFsaXplKCk7Ci0KLSAgICAgICAgdGhpcy5iZWdpblVwZGF0
ZXMoKTsKLQotICAgICAgICB2YXIgbmV3UmFuZ2U7Ci0gICAgICAgIHZhciByYW5nZVdhc0VtcHR5
ID0gcmFuZ2UuaXNFbXB0eSgpOwotICAgICAgICBpZiAoc2hpZnRLZXkpCi0gICAgICAgICAgICBu
ZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC51bmluZGVudExpbmVzKHJhbmdlKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmFuZ2VXYXNFbXB0eSkKLSAgICAgICAgICAgICAgICBu
ZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIFdlYkluc3BlY3Rvci5z
ZXR0aW5ncy50ZXh0RWRpdG9ySW5kZW50LmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5pbmRlbnRMaW5lcyhyYW5nZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmVuZFVwZGF0ZXMoKTsKLSAgICAgICAgaWYgKHJh
bmdlV2FzRW1wdHkpCi0gICAgICAgICAgICBuZXdSYW5nZS5zdGFydENvbHVtbiA9IG5ld1Jhbmdl
LmVuZENvbHVtbjsKLSAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihuZXdSYW5nZSwgdHJ1
ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBfaGFuZGxlRW50ZXJLZXk6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24o
KTsKLSAgICAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICByYW5nZSA9IHJhbmdlLm5vcm1hbGl6ZSgpOwotCi0gICAgICAgIGlmIChyYW5nZS5lbmRD
b2x1bW4gPT09IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIGxp
bmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShyYW5nZS5zdGFydExpbmUpOwotICAgICAgICB2YXIg
bGluZVByZWZpeCA9IGxpbmUuc3Vic3RyaW5nKDAsIHJhbmdlLnN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgdmFyIGluZGVudE1hdGNoID0gbGluZVByZWZpeC5tYXRjaCgvXlxzKy8pOwotICAgICAgICB2
YXIgY3VycmVudEluZGVudCA9IGluZGVudE1hdGNoID8gaW5kZW50TWF0Y2hbMF0gOiAiIjsKLQot
ICAgICAgICB2YXIgdGV4dEVkaXRvckluZGVudCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy50ZXh0
RWRpdG9ySW5kZW50LmdldCgpOwotICAgICAgICB2YXIgaW5kZW50ID0gV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNb2RlbC5lbmRzV2l0aEJyYWNrZXRSZWdleC50ZXN0KGxpbmVQcmVmaXgpID8gY3Vy
cmVudEluZGVudCArIHRleHRFZGl0b3JJbmRlbnQgOiBjdXJyZW50SW5kZW50OwotCi0gICAgICAg
IGlmICghaW5kZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRoaXMu
YmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAgICAgdmFyIGxpbmVCcmVhayA9IHRoaXMuX3RleHRN
b2RlbC5saW5lQnJlYWs7Ci0gICAgICAgIHZhciBuZXdSYW5nZTsKLSAgICAgICAgaWYgKHJhbmdl
LmlzRW1wdHkoKSAmJiBsaW5lLnN1YnN0cihyYW5nZS5lbmRDb2x1bW4gLSAxLCAyKSA9PT0gJ3t9
JykgewotICAgICAgICAgICAgLy8ge3x9Ci0gICAgICAgICAgICAvLyBiZWNvbWVzCi0gICAgICAg
ICAgICAvLyB7Ci0gICAgICAgICAgICAvLyAgICAgfAotICAgICAgICAgICAgLy8gfQotICAgICAg
ICAgICAgbmV3UmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwuZWRpdFJhbmdlKHJhbmdlLCBsaW5lQnJl
YWsgKyBpbmRlbnQgKyBsaW5lQnJlYWsgKyBjdXJyZW50SW5kZW50KTsKLSAgICAgICAgICAgIG5l
d1JhbmdlLmVuZExpbmUtLTsKLSAgICAgICAgICAgIG5ld1JhbmdlLmVuZENvbHVtbiArPSB0ZXh0
RWRpdG9ySW5kZW50Lmxlbmd0aDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXdSYW5n
ZSA9IHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIGxpbmVCcmVhayArIGluZGVudCk7
Ci0KLSAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7Ci0gICAgICAgIHRoaXMuX3Jlc3RvcmVT
ZWxlY3Rpb24obmV3UmFuZ2UuY29sbGFwc2VUb0VuZCgpLCB0cnVlKTsKLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVO
dW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY2h1bmtOdW1iZXIKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW49fSBjcmVhdGVTdWZmaXhDaHVuawotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAg
ICAgKi8KLSAgICBzcGxpdENodW5rT25BTGluZTogZnVuY3Rpb24obGluZU51bWJlciwgY2h1bmtO
dW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IHRoaXMuc2VsZWN0aW9uKCk7Ci0gICAgICAgIHZhciBjaHVuayA9IFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5zcGxpdENodW5rT25BTGluZS5jYWxsKHRoaXMs
IGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCBjcmVhdGVTdWZmaXhDaHVuayk7Ci0gICAgICAgIHRo
aXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGNodW5rOwot
ICAgIH0sCi0KLSAgICBiZWdpbkRvbVVwZGF0ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsKQotICAgICAgICAgICAgdGhpcy5f
ZGV0YWNoTXV0YXRpb25PYnNlcnZlcigpOwotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYmVnaW5Eb21VcGRhdGVzLmNhbGwodGhpcyk7Ci0gICAg
fSwKLQotICAgIGVuZERvbVVwZGF0ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5lbmREb21VcGRhdGVzLmNh
bGwodGhpcyk7Ci0gICAgICAgIGlmICghdGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsKQot
ICAgICAgICAgICAgdGhpcy5fYXR0YWNoTXV0YXRpb25PYnNlcnZlcigpOwotICAgIH0sCi0KLSAg
ICBidWlsZENodW5rczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgKytpKQotICAgICAgICAgICAgdGhpcy5f
dGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShpLCAiaGlnaGxpZ2h0Iik7Ci0KLSAgICAgICAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmJ1aWxkQ2h1bmtzLmNh
bGwodGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFy
dExpbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQotICAgICAqIEByZXR1cm4ge1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rfQotICAgICAqLwotICAgIGNyZWF0ZU5ld0No
dW5rOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCi0gICAgewotICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKHRoaXMsIHN0YXJ0TGluZSwgZW5k
TGluZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5k
ZXgKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9JbmRleAotICAgICAqLwotICAgIGV4cGFuZENo
dW5rczogZnVuY3Rpb24oZnJvbUluZGV4LCB0b0luZGV4KQotICAgIHsKLSAgICAgICAgdmFyIGxh
c3RDaHVuayA9IHRoaXMuX3RleHRDaHVua3NbdG9JbmRleCAtIDFdOwotICAgICAgICB2YXIgbGFz
dFZpc2libGVMaW5lID0gbGFzdENodW5rLnN0YXJ0TGluZSArIGxhc3RDaHVuay5saW5lc0NvdW50
OwotCi0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbigpOwotCi0gICAgICAg
IHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lciA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2hpZ2hs
aWdodGVyLmhpZ2hsaWdodChsYXN0VmlzaWJsZUxpbmUpOwotICAgICAgICBkZWxldGUgdGhpcy5f
bXV0ZUhpZ2hsaWdodExpc3RlbmVyOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
Q2h1bmtlZFBhbmVsLnByb3RvdHlwZS5leHBhbmRDaHVua3MuY2FsbCh0aGlzLCBmcm9tSW5kZXgs
IHRvSW5kZXgpOwotCi0gICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21MaW5lCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IHRvTGluZQotICAgICAqLwotICAgIF9oaWdobGlnaHREYXRhUmVh
ZHk6IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
bXV0ZUhpZ2hsaWdodExpc3RlbmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlz
Ll9wYWludExpbmVzKGZyb21MaW5lLCB0b0xpbmUsIHRydWUgLypyZXN0b3JlU2VsZWN0aW9uKi8p
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUxpbmUKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gdG9MaW5lCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gcmVz
dG9yZVNlbGVjdGlvbgotICAgICAqLwotICAgIF9wYWludExpbmVzOiBmdW5jdGlvbihmcm9tTGlu
ZSwgdG9MaW5lLCByZXN0b3JlU2VsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGxpbmVSb3dz
ID0gW107Ci0gICAgICAgIHZhciBjaHVuazsKLSAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciA9
IGZyb21MaW5lOyBsaW5lTnVtYmVyIDwgdG9MaW5lOyArK2xpbmVOdW1iZXIpIHsKLSAgICAgICAg
ICAgIGlmICghY2h1bmsgfHwgbGluZU51bWJlciA8IGNodW5rLnN0YXJ0TGluZSB8fCBsaW5lTnVt
YmVyID49IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQpCi0gICAgICAgICAgICAg
ICAgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIHZh
ciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwotICAgICAgICAg
ICAgaWYgKCFsaW5lUm93KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
bGluZVJvd3MucHVzaChsaW5lUm93KTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGluZVJvd3Mu
bGVuZ3RoID09PSAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzZWxlY3Rp
b247Ci0gICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKQotICAgICAgICAgICAgc2VsZWN0aW9u
ID0gdGhpcy5zZWxlY3Rpb24oKTsKLQotICAgICAgICB0aGlzLl9wYWludExpbmVSb3dzKGxpbmVS
b3dzKTsKLQotICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbikKLSAgICAgICAgICAgIHRoaXMu
X3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtBcnJheS48RWxlbWVudD59IGxpbmVSb3dzCi0gICAgICovCi0gICAgX3BhaW50TGlu
ZVJvd3M6IGZ1bmN0aW9uKGxpbmVSb3dzKQotICAgIHsKLSAgICAgICAgdmFyIGhpZ2hsaWdodCA9
IHt9OwotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwotICAgICAgICBmb3IodmFyIGkg
PSAwOyBpIDwgdGhpcy5faGlnaGxpZ2h0RGVzY3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBoaWdobGlnaHREZXNjcmlwdG9yID0gdGhpcy5faGlnaGxpZ2h0RGVzY3JpcHRv
cnNbaV07Ci0gICAgICAgICAgICB0aGlzLl9tZWFzdXJlSGlnaGxpZ2h0RGVzY3JpcHRvcihoaWdo
bGlnaHQsIGxpbmVSb3dzLCBoaWdobGlnaHREZXNjcmlwdG9yKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsaW5lUm93cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IHRoaXMuX3BhaW50TGluZShsaW5lUm93c1tpXSwgaGlnaGxpZ2h0W2xpbmVSb3dzW2ldLmxpbmVO
dW1iZXJdKTsKLQotICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtPYmplY3QuPG51bWJlciwgQXJyYXkuPFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpblBhbmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0Pj59IGhpZ2hsaWdodAotICAg
ICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBsaW5lUm93cwotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcn0gaGlnaGxp
Z2h0RGVzY3JpcHRvcgotICAgICAqLwotICAgIF9tZWFzdXJlSGlnaGxpZ2h0RGVzY3JpcHRvcjog
ZnVuY3Rpb24oaGlnaGxpZ2h0LCBsaW5lUm93cywgaGlnaGxpZ2h0RGVzY3JpcHRvcikKLSAgICB7
Ci0gICAgICAgIHZhciByb3dzVG9NZWFzdXJlID0gW107Ci0gICAgICAgIGZvcih2YXIgaSA9IDA7
IGkgPCBsaW5lUm93cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBs
aW5lUm93c1tpXTsKLSAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUo
bGluZVJvdy5saW5lTnVtYmVyKTsKLSAgICAgICAgICAgIHZhciByYW5nZXMgPSBoaWdobGlnaHRE
ZXNjcmlwdG9yLnJhbmdlc0ZvckxpbmUobGluZVJvdy5saW5lTnVtYmVyLCBsaW5lKTsKLSAgICAg
ICAgICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IHJhbmdlcy5sZW5ndGg7ICsraikKLSAg
ICAgICAgICAgICAgICByYW5nZXNbal0udG9rZW4gPSAibWVhc3VyZS1zcGFuIjsKLQotICAgICAg
ICAgICAgdGhpcy5fcmVuZGVyUmFuZ2VzKGxpbmVSb3csIGxpbmUsIHJhbmdlcyk7Ci0gICAgICAg
ICAgICByb3dzVG9NZWFzdXJlLnB1c2gobGluZVJvdyk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
b3IodmFyIGkgPSAwOyBpIDwgcm93c1RvTWVhc3VyZS5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgdmFyIGxpbmVSb3cgPSByb3dzVG9NZWFzdXJlW2ldOwotICAgICAgICAgICAgdmFyIGxpbmVO
dW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICB2YXIgbWV0cmljcyA9IHRo
aXMuX21lYXN1cmVTcGFucyhsaW5lUm93KTsKLQotICAgICAgICAgICAgaWYgKCFoaWdobGlnaHRb
bGluZU51bWJlcl0pCi0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0W2xpbmVOdW1iZXJdID0gW107
Ci0KLSAgICAgICAgICAgIGhpZ2hsaWdodFtsaW5lTnVtYmVyXS5wdXNoKG5ldyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5MaW5lT3ZlcmxheUhpZ2hsaWdodChtZXRyaWNzLCBoaWdo
bGlnaHREZXNjcmlwdG9yLmNzc0NsYXNzKCkpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGxpbmVSb3cKLSAgICAgKiBAcmV0dXJuIHtBcnJh
eS48V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuRWxlbWVudE1ldHJpY3M+fQotICAg
ICAqLwotICAgIF9tZWFzdXJlU3BhbnM6IGZ1bmN0aW9uKGxpbmVSb3cpCi0gICAgewotICAgICAg
ICB2YXIgc3BhbnMgPSBsaW5lUm93LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndlYmtpdC1tZWFz
dXJlLXNwYW4iKTsKLSAgICAgICAgdmFyIG1ldHJpY3MgPSBbXTsKLSAgICAgICAgZm9yKHZhciBp
ID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgbWV0cmljcy5wdXNoKG5l
dyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5FbGVtZW50TWV0cmljcyhzcGFuc1tp
XSkpOwotICAgICAgICByZXR1cm4gbWV0cmljczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtFbGVtZW50fSBsaW5lUm93Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5MaW5lT3ZlcmxheUhpZ2hsaWdodH0gaGlnaGxpZ2h0Ci0gICAgICov
Ci0gICAgX2FwcGVuZE92ZXJsYXlIaWdobGlnaHQ6IGZ1bmN0aW9uKGxpbmVSb3csIGhpZ2hsaWdo
dCkKLSAgICB7Ci0gICAgICAgIHZhciBtZXRyaWNzID0gaGlnaGxpZ2h0Lm1ldHJpY3M7Ci0gICAg
ICAgIHZhciBjc3NDbGFzcyA9IGhpZ2hsaWdodC5jc3NDbGFzczsKLSAgICAgICAgZm9yKHZhciBp
ID0gMDsgaSA8IG1ldHJpY3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBoaWdobGln
aHRTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgaGln
aGxpZ2h0U3Bhbi5faXNPdmVybGF5SGlnaGxpZ2h0RWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAg
ICBoaWdobGlnaHRTcGFuLmFkZFN0eWxlQ2xhc3MoY3NzQ2xhc3MpOwotICAgICAgICAgICAgaGln
aGxpZ2h0U3Bhbi5zdHlsZS5sZWZ0ID0gbWV0cmljc1tpXS5sZWZ0ICsgInB4IjsKLSAgICAgICAg
ICAgIGhpZ2hsaWdodFNwYW4uc3R5bGUud2lkdGggPSBtZXRyaWNzW2ldLndpZHRoICsgInB4IjsK
LSAgICAgICAgICAgIGhpZ2hsaWdodFNwYW4uc3R5bGUuaGVpZ2h0ID0gbWV0cmljc1tpXS5oZWln
aHQgKyAicHgiOwotICAgICAgICAgICAgaGlnaGxpZ2h0U3Bhbi5hZGRTdHlsZUNsYXNzKCJ0ZXh0
LWVkaXRvci1vdmVybGF5LWhpZ2hsaWdodCIpOwotICAgICAgICAgICAgbGluZVJvdy5pbnNlcnRC
ZWZvcmUoaGlnaGxpZ2h0U3BhbiwgbGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdwot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lCi0gICAgICogQHBhcmFtIHtBcnJheS48e3N0YXJ0
Q29sdW1uOiBudW1iZXIsIGVuZENvbHVtbjogbnVtYmVyLCB0b2tlbjogP3N0cmluZ30+fSByYW5n
ZXMKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzcGxpdFdoaXRlc3BhY2VTZXF1ZW5jZXMKLSAg
ICAgKi8KLSAgICBfcmVuZGVyUmFuZ2VzOiBmdW5jdGlvbihsaW5lUm93LCBsaW5lLCByYW5nZXMs
IHNwbGl0V2hpdGVzcGFjZVNlcXVlbmNlcykKLSAgICB7Ci0gICAgICAgIHZhciBkZWNvcmF0aW9u
c0VsZW1lbnQgPSBsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudDsKLQotICAgICAgICBpZiAoIWRl
Y29yYXRpb25zRWxlbWVudCkKLSAgICAgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4oKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
ICAgIHZhciBjaGlsZCA9IGxpbmVSb3cuZmlyc3RDaGlsZDsKLSAgICAgICAgICAgICAgICBpZiAo
IWNoaWxkIHx8IGNoaWxkID09PSBkZWNvcmF0aW9uc0VsZW1lbnQpCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGQoY2hpbGQpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFsaW5lKQotICAgICAgICAg
ICAgbGluZVJvdy5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSwgZGVj
b3JhdGlvbnNFbGVtZW50KTsKLQotICAgICAgICB2YXIgcGxhaW5UZXh0U3RhcnQgPSAwOwotICAg
ICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICB2YXIgcmFuZ2VTdGFydCA9IHJhbmdlc1tpXS5zdGFydENvbHVtbjsKLSAgICAgICAgICAgIHZh
ciByYW5nZUVuZCA9IHJhbmdlc1tpXS5lbmRDb2x1bW47Ci0KLSAgICAgICAgICAgIGlmIChwbGFp
blRleHRTdGFydCA8IHJhbmdlU3RhcnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRT
cGFuQmVmb3JlKGxpbmVSb3csIGRlY29yYXRpb25zRWxlbWVudCwgbGluZS5zdWJzdHJpbmcocGxh
aW5UZXh0U3RhcnQsIHJhbmdlU3RhcnQpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHNwbGl0V2hpdGVzcGFjZVNlcXVlbmNlcyAmJiByYW5nZXNbaV0udG9rZW4gPT09ICJ3aGl0
ZXNwYWNlIikKLSAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJXaGl0ZXNwYWNlQ2hhcnNXaXRo
Rml4ZWRTaXplU3BhbnMobGluZVJvdywgZGVjb3JhdGlvbnNFbGVtZW50LCByYW5nZUVuZCAtIHJh
bmdlU3RhcnQgKyAxKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9p
bnNlcnRTcGFuQmVmb3JlKGxpbmVSb3csIGRlY29yYXRpb25zRWxlbWVudCwgbGluZS5zdWJzdHJp
bmcocmFuZ2VTdGFydCwgcmFuZ2VFbmQgKyAxKSwgcmFuZ2VzW2ldLnRva2VuID8gIndlYmtpdC0i
ICsgcmFuZ2VzW2ldLnRva2VuIDogIiIpOwotICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBy
YW5nZUVuZCArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0IDwgbGlu
ZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRoaXMuX2luc2VydFNwYW5CZWZvcmUobGluZVJvdywg
ZGVjb3JhdGlvbnNFbGVtZW50LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5s
ZW5ndGgpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0Vs
ZW1lbnR9IGxpbmVSb3cKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGRlY29yYXRpb25zRWxlbWVu
dAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGgKLSAgICAgKi8KLSAgICBfcmVuZGVyV2hp
dGVzcGFjZUNoYXJzV2l0aEZpeGVkU2l6ZVNwYW5zOiBmdW5jdGlvbihsaW5lUm93LCBkZWNvcmF0
aW9uc0VsZW1lbnQsIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIHdoaXRlc3BhY2VM
ZW5ndGggPSAxNjsgd2hpdGVzcGFjZUxlbmd0aCA+IDA7IHdoaXRlc3BhY2VMZW5ndGggPj49IDEp
IHsKLSAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJ3ZWJraXQtd2hpdGVzcGFjZSB3ZWJraXQt
d2hpdGVzcGFjZS0iICsgd2hpdGVzcGFjZUxlbmd0aDsKLSAgICAgICAgICAgIGZvciAoOyBsZW5n
dGggPj0gd2hpdGVzcGFjZUxlbmd0aDsgbGVuZ3RoIC09IHdoaXRlc3BhY2VMZW5ndGgpCi0gICAg
ICAgICAgICAgICAgdGhpcy5faW5zZXJ0U3BhbkJlZm9yZShsaW5lUm93LCBkZWNvcmF0aW9uc0Vs
ZW1lbnQsIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLl9Db25zZWN1dGl2ZVdoaXRl
c3BhY2VDaGFyc1t3aGl0ZXNwYWNlTGVuZ3RoXSwgY3NzQ2xhc3MpOwotICAgICAgICB9Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdwotICAgICAqIEBw
YXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkxpbmVPdmVybGF5
SGlnaGxpZ2h0Pn0gb3ZlcmxheUhpZ2hsaWdodAotICAgICAqLwotICAgIF9wYWludExpbmU6IGZ1
bmN0aW9uKGxpbmVSb3csIG92ZXJsYXlIaWdobGlnaHQpCi0gICAgewotICAgICAgICB2YXIgbGlu
ZU51bWJlciA9IGxpbmVSb3cubGluZU51bWJlcjsKLQotICAgICAgICB0aGlzLmJlZ2luRG9tVXBk
YXRlcygpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHN5bnRheEhpZ2hsaWdodCA9
IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImhpZ2hsaWdodCIpOwot
Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIp
OwotICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHN5bnRheEhpZ2hsaWdodCA/IHN5bnRheEhpZ2hs
aWdodC5yYW5nZXMgOiBbXTsKLSAgICAgICAgICAgIHRoaXMuX3JlbmRlclJhbmdlcyhsaW5lUm93
LCBsaW5lLCByYW5nZXMsIHRoaXMuX3Nob3dXaGl0ZXNwYWNlKTsKLQotICAgICAgICAgICAgaWYg
KG92ZXJsYXlIaWdobGlnaHQpCi0gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG92
ZXJsYXlIaWdobGlnaHQubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Fw
cGVuZE92ZXJsYXlIaWdobGlnaHQobGluZVJvdywgb3ZlcmxheUhpZ2hsaWdodFtpXSk7Ci0gICAg
ICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhp
cy5fcmFuZ2VUb01hcmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVyKQotICAgICAgICAgICAgICAg
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudCA9IFdlYkluc3BlY3Rvci5oaWdobGlnaHRTZWFyY2hS
ZXN1bHQobGluZVJvdywgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3Jhbmdl
VG9NYXJrLmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdwotICAgICAqLwotICAgIF9yZWxlYXNl
TGluZXNIaWdobGlnaHQ6IGZ1bmN0aW9uKGxpbmVSb3cpCi0gICAgewotICAgICAgICBpZiAoIWxp
bmVSb3cpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgic3BhbnMiIGluIGxpbmVS
b3cpIHsKLSAgICAgICAgICAgIHZhciBzcGFucyA9IGxpbmVSb3cuc3BhbnM7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKQotICAgICAgICAgICAgICAg
IHRoaXMuX2NhY2hlZFNwYW5zLnB1c2goc3BhbnNbal0pOwotICAgICAgICAgICAgZGVsZXRlIGxp
bmVSb3cuc3BhbnM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCJ0ZXh0Tm9kZXMiIGluIGxpbmVS
b3cpIHsKLSAgICAgICAgICAgIHZhciB0ZXh0Tm9kZXMgPSBsaW5lUm93LnRleHROb2RlczsKLSAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGV4dE5vZGVzLmxlbmd0aDsgKytqKQotICAg
ICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFRleHROb2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7Ci0g
ICAgICAgICAgICBkZWxldGUgbGluZVJvdy50ZXh0Tm9kZXM7Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0gez9Ob2RlPX0gbGFzdFVuZGFtYWdlZExpbmVSb3cKLSAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQotICAgICAqLwotICAgIHNlbGVjdGlvbjogZnVuY3Rpb24o
bGFzdFVuZGFtYWdlZExpbmVSb3cpCi0gICAgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2lu
ZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIC8vIFNlbGVjdGlvbiBtYXkgYmUgb3V0
c2lkZSBvZiB0aGUgZWRpdG9yLgotICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lci5pc0FuY2Vz
dG9yKHNlbGVjdGlvbi5hbmNob3JOb2RlKSB8fCAhdGhpcy5fY29udGFpbmVyLmlzQW5jZXN0b3Io
c2VsZWN0aW9uLmZvY3VzTm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAg
Ly8gU2VsZWN0aW9uIG1heSBiZSBpbnNpZGUgb25lIG9mIGRlY29yYXRpb25zLgotICAgICAgICBp
ZiAoc2VsZWN0aW9uLmZvY3VzTm9kZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJr
aXQtbGluZS1kZWNvcmF0aW9ucyIsIHRoaXMuX2NvbnRhaW5lcikpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihz
ZWxlY3Rpb24uYW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgbGFzdFVuZGFtYWdl
ZExpbmVSb3cpOwotICAgICAgICB2YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkID8gc3Rh
cnQgOiB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUsIHNlbGVj
dGlvbi5mb2N1c09mZnNldCwgbGFzdFVuZGFtYWdlZExpbmVSb3cpOwotICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQu
bGluZSwgZW5kLmNvbHVtbik7Ci0gICAgfSwKLQotICAgIGxhc3RTZWxlY3Rpb246IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9sYXN0U2VsZWN0aW9uOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzY3JvbGxJbnRvVmlldwotICAgICAq
LwotICAgIF9yZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbihyYW5nZSwgc2Nyb2xsSW50b1ZpZXcp
Ci0gICAgewotICAgICAgICBpZiAoIXJhbmdlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHZhciBzdGFydCA9IHRoaXMuX3Bvc2l0aW9uVG9TZWxlY3Rpb24ocmFuZ2Uuc3RhcnRMaW5l
LCByYW5nZS5zdGFydENvbHVtbik7Ci0gICAgICAgIHZhciBlbmQgPSByYW5nZS5pc0VtcHR5KCkg
PyBzdGFydCA6IHRoaXMuX3Bvc2l0aW9uVG9TZWxlY3Rpb24ocmFuZ2UuZW5kTGluZSwgcmFuZ2Uu
ZW5kQ29sdW1uKTsKLSAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRl
bnQoc3RhcnQuY29udGFpbmVyLCBzdGFydC5vZmZzZXQsIGVuZC5jb250YWluZXIsIGVuZC5vZmZz
ZXQpOwotCi0gICAgICAgIGlmIChzY3JvbGxJbnRvVmlldykgewotICAgICAgICAgICAgZm9yICh2
YXIgbm9kZSA9IGVuZC5jb250YWluZXI7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vZGUuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhpcy5fbGFzdFNlbGVjdGlvbiA9IHJhbmdlOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge05vZGV9IGNvbnRhaW5lcgotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBvZmZzZXQKLSAgICAgKiBAcGFyYW0gez9Ob2RlPX0gbGFzdFVuZGFtYWdlZExpbmVS
b3cKLSAgICAgKiBAcmV0dXJuIHt7bGluZTogbnVtYmVyLCBjb2x1bW46IG51bWJlcn19Ci0gICAg
ICovCi0gICAgX3NlbGVjdGlvblRvUG9zaXRpb246IGZ1bmN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0
LCBsYXN0VW5kYW1hZ2VkTGluZVJvdykKLSAgICB7Ci0gICAgICAgIGlmIChjb250YWluZXIgPT09
IHRoaXMuX2NvbnRhaW5lciAmJiBvZmZzZXQgPT09IDApCi0gICAgICAgICAgICByZXR1cm4geyBs
aW5lOiAwLCBjb2x1bW46IDAgfTsKLSAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGhpcy5fY29u
dGFpbmVyICYmIG9mZnNldCA9PT0gMSkKLSAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSwgY29sdW1uOiB0aGlzLl90ZXh0TW9kZWwubGluZUxl
bmd0aCh0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEpIH07Ci0KLSAgICAgICAgLy8gVGhp
cyBtZXRob2QgY2FuIGJlIGNhbGxlZCBvbiB0aGUgZGFtYWdlZCBET00gKHdoZW4gRE9NIGRvZXMg
bm90IG1hdGNoIG1vZGVsKS4KLSAgICAgICAgLy8gV2UgbmVlZCB0byBzdGFydCBjb3VudGluZyBs
aW5lcyBmcm9tIHRoZSBmaXJzdCB1bmRhbWFnZWQgbGluZSBpZiBpdCBpcyBnaXZlbi4KLSAgICAg
ICAgdmFyIGxpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBjb2x1bW4gPSAwOwotICAgICAgICB2YXIg
bm9kZTsKLSAgICAgICAgdmFyIHNjb3BlTm9kZTsKLSAgICAgICAgaWYgKGxhc3RVbmRhbWFnZWRM
aW5lUm93ID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgLy8gTGFzdCB1bmRhbWFnZWQgcm93IGlz
IGdpdmVuLCBidXQgaXMgbnVsbCAtIGZvcmNlIHRyYXZlcnNlIGZyb20gdGhlIGJlZ2lubmluZwot
ICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOwotICAgICAgICAg
ICAgc2NvcGVOb2RlID0gdGhpcy5fY29udGFpbmVyOwotICAgICAgICAgICAgbGluZU51bWJlciA9
IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2Vu
Y2xvc2luZ0xpbmVSb3dPclNlbGYoY29udGFpbmVyKTsKLSAgICAgICAgICAgIGlmICghbGFzdFVu
ZGFtYWdlZExpbmVSb3cgfHwgKHR5cGVvZiBsaW5lUm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIi
ICYmIGxpbmVSb3cubGluZU51bWJlciA8PSBsYXN0VW5kYW1hZ2VkTGluZVJvdy5saW5lTnVtYmVy
KSkgewotICAgICAgICAgICAgICAgIC8vIERPTSBpcyBjb25zaXN0ZW50IChvciB3ZSBiZWxvbmcg
dG8gdGhlIGZpcnN0IGRhbWFnZWQgcm93KS0gbG9va3VwIHRoZSByb3cgd2UgYmVsb25nIHRvIGFu
ZCBzdGFydCB3aXRoIGl0LgotICAgICAgICAgICAgICAgIG5vZGUgPSBsaW5lUm93OwotICAgICAg
ICAgICAgICAgIHNjb3BlTm9kZSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgbGluZU51bWJlciA9
IG5vZGUubGluZU51bWJlcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gU3RhcnQgd2l0aCB0aGUgbm9kZSBmb2xsb3dpbmcgdW5kYW1hZ2VkIHJvdy4gSXQgY29ycmVz
cG9uZHMgdG8gbGluZU51bWJlciArIDEuCi0gICAgICAgICAgICAgICAgbm9kZSA9IGxhc3RVbmRh
bWFnZWRMaW5lUm93Lm5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgIHNjb3BlTm9kZSA9IHRo
aXMuX2NvbnRhaW5lcjsKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gbGFzdFVuZGFtYWdl
ZExpbmVSb3cubGluZU51bWJlciArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBGYXN0IHJldHVybiB0aGUgbGluZSBzdGFydC4KLSAgICAgICAgaWYgKGNvbnRhaW5l
ciA9PT0gbm9kZSAmJiBvZmZzZXQgPT09IDApCi0gICAgICAgICAgICByZXR1cm4geyBsaW5lOiBs
aW5lTnVtYmVyLCBjb2x1bW46IDAgfTsKLQotICAgICAgICAvLyBUcmF2ZXJzZSB0ZXh0IGFuZCBp
bmNyZW1lbnQgbGluZU51bWJlciAvIGNvbHVtbi4KLSAgICAgICAgZm9yICg7IG5vZGUgJiYgbm9k
ZSAhPT0gY29udGFpbmVyOyBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKHNjb3BlTm9kZSkp
IHsKLSAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJiciIp
IHsKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyKys7Ci0gICAgICAgICAgICAgICAgY29sdW1u
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhU
X05PREUpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7Ci0g
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0LmNoYXJBdChpKSA9PT0gIlxuIikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlcisrOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2x1bW4rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBXZSByZWFjaGVkIG91ciBjb250YWluZXIgbm9kZSwgdHJhdmVy
c2Ugd2l0aGluIGl0c2VsZiB1bnRpbCB3ZSByZWFjaCBnaXZlbiBvZmZzZXQuCi0gICAgICAgIGlm
IChub2RlID09PSBjb250YWluZXIgJiYgb2Zmc2V0KSB7Ci0gICAgICAgICAgICB2YXIgdGV4dCA9
IG5vZGUudGV4dENvbnRlbnQ7Ci0gICAgICAgICAgICAvLyBJbiBjYXNlIG9mZnNldCA9PSAxIGFu
ZCBsaW5lUm93IGlzIGEgY2h1bmsgZGl2LCB3ZSBuZWVkIHRvIHRyYXZlcnNlIGl0IGFsbC4KLSAg
ICAgICAgICAgIHZhciB0ZXh0T2Zmc2V0ID0gKG5vZGUuX2NodW5rICYmIG9mZnNldCA9PT0gMSkg
PyB0ZXh0Lmxlbmd0aCA6IG9mZnNldDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGV4dE9mZnNldDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09
PSAiXG4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAg
ICAgICAgICAgY29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgY29sdW1uKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHsgbGluZTogbGluZU51bWJlciwgY29sdW1uOiBjb2x1bW4gfTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
Y29sdW1uCi0gICAgICogQHJldHVybiB7e2NvbnRhaW5lcjogRWxlbWVudCwgb2Zmc2V0OiBudW1i
ZXJ9fQotICAgICAqLwotICAgIF9wb3NpdGlvblRvU2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lLCBj
b2x1bW4pCi0gICAgewotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5l
KTsKLSAgICAgICAgLy8gT25lLWxpbmVkIGNvbGxhcHNlZCBjaHVua3MgbWF5IHN0aWxsIHN0YXkg
aGlnaGxpZ2h0ZWQuCi0gICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsubGluZXNDb3VudCA9PT0g
MSA/IGNodW5rLmVsZW1lbnQgOiBjaHVuay5leHBhbmRlZExpbmVSb3cobGluZSk7Ci0gICAgICAg
IGlmIChsaW5lUm93KQotICAgICAgICAgICAgdmFyIHJhbmdlQm91bmRhcnkgPSBsaW5lUm93LnJh
bmdlQm91bmRhcnlGb3JPZmZzZXQoY29sdW1uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICB2YXIgb2Zmc2V0ID0gY29sdW1uOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNodW5rLnN0
YXJ0TGluZTsgaSA8IGxpbmUgJiYgaSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kp
Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKGkp
ICsgMTsgLy8gXG4KLSAgICAgICAgICAgIGxpbmVSb3cgPSBjaHVuay5lbGVtZW50OwotICAgICAg
ICAgICAgaWYgKGxpbmVSb3cuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2VC
b3VuZGFyeSA9IHsgY29udGFpbmVyOiBsaW5lUm93LmZpcnN0Q2hpbGQsIG9mZnNldDogb2Zmc2V0
IH07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFyIHJhbmdlQm91bmRhcnkg
PSB7IGNvbnRhaW5lcjogbGluZVJvdywgb2Zmc2V0OiAwIH07Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHJhbmdlQm91bmRhcnk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
Tm9kZX0gZWxlbWVudAotICAgICAqIEByZXR1cm4gez9Ob2RlfQotICAgICAqLwotICAgIF9lbmNs
b3NpbmdMaW5lUm93T3JTZWxmOiBmdW5jdGlvbihlbGVtZW50KQotICAgIHsKLSAgICAgICAgdmFy
IGxpbmVSb3cgPSBlbGVtZW50LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1s
aW5lLWNvbnRlbnQiKTsKLSAgICAgICAgaWYgKGxpbmVSb3cpCi0gICAgICAgICAgICByZXR1cm4g
bGluZVJvdzsKLQotICAgICAgICBmb3IgKGxpbmVSb3cgPSBlbGVtZW50OyBsaW5lUm93OyBsaW5l
Um93ID0gbGluZVJvdy5wYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICBpZiAobGluZVJvdy5w
YXJlbnRFbGVtZW50ID09PSB0aGlzLl9jb250YWluZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGxpbmVSb3c7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAotICAgICAqIEBwYXJhbSB7RWxl
bWVudH0gb2xkQ2hpbGQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudAotICAgICAqIEBw
YXJhbSB7c3RyaW5nPX0gY2xhc3NOYW1lCi0gICAgICovCi0gICAgX2luc2VydFNwYW5CZWZvcmU6
IGZ1bmN0aW9uKGVsZW1lbnQsIG9sZENoaWxkLCBjb250ZW50LCBjbGFzc05hbWUpCi0gICAgewot
ICAgICAgICBpZiAoY2xhc3NOYW1lID09PSAiaHRtbC1yZXNvdXJjZS1saW5rIiB8fCBjbGFzc05h
bWUgPT09ICJodG1sLWV4dGVybmFsLWxpbmsiKSB7Ci0gICAgICAgICAgICBlbGVtZW50Lmluc2Vy
dEJlZm9yZSh0aGlzLl9jcmVhdGVMaW5rKGNvbnRlbnQsIGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0
ZXJuYWwtbGluayIpLCBvbGRDaGlsZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICB2YXIgc3BhbiA9IHRoaXMuX2NhY2hlZFNwYW5zLnBvcCgpIHx8IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgaWYgKCFjbGFzc05hbWUpCi0gICAgICAg
ICAgICBzcGFuLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0
b3IuRkFMU0UpIC8vIEZvciBwYWludCBkZWJ1Z2dpbmcuCi0gICAgICAgICAgICBzcGFuLmFkZFN0
eWxlQ2xhc3MoImRlYnVnLWZhZGVvdXQiKTsKLSAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGNv
bnRlbnQ7Ci0gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHNwYW4sIG9sZENoaWxkKTsKLSAg
ICAgICAgaWYgKCEoInNwYW5zIiBpbiBlbGVtZW50KSkKLSAgICAgICAgICAgIGVsZW1lbnQuc3Bh
bnMgPSBbXTsKLSAgICAgICAgZWxlbWVudC5zcGFucy5wdXNoKHNwYW4pOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAgICAgKiBAcGFyYW0ge0Vs
ZW1lbnR9IG9sZENoaWxkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKi8KLSAg
ICBfaW5zZXJ0VGV4dE5vZGVCZWZvcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9sZENoaWxkLCB0ZXh0
KQotICAgIHsKLSAgICAgICAgdmFyIHRleHROb2RlID0gdGhpcy5fY2FjaGVkVGV4dE5vZGVzLnBv
cCgpOwotICAgICAgICBpZiAodGV4dE5vZGUpCi0gICAgICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFs
dWUgPSB0ZXh0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXh0Tm9kZSA9IGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKHRleHQpOwotICAgICAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0ZXh0
Tm9kZSwgb2xkQ2hpbGQpOwotICAgICAgICBpZiAoISgidGV4dE5vZGVzIiBpbiBlbGVtZW50KSkK
LSAgICAgICAgICAgIGVsZW1lbnQudGV4dE5vZGVzID0gW107Ci0gICAgICAgIGVsZW1lbnQudGV4
dE5vZGVzLnB1c2godGV4dE5vZGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gY29udGVudAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFeHRlcm5hbAotICAg
ICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgX2NyZWF0ZUxpbms6IGZ1bmN0aW9u
KGNvbnRlbnQsIGlzRXh0ZXJuYWwpCi0gICAgewotICAgICAgICB2YXIgcXVvdGUgPSBjb250ZW50
LmNoYXJBdCgwKTsKLSAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gMSAmJiAocXVvdGUgPT09
ICJcIiIgfHwgcXVvdGUgPT09ICInIikpCi0gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5z
dWJzdHJpbmcoMSwgY29udGVudC5sZW5ndGggLSAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcXVvdGUgPSBudWxsOwotCi0gICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOwotICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtaHRtbC1hdHRy
aWJ1dGUtdmFsdWUiOwotICAgICAgICBpZiAocXVvdGUpCi0gICAgICAgICAgICBzcGFuLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7Ci0gICAgICAgIHNwYW4uYXBw
ZW5kQ2hpbGQodGhpcy5fZGVsZWdhdGUuY3JlYXRlTGluayhjb250ZW50LCBpc0V4dGVybmFsKSk7
Ci0gICAgICAgIGlmIChxdW90ZSkKLSAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUocXVvdGUpKTsKLSAgICAgICAgcmV0dXJuIHNwYW47Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYktpdE11dGF0aW9uPn0gbXV0YXRp
b25zCi0gICAgICovCi0gICAgX2hhbmRsZU11dGF0aW9uczogZnVuY3Rpb24obXV0YXRpb25zKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBkZWxldGUg
dGhpcy5fa2V5RG93bkNvZGU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBBbm5paGlsYXRlIG5vb3AgQlIgYWRkaXRpb24gKyByZW1vdmFsIHRoYXQgdGFrZXMg
cGxhY2UgdXBvbiBsaW5lIHJlbW92YWwuCi0gICAgICAgIHZhciBmaWx0ZXJlZE11dGF0aW9ucyA9
IG11dGF0aW9ucy5zbGljZSgpOwotICAgICAgICB2YXIgYWRkZWRCUnMgPSBuZXcgTWFwKCk7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YXRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07Ci0gICAgICAgICAgICBpZiAobXV0
YXRpb24udHlwZSAhPT0gImNoaWxkTGlzdCIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPT09IDEgJiYgbXV0YXRp
b24uYWRkZWROb2Rlc1swXS5ub2RlTmFtZSA9PT0gIkJSIikKLSAgICAgICAgICAgICAgICBhZGRl
ZEJScy5wdXQobXV0YXRpb24uYWRkZWROb2Rlc1swXSwgbXV0YXRpb24pOwotICAgICAgICAgICAg
ZWxzZSBpZiAobXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA9PT0gMSAmJiBtdXRhdGlvbi5y
ZW1vdmVkTm9kZXNbMF0ubm9kZU5hbWUgPT09ICJCUiIpIHsKLSAgICAgICAgICAgICAgICB2YXIg
bm9vcE11dGF0aW9uID0gYWRkZWRCUnMuZ2V0KG11dGF0aW9uLnJlbW92ZWROb2Rlc1swXSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vb3BNdXRhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBm
aWx0ZXJlZE11dGF0aW9ucy5yZW1vdmUobXV0YXRpb24pOwotICAgICAgICAgICAgICAgICAgICBm
aWx0ZXJlZE11dGF0aW9ucy5yZW1vdmUobm9vcE11dGF0aW9uKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZGlydHlMaW5lczsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJlZE11dGF0aW9ucy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgdmFyIG11dGF0aW9uID0gZmlsdGVyZWRNdXRhdGlvbnNbaV07Ci0gICAg
ICAgICAgICB2YXIgY2hhbmdlZE5vZGVzID0gW107Ci0gICAgICAgICAgICBpZiAobXV0YXRpb24u
dHlwZSA9PT0gImNoaWxkTGlzdCIgJiYgbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGgpCi0gICAg
ICAgICAgICAgICAgY2hhbmdlZE5vZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobXV0
YXRpb24uYWRkZWROb2Rlcyk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtdXRhdGlvbi50eXBlID09
PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoKQotICAgICAgICAg
ICAgICAgIGNoYW5nZWROb2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG11dGF0aW9u
LnJlbW92ZWROb2Rlcyk7Ci0gICAgICAgICAgICBjaGFuZ2VkTm9kZXMucHVzaChtdXRhdGlvbi50
YXJnZXQpOwotCi0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoYW5nZWROb2Rlcy5s
ZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuX2NvbGxlY3RE
aXJ0eUxpbmVzKG11dGF0aW9uLCBjaGFuZ2VkTm9kZXNbal0pOwotICAgICAgICAgICAgICAgIGlm
ICghbGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGlmICghZGlydHlMaW5lcykgewotICAgICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVzID0gbGlu
ZXM7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBkaXJ0eUxpbmVzLnN0YXJ0ID0gTWF0aC5taW4oZGlydHlMaW5lcy5zdGFy
dCwgbGluZXMuc3RhcnQpOwotICAgICAgICAgICAgICAgIGRpcnR5TGluZXMuZW5kID0gTWF0aC5t
YXgoZGlydHlMaW5lcy5lbmQsIGxpbmVzLmVuZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGRpcnR5TGluZXMpIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yYW5n
ZVRvTWFyazsKLSAgICAgICAgICAgIHRoaXMuX2FwcGx5RG9tVXBkYXRlcyhkaXJ0eUxpbmVzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2Fzc2VydERPTU1hdGNoZXNUZXh0TW9kZWwoKTsK
LQotICAgICAgICBkZWxldGUgdGhpcy5fa2V5RG93bkNvZGU7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViS2l0TXV0YXRpb259IG11dGF0aW9uCi0gICAgICogQHBhcmFtIHtO
b2RlfSB0YXJnZXQKLSAgICAgKiBAcmV0dXJuIHs/T2JqZWN0fQotICAgICAqLwotICAgIF9jb2xs
ZWN0RGlydHlMaW5lczogZnVuY3Rpb24obXV0YXRpb24sIHRhcmdldCkKLSAgICB7Ci0gICAgICAg
IHZhciBsaW5lUm93ID0gdGhpcy5fZW5jbG9zaW5nTGluZVJvd09yU2VsZih0YXJnZXQpOwotICAg
ICAgICBpZiAoIWxpbmVSb3cpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBp
ZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQgJiYgbGluZVJvdy5kZWNvcmF0aW9uc0VsZW1l
bnQuaXNTZWxmT3JBbmNlc3Rvcih0YXJnZXQpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fc3lu
Y0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKQotICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNE
ZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcihsaW5lUm93LmxpbmVOdW1iZXIpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZW9mIGxpbmVSb3cu
bGluZU51bWJlciAhPT0gIm51bWJlciIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
ICAgICB2YXIgc3RhcnRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVyOwotICAgICAgICB2YXIgZW5k
TGluZSA9IGxpbmVSb3cuX2NodW5rID8gbGluZVJvdy5fY2h1bmsuZW5kTGluZSAtIDEgOiBsaW5l
Um93LmxpbmVOdW1iZXI7Ci0gICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydExpbmUsIGVuZDog
ZW5kTGluZSB9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGly
dHlMaW5lcwotICAgICAqLwotICAgIF9hcHBseURvbVVwZGF0ZXM6IGZ1bmN0aW9uKGRpcnR5TGlu
ZXMpCi0gICAgewotICAgICAgICB2YXIgbGFzdFVuZGFtYWdlZExpbmVOdW1iZXIgPSBkaXJ0eUxp
bmVzLnN0YXJ0IC0gMTsgLy8gQ2FuIGJlIC0xCi0gICAgICAgIHZhciBmaXJzdFVuZGFtYWdlZExp
bmVOdW1iZXIgPSBkaXJ0eUxpbmVzLmVuZCArIDE7IC8vIENhbiBiZSB0aGlzLl90ZXh0TW9kZWwu
bGluZXNDb3VudAotCi0gICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkTGluZUNodW5rID0gbGFzdFVu
ZGFtYWdlZExpbmVOdW1iZXIgPj0gMCA/IHRoaXMuX3RleHRDaHVua3NbdGhpcy5jaHVua051bWJl
ckZvckxpbmUobGFzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7Ci0gICAgICAgIHZhciBm
aXJzdFVuZGFtYWdlZExpbmVDaHVuayA9IGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlciA8IHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50ID8gdGhpcy5fdGV4dENodW5rc1t0aGlzLmNodW5rTnVtYmVy
Rm9yTGluZShmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7Ci0KLSAgICAgICAgdmFy
IGNvbGxlY3RMaW5lc0Zyb21Ob2RlID0gbGFzdFVuZGFtYWdlZExpbmVDaHVuayA/IGxhc3RVbmRh
bWFnZWRMaW5lQ2h1bmsubGluZVJvd0NvbnRhaW5pbmdMaW5lKGxhc3RVbmRhbWFnZWRMaW5lTnVt
YmVyKSA6IG51bGw7Ci0gICAgICAgIHZhciBjb2xsZWN0TGluZXNUb05vZGUgPSBmaXJzdFVuZGFt
YWdlZExpbmVDaHVuayA/IGZpcnN0VW5kYW1hZ2VkTGluZUNodW5rLmxpbmVSb3dDb250YWluaW5n
TGluZShmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIpIDogbnVsbDsKLSAgICAgICAgdmFyIGxpbmVz
ID0gdGhpcy5fY29sbGVjdExpbmVzRnJvbURPTShjb2xsZWN0TGluZXNGcm9tTm9kZSwgY29sbGVj
dExpbmVzVG9Ob2RlKTsKLQotICAgICAgICB2YXIgc3RhcnRMaW5lID0gZGlydHlMaW5lcy5zdGFy
dDsKLSAgICAgICAgdmFyIGVuZExpbmUgPSBkaXJ0eUxpbmVzLmVuZDsKLQotICAgICAgICB2YXIg
b3JpZ2luYWxTZWxlY3Rpb24gPSB0aGlzLl9sYXN0U2VsZWN0aW9uOwotICAgICAgICB2YXIgZWRp
dEluZm8gPSB0aGlzLl9ndWVzc0VkaXRSYW5nZUJhc2VkT25TZWxlY3Rpb24oc3RhcnRMaW5lLCBl
bmRMaW5lLCBsaW5lcyk7Ci0gICAgICAgIGlmICghZWRpdEluZm8pIHsKLSAgICAgICAgICAgIGlm
IChXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKLSAgICAgICAgICAgICAgICBj
b25zb2xlLndhcm4oIkZhbGxpbmcgYmFjayB0byBleHBlbnNpdmUgZWRpdCIpOwotICAgICAgICAg
ICAgdmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBl
bmRMaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lKSk7Ci0gICAgICAgICAg
ICBpZiAoIWxpbmVzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIC8vIEVudGlyZSBkYW1hZ2Vk
IGFyZWEgaGFzIGNvbGxhcHNlZC4gUmVwbGFjZSBldmVyeXRoaW5nIGJldHdlZW4gc3RhcnQgYW5k
IGVuZCBsaW5lcyB3aXRoIG5vdGhpbmcuCi0gICAgICAgICAgICAgICAgZWRpdEluZm8gPSBuZXcg
V2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLkVkaXRJbmZvKHRoaXMuX3RleHRNb2RlbC5n
cm93UmFuZ2VSaWdodChyYW5nZSksICIiKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIGVkaXRJbmZvID0gbmV3IFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0
SW5mbyhyYW5nZSwgbGluZXMuam9pbigiXG4iKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
c2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24oY29sbGVjdExpbmVzRnJvbU5vZGUpOwotCi0gICAg
ICAgIC8vIFVuaW5kZW50IGFmdGVyIGJsb2NrCi0gICAgICAgIGlmIChlZGl0SW5mby50ZXh0ID09
PSAifSIgJiYgZWRpdEluZm8ucmFuZ2UuaXNFbXB0eSgpICYmIHNlbGVjdGlvbi5pc0VtcHR5KCkg
JiYgIXRoaXMuX3RleHRNb2RlbC5saW5lKGVkaXRJbmZvLnJhbmdlLmVuZExpbmUpLnRyaW0oKSkg
ewotICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX2Nsb3NpbmdCbG9ja09mZnNldChlZGl0
SW5mby5yYW5nZSk7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0ID49IDApIHsKLSAgICAgICAgICAg
ICAgICBlZGl0SW5mby5yYW5nZS5zdGFydENvbHVtbiA9IG9mZnNldDsKLSAgICAgICAgICAgICAg
ICBzZWxlY3Rpb24uc3RhcnRDb2x1bW4gPSBvZmZzZXQgKyAxOwotICAgICAgICAgICAgICAgIHNl
bGVjdGlvbi5lbmRDb2x1bW4gPSBvZmZzZXQgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5nZShlZGl0SW5mby5yYW5nZSwgZWRp
dEluZm8udGV4dCwgb3JpZ2luYWxTZWxlY3Rpb24pOwotICAgICAgICB0aGlzLl9yZXN0b3JlU2Vs
ZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBzdGFydExpbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQotICAgICAqIEBw
YXJhbSB7QXJyYXkuPHN0cmluZz59IGxpbmVzCi0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rv
ci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mb30KLSAgICAgKi8KLSAgICBfZ3Vlc3NFZGl0UmFu
Z2VCYXNlZE9uU2VsZWN0aW9uOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUsIGxpbmVzKQot
ICAgIHsKLSAgICAgICAgLy8gQW5hbHl6ZSBpbnB1dCBkYXRhCi0gICAgICAgIHZhciB0ZXh0SW5w
dXREYXRhID0gdGhpcy5fdGV4dElucHV0RGF0YTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3RleHRJ
bnB1dERhdGE7Ci0gICAgICAgIHZhciBpc0JhY2tzcGFjZSA9IHRoaXMuX2tleURvd25Db2RlID09
PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkJhY2tzcGFjZS5jb2RlOwotICAg
ICAgICB2YXIgaXNEZWxldGUgPSB0aGlzLl9rZXlEb3duQ29kZSA9PT0gV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuS2V5cy5EZWxldGUuY29kZTsKLQotICAgICAgICBpZiAoIXRleHRJbnB1
dERhdGEgJiYgKGlzRGVsZXRlIHx8IGlzQmFja3NwYWNlKSkKLSAgICAgICAgICAgIHRleHRJbnB1
dERhdGEgPSAiIjsKLQotICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgaXMgbm8gaW5wdXQgZGF0
YSBvciBzZWxlY3Rpb24KLSAgICAgICAgaWYgKHR5cGVvZiB0ZXh0SW5wdXREYXRhID09PSAidW5k
ZWZpbmVkIiB8fCAhdGhpcy5fbGFzdFNlbGVjdGlvbikKLSAgICAgICAgICAgIHJldHVybiBudWxs
OwotCi0gICAgICAgIC8vIEFkanVzdCBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGtleWJvYXJkIGFj
dGlvbnMgKGdyb3cgZm9yIGJhY2tzcGFjZSwgZXRjLikuCi0gICAgICAgIHRleHRJbnB1dERhdGEg
PSB0ZXh0SW5wdXREYXRhIHx8ICIiOwotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9sYXN0U2Vs
ZWN0aW9uLm5vcm1hbGl6ZSgpOwotICAgICAgICBpZiAoaXNCYWNrc3BhY2UgJiYgcmFuZ2UuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwuZ3Jvd1JhbmdlTGVm
dChyYW5nZSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzRGVsZXRlICYmIHJhbmdlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fdGV4dE1vZGVsLmdyb3dSYW5nZVJpZ2h0KHJhbmdl
KTsKLQotICAgICAgICAvLyBUZXN0IHRoYXQgc2VsZWN0aW9uIGludGVyc2VjdHMgZGFtYWdlZCBs
aW5lcwotICAgICAgICBpZiAoc3RhcnRMaW5lID4gcmFuZ2UuZW5kTGluZSB8fCBlbmRMaW5lIDwg
cmFuZ2Uuc3RhcnRMaW5lKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFy
IHJlcGxhY2VtZW50TGluZUNvdW50ID0gdGV4dElucHV0RGF0YS5zcGxpdCgiXG4iKS5sZW5ndGgg
LSAxOwotICAgICAgICB2YXIgbGluZUNvdW50RGVsdGEgPSByZXBsYWNlbWVudExpbmVDb3VudCAt
IHJhbmdlLmxpbmVzQ291bnQ7Ci0gICAgICAgIGlmIChzdGFydExpbmUgKyBsaW5lcy5sZW5ndGgg
LSBlbmRMaW5lIC0gMSAhPT0gbGluZUNvdW50RGVsdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bDsKLQotICAgICAgICAvLyBDbG9uZSB0ZXh0IG1vZGVsIG9mIHRoZSBzaXplIHRoYXQgZml0cyBi
b3RoOiBzZWxlY3Rpb24gYmVmb3JlIGVkaXQgYW5kIHRoZSBkYW1hZ2VkIGxpbmVzIGFmdGVyIGVk
aXQuCi0gICAgICAgIHZhciBjbG9uZUZyb21MaW5lID0gTWF0aC5taW4ocmFuZ2Uuc3RhcnRMaW5l
LCBzdGFydExpbmUpOwotICAgICAgICB2YXIgcG9zdExhc3RMaW5lID0gc3RhcnRMaW5lICsgbGlu
ZXMubGVuZ3RoICsgbGluZUNvdW50RGVsdGE7Ci0gICAgICAgIHZhciBjbG9uZVRvTGluZSA9IE1h
dGgubWluKE1hdGgubWF4KHBvc3RMYXN0TGluZSwgcmFuZ2UuZW5kTGluZSkgKyAxLCB0aGlzLl90
ZXh0TW9kZWwubGluZXNDb3VudCk7Ci0gICAgICAgIHZhciBkb21Nb2RlbCA9IHRoaXMuX3RleHRN
b2RlbC5zbGljZShjbG9uZUZyb21MaW5lLCBjbG9uZVRvTGluZSk7Ci0gICAgICAgIGRvbU1vZGVs
LmVkaXRSYW5nZShyYW5nZS5zaGlmdCgtY2xvbmVGcm9tTGluZSksIHRleHRJbnB1dERhdGEpOwot
Ci0gICAgICAgIC8vIFRoZW4gd2UnbGwgdGVzdCBpZiB0aGlzIG5ldyBtb2RlbCBtYXRjaGVzIHRo
ZSBET00gbGluZXMuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChkb21Nb2RlbC5saW5lKGkgKyBzdGFydExpbmUgLSBjbG9u
ZUZyb21MaW5lKSAhPT0gbGluZXNbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0
b3IuRWRpdEluZm8ocmFuZ2UsIHRleHRJbnB1dERhdGEpOwotICAgIH0sCi0KLSAgICBfYXNzZXJ0
RE9NTWF0Y2hlc1RleHRNb2RlbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCFXZWJJ
bnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID09PSB0aGlzLl90
ZXh0TW9kZWwudGV4dCgpICsgIlxuIiwgIkRPTSBkb2VzIG5vdCBtYXRjaCBtb2RlbC4iKTsKLSAg
ICAgICAgZm9yICh2YXIgbGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOyBsaW5l
Um93OyBsaW5lUm93ID0gbGluZVJvdy5uZXh0U2libGluZykgewotICAgICAgICAgICAgdmFyIGxp
bmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGxp
bmVOdW1iZXIgIT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJO
byBsaW5lIG51bWJlciBvbiBsaW5lIHJvdyIpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxpbmVSb3cuX2NodW5rKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNodW5rID0gbGluZVJvdy5fY2h1bms7Ci0gICAgICAgICAgICAgICAgY29u
c29sZS5hc3NlcnQobGluZU51bWJlciA9PT0gY2h1bmsuc3RhcnRMaW5lKTsKLSAgICAgICAgICAg
ICAgICB2YXIgY2h1bmtUZXh0ID0gdGhpcy5fdGV4dE1vZGVsLmNvcHlSYW5nZShuZXcgV2ViSW5z
cGVjdG9yLlRleHRSYW5nZShjaHVuay5zdGFydExpbmUsIDAsIGNodW5rLmVuZExpbmUgLSAxLCB0
aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChjaHVuay5lbmRMaW5lIC0gMSkpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY2h1bmtUZXh0ICE9PSBsaW5lUm93LnRleHRDb250ZW50KQotICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oIkNodW5rIGlzIG5vdCBtYXRjaGluZzogJWQgJU8iLCBs
aW5lTnVtYmVyLCBsaW5lUm93KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGV4dE1v
ZGVsLmxpbmUobGluZU51bWJlcikgIT09IGxpbmVSb3cudGV4dENvbnRlbnQpCi0gICAgICAgICAg
ICAgICAgY29uc29sZS53YXJuKCJMaW5lIGlzIG5vdCBtYXRjaGluZzogJWQgJU8iLCBsaW5lTnVt
YmVyLCBsaW5lUm93KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IG9sZFJhbmdlCi0gICAgICogQHJldHVybiB7bnVt
YmVyfQotICAgICAqLwotICAgIF9jbG9zaW5nQmxvY2tPZmZzZXQ6IGZ1bmN0aW9uKG9sZFJhbmdl
KQotICAgIHsKLSAgICAgICAgdmFyIGxlZnRCcmFjZSA9IHRoaXMuX2JyYWNlTWF0Y2hlci5maW5k
TGVmdENhbmRpZGF0ZShvbGRSYW5nZS5zdGFydExpbmUsIG9sZFJhbmdlLnN0YXJ0Q29sdW1uKTsK
LSAgICAgICAgaWYgKCFsZWZ0QnJhY2UgfHwgbGVmdEJyYWNlLnRva2VuICE9PSAiYmxvY2stc3Rh
cnQiKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB2YXIgbGluZUNvbnRlbnQgPSB0
aGlzLl90ZXh0TW9kZWwubGluZShsZWZ0QnJhY2UubGluZU51bWJlcik7Ci0gICAgICAgIHJldHVy
biBsaW5lQ29udGVudC5sZW5ndGggLSBsaW5lQ29udGVudC50cmltTGVmdCgpLmxlbmd0aDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBv
bGRSYW5nZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gbmV3UmFuZ2UK
LSAgICAgKi8KLSAgICB0ZXh0Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQot
ICAgIHsKLSAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAgICAgdGhpcy5fcmVt
b3ZlRGVjb3JhdGlvbnNJblJhbmdlKG9sZFJhbmdlKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlQ2h1
bmtzRm9yUmFuZ2VzKG9sZFJhbmdlLCBuZXdSYW5nZSk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUhp
Z2hsaWdodHNGb3JSYW5nZShuZXdSYW5nZSk7Ci0gICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFu
Z2V9IHJhbmdlCi0gICAgICovCi0gICAgX3JlbW92ZURlY29yYXRpb25zSW5SYW5nZTogZnVuY3Rp
b24ocmFuZ2UpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jaHVua051bWJlckZv
ckxpbmUocmFuZ2Uuc3RhcnRMaW5lKTsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbaV07Ci0gICAgICAg
ICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lID4gcmFuZ2UuZW5kTGluZSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNodW5rLnJlbW92ZUFsbERlY29yYXRpb25zKCk7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4
dFJhbmdlfSBvbGRSYW5nZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0g
bmV3UmFuZ2UKLSAgICAgKi8KLSAgICBfdXBkYXRlQ2h1bmtzRm9yUmFuZ2VzOiBmdW5jdGlvbihv
bGRSYW5nZSwgbmV3UmFuZ2UpCi0gICAgewotICAgICAgICB2YXIgZmlyc3REYW1hZ2VkQ2h1bmtO
dW1iZXIgPSB0aGlzLmNodW5rTnVtYmVyRm9yTGluZShvbGRSYW5nZS5zdGFydExpbmUpOwotICAg
ICAgICB2YXIgbGFzdERhbWFnZWRDaHVua051bWJlciA9IGZpcnN0RGFtYWdlZENodW5rTnVtYmVy
OwotICAgICAgICB3aGlsZSAobGFzdERhbWFnZWRDaHVua051bWJlciArIDEgPCB0aGlzLl90ZXh0
Q2h1bmtzLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRDaHVua3NbbGFzdERh
bWFnZWRDaHVua051bWJlciArIDFdLnN0YXJ0TGluZSA+IG9sZFJhbmdlLmVuZExpbmUpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICArK2xhc3REYW1hZ2VkQ2h1bmtOdW1iZXI7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZmlyc3REYW1hZ2VkQ2h1bmsgPSB0aGlzLl90ZXh0
Q2h1bmtzW2ZpcnN0RGFtYWdlZENodW5rTnVtYmVyXTsKLSAgICAgICAgdmFyIGxhc3REYW1hZ2Vk
Q2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2xhc3REYW1hZ2VkQ2h1bmtOdW1iZXJdOwotCi0gICAg
ICAgIHZhciBsaW5lc0RpZmYgPSBuZXdSYW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGluZXND
b3VudDsKLQotICAgICAgICAvLyBGaXJzdCwgZGV0ZWN0IGNodW5rcyB0aGF0IGhhdmUgbm90IGJl
ZW4gbW9kaWZpZWQgYW5kIHNpbXBseSBzaGlmdCB0aGVtLgotICAgICAgICBpZiAobGluZXNEaWZm
KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBjaHVua051bWJlciA9IGxhc3REYW1hZ2VkQ2h1bmtO
dW1iZXIgKyAxOyBjaHVua051bWJlciA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2NodW5r
TnVtYmVyKQotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLnN0
YXJ0TGluZSArPSBsaW5lc0RpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZW1vdmUgZGFt
YWdlZCBjaHVua3MgZnJvbSBET00gYW5kIGZyb20gdGV4dENodW5rcyBtb2RlbC4KLSAgICAgICAg
dmFyIGxhc3RVbmRhbWFnZWRDaHVuayA9IGZpcnN0RGFtYWdlZENodW5rTnVtYmVyID4gMCA/IHRo
aXMuX3RleHRDaHVua3NbZmlyc3REYW1hZ2VkQ2h1bmtOdW1iZXIgLSAxXSA6IG51bGw7Ci0gICAg
ICAgIHZhciBmaXJzdFVuZGFtYWdlZENodW5rID0gbGFzdERhbWFnZWRDaHVua051bWJlciArIDEg
PCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCA/IHRoaXMuX3RleHRDaHVua3NbbGFzdERhbWFnZWRD
aHVua051bWJlciArIDFdIDogbnVsbDsKLQotICAgICAgICB2YXIgcmVtb3ZlRE9NRnJvbU5vZGUg
PSBsYXN0VW5kYW1hZ2VkQ2h1bmsgPyBsYXN0VW5kYW1hZ2VkQ2h1bmsubGFzdEVsZW1lbnQoKS5u
ZXh0U2libGluZyA6IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOwotICAgICAgICB2YXIgcmVt
b3ZlRE9NVG9Ob2RlID0gZmlyc3RVbmRhbWFnZWRDaHVuayA/IGZpcnN0VW5kYW1hZ2VkQ2h1bmsu
Zmlyc3RFbGVtZW50KCkgOiBudWxsOwotCi0gICAgICAgIC8vIEZhc3QgY2FzZSAtIHBhdGNoIHNp
bmdsZSBleHBhbmRlZCBjaHVuayB0aGF0IGRpZCBub3QgZ3JvdyAvIHNocmluayBkdXJpbmcgZWRp
dC4KLSAgICAgICAgaWYgKCFsaW5lc0RpZmYgJiYgZmlyc3REYW1hZ2VkQ2h1bmsgPT09IGxhc3RE
YW1hZ2VkQ2h1bmsgJiYgZmlyc3REYW1hZ2VkQ2h1bmsuX2V4cGFuZGVkTGluZVJvd3MpIHsKLSAg
ICAgICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkTGluZVJvdyA9IGxhc3REYW1hZ2VkQ2h1bmsuZXhw
YW5kZWRMaW5lUm93KG9sZFJhbmdlLnN0YXJ0TGluZSAtIDEpOwotICAgICAgICAgICAgdmFyIGZp
cnN0VW5kYW1hZ2VkTGluZVJvdyA9IGZpcnN0RGFtYWdlZENodW5rLmV4cGFuZGVkTGluZVJvdyhv
bGRSYW5nZS5lbmRMaW5lICsgMSk7Ci0gICAgICAgICAgICB2YXIgbG9jYWxSZW1vdmVET01Gcm9t
Tm9kZSA9IGxhc3RVbmRhbWFnZWRMaW5lUm93ID8gbGFzdFVuZGFtYWdlZExpbmVSb3cubmV4dFNp
YmxpbmcgOiByZW1vdmVET01Gcm9tTm9kZTsKLSAgICAgICAgICAgIHZhciBsb2NhbFJlbW92ZURP
TVRvTm9kZSA9IGZpcnN0VW5kYW1hZ2VkTGluZVJvdyB8fCByZW1vdmVET01Ub05vZGU7Ci0gICAg
ICAgICAgICByZW1vdmVTdWJzZXF1ZW50Tm9kZXMobG9jYWxSZW1vdmVET01Gcm9tTm9kZSwgbG9j
YWxSZW1vdmVET01Ub05vZGUpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IG5ld1JhbmdlLnN0
YXJ0TGluZTsgaSA8IG5ld1JhbmdlLmVuZExpbmUgKyAxOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcm93ID0gZmlyc3REYW1hZ2VkQ2h1bmsuX2NyZWF0ZVJvdyhpKTsKLSAgICAgICAgICAg
ICAgICBmaXJzdERhbWFnZWRDaHVuay5fZXhwYW5kZWRMaW5lUm93c1tpIC0gZmlyc3REYW1hZ2Vk
Q2h1bmsuc3RhcnRMaW5lXSA9IHJvdzsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIu
aW5zZXJ0QmVmb3JlKHJvdywgbG9jYWxSZW1vdmVET01Ub05vZGUpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZmlyc3REYW1hZ2VkQ2h1bmsudXBkYXRlQ29sbGFwc2VkTGluZVJvdygpOwot
ICAgICAgICAgICAgdGhpcy5fYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbCgpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVtb3ZlU3Vic2VxdWVudE5vZGVzKHJl
bW92ZURPTUZyb21Ob2RlLCByZW1vdmVET01Ub05vZGUpOwotICAgICAgICB0aGlzLl90ZXh0Q2h1
bmtzLnNwbGljZShmaXJzdERhbWFnZWRDaHVua051bWJlciwgbGFzdERhbWFnZWRDaHVua051bWJl
ciAtIGZpcnN0RGFtYWdlZENodW5rTnVtYmVyICsgMSk7Ci0KLSAgICAgICAgLy8gQ29tcHV0ZSBk
YW1hZ2VkIGNodW5rcyBzcGFuCi0gICAgICAgIHZhciBzdGFydExpbmUgPSBmaXJzdERhbWFnZWRD
aHVuay5zdGFydExpbmU7Ci0gICAgICAgIHZhciBlbmRMaW5lID0gbGFzdERhbWFnZWRDaHVuay5l
bmRMaW5lICsgbGluZXNEaWZmOwotICAgICAgICB2YXIgbGluZVNwYW4gPSBlbmRMaW5lIC0gc3Rh
cnRMaW5lOwotCi0gICAgICAgIC8vIFJlLWNyZWF0ZSBjaHVua3MgZm9yIGRhbWFnZWQgYXJlYS4K
LSAgICAgICAgdmFyIGluc2VydGlvbkluZGV4ID0gZmlyc3REYW1hZ2VkQ2h1bmtOdW1iZXI7Ci0g
ICAgICAgIHZhciBjaHVua1NpemUgPSBNYXRoLmNlaWwobGluZVNwYW4gLyBNYXRoLmNlaWwobGlu
ZVNwYW4gLyB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9
IHN0YXJ0TGluZTsgaSA8IGVuZExpbmU7IGkgKz0gY2h1bmtTaXplKSB7Ci0gICAgICAgICAgICB2
YXIgY2h1bmsgPSB0aGlzLmNyZWF0ZU5ld0NodW5rKGksIE1hdGgubWluKGVuZExpbmUsIGkgKyBj
aHVua1NpemUpKTsKLSAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydGlv
bkluZGV4KyssIDAsIGNodW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNlcnRC
ZWZvcmUoY2h1bmsuZWxlbWVudCwgcmVtb3ZlRE9NVG9Ob2RlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRoaXMuX2Fzc2VydERPTU1hdGNoZXNUZXh0TW9kZWwoKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqLwot
ICAgIF91cGRhdGVIaWdobGlnaHRzRm9yUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQotICAgIHsKLSAg
ICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5zY3JvbGxUb3AoKTsKLSAgICAgICAgdmFyIHZp
c2libGVUbyA9IHZpc2libGVGcm9tICsgdGhpcy5jbGllbnRIZWlnaHQoKTsKLQotICAgICAgICB2
YXIgcmVzdWx0ID0gdGhpcy5maW5kVmlzaWJsZUNodW5rcyh2aXNpYmxlRnJvbSwgdmlzaWJsZVRv
KTsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tyZXN1bHQuZW5kIC0gMV07
Ci0gICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5s
aW5lc0NvdW50OwotCi0gICAgICAgIGxhc3RWaXNpYmxlTGluZSA9IE1hdGgubWF4KGxhc3RWaXNp
YmxlTGluZSwgcmFuZ2UuZW5kTGluZSArIDEpOwotICAgICAgICBsYXN0VmlzaWJsZUxpbmUgPSBN
YXRoLm1pbihsYXN0VmlzaWJsZUxpbmUsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKLQot
ICAgICAgICB2YXIgdXBkYXRlZCA9IHRoaXMuX2hpZ2hsaWdodGVyLnVwZGF0ZUhpZ2hsaWdodChy
YW5nZS5zdGFydExpbmUsIGxhc3RWaXNpYmxlTGluZSk7Ci0gICAgICAgIGlmICghdXBkYXRlZCkg
ewotICAgICAgICAgICAgLy8gSGlnaGxpZ2h0cyBmb3IgdGhlIGNodW5rcyBiZWxvdyBhcmUgaW52
YWxpZCwgc28ganVzdCBjb2xsYXBzZSB0aGVtLgotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRo
aXMuY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdlLnN0YXJ0TGluZSk7IGkgPCB0aGlzLl90ZXh0Q2h1
bmtzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uY29s
bGFwc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMucmVwYWludEFsbCgpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge05vZGV9IGZyb20KLSAgICAgKiBAcGFyYW0ge05v
ZGV9IHRvCi0gICAgICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59Ci0gICAgICovCi0gICAgX2Nv
bGxlY3RMaW5lc0Zyb21ET006IGZ1bmN0aW9uKGZyb20sIHRvKQotICAgIHsKLSAgICAgICAgdmFy
IHRleHRDb250ZW50cyA9IFtdOwotICAgICAgICB2YXIgaGFzQ29udGVudCA9IGZhbHNlOwotICAg
ICAgICBmb3IgKHZhciBub2RlID0gZnJvbSA/IGZyb20ubmV4dFNpYmxpbmcgOiB0aGlzLl9jb250
YWluZXI7IG5vZGUgJiYgbm9kZSAhPT0gdG87IG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUo
dGhpcy5fY29udGFpbmVyKSkgewotICAgICAgICAgICAgLy8gU2tpcCBhbGwgY2hpbGRyZW4gb2Yg
dGhlIGRlY29yYXRpb24gY29udGFpbmVyIGFuZCBvdmVybGF5IGhpZ2hsaWdodCBzcGFucy4KLSAg
ICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IHRvICYmIChub2RlLl9pc0RlY29yYXRp
b25zRWxlbWVudCB8fCBub2RlLl9pc092ZXJsYXlIaWdobGlnaHRFbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgICAgICAgIGlmICghbm9kZSB8
fCBub2RlID09PSB0bykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaGFz
Q29udGVudCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSAiYnIiKQotICAgICAgICAgICAgICAgIHRleHRDb250ZW50cy5wdXNoKCJcbiIpOwot
ICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpCi0g
ICAgICAgICAgICAgICAgdGV4dENvbnRlbnRzLnB1c2gobm9kZS50ZXh0Q29udGVudCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFoYXNDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuIFtdOwot
Ci0gICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50cy5qb2luKCIiKTsKLSAgICAg
ICAgLy8gVGhlIGxhc3QgXG4gKGlmIGFueSkgZG9lcyBub3QgImNvdW50IiBpbiBhIERJVi4KLSAg
ICAgICAgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKC9cbiQvLCAiIik7Ci0KLSAg
ICAgICAgcmV0dXJuIHRleHRDb250ZW50LnNwbGl0KCJcbiIpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9oYW5kbGVTZWxlY3Rp
b25DaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHRleHRSYW5nZSA9
IHRoaXMuc2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmICh0ZXh0UmFuZ2UpCi0gICAgICAgICAgICB0
aGlzLl9sYXN0U2VsZWN0aW9uID0gdGV4dFJhbmdlOwotCi0gICAgICAgIHRoaXMuX3Rva2VuSGln
aGxpZ2h0ZXIuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHRleHRSYW5nZSk7Ci0gICAgICAgIHRoaXMu
X2JyYWNlSGlnaGxpZ2h0ZXIuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHRleHRSYW5nZSk7Ci0gICAg
ICAgIHRoaXMuX2RlbGVnYXRlLnNlbGVjdGlvbkNoYW5nZWQodGV4dFJhbmdlKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfaGFu
ZGxlVGV4dElucHV0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RleHRJ
bnB1dERhdGEgPSBldmVudC5kYXRhOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gc2hvcnRjdXRLZXkKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAq
LwotICAgIGhhbmRsZUtleURvd246IGZ1bmN0aW9uKHNob3J0Y3V0S2V5LCBldmVudCkKLSAgICB7
Ci0gICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5fc2hvcnRjdXRzW3Nob3J0Y3V0S2V5XTsKLSAg
ICAgICAgaWYgKGhhbmRsZXIgJiYgaGFuZGxlcigpKSB7Ci0gICAgICAgICAgICBldmVudC5jb25z
dW1lKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhp
cy5fa2V5RG93bkNvZGUgPSBldmVudC5rZXlDb2RlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9oYW5kbGVDdXQ6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fa2V5RG93bkNvZGUgPSBXZWJJbnNwZWN0b3Iu
S2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkRlbGV0ZS5jb2RlOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gc2Nyb2xsVG9wCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNs
aWVudEhlaWdodAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjaHVua1NpemUKLSAgICAgKi8KLSAg
ICBvdmVycmlkZVZpZXdwb3J0Rm9yVGVzdDogZnVuY3Rpb24oc2Nyb2xsVG9wLCBjbGllbnRIZWln
aHQsIGNodW5rU2l6ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Njcm9sbFRvcE92ZXJyaWRlRm9y
VGVzdCA9IHNjcm9sbFRvcDsKLSAgICAgICAgdGhpcy5fY2xpZW50SGVpZ2h0T3ZlcnJpZGVGb3JU
ZXN0ID0gY2xpZW50SGVpZ2h0OwotICAgICAgICB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplID0gY2h1
bmtTaXplOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
Q2h1bmtlZFBhbmVsLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuSGlnaGxpZ2h0RGVzY3JpcHRvciA9IGZ1bmN0
aW9uKCkgeyB9Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkhpZ2hsaWdodERl
c2NyaXB0b3IucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBs
aW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUKLSAgICAgKiBAcmV0dXJuIHti
b29sZWFufQotICAgICAqLwotICAgIGFmZmVjdHNMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBs
aW5lKSB7IHJldHVybiBmYWxzZTsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUKLSAgICAgKiBAcmV0dXJu
IHtBcnJheS48e3N0YXJ0Q29sdW1uOiBudW1iZXIsIGVuZENvbHVtbjogbnVtYmVyfT59Ci0gICAg
ICovCi0gICAgcmFuZ2VzRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlciwgbGluZSkgeyByZXR1
cm4gW107IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0g
ICAgY3NzQ2xhc3M6IGZ1bmN0aW9uKCkgeyByZXR1cm4gIiI7IH0sCi19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwuSGlnaGxpZ2h0RGVzY3JpcHRvcn0KLSAqLwotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwuUmVnZXhIaWdobGlnaHREZXNjcmlwdG9yID0gZnVuY3Rpb24ocmVnZXgsIGNzc0NsYXNz
KQotewotICAgIHRoaXMuX2Nzc0NsYXNzID0gY3NzQ2xhc3M7Ci0gICAgdGhpcy5fcmVnZXggPSBy
ZWdleDsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuUmVnZXhIaWdobGln
aHREZXNjcmlwdG9yLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJl
cn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lCi0gICAgICogQHJldHVy
biB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBhZmZlY3RzTGluZTogZnVuY3Rpb24obGluZU51bWJl
ciwgbGluZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlZ2V4Lmxhc3RJbmRleCA9IDA7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9yZWdleC50ZXN0KGxpbmUpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBs
aW5lCi0gICAgICogQHJldHVybiB7QXJyYXkuPHtzdGFydENvbHVtbjogbnVtYmVyLCBlbmRDb2x1
bW46IG51bWJlcn0+fQotICAgICAqLwotICAgIHJhbmdlc0ZvckxpbmU6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIsIGxpbmUpCi0gICAgewotICAgICAgICB2YXIgcmFuZ2VzID0gW107Ci0gICAgICAgIHZh
ciByZWdleFJlc3VsdDsKLSAgICAgICAgdGhpcy5fcmVnZXgubGFzdEluZGV4ID0gMDsKLSAgICAg
ICAgd2hpbGUgKHJlZ2V4UmVzdWx0ID0gdGhpcy5fcmVnZXguZXhlYyhsaW5lKSkgewotICAgICAg
ICAgICAgcmFuZ2VzLnB1c2goewotICAgICAgICAgICAgICAgIHN0YXJ0Q29sdW1uOiByZWdleFJl
c3VsdC5pbmRleCwKLSAgICAgICAgICAgICAgICBlbmRDb2x1bW46IHJlZ2V4UmVzdWx0LmluZGV4
ICsgcmVnZXhSZXN1bHRbMF0ubGVuZ3RoIC0gMQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHJhbmdlczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7c3RyaW5nfQotICAgICAqLwotICAgIGNzc0NsYXNzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fY3NzQ2xhc3M7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkhp
Z2hsaWdodERlc2NyaXB0b3J9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJh
bmdlCi0gKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3MKLSAqLwotV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwuUmFuZ2VIaWdobGlnaHREZXNjcmlwdG9yID0gZnVuY3Rpb24ocmFuZ2Us
IGNzc0NsYXNzKQotewotICAgIHRoaXMuX2Nzc0NsYXNzID0gY3NzQ2xhc3M7Ci0gICAgdGhpcy5f
cmFuZ2UgPSByYW5nZTsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuUmFu
Z2VIaWdobGlnaHREZXNjcmlwdG9yLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lCi0gICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBhZmZlY3RzTGluZTogZnVuY3Rpb24o
bGluZU51bWJlciwgbGluZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZS5zdGFy
dExpbmUgPD0gbGluZU51bWJlciAmJiBsaW5lTnVtYmVyIDw9IHRoaXMuX3JhbmdlLmVuZExpbmUg
JiYgbGluZS5sZW5ndGggPiAwOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lCi0gICAgICogQHJl
dHVybiB7QXJyYXkuPHtzdGFydENvbHVtbjogbnVtYmVyLCBlbmRDb2x1bW46IG51bWJlcn0+fQot
ICAgICAqLwotICAgIHJhbmdlc0ZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGxpbmUpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuYWZmZWN0c0xpbmUobGluZU51bWJlciwgbGluZSkpCi0g
ICAgICAgICAgICByZXR1cm4gW107Ci0KLSAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZU51
bWJlciA9PT0gdGhpcy5fcmFuZ2Uuc3RhcnRMaW5lID8gdGhpcy5fcmFuZ2Uuc3RhcnRDb2x1bW4g
OiAwOwotICAgICAgICB2YXIgZW5kQ29sdW1uID0gbGluZU51bWJlciA9PT0gdGhpcy5fcmFuZ2Uu
ZW5kTGluZSA/IE1hdGgubWluKHRoaXMuX3JhbmdlLmVuZENvbHVtbiwgbGluZS5sZW5ndGgpIDog
bGluZS5sZW5ndGg7Ci0gICAgICAgIHJldHVybiBbewotICAgICAgICAgICAgc3RhcnRDb2x1bW46
IHN0YXJ0Q29sdW1uLAotICAgICAgICAgICAgZW5kQ29sdW1uOiBlbmRDb2x1bW4KLSAgICAgICAg
fV07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8K
LSAgICBjc3NDbGFzczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Nz
c0NsYXNzOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7RWxl
bWVudH0gZWxlbWVudAotICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5FbGVt
ZW50TWV0cmljcyA9IGZ1bmN0aW9uKGVsZW1lbnQpCi17Ci0gICAgdGhpcy53aWR0aCA9IGVsZW1l
bnQub2Zmc2V0V2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDsK
LSAgICB0aGlzLmxlZnQgPSBlbGVtZW50Lm9mZnNldExlZnQ7Ci19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5FbGVtZW50TWV0cmljcz59IG1ldHJpY3MKLSAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzcwot
ICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5MaW5lT3ZlcmxheUhpZ2hsaWdo
dCA9IGZ1bmN0aW9uKG1ldHJpY3MsIGNzc0NsYXNzKQotewotICAgIHRoaXMubWV0cmljcyA9IG1l
dHJpY3M7Ci0gICAgdGhpcy5jc3NDbGFzcyA9IGNzc0NsYXNzOwotfQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbH0g
Y2h1bmtlZFBhbmVsCi0gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCi0gKiBAcGFyYW0ge251
bWJlcn0gZW5kTGluZQotICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1
bmN0aW9uKGNodW5rZWRQYW5lbCwgc3RhcnRMaW5lLCBlbmRMaW5lKQotewotICAgIHRoaXMuX2No
dW5rZWRQYW5lbCA9IGNodW5rZWRQYW5lbDsKLSAgICB0aGlzLl90ZXh0TW9kZWwgPSBjaHVua2Vk
UGFuZWwuX3RleHRNb2RlbDsKLQotICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOwot
ICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7Ci0gICAg
dGhpcy5lbGVtZW50Ll9jaHVuayA9IHRoaXM7Ci0KLSAgICB0aGlzLl9zdGFydExpbmUgPSBzdGFy
dExpbmU7Ci0gICAgZW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
LCBlbmRMaW5lKTsKLSAgICB0aGlzLmxpbmVzQ291bnQgPSBlbmRMaW5lIC0gc3RhcnRMaW5lOwot
Ci0gICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKLQotICAgIHRoaXMudXBkYXRlQ29sbGFwc2Vk
TGluZVJvdygpOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fHN0cmluZ30gZGVjb3JhdGlv
bgotICAgICAqLwotICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCi0gICAg
ewotICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuYmVnaW5Eb21VcGRhdGVzKCk7Ci0gICAgICAg
IGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0aGlzLmVs
ZW1lbnQuYWRkU3R5bGVDbGFzcyhkZWNvcmF0aW9uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoIXRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxl
bWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtZGVjb3JhdGlvbnMiOwotICAgICAgICAgICAg
ICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQuX2lzRGVjb3JhdGlvbnNFbGVtZW50
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5l
bGVtZW50LmRlY29yYXRpb25zRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0
aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LmFwcGVuZENoaWxkKGRlY29yYXRpb24pOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5lbmREb21VcGRhdGVzKCk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfEVsZW1lbnR9IGRlY29yYXRp
b24KLSAgICAgKi8KLSAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihkZWNvcmF0aW9uKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLmJlZ2luRG9tVXBkYXRlcygpOwotICAg
ICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKQotICAgICAgICAgICAgdGhp
cy5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7Ci0gICAgICAgIGVsc2UgaWYg
KHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLmVsZW1l
bnQuZGVjb3JhdGlvbnNFbGVtZW50LnJlbW92ZUNoaWxkKGRlY29yYXRpb24pOwotICAgICAgICB0
aGlzLl9jaHVua2VkUGFuZWwuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICByZW1vdmVB
bGxEZWNvcmF0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2h1bmtlZFBh
bmVsLmJlZ2luRG9tVXBkYXRlcygpOwotICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0g
IndlYmtpdC1saW5lLWNvbnRlbnQiOwotICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRlY29yYXRp
b25zRWxlbWVudCkgewotICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0Vs
ZW1lbnQucGFyZW50RWxlbWVudCkKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3Zl
Q2hpbGQodGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCk7Ci0gICAgICAgICAgICBkZWxl
dGUgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudDsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLl9jaHVua2VkUGFuZWwuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzRGVjb3JhdGVkOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTmFtZSAhPT0gIndl
YmtpdC1saW5lLWNvbnRlbnQiIHx8ICEhKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQg
JiYgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5maXJzdENoaWxkKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGdldCBzdGFy
dExpbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TGluZTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGdldCBlbmRM
aW5lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGFydExpbmUgKyB0aGlzLmxpbmVz
Q291bnQ7Ci0gICAgfSwKLQotICAgIHNldCBzdGFydExpbmUoc3RhcnRMaW5lKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fc3RhcnRMaW5lID0gc3RhcnRMaW5lOwotICAgICAgICB0aGlzLmVsZW1lbnQu
bGluZU51bWJlciA9IHN0YXJ0TGluZTsKLSAgICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkTGluZVJv
d3MpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5l
Um93cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dz
W2ldLmxpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgZXhwYW5kZWQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDsKLSAgICB9LAot
Ci0gICAgZXhwYW5kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZXhwYW5k
ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSB0cnVl
OwotCi0gICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKLSAgICAgICAgICAgIHRo
aXMuX2NodW5rZWRQYW5lbC5fcGFpbnRMaW5lcyh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExp
bmUgKyAxKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsKLQotICAgICAgICB0aGlzLl9leHBhbmRl
ZExpbmVSb3dzID0gW107Ci0gICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50
LnBhcmVudEVsZW1lbnQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YXJ0TGluZTsgaSA8
IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOwotICAgICAgICAgICAgcGFyZW50RWxlbWVu
dC5pbnNlcnRCZWZvcmUobGluZVJvdywgdGhpcy5lbGVtZW50KTsKLSAgICAgICAgICAgIHRoaXMu
X2V4cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsKLSAgICAgICAgfQotICAgICAgICBwYXJl
bnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2NodW5r
ZWRQYW5lbC5fcGFpbnRMaW5lcyh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0aGlz
LmxpbmVzQ291bnQpOwotCi0gICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5lbmREb21VcGRhdGVz
KCk7Ci0gICAgfSwKLQotICAgIGNvbGxhcHNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBp
ZiAoIXRoaXMuX2V4cGFuZGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
X2V4cGFuZGVkID0gZmFsc2U7Ci0gICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLmJlZ2luRG9t
VXBkYXRlcygpOwotCi0gICAgICAgIHZhciBlbGVtZW50SW5zZXJ0ZWQgPSBmYWxzZTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbaV07
Ci0gICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGxpbmVSb3cucGFyZW50RWxlbWVudDsK
LSAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFl
bGVtZW50SW5zZXJ0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluc2VydGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhp
cy5lbGVtZW50LCBsaW5lUm93KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fcmVsZWFzZUxpbmVzSGlnaGxpZ2h0KGxpbmVSb3cp
OwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9leHBhbmRlZExpbmVSb3dzOwotCi0g
ICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5lbmREb21VcGRhdGVzKCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgaGVpZ2h0KCkK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9jaHVua2VkUGFuZWwudG90YWxIZWlnaHQodGhpcy5lbGVtZW50KTsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2NodW5rZWRQYW5lbC50b3RhbEhlaWdodCh0aGlzLl9leHBhbmRl
ZExpbmVSb3dzWzBdLCB0aGlzLl9leHBhbmRlZExpbmVSb3dzW3RoaXMuX2V4cGFuZGVkTGluZVJv
d3MubGVuZ3RoIC0gMV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1i
ZXJ9Ci0gICAgICovCi0gICAgZ2V0IG9mZnNldFRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4g
KHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgJiYgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGgp
ID8gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXS5vZmZzZXRUb3AgOiB0aGlzLmVsZW1lbnQub2Zm
c2V0VG9wOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51
bWJlcgotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgX2NyZWF0ZVJvdzog
ZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5f
Y2h1bmtlZFBhbmVsLl9jYWNoZWRSb3dzLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAg
ICBsaW5lUm93LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKLSAgICAgICAgbGlu
ZVJvdy50ZXh0Q29udGVudCA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwotICAg
ICAgICBpZiAoIWxpbmVSb3cudGV4dENvbnRlbnQpCi0gICAgICAgICAgICBsaW5lUm93LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwotICAgICAgICByZXR1cm4gbGlu
ZVJvdzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIG9uIHBvdGVudGlhbGx5IGRh
bWFnZWQgLyBpbmNvbnNpc3RlbnQgY2h1bmsKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51
bWJlcgotICAgICAqIEByZXR1cm4gez9Ob2RlfQotICAgICAqLwotICAgIGxpbmVSb3dDb250YWlu
aW5nTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
ZXhwYW5kZWQpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50OwotICAgICAgICByZXR1
cm4gdGhpcy5leHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHJldHVybiB7RWxlbWVu
dH0KLSAgICAgKi8KLSAgICBleHBhbmRlZExpbmVSb3c6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkIHx8IGxpbmVOdW1iZXIgPCB0aGlzLnN0
YXJ0TGluZSB8fCBsaW5lTnVtYmVyID49IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50
KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRM
aW5lUm93cykKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2xpbmVOdW1iZXIgLSB0aGlzLnN0YXJ0TGluZV07Ci0g
ICAgfSwKLQotICAgIHVwZGF0ZUNvbGxhcHNlZExpbmVSb3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEgJiYgdGhpcy5fZXhwYW5kZWQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGxpbmVzID0gW107Ci0gICAgICAgIGZvciAo
dmFyIGkgPSB0aGlzLnN0YXJ0TGluZTsgaSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0Nv
dW50OyArK2kpCi0gICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkp
KTsKLQotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLkZBTFNFKQotICAgICAgICAgICAgY29uc29s
ZS5sb2coIlJlYnVpbGRpbmcgY2h1bmsgd2l0aCAiICsgbGluZXMubGVuZ3RoICsgIiBsaW5lcyIp
OwotCi0gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlz
LmVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOwotICAgICAgICAvLyBUaGUg
bGFzdCBlbXB0eSBsaW5lIHdpbGwgZ2V0IHN3YWxsb3dlZCBvdGhlcndpc2UuCi0gICAgICAgIGlm
ICghbGluZXNbbGluZXMubGVuZ3RoIC0gMV0pCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci0gICAgfSwKLQotICAgIGZp
cnN0RWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFu
ZGVkTGluZVJvd3MgPyB0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdIDogdGhpcy5lbGVtZW50Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAg
IGxhc3RFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZXhw
YW5kZWRMaW5lUm93cyA/IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbdGhpcy5fZXhwYW5kZWRMaW5l
Um93cy5sZW5ndGggLSAxXSA6IHRoaXMuZWxlbWVudDsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsfSBt
YWluUGFuZWwKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbH0gdGV4dE1v
ZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlRva2VuSGlnaGxpZ2h0
ZXIgPSBmdW5jdGlvbihtYWluUGFuZWwsIHRleHRNb2RlbCkKLXsKLSAgICB0aGlzLl9tYWluUGFu
ZWwgPSBtYWluUGFuZWw7Ci0gICAgdGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVsOwotfQotCi1X
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5Ub2tlbkhpZ2hsaWdodGVyLnByb3RvdHlw
ZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJh
bmdlCi0gICAgICovCi0gICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihyYW5nZSkK
LSAgICB7Ci0gICAgICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUhp
Z2hsaWdodCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJhbmdlLnN0YXJ0TGluZSAhPT0gcmFuZ2UuZW5kTGluZSkgewotICAgICAgICAgICAgdGhpcy5f
cmVtb3ZlSGlnaGxpZ2h0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICByYW5nZSA9IHJhbmdlLm5vcm1hbGl6ZSgpOwotICAgICAgICB2YXIgc2VsZWN0ZWRUZXh0
ID0gdGhpcy5fdGV4dE1vZGVsLmNvcHlSYW5nZShyYW5nZSk7Ci0gICAgICAgIGlmIChzZWxlY3Rl
ZFRleHQgPT09IHRoaXMuX3NlbGVjdGVkV29yZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBpZiAoc2VsZWN0ZWRUZXh0ID09PSAiIikgewotICAgICAgICAgICAgdGhpcy5fcmVtb3Zl
SGlnaGxpZ2h0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodGhpcy5faXNXb3JkKHJhbmdlLCBzZWxlY3RlZFRleHQpKQotICAgICAgICAgICAgdGhpcy5f
aGlnaGxpZ2h0KHNlbGVjdGVkVGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMu
X3JlbW92ZUhpZ2hsaWdodCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gd29yZAotICAgICAqLwotICAgIF9yZWdleFN0cmluZzogZnVuY3Rpb24od29yZCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAiXFxiIiArIHdvcmQgKyAiXFxiIjsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdGVkV29yZAotICAgICAqLwotICAgIF9o
aWdobGlnaHQ6IGZ1bmN0aW9uKHNlbGVjdGVkV29yZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jl
bW92ZUhpZ2hsaWdodCgpOwotICAgICAgICB0aGlzLl9zZWxlY3RlZFdvcmQgPSBzZWxlY3RlZFdv
cmQ7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodERlc2NyaXB0b3IgPSB0aGlzLl9tYWluUGFuZWwu
aGlnaGxpZ2h0UmVnZXgodGhpcy5fcmVnZXhTdHJpbmcoc2VsZWN0ZWRXb3JkKSwgInRleHQtZWRp
dG9yLXRva2VuLWhpZ2hsaWdodCIpCi0gICAgfSwKLQotICAgIF9yZW1vdmVIaWdobGlnaHQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFdvcmQpIHsKLSAgICAg
ICAgICAgIHRoaXMuX21haW5QYW5lbC5yZW1vdmVIaWdobGlnaHQodGhpcy5faGlnaGxpZ2h0RGVz
Y3JpcHRvcik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fc2VsZWN0ZWRXb3JkOwotICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodERlc2NyaXB0b3I7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5n
ZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RlZFRleHQKLSAgICAgKiBAcmV0dXJuIHti
b29sZWFufQotICAgICAqLwotICAgIF9pc1dvcmQ6IGZ1bmN0aW9uKHJhbmdlLCBzZWxlY3RlZFRl
eHQpCi0gICAgewotICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKHJhbmdl
LnN0YXJ0TGluZSk7Ci0gICAgICAgIHZhciBsZWZ0Qm91bmQgPSByYW5nZS5zdGFydENvbHVtbiA9
PT0gMCB8fCAhV2ViSW5zcGVjdG9yLlRleHRVdGlscy5pc1dvcmRDaGFyKGxpbmUuY2hhckF0KHJh
bmdlLnN0YXJ0Q29sdW1uIC0gMSkpOwotICAgICAgICB2YXIgcmlnaHRCb3VuZCA9IHJhbmdlLmVu
ZENvbHVtbiA9PT0gbGluZS5sZW5ndGggfHwgIVdlYkluc3BlY3Rvci5UZXh0VXRpbHMuaXNXb3Jk
Q2hhcihsaW5lLmNoYXJBdChyYW5nZS5lbmRDb2x1bW4pKTsKLSAgICAgICAgcmV0dXJuIGxlZnRC
b3VuZCAmJiByaWdodEJvdW5kICYmIFdlYkluc3BlY3Rvci5UZXh0VXRpbHMuaXNXb3JkKHNlbGVj
dGVkVGV4dCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsfSB0ZXh0TW9kZWwKLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlRleHRFZGl0b3J9IHRleHRFZGl0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkRlZmF1bHRU
ZXh0RWRpdG9yLldvcmRNb3ZlbWVudENvbnRyb2xsZXIgPSBmdW5jdGlvbih0ZXh0RWRpdG9yLCB0
ZXh0TW9kZWwpCi17Ci0gICAgdGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVsOwotICAgIHRoaXMu
X3RleHRFZGl0b3IgPSB0ZXh0RWRpdG9yOwotfQotCi1XZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRF
ZGl0b3IuV29yZE1vdmVtZW50Q29udHJvbGxlci5wcm90b3R5cGUgPSB7Ci0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge09iamVjdC48bnVtYmVyLCBmdW5jdGlvbigpPn0gc2hvcnRjdXRzCi0gICAg
ICovCi0gICAgX3JlZ2lzdGVyU2hvcnRjdXRzOiBmdW5jdGlvbihzaG9ydGN1dHMpCi0gICAgewot
ICAgICAgICB2YXIga2V5cyA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXM7Ci0g
ICAgICAgIHZhciBtb2RpZmllcnMgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2Rp
ZmllcnM7Ci0KLSAgICAgICAgY29uc3Qgd29yZEp1bXBNb2RpZmllciA9IFdlYkluc3BlY3Rvci5p
c01hYygpID8gbW9kaWZpZXJzLkFsdCA6IG1vZGlmaWVycy5DdHJsOwotICAgICAgICBzaG9ydGN1
dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLkJhY2tzcGFjZS5j
b2RlLCB3b3JkSnVtcE1vZGlmaWVyKV0gPSB0aGlzLl9oYW5kbGVDdHJsQmFja3NwYWNlLmJpbmQo
dGhpcyk7Ci0gICAgICAgIHNob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5t
YWtlS2V5KGtleXMuTGVmdC5jb2RlLCB3b3JkSnVtcE1vZGlmaWVyKV0gPSB0aGlzLl9oYW5kbGVD
dHJsQXJyb3cuYmluZCh0aGlzLCAibGVmdCIpOwotICAgICAgICBzaG9ydGN1dHNbV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLlJpZ2h0LmNvZGUsIHdvcmRKdW1wTW9k
aWZpZXIpXSA9IHRoaXMuX2hhbmRsZUN0cmxBcnJvdy5iaW5kKHRoaXMsICJyaWdodCIpOwotICAg
ICAgICBzaG9ydGN1dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlz
LkxlZnQuY29kZSwgbW9kaWZpZXJzLlNoaWZ0IHwgd29yZEp1bXBNb2RpZmllcildID0gdGhpcy5f
aGFuZGxlQ3RybFNoaWZ0QXJyb3cuYmluZCh0aGlzLCAibGVmdCIpOwotICAgICAgICBzaG9ydGN1
dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLlJpZ2h0LmNvZGUs
IG1vZGlmaWVycy5TaGlmdCB8IHdvcmRKdW1wTW9kaWZpZXIpXSA9IHRoaXMuX2hhbmRsZUN0cmxT
aGlmdEFycm93LmJpbmQodGhpcywgInJpZ2h0Iik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gc2VsZWN0aW9uCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IGRpcmVjdGlvbgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFu
Z2V9Ci0gICAgICovCi0gICAgX3JhbmdlRm9yQ3RybEFycm93TW92ZTogZnVuY3Rpb24oc2VsZWN0
aW9uLCBkaXJlY3Rpb24pCi0gICAgewotICAgICAgICBjb25zdCBpc1N0b3BDaGFyID0gV2ViSW5z
cGVjdG9yLlRleHRVdGlscy5pc1N0b3BDaGFyOwotICAgICAgICBjb25zdCBpc1NwYWNlQ2hhciA9
IFdlYkluc3BlY3Rvci5UZXh0VXRpbHMuaXNTcGFjZUNoYXI7Ci0KLSAgICAgICAgdmFyIGxpbmVO
dW1iZXIgPSBzZWxlY3Rpb24uZW5kTGluZTsKLSAgICAgICAgdmFyIGNvbHVtbiA9IHNlbGVjdGlv
bi5lbmRDb2x1bW47Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICJsZWZ0IikKLSAgICAgICAg
ICAgIC0tY29sdW1uOwotCi0gICAgICAgIGlmIChjb2x1bW4gPT09IC0xICYmIGRpcmVjdGlvbiA9
PT0gImxlZnQiKSB7Ci0gICAgICAgICAgICBpZiAobGluZU51bWJlciA+IDApCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHNlbGVjdGlvbi5zdGFydExp
bmUsIHNlbGVjdGlvbi5zdGFydENvbHVtbiwgbGluZU51bWJlciAtIDEsIHRoaXMuX3RleHRNb2Rl
bC5saW5lKGxpbmVOdW1iZXIgLSAxKS5sZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24uY2xvbmUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7Ci0gICAgICAgIGlm
IChjb2x1bW4gPT09IGxpbmUubGVuZ3RoICYmIGRpcmVjdGlvbiA9PT0gInJpZ2h0IikgewotICAg
ICAgICAgICAgaWYgKGxpbmVOdW1iZXIgKyAxIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHNlbGVj
dGlvbi5zdGFydExpbmUsIHNlbGVjdGlvbi5zdGFydENvbHVtbiwgc2VsZWN0aW9uLmVuZExpbmUg
KyAxLCAwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0
aW9uLmNsb25lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb24g
PT09ICJsZWZ0IiA/IC0xIDogKzE7Ci0gICAgICAgIHZhciBkaXJlY3Rpb25EZXBlbmRlbnRFbmRD
b2x1bW5PZmZzZXQgPSAoZGVsdGEgKyAxKSAvIDI7Ci0KLSAgICAgICAgaWYgKGlzU3BhY2VDaGFy
KGxpbmUuY2hhckF0KGNvbHVtbikpKSB7Ci0gICAgICAgICAgICB3aGlsZShjb2x1bW4gKyBkZWx0
YSA+PSAwICYmIGNvbHVtbiArIGRlbHRhIDwgbGluZS5sZW5ndGggJiYgaXNTcGFjZUNoYXIobGlu
ZS5jaGFyQXQoY29sdW1uICsgZGVsdGEpKSkKLSAgICAgICAgICAgICAgICBjb2x1bW4gKz0gZGVs
dGE7Ci0gICAgICAgICAgICBpZiAoY29sdW1uICsgZGVsdGEgPCAwIHx8IGNvbHVtbiArIGRlbHRh
ID09PSBsaW5lLmxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0UmFuZ2Uoc2VsZWN0aW9uLnN0YXJ0TGluZSwgc2VsZWN0aW9uLnN0YXJ0Q29sdW1uLCBs
aW5lTnVtYmVyLCBjb2x1bW4gKyBkaXJlY3Rpb25EZXBlbmRlbnRFbmRDb2x1bW5PZmZzZXQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbHVtbiArPSBkZWx0YTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBncm91cCA9IGlzU3RvcENoYXIobGluZS5jaGFyQXQoY29sdW1u
KSk7Ci0KLSAgICAgICAgd2hpbGUoY29sdW1uICsgZGVsdGEgPj0gMCAmJiBjb2x1bW4gKyBkZWx0
YSA8IGxpbmUubGVuZ3RoICYmIGlzU3RvcENoYXIobGluZS5jaGFyQXQoY29sdW1uICsgZGVsdGEp
KSA9PT0gZ3JvdXAgJiYgIWlzU3BhY2VDaGFyKGxpbmUuY2hhckF0KGNvbHVtbiArIGRlbHRhKSkp
Ci0gICAgICAgICAgICBjb2x1bW4gKz0gZGVsdGE7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlKHNlbGVjdGlvbi5zdGFydExpbmUsIHNlbGVjdGlvbi5zdGFydENv
bHVtbiwgbGluZU51bWJlciwgY29sdW1uICsgZGlyZWN0aW9uRGVwZW5kZW50RW5kQ29sdW1uT2Zm
c2V0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlv
bgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2hhbmRsZUN0cmxBcnJv
dzogZnVuY3Rpb24oZGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIG5ld1NlbGVjdGlvbiA9
IHRoaXMuX3JhbmdlRm9yQ3RybEFycm93TW92ZSh0aGlzLl90ZXh0RWRpdG9yLnNlbGVjdGlvbigp
LCBkaXJlY3Rpb24pOwotICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24uY29sbGFwc2VUb0VuZCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb24KLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9oYW5kbGVDdHJsU2hpZnRBcnJvdzogZnVuY3Rp
b24oZGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5zZXRTZWxlY3Rp
b24odGhpcy5fcmFuZ2VGb3JDdHJsQXJyb3dNb3ZlKHRoaXMuX3RleHRFZGl0b3Iuc2VsZWN0aW9u
KCksIGRpcmVjdGlvbikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBfaGFuZGxlQ3RybEJhY2tz
cGFjZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX3Rl
eHRFZGl0b3Iuc2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmICghc2VsZWN0aW9uLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgbmV3U2VsZWN0aW9uID0g
dGhpcy5fcmFuZ2VGb3JDdHJsQXJyb3dNb3ZlKHNlbGVjdGlvbiwgImxlZnQiKTsKLSAgICAgICAg
dGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5nZShuZXdTZWxlY3Rpb24ubm9ybWFsaXplKCksICIiLCBz
ZWxlY3Rpb24pOwotCi0gICAgICAgIHRoaXMuX3RleHRFZGl0b3Iuc2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbi5jb2xsYXBzZVRvRW5kKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsfSB0ZXh0RWRpdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTW9kZWx9IHRleHRNb2RlbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1v
ZGVsLkJyYWNlTWF0Y2hlcn0gYnJhY2VNYXRjaGVyCi0gKi8KLVdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLkJyYWNlSGlnaGxpZ2h0Q29udHJvbGxlciA9IGZ1bmN0aW9uKHRleHRFZGl0
b3IsIHRleHRNb2RlbCwgYnJhY2VNYXRjaGVyKQotewotICAgIHRoaXMuX3RleHRFZGl0b3IgPSB0
ZXh0RWRpdG9yOwotICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKLSAgICB0aGlzLl9i
cmFjZU1hdGNoZXIgPSBicmFjZU1hdGNoZXI7Ci0gICAgdGhpcy5faGlnaGxpZ2h0RGVzY3JpcHRv
cnMgPSBbXTsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuQnJhY2VIaWdo
bGlnaHRDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gbGluZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4KLSAgICAgKiBAcmV0dXJu
IHtudW1iZXJ9Ci0gICAgICovCi0gICAgYWN0aXZlQnJhY2VDb2x1bW5Gb3JDdXJzb3JQb3NpdGlv
bjogZnVuY3Rpb24obGluZSwgY29sdW1uKQotICAgIHsKLSAgICAgICAgdmFyIGNoYXIgPSBsaW5l
LmNoYXJBdChjb2x1bW4pOwotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLlRleHRVdGlscy5pc09w
ZW5pbmdCcmFjZUNoYXIoY2hhcikpCi0gICAgICAgICAgICByZXR1cm4gY29sdW1uOwotCi0gICAg
ICAgIHZhciBwcmV2aW91c0NoYXIgPSBsaW5lLmNoYXJBdChjb2x1bW4gLSAxKTsKLSAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5UZXh0VXRpbHMuaXNCcmFjZUNoYXIocHJldmlvdXNDaGFyKSkKLSAg
ICAgICAgICAgIHJldHVybiBjb2x1bW4gLSAxOwotCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3Iu
VGV4dFV0aWxzLmlzQnJhY2VDaGFyKGNoYXIpKQotICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHNlbGVjdGlvblJhbmdlCi0g
ICAgICovCi0gICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihzZWxlY3Rpb25SYW5n
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghc2VsZWN0aW9uUmFuZ2UgfHwgIXNlbGVjdGlvblJhbmdl
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlSGlnaGxpZ2h0KCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0
ZWRSYW5nZSAmJiB0aGlzLl9oaWdobGlnaHRlZFJhbmdlLmNvbXBhcmVUbyhzZWxlY3Rpb25SYW5n
ZSkgPT09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcmVtb3ZlSGln
aGxpZ2h0KCk7Ci0gICAgICAgIHZhciBsaW5lTnVtYmVyID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRM
aW5lOwotICAgICAgICB2YXIgY29sdW1uID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb2x1bW47Ci0g
ICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7Ci0gICAg
ICAgIGNvbHVtbiA9IHRoaXMuYWN0aXZlQnJhY2VDb2x1bW5Gb3JDdXJzb3JQb3NpdGlvbihsaW5l
LCBjb2x1bW4pOwotICAgICAgICBpZiAoY29sdW1uIDwgMCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgZW5jbG9zaW5nQnJhY2VzID0gdGhpcy5fYnJhY2VNYXRjaGVyLmVuY2xv
c2luZ0JyYWNlcyhsaW5lTnVtYmVyLCBjb2x1bW4pOwotICAgICAgICBpZiAoIWVuY2xvc2luZ0Jy
YWNlcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZFJh
bmdlID0gc2VsZWN0aW9uUmFuZ2U7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodERlc2NyaXB0b3Jz
LnB1c2godGhpcy5fdGV4dEVkaXRvci5oaWdobGlnaHRSYW5nZShXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlLmNyZWF0ZUZyb21Mb2NhdGlvbihlbmNsb3NpbmdCcmFjZXMubGVmdEJyYWNlLmxpbmVOdW1i
ZXIsIGVuY2xvc2luZ0JyYWNlcy5sZWZ0QnJhY2UuY29sdW1uKSwgInRleHQtZWRpdG9yLWJyYWNl
LW1hdGNoIikpOwotICAgICAgICB0aGlzLl9oaWdobGlnaHREZXNjcmlwdG9ycy5wdXNoKHRoaXMu
X3RleHRFZGl0b3IuaGlnaGxpZ2h0UmFuZ2UoV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5jcmVhdGVG
cm9tTG9jYXRpb24oZW5jbG9zaW5nQnJhY2VzLnJpZ2h0QnJhY2UubGluZU51bWJlciwgZW5jbG9z
aW5nQnJhY2VzLnJpZ2h0QnJhY2UuY29sdW1uKSwgInRleHQtZWRpdG9yLWJyYWNlLW1hdGNoIikp
OwotICAgIH0sCi0KLSAgICBfcmVtb3ZlSGlnaGxpZ2h0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMuX2hpZ2hsaWdodERlc2NyaXB0b3JzLmxlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5faGlnaGxpZ2h0RGVz
Y3JpcHRvcnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnJlbW92
ZUhpZ2hsaWdodCh0aGlzLl9oaWdobGlnaHREZXNjcmlwdG9yc1tpXSk7Ci0KLSAgICAgICAgdGhp
cy5faGlnaGxpZ2h0RGVzY3JpcHRvcnMgPSBbXTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hs
aWdodGVkUmFuZ2U7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbH0gbWFpblBhbmVsCi0gKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWx9IHRleHRNb2RlbAotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLkJyYWNlTWF0Y2hlcn0gYnJhY2VNYXRjaGVyCi0gKi8K
LVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlNtYXJ0QnJhY2VDb250cm9sbGVyID0g
ZnVuY3Rpb24obWFpblBhbmVsLCB0ZXh0TW9kZWwsIGJyYWNlTWF0Y2hlcikKLXsKLSAgICB0aGlz
Ll9tYWluUGFuZWwgPSBtYWluUGFuZWw7Ci0gICAgdGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVs
OwotICAgIHRoaXMuX2JyYWNlTWF0Y2hlciA9IGJyYWNlTWF0Y2hlcgotfQotCi1XZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5TbWFydEJyYWNlQ29udHJvbGxlci5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3QuPG51bWJlciwgZnVuY3Rpb24oKT59IHNo
b3J0Y3V0cwotICAgICAqLwotICAgIHJlZ2lzdGVyU2hvcnRjdXRzOiBmdW5jdGlvbihzaG9ydGN1
dHMpCi0gICAgewotICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdz
LnRleHRFZGl0b3JTbWFydEJyYWNlcy5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIga2V5cyA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXM7
Ci0gICAgICAgIHZhciBtb2RpZmllcnMgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllcnM7Ci0KLSAgICAgICAgc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lm1ha2VLZXkoa2V5cy5CYWNrc3BhY2UuY29kZSwgbW9kaWZpZXJzLk5vbmUpXSA9IHRoaXMu
X2hhbmRsZUJhY2tzcGFjZS5iaW5kKHRoaXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge09iamVjdC48c3RyaW5nLCBmdW5jdGlvbigpPn0gY2hhck92ZXJyaWRlcwotICAgICAq
LwotICAgIHJlZ2lzdGVyQ2hhck92ZXJyaWRlczogZnVuY3Rpb24oY2hhck92ZXJyaWRlcykKLSAg
ICB7Ci0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3MudGV4dEVk
aXRvclNtYXJ0QnJhY2VzLmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjaGFyT3ZlcnJpZGVzWyIoIl0gPSB0aGlzLl9oYW5kbGVCcmFjZVBhaXJJbnNlcnRpb24uYmlu
ZCh0aGlzLCAiKCkiKTsKLSAgICAgICAgY2hhck92ZXJyaWRlc1siKSJdID0gdGhpcy5faGFuZGxl
Q2xvc2luZ0JyYWNlT3ZlcnJpZGUuYmluZCh0aGlzLCAiKSIpOwotICAgICAgICBjaGFyT3ZlcnJp
ZGVzWyJ7Il0gPSB0aGlzLl9oYW5kbGVCcmFjZVBhaXJJbnNlcnRpb24uYmluZCh0aGlzLCAie30i
KTsKLSAgICAgICAgY2hhck92ZXJyaWRlc1sifSJdID0gdGhpcy5faGFuZGxlQ2xvc2luZ0JyYWNl
T3ZlcnJpZGUuYmluZCh0aGlzLCAifSIpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlQmFja3NwYWNl
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fbWFpblBh
bmVsLmxhc3RTZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlv
bi5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIGNv
bHVtbiA9IHNlbGVjdGlvbi5zdGFydENvbHVtbjsKLSAgICAgICAgaWYgKGNvbHVtbiA9PSAwKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciBsaW5lTnVtYmVyID0gc2Vs
ZWN0aW9uLnN0YXJ0TGluZTsKLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGlu
ZShsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKGNvbHVtbiA9PT0gbGluZS5sZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHBhaXIgPSBsaW5lLnN1YnN0cihj
b2x1bW4gLSAxLCAyKTsKLSAgICAgICAgaWYgKHBhaXIgPT09ICIoKSIgfHwgcGFpciA9PT0gInt9
IikgewotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5nZShuZXcgV2ViSW5zcGVj
dG9yLlRleHRSYW5nZShsaW5lTnVtYmVyLCBjb2x1bW4gLSAxLCBsaW5lTnVtYmVyLCBjb2x1bW4g
KyAxKSwgIiIpOwotICAgICAgICAgICAgdGhpcy5fbWFpblBhbmVsLnNldFNlbGVjdGlvbihXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlLmNyZWF0ZUZyb21Mb2NhdGlvbihsaW5lTnVtYmVyLCBjb2x1bW4g
LSAxKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBicmFjZVBhaXIKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9o
YW5kbGVCcmFjZVBhaXJJbnNlcnRpb246IGZ1bmN0aW9uKGJyYWNlUGFpcikKLSAgICB7Ci0gICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9tYWluUGFuZWwubGFzdFNlbGVjdGlvbigpLm5vcm1h
bGl6ZSgpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
dmFyIGxpbmVOdW1iZXIgPSBzZWxlY3Rpb24uc3RhcnRMaW5lOwotICAgICAgICAgICAgdmFyIGNv
bHVtbiA9IHNlbGVjdGlvbi5zdGFydENvbHVtbjsKLSAgICAgICAgICAgIHZhciBsaW5lID0gdGhp
cy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAoY29sdW1uIDwg
bGluZS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2hhciA9IGxpbmUuY2hhckF0KGNv
bHVtbik7Ci0gICAgICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5UZXh0VXRpbHMuaXNXb3Jk
Q2hhcihjaGFyKSB8fCAoIVdlYkluc3BlY3Rvci5UZXh0VXRpbHMuaXNCcmFjZUNoYXIoY2hhcikg
JiYgV2ViSW5zcGVjdG9yLlRleHRVdGlscy5pc1N0b3BDaGFyKGNoYXIpKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2Uoc2VsZWN0aW9uLCBicmFjZVBhaXIpOwotICAgICAg
ICB0aGlzLl9tYWluUGFuZWwuc2V0U2VsZWN0aW9uKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UuY3Jl
YXRlRnJvbUxvY2F0aW9uKHNlbGVjdGlvbi5zdGFydExpbmUsIHNlbGVjdGlvbi5zdGFydENvbHVt
biArIDEpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBicmFjZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICov
Ci0gICAgX2hhbmRsZUNsb3NpbmdCcmFjZU92ZXJyaWRlOiBmdW5jdGlvbihicmFjZSkKLSAgICB7
Ci0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9tYWluUGFuZWwubGFzdFNlbGVjdGlvbigp
Lm5vcm1hbGl6ZSgpOwotICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgbGluZU51bWJl
ciA9IHNlbGVjdGlvbi5zdGFydExpbmU7Ci0gICAgICAgIHZhciBjb2x1bW4gPSBzZWxlY3Rpb24u
c3RhcnRDb2x1bW47Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGlu
ZU51bWJlcik7Ci0gICAgICAgIGlmIChsaW5lLmNoYXJBdChjb2x1bW4pICE9PSBicmFjZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgYnJhY2VzID0gdGhpcy5fYnJh
Y2VNYXRjaGVyLmVuY2xvc2luZ0JyYWNlcyhsaW5lTnVtYmVyLCBjb2x1bW4pOwotICAgICAgICBp
ZiAoYnJhY2VzICYmIGJyYWNlcy5yaWdodEJyYWNlLmxpbmVOdW1iZXIgPT09IGxpbmVOdW1iZXIg
JiYgYnJhY2VzLnJpZ2h0QnJhY2UuY29sdW1uID09PSBjb2x1bW4pIHsKLSAgICAgICAgICAgIHRo
aXMuX21haW5QYW5lbC5zZXRTZWxlY3Rpb24oV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5jcmVhdGVG
cm9tTG9jYXRpb24obGluZU51bWJlciwgY29sdW1uICsgMSkpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0s
Ci19Ci0KLVdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRUZXh0RWRpdG9yID0gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RpYWxvZy5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGlhbG9nLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxOTMwMDU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGlhbG9nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtFbGVtZW50fSByZWxhdGl2ZVRvRWxl
bWVudAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRGlhbG9nRGVsZWdhdGV9IGRlbGVnYXRlCi0g
Ki8KLVdlYkluc3BlY3Rvci5EaWFsb2cgPSBmdW5jdGlvbihyZWxhdGl2ZVRvRWxlbWVudCwgZGVs
ZWdhdGUpCi17Ci0gICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICB0aGlzLl9yZWxh
dGl2ZVRvRWxlbWVudCA9IHJlbGF0aXZlVG9FbGVtZW50OwotCi0gICAgdGhpcy5fZ2xhc3NQYW5l
ID0gbmV3IFdlYkluc3BlY3Rvci5HbGFzc1BhbmUoKTsKLSAgICAvLyBJbnN0YWxsIGdsYXNzIHBh
bmUgY2FwdHVyaW5nIGV2ZW50cy4KLSAgICB0aGlzLl9nbGFzc1BhbmUuZWxlbWVudC50YWJJbmRl
eCA9IDA7Ci0gICAgdGhpcy5fZ2xhc3NQYW5lLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9j
dXMiLCB0aGlzLl9vbkdsYXNzUGFuZUZvY3VzLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRo
aXMuX2VsZW1lbnQgPSB0aGlzLl9nbGFzc1BhbmUuZWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2Iik7
Ci0gICAgdGhpcy5fZWxlbWVudC50YWJJbmRleCA9IDA7Ci0gICAgdGhpcy5fZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKSwgZmFsc2UpOwot
ICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX29uS2V5
RG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5fY2xvc2VLZXlzID0gWwotICAgICAg
ICBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVudGVyLmNvZGUsCi0gICAgICAg
IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUsCi0gICAgXTsKLQot
ICAgIGRlbGVnYXRlLnNob3codGhpcy5fZWxlbWVudCk7Ci0KLSAgICB0aGlzLl9wb3NpdGlvbigp
OwotICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZUhhbmRsZXIgPSB0aGlzLl9wb3NpdGlvbi5iaW5kKHRo
aXMpOwotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLl93aW5kb3dS
ZXNpemVIYW5kbGVyLCB0cnVlKTsKLSAgICB0aGlzLl9kZWxlZ2F0ZS5mb2N1cygpOwotfQotCi0v
KioKLSAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5EaWFsb2d9Ci0gKi8KLVdlYkluc3BlY3Rvci5E
aWFsb2cuY3VycmVudEluc3RhbmNlID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuRGlhbG9nLl9pbnN0YW5jZTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0VsZW1lbnR9IHJl
bGF0aXZlVG9FbGVtZW50Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EaWFsb2dEZWxlZ2F0ZX0g
ZGVsZWdhdGUKLSAqLwotV2ViSW5zcGVjdG9yLkRpYWxvZy5zaG93ID0gZnVuY3Rpb24ocmVsYXRp
dmVUb0VsZW1lbnQsIGRlbGVnYXRlKQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuRGlhbG9nLl9p
bnN0YW5jZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkluc3BlY3Rvci5EaWFsb2cuX2luc3Rh
bmNlID0gbmV3IFdlYkluc3BlY3Rvci5EaWFsb2cocmVsYXRpdmVUb0VsZW1lbnQsIGRlbGVnYXRl
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkRpYWxvZy5oaWRlID0gZnVuY3Rpb24oKQotewotICAgIGlm
ICghV2ViSW5zcGVjdG9yLkRpYWxvZy5faW5zdGFuY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBX
ZWJJbnNwZWN0b3IuRGlhbG9nLl9pbnN0YW5jZS5faGlkZSgpOwotfQotCi1XZWJJbnNwZWN0b3Iu
RGlhbG9nLnByb3RvdHlwZSA9IHsKLSAgICBfaGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX2lzSGlkaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlz
Ll9pc0hpZGluZyA9IHRydWU7Ci0KLSAgICAgICAgdGhpcy5fZGVsZWdhdGUud2lsbEhpZGUoKTsK
LQotICAgICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLkRpYWxvZy5faW5zdGFuY2U7Ci0gICAgICAg
IHRoaXMuX2dsYXNzUGFuZS5kaXNwb3NlKCk7Ci0gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCJyZXNpemUiLCB0aGlzLl93aW5kb3dSZXNpemVIYW5kbGVyLCB0cnVlKTsKLSAgICB9
LAotCi0gICAgX29uR2xhc3NQYW5lRm9jdXM6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgdGhpcy5faGlkZSgpOwotICAgIH0sCi0KLSAgICBfb25Gb2N1czogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5mb2N1cygpOwotICAgIH0sCi0KLSAgICBf
cG9zaXRpb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLnBvc2l0
aW9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuX3JlbGF0aXZlVG9FbGVtZW50KTsKLSAgICB9LAotCi0g
ICAgX29uS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQu
a2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5UYWIuY29kZSkg
ewotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVudGVyLmNvZGUpCi0gICAgICAgICAgICB0aGlzLl9k
ZWxlZ2F0ZS5vbkVudGVyKCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2Nsb3NlS2V5cy5pbmRleE9m
KGV2ZW50LmtleUNvZGUpID49IDApIHsKLSAgICAgICAgICAgIHRoaXMuX2hpZGUoKTsKLSAgICAg
ICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8K
LVdlYkluc3BlY3Rvci5EaWFsb2dEZWxlZ2F0ZSA9IGZ1bmN0aW9uKCkKLXsKLX0KLQotV2ViSW5z
cGVjdG9yLkRpYWxvZ0RlbGVnYXRlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAgICAgKi8KLSAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50
KQotICAgIHsKLSAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwotICAg
ICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZGlhbG9nLWNvbnRlbnRzIik7Ci0gICAg
ICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZGlhbG9nIik7ICAgIAotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAgICAgKiBAcGFyYW0ge0VsZW1l
bnR9IHJlbGF0aXZlVG9FbGVtZW50Ci0gICAgICovCi0gICAgcG9zaXRpb246IGZ1bmN0aW9uKGVs
ZW1lbnQsIHJlbGF0aXZlVG9FbGVtZW50KQotICAgIHsKLSAgICAgICAgdmFyIG9mZnNldCA9IHJl
bGF0aXZlVG9FbGVtZW50Lm9mZnNldFJlbGF0aXZlVG9XaW5kb3cod2luZG93KTsKLQotICAgICAg
ICB2YXIgcG9zaXRpb25YID0gb2Zmc2V0LnggKyAocmVsYXRpdmVUb0VsZW1lbnQub2Zmc2V0V2lk
dGggLSBlbGVtZW50Lm9mZnNldFdpZHRoKSAvIDI7Ci0gICAgICAgIHBvc2l0aW9uWCA9IE51bWJl
ci5jb25zdHJhaW4ocG9zaXRpb25YLCAwLCB3aW5kb3cuaW5uZXJXaWR0aCAtIGVsZW1lbnQub2Zm
c2V0V2lkdGgpOwotCi0gICAgICAgIHZhciBwb3NpdGlvblkgPSBvZmZzZXQueSArIChyZWxhdGl2
ZVRvRWxlbWVudC5vZmZzZXRIZWlnaHQgLSBlbGVtZW50Lm9mZnNldEhlaWdodCkgLyAyOwotICAg
ICAgICBwb3NpdGlvblkgPSBOdW1iZXIuY29uc3RyYWluKHBvc2l0aW9uWSwgMCwgd2luZG93Lmlu
bmVySGVpZ2h0IC0gZWxlbWVudC5vZmZzZXRIZWlnaHQpOwotCi0gICAgICAgIGVsZW1lbnQuc3R5
bGUubGVmdCA9IHBvc2l0aW9uWCArICJweCI7Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0g
cG9zaXRpb25ZICsgInB4IjsKLSAgICB9LAotCi0gICAgZm9jdXM6IGZ1bmN0aW9uKCkgeyB9LAot
Ci0gICAgb25FbnRlcjogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24o
KSB7IH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGlyZWN0
b3J5Q29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Rp
cmVjdG9yeUNvbnRlbnRWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmQ5
NjlhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGly
ZWN0b3J5Q29udGVudFZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkRhdGFHcmlkfQotICov
Ci1XZWJJbnNwZWN0b3IuRGlyZWN0b3J5Q29udGVudFZpZXcgPSBmdW5jdGlvbigpCi17Ci0gICAg
Y29uc3QgaW5kZXhlcyA9IFdlYkluc3BlY3Rvci5EaXJlY3RvcnlDb250ZW50Vmlldy5jb2x1bW5J
bmRleGVzOwotICAgIHZhciBjb2x1bW5zID0gWwotICAgICAgICB7aWQ6IGluZGV4ZXMuTmFtZSwg
dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTmFtZSIpLCBzb3J0YWJsZTogdHJ1ZSwgc29y
dDogV2ViSW5zcGVjdG9yLkRhdGFHcmlkLk9yZGVyLkFzY2VuZGluZywgd2lkdGg6ICIyMCUifSwK
LSAgICAgICAge2lkOiBpbmRleGVzLlVSTCwgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
VVJMIiksIHNvcnRhYmxlOiB0cnVlLCB3aWR0aDogIjIwJSJ9LAotICAgICAgICB7aWQ6IGluZGV4
ZXMuVHlwZSwgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVHlwZSIpLCBzb3J0YWJsZTog
dHJ1ZSwgd2lkdGg6ICIxNSUifSwKLSAgICAgICAge2lkOiBpbmRleGVzLlNpemUsIHRpdGxlOiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKSwgc29ydGFibGU6IHRydWUsIHdpZHRoOiAiMTAl
In0sCi0gICAgICAgIHtpZDogaW5kZXhlcy5Nb2RpZmljYXRpb25UaW1lLCB0aXRsZTogV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJNb2RpZmljYXRpb24gVGltZSIpLCBzb3J0YWJsZTogdHJ1ZSwgd2lk
dGg6ICIyNSUifQotICAgIF07Ci0KLSAgICBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuY2FsbCh0aGlz
LCBjb2x1bW5zKTsKLSAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRhdGFH
cmlkLkV2ZW50cy5Tb3J0aW5nQ2hhbmdlZCwgdGhpcy5fc29ydCwgdGhpcyk7Ci19Ci0KLVdlYklu
c3BlY3Rvci5EaXJlY3RvcnlDb250ZW50Vmlldy5jb2x1bW5JbmRleGVzID0gewotICAgIE5hbWU6
ICIwIiwKLSAgICBVUkw6ICIxIiwKLSAgICBUeXBlOiAiMiIsCi0gICAgU2l6ZTogIjMiLAotICAg
IE1vZGlmaWNhdGlvblRpbWU6ICI0IgotfQotCi1XZWJJbnNwZWN0b3IuRGlyZWN0b3J5Q29udGVu
dFZpZXcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYklu
c3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwuRGlyZWN0b3J5Pn0gZW50cmllcwotICAgICAqLwotICAg
IHNob3dFbnRyaWVzOiBmdW5jdGlvbihlbnRyaWVzKQotICAgIHsKLSAgICAgICAgY29uc3QgaW5k
ZXhlcyA9IFdlYkluc3BlY3Rvci5EaXJlY3RvcnlDb250ZW50Vmlldy5jb2x1bW5JbmRleGVzOwot
ICAgICAgICB0aGlzLnJvb3ROb2RlKCkucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5yb290
Tm9kZSgpLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuRGlyZWN0b3J5Q29udGVudFZpZXcu
Tm9kZShlbnRyaWVzW2ldKSk7Ci0gICAgfSwKLQotICAgIF9zb3J0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB2YXIgY29sdW1uID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnNvcnRD
b2x1bW5JZGVudGlmaWVyKCkpOwotICAgICAgICB0aGlzLnNvcnROb2RlcyhXZWJJbnNwZWN0b3Iu
RGlyZWN0b3J5Q29udGVudFZpZXcuTm9kZS5jb21wYXJhdG9yKGNvbHVtbiwgIXRoaXMuaXNTb3J0
T3JkZXJBc2NlbmRpbmcoKSksIGZhbHNlKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJ
bnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZX0KLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRyeX0gZW50cnkKLSAqLwotV2ViSW5zcGVjdG9yLkRp
cmVjdG9yeUNvbnRlbnRWaWV3Lk5vZGUgPSBmdW5jdGlvbihlbnRyeSkKLXsKLSAgICBjb25zdCBp
bmRleGVzID0gV2ViSW5zcGVjdG9yLkRpcmVjdG9yeUNvbnRlbnRWaWV3LmNvbHVtbkluZGV4ZXM7
Ci0gICAgdmFyIGRhdGEgPSB7fTsKLSAgICBkYXRhW2luZGV4ZXMuTmFtZV0gPSBlbnRyeS5uYW1l
OwotICAgIGRhdGFbaW5kZXhlcy5VUkxdID0gZW50cnkudXJsOwotICAgIGRhdGFbaW5kZXhlcy5U
eXBlXSA9IGVudHJ5LmlzRGlyZWN0b3J5ID8gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEaXJlY3Rv
cnkiKSA6IGVudHJ5Lm1pbWVUeXBlOwotICAgIGRhdGFbaW5kZXhlcy5TaXplXSA9ICIiOwotICAg
IGRhdGFbaW5kZXhlcy5Nb2RpZmljYXRpb25UaW1lXSA9ICIiOwotCi0gICAgV2ViSW5zcGVjdG9y
LkRhdGFHcmlkTm9kZS5jYWxsKHRoaXMsIGRhdGEpOwotICAgIHRoaXMuX2VudHJ5ID0gZW50cnk7
Ci0gICAgdGhpcy5fbWV0YWRhdGEgPSBudWxsOwotCi0gICAgdGhpcy5fZW50cnkucmVxdWVzdE1l
dGFkYXRhKHRoaXMuX21ldGFkYXRhUmVjZWl2ZWQuYmluZCh0aGlzKSk7Ci19Ci0KLS8qKgotICog
QHBhcmFtIHtzdHJpbmd9IGNvbHVtbgotICogQHBhcmFtIHtib29sZWFufSByZXZlcnNlCi0gKi8K
LVdlYkluc3BlY3Rvci5EaXJlY3RvcnlDb250ZW50Vmlldy5Ob2RlLmNvbXBhcmF0b3IgPSBmdW5j
dGlvbihjb2x1bW4sIHJldmVyc2UpCi17Ci0gICAgdmFyIHJldmVyc2VGYWN0b3IgPSByZXZlcnNl
ID8gLTEgOiAxOwotICAgIGNvbnN0IGluZGV4ZXMgPSBXZWJJbnNwZWN0b3IuRGlyZWN0b3J5Q29u
dGVudFZpZXcuY29sdW1uSW5kZXhlczsKLQotICAgIHN3aXRjaCAoY29sdW1uKSB7Ci0gICAgY2Fz
ZSBpbmRleGVzLk5hbWU6Ci0gICAgY2FzZSBpbmRleGVzLlVSTDoKLSAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKHgsIHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpc0RpcmVjdG9yeUNv
bXBhcmUoeCwgeSkgfHwgbmFtZUNvbXBhcmUoeCwgeSk7Ci0gICAgICAgIH07Ci0gICAgY2FzZSBp
bmRleGVzLlR5cGU6Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbih4LCB5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gaXNEaXJlY3RvcnlDb21wYXJlKHggLHkpIHx8IHR5cGVDb21wYXJl
KHgsIHkpIHx8IG5hbWVDb21wYXJlKHgsIHkpOwotICAgICAgICB9OwotICAgIGNhc2UgaW5kZXhl
cy5TaXplOgotICAgICAgICByZXR1cm4gZnVuY3Rpb24oeCwgeSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGlzRGlyZWN0b3J5Q29tcGFyZSh4LCB5KSB8fCBzaXplQ29tcGFyZSh4LCB5
KSB8fCBuYW1lQ29tcGFyZSh4LCB5KTsKLSAgICAgICAgfTsKLSAgICBjYXNlIGluZGV4ZXMuTW9k
aWZpY2F0aW9uVGltZToKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpc0RpcmVjdG9yeUNvbXBhcmUoeCwgeSkgfHwgbW9kaWZpY2F0
aW9uVGltZUNvbXBhcmUoeCwgeSkgfHwgbmFtZUNvbXBhcmUoeCwgeSk7Ci0gICAgICAgIH07Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gaXNEaXJlY3RvcnlDb21wYXJlKHgsIHkpCi0gICAgewotICAg
ICAgICBpZiAoeC5fZW50cnkuaXNEaXJlY3RvcnkgIT0geS5fZW50cnkuaXNEaXJlY3RvcnkpCi0g
ICAgICAgICAgICByZXR1cm4geS5fZW50cnkuaXNEaXJlY3RvcnkgPyAxIDogLTE7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG5hbWVDb21wYXJlKHgsIHkpCi0gICAg
ewotICAgICAgICByZXR1cm4gcmV2ZXJzZUZhY3RvciAqIHguX2VudHJ5Lm5hbWUuY29tcGFyZVRv
KHkuX2VudHJ5Lm5hbWUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHR5cGVDb21wYXJlKHgsIHkp
Ci0gICAgewotICAgICAgICByZXR1cm4gcmV2ZXJzZUZhY3RvciAqICh4Ll9lbnRyeS5taW1lVHlw
ZSB8fCAiIikuY29tcGFyZVRvKHkuX2VudHJ5Lm1pbWVUeXBlIHx8ICIiKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBzaXplQ29tcGFyZSh4LCB5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJldmVy
c2VGYWN0b3IgKiAoKHguX21ldGFkYXRhID8geC5fbWV0YWRhdGEuc2l6ZSA6IDApIC0gKHkuX21l
dGFkYXRhID8geS5fbWV0YWRhdGEuc2l6ZSA6IDApKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBt
b2RpZmljYXRpb25UaW1lQ29tcGFyZSh4LCB5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJldmVy
c2VGYWN0b3IgKiAoKHguX21ldGFkYXRhID8geC5fbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSA6
IDApIC0gKHkuX21ldGFkYXRhID8geS5fbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSA6IDApKTsK
LSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5EaXJlY3RvcnlDb250ZW50Vmlldy5Ob2RlLnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZXJyb3JDb2RlCi0gICAg
ICogQHBhcmFtIHtGaWxlU3lzdGVtQWdlbnQuTWV0YWRhdGF9IG1ldGFkYXRhCi0gICAgICovCi0g
ICAgX21ldGFkYXRhUmVjZWl2ZWQ6IGZ1bmN0aW9uKGVycm9yQ29kZSwgbWV0YWRhdGEpCi0gICAg
ewotICAgICAgICBjb25zdCBpbmRleGVzID0gV2ViSW5zcGVjdG9yLkRpcmVjdG9yeUNvbnRlbnRW
aWV3LmNvbHVtbkluZGV4ZXM7Ci0gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDApCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YTsKLSAgICAg
ICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7Ci0gICAgICAgIGlmICh0aGlzLl9lbnRyeS5pc0RpcmVj
dG9yeSkKLSAgICAgICAgICAgIGRhdGFbaW5kZXhlcy5TaXplXSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiLSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhW2luZGV4ZXMuU2l6ZV0g
PSBOdW1iZXIuYnl0ZXNUb1N0cmluZyhtZXRhZGF0YS5zaXplKTsKLSAgICAgICAgZGF0YVtpbmRl
eGVzLk1vZGlmaWNhdGlvblRpbWVdID0gbmV3IERhdGUobWV0YWRhdGEubW9kaWZpY2F0aW9uVGlt
ZSkudG9HTVRTdHJpbmcoKTsKLSAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKLSAgICB9LAotCi0g
ICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Eb2NrQ29udHJvbGxl
ci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRG9ja0NvbnRyb2xsZXIu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYTdlOTguLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Eb2NrQ29udHJvbGxlci5qcworKysg
L2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRl
bmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuRG9ja0NvbnRyb2xs
ZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fZG9ja1RvZ2dsZUJ1dHRvbiA9IG5ldyBXZWJJ
bnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKCIiLCAiZG9jay1zdGF0dXMtYmFyLWl0ZW0iLCAzKTsK
LSAgICB0aGlzLl9kb2NrVG9nZ2xlQnV0dG9uT3B0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0
dXNCYXJCdXR0b24oIiIsICJkb2NrLXN0YXR1cy1iYXItaXRlbSIsIDMpOwotICAgIHRoaXMuX2Rv
Y2tUb2dnbGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90b2dnbGVEb2Nr
U3RhdGUsIHRoaXMpOwotICAgIHRoaXMuX2RvY2tUb2dnbGVCdXR0b25PcHRpb24uYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCB0aGlzLl90b2dnbGVEb2NrU3RhdGUsIHRoaXMpOwotICAgIGlmIChQ
cmVmZXJlbmNlcy5zaG93RG9ja1RvUmlnaHQpCi0gICAgICAgIHRoaXMuX2RvY2tUb2dnbGVCdXR0
b24ubWFrZUxvbmdDbGlja0VuYWJsZWQodGhpcy5fY3JlYXRlRG9ja09wdGlvbnMuYmluZCh0aGlz
KSk7Ci0KLSAgICB0aGlzLnNldERvY2tTaWRlKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVj
dFsiZG9ja1NpZGUiXSB8fCAiYm90dG9tIik7Ci0gICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNo
b3dUb29sYmFySWNvbnMuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fdXBkYXRlVUkuYmluZCh0aGlz
KSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Eb2NrQ29udHJvbGxlci5TdGF0ZSA9IHsKLSAgICBEb2Nr
ZWRUb0JvdHRvbTogImJvdHRvbSIsCi0gICAgRG9ja2VkVG9SaWdodDogInJpZ2h0IiwKLSAgICBV
bmRvY2tlZDogInVuZG9ja2VkIgotfQotCi1XZWJJbnNwZWN0b3IuRG9ja0NvbnRyb2xsZXIuRXZl
bnRzID0gewotICAgIERvY2tTaWRlQ2hhbmdlZDogIkRvY2tTaWRlQ2hhbmdlZCIKLX0KLQotV2Vi
SW5zcGVjdG9yLkRvY2tDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIGdldCBlbGVtZW50KCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9kb2NrVG9nZ2xlQnV0dG9uLmVsZW1lbnQ7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBkb2NrU2lkZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RvY2tTaWRlOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZG9ja1NpZGUKLSAgICAgKi8KLSAgICBz
ZXREb2NrU2lkZTogZnVuY3Rpb24oZG9ja1NpZGUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
ZG9ja1NpZGUgPT09IGRvY2tTaWRlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
ICh0aGlzLl9kb2NrU2lkZSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5sYXN0
RG9ja1N0YXRlLnNldCh0aGlzLl9kb2NrU2lkZSk7Ci0KLSAgICAgICAgdGhpcy5fZG9ja1NpZGUg
PSBkb2NrU2lkZTsKLSAgICAgICAgaWYgKGRvY2tTaWRlID09PSBXZWJJbnNwZWN0b3IuRG9ja0Nv
bnRyb2xsZXIuU3RhdGUuVW5kb2NrZWQpIAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnVzZXJN
ZXRyaWNzLldpbmRvd0RvY2tlZC5yZWNvcmQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnVzZXJNZXRyaWNzLldpbmRvd1VuZG9ja2VkLnJlY29yZCgpOwotICAgICAg
ICB0aGlzLl91cGRhdGVVSSgpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuRG9ja0NvbnRyb2xsZXIuRXZlbnRzLkRvY2tTaWRlQ2hhbmdlZCwgdGhp
cy5fZG9ja1NpZGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59
IHVuYXZhaWxhYmxlCi0gICAgICovCi0gICAgc2V0RG9ja2luZ1VuYXZhaWxhYmxlOiBmdW5jdGlv
bih1bmF2YWlsYWJsZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lzRG9ja2luZ1VuYXZhaWxhYmxl
ID0gdW5hdmFpbGFibGU7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVVJKCk7Ci0gICAgfSwKLQotICAg
IF91cGRhdGVVSTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVu
dC5ib2R5OwotICAgICAgICBzd2l0Y2ggKHRoaXMuX2RvY2tTaWRlKSB7Ci0gICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkRvY2tDb250cm9sbGVyLlN0YXRlLkRvY2tlZFRvQm90dG9tOgotICAgICAg
ICAgICAgYm9keS5yZW1vdmVTdHlsZUNsYXNzKCJ1bmRvY2tlZCIpOwotICAgICAgICAgICAgYm9k
eS5yZW1vdmVTdHlsZUNsYXNzKCJkb2NrLXRvLXJpZ2h0Iik7Ci0gICAgICAgICAgICBib2R5LmFk
ZFN0eWxlQ2xhc3MoImRvY2stdG8tYm90dG9tIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuRG9ja0NvbnRyb2xsZXIuU3RhdGUuRG9ja2VkVG9SaWdodDog
Ci0gICAgICAgICAgICBib2R5LnJlbW92ZVN0eWxlQ2xhc3MoInVuZG9ja2VkIik7Ci0gICAgICAg
ICAgICBib2R5LmFkZFN0eWxlQ2xhc3MoImRvY2stdG8tcmlnaHQiKTsKLSAgICAgICAgICAgIGJv
ZHkucmVtb3ZlU3R5bGVDbGFzcygiZG9jay10by1ib3R0b20iKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Eb2NrQ29udHJvbGxlci5TdGF0ZS5VbmRvY2tl
ZDogCi0gICAgICAgICAgICBib2R5LmFkZFN0eWxlQ2xhc3MoInVuZG9ja2VkIik7Ci0gICAgICAg
ICAgICBib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRvY2stdG8tcmlnaHQiKTsKLSAgICAgICAgICAg
IGJvZHkucmVtb3ZlU3R5bGVDbGFzcygiZG9jay10by1ib3R0b20iKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93
VG9vbGJhckljb25zLmdldCgpKQotICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNs
YXNzKCJzaG93LXRvb2xiYXItaWNvbnMiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9j
dW1lbnQuYm9keS5yZW1vdmVTdHlsZUNsYXNzKCJzaG93LXRvb2xiYXItaWNvbnMiKTsKLQotICAg
ICAgICBpZiAodGhpcy5faXNEb2NraW5nVW5hdmFpbGFibGUgJiYgdGhpcy5fZG9ja1NpZGUgPT09
IFdlYkluc3BlY3Rvci5Eb2NrQ29udHJvbGxlci5TdGF0ZS5VbmRvY2tlZCkgewotICAgICAgICAg
ICAgdGhpcy5fZG9ja1RvZ2dsZUJ1dHRvbi5zdGF0ZSA9ICJ1bmRvY2siOwotICAgICAgICAgICAg
dGhpcy5fZG9ja1RvZ2dsZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2RvY2tUb2dnbGVCdXR0b24uc2V0RW5h
YmxlZCh0cnVlKTsKLQotICAgICAgICAvLyBDaG9vc2UgZGlmZmVyZW50IGxhc3Qgc3RhdGUgYmFz
ZWQgb24gdGhlIGN1cnJlbnQgb25lIGlmIG1pc3Npbmcgb3IgaWYgaXMgdGhlIHNhbWUuCi0gICAg
ICAgIHZhciBzaWRlcyA9IFtXZWJJbnNwZWN0b3IuRG9ja0NvbnRyb2xsZXIuU3RhdGUuRG9ja2Vk
VG9Cb3R0b20sIFdlYkluc3BlY3Rvci5Eb2NrQ29udHJvbGxlci5TdGF0ZS5VbmRvY2tlZCwgV2Vi
SW5zcGVjdG9yLkRvY2tDb250cm9sbGVyLlN0YXRlLkRvY2tlZFRvUmlnaHRdOwotICAgICAgICBz
aWRlcy5yZW1vdmUodGhpcy5fZG9ja1NpZGUpOwotICAgICAgICB2YXIgbGFzdFN0YXRlID0gV2Vi
SW5zcGVjdG9yLnNldHRpbmdzLmxhc3REb2NrU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgc2lkZXMu
cmVtb3ZlKGxhc3RTdGF0ZSk7Ci0gICAgICAgIGlmIChzaWRlcy5sZW5ndGggPT09IDIpIHsgLy8g
bGFzdCBzdGF0ZSB3YXMgbm90IGZyb20gdGhlIGxpc3Qgb2YgcG90ZW50aWFsIHZhbHVlcwotICAg
ICAgICAgICAgbGFzdFN0YXRlID0gc2lkZXNbMF07Ci0gICAgICAgICAgICBzaWRlcy5yZW1vdmUo
bGFzdFN0YXRlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9kZWNvcmF0ZUJ1dHRvbkZvclRh
cmdldFN0YXRlKHRoaXMuX2RvY2tUb2dnbGVCdXR0b24sIGxhc3RTdGF0ZSk7Ci0gICAgICAgIHRo
aXMuX2RlY29yYXRlQnV0dG9uRm9yVGFyZ2V0U3RhdGUodGhpcy5fZG9ja1RvZ2dsZUJ1dHRvbk9w
dGlvbiwgc2lkZXNbMF0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5TdGF0dXNCYXJCdXR0b259IGJ1dHRvbgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBz
dGF0ZQotICAgICAqLwotICAgIF9kZWNvcmF0ZUJ1dHRvbkZvclRhcmdldFN0YXRlOiBmdW5jdGlv
bihidXR0b24sIHN0YXRlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Eb2NrQ29udHJvbGxlci5TdGF0ZS5Eb2NrZWRUb0JvdHRvbToK
LSAgICAgICAgICAgIGJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRG9jayB0
byBtYWluIHdpbmRvdy4iKTsKLSAgICAgICAgICAgIGJ1dHRvbi5zdGF0ZSA9ICJib3R0b20iOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkRvY2tDb250cm9s
bGVyLlN0YXRlLkRvY2tlZFRvUmlnaHQ6Ci0gICAgICAgICAgICBidXR0b24udGl0bGUgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkRvY2sgdG8gbWFpbiB3aW5kb3cuIik7Ci0gICAgICAgICAgICBi
dXR0b24uc3RhdGUgPSAicmlnaHQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkRvY2tDb250cm9sbGVyLlN0YXRlLlVuZG9ja2VkOiAKLSAgICAgICAgICAg
IGJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVW5kb2NrIGludG8gc2VwYXJh
dGUgd2luZG93LiIpOwotICAgICAgICAgICAgYnV0dG9uLnN0YXRlID0gInVuZG9jayI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfY3JlYXRlRG9ja09wdGlv
bnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fZG9ja1RvZ2dsZUJ1
dHRvbk9wdGlvbl07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkV2ZW50fSBlCi0gICAgICovCi0gICAgX3RvZ2dsZURvY2tTdGF0ZTogZnVuY3Rpb24oZSkK
LSAgICB7Ci0gICAgICAgIHZhciBhY3Rpb247Ci0gICAgICAgIHN3aXRjaCAoZS50YXJnZXQuc3Rh
dGUpIHsKLSAgICAgICAgY2FzZSAiYm90dG9tIjogYWN0aW9uID0gImJvdHRvbSI7IGJyZWFrOwot
ICAgICAgICBjYXNlICJyaWdodCI6IGFjdGlvbiA9ICJyaWdodCI7IGJyZWFrOwotICAgICAgICBj
YXNlICJ1bmRvY2siOiBhY3Rpb24gPSAidW5kb2NrZWQiOyBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QucmVxdWVzdFNldERvY2tTaWRlKGFjdGlvbik7Ci0g
ICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0K
LQotLyoqCi0gKiBAdHlwZSB7P1dlYkluc3BlY3Rvci5Eb2NrQ29udHJvbGxlcn0KLSAqLwotV2Vi
SW5zcGVjdG9yLmRvY2tDb250cm9sbGVyID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EcmF3ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4
YmI5YzAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
cmF3ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8K
LVdlYkluc3BlY3Rvci5EcmF3ZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5lbGVtZW50ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlciIpOwotICAgIHRoaXMuX3NhdmVkSGVpZ2h0
ID0gMjAwOyAvLyBEZWZhdWx0LgotICAgIHRoaXMuX21haW5FbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIm1haW4iKTsKLSAgICB0aGlzLl90b29sYmFyRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIik7Ci0KLSAgICB0aGlzLl9mbG9hdGluZ1N0YXR1c0Jh
ckNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmbG9hdGluZy1zdGF0dXMtYmFy
LWNvbnRhaW5lciIpOwotICAgIFdlYkluc3BlY3Rvci5pbnN0YWxsRHJhZ0hhbmRsZSh0aGlzLl9m
bG9hdGluZ1N0YXR1c0JhckNvbnRhaW5lciwgdGhpcy5fc3RhcnRTdGF0dXNCYXJEcmFnZ2luZy5i
aW5kKHRoaXMpLCB0aGlzLl9zdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRT
dGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCAicm93LXJlc2l6ZSIpOwotCi0gICAgdGhpcy5f
ZHJhd2VyQ29udGVudHNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgdGhpcy5fZHJhd2VyQ29udGVudHNFbGVtZW50LmlkID0gImRyYXdlci1jb250ZW50cyI7Ci0g
ICAgdGhpcy5fZHJhd2VyQ29udGVudHNFbGVtZW50LmNsYXNzTmFtZSA9ICJkcmF3ZXItY29udGVu
dHMiOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9kcmF3ZXJDb250ZW50c0Vs
ZW1lbnQpOwotICAgIHRoaXMuX3ZpZXdTdGF0dXNCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICB0aGlzLl92aWV3U3RhdHVzQmFyLmFkZEV2ZW50TGlzdGVuZXIoIndlYmtp
dFRyYW5zaXRpb25FbmQiLCB0aGlzLmltbWVkaWF0ZWx5RmluaXNoQW5pbWF0aW9uLmJpbmQodGhp
cyksIGZhbHNlKTsKLSAgICB0aGlzLl92aWV3U3RhdHVzQmFyLnN0eWxlLm9wYWNpdHkgPSAwOwot
ICAgIHRoaXMuX2JvdHRvbVN0YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3R0
b20tc3RhdHVzLWJhci1jb250YWluZXIiKTsKLX0KLQotV2ViSW5zcGVjdG9yLkRyYXdlci5Bbmlt
YXRpb25UeXBlID0gewotICAgICAgICBJbW1lZGlhdGVseTogMCwKLSAgICAgICAgTm9ybWFsOiAx
LAotICAgICAgICBTbG93OiAyCi19Ci0KLVdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0g
ewotICAgIGdldCB2aXNpYmxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIXRoaXMuX3ZpZXc7
Ci0gICAgfSwKLQotICAgIF9jb25zdHJhaW5IZWlnaHQ6IGZ1bmN0aW9uKGhlaWdodCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWlu
Q29uc29sZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQudG90
YWxPZmZzZXRUb3AoKSAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOwotICAgIH0sCi0K
LSAgICBzaG93OiBmdW5jdGlvbih2aWV3LCBhbmltYXRpb25UeXBlKQotICAgIHsKLSAgICAgICAg
dGhpcy5pbW1lZGlhdGVseUZpbmlzaEFuaW1hdGlvbigpOwotCi0gICAgICAgIHZhciBkcmF3ZXJX
YXNWaXNpYmxlID0gdGhpcy52aXNpYmxlOwotCi0gICAgICAgIGlmICh0aGlzLl92aWV3KSB7Ci0g
ICAgICAgICAgICB0aGlzLl92aWV3LmRldGFjaCgpOwotICAgICAgICAgICAgdGhpcy5fZHJhd2Vy
Q29udGVudHNFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLl92aWV3ID0gdmlldzsKLQotICAgICAgICB2YXIgc3RhdHVzQmFySXRlbXMgPSB0aGlzLl92
aWV3LnN0YXR1c0Jhckl0ZW1zKCkgfHwgW107Ci0gICAgICAgIHRoaXMuX3ZpZXdTdGF0dXNCYXIu
cmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0dXNCYXJJ
dGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX3ZpZXdTdGF0dXNCYXIuYXBwZW5k
Q2hpbGQoc3RhdHVzQmFySXRlbXNbaV0pOwotCi0gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5
bGVDbGFzcygiZHJhd2VyLXZpc2libGUiKTsKLSAgICAgICAgdGhpcy5fZmxvYXRpbmdTdGF0dXNC
YXJDb250YWluZXIuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYW5lbC1z
dGF0dXMtYmFyIiksIHRoaXMuX2Zsb2F0aW5nU3RhdHVzQmFyQ29udGFpbmVyLmZpcnN0RWxlbWVu
dENoaWxkKTsKLSAgICAgICAgdGhpcy5fYm90dG9tU3RhdHVzQmFyLmFwcGVuZENoaWxkKHRoaXMu
X3ZpZXdTdGF0dXNCYXIpOwotICAgICAgICB0aGlzLl92aWV3LmRldGFjaCgpOwotICAgICAgICB0
aGlzLl92aWV3Lm1hcmtBc1Jvb3QoKTsKLSAgICAgICAgdGhpcy5fdmlldy5zaG93KHRoaXMuX2Ry
YXdlckNvbnRlbnRzRWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKGRyYXdlcldhc1Zpc2libGUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5f
Y29uc3RyYWluSGVpZ2h0KHRoaXMuX3NhdmVkSGVpZ2h0IHx8IHRoaXMuZWxlbWVudC5vZmZzZXRI
ZWlnaHQpOwotCi0gICAgICAgIHRoaXMuX2Zsb2F0aW5nU3RhdHVzQmFyQ29udGFpbmVyLnN0eWxl
LnBhZGRpbmdMZWZ0ID0gdGhpcy5fYm90dG9tU3RhdHVzQmFyLm9mZnNldExlZnQgKyAicHgiOwot
Ci0gICAgICAgIHRoaXMuX2dldEFuaW1hdGlvblN0eWxlcyhhbmltYXRpb25UeXBlKS5mb3JFYWNo
KGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcywgZG9jdW1lbnQuYm9keSk7Ci0KLSAgICAgICAg
ZnVuY3Rpb24gYW5pbWF0aW9uRmluaXNoZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50UGFuZWwoKS5kb1Jlc2l6ZSgpOwotICAgICAg
ICAgICAgaWYgKHRoaXMuX3ZpZXcgJiYgdGhpcy5fdmlldy5hZnRlclNob3cpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fdmlldy5hZnRlclNob3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X2FuaW1hdGlvbkZpbmlzaGVkID0gYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKTsKLQotICAg
ICAgICAvLyBBc3NlcnQgdGhhdCB0cmFuc2l0aW9uIHdpbGwgYmUgZG9uZSBhbmQgd2UgcmVjZWl2
ZSB0cmFuc2l0aW9uRW5kIGV2ZW50Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3ZpZXdT
dGF0dXNCYXIuc3R5bGUub3BhY2l0eSA9PT0gIjAiKTsKLQotICAgICAgICBpZiAoYW5pbWF0aW9u
VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5BbmltYXRpb25UeXBlLkltbWVkaWF0ZWx5KQot
ICAgICAgICAgICAgdGhpcy5pbW1lZGlhdGVseUZpbmlzaEFuaW1hdGlvbigpOwotCi0gICAgICAg
IHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwotICAgICAgICB0aGlz
Ll9tYWluRWxlbWVudC5zdHlsZS5ib3R0b20gPSBoZWlnaHQgKyAicHgiOwotICAgICAgICB0aGlz
Ll9mbG9hdGluZ1N0YXR1c0JhckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IDA7Ci0gICAg
ICAgIHRoaXMuX3ZpZXdTdGF0dXNCYXIuc3R5bGUub3BhY2l0eSA9IDE7Ci0gICAgfSwKLQotICAg
IGhpZGU6IGZ1bmN0aW9uKGFuaW1hdGlvblR5cGUpCi0gICAgewotICAgICAgICB0aGlzLmltbWVk
aWF0ZWx5RmluaXNoQW5pbWF0aW9uKCk7Ci0gICAgICAgIGlmICghdGhpcy52aXNpYmxlKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3NhdmVkSGVpZ2h0ID0gdGhpcy5lbGVt
ZW50Lm9mZnNldEhlaWdodDsKLQotICAgICAgICBXZWJJbnNwZWN0b3IucmVzdG9yZUZvY3VzRnJv
bUVsZW1lbnQodGhpcy5lbGVtZW50KTsKLQotICAgICAgICAvLyBUZW1wb3JhcmlseSBzZXQgcHJv
cGVydGllcyBhbmQgY2xhc3NlcyB0byBtaW1pYyB0aGUgcG9zdC1hbmltYXRpb24gdmFsdWVzIHNv
IHBhbmVscwotICAgICAgICAvLyBsaWtlIEVsZW1lbnRzIGluIHRoZWlyIHVwZGF0ZVN0YXR1c0Jh
ckl0ZW1zIGNhbGwgd2lsbCBzaXplIHRoaW5ncyB0byBmaXQgdGhlIGZpbmFsIGxvY2F0aW9uLgot
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12aXNpYmxlIik7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpLnN0YXR1
c0JhclJlc2l6ZWQoKTsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNsYXNzKCJkcmF3
ZXItdmlzaWJsZSIpOwotCi0gICAgICAgIHRoaXMuX2dldEFuaW1hdGlvblN0eWxlcyhhbmltYXRp
b25UeXBlKS5mb3JFYWNoKGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcywgZG9jdW1lbnQuYm9k
eSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gYW5pbWF0aW9uRmluaXNoZWQoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50UGFuZWwoKS5kb1Jl
c2l6ZSgpOwotICAgICAgICAgICAgdGhpcy5fdmlldy5kZXRhY2goKTsKLSAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl92aWV3OwotICAgICAgICAgICAgdGhpcy5fYm90dG9tU3RhdHVzQmFyLnJlbW92
ZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICB0aGlzLl9ib3R0b21TdGF0dXNCYXIuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhbmVsLXN0YXR1cy1iYXIiKSk7Ci0gICAgICAg
ICAgICB0aGlzLl9kcmF3ZXJDb250ZW50c0VsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlU3R5bGVDbGFzcygiZHJhd2VyLXZpc2libGUiKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2FuaW1hdGlvbkZpbmlzaGVkID0gYW5pbWF0aW9u
RmluaXNoZWQuYmluZCh0aGlzKTsKLQotICAgICAgICAvLyBBc3NlcnQgdGhhdCB0cmFuc2l0aW9u
IHdpbGwgYmUgZG9uZSBhbmQgd2UgcmVjZWl2ZSB0cmFuc2l0aW9uRW5kIGV2ZW50Ci0gICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3ZpZXdTdGF0dXNCYXIuc3R5bGUub3BhY2l0eSA9PT0gIjEi
KTsKLQotICAgICAgICBpZiAoYW5pbWF0aW9uVHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5B
bmltYXRpb25UeXBlLkltbWVkaWF0ZWx5KQotICAgICAgICAgICAgdGhpcy5pbW1lZGlhdGVseUZp
bmlzaEFuaW1hdGlvbigpOwotCi0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAw
OwotICAgICAgICB0aGlzLl9tYWluRWxlbWVudC5zdHlsZS5ib3R0b20gPSAwOwotICAgICAgICB0
aGlzLl9mbG9hdGluZ1N0YXR1c0JhckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IHRoaXMu
X2JvdHRvbVN0YXR1c0Jhci5vZmZzZXRMZWZ0ICsgInB4IjsKLSAgICAgICAgdGhpcy5fdmlld1N0
YXR1c0Jhci5zdHlsZS5vcGFjaXR5ID0gMDsKLSAgICB9LAotCi0gICAgcmVzaXplOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB0aGlzLl92aWV3LnN0b3JlU2Nyb2xsUG9zaXRpb25zKCk7Ci0gICAgICAg
IHZhciBoZWlnaHQgPSB0aGlzLl9jb25zdHJhaW5IZWlnaHQocGFyc2VJbnQodGhpcy5lbGVtZW50
LnN0eWxlLmhlaWdodCwgMTApKTsKLSAgICAgICAgdGhpcy5fbWFpbkVsZW1lbnQuc3R5bGUuYm90
dG9tID0gaGVpZ2h0ICsgInB4IjsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9
IGhlaWdodCArICJweCI7Ci0gICAgICAgIHRoaXMuX3ZpZXcuZG9SZXNpemUoKTsKLSAgICB9LAot
Ci0gICAgaW1tZWRpYXRlbHlGaW5pc2hBbmltYXRpb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlU3R5bGVDbGFzcygiYW5pbWF0ZSIpOwotICAgICAgICBk
b2N1bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImFuaW1hdGUtc2xvdyIpOwotICAgICAgICBp
ZiAodGhpcy5fYW5pbWF0aW9uRmluaXNoZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlv
bkZpbmlzaGVkKCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW9uRmluaXNoZWQ7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2dldEFuaW1hdGlvblN0eWxlczogZnVuY3Rpb24o
YW5pbWF0aW9uVHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYW5pbWF0aW9uVHlwZSkgewot
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5EcmF3ZXIuQW5pbWF0aW9uVHlwZS5TbG93OgotICAg
ICAgICAgICAgcmV0dXJuIFsiYW5pbWF0ZSIsICJhbmltYXRlLXNsb3ciXTsKLSAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuRHJhd2VyLkFuaW1hdGlvblR5cGUuTm9ybWFsOgotICAgICAgICAgICAg
cmV0dXJuIFsiYW5pbWF0ZSJdOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IFtdOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xl
YW59Ci0gICAgICovCi0gICAgX3N0YXJ0U3RhdHVzQmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgZXZlbnQudGFyZ2V0ICE9PSB0
aGlzLl9mbG9hdGluZ1N0YXR1c0JhckNvbnRhaW5lcikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICB0aGlzLl92aWV3LnN0b3JlU2Nyb2xsUG9zaXRpb25zKCk7Ci0gICAgICAg
IHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQgPSBldmVudC5wYWdlWSAtIHRoaXMuZWxlbWVudC50
b3RhbE9mZnNldFRvcCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgX3N0
YXR1c0JhckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBoZWln
aHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBldmVudC5wYWdlWSArIHRoaXMuX3N0YXR1c0JhckRy
YWdPZmZzZXQ7Ci0gICAgICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVm
ZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLl9tYWlu
RWxlbWVudC50b3RhbE9mZnNldFRvcCgpIC0gUHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCk7
Ci0KLSAgICAgICAgdGhpcy5fbWFpbkVsZW1lbnQuc3R5bGUuYm90dG9tID0gaGVpZ2h0ICsgInB4
IjsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7Ci0g
ICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50UGFuZWwoKSkKLSAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpLmRvUmVz
aXplKCk7Ci0gICAgICAgIHRoaXMuX3ZpZXcuZG9SZXNpemUoKTsKLQotICAgICAgICBldmVudC5j
b25zdW1lKHRydWUpOwotICAgIH0sCi0KLSAgICBfZW5kU3RhdHVzQmFyRHJhZ2dpbmc6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fc2F2ZWRIZWlnaHQgPSB0aGlzLmVsZW1l
bnQub2Zmc2V0SGVpZ2h0OwotICAgICAgICBkZWxldGUgdGhpcy5fc3RhdHVzQmFyRHJhZ09mZnNl
dDsKLQotICAgICAgICBldmVudC5jb25zdW1lKCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBl
IHtXZWJJbnNwZWN0b3IuRHJhd2VyfQotICovCi1XZWJJbnNwZWN0b3IuZHJhd2VyID0gbnVsbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQ
YW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5l
bC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggN2M4ZWJiYS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi1pbXBvcnRTY3JpcHQoIkNTU05hbWVkRmxvd0NvbGxlY3Rpb25z
Vmlldy5qcyIpOwotaW1wb3J0U2NyaXB0KCJDU1NOYW1lZEZsb3dWaWV3LmpzIik7Ci1pbXBvcnRT
Y3JpcHQoIkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMiKTsKLWltcG9ydFNjcmlwdCgiTWV0
cmljc1NpZGViYXJQYW5lLmpzIik7Ci1pbXBvcnRTY3JpcHQoIlByb3BlcnRpZXNTaWRlYmFyUGFu
ZS5qcyIpOwotaW1wb3J0U2NyaXB0KCJTdHlsZXNTaWRlYmFyUGFuZS5qcyIpOwotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5QYW5lbH0KLSAqLwotV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9y
LlBhbmVsLmNhbGwodGhpcywgImVsZW1lbnRzIik7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVk
Q1NTKCJicmVhZGNydW1iTGlzdC5jc3MiKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1Mo
ImVsZW1lbnRzUGFuZWwuY3NzIik7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJ0ZXh0
UHJvbXB0LmNzcyIpOwotICAgIHRoaXMuc2V0SGlkZU9uRGV0YWNoKCk7Ci0KLSAgICBjb25zdCBp
bml0aWFsU2lkZWJhcldpZHRoID0gMzI1OwotICAgIGNvbnN0IG1pbmltdW1Db250ZW50V2lkdGhQ
ZXJjZW50ID0gMzQ7Ci0gICAgY29uc3QgaW5pdGlhbFNpZGViYXJIZWlnaHQgPSAzMjU7Ci0gICAg
Y29uc3QgbWluaW11bUNvbnRlbnRIZWlnaHRQZXJjZW50ID0gMzQ7Ci0gICAgdGhpcy5jcmVhdGVT
aWRlYmFyVmlldyh0aGlzLmVsZW1lbnQsIFdlYkluc3BlY3Rvci5TaWRlYmFyVmlldy5TaWRlYmFy
UG9zaXRpb24uRW5kLCBpbml0aWFsU2lkZWJhcldpZHRoLCBpbml0aWFsU2lkZWJhckhlaWdodCk7
Ci0gICAgdGhpcy5zcGxpdFZpZXcuc2V0TWluaW11bVNpZGViYXJXaWR0aChQcmVmZXJlbmNlcy5t
aW5FbGVtZW50c1NpZGViYXJXaWR0aCk7Ci0gICAgdGhpcy5zcGxpdFZpZXcuc2V0TWluaW11bU1h
aW5XaWR0aFBlcmNlbnQobWluaW11bUNvbnRlbnRXaWR0aFBlcmNlbnQpOwotICAgIHRoaXMuc3Bs
aXRWaWV3LnNldE1pbmltdW1TaWRlYmFySGVpZ2h0KFByZWZlcmVuY2VzLm1pbkVsZW1lbnRzU2lk
ZWJhckhlaWdodCk7Ci0gICAgdGhpcy5zcGxpdFZpZXcuc2V0TWluaW11bU1haW5IZWlnaHRQZXJj
ZW50KG1pbmltdW1Db250ZW50SGVpZ2h0UGVyY2VudCk7Ci0KLSAgICB0aGlzLmNvbnRlbnRFbGVt
ZW50ID0gdGhpcy5zcGxpdFZpZXcubWFpbkVsZW1lbnQ7Ci0gICAgdGhpcy5jb250ZW50RWxlbWVu
dC5pZCA9ICJlbGVtZW50cy1jb250ZW50IjsKLSAgICB0aGlzLmNvbnRlbnRFbGVtZW50LmFkZFN0
eWxlQ2xhc3MoIm91dGxpbmUtZGlzY2xvc3VyZSIpOwotICAgIHRoaXMuY29udGVudEVsZW1lbnQu
YWRkU3R5bGVDbGFzcygic291cmNlLWNvZGUiKTsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5zZXR0
aW5ncy5kb21Xb3JkV3JhcC5nZXQoKSkKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5jbGFz
c0xpc3QuYWRkKCJub3dyYXAiKTsKLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZG9tV29yZFdy
YXAuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fZG9tV29yZFdyYXBTZXR0aW5nQ2hhbmdlZC5iaW5k
KHRoaXMpKTsKLQotICAgIHRoaXMuY29udGVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29u
dGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudUV2ZW50RmlyZWQuYmluZCh0aGlzKSwgdHJ1ZSk7
Ci0gICAgdGhpcy5zcGxpdFZpZXcuc2lkZWJhckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29u
dGV4dG1lbnUiLCB0aGlzLl9zaWRlYmFyQ29udGV4dE1lbnVFdmVudEZpcmVkLmJpbmQodGhpcyks
IGZhbHNlKTsKLQotICAgIHRoaXMudHJlZU91dGxpbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUodHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRoaXMuX3BvcHVsYXRlQ29udGV4dE1l
bnUuYmluZCh0aGlzKSwgdGhpcy5fc2V0UHNldWRvQ2xhc3NGb3JOb2RlSWQuYmluZCh0aGlzKSk7
Ci0gICAgdGhpcy50cmVlT3V0bGluZS53aXJlVG9Eb21BZ2VudCgpOwotCi0gICAgdGhpcy50cmVl
T3V0bGluZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LkV2ZW50cy5TZWxlY3RlZE5vZGVDaGFuZ2VkLCB0aGlzLl9zZWxlY3RlZE5vZGVDaGFuZ2VkLCB0
aGlzKTsKLQotICAgIHRoaXMuY3J1bWJzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgIHRoaXMuY3J1bWJzRWxlbWVudC5jbGFzc05hbWUgPSAiY3J1bWJzIjsKLSAg
ICB0aGlzLmNydW1ic0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5f
bW91c2VNb3ZlZEluQ3J1bWJzLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmNydW1ic0Vs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCB0aGlzLl9tb3VzZU1vdmVkT3V0T2ZD
cnVtYnMuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgdGhpcy5zaWRlYmFyUGFuZXMgPSB7fTsK
LSAgICB0aGlzLnNpZGViYXJQYW5lcy5jb21wdXRlZFN0eWxlID0gbmV3IFdlYkluc3BlY3Rvci5D
b21wdXRlZFN0eWxlU2lkZWJhclBhbmUoKTsKLSAgICB0aGlzLnNpZGViYXJQYW5lcy5zdHlsZXMg
PSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lKHRoaXMuc2lkZWJhclBhbmVzLmNv
bXB1dGVkU3R5bGUsIHRoaXMuX3NldFBzZXVkb0NsYXNzRm9yTm9kZUlkLmJpbmQodGhpcykpOwot
ICAgIHRoaXMuc2lkZWJhclBhbmVzLm1ldHJpY3MgPSBuZXcgV2ViSW5zcGVjdG9yLk1ldHJpY3NT
aWRlYmFyUGFuZSgpOwotICAgIHRoaXMuc2lkZWJhclBhbmVzLnByb3BlcnRpZXMgPSBuZXcgV2Vi
SW5zcGVjdG9yLlByb3BlcnRpZXNTaWRlYmFyUGFuZSgpOwotICAgIHRoaXMuc2lkZWJhclBhbmVz
LmRvbUJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRzU2lkZWJhclBhbmUu
Y3JlYXRlUHJveHkodGhpcyk7Ci0gICAgdGhpcy5zaWRlYmFyUGFuZXMuZXZlbnRMaXN0ZW5lcnMg
PSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUoKTsKLQotICAgIHRo
aXMuc2lkZWJhclBhbmVzLnN0eWxlcy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TaWRl
YmFyUGFuZS5FdmVudFR5cGVzLndhc1Nob3duLCB0aGlzLnVwZGF0ZVN0eWxlcy5iaW5kKHRoaXMs
IGZhbHNlKSk7Ci0gICAgdGhpcy5zaWRlYmFyUGFuZXMubWV0cmljcy5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5FdmVudFR5cGVzLndhc1Nob3duLCB0aGlzLnVwZGF0
ZU1ldHJpY3MuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5zaWRlYmFyUGFuZXMucHJvcGVydGllcy5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5FdmVudFR5cGVzLndhc1No
b3duLCB0aGlzLnVwZGF0ZVByb3BlcnRpZXMuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5zaWRlYmFy
UGFuZXMuZXZlbnRMaXN0ZW5lcnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2lkZWJh
clBhbmUuRXZlbnRUeXBlcy53YXNTaG93biwgdGhpcy51cGRhdGVFdmVudExpc3RlbmVycy5iaW5k
KHRoaXMpKTsKLQotICAgIHRoaXMuc2lkZWJhclBhbmVzLnN0eWxlcy5hZGRFdmVudExpc3RlbmVy
KCJzdHlsZSBlZGl0ZWQiLCB0aGlzLl9zdHlsZXNQYW5lRWRpdGVkLCB0aGlzKTsKLSAgICB0aGlz
LnNpZGViYXJQYW5lcy5zdHlsZXMuYWRkRXZlbnRMaXN0ZW5lcigic3R5bGUgcHJvcGVydHkgdG9n
Z2xlZCIsIHRoaXMuX3N0eWxlc1BhbmVFZGl0ZWQsIHRoaXMpOwotICAgIHRoaXMuc2lkZWJhclBh
bmVzLm1ldHJpY3MuYWRkRXZlbnRMaXN0ZW5lcigibWV0cmljcyBlZGl0ZWQiLCB0aGlzLl9tZXRy
aWNzUGFuZUVkaXRlZCwgdGhpcyk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuZG9ja0NvbnRyb2xsZXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRG9ja0NvbnRyb2xsZXIuRXZlbnRzLkRvY2tT
aWRlQ2hhbmdlZCwgdGhpcy5fZG9ja1NpZGVDaGFuZ2VkLmJpbmQodGhpcykpOwotICAgIFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5zcGxpdFZlcnRpY2FsbHlXaGVuRG9ja2VkVG9SaWdodC5hZGRDaGFu
Z2VMaXN0ZW5lcih0aGlzLl9kb2NrU2lkZUNoYW5nZWQuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5f
ZG9ja1NpZGVDaGFuZ2VkKCk7Ci0KLSAgICB0aGlzLl9wb3BvdmVySGVscGVyID0gbmV3IFdlYklu
c3BlY3Rvci5Qb3BvdmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0UG9wb3ZlckFuY2hv
ci5iaW5kKHRoaXMpLCB0aGlzLl9zaG93UG9wb3Zlci5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLl9w
b3BvdmVySGVscGVyLnNldFRpbWVvdXQoMCk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkF0dHJNb2RpZmll
ZCwgdGhpcy5fdXBkYXRlQnJlYWRjcnVtYklmTmVlZGVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0
b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRz
LkF0dHJSZW1vdmVkLCB0aGlzLl91cGRhdGVCcmVhZGNydW1iSWZOZWVkZWQsIHRoaXMpOwotICAg
IFdlYkluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01B
Z2VudC5FdmVudHMuTm9kZVJlbW92ZWQsIHRoaXMuX25vZGVSZW1vdmVkLCB0aGlzKTsKLSAgICBX
ZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdl
bnQuRXZlbnRzLkRvY3VtZW50VXBkYXRlZCwgdGhpcy5fZG9jdW1lbnRVcGRhdGVkRXZlbnQsIHRo
aXMpOwotICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5ET01BZ2VudC5FdmVudHMuSW5zcGVjdEVsZW1lbnRSZXF1ZXN0ZWQsIHRoaXMuX2luc3Bl
Y3RFbGVtZW50UmVxdWVzdGVkLCB0aGlzKTsKLQotICAgIGlmIChXZWJJbnNwZWN0b3IuZG9tQWdl
bnQuZXhpc3RpbmdEb2N1bWVudCgpKQotICAgICAgICB0aGlzLl9kb2N1bWVudFVwZGF0ZWQoV2Vi
SW5zcGVjdG9yLmRvbUFnZW50LmV4aXN0aW5nRG9jdW1lbnQoKSk7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKLSAgICBzdGF0dXNCYXJJdGVtczogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLmNydW1ic0VsZW1lbnRdOwotICAgIH0s
Ci0KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLnRyZWVPdXRsaW5lLmVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIHN0YXR1c0Jh
clJlc2l6ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVt
YlNpemVzKCk7Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICAvLyBBdHRhY2ggaGVhdnkgY29tcG9uZW50IGxhemlseQotICAgICAgICBpZiAodGhpcy50
cmVlT3V0bGluZS5lbGVtZW50LnBhcmVudEVsZW1lbnQgIT09IHRoaXMuY29udGVudEVsZW1lbnQp
Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudHJlZU91
dGxpbmUuZWxlbWVudCk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS53
YXNTaG93bi5jYWxsKHRoaXMpOwotCi0gICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYigpOwot
ICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnVwZGF0ZVNlbGVjdGlvbigpOwotICAgICAgICB0aGlz
LnRyZWVPdXRsaW5lLnNldFZpc2libGUodHJ1ZSk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLnRyZWVP
dXRsaW5lLnJvb3RET01Ob2RlKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LnJl
cXVlc3REb2N1bWVudCgpOwotICAgIH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7
Ci0gICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIHRo
aXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKLQotICAgICAgICAvLyBEZXRhY2ggaGVh
dnkgY29tcG9uZW50IG9uIGhpZGUKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5yZW1vdmVD
aGlsZCh0aGlzLnRyZWVPdXRsaW5lLmVsZW1lbnQpOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5Q
YW5lbC5wcm90b3R5cGUud2lsbEhpZGUuY2FsbCh0aGlzKTsKLSAgICB9LAotCi0gICAgb25SZXNp
emU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMudHJlZU91dGxpbmUudXBkYXRlU2Vs
ZWN0aW9uKCk7Ci0gICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYlNpemVzKCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gcHNldWRvQ2xhc3MKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVu
YWJsZQotICAgICAqLwotICAgIF9zZXRQc2V1ZG9DbGFzc0Zvck5vZGVJZDogZnVuY3Rpb24obm9k
ZUlkLCBwc2V1ZG9DbGFzcywgZW5hYmxlKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGUgPSBXZWJJ
bnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgICAgIGlmICghbm9kZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcHNldWRvQ2xhc3NlcyA9IG5vZGUu
Z2V0VXNlclByb3BlcnR5KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLlBzZXVkb1N0
YXRlRGVjb3JhdG9yLlByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmIChlbmFibGUpIHsKLSAgICAg
ICAgICAgIHBzZXVkb0NsYXNzZXMgPSBwc2V1ZG9DbGFzc2VzIHx8IFtdOwotICAgICAgICAgICAg
aWYgKHBzZXVkb0NsYXNzZXMuaW5kZXhPZihwc2V1ZG9DbGFzcykgPj0gMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBwc2V1ZG9DbGFzc2VzLnB1c2gocHNldWRvQ2xhc3Mp
OwotICAgICAgICAgICAgbm9kZS5zZXRVc2VyUHJvcGVydHkoV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZU91dGxpbmUuUHNldWRvU3RhdGVEZWNvcmF0b3IuUHJvcGVydHlOYW1lLCBwc2V1ZG9DbGFz
c2VzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcHNldWRvQ2xhc3NlcyB8
fCBwc2V1ZG9DbGFzc2VzLmluZGV4T2YocHNldWRvQ2xhc3MpIDwgMCkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBwc2V1ZG9DbGFzc2VzLnJlbW92ZShwc2V1ZG9DbGFzcyk7
Ci0gICAgICAgICAgICBpZiAoIXBzZXVkb0NsYXNzZXMubGVuZ3RoKQotICAgICAgICAgICAgICAg
IG5vZGUucmVtb3ZlVXNlclByb3BlcnR5KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LlBzZXVkb1N0YXRlRGVjb3JhdG9yLlByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB0aGlzLnRyZWVPdXRsaW5lLnVwZGF0ZU9wZW5DbG9zZVRhZ3Mobm9kZSk7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5jc3NNb2RlbC5mb3JjZVBzZXVkb1N0YXRlKG5vZGUuaWQsIG5vZGUuZ2V0VXNl
clByb3BlcnR5KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLlBzZXVkb1N0YXRlRGVj
b3JhdG9yLlByb3BlcnR5TmFtZSkpOwotICAgICAgICB0aGlzLl9tZXRyaWNzUGFuZUVkaXRlZCgp
OwotICAgICAgICB0aGlzLl9zdHlsZXNQYW5lRWRpdGVkKCk7Ci0KLSAgICAgICAgV2ViSW5zcGVj
dG9yLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5V
c2VyTWV0cmljcy5Vc2VyQWN0aW9uLCB7Ci0gICAgICAgICAgICBhY3Rpb246IFdlYkluc3BlY3Rv
ci5Vc2VyTWV0cmljcy5Vc2VyQWN0aW9uTmFtZXMuRm9yY2VkRWxlbWVudFN0YXRlLAotICAgICAg
ICAgICAgc2VsZWN0b3I6IG5vZGUuYXBwcm9wcmlhdGVTZWxlY3RvckZvcihmYWxzZSksCi0gICAg
ICAgICAgICBlbmFibGVkOiBlbmFibGUsCi0gICAgICAgICAgICBzdGF0ZTogcHNldWRvQ2xhc3MK
LSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIF9zZWxlY3RlZE5vZGVDaGFuZ2VkOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgc2VsZWN0ZWROb2RlID0gdGhpcy5zZWxlY3RlZERPTU5v
ZGUoKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZE5vZGUgJiYgdGhpcy5fbGFzdFZhbGlkU2VsZWN0
ZWROb2RlKQotICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRQYXRoT25SZXNldCA9IHRoaXMuX2xh
c3RWYWxpZFNlbGVjdGVkTm9kZS5wYXRoKCk7Ci0KLSAgICAgICAgdGhpcy51cGRhdGVCcmVhZGNy
dW1iKGZhbHNlKTsKLQotICAgICAgICB0aGlzLl91cGRhdGVTaWRlYmFycygpOwotCi0gICAgICAg
IGlmIChzZWxlY3RlZE5vZGUpIHsKLSAgICAgICAgICAgIENvbnNvbGVBZ2VudC5hZGRJbnNwZWN0
ZWROb2RlKHNlbGVjdGVkTm9kZS5pZCk7Ci0gICAgICAgICAgICB0aGlzLl9sYXN0VmFsaWRTZWxl
Y3RlZE5vZGUgPSBzZWxlY3RlZE5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9y
Lm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVPdXRsaW5lLkV2ZW50cy5TZWxlY3RlZE5vZGVDaGFuZ2VkKTsKLSAgICB9LAotCi0g
ICAgX3VwZGF0ZVNpZGViYXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBw
YW5lIGluIHRoaXMuc2lkZWJhclBhbmVzKQotICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lc1tw
YW5lXS5uZWVkc1VwZGF0ZSA9IHRydWU7Ci0KLSAgICAgICAgdGhpcy51cGRhdGVTdHlsZXModHJ1
ZSk7Ci0gICAgICAgIHRoaXMudXBkYXRlTWV0cmljcygpOwotICAgICAgICB0aGlzLnVwZGF0ZVBy
b3BlcnRpZXMoKTsKLSAgICAgICAgdGhpcy51cGRhdGVFdmVudExpc3RlbmVycygpOwotICAgIH0s
Ci0KLSAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLmN1
cnJlbnRRdWVyeTsKLSAgICB9LAotCi0gICAgX2RvY3VtZW50VXBkYXRlZEV2ZW50OiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RvY3VtZW50VXBkYXRlZChldmVudC5kYXRh
KTsKLSAgICB9LAotCi0gICAgX2RvY3VtZW50VXBkYXRlZDogZnVuY3Rpb24oaW5zcGVjdGVkUm9v
dERvY3VtZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzZXQoKTsKLSAgICAgICAgdGhpcy5z
ZWFyY2hDYW5jZWxlZCgpOwotCi0gICAgICAgIHRoaXMudHJlZU91dGxpbmUucm9vdERPTU5vZGUg
PSBpbnNwZWN0ZWRSb290RG9jdW1lbnQ7Ci0KLSAgICAgICAgaWYgKCFpbnNwZWN0ZWRSb290RG9j
dW1lbnQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvd2luZygpKQotICAgICAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5yZXF1ZXN0RG9jdW1lbnQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFdlYkluc3BlY3Rvci5kb21CcmVha3BvaW50
c1NpZGViYXJQYW5lLnJlc3RvcmVCcmVha3BvaW50cygpOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWx9Ci0gICAgICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkRPTU5vZGU9fSBjYW5kaWRhdGVGb2N1c05vZGUKLSAgICAgICAgICov
Ci0gICAgICAgIGZ1bmN0aW9uIHNlbGVjdE5vZGUoY2FuZGlkYXRlRm9jdXNOb2RlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZUZvY3VzTm9kZSkKLSAgICAgICAgICAgICAg
ICBjYW5kaWRhdGVGb2N1c05vZGUgPSBpbnNwZWN0ZWRSb290RG9jdW1lbnQuYm9keSB8fCBpbnNw
ZWN0ZWRSb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgICAgICAgICBpZiAoIWNh
bmRpZGF0ZUZvY3VzTm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IHRoaXMuc2VsZWN0RE9NTm9kZShjYW5kaWRhdGVGb2N1c05vZGUpOwotICAgICAgICAgICAgaWYg
KHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICB0
aGlzLnRyZWVPdXRsaW5lLnNlbGVjdGVkVHJlZUVsZW1lbnQuZXhwYW5kKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiBzZWxlY3RMYXN0U2VsZWN0ZWROb2RlKG5vZGVJZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRET01Ob2RlKCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBGb2N1c2VkIG5vZGUgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgd2hpbGUgcmVh
Y2hpbmcgb3V0IGZvciB0aGUgbGFzdCBzZWxlY3RlZCBub2RlLgotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2RlID0gbm9kZUlkID8gV2Vi
SW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpIDogbnVsbDsKLSAgICAgICAgICAg
IHNlbGVjdE5vZGUuY2FsbCh0aGlzLCBub2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0
aGlzLl9zZWxlY3RlZFBhdGhPblJlc2V0KQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFn
ZW50LnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCh0aGlzLl9zZWxlY3RlZFBhdGhPblJlc2V0LCBz
ZWxlY3RMYXN0U2VsZWN0ZWROb2RlLmJpbmQodGhpcykpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZWxlY3ROb2RlLmNhbGwodGhpcyk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rl
ZFBhdGhPblJlc2V0OwotICAgIH0sCi0KLSAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaFF1ZXJ5OwotICAgICAgICB0aGlzLl9o
aWRlU2VhcmNoSGlnaGxpZ2h0cygpOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250
cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKLQotICAgICAgICBkZWxl
dGUgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4OwotICAgICAgICBkZWxldGUgdGhpcy5f
c2VhcmNoUmVzdWx0czsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmNhbmNlbFNlYXJj
aCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAg
ICAgKi8KLSAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAgICAg
IC8vIENhbGwgc2VhcmNoQ2FuY2VsZWQgc2luY2UgaXQgd2lsbCByZXNldCBldmVyeXRoaW5nIHdl
IG5lZWQgYmVmb3JlIGRvaW5nIGEgbmV3IHNlYXJjaC4KLSAgICAgICAgdGhpcy5zZWFyY2hDYW5j
ZWxlZCgpOwotCi0gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPSBxdWVyeS50
cmltKCk7Ci0gICAgICAgIGlmICghd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5sZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fc2VhcmNoUXVlcnkgPSBxdWVyeTsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHJlc3VsdENvdW50Ci0gICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiByZXN1bHRDb3VudENhbGxiYWNrKHJlc3VsdENvdW50
KQotICAgICAgICB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51
cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQocmVzdWx0Q291bnQsIHRoaXMpOwotICAgICAgICAgICAg
aWYgKCFyZXN1bHRDb3VudCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IHRoaXMuX3NlYXJjaFJlc3VsdHMgPSBuZXcgQXJyYXkocmVzdWx0Q291bnQpOwotICAgICAgICAg
ICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7Ci0gICAgICAgICAgICB0aGlz
Lmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgfQotICAgICAgICBXZWJJbnNwZWN0
b3IuZG9tQWdlbnQucGVyZm9ybVNlYXJjaCh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCByZXN1bHRD
b3VudENhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBfY29udGV4dE1lbnVFdmVu
dEZpcmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHRvZ2dsZVdv
cmRXcmFwKCkKLSAgICAgICAgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmRv
bVdvcmRXcmFwLnNldCghV2ViSW5zcGVjdG9yLnNldHRpbmdzLmRvbVdvcmRXcmFwLmdldCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q29udGV4dE1lbnUoZXZlbnQpOwotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnBvcHVsYXRlQ29u
dGV4dE1lbnUoY29udGV4dE1lbnUsIGV2ZW50KTsKLQotICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LmV4cGVyaW1lbnRzU2V0dGluZ3MuY3NzUmVnaW9ucy5pc0VuYWJsZWQoKSkgewotICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgICAgICBjb250ZXh0TWVu
dS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJD
YXNlTWVudVRpdGxlcygpID8gIkNTUyBuYW1lZCBmbG93c1x1MjAyNiIgOiAiQ1NTIE5hbWVkIEZs
b3dzXHUyMDI2IiksIHRoaXMuX3Nob3dOYW1lZEZsb3dDb2xsZWN0aW9ucy5iaW5kKHRoaXMpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwotICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2JveEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiV29yZCB3cmFwIiA6ICJX
b3JkIFdyYXAiKSwgdG9nZ2xlV29yZFdyYXAuYmluZCh0aGlzKSwgV2ViSW5zcGVjdG9yLnNldHRp
bmdzLmRvbVdvcmRXcmFwLmdldCgpKTsKLQotICAgICAgICBjb250ZXh0TWVudS5zaG93KCk7Ci0g
ICAgfSwKLQotICAgIF9zaG93TmFtZWRGbG93Q29sbGVjdGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmNzc05hbWVkRmxvd0NvbGxlY3Rpb25zVmlldykK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NOYW1lZEZsb3dDb2xsZWN0aW9uc1ZpZXcgPSBu
ZXcgV2ViSW5zcGVjdG9yLkNTU05hbWVkRmxvd0NvbGxlY3Rpb25zVmlldygpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuY3NzTmFtZWRGbG93Q29sbGVjdGlvbnNWaWV3LnNob3dJbkRyYXdlcigpOwot
ICAgIH0sCi0KLSAgICBfZG9tV29yZFdyYXBTZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICBpZiAoZXZlbnQuZGF0YSkKLSAgICAgICAgICAgIHRoaXMuY29udGVu
dEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygibm93cmFwIik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQuYWRkU3R5bGVDbGFzcygibm93cmFwIik7Ci0KLSAg
ICAgICAgdmFyIHNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0ZWRET01Ob2RlKCk7Ci0gICAgICAg
IGlmICghc2VsZWN0ZWROb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciB0
cmVlRWxlbWVudCA9IHRoaXMudHJlZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KHNlbGVjdGVkTm9k
ZSk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHRyZWVFbGVtZW50LnVw
ZGF0ZVNlbGVjdGlvbigpOyAvLyBSZWNhbGN1bGF0ZSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGRpbWVu
c2lvbnMuCi0gICAgfSwKLQotICAgIHN3aXRjaFRvQW5kRm9jdXM6IGZ1bmN0aW9uKG5vZGUpCi0g
ICAgewotICAgICAgICAvLyBSZXNldCBzZWFyY2ggcmVzdG9yZS4KLSAgICAgICAgV2ViSW5zcGVj
dG9yLnNlYXJjaENvbnRyb2xsZXIuY2FuY2VsU2VhcmNoKCk7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5pbnNwZWN0b3JWaWV3LnNldEN1cnJlbnRQYW5lbCh0aGlzKTsKLSAgICAgICAgdGhpcy5zZWxl
Y3RET01Ob2RlKG5vZGUsIHRydWUpOwotICAgIH0sCi0KLSAgICBfcG9wdWxhdGVDb250ZXh0TWVu
dTogZnVuY3Rpb24oY29udGV4dE1lbnUsIG5vZGUpCi0gICAgewotICAgICAgICAvLyBBZGQgZGVi
YnVnaW5nLXJlbGF0ZWQgYWN0aW9ucwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0
b3IoKTsKLSAgICAgICAgdmFyIHBhbmUgPSBXZWJJbnNwZWN0b3IuZG9tQnJlYWtwb2ludHNTaWRl
YmFyUGFuZTsKLSAgICAgICAgcGFuZS5wb3B1bGF0ZU5vZGVDb250ZXh0TWVudShub2RlLCBjb250
ZXh0TWVudSk7Ci0gICAgfSwKLQotICAgIF9nZXRQb3BvdmVyQW5jaG9yOiBmdW5jdGlvbihlbGVt
ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGFuY2hvciA9IGVsZW1lbnQuZW5jbG9zaW5nTm9kZU9y
U2VsZldpdGhDbGFzcygid2Via2l0LWh0bWwtcmVzb3VyY2UtbGluayIpOwotICAgICAgICBpZiAo
YW5jaG9yKSB7Ci0gICAgICAgICAgICBpZiAoIWFuY2hvci5ocmVmKQotICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOwotCi0gICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3Iu
cmVzb3VyY2VUcmVlTW9kZWwucmVzb3VyY2VGb3JVUkwoYW5jaG9yLmhyZWYpOwotICAgICAgICAg
ICAgaWYgKCFyZXNvdXJjZSB8fCByZXNvdXJjZS50eXBlICE9PSBXZWJJbnNwZWN0b3IucmVzb3Vy
Y2VUeXBlcy5JbWFnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAg
ICAgYW5jaG9yLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gYW5jaG9yOwotICAgIH0sCi0gICAgCi0gICAgX2xvYWREaW1lbnNpb25zRm9yTm9kZTog
ZnVuY3Rpb24odHJlZUVsZW1lbnQsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLy8gV2UgZ2V0
IGhlcmUgZm9yIENTUyBwcm9wZXJ0aWVzLCB0b28sIHNvIGJhaWwgb3V0IGVhcmx5IGZvciBub24t
RE9NIHRyZWVFbGVtZW50cy4KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50LnRyZWVPdXRsaW5lICE9
PSB0aGlzLnRyZWVPdXRsaW5lKSB7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2YXIgbm9kZSA9IC8qKiBA
dHlwZSB7V2ViSW5zcGVjdG9yLkRPTU5vZGV9ICovICh0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9i
amVjdCk7Ci0KLSAgICAgICAgaWYgKCFub2RlLm5vZGVOYW1lKCkgfHwgbm9kZS5ub2RlTmFtZSgp
LnRvTG93ZXJDYXNlKCkgIT09ICJpbWciKSB7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdC5yZXNvbHZlTm9kZShub2RlLCAiIiwgcmVzb2x2ZWROb2RlKTsKLQotICAgICAgICBm
dW5jdGlvbiByZXNvbHZlZE5vZGUob2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IW9iamVjdCkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvYmplY3QuY2FsbEZ1bmN0aW9u
SlNPTihkaW1lbnNpb25zLCB1bmRlZmluZWQsIGNhbGxiYWNrKTsKLSAgICAgICAgICAgIG9iamVj
dC5yZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGRpbWVuc2lvbnMoKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB7IG9mZnNldFdpZHRoOiB0aGlzLm9mZnNl
dFdpZHRoLCBvZmZzZXRIZWlnaHQ6IHRoaXMub2Zmc2V0SGVpZ2h0LCBuYXR1cmFsV2lkdGg6IHRo
aXMubmF0dXJhbFdpZHRoLCBuYXR1cmFsSGVpZ2h0OiB0aGlzLm5hdHVyYWxIZWlnaHQgfTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e0VsZW1lbnR9IGFuY2hvcgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBvcG92ZXJ9IHBv
cG92ZXIKLSAgICAgKi8KLSAgICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGFuY2hvciwgcG9wb3Zl
cikKLSAgICB7Ci0gICAgICAgIHZhciBsaXN0SXRlbSA9IGFuY2hvci5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aE5vZGVOYW1lKCJsaSIpOwotICAgICAgICBpZiAobGlzdEl0ZW0gJiYgbGlzdEl0ZW0u
dHJlZUVsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLl9sb2FkRGltZW5zaW9uc0Zvck5vZGUobGlz
dEl0ZW0udHJlZUVsZW1lbnQsIFdlYkluc3BlY3Rvci5ET01QcmVzZW50YXRpb25VdGlscy5idWls
ZEltYWdlUHJldmlld0NvbnRlbnRzLmJpbmQoV2ViSW5zcGVjdG9yLkRPTVByZXNlbnRhdGlvblV0
aWxzLCBhbmNob3IuaHJlZiwgdHJ1ZSwgc2hvd1BvcG92ZXIpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLkRPTVByZXNlbnRhdGlvblV0aWxzLmJ1aWxkSW1hZ2VQcmV2
aWV3Q29udGVudHMoYW5jaG9yLmhyZWYsIHRydWUsIHNob3dQb3BvdmVyKTsKLQotICAgICAgICAv
KioKLSAgICAgICAgICogQHBhcmFtIHtFbGVtZW50PX0gY29udGVudHMKLSAgICAgICAgICovCi0g
ICAgICAgIGZ1bmN0aW9uIHNob3dQb3BvdmVyKGNvbnRlbnRzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIWNvbnRlbnRzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IHBvcG92ZXIuc2V0Q2FuU2hyaW5rKGZhbHNlKTsKLSAgICAgICAgICAgIHBvcG92ZXIuc2hvdyhj
b250ZW50cywgYW5jaG9yKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBqdW1wVG9OZXh0U2Vh
cmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJl
c3VsdHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGlkZVNlYXJjaEhp
Z2hsaWdodHMoKTsKLSAgICAgICAgaWYgKCsrdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4
ID49IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4ID0gMDsKLQotICAgICAgICB0aGlzLl9oaWdobGlnaHRDdXJyZW50
U2VhcmNoUmVzdWx0KCk7Ci0gICAgfSwKLQotICAgIGp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGlkZVNlYXJjaEhpZ2hsaWdodHMo
KTsKLSAgICAgICAgaWYgKC0tdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4IDwgMCkKLSAg
ICAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9ICh0aGlzLl9zZWFyY2hS
ZXN1bHRzLmxlbmd0aCAtIDEpOwotCi0gICAgICAgIHRoaXMuX2hpZ2hsaWdodEN1cnJlbnRTZWFy
Y2hSZXN1bHQoKTsKLSAgICB9LAotCi0gICAgX2hpZ2hsaWdodEN1cnJlbnRTZWFyY2hSZXN1bHQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2N1cnJlbnRTZWFy
Y2hSZXN1bHRJbmRleDsKLSAgICAgICAgdmFyIHNlYXJjaFJlc3VsdHMgPSB0aGlzLl9zZWFyY2hS
ZXN1bHRzOwotICAgICAgICB2YXIgc2VhcmNoUmVzdWx0ID0gc2VhcmNoUmVzdWx0c1tpbmRleF07
Ci0KLSAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PT0gbnVsbCkgewotICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlQ3VycmVudE1hdGNoSW5kZXgoaW5kZXgs
IHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5
cGVvZiBzZWFyY2hSZXN1bHQgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAvLyBObyBk
YXRhIGZvciBzbG90LCByZXF1ZXN0IGl0LgotICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2so
bm9kZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzZWFyY2hSZXN1bHRzW2luZGV4
XSA9IG5vZGUgfHwgbnVsbDsKLSAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRDdXJyZW50
U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
ZG9tQWdlbnQuc2VhcmNoUmVzdWx0KGluZGV4LCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hD
b250cm9sbGVyLnVwZGF0ZUN1cnJlbnRNYXRjaEluZGV4KGluZGV4LCB0aGlzKTsKLQotICAgICAg
ICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLnRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChzZWFy
Y2hSZXN1bHQpOwotICAgICAgICBpZiAodHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRyZWVF
bGVtZW50LmhpZ2hsaWdodFNlYXJjaFJlc3VsdHModGhpcy5fc2VhcmNoUXVlcnkpOwotICAgICAg
ICAgICAgdHJlZUVsZW1lbnQucmV2ZWFsKCk7Ci0gICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHRy
ZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ3ZWJraXQt
c2VhcmNoLXJlc3VsdCIpOwotICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKQotICAgICAg
ICAgICAgICAgIG1hdGNoZXNbMF0uc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIF9oaWRlU2VhcmNoSGlnaGxpZ2h0czogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hSZXN1bHRzKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB2YXIgc2VhcmNoUmVzdWx0ID0gdGhpcy5fc2VhcmNoUmVzdWx0c1t0aGlzLl9jdXJy
ZW50U2VhcmNoUmVzdWx0SW5kZXhdOwotICAgICAgICBpZiAoIXNlYXJjaFJlc3VsdCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGlu
ZS5maW5kVHJlZUVsZW1lbnQoc2VhcmNoUmVzdWx0KTsKLSAgICAgICAgaWYgKHRyZWVFbGVtZW50
KQotICAgICAgICAgICAgdHJlZUVsZW1lbnQuaGlkZVNlYXJjaEhpZ2hsaWdodHMoKTsKLSAgICB9
LAotCi0gICAgc2VsZWN0ZWRET01Ob2RlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy50cmVlT3V0bGluZS5zZWxlY3RlZERPTU5vZGUoKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gZm9jdXMKLSAgICAgKi8KLSAgICBzZWxlY3RET01O
b2RlOiBmdW5jdGlvbihub2RlLCBmb2N1cykKLSAgICB7Ci0gICAgICAgIHRoaXMudHJlZU91dGxp
bmUuc2VsZWN0RE9NTm9kZShub2RlLCBmb2N1cyk7Ci0gICAgfSwKLQotICAgIF9ub2RlUmVtb3Zl
ZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuaXNTaG93aW5nKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNydW1icyA9IHRoaXMuY3J1bWJz
RWxlbWVudDsKLSAgICAgICAgZm9yICh2YXIgY3J1bWIgPSBjcnVtYnMuZmlyc3RDaGlsZDsgY3J1
bWI7IGNydW1iID0gY3J1bWIubmV4dFNpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmIChjcnVtYi5y
ZXByZXNlbnRlZE9iamVjdCA9PT0gZXZlbnQuZGF0YS5ub2RlKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy51cGRhdGVCcmVhZGNydW1iKHRydWUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfc3R5bGVzUGFuZUVkaXRlZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gT25jZSBzdHlsZXMgYXJlIGVkaXRlZCwgdGhl
IE1ldHJpY3MgcGFuZSBzaG91bGQgYmUgdXBkYXRlZC4KLSAgICAgICAgdGhpcy5zaWRlYmFyUGFu
ZXMubWV0cmljcy5uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgIHRoaXMudXBkYXRlTWV0cmlj
cygpOwotICAgIH0sCi0KLSAgICBfbWV0cmljc1BhbmVFZGl0ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIC8vIE9uY2UgbWV0cmljcyBhcmUgZWRpdGVkLCB0aGUgU3R5bGVzIHBhbmUgc2hv
dWxkIGJlIHVwZGF0ZWQuCi0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLnN0eWxlcy5uZWVkc1Vw
ZGF0ZSA9IHRydWU7Ci0gICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKHRydWUpOwotICAgIH0sCi0K
LSAgICBfbW91c2VNb3ZlZEluQ3J1bWJzOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IHZhciBub2RlVW5kZXJNb3VzZSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucGFn
ZVgsIGV2ZW50LnBhZ2VZKTsKLSAgICAgICAgdmFyIGNydW1iRWxlbWVudCA9IG5vZGVVbmRlck1v
dXNlLmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoImNydW1iIik7Ci0KLSAgICAgICAgV2Vi
SW5zcGVjdG9yLmRvbUFnZW50LmhpZ2hsaWdodERPTU5vZGUoY3J1bWJFbGVtZW50ID8gY3J1bWJF
bGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmlkIDogMCk7Ci0KLSAgICAgICAgaWYgKCJfbW91c2VP
dXRPZkNydW1ic1RpbWVvdXQiIGluIHRoaXMpIHsKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0
aGlzLl9tb3VzZU91dE9mQ3J1bWJzVGltZW91dCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5f
bW91c2VPdXRPZkNydW1ic1RpbWVvdXQ7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX21vdXNl
TW92ZWRPdXRPZkNydW1iczogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbm9k
ZVVuZGVyTW91c2UgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LnBhZ2VYLCBldmVu
dC5wYWdlWSk7Ci0gICAgICAgIGlmIChub2RlVW5kZXJNb3VzZSAmJiBub2RlVW5kZXJNb3VzZS5p
c0Rlc2NlbmRhbnQodGhpcy5jcnVtYnNFbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuaGlkZURPTU5vZGVIaWdobGlnaHQoKTsKLQot
ICAgICAgICB0aGlzLl9tb3VzZU91dE9mQ3J1bWJzVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy51
cGRhdGVCcmVhZGNydW1iU2l6ZXMuYmluZCh0aGlzKSwgMTAwMCk7Ci0gICAgfSwKLQotICAgIF91
cGRhdGVCcmVhZGNydW1iSWZOZWVkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dmFyIG5hbWUgPSBldmVudC5kYXRhLm5hbWU7Ci0gICAgICAgIGlmIChuYW1lICE9PSAiY2xhc3Mi
ICYmIG5hbWUgIT09ICJpZCIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG5v
ZGUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5ET01Ob2RlfSAqLyAoZXZlbnQuZGF0YS5ub2Rl
KTsKLSAgICAgICAgdmFyIGNydW1icyA9IHRoaXMuY3J1bWJzRWxlbWVudDsKLSAgICAgICAgdmFy
IGNydW1iID0gY3J1bWJzLmZpcnN0Q2hpbGQ7Ci0gICAgICAgIHdoaWxlIChjcnVtYikgewotICAg
ICAgICAgICAgaWYgKGNydW1iLnJlcHJlc2VudGVkT2JqZWN0ID09PSBub2RlKSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1iKHRydWUpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3J1bWIgPSBjcnVtYi5uZXh0U2libGlu
ZzsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49
fSBmb3JjZVVwZGF0ZQotICAgICAqLwotICAgIHVwZGF0ZUJyZWFkY3J1bWI6IGZ1bmN0aW9uKGZv
cmNlVXBkYXRlKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmlzU2hvd2luZygpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjcnVtYnMgPSB0aGlzLmNydW1ic0VsZW1lbnQ7
Ci0KLSAgICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgdmFyIGNydW1iID0gY3J1
bWJzLmZpcnN0Q2hpbGQ7Ci0gICAgICAgIHdoaWxlIChjcnVtYikgewotICAgICAgICAgICAgaWYg
KGNydW1iLnJlcHJlc2VudGVkT2JqZWN0ID09PSB0aGlzLnNlbGVjdGVkRE9NTm9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgY3J1bWIuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgY3J1bWIucmVtb3ZlU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgY3J1bWIgPSBjcnVtYi5uZXh0U2libGluZzsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChoYW5kbGVkICYmICFmb3JjZVVwZGF0ZSkgewotICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byByZWJ1aWxkIHRoZSBjcnVtYnMsIGJ1dCB3ZSBuZWVkIHRvIGFkanVzdCBz
aXplcwotICAgICAgICAgICAgLy8gdG8gcmVmbGVjdCB0aGUgbmV3IGZvY3VzZWQgb3Igcm9vdCBu
b2RlLgotICAgICAgICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1iU2l6ZXMoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNydW1icy5yZW1vdmVDaGlsZHJlbigp
OwotCi0gICAgICAgIHZhciBwYW5lbCA9IHRoaXM7Ci0KLSAgICAgICAgZnVuY3Rpb24gc2VsZWN0
Q3J1bWJGdW5jdGlvbihldmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGNydW1iID0g
ZXZlbnQuY3VycmVudFRhcmdldDsKLSAgICAgICAgICAgIGlmIChjcnVtYi5oYXNTdHlsZUNsYXNz
KCJjb2xsYXBzZWQiKSkgewotICAgICAgICAgICAgICAgIC8vIENsaWNraW5nIGEgY29sbGFwc2Vk
IGNydW1iIHdpbGwgZXhwb3NlIHRoZSBoaWRkZW4gY3J1bWJzLgotICAgICAgICAgICAgICAgIGlm
IChjcnVtYiA9PT0gcGFuZWwuY3J1bWJzRWxlbWVudC5maXJzdENoaWxkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBmb2N1c2VkIGNydW1iIGlzIHRoZSBmaXJzdCBjaGlsZCwgcGlj
ayB0aGUgZmFydGhlc3QgY3J1bWIKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBpcyBzdGls
bCBoaWRkZW4uIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGV4cG9zZSBldmVyeSBjcnVtYi4KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRDcnVtYiA9IGNydW1iOwotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoY3VycmVudENydW1iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YXIgaGlkZGVuID0gY3VycmVudENydW1iLmhhc1N0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGNvbGxhcHNlZCA9IGN1cnJlbnRDcnVtYi5oYXNTdHlsZUNs
YXNzKCJjb2xsYXBzZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGlkZGVuICYm
ICFjb2xsYXBzZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjcnVtYiA9IGN1cnJlbnRDcnVtYjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRDcnVtYiA9IGN1cnJlbnRDcnVtYi5uZXh0U2libGluZzsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHBhbmVs
LnVwZGF0ZUJyZWFkY3J1bWJTaXplcyhjcnVtYik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBwYW5lbC5zZWxlY3RET01Ob2RlKGNydW1iLnJlcHJlc2VudGVkT2JqZWN0LCB0
cnVlKTsKLQotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAodmFyIGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkRE9NTm9kZSgpOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudC5ub2RlVHlwZSgpID09PSBOb2RlLkRPQ1VNRU5UX05PREUpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIGNydW1iID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOwotICAgICAgICAgICAgY3J1bWIuY2xhc3NOYW1lID0gImNydW1iIjsKLSAgICAgICAg
ICAgIGNydW1iLnJlcHJlc2VudGVkT2JqZWN0ID0gY3VycmVudDsKLSAgICAgICAgICAgIGNydW1i
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHNlbGVjdENydW1iRnVuY3Rpb24sIGZhbHNl
KTsKLQotICAgICAgICAgICAgdmFyIGNydW1iVGl0bGU7Ci0gICAgICAgICAgICBzd2l0Y2ggKGN1
cnJlbnQubm9kZVR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05P
REU6Ci0gICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5ET01QcmVzZW50YXRpb25VdGls
cy5kZWNvcmF0ZU5vZGVMYWJlbChjdXJyZW50LCBjcnVtYik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToKLSAgICAgICAg
ICAgICAgICAgICAgY3J1bWJUaXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHRleHQpIik7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUu
Q09NTUVOVF9OT0RFOgotICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gIjwhLS0+IjsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUu
RE9DVU1FTlRfVFlQRV9OT0RFOgotICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gIjwh
RE9DVFlQRT4iOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGNydW1iVGl0bGUgPSBjdXJyZW50Lm5vZGVO
YW1lSW5Db3JyZWN0Q2FzZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWNy
dW1iLmNoaWxkTm9kZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAgIG5hbWVF
bGVtZW50LnRleHRDb250ZW50ID0gY3J1bWJUaXRsZTsKLSAgICAgICAgICAgICAgICBjcnVtYi5h
cHBlbmRDaGlsZChuYW1lRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgY3J1bWIudGl0bGUgPSBj
cnVtYlRpdGxlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY3VycmVudCA9PT0g
dGhpcy5zZWxlY3RlZERPTU5vZGUoKSkKLSAgICAgICAgICAgICAgICBjcnVtYi5hZGRTdHlsZUNs
YXNzKCJzZWxlY3RlZCIpOwotICAgICAgICAgICAgaWYgKCFjcnVtYnMuY2hpbGROb2Rlcy5sZW5n
dGgpCi0gICAgICAgICAgICAgICAgY3J1bWIuYWRkU3R5bGVDbGFzcygiZW5kIik7Ci0KLSAgICAg
ICAgICAgIGNydW1icy5hcHBlbmRDaGlsZChjcnVtYik7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoY3J1bWJzLmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgICAgIGNydW1icy5sYXN0Q2hpbGQu
YWRkU3R5bGVDbGFzcygic3RhcnQiKTsKLQotICAgICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJT
aXplcygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBmb2N1
c2VkQ3J1bWIKLSAgICAgKi8KLSAgICB1cGRhdGVCcmVhZGNydW1iU2l6ZXM6IGZ1bmN0aW9uKGZv
Y3VzZWRDcnVtYikKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCA8
PSAwKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc3R5bGVzaGVldCBoYXNuJ3QgbG9hZGVkIHlldCBv
ciB0aGUgd2luZG93IGlzIGNsb3NlZCwKLSAgICAgICAgICAgIC8vIHNvIHdlIGNhbid0IGNhbGN1
bGF0ZSB3aGF0IGlzIG5lZWQuIFJldHVybiBlYXJseS4KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBjcnVtYnMgPSB0aGlzLmNydW1ic0VsZW1lbnQ7Ci0gICAg
ICAgIGlmICghY3J1bWJzLmNoaWxkTm9kZXMubGVuZ3RoIHx8IGNydW1icy5vZmZzZXRXaWR0aCA8
PSAwKQotICAgICAgICAgICAgcmV0dXJuOyAvLyBObyBjcnVtYnMsIGRvIG5vdGhpbmcuCi0KLSAg
ICAgICAgLy8gQSBaZXJvIGluZGV4IGlzIHRoZSByaWdodCBtb3N0IGNoaWxkIGNydW1iIGluIHRo
ZSBicmVhZGNydW1iLgotICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgICAgIHZh
ciBmb2N1c2VkSW5kZXggPSAwOwotICAgICAgICB2YXIgc2VsZWN0ZWRDcnVtYjsKLQotICAgICAg
ICB2YXIgaSA9IDA7Ci0gICAgICAgIHZhciBjcnVtYiA9IGNydW1icy5maXJzdENoaWxkOwotICAg
ICAgICB3aGlsZSAoY3J1bWIpIHsKLSAgICAgICAgICAgIC8vIEZpbmQgdGhlIHNlbGVjdGVkIGNy
dW1iIGFuZCBpbmRleC4KLSAgICAgICAgICAgIGlmICghc2VsZWN0ZWRDcnVtYiAmJiBjcnVtYi5o
YXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWRDcnVt
YiA9IGNydW1iOwotICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBGaW5kIHRoZSBmb2N1c2VkIGNydW1iIGluZGV4LgotICAg
ICAgICAgICAgaWYgKGNydW1iID09PSBmb2N1c2VkQ3J1bWIpCi0gICAgICAgICAgICAgICAgZm9j
dXNlZEluZGV4ID0gaTsKLQotICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBzdHlsZXMgdGhhdCBh
ZmZlY3Qgc2l6ZSBiZWZvcmUKLSAgICAgICAgICAgIC8vIGRlY2lkaW5nIHRvIHNob3J0ZW4gYW55
IGNydW1icy4KLSAgICAgICAgICAgIGlmIChjcnVtYiAhPT0gY3J1bWJzLmxhc3RDaGlsZCkKLSAg
ICAgICAgICAgICAgICBjcnVtYi5yZW1vdmVTdHlsZUNsYXNzKCJzdGFydCIpOwotICAgICAgICAg
ICAgaWYgKGNydW1iICE9PSBjcnVtYnMuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICBjcnVt
Yi5yZW1vdmVTdHlsZUNsYXNzKCJlbmQiKTsKLQotICAgICAgICAgICAgY3J1bWIucmVtb3ZlU3R5
bGVDbGFzcygiY29tcGFjdCIpOwotICAgICAgICAgICAgY3J1bWIucmVtb3ZlU3R5bGVDbGFzcygi
Y29sbGFwc2VkIik7Ci0gICAgICAgICAgICBjcnVtYi5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4i
KTsKLQotICAgICAgICAgICAgY3J1bWIgPSBjcnVtYi5uZXh0U2libGluZzsKLSAgICAgICAgICAg
ICsraTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0YXJ0IGFuZCBlbmQg
Y3J1bWIgY2xhc3NlcyBpbiBjYXNlIHRoZXkgZ290IHJlbW92ZWQgaW4gY29hbGVzY2VDb2xsYXBz
ZWRDcnVtYnMoKS4KLSAgICAgICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBjcnVtYnMgaW4gdGhlIGRv
Y3VtZW50IGlzIG9wcG9zaXRlIG9mIHRoZSB2aXN1YWwgb3JkZXIuCi0gICAgICAgIGNydW1icy5m
aXJzdENoaWxkLmFkZFN0eWxlQ2xhc3MoImVuZCIpOwotICAgICAgICBjcnVtYnMubGFzdENoaWxk
LmFkZFN0eWxlQ2xhc3MoInN0YXJ0Iik7Ci0KLSAgICAgICAgZnVuY3Rpb24gY3J1bWJzQXJlU21h
bGxlclRoYW5Db250YWluZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcmlnaHRQYWRk
aW5nID0gMjA7Ci0gICAgICAgICAgICB2YXIgZXJyb3JXYXJuaW5nRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJlcnJvci13YXJuaW5nLWNvdW50Iik7Ci0gICAgICAgICAgICBpZiAo
IVdlYkluc3BlY3Rvci5kcmF3ZXIudmlzaWJsZSAmJiBlcnJvcldhcm5pbmdFbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJpZ2h0UGFkZGluZyArPSBlcnJvcldhcm5pbmdFbGVtZW50Lm9mZnNldFdp
ZHRoOwotICAgICAgICAgICAgcmV0dXJuICgoY3J1bWJzLnRvdGFsT2Zmc2V0TGVmdCgpICsgY3J1
bWJzLm9mZnNldFdpZHRoICsgcmlnaHRQYWRkaW5nKSA8IHdpbmRvdy5pbm5lcldpZHRoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChjcnVtYnNBcmVTbWFsbGVyVGhhbkNvbnRhaW5lcigpKQot
ICAgICAgICAgICAgcmV0dXJuOyAvLyBObyBuZWVkIHRvIGNvbXBhY3QgdGhlIGNydW1icywgdGhl
eSBhbGwgZml0IGF0IGZ1bGwgc2l6ZS4KLQotICAgICAgICB2YXIgQm90aFNpZGVzID0gMDsKLSAg
ICAgICAgdmFyIEFuY2VzdG9yU2lkZSA9IC0xOwotICAgICAgICB2YXIgQ2hpbGRTaWRlID0gMTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2lnbmlmaWNhbnRD
cnVtYgotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbWFrZUNydW1ic1NtYWxsZXIoc2hy
aW5raW5nRnVuY3Rpb24sIGRpcmVjdGlvbiwgc2lnbmlmaWNhbnRDcnVtYikKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFzaWduaWZpY2FudENydW1iKQotICAgICAgICAgICAgICAgIHNpZ25p
ZmljYW50Q3J1bWIgPSAoZm9jdXNlZENydW1iIHx8IHNlbGVjdGVkQ3J1bWIpOwotCi0gICAgICAg
ICAgICBpZiAoc2lnbmlmaWNhbnRDcnVtYiA9PT0gc2VsZWN0ZWRDcnVtYikKLSAgICAgICAgICAg
ICAgICB2YXIgc2lnbmlmaWNhbnRJbmRleCA9IHNlbGVjdGVkSW5kZXg7Ci0gICAgICAgICAgICBl
bHNlIGlmIChzaWduaWZpY2FudENydW1iID09PSBmb2N1c2VkQ3J1bWIpCi0gICAgICAgICAgICAg
ICAgdmFyIHNpZ25pZmljYW50SW5kZXggPSBmb2N1c2VkSW5kZXg7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRJbmRleCA9IDA7Ci0gICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcnVtYnMuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoY3J1bWJzLmNoaWxkTm9kZXNbaV0gPT09IHNpZ25p
ZmljYW50Q3J1bWIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50SW5kZXgg
PSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0
aW9uIHNocmlua0NydW1iQXRJbmRleChpbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc2hyaW5rQ3J1bWIgPSBjcnVtYnMuY2hpbGROb2Rlc1tpbmRleF07Ci0gICAgICAg
ICAgICAgICAgaWYgKHNocmlua0NydW1iICYmIHNocmlua0NydW1iICE9PSBzaWduaWZpY2FudENy
dW1iKQotICAgICAgICAgICAgICAgICAgICBzaHJpbmtpbmdGdW5jdGlvbihzaHJpbmtDcnVtYik7
Ci0gICAgICAgICAgICAgICAgaWYgKGNydW1ic0FyZVNtYWxsZXJUaGFuQ29udGFpbmVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBObyBuZWVkIHRvIGNvbXBhY3QgdGhl
IGNydW1icyBtb3JlLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gU2hyaW5rIGNydW1icyBvbmUgYXQgYSB0aW1lIGJ5IGFwcGx5
aW5nIHRoZSBzaHJpbmtpbmdGdW5jdGlvbiB1bnRpbCB0aGUgY3J1bWJzCi0gICAgICAgICAgICAv
LyBmaXQgaW4gdGhlIGNvbnRhaW5lciBvciB3ZSBydW4gb3V0IG9mIGNydW1icyB0byBzaHJpbmsu
Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ3J1bWJz
IGFyZSBzaHJ1bmsgb24gb25seSBvbmUgc2lkZSAoYmFzZWQgb24gZGlyZWN0aW9uKSBvZiB0aGUg
c2lnbmlmY2FudCBjcnVtYi4KLSAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAoZGlyZWN0aW9u
ID4gMCA/IDAgOiBjcnVtYnMuY2hpbGROb2Rlcy5sZW5ndGggLSAxKTsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoaW5kZXggIT09IHNpZ25pZmljYW50SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNocmlua0NydW1iQXRJbmRleChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gKGRpcmVjdGlvbiA+
IDAgPyAxIDogLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQ3J1bWJzIGFyZSBzaHJ1bmsgaW4gb3JkZXIgb2YgZGVzY2VuZGlu
ZyBkaXN0YW5jZSBmcm9tIHRoZSBzaWduaWZjYW50IGNydW1iLAotICAgICAgICAgICAgICAgIC8v
IHdpdGggYSB0aWUgZ29pbmcgdG8gY2hpbGQgY3J1bWJzLgotICAgICAgICAgICAgICAgIHZhciBz
dGFydEluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBjcnVtYnMuY2hp
bGROb2Rlcy5sZW5ndGggLSAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4ICE9
IHNpZ25pZmljYW50SW5kZXggfHwgZW5kSW5kZXggIT0gc2lnbmlmaWNhbnRJbmRleCkgewotICAg
ICAgICAgICAgICAgICAgICB2YXIgc3RhcnREaXN0YW5jZSA9IHNpZ25pZmljYW50SW5kZXggLSBz
dGFydEluZGV4OwotICAgICAgICAgICAgICAgICAgICB2YXIgZW5kRGlzdGFuY2UgPSBlbmRJbmRl
eCAtIHNpZ25pZmljYW50SW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERpc3Rh
bmNlID49IGVuZERpc3RhbmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0g
c3RhcnRJbmRleCsrOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgaW5kZXggPSBlbmRJbmRleC0tOwotICAgICAgICAgICAgICAgICAgICBpZiAo
c2hyaW5rQ3J1bWJBdEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gV2UgYXJlIG5vdCBzbWFsbCBlbm91Z2ggeWV0LCByZXR1cm4gZmFsc2Ugc28gdGhlIGNhbGxl
ciBrbm93cy4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGNvYWxlc2NlQ29sbGFwc2VkQ3J1bWJzKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdmFyIGNydW1iID0gY3J1bWJzLmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICB2YXIgY29sbGFw
c2VkUnVuID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbmV3U3RhcnROZWVkZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIHZhciBuZXdFbmROZWVkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHdoaWxl
IChjcnVtYikgewotICAgICAgICAgICAgICAgIHZhciBoaWRkZW4gPSBjcnVtYi5oYXNTdHlsZUNs
YXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAgICAgICBpZiAoIWhpZGRlbikgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgY29sbGFwc2VkID0gY3J1bWIuaGFzU3R5bGVDbGFzcygiY29sbGFwc2Vk
Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZWRSdW4gJiYgY29sbGFwc2VkKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcnVtYi5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNydW1iLnJlbW92ZVN0eWxlQ2xhc3MoImNvbXBhY3Qi
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNydW1iLnJlbW92ZVN0eWxlQ2xhc3MoImNvbGxh
cHNlZCIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3J1bWIuaGFzU3R5bGVDbGFz
cygic3RhcnQiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNydW1iLnJlbW92ZVN0
eWxlQ2xhc3MoInN0YXJ0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhcnRO
ZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY3J1bWIuaGFzU3R5bGVDbGFzcygiZW5kIikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcnVtYi5yZW1vdmVTdHlsZUNsYXNzKCJlbmQiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdFbmROZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZFJ1biA9IGNvbGxh
cHNlZDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobmV3RW5kTmVlZGVkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBuZXdFbmROZWVkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNydW1iLmFkZFN0eWxlQ2xhc3MoImVuZCIpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZFJ1
biA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3J1bWIgPSBjcnVtYi5uZXh0U2libGluZzsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5ld1N0YXJ0TmVlZGVkKSB7Ci0gICAgICAg
ICAgICAgICAgY3J1bWIgPSBjcnVtYnMubGFzdENoaWxkOwotICAgICAgICAgICAgICAgIHdoaWxl
IChjcnVtYikgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNydW1iLmhhc1N0eWxlQ2xhc3Mo
ImhpZGRlbiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcnVtYi5hZGRTdHlsZUNsYXNz
KCJzdGFydCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY3J1bWIgPSBjcnVtYi5wcmV2aW91c1NpYmxp
bmc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gY29tcGFjdChjcnVtYikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNy
dW1iLmhhc1N0eWxlQ2xhc3MoImhpZGRlbiIpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGNydW1iLmFkZFN0eWxlQ2xhc3MoImNvbXBhY3QiKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGNvbGxhcHNlKGNydW1iLCBkb250Q29hbGVzY2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChjcnVtYi5oYXNTdHlsZUNsYXNzKCJoaWRkZW4iKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjcnVtYi5hZGRTdHlsZUNsYXNzKCJjb2xsYXBz
ZWQiKTsKLSAgICAgICAgICAgIGNydW1iLnJlbW92ZVN0eWxlQ2xhc3MoImNvbXBhY3QiKTsKLSAg
ICAgICAgICAgIGlmICghZG9udENvYWxlc2NlKQotICAgICAgICAgICAgICAgIGNvYWxlc2NlQ29s
bGFwc2VkQ3J1bWJzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvY3VzZWRDcnVtYikg
ewotICAgICAgICAgICAgLy8gV2hlbiBub3QgZm9jdXNlZCBvbiBhIGNydW1iIHdlIGNhbiBiZSBi
aWFzZWQgYW5kIGNvbGxhcHNlIGxlc3MgaW1wb3J0YW50Ci0gICAgICAgICAgICAvLyBjcnVtYnMg
dGhhdCB0aGUgdXNlciBtaWdodCBub3QgY2FyZSBtdWNoIGFib3V0LgotCi0gICAgICAgICAgICAv
LyBDb21wYWN0IGNoaWxkIGNydW1icy4KLSAgICAgICAgICAgIGlmIChtYWtlQ3J1bWJzU21hbGxl
cihjb21wYWN0LCBDaGlsZFNpZGUpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgLy8gQ29sbGFwc2UgY2hpbGQgY3J1bWJzLgotICAgICAgICAgICAgaWYgKG1ha2VDcnVt
YnNTbWFsbGVyKGNvbGxhcHNlLCBDaGlsZFNpZGUpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIENvbXBhY3QgYW5jZXN0b3IgY3J1bWJzLCBvciBmcm9t
IGJvdGggc2lkZXMgaWYgZm9jdXNlZC4KLSAgICAgICAgaWYgKG1ha2VDcnVtYnNTbWFsbGVyKGNv
bXBhY3QsIChmb2N1c2VkQ3J1bWIgPyBCb3RoU2lkZXMgOiBBbmNlc3RvclNpZGUpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb2xsYXBzZSBhbmNlc3RvciBjcnVtYnMsIG9y
IGZyb20gYm90aCBzaWRlcyBpZiBmb2N1c2VkLgotICAgICAgICBpZiAobWFrZUNydW1ic1NtYWxs
ZXIoY29sbGFwc2UsIChmb2N1c2VkQ3J1bWIgPyBCb3RoU2lkZXMgOiBBbmNlc3RvclNpZGUpKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXNlbGVjdGVkQ3J1bWIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29tcGFjdCB0aGUgc2VsZWN0ZWQgY3J1bWIu
Ci0gICAgICAgIGNvbXBhY3Qoc2VsZWN0ZWRDcnVtYik7Ci0gICAgICAgIGlmIChjcnVtYnNBcmVT
bWFsbGVyVGhhbkNvbnRhaW5lcigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8v
IENvbGxhcHNlIHRoZSBzZWxlY3RlZCBjcnVtYiBhcyBhIGxhc3QgcmVzb3J0LiBQYXNzIHRydWUg
dG8gcHJldmVudCBjb2FsZXNjaW5nLgotICAgICAgICBjb2xsYXBzZShzZWxlY3RlZENydW1iLCB0
cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gZm9yY2VV
cGRhdGUKLSAgICAgKi8KLSAgICB1cGRhdGVTdHlsZXM6IGZ1bmN0aW9uKGZvcmNlVXBkYXRlKQot
ICAgIHsKLSAgICAgICAgdmFyIHN0eWxlc1NpZGViYXJQYW5lID0gdGhpcy5zaWRlYmFyUGFuZXMu
c3R5bGVzOwotICAgICAgICB2YXIgY29tcHV0ZWRTdHlsZVBhbmUgPSB0aGlzLnNpZGViYXJQYW5l
cy5jb21wdXRlZFN0eWxlOwotICAgICAgICBpZiAoKCFzdHlsZXNTaWRlYmFyUGFuZS5pc1Nob3dp
bmcoKSAmJiAhY29tcHV0ZWRTdHlsZVBhbmUuaXNTaG93aW5nKCkpIHx8ICFzdHlsZXNTaWRlYmFy
UGFuZS5uZWVkc1VwZGF0ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBzdHlsZXNT
aWRlYmFyUGFuZS51cGRhdGUodGhpcy5zZWxlY3RlZERPTU5vZGUoKSwgZm9yY2VVcGRhdGUpOwot
ICAgICAgICBzdHlsZXNTaWRlYmFyUGFuZS5uZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0sCi0K
LSAgICB1cGRhdGVNZXRyaWNzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbWV0cmlj
c1NpZGViYXJQYW5lID0gdGhpcy5zaWRlYmFyUGFuZXMubWV0cmljczsKLSAgICAgICAgaWYgKCFt
ZXRyaWNzU2lkZWJhclBhbmUuaXNTaG93aW5nKCkgfHwgIW1ldHJpY3NTaWRlYmFyUGFuZS5uZWVk
c1VwZGF0ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtZXRyaWNzU2lkZWJhclBh
bmUudXBkYXRlKHRoaXMuc2VsZWN0ZWRET01Ob2RlKCkpOwotICAgICAgICBtZXRyaWNzU2lkZWJh
clBhbmUubmVlZHNVcGRhdGUgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgdXBkYXRlUHJvcGVydGll
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHByb3BlcnRpZXNTaWRlYmFyUGFuZSA9
IHRoaXMuc2lkZWJhclBhbmVzLnByb3BlcnRpZXM7Ci0gICAgICAgIGlmICghcHJvcGVydGllc1Np
ZGViYXJQYW5lLmlzU2hvd2luZygpIHx8ICFwcm9wZXJ0aWVzU2lkZWJhclBhbmUubmVlZHNVcGRh
dGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcHJvcGVydGllc1NpZGViYXJQYW5l
LnVwZGF0ZSh0aGlzLnNlbGVjdGVkRE9NTm9kZSgpKTsKLSAgICAgICAgcHJvcGVydGllc1NpZGVi
YXJQYW5lLm5lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfSwKLQotICAgIHVwZGF0ZUV2ZW50TGlz
dGVuZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZXZlbnRMaXN0ZW5lcnNTaWRl
YmFyUGFuZSA9IHRoaXMuc2lkZWJhclBhbmVzLmV2ZW50TGlzdGVuZXJzOwotICAgICAgICBpZiAo
IWV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuaXNTaG93aW5nKCkgfHwgIWV2ZW50TGlzdGVuZXJz
U2lkZWJhclBhbmUubmVlZHNVcGRhdGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ZXZlbnRMaXN0ZW5lcnNTaWRlYmFyUGFuZS51cGRhdGUodGhpcy5zZWxlY3RlZERPTU5vZGUoKSk7
Ci0gICAgICAgIGV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUubmVlZHNVcGRhdGUgPSBmYWxzZTsK
LSAgICB9LAotCi0gICAgaGFuZGxlU2hvcnRjdXQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgZnVuY3Rpb24gaGFuZGxlVW5kb1JlZG8oKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50
KSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDA1QSIp
IHsgLy8gWiBrZXkKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQudW5kbyh0
aGlzLl91cGRhdGVTaWRlYmFycy5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgICAgICBldmVudC5o
YW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHZhciBpc1JlZG9LZXkgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKSA/IGV2ZW50
Lm1ldGFLZXkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUr
MDA1QSIgOiAvLyBaIGtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSsw
MDU5IjsgLy8gWSBrZXkKLSAgICAgICAgICAgIGlmIChpc1JlZG9LZXkpIHsKLSAgICAgICAgICAg
ICAgICBET01BZ2VudC5yZWRvKHRoaXMuX3VwZGF0ZVNpZGViYXJzLmJpbmQodGhpcykpOwotICAg
ICAgICAgICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lLmVkaXRpbmcoKSkgewotICAgICAg
ICAgICAgaGFuZGxlVW5kb1JlZG8uY2FsbCh0aGlzKTsKLSAgICAgICAgICAgIGlmIChldmVudC5o
YW5kbGVkKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRo
aXMudHJlZU91dGxpbmUuaGFuZGxlU2hvcnRjdXQoZXZlbnQpOwotICAgIH0sCi0KLSAgICBoYW5k
bGVDb3B5RXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgLy8gRG9uJ3QgcHJl
dmVudCB0aGUgbm9ybWFsIGNvcHkgaWYgdGhlIHVzZXIgaGFzIGEgc2VsZWN0aW9uLgotICAgICAg
ICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZXZlbnQuY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKTsKLSAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgdGhpcy5zZWxlY3RlZERPTU5vZGUoKS5j
b3B5Tm9kZSgpOwotICAgIH0sCi0KLSAgICBzaWRlYmFyUmVzaXplZDogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnVwZGF0ZVNlbGVjdGlvbigpOwotICAg
IH0sCi0KLSAgICBfaW5zcGVjdEVsZW1lbnRSZXF1ZXN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdmFyIG5vZGUgPSBldmVudC5kYXRhOwotICAgICAgICB0aGlzLnJldmVhbEFu
ZFNlbGVjdE5vZGUobm9kZS5pZCk7Ci0gICAgfSwKLQotICAgIHJldmVhbEFuZFNlbGVjdE5vZGU6
IGZ1bmN0aW9uKG5vZGVJZCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JW
aWV3LnNldEN1cnJlbnRQYW5lbCh0aGlzKTsKLQotICAgICAgICB2YXIgbm9kZSA9IFdlYkluc3Bl
Y3Rvci5kb21BZ2VudC5ub2RlRm9ySWQobm9kZUlkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5oaWdobGln
aHRET01Ob2RlRm9yVHdvU2Vjb25kcyhub2RlSWQpOwotICAgICAgICB0aGlzLnNlbGVjdERPTU5v
ZGUobm9kZSwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIC8qKiAKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5Db250ZXh0TWVudX0gY29udGV4dE1lbnUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
dGFyZ2V0Ci0gICAgICovCi0gICAgYXBwZW5kQXBwbGljYWJsZUl0ZW1zOiBmdW5jdGlvbihldmVu
dCwgY29udGV4dE1lbnUsIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIGlmICghKHRhcmdldCBpbnN0
YW5jZW9mIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB2YXIgcmVtb3RlT2JqZWN0ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0fSAqLyAodGFyZ2V0KTsKLSAgICAgICAgaWYgKHJlbW90ZU9iamVjdC5zdWJ0eXBlICE9
PSAibm9kZSIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZnVuY3Rpb24gc2VsZWN0
Tm9kZShub2RlSWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChub2RlSWQpCi0gICAgICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50Lmluc3BlY3RFbGVtZW50KG5vZGVJZCk7Ci0g
ICAgICAgIH0KLSAgCi0gICAgICAgIGZ1bmN0aW9uIHJldmVhbEVsZW1lbnQoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZW1vdGVPYmplY3QucHVzaE5vZGVUb0Zyb250ZW5kKHNlbGVjdE5vZGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJSZXZl
YWwgaW4gRWxlbWVudHMgcGFuZWwiIDogIlJldmVhbCBpbiBFbGVtZW50cyBQYW5lbCIpLCByZXZl
YWxFbGVtZW50LmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBfc2lkZWJhckNvbnRleHRNZW51
RXZlbnRGaXJlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY29udGV4dE1l
bnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgY29udGV4
dE1lbnUuc2hvdygpOwotICAgIH0sCi0KLSAgICBfZG9ja1NpZGVDaGFuZ2VkOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB2YXIgZG9ja1NpZGUgPSBXZWJJbnNwZWN0b3IuZG9ja0NvbnRyb2xs
ZXIuZG9ja1NpZGUoKTsKLSAgICAgICAgdmFyIHZlcnRpY2FsbHkgPSBkb2NrU2lkZSA9PT0gV2Vi
SW5zcGVjdG9yLkRvY2tDb250cm9sbGVyLlN0YXRlLkRvY2tlZFRvUmlnaHQgJiYgV2ViSW5zcGVj
dG9yLnNldHRpbmdzLnNwbGl0VmVydGljYWxseVdoZW5Eb2NrZWRUb1JpZ2h0LmdldCgpOwotICAg
ICAgICB0aGlzLl9zcGxpdFZlcnRpY2FsbHkodmVydGljYWxseSk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmVydGljYWxseQotICAgICAqLwotICAgIF9zcGxp
dFZlcnRpY2FsbHk6IGZ1bmN0aW9uKHZlcnRpY2FsbHkpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5zaWRlYmFyUGFuZVZpZXcgJiYgdmVydGljYWxseSA9PT0gIXRoaXMuc3BsaXRWaWV3LmlzVmVy
dGljYWwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGhpcy5zaWRlYmFy
UGFuZVZpZXcpCi0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lVmlldy5kZXRhY2goKTsKLQot
ICAgICAgICB0aGlzLnNwbGl0Vmlldy5zZXRWZXJ0aWNhbCghdmVydGljYWxseSk7Ci0KLSAgICAg
ICAgaWYgKCF2ZXJ0aWNhbGx5KSB7Ci0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lVmlldyA9
IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmVTdGFjaygpOwotICAgICAgICAgICAgZm9yICh2
YXIgcGFuZSBpbiB0aGlzLnNpZGViYXJQYW5lcykKLSAgICAgICAgICAgICAgICB0aGlzLnNpZGVi
YXJQYW5lVmlldy5hZGRQYW5lKHRoaXMuc2lkZWJhclBhbmVzW3BhbmVdKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVWaWV3ID0gbmV3IFdlYkluc3BlY3Rv
ci5TaWRlYmFyVGFiYmVkUGFuZSgpOwotCi0gICAgICAgICAgICB2YXIgY29tcG9zaXRlUGFuZSA9
IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUodGhpcy5zaWRlYmFyUGFuZXMuc3R5bGVzLnRp
dGxlKCkpOwotICAgICAgICAgICAgY29tcG9zaXRlUGFuZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
ImNvbXBvc2l0ZSIpOwotICAgICAgICAgICAgY29tcG9zaXRlUGFuZS5lbGVtZW50LmFkZFN0eWxl
Q2xhc3MoImZpbGwiKTsKLSAgICAgICAgICAgIHZhciBleHBhbmRDb21wb3NpdGUgPSBjb21wb3Np
dGVQYW5lLmV4cGFuZC5iaW5kKGNvbXBvc2l0ZVBhbmUpOwotCi0gICAgICAgICAgICB2YXIgc3Bs
aXRWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5TcGxpdFZpZXcodHJ1ZSwgIlN0eWxlc1BhbmVTcGxp
dFJhdGlvIiwgMC41KTsKLSAgICAgICAgICAgIHNwbGl0Vmlldy5zaG93KGNvbXBvc2l0ZVBhbmUu
Ym9keUVsZW1lbnQpOwotCi0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5zdHlsZXMuc2hv
dyhzcGxpdFZpZXcuZmlyc3RFbGVtZW50KCkpOwotICAgICAgICAgICAgc3BsaXRWaWV3LmZpcnN0
RWxlbWVudCgpLmFwcGVuZENoaWxkKHRoaXMuc2lkZWJhclBhbmVzLnN0eWxlcy50aXRsZUVsZW1l
bnQpOwotICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuc3R5bGVzLnNldEV4cGFuZENhbGxi
YWNrKGV4cGFuZENvbXBvc2l0ZSk7Ci0KLSAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLm1l
dHJpY3Muc2hvdyhzcGxpdFZpZXcuc2Vjb25kRWxlbWVudCgpKTsKLSAgICAgICAgICAgIHRoaXMu
c2lkZWJhclBhbmVzLm1ldHJpY3Muc2V0RXhwYW5kQ2FsbGJhY2soZXhwYW5kQ29tcG9zaXRlKTsK
LQotICAgICAgICAgICAgc3BsaXRWaWV3LnNlY29uZEVsZW1lbnQoKS5hcHBlbmRDaGlsZCh0aGlz
LnNpZGViYXJQYW5lcy5jb21wdXRlZFN0eWxlLnRpdGxlRWxlbWVudCk7Ci0gICAgICAgICAgICBz
cGxpdFZpZXcuc2Vjb25kRWxlbWVudCgpLmFkZFN0eWxlQ2xhc3MoIm1ldHJpY3MtYW5kLWNvbXB1
dGVkIik7Ci0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5jb21wdXRlZFN0eWxlLnNob3co
c3BsaXRWaWV3LnNlY29uZEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5l
cy5jb21wdXRlZFN0eWxlLnNldEV4cGFuZENhbGxiYWNrKGV4cGFuZENvbXBvc2l0ZSk7Ci0KLSAg
ICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVWaWV3LmFkZFBhbmUoY29tcG9zaXRlUGFuZSk7Ci0g
ICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lVmlldy5hZGRQYW5lKHRoaXMuc2lkZWJhclBhbmVz
LnByb3BlcnRpZXMpOwotICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZVZpZXcuYWRkUGFuZSh0
aGlzLnNpZGViYXJQYW5lcy5kb21CcmVha3BvaW50cyk7Ci0gICAgICAgICAgICB0aGlzLnNpZGVi
YXJQYW5lVmlldy5hZGRQYW5lKHRoaXMuc2lkZWJhclBhbmVzLmV2ZW50TGlzdGVuZXJzKTsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLnNpZGViYXJQYW5lVmlldy5zaG93KHRoaXMuc3BsaXRWaWV3
LnNpZGViYXJFbGVtZW50KTsKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuc3R5bGVzLmV4cGFu
ZCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TaWRlYmFyUGFuZX0gcGFuZQotICAgICAqLwotICAgIGFk
ZEV4dGVuc2lvblNpZGViYXJQYW5lOiBmdW5jdGlvbihpZCwgcGFuZSkKLSAgICB7Ci0gICAgICAg
IHRoaXMuc2lkZWJhclBhbmVzW2lkXSA9IHBhbmU7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVW
aWV3LmFkZFBhbmUocGFuZSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
LlBhbmVsLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9FbGVtZW50c1BhbmVsRGVzY3JpcHRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbERlc2NyaXB0b3IuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJjZWM1ZTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsRGVzY3JpcHRvci5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCi0gKiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRvcn0KLSAqIEBpbXBs
ZW1lbnRzIHtXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUuUHJvdmlkZXJ9Ci0gKi8KLVdlYkluc3Bl
Y3Rvci5FbGVtZW50c1BhbmVsRGVzY3JpcHRvciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuUGFuZWxEZXNjcmlwdG9yLmNhbGwodGhpcywgImVsZW1lbnRzIiwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJFbGVtZW50cyIpLCAiRWxlbWVudHNQYW5lbCIsICJFbGVtZW50c1BhbmVsLmpz
Iik7Ci0gICAgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LnJlZ2lzdGVyUHJvdmlkZXIodGhpcyk7
Ci19Ci0KLVdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsRGVzY3JpcHRvci5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqIAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51fSBjb250
ZXh0TWVudQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgKi8KLSAgICBhcHBl
bmRBcHBsaWNhYmxlSXRlbXM6IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0TWVudSwgdGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciByZW1vdGVPYmplY3Qg
PSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5SZW1vdGVPYmplY3R9ICovICh0YXJnZXQpOwotICAg
ICAgICBpZiAocmVtb3RlT2JqZWN0LnN1YnR5cGUgIT09ICJub2RlIikKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdGhpcy5wYW5lbCgpLmFwcGVuZEFwcGxpY2FibGVJdGVtcyhldmVudCwg
Y29udGV4dE1lbnUsIHRhcmdldCk7Ci0gICAgfSwKLQotICAgIHJlZ2lzdGVyU2hvcnRjdXRzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudHNTZWN0aW9uID0gV2ViSW5zcGVj
dG9yLnNob3J0Y3V0c1NjcmVlbi5zZWN0aW9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWxlbWVu
dHMgUGFuZWwiKSk7Ci0KLSAgICAgICAgdmFyIG5hdmlnYXRlID0gV2ViSW5zcGVjdG9yLkVsZW1l
bnRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5OYXZpZ2F0ZVVwLmNvbmNhdChXZWJJbnNw
ZWN0b3IuRWxlbWVudHNQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLk5hdmlnYXRlRG93bik7
Ci0gICAgICAgIGVsZW1lbnRzU2VjdGlvbi5hZGRSZWxhdGVkS2V5cyhuYXZpZ2F0ZSwgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJOYXZpZ2F0ZSBlbGVtZW50cyIpKTsKLQotICAgICAgICB2YXIgZXhw
YW5kQ29sbGFwc2UgPSBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbERlc2NyaXB0b3IuU2hvcnRj
dXRLZXlzLkV4cGFuZC5jb25jYXQoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9y
LlNob3J0Y3V0S2V5cy5Db2xsYXBzZSk7Ci0gICAgICAgIGVsZW1lbnRzU2VjdGlvbi5hZGRSZWxh
dGVkS2V5cyhleHBhbmRDb2xsYXBzZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFeHBhbmQvY29s
bGFwc2UiKSk7Ci0KLSAgICAgICAgZWxlbWVudHNTZWN0aW9uLmFkZEFsdGVybmF0ZUtleXMoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5FZGl0QXR0cmli
dXRlLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgYXR0cmlidXRlIikpOwotICAgICAgICBl
bGVtZW50c1NlY3Rpb24uYWRkQWx0ZXJuYXRlS2V5cyhXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5l
bERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLkhpZGVFbGVtZW50LCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkhpZGUgZWxlbWVudCIpKTsKLSAgICAgICAgZWxlbWVudHNTZWN0aW9uLmFkZEFsdGVybmF0
ZUtleXMoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5U
b2dnbGVFZGl0QXNIVE1MLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRvZ2dsZSBlZGl0IGFzIEhU
TUwiKSk7Ci0KLSAgICAgICAgdmFyIHN0eWxlc1BhbmVTZWN0aW9uID0gV2ViSW5zcGVjdG9yLnNo
b3J0Y3V0c1NjcmVlbi5zZWN0aW9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3R5bGVzIFBhbmUi
KSk7Ci0KLSAgICAgICAgdmFyIG5leHRQcmV2aW91c1Byb3BlcnR5ID0gV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5OZXh0UHJvcGVydHkuY29uY2F0KFdl
Ykluc3BlY3Rvci5FbGVtZW50c1BhbmVsRGVzY3JpcHRvci5TaG9ydGN1dEtleXMuUHJldmlvdXNQ
cm9wZXJ0eSk7Ci0gICAgICAgIHN0eWxlc1BhbmVTZWN0aW9uLmFkZFJlbGF0ZWRLZXlzKG5leHRQ
cmV2aW91c1Byb3BlcnR5LCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5leHQvcHJldmlvdXMgcHJv
cGVydHkiKSk7Ci0KLSAgICAgICAgc3R5bGVzUGFuZVNlY3Rpb24uYWRkUmVsYXRlZEtleXMoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5JbmNyZW1lbnRW
YWx1ZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbmNyZW1lbnQgdmFsdWUiKSk7Ci0gICAgICAg
IHN0eWxlc1BhbmVTZWN0aW9uLmFkZFJlbGF0ZWRLZXlzKFdlYkluc3BlY3Rvci5FbGVtZW50c1Bh
bmVsRGVzY3JpcHRvci5TaG9ydGN1dEtleXMuRGVjcmVtZW50VmFsdWUsIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiRGVjcmVtZW50IHZhbHVlIikpOwotCi0gICAgICAgIHN0eWxlc1BhbmVTZWN0aW9u
LmFkZEFsdGVybmF0ZUtleXMoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9yLlNo
b3J0Y3V0S2V5cy5JbmNyZW1lbnRCeTEwLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluY3JlbWVu
dCBieSAlZiIsIDEwKSk7Ci0gICAgICAgIHN0eWxlc1BhbmVTZWN0aW9uLmFkZEFsdGVybmF0ZUtl
eXMoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5EZWNy
ZW1lbnRCeTEwLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRlY3JlbWVudCBieSAlZiIsIDEwKSk7
Ci0KLSAgICAgICAgc3R5bGVzUGFuZVNlY3Rpb24uYWRkQWx0ZXJuYXRlS2V5cyhXZWJJbnNwZWN0
b3IuRWxlbWVudHNQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLkluY3JlbWVudEJ5MTAwLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluY3JlbWVudCBieSAlZiIsIDEwMCkpOwotICAgICAgICBz
dHlsZXNQYW5lU2VjdGlvbi5hZGRBbHRlcm5hdGVLZXlzKFdlYkluc3BlY3Rvci5FbGVtZW50c1Bh
bmVsRGVzY3JpcHRvci5TaG9ydGN1dEtleXMuRGVjcmVtZW50QnkxMDAsIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiRGVjcmVtZW50IGJ5ICVmIiwgMTAwKSk7Ci0KLSAgICAgICAgc3R5bGVzUGFuZVNl
Y3Rpb24uYWRkQWx0ZXJuYXRlS2V5cyhXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbERlc2NyaXB0
b3IuU2hvcnRjdXRLZXlzLkluY3JlbWVudEJ5MDEsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW5j
cmVtZW50IGJ5ICVmIiwgMC4xKSk7Ci0gICAgICAgIHN0eWxlc1BhbmVTZWN0aW9uLmFkZEFsdGVy
bmF0ZUtleXMoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5
cy5EZWNyZW1lbnRCeTAxLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRlY3JlbWVudCBieSAlZiIs
IDAuMSkpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5QYW5lbERlc2Ny
aXB0b3IucHJvdG90eXBlCi19Ci0KLVdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsRGVzY3JpcHRv
ci5TaG9ydGN1dEtleXMgPSB7Ci0gICAgTmF2aWdhdGVVcDogWwotICAgICAgICBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcihXZWJJbnNwZWN0b3IuS2V5Ym9hcmRT
aG9ydGN1dC5LZXlzLlVwKQotICAgIF0sCi0KLSAgICBOYXZpZ2F0ZURvd246IFsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuS2V5cy5Eb3duKQotICAgIF0sCi0KLSAgICBFeHBhbmQ6IFsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0b3IoV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5SaWdodCkKLSAgICBdLAotCi0gICAgQ29sbGFw
c2U6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0
b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5MZWZ0KQotICAgIF0sCi0KLSAg
ICBFZGl0QXR0cmlidXRlOiBbCi0gICAgICAgIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRW50ZXIp
Ci0gICAgXSwKLQotICAgIEhpZGVFbGVtZW50OiBbCi0gICAgICAgIFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LktleXMuSCkKLSAgICBdLAotCi0gICAgVG9nZ2xlRWRpdEFzSFRNTDogWwotICAgICAgICBXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcihXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5LZXlzLkYyKQotICAgIF0sCi0KLSAgICBOZXh0UHJvcGVydHk6IFsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0b3IoV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5UYWIpCi0gICAgXSwKLQotICAgIFByZXZpb3Vz
UHJvcGVydHk6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURl
c2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5UYWIsIFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5TaGlmdCkKLSAgICBdLAotCi0gICAgSW5j
cmVtZW50VmFsdWU6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFr
ZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5VcCkKLSAgICBd
LAotCi0gICAgRGVjcmVtZW50VmFsdWU6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQubWFrZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5
cy5Eb3duKQotICAgIF0sCi0KLSAgICBJbmNyZW1lbnRCeTEwOiBbCi0gICAgICAgIFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXlib2Fy
ZFNob3J0Y3V0LktleXMuUGFnZVVwKSwKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hv
cnRjdXQubWFrZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5V
cCwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLlNoaWZ0KQotICAgIF0s
Ci0KLSAgICBEZWNyZW1lbnRCeTEwOiBbCi0gICAgICAgIFdlYkluc3BlY3Rvci5LZXlib2FyZFNo
b3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMu
UGFnZURvd24pLAotICAgICAgICBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVz
Y3JpcHRvcihXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkRvd24sIFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5TaGlmdCkKLSAgICBdLAotCi0gICAgSW5j
cmVtZW50QnkxMDA6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFr
ZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5QYWdlVXAsIFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5TaGlmdCkKLSAgICBdLAotCi0g
ICAgRGVjcmVtZW50QnkxMDA6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQubWFrZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5QYWdl
RG93biwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLlNoaWZ0KQotICAg
IF0sCi0KLSAgICBJbmNyZW1lbnRCeTAxOiBbCi0gICAgICAgIFdlYkluc3BlY3Rvci5LZXlib2Fy
ZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lktl
eXMuUGFnZVVwLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQWx0KQot
ICAgIF0sCi0KLSAgICBEZWNyZW1lbnRCeTAxOiBbCi0gICAgICAgIFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LktleXMuUGFnZURvd24sIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5B
bHQpCi0gICAgXQotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggYzMwNWI4NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRA
bWF0dGxpbGVrLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1RyZWVPdXRsaW5lfQotICogQHBhcmFtIHti
b29sZWFuPX0gb21pdFJvb3RET01Ob2RlCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBzZWxlY3RFbmFi
bGVkCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBzaG93SW5FbGVtZW50c1BhbmVsRW5hYmxlZAotICog
QHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUsIFdlYkluc3BlY3Rvci5E
T01Ob2RlKT19IGNvbnRleHRNZW51Q2FsbGJhY2sKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oRE9NQWdl
bnQuTm9kZUlkLCBzdHJpbmcsIGJvb2xlYW4pPX0gc2V0UHNldWRvQ2xhc3NDYWxsYmFjawotICov
Ci1XZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZSA9IGZ1bmN0aW9uKG9taXRSb290RE9N
Tm9kZSwgc2VsZWN0RW5hYmxlZCwgc2hvd0luRWxlbWVudHNQYW5lbEVuYWJsZWQsIGNvbnRleHRN
ZW51Q2FsbGJhY2ssIHNldFBzZXVkb0NsYXNzQ2FsbGJhY2spCi17Ci0gICAgdGhpcy5lbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fb25tb3VzZWRvd24uYmluZCh0aGlzKSwgZmFs
c2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlz
Ll9vbm1vdXNlbW92ZS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5fb25tb3VzZW91dC5iaW5kKHRoaXMpLCBmYWxz
ZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIHRoaXMu
X29uZHJhZ3N0YXJ0LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLl9vbmRyYWdvdmVyLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgdGhpcy5f
b25kcmFnbGVhdmUuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJkcm9wIiwgdGhpcy5fb25kcm9wLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0
aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsIHRoaXMuX29uZHJhZ2VuZC5i
aW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtl
eWRvd24iLCB0aGlzLl9vbmtleWRvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgVHJlZU91
dGxpbmUuY2FsbCh0aGlzLCB0aGlzLmVsZW1lbnQpOwotCi0gICAgdGhpcy5faW5jbHVkZVJvb3RE
T01Ob2RlID0gIW9taXRSb290RE9NTm9kZTsKLSAgICB0aGlzLl9zZWxlY3RFbmFibGVkID0gc2Vs
ZWN0RW5hYmxlZDsKLSAgICB0aGlzLl9zaG93SW5FbGVtZW50c1BhbmVsRW5hYmxlZCA9IHNob3dJ
bkVsZW1lbnRzUGFuZWxFbmFibGVkOwotICAgIHRoaXMuX3Jvb3RET01Ob2RlID0gbnVsbDsKLSAg
ICB0aGlzLl9zZWxlY3RET01Ob2RlID0gbnVsbDsKLSAgICB0aGlzLl9ldmVudFN1cHBvcnQgPSBu
ZXcgV2ViSW5zcGVjdG9yLk9iamVjdCgpOwotCi0gICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlOwot
Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5f
Y29udGV4dE1lbnVFdmVudEZpcmVkLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuX2NvbnRl
eHRNZW51Q2FsbGJhY2sgPSBjb250ZXh0TWVudUNhbGxiYWNrOwotICAgIHRoaXMuX3NldFBzZXVk
b0NsYXNzQ2FsbGJhY2sgPSBzZXRQc2V1ZG9DbGFzc0NhbGxiYWNrOwotICAgIHRoaXMuX2NyZWF0
ZU5vZGVEZWNvcmF0b3JzKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LkV2ZW50cyA9IHsKLSAgICBTZWxlY3RlZE5vZGVDaGFuZ2VkOiAiU2VsZWN0ZWROb2RlQ2hhbmdl
ZCIKLX0KLQotV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuTWFwcGVkQ2hhclRvRW50
aXR5ID0gewotICAgICJcdTAwYTAiOiAibmJzcCIsCi0gICAgIlx1MjAwMiI6ICJlbnNwIiwKLSAg
ICAiXHUyMDAzIjogImVtc3AiLAotICAgICJcdTIwMDkiOiAidGhpbnNwIiwKLSAgICAiXHUyMDBi
IjogIiM4MjAzIiwgLy8gWldTUAotICAgICJcdTIwMGMiOiAienduaiIsCi0gICAgIlx1MjAwZCI6
ICJ6d2oiLAotICAgICJcdTIwMGUiOiAibHJtIiwKLSAgICAiXHUyMDBmIjogInJsbSIsCi0gICAg
Ilx1MjAyYSI6ICIjODIzNCIsIC8vIExSRQotICAgICJcdTIwMmIiOiAiIzgyMzUiLCAvLyBSTEUK
LSAgICAiXHUyMDJjIjogIiM4MjM2IiwgLy8gUERGCi0gICAgIlx1MjAyZCI6ICIjODIzNyIsIC8v
IExSTwotICAgICJcdTIwMmUiOiAiIzgyMzgiIC8vIFJMTwotfQotCi1XZWJJbnNwZWN0b3IuRWxl
bWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUgPSB7Ci0gICAgX2NyZWF0ZU5vZGVEZWNvcmF0b3Jz
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9ub2RlRGVjb3JhdG9ycyA9IFtdOwot
ICAgICAgICB0aGlzLl9ub2RlRGVjb3JhdG9ycy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlT3V0bGluZS5Qc2V1ZG9TdGF0ZURlY29yYXRvcigpKTsKLSAgICB9LAotCi0gICAgd2ly
ZVRvRG9tQWdlbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2VsZW1lbnRzVHJl
ZVVwZGF0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIodGhpcyk7Ci0g
ICAgfSwKLQotICAgIHNldFZpc2libGU6IGZ1bmN0aW9uKHZpc2libGUpCi0gICAgewotICAgICAg
ICB0aGlzLl92aXNpYmxlID0gdmlzaWJsZTsKLSAgICAgICAgaWYgKCF0aGlzLl92aXNpYmxlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZU1vZGlmaWVkTm9kZXMo
KTsKLSAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRE9NTm9kZSkKLSAgICAgICAgICAgIHRoaXMu
X3JldmVhbEFuZFNlbGVjdE5vZGUodGhpcy5fc2VsZWN0ZWRET01Ob2RlLCBmYWxzZSk7Ci0gICAg
fSwKLQotICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKGV2ZW50VHlwZSwgbGlzdGVuZXIs
IHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICB0aGlzLl9ldmVudFN1cHBvcnQuYWRkRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0aGlzT2JqZWN0KTsKLSAgICB9LAotCi0gICAg
cmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oZXZlbnRUeXBlLCBsaXN0ZW5lciwgdGhpc09i
amVjdCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V2ZW50U3VwcG9ydC5yZW1vdmVFdmVudExpc3Rl
bmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHRoaXNPYmplY3QpOwotICAgIH0sCi0KLSAgICBnZXQg
cm9vdERPTU5vZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3RET01Ob2RlOwot
ICAgIH0sCi0KLSAgICBzZXQgcm9vdERPTU5vZGUoeCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9yb290RE9NTm9kZSA9PT0geCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlz
Ll9yb290RE9NTm9kZSA9IHg7Ci0KLSAgICAgICAgdGhpcy5faXNYTUxNaW1lVHlwZSA9IHggJiYg
eC5pc1hNTE5vZGUoKTsKLQotICAgICAgICB0aGlzLnVwZGF0ZSgpOwotICAgIH0sCi0KLSAgICBn
ZXQgaXNYTUxNaW1lVHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faXNYTUxNaW1l
VHlwZTsKLSAgICB9LAotCi0gICAgc2VsZWN0ZWRET01Ob2RlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRET01Ob2RlOwotICAgIH0sCi0KLSAgICBzZWxl
Y3RET01Ob2RlOiBmdW5jdGlvbihub2RlLCBmb2N1cykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9zZWxlY3RlZERPTU5vZGUgPT09IG5vZGUpIHsKLSAgICAgICAgICAgIHRoaXMuX3JldmVhbEFu
ZFNlbGVjdE5vZGUobm9kZSwgIWZvY3VzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMuX3NlbGVjdGVkRE9NTm9kZSA9IG5vZGU7Ci0gICAgICAgIHRoaXMu
X3JldmVhbEFuZFNlbGVjdE5vZGUobm9kZSwgIWZvY3VzKTsKLQotICAgICAgICAvLyBUaGUgX3Jl
dmVhbEFuZFNlbGVjdE5vZGUoKSBtZXRob2QgbWlnaHQgZmluZCBhIGRpZmZlcmVudCBlbGVtZW50
IGlmIHRoZXJlIGlzIGlubGluZWQgdGV4dCwKLSAgICAgICAgLy8gYW5kIHRoZSBzZWxlY3QoKSBj
YWxsIHdvdWxkIGNoYW5nZSB0aGUgc2VsZWN0ZWRET01Ob2RlIGFuZCByZWVudGVyIHRoaXMgc2V0
dGVyLiBTbyB0bwotICAgICAgICAvLyBhdm9pZCBjYWxsaW5nIF9zZWxlY3RlZE5vZGVDaGFuZ2Vk
KCkgdHdpY2UsIGZpcnN0IGNoZWNrIGlmIF9zZWxlY3RlZERPTU5vZGUgaXMgdGhlIHNhbWUKLSAg
ICAgICAgLy8gbm9kZSBhcyB0aGUgb25lIHBhc3NlZCBpbi4KLSAgICAgICAgaWYgKHRoaXMuX3Nl
bGVjdGVkRE9NTm9kZSA9PT0gbm9kZSkKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTm9kZUNo
YW5nZWQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAg
ICAgKi8KLSAgICBlZGl0aW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuc2VsZWN0ZWRET01Ob2RlKCk7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5maW5kVHJlZUVs
ZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cmVlRWxlbWVudC5fZWRpdGluZyB8fCBmYWxzZTsK
LSAgICB9LAotCi0gICAgdXBkYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2Vs
ZWN0ZWROb2RlID0gdGhpcy5zZWxlY3RlZFRyZWVFbGVtZW50ID8gdGhpcy5zZWxlY3RlZFRyZWVF
bGVtZW50LnJlcHJlc2VudGVkT2JqZWN0IDogbnVsbDsKLQotICAgICAgICB0aGlzLnJlbW92ZUNo
aWxkcmVuKCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLnJvb3RET01Ob2RlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciB0cmVlRWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXMuX2lu
Y2x1ZGVSb290RE9NTm9kZSkgewotICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQodGhpcy5yb290RE9NTm9kZSk7Ci0gICAgICAgICAg
ICB0cmVlRWxlbWVudC5zZWxlY3RhYmxlID0gdGhpcy5fc2VsZWN0RW5hYmxlZDsKLSAgICAgICAg
ICAgIHRoaXMuYXBwZW5kQ2hpbGQodHJlZUVsZW1lbnQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gRklYTUU6IHRoaXMgY291bGQgdXNlIGZpbmRUcmVlRWxlbWVudCB0byByZXVz
ZSBhIHRyZWUgZWxlbWVudCBpZiBpdCBhbHJlYWR5IGV4aXN0cwotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLnJvb3RET01Ob2RlLmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICB3aGlsZSAobm9k
ZSkgewotICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVFbGVtZW50KG5vZGUpOwotICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50LnNlbGVj
dGFibGUgPSB0aGlzLl9zZWxlY3RFbmFibGVkOwotICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5k
Q2hpbGQodHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJs
aW5nOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNlbGVjdGVkTm9k
ZSkKLSAgICAgICAgICAgIHRoaXMuX3JldmVhbEFuZFNlbGVjdE5vZGUoc2VsZWN0ZWROb2RlLCB0
cnVlKTsKLSAgICB9LAotCi0gICAgdXBkYXRlU2VsZWN0aW9uOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVPdXRsaW5lLnNlbGVjdGVkVHJlZUVs
ZW1lbnQ7Ci0gICAgICAgIGVsZW1lbnQudXBkYXRlU2VsZWN0aW9uKCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRPTU5vZGV9IG5vZGUKLSAgICAgKi8K
LSAgICB1cGRhdGVPcGVuQ2xvc2VUYWdzOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAg
dmFyIHRyZWVFbGVtZW50ID0gdGhpcy5maW5kVHJlZUVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlm
ICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHRyZWVFbGVtZW50LnVwZGF0ZVRpdGxlKCk7Ci0g
ICAgICAgIHZhciBjaGlsZHJlbiA9IHRyZWVFbGVtZW50LmNoaWxkcmVuOwotICAgICAgICB2YXIg
Y2xvc2luZ1RhZ0VsZW1lbnQgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTsKLSAgICAg
ICAgaWYgKGNsb3NpbmdUYWdFbGVtZW50ICYmIGNsb3NpbmdUYWdFbGVtZW50Ll9lbGVtZW50Q2xv
c2VUYWcpCi0gICAgICAgICAgICBjbG9zaW5nVGFnRWxlbWVudC51cGRhdGVUaXRsZSgpOwotICAg
IH0sCi0KLSAgICBfc2VsZWN0ZWROb2RlQ2hhbmdlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fZXZlbnRTdXBwb3J0LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlT3V0bGluZS5FdmVudHMuU2VsZWN0ZWROb2RlQ2hhbmdlZCwgdGhpcy5f
c2VsZWN0ZWRET01Ob2RlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuRE9NTm9kZX0gbm9kZQotICAgICAqLwotICAgIGZpbmRUcmVlRWxlbWVudDogZnVu
Y3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGlzQW5jZXN0b3JOb2RlKGFuY2Vz
dG9yLCBub2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYW5jZXN0b3IuaXNBbmNl
c3Rvcihub2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBhcmVudE5vZGUobm9k
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IFRyZWVPdXRsaW5lLnByb3RvdHlwZS5m
aW5kVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlLCBpc0FuY2VzdG9yTm9kZSwgcGFyZW50Tm9k
ZSk7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQgJiYgbm9kZS5ub2RlVHlwZSgpID09PSBOb2Rl
LlRFWFRfTk9ERSkgewotICAgICAgICAgICAgLy8gVGhlIHRleHQgbm9kZSBtaWdodCBoYXZlIGJl
ZW4gaW5saW5lZCBpZiBpdCB3YXMgc2hvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBwYXJlbnQgZWxl
bWVudC4KLSAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gVHJlZU91dGxpbmUucHJvdG90eXBlLmZp
bmRUcmVlRWxlbWVudC5jYWxsKHRoaXMsIG5vZGUucGFyZW50Tm9kZSwgaXNBbmNlc3Rvck5vZGUs
IHBhcmVudE5vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5ET01Ob2RlfSBu
b2RlCi0gICAgICovCi0gICAgY3JlYXRlVHJlZUVsZW1lbnRGb3I6IGZ1bmN0aW9uKG5vZGUpCi0g
ICAgewotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLmZpbmRUcmVlRWxlbWVudChub2Rl
KTsKLSAgICAgICAgaWYgKHRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHRyZWVFbGVt
ZW50OwotICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotCi0gICAgICAgIHRyZWVFbGVtZW50ID0gdGhpcy5jcmVhdGVUcmVlRWxlbWVudEZvcihu
b2RlLnBhcmVudE5vZGUpOwotICAgICAgICBpZiAodHJlZUVsZW1lbnQgJiYgdHJlZUVsZW1lbnQu
c2hvd0NoaWxkKG5vZGUuaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50LmNo
aWxkcmVuW25vZGUuaW5kZXhdOwotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAg
ICBzZXQgc3VwcHJlc3NSZXZlYWxBbmRTZWxlY3QoeCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9zdXBwcmVzc1JldmVhbEFuZFNlbGVjdCA9PT0geCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy5fc3VwcHJlc3NSZXZlYWxBbmRTZWxlY3QgPSB4OwotICAgIH0sCi0KLSAgICBf
cmV2ZWFsQW5kU2VsZWN0Tm9kZTogZnVuY3Rpb24obm9kZSwgb21pdEZvY3VzKQotICAgIHsKLSAg
ICAgICAgaWYgKCFub2RlIHx8IHRoaXMuX3N1cHByZXNzUmV2ZWFsQW5kU2VsZWN0KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuY3JlYXRlVHJl
ZUVsZW1lbnRGb3Iobm9kZSk7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdHJlZUVsZW1lbnQucmV2ZWFsQW5kU2VsZWN0KG9taXRGb2N1
cyk7Ci0gICAgfSwKLQotICAgIF90cmVlRWxlbWVudEZyb21FdmVudDogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICB2YXIgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5lbGVtZW50LnBhcmVu
dEVsZW1lbnQ7Ci0KLSAgICAgICAgLy8gV2UgY2hvb3NlIHRoaXMgWCBjb29yZGluYXRlIGJhc2Vk
IG9uIHRoZSBrbm93bGVkZ2UgdGhhdCBvdXIgbGlzdAotICAgICAgICAvLyBpdGVtcyBleHRlbmQg
YXQgbGVhc3QgdG8gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIG91dGVyIDxvbD4gY29udGFpbmVyLgot
ICAgICAgICAvLyBJbiB0aGUgbm8td29yZC13cmFwIG1vZGUgdGhlIG91dGVyIDxvbD4gbWF5IGJl
IHdpZGVyIHRoYW4gdGhlIHRyZWUgY29udGFpbmVyCi0gICAgICAgIC8vIChhbmQgcGFydGlhbGx5
IGhpZGRlbiksIGluIHdoaWNoIGNhc2Ugd2UgYXJlIGxlZnQgdG8gdXNlIG9ubHkgaXRzIHJpZ2h0
IGJvdW5kYXJ5LgotICAgICAgICB2YXIgeCA9IHNjcm9sbENvbnRhaW5lci50b3RhbE9mZnNldExl
ZnQoKSArIHNjcm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aCAtIDM2OwotCi0gICAgICAgIHZhciB5
ID0gZXZlbnQucGFnZVk7Ci0KLSAgICAgICAgLy8gT3VyIGxpc3QgaXRlbXMgaGF2ZSAxLXBpeGVs
IGNyYWNrcyBiZXR3ZWVuIHRoZW0gdmVydGljYWxseS4gV2UgYXZvaWQKLSAgICAgICAgLy8gdGhl
IGNyYWNrcyBieSBjaGVja2luZyBzbGlnaHRseSBhYm92ZSBhbmQgc2xpZ2h0bHkgYmVsb3cgdGhl
IG1vdXNlCi0gICAgICAgIC8vIGFuZCBzZWVpbmcgaWYgd2UgaGl0IHRoZSBzYW1lIGVsZW1lbnQg
ZWFjaCB0aW1lLgotICAgICAgICB2YXIgZWxlbWVudFVuZGVyTW91c2UgPSB0aGlzLnRyZWVFbGVt
ZW50RnJvbVBvaW50KHgsIHkpOwotICAgICAgICB2YXIgZWxlbWVudEFib3ZlTW91c2UgPSB0aGlz
LnRyZWVFbGVtZW50RnJvbVBvaW50KHgsIHkgLSAyKTsKLSAgICAgICAgdmFyIGVsZW1lbnQ7Ci0g
ICAgICAgIGlmIChlbGVtZW50VW5kZXJNb3VzZSA9PT0gZWxlbWVudEFib3ZlTW91c2UpCi0gICAg
ICAgICAgICBlbGVtZW50ID0gZWxlbWVudFVuZGVyTW91c2U7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGVsZW1lbnQgPSB0aGlzLnRyZWVFbGVtZW50RnJvbVBvaW50KHgsIHkgKyAyKTsKLQot
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAgX29ubW91c2Vkb3duOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fdHJlZUVsZW1l
bnRGcm9tRXZlbnQoZXZlbnQpOwotCi0gICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lmlz
RXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUoZXZlbnQpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7Ci0gICAgfSwKLQotICAgIF9vbm1vdXNlbW92
ZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3Ry
ZWVFbGVtZW50RnJvbUV2ZW50KGV2ZW50KTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgdGhpcy5f
cHJldmlvdXNIb3ZlcmVkRWxlbWVudCA9PT0gZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudCkgewotICAgICAgICAg
ICAgdGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudC5ob3ZlcmVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBkZWxldGUgdGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICAgICAgICBlbGVtZW50LmhvdmVyZWQgPSB0cnVl
OwotICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudCA9IGVsZW1lbnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuaGlnaGxpZ2h0RE9NTm9k
ZShlbGVtZW50ID8gZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5pZCA6IDApOwotICAgIH0sCi0K
LSAgICBfb25tb3VzZW91dDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbm9k
ZVVuZGVyTW91c2UgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LnBhZ2VYLCBldmVu
dC5wYWdlWSk7Ci0gICAgICAgIGlmIChub2RlVW5kZXJNb3VzZSAmJiBub2RlVW5kZXJNb3VzZS5p
c0Rlc2NlbmRhbnQodGhpcy5lbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAodGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5f
cHJldmlvdXNIb3ZlcmVkRWxlbWVudC5ob3ZlcmVkID0gZmFsc2U7Ci0gICAgICAgICAgICBkZWxl
dGUgdGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5oaWRlRE9NTm9kZUhpZ2hsaWdodCgpOwotICAgIH0sCi0KLSAg
ICBfb25kcmFnc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChldmVudC50YXJnZXQubm9kZU5hbWUgPT09ICJBIikKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxl
bWVudEZyb21FdmVudChldmVudCk7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkRHJhZ1NvdXJj
ZU9yVGFyZ2V0KHRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAodHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3Qubm9kZU5hbWUoKSA9PT0gIkJP
RFkiIHx8IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0Lm5vZGVOYW1lKCkgPT09ICJIRUFE
IikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBldmVudC5kYXRhVHJhbnNm
ZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsIHRyZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC50ZXh0
Q29udGVudCk7Ci0gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gImNv
cHlNb3ZlIjsKLSAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnRCZWluZ0RyYWdnZWQgPSB0cmVlRWxl
bWVudDsKLQotICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuaGlkZURPTU5vZGVIaWdobGln
aHQoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgX29uZHJhZ292ZXI6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl90cmVlRWxlbWVudEJl
aW5nRHJhZ2dlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgdHJl
ZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVudEZyb21FdmVudChldmVudCk7Ci0gICAgICAgIGlm
ICghdGhpcy5faXNWYWxpZERyYWdTb3VyY2VPclRhcmdldCh0cmVlRWxlbWVudCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIG5vZGUgPSB0cmVlRWxlbWVudC5yZXBy
ZXNlbnRlZE9iamVjdDsKLSAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChu
b2RlID09PSB0aGlzLl90cmVlRWxlbWVudEJlaW5nRHJhZ2dlZC5yZXByZXNlbnRlZE9iamVjdCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS5w
YXJlbnROb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJlZUVsZW1lbnQudXBkYXRlU2VsZWN0
aW9uKCk7Ci0gICAgICAgIHRyZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJlbGVtZW50cy1kcmFnLW92ZXIiKTsKLSAgICAgICAgdGhpcy5fZHJhZ092ZXJUcmVlRWxlbWVu
dCA9IHRyZWVFbGVtZW50OwotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAg
ICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJzsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0sCi0KLSAgICBfb25kcmFnbGVhdmU6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdGhpcy5fY2xlYXJEcmFnT3ZlclRyZWVFbGVtZW50TWFya2VyKCk7Ci0gICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
LAotCi0gICAgX2lzVmFsaWREcmFnU291cmNlT3JUYXJnZXQ6IGZ1bmN0aW9uKHRyZWVFbGVtZW50
KQotICAgIHsKLSAgICAgICAgaWYgKCF0cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICB2YXIgbm9kZSA9IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0
OwotICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkRPTU5vZGUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghbm9kZS5wYXJlbnROb2Rl
IHx8IG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSgpICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAot
Ci0gICAgX29uZHJvcDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVu
dEZyb21FdmVudChldmVudCk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAg
IHRoaXMuX2RvTW92ZSh0cmVlRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9kb01vdmU6IGZ1bmN0
aW9uKHRyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl90cmVlRWxlbWVudEJl
aW5nRHJhZ2dlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcGFyZW50Tm9k
ZTsKLSAgICAgICAgdmFyIGFuY2hvck5vZGU7Ci0KLSAgICAgICAgaWYgKHRyZWVFbGVtZW50Ll9l
bGVtZW50Q2xvc2VUYWcpIHsKLSAgICAgICAgICAgIC8vIERyb3Agb250byBjbG9zaW5nIHRhZyAt
PiBpbnNlcnQgYXMgbGFzdCBjaGlsZC4KLSAgICAgICAgICAgIHBhcmVudE5vZGUgPSB0cmVlRWxl
bWVudC5yZXByZXNlbnRlZE9iamVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZh
ciBkcmFnVGFyZ2V0Tm9kZSA9IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0OwotICAgICAg
ICAgICAgcGFyZW50Tm9kZSA9IGRyYWdUYXJnZXROb2RlLnBhcmVudE5vZGU7Ci0gICAgICAgICAg
ICBhbmNob3JOb2RlID0gZHJhZ1RhcmdldE5vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
d2FzRXhwYW5kZWQgPSB0aGlzLl90cmVlRWxlbWVudEJlaW5nRHJhZ2dlZC5leHBhbmRlZDsKLSAg
ICAgICAgdGhpcy5fdHJlZUVsZW1lbnRCZWluZ0RyYWdnZWQucmVwcmVzZW50ZWRPYmplY3QubW92
ZVRvKHBhcmVudE5vZGUsIGFuY2hvck5vZGUsIHRoaXMuX3NlbGVjdE5vZGVBZnRlckVkaXQuYmlu
ZCh0aGlzLCBudWxsLCB3YXNFeHBhbmRlZCkpOwotCi0gICAgICAgIGRlbGV0ZSB0aGlzLl90cmVl
RWxlbWVudEJlaW5nRHJhZ2dlZDsKLSAgICB9LAotCi0gICAgX29uZHJhZ2VuZDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB0
aGlzLl9jbGVhckRyYWdPdmVyVHJlZUVsZW1lbnRNYXJrZXIoKTsKLSAgICAgICAgZGVsZXRlIHRo
aXMuX3RyZWVFbGVtZW50QmVpbmdEcmFnZ2VkOwotICAgIH0sCi0KLSAgICBfY2xlYXJEcmFnT3Zl
clRyZWVFbGVtZW50TWFya2VyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
ZHJhZ092ZXJUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5fZHJhZ092ZXJUcmVlRWxl
bWVudC51cGRhdGVTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgIHRoaXMuX2RyYWdPdmVyVHJlZUVs
ZW1lbnQubGlzdEl0ZW1FbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImVsZW1lbnRzLWRyYWctb3Zl
ciIpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RyYWdPdmVyVHJlZUVsZW1lbnQ7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAg
ICAgKi8KLSAgICBfb25rZXlkb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZh
ciBrZXlib2FyZEV2ZW50ID0gLyoqIEB0eXBlIHtLZXlib2FyZEV2ZW50fSAqLyAoZXZlbnQpOwot
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc2VsZWN0ZWRET01Ob2RlKCk7Ci0gICAgICAgIHZhciB0
cmVlRWxlbWVudCA9IHRoaXMuZ2V0Q2FjaGVkVHJlZUVsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlm
ICghdHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCF0cmVl
RWxlbWVudC5fZWRpdGluZyAmJiBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5oYXNOb01v
ZGlmaWVycyhrZXlib2FyZEV2ZW50KSAmJiBrZXlib2FyZEV2ZW50LmtleUNvZGUgPT09IFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuSC5jb2RlKSB7Ci0gICAgICAgICAgICB0aGlz
Ll90b2dnbGVIaWRlU2hvcnRjdXQobm9kZSk7Ci0gICAgICAgICAgICBldmVudC5jb25zdW1lKHRy
dWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9jb250
ZXh0TWVudUV2ZW50RmlyZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLl9zaG93SW5FbGVtZW50c1BhbmVsRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVudEZyb21FdmVudChldmVu
dCk7Ci0gICAgICAgIGlmICghdHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgZnVuY3Rpb24gZm9jdXNFbGVtZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
Rm9yY2UgZWxlbWVudHMgbW9kdWxlIGxvYWQuCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hv
d1BhbmVsKCJlbGVtZW50cyIpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50Lmlu
c3BlY3RFbGVtZW50KHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmlkKTsKLSAgICAgICAg
fQotICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51
KGV2ZW50KTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJSZXZlYWwgaW4g
RWxlbWVudHMgcGFuZWwiIDogIlJldmVhbCBpbiBFbGVtZW50cyBQYW5lbCIpLCBmb2N1c0VsZW1l
bnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKLSAgICB9LAotCi0g
ICAgcG9wdWxhdGVDb250ZXh0TWVudTogZnVuY3Rpb24oY29udGV4dE1lbnUsIGV2ZW50KQotICAg
IHsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5fdHJlZUVsZW1lbnRGcm9tRXZlbnQo
ZXZlbnQpOwotICAgICAgICBpZiAoIXRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciBpc1RhZyA9IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0Lm5vZGVU
eXBlKCkgPT09IE5vZGUuRUxFTUVOVF9OT0RFOwotICAgICAgICB2YXIgdGV4dE5vZGUgPSBldmVu
dC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWh0bWwtdGV4dC1u
b2RlIik7Ci0gICAgICAgIGlmICh0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS5oYXNTdHlsZUNsYXNzKCJi
b2d1cyIpKQotICAgICAgICAgICAgdGV4dE5vZGUgPSBudWxsOwotICAgICAgICB2YXIgY29tbWVu
dE5vZGUgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0
LWh0bWwtY29tbWVudCIpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRBcHBsaWNhYmxlSXRl
bXMoZXZlbnQudGFyZ2V0KTsKLSAgICAgICAgaWYgKHRleHROb2RlKSB7Ci0gICAgICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIHRyZWVFbGVtZW50Ll9w
b3B1bGF0ZVRleHRDb250ZXh0TWVudShjb250ZXh0TWVudSwgdGV4dE5vZGUpOwotICAgICAgICB9
IGVsc2UgaWYgKGlzVGFnKSB7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0
b3IoKTsKLSAgICAgICAgICAgIHRyZWVFbGVtZW50Ll9wb3B1bGF0ZVRhZ0NvbnRleHRNZW51KGNv
bnRleHRNZW51LCBldmVudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tbWVudE5vZGUpIHsKLSAg
ICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICAgICAgdHJl
ZUVsZW1lbnQuX3BvcHVsYXRlTm9kZUNvbnRleHRNZW51KGNvbnRleHRNZW51LCB0ZXh0Tm9kZSk7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgYWRqdXN0Q29sbGFwc2VkUmFuZ2U6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgfSwKLQotICAgIF91cGRhdGVNb2RpZmllZE5vZGVzOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fZWxlbWVudHNUcmVlVXBkYXRlcikKLSAgICAgICAg
ICAgIHRoaXMuX2VsZW1lbnRzVHJlZVVwZGF0ZXIuX3VwZGF0ZU1vZGlmaWVkTm9kZXMoKTsKLSAg
ICB9LAotCi0gICAgX3BvcHVsYXRlQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51LCBu
b2RlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NvbnRleHRNZW51Q2FsbGJhY2spCi0gICAg
ICAgICAgICB0aGlzLl9jb250ZXh0TWVudUNhbGxiYWNrKGNvbnRleHRNZW51LCBub2RlKTsKLSAg
ICB9LAotCi0gICAgaGFuZGxlU2hvcnRjdXQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLnNlbGVjdGVkRE9NTm9kZSgpOwotICAgICAgICB2YXIgdHJlZUVs
ZW1lbnQgPSB0aGlzLmdldENhY2hlZFRyZWVFbGVtZW50KG5vZGUpOwotICAgICAgICBpZiAoIW5v
ZGUgfHwgIXRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChl
dmVudC5rZXlJZGVudGlmaWVyID09PSAiRjIiKSB7Ci0gICAgICAgICAgICB0aGlzLl90b2dnbGVF
ZGl0QXNIVE1MKG5vZGUpOwotICAgICAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50KSAmJiBub2RlLnBhcmVudE5v
ZGUpIHsKLSAgICAgICAgICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVXAiICYmIG5v
ZGUucHJldmlvdXNTaWJsaW5nKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5tb3ZlVG8obm9kZS5w
YXJlbnROb2RlLCBub2RlLnByZXZpb3VzU2libGluZywgdGhpcy5fc2VsZWN0Tm9kZUFmdGVyRWRp
dC5iaW5kKHRoaXMsIG51bGwsIHRyZWVFbGVtZW50LmV4cGFuZGVkKSk7Ci0gICAgICAgICAgICAg
ICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIiAm
JiBub2RlLm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5tb3ZlVG8obm9kZS5w
YXJlbnROb2RlLCBub2RlLm5leHRTaWJsaW5nLm5leHRTaWJsaW5nLCB0aGlzLl9zZWxlY3ROb2Rl
QWZ0ZXJFZGl0LmJpbmQodGhpcywgbnVsbCwgdHJlZUVsZW1lbnQuZXhwYW5kZWQpKTsKLSAgICAg
ICAgICAgICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3RvZ2dsZUVkaXRBc0hU
TUw6IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlz
LmdldENhY2hlZFRyZWVFbGVtZW50KG5vZGUpOwotICAgICAgICBpZiAoIXRyZWVFbGVtZW50KQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0cmVlRWxlbWVudC5fZWRpdGluZyAm
JiB0cmVlRWxlbWVudC5faHRtbEVkaXRFbGVtZW50ICYmIFdlYkluc3BlY3Rvci5pc0JlaW5nRWRp
dGVkKHRyZWVFbGVtZW50Ll9odG1sRWRpdEVsZW1lbnQpKQotICAgICAgICAgICAgdHJlZUVsZW1l
bnQuX2VkaXRpbmcuY29tbWl0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyZWVFbGVt
ZW50Ll9lZGl0QXNIVE1MKCk7Ci0gICAgfSwKLQotICAgIF9zZWxlY3ROb2RlQWZ0ZXJFZGl0OiBm
dW5jdGlvbihmYWxsYmFja05vZGUsIHdhc0V4cGFuZGVkLCBlcnJvciwgbm9kZUlkKQotICAgIHsK
LSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFNl
bGVjdCBpdCBhbmQgZXhwYW5kIGlmIG5lY2Vzc2FyeS4gV2UgZm9yY2UgdHJlZSB1cGRhdGUgc28g
dGhhdCBpdCBwcm9jZXNzZXMgZG9tIGV2ZW50cyBhbmQgaXMgdXAgdG8gZGF0ZS4KLSAgICAgICAg
dGhpcy5fdXBkYXRlTW9kaWZpZWROb2RlcygpOwotCi0gICAgICAgIHZhciBuZXdOb2RlID0gV2Vi
SW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpIHx8IGZhbGxiYWNrTm9kZTsKLSAg
ICAgICAgaWYgKCFuZXdOb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
c2VsZWN0RE9NTm9kZShuZXdOb2RlLCB0cnVlKTsKLQotICAgICAgICB2YXIgbmV3VHJlZUl0ZW0g
PSB0aGlzLmZpbmRUcmVlRWxlbWVudChuZXdOb2RlKTsKLSAgICAgICAgaWYgKHdhc0V4cGFuZGVk
KSB7Ci0gICAgICAgICAgICBpZiAobmV3VHJlZUl0ZW0pCi0gICAgICAgICAgICAgICAgbmV3VHJl
ZUl0ZW0uZXhwYW5kKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ld1RyZWVJdGVtOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBSdW5zIGEgc2NyaXB0IG9uIHRoZSBub2RlJ3MgcmVt
b3RlIG9iamVjdCB0aGF0IHRvZ2dsZXMgYSBjbGFzcyBuYW1lIG9uCi0gICAgICogdGhlIG5vZGUg
YW5kIGluamVjdHMgYSBzdHlsZXNoZWV0IGludG8gdGhlIGhlYWQgb2YgdGhlIG5vZGUncyBkb2N1
bWVudAotICAgICAqIGNvbnRhaW5pbmcgYSBydWxlIHRvIHNldCAidmlzaWJpbGl0eTogaGlkZGVu
IiBvbiB0aGUgY2xhc3MgYW5kIGFsbCBpdCdzCi0gICAgICogYW5jZXN0b3JzLgotICAgICAqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRE9NTm9kZX0gbm9kZQotICAgICAqIEBwYXJhbSB7
ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QpPX0gdXNlckNhbGxiYWNrCi0gICAg
ICovCi0gICAgX3RvZ2dsZUhpZGVTaG9ydGN1dDogZnVuY3Rpb24obm9kZSwgdXNlckNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZWROb2RlKG9iamVjdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICBmdW5jdGlvbiB0b2dnbGVDbGFzc0FuZEluamVjdFN0eWxlUnVsZSgpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gIl9fd2ViLWluc3Bl
Y3Rvci1oaWRlLXNob3J0Y3V0X18iOwotICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlVGFnSWQg
PSAiX193ZWItaW5zcGVjdG9yLWhpZGUtc2hvcnRjdXQtc3R5bGVfXyI7Ci0gICAgICAgICAgICAg
ICAgY29uc3Qgc3R5bGVSdWxlID0gIi5fX3dlYi1pbnNwZWN0b3ItaGlkZS1zaG9ydGN1dF9fLCAu
X193ZWItaW5zcGVjdG9yLWhpZGUtc2hvcnRjdXRfXyAqIHsgdmlzaWJpbGl0eTogaGlkZGVuICFp
bXBvcnRhbnQ7IH0iOwotCi0gICAgICAgICAgICAgICAgdGhpcy5jbGFzc0xpc3QudG9nZ2xlKGNs
YXNzTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5oZWFkLnF1
ZXJ5U2VsZWN0b3IoInN0eWxlIyIgKyBzdHlsZVRhZ0lkKTsKLSAgICAgICAgICAgICAgICBpZiAo
c3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIHN0
eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKLSAgICAgICAgICAgICAgICBz
dHlsZS5pZCA9IHN0eWxlVGFnSWQ7Ci0gICAgICAgICAgICAgICAgc3R5bGUudHlwZSA9ICJ0ZXh0
L2NzcyI7Ci0gICAgICAgICAgICAgICAgc3R5bGUuaW5uZXJIVE1MID0gc3R5bGVSdWxlOwotICAg
ICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBvYmplY3QuY2FsbEZ1bmN0aW9uKHRvZ2dsZUNsYXNzQW5kSW5q
ZWN0U3R5bGVSdWxlLCB1bmRlZmluZWQsIHVzZXJDYWxsYmFjayk7Ci0gICAgICAgICAgICBvYmpl
Y3QucmVsZWFzZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlJlbW90ZU9i
amVjdC5yZXNvbHZlTm9kZShub2RlLCAiIiwgcmVzb2x2ZWROb2RlKTsKLSAgICB9LAotCi0gICAg
X19wcm90b19fOiBUcmVlT3V0bGluZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAaW50ZXJmYWNl
Ci0gKi8KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLkVsZW1lbnREZWNvcmF0b3Ig
PSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLkVs
ZW1lbnREZWNvcmF0b3IucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkRPTU5vZGV9IG5vZGUKLSAgICAgKi8KLSAgICBkZWNvcmF0ZTogZnVuY3Rpb24o
bm9kZSkKLSAgICB7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkRPTU5vZGV9IG5vZGUKLSAgICAgKi8KLSAgICBkZWNvcmF0ZUFuY2VzdG9yOiBmdW5jdGlv
bihub2RlKQotICAgIHsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1w
bGVtZW50cyB7V2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuRWxlbWVudERlY29yYXRv
cn0KLSAqLwotV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuUHNldWRvU3RhdGVEZWNv
cmF0b3IgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxp
bmUuRWxlbWVudERlY29yYXRvci5jYWxsKHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlT3V0bGluZS5Qc2V1ZG9TdGF0ZURlY29yYXRvci5Qcm9wZXJ0eU5hbWUgPSAicHNldWRv
U3RhdGUiOwotCi1XZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5Qc2V1ZG9TdGF0ZURl
Y29yYXRvci5wcm90b3R5cGUgPSB7Ci0gICAgZGVjb3JhdGU6IGZ1bmN0aW9uKG5vZGUpCi0gICAg
ewotICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSgpICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgcHJvcGVydHlWYWx1ZSA9IG5vZGUu
Z2V0VXNlclByb3BlcnR5KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLlBzZXVkb1N0
YXRlRGVjb3JhdG9yLlByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmICghcHJvcGVydHlWYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJFbGVtZW50IHN0YXRlOiAlcyIsICI6IiArIHByb3BlcnR5VmFsdWUuam9pbigiLCA6
IikpOwotICAgIH0sCi0KLSAgICBkZWNvcmF0ZUFuY2VzdG9yOiBmdW5jdGlvbihub2RlKQotICAg
IHsKLSAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUoKSAhPT0gTm9kZS5FTEVNRU5UX05PREUpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIgZGVzY2VuZGFudENvdW50ID0g
bm9kZS5kZXNjZW5kYW50VXNlclByb3BlcnR5Q291bnQoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZU91dGxpbmUuUHNldWRvU3RhdGVEZWNvcmF0b3IuUHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYg
KCFkZXNjZW5kYW50Q291bnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYg
KGRlc2NlbmRhbnRDb3VudCA9PT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIiVkIGRlc2NlbmRhbnQgd2l0aCBmb3JjZWQgc3RhdGUiLCBkZXNjZW5kYW50Q291
bnQpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBkZXNjZW5kYW50
cyB3aXRoIGZvcmNlZCBzdGF0ZSIsIGRlc2NlbmRhbnRDb3VudCk7Ci0gICAgfSwKLQotICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuRWxlbWVudERlY29yYXRv
ci5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVl
RWxlbWVudH0KLSAqIEBwYXJhbSB7Ym9vbGVhbj19IGVsZW1lbnRDbG9zZVRhZwotICovCi1XZWJJ
bnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGVsZW1lbnRDbG9z
ZVRhZykKLXsKLSAgICB0aGlzLl9lbGVtZW50Q2xvc2VUYWcgPSBlbGVtZW50Q2xvc2VUYWc7Ci0g
ICAgdmFyIGhhc0NoaWxkcmVuT3ZlcnJpZGUgPSAhZWxlbWVudENsb3NlVGFnICYmIG5vZGUuaGFz
Q2hpbGROb2RlcygpICYmICF0aGlzLl9zaG93SW5saW5lVGV4dChub2RlKTsKLQotICAgIC8vIFRo
ZSB0aXRsZSB3aWxsIGJlIHVwZGF0ZWQgaW4gb25hdHRhY2guCi0gICAgVHJlZUVsZW1lbnQuY2Fs
bCh0aGlzLCAiIiwgbm9kZSwgaGFzQ2hpbGRyZW5PdmVycmlkZSk7Ci0KLSAgICBpZiAodGhpcy5y
ZXByZXNlbnRlZE9iamVjdC5ub2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFICYmICFlbGVt
ZW50Q2xvc2VUYWcpCi0gICAgICAgIHRoaXMuX2NhbkFkZEF0dHJpYnV0ZXMgPSB0cnVlOwotICAg
IHRoaXMuX3NlYXJjaFF1ZXJ5ID0gbnVsbDsKLSAgICB0aGlzLl9leHBhbmRlZENoaWxkcmVuTGlt
aXQgPSBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5Jbml0aWFsQ2hpbGRyZW5MaW1p
dDsKLX0KLQotV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQuSW5pdGlhbENoaWxkcmVu
TGltaXQgPSA1MDA7Ci0KLS8vIEEgdW5pb24gb2YgSFRNTDQgYW5kIEhUTUw1LURyYWZ0IGVsZW1l
bnRzIHRoYXQgZXhwbGljaXRseQotLy8gb3IgaW1wbGljaXRseSAoZm9yIEhUTUw1KSBmb3JiaWQg
dGhlIGNsb3NpbmcgdGFnLgotLy8gRklYTUU6IFJldmlzZSBvbmNlIEhUTUw1IEZpbmFsIGlzIHB1
Ymxpc2hlZC4KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LkZvcmJpZGRlbkNsb3Np
bmdUYWdFbGVtZW50cyA9IFsKLSAgICAiYXJlYSIsICJiYXNlIiwgImJhc2Vmb250IiwgImJyIiwg
ImNhbnZhcyIsICJjb2wiLCAiY29tbWFuZCIsICJlbWJlZCIsICJmcmFtZSIsCi0gICAgImhyIiwg
ImltZyIsICJpbnB1dCIsICJpc2luZGV4IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAicGFy
YW0iLCAic291cmNlIgotXS5rZXlTZXQoKTsKLQotLy8gVGhlc2UgdGFncyB3ZSBkbyBub3QgYWxs
b3cgZWRpdGluZyB0aGVpciB0YWcgbmFtZS4KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVt
ZW50LkVkaXRUYWdCbGFja2xpc3QgPSBbCi0gICAgImh0bWwiLCAiaGVhZCIsICJib2R5IgotXS5r
ZXlTZXQoKTsKLQotV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0g
ewotICAgIGhpZ2hsaWdodFNlYXJjaFJlc3VsdHM6IGZ1bmN0aW9uKHNlYXJjaFF1ZXJ5KQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFF1ZXJ5ICE9PSBzZWFyY2hRdWVyeSkgewotICAg
ICAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoSGlnaGxpZ2h0KGZhbHNlKTsKLSAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRSZXN1bHQ7IC8vIEEgbmV3IHNlYXJjaCBxdWVyeS4KLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NlYXJjaFF1ZXJ5ID0gc2VhcmNoUXVlcnk7Ci0gICAg
ICAgIHRoaXMuX3NlYXJjaEhpZ2hsaWdodHNWaXNpYmxlID0gdHJ1ZTsKLSAgICAgICAgdGhpcy51
cGRhdGVUaXRsZSh0cnVlKTsKLSAgICB9LAotCi0gICAgaGlkZVNlYXJjaEhpZ2hsaWdodHM6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zZWFyY2hIaWdobGlnaHRzVmlz
aWJsZTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoSGlnaGxpZ2h0KGZhbHNlKTsKLSAgICB9
LAotCi0gICAgX3VwZGF0ZVNlYXJjaEhpZ2hsaWdodDogZnVuY3Rpb24oc2hvdykKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5faGlnaGxpZ2h0UmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVudHJ5U2hvdyhlbnRyeSkKLSAgICAgICAgewotICAg
ICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAiYWRk
ZWQiOgotICAgICAgICAgICAgICAgICAgICBlbnRyeS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGVudHJ5
Lm5vZGUsIGVudHJ5Lm5leHRTaWJsaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAiY2hhbmdlZCI6Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5
Lm5vZGUudGV4dENvbnRlbnQgPSBlbnRyeS5uZXdUZXh0OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHVwZGF0
ZUVudHJ5SGlkZShlbnRyeSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50
eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAiYWRkZWQiOgotICAgICAgICAgICAgICAgICAg
ICBpZiAoZW50cnkubm9kZS5wYXJlbnRFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAg
ZW50cnkubm9kZS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVudHJ5Lm5vZGUpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJjaGFuZ2VkIjoKLSAg
ICAgICAgICAgICAgICAgICAgZW50cnkubm9kZS50ZXh0Q29udGVudCA9IGVudHJ5Lm9sZFRleHQ7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHNlbWFudGljIG9mIG5vZGUgYnkgZm9sbG93aW5nIHRo
ZSBvcmRlciBvZiB1cGRhdGVzIGZvciBoaWRlIGFuZCBzaG93LgotICAgICAgICBpZiAoc2hvdykg
ewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHNpemUgPSB0aGlzLl9oaWdobGlnaHRSZXN1
bHQubGVuZ3RoOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHVwZGF0ZUVudHJ5U2hv
dyh0aGlzLl9oaWdobGlnaHRSZXN1bHRbaV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9ICh0aGlzLl9oaWdobGlnaHRSZXN1bHQubGVuZ3RoIC0gMSk7IGkgPj0g
MDsgLS1pKQotICAgICAgICAgICAgICAgIHVwZGF0ZUVudHJ5SGlkZSh0aGlzLl9oaWdobGlnaHRS
ZXN1bHRbaV0pOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIGdldCBob3ZlcmVkKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9ob3ZlcmVkOwotICAgIH0sCi0KLSAgICBzZXQgaG92ZXJl
ZCh4KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2hvdmVyZWQgPT09IHgpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faG92ZXJlZCA9IHg7Ci0KLSAgICAgICAgaWYgKHRo
aXMubGlzdEl0ZW1FbGVtZW50KSB7Ci0gICAgICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAg
ICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5saXN0SXRl
bUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaG92ZXJlZCIpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJo
b3ZlcmVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0IGV4
cGFuZGVkQ2hpbGRyZW5MaW1pdCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5k
ZWRDaGlsZHJlbkxpbWl0OwotICAgIH0sCi0KLSAgICBzZXQgZXhwYW5kZWRDaGlsZHJlbkxpbWl0
KHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWRDaGlsZHJlbkxpbWl0ID09PSB4
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2V4cGFuZGVkQ2hpbGRyZW5M
aW1pdCA9IHg7Ci0gICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lICYmICF0aGlzLl91cGRhdGVD
aGlsZHJlbkluUHJvZ3Jlc3MpCi0gICAgICAgICAgICB0aGlzLl91cGRhdGVDaGlsZHJlbih0cnVl
KTsKLSAgICB9LAotCi0gICAgZ2V0IGV4cGFuZGVkQ2hpbGRDb3VudCgpCi0gICAgewotICAgICAg
ICB2YXIgY291bnQgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKLSAgICAgICAgaWYgKGNvdW50ICYm
IHRoaXMuY2hpbGRyZW5bY291bnQgLSAxXS5fZWxlbWVudENsb3NlVGFnKQotICAgICAgICAgICAg
Y291bnQtLTsKLSAgICAgICAgaWYgKGNvdW50ICYmIHRoaXMuY2hpbGRyZW5bY291bnQgLSAxXS5l
eHBhbmRBbGxCdXR0b24pCi0gICAgICAgICAgICBjb3VudC0tOwotICAgICAgICByZXR1cm4gY291
bnQ7Ci0gICAgfSwKLQotICAgIHNob3dDaGlsZDogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fZWxlbWVudENsb3NlVGFnKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGlmIChpbmRleCA+PSB0aGlzLmV4cGFuZGVkQ2hpbGRyZW5MaW1pdCkgewotICAgICAg
ICAgICAgdGhpcy5fZXhwYW5kZWRDaGlsZHJlbkxpbWl0ID0gaW5kZXggKyAxOwotICAgICAgICAg
ICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
aGV0aGVyIGluZGV4LXRoIGNoaWxkIGlzIHZpc2libGUgaW4gdGhlIGNoaWxkcmVuIHRyZWUKLSAg
ICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDaGlsZENvdW50ID4gaW5kZXg7Ci0gICAgfSwKLQot
ICAgIHVwZGF0ZVNlbGVjdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGxpc3RJ
dGVtRWxlbWVudCA9IHRoaXMubGlzdEl0ZW1FbGVtZW50OwotICAgICAgICBpZiAoIWxpc3RJdGVt
RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXRoaXMuX3JlYWR5
VG9VcGRhdGVTZWxlY3Rpb24pIHsKLSAgICAgICAgICAgIGlmIChkb2N1bWVudC5ib2R5Lm9mZnNl
dFdpZHRoID4gMCkKLSAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeVRvVXBkYXRlU2VsZWN0aW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBzdHls
ZXNoZWV0IGhhc24ndCBsb2FkZWQgeWV0IG9yIHRoZSB3aW5kb3cgaXMgY2xvc2VkLAotICAgICAg
ICAgICAgICAgIC8vIHNvIHdlIGNhbid0IGNhbGN1bGF0ZSB3aGF0IHdlIG5lZWQuIFJldHVybiBl
YXJseS4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uRWxlbWVudCkgewotICAgICAgICAgICAgdGhp
cy5zZWxlY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
ICAgICAgICB0aGlzLnNlbGVjdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gInNlbGVjdGlvbiBzZWxl
Y3RlZCI7Ci0gICAgICAgICAgICBsaXN0SXRlbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuc2Vs
ZWN0aW9uRWxlbWVudCwgbGlzdEl0ZW1FbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGhpcy5zZWxlY3Rpb25FbGVtZW50LnN0eWxlLmhlaWdodCA9IGxpc3RJdGVtRWxl
bWVudC5vZmZzZXRIZWlnaHQgKyAicHgiOwotICAgIH0sCi0KLSAgICBvbmF0dGFjaDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2hvdmVyZWQpIHsKLSAgICAgICAgICAgIHRo
aXMudXBkYXRlU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJob3ZlcmVkIik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnVwZGF0
ZVRpdGxlKCk7Ci0gICAgICAgIHRoaXMuX3ByZXZlbnRGb2xsb3dpbmdMaW5rc09uRG91YmxlQ2xp
Y2soKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuZHJhZ2dhYmxlID0gdHJ1ZTsKLSAg
ICB9LAotCi0gICAgX3ByZXZlbnRGb2xsb3dpbmdMaW5rc09uRG91YmxlQ2xpY2s6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBsaW5rcyA9IHRoaXMubGlzdEl0ZW1FbGVtZW50LnF1ZXJ5
U2VsZWN0b3JBbGwoImxpID4gLndlYmtpdC1odG1sLXRhZyA+IC53ZWJraXQtaHRtbC1hdHRyaWJ1
dGUgPiAud2Via2l0LWh0bWwtZXh0ZXJuYWwtbGluaywgbGkgPiAud2Via2l0LWh0bWwtdGFnID4g
LndlYmtpdC1odG1sLWF0dHJpYnV0ZSA+IC53ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5rIik7Ci0g
ICAgICAgIGlmICghbGlua3MpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGxpbmtzW2ldLnBy
ZXZlbnRGb2xsb3dPbkRvdWJsZUNsaWNrID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgb25wb3B1bGF0
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8
IHRoaXMuX3Nob3dJbmxpbmVUZXh0KHRoaXMucmVwcmVzZW50ZWRPYmplY3QpIHx8IHRoaXMuX2Vs
ZW1lbnRDbG9zZVRhZykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLnVwZGF0
ZUNoaWxkcmVuKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19
IGZ1bGxSZWZyZXNoCi0gICAgICovCi0gICAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGZ1bGxS
ZWZyZXNoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRDbG9zZVRhZykKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5nZXRDaGlsZE5v
ZGVzKHRoaXMuX3VwZGF0ZUNoaWxkcmVuLmJpbmQodGhpcywgZnVsbFJlZnJlc2gpKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gY2xvc2luZ1RhZwotICAgICAq
LwotICAgIGluc2VydENoaWxkRWxlbWVudDogZnVuY3Rpb24oY2hpbGQsIGluZGV4LCBjbG9zaW5n
VGFnKQotICAgIHsKLSAgICAgICAgdmFyIG5ld0VsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZUVsZW1lbnQoY2hpbGQsIGNsb3NpbmdUYWcpOwotICAgICAgICBuZXdFbGVtZW50
LnNlbGVjdGFibGUgPSB0aGlzLnRyZWVPdXRsaW5lLl9zZWxlY3RFbmFibGVkOwotICAgICAgICB0
aGlzLmluc2VydENoaWxkKG5ld0VsZW1lbnQsIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIG5ld0Vs
ZW1lbnQ7Ci0gICAgfSwKLQotICAgIG1vdmVDaGlsZDogZnVuY3Rpb24oY2hpbGQsIHRhcmdldElu
ZGV4KQotICAgIHsKLSAgICAgICAgdmFyIHdhc1NlbGVjdGVkID0gY2hpbGQuc2VsZWN0ZWQ7Ci0g
ICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICB0aGlzLmluc2VydENoaWxk
KGNoaWxkLCB0YXJnZXRJbmRleCk7Ci0gICAgICAgIGlmICh3YXNTZWxlY3RlZCkKLSAgICAgICAg
ICAgIGNoaWxkLnNlbGVjdCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jv
b2xlYW49fSBmdWxsUmVmcmVzaAotICAgICAqLwotICAgIF91cGRhdGVDaGlsZHJlbjogZnVuY3Rp
b24oZnVsbFJlZnJlc2gpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdXBkYXRlQ2hpbGRyZW5J
blByb2dyZXNzIHx8ICF0aGlzLnRyZWVPdXRsaW5lLl92aXNpYmxlKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZUNoaWxkcmVuSW5Qcm9ncmVzcyA9IHRydWU7Ci0g
ICAgICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLnRyZWVPdXRsaW5lLnNlbGVjdGVkRE9NTm9k
ZSgpOwotICAgICAgICB2YXIgb3JpZ2luYWxTY3JvbGxUb3AgPSAwOwotICAgICAgICBpZiAoZnVs
bFJlZnJlc2gpIHsKLSAgICAgICAgICAgIHZhciB0cmVlT3V0bGluZUNvbnRhaW5lckVsZW1lbnQg
PSB0aGlzLnRyZWVPdXRsaW5lLmVsZW1lbnQucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIG9yaWdp
bmFsU2Nyb2xsVG9wID0gdHJlZU91dGxpbmVDb250YWluZXJFbGVtZW50LnNjcm9sbFRvcDsKLSAg
ICAgICAgICAgIHZhciBzZWxlY3RlZFRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGluZS5zZWxl
Y3RlZFRyZWVFbGVtZW50OwotICAgICAgICAgICAgaWYgKHNlbGVjdGVkVHJlZUVsZW1lbnQgJiYg
c2VsZWN0ZWRUcmVlRWxlbWVudC5oYXNBbmNlc3Rvcih0aGlzKSkKLSAgICAgICAgICAgICAgICB0
aGlzLnNlbGVjdCgpOwotICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpczsKLSAgICAgICAgdmFyIHRyZWVD
aGlsZEluZGV4ID0gMDsKLSAgICAgICAgdmFyIGVsZW1lbnRUb1NlbGVjdDsKLQotICAgICAgICBm
dW5jdGlvbiB1cGRhdGVDaGlsZHJlbk9mTm9kZShub2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB2YXIgdHJlZU91dGxpbmUgPSB0cmVlRWxlbWVudC50cmVlT3V0bGluZTsKLSAgICAgICAgICAg
IHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsKLSAgICAgICAgICAgIHdoaWxlIChjaGlsZCkg
ewotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VHJlZUVsZW1lbnQgPSB0cmVlRWxlbWVudC5j
aGlsZHJlblt0cmVlQ2hpbGRJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50VHJl
ZUVsZW1lbnQgfHwgY3VycmVudFRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0ICE9PSBjaGls
ZCkgewotICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIGFueSBleGlzdGluZyBlbGVtZW50IHRo
YXQgaXMgbGF0ZXIgaW4gdGhlIGNoaWxkcmVuIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgIHZh
ciBleGlzdGluZ1RyZWVFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9ICh0cmVlQ2hpbGRJbmRleCArIDEpLCBzaXplID0gdHJlZUVsZW1lbnQuZXhwYW5kZWRD
aGlsZENvdW50OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dHJlZUVsZW1lbnQuY2hpbGRyZW5baV0ucmVwcmVzZW50ZWRPYmplY3QgPT09IGNoaWxkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmVlRWxlbWVudCA9IHRyZWVFbGVt
ZW50LmNoaWxkcmVuW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJlZUVsZW1lbnQgJiYgZXhpc3RpbmdUcmVlRWxlbWVu
dC5wYXJlbnQgPT09IHRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBhbiBleGlzdGluZyBlbGVtZW50IHdhcyBmb3VuZCBhbmQgaXQgaGFzIHRoZSBzYW1lIHBhcmVu
dCwganVzdCBtb3ZlIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQubW92
ZUNoaWxkKGV4aXN0aW5nVHJlZUVsZW1lbnQsIHRyZWVDaGlsZEluZGV4KTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGV4aXN0aW5n
IGVsZW1lbnQgZm91bmQsIGluc2VydCBhIG5ldyBlbGVtZW50LgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyZWVDaGlsZEluZGV4IDwgdHJlZUVsZW1lbnQuZXhwYW5kZWRDaGlsZHJlbkxp
bWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0VsZW1lbnQgPSB0cmVl
RWxlbWVudC5pbnNlcnRDaGlsZEVsZW1lbnQoY2hpbGQsIHRyZWVDaGlsZEluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgPT09IHNlbGVjdGVkTm9kZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvU2VsZWN0ID0gbmV3RWxlbWVudDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQuZXhwYW5kZWRDaGls
ZENvdW50ID4gdHJlZUVsZW1lbnQuZXhwYW5kZWRDaGlsZHJlbkxpbWl0KQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5leHBhbmRlZENoaWxkcmVuTGltaXQrKzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7
Ci0gICAgICAgICAgICAgICAgKyt0cmVlQ2hpbGRJbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFJlbW92ZSBhbnkgdHJlZSBlbGVtZW50cyB0aGF0IG5vIGxvbmdl
ciBoYXZlIHRoaXMgbm9kZSAob3IgdGhpcyBub2RlJ3MgY29udGVudERvY3VtZW50KSBhcyB0aGVp
ciBwYXJlbnQuCi0gICAgICAgIGZvciAodmFyIGkgPSAodGhpcy5jaGlsZHJlbi5sZW5ndGggLSAx
KTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIHZhciBjdXJyZW50Q2hpbGQgPSB0aGlzLmNo
aWxkcmVuW2ldOwotICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gY3VycmVudENoaWxkLnJl
cHJlc2VudGVkT2JqZWN0OwotICAgICAgICAgICAgdmFyIGN1cnJlbnRQYXJlbnROb2RlID0gY3Vy
cmVudE5vZGUucGFyZW50Tm9kZTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnROb2Rl
ID09PSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICB2YXIgc2VsZWN0ZWRUcmVlRWxlbWVudCA9IHRoaXMudHJlZU91dGxpbmUu
c2VsZWN0ZWRUcmVlRWxlbWVudDsKLSAgICAgICAgICAgIGlmIChzZWxlY3RlZFRyZWVFbGVtZW50
ICYmIChzZWxlY3RlZFRyZWVFbGVtZW50ID09PSBjdXJyZW50Q2hpbGQgfHwgc2VsZWN0ZWRUcmVl
RWxlbWVudC5oYXNBbmNlc3RvcihjdXJyZW50Q2hpbGQpKSkKLSAgICAgICAgICAgICAgICB0aGlz
LnNlbGVjdCgpOwotCi0gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkQXRJbmRleChpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHVwZGF0ZUNoaWxkcmVuT2ZOb2RlKHRoaXMucmVwcmVzZW50ZWRP
YmplY3QpOwotICAgICAgICB0aGlzLmFkanVzdENvbGxhcHNlZFJhbmdlKCk7Ci0KLSAgICAgICAg
dmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTsK
LSAgICAgICAgaWYgKHRoaXMucmVwcmVzZW50ZWRPYmplY3Qubm9kZVR5cGUoKSA9PSBOb2RlLkVM
RU1FTlRfTk9ERSAmJiAoIWxhc3RDaGlsZCB8fCAhbGFzdENoaWxkLl9lbGVtZW50Q2xvc2VUYWcp
KQotICAgICAgICAgICAgdGhpcy5pbnNlcnRDaGlsZEVsZW1lbnQodGhpcy5yZXByZXNlbnRlZE9i
amVjdCwgdGhpcy5jaGlsZHJlbi5sZW5ndGgsIHRydWUpOwotCi0gICAgICAgIC8vIFdlIHdhbnQg
dG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uIGFuZCB0cmVlIHNjcm9sbCBwb3NpdGlv
biBhZnRlciBhIGZ1bGwgcmVmcmVzaCwgaWYgcG9zc2libGUuCi0gICAgICAgIGlmIChmdWxsUmVm
cmVzaCAmJiBlbGVtZW50VG9TZWxlY3QpIHsKLSAgICAgICAgICAgIGVsZW1lbnRUb1NlbGVjdC5z
ZWxlY3QoKTsKLSAgICAgICAgICAgIGlmICh0cmVlT3V0bGluZUNvbnRhaW5lckVsZW1lbnQgJiYg
b3JpZ2luYWxTY3JvbGxUb3AgPD0gdHJlZU91dGxpbmVDb250YWluZXJFbGVtZW50LnNjcm9sbEhl
aWdodCkKLSAgICAgICAgICAgICAgICB0cmVlT3V0bGluZUNvbnRhaW5lckVsZW1lbnQuc2Nyb2xs
VG9wID0gb3JpZ2luYWxTY3JvbGxUb3A7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgdGhp
cy5fdXBkYXRlQ2hpbGRyZW5JblByb2dyZXNzOwotICAgIH0sCi0KLSAgICBhZGp1c3RDb2xsYXBz
ZWRSYW5nZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gRW5zdXJlIHByZWNvbmRpdGlv
bjogb25seSB0aGUgdHJlZSBlbGVtZW50cyBmb3Igbm9kZSBjaGlsZHJlbiBhcmUgZm91bmQgaW4g
dGhlIHRyZWUKLSAgICAgICAgLy8gKG5vdCB0aGUgRXhwYW5kIEFsbCBidXR0b24gb3IgdGhlIGNs
b3NpbmcgdGFnKS4KLSAgICAgICAgaWYgKHRoaXMuZXhwYW5kQWxsQnV0dG9uRWxlbWVudCAmJiB0
aGlzLmV4cGFuZEFsbEJ1dHRvbkVsZW1lbnQuX190cmVlRWxlbWVudC5wYXJlbnQpCi0gICAgICAg
ICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZXhwYW5kQWxsQnV0dG9uRWxlbWVudC5fX3RyZWVF
bGVtZW50KTsKLQotICAgICAgICBjb25zdCBub2RlID0gdGhpcy5yZXByZXNlbnRlZE9iamVjdDsK
LSAgICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjb25zdCBjaGlsZE5vZGVDb3VudCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOwotCi0gICAgICAg
IC8vIEluIGNhc2Ugc29tZSBub2RlcyBmcm9tIHRoZSBleHBhbmRlZCByYW5nZSB3ZXJlIHJlbW92
ZWQsIHB1bGwgc29tZSBub2RlcyBmcm9tIHRoZSBjb2xsYXBzZWQgcmFuZ2UgaW50byB0aGUgZXhw
YW5kZWQgcmFuZ2UgYXQgdGhlIGJvdHRvbS4KLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuZXhw
YW5kZWRDaGlsZENvdW50LCBsaW1pdCA9IE1hdGgubWluKHRoaXMuZXhwYW5kZWRDaGlsZHJlbkxp
bWl0LCBjaGlsZE5vZGVDb3VudCk7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICAgICAgdGhpcy5p
bnNlcnRDaGlsZEVsZW1lbnQobm9kZS5jaGlsZHJlbltpXSwgaSk7Ci0KLSAgICAgICAgY29uc3Qg
ZXhwYW5kZWRDaGlsZENvdW50ID0gdGhpcy5leHBhbmRlZENoaWxkQ291bnQ7Ci0gICAgICAgIGlm
IChjaGlsZE5vZGVDb3VudCA+IHRoaXMuZXhwYW5kZWRDaGlsZENvdW50KSB7Ci0gICAgICAgICAg
ICB2YXIgdGFyZ2V0QnV0dG9uSW5kZXggPSBleHBhbmRlZENoaWxkQ291bnQ7Ci0gICAgICAgICAg
ICBpZiAoIXRoaXMuZXhwYW5kQWxsQnV0dG9uRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHZh
ciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKLSAgICAgICAgICAg
ICAgICBidXR0b24uY2xhc3NOYW1lID0gInNob3ctYWxsLW5vZGVzIjsKLSAgICAgICAgICAgICAg
ICBidXR0b24udmFsdWUgPSAiIjsKLSAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUcmVl
RWxlbWVudChidXR0b24sIG51bGwsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpdGVtLnNlbGVj
dGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpdGVtLmV4cGFuZEFsbEJ1dHRvbiA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRDaGlsZChpdGVtLCB0YXJnZXRCdXR0b25J
bmRleCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxCdXR0b25FbGVtZW50ID0gaXRl
bS5saXN0SXRlbUVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgICAgICAgICB0aGlzLmV4cGFu
ZEFsbEJ1dHRvbkVsZW1lbnQuX190cmVlRWxlbWVudCA9IGl0ZW07Ci0gICAgICAgICAgICAgICAg
dGhpcy5leHBhbmRBbGxCdXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhp
cy5oYW5kbGVMb2FkQWxsQ2hpbGRyZW4uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICAgICAg
fSBlbHNlIGlmICghdGhpcy5leHBhbmRBbGxCdXR0b25FbGVtZW50Ll9fdHJlZUVsZW1lbnQucGFy
ZW50KQotICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQodGhpcy5leHBhbmRBbGxCdXR0
b25FbGVtZW50Ll9fdHJlZUVsZW1lbnQsIHRhcmdldEJ1dHRvbkluZGV4KTsKLSAgICAgICAgICAg
IHRoaXMuZXhwYW5kQWxsQnV0dG9uRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiU2hvdyBBbGwgTm9kZXMgKCVkIE1vcmUpIiwgY2hpbGROb2RlQ291bnQgLSBleHBh
bmRlZENoaWxkQ291bnQpOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXhwYW5kQWxsQnV0dG9u
RWxlbWVudCkKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV4cGFuZEFsbEJ1dHRvbkVsZW1lbnQ7
Ci0gICAgfSwKLQotICAgIGhhbmRsZUxvYWRBbGxDaGlsZHJlbjogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkcmVuTGltaXQgPSBNYXRoLm1heCh0aGlzLnJlcHJl
c2VudGVkT2JqZWN0Ll9jaGlsZE5vZGVDb3VudCwgdGhpcy5leHBhbmRlZENoaWxkcmVuTGltaXQg
KyBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5Jbml0aWFsQ2hpbGRyZW5MaW1pdCk7
Ci0gICAgfSwKLQotICAgIGV4cGFuZFJlY3Vyc2l2ZWx5OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRyZWVFbGVt
ZW50LnByb3RvdHlwZS5leHBhbmRSZWN1cnNpdmVseS5jYWxsKHRoaXMsIE51bWJlci5NQVhfVkFM
VUUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0
LmdldFN1YnRyZWUoLTEsIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBvbmV4
cGFuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRDbG9zZVRh
ZykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0g
ICAgICAgIHRoaXMudHJlZU91dGxpbmUudXBkYXRlU2VsZWN0aW9uKCk7Ci0gICAgfSwKLQotICAg
IG9uY29sbGFwc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lbGVtZW50
Q2xvc2VUYWcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy51cGRhdGVUaXRs
ZSgpOwotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnVwZGF0ZVNlbGVjdGlvbigpOwotICAgIH0s
Ci0KLSAgICBvbnJldmVhbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMubGlz
dEl0ZW1FbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgdGFnU3BhbnMgPSB0aGlzLmxpc3RJdGVt
RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ3ZWJraXQtaHRtbC10YWctbmFtZSIpOwot
ICAgICAgICAgICAgaWYgKHRhZ1NwYW5zLmxlbmd0aCkKLSAgICAgICAgICAgICAgICB0YWdTcGFu
c1swXS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVk
KGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBvbnNlbGVjdDogZnVuY3Rpb24oc2Vs
ZWN0ZWRCeVVzZXIpCi0gICAgewotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnN1cHByZXNzUmV2
ZWFsQW5kU2VsZWN0ID0gdHJ1ZTsKLSAgICAgICAgdGhpcy50cmVlT3V0bGluZS5zZWxlY3RET01O
b2RlKHRoaXMucmVwcmVzZW50ZWRPYmplY3QsIHNlbGVjdGVkQnlVc2VyKTsKLSAgICAgICAgaWYg
KHNlbGVjdGVkQnlVc2VyKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmhpZ2hs
aWdodERPTU5vZGUodGhpcy5yZXByZXNlbnRlZE9iamVjdC5pZCk7Ci0gICAgICAgIHRoaXMudXBk
YXRlU2VsZWN0aW9uKCk7Ci0gICAgICAgIHRoaXMudHJlZU91dGxpbmUuc3VwcHJlc3NSZXZlYWxB
bmRTZWxlY3QgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIG9u
ZGVsZXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc3RhcnRUYWdUcmVlRWxlbWVu
dCA9IHRoaXMudHJlZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KHRoaXMucmVwcmVzZW50ZWRPYmpl
Y3QpOwotICAgICAgICBzdGFydFRhZ1RyZWVFbGVtZW50ID8gc3RhcnRUYWdUcmVlRWxlbWVudC5y
ZW1vdmUoKSA6IHRoaXMucmVtb3ZlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0K
LSAgICBvbmVudGVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBPbiBFbnRlciBvciBS
ZXR1cm4gc3RhcnQgZWRpdGluZyB0aGUgZmlyc3QgYXR0cmlidXRlCi0gICAgICAgIC8vIG9yIGNy
ZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQuCi0gICAgICAgIGlm
ICh0aGlzLl9lZGl0aW5nKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRo
aXMuX3N0YXJ0RWRpdGluZygpOwotCi0gICAgICAgIC8vIHByZXZlbnQgYSBuZXdsaW5lIGZyb20g
YmVpbmcgaW1tZWRpYXRlbHkgaW5zZXJ0ZWQKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwK
LQotICAgIHNlbGVjdE9uTW91c2VEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IFRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3RPbk1vdXNlRG93bi5jYWxsKHRoaXMsIGV2ZW50
KTsKLQotICAgICAgICBpZiAodGhpcy5fZWRpdGluZykKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAodGhpcy50cmVlT3V0bGluZS5fc2hvd0luRWxlbWVudHNQYW5lbEVuYWJsZWQp
IHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93UGFuZWwoImVsZW1lbnRzIik7Ci0gICAg
ICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlbGVjdERPTU5vZGUodGhpcy5yZXByZXNlbnRlZE9i
amVjdCwgdHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQcmV2ZW50IHNlbGVjdGluZyB0
aGUgbmVhcmVzdCB3b3JkIG9uIGRvdWJsZSBjbGljay4KLSAgICAgICAgaWYgKGV2ZW50LmRldGFp
bCA+PSAyKQotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0g
ICAgb25kYmxjbGljazogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
ZWRpdGluZyB8fCB0aGlzLl9lbGVtZW50Q2xvc2VUYWcpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKHRoaXMuX3N0YXJ0RWRpdGluZ1RhcmdldChldmVudC50YXJnZXQpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuICYmICF0aGlz
LmV4cGFuZGVkKQotICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAgICB9LAotCi0gICAgX2lu
c2VydEluTGFzdEF0dHJpYnV0ZVBvc2l0aW9uOiBmdW5jdGlvbih0YWcsIG5vZGUpCi0gICAgewot
ICAgICAgICBpZiAodGFnLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndlYmtpdC1odG1sLWF0dHJp
YnV0ZSIpLmxlbmd0aCA+IDApCi0gICAgICAgICAgICB0YWcuaW5zZXJ0QmVmb3JlKG5vZGUsIHRh
Zy5sYXN0Q2hpbGQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZhciBub2RlTmFtZSA9
IHRhZy50ZXh0Q29udGVudC5tYXRjaCgvXjwoLio/KT4kLylbMV07Ci0gICAgICAgICAgICB0YWcu
dGV4dENvbnRlbnQgPSAnJzsKLSAgICAgICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgnPCcrbm9kZU5hbWUpKTsKLSAgICAgICAgICAgIHRhZy5hcHBlbmRDaGls
ZChub2RlKTsKLSAgICAgICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgnPicpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7
Ci0gICAgfSwKLQotICAgIF9zdGFydEVkaXRpbmdUYXJnZXQ6IGZ1bmN0aW9uKGV2ZW50VGFyZ2V0
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRET01Ob2RlKCkg
IT0gdGhpcy5yZXByZXNlbnRlZE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAodGhpcy5yZXByZXNlbnRlZE9iamVjdC5ub2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9O
T0RFICYmIHRoaXMucmVwcmVzZW50ZWRPYmplY3Qubm9kZVR5cGUoKSAhPSBOb2RlLlRFWFRfTk9E
RSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgdGV4dE5vZGUgPSBl
dmVudFRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtaHRtbC10ZXh0
LW5vZGUiKTsKLSAgICAgICAgaWYgKHRleHROb2RlKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXJ0RWRpdGluZ1RleHROb2RlKHRleHROb2RlKTsKLQotICAgICAgICB2YXIgYXR0cmlidXRl
ID0gZXZlbnRUYXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWh0bWwt
YXR0cmlidXRlIik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGUpCi0gICAgICAgICAgICByZXR1cm4g
dGhpcy5fc3RhcnRFZGl0aW5nQXR0cmlidXRlKGF0dHJpYnV0ZSwgZXZlbnRUYXJnZXQpOwotCi0g
ICAgICAgIHZhciB0YWdOYW1lID0gZXZlbnRUYXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhD
bGFzcygid2Via2l0LWh0bWwtdGFnLW5hbWUiKTsKLSAgICAgICAgaWYgKHRhZ05hbWUpCi0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRFZGl0aW5nVGFnTmFtZSh0YWdOYW1lKTsKLQotICAg
ICAgICB2YXIgbmV3QXR0cmlidXRlID0gZXZlbnRUYXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcygiYWRkLWF0dHJpYnV0ZSIpOwotICAgICAgICBpZiAobmV3QXR0cmlidXRlKQotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZE5ld0F0dHJpYnV0ZSgpOwotCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlVGFnQ29udGV4dE1lbnU6IGZ1bmN0aW9u
KGNvbnRleHRNZW51LCBldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBhdHRyaWJ1dGUgPSBldmVu
dC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWh0bWwtYXR0cmli
dXRlIik7Ci0gICAgICAgIHZhciBuZXdBdHRyaWJ1dGUgPSBldmVudC50YXJnZXQuZW5jbG9zaW5n
Tm9kZU9yU2VsZldpdGhDbGFzcygiYWRkLWF0dHJpYnV0ZSIpOwotCi0gICAgICAgIC8vIEFkZCBh
dHRyaWJ1dGUtcmVsYXRlZCBhY3Rpb25zLgotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlz
Ll9lbGVtZW50Q2xvc2VUYWcgPyB0aGlzLnRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudCh0aGlz
LnJlcHJlc2VudGVkT2JqZWN0KSA6IHRoaXM7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0
ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0
bGVzKCkgPyAiQWRkIGF0dHJpYnV0ZSIgOiAiQWRkIEF0dHJpYnV0ZSIpLCB0aGlzLl9hZGROZXdB
dHRyaWJ1dGUuYmluZCh0cmVlRWxlbWVudCkpOwotICAgICAgICBpZiAoYXR0cmlidXRlICYmICFu
ZXdBdHRyaWJ1dGUpCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkVk
aXQgYXR0cmlidXRlIiA6ICJFZGl0IEF0dHJpYnV0ZSIpLCB0aGlzLl9zdGFydEVkaXRpbmdBdHRy
aWJ1dGUuYmluZCh0aGlzLCBhdHRyaWJ1dGUsIGV2ZW50LnRhcmdldCkpOwotICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUu
X3NldFBzZXVkb0NsYXNzQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIHZhciBwc2V1ZG9TdWJNZW51
ID0gY29udGV4dE1lbnUuYXBwZW5kU3ViTWVudUl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdl
Ykluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiRm9yY2UgZWxlbWVudCBzdGF0
ZSIgOiAiRm9yY2UgRWxlbWVudCBTdGF0ZSIpKTsKLSAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRl
Rm9yY2VkUHNldWRvU3RhdGVJdGVtcyhwc2V1ZG9TdWJNZW51KTsKLSAgICAgICAgICAgIGNvbnRl
eHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcG9w
dWxhdGVOb2RlQ29udGV4dE1lbnUoY29udGV4dE1lbnUpOwotICAgICAgICB0aGlzLnRyZWVPdXRs
aW5lLl9wb3B1bGF0ZUNvbnRleHRNZW51KGNvbnRleHRNZW51LCB0aGlzLnJlcHJlc2VudGVkT2Jq
ZWN0KTsKLQotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9y
LnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJTY3JvbGwgaW50byB2aWV3IiA6ICJTY3JvbGwg
aW50byBWaWV3IiksIHRoaXMuX3Njcm9sbEludG9WaWV3LmJpbmQodGhpcykpOyAKLSAgICB9LAot
Ci0gICAgX3BvcHVsYXRlRm9yY2VkUHNldWRvU3RhdGVJdGVtczogZnVuY3Rpb24oc3ViTWVudSkK
LSAgICB7Ci0gICAgICAgIGNvbnN0IHBzZXVkb0NsYXNzZXMgPSBbImFjdGl2ZSIsICJob3ZlciIs
ICJmb2N1cyIsICJ2aXNpdGVkIl07Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5yZXByZXNlbnRl
ZE9iamVjdDsKLSAgICAgICAgdmFyIGZvcmNlZFBzZXVkb1N0YXRlID0gKG5vZGUgPyBub2RlLmdl
dFVzZXJQcm9wZXJ0eSgicHNldWRvU3RhdGUiKSA6IG51bGwpIHx8IFtdOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHBzZXVkb0NsYXNzZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
IHZhciBwc2V1ZG9DbGFzc0ZvcmNlZCA9IGZvcmNlZFBzZXVkb1N0YXRlLmluZGV4T2YocHNldWRv
Q2xhc3Nlc1tpXSkgPj0gMDsKLSAgICAgICAgICAgIHN1Yk1lbnUuYXBwZW5kQ2hlY2tib3hJdGVt
KCI6IiArIHBzZXVkb0NsYXNzZXNbaV0sIHRoaXMudHJlZU91dGxpbmUuX3NldFBzZXVkb0NsYXNz
Q2FsbGJhY2suYmluZChudWxsLCBub2RlLmlkLCBwc2V1ZG9DbGFzc2VzW2ldLCAhcHNldWRvQ2xh
c3NGb3JjZWQpLCBwc2V1ZG9DbGFzc0ZvcmNlZCwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIF9wb3B1bGF0ZVRleHRDb250ZXh0TWVudTogZnVuY3Rpb24oY29udGV4dE1lbnUsIHRl
eHROb2RlKQotICAgIHsKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJFZGl0
IHRleHQiIDogIkVkaXQgVGV4dCIpLCB0aGlzLl9zdGFydEVkaXRpbmdUZXh0Tm9kZS5iaW5kKHRo
aXMsIHRleHROb2RlKSk7Ci0gICAgICAgIHRoaXMuX3BvcHVsYXRlTm9kZUNvbnRleHRNZW51KGNv
bnRleHRNZW51KTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlTm9kZUNvbnRleHRNZW51OiBmdW5j
dGlvbihjb250ZXh0TWVudSkKLSAgICB7Ci0gICAgICAgIC8vIEFkZCBmcmVlLWZvcm0gbm9kZS1y
ZWxhdGVkIGFjdGlvbnMuCi0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJFZGl0IGFzIEhUTUwiKSwgdGhpcy5fZWRpdEFzSFRNTC5iaW5kKHRoaXMp
KTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkNvcHkgYXMgSFRNTCIpLCB0aGlzLl9jb3B5SFRNTC5iaW5kKHRoaXMpKTsKLSAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvcHkgWFBhdGgiKSwg
dGhpcy5fY29weVhQYXRoLmJpbmQodGhpcykpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRp
dGxlcygpID8gIkRlbGV0ZSBub2RlIiA6ICJEZWxldGUgTm9kZSIpLCB0aGlzLnJlbW92ZS5iaW5k
KHRoaXMpKTsKLSAgICB9LAotCi0gICAgX3N0YXJ0RWRpdGluZzogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRET01Ob2RlKCkgIT09IHRoaXMu
cmVwcmVzZW50ZWRPYmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGxp
c3RJdGVtID0gdGhpcy5fbGlzdEl0ZW1Ob2RlOwotCi0gICAgICAgIGlmICh0aGlzLl9jYW5BZGRB
dHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gbGlzdEl0ZW0uZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSgid2Via2l0LWh0bWwtYXR0cmlidXRlIilbMF07Ci0gICAgICAgICAg
ICBpZiAoYXR0cmlidXRlKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEVkaXRp
bmdBdHRyaWJ1dGUoYXR0cmlidXRlLCBhdHRyaWJ1dGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgi
d2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlIilbMF0pOwotCi0gICAgICAgICAgICByZXR1cm4g
dGhpcy5fYWRkTmV3QXR0cmlidXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5y
ZXByZXNlbnRlZE9iamVjdC5ub2RlVHlwZSgpID09PSBOb2RlLlRFWFRfTk9ERSkgewotICAgICAg
ICAgICAgdmFyIHRleHROb2RlID0gbGlzdEl0ZW0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgid2Vi
a2l0LWh0bWwtdGV4dC1ub2RlIilbMF07Ci0gICAgICAgICAgICBpZiAodGV4dE5vZGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0RWRpdGluZ1RleHROb2RlKHRleHROb2RlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfYWRkTmV3QXR0
cmlidXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBDYW5ub3QganVzdCBjb252ZXJ0
IHRoZSB0ZXh0dWFsIGh0bWwgaW50byBhbiBlbGVtZW50IHdpdGhvdXQKLSAgICAgICAgLy8gYSBw
YXJlbnQgbm9kZS4gVXNlIGEgdGVtcG9yYXJ5IHNwYW4gY29udGFpbmVyIGZvciB0aGUgSFRNTC4K
LSAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
LSAgICAgICAgdGhpcy5fYnVpbGRBdHRyaWJ1dGVET00oY29udGFpbmVyLCAiICIsICIiKTsKLSAg
ICAgICAgdmFyIGF0dHIgPSBjb250YWluZXIuZmlyc3RDaGlsZDsKLSAgICAgICAgYXR0ci5zdHls
ZS5tYXJnaW5MZWZ0ID0gIjJweCI7IC8vIG92ZXJyaWRlcyB0aGUgLmVkaXRpbmcgbWFyZ2luIHJ1
bGUKLSAgICAgICAgYXR0ci5zdHlsZS5tYXJnaW5SaWdodCA9ICIycHgiOyAvLyBvdmVycmlkZXMg
dGhlIC5lZGl0aW5nIG1hcmdpbiBydWxlCi0KLSAgICAgICAgdmFyIHRhZyA9IHRoaXMubGlzdEl0
ZW1FbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndlYmtpdC1odG1sLXRhZyIpWzBdOwot
ICAgICAgICB0aGlzLl9pbnNlcnRJbkxhc3RBdHRyaWJ1dGVQb3NpdGlvbih0YWcsIGF0dHIpOwot
ICAgICAgICBhdHRyLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodHJ1ZSk7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9zdGFydEVkaXRpbmdBdHRyaWJ1dGUoYXR0ciwgYXR0cik7Ci0gICAgfSwKLQotICAg
IF90cmlnZ2VyRWRpdEF0dHJpYnV0ZTogZnVuY3Rpb24oYXR0cmlidXRlTmFtZSkKLSAgICB7Ci0g
ICAgICAgIHZhciBhdHRyaWJ1dGVFbGVtZW50cyA9IHRoaXMubGlzdEl0ZW1FbGVtZW50LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoIndlYmtpdC1odG1sLWF0dHJpYnV0ZS1uYW1lIik7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwLCBsZW4gPSBhdHRyaWJ1dGVFbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47
ICsraSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUVsZW1lbnRzW2ldLnRleHRDb250ZW50
ID09PSBhdHRyaWJ1dGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgZWxlbSA9IGF0
dHJpYnV0ZUVsZW1lbnRzW2ldLm5leHRTaWJsaW5nOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2li
bGluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5ub2RlVHlwZSAhPT0gTm9kZS5F
TEVNRU5UX05PREUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoZWxlbS5oYXNTdHlsZUNsYXNzKCJ3ZWJraXQtaHRtbC1hdHRyaWJ1
dGUtdmFsdWUiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEVk
aXRpbmdBdHRyaWJ1dGUoZWxlbS5wYXJlbnROb2RlLCBlbGVtKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3N0YXJ0RWRpdGluZ0F0
dHJpYnV0ZTogZnVuY3Rpb24oYXR0cmlidXRlLCBlbGVtZW50Rm9yU2VsZWN0aW9uKQotICAgIHsK
LSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKGF0dHJpYnV0ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB2YXIgYXR0cmlidXRlTmFtZUVsZW1lbnQg
PSBhdHRyaWJ1dGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgid2Via2l0LWh0bWwtYXR0cmlidXRl
LW5hbWUiKVswXTsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lRWxlbWVudCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0
ZU5hbWVFbGVtZW50LnRleHRDb250ZW50OwotCi0gICAgICAgIGZ1bmN0aW9uIHJlbW92ZVplcm9X
aWR0aFNwYWNlUmVjdXJzaXZlKG5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChub2Rl
Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewotICAgICAgICAgICAgICAgIG5vZGUubm9k
ZVZhbHVlID0gbm9kZS5ub2RlVmFsdWUucmVwbGFjZSgvXHUyMDBCL2csICIiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChub2RlLm5v
ZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGZvciAodmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC5uZXh0U2libGluZykKLSAgICAgICAgICAgICAgICByZW1vdmVaZXJvV2lkdGhT
cGFjZVJlY3Vyc2l2ZShjaGlsZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZW1vdmUgemVy
by13aWR0aCBzcGFjZXMgdGhhdCB3ZXJlIGFkZGVkIGJ5IG5vZGVUaXRsZUluZm8uCi0gICAgICAg
IHJlbW92ZVplcm9XaWR0aFNwYWNlUmVjdXJzaXZlKGF0dHJpYnV0ZSk7Ci0KLSAgICAgICAgdmFy
IGNvbmZpZyA9IG5ldyBXZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZyh0aGlzLl9hdHRyaWJ1dGVF
ZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIHRoaXMuX2VkaXRpbmdDYW5jZWxsZWQuYmluZCh0
aGlzKSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgIAotICAgICAgICBmdW5jdGlvbiBoYW5kbGVL
ZXlEb3duRXZlbnRzKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaXNNZXRhT3JD
dHJsID0gV2ViSW5zcGVjdG9yLmlzTWFjKCkgPwotICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFL
ZXkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkg
OgotICAgICAgICAgICAgICAgIGV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmICFl
dmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXk7Ci0gICAgICAgICAgICBpZiAoaXNFbnRlcktl
eShldmVudCkgJiYgKGV2ZW50LmlzTWV0YU9yQ3RybEZvclRlc3QgfHwgIWNvbmZpZy5tdWx0aWxp
bmUgfHwgaXNNZXRhT3JDdHJsKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gImNvbW1pdCI7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlIHx8IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAw
MUIiKQotICAgICAgICAgICAgICAgIHJldHVybiAiY2FuY2VsIjsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAwMDkiKSAvLyBUYWIga2V5Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJtb3ZlLSIgKyAoZXZlbnQuc2hpZnRLZXkgPyAiYmFja3dhcmQiIDog
ImZvcndhcmQiKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5oYW5kbGVFbGVtZW50VmFsdWVNb2RpZmljYXRpb25zKGV2ZW50LCBhdHRyaWJ1dGUpOwot
ICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbmZpZy5jdXN0b21GaW5pc2hIYW5kbGVyID0gaGFuZGxlS2V5RG93bkV2ZW50cy5i
aW5kKHRoaXMpOwotCi0gICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNwZWN0b3Iuc3RhcnRF
ZGl0aW5nKGF0dHJpYnV0ZSwgY29uZmlnKTsKLQotICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0QmFzZUFuZEV4dGVudChlbGVtZW50Rm9yU2VsZWN0aW9uLCAwLCBlbGVtZW50Rm9yU2Vs
ZWN0aW9uLCAxKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtFbGVtZW50fSB0ZXh0Tm9kZUVsZW1lbnQKLSAgICAgKi8KLSAgICBfc3Rh
cnRFZGl0aW5nVGV4dE5vZGU6IGZ1bmN0aW9uKHRleHROb2RlRWxlbWVudCkKLSAgICB7Ci0gICAg
ICAgIGlmIChXZWJJbnNwZWN0b3IuaXNCZWluZ0VkaXRlZCh0ZXh0Tm9kZUVsZW1lbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgdmFyIHRleHROb2RlID0gdGhpcy5yZXBy
ZXNlbnRlZE9iamVjdDsKLSAgICAgICAgLy8gV2Ugb25seSBzaG93IHRleHQgbm9kZXMgaW5saW5l
IGluIGVsZW1lbnRzIGlmIHRoZSBlbGVtZW50IG9ubHkKLSAgICAgICAgLy8gaGFzIGEgc2luZ2xl
IGNoaWxkLCBhbmQgdGhhdCBjaGlsZCBpcyBhIHRleHQgbm9kZS4KLSAgICAgICAgaWYgKHRleHRO
b2RlLm5vZGVUeXBlKCkgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIHRleHROb2RlLmZpcnN0Q2hp
bGQpCi0gICAgICAgICAgICB0ZXh0Tm9kZSA9IHRleHROb2RlLmZpcnN0Q2hpbGQ7Ci0KLSAgICAg
ICAgdmFyIGNvbnRhaW5lciA9IHRleHROb2RlRWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0
aENsYXNzKCJ3ZWJraXQtaHRtbC10ZXh0LW5vZGUiKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lcikK
LSAgICAgICAgICAgIGNvbnRhaW5lci50ZXh0Q29udGVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSgp
OyAvLyBTdHJpcCB0aGUgQ1NTIG9yIEpTIGhpZ2hsaWdodGluZyBpZiBwcmVzZW50LgotICAgICAg
ICB2YXIgY29uZmlnID0gbmV3IFdlYkluc3BlY3Rvci5FZGl0aW5nQ29uZmlnKHRoaXMuX3RleHRO
b2RlRWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMsIHRleHROb2RlKSwgdGhpcy5fZWRpdGluZ0Nh
bmNlbGxlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fZWRpdGluZyA9IFdlYkluc3BlY3Rv
ci5zdGFydEVkaXRpbmcodGV4dE5vZGVFbGVtZW50LCBjb25maWcpOwotICAgICAgICB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0ZXh0Tm9kZUVsZW1lbnQsIDAsIHRleHRO
b2RlRWxlbWVudCwgMSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7RWxlbWVudD19IHRhZ05hbWVFbGVtZW50Ci0gICAgICovCi0gICAg
X3N0YXJ0RWRpdGluZ1RhZ05hbWU6IGZ1bmN0aW9uKHRhZ05hbWVFbGVtZW50KQotICAgIHsKLSAg
ICAgICAgaWYgKCF0YWdOYW1lRWxlbWVudCkgewotICAgICAgICAgICAgdGFnTmFtZUVsZW1lbnQg
PSB0aGlzLmxpc3RJdGVtRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ3ZWJraXQtaHRt
bC10YWctbmFtZSIpWzBdOwotICAgICAgICAgICAgaWYgKCF0YWdOYW1lRWxlbWVudCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdGFnTmFt
ZSA9IHRhZ05hbWVFbGVtZW50LnRleHRDb250ZW50OwotICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQuRWRpdFRhZ0JsYWNrbGlzdFt0YWdOYW1lLnRvTG93ZXJDYXNl
KCldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChXZWJJbnNwZWN0
b3IuaXNCZWluZ0VkaXRlZCh0YWdOYW1lRWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgICAgICB2YXIgY2xvc2luZ1RhZ0VsZW1lbnQgPSB0aGlzLl9kaXN0aW5jdENsb3Np
bmdUYWdFbGVtZW50KCk7Ci0KLSAgICAgICAgZnVuY3Rpb24ga2V5dXBMaXN0ZW5lcihldmVudCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNsb3NpbmdUYWdFbGVtZW50KQotICAgICAgICAg
ICAgICAgIGNsb3NpbmdUYWdFbGVtZW50LnRleHRDb250ZW50ID0gIjwvIiArIHRhZ05hbWVFbGVt
ZW50LnRleHRDb250ZW50ICsgIj4iOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZWRp
dGluZ0NvbWl0dGVkKGVsZW1lbnQsIG5ld1RhZ05hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRhZ05hbWVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5dXBMaXN0ZW5l
ciwgZmFsc2UpOwotICAgICAgICAgICAgdGhpcy5fdGFnTmFtZUVkaXRpbmdDb21taXR0ZWQuYXBw
bHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGVkaXRp
bmdDYW5jZWxsZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YWdOYW1lRWxlbWVudC5yZW1v
dmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXVwTGlzdGVuZXIsIGZhbHNlKTsKLSAgICAgICAg
ICAgIHRoaXMuX2VkaXRpbmdDYW5jZWxsZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRhZ05hbWVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywg
a2V5dXBMaXN0ZW5lciwgZmFsc2UpOwotCi0gICAgICAgIHZhciBjb25maWcgPSBuZXcgV2ViSW5z
cGVjdG9yLkVkaXRpbmdDb25maWcoZWRpdGluZ0NvbWl0dGVkLmJpbmQodGhpcyksIGVkaXRpbmdD
YW5jZWxsZWQuYmluZCh0aGlzKSwgdGFnTmFtZSk7Ci0gICAgICAgIHRoaXMuX2VkaXRpbmcgPSBX
ZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRhZ05hbWVFbGVtZW50LCBjb25maWcpOwotICAgICAg
ICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0YWdOYW1lRWxlbWVudCwg
MCwgdGFnTmFtZUVsZW1lbnQsIDEpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0g
ICAgX3N0YXJ0RWRpdGluZ0FzSFRNTDogZnVuY3Rpb24oY29tbWl0Q2FsbGJhY2ssIGVycm9yLCBp
bml0aWFsVmFsdWUpCi0gICAgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0aW5nKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGZ1bmN0aW9uIGNvbnN1bWUoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChldmVudC5ldmVudFBoYXNlID09PSBFdmVudC5BVF9UQVJHRVQpCi0gICAgICAgICAgICAgICAg
ZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGluaXRpYWxWYWx1ZSA9
IHRoaXMuX2NvbnZlcnRXaGl0ZXNwYWNlVG9FbnRpdGllcyhpbml0aWFsVmFsdWUpOwotCi0gICAg
ICAgIHRoaXMuX2h0bWxFZGl0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICB0aGlzLl9odG1sRWRpdEVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1jb2Rl
IGVsZW1lbnRzLXRyZWUtZWRpdG9yIjsKLQotICAgICAgICAvLyBIaWRlIGhlYWRlciBpdGVtcy4K
LSAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5saXN0SXRlbUVsZW1lbnQuZmlyc3RDaGlsZDsKLSAg
ICAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZC5zdHlsZS5kaXNwbGF5ID0g
Im5vbmUiOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZzsKLSAgICAgICAg
fQotICAgICAgICAvLyBIaWRlIGNoaWxkcmVuIGl0ZW0uCi0gICAgICAgIGlmICh0aGlzLl9jaGls
ZHJlbkxpc3ROb2RlKQotICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5zdHlsZS5k
aXNwbGF5ID0gIm5vbmUiOwotICAgICAgICAvLyBBcHBlbmQgZWRpdG9yLgotICAgICAgICB0aGlz
Lmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9odG1sRWRpdEVsZW1lbnQpOwotICAg
ICAgICB0aGlzLnRyZWVPdXRsaW5lLmNoaWxkcmVuTGlzdEVsZW1lbnQucGFyZW50RWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBjb25zdW1lLCBmYWxzZSk7Ci0KLSAgICAgICAg
dGhpcy51cGRhdGVTZWxlY3Rpb24oKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFt
IHtFbGVtZW50fSBlbGVtZW50Ci0gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWx1ZQot
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY29tbWl0KGVsZW1lbnQsIG5ld1ZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb21taXRDYWxsYmFjayhpbml0aWFsVmFsdWUsIG5ld1Zh
bHVlKTsKLSAgICAgICAgICAgIGRpc3Bvc2UuY2FsbCh0aGlzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIGRpc3Bvc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgdGhp
cy5fZWRpdGluZzsKLQotICAgICAgICAgICAgLy8gUmVtb3ZlIGVkaXRvci4KLSAgICAgICAgICAg
IHRoaXMubGlzdEl0ZW1FbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2h0bWxFZGl0RWxlbWVudCk7
Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5faHRtbEVkaXRFbGVtZW50OwotICAgICAgICAgICAg
Ly8gVW5oaWRlIGNoaWxkcmVuIGl0ZW0uCi0gICAgICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5M
aXN0Tm9kZSkKLSAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlLnN0eWxlLnJl
bW92ZVByb3BlcnR5KCJkaXNwbGF5Iik7Ci0gICAgICAgICAgICAvLyBVbmhpZGUgaGVhZGVyIGl0
ZW1zLgotICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5saXN0SXRlbUVsZW1lbnQuZmlyc3RD
aGlsZDsKLSAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGNoaWxk
LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJkaXNwbGF5Iik7Ci0gICAgICAgICAgICAgICAgY2hpbGQg
PSBjaGlsZC5uZXh0U2libGluZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy50
cmVlT3V0bGluZS5jaGlsZHJlbkxpc3RFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigibW91c2Vkb3duIiwgY29uc3VtZSwgZmFsc2UpOwotICAgICAgICAgICAgdGhpcy51
cGRhdGVTZWxlY3Rpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb25maWcgPSBuZXcg
V2ViSW5zcGVjdG9yLkVkaXRpbmdDb25maWcoY29tbWl0LmJpbmQodGhpcyksIGRpc3Bvc2UuYmlu
ZCh0aGlzKSk7Ci0gICAgICAgIGNvbmZpZy5zZXRNdWx0aWxpbmVPcHRpb25zKGluaXRpYWxWYWx1
ZSwgeyBuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWUgfSwgIndlYi1pbnNwZWN0b3ItaHRtbCIs
IHRydWUsIHRydWUpOwotICAgICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9yLnN0YXJ0
RWRpdGluZyh0aGlzLl9odG1sRWRpdEVsZW1lbnQsIGNvbmZpZyk7Ci0gICAgfSwKLQotICAgIF9h
dHRyaWJ1dGVFZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdUZXh0LCBvbGRU
ZXh0LCBhdHRyaWJ1dGVOYW1lLCBtb3ZlRGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAgZGVsZXRl
IHRoaXMuX2VkaXRpbmc7Ci0KLSAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gdGhpcy50cmVlT3V0
bGluZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7UHJvdG9jb2wuRXJyb3I9fSBl
cnJvcgotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbW92ZVRvTmV4dEF0dHJpYnV0ZUlm
TmVlZGVkKGVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAg
ICAgICAgICAgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZChlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsK
LQotICAgICAgICAgICAgaWYgKCFtb3ZlRGlyZWN0aW9uKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgdHJlZU91dGxpbmUuX3VwZGF0ZU1vZGlmaWVkTm9kZXMoKTsKLQot
ICAgICAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgYXR0cmlidXRlJ3MgcG9zaXRpb24sIGFuZCB0
aGVuIGRlY2lkZSB3aGVyZSB0byBtb3ZlIHRvLgotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMg
PSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LmF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IGlmIChhdHRyaWJ1dGVzW2ldLm5hbWUgIT09IGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gPT09
ICJiYWNrd2FyZCIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydEVkaXRpbmdUYWdOYW1lKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJFZGl0
QXR0cmlidXRlKGF0dHJpYnV0ZXNbaSAtIDFdLm5hbWUpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBhdHRyaWJ1dGVzLmxlbmd0aCAtIDEp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGROZXdBdHRyaWJ1dGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dl
ckVkaXRBdHRyaWJ1dGUoYXR0cmlidXRlc1tpICsgMV0ubmFtZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gTW92aW5nIEZyb20gdGhlICJOZXcgQXR0cmlidXRlIiBwb3NpdGlvbi4KLSAgICAgICAgICAg
IGlmIChtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG5ld1RleHQgPT09ICIgIikgewotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZpbmcgZnJvbSAi
TmV3IEF0dHJpYnV0ZSIgdGhhdCB3YXMgbm90IGVkaXRlZAotICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5f
dHJpZ2dlckVkaXRBdHRyaWJ1dGUoYXR0cmlidXRlc1thdHRyaWJ1dGVzLmxlbmd0aCAtIDFdLm5h
bWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1v
dmluZyBmcm9tICJOZXcgQXR0cmlidXRlIiB0aGF0IGhvbGRzIG5ldyB2YWx1ZQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAxKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fdHJpZ2dlckVkaXRBdHRyaWJ1dGUoYXR0cmlidXRlc1thdHRyaWJ1dGVzLmxl
bmd0aCAtIDJdLm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEv
XlxzKiQvLnRlc3QobmV3VGV4dCkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZE5ld0F0
dHJpYnV0ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc3RhcnRFZGl0aW5nVGFnTmFtZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpCi0gICAgICAgICAgICB0aGlzLnJlcHJlc2Vu
dGVkT2JqZWN0LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBuZXdUZXh0LCBtb3ZlVG9OZXh0
QXR0cmlidXRlSWZOZWVkZWQuYmluZCh0aGlzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZC5jYWxsKHRoaXMpOwotICAgIH0sCi0KLSAgICBf
dGFnTmFtZUVkaXRpbmdDb21taXR0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld1RleHQsIG9sZFRl
eHQsIHRhZ05hbWUsIG1vdmVEaXJlY3Rpb24pCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5f
ZWRpdGluZzsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotCi0gICAgICAgIGZ1bmN0aW9uIGNh
bmNlbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBjbG9zaW5nVGFnRWxlbWVudCA9IHNl
bGYuX2Rpc3RpbmN0Q2xvc2luZ1RhZ0VsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChjbG9zaW5n
VGFnRWxlbWVudCkKLSAgICAgICAgICAgICAgICBjbG9zaW5nVGFnRWxlbWVudC50ZXh0Q29udGVu
dCA9ICI8LyIgKyB0YWdOYW1lICsgIj4iOwotCi0gICAgICAgICAgICBzZWxmLl9lZGl0aW5nQ2Fu
Y2VsbGVkKGVsZW1lbnQsIHRhZ05hbWUpOwotICAgICAgICAgICAgbW92ZVRvTmV4dEF0dHJpYnV0
ZUlmTmVlZGVkLmNhbGwoc2VsZik7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtb3Zl
VG9OZXh0QXR0cmlidXRlSWZOZWVkZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobW92
ZURpcmVjdGlvbiAhPT0gImZvcndhcmQiKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYWRkTmV3
QXR0cmlidXRlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMucmVwcmVzZW50ZWRPYmplY3QuYXR0cmli
dXRlcygpOwotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCkKLSAgICAgICAg
ICAgICAgICB0aGlzLl90cmlnZ2VyRWRpdEF0dHJpYnV0ZShhdHRyaWJ1dGVzWzBdLm5hbWUpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX2FkZE5ld0F0dHJpYnV0ZSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3VGV4dCA9IG5ld1RleHQudHJpbSgpOwotICAgICAg
ICBpZiAobmV3VGV4dCA9PT0gb2xkVGV4dCkgewotICAgICAgICAgICAgY2FuY2VsKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSB0
aGlzLnRyZWVPdXRsaW5lOwotICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVk
OwotCi0gICAgICAgIGZ1bmN0aW9uIGNoYW5nZVRhZ05hbWVDYWxsYmFjayhlcnJvciwgbm9kZUlk
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IgfHwgIW5vZGVJZCkgewotICAgICAg
ICAgICAgICAgIGNhbmNlbCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHZhciBuZXdUcmVlSXRlbSA9IHRyZWVPdXRsaW5lLl9zZWxlY3ROb2Rl
QWZ0ZXJFZGl0KG51bGwsIHdhc0V4cGFuZGVkLCBlcnJvciwgbm9kZUlkKTsKLSAgICAgICAgICAg
IG1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZC5jYWxsKG5ld1RyZWVJdGVtKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3Quc2V0Tm9kZU5hbWUobmV3VGV4dCwg
Y2hhbmdlVGFnTmFtZUNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuRE9NTm9kZX0gdGV4dE5vZGUKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9
IGVsZW1lbnQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VGV4dAotICAgICAqLwotICAgIF90
ZXh0Tm9kZUVkaXRpbmdDb21taXR0ZWQ6IGZ1bmN0aW9uKHRleHROb2RlLCBlbGVtZW50LCBuZXdU
ZXh0KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmc7Ci0KLSAgICAgICAgZnVu
Y3Rpb24gY2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dE5vZGUuc2V0Tm9kZVZhbHVlKG5ld1RleHQsIGNh
bGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0Vs
ZW1lbnR9IGVsZW1lbnQKLSAgICAgKiBAcGFyYW0geyp9IGNvbnRleHQKLSAgICAgKi8KLSAgICBf
ZWRpdGluZ0NhbmNlbGxlZDogZnVuY3Rpb24oZWxlbWVudCwgY29udGV4dCkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nOwotCi0gICAgICAgIC8vIE5lZWQgdG8gcmVzdG9yZSBh
dHRyaWJ1dGVzIHN0cnVjdHVyZS4KLSAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpOwotICAgIH0s
Ci0KLSAgICBfZGlzdGluY3RDbG9zaW5nVGFnRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IEltcHJvdmUgdGhlIFRyZWUgRWxlbWVudCAvIE91dGxpbmUgQWJzdHJh
Y3Rpb24gdG8gcHJldmVudCBjcmF3bGluZyB0aGUgRE9NCi0KLSAgICAgICAgLy8gRm9yIGFuIGV4
cGFuZGVkIGVsZW1lbnQsIGl0IHdpbGwgYmUgdGhlIGxhc3QgZWxlbWVudCB3aXRoIGNsYXNzICJj
bG9zZSIKLSAgICAgICAgLy8gaW4gdGhlIGNoaWxkIGVsZW1lbnQgbGlzdC4KLSAgICAgICAgaWYg
KHRoaXMuZXhwYW5kZWQpIHsKLSAgICAgICAgICAgIHZhciBjbG9zZXJzID0gdGhpcy5fY2hpbGRy
ZW5MaXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCIuY2xvc2UiKTsKLSAgICAgICAgICAgIHJldHVy
biBjbG9zZXJzW2Nsb3NlcnMubGVuZ3RoLTFdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVt
YWluaW5nIGNhc2VzIGFyZSBzaW5nbGUgbGluZSBub24tZXhwYW5kZWQgZWxlbWVudHMgd2l0aCBh
IGNsb3NpbmcKLSAgICAgICAgLy8gdGFnLCBvciBIVE1MIGVsZW1lbnRzIHdpdGhvdXQgYSBjbG9z
aW5nIHRhZyAoc3VjaCBhcyA8YnI+KS4gUmV0dXJuCi0gICAgICAgIC8vIG51bGwgaW4gdGhlIGNh
c2Ugd2hlcmUgdGhlcmUgaXNuJ3QgYSBjbG9zaW5nIHRhZy4KLSAgICAgICAgdmFyIHRhZ3MgPSB0
aGlzLmxpc3RJdGVtRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ3ZWJraXQtaHRtbC10
YWciKTsKLSAgICAgICAgcmV0dXJuICh0YWdzLmxlbmd0aCA9PT0gMSA/IG51bGwgOiB0YWdzW3Rh
Z3MubGVuZ3RoLTFdKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFu
PX0gb25seVNlYXJjaFF1ZXJ5Q2hhbmdlZAotICAgICAqLwotICAgIHVwZGF0ZVRpdGxlOiBmdW5j
dGlvbihvbmx5U2VhcmNoUXVlcnlDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgLy8gSWYgd2UgYXJl
IGVkaXRpbmcsIHJldHVybiBlYXJseSB0byBwcmV2ZW50IGNhbmNlbGluZyB0aGUgZWRpdC4KLSAg
ICAgICAgLy8gQWZ0ZXIgZWRpdGluZyBpcyBjb21taXR0ZWQgdXBkYXRlVGl0bGUgd2lsbCBiZSBj
YWxsZWQuCi0gICAgICAgIGlmICh0aGlzLl9lZGl0aW5nKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmIChvbmx5U2VhcmNoUXVlcnlDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5faGlnaGxpZ2h0UmVzdWx0KQotICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJj
aEhpZ2hsaWdodChmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgaGln
aGxpZ2h0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAg
ICAgIGhpZ2hsaWdodEVsZW1lbnQuY2xhc3NOYW1lID0gImhpZ2hsaWdodCI7Ci0gICAgICAgICAg
ICBoaWdobGlnaHRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX25vZGVUaXRsZUluZm8oV2ViSW5z
cGVjdG9yLmxpbmtpZnlVUkxBc05vZGUpLnRpdGxlRE9NKTsKLSAgICAgICAgICAgIHRoaXMudGl0
bGUgPSBoaWdobGlnaHRFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGVjb3JhdGlv
bnMoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRSZXN1bHQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3Rpb25FbGVtZW50OwotICAgICAgICBpZiAo
dGhpcy5zZWxlY3RlZCkKLSAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7Ci0gICAg
ICAgIHRoaXMuX3ByZXZlbnRGb2xsb3dpbmdMaW5rc09uRG91YmxlQ2xpY2soKTsKLSAgICAgICAg
dGhpcy5faGlnaGxpZ2h0U2VhcmNoUmVzdWx0cygpOwotICAgIH0sCi0KLSAgICBfY3JlYXRlRGVj
b3JhdG9yRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LnJlcHJlc2VudGVkT2JqZWN0OwotICAgICAgICB2YXIgZGVjb3JhdG9yTWVzc2FnZXMgPSBbXTsK
LSAgICAgICAgdmFyIHBhcmVudERlY29yYXRvck1lc3NhZ2VzID0gW107Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy50cmVlT3V0bGluZS5fbm9kZURlY29yYXRvcnMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIHZhciBkZWNvcmF0b3IgPSB0aGlzLnRyZWVPdXRsaW5lLl9ub2Rl
RGVjb3JhdG9yc1tpXTsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZGVjb3JhdG9yLmRlY29y
YXRlKG5vZGUpOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICBk
ZWNvcmF0b3JNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRlZCB8fCB0aGlz
Ll9lbGVtZW50Q2xvc2VUYWcpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIG1lc3NhZ2UgPSBkZWNvcmF0b3IuZGVjb3JhdGVBbmNlc3Rvcihub2RlKTsKLSAgICAgICAg
ICAgIGlmIChtZXNzYWdlKQotICAgICAgICAgICAgICAgIHBhcmVudERlY29yYXRvck1lc3NhZ2Vz
LnB1c2gobWVzc2FnZSkKLSAgICAgICAgfQotICAgICAgICBpZiAoIWRlY29yYXRvck1lc3NhZ2Vz
Lmxlbmd0aCAmJiAhcGFyZW50RGVjb3JhdG9yTWVzc2FnZXMubGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIGRlY29yYXRvckVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgZGVjb3JhdG9yRWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJlbGVtZW50cy1ndXR0ZXItZGVjb3JhdGlvbiIpOwotICAgICAgICBpZiAoIWRlY29yYXRv
ck1lc3NhZ2VzLmxlbmd0aCkKLSAgICAgICAgICAgIGRlY29yYXRvckVsZW1lbnQuYWRkU3R5bGVD
bGFzcygiZWxlbWVudHMtaGFzLWRlY29yYXRlZC1jaGlsZHJlbiIpOwotICAgICAgICBkZWNvcmF0
b3JFbGVtZW50LnRpdGxlID0gZGVjb3JhdG9yTWVzc2FnZXMuY29uY2F0KHBhcmVudERlY29yYXRv
ck1lc3NhZ2VzKS5qb2luKCJcbiIpOwotICAgICAgICByZXR1cm4gZGVjb3JhdG9yRWxlbWVudDsK
LSAgICB9LAotCi0gICAgX3VwZGF0ZURlY29yYXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fZGVjb3JhdG9yRWxlbWVudCAmJiB0aGlzLl9kZWNvcmF0b3JFbGVtZW50
LnBhcmVudEVsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLl9kZWNvcmF0b3JFbGVtZW50LnBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZGVjb3JhdG9yRWxlbWVudCk7Ci0gICAgICAgIHRo
aXMuX2RlY29yYXRvckVsZW1lbnQgPSB0aGlzLl9jcmVhdGVEZWNvcmF0b3JFbGVtZW50KCk7Ci0g
ICAgICAgIGlmICh0aGlzLl9kZWNvcmF0b3JFbGVtZW50ICYmIHRoaXMubGlzdEl0ZW1FbGVtZW50
KQotICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2Rl
Y29yYXRvckVsZW1lbnQsIHRoaXMubGlzdEl0ZW1FbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5ET01Ob2RlPX0gbm9kZQot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgYm9vbGVhbj0s
IHN0cmluZz0pPX0gbGlua2lmeQotICAgICAqLwotICAgIF9idWlsZEF0dHJpYnV0ZURPTTogZnVu
Y3Rpb24ocGFyZW50RWxlbWVudCwgbmFtZSwgdmFsdWUsIG5vZGUsIGxpbmtpZnkpCi0gICAgewot
ICAgICAgICB2YXIgaGFzVGV4dCA9ICh2YWx1ZS5sZW5ndGggPiAwKTsKLSAgICAgICAgdmFyIGF0
dHJTcGFuRWxlbWVudCA9IHBhcmVudEVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAid2Via2l0
LWh0bWwtYXR0cmlidXRlIik7Ci0gICAgICAgIHZhciBhdHRyTmFtZUVsZW1lbnQgPSBhdHRyU3Bh
bkVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAid2Via2l0LWh0bWwtYXR0cmlidXRlLW5hbWUi
KTsKLSAgICAgICAgYXR0ck5hbWVFbGVtZW50LnRleHRDb250ZW50ID0gbmFtZTsKLQotICAgICAg
ICBpZiAoaGFzVGV4dCkKLSAgICAgICAgICAgIGF0dHJTcGFuRWxlbWVudC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPVx1MjAwQlwiIikpOwotCi0gICAgICAgIGlmIChsaW5r
aWZ5ICYmIChuYW1lID09PSAic3JjIiB8fCBuYW1lID09PSAiaHJlZiIpKSB7Ci0gICAgICAgICAg
ICB2YXIgcmV3cml0dGVuSHJlZiA9IG5vZGUucmVzb2x2ZVVSTCh2YWx1ZSk7Ci0gICAgICAgICAg
ICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhbXC87OlwpXF1cfV0pL2csICIkMVx1MjAwQiIpOwot
ICAgICAgICAgICAgaWYgKHJld3JpdHRlbkhyZWYgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgYXR0clZhbHVlRWxlbWVudCA9IGF0dHJTcGFuRWxlbWVudC5jcmVhdGVDaGlsZCgic3Bh
biIsICJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUiKTsKLSAgICAgICAgICAgICAgICBhdHRy
VmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gdmFsdWU7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCJkYXRhOiIpKQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCg2MCk7Ci0g
ICAgICAgICAgICAgICAgYXR0clNwYW5FbGVtZW50LmFwcGVuZENoaWxkKGxpbmtpZnkocmV3cml0
dGVuSHJlZiwgdmFsdWUsICJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUiLCBub2RlLm5vZGVO
YW1lKCkudG9Mb3dlckNhc2UoKSA9PT0gImEiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhbXC87OlwpXF1cfV0p
L2csICIkMVx1MjAwQiIpOwotICAgICAgICAgICAgdmFyIGF0dHJWYWx1ZUVsZW1lbnQgPSBhdHRy
U3BhbkVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZh
bHVlIik7Ci0gICAgICAgICAgICBhdHRyVmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gdmFsdWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzVGV4dCkKLSAgICAgICAgICAgIGF0dHJTcGFu
RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXCIiKSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nLCBzdHJpbmcsIHN0
cmluZywgYm9vbGVhbj0sIHN0cmluZz0pPX0gbGlua2lmeQotICAgICAqLwotICAgIF9idWlsZFRh
Z0RPTTogZnVuY3Rpb24ocGFyZW50RWxlbWVudCwgdGFnTmFtZSwgaXNDbG9zaW5nVGFnLCBpc0Rp
c3RpbmN0VHJlZUVsZW1lbnQsIGxpbmtpZnkpCi0gICAgewotICAgICAgICB2YXIgbm9kZSA9IC8q
KiBAdHlwZSBXZWJJbnNwZWN0b3IuRE9NTm9kZSAqLyAodGhpcy5yZXByZXNlbnRlZE9iamVjdCk7
Ci0gICAgICAgIHZhciBjbGFzc2VzID0gWyAid2Via2l0LWh0bWwtdGFnIiBdOwotICAgICAgICBp
ZiAoaXNDbG9zaW5nVGFnICYmIGlzRGlzdGluY3RUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIGNs
YXNzZXMucHVzaCgiY2xvc2UiKTsKLSAgICAgICAgaWYgKG5vZGUuaXNJblNoYWRvd1RyZWUoKSkK
LSAgICAgICAgICAgIGNsYXNzZXMucHVzaCgic2hhZG93Iik7Ci0gICAgICAgIHZhciB0YWdFbGVt
ZW50ID0gcGFyZW50RWxlbWVudC5jcmVhdGVDaGlsZCgic3BhbiIsIGNsYXNzZXMuam9pbigiICIp
KTsKLSAgICAgICAgdGFnRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiPCIpKTsKLSAgICAgICAgdmFyIHRhZ05hbWVFbGVtZW50ID0gdGFnRWxlbWVudC5jcmVhdGVD
aGlsZCgic3BhbiIsIGlzQ2xvc2luZ1RhZyA/ICIiIDogIndlYmtpdC1odG1sLXRhZy1uYW1lIik7
Ci0gICAgICAgIHRhZ05hbWVFbGVtZW50LnRleHRDb250ZW50ID0gKGlzQ2xvc2luZ1RhZyA/ICIv
IiA6ICIiKSArIHRhZ05hbWU7Ci0gICAgICAgIGlmICghaXNDbG9zaW5nVGFnICYmIG5vZGUuaGFz
QXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmli
dXRlcygpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2ldOwotICAg
ICAgICAgICAgICAgIHRhZ0VsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIiAiKSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRBdHRyaWJ1dGVET00odGFnRWxl
bWVudCwgYXR0ci5uYW1lLCBhdHRyLnZhbHVlLCBub2RlLCBsaW5raWZ5KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB0YWdFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCI+IikpOwotICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTIwMEIiKSk7Ci0gICAgfSwKLQotICAgIF9jb252ZXJ0
V2hpdGVzcGFjZVRvRW50aXRpZXM6IGZ1bmN0aW9uKHRleHQpCi0gICAgewotICAgICAgICB2YXIg
cmVzdWx0ID0gIiI7Ci0gICAgICAgIHZhciBsYXN0SW5kZXhBZnRlckVudGl0eSA9IDA7Ci0gICAg
ICAgIHZhciBjaGFyVG9FbnRpdHkgPSBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5N
YXBwZWRDaGFyVG9FbnRpdHk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gdGV4dC5s
ZW5ndGg7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBjaGFyID0gdGV4dC5jaGFy
QXQoaSk7Ci0gICAgICAgICAgICBpZiAoY2hhclRvRW50aXR5W2NoYXJdKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ICs9IHRleHQuc3Vic3RyaW5nKGxhc3RJbmRleEFmdGVyRW50aXR5LCBpKSAr
ICImIiArIGNoYXJUb0VudGl0eVtjaGFyXSArICI7IjsKLSAgICAgICAgICAgICAgICBsYXN0SW5k
ZXhBZnRlckVudGl0eSA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0LnN1YnN0cmluZyhsYXN0
SW5kZXhBZnRlckVudGl0eSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0ZXh0OwotICAgIH0sCi0KLSAgICBfbm9kZVRpdGxlSW5mbzogZnVu
Y3Rpb24obGlua2lmeSkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5yZXByZXNlbnRl
ZE9iamVjdDsKLSAgICAgICAgdmFyIGluZm8gPSB7dGl0bGVET006IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKSwgaGFzQ2hpbGRyZW46IHRoaXMuaGFzQ2hpbGRyZW59OwotCi0gICAg
ICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIE5vZGUuQVRU
UklCVVRFX05PREU6Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS52YWx1ZSB8fCAi
XHUyMDBCIjsgLy8gWmVybyB3aWR0aCBzcGFjZSB0byBmb3JjZSBzaG93aW5nIGFuIGVtcHR5IHZh
bHVlLgotICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkQXR0cmlidXRlRE9NKGluZm8udGl0bGVE
T00sIG5vZGUubmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOgotICAgICAgICAgICAgICAgIHZhciB0YWdOYW1l
ID0gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5fZWxlbWVudENsb3NlVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkVGFn
RE9NKGluZm8udGl0bGVET00sIHRhZ05hbWUsIHRydWUsIHRydWUpOwotICAgICAgICAgICAgICAg
ICAgICBpbmZvLmhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkVGFnRE9N
KGluZm8udGl0bGVET00sIHRhZ05hbWUsIGZhbHNlLCBmYWxzZSwgbGlua2lmeSk7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgdGV4dENoaWxkID0gdGhpcy5fc2luZ2xlVGV4dENoaWxkKG5vZGUpOwot
ICAgICAgICAgICAgICAgIHZhciBzaG93SW5saW5lVGV4dCA9IHRleHRDaGlsZCAmJiB0ZXh0Q2hp
bGQubm9kZVZhbHVlKCkubGVuZ3RoIDwgUHJlZmVyZW5jZXMubWF4SW5saW5lVGV4dENoaWxkTGVu
Z3RoICYmICF0aGlzLmhhc0NoaWxkcmVuOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmV4
cGFuZGVkICYmICghc2hvd0lubGluZVRleHQgJiYgKHRoaXMudHJlZU91dGxpbmUuaXNYTUxNaW1l
VHlwZSB8fCAhV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQuRm9yYmlkZGVuQ2xvc2lu
Z1RhZ0VsZW1lbnRzW3RhZ05hbWVdKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
aGFzQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Tm9kZUVsZW1l
bnQgPSBpbmZvLnRpdGxlRE9NLmNyZWF0ZUNoaWxkKCJzcGFuIiwgIndlYmtpdC1odG1sLXRleHQt
bm9kZSBib2d1cyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE5vZGVFbGVtZW50LnRl
eHRDb250ZW50ID0gIlx1MjAyNiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnRpdGxl
RE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTIwMEIiKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRUYWdET00o
aW5mby50aXRsZURPTSwgdGFnTmFtZSwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZWxlbWVudCBvbmx5IGhhcyBhIHNpbmdsZSBj
aGlsZCB0aGF0IGlzIGEgdGV4dCBub2RlLAotICAgICAgICAgICAgICAgIC8vIGp1c3Qgc2hvdyB0
aGF0IHRleHQgYW5kIHRoZSBjbG9zaW5nIHRhZyBpbmxpbmUgcmF0aGVyIHRoYW4KLSAgICAgICAg
ICAgICAgICAvLyBjcmVhdGUgYSBzdWJ0cmVlIGZvciB0aGVtCi0gICAgICAgICAgICAgICAgaWYg
KHNob3dJbmxpbmVUZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Tm9kZUVsZW1l
bnQgPSBpbmZvLnRpdGxlRE9NLmNyZWF0ZUNoaWxkKCJzcGFuIiwgIndlYmtpdC1odG1sLXRleHQt
bm9kZSIpOwotICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZUVsZW1lbnQudGV4dENvbnRlbnQg
PSB0aGlzLl9jb252ZXJ0V2hpdGVzcGFjZVRvRW50aXRpZXModGV4dENoaWxkLm5vZGVWYWx1ZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaW5mby50aXRsZURPTS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiXHUyMDBCIikpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9i
dWlsZFRhZ0RPTShpbmZvLnRpdGxlRE9NLCB0YWdOYW1lLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGluZm8uaGFzQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgTm9kZS5URVhUX05P
REU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5v
ZGUubm9kZU5hbWUoKS50b0xvd2VyQ2FzZSgpID09PSAic2NyaXB0IikgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgbmV3Tm9kZSA9IGluZm8udGl0bGVET00uY3JlYXRlQ2hpbGQoInNwYW4iLCAi
d2Via2l0LWh0bWwtdGV4dC1ub2RlIHdlYmtpdC1odG1sLWpzLW5vZGUiKTsKLSAgICAgICAgICAg
ICAgICAgICAgbmV3Tm9kZS50ZXh0Q29udGVudCA9IG5vZGUubm9kZVZhbHVlKCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGphdmFzY3JpcHRTeW50YXhIaWdobGlnaHRlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuRE9NU3ludGF4SGlnaGxpZ2h0ZXIoInRleHQvamF2YXNjcmlwdCIsIHRydWUpOwot
ICAgICAgICAgICAgICAgICAgICBqYXZhc2NyaXB0U3ludGF4SGlnaGxpZ2h0ZXIuc3ludGF4SGln
aGxpZ2h0Tm9kZShuZXdOb2RlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUucGFy
ZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUubm9kZU5hbWUoKS50b0xvd2VyQ2FzZSgpID09PSAi
c3R5bGUiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gaW5mby50aXRsZURP
TS5jcmVhdGVDaGlsZCgic3BhbiIsICJ3ZWJraXQtaHRtbC10ZXh0LW5vZGUgd2Via2l0LWh0bWwt
Y3NzLW5vZGUiKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZS50ZXh0Q29udGVudCA9IG5v
ZGUubm9kZVZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGNzc1N5bnRheEhpZ2hs
aWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5ET01TeW50YXhIaWdobGlnaHRlcigidGV4dC9jc3Mi
LCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgY3NzU3ludGF4SGlnaGxpZ2h0ZXIuc3ludGF4
SGlnaGxpZ2h0Tm9kZShuZXdOb2RlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBpbmZvLnRpdGxlRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJcIiIpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRleHROb2RlRWxlbWVudCA9
IGluZm8udGl0bGVET00uY3JlYXRlQ2hpbGQoInNwYW4iLCAid2Via2l0LWh0bWwtdGV4dC1ub2Rl
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRleHROb2RlRWxlbWVudC50ZXh0Q29udGVudCA9IHRo
aXMuX2NvbnZlcnRXaGl0ZXNwYWNlVG9FbnRpdGllcyhub2RlLm5vZGVWYWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaW5mby50aXRsZURPTS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiXCIiKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOgotICAgICAgICAgICAgICAg
IHZhciBjb21tZW50RWxlbWVudCA9IGluZm8udGl0bGVET00uY3JlYXRlQ2hpbGQoInNwYW4iLCAi
d2Via2l0LWh0bWwtY29tbWVudCIpOwotICAgICAgICAgICAgICAgIGNvbW1lbnRFbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8IS0tIiArIG5vZGUubm9kZVZhbHVl
KCkgKyAiLS0+IikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNl
IE5vZGUuRE9DVU1FTlRfVFlQRV9OT0RFOgotICAgICAgICAgICAgICAgIHZhciBkb2NUeXBlRWxl
bWVudCA9IGluZm8udGl0bGVET00uY3JlYXRlQ2hpbGQoInNwYW4iLCAid2Via2l0LWh0bWwtZG9j
dHlwZSIpOwotICAgICAgICAgICAgICAgIGRvY1R5cGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCI8IURPQ1RZUEUgIiArIG5vZGUubm9kZU5hbWUoKSkpOwotICAg
ICAgICAgICAgICAgIGlmIChub2RlLnB1YmxpY0lkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRv
Y1R5cGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgUFVCTElD
IFwiIiArIG5vZGUucHVibGljSWQgKyAiXCIiKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLnN5c3RlbUlkKQotICAgICAgICAgICAgICAgICAgICAgICAgZG9jVHlwZUVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiBcIiIgKyBub2RlLnN5c3RlbUlkICsg
IlwiIikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXN0ZW1JZCkKLSAgICAg
ICAgICAgICAgICAgICAgZG9jVHlwZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIiBTWVNURU0gXCIiICsgbm9kZS5zeXN0ZW1JZCArICJcIiIpKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChub2RlLmludGVybmFsU3Vic2V0KQotICAgICAgICAgICAgICAgICAgICBk
b2NUeXBlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIFsiICsg
bm9kZS5pbnRlcm5hbFN1YnNldCArICJdIikpOwotCi0gICAgICAgICAgICAgICAgZG9jVHlwZUVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIj4iKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05P
REU6Ci0gICAgICAgICAgICAgICAgdmFyIGNkYXRhRWxlbWVudCA9IGluZm8udGl0bGVET00uY3Jl
YXRlQ2hpbGQoInNwYW4iLCAid2Via2l0LWh0bWwtdGV4dC1ub2RlIik7Ci0gICAgICAgICAgICAg
ICAgY2RhdGFFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI8IVtD
REFUQVsiICsgbm9kZS5ub2RlVmFsdWUoKSArICJdXT4iKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKLSAgICAg
ICAgICAgICAgICB2YXIgZnJhZ21lbnRFbGVtZW50ID0gaW5mby50aXRsZURPTS5jcmVhdGVDaGls
ZCgic3BhbiIsICJ3ZWJraXQtaHRtbC1mcmFnbWVudCIpOwotICAgICAgICAgICAgICAgIGZyYWdt
ZW50RWxlbWVudC50ZXh0Q29udGVudCA9IG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCkuY29s
bGFwc2VXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuaXNJblNoYWRvd1Ry
ZWUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
InNoYWRvdyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBpbmZvLnRpdGxlRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCkuY29sbGFwc2VXaGl0ZXNwYWNl
KCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW5mbzsKLSAgICB9LAotCi0gICAgX3Np
bmdsZVRleHRDaGlsZDogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZSkK
LSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBmaXJzdENoaWxkID0gbm9k
ZS5maXJzdENoaWxkOwotICAgICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZC5ub2Rl
VHlwZSgpICE9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0g
ICAgICAgIGlmIChub2RlLmhhc1NoYWRvd1Jvb3RzKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bDsKLQotICAgICAgICB2YXIgc2libGluZyA9IGZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7Ci0gICAg
ICAgIHJldHVybiBzaWJsaW5nID8gbnVsbCA6IGZpcnN0Q2hpbGQ7Ci0gICAgfSwKLQotICAgIF9z
aG93SW5saW5lVGV4dDogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChub2RlLm5v
ZGVUeXBlKCkgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICB2YXIgdGV4dENo
aWxkID0gdGhpcy5fc2luZ2xlVGV4dENoaWxkKG5vZGUpOwotICAgICAgICAgICAgaWYgKHRleHRD
aGlsZCAmJiB0ZXh0Q2hpbGQubm9kZVZhbHVlKCkubGVuZ3RoIDwgUHJlZmVyZW5jZXMubWF4SW5s
aW5lVGV4dENoaWxkTGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgcmVtb3ZlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHRoaXMucGFyZW50OwotICAg
ICAgICBpZiAoIXBhcmVudEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBmdW5jdGlvbiByZW1vdmVOb2RlQ2FsbGJhY2soZXJy
b3IsIHJlbW92ZWROb2RlSWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3Zl
Q2hpbGQoc2VsZik7Ci0gICAgICAgICAgICBwYXJlbnRFbGVtZW50LmFkanVzdENvbGxhcHNlZFJh
bmdlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRoaXMucmVwcmVzZW50ZWRPYmplY3Qu
cGFyZW50Tm9kZSB8fCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LnBhcmVudE5vZGUubm9kZVR5cGUo
KSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLnJlcHJlc2VudGVkT2JqZWN0LnJlbW92ZU5vZGUocmVtb3ZlTm9kZUNhbGxiYWNrKTsKLSAg
ICB9LAotCi0gICAgX2VkaXRBc0hUTUw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB0
cmVlT3V0bGluZSA9IHRoaXMudHJlZU91dGxpbmU7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5y
ZXByZXNlbnRlZE9iamVjdDsKLSAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5v
ZGU7Ci0gICAgICAgIHZhciBpbmRleCA9IG5vZGUuaW5kZXg7Ci0gICAgICAgIHZhciB3YXNFeHBh
bmRlZCA9IHRoaXMuZXhwYW5kZWQ7Ci0KLSAgICAgICAgZnVuY3Rpb24gc2VsZWN0Tm9kZShlcnJv
ciwgbm9kZUlkKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAvLyBTZWxlY3QgaXQgYW5kIGV4cGFuZCBpZiBu
ZWNlc3NhcnkuIFdlIGZvcmNlIHRyZWUgdXBkYXRlIHNvIHRoYXQgaXQgcHJvY2Vzc2VzIGRvbSBl
dmVudHMgYW5kIGlzIHVwIHRvIGRhdGUuCi0gICAgICAgICAgICB0cmVlT3V0bGluZS5fdXBkYXRl
TW9kaWZpZWROb2RlcygpOwotCi0gICAgICAgICAgICB2YXIgbmV3Tm9kZSA9IHBhcmVudE5vZGUg
PyBwYXJlbnROb2RlLmNoaWxkcmVuW2luZGV4XSB8fCBwYXJlbnROb2RlIDogbnVsbDsKLSAgICAg
ICAgICAgIGlmICghbmV3Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIHRyZWVPdXRsaW5lLnNlbGVjdERPTU5vZGUobmV3Tm9kZSwgdHJ1ZSk7Ci0KLSAgICAgICAg
ICAgIGlmICh3YXNFeHBhbmRlZCkgewotICAgICAgICAgICAgICAgIHZhciBuZXdUcmVlSXRlbSA9
IHRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChuZXdOb2RlKTsKLSAgICAgICAgICAgICAgICBp
ZiAobmV3VHJlZUl0ZW0pCi0gICAgICAgICAgICAgICAgICAgIG5ld1RyZWVJdGVtLmV4cGFuZCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29tbWl0Q2hh
bmdlKGluaXRpYWxWYWx1ZSwgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbml0
aWFsVmFsdWUgIT09IHZhbHVlKQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3V0ZXJIVE1MKHZh
bHVlLCBzZWxlY3ROb2RlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBub2RlLmdldE91dGVySFRNTCh0aGlzLl9zdGFydEVk
aXRpbmdBc0hUTUwuYmluZCh0aGlzLCBjb21taXRDaGFuZ2UpKTsKLSAgICB9LAotCi0gICAgX2Nv
cHlIVE1MOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0
LmNvcHlOb2RlKCk7Ci0gICAgfSwKLQotICAgIF9jb3B5WFBhdGg6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3QuY29weVhQYXRoKHRydWUpOwotICAgIH0s
Ci0KLSAgICBfaGlnaGxpZ2h0U2VhcmNoUmVzdWx0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl9zZWFyY2hRdWVyeSB8fCAhdGhpcy5fc2VhcmNoSGlnaGxpZ2h0c1Zpc2li
bGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRSZXN1
bHQpIHsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaEhpZ2hsaWdodCh0cnVlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0ZXh0ID0gdGhpcy5s
aXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQ7Ci0gICAgICAgIHZhciByZWdleE9iamVjdCA9IGNy
ZWF0ZVBsYWluVGV4dFNlYXJjaFJlZ2V4KHRoaXMuX3NlYXJjaFF1ZXJ5LCAiZ2kiKTsKLQotICAg
ICAgICB2YXIgb2Zmc2V0ID0gMDsKLSAgICAgICAgdmFyIG1hdGNoID0gcmVnZXhPYmplY3QuZXhl
Yyh0ZXh0KTsKLSAgICAgICAgdmFyIG1hdGNoUmFuZ2VzID0gW107Ci0gICAgICAgIHdoaWxlICht
YXRjaCkgewotICAgICAgICAgICAgbWF0Y2hSYW5nZXMucHVzaCh7IG9mZnNldDogbWF0Y2guaW5k
ZXgsIGxlbmd0aDogbWF0Y2hbMF0ubGVuZ3RoIH0pOwotICAgICAgICAgICAgbWF0Y2ggPSByZWdl
eE9iamVjdC5leGVjKHRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmFsbCBiYWNrIGZv
ciBYUGF0aCwgZXRjLiBtYXRjaGVzLgotICAgICAgICBpZiAoIW1hdGNoUmFuZ2VzLmxlbmd0aCkK
LSAgICAgICAgICAgIG1hdGNoUmFuZ2VzLnB1c2goeyBvZmZzZXQ6IDAsIGxlbmd0aDogdGV4dC5s
ZW5ndGggfSk7Ci0KLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0UmVzdWx0ID0gW107Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5oaWdobGlnaHRTZWFyY2hSZXN1bHRzKHRoaXMubGlzdEl0ZW1FbGVtZW50
LCBtYXRjaFJhbmdlcywgdGhpcy5faGlnaGxpZ2h0UmVzdWx0KTsKLSAgICB9LAotCi0gICAgX3Nj
cm9sbEludG9WaWV3OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBzY3JvbGxJ
bnRvVmlld0NhbGxiYWNrKG9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgZnVuY3Rpb24g
c2Nyb2xsSW50b1ZpZXcoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKG9iamVjdCkKLSAgICAgICAgICAgICAgICBvYmplY3QuY2FsbEZ1bmN0aW9uKHNjcm9sbElu
dG9WaWV3KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFyIG5vZGUgPSAvKiogQHR5
cGUge1dlYkluc3BlY3Rvci5ET01Ob2RlfSAqLyAodGhpcy5yZXByZXNlbnRlZE9iamVjdCk7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QucmVzb2x2ZU5vZGUobm9kZSwgIiIsIHNj
cm9sbEludG9WaWV3Q2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFRyZWVFbGVt
ZW50LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlVXBkYXRlciA9IGZ1bmN0aW9uKHRyZWVPdXRsaW5lKQotewotICAgIFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01BZ2Vu
dC5FdmVudHMuTm9kZUluc2VydGVkLCB0aGlzLl9ub2RlSW5zZXJ0ZWQsIHRoaXMpOwotICAgIFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01BZ2Vu
dC5FdmVudHMuTm9kZVJlbW92ZWQsIHRoaXMuX25vZGVSZW1vdmVkLCB0aGlzKTsKLSAgICBXZWJJ
bnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQu
RXZlbnRzLkF0dHJNb2RpZmllZCwgdGhpcy5fYXR0cmlidXRlc1VwZGF0ZWQsIHRoaXMpOwotICAg
IFdlYkluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01B
Z2VudC5FdmVudHMuQXR0clJlbW92ZWQsIHRoaXMuX2F0dHJpYnV0ZXNVcGRhdGVkLCB0aGlzKTsK
LSAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RE9NQWdlbnQuRXZlbnRzLkNoYXJhY3RlckRhdGFNb2RpZmllZCwgdGhpcy5fY2hhcmFjdGVyRGF0
YU1vZGlmaWVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkRvY3VtZW50VXBkYXRlZCwgdGhpcy5f
ZG9jdW1lbnRVcGRhdGVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkNoaWxkTm9kZUNvdW50VXBk
YXRlZCwgdGhpcy5fY2hpbGROb2RlQ291bnRVcGRhdGVkLCB0aGlzKTsKLQotICAgIHRoaXMuX3Ry
ZWVPdXRsaW5lID0gdHJlZU91dGxpbmU7Ci0gICAgdGhpcy5fcmVjZW50bHlNb2RpZmllZE5vZGVz
ID0gbmV3IE1hcCgpOwotfQotCi1XZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlVXBkYXRlci5wcm90
b3R5cGUgPSB7Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuRE9NTm9k
ZX0gbm9kZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNVcGRhdGVkCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuRE9NTm9kZT19IHBhcmVudE5vZGUKLSAgICAgKi8KLSAgICBfbm9kZU1v
ZGlmaWVkOiBmdW5jdGlvbihub2RlLCBpc1VwZGF0ZWQsIHBhcmVudE5vZGUpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fdHJlZU91dGxpbmUuX3Zpc2libGUpCi0gICAgICAgICAgICB0aGlzLl91
cGRhdGVNb2RpZmllZE5vZGVzU29vbigpOwotCi0gICAgICAgIHZhciBlbnRyeSA9IC8qKiBAdHlw
ZSB7V2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIuVXBkYXRlRW50cnl9ICovICh0aGlz
Ll9yZWNlbnRseU1vZGlmaWVkTm9kZXMuZ2V0KG5vZGUpKTsKLSAgICAgICAgaWYgKCFlbnRyeSkg
ewotICAgICAgICAgICAgZW50cnkgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0
ZXIuVXBkYXRlRW50cnkoaXNVcGRhdGVkLCBwYXJlbnROb2RlKTsKLSAgICAgICAgICAgIHRoaXMu
X3JlY2VudGx5TW9kaWZpZWROb2Rlcy5wdXQobm9kZSwgZW50cnkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnkuaXNVcGRhdGVkIHw9IGlzVXBkYXRlZDsK
LSAgICAgICAgaWYgKHBhcmVudE5vZGUpCi0gICAgICAgICAgICBlbnRyeS5wYXJlbnQgPSBwYXJl
bnROb2RlOwotICAgIH0sCi0KLSAgICBfZG9jdW1lbnRVcGRhdGVkOiBmdW5jdGlvbihldmVudCkK
LSAgICB7Ci0gICAgICAgIHZhciBpbnNwZWN0ZWRSb290RG9jdW1lbnQgPSBldmVudC5kYXRhOwot
Ci0gICAgICAgIHRoaXMuX3Jlc2V0KCk7Ci0KLSAgICAgICAgaWYgKCFpbnNwZWN0ZWRSb290RG9j
dW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fdHJlZU91dGxpbmUu
cm9vdERPTU5vZGUgPSBpbnNwZWN0ZWRSb290RG9jdW1lbnQ7Ci0gICAgfSwKLQotICAgIF9hdHRy
aWJ1dGVzVXBkYXRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9ub2Rl
TW9kaWZpZWQoZXZlbnQuZGF0YS5ub2RlLCB0cnVlKTsKLSAgICB9LAotCi0gICAgX2NoYXJhY3Rl
ckRhdGFNb2RpZmllZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9ub2Rl
TW9kaWZpZWQoZXZlbnQuZGF0YSwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9ub2RlSW5zZXJ0ZWQ6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fbm9kZU1vZGlmaWVkKGV2ZW50
LmRhdGEsIGZhbHNlLCBldmVudC5kYXRhLnBhcmVudE5vZGUpOwotICAgIH0sCi0KLSAgICBfbm9k
ZVJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fbm9kZU1vZGlm
aWVkKGV2ZW50LmRhdGEubm9kZSwgZmFsc2UsIGV2ZW50LmRhdGEucGFyZW50KTsKLSAgICB9LAot
Ci0gICAgX2NoaWxkTm9kZUNvdW50VXBkYXRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQo
ZXZlbnQuZGF0YSk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHRyZWVF
bGVtZW50Lmhhc0NoaWxkcmVuID0gZXZlbnQuZGF0YS5oYXNDaGlsZE5vZGVzKCk7Ci0gICAgfSwK
LQotICAgIF91cGRhdGVNb2RpZmllZE5vZGVzU29vbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX3VwZGF0ZU1vZGlmaWVkTm9kZXNUaW1lb3V0KQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0aGlzLl91cGRhdGVNb2RpZmllZE5vZGVzVGltZW91dCA9IHNldFRpbWVv
dXQodGhpcy5fdXBkYXRlTW9kaWZpZWROb2Rlcy5iaW5kKHRoaXMpLCA1MCk7Ci0gICAgfSwKLQot
ICAgIF91cGRhdGVNb2RpZmllZE5vZGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5fdXBkYXRlTW9kaWZpZWROb2Rlc1RpbWVvdXQpIHsKLSAgICAgICAgICAgIGNsZWFyVGlt
ZW91dCh0aGlzLl91cGRhdGVNb2RpZmllZE5vZGVzVGltZW91dCk7Ci0gICAgICAgICAgICBkZWxl
dGUgdGhpcy5fdXBkYXRlTW9kaWZpZWROb2Rlc1RpbWVvdXQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIgdXBkYXRlZFBhcmVudFRyZWVFbGVtZW50cyA9IFtdOwotCi0gICAgICAgIHZhciBoaWRl
UGFuZWxXaGlsZVVwZGF0aW5nID0gdGhpcy5fcmVjZW50bHlNb2RpZmllZE5vZGVzLnNpemUoKSA+
IDEwOwotICAgICAgICBpZiAoaGlkZVBhbmVsV2hpbGVVcGRhdGluZykgewotICAgICAgICAgICAg
dmFyIHRyZWVPdXRsaW5lQ29udGFpbmVyRWxlbWVudCA9IHRoaXMuX3RyZWVPdXRsaW5lLmVsZW1l
bnQucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIHRoaXMuX3RyZWVPdXRsaW5lLmVsZW1lbnQuYWRk
U3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICB2YXIgb3JpZ2luYWxTY3JvbGxUb3Ag
PSB0cmVlT3V0bGluZUNvbnRhaW5lckVsZW1lbnQgPyB0cmVlT3V0bGluZUNvbnRhaW5lckVsZW1l
bnQuc2Nyb2xsVG9wIDogMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBrZXlzID0gdGhpcy5f
cmVjZW50bHlNb2RpZmllZE5vZGVzLmtleXMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIHNp
emUgPSBrZXlzLmxlbmd0aDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgdmFyIG5vZGUg
PSBrZXlzW2ldOwotICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5fcmVjZW50bHlNb2RpZmll
ZE5vZGVzLmdldChub2RlKTsKLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbnRyeS5wYXJlbnQ7
Ci0KLSAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IHRoaXMuX3RyZWVPdXRsaW5lLl9yb290RE9N
Tm9kZSkgewotICAgICAgICAgICAgICAgIC8vIERvY3VtZW50J3MgY2hpbGRyZW4gaGF2ZSBjaGFu
Z2VkLCBwZXJmb3JtIHRvdGFsIHVwZGF0ZS4KLSAgICAgICAgICAgICAgICB0aGlzLl90cmVlT3V0
bGluZS51cGRhdGUoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl90cmVlT3V0bGluZS5lbGVtZW50
LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGVudHJ5LmlzVXBkYXRlZCkgewotICAgICAg
ICAgICAgICAgIHZhciBub2RlSXRlbSA9IHRoaXMuX3RyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVu
dChub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZUl0ZW0pCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGVJdGVtLnVwZGF0ZVRpdGxlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghcGFyZW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB2
YXIgcGFyZW50Tm9kZUl0ZW0gPSB0aGlzLl90cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQocGFy
ZW50KTsKLSAgICAgICAgICAgIGlmIChwYXJlbnROb2RlSXRlbSAmJiAhcGFyZW50Tm9kZUl0ZW0u
YWxyZWFkeVVwZGF0ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgICAgIHBhcmVudE5vZGVJdGVt
LnVwZGF0ZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgcGFyZW50Tm9kZUl0ZW0uYWxyZWFk
eVVwZGF0ZWRDaGlsZHJlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdXBkYXRlZFBhcmVudFRy
ZWVFbGVtZW50cy5wdXNoKHBhcmVudE5vZGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlZFBhcmVudFRyZWVFbGVtZW50
cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkUGFyZW50VHJlZUVsZW1l
bnRzW2ldLmFscmVhZHlVcGRhdGVkQ2hpbGRyZW47Ci0KLSAgICAgICAgaWYgKGhpZGVQYW5lbFdo
aWxlVXBkYXRpbmcpIHsKLSAgICAgICAgICAgIHRoaXMuX3RyZWVPdXRsaW5lLmVsZW1lbnQucmVt
b3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICBpZiAob3JpZ2luYWxTY3JvbGxU
b3ApCi0gICAgICAgICAgICAgICAgdHJlZU91dGxpbmVDb250YWluZXJFbGVtZW50LnNjcm9sbFRv
cCA9IG9yaWdpbmFsU2Nyb2xsVG9wOwotICAgICAgICAgICAgdGhpcy5fdHJlZU91dGxpbmUudXBk
YXRlU2VsZWN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fcmVjZW50bHlNb2RpZmll
ZE5vZGVzLmNsZWFyKCk7Ci0gICAgfSwKLQotICAgIF9yZXNldDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fdHJlZU91dGxpbmUucm9vdERPTU5vZGUgPSBudWxsOwotICAgICAgICB0
aGlzLl90cmVlT3V0bGluZS5zZWxlY3RET01Ob2RlKG51bGwsIGZhbHNlKTsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLmRvbUFnZW50LmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7Ci0gICAgICAgIHRoaXMu
X3JlY2VudGx5TW9kaWZpZWROb2Rlcy5jbGVhcigpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNVcGRhdGVkCi0gKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5ET01Ob2RlPX0gcGFyZW50Ci0gKi8KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVV
cGRhdGVyLlVwZGF0ZUVudHJ5ID0gZnVuY3Rpb24oaXNVcGRhdGVkLCBwYXJlbnQpCi17Ci0gICAg
dGhpcy5pc1VwZGF0ZWQgPSBpc1VwZGF0ZWQ7Ci0gICAgaWYgKHBhcmVudCkKLSAgICAgICAgdGhp
cy5wYXJlbnQgPSBwYXJlbnQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0VtcHR5Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRW1wdHlWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2E2NWFm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRW1wdHlW
aWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKi8KLVdlYkluc3BlY3Rvci5FbXB0
eVZpZXcgPSBmdW5jdGlvbih0ZXh0KQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhp
cyk7Ci0gICAgdGhpcy5fdGV4dCA9IHRleHQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5FbXB0eVZpZXcu
cHJvdG90eXBlID0gewotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInN0b3JhZ2UtZW1wdHktdmlldyI7Ci0gICAgICAgIHRo
aXMuZWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuX3RleHQ7Ci0gICAgfSwKLQotICAgIHNldCB0
ZXh0KHRleHQpCi0gICAgewotICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDsKLSAgICAgICAgaWYg
KHRoaXMuaXNTaG93aW5nKCkpCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQg
PSB0aGlzLl90ZXh0OwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3
LnByb3RvdHlwZQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0V2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0V2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJiZDIwOWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FdmVudExpc3RlbmVyc1NpZGViYXJQYW5lLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGgg
UGVjb3Jhcm8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5T
aWRlYmFyUGFuZX0KLSAqLwotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUg
PSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFdmVudCBMaXN0ZW5lcnMiKSk7Ci0gICAgdGhpcy5ib2R5
RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJldmVudHMtcGFuZSIpOwotCi0gICAgdGhpcy5zZWN0aW9u
cyA9IFtdOwotCi0gICAgdGhpcy5zZXR0aW5nc1NlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICB0aGlzLnNldHRpbmdzU2VsZWN0RWxlbWVudC5jbGFz
c05hbWUgPSAic2VsZWN0LWZpbHRlciI7Ci0KLSAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgib3B0aW9uIik7Ci0gICAgb3B0aW9uLnZhbHVlID0gImFsbCI7Ci0gICAgb3B0
aW9uLmxhYmVsID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBbGwgTm9kZXMiKTsKLSAgICB0aGlz
LnNldHRpbmdzU2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb24pOwotCi0gICAgb3B0aW9u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Ci0gICAgb3B0aW9uLnZhbHVlID0g
InNlbGVjdGVkIjsKLSAgICBvcHRpb24ubGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNl
bGVjdGVkIE5vZGUgT25seSIpOwotICAgIHRoaXMuc2V0dGluZ3NTZWxlY3RFbGVtZW50LmFwcGVu
ZENoaWxkKG9wdGlvbik7Ci0KLSAgICB2YXIgZmlsdGVyID0gV2ViSW5zcGVjdG9yLnNldHRpbmdz
LmV2ZW50TGlzdGVuZXJzRmlsdGVyLmdldCgpOwotICAgIGlmIChmaWx0ZXIgPT09ICJhbGwiKQot
ICAgICAgICB0aGlzLnNldHRpbmdzU2VsZWN0RWxlbWVudFswXS5zZWxlY3RlZCA9IHRydWU7Ci0g
ICAgZWxzZSBpZiAoZmlsdGVyID09PSAic2VsZWN0ZWQiKQotICAgICAgICB0aGlzLnNldHRpbmdz
U2VsZWN0RWxlbWVudFsxXS5zZWxlY3RlZCA9IHRydWU7Ci0gICAgdGhpcy5zZXR0aW5nc1NlbGVj
dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbihldmVudCkgeyBldmVu
dC5jb25zdW1lKCkgfSwgZmFsc2UpOwotICAgIHRoaXMuc2V0dGluZ3NTZWxlY3RFbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuX2NoYW5nZVNldHRpbmcuYmluZCh0aGlzKSwg
ZmFsc2UpOwotCi0gICAgdGhpcy50aXRsZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5n
c1NlbGVjdEVsZW1lbnQpOwotCi0gICAgdGhpcy5fbGlua2lmaWVyID0gbmV3IFdlYkluc3BlY3Rv
ci5MaW5raWZpZXIoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBh
bmUuX29iamVjdEdyb3VwTmFtZSA9ICJldmVudC1saXN0ZW5lcnMtc2lkZWJhci1wYW5lIjsKLQot
V2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewotICAg
IHVwZGF0ZTogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIFJ1bnRpbWVBZ2VudC5yZWxl
YXNlT2JqZWN0R3JvdXAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuX29i
amVjdEdyb3VwTmFtZSk7Ci0gICAgICAgIHRoaXMuX2xpbmtpZmllci5yZXNldCgpOwotCi0gICAg
ICAgIHZhciBib2R5ID0gdGhpcy5ib2R5RWxlbWVudDsKLSAgICAgICAgYm9keS5yZW1vdmVDaGls
ZHJlbigpOwotICAgICAgICB0aGlzLnNlY3Rpb25zID0gW107Ci0KLSAgICAgICAgdmFyIHNlbGYg
PSB0aGlzOwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgZXZlbnRMaXN0ZW5lcnMp
IHsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIHZhciBzZWxlY3RlZE5vZGVPbmx5ID0gInNlbGVjdGVkIiA9PT0gV2ViSW5zcGVj
dG9yLnNldHRpbmdzLmV2ZW50TGlzdGVuZXJzRmlsdGVyLmdldCgpOwotICAgICAgICAgICAgdmFy
IHNlY3Rpb25OYW1lcyA9IFtdOwotICAgICAgICAgICAgdmFyIHNlY3Rpb25NYXAgPSB7fTsKLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRMaXN0ZW5lcnMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICB2YXIgZXZlbnRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXJzW2ld
OwotICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE5vZGVPbmx5ICYmIChub2RlLmlkICE9PSBl
dmVudExpc3RlbmVyLm5vZGVJZCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIGV2ZW50TGlzdGVuZXIubm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5u
b2RlRm9ySWQoZXZlbnRMaXN0ZW5lci5ub2RlSWQpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBl
dmVudExpc3RlbmVyLm5vZGVJZDsgLy8gbm8gbG9uZ2VyIG5lZWRlZAotICAgICAgICAgICAgICAg
IGlmICgvXmZ1bmN0aW9uIF9pbnNwZWN0b3JDb21tYW5kTGluZUFQSV9sb2dFdmVudFwoLy50ZXN0
KGV2ZW50TGlzdGVuZXIuaGFuZGxlckJvZHkudG9TdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOyAvLyBpZ25vcmUgZXZlbnQgbGlzdGVuZXJzIGdlbmVyYXRlZCBieSBtb25p
dG9yRXZlbnQKLSAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGV2ZW50TGlzdGVuZXIudHlwZTsK
LSAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IHNlY3Rpb25NYXBbdHlwZV07Ci0gICAgICAg
ICAgICAgICAgaWYgKCFzZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBu
ZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2VjdGlvbih0eXBlLCBub2RlLmlkLCBzZWxm
Ll9saW5raWZpZXIpOwotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uTWFwW3R5cGVdID0gc2Vj
dGlvbjsKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWVzLnB1c2godHlwZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuc2VjdGlvbnMucHVzaChzZWN0aW9uKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgc2VjdGlvbi5hZGRMaXN0ZW5lcihldmVudExpc3RlbmVy
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNlY3Rpb25OYW1lcy5sZW5ndGgg
PT09IDApIHsKLSAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJpbmZvIjsKLSAgICAg
ICAgICAgICAgICBkaXYudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5vIEV2
ZW50IExpc3RlbmVycyIpOwotICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNl
Y3Rpb25OYW1lcy5zb3J0KCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlY3Rp
b25OYW1lcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uID0gc2Vj
dGlvbk1hcFtzZWN0aW9uTmFtZXNbaV1dOwotICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hp
bGQoc2VjdGlvbi5lbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChub2RlKQotICAgICAgICAgICAgbm9kZS5ldmVudExpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
RXZlbnRMaXN0ZW5lcnNTaWRlYmFyUGFuZS5fb2JqZWN0R3JvdXBOYW1lLCBjYWxsYmFjayk7Ci0g
ICAgICAgIHRoaXMuX3NlbGVjdGVkTm9kZSA9IG5vZGU7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRl
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fc2VsZWN0ZWROb2RlOwot
ICAgIH0sCi0KLSAgICBfY2hhbmdlU2V0dGluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIHNlbGVjdGVkT3B0aW9uID0gdGhpcy5zZXR0aW5nc1NlbGVjdEVsZW1lbnRbdGhpcy5zZXR0
aW5nc1NlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleF07Ci0gICAgICAgIFdlYkluc3BlY3Rvci5z
ZXR0aW5ncy5ldmVudExpc3RlbmVyc0ZpbHRlci5zZXQoc2VsZWN0ZWRPcHRpb24udmFsdWUpOwot
ICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLl9zZWxlY3RlZE5vZGUpOwotICAgIH0sCi0KLSAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90b3R5cGUKLX0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rp
b259Ci0gKi8KLVdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyc1NlY3Rpb24gPSBmdW5jdGlvbih0
aXRsZSwgbm9kZUlkLCBsaW5raWZpZXIpCi17Ci0gICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtd
OwotICAgIHRoaXMuX25vZGVJZCA9IG5vZGVJZDsKLSAgICB0aGlzLl9saW5raWZpZXIgPSBsaW5r
aWZpZXI7Ci0gICAgV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLmNhbGwodGhpcywgdGl0
bGUpOwotCi0gICAgLy8gQ2hhbmdlZCBmcm9tIGEgUHJvcGVydGllcyBMaXN0Ci0gICAgdGhpcy5w
cm9wZXJ0aWVzRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucHJvcGVydGllc0Vs
ZW1lbnQpOwotICAgIGRlbGV0ZSB0aGlzLnByb3BlcnRpZXNFbGVtZW50OwotICAgIGRlbGV0ZSB0
aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZTsKLQotICAgIHRoaXMuX2V2ZW50QmFycyA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2V2ZW50QmFycy5jbGFzc05hbWUg
PSAiZXZlbnQtYmFycyI7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2V2ZW50
QmFycyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyc1NlY3Rpb24ucHJvdG90eXBl
ID0gewotICAgIGFkZExpc3RlbmVyOiBmdW5jdGlvbihldmVudExpc3RlbmVyKQotICAgIHsKLSAg
ICAgICAgdmFyIGV2ZW50TGlzdGVuZXJCYXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCYXIoZXZlbnRMaXN0ZW5lciwgdGhpcy5fbm9kZUlkLCB0aGlzLl9saW5raWZpZXIpOwotICAg
ICAgICB0aGlzLl9ldmVudEJhcnMuYXBwZW5kQ2hpbGQoZXZlbnRMaXN0ZW5lckJhci5lbGVtZW50
KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rp
b24ucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2Vi
SW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9ufQotICovCi1XZWJJbnNwZWN0b3IuRXZl
bnRMaXN0ZW5lckJhciA9IGZ1bmN0aW9uKGV2ZW50TGlzdGVuZXIsIG5vZGVJZCwgbGlua2lmaWVy
KQotewotICAgIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5jYWxsKHRoaXMs
IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVByaW1pdGl2ZVZhbHVlKCIiKSk7Ci0KLSAg
ICB0aGlzLmV2ZW50TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOwotICAgIHRoaXMuX25vZGVJZCA9
IG5vZGVJZDsKLSAgICB0aGlzLl9zZXROb2RlVGl0bGUoKTsKLSAgICB0aGlzLl9zZXRGdW5jdGlv
blN1YnRpdGxlKGxpbmtpZmllcik7Ci0gICAgdGhpcy5lZGl0YWJsZSA9IGZhbHNlOwotICAgIHRo
aXMuZWxlbWVudC5jbGFzc05hbWUgPSAiZXZlbnQtYmFyIjsgLyogQ2hhbmdlZCBmcm9tICJzZWN0
aW9uIiAqLwotICAgIHRoaXMuaGVhZGVyRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzb3VyY2UtY29k
ZSIpOwotICAgIHRoaXMucHJvcGVydGllc0VsZW1lbnQuY2xhc3NOYW1lID0gImV2ZW50LXByb3Bl
cnRpZXMgcHJvcGVydGllcy10cmVlIHNvdXJjZS1jb2RlIjsgLyogQ2hhbmdlZCBmcm9tICJwcm9w
ZXJ0aWVzIiAqLwotfQotCi1XZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJhci5wcm90b3R5cGUg
PSB7Ci0gICAgdXBkYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlvbiB1cGRh
dGVXaXRoTm9kZU9iamVjdChub2RlT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
cHJvcGVydGllcyA9IFtdOwotCi0gICAgICAgICAgICBpZiAodGhpcy5ldmVudExpc3RlbmVyLnR5
cGUpCi0gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKFdlYkluc3BlY3Rvci5SZW1vdGVP
YmplY3RQcm9wZXJ0eS5mcm9tUHJpbWl0aXZlVmFsdWUoInR5cGUiLCB0aGlzLmV2ZW50TGlzdGVu
ZXIudHlwZSkpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV2ZW50TGlzdGVuZXIudXNl
Q2FwdHVyZSAhPT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNo
KFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eS5mcm9tUHJpbWl0aXZlVmFsdWUoInVz
ZUNhcHR1cmUiLCB0aGlzLmV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSkpOwotICAgICAgICAgICAg
aWYgKHR5cGVvZiB0aGlzLmV2ZW50TGlzdGVuZXIuaXNBdHRyaWJ1dGUgIT09ICJ1bmRlZmluZWQi
KQotICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChXZWJJbnNwZWN0b3IuUmVtb3RlT2Jq
ZWN0UHJvcGVydHkuZnJvbVByaW1pdGl2ZVZhbHVlKCJpc0F0dHJpYnV0ZSIsIHRoaXMuZXZlbnRM
aXN0ZW5lci5pc0F0dHJpYnV0ZSkpOwotICAgICAgICAgICAgaWYgKG5vZGVPYmplY3QpCi0gICAg
ICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0
UHJvcGVydHkoIm5vZGUiLCBub2RlT2JqZWN0KSk7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHRo
aXMuZXZlbnRMaXN0ZW5lci5oYW5kbGVyICE9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAg
ICAgIHZhciByZW1vdGVPYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXls
b2FkKHRoaXMuZXZlbnRMaXN0ZW5lci5oYW5kbGVyKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
aWVzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eSgiaGFuZGxlciIs
IHJlbW90ZU9iamVjdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiB0
aGlzLmV2ZW50TGlzdGVuZXIuaGFuZGxlckJvZHkgIT09ICJ1bmRlZmluZWQiKQotICAgICAgICAg
ICAgICAgIHByb3BlcnRpZXMucHVzaChXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHku
ZnJvbVByaW1pdGl2ZVZhbHVlKCJsaXN0ZW5lckJvZHkiLCB0aGlzLmV2ZW50TGlzdGVuZXIuaGFu
ZGxlckJvZHkpKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50TGlzdGVuZXIuc291cmNlTmFt
ZSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goV2ViSW5zcGVjdG9yLlJlbW90ZU9i
amVjdFByb3BlcnR5LmZyb21QcmltaXRpdmVWYWx1ZSgic291cmNlTmFtZSIsIHRoaXMuZXZlbnRM
aXN0ZW5lci5zb3VyY2VOYW1lKSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5ldmVudExpc3RlbmVy
LmxvY2F0aW9uKQotICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChXZWJJbnNwZWN0b3Iu
UmVtb3RlT2JqZWN0UHJvcGVydHkuZnJvbVByaW1pdGl2ZVZhbHVlKCJsaW5lTnVtYmVyIiwgdGhp
cy5ldmVudExpc3RlbmVyLmxvY2F0aW9uLmxpbmVOdW1iZXIgKyAxKSk7Ci0KLSAgICAgICAgICAg
IHRoaXMudXBkYXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBX
ZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LnJlc29sdmVOb2RlKHRoaXMuZXZlbnRMaXN0ZW5lci5u
b2RlLCBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcnNTaWRlYmFyUGFuZS5fb2JqZWN0R3JvdXBO
YW1lLCB1cGRhdGVXaXRoTm9kZU9iamVjdC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX3Nl
dE5vZGVUaXRsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmV2
ZW50TGlzdGVuZXIubm9kZTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkg
ewotICAgICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSAiZG9jdW1lbnQi
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUuaWQg
PT09IHRoaXMuX25vZGVJZCkgewotICAgICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQudGV4dENv
bnRlbnQgPSBub2RlLmFwcHJvcHJpYXRlU2VsZWN0b3JGb3IoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMudGl0bGVFbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7Ci0gICAgICAgIHRoaXMudGl0bGVFbGVtZW50LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5E
T01QcmVzZW50YXRpb25VdGlscy5saW5raWZ5Tm9kZVJlZmVyZW5jZSh0aGlzLmV2ZW50TGlzdGVu
ZXIubm9kZSkpOwotICAgIH0sCi0KLSAgICBfc2V0RnVuY3Rpb25TdWJ0aXRsZTogZnVuY3Rpb24o
bGlua2lmaWVyKQotICAgIHsKLSAgICAgICAgLy8gUmVxdWlyZXMgdGhhdCBGdW5jdGlvbi50b1N0
cmluZygpIHJldHVybiBhdCBsZWFzdCB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUuCi0gICAgICAg
IGlmICh0aGlzLmV2ZW50TGlzdGVuZXIubG9jYXRpb24pIHsKLSAgICAgICAgICAgIHRoaXMuc3Vi
dGl0bGVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICB2YXIgdXJsRWxlbWVu
dDsKLSAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50TGlzdGVuZXIubG9jYXRpb24uc2NyaXB0SWQp
Ci0gICAgICAgICAgICAgICAgdXJsRWxlbWVudCA9IGxpbmtpZmllci5saW5raWZ5UmF3TG9jYXRp
b24odGhpcy5ldmVudExpc3RlbmVyLmxvY2F0aW9uKTsKLSAgICAgICAgICAgIGlmICghdXJsRWxl
bWVudCkgewotICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmV2ZW50TGlzdGVuZXIuc291
cmNlTmFtZTsKLSAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHRoaXMuZXZlbnRMaXN0
ZW5lci5sb2NhdGlvbi5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIHZhciBjb2x1bW5OdW1i
ZXIgPSAwOwotICAgICAgICAgICAgICAgIHVybEVsZW1lbnQgPSBsaW5raWZpZXIubGlua2lmeUxv
Y2F0aW9uKHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHRoaXMuc3VidGl0bGVFbGVtZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5ldmVudExpc3Rl
bmVyLmhhbmRsZXJCb2R5Lm1hdGNoKC9mdW5jdGlvbiAoW15cKF0rPylcKC8pOwotICAgICAgICAg
ICAgaWYgKG1hdGNoKQotICAgICAgICAgICAgICAgIHRoaXMuc3VidGl0bGVFbGVtZW50LnRleHRD
b250ZW50ID0gbWF0Y2hbMV07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhp
cy5zdWJ0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihh
bm9ueW1vdXMgZnVuY3Rpb24pIik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvbkFQSS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uQVBJLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzI1ZTQyLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uQVBJLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsODk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi1mdW5jdGlvbiBkZWZpbmVDb21tb25FeHRlbnNpb25TeW1ib2xz
KGFwaVByaXZhdGUpCi17Ci0gICAgaWYgKCFhcGlQcml2YXRlLmF1ZGl0cykKLSAgICAgICAgYXBp
UHJpdmF0ZS5hdWRpdHMgPSB7fTsKLSAgICBhcGlQcml2YXRlLmF1ZGl0cy5TZXZlcml0eSA9IHsK
LSAgICAgICAgSW5mbzogImluZm8iLAotICAgICAgICBXYXJuaW5nOiAid2FybmluZyIsCi0gICAg
ICAgIFNldmVyZTogInNldmVyZSIKLSAgICB9OwotCi0gICAgaWYgKCFhcGlQcml2YXRlLmNvbnNv
bGUpCi0gICAgICAgIGFwaVByaXZhdGUuY29uc29sZSA9IHt9OwotICAgIGFwaVByaXZhdGUuY29u
c29sZS5TZXZlcml0eSA9IHsKLSAgICAgICAgRGVidWc6ICJkZWJ1ZyIsCi0gICAgICAgIExvZzog
ImxvZyIsCi0gICAgICAgIFdhcm5pbmc6ICJ3YXJuaW5nIiwKLSAgICAgICAgRXJyb3I6ICJlcnJv
ciIKLSAgICB9OwotCi0gICAgaWYgKCFhcGlQcml2YXRlLnBhbmVscykKLSAgICAgICAgYXBpUHJp
dmF0ZS5wYW5lbHMgPSB7fTsKLSAgICBhcGlQcml2YXRlLnBhbmVscy5TZWFyY2hBY3Rpb24gPSB7
Ci0gICAgICAgIENhbmNlbFNlYXJjaDogImNhbmNlbFNlYXJjaCIsCi0gICAgICAgIFBlcmZvcm1T
ZWFyY2g6ICJwZXJmb3JtU2VhcmNoIiwKLSAgICAgICAgTmV4dFNlYXJjaFJlc3VsdDogIm5leHRT
ZWFyY2hSZXN1bHQiLAotICAgICAgICBQcmV2aW91c1NlYXJjaFJlc3VsdDogInByZXZpb3VzU2Vh
cmNoUmVzdWx0IgotICAgIH07Ci0KLSAgICBhcGlQcml2YXRlLkV2ZW50cyA9IHsKLSAgICAgICAg
QXVkaXRTdGFydGVkOiAiYXVkaXQtc3RhcnRlZC0iLAotICAgICAgICBCdXR0b25DbGlja2VkOiAi
YnV0dG9uLWNsaWNrZWQtIiwKLSAgICAgICAgQ29uc29sZU1lc3NhZ2VBZGRlZDogImNvbnNvbGUt
bWVzc2FnZS1hZGRlZCIsCi0gICAgICAgIEVsZW1lbnRzUGFuZWxPYmplY3RTZWxlY3RlZDogInBh
bmVsLW9iamVjdFNlbGVjdGVkLWVsZW1lbnRzIiwKLSAgICAgICAgTmV0d29ya1JlcXVlc3RGaW5p
c2hlZDogIm5ldHdvcmstcmVxdWVzdC1maW5pc2hlZCIsCi0gICAgICAgIE9wZW5SZXNvdXJjZTog
Im9wZW4tcmVzb3VyY2UiLAotICAgICAgICBQYW5lbFNlYXJjaDogInBhbmVsLXNlYXJjaC0iLAot
ICAgICAgICBSZWxvYWQ6ICJSZWxvYWQiLAotICAgICAgICBSZXNvdXJjZUFkZGVkOiAicmVzb3Vy
Y2UtYWRkZWQiLAotICAgICAgICBSZXNvdXJjZUNvbnRlbnRDb21taXR0ZWQ6ICJyZXNvdXJjZS1j
b250ZW50LWNvbW1pdHRlZCIsCi0gICAgICAgIFRpbWVsaW5lRXZlbnRSZWNvcmRlZDogInRpbWVs
aW5lLWV2ZW50LXJlY29yZGVkIiwKLSAgICAgICAgVmlld1Nob3duOiAidmlldy1zaG93bi0iLAot
ICAgICAgICBWaWV3SGlkZGVuOiAidmlldy1oaWRkZW4tIgotICAgIH07Ci0KLSAgICBhcGlQcml2
YXRlLkNvbW1hbmRzID0gewotICAgICAgICBBZGRBdWRpdENhdGVnb3J5OiAiYWRkQXVkaXRDYXRl
Z29yeSIsCi0gICAgICAgIEFkZEF1ZGl0UmVzdWx0OiAiYWRkQXVkaXRSZXN1bHQiLAotICAgICAg
ICBBZGRDb25zb2xlTWVzc2FnZTogImFkZENvbnNvbGVNZXNzYWdlIiwKLSAgICAgICAgQWRkUmVx
dWVzdEhlYWRlcnM6ICJhZGRSZXF1ZXN0SGVhZGVycyIsCi0gICAgICAgIENyZWF0ZVBhbmVsOiAi
Y3JlYXRlUGFuZWwiLAotICAgICAgICBDcmVhdGVTaWRlYmFyUGFuZTogImNyZWF0ZVNpZGViYXJQ
YW5lIiwKLSAgICAgICAgQ3JlYXRlU3RhdHVzQmFyQnV0dG9uOiAiY3JlYXRlU3RhdHVzQmFyQnV0
dG9uIiwKLSAgICAgICAgRXZhbHVhdGVPbkluc3BlY3RlZFBhZ2U6ICJldmFsdWF0ZU9uSW5zcGVj
dGVkUGFnZSIsCi0gICAgICAgIEdldENvbnNvbGVNZXNzYWdlczogImdldENvbnNvbGVNZXNzYWdl
cyIsCi0gICAgICAgIEdldEhBUjogImdldEhBUiIsCi0gICAgICAgIEdldFBhZ2VSZXNvdXJjZXM6
ICJnZXRQYWdlUmVzb3VyY2VzIiwKLSAgICAgICAgR2V0UmVxdWVzdENvbnRlbnQ6ICJnZXRSZXF1
ZXN0Q29udGVudCIsCi0gICAgICAgIEdldFJlc291cmNlQ29udGVudDogImdldFJlc291cmNlQ29u
dGVudCIsCi0gICAgICAgIFN1YnNjcmliZTogInN1YnNjcmliZSIsCi0gICAgICAgIFNldE9wZW5S
ZXNvdXJjZUhhbmRsZXI6ICJzZXRPcGVuUmVzb3VyY2VIYW5kbGVyIiwKLSAgICAgICAgU2V0UmVz
b3VyY2VDb250ZW50OiAic2V0UmVzb3VyY2VDb250ZW50IiwKLSAgICAgICAgU2V0U2lkZWJhckNv
bnRlbnQ6ICJzZXRTaWRlYmFyQ29udGVudCIsCi0gICAgICAgIFNldFNpZGViYXJIZWlnaHQ6ICJz
ZXRTaWRlYmFySGVpZ2h0IiwKLSAgICAgICAgU2V0U2lkZWJhclBhZ2U6ICJzZXRTaWRlYmFyUGFn
ZSIsCi0gICAgICAgIFNob3dQYW5lbDogInNob3dQYW5lbCIsCi0gICAgICAgIFN0b3BBdWRpdENh
dGVnb3J5UnVuOiAic3RvcEF1ZGl0Q2F0ZWdvcnlSdW4iLAotICAgICAgICBVbnN1YnNjcmliZTog
InVuc3Vic2NyaWJlIiwKLSAgICAgICAgVXBkYXRlQXVkaXRQcm9ncmVzczogInVwZGF0ZUF1ZGl0
UHJvZ3Jlc3MiLAotICAgICAgICBVcGRhdGVCdXR0b246ICJ1cGRhdGVCdXR0b24iLAotICAgICAg
ICBJbnNwZWN0ZWRVUkxDaGFuZ2VkOiAiaW5zcGVjdGVkVVJMQ2hhbmdlZCIKLSAgICB9OwotfQot
Ci1mdW5jdGlvbiBpbmplY3RlZEV4dGVuc2lvbkFQSShpbmplY3RlZFNjcmlwdElkKQotewotCi12
YXIgYXBpUHJpdmF0ZSA9IHt9OwotCi1kZWZpbmVDb21tb25FeHRlbnNpb25TeW1ib2xzKGFwaVBy
aXZhdGUpOwotCi12YXIgY29tbWFuZHMgPSBhcGlQcml2YXRlLkNvbW1hbmRzOwotdmFyIGV2ZW50
cyA9IGFwaVByaXZhdGUuRXZlbnRzOwotdmFyIHVzZXJBY3Rpb24gPSBmYWxzZTsKLQotLy8gSGVy
ZSBhbmQgYmVsb3csIGFsbCBjb25zdHJ1Y3RvcnMgYXJlIHByaXZhdGUgdG8gQVBJIGltcGxlbWVu
dGF0aW9uLgotLy8gRm9yIGEgcHVibGljIHR5cGUgRm9vLCBpZiBpbnRlcm5hbCBmaWVsZHMgYXJl
IHByZXNlbnQsIHRoZXNlIGFyZSBvbgotLy8gYSBwcml2YXRlIEZvb0ltcGwgdHlwZSwgYW4gaW5z
dGFuY2Ugb2YgRm9vSW1wbCBpcyB1c2VkIGluIGEgY2xvc3VyZQotLy8gYnkgRm9vIGNvbnN1dHJj
dG9yIHRvIHJlLWJpbmQgcHVibGljbHkgZXhwb3J0ZWQgbWVtYmVycyB0byBhbiBpbnN0YW5jZQot
Ly8gb2YgRm9vLgotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBFdmVudFNp
bmtJbXBsKHR5cGUsIGN1c3RvbURpc3BhdGNoKQotewotICAgIHRoaXMuX3R5cGUgPSB0eXBlOwot
ICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdOwotICAgIHRoaXMuX2N1c3RvbURpc3BhdGNoID0gY3Vz
dG9tRGlzcGF0Y2g7Ci19Ci0KLUV2ZW50U2lua0ltcGwucHJvdG90eXBlID0gewotICAgIGFkZExp
c3RlbmVyOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgY2Fs
bGJhY2sgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICB0aHJvdyAiYWRkTGlzdGVuZXI6IGNh
bGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIjsKLSAgICAgICAgaWYgKHRoaXMuX2xpc3RlbmVycy5s
ZW5ndGggPT09IDApCi0gICAgICAgICAgICBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QoeyBj
b21tYW5kOiBjb21tYW5kcy5TdWJzY3JpYmUsIHR5cGU6IHRoaXMuX3R5cGUgfSk7Ci0gICAgICAg
IHRoaXMuX2xpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTsKLSAgICAgICAgZXh0ZW5zaW9uU2VydmVy
LnJlZ2lzdGVySGFuZGxlcigibm90aWZ5LSIgKyB0aGlzLl90eXBlLCB0aGlzLl9kaXNwYXRjaC5i
aW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKGNhbGxi
YWNrKQotICAgIHsKLSAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyczsKLQot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgaWYgKGxpc3RlbmVyc1tpXSA9PT0gY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAg
ICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh0aGlzLl9saXN0ZW5lcnMubGVuZ3RoID09
PSAwKQotICAgICAgICAgICAgZXh0ZW5zaW9uU2VydmVyLnNlbmRSZXF1ZXN0KHsgY29tbWFuZDog
Y29tbWFuZHMuVW5zdWJzY3JpYmUsIHR5cGU6IHRoaXMuX3R5cGUgfSk7Ci0gICAgfSwKLQotICAg
IF9maXJlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5f
bGlzdGVuZXJzLnNsaWNlKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJz
Lmxlbmd0aDsgKytpKQotICAgICAgICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gICAgfSwKLQotICAgIF9kaXNwYXRjaDogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7
Ci0gICAgICAgICBpZiAodGhpcy5fY3VzdG9tRGlzcGF0Y2gpCi0gICAgICAgICAgICAgdGhpcy5f
Y3VzdG9tRGlzcGF0Y2guY2FsbCh0aGlzLCByZXF1ZXN0KTsKLSAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICB0aGlzLl9maXJlLmFwcGx5KHRoaXMsIHJlcXVlc3QuYXJndW1lbnRzKTsKLSAgICB9
Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIEluc3BlY3RvckV4dGVu
c2lvbkFQSSgpCi17Ci0gICAgdGhpcy5hdWRpdHMgPSBuZXcgQXVkaXRzKCk7Ci0gICAgdGhpcy5p
bnNwZWN0ZWRXaW5kb3cgPSBuZXcgSW5zcGVjdGVkV2luZG93KCk7Ci0gICAgdGhpcy5wYW5lbHMg
PSBuZXcgUGFuZWxzKCk7Ci0gICAgdGhpcy5uZXR3b3JrID0gbmV3IE5ldHdvcmsoKTsKLSAgICBk
ZWZpbmVEZXByZWNhdGVkUHJvcGVydHkodGhpcywgIndlYkluc3BlY3RvciIsICJyZXNvdXJjZXMi
LCAibmV0d29yayIpOwotICAgIHRoaXMudGltZWxpbmUgPSBuZXcgVGltZWxpbmUoKTsKLSAgICB0
aGlzLmNvbnNvbGUgPSBuZXcgQ29uc29sZUFQSSgpOwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICovCi1JbnNwZWN0b3JFeHRlbnNpb25BUEkucHJvdG90eXBlID0gewotICAgIGxvZzogZnVu
Y3Rpb24obWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblNlcnZlci5zZW5kUmVxdWVz
dCh7IGNvbW1hbmQ6IGNvbW1hbmRzLkxvZywgbWVzc2FnZTogbWVzc2FnZSB9KTsKLSAgICB9Ci19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIENvbnNvbGVBUEkoKQotewot
ICAgIHRoaXMub25NZXNzYWdlQWRkZWQgPSBuZXcgRXZlbnRTaW5rKGV2ZW50cy5Db25zb2xlTWVz
c2FnZUFkZGVkKTsKLX0KLQotQ29uc29sZUFQSS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0TWVzc2Fn
ZXM6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU2VydmVyLnNl
bmRSZXF1ZXN0KHsgY29tbWFuZDogY29tbWFuZHMuR2V0Q29uc29sZU1lc3NhZ2VzIH0sIGNhbGxi
YWNrKTsKLSAgICB9LAotCi0gICAgYWRkTWVzc2FnZTogZnVuY3Rpb24oc2V2ZXJpdHksIHRleHQs
IHVybCwgbGluZSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblNlcnZlci5zZW5kUmVxdWVzdCh7
IGNvbW1hbmQ6IGNvbW1hbmRzLkFkZENvbnNvbGVNZXNzYWdlLCBzZXZlcml0eTogc2V2ZXJpdHks
IHRleHQ6IHRleHQsIHVybDogdXJsLCBsaW5lOiBsaW5lIH0pOwotICAgIH0sCi0KLSAgICBnZXQg
U2V2ZXJpdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFwaVByaXZhdGUuY29uc29sZS5TZXZl
cml0eTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIE5l
dHdvcmsoKQotewotICAgIGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdEV2ZW50KG1lc3NhZ2UpCi0g
ICAgewotICAgICAgICB2YXIgcmVxdWVzdCA9IG1lc3NhZ2UuYXJndW1lbnRzWzFdOwotICAgICAg
ICByZXF1ZXN0Ll9fcHJvdG9fXyA9IG5ldyBSZXF1ZXN0KG1lc3NhZ2UuYXJndW1lbnRzWzBdKTsK
LSAgICAgICAgdGhpcy5fZmlyZShyZXF1ZXN0KTsKLSAgICB9Ci0gICAgdGhpcy5vblJlcXVlc3RG
aW5pc2hlZCA9IG5ldyBFdmVudFNpbmsoZXZlbnRzLk5ldHdvcmtSZXF1ZXN0RmluaXNoZWQsIGRp
c3BhdGNoUmVxdWVzdEV2ZW50KTsKLSAgICBkZWZpbmVEZXByZWNhdGVkUHJvcGVydHkodGhpcywg
Im5ldHdvcmsiLCAib25GaW5pc2hlZCIsICJvblJlcXVlc3RGaW5pc2hlZCIpOwotICAgIHRoaXMu
b25OYXZpZ2F0ZWQgPSBuZXcgRXZlbnRTaW5rKGV2ZW50cy5JbnNwZWN0ZWRVUkxDaGFuZ2VkKTsK
LX0KLQotTmV0d29yay5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0SEFSOiBmdW5jdGlvbihjYWxsYmFj
aykKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3JhcHBlcihyZXN1bHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZhciBlbnRyaWVzID0gKHJlc3VsdCAmJiByZXN1bHQuZW50cmll
cykgfHwgW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBlbnRyaWVzW2ldLl9fcHJvdG9fXyA9IG5ldyBSZXF1
ZXN0KGVudHJpZXNbaV0uX3JlcXVlc3RJZCk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGVudHJp
ZXNbaV0uX3JlcXVlc3RJZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbGxiYWNrKHJl
c3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGV4dGVuc2lvblNlcnZlci5zZW5kUmVx
dWVzdCh7IGNvbW1hbmQ6IGNvbW1hbmRzLkdldEhBUiB9LCBjYWxsYmFjayAmJiBjYWxsYmFja1dy
YXBwZXIpOwotICAgIH0sCi0KLSAgICBhZGRSZXF1ZXN0SGVhZGVyczogZnVuY3Rpb24oaGVhZGVy
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QoeyBj
b21tYW5kOiBjb21tYW5kcy5BZGRSZXF1ZXN0SGVhZGVycywgaGVhZGVyczogaGVhZGVycywgZXh0
ZW5zaW9uSWQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSB9KTsKLSAgICB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIFJlcXVlc3RJbXBsKGlkKQotewotICAgIHRo
aXMuX2lkID0gaWQ7Ci19Ci0KLVJlcXVlc3RJbXBsLnByb3RvdHlwZSA9IHsKLSAgICBnZXRDb250
ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
V3JhcHBlcihyZXNwb25zZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FsbGJhY2socmVzcG9u
c2UuY29udGVudCwgcmVzcG9uc2UuZW5jb2RpbmcpOwotICAgICAgICB9Ci0gICAgICAgIGV4dGVu
c2lvblNlcnZlci5zZW5kUmVxdWVzdCh7IGNvbW1hbmQ6IGNvbW1hbmRzLkdldFJlcXVlc3RDb250
ZW50LCBpZDogdGhpcy5faWQgfSwgY2FsbGJhY2sgJiYgY2FsbGJhY2tXcmFwcGVyKTsKLSAgICB9
Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIFBhbmVscygpCi17Ci0g
ICAgdmFyIHBhbmVscyA9IHsKLSAgICAgICAgZWxlbWVudHM6IG5ldyBFbGVtZW50c1BhbmVsKCkK
LSAgICB9OwotCi0gICAgZnVuY3Rpb24gcGFuZWxHZXR0ZXIobmFtZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBwYW5lbHNbbmFtZV07Ci0gICAgfQotICAgIGZvciAodmFyIHBhbmVsIGluIHBhbmVs
cykKLSAgICAgICAgdGhpcy5fX2RlZmluZUdldHRlcl9fKHBhbmVsLCBwYW5lbEdldHRlci5iaW5k
KG51bGwsIHBhbmVsKSk7Ci19Ci0KLVBhbmVscy5wcm90b3R5cGUgPSB7Ci0gICAgY3JlYXRlOiBm
dW5jdGlvbih0aXRsZSwgaWNvbiwgcGFnZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIg
aWQgPSAiZXh0ZW5zaW9uLXBhbmVsLSIgKyBleHRlbnNpb25TZXJ2ZXIubmV4dE9iamVjdElkKCk7
Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gewotICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZHMu
Q3JlYXRlUGFuZWwsCi0gICAgICAgICAgICBpZDogaWQsCi0gICAgICAgICAgICB0aXRsZTogdGl0
bGUsCi0gICAgICAgICAgICBpY29uOiBpY29uLAotICAgICAgICAgICAgcGFnZTogcGFnZQotICAg
ICAgICB9OwotICAgICAgICBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QocmVxdWVzdCwgY2Fs
bGJhY2sgJiYgY2FsbGJhY2suYmluZCh0aGlzLCBuZXcgRXh0ZW5zaW9uUGFuZWwoaWQpKSk7Ci0g
ICAgfSwKLQotICAgIHNldE9wZW5SZXNvdXJjZUhhbmRsZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKQot
ICAgIHsKLSAgICAgICAgdmFyIGhhZEhhbmRsZXIgPSBleHRlbnNpb25TZXJ2ZXIuaGFzSGFuZGxl
cihldmVudHMuT3BlblJlc291cmNlKTsKLQotICAgICAgICBpZiAoIWNhbGxiYWNrKQotICAgICAg
ICAgICAgZXh0ZW5zaW9uU2VydmVyLnVucmVnaXN0ZXJIYW5kbGVyKGV2ZW50cy5PcGVuUmVzb3Vy
Y2UpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3JhcHBl
cihtZXNzYWdlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEFsbG93IHRoZSBw
YW5lbCB0byBzaG93IGl0c2VsZiB3aGVuIGhhbmRsaW5nIHRoZSBldmVudC4KLSAgICAgICAgICAg
ICAgICB1c2VyQWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjay5jYWxsKG51bGwsIG5ldyBSZXNvdXJjZShtZXNzYWdlLnJlc291
cmNlKSwgbWVzc2FnZS5saW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewot
ICAgICAgICAgICAgICAgICAgICB1c2VyQWN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXh0ZW5zaW9uU2VydmVyLnJlZ2lzdGVySGFu
ZGxlcihldmVudHMuT3BlblJlc291cmNlLCBjYWxsYmFja1dyYXBwZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIE9ubHkgc2VuZCBjb21tYW5kIGlmIHdlIGVpdGhlciByZW1vdmVkIGFuIGV4aXN0
aW5nIGhhbmRsZXIgb3IgYWRkZWQgaGFuZGxlciBhbmQgaGFkIG5vbmUgYmVmb3JlLgotICAgICAg
ICBpZiAoaGFkSGFuZGxlciA9PT0gIWNhbGxiYWNrKQotICAgICAgICAgICAgZXh0ZW5zaW9uU2Vy
dmVyLnNlbmRSZXF1ZXN0KHsgY29tbWFuZDogY29tbWFuZHMuU2V0T3BlblJlc291cmNlSGFuZGxl
ciwgImhhbmRsZXJQcmVzZW50IjogISFjYWxsYmFjayB9KTsKLSAgICB9LAotCi0gICAgZ2V0IFNl
YXJjaEFjdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gYXBpUHJpdmF0ZS5wYW5lbHMuU2Vh
cmNoQWN0aW9uOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rp
b24gRXh0ZW5zaW9uVmlld0ltcGwoaWQpCi17Ci0gICAgdGhpcy5faWQgPSBpZDsKLQotICAgIGZ1
bmN0aW9uIGRpc3BhdGNoU2hvd0V2ZW50KG1lc3NhZ2UpCi0gICAgewotICAgICAgICB2YXIgZnJh
bWVJbmRleCA9IG1lc3NhZ2UuYXJndW1lbnRzWzBdOwotICAgICAgICB0aGlzLl9maXJlKHdpbmRv
dy5wYXJlbnQuZnJhbWVzW2ZyYW1lSW5kZXhdKTsKLSAgICB9Ci0gICAgdGhpcy5vblNob3duID0g
bmV3IEV2ZW50U2luayhldmVudHMuVmlld1Nob3duICsgaWQsIGRpc3BhdGNoU2hvd0V2ZW50KTsK
LSAgICB0aGlzLm9uSGlkZGVuID0gbmV3IEV2ZW50U2luayhldmVudHMuVmlld0hpZGRlbiArIGlk
KTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gUGFuZWxXaXRoU2lk
ZWJhckltcGwoaWQpCi17Ci0gICAgdGhpcy5faWQgPSBpZDsKLX0KLQotUGFuZWxXaXRoU2lkZWJh
ckltcGwucHJvdG90eXBlID0gewotICAgIGNyZWF0ZVNpZGViYXJQYW5lOiBmdW5jdGlvbih0aXRs
ZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgaWQgPSAiZXh0ZW5zaW9uLXNpZGViYXIt
IiArIGV4dGVuc2lvblNlcnZlci5uZXh0T2JqZWN0SWQoKTsKLSAgICAgICAgdmFyIHJlcXVlc3Qg
PSB7Ci0gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kcy5DcmVhdGVTaWRlYmFyUGFuZSwKLSAg
ICAgICAgICAgIHBhbmVsOiB0aGlzLl9pZCwKLSAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAg
ICAgIHRpdGxlOiB0aXRsZQotICAgICAgICB9OwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFja1dy
YXBwZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXh0ZW5zaW9uU2lk
ZWJhclBhbmUoaWQpKTsKLSAgICAgICAgfQotICAgICAgICBleHRlbnNpb25TZXJ2ZXIuc2VuZFJl
cXVlc3QocmVxdWVzdCwgY2FsbGJhY2sgJiYgY2FsbGJhY2tXcmFwcGVyKTsKLSAgICB9LAotCi0g
ICAgX19wcm90b19fOiBFeHRlbnNpb25WaWV3SW1wbC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtQYW5lbFdpdGhTaWRlYmFyfQotICovCi1mdW5jdGlv
biBFbGVtZW50c1BhbmVsKCkKLXsKLSAgICB2YXIgaWQgPSAiZWxlbWVudHMiOwotICAgIFBhbmVs
V2l0aFNpZGViYXIuY2FsbCh0aGlzLCBpZCk7Ci0gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQg
PSBuZXcgRXZlbnRTaW5rKGV2ZW50cy5FbGVtZW50c1BhbmVsT2JqZWN0U2VsZWN0ZWQpOwotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge0V4dGVuc2lvblZpZXdJbXBsfQot
ICovCi1mdW5jdGlvbiBFeHRlbnNpb25QYW5lbEltcGwoaWQpCi17Ci0gICAgRXh0ZW5zaW9uVmll
d0ltcGwuY2FsbCh0aGlzLCBpZCk7Ci0gICAgdGhpcy5vblNlYXJjaCA9IG5ldyBFdmVudFNpbmso
ZXZlbnRzLlBhbmVsU2VhcmNoICsgaWQpOwotfQotCi1FeHRlbnNpb25QYW5lbEltcGwucHJvdG90
eXBlID0gewotICAgIGNyZWF0ZVN0YXR1c0JhckJ1dHRvbjogZnVuY3Rpb24oaWNvblBhdGgsIHRv
b2x0aXBUZXh0LCBkaXNhYmxlZCkKLSAgICB7Ci0gICAgICAgIHZhciBpZCA9ICJidXR0b24tIiAr
IGV4dGVuc2lvblNlcnZlci5uZXh0T2JqZWN0SWQoKTsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSB7
Ci0gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kcy5DcmVhdGVTdGF0dXNCYXJCdXR0b24sCi0g
ICAgICAgICAgICBwYW5lbDogdGhpcy5faWQsCi0gICAgICAgICAgICBpZDogaWQsCi0gICAgICAg
ICAgICBpY29uOiBpY29uUGF0aCwKLSAgICAgICAgICAgIHRvb2x0aXA6IHRvb2x0aXBUZXh0LAot
ICAgICAgICAgICAgZGlzYWJsZWQ6ICEhZGlzYWJsZWQKLSAgICAgICAgfTsKLSAgICAgICAgZXh0
ZW5zaW9uU2VydmVyLnNlbmRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICByZXR1cm4gbmV3IEJ1
dHRvbihpZCk7Ci0gICAgfSwKLQotICAgIHNob3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICghdXNlckFjdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcmVx
dWVzdCA9IHsKLSAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmRzLlNob3dQYW5lbCwKLSAgICAg
ICAgICAgIGlkOiB0aGlzLl9pZAotICAgICAgICB9OwotICAgICAgICBleHRlbnNpb25TZXJ2ZXIu
c2VuZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogRXh0ZW5zaW9u
Vmlld0ltcGwucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7RXh0ZW5zaW9uVmlld0ltcGx9Ci0gKi8KLWZ1bmN0aW9uIEV4dGVuc2lvblNpZGViYXJQYW5l
SW1wbChpZCkKLXsKLSAgICBFeHRlbnNpb25WaWV3SW1wbC5jYWxsKHRoaXMsIGlkKTsKLX0KLQot
RXh0ZW5zaW9uU2lkZWJhclBhbmVJbXBsLnByb3RvdHlwZSA9IHsKLSAgICBzZXRIZWlnaHQ6IGZ1
bmN0aW9uKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblNlcnZlci5zZW5kUmVxdWVz
dCh7IGNvbW1hbmQ6IGNvbW1hbmRzLlNldFNpZGViYXJIZWlnaHQsIGlkOiB0aGlzLl9pZCwgaGVp
Z2h0OiBoZWlnaHQgfSk7Ci0gICAgfSwKLQotICAgIHNldEV4cHJlc3Npb246IGZ1bmN0aW9uKGV4
cHJlc3Npb24sIHJvb3RUaXRsZSwgZXZhbHVhdGVPcHRpb25zKQotICAgIHsKLSAgICAgICAgdmFy
IHJlcXVlc3QgPSB7Ci0gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kcy5TZXRTaWRlYmFyQ29u
dGVudCwKLSAgICAgICAgICAgIGlkOiB0aGlzLl9pZCwKLSAgICAgICAgICAgIGV4cHJlc3Npb246
IGV4cHJlc3Npb24sCi0gICAgICAgICAgICByb290VGl0bGU6IHJvb3RUaXRsZSwKLSAgICAgICAg
ICAgIGV2YWx1YXRlT25QYWdlOiB0cnVlLAotICAgICAgICB9OwotICAgICAgICBpZiAodHlwZW9m
IGV2YWx1YXRlT3B0aW9ucyA9PT0gIm9iamVjdCIpCi0gICAgICAgICAgICByZXF1ZXN0LmV2YWx1
YXRlT3B0aW9ucyA9IGV2YWx1YXRlT3B0aW9uczsKLSAgICAgICAgZXh0ZW5zaW9uU2VydmVyLnNl
bmRSZXF1ZXN0KHJlcXVlc3QsIGV4dHJhY3RDYWxsYmFja0FyZ3VtZW50KGFyZ3VtZW50cykpOwot
ICAgIH0sCi0KLSAgICBzZXRPYmplY3Q6IGZ1bmN0aW9uKGpzb25PYmplY3QsIHJvb3RUaXRsZSwg
Y2FsbGJhY2spCi0gICAgewotICAgICAgICBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QoeyBj
b21tYW5kOiBjb21tYW5kcy5TZXRTaWRlYmFyQ29udGVudCwgaWQ6IHRoaXMuX2lkLCBleHByZXNz
aW9uOiBqc29uT2JqZWN0LCByb290VGl0bGU6IHJvb3RUaXRsZSB9LCBjYWxsYmFjayk7Ci0gICAg
fSwKLQotICAgIHNldFBhZ2U6IGZ1bmN0aW9uKHBhZ2UpCi0gICAgewotICAgICAgICBleHRlbnNp
b25TZXJ2ZXIuc2VuZFJlcXVlc3QoeyBjb21tYW5kOiBjb21tYW5kcy5TZXRTaWRlYmFyUGFnZSwg
aWQ6IHRoaXMuX2lkLCBwYWdlOiBwYWdlIH0pOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqLwotZnVuY3Rpb24gQnV0dG9uSW1wbChpZCkKLXsKLSAgICB0aGlzLl9pZCA9IGlk
OwotICAgIHRoaXMub25DbGlja2VkID0gbmV3IEV2ZW50U2luayhldmVudHMuQnV0dG9uQ2xpY2tl
ZCArIGlkKTsKLX0KLQotQnV0dG9uSW1wbC5wcm90b3R5cGUgPSB7Ci0gICAgdXBkYXRlOiBmdW5j
dGlvbihpY29uUGF0aCwgdG9vbHRpcFRleHQsIGRpc2FibGVkKQotICAgIHsKLSAgICAgICAgdmFy
IHJlcXVlc3QgPSB7Ci0gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kcy5VcGRhdGVCdXR0b24s
Ci0gICAgICAgICAgICBpZDogdGhpcy5faWQsCi0gICAgICAgICAgICBpY29uOiBpY29uUGF0aCwK
LSAgICAgICAgICAgIHRvb2x0aXA6IHRvb2x0aXBUZXh0LAotICAgICAgICAgICAgZGlzYWJsZWQ6
ICEhZGlzYWJsZWQKLSAgICAgICAgfTsKLSAgICAgICAgZXh0ZW5zaW9uU2VydmVyLnNlbmRSZXF1
ZXN0KHJlcXVlc3QpOwotICAgIH0KLX07Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1
bmN0aW9uIEF1ZGl0cygpCi17Ci19Ci0KLUF1ZGl0cy5wcm90b3R5cGUgPSB7Ci0gICAgYWRkQ2F0
ZWdvcnk6IGZ1bmN0aW9uKGRpc3BsYXlOYW1lLCByZXN1bHRDb3VudCkKLSAgICB7Ci0gICAgICAg
IHZhciBpZCA9ICJleHRlbnNpb24tYXVkaXQtY2F0ZWdvcnktIiArIGV4dGVuc2lvblNlcnZlci5u
ZXh0T2JqZWN0SWQoKTsKLSAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRDb3VudCAhPT0gInVuZGVm
aW5lZCIpCi0gICAgICAgICAgICBjb25zb2xlLndhcm4oIlBhc3NpbmcgcmVzdWx0Q291bnQgdG8g
YXVkaXRzLmFkZENhdGVnb3J5KCkgaXMgZGVwcmVjYXRlZC4gVXNlIEF1ZGl0UmVzdWx0LnVwZGF0
ZVByb2dyZXNzKCkgaW5zdGVhZC4iKTsKLSAgICAgICAgZXh0ZW5zaW9uU2VydmVyLnNlbmRSZXF1
ZXN0KHsgY29tbWFuZDogY29tbWFuZHMuQWRkQXVkaXRDYXRlZ29yeSwgaWQ6IGlkLCBkaXNwbGF5
TmFtZTogZGlzcGxheU5hbWUsIHJlc3VsdENvdW50OiByZXN1bHRDb3VudCB9KTsKLSAgICAgICAg
cmV0dXJuIG5ldyBBdWRpdENhdGVnb3J5KGlkKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIEF1ZGl0Q2F0ZWdvcnlJbXBsKGlkKQotewotICAgIGZ1bmN0
aW9uIGRpc3BhdGNoQXVkaXRFdmVudChyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgdmFyIGF1ZGl0
UmVzdWx0ID0gbmV3IEF1ZGl0UmVzdWx0KHJlcXVlc3QuYXJndW1lbnRzWzBdKTsKLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIHRoaXMuX2ZpcmUoYXVkaXRSZXN1bHQpOwotICAgICAgICB9IGNh
dGNoIChlKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJVbmNhdWdodCBleGNlcHRpb24g
aW4gZXh0ZW5zaW9uIGF1ZGl0IGV2ZW50IGhhbmRsZXI6ICIgKyBlKTsKLSAgICAgICAgICAgIGF1
ZGl0UmVzdWx0LmRvbmUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB0aGlzLl9pZCA9IGlkOwot
ICAgIHRoaXMub25BdWRpdFN0YXJ0ZWQgPSBuZXcgRXZlbnRTaW5rKGV2ZW50cy5BdWRpdFN0YXJ0
ZWQgKyBpZCwgZGlzcGF0Y2hBdWRpdEV2ZW50KTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqLwotZnVuY3Rpb24gQXVkaXRSZXN1bHRJbXBsKGlkKQotewotICAgIHRoaXMuX2lkID0gaWQ7
Ci0KLSAgICB0aGlzLmNyZWF0ZVVSTCA9IHRoaXMuX25vZGVGYWN0b3J5LmJpbmQobnVsbCwgInVy
bCIpOwotICAgIHRoaXMuY3JlYXRlU25pcHBldCA9IHRoaXMuX25vZGVGYWN0b3J5LmJpbmQobnVs
bCwgInNuaXBwZXQiKTsKLSAgICB0aGlzLmNyZWF0ZVRleHQgPSB0aGlzLl9ub2RlRmFjdG9yeS5i
aW5kKG51bGwsICJ0ZXh0Iik7Ci0gICAgdGhpcy5jcmVhdGVPYmplY3QgPSB0aGlzLl9ub2RlRmFj
dG9yeS5iaW5kKG51bGwsICJvYmplY3QiKTsKLSAgICB0aGlzLmNyZWF0ZU5vZGUgPSB0aGlzLl9u
b2RlRmFjdG9yeS5iaW5kKG51bGwsICJub2RlIik7Ci19Ci0KLUF1ZGl0UmVzdWx0SW1wbC5wcm90
b3R5cGUgPSB7Ci0gICAgYWRkUmVzdWx0OiBmdW5jdGlvbihkaXNwbGF5TmFtZSwgZGVzY3JpcHRp
b24sIHNldmVyaXR5LCBkZXRhaWxzKQotICAgIHsKLSAgICAgICAgLy8gc2hvcnRoYW5kIGZvciBz
cGVjaWZ5aW5nIGRldGFpbHMgZGlyZWN0bHkgaW4gYWRkUmVzdWx0KCkuCi0gICAgICAgIGlmIChk
ZXRhaWxzICYmICEoZGV0YWlscyBpbnN0YW5jZW9mIEF1ZGl0UmVzdWx0Tm9kZSkpCi0gICAgICAg
ICAgICBkZXRhaWxzID0gbmV3IEF1ZGl0UmVzdWx0Tm9kZShkZXRhaWxzIGluc3RhbmNlb2YgQXJy
YXkgPyBkZXRhaWxzIDogW2RldGFpbHNdKTsKLQotICAgICAgICB2YXIgcmVxdWVzdCA9IHsKLSAg
ICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmRzLkFkZEF1ZGl0UmVzdWx0LAotICAgICAgICAgICAg
cmVzdWx0SWQ6IHRoaXMuX2lkLAotICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1l
LAotICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgc2V2
ZXJpdHk6IHNldmVyaXR5LAotICAgICAgICAgICAgZGV0YWlsczogZGV0YWlscwotICAgICAgICB9
OwotICAgICAgICBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgfSwK
LQotICAgIGNyZWF0ZVJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBBdWRpdFJlc3VsdE5vZGUoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7
Ci0gICAgfSwKLQotICAgIHVwZGF0ZVByb2dyZXNzOiBmdW5jdGlvbih3b3JrZWQsIHRvdGFsV29y
aykKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblNlcnZlci5zZW5kUmVxdWVzdCh7IGNvbW1hbmQ6
IGNvbW1hbmRzLlVwZGF0ZUF1ZGl0UHJvZ3Jlc3MsIHJlc3VsdElkOiB0aGlzLl9pZCwgcHJvZ3Jl
c3M6IHdvcmtlZCAvIHRvdGFsV29yayB9KTsKLSAgICB9LAotCi0gICAgZG9uZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU2VydmVyLnNlbmRSZXF1ZXN0KHsgY29tbWFuZDog
Y29tbWFuZHMuU3RvcEF1ZGl0Q2F0ZWdvcnlSdW4sIHJlc3VsdElkOiB0aGlzLl9pZCB9KTsKLSAg
ICB9LAotCi0gICAgZ2V0IFNldmVyaXR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcGlQcml2
YXRlLmF1ZGl0cy5TZXZlcml0eTsKLSAgICB9LAotCi0gICAgY3JlYXRlUmVzb3VyY2VMaW5rOiBm
dW5jdGlvbih1cmwsIGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgdHlwZTogInJlc291cmNlTGluayIsCi0gICAgICAgICAgICBhcmd1bWVudHM6IFt1cmws
IGxpbmVOdW1iZXIgJiYgbGluZU51bWJlciAtIDFdCi0gICAgICAgIH07Ci0gICAgfSwKLQotICAg
IF9ub2RlRmFjdG9yeTogZnVuY3Rpb24odHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgYXJndW1lbnRzOiBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpCi0gICAgICAgIH07Ci0gICAgfQotfQotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBBdWRpdFJlc3VsdE5vZGUoY29udGVu
dHMpCi17Ci0gICAgdGhpcy5jb250ZW50cyA9IGNvbnRlbnRzOwotICAgIHRoaXMuY2hpbGRyZW4g
PSBbXTsKLSAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7Ci19Ci0KLUF1ZGl0UmVzdWx0Tm9kZS5w
cm90b3R5cGUgPSB7Ci0gICAgYWRkQ2hpbGQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZh
ciBub2RlID0gbmV3IEF1ZGl0UmVzdWx0Tm9kZShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMpKTsKLSAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKG5vZGUpOwotICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICB9Ci19OwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5j
dGlvbiBJbnNwZWN0ZWRXaW5kb3coKQotewotICAgIGZ1bmN0aW9uIGRpc3BhdGNoUmVzb3VyY2VF
dmVudChtZXNzYWdlKQotICAgIHsKLSAgICAgICAgdGhpcy5fZmlyZShuZXcgUmVzb3VyY2UobWVz
c2FnZS5hcmd1bWVudHNbMF0pKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZGlzcGF0Y2hSZXNvdXJj
ZUNvbnRlbnRFdmVudChtZXNzYWdlKQotICAgIHsKLSAgICAgICAgdGhpcy5fZmlyZShuZXcgUmVz
b3VyY2UobWVzc2FnZS5hcmd1bWVudHNbMF0pLCBtZXNzYWdlLmFyZ3VtZW50c1sxXSk7Ci0gICAg
fQotICAgIHRoaXMub25SZXNvdXJjZUFkZGVkID0gbmV3IEV2ZW50U2luayhldmVudHMuUmVzb3Vy
Y2VBZGRlZCwgZGlzcGF0Y2hSZXNvdXJjZUV2ZW50KTsKLSAgICB0aGlzLm9uUmVzb3VyY2VDb250
ZW50Q29tbWl0dGVkID0gbmV3IEV2ZW50U2luayhldmVudHMuUmVzb3VyY2VDb250ZW50Q29tbWl0
dGVkLCBkaXNwYXRjaFJlc291cmNlQ29udGVudEV2ZW50KTsKLX0KLQotSW5zcGVjdGVkV2luZG93
LnByb3RvdHlwZSA9IHsKLSAgICByZWxvYWQ6IGZ1bmN0aW9uKG9wdGlvbnNPclVzZXJBZ2VudCkK
LSAgICB7Ci0gICAgICAgIHZhciBvcHRpb25zID0gbnVsbDsKLSAgICAgICAgaWYgKHR5cGVvZiBv
cHRpb25zT3JVc2VyQWdlbnQgPT09ICJvYmplY3QiKQotICAgICAgICAgICAgb3B0aW9ucyA9IG9w
dGlvbnNPclVzZXJBZ2VudDsKLSAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnNPclVzZXJB
Z2VudCA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgIG9wdGlvbnMgPSB7IHVzZXJBZ2VudDog
b3B0aW9uc09yVXNlckFnZW50IH07Ci0gICAgICAgICAgICBjb25zb2xlLndhcm4oIlBhc3Npbmcg
dXNlckFnZW50IGFzIHN0cmluZyBwYXJhbWV0ZXIgdG8gaW5zcGVjdGVkV2luZG93LnJlbG9hZCgp
IGlzIGRlcHJlY2F0ZWQuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgaW5zcGVj
dGVkV2luZG93LnJlbG9hZCh7IHVzZXJBZ2VudDogdmFsdWV9KSBpbnN0ZWFkLiIpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QoeyBjb21tYW5k
OiBjb21tYW5kcy5SZWxvYWQsIG9wdGlvbnM6IG9wdGlvbnMgfSk7Ci0gICAgfSwKLQotICAgIGV2
YWw6IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGV2YWx1YXRlT3B0aW9ucykKLSAgICB7Ci0gICAgICAg
IHZhciBjYWxsYmFjayA9IGV4dHJhY3RDYWxsYmFja0FyZ3VtZW50KGFyZ3VtZW50cyk7Ci0gICAg
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3JhcHBlcihyZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChyZXN1bHQuaXNFcnJvciB8fCByZXN1bHQuaXNFeGNlcHRpb24pCi0gICAgICAgICAg
ICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCByZXN1bHQpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdC52YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
dmFyIHJlcXVlc3QgPSB7Ci0gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kcy5FdmFsdWF0ZU9u
SW5zcGVjdGVkUGFnZSwKLSAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24KLSAgICAg
ICAgfTsKLSAgICAgICAgaWYgKHR5cGVvZiBldmFsdWF0ZU9wdGlvbnMgPT09ICJvYmplY3QiKQot
ICAgICAgICAgICAgcmVxdWVzdC5ldmFsdWF0ZU9wdGlvbnMgPSBldmFsdWF0ZU9wdGlvbnM7Ci0g
ICAgICAgIHJldHVybiBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QocmVxdWVzdCwgY2FsbGJh
Y2sgJiYgY2FsbGJhY2tXcmFwcGVyKTsKLSAgICB9LAotCi0gICAgZ2V0UmVzb3VyY2VzOiBmdW5j
dGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHdyYXBSZXNvdXJjZShyZXNv
dXJjZURhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2UocmVz
b3VyY2VEYXRhKTsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBjYWxsYmFja1dyYXBwZXIo
cmVzb3VyY2VzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXNvdXJjZXMubWFw
KHdyYXBSZXNvdXJjZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBleHRlbnNpb25TZXJ2
ZXIuc2VuZFJlcXVlc3QoeyBjb21tYW5kOiBjb21tYW5kcy5HZXRQYWdlUmVzb3VyY2VzIH0sIGNh
bGxiYWNrICYmIGNhbGxiYWNrV3JhcHBlcik7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICovCi1mdW5jdGlvbiBSZXNvdXJjZUltcGwocmVzb3VyY2VEYXRhKQotewotICAgIHRo
aXMuX3VybCA9IHJlc291cmNlRGF0YS51cmwKLSAgICB0aGlzLl90eXBlID0gcmVzb3VyY2VEYXRh
LnR5cGU7Ci19Ci0KLVJlc291cmNlSW1wbC5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IHVybCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdXJsOwotICAgIH0sCi0KLSAgICBnZXQgdHlwZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKLSAgICB9LAotCi0gICAgZ2V0Q29u
dGVudDogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICBmdW5jdGlvbiBjYWxsYmFj
a1dyYXBwZXIocmVzcG9uc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3Bv
bnNlLmNvbnRlbnQsIHJlc3BvbnNlLmVuY29kaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QoeyBjb21tYW5kOiBjb21tYW5kcy5HZXRS
ZXNvdXJjZUNvbnRlbnQsIHVybDogdGhpcy5fdXJsIH0sIGNhbGxiYWNrICYmIGNhbGxiYWNrV3Jh
cHBlcik7Ci0gICAgfSwKLQotICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQsIGNvbW1p
dCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICByZXR1cm4gZXh0ZW5zaW9uU2VydmVyLnNlbmRS
ZXF1ZXN0KHsgY29tbWFuZDogY29tbWFuZHMuU2V0UmVzb3VyY2VDb250ZW50LCB1cmw6IHRoaXMu
X3VybCwgY29udGVudDogY29udGVudCwgY29tbWl0OiBjb21taXQgfSwgY2FsbGJhY2spOwotICAg
IH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gVGltZWxpbmVJbXBs
KCkKLXsKLSAgICB0aGlzLm9uRXZlbnRSZWNvcmRlZCA9IG5ldyBFdmVudFNpbmsoZXZlbnRzLlRp
bWVsaW5lRXZlbnRSZWNvcmRlZCk7Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1
bmN0aW9uIEV4dGVuc2lvblNlcnZlckNsaWVudCgpCi17Ci0gICAgdGhpcy5fY2FsbGJhY2tzID0g
e307Ci0gICAgdGhpcy5faGFuZGxlcnMgPSB7fTsKLSAgICB0aGlzLl9sYXN0UmVxdWVzdElkID0g
MDsKLSAgICB0aGlzLl9sYXN0T2JqZWN0SWQgPSAwOwotCi0gICAgdGhpcy5yZWdpc3RlckhhbmRs
ZXIoImNhbGxiYWNrIiwgdGhpcy5fb25DYWxsYmFjay5iaW5kKHRoaXMpKTsKLQotICAgIHZhciBj
aGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7Ci0gICAgdGhpcy5fcG9ydCA9IGNoYW5uZWwu
cG9ydDE7Ci0gICAgdGhpcy5fcG9ydC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgdGhpcy5f
b25NZXNzYWdlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9wb3J0LnN0YXJ0KCk7Ci0K
LSAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKCJyZWdpc3RlckV4dGVuc2lvbiIsIFsgY2hh
bm5lbC5wb3J0MiBdLCAiKiIpOwotfQotCi1FeHRlbnNpb25TZXJ2ZXJDbGllbnQucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKT19IGNhbGxiYWNrCi0gICAg
ICovCi0gICAgc2VuZFJlcXVlc3Q6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNhbGxiYWNrKQotICAgIHsK
LSAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAg
IG1lc3NhZ2UucmVxdWVzdElkID0gdGhpcy5fcmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjayk7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9wb3J0LnBvc3RNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0sCi0K
LSAgICBoYXNIYW5kbGVyOiBmdW5jdGlvbihjb21tYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJu
ICEhdGhpcy5faGFuZGxlcnNbY29tbWFuZF07Ci0gICAgfSwKLQotICAgIHJlZ2lzdGVySGFuZGxl
cjogZnVuY3Rpb24oY29tbWFuZCwgaGFuZGxlcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2hhbmRs
ZXJzW2NvbW1hbmRdID0gaGFuZGxlcjsKLSAgICB9LAotCi0gICAgdW5yZWdpc3RlckhhbmRsZXI6
IGZ1bmN0aW9uKGNvbW1hbmQpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5faGFuZGxlcnNb
Y29tbWFuZF07Ci0gICAgfSwKLQotICAgIG5leHRPYmplY3RJZDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0SWQgKyAiXyIgKyArK3RoaXMuX2xhc3RPYmpl
Y3RJZDsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyQ2FsbGJhY2s6IGZ1bmN0aW9uKGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgdmFyIGlkID0gKyt0aGlzLl9sYXN0UmVxdWVzdElkOwotICAgICAg
ICB0aGlzLl9jYWxsYmFja3NbaWRdID0gY2FsbGJhY2s7Ci0gICAgICAgIHJldHVybiBpZDsKLSAg
ICB9LAotCi0gICAgX29uQ2FsbGJhY2s6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAgICAg
ICBpZiAocmVxdWVzdC5yZXF1ZXN0SWQgaW4gdGhpcy5fY2FsbGJhY2tzKSB7Ci0gICAgICAgICAg
ICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbcmVxdWVzdC5yZXF1ZXN0SWRdOwotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tyZXF1ZXN0LnJlcXVlc3RJZF07Ci0gICAg
ICAgICAgICBjYWxsYmFjayhyZXF1ZXN0LnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgX29uTWVzc2FnZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcmVxdWVz
dCA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5faGFuZGxlcnNbcmVx
dWVzdC5jb21tYW5kXTsKLSAgICAgICAgaWYgKGhhbmRsZXIpCi0gICAgICAgICAgICBoYW5kbGVy
LmNhbGwodGhpcywgcmVxdWVzdCk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBwb3B1bGF0ZUludGVy
ZmFjZUNsYXNzKGludGVyZmFjZSwgaW1wbGVtZW50YXRpb24pCi17Ci0gICAgZm9yICh2YXIgbWVt
YmVyIGluIGltcGxlbWVudGF0aW9uKSB7Ci0gICAgICAgIGlmIChtZW1iZXIuY2hhckF0KDApID09
PSAiXyIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBu
dWxsOwotICAgICAgICAvLyBUcmF2ZXJzZSBwcm90b3R5cGUgY2hhaW4gdW50aWwgd2UgZmluZCB0
aGUgb3duZXIuCi0gICAgICAgIGZvciAodmFyIG93bmVyID0gaW1wbGVtZW50YXRpb247IG93bmVy
ICYmICFkZXNjcmlwdG9yOyBvd25lciA9IG93bmVyLl9fcHJvdG9fXykKLSAgICAgICAgICAgIGRl
c2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG93bmVyLCBtZW1iZXIp
OwotICAgICAgICBpZiAoIWRlc2NyaXB0b3IpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSAiZnVuY3Rpb24iKQotICAgICAgICAg
ICAgaW50ZXJmYWNlW21lbWJlcl0gPSBkZXNjcmlwdG9yLnZhbHVlLmJpbmQoaW1wbGVtZW50YXRp
b24pOwotICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGVzY3JpcHRvci5nZXQgPT09ICJmdW5jdGlv
biIpCi0gICAgICAgICAgICBpbnRlcmZhY2UuX19kZWZpbmVHZXR0ZXJfXyhtZW1iZXIsIGRlc2Ny
aXB0b3IuZ2V0LmJpbmQoaW1wbGVtZW50YXRpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVyZmFjZSwgbWVtYmVyLCBkZXNjcmlwdG9yKTsK
LSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGRlY2xhcmVJbnRlcmZhY2VDbGFzcyhpbXBsQ29uc3RydWN0
b3IpCi17Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBpbXBsID0g
eyBfX3Byb3RvX186IGltcGxDb25zdHJ1Y3Rvci5wcm90b3R5cGUgfTsKLSAgICAgICAgaW1wbENv
bnN0cnVjdG9yLmFwcGx5KGltcGwsIGFyZ3VtZW50cyk7Ci0gICAgICAgIHBvcHVsYXRlSW50ZXJm
YWNlQ2xhc3ModGhpcywgaW1wbCk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBkZWZpbmVEZXByZWNh
dGVkUHJvcGVydHkob2JqZWN0LCBjbGFzc05hbWUsIG9sZE5hbWUsIG5ld05hbWUpCi17Ci0gICAg
dmFyIHdhcm5pbmdHaXZlbiA9IGZhbHNlOwotICAgIGZ1bmN0aW9uIGdldHRlcigpCi0gICAgewot
ICAgICAgICBpZiAoIXdhcm5pbmdHaXZlbikgewotICAgICAgICAgICAgY29uc29sZS53YXJuKGNs
YXNzTmFtZSArICIuIiArIG9sZE5hbWUgKyAiIGlzIGRlcHJlY2F0ZWQuIFVzZSAiICsgY2xhc3NO
YW1lICsgIi4iICsgbmV3TmFtZSArICIgaW5zdGVhZCIpOwotICAgICAgICAgICAgd2FybmluZ0dp
dmVuID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb2JqZWN0W25ld05hbWVdOwot
ICAgIH0KLSAgICBvYmplY3QuX19kZWZpbmVHZXR0ZXJfXyhvbGROYW1lLCBnZXR0ZXIpOwotfQot
Ci1mdW5jdGlvbiBleHRyYWN0Q2FsbGJhY2tBcmd1bWVudChhcmdzKQotewotICAgIHZhciBsYXN0
QXJndW1lbnQgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07Ci0gICAgcmV0dXJuIHR5cGVvZiBsYXN0
QXJndW1lbnQgPT09ICJmdW5jdGlvbiIgPyBsYXN0QXJndW1lbnQgOiB1bmRlZmluZWQ7Ci19Ci0K
LXZhciBBdWRpdENhdGVnb3J5ID0gZGVjbGFyZUludGVyZmFjZUNsYXNzKEF1ZGl0Q2F0ZWdvcnlJ
bXBsKTsKLXZhciBBdWRpdFJlc3VsdCA9IGRlY2xhcmVJbnRlcmZhY2VDbGFzcyhBdWRpdFJlc3Vs
dEltcGwpOwotdmFyIEJ1dHRvbiA9IGRlY2xhcmVJbnRlcmZhY2VDbGFzcyhCdXR0b25JbXBsKTsK
LXZhciBFdmVudFNpbmsgPSBkZWNsYXJlSW50ZXJmYWNlQ2xhc3MoRXZlbnRTaW5rSW1wbCk7Ci12
YXIgRXh0ZW5zaW9uUGFuZWwgPSBkZWNsYXJlSW50ZXJmYWNlQ2xhc3MoRXh0ZW5zaW9uUGFuZWxJ
bXBsKTsKLXZhciBFeHRlbnNpb25TaWRlYmFyUGFuZSA9IGRlY2xhcmVJbnRlcmZhY2VDbGFzcyhF
eHRlbnNpb25TaWRlYmFyUGFuZUltcGwpOwotdmFyIFBhbmVsV2l0aFNpZGViYXIgPSBkZWNsYXJl
SW50ZXJmYWNlQ2xhc3MoUGFuZWxXaXRoU2lkZWJhckltcGwpOwotdmFyIFJlcXVlc3QgPSBkZWNs
YXJlSW50ZXJmYWNlQ2xhc3MoUmVxdWVzdEltcGwpOwotdmFyIFJlc291cmNlID0gZGVjbGFyZUlu
dGVyZmFjZUNsYXNzKFJlc291cmNlSW1wbCk7Ci12YXIgVGltZWxpbmUgPSBkZWNsYXJlSW50ZXJm
YWNlQ2xhc3MoVGltZWxpbmVJbXBsKTsKLQotLy8gZXh0ZW5zaW9uU2VydmVyIGlzIGEgY2xvc3Vy
ZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBnbHVlIGJlbG93IC0tIG1ha2Ugc3VyZSB3ZSBmYWls
IGlmIGl0J3Mgbm90IHRoZXJlLgotaWYgKCFleHRlbnNpb25TZXJ2ZXIpCi0gICAgZXh0ZW5zaW9u
U2VydmVyID0gbmV3IEV4dGVuc2lvblNlcnZlckNsaWVudCgpOwotCi1yZXR1cm4gbmV3IEluc3Bl
Y3RvckV4dGVuc2lvbkFQSSgpOwotfQotCi0vLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uOyBwbGF0
Zm9ybXMgd2lsbCBvdmVycmlkZS4KLWZ1bmN0aW9uIGJ1aWxkUGxhdGZvcm1FeHRlbnNpb25BUEko
ZXh0ZW5zaW9uSW5mbykKLXsKLSAgICBmdW5jdGlvbiBwbGF0Zm9ybUV4dGVuc2lvbkFQSShjb3Jl
QVBJKQotICAgIHsKLSAgICAgICAgd2luZG93LndlYkluc3BlY3RvciA9IGNvcmVBUEk7Ci0gICAg
fQotICAgIHJldHVybiBwbGF0Zm9ybUV4dGVuc2lvbkFQSS50b1N0cmluZygpOwotfQotCi0KLWZ1
bmN0aW9uIGJ1aWxkRXh0ZW5zaW9uQVBJSW5qZWN0ZWRTY3JpcHQoZXh0ZW5zaW9uSW5mbykKLXsK
LSAgICByZXR1cm4gIihmdW5jdGlvbihpbmplY3RlZFNjcmlwdElkKXsgIiArCi0gICAgICAgICJ2
YXIgZXh0ZW5zaW9uU2VydmVyOyIgKwotICAgICAgICBkZWZpbmVDb21tb25FeHRlbnNpb25TeW1i
b2xzLnRvU3RyaW5nKCkgKyAiOyIgKwotICAgICAgICBpbmplY3RlZEV4dGVuc2lvbkFQSS50b1N0
cmluZygpICsgIjsiICsKLSAgICAgICAgYnVpbGRQbGF0Zm9ybUV4dGVuc2lvbkFQSShleHRlbnNp
b25JbmZvKSArICI7IiArCi0gICAgICAgICJwbGF0Zm9ybUV4dGVuc2lvbkFQSShpbmplY3RlZEV4
dGVuc2lvbkFQSShpbmplY3RlZFNjcmlwdElkKSk7IiArCi0gICAgICAgICJyZXR1cm4ge307IiAr
Ci0gICAgICAgICJ9KSI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0V4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnkuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRjNjkyYzcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25BdWRpdENhdGVnb3J5LmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMjE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5BdWRpdENhdGVnb3J5fQotICogQHBhcmFtIHtzdHJpbmd9IGV4dGVuc2lvbk9yaWdp
bgotICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGxheU5hbWUK
LSAqIEBwYXJhbSB7bnVtYmVyPX0gcnVsZUNvdW50Ci0gKi8KLVdlYkluc3BlY3Rvci5FeHRlbnNp
b25BdWRpdENhdGVnb3J5ID0gZnVuY3Rpb24oZXh0ZW5zaW9uT3JpZ2luLCBpZCwgZGlzcGxheU5h
bWUsIHJ1bGVDb3VudCkKLXsKLSAgICB0aGlzLl9leHRlbnNpb25PcmlnaW4gPSBleHRlbnNpb25P
cmlnaW47Ci0gICAgdGhpcy5faWQgPSBpZDsKLSAgICB0aGlzLl9kaXNwbGF5TmFtZSA9IGRpc3Bs
YXlOYW1lOwotICAgIHRoaXMuX3J1bGVDb3VudCAgPSBydWxlQ291bnQ7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5FeHRlbnNpb25BdWRpdENhdGVnb3J5LnByb3RvdHlwZSA9IHsKLSAgICAvLyBBdWRpdENh
dGVnb3J5IGludGVyZmFjZQotICAgIGdldCBpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5faWQ7Ci0gICAgfSwKLQotICAgIGdldCBkaXNwbGF5TmFtZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fZGlzcGxheU5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7QXJyYXkuPFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gICAgICog
QHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0KX0gcnVsZVJlc3Vs
dENhbGxiYWNrCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYXRlZ29yeURvbmVDYWxsYmFj
awotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2dyZXNzfSBwcm9ncmVzcwotICAgICAq
LwotICAgIHJ1bjogZnVuY3Rpb24ocmVxdWVzdHMsIHJ1bGVSZXN1bHRDYWxsYmFjaywgY2F0ZWdv
cnlEb25lQ2FsbGJhY2ssIHByb2dyZXNzKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdHMgPSBu
ZXcgV2ViSW5zcGVjdG9yLkV4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnlSZXN1bHRzKHRoaXMsIHJ1bGVS
ZXN1bHRDYWxsYmFjaywgY2F0ZWdvcnlEb25lQ2FsbGJhY2ssIHByb2dyZXNzKTsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmV4dGVuc2lvblNlcnZlci5zdGFydEF1ZGl0UnVuKHRoaXMsIHJlc3VsdHMp
OwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkV4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnl9IGNhdGVnb3J5Ci0gKiBAcGFyYW0ge2Z1bmN0aW9u
KFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQpfSBydWxlUmVzdWx0Q2FsbGJhY2sKLSAqIEBw
YXJhbSB7ZnVuY3Rpb24oKX0gY2F0ZWdvcnlEb25lQ2FsbGJhY2sKLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlByb2dyZXNzfSBwcm9ncmVzcwotICovCi1XZWJJbnNwZWN0b3IuRXh0ZW5zaW9uQXVk
aXRDYXRlZ29yeVJlc3VsdHMgPSBmdW5jdGlvbihjYXRlZ29yeSwgcnVsZVJlc3VsdENhbGxiYWNr
LCBjYXRlZ29yeURvbmVDYWxsYmFjaywgcHJvZ3Jlc3MpCi17Ci0gICAgdGhpcy5fY2F0ZWdvcnkg
PSBjYXRlZ29yeTsKLSAgICB0aGlzLl9ydWxlUmVzdWx0Q2FsbGJhY2sgPSBydWxlUmVzdWx0Q2Fs
bGJhY2s7Ci0gICAgdGhpcy5fY2F0ZWdvcnlEb25lQ2FsbGJhY2sgPSBjYXRlZ29yeURvbmVDYWxs
YmFjazsKLSAgICB0aGlzLl9wcm9ncmVzcyA9IHByb2dyZXNzOwotICAgIHRoaXMuX3Byb2dyZXNz
LnNldFRvdGFsV29yaygxKTsKLSAgICB0aGlzLl9leHBlY3RlZFJlc3VsdHMgPSBjYXRlZ29yeS5f
cnVsZUNvdW50OwotICAgIHRoaXMuX2FjdHVhbFJlc3VsdHMgPSAwOwotCi0gICAgdGhpcy5pZCA9
IGNhdGVnb3J5LmlkICsgIi0iICsgKytXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uQXVkaXRDYXRlZ29y
eVJlc3VsdHMuX2xhc3RJZDsKLX0KLQotV2ViSW5zcGVjdG9yLkV4dGVuc2lvbkF1ZGl0Q2F0ZWdv
cnlSZXN1bHRzLnByb3RvdHlwZSA9IHsKLSAgICBkb25lOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLnN0b3BBdWRpdFJ1bih0aGlzKTsKLSAg
ICAgICAgdGhpcy5fcHJvZ3Jlc3MuZG9uZSgpOwotICAgICAgICB0aGlzLl9jYXRlZ29yeURvbmVD
YWxsYmFjaygpOwotICAgIH0sCi0KLSAgICBhZGRSZXN1bHQ6IGZ1bmN0aW9uKGRpc3BsYXlOYW1l
LCBkZXNjcmlwdGlvbiwgc2V2ZXJpdHksIGRldGFpbHMpCi0gICAgewotICAgICAgICB2YXIgcmVz
dWx0ID0gbmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQoZGlzcGxheU5hbWUpOwotICAg
ICAgICByZXN1bHQuYWRkQ2hpbGQoZGVzY3JpcHRpb24pOwotICAgICAgICByZXN1bHQuc2V2ZXJp
dHkgPSBzZXZlcml0eTsKLSAgICAgICAgaWYgKGRldGFpbHMpCi0gICAgICAgICAgICB0aGlzLl9h
ZGROb2RlKHJlc3VsdCwgZGV0YWlscyk7Ci0gICAgICAgIHRoaXMuX2FkZFJlc3VsdChyZXN1bHQp
OwotICAgIH0sCi0KLSAgICBfYWRkTm9kZTogZnVuY3Rpb24ocGFyZW50LCBub2RlKQotICAgIHsK
LSAgICAgICAgdmFyIGNvbnRlbnRzID0gV2ViSW5zcGVjdG9yLmF1ZGl0Rm9ybWF0dGVycy5wYXJ0
aWFsbHlBcHBseShXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uQXVkaXRGb3JtYXR0ZXJzLCB0aGlzLCBu
b2RlLmNvbnRlbnRzKTsKLSAgICAgICAgdmFyIGFkZGVkTm9kZSA9IHBhcmVudC5hZGRDaGlsZChj
b250ZW50cywgbm9kZS5leHBhbmRlZCk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7Ci0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICAgICAgdGhpcy5fYWRkTm9kZShhZGRlZE5vZGUsIG5vZGUuY2hpbGRyZW5b
aV0pOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9hZGRSZXN1bHQ6IGZ1bmN0aW9uKHJlc3Vs
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3J1bGVSZXN1bHRDYWxsYmFjayhyZXN1bHQpOwotICAg
ICAgICArK3RoaXMuX2FjdHVhbFJlc3VsdHM7Ci0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXhw
ZWN0ZWRSZXN1bHRzID09PSAibnVtYmVyIikgewotICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3Mu
c2V0V29ya2VkKHRoaXMuX2FjdHVhbFJlc3VsdHMgLyB0aGlzLl9leHBlY3RlZFJlc3VsdHMpOwot
ICAgICAgICAgICAgaWYgKHRoaXMuX2FjdHVhbFJlc3VsdHMgPT09IHRoaXMuX2V4cGVjdGVkUmVz
dWx0cykKLSAgICAgICAgICAgICAgICB0aGlzLmRvbmUoKTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcHJvZ3Jlc3MKLSAgICAgKi8KLSAgICB1
cGRhdGVQcm9ncmVzczogZnVuY3Rpb24ocHJvZ3Jlc3MpCi0gICAgewotICAgICAgICB0aGlzLl9w
cm9ncmVzcy5zZXRXb3JrZWQocHJvZ3Jlc3MpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5z
cGVjdG9yLlJlbW90ZU9iamVjdCl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgZXZhbHVhdGU6IGZ1
bmN0aW9uKGV4cHJlc3Npb24sIGV2YWx1YXRlT3B0aW9ucywgY2FsbGJhY2spCi0gICAgewotICAg
ICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBlcnJvcgotICAgICAgICAgKiBA
cGFyYW0gez9SdW50aW1lQWdlbnQuUmVtb3RlT2JqZWN0fSByZXN1bHQKLSAgICAgICAgICogQHBh
cmFtIHtib29sZWFuPX0gd2FzVGhyb3duCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBv
bkV2YWx1YXRlKGVycm9yLCByZXN1bHQsIHdhc1Rocm93bikKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKHdhc1Rocm93bikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2
YXIgb2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChyZXN1bHQp
OwotICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBXZWJJ
bnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLmV2YWx1YXRlKGV4cHJlc3Npb24sIGZhbHNlLCBmYWxz
ZSwgZXZhbHVhdGVPcHRpb25zLCB0aGlzLl9jYXRlZ29yeS5fZXh0ZW5zaW9uT3JpZ2luLCBvbkV2
YWx1YXRlKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5FeHRlbnNpb25BdWRpdEZvcm1hdHRl
cnMgPSB7Ci0gICAgLyoqCi0gICAgICogQHRoaXMge1dlYkluc3BlY3Rvci5FeHRlbnNpb25BdWRp
dENhdGVnb3J5UmVzdWx0c30KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbgotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBldmFsdWF0
ZU9wdGlvbnMKLSAgICAgKi8KLSAgICBvYmplY3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24sIHRpdGxl
LCBldmFsdWF0ZU9wdGlvbnMpCi0gICAgewotICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBmdW5jdGlvbiBvbkV2YWx1YXRl
KHJlbW90ZU9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcg
V2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKHJlbW90ZU9iamVjdCwgdGl0bGUp
OwotICAgICAgICAgICAgc2VjdGlvbi5leHBhbmRlZCA9IHRydWU7Ci0gICAgICAgICAgICBzZWN0
aW9uLmVkaXRhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENo
aWxkKHNlY3Rpb24uZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5ldmFsdWF0ZShl
eHByZXNzaW9uLCBldmFsdWF0ZU9wdGlvbnMsIG9uRXZhbHVhdGUpOwotICAgICAgICByZXR1cm4g
cGFyZW50RWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHRoaXMge1dlYkluc3Bl
Y3Rvci5FeHRlbnNpb25BdWRpdENhdGVnb3J5UmVzdWx0c30KLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gZXhwcmVzc2lvbgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBldmFsdWF0ZU9wdGlvbnMKLSAg
ICAgKi8KLSAgICBub2RlOiBmdW5jdGlvbihleHByZXNzaW9uLCBldmFsdWF0ZU9wdGlvbnMpCi0g
ICAgewotICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/bnVtYmVyfSBub2RlSWQK
LSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG9uTm9kZUF2YWlsYWJsZShub2RlSWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbm9kZUlkKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIHZhciB0cmVlT3V0bGluZSA9IG5ldyBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlT3V0bGluZShmYWxzZSwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgdHJlZU91dGxp
bmUucm9vdERPTU5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7
Ci0gICAgICAgICAgICB0cmVlT3V0bGluZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm91dGxpbmUt
ZGlzY2xvc3VyZSIpOwotICAgICAgICAgICAgdHJlZU91dGxpbmUuc2V0VmlzaWJsZSh0cnVlKTsK
LSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodHJlZU91dGxpbmUuZWxlbWVu
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlJlbW90ZU9iamVjdH0gcmVtb3RlT2JqZWN0Ci0gICAgICAgICAqLwotICAgICAgICBmdW5j
dGlvbiBvbkV2YWx1YXRlKHJlbW90ZU9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVt
b3RlT2JqZWN0LnB1c2hOb2RlVG9Gcm9udGVuZChvbk5vZGVBdmFpbGFibGUpOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMuZXZhbHVhdGUoZXhwcmVzc2lvbiwgZXZhbHVhdGVPcHRpb25zLCBvbkV2
YWx1YXRlKTsKLSAgICAgICAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuRXh0ZW5zaW9uQXVkaXRDYXRlZ29yeVJlc3VsdHMuX2xhc3RJZCA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblBhbmVs
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25QYW5lbC5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUxMmFkMC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblBhbmVsLmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVu
ZHMge1dlYkluc3BlY3Rvci5QYW5lbH0KLSAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICogQHBhcmFt
IHtzdHJpbmd9IHBhZ2VVUkwKLSAqLwotV2ViSW5zcGVjdG9yLkV4dGVuc2lvblBhbmVsID0gZnVu
Y3Rpb24oaWQsIHBhZ2VVUkwpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlBhbmVsLmNhbGwodGhpcywg
aWQpOwotICAgIHRoaXMuc2V0SGlkZU9uRGV0YWNoKCk7Ci0gICAgdGhpcy5fc3RhdHVzQmFySXRl
bXMgPSBbXTsKLSAgICB2YXIgZXh0ZW5zaW9uVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRXh0ZW5z
aW9uVmlldyhpZCwgcGFnZVVSTCwgImV4dGVuc2lvbiBwYW5lbCIpOwotICAgIGV4dGVuc2lvblZp
ZXcuc2hvdyh0aGlzLmVsZW1lbnQpOwotICAgIHRoaXMuc2V0RGVmYXVsdEZvY3VzZWRFbGVtZW50
KGV4dGVuc2lvblZpZXcuZGVmYXVsdEZvY3VzZWRFbGVtZW50KCkpOwotfQotCi1XZWJJbnNwZWN0
b3IuRXh0ZW5zaW9uUGFuZWwucHJvdG90eXBlID0gewotICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVu
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5WaWV3LnBy
b3RvdHlwZS5kZWZhdWx0Rm9jdXNlZEVsZW1lbnQuY2FsbCh0aGlzKTsKLSAgICB9LAotCi0gICAg
c3RhdHVzQmFySXRlbXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9z
dGF0dXNCYXJJdGVtczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50
fSBlbGVtZW50Ci0gICAgICovCi0gICAgYWRkU3RhdHVzQmFySXRlbTogZnVuY3Rpb24oZWxlbWVu
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N0YXR1c0Jhckl0ZW1zLnB1c2goZWxlbWVudCk7Ci0g
ICAgfSwKLQotICAgIHNlYXJjaENhbmNlbGVkOiBmdW5jdGlvbihzdGFydGluZ05ld1NlYXJjaCkK
LSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5leHRlbnNpb25TZXJ2ZXIubm90aWZ5U2VhcmNo
QWN0aW9uKHRoaXMubmFtZSwgV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5wYW5lbHMuU2VhcmNo
QWN0aW9uLkNhbmNlbFNlYXJjaCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5
cGUuc2VhcmNoQ2FuY2VsZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5Ci0gICAgICovCi0gICAgcGVyZm9ybVNl
YXJjaDogZnVuY3Rpb24ocXVlcnkpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZXh0ZW5z
aW9uU2VydmVyLm5vdGlmeVNlYXJjaEFjdGlvbih0aGlzLm5hbWUsIFdlYkluc3BlY3Rvci5leHRl
bnNpb25BUEkucGFuZWxzLlNlYXJjaEFjdGlvbi5QZXJmb3JtU2VhcmNoLCBxdWVyeSk7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLm5vdGlm
eVNlYXJjaEFjdGlvbih0aGlzLm5hbWUsIFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkucGFuZWxz
LlNlYXJjaEFjdGlvbi5OZXh0U2VhcmNoUmVzdWx0KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBh
bmVsLnByb3RvdHlwZS5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0LmNhbGwodGhpcyk7Ci0gICAgfSwK
LQotICAgIGp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLm5vdGlmeVNlYXJjaEFjdGlvbih0aGlz
Lm5hbWUsIFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkucGFuZWxzLlNlYXJjaEFjdGlvbi5QcmV2
aW91c1NlYXJjaFJlc3VsdCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUu
anVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQuY2FsbCh0aGlzKTsKLSAgICB9LAotCi0gICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAqIEBwYXJhbSB7c3RyaW5nfSBpY29uVVJM
Ci0gKiBAcGFyYW0ge3N0cmluZz19IHRvb2x0aXAKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IGRpc2Fi
bGVkCi0gKi8KLVdlYkluc3BlY3Rvci5FeHRlbnNpb25CdXR0b24gPSBmdW5jdGlvbihpZCwgaWNv
blVSTCwgdG9vbHRpcCwgZGlzYWJsZWQpCi17Ci0gICAgdGhpcy5faWQgPSBpZDsKLSAgICB0aGlz
LmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKLSAgICB0aGlzLmVs
ZW1lbnQuY2xhc3NOYW1lID0gInN0YXR1cy1iYXItaXRlbSBleHRlbnNpb24iOwotICAgIHRoaXMu
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uQ2xpY2tlZC5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0gICAgdGhpcy51cGRhdGUoaWNvblVSTCwgdG9vbHRpcCwgZGlzYWJsZWQp
OwotfQotCi1XZWJJbnNwZWN0b3IuRXh0ZW5zaW9uQnV0dG9uLnByb3RvdHlwZSA9IHsKLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWNvblVSTAotICAgICAqIEBwYXJhbSB7c3RyaW5n
PX0gdG9vbHRpcAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGRpc2FibGVkCi0gICAgICovCi0g
ICAgdXBkYXRlOiBmdW5jdGlvbihpY29uVVJMLCB0b29sdGlwLCBkaXNhYmxlZCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0eXBlb2YgaWNvblVSTCA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0aGlz
LmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gInVybCgiICsgaWNvblVSTCArICIpIjsK
LSAgICAgICAgaWYgKHR5cGVvZiB0b29sdGlwID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHRo
aXMuZWxlbWVudC50aXRsZSA9IHRvb2x0aXA7Ci0gICAgICAgIGlmICh0eXBlb2YgZGlzYWJsZWQg
PT09ICJib29sZWFuIikKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5kaXNhYmxlZCA9IGRpc2Fi
bGVkOwotICAgIH0sCi0KLSAgICBfb25DbGlja2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLm5vdGlmeUJ1dHRvbkNsaWNrZWQodGhpcy5f
aWQpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuU2lkZWJhclBhbmV9Ci0gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAqIEBwYXJh
bSB7c3RyaW5nfSBpZAotICovCi1XZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2lkZWJhclBhbmUgPSBm
dW5jdGlvbih0aXRsZSwgaWQpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwo
dGhpcywgdGl0bGUpOwotICAgIHRoaXMuc2V0SGlkZU9uRGV0YWNoKCk7Ci0gICAgdGhpcy5faWQg
PSBpZDsKLX0KLQotV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNpZGViYXJQYW5lLnByb3RvdHlwZSA9
IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0Ci0gICAgICogQHBhcmFt
IHtzdHJpbmd9IHRpdGxlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nPSl9IGNhbGxi
YWNrCi0gICAgICovCi0gICAgc2V0T2JqZWN0OiBmdW5jdGlvbihvYmplY3QsIHRpdGxlLCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZU9iamVjdFByb3BlcnRpZXNWaWV3KCk7
Ci0gICAgICAgIHRoaXMuX3NldE9iamVjdChXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21M
b2NhbE9iamVjdChvYmplY3QpLCB0aXRsZSwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbgotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSB0aXRsZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZz0pfSBjYWxsYmFjawotICAg
ICAqLwotICAgIHNldEV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb24sIHRpdGxlLCBldmFs
dWF0ZU9wdGlvbnMsIHNlY3VyaXR5T3JpZ2luLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2NyZWF0ZU9iamVjdFByb3BlcnRpZXNWaWV3KCk7Ci0gICAgICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuZXh0ZW5zaW9uU2VydmVyLmV2YWx1YXRlKGV4cHJlc3Npb24sIHRydWUsIGZhbHNlLCBl
dmFsdWF0ZU9wdGlvbnMsIHNlY3VyaXR5T3JpZ2luLCB0aGlzLl9vbkV2YWx1YXRlLmJpbmQodGhp
cywgdGl0bGUsIGNhbGxiYWNrKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSB1cmwKLSAgICAgKi8KLSAgICBzZXRQYWdlOiBmdW5jdGlvbih1cmwpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fb2JqZWN0UHJvcGVydGllc1ZpZXcpIHsKLSAgICAgICAgICAgIHRo
aXMuX29iamVjdFByb3BlcnRpZXNWaWV3LmRldGFjaCgpOwotICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX29iamVjdFByb3BlcnRpZXNWaWV3OwotICAgICAgICB9Ci0gICAgICAgIGlmICh0aGlzLl9l
eHRlbnNpb25WaWV3KQotICAgICAgICAgICAgdGhpcy5fZXh0ZW5zaW9uVmlldy5kZXRhY2godHJ1
ZSk7Ci0KLSAgICAgICAgdGhpcy5fZXh0ZW5zaW9uVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRXh0
ZW5zaW9uVmlldyh0aGlzLl9pZCwgdXJsLCAiZXh0ZW5zaW9uIGZpbGwiKTsKLSAgICAgICAgdGhp
cy5fZXh0ZW5zaW9uVmlldy5zaG93KHRoaXMuYm9keUVsZW1lbnQpOwotCi0gICAgICAgIGlmICgh
dGhpcy5ib2R5RWxlbWVudC5zdHlsZS5oZWlnaHQpCi0gICAgICAgICAgICB0aGlzLnNldEhlaWdo
dCgiMTUwcHgiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGhl
aWdodAotICAgICAqLwotICAgIHNldEhlaWdodDogZnVuY3Rpb24oaGVpZ2h0KQotICAgIHsKLSAg
ICAgICAgdGhpcy5ib2R5RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oP3N0cmluZz0pfSBjYWxsYmFjawotICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9y
fSBlcnJvcgotICAgICAqIEBwYXJhbSB7UnVudGltZUFnZW50LlJlbW90ZU9iamVjdH0gcmVzdWx0
Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gd2FzVGhyb3duCi0gICAgICovCi0gICAgX29uRXZh
bHVhdGU6IGZ1bmN0aW9uKHRpdGxlLCBjYWxsYmFjaywgZXJyb3IsIHJlc3VsdCwgd2FzVGhyb3du
KQotICAgIHsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgY2FsbGJhY2soZXJyb3Iu
dG9TdHJpbmcoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3NldE9iamVjdChX
ZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHJlc3VsdCksIHRpdGxlLCBjYWxs
YmFjayk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVPYmplY3RQcm9wZXJ0aWVzVmlldzogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX29iamVjdFByb3BlcnRpZXNWaWV3KQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fZXh0ZW5zaW9uVmlldykgewotICAg
ICAgICAgICAgdGhpcy5fZXh0ZW5zaW9uVmlldy5kZXRhY2godHJ1ZSk7Ci0gICAgICAgICAgICBk
ZWxldGUgdGhpcy5fZXh0ZW5zaW9uVmlldzsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9vYmpl
Y3RQcm9wZXJ0aWVzVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uTm90aWZpZXJWaWV3
KHRoaXMuX2lkKTsKLSAgICAgICAgdGhpcy5fb2JqZWN0UHJvcGVydGllc1ZpZXcuc2hvdyh0aGlz
LmJvZHlFbGVtZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuUmVtb3RlT2JqZWN0fSBvYmplY3QKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUK
LSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmc9KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAg
ICBfc2V0T2JqZWN0OiBmdW5jdGlvbihvYmplY3QsIHRpdGxlLCBjYWxsYmFjaykKLSAgICB7Ci0g
ICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgaGFwcGVuIGlmIHNldFBhZ2UoKSB3YXMgY2FsbGVkIHdo
aWxlIHdlIHdlcmUgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbi4KLSAgICAgICAgaWYgKCF0aGlz
Ll9vYmplY3RQcm9wZXJ0aWVzVmlldykgewotICAgICAgICAgICAgY2FsbGJhY2soIm9wZXJhdGlv
biBjYW5jZWxsZWQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLl9vYmplY3RQcm9wZXJ0aWVzVmlldy5lbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAg
ICAgIHZhciBzZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlv
bihvYmplY3QsIHRpdGxlKTsKLSAgICAgICAgaWYgKCF0aXRsZSkKLSAgICAgICAgICAgIHNlY3Rp
b24uaGVhZGVyRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgc2VjdGlv
bi5leHBhbmRlZCA9IHRydWU7Ci0gICAgICAgIHNlY3Rpb24uZWRpdGFibGUgPSBmYWxzZTsKLSAg
ICAgICAgdGhpcy5fb2JqZWN0UHJvcGVydGllc1ZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZChzZWN0
aW9uLmVsZW1lbnQpOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uUmVnaXN0cnlTdHViLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25SZWdpc3RyeVN0
dWIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ODA4ODAuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25SZWdpc3RyeVN0
dWIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotaWYgKCF3aW5kb3cuSW5zcGVjdG9y
RXh0ZW5zaW9uUmVnaXN0cnkpIHsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5z
cGVjdG9yLkluc3BlY3RvckV4dGVuc2lvblJlZ2lzdHJ5U3R1YiA9IGZ1bmN0aW9uKCkKLXsKLX0K
LQotV2ViSW5zcGVjdG9yLkluc3BlY3RvckV4dGVuc2lvblJlZ2lzdHJ5U3R1Yi5wcm90b3R5cGUg
PSB7Ci0gICAgZ2V0RXh0ZW5zaW9uc0FzeW5jOiBmdW5jdGlvbigpCi0gICAgewotICAgIH0KLX0K
LQotdmFyIEluc3BlY3RvckV4dGVuc2lvblJlZ2lzdHJ5ID0gbmV3IFdlYkluc3BlY3Rvci5JbnNw
ZWN0b3JFeHRlbnNpb25SZWdpc3RyeVN0dWIoKTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZWM1ZDE2Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcworKysgL2Rldi9udWxsCkBAIC0x
LDg2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkV4dGVu
c2lvblNlcnZlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9jbGllbnRPYmplY3RzID0ge307
Ci0gICAgdGhpcy5faGFuZGxlcnMgPSB7fTsKLSAgICB0aGlzLl9zdWJzY3JpYmVycyA9IHt9Owot
ICAgIHRoaXMuX3N1YnNjcmlwdGlvblN0YXJ0SGFuZGxlcnMgPSB7fTsKLSAgICB0aGlzLl9zdWJz
Y3JpcHRpb25TdG9wSGFuZGxlcnMgPSB7fTsKLSAgICB0aGlzLl9leHRyYUhlYWRlcnMgPSB7fTsK
LSAgICB0aGlzLl9yZXF1ZXN0cyA9IHt9OwotICAgIHRoaXMuX2xhc3RSZXF1ZXN0SWQgPSAwOwot
ICAgIHRoaXMuX3JlZ2lzdGVyZWRFeHRlbnNpb25zID0ge307Ci0gICAgdGhpcy5fc3RhdHVzID0g
bmV3IFdlYkluc3BlY3Rvci5FeHRlbnNpb25TdGF0dXMoKTsKLQotICAgIHZhciBjb21tYW5kcyA9
IFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuQ29tbWFuZHM7Ci0KLSAgICB0aGlzLl9yZWdpc3Rl
ckhhbmRsZXIoY29tbWFuZHMuQWRkQXVkaXRDYXRlZ29yeSwgdGhpcy5fb25BZGRBdWRpdENhdGVn
b3J5LmJpbmQodGhpcykpOwotICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5BZGRB
dWRpdFJlc3VsdCwgdGhpcy5fb25BZGRBdWRpdFJlc3VsdC5iaW5kKHRoaXMpKTsKLSAgICB0aGlz
Ll9yZWdpc3RlckhhbmRsZXIoY29tbWFuZHMuQWRkQ29uc29sZU1lc3NhZ2UsIHRoaXMuX29uQWRk
Q29uc29sZU1lc3NhZ2UuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNv
bW1hbmRzLkFkZFJlcXVlc3RIZWFkZXJzLCB0aGlzLl9vbkFkZFJlcXVlc3RIZWFkZXJzLmJpbmQo
dGhpcykpOwotICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5DcmVhdGVQYW5lbCwg
dGhpcy5fb25DcmVhdGVQYW5lbC5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLl9yZWdpc3RlckhhbmRs
ZXIoY29tbWFuZHMuQ3JlYXRlU2lkZWJhclBhbmUsIHRoaXMuX29uQ3JlYXRlU2lkZWJhclBhbmUu
YmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNvbW1hbmRzLkNyZWF0ZVN0
YXR1c0JhckJ1dHRvbiwgdGhpcy5fb25DcmVhdGVTdGF0dXNCYXJCdXR0b24uYmluZCh0aGlzKSk7
Ci0gICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNvbW1hbmRzLkV2YWx1YXRlT25JbnNwZWN0ZWRQ
YWdlLCB0aGlzLl9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlLmJpbmQodGhpcykpOwotICAgIHRo
aXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5HZXRIQVIsIHRoaXMuX29uR2V0SEFSLmJpbmQo
dGhpcykpOwotICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5HZXRDb25zb2xlTWVz
c2FnZXMsIHRoaXMuX29uR2V0Q29uc29sZU1lc3NhZ2VzLmJpbmQodGhpcykpOwotICAgIHRoaXMu
X3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5HZXRQYWdlUmVzb3VyY2VzLCB0aGlzLl9vbkdldFBh
Z2VSZXNvdXJjZXMuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNvbW1h
bmRzLkdldFJlcXVlc3RDb250ZW50LCB0aGlzLl9vbkdldFJlcXVlc3RDb250ZW50LmJpbmQodGhp
cykpOwotICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5HZXRSZXNvdXJjZUNvbnRl
bnQsIHRoaXMuX29uR2V0UmVzb3VyY2VDb250ZW50LmJpbmQodGhpcykpOwotICAgIHRoaXMuX3Jl
Z2lzdGVySGFuZGxlcihjb21tYW5kcy5Mb2csIHRoaXMuX29uTG9nLmJpbmQodGhpcykpOwotICAg
IHRoaXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5SZWxvYWQsIHRoaXMuX29uUmVsb2FkLmJp
bmQodGhpcykpOwotICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5TZXRPcGVuUmVz
b3VyY2VIYW5kbGVyLCB0aGlzLl9vblNldE9wZW5SZXNvdXJjZUhhbmRsZXIuYmluZCh0aGlzKSk7
Ci0gICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNvbW1hbmRzLlNldFJlc291cmNlQ29udGVudCwg
dGhpcy5fb25TZXRSZXNvdXJjZUNvbnRlbnQuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fcmVnaXN0
ZXJIYW5kbGVyKGNvbW1hbmRzLlNldFNpZGViYXJIZWlnaHQsIHRoaXMuX29uU2V0U2lkZWJhckhl
aWdodC5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLl9yZWdpc3RlckhhbmRsZXIoY29tbWFuZHMuU2V0
U2lkZWJhckNvbnRlbnQsIHRoaXMuX29uU2V0U2lkZWJhckNvbnRlbnQuYmluZCh0aGlzKSk7Ci0g
ICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNvbW1hbmRzLlNldFNpZGViYXJQYWdlLCB0aGlzLl9v
blNldFNpZGViYXJQYWdlLmJpbmQodGhpcykpOwotICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcihj
b21tYW5kcy5TaG93UGFuZWwsIHRoaXMuX29uU2hvd1BhbmVsLmJpbmQodGhpcykpOwotICAgIHRo
aXMuX3JlZ2lzdGVySGFuZGxlcihjb21tYW5kcy5TdG9wQXVkaXRDYXRlZ29yeVJ1biwgdGhpcy5f
b25TdG9wQXVkaXRDYXRlZ29yeVJ1bi5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLl9yZWdpc3Rlckhh
bmRsZXIoY29tbWFuZHMuU3Vic2NyaWJlLCB0aGlzLl9vblN1YnNjcmliZS5iaW5kKHRoaXMpKTsK
LSAgICB0aGlzLl9yZWdpc3RlckhhbmRsZXIoY29tbWFuZHMuVW5zdWJzY3JpYmUsIHRoaXMuX29u
VW5zdWJzY3JpYmUuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNvbW1h
bmRzLlVwZGF0ZUJ1dHRvbiwgdGhpcy5fb25VcGRhdGVCdXR0b24uYmluZCh0aGlzKSk7Ci0gICAg
dGhpcy5fcmVnaXN0ZXJIYW5kbGVyKGNvbW1hbmRzLlVwZGF0ZUF1ZGl0UHJvZ3Jlc3MsIHRoaXMu
X29uVXBkYXRlQXVkaXRQcm9ncmVzcy5iaW5kKHRoaXMpKTsKLQotICAgIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJtZXNzYWdlIiwgdGhpcy5fb25XaW5kb3dNZXNzYWdlLmJpbmQodGhpcyksIGZh
bHNlKTsKLX0KLQotV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUgPSB7Ci0g
ICAgaGFzRXh0ZW5zaW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhT2Jq
ZWN0LmtleXModGhpcy5fcmVnaXN0ZXJlZEV4dGVuc2lvbnMpLmxlbmd0aDsKLSAgICB9LAotCi0g
ICAgbm90aWZ5U2VhcmNoQWN0aW9uOiBmdW5jdGlvbihwYW5lbElkLCBhY3Rpb24sIHNlYXJjaFN0
cmluZykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Bvc3ROb3RpZmljYXRpb24oV2ViSW5zcGVjdG9y
LmV4dGVuc2lvbkFQSS5FdmVudHMuUGFuZWxTZWFyY2ggKyBwYW5lbElkLCBhY3Rpb24sIHNlYXJj
aFN0cmluZyk7Ci0gICAgfSwKLQotICAgIG5vdGlmeVZpZXdTaG93bjogZnVuY3Rpb24oaWRlbnRp
ZmllciwgZnJhbWVJbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Bvc3ROb3RpZmljYXRpb24o
V2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5FdmVudHMuVmlld1Nob3duICsgaWRlbnRpZmllciwg
ZnJhbWVJbmRleCk7Ci0gICAgfSwKLQotICAgIG5vdGlmeVZpZXdIaWRkZW46IGZ1bmN0aW9uKGlk
ZW50aWZpZXIpCi0gICAgewotICAgICAgICB0aGlzLl9wb3N0Tm90aWZpY2F0aW9uKFdlYkluc3Bl
Y3Rvci5leHRlbnNpb25BUEkuRXZlbnRzLlZpZXdIaWRkZW4gKyBpZGVudGlmaWVyKTsKLSAgICB9
LAotCi0gICAgbm90aWZ5QnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oaWRlbnRpZmllcikKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3Bvc3ROb3RpZmljYXRpb24oV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQ
SS5FdmVudHMuQnV0dG9uQ2xpY2tlZCArIGlkZW50aWZpZXIpOwotICAgIH0sCi0KLSAgICBfaW5z
cGVjdGVkVVJMQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9y
ZXF1ZXN0cyA9IHt9OwotICAgICAgICB2YXIgdXJsID0gZXZlbnQuZGF0YTsKLSAgICAgICAgdGhp
cy5fcG9zdE5vdGlmaWNhdGlvbihXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uQVBJLkV2ZW50cy5JbnNw
ZWN0ZWRVUkxDaGFuZ2VkLCB1cmwpOwotICAgIH0sCi0KLSAgICBzdGFydEF1ZGl0UnVuOiBmdW5j
dGlvbihjYXRlZ29yeSwgYXVkaXRSdW4pCi0gICAgewotICAgICAgICB0aGlzLl9jbGllbnRPYmpl
Y3RzW2F1ZGl0UnVuLmlkXSA9IGF1ZGl0UnVuOwotICAgICAgICB0aGlzLl9wb3N0Tm90aWZpY2F0
aW9uKCJhdWRpdC1zdGFydGVkLSIgKyBjYXRlZ29yeS5pZCwgYXVkaXRSdW4uaWQpOwotICAgIH0s
Ci0KLSAgICBzdG9wQXVkaXRSdW46IGZ1bmN0aW9uKGF1ZGl0UnVuKQotICAgIHsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX2NsaWVudE9iamVjdHNbYXVkaXRSdW4uaWRdOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0gey4uLip9IHZhcmFyZwotICAgICAqLwotICAgIF9wb3N0Tm90aWZp
Y2F0aW9uOiBmdW5jdGlvbih0eXBlLCB2YXJhcmcpCi0gICAgewotICAgICAgICB2YXIgc3Vic2Ny
aWJlcnMgPSB0aGlzLl9zdWJzY3JpYmVyc1t0eXBlXTsKLSAgICAgICAgaWYgKCFzdWJzY3JpYmVy
cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSB7Ci0gICAgICAg
ICAgICBjb21tYW5kOiAibm90aWZ5LSIgKyB0eXBlLAotICAgICAgICAgICAgYXJndW1lbnRzOiBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpCi0gICAgICAgIH07Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vic2NyaWJlcnMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBzdWJzY3JpYmVyc1tpXS5wb3N0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9LAotCi0gICAg
X29uU3Vic2NyaWJlOiBmdW5jdGlvbihtZXNzYWdlLCBwb3J0KQotICAgIHsKLSAgICAgICAgdmFy
IHN1YnNjcmliZXJzID0gdGhpcy5fc3Vic2NyaWJlcnNbbWVzc2FnZS50eXBlXTsKLSAgICAgICAg
aWYgKHN1YnNjcmliZXJzKQotICAgICAgICAgICAgc3Vic2NyaWJlcnMucHVzaChwb3J0KTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVyc1ttZXNzYWdlLnR5cGVd
ID0gWyBwb3J0IF07Ci0gICAgICAgICAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uU3RhcnRIYW5k
bGVyc1ttZXNzYWdlLnR5cGVdKQotICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvblN0
YXJ0SGFuZGxlcnNbbWVzc2FnZS50eXBlXSgpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9v
blVuc3Vic2NyaWJlOiBmdW5jdGlvbihtZXNzYWdlLCBwb3J0KQotICAgIHsKLSAgICAgICAgdmFy
IHN1YnNjcmliZXJzID0gdGhpcy5fc3Vic2NyaWJlcnNbbWVzc2FnZS50eXBlXTsKLSAgICAgICAg
aWYgKCFzdWJzY3JpYmVycykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3Vic2NyaWJl
cnMucmVtb3ZlKHBvcnQpOwotICAgICAgICBpZiAoIXN1YnNjcmliZXJzLmxlbmd0aCkgewotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX3N1YnNjcmliZXJzW21lc3NhZ2UudHlwZV07Ci0gICAgICAg
ICAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uU3RvcEhhbmRsZXJzW21lc3NhZ2UudHlwZV0pCi0g
ICAgICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uU3RvcEhhbmRsZXJzW21lc3NhZ2UudHlw
ZV0oKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfb25BZGRSZXF1ZXN0SGVhZGVyczogZnVu
Y3Rpb24obWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIHZhciBpZCA9IG1lc3NhZ2UuZXh0ZW5zaW9u
SWQ7Ci0gICAgICAgIGlmICh0eXBlb2YgaWQgIT09ICJzdHJpbmciKQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3N0YXR1cy5FX0JBREFSR1RZUEUoImV4dGVuc2lvbklkIiwgdHlwZW9mIGlkLCAi
c3RyaW5nIik7Ci0gICAgICAgIHZhciBleHRlbnNpb25IZWFkZXJzID0gdGhpcy5fZXh0cmFIZWFk
ZXJzW2lkXTsKLSAgICAgICAgaWYgKCFleHRlbnNpb25IZWFkZXJzKSB7Ci0gICAgICAgICAgICBl
eHRlbnNpb25IZWFkZXJzID0ge307Ci0gICAgICAgICAgICB0aGlzLl9leHRyYUhlYWRlcnNbaWRd
ID0gZXh0ZW5zaW9uSGVhZGVyczsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBuYW1lIGlu
IG1lc3NhZ2UuaGVhZGVycykKLSAgICAgICAgICAgIGV4dGVuc2lvbkhlYWRlcnNbbmFtZV0gPSBt
ZXNzYWdlLmhlYWRlcnNbbmFtZV07Ci0gICAgICAgIHZhciBhbGxIZWFkZXJzID0gLyoqIEB0eXBl
IE5ldHdvcmtBZ2VudC5IZWFkZXJzICovICh7fSk7Ci0gICAgICAgIGZvciAodmFyIGV4dGVuc2lv
biBpbiB0aGlzLl9leHRyYUhlYWRlcnMpIHsKLSAgICAgICAgICAgIHZhciBoZWFkZXJzID0gdGhp
cy5fZXh0cmFIZWFkZXJzW2V4dGVuc2lvbl07Ci0gICAgICAgICAgICBmb3IgKG5hbWUgaW4gaGVh
ZGVycykgewotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaGVhZGVyc1tuYW1lXSA9PT0gInN0
cmluZyIpCi0gICAgICAgICAgICAgICAgICAgIGFsbEhlYWRlcnNbbmFtZV0gPSBoZWFkZXJzW25h
bWVdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIE5ldHdvcmtBZ2VudC5zZXRF
eHRyYUhUVFBIZWFkZXJzKGFsbEhlYWRlcnMpOwotICAgIH0sCi0KLSAgICBfb25DcmVhdGVQYW5l
bDogZnVuY3Rpb24obWVzc2FnZSwgcG9ydCkKLSAgICB7Ci0gICAgICAgIHZhciBpZCA9IG1lc3Nh
Z2UuaWQ7Ci0gICAgICAgIC8vIFRoZSBpZHMgYXJlIGdlbmVyYXRlZCBvbiB0aGUgY2xpZW50IEFQ
SSBzaWRlIGFuZCBtdXN0IGJlIHVuaXF1ZSwgc28gdGhlIGNoZWNrIGJlbG93Ci0gICAgICAgIC8v
IHNob3VsZG4ndCBiZSBoaXQgdW5sZXNzIHNvbWVvbmUgaXMgYnlwYXNzaW5nIHRoZSBBUEkuCi0g
ICAgICAgIGlmIChpZCBpbiB0aGlzLl9jbGllbnRPYmplY3RzIHx8IGlkIGluIFdlYkluc3BlY3Rv
ci5wYW5lbHMpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfRVhJU1RTKGlkKTsK
LQotICAgICAgICB2YXIgcGFnZSA9IHRoaXMuX2V4cGFuZFJlc291cmNlUGF0aChwb3J0Ll9leHRl
bnNpb25PcmlnaW4sIG1lc3NhZ2UucGFnZSk7Ci0gICAgICAgIHZhciBwYW5lbERlc2NyaXB0b3Ig
PSBuZXcgV2ViSW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRvcihpZCwgbWVzc2FnZS50aXRsZSwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIG5ldyBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uUGFuZWwoaWQsIHBh
Z2UpKTsKLSAgICAgICAgcGFuZWxEZXNjcmlwdG9yLnNldEljb25VUkwodGhpcy5fZXhwYW5kUmVz
b3VyY2VQYXRoKHBvcnQuX2V4dGVuc2lvbk9yaWdpbiwgbWVzc2FnZS5pY29uKSk7Ci0gICAgICAg
IHRoaXMuX2NsaWVudE9iamVjdHNbaWRdID0gcGFuZWxEZXNjcmlwdG9yLnBhbmVsKCk7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmFkZFBhbmVsKHBhbmVsRGVzY3JpcHRvcik7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuT0soKTsKLSAgICB9LAotCi0gICAgX29uU2hv
d1BhbmVsOiBmdW5jdGlvbihtZXNzYWdlKQotICAgIHsKLSAgICAgICAgLy8gTm90ZTogV2ViSW5z
cGVjdG9yLnNob3dQYW5lbCBhbHJlYWR5IHNhbml0aXplcyBpbnB1dC4KLSAgICAgICAgV2ViSW5z
cGVjdG9yLnNob3dQYW5lbChtZXNzYWdlLmlkKTsKLSAgICB9LAotCi0gICAgX29uQ3JlYXRlU3Rh
dHVzQmFyQnV0dG9uOiBmdW5jdGlvbihtZXNzYWdlLCBwb3J0KQotICAgIHsKLSAgICAgICAgdmFy
IHBhbmVsID0gdGhpcy5fY2xpZW50T2JqZWN0c1ttZXNzYWdlLnBhbmVsXTsKLSAgICAgICAgaWYg
KCFwYW5lbCB8fCAhKHBhbmVsIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblBhbmVs
KSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChtZXNzYWdlLnBh
bmVsKTsKLSAgICAgICAgdmFyIGJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uQnV0
dG9uKG1lc3NhZ2UuaWQsIHRoaXMuX2V4cGFuZFJlc291cmNlUGF0aChwb3J0Ll9leHRlbnNpb25P
cmlnaW4sIG1lc3NhZ2UuaWNvbiksIG1lc3NhZ2UudG9vbHRpcCwgbWVzc2FnZS5kaXNhYmxlZCk7
Ci0gICAgICAgIHRoaXMuX2NsaWVudE9iamVjdHNbbWVzc2FnZS5pZF0gPSBidXR0b247Ci0gICAg
ICAgIHBhbmVsLmFkZFN0YXR1c0Jhckl0ZW0oYnV0dG9uLmVsZW1lbnQpOwotICAgICAgICByZXR1
cm4gdGhpcy5fc3RhdHVzLk9LKCk7Ci0gICAgfSwKLQotICAgIF9vblVwZGF0ZUJ1dHRvbjogZnVu
Y3Rpb24obWVzc2FnZSwgcG9ydCkKLSAgICB7Ci0gICAgICAgIHZhciBidXR0b24gPSB0aGlzLl9j
bGllbnRPYmplY3RzW21lc3NhZ2UuaWRdOwotICAgICAgICBpZiAoIWJ1dHRvbiB8fCAhKGJ1dHRv
biBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5FeHRlbnNpb25CdXR0b24pKQotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3N0YXR1cy5FX05PVEZPVU5EKG1lc3NhZ2UuaWQpOwotICAgICAgICBidXR0
b24udXBkYXRlKHRoaXMuX2V4cGFuZFJlc291cmNlUGF0aChwb3J0Ll9leHRlbnNpb25PcmlnaW4s
IG1lc3NhZ2UuaWNvbiksIG1lc3NhZ2UudG9vbHRpcCwgbWVzc2FnZS5kaXNhYmxlZCk7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zdGF0dXMuT0soKTsKLSAgICB9LAotCi0gICAgX29uQ3JlYXRlU2lk
ZWJhclBhbmU6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICB2YXIgcGFuZWwgPSBX
ZWJJbnNwZWN0b3IucGFuZWwobWVzc2FnZS5wYW5lbCk7Ci0gICAgICAgIGlmICghcGFuZWwpCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfTk9URk9VTkQobWVzc2FnZS5wYW5lbCk7
Ci0gICAgICAgIGlmICghcGFuZWwuYWRkRXh0ZW5zaW9uU2lkZWJhclBhbmUpCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfTk9UU1VQUE9SVEVEKCk7Ci0gICAgICAgIHZhciBpZCA9
IG1lc3NhZ2UuaWQ7Ci0gICAgICAgIHZhciBzaWRlYmFyID0gbmV3IFdlYkluc3BlY3Rvci5FeHRl
bnNpb25TaWRlYmFyUGFuZShtZXNzYWdlLnRpdGxlLCBtZXNzYWdlLmlkKTsKLSAgICAgICAgdGhp
cy5fY2xpZW50T2JqZWN0c1tpZF0gPSBzaWRlYmFyOwotICAgICAgICBwYW5lbC5hZGRFeHRlbnNp
b25TaWRlYmFyUGFuZShpZCwgc2lkZWJhcik7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1
cy5PSygpOwotICAgIH0sCi0KLSAgICBfb25TZXRTaWRlYmFySGVpZ2h0OiBmdW5jdGlvbihtZXNz
YWdlKQotICAgIHsKLSAgICAgICAgdmFyIHNpZGViYXIgPSB0aGlzLl9jbGllbnRPYmplY3RzW21l
c3NhZ2UuaWRdOwotICAgICAgICBpZiAoIXNpZGViYXIpCi0gICAgICAgICAgICByZXR1cm4gdGhp
cy5fc3RhdHVzLkVfTk9URk9VTkQobWVzc2FnZS5pZCk7Ci0gICAgICAgIHNpZGViYXIuc2V0SGVp
Z2h0KG1lc3NhZ2UuaGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5PSygpOwot
ICAgIH0sCi0KLSAgICBfb25TZXRTaWRlYmFyQ29udGVudDogZnVuY3Rpb24obWVzc2FnZSwgcG9y
dCkKLSAgICB7Ci0gICAgICAgIHZhciBzaWRlYmFyID0gdGhpcy5fY2xpZW50T2JqZWN0c1ttZXNz
YWdlLmlkXTsKLSAgICAgICAgaWYgKCFzaWRlYmFyKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXR1cy5FX05PVEZPVU5EKG1lc3NhZ2UuaWQpOwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFj
ayhlcnJvcikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGVycm9yID8gdGhp
cy5fc3RhdHVzLkVfRkFJTEVEKGVycm9yKSA6IHRoaXMuX3N0YXR1cy5PSygpOwotICAgICAgICAg
ICAgdGhpcy5fZGlzcGF0Y2hDYWxsYmFjayhtZXNzYWdlLnJlcXVlc3RJZCwgcG9ydCwgcmVzdWx0
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWVzc2FnZS5ldmFsdWF0ZU9uUGFnZSkKLSAgICAg
ICAgICAgIHJldHVybiBzaWRlYmFyLnNldEV4cHJlc3Npb24obWVzc2FnZS5leHByZXNzaW9uLCBt
ZXNzYWdlLnJvb3RUaXRsZSwgbWVzc2FnZS5ldmFsdWF0ZU9wdGlvbnMsIHBvcnQuX2V4dGVuc2lv
bk9yaWdpbiwgY2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgICAgIHNpZGViYXIuc2V0T2JqZWN0
KG1lc3NhZ2UuZXhwcmVzc2lvbiwgbWVzc2FnZS5yb290VGl0bGUsIGNhbGxiYWNrLmJpbmQodGhp
cykpOwotICAgIH0sCi0KLSAgICBfb25TZXRTaWRlYmFyUGFnZTogZnVuY3Rpb24obWVzc2FnZSwg
cG9ydCkKLSAgICB7Ci0gICAgICAgIHZhciBzaWRlYmFyID0gdGhpcy5fY2xpZW50T2JqZWN0c1tt
ZXNzYWdlLmlkXTsKLSAgICAgICAgaWYgKCFzaWRlYmFyKQotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3N0YXR1cy5FX05PVEZPVU5EKG1lc3NhZ2UuaWQpOwotICAgICAgICBzaWRlYmFyLnNldFBh
Z2UodGhpcy5fZXhwYW5kUmVzb3VyY2VQYXRoKHBvcnQuX2V4dGVuc2lvbk9yaWdpbiwgbWVzc2Fn
ZS5wYWdlKSk7Ci0gICAgfSwKLQotICAgIF9vblNldE9wZW5SZXNvdXJjZUhhbmRsZXI6IGZ1bmN0
aW9uKG1lc3NhZ2UsIHBvcnQpCi0gICAgewotICAgICAgICB2YXIgbmFtZSA9IHRoaXMuX3JlZ2lz
dGVyZWRFeHRlbnNpb25zW3BvcnQuX2V4dGVuc2lvbk9yaWdpbl0ubmFtZSB8fCAoIkV4dGVuc2lv
biAiICsgcG9ydC5fZXh0ZW5zaW9uT3JpZ2luKTsKLSAgICAgICAgaWYgKG1lc3NhZ2UuaGFuZGxl
clByZXNlbnQpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iub3BlbkFuY2hvckxvY2F0aW9uUmVn
aXN0cnkucmVnaXN0ZXJIYW5kbGVyKG5hbWUsIHRoaXMuX2hhbmRsZU9wZW5VUkwuYmluZCh0aGlz
LCBwb3J0KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5vcGVuQW5j
aG9yTG9jYXRpb25SZWdpc3RyeS51bnJlZ2lzdGVySGFuZGxlcihuYW1lKTsKLSAgICB9LAotCi0g
ICAgX2hhbmRsZU9wZW5VUkw6IGZ1bmN0aW9uKHBvcnQsIGRldGFpbHMpCi0gICAgewotICAgICAg
ICB2YXIgdXJsID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZXRhaWxzLnVybCk7Ci0gICAgICAg
IHZhciBjb250ZW50UHJvdmlkZXIgPSBXZWJJbnNwZWN0b3Iud29ya3NwYWNlLnVpU291cmNlQ29k
ZUZvck9yaWdpblVSTCh1cmwpIHx8IFdlYkluc3BlY3Rvci5yZXNvdXJjZUZvclVSTCh1cmwpOwot
ICAgICAgICBpZiAoIWNvbnRlbnRQcm92aWRlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIAotICAgICAgICB2YXIgbGluZU51bWJlciA9IGRldGFpbHMubGluZU51bWJl
cjsKLSAgICAgICAgaWYgKHR5cGVvZiBsaW5lTnVtYmVyID09PSAibnVtYmVyIikKLSAgICAgICAg
ICAgIGxpbmVOdW1iZXIgKz0gMTsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7Ci0gICAgICAg
ICAgICBjb21tYW5kOiAib3Blbi1yZXNvdXJjZSIsCi0gICAgICAgICAgICByZXNvdXJjZTogdGhp
cy5fbWFrZVJlc291cmNlKGNvbnRlbnRQcm92aWRlciksCi0gICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyCi0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAot
Ci0gICAgX29uTG9nOiBmdW5jdGlvbihtZXNzYWdlKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmxvZyhtZXNzYWdlLm1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICBfb25SZWxvYWQ6IGZ1bmN0
aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICB2YXIgb3B0aW9ucyA9IC8qKiBAdHlwZSBFeHRl
bnNpb25SZWxvYWRPcHRpb25zICovIChtZXNzYWdlLm9wdGlvbnMgfHwge30pOwotICAgICAgICBO
ZXR3b3JrQWdlbnQuc2V0VXNlckFnZW50T3ZlcnJpZGUodHlwZW9mIG9wdGlvbnMudXNlckFnZW50
ID09PSAic3RyaW5nIiA/IG9wdGlvbnMudXNlckFnZW50IDogIiIpOwotICAgICAgICB2YXIgaW5q
ZWN0ZWRTY3JpcHQ7Ci0gICAgICAgIGlmIChvcHRpb25zLmluamVjdGVkU2NyaXB0KQotICAgICAg
ICAgICAgaW5qZWN0ZWRTY3JpcHQgPSAiKGZ1bmN0aW9uKCl7IiArIG9wdGlvbnMuaW5qZWN0ZWRT
Y3JpcHQgKyAifSkoKSI7Ci0gICAgICAgIFBhZ2VBZ2VudC5yZWxvYWQoISFvcHRpb25zLmlnbm9y
ZUNhY2hlLCBpbmplY3RlZFNjcmlwdCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuT0so
KTsKLSAgICB9LAotCi0gICAgX29uRXZhbHVhdGVPbkluc3BlY3RlZFBhZ2U6IGZ1bmN0aW9uKG1l
c3NhZ2UsIHBvcnQpCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/UHJv
dG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7UnVudGltZUFnZW50LlJlbW90
ZU9iamVjdH0gcmVzdWx0UGF5bG9hZAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3YXNU
aHJvd24KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCByZXN1
bHRQYXlsb2FkLCB3YXNUaHJvd24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZXN1bHQ7
Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5f
c3RhdHVzLkVfUFJPVE9DT0xFUlJPUihlcnJvci50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKHdhc1Rocm93bikKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB7IGlzRXhjZXB0aW9u
OiB0cnVlLCB2YWx1ZTogcmVzdWx0UGF5bG9hZC5kZXNjcmlwdGlvbiB9OwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHsgdmFsdWU6IHJlc3VsdFBheWxvYWQudmFs
dWUgfTsKLSAgICAgIAotICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hDYWxsYmFjayhtZXNzYWdl
LnJlcXVlc3RJZCwgcG9ydCwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhp
cy5ldmFsdWF0ZShtZXNzYWdlLmV4cHJlc3Npb24sIHRydWUsIHRydWUsIG1lc3NhZ2UuZXZhbHVh
dGVPcHRpb25zLCBwb3J0Ll9leHRlbnNpb25PcmlnaW4sIGNhbGxiYWNrLmJpbmQodGhpcykpOwot
ICAgIH0sCi0KLSAgICBfb25HZXRDb25zb2xlTWVzc2FnZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29uc29sZS5tZXNzYWdlcy5tYXAodGhpcy5fbWFr
ZUNvbnNvbGVNZXNzYWdlKTsKLSAgICB9LAotCi0gICAgX29uQWRkQ29uc29sZU1lc3NhZ2U6IGZ1
bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBjb252ZXJ0U2V2ZXJpdHko
bGV2ZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAobGV2ZWwpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuY29uc29sZS5TZXZlcml0eS5M
b2c6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZUxldmVsLkxvZzsKLSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5l
eHRlbnNpb25BUEkuY29uc29sZS5TZXZlcml0eS5XYXJuaW5nOgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5n
OwotICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5jb25zb2xl
LlNldmVyaXR5LkVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjsKLSAgICAgICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuY29uc29sZS5TZXZlcml0eS5EZWJ1ZzoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
TGV2ZWwuRGVidWc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGxldmVs
ID0gY29udmVydFNldmVyaXR5KG1lc3NhZ2Uuc2V2ZXJpdHkpOwotICAgICAgICBpZiAoIWxldmVs
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0JBREFSRygibWVzc2FnZS5zZXZl
cml0eSIsIG1lc3NhZ2Uuc2V2ZXJpdHkpOwotCi0gICAgICAgIHZhciBjb25zb2xlTWVzc2FnZSA9
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUoCi0gICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywKLSAgICAgICAgICAgIGxldmVs
LAotICAgICAgICAgICAgbWVzc2FnZS50ZXh0LAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZywKLSAgICAgICAgICAgIG1lc3NhZ2UudXJsLAot
ICAgICAgICAgICAgbWVzc2FnZS5saW5lKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUu
YWRkTWVzc2FnZShjb25zb2xlTWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIF9tYWtlQ29uc29sZU1l
c3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBjb252ZXJ0
TGV2ZWwobGV2ZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbGV2ZWwpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgc3dpdGNoIChsZXZlbCkgewotICAgICAgICAg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uQVBJLmNv
bnNvbGUuU2V2ZXJpdHkuTG9nOwotICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5jb25zb2xlLlNldmVyaXR5Lldhcm5pbmc7
Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLkVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmV4
dGVuc2lvbkFQSS5jb25zb2xlLlNldmVyaXR5LkVycm9yOwotICAgICAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuY29uc29sZS5TZXZl
cml0eS5EZWJ1ZzsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5jb25zb2xlLlNldmVyaXR5LkxvZzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIgcmVzdWx0ID0gewotICAgICAg
ICAgICAgc2V2ZXJpdHk6IGNvbnZlcnRMZXZlbChtZXNzYWdlLmxldmVsKSwKLSAgICAgICAgICAg
IHRleHQ6IG1lc3NhZ2UudGV4dCwKLSAgICAgICAgfTsKLSAgICAgICAgaWYgKG1lc3NhZ2UudXJs
KQotICAgICAgICAgICAgcmVzdWx0LnVybCA9IG1lc3NhZ2UudXJsOwotICAgICAgICBpZiAobWVz
c2FnZS5saW5lKQotICAgICAgICAgICAgcmVzdWx0LmxpbmUgPSBtZXNzYWdlLmxpbmU7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIF9vbkdldEhBUjogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdmFyIHJlcXVlc3RzID0gV2ViSW5zcGVjdG9yLm5ldHdvcmtMb2cucmVx
dWVzdHM7Ci0gICAgICAgIHZhciBoYXJMb2cgPSAobmV3IFdlYkluc3BlY3Rvci5IQVJMb2cocmVx
dWVzdHMpKS5idWlsZCgpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhckxvZy5lbnRy
aWVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgaGFyTG9nLmVudHJpZXNbaV0uX3JlcXVlc3RJ
ZCA9IHRoaXMuX3JlcXVlc3RJZChyZXF1ZXN0c1tpXSk7Ci0gICAgICAgIHJldHVybiBoYXJMb2c7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRlbnRQ
cm92aWRlcn0gY29udGVudFByb3ZpZGVyCi0gICAgICovCi0gICAgX21ha2VSZXNvdXJjZTogZnVu
Y3Rpb24oY29udGVudFByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgIHVybDogY29udGVudFByb3ZpZGVyLmNvbnRlbnRVUkwoKSwKLSAgICAgICAgICAgIHR5cGU6
IGNvbnRlbnRQcm92aWRlci5jb250ZW50VHlwZSgpLm5hbWUoKQotICAgICAgICB9OwotICAgIH0s
Ci0KLSAgICBfb25HZXRQYWdlUmVzb3VyY2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgcmVzb3VyY2VzID0ge307Ci0KLSAgICAgICAgZnVuY3Rpb24gcHVzaFJlc291cmNlRGF0YShj
b250ZW50UHJvdmlkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghcmVzb3VyY2VzW2Nv
bnRlbnRQcm92aWRlci5jb250ZW50VVJMKCldKQotICAgICAgICAgICAgICAgIHJlc291cmNlc1tj
b250ZW50UHJvdmlkZXIuY29udGVudFVSTCgpXSA9IHRoaXMuX21ha2VSZXNvdXJjZShjb250ZW50
UHJvdmlkZXIpOwotICAgICAgICB9Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGVzID0gV2ViSW5z
cGVjdG9yLndvcmtzcGFjZS51aVNvdXJjZUNvZGVzRm9yUHJvamVjdFR5cGUoV2ViSW5zcGVjdG9y
LnByb2plY3RUeXBlcy5OZXR3b3JrKTsKLSAgICAgICAgdWlTb3VyY2VDb2Rlcy5mb3JFYWNoKHB1
c2hSZXNvdXJjZURhdGEuYmluZCh0aGlzKSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5yZXNvdXJj
ZVRyZWVNb2RlbC5mb3JBbGxSZXNvdXJjZXMocHVzaFJlc291cmNlRGF0YS5iaW5kKHRoaXMpKTsK
LSAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVzb3VyY2VzKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSBjb250ZW50
UHJvdmlkZXIKLSAgICAgKi8KLSAgICBfZ2V0UmVzb3VyY2VDb250ZW50OiBmdW5jdGlvbihjb250
ZW50UHJvdmlkZXIsIG1lc3NhZ2UsIHBvcnQpCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAg
ICogQHBhcmFtIHs/c3RyaW5nfSBjb250ZW50Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
Y29udGVudEVuY29kZWQKLSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiBvbkNvbnRlbnRBdmFpbGFibGUoY29udGVudCwgY29u
dGVudEVuY29kZWQsIG1pbWVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcmVzcG9u
c2UgPSB7Ci0gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IGNvbnRlbnRFbmNvZGVkID8gImJhc2U2
NCIgOiAiIiwKLSAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50Ci0gICAgICAgICAgICB9
OwotICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hDYWxsYmFjayhtZXNzYWdlLnJlcXVlc3RJZCwg
cG9ydCwgcmVzcG9uc2UpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRlbnRQcm92aWRlci5yZXF1
ZXN0Q29udGVudChvbkNvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAg
IF9vbkdldFJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihtZXNzYWdlLCBwb3J0KQotICAgIHsKLSAg
ICAgICAgdmFyIHJlcXVlc3QgPSB0aGlzLl9yZXF1ZXN0QnlJZChtZXNzYWdlLmlkKTsKLSAgICAg
ICAgaWYgKCFyZXF1ZXN0KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX05PVEZP
VU5EKG1lc3NhZ2UuaWQpOwotICAgICAgICB0aGlzLl9nZXRSZXNvdXJjZUNvbnRlbnQocmVxdWVz
dCwgbWVzc2FnZSwgcG9ydCk7Ci0gICAgfSwKLQotICAgIF9vbkdldFJlc291cmNlQ29udGVudDog
ZnVuY3Rpb24obWVzc2FnZSwgcG9ydCkKLSAgICB7Ci0gICAgICAgIHZhciB1cmwgPSAvKiogQHR5
cGUge3N0cmluZ30gKi8gKG1lc3NhZ2UudXJsKTsKLSAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRl
ciA9IFdlYkluc3BlY3Rvci53b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yT3JpZ2luVVJMKHVybCkg
fHwgV2ViSW5zcGVjdG9yLnJlc291cmNlRm9yVVJMKHVybCk7Ci0gICAgICAgIGlmICghY29udGVu
dFByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX05PVEZPVU5EKHVy
bCk7Ci0gICAgICAgIHRoaXMuX2dldFJlc291cmNlQ29udGVudChjb250ZW50UHJvdmlkZXIsIG1l
c3NhZ2UsIHBvcnQpOwotICAgIH0sCi0KLSAgICBfb25TZXRSZXNvdXJjZUNvbnRlbnQ6IGZ1bmN0
aW9uKG1lc3NhZ2UsIHBvcnQpCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFt
IHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBj
YWxsYmFja1dyYXBwZXIoZXJyb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZXNwb25z
ZSA9IGVycm9yID8gdGhpcy5fc3RhdHVzLkVfRkFJTEVEKGVycm9yKSA6IHRoaXMuX3N0YXR1cy5P
SygpOwotICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hDYWxsYmFjayhtZXNzYWdlLnJlcXVlc3RJ
ZCwgcG9ydCwgcmVzcG9uc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHVybCA9IC8qKiBA
dHlwZSB7c3RyaW5nfSAqLyAobWVzc2FnZS51cmwpOwotICAgICAgICB2YXIgdWlTb3VyY2VDb2Rl
ID0gV2ViSW5zcGVjdG9yLndvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JPcmlnaW5VUkwodXJsKTsK
LSAgICAgICAgaWYgKCF1aVNvdXJjZUNvZGUpIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZSA9
IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5yZXNvdXJjZUZvclVSTCh1cmwpOwotICAg
ICAgICAgICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Rh
dHVzLkVfTk9URk9VTkQodXJsKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9O
T1RTVVBQT1JURUQoIlJlc291cmNlIGlzIG5vdCBlZGl0YWJsZSIpCi0gICAgICAgIH0KLSAgICAg
ICAgdWlTb3VyY2VDb2RlLnNldFdvcmtpbmdDb3B5KG1lc3NhZ2UuY29udGVudCk7Ci0gICAgICAg
IGlmIChtZXNzYWdlLmNvbW1pdCkKLSAgICAgICAgICAgIHVpU291cmNlQ29kZS5jb21taXRXb3Jr
aW5nQ29weShjYWxsYmFja1dyYXBwZXIuYmluZCh0aGlzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxiYWNrV3JhcHBlci5jYWxsKHRoaXMsIG51bGwpOwotICAgIH0sCi0KLSAgICBf
cmVxdWVzdElkOiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKCFyZXF1ZXN0
Ll9leHRlbnNpb25SZXF1ZXN0SWQpIHsKLSAgICAgICAgICAgIHJlcXVlc3QuX2V4dGVuc2lvblJl
cXVlc3RJZCA9ICsrdGhpcy5fbGFzdFJlcXVlc3RJZDsKLSAgICAgICAgICAgIHRoaXMuX3JlcXVl
c3RzW3JlcXVlc3QuX2V4dGVuc2lvblJlcXVlc3RJZF0gPSByZXF1ZXN0OwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiByZXF1ZXN0Ll9leHRlbnNpb25SZXF1ZXN0SWQ7Ci0gICAgfSwKLQotICAg
IF9yZXF1ZXN0QnlJZDogZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
cmVxdWVzdHNbaWRdOwotICAgIH0sCi0KLSAgICBfb25BZGRBdWRpdENhdGVnb3J5OiBmdW5jdGlv
bihtZXNzYWdlLCBwb3J0KQotICAgIHsKLSAgICAgICAgdmFyIGNhdGVnb3J5ID0gbmV3IFdlYklu
c3BlY3Rvci5FeHRlbnNpb25BdWRpdENhdGVnb3J5KHBvcnQuX2V4dGVuc2lvbk9yaWdpbiwgbWVz
c2FnZS5pZCwgbWVzc2FnZS5kaXNwbGF5TmFtZSwgbWVzc2FnZS5yZXN1bHRDb3VudCk7Ci0gICAg
ICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWwoImF1ZGl0cyIpLmdldENhdGVnb3J5KGNhdGVnb3J5
LmlkKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9FWElTVFMoY2F0ZWdvcnku
aWQpOwotICAgICAgICB0aGlzLl9jbGllbnRPYmplY3RzW21lc3NhZ2UuaWRdID0gY2F0ZWdvcnk7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbCgiYXVkaXRzIikuYWRkQ2F0ZWdvcnkoY2F0ZWdv
cnkpOwotICAgIH0sCi0KLSAgICBfb25BZGRBdWRpdFJlc3VsdDogZnVuY3Rpb24obWVzc2FnZSkK
LSAgICB7Ci0gICAgICAgIHZhciBhdWRpdFJlc3VsdCA9IHRoaXMuX2NsaWVudE9iamVjdHNbbWVz
c2FnZS5yZXN1bHRJZF07Ci0gICAgICAgIGlmICghYXVkaXRSZXN1bHQpCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fc3RhdHVzLkVfTk9URk9VTkQobWVzc2FnZS5yZXN1bHRJZCk7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICBhdWRpdFJlc3VsdC5hZGRSZXN1bHQobWVzc2FnZS5kaXNwbGF5
TmFtZSwgbWVzc2FnZS5kZXNjcmlwdGlvbiwgbWVzc2FnZS5zZXZlcml0eSwgbWVzc2FnZS5kZXRh
aWxzKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgcmV0dXJuIGU7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5PSygpOwotICAgIH0sCi0KLSAgICBf
b25VcGRhdGVBdWRpdFByb2dyZXNzOiBmdW5jdGlvbihtZXNzYWdlKQotICAgIHsKLSAgICAgICAg
dmFyIGF1ZGl0UmVzdWx0ID0gdGhpcy5fY2xpZW50T2JqZWN0c1ttZXNzYWdlLnJlc3VsdElkXTsK
LSAgICAgICAgaWYgKCFhdWRpdFJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0
dXMuRV9OT1RGT1VORChtZXNzYWdlLnJlc3VsdElkKTsKLSAgICAgICAgYXVkaXRSZXN1bHQudXBk
YXRlUHJvZ3Jlc3MoTWF0aC5taW4oTWF0aC5tYXgoMCwgbWVzc2FnZS5wcm9ncmVzcyksIDEpKTsK
LSAgICB9LAotCi0gICAgX29uU3RvcEF1ZGl0Q2F0ZWdvcnlSdW46IGZ1bmN0aW9uKG1lc3NhZ2Up
Ci0gICAgewotICAgICAgICB2YXIgYXVkaXRSdW4gPSB0aGlzLl9jbGllbnRPYmplY3RzW21lc3Nh
Z2UucmVzdWx0SWRdOwotICAgICAgICBpZiAoIWF1ZGl0UnVuKQotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3N0YXR1cy5FX05PVEZPVU5EKG1lc3NhZ2UucmVzdWx0SWQpOwotICAgICAgICBhdWRp
dFJ1bi5kb25lKCk7Ci0gICAgfSwKLQotICAgIF9kaXNwYXRjaENhbGxiYWNrOiBmdW5jdGlvbihy
ZXF1ZXN0SWQsIHBvcnQsIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGlmIChyZXF1ZXN0SWQpCi0g
ICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHsgY29tbWFuZDogImNhbGxiYWNrIiwgcmVxdWVz
dElkOiByZXF1ZXN0SWQsIHJlc3VsdDogcmVzdWx0IH0pOwotICAgIH0sCi0KLSAgICBpbml0RXh0
ZW5zaW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVnaXN0ZXJBdXRvc3Vi
c2NyaXB0aW9uSGFuZGxlcihXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uQVBJLkV2ZW50cy5Db25zb2xl
TWVzc2FnZUFkZGVkLAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUsIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTW9kZWwuRXZlbnRzLk1lc3NhZ2VBZGRlZCwgdGhpcy5fbm90aWZ5Q29uc29s
ZU1lc3NhZ2VBZGRlZCk7Ci0gICAgICAgIHRoaXMuX3JlZ2lzdGVyQXV0b3N1YnNjcmlwdGlvbkhh
bmRsZXIoV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5FdmVudHMuTmV0d29ya1JlcXVlc3RGaW5p
c2hlZCwKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5uZXR3b3JrTWFuYWdlciwgV2ViSW5zcGVj
dG9yLk5ldHdvcmtNYW5hZ2VyLkV2ZW50VHlwZXMuUmVxdWVzdEZpbmlzaGVkLCB0aGlzLl9ub3Rp
ZnlSZXF1ZXN0RmluaXNoZWQpOwotICAgICAgICB0aGlzLl9yZWdpc3RlckF1dG9zdWJzY3JpcHRp
b25IYW5kbGVyKFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuRXZlbnRzLlJlc291cmNlQWRkZWQs
Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iud29ya3NwYWNlLAotICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLlVJU291cmNlQ29kZVByb3ZpZGVyLkV2ZW50cy5VSVNvdXJjZUNvZGVBZGRlZCwKLSAg
ICAgICAgICAgIHRoaXMuX25vdGlmeVJlc291cmNlQWRkZWQpOwotICAgICAgICB0aGlzLl9yZWdp
c3RlckF1dG9zdWJzY3JpcHRpb25IYW5kbGVyKFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuRXZl
bnRzLkVsZW1lbnRzUGFuZWxPYmplY3RTZWxlY3RlZCwKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5ub3RpZmljYXRpb25zLAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91
dGxpbmUuRXZlbnRzLlNlbGVjdGVkTm9kZUNoYW5nZWQsCi0gICAgICAgICAgICB0aGlzLl9ub3Rp
ZnlFbGVtZW50c1NlbGVjdGlvbkNoYW5nZWQpOwotICAgICAgICB0aGlzLl9yZWdpc3RlckF1dG9z
dWJzY3JpcHRpb25IYW5kbGVyKFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuRXZlbnRzLlJlc291
cmNlQ29udGVudENvbW1pdHRlZCwKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci53b3Jrc3BhY2Us
Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuV29ya3NwYWNlLkV2ZW50cy5VSVNvdXJjZUNvZGVD
b250ZW50Q29tbWl0dGVkLAotICAgICAgICAgICAgdGhpcy5fbm90aWZ5VUlTb3VyY2VDb2RlQ29u
dGVudENvbW1pdHRlZCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gb25UaW1lbGluZVN1YnNjcmlwdGlv
blN0YXJ0ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IudGltZWxpbmVN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5FdmVu
dFR5cGVzLlRpbWVsaW5lRXZlbnRSZWNvcmRlZCwKLSAgICAgICAgICAgICAgICB0aGlzLl9ub3Rp
ZnlUaW1lbGluZUV2ZW50UmVjb3JkZWQsIHRoaXMpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LnRpbWVsaW5lTWFuYWdlci5zdGFydCgpOwotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIG9u
VGltZWxpbmVTdWJzY3JpcHRpb25TdG9wcGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLnRpbWVsaW5lTWFuYWdlci5zdG9wKCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0
b3IudGltZWxpbmVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lTWFuYWdlci5FdmVudFR5cGVzLlRpbWVsaW5lRXZlbnRSZWNvcmRlZCwKLSAgICAgICAgICAg
ICAgICB0aGlzLl9ub3RpZnlUaW1lbGluZUV2ZW50UmVjb3JkZWQsIHRoaXMpOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMuX3JlZ2lzdGVyU3Vic2NyaXB0aW9uSGFuZGxlcihXZWJJbnNwZWN0b3Iu
ZXh0ZW5zaW9uQVBJLkV2ZW50cy5UaW1lbGluZUV2ZW50UmVjb3JkZWQsCi0gICAgICAgICAgICBv
blRpbWVsaW5lU3Vic2NyaXB0aW9uU3RhcnRlZC5iaW5kKHRoaXMpLCBvblRpbWVsaW5lU3Vic2Ny
aXB0aW9uU3RvcHBlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3IucmVzb3Vy
Y2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9k
ZWwuRXZlbnRUeXBlcy5JbnNwZWN0ZWRVUkxDaGFuZ2VkLAotICAgICAgICAgICAgdGhpcy5faW5z
cGVjdGVkVVJMQ2hhbmdlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX2luaXREb25lID0gdHJ1ZTsK
LSAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdFeHRlbnNpb25zKSB7Ci0gICAgICAgICAgICB0aGlz
Ll9wZW5kaW5nRXh0ZW5zaW9ucy5mb3JFYWNoKHRoaXMuX2lubmVyQWRkRXh0ZW5zaW9uLCB0aGlz
KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nRXh0ZW5zaW9uczsKLSAgICAgICAg
fQotICAgICAgICBJbnNwZWN0b3JFeHRlbnNpb25SZWdpc3RyeS5nZXRFeHRlbnNpb25zQXN5bmMo
KTsKLSAgICB9LAotCi0gICAgX25vdGlmeUNvbnNvbGVNZXNzYWdlQWRkZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fcG9zdE5vdGlmaWNhdGlvbihXZWJJbnNwZWN0b3Iu
ZXh0ZW5zaW9uQVBJLkV2ZW50cy5Db25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzLl9tYWtlQ29uc29s
ZU1lc3NhZ2UoZXZlbnQuZGF0YSkpOwotICAgIH0sCi0KLSAgICBfbm90aWZ5UmVzb3VyY2VBZGRl
ZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gLyoq
IEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAg
ICAgIHRoaXMuX3Bvc3ROb3RpZmljYXRpb24oV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5FdmVu
dHMuUmVzb3VyY2VBZGRlZCwgdGhpcy5fbWFrZVJlc291cmNlKHVpU291cmNlQ29kZSkpOwotICAg
IH0sCi0KLSAgICBfbm90aWZ5VUlTb3VyY2VDb2RlQ29udGVudENvbW1pdHRlZDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJ
bnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAqLyAoZXZlbnQuZGF0YS51aVNvdXJjZUNvZGUpOwotICAg
ICAgICB2YXIgY29udGVudCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZXZlbnQuZGF0YS5jb250
ZW50KTsKLSAgICAgICAgdGhpcy5fcG9zdE5vdGlmaWNhdGlvbihXZWJJbnNwZWN0b3IuZXh0ZW5z
aW9uQVBJLkV2ZW50cy5SZXNvdXJjZUNvbnRlbnRDb21taXR0ZWQsIHRoaXMuX21ha2VSZXNvdXJj
ZSh1aVNvdXJjZUNvZGUpLCBjb250ZW50KTsKLSAgICB9LAotCi0gICAgX25vdGlmeVJlcXVlc3RG
aW5pc2hlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcmVxdWVzdCA9IC8q
KiBAdHlwZSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSAqLyAoZXZlbnQuZGF0YSk7Ci0g
ICAgICAgIHRoaXMuX3Bvc3ROb3RpZmljYXRpb24oV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5F
dmVudHMuTmV0d29ya1JlcXVlc3RGaW5pc2hlZCwgdGhpcy5fcmVxdWVzdElkKHJlcXVlc3QpLCAo
bmV3IFdlYkluc3BlY3Rvci5IQVJFbnRyeShyZXF1ZXN0KSkuYnVpbGQoKSk7Ci0gICAgfSwKLQot
ICAgIF9ub3RpZnlFbGVtZW50c1NlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3Bvc3ROb3RpZmljYXRpb24oV2ViSW5zcGVjdG9yLmV4dGVuc2lvbkFQSS5F
dmVudHMuRWxlbWVudHNQYW5lbE9iamVjdFNlbGVjdGVkKTsKLSAgICB9LAotCi0gICAgX25vdGlm
eVRpbWVsaW5lRXZlbnRSZWNvcmRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0
aGlzLl9wb3N0Tm90aWZpY2F0aW9uKFdlYkluc3BlY3Rvci5leHRlbnNpb25BUEkuRXZlbnRzLlRp
bWVsaW5lRXZlbnRSZWNvcmRlZCwgZXZlbnQuZGF0YSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7QXJyYXkuPEV4dGVuc2lvbkRlc2NyaXB0b3I+fSBleHRlbnNpb25zCi0gICAg
ICovCi0gICAgX2FkZEV4dGVuc2lvbnM6IGZ1bmN0aW9uKGV4dGVuc2lvbnMpCi0gICAgewotICAg
ICAgICBleHRlbnNpb25zLmZvckVhY2godGhpcy5fYWRkRXh0ZW5zaW9uLCB0aGlzKTsKLSAgICB9
LAotCi0gICAgX2FkZEV4dGVuc2lvbjogZnVuY3Rpb24oZXh0ZW5zaW9uSW5mbykKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9pbml0RG9uZSkgewotICAgICAgICAgICAgdGhpcy5faW5uZXJBZGRF
eHRlbnNpb24oZXh0ZW5zaW9uSW5mbyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdFeHRlbnNpb25zKQotICAgICAgICAgICAgdGhpcy5f
cGVuZGluZ0V4dGVuc2lvbnMucHVzaChleHRlbnNpb25JbmZvKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdGhpcy5fcGVuZGluZ0V4dGVuc2lvbnMgPSBbZXh0ZW5zaW9uSW5mb107Ci0gICAg
fSwKLQotICAgIF9pbm5lckFkZEV4dGVuc2lvbjogZnVuY3Rpb24oZXh0ZW5zaW9uSW5mbykKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IHVybE9yaWdpblJlZ0V4cCA9IG5ldyBSZWdFeHAoIihbXjpdKzpc
L1wvW14vXSopXC8iKTsgLy8gQ2FuJ3QgdXNlIHJlZ2V4cCBsaXRlcmFsIGhlcmUsIE1pbkpTIGNo
b2tlcyBvbiBpdC4KLSAgICAgICAgdmFyIHN0YXJ0UGFnZSA9IGV4dGVuc2lvbkluZm8uc3RhcnRQ
YWdlOwotICAgICAgICB2YXIgbmFtZSA9IGV4dGVuc2lvbkluZm8ubmFtZTsKLQotICAgICAgICB0
cnkgewotICAgICAgICAgICAgdmFyIG9yaWdpbk1hdGNoID0gdXJsT3JpZ2luUmVnRXhwLmV4ZWMo
c3RhcnRQYWdlKTsKLSAgICAgICAgICAgIGlmICghb3JpZ2luTWF0Y2gpIHsKLSAgICAgICAgICAg
ICAgICBjb25zb2xlLmVycm9yKCJTa2lwcGluZyBleHRlbnNpb24gd2l0aCBpbnZhbGlkIFVSTDog
IiArIHN0YXJ0UGFnZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdmFyIGV4dGVuc2lvbk9yaWdpbiA9IG9yaWdpbk1hdGNoWzFdOwot
ICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWdpc3RlcmVkRXh0ZW5zaW9uc1tleHRlbnNpb25Pcmln
aW5dKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2VlIEV4dGVuc2lvbkFQSS5qcyBhbmQgRXh0ZW5z
aW9uQ29tbW9uLmpzIGZvciBkZXRhaWxzLgotICAgICAgICAgICAgICAgIEluc3BlY3RvckZyb250
ZW5kSG9zdC5zZXRJbmplY3RlZFNjcmlwdEZvck9yaWdpbihleHRlbnNpb25PcmlnaW4sIGJ1aWxk
RXh0ZW5zaW9uQVBJSW5qZWN0ZWRTY3JpcHQoZXh0ZW5zaW9uSW5mbykpOwotICAgICAgICAgICAg
ICAgIHRoaXMuX3JlZ2lzdGVyZWRFeHRlbnNpb25zW2V4dGVuc2lvbk9yaWdpbl0gPSB7IG5hbWU6
IG5hbWUgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKLSAgICAgICAgICAgIGlmcmFtZS5zcmMgPSBzdGFy
dFBhZ2U7Ci0gICAgICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKLSAgICAgICAgfSBjYXRj
aCAoZSkgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUg
ZXh0ZW5zaW9uICIgKyBzdGFydFBhZ2UgKyAiOiIgKyBlKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgX29u
V2luZG93TWVzc2FnZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQu
ZGF0YSA9PT0gInJlZ2lzdGVyRXh0ZW5zaW9uIikKLSAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVy
RXh0ZW5zaW9uKGV2ZW50Lm9yaWdpbiwgZXZlbnQucG9ydHNbMF0pOwotICAgIH0sCi0KLSAgICBf
cmVnaXN0ZXJFeHRlbnNpb246IGZ1bmN0aW9uKG9yaWdpbiwgcG9ydCkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5fcmVnaXN0ZXJlZEV4dGVuc2lvbnMuaGFzT3duUHJvcGVydHkob3JpZ2luKSkg
ewotICAgICAgICAgICAgaWYgKG9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikgLy8g
SnVzdCBpZ25vcmUgaW5zcGVjdG9yIGZyYW1lcy4KLSAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJJZ25vcmluZyB1bmF1dGhvcml6ZWQgY2xpZW50IHJlcXVlc3QgZnJvbSAiICsgb3JpZ2lu
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwb3J0Ll9leHRlbnNp
b25PcmlnaW4gPSBvcmlnaW47Ci0gICAgICAgIHBvcnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIHRoaXMuX29ubWVzc2FnZS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIHBvcnQuc3Rh
cnQoKTsKLSAgICB9LAotCi0gICAgX29ubWVzc2FnZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICB2YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHZhciByZXN1bHQ7Ci0K
LSAgICAgICAgaWYgKG1lc3NhZ2UuY29tbWFuZCBpbiB0aGlzLl9oYW5kbGVycykKLSAgICAgICAg
ICAgIHJlc3VsdCA9IHRoaXMuX2hhbmRsZXJzW21lc3NhZ2UuY29tbWFuZF0obWVzc2FnZSwgZXZl
bnQudGFyZ2V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fc3Rh
dHVzLkVfTk9UU1VQUE9SVEVEKG1lc3NhZ2UuY29tbWFuZCk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dCAmJiBtZXNzYWdlLnJlcXVlc3RJZCkKLSAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoQ2FsbGJh
Y2sobWVzc2FnZS5yZXF1ZXN0SWQsIGV2ZW50LnRhcmdldCwgcmVzdWx0KTsKLSAgICB9LAotCi0g
ICAgX3JlZ2lzdGVySGFuZGxlcjogZnVuY3Rpb24oY29tbWFuZCwgY2FsbGJhY2spCi0gICAgewot
ICAgICAgICB0aGlzLl9oYW5kbGVyc1tjb21tYW5kXSA9IGNhbGxiYWNrOwotICAgIH0sCi0KLSAg
ICBfcmVnaXN0ZXJTdWJzY3JpcHRpb25IYW5kbGVyOiBmdW5jdGlvbihldmVudFRvcGljLCBvblN1
YnNjcmliZUZpcnN0LCBvblVuc3Vic2NyaWJlTGFzdCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N1
YnNjcmlwdGlvblN0YXJ0SGFuZGxlcnNbZXZlbnRUb3BpY10gPSAgb25TdWJzY3JpYmVGaXJzdDsK
LSAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uU3RvcEhhbmRsZXJzW2V2ZW50VG9waWNdID0gIG9u
VW5zdWJzY3JpYmVMYXN0OwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJBdXRvc3Vic2NyaXB0aW9u
SGFuZGxlcjogZnVuY3Rpb24oZXZlbnRUb3BpYywgZXZlbnRUYXJnZXQsIGZyb250ZW5kRXZlbnRU
eXBlLCBoYW5kbGVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVnaXN0ZXJTdWJzY3JpcHRpb25I
YW5kbGVyKGV2ZW50VG9waWMsCi0gICAgICAgICAgICBldmVudFRhcmdldC5hZGRFdmVudExpc3Rl
bmVyLmJpbmQoZXZlbnRUYXJnZXQsIGZyb250ZW5kRXZlbnRUeXBlLCBoYW5kbGVyLCB0aGlzKSwK
LSAgICAgICAgICAgIGV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZChldmVudFRh
cmdldCwgZnJvbnRlbmRFdmVudFR5cGUsIGhhbmRsZXIsIHRoaXMpKTsKLSAgICB9LAotCi0gICAg
X2V4cGFuZFJlc291cmNlUGF0aDogZnVuY3Rpb24oZXh0ZW5zaW9uUGF0aCwgcmVzb3VyY2VQYXRo
KQotICAgIHsKLSAgICAgICAgaWYgKCFyZXNvdXJjZVBhdGgpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHJldHVybiBleHRlbnNpb25QYXRoICsgdGhpcy5fbm9ybWFsaXplUGF0aChyZXNv
dXJjZVBhdGgpOwotICAgIH0sCi0KLSAgICBfbm9ybWFsaXplUGF0aDogZnVuY3Rpb24ocGF0aCkK
LSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2UgPSBwYXRoLnNwbGl0KCIvIik7Ci0gICAgICAgIHZh
ciByZXN1bHQgPSBbXTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSA9PT0gIi4iKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gSWdub3JlIGVtcHR5IHBhdGggY29tcG9u
ZW50cyByZXN1bHRpbmcgZnJvbSAvLywgYXMgd2VsbCBhcyBhIGxlYWRpbmcgYW5kIHRyYWxpbmcg
c2xhc2hlcy4KLSAgICAgICAgICAgIGlmIChzb3VyY2VbaV0gPT09ICIiKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHNvdXJjZVtpXSA9PT0gIi4uIikKLSAgICAg
ICAgICAgICAgICByZXN1bHQucG9wKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnB1c2goc291cmNlW2ldKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIi8i
ICsgcmVzdWx0LmpvaW4oIi8iKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IGV4cHJlc3Npb24KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cG9zZUNvbW1hbmRM
aW5lQVBJCi0gICAgICogQHBhcmFtIHtib29sZWFufSByZXR1cm5CeVZhbHVlCi0gICAgICogQHBh
cmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJpdHlPcmln
aW4KLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmcsID9SdW50aW1lQWdlbnQuUmVtb3Rl
T2JqZWN0LCBib29sZWFuPSl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgZXZhbHVhdGU6IGZ1bmN0
aW9uKGV4cHJlc3Npb24sIGV4cG9zZUNvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBvcHRp
b25zLCBzZWN1cml0eU9yaWdpbiwgY2FsbGJhY2spIAotICAgIHsKLSAgICAgICAgdmFyIGNvbnRl
eHRJZDsKLSAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IikgewotCi0gICAg
ICAgICAgICBmdW5jdGlvbiByZXNvbHZlVVJMVG9GcmFtZSh1cmwpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGZvdW5kOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhc01h
dGNoaW5nVVJMKGZyYW1lKSAKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gKGZyYW1lLnVybCA9PT0gdXJsKSA/IGZyYW1lIDogbnVsbDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuZnJhbWVzKCkuc29tZShoYXNNYXRjaGlu
Z1VSTCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2YXIgZnJhbWUgPSBvcHRpb25zLmZyYW1lVVJMID8gcmVzb2x2ZVVSTFRvRnJh
bWUob3B0aW9ucy5mcmFtZVVSTCkgOiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFp
bkZyYW1lOwotICAgICAgICAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICAgICAgICAgIGlmIChv
cHRpb25zLmZyYW1lVVJMKQotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImV2YWx1
YXRlOiB0aGVyZSBpcyBubyBmcmFtZSB3aXRoIFVSTCAiICsgb3B0aW9ucy5mcmFtZVVSTCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImV2
YWx1YXRlOiB0aGUgbWFpbiBmcmFtZSBpcyBub3QgeWV0IGF2YWlsYWJsZSIpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChvcHRpb25zLmZyYW1lVVJMIHx8
ICI8dG9wPiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgY29udGV4dFNlY3Vy
aXR5T3JpZ2luOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMudXNlQ29udGVudFNjcmlwdENvbnRl
eHQpCi0gICAgICAgICAgICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gc2VjdXJpdHlPcmln
aW47Ci0gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
Ci0gICAgICAgICAgICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gb3B0aW9ucy5zY3JpcHRF
eGVjdXRpb25Db250ZXh0OwotCi0gICAgICAgICAgICB2YXIgZnJhbWVDb250ZXh0TGlzdCA9IFdl
Ykluc3BlY3Rvci5ydW50aW1lTW9kZWwuY29udGV4dExpc3RCeUZyYW1lKGZyYW1lKTsKLSAgICAg
ICAgICAgIHZhciBjb250ZXh0OyAKLSAgICAgICAgICAgIGlmIChjb250ZXh0U2VjdXJpdHlPcmln
aW4pIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0TGlzdC5jb250ZXh0
QnlTZWN1cml0eU9yaWdpbihjb250ZXh0U2VjdXJpdHlPcmlnaW4pOwotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIlRoZSBK
UyBjb250ZXh0ICIgKyBjb250ZXh0U2VjdXJpdHlPcmlnaW4gKyAiIHdhcyBub3QgZm91bmQgaW4g
dGhlIGZyYW1lICIgKyBmcmFtZS51cmwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9zdGF0dXMuRV9OT1RGT1VORChjb250ZXh0U2VjdXJpdHlPcmlnaW4pCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gZnJh
bWVDb250ZXh0TGlzdC5tYWluV29ybGRDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0KSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxF
RChmcmFtZS51cmwgKyAiIGhhcyBubyBleGVjdXRpb24gY29udGV4dCIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOwotICAgICAgICB9Ci0gICAg
ICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZShleHByZXNzaW9uLCAiZXh0ZW5zaW9uIiwgZXhwb3Nl
Q29tbWFuZExpbmVBUEksIHRydWUsIGNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZmFsc2UsIGNh
bGxiYWNrKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3Bl
Y3Rvci5FeHRlbnNpb25TdGF0dXMgPSBmdW5jdGlvbigpCi17Ci0gICAgZnVuY3Rpb24gbWFrZVN0
YXR1cyhjb2RlLCBkZXNjcmlwdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciBkZXRhaWxzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKLSAgICAgICAgdmFyIHN0YXR1
cyA9IHsgY29kZTogY29kZSwgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLCBkZXRhaWxzOiBkZXRh
aWxzIH07Ci0gICAgICAgIGlmIChjb2RlICE9PSAiT0siKSB7Ci0gICAgICAgICAgICBzdGF0dXMu
aXNFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICBjb25zb2xlLmxvZygiRXh0ZW5zaW9uIHNlcnZl
ciBlcnJvcjogIiArIFN0cmluZy52c3ByaW50ZihkZXNjcmlwdGlvbiwgZGV0YWlscykpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgdGhpcy5PSyA9IG1h
a2VTdGF0dXMuYmluZChudWxsLCAiT0siLCAiT0siKTsKLSAgICB0aGlzLkVfRVhJU1RTID0gbWFr
ZVN0YXR1cy5iaW5kKG51bGwsICJFX0VYSVNUUyIsICJPYmplY3QgYWxyZWFkeSBleGlzdHM6ICVz
Iik7Ci0gICAgdGhpcy5FX0JBREFSRyA9IG1ha2VTdGF0dXMuYmluZChudWxsLCAiRV9CQURBUkci
LCAiSW52YWxpZCBhcmd1bWVudCAlczogJXMiKTsKLSAgICB0aGlzLkVfQkFEQVJHVFlQRSA9IG1h
a2VTdGF0dXMuYmluZChudWxsLCAiRV9CQURBUkdUWVBFIiwgIkludmFsaWQgdHlwZSBmb3IgYXJn
dW1lbnQgJXM6IGdvdCAlcywgZXhwZWN0ZWQgJXMiKTsKLSAgICB0aGlzLkVfTk9URk9VTkQgPSBt
YWtlU3RhdHVzLmJpbmQobnVsbCwgIkVfTk9URk9VTkQiLCAiT2JqZWN0IG5vdCBmb3VuZDogJXMi
KTsKLSAgICB0aGlzLkVfTk9UU1VQUE9SVEVEID0gbWFrZVN0YXR1cy5iaW5kKG51bGwsICJFX05P
VFNVUFBPUlRFRCIsICJPYmplY3QgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0ZWQgb3BlcmF0aW9u
OiAlcyIpOwotICAgIHRoaXMuRV9QUk9UT0NPTEVSUk9SID0gbWFrZVN0YXR1cy5iaW5kKG51bGws
ICJFX1BST1RPQ09MRVJST1IiLCAiSW5zcGVjdG9yIHByb3RvY29sIGVycm9yOiAlcyIpOwotICAg
IHRoaXMuRV9GQUlMRUQgPSBtYWtlU3RhdHVzLmJpbmQobnVsbCwgIkVfRkFJTEVEIiwgIk9wZXJh
dGlvbiBmYWlsZWQ6ICVzIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5hZGRFeHRlbnNpb25zID0gZnVu
Y3Rpb24oZXh0ZW5zaW9ucykKLXsKLSAgICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLl9h
ZGRFeHRlbnNpb25zKGV4dGVuc2lvbnMpOwotfQotCi1XZWJJbnNwZWN0b3IuZXh0ZW5zaW9uQVBJ
ID0ge307Ci1kZWZpbmVDb21tb25FeHRlbnNpb25TeW1ib2xzKFdlYkluc3BlY3Rvci5leHRlbnNp
b25BUEkpOwotCi1XZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyID0gbmV3IFdlYkluc3BlY3Rv
ci5FeHRlbnNpb25TZXJ2ZXIoKTsKLQotd2luZG93LmFkZEV4dGVuc2lvbiA9IGZ1bmN0aW9uKHBh
Z2UsIG5hbWUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLmV4dGVuc2lvblNlcnZlci5fYWRkRXh0ZW5z
aW9uKHsKLSAgICAgICAgc3RhcnRQYWdlOiBwYWdlLAotICAgICAgICBuYW1lOiBuYW1lLAotICAg
IH0pOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
eHRlbnNpb25WaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRl
bnNpb25WaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWFlY2Q2Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uVmll
dy5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBwYXJhbSB7c3RyaW5nfSBpZAot
ICogQHBhcmFtIHtzdHJpbmd9IHNyYwotICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZQotICov
Ci1XZWJJbnNwZWN0b3IuRXh0ZW5zaW9uVmlldyA9IGZ1bmN0aW9uKGlkLCBzcmMsIGNsYXNzTmFt
ZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMuZWxlbWVu
dC5jbGFzc05hbWUgPSAiZmlsbCI7Ci0KLSAgICB0aGlzLl9pZCA9IGlkOwotICAgIHRoaXMuX2lm
cmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwotICAgIHRoaXMuX2lmcmFt
ZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgdGhpcy5fb25Mb2FkLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLl9pZnJhbWUuc3JjID0gc3JjOwotICAgIHRoaXMuX2lmcmFtZS5jbGFzc05h
bWUgPSBjbGFzc05hbWU7Ci0gICAgdGhpcy5zZXREZWZhdWx0Rm9jdXNlZEVsZW1lbnQodGhpcy5f
aWZyYW1lKTsKLQotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9pZnJhbWUpOwot
fQotCi1XZWJJbnNwZWN0b3IuRXh0ZW5zaW9uVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgd2FzU2hv
d246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZnJhbWVJbmRl
eCA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVy
Lm5vdGlmeVZpZXdTaG93bih0aGlzLl9pZCwgdGhpcy5fZnJhbWVJbmRleCk7Ci0gICAgfSwKLQot
ICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodHlwZW9mIHRoaXMu
X2ZyYW1lSW5kZXggPT09ICJudW1iZXIiKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmV4dGVu
c2lvblNlcnZlci5ub3RpZnlWaWV3SGlkZGVuKHRoaXMuX2lkKTsKLSAgICB9LAotCi0gICAgX29u
TG9hZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZnJhbWVJbmRleCA9IEFycmF5
LnByb3RvdHlwZS5pbmRleE9mLmNhbGwod2luZG93LmZyYW1lcywgdGhpcy5faWZyYW1lLmNvbnRl
bnRXaW5kb3cpOwotICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5leHRlbnNpb25TZXJ2ZXIubm90aWZ5Vmlld1Nob3duKHRoaXMuX2lkLCB0aGlz
Ll9mcmFtZUluZGV4KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmll
dy5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuVmlld30KLSAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICovCi1XZWJJbnNwZWN0b3Iu
RXh0ZW5zaW9uTm90aWZpZXJWaWV3ID0gZnVuY3Rpb24oaWQpCi17Ci0gICAgV2ViSW5zcGVjdG9y
LlZpZXcuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX2lkID0gaWQ7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5FeHRlbnNpb25Ob3RpZmllclZpZXcucHJvdG90eXBlID0gewotICAgIHdhc1Nob3duOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLm5vdGlm
eVZpZXdTaG93bih0aGlzLl9pZCk7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZXh0ZW5zaW9uU2VydmVyLm5vdGlmeVZpZXdI
aWRkZW4odGhpcy5faWQpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5W
aWV3LnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9GaWxlQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ZpbGVDb250ZW50Vmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTE2NjAxNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ZpbGVDb250ZW50Vmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlfSBmaWxlCi0gKi8KLVdlYkluc3Bl
Y3Rvci5GaWxlQ29udGVudFZpZXcgPSBmdW5jdGlvbihmaWxlKQotewotICAgIFdlYkluc3BlY3Rv
ci5WaWV3LmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLl9pbm5lclZpZXcgPSAvKiogQHR5cGUgez9X
ZWJJbnNwZWN0b3IuVmlld30gKi8gKG51bGwpOwotICAgIHRoaXMuX2ZpbGUgPSBmaWxlOwotICAg
IHRoaXMuX2NvbnRlbnQgPSBudWxsOwotfQotCi1XZWJJbnNwZWN0b3IuRmlsZUNvbnRlbnRWaWV3
LnByb3RvdHlwZSA9IHsKLSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9pbm5lclZpZXcpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9maWxlLmlzVGV4
dEZpbGUpCi0gICAgICAgICAgICAgICAgdGhpcy5faW5uZXJWaWV3ID0gbmV3IFdlYkluc3BlY3Rv
ci5FbXB0eVZpZXcoIiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMu
X2lubmVyVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRW1wdHlWaWV3KFdlYkluc3BlY3Rvci5VSVN0
cmluZygiQmluYXJ5IEZpbGUiKSk7Ci0gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuX2lubmVyVmlldy5zaG93KHRoaXMuZWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlcnJvckNvZGUKLSAgICAgKiBA
cGFyYW0ge0ZpbGVTeXN0ZW1BZ2VudC5NZXRhZGF0YX0gbWV0YWRhdGEKLSAgICAgKi8KLSAgICBf
bWV0YWRhdGFSZWNlaXZlZDogZnVuY3Rpb24oZXJyb3JDb2RlLCBtZXRhZGF0YSkKLSAgICB7Ci0g
ICAgICAgIGlmIChlcnJvckNvZGUgfHwgIW1ldGFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmICh0aGlzLl9jb250ZW50KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2Nv
bnRlbnQudXBkYXRlTWV0YWRhdGEobWV0YWRhdGEpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lfSAqLyAodGhpcy5faW5uZXJWaWV3KTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRl
bnQucmVxdWVzdENvbnRlbnQoc291cmNlRnJhbWUuc2V0Q29udGVudC5iaW5kKHNvdXJjZUZyYW1l
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9pbm5lclZpZXcuZGV0YWNo
KCk7Ci0gICAgICAgICAgICB0aGlzLl9jb250ZW50ID0gbmV3IFdlYkluc3BlY3Rvci5GaWxlQ29u
dGVudFZpZXcuRmlsZUNvbnRlbnRQcm92aWRlcih0aGlzLl9maWxlLCBtZXRhZGF0YSk7Ci0gICAg
ICAgICAgICB0aGlzLl9pbm5lclZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRo
aXMuX2NvbnRlbnQpOwotICAgICAgICAgICAgdGhpcy5faW5uZXJWaWV3LnNob3codGhpcy5lbGVt
ZW50KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZWZyZXNoOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX2lubmVyVmlldykKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAodGhpcy5fZmlsZS5pc1RleHRGaWxlKQotICAgICAgICAgICAgdGhpcy5fZmls
ZS5yZXF1ZXN0TWV0YWRhdGEodGhpcy5fbWV0YWRhdGFSZWNlaXZlZC5iaW5kKHRoaXMpKTsKLSAg
ICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuQ29udGVu
dFByb3ZpZGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkZpbGV9
IGZpbGUKLSAqIEBwYXJhbSB7RmlsZVN5c3RlbUFnZW50Lk1ldGFkYXRhfSBtZXRhZGF0YQotICov
Ci1XZWJJbnNwZWN0b3IuRmlsZUNvbnRlbnRWaWV3LkZpbGVDb250ZW50UHJvdmlkZXIgPSBmdW5j
dGlvbihmaWxlLCBtZXRhZGF0YSkKLXsKLSAgICB0aGlzLl9maWxlID0gZmlsZTsKLSAgICB0aGlz
Ll9tZXRhZGF0YSA9IG1ldGFkYXRhOwotfQotCi1XZWJJbnNwZWN0b3IuRmlsZUNvbnRlbnRWaWV3
LkZpbGVDb250ZW50UHJvdmlkZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBjb250ZW50VVJMOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fZmlsZS51cmw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGV9Ci0gICAgICovCi0gICAgY29udGVu
dFR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9maWxlLnJlc291
cmNlVHlwZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3Ry
aW5nLCBib29sZWFuLCBzdHJpbmcpfSBjYWxsYmFjawotICAgICAqLwotICAgIHJlcXVlc3RDb250
ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBzaXplID0gLyoqIEB0
eXBlIHtudW1iZXJ9ICovICh0aGlzLl9tZXRhZGF0YS5zaXplKTsKLSAgICAgICAgdGhpcy5fZmls
ZS5yZXF1ZXN0RmlsZUNvbnRlbnQodHJ1ZSwgMCwgc2l6ZSwgdGhpcy5fY2hhcnNldCB8fCAiIiwg
dGhpcy5fZmlsZUNvbnRlbnRSZWNlaXZlZC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZywgYm9vbGVhbiwgc3Ry
aW5nKX0gY2FsbGJhY2sKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZXJyb3JDb2RlCi0gICAgICog
QHBhcmFtIHtzdHJpbmc9fSBjb250ZW50Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gYmFzZTY0
RW5jb2RlZAotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gY2hhcnNldAotICAgICAqLwotICAgIF9m
aWxlQ29udGVudFJlY2VpdmVkOiBmdW5jdGlvbihjYWxsYmFjaywgZXJyb3JDb2RlLCBjb250ZW50
LCBiYXNlNjRFbmNvZGVkLCBjaGFyc2V0KQotICAgIHsKLSAgICAgICAgaWYgKGVycm9yQ29kZSB8
fCAhY29udGVudCkgewotICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZmFsc2UsICIiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2NoYXJzZXQgPSBj
aGFyc2V0OwotICAgICAgICBjYWxsYmFjayhjb250ZW50LCBmYWxzZSwgdGhpcy5jb250ZW50VHlw
ZSgpLmNhbm9uaWNhbE1pbWVUeXBlKCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhc2VTZW5zaXRpdmUK
LSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVnZXgKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9u
KEFycmF5LjxXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyLlNlYXJjaE1hdGNoPil9IGNhbGxi
YWNrCi0gICAgICovCi0gICAgc2VhcmNoSW5Db250ZW50OiBmdW5jdGlvbihxdWVyeSwgY2FzZVNl
bnNpdGl2ZSwgaXNSZWdleCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBzZXRUaW1lb3V0KGNh
bGxiYWNrLmJpbmQobnVsbCwgW10pLCAwKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtGaWxlU3lzdGVtQWdlbnQuTWV0YWRhdGF9IG1ldGFkYXRhCi0gICAgICogQHJldHVybiB7
Ym9vbGVhbn0KLSAgICAgKi8KLSAgICB1cGRhdGVNZXRhZGF0YTogZnVuY3Rpb24obWV0YWRhdGEp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSA+PSBt
ZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB0aGlzLl9tZXRhZGF0YSA9IG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRmlsZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ZpbGVNYW5hZ2VyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
MzljMjdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RmlsZU1hbmFnZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5z
cGVjdG9yLkZpbGVNYW5hZ2VyID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuRmls
ZU1hbmFnZXIuRXZlbnRUeXBlcyA9IHsKLSAgICBTYXZlZFVSTDogIlNhdmVkVVJMIiwKLSAgICBB
cHBlbmRlZFRvVVJMOiAiQXBwZW5kZWRUb1VSTCIKLX0KLQotV2ViSW5zcGVjdG9yLkZpbGVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAg
ICAqLwotICAgIGNhblNhdmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY2FuU2F2ZSgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlU2F2ZUFzCi0gICAgICovCi0gICAgc2F2ZTogZnVuY3Rp
b24odXJsLCBjb250ZW50LCBmb3JjZVNhdmVBcykKLSAgICB7Ci0gICAgICAgIC8vIFJlbW92ZSB0
aGlzIHVybCBmcm9tIHRoZSBzYXZlZCBVUkxzIHdoaWxlIGl0IGlzIGJlaW5nIHNhdmVkLgotICAg
ICAgICB2YXIgc2F2ZWRVUkxzID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNhdmVkVVJMcy5nZXQo
KTsKLSAgICAgICAgZGVsZXRlIHNhdmVkVVJMc1t1cmxdOwotICAgICAgICBXZWJJbnNwZWN0b3Iu
c2V0dGluZ3Muc2F2ZWRVUkxzLnNldChzYXZlZFVSTHMpOwotICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZEhvc3Quc2F2ZSh1cmwsIGNvbnRlbnQsIGZhbHNlLCBmb3JjZVNhdmVBcyk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKi8KLSAgICBzYXZl
ZFVSTDogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgdmFyIHNhdmVkVVJMcyA9IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5zYXZlZFVSTHMuZ2V0KCk7Ci0gICAgICAgIHNhdmVkVVJMc1t1cmxd
ID0gdHJ1ZTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNhdmVkVVJMcy5zZXQoc2F2
ZWRVUkxzKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuU2F2ZWRVUkwsIHVybCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcmV0dXJuIHtib29sZWFu
fQotICAgICAqLwotICAgIGlzVVJMU2F2ZWQ6IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAg
IHZhciBzYXZlZFVSTHMgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2F2ZWRVUkxzLmdldCgpOwot
ICAgICAgICByZXR1cm4gc2F2ZWRVUkxzW3VybF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudAotICAg
ICAqLwotICAgIGFwcGVuZDogZnVuY3Rpb24odXJsLCBjb250ZW50KQotICAgIHsKLSAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmFwcGVuZCh1cmwsIGNvbnRlbnQpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICovCi0gICAgY2xvc2U6IGZ1
bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5jbG9zZSh1
cmwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAg
ICovCi0gICAgYXBwZW5kZWRUb1VSTDogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50
VHlwZXMuQXBwZW5kZWRUb1VSTCwgdXJsKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJ
bnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi1XZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlTWFwcGluZy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDU1ZGI1OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0ZpbGVNYXBwaW5nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuRmlsZU1hcHBpbmcgPSBmdW5j
dGlvbigpCi17Ci0gICAgdGhpcy5fbWFwcGluZ0VudHJpZXNTZXR0aW5nID0gV2ViSW5zcGVjdG9y
LnNldHRpbmdzLmNyZWF0ZVNldHRpbmcoImZpbGVNYXBwaW5nRW50cmllcyIsIFtdKTsKLSAgICAv
KiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuRmlsZU1hcHBpbmcuRW50cnk+fSAqLwotICAg
IHRoaXMuX2VudHJpZXMgPSBbXTsKLSAgICB0aGlzLl9sb2FkRnJvbVNldHRpbmdzKCk7Ci19Ci0K
LVdlYkluc3BlY3Rvci5GaWxlTWFwcGluZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IHVybAotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuRmlsZU1h
cHBpbmcuRW50cnl9Ci0gICAgICovCi0gICAgbWFwcGluZ0VudHJ5Rm9yVVJMOiBmdW5jdGlvbih1
cmwpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VudHJpZXMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2VudHJpZXNbaV07Ci0g
ICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoZW50cnkudXJsUHJlZml4KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoCi0gICAgICogQHJl
dHVybiB7P1dlYkluc3BlY3Rvci5GaWxlTWFwcGluZy5FbnRyeX0KLSAgICAgKi8KLSAgICBtYXBw
aW5nRW50cnlGb3JQYXRoOiBmdW5jdGlvbihwYXRoKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl9lbnRyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
ZW50cnkgPSB0aGlzLl9lbnRyaWVzW2ldOwotICAgICAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0
aChlbnRyeS5wYXRoUHJlZml4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge0FycmF5LjxXZWJJbnNwZWN0b3IuRmlsZU1hcHBpbmcuRW50cnk+fQotICAgICAqLwot
ICAgIG1hcHBpbmdFbnRyaWVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fZW50cmllcy5zbGljZSgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0Fy
cmF5LjxXZWJJbnNwZWN0b3IuRmlsZU1hcHBpbmcuRW50cnk+fSBtYXBwaW5nRW50cmllcwotICAg
ICAqLwotICAgIHNldE1hcHBpbmdFbnRyaWVzOiBmdW5jdGlvbihtYXBwaW5nRW50cmllcykKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2VudHJpZXMgPSBtYXBwaW5nRW50cmllczsKLSAgICAgICAgdGhp
cy5fbWFwcGluZ0VudHJpZXNTZXR0aW5nLnNldChtYXBwaW5nRW50cmllcyk7Ci0gICAgfSwKLQot
ICAgIF9sb2FkRnJvbVNldHRpbmdzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2F2
ZWRFbnRyaWVzID0gdGhpcy5fbWFwcGluZ0VudHJpZXNTZXR0aW5nLmdldCgpOwotICAgICAgICB0
aGlzLl9lbnRyaWVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2F2ZWRFbnRy
aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgZW50cnkgPSBuZXcgV2ViSW5zcGVj
dG9yLkZpbGVNYXBwaW5nLkVudHJ5KHNhdmVkRW50cmllc1tpXS51cmxQcmVmaXgsIHNhdmVkRW50
cmllc1tpXS5wYXRoUHJlZml4KTsKLSAgICAgICAgICAgIHRoaXMuX2VudHJpZXMucHVzaChlbnRy
eSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJp
bmd9IHVybFByZWZpeAotICogQHBhcmFtIHtzdHJpbmd9IHBhdGhQcmVmaXgKLSAqLwotV2ViSW5z
cGVjdG9yLkZpbGVNYXBwaW5nLkVudHJ5ID0gZnVuY3Rpb24odXJsUHJlZml4LCBwYXRoUHJlZml4
KQotewotICAgIHRoaXMudXJsUHJlZml4ID0gdXJsUHJlZml4OwotICAgIHRoaXMucGF0aFByZWZp
eCA9IHBhdGhQcmVmaXg7Ci19Ci0KLS8qKgotICogQHR5cGUgez9XZWJJbnNwZWN0b3IuRmlsZU1h
cHBpbmd9Ci0gKi8KLVdlYkluc3BlY3Rvci5maWxlTWFwcGluZyA9IG51bGw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0ZW1NYXBwaW5nLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlU3lzdGVtTWFwcGluZy5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2Y2VjMi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0ZW1NYXBwaW5nLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotV2Vi
SW5zcGVjdG9yLkZpbGVTeXN0ZW1NYXBwaW5nID0gZnVuY3Rpb24oKSB7IH0KLQotV2ViSW5zcGVj
dG9yLkZpbGVTeXN0ZW1NYXBwaW5nLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtBcnJheS48c3RyaW5nPn0KLSAgICAgKi8KLSAgICBmaWxlU3lzdGVtUGF0aHM6IGZ1bmN0
aW9uKCkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeAotICAg
ICAqIEByZXR1cm4gez9zdHJpbmd9Ci0gICAgICovCi0gICAgZmlsZVN5c3RlbVBhdGhGb3JQcmVm
aXg6IGZ1bmN0aW9uKHByZWZpeCkgeyB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
aW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1NYXBwaW5nfQotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5GaWxlU3lzdGVtTWFwcGlu
Z0ltcGwgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMp
OwotICAgIHRoaXMuX2ZpbGVTeXN0ZW1NYXBwaW5nU2V0dGluZyA9IFdlYkluc3BlY3Rvci5zZXR0
aW5ncy5jcmVhdGVTZXR0aW5nKCJmaWxlU3lzdGVtTWFwcGluZyIsIHt9KTsKLSAgICAvKiogQHR5
cGUgeyFPYmplY3QuPHN0cmluZywgYm9vbGVhbj59ICovCi0gICAgdGhpcy5fZmlsZVN5c3RlbVBh
dGhzID0ge307Ci0gICAgdGhpcy5fbG9hZEZyb21TZXR0aW5ncygpOwotfQotCi1XZWJJbnNwZWN0
b3IuRmlsZVN5c3RlbU1hcHBpbmdJbXBsLnByb3RvdHlwZSA9IHsKLSAgICBfbG9hZEZyb21TZXR0
aW5nczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNhdmVkTWFwcGluZyA9IHRoaXMu
X2ZpbGVTeXN0ZW1NYXBwaW5nU2V0dGluZy5nZXQoKTsKLSAgICAgICAgdGhpcy5fZmlsZVN5c3Rl
bVBhdGhzID0gc2F2ZWRNYXBwaW5nID8gLyoqIEB0eXBlIHshT2JqZWN0LjxzdHJpbmcsIHN0cmlu
Zz59ICovIChzYXZlZE1hcHBpbmcucmVnaXN0ZXJlZEZpbGVTeXN0ZW1QYXRocykgfHwge30gOiB7
fTsKLSAgICB9LAotCi0gICAgX3NhdmVUb1NldHRpbmdzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgc2F2ZWRNYXBwaW5nID0ge307Ci0gICAgICAgIHNhdmVkTWFwcGluZy5yZWdpc3Rl
cmVkRmlsZVN5c3RlbVBhdGhzID0gdGhpcy5fZmlsZVN5c3RlbVBhdGhzOwotICAgICAgICB0aGlz
Ll9maWxlU3lzdGVtTWFwcGluZ1NldHRpbmcuc2V0KHNhdmVkTWFwcGluZyk7Ci0gICAgfSwKLQot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVTeXN0ZW1QYXRoCi0gICAgICov
Ci0gICAgYWRkRmlsZVN5c3RlbU1hcHBpbmc6IGZ1bmN0aW9uKGZpbGVTeXN0ZW1QYXRoKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX2ZpbGVTeXN0ZW1QYXRoc1tmaWxlU3lzdGVtUGF0aF0pCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZmlsZVN5c3RlbVBhdGhzW2ZpbGVT
eXN0ZW1QYXRoXSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3NhdmVUb1NldHRpbmdzKCk7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9jYWNoZWRGaWxlU3lzdGVtUGF0aHM7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlU3lzdGVtUGF0aAotICAgICAqLwotICAgIHJl
bW92ZUZpbGVTeXN0ZW1NYXBwaW5nOiBmdW5jdGlvbihmaWxlU3lzdGVtUGF0aCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5fZmlsZVN5c3RlbVBhdGhzW2ZpbGVTeXN0ZW1QYXRoXSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2ZpbGVTeXN0ZW1QYXRoc1tmaWxl
U3lzdGVtUGF0aF07Ci0gICAgICAgIHRoaXMuX3NhdmVUb1NldHRpbmdzKCk7Ci0gICAgICAgIGRl
bGV0ZSB0aGlzLl9jYWNoZWRGaWxlU3lzdGVtUGF0aHM7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fQotICAgICAqLwotICAgIGZpbGVTeXN0ZW1QYXRo
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2Zp
bGVTeXN0ZW1QYXRocyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBwcmVmaXgKLSAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfQotICAgICAqLwotICAgIGZpbGVTeXN0
ZW1QYXRoRm9yUHJlZml4OiBmdW5jdGlvbihwcmVmaXgpCi0gICAgewotICAgICAgICB0aGlzLl9j
YWNoZWRGaWxlU3lzdGVtUGF0aHMgPSB0aGlzLl9jYWNoZWRGaWxlU3lzdGVtUGF0aHMgfHwge307
Ci0gICAgICAgIGlmICh0aGlzLl9jYWNoZWRGaWxlU3lzdGVtUGF0aHMuaGFzT3duUHJvcGVydHko
cHJlZml4KSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRGaWxlU3lzdGVtUGF0aHNb
cHJlZml4XTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7Ci0gICAgICAgIGZvciAodmFyIGZp
bGVTeXN0ZW1QYXRoIGluIHRoaXMuX2ZpbGVTeXN0ZW1QYXRocykgewotICAgICAgICAgICAgaWYg
KHByZWZpeC5zdGFydHNXaXRoKGZpbGVTeXN0ZW1QYXRoICsgIi8iKSkgewotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGZpbGVTeXN0ZW1QYXRoOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NhY2hlZEZpbGVTeXN0ZW1QYXRo
c1twcmVmaXhdID0gcmVzdWx0OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0ZW1Nb2RlbC5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3RlbU1vZGVsLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGMxMzcyLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3RlbU1vZGVsLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsNTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwg
PSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0g
ICAgdGhpcy5fZmlsZVN5c3RlbXNGb3JPcmlnaW4gPSB7fTsKLQotICAgIFdlYkluc3BlY3Rvci5y
ZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRy
ZWVNb2RlbC5FdmVudFR5cGVzLlNlY3VyaXR5T3JpZ2luQWRkZWQsIHRoaXMuX3NlY3VyaXR5T3Jp
Z2luQWRkZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLlNl
Y3VyaXR5T3JpZ2luUmVtb3ZlZCwgdGhpcy5fc2VjdXJpdHlPcmlnaW5SZW1vdmVkLCB0aGlzKTsK
LQotICAgIEZpbGVTeXN0ZW1BZ2VudC5lbmFibGUoKTsKLQotICAgIHRoaXMuX3Jlc2V0KCk7Ci19
Ci0KLVdlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwucHJvdG90eXBlID0gewotICAgIF9yZXNl
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgc2VjdXJpdHlPcmlnaW4gaW4g
dGhpcy5fZmlsZVN5c3RlbXNGb3JPcmlnaW4pCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVPcmln
aW4oc2VjdXJpdHlPcmlnaW4pOwotICAgICAgICB2YXIgc2VjdXJpdHlPcmlnaW5zID0gV2ViSW5z
cGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLnNlY3VyaXR5T3JpZ2lucygpOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHNlY3VyaXR5T3JpZ2lucy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IHRoaXMuX2FkZE9yaWdpbihzZWN1cml0eU9yaWdpbnNbaV0pOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBf
c2VjdXJpdHlPcmlnaW5BZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIg
c2VjdXJpdHlPcmlnaW4gPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGV2ZW50LmRhdGEpOwotICAg
ICAgICB0aGlzLl9hZGRPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBf
c2VjdXJpdHlPcmlnaW5SZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzZWN1cml0eU9yaWdpbiA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZXZlbnQuZGF0YSk7Ci0g
ICAgICAgIHRoaXMuX3JlbW92ZU9yaWdpbihzZWN1cml0eU9yaWdpbik7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN1cml0eU9yaWdpbgotICAgICAqLwotICAg
IF9hZGRPcmlnaW46IGZ1bmN0aW9uKHNlY3VyaXR5T3JpZ2luKQotICAgIHsKLSAgICAgICAgdGhp
cy5fZmlsZVN5c3RlbXNGb3JPcmlnaW5bc2VjdXJpdHlPcmlnaW5dID0ge307Ci0KLSAgICAgICAg
dmFyIHR5cGVzID0gWyJwZXJzaXN0ZW50IiwgInRlbXBvcmFyeSJdOwotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fcmVxdWVz
dEZpbGVTeXN0ZW1Sb290KHNlY3VyaXR5T3JpZ2luLCB0eXBlc1tpXSwgdGhpcy5fZmlsZVN5c3Rl
bVJvb3RSZWNlaXZlZC5iaW5kKHRoaXMsIHNlY3VyaXR5T3JpZ2luLCB0eXBlc1tpXSwgdGhpcy5f
ZmlsZVN5c3RlbXNGb3JPcmlnaW5bc2VjdXJpdHlPcmlnaW5dKSk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN1cml0eU9yaWdpbgotICAgICAqLwotICAgIF9y
ZW1vdmVPcmlnaW46IGZ1bmN0aW9uKHNlY3VyaXR5T3JpZ2luKQotICAgIHsKLSAgICAgICAgZm9y
ICh2YXIgdHlwZSBpbiB0aGlzLl9maWxlU3lzdGVtc0Zvck9yaWdpbltzZWN1cml0eU9yaWdpbl0p
IHsKLSAgICAgICAgICAgIHZhciBmaWxlU3lzdGVtID0gdGhpcy5fZmlsZVN5c3RlbXNGb3JPcmln
aW5bc2VjdXJpdHlPcmlnaW5dW3R5cGVdOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2ZpbGVT
eXN0ZW1zRm9yT3JpZ2luW3NlY3VyaXR5T3JpZ2luXVt0eXBlXTsKLSAgICAgICAgICAgIHRoaXMu
X2ZpbGVTeXN0ZW1SZW1vdmVkKGZpbGVTeXN0ZW0pOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0
ZSB0aGlzLl9maWxlU3lzdGVtc0Zvck9yaWdpbltzZWN1cml0eU9yaWdpbl07Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW4KLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gdHlwZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVyLCBGaWxlU3lzdGVtQWdl
bnQuRW50cnk9KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBfcmVxdWVzdEZpbGVTeXN0ZW1Sb290
OiBmdW5jdGlvbihvcmlnaW4sIHR5cGUsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLyoqCi0g
ICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFy
YW0ge251bWJlcn0gZXJyb3JDb2RlCi0gICAgICAgICAqIEBwYXJhbSB7RmlsZVN5c3RlbUFnZW50
LkVudHJ5PX0gYmFja2VuZFJvb3RFbnRyeQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
aW5uZXJDYWxsYmFjayhlcnJvciwgZXJyb3JDb2RlLCBiYWNrZW5kUm9vdEVudHJ5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhG
aWxlRXJyb3IuU0VDVVJJVFlfRVJSKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yQ29kZSwgYmFj
a2VuZFJvb3RFbnRyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBGaWxlU3lzdGVtQWdlbnQucmVx
dWVzdEZpbGVTeXN0ZW1Sb290KG9yaWdpbiwgdHlwZSwgaW5uZXJDYWxsYmFjay5iaW5kKHRoaXMp
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5
c3RlbU1vZGVsLkZpbGVTeXN0ZW19IGZpbGVTeXN0ZW0KLSAgICAgKi8KLSAgICBfZmlsZVN5c3Rl
bUFkZGVkOiBmdW5jdGlvbihmaWxlU3lzdGVtKQotICAgIHsKLSAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FdmVudFR5cGVz
LkZpbGVTeXN0ZW1BZGRlZCwgZmlsZVN5c3RlbSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlU3lzdGVtfSBmaWxlU3lz
dGVtCi0gICAgICovCi0gICAgX2ZpbGVTeXN0ZW1SZW1vdmVkOiBmdW5jdGlvbihmaWxlU3lzdGVt
KQotICAgIHsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLkZpbGVTeXN0ZW1Nb2RlbC5FdmVudFR5cGVzLkZpbGVTeXN0ZW1SZW1vdmVkLCBmaWxlU3lz
dGVtKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaEZpbGVTeXN0ZW1MaXN0OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9yZXNldCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gb3JpZ2luCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUKLSAgICAg
KiBAcGFyYW0ge09iamVjdC48V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlU3lzdGVt
Pn0gc3RvcmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZXJyb3JDb2RlCi0gICAgICogQHBhcmFt
IHtGaWxlU3lzdGVtQWdlbnQuRW50cnk9fSBiYWNrZW5kUm9vdEVudHJ5Ci0gICAgICovCi0gICAg
X2ZpbGVTeXN0ZW1Sb290UmVjZWl2ZWQ6IGZ1bmN0aW9uKG9yaWdpbiwgdHlwZSwgc3RvcmUsIGVy
cm9yQ29kZSwgYmFja2VuZFJvb3RFbnRyeSkKLSAgICB7Ci0gICAgICAgIGlmICghZXJyb3JDb2Rl
ICYmIGJhY2tlbmRSb290RW50cnkgJiYgdGhpcy5fZmlsZVN5c3RlbXNGb3JPcmlnaW5bb3JpZ2lu
XSA9PT0gc3RvcmUpIHsKLSAgICAgICAgICAgIHZhciBmaWxlU3lzdGVtID0gbmV3IFdlYkluc3Bl
Y3Rvci5GaWxlU3lzdGVtTW9kZWwuRmlsZVN5c3RlbSh0aGlzLCBvcmlnaW4sIHR5cGUsIGJhY2tl
bmRSb290RW50cnkpOwotICAgICAgICAgICAgc3RvcmVbdHlwZV0gPSBmaWxlU3lzdGVtOwotICAg
ICAgICAgICAgdGhpcy5fZmlsZVN5c3RlbUFkZGVkKGZpbGVTeXN0ZW0pOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1N
b2RlbC5EaXJlY3Rvcnl9IGRpcmVjdG9yeQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVy
LCBBcnJheS48V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRyeT49KX0gY2FsbGJhY2sK
LSAgICAgKi8KLSAgICByZXF1ZXN0RGlyZWN0b3J5Q29udGVudDogZnVuY3Rpb24oZGlyZWN0b3J5
LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlcXVlc3REaXJlY3RvcnlDb250ZW50
KGRpcmVjdG9yeS51cmwsIHRoaXMuX2RpcmVjdG9yeUNvbnRlbnRSZWNlaXZlZC5iaW5kKHRoaXMs
IGRpcmVjdG9yeSwgY2FsbGJhY2spKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IHVybAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVyLCBBcnJheS48Rmls
ZVN5c3RlbUFnZW50LkVudHJ5Pj0pfSBjYWxsYmFjawotICAgICAqLwotICAgIF9yZXF1ZXN0RGly
ZWN0b3J5Q29udGVudDogZnVuY3Rpb24odXJsLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8q
KgotICAgICAgICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICog
QHBhcmFtIHtudW1iZXJ9IGVycm9yQ29kZQotICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxGaWxl
U3lzdGVtQWdlbnQuRW50cnk+PX0gYmFja2VuZEVudHJpZXMKLSAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIGlubmVyQ2FsbGJhY2soZXJyb3IsIGVycm9yQ29kZSwgYmFja2VuZEVudHJpZXMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIGNh
bGxiYWNrKEZpbGVFcnJvci5TRUNVUklUWV9FUlIpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGVycm9yQ29kZSAh
PT0gMCkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yQ29kZSwgbnVsbCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYWxsYmFj
ayhlcnJvckNvZGUsIGJhY2tlbmRFbnRyaWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZpbGVT
eXN0ZW1BZ2VudC5yZXF1ZXN0RGlyZWN0b3J5Q29udGVudCh1cmwsIGlubmVyQ2FsbGJhY2suYmlu
ZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkZpbGVTeXN0ZW1Nb2RlbC5EaXJlY3Rvcnl9IHBhcmVudERpcmVjdG9yeQotICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb24obnVtYmVyLCBBcnJheS48V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5F
bnRyeT49KX0gY2FsbGJhY2sKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZXJyb3JDb2RlCi0gICAg
ICogQHBhcmFtIHtBcnJheS48RmlsZVN5c3RlbUFnZW50LkVudHJ5Pj19IGJhY2tlbmRFbnRyaWVz
Ci0gICAgICovCi0gICAgX2RpcmVjdG9yeUNvbnRlbnRSZWNlaXZlZDogZnVuY3Rpb24ocGFyZW50
RGlyZWN0b3J5LCBjYWxsYmFjaywgZXJyb3JDb2RlLCBiYWNrZW5kRW50cmllcykKLSAgICB7Ci0g
ICAgICAgIHZhciBlbnRyaWVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFj
a2VuZEVudHJpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChiYWNrZW5kRW50cmll
c1tpXS5pc0RpcmVjdG9yeSkKLSAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2gobmV3IFdlYklu
c3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwuRGlyZWN0b3J5KHRoaXMsIHBhcmVudERpcmVjdG9yeS5m
aWxlU3lzdGVtLCBiYWNrZW5kRW50cmllc1tpXSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVudHJpZXMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5G
aWxlKHRoaXMsIHBhcmVudERpcmVjdG9yeS5maWxlU3lzdGVtLCBiYWNrZW5kRW50cmllc1tpXSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FsbGJhY2soZXJyb3JDb2RlLCBlbnRyaWVzKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1v
ZGVsLkVudHJ5fSBlbnRyeQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVyLCBGaWxlU3lz
dGVtQWdlbnQuTWV0YWRhdGE9KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICByZXF1ZXN0TWV0YWRh
dGE6IGZ1bmN0aW9uKGVudHJ5LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAg
ICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtu
dW1iZXJ9IGVycm9yQ29kZQotICAgICAgICAgKiBAcGFyYW0ge0ZpbGVTeXN0ZW1BZ2VudC5NZXRh
ZGF0YT19IG1ldGFkYXRhCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBpbm5lckNhbGxi
YWNrKGVycm9yLCBlcnJvckNvZGUsIG1ldGFkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhGaWxlRXJyb3IuU0VDVVJJVFlf
RVJSKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yQ29kZSwgbWV0YWRhdGEpOwotICAgICAgICB9
Ci0KLSAgICAgICAgRmlsZVN5c3RlbUFnZW50LnJlcXVlc3RNZXRhZGF0YShlbnRyeS51cmwsIGlu
bmVyQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlfSBmaWxlCi0gICAgICogQHBhcmFt
IHtib29sZWFufSByZWFkQXNUZXh0Ci0gICAgICogQHBhcmFtIHtudW1iZXI9fSBzdGFydAotICAg
ICAqIEBwYXJhbSB7bnVtYmVyPX0gZW5kCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSBjaGFyc2V0
Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihudW1iZXIsIHN0cmluZz0sIHN0cmluZz0pPX0gY2Fs
bGJhY2sKLSAgICAgKi8KLSAgICByZXF1ZXN0RmlsZUNvbnRlbnQ6IGZ1bmN0aW9uKGZpbGUsIHJl
YWRBc1RleHQsIHN0YXJ0LCBlbmQsIGNoYXJzZXQsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAg
dGhpcy5fcmVxdWVzdEZpbGVDb250ZW50KGZpbGUudXJsLCByZWFkQXNUZXh0LCBzdGFydCwgZW5k
LCBjaGFyc2V0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSB1cmwKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWRBc1RleHQKLSAgICAgKiBA
cGFyYW0ge251bWJlcj19IHN0YXJ0Ci0gICAgICogQHBhcmFtIHtudW1iZXI9fSBlbmQKLSAgICAg
KiBAcGFyYW0ge3N0cmluZz19IGNoYXJzZXQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJl
ciwgc3RyaW5nPSwgc3RyaW5nPSk9fSBjYWxsYmFjawotICAgICAqLwotICAgIF9yZXF1ZXN0Rmls
ZUNvbnRlbnQ6IGZ1bmN0aW9uKHVybCwgcmVhZEFzVGV4dCwgc3RhcnQsIGVuZCwgY2hhcnNldCwg
Y2FsbGJhY2spCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9j
b2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlcnJvckNvZGUKLSAg
ICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBjb250ZW50Ci0gICAgICAgICAqIEBwYXJhbSB7c3Ry
aW5nPX0gY2hhcnNldAotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaW5uZXJDYWxsYmFj
ayhlcnJvciwgZXJyb3JDb2RlLCBjb250ZW50LCBjaGFyc2V0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKEZpbGVFcnJvci5TRUNVUklUWV9FUlIpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGNhbGxiYWNrKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yQ29kZSwgY29udGVu
dCwgY2hhcnNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGaWxlU3lzdGVtQWdlbnQucmVxdWVz
dEZpbGVDb250ZW50KHVybCwgcmVhZEFzVGV4dCwgc3RhcnQsIGVuZCwgY2hhcnNldCwgaW5uZXJD
YWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRyeX0gZW50cnkKLSAgICAgKiBAcGFyYW0ge2Z1
bmN0aW9uKG51bWJlcik9fSBjYWxsYmFjawotICAgICAqLwotICAgIGRlbGV0ZUVudHJ5OiBmdW5j
dGlvbihlbnRyeSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgZmlsZVN5c3RlbU1vZGVs
ID0gdGhpczsKLSAgICAgICAgaWYgKGVudHJ5ID09PSBlbnRyeS5maWxlU3lzdGVtLnJvb3QpCi0g
ICAgICAgICAgICB0aGlzLl9kZWxldGVFbnRyeShlbnRyeS51cmwsIGhvb2tGaWxlU3lzdGVtRGVs
ZXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9kZWxldGVFbnRyeShlbnRy
eS51cmwsIGNhbGxiYWNrKTsKLQotICAgICAgICBmdW5jdGlvbiBob29rRmlsZVN5c3RlbURlbGV0
aW9uKGVycm9yQ29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FsbGJhY2soZXJyb3JDb2Rl
KTsKLSAgICAgICAgICAgIGlmICghZXJyb3JDb2RlKQotICAgICAgICAgICAgICAgIGZpbGVTeXN0
ZW1Nb2RlbC5fcmVtb3ZlRmlsZVN5c3RlbShlbnRyeS5maWxlU3lzdGVtKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBh
cmFtIHtmdW5jdGlvbihudW1iZXIpPX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBfZGVsZXRlRW50
cnk6IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAg
ICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBlcnJvckNvZGUKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGlubmVyQ2FsbGJh
Y2soZXJyb3IsIGVycm9yQ29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQotICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayhGaWxlRXJyb3IuU0VDVVJJVFlfRVJSKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjYWxsYmFjaykKLSAg
ICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvckNvZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
RmlsZVN5c3RlbUFnZW50LmRlbGV0ZUVudHJ5KHVybCwgaW5uZXJDYWxsYmFjay5iaW5kKHRoaXMp
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5
c3RlbU1vZGVsLkZpbGVTeXN0ZW19IGZpbGVTeXN0ZW0KLSAgICAgKi8KLSAgICBfcmVtb3ZlRmls
ZVN5c3RlbTogZnVuY3Rpb24oZmlsZVN5c3RlbSkKLSAgICB7Ci0gICAgICAgIHZhciBvcmlnaW4g
PSBmaWxlU3lzdGVtLm9yaWdpbjsKLSAgICAgICAgdmFyIHR5cGUgPSBmaWxlU3lzdGVtLnR5cGU7
Ci0gICAgICAgIGlmICh0aGlzLl9maWxlU3lzdGVtc0Zvck9yaWdpbltvcmlnaW5dICYmIHRoaXMu
X2ZpbGVTeXN0ZW1zRm9yT3JpZ2luW29yaWdpbl1bdHlwZV0pIHsKLSAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLl9maWxlU3lzdGVtc0Zvck9yaWdpbltvcmlnaW5dW3R5cGVdOwotICAgICAgICAgICAg
dGhpcy5fZmlsZVN5c3RlbVJlbW92ZWQoZmlsZVN5c3RlbSk7Ci0KLSAgICAgICAgICAgIGlmIChP
YmplY3QuaXNFbXB0eSh0aGlzLl9maWxlU3lzdGVtc0Zvck9yaWdpbltvcmlnaW5dKSkKLSAgICAg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fZmlsZVN5c3RlbXNGb3JPcmlnaW5bb3JpZ2luXTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJv
dG90eXBlCi19Ci0KLQotV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FdmVudFR5cGVzID0g
ewotICAgIEZpbGVTeXN0ZW1BZGRlZDogIkZpbGVTeXN0ZW1BZGRlZCIsCi0gICAgRmlsZVN5c3Rl
bVJlbW92ZWQ6ICJGaWxlU3lzdGVtUmVtb3ZlZCIKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbH0gZmlsZVN5c3RlbU1vZGVs
Ci0gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luCi0gKiBAcGFyYW0ge3N0cmluZ30gdHlwZQotICog
QHBhcmFtIHtGaWxlU3lzdGVtQWdlbnQuRW50cnl9IGJhY2tlbmRSb290RW50cnkKLSAqLwotV2Vi
SW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlU3lzdGVtID0gZnVuY3Rpb24oZmlsZVN5c3Rl
bU1vZGVsLCBvcmlnaW4sIHR5cGUsIGJhY2tlbmRSb290RW50cnkpCi17Ci0gICAgdGhpcy5vcmln
aW4gPSBvcmlnaW47Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLQotICAgIHRoaXMucm9vdCA9IG5l
dyBXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkRpcmVjdG9yeShmaWxlU3lzdGVtTW9kZWws
IHRoaXMsIGJhY2tlbmRSb290RW50cnkpOwotfQotCi1XZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1v
ZGVsLkZpbGVTeXN0ZW0ucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEB0eXBlIHtzdHJp
bmd9Ci0gICAgICovCi0gICAgZ2V0IG5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJmaWxl
c3lzdGVtOiIgKyB0aGlzLm9yaWdpbiArICIvIiArIHRoaXMudHlwZTsKLSAgICB9Ci19Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9k
ZWx9IGZpbGVTeXN0ZW1Nb2RlbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1v
ZGVsLkZpbGVTeXN0ZW19IGZpbGVTeXN0ZW0KLSAqIEBwYXJhbSB7RmlsZVN5c3RlbUFnZW50LkVu
dHJ5fSBiYWNrZW5kRW50cnkKLSAqLwotV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRy
eSA9IGZ1bmN0aW9uKGZpbGVTeXN0ZW1Nb2RlbCwgZmlsZVN5c3RlbSwgYmFja2VuZEVudHJ5KQot
ewotICAgIHRoaXMuX2ZpbGVTeXN0ZW1Nb2RlbCA9IGZpbGVTeXN0ZW1Nb2RlbDsKLSAgICB0aGlz
Ll9maWxlU3lzdGVtID0gZmlsZVN5c3RlbTsKLQotICAgIHRoaXMuX3VybCA9IGJhY2tlbmRFbnRy
eS51cmw7Ci0gICAgdGhpcy5fbmFtZSA9IGJhY2tlbmRFbnRyeS5uYW1lOwotICAgIHRoaXMuX2lz
RGlyZWN0b3J5ID0gYmFja2VuZEVudHJ5LmlzRGlyZWN0b3J5OwotfQotCi0vKioKLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRyeX0geAotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkVudHJ5fSB5Ci0gKiBAcmV0dXJuIHtudW1iZXJ9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwuRW50cnkuY29tcGFyZSA9IGZ1bmN0aW9u
KHgsIHkpCi17Ci0gICAgaWYgKHguaXNEaXJlY3RvcnkgIT0geS5pc0RpcmVjdG9yeSkKLSAgICAg
ICAgcmV0dXJuIHkuaXNEaXJlY3RvcnkgPyAxIDogLTE7Ci0gICAgcmV0dXJuIHgubmFtZS5jb21w
YXJlVG8oeS5uYW1lKTsKLX0KLQotV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRyeS5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHR5cGUge1dlYkluc3BlY3Rvci5GaWxlU3lz
dGVtTW9kZWx9Ci0gICAgICovCi0gICAgZ2V0IGZpbGVTeXN0ZW1Nb2RlbCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fZmlsZVN5c3RlbU1vZGVsOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlU3lzdGVtfQotICAg
ICAqLwotICAgIGdldCBmaWxlU3lzdGVtKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9m
aWxlU3lzdGVtOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAdHlwZSB7c3RyaW5nfQotICAg
ICAqLwotICAgIGdldCB1cmwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3VybDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHR5cGUge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQg
bmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHR5cGUge2Jvb2xlYW59Ci0gICAgICovCi0gICAgZ2V0IGlzRGlyZWN0b3J5
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pc0RpcmVjdG9yeTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihudW1iZXIsIEZpbGVTeXN0ZW1BZ2VudC5N
ZXRhZGF0YSl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdE1ldGFkYXRhOiBmdW5jdGlv
bihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuZmlsZVN5c3RlbU1vZGVsLnJlcXVlc3RN
ZXRhZGF0YSh0aGlzLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb24obnVtYmVyKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBkZWxldGVFbnRyeTog
ZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLmZpbGVTeXN0ZW1Nb2RlbC5k
ZWxldGVFbnRyeSh0aGlzLCBjYWxsYmFjayk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwuRW50cnl9Ci0g
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9kZWx9IGZpbGVTeXN0ZW1Nb2RlbAot
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkZpbGVTeXN0ZW19IGZpbGVT
eXN0ZW0KLSAqIEBwYXJhbSB7RmlsZVN5c3RlbUFnZW50LkVudHJ5fSBiYWNrZW5kRW50cnkKLSAq
LwotV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5EaXJlY3RvcnkgPSBmdW5jdGlvbihmaWxl
U3lzdGVtTW9kZWwsIGZpbGVTeXN0ZW0sIGJhY2tlbmRFbnRyeSkKLXsKLSAgICBXZWJJbnNwZWN0
b3IuRmlsZVN5c3RlbU1vZGVsLkVudHJ5LmNhbGwodGhpcywgZmlsZVN5c3RlbU1vZGVsLCBmaWxl
U3lzdGVtLCBiYWNrZW5kRW50cnkpOwotfQotCi1XZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVs
LkRpcmVjdG9yeS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlv
bihudW1iZXIsIEFycmF5LjxXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkRpcmVjdG9yeT4p
fSBjYWxsYmFjawotICAgICAqLwotICAgIHJlcXVlc3REaXJlY3RvcnlDb250ZW50OiBmdW5jdGlv
bihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuZmlsZVN5c3RlbU1vZGVsLnJlcXVlc3RE
aXJlY3RvcnlDb250ZW50KHRoaXMsIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkVudHJ5LnByb3RvdHlwZQotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9k
ZWwuRW50cnl9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9kZWx9IGZpbGVT
eXN0ZW1Nb2RlbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkZpbGVT
eXN0ZW19IGZpbGVTeXN0ZW0KLSAqIEBwYXJhbSB7RmlsZVN5c3RlbUFnZW50LkVudHJ5fSBiYWNr
ZW5kRW50cnkKLSAqLwotV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlID0gZnVuY3Rp
b24oZmlsZVN5c3RlbU1vZGVsLCBmaWxlU3lzdGVtLCBiYWNrZW5kRW50cnkpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRyeS5jYWxsKHRoaXMsIGZpbGVTeXN0ZW1Nb2Rl
bCwgZmlsZVN5c3RlbSwgYmFja2VuZEVudHJ5KTsKLQotICAgIHRoaXMuX21pbWVUeXBlID0gYmFj
a2VuZEVudHJ5Lm1pbWVUeXBlOwotICAgIHRoaXMuX3Jlc291cmNlVHlwZSA9IFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVR5cGVzW2JhY2tlbmRFbnRyeS5yZXNvdXJjZVR5cGVdOwotICAgIHRoaXMuX2lz
VGV4dEZpbGUgPSBiYWNrZW5kRW50cnkuaXNUZXh0RmlsZTsKLX0KLQotV2ViSW5zcGVjdG9yLkZp
bGVTeXN0ZW1Nb2RlbC5GaWxlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7
c3RyaW5nfQotICAgICAqLwotICAgIGdldCBtaW1lVHlwZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fbWltZVR5cGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEB0eXBlIHtXZWJJ
bnNwZWN0b3IuUmVzb3VyY2VUeXBlfQotICAgICAqLwotICAgIGdldCByZXNvdXJjZVR5cGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlVHlwZTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHR5cGUge2Jvb2xlYW59Ci0gICAgICovCi0gICAgZ2V0IGlzVGV4dEZpbGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lzVGV4dEZpbGU7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhZEFzVGV4dAotICAgICAqIEBwYXJhbSB7
bnVtYmVyPX0gc3RhcnQKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IGVuZAotICAgICAqIEBwYXJh
bSB7c3RyaW5nPX0gY2hhcnNldAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVyLCBzdHJp
bmc9KT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdEZpbGVDb250ZW50OiBmdW5jdGlv
bihyZWFkQXNUZXh0LCBzdGFydCwgZW5kLCBjaGFyc2V0LCBjYWxsYmFjaykKLSAgICB7Ci0gICAg
ICAgIHRoaXMuZmlsZVN5c3RlbU1vZGVsLnJlcXVlc3RGaWxlQ29udGVudCh0aGlzLCByZWFkQXNU
ZXh0LCBzdGFydCwgZW5kLCBjaGFyc2V0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FbnRyeS5wcm90b3R5cGUKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVN5c3RlbVBy
b2plY3REZWxlZ2F0ZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmls
ZVN5c3RlbVByb2plY3REZWxlZ2F0ZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGM3MWJjZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ZpbGVTeXN0ZW1Qcm9qZWN0RGVsZWdhdGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlBy
b2plY3REZWxlZ2F0ZX0KLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtfSBpc29sYXRlZEZpbGVTeXN0ZW0K
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldvcmtzcGFjZX0gd29ya3NwYWNlCi0gKi8KLVdlYklu
c3BlY3Rvci5GaWxlU3lzdGVtUHJvamVjdERlbGVnYXRlID0gZnVuY3Rpb24oaXNvbGF0ZWRGaWxl
U3lzdGVtLCB3b3Jrc3BhY2UpCi17Ci0gICAgdGhpcy5fZmlsZVN5c3RlbSA9IGlzb2xhdGVkRmls
ZVN5c3RlbTsKLSAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5GaWxlU3lzdGVtUHJvamVjdERlbGVnYXRlLl9zY3JpcHRFeHRlbnNpb25zID0gWyJqcyIs
ICJqYXZhIiwgImNjIiwgImNwcCIsICJoIiwgImNzIiwgInB5IiwgInBocCJdLmtleVNldCgpOwot
Ci1XZWJJbnNwZWN0b3IuRmlsZVN5c3RlbVByb2plY3REZWxlZ2F0ZS5wcm9qZWN0SWQgPSBmdW5j
dGlvbihmaWxlU3lzdGVtUGF0aCkKLXsKLSAgICByZXR1cm4gImZpbGVzeXN0ZW06IiArIGZpbGVT
eXN0ZW1QYXRoOwotfQotCi1XZWJJbnNwZWN0b3IuRmlsZVN5c3RlbVByb2plY3REZWxlZ2F0ZS5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwot
ICAgIGlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkZp
bGVTeXN0ZW1Qcm9qZWN0RGVsZWdhdGUucHJvamVjdElkKHRoaXMuX2ZpbGVTeXN0ZW0ucGF0aCgp
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwot
ICAgIHR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
cHJvamVjdFR5cGVzLkZpbGVTeXN0ZW07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBmaWxlU3lzdGVtUGF0aDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVTeXN0ZW0ucGF0aCgpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZGlzcGxheU5hbWU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9maWxlU3lzdGVtLnBhdGgo
KS5zdWJzdHIodGhpcy5fZmlsZVN5c3RlbS5wYXRoKCkubGFzdEluZGV4T2YoIi8iKSArIDEpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoCi0g
ICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIF9maWxlUGF0aEZvclBhdGg6IGZ1
bmN0aW9uKHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gIi8iICsgcGF0aC5qb2luKCIvIik7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGgK
LSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmcsYm9vbGVhbixzdHJpbmcpfSBjYWxsYmFj
awotICAgICAqLwotICAgIHJlcXVlc3RGaWxlQ29udGVudDogZnVuY3Rpb24ocGF0aCwgY2FsbGJh
Y2spCi0gICAgewotICAgICAgICB2YXIgZmlsZVBhdGggPSB0aGlzLl9maWxlUGF0aEZvclBhdGgo
cGF0aCk7Ci0gICAgICAgIHRoaXMuX2ZpbGVTeXN0ZW0ucmVxdWVzdEZpbGVDb250ZW50KGZpbGVQ
YXRoLCBpbm5lckNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgICAgICAKLSAgICAgICAgLyoqCi0g
ICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAotICAgICAgICAgKi8KLSAgICAgICAg
ZnVuY3Rpb24gaW5uZXJDYWxsYmFjayhjb250ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgY29udGVudFR5cGUgPSB0aGlzLl9jb250ZW50VHlwZUZvclBhdGgocGF0aCk7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhjb250ZW50LCBmYWxzZSwgY29udGVudFR5cGUuY2Fub25pY2FsTWltZVR5
cGUoKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9v
bGVhbn0KLSAgICAgKi8KLSAgICBjYW5TZXRGaWxlQ29udGVudDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
QXJyYXkuPHN0cmluZz59IHBhdGgKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3Q29udGVudAot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyl9IGNhbGxiYWNrCi0gICAgICovCi0gICAg
c2V0RmlsZUNvbnRlbnQ6IGZ1bmN0aW9uKHBhdGgsIG5ld0NvbnRlbnQsIGNhbGxiYWNrKQotICAg
IHsKLSAgICAgICAgdmFyIGZpbGVQYXRoID0gdGhpcy5fZmlsZVBhdGhGb3JQYXRoKHBhdGgpOwot
ICAgICAgICB0aGlzLl9maWxlU3lzdGVtLnNldEZpbGVDb250ZW50KGZpbGVQYXRoLCBuZXdDb250
ZW50LCBjYWxsYmFjay5iaW5kKHRoaXMsICIiKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGgKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVl
cnkKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhc2VTZW5zaXRpdmUKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGlzUmVnZXgKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxXZWJJbnNw
ZWN0b3IuQ29udGVudFByb3ZpZGVyLlNlYXJjaE1hdGNoPil9IGNhbGxiYWNrCi0gICAgICovCi0g
ICAgc2VhcmNoSW5GaWxlQ29udGVudDogZnVuY3Rpb24ocGF0aCwgcXVlcnksIGNhc2VTZW5zaXRp
dmUsIGlzUmVnZXgsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIGZpbGVQYXRoID0gdGhp
cy5fZmlsZVBhdGhGb3JQYXRoKHBhdGgpOwotICAgICAgICB0aGlzLl9maWxlU3lzdGVtLnJlcXVl
c3RGaWxlQ29udGVudChmaWxlUGF0aCwgY29udGVudENhbGxiYWNrLmJpbmQodGhpcykpOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKLSAgICAgICAg
ICovCi0gICAgICAgIGZ1bmN0aW9uIGNvbnRlbnRDYWxsYmFjayhjb250ZW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgICAgICBpZiAoY29udGVudCAh
PT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBXZWJJbnNwZWN0b3IuQ29udGVudFBy
b3ZpZGVyLnBlcmZvcm1TZWFyY2hJbkNvbnRlbnQoY29udGVudCwgcXVlcnksIGNhc2VTZW5zaXRp
dmUsIGlzUmVnZXgpOwotICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoCi0g
ICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJlc291cmNlVHlwZX0KLSAgICAgKi8KLSAgICBf
Y29udGVudFR5cGVGb3JQYXRoOiBmdW5jdGlvbihwYXRoKQotICAgIHsKLSAgICAgICAgdmFyIGZp
bGVOYW1lID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdOwotICAgICAgICB2YXIgZXh0ZW5zaW9uSW5k
ZXggPSBmaWxlTmFtZS5sYXN0SW5kZXhPZigiLiIpOwotICAgICAgICB2YXIgZXh0ZW5zaW9uID0g
IiI7Ci0gICAgICAgIGlmIChleHRlbnNpb25JbmRleCAhPT0gLTEpCi0gICAgICAgICAgICBleHRl
bnNpb24gPSBmaWxlTmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uSW5kZXggKyAxKTsKLSAgICAgICAg
dmFyIGNvbnRlbnRUeXBlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuT3RoZXI7Ci0gICAg
ICAgIGlmIChXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbVByb2plY3REZWxlZ2F0ZS5fc2NyaXB0RXh0
ZW5zaW9uc1tleHRlbnNpb25dKQotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5yZXNv
dXJjZVR5cGVzLlNjcmlwdDsKLSAgICAgICAgaWYgKGV4dGVuc2lvbiA9PT0gImNzcyIpCi0gICAg
ICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldDsKLSAg
ICAgICAgaWYgKGV4dGVuc2lvbiA9PT0gImh0bWwiKQotICAgICAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5yZXNvdXJjZVR5cGVzLkRvY3VtZW50OwotICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLnJlc291cmNlVHlwZXMuT3RoZXI7Ci0gICAgfSwKLQotICAgIHBvcHVsYXRlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9maWxlU3lzdGVtLnJlcXVlc3RGaWxlc1JlY3Vyc2l2
ZSgiIiwgZmlsZUxvYWRlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICBmdW5jdGlvbiBmaWxlTG9h
ZGVkKGZpbGVQYXRoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcGF0aCA9IGZpbGVQYXRo
LnNwbGl0KCIvIik7Ci0gICAgICAgICAgICBwYXRoLnNoaWZ0KCk7Ci0gICAgICAgICAgICBjb25z
b2xlLmFzc2VydChwYXRoLmxlbmd0aCk7Ci0gICAgICAgICAgICB2YXIgZnVsbFBhdGggPSB0aGlz
Ll9maWxlU3lzdGVtLnBhdGgoKSArIGZpbGVQYXRoOwotICAgICAgICAgICAgdmFyIHVybCA9IHRo
aXMuX3dvcmtzcGFjZS51cmxGb3JQYXRoKGZ1bGxQYXRoKTsKLSAgICAgICAgICAgIHZhciBjb250
ZW50VHlwZSA9IHRoaXMuX2NvbnRlbnRUeXBlRm9yUGF0aChwYXRoKTsKLSAgICAgICAgICAgIHZh
ciBmaWxlRGVzY3JpcHRvciA9IG5ldyBXZWJJbnNwZWN0b3IuRmlsZURlc2NyaXB0b3IocGF0aCwg
ImZpbGU6Ly8iICsgZnVsbFBhdGgsIHVybCwgY29udGVudFR5cGUsIHRydWUpOwotICAgICAgICAg
ICAgdGhpcy5fYWRkRmlsZShmaWxlRGVzY3JpcHRvcik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZURlc2NyaXB0b3J9IGZpbGVE
ZXNjcmlwdG9yCi0gICAgICovCi0gICAgX2FkZEZpbGU6IGZ1bmN0aW9uKGZpbGVEZXNjcmlwdG9y
KQotICAgIHsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlByb2plY3REZWxlZ2F0ZS5FdmVudHMuRmlsZUFkZGVkLCBmaWxlRGVzY3JpcHRvcik7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGgKLSAg
ICAgKi8KLSAgICBfcmVtb3ZlRmlsZTogZnVuY3Rpb24ocGF0aCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9qZWN0RGVsZWdhdGUu
RXZlbnRzLkZpbGVSZW1vdmVkLCBwYXRoKTsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5Qcm9qZWN0RGVsZWdhdGUuRXZlbnRzLlJlc2V0LCBudWxsKTsKLSAgICB9LAotICAgIAot
ICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0g
KiBAdHlwZSB7P1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtUHJvamVjdERlbGVnYXRlfQotICovCi1X
ZWJJbnNwZWN0b3IuZmlsZVN5c3RlbVByb2plY3REZWxlZ2F0ZSA9IG51bGw7Ci0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Jc29sYXRlZEZpbGVTeXN0ZW1N
YW5hZ2VyfSBpc29sYXRlZEZpbGVTeXN0ZW1NYW5hZ2VyCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5Xb3Jrc3BhY2V9IHdvcmtzcGFjZQotICovCi1XZWJJbnNwZWN0b3IuRmlsZVN5c3RlbVdvcmtz
cGFjZVByb3ZpZGVyID0gZnVuY3Rpb24oaXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdlciwgd29ya3Nw
YWNlKQotewotICAgIHRoaXMuX2lzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIgPSBpc29sYXRlZEZp
bGVTeXN0ZW1NYW5hZ2VyOwotICAgIHRoaXMuX3dvcmtzcGFjZSA9IHdvcmtzcGFjZTsKLSAgICB0
aGlzLl9pc29sYXRlZEZpbGVTeXN0ZW1NYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLklzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIuRXZlbnRzLkZpbGVTeXN0ZW1BZGRlZCwgdGhp
cy5fZmlsZVN5c3RlbUFkZGVkLCB0aGlzKTsKLSAgICB0aGlzLl9pc29sYXRlZEZpbGVTeXN0ZW1N
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbU1h
bmFnZXIuRXZlbnRzLkZpbGVTeXN0ZW1SZW1vdmVkLCB0aGlzLl9maWxlU3lzdGVtUmVtb3ZlZCwg
dGhpcyk7Ci0gICAgdGhpcy5fc2ltcGxlUHJvamVjdERlbGVnYXRlcyA9IHt9OwotfQotCi1XZWJJ
bnNwZWN0b3IuRmlsZVN5c3RlbVdvcmtzcGFjZVByb3ZpZGVyLnByb3RvdHlwZSA9IHsKLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAg
ICBfZmlsZVN5c3RlbUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBm
aWxlU3lzdGVtID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtfSAq
LyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHZhciBwcm9qZWN0SWQgPSBXZWJJbnNwZWN0b3IuRmls
ZVN5c3RlbVByb2plY3REZWxlZ2F0ZS5wcm9qZWN0SWQoZmlsZVN5c3RlbS5wYXRoKCkpOwotICAg
ICAgICB2YXIgcHJvamVjdERlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5GaWxlU3lzdGVtUHJv
amVjdERlbGVnYXRlKGZpbGVTeXN0ZW0sIHRoaXMuX3dvcmtzcGFjZSkKLSAgICAgICAgdGhpcy5f
c2ltcGxlUHJvamVjdERlbGVnYXRlc1twcm9qZWN0RGVsZWdhdGUuaWQoKV0gPSBwcm9qZWN0RGVs
ZWdhdGU7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl93b3Jrc3BhY2UucHJvamVjdChw
cm9qZWN0RGVsZWdhdGUuaWQoKSkpOwotICAgICAgICB0aGlzLl93b3Jrc3BhY2UuYWRkUHJvamVj
dChwcm9qZWN0RGVsZWdhdGUpOwotICAgICAgICBwcm9qZWN0RGVsZWdhdGUucG9wdWxhdGUoKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2
ZW50Ci0gICAgICovCi0gICAgX2ZpbGVTeXN0ZW1SZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHZhciBmaWxlU3lzdGVtID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSXNv
bGF0ZWRGaWxlU3lzdGVtfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHZhciBwcm9qZWN0SWQg
PSBXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbVByb2plY3REZWxlZ2F0ZS5wcm9qZWN0SWQoZmlsZVN5
c3RlbS5wYXRoKCkpOwotICAgICAgICB0aGlzLl93b3Jrc3BhY2UucmVtb3ZlUHJvamVjdChwcm9q
ZWN0SWQpOwotICAgICAgICBkZWxldGUgdGhpcy5fc2ltcGxlUHJvamVjdERlbGVnYXRlc1twcm9q
ZWN0SWRdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqLwotICAgIGZpbGVTeXN0ZW1QYXRoOiBm
dW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIgcHJvamVjdERlbGVnYXRl
ID0gdGhpcy5fc2ltcGxlUHJvamVjdERlbGVnYXRlc1t1aVNvdXJjZUNvZGUucHJvamVjdCgpLmlk
KCldOwotICAgICAgICByZXR1cm4gcHJvamVjdERlbGVnYXRlLmZpbGVTeXN0ZW1QYXRoKCk7Ci0g
ICAgfQotfQotCi0vKioKLSAqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Xb3Jrc3Bh
Y2VQcm92aWRlcn0KLSAqLwotV2ViSW5zcGVjdG9yLmZpbGVTeXN0ZW1Xb3Jrc3BhY2VQcm92aWRl
ciA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ZpbGVTeXN0ZW1WaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9G
aWxlU3lzdGVtVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3ZTg3My4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVTeXN0
ZW1WaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TaWRlYmFyVmlld30KLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlU3lzdGVtfSBmaWxlU3lzdGVtCi0gKi8K
LVdlYkluc3BlY3Rvci5GaWxlU3lzdGVtVmlldyA9IGZ1bmN0aW9uKGZpbGVTeXN0ZW0pCi17Ci0g
ICAgV2ViSW5zcGVjdG9yLlNpZGViYXJWaWV3LmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlNpZGVi
YXJWaWV3LlNpZGViYXJQb3NpdGlvbi5TdGFydCwgIkZpbGVTeXN0ZW1WaWV3U2lkZWJhcldpZHRo
Iik7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImZpbGUtc3lzdGVtLXZpZXciKTsK
LSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygic3RvcmFnZS12aWV3Iik7Ci0KLSAgICB2
YXIgZGlyZWN0b3J5VHJlZUVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoIm9sIiwg
ImZpbGVzeXN0ZW0tZGlyZWN0b3J5LXRyZWUiKTsKLSAgICB0aGlzLl9kaXJlY3RvcnlUcmVlID0g
bmV3IFRyZWVPdXRsaW5lKGRpcmVjdG9yeVRyZWVFbGVtZW50KTsKLSAgICB0aGlzLnNpZGViYXJF
bGVtZW50LmFwcGVuZENoaWxkKGRpcmVjdG9yeVRyZWVFbGVtZW50KTsKLSAgICB0aGlzLnNpZGVi
YXJFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm91dGxpbmUtZGlzY2xvc3VyZSIpOwotICAgIHRoaXMu
c2lkZWJhckVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2lkZWJhciIpOwotCi0gICAgdmFyIHJvb3RJ
dGVtID0gbmV3IFdlYkluc3BlY3Rvci5GaWxlU3lzdGVtVmlldy5FbnRyeVRyZWVFbGVtZW50KHRo
aXMsIGZpbGVTeXN0ZW0ucm9vdCk7Ci0gICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlOwotICAg
IHRoaXMuX2RpcmVjdG9yeVRyZWUuYXBwZW5kQ2hpbGQocm9vdEl0ZW0pOwotICAgIHRoaXMuX3Zp
c2libGVWaWV3ID0gbnVsbDsKLQotICAgIHRoaXMuX3JlZnJlc2hCdXR0b24gPSBuZXcgV2ViSW5z
cGVjdG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlZnJlc2giKSwg
InJlZnJlc2gtc3RvcmFnZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLl9yZWZyZXNoQnV0
dG9uLnZpc2libGUgPSB0cnVlOwotICAgIHRoaXMuX3JlZnJlc2hCdXR0b24uYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLl9yZWZyZXNoLCB0aGlzKTsKLQotICAgIHRoaXMuX2RlbGV0ZUJ1
dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKFdlYkluc3BlY3Rvci5VSVN0
cmluZygiRGVsZXRlIiksICJkZWxldGUtc3RvcmFnZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0
aGlzLl9kZWxldGVCdXR0b24udmlzaWJsZSA9IHRydWU7Ci0gICAgdGhpcy5fZGVsZXRlQnV0dG9u
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fY29uZmlybURlbGV0ZSwgdGhpcyk7Ci19
Ci0KLVdlYkluc3BlY3Rvci5GaWxlU3lzdGVtVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQotICAgICAqLwotICAgIHN0YXR1c0Jhckl0
ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMuX3JlZnJlc2hCdXR0
b24uZWxlbWVudCwgdGhpcy5fZGVsZXRlQnV0dG9uLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gICAgICovCi0gICAgZ2V0IHZp
c2libGVWaWV3KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlVmlldzsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVmlld30gdmlldwot
ICAgICAqLwotICAgIHNob3dWaWV3OiBmdW5jdGlvbih2aWV3KQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX3Zpc2libGVWaWV3ID09PSB2aWV3KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAodGhpcy5fdmlzaWJsZVZpZXcpCi0gICAgICAgICAgICB0aGlzLl92aXNpYmxlVmlldy5k
ZXRhY2goKTsKLSAgICAgICAgdGhpcy5fdmlzaWJsZVZpZXcgPSB2aWV3OwotICAgICAgICB2aWV3
LnNob3codGhpcy5tYWluRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9kaXJlY3RvcnlUcmVlLmNoaWxkcmVuWzBdLnJlZnJl
c2goKTsKLSAgICB9LAotCi0gICAgX2NvbmZpcm1EZWxldGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChjb25maXJtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQXJlIHlvdSBzdXJlIHlv
dSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgZW50cnk/IikpKQotICAgICAgICAgICAgdGhp
cy5fZGVsZXRlKCk7Ci0gICAgfSwKLQotICAgIF9kZWxldGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2RpcmVjdG9yeVRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudC5kZWxldGVFbnRy
eSgpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TaWRlYmFyVmlldy5w
cm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVlRWxl
bWVudH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1WaWV3fSBmaWxlU3lzdGVt
VmlldwotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkVudHJ5fSBlbnRy
eQotICovCi1XZWJJbnNwZWN0b3IuRmlsZVN5c3RlbVZpZXcuRW50cnlUcmVlRWxlbWVudCA9IGZ1
bmN0aW9uKGZpbGVTeXN0ZW1WaWV3LCBlbnRyeSkKLXsKLSAgICBUcmVlRWxlbWVudC5jYWxsKHRo
aXMsIGVudHJ5Lm5hbWUsIG51bGwsIGVudHJ5LmlzRGlyZWN0b3J5KTsKLQotICAgIHRoaXMuX2Vu
dHJ5ID0gZW50cnk7Ci0gICAgdGhpcy5fZmlsZVN5c3RlbVZpZXcgPSBmaWxlU3lzdGVtVmlldzsK
LX0KLQotV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1WaWV3LkVudHJ5VHJlZUVsZW1lbnQucHJvdG90
eXBlID0gewotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2Vs
ZWN0aW9uID0gdGhpcy5saXN0SXRlbUVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJzZWxlY3Rp
b24iKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKHNlbGVjdGlv
biwgdGhpcy5saXN0SXRlbUVsZW1lbnQuZmlyc3RDaGlsZCk7Ci0gICAgfSwKLQotICAgIG9uc2Vs
ZWN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3ZpZXcpIHsKLSAgICAg
ICAgICAgIGlmICh0aGlzLl9lbnRyeS5pc0RpcmVjdG9yeSkKLSAgICAgICAgICAgICAgICB0aGlz
Ll92aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5EaXJlY3RvcnlDb250ZW50VmlldygpOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZpbGUgPSAvKiogQHR5cGUge1dlYklu
c3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwuRmlsZX0gKi8gKHRoaXMuX2VudHJ5KTsKLSAgICAgICAg
ICAgICAgICB0aGlzLl92aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5GaWxlQ29udGVudFZpZXcoZmls
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZmlsZVN5c3RlbVZp
ZXcuc2hvd1ZpZXcodGhpcy5fdmlldyk7Ci0gICAgICAgIHRoaXMucmVmcmVzaCgpOwotICAgIH0s
Ci0KLSAgICBvbnBvcHVsYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnJlZnJl
c2goKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGVycm9yQ29k
ZQotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5GaWxlU3lzdGVtTW9kZWwuRW50
cnk+PX0gZW50cmllcwotICAgICAqLwotICAgIF9kaXJlY3RvcnlDb250ZW50UmVjZWl2ZWQ6IGZ1
bmN0aW9uKGVycm9yQ29kZSwgZW50cmllcykKLSAgICB7Ci0gICAgICAgIGlmIChlcnJvckNvZGUg
PT09IEZpbGVFcnJvci5OT1RfRk9VTkRfRVJSKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5wYXJl
bnQgIT09IHRoaXMudHJlZU91dGxpbmUpCi0gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVm
cmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVy
cm9yQ29kZSAhPT0gMCB8fCAhZW50cmllcykgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
RmFpbGVkIHRvIHJlYWQgZGlyZWN0b3J5OiAiICsgZXJyb3JDb2RlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJpZXMuc29ydChXZWJJbnNwZWN0b3IuRmls
ZVN5c3RlbU1vZGVsLkVudHJ5LmNvbXBhcmUpOwotICAgICAgICBpZiAodGhpcy5fdmlldykKLSAg
ICAgICAgICAgIHRoaXMuX3ZpZXcuc2hvd0VudHJpZXMoZW50cmllcyk7Ci0KLSAgICAgICAgdmFy
IG9sZENoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5zbGljZSgwKTsKLQotICAgICAgICB2YXIgbmV3
RW50cnlJbmRleCA9IDA7Ci0gICAgICAgIHZhciBvbGRDaGlsZEluZGV4ID0gMDsKLSAgICAgICAg
dmFyIGN1cnJlbnRUcmVlSXRlbSA9IDA7Ci0gICAgICAgIHdoaWxlIChuZXdFbnRyeUluZGV4IDwg
ZW50cmllcy5sZW5ndGggJiYgb2xkQ2hpbGRJbmRleCA8IG9sZENoaWxkcmVuLmxlbmd0aCkgewot
ICAgICAgICAgICAgdmFyIG5ld0VudHJ5ID0gZW50cmllc1tuZXdFbnRyeUluZGV4XTsKLSAgICAg
ICAgICAgIHZhciBvbGRDaGlsZCA9IG9sZENoaWxkcmVuW29sZENoaWxkSW5kZXhdOwotICAgICAg
ICAgICAgdmFyIG9yZGVyID0gbmV3RW50cnkubmFtZS5jb21wYXJlVG8ob2xkQ2hpbGQuX2VudHJ5
Lm5hbWUpOwotCi0gICAgICAgICAgICBpZiAob3JkZXIgPT09IDApIHsKLSAgICAgICAgICAgICAg
ICBpZiAob2xkQ2hpbGQuX2VudHJ5LmlzRGlyZWN0b3J5KQotICAgICAgICAgICAgICAgICAgICBv
bGRDaGlsZC5zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgb2xkQ2hpbGQucmVmcmVzaCgpOwotCi0gICAgICAgICAg
ICAgICAgKytuZXdFbnRyeUluZGV4OwotICAgICAgICAgICAgICAgICsrb2xkQ2hpbGRJbmRleDsK
LSAgICAgICAgICAgICAgICArK2N1cnJlbnRUcmVlSXRlbTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcmRlciA8IDApIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLmluc2VydENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbVZp
ZXcuRW50cnlUcmVlRWxlbWVudCh0aGlzLl9maWxlU3lzdGVtVmlldywgbmV3RW50cnkpLCBjdXJy
ZW50VHJlZUl0ZW0pOwotICAgICAgICAgICAgICAgICsrbmV3RW50cnlJbmRleDsKLSAgICAgICAg
ICAgICAgICArK2N1cnJlbnRUcmVlSXRlbTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZEF0SW5kZXgoY3VycmVu
dFRyZWVJdGVtKTsKLSAgICAgICAgICAgICsrb2xkQ2hpbGRJbmRleDsKLSAgICAgICAgfQotICAg
ICAgICBmb3IgKDsgbmV3RW50cnlJbmRleCA8IGVudHJpZXMubGVuZ3RoOyArK25ld0VudHJ5SW5k
ZXgpCi0gICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuRmlsZVN5
c3RlbVZpZXcuRW50cnlUcmVlRWxlbWVudCh0aGlzLl9maWxlU3lzdGVtVmlldywgZW50cmllc1tu
ZXdFbnRyeUluZGV4XSkpOwotCi0gICAgICAgIGZvciAoOyBvbGRDaGlsZEluZGV4IDwgb2xkQ2hp
bGRyZW4ubGVuZ3RoOyArK29sZENoaWxkSW5kZXgpCi0gICAgICAgICAgICB0aGlzLnJlbW92ZUNo
aWxkKG9sZENoaWxkcmVuW29sZENoaWxkSW5kZXhdKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9lbnRyeS5pc0RpcmVjdG9yeSkg
ewotICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZXcgJiYgdGhpcy5fdmlldyA9PT0gdGhpcy5fZmls
ZVN5c3RlbVZpZXcudmlzaWJsZVZpZXcpIHsKLSAgICAgICAgICAgICAgICB2YXIgZmlsZUNvbnRl
bnRWaWV3ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRmlsZUNvbnRlbnRWaWV3fSAqLyAodGhp
cy5fdmlldyk7Ci0gICAgICAgICAgICAgICAgZmlsZUNvbnRlbnRWaWV3LnJlZnJlc2goKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9lbnRyeS5yZXF1
ZXN0RGlyZWN0b3J5Q29udGVudCh0aGlzLl9kaXJlY3RvcnlDb250ZW50UmVjZWl2ZWQuYmluZCh0
aGlzKSk7Ci0gICAgfSwKLQotICAgIGRlbGV0ZUVudHJ5OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9lbnRyeS5kZWxldGVFbnRyeSh0aGlzLl9kZWxldGlvbkNvbXBsZXRlZC5iaW5k
KHRoaXMpKTsKLSAgICB9LAotCi0gICAgX2RlbGV0aW9uQ29tcGxldGVkOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fZW50cnkgIT0gdGhpcy5fZW50cnkuZmlsZVN5c3RlbS5y
b290KQotICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVmcmVzaCgpOwotICAgIH0sCi0KLSAgICBf
X3Byb3RvX186IFRyZWVFbGVtZW50LnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVVdGlscy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjkxM2RlYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ZpbGVVdGlscy5qcworKysgL2Rldi9udWxsCkBAIC0xLDQxMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0g
KiBAaW50ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW1EZWxlZ2F0ZSA9IGZ1
bmN0aW9uKCkKLXsKLX0KLQotV2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbURlbGVnYXRlLnByb3Rv
dHlwZSA9IHsKLSAgICBvblRyYW5zZmVyU3RhcnRlZDogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBv
blRyYW5zZmVyRmluaXNoZWQ6IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuQ2h1bmtlZFJlYWRlcn0gcmVhZGVyCi0gICAgICovCi0gICAgb25D
aHVua1RyYW5zZmVycmVkOiBmdW5jdGlvbihyZWFkZXIpIHsgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNodW5rZWRSZWFkZXJ9IHJlYWRlcgotICAgICAqLwotICAg
IG9uRXJyb3I6IGZ1bmN0aW9uKHJlYWRlciwgZXZlbnQpIHsgfSwKLX0KLQotLyoqCi0gKiBAaW50
ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0gPSBmdW5jdGlvbigpCi17Ci19
Ci0KLVdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0ucHJvdG90eXBlID0gewotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNw
ZWN0b3IuT3V0cHV0U3RyZWFtKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgd3JpdGU6IGZ1bmN0
aW9uKGRhdGEsIGNhbGxiYWNrKSB7IH0sCi0KLSAgICBjbG9zZTogZnVuY3Rpb24oKSB7IH0KLX0K
LQotLyoqCi0gKiBAaW50ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5DaHVua2VkUmVhZGVyID0g
ZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuQ2h1bmtlZFJlYWRlci5wcm90b3R5cGUg
PSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGZpbGVT
aXplOiBmdW5jdGlvbigpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0K
LSAgICAgKi8KLSAgICBsb2FkZWRTaXplOiBmdW5jdGlvbigpIHsgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBmaWxlTmFtZTogZnVuY3Rpb24oKSB7
IH0sCi0KLSAgICBjYW5jZWw6IGZ1bmN0aW9uKCkgeyB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkNodW5rZWRSZWFkZXJ9Ci0gKiBAcGFy
YW0geyFGaWxlfSBmaWxlCi0gKiBAcGFyYW0ge251bWJlcn0gY2h1bmtTaXplCi0gKiBAcGFyYW0g
eyFXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtRGVsZWdhdGV9IGRlbGVnYXRlCi0gKi8KLVdlYklu
c3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlciA9IGZ1bmN0aW9uKGZpbGUsIGNodW5rU2l6ZSwgZGVs
ZWdhdGUpCi17Ci0gICAgdGhpcy5fZmlsZSA9IGZpbGU7Ci0gICAgdGhpcy5fZmlsZVNpemUgPSBm
aWxlLnNpemU7Ci0gICAgdGhpcy5fbG9hZGVkU2l6ZSA9IDA7Ci0gICAgdGhpcy5fY2h1bmtTaXpl
ID0gY2h1bmtTaXplOwotICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci0gICAgdGhpcy5f
aXNDYW5jZWxlZCA9IGZhbHNlOwotfQotCi1XZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVSZWFkZXIu
cHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5PdXRw
dXRTdHJlYW19IG91dHB1dAotICAgICAqLwotICAgIHN0YXJ0OiBmdW5jdGlvbihvdXRwdXQpCi0g
ICAgewotICAgICAgICB0aGlzLl9vdXRwdXQgPSBvdXRwdXQ7Ci0KLSAgICAgICAgdGhpcy5fcmVh
ZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKLSAgICAgICAgdGhpcy5fcmVhZGVyLm9ubG9hZCA9IHRo
aXMuX29uQ2h1bmtMb2FkZWQuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5fcmVhZGVyLm9uZXJy
b3IgPSB0aGlzLl9kZWxlZ2F0ZS5vbkVycm9yLmJpbmQodGhpcy5fZGVsZWdhdGUsIHRoaXMpOwot
ICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyU3RhcnRlZCgpOwotICAgICAgICB0aGlz
Ll9sb2FkQ2h1bmsoKTsKLSAgICB9LAotCi0gICAgY2FuY2VsOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9pc0NhbmNlbGVkID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGxvYWRlZFNpemU6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWRTaXplOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgZmlsZVNpemU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9maWxlU2l6ZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGZpbGVOYW1lOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZmlsZS5uYW1lOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9v
bkNodW5rTG9hZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9p
c0NhbmNlbGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChldmVudC50YXJn
ZXQucmVhZHlTdGF0ZSAhPT0gRmlsZVJlYWRlci5ET05FKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciBkYXRhID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKLSAgICAgICAgdGhpcy5f
bG9hZGVkU2l6ZSArPSBkYXRhLmxlbmd0aDsKLQotICAgICAgICB0aGlzLl9vdXRwdXQud3JpdGUo
ZGF0YSk7Ci0gICAgICAgIGlmICh0aGlzLl9pc0NhbmNlbGVkKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJyZWQodGhpcyk7Ci0KLSAg
ICAgICAgaWYgKHRoaXMuX2xvYWRlZFNpemUgPT09IHRoaXMuX2ZpbGVTaXplKSB7Ci0gICAgICAg
ICAgICB0aGlzLl9maWxlID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7
Ci0gICAgICAgICAgICB0aGlzLl9vdXRwdXQuY2xvc2UoKTsKLSAgICAgICAgICAgIHRoaXMuX2Rl
bGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhpcy5fbG9hZENodW5rKCk7Ci0gICAgfSwKLQotICAgIF9sb2FkQ2h1
bms6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaHVua1N0YXJ0ID0gdGhpcy5fbG9h
ZGVkU2l6ZTsKLSAgICAgICAgdmFyIGNodW5rRW5kID0gTWF0aC5taW4odGhpcy5fZmlsZVNpemUs
IGNodW5rU3RhcnQgKyB0aGlzLl9jaHVua1NpemUpCi0gICAgICAgIHZhciBuZXh0UGFydCA9IHRo
aXMuX2ZpbGUuc2xpY2UoY2h1bmtTdGFydCwgY2h1bmtFbmQpOwotICAgICAgICB0aGlzLl9yZWFk
ZXIucmVhZEFzVGV4dChuZXh0UGFydCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5DaHVua2VkUmVhZGVyfQotICogQHBhcmFt
IHtzdHJpbmd9IHVybAotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbURlbGVn
YXRlfSBkZWxlZ2F0ZQotICovCi1XZWJJbnNwZWN0b3IuQ2h1bmtlZFhIUlJlYWRlciA9IGZ1bmN0
aW9uKHVybCwgZGVsZWdhdGUpCi17Ci0gICAgdGhpcy5fdXJsID0gdXJsOwotICAgIHRoaXMuX2Rl
bGVnYXRlID0gZGVsZWdhdGU7Ci0gICAgdGhpcy5fZmlsZVNpemUgPSAwOwotICAgIHRoaXMuX2xv
YWRlZFNpemUgPSAwOwotICAgIHRoaXMuX2lzQ2FuY2VsZWQgPSBmYWxzZTsKLX0KLQotV2ViSW5z
cGVjdG9yLkNodW5rZWRYSFJSZWFkZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7IVdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW19IG91dHB1dAotICAgICAqLwotICAgIHN0
YXJ0OiBmdW5jdGlvbihvdXRwdXQpCi0gICAgewotICAgICAgICB0aGlzLl9vdXRwdXQgPSBvdXRw
dXQ7Ci0KLSAgICAgICAgdGhpcy5feGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgICAg
IHRoaXMuX3hoci5vcGVuKCJHRVQiLCB0aGlzLl91cmwsIHRydWUpOwotICAgICAgICB0aGlzLl94
aHIub25sb2FkID0gdGhpcy5fb25Mb2FkLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuX3hoci5v
bnByb2dyZXNzID0gdGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLl94
aHIub25lcnJvciA9IHRoaXMuX2RlbGVnYXRlLm9uRXJyb3IuYmluZCh0aGlzLl9kZWxlZ2F0ZSwg
dGhpcyk7Ci0gICAgICAgIHRoaXMuX3hoci5zZW5kKG51bGwpOwotCi0gICAgICAgIHRoaXMuX2Rl
bGVnYXRlLm9uVHJhbnNmZXJTdGFydGVkKCk7Ci0gICAgfSwKLQotICAgIGNhbmNlbDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faXNDYW5jZWxlZCA9IHRydWU7Ci0gICAgICAgIHRo
aXMuX3hoci5hYm9ydCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1i
ZXJ9Ci0gICAgICovCi0gICAgbG9hZGVkU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX2xvYWRlZFNpemU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBmaWxlU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVTaXplOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZmlsZU5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl91cmw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzQ2FuY2VsZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpCi0gICAgICAgICAg
ICB0aGlzLl9maWxlU2l6ZSA9IGV2ZW50LnRvdGFsOwotCi0gICAgICAgIHZhciBkYXRhID0gdGhp
cy5feGhyLnJlc3BvbnNlVGV4dC5zdWJzdHJpbmcodGhpcy5fbG9hZGVkU2l6ZSk7Ci0gICAgICAg
IGlmICghZGF0YS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5f
bG9hZGVkU2l6ZSArPSBkYXRhLmxlbmd0aDsKLSAgICAgICAgdGhpcy5fb3V0cHV0LndyaXRlKGRh
dGEpOwotICAgICAgICBpZiAodGhpcy5faXNDYW5jZWxlZCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdGhpcy5fZGVsZWdhdGUub25DaHVua1RyYW5zZmVycmVkKHRoaXMpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9v
bkxvYWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fb25Qcm9ncmVzcyhl
dmVudCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2lzQ2FuY2VsZWQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdGhpcy5fb3V0cHV0LmNsb3NlKCk7Ci0gICAgICAgIHRoaXMuX2RlbGVn
YXRlLm9uVHJhbnNmZXJGaW5pc2hlZCgpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0ge2Z1
bmN0aW9uKCFGaWxlKX0gY2FsbGJhY2sKLSAqIEByZXR1cm4ge05vZGV9Ci0gKi8KLVdlYkluc3Bl
Y3Rvci5jcmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50ID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAg
ICB2YXIgZmlsZVNlbGVjdG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iik7Ci0gICAgZmlsZVNlbGVjdG9yRWxlbWVudC50eXBlID0gImZpbGUiOwotICAgIGZpbGVTZWxl
Y3RvckVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIC0xKTsKLSAgICBmaWxlU2VsZWN0
b3JFbGVtZW50LnN0eWxlLnpJbmRleCA9IC0xOwotICAgIGZpbGVTZWxlY3RvckVsZW1lbnQuc3R5
bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwotICAgIGZpbGVTZWxlY3RvckVsZW1lbnQub25jaGFu
Z2UgPSBmdW5jdGlvbihldmVudCkgewotICAgICAgICBjYWxsYmFjayhmaWxlU2VsZWN0b3JFbGVt
ZW50LmZpbGVzWzBdKTsKLSAgICB9OwotICAgIHJldHVybiBmaWxlU2VsZWN0b3JFbGVtZW50Owot
fQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UKLSAqIEBwYXJhbSB7bnVtYmVyPX0g
c3RhcnRJbmRleAotICogQHBhcmFtIHtudW1iZXI9fSBsYXN0SW5kZXgKLSAqLwotV2ViSW5zcGVj
dG9yLmZpbmRCYWxhbmNlZEN1cmx5QnJhY2tldHMgPSBmdW5jdGlvbihzb3VyY2UsIHN0YXJ0SW5k
ZXgsIGxhc3RJbmRleCkgewotICAgIGxhc3RJbmRleCA9IGxhc3RJbmRleCB8fCBzb3VyY2UubGVu
Z3RoOwotICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4IHx8IDA7Ci0gICAgdmFyIGNvdW50ZXIg
PSAwOwotICAgIHZhciBpblN0cmluZyA9IGZhbHNlOwotCi0gICAgZm9yICh2YXIgaW5kZXggPSBz
dGFydEluZGV4OyBpbmRleCA8IGxhc3RJbmRleDsgKytpbmRleCkgewotICAgICAgICB2YXIgY2hh
cmFjdGVyID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgaWYgKGluU3RyaW5nKSB7Ci0gICAgICAg
ICAgICBpZiAoY2hhcmFjdGVyID09PSAiXFwiKQotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICJcIiIpCi0gICAgICAgICAgICAgICAg
aW5TdHJpbmcgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT09ICJcIiIpCi0gICAgICAgICAgICAgICAgaW5TdHJpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyID09PSAieyIpCi0gICAgICAgICAgICAgICAgKytjb3Vu
dGVyOwotICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyID09PSAifSIpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoLS1jb3VudGVyID09PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXggKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAt
MTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0
b3IuT3V0cHV0U3RyZWFtfQotICovCi1XZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbSA9IGZ1
bmN0aW9uKCkKLXsKLX0KLQotV2ViSW5zcGVjdG9yLkZpbGVPdXRwdXRTdHJlYW0ucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZQotICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkZpbGVPdXRwdXRTdHJlYW0sIHN0cmluZz0pfSBj
YWxsYmFjawotICAgICAqLwotICAgIG9wZW46IGZ1bmN0aW9uKGZpbGVOYW1lLCBjYWxsYmFjaykK
LSAgICB7Ci0gICAgICAgIHRoaXMuX2Nsb3NlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl93cml0
ZUNhbGxiYWNrcyA9IFtdOwotICAgICAgICB0aGlzLl9maWxlTmFtZSA9IGZpbGVOYW1lOwotICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFja1dyYXBwZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBX
ZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgY2FsbGJhY2tXcmFwcGVyLCB0aGlzKTsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX29u
QXBwZW5kRG9uZSwgdGhpcyk7Ci0gICAgICAgICAgICBjYWxsYmFjayh0aGlzKTsKLSAgICAgICAg
fQotICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgY2FsbGJhY2tXcmFwcGVy
LCB0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhpcy5fZmls
ZU5hbWUsICIiLCB0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IGRhdGEKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5PdXRwdXRTdHJl
YW0pPX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICB3cml0ZTogZnVuY3Rpb24oZGF0YSwgY2FsbGJh
Y2spCi0gICAgewotICAgICAgICB0aGlzLl93cml0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFwcGVuZCh0aGlzLl9maWxlTmFtZSwg
ZGF0YSk7Ci0gICAgfSwKLQotICAgIGNsb3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLl9jbG9zZWQgPSB0cnVlOwotICAgICAgICBpZiAodGhpcy5fd3JpdGVDYWxsYmFja3MubGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFn
ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBl
cy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9vbkFwcGVuZERvbmUsIHRoaXMpOwotICAgICAgICBXZWJJ
bnNwZWN0b3IuZmlsZU1hbmFnZXIuY2xvc2UodGhpcy5fZmlsZU5hbWUpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9vbkFwcGVu
ZERvbmU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09
IHRoaXMuX2ZpbGVOYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXRoaXMu
X3dyaXRlQ2FsbGJhY2tzLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkg
ewotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5yZW1vdmVFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkws
IHRoaXMuX29uQXBwZW5kRG9uZSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmZpbGVNYW5hZ2VyLmNsb3NlKHRoaXMuX2ZpbGVOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl93
cml0ZUNhbGxiYWNrcy5zaGlmdCgpOwotICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAgICAgICAg
ICBjYWxsYmFjayh0aGlzKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9n
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGRmY2FjLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsdGVyZWRJdGVtU2VsZWN0aW9u
RGlhbG9nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5EaWFsb2dEZWxlZ2F0ZX0KLSAqIEBpbXBs
ZW1lbnRzIHtXZWJJbnNwZWN0b3IuVmlld3BvcnRDb250cm9sLlByb3ZpZGVyfQotICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuU2VsZWN0aW9uRGlhbG9nQ29udGVudFByb3ZpZGVyfSBkZWxlZ2F0ZQot
ICovCi1XZWJJbnNwZWN0b3IuRmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nID0gZnVuY3Rpb24o
ZGVsZWdhdGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkRpYWxvZ0RlbGVnYXRlLmNhbGwodGhpcyk7
Ci0KLSAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgeGhyLm9wZW4oIkdF
VCIsICJmaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuY3NzIiwgZmFsc2UpOwotICAgIHhoci5z
ZW5kKG51bGwpOwotCi0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJmaWx0ZXJlZC1pdGVtLWxpc3Qt
ZGlhbG9nIjsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdmFyIHN0eWxlRWxlbWVudCA9
IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgic3R5bGUiKTsKLSAgICBzdHlsZUVsZW1lbnQudHlw
ZSA9ICJ0ZXh0L2NzcyI7Ci0gICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0geGhyLnJlc3Bv
bnNlVGV4dDsKLQotICAgIHRoaXMuX3Byb21wdEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY3JlYXRl
Q2hpbGQoImlucHV0IiwgIm1vbm9zcGFjZSIpOwotICAgIHRoaXMuX3Byb21wdEVsZW1lbnQudHlw
ZSA9ICJ0ZXh0IjsKLSAgICB0aGlzLl9wcm9tcHRFbGVtZW50LnNldEF0dHJpYnV0ZSgic3BlbGxj
aGVjayIsICJmYWxzZSIpOwotCi0gICAgdGhpcy5fcHJvZ3Jlc3NFbGVtZW50ID0gdGhpcy5lbGVt
ZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAicHJvZ3Jlc3MiKTsKLQotICAgIHRoaXMuX2ZpbHRlcmVk
SXRlbXMgPSBbXTsKLSAgICB0aGlzLl92aWV3cG9ydENvbnRyb2wgPSBuZXcgV2ViSW5zcGVjdG9y
LlZpZXdwb3J0Q29udHJvbCh0aGlzKTsKLSAgICB0aGlzLl9pdGVtRWxlbWVudHNDb250YWluZXIg
PSB0aGlzLl92aWV3cG9ydENvbnRyb2wuZWxlbWVudDsKLSAgICB0aGlzLl9pdGVtRWxlbWVudHND
b250YWluZXIuYWRkU3R5bGVDbGFzcygiY29udGFpbmVyIik7Ci0gICAgdGhpcy5faXRlbUVsZW1l
bnRzQ29udGFpbmVyLmFkZFN0eWxlQ2xhc3MoIm1vbm9zcGFjZSIpOwotICAgIHRoaXMuX2l0ZW1F
bGVtZW50c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uQ2xpY2su
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9p
dGVtRWxlbWVudHNDb250YWluZXIpOwotCi0gICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsK
LSAgICB0aGlzLl9kZWxlZ2F0ZS5yZXF1ZXN0SXRlbXModGhpcy5faXRlbXNMb2FkZWQuYmluZCh0
aGlzKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAotICAg
ICAqIEBwYXJhbSB7RWxlbWVudH0gcmVsYXRpdmVUb0VsZW1lbnQKLSAgICAgKi8KLSAgICBwb3Np
dGlvbjogZnVuY3Rpb24oZWxlbWVudCwgcmVsYXRpdmVUb0VsZW1lbnQpCi0gICAgewotICAgICAg
ICBjb25zdCBtaW5XaWR0aCA9IDUwMDsKLSAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gMjA0Owot
ICAgICAgICB2YXIgd2lkdGggPSBNYXRoLm1heChyZWxhdGl2ZVRvRWxlbWVudC5vZmZzZXRXaWR0
aCAqIDIgLyAzLCBtaW5XaWR0aCk7Ci0gICAgICAgIHZhciBoZWlnaHQgPSBNYXRoLm1heChyZWxh
dGl2ZVRvRWxlbWVudC5vZmZzZXRIZWlnaHQgKiAyIC8gMywgbWluSGVpZ2h0KTsKLQotICAgICAg
ICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArICJweCI7Ci0gICAgICAgIHRoaXMu
ZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwotCi0gICAgICAgIGNvbnN0IHNo
YWRvd1BhZGRpbmcgPSAyMDsgLy8gc2hhZG93ICsgcGFkZGluZwotICAgICAgICBlbGVtZW50LnBv
c2l0aW9uQXQoCi0gICAgICAgICAgICByZWxhdGl2ZVRvRWxlbWVudC50b3RhbE9mZnNldExlZnQo
KSArIE1hdGgubWF4KChyZWxhdGl2ZVRvRWxlbWVudC5vZmZzZXRXaWR0aCAtIHdpZHRoIC0gMiAq
IHNoYWRvd1BhZGRpbmcpIC8gMiwgc2hhZG93UGFkZGluZyksCi0gICAgICAgICAgICByZWxhdGl2
ZVRvRWxlbWVudC50b3RhbE9mZnNldFRvcCgpICsgTWF0aC5tYXgoKHJlbGF0aXZlVG9FbGVtZW50
Lm9mZnNldEhlaWdodCAtIGhlaWdodCAtIDIgKiBzaGFkb3dQYWRkaW5nKSAvIDIsIHNoYWRvd1Bh
ZGRpbmcpKTsKLSAgICB9LAotCi0gICAgZm9jdXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5zZXRDdXJyZW50Rm9jdXNFbGVtZW50KHRoaXMuX3Byb21wdEVsZW1lbnQp
OwotICAgICAgICBpZiAodGhpcy5fZmlsdGVyZWRJdGVtcy5sZW5ndGggJiYgdGhpcy5fdmlld3Bv
cnRDb250cm9sLmxhc3RWaXNpYmxlSW5kZXgoKSA9PT0gLTEpCi0gICAgICAgICAgICB0aGlzLl92
aWV3cG9ydENvbnRyb2wucmVmcmVzaCgpOwotICAgIH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzSGlkaW5nKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0aGlzLl9pc0hpZGluZyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2RlbGVn
YXRlLmRpc3Bvc2UoKTsKLSAgICAgICAgaWYgKHRoaXMuX2ZpbHRlclRpbWVyKQotICAgICAgICAg
ICAgY2xlYXJUaW1lb3V0KHRoaXMuX2ZpbHRlclRpbWVyKTsKLSAgICB9LAotCi0gICAgcmVuZGVy
QXNUd29Sb3dzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9yZW5kZXJBc1R3b1Jv
d3MgPSB0cnVlOwotICAgIH0sCi0KLSAgICBvbkVudGVyOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMuX2RlbGVnYXRlLml0ZW1zQ291bnQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUuc2VsZWN0SXRlbSh0aGlzLl9maWx0ZXJlZEl0ZW1z
W3RoaXMuX3NlbGVjdGVkSW5kZXhJbkZpbHRlcmVkXSwgdGhpcy5fcHJvbXB0RWxlbWVudC52YWx1
ZS50cmltKCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbG9h
ZGVkQ291bnQKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxDb3VudAotICAgICAqLwotICAg
IF9pdGVtc0xvYWRlZDogZnVuY3Rpb24obG9hZGVkQ291bnQsIHRvdGFsQ291bnQpCi0gICAgewot
ICAgICAgICB0aGlzLl9sb2FkZWRDb3VudCA9IGxvYWRlZENvdW50OwotICAgICAgICB0aGlzLl90
b3RhbENvdW50ID0gdG90YWxDb3VudDsKLQotICAgICAgICBpZiAodGhpcy5fbG9hZFRpbWVvdXQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2xvYWRUaW1lb3V0ID0gc2V0VGlt
ZW91dCh0aGlzLl91cGRhdGVBZnRlckl0ZW1zTG9hZGVkLmJpbmQodGhpcyksIDEwMCk7Ci0gICAg
fSwKLQotICAgIF91cGRhdGVBZnRlckl0ZW1zTG9hZGVkOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBkZWxldGUgdGhpcy5fbG9hZFRpbWVvdXQ7Ci0gICAgICAgIHRoaXMuX2ZpbHRlckl0ZW1z
KCk7Ci0gICAgICAgIGlmICh0aGlzLl9sb2FkZWRDb3VudCA9PT0gdGhpcy5fdG90YWxDb3VudCkK
LSAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2Ug
PSAiIjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBjb2xvciA9ICJyZ2IoNjYs
IDEyOSwgMjM1KSI7Ci0gICAgICAgICAgICBjb25zdCBwZXJjZW50ID0gKCh0aGlzLl9sb2FkZWRD
b3VudCAvIHRoaXMuX3RvdGFsQ291bnQpICogMTAwKSArICIlIjsKLSAgICAgICAgICAgIHRoaXMu
X3Byb2dyZXNzRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAiLXdlYmtpdC1saW5lYXIt
Z3JhZGllbnQobGVmdCwgIiArIGNvbG9yICsgIiwgIiArIGNvbG9yICsgIiAiICsgcGVyY2VudCAr
ICIsICB0cmFuc3BhcmVudCAiICsgcGVyY2VudCArICIpIjsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKiBAcmV0dXJuIHtF
bGVtZW50fQotICAgICAqLwotICAgIF9jcmVhdGVJdGVtRWxlbWVudDogZnVuY3Rpb24oaW5kZXgp
Ci0gICAgewotICAgICAgICB2YXIgaXRlbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICAgICAgaXRlbUVsZW1lbnQuY2xhc3NOYW1lID0gImZpbHRlcmVkLWl0ZW0t
bGlzdC1kaWFsb2ctaXRlbSAiICsgKHRoaXMuX3JlbmRlckFzVHdvUm93cyA/ICJ0d28tcm93cyIg
OiAib25lLXJvdyIpOwotICAgICAgICBpdGVtRWxlbWVudC5fdGl0bGVFbGVtZW50ID0gaXRlbUVs
ZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iKTsKLSAgICAgICAgaXRlbUVsZW1lbnQuX3RpdGxlRWxl
bWVudC50ZXh0Q29udGVudCA9IHRoaXMuX2RlbGVnYXRlLml0ZW1UaXRsZUF0KGluZGV4KTsKLSAg
ICAgICAgaXRlbUVsZW1lbnQuX3RpdGxlU3VmZml4RWxlbWVudCA9IGl0ZW1FbGVtZW50LmNyZWF0
ZUNoaWxkKCJzcGFuIik7Ci0gICAgICAgIGl0ZW1FbGVtZW50Ll90aXRsZVN1ZmZpeEVsZW1lbnQu
dGV4dENvbnRlbnQgPSB0aGlzLl9kZWxlZ2F0ZS5pdGVtU3VmZml4QXQoaW5kZXgpOwotICAgICAg
ICBpdGVtRWxlbWVudC5fc3VidGl0bGVFbGVtZW50ID0gaXRlbUVsZW1lbnQuY3JlYXRlQ2hpbGQo
ImRpdiIsICJmaWx0ZXJlZC1pdGVtLWxpc3QtZGlhbG9nLXN1YnRpdGxlIik7Ci0gICAgICAgIGl0
ZW1FbGVtZW50Ll9zdWJ0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLl9kZWxlZ2F0ZS5p
dGVtU3VidGl0bGVBdChpbmRleCkgfHwgIlx1MjAwQiI7Ci0gICAgICAgIGl0ZW1FbGVtZW50Ll9p
bmRleCA9IGluZGV4OwotCi0gICAgICAgIHZhciBrZXkgPSB0aGlzLl9kZWxlZ2F0ZS5pdGVtS2V5
QXQoaW5kZXgpOwotICAgICAgICB2YXIgcmFuZ2VzID0gW107Ci0gICAgICAgIHZhciBtYXRjaDsK
LSAgICAgICAgaWYgKHRoaXMuX3F1ZXJ5KSB7Ci0gICAgICAgICAgICB2YXIgcmVnZXggPSB0aGlz
Ll9jcmVhdGVTZWFyY2hSZWdleCh0aGlzLl9xdWVyeSwgdHJ1ZSk7Ci0gICAgICAgICAgICB3aGls
ZSAoKG1hdGNoID0gcmVnZXguZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBtYXRjaFswXSkKLSAgICAg
ICAgICAgICAgICByYW5nZXMucHVzaCh7IG9mZnNldDogbWF0Y2guaW5kZXgsIGxlbmd0aDogcmVn
ZXgubGFzdEluZGV4IC0gbWF0Y2guaW5kZXggfSk7Ci0gICAgICAgICAgICBpZiAocmFuZ2VzLmxl
bmd0aCkKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0UmFuZ2VzV2l0aFN0
eWxlQ2xhc3MoaXRlbUVsZW1lbnQsIHJhbmdlcywgImhpZ2hsaWdodCIpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fZmlsdGVyZWRJdGVtc1t0aGlzLl9zZWxlY3RlZElu
ZGV4SW5GaWx0ZXJlZF0pCi0gICAgICAgICAgICBpdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJz
ZWxlY3RlZCIpOwotCi0gICAgICAgIHJldHVybiBpdGVtRWxlbWVudDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHs/c3RyaW5nfSBxdWVyeQotICAgICAqIEBwYXJhbSB7Ym9vbGVh
bj19IGlzR2xvYmFsCi0gICAgICovCi0gICAgX2NyZWF0ZVNlYXJjaFJlZ2V4OiBmdW5jdGlvbihx
dWVyeSwgaXNHbG9iYWwpCi0gICAgewotICAgICAgICBjb25zdCB0b0VzY2FwZSA9IFN0cmluZy5y
ZWdleFNwZWNpYWxDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHZhciByZWdleFN0cmluZyA9ICIiOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICB2YXIgYyA9IHF1ZXJ5LmNoYXJBdChpKTsKLSAgICAgICAgICAgIGlmICh0b0VzY2FwZS5p
bmRleE9mKGMpICE9PSAtMSkKLSAgICAgICAgICAgICAgICBjID0gIlxcIiArIGM7Ci0gICAgICAg
ICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICByZWdleFN0cmluZyArPSAiW14iICsgYyArICJd
KiI7Ci0gICAgICAgICAgICByZWdleFN0cmluZyArPSBjOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBuZXcgUmVnRXhwKHJlZ2V4U3RyaW5nLCAiaSIgKyAoaXNHbG9iYWwgPyAiZyIgOiAiIikp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUNhc2UKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNh
bWVsQ2FzZQotICAgICAqIEByZXR1cm4ge1JlZ0V4cH0KLSAgICAgKi8KLSAgICBfY3JlYXRlU2Nv
cmluZ1JlZ2V4OiBmdW5jdGlvbihxdWVyeSwgaWdub3JlQ2FzZSwgY2FtZWxDYXNlKQotICAgIHsK
LSAgICAgICAgaWYgKCFjYW1lbENhc2UgfHwgKGNhbWVsQ2FzZSAmJiBpZ25vcmVDYXNlKSkKLSAg
ICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkudG9VcHBlckNhc2UoKTsKLSAgICAgICAgdmFyIHJlZ2V4
U3RyaW5nID0gIiI7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnkubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIHZhciBjID0gcXVlcnkuY2hhckF0KGkpOwotICAgICAgICAgICAg
aWYgKGMgPCAiQSIgfHwgYyA+ICJaIikKLSAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHJlZ2V4U3RyaW5nKQotICAgICAgICAgICAgICAgcmVnZXhTdHJpbmcgKz0gY2Ft
ZWxDYXNlID8gIlteQS1aXSoiIDogIlteLV8gLl0qWy1fIC5dIjsKLSAgICAgICAgICAgIHJlZ2V4
U3RyaW5nICs9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjYW1lbENhc2UpCi0gICAgICAg
ICAgICByZWdleFN0cmluZyA9ICIoPzpefFstXyAuXSkiICsgcmVnZXhTdHJpbmc7Ci0gICAgICAg
IHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4U3RyaW5nLCBjYW1lbENhc2UgPyAiIiA6ICJpIik7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqLwot
ICAgIHNldFF1ZXJ5OiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb21w
dEVsZW1lbnQudmFsdWUgPSBxdWVyeTsKLSAgICAgICAgdGhpcy5fc2NoZWR1bGVGaWx0ZXIoKTsK
LSAgICB9LAotCi0gICAgX2ZpbHRlckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBk
ZWxldGUgdGhpcy5fZmlsdGVyVGltZXI7Ci0KLSAgICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5fZGVs
ZWdhdGUucmV3cml0ZVF1ZXJ5KHRoaXMuX3Byb21wdEVsZW1lbnQudmFsdWUudHJpbSgpKTsKLSAg
ICAgICAgdGhpcy5fcXVlcnkgPSBxdWVyeTsKLQotICAgICAgICB2YXIgaWdub3JlQ2FzZSA9IChx
dWVyeSA9PT0gcXVlcnkudG9Mb3dlckNhc2UoKSk7Ci0KLSAgICAgICAgdmFyIGZpbHRlclJlZ2V4
ID0gcXVlcnkgPyB0aGlzLl9jcmVhdGVTZWFyY2hSZWdleChxdWVyeSkgOiBudWxsOwotICAgICAg
ICB2YXIgY2FtZWxDYXNlU2NvcmluZ1JlZ2V4ID0gcXVlcnkgPyB0aGlzLl9jcmVhdGVTY29yaW5n
UmVnZXgocXVlcnksIGlnbm9yZUNhc2UsIHRydWUpIDogbnVsbDsKLSAgICAgICAgdmFyIHVuZGVy
c2NvcmVTY29yaW5nUmVnZXggPSBxdWVyeSA/IHRoaXMuX2NyZWF0ZVNjb3JpbmdSZWdleChxdWVy
eSwgaWdub3JlQ2FzZSwgZmFsc2UpIDogbnVsbDsKLQotICAgICAgICB2YXIgb2xkU2VsZWN0ZWRB
YnNvbHV0ZUluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleEluRmlsdGVyZWQgPyB0aGlzLl9maWx0
ZXJlZEl0ZW1zW3RoaXMuX3NlbGVjdGVkSW5kZXhJbkZpbHRlcmVkXSA6IG51bGw7Ci0gICAgICAg
IHRoaXMuX2ZpbHRlcmVkSXRlbXMgPSBbXTsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleElu
RmlsdGVyZWQgPSAwOwotCi0gICAgICAgIHZhciBjYWNoZWRLZXlzID0gbmV3IEFycmF5KHRoaXMu
X2RlbGVnYXRlLml0ZW1zQ291bnQoKSk7Ci0gICAgICAgIHZhciBzY29yZXMgPSBxdWVyeSA/IG5l
dyBBcnJheSh0aGlzLl9kZWxlZ2F0ZS5pdGVtc0NvdW50KCkpIDogbnVsbDsKLQotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2RlbGVnYXRlLml0ZW1zQ291bnQoKTsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fZGVsZWdhdGUuaXRlbUtleUF0KGkpOwotICAgICAg
ICAgICAgaWYgKGZpbHRlclJlZ2V4ICYmICFmaWx0ZXJSZWdleC50ZXN0KGtleSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYWNoZWRLZXlzW2ldID0ga2V5OwotICAg
ICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcy5wdXNoKGkpOwotCi0gICAgICAgICAgICBpZiAo
IWZpbHRlclJlZ2V4KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB2
YXIgc2NvcmUgPSAwOwotICAgICAgICAgICAgaWYgKHVuZGVyc2NvcmVTY29yaW5nUmVnZXgudGVz
dChrZXkpKQotICAgICAgICAgICAgICAgIHNjb3JlICs9IDEwOwotICAgICAgICAgICAgaWYgKGNh
bWVsQ2FzZVNjb3JpbmdSZWdleC50ZXN0KGtleSkpCi0gICAgICAgICAgICAgICAgc2NvcmUgKz0g
aWdub3JlQ2FzZSA/IDEwIDogMjA7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtl
eS5sZW5ndGggJiYgaiA8IHF1ZXJ5Lmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGtleVtqXSA9PT0gcXVlcnlbal0pCi0gICAgICAgICAgICAgICAgICAgIHNjb3JlKys7Ci0gICAg
ICAgICAgICAgICAgaWYgKGtleVtqXS50b1VwcGVyQ2FzZSgpID09PSBxdWVyeVtqXS50b1VwcGVy
Q2FzZSgpKQotICAgICAgICAgICAgICAgICAgICBzY29yZSsrOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBzY29yZXNbaV0gPSBzY29yZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbXBh
cmVGdW5jdGlvbihpbmRleDEsIGluZGV4MikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNj
b3JlcykgewotICAgICAgICAgICAgICAgIHZhciBzY29yZTEgPSBzY29yZXNbaW5kZXgxXTsKLSAg
ICAgICAgICAgICAgICB2YXIgc2NvcmUyID0gc2NvcmVzW2luZGV4Ml07Ci0gICAgICAgICAgICAg
ICAgaWYgKHNjb3JlMSA+IHNjb3JlMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwot
ICAgICAgICAgICAgICAgIGlmIChzY29yZTEgPCBzY29yZTIpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGtleTEgPSBjYWNoZWRL
ZXlzW2luZGV4MV07Ci0gICAgICAgICAgICB2YXIga2V5MiA9IGNhY2hlZEtleXNbaW5kZXgyXTsK
LSAgICAgICAgICAgIHJldHVybiBrZXkxLmNvbXBhcmVUbyhrZXkyKSB8fCAoaW5kZXgyIC0gaW5k
ZXgxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IG51bWJlck9mSXRlbXNUb1NvcnQgPSAx
MDA7Ci0gICAgICAgIGlmICh0aGlzLl9maWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IG51bWJlck9mSXRl
bXNUb1NvcnQpCi0gICAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zLnNvcnRSYW5nZShjb21w
YXJlRnVuY3Rpb24uYmluZCh0aGlzKSwgMCwgdGhpcy5fZmlsdGVyZWRJdGVtcy5sZW5ndGggLSAx
LCBudW1iZXJPZkl0ZW1zVG9Tb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5f
ZmlsdGVyZWRJdGVtcy5zb3J0KGNvbXBhcmVGdW5jdGlvbi5iaW5kKHRoaXMpKTsKLQotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcmVkSXRlbXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICh0aGlzLl9maWx0ZXJlZEl0ZW1zW2ldID09PSBvbGRTZWxlY3RlZEFi
c29sdXRlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4SW5GaWx0
ZXJlZCA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5fdmlld3BvcnRDb250cm9sLnJlZnJlc2goKTsKLSAgICAgICAgdGhp
cy5fdXBkYXRlU2VsZWN0aW9uKHRoaXMuX3NlbGVjdGVkSW5kZXhJbkZpbHRlcmVkLCBmYWxzZSk7
Ci0gICAgfSwKLQotICAgIF9vbktleURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgdmFyIG5ld1NlbGVjdGVkSW5kZXggPSB0aGlzLl9zZWxlY3RlZEluZGV4SW5GaWx0ZXJlZDsK
LQotICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHsKLSAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkRvd24uY29kZToKLSAgICAgICAgICAgIGlmICgr
K25ld1NlbGVjdGVkSW5kZXggPj0gdGhpcy5fZmlsdGVyZWRJdGVtcy5sZW5ndGgpCi0gICAgICAg
ICAgICAgICAgbmV3U2VsZWN0ZWRJbmRleCA9IHRoaXMuX2ZpbHRlcmVkSXRlbXMubGVuZ3RoIC0g
MTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbihuZXdTZWxlY3RlZEluZGV4LCB0
cnVlKTsKLSAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLlVwLmNv
ZGU6Ci0gICAgICAgICAgICBpZiAoLS1uZXdTZWxlY3RlZEluZGV4IDwgMCkKLSAgICAgICAgICAg
ICAgICBuZXdTZWxlY3RlZEluZGV4ID0gMDsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVj
dGlvbihuZXdTZWxlY3RlZEluZGV4LCBmYWxzZSk7Ci0gICAgICAgICAgICBldmVudC5jb25zdW1l
KHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuS2V5cy5QYWdlRG93bi5jb2RlOgotICAgICAgICAgICAgbmV3U2VsZWN0
ZWRJbmRleCA9IE1hdGgubWluKG5ld1NlbGVjdGVkSW5kZXggKyB0aGlzLl92aWV3cG9ydENvbnRy
b2wucm93c1BlclZpZXdwb3J0KCksIHRoaXMuX2ZpbHRlcmVkSXRlbXMubGVuZ3RoIC0gMSk7Ci0g
ICAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb24obmV3U2VsZWN0ZWRJbmRleCwgdHJ1ZSk7
Ci0gICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5QYWdlVXAuY29k
ZToKLSAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXggPSBNYXRoLm1heChuZXdTZWxlY3RlZElu
ZGV4IC0gdGhpcy5fdmlld3BvcnRDb250cm9sLnJvd3NQZXJWaWV3cG9ydCgpLCAwKTsKLSAgICAg
ICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbihuZXdTZWxlY3RlZEluZGV4LCBmYWxzZSk7Ci0g
ICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciAhPT0gIlNo
aWZ0IiAmJiBldmVudC5rZXlJZGVudGlmaWVyICE9PSAiQ3RybCIgJiYgZXZlbnQua2V5SWRlbnRp
ZmllciAhPT0gIk1ldGEiICYmIGV2ZW50LmtleUlkZW50aWZpZXIgIT09ICJMZWZ0IiAmJiBldmVu
dC5rZXlJZGVudGlmaWVyICE9PSAiUmlnaHQiKQotICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVk
dWxlRmlsdGVyKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3NjaGVkdWxlRmlsdGVyOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZmlsdGVyVGltZXIpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2ZpbHRlclRpbWVyID0gc2V0VGltZW91dCh0aGlz
Ll9maWx0ZXJJdGVtcy5iaW5kKHRoaXMpLCAwKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IGluZGV4ICAKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1ha2VMYXN0
Ci0gICAgICovCi0gICAgX3VwZGF0ZVNlbGVjdGlvbjogZnVuY3Rpb24oaW5kZXgsIG1ha2VMYXN0
KQotICAgIHsgCi0gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fdmlld3BvcnRDb250cm9sLnJl
bmRlcmVkRWxlbWVudEF0KHRoaXMuX3NlbGVjdGVkSW5kZXhJbkZpbHRlcmVkKTsKLSAgICAgICAg
aWYgKGVsZW1lbnQpCi0gICAgICAgICAgICBlbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVj
dGVkIik7Ci0gICAgICAgIHRoaXMuX3ZpZXdwb3J0Q29udHJvbC5zY3JvbGxJdGVtSW50b1ZpZXco
aW5kZXgsIG1ha2VMYXN0KTsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleEluRmlsdGVyZWQg
PSBpbmRleDsKLSAgICAgICAgZWxlbWVudCA9IHRoaXMuX3ZpZXdwb3J0Q29udHJvbC5yZW5kZXJl
ZEVsZW1lbnRBdChpbmRleCk7Ci0gICAgICAgIGlmIChlbGVtZW50KQotICAgICAgICAgICAgZWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotICAgIH0sCi0KLSAgICBfb25DbGljazog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgaXRlbUVsZW1lbnQgPSBldmVudC50
YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygiZmlsdGVyZWQtaXRlbS1saXN0LWRp
YWxvZy1pdGVtIik7Ci0gICAgICAgIGlmICghaXRlbUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLnNlbGVjdEl0ZW0oaXRlbUVsZW1lbnQuX2luZGV4
LCB0aGlzLl9wcm9tcHRFbGVtZW50LnZhbHVlLnRyaW0oKSk7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5EaWFsb2cuaGlkZSgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1i
ZXJ9Ci0gICAgICovCi0gICAgaXRlbUNvdW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fZmlsdGVyZWRJdGVtcy5sZW5ndGg7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAg
ICovCi0gICAgaXRlbUVsZW1lbnQ6IGZ1bmN0aW9uKGluZGV4KQotICAgIHsKLSAgICAgICAgdmFy
IGRlbGVnYXRlSW5kZXggPSB0aGlzLl9maWx0ZXJlZEl0ZW1zW2luZGV4XTsKLSAgICAgICAgdmFy
IGVsZW1lbnQgPSB0aGlzLl9jcmVhdGVJdGVtRWxlbWVudChkZWxlZ2F0ZUluZGV4KTsKLSAgICAg
ICAgZWxlbWVudC5fZmlsdGVyZWRJbmRleCA9IGluZGV4OwotICAgICAgICByZXR1cm4gZWxlbWVu
dDsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuRGlhbG9nRGVsZWdhdGUu
cHJvdG90eXBlCi19Ci0KLS8qKgotICogQGludGVyZmFjZQotICovCi1XZWJJbnNwZWN0b3IuU2Vs
ZWN0aW9uRGlhbG9nQ29udGVudFByb3ZpZGVyID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNw
ZWN0b3IuU2VsZWN0aW9uRGlhbG9nQ29udGVudFByb3ZpZGVyLnByb3RvdHlwZSA9IHsKLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaXRlbUluZGV4Ci0gICAgICogQHJldHVybiB7c3Ry
aW5nfQotICAgICAqLwotICAgIGl0ZW1UaXRsZUF0OiBmdW5jdGlvbihpdGVtSW5kZXgpIHsgfSwK
LQotICAgIC8qCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGl0ZW1JbmRleAotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBpdGVtU3VmZml4QXQ6IGZ1bmN0aW9uKGl0ZW1JbmRl
eCkgeyB9LAotCi0gICAgLyoKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaXRlbUluZGV4Ci0gICAg
ICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGl0ZW1TdWJ0aXRsZUF0OiBmdW5jdGlv
bihpdGVtSW5kZXgpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdGVt
SW5kZXgKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgaXRlbUtleUF0OiBm
dW5jdGlvbihpdGVtSW5kZXgpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJl
cn0KLSAgICAgKi8KLSAgICBpdGVtc0NvdW50OiBmdW5jdGlvbigpIHsgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVyLCBudW1iZXIpfSBjYWxsYmFjawotICAgICAq
LwotICAgIHJlcXVlc3RJdGVtczogZnVuY3Rpb24oY2FsbGJhY2spIHsgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdGVtSW5kZXgKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
cHJvbXB0VmFsdWUKLSAgICAgKi8KLSAgICBzZWxlY3RJdGVtOiBmdW5jdGlvbihpdGVtSW5kZXgs
IHByb21wdFZhbHVlKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVl
cnkKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgcmV3cml0ZVF1ZXJ5OiBm
dW5jdGlvbihxdWVyeSkgeyB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7IH0KLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuU2VsZWN0
aW9uRGlhbG9nQ29udGVudFByb3ZpZGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVmlld30g
dmlldwotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSBjb250ZW50UHJv
dmlkZXIKLSAqLwotV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRPdXRsaW5lRGlhbG9nID0gZnVuY3Rp
b24odmlldywgY29udGVudFByb3ZpZGVyKQotewotICAgIFdlYkluc3BlY3Rvci5TZWxlY3Rpb25E
aWFsb2dDb250ZW50UHJvdmlkZXIuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX2Z1bmN0aW9uSXRl
bXMgPSBbXTsKLSAgICB0aGlzLl92aWV3ID0gdmlldzsKLSAgICB0aGlzLl9jb250ZW50UHJvdmlk
ZXIgPSBjb250ZW50UHJvdmlkZXI7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
Vmlld30gdmlldwotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSBjb250
ZW50UHJvdmlkZXIKLSAqLwotV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRPdXRsaW5lRGlhbG9nLnNo
b3cgPSBmdW5jdGlvbih2aWV3LCBjb250ZW50UHJvdmlkZXIpCi17Ci0gICAgaWYgKFdlYkluc3Bl
Y3Rvci5EaWFsb2cuY3VycmVudEluc3RhbmNlKCkpCi0gICAgICAgIHJldHVybiBudWxsOwotICAg
IHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdE91dGxpbmVEaWFsb2co
dmlldywgY29udGVudFByb3ZpZGVyKTsKLSAgICB2YXIgZmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlh
bG9nID0gbmV3IFdlYkluc3BlY3Rvci5GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2coZGVsZWdh
dGUpOwotICAgIFdlYkluc3BlY3Rvci5EaWFsb2cuc2hvdyh2aWV3LmVsZW1lbnQsIGZpbHRlcmVk
SXRlbVNlbGVjdGlvbkRpYWxvZyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5KYXZhU2NyaXB0T3V0bGlu
ZURpYWxvZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGl0
ZW1JbmRleAotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBpdGVtVGl0bGVB
dDogZnVuY3Rpb24oaXRlbUluZGV4KQotICAgIHsKLSAgICAgICAgdmFyIGZ1bmN0aW9uSXRlbSA9
IHRoaXMuX2Z1bmN0aW9uSXRlbXNbaXRlbUluZGV4XTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
SXRlbS5uYW1lICsgKGZ1bmN0aW9uSXRlbS5hcmd1bWVudHMgPyBmdW5jdGlvbkl0ZW0uYXJndW1l
bnRzIDogIiIpOwotICAgIH0sCi0KLSAgICAvKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdGVt
SW5kZXgKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgaXRlbVN1ZmZpeEF0
OiBmdW5jdGlvbihpdGVtSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfSwK
LQotICAgIC8qCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGl0ZW1JbmRleAotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBpdGVtU3VidGl0bGVBdDogZnVuY3Rpb24oaXRlbUlu
ZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuICI6IiArICh0aGlzLl9mdW5jdGlvbkl0ZW1zW2l0
ZW1JbmRleF0ubGluZSArIDEpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gaXRlbUluZGV4Ci0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGl0
ZW1LZXlBdDogZnVuY3Rpb24oaXRlbUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2Z1bmN0aW9uSXRlbXNbaXRlbUluZGV4XS5uYW1lOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgaXRlbXNDb3VudDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uSXRlbXMubGVuZ3RoOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlciwgbnVtYmVyKX0gY2Fs
bGJhY2sKLSAgICAgKi8KLSAgICByZXF1ZXN0SXRlbXM6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAg
IHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAotICAg
ICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnRlbnRFbmNvZGVkCi0gICAgICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBtaW1lVHlwZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY29udGVu
dENhbGxiYWNrKGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKHRoaXMuX291dGxpbmVXb3JrZXIpCi0gICAgICAgICAgICAgICAgdGhp
cy5fb3V0bGluZVdvcmtlci50ZXJtaW5hdGUoKTsKLSAgICAgICAgICAgIHRoaXMuX291dGxpbmVX
b3JrZXIgPSBuZXcgV29ya2VyKCJTY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMiKTsKLSAgICAgICAg
ICAgIHRoaXMuX291dGxpbmVXb3JrZXIub25tZXNzYWdlID0gdGhpcy5fZGlkQnVpbGRPdXRsaW5l
Q2h1bmsuYmluZCh0aGlzLCBjYWxsYmFjayk7Ci0gICAgICAgICAgICBjb25zdCBtZXRob2QgPSAi
b3V0bGluZSI7Ci0gICAgICAgICAgICB0aGlzLl9vdXRsaW5lV29ya2VyLnBvc3RNZXNzYWdlKHsg
bWV0aG9kOiBtZXRob2QsIHBhcmFtczogeyBjb250ZW50OiBjb250ZW50IH0gfSk7Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5fY29udGVudFByb3ZpZGVyLnJlcXVlc3RDb250ZW50KGNvbnRlbnRD
YWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX2RpZEJ1aWxkT3V0bGluZUNodW5r
OiBmdW5jdGlvbihjYWxsYmFjaywgZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZGF0YSA9IGV2
ZW50LmRhdGE7Ci0gICAgICAgIHZhciBjaHVuayA9IGRhdGFbImNodW5rIl07Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9m
dW5jdGlvbkl0ZW1zLnB1c2goY2h1bmtbaV0pOwotICAgICAgICBjYWxsYmFjayhkYXRhLmluZGV4
LCBkYXRhLnRvdGFsKTsKLQotICAgICAgICBpZiAoZGF0YS50b3RhbCA9PT0gZGF0YS5pbmRleCAm
JiB0aGlzLl9vdXRsaW5lV29ya2VyKSB7Ci0gICAgICAgICAgICB0aGlzLl9vdXRsaW5lV29ya2Vy
LnRlcm1pbmF0ZSgpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX291dGxpbmVXb3JrZXI7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGl0ZW1J
bmRleAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRWYWx1ZQotICAgICAqLwotICAgIHNl
bGVjdEl0ZW06IGZ1bmN0aW9uKGl0ZW1JbmRleCwgcHJvbXB0VmFsdWUpCi0gICAgewotICAgICAg
ICB2YXIgbGluZU51bWJlciA9IHRoaXMuX2Z1bmN0aW9uSXRlbXNbaXRlbUluZGV4XS5saW5lOwot
ICAgICAgICBpZiAoIWlzTmFOKGxpbmVOdW1iZXIpICYmIGxpbmVOdW1iZXIgPj0gMCkKLSAgICAg
ICAgICAgIHRoaXMuX3ZpZXcuaGlnaGxpZ2h0TGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgdGhp
cy5fdmlldy5mb2N1cygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gcXVlcnkKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgcmV3cml0ZVF1
ZXJ5OiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBxdWVyeTsKLSAgICB9
LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICB9Ci19Ci0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlNlbGVjdGlvbkRpYWxv
Z0NvbnRlbnRQcm92aWRlcn0KLSAqLwotV2ViSW5zcGVjdG9yLlNlbGVjdFVJU291cmNlQ29kZURp
YWxvZyA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgcHJvamVjdHMgPSBXZWJJbnNwZWN0b3Iud29y
a3NwYWNlLnByb2plY3RzKCkuZmlsdGVyKHRoaXMuZmlsdGVyUHJvamVjdC5iaW5kKHRoaXMpKTsK
LSAgICB0aGlzLl91aVNvdXJjZUNvZGVzID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
cm9qZWN0cy5sZW5ndGg7ICsraSkKLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlcyA9IHRoaXMu
X3VpU291cmNlQ29kZXMuY29uY2F0KHByb2plY3RzW2ldLnVpU291cmNlQ29kZXMoKS5maWx0ZXIo
dGhpcy5maWx0ZXJVSVNvdXJjZUNvZGUuYmluZCh0aGlzKSkpOwotICAgIFdlYkluc3BlY3Rvci53
b3Jrc3BhY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlUHJvdmlk
ZXIuRXZlbnRzLlVJU291cmNlQ29kZUFkZGVkLCB0aGlzLl91aVNvdXJjZUNvZGVBZGRlZCwgdGhp
cyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TZWxlY3RVSVNvdXJjZUNvZGVEaWFsb2cucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0g
dWlTb3VyY2VDb2RlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8K
LSAgICB1aVNvdXJjZUNvZGVTZWxlY3RlZDogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVt
YmVyKQotICAgIHsKLSAgICAgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzCi0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2plY3R9IHByb2plY3QK
LSAgICAgKi8KLSAgICBmaWx0ZXJQcm9qZWN0OiBmdW5jdGlvbihwcm9qZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNv
ZGV9IHVpU291cmNlQ29kZQotICAgICAqLwotICAgIGZpbHRlclVJU291cmNlQ29kZTogZnVuY3Rp
b24odWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVpU291cmNlQ29kZS5uYW1l
KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdGVtSW5kZXgK
LSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgaXRlbVRpdGxlQXQ6IGZ1bmN0
aW9uKGl0ZW1JbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl91aVNvdXJjZUNvZGVz
W2l0ZW1JbmRleF0ubmFtZSgpLnRyaW1FbmQoMTAwKTsKLSAgICB9LAotCi0gICAgLyoKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gaXRlbUluZGV4Ci0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAg
ICAqLwotICAgIGl0ZW1TdWZmaXhBdDogZnVuY3Rpb24oaXRlbUluZGV4KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3F1ZXJ5TGluZU51bWJlciB8fCAiIjsKLSAgICB9LAotCi0gICAgLyoK
LSAgICAgKiBAcGFyYW0ge251bWJlcn0gaXRlbUluZGV4Ci0gICAgICogQHJldHVybiB7c3RyaW5n
fQotICAgICAqLwotICAgIGl0ZW1TdWJ0aXRsZUF0OiBmdW5jdGlvbihpdGVtSW5kZXgpCi0gICAg
ewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fdWlTb3VyY2VDb2Rlc1tpdGVtSW5k
ZXhdCi0gICAgICAgIHZhciBwcm9qZWN0TmFtZSA9IHVpU291cmNlQ29kZS5wcm9qZWN0KCkuZGlz
cGxheU5hbWUoKTsKLSAgICAgICAgdmFyIHBhdGggPSB1aVNvdXJjZUNvZGUucGF0aCgpLnNsaWNl
KCk7Ci0gICAgICAgIHBhdGgucG9wKCk7Ci0gICAgICAgIHBhdGgudW5zaGlmdChwcm9qZWN0TmFt
ZSk7Ci0gICAgICAgIHJldHVybiBwYXRoLmpvaW4oIi8iKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGl0ZW1JbmRleAotICAgICAqIEByZXR1cm4ge3N0cmluZ30K
LSAgICAgKi8KLSAgICBpdGVtS2V5QXQ6IGZ1bmN0aW9uKGl0ZW1JbmRleCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl91aVNvdXJjZUNvZGVzW2l0ZW1JbmRleF0ubmFtZSgpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgaXRlbXND
b3VudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3VpU291cmNlQ29k
ZXMubGVuZ3RoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51
bWJlciwgbnVtYmVyKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICByZXF1ZXN0SXRlbXM6IGZ1bmN0
aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdGhpcy5faXRlbXNMb2FkZWQgPSBjYWxsYmFj
azsKLSAgICAgICAgdGhpcy5faXRlbXNMb2FkZWQoMSwgMSk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdGVtSW5kZXgKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
cHJvbXB0VmFsdWUKLSAgICAgKi8KLSAgICBzZWxlY3RJdGVtOiBmdW5jdGlvbihpdGVtSW5kZXgs
IHByb21wdFZhbHVlKQotICAgIHsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXJNYXRjaCA9IHByb21w
dFZhbHVlLm1hdGNoKC9bXjpdK1w6KFtcZF0qKSQvKTsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyTWF0Y2ggPyBNYXRoLm1heChwYXJzZUludChsaW5lTnVtYmVyTWF0Y2hbMV0s
IDEwKSAtIDEsIDApIDogMDsKLSAgICAgICAgdGhpcy51aVNvdXJjZUNvZGVTZWxlY3RlZCh0aGlz
Ll91aVNvdXJjZUNvZGVzW2l0ZW1JbmRleF0sIGxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9
Ci0gICAgICovCi0gICAgcmV3cml0ZVF1ZXJ5OiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAg
ICAgIGlmICghcXVlcnkpCi0gICAgICAgICAgICByZXR1cm4gcXVlcnk7Ci0gICAgICAgIHF1ZXJ5
ID0gcXVlcnkudHJpbSgpOwotICAgICAgICB2YXIgbGluZU51bWJlck1hdGNoID0gcXVlcnkubWF0
Y2goLyhbXjpdKykoXDpbXGRdKikkLyk7Ci0gICAgICAgIHRoaXMuX3F1ZXJ5TGluZU51bWJlciA9
IGxpbmVOdW1iZXJNYXRjaCA/IGxpbmVOdW1iZXJNYXRjaFsyXSA6ICIiOwotICAgICAgICByZXR1
cm4gbGluZU51bWJlck1hdGNoID8gbGluZU51bWJlck1hdGNoWzFdIDogcXVlcnk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAg
ICAqLwotICAgIF91aVNvdXJjZUNvZGVBZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICB2YXIgdWlTb3VyY2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIGlmICghdGhpcy5maWx0ZXJVSVNvdXJjZUNv
ZGUodWlTb3VyY2VDb2RlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fdWlT
b3VyY2VDb2Rlcy5wdXNoKHVpU291cmNlQ29kZSkKLSAgICAgICAgdGhpcy5faXRlbXNMb2FkZWQo
MSwgMSk7Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci53b3Jrc3BhY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
VUlTb3VyY2VDb2RlUHJvdmlkZXIuRXZlbnRzLlVJU291cmNlQ29kZUFkZGVkLCB0aGlzLl91aVNv
dXJjZUNvZGVBZGRlZCwgdGhpcyk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TZWxlY3RVSVNvdXJjZUNvZGVEaWFsb2d9Ci0gKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWx9IHBhbmVsCi0gKi8KLVdlYkluc3BlY3Rv
ci5PcGVuUmVzb3VyY2VEaWFsb2cgPSBmdW5jdGlvbihwYW5lbCkKLXsKLSAgICBXZWJJbnNwZWN0
b3IuU2VsZWN0VUlTb3VyY2VDb2RlRGlhbG9nLmNhbGwodGhpcyk7Ci0gICAgdGhpcy5fcGFuZWwg
PSBwYW5lbDsKLX0KLQotV2ViSW5zcGVjdG9yLk9wZW5SZXNvdXJjZURpYWxvZy5wcm90b3R5cGUg
PSB7Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9
IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICov
Ci0gICAgdWlTb3VyY2VDb2RlU2VsZWN0ZWQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51
bWJlcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhbmVsLnNob3dVSVNvdXJjZUNvZGUodWlTb3Vy
Y2VDb2RlLCBsaW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuUHJvamVjdH0gcHJvamVjdAotICAgICAqLwotICAgIGZpbHRlclByb2plY3Q6
IGZ1bmN0aW9uKHByb2plY3QpCi0gICAgewotICAgICAgICByZXR1cm4gIXByb2plY3QuaXNTZXJ2
aWNlUHJvamVjdCgpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TZWxl
Y3RVSVNvdXJjZUNvZGVEaWFsb2cucHJvdG90eXBlCi19Ci0KLS8qKgotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsfSBwYW5lbAotICogQHBhcmFtIHtFbGVtZW50fSByZWxhdGl2
ZVRvRWxlbWVudAotICovCi1XZWJJbnNwZWN0b3IuT3BlblJlc291cmNlRGlhbG9nLnNob3cgPSBm
dW5jdGlvbihwYW5lbCwgcmVsYXRpdmVUb0VsZW1lbnQpCi17Ci0gICAgaWYgKFdlYkluc3BlY3Rv
ci5EaWFsb2cuY3VycmVudEluc3RhbmNlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBm
aWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cgPSBuZXcgV2ViSW5zcGVjdG9yLkZpbHRlcmVkSXRl
bVNlbGVjdGlvbkRpYWxvZyhuZXcgV2ViSW5zcGVjdG9yLk9wZW5SZXNvdXJjZURpYWxvZyhwYW5l
bCkpOwotICAgIGZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5yZW5kZXJBc1R3b1Jvd3MoKTsK
LSAgICBXZWJJbnNwZWN0b3IuRGlhbG9nLnNob3cocmVsYXRpdmVUb0VsZW1lbnQsIGZpbHRlcmVk
SXRlbVNlbGVjdGlvbkRpYWxvZyk7Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLlNlbGVjdFVJU291cmNlQ29kZURpYWxvZ30KLSAqIEBwYXJhbSB7
c3RyaW5nfSB0eXBlCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNv
ZGUpfSBjYWxsYmFjawotICovCi1XZWJJbnNwZWN0b3IuU2VsZWN0VUlTb3VyY2VDb2RlRm9yUHJv
amVjdFR5cGVEaWFsb2cgPSBmdW5jdGlvbih0eXBlLCBjYWxsYmFjaykKLXsKLSAgICB0aGlzLl90
eXBlID0gdHlwZTsKLSAgICBXZWJJbnNwZWN0b3IuU2VsZWN0VUlTb3VyY2VDb2RlRGlhbG9nLmNh
bGwodGhpcyk7Ci0gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjazsKLX0KLQotV2ViSW5zcGVj
dG9yLlNlbGVjdFVJU291cmNlQ29kZUZvclByb2plY3RUeXBlRGlhbG9nLnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291
cmNlQ29kZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAg
dWlTb3VyY2VDb2RlU2VsZWN0ZWQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJlcikK
LSAgICB7Ci0gICAgICAgIHRoaXMuX2NhbGxiYWNrKHVpU291cmNlQ29kZSk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2plY3R9IHByb2plY3QKLSAg
ICAgKi8KLSAgICBmaWx0ZXJQcm9qZWN0OiBmdW5jdGlvbihwcm9qZWN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHByb2plY3QudHlwZSgpID09PSB0aGlzLl90eXBlOwotICAgIH0sCi0KLSAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5TZWxlY3RVSVNvdXJjZUNvZGVEaWFsb2cucHJvdG90eXBl
Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IHR5cGUKLSAqIEBwYXJhbSB7ZnVuY3Rpb24o
V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZSl9IGNhbGxiYWNrCi0gKiBAcGFyYW0ge0VsZW1lbnR9
IHJlbGF0aXZlVG9FbGVtZW50Ci0gKi8KLVdlYkluc3BlY3Rvci5TZWxlY3RVSVNvdXJjZUNvZGVG
b3JQcm9qZWN0VHlwZURpYWxvZy5zaG93ID0gZnVuY3Rpb24obmFtZSwgdHlwZSwgY2FsbGJhY2ss
IHJlbGF0aXZlVG9FbGVtZW50KQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuRGlhbG9nLmN1cnJl
bnRJbnN0YW5jZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgZmlsdGVyZWRJdGVtU2Vs
ZWN0aW9uRGlhbG9nID0gbmV3IFdlYkluc3BlY3Rvci5GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFs
b2cobmV3IFdlYkluc3BlY3Rvci5TZWxlY3RVSVNvdXJjZUNvZGVGb3JQcm9qZWN0VHlwZURpYWxv
Zyh0eXBlLCBjYWxsYmFjaykpOwotICAgIGZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5zZXRR
dWVyeShuYW1lKTsKLSAgICBmaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cucmVuZGVyQXNUd29S
b3dzKCk7Ci0gICAgV2ViSW5zcGVjdG9yLkRpYWxvZy5zaG93KHJlbGF0aXZlVG9FbGVtZW50LCBm
aWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GbGFtZUNoYXJ0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9GbGFtZUNoYXJ0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMGMxMmZlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRmxhbWVDaGFydC5qcworKysgL2Rldi9udWxsCkBAIC0xLDY3MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3fSBjcHVQcm9maWxlVmlldwotICovCi1XZWJJ
bnNwZWN0b3IuRmxhbWVDaGFydCA9IGZ1bmN0aW9uKGNwdVByb2ZpbGVWaWV3KQotewotICAgIFdl
Ykluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NT
KCJmbGFtZUNoYXJ0LmNzcyIpOwotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiZmlsbCI7
Ci0gICAgdGhpcy5lbGVtZW50LmlkID0gImNwdS1mbGFtZS1jaGFydCI7Ci0KLSAgICB0aGlzLl9v
dmVydmlld0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgIm92ZXJ2
aWV3LWNvbnRhaW5lciIpOwotICAgIHRoaXMuX292ZXJ2aWV3R3JpZCA9IG5ldyBXZWJJbnNwZWN0
b3IuT3ZlcnZpZXdHcmlkKCJmbGFtZS1jaGFydCIpOwotICAgIHRoaXMuX292ZXJ2aWV3Q29udGFp
bmVyLmFwcGVuZENoaWxkKHRoaXMuX292ZXJ2aWV3R3JpZC5lbGVtZW50KTsKLSAgICB0aGlzLl9v
dmVydmlld0NhbGN1bGF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkZsYW1lQ2hhcnQuT3ZlcnZpZXdD
YWxjdWxhdG9yKCk7Ci0gICAgdGhpcy5fb3ZlcnZpZXdHcmlkLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLk92ZXJ2aWV3R3JpZC5FdmVudHMuV2luZG93Q2hhbmdlZCwgdGhpcy5fb25XaW5k
b3dDaGFuZ2VkLCB0aGlzKTsKLSAgICB0aGlzLl9vdmVydmlld0NhbnZhcyA9IHRoaXMuX292ZXJ2
aWV3Q29udGFpbmVyLmNyZWF0ZUNoaWxkKCJjYW52YXMiKTsKLQotICAgIHRoaXMuX2NoYXJ0Q29u
dGFpbmVyID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiY2hhcnQtY29udGFpbmVy
Iik7Ci0gICAgdGhpcy5fdGltZWxpbmVHcmlkID0gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZUdy
aWQoKTsKLSAgICB0aGlzLl9jaGFydENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl90aW1lbGlu
ZUdyaWQuZWxlbWVudCk7Ci0gICAgdGhpcy5fY2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3Iu
RmxhbWVDaGFydC5DYWxjdWxhdG9yKCk7Ci0KLSAgICB0aGlzLl9jYW52YXMgPSB0aGlzLl9jaGFy
dENvbnRhaW5lci5jcmVhdGVDaGlsZCgiY2FudmFzIik7Ci0gICAgV2ViSW5zcGVjdG9yLmluc3Rh
bGxEcmFnSGFuZGxlKHRoaXMuX2NhbnZhcywgdGhpcy5fc3RhcnRDYW52YXNEcmFnZ2luZy5iaW5k
KHRoaXMpLCB0aGlzLl9jYW52YXNEcmFnZ2luZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRDYW52YXNE
cmFnZ2luZy5iaW5kKHRoaXMpLCAiY29sLXJlc2l6ZSIpOwotCi0gICAgdGhpcy5fY3B1UHJvZmls
ZVZpZXcgPSBjcHVQcm9maWxlVmlldzsKLSAgICB0aGlzLl93aW5kb3dMZWZ0ID0gMC4wOwotICAg
IHRoaXMuX3dpbmRvd1JpZ2h0ID0gMS4wOwotICAgIHRoaXMuX2JhckhlaWdodCA9IDE1OwotICAg
IHRoaXMuX21pbldpZHRoID0gMTsKLSAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDE1OwotICAgIHRo
aXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwgdGhpcy5fb25Nb3VzZVdo
ZWVsLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9w
b3BvdmVySGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVyKHRoaXMuX2NoYXJ0
Q29udGFpbmVyLCB0aGlzLl9nZXRQb3BvdmVyQW5jaG9yLmJpbmQodGhpcyksIHRoaXMuX3Nob3dQ
b3BvdmVyLmJpbmQodGhpcykpOwotICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuc2V0VGltZW91dCgy
NTApOwotICAgIHRoaXMuX2xpbmtpZmllciA9IG5ldyBXZWJJbnNwZWN0b3IuTGlua2lmaWVyKCk7
Ci0gICAgdGhpcy5faGlnaGxpZ2h0ZWROb2RlSW5kZXggPSAtMTsKLQotICAgIGlmICghV2ViSW5z
cGVjdG9yLkZsYW1lQ2hhcnQuX2NvbG9yR2VuZXJhdG9yKQotICAgICAgICBXZWJJbnNwZWN0b3Iu
RmxhbWVDaGFydC5fY29sb3JHZW5lcmF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkZsYW1lQ2hhcnQu
Q29sb3JHZW5lcmF0b3IoKTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IgICAgICAgICAgICBl
bnRyaWVzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5GbGFtZUNoYXJ0LkVudHJ5KGNvbG9yUGFpciwg
bGV2ZWwsIG5vZGUudG90YWxUaW1lLCBvZmZzZXQsIG5vZGUpKTsKLS8KLSAqIEBpbXBsZW1lbnRz
IHtXZWJJbnNwZWN0b3IuVGltZWxpbmVHcmlkLkNhbGN1bGF0b3J9Ci0gKi8KLVdlYkluc3BlY3Rv
ci5GbGFtZUNoYXJ0LkNhbGN1bGF0b3IgPSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3BlY3Rv
ci5GbGFtZUNoYXJ0LkNhbGN1bGF0b3IucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkZsYW1lQ2hhcnR9IGZsYW1lQ2hhcnQKLSAgICAgKi8KLSAgICBf
dXBkYXRlQm91bmRhcmllczogZnVuY3Rpb24oZmxhbWVDaGFydCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX21pbmltdW1Cb3VuZGFyaWVzID0gZmxhbWVDaGFydC5fd2luZG93TGVmdCAqIGZsYW1lQ2hh
cnQuX3RpbWVsaW5lRGF0YS50b3RhbFRpbWU7Ci0gICAgICAgIHRoaXMuX21heGltdW1Cb3VuZGFy
aWVzID0gZmxhbWVDaGFydC5fd2luZG93UmlnaHQgKiBmbGFtZUNoYXJ0Ll90aW1lbGluZURhdGEu
dG90YWxUaW1lOwotICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IGZsYW1lQ2hhcnQuX3BhZGRp
bmdMZWZ0OwotICAgICAgICB0aGlzLl93aWR0aCA9IGZsYW1lQ2hhcnQuX2NhbnZhcy53aWR0aCAt
IHRoaXMuX3BhZGRpbmdMZWZ0OwotICAgICAgICB0aGlzLl90aW1lVG9QaXhlbCA9IHRoaXMuX3dp
ZHRoIC8gdGhpcy5ib3VuZGFyeVNwYW4oKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IHRpbWUKLSAgICAgKi8KLSAgICBjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9u
KHRpbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKHRpbWUgLSB0aGlzLl9taW5pbXVtQm91bmRh
cmllcykgKiB0aGlzLl90aW1lVG9QaXhlbCArIHRoaXMuX3BhZGRpbmdMZWZ0OwotICAgIH0sCi0K
LSAgICBmb3JtYXRUaW1lOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBO
dW1iZXIuc2Vjb25kc1RvU3RyaW5nKCh2YWx1ZSArIHRoaXMuX21pbmltdW1Cb3VuZGFyaWVzKSAv
IDEwMDApOwotICAgIH0sCi0KLSAgICBtYXhpbXVtQm91bmRhcnk6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYXhpbXVtQm91bmRhcmllczsKLSAgICB9LAotCi0gICAg
bWluaW11bUJvdW5kYXJ5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
bWluaW11bUJvdW5kYXJpZXM7Ci0gICAgfSwKLQotICAgIHplcm9UaW1lOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9LAotCi0gICAgYm91bmRhcnlTcGFuOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWF4aW11bUJvdW5kYXJpZXMgLSB0
aGlzLl9taW5pbXVtQm91bmRhcmllczsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lR3JpZC5DYWxjdWxhdG9yfQot
ICovCi1XZWJJbnNwZWN0b3IuRmxhbWVDaGFydC5PdmVydmlld0NhbGN1bGF0b3IgPSBmdW5jdGlv
bigpCi17Ci19Ci0KLVdlYkluc3BlY3Rvci5GbGFtZUNoYXJ0Lk92ZXJ2aWV3Q2FsY3VsYXRvci5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmxhbWVD
aGFydH0gZmxhbWVDaGFydAotICAgICAqLwotICAgIF91cGRhdGVCb3VuZGFyaWVzOiBmdW5jdGlv
bihmbGFtZUNoYXJ0KQotICAgIHsKLSAgICAgICAgdGhpcy5fbWluaW11bUJvdW5kYXJpZXMgPSAw
OwotICAgICAgICB0aGlzLl9tYXhpbXVtQm91bmRhcmllcyA9IGZsYW1lQ2hhcnQuX3RpbWVsaW5l
RGF0YS50b3RhbFRpbWU7Ci0gICAgICAgIHRoaXMuX3hTY2FsZUZhY3RvciA9IGZsYW1lQ2hhcnQu
X2NhbnZhcy53aWR0aCAvIGZsYW1lQ2hhcnQuX3RpbWVsaW5lRGF0YS50b3RhbFRpbWU7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lCi0gICAgICovCi0gICAg
Y29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbih0aW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0
aW1lIC0gdGhpcy5fbWluaW11bUJvdW5kYXJpZXMpICogdGhpcy5feFNjYWxlRmFjdG9yOwotICAg
IH0sCi0KLSAgICBmb3JtYXRUaW1lOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKCh2YWx1ZSArIHRoaXMuX21pbmltdW1Cb3VuZGFy
aWVzKSAvIDEwMDApOwotICAgIH0sCi0KLSAgICBtYXhpbXVtQm91bmRhcnk6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYXhpbXVtQm91bmRhcmllczsKLSAgICB9LAot
Ci0gICAgbWluaW11bUJvdW5kYXJ5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fbWluaW11bUJvdW5kYXJpZXM7Ci0gICAgfSwKLQotICAgIHplcm9UaW1lOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWluaW11bUJvdW5kYXJpZXM7Ci0gICAg
fSwKLQotICAgIGJvdW5kYXJ5U3BhbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX21heGltdW1Cb3VuZGFyaWVzIC0gdGhpcy5fbWluaW11bUJvdW5kYXJpZXM7Ci0gICAg
fQotfQotCi1XZWJJbnNwZWN0b3IuRmxhbWVDaGFydC5FdmVudHMgPSB7Ci0gICAgU2VsZWN0ZWRO
b2RlOiAiU2VsZWN0ZWROb2RlIgotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJ
bnNwZWN0b3IuRmxhbWVDaGFydC5Db2xvckdlbmVyYXRvciA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0
aGlzLl9jb2xvclBhaXJzID0ge307Ci0gICAgdGhpcy5fY3VycmVudENvbG9ySW5kZXggPSAwOwot
fQotCi1XZWJJbnNwZWN0b3IuRmxhbWVDaGFydC5Db2xvckdlbmVyYXRvci5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHshc3RyaW5nfSBpZAotICAgICAqLwotICAgIF9jb2xv
clBhaXJGb3JJRDogZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICB2YXIgY29sb3JQYWlycyA9
IHRoaXMuX2NvbG9yUGFpcnM7Ci0gICAgICAgIHZhciBjb2xvclBhaXIgPSBjb2xvclBhaXJzW2lk
XTsKLSAgICAgICAgaWYgKCFjb2xvclBhaXIpIHsKLSAgICAgICAgICAgIHZhciBjdXJyZW50Q29s
b3JJbmRleCA9ICsrdGhpcy5fY3VycmVudENvbG9ySW5kZXg7Ci0gICAgICAgICAgICB2YXIgaHVl
ID0gKGN1cnJlbnRDb2xvckluZGV4ICogNSArIDExICogKGN1cnJlbnRDb2xvckluZGV4ICUgMikp
ICUgMzYwOwotICAgICAgICAgICAgY29sb3JQYWlyc1tpZF0gPSBjb2xvclBhaXIgPSB7aGlnaGxp
Z2h0ZWQ6ICJoc2xhKCIgKyBodWUgKyAiLCAxMDAlLCAzMyUsIDAuNykiLCBub3JtYWw6ICJoc2xh
KCIgKyBodWUgKyAiLCAxMDAlLCA2NiUsIDAuNykifTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gY29sb3JQYWlyOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJh
bSB7IU9iamVjdH0gY29sb3JQYWlyCi0gKiBAcGFyYW0geyFudW1iZXJ9IGRlcHRoCi0gKiBAcGFy
YW0geyFudW1iZXJ9IGR1cmF0aW9uCi0gKiBAcGFyYW0geyFudW1iZXJ9IHN0YXJ0VGltZQotICog
QHBhcmFtIHtPYmplY3R9IG5vZGUKLSAqLwotV2ViSW5zcGVjdG9yLkZsYW1lQ2hhcnQuRW50cnkg
PSBmdW5jdGlvbihjb2xvclBhaXIsIGRlcHRoLCBkdXJhdGlvbiwgc3RhcnRUaW1lLCBub2RlKQot
ewotICAgIHRoaXMuY29sb3JQYWlyID0gY29sb3JQYWlyOwotICAgIHRoaXMuZGVwdGggPSBkZXB0
aDsKLSAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgdGhpcy5zdGFydFRpbWUgPSBz
dGFydFRpbWU7Ci0gICAgdGhpcy5ub2RlID0gbm9kZTsKLX0KLQotV2ViSW5zcGVjdG9yLkZsYW1l
Q2hhcnQucHJvdG90eXBlID0gewotICAgIF9vbldpbmRvd0NoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgdGhpcy5faGlkZVBvcG92ZXIoKTsKLSAgICAgICAgdGhpcy5fc2No
ZWR1bGVVcGRhdGUoKTsKLSAgICB9LAotCi0gICAgX3N0YXJ0Q2FudmFzRHJhZ2dpbmc6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl90aW1lbGluZURhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRoaXMuX2lzRHJhZ2dpbmcgPSB0cnVlOwot
ICAgICAgICB0aGlzLl9kcmFnU3RhcnRQb2ludCA9IGV2ZW50LnBhZ2VYOwotICAgICAgICB0aGlz
Ll9kcmFnU3RhcnRXaW5kb3dMZWZ0ID0gdGhpcy5fd2luZG93TGVmdDsKLSAgICAgICAgdGhpcy5f
ZHJhZ1N0YXJ0V2luZG93UmlnaHQgPSB0aGlzLl93aW5kb3dSaWdodDsKLSAgICAgICAgdGhpcy5f
aGlkZVBvcG92ZXIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIF9jYW52
YXNEcmFnZ2luZzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcGl4ZWxTaGlm
dCA9IHRoaXMuX2RyYWdTdGFydFBvaW50IC0gZXZlbnQucGFnZVg7Ci0gICAgICAgIHZhciB3aW5k
b3dTaGlmdCA9IHBpeGVsU2hpZnQgLyB0aGlzLl90b3RhbFBpeGVsczsKLQotICAgICAgICB2YXIg
d2luZG93TGVmdCA9IE1hdGgubWF4KDAsIHRoaXMuX2RyYWdTdGFydFdpbmRvd0xlZnQgKyB3aW5k
b3dTaGlmdCk7Ci0gICAgICAgIGlmICh3aW5kb3dMZWZ0ID09PSB0aGlzLl93aW5kb3dMZWZ0KQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aW5kb3dTaGlmdCA9IHdpbmRvd0xlZnQgLSB0
aGlzLl9kcmFnU3RhcnRXaW5kb3dMZWZ0OwotICAgICAgICAKLSAgICAgICAgdmFyIHdpbmRvd1Jp
Z2h0ID0gTWF0aC5taW4oMSwgdGhpcy5fZHJhZ1N0YXJ0V2luZG93UmlnaHQgKyB3aW5kb3dTaGlm
dCk7Ci0gICAgICAgIGlmICh3aW5kb3dSaWdodCA9PT0gdGhpcy5fd2luZG93UmlnaHQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHdpbmRvd1NoaWZ0ID0gd2luZG93UmlnaHQgLSB0aGlz
Ll9kcmFnU3RhcnRXaW5kb3dSaWdodDsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdHcmlkLnNldFdp
bmRvdyh0aGlzLl9kcmFnU3RhcnRXaW5kb3dMZWZ0ICsgd2luZG93U2hpZnQsIHRoaXMuX2RyYWdT
dGFydFdpbmRvd1JpZ2h0ICsgd2luZG93U2hpZnQpOwotICAgIH0sCi0KLSAgICBfZW5kQ2FudmFz
RHJhZ2dpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lzRHJhZ2dpbmcgPSBm
YWxzZTsKLSAgICB9LAotCi0gICAgX2NhbGN1bGF0ZVRpbWVsaW5lRGF0YTogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NwdVByb2ZpbGVWaWV3LnNhbXBsZXMpCi0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlVGltZWxpbmVEYXRhRm9yU2FtcGxlcygpOwotCi0g
ICAgICAgIGlmICh0aGlzLl90aW1lbGluZURhdGEpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5f
dGltZWxpbmVEYXRhOwotCi0gICAgICAgIGlmICghdGhpcy5fY3B1UHJvZmlsZVZpZXcucHJvZmls
ZUhlYWQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIgaW5kZXggPSAw
OwotICAgICAgICB2YXIgZW50cmllcyA9IFtdOwotCi0gICAgICAgIGZ1bmN0aW9uIGFwcGVuZFJl
dmVyc2VkQXJyYXkodG9BcnJheSwgZnJvbUFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gZnJvbUFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICAg
ICAgICAgIHRvQXJyYXkucHVzaChmcm9tQXJyYXlbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyIHN0YWNrID0gW107Ci0gICAgICAgIGFwcGVuZFJldmVyc2VkQXJyYXkoc3RhY2ssIHRoaXMu
X2NwdVByb2ZpbGVWaWV3LnByb2ZpbGVIZWFkLmNoaWxkcmVuKTsKLQotICAgICAgICB2YXIgbGV2
ZWxPZmZzZXRzID0gLyoqIEB0eXBlIHtBcnJheS48IW51bWJlcj59ICovIChbMF0pOwotICAgICAg
ICB2YXIgbGV2ZWxFeGl0SW5kZXhlcyA9IC8qKiBAdHlwZSB7QXJyYXkuPCFudW1iZXI+fSAqLyAo
WzBdKTsKLSAgICAgICAgdmFyIGNvbG9yR2VuZXJhdG9yID0gV2ViSW5zcGVjdG9yLkZsYW1lQ2hh
cnQuX2NvbG9yR2VuZXJhdG9yOwotCi0gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKLSAg
ICAgICAgICAgIHZhciBsZXZlbCA9IGxldmVsT2Zmc2V0cy5sZW5ndGggLSAxOwotICAgICAgICAg
ICAgdmFyIG5vZGUgPSBzdGFjay5wb3AoKTsKLSAgICAgICAgICAgIHZhciBvZmZzZXQgPSBsZXZl
bE9mZnNldHNbbGV2ZWxdOwotCi0gICAgICAgICAgICB2YXIgY29sb3JQYWlyID0gY29sb3JHZW5l
cmF0b3IuX2NvbG9yUGFpckZvcklEKG5vZGUuZnVuY3Rpb25OYW1lICsgIjoiICsgbm9kZS51cmwg
KyAiOiIgKyBub2RlLmxpbmVOdW1iZXIpOwotCi0gICAgICAgICAgICBlbnRyaWVzLnB1c2gobmV3
IFdlYkluc3BlY3Rvci5GbGFtZUNoYXJ0LkVudHJ5KGNvbG9yUGFpciwgbGV2ZWwsIG5vZGUudG90
YWxUaW1lLCBvZmZzZXQsIG5vZGUpKTsKLQotICAgICAgICAgICAgKytpbmRleDsKLQotICAgICAg
ICAgICAgbGV2ZWxPZmZzZXRzW2xldmVsXSArPSBub2RlLnRvdGFsVGltZTsKLSAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGxldmVsRXhpdElu
ZGV4ZXMucHVzaChzdGFjay5sZW5ndGgpOwotICAgICAgICAgICAgICAgIGxldmVsT2Zmc2V0cy5w
dXNoKG9mZnNldCArIG5vZGUuc2VsZlRpbWUgLyAyKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRS
ZXZlcnNlZEFycmF5KHN0YWNrLCBub2RlLmNoaWxkcmVuKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA9PT0gbGV2ZWxFeGl0SW5kZXhlc1tsZXZlbEV4
aXRJbmRleGVzLmxlbmd0aCAtIDFdKSB7Ci0gICAgICAgICAgICAgICAgbGV2ZWxPZmZzZXRzLnBv
cCgpOwotICAgICAgICAgICAgICAgIGxldmVsRXhpdEluZGV4ZXMucG9wKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl90aW1lbGluZURhdGEgPSB7Ci0gICAgICAg
ICAgICBlbnRyaWVzOiBlbnRyaWVzLAotICAgICAgICAgICAgdG90YWxUaW1lOiB0aGlzLl9jcHVQ
cm9maWxlVmlldy5wcm9maWxlSGVhZC50b3RhbFRpbWUsCi0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gdGhpcy5fdGltZWxpbmVEYXRhOwotICAgIH0sCi0KLSAgICBfY2FsY3VsYXRlVGltZWxp
bmVEYXRhRm9yU2FtcGxlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3Rp
bWVsaW5lRGF0YSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZURhdGE7Ci0KLSAg
ICAgICAgaWYgKCF0aGlzLl9jcHVQcm9maWxlVmlldy5wcm9maWxlSGVhZCkKLSAgICAgICAgICAg
IHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBzYW1wbGVzID0gdGhpcy5fY3B1UHJvZmlsZVZp
ZXcuc2FtcGxlczsKLSAgICAgICAgdmFyIGlkVG9Ob2RlID0gdGhpcy5fY3B1UHJvZmlsZVZpZXcu
X2lkVG9Ob2RlOwotICAgICAgICB2YXIgc2FtcGxlc0NvdW50ID0gc2FtcGxlcy5sZW5ndGg7Ci0K
LSAgICAgICAgdmFyIGluZGV4ID0gMDsKLSAgICAgICAgdmFyIGVudHJpZXMgPSAvKiogQHR5cGUg
e0FycmF5LjwhV2ViSW5zcGVjdG9yLkZsYW1lQ2hhcnQuRW50cnk+fSAqLyAoW10pOwotCi0gICAg
ICAgIHZhciBvcGVuSW50ZXJ2YWxzID0gW107Ci0gICAgICAgIHZhciBzdGFja1RyYWNlID0gW107
Ci0gICAgICAgIHZhciBjb2xvckdlbmVyYXRvciA9IFdlYkluc3BlY3Rvci5GbGFtZUNoYXJ0Ll9j
b2xvckdlbmVyYXRvcjsKLSAgICAgICAgZm9yICh2YXIgc2FtcGxlSW5kZXggPSAwOyBzYW1wbGVJ
bmRleCA8IHNhbXBsZXNDb3VudDsgc2FtcGxlSW5kZXgrKykgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSBpZFRvTm9kZVtzYW1wbGVzW3NhbXBsZUluZGV4XV07Ci0gICAgICAgICAgICBzdGFja1Ry
YWNlLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAg
ICAgIHN0YWNrVHJhY2UucHVzaChub2RlKTsKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5w
YXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFja1RyYWNlLnBvcCgpOyAvLyBS
ZW1vdmUgKHJvb3QpIG5vZGUKLQotICAgICAgICAgICAgdmFyIGRlcHRoID0gMDsKLSAgICAgICAg
ICAgIG5vZGUgPSBzdGFja1RyYWNlLnBvcCgpOwotICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYg
ZGVwdGggPCBvcGVuSW50ZXJ2YWxzLmxlbmd0aCAmJiBub2RlID09PSBvcGVuSW50ZXJ2YWxzW2Rl
cHRoXS5ub2RlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGludGVydmFsSW5kZXggPSBvcGVuSW50
ZXJ2YWxzW2RlcHRoXS5pbmRleDsKLSAgICAgICAgICAgICAgICBlbnRyaWVzW2ludGVydmFsSW5k
ZXhdLmR1cmF0aW9uICs9IDE7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IHN0YWNrVHJhY2UucG9w
KCk7Ci0gICAgICAgICAgICAgICAgKytkZXB0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChkZXB0aCA8IG9wZW5JbnRlcnZhbHMubGVuZ3RoKQotICAgICAgICAgICAgICAgIG9wZW5J
bnRlcnZhbHMubGVuZ3RoID0gZGVwdGg7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNvbG9yUGFpciA9IGNvbG9yR2VuZXJhdG9yLl9jb2xvclBhaXJGb3JJRChu
b2RlLmZ1bmN0aW9uTmFtZSArICI6IiArIG5vZGUudXJsICsgIjoiICsgbm9kZS5saW5lTnVtYmVy
KTsKLQotICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkZsYW1l
Q2hhcnQuRW50cnkoY29sb3JQYWlyLCBkZXB0aCwgMSwgc2FtcGxlSW5kZXgsIG5vZGUpKTsKLSAg
ICAgICAgICAgICAgICBvcGVuSW50ZXJ2YWxzLnB1c2goe25vZGU6IG5vZGUsIGluZGV4OiBpbmRl
eH0pOwotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0KLSAgICAgICAgICAgICAgICBub2RlID0g
c3RhY2tUcmFjZS5wb3AoKTsKLSAgICAgICAgICAgICAgICArK2RlcHRoOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fdGltZWxpbmVEYXRhID0gewotICAgICAgICAg
ICAgZW50cmllczogZW50cmllcywKLSAgICAgICAgICAgIHRvdGFsVGltZTogc2FtcGxlc0NvdW50
LAotICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZURhdGE7Ci0gICAg
fSwKLQotICAgIF9nZXRQb3BvdmVyQW5jaG9yOiBmdW5jdGlvbihlbGVtZW50LCBldmVudCkKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc0RyYWdnaW5nKQotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0KLSAgICAgICAgdmFyIG5vZGVJbmRleCA9IHRoaXMuX2Nvb3JkaW5hdGVzVG9Ob2RlSW5k
ZXgoZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WSk7Ci0KLSAgICAgICAgdGhpcy5faGlnaGxp
Z2h0ZWROb2RlSW5kZXggPSBub2RlSW5kZXg7Ci0gICAgICAgIHRoaXMudXBkYXRlKCk7Ci0KLSAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQot
ICAgICAgICB2YXIgYW5jaG9yQm94ID0gbmV3IEFuY2hvckJveCgpOwotICAgICAgICB0aGlzLl9l
bnRyeVRvQW5jaG9yQm94KHRoaXMuX3RpbWVsaW5lRGF0YS5lbnRyaWVzW25vZGVJbmRleF0sIGFu
Y2hvckJveCk7Ci0gICAgICAgIGFuY2hvckJveC54ICs9IGV2ZW50LnBhZ2VYIC0gZXZlbnQub2Zm
c2V0WDsKLSAgICAgICAgYW5jaG9yQm94LnkgKz0gZXZlbnQucGFnZVkgLSBldmVudC5vZmZzZXRZ
OwotCi0gICAgICAgIHJldHVybiBhbmNob3JCb3g7Ci0gICAgfSwKLQotICAgIF9zaG93UG9wb3Zl
cjogZnVuY3Rpb24oYW5jaG9yLCBwb3BvdmVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lz
RHJhZ2dpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5f
dGltZWxpbmVEYXRhLmVudHJpZXNbdGhpcy5faGlnaGxpZ2h0ZWROb2RlSW5kZXhdLm5vZGU7Ci0g
ICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGNvbnRl
bnRIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXJDb250ZW50SGVscGVyKG5vZGUuZnVu
Y3Rpb25OYW1lKTsKLSAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiVG90YWwgdGltZSIpLCBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKG5vZGUu
dG90YWxUaW1lIC8gMTAwMCwgdHJ1ZSkpOwotICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZFRl
eHRSb3coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZWxmIHRpbWUiKSwgTnVtYmVyLnNlY29uZHNU
b1N0cmluZyhub2RlLnNlbGZUaW1lIC8gMTAwMCwgdHJ1ZSkpOwotICAgICAgICBpZiAobm9kZS5u
dW1iZXJPZkNhbGxzKQotICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiTnVtYmVyIG9mIGNhbGxzIiksIG5vZGUubnVtYmVyT2ZDYWxs
cyk7Ci0gICAgICAgIGlmIChub2RlLnVybCkgewotICAgICAgICAgICAgdmFyIGxpbmsgPSB0aGlz
Ll9saW5raWZpZXIubGlua2lmeUxvY2F0aW9uKG5vZGUudXJsLCBub2RlLmxpbmVOdW1iZXIpOwot
ICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRFbGVtZW50Um93KCJMb2NhdGlvbiIsIGxp
bmspOwotICAgICAgICB9Ci0KLSAgICAgICAgcG9wb3Zlci5zaG93KGNvbnRlbnRIZWxwZXIuX2Nv
bnRlbnRUYWJsZSwgYW5jaG9yKTsKLSAgICB9LAotCi0gICAgX2hpZGVQb3BvdmVyOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9wb3BvdmVySGVscGVyLmhpZGVQb3BvdmVyKCk7Ci0g
ICAgICAgIHRoaXMuX2xpbmtpZmllci5yZXNldCgpOwotICAgIH0sCi0KLSAgICBfb25DbGljazog
ZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRlZE5vZGVJbmRl
eCA9PT0gLTEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5f
dGltZWxpbmVEYXRhLmVudHJpZXNbdGhpcy5faGlnaGxpZ2h0ZWROb2RlSW5kZXhdLm5vZGU7Ci0g
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5GbGFtZUNo
YXJ0LkV2ZW50cy5TZWxlY3RlZE5vZGUsIG5vZGUpOwotICAgIH0sCi0KLSAgICBfb25Nb3VzZVdo
ZWVsOiBmdW5jdGlvbihlKQotICAgIHsKLSAgICAgICAgdmFyIHpvb21GYWN0b3IgPSAoZS53aGVl
bERlbHRhID4gMCkgPyAwLjkgOiAxLjE7Ci0gICAgICAgIHZhciB3aW5kb3dQb2ludCA9ICh0aGlz
Ll9waXhlbFdpbmRvd0xlZnQgKyBlLm9mZnNldFgpIC8gdGhpcy5fdG90YWxQaXhlbHM7Ci0gICAg
ICAgIHZhciBvdmVydmlld1JlZmVyZW5jZVBvaW50ID0gTWF0aC5mbG9vcih3aW5kb3dQb2ludCAq
IHRoaXMuX3BpeGVsV2luZG93V2lkdGgpOwotICAgICAgICB0aGlzLl9vdmVydmlld0dyaWQuem9v
bSh6b29tRmFjdG9yLCBvdmVydmlld1JlZmVyZW5jZVBvaW50KTsKLSAgICAgICAgdGhpcy5faGlk
ZVBvcG92ZXIoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshbnVtYmVyfSB4
Ci0gICAgICogQHBhcmFtIHshbnVtYmVyfSB5Ci0gICAgICovCi0gICAgX2Nvb3JkaW5hdGVzVG9O
b2RlSW5kZXg6IGZ1bmN0aW9uKHgsIHkpCi0gICAgewotICAgICAgICB2YXIgdGltZWxpbmVEYXRh
ID0gdGhpcy5fdGltZWxpbmVEYXRhOwotICAgICAgICBpZiAoIXRpbWVsaW5lRGF0YSkKLSAgICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgdmFyIHRpbWVsaW5lRW50cmllcyA9IHRpbWVsaW5l
RGF0YS5lbnRyaWVzOwotICAgICAgICB2YXIgY3Vyc29yVGltZSA9ICh4ICsgdGhpcy5fcGl4ZWxX
aW5kb3dMZWZ0IC0gdGhpcy5fcGFkZGluZ0xlZnQpICogdGhpcy5fcGl4ZWxUb1RpbWU7Ci0gICAg
ICAgIHZhciBjdXJzb3JMZXZlbCA9IE1hdGguZmxvb3IoKHRoaXMuX2NhbnZhcy5oZWlnaHQgLSB5
KSAvIHRoaXMuX2JhckhlaWdodCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aW1l
bGluZUVudHJpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjdXJzb3JUaW1lIDwg
dGltZWxpbmVFbnRyaWVzW2ldLnN0YXJ0VGltZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgICAgICBpZiAoY3Vyc29yVGltZSA8ICh0aW1lbGluZUVudHJpZXNbaV0uc3RhcnRU
aW1lICsgdGltZWxpbmVFbnRyaWVzW2ldLmR1cmF0aW9uKQotICAgICAgICAgICAgICAgICYmIGN1
cnNvckxldmVsID09PSB0aW1lbGluZUVudHJpZXNbaV0uZGVwdGgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0sCi0KLSAgICBv
blJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlT3ZlcnZpZXdD
YW52YXMgPSB0cnVlOwotICAgICAgICB0aGlzLl9oaWRlUG9wb3ZlcigpOwotICAgICAgICB0aGlz
Ll9zY2hlZHVsZVVwZGF0ZSgpOwotICAgIH0sCi0KLSAgICBfZHJhd092ZXJ2aWV3Q2FudmFzOiBm
dW5jdGlvbih3aWR0aCwgaGVpZ2h0KQotICAgIHsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdDYW52
YXMud2lkdGggPSB3aWR0aDsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdDYW52YXMuaGVpZ2h0ID0g
aGVpZ2h0OwotCi0gICAgICAgIGlmICghdGhpcy5fdGltZWxpbmVEYXRhKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciB0aW1lbGluZUVudHJpZXMgPSB0aGlzLl90aW1lbGluZURh
dGEuZW50cmllczsKLQotICAgICAgICB2YXIgZHJhd0RhdGEgPSBuZXcgVWludDhBcnJheSh3aWR0
aCk7Ci0gICAgICAgIHZhciBzY2FsZUZhY3RvciA9IHdpZHRoIC8gdGhpcy5fdG90YWxUaW1lOwot
Ci0gICAgICAgIGZvciAodmFyIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IHRpbWVsaW5lRW50
cmllcy5sZW5ndGg7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICB2YXIgZW50cnkgPSB0aW1l
bGluZUVudHJpZXNbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IE1hdGguZmxv
b3IoZW50cnkuc3RhcnRUaW1lICogc2NhbGVGYWN0b3IpOwotICAgICAgICAgICAgdmFyIGZpbmlz
aCA9IE1hdGguZmxvb3IoKGVudHJ5LnN0YXJ0VGltZSArIGVudHJ5LmR1cmF0aW9uKSAqIHNjYWxl
RmFjdG9yKTsKLSAgICAgICAgICAgIGZvciAodmFyIHggPSBzdGFydDsgeCA8IGZpbmlzaDsgKyt4
KQotICAgICAgICAgICAgICAgIGRyYXdEYXRhW3hdID0gTWF0aC5tYXgoZHJhd0RhdGFbeF0sIGVu
dHJ5LmRlcHRoICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMu
X292ZXJ2aWV3Q2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgIHZhciB5U2NhbGVGYWN0
b3IgPSAyOwotICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDAuNTsKLSAgICAgICAgY29udGV4
dC5zdHJva2VTdHlsZSA9ICJyZ2JhKDIwLDAsMCwwLjgpIjsKLSAgICAgICAgY29udGV4dC5maWxs
U3R5bGU9InJnYmEoMjE0LDIyNSwyNTQsIDAuOCkiOwotICAgICAgICBjb250ZXh0Lm1vdmVUbygw
LCBoZWlnaHQgLSAxKTsKLSAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgKyt4KQot
ICAgICAgICAgICAgY29udGV4dC5saW5lVG8oeCwgaGVpZ2h0IC0gZHJhd0RhdGFbeF0gKiB5U2Nh
bGVGYWN0b3IgLSAxKTsKLSAgICAgICAgY29udGV4dC5tb3ZlVG8od2lkdGggLSAxLCBoZWlnaHQg
LSAxKTsKLSAgICAgICAgY29udGV4dC5tb3ZlVG8oMCwgaGVpZ2h0IC0gMSk7Ci0gICAgICAgIGNv
bnRleHQuZmlsbCgpOwotICAgICAgICBjb250ZXh0LnN0cm9rZSgpOwotICAgICAgICBjb250ZXh0
LmNsb3NlUGF0aCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5GbGFtZUNoYXJ0LkVudHJ5fSBlbnRyeQotICAgICAqIEBwYXJhbSB7QW5jaG9yQm94fSBh
bmNob3JCb3gKLSAgICAgKi8KLSAgICBfZW50cnlUb0FuY2hvckJveDogZnVuY3Rpb24oZW50cnks
IGFuY2hvckJveCkKLSAgICB7Ci0gICAgICAgIGFuY2hvckJveC54ID0gTWF0aC5mbG9vcihlbnRy
eS5zdGFydFRpbWUgKiB0aGlzLl90aW1lVG9QaXhlbCkgLSB0aGlzLl9waXhlbFdpbmRvd0xlZnQg
KyB0aGlzLl9wYWRkaW5nTGVmdDsKLSAgICAgICAgYW5jaG9yQm94LnkgPSB0aGlzLl9jYW52YXMu
aGVpZ2h0IC0gKGVudHJ5LmRlcHRoICsgMSkgKiB0aGlzLl9iYXJIZWlnaHQ7Ci0gICAgICAgIGFu
Y2hvckJveC53aWR0aCA9IE1hdGguZmxvb3IoZW50cnkuZHVyYXRpb24gKiB0aGlzLl90aW1lVG9Q
aXhlbCk7Ci0gICAgICAgIGFuY2hvckJveC5oZWlnaHQgPSB0aGlzLl9iYXJIZWlnaHQ7Ci0gICAg
ICAgIGlmIChhbmNob3JCb3gueCA8IDApIHsKLSAgICAgICAgICAgIGFuY2hvckJveC53aWR0aCAr
PSBhbmNob3JCb3gueDsKLSAgICAgICAgICAgIGFuY2hvckJveC54ID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBhbmNob3JCb3gud2lkdGggPSBOdW1iZXIuY29uc3RyYWluKGFuY2hvckJveC53aWR0
aCwgMCwgdGhpcy5fY2FudmFzLndpZHRoIC0gYW5jaG9yQm94LngpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0geyFudW1iZXJ9IGhlaWdodAotICAgICAqIEBwYXJhbSB7IW51bWJl
cn0gd2lkdGgKLSAgICAgKi8KLSAgICBkcmF3OiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KQotICAg
IHsKLSAgICAgICAgdmFyIHRpbWVsaW5lRGF0YSA9IHRoaXMuX2NhbGN1bGF0ZVRpbWVsaW5lRGF0
YSgpOwotICAgICAgICBpZiAoIXRpbWVsaW5lRGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdmFyIHRpbWVsaW5lRW50cmllcyA9IHRpbWVsaW5lRGF0YS5lbnRyaWVzOwotICAgICAg
ICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICB0aGlzLl9jYW52YXMud2lk
dGggPSB3aWR0aDsKLSAgICAgICAgdmFyIGJhckhlaWdodCA9IHRoaXMuX2JhckhlaWdodDsKLQot
ICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwotICAg
ICAgICB2YXIgdGV4dFBhZGRpbmdMZWZ0ID0gMjsKLSAgICAgICAgdmFyIHBhZGRpbmdMZWZ0ID0g
dGhpcy5fcGFkZGluZ0xlZnQ7Ci0gICAgICAgIGNvbnRleHQuZm9udCA9IChiYXJIZWlnaHQgLSAz
KSArICJweCBzYW5zLXNlcmlmIjsKLSAgICAgICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAidG9w
IjsKLSAgICAgICAgdGhpcy5fZG90c1dpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCgiXHUyMDI2
Iikud2lkdGg7Ci0KLSAgICAgICAgdmFyIGFuY2hvckJveCA9IG5ldyBBbmNob3JCb3goKTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aW1lbGluZUVudHJpZXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBlbnRyeSA9IHRpbWVsaW5lRW50cmllc1tpXTsKLSAgICAgICAgICAg
IHZhciBzdGFydFRpbWUgPSBlbnRyeS5zdGFydFRpbWU7Ci0gICAgICAgICAgICBpZiAoc3RhcnRU
aW1lID4gdGhpcy5fdGltZVdpbmRvd1JpZ2h0KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKChzdGFydFRpbWUgKyBlbnRyeS5kdXJhdGlvbikgPCB0aGlzLl90aW1lV2lu
ZG93TGVmdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHRoaXMuX2Vu
dHJ5VG9BbmNob3JCb3goZW50cnksIGFuY2hvckJveCk7Ci0gICAgICAgICAgICBpZiAoYW5jaG9y
Qm94LndpZHRoIDwgdGhpcy5fbWluV2lkdGgpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIHZhciBjb2xvclBhaXIgPSBlbnRyeS5jb2xvclBhaXI7Ci0gICAgICAgICAg
ICB2YXIgY29sb3I7Ci0gICAgICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0ZWROb2RlSW5kZXgg
PT09IGkpCi0gICAgICAgICAgICAgICAgY29sb3IgPSAgY29sb3JQYWlyLmhpZ2hsaWdodGVkOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JQYWlyLm5vcm1h
bDsKLQotICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgIGNvbnRl
eHQucmVjdChhbmNob3JCb3gueCwgYW5jaG9yQm94LnksIGFuY2hvckJveC53aWR0aCAtIDEsIGFu
Y2hvckJveC5oZWlnaHQgLSAxKTsKLSAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY29s
b3I7Ci0gICAgICAgICAgICBjb250ZXh0LmZpbGwoKTsKLQotICAgICAgICAgICAgdmFyIHhUZXh0
ID0gTWF0aC5tYXgoMCwgYW5jaG9yQm94LngpOwotICAgICAgICAgICAgdmFyIHdpZHRoVGV4dCA9
IGFuY2hvckJveC53aWR0aCAtIHRleHRQYWRkaW5nTGVmdCArIGFuY2hvckJveC54IC0geFRleHQ7
Ci0gICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLl9wcmVwYXJlVGl0bGUoY29udGV4dCwgZW50
cnkubm9kZS5mdW5jdGlvbk5hbWUsIHdpZHRoVGV4dCk7Ci0gICAgICAgICAgICBpZiAodGl0bGUp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICIjMzMzIjsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmZpbGxUZXh0KHRpdGxlLCB4VGV4dCArIHRleHRQYWRkaW5nTGVmdCwg
YW5jaG9yQm94LnkgLSAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfcHJlcGFyZVRpdGxlOiBmdW5jdGlvbihjb250ZXh0LCB0aXRsZSwgbWF4U2l6ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChtYXhTaXplIDwgdGhpcy5fZG90c1dpZHRoKQotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIHZhciB0aXRsZVdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCh0
aXRsZSkud2lkdGg7Ci0gICAgICAgIGlmIChtYXhTaXplID4gdGl0bGVXaWR0aCkKLSAgICAgICAg
ICAgIHJldHVybiB0aXRsZTsKLSAgICAgICAgbWF4U2l6ZSAtPSB0aGlzLl9kb3RzV2lkdGg7Ci0g
ICAgICAgIHZhciBkb3RSZWdFeHA9L1tcLlwkXS9nOwotICAgICAgICB2YXIgbWF0Y2ggPSBkb3RS
ZWdFeHAuZXhlYyh0aXRsZSk7Ci0gICAgICAgIGlmICghbWF0Y2gpIHsKLSAgICAgICAgICAgIHZh
ciB2aXNpYmxlUGFydFNpemUgPSBtYXhTaXplIC8gdGl0bGVXaWR0aDsKLSAgICAgICAgICAgIHZh
ciBuZXdUZXh0TGVuZ3RoID0gTWF0aC5mbG9vcih0aXRsZS5sZW5ndGggKiB2aXNpYmxlUGFydFNp
emUpICsgMTsKLSAgICAgICAgICAgIHZhciBtaW5UZXh0TGVuZ3RoID0gNDsKLSAgICAgICAgICAg
IGlmIChuZXdUZXh0TGVuZ3RoIDwgbWluVGV4dExlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgICAgIHZhciBzdWJzdHJpbmc7Ci0gICAgICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICAgICAgLS1uZXdUZXh0TGVuZ3RoOwotICAgICAgICAgICAgICAgIHN1YnN0cmlu
ZyA9IHRpdGxlLnN1YnN0cmluZygwLCBuZXdUZXh0TGVuZ3RoKTsKLSAgICAgICAgICAgIH0gd2hp
bGUgKGNvbnRleHQubWVhc3VyZVRleHQoc3Vic3RyaW5nKS53aWR0aCA+IG1heFNpemUpOwotICAg
ICAgICAgICAgcmV0dXJuIHRpdGxlLnN1YnN0cmluZygwLCBuZXdUZXh0TGVuZ3RoKSArICJcdTIw
MjYiOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChtYXRjaCkgewotICAgICAgICAgICAgdmFy
IHN1YnN0cmluZyA9IHRpdGxlLnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpOwotICAgICAgICAg
ICAgdmFyIHdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChzdWJzdHJpbmcpLndpZHRoOwotICAg
ICAgICAgICAgaWYgKG1heFNpemUgPiB3aWR0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIlx1
MjAyNiIgKyBzdWJzdHJpbmc7Ci0gICAgICAgICAgICBtYXRjaCA9IGRvdFJlZ0V4cC5leGVjKHRp
dGxlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfc2NoZWR1bGVVcGRhdGU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl91cGRhdGVUaW1lcklkKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLl91cGRhdGVUaW1lcklkID0gc2V0VGltZW91dCh0aGlzLnVw
ZGF0ZS5iaW5kKHRoaXMpLCAxMCk7Ci0gICAgfSwKLSAgICAKLSAgICBfdXBkYXRlQm91bmRhcmll
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fd2luZG93TGVmdCA9IHRoaXMuX292
ZXJ2aWV3R3JpZC53aW5kb3dMZWZ0KCk7Ci0gICAgICAgIHRoaXMuX3dpbmRvd1JpZ2h0ID0gdGhp
cy5fb3ZlcnZpZXdHcmlkLndpbmRvd1JpZ2h0KCk7Ci0gICAgICAgIHRoaXMuX3dpbmRvd1dpZHRo
ID0gdGhpcy5fd2luZG93UmlnaHQgLSB0aGlzLl93aW5kb3dMZWZ0OwotCi0gICAgICAgIHRoaXMu
X3RvdGFsVGltZSA9IHRoaXMuX3RpbWVsaW5lRGF0YS50b3RhbFRpbWU7Ci0gICAgICAgIHRoaXMu
X3RpbWVXaW5kb3dMZWZ0ID0gdGhpcy5fd2luZG93TGVmdCAqIHRoaXMuX3RvdGFsVGltZTsKLSAg
ICAgICAgdGhpcy5fdGltZVdpbmRvd1JpZ2h0ID0gdGhpcy5fd2luZG93UmlnaHQgKiB0aGlzLl90
b3RhbFRpbWU7Ci0KLSAgICAgICAgdGhpcy5fcGl4ZWxXaW5kb3dXaWR0aCA9IHRoaXMuX2NoYXJ0
Q29udGFpbmVyLmNsaWVudFdpZHRoOwotICAgICAgICB0aGlzLl90b3RhbFBpeGVscyA9IE1hdGgu
Zmxvb3IodGhpcy5fcGl4ZWxXaW5kb3dXaWR0aCAvIHRoaXMuX3dpbmRvd1dpZHRoKTsKLSAgICAg
ICAgdGhpcy5fcGl4ZWxXaW5kb3dMZWZ0ID0gTWF0aC5mbG9vcih0aGlzLl90b3RhbFBpeGVscyAq
IHRoaXMuX3dpbmRvd0xlZnQpOwotICAgICAgICB0aGlzLl9waXhlbFdpbmRvd1JpZ2h0ID0gTWF0
aC5mbG9vcih0aGlzLl90b3RhbFBpeGVscyAqIHRoaXMuX3dpbmRvd1JpZ2h0KTsKLQotICAgICAg
ICB0aGlzLl90aW1lVG9QaXhlbCA9IHRoaXMuX3RvdGFsUGl4ZWxzIC8gdGhpcy5fdG90YWxUaW1l
OwotICAgICAgICB0aGlzLl9waXhlbFRvVGltZSA9IHRoaXMuX3RvdGFsVGltZSAvIHRoaXMuX3Rv
dGFsUGl4ZWxzOwotICAgIH0sCi0KLSAgICB1cGRhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0ZVRpbWVySWQgPSAwOwotICAgICAgICBpZiAoIXRoaXMuX3RpbWVsaW5l
RGF0YSkKLSAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVsaW5lRGF0YSgpOwotICAgICAg
ICBpZiAoIXRoaXMuX3RpbWVsaW5lRGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dGhpcy5fdXBkYXRlQm91bmRhcmllcygpOwotICAgICAgICB0aGlzLmRyYXcodGhpcy5fY2hhcnRD
b250YWluZXIuY2xpZW50V2lkdGgsIHRoaXMuX2NoYXJ0Q29udGFpbmVyLmNsaWVudEhlaWdodCk7
Ci0gICAgICAgIHRoaXMuX2NhbGN1bGF0b3IuX3VwZGF0ZUJvdW5kYXJpZXModGhpcyk7Ci0gICAg
ICAgIHRoaXMuX292ZXJ2aWV3Q2FsY3VsYXRvci5fdXBkYXRlQm91bmRhcmllcyh0aGlzKTsKLSAg
ICAgICAgdGhpcy5fdGltZWxpbmVHcmlkLmVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLmVsZW1l
bnQuY2xpZW50V2lkdGg7Ci0gICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC51cGRhdGVEaXZpZGVy
cyh0aGlzLl9jYWxjdWxhdG9yKTsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdHcmlkLnVwZGF0ZURp
dmlkZXJzKHRoaXMuX292ZXJ2aWV3Q2FsY3VsYXRvcik7Ci0gICAgICAgIGlmICh0aGlzLl91cGRh
dGVPdmVydmlld0NhbnZhcykgewotICAgICAgICAgICAgdGhpcy5fZHJhd092ZXJ2aWV3Q2FudmFz
KHRoaXMuX292ZXJ2aWV3Q29udGFpbmVyLmNsaWVudFdpZHRoLCB0aGlzLl9vdmVydmlld0NvbnRh
aW5lci5jbGllbnRIZWlnaHQpOwotICAgICAgICAgICAgdGhpcy5fdXBkYXRlT3ZlcnZpZXdDYW52
YXMgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5WaWV3LnByb3RvdHlwZQotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRm9udFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0ZvbnRWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGRiZDVi
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRm9udFZp
ZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXd9Ci0gKiBAY29uc3RydWN0b3IKLSAqLwot
V2ViSW5zcGVjdG9yLkZvbnRWaWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UpCi17Ci0gICAgV2ViSW5z
cGVjdG9yLlJlc291cmNlVmlldy5jYWxsKHRoaXMsIHJlc291cmNlKTsKLQotICAgIHRoaXMuZWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJmb250Iik7Ci19Ci0KLVdlYkluc3BlY3Rvci5Gb250Vmlldy5f
Zm9udFByZXZpZXdMaW5lcyA9IFsgIkFCQ0RFRkdISUpLTE0iLCAiTk9QUVJTVFVWV1hZWiIsICJh
YmNkZWZnaGlqa2xtIiwgIm5vcHFyc3R1dnd4eXoiLCAiMTIzNDU2Nzg5MCIgXTsKLQotV2ViSW5z
cGVjdG9yLkZvbnRWaWV3Ll9mb250SWQgPSAwOwotCi1XZWJJbnNwZWN0b3IuRm9udFZpZXcuX21l
YXN1cmVGb250U2l6ZSA9IDUwOwotCi1XZWJJbnNwZWN0b3IuRm9udFZpZXcucHJvdG90eXBlID0g
ewotICAgIGhhc0NvbnRlbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0sCi0KLSAgICBfY3JlYXRlQ29udGVudElmTmVlZGVkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5mb250UHJldmlld0VsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdmFyIHVuaXF1ZUZvbnROYW1lID0gIldlYkluc3BlY3RvckZvbnRQcmV2
aWV3IiArICgrK1dlYkluc3BlY3Rvci5Gb250Vmlldy5fZm9udElkKTsKLQotICAgICAgICB0aGlz
LmZvbnRTdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwotICAg
ICAgICB0aGlzLmZvbnRTdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSAiQGZvbnQtZmFjZSB7IGZv
bnQtZmFtaWx5OiBcIiIgKyB1bmlxdWVGb250TmFtZSArICJcIjsgc3JjOiB1cmwoIiArIHRoaXMu
cmVzb3VyY2UudXJsICsgIik7IH0iOwotICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxk
KHRoaXMuZm9udFN0eWxlRWxlbWVudCk7Ci0KLSAgICAgICAgdmFyIGZvbnRQcmV2aWV3ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
V2ViSW5zcGVjdG9yLkZvbnRWaWV3Ll9mb250UHJldmlld0xpbmVzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICAgICAgZm9udFByZXZpZXcuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci0gICAgICAgICAgICBmb250UHJl
dmlldy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuRm9u
dFZpZXcuX2ZvbnRQcmV2aWV3TGluZXNbaV0pKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmZv
bnRQcmV2aWV3RWxlbWVudCA9IGZvbnRQcmV2aWV3LmNsb25lTm9kZSh0cnVlKTsKLSAgICAgICAg
dGhpcy5mb250UHJldmlld0VsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoImZvbnQtZmFtaWx5Iiwg
dW5pcXVlRm9udE5hbWUpOwotICAgICAgICB0aGlzLmZvbnRQcmV2aWV3RWxlbWVudC5zdHlsZS5z
ZXRQcm9wZXJ0eSgidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKLQotICAgICAgICB0aGlzLl9kdW1t
eUVsZW1lbnQgPSBmb250UHJldmlldzsKLSAgICAgICAgdGhpcy5fZHVtbXlFbGVtZW50LnN0eWxl
LnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKLSAgICAgICAgdGhpcy5fZHVtbXlFbGVtZW50LnN0eWxl
LnpJbmRleCA9ICItMSI7Ci0gICAgICAgIHRoaXMuX2R1bW15RWxlbWVudC5zdHlsZS5kaXNwbGF5
ID0gImlubGluZSI7Ci0gICAgICAgIHRoaXMuX2R1bW15RWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9
ICJhYnNvbHV0ZSI7Ci0gICAgICAgIHRoaXMuX2R1bW15RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0
eSgiZm9udC1mYW1pbHkiLCB1bmlxdWVGb250TmFtZSk7Ci0gICAgICAgIHRoaXMuX2R1bW15RWxl
bWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiZm9udC1zaXplIiwgV2ViSW5zcGVjdG9yLkZvbnRWaWV3
Ll9tZWFzdXJlRm9udFNpemUgKyAicHgiKTsKLQotICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5mb250UHJldmlld0VsZW1lbnQpOwotICAgIH0sCi0KLSAgICB3YXNTaG93bjog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3JlYXRlQ29udGVudElmTmVlZGVkKCk7
Ci0KLSAgICAgICAgdGhpcy51cGRhdGVGb250UHJldmlld1NpemUoKTsKLSAgICB9LAotCi0gICAg
b25SZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pblJlc2l6ZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9pblJlc2l6ZSA9IHRydWU7Ci0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRQcmV2aWV3U2l6ZSgpOwot
ICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2luUmVzaXplOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9tZWFzdXJlRWxlbWVudDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2R1bW15RWxlbWVudCk7
Ci0gICAgICAgIHZhciByZXN1bHQgPSB7IHdpZHRoOiB0aGlzLl9kdW1teUVsZW1lbnQub2Zmc2V0
V2lkdGgsIGhlaWdodDogdGhpcy5fZHVtbXlFbGVtZW50Lm9mZnNldEhlaWdodCB9OwotICAgICAg
ICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZHVtbXlFbGVtZW50KTsKLQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICB1cGRhdGVGb250UHJldmlld1NpemU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5mb250UHJldmlld0VsZW1lbnQgfHwg
IXRoaXMuaXNTaG93aW5nKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5m
b250UHJldmlld0VsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoInZpc2liaWxpdHkiKTsKLSAg
ICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX21lYXN1cmVFbGVtZW50KCk7Ci0KLSAgICAgICAg
Y29uc3QgaGVpZ2h0ID0gZGltZW5zaW9uLmhlaWdodDsKLSAgICAgICAgY29uc3Qgd2lkdGggPSBk
aW1lbnNpb24ud2lkdGg7Ci0KLSAgICAgICAgLy8gU3VidHJhY3Qgc29tZSBwYWRkaW5nLiBUaGlz
IHNob3VsZCBtYXRjaCB0aGUgcGFkZGluZ3MgaW4gdGhlIENTUyBwbHVzIHJvb20gZm9yIHRoZSBz
Y3JvbGxiYXIuCi0gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5lbGVtZW50Lm9m
ZnNldFdpZHRoIC0gNTA7Ci0gICAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuZWxl
bWVudC5vZmZzZXRIZWlnaHQgLSAzMDsKLQotICAgICAgICBpZiAoIWhlaWdodCB8fCAhd2lkdGgg
fHwgIWNvbnRhaW5lcldpZHRoIHx8ICFjb250YWluZXJIZWlnaHQpIHsKLSAgICAgICAgICAgIHRo
aXMuZm9udFByZXZpZXdFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJmb250LXNpemUiKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB3aWR0aFJhdGlv
ID0gY29udGFpbmVyV2lkdGggLyB3aWR0aDsKLSAgICAgICAgdmFyIGhlaWdodFJhdGlvID0gY29u
dGFpbmVySGVpZ2h0IC8gaGVpZ2h0OwotICAgICAgICB2YXIgZmluYWxGb250U2l6ZSA9IE1hdGgu
Zmxvb3IoV2ViSW5zcGVjdG9yLkZvbnRWaWV3Ll9tZWFzdXJlRm9udFNpemUgKiBNYXRoLm1pbih3
aWR0aFJhdGlvLCBoZWlnaHRSYXRpbykpIC0gMjsKLQotICAgICAgICB0aGlzLmZvbnRQcmV2aWV3
RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiZm9udC1zaXplIiwgZmluYWxGb250U2l6ZSArICJw
eCIsIG51bGwpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5SZXNvdXJj
ZVZpZXcucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0dvVG9MaW5lRGlhbG9nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Hb1RvTGluZURpYWxvZy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGExODkxZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0dvVG9MaW5lRGlhbG9nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5EaWFsb2dEZWxlZ2F0ZX0K
LSAqLwotV2ViSW5zcGVjdG9yLkdvVG9MaW5lRGlhbG9nID0gZnVuY3Rpb24odmlldykKLXsKLSAg
ICBXZWJJbnNwZWN0b3IuRGlhbG9nRGVsZWdhdGUuY2FsbCh0aGlzKTsKLSAgICAKLSAgICB0aGlz
LmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1l
bnQuY2xhc3NOYW1lID0gImdvLXRvLWxpbmUtZGlhbG9nIjsKLQotICAgIHRoaXMuZWxlbWVudC5j
cmVhdGVDaGlsZCgibGFiZWwiKS50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
R28gdG8gbGluZTogIik7Ci0KLSAgICB0aGlzLl9pbnB1dCA9IHRoaXMuZWxlbWVudC5jcmVhdGVD
aGlsZCgiaW5wdXQiKTsKLSAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4
dCIpOwotICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgic2l6ZSIsIDYpOwotCi0gICAgdGhp
cy5fZ29CdXR0b24gPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImJ1dHRvbiIpOwotICAgIHRo
aXMuX2dvQnV0dG9uLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJHbyIpOwot
ICAgIHRoaXMuX2dvQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fb25Hb0Ns
aWNrLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX3ZpZXcgPSB2aWV3OwotfQotCi0v
KioKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBhbmVsfSBwYW5lbAotICogQHBhcmFtIHtmdW5j
dGlvbigpOj9XZWJJbnNwZWN0b3IuVmlld30gdmlld0dldHRlcgotICovCi1XZWJJbnNwZWN0b3Iu
R29Ub0xpbmVEaWFsb2cuaW5zdGFsbCA9IGZ1bmN0aW9uKHBhbmVsLCB2aWV3R2V0dGVyKQotewot
ICAgIHZhciBnb1RvTGluZVNob3J0Y3V0ID0gV2ViSW5zcGVjdG9yLkdvVG9MaW5lRGlhbG9nLmNy
ZWF0ZVNob3J0Y3V0KCk7Ci0gICAgcGFuZWwucmVnaXN0ZXJTaG9ydGN1dHMoW2dvVG9MaW5lU2hv
cnRjdXRdLCBXZWJJbnNwZWN0b3IuR29Ub0xpbmVEaWFsb2cuX3Nob3cuYmluZChudWxsLCB2aWV3
R2V0dGVyKSk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtmdW5jdGlvbigpOj9XZWJJbnNwZWN0b3Iu
Vmlld30gdmlld0dldHRlcgotICogQHBhcmFtIHtFdmVudD19IGV2ZW50Ci0gKiBAcmV0dXJuIHti
b29sZWFufQotICovCi1XZWJJbnNwZWN0b3IuR29Ub0xpbmVEaWFsb2cuX3Nob3cgPSBmdW5jdGlv
bih2aWV3R2V0dGVyLCBldmVudCkKLXsKLSAgICB2YXIgc291cmNlVmlldyA9IHZpZXdHZXR0ZXIo
KTsKLSAgICBpZiAoIXNvdXJjZVZpZXcgfHwgIXNvdXJjZVZpZXcuY2FuSGlnaGxpZ2h0TGluZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2ViSW5zcGVjdG9yLkRpYWxvZy5zaG93KHNv
dXJjZVZpZXcuZWxlbWVudCwgbmV3IFdlYkluc3BlY3Rvci5Hb1RvTGluZURpYWxvZyhzb3VyY2VW
aWV3KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qKgotICogQHJldHVybiB7IVdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0LkRlc2NyaXB0b3J9Ci0gKi8KLVdlYkluc3BlY3Rvci5Hb1Rv
TGluZURpYWxvZy5jcmVhdGVTaG9ydGN1dCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgaXNNYWMg
PSBXZWJJbnNwZWN0b3IuaXNNYWMoKTsKLSAgICB2YXIgc2hvcnRjdXQ7Ci0gICAgaWYgKGlzTWFj
KQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2Ny
aXB0b3IoImwiLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuTWV0YSk7
Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9y
KCJnIiwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLkN0cmwpOwotfQot
Ci1XZWJJbnNwZWN0b3IuR29Ub0xpbmVEaWFsb2cucHJvdG90eXBlID0gewotICAgIGZvY3VzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0Q3VycmVudEZvY3VzRWxl
bWVudCh0aGlzLl9pbnB1dCk7Ci0gICAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpOwotICAgIH0s
Ci0gICAgCi0gICAgX29uR29DbGljazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
YXBwbHlMaW5lTnVtYmVyKCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5EaWFsb2cuaGlkZSgpOwot
ICAgIH0sCi0gICAgCi0gICAgX2FwcGx5TGluZU51bWJlcjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIHZhbHVlID0gdGhpcy5faW5wdXQudmFsdWU7Ci0gICAgICAgIHZhciBsaW5lTnVt
YmVyID0gcGFyc2VJbnQodmFsdWUsIDEwKSAtIDE7Ci0gICAgICAgIGlmICghaXNOYU4obGluZU51
bWJlcikgJiYgbGluZU51bWJlciA+PSAwKQotICAgICAgICAgICAgdGhpcy5fdmlldy5oaWdobGln
aHRMaW5lKGxpbmVOdW1iZXIpOwotICAgIH0sCi0gICAgCi0gICAgb25FbnRlcjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fYXBwbHlMaW5lTnVtYmVyKCk7Ci0gICAgfSwKLQotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkRpYWxvZ0RlbGVnYXRlLnByb3RvdHlwZQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IQVJFbnRyeS5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSEFSRW50cnkuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZGM0ODguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IQVJFbnRyeS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQz
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gU2VlIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9odHRwLWFyY2hp
dmUtc3BlY2lmaWNhdGlvbi93ZWIvaGFyLTEtMi1zcGVjCi0vLyBmb3IgSEFSIHNwZWNpZmljYXRp
b24uCi0KLS8vIEZJWE1FOiBTb21lIGZpZWxkcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgZHVlIHRv
IGJhY2stZW5kIGxpbWl0YXRpb25zLgotLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01ODEyNyBmb3IgZGV0YWlscy4KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSByZXF1ZXN0Ci0gKi8KLVdl
Ykluc3BlY3Rvci5IQVJFbnRyeSA9IGZ1bmN0aW9uKHJlcXVlc3QpCi17Ci0gICAgdGhpcy5fcmVx
dWVzdCA9IHJlcXVlc3Q7Ci19Ci0KLVdlYkluc3BlY3Rvci5IQVJFbnRyeS5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAqLwotICAgIGJ1aWxkOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZW50cnkgPSAgewotICAgICAgICAgICAgc3Rh
cnRlZERhdGVUaW1lOiBuZXcgRGF0ZSh0aGlzLl9yZXF1ZXN0LnN0YXJ0VGltZSAqIDEwMDApLAot
ICAgICAgICAgICAgdGltZTogV2ViSW5zcGVjdG9yLkhBUkVudHJ5Ll90b01pbGxpc2Vjb25kcyh0
aGlzLl9yZXF1ZXN0LmR1cmF0aW9uKSwKLSAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMuX2J1aWxk
UmVxdWVzdCgpLAotICAgICAgICAgICAgcmVzcG9uc2U6IHRoaXMuX2J1aWxkUmVzcG9uc2UoKSwK
LSAgICAgICAgICAgIGNhY2hlOiB7IH0sIC8vIE5vdCBzdXBwb3J0ZWQgeWV0LgotICAgICAgICAg
ICAgdGltaW5nczogdGhpcy5fYnVpbGRUaW1pbmdzKCkKLSAgICAgICAgfTsKLSAgICAgICAgdmFy
IHBhZ2UgPSBXZWJJbnNwZWN0b3IubmV0d29ya0xvZy5wYWdlTG9hZEZvclJlcXVlc3QodGhpcy5f
cmVxdWVzdCk7Ci0gICAgICAgIGlmIChwYWdlKQotICAgICAgICAgICAgZW50cnkucGFnZXJlZiA9
ICJwYWdlXyIgKyBwYWdlLmlkOwotICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBfYnVpbGRSZXF1ZXN0
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmVzID0gewotICAgICAgICAgICAgbWV0
aG9kOiB0aGlzLl9yZXF1ZXN0LnJlcXVlc3RNZXRob2QsCi0gICAgICAgICAgICB1cmw6IHRoaXMu
X2J1aWxkUmVxdWVzdFVSTCh0aGlzLl9yZXF1ZXN0LnVybCksCi0gICAgICAgICAgICBodHRwVmVy
c2lvbjogdGhpcy5fcmVxdWVzdC5yZXF1ZXN0SHR0cFZlcnNpb24sCi0gICAgICAgICAgICBoZWFk
ZXJzOiB0aGlzLl9yZXF1ZXN0LnJlcXVlc3RIZWFkZXJzLAotICAgICAgICAgICAgcXVlcnlTdHJp
bmc6IHRoaXMuX2J1aWxkUGFyYW1ldGVycyh0aGlzLl9yZXF1ZXN0LnF1ZXJ5UGFyYW1ldGVycyB8
fCBbXSksCi0gICAgICAgICAgICBjb29raWVzOiB0aGlzLl9idWlsZENvb2tpZXModGhpcy5fcmVx
dWVzdC5yZXF1ZXN0Q29va2llcyB8fCBbXSksCi0gICAgICAgICAgICBoZWFkZXJzU2l6ZTogdGhp
cy5fcmVxdWVzdC5yZXF1ZXN0SGVhZGVyc1NpemUsCi0gICAgICAgICAgICBib2R5U2l6ZTogdGhp
cy5yZXF1ZXN0Qm9keVNpemUKLSAgICAgICAgfTsKLSAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3Qu
cmVxdWVzdEZvcm1EYXRhKQotICAgICAgICAgICAgcmVzLnBvc3REYXRhID0gdGhpcy5fYnVpbGRQ
b3N0RGF0YSgpOwotCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBfYnVpbGRSZXNwb25zZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHN0YXR1czogdGhpcy5f
cmVxdWVzdC5zdGF0dXNDb2RlLAotICAgICAgICAgICAgc3RhdHVzVGV4dDogdGhpcy5fcmVxdWVz
dC5zdGF0dXNUZXh0LAotICAgICAgICAgICAgaHR0cFZlcnNpb246IHRoaXMuX3JlcXVlc3QucmVz
cG9uc2VIdHRwVmVyc2lvbiwKLSAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuX3JlcXVlc3QucmVz
cG9uc2VIZWFkZXJzLAotICAgICAgICAgICAgY29va2llczogdGhpcy5fYnVpbGRDb29raWVzKHRo
aXMuX3JlcXVlc3QucmVzcG9uc2VDb29raWVzIHx8IFtdKSwKLSAgICAgICAgICAgIGNvbnRlbnQ6
IHRoaXMuX2J1aWxkQ29udGVudCgpLAotICAgICAgICAgICAgcmVkaXJlY3RVUkw6IHRoaXMuX3Jl
cXVlc3QucmVzcG9uc2VIZWFkZXJWYWx1ZSgiTG9jYXRpb24iKSB8fCAiIiwKLSAgICAgICAgICAg
IGhlYWRlcnNTaXplOiB0aGlzLl9yZXF1ZXN0LnJlc3BvbnNlSGVhZGVyc1NpemUsCi0gICAgICAg
ICAgICBib2R5U2l6ZTogdGhpcy5yZXNwb25zZUJvZHlTaXplCi0gICAgICAgIH07Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBfYnVpbGRD
b250ZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY29udGVudCA9IHsKLSAgICAg
ICAgICAgIHNpemU6IHRoaXMuX3JlcXVlc3QucmVzb3VyY2VTaXplLAotICAgICAgICAgICAgbWlt
ZVR5cGU6IHRoaXMuX3JlcXVlc3QubWltZVR5cGUsCi0gICAgICAgICAgICAvLyB0ZXh0OiB0aGlz
Ll9yZXF1ZXN0LmNvbnRlbnQgLy8gVE9ETzogcHVsbCBvdXQgaW50byBhIGJvb2xlYW4gZmxhZywg
YXMgY29udGVudCBjYW4gYmUgaHVnZSAoYW5kIG5lZWRzIHRvIGJlIHJlcXVlc3RlZCB3aXRoIGFu
IGFzeW5jIGNhbGwpCi0gICAgICAgIH07Ci0gICAgICAgIHZhciBjb21wcmVzc2lvbiA9IHRoaXMu
cmVzcG9uc2VDb21wcmVzc2lvbjsKLSAgICAgICAgaWYgKHR5cGVvZiBjb21wcmVzc2lvbiA9PT0g
Im51bWJlciIpCi0gICAgICAgICAgICBjb250ZW50LmNvbXByZXNzaW9uID0gY29tcHJlc3Npb247
Ci0gICAgICAgIHJldHVybiBjb250ZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgX2J1aWxkVGltaW5nczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIHdhaXRGb3JDb25uZWN0aW9uID0gdGhpcy5faW50ZXJ2YWwoImNvbm5l
Y3RTdGFydCIsICJjb25uZWN0RW5kIik7Ci0gICAgICAgIHZhciBibG9ja2VkOwotICAgICAgICB2
YXIgY29ubmVjdDsKLSAgICAgICAgdmFyIGRucyA9IHRoaXMuX2ludGVydmFsKCJkbnNTdGFydCIs
ICJkbnNFbmQiKTsKLSAgICAgICAgdmFyIHNlbmQgPSB0aGlzLl9pbnRlcnZhbCgic2VuZFN0YXJ0
IiwgInNlbmRFbmQiKTsKLSAgICAgICAgdmFyIHNzbCA9IHRoaXMuX2ludGVydmFsKCJzc2xTdGFy
dCIsICJzc2xFbmQiKTsKLQotICAgICAgICBpZiAoc3NsICE9PSAtMSAmJiBzZW5kICE9PSAtMSkK
LSAgICAgICAgICAgIHNlbmQgLT0gc3NsOwotCi0gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LmNv
bm5lY3Rpb25SZXVzZWQpIHsKLSAgICAgICAgICAgIGNvbm5lY3QgPSAtMTsKLSAgICAgICAgICAg
IGJsb2NrZWQgPSB3YWl0Rm9yQ29ubmVjdGlvbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGJsb2NrZWQgPSAwOwotICAgICAgICAgICAgY29ubmVjdCA9IHdhaXRGb3JDb25uZWN0aW9u
OwotICAgICAgICAgICAgaWYgKGRucyAhPT0gLTEpCi0gICAgICAgICAgICAgICAgY29ubmVjdCAt
PSBkbnM7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgYmxvY2tl
ZDogYmxvY2tlZCwKLSAgICAgICAgICAgIGRuczogZG5zLAotICAgICAgICAgICAgY29ubmVjdDog
Y29ubmVjdCwKLSAgICAgICAgICAgIHNlbmQ6IHNlbmQsCi0gICAgICAgICAgICB3YWl0OiB0aGlz
Ll9pbnRlcnZhbCgic2VuZEVuZCIsICJyZWNlaXZlSGVhZGVyc0VuZCIpLAotICAgICAgICAgICAg
cmVjZWl2ZTogV2ViSW5zcGVjdG9yLkhBUkVudHJ5Ll90b01pbGxpc2Vjb25kcyh0aGlzLl9yZXF1
ZXN0LnJlY2VpdmVEdXJhdGlvbiksCi0gICAgICAgICAgICBzc2w6IHNzbAotICAgICAgICB9Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAg
X2J1aWxkUG9zdERhdGE6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciByZXMgPSB7Ci0g
ICAgICAgICAgICBtaW1lVHlwZTogdGhpcy5fcmVxdWVzdC5yZXF1ZXN0SGVhZGVyVmFsdWUoIkNv
bnRlbnQtVHlwZSIpLAotICAgICAgICAgICAgdGV4dDogdGhpcy5fcmVxdWVzdC5yZXF1ZXN0Rm9y
bURhdGEKLSAgICAgICAgfTsKLSAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QuZm9ybVBhcmFtZXRl
cnMpCi0gICAgICAgICAgICByZXMucGFyYW1zID0gdGhpcy5fYnVpbGRQYXJhbWV0ZXJzKHRoaXMu
X3JlcXVlc3QuZm9ybVBhcmFtZXRlcnMpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBwYXJhbWV0ZXJzCi0gICAg
ICogQHJldHVybiB7QXJyYXkuPE9iamVjdD59Ci0gICAgICovCi0gICAgX2J1aWxkUGFyYW1ldGVy
czogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJhbWV0ZXJz
LnNsaWNlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwK
LSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgX2J1aWxkUmVxdWVzdFVSTDog
ZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVybC5zcGxpdCgiIyIsIDIpWzBd
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNwZWN0b3Iu
Q29va2llPn0gY29va2llcwotICAgICAqIEByZXR1cm4ge0FycmF5LjxPYmplY3Q+fQotICAgICAq
LwotICAgIF9idWlsZENvb2tpZXM6IGZ1bmN0aW9uKGNvb2tpZXMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29va2llcy5tYXAodGhpcy5fYnVpbGRDb29raWUuYmluZCh0aGlzKSk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvb2tpZX0gY29va2llCi0g
ICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAqLwotICAgIF9idWlsZENvb2tpZTogZnVuY3Rp
b24oY29va2llKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIG5hbWU6IGNv
b2tpZS5uYW1lKCksCi0gICAgICAgICAgICB2YWx1ZTogY29va2llLnZhbHVlKCksCi0gICAgICAg
ICAgICBwYXRoOiBjb29raWUucGF0aCgpLAotICAgICAgICAgICAgZG9tYWluOiBjb29raWUuZG9t
YWluKCksCi0gICAgICAgICAgICBleHBpcmVzOiBjb29raWUuZXhwaXJlc0RhdGUobmV3IERhdGUo
dGhpcy5fcmVxdWVzdC5zdGFydFRpbWUgKiAxMDAwKSksCi0gICAgICAgICAgICBodHRwT25seTog
Y29va2llLmh0dHBPbmx5KCksCi0gICAgICAgICAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmUoKQot
ICAgICAgICB9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3Rh
cnQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZW5kCi0gICAgICogQHJldHVybiB7bnVtYmVyfQot
ICAgICAqLwotICAgIF9pbnRlcnZhbDogZnVuY3Rpb24oc3RhcnQsIGVuZCkKLSAgICB7Ci0gICAg
ICAgIHZhciB0aW1pbmcgPSB0aGlzLl9yZXF1ZXN0LnRpbWluZzsKLSAgICAgICAgaWYgKCF0aW1p
bmcpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHZhciBzdGFydFRpbWUgPSB0aW1p
bmdbc3RhcnRdOwotICAgICAgICByZXR1cm4gdHlwZW9mIHN0YXJ0VGltZSAhPT0gIm51bWJlciIg
fHwgc3RhcnRUaW1lID09PSAtMSA/IC0xIDogTWF0aC5yb3VuZCh0aW1pbmdbZW5kXSAtIHN0YXJ0
VGltZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAg
Ki8KLSAgICBnZXQgcmVxdWVzdEJvZHlTaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhdGhp
cy5fcmVxdWVzdC5yZXF1ZXN0Rm9ybURhdGEgPyAwIDogdGhpcy5fcmVxdWVzdC5yZXF1ZXN0Rm9y
bURhdGEubGVuZ3RoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9
Ci0gICAgICovCi0gICAgZ2V0IHJlc3BvbnNlQm9keVNpemUoKQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX3JlcXVlc3QuY2FjaGVkIHx8IHRoaXMuX3JlcXVlc3Quc3RhdHVzQ29kZSA9PT0gMzA0
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0LnRy
YW5zZmVyU2l6ZSAtIHRoaXMuX3JlcXVlc3QucmVzcG9uc2VIZWFkZXJzU2l6ZQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ8dW5kZWZpbmVkfQotICAgICAqLwotICAg
IGdldCByZXNwb25zZUNvbXByZXNzaW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZXF1
ZXN0LmNhY2hlZCB8fCB0aGlzLl9yZXF1ZXN0LnN0YXR1c0NvZGUgPT09IDMwNCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3QucmVzb3VyY2VTaXplIC0g
KHRoaXMuX3JlcXVlc3QudHJhbnNmZXJTaXplIC0gdGhpcy5fcmVxdWVzdC5yZXNwb25zZUhlYWRl
cnNTaXplKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQHBhcmFtIHtudW1iZXJ9IHRpbWUKLSAqIEBy
ZXR1cm4ge251bWJlcn0KLSAqLwotV2ViSW5zcGVjdG9yLkhBUkVudHJ5Ll90b01pbGxpc2Vjb25k
cyA9IGZ1bmN0aW9uKHRpbWUpCi17Ci0gICAgcmV0dXJuIHRpbWUgPT09IC0xID8gLTEgOiBNYXRo
LnJvdW5kKHRpbWUgKiAxMDAwKTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJh
bSB7QXJyYXkuPFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59IHJlcXVlc3RzCi0gKi8KLVdl
Ykluc3BlY3Rvci5IQVJMb2cgPSBmdW5jdGlvbihyZXF1ZXN0cykKLXsKLSAgICB0aGlzLl9yZXF1
ZXN0cyA9IHJlcXVlc3RzOwotfQotCi1XZWJJbnNwZWN0b3IuSEFSTG9nLnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgYnVpbGQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICB2ZXJzaW9uOiAi
MS4yIiwKLSAgICAgICAgICAgIGNyZWF0b3I6IHRoaXMuX2NyZWF0b3IoKSwKLSAgICAgICAgICAg
IHBhZ2VzOiB0aGlzLl9idWlsZFBhZ2VzKCksCi0gICAgICAgICAgICBlbnRyaWVzOiB0aGlzLl9y
ZXF1ZXN0cy5tYXAodGhpcy5fY29udmVydFJlc291cmNlLmJpbmQodGhpcykpCi0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgX2NyZWF0b3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB3
ZWJLaXRWZXJzaW9uID0gL0FwcGxlV2ViS2l0XC8oW14gXSspLy5leGVjKHdpbmRvdy5uYXZpZ2F0
b3IudXNlckFnZW50KTsKLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgbmFtZTogIldl
Ykluc3BlY3RvciIsCi0gICAgICAgICAgICB2ZXJzaW9uOiB3ZWJLaXRWZXJzaW9uID8gd2ViS2l0
VmVyc2lvblsxXSA6ICJuL2EiCi0gICAgICAgIH07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge0FycmF5fQotICAgICAqLwotICAgIF9idWlsZFBhZ2VzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB2YXIgc2VlbklkZW50aWZpZXJzID0ge307Ci0gICAgICAgIHZhciBwYWdl
cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlcXVlc3RzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcGFnZSA9IFdlYkluc3BlY3Rvci5uZXR3b3JrTG9n
LnBhZ2VMb2FkRm9yUmVxdWVzdCh0aGlzLl9yZXF1ZXN0c1tpXSk7Ci0gICAgICAgICAgICBpZiAo
IXBhZ2UgfHwgc2VlbklkZW50aWZpZXJzW3BhZ2UuaWRdKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgc2VlbklkZW50aWZpZXJzW3BhZ2UuaWRdID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHBhZ2VzLnB1c2godGhpcy5fY29udmVydFBhZ2UocGFnZSkpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBwYWdlczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuUGFnZUxvYWR9IHBhZ2UKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAg
ICovCi0gICAgX2NvbnZlcnRQYWdlOiBmdW5jdGlvbihwYWdlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgIHN0YXJ0ZWREYXRlVGltZTogbmV3IERhdGUocGFnZS5zdGFydFRp
bWUgKiAxMDAwKSwKLSAgICAgICAgICAgIGlkOiAicGFnZV8iICsgcGFnZS5pZCwKLSAgICAgICAg
ICAgIHRpdGxlOiBwYWdlLnVybCwgLy8gV2UgZG9uJ3QgaGF2ZSBhY3R1YWwgcGFnZSB0aXRsZSBo
ZXJlLiBVUkwgaXMgcHJvYmFibHkgYmV0dGVyIHRoYW4gbm90aGluZy4KLSAgICAgICAgICAgIHBh
Z2VUaW1pbmdzOiB7Ci0gICAgICAgICAgICAgICAgb25Db250ZW50TG9hZDogdGhpcy5fcGFnZUV2
ZW50VGltZShwYWdlLCBwYWdlLmNvbnRlbnRMb2FkVGltZSksCi0gICAgICAgICAgICAgICAgb25M
b2FkOiB0aGlzLl9wYWdlRXZlbnRUaW1lKHBhZ2UsIHBhZ2UubG9hZFRpbWUpCi0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuTmV0d29ya1JlcXVlc3R9IHJlcXVlc3QKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0g
ICAgICovCi0gICAgX2NvbnZlcnRSZXNvdXJjZTogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAobmV3IFdlYkluc3BlY3Rvci5IQVJFbnRyeShyZXF1ZXN0KSkuYnVpbGQo
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUGFnZUxv
YWR9IHBhZ2UKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZQotICAgICAqIEByZXR1cm4ge251
bWJlcn0KLSAgICAgKi8KLSAgICBfcGFnZUV2ZW50VGltZTogZnVuY3Rpb24ocGFnZSwgdGltZSkK
LSAgICB7Ci0gICAgICAgIHZhciBzdGFydFRpbWUgPSBwYWdlLnN0YXJ0VGltZTsKLSAgICAgICAg
aWYgKHRpbWUgPT09IC0xIHx8IHN0YXJ0VGltZSA9PT0gLTEpCi0gICAgICAgICAgICByZXR1cm4g
LTE7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuSEFSRW50cnkuX3RvTWlsbGlzZWNvbmRz
KHRpbWUgLSBzdGFydFRpbWUpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
LwotV2ViSW5zcGVjdG9yLkhBUldyaXRlciA9IGZ1bmN0aW9uKCkKLXsKLX0KLQotV2ViSW5zcGVj
dG9yLkhBUldyaXRlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuT3V0cHV0U3RyZWFtfSBzdHJlYW0KLSAgICAgKiBAcGFyYW0ge0FycmF5LjxXZWJJ
bnNwZWN0b3IuTmV0d29ya1JlcXVlc3Q+fSByZXF1ZXN0cwotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlByb2dyZXNzfSBwcm9ncmVzcwotICAgICAqLwotICAgIHdyaXRlOiBmdW5jdGlvbihz
dHJlYW0sIHJlcXVlc3RzLCBwcm9ncmVzcykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N0cmVhbSA9
IHN0cmVhbTsKLSAgICAgICAgdGhpcy5faGFyTG9nID0gKG5ldyBXZWJJbnNwZWN0b3IuSEFSTG9n
KHJlcXVlc3RzKSkuYnVpbGQoKTsKLSAgICAgICAgdGhpcy5fcGVuZGluZ1JlcXVlc3RzID0gMTsg
Ly8gR3VhcmQgYWdhaW5zdCBjb21wbGV0aW5nIHJlc291cmNlIHRyYW5zZmVyIGJlZm9yZSBhbGwg
cmVxdWVzdHMgYXJlIG1hZGUuCi0gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5faGFyTG9nLmVu
dHJpZXM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSByZXF1ZXN0c1tpXS5jb250ZW50OwotICAgICAg
ICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAidW5kZWZpbmVkIiAmJiByZXF1ZXN0c1tpXS5m
aW5pc2hlZCkgewotICAgICAgICAgICAgICAgICsrdGhpcy5fcGVuZGluZ1JlcXVlc3RzOwotICAg
ICAgICAgICAgICAgIHJlcXVlc3RzW2ldLnJlcXVlc3RDb250ZW50KHRoaXMuX29uQ29udGVudEF2
YWlsYWJsZS5iaW5kKHRoaXMsIGVudHJpZXNbaV0pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y29udGVudCAhPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBlbnRyaWVzW2ldLnJlc3BvbnNlLmNv
bnRlbnQudGV4dCA9IGNvbnRlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGNvbXBvc2l0ZVBy
b2dyZXNzID0gbmV3IFdlYkluc3BlY3Rvci5Db21wb3NpdGVQcm9ncmVzcyhwcm9ncmVzcyk7Ci0g
ICAgICAgIHRoaXMuX3dyaXRlUHJvZ3Jlc3MgPSBjb21wb3NpdGVQcm9ncmVzcy5jcmVhdGVTdWJQ
cm9ncmVzcygpOwotICAgICAgICBpZiAoLS10aGlzLl9wZW5kaW5nUmVxdWVzdHMpIHsKLSAgICAg
ICAgICAgIHRoaXMuX3JlcXVlc3RzUHJvZ3Jlc3MgPSBjb21wb3NpdGVQcm9ncmVzcy5jcmVhdGVT
dWJQcm9ncmVzcygpOwotICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHNQcm9ncmVzcy5zZXRUaXRs
ZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbGxlY3RpbmcgY29udGVudOKApiIpKTsKLSAgICAg
ICAgICAgIHRoaXMuX3JlcXVlc3RzUHJvZ3Jlc3Muc2V0VG90YWxXb3JrKHRoaXMuX3BlbmRpbmdS
ZXF1ZXN0cyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fYmVnaW5Xcml0ZSgp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZW50cnkKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ3xudWxsfSBjb250ZW50Ci0gICAgICogQHBhcmFtIHtib29sZWFufSBj
b250ZW50RW5jb2RlZAotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWltZVR5cGUKLSAgICAgKi8K
LSAgICBfb25Db250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihlbnRyeSwgY29udGVudCwgY29udGVu
dEVuY29kZWQsIG1pbWVUeXBlKQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRlbnQgIT09IG51bGwp
Ci0gICAgICAgICAgICBlbnRyeS5yZXNwb25zZS5jb250ZW50LnRleHQgPSBjb250ZW50OwotICAg
ICAgICBpZiAodGhpcy5fcmVxdWVzdHNQcm9ncmVzcykKLSAgICAgICAgICAgIHRoaXMuX3JlcXVl
c3RzUHJvZ3Jlc3Mud29ya2VkKCk7Ci0gICAgICAgIGlmICghLS10aGlzLl9wZW5kaW5nUmVxdWVz
dHMpIHsKLSAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzUHJvZ3Jlc3MuZG9uZSgpOwotICAgICAg
ICAgICAgdGhpcy5fYmVnaW5Xcml0ZSgpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9iZWdp
bldyaXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBjb25zdCBqc29uSW5kZW50ID0gMjsK
LSAgICAgICAgdGhpcy5fdGV4dCA9IEpTT04uc3RyaW5naWZ5KHtsb2c6IHRoaXMuX2hhckxvZ30s
IG51bGwsIGpzb25JbmRlbnQpOwotICAgICAgICB0aGlzLl93cml0ZVByb2dyZXNzLnNldFRpdGxl
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiV3JpdGluZyBmaWxl4oCmIikpOwotICAgICAgICB0aGlz
Ll93cml0ZVByb2dyZXNzLnNldFRvdGFsV29yayh0aGlzLl90ZXh0Lmxlbmd0aCk7Ci0gICAgICAg
IHRoaXMuX2J5dGVzV3JpdHRlbiA9IDA7Ci0gICAgICAgIHRoaXMuX3dyaXRlTmV4dENodW5rKHRo
aXMuX3N0cmVhbSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLk91dHB1dFN0cmVhbX0gc3RyZWFtCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSBlcnJvcgot
ICAgICAqLwotICAgIF93cml0ZU5leHRDaHVuazogZnVuY3Rpb24oc3RyZWFtLCBlcnJvcikKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLl9ieXRlc1dyaXR0ZW4gPj0gdGhpcy5fdGV4dC5sZW5ndGgg
fHwgZXJyb3IpIHsKLSAgICAgICAgICAgIHN0cmVhbS5jbG9zZSgpOwotICAgICAgICAgICAgdGhp
cy5fd3JpdGVQcm9ncmVzcy5kb25lKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgY29uc3QgY2h1bmtTaXplID0gMTAwMDAwOwotICAgICAgICB2YXIgdGV4dCA9IHRo
aXMuX3RleHQuc3Vic3RyaW5nKHRoaXMuX2J5dGVzV3JpdHRlbiwgdGhpcy5fYnl0ZXNXcml0dGVu
ICsgY2h1bmtTaXplKTsKLSAgICAgICAgdGhpcy5fYnl0ZXNXcml0dGVuICs9IHRleHQubGVuZ3Ro
OwotICAgICAgICBzdHJlYW0ud3JpdGUodGV4dCwgdGhpcy5fd3JpdGVOZXh0Q2h1bmsuYmluZCh0
aGlzKSk7Ci0gICAgICAgIHRoaXMuX3dyaXRlUHJvZ3Jlc3Muc2V0V29ya2VkKHRoaXMuX2J5dGVz
V3JpdHRlbik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9IYW5kbGVyUmVnaXN0cnkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0hhbmRsZXJSZWdpc3RyeS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmI5MDkzMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0hhbmRsZXJSZWdpc3RyeS5qcworKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICog
QGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudS5Qcm92aWRlcn0KLSAqLwotV2Vi
SW5zcGVjdG9yLkhhbmRsZXJSZWdpc3RyeSA9IGZ1bmN0aW9uKHNldHRpbmcpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotICAgIHRoaXMuX2hhbmRsZXJzID0ge307Ci0g
ICAgdGhpcy5fc2V0dGluZyA9IHNldHRpbmc7Ci0gICAgdGhpcy5fYWN0aXZlSGFuZGxlciA9IHRo
aXMuX3NldHRpbmcuZ2V0KCk7Ci0gICAgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LnJlZ2lzdGVy
UHJvdmlkZXIodGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5IYW5kbGVyUmVnaXN0cnkucHJvdG90
eXBlID0gewotICAgIGdldCBoYW5kbGVyTmFtZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2hhbmRsZXJzKTsKLSAgICB9LAotCi0gICAg
Z2V0IGFjdGl2ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUhh
bmRsZXI7Ci0gICAgfSwKLQotICAgIHNldCBhY3RpdmVIYW5kbGVyKHZhbHVlKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fYWN0aXZlSGFuZGxlciA9IHZhbHVlOwotICAgICAgICB0aGlzLl9zZXR0aW5n
LnNldCh2YWx1ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBk
YXRhCi0gICAgICovCi0gICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKGRhdGEpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5kaXNwYXRjaFRvSGFuZGxlcih0aGlzLl9hY3RpdmVIYW5kbGVyLCBkYXRh
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAg
KiBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAqLwotICAgIGRpc3BhdGNoVG9IYW5kbGVyOiBm
dW5jdGlvbihuYW1lLCBkYXRhKQotICAgIHsKLSAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLl9o
YW5kbGVyc1tuYW1lXTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGhhbmRsZXIgJiYgaGFuZGxlcihk
YXRhKTsKLSAgICAgICAgcmV0dXJuICEhcmVzdWx0OwotICAgIH0sCi0KLSAgICByZWdpc3Rlckhh
bmRsZXI6IGZ1bmN0aW9uKG5hbWUsIGhhbmRsZXIpCi0gICAgewotICAgICAgICB0aGlzLl9oYW5k
bGVyc1tuYW1lXSA9IGhhbmRsZXI7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5IYW5kbGVyUmVnaXN0cnkuRXZlbnRUeXBlcy5IYW5kbGVyc1VwZGF0
ZWQpOwotICAgIH0sCi0KLSAgICB1bnJlZ2lzdGVySGFuZGxlcjogZnVuY3Rpb24obmFtZSkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9oYW5kbGVyc1tuYW1lXTsKLSAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkhhbmRsZXJSZWdpc3RyeS5FdmVu
dFR5cGVzLkhhbmRsZXJzVXBkYXRlZCk7Ci0gICAgfSwKLQotICAgIC8qKiAKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudX0gY29udGV4dE1lbnUKLSAgICAgKiBAcGFyYW0g
e09iamVjdH0gdGFyZ2V0Ci0gICAgICovCi0gICAgYXBwZW5kQXBwbGljYWJsZUl0ZW1zOiBmdW5j
dGlvbihldmVudCwgY29udGV4dE1lbnUsIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVu
dC5oYXNCZWVuSGFuZGxlZEJ5SGFuZGxlclJlZ2lzdHJ5KQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBldmVudC5oYXNCZWVuSGFuZGxlZEJ5SGFuZGxlclJlZ2lzdHJ5ID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5fYXBwZW5kQ29udGVudFByb3ZpZGVySXRlbXMoY29udGV4dE1lbnUsIHRhcmdl
dCk7Ci0gICAgICAgIHRoaXMuX2FwcGVuZEhyZWZJdGVtcyhjb250ZXh0TWVudSwgdGFyZ2V0KTsK
LSAgICB9LAotCi0gICAgLyoqIAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRleHRN
ZW51fSBjb250ZXh0TWVudQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgKi8K
LSAgICBfYXBwZW5kQ29udGVudFByb3ZpZGVySXRlbXM6IGZ1bmN0aW9uKGNvbnRleHRNZW51LCB0
YXJnZXQpCi0gICAgewotICAgICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuVUlTb3VyY2VDb2RlIHx8IHRhcmdldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZXNvdXJj
ZSB8fCB0YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgY29udGVudFByb3ZpZGVyID0gLyoqIEB0eXBl
IHtXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSAqLyAodGFyZ2V0KTsKLSAgICAgICAgaWYg
KCFjb250ZW50UHJvdmlkZXIuY29udGVudFVSTCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLm9wZW5MaW5rRXh0ZXJu
YWxseUxhYmVsKCksIFdlYkluc3BlY3Rvci5vcGVuUmVzb3VyY2UuYmluZChXZWJJbnNwZWN0b3Is
IGNvbnRlbnRQcm92aWRlci5jb250ZW50VVJMKCksIGZhbHNlKSk7Ci0gICAgICAgIC8vIFNraXAg
MHRoIGhhbmRsZXIsIGFzIGl0J3MgJ1VzZSBkZWZhdWx0IHBhbmVsJyBvbmUuCi0gICAgICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgdGhpcy5oYW5kbGVyTmFtZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5oYW5kbGVyTmFtZXNbaV07Ci0gICAgICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3Iu
dXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIk9wZW4gdXNpbmcgJXMiIDogIk9wZW4gVXNpbmcg
JXMiLCBoYW5kbGVyKSwKLSAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoVG9IYW5kbGVyLmJp
bmQodGhpcywgaGFuZGxlciwgeyB1cmw6IGNvbnRlbnRQcm92aWRlci5jb250ZW50VVJMKCkgfSkp
OwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LmNvcHlMaW5rQWRkcmVzc0xhYmVsKCksIEluc3BlY3RvckZyb250ZW5kSG9zdC5jb3B5VGV4dC5i
aW5kKEluc3BlY3RvckZyb250ZW5kSG9zdCwgY29udGVudFByb3ZpZGVyLmNvbnRlbnRVUkwoKSkp
OwotCi0gICAgICAgIGlmICghSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNhblNhdmUoKSB8fCAhY29u
dGVudFByb3ZpZGVyLmNvbnRlbnRVUkwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB2YXIgY29udGVudFR5cGUgPSBjb250ZW50UHJvdmlkZXIuY29udGVudFR5cGUoKTsKLSAgICAg
ICAgaWYgKGNvbnRlbnRUeXBlICE9PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5Eb2N1bWVu
dCAmJgotICAgICAgICAgICAgY29udGVudFR5cGUgIT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5
cGVzLlN0eWxlc2hlZXQgJiYKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlICE9PSBXZWJJbnNwZWN0
b3IucmVzb3VyY2VUeXBlcy5TY3JpcHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ZnVuY3Rpb24gZG9TYXZlKGZvcmNlU2F2ZUFzLCBjb250ZW50KQotICAgICAgICB7Ci0gICAgICAg
ICAgICB2YXIgdXJsID0gY29udGVudFByb3ZpZGVyLmNvbnRlbnRVUkwoKTsKLSAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5zYXZlKHVybCwgY29udGVudCwgZm9yY2VTYXZlQXMp
OwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmNsb3NlKHVybCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzYXZlKGZvcmNlU2F2ZUFzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoY29udGVudFByb3ZpZGVyIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlVJ
U291cmNlQ29kZSkgewotICAgICAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSAvKiogQHR5
cGUge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIChjb250ZW50UHJvdmlkZXIpOwotICAg
ICAgICAgICAgICAgIGlmICh1aVNvdXJjZUNvZGUuaXNEaXJ0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvU2F2ZShmb3JjZVNhdmVBcywgdWlTb3VyY2VDb2RlLndvcmtpbmdDb3B5KCkpOwot
ICAgICAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUuY29tbWl0V29ya2luZ0NvcHkoZnVuY3Rp
b24oKSB7IH0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGVudFByb3ZpZGVyLnJlcXVlc3RDb250
ZW50KGRvU2F2ZS5iaW5kKHRoaXMsIGZvcmNlU2F2ZUFzKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNhdmUiKSwgc2F2ZS5iaW5kKHRoaXMsIGZh
bHNlKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiU2F2ZSBhcy4uLiIg
OiAiU2F2ZSBBcy4uLiIpLCBzYXZlLmJpbmQodGhpcywgdHJ1ZSkpOwotICAgIH0sCi0KLSAgICAv
KiogCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnV9IGNvbnRleHRNZW51
Ci0gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldAotICAgICAqLwotICAgIF9hcHBlbmRIcmVm
SXRlbXM6IGZ1bmN0aW9uKGNvbnRleHRNZW51LCB0YXJnZXQpCi0gICAgewotICAgICAgICBpZiAo
ISh0YXJnZXQgaW5zdGFuY2VvZiBOb2RlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dmFyIHRhcmdldE5vZGUgPSAvKiogQHR5cGUge05vZGV9ICovICh0YXJnZXQpOwotCi0gICAgICAg
IHZhciBhbmNob3JFbGVtZW50ID0gdGFyZ2V0Tm9kZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENs
YXNzKCJ3ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5rIikgfHwgdGFyZ2V0Tm9kZS5lbmNsb3NpbmdO
b2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtaHRtbC1leHRlcm5hbC1saW5rIik7Ci0gICAgICAg
IGlmICghYW5jaG9yRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIg
cmVzb3VyY2VVUkwgPSBhbmNob3JFbGVtZW50LmhyZWY7Ci0gICAgICAgIGlmICghcmVzb3VyY2VV
UkwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQWRkIHJlc291cmNlLXJlbGF0
ZWQgYWN0aW9ucy4KLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3Iu
b3BlbkxpbmtFeHRlcm5hbGx5TGFiZWwoKSwgV2ViSW5zcGVjdG9yLm9wZW5SZXNvdXJjZS5iaW5k
KFdlYkluc3BlY3RvciwgcmVzb3VyY2VVUkwsIGZhbHNlKSk7Ci0gICAgICAgIGlmIChXZWJJbnNw
ZWN0b3IucmVzb3VyY2VGb3JVUkwocmVzb3VyY2VVUkwpKQotICAgICAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2Vy
Q2FzZU1lbnVUaXRsZXMoKSA/ICJPcGVuIGxpbmsgaW4gUmVzb3VyY2VzIHBhbmVsIiA6ICJPcGVu
IExpbmsgaW4gUmVzb3VyY2VzIFBhbmVsIiksIFdlYkluc3BlY3Rvci5vcGVuUmVzb3VyY2UuYmlu
ZChudWxsLCByZXNvdXJjZVVSTCwgdHJ1ZSkpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5jb3B5TGlua0FkZHJlc3NMYWJlbCgpLCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QuY29weVRleHQuYmluZChJbnNwZWN0b3JGcm9udGVuZEhvc3QsIHJlc291cmNlVVJMKSk7
Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUK
LX0KLQotCi1XZWJJbnNwZWN0b3IuSGFuZGxlclJlZ2lzdHJ5LkV2ZW50VHlwZXMgPSB7Ci0gICAg
SGFuZGxlcnNVcGRhdGVkOiAiSGFuZGxlcnNVcGRhdGVkIgotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuSGFuZGxlclNlbGVjdG9yID0gZnVuY3Rpb24oaGFuZGxl
clJlZ2lzdHJ5KQotewotICAgIHRoaXMuX2hhbmRsZXJSZWdpc3RyeSA9IGhhbmRsZXJSZWdpc3Ry
eTsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsK
LSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy5fb25DaGFu
Z2UuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX3VwZGF0ZSgpOwotICAgIHRoaXMuX2hh
bmRsZXJSZWdpc3RyeS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5IYW5kbGVyUmVnaXN0
cnkuRXZlbnRUeXBlcy5IYW5kbGVyc1VwZGF0ZWQsIHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpKTsK
LX0KLQotV2ViSW5zcGVjdG9yLkhhbmRsZXJTZWxlY3Rvci5wcm90b3R5cGUgPQotewotICAgIF91
cGRhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGls
ZHJlbigpOwotICAgICAgICB2YXIgbmFtZXMgPSB0aGlzLl9oYW5kbGVyUmVnaXN0cnkuaGFuZGxl
ck5hbWVzOwotICAgICAgICB2YXIgYWN0aXZlSGFuZGxlciA9IHRoaXMuX2hhbmRsZXJSZWdpc3Ry
eS5hY3RpdmVIYW5kbGVyOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJvcHRpb24iKTsKLSAgICAgICAgICAgIG9wdGlvbi50ZXh0Q29udGVudCA9IG5hbWVzW2ld
OwotICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gYWN0aXZlSGFuZGxlciA9PT0gbmFtZXNb
aV07Ci0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQob3B0aW9uKTsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLmVsZW1lbnQuZGlzYWJsZWQgPSBuYW1lcy5sZW5ndGggPD0gMTsK
LSAgICB9LAotCi0gICAgX29uQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IHZhciB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTsKLSAgICAgICAgdGhpcy5faGFuZGxlclJl
Z2lzdHJ5LmFjdGl2ZUhhbmRsZXIgPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLQotLyoqCi0gKiBAdHlw
ZSB7V2ViSW5zcGVjdG9yLkhhbmRsZXJSZWdpc3RyeX0KLSAqLwotV2ViSW5zcGVjdG9yLm9wZW5B
bmNob3JMb2NhdGlvblJlZ2lzdHJ5ID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDUxN2U3MzcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzM4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlT
bGljZSA9IGZ1bmN0aW9uKGFycmF5LCBzdGFydCwgZW5kKQotewotICAgIHRoaXMuX2FycmF5ID0g
YXJyYXk7Ci0gICAgdGhpcy5fc3RhcnQgPSBzdGFydDsKLSAgICB0aGlzLmxlbmd0aCA9IGVuZCAt
IHN0YXJ0OwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZS5wcm90b3R5
cGUgPSB7Ci0gICAgaXRlbTogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fYXJyYXlbdGhpcy5fc3RhcnQgKyBpbmRleF07Ci0gICAgfSwKLQotICAgIHNsaWNlOiBm
dW5jdGlvbihzdGFydCwgZW5kKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiBlbmQgPT09ICJ1
bmRlZmluZWQiKQotICAgICAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9hcnJheS5zdWJhcnJheSh0aGlzLl9zdGFydCArIHN0YXJ0LCB0aGlzLl9zdGFydCAr
IGVuZCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtudW1i
ZXI9fSBlZGdlSW5kZXgKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2UgPSBmdW5j
dGlvbihzbmFwc2hvdCwgZWRnZXMsIGVkZ2VJbmRleCkKLXsKLSAgICB0aGlzLl9zbmFwc2hvdCA9
IHNuYXBzaG90OwotICAgIHRoaXMuX2VkZ2VzID0gZWRnZXM7Ci0gICAgdGhpcy5lZGdlSW5kZXgg
PSBlZGdlSW5kZXggfHwgMDsKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2UucHJv
dG90eXBlID0gewotICAgIGNsb25lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9l
ZGdlcywgdGhpcy5lZGdlSW5kZXgpOwotICAgIH0sCi0KLSAgICBoYXNTdHJpbmdOYW1lOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIp
OwotICAgIH0sCi0KLSAgICBuYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwotICAgIH0sCi0KLSAgICBub2RlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuY3JlYXRlTm9kZSh0aGlz
Lm5vZGVJbmRleCgpKTsKLSAgICB9LAotCi0gICAgbm9kZUluZGV4OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fZWRnZXMuaXRlbSh0aGlzLmVkZ2VJbmRleCArIHRoaXMu
X3NuYXBzaG90Ll9lZGdlVG9Ob2RlT2Zmc2V0KTsKLSAgICB9LAotCi0gICAgcmF3RWRnZXM6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lZGdlczsKLSAgICB9LAotCi0g
ICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiSGVhcFNuYXBz
aG90RWRnZTogIiArIHRoaXMubmFtZSgpOwotICAgIH0sCi0KLSAgICB0eXBlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX2VkZ2VUeXBlc1t0aGlzLl90
eXBlKCldOwotICAgIH0sCi0KLSAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICBuYW1lOiB0aGlzLm5hbWUoKSwKLSAgICAgICAgICAgIG5vZGU6IG5vZGUuc2VyaWFsaXplKCks
Ci0gICAgICAgICAgICBub2RlSW5kZXg6IHRoaXMubm9kZUluZGV4KCksCi0gICAgICAgICAgICB0
eXBlOiB0aGlzLnR5cGUoKSwKLSAgICAgICAgICAgIGRpc3RhbmNlOiBub2RlLmRpc3RhbmNlKCkK
LSAgICAgICAgfTsKLSAgICB9LAotCi0gICAgX3R5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9lZGdlcy5pdGVtKHRoaXMuZWRnZUluZGV4ICsgdGhpcy5fc25hcHNo
b3QuX2VkZ2VUeXBlT2Zmc2V0KTsKLSAgICB9Ci19OwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZUl0ZXJhdG9yID0gZnVuY3Rpb24oZWRn
ZSkKLXsKLSAgICB0aGlzLmVkZ2UgPSBlZGdlOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZUl0ZXJhdG9yLnByb3RvdHlwZSA9IHsKLSAgICByZXdpbmQ6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuZWRnZS5lZGdlSW5kZXggPSAwOwotICAgIH0sCi0KLSAgICBoYXNO
ZXh0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5lZGdlLmVkZ2VJbmRl
eCA8IHRoaXMuZWRnZS5fZWRnZXMubGVuZ3RoOwotICAgIH0sCi0KLSAgICBpbmRleDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWRnZS5lZGdlSW5kZXg7Ci0gICAgfSwK
LQotICAgIHNldEluZGV4OiBmdW5jdGlvbihuZXdJbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
ZWRnZS5lZGdlSW5kZXggPSBuZXdJbmRleDsKLSAgICB9LAotCi0gICAgaXRlbTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWRnZTsKLSAgICB9LAotCi0gICAgbmV4dDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5lZGdlLmVkZ2VJbmRleCArPSB0aGlzLmVk
Z2UuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7Ci0gICAgfQotfTsKLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZSA9IGZ1
bmN0aW9uKHNuYXBzaG90LCByZXRhaW5lZE5vZGVJbmRleCwgcmV0YWluZXJJbmRleCkKLXsKLSAg
ICB0aGlzLl9zbmFwc2hvdCA9IHNuYXBzaG90OwotICAgIHRoaXMuX3JldGFpbmVkTm9kZUluZGV4
ID0gcmV0YWluZWROb2RlSW5kZXg7Ci0KLSAgICB2YXIgcmV0YWluZWROb2RlT3JkaW5hbCA9IHJl
dGFpbmVkTm9kZUluZGV4IC8gc25hcHNob3QuX25vZGVGaWVsZENvdW50OwotICAgIHRoaXMuX2Zp
cnN0UmV0YWluZXIgPSBzbmFwc2hvdC5fZmlyc3RSZXRhaW5lckluZGV4W3JldGFpbmVkTm9kZU9y
ZGluYWxdOwotICAgIHRoaXMuX3JldGFpbmVyc0NvdW50ID0gc25hcHNob3QuX2ZpcnN0UmV0YWlu
ZXJJbmRleFtyZXRhaW5lZE5vZGVPcmRpbmFsICsgMV0gLSB0aGlzLl9maXJzdFJldGFpbmVyOwot
Ci0gICAgdGhpcy5zZXRSZXRhaW5lckluZGV4KHJldGFpbmVySW5kZXgpOwotfQotCi1XZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsKLSAgICBjbG9uZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UmV0YWluZXJFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9yZXRhaW5lZE5vZGVJbmRl
eCwgdGhpcy5yZXRhaW5lckluZGV4KCkpOwotICAgIH0sCi0KLSAgICBoYXNTdHJpbmdOYW1lOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZWRnZSgpLmhhc1N0cmluZ05h
bWUoKTsKLSAgICB9LAotCi0gICAgbmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2VkZ2UoKS5uYW1lKCk7Ci0gICAgfSwKLQotICAgIG5vZGU6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9ub2RlKCk7Ci0gICAgfSwKLQotICAgIG5vZGVJ
bmRleDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVJbmRleDsK
LSAgICB9LAotCi0gICAgcmV0YWluZXJJbmRleDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3JldGFpbmVySW5kZXg7Ci0gICAgfSwKLQotICAgIHNldFJldGFpbmVySW5k
ZXg6IGZ1bmN0aW9uKG5ld0luZGV4KQotICAgIHsKLSAgICAgICAgaWYgKG5ld0luZGV4ICE9PSB0
aGlzLl9yZXRhaW5lckluZGV4KSB7Ci0gICAgICAgICAgICB0aGlzLl9yZXRhaW5lckluZGV4ID0g
bmV3SW5kZXg7Ci0gICAgICAgICAgICB0aGlzLmVkZ2VJbmRleCA9IG5ld0luZGV4OwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIHNldCBlZGdlSW5kZXgoZWRnZUluZGV4KQotICAgIHsKLSAgICAg
ICAgdmFyIHJldGFpbmVySW5kZXggPSB0aGlzLl9maXJzdFJldGFpbmVyICsgZWRnZUluZGV4Owot
ICAgICAgICB0aGlzLl9nbG9iYWxFZGdlSW5kZXggPSB0aGlzLl9zbmFwc2hvdC5fcmV0YWluaW5n
RWRnZXNbcmV0YWluZXJJbmRleF07Ci0gICAgICAgIHRoaXMuX25vZGVJbmRleCA9IHRoaXMuX3Nu
YXBzaG90Ll9yZXRhaW5pbmdOb2Rlc1tyZXRhaW5lckluZGV4XTsKLSAgICAgICAgZGVsZXRlIHRo
aXMuX2VkZ2VJbnN0YW5jZTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVJbnN0YW5jZTsKLSAg
ICB9LAotCi0gICAgX25vZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
bm9kZUluc3RhbmNlKQotICAgICAgICAgICAgdGhpcy5fbm9kZUluc3RhbmNlID0gdGhpcy5fc25h
cHNob3QuY3JlYXRlTm9kZSh0aGlzLl9ub2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gdGhpcy5f
bm9kZUluc3RhbmNlOwotICAgIH0sCi0KLSAgICBfZWRnZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9lZGdlSW5zdGFuY2UpIHsKLSAgICAgICAgICAgIHZhciBlZGdlSW5k
ZXggPSB0aGlzLl9nbG9iYWxFZGdlSW5kZXggLSB0aGlzLl9ub2RlKCkuX2VkZ2VJbmRleGVzU3Rh
cnQoKTsKLSAgICAgICAgICAgIHRoaXMuX2VkZ2VJbnN0YW5jZSA9IHRoaXMuX3NuYXBzaG90LmNy
ZWF0ZUVkZ2UodGhpcy5fbm9kZSgpLnJhd0VkZ2VzKCksIGVkZ2VJbmRleCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbnN0YW5jZTsKLSAgICB9LAotCi0gICAgdG9TdHJp
bmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lZGdlKCkudG9TdHJp
bmcoKTsKLSAgICB9LAotCi0gICAgc2VyaWFsaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpOwotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
bmFtZTogdGhpcy5uYW1lKCksCi0gICAgICAgICAgICBub2RlOiBub2RlLnNlcmlhbGl6ZSgpLAot
ICAgICAgICAgICAgbm9kZUluZGV4OiB0aGlzLm5vZGVJbmRleCgpLAotICAgICAgICAgICAgdHlw
ZTogdGhpcy50eXBlKCksCi0gICAgICAgICAgICBkaXN0YW5jZTogbm9kZS5kaXN0YW5jZSgpCi0g
ICAgICAgIH07Ci0gICAgfSwKLQotICAgIHR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9lZGdlKCkudHlwZSgpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZUl0ZXJhdG9y
ID0gZnVuY3Rpb24ocmV0YWluZXIpCi17Ci0gICAgdGhpcy5yZXRhaW5lciA9IHJldGFpbmVyOwot
fQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlSXRlcmF0b3IucHJvdG90
eXBlID0gewotICAgIHJld2luZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5yZXRh
aW5lci5zZXRSZXRhaW5lckluZGV4KDApOwotICAgIH0sCi0KLSAgICBoYXNOZXh0OiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5yZXRhaW5lci5yZXRhaW5lckluZGV4KCkg
PCB0aGlzLnJldGFpbmVyLl9yZXRhaW5lcnNDb3VudDsKLSAgICB9LAotCi0gICAgaW5kZXg6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJldGFpbmVyLnJldGFpbmVySW5k
ZXgoKTsKLSAgICB9LAotCi0gICAgc2V0SW5kZXg6IGZ1bmN0aW9uKG5ld0luZGV4KQotICAgIHsK
LSAgICAgICAgdGhpcy5yZXRhaW5lci5zZXRSZXRhaW5lckluZGV4KG5ld0luZGV4KTsKLSAgICB9
LAotCi0gICAgaXRlbTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucmV0
YWluZXI7Ci0gICAgfSwKLQotICAgIG5leHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMucmV0YWluZXIuc2V0UmV0YWluZXJJbmRleCh0aGlzLnJldGFpbmVyLnJldGFpbmVySW5kZXgo
KSArIDEpOwotICAgIH0KLX07Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge251
bWJlcj19IG5vZGVJbmRleAotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSA9IGZ1
bmN0aW9uKHNuYXBzaG90LCBub2RlSW5kZXgpCi17Ci0gICAgdGhpcy5fc25hcHNob3QgPSBzbmFw
c2hvdDsKLSAgICB0aGlzLl9maXJzdE5vZGVJbmRleCA9IG5vZGVJbmRleDsKLSAgICB0aGlzLm5v
ZGVJbmRleCA9IG5vZGVJbmRleDsKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUu
cHJvdG90eXBlID0gewotICAgIGRpc3RhbmNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fc25hcHNob3QuX25vZGVEaXN0YW5jZXNbdGhpcy5ub2RlSW5kZXggLyB0aGlz
Ll9zbmFwc2hvdC5fbm9kZUZpZWxkQ291bnRdOwotICAgIH0sCi0KLSAgICBjbGFzc05hbWU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVk
Iik7Ci0gICAgfSwKLQotICAgIGNsYXNzSW5kZXg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7Ci0gICAgfSwKLQotICAgIGRvbWlu
YXRvckluZGV4OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQg
PSB0aGlzLl9zbmFwc2hvdC5fbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgIHJldHVybiB0aGlzLl9z
bmFwc2hvdC5fZG9taW5hdG9yc1RyZWVbdGhpcy5ub2RlSW5kZXggLyB0aGlzLl9zbmFwc2hvdC5f
bm9kZUZpZWxkQ291bnRdICogbm9kZUZpZWxkQ291bnQ7Ci0gICAgfSwKLQotICAgIGVkZ2VzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RFZGdlSXRlcmF0b3IodGhpcy5fc25hcHNob3QuY3JlYXRlRWRnZSh0aGlzLnJhd0VkZ2Vz
KCksIDApKTsKLSAgICB9LAotCi0gICAgZWRnZXNDb3VudDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICh0aGlzLl9lZGdlSW5kZXhlc0VuZCgpIC0gdGhpcy5fZWRnZUluZGV4ZXNT
dGFydCgpKSAvIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7Ci0gICAgfSwKLQotICAg
IGlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBs
ZW1lbnRlZCIpOwotICAgIH0sCi0KLSAgICBpc1Jvb3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCA9PT0gdGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5k
ZXg7Ci0gICAgfSwKLQotICAgIG5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9zbmFwc2hvdC5fc3RyaW5nc1t0aGlzLl9uYW1lKCldOwotICAgIH0sCi0KLSAgICBy
YXdFZGdlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSh0aGlzLl9zbmFwc2hvdC5fY29udGFpbm1lbnRFZGdl
cywgdGhpcy5fZWRnZUluZGV4ZXNTdGFydCgpLCB0aGlzLl9lZGdlSW5kZXhlc0VuZCgpKTsKLSAg
ICB9LAotCi0gICAgcmV0YWluZWRTaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
c25hcHNob3QgPSB0aGlzLl9zbmFwc2hvdDsKLSAgICAgICAgcmV0dXJuIHNuYXBzaG90Ll9ub2Rl
c1t0aGlzLm5vZGVJbmRleCArIHNuYXBzaG90Ll9ub2RlUmV0YWluZWRTaXplT2Zmc2V0XTsKLSAg
ICB9LAotCi0gICAgcmV0YWluZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2VJdGVyYXRvcih0aGlzLl9z
bmFwc2hvdC5jcmVhdGVSZXRhaW5pbmdFZGdlKHRoaXMubm9kZUluZGV4LCAwKSk7Ci0gICAgfSwK
LQotICAgIHNlbGZTaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc25hcHNob3Qg
PSB0aGlzLl9zbmFwc2hvdDsKLSAgICAgICAgcmV0dXJuIHNuYXBzaG90Ll9ub2Rlc1t0aGlzLm5v
ZGVJbmRleCArIHNuYXBzaG90Ll9ub2RlU2VsZlNpemVPZmZzZXRdOwotICAgIH0sCi0KLSAgICB0
eXBlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX25v
ZGVUeXBlc1t0aGlzLl90eXBlKCldOwotICAgIH0sCi0KLSAgICBzZXJpYWxpemU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBpZDogdGhpcy5pZCgpLAot
ICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lKCksCi0gICAgICAgICAgICBkaXN0YW5jZTogdGhp
cy5kaXN0YW5jZSgpLAotICAgICAgICAgICAgbm9kZUluZGV4OiB0aGlzLm5vZGVJbmRleCwKLSAg
ICAgICAgICAgIHJldGFpbmVkU2l6ZTogdGhpcy5yZXRhaW5lZFNpemUoKSwKLSAgICAgICAgICAg
IHNlbGZTaXplOiB0aGlzLnNlbGZTaXplKCksCi0gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUo
KSwKLSAgICAgICAgfTsKLSAgICB9LAotCi0gICAgX25hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBzbmFwc2hvdCA9IHRoaXMuX3NuYXBzaG90OwotICAgICAgICByZXR1cm4gc25h
cHNob3QuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgc25hcHNob3QuX25vZGVOYW1lT2Zmc2V0XTsK
LSAgICB9LAotCi0gICAgX2VkZ2VJbmRleGVzU3RhcnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fZmlyc3RFZGdlSW5kZXhlc1t0aGlzLl9vcmRpbmFs
KCldOwotICAgIH0sCi0KLSAgICBfZWRnZUluZGV4ZXNFbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fZmlyc3RFZGdlSW5kZXhlc1t0aGlzLl9vcmRp
bmFsKCkgKyAxXTsKLSAgICB9LAotCi0gICAgX29yZGluYWw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCAvIHRoaXMuX3NuYXBzaG90Ll9ub2RlRmllbGRD
b3VudDsKLSAgICB9LAotCi0gICAgX25leHROb2RlSW5kZXg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlRmllbGRD
b3VudDsKLSAgICB9LAotCi0gICAgX3R5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzbmFwc2hvdCA9IHRoaXMuX3NuYXBzaG90OwotICAgICAgICByZXR1cm4gc25hcHNob3QuX25v
ZGVzW3RoaXMubm9kZUluZGV4ICsgc25hcHNob3QuX25vZGVUeXBlT2Zmc2V0XTsKLSAgICB9Ci19
OwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZUl0ZXJhdG9yID0gZnVuY3Rpb24obm9kZSkKLXsKLSAgICB0aGlzLm5vZGUgPSBub2RlOwot
ICAgIHRoaXMuX25vZGVzTGVuZ3RoID0gbm9kZS5fc25hcHNob3QuX25vZGVzLmxlbmd0aDsKLX0K
LQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVJdGVyYXRvci5wcm90b3R5cGUgPSB7Ci0g
ICAgcmV3aW5kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLm5vZGUubm9kZUluZGV4
ID0gdGhpcy5ub2RlLl9maXJzdE5vZGVJbmRleDsKLSAgICB9LAotCi0gICAgaGFzTmV4dDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5ub2RlSW5kZXggPCB0aGlz
Ll9ub2Rlc0xlbmd0aDsKLSAgICB9LAotCi0gICAgaW5kZXg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLm5vZGUubm9kZUluZGV4OwotICAgIH0sCi0KLSAgICBzZXRJbmRl
eDogZnVuY3Rpb24obmV3SW5kZXgpCi0gICAgewotICAgICAgICB0aGlzLm5vZGUubm9kZUluZGV4
ID0gbmV3SW5kZXg7Ci0gICAgfSwKLQotICAgIGl0ZW06IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLm5vZGU7Ci0gICAgfSwKLQotICAgIG5leHQ6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMubm9kZS5ub2RlSW5kZXggPSB0aGlzLm5vZGUuX25leHROb2RlSW5k
ZXgoKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QgPSBmdW5jdGlvbihwcm9maWxlKQotewotICAgIHRoaXMudWlkID0gcHJv
ZmlsZS5zbmFwc2hvdC51aWQ7Ci0gICAgdGhpcy5fbm9kZXMgPSBwcm9maWxlLm5vZGVzOwotICAg
IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMgPSBwcm9maWxlLmVkZ2VzOwotICAgIC8qKiBAdHlwZXtI
ZWFwU25hcHNob3RNZXRhaW5mb30gKi8KLSAgICB0aGlzLl9tZXRhTm9kZSA9IHByb2ZpbGUuc25h
cHNob3QubWV0YTsKLSAgICB0aGlzLl9zdHJpbmdzID0gcHJvZmlsZS5zdHJpbmdzOwotCi0gICAg
dGhpcy5fcm9vdE5vZGVJbmRleCA9IDA7Ci0gICAgaWYgKHByb2ZpbGUuc25hcHNob3Qucm9vdF9p
bmRleCkKLSAgICAgICAgdGhpcy5fcm9vdE5vZGVJbmRleCA9IHByb2ZpbGUuc25hcHNob3Qucm9v
dF9pbmRleDsKLQotICAgIHRoaXMuX3NuYXBzaG90RGlmZnMgPSB7fTsKLSAgICB0aGlzLl9hZ2dy
ZWdhdGVzRm9yRGlmZiA9IG51bGw7Ci0KLSAgICB0aGlzLl9pbml0KCk7Ci19Ci0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIEhlYXBTbmFwc2hvdE1ldGFpbmZvKCkKLXsKLSAg
ICAvLyBOZXcgZm9ybWF0LgotICAgIHRoaXMubm9kZV9maWVsZHMgPSBbXTsKLSAgICB0aGlzLm5v
ZGVfdHlwZXMgPSBbXTsKLSAgICB0aGlzLmVkZ2VfZmllbGRzID0gW107Ci0gICAgdGhpcy5lZGdl
X3R5cGVzID0gW107Ci0gICAgdGhpcy50eXBlX3N0cmluZ3MgPSB7fTsKLQotICAgIC8vIE9sZCBm
b3JtYXQuCi0gICAgdGhpcy5maWVsZHMgPSBbXTsKLSAgICB0aGlzLnR5cGVzID0gW107Ci19Ci0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIEhlYXBTbmFwc2hvdEhlYWRlcigp
Ci17Ci0gICAgLy8gTmV3IGZvcm1hdC4KLSAgICB0aGlzLnRpdGxlID0gIiI7Ci0gICAgdGhpcy51
aWQgPSAwOwotICAgIHRoaXMubWV0YSA9IG5ldyBIZWFwU25hcHNob3RNZXRhaW5mbygpOwotICAg
IHRoaXMubm9kZV9jb3VudCA9IDA7Ci0gICAgdGhpcy5lZGdlX2NvdW50ID0gMDsKLX0KLQotV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7Ci0gICAgX2luaXQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBtZXRhID0gdGhpcy5fbWV0YU5vZGU7Ci0KLSAgICAgICAg
dGhpcy5fbm9kZVR5cGVPZmZzZXQgPSBtZXRhLm5vZGVfZmllbGRzLmluZGV4T2YoInR5cGUiKTsK
LSAgICAgICAgdGhpcy5fbm9kZU5hbWVPZmZzZXQgPSBtZXRhLm5vZGVfZmllbGRzLmluZGV4T2Yo
Im5hbWUiKTsKLSAgICAgICAgdGhpcy5fbm9kZUlkT2Zmc2V0ID0gbWV0YS5ub2RlX2ZpZWxkcy5p
bmRleE9mKCJpZCIpOwotICAgICAgICB0aGlzLl9ub2RlU2VsZlNpemVPZmZzZXQgPSBtZXRhLm5v
ZGVfZmllbGRzLmluZGV4T2YoInNlbGZfc2l6ZSIpOwotICAgICAgICB0aGlzLl9ub2RlRWRnZUNv
dW50T2Zmc2V0ID0gbWV0YS5ub2RlX2ZpZWxkcy5pbmRleE9mKCJlZGdlX2NvdW50Iik7Ci0gICAg
ICAgIHRoaXMuX25vZGVGaWVsZENvdW50ID0gbWV0YS5ub2RlX2ZpZWxkcy5sZW5ndGg7Ci0KLSAg
ICAgICAgdGhpcy5fbm9kZVR5cGVzID0gbWV0YS5ub2RlX3R5cGVzW3RoaXMuX25vZGVUeXBlT2Zm
c2V0XTsKLSAgICAgICAgdGhpcy5fbm9kZUhpZGRlblR5cGUgPSB0aGlzLl9ub2RlVHlwZXMuaW5k
ZXhPZigiaGlkZGVuIik7Ci0gICAgICAgIHRoaXMuX25vZGVPYmplY3RUeXBlID0gdGhpcy5fbm9k
ZVR5cGVzLmluZGV4T2YoIm9iamVjdCIpOwotICAgICAgICB0aGlzLl9ub2RlTmF0aXZlVHlwZSA9
IHRoaXMuX25vZGVUeXBlcy5pbmRleE9mKCJuYXRpdmUiKTsKLSAgICAgICAgdGhpcy5fbm9kZUNv
ZGVUeXBlID0gdGhpcy5fbm9kZVR5cGVzLmluZGV4T2YoImNvZGUiKTsKLSAgICAgICAgdGhpcy5f
bm9kZVN5bnRoZXRpY1R5cGUgPSB0aGlzLl9ub2RlVHlwZXMuaW5kZXhPZigic3ludGhldGljIik7
Ci0KLSAgICAgICAgdGhpcy5fZWRnZUZpZWxkc0NvdW50ID0gbWV0YS5lZGdlX2ZpZWxkcy5sZW5n
dGg7Ci0gICAgICAgIHRoaXMuX2VkZ2VUeXBlT2Zmc2V0ID0gbWV0YS5lZGdlX2ZpZWxkcy5pbmRl
eE9mKCJ0eXBlIik7Ci0gICAgICAgIHRoaXMuX2VkZ2VOYW1lT2Zmc2V0ID0gbWV0YS5lZGdlX2Zp
ZWxkcy5pbmRleE9mKCJuYW1lX29yX2luZGV4Iik7Ci0gICAgICAgIHRoaXMuX2VkZ2VUb05vZGVP
ZmZzZXQgPSBtZXRhLmVkZ2VfZmllbGRzLmluZGV4T2YoInRvX25vZGUiKTsKLQotICAgICAgICB0
aGlzLl9lZGdlVHlwZXMgPSBtZXRhLmVkZ2VfdHlwZXNbdGhpcy5fZWRnZVR5cGVPZmZzZXRdOwot
ICAgICAgICB0aGlzLl9lZGdlVHlwZXMucHVzaCgiaW52aXNpYmxlIik7Ci0gICAgICAgIHRoaXMu
X2VkZ2VFbGVtZW50VHlwZSA9IHRoaXMuX2VkZ2VUeXBlcy5pbmRleE9mKCJlbGVtZW50Iik7Ci0g
ICAgICAgIHRoaXMuX2VkZ2VIaWRkZW5UeXBlID0gdGhpcy5fZWRnZVR5cGVzLmluZGV4T2YoImhp
ZGRlbiIpOwotICAgICAgICB0aGlzLl9lZGdlSW50ZXJuYWxUeXBlID0gdGhpcy5fZWRnZVR5cGVz
LmluZGV4T2YoImludGVybmFsIik7Ci0gICAgICAgIHRoaXMuX2VkZ2VTaG9ydGN1dFR5cGUgPSB0
aGlzLl9lZGdlVHlwZXMuaW5kZXhPZigic2hvcnRjdXQiKTsKLSAgICAgICAgdGhpcy5fZWRnZVdl
YWtUeXBlID0gdGhpcy5fZWRnZVR5cGVzLmluZGV4T2YoIndlYWsiKTsKLSAgICAgICAgdGhpcy5f
ZWRnZUludmlzaWJsZVR5cGUgPSB0aGlzLl9lZGdlVHlwZXMuaW5kZXhPZigiaW52aXNpYmxlIik7
Ci0KLSAgICAgICAgdGhpcy5ub2RlQ291bnQgPSB0aGlzLl9ub2Rlcy5sZW5ndGggLyB0aGlzLl9u
b2RlRmllbGRDb3VudDsKLSAgICAgICAgdGhpcy5fZWRnZUNvdW50ID0gdGhpcy5fY29udGFpbm1l
bnRFZGdlcy5sZW5ndGggLyB0aGlzLl9lZGdlRmllbGRzQ291bnQ7Ci0KLSAgICAgICAgdGhpcy5f
YnVpbGRFZGdlSW5kZXhlcygpOwotICAgICAgICB0aGlzLl9tYXJrSW52aXNpYmxlRWRnZXMoKTsK
LSAgICAgICAgdGhpcy5fYnVpbGRSZXRhaW5lcnMoKTsKLSAgICAgICAgdGhpcy5fY2FsY3VsYXRl
RmxhZ3MoKTsKLSAgICAgICAgdGhpcy5fY2FsY3VsYXRlRGlzdGFuY2VzKCk7Ci0gICAgICAgIHZh
ciByZXN1bHQgPSB0aGlzLl9idWlsZFBvc3RPcmRlckluZGV4KCk7Ci0gICAgICAgIC8vIEFjdHVh
bGx5IGl0IGlzIGFycmF5IHRoYXQgbWFwcyBub2RlIG9yZGluYWwgbnVtYmVyIHRvIGRvbWluYXRv
ciBub2RlIG9yZGluYWwgbnVtYmVyLgotICAgICAgICB0aGlzLl9kb21pbmF0b3JzVHJlZSA9IHRo
aXMuX2J1aWxkRG9taW5hdG9yVHJlZShyZXN1bHQucG9zdE9yZGVySW5kZXgyTm9kZU9yZGluYWws
IHJlc3VsdC5ub2RlT3JkaW5hbDJQb3N0T3JkZXJJbmRleCk7Ci0gICAgICAgIHRoaXMuX2NhbGN1
bGF0ZVJldGFpbmVkU2l6ZXMocmVzdWx0LnBvc3RPcmRlckluZGV4Mk5vZGVPcmRpbmFsKTsKLSAg
ICAgICAgdGhpcy5fYnVpbGREb21pbmF0ZWROb2RlcygpOwotICAgIH0sCi0KLSAgICBfYnVpbGRF
ZGdlSW5kZXhlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5f
bm9kZXM7Ci0gICAgICAgIHZhciBub2RlQ291bnQgPSB0aGlzLm5vZGVDb3VudDsKLSAgICAgICAg
dmFyIGZpcnN0RWRnZUluZGV4ZXMgPSB0aGlzLl9maXJzdEVkZ2VJbmRleGVzID0gbmV3IFVpbnQz
MkFycmF5KG5vZGVDb3VudCArIDEpOwotICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQgPSB0aGlz
Ll9ub2RlRmllbGRDb3VudDsKLSAgICAgICAgdmFyIGVkZ2VGaWVsZHNDb3VudCA9IHRoaXMuX2Vk
Z2VGaWVsZHNDb3VudDsKLSAgICAgICAgdmFyIG5vZGVFZGdlQ291bnRPZmZzZXQgPSB0aGlzLl9u
b2RlRWRnZUNvdW50T2Zmc2V0OwotICAgICAgICBmaXJzdEVkZ2VJbmRleGVzW25vZGVDb3VudF0g
PSB0aGlzLl9jb250YWlubWVudEVkZ2VzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgbm9kZU9y
ZGluYWwgPSAwLCBlZGdlSW5kZXggPSAwOyBub2RlT3JkaW5hbCA8IG5vZGVDb3VudDsgKytub2Rl
T3JkaW5hbCkgewotICAgICAgICAgICAgZmlyc3RFZGdlSW5kZXhlc1tub2RlT3JkaW5hbF0gPSBl
ZGdlSW5kZXg7Ci0gICAgICAgICAgICBlZGdlSW5kZXggKz0gbm9kZXNbbm9kZU9yZGluYWwgKiBu
b2RlRmllbGRDb3VudCArIG5vZGVFZGdlQ291bnRPZmZzZXRdICogZWRnZUZpZWxkc0NvdW50Owot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9idWlsZFJldGFpbmVyczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIHJldGFpbmluZ05vZGVzID0gdGhpcy5fcmV0YWluaW5nTm9kZXMgPSBu
ZXcgVWludDMyQXJyYXkodGhpcy5fZWRnZUNvdW50KTsKLSAgICAgICAgdmFyIHJldGFpbmluZ0Vk
Z2VzID0gdGhpcy5fcmV0YWluaW5nRWRnZXMgPSBuZXcgVWludDMyQXJyYXkodGhpcy5fZWRnZUNv
dW50KTsKLSAgICAgICAgLy8gSW5kZXggb2YgdGhlIGZpcnN0IHJldGFpbmVyIGluIHRoZSBfcmV0
YWluaW5nTm9kZXMgYW5kIF9yZXRhaW5pbmdFZGdlcwotICAgICAgICAvLyBhcnJheXMuIEFkZHJl
c3NlZCBieSByZXRhaW5lZCBub2RlIGluZGV4LgotICAgICAgICB2YXIgZmlyc3RSZXRhaW5lcklu
ZGV4ID0gdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4ID0gbmV3IFVpbnQzMkFycmF5KHRoaXMubm9k
ZUNvdW50ICsgMSk7Ci0KLSAgICAgICAgdmFyIGNvbnRhaW5tZW50RWRnZXMgPSB0aGlzLl9jb250
YWlubWVudEVkZ2VzOwotICAgICAgICB2YXIgZWRnZUZpZWxkc0NvdW50ID0gdGhpcy5fZWRnZUZp
ZWxkc0NvdW50OwotICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQgPSB0aGlzLl9ub2RlRmllbGRD
b3VudDsKLSAgICAgICAgdmFyIGVkZ2VUb05vZGVPZmZzZXQgPSB0aGlzLl9lZGdlVG9Ob2RlT2Zm
c2V0OwotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ub2RlczsKLSAgICAgICAgdmFyIGZpcnN0
RWRnZUluZGV4ZXMgPSB0aGlzLl9maXJzdEVkZ2VJbmRleGVzOwotICAgICAgICB2YXIgbm9kZUNv
dW50ID0gdGhpcy5ub2RlQ291bnQ7Ci0KLSAgICAgICAgZm9yICh2YXIgdG9Ob2RlRmllbGRJbmRl
eCA9IGVkZ2VUb05vZGVPZmZzZXQsIGwgPSBjb250YWlubWVudEVkZ2VzLmxlbmd0aDsgdG9Ob2Rl
RmllbGRJbmRleCA8IGw7IHRvTm9kZUZpZWxkSW5kZXggKz0gZWRnZUZpZWxkc0NvdW50KSB7Ci0g
ICAgICAgICAgICB2YXIgdG9Ob2RlSW5kZXggPSBjb250YWlubWVudEVkZ2VzW3RvTm9kZUZpZWxk
SW5kZXhdOwotICAgICAgICAgICAgaWYgKHRvTm9kZUluZGV4ICUgbm9kZUZpZWxkQ291bnQpCi0g
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRvTm9kZUluZGV4ICIgKyB0
b05vZGVJbmRleCk7Ci0gICAgICAgICAgICArK2ZpcnN0UmV0YWluZXJJbmRleFt0b05vZGVJbmRl
eCAvIG5vZGVGaWVsZENvdW50XTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBpID0gMCwg
Zmlyc3RVbnVzZWRSZXRhaW5lclNsb3QgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHsKLSAgICAg
ICAgICAgIHZhciByZXRhaW5lcnNDb3VudCA9IGZpcnN0UmV0YWluZXJJbmRleFtpXTsKLSAgICAg
ICAgICAgIGZpcnN0UmV0YWluZXJJbmRleFtpXSA9IGZpcnN0VW51c2VkUmV0YWluZXJTbG90Owot
ICAgICAgICAgICAgcmV0YWluaW5nTm9kZXNbZmlyc3RVbnVzZWRSZXRhaW5lclNsb3RdID0gcmV0
YWluZXJzQ291bnQ7Ci0gICAgICAgICAgICBmaXJzdFVudXNlZFJldGFpbmVyU2xvdCArPSByZXRh
aW5lcnNDb3VudDsKLSAgICAgICAgfQotICAgICAgICBmaXJzdFJldGFpbmVySW5kZXhbbm9kZUNv
dW50XSA9IHJldGFpbmluZ05vZGVzLmxlbmd0aDsKLQotICAgICAgICB2YXIgbmV4dE5vZGVGaXJz
dEVkZ2VJbmRleCA9IGZpcnN0RWRnZUluZGV4ZXNbMF07Ci0gICAgICAgIGZvciAodmFyIHNyY05v
ZGVPcmRpbmFsID0gMDsgc3JjTm9kZU9yZGluYWwgPCBub2RlQ291bnQ7ICsrc3JjTm9kZU9yZGlu
YWwpIHsKLSAgICAgICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IG5leHROb2RlRmlyc3RFZGdl
SW5kZXg7Ci0gICAgICAgICAgICBuZXh0Tm9kZUZpcnN0RWRnZUluZGV4ID0gZmlyc3RFZGdlSW5k
ZXhlc1tzcmNOb2RlT3JkaW5hbCArIDFdOwotICAgICAgICAgICAgdmFyIHNyY05vZGVJbmRleCA9
IHNyY05vZGVPcmRpbmFsICogbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgICAgICBmb3IgKHZhciBl
ZGdlSW5kZXggPSBmaXJzdEVkZ2VJbmRleDsgZWRnZUluZGV4IDwgbmV4dE5vZGVGaXJzdEVkZ2VJ
bmRleDsgZWRnZUluZGV4ICs9IGVkZ2VGaWVsZHNDb3VudCkgewotICAgICAgICAgICAgICAgIHZh
ciB0b05vZGVJbmRleCA9IGNvbnRhaW5tZW50RWRnZXNbZWRnZUluZGV4ICsgZWRnZVRvTm9kZU9m
ZnNldF07Ci0gICAgICAgICAgICAgICAgaWYgKHRvTm9kZUluZGV4ICUgbm9kZUZpZWxkQ291bnQp
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b05vZGVJbmRl
eCAiICsgdG9Ob2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhciBmaXJzdFJldGFpbmVyU2xv
dEluZGV4ID0gZmlyc3RSZXRhaW5lckluZGV4W3RvTm9kZUluZGV4IC8gbm9kZUZpZWxkQ291bnRd
OwotICAgICAgICAgICAgICAgIHZhciBuZXh0VW51c2VkUmV0YWluZXJTbG90SW5kZXggPSBmaXJz
dFJldGFpbmVyU2xvdEluZGV4ICsgKC0tcmV0YWluaW5nTm9kZXNbZmlyc3RSZXRhaW5lclNsb3RJ
bmRleF0pOwotICAgICAgICAgICAgICAgIHJldGFpbmluZ05vZGVzW25leHRVbnVzZWRSZXRhaW5l
clNsb3RJbmRleF0gPSBzcmNOb2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgcmV0YWluaW5nRWRn
ZXNbbmV4dFVudXNlZFJldGFpbmVyU2xvdEluZGV4XSA9IGVkZ2VJbmRleDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcj19
IG5vZGVJbmRleAotICAgICAqLwotICAgIGNyZWF0ZU5vZGU6IGZ1bmN0aW9uKG5vZGVJbmRleCkK
LSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7Ci0gICAg
fSwKLQotICAgIGNyZWF0ZUVkZ2U6IGZ1bmN0aW9uKGVkZ2VzLCBlZGdlSW5kZXgpCi0gICAgewot
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwotICAgIH0sCi0KLSAg
ICBjcmVhdGVSZXRhaW5pbmdFZGdlOiBmdW5jdGlvbihyZXRhaW5lZE5vZGVJbmRleCwgcmV0YWlu
ZXJJbmRleCkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVk
Iik7Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGRl
bGV0ZSB0aGlzLl9ub2RlczsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3N0cmluZ3M7Ci0gICAgICAg
IGRlbGV0ZSB0aGlzLl9yZXRhaW5pbmdFZGdlczsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3JldGFp
bmluZ05vZGVzOwotICAgICAgICBkZWxldGUgdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4OwotICAg
ICAgICBpZiAodGhpcy5fYWdncmVnYXRlcykgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Fn
Z3JlZ2F0ZXM7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fYWdncmVnYXRlc1NvcnRlZEZsYWdz
OwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9kb21pbmF0ZWROb2RlczsKLSAgICAg
ICAgZGVsZXRlIHRoaXMuX2ZpcnN0RG9taW5hdGVkTm9kZUluZGV4OwotICAgICAgICBkZWxldGUg
dGhpcy5fbm9kZURpc3RhbmNlczsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2RvbWluYXRvcnNUcmVl
OwotICAgIH0sCi0KLSAgICBfYWxsTm9kZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVJdGVyYXRvcih0aGlzLnJvb3RO
b2RlKCkpOwotICAgIH0sCi0KLSAgICByb290Tm9kZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuY3JlYXRlTm9kZSh0aGlzLl9yb290Tm9kZUluZGV4KTsKLSAgICB9LAot
Ci0gICAgZ2V0IHJvb3ROb2RlSW5kZXgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jv
b3ROb2RlSW5kZXg7Ci0gICAgfSwKLQotICAgIGdldCB0b3RhbFNpemUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMucm9vdE5vZGUoKS5yZXRhaW5lZFNpemUoKTsKLSAgICB9LAotCi0gICAg
X2dldERvbWluYXRlZEluZGV4OiBmdW5jdGlvbihub2RlSW5kZXgpCi0gICAgewotICAgICAgICBp
ZiAobm9kZUluZGV4ICUgdGhpcy5fbm9kZUZpZWxkQ291bnQpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkludmFsaWQgbm9kZUluZGV4OiAiICsgbm9kZUluZGV4KTsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2ZpcnN0RG9taW5hdGVkTm9kZUluZGV4W25vZGVJbmRleCAvIHRoaXMuX25vZGVG
aWVsZENvdW50XTsKLSAgICB9LAotCi0gICAgX2RvbWluYXRlZE5vZGVzT2ZOb2RlOiBmdW5jdGlv
bihub2RlKQotICAgIHsKLSAgICAgICAgdmFyIGRvbWluYXRlZEluZGV4RnJvbSA9IHRoaXMuX2dl
dERvbWluYXRlZEluZGV4KG5vZGUubm9kZUluZGV4KTsKLSAgICAgICAgdmFyIGRvbWluYXRlZElu
ZGV4VG8gPSB0aGlzLl9nZXREb21pbmF0ZWRJbmRleChub2RlLl9uZXh0Tm9kZUluZGV4KCkpOwot
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RBcnJheVNsaWNlKHRo
aXMuX2RvbWluYXRlZE5vZGVzLCBkb21pbmF0ZWRJbmRleEZyb20sIGRvbWluYXRlZEluZGV4VG8p
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNvcnRlZEluZGV4
ZXMKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5Ci0gICAgICogQHBhcmFtIHtzdHJpbmc9fSBm
aWx0ZXJTdHJpbmcKLSAgICAgKi8KLSAgICBhZ2dyZWdhdGVzOiBmdW5jdGlvbihzb3J0ZWRJbmRl
eGVzLCBrZXksIGZpbHRlclN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fYWdncmVn
YXRlcykgewotICAgICAgICAgICAgdGhpcy5fYWdncmVnYXRlcyA9IHt9OwotICAgICAgICAgICAg
dGhpcy5fYWdncmVnYXRlc1NvcnRlZEZsYWdzID0ge307Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgYWdncmVnYXRlc0J5Q2xhc3NOYW1lID0gdGhpcy5fYWdncmVnYXRlc1trZXldOwotICAgICAg
ICBpZiAoYWdncmVnYXRlc0J5Q2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoc29ydGVkSW5k
ZXhlcyAmJiAhdGhpcy5fYWdncmVnYXRlc1NvcnRlZEZsYWdzW2tleV0pIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9zb3J0QWdncmVnYXRlSW5kZXhlcyhhZ2dyZWdhdGVzQnlDbGFzc05hbWUpOwot
ICAgICAgICAgICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZXNTb3J0ZWRGbGFnc1trZXldID0gc29ydGVk
SW5kZXhlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVzQnlD
bGFzc05hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZmlsdGVyOwotICAgICAgICBpZiAo
ZmlsdGVyU3RyaW5nKQotICAgICAgICAgICAgZmlsdGVyID0gdGhpcy5fcGFyc2VGaWx0ZXIoZmls
dGVyU3RyaW5nKTsKLQotICAgICAgICB2YXIgYWdncmVnYXRlcyA9IHRoaXMuX2J1aWxkQWdncmVn
YXRlcyhmaWx0ZXIpOwotICAgICAgICB0aGlzLl9jYWxjdWxhdGVDbGFzc2VzUmV0YWluZWRTaXpl
KGFnZ3JlZ2F0ZXMuYWdncmVnYXRlc0J5Q2xhc3NJbmRleCwgZmlsdGVyKTsKLSAgICAgICAgYWdn
cmVnYXRlc0J5Q2xhc3NOYW1lID0gYWdncmVnYXRlcy5hZ2dyZWdhdGVzQnlDbGFzc05hbWU7Ci0K
LSAgICAgICAgaWYgKHNvcnRlZEluZGV4ZXMpCi0gICAgICAgICAgICB0aGlzLl9zb3J0QWdncmVn
YXRlSW5kZXhlcyhhZ2dyZWdhdGVzQnlDbGFzc05hbWUpOwotCi0gICAgICAgIHRoaXMuX2FnZ3Jl
Z2F0ZXNTb3J0ZWRGbGFnc1trZXldID0gc29ydGVkSW5kZXhlczsKLSAgICAgICAgdGhpcy5fYWdn
cmVnYXRlc1trZXldID0gYWdncmVnYXRlc0J5Q2xhc3NOYW1lOwotCi0gICAgICAgIHJldHVybiBh
Z2dyZWdhdGVzQnlDbGFzc05hbWU7Ci0gICAgfSwKLQotICAgIGFnZ3JlZ2F0ZXNGb3JEaWZmOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fYWdncmVnYXRlc0ZvckRpZmYpCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRlc0ZvckRpZmY7Ci0KLSAgICAgICAgdmFy
IGFnZ3JlZ2F0ZXNCeUNsYXNzTmFtZSA9IHRoaXMuYWdncmVnYXRlcyh0cnVlLCAiYWxsT2JqZWN0
cyIpOwotICAgICAgICB0aGlzLl9hZ2dyZWdhdGVzRm9yRGlmZiAgPSB7fTsKLQotICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICBmb3IgKHZhciBjbGFzc05hbWUg
aW4gYWdncmVnYXRlc0J5Q2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgYWdncmVnYXRlID0g
YWdncmVnYXRlc0J5Q2xhc3NOYW1lW2NsYXNzTmFtZV07Ci0gICAgICAgICAgICB2YXIgaW5kZXhl
cyA9IGFnZ3JlZ2F0ZS5pZHhzOwotICAgICAgICAgICAgdmFyIGlkcyA9IG5ldyBBcnJheShpbmRl
eGVzLmxlbmd0aCk7Ci0gICAgICAgICAgICB2YXIgc2VsZlNpemVzID0gbmV3IEFycmF5KGluZGV4
ZXMubGVuZ3RoKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXhlcy5sZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgIG5vZGUubm9kZUluZGV4ID0gaW5kZXhlc1tpXTsK
LSAgICAgICAgICAgICAgICBpZHNbaV0gPSBub2RlLmlkKCk7Ci0gICAgICAgICAgICAgICAgc2Vs
ZlNpemVzW2ldID0gbm9kZS5zZWxmU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB0aGlzLl9hZ2dyZWdhdGVzRm9yRGlmZltjbGFzc05hbWVdID0gewotICAgICAgICAgICAgICAg
IGluZGV4ZXM6IGluZGV4ZXMsCi0gICAgICAgICAgICAgICAgaWRzOiBpZHMsCi0gICAgICAgICAg
ICAgICAgc2VsZlNpemVzOiBzZWxmU2l6ZXMKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0ZXNGb3JEaWZmOwotICAgIH0sCi0KLSAgICBkaXN0
YW5jZUZvclVzZXJSb290OiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgfSwKLQotICAgIF9jYWxjdWxhdGVEaXN0YW5jZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50OwotICAgICAg
ICB2YXIgZGlzdGFuY2VzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMubm9kZUNvdW50KTsKLQotICAg
ICAgICAvLyBiZnMgZm9yIFdpbmRvdyByb290cwotICAgICAgICB2YXIgbm9kZXNUb1Zpc2l0ID0g
bmV3IFVpbnQzMkFycmF5KHRoaXMubm9kZUNvdW50KTsKLSAgICAgICAgdmFyIG5vZGVzVG9WaXNp
dExlbmd0aCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLnJvb3ROb2RlKCkuZWRn
ZXMoKTsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7Ci0gICAgICAgICAgICB2YXIgbm9k
ZSA9IGl0ZXIuZWRnZS5ub2RlKCk7Ci0gICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSB0aGlzLmRp
c3RhbmNlRm9yVXNlclJvb3Qobm9kZSk7Ci0gICAgICAgICAgICBpZiAoZGlzdGFuY2UgIT09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgbm9kZXNUb1Zpc2l0W25vZGVzVG9WaXNpdExlbmd0aCsrXSA9
IG5vZGUubm9kZUluZGV4OwotICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tub2RlLm5vZGVJbmRl
eCAvIG5vZGVGaWVsZENvdW50XSA9IGRpc3RhbmNlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHRoaXMuX2Jmcyhub2Rlc1RvVmlzaXQsIG5vZGVzVG9WaXNpdExlbmd0aCwgZGlz
dGFuY2VzKTsKLQotICAgICAgICAvLyBiZnMgZm9yIHJvb3QKLSAgICAgICAgbm9kZXNUb1Zpc2l0
TGVuZ3RoID0gMDsKLSAgICAgICAgbm9kZXNUb1Zpc2l0W25vZGVzVG9WaXNpdExlbmd0aCsrXSA9
IHRoaXMuX3Jvb3ROb2RlSW5kZXg7Ci0gICAgICAgIGRpc3RhbmNlc1t0aGlzLl9yb290Tm9kZUlu
ZGV4IC8gbm9kZUZpZWxkQ291bnRdID0gMTsKLSAgICAgICAgdGhpcy5fYmZzKG5vZGVzVG9WaXNp
dCwgbm9kZXNUb1Zpc2l0TGVuZ3RoLCBkaXN0YW5jZXMpOwotICAgICAgICB0aGlzLl9ub2RlRGlz
dGFuY2VzID0gZGlzdGFuY2VzOwotICAgIH0sCi0KLSAgICBfYmZzOiBmdW5jdGlvbihub2Rlc1Rv
VmlzaXQsIG5vZGVzVG9WaXNpdExlbmd0aCwgZGlzdGFuY2VzKQotICAgIHsKLSAgICAgICAgLy8g
UGVsb2FkIGZpZWxkcyBpbnRvIGxvY2FsIHZhcmlhYmxlcyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNl
LgotICAgICAgICB2YXIgZWRnZUZpZWxkc0NvdW50ID0gdGhpcy5fZWRnZUZpZWxkc0NvdW50Owot
ICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQgPSB0aGlzLl9ub2RlRmllbGRDb3VudDsKLSAgICAg
ICAgdmFyIGNvbnRhaW5tZW50RWRnZXMgPSB0aGlzLl9jb250YWlubWVudEVkZ2VzOwotICAgICAg
ICB2YXIgZmlyc3RFZGdlSW5kZXhlcyA9IHRoaXMuX2ZpcnN0RWRnZUluZGV4ZXM7Ci0gICAgICAg
IHZhciBlZGdlVG9Ob2RlT2Zmc2V0ID0gdGhpcy5fZWRnZVRvTm9kZU9mZnNldDsKLSAgICAgICAg
dmFyIGVkZ2VUeXBlT2Zmc2V0ID0gdGhpcy5fZWRnZVR5cGVPZmZzZXQ7Ci0gICAgICAgIHZhciBu
b2RlcyA9IHRoaXMuX25vZGVzOwotICAgICAgICB2YXIgbm9kZUNvdW50ID0gdGhpcy5ub2RlQ291
bnQ7Ci0gICAgICAgIHZhciBjb250YWlubWVudEVkZ2VzTGVuZ3RoID0gY29udGFpbm1lbnRFZGdl
cy5sZW5ndGg7Ci0gICAgICAgIHZhciBlZGdlV2Vha1R5cGUgPSB0aGlzLl9lZGdlV2Vha1R5cGU7
Ci0KLSAgICAgICAgdmFyIGluZGV4ID0gMDsKLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbm9kZXNU
b1Zpc2l0TGVuZ3RoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gbm9kZXNUb1Zpc2l0
W2luZGV4KytdOyAvLyBzaGlmdCBnZW5lcmF0ZXMgdG9vIG11Y2ggZ2FyYmFnZS4KLSAgICAgICAg
ICAgIHZhciBub2RlT3JkaW5hbCA9IG5vZGVJbmRleCAvIG5vZGVGaWVsZENvdW50OwotICAgICAg
ICAgICAgdmFyIGRpc3RhbmNlID0gZGlzdGFuY2VzW25vZGVPcmRpbmFsXSArIDE7Ci0gICAgICAg
ICAgICB2YXIgZmlyc3RFZGdlSW5kZXggPSBmaXJzdEVkZ2VJbmRleGVzW25vZGVPcmRpbmFsXTsK
LSAgICAgICAgICAgIHZhciBlZGdlc0VuZCA9IGZpcnN0RWRnZUluZGV4ZXNbbm9kZU9yZGluYWwg
KyAxXTsKLSAgICAgICAgICAgIGZvciAodmFyIGVkZ2VJbmRleCA9IGZpcnN0RWRnZUluZGV4OyBl
ZGdlSW5kZXggPCBlZGdlc0VuZDsgZWRnZUluZGV4ICs9IGVkZ2VGaWVsZHNDb3VudCkgewotICAg
ICAgICAgICAgICAgIHZhciBlZGdlVHlwZSA9IGNvbnRhaW5tZW50RWRnZXNbZWRnZUluZGV4ICsg
ZWRnZVR5cGVPZmZzZXRdOwotICAgICAgICAgICAgICAgIGlmIChlZGdlVHlwZSA9PSBlZGdlV2Vh
a1R5cGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHZh
ciBjaGlsZE5vZGVJbmRleCA9IGNvbnRhaW5tZW50RWRnZXNbZWRnZUluZGV4ICsgZWRnZVRvTm9k
ZU9mZnNldF07Ci0gICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZU9yZGluYWwgPSBjaGlsZE5v
ZGVJbmRleCAvIG5vZGVGaWVsZENvdW50OwotICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZXNb
Y2hpbGROb2RlT3JkaW5hbF0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGRpc3RhbmNlc1tjaGlsZE5vZGVPcmRpbmFsXSA9IGRpc3RhbmNlOwotICAgICAg
ICAgICAgICAgIG5vZGVzVG9WaXNpdFtub2Rlc1RvVmlzaXRMZW5ndGgrK10gPSBjaGlsZE5vZGVJ
bmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobm9kZXNUb1Zpc2l0
TGVuZ3RoID4gbm9kZUNvdW50KQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCRlMgZmFp
bGVkLiBOb2RlcyB0byB2aXNpdCAoIiArIG5vZGVzVG9WaXNpdExlbmd0aCArICIpIGlzIG1vcmUg
dGhhbiBub2RlcyBjb3VudCAoIiArIG5vZGVDb3VudCArICIpIik7Ci0gICAgfSwKLQotICAgIF9i
dWlsZEFnZ3JlZ2F0ZXM6IGZ1bmN0aW9uKGZpbHRlcikKLSAgICB7Ci0gICAgICAgIHZhciBhZ2dy
ZWdhdGVzID0ge307Ci0gICAgICAgIHZhciBhZ2dyZWdhdGVzQnlDbGFzc05hbWUgPSB7fTsKLSAg
ICAgICAgdmFyIGNsYXNzSW5kZXhlcyA9IFtdOwotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9u
b2RlczsKLSAgICAgICAgdmFyIG1hcEFuZEZsYWcgPSB0aGlzLnVzZXJPYmplY3RzTWFwQW5kRmxh
ZygpOwotICAgICAgICB2YXIgZmxhZ3MgPSBtYXBBbmRGbGFnID8gbWFwQW5kRmxhZy5tYXAgOiBu
dWxsOwotICAgICAgICB2YXIgZmxhZyA9IG1hcEFuZEZsYWcgPyBtYXBBbmRGbGFnLmZsYWcgOiAw
OwotICAgICAgICB2YXIgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7Ci0gICAgICAgIHZhciBu
b2RlTmF0aXZlVHlwZSA9IHRoaXMuX25vZGVOYXRpdmVUeXBlOwotICAgICAgICB2YXIgbm9kZUZp
ZWxkQ291bnQgPSB0aGlzLl9ub2RlRmllbGRDb3VudDsKLSAgICAgICAgdmFyIHNlbGZTaXplT2Zm
c2V0ID0gdGhpcy5fbm9kZVNlbGZTaXplT2Zmc2V0OwotICAgICAgICB2YXIgbm9kZVR5cGVPZmZz
ZXQgPSB0aGlzLl9ub2RlVHlwZU9mZnNldDsKLSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnJvb3RO
b2RlKCk7Ci0gICAgICAgIHZhciBub2RlRGlzdGFuY2VzID0gdGhpcy5fbm9kZURpc3RhbmNlczsK
LQotICAgICAgICBmb3IgKHZhciBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBub2Rlc0xlbmd0
aDsgbm9kZUluZGV4ICs9IG5vZGVGaWVsZENvdW50KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZU9y
ZGluYWwgPSBub2RlSW5kZXggLyBub2RlRmllbGRDb3VudDsKLSAgICAgICAgICAgIGlmIChmbGFn
cyAmJiAhKGZsYWdzW25vZGVPcmRpbmFsXSAmIGZsYWcpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSBub2RlSW5kZXg7Ci0gICAgICAgICAg
ICBpZiAoZmlsdGVyICYmICFmaWx0ZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB2YXIgc2VsZlNpemUgPSBub2Rlc1tub2RlSW5kZXggKyBzZWxmU2l6ZU9m
ZnNldF07Ci0gICAgICAgICAgICBpZiAoIXNlbGZTaXplICYmIG5vZGVzW25vZGVJbmRleCArIG5v
ZGVUeXBlT2Zmc2V0XSAhPT0gbm9kZU5hdGl2ZVR5cGUpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB2YXIgY2xhc3NJbmRleCA9IG5vZGUuY2xhc3NJbmRleCgpOwotICAg
ICAgICAgICAgaWYgKCEoY2xhc3NJbmRleCBpbiBhZ2dyZWdhdGVzKSkgewotICAgICAgICAgICAg
ICAgIHZhciBub2RlVHlwZSA9IG5vZGUudHlwZSgpOwotICAgICAgICAgICAgICAgIHZhciBuYW1l
TWF0dGVycyA9IG5vZGVUeXBlID09PSAib2JqZWN0IiB8fCBub2RlVHlwZSA9PT0gIm5hdGl2ZSI7
Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gewotICAgICAgICAgICAgICAgICAgICBjb3Vu
dDogMSwKLSAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IG5vZGVEaXN0YW5jZXNbbm9kZU9y
ZGluYWxdLAotICAgICAgICAgICAgICAgICAgICBzZWxmOiBzZWxmU2l6ZSwKLSAgICAgICAgICAg
ICAgICAgICAgbWF4UmV0OiAwLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiBub2RlVHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZU1hdHRlcnMgPyBub2RlLm5hbWUoKSA6IG51
bGwsCi0gICAgICAgICAgICAgICAgICAgIGlkeHM6IFtub2RlSW5kZXhdCi0gICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICBhZ2dyZWdhdGVzW2NsYXNzSW5kZXhdID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgY2xhc3NJbmRleGVzLnB1c2goY2xhc3NJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgYWdncmVnYXRlc0J5Q2xhc3NOYW1lW25vZGUuY2xhc3NOYW1lKCldID0gdmFsdWU7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBjbHNzID0gYWdncmVnYXRl
c1tjbGFzc0luZGV4XTsKLSAgICAgICAgICAgICAgICBjbHNzLmRpc3RhbmNlID0gTWF0aC5taW4o
Y2xzcy5kaXN0YW5jZSwgbm9kZURpc3RhbmNlc1tub2RlT3JkaW5hbF0pOwotICAgICAgICAgICAg
ICAgICsrY2xzcy5jb3VudDsKLSAgICAgICAgICAgICAgICBjbHNzLnNlbGYgKz0gc2VsZlNpemU7
Ci0gICAgICAgICAgICAgICAgY2xzcy5pZHhzLnB1c2gobm9kZUluZGV4KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNoYXZlIG9mZiBwcm92aXNpb25hbGx5IGFsbG9j
YXRlZCBzcGFjZS4KLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjbGFzc0luZGV4ZXMubGVu
Z3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2xhc3NJbmRleCA9IGNsYXNzSW5k
ZXhlc1tpXTsKLSAgICAgICAgICAgIGFnZ3JlZ2F0ZXNbY2xhc3NJbmRleF0uaWR4cyA9IGFnZ3Jl
Z2F0ZXNbY2xhc3NJbmRleF0uaWR4cy5zbGljZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB7YWdncmVnYXRlc0J5Q2xhc3NOYW1lOiBhZ2dyZWdhdGVzQnlDbGFzc05hbWUsIGFnZ3JlZ2F0
ZXNCeUNsYXNzSW5kZXg6IGFnZ3JlZ2F0ZXN9OwotICAgIH0sCi0KLSAgICBfY2FsY3VsYXRlQ2xh
c3Nlc1JldGFpbmVkU2l6ZTogZnVuY3Rpb24oYWdncmVnYXRlcywgZmlsdGVyKQotICAgIHsKLSAg
ICAgICAgdmFyIHJvb3ROb2RlSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OwotICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZShyb290Tm9kZUluZGV4KTsKLSAgICAgICAgdmFyIGxp
c3QgPSBbcm9vdE5vZGVJbmRleF07Ci0gICAgICAgIHZhciBzaXplcyA9IFstMV07Ci0gICAgICAg
IHZhciBjbGFzc2VzID0gW107Ci0gICAgICAgIHZhciBzZWVuQ2xhc3NOYW1lSW5kZXhlcyA9IHt9
OwotICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQgPSB0aGlzLl9ub2RlRmllbGRDb3VudDsKLSAg
ICAgICAgdmFyIG5vZGVUeXBlT2Zmc2V0ID0gdGhpcy5fbm9kZVR5cGVPZmZzZXQ7Ci0gICAgICAg
IHZhciBub2RlTmF0aXZlVHlwZSA9IHRoaXMuX25vZGVOYXRpdmVUeXBlOwotICAgICAgICB2YXIg
ZG9taW5hdGVkTm9kZXMgPSB0aGlzLl9kb21pbmF0ZWROb2RlczsKLSAgICAgICAgdmFyIG5vZGVz
ID0gdGhpcy5fbm9kZXM7Ci0gICAgICAgIHZhciBtYXBBbmRGbGFnID0gdGhpcy51c2VyT2JqZWN0
c01hcEFuZEZsYWcoKTsKLSAgICAgICAgdmFyIGZsYWdzID0gbWFwQW5kRmxhZyA/IG1hcEFuZEZs
YWcubWFwIDogbnVsbDsKLSAgICAgICAgdmFyIGZsYWcgPSBtYXBBbmRGbGFnID8gbWFwQW5kRmxh
Zy5mbGFnIDogMDsKLSAgICAgICAgdmFyIGZpcnN0RG9taW5hdGVkTm9kZUluZGV4ID0gdGhpcy5f
Zmlyc3REb21pbmF0ZWROb2RlSW5kZXg7Ci0KLSAgICAgICAgd2hpbGUgKGxpc3QubGVuZ3RoKSB7
Ci0gICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gbGlzdC5wb3AoKTsKLSAgICAgICAgICAgIG5v
ZGUubm9kZUluZGV4ID0gbm9kZUluZGV4OwotICAgICAgICAgICAgdmFyIGNsYXNzSW5kZXggPSBu
b2RlLmNsYXNzSW5kZXgoKTsKLSAgICAgICAgICAgIHZhciBzZWVuID0gISFzZWVuQ2xhc3NOYW1l
SW5kZXhlc1tjbGFzc0luZGV4XTsKLSAgICAgICAgICAgIHZhciBub2RlT3JkaW5hbCA9IG5vZGVJ
bmRleCAvIG5vZGVGaWVsZENvdW50OwotICAgICAgICAgICAgdmFyIGRvbWluYXRlZEluZGV4RnJv
bSA9IGZpcnN0RG9taW5hdGVkTm9kZUluZGV4W25vZGVPcmRpbmFsXTsKLSAgICAgICAgICAgIHZh
ciBkb21pbmF0ZWRJbmRleFRvID0gZmlyc3REb21pbmF0ZWROb2RlSW5kZXhbbm9kZU9yZGluYWwg
KyAxXTsKLQotICAgICAgICAgICAgaWYgKCFzZWVuICYmCi0gICAgICAgICAgICAgICAgKCFmbGFn
cyB8fCAoZmxhZ3Nbbm9kZU9yZGluYWxdICYgZmxhZykpICYmCi0gICAgICAgICAgICAgICAgKCFm
aWx0ZXIgfHwgZmlsdGVyKG5vZGUpKSAmJgotICAgICAgICAgICAgICAgIChub2RlLnNlbGZTaXpl
KCkgfHwgbm9kZXNbbm9kZUluZGV4ICsgbm9kZVR5cGVPZmZzZXRdID09PSBub2RlTmF0aXZlVHlw
ZSkKLSAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZXNbY2xhc3NJ
bmRleF0ubWF4UmV0ICs9IG5vZGUucmV0YWluZWRTaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGRvbWluYXRlZEluZGV4RnJvbSAhPT0gZG9taW5hdGVkSW5kZXhUbykgewotICAgICAgICAgICAg
ICAgICAgICBzZWVuQ2xhc3NOYW1lSW5kZXhlc1tjbGFzc0luZGV4XSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHNpemVzLnB1c2gobGlzdC5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAg
ICBjbGFzc2VzLnB1c2goY2xhc3NJbmRleCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRvbWluYXRlZEluZGV4RnJvbTsgaSA8IGRv
bWluYXRlZEluZGV4VG87IGkrKykKLSAgICAgICAgICAgICAgICBsaXN0LnB1c2goZG9taW5hdGVk
Tm9kZXNbaV0pOwotCi0gICAgICAgICAgICB2YXIgbCA9IGxpc3QubGVuZ3RoOwotICAgICAgICAg
ICAgd2hpbGUgKHNpemVzW3NpemVzLmxlbmd0aCAtIDFdID09PSBsKSB7Ci0gICAgICAgICAgICAg
ICAgc2l6ZXMucG9wKCk7Ci0gICAgICAgICAgICAgICAgY2xhc3NJbmRleCA9IGNsYXNzZXMucG9w
KCk7Ci0gICAgICAgICAgICAgICAgc2VlbkNsYXNzTmFtZUluZGV4ZXNbY2xhc3NJbmRleF0gPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfc29ydEFnZ3Jl
Z2F0ZUluZGV4ZXM6IGZ1bmN0aW9uKGFnZ3JlZ2F0ZXMpCi0gICAgewotICAgICAgICB2YXIgbm9k
ZUEgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgdmFyIG5vZGVCID0gdGhpcy5jcmVhdGVO
b2RlKCk7Ci0gICAgICAgIGZvciAodmFyIGNsc3MgaW4gYWdncmVnYXRlcykKLSAgICAgICAgICAg
IGFnZ3JlZ2F0ZXNbY2xzc10uaWR4cy5zb3J0KAotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGlk
eEEsIGlkeEIpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZUEubm9kZUluZGV4ID0gaWR4QTsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZUIubm9kZUluZGV4ID0gaWR4QjsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGVBLmlkKCkgPCBub2RlQi5pZCgpID8gLTEgOiAxOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgIH0sCi0KLSAgICBfYnVpbGRQb3N0T3JkZXJJbmRleDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVGaWVsZENvdW50ID0gdGhpcy5fbm9kZUZpZWxk
Q291bnQ7Ci0gICAgICAgIHZhciBub2RlcyA9IHRoaXMuX25vZGVzOwotICAgICAgICB2YXIgbm9k
ZUNvdW50ID0gdGhpcy5ub2RlQ291bnQ7Ci0gICAgICAgIHZhciByb290Tm9kZU9yZGluYWwgPSB0
aGlzLl9yb290Tm9kZUluZGV4IC8gbm9kZUZpZWxkQ291bnQ7Ci0KLSAgICAgICAgdmFyIGVkZ2VG
aWVsZHNDb3VudCA9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKLSAgICAgICAgdmFyIGVkZ2VUeXBl
T2Zmc2V0ID0gdGhpcy5fZWRnZVR5cGVPZmZzZXQ7Ci0gICAgICAgIHZhciBlZGdlVG9Ob2RlT2Zm
c2V0ID0gdGhpcy5fZWRnZVRvTm9kZU9mZnNldDsKLSAgICAgICAgdmFyIGVkZ2VTaG9ydGN1dFR5
cGUgPSB0aGlzLl9lZGdlU2hvcnRjdXRUeXBlOwotICAgICAgICB2YXIgZmlyc3RFZGdlSW5kZXhl
cyA9IHRoaXMuX2ZpcnN0RWRnZUluZGV4ZXM7Ci0gICAgICAgIHZhciBjb250YWlubWVudEVkZ2Vz
ID0gdGhpcy5fY29udGFpbm1lbnRFZGdlczsKLSAgICAgICAgdmFyIGNvbnRhaW5tZW50RWRnZXNM
ZW5ndGggPSB0aGlzLl9jb250YWlubWVudEVkZ2VzLmxlbmd0aDsKLQotICAgICAgICB2YXIgbWFw
QW5kRmxhZyA9IHRoaXMudXNlck9iamVjdHNNYXBBbmRGbGFnKCk7Ci0gICAgICAgIHZhciBmbGFn
cyA9IG1hcEFuZEZsYWcgPyBtYXBBbmRGbGFnLm1hcCA6IG51bGw7Ci0gICAgICAgIHZhciBmbGFn
ID0gbWFwQW5kRmxhZyA/IG1hcEFuZEZsYWcuZmxhZyA6IDA7Ci0KLSAgICAgICAgdmFyIG5vZGVz
VG9WaXNpdCA9IG5ldyBVaW50MzJBcnJheShub2RlQ291bnQpOwotICAgICAgICB2YXIgcG9zdE9y
ZGVySW5kZXgyTm9kZU9yZGluYWwgPSBuZXcgVWludDMyQXJyYXkobm9kZUNvdW50KTsKLSAgICAg
ICAgdmFyIG5vZGVPcmRpbmFsMlBvc3RPcmRlckluZGV4ID0gbmV3IFVpbnQzMkFycmF5KG5vZGVD
b3VudCk7Ci0gICAgICAgIHZhciBwYWludGVkID0gbmV3IFVpbnQ4QXJyYXkobm9kZUNvdW50KTsK
LSAgICAgICAgdmFyIG5vZGVzVG9WaXNpdExlbmd0aCA9IDA7Ci0gICAgICAgIHZhciBwb3N0T3Jk
ZXJJbmRleCA9IDA7Ci0gICAgICAgIHZhciBncmV5ID0gMTsKLSAgICAgICAgdmFyIGJsYWNrID0g
MjsKLQotICAgICAgICBub2Rlc1RvVmlzaXRbbm9kZXNUb1Zpc2l0TGVuZ3RoKytdID0gcm9vdE5v
ZGVPcmRpbmFsOwotICAgICAgICBwYWludGVkW3Jvb3ROb2RlT3JkaW5hbF0gPSBncmV5OwotCi0g
ICAgICAgIHdoaWxlIChub2Rlc1RvVmlzaXRMZW5ndGgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
T3JkaW5hbCA9IG5vZGVzVG9WaXNpdFtub2Rlc1RvVmlzaXRMZW5ndGggLSAxXTsKLQotICAgICAg
ICAgICAgaWYgKHBhaW50ZWRbbm9kZU9yZGluYWxdID09PSBncmV5KSB7Ci0gICAgICAgICAgICAg
ICAgcGFpbnRlZFtub2RlT3JkaW5hbF0gPSBibGFjazsKLSAgICAgICAgICAgICAgICB2YXIgbm9k
ZUZsYWcgPSAhZmxhZ3MgfHwgKGZsYWdzW25vZGVPcmRpbmFsXSAmIGZsYWcpOwotICAgICAgICAg
ICAgICAgIHZhciBiZWdpbkVkZ2VJbmRleCA9IGZpcnN0RWRnZUluZGV4ZXNbbm9kZU9yZGluYWxd
OwotICAgICAgICAgICAgICAgIHZhciBlbmRFZGdlSW5kZXggPSBmaXJzdEVkZ2VJbmRleGVzW25v
ZGVPcmRpbmFsICsgMV07Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgZWRnZUluZGV4ID0gYmVn
aW5FZGdlSW5kZXg7IGVkZ2VJbmRleCA8IGVuZEVkZ2VJbmRleDsgZWRnZUluZGV4ICs9IGVkZ2VG
aWVsZHNDb3VudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU9yZGluYWwgIT09IHJv
b3ROb2RlT3JkaW5hbCAmJiBjb250YWlubWVudEVkZ2VzW2VkZ2VJbmRleCArIGVkZ2VUeXBlT2Zm
c2V0XSA9PT0gZWRnZVNob3J0Y3V0VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlSW5kZXggPSBjb250YWlubWVu
dEVkZ2VzW2VkZ2VJbmRleCArIGVkZ2VUb05vZGVPZmZzZXRdOwotICAgICAgICAgICAgICAgICAg
ICB2YXIgY2hpbGROb2RlT3JkaW5hbCA9IGNoaWxkTm9kZUluZGV4IC8gbm9kZUZpZWxkQ291bnQ7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVGbGFnID0gIWZsYWdzIHx8IChmbGFn
c1tjaGlsZE5vZGVPcmRpbmFsXSAmIGZsYWcpOwotICAgICAgICAgICAgICAgICAgICAvLyBXZSBh
cmUgc2tpcHBpbmcgdGhlIGVkZ2VzIGZyb20gbm9uLXBhZ2Utb3duZWQgbm9kZXMgdG8gcGFnZS1v
d25lZCBub2Rlcy4KLSAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBkb21pbmF0
b3JzIGZvciB0aGUgb2JqZWN0cyB0aGF0IGFsc28gd2VyZSByZXRhaW5lZCBieSBkZWJ1Z2dlciB3
b3VsZCBiZSBhZmZlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVPcmRpbmFsICE9
PSByb290Tm9kZU9yZGluYWwgJiYgY2hpbGROb2RlRmxhZyAmJiAhbm9kZUZsYWcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWlu
dGVkW2NoaWxkTm9kZU9yZGluYWxdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYWludGVk
W2NoaWxkTm9kZU9yZGluYWxdID0gZ3JleTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVz
VG9WaXNpdFtub2Rlc1RvVmlzaXRMZW5ndGgrK10gPSBjaGlsZE5vZGVPcmRpbmFsOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBub2RlT3JkaW5hbDJQb3N0T3JkZXJJbmRleFtub2RlT3JkaW5hbF0g
PSBwb3N0T3JkZXJJbmRleDsKLSAgICAgICAgICAgICAgICBwb3N0T3JkZXJJbmRleDJOb2RlT3Jk
aW5hbFtwb3N0T3JkZXJJbmRleCsrXSA9IG5vZGVPcmRpbmFsOwotICAgICAgICAgICAgICAgIC0t
bm9kZXNUb1Zpc2l0TGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHBvc3RPcmRlckluZGV4ICE9PSBub2RlQ291bnQpIHsKLSAgICAgICAgICAgIHZhciBkdW1w
Tm9kZSA9IHRoaXMucm9vdE5vZGUoKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bm9kZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFpbnRlZFtpXSAhPT0gYmxh
Y2spIHsKLSAgICAgICAgICAgICAgICAgICAgZHVtcE5vZGUubm9kZUluZGV4ID0gaSAqIG5vZGVG
aWVsZENvdW50OwotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lm
eShkdW1wTm9kZS5zZXJpYWxpemUoKSkpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcmV0YWlu
ZXJzID0gZHVtcE5vZGUucmV0YWluZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChy
ZXRhaW5lcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJlZGdlTmFt
ZTogIiArIHJldGFpbmVycy5pdGVtKCkubmFtZSgpICsgIiBub2RlQ2xhc3NOYW1lOiAiICsgcmV0
YWluZXJzLml0ZW0oKS5ub2RlKCkuY2xhc3NOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0YWluZXJzID0gcmV0YWluZXJzLml0ZW0oKS5ub2RlKCkucmV0YWluZXJzKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBvc3RvcmRlcmluZyBmYWlsZWQuICIgKyAobm9kZUNv
dW50IC0gcG9zdE9yZGVySW5kZXgpICsgIiBoYW5naW5nIG5vZGVzIik7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4ge3Bvc3RPcmRlckluZGV4Mk5vZGVPcmRpbmFsOiBwb3N0T3JkZXJJbmRl
eDJOb2RlT3JkaW5hbCwgbm9kZU9yZGluYWwyUG9zdE9yZGVySW5kZXg6IG5vZGVPcmRpbmFsMlBv
c3RPcmRlckluZGV4fTsKLSAgICB9LAotCi0gICAgLy8gVGhlIGFsZ29yaXRobSBpcyBiYXNlZCBv
biB0aGUgYXJ0aWNsZToKLSAgICAvLyBLLiBDb29wZXIsIFQuIEhhcnZleSBhbmQgSy4gS2VubmVk
eSAiQSBTaW1wbGUsIEZhc3QgRG9taW5hbmNlIEFsZ29yaXRobSIKLSAgICAvLyBTb2Z0dy4gUHJh
Y3QuIEV4cGVyLiA0ICgyMDAxKSwgcHAuIDEtMTAuCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtB
cnJheS48bnVtYmVyPn0gcG9zdE9yZGVySW5kZXgyTm9kZU9yZGluYWwKLSAgICAgKiBAcGFyYW0g
e0FycmF5LjxudW1iZXI+fSBub2RlT3JkaW5hbDJQb3N0T3JkZXJJbmRleAotICAgICAqLwotICAg
IF9idWlsZERvbWluYXRvclRyZWU6IGZ1bmN0aW9uKHBvc3RPcmRlckluZGV4Mk5vZGVPcmRpbmFs
LCBub2RlT3JkaW5hbDJQb3N0T3JkZXJJbmRleCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlRmll
bGRDb3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50OwotICAgICAgICB2YXIgbm9kZXMgPSB0aGlz
Ll9ub2RlczsKLSAgICAgICAgdmFyIGZpcnN0UmV0YWluZXJJbmRleCA9IHRoaXMuX2ZpcnN0UmV0
YWluZXJJbmRleDsKLSAgICAgICAgdmFyIHJldGFpbmluZ05vZGVzID0gdGhpcy5fcmV0YWluaW5n
Tm9kZXM7Ci0gICAgICAgIHZhciByZXRhaW5pbmdFZGdlcyA9IHRoaXMuX3JldGFpbmluZ0VkZ2Vz
OwotICAgICAgICB2YXIgZWRnZUZpZWxkc0NvdW50ID0gdGhpcy5fZWRnZUZpZWxkc0NvdW50Owot
ICAgICAgICB2YXIgZWRnZVR5cGVPZmZzZXQgPSB0aGlzLl9lZGdlVHlwZU9mZnNldDsKLSAgICAg
ICAgdmFyIGVkZ2VUb05vZGVPZmZzZXQgPSB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0OwotICAgICAg
ICB2YXIgZWRnZVNob3J0Y3V0VHlwZSA9IHRoaXMuX2VkZ2VTaG9ydGN1dFR5cGU7Ci0gICAgICAg
IHZhciBmaXJzdEVkZ2VJbmRleGVzID0gdGhpcy5fZmlyc3RFZGdlSW5kZXhlczsKLSAgICAgICAg
dmFyIGNvbnRhaW5tZW50RWRnZXMgPSB0aGlzLl9jb250YWlubWVudEVkZ2VzOwotICAgICAgICB2
YXIgY29udGFpbm1lbnRFZGdlc0xlbmd0aCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMubGVuZ3Ro
OwotICAgICAgICB2YXIgcm9vdE5vZGVJbmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXg7Ci0KLSAg
ICAgICAgdmFyIG1hcEFuZEZsYWcgPSB0aGlzLnVzZXJPYmplY3RzTWFwQW5kRmxhZygpOwotICAg
ICAgICB2YXIgZmxhZ3MgPSBtYXBBbmRGbGFnID8gbWFwQW5kRmxhZy5tYXAgOiBudWxsOwotICAg
ICAgICB2YXIgZmxhZyA9IG1hcEFuZEZsYWcgPyBtYXBBbmRGbGFnLmZsYWcgOiAwOwotCi0gICAg
ICAgIHZhciBub2Rlc0NvdW50ID0gcG9zdE9yZGVySW5kZXgyTm9kZU9yZGluYWwubGVuZ3RoOwot
ICAgICAgICB2YXIgcm9vdFBvc3RPcmRlcmVkSW5kZXggPSBub2Rlc0NvdW50IC0gMTsKLSAgICAg
ICAgdmFyIG5vRW50cnkgPSBub2Rlc0NvdW50OwotICAgICAgICB2YXIgZG9taW5hdG9ycyA9IG5l
dyBVaW50MzJBcnJheShub2Rlc0NvdW50KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
b290UG9zdE9yZGVyZWRJbmRleDsgKytpKQotICAgICAgICAgICAgZG9taW5hdG9yc1tpXSA9IG5v
RW50cnk7Ci0gICAgICAgIGRvbWluYXRvcnNbcm9vdFBvc3RPcmRlcmVkSW5kZXhdID0gcm9vdFBv
c3RPcmRlcmVkSW5kZXg7Ci0KLSAgICAgICAgLy8gVGhlIGFmZmVjdGVkIGFycmF5IGlzIHVzZWQg
dG8gbWFyayBlbnRyaWVzIHdoaWNoIGRvbWluYXRvcnMKLSAgICAgICAgLy8gaGF2ZSB0byBiZSBy
YWNhbGN1bGF0ZWQgYmVjYXVzZSBvZiBjaGFuZ2VzIGluIHRoZWlyIHJldGFpbmVycy4KLSAgICAg
ICAgdmFyIGFmZmVjdGVkID0gbmV3IFVpbnQ4QXJyYXkobm9kZXNDb3VudCk7Ci0gICAgICAgIHZh
ciBub2RlT3JkaW5hbDsKLQotICAgICAgICB7IC8vIE1hcmsgdGhlIHJvb3QgZGlyZWN0IGNoaWxk
cmVuIGFzIGFmZmVjdGVkLgotICAgICAgICAgICAgbm9kZU9yZGluYWwgPSB0aGlzLl9yb290Tm9k
ZUluZGV4IC8gbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgICAgICB2YXIgYmVnaW5FZGdlVG9Ob2Rl
RmllbGRJbmRleCA9IGZpcnN0RWRnZUluZGV4ZXNbbm9kZU9yZGluYWxdICsgZWRnZVRvTm9kZU9m
ZnNldDsKLSAgICAgICAgICAgIHZhciBlbmRFZGdlVG9Ob2RlRmllbGRJbmRleCA9IGZpcnN0RWRn
ZUluZGV4ZXNbbm9kZU9yZGluYWwgKyAxXTsKLSAgICAgICAgICAgIGZvciAodmFyIHRvTm9kZUZp
ZWxkSW5kZXggPSBiZWdpbkVkZ2VUb05vZGVGaWVsZEluZGV4OwotICAgICAgICAgICAgICAgICB0
b05vZGVGaWVsZEluZGV4IDwgZW5kRWRnZVRvTm9kZUZpZWxkSW5kZXg7Ci0gICAgICAgICAgICAg
ICAgIHRvTm9kZUZpZWxkSW5kZXggKz0gZWRnZUZpZWxkc0NvdW50KSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNoaWxkTm9kZU9yZGluYWwgPSBjb250YWlubWVudEVkZ2VzW3RvTm9kZUZpZWxkSW5k
ZXhdIC8gbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgICAgICAgICAgYWZmZWN0ZWRbbm9kZU9yZGlu
YWwyUG9zdE9yZGVySW5kZXhbY2hpbGROb2RlT3JkaW5hbF1dID0gMTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHZhciBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgd2hpbGUg
KGNoYW5nZWQpIHsKLSAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAodmFyIHBvc3RPcmRlckluZGV4ID0gcm9vdFBvc3RPcmRlcmVkSW5kZXggLSAxOyBwb3N0T3Jk
ZXJJbmRleCA+PSAwOyAtLXBvc3RPcmRlckluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFm
ZmVjdGVkW3Bvc3RPcmRlckluZGV4XSA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgYWZmZWN0ZWRbcG9zdE9yZGVySW5kZXhdID0gMDsKLSAgICAg
ICAgICAgICAgICAvLyBJZiBkb21pbmF0b3Igb2YgdGhlIGVudHJ5IGhhcyBhbHJlYWR5IGJlZW4g
c2V0IHRvIHJvb3QsCi0gICAgICAgICAgICAgICAgLy8gdGhlbiBpdCBjYW4ndCBwcm9wYWdhdGUg
YW55IGZ1cnRoZXIuCi0gICAgICAgICAgICAgICAgaWYgKGRvbWluYXRvcnNbcG9zdE9yZGVySW5k
ZXhdID09PSByb290UG9zdE9yZGVyZWRJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgbm9kZU9yZGluYWwgPSBwb3N0T3JkZXJJbmRleDJOb2RlT3Jk
aW5hbFtwb3N0T3JkZXJJbmRleF07Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGVGbGFnID0gIWZs
YWdzIHx8IChmbGFnc1tub2RlT3JkaW5hbF0gJiBmbGFnKTsKLSAgICAgICAgICAgICAgICB2YXIg
bmV3RG9taW5hdG9ySW5kZXggPSBub0VudHJ5OwotICAgICAgICAgICAgICAgIHZhciBiZWdpblJl
dGFpbmVySW5kZXggPSBmaXJzdFJldGFpbmVySW5kZXhbbm9kZU9yZGluYWxdOwotICAgICAgICAg
ICAgICAgIHZhciBlbmRSZXRhaW5lckluZGV4ID0gZmlyc3RSZXRhaW5lckluZGV4W25vZGVPcmRp
bmFsICsgMV07Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgcmV0YWluZXJJbmRleCA9IGJlZ2lu
UmV0YWluZXJJbmRleDsgcmV0YWluZXJJbmRleCA8IGVuZFJldGFpbmVySW5kZXg7ICsrcmV0YWlu
ZXJJbmRleCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmV0YWluZXJFZGdlSW5kZXggPSBy
ZXRhaW5pbmdFZGdlc1tyZXRhaW5lckluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJl
dGFpbmVyRWRnZVR5cGUgPSBjb250YWlubWVudEVkZ2VzW3JldGFpbmVyRWRnZUluZGV4ICsgZWRn
ZVR5cGVPZmZzZXRdOwotICAgICAgICAgICAgICAgICAgICB2YXIgcmV0YWluZXJOb2RlSW5kZXgg
PSByZXRhaW5pbmdOb2Rlc1tyZXRhaW5lckluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHJldGFpbmVyTm9kZUluZGV4ICE9PSByb290Tm9kZUluZGV4ICYmIHJldGFpbmVyRWRnZVR5cGUg
PT09IGVkZ2VTaG9ydGN1dFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIHJldGFpbmVyTm9kZU9yZGluYWwgPSByZXRhaW5lck5v
ZGVJbmRleCAvIG5vZGVGaWVsZENvdW50OwotICAgICAgICAgICAgICAgICAgICB2YXIgcmV0YWlu
ZXJOb2RlRmxhZyA9ICFmbGFncyB8fCAoZmxhZ3NbcmV0YWluZXJOb2RlT3JkaW5hbF0gJiBmbGFn
KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHNraXBwaW5nIHRoZSBlZGdlcyBmcm9t
IG5vbi1wYWdlLW93bmVkIG5vZGVzIHRvIHBhZ2Utb3duZWQgbm9kZXMuCi0gICAgICAgICAgICAg
ICAgICAgIC8vIE90aGVyd2lzZSB0aGUgZG9taW5hdG9ycyBmb3IgdGhlIG9iamVjdHMgdGhhdCBh
bHNvIHdlcmUgcmV0YWluZWQgYnkgZGVidWdnZXIgd291bGQgYmUgYWZmZWN0ZWQuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChyZXRhaW5lck5vZGVJbmRleCAhPT0gcm9vdE5vZGVJbmRleCAmJiBu
b2RlRmxhZyAmJiAhcmV0YWluZXJOb2RlRmxhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB2YXIgcmV0YW5lclBvc3RPcmRlckluZGV4ID0g
bm9kZU9yZGluYWwyUG9zdE9yZGVySW5kZXhbcmV0YWluZXJOb2RlT3JkaW5hbF07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChkb21pbmF0b3JzW3JldGFuZXJQb3N0T3JkZXJJbmRleF0gIT09IG5v
RW50cnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdEb21pbmF0b3JJbmRleCA9
PT0gbm9FbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21pbmF0b3JJbmRl
eCA9IHJldGFuZXJQb3N0T3JkZXJJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXRhbmVyUG9zdE9yZGVySW5k
ZXggIT09IG5ld0RvbWluYXRvckluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChyZXRhbmVyUG9zdE9yZGVySW5kZXggPCBuZXdEb21pbmF0b3JJbmRleCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFuZXJQb3N0T3JkZXJJbmRleCA9
IGRvbWluYXRvcnNbcmV0YW5lclBvc3RPcmRlckluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG5ld0RvbWluYXRvckluZGV4IDwgcmV0YW5lclBvc3RPcmRlcklu
ZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9taW5hdG9ySW5k
ZXggPSBkb21pbmF0b3JzW25ld0RvbWluYXRvckluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBpZG9tIGhhcyBhbHJlYWR5IHJlYWNoZWQgdGhlIHJvb3QsIGl0IGRvZXNuJ3Qg
bWFrZSBzZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gY2hlY2sgb3RoZXIgcmV0
YWluZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0RvbWluYXRvckluZGV4ID09
PSByb290UG9zdE9yZGVyZWRJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAobmV3RG9taW5hdG9ySW5kZXggIT09IG5vRW50cnkgJiYgZG9taW5hdG9yc1twb3N0
T3JkZXJJbmRleF0gIT09IG5ld0RvbWluYXRvckluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRvbWluYXRvcnNbcG9zdE9yZGVySW5kZXhdID0gbmV3RG9taW5hdG9ySW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBub2RlT3Jk
aW5hbCA9IHBvc3RPcmRlckluZGV4Mk5vZGVPcmRpbmFsW3Bvc3RPcmRlckluZGV4XTsKLSAgICAg
ICAgICAgICAgICAgICAgYmVnaW5FZGdlVG9Ob2RlRmllbGRJbmRleCA9IGZpcnN0RWRnZUluZGV4
ZXNbbm9kZU9yZGluYWxdICsgZWRnZVRvTm9kZU9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAg
ZW5kRWRnZVRvTm9kZUZpZWxkSW5kZXggPSBmaXJzdEVkZ2VJbmRleGVzW25vZGVPcmRpbmFsICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRvTm9kZUZpZWxkSW5kZXggPSBiZWdp
bkVkZ2VUb05vZGVGaWVsZEluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgIHRvTm9kZUZp
ZWxkSW5kZXggPCBlbmRFZGdlVG9Ob2RlRmllbGRJbmRleDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICB0b05vZGVGaWVsZEluZGV4ICs9IGVkZ2VGaWVsZHNDb3VudCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGNoaWxkTm9kZU9yZGluYWwgPSBjb250YWlubWVudEVkZ2VzW3RvTm9k
ZUZpZWxkSW5kZXhdIC8gbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZmZlY3RlZFtub2RlT3JkaW5hbDJQb3N0T3JkZXJJbmRleFtjaGlsZE5vZGVPcmRpbmFsXV0gPSAx
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGRvbWluYXRvcnNUcmVlID0gbmV3IFVpbnQzMkFy
cmF5KG5vZGVzQ291bnQpOwotICAgICAgICBmb3IgKHZhciBwb3N0T3JkZXJJbmRleCA9IDAsIGwg
PSBkb21pbmF0b3JzLmxlbmd0aDsgcG9zdE9yZGVySW5kZXggPCBsOyArK3Bvc3RPcmRlckluZGV4
KSB7Ci0gICAgICAgICAgICBub2RlT3JkaW5hbCA9IHBvc3RPcmRlckluZGV4Mk5vZGVPcmRpbmFs
W3Bvc3RPcmRlckluZGV4XTsKLSAgICAgICAgICAgIGRvbWluYXRvcnNUcmVlW25vZGVPcmRpbmFs
XSA9IHBvc3RPcmRlckluZGV4Mk5vZGVPcmRpbmFsW2RvbWluYXRvcnNbcG9zdE9yZGVySW5kZXhd
XTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZG9taW5hdG9yc1RyZWU7Ci0gICAgfSwKLQot
ICAgIF9jYWxjdWxhdGVSZXRhaW5lZFNpemVzOiBmdW5jdGlvbihwb3N0T3JkZXJJbmRleDJOb2Rl
T3JkaW5hbCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlQ291bnQgPSB0aGlzLm5vZGVDb3VudDsK
LSAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5fbm9kZXM7Ci0gICAgICAgIHZhciBub2RlU2VsZlNp
emVPZmZzZXQgPSB0aGlzLl9ub2RlU2VsZlNpemVPZmZzZXQ7Ci0gICAgICAgIHZhciBub2RlRmll
bGRDb3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50OwotICAgICAgICB2YXIgZG9taW5hdG9yc1Ry
ZWUgPSB0aGlzLl9kb21pbmF0b3JzVHJlZTsKLSAgICAgICAgLy8gUmV1c2Ugbm93IHVudXNlZCBl
ZGdlX2NvdW50IGZpZWxkIHRvIHN0b3JlIHJldGFpbmVkIHNpemUuCi0gICAgICAgIHZhciBub2Rl
UmV0YWluZWRTaXplT2Zmc2V0ID0gdGhpcy5fbm9kZVJldGFpbmVkU2l6ZU9mZnNldCA9IHRoaXMu
X25vZGVFZGdlQ291bnRPZmZzZXQ7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlRWRnZUNvdW50
T2Zmc2V0OwotCi0gICAgICAgIGZvciAodmFyIG5vZGVJbmRleCA9IDAsIGwgPSBub2Rlcy5sZW5n
dGg7IG5vZGVJbmRleCA8IGw7IG5vZGVJbmRleCArPSBub2RlRmllbGRDb3VudCkKLSAgICAgICAg
ICAgIG5vZGVzW25vZGVJbmRleCArIG5vZGVSZXRhaW5lZFNpemVPZmZzZXRdID0gbm9kZXNbbm9k
ZUluZGV4ICsgbm9kZVNlbGZTaXplT2Zmc2V0XTsKLQotICAgICAgICAvLyBQcm9wYWdhdGUgcmV0
YWluZWQgc2l6ZXMgZm9yIGVhY2ggbm9kZSBleGNsdWRpbmcgcm9vdC4KLSAgICAgICAgZm9yICh2
YXIgcG9zdE9yZGVySW5kZXggPSAwOyBwb3N0T3JkZXJJbmRleCA8IG5vZGVDb3VudCAtIDE7ICsr
cG9zdE9yZGVySW5kZXgpIHsKLSAgICAgICAgICAgIHZhciBub2RlT3JkaW5hbCA9IHBvc3RPcmRl
ckluZGV4Mk5vZGVPcmRpbmFsW3Bvc3RPcmRlckluZGV4XTsKLSAgICAgICAgICAgIHZhciBub2Rl
SW5kZXggPSBub2RlT3JkaW5hbCAqIG5vZGVGaWVsZENvdW50OwotICAgICAgICAgICAgdmFyIGRv
bWluYXRvckluZGV4ID0gZG9taW5hdG9yc1RyZWVbbm9kZU9yZGluYWxdICogbm9kZUZpZWxkQ291
bnQ7Ci0gICAgICAgICAgICBub2Rlc1tkb21pbmF0b3JJbmRleCArIG5vZGVSZXRhaW5lZFNpemVP
ZmZzZXRdICs9IG5vZGVzW25vZGVJbmRleCArIG5vZGVSZXRhaW5lZFNpemVPZmZzZXRdOwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIF9idWlsZERvbWluYXRlZE5vZGVzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICAvLyBCdWlsZHMgdXAgdHdvIGFycmF5czoKLSAgICAgICAgLy8gIC0gImRv
bWluYXRlZE5vZGVzIiBpcyBhIGNvbnRpbnVvdXMgYXJyYXksIHdoZXJlIGVhY2ggbm9kZSBvd25z
IGFuCi0gICAgICAgIC8vICAgIGludGVydmFsIChjYW4gYmUgZW1wdHkpIHdpdGggY29ycmVzcG9u
ZGluZyBkb21pbmF0ZWQgbm9kZXMuCi0gICAgICAgIC8vICAtICJpbmRleEFycmF5IiBpcyBhbiBh
cnJheSBvZiBpbmRleGVzIGluIHRoZSAiZG9taW5hdGVkTm9kZXMiCi0gICAgICAgIC8vICAgIHdp
dGggdGhlIHNhbWUgcG9zaXRpb25zIGFzIGluIHRoZSBfbm9kZUluZGV4LgotICAgICAgICB2YXIg
aW5kZXhBcnJheSA9IHRoaXMuX2ZpcnN0RG9taW5hdGVkTm9kZUluZGV4ID0gbmV3IFVpbnQzMkFy
cmF5KHRoaXMubm9kZUNvdW50ICsgMSk7Ci0gICAgICAgIC8vIEFsbCBub2RlcyBleGNlcHQgdGhl
IHJvb3QgaGF2ZSBkb21pbmF0b3JzLgotICAgICAgICB2YXIgZG9taW5hdGVkTm9kZXMgPSB0aGlz
Ll9kb21pbmF0ZWROb2RlcyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLm5vZGVDb3VudCAtIDEpOwot
Ci0gICAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgZG9taW5hdGVkIG5vZGVzIGZvciBlYWNo
IG5vZGUuIFNraXAgdGhlIHJvb3QgKG5vZGUgYXQKLSAgICAgICAgLy8gaW5kZXggMCkgYXMgaXQg
aXMgdGhlIG9ubHkgbm9kZSB0aGF0IGRvbWluYXRlcyBpdHNlbGYuCi0gICAgICAgIHZhciBub2Rl
RmllbGRDb3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50OwotICAgICAgICB2YXIgZG9taW5hdG9y
c1RyZWUgPSB0aGlzLl9kb21pbmF0b3JzVHJlZTsKLQotICAgICAgICB2YXIgZnJvbU5vZGVPcmRp
bmFsID0gMDsKLSAgICAgICAgdmFyIHRvTm9kZU9yZGluYWwgPSB0aGlzLm5vZGVDb3VudDsKLSAg
ICAgICAgdmFyIHJvb3ROb2RlT3JkaW5hbCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXggLyBub2RlRmll
bGRDb3VudDsKLSAgICAgICAgaWYgKHJvb3ROb2RlT3JkaW5hbCA9PT0gZnJvbU5vZGVPcmRpbmFs
KQotICAgICAgICAgICAgZnJvbU5vZGVPcmRpbmFsID0gMTsKLSAgICAgICAgZWxzZSBpZiAocm9v
dE5vZGVPcmRpbmFsID09PSB0b05vZGVPcmRpbmFsIC0gMSkKLSAgICAgICAgICAgIHRvTm9kZU9y
ZGluYWwgPSB0b05vZGVPcmRpbmFsIC0gMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJSb290IG5vZGUgaXMgZXhwZWN0ZWQgdG8gYmUgZWl0aGVyIGZpcnN0IG9y
IGxhc3QiKTsKLSAgICAgICAgZm9yICh2YXIgbm9kZU9yZGluYWwgPSBmcm9tTm9kZU9yZGluYWw7
IG5vZGVPcmRpbmFsIDwgdG9Ob2RlT3JkaW5hbDsgKytub2RlT3JkaW5hbCkKLSAgICAgICAgICAg
ICsraW5kZXhBcnJheVtkb21pbmF0b3JzVHJlZVtub2RlT3JkaW5hbF1dOwotICAgICAgICAvLyBQ
dXQgaW4gdGhlIGZpcnN0IHNsb3Qgb2YgZWFjaCBkb21pbmF0ZWROb2RlcyBzbGljZSB0aGUgY291
bnQgb2YgZW50cmllcwotICAgICAgICAvLyB0aGF0IHdpbGwgYmUgZmlsbGVkLgotICAgICAgICB2
YXIgZmlyc3REb21pbmF0ZWROb2RlSW5kZXggPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IHRoaXMubm9kZUNvdW50OyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgZG9taW5h
dGVkQ291bnQgPSBkb21pbmF0ZWROb2Rlc1tmaXJzdERvbWluYXRlZE5vZGVJbmRleF0gPSBpbmRl
eEFycmF5W2ldOwotICAgICAgICAgICAgaW5kZXhBcnJheVtpXSA9IGZpcnN0RG9taW5hdGVkTm9k
ZUluZGV4OwotICAgICAgICAgICAgZmlyc3REb21pbmF0ZWROb2RlSW5kZXggKz0gZG9taW5hdGVk
Q291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgaW5kZXhBcnJheVt0aGlzLm5vZGVDb3VudF0gPSBk
b21pbmF0ZWROb2Rlcy5sZW5ndGg7Ci0gICAgICAgIC8vIEZpbGwgdXAgdGhlIGRvbWluYXRlZE5v
ZGVzIGFycmF5IHdpdGggaW5kZXhlcyBvZiBkb21pbmF0ZWQgbm9kZXMuIFNraXAgdGhlIHJvb3Qg
KG5vZGUgYXQKLSAgICAgICAgLy8gaW5kZXggMCkgYXMgaXQgaXMgdGhlIG9ubHkgbm9kZSB0aGF0
IGRvbWluYXRlcyBpdHNlbGYuCi0gICAgICAgIGZvciAodmFyIG5vZGVPcmRpbmFsID0gZnJvbU5v
ZGVPcmRpbmFsOyBub2RlT3JkaW5hbCA8IHRvTm9kZU9yZGluYWw7ICsrbm9kZU9yZGluYWwpIHsK
LSAgICAgICAgICAgIHZhciBkb21pbmF0b3JPcmRpbmFsID0gZG9taW5hdG9yc1RyZWVbbm9kZU9y
ZGluYWxdOwotICAgICAgICAgICAgdmFyIGRvbWluYXRlZFJlZkluZGV4ID0gaW5kZXhBcnJheVtk
b21pbmF0b3JPcmRpbmFsXTsKLSAgICAgICAgICAgIGRvbWluYXRlZFJlZkluZGV4ICs9ICgtLWRv
bWluYXRlZE5vZGVzW2RvbWluYXRlZFJlZkluZGV4XSk7Ci0gICAgICAgICAgICBkb21pbmF0ZWRO
b2Rlc1tkb21pbmF0ZWRSZWZJbmRleF0gPSBub2RlT3JkaW5hbCAqIG5vZGVGaWVsZENvdW50Owot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9tYXJrSW52aXNpYmxlRWRnZXM6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7Ci0gICAg
fSwKLQotICAgIF9udW1iZXJzQ29tcGFyYXRvcjogZnVuY3Rpb24oYSwgYikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhIDwgYiA/IC0xIDogKGEgPiBiID8gMSA6IDApOwotICAgIH0sCi0KLSAgICBf
Y2FsY3VsYXRlRmxhZ3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJv
cigiTm90IGltcGxlbWVudGVkIik7Ci0gICAgfSwKLQotICAgIHVzZXJPYmplY3RzTWFwQW5kRmxh
ZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVt
ZW50ZWQiKTsKLSAgICB9LAotCi0gICAgY2FsY3VsYXRlU25hcHNob3REaWZmOiBmdW5jdGlvbihi
YXNlU25hcHNob3RJZCwgYmFzZVNuYXBzaG90QWdncmVnYXRlcykKLSAgICB7Ci0gICAgICAgIHZh
ciBzbmFwc2hvdERpZmYgPSB0aGlzLl9zbmFwc2hvdERpZmZzW2Jhc2VTbmFwc2hvdElkXTsKLSAg
ICAgICAgaWYgKHNuYXBzaG90RGlmZikKLSAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdERpZmY7
Ci0gICAgICAgIHNuYXBzaG90RGlmZiA9IHt9OwotCi0gICAgICAgIHZhciBhZ2dyZWdhdGVzID0g
dGhpcy5hZ2dyZWdhdGVzKHRydWUsICJhbGxPYmplY3RzIik7Ci0gICAgICAgIGZvciAodmFyIGNs
YXNzTmFtZSBpbiBiYXNlU25hcHNob3RBZ2dyZWdhdGVzKSB7Ci0gICAgICAgICAgICB2YXIgYmFz
ZUFnZ3JlZ2F0ZSA9IGJhc2VTbmFwc2hvdEFnZ3JlZ2F0ZXNbY2xhc3NOYW1lXTsKLSAgICAgICAg
ICAgIHZhciBkaWZmID0gdGhpcy5fY2FsY3VsYXRlRGlmZkZvckNsYXNzKGJhc2VBZ2dyZWdhdGUs
IGFnZ3JlZ2F0ZXNbY2xhc3NOYW1lXSk7Ci0gICAgICAgICAgICBpZiAoZGlmZikKLSAgICAgICAg
ICAgICAgICBzbmFwc2hvdERpZmZbY2xhc3NOYW1lXSA9IGRpZmY7Ci0gICAgICAgIH0KLSAgICAg
ICAgdmFyIGVtcHR5QmFzZUFnZ3JlZ2F0ZSA9IHsgaWRzOiBbXSwgaW5kZXhlczogW10sIHNlbGZT
aXplczogW10gfTsKLSAgICAgICAgZm9yICh2YXIgY2xhc3NOYW1lIGluIGFnZ3JlZ2F0ZXMpIHsK
LSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgaW4gYmFzZVNuYXBzaG90QWdncmVnYXRlcykKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNuYXBzaG90RGlmZltjbGFzc05h
bWVdID0gdGhpcy5fY2FsY3VsYXRlRGlmZkZvckNsYXNzKGVtcHR5QmFzZUFnZ3JlZ2F0ZSwgYWdn
cmVnYXRlc1tjbGFzc05hbWVdKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NuYXBzaG90
RGlmZnNbYmFzZVNuYXBzaG90SWRdID0gc25hcHNob3REaWZmOwotICAgICAgICByZXR1cm4gc25h
cHNob3REaWZmOwotICAgIH0sCi0KLSAgICBfY2FsY3VsYXRlRGlmZkZvckNsYXNzOiBmdW5jdGlv
bihiYXNlQWdncmVnYXRlLCBhZ2dyZWdhdGUpCi0gICAgewotICAgICAgICB2YXIgYmFzZUlkcyA9
IGJhc2VBZ2dyZWdhdGUuaWRzOwotICAgICAgICB2YXIgYmFzZUluZGV4ZXMgPSBiYXNlQWdncmVn
YXRlLmluZGV4ZXM7Ci0gICAgICAgIHZhciBiYXNlU2VsZlNpemVzID0gYmFzZUFnZ3JlZ2F0ZS5z
ZWxmU2l6ZXM7Ci0KLSAgICAgICAgdmFyIGluZGV4ZXMgPSBhZ2dyZWdhdGUgPyBhZ2dyZWdhdGUu
aWR4cyA6IFtdOwotCi0gICAgICAgIHZhciBpID0gMCwgbCA9IGJhc2VJZHMubGVuZ3RoOwotICAg
ICAgICB2YXIgaiA9IDAsIG0gPSBpbmRleGVzLmxlbmd0aDsKLSAgICAgICAgdmFyIGRpZmYgPSB7
IGFkZGVkQ291bnQ6IDAsCi0gICAgICAgICAgICAgICAgICAgICByZW1vdmVkQ291bnQ6IDAsCi0g
ICAgICAgICAgICAgICAgICAgICBhZGRlZFNpemU6IDAsCi0gICAgICAgICAgICAgICAgICAgICBy
ZW1vdmVkU2l6ZTogMCwKLSAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRJbmRleGVzOiBbXSwK
LSAgICAgICAgICAgICAgICAgICAgIGFkZGVkSW5kZXhlczogW10gfTsKLQotICAgICAgICB2YXIg
bm9kZUIgPSB0aGlzLmNyZWF0ZU5vZGUoaW5kZXhlc1tqXSk7Ci0gICAgICAgIHdoaWxlIChpIDwg
bCAmJiBqIDwgbSkgewotICAgICAgICAgICAgdmFyIG5vZGVBSWQgPSBiYXNlSWRzW2ldOwotICAg
ICAgICAgICAgaWYgKG5vZGVBSWQgPCBub2RlQi5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgZGlm
Zi5kZWxldGVkSW5kZXhlcy5wdXNoKGJhc2VJbmRleGVzW2ldKTsKLSAgICAgICAgICAgICAgICBk
aWZmLnJlbW92ZWRDb3VudCsrOwotICAgICAgICAgICAgICAgIGRpZmYucmVtb3ZlZFNpemUgKz0g
YmFzZVNlbGZTaXplc1tpXTsKLSAgICAgICAgICAgICAgICArK2k7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG5vZGVBSWQgPiBub2RlQi5pZCgpKSB7IC8vIE5hdGl2ZSBub2RlcyhlLmcuIGRvbSBn
cm91cHMpIG1heSBoYXZlIGlkcyBsZXNzIHRoYW4gbWF4IEpTIG9iamVjdCBpZCBpbiB0aGUgYmFz
ZSBzbmFwc2hvdAotICAgICAgICAgICAgICAgIGRpZmYuYWRkZWRJbmRleGVzLnB1c2goaW5kZXhl
c1tqXSk7Ci0gICAgICAgICAgICAgICAgZGlmZi5hZGRlZENvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgZGlmZi5hZGRlZFNpemUgKz0gbm9kZUIuc2VsZlNpemUoKTsKLSAgICAgICAgICAgICAgICBu
b2RlQi5ub2RlSW5kZXggPSBpbmRleGVzWysral07Ci0gICAgICAgICAgICB9IGVsc2UgeyAvLyBu
b2RlQUlkID09PSBub2RlQi5pZCgpCi0gICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAg
ICAgIG5vZGVCLm5vZGVJbmRleCA9IGluZGV4ZXNbKytqXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICB3aGlsZSAoaSA8IGwpIHsKLSAgICAgICAgICAgIGRpZmYuZGVsZXRlZElu
ZGV4ZXMucHVzaChiYXNlSW5kZXhlc1tpXSk7Ci0gICAgICAgICAgICBkaWZmLnJlbW92ZWRDb3Vu
dCsrOwotICAgICAgICAgICAgZGlmZi5yZW1vdmVkU2l6ZSArPSBiYXNlU2VsZlNpemVzW2ldOwot
ICAgICAgICAgICAgKytpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChqIDwgbSkgewotICAg
ICAgICAgICAgZGlmZi5hZGRlZEluZGV4ZXMucHVzaChpbmRleGVzW2pdKTsKLSAgICAgICAgICAg
IGRpZmYuYWRkZWRDb3VudCsrOwotICAgICAgICAgICAgZGlmZi5hZGRlZFNpemUgKz0gbm9kZUIu
c2VsZlNpemUoKTsKLSAgICAgICAgICAgIG5vZGVCLm5vZGVJbmRleCA9IGluZGV4ZXNbKytqXTsK
LSAgICAgICAgfQotICAgICAgICBkaWZmLmNvdW50RGVsdGEgPSBkaWZmLmFkZGVkQ291bnQgLSBk
aWZmLnJlbW92ZWRDb3VudDsKLSAgICAgICAgZGlmZi5zaXplRGVsdGEgPSBkaWZmLmFkZGVkU2l6
ZSAtIGRpZmYucmVtb3ZlZFNpemU7Ci0gICAgICAgIGlmICghZGlmZi5hZGRlZENvdW50ICYmICFk
aWZmLnJlbW92ZWRDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1
cm4gZGlmZjsKLSAgICB9LAotCi0gICAgX25vZGVGb3JTbmFwc2hvdE9iamVjdElkOiBmdW5jdGlv
bihzbmFwc2hvdE9iamVjdElkKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaXQgPSB0aGlzLl9h
bGxOb2RlcygpOyBpdC5oYXNOZXh0KCk7IGl0Lm5leHQoKSkgewotICAgICAgICAgICAgaWYgKGl0
Lm5vZGUuaWQoKSA9PT0gc25hcHNob3RPYmplY3RJZCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
aXQubm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAg
bm9kZUNsYXNzTmFtZTogZnVuY3Rpb24oc25hcHNob3RPYmplY3RJZCkKLSAgICB7Ci0gICAgICAg
IHZhciBub2RlID0gdGhpcy5fbm9kZUZvclNuYXBzaG90T2JqZWN0SWQoc25hcHNob3RPYmplY3RJ
ZCk7Ci0gICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xhc3NOYW1l
KCk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICBkb21pbmF0b3JJZHNGb3JO
b2RlOiBmdW5jdGlvbihzbmFwc2hvdE9iamVjdElkKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLl9ub2RlRm9yU25hcHNob3RPYmplY3RJZChzbmFwc2hvdE9iamVjdElkKTsKLSAgICAg
ICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciByZXN1
bHQgPSBbXTsKLSAgICAgICAgd2hpbGUgKCFub2RlLmlzUm9vdCgpKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQucHVzaChub2RlLmlkKCkpOwotICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSBub2Rl
LmRvbWluYXRvckluZGV4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9LAotCi0gICAgX3BhcnNlRmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIpCi0gICAgewotICAgICAg
ICBpZiAoIWZpbHRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgcGFy
c2VkRmlsdGVyID0gZXZhbCgiKGZ1bmN0aW9uKCl7cmV0dXJuICIgKyBmaWx0ZXIgKyAifSkoKSIp
OwotICAgICAgICByZXR1cm4gcGFyc2VkRmlsdGVyLmJpbmQodGhpcyk7Ci0gICAgfSwKLQotICAg
IGNyZWF0ZUVkZ2VzUHJvdmlkZXI6IGZ1bmN0aW9uKG5vZGVJbmRleCwgc2hvd0hpZGRlbkRhdGEp
Ci0gICAgewotICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZShub2RlSW5kZXgpOwot
ICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250YWlubWVudEVkZ2VzRmlsdGVyKHNob3dIaWRk
ZW5EYXRhKTsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRn
ZXNQcm92aWRlcih0aGlzLCBmaWx0ZXIsIG5vZGUuZWRnZXMoKSk7Ci0gICAgfSwKLQotICAgIGNy
ZWF0ZUVkZ2VzUHJvdmlkZXJGb3JUZXN0OiBmdW5jdGlvbihub2RlSW5kZXgsIGZpbHRlcikKLSAg
ICB7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKG5vZGVJbmRleCk7Ci0gICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIodGhp
cywgZmlsdGVyLCBub2RlLmVkZ2VzKCkpOwotICAgIH0sCi0KLSAgICByZXRhaW5pbmdFZGdlc0Zp
bHRlcjogZnVuY3Rpb24oc2hvd0hpZGRlbkRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICB9LAotCi0gICAgY29udGFpbm1lbnRFZGdlc0ZpbHRlcjogZnVuY3Rpb24oc2hvd0hp
ZGRlbkRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAgY3Jl
YXRlUmV0YWluaW5nRWRnZXNQcm92aWRlcjogZnVuY3Rpb24obm9kZUluZGV4LCBzaG93SGlkZGVu
RGF0YSkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKG5vZGVJbmRl
eCk7Ci0gICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLnJldGFpbmluZ0VkZ2VzRmlsdGVyKHNob3dI
aWRkZW5EYXRhKTsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RWRnZXNQcm92aWRlcih0aGlzLCBmaWx0ZXIsIG5vZGUucmV0YWluZXJzKCkpOwotICAgIH0sCi0K
LSAgICBjcmVhdGVBZGRlZE5vZGVzUHJvdmlkZXI6IGZ1bmN0aW9uKGJhc2VTbmFwc2hvdElkLCBj
bGFzc05hbWUpCi0gICAgewotICAgICAgICB2YXIgc25hcHNob3REaWZmID0gdGhpcy5fc25hcHNo
b3REaWZmc1tiYXNlU25hcHNob3RJZF07Ci0gICAgICAgIHZhciBkaWZmRm9yQ2xhc3MgPSBzbmFw
c2hvdERpZmZbY2xhc3NOYW1lXTsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZXNQcm92aWRlcih0aGlzLCBudWxsLCBkaWZmRm9yQ2xhc3MuYWRkZWRJbmRl
eGVzKTsKLSAgICB9LAotCi0gICAgY3JlYXRlRGVsZXRlZE5vZGVzUHJvdmlkZXI6IGZ1bmN0aW9u
KG5vZGVJbmRleGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZXNQcm92aWRlcih0aGlzLCBudWxsLCBub2RlSW5kZXhlcyk7Ci0gICAgfSwK
LQotICAgIGNsYXNzTm9kZXNGaWx0ZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBudWxsOwotICAgIH0sCi0KLSAgICBjcmVhdGVOb2Rlc1Byb3ZpZGVyRm9yQ2xhc3M6IGZ1bmN0
aW9uKGNsYXNzTmFtZSwgYWdncmVnYXRlc0tleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIodGhpcywgdGhpcy5jbGFzc05v
ZGVzRmlsdGVyKCksIHRoaXMuYWdncmVnYXRlcyhmYWxzZSwgYWdncmVnYXRlc0tleSlbY2xhc3NO
YW1lXS5pZHhzKTsKLSAgICB9LAotCi0gICAgY3JlYXRlTm9kZXNQcm92aWRlckZvckRvbWluYXRv
cjogZnVuY3Rpb24obm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUobm9kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZXNQcm92aWRlcih0aGlzLCBudWxsLCB0aGlzLl9kb21pbmF0ZWROb2Rlc09m
Tm9kZShub2RlKSk7Ci0gICAgfSwKLQotICAgIHVwZGF0ZVN0YXRpY0RhdGE6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB7bm9kZUNvdW50OiB0aGlzLm5vZGVDb3VudCwgcm9vdE5v
ZGVJbmRleDogdGhpcy5fcm9vdE5vZGVJbmRleCwgdG90YWxTaXplOiB0aGlzLnRvdGFsU2l6ZSwg
dWlkOiB0aGlzLnVpZH07Ci0gICAgfQotfTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBw
YXJhbSB7QXJyYXkuPG51bWJlcj49fSB1bmZpbHRlcmVkSXRlcmF0aW9uT3JkZXIKLSAqLwotV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yID0gZnVuY3Rpb24o
aXRlcmF0b3IsIGZpbHRlciwgdW5maWx0ZXJlZEl0ZXJhdGlvbk9yZGVyKQotewotICAgIHRoaXMu
X2ZpbHRlciA9IGZpbHRlcjsKLSAgICB0aGlzLl9pdGVyYXRvciA9IGl0ZXJhdG9yOwotICAgIHRo
aXMuX3VuZmlsdGVyZWRJdGVyYXRpb25PcmRlciA9IHVuZmlsdGVyZWRJdGVyYXRpb25PcmRlcjsK
LSAgICB0aGlzLl9pdGVyYXRpb25PcmRlciA9IG51bGw7Ci0gICAgdGhpcy5fcG9zaXRpb24gPSAw
OwotICAgIHRoaXMuX2N1cnJlbnRDb21wYXJhdG9yID0gbnVsbDsKLSAgICB0aGlzLl9zb3J0ZWRQ
cmVmaXhMZW5ndGggPSAwOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRP
cmRlcmVkSXRlcmF0b3IucHJvdG90eXBlID0gewotICAgIF9jcmVhdGVJdGVyYXRpb25PcmRlcjog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2l0ZXJhdGlvbk9yZGVyKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fdW5maWx0ZXJlZEl0ZXJhdGlvbk9y
ZGVyICYmICF0aGlzLl9maWx0ZXIpIHsKLSAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGlvbk9yZGVy
ID0gdGhpcy5fdW5maWx0ZXJlZEl0ZXJhdGlvbk9yZGVyLnNsaWNlKDApOwotICAgICAgICAgICAg
dGhpcy5fdW5maWx0ZXJlZEl0ZXJhdGlvbk9yZGVyID0gbnVsbDsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9pdGVyYXRpb25PcmRlciA9IFtdOwotICAgICAg
ICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9pdGVyYXRvcjsKLSAgICAgICAgaWYgKCF0aGlzLl91bmZp
bHRlcmVkSXRlcmF0aW9uT3JkZXIgJiYgIXRoaXMuX2ZpbHRlcikgewotICAgICAgICAgICAgZm9y
IChpdGVyYXRvci5yZXdpbmQoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyBpdGVyYXRvci5uZXh0KCkp
Ci0gICAgICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIucHVzaChpdGVyYXRvci5pbmRl
eCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fdW5maWx0ZXJlZEl0ZXJhdGlvbk9yZGVy
KSB7Ci0gICAgICAgICAgICBmb3IgKGl0ZXJhdG9yLnJld2luZCgpOyBpdGVyYXRvci5oYXNOZXh0
KCk7IGl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWx0ZXIo
aXRlcmF0b3IuaXRlbSgpKSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3Jk
ZXIucHVzaChpdGVyYXRvci5pbmRleCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHZhciBvcmRlciA9IHRoaXMuX3VuZmlsdGVyZWRJdGVyYXRpb25PcmRl
ci5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgPwotICAgICAgICAgICAgICAgIHRoaXMuX3VuZmlsdGVy
ZWRJdGVyYXRpb25PcmRlciA6IHRoaXMuX3VuZmlsdGVyZWRJdGVyYXRpb25PcmRlci5zbGljZSgw
KTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3JkZXIubGVuZ3RoOyBpIDwgbDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgaXRlcmF0b3Iuc2V0SW5kZXgob3JkZXJbaV0pOwotICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9maWx0ZXIoaXRlcmF0b3IuaXRlbSgpKSkKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIucHVzaChpdGVyYXRvci5pbmRleCgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX3VuZmlsdGVyZWRJdGVyYXRpb25PcmRl
ciA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcmV3aW5kOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IDA7Ci0gICAgfSwKLQotICAgIGhhc05leHQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiA8IHRoaXMu
X2l0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKLSAgICB9LAotCi0gICAgaXNFbXB0eTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2l0ZXJhdGlvbk9yZGVyKQotICAgICAgICAgICAg
cmV0dXJuICF0aGlzLl9pdGVyYXRpb25PcmRlci5sZW5ndGg7Ci0gICAgICAgIGlmICh0aGlzLl91
bmZpbHRlcmVkSXRlcmF0aW9uT3JkZXIgJiYgIXRoaXMuX2ZpbHRlcikKLSAgICAgICAgICAgIHJl
dHVybiAhdGhpcy5fdW5maWx0ZXJlZEl0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKLSAgICAgICAgdmFy
IGl0ZXJhdG9yID0gdGhpcy5faXRlcmF0b3I7Ci0gICAgICAgIGlmICghdGhpcy5fdW5maWx0ZXJl
ZEl0ZXJhdGlvbk9yZGVyICYmICF0aGlzLl9maWx0ZXIpIHsKLSAgICAgICAgICAgIGl0ZXJhdG9y
LnJld2luZCgpOwotICAgICAgICAgICAgcmV0dXJuICFpdGVyYXRvci5oYXNOZXh0KCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIXRoaXMuX3VuZmlsdGVyZWRJdGVyYXRpb25PcmRlcikgewotICAgICAg
ICAgICAgZm9yIChpdGVyYXRvci5yZXdpbmQoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOyBpdGVyYXRv
ci5uZXh0KCkpCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbHRlcihpdGVyYXRvci5pdGVt
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB2YXIgb3JkZXIgPSB0aGlzLl91bmZpbHRlcmVkSXRlcmF0aW9uT3JkZXIu
Y29uc3RydWN0b3IgPT09IEFycmF5ID8KLSAgICAgICAgICAgICAgICB0aGlzLl91bmZpbHRlcmVk
SXRlcmF0aW9uT3JkZXIgOiB0aGlzLl91bmZpbHRlcmVkSXRlcmF0aW9uT3JkZXIuc2xpY2UoMCk7
Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9yZGVyLmxlbmd0aDsgaSA8IGw7ICsr
aSkgewotICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnNldEluZGV4KG9yZGVyW2ldKTsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyKGl0ZXJhdG9yLml0ZW0oKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgaXRlbTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5faXRlcmF0b3Iuc2V0SW5kZXgodGhpcy5faXRlcmF0aW9uT3JkZXJbdGhpcy5f
cG9zaXRpb25dKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZXJhdG9yLml0ZW0oKTsKLSAgICB9
LAotCi0gICAgZ2V0IGxlbmd0aCgpCi0gICAgewotICAgICAgICB0aGlzLl9jcmVhdGVJdGVyYXRp
b25PcmRlcigpOwotICAgICAgICByZXR1cm4gdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoOwot
ICAgIH0sCi0KLSAgICBuZXh0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICArK3RoaXMuX3Bv
c2l0aW9uOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gYmVnaW4K
LSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kCi0gICAgICovCi0gICAgc2VyaWFsaXplSXRlbXNS
YW5nZTogZnVuY3Rpb24oYmVnaW4sIGVuZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZUl0
ZXJhdGlvbk9yZGVyKCk7Ci0gICAgICAgIGlmIChiZWdpbiA+IGVuZCkKLSAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiU3RhcnQgcG9zaXRpb24gPiBlbmQgcG9zaXRpb246ICIgKyBiZWdpbiAr
ICIgPiAiICsgZW5kKTsKLSAgICAgICAgaWYgKGVuZCA+PSB0aGlzLl9pdGVyYXRpb25PcmRlci5s
ZW5ndGgpCi0gICAgICAgICAgICBlbmQgPSB0aGlzLl9pdGVyYXRpb25PcmRlci5sZW5ndGg7Ci0g
ICAgICAgIGlmICh0aGlzLl9zb3J0ZWRQcmVmaXhMZW5ndGggPCBlbmQpIHsKLSAgICAgICAgICAg
IHRoaXMuc29ydCh0aGlzLl9jdXJyZW50Q29tcGFyYXRvciwgdGhpcy5fc29ydGVkUHJlZml4TGVu
Z3RoLCB0aGlzLl9pdGVyYXRpb25PcmRlci5sZW5ndGggLSAxLCBlbmQgLSB0aGlzLl9zb3J0ZWRQ
cmVmaXhMZW5ndGgpOwotICAgICAgICAgICAgdGhpcy5fc29ydGVkUHJlZml4TGVuZ3RoID0gZW5k
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBiZWdpbjsKLSAgICAgICAg
dmFyIHN0YXJ0UG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbjsKLSAgICAgICAgdmFyIGNvdW50ID0g
ZW5kIC0gYmVnaW47Ci0gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpOwotICAg
ICAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBjb3VudCAmJiB0aGlzLmhhc05leHQoKTsgKytpLCB0
aGlzLm5leHQoKSkKLSAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRoaXMuaXRlbSgpLnNlcmlhbGl6
ZSgpOwotICAgICAgICByZXN1bHQubGVuZ3RoID0gaTsKLSAgICAgICAgcmVzdWx0LnRvdGFsTGVu
Z3RoID0gdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoOwotCi0gICAgICAgIHJlc3VsdC5zdGFy
dFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICAgICAgcmVzdWx0LmVuZFBvc2l0aW9uID0g
dGhpcy5fcG9zaXRpb247Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIHNv
cnRBbGw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZUl0ZXJhdGlvbk9y
ZGVyKCk7Ci0gICAgICAgIGlmICh0aGlzLl9zb3J0ZWRQcmVmaXhMZW5ndGggPT09IHRoaXMuX2l0
ZXJhdGlvbk9yZGVyLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5z
b3J0KHRoaXMuX2N1cnJlbnRDb21wYXJhdG9yLCB0aGlzLl9zb3J0ZWRQcmVmaXhMZW5ndGgsIHRo
aXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aCAtIDEsIHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0
aCk7Ci0gICAgICAgIHRoaXMuX3NvcnRlZFByZWZpeExlbmd0aCA9IHRoaXMuX2l0ZXJhdGlvbk9y
ZGVyLmxlbmd0aDsKLSAgICB9LAotCi0gICAgc29ydEFuZFJld2luZDogZnVuY3Rpb24oY29tcGFy
YXRvcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRDb21wYXJhdG9yID0gY29tcGFyYXRv
cjsKLSAgICAgICAgdGhpcy5fc29ydGVkUHJlZml4TGVuZ3RoID0gMDsKLSAgICAgICAgdGhpcy5y
ZXdpbmQoKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9y
ZGVyZWRJdGVyYXRvci5wcm90b3R5cGUuY3JlYXRlQ29tcGFyYXRvciA9IGZ1bmN0aW9uKGZpZWxk
TmFtZXMpCi17Ci0gICAgcmV0dXJuIHtmaWVsZE5hbWUxOiBmaWVsZE5hbWVzWzBdLCBhc2NlbmRp
bmcxOiBmaWVsZE5hbWVzWzFdLCBmaWVsZE5hbWUyOiBmaWVsZE5hbWVzWzJdLCBhc2NlbmRpbmcy
OiBmaWVsZE5hbWVzWzNdfTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3J9Ci0gKi8K
LVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyID0gZnVuY3Rpb24oc25hcHNo
b3QsIGZpbHRlciwgZWRnZXNJdGVyKQotewotICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsK
LSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IuY2Fs
bCh0aGlzLCBlZGdlc0l0ZXIsIGZpbHRlcik7Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RFZGdlc1Byb3ZpZGVyLnByb3RvdHlwZSA9IHsKLSAgICBzb3J0OiBmdW5jdGlvbihjb21wYXJh
dG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGNvdW50KQotICAgIHsKLSAgICAgICAgdmFyIGZp
ZWxkTmFtZTEgPSBjb21wYXJhdG9yLmZpZWxkTmFtZTE7Ci0gICAgICAgIHZhciBmaWVsZE5hbWUy
ID0gY29tcGFyYXRvci5maWVsZE5hbWUyOwotICAgICAgICB2YXIgYXNjZW5kaW5nMSA9IGNvbXBh
cmF0b3IuYXNjZW5kaW5nMTsKLSAgICAgICAgdmFyIGFzY2VuZGluZzIgPSBjb21wYXJhdG9yLmFz
Y2VuZGluZzI7Ci0KLSAgICAgICAgdmFyIGVkZ2VBID0gdGhpcy5faXRlcmF0b3IuaXRlbSgpLmNs
b25lKCk7Ci0gICAgICAgIHZhciBlZGdlQiA9IGVkZ2VBLmNsb25lKCk7Ci0gICAgICAgIHZhciBu
b2RlQSA9IHRoaXMuc25hcHNob3QuY3JlYXRlTm9kZSgpOwotICAgICAgICB2YXIgbm9kZUIgPSB0
aGlzLnNuYXBzaG90LmNyZWF0ZU5vZGUoKTsKLQotICAgICAgICBmdW5jdGlvbiBjb21wYXJlRWRn
ZUZpZWxkTmFtZShhc2NlbmRpbmcsIGluZGV4QSwgaW5kZXhCKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBlZGdlQS5lZGdlSW5kZXggPSBpbmRleEE7Ci0gICAgICAgICAgICBlZGdlQi5lZGdlSW5k
ZXggPSBpbmRleEI7Ci0gICAgICAgICAgICBpZiAoZWRnZUIubmFtZSgpID09PSAiX19wcm90b19f
IikgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKGVkZ2VBLm5hbWUoKSA9PT0gIl9fcHJvdG9f
XyIpIHJldHVybiAxOwotICAgICAgICAgICAgdmFyIHJlc3VsdCA9Ci0gICAgICAgICAgICAgICAg
ZWRnZUEuaGFzU3RyaW5nTmFtZSgpID09PSBlZGdlQi5oYXNTdHJpbmdOYW1lKCkgPwotICAgICAg
ICAgICAgICAgIChlZGdlQS5uYW1lKCkgPCBlZGdlQi5uYW1lKCkgPyAtMSA6IChlZGdlQS5uYW1l
KCkgPiBlZGdlQi5uYW1lKCkgPyAxIDogMCkpIDoKLSAgICAgICAgICAgICAgICAoZWRnZUEuaGFz
U3RyaW5nTmFtZSgpID8gLTEgOiAxKTsKLSAgICAgICAgICAgIHJldHVybiBhc2NlbmRpbmcgPyBy
ZXN1bHQgOiAtcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29tcGFyZU5v
ZGVGaWVsZChmaWVsZE5hbWUsIGFzY2VuZGluZywgaW5kZXhBLCBpbmRleEIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGVkZ2VBLmVkZ2VJbmRleCA9IGluZGV4QTsKLSAgICAgICAgICAgIG5vZGVB
Lm5vZGVJbmRleCA9IGVkZ2VBLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgdmFyIHZhbHVlQSA9
IG5vZGVBW2ZpZWxkTmFtZV0oKTsKLQotICAgICAgICAgICAgZWRnZUIuZWRnZUluZGV4ID0gaW5k
ZXhCOwotICAgICAgICAgICAgbm9kZUIubm9kZUluZGV4ID0gZWRnZUIubm9kZUluZGV4KCk7Ci0g
ICAgICAgICAgICB2YXIgdmFsdWVCID0gbm9kZUJbZmllbGROYW1lXSgpOwotCi0gICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gdmFsdWVBIDwgdmFsdWVCID8gLTEgOiAodmFsdWVBID4gdmFsdWVCID8g
MSA6IDApOwotICAgICAgICAgICAgcmV0dXJuIGFzY2VuZGluZyA/IHJlc3VsdCA6IC1yZXN1bHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjb21wYXJlRWRnZUFuZE5vZGUoaW5kZXhB
LCBpbmRleEIpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJlRWRnZUZpZWxkTmFt
ZShhc2NlbmRpbmcxLCBpbmRleEEsIGluZGV4Qik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09
PSAwKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmVOb2RlRmllbGQoZmllbGROYW1l
MiwgYXNjZW5kaW5nMiwgaW5kZXhBLCBpbmRleEIpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVOb2RlQW5kRWRnZShpbmRl
eEEsIGluZGV4QikgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVOb2RlRmllbGQo
ZmllbGROYW1lMSwgYXNjZW5kaW5nMSwgaW5kZXhBLCBpbmRleEIpOwotICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PT0gMCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlRWRnZUZpZWxk
TmFtZShhc2NlbmRpbmcyLCBpbmRleEEsIGluZGV4Qik7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29tcGFyZU5vZGVBbmROb2RlKGlu
ZGV4QSwgaW5kZXhCKSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gY29tcGFyZU5vZGVGaWVs
ZChmaWVsZE5hbWUxLCBhc2NlbmRpbmcxLCBpbmRleEEsIGluZGV4Qik7Ci0gICAgICAgICAgICBp
ZiAocmVzdWx0ID09PSAwKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmVOb2RlRmll
bGQoZmllbGROYW1lMiwgYXNjZW5kaW5nMiwgaW5kZXhBLCBpbmRleEIpOwotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmaWVsZE5hbWUxID09PSAi
IWVkZ2VOYW1lIikKLSAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGlvbk9yZGVyLnNvcnRSYW5nZShj
b21wYXJlRWRnZUFuZE5vZGUsIGxlZnRCb3VuZCwgcmlnaHRCb3VuZCwgY291bnQpOwotICAgICAg
ICBlbHNlIGlmIChmaWVsZE5hbWUyID09PSAiIWVkZ2VOYW1lIikKLSAgICAgICAgICAgIHRoaXMu
X2l0ZXJhdGlvbk9yZGVyLnNvcnRSYW5nZShjb21wYXJlTm9kZUFuZEVkZ2UsIGxlZnRCb3VuZCwg
cmlnaHRCb3VuZCwgY291bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9pdGVy
YXRpb25PcmRlci5zb3J0UmFuZ2UoY29tcGFyZU5vZGVBbmROb2RlLCBsZWZ0Qm91bmQsIHJpZ2h0
Qm91bmQsIGNvdW50KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBlCi19Ci0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Rmls
dGVyZWRPcmRlcmVkSXRlcmF0b3J9Ci0gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+PX0gbm9kZUlu
ZGV4ZXMKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIgPSBmdW5j
dGlvbihzbmFwc2hvdCwgZmlsdGVyLCBub2RlSW5kZXhlcykKLXsKLSAgICB0aGlzLnNuYXBzaG90
ID0gc25hcHNob3Q7Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJl
ZEl0ZXJhdG9yLmNhbGwodGhpcywgc25hcHNob3QuX2FsbE5vZGVzKCksIGZpbHRlciwgbm9kZUlu
ZGV4ZXMpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90
b3R5cGUgPSB7Ci0gICAgbm9kZVBvc2l0aW9uOiBmdW5jdGlvbihzbmFwc2hvdE9iamVjdElkKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fY3JlYXRlSXRlcmF0aW9uT3JkZXIoKTsKLSAgICAgICAgaWYg
KHRoaXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB0aGlzLnNv
cnRBbGwoKTsKLQotICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc25hcHNob3QuY3JlYXRlTm9kZSgp
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9IHRoaXMuX2l0ZXJhdGlvbk9y
ZGVyW2ldOwotICAgICAgICAgICAgaWYgKG5vZGUuaWQoKSA9PT0gc25hcHNob3RPYmplY3RJZCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7
Ci0gICAgfSwKLQotICAgIHNvcnQ6IGZ1bmN0aW9uKGNvbXBhcmF0b3IsIGxlZnRCb3VuZCwgcmln
aHRCb3VuZCwgY291bnQpCi0gICAgewotICAgICAgICB2YXIgZmllbGROYW1lMSA9IGNvbXBhcmF0
b3IuZmllbGROYW1lMTsKLSAgICAgICAgdmFyIGZpZWxkTmFtZTIgPSBjb21wYXJhdG9yLmZpZWxk
TmFtZTI7Ci0gICAgICAgIHZhciBhc2NlbmRpbmcxID0gY29tcGFyYXRvci5hc2NlbmRpbmcxOwot
ICAgICAgICB2YXIgYXNjZW5kaW5nMiA9IGNvbXBhcmF0b3IuYXNjZW5kaW5nMjsKLQotICAgICAg
ICB2YXIgbm9kZUEgPSB0aGlzLnNuYXBzaG90LmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgdmFyIG5v
ZGVCID0gdGhpcy5zbmFwc2hvdC5jcmVhdGVOb2RlKCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gc29y
dEJ5Tm9kZUZpZWxkKGZpZWxkTmFtZSwgYXNjZW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB2YXIgdmFsdWVPckZ1bmN0aW9uQSA9IG5vZGVBW2ZpZWxkTmFtZV07Ci0gICAgICAgICAgICB2
YXIgdmFsdWVBID0gdHlwZW9mIHZhbHVlT3JGdW5jdGlvbkEgIT09ICJmdW5jdGlvbiIgPyB2YWx1
ZU9yRnVuY3Rpb25BIDogdmFsdWVPckZ1bmN0aW9uQS5jYWxsKG5vZGVBKTsKLSAgICAgICAgICAg
IHZhciB2YWx1ZU9yRnVuY3Rpb25CID0gbm9kZUJbZmllbGROYW1lXTsKLSAgICAgICAgICAgIHZh
ciB2YWx1ZUIgPSB0eXBlb2YgdmFsdWVPckZ1bmN0aW9uQiAhPT0gImZ1bmN0aW9uIiA/IHZhbHVl
T3JGdW5jdGlvbkIgOiB2YWx1ZU9yRnVuY3Rpb25CLmNhbGwobm9kZUIpOwotICAgICAgICAgICAg
dmFyIHJlc3VsdCA9IHZhbHVlQSA8IHZhbHVlQiA/IC0xIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEg
OiAwKTsKLSAgICAgICAgICAgIHJldHVybiBhc2NlbmRpbmcgPyByZXN1bHQgOiAtcmVzdWx0Owot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc29ydEJ5Q29tcGFyYXRvcihpbmRleEEsIGlu
ZGV4QikgewotICAgICAgICAgICAgbm9kZUEubm9kZUluZGV4ID0gaW5kZXhBOwotICAgICAgICAg
ICAgbm9kZUIubm9kZUluZGV4ID0gaW5kZXhCOwotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHNv
cnRCeU5vZGVGaWVsZChmaWVsZE5hbWUxLCBhc2NlbmRpbmcxKTsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT09IDApCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc29ydEJ5Tm9kZUZpZWxkKGZp
ZWxkTmFtZTIsIGFzY2VuZGluZzIpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuX2l0ZXJhdGlvbk9yZGVyLnNvcnRSYW5nZShzb3J0QnlDb21w
YXJhdG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGNvdW50KTsKLSAgICB9LAotCi0gICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3Iu
cHJvdG90eXBlCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJlOTViN2EuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4
MDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9y
LkRhdGFHcmlkfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3Jp
ZCA9IGZ1bmN0aW9uKGNvbHVtbnMpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNhbGwo
dGhpcywgY29sdW1ucyk7Ci0KLSAgICAvKioKLSAgICAgKiBAdHlwZSB7bnVtYmVyfQotICAgICAq
LwotICAgIHRoaXMuX3JlY3Vyc2l2ZVNvcnRpbmdEZXB0aCA9IDA7Ci0gICAgLyoqCi0gICAgICog
QHR5cGUge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZX0KLSAgICAgKi8KLSAgICB0
aGlzLl9oaWdobGlnaHRlZE5vZGUgPSBudWxsOwotICAgIC8qKgotICAgICAqIEB0eXBlIHtib29s
ZWFufQotICAgICAqLwotICAgIHRoaXMuX3BvcHVsYXRlZEFuZFNvcnRlZCA9IGZhbHNlOwotICAg
IHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigic29ydGluZyBjb21wbGV0ZSIsIHRoaXMuX3NvcnRpbmdD
b21wbGV0ZSwgdGhpcyk7Ci0gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
YXRhR3JpZC5FdmVudHMuU29ydGluZ0NoYW5nZWQsIHRoaXMuc29ydGluZ0NoYW5nZWQsIHRoaXMp
OwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5FdmVudHMg
PSB7Ci0gICAgQ29udGVudFNob3duOiAiQ29udGVudFNob3duIgotfQotCi1XZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGRlZmF1bHRQb3B1bGF0ZUNvdW50OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gMTAwOwotICAgIH0sCi0KLSAgICBkaXNw
b3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnRvcExl
dmVsTm9kZXMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7
IGkgPCBsOyArK2kpCi0gICAgICAgICAgICBjaGlsZHJlbltpXS5kaXNwb3NlKCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqLwotICAgIHdhc1Nob3duOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcG9wdWxhdGVkQW5kU29ydGVkKQotICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQuRXZlbnRzLkNvbnRlbnRTaG93biwgdGhpcyk7Ci0gICAg
fSwKLQotICAgIF9zb3J0aW5nQ29tcGxldGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigic29ydGluZyBjb21wbGV0ZSIsIHRoaXMuX3NvcnRpbmdD
b21wbGV0ZSwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3BvcHVsYXRlZEFuZFNvcnRlZCA9IHRydWU7
Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RTb3J0YWJsZURhdGFHcmlkLkV2ZW50cy5Db250ZW50U2hvd24sIHRoaXMpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICB3aWxsSGlkZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXJDdXJyZW50SGlnaGxpZ2h0KCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0
TWVudX0gY29udGV4dE1lbnUKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwot
ICAgIHBvcHVsYXRlQ29udGV4dE1lbnU6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwsIGNvbnRleHRN
ZW51LCBldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB0ZCA9IGV2ZW50LnRhcmdldC5lbmNsb3Np
bmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJ0ZCIpOwotICAgICAgICBpZiAoIXRkKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgbm9kZSA9IHRkLmhlYXBTbmFwc2hvdE5vZGU7Ci0g
ICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEluc3Rh
bmNlTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9iamVj
dE5vZGUpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVhbEluRG9taW5hdG9yc1ZpZXcoKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb2ZpbGVzUGFuZWwuc2hvd09iamVjdChu
b2RlLnNuYXBzaG90Tm9kZUlkLCAiRG9taW5hdG9ycyIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5z
cGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJSZXZlYWwgaW4gRG9taW5hdG9ycyB2
aWV3IiA6ICJSZXZlYWwgaW4gRG9taW5hdG9ycyBWaWV3IiksIHJldmVhbEluRG9taW5hdG9yc1Zp
ZXcuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REb21pbmF0b3JPYmplY3ROb2RlKSB7Ci0gICAgICAgICAgICBm
dW5jdGlvbiByZXZlYWxJblN1bW1hcnlWaWV3KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBwcm9maWxlc1BhbmVsLnNob3dPYmplY3Qobm9kZS5zbmFwc2hvdE5vZGVJZCwgIlN1bW1h
cnkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVz
KCkgPyAiUmV2ZWFsIGluIFN1bW1hcnkgdmlldyIgOiAiUmV2ZWFsIGluIFN1bW1hcnkgVmlldyIp
LCByZXZlYWxJblN1bW1hcnlWaWV3LmJpbmQodGhpcykpOwotICAgICAgICB9Ci0gICAgfSwKLQot
ICAgIHJlc2V0U29ydGluZ0NhY2hlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxldGUg
dGhpcy5fbGFzdFNvcnRDb2x1bW5JZGVudGlmaWVyOwotICAgICAgICBkZWxldGUgdGhpcy5fbGFz
dFNvcnRBc2NlbmRpbmc7Ci0gICAgfSwKLQotICAgIHRvcExldmVsTm9kZXM6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJvb3ROb2RlKCkuY2hpbGRyZW47Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7SGVhcFByb2ZpbGVyQWdlbnQuSGVhcFNuYXBzaG90
T2JqZWN0SWR9IGhlYXBTbmFwc2hvdE9iamVjdElkCi0gICAgICovCi0gICAgaGlnaGxpZ2h0T2Jq
ZWN0QnlIZWFwU25hcHNob3RJZDogZnVuY3Rpb24oaGVhcFNuYXBzaG90T2JqZWN0SWQpCi0gICAg
ewotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHcmlkTm9kZX0gbm9kZQotICAgICAqLwotICAgIGhpZ2hsaWdodE5vZGU6IGZ1bmN0aW9u
KG5vZGUpCi0gICAgewotICAgICAgICB2YXIgcHJldk5vZGUgPSB0aGlzLl9oaWdobGlnaHRlZE5v
ZGU7Ci0gICAgICAgIHRoaXMuX2NsZWFyQ3VycmVudEhpZ2hsaWdodCgpOwotICAgICAgICB0aGlz
Ll9oaWdobGlnaHRlZE5vZGUgPSBub2RlOwotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZE5vZGUu
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWdobGlnaHRlZC1yb3ciKTsKLSAgICAgICAgLy8gSWYg
aGlnaGxpZ2h0ZWQgbm9kZSBoYXNuJ3QgY2hhbmdlZCByZWluc2VydCBpdCB0byBtYWtlIHRoZSBo
aWdobGlnaHQgYW5pbWF0aW9uIHJlc3RhcnQuCi0gICAgICAgIGlmIChub2RlID09PSBwcmV2Tm9k
ZSkgewotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7Ci0gICAgICAgICAg
ICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgICAgICAgICAgdmFyIG5l
eHRTaWJsaW5nID0gZWxlbWVudC5uZXh0U2libGluZzsKLSAgICAgICAgICAgIHBhcmVudC5yZW1v
dmVDaGlsZChlbGVtZW50KTsKLSAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVu
dCwgbmV4dFNpYmxpbmcpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIG5vZGVXYXNEZXRhY2hl
ZDogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRlZE5v
ZGUgPT09IG5vZGUpCi0gICAgICAgICAgICB0aGlzLl9jbGVhckN1cnJlbnRIaWdobGlnaHQoKTsK
LSAgICB9LAotCi0gICAgX2NsZWFyQ3VycmVudEhpZ2hsaWdodDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9oaWdobGlnaHRlZE5vZGUpCi0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWROb2RlLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygi
aGlnaGxpZ2h0ZWQtcm93Iik7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkTm9kZSA9IG51bGw7
Ci0gICAgfSwKLQotICAgIGNoYW5nZU5hbWVGaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlcikKLSAgICB7
Ci0gICAgICAgIGZpbHRlciA9IGZpbHRlci50b0xvd2VyQ2FzZSgpOwotICAgICAgICB2YXIgY2hp
bGRyZW4gPSB0aGlzLnRvcExldmVsTm9kZXMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwg
PSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0g
Y2hpbGRyZW5baV07Ci0gICAgICAgICAgICBpZiAobm9kZS5kZXB0aCA9PT0gMCkKLSAgICAgICAg
ICAgICAgICBub2RlLnJldmVhbGVkID0gbm9kZS5fbmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yo
ZmlsdGVyKSAhPT0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlTm9k
ZXMoKTsKLSAgICB9LAotCi0gICAgc29ydGluZ0NoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0gdGhpcy5pc1NvcnRPcmRlckFzY2VuZGluZygpOwot
ICAgICAgICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLnNvcnRDb2x1bW5JZGVudGlm
aWVyKCk7Ci0gICAgICAgIGlmICh0aGlzLl9sYXN0U29ydENvbHVtbklkZW50aWZpZXIgPT09IHNv
cnRDb2x1bW5JZGVudGlmaWVyICYmIHRoaXMuX2xhc3RTb3J0QXNjZW5kaW5nID09PSBzb3J0QXNj
ZW5kaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9sYXN0U29ydENvbHVt
bklkZW50aWZpZXIgPSBzb3J0Q29sdW1uSWRlbnRpZmllcjsKLSAgICAgICAgdGhpcy5fbGFzdFNv
cnRBc2NlbmRpbmcgPSBzb3J0QXNjZW5kaW5nOwotICAgICAgICB2YXIgc29ydEZpZWxkcyA9IHRo
aXMuX3NvcnRGaWVsZHMoc29ydENvbHVtbklkZW50aWZpZXIsIHNvcnRBc2NlbmRpbmcpOwotCi0g
ICAgICAgIGZ1bmN0aW9uIFNvcnRCeVR3b0ZpZWxkcyhub2RlQSwgbm9kZUIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciBmaWVsZDEgPSBub2RlQVtzb3J0RmllbGRzWzBdXTsKLSAgICAgICAg
ICAgIHZhciBmaWVsZDIgPSBub2RlQltzb3J0RmllbGRzWzBdXTsKLSAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBmaWVsZDEgPCBmaWVsZDIgPyAtMSA6IChmaWVsZDEgPiBmaWVsZDIgPyAxIDogMCk7
Ci0gICAgICAgICAgICBpZiAoIXNvcnRGaWVsZHNbMV0pCi0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gLXJlc3VsdDsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IDApCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIGZpZWxkMSA9IG5vZGVBW3NvcnRGaWVsZHNb
Ml1dOwotICAgICAgICAgICAgZmllbGQyID0gbm9kZUJbc29ydEZpZWxkc1syXV07Ci0gICAgICAg
ICAgICByZXN1bHQgPSBmaWVsZDEgPCBmaWVsZDIgPyAtMSA6IChmaWVsZDEgPiBmaWVsZDIgPyAx
IDogMCk7Ci0gICAgICAgICAgICBpZiAoIXNvcnRGaWVsZHNbM10pCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gLXJlc3VsdDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICAgICAgdGhpcy5fcGVyZm9ybVNvcnRpbmcoU29ydEJ5VHdvRmllbGRzKTsKLSAgICB9LAot
Ci0gICAgX3BlcmZvcm1Tb3J0aW5nOiBmdW5jdGlvbihzb3J0RnVuY3Rpb24pCi0gICAgewotICAg
ICAgICB0aGlzLnJlY3Vyc2l2ZVNvcnRpbmdFbnRlcigpOwotICAgICAgICB2YXIgY2hpbGRyZW4g
PSB0aGlzLl90b3BMZXZlbE5vZGVzOwotICAgICAgICB0aGlzLnJvb3ROb2RlKCkucmVtb3ZlQ2hp
bGRyZW4oKTsKLSAgICAgICAgY2hpbGRyZW4uc29ydChzb3J0RnVuY3Rpb24pOwotICAgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAg
ICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07Ci0gICAgICAgICAgICB0aGlzLmFwcGVuZENo
aWxkQWZ0ZXJTb3J0aW5nKGNoaWxkKTsKLSAgICAgICAgICAgIGlmIChjaGlsZC5leHBhbmRlZCkK
LSAgICAgICAgICAgICAgICBjaGlsZC5zb3J0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy51
cGRhdGVWaXNpYmxlTm9kZXMoKTsKLSAgICAgICAgdGhpcy5yZWN1cnNpdmVTb3J0aW5nTGVhdmUo
KTsKLSAgICB9LAotCi0gICAgYXBwZW5kQ2hpbGRBZnRlclNvcnRpbmc6IGZ1bmN0aW9uKGNoaWxk
KQotICAgIHsKLSAgICAgICAgdmFyIHJldmVhbGVkID0gY2hpbGQucmV2ZWFsZWQ7Ci0gICAgICAg
IHRoaXMucm9vdE5vZGUoKS5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgICAgIGNoaWxkLnJldmVh
bGVkID0gcmV2ZWFsZWQ7Ci0gICAgfSwKLQotICAgIHVwZGF0ZVZpc2libGVOb2RlczogZnVuY3Rp
b24oKQotICAgIHsKLSAgICB9LAotCi0gICAgcmVjdXJzaXZlU29ydGluZ0VudGVyOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICArK3RoaXMuX3JlY3Vyc2l2ZVNvcnRpbmdEZXB0aDsKLSAgICB9
LAotCi0gICAgcmVjdXJzaXZlU29ydGluZ0xlYXZlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAoIXRoaXMuX3JlY3Vyc2l2ZVNvcnRpbmdEZXB0aCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKCEtLXRoaXMuX3JlY3Vyc2l2ZVNvcnRpbmdEZXB0aCkKLSAgICAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzb3J0aW5nIGNvbXBsZXRlIik7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZQotfQot
Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90U29ydGFibGVEYXRhR3JpZH0KLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXdwb3J0RGF0YUdyaWQgPSBmdW5jdGlvbihjb2x1bW5zKQotewotICAgIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7Ci0gICAg
dGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fb25T
Y3JvbGwuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgdGhpcy5fdG9wTGV2ZWxOb2RlcyA9IFtdOwot
ICAgIHRoaXMuX3RvcFBhZGRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhZGRp
bmdOb2RlKCk7Ci0gICAgdGhpcy5fYm90dG9tUGFkZGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UGFkZGluZ05vZGUoKTsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7V2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlfQotICAgICAqLwotICAgIHRoaXMuX25vZGVUb0hpZ2hs
aWdodEFmdGVyU2Nyb2xsID0gbnVsbDsKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXdwb3J0RGF0YUdyaWQucHJvdG90eXBlID0gewotICAgIHRvcExldmVsTm9kZXM6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90b3BMZXZlbE5vZGVzOwotICAgIH0sCi0K
LSAgICBhcHBlbmRDaGlsZEFmdGVyU29ydGluZzogZnVuY3Rpb24oY2hpbGQpCi0gICAgewotICAg
ICAgICAvLyBEbyBub3RoaW5nIGhlcmUsIGl0IHdpbGwgYmUgYWRkZWQgaW4gdXBkYXRlVmlzaWJs
ZU5vZGVzLgotICAgIH0sCi0KLSAgICB1cGRhdGVWaXNpYmxlTm9kZXM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5zY3JvbGxU
b3A7Ci0KLSAgICAgICAgdmFyIHZpZXdQb3J0SGVpZ2h0ID0gdGhpcy5zY3JvbGxDb250YWluZXIu
b2Zmc2V0SGVpZ2h0OwotCi0gICAgICAgIHRoaXMuX3JlbW92ZVBhZGRpbmdSb3dzKCk7Ci0KLSAg
ICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fdG9wTGV2ZWxOb2RlczsKLQotICAgICAgICB2YXIg
aSA9IDA7Ci0gICAgICAgIHZhciB0b3BQYWRkaW5nID0gMDsKLSAgICAgICAgd2hpbGUgKGkgPCBj
aGlsZHJlbi5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5yZXZlYWxlZCkg
ewotICAgICAgICAgICAgICAgIHZhciBuZXdUb3AgPSB0b3BQYWRkaW5nICsgY2hpbGRyZW5baV0u
bm9kZUhlaWdodCgpOwotICAgICAgICAgICAgICAgIGlmIChuZXdUb3AgPiBzY3JvbGxUb3ApCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHRvcFBhZGRpbmcgPSBu
ZXdUb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLnJvb3ROb2RlKCkucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgLy8gVGhlIGhl
aWdodCBvZiB0aGUgdmlldyBwb3J0ICsgaW52aXNpYmxlIHRvcCBwYXJ0LgotICAgICAgICB2YXIg
aGVpZ2h0VG9GaWxsID0gdmlld1BvcnRIZWlnaHQgKyAoc2Nyb2xsVG9wIC0gdG9wUGFkZGluZyk7
Ci0gICAgICAgIHZhciBmaWxsZWRIZWlnaHQgPSAwOwotICAgICAgICB3aGlsZSAoaSA8IGNoaWxk
cmVuLmxlbmd0aCAmJiBmaWxsZWRIZWlnaHQgPCBoZWlnaHRUb0ZpbGwpIHsKLSAgICAgICAgICAg
IGlmIChjaGlsZHJlbltpXS5yZXZlYWxlZCkgewotICAgICAgICAgICAgICAgIHRoaXMucm9vdE5v
ZGUoKS5hcHBlbmRDaGlsZChjaGlsZHJlbltpXSk7Ci0gICAgICAgICAgICAgICAgZmlsbGVkSGVp
Z2h0ICs9IGNoaWxkcmVuW2ldLm5vZGVIZWlnaHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICsraTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBib3R0b21QYWRkaW5nID0gMDsKLSAg
ICAgICAgd2hpbGUgKGkgPCBjaGlsZHJlbi5sZW5ndGgpIHsKLSAgICAgICAgICAgIGJvdHRvbVBh
ZGRpbmcgKz0gY2hpbGRyZW5baV0ubm9kZUhlaWdodCgpOwotICAgICAgICAgICAgKytpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy5fYWRkUGFkZGluZ1Jvd3ModG9wUGFkZGluZywgYm90dG9t
UGFkZGluZyk7Ci0gICAgfSwKLQotICAgIGFwcGVuZFRvcExldmVsTm9kZTogZnVuY3Rpb24obm9k
ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RvcExldmVsTm9kZXMucHVzaChub2RlKTsKLSAgICB9
LAotCi0gICAgcmVtb3ZlVG9wTGV2ZWxOb2RlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5yb290Tm9kZSgpLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX3RvcExldmVs
Tm9kZXMgPSBbXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGV9IG5vZGUKLSAgICAgKi8K
LSAgICBoaWdobGlnaHROb2RlOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX2lzU2Nyb2xsZWRJbnRvVmlldyhub2RlLmVsZW1lbnQpKQotICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlLmhpZ2hsaWdodE5v
ZGUuY2FsbCh0aGlzLCBub2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlLmVs
ZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKLSAgICAgICAgICAgIHRoaXMuX25v
ZGVUb0hpZ2hsaWdodEFmdGVyU2Nyb2xsID0gbm9kZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfaXNTY3JvbGxlZEludG9WaWV3OiBmdW5jdGlvbihlbGVtZW50KQotICAgIHsKLSAgICAgICAg
dmFyIHZpZXdwb3J0VG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wOwotICAgICAg
ICB2YXIgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHRoaXMuc2Nyb2xsQ29udGFpbmVy
LmNsaWVudEhlaWdodDsKLSAgICAgICAgdmFyIGVsZW1Ub3AgPSBlbGVtZW50Lm9mZnNldFRvcAot
ICAgICAgICB2YXIgZWxlbUJvdHRvbSA9IGVsZW1Ub3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodDsK
LSAgICAgICAgcmV0dXJuIGVsZW1Cb3R0b20gPD0gdmlld3BvcnRCb3R0b20gJiYgZWxlbVRvcCA+
PSB2aWV3cG9ydFRvcDsKLSAgICB9LAotCi0gICAgX2FkZFBhZGRpbmdSb3dzOiBmdW5jdGlvbih0
b3AsIGJvdHRvbSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl90b3BQYWRkaW5nLmVsZW1lbnQu
cGFyZW50Tm9kZSAhPT0gdGhpcy5kYXRhVGFibGVCb2R5KQotICAgICAgICAgICAgdGhpcy5kYXRh
VGFibGVCb2R5Lmluc2VydEJlZm9yZSh0aGlzLl90b3BQYWRkaW5nLmVsZW1lbnQsIHRoaXMuZGF0
YVRhYmxlQm9keS5maXJzdENoaWxkKTsKLSAgICAgICAgaWYgKHRoaXMuX2JvdHRvbVBhZGRpbmcu
ZWxlbWVudC5wYXJlbnROb2RlICE9PSB0aGlzLmRhdGFUYWJsZUJvZHkpCi0gICAgICAgICAgICB0
aGlzLmRhdGFUYWJsZUJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMuX2JvdHRvbVBhZGRpbmcuZWxlbWVu
dCwgdGhpcy5kYXRhVGFibGVCb2R5Lmxhc3RDaGlsZCk7Ci0gICAgICAgIHRoaXMuX3RvcFBhZGRp
bmcuc2V0SGVpZ2h0KHRvcCk7Ci0gICAgICAgIHRoaXMuX2JvdHRvbVBhZGRpbmcuc2V0SGVpZ2h0
KGJvdHRvbSk7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVQYWRkaW5nUm93czogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fYm90dG9tUGFkZGluZy5yZW1vdmVGcm9tVGFibGUoKTsKLSAg
ICAgICAgdGhpcy5fdG9wUGFkZGluZy5yZW1vdmVGcm9tVGFibGUoKTsKLSAgICB9LAotCi0gICAg
b25SZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5vblJlc2l6ZS5jYWxsKHRoaXMpOwotICAg
ICAgICB0aGlzLnVwZGF0ZVZpc2libGVOb2RlcygpOwotICAgIH0sCi0KLSAgICBfb25TY3JvbGw6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlTm9kZXMo
KTsKLQotICAgICAgICBpZiAodGhpcy5fbm9kZVRvSGlnaGxpZ2h0QWZ0ZXJTY3JvbGwpIHsKLSAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3Rv
dHlwZS5oaWdobGlnaHROb2RlLmNhbGwodGhpcywgdGhpcy5fbm9kZVRvSGlnaGxpZ2h0QWZ0ZXJT
Y3JvbGwpOwotICAgICAgICAgICAgdGhpcy5fbm9kZVRvSGlnaGxpZ2h0QWZ0ZXJTY3JvbGwgPSBu
dWxsOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQYWRkaW5nTm9kZSA9IGZ1bmN0
aW9uKCkKLXsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIp
OwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJyZXZlYWxlZCIpOwotfQotCi1XZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UGFkZGluZ05vZGUucHJvdG90eXBlID0gewotICAgc2V0SGVp
Z2h0OiBmdW5jdGlvbihoZWlnaHQpCi0gICB7Ci0gICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhl
aWdodCA9IGhlaWdodCArICJweCI7Ci0gICB9LAotICAgcmVtb3ZlRnJvbVRhYmxlOiBmdW5jdGlv
bigpCi0gICB7Ci0gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZTsK
LSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlz
LmVsZW1lbnQpOwotICAgfQotfQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWR9Ci0gKiBAcGFyYW0g
e0FycmF5LjwhV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkNvbHVtbkRlc2NyaXB0b3I+PX0gY29sdW1u
cwotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29udGFpbm1lbnREYXRhR3JpZCA9IGZ1
bmN0aW9uKGNvbHVtbnMpCi17Ci0gICAgY29sdW1ucyA9IGNvbHVtbnMgfHwgWwotICAgICAgICB7
aWQ6ICJvYmplY3QiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPYmplY3QiKSwgZGlz
Y2xvc3VyZTogdHJ1ZSwgc29ydGFibGU6IHRydWV9LAotICAgICAgICB7aWQ6ICJzaGFsbG93U2l6
ZSIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNoYWxsb3cgU2l6ZSIpLCB3aWR0aDog
IjEyMHB4Iiwgc29ydGFibGU6IHRydWV9LAotICAgICAgICB7aWQ6ICJyZXRhaW5lZFNpemUiLCB0
aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXRhaW5lZCBTaXplIiksIHdpZHRoOiAiMTIw
cHgiLCBzb3J0YWJsZTogdHJ1ZSwgc29ydDogV2ViSW5zcGVjdG9yLkRhdGFHcmlkLk9yZGVyLkRl
c2NlbmRpbmd9Ci0gICAgXTsKLSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVE
YXRhR3JpZC5jYWxsKHRoaXMsIGNvbHVtbnMpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Q29udGFpbm1lbnREYXRhR3JpZC5wcm90b3R5cGUgPSB7Ci0gICAgc2V0RGF0YVNvdXJjZTog
ZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc25hcHNo
b3QgPSBzbmFwc2hvdDsKLSAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE5vZGUoc25hcHNob3QsIG5vZGVJbmRleCB8fCBzbmFwc2hvdC5yb290Tm9kZUluZGV4
KTsKLSAgICAgICAgdmFyIGZha2VFZGdlID0geyBub2RlOiBub2RlIH07Ci0gICAgICAgIHRoaXMu
c2V0Um9vdE5vZGUobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2RlKHRoaXMs
IGZhbHNlLCBmYWtlRWRnZSwgbnVsbCkpOwotICAgICAgICB0aGlzLnJvb3ROb2RlKCkuc29ydCgp
OwotICAgIH0sCi0KLSAgICBzb3J0aW5nQ2hhbmdlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdGhpcy5yb290Tm9kZSgpLnNvcnQoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90b3R5cGUKLX0KLQotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RDb250YWlubWVudERhdGFHcmlkfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0
YWlubWVudERhdGFHcmlkID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuc2hvd1JldGFpbmluZ0Vk
Z2VzID0gdHJ1ZTsKLSAgICB2YXIgY29sdW1ucyA9IFsKLSAgICAgICAge2lkOiAib2JqZWN0Iiwg
dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiT2JqZWN0IiksIGRpc2Nsb3N1cmU6IHRydWUs
IHNvcnRhYmxlOiB0cnVlfSwKLSAgICAgICAge2lkOiAic2hhbGxvd1NpemUiLCB0aXRsZTogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJTaGFsbG93IFNpemUiKSwgd2lkdGg6ICIxMjBweCIsIHNvcnRh
YmxlOiB0cnVlfSwKLSAgICAgICAge2lkOiAicmV0YWluZWRTaXplIiwgdGl0bGU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiUmV0YWluZWQgU2l6ZSIpLCB3aWR0aDogIjEyMHB4Iiwgc29ydGFibGU6
IHRydWV9LAotICAgICAgICB7aWQ6ICJkaXN0YW5jZSIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkRpc3RhbmNlIiksIHdpZHRoOiAiODBweCIsIHNvcnRhYmxlOiB0cnVlLCBzb3J0OiBX
ZWJJbnNwZWN0b3IuRGF0YUdyaWQuT3JkZXIuQXNjZW5kaW5nfQotICAgIF07Ci0gICAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQuY2FsbCh0aGlzLCBjb2x1bW5z
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1lbnREYXRhR3JpZC5FdmVu
dHMgPSB7Ci0gICAgRXhwYW5kUmV0YWluZXJzQ29tcGxldGU6ICJFeHBhbmRSZXRhaW5lcnNDb21w
bGV0ZSIKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1lbnREYXRhR3JpZC5w
cm90b3R5cGUgPSB7Ci0gICAgX3NvcnRGaWVsZHM6IGZ1bmN0aW9uKHNvcnRDb2x1bW4sIHNvcnRB
c2NlbmRpbmcpCi0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgb2JqZWN0OiBb
Il9uYW1lIiwgc29ydEFzY2VuZGluZywgIl9jb3VudCIsIGZhbHNlXSwKLSAgICAgICAgICAgIGNv
dW50OiBbIl9jb3VudCIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAg
ICAgc2hhbGxvd1NpemU6IFsiX3NoYWxsb3dTaXplIiwgc29ydEFzY2VuZGluZywgIl9uYW1lIiwg
dHJ1ZV0sCi0gICAgICAgICAgICByZXRhaW5lZFNpemU6IFsiX3JldGFpbmVkU2l6ZSIsIHNvcnRB
c2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAgICAgZGlzdGFuY2U6IFsiX2Rpc3Rh
bmNlIiwgc29ydEFzY2VuZGluZywgIl9uYW1lIiwgdHJ1ZV0KLSAgICAgICAgfVtzb3J0Q29sdW1u
XTsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
cm9vdE5vZGUoKS5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLnJlc2V0U29ydGluZ0Nh
Y2hlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RQcm94eX0gc25hcHNob3QKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbm9kZUlu
ZGV4Ci0gICAgICovCi0gICAgc2V0RGF0YVNvdXJjZTogZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJ
bmRleCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVu
dERhdGFHcmlkLnByb3RvdHlwZS5zZXREYXRhU291cmNlLmNhbGwodGhpcywgc25hcHNob3QsIG5v
ZGVJbmRleCk7Ci0KLSAgICAgICAgdmFyIGRhdGFHcmlkID0gdGhpczsKLSAgICAgICAgdmFyIG1h
eEV4cGFuZExldmVscyA9IDIwOwotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMgeyFXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90T2JqZWN0Tm9kZX0KLSAgICAgICAgICovCi0gICAgICAgIGZ1
bmN0aW9uIHBvcHVsYXRlQ29tcGxldGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnJl
bW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLkV2ZW50
cy5Qb3B1bGF0ZUNvbXBsZXRlLCBwb3B1bGF0ZUNvbXBsZXRlLCB0aGlzKTsKLSAgICAgICAgICAg
IHRoaXMuZXhwYW5kKCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09
IDEgJiYgLS1tYXhFeHBhbmRMZXZlbHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoaWxk
ID0gdGhpcy5jaGlsZHJlblswXTsKLSAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5FdmVudHMuUG9wdWxhdGVDb21w
bGV0ZSwgcG9wdWxhdGVDb21wbGV0ZSwgY2hpbGQpOwotICAgICAgICAgICAgICAgIGNoaWxkLnBv
cHVsYXRlKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBkYXRhR3JpZC5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1l
bnREYXRhR3JpZC5FdmVudHMuRXhwYW5kUmV0YWluZXJzQ29tcGxldGUpOwotICAgICAgICB9Ci0g
ICAgICAgIHRoaXMucm9vdE5vZGUoKS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RHcmlkTm9kZS5FdmVudHMuUG9wdWxhdGVDb21wbGV0ZSwgcG9wdWxhdGVDb21wbGV0
ZSwgdGhpcy5yb290Tm9kZSgpKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Q29udGFpbm1lbnREYXRhR3JpZC5wcm90b3R5cGUKLX0KLQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RW
aWV3cG9ydERhdGFHcmlkfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0
b3JzRGF0YUdyaWQgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIGNvbHVtbnMgPSBbCi0gICAgICAg
IHtpZDogIm9iamVjdCIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnN0cnVjdG9y
IiksIGRpc2Nsb3N1cmU6IHRydWUsIHNvcnRhYmxlOiB0cnVlfSwKLSAgICAgICAge2lkOiAiZGlz
dGFuY2UiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEaXN0YW5jZSIpLCB3aWR0aDog
IjkwcHgiLCBzb3J0YWJsZTogdHJ1ZX0sCi0gICAgICAgIHtpZDogImNvdW50IiwgdGl0bGU6IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiT2JqZWN0cyBDb3VudCIpLCB3aWR0aDogIjkwcHgiLCBzb3J0
YWJsZTogdHJ1ZX0sCi0gICAgICAgIHtpZDogInNoYWxsb3dTaXplIiwgdGl0bGU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiU2hhbGxvdyBTaXplIiksIHdpZHRoOiAiMTIwcHgiLCBzb3J0YWJsZTog
dHJ1ZX0sCi0gICAgICAgIHtpZDogInJldGFpbmVkU2l6ZSIsIHRpdGxlOiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlJldGFpbmVkIFNpemUiKSwgd2lkdGg6ICIxMjBweCIsIHNvcnQ6IFdlYkluc3Bl
Y3Rvci5EYXRhR3JpZC5PcmRlci5EZXNjZW5kaW5nLCBzb3J0YWJsZTogdHJ1ZX0KLSAgICBdOwot
ICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3cG9ydERhdGFHcmlkLmNhbGwodGhpcywg
Y29sdW1ucyk7Ci0gICAgdGhpcy5fcHJvZmlsZUluZGV4ID0gLTE7Ci0gICAgdGhpcy5fdG9wTGV2
ZWxOb2RlcyA9IFtdOwotCi0gICAgdGhpcy5fb2JqZWN0SWRUb1NlbGVjdCA9IG51bGw7Ci19Ci0K
LVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3RvcnNEYXRhR3JpZC5wcm90b3R5cGUg
PSB7Ci0gICAgX3NvcnRGaWVsZHM6IGZ1bmN0aW9uKHNvcnRDb2x1bW4sIHNvcnRBc2NlbmRpbmcp
Ci0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgb2JqZWN0OiBbIl9uYW1lIiwg
c29ydEFzY2VuZGluZywgIl9jb3VudCIsIGZhbHNlXSwKLSAgICAgICAgICAgIGRpc3RhbmNlOiBb
Il9kaXN0YW5jZSIsIHNvcnRBc2NlbmRpbmcsICJfcmV0YWluZWRTaXplIiwgdHJ1ZV0sCi0gICAg
ICAgICAgICBjb3VudDogWyJfY291bnQiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXSwK
LSAgICAgICAgICAgIHNoYWxsb3dTaXplOiBbIl9zaGFsbG93U2l6ZSIsIHNvcnRBc2NlbmRpbmcs
ICJfbmFtZSIsIHRydWVdLAotICAgICAgICAgICAgcmV0YWluZWRTaXplOiBbIl9yZXRhaW5lZFNp
emUiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXQotICAgICAgICB9W3NvcnRDb2x1bW5d
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge0hl
YXBQcm9maWxlckFnZW50LkhlYXBTbmFwc2hvdE9iamVjdElkfSBpZAotICAgICAqLwotICAgIGhp
Z2hsaWdodE9iamVjdEJ5SGVhcFNuYXBzaG90SWQ6IGZ1bmN0aW9uKGlkKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLnNuYXBzaG90KSB7Ci0gICAgICAgICAgICB0aGlzLl9vYmplY3RJZFRvU2Vs
ZWN0ID0gaWQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBkaWRHZXRDbGFzc05hbWUoY2xhc3NOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgY29uc3RydWN0b3JOb2RlcyA9IHRoaXMudG9wTGV2ZWxOb2RlcygpOwotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdHJ1Y3Rvck5vZGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnN0cnVjdG9yTm9kZXNbaV07Ci0gICAgICAgICAg
ICAgICAgaWYgKHBhcmVudC5fbmFtZSA9PT0gY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhcmVudC5yZXZlYWxOb2RlQnlTbmFwc2hvdE9iamVjdElkKHBhcnNlSW50KGlkLCAxMCkp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuc25hcHNob3Qubm9kZUNsYXNzTmFtZShw
YXJzZUludChpZCwgMTApLCBkaWRHZXRDbGFzc05hbWUuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQot
ICAgIHNldERhdGFTb3VyY2U6IGZ1bmN0aW9uKHNuYXBzaG90KQotICAgIHsKLSAgICAgICAgdGhp
cy5zbmFwc2hvdCA9IHNuYXBzaG90OwotICAgICAgICBpZiAodGhpcy5fcHJvZmlsZUluZGV4ID09
PSAtMSkKLSAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlQ2hpbGRyZW4oKTsKLQotICAgICAgICBp
ZiAodGhpcy5fb2JqZWN0SWRUb1NlbGVjdCkgewotICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRP
YmplY3RCeUhlYXBTbmFwc2hvdElkKHRoaXMuX29iamVjdElkVG9TZWxlY3QpOwotICAgICAgICAg
ICAgdGhpcy5fb2JqZWN0SWRUb1NlbGVjdCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgX2FnZ3JlZ2F0ZXNSZWNlaXZlZDogZnVuY3Rpb24oa2V5LCBhZ2dyZWdhdGVzKQotICAgIHsK
LSAgICAgICAgZm9yICh2YXIgY29uc3RydWN0b3IgaW4gYWdncmVnYXRlcykKLSAgICAgICAgICAg
IHRoaXMuYXBwZW5kVG9wTGV2ZWxOb2RlKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29u
c3RydWN0b3JOb2RlKHRoaXMsIGNvbnN0cnVjdG9yLCBhZ2dyZWdhdGVzW2NvbnN0cnVjdG9yXSwg
a2V5KSk7Ci0gICAgICAgIHRoaXMuc29ydGluZ0NoYW5nZWQoKTsKLSAgICB9LAotCi0gICAgX3Bv
cHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0KLSAgICAgICAgdGhpcy5kaXNwb3Nl
KCk7Ci0gICAgICAgIHRoaXMucmVtb3ZlVG9wTGV2ZWxOb2RlcygpOwotICAgICAgICB0aGlzLnJl
c2V0U29ydGluZ0NhY2hlKCk7Ci0KLSAgICAgICAgdmFyIGtleSA9IHRoaXMuX3Byb2ZpbGVJbmRl
eCA9PT0gLTEgPyAiYWxsT2JqZWN0cyIgOiB0aGlzLl9taW5Ob2RlSWQgKyAiLi4iICsgdGhpcy5f
bWF4Tm9kZUlkOwotICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5fcHJvZmlsZUluZGV4ID09PSAt
MSA/IG51bGwgOiAiZnVuY3Rpb24obm9kZSkgeyB2YXIgaWQgPSBub2RlLmlkKCk7IHJldHVybiBp
ZCA+ICIgKyB0aGlzLl9taW5Ob2RlSWQgKyAiICYmIGlkIDw9ICIgKyB0aGlzLl9tYXhOb2RlSWQg
KyAiOyB9IjsKLQotICAgICAgICB0aGlzLnNuYXBzaG90LmFnZ3JlZ2F0ZXMoZmFsc2UsIGtleSwg
ZmlsdGVyLCB0aGlzLl9hZ2dyZWdhdGVzUmVjZWl2ZWQuYmluZCh0aGlzLCBrZXkpKTsKLSAgICB9
LAotCi0gICAgZmlsdGVyU2VsZWN0SW5kZXhDaGFuZ2VkOiBmdW5jdGlvbihwcm9maWxlcywgcHJv
ZmlsZUluZGV4KQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZUluZGV4ID0gcHJvZmlsZUlu
ZGV4OwotCi0gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXhOb2RlSWQ7Ci0gICAgICAgIGRlbGV0ZSB0
aGlzLl9taW5Ob2RlSWQ7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3Byb2ZpbGVJbmRleCAhPT0gLTEp
IHsKLSAgICAgICAgICAgIHRoaXMuX21pbk5vZGVJZCA9IHByb2ZpbGVJbmRleCA+IDAgPyBwcm9m
aWxlc1twcm9maWxlSW5kZXggLSAxXS5tYXhKU09iamVjdElkIDogMDsKLSAgICAgICAgICAgIHRo
aXMuX21heE5vZGVJZCA9IHByb2ZpbGVzW3Byb2ZpbGVJbmRleF0ubWF4SlNPYmplY3RJZDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuX3BvcHVsYXRlQ2hpbGRyZW4oKTsKLSAgICB9LAotCi0g
ICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlld3BvcnREYXRhR3JpZC5w
cm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RWaWV3cG9ydERhdGFHcmlkfQotICovCi1XZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGlmZkRhdGFHcmlkID0gZnVuY3Rpb24oKQotewotICAgIHZhciBjb2x1bW5z
ID0gWwotICAgICAgICB7aWQ6ICJvYmplY3QiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJDb25zdHJ1Y3RvciIpLCBkaXNjbG9zdXJlOiB0cnVlLCBzb3J0YWJsZTogdHJ1ZX0sCi0gICAg
ICAgIHtpZDogImFkZGVkQ291bnQiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIjIE5l
dyIpLCB3aWR0aDogIjcycHgiLCBzb3J0YWJsZTogdHJ1ZX0sCi0gICAgICAgIHtpZDogInJlbW92
ZWRDb3VudCIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiMgRGVsZXRlZCIpLCB3aWR0
aDogIjcycHgiLCBzb3J0YWJsZTogdHJ1ZX0sCi0gICAgICAgIHtpZDogImNvdW50RGVsdGEiLCB0
aXRsZTogIiMgRGVsdGEiLCB3aWR0aDogIjY0cHgiLCBzb3J0YWJsZTogdHJ1ZX0sCi0gICAgICAg
IHtpZDogImFkZGVkU2l6ZSIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFsbG9jLiBT
aXplIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlLCBzb3J0OiBXZWJJbnNwZWN0b3Iu
RGF0YUdyaWQuT3JkZXIuRGVzY2VuZGluZ30sCi0gICAgICAgIHtpZDogInJlbW92ZWRTaXplIiwg
dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRnJlZWQgU2l6ZSIpLCB3aWR0aDogIjcycHgi
LCBzb3J0YWJsZTogdHJ1ZX0sCi0gICAgICAgIHtpZDogInNpemVEZWx0YSIsIHRpdGxlOiAiU2l6
ZSBEZWx0YSIsIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlfQotICAgIF07Ci0gICAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXdwb3J0RGF0YUdyaWQuY2FsbCh0aGlzLCBjb2x1bW5z
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRhR3JpZC5wcm90b3R5cGUg
PSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHJldHVybiB7bnVtYmVyfQot
ICAgICAqLwotICAgIGRlZmF1bHRQb3B1bGF0ZUNvdW50OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gNTA7Ci0gICAgfSwKLQotICAgIF9zb3J0RmllbGRzOiBmdW5jdGlvbihzb3J0
Q29sdW1uLCBzb3J0QXNjZW5kaW5nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgIG9iamVjdDogWyJfbmFtZSIsIHNvcnRBc2NlbmRpbmcsICJfY291bnQiLCBmYWxzZV0sCi0g
ICAgICAgICAgICBhZGRlZENvdW50OiBbIl9hZGRlZENvdW50Iiwgc29ydEFzY2VuZGluZywgIl9u
YW1lIiwgdHJ1ZV0sCi0gICAgICAgICAgICByZW1vdmVkQ291bnQ6IFsiX3JlbW92ZWRDb3VudCIs
IHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAgICAgY291bnREZWx0YTog
WyJfY291bnREZWx0YSIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAg
ICAgYWRkZWRTaXplOiBbIl9hZGRlZFNpemUiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVl
XSwKLSAgICAgICAgICAgIHJlbW92ZWRTaXplOiBbIl9yZW1vdmVkU2l6ZSIsIHNvcnRBc2NlbmRp
bmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAgICAgc2l6ZURlbHRhOiBbIl9zaXplRGVsdGEi
LCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXQotICAgICAgICB9W3NvcnRDb2x1bW5dOwot
ICAgIH0sCi0KLSAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hvdCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHl9IGJhc2VTbmFwc2hvdAot
ICAgICAqLwotICAgIHNldEJhc2VEYXRhU291cmNlOiBmdW5jdGlvbihiYXNlU25hcHNob3QpCi0g
ICAgewotICAgICAgICB0aGlzLmJhc2VTbmFwc2hvdCA9IGJhc2VTbmFwc2hvdDsKLSAgICAgICAg
dGhpcy5kaXNwb3NlKCk7Ci0gICAgICAgIHRoaXMucmVtb3ZlVG9wTGV2ZWxOb2RlcygpOwotICAg
ICAgICB0aGlzLnJlc2V0U29ydGluZ0NhY2hlKCk7Ci0gICAgICAgIGlmICh0aGlzLmJhc2VTbmFw
c2hvdCA9PT0gdGhpcy5zbmFwc2hvdCkgewotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoInNvcnRpbmcgY29tcGxldGUiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLl9wb3B1bGF0ZUNoaWxkcmVuKCk7Ci0gICAgfSwKLQotICAg
IF9wb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBh
Z2dyZWdhdGVzRm9yRGlmZlJlY2VpdmVkKGFnZ3JlZ2F0ZXNGb3JEaWZmKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0aGlzLnNuYXBzaG90LmNhbGN1bGF0ZVNuYXBzaG90RGlmZih0aGlzLmJhc2VT
bmFwc2hvdC51aWQsIGFnZ3JlZ2F0ZXNGb3JEaWZmLCBkaWRDYWxjdWxhdGVTbmFwc2hvdERpZmYu
YmluZCh0aGlzKSk7Ci0gICAgICAgICAgICBmdW5jdGlvbiBkaWRDYWxjdWxhdGVTbmFwc2hvdERp
ZmYoZGlmZkJ5Q2xhc3NOYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGNsYXNzTmFtZSBpbiBkaWZmQnlDbGFzc05hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGRpZmYgPSBkaWZmQnlDbGFzc05hbWVbY2xhc3NOYW1lXTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5hcHBlbmRUb3BMZXZlbE5vZGUobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
aWZmTm9kZSh0aGlzLCBjbGFzc05hbWUsIGRpZmYpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIC8vIFR3byBzbmFwc2hvdHMgbGl2ZSBpbiBkaWZmZXJlbnQgd29ya2VycyBp
c29sYXRlZCBmcm9tIGVhY2ggb3RoZXIuIFRoYXQgaXMgd2h5Ci0gICAgICAgIC8vIHdlIGZpcnN0
IG5lZWQgdG8gY29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZXMgaW4gdGhlIGZpcnN0
IHNuYXBzaG90IGFuZAotICAgICAgICAvLyB0aGVuIHBhc3MgaXQgdG8gdGhlIHNlY29uZCBzbmFw
c2hvdCB0byBjYWxjbHVsYXRlIHRoZSBkaWZmLgotICAgICAgICB0aGlzLmJhc2VTbmFwc2hvdC5h
Z2dyZWdhdGVzRm9yRGlmZihhZ2dyZWdhdGVzRm9yRGlmZlJlY2VpdmVkLmJpbmQodGhpcykpOwot
ICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3cG9y
dERhdGFHcmlkLnByb3RvdHlwZQotfQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWR9Ci0gKi8KLVdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3REb21pbmF0b3JzRGF0YUdyaWQgPSBmdW5jdGlvbigpCi17
Ci0gICAgdmFyIGNvbHVtbnMgPSBbCi0gICAgICAgIHtpZDogIm9iamVjdCIsIHRpdGxlOiBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdCIpLCBkaXNjbG9zdXJlOiB0cnVlLCBzb3J0YWJsZTog
dHJ1ZX0sCi0gICAgICAgIHtpZDogInNoYWxsb3dTaXplIiwgdGl0bGU6IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiU2hhbGxvdyBTaXplIiksIHdpZHRoOiAiMTIwcHgiLCBzb3J0YWJsZTogdHJ1ZX0s
Ci0gICAgICAgIHtpZDogInJldGFpbmVkU2l6ZSIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlJldGFpbmVkIFNpemUiKSwgd2lkdGg6ICIxMjBweCIsIHNvcnQ6IFdlYkluc3BlY3Rvci5E
YXRhR3JpZC5PcmRlci5EZXNjZW5kaW5nLCBzb3J0YWJsZTogdHJ1ZX0KLSAgICBdOwotICAgIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLmNhbGwodGhpcywgY29sdW1u
cyk7Ci0gICAgdGhpcy5fb2JqZWN0SWRUb1NlbGVjdCA9IG51bGw7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REb21pbmF0b3JzRGF0YUdyaWQucHJvdG90eXBlID0gewotICAgIC8qKgot
ICAgICAqIEBvdmVycmlkZQotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBk
ZWZhdWx0UG9wdWxhdGVDb3VudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDI1
OwotICAgIH0sCi0KLSAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hvdCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsKLQotICAgICAgICB2YXIgZmFrZU5v
ZGUgPSB7IG5vZGVJbmRleDogdGhpcy5zbmFwc2hvdC5yb290Tm9kZUluZGV4IH07Ci0gICAgICAg
IHRoaXMuc2V0Um9vdE5vZGUobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REb21pbmF0b3JP
YmplY3ROb2RlKHRoaXMsIGZha2VOb2RlKSk7Ci0gICAgICAgIHRoaXMucm9vdE5vZGUoKS5zb3J0
KCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX29iamVjdElkVG9TZWxlY3QpIHsKLSAgICAgICAgICAg
IHRoaXMuaGlnaGxpZ2h0T2JqZWN0QnlIZWFwU25hcHNob3RJZCh0aGlzLl9vYmplY3RJZFRvU2Vs
ZWN0KTsKLSAgICAgICAgICAgIHRoaXMuX29iamVjdElkVG9TZWxlY3QgPSBudWxsOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIHNvcnRpbmdDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLnJvb3ROb2RlKCkuc29ydCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
b3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge0hlYXBQcm9maWxlckFnZW50LkhlYXBTbmFwc2hvdE9i
amVjdElkfSBpZAotICAgICAqLwotICAgIGhpZ2hsaWdodE9iamVjdEJ5SGVhcFNuYXBzaG90SWQ6
IGZ1bmN0aW9uKGlkKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnNuYXBzaG90KSB7Ci0gICAg
ICAgICAgICB0aGlzLl9vYmplY3RJZFRvU2VsZWN0ID0gaWQ7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkaWRHZXREb21pbmF0b3JzKGRvbWluYXRv
cklkcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFkb21pbmF0b3JJZHMpIHsKLSAgICAg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2Fubm90
IGZpbmQgY29ycmVzcG9uZGluZyBoZWFwIHNuYXBzaG90IG5vZGUiKSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRvbWluYXRvck5vZGUg
PSB0aGlzLnJvb3ROb2RlKCk7Ci0gICAgICAgICAgICBleHBhbmROZXh0RG9taW5hdG9yLmNhbGwo
dGhpcywgZG9taW5hdG9ySWRzLCBkb21pbmF0b3JOb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGV4cGFuZE5leHREb21pbmF0b3IoZG9taW5hdG9ySWRzLCBkb21pbmF0b3JOb2Rl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWRvbWluYXRvck5vZGUpIHsKLSAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCJDYW5ub3QgZmluZCBkb21pbmF0b3Igbm9kZSIpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZG9t
aW5hdG9ySWRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Tm9kZShk
b21pbmF0b3JOb2RlKTsKLSAgICAgICAgICAgICAgICBkb21pbmF0b3JOb2RlLmVsZW1lbnQuc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgc25hcHNob3RPYmplY3RJZCA9IGRvbWluYXRvcklk
cy5wb3AoKTsKLSAgICAgICAgICAgIGRvbWluYXRvck5vZGUucmV0cmlldmVDaGlsZEJ5U25hcHNo
b3RPYmplY3RJZChzbmFwc2hvdE9iamVjdElkLCBleHBhbmROZXh0RG9taW5hdG9yLmJpbmQodGhp
cywgZG9taW5hdG9ySWRzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnNuYXBzaG90LmRv
bWluYXRvcklkc0Zvck5vZGUocGFyc2VJbnQoaWQsIDEwKSwgZGlkR2V0RG9taW5hdG9ycy5iaW5k
KHRoaXMpKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90U29ydGFibGVEYXRhR3JpZC5wcm90b3R5cGUKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RHcmlkTm9kZXMuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdEdyaWROb2Rlcy5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEwZDRmNS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdEdyaWROb2Rlcy5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDExMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWR9IHRyZWUKLSAqIEBwYXJhbSB7Ym9vbGVh
bn0gaGFzQ2hpbGRyZW4KLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlID0g
ZnVuY3Rpb24odHJlZSwgaGFzQ2hpbGRyZW4pCi17Ci0gICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlk
Tm9kZS5jYWxsKHRoaXMsIG51bGwsIGhhc0NoaWxkcmVuKTsKLSAgICB0aGlzLl9kYXRhR3JpZCA9
IHRyZWU7Ci0gICAgdGhpcy5faW5zdGFuY2VDb3VudCA9IDA7Ci0KLSAgICB0aGlzLl9zYXZlZENo
aWxkcmVuID0gbnVsbDsKLSAgICAvKioKLSAgICAgKiBMaXN0IG9mIHBvc2l0aW9uIHJhbmdlcyBm
b3IgYWxsIHZpc2libGUgbm9kZXM6IFtzdGFydFBvczEsIGVuZFBvczEpLC4uLixbc3RhcnRQb3NO
LCBlbmRQb3NOKQotICAgICAqIFBvc2l0aW9uIGlzIGFuIGl0ZW0gcG9zaXRpb24gaW4gdGhlIHBy
b3ZpZGVyLgotICAgICAqLwotICAgIHRoaXMuX3JldHJpZXZlZENoaWxkcmVuUmFuZ2VzID0gW107
Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5FdmVudHMgPSB7Ci0gICAg
UG9wdWxhdGVDb21wbGV0ZTogIlBvcHVsYXRlQ29tcGxldGUiCi19Ci0KLVdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHl9Ci0gICAgICovCi0gICAg
Y3JlYXRlUHJvdmlkZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJv
cigiTmVlZHMgaW1wbGVtZW50ZWQuIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5fQotICAgICAqLwotICAg
IF9wcm92aWRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9wcm92aWRl
ck9iamVjdCkKLSAgICAgICAgICAgIHRoaXMuX3Byb3ZpZGVyT2JqZWN0ID0gdGhpcy5jcmVhdGVQ
cm92aWRlcigpOwotICAgICAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXJPYmplY3Q7Ci0gICAgfSwK
LQotICAgIGNyZWF0ZUNlbGw6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIpCi0gICAgewotICAg
ICAgICB2YXIgY2VsbCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0
ZUNlbGwuY2FsbCh0aGlzLCBjb2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKHRoaXMuX3Nl
YXJjaE1hdGNoZWQpCi0gICAgICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIp
OwotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICB9LAotCi0gICAgY29sbGFwc2U6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmNv
bGxhcHNlLmNhbGwodGhpcyk7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLnVwZGF0ZVZpc2libGVO
b2RlcygpOwotICAgIH0sCi0KLSAgICBkaXNwb3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fcHJvdmlkZXIoKSkKLSAgICAgICAgICAgIHRoaXMuX3Byb3ZpZGVyKCkuZGlz
cG9zZSgpOwotICAgICAgICBmb3IgKHZhciBub2RlID0gdGhpcy5jaGlsZHJlblswXTsgbm9kZTsg
bm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZSh0cnVlLCB0aGlzLCB0cnVlKSkKLSAgICAgICAg
ICAgIGlmIChub2RlLmRpc3Bvc2UpCi0gICAgICAgICAgICAgICAgbm9kZS5kaXNwb3NlKCk7Ci0g
ICAgfSwKLQotICAgIF9yZWFjaGFibGVGcm9tV2luZG93OiBmYWxzZSwKLQotICAgIHF1ZXJ5T2Jq
ZWN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICB3YXNEZXRhY2hlZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQubm9kZVdhc0RldGFjaGVkKHRoaXMpOwotICAg
IH0sCi0KLSAgICBfdG9QZXJjZW50U3RyaW5nOiBmdW5jdGlvbihudW0pCi0gICAgewotICAgICAg
ICByZXR1cm4gbnVtLnRvRml4ZWQoMCkgKyAiXHUyMDA5JSI7IC8vIFx1MjAwOSBpcyBhIHRoaW4g
c3BhY2UuCi0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBub2RlUG9z
aXRpb24KLSAgICAgKi8KLSAgICBjaGlsZEZvclBvc2l0aW9uOiBmdW5jdGlvbihub2RlUG9zaXRp
b24pCi0gICAgewotICAgICAgICB2YXIgaW5kZXhPZkZpcnNDaGlsZEluUmFuZ2UgPSAwOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JldHJpZXZlZENoaWxkcmVuUmFuZ2VzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3JldHJpZXZlZENoaWxk
cmVuUmFuZ2VzW2ldOwotICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSA8PSBub2RlUG9zaXRpb24g
JiYgbm9kZVBvc2l0aW9uIDwgcmFuZ2UudG8pIHsKLSAgICAgICAgICAgICAgIHZhciBjaGlsZElu
ZGV4ID0gaW5kZXhPZkZpcnNDaGlsZEluUmFuZ2UgKyBub2RlUG9zaXRpb24gLSByYW5nZS5mcm9t
OwotICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bY2hpbGRJbmRleF07Ci0gICAg
ICAgICAgIH0KLSAgICAgICAgICAgaW5kZXhPZkZpcnNDaGlsZEluUmFuZ2UgKz0gcmFuZ2UudG8g
LSByYW5nZS5mcm9tICsgMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9
LAotCi0gICAgX2NyZWF0ZVZhbHVlQ2VsbDogZnVuY3Rpb24oY29sdW1uSWRlbnRpZmllcikKLSAg
ICB7Ci0gICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAg
ICAgICAgY2VsbC5jbGFzc05hbWUgPSBjb2x1bW5JZGVudGlmaWVyICsgIi1jb2x1bW4iOwotICAg
ICAgICBpZiAodGhpcy5kYXRhR3JpZC5zbmFwc2hvdC50b3RhbFNpemUgIT09IDApIHsKLSAgICAg
ICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAg
ICAgIHZhciB2YWx1ZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ICAgICAgICB2YWx1ZVNwYW4udGV4dENvbnRlbnQgPSB0aGlzLmRhdGFbY29sdW1uSWRlbnRpZmll
cl07Ci0gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQodmFsdWVTcGFuKTsKLSAgICAgICAgICAg
IHZhciBwZXJjZW50Q29sdW1uID0gY29sdW1uSWRlbnRpZmllciArICItcGVyY2VudCI7Ci0gICAg
ICAgICAgICBpZiAocGVyY2VudENvbHVtbiBpbiB0aGlzLmRhdGEpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcGVyY2VudFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ICAgICAgICAgICAgcGVyY2VudFNwYW4uY2xhc3NOYW1lID0gInBlcmNlbnQtY29sdW1uIjsKLSAg
ICAgICAgICAgICAgICBwZXJjZW50U3Bhbi50ZXh0Q29udGVudCA9IHRoaXMuZGF0YVtwZXJjZW50
Q29sdW1uXTsKLSAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQocGVyY2VudFNwYW4pOwot
ICAgICAgICAgICAgICAgIGRpdi5hZGRTdHlsZUNsYXNzKCJoZWFwLXNuYXBzaG90LW11bHRpcGxl
LXZhbHVlcyIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2VsbC5hcHBlbmRDaGlsZChk
aXYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjZWxsOwotICAgIH0sCi0KLSAgICBwb3B1
bGF0ZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcG9wdWxhdGVk
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9wb3B1bGF0ZWQgPSB0cnVlOwot
Ci0gICAgICAgIGZ1bmN0aW9uIHNvcnRlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMu
X3BvcHVsYXRlQ2hpbGRyZW4oKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9wcm92aWRlcigp
LnNvcnRBbmRSZXdpbmQodGhpcy5jb21wYXJhdG9yKCksIHNvcnRlZC5iaW5kKHRoaXMpKTsKLSAg
ICB9LAotCi0gICAgZXhwYW5kV2l0aG91dFBvcHVsYXRlOiBmdW5jdGlvbihjYWxsYmFjaykKLSAg
ICB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSBkZWZhdWx0IHBvcHVsYXRlIHdvbid0IHRha2UgYWN0
aW9uLgotICAgICAgICB0aGlzLl9wb3B1bGF0ZWQgPSB0cnVlOwotICAgICAgICB0aGlzLmV4cGFu
ZCgpOwotICAgICAgICB0aGlzLl9wcm92aWRlcigpLnNvcnRBbmRSZXdpbmQodGhpcy5jb21wYXJh
dG9yKCksIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/bnVt
YmVyfSBmcm9tUG9zaXRpb24KLSAgICAgKiBAcGFyYW0gez9udW1iZXJ9IHRvUG9zaXRpb24KLSAg
ICAgKi8KLSAgICBfcG9wdWxhdGVDaGlsZHJlbjogZnVuY3Rpb24oZnJvbVBvc2l0aW9uLCB0b1Bv
c2l0aW9uLCBhZnRlclBvcHVsYXRlKQotICAgIHsKLSAgICAgICAgZnJvbVBvc2l0aW9uID0gZnJv
bVBvc2l0aW9uIHx8IDA7Ci0gICAgICAgIHRvUG9zaXRpb24gPSB0b1Bvc2l0aW9uIHx8IGZyb21Q
b3NpdGlvbiArIHRoaXMuX2RhdGFHcmlkLmRlZmF1bHRQb3B1bGF0ZUNvdW50KCk7Ci0gICAgICAg
IHZhciBmaXJzdE5vdFNlcmlhbGl6ZWRQb3NpdGlvbiA9IGZyb21Qb3NpdGlvbjsKLSAgICAgICAg
ZnVuY3Rpb24gc2VyaWFsaXplTmV4dENodW5rKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGZpcnN0Tm90U2VyaWFsaXplZFBvc2l0aW9uID49IHRvUG9zaXRpb24pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgdmFyIGVuZCA9IE1hdGgubWluKGZpcnN0Tm90U2VyaWFs
aXplZFBvc2l0aW9uICsgdGhpcy5fZGF0YUdyaWQuZGVmYXVsdFBvcHVsYXRlQ291bnQoKSwgdG9Q
b3NpdGlvbik7Ci0gICAgICAgICAgICB0aGlzLl9wcm92aWRlcigpLnNlcmlhbGl6ZUl0ZW1zUmFu
Z2UoZmlyc3ROb3RTZXJpYWxpemVkUG9zaXRpb24sIGVuZCwgY2hpbGRyZW5SZXRyaWV2ZWQuYmlu
ZCh0aGlzKSk7Ci0gICAgICAgICAgICBmaXJzdE5vdFNlcmlhbGl6ZWRQb3NpdGlvbiA9IGVuZDsK
LSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBpbnNlcnRSZXRyaWV2ZWRDaGlsZChpdGVtLCBp
bnNlcnRpb25JbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoaXMuX3NhdmVkQ2hp
bGRyZW4pIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2NoaWxkSGFzaEZvckVu
dGl0eShpdGVtKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzaCBpbiB0aGlzLl9zYXZlZENoaWxk
cmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQodGhpcy5fc2F2ZWRD
aGlsZHJlbltoYXNoXSwgaW5zZXJ0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5p
bnNlcnRDaGlsZCh0aGlzLl9jcmVhdGVDaGlsZE5vZGUoaXRlbSksIGluc2VydGlvbkluZGV4KTsK
LSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBpbnNlcnRTaG93TW9yZUJ1dHRvbihmcm9tLCB0
bywgaW5zZXJ0aW9uSW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBidXR0b24gPSBu
ZXcgV2ViSW5zcGVjdG9yLlNob3dNb3JlRGF0YUdyaWROb2RlKHRoaXMuX3BvcHVsYXRlQ2hpbGRy
ZW4uYmluZCh0aGlzKSwgZnJvbSwgdG8sIHRoaXMuX2RhdGFHcmlkLmRlZmF1bHRQb3B1bGF0ZUNv
dW50KCkpOwotICAgICAgICAgICAgdGhpcy5pbnNlcnRDaGlsZChidXR0b24sIGluc2VydGlvbklu
ZGV4KTsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBjaGlsZHJlblJldHJpZXZlZChpdGVt
cykKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGl0ZW1JbmRleCA9IDA7Ci0gICAgICAgICAg
ICB2YXIgaXRlbVBvc2l0aW9uID0gaXRlbXMuc3RhcnRQb3NpdGlvbjsKLSAgICAgICAgICAgIHZh
ciBpbnNlcnRpb25JbmRleCA9IDA7Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5fcmV0cmlldmVk
Q2hpbGRyZW5SYW5nZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnN0YXJ0
UG9zaXRpb24gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JldHJpZXZlZENoaWxk
cmVuUmFuZ2VzLnB1c2goe2Zyb206IDAsIHRvOiAwfSk7Ci0gICAgICAgICAgICAgICAgICAgIGlu
c2VydFNob3dNb3JlQnV0dG9uLmNhbGwodGhpcywgMCwgaXRlbXMuc3RhcnRQb3NpdGlvbiwgaW5z
ZXJ0aW9uSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMu
X3JldHJpZXZlZENoaWxkcmVuUmFuZ2VzLnB1c2goe2Zyb206IGl0ZW1zLnN0YXJ0UG9zaXRpb24s
IHRvOiBpdGVtcy5lbmRQb3NpdGlvbn0pOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
LCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgKytpKQotICAgICAgICAgICAgICAgICAgICBpbnNl
cnRSZXRyaWV2ZWRDaGlsZC5jYWxsKHRoaXMsIGl0ZW1zW2ldLCBpbnNlcnRpb25JbmRleCsrKTsK
LSAgICAgICAgICAgICAgICBpZiAoaXRlbXMuZW5kUG9zaXRpb24gPCBpdGVtcy50b3RhbExlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U2hvd01vcmVCdXR0b24uY2FsbCh0aGlzLCBp
dGVtcy5lbmRQb3NpdGlvbiwgaXRlbXMudG90YWxMZW5ndGgsIGluc2VydGlvbkluZGV4KyspOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2VJbmRleCA9IDA7
Ci0gICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdmFy
IHJhbmdlOwotICAgICAgICAgICAgICAgIHdoaWxlIChyYW5nZUluZGV4IDwgdGhpcy5fcmV0cmll
dmVkQ2hpbGRyZW5SYW5nZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlID0g
dGhpcy5fcmV0cmlldmVkQ2hpbGRyZW5SYW5nZXNbcmFuZ2VJbmRleF07Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChyYW5nZS50byA+PSBpdGVtUG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydGlvbkluZGV4ICs9
IHJhbmdlLnRvIC0gcmFuZ2UuZnJvbTsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCB0aGUg
YnV0dG9uIGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnRv
IDwgaXRlbXMudG90YWxMZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25J
bmRleCArPSAxOwotICAgICAgICAgICAgICAgICAgICArK3JhbmdlSW5kZXg7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCB8fCBpdGVtcy5zdGFydFBvc2l0
aW9uIDwgcmFuZ2UuZnJvbSkgewotICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJldmlv
dXMgYnV0dG9uLgotICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luc2VydGlvbklu
ZGV4IC0gMV0uc2V0RW5kUG9zaXRpb24oaXRlbXMuc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAg
ICAgICAgICAgIGluc2VydFNob3dNb3JlQnV0dG9uLmNhbGwodGhpcywgaXRlbXMuc3RhcnRQb3Np
dGlvbiwgZm91bmQgPyByYW5nZS5mcm9tIDogaXRlbXMudG90YWxMZW5ndGgsIGluc2VydGlvbklu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7ZnJvbTogaXRlbXMuc3RhcnRQb3Np
dGlvbiwgdG86IGl0ZW1zLnN0YXJ0UG9zaXRpb259OwotICAgICAgICAgICAgICAgICAgICBpZiAo
IWZvdW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VJbmRleCA9IHRoaXMuX3JldHJp
ZXZlZENoaWxkcmVuUmFuZ2VzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmV0
cmlldmVkQ2hpbGRyZW5SYW5nZXMuc3BsaWNlKHJhbmdlSW5kZXgsIDAsIHJhbmdlKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCAr
PSBpdGVtUG9zaXRpb24gLSByYW5nZS5mcm9tOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGluc2VydGlvbkluZGV4IGlzIGFsd2F5cyBhbiBpbmRl
eCBiZWZvcmUgYnV0dG9uIG9yIGJldHdlZW4gbm9kZXMuCi0gICAgICAgICAgICAgICAgLy8gQWxz
byBpdCBpcyBhbHdheXMgdHJ1ZSBoZXJlIHRoYXQgcmFuZ2UuZnJvbSA8PSBpdGVtUG9zaXRpb24g
PD0gcmFuZ2UudG8KLQotICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIHJhbmdlIHJpZ2h0
IGJvdW5kIHRvIGluY2x1ZGUgYWxsIG5ldyBpdGVtcy4KLSAgICAgICAgICAgICAgICB3aGlsZSAo
cmFuZ2UudG8gPCBpdGVtcy5lbmRQb3NpdGlvbikgewotICAgICAgICAgICAgICAgICAgICAvLyBT
a2lwIGFscmVhZHkgYWRkZWQgbm9kZXMuCi0gICAgICAgICAgICAgICAgICAgIHZhciBza2lwQ291
bnQgPSByYW5nZS50byAtIGl0ZW1Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uSW5kZXggKz0gc2tpcENvdW50OwotICAgICAgICAgICAgICAgICAgICBpdGVtSW5kZXggKz0g
c2tpcENvdW50OwotICAgICAgICAgICAgICAgICAgICBpdGVtUG9zaXRpb24gPSByYW5nZS50bzsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBhdCB0aGUgcG9zaXRpb24gYmVmb3JlIGJ1
dHRvbjogLi4uPD9ub2RlPng8YnV0dG9uPgotICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFJh
bmdlID0gdGhpcy5fcmV0cmlldmVkQ2hpbGRyZW5SYW5nZXNbcmFuZ2VJbmRleCArIDFdOwotICAg
ICAgICAgICAgICAgICAgICB2YXIgbmV3RW5kT2ZSYW5nZSA9IG5leHRSYW5nZSA/IG5leHRSYW5n
ZS5mcm9tIDogaXRlbXMudG90YWxMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXdF
bmRPZlJhbmdlID4gaXRlbXMuZW5kUG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBu
ZXdFbmRPZlJhbmdlID0gaXRlbXMuZW5kUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgIHdo
aWxlIChpdGVtUG9zaXRpb24gPCBuZXdFbmRPZlJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRSZXRyaWV2ZWRDaGlsZC5jYWxsKHRoaXMsIGl0ZW1zW2l0ZW1JbmRleCsrXSwg
aW5zZXJ0aW9uSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK2l0ZW1Qb3NpdGlv
bjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBNZXJnZSB3
aXRoIHRoZSBuZXh0IHJhbmdlLgotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFJhbmdlICYm
IG5ld0VuZE9mUmFuZ2UgPT09IG5leHRSYW5nZS5mcm9tKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByYW5nZS50byA9IG5leHRSYW5nZS50bzsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJlbW92ZSAic2hvdyBuZXh0IiBidXR0b24gaWYgdGhlcmUgaXMgb25lLgotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmNoaWxkcmVuW2luc2VydGlvbkluZGV4
XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXRyaWV2ZWRDaGlsZHJlblJhbmdl
cy5zcGxpY2UocmFuZ2VJbmRleCArIDEsIDEpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UudG8gPSBuZXdFbmRPZlJhbmdlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG9yIHVwZGF0ZSBuZXh0IGJ1dHRvbi4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdFbmRPZlJhbmdlID09PSBpdGVtcy50b3RhbExl
bmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHRoaXMu
Y2hpbGRyZW5baW5zZXJ0aW9uSW5kZXhdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luc2VydGlvbkluZGV4
XS5zZXRTdGFydFBvc2l0aW9uKGl0ZW1zLmVuZFBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
VE9ETzogZml4IHRoaXMuCi0gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZUNvdW50ICs9IGl0ZW1z
Lmxlbmd0aDsKLSAgICAgICAgICAgIGlmIChmaXJzdE5vdFNlcmlhbGl6ZWRQb3NpdGlvbiA8IHRv
UG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVOZXh0Q2h1bmsuY2FsbCh0aGlz
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChhZnRlclBvcHVsYXRlKQotICAgICAgICAgICAgICAgIGFmdGVyUG9wdWxhdGUoKTsKLSAg
ICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RHcmlkTm9kZS5FdmVudHMuUG9wdWxhdGVDb21wbGV0ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgc2VyaWFsaXplTmV4dENodW5rLmNhbGwodGhpcyk7Ci0gICAgfSwKLQotICAgIF9zYXZl
Q2hpbGRyZW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW4g
PSBudWxsOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgY2hpbGRyZW5Db3VudCA9IHRoaXMuY2hp
bGRyZW4ubGVuZ3RoOyBpIDwgY2hpbGRyZW5Db3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
Y2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOwotICAgICAgICAgICAgaWYgKCFjaGlsZC5leHBhbmRl
ZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghdGhpcy5fc2F2
ZWRDaGlsZHJlbikKLSAgICAgICAgICAgICAgICB0aGlzLl9zYXZlZENoaWxkcmVuID0ge307Ci0g
ICAgICAgICAgICB0aGlzLl9zYXZlZENoaWxkcmVuW3RoaXMuX2NoaWxkSGFzaEZvck5vZGUoY2hp
bGQpXSA9IGNoaWxkOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHNvcnQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLnJlY3Vyc2l2ZVNvcnRpbmdFbnRlcigpOwot
ICAgICAgICBmdW5jdGlvbiBhZnRlclNvcnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlz
Ll9zYXZlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKLSAg
ICAgICAgICAgIHRoaXMuX3JldHJpZXZlZENoaWxkcmVuUmFuZ2VzID0gW107Ci0KLSAgICAgICAg
ICAgIGZ1bmN0aW9uIGFmdGVyUG9wdWxhdGUoKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmV4cGFuZGVkKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGQuc29ydCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0
aGlzLl9kYXRhR3JpZC5yZWN1cnNpdmVTb3J0aW5nTGVhdmUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHZhciBpbnN0YW5jZUNvdW50ID0gdGhpcy5faW5zdGFuY2VDb3VudDsKLSAgICAg
ICAgICAgIHRoaXMuX2luc3RhbmNlQ291bnQgPSAwOwotICAgICAgICAgICAgdGhpcy5fcG9wdWxh
dGVDaGlsZHJlbigwLCBpbnN0YW5jZUNvdW50LCBhZnRlclBvcHVsYXRlLmJpbmQodGhpcykpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcHJvdmlkZXIoKS5zb3J0QW5kUmV3aW5kKHRoaXMu
Y29tcGFyYXRvcigpLCBhZnRlclNvcnQuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlk
Tm9kZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdy
aWR9IHRyZWUKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2Rl
ID0gZnVuY3Rpb24odHJlZSwgbm9kZSkKLXsKLSAgICB0aGlzLnNuYXBzaG90Tm9kZUluZGV4ID0g
MDsKLSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUuY2FsbCh0aGlzLCB0cmVl
LCBmYWxzZSk7Ci0gICAgLy8gbm9kZSBpcyBudWxsIGZvciBEYXRhR3JpZCByb290IG5vZGVzLgot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXMuX25hbWUgPSBub2RlLm5h
bWU7Ci0gICAgdGhpcy5fZGlzcGxheU5hbWUgPSBub2RlLmRpc3BsYXlOYW1lOwotICAgIHRoaXMu
X3R5cGUgPSBub2RlLnR5cGU7Ci0gICAgdGhpcy5fZGlzdGFuY2UgPSBub2RlLmRpc3RhbmNlOwot
ICAgIHRoaXMuX3NoYWxsb3dTaXplID0gbm9kZS5zZWxmU2l6ZTsKLSAgICB0aGlzLl9yZXRhaW5l
ZFNpemUgPSBub2RlLnJldGFpbmVkU2l6ZTsKLSAgICB0aGlzLnNuYXBzaG90Tm9kZUlkID0gbm9k
ZS5pZDsKLSAgICB0aGlzLnNuYXBzaG90Tm9kZUluZGV4ID0gbm9kZS5ub2RlSW5kZXg7Ci0gICAg
aWYgKHRoaXMuX3R5cGUgPT09ICJzdHJpbmciKQotICAgICAgICB0aGlzLl9yZWFjaGFibGVGcm9t
V2luZG93ID0gdHJ1ZTsKLSAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSAib2JqZWN0IiAmJiB0
aGlzLl9uYW1lLnN0YXJ0c1dpdGgoIldpbmRvdyIpKSB7Ci0gICAgICAgIHRoaXMuX25hbWUgPSB0
aGlzLnNob3J0ZW5XaW5kb3dVUkwodGhpcy5fbmFtZSwgZmFsc2UpOwotICAgICAgICB0aGlzLl9y
ZWFjaGFibGVGcm9tV2luZG93ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKG5vZGUuY2FuQmVRdWVy
aWVkKQotICAgICAgICB0aGlzLl9yZWFjaGFibGVGcm9tV2luZG93ID0gdHJ1ZTsKLSAgICBpZiAo
bm9kZS5kZXRhY2hlZERPTVRyZWVOb2RlKQotICAgICAgICB0aGlzLmRldGFjaGVkRE9NVHJlZU5v
ZGUgPSB0cnVlOwotfTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3RO
b2RlLnByb3RvdHlwZSA9IHsKLSAgICBjcmVhdGVDZWxsOiBmdW5jdGlvbihjb2x1bW5JZGVudGlm
aWVyKQotICAgIHsKLSAgICAgICAgdmFyIGNlbGwgPSBjb2x1bW5JZGVudGlmaWVyICE9PSAib2Jq
ZWN0IiA/IHRoaXMuX2NyZWF0ZVZhbHVlQ2VsbChjb2x1bW5JZGVudGlmaWVyKSA6IHRoaXMuX2Ny
ZWF0ZU9iamVjdENlbGwoKTsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaE1hdGNoZWQpCi0gICAg
ICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIpOwotICAgICAgICByZXR1cm4g
Y2VsbDsKLSAgICB9LAotCi0gICAgX2NyZWF0ZU9iamVjdENlbGw6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAg
ICAgY2VsbC5jbGFzc05hbWUgPSAib2JqZWN0LWNvbHVtbiI7Ci0gICAgICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJz
b3VyY2UtY29kZSBldmVudC1wcm9wZXJ0aWVzIjsKLSAgICAgICAgZGl2LnN0eWxlLm92ZXJmbG93
ID0gInZpc2libGUiOwotCi0gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhWyJvYmplY3QiXTsK
LSAgICAgICAgaWYgKHRoaXMuX3ByZWZpeE9iamVjdENlbGwpCi0gICAgICAgICAgICB0aGlzLl9w
cmVmaXhPYmplY3RDZWxsKGRpdiwgZGF0YSk7Ci0KLSAgICAgICAgdmFyIHZhbHVlU3BhbiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgdmFsdWVTcGFuLmNsYXNzTmFt
ZSA9ICJ2YWx1ZSBjb25zb2xlLWZvcm1hdHRlZC0iICsgZGF0YS52YWx1ZVN0eWxlOwotICAgICAg
ICB2YWx1ZVNwYW4udGV4dENvbnRlbnQgPSBkYXRhLnZhbHVlOwotICAgICAgICBkaXYuYXBwZW5k
Q2hpbGQodmFsdWVTcGFuKTsKLQotICAgICAgICBpZiAodGhpcy5kYXRhLmRpc3BsYXlOYW1lKSB7
Ci0gICAgICAgICAgICB2YXIgbmFtZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7Ci0gICAgICAgICAgICBuYW1lU3Bhbi5jbGFzc05hbWUgPSAibmFtZSBjb25zb2xlLWZvcm1h
dHRlZC1uYW1lIjsKLSAgICAgICAgICAgIG5hbWVTcGFuLnRleHRDb250ZW50ID0gIiAiICsgdGhp
cy5kYXRhLmRpc3BsYXlOYW1lOwotICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5hbWVTcGFu
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBpZFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7Ci0gICAgICAgIGlkU3Bhbi5jbGFzc05hbWUgPSAiY29uc29sZS1mb3JtYXR0
ZWQtaWQiOwotICAgICAgICBpZFNwYW4udGV4dENvbnRlbnQgPSAiIEAiICsgZGF0YVsibm9kZUlk
Il07Ci0gICAgICAgIGRpdi5hcHBlbmRDaGlsZChpZFNwYW4pOwotCi0gICAgICAgIGlmICh0aGlz
Ll9wb3N0Zml4T2JqZWN0Q2VsbCkKLSAgICAgICAgICAgIHRoaXMuX3Bvc3RmaXhPYmplY3RDZWxs
KGRpdiwgZGF0YSk7Ci0KLSAgICAgICAgY2VsbC5hcHBlbmRDaGlsZChkaXYpOwotICAgICAgICBj
ZWxsLmFkZFN0eWxlQ2xhc3MoImRpc2Nsb3N1cmUiKTsKLSAgICAgICAgaWYgKHRoaXMuZGVwdGgp
Ci0gICAgICAgICAgICBjZWxsLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWxlZnQiLCAodGhp
cy5kZXB0aCAqIHRoaXMuZGF0YUdyaWQuaW5kZW50V2lkdGgpICsgInB4Iik7Ci0gICAgICAgIGNl
bGwuaGVhcFNuYXBzaG90Tm9kZSA9IHRoaXM7Ci0gICAgICAgIHJldHVybiBjZWxsOwotICAgIH0s
Ci0KLSAgICBnZXQgZGF0YSgpCi0gICAgewotICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2VtcHR5
RGF0YSgpOwotCi0gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX25hbWU7Ci0gICAgICAgIHZhciB2
YWx1ZVN0eWxlID0gIm9iamVjdCI7Ci0gICAgICAgIHN3aXRjaCAodGhpcy5fdHlwZSkgewotICAg
ICAgICBjYXNlICJzdHJpbmciOgotICAgICAgICAgICAgdmFsdWUgPSAiXCIiICsgdmFsdWUgKyAi
XCIiOwotICAgICAgICAgICAgdmFsdWVTdHlsZSA9ICJzdHJpbmciOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgInJlZ2V4cCI6Ci0gICAgICAgICAgICB2YWx1ZSA9ICIvIiArIHZh
bHVlICsgIi8iOwotICAgICAgICAgICAgdmFsdWVTdHlsZSA9ICJzdHJpbmciOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgImNsb3N1cmUiOgotICAgICAgICAgICAgdmFsdWUgPSAi
ZnVuY3Rpb24iICsgKHZhbHVlID8gIiAiIDogIiIpICsgdmFsdWUgKyAiKCkiOwotICAgICAgICAg
ICAgdmFsdWVTdHlsZSA9ICJmdW5jdGlvbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAibnVtYmVyIjoKLSAgICAgICAgICAgIHZhbHVlU3R5bGUgPSAibnVtYmVyIjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJoaWRkZW4iOgotICAgICAgICAgICAgdmFsdWVT
dHlsZSA9ICJudWxsIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJhcnJheSI6
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHZhbHVlID0gIltdIjsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB2YWx1ZSArPSAiW10iOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH07Ci0gICAgICAgIGlmICh0aGlzLl9yZWFjaGFibGVGcm9t
V2luZG93KQotICAgICAgICAgICAgdmFsdWVTdHlsZSArPSAiIGhpZ2hsaWdodCI7Ci0gICAgICAg
IGlmICh2YWx1ZSA9PT0gIk9iamVjdCIpCi0gICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAg
ICBpZiAodGhpcy5kZXRhY2hlZERPTVRyZWVOb2RlKQotICAgICAgICAgICAgdmFsdWVTdHlsZSAr
PSAiIGRldGFjaGVkLWRvbS10cmVlLW5vZGUiOwotICAgICAgICBkYXRhWyJvYmplY3QiXSA9IHsg
dmFsdWVTdHlsZTogdmFsdWVTdHlsZSwgdmFsdWU6IHZhbHVlLCBub2RlSWQ6IHRoaXMuc25hcHNo
b3ROb2RlSWQgfTsKLQotICAgICAgICBkYXRhWyJkaXNwbGF5TmFtZSJdID0gdGhpcy5fZGlzcGxh
eU5hbWU7Ci0gICAgICAgIGRhdGFbImRpc3RhbmNlIl0gPSAgdGhpcy5fZGlzdGFuY2U7Ci0gICAg
ICAgIGRhdGFbInNoYWxsb3dTaXplIl0gPSBOdW1iZXIud2l0aFRob3VzYW5kc1NlcGFyYXRvcih0
aGlzLl9zaGFsbG93U2l6ZSk7Ci0gICAgICAgIGRhdGFbInJldGFpbmVkU2l6ZSJdID0gTnVtYmVy
LndpdGhUaG91c2FuZHNTZXBhcmF0b3IodGhpcy5fcmV0YWluZWRTaXplKTsKLSAgICAgICAgZGF0
YVsic2hhbGxvd1NpemUtcGVyY2VudCJdID0gdGhpcy5fdG9QZXJjZW50U3RyaW5nKHRoaXMuX3No
YWxsb3dTaXplUGVyY2VudCk7Ci0gICAgICAgIGRhdGFbInJldGFpbmVkU2l6ZS1wZXJjZW50Il0g
PSB0aGlzLl90b1BlcmNlbnRTdHJpbmcodGhpcy5fcmV0YWluZWRTaXplUGVyY2VudCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VEYXRhID8gdGhpcy5fZW5oYW5jZURhdGEoZGF0YSkg
OiBkYXRhOwotICAgIH0sCi0KLSAgICBxdWVyeU9iamVjdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxi
YWNrLCBvYmplY3RHcm91cE5hbWUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0g
InN0cmluZyIpCi0gICAgICAgICAgICBjYWxsYmFjayhXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0
LmZyb21QcmltaXRpdmVWYWx1ZSh0aGlzLl9uYW1lKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgZnVuY3Rpb24gZm9ybWF0UmVzdWx0KGVycm9yLCBvYmplY3QpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFlcnJvciAmJiBvYmplY3QudHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2soV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChv
YmplY3QpLCAhIWVycm9yKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVByaW1pdGl2ZVZhbHVl
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiTm90IGF2YWlsYWJsZSIpKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBIZWFwUHJvZmlsZXJBZ2VudC5nZXRPYmplY3RCeUhlYXBPYmplY3RJZChT
dHJpbmcodGhpcy5zbmFwc2hvdE5vZGVJZCksIG9iamVjdEdyb3VwTmFtZSwgZm9ybWF0UmVzdWx0
KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBnZXQgX3JldGFpbmVkU2l6ZVBlcmNlbnQoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JldGFpbmVkU2l6ZSAvIHRoaXMuZGF0YUdyaWQu
c25hcHNob3QudG90YWxTaXplICogMTAwLjA7Ci0gICAgfSwKLQotICAgIGdldCBfc2hhbGxvd1Np
emVQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zaGFsbG93U2l6ZSAvIHRo
aXMuZGF0YUdyaWQuc25hcHNob3QudG90YWxTaXplICogMTAwLjA7Ci0gICAgfSwKLQotICAgIHVw
ZGF0ZUhhc0NoaWxkcmVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBpc0Vt
cHR5Q2FsbGJhY2soaXNFbXB0eSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5oYXNDaGls
ZHJlbiA9ICFpc0VtcHR5OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3Byb3ZpZGVyKCkuaXNF
bXB0eShpc0VtcHR5Q2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIHNob3J0ZW5X
aW5kb3dVUkw6IGZ1bmN0aW9uKGZ1bGxOYW1lLCBoYXNPYmplY3RJZCkKLSAgICB7Ci0gICAgICAg
IHZhciBzdGFydFBvcyA9IGZ1bGxOYW1lLmluZGV4T2YoIi8iKTsKLSAgICAgICAgdmFyIGVuZFBv
cyA9IGhhc09iamVjdElkID8gZnVsbE5hbWUuaW5kZXhPZigiQCIpIDogZnVsbE5hbWUubGVuZ3Ro
OwotICAgICAgICBpZiAoc3RhcnRQb3MgIT09IC0xICYmIGVuZFBvcyAhPT0gLTEpIHsKLSAgICAg
ICAgICAgIHZhciBmdWxsVVJMID0gZnVsbE5hbWUuc3Vic3RyaW5nKHN0YXJ0UG9zICsgMSwgZW5k
UG9zKS50cmltTGVmdCgpOwotICAgICAgICAgICAgdmFyIHVybCA9IGZ1bGxVUkwudHJpbVVSTCgp
OwotICAgICAgICAgICAgaWYgKHVybC5sZW5ndGggPiA0MCkKLSAgICAgICAgICAgICAgICB1cmwg
PSB1cmwuY2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKDQwKTsKLSAgICAgICAgICAgIHJldHVybiBm
dWxsTmFtZS5zdWJzdHIoMCwgc3RhcnRQb3MgKyAyKSArIHVybCArIGZ1bGxOYW1lLnN1YnN0cihl
bmRQb3MpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAg
ICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUu
cHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlfQotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZH0gdHJlZQotICogQHBhcmFtIHtib29s
ZWFufSBpc0Zyb21CYXNlU25hcHNob3QKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9i
amVjdE5vZGUgPSBmdW5jdGlvbih0cmVlLCBpc0Zyb21CYXNlU25hcHNob3QsIGVkZ2UsIHBhcmVu
dEdyaWROb2RlKQotewotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0
Tm9kZS5jYWxsKHRoaXMsIHRyZWUsIGVkZ2Uubm9kZSk7Ci0gICAgdGhpcy5fcmVmZXJlbmNlTmFt
ZSA9IGVkZ2UubmFtZTsKLSAgICB0aGlzLl9yZWZlcmVuY2VUeXBlID0gZWRnZS50eXBlOwotICAg
IHRoaXMuX2Rpc3RhbmNlID0gZWRnZS5kaXN0YW5jZTsKLSAgICB0aGlzLnNob3dSZXRhaW5pbmdF
ZGdlcyA9IHRyZWUuc2hvd1JldGFpbmluZ0VkZ2VzOwotICAgIHRoaXMuX2lzRnJvbUJhc2VTbmFw
c2hvdCA9IGlzRnJvbUJhc2VTbmFwc2hvdDsKLQotICAgIHRoaXMuX3BhcmVudEdyaWROb2RlID0g
cGFyZW50R3JpZE5vZGU7Ci0gICAgdGhpcy5fY3ljbGVkV2l0aEFuY2VzdG9yR3JpZE5vZGUgPSB0
aGlzLl9maW5kQW5jZXN0b3JXaXRoU2FtZVNuYXBzaG90Tm9kZUlkKCk7Ci0gICAgaWYgKCF0aGlz
Ll9jeWNsZWRXaXRoQW5jZXN0b3JHcmlkTm9kZSkKLSAgICAgICAgdGhpcy51cGRhdGVIYXNDaGls
ZHJlbigpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90T2JqZWN0Tm9kZS5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFByb3ZpZGVyUHJveHl9Ci0gICAgICovCi0gICAgY3JlYXRlUHJvdmlkZXI6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciB0cmVlID0gdGhpcy5fZGF0YUdyaWQ7Ci0gICAgICAgIHZhciBz
aG93SGlkZGVuRGF0YSA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93SGVhcFNuYXBzaG90T2Jq
ZWN0c0hpZGRlblByb3BlcnRpZXMuZ2V0KCk7Ci0gICAgICAgIHZhciBzbmFwc2hvdCA9IHRoaXMu
X2lzRnJvbUJhc2VTbmFwc2hvdCA/IHRyZWUuYmFzZVNuYXBzaG90IDogdHJlZS5zbmFwc2hvdDsK
LSAgICAgICAgaWYgKHRoaXMuc2hvd1JldGFpbmluZ0VkZ2VzKQotICAgICAgICAgICAgcmV0dXJu
IHNuYXBzaG90LmNyZWF0ZVJldGFpbmluZ0VkZ2VzUHJvdmlkZXIodGhpcy5zbmFwc2hvdE5vZGVJ
bmRleCwgc2hvd0hpZGRlbkRhdGEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
c25hcHNob3QuY3JlYXRlRWRnZXNQcm92aWRlcih0aGlzLnNuYXBzaG90Tm9kZUluZGV4LCBzaG93
SGlkZGVuRGF0YSk7Ci0gICAgfSwKLQotICAgIF9maW5kQW5jZXN0b3JXaXRoU2FtZVNuYXBzaG90
Tm9kZUlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgYW5jZXN0b3IgPSB0aGlzLl9w
YXJlbnRHcmlkTm9kZTsKLSAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7Ci0gICAgICAgICAgICBp
ZiAoYW5jZXN0b3Iuc25hcHNob3ROb2RlSWQgPT09IHRoaXMuc25hcHNob3ROb2RlSWQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwotICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNl
c3Rvci5fcGFyZW50R3JpZE5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfSwKLQotICAgIF9jcmVhdGVDaGlsZE5vZGU6IGZ1bmN0aW9uKGl0ZW0pCi0gICAgewotICAg
ICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2RlKHRoaXMu
X2RhdGFHcmlkLCB0aGlzLl9pc0Zyb21CYXNlU25hcHNob3QsIGl0ZW0sIHRoaXMpOwotICAgIH0s
Ci0KLSAgICBfY2hpbGRIYXNoRm9yRW50aXR5OiBmdW5jdGlvbihlZGdlKQotICAgIHsKLSAgICAg
ICAgdmFyIHByZWZpeCA9IHRoaXMuc2hvd1JldGFpbmluZ0VkZ2VzID8gZWRnZS5ub2RlLmlkICsg
IiMiIDogIiI7Ci0gICAgICAgIHJldHVybiBwcmVmaXggKyBlZGdlLnR5cGUgKyAiIyIgKyBlZGdl
Lm5hbWU7Ci0gICAgfSwKLQotICAgIF9jaGlsZEhhc2hGb3JOb2RlOiBmdW5jdGlvbihjaGlsZE5v
ZGUpCi0gICAgewotICAgICAgICB2YXIgcHJlZml4ID0gdGhpcy5zaG93UmV0YWluaW5nRWRnZXMg
PyBjaGlsZE5vZGUuc25hcHNob3ROb2RlSWQgKyAiIyIgOiAiIjsKLSAgICAgICAgcmV0dXJuIHBy
ZWZpeCArIGNoaWxkTm9kZS5fcmVmZXJlbmNlVHlwZSArICIjIiArIGNoaWxkTm9kZS5fcmVmZXJl
bmNlTmFtZTsKLSAgICB9LAotCi0gICAgY29tcGFyYXRvcjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIHNvcnRBc2NlbmRpbmcgPSB0aGlzLl9kYXRhR3JpZC5pc1NvcnRPcmRlckFzY2Vu
ZGluZygpOwotICAgICAgICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLl9kYXRhR3Jp
ZC5zb3J0Q29sdW1uSWRlbnRpZmllcigpOwotICAgICAgICB2YXIgc29ydEZpZWxkcyA9IHsKLSAg
ICAgICAgICAgIG9iamVjdDogWyIhZWRnZU5hbWUiLCBzb3J0QXNjZW5kaW5nLCAicmV0YWluZWRT
aXplIiwgZmFsc2VdLAotICAgICAgICAgICAgY291bnQ6IFsiIWVkZ2VOYW1lIiwgdHJ1ZSwgInJl
dGFpbmVkU2l6ZSIsIGZhbHNlXSwKLSAgICAgICAgICAgIHNoYWxsb3dTaXplOiBbInNlbGZTaXpl
Iiwgc29ydEFzY2VuZGluZywgIiFlZGdlTmFtZSIsIHRydWVdLAotICAgICAgICAgICAgcmV0YWlu
ZWRTaXplOiBbInJldGFpbmVkU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICIhZWRnZU5hbWUiLCB0cnVl
XSwKLSAgICAgICAgICAgIGRpc3RhbmNlOiBbImRpc3RhbmNlIiwgc29ydEFzY2VuZGluZywgIl9u
YW1lIiwgdHJ1ZV0KLSAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl0gfHwgWyIhZWRnZU5h
bWUiLCB0cnVlLCAicmV0YWluZWRTaXplIiwgZmFsc2VdOwotICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVh
dGVDb21wYXJhdG9yKHNvcnRGaWVsZHMpOwotICAgIH0sCi0KLSAgICBfZW1wdHlEYXRhOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4geyBjb3VudDogIiIsIGFkZGVkQ291bnQ6ICIi
LCByZW1vdmVkQ291bnQ6ICIiLCBjb3VudERlbHRhOiAiIiwgYWRkZWRTaXplOiAiIiwgcmVtb3Zl
ZFNpemU6ICIiLCBzaXplRGVsdGE6ICIiIH07Ci0gICAgfSwKLQotICAgIF9lbmhhbmNlRGF0YTog
ZnVuY3Rpb24oZGF0YSkKLSAgICB7Ci0gICAgICAgIHZhciBuYW1lID0gdGhpcy5fcmVmZXJlbmNl
TmFtZTsKLSAgICAgICAgaWYgKG5hbWUgPT09ICIiKSBuYW1lID0gIihlbXB0eSkiOwotICAgICAg
ICB2YXIgbmFtZUNsYXNzID0gIm5hbWUiOwotICAgICAgICBzd2l0Y2ggKHRoaXMuX3JlZmVyZW5j
ZVR5cGUpIHsKLSAgICAgICAgY2FzZSAiY29udGV4dCI6Ci0gICAgICAgICAgICBuYW1lQ2xhc3Mg
PSAiY29uc29sZS1mb3JtYXR0ZWQtbnVtYmVyIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICJpbnRlcm5hbCI6Ci0gICAgICAgIGNhc2UgImhpZGRlbiI6Ci0gICAgICAgICAgICBu
YW1lQ2xhc3MgPSAiY29uc29sZS1mb3JtYXR0ZWQtbnVsbCI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSAiZWxlbWVudCI6Ci0gICAgICAgICAgICBuYW1lID0gIlsiICsgbmFtZSAr
ICJdIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFbIm9iamVj
dCJdLm5hbWVDbGFzcyA9IG5hbWVDbGFzczsKLSAgICAgICAgZGF0YVsib2JqZWN0Il0ubmFtZSA9
IG5hbWU7Ci0gICAgICAgIGRhdGFbImRpc3RhbmNlIl0gPSB0aGlzLl9kaXN0YW5jZTsKLSAgICAg
ICAgcmV0dXJuIGRhdGE7Ci0gICAgfSwKLQotICAgIF9wcmVmaXhPYmplY3RDZWxsOiBmdW5jdGlv
bihkaXYsIGRhdGEpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY3ljbGVkV2l0aEFuY2VzdG9y
R3JpZE5vZGUpCi0gICAgICAgICAgICBkaXYuY2xhc3NOYW1lICs9ICIgY3ljbGVkLWFuY2Vzc29y
LW5vZGUiOwotCi0gICAgICAgIHZhciBuYW1lU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKLSAgICAgICAgbmFtZVNwYW4uY2xhc3NOYW1lID0gZGF0YS5uYW1lQ2xhc3M7Ci0g
ICAgICAgIG5hbWVTcGFuLnRleHRDb250ZW50ID0gZGF0YS5uYW1lOwotICAgICAgICBkaXYuYXBw
ZW5kQ2hpbGQobmFtZVNwYW4pOwotCi0gICAgICAgIHZhciBzZXBhcmF0b3JTcGFuID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBzZXBhcmF0b3JTcGFuLmNsYXNzTmFt
ZSA9ICJncmF5ZWQiOwotICAgICAgICBzZXBhcmF0b3JTcGFuLnRleHRDb250ZW50ID0gdGhpcy5z
aG93UmV0YWluaW5nRWRnZXMgPyAiIGluICIgOiAiIDo6ICI7Ci0gICAgICAgIGRpdi5hcHBlbmRD
aGlsZChzZXBhcmF0b3JTcGFuKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlCi19Ci0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVy
aWNPYmplY3ROb2RlfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VOb2Rl
ID0gZnVuY3Rpb24odHJlZSwgYmFzZVNuYXBzaG90LCBzbmFwc2hvdCwgbm9kZSkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUuY2FsbCh0aGlzLCB0cmVl
LCBub2RlKTsKLSAgICB0aGlzLl9iYXNlU25hcHNob3RPclNuYXBzaG90ID0gYmFzZVNuYXBzaG90
IHx8IHNuYXBzaG90OwotICAgIHRoaXMuX2lzRGVsZXRlZE5vZGUgPSAhIWJhc2VTbmFwc2hvdDsK
LSAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuKCk7Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90SW5zdGFuY2VOb2RlLnByb3RvdHlwZSA9IHsKLSAgICBjcmVhdGVQcm92aWRlcjogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNob3dIaWRkZW5EYXRhID0gV2ViSW5zcGVjdG9y
LnNldHRpbmdzLnNob3dIZWFwU25hcHNob3RPYmplY3RzSGlkZGVuUHJvcGVydGllcy5nZXQoKTsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VTbmFwc2hvdE9yU25hcHNob3QuY3JlYXRlRWRnZXNQ
cm92aWRlcigKLSAgICAgICAgICAgIHRoaXMuc25hcHNob3ROb2RlSW5kZXgsCi0gICAgICAgICAg
ICBzaG93SGlkZGVuRGF0YSk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVDaGlsZE5vZGU6IGZ1bmN0
aW9uKGl0ZW0pCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RPYmplY3ROb2RlKHRoaXMuX2RhdGFHcmlkLCB0aGlzLl9pc0RlbGV0ZWROb2RlLCBpdGVt
LCBudWxsKTsKLSAgICB9LAotCi0gICAgX2NoaWxkSGFzaEZvckVudGl0eTogZnVuY3Rpb24oZWRn
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlZGdlLnR5cGUgKyAiIyIgKyBlZGdlLm5hbWU7Ci0g
ICAgfSwKLQotICAgIF9jaGlsZEhhc2hGb3JOb2RlOiBmdW5jdGlvbihjaGlsZE5vZGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gY2hpbGROb2RlLl9yZWZlcmVuY2VUeXBlICsgIiMiICsgY2hpbGRO
b2RlLl9yZWZlcmVuY2VOYW1lOwotICAgIH0sCi0KLSAgICBjb21wYXJhdG9yOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB2YXIgc29ydEFzY2VuZGluZyA9IHRoaXMuX2RhdGFHcmlkLmlzU29y
dE9yZGVyQXNjZW5kaW5nKCk7Ci0gICAgICAgIHZhciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRo
aXMuX2RhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyKCk7Ci0gICAgICAgIHZhciBzb3J0Rmll
bGRzID0gewotICAgICAgICAgICAgb2JqZWN0OiBbIiFlZGdlTmFtZSIsIHNvcnRBc2NlbmRpbmcs
ICJyZXRhaW5lZFNpemUiLCBmYWxzZV0sCi0gICAgICAgICAgICBkaXN0YW5jZTogWyJkaXN0YW5j
ZSIsIHNvcnRBc2NlbmRpbmcsICJyZXRhaW5lZFNpemUiLCBmYWxzZV0sCi0gICAgICAgICAgICBj
b3VudDogWyIhZWRnZU5hbWUiLCB0cnVlLCAicmV0YWluZWRTaXplIiwgZmFsc2VdLAotICAgICAg
ICAgICAgYWRkZWRTaXplOiBbInNlbGZTaXplIiwgc29ydEFzY2VuZGluZywgIiFlZGdlTmFtZSIs
IHRydWVdLAotICAgICAgICAgICAgcmVtb3ZlZFNpemU6IFsic2VsZlNpemUiLCBzb3J0QXNjZW5k
aW5nLCAiIWVkZ2VOYW1lIiwgdHJ1ZV0sCi0gICAgICAgICAgICBzaGFsbG93U2l6ZTogWyJzZWxm
U2l6ZSIsIHNvcnRBc2NlbmRpbmcsICIhZWRnZU5hbWUiLCB0cnVlXSwKLSAgICAgICAgICAgIHJl
dGFpbmVkU2l6ZTogWyJyZXRhaW5lZFNpemUiLCBzb3J0QXNjZW5kaW5nLCAiIWVkZ2VOYW1lIiwg
dHJ1ZV0KLSAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl0gfHwgWyIhZWRnZU5hbWUiLCB0
cnVlLCAicmV0YWluZWRTaXplIiwgZmFsc2VdOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21w
YXJhdG9yKHNvcnRGaWVsZHMpOwotICAgIH0sCi0KLSAgICBfZW1wdHlEYXRhOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4ge2NvdW50OiAiIiwgY291bnREZWx0YTogIiIsIHNpemVE
ZWx0YTogIiJ9OwotICAgIH0sCi0KLSAgICBfZW5oYW5jZURhdGE6IGZ1bmN0aW9uKGRhdGEpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5faXNEZWxldGVkTm9kZSkgewotICAgICAgICAgICAgZGF0
YVsiYWRkZWRDb3VudCJdID0gIiI7Ci0gICAgICAgICAgICBkYXRhWyJhZGRlZFNpemUiXSA9ICIi
OwotICAgICAgICAgICAgZGF0YVsicmVtb3ZlZENvdW50Il0gPSAiXHUyMDIyIjsKLSAgICAgICAg
ICAgIGRhdGFbInJlbW92ZWRTaXplIl0gPSBOdW1iZXIud2l0aFRob3VzYW5kc1NlcGFyYXRvcih0
aGlzLl9zaGFsbG93U2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkYXRhWyJh
ZGRlZENvdW50Il0gPSAiXHUyMDIyIjsKLSAgICAgICAgICAgIGRhdGFbImFkZGVkU2l6ZSJdID0g
TnVtYmVyLndpdGhUaG91c2FuZHNTZXBhcmF0b3IodGhpcy5fc2hhbGxvd1NpemUpOwotICAgICAg
ICAgICAgZGF0YVsicmVtb3ZlZENvdW50Il0gPSAiIjsKLSAgICAgICAgICAgIGRhdGFbInJlbW92
ZWRTaXplIl0gPSAiIjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGF0YTsKLSAgICB9LAot
Ci0gICAgZ2V0IGlzRGVsZXRlZE5vZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lz
RGVsZXRlZE5vZGU7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZX0KLSAq
LwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZSA9IGZ1bmN0aW9uKHRy
ZWUsIGNsYXNzTmFtZSwgYWdncmVnYXRlLCBhZ2dyZWdhdGVzS2V5KQotewotICAgIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5jYWxsKHRoaXMsIHRyZWUsIGFnZ3JlZ2F0ZS5jb3Vu
dCA+IDApOwotICAgIHRoaXMuX25hbWUgPSBjbGFzc05hbWU7Ci0gICAgdGhpcy5fYWdncmVnYXRl
c0tleSA9IGFnZ3JlZ2F0ZXNLZXk7Ci0gICAgdGhpcy5fZGlzdGFuY2UgPSBhZ2dyZWdhdGUuZGlz
dGFuY2U7Ci0gICAgdGhpcy5fY291bnQgPSBhZ2dyZWdhdGUuY291bnQ7Ci0gICAgdGhpcy5fc2hh
bGxvd1NpemUgPSBhZ2dyZWdhdGUuc2VsZjsKLSAgICB0aGlzLl9yZXRhaW5lZFNpemUgPSBhZ2dy
ZWdhdGUubWF4UmV0OwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JO
b2RlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcmV0
dXJuIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eX0KLSAgICAgKi8KLSAg
ICBjcmVhdGVQcm92aWRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2RhdGFHcmlkLnNuYXBzaG90LmNyZWF0ZU5vZGVzUHJvdmlkZXJGb3JDbGFzcyh0aGlzLl9uYW1l
LCB0aGlzLl9hZ2dyZWdhdGVzS2V5KQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gc25hcHNob3RPYmplY3RJZAotICAgICAqLwotICAgIHJldmVhbE5vZGVCeVNuYXBz
aG90T2JqZWN0SWQ6IGZ1bmN0aW9uKHNuYXBzaG90T2JqZWN0SWQpCi0gICAgewotICAgICAgICBm
dW5jdGlvbiBkaWRFeHBhbmQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9wcm92aWRl
cigpLm5vZGVQb3NpdGlvbihzbmFwc2hvdE9iamVjdElkLCBkaWRHZXROb2RlUG9zaXRpb24uYmlu
ZCh0aGlzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkaWRHZXROb2RlUG9zaXRp
b24obm9kZVBvc2l0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9kZVBvc2l0aW9u
ID09PSAtMSkKLSAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVDaGlsZHJlbihub2RlUG9zaXRpb24s
IG51bGwsIGRpZFBvcHVsYXRlQ2hpbGRyZW4uYmluZCh0aGlzLCBub2RlUG9zaXRpb24pKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRpZFBvcHVsYXRlQ2hpbGRyZW4obm9kZVBvc2l0
aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaW5kZXhPZkZpcnNDaGlsZEluUmFuZ2Ug
PSAwOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZXRyaWV2ZWRDaGls
ZHJlblJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhp
cy5fcmV0cmlldmVkQ2hpbGRyZW5SYW5nZXNbaV07Ci0gICAgICAgICAgICAgICBpZiAocmFuZ2Uu
ZnJvbSA8PSBub2RlUG9zaXRpb24gJiYgbm9kZVBvc2l0aW9uIDwgcmFuZ2UudG8pIHsKLSAgICAg
ICAgICAgICAgICAgICB2YXIgY2hpbGRJbmRleCA9IGluZGV4T2ZGaXJzQ2hpbGRJblJhbmdlICsg
bm9kZVBvc2l0aW9uIC0gcmFuZ2UuZnJvbTsKLSAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFu
Y2VOb2RlID0gdGhpcy5jaGlsZHJlbltjaGlsZEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICB0
aGlzLl9kYXRhR3JpZC5oaWdobGlnaHROb2RlKGluc3RhbmNlTm9kZSk7Ci0gICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgaW5kZXhPZkZp
cnNDaGlsZEluUmFuZ2UgKz0gcmFuZ2UudG8gLSByYW5nZS5mcm9tICsgMTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZXhwYW5kV2l0aG91dFBvcHVsYXRlKGRpZEV4
cGFuZC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgY3JlYXRlQ2VsbDogZnVuY3Rpb24oY29s
dW1uSWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHZhciBjZWxsID0gY29sdW1uSWRlbnRpZmll
ciAhPT0gIm9iamVjdCIgPyB0aGlzLl9jcmVhdGVWYWx1ZUNlbGwoY29sdW1uSWRlbnRpZmllcikg
OiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGwu
Y2FsbCh0aGlzLCBjb2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaE1h
dGNoZWQpCi0gICAgICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIpOwotICAg
ICAgICByZXR1cm4gY2VsbDsKLSAgICB9LAotCi0gICAgX2NyZWF0ZUNoaWxkTm9kZTogZnVuY3Rp
b24oaXRlbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEluc3RhbmNlTm9kZSh0aGlzLl9kYXRhR3JpZCwgbnVsbCwgdGhpcy5fZGF0YUdyaWQuc25h
cHNob3QsIGl0ZW0pOwotICAgIH0sCi0KLSAgICBjb21wYXJhdG9yOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB2YXIgc29ydEFzY2VuZGluZyA9IHRoaXMuX2RhdGFHcmlkLmlzU29ydE9yZGVy
QXNjZW5kaW5nKCk7Ci0gICAgICAgIHZhciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRoaXMuX2Rh
dGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyKCk7Ci0gICAgICAgIHZhciBzb3J0RmllbGRzID0g
ewotICAgICAgICAgICAgb2JqZWN0OiBbImlkIiwgc29ydEFzY2VuZGluZywgInJldGFpbmVkU2l6
ZSIsIGZhbHNlXSwKLSAgICAgICAgICAgIGRpc3RhbmNlOiBbImRpc3RhbmNlIiwgdHJ1ZSwgInJl
dGFpbmVkU2l6ZSIsIGZhbHNlXSwKLSAgICAgICAgICAgIGNvdW50OiBbImlkIiwgdHJ1ZSwgInJl
dGFpbmVkU2l6ZSIsIGZhbHNlXSwKLSAgICAgICAgICAgIHNoYWxsb3dTaXplOiBbInNlbGZTaXpl
Iiwgc29ydEFzY2VuZGluZywgImlkIiwgdHJ1ZV0sCi0gICAgICAgICAgICByZXRhaW5lZFNpemU6
IFsicmV0YWluZWRTaXplIiwgc29ydEFzY2VuZGluZywgImlkIiwgdHJ1ZV0KLSAgICAgICAgfVtz
b3J0Q29sdW1uSWRlbnRpZmllcl07Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBlLmNyZWF0ZUNvbXBhcmF0b3Io
c29ydEZpZWxkcyk7Ci0gICAgfSwKLQotICAgIF9jaGlsZEhhc2hGb3JFbnRpdHk6IGZ1bmN0aW9u
KG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS5pZDsKLSAgICB9LAotCi0gICAgX2No
aWxkSGFzaEZvck5vZGU6IGZ1bmN0aW9uKGNoaWxkTm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjaGlsZE5vZGUuc25hcHNob3ROb2RlSWQ7Ci0gICAgfSwKLQotICAgIGdldCBkYXRhKCkKLSAg
ICB7Ci0gICAgICAgIHZhciBkYXRhID0geyBvYmplY3Q6IHRoaXMuX25hbWUgfTsKLSAgICAgICAg
ZGF0YVsiY291bnQiXSA9ICBOdW1iZXIud2l0aFRob3VzYW5kc1NlcGFyYXRvcih0aGlzLl9jb3Vu
dCk7Ci0gICAgICAgIGRhdGFbImRpc3RhbmNlIl0gPSAgdGhpcy5fZGlzdGFuY2U7Ci0gICAgICAg
IGRhdGFbInNoYWxsb3dTaXplIl0gPSBOdW1iZXIud2l0aFRob3VzYW5kc1NlcGFyYXRvcih0aGlz
Ll9zaGFsbG93U2l6ZSk7Ci0gICAgICAgIGRhdGFbInJldGFpbmVkU2l6ZSJdID0gTnVtYmVyLndp
dGhUaG91c2FuZHNTZXBhcmF0b3IodGhpcy5fcmV0YWluZWRTaXplKTsKLSAgICAgICAgZGF0YVsi
Y291bnQtcGVyY2VudCJdID0gIHRoaXMuX3RvUGVyY2VudFN0cmluZyh0aGlzLl9jb3VudFBlcmNl
bnQpOwotICAgICAgICBkYXRhWyJzaGFsbG93U2l6ZS1wZXJjZW50Il0gPSB0aGlzLl90b1BlcmNl
bnRTdHJpbmcodGhpcy5fc2hhbGxvd1NpemVQZXJjZW50KTsKLSAgICAgICAgZGF0YVsicmV0YWlu
ZWRTaXplLXBlcmNlbnQiXSA9IHRoaXMuX3RvUGVyY2VudFN0cmluZyh0aGlzLl9yZXRhaW5lZFNp
emVQZXJjZW50KTsKLSAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgfSwKLQotICAgIGdldCBfY291
bnRQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb3VudCAvIHRoaXMuZGF0
YUdyaWQuc25hcHNob3Qubm9kZUNvdW50ICogMTAwLjA7Ci0gICAgfSwKLQotICAgIGdldCBfcmV0
YWluZWRTaXplUGVyY2VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmV0YWluZWRT
aXplIC8gdGhpcy5kYXRhR3JpZC5zbmFwc2hvdC50b3RhbFNpemUgKiAxMDAuMDsKLSAgICB9LAot
Ci0gICAgZ2V0IF9zaGFsbG93U2l6ZVBlcmNlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX3NoYWxsb3dTaXplIC8gdGhpcy5kYXRhR3JpZC5zbmFwc2hvdC50b3RhbFNpemUgKiAxMDAu
MDsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3Jp
ZE5vZGUucHJvdG90eXBlCi19Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eX0KLSAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHl9IGFkZGVkTm9kZXNQcm92aWRlcgot
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eX0gZGVsZXRl
ZE5vZGVzUHJvdmlkZXIKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rlc1By
b3ZpZGVyID0gZnVuY3Rpb24oYWRkZWROb2Rlc1Byb3ZpZGVyLCBkZWxldGVkTm9kZXNQcm92aWRl
ciwgYWRkZWRDb3VudCwgcmVtb3ZlZENvdW50KQotewotICAgIHRoaXMuX2FkZGVkTm9kZXNQcm92
aWRlciA9IGFkZGVkTm9kZXNQcm92aWRlcjsKLSAgICB0aGlzLl9kZWxldGVkTm9kZXNQcm92aWRl
ciA9IGRlbGV0ZWROb2Rlc1Byb3ZpZGVyOwotICAgIHRoaXMuX2FkZGVkQ291bnQgPSBhZGRlZENv
dW50OwotICAgIHRoaXMuX3JlbW92ZWRDb3VudCA9IHJlbW92ZWRDb3VudDsKLX0KLQotV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rlc1Byb3ZpZGVyLnByb3RvdHlwZSA9IHsKLSAgICBk
aXNwb3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9hZGRlZE5vZGVzUHJvdmlk
ZXIuZGlzcG9zZSgpOwotICAgICAgICB0aGlzLl9kZWxldGVkTm9kZXNQcm92aWRlci5kaXNwb3Nl
KCk7Ci0gICAgfSwKLQotICAgIGlzRW1wdHk6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgY2FsbGJhY2soZmFsc2UpOwotICAgIH0sCi0KLSAgICBzZXJpYWxpemVJdGVtc1Jhbmdl
OiBmdW5jdGlvbihiZWdpblBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY2FsbGJhY2spCi0gICAgewot
ICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZlQWxsSXRlbXMoaXRlbXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGl0ZW1zLnRvdGFsTGVuZ3RoID0gdGhpcy5fYWRkZWRDb3VudCArIHRoaXMuX3Jl
bW92ZWRDb3VudDsKLSAgICAgICAgICAgIGNhbGxiYWNrKGl0ZW1zKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGRpZFJlY2VpdmVEZWxldGVkSXRlbXMoYWRkZWRJdGVtcywgaXRlbXMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYWRkZWRJdGVtcy5sZW5ndGgpCi0gICAgICAg
ICAgICAgICAgYWRkZWRJdGVtcy5zdGFydFBvc2l0aW9uID0gdGhpcy5fYWRkZWRDb3VudCArIGl0
ZW1zLnN0YXJ0UG9zaXRpb247Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1z
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaXRlbXNbaV0uaXNBZGRlZE5vdFJlbW92
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goaXRlbXNbaV0pOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYWRkZWRJdGVtcy5lbmRQb3NpdGlvbiA9IHRoaXMu
X2FkZGVkQ291bnQgKyBpdGVtcy5lbmRQb3NpdGlvbjsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVB
bGxJdGVtcy5jYWxsKHRoaXMsIGFkZGVkSXRlbXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gZGlkUmVjZWl2ZUFkZGVkSXRlbXMoaXRlbXMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAg
aXRlbXNbaV0uaXNBZGRlZE5vdFJlbW92ZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGl0ZW1z
LmVuZFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2RlbGV0ZWROb2Rlc1Byb3ZpZGVyLnNlcmlhbGl6ZUl0ZW1zUmFuZ2UoMCwgZW5kUG9zaXRpb24g
LSBpdGVtcy5lbmRQb3NpdGlvbiwgZGlkUmVjZWl2ZURlbGV0ZWRJdGVtcy5iaW5kKHRoaXMsIGl0
ZW1zKSk7Ci0KLSAgICAgICAgICAgIGl0ZW1zLnRvdGFsTGVuZ3RoID0gdGhpcy5fYWRkZWRDb3Vu
dCArIHRoaXMuX3JlbW92ZWRDb3VudDsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVBbGxJdGVtcy5j
YWxsKHRoaXMsIGl0ZW1zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiZWdpblBvc2l0aW9u
IDwgdGhpcy5fYWRkZWRDb3VudCkKLSAgICAgICAgICAgIHRoaXMuX2FkZGVkTm9kZXNQcm92aWRl
ci5zZXJpYWxpemVJdGVtc1JhbmdlKGJlZ2luUG9zaXRpb24sIGVuZFBvc2l0aW9uLCBkaWRSZWNl
aXZlQWRkZWRJdGVtcy5iaW5kKHRoaXMpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhp
cy5fZGVsZXRlZE5vZGVzUHJvdmlkZXIuc2VyaWFsaXplSXRlbXNSYW5nZShiZWdpblBvc2l0aW9u
IC0gdGhpcy5fYWRkZWRDb3VudCwgZW5kUG9zaXRpb24gLSB0aGlzLl9hZGRlZENvdW50LCBkaWRS
ZWNlaXZlRGVsZXRlZEl0ZW1zLmJpbmQodGhpcywgW10pKTsKLSAgICB9LAotCi0gICAgc29ydEFu
ZFJld2luZDogZnVuY3Rpb24oY29tcGFyYXRvciwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBm
dW5jdGlvbiBhZnRlclNvcnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9kZWxldGVk
Tm9kZXNQcm92aWRlci5zb3J0QW5kUmV3aW5kKGNvbXBhcmF0b3IsIGNhbGxiYWNrKTsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9hZGRlZE5vZGVzUHJvdmlkZXIuc29ydEFuZFJld2luZChjb21w
YXJhdG9yLCBhZnRlclNvcnQuYmluZCh0aGlzKSk7Ci0gICAgfQotfTsKLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGV9
Ci0gKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZSA9IGZ1bmN0aW9uKHRyZWUs
IGNsYXNzTmFtZSwgZGlmZkZvckNsYXNzKQotewotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RHcmlkTm9kZS5jYWxsKHRoaXMsIHRyZWUsIHRydWUpOwotICAgIHRoaXMuX25hbWUgPSBjbGFz
c05hbWU7Ci0KLSAgICB0aGlzLl9hZGRlZENvdW50ID0gZGlmZkZvckNsYXNzLmFkZGVkQ291bnQ7
Ci0gICAgdGhpcy5fcmVtb3ZlZENvdW50ID0gZGlmZkZvckNsYXNzLnJlbW92ZWRDb3VudDsKLSAg
ICB0aGlzLl9jb3VudERlbHRhID0gZGlmZkZvckNsYXNzLmNvdW50RGVsdGE7Ci0gICAgdGhpcy5f
YWRkZWRTaXplID0gZGlmZkZvckNsYXNzLmFkZGVkU2l6ZTsKLSAgICB0aGlzLl9yZW1vdmVkU2l6
ZSA9IGRpZmZGb3JDbGFzcy5yZW1vdmVkU2l6ZTsKLSAgICB0aGlzLl9zaXplRGVsdGEgPSBkaWZm
Rm9yQ2xhc3Muc2l6ZURlbHRhOwotICAgIHRoaXMuX2RlbGV0ZWRJbmRleGVzID0gZGlmZkZvckNs
YXNzLmRlbGV0ZWRJbmRleGVzOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5v
ZGUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEByZXR1
cm4ge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZXNQcm92aWRlcn0KLSAgICAgKi8K
LSAgICBjcmVhdGVQcm92aWRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHRyZWUg
PSB0aGlzLl9kYXRhR3JpZDsKLSAgICAgICAgcmV0dXJuICBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERpZmZOb2Rlc1Byb3ZpZGVyKAotICAgICAgICAgICAgdHJlZS5zbmFwc2hvdC5jcmVh
dGVBZGRlZE5vZGVzUHJvdmlkZXIodHJlZS5iYXNlU25hcHNob3QudWlkLCB0aGlzLl9uYW1lKSwK
LSAgICAgICAgICAgIHRyZWUuYmFzZVNuYXBzaG90LmNyZWF0ZURlbGV0ZWROb2Rlc1Byb3ZpZGVy
KHRoaXMuX2RlbGV0ZWRJbmRleGVzKSwKLSAgICAgICAgICAgIHRoaXMuX2FkZGVkQ291bnQsCi0g
ICAgICAgICAgICB0aGlzLl9yZW1vdmVkQ291bnQpOwotICAgIH0sCi0KLSAgICBfY3JlYXRlQ2hp
bGROb2RlOiBmdW5jdGlvbihpdGVtKQotICAgIHsKLSAgICAgICAgaWYgKGl0ZW0uaXNBZGRlZE5v
dFJlbW92ZWQpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RJbnN0YW5jZU5vZGUodGhpcy5fZGF0YUdyaWQsIG51bGwsIHRoaXMuX2RhdGFHcmlkLnNuYXBz
aG90LCBpdGVtKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VOb2RlKHRoaXMuX2RhdGFHcmlkLCB0aGlzLl9kYXRh
R3JpZC5iYXNlU25hcHNob3QsIG51bGwsIGl0ZW0pOwotICAgIH0sCi0KLSAgICBfY2hpbGRIYXNo
Rm9yRW50aXR5OiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUuaWQ7
Ci0gICAgfSwKLQotICAgIF9jaGlsZEhhc2hGb3JOb2RlOiBmdW5jdGlvbihjaGlsZE5vZGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gY2hpbGROb2RlLnNuYXBzaG90Tm9kZUlkOwotICAgIH0sCi0K
LSAgICBjb21wYXJhdG9yOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc29ydEFzY2Vu
ZGluZyA9IHRoaXMuX2RhdGFHcmlkLmlzU29ydE9yZGVyQXNjZW5kaW5nKCk7Ci0gICAgICAgIHZh
ciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRoaXMuX2RhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlm
aWVyKCk7Ci0gICAgICAgIHZhciBzb3J0RmllbGRzID0gewotICAgICAgICAgICAgb2JqZWN0OiBb
ImlkIiwgc29ydEFzY2VuZGluZywgInNlbGZTaXplIiwgZmFsc2VdLAotICAgICAgICAgICAgYWRk
ZWRDb3VudDogWyJzZWxmU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdLAotICAgICAg
ICAgICAgcmVtb3ZlZENvdW50OiBbInNlbGZTaXplIiwgc29ydEFzY2VuZGluZywgImlkIiwgdHJ1
ZV0sCi0gICAgICAgICAgICBjb3VudERlbHRhOiBbInNlbGZTaXplIiwgc29ydEFzY2VuZGluZywg
ImlkIiwgdHJ1ZV0sCi0gICAgICAgICAgICBhZGRlZFNpemU6IFsic2VsZlNpemUiLCBzb3J0QXNj
ZW5kaW5nLCAiaWQiLCB0cnVlXSwKLSAgICAgICAgICAgIHJlbW92ZWRTaXplOiBbInNlbGZTaXpl
Iiwgc29ydEFzY2VuZGluZywgImlkIiwgdHJ1ZV0sCi0gICAgICAgICAgICBzaXplRGVsdGE6IFsi
c2VsZlNpemUiLCBzb3J0QXNjZW5kaW5nLCAiaWQiLCB0cnVlXQotICAgICAgICB9W3NvcnRDb2x1
bW5JZGVudGlmaWVyXTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RG
aWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUuY3JlYXRlQ29tcGFyYXRvcihzb3J0Rmll
bGRzKTsKLSAgICB9LAotCi0gICAgX3NpZ25Gb3JEZWx0YTogZnVuY3Rpb24oZGVsdGEpCi0gICAg
ewotICAgICAgICBpZiAoZGVsdGEgPT09IDApCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAg
ICAgIGlmIChkZWx0YSA+IDApCi0gICAgICAgICAgICByZXR1cm4gIisiOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gIlx1MjIxMiI7ICAvLyBNYXRoIG1pbnVzIHNpZ24sIHNhbWUg
d2lkdGggYXMgcGx1cy4KLSAgICB9LAotCi0gICAgZ2V0IGRhdGEoKQotICAgIHsKLSAgICAgICAg
dmFyIGRhdGEgPSB7b2JqZWN0OiB0aGlzLl9uYW1lfTsKLQotICAgICAgICBkYXRhWyJhZGRlZENv
dW50Il0gPSBOdW1iZXIud2l0aFRob3VzYW5kc1NlcGFyYXRvcih0aGlzLl9hZGRlZENvdW50KTsK
LSAgICAgICAgZGF0YVsicmVtb3ZlZENvdW50Il0gPSBOdW1iZXIud2l0aFRob3VzYW5kc1NlcGFy
YXRvcih0aGlzLl9yZW1vdmVkQ291bnQpOwotICAgICAgICBkYXRhWyJjb3VudERlbHRhIl0gPSB0
aGlzLl9zaWduRm9yRGVsdGEodGhpcy5fY291bnREZWx0YSkgKyBOdW1iZXIud2l0aFRob3VzYW5k
c1NlcGFyYXRvcihNYXRoLmFicyh0aGlzLl9jb3VudERlbHRhKSk7Ci0gICAgICAgIGRhdGFbImFk
ZGVkU2l6ZSJdID0gTnVtYmVyLndpdGhUaG91c2FuZHNTZXBhcmF0b3IodGhpcy5fYWRkZWRTaXpl
KTsKLSAgICAgICAgZGF0YVsicmVtb3ZlZFNpemUiXSA9IE51bWJlci53aXRoVGhvdXNhbmRzU2Vw
YXJhdG9yKHRoaXMuX3JlbW92ZWRTaXplKTsKLSAgICAgICAgZGF0YVsic2l6ZURlbHRhIl0gPSB0
aGlzLl9zaWduRm9yRGVsdGEodGhpcy5fc2l6ZURlbHRhKSArIE51bWJlci53aXRoVGhvdXNhbmRz
U2VwYXJhdG9yKE1hdGguYWJzKHRoaXMuX3NpemVEZWx0YSkpOwotCi0gICAgICAgIHJldHVybiBk
YXRhOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RH
cmlkTm9kZS5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVu
ZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZX0KLSAqLwotV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdERvbWluYXRvck9iamVjdE5vZGUgPSBmdW5jdGlvbih0cmVl
LCBub2RlKQotewotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9k
ZS5jYWxsKHRoaXMsIHRyZWUsIG5vZGUpOwotICAgIHRoaXMudXBkYXRlSGFzQ2hpbGRyZW4oKTsK
LX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REb21pbmF0b3JPYmplY3ROb2RlLnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eX0KLSAgICAgKi8KLSAgICBjcmVhdGVQ
cm92aWRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFHcmlk
LnNuYXBzaG90LmNyZWF0ZU5vZGVzUHJvdmlkZXJGb3JEb21pbmF0b3IodGhpcy5zbmFwc2hvdE5v
ZGVJbmRleCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzbmFw
c2hvdE9iamVjdElkCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERvbWluYXRvck9iamVjdE5vZGUpfSBjYWxsYmFjawotICAgICAqLwotICAgIHJldHJp
ZXZlQ2hpbGRCeVNuYXBzaG90T2JqZWN0SWQ6IGZ1bmN0aW9uKHNuYXBzaG90T2JqZWN0SWQsIGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZGlkRXhwYW5kKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdGhpcy5fcHJvdmlkZXIoKS5ub2RlUG9zaXRpb24oc25hcHNob3RPYmplY3RJ
ZCwgZGlkR2V0Tm9kZVBvc2l0aW9uLmJpbmQodGhpcykpOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gZGlkR2V0Tm9kZVBvc2l0aW9uKG5vZGVQb3NpdGlvbikKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG5vZGVQb3NpdGlvbiA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LmNvbGxhcHNlKCk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZUNoaWxkcmVuKG5vZGVQb3Np
dGlvbiwgbnVsbCwgZGlkUG9wdWxhdGVDaGlsZHJlbi5iaW5kKHRoaXMsIG5vZGVQb3NpdGlvbikp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZGlkUG9wdWxhdGVDaGlsZHJlbihub2Rl
UG9zaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRG
b3JQb3NpdGlvbihub2RlUG9zaXRpb24pOwotICAgICAgICAgICAgY2FsbGJhY2soY2hpbGQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIGhhc0NoaWxkcmVuIGZsYWcgaXMgdXBk
YXRlZCBiZWZvcmUgZXhwYW5kaW5nIHRoaXMgbm9kZSBhcyB1cGRhdGVIYXNDaGlsZHJlbiByZXNw
b25zZQotICAgICAgICAvLyBtYXkgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQuCi0gICAgICAg
IHRoaXMuaGFzQ2hpbGRyZW4gPSB0cnVlOwotICAgICAgICB0aGlzLmV4cGFuZFdpdGhvdXRQb3B1
bGF0ZShkaWRFeHBhbmQuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVDaGlsZE5v
ZGU6IGZ1bmN0aW9uKGl0ZW0pCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REb21pbmF0b3JPYmplY3ROb2RlKHRoaXMuX2RhdGFHcmlkLCBpdGVtKTsK
LSAgICB9LAotCi0gICAgX2NoaWxkSGFzaEZvckVudGl0eTogZnVuY3Rpb24obm9kZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBub2RlLmlkOwotICAgIH0sCi0KLSAgICBfY2hpbGRIYXNoRm9yTm9k
ZTogZnVuY3Rpb24oY2hpbGROb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5z
bmFwc2hvdE5vZGVJZDsKLSAgICB9LAotCi0gICAgY29tcGFyYXRvcjogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIHNvcnRBc2NlbmRpbmcgPSB0aGlzLl9kYXRhR3JpZC5pc1NvcnRPcmRl
ckFzY2VuZGluZygpOwotICAgICAgICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLl9k
YXRhR3JpZC5zb3J0Q29sdW1uSWRlbnRpZmllcigpOwotICAgICAgICB2YXIgc29ydEZpZWxkcyA9
IHsKLSAgICAgICAgICAgIG9iamVjdDogWyJpZCIsIHNvcnRBc2NlbmRpbmcsICJyZXRhaW5lZFNp
emUiLCBmYWxzZV0sCi0gICAgICAgICAgICBzaGFsbG93U2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRB
c2NlbmRpbmcsICJpZCIsIHRydWVdLAotICAgICAgICAgICAgcmV0YWluZWRTaXplOiBbInJldGFp
bmVkU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdCi0gICAgICAgIH1bc29ydENvbHVt
bklkZW50aWZpZXJdOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZp
bHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yKHNvcnRGaWVs
ZHMpOwotICAgIH0sCi0KLSAgICBfZW1wdHlEYXRhOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4ge307Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlwZQotfQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmNmOGZlLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxl
bWVudHMge1dlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW19Ci0gKi8KLVdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RMb2FkZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fcmVzZXQoKTsKLX0KLQot
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7Ci0gICAgZGlzcG9z
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzZXQoKTsKLSAgICB9LAotCi0g
ICAgX3Jlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9qc29uID0gIiI7Ci0g
ICAgICAgIHRoaXMuX3N0YXRlID0gImZpbmQtc25hcHNob3QtaW5mbyI7Ci0gICAgICAgIHRoaXMu
X3NuYXBzaG90ID0ge307Ci0gICAgfSwKLQotICAgIGNsb3NlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fanNvbikKLSAgICAgICAgICAgIHRoaXMuX3BhcnNlU3RyaW5nc0Fy
cmF5KCk7Ci0gICAgfSwKLQotICAgIGJ1aWxkU25hcHNob3Q6IGZ1bmN0aW9uKGNvbnN0cnVjdG9y
TmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IFdlYkluc3BlY3Rvcltjb25z
dHJ1Y3Rvck5hbWVdOwotICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IGNvbnN0cnVjdG9yKHRoaXMu
X3NuYXBzaG90KTsKLSAgICAgICAgdGhpcy5fcmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9LAotCi0gICAgX3BhcnNlVWludEFycmF5OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgaW5kZXggPSAwOwotICAgICAgICB2YXIgY2hhcjAgPSAiMCIuY2hhckNvZGVBdCgw
KSwgY2hhcjkgPSAiOSIuY2hhckNvZGVBdCgwKSwgY2xvc2luZ0JyYWNrZXQgPSAiXSIuY2hhckNv
ZGVBdCgwKTsKLSAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuX2pzb24ubGVuZ3RoOwotICAgICAg
ICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNvZGUgPSB0aGlzLl9qc29uLmNoYXJDb2RlQXQoaW5kZXgpOwot
ICAgICAgICAgICAgICAgIGlmIChjaGFyMCA8PSBjb2RlICYmIGNvZGUgPD0gY2hhcjkpCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvZGUgPT09
IGNsb3NpbmdCcmFja2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2pzb24gPSB0aGlz
Ll9qc29uLnNsaWNlKGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fanNvbiA9ICIiOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdmFyIG5leHROdW1iZXIgPSAwOwotICAgICAgICAgICAgdmFy
IHN0YXJ0SW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
ewotICAgICAgICAgICAgICAgIHZhciBjb2RlID0gdGhpcy5fanNvbi5jaGFyQ29kZUF0KGluZGV4
KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcjAgPiBjb2RlIHx8IGNvZGUgPiBjaGFyOSkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbmV4dE51bWJlciAqPSAx
MDsKLSAgICAgICAgICAgICAgICBuZXh0TnVtYmVyICs9IChjb2RlIC0gY2hhcjApOwotICAgICAg
ICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kZXgg
PT09IGxlbmd0aCkgewotICAgICAgICAgICAgICAgIHRoaXMuX2pzb24gPSB0aGlzLl9qc29uLnNs
aWNlKHN0YXJ0SW5kZXgpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGhpcy5fYXJyYXlbdGhpcy5fYXJyYXlJbmRleCsrXSA9IG5leHRO
dW1iZXI7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3BhcnNlU3RyaW5nc0FycmF5OiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXRJbmRleCA9IHRoaXMuX2pz
b24ubGFzdEluZGV4T2YoIl0iKTsKLSAgICAgICAgaWYgKGNsb3NpbmdCcmFja2V0SW5kZXggPT09
IC0xKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbmNvbXBsZXRlIEpTT04iKTsKLSAg
ICAgICAgdGhpcy5fanNvbiA9IHRoaXMuX2pzb24uc2xpY2UoMCwgY2xvc2luZ0JyYWNrZXRJbmRl
eCArIDEpOwotICAgICAgICB0aGlzLl9zbmFwc2hvdC5zdHJpbmdzID0gSlNPTi5wYXJzZSh0aGlz
Ll9qc29uKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5r
Ci0gICAgICovCi0gICAgd3JpdGU6IGZ1bmN0aW9uKGNodW5rKQotICAgIHsKLSAgICAgICAgdGhp
cy5fanNvbiArPSBjaHVuazsKLSAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkgewotICAgICAg
ICBjYXNlICJmaW5kLXNuYXBzaG90LWluZm8iOiB7Ci0gICAgICAgICAgICB2YXIgc25hcHNob3RU
b2tlbiA9ICJcInNuYXBzaG90XCIiOwotICAgICAgICAgICAgdmFyIHNuYXBzaG90VG9rZW5JbmRl
eCA9IHRoaXMuX2pzb24uaW5kZXhPZihzbmFwc2hvdFRva2VuKTsKLSAgICAgICAgICAgIGlmIChz
bmFwc2hvdFRva2VuSW5kZXggPT09IC0xKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiU25hcHNob3QgdG9rZW4gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICB0aGlzLl9qc29uID0g
dGhpcy5fanNvbi5zbGljZShzbmFwc2hvdFRva2VuSW5kZXggKyBzbmFwc2hvdFRva2VuLmxlbmd0
aCArIDEpOwotICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAicGFyc2Utc25hcHNob3QtaW5mbyI7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAicGFyc2Utc25hcHNob3QtaW5mbyI6IHsKLSAgICAg
ICAgICAgIHZhciBjbG9zaW5nQnJhY2tldEluZGV4ID0gV2ViSW5zcGVjdG9yLmZpbmRCYWxhbmNl
ZEN1cmx5QnJhY2tldHModGhpcy5fanNvbik7Ci0gICAgICAgICAgICBpZiAoY2xvc2luZ0JyYWNr
ZXRJbmRleCA9PT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdGhp
cy5fc25hcHNob3Quc25hcHNob3QgPSAvKiogQHR5cGUge0hlYXBTbmFwc2hvdEhlYWRlcn0gKi8g
KEpTT04ucGFyc2UodGhpcy5fanNvbi5zbGljZSgwLCBjbG9zaW5nQnJhY2tldEluZGV4KSkpOwot
ICAgICAgICAgICAgdGhpcy5fanNvbiA9IHRoaXMuX2pzb24uc2xpY2UoY2xvc2luZ0JyYWNrZXRJ
bmRleCk7Ci0gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJmaW5kLW5vZGVzIjsKLSAgICAgICAg
fQotICAgICAgICBjYXNlICJmaW5kLW5vZGVzIjogewotICAgICAgICAgICAgdmFyIG5vZGVzVG9r
ZW4gPSAiXCJub2Rlc1wiIjsKLSAgICAgICAgICAgIHZhciBub2Rlc1Rva2VuSW5kZXggPSB0aGlz
Ll9qc29uLmluZGV4T2Yobm9kZXNUb2tlbik7Ci0gICAgICAgICAgICBpZiAobm9kZXNUb2tlbklu
ZGV4ID09PSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2YXIgYnJh
Y2tldEluZGV4ID0gdGhpcy5fanNvbi5pbmRleE9mKCJbIiwgbm9kZXNUb2tlbkluZGV4KTsKLSAg
ICAgICAgICAgIGlmIChicmFja2V0SW5kZXggPT09IC0xKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIHRoaXMuX2pzb24gPSB0aGlzLl9qc29uLnNsaWNlKGJyYWNrZXRJbmRl
eCArIDEpOwotICAgICAgICAgICAgdmFyIG5vZGVfZmllbGRzX2NvdW50ID0gdGhpcy5fc25hcHNo
b3Quc25hcHNob3QubWV0YS5ub2RlX2ZpZWxkcy5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgbm9k
ZXNfbGVuZ3RoID0gdGhpcy5fc25hcHNob3Quc25hcHNob3Qubm9kZV9jb3VudCAqIG5vZGVfZmll
bGRzX2NvdW50OwotICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBuZXcgVWludDMyQXJyYXkobm9k
ZXNfbGVuZ3RoKTsKLSAgICAgICAgICAgIHRoaXMuX2FycmF5SW5kZXggPSAwOwotICAgICAgICAg
ICAgdGhpcy5fc3RhdGUgPSAicGFyc2Utbm9kZXMiOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
InBhcnNlLW5vZGVzIjogewotICAgICAgICAgICAgaWYgKHRoaXMuX3BhcnNlVWludEFycmF5KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdGhpcy5fc25hcHNob3Qubm9k
ZXMgPSB0aGlzLl9hcnJheTsKLSAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gImZpbmQtZWRnZXMi
OwotICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgImZpbmQtZWRnZXMiOiB7Ci0gICAgICAgICAgICB2YXIgZWRnZXNUb2tlbiA9ICJcImVkZ2Vz
XCIiOwotICAgICAgICAgICAgdmFyIGVkZ2VzVG9rZW5JbmRleCA9IHRoaXMuX2pzb24uaW5kZXhP
ZihlZGdlc1Rva2VuKTsKLSAgICAgICAgICAgIGlmIChlZGdlc1Rva2VuSW5kZXggPT09IC0xKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBicmFja2V0SW5kZXggPSB0
aGlzLl9qc29uLmluZGV4T2YoIlsiLCBlZGdlc1Rva2VuSW5kZXgpOwotICAgICAgICAgICAgaWYg
KGJyYWNrZXRJbmRleCA9PT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgdGhpcy5fanNvbiA9IHRoaXMuX2pzb24uc2xpY2UoYnJhY2tldEluZGV4ICsgMSk7Ci0gICAg
ICAgICAgICB2YXIgZWRnZV9maWVsZHNfY291bnQgPSB0aGlzLl9zbmFwc2hvdC5zbmFwc2hvdC5t
ZXRhLmVkZ2VfZmllbGRzLmxlbmd0aDsKLSAgICAgICAgICAgIHZhciBlZGdlc19sZW5ndGggPSB0
aGlzLl9zbmFwc2hvdC5zbmFwc2hvdC5lZGdlX2NvdW50ICogZWRnZV9maWVsZHNfY291bnQ7Ci0g
ICAgICAgICAgICB0aGlzLl9hcnJheSA9IG5ldyBVaW50MzJBcnJheShlZGdlc19sZW5ndGgpOwot
ICAgICAgICAgICAgdGhpcy5fYXJyYXlJbmRleCA9IDA7Ci0gICAgICAgICAgICB0aGlzLl9zdGF0
ZSA9ICJwYXJzZS1lZGdlcyI7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAicGFyc2UtZWRnZXMi
OiB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcGFyc2VVaW50QXJyYXkoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5lZGdlcyA9IHRoaXMuX2Fy
cmF5OwotICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5f
c3RhdGUgPSAiZmluZC1zdHJpbmdzIjsKLSAgICAgICAgfQotICAgICAgICBjYXNlICJmaW5kLXN0
cmluZ3MiOiB7Ci0gICAgICAgICAgICB2YXIgc3RyaW5nc1Rva2VuID0gIlwic3RyaW5nc1wiIjsK
LSAgICAgICAgICAgIHZhciBzdHJpbmdzVG9rZW5JbmRleCA9IHRoaXMuX2pzb24uaW5kZXhPZihz
dHJpbmdzVG9rZW4pOwotICAgICAgICAgICAgaWYgKHN0cmluZ3NUb2tlbkluZGV4ID09PSAtMSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2YXIgYnJhY2tldEluZGV4ID0g
dGhpcy5fanNvbi5pbmRleE9mKCJbIiwgc3RyaW5nc1Rva2VuSW5kZXgpOwotICAgICAgICAgICAg
aWYgKGJyYWNrZXRJbmRleCA9PT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgdGhpcy5fanNvbiA9IHRoaXMuX2pzb24uc2xpY2UoYnJhY2tldEluZGV4KTsKLSAgICAg
ICAgICAgIHRoaXMuX3N0YXRlID0gImFjY3VtdWxhdGUtc3RyaW5ncyI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlICJhY2N1bXVsYXRlLXN0cmluZ3MiOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYjJiMGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDU3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRkZAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3Jr
ZXJXcmFwcGVyID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
V29ya2VyV3JhcHBlci5wcm90b3R5cGUgPSAgewotICAgIHBvc3RNZXNzYWdlOiBmdW5jdGlvbiht
ZXNzYWdlKQotICAgIHsKLSAgICB9LAotICAgIHRlcm1pbmF0ZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQot
fQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RXb3JrZXJXcmFwcGVyfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVh
bFdvcmtlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl93b3JrZXIgPSBuZXcgV29ya2VyKCJI
ZWFwU25hcHNob3RXb3JrZXIuanMiKTsKLSAgICB0aGlzLl93b3JrZXIuYWRkRXZlbnRMaXN0ZW5l
cigibWVzc2FnZSIsIHRoaXMuX21lc3NhZ2VSZWNlaXZlZC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci19
Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZWFsV29ya2VyLnByb3RvdHlwZSA9IHsKLSAg
ICBfbWVzc2FnZVJlY2VpdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBt
ZXNzYWdlID0gZXZlbnQuZGF0YTsKLSAgICAgICAgaWYgKCJjYWxsSWQiIGluIG1lc3NhZ2UpCi0g
ICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygibWVzc2FnZSIsIG1lc3Nh
Z2UpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLm9iamVjdCAhPT0g
ImNvbnNvbGUiKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJXb3JrZXIgYXNrcyB0byBjYWxsIGEgbWV0aG9kICclcycgb24gYW4gdW5zdXBwb3J0
ZWQgb2JqZWN0ICclcycuIiwgbWVzc2FnZS5tZXRob2QsIG1lc3NhZ2Uub2JqZWN0KSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1lc3Nh
Z2UubWV0aG9kICE9PSAibG9nIiAmJiBtZXNzYWdlLm1ldGhvZCAhPT0gImluZm8iICYmIG1lc3Nh
Z2UubWV0aG9kICE9PSAiZXJyb3IiKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJXb3JrZXIgYXNrcyB0byBjYWxsIGFuIHVuc3VwcG9ydGVkIG1l
dGhvZCAnJXMnIG9uIHRoZSBjb25zb2xlIG9iamVjdC4iLCBtZXNzYWdlLm1ldGhvZCkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnNvbGVb
bWVzc2FnZS5tZXRob2RdLmFwcGx5KHdpbmRvd1ttZXNzYWdlLm9iamVjdF0sIG1lc3NhZ2UuYXJn
dW1lbnRzKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24o
bWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3dvcmtlci5wb3N0TWVzc2FnZShtZXNzYWdl
KTsKLSAgICB9LAotCi0gICAgdGVybWluYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLl93b3JrZXIudGVybWluYXRlKCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlcldyYXBwZXIucHJvdG90eXBlCi19Ci0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkFzeW5jVGFza1F1ZXVlID0gZnVuY3Rp
b24oKQotewotICAgIHRoaXMuX3F1ZXVlID0gW107Ci0gICAgdGhpcy5faXNUaW1lclNoZWR1bGVk
ID0gZmFsc2U7Ci19Ci0KLVdlYkluc3BlY3Rvci5Bc3luY1Rhc2tRdWV1ZS5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSB0YXNrCi0gICAgICovCi0gICAg
YWRkVGFzazogZnVuY3Rpb24odGFzaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3F1ZXVlLnB1c2go
dGFzayk7Ci0gICAgICAgIHRoaXMuX3NjaGVkdWxlVGltZXIoKTsKLSAgICB9LAotCi0gICAgX29u
VGltZW91dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faXNUaW1lclNoZWR1bGVk
ID0gZmFsc2U7Ci0gICAgICAgIHZhciBxdWV1ZSA9IHRoaXMuX3F1ZXVlOwotICAgICAgICB0aGlz
Ll9xdWV1ZSA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHF1ZXVlW2ldKCk7Ci0g
ICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
RXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgdGFzazogIiArIGUuc3RhY2spOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3NjaGVkdWxlVGltZXIoKTsKLSAgICB9LAotCi0g
ICAgX3NjaGVkdWxlVGltZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9x
dWV1ZS5sZW5ndGggJiYgIXRoaXMuX2lzVGltZXJTaGVkdWxlZCkgewotICAgICAgICAgICAgc2V0
VGltZW91dCh0aGlzLl9vblRpbWVvdXQuYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICB0aGlz
Ll9pc1RpbWVyU2hlZHVsZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3Jr
ZXJXcmFwcGVyfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmFrZVdvcmtlciA9IGZ1
bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9kaXNwYXRjaGVyID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RXb3JrZXJEaXNwYXRjaGVyKHdpbmRvdywgdGhpcy5fcG9zdE1lc3NhZ2VGcm9tV29y
a2VyLmJpbmQodGhpcykpOwotICAgIHRoaXMuX2FzeW5jVGFza1F1ZXVlID0gbmV3IFdlYkluc3Bl
Y3Rvci5Bc3luY1Rhc2tRdWV1ZSgpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmFr
ZVdvcmtlci5wcm90b3R5cGUgPSB7Ci0gICAgcG9zdE1lc3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2Up
Ci0gICAgewotICAgICAgICBmdW5jdGlvbiBkaXNwYXRjaCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh0aGlzLl9kaXNwYXRjaGVyKQotICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNo
ZXIuZGlzcGF0Y2hNZXNzYWdlKHtkYXRhOiBtZXNzYWdlfSk7Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy5fYXN5bmNUYXNrUXVldWUuYWRkVGFzayhkaXNwYXRjaC5iaW5kKHRoaXMpKTsKLSAgICB9
LAotCi0gICAgdGVybWluYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9kaXNw
YXRjaGVyID0gbnVsbDsKLSAgICB9LAotCi0gICAgX3Bvc3RNZXNzYWdlRnJvbVdvcmtlcjogZnVu
Y3Rpb24obWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHNlbmQoKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygibWVzc2FnZSIsIG1l
c3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2FzeW5jVGFza1F1ZXVlLmFkZFRhc2so
c2VuZC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90V29ya2VyV3JhcHBlci5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8KLVdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RXb3JrZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fbmV4dE9i
amVjdElkID0gMTsKLSAgICB0aGlzLl9uZXh0Q2FsbElkID0gMTsKLSAgICB0aGlzLl9jYWxsYmFj
a3MgPSBbXTsKLSAgICB0aGlzLl9wcmV2aW91c0NhbGxiYWNrcyA9IFtdOwotICAgIC8vIFRoZXJl
IGlzIG5vIHN1cHBvcnQgZm9yIHdvcmtlcnMgaW4gQ2hyb21pdW0gRFJULgotICAgIHRoaXMuX3dv
cmtlciA9IHR5cGVvZiBJbnNwZWN0b3JUZXN0ID09PSAidW5kZWZpbmVkIiA/IG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UmVhbFdvcmtlcigpIDogbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RGYWtlV29ya2VyKCk7Ci0gICAgdGhpcy5fd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1l
c3NhZ2UiLCB0aGlzLl9tZXNzYWdlUmVjZWl2ZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90V29ya2VyLnByb3RvdHlwZSA9IHsKLSAgICBjcmVhdGVMb2FkZXI6IGZ1bmN0
aW9uKHNuYXBzaG90Q29uc3RydWN0b3JOYW1lLCBwcm94eUNvbnN0cnVjdG9yKQotICAgIHsKLSAg
ICAgICAgdmFyIG9iamVjdElkID0gdGhpcy5fbmV4dE9iamVjdElkKys7Ci0gICAgICAgIHZhciBw
cm94eSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHkodGhpcywgb2Jq
ZWN0SWQsIHNuYXBzaG90Q29uc3RydWN0b3JOYW1lLCBwcm94eUNvbnN0cnVjdG9yKTsKLSAgICAg
ICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe2NhbGxJZDogdGhpcy5fbmV4dENhbGxJZCsrLCBkaXNwb3Np
dGlvbjogImNyZWF0ZSIsIG9iamVjdElkOiBvYmplY3RJZCwgbWV0aG9kTmFtZTogIldlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXIifSk7Ci0gICAgICAgIHJldHVybiBwcm94eTsKLSAgICB9
LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fd29ya2Vy
LnRlcm1pbmF0ZSgpOwotICAgICAgICBpZiAodGhpcy5faW50ZXJ2YWwpCi0gICAgICAgICAgICBj
bGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTsKLSAgICB9LAotCi0gICAgZGlzcG9zZU9iamVj
dDogZnVuY3Rpb24ob2JqZWN0SWQpCi0gICAgewotICAgICAgICB0aGlzLl9wb3N0TWVzc2FnZSh7
Y2FsbElkOiB0aGlzLl9uZXh0Q2FsbElkKyssIGRpc3Bvc2l0aW9uOiAiZGlzcG9zZSIsIG9iamVj
dElkOiBvYmplY3RJZH0pOwotICAgIH0sCi0KLSAgICBjYWxsR2V0dGVyOiBmdW5jdGlvbihjYWxs
YmFjaywgb2JqZWN0SWQsIGdldHRlck5hbWUpCi0gICAgewotICAgICAgICB2YXIgY2FsbElkID0g
dGhpcy5fbmV4dENhbGxJZCsrOwotICAgICAgICB0aGlzLl9jYWxsYmFja3NbY2FsbElkXSA9IGNh
bGxiYWNrOwotICAgICAgICB0aGlzLl9wb3N0TWVzc2FnZSh7Y2FsbElkOiBjYWxsSWQsIGRpc3Bv
c2l0aW9uOiAiZ2V0dGVyIiwgb2JqZWN0SWQ6IG9iamVjdElkLCBtZXRob2ROYW1lOiBnZXR0ZXJO
YW1lfSk7Ci0gICAgfSwKLQotICAgIGNhbGxGYWN0b3J5TWV0aG9kOiBmdW5jdGlvbihjYWxsYmFj
aywgb2JqZWN0SWQsIG1ldGhvZE5hbWUsIHByb3h5Q29uc3RydWN0b3IpCi0gICAgewotICAgICAg
ICB2YXIgY2FsbElkID0gdGhpcy5fbmV4dENhbGxJZCsrOwotICAgICAgICB2YXIgbWV0aG9kQXJn
dW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCA0KTsKLSAgICAg
ICAgdmFyIG5ld09iamVjdElkID0gdGhpcy5fbmV4dE9iamVjdElkKys7Ci0gICAgICAgIGlmIChj
YWxsYmFjaykgewotICAgICAgICAgICAgZnVuY3Rpb24gd3JhcENhbGxiYWNrKHJlbW90ZVJlc3Vs
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhyZW1vdGVSZXN1bHQg
PyBuZXcgcHJveHlDb25zdHJ1Y3Rvcih0aGlzLCBuZXdPYmplY3RJZCkgOiBudWxsKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tjYWxsSWRdID0gd3JhcENhbGxi
YWNrLmJpbmQodGhpcyk7Ci0gICAgICAgICAgICB0aGlzLl9wb3N0TWVzc2FnZSh7Y2FsbElkOiBj
YWxsSWQsIGRpc3Bvc2l0aW9uOiAiZmFjdG9yeSIsIG9iamVjdElkOiBvYmplY3RJZCwgbWV0aG9k
TmFtZTogbWV0aG9kTmFtZSwgbWV0aG9kQXJndW1lbnRzOiBtZXRob2RBcmd1bWVudHMsIG5ld09i
amVjdElkOiBuZXdPYmplY3RJZH0pOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9wb3N0TWVzc2FnZSh7Y2FsbElkOiBjYWxsSWQs
IGRpc3Bvc2l0aW9uOiAiZmFjdG9yeSIsIG9iamVjdElkOiBvYmplY3RJZCwgbWV0aG9kTmFtZTog
bWV0aG9kTmFtZSwgbWV0aG9kQXJndW1lbnRzOiBtZXRob2RBcmd1bWVudHMsIG5ld09iamVjdElk
OiBuZXdPYmplY3RJZH0pOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBwcm94eUNvbnN0cnVjdG9y
KHRoaXMsIG5ld09iamVjdElkKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBjYWxsTWV0aG9k
OiBmdW5jdGlvbihjYWxsYmFjaywgb2JqZWN0SWQsIG1ldGhvZE5hbWUpCi0gICAgewotICAgICAg
ICB2YXIgY2FsbElkID0gdGhpcy5fbmV4dENhbGxJZCsrOwotICAgICAgICB2YXIgbWV0aG9kQXJn
dW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTsKLSAgICAg
ICAgaWYgKGNhbGxiYWNrKQotICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxJZF0gPSBj
YWxsYmFjazsKLSAgICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe2NhbGxJZDogY2FsbElkLCBkaXNw
b3NpdGlvbjogIm1ldGhvZCIsIG9iamVjdElkOiBvYmplY3RJZCwgbWV0aG9kTmFtZTogbWV0aG9k
TmFtZSwgbWV0aG9kQXJndW1lbnRzOiBtZXRob2RBcmd1bWVudHN9KTsKLSAgICB9LAotCi0gICAg
c3RhcnRDaGVja2luZ0ZvckxvbmdSdW5uaW5nQ2FsbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9pbnRlcnZhbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhp
cy5fY2hlY2tMb25nUnVubmluZ0NhbGxzKCk7Ci0gICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0
SW50ZXJ2YWwodGhpcy5fY2hlY2tMb25nUnVubmluZ0NhbGxzLmJpbmQodGhpcyksIDMwMCk7Ci0g
ICAgfSwKLQotICAgIF9jaGVja0xvbmdSdW5uaW5nQ2FsbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGZvciAodmFyIGNhbGxJZCBpbiB0aGlzLl9wcmV2aW91c0NhbGxiYWNrcykKLSAgICAg
ICAgICAgIGlmICghKGNhbGxJZCBpbiB0aGlzLl9jYWxsYmFja3MpKQotICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9wcmV2aW91c0NhbGxiYWNrc1tjYWxsSWRdOwotICAgICAgICB2YXIgaGFz
TG9uZ1J1bm5pbmdDYWxscyA9IGZhbHNlOwotICAgICAgICBmb3IgKGNhbGxJZCBpbiB0aGlzLl9w
cmV2aW91c0NhbGxiYWNrcykgewotICAgICAgICAgICAgaGFzTG9uZ1J1bm5pbmdDYWxscyA9IHRy
dWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycygid2FpdCIsIGhhc0xvbmdSdW5uaW5nQ2FsbHMpOwotICAgICAgICBm
b3IgKGNhbGxJZCBpbiB0aGlzLl9jYWxsYmFja3MpCi0gICAgICAgICAgICB0aGlzLl9wcmV2aW91
c0NhbGxiYWNrc1tjYWxsSWRdID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgX2ZpbmRGdW5jdGlvbjog
ZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBwYXRoID0gbmFtZS5zcGxpdCgiLiIp
OwotICAgICAgICB2YXIgcmVzdWx0ID0gd2luZG93OwotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHBhdGgubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbcGF0aFtp
XV07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIF9tZXNzYWdlUmVjZWl2
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGRhdGEgPSBldmVudC5kYXRh
OwotICAgICAgICBpZiAoZXZlbnQuZGF0YS5lcnJvcikgewotICAgICAgICAgICAgaWYgKGV2ZW50
LmRhdGEuZXJyb3JNZXRob2ROYW1lKQotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2co
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBbiBlcnJvciBoYXBwZW5lZCB3aGVuIGEgY2FsbCBmb3Ig
bWV0aG9kICclcycgd2FzIHJlcXVlc3RlZCIsIGV2ZW50LmRhdGEuZXJyb3JNZXRob2ROYW1lKSk7
Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKGV2ZW50LmRhdGEuZXJyb3JDYWxsU3RhY2sp
OwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tkYXRhLmNhbGxJZF07Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3Nb
ZGF0YS5jYWxsSWRdKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgY2FsbGJhY2sg
PSB0aGlzLl9jYWxsYmFja3NbZGF0YS5jYWxsSWRdOwotICAgICAgICBkZWxldGUgdGhpcy5fY2Fs
bGJhY2tzW2RhdGEuY2FsbElkXTsKLSAgICAgICAgY2FsbGJhY2soZGF0YS5yZXN1bHQpOwotICAg
IH0sCi0KLSAgICBfcG9zdE1lc3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAg
ICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHlPYmplY3QgPSBmdW5j
dGlvbih3b3JrZXIsIG9iamVjdElkKQotewotICAgIHRoaXMuX3dvcmtlciA9IHdvcmtlcjsKLSAg
ICB0aGlzLl9vYmplY3RJZCA9IG9iamVjdElkOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UHJveHlPYmplY3QucHJvdG90eXBlID0gewotICAgIF9jYWxsV29ya2VyOiBmdW5jdGlvbih3
b3JrZXJNZXRob2ROYW1lLCBhcmdzKQotICAgIHsKLSAgICAgICAgYXJncy5zcGxpY2UoMSwgMCwg
dGhpcy5fb2JqZWN0SWQpOwotICAgICAgICByZXR1cm4gdGhpcy5fd29ya2VyW3dvcmtlck1ldGhv
ZE5hbWVdLmFwcGx5KHRoaXMuX3dvcmtlciwgYXJncyk7Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3dvcmtlci5kaXNwb3NlT2JqZWN0KHRo
aXMuX29iamVjdElkKTsKLSAgICB9LAotCi0gICAgZGlzcG9zZVdvcmtlcjogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fd29ya2VyLmRpc3Bvc2UoKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncwotICAgICAqLwotICAgIGNhbGxGYWN0b3J5
TWV0aG9kOiBmdW5jdGlvbihjYWxsYmFjaywgbWV0aG9kTmFtZSwgcHJveHlDb25zdHJ1Y3Rvciwg
dmFyX2FyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY2FsbFdvcmtlcigiY2FsbEZh
Y3RvcnlNZXRob2QiLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsK
LSAgICB9LAotCi0gICAgY2FsbEdldHRlcjogZnVuY3Rpb24oY2FsbGJhY2ssIGdldHRlck5hbWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY2FsbFdvcmtlcigiY2FsbEdldHRlciIsIEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzCi0gICAgICovCi0gICAgY2FsbE1ldGhv
ZDogZnVuY3Rpb24oY2FsbGJhY2ssIG1ldGhvZE5hbWUsIHZhcl9hcmdzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2NhbGxXb3JrZXIoImNhbGxNZXRob2QiLCBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKLSAgICB9LAotCi0gICAgZ2V0IHdvcmtlcigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmtlcjsKLSAgICB9Ci19OwotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eU9iamVj
dH0KLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtfQotICovCi1XZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHkgPSBmdW5jdGlvbih3b3JrZXIsIG9iamVj
dElkLCBzbmFwc2hvdENvbnN0cnVjdG9yTmFtZSwgcHJveHlDb25zdHJ1Y3RvcikKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHlPYmplY3QuY2FsbCh0aGlzLCB3b3JrZXIsIG9i
amVjdElkKTsKLSAgICB0aGlzLl9zbmFwc2hvdENvbnN0cnVjdG9yTmFtZSA9IHNuYXBzaG90Q29u
c3RydWN0b3JOYW1lOwotICAgIHRoaXMuX3Byb3h5Q29uc3RydWN0b3IgPSBwcm94eUNvbnN0cnVj
dG9yOwotICAgIHRoaXMuX3BlbmRpbmdTbmFwc2hvdENvbnN1bWVycyA9IFtdOwotfQotCi1XZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHkucHJvdG90eXBlID0gewotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KX0g
Y2FsbGJhY2sKLSAgICAgKi8KLSAgICBhZGRDb25zdW1lcjogZnVuY3Rpb24oY2FsbGJhY2spCi0g
ICAgewotICAgICAgICB0aGlzLl9wZW5kaW5nU25hcHNob3RDb25zdW1lcnMucHVzaChjYWxsYmFj
ayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaHVuawotICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbSk9fSBjYWxsYmFj
awotICAgICAqLwotICAgIHdyaXRlOiBmdW5jdGlvbihjaHVuaywgY2FsbGJhY2spCi0gICAgewot
ICAgICAgICB0aGlzLmNhbGxNZXRob2QoY2FsbGJhY2ssICJ3cml0ZSIsIGNodW5rKTsKLSAgICB9
LAotCi0gICAgY2xvc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGJ1aWxk
U25hcHNob3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmNhbGxGYWN0b3J5TWV0aG9k
KHVwZGF0ZVN0YXRpY0RhdGEuYmluZCh0aGlzKSwgImJ1aWxkU25hcHNob3QiLCB0aGlzLl9wcm94
eUNvbnN0cnVjdG9yLCB0aGlzLl9zbmFwc2hvdENvbnN0cnVjdG9yTmFtZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZnVuY3Rpb24gdXBkYXRlU3RhdGljRGF0YShzbmFwc2hvdFByb3h5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIHNuYXBzaG90UHJv
eHkudXBkYXRlU3RhdGljRGF0YShub3RpZnlQZW5kaW5nQ29uc3VtZXJzLmJpbmQodGhpcykpOwot
ICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIG5vdGlmeVBlbmRpbmdDb25zdW1lcnMoc25hcHNo
b3RQcm94eSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9wZW5kaW5nU25hcHNob3RDb25zdW1lcnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAg
dGhpcy5fcGVuZGluZ1NuYXBzaG90Q29uc3VtZXJzW2ldKHNuYXBzaG90UHJveHkpOwotICAgICAg
ICAgICAgdGhpcy5fcGVuZGluZ1NuYXBzaG90Q29uc3VtZXJzID0gW107Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy5jYWxsTWV0aG9kKGJ1aWxkU25hcHNob3QuYmluZCh0aGlzKSwgImNsb3NlIik7
Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5
T2JqZWN0LnByb3RvdHlwZQotfQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5T2JqZWN0fQotICovCi1XZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UHJveHkgPSBmdW5jdGlvbih3b3JrZXIsIG9iamVjdElkKQotewotICAg
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eU9iamVjdC5jYWxsKHRoaXMsIHdvcmtlciwg
b2JqZWN0SWQpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBl
ID0gewotICAgIGFnZ3JlZ2F0ZXM6IGZ1bmN0aW9uKHNvcnRlZEluZGV4ZXMsIGtleSwgZmlsdGVy
LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuY2FsbE1ldGhvZChjYWxsYmFjaywgImFn
Z3JlZ2F0ZXMiLCBzb3J0ZWRJbmRleGVzLCBrZXksIGZpbHRlcik7Ci0gICAgfSwKLQotICAgIGFn
Z3JlZ2F0ZXNGb3JEaWZmOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMu
Y2FsbE1ldGhvZChjYWxsYmFjaywgImFnZ3JlZ2F0ZXNGb3JEaWZmIik7Ci0gICAgfSwKLQotICAg
IGNhbGN1bGF0ZVNuYXBzaG90RGlmZjogZnVuY3Rpb24oYmFzZVNuYXBzaG90SWQsIGJhc2VTbmFw
c2hvdEFnZ3JlZ2F0ZXMsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdGhpcy5jYWxsTWV0aG9k
KGNhbGxiYWNrLCAiY2FsY3VsYXRlU25hcHNob3REaWZmIiwgYmFzZVNuYXBzaG90SWQsIGJhc2VT
bmFwc2hvdEFnZ3JlZ2F0ZXMpOwotICAgIH0sCi0KLSAgICBub2RlQ2xhc3NOYW1lOiBmdW5jdGlv
bihzbmFwc2hvdE9iamVjdElkLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuY2FsbE1l
dGhvZChjYWxsYmFjaywgIm5vZGVDbGFzc05hbWUiLCBzbmFwc2hvdE9iamVjdElkKTsKLSAgICB9
LAotCi0gICAgZG9taW5hdG9ySWRzRm9yTm9kZTogZnVuY3Rpb24obm9kZUluZGV4LCBjYWxsYmFj
aykKLSAgICB7Ci0gICAgICAgIHRoaXMuY2FsbE1ldGhvZChjYWxsYmFjaywgImRvbWluYXRvcklk
c0Zvck5vZGUiLCBub2RlSW5kZXgpOwotICAgIH0sCi0KLSAgICBjcmVhdGVFZGdlc1Byb3ZpZGVy
OiBmdW5jdGlvbihub2RlSW5kZXgsIHNob3dIaWRkZW5EYXRhKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuY2FsbEZhY3RvcnlNZXRob2QobnVsbCwgImNyZWF0ZUVkZ2VzUHJvdmlkZXIiLCBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eSwgbm9kZUluZGV4LCBzaG93SGlk
ZGVuRGF0YSk7Ci0gICAgfSwKLQotICAgIGNyZWF0ZVJldGFpbmluZ0VkZ2VzUHJvdmlkZXI6IGZ1
bmN0aW9uKG5vZGVJbmRleCwgc2hvd0hpZGRlbkRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5jYWxsRmFjdG9yeU1ldGhvZChudWxsLCAiY3JlYXRlUmV0YWluaW5nRWRnZXNQcm92aWRl
ciIsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5LCBub2RlSW5kZXgsIHNo
b3dIaWRkZW5EYXRhKTsKLSAgICB9LAotCi0gICAgY3JlYXRlQWRkZWROb2Rlc1Byb3ZpZGVyOiBm
dW5jdGlvbihiYXNlU25hcHNob3RJZCwgY2xhc3NOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuY2FsbEZhY3RvcnlNZXRob2QobnVsbCwgImNyZWF0ZUFkZGVkTm9kZXNQcm92aWRlciIs
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5LCBiYXNlU25hcHNob3RJZCwg
Y2xhc3NOYW1lKTsKLSAgICB9LAotCi0gICAgY3JlYXRlRGVsZXRlZE5vZGVzUHJvdmlkZXI6IGZ1
bmN0aW9uKG5vZGVJbmRleGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEZhY3Rv
cnlNZXRob2QobnVsbCwgImNyZWF0ZURlbGV0ZWROb2Rlc1Byb3ZpZGVyIiwgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHksIG5vZGVJbmRleGVzKTsKLSAgICB9LAotCi0gICAg
Y3JlYXRlTm9kZXNQcm92aWRlcjogZnVuY3Rpb24oZmlsdGVyKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuY2FsbEZhY3RvcnlNZXRob2QobnVsbCwgImNyZWF0ZU5vZGVzUHJvdmlkZXIiLCBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eSwgZmlsdGVyKTsKLSAgICB9LAot
Ci0gICAgY3JlYXRlTm9kZXNQcm92aWRlckZvckNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUsIGFn
Z3JlZ2F0ZXNLZXkpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5jYWxsRmFjdG9yeU1ldGhv
ZChudWxsLCAiY3JlYXRlTm9kZXNQcm92aWRlckZvckNsYXNzIiwgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb3ZpZGVyUHJveHksIGNsYXNzTmFtZSwgYWdncmVnYXRlc0tleSk7Ci0gICAgfSwK
LQotICAgIGNyZWF0ZU5vZGVzUHJvdmlkZXJGb3JEb21pbmF0b3I6IGZ1bmN0aW9uKG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmNhbGxGYWN0b3J5TWV0aG9kKG51bGwsICJj
cmVhdGVOb2Rlc1Byb3ZpZGVyRm9yRG9taW5hdG9yIiwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFByb3ZpZGVyUHJveHksIG5vZGVJbmRleCk7Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcG9zZVdvcmtlcigpOwotICAgIH0sCi0KLSAg
ICBnZXQgbm9kZUNvdW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGF0aWNEYXRh
Lm5vZGVDb3VudDsKLSAgICB9LAotCi0gICAgZ2V0IHJvb3ROb2RlSW5kZXgoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX3N0YXRpY0RhdGEucm9vdE5vZGVJbmRleDsKLSAgICB9LAotCi0g
ICAgdXBkYXRlU3RhdGljRGF0YTogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICBm
dW5jdGlvbiBkYXRhUmVjZWl2ZWQoc3RhdGljRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAg
dGhpcy5fc3RhdGljRGF0YSA9IHN0YXRpY0RhdGE7Ci0gICAgICAgICAgICBjYWxsYmFjayh0aGlz
KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmNhbGxNZXRob2QoZGF0YVJlY2VpdmVkLmJpbmQo
dGhpcyksICJ1cGRhdGVTdGF0aWNEYXRhIik7Ci0gICAgfSwKLQotICAgIGdldCB0b3RhbFNpemUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRpY0RhdGEudG90YWxTaXplOwotICAg
IH0sCi0KLSAgICBnZXQgdWlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGF0aWNE
YXRhLnVpZDsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UHJveHlPYmplY3QucHJvdG90eXBlCi19Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHl9Ci0gKi8KLVdlYkluc3Bl
Y3Rvci5OYXRpdmVIZWFwU25hcHNob3RQcm94eSA9IGZ1bmN0aW9uKHdvcmtlciwgb2JqZWN0SWQp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LmNhbGwodGhpcywgd29ya2Vy
LCBvYmplY3RJZCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXRpdmVIZWFwU25hcHNob3RQcm94eS5w
cm90b3R5cGUgPSB7Ci0gICAgaW1hZ2VzOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAg
ICAgIHRoaXMuY2FsbE1ldGhvZChjYWxsYmFjaywgImltYWdlcyIpOwotICAgIH0sCi0KLSAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUKLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UHJveHlPYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclBy
b3h5ID0gZnVuY3Rpb24od29ya2VyLCBvYmplY3RJZCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJveHlPYmplY3QuY2FsbCh0aGlzLCB3b3JrZXIsIG9iamVjdElkKTsKLX0KLQot
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkucHJvdG90eXBlID0gewotICAg
IG5vZGVQb3NpdGlvbjogZnVuY3Rpb24oc25hcHNob3RPYmplY3RJZCwgY2FsbGJhY2spCi0gICAg
ewotICAgICAgICB0aGlzLmNhbGxNZXRob2QoY2FsbGJhY2ssICJub2RlUG9zaXRpb24iLCBzbmFw
c2hvdE9iamVjdElkKTsKLSAgICB9LAotCi0gICAgaXNFbXB0eTogZnVuY3Rpb24oY2FsbGJhY2sp
Ci0gICAgewotICAgICAgICB0aGlzLmNhbGxNZXRob2QoY2FsbGJhY2ssICJpc0VtcHR5Iik7Ci0g
ICAgfSwKLQotICAgIHNlcmlhbGl6ZUl0ZW1zUmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuY2FsbE1ldGhvZChj
YWxsYmFjaywgInNlcmlhbGl6ZUl0ZW1zUmFuZ2UiLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bik7Ci0gICAgfSwKLQotICAgIHNvcnRBbmRSZXdpbmQ6IGZ1bmN0aW9uKGNvbXBhcmF0b3IsIGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgdGhpcy5jYWxsTWV0aG9kKGNhbGxiYWNrLCAic29ydEFu
ZFJld2luZCIsIGNvbXBhcmF0b3IpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQcm94eU9iamVjdC5wcm90b3R5cGUKLX0KLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWY4M2QzLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcworKysgL2Rl
di9udWxsCkBAIC0xLDExNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbH0gcGFyZW50Ci0gKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXJ9
IHByb2ZpbGUKLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcgPSBmdW5jdGlvbihw
YXJlbnQsIHByb2ZpbGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLQot
ICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoZWFwLXNuYXBzaG90LXZpZXciKTsKLQot
ICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotICAgIHRoaXMucGFyZW50LmFkZEV2ZW50TGlzdGVu
ZXIoInByb2ZpbGUgYWRkZWQiLCB0aGlzLl9vblByb2ZpbGVIZWFkZXJBZGRlZCwgdGhpcyk7Ci0K
LSAgICB0aGlzLnZpZXdzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0gICAgdGhpcy52aWV3c0NvbnRhaW5lci5hZGRTdHlsZUNsYXNzKCJ2aWV3cy1jb250YWluZXIi
KTsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52aWV3c0NvbnRhaW5lcik7Ci0K
LSAgICB0aGlzLmNvbnRhaW5tZW50VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuVmlldygpOwotICAg
IHRoaXMuY29udGFpbm1lbnRWaWV3LmVsZW1lbnQuYWRkU3R5bGVDbGFzcygidmlldyIpOwotICAg
IHRoaXMuY29udGFpbm1lbnREYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Q29udGFpbm1lbnREYXRhR3JpZCgpOwotICAgIHRoaXMuY29udGFpbm1lbnREYXRhR3JpZC5lbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bkluQ29udGVu
dHNHcmlkLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuY29udGFpbm1lbnREYXRhR3JpZC5z
aG93KHRoaXMuY29udGFpbm1lbnRWaWV3LmVsZW1lbnQpOwotICAgIHRoaXMuY29udGFpbm1lbnRE
YXRhR3JpZC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudHMuU2Vs
ZWN0ZWROb2RlLCB0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLCB0aGlzKTsKLQotICAgIHRoaXMuY29u
c3RydWN0b3JzVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuVmlldygpOwotICAgIHRoaXMuY29uc3Ry
dWN0b3JzVmlldy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInZpZXciKTsKLSAgICB0aGlzLmNvbnN0
cnVjdG9yc1ZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVUb29sYmFyV2l0aENs
YXNzTmFtZUZpbHRlcigpKTsKLQotICAgIHRoaXMuY29uc3RydWN0b3JzRGF0YUdyaWQgPSBuZXcg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yc0RhdGFHcmlkKCk7Ci0gICAgdGhp
cy5jb25zdHJ1Y3RvcnNEYXRhR3JpZC5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNsYXNzLXZpZXct
Z3JpZCIpOwotICAgIHRoaXMuY29uc3RydWN0b3JzRGF0YUdyaWQuZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURvd25JbkNvbnRlbnRzR3JpZC5iaW5kKHRo
aXMpLCB0cnVlKTsKLSAgICB0aGlzLmNvbnN0cnVjdG9yc0RhdGFHcmlkLnNob3codGhpcy5jb25z
dHJ1Y3RvcnNWaWV3LmVsZW1lbnQpOwotICAgIHRoaXMuY29uc3RydWN0b3JzRGF0YUdyaWQuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGF0YUdyaWQuRXZlbnRzLlNlbGVjdGVkTm9kZSwg
dGhpcy5fc2VsZWN0aW9uQ2hhbmdlZCwgdGhpcyk7Ci0KLSAgICB0aGlzLmRpZmZWaWV3ID0gbmV3
IFdlYkluc3BlY3Rvci5WaWV3KCk7Ci0gICAgdGhpcy5kaWZmVmlldy5lbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInZpZXciKTsKLSAgICB0aGlzLmRpZmZWaWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5fY3JlYXRlVG9vbGJhcldpdGhDbGFzc05hbWVGaWx0ZXIoKSk7Ci0KLSAgICB0aGlzLmRpZmZE
YXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZkRhdGFHcmlkKCk7Ci0g
ICAgdGhpcy5kaWZmRGF0YUdyaWQuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjbGFzcy12aWV3LWdy
aWQiKTsKLSAgICB0aGlzLmRpZmZEYXRhR3JpZC5zaG93KHRoaXMuZGlmZlZpZXcuZWxlbWVudCk7
Ci0gICAgdGhpcy5kaWZmRGF0YUdyaWQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGF0
YUdyaWQuRXZlbnRzLlNlbGVjdGVkTm9kZSwgdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZCwgdGhpcyk7
Ci0KLSAgICB0aGlzLmRvbWluYXRvclZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlZpZXcoKTsKLSAg
ICB0aGlzLmRvbWluYXRvclZpZXcuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ2aWV3Iik7Ci0gICAg
dGhpcy5kb21pbmF0b3JEYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9t
aW5hdG9yc0RhdGFHcmlkKCk7Ci0gICAgdGhpcy5kb21pbmF0b3JEYXRhR3JpZC5lbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bkluQ29udGVudHNHcmlk
LmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuZG9taW5hdG9yRGF0YUdyaWQuc2hvdyh0aGlz
LmRvbWluYXRvclZpZXcuZWxlbWVudCk7Ci0gICAgdGhpcy5kb21pbmF0b3JEYXRhR3JpZC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudHMuU2VsZWN0ZWROb2RlLCB0
aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLCB0aGlzKTsKLQotICAgIHRoaXMucmV0YWlubWVudFZpZXdI
ZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLnJldGFpbm1l
bnRWaWV3SGVhZGVyLmFkZFN0eWxlQ2xhc3MoInJldGFpbmVycy12aWV3LWhlYWRlciIpOwotICAg
IFdlYkluc3BlY3Rvci5pbnN0YWxsRHJhZ0hhbmRsZSh0aGlzLnJldGFpbm1lbnRWaWV3SGVhZGVy
LCB0aGlzLl9zdGFydFJldGFpbmVyc0hlYWRlckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX3Jl
dGFpbmVyc0hlYWRlckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFJldGFpbmVyc0hlYWRl
ckRyYWdnaW5nLmJpbmQodGhpcyksICJyb3ctcmVzaXplIik7Ci0gICAgdmFyIHJldGFpbmluZ1Bh
dGhzVGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICByZXRhaW5p
bmdQYXRoc1RpdGxlRGl2LmNsYXNzTmFtZSA9ICJ0aXRsZSI7Ci0gICAgdmFyIHJldGFpbmluZ1Bh
dGhzVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgcmV0YWluaW5n
UGF0aHNUaXRsZS50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiT2JqZWN0J3Mg
cmV0YWluaW5nIHRyZWUiKTsKLSAgICByZXRhaW5pbmdQYXRoc1RpdGxlRGl2LmFwcGVuZENoaWxk
KHJldGFpbmluZ1BhdGhzVGl0bGUpOwotICAgIHRoaXMucmV0YWlubWVudFZpZXdIZWFkZXIuYXBw
ZW5kQ2hpbGQocmV0YWluaW5nUGF0aHNUaXRsZURpdik7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMucmV0YWlubWVudFZpZXdIZWFkZXIpOwotCi0gICAgdGhpcy5yZXRhaW5tZW50
VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuVmlldygpOwotICAgIHRoaXMucmV0YWlubWVudFZpZXcu
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ2aWV3Iik7Ci0gICAgdGhpcy5yZXRhaW5tZW50Vmlldy5l
bGVtZW50LmFkZFN0eWxlQ2xhc3MoInJldGFpbmluZy1wYXRocy12aWV3Iik7Ci0gICAgdGhpcy5y
ZXRhaW5tZW50RGF0YUdyaWQgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1l
bnREYXRhR3JpZCgpOwotICAgIHRoaXMucmV0YWlubWVudERhdGFHcmlkLnNob3codGhpcy5yZXRh
aW5tZW50Vmlldy5lbGVtZW50KTsKLSAgICB0aGlzLnJldGFpbm1lbnREYXRhR3JpZC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudHMuU2VsZWN0ZWROb2RlLCB0aGlz
Ll9pbnNwZWN0ZWRPYmplY3RDaGFuZ2VkLCB0aGlzKTsKLSAgICB0aGlzLnJldGFpbm1lbnRWaWV3
LnNob3codGhpcy5lbGVtZW50KTsKLSAgICB0aGlzLnJldGFpbm1lbnREYXRhR3JpZC5yZXNldCgp
OwotCi0gICAgdGhpcy5kYXRhR3JpZCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFNvcnRhYmxlRGF0YUdyaWR9ICovICh0aGlzLmNvbnN0cnVjdG9yc0RhdGFHcmlkKTsKLSAg
ICB0aGlzLmN1cnJlbnRWaWV3ID0gdGhpcy5jb25zdHJ1Y3RvcnNWaWV3OwotCi0gICAgdGhpcy52
aWV3U2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAg
IHRoaXMudmlld1NlbGVjdEVsZW1lbnQuY2xhc3NOYW1lID0gInN0YXR1cy1iYXItaXRlbSI7Ci0g
ICAgdGhpcy52aWV3U2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlz
Ll9vblNlbGVjdGVkVmlld0NoYW5nZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgdGhpcy52
aWV3cyA9IFt7dGl0bGU6ICJTdW1tYXJ5IiwgdmlldzogdGhpcy5jb25zdHJ1Y3RvcnNWaWV3LCBn
cmlkOiB0aGlzLmNvbnN0cnVjdG9yc0RhdGFHcmlkfSwKLSAgICAgICAgICAgICAgICAgIHt0aXRs
ZTogIkNvbXBhcmlzb24iLCB2aWV3OiB0aGlzLmRpZmZWaWV3LCBncmlkOiB0aGlzLmRpZmZEYXRh
R3JpZH0sCi0gICAgICAgICAgICAgICAgICB7dGl0bGU6ICJDb250YWlubWVudCIsIHZpZXc6IHRo
aXMuY29udGFpbm1lbnRWaWV3LCBncmlkOiB0aGlzLmNvbnRhaW5tZW50RGF0YUdyaWR9LAotICAg
ICAgICAgICAgICAgICAge3RpdGxlOiAiRG9taW5hdG9ycyIsIHZpZXc6IHRoaXMuZG9taW5hdG9y
VmlldywgZ3JpZDogdGhpcy5kb21pbmF0b3JEYXRhR3JpZH1dOwotICAgIHRoaXMudmlld3MuY3Vy
cmVudCA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZpZXdzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIHZhciB2aWV3ID0gdGhpcy52aWV3c1tpXTsKLSAgICAgICAgdmFyIG9wdGlv
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwotICAgICAgICBvcHRpb24ubGFi
ZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcodmlldy50aXRsZSk7Ci0gICAgICAgIHRoaXMudmll
d1NlbGVjdEVsZW1lbnQuYXBwZW5kQ2hpbGQob3B0aW9uKTsKLSAgICB9Ci0KLSAgICB0aGlzLl9w
cm9maWxlVWlkID0gcHJvZmlsZS51aWQ7Ci0gICAgdGhpcy5fcHJvZmlsZVR5cGVJZCA9IHByb2Zp
bGUucHJvZmlsZVR5cGUoKS5pZDsKLQotICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50
LmNsYXNzTmFtZSA9ICJzdGF0dXMtYmFyLWl0ZW0iOwotICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy5fY2hhbmdlQmFzZS5iaW5kKHRoaXMp
LCBmYWxzZSk7Ci0gICAgdGhpcy5fdXBkYXRlQmFzZU9wdGlvbnMoKTsKLQotICAgIHRoaXMuZmls
dGVyU2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAg
IHRoaXMuZmlsdGVyU2VsZWN0RWxlbWVudC5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtIjsK
LSAgICB0aGlzLmZpbHRlclNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwg
dGhpcy5fY2hhbmdlRmlsdGVyLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl91cGRhdGVG
aWx0ZXJPcHRpb25zKCk7Ci0KLSAgICB0aGlzLmhlbHBCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9y
LlN0YXR1c0JhckJ1dHRvbigiIiwgImhlYXAtc25hcHNob3QtaGVscC1zdGF0dXMtYmFyLWl0ZW0g
c3RhdHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5oZWxwQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5faGVscENsaWNrZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fcG9wb3Zlckhl
bHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlcih0aGlzLmVsZW1lbnQs
IHRoaXMuX2dldEhvdmVyQW5jaG9yLmJpbmQodGhpcyksIHRoaXMuX3Jlc29sdmVPYmplY3RGb3JQ
b3BvdmVyLmJpbmQodGhpcyksIHVuZGVmaW5lZCwgdHJ1ZSk7Ci0KLSAgICB0aGlzLnByb2ZpbGUu
bG9hZChwcm9maWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0KLSAgICBmdW5jdGlvbiBwcm9maWxl
Q2FsbGJhY2soaGVhcFNuYXBzaG90UHJveHkpCi0gICAgewotICAgICAgICB2YXIgbGlzdCA9IHRo
aXMuX3Byb2ZpbGVzKCk7Ci0gICAgICAgIHZhciBwcm9maWxlSW5kZXg7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGxpc3Rb
aV0udWlkID09PSB0aGlzLl9wcm9maWxlVWlkKSB7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZUlu
ZGV4ID0gaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChwcm9maWxlSW5kZXggPiAwKQotICAgICAgICAgICAgdGhpcy5iYXNl
U2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gcHJvZmlsZUluZGV4IC0gMTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0g
cHJvZmlsZUluZGV4OwotICAgICAgICB0aGlzLmRhdGFHcmlkLnNldERhdGFTb3VyY2UoaGVhcFNu
YXBzaG90UHJveHkpOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcu
cHJvdG90eXBlID0gewotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMucHJvZmlsZS5kaXNwb3NlKCk7Ci0gICAgICAgIGlmICh0aGlzLmJhc2VQcm9maWxlKQotICAg
ICAgICAgICAgdGhpcy5iYXNlUHJvZmlsZS5kaXNwb3NlKCk7Ci0gICAgICAgIHRoaXMuY29udGFp
bm1lbnREYXRhR3JpZC5kaXNwb3NlKCk7Ci0gICAgICAgIHRoaXMuY29uc3RydWN0b3JzRGF0YUdy
aWQuZGlzcG9zZSgpOwotICAgICAgICB0aGlzLmRpZmZEYXRhR3JpZC5kaXNwb3NlKCk7Ci0gICAg
ICAgIHRoaXMuZG9taW5hdG9yRGF0YUdyaWQuZGlzcG9zZSgpOwotICAgICAgICB0aGlzLnJldGFp
bm1lbnREYXRhR3JpZC5kaXNwb3NlKCk7Ci0gICAgfSwKLQotICAgIHN0YXR1c0Jhckl0ZW1zOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtib29sZWFu
PX0gaGlkZGVuCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBhcHBlbmRBcnJvd0ltYWdl
KGVsZW1lbnQsIGhpZGRlbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICBzcGFuLmNsYXNzTmFtZSA9
ICJzdGF0dXMtYmFyLXNlbGVjdC1jb250YWluZXIiICsgKGhpZGRlbiA/ICIgaGlkZGVuIiA6ICIi
KTsKLSAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3BhbjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gW2FwcGVuZEFycm93SW1hZ2Uo
dGhpcy52aWV3U2VsZWN0RWxlbWVudCksIGFwcGVuZEFycm93SW1hZ2UodGhpcy5iYXNlU2VsZWN0
RWxlbWVudCwgdHJ1ZSksIGFwcGVuZEFycm93SW1hZ2UodGhpcy5maWx0ZXJTZWxlY3RFbGVtZW50
KSwgdGhpcy5oZWxwQnV0dG9uLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICBnZXQgcHJvZmlsZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UHJvZmlsZSh0aGlzLl9wcm9m
aWxlVHlwZUlkLCB0aGlzLl9wcm9maWxlVWlkKTsKLSAgICB9LAotCi0gICAgZ2V0IGJhc2VQcm9m
aWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRQcm9maWxlKHRoaXMu
X3Byb2ZpbGVUeXBlSWQsIHRoaXMuX2Jhc2VQcm9maWxlVWlkKTsKLSAgICB9LAotCi0gICAgd2Fz
U2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBsb2FkIGJhc2UgYW5k
IGN1cnJlbnQgc25hcHNob3RzIGluIHBhcmFsbGVsCi0gICAgICAgIHRoaXMucHJvZmlsZS5sb2Fk
KHByb2ZpbGVDYWxsYmFjazEuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcHJvZmls
ZUNhbGxiYWNrMSgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmJhc2VQcm9maWxlKQotICAgICAg
ICAgICAgICAgIHRoaXMuYmFzZVByb2ZpbGUubG9hZChwcm9maWxlQ2FsbGJhY2syLmJpbmQodGhp
cykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb2ZpbGVDYWxsYmFjazIu
Y2FsbCh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHByb2ZpbGVDYWxsYmFj
azIoKSB7Ci0gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3LnNob3codGhpcy52aWV3c0NvbnRh
aW5lcik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgd2lsbEhpZGU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IC0xOwotICAgICAg
ICB0aGlzLl9wb3BvdmVySGVscGVyLmhpZGVQb3BvdmVyKCk7Ci0gICAgICAgIGlmICh0aGlzLmhl
bHBQb3BvdmVyICYmIHRoaXMuaGVscFBvcG92ZXIuaXNTaG93aW5nKCkpCi0gICAgICAgICAgICB0
aGlzLmhlbHBQb3BvdmVyLmhpZGUoKTsKLSAgICB9LAotCi0gICAgb25SZXNpemU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLnJldGFpbm1lbnRWaWV3LmVsZW1l
bnQuY2xpZW50SGVpZ2h0OwotICAgICAgICB0aGlzLl91cGRhdGVSZXRhaW5tZW50Vmlld0hlaWdo
dChoZWlnaHQpOwotICAgIH0sCi0KLSAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFJlc3VsdHMpIHsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5fc2VhcmNoUmVzdWx0c1tpXS5ub2RlOwotICAgICAg
ICAgICAgICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hNYXRjaGVkOwotICAgICAgICAgICAgICAgIG5v
ZGUucmVmcmVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRl
IHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2s7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFy
Y2hSZXN1bHRJbmRleCA9IC0xOwotICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107Ci0g
ICAgfSwKLQotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBmaW5pc2hlZENhbGxi
YWNrKQotICAgIHsKLSAgICAgICAgLy8gQ2FsbCBzZWFyY2hDYW5jZWxlZCBzaW5jZSBpdCB3aWxs
IHJlc2V0IGV2ZXJ5dGhpbmcgd2UgbmVlZCBiZWZvcmUgZG9pbmcgYSBuZXcgc2VhcmNoLgotICAg
ICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7Ci0KLSAgICAgICAgcXVlcnkgPSBxdWVyeS50cmlt
KCk7Ci0KLSAgICAgICAgaWYgKCFxdWVyeS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ICE9PSB0aGlzLmNvbnN0cnVjdG9yc1ZpZXcgJiYg
dGhpcy5jdXJyZW50VmlldyAhPT0gdGhpcy5kaWZmVmlldykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB0aGlzLl9zZWFyY2hGaW5pc2hlZENhbGxiYWNrID0gZmluaXNoZWRDYWxsYmFj
azsKLQotICAgICAgICBmdW5jdGlvbiBtYXRjaGVzQnlOYW1lKGdyaWROb2RlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gKCJfbmFtZSIgaW4gZ3JpZE5vZGUpICYmIGdyaWROb2RlLl9uYW1lLmhhc1N1
YnN0cmluZyhxdWVyeSwgdHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRj
aGVzQnlJZChncmlkTm9kZSkgewotICAgICAgICAgICAgcmV0dXJuICgic25hcHNob3ROb2RlSWQi
IGluIGdyaWROb2RlKSAmJiBncmlkTm9kZS5zbmFwc2hvdE5vZGVJZCA9PT0gcXVlcnk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgbWF0Y2hQcmVkaWNhdGU7Ci0gICAgICAgIGlmIChxdWVyeS5j
aGFyQXQoMCkgIT09ICJAIikKLSAgICAgICAgICAgIG1hdGNoUHJlZGljYXRlID0gbWF0Y2hlc0J5
TmFtZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBxdWVyeSA9IHBhcnNlSW50KHF1ZXJ5
LnN1YnN0cmluZygxKSwgMTApOwotICAgICAgICAgICAgbWF0Y2hQcmVkaWNhdGUgPSBtYXRjaGVz
QnlJZDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1hdGNoZXNRdWVyeShncmlkTm9k
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIGdyaWROb2RlLl9zZWFyY2hNYXRjaGVk
OwotICAgICAgICAgICAgaWYgKG1hdGNoUHJlZGljYXRlKGdyaWROb2RlKSkgewotICAgICAgICAg
ICAgICAgIGdyaWROb2RlLl9zZWFyY2hNYXRjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBn
cmlkTm9kZS5yZWZyZXNoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgY3VycmVudCA9IHRoaXMuZGF0YUdyaWQucm9vdE5vZGUoKS5jaGlsZHJlblswXTsKLSAgICAg
ICAgdmFyIGRlcHRoID0gMDsKLSAgICAgICAgdmFyIGluZm8gPSB7fTsKLQotICAgICAgICAvLyBS
ZXN0cmljdCB0byB0eXBlIG5vZGVzIGFuZCBpbnN0YW5jZXMuCi0gICAgICAgIGNvbnN0IG1heERl
cHRoID0gMTsKLQotICAgICAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgICAgICAgaWYgKG1h
dGNoZXNRdWVyeShjdXJyZW50KSkKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRz
LnB1c2goeyBub2RlOiBjdXJyZW50IH0pOwotICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQu
dHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgbnVsbCwgKGRlcHRoID49IG1heERlcHRoKSwgaW5mbyk7
Ci0gICAgICAgICAgICBkZXB0aCArPSBpbmZvLmRlcHRoQ2hhbmdlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZmluaXNoZWRDYWxsYmFjayh0aGlzLCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7
Ci0gICAgfSwKLQotICAgIGp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMgfHwgIXRoaXMuX3NlYXJjaFJlc3Vs
dHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9jdXJyZW50U2Vh
cmNoUmVzdWx0SW5kZXggPSAwOwotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhp
cy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4KTsKLSAgICB9LAotCi0gICAganVtcFRvTGFzdFNl
YXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hS
ZXN1bHRzIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gKHRoaXMuX3NlYXJj
aFJlc3VsdHMubGVuZ3RoIC0gMSk7Ci0gICAgICAgIHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0
aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXgpOwotICAgIH0sCi0KLSAgICBqdW1wVG9OZXh0
U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJj
aFJlc3VsdHMgfHwgIXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAoKyt0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPj0gdGhp
cy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNo
UmVzdWx0SW5kZXggPSAwOwotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5f
Y3VycmVudFNlYXJjaFJlc3VsdEluZGV4KTsKLSAgICB9LAotCi0gICAganVtcFRvUHJldmlvdXNT
ZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2VhcmNo
UmVzdWx0cyB8fCAhdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmICgtLXRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA8IDApCi0g
ICAgICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAodGhpcy5fc2VhcmNo
UmVzdWx0cy5sZW5ndGggLSAxKTsKLSAgICAgICAgdGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KHRo
aXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCk7Ci0gICAgfSwKLQotICAgIHNob3dpbmdGaXJz
dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLl9j
dXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPT09IDApOwotICAgIH0sCi0KLSAgICBzaG93aW5nTGFz
dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLl9z
ZWFyY2hSZXN1bHRzICYmIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9PT0gKHRoaXMu
X3NlYXJjaFJlc3VsdHMubGVuZ3RoIC0gMSkpOwotICAgIH0sCi0KLSAgICBfanVtcFRvU2VhcmNo
UmVzdWx0OiBmdW5jdGlvbihpbmRleCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWFyY2hSZXN1bHQg
PSB0aGlzLl9zZWFyY2hSZXN1bHRzW2luZGV4XTsKLSAgICAgICAgaWYgKCFzZWFyY2hSZXN1bHQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG5vZGUgPSBzZWFyY2hSZXN1bHQu
bm9kZTsKLSAgICAgICAgbm9kZS5yZXZlYWxBbmRTZWxlY3QoKTsKLSAgICB9LAotCi0gICAgcmVm
cmVzaFZpc2libGVEYXRhOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY2hpbGQgPSB0
aGlzLmRhdGFHcmlkLnJvb3ROb2RlKCkuY2hpbGRyZW5bMF07Ci0gICAgICAgIHdoaWxlIChjaGls
ZCkgewotICAgICAgICAgICAgY2hpbGQucmVmcmVzaCgpOwotICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC50cmF2ZXJzZU5leHROb2RlKGZhbHNlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBfY2hhbmdlQmFzZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX2Jhc2VQcm9maWxlVWlkID09PSB0aGlzLl9wcm9maWxlcygpW3RoaXMuYmFzZVNlbGVjdEVs
ZW1lbnQuc2VsZWN0ZWRJbmRleF0udWlkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHRoaXMuX2Jhc2VQcm9maWxlVWlkID0gdGhpcy5fcHJvZmlsZXMoKVt0aGlzLmJhc2VTZWxlY3RF
bGVtZW50LnNlbGVjdGVkSW5kZXhdLnVpZDsKLSAgICAgICAgdmFyIGRhdGFHcmlkID0gLyoqIEB0
eXBlIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZkRhdGFHcmlkfSAqLyAodGhpcy5kYXRh
R3JpZCk7Ci0gICAgICAgIC8vIENoYW5nZSBzZXQgYmFzZSBkYXRhIHNvdXJjZSBvbmx5IGlmIG1h
aW4gZGF0YSBzb3VyY2UgaXMgYWxyZWFkeSBzZXQuCi0gICAgICAgIGlmIChkYXRhR3JpZC5zbmFw
c2hvdCkKLSAgICAgICAgICAgIHRoaXMuYmFzZVByb2ZpbGUubG9hZChkYXRhR3JpZC5zZXRCYXNl
RGF0YVNvdXJjZS5iaW5kKGRhdGFHcmlkKSk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRR
dWVyeSB8fCAhdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayB8fCAhdGhpcy5fc2VhcmNoUmVz
dWx0cykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGUgY3VycmVudCBzZWFy
Y2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFnYWluLiBGaXJzdCBuZWdhdGUgb3V0IHByZXZpb3Vz
IG1hdGNoCi0gICAgICAgIC8vIGNvdW50IGJ5IGNhbGxpbmcgdGhlIHNlYXJjaCBmaW5pc2hlZCBj
YWxsYmFjayB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyIG9mIG1hdGNoZXMuCi0gICAgICAgIC8vIFRo
ZW4gcGVyZm9ybSB0aGUgc2VhcmNoIGFnYWluIHdpdGggdGhlIHNhbWUgcXVlcnkgYW5kIGNhbGxi
YWNrLgotICAgICAgICB0aGlzLl9zZWFyY2hGaW5pc2hlZENhbGxiYWNrKHRoaXMsIC10aGlzLl9z
ZWFyY2hSZXN1bHRzLmxlbmd0aCk7Ci0gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCh0aGlzLmN1
cnJlbnRRdWVyeSwgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayk7Ci0gICAgfSwKLQotICAg
IF9jaGFuZ2VGaWx0ZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBwcm9maWxlSW5k
ZXggPSB0aGlzLmZpbHRlclNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCAtIDE7Ci0gICAgICAg
IHRoaXMuZGF0YUdyaWQuZmlsdGVyU2VsZWN0SW5kZXhDaGFuZ2VkKHRoaXMuX3Byb2ZpbGVzKCks
IHByb2ZpbGVJbmRleCk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5Vc2VyQWN0aW9u
LCB7Ci0gICAgICAgICAgICBhY3Rpb246IFdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5Vc2VyQWN0
aW9uTmFtZXMuSGVhcFNuYXBzaG90RmlsdGVyQ2hhbmdlZCwKLSAgICAgICAgICAgIGxhYmVsOiB0
aGlzLmZpbHRlclNlbGVjdEVsZW1lbnRbdGhpcy5maWx0ZXJTZWxlY3RFbGVtZW50LnNlbGVjdGVk
SW5kZXhdLmxhYmVsCi0gICAgICAgIH0pOwotCi0gICAgICAgIGlmICghdGhpcy5jdXJyZW50UXVl
cnkgfHwgIXRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgfHwgIXRoaXMuX3NlYXJjaFJlc3Vs
dHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gVGhlIGN1cnJlbnQgc2VhcmNo
IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi4gRmlyc3QgbmVnYXRlIG91dCBwcmV2aW91cyBt
YXRjaAotICAgICAgICAvLyBjb3VudCBieSBjYWxsaW5nIHRoZSBzZWFyY2ggZmluaXNoZWQgY2Fs
bGJhY2sgd2l0aCBhIG5lZ2F0aXZlIG51bWJlciBvZiBtYXRjaGVzLgotICAgICAgICAvLyBUaGVu
IHBlcmZvcm0gdGhlIHNlYXJjaCBhZ2FpbiB3aXRoIHRoZSBzYW1lIHF1ZXJ5IGFuZCBjYWxsYmFj
ay4KLSAgICAgICAgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayh0aGlzLCAtdGhpcy5fc2Vh
cmNoUmVzdWx0cy5sZW5ndGgpOwotICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2godGhpcy5jdXJy
ZW50UXVlcnksIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBf
Y3JlYXRlVG9vbGJhcldpdGhDbGFzc05hbWVGaWx0ZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciB0b29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAg
IHRvb2xiYXIuYWRkU3R5bGVDbGFzcygiY2xhc3Mtdmlldy10b29sYmFyIik7Ci0gICAgICAgIHZh
ciBjbGFzc05hbWVGaWx0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAg
ICAgICBjbGFzc05hbWVGaWx0ZXIuYWRkU3R5bGVDbGFzcygiY2xhc3MtbmFtZS1maWx0ZXIiKTsK
LSAgICAgICAgY2xhc3NOYW1lRmlsdGVyLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkNsYXNzIGZpbHRlciIpKTsKLSAgICAgICAgY2xhc3NOYW1lRmls
dGVyLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5fY2hhbmdlTmFtZUZpbHRlci5iaW5k
KHRoaXMsIGNsYXNzTmFtZUZpbHRlciksIGZhbHNlKTsKLSAgICAgICAgdG9vbGJhci5hcHBlbmRD
aGlsZChjbGFzc05hbWVGaWx0ZXIpOwotICAgICAgICByZXR1cm4gdG9vbGJhcjsKLSAgICB9LAot
Ci0gICAgX2NoYW5nZU5hbWVGaWx0ZXI6IGZ1bmN0aW9uKGNsYXNzTmFtZUlucHV0RWxlbWVudCkK
LSAgICB7Ci0gICAgICAgIHZhciBmaWx0ZXIgPSBjbGFzc05hbWVJbnB1dEVsZW1lbnQudmFsdWU7
Ci0gICAgICAgIHRoaXMuZGF0YUdyaWQuY2hhbmdlTmFtZUZpbHRlcihmaWx0ZXIpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuUHJvZmls
ZUhlYWRlcj59Ci0gICAgICovCi0gICAgX3Byb2ZpbGVzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UHJvZmlsZVR5cGUodGhpcy5fcHJvZmlsZVR5cGVJ
ZCkuZ2V0UHJvZmlsZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuQ29udGV4dE1lbnV9IGNvbnRleHRNZW51Ci0gICAgICogQHBhcmFtIHtFdmVudH0g
ZXZlbnQKLSAgICAgKi8KLSAgICBwb3B1bGF0ZUNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0
TWVudSwgZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLmRhdGFHcmlkLnBvcHVsYXRlQ29udGV4
dE1lbnUodGhpcy5wYXJlbnQsIGNvbnRleHRNZW51LCBldmVudCk7Ci0gICAgfSwKLQotICAgIF9z
ZWxlY3Rpb25DaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxl
Y3RlZE5vZGUgPSBldmVudC50YXJnZXQuc2VsZWN0ZWROb2RlOwotICAgICAgICB0aGlzLl9zZXRS
ZXRhaW5tZW50RGF0YUdyaWRTb3VyY2Uoc2VsZWN0ZWROb2RlKTsKLSAgICAgICAgdGhpcy5faW5z
cGVjdGVkT2JqZWN0Q2hhbmdlZChldmVudCk7Ci0gICAgfSwKLQotICAgIF9pbnNwZWN0ZWRPYmpl
Y3RDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxlY3RlZE5v
ZGUgPSBldmVudC50YXJnZXQuc2VsZWN0ZWROb2RlOwotICAgICAgICBpZiAoIXRoaXMucHJvZmls
ZS5mcm9tRmlsZSgpICYmIHNlbGVjdGVkTm9kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZSkKLSAgICAgICAgICAgIENvbnNvbGVBZ2VudC5hZGRJ
bnNwZWN0ZWRIZWFwT2JqZWN0KHNlbGVjdGVkTm9kZS5zbmFwc2hvdE5vZGVJZCk7Ci0gICAgfSwK
LQotICAgIF9zZXRSZXRhaW5tZW50RGF0YUdyaWRTb3VyY2U6IGZ1bmN0aW9uKG5vZGVJdGVtKQot
ICAgIHsKLSAgICAgICAgaWYgKG5vZGVJdGVtICYmIG5vZGVJdGVtLnNuYXBzaG90Tm9kZUluZGV4
KQotICAgICAgICAgICAgdGhpcy5yZXRhaW5tZW50RGF0YUdyaWQuc2V0RGF0YVNvdXJjZShub2Rl
SXRlbS5pc0RlbGV0ZWROb2RlID8gbm9kZUl0ZW0uZGF0YUdyaWQuYmFzZVNuYXBzaG90IDogbm9k
ZUl0ZW0uZGF0YUdyaWQuc25hcHNob3QsIG5vZGVJdGVtLnNuYXBzaG90Tm9kZUluZGV4KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5yZXRhaW5tZW50RGF0YUdyaWQucmVzZXQoKTsK
LSAgICB9LAotCi0gICAgX21vdXNlRG93bkluQ29udGVudHNHcmlkOiBmdW5jdGlvbihldmVudCkK
LSAgICB7Ci0gICAgICAgIGlmIChldmVudC5kZXRhaWwgPCAyKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHZhciBjZWxsID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoTm9kZU5hbWUoInRkIik7Ci0gICAgICAgIGlmICghY2VsbCB8fCAoIWNlbGwuaGFzU3R5bGVD
bGFzcygiY291bnQtY29sdW1uIikgJiYgIWNlbGwuaGFzU3R5bGVDbGFzcygic2hhbGxvd1NpemUt
Y29sdW1uIikgJiYgIWNlbGwuaGFzU3R5bGVDbGFzcygicmV0YWluZWRTaXplLWNvbHVtbiIpKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAg
IH0sCi0KLSAgICBjaGFuZ2VWaWV3OiBmdW5jdGlvbih2aWV3VGl0bGUsIGNhbGxiYWNrKQotICAg
IHsKLSAgICAgICAgdmFyIHZpZXdJbmRleCA9IG51bGw7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy52aWV3cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGlmICh0aGlzLnZpZXdz
W2ldLnRpdGxlID09PSB2aWV3VGl0bGUpIHsKLSAgICAgICAgICAgICAgICB2aWV3SW5kZXggPSBp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAodGhp
cy52aWV3cy5jdXJyZW50ID09PSB2aWV3SW5kZXgpIHsKLSAgICAgICAgICAgIHNldFRpbWVvdXQo
Y2FsbGJhY2ssIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gZGF0YUdyaWRDb250ZW50U2hvd24oZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZhciBkYXRhR3JpZCA9IGV2ZW50LmRhdGE7Ci0gICAgICAgICAgICBkYXRhR3JpZC5yZW1v
dmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlk
LkV2ZW50cy5Db250ZW50U2hvd24sIGRhdGFHcmlkQ29udGVudFNob3duLCB0aGlzKTsKLSAgICAg
ICAgICAgIGlmIChkYXRhR3JpZCA9PT0gdGhpcy5kYXRhR3JpZCkKLSAgICAgICAgICAgICAgICBj
YWxsYmFjaygpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMudmlld3Nbdmlld0luZGV4XS5ncmlk
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdy
aWQuRXZlbnRzLkNvbnRlbnRTaG93biwgZGF0YUdyaWRDb250ZW50U2hvd24sIHRoaXMpOwotCi0g
ICAgICAgIHRoaXMudmlld1NlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHZpZXdJbmRleDsK
LSAgICAgICAgdGhpcy5fY2hhbmdlVmlldyh2aWV3SW5kZXgpOwotICAgIH0sCi0KLSAgICBfdXBk
YXRlRGF0YVNvdXJjZUFuZFZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRh
R3JpZCA9IHRoaXMuZGF0YUdyaWQ7Ci0gICAgICAgIGlmIChkYXRhR3JpZC5zbmFwc2hvdCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLnByb2ZpbGUubG9hZChkaWRMb2FkU25h
cHNob3QuYmluZCh0aGlzKSk7Ci0gICAgICAgIGZ1bmN0aW9uIGRpZExvYWRTbmFwc2hvdChzbmFw
c2hvdFByb3h5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGhpcy5kYXRhR3JpZCAhPT0g
ZGF0YUdyaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGRhdGFH
cmlkLnNuYXBzaG90ICE9PSBzbmFwc2hvdFByb3h5KQotICAgICAgICAgICAgICAgIGRhdGFHcmlk
LnNldERhdGFTb3VyY2Uoc25hcHNob3RQcm94eSk7Ci0gICAgICAgICAgICBpZiAoZGF0YUdyaWQg
PT09IHRoaXMuZGlmZkRhdGFHcmlkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9iYXNl
UHJvZmlsZVVpZCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFzZVByb2ZpbGVVaWQgPSB0
aGlzLl9wcm9maWxlcygpW3RoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleF0udWlk
OwotICAgICAgICAgICAgICAgIHRoaXMuYmFzZVByb2ZpbGUubG9hZChkaWRMb2FkQmFzZVNuYXBo
b3QuYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBkaWRMb2FkQmFzZVNuYXBob3QoYmFzZVNuYXBzaG90UHJveHkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh0aGlzLmRpZmZEYXRhR3JpZC5iYXNlU25hcHNob3QgIT09IGJhc2VTbmFw
c2hvdFByb3h5KQotICAgICAgICAgICAgICAgIHRoaXMuZGlmZkRhdGFHcmlkLnNldEJhc2VEYXRh
U291cmNlKGJhc2VTbmFwc2hvdFByb3h5KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfb25T
ZWxlY3RlZFZpZXdDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X2NoYW5nZVZpZXcoZXZlbnQudGFyZ2V0LnNlbGVjdGVkSW5kZXgpOwotICAgIH0sCi0KLSAgICBf
dXBkYXRlU2VsZWN0b3JzVmlzaWJpbGl0eTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuY3VycmVudFZpZXcgPT09IHRoaXMuZGlmZlZpZXcpCi0gICAgICAgICAgICB0aGlzLmJh
c2VTZWxlY3RFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQucGFyZW50
RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLQotICAgICAgICBpZiAodGhpcy5jdXJy
ZW50VmlldyA9PT0gdGhpcy5jb25zdHJ1Y3RvcnNWaWV3KQotICAgICAgICAgICAgdGhpcy5maWx0
ZXJTZWxlY3RFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0RWxlbWVudC5wYXJl
bnRFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgIH0sCi0KLSAgICBfY2hhbmdl
VmlldzogZnVuY3Rpb24oc2VsZWN0ZWRJbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChzZWxlY3Rl
ZEluZGV4ID09PSB0aGlzLnZpZXdzLmN1cnJlbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdGhpcy52aWV3cy5jdXJyZW50ID0gc2VsZWN0ZWRJbmRleDsKLSAgICAgICAgdGhpcy5j
dXJyZW50Vmlldy5kZXRhY2goKTsKLSAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXdzW3RoaXMu
dmlld3MuY3VycmVudF07Ci0gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSB2aWV3LnZpZXc7Ci0g
ICAgICAgIHRoaXMuZGF0YUdyaWQgPSB2aWV3LmdyaWQ7Ci0gICAgICAgIHRoaXMuY3VycmVudFZp
ZXcuc2hvdyh0aGlzLnZpZXdzQ29udGFpbmVyKTsKLSAgICAgICAgdGhpcy5yZWZyZXNoVmlzaWJs
ZURhdGEoKTsKLSAgICAgICAgdGhpcy5kYXRhR3JpZC51cGRhdGVXaWR0aHMoKTsKLQotICAgICAg
ICB0aGlzLl91cGRhdGVTZWxlY3RvcnNWaXNpYmlsaXR5KCk7Ci0KLSAgICAgICAgdGhpcy5fdXBk
YXRlRGF0YVNvdXJjZUFuZFZpZXcoKTsKLQotICAgICAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXJ5
IHx8ICF0aGlzLl9zZWFyY2hGaW5pc2hlZENhbGxiYWNrIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRz
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFRoZSBjdXJyZW50IHNlYXJjaCBu
ZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uIEZpcnN0IG5lZ2F0ZSBvdXQgcHJldmlvdXMgbWF0
Y2gKLSAgICAgICAgLy8gY291bnQgYnkgY2FsbGluZyB0aGUgc2VhcmNoIGZpbmlzaGVkIGNhbGxi
YWNrIHdpdGggYSBuZWdhdGl2ZSBudW1iZXIgb2YgbWF0Y2hlcy4KLSAgICAgICAgLy8gVGhlbiBw
ZXJmb3JtIHRoZSBzZWFyY2ggYWdhaW4gdGhlIHdpdGggc2FtZSBxdWVyeSBhbmQgY2FsbGJhY2su
Ci0gICAgICAgIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sodGhpcywgLXRoaXMuX3NlYXJj
aFJlc3VsdHMubGVuZ3RoKTsKLSAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKHRoaXMuY3VycmVu
dFF1ZXJ5LCB0aGlzLl9zZWFyY2hGaW5pc2hlZENhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgX2dl
dEhvdmVyQW5jaG9yOiBmdW5jdGlvbih0YXJnZXQpCi0gICAgewotICAgICAgICB2YXIgc3BhbiA9
IHRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJzcGFuIik7Ci0gICAgICAg
IGlmICghc3BhbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHJvdyA9IHRhcmdl
dC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJ0ciIpOwotICAgICAgICBpZiAoIXJv
dykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3Bhbi5ub2RlID0gcm93Ll9kYXRhR3Jp
ZE5vZGU7Ci0gICAgICAgIHJldHVybiBzcGFuOwotICAgIH0sCi0KLSAgICBfcmVzb2x2ZU9iamVj
dEZvclBvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHNob3dDYWxsYmFjaywgb2JqZWN0R3JvdXBO
YW1lKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMucHJvZmlsZS5mcm9tRmlsZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBlbGVtZW50Lm5vZGUucXVlcnlPYmplY3RDb250ZW50KHNo
b3dDYWxsYmFjaywgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICB9LAotCi0gICAgX2hlbHBDbGlja2Vk
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5faGVscFBvcG92ZXJD
b250ZW50RWxlbWVudCkgewotICAgICAgICAgICAgdmFyIHJlZlR5cGVzID0gWyJhOiIsICJjb25z
b2xlLWZvcm1hdHRlZC1uYW1lIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJwcm9wZXJ0eSIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwOiIsICJjb25zb2xlLWZvcm1hdHRlZC1uYW1l
IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJlbGVtZW50IiksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImE6IiwgImNvbnNvbGUtZm9ybWF0dGVkLW51bWJlciIsIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiY29udGV4dCB2YXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYToi
LCAiY29uc29sZS1mb3JtYXR0ZWQtbnVsbCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygic3lzdGVt
IHByb3AiKV07Ci0gICAgICAgICAgICB2YXIgb2JqVHlwZXMgPSBbIiBhICIsICJjb25zb2xlLWZv
cm1hdHRlZC1vYmplY3QiLCAiT2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
XCJhXCIiLCAiY29uc29sZS1mb3JtYXR0ZWQtc3RyaW5nIiwgIlN0cmluZyIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIi9hLyIsICJjb25zb2xlLWZvcm1hdHRlZC1zdHJpbmciLCAiUmVn
RXhwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSgpIiwgImNvbnNvbGUtZm9ybWF0
dGVkLWZ1bmN0aW9uIiwgIkZ1bmN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YVtdIiwgImNvbnNvbGUtZm9ybWF0dGVkLW9iamVjdCIsICJBcnJheSIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIm51bSIsICJjb25zb2xlLWZvcm1hdHRlZC1udW1iZXIiLCAiTnVtYmVy
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGEgIiwgImNvbnNvbGUtZm9ybWF0dGVk
LW51bGwiLCAiU3lzdGVtIl07Ci0KLSAgICAgICAgICAgIHZhciBjb250ZW50RWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0gICAgICAgICAgICBjb250ZW50RWxlbWVu
dC5jbGFzc05hbWUgPSAiaGVhcC1zbmFwc2hvdC1oZWxwIjsKLSAgICAgICAgICAgIHZhciBoZWFk
ZXJSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgICAgICAgICAgdmFyIHBy
b3BzSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKLSAgICAgICAgICAgIHBy
b3BzSGVhZGVyLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm9wZXJ0eSB0
eXBlczoiKTsKLSAgICAgICAgICAgIGhlYWRlclJvdy5hcHBlbmRDaGlsZChwcm9wc0hlYWRlcik7
Ci0gICAgICAgICAgICB2YXIgb2Jqc0hlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRo
Iik7Ci0gICAgICAgICAgICBvYmpzSGVhZGVyLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJPYmplY3QgdHlwZXM6Iik7Ci0gICAgICAgICAgICBoZWFkZXJSb3cuYXBwZW5kQ2hp
bGQob2Jqc0hlYWRlcik7Ci0gICAgICAgICAgICBjb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCho
ZWFkZXJSb3cpOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBhcHBlbmRIZWxwKGhlbHAsIGluZGV4
LCBjZWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICBkaXYuY2xhc3NOYW1lID0g
InNvdXJjZS1jb2RlIGV2ZW50LXByb3BlcnRpZXMiOwotICAgICAgICAgICAgICAgIHZhciBuYW1l
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAgIG5hbWUu
dGV4dENvbnRlbnQgPSBoZWxwW2luZGV4XTsKLSAgICAgICAgICAgICAgICBuYW1lLmNsYXNzTmFt
ZSA9IGhlbHBbaW5kZXggKyAxXTsKLSAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobmFt
ZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgICAgICAgICAgICAgZGVzYy50ZXh0Q29udGVudCA9ICIgIiArIGhlbHBbaW5k
ZXggKyAyXTsKLSAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZGVzYyk7Ci0gICAgICAg
ICAgICAgICAgY2VsbC5hcHBlbmRDaGlsZChkaXYpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2YXIgbGVuID0gTWF0aC5tYXgocmVmVHlwZXMubGVuZ3RoLCBvYmpUeXBlcy5sZW5ndGgp
OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewotICAgICAg
ICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgICAg
ICAgICAgICAgIHZhciByZWZDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVmVHlwZXNbaV0pCi0gICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEhlbHAocmVmVHlwZXMsIGksIHJlZkNlbGwpOwotICAgICAgICAgICAgICAgIHJvdy5hcHBlbmRD
aGlsZChyZWZDZWxsKTsKLSAgICAgICAgICAgICAgICB2YXIgb2JqQ2VsbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgICAgICAgICAgICAgaWYgKG9ialR5cGVzW2ldKQotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRIZWxwKG9ialR5cGVzLCBpLCBvYmpDZWxsKTsKLSAgICAg
ICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQob2JqQ2VsbCk7Ci0gICAgICAgICAgICAgICAgY29u
dGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQocm93KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRoaXMuX2hlbHBQb3BvdmVyQ29udGVudEVsZW1lbnQgPSBjb250ZW50RWxlbWVudDsKLSAgICAg
ICAgICAgIHRoaXMuaGVscFBvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIoKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAodGhpcy5oZWxwUG9wb3Zlci5pc1Nob3dpbmcoKSkKLSAgICAg
ICAgICAgIHRoaXMuaGVscFBvcG92ZXIuaGlkZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aGlzLmhlbHBQb3BvdmVyLnNob3codGhpcy5faGVscFBvcG92ZXJDb250ZW50RWxlbWVudCwg
dGhpcy5oZWxwQnV0dG9uLmVsZW1lbnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9zdGFydFJldGFpbmVyc0hlYWRlckRyYWdnaW5n
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aGlzLl9wcmV2aW91c0RyYWdQ
b3NpdGlvbiA9IGV2ZW50LnBhZ2VZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0g
ICAgX3JldGFpbmVyc0hlYWRlckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIHZhciBoZWlnaHQgPSB0aGlzLnJldGFpbm1lbnRWaWV3LmVsZW1lbnQuY2xpZW50SGVpZ2h0
OwotICAgICAgICBoZWlnaHQgKz0gdGhpcy5fcHJldmlvdXNEcmFnUG9zaXRpb24gLSBldmVudC5w
YWdlWTsKLSAgICAgICAgdGhpcy5fcHJldmlvdXNEcmFnUG9zaXRpb24gPSBldmVudC5wYWdlWTsK
LSAgICAgICAgdGhpcy5fdXBkYXRlUmV0YWlubWVudFZpZXdIZWlnaHQoaGVpZ2h0KTsKLSAgICAg
ICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICB9LAotCi0gICAgX2VuZFJldGFpbmVyc0hlYWRl
ckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9w
cmV2aW91c0RyYWdQb3NpdGlvbjsKLSAgICAgICAgZXZlbnQuY29uc3VtZSgpOwotICAgIH0sCi0K
LSAgICBfdXBkYXRlUmV0YWlubWVudFZpZXdIZWlnaHQ6IGZ1bmN0aW9uKGhlaWdodCkKLSAgICB7
Ci0gICAgICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5t
aW5Db25zb2xlSGVpZ2h0LCB0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gUHJlZmVyZW5jZXMu
bWluQ29uc29sZUhlaWdodCk7Ci0gICAgICAgIHRoaXMudmlld3NDb250YWluZXIuc3R5bGUuYm90
dG9tID0gKGhlaWdodCArIHRoaXMucmV0YWlubWVudFZpZXdIZWFkZXIuY2xpZW50SGVpZ2h0KSAr
ICJweCI7Ci0gICAgICAgIHRoaXMucmV0YWlubWVudFZpZXcuZWxlbWVudC5zdHlsZS5oZWlnaHQg
PSBoZWlnaHQgKyAicHgiOwotICAgICAgICB0aGlzLnJldGFpbm1lbnRWaWV3SGVhZGVyLnN0eWxl
LmJvdHRvbSA9IGhlaWdodCArICJweCI7Ci0gICAgICAgIHRoaXMuY3VycmVudFZpZXcuZG9SZXNp
emUoKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZUJhc2VPcHRpb25zOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Byb2ZpbGVzKCk7Ci0gICAgICAgIC8vIFdlJ3Jl
IGFzc3VtaW5nIHRoYXQgc25hcHNob3RzIGNhbiBvbmx5IGJlIGFkZGVkLgotICAgICAgICBpZiAo
dGhpcy5iYXNlU2VsZWN0RWxlbWVudC5sZW5ndGggPT09IGxpc3QubGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmJhc2VTZWxlY3RFbGVtZW50
Lmxlbmd0aCwgbiA9IGxpc3QubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
YmFzZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwotICAgICAgICAg
ICAgdmFyIHRpdGxlID0gbGlzdFtpXS50aXRsZTsKLSAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0
b3IuUHJvZmlsZXNQYW5lbERlc2NyaXB0b3IuaXNVc2VySW5pdGlhdGVkUHJvZmlsZSh0aXRsZSkp
Ci0gICAgICAgICAgICAgICAgdGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNuYXBzaG90
ICVkIiwgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLnVzZXJJbml0aWF0ZWRQ
cm9maWxlSW5kZXgodGl0bGUpKTsKLSAgICAgICAgICAgIGJhc2VPcHRpb24ubGFiZWwgPSB0aXRs
ZTsKLSAgICAgICAgICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFzZU9w
dGlvbik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3VwZGF0ZUZpbHRlck9wdGlvbnM6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcHJvZmlsZXMoKTsKLSAg
ICAgICAgLy8gV2UncmUgYXNzdW1pbmcgdGhhdCBzbmFwc2hvdHMgY2FuIG9ubHkgYmUgYWRkZWQu
Ci0gICAgICAgIGlmICh0aGlzLmZpbHRlclNlbGVjdEVsZW1lbnQubGVuZ3RoIC0gMSA9PT0gbGlz
dC5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCF0aGlzLmZpbHRl
clNlbGVjdEVsZW1lbnQubGVuZ3RoKSB7Ci0gICAgICAgICAgICB2YXIgZmlsdGVyT3B0aW9uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Ci0gICAgICAgICAgICBmaWx0ZXJPcHRp
b24ubGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFsbCBvYmplY3RzIik7Ci0gICAgICAg
ICAgICB0aGlzLmZpbHRlclNlbGVjdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZmlsdGVyT3B0aW9uKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnByb2ZpbGUuZnJvbUZpbGUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuZmlsdGVyU2VsZWN0RWxl
bWVudC5sZW5ndGggLSAxLCBuID0gbGlzdC5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAg
ICAgIHZhciBwcm9maWxlID0gbGlzdFtpXTsKLSAgICAgICAgICAgIHZhciBmaWx0ZXJPcHRpb24g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgICAgIHZhciB0aXRs
ZSA9IGxpc3RbaV0udGl0bGU7Ci0gICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWxEZXNjcmlwdG9yLmlzVXNlckluaXRpYXRlZFByb2ZpbGUodGl0bGUpKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHByb2ZpbGVJbmRleCA9IFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsRGVz
Y3JpcHRvci51c2VySW5pdGlhdGVkUHJvZmlsZUluZGV4KHRpdGxlKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJPYmplY3RzIGFsbG9jYXRlZCBiZWZvcmUgU25hcHNob3QgJWQiLCBwcm9maWxlSW5kZXgp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdHMgYWxsb2NhdGVkIGJldHdlZW4gU25hcHNob3RzICVk
IGFuZCAlZCIsIHByb2ZpbGVJbmRleCAtIDEsIHByb2ZpbGVJbmRleCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmaWx0ZXJPcHRpb24ubGFiZWwgPSB0aXRsZTsKLSAgICAgICAgICAgIHRo
aXMuZmlsdGVyU2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChmaWx0ZXJPcHRpb24pOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50
fSBldmVudAotICAgICAqLwotICAgIF9vblByb2ZpbGVIZWFkZXJBZGRlZDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICBpZiAoIWV2ZW50LmRhdGEgfHwgZXZlbnQuZGF0YS50eXBlICE9
PSB0aGlzLl9wcm9maWxlVHlwZUlkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlz
Ll91cGRhdGVCYXNlT3B0aW9ucygpOwotICAgICAgICB0aGlzLl91cGRhdGVGaWx0ZXJPcHRpb25z
KCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBl
Ci19Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3Iu
UHJvZmlsZVR5cGV9Ci0gKiBAaW1wbGVtZW50cyB7SGVhcFByb2ZpbGVyQWdlbnQuRGlzcGF0Y2hl
cn0KLSAqLwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlID0gZnVuY3Rpb24o
KQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
VGFrZSBIZWFwIFNuYXBzaG90IikpOwotICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJIZWFw
UHJvZmlsZXJEaXNwYXRjaGVyKHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUuVHlwZUlkID0gIkhFQVAiOwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewotICAgIGdldCBidXR0b25Ub29sdGlwKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRha2UgaGVhcCBzbmFwc2hv
dC4iKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHJldHVy
biB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBpc0luc3RhbnRQcm9maWxlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92
ZXJyaWRlCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBidXR0b25DbGlj
a2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl90YWtlSGVhcFNuYXBzaG90KCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgZ2V0IHRyZWVJdGVtVGl0bGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSEVBUCBTTkFQ
U0hPVFMiKTsKLSAgICB9LAotCi0gICAgZ2V0IGRlc2NyaXB0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhlYXAgc25hcHNob3QgcHJvZmlsZXMgc2hv
dyBtZW1vcnkgZGlzdHJpYnV0aW9uIGFtb25nIHlvdXIgcGFnZSdzIEphdmFTY3JpcHQgb2JqZWN0
cyBhbmQgcmVsYXRlZCBET00gbm9kZXMuIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBv
dmVycmlkZQotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdGl0bGUKLSAgICAgKiBAcmV0dXJuIHsh
V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gICAgICovCi0gICAgY3JlYXRlVGVtcG9yYXJ5
UHJvZmlsZTogZnVuY3Rpb24odGl0bGUpCi0gICAgewotICAgICAgICB0aXRsZSA9IHRpdGxlIHx8
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU25hcHNob3R0aW5nXHUyMDI2Iik7Ci0gICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyKHRoaXMsIHRpdGxlKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtIZWFwUHJv
ZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCi0gICAgICogQHJldHVybiB7IVdlYklu
c3BlY3Rvci5Qcm9maWxlSGVhZGVyfQotICAgICAqLwotICAgIGNyZWF0ZVByb2ZpbGU6IGZ1bmN0
aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFw
UHJvZmlsZUhlYWRlcih0aGlzLCBwcm9maWxlLnRpdGxlLCBwcm9maWxlLnVpZCwgcHJvZmlsZS5t
YXhKU09iamVjdElkIHx8IDApOwotICAgIH0sCi0KLSAgICBfdGFrZUhlYXBTbmFwc2hvdDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHRlbXBvcmFyeVByb2ZpbGUgPSB0aGlzLmZpbmRU
ZW1wb3JhcnlQcm9maWxlKCk7Ci0gICAgICAgIGlmICghdGVtcG9yYXJ5UHJvZmlsZSkKLSAgICAg
ICAgICAgIHRoaXMuYWRkUHJvZmlsZSh0aGlzLmNyZWF0ZVRlbXBvcmFyeVByb2ZpbGUoKSk7Ci0g
ICAgICAgIEhlYXBQcm9maWxlckFnZW50LnRha2VIZWFwU25hcHNob3QodHJ1ZSwgZnVuY3Rpb24o
KSB7fSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci51c2VyTWV0cmljcy5Qcm9maWxlc0hlYXBQcm9m
aWxlVGFrZW4ucmVjb3JkKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7SGVh
cFByb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZUhlYWRlcgotICAgICAqLwotICAg
IGFkZFByb2ZpbGVIZWFkZXI6IGZ1bmN0aW9uKHByb2ZpbGVIZWFkZXIpCi0gICAgewotICAgICAg
ICB0aGlzLmFkZFByb2ZpbGUodGhpcy5jcmVhdGVQcm9maWxlKHByb2ZpbGVIZWFkZXIpKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IHVpZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaHVuawotICAgICAqLwotICAgIGFkZEhlYXBT
bmFwc2hvdENodW5rOiBmdW5jdGlvbih1aWQsIGNodW5rKQotICAgIHsKLSAgICAgICAgdmFyIHBy
b2ZpbGUgPSB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkKV07Ci0gICAgICAg
IGlmIChwcm9maWxlKQotICAgICAgICAgICAgcHJvZmlsZS50cmFuc2ZlckNodW5rKGNodW5rKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IHVpZAotICAgICAqLwotICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odWlkKQot
ICAgIHsKLSAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21h
a2VLZXkodWlkKV07Ci0gICAgICAgIGlmIChwcm9maWxlKQotICAgICAgICAgICAgcHJvZmlsZS5m
aW5pc2hIZWFwU25hcHNob3QoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRl
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGRvbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdG90
YWwKLSAgICAgKi8KLSAgICByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzczogZnVuY3Rpb24oZG9u
ZSwgdG90YWwpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuZmluZFRlbXBvcmFy
eVByb2ZpbGUoKTsKLSAgICAgICAgaWYgKHByb2ZpbGUpCi0gICAgICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRzLlByb2dy
ZXNzVXBkYXRlZCwgeyJwcm9maWxlIjogcHJvZmlsZSwgImRvbmUiOiBkb25lLCAidG90YWwiOiB0
b3RhbH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAg
ICByZXNldFByb2ZpbGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9yZXNldCgp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0geyFX
ZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAqLwotICAgIHJlbW92ZVBy
b2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUuY2FsbCh0aGlzLCBwcm9maWxlKTsKLSAg
ICAgICAgaWYgKCFwcm9maWxlLmlzVGVtcG9yYXJ5KQotICAgICAgICAgICAgSGVhcFByb2ZpbGVy
QWdlbnQucmVtb3ZlUHJvZmlsZShwcm9maWxlLnVpZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24odGhpczpXZWJJbnNwZWN0b3Iu
UHJvZmlsZVR5cGUsID9zdHJpbmcsIEFycmF5LjxQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXI+
KX0gcG9wdWxhdGVDYWxsYmFjawotICAgICAqLwotICAgIF9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFj
a2VuZDogZnVuY3Rpb24ocG9wdWxhdGVDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIEhlYXBQcm9m
aWxlckFnZW50LmdldFByb2ZpbGVIZWFkZXJzKHBvcHVsYXRlQ2FsbGJhY2spOwotICAgIH0sCi0K
LSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGUKLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhl
YWRlcn0KLSAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZX0gdHlwZQotICogQHBh
cmFtIHtzdHJpbmd9IHRpdGxlCi0gKiBAcGFyYW0ge251bWJlcj19IHVpZAotICogQHBhcmFtIHtu
dW1iZXI9fSBtYXhKU09iamVjdElkCi0gKi8KLVdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRl
ciA9IGZ1bmN0aW9uKHR5cGUsIHRpdGxlLCB1aWQsIG1heEpTT2JqZWN0SWQpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRsZSwgdWlkKTsKLSAg
ICB0aGlzLm1heEpTT2JqZWN0SWQgPSBtYXhKU09iamVjdElkOwotICAgIC8qKgotICAgICAqIEB0
eXBlIHtXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtfQotICAgICAqLwotICAgIHRoaXMuX3JlY2Vp
dmVyID0gbnVsbDsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb3h5fQotICAgICAqLwotICAgIHRoaXMuX3NuYXBzaG90UHJveHkgPSBudWxsOwotICAg
IHRoaXMuX3RvdGFsTnVtYmVyT2ZDaHVua3MgPSAwOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFBy
b2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAg
ICAqLwotICAgIGNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGViYXJUcmVlRWxlbWVudCh0
aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNuYXBzaG90ICVkIiksICJoZWFwLXNuYXBzaG90
LXNpZGViYXItdHJlZS1pdGVtIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1Bh
bmVsCi0gICAgICovCi0gICAgY3JlYXRlVmlldzogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcocHJv
ZmlsZXNQYW5lbCwgdGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5KTp2
b2lkfSBjYWxsYmFjawotICAgICAqLwotICAgIGxvYWQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3NuYXBzaG90UHJveHkpIHsKLSAgICAgICAgICAgIGNhbGxi
YWNrKHRoaXMuX3NuYXBzaG90UHJveHkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5fbnVtYmVyT2ZDaHVua3MgPSAwOwotICAgICAgICB0aGlzLl9zYXZl
ZENodW5rcyA9IDA7Ci0gICAgICAgIHRoaXMuX3NhdmluZ1RvRmlsZSA9IGZhbHNlOwotICAgICAg
ICBpZiAoIXRoaXMuX3JlY2VpdmVyKSB7Ci0gICAgICAgICAgICB0aGlzLl9zZXR1cFdvcmtlcigp
OwotICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiTG9hZGluZ1x1MjAyNiIpOwotICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxl
bWVudC53YWl0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRTbmFwc2hvdFRyYW5zZmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGxvYWRlclByb3h5ID0gLyoqIEB0eXBlIHtXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyUHJveHl9ICovICh0aGlzLl9yZWNlaXZlcik7Ci0g
ICAgICAgIGxvYWRlclByb3h5LmFkZENvbnN1bWVyKGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAg
c3RhcnRTbmFwc2hvdFRyYW5zZmVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBIZWFwUHJv
ZmlsZXJBZ2VudC5nZXRIZWFwU25hcHNob3QodGhpcy51aWQpOwotICAgIH0sCi0KLSAgICBzbmFw
c2hvdENvbnN0cnVjdG9yTmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJK
U0hlYXBTbmFwc2hvdCI7Ci0gICAgfSwKLQotICAgIHNuYXBzaG90UHJveHlDb25zdHJ1Y3Rvcjog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQcm94eTsKLSAgICB9LAotCi0gICAgX3NldHVwV29ya2VyOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBmdW5jdGlvbiBzZXRQcm9maWxlV2FpdChldmVudCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC53YWl0ID0gZXZlbnQuZGF0YTsKLSAgICAgICAgfQot
ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXIo
KTsKLSAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIndhaXQiLCBzZXRQcm9maWxlV2Fp
dCwgdGhpcyk7Ci0gICAgICAgIHZhciBsb2FkZXJQcm94eSA9IHdvcmtlci5jcmVhdGVMb2FkZXIo
dGhpcy5zbmFwc2hvdENvbnN0cnVjdG9yTmFtZSgpLCB0aGlzLnNuYXBzaG90UHJveHlDb25zdHJ1
Y3RvcigpKTsKLSAgICAgICAgbG9hZGVyUHJveHkuYWRkQ29uc3VtZXIodGhpcy5fc25hcHNob3RS
ZWNlaXZlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fcmVjZWl2ZXIgPSBsb2FkZXJQcm94
eTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgZGlz
cG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlY2VpdmVyKQotICAg
ICAgICAgICAgdGhpcy5fcmVjZWl2ZXIuY2xvc2UoKTsKLSAgICAgICAgZWxzZSBpZiAodGhpcy5f
c25hcHNob3RQcm94eSkKLSAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90UHJveHkuZGlzcG9zZSgp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbWF4VmFsdWUKLSAgICAgKi8KLSAgICBfdXBkYXRlVHJhbnNmZXJQ
cm9ncmVzczogZnVuY3Rpb24odmFsdWUsIG1heFZhbHVlKQotICAgIHsKLSAgICAgICAgdmFyIHBl
cmNlbnRWYWx1ZSA9ICgobWF4VmFsdWUgPyAodmFsdWUgLyBtYXhWYWx1ZSkgOiAwKSAqIDEwMCku
dG9GaXhlZCgwKTsKLSAgICAgICAgaWYgKHRoaXMuX3NhdmluZ1RvRmlsZSkKLSAgICAgICAgICAg
IHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNh
dmluZ1x1MjAyNiAlZFwlIiwgcGVyY2VudFZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
TG9hZGluZ1x1MjAyNiAlZFwlIiwgcGVyY2VudFZhbHVlKTsKLSAgICB9LAotCi0gICAgX3VwZGF0
ZVNuYXBzaG90U3RhdHVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnNpZGViYXJF
bGVtZW50LnN1YnRpdGxlID0gTnVtYmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5fc25hcHNob3RQcm94
eS50b3RhbFNpemUpOwotICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LndhaXQgPSBmYWxzZTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCi0gICAgICov
Ci0gICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmspCi0gICAgewotICAgICAgICArK3Ro
aXMuX251bWJlck9mQ2h1bmtzOwotICAgICAgICB0aGlzLl9yZWNlaXZlci53cml0ZShjaHVuaywg
Y2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmZXJQcm9ncmVzcygrK3RoaXMuX3Nh
dmVkQ2h1bmtzLCB0aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzKTsKLSAgICAgICAgICAgIGlmICh0
aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzID09PSB0aGlzLl9zYXZlZENodW5rcykgewotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9zYXZpbmdUb0ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX3VwZGF0ZVNuYXBzaG90U3RhdHVzKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJQYXJzaW5nXHUyMDI2Iik7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9yZWNl
aXZlci5jbG9zZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9z
bmFwc2hvdFJlY2VpdmVkOiBmdW5jdGlvbihzbmFwc2hvdFByb3h5KQotICAgIHsKLSAgICAgICAg
dGhpcy5fcmVjZWl2ZXIgPSBudWxsOwotICAgICAgICBpZiAoc25hcHNob3RQcm94eSkKLSAgICAg
ICAgICAgIHRoaXMuX3NuYXBzaG90UHJveHkgPSBzbmFwc2hvdFByb3h5OwotICAgICAgICB0aGlz
Ll91cGRhdGVTbmFwc2hvdFN0YXR1cygpOwotICAgICAgICB2YXIgd29ya2VyID0gLyoqIEB0eXBl
IHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyfSAqLyAodGhpcy5fc25hcHNob3RQcm94
eS53b3JrZXIpOwotICAgICAgICB0aGlzLmlzVGVtcG9yYXJ5ID0gZmFsc2U7Ci0gICAgICAgIHdv
cmtlci5zdGFydENoZWNraW5nRm9yTG9uZ1J1bm5pbmdDYWxscygpOwotICAgIH0sCi0KLSAgICBm
aW5pc2hIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RvdGFs
TnVtYmVyT2ZDaHVua3MgPSB0aGlzLl9udW1iZXJPZkNodW5rczsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAg
ICBjYW5TYXZlVG9GaWxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gIXRoaXMu
ZnJvbUZpbGUoKSAmJiAhIXRoaXMuX3NuYXBzaG90UHJveHkgJiYgIXRoaXMuX3JlY2VpdmVyOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICBzYXZlVG9G
aWxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9udW1iZXJPZkNodW5rcyA9IDA7
Ci0KLSAgICAgICAgdmFyIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgV2ViSW5zcGVjdG9yLkZpbGVP
dXRwdXRTdHJlYW0oKTsKLSAgICAgICAgZnVuY3Rpb24gb25PcGVuKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhpcy5fcmVjZWl2ZXIgPSBmaWxlT3V0cHV0U3RyZWFtOwotICAgICAgICAgICAg
dGhpcy5fc2F2ZWRDaHVua3MgPSAwOwotICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmZXJQ
cm9ncmVzcygwLCB0aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzKTsKLSAgICAgICAgICAgIEhlYXBQ
cm9maWxlckFnZW50LmdldEhlYXBTbmFwc2hvdCh0aGlzLnVpZCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy5fc2F2aW5nVG9GaWxlID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fZmlsZU5hbWUgPSB0
aGlzLl9maWxlTmFtZSB8fCAiSGVhcC0iICsgbmV3IERhdGUoKS50b0lTTzg2MDFDb21wYWN0KCkg
KyAiLmhlYXBzbmFwc2hvdCI7Ci0gICAgICAgIGZpbGVPdXRwdXRTdHJlYW0ub3Blbih0aGlzLl9m
aWxlTmFtZSwgb25PcGVuLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
b3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge0ZpbGV9IGZpbGUKLSAgICAgKi8KLSAgICBsb2FkRnJv
bUZpbGU6IGZ1bmN0aW9uKGZpbGUpCi0gICAgewotICAgICAgICB0aGlzLnRpdGxlID0gZmlsZS5u
YW1lOwotICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJMb2FkaW5nXHUyMDI2Iik7Ci0gICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQu
d2FpdCA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3NldHVwV29ya2VyKCk7Ci0gICAgICAgIHRoaXMu
X251bWJlck9mQ2h1bmtzID0gMDsKLSAgICAgICAgdGhpcy5fc2F2aW5nVG9GaWxlID0gZmFsc2U7
Ci0KLSAgICAgICAgdmFyIGRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RM
b2FkRnJvbUZpbGVEZWxlZ2F0ZSh0aGlzKTsKLSAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSB0aGlz
Ll9jcmVhdGVGaWxlUmVhZGVyKGZpbGUsIGRlbGVnYXRlKTsKLSAgICAgICAgZmlsZVJlYWRlci5z
dGFydCh0aGlzLl9yZWNlaXZlcik7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVGaWxlUmVhZGVyOiBm
dW5jdGlvbihmaWxlLCBkZWxlZ2F0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyKGZpbGUsIDEwMDAwMDAwLCBkZWxlZ2F0ZSk7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBl
Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9y
Lk91dHB1dFN0cmVhbURlbGVnYXRlfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9h
ZEZyb21GaWxlRGVsZWdhdGUgPSBmdW5jdGlvbihzbmFwc2hvdEhlYWRlcikKLXsKLSAgICB0aGlz
Ll9zbmFwc2hvdEhlYWRlciA9IHNuYXBzaG90SGVhZGVyOwotfQotCi1XZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90TG9hZEZyb21GaWxlRGVsZWdhdGUucHJvdG90eXBlID0gewotICAgIG9uVHJhbnNm
ZXJTdGFydGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5DaHVua2VkUmVhZGVyfSByZWFkZXIKLSAgICAgKi8KLSAgICBv
bkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHJlYWRlcikKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3NuYXBzaG90SGVhZGVyLl91cGRhdGVUcmFuc2ZlclByb2dyZXNzKHJlYWRlci5sb2FkZWRTaXpl
KCksIHJlYWRlci5maWxlU2l6ZSgpKTsKLSAgICB9LAotCi0gICAgb25UcmFuc2ZlckZpbmlzaGVk
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5maW5pc2hI
ZWFwU25hcHNob3QoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuQ2h1bmtlZFJlYWRlcn0gcmVhZGVyCi0gICAgICovCi0gICAgb25FcnJvcjogZnVuY3Rp
b24gKHJlYWRlciwgZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaChlLnRhcmdldC5lcnJvci5jb2Rl
KSB7Ci0gICAgICAgIGNhc2UgZS50YXJnZXQuZXJyb3IuTk9UX0ZPVU5EX0VSUjoKLSAgICAgICAg
ICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCInJXMnIG5vdCBmb3VuZC4iLCByZWFkZXIuZmlsZU5hbWUoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGUudGFyZ2V0LmVycm9yLk5PVF9SRUFEQUJMRV9F
UlI6Ci0gICAgICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5zaWRlYmFyRWxlbWVudC5zdWJ0
aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJyVzJyBpcyBub3QgcmVhZGFibGUiLCByZWFk
ZXIuZmlsZU5hbWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGUudGFyZ2V0LmVy
cm9yLkFCT1JUX0VSUjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgdGhpcy5fc25hcHNob3RIZWFkZXIuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiclcycgZXJyb3IgJWQiLCByZWFkZXIuZmlsZU5hbWUoKSwg
ZS50YXJnZXQuZXJyb3IuY29kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFdvcmtlci5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90V29ya2VyLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjlkMjY2Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90V29ya2VyLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVdlYkluc3BlY3RvciA9IHt9OwotV2ViSW5zcGVj
dG9yLlVJU3RyaW5nID0gZnVuY3Rpb24ocykgeyByZXR1cm4gczsgfTsKLQotaW1wb3J0U2NyaXB0
cygiSGVhcFNuYXBzaG90LmpzIik7Ci1pbXBvcnRTY3JpcHRzKCJIZWFwU25hcHNob3RMb2FkZXIu
anMiKTsKLWltcG9ydFNjcmlwdHMoIkhlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanMiKTsK
LWltcG9ydFNjcmlwdHMoIkpTSGVhcFNuYXBzaG90LmpzIik7Ci1pbXBvcnRTY3JpcHRzKCJOYXRp
dmVIZWFwU25hcHNob3QuanMiKTsKLWltcG9ydFNjcmlwdHMoIkZpbGVVdGlscy5qcyIpOwotaW1w
b3J0U2NyaXB0cygidXRpbGl0aWVzLmpzIik7Ci0KLWZ1bmN0aW9uIHBvc3RNZXNzYWdlV3JhcHBl
cihtZXNzYWdlKQotewotICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuV29ya2VyQ29uc29sZSA9IGZ1bmN0aW9uKCkK
LXsKLX0KLQotV2ViSW5zcGVjdG9yLldvcmtlckNvbnNvbGUucHJvdG90eXBlID0gewotICAgIC8q
KiBAcGFyYW0gey4uLip9IHZhcl9hcmdzICovCi0gICAgbG9nOiBmdW5jdGlvbih2YXJfYXJncykK
LSAgICB7Ci0gICAgICAgIHRoaXMuX3Bvc3RNZXNzYWdlKCJsb2ciLCBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMpKTsKLSAgICB9LAotCi0gICAgLyoqIEBwYXJhbSB7Li4uKn0g
dmFyX2FyZ3MgKi8KLSAgICBlcnJvcjogZnVuY3Rpb24odmFyX2FyZ3MpCi0gICAgewotICAgICAg
ICB0aGlzLl9wb3N0TWVzc2FnZSgiZXJyb3IiLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMpKTsKLSAgICB9LAotCi0gICAgLyoqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgKi8K
LSAgICBpbmZvOiBmdW5jdGlvbih2YXJfYXJncykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Bvc3RN
ZXNzYWdlKCJpbmZvIiwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7Ci0g
ICAgfSwKLQotICAgIHRyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmxvZyhu
ZXcgRXJyb3IoKS5zdGFjayk7Ci0gICAgfSwKLQotICAgIC8qKiBAcGFyYW0ge3N0cmluZ30gbWV0
aG9kICovCi0gICAgLyoqIEBwYXJhbSB7QXJyYXkuPCo+fSBhcmdzICovCi0gICAgX3Bvc3RNZXNz
YWdlOiBmdW5jdGlvbihtZXRob2QsIGFyZ3MpCi0gICAgewotICAgICAgICB2YXIgcmF3TWVzc2Fn
ZSA9IHsKLSAgICAgICAgICAgIG9iamVjdDogImNvbnNvbGUiLAotICAgICAgICAgICAgbWV0aG9k
OiBtZXRob2QsCi0gICAgICAgICAgICBhcmd1bWVudHM6IGFyZ3MKLSAgICAgICAgfTsKLSAgICAg
ICAgcG9zdE1lc3NhZ2VXcmFwcGVyKHJhd01lc3NhZ2UpOwotICAgIH0KLX07Ci0KLXZhciBkaXNw
YXRjaGVyID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyKHRo
aXMsIHBvc3RNZXNzYWdlV3JhcHBlcik7Ci1hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZGlz
cGF0Y2hlci5kaXNwYXRjaE1lc3NhZ2UuYmluZChkaXNwYXRjaGVyKSwgZmFsc2UpOwotY29uc29s
ZSA9IG5ldyBXZWJJbnNwZWN0b3IuV29ya2VyQ29uc29sZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVy
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RXb3Jr
ZXJEaXNwYXRjaGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTMxNDFhLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90V29ya2VyRGlzcGF0Y2hlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyRGlz
cGF0Y2hlciA9IGZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgcG9zdE1lc3NhZ2UpCi17Ci0gICAgdGhp
cy5fb2JqZWN0cyA9IFtdOwotICAgIHRoaXMuX2dsb2JhbCA9IGdsb2JhbE9iamVjdDsKLSAgICB0
aGlzLl9wb3N0TWVzc2FnZSA9IHBvc3RNZXNzYWdlOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90V29ya2VyRGlzcGF0Y2hlci5wcm90b3R5cGUgPSB7Ci0gICAgX2ZpbmRGdW5jdGlvbjog
ZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBwYXRoID0gbmFtZS5zcGxpdCgiLiIp
OwotICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZ2xvYmFsOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBhdGgubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRb
cGF0aFtpXV07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIGRpc3BhdGNo
TWVzc2FnZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZGF0YSA9IGV2ZW50
LmRhdGE7Ci0gICAgICAgIHZhciByZXNwb25zZSA9IHtjYWxsSWQ6IGRhdGEuY2FsbElkfTsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5kaXNwb3NpdGlvbikgewotICAg
ICAgICAgICAgICAgIGNhc2UgImNyZWF0ZSI6IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNv
bnN0cnVjdG9yRnVuY3Rpb24gPSB0aGlzLl9maW5kRnVuY3Rpb24oZGF0YS5tZXRob2ROYW1lKTsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0c1tkYXRhLm9iamVjdElkXSA9IG5ldyBj
b25zdHJ1Y3RvckZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlICJkaXNwb3NlIjogewotICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fb2JqZWN0c1tkYXRhLm9iamVjdElkXTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNh
c2UgImdldHRlciI6IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMuX29i
amVjdHNbZGF0YS5vYmplY3RJZF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBv
YmplY3RbZGF0YS5tZXRob2ROYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVz
dWx0ID0gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSAiZmFjdG9yeSI6IHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIG9iamVjdCA9IHRoaXMuX29iamVjdHNbZGF0YS5vYmplY3RJZF07Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciByZXN1bHQgPSBvYmplY3RbZGF0YS5tZXRob2ROYW1lXS5hcHBseShvYmpl
Y3QsIGRhdGEubWV0aG9kQXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdHNbZGF0YS5uZXdPYmplY3RJ
ZF0gPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdCA9ICEhcmVz
dWx0OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgY2FzZSAibWV0aG9kIjogewotICAgICAgICAgICAgICAgICAgICB2YXIgb2Jq
ZWN0ID0gdGhpcy5fb2JqZWN0c1tkYXRhLm9iamVjdElkXTsKLSAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2UucmVzdWx0ID0gb2JqZWN0W2RhdGEubWV0aG9kTmFtZV0uYXBwbHkob2JqZWN0LCBk
YXRhLm1ldGhvZEFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAg
ICAgICAgcmVzcG9uc2UuZXJyb3IgPSBlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICByZXNwb25z
ZS5lcnJvckNhbGxTdGFjayA9IGUuc3RhY2s7Ci0gICAgICAgICAgICBpZiAoZGF0YS5tZXRob2RO
YW1lKQotICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9yTWV0aG9kTmFtZSA9IGRhdGEubWV0
aG9kTmFtZTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9wb3N0TWVzc2FnZShyZXNwb25zZSk7
Ci0gICAgfQotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSGVscFNjcmVlbi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVs
cFNjcmVlbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyM2M1Mi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlbHBTY3JlZW4uanMK
KysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
cGFyYW0ge3N0cmluZz19IHRpdGxlCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5IZWxwU2NyZWVuID0gZnVuY3Rpb24odGl0bGUpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLm1hcmtBc1Jvb3QoKTsKLSAgICB0
aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1MoImhlbHBTY3JlZW4uY3NzIik7Ci0KLSAgICB0aGlzLmVs
ZW1lbnQuY2xhc3NOYW1lID0gImhlbHAtd2luZG93LW91dGVyIjsKLSAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLCBm
YWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LnRhYkluZGV4ID0gMDsKLSAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKSwgZmFsc2Up
OwotCi0gICAgaWYgKHRpdGxlKSB7Ci0gICAgICAgIHZhciBtYWluV2luZG93ID0gdGhpcy5lbGVt
ZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiaGVscC13aW5kb3ctbWFpbiIpOwotICAgICAgICB2YXIg
Y2FwdGlvbldpbmRvdyA9IG1haW5XaW5kb3cuY3JlYXRlQ2hpbGQoImRpdiIsICJoZWxwLXdpbmRv
dy1jYXB0aW9uIik7Ci0gICAgICAgIGNhcHRpb25XaW5kb3cuYXBwZW5kQ2hpbGQodGhpcy5fY3Jl
YXRlQ2xvc2VCdXR0b24oKSk7Ci0gICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQgPSBtYWluV2lu
ZG93LmNyZWF0ZUNoaWxkKCJkaXYiLCAiaGVscC1jb250ZW50Iik7Ci0gICAgICAgIGNhcHRpb25X
aW5kb3cuY3JlYXRlQ2hpbGQoImgxIiwgImhlbHAtd2luZG93LXRpdGxlIikudGV4dENvbnRlbnQg
PSB0aXRsZTsKLSAgICB9Ci19Ci0KLS8qKgotICogQHR5cGUge1dlYkluc3BlY3Rvci5IZWxwU2Ny
ZWVufQotICovCi1XZWJJbnNwZWN0b3IuSGVscFNjcmVlbi5fdmlzaWJsZVNjcmVlbiA9IG51bGw7
Ci0KLVdlYkluc3BlY3Rvci5IZWxwU2NyZWVuLnByb3RvdHlwZSA9IHsKLSAgICBfY3JlYXRlQ2xv
c2VCdXR0b246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjbG9zZUJ1dHRvbiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwotICAgICAgICBjbG9zZUJ1dHRvbi5jbGFz
c05hbWUgPSAiaGVscC1jbG9zZS1idXR0b24iOwotICAgICAgICBjbG9zZUJ1dHRvbi50ZXh0Q29u
dGVudCA9ICJcdTI3MTYiOyAvLyBDb2RlIHN0YW5kcyBmb3IgSEVBVlkgTVVMVElQTElDQVRJT04g
WC4KLSAgICAgICAgY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhp
ZGUuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gY2xvc2VCdXR0b247Ci0gICAg
fSwKLQotICAgIHNob3dNb2RhbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHZpc2li
bGVIZWxwU2NyZWVuID0gV2ViSW5zcGVjdG9yLkhlbHBTY3JlZW4uX3Zpc2libGVTY3JlZW47Ci0g
ICAgICAgIGlmICh2aXNpYmxlSGVscFNjcmVlbiA9PT0gdGhpcykKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAodmlzaWJsZUhlbHBTY3JlZW4pCi0gICAgICAgICAgICB2aXNpYmxl
SGVscFNjcmVlbi5oaWRlKCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5IZWxwU2NyZWVuLl92aXNp
YmxlU2NyZWVuID0gdGhpczsKLSAgICAgICAgdGhpcy5zaG93KGRvY3VtZW50LmJvZHkpOwotICAg
ICAgICB0aGlzLmZvY3VzKCk7Ci0gICAgfSwKLQotICAgIGhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBXZWJJbnNwZWN0b3IuSGVscFNjcmVlbi5fdmlzaWJsZVNjcmVlbiA9IG51bGw7Ci0K
LSAgICAgICAgV2ViSW5zcGVjdG9yLnJlc3RvcmVGb2N1c0Zyb21FbGVtZW50KHRoaXMuZWxlbWVu
dCk7Ci0gICAgICAgIHRoaXMuZGV0YWNoKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBrZXlDb2RlCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8K
LSAgICBpc0Nsb3NpbmdLZXk6IGZ1bmN0aW9uKGtleUNvZGUpCi0gICAgewotICAgICAgICByZXR1
cm4gWwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5FbnRl
ci5jb2RlLAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5F
c2MuY29kZSwKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMu
U3BhY2UuY29kZSwKLSAgICAgICAgXS5pbmRleE9mKGtleUNvZGUpID49IDA7Ci0gICAgfSwKLQot
ICAgIF9vbktleURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
aXNTaG93aW5nKCkgJiYgdGhpcy5pc0Nsb3NpbmdLZXkoZXZlbnQua2V5Q29kZSkpIHsKLSAgICAg
ICAgICAgIHRoaXMuaGlkZSgpOwotICAgICAgICAgICAgZXZlbnQuY29uc3VtZSgpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF9vbkJsdXI6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgLy8gUHJldGVuZCB3ZSdyZSBtb2RhbCwgZ3JhYiBmb2N1cyBiYWNrIGlmIHdlJ3JlIHN0aWxs
IHNob3duLgotICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmcoKSAmJiAhdGhpcy5lbGVtZW50Lmlz
U2VsZk9yQW5jZXN0b3IoZXZlbnQudGFyZ2V0KSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5z
ZXRDdXJyZW50Rm9jdXNFbGVtZW50KHRoaXMuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAcGFyYW0ge3N0cmluZz19IHRpdGxlCi0gKiBAcGFyYW0ge3N0cmluZz19IG1lc3Nh
Z2UKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVscFNjcmVlbn0KLSAqLwotV2ViSW5zcGVj
dG9yLkhlbHBTY3JlZW5VbnRpbFJlbG9hZCA9IGZ1bmN0aW9uKHRpdGxlLCBtZXNzYWdlKQotewot
ICAgIFdlYkluc3BlY3Rvci5IZWxwU2NyZWVuLmNhbGwodGhpcywgdGl0bGUpOwotICAgIHZhciBw
ID0gdGhpcy5jb250ZW50RWxlbWVudC5jcmVhdGVDaGlsZCgicCIpOwotICAgIHAuYWRkU3R5bGVD
bGFzcygiaGVscC1zZWN0aW9uIik7Ci0gICAgcC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7Ci0gICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuR2xvYmFsT2JqZWN0Q2xlYXJlZCwgdGhpcy5oaWRlLCB0aGlz
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkhlbHBTY3JlZW5VbnRpbFJlbG9hZC5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgd2lsbEhpZGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkdsb2JhbE9iamVj
dENsZWFyZWQsIHRoaXMuaGlkZSwgdGhpcyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5IZWxwU2Ny
ZWVuLnByb3RvdHlwZS53aWxsSGlkZS5jYWxsKHRoaXMpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5IZWxwU2NyZWVuLnByb3RvdHlwZQotfQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlVmlldy5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmNWNiMGRjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vKioKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUmVzb3VyY2VWaWV3fQot
ICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5JbWFnZVZpZXcgPSBmdW5jdGlvbihy
ZXNvdXJjZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2VWaWV3LmNhbGwodGhpcywgcmVz
b3VyY2UpOwotCi0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImltYWdlIik7Ci19Ci0K
LVdlYkluc3BlY3Rvci5JbWFnZVZpZXcucHJvdG90eXBlID0gewotICAgIGhhc0NvbnRlbnQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICB3YXNT
aG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3JlYXRlQ29udGVudElmTmVl
ZGVkKCk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVDb250ZW50SWZOZWVkZWQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgdmFyIGltYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7Ci0gICAgICAgIGltYWdlQ29udGFpbmVyLmNsYXNzTmFtZSA9ICJpbWFnZSI7Ci0gICAg
ICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbWFnZUNvbnRhaW5lcik7Ci0KLSAgICAgICAg
dmFyIGltYWdlUHJldmlld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsK
LSAgICAgICAgaW1hZ2VQcmV2aWV3RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJyZXNvdXJjZS1pbWFn
ZS12aWV3Iik7Ci0gICAgICAgIGltYWdlQ29udGFpbmVyLmFwcGVuZENoaWxkKGltYWdlUHJldmll
d0VsZW1lbnQpOwotICAgICAgICBpbWFnZVByZXZpZXdFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImNvbnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnUuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0KLSAg
ICAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSAiaW5mbyI7Ci0gICAgICAgIHRoaXMu
ZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpOwotCi0gICAgICAgIHZhciBpbWFn
ZU5hbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKTsKLSAgICAgICAgaW1h
Z2VOYW1lRWxlbWVudC5jbGFzc05hbWUgPSAidGl0bGUiOwotICAgICAgICBpbWFnZU5hbWVFbGVt
ZW50LnRleHRDb250ZW50ID0gdGhpcy5yZXNvdXJjZS5kaXNwbGF5TmFtZTsKLSAgICAgICAgdGhp
cy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGltYWdlTmFtZUVsZW1lbnQpOwotCi0gICAgICAgIHZh
ciBpbmZvTGlzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkbCIpOwotICAgICAg
ICBpbmZvTGlzdEVsZW1lbnQuY2xhc3NOYW1lID0gImluZm9MaXN0IjsKLQotICAgICAgICB0aGlz
LnJlc291cmNlLnBvcHVsYXRlSW1hZ2VTb3VyY2UoaW1hZ2VQcmV2aWV3RWxlbWVudCk7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gb25JbWFnZUxvYWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
Y29udGVudCA9IHRoaXMucmVzb3VyY2UuY29udGVudDsKLSAgICAgICAgICAgIGlmIChjb250ZW50
KQotICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZVNpemUgPSB0aGlzLl9iYXNlNjRUb1NpemUo
Y29udGVudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFyIHJlc291cmNl
U2l6ZSA9IHRoaXMucmVzb3VyY2UucmVzb3VyY2VTaXplOwotCi0gICAgICAgICAgICB2YXIgaW1h
Z2VQcm9wZXJ0aWVzID0gWwotICAgICAgICAgICAgICAgIHsgbmFtZTogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJEaW1lbnNpb25zIiksIHZhbHVlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVkIMOX
ICVkIiwgaW1hZ2VQcmV2aWV3RWxlbWVudC5uYXR1cmFsV2lkdGgsIGltYWdlUHJldmlld0VsZW1l
bnQubmF0dXJhbEhlaWdodCkgfSwKLSAgICAgICAgICAgICAgICB7IG5hbWU6IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiRmlsZSBzaXplIiksIHZhbHVlOiBOdW1iZXIuYnl0ZXNUb1N0cmluZyhyZXNv
dXJjZVNpemUpIH0sCi0gICAgICAgICAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIk1JTUUgdHlwZSIpLCB2YWx1ZTogdGhpcy5yZXNvdXJjZS5taW1lVHlwZSB9Ci0gICAgICAg
ICAgICBdOwotCi0gICAgICAgICAgICBpbmZvTGlzdEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VQcm9wZXJ0aWVzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGR0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZHQiKTsKLSAgICAgICAgICAgICAgICBkdC50ZXh0Q29udGVudCA9IGltYWdlUHJvcGVydGllc1tp
XS5uYW1lOwotICAgICAgICAgICAgICAgIGluZm9MaXN0RWxlbWVudC5hcHBlbmRDaGlsZChkdCk7
Ci0gICAgICAgICAgICAgICAgdmFyIGRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGQiKTsK
LSAgICAgICAgICAgICAgICBkZC50ZXh0Q29udGVudCA9IGltYWdlUHJvcGVydGllc1tpXS52YWx1
ZTsKLSAgICAgICAgICAgICAgICBpbmZvTGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZGQpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGR0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZHQiKTsKLSAgICAgICAgICAgIGR0LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJVUkwiKTsKLSAgICAgICAgICAgIGluZm9MaXN0RWxlbWVudC5hcHBlbmRDaGlsZChkdCk7Ci0g
ICAgICAgICAgICB2YXIgZGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZCIpOwotICAgICAg
ICAgICAgdmFyIGV4dGVybmFsUmVzb3VyY2UgPSB0cnVlOwotICAgICAgICAgICAgZGQuYXBwZW5k
Q2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUodGhpcy5yZXNvdXJjZS51cmwsIHVu
ZGVmaW5lZCwgdW5kZWZpbmVkLCBleHRlcm5hbFJlc291cmNlKSk7Ci0gICAgICAgICAgICBpbmZv
TGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZGQpOwotCi0gICAgICAgICAgICB0aGlzLl9jb250YWlu
ZXIuYXBwZW5kQ2hpbGQoaW5mb0xpc3RFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBpbWFn
ZVByZXZpZXdFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBvbkltYWdlTG9hZC5iaW5k
KHRoaXMpLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9iYXNlNjRUb1NpemU6IGZ1bmN0aW9uKGNv
bnRlbnQpCi0gICAgewotICAgICAgICBpZiAoIWNvbnRlbnQubGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHZhciBzaXplID0gKGNvbnRlbnQubGVuZ3RoIHx8IDApICogMyAv
IDQ7Ci0gICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDAgJiYgY29udGVudFtjb250ZW50Lmxl
bmd0aCAtIDFdID09PSAiPSIpCi0gICAgICAgICAgICBzaXplLS07Ci0gICAgICAgIGlmIChjb250
ZW50Lmxlbmd0aCA+IDEgJiYgY29udGVudFtjb250ZW50Lmxlbmd0aCAtIDJdID09PSAiPSIpCi0g
ICAgICAgICAgICBzaXplLS07Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0sCi0KLSAgICBf
Y29udGV4dE1lbnU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRN
ZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudShldmVudCk7Ci0gICAgICAgIGNvbnRl
eHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VM
b3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQ29weSBpbWFnZSBVUkwiIDogIkNvcHkgSW1hZ2UgVVJM
IiksIHRoaXMuX2NvcHlJbWFnZVVSTC5iaW5kKHRoaXMpKTsKLSAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2Fz
ZU1lbnVUaXRsZXMoKSA/ICJPcGVuIGltYWdlIGluIG5ldyB0YWIiIDogIk9wZW4gSW1hZ2UgaW4g
TmV3IFRhYiIpLCB0aGlzLl9vcGVuSW5OZXdUYWIuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRl
eHRNZW51LnNob3coKTsKLSAgICB9LAotCi0gICAgX2NvcHlJbWFnZVVSTDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRoaXMucmVzb3Vy
Y2UudXJsKTsKLSAgICB9LAotCi0gICAgX29wZW5Jbk5ld1RhYjogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lm9wZW5Jbk5ld1RhYih0aGlzLnJlc291cmNl
LnVybCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlJlc291cmNlVmll
dy5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW5kZXhlZERCTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luZGV4ZWREQk1vZGVsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTE1
ODBlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5k
ZXhlZERCTW9kZWwuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5z
cGVjdG9yLkluZGV4ZWREQk1vZGVsID0gZnVuY3Rpb24oKQotewotICAgIEluZGV4ZWREQkFnZW50
LmVuYWJsZSgpOwotCi0gICAgV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuU2VjdXJp
dHlPcmlnaW5BZGRlZCwgdGhpcy5fc2VjdXJpdHlPcmlnaW5BZGRlZCwgdGhpcyk7Ci0gICAgV2Vi
SW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuU2VjdXJpdHlPcmlnaW5SZW1vdmVkLCB0aGlz
Ll9zZWN1cml0eU9yaWdpblJlbW92ZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fZGF0YWJhc2VzID0g
bmV3IE1hcCgpOwotICAgIHRoaXMuX2RhdGFiYXNlTmFtZXNCeVNlY3VyaXR5T3JpZ2luID0ge307
Ci0gICAgdGhpcy5fcmVzZXQoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLktl
eVR5cGVzID0gewotICAgIE51bWJlclR5cGU6ICAibnVtYmVyIiwKLSAgICBTdHJpbmdUeXBlOiAg
InN0cmluZyIsCi0gICAgRGF0ZVR5cGU6ICAgICJkYXRlIiwKLSAgICBBcnJheVR5cGU6ICAgImFy
cmF5IgotfTsKLQotV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLktleVBhdGhUeXBlcyA9IHsK
LSAgICBOdWxsVHlwZTogICAgIm51bGwiLAotICAgIFN0cmluZ1R5cGU6ICAic3RyaW5nIiwKLSAg
ICBBcnJheVR5cGU6ICAgImFycmF5IgotfTsKLQotV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVs
LmtleUZyb21JREJLZXkgPSBmdW5jdGlvbihpZGJLZXkpCi17Ci0gICAgaWYgKHR5cGVvZihpZGJL
ZXkpID09PSAidW5kZWZpbmVkIiB8fCBpZGJLZXkgPT09IG51bGwpCi0gICAgICAgIHJldHVybiBu
dWxsOwotCi0gICAgdmFyIGtleSA9IHt9OwotICAgIHN3aXRjaCAodHlwZW9mKGlkYktleSkpIHsK
LSAgICBjYXNlICJudW1iZXIiOgotICAgICAgICBrZXkubnVtYmVyID0gaWRiS2V5OwotICAgICAg
ICBrZXkudHlwZSA9IFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5LZXlUeXBlcy5OdW1iZXJU
eXBlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICJzdHJpbmciOgotICAgICAgICBrZXkuc3Ry
aW5nID0gaWRiS2V5OwotICAgICAgICBrZXkudHlwZSA9IFdlYkluc3BlY3Rvci5JbmRleGVkREJN
b2RlbC5LZXlUeXBlcy5TdHJpbmdUeXBlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICJvYmpl
Y3QiOgotICAgICAgICBpZiAoaWRiS2V5IGluc3RhbmNlb2YgRGF0ZSkgewotICAgICAgICAgICAg
a2V5LmRhdGUgPSBpZGJLZXkuZ2V0VGltZSgpOwotICAgICAgICAgICAga2V5LnR5cGUgPSBXZWJJ
bnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuS2V5VHlwZXMuRGF0ZVR5cGU7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaWRiS2V5IGluc3RhbmNlb2YgQXJyYXkpIHsKLSAgICAgICAgICAgIGtleS5hcnJheSA9
IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZGJLZXkubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICAgICAga2V5LmFycmF5LnB1c2goV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1v
ZGVsLmtleUZyb21JREJLZXkoaWRiS2V5W2ldKSk7Ci0gICAgICAgICAgICBrZXkudHlwZSA9IFdl
Ykluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5LZXlUeXBlcy5BcnJheVR5cGU7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotICAgIHJldHVybiBrZXk7Ci19Ci0KLVdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5rZXlS
YW5nZUZyb21JREJLZXlSYW5nZSA9IGZ1bmN0aW9uKGlkYktleVJhbmdlKQotewotICAgIHZhciBJ
REJLZXlSYW5nZSA9IHdpbmRvdy5JREJLZXlSYW5nZSB8fCB3aW5kb3cud2Via2l0SURCS2V5UmFu
Z2U7Ci0gICAgaWYgKHR5cGVvZihpZGJLZXlSYW5nZSkgPT09ICJ1bmRlZmluZWQiIHx8IGlkYktl
eVJhbmdlID09PSBudWxsKQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHZhciBrZXlSYW5n
ZSA9IHt9OwotICAgIGtleVJhbmdlLmxvd2VyID0gV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVs
LmtleUZyb21JREJLZXkoaWRiS2V5UmFuZ2UubG93ZXIpOwotICAgIGtleVJhbmdlLnVwcGVyID0g
V2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLmtleUZyb21JREJLZXkoaWRiS2V5UmFuZ2UudXBw
ZXIpOwotICAgIGtleVJhbmdlLmxvd2VyT3BlbiA9IGlkYktleVJhbmdlLmxvd2VyT3BlbjsKLSAg
ICBrZXlSYW5nZS51cHBlck9wZW4gPSBpZGJLZXlSYW5nZS51cHBlck9wZW47Ci0gICAgcmV0dXJu
IGtleVJhbmdlOwotfQotCi0vKioKLSAqIEBwYXJhbSB7SW5kZXhlZERCQWdlbnQuS2V5UGF0aH0g
a2V5UGF0aAotICovCi1XZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuaWRiS2V5UGF0aEZyb21L
ZXlQYXRoID0gZnVuY3Rpb24oa2V5UGF0aCkKLXsKLSAgICB2YXIgaWRiS2V5UGF0aDsKLSAgICBz
d2l0Y2ggKGtleVBhdGgudHlwZSkgewotICAgIGNhc2UgV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1v
ZGVsLktleVBhdGhUeXBlcy5OdWxsVHlwZToKLSAgICAgICAgaWRiS2V5UGF0aCA9IG51bGw7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLktleVBh
dGhUeXBlcy5TdHJpbmdUeXBlOgotICAgICAgICBpZGJLZXlQYXRoID0ga2V5UGF0aC5zdHJpbmc7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLktl
eVBhdGhUeXBlcy5BcnJheVR5cGU6Ci0gICAgICAgIGlkYktleVBhdGggPSBrZXlQYXRoLmFycmF5
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGlkYktleVBhdGg7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5rZXlQYXRoU3RyaW5nRnJvbUlEQktleVBhdGggPSBm
dW5jdGlvbihpZGJLZXlQYXRoKQotewotICAgIGlmICh0eXBlb2YgaWRiS2V5UGF0aCA9PT0gInN0
cmluZyIpCi0gICAgICAgIHJldHVybiAiXCIiICsgaWRiS2V5UGF0aCArICJcIiI7Ci0gICAgaWYg
KGlkYktleVBhdGggaW5zdGFuY2VvZiBBcnJheSkKLSAgICAgICAgcmV0dXJuICJbXCIiICsgaWRi
S2V5UGF0aC5qb2luKCJcIiwgXCIiKSArICJcIl0iOwotICAgIHJldHVybiBudWxsOwotfQotCi1X
ZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRXZlbnRUeXBlcyA9IHsKLSAgICBEYXRhYmFzZUFk
ZGVkOiAiRGF0YWJhc2VBZGRlZCIsCi0gICAgRGF0YWJhc2VSZW1vdmVkOiAiRGF0YWJhc2VSZW1v
dmVkIiwKLSAgICBEYXRhYmFzZUxvYWRlZDogIkRhdGFiYXNlTG9hZGVkIgotfQotCi1XZWJJbnNw
ZWN0b3IuSW5kZXhlZERCTW9kZWwucHJvdG90eXBlID0gewotICAgIF9yZXNldDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgc2VjdXJpdHlPcmlnaW4gaW4gdGhpcy5fZGF0YWJh
c2VOYW1lc0J5U2VjdXJpdHlPcmlnaW4pCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVPcmlnaW4o
c2VjdXJpdHlPcmlnaW4pOwotICAgICAgICB2YXIgc2VjdXJpdHlPcmlnaW5zID0gV2ViSW5zcGVj
dG9yLnJlc291cmNlVHJlZU1vZGVsLnNlY3VyaXR5T3JpZ2lucygpOwotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHNlY3VyaXR5T3JpZ2lucy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRo
aXMuX2FkZE9yaWdpbihzZWN1cml0eU9yaWdpbnNbaV0pOwotICAgIH0sCi0KLSAgICByZWZyZXNo
RGF0YWJhc2VOYW1lczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgc2VjdXJp
dHlPcmlnaW4gaW4gdGhpcy5fZGF0YWJhc2VOYW1lc0J5U2VjdXJpdHlPcmlnaW4pCi0gICAgICAg
ICAgICB0aGlzLl9sb2FkRGF0YWJhc2VOYW1lcyhzZWN1cml0eU9yaWdpbik7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLkRhdGFi
YXNlSWR9IGRhdGFiYXNlSWQKLSAgICAgKi8KLSAgICByZWZyZXNoRGF0YWJhc2U6IGZ1bmN0aW9u
KGRhdGFiYXNlSWQpCi0gICAgewotICAgICAgICB0aGlzLl9sb2FkRGF0YWJhc2UoZGF0YWJhc2VJ
ZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkluZGV4
ZWREQk1vZGVsLkRhdGFiYXNlSWR9IGRhdGFiYXNlSWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
b2JqZWN0U3RvcmVOYW1lCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxsYmFjawotICAg
ICAqLwotICAgIGNsZWFyT2JqZWN0U3RvcmU6IGZ1bmN0aW9uKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlTmFtZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBJbmRleGVkREJBZ2VudC5jbGVhck9i
amVjdFN0b3JlKGRhdGFiYXNlSWQuc2VjdXJpdHlPcmlnaW4sIGRhdGFiYXNlSWQubmFtZSwgb2Jq
ZWN0U3RvcmVOYW1lLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9zZWN1cml0eU9yaWdp
bkFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWN1cml0eU9yaWdp
biA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHRoaXMuX2Fk
ZE9yaWdpbihzZWN1cml0eU9yaWdpbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9zZWN1cml0eU9yaWdp
blJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHNlY3VyaXR5T3Jp
Z2luID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgdGhpcy5f
cmVtb3ZlT3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IHNlY3VyaXR5T3JpZ2luCi0gICAgICovCi0gICAgX2FkZE9yaWdpbjog
ZnVuY3Rpb24oc2VjdXJpdHlPcmlnaW4pCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCgh
dGhpcy5fZGF0YWJhc2VOYW1lc0J5U2VjdXJpdHlPcmlnaW5bc2VjdXJpdHlPcmlnaW5dKTsKLSAg
ICAgICAgdGhpcy5fZGF0YWJhc2VOYW1lc0J5U2VjdXJpdHlPcmlnaW5bc2VjdXJpdHlPcmlnaW5d
ID0gW107Ci0gICAgICAgIHRoaXMuX2xvYWREYXRhYmFzZU5hbWVzKHNlY3VyaXR5T3JpZ2luKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3VyaXR5T3JpZ2lu
Ci0gICAgICovCi0gICAgX3JlbW92ZU9yaWdpbjogZnVuY3Rpb24oc2VjdXJpdHlPcmlnaW4pCi0g
ICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9kYXRhYmFzZU5hbWVzQnlTZWN1cml0
eU9yaWdpbltzZWN1cml0eU9yaWdpbl0pOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX2RhdGFiYXNlTmFtZXNCeVNlY3VyaXR5T3JpZ2luW3NlY3VyaXR5T3JpZ2luXS5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2RhdGFiYXNlUmVtb3ZlZChzZWN1cml0eU9yaWdpbiwg
dGhpcy5fZGF0YWJhc2VOYW1lc0J5U2VjdXJpdHlPcmlnaW5bc2VjdXJpdHlPcmlnaW5dW2ldKTsK
LSAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFiYXNlTmFtZXNCeVNlY3VyaXR5T3JpZ2luW3NlY3Vy
aXR5T3JpZ2luXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNl
Y3VyaXR5T3JpZ2luCi0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gZGF0YWJhc2VOYW1l
cwotICAgICAqLwotICAgIF91cGRhdGVPcmlnaW5EYXRhYmFzZU5hbWVzOiBmdW5jdGlvbihzZWN1
cml0eU9yaWdpbiwgZGF0YWJhc2VOYW1lcykKLSAgICB7Ci0gICAgICAgIHZhciBuZXdEYXRhYmFz
ZU5hbWVzID0ge307Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YWJhc2VOYW1lcy5s
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG5ld0RhdGFiYXNlTmFtZXNbZGF0YWJhc2VOYW1lc1tp
XV0gPSB0cnVlOwotICAgICAgICB2YXIgb2xkRGF0YWJhc2VOYW1lcyA9IHt9OwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2RhdGFiYXNlTmFtZXNCeVNlY3VyaXR5T3JpZ2luW3Nl
Y3VyaXR5T3JpZ2luXS5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG9sZERhdGFiYXNlTmFtZXNb
dGhpcy5fZGF0YWJhc2VOYW1lc0J5U2VjdXJpdHlPcmlnaW5bc2VjdXJpdHlPcmlnaW5dW2ldXSA9
IHRydWU7Ci0KLSAgICAgICAgdGhpcy5fZGF0YWJhc2VOYW1lc0J5U2VjdXJpdHlPcmlnaW5bc2Vj
dXJpdHlPcmlnaW5dID0gZGF0YWJhc2VOYW1lczsKLQotICAgICAgICBmb3IgKHZhciBkYXRhYmFz
ZU5hbWUgaW4gb2xkRGF0YWJhc2VOYW1lcykgewotICAgICAgICAgICAgaWYgKCFuZXdEYXRhYmFz
ZU5hbWVzW2RhdGFiYXNlTmFtZV0pCi0gICAgICAgICAgICAgICAgdGhpcy5fZGF0YWJhc2VSZW1v
dmVkKHNlY3VyaXR5T3JpZ2luLCBkYXRhYmFzZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGZv
ciAodmFyIGRhdGFiYXNlTmFtZSBpbiBuZXdEYXRhYmFzZU5hbWVzKSB7Ci0gICAgICAgICAgICBp
ZiAoIW9sZERhdGFiYXNlTmFtZXNbZGF0YWJhc2VOYW1lXSkKLSAgICAgICAgICAgICAgICB0aGlz
Ll9kYXRhYmFzZUFkZGVkKHNlY3VyaXR5T3JpZ2luLCBkYXRhYmFzZU5hbWUpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN1cml0eU9yaWdp
bgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhYmFzZU5hbWUKLSAgICAgKi8KLSAgICBfZGF0
YWJhc2VBZGRlZDogZnVuY3Rpb24oc2VjdXJpdHlPcmlnaW4sIGRhdGFiYXNlTmFtZSkKLSAgICB7
Ci0gICAgICAgIHZhciBkYXRhYmFzZUlkID0gbmV3IFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2Rl
bC5EYXRhYmFzZUlkKHNlY3VyaXR5T3JpZ2luLCBkYXRhYmFzZU5hbWUpOwotICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRXZl
bnRUeXBlcy5EYXRhYmFzZUFkZGVkLCBkYXRhYmFzZUlkKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3VyaXR5T3JpZ2luCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IGRhdGFiYXNlTmFtZQotICAgICAqLwotICAgIF9kYXRhYmFzZVJlbW92ZWQ6IGZ1bmN0aW9u
KHNlY3VyaXR5T3JpZ2luLCBkYXRhYmFzZU5hbWUpCi0gICAgewotICAgICAgICB2YXIgZGF0YWJh
c2VJZCA9IG5ldyBXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2VJZChzZWN1cml0
eU9yaWdpbiwgZGF0YWJhc2VOYW1lKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLkV2ZW50VHlwZXMuRGF0YWJhc2VSZW1v
dmVkLCBkYXRhYmFzZUlkKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IHNlY3VyaXR5T3JpZ2luCi0gICAgICovCi0gICAgX2xvYWREYXRhYmFzZU5hbWVzOiBmdW5j
dGlvbihzZWN1cml0eU9yaWdpbikKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFy
YW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtBcnJheS48c3Ry
aW5nPn0gZGF0YWJhc2VOYW1lcwotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJh
Y2soZXJyb3IsIGRhdGFiYXNlTmFtZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJv
cikgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkluZGV4ZWREQkFnZW50IGVycm9y
OiAiICsgZXJyb3IpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKCF0aGlzLl9kYXRhYmFzZU5hbWVzQnlTZWN1cml0eU9yaWdpbltzZWN1
cml0eU9yaWdpbl0pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdGhpcy5f
dXBkYXRlT3JpZ2luRGF0YWJhc2VOYW1lcyhzZWN1cml0eU9yaWdpbiwgZGF0YWJhc2VOYW1lcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBJbmRleGVkREJBZ2VudC5yZXF1ZXN0RGF0YWJhc2VOYW1l
cyhzZWN1cml0eU9yaWdpbiwgY2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLkRhdGFiYXNlSWR9
IGRhdGFiYXNlSWQKLSAgICAgKi8KLSAgICBfbG9hZERhdGFiYXNlOiBmdW5jdGlvbihkYXRhYmFz
ZUlkKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVy
cm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge0luZGV4ZWREQkFnZW50LkRhdGFiYXNlV2l0
aE9iamVjdFN0b3Jlc30gZGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzCi0gICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgZGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCJJbmRleGVkREJBZ2VudCBlcnJvcjogIiArIGVycm9yKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5fZGF0
YWJhc2VOYW1lc0J5U2VjdXJpdHlPcmlnaW5bZGF0YWJhc2VJZC5zZWN1cml0eU9yaWdpbl0pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdmFyIGRhdGFiYXNlTW9kZWwgPSBu
ZXcgV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLkRhdGFiYXNlKGRhdGFiYXNlSWQsIGRhdGFi
YXNlV2l0aE9iamVjdFN0b3Jlcy52ZXJzaW9uLCBkYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMuaW50
VmVyc2lvbik7Ci0gICAgICAgICAgICB0aGlzLl9kYXRhYmFzZXMucHV0KGRhdGFiYXNlSWQsIGRh
dGFiYXNlTW9kZWwpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhYmFzZVdp
dGhPYmplY3RTdG9yZXMub2JqZWN0U3RvcmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG9iamVjdFN0b3JlID0gZGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzLm9iamVjdFN0b3Jl
c1tpXTsKLSAgICAgICAgICAgICAgICB2YXIgb2JqZWN0U3RvcmVJREJLZXlQYXRoID0gV2ViSW5z
cGVjdG9yLkluZGV4ZWREQk1vZGVsLmlkYktleVBhdGhGcm9tS2V5UGF0aChvYmplY3RTdG9yZS5r
ZXlQYXRoKTsKLSAgICAgICAgICAgICAgICB2YXIgb2JqZWN0U3RvcmVNb2RlbCA9IG5ldyBXZWJJ
bnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUubmFtZSwgb2Jq
ZWN0U3RvcmVJREJLZXlQYXRoLCBvYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50KTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdFN0b3JlLmluZGV4ZXMubGVuZ3RoOyAr
K2opIHsKLSAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG9iamVjdFN0b3JlLmluZGV4
ZXNbal07Ci0gICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXhJREJLZXlQYXRoID0gV2ViSW5z
cGVjdG9yLkluZGV4ZWREQk1vZGVsLmlkYktleVBhdGhGcm9tS2V5UGF0aChpbmRleC5rZXlQYXRo
KTsKLSAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleE1vZGVsID0gbmV3IFdlYkluc3BlY3Rv
ci5JbmRleGVkREJNb2RlbC5JbmRleChpbmRleC5uYW1lLCBpbmRleElEQktleVBhdGgsIGluZGV4
LnVuaXF1ZSwgaW5kZXgubXVsdGlFbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICBvYmplY3RT
dG9yZU1vZGVsLmluZGV4ZXNbaW5kZXhNb2RlbC5uYW1lXSA9IGluZGV4TW9kZWw7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRhdGFiYXNlTW9kZWwub2JqZWN0U3RvcmVzW29i
amVjdFN0b3JlTW9kZWwubmFtZV0gPSBvYmplY3RTdG9yZU1vZGVsOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
SW5kZXhlZERCTW9kZWwuRXZlbnRUeXBlcy5EYXRhYmFzZUxvYWRlZCwgZGF0YWJhc2VNb2RlbCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBJbmRleGVkREJBZ2VudC5yZXF1ZXN0RGF0YWJhc2UoZGF0
YWJhc2VJZC5zZWN1cml0eU9yaWdpbiwgZGF0YWJhc2VJZC5uYW1lLCBjYWxsYmFjay5iaW5kKHRo
aXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5k
ZXhlZERCTW9kZWwuRGF0YWJhc2VJZH0gZGF0YWJhc2VJZAotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBvYmplY3RTdG9yZU5hbWUKLSAgICAgKiBAcGFyYW0ge3dlYmtpdElEQktleVJhbmdlfSBpZGJL
ZXlSYW5nZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBza2lwQ291bnQKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gcGFnZVNpemUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxXZWJJbnNw
ZWN0b3IuSW5kZXhlZERCTW9kZWwuRW50cnk+LCBib29sZWFuKX0gY2FsbGJhY2sKLSAgICAgKi8K
LSAgICBsb2FkT2JqZWN0U3RvcmVEYXRhOiBmdW5jdGlvbihkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZU5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplLCBjYWxsYmFjaykKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3JlcXVlc3REYXRhKGRhdGFiYXNlSWQsIGRhdGFiYXNlSWQubmFtZSwg
b2JqZWN0U3RvcmVOYW1lLCAiIiwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUsIGNh
bGxiYWNrKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
SW5kZXhlZERCTW9kZWwuRGF0YWJhc2VJZH0gZGF0YWJhc2VJZAotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBvYmplY3RTdG9yZU5hbWUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5kZXhOYW1lCi0g
ICAgICogQHBhcmFtIHt3ZWJraXRJREJLZXlSYW5nZX0gaWRiS2V5UmFuZ2UKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0gc2tpcENvdW50Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VTaXplCi0g
ICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48V2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVs
LkVudHJ5PiwgYm9vbGVhbil9IGNhbGxiYWNrCi0gICAgICovCi0gICAgbG9hZEluZGV4RGF0YTog
ZnVuY3Rpb24oZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUsIGlkYktleVJh
bmdlLCBza2lwQ291bnQsIHBhZ2VTaXplLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3JlcXVlc3REYXRhKGRhdGFiYXNlSWQsIGRhdGFiYXNlSWQubmFtZSwgb2JqZWN0U3RvcmVOYW1l
LCBpbmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplLCBjYWxsYmFjayk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkluZGV4ZWRE
Qk1vZGVsLkRhdGFiYXNlSWR9IGRhdGFiYXNlSWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0
YWJhc2VOYW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdFN0b3JlTmFtZQotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBpbmRleE5hbWUKLSAgICAgKiBAcGFyYW0ge3dlYmtpdElEQktleVJh
bmdlfSBpZGJLZXlSYW5nZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBza2lwQ291bnQKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gcGFnZVNpemUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5
LjxXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRW50cnk+LCBib29sZWFuKX0gY2FsbGJhY2sK
LSAgICAgKi8KLSAgICBfcmVxdWVzdERhdGE6IGZ1bmN0aW9uKGRhdGFiYXNlSWQsIGRhdGFiYXNl
TmFtZSwgb2JqZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQs
IHBhZ2VTaXplLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFy
YW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtBcnJheS48SW5k
ZXhlZERCQWdlbnQuRGF0YUVudHJ5Pn0gZGF0YUVudHJpZXMKLSAgICAgICAgICogQHBhcmFtIHti
b29sZWFufSBoYXNNb3JlCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBpbm5lckNhbGxi
YWNrKGVycm9yLCBkYXRhRW50cmllcywgaGFzTW9yZSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiSW5kZXhlZERCQWdl
bnQgZXJyb3I6ICIgKyBlcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIXRoaXMuX2RhdGFiYXNlTmFtZXNCeVNlY3VyaXR5T3Jp
Z2luW2RhdGFiYXNlSWQuc2VjdXJpdHlPcmlnaW5dKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIHZhciBlbnRyaWVzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGRhdGFFbnRyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGtl
eSA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQoZGF0YUVudHJpZXNbaV0u
a2V5KTsKLSAgICAgICAgICAgICAgICB2YXIgcHJpbWFyeUtleSA9IFdlYkluc3BlY3Rvci5SZW1v
dGVPYmplY3QuZnJvbVBheWxvYWQoZGF0YUVudHJpZXNbaV0ucHJpbWFyeUtleSk7Ci0gICAgICAg
ICAgICAgICAgdmFyIHZhbHVlID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9h
ZChkYXRhRW50cmllc1tpXS52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKG5l
dyBXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRW50cnkoa2V5LCBwcmltYXJ5S2V5LCB2YWx1
ZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FsbGJhY2soZW50cmllcywgaGFzTW9y
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIga2V5UmFuZ2UgPSBXZWJJbnNwZWN0b3IuSW5k
ZXhlZERCTW9kZWwua2V5UmFuZ2VGcm9tSURCS2V5UmFuZ2UoaWRiS2V5UmFuZ2UpOwotICAgICAg
ICBJbmRleGVkREJBZ2VudC5yZXF1ZXN0RGF0YShkYXRhYmFzZUlkLnNlY3VyaXR5T3JpZ2luLCBk
YXRhYmFzZU5hbWUsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBza2lwQ291bnQsIHBhZ2VT
aXplLCBrZXlSYW5nZSA/IGtleVJhbmdlIDogdW5kZWZpbmVkLCBpbm5lckNhbGxiYWNrLmJpbmQo
dGhpcykpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJv
dG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5SZW1vdGVPYmplY3R9IGtleQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0
fSBwcmltYXJ5S2V5Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZW1vdGVPYmplY3R9IHZhbHVl
Ci0gKi8KLVdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5FbnRyeSA9IGZ1bmN0aW9uKGtleSwg
cHJpbWFyeUtleSwgdmFsdWUpCi17Ci0gICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgdGhpcy5wcmlt
YXJ5S2V5ID0gcHJpbWFyeUtleTsKLSAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJpdHlPcmlnaW4KLSAqIEBw
YXJhbSB7c3RyaW5nfSBuYW1lCi0gKi8KLVdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5EYXRh
YmFzZUlkID0gZnVuY3Rpb24oc2VjdXJpdHlPcmlnaW4sIG5hbWUpCi17Ci0gICAgdGhpcy5zZWN1
cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOwotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci19Ci0K
LVdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5EYXRhYmFzZUlkLnByb3RvdHlwZSA9IHsKLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5EYXRhYmFz
ZUlkfSBkYXRhYmFzZUlkCi0gICAgICovCi0gICAgZXF1YWxzOiBmdW5jdGlvbihkYXRhYmFzZUlk
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZSA9PT0gZGF0YWJhc2VJZC5uYW1lICYm
IHRoaXMuc2VjdXJpdHlPcmlnaW4gPT09IGRhdGFiYXNlSWQuc2VjdXJpdHlPcmlnaW47Ci0gICAg
fSwKLX0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5JbmRl
eGVkREJNb2RlbC5EYXRhYmFzZUlkfSBkYXRhYmFzZUlkCi0gKiBAcGFyYW0ge3N0cmluZ30gdmVy
c2lvbgotICovCi1XZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2UgPSBmdW5jdGlv
bihkYXRhYmFzZUlkLCB2ZXJzaW9uLCBpbnRWZXJzaW9uKQotewotICAgIHRoaXMuZGF0YWJhc2VJ
ZCA9IGRhdGFiYXNlSWQ7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICB0aGlzLmlu
dFZlcnNpb24gPSBpbnRWZXJzaW9uOwotICAgIHRoaXMub2JqZWN0U3RvcmVzID0ge307Ci19Ci0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICogQHBhcmFt
IHsqfSBrZXlQYXRoCi0gKi8KLVdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5PYmplY3RTdG9y
ZSA9IGZ1bmN0aW9uKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpCi17Ci0gICAgdGhpcy5u
YW1lID0gbmFtZTsKLSAgICB0aGlzLmtleVBhdGggPSBrZXlQYXRoOwotICAgIHRoaXMuYXV0b0lu
Y3JlbWVudCA9IGF1dG9JbmNyZW1lbnQ7Ci0gICAgdGhpcy5pbmRleGVzID0ge307Ci19Ci0KLVdl
Ykluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5PYmplY3RTdG9yZS5wcm90b3R5cGUgPSB7Ci0gICAg
LyoqCi0gICAgICogQHR5cGUge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQga2V5UGF0aFN0cmlu
ZygpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLmtl
eVBhdGhTdHJpbmdGcm9tSURCS2V5UGF0aCh0aGlzLmtleVBhdGgpOwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gKiBAcGFyYW0geyp9
IGtleVBhdGgKLSAqLwotV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLkluZGV4ID0gZnVuY3Rp
b24obmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KQotewotICAgIHRoaXMubmFtZSA9
IG5hbWU7Ci0gICAgdGhpcy5rZXlQYXRoID0ga2V5UGF0aDsKLSAgICB0aGlzLnVuaXF1ZSA9IHVu
aXF1ZTsKLSAgICB0aGlzLm11bHRpRW50cnkgPSBtdWx0aUVudHJ5OwotfQotCi1XZWJJbnNwZWN0
b3IuSW5kZXhlZERCTW9kZWwuSW5kZXgucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEB0
eXBlIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0IGtleVBhdGhTdHJpbmcoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5rZXlQYXRoU3RyaW5nRnJv
bUlEQktleVBhdGgodGhpcy5rZXlQYXRoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luZGV4ZWREQlZpZXdzLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVkREJWaWV3cy5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDcyY2I4ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luZGV4ZWREQlZpZXdzLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
NDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rv
ci5WaWV3fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2V9
IGRhdGFiYXNlCi0gKi8KLVdlYkluc3BlY3Rvci5JREJEYXRhYmFzZVZpZXcgPSBmdW5jdGlvbihk
YXRhYmFzZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMu
cmVnaXN0ZXJSZXF1aXJlZENTUygiaW5kZXhlZERCVmlld3MuY3NzIik7Ci0KLSAgICB0aGlzLmVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygiZmlsbCIpOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJpbmRleGVkLWRiLWRhdGFiYXNlLXZpZXciKTsKLQotICAgIHRoaXMuX2hlYWRlcnNMaXN0
RWxlbWVudCA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgib2wiLCAib3V0bGluZS1kaXNjbG9z
dXJlIik7Ci0gICAgdGhpcy5faGVhZGVyc1RyZWVPdXRsaW5lID0gbmV3IFRyZWVPdXRsaW5lKHRo
aXMuX2hlYWRlcnNMaXN0RWxlbWVudCk7Ci0gICAgdGhpcy5faGVhZGVyc1RyZWVPdXRsaW5lLmV4
cGFuZFRyZWVFbGVtZW50c1doZW5BcnJvd2luZyA9IHRydWU7Ci0KLSAgICB0aGlzLl9zZWN1cml0
eU9yaWdpblRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KCIiLCBudWxsLCBmYWxzZSk7Ci0g
ICAgdGhpcy5fc2VjdXJpdHlPcmlnaW5UcmVlRWxlbWVudC5zZWxlY3RhYmxlID0gZmFsc2U7Ci0g
ICAgdGhpcy5faGVhZGVyc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKHRoaXMuX3NlY3VyaXR5T3Jp
Z2luVHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy5fbmFtZVRyZWVFbGVtZW50ID0gbmV3IFRyZWVF
bGVtZW50KCIiLCBudWxsLCBmYWxzZSk7Ci0gICAgdGhpcy5fbmFtZVRyZWVFbGVtZW50LnNlbGVj
dGFibGUgPSBmYWxzZTsKLSAgICB0aGlzLl9oZWFkZXJzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQo
dGhpcy5fbmFtZVRyZWVFbGVtZW50KTsKLQotICAgIHRoaXMuX2ludFZlcnNpb25UcmVlRWxlbWVu
dCA9IG5ldyBUcmVlRWxlbWVudCgiIiwgbnVsbCwgZmFsc2UpOwotICAgIHRoaXMuX2ludFZlcnNp
b25UcmVlRWxlbWVudC5zZWxlY3RhYmxlID0gZmFsc2U7Ci0gICAgdGhpcy5faGVhZGVyc1RyZWVP
dXRsaW5lLmFwcGVuZENoaWxkKHRoaXMuX2ludFZlcnNpb25UcmVlRWxlbWVudCk7Ci0KLSAgICB0
aGlzLl9zdHJpbmdWZXJzaW9uVHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoIiIsIG51bGws
IGZhbHNlKTsKLSAgICB0aGlzLl9zdHJpbmdWZXJzaW9uVHJlZUVsZW1lbnQuc2VsZWN0YWJsZSA9
IGZhbHNlOwotICAgIHRoaXMuX2hlYWRlcnNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZCh0aGlzLl9z
dHJpbmdWZXJzaW9uVHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy51cGRhdGUoZGF0YWJhc2UpOwot
fQotCi1XZWJJbnNwZWN0b3IuSURCRGF0YWJhc2VWaWV3LnByb3RvdHlwZSA9IHsKLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1
ZQotICAgICAqLwotICAgIF9mb3JtYXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKQotICAg
IHsKLSAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOwotICAgICAgICBmcmFnbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgImF0dHJpYnV0ZS1uYW1l
IikudGV4dENvbnRlbnQgPSBuYW1lICsgIjoiOwotICAgICAgICBmcmFnbWVudC5jcmVhdGVDaGls
ZCgiZGl2IiwgImF0dHJpYnV0ZS12YWx1ZSBzb3VyY2UtY29kZSIpLnRleHRDb250ZW50ID0gdmFs
dWU7Ci0KLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0sCi0KLSAgICBfcmVmcmVzaERh
dGFiYXNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9zZWN1cml0eU9yaWdpblRy
ZWVFbGVtZW50LnRpdGxlID0gdGhpcy5fZm9ybWF0SGVhZGVyKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU2VjdXJpdHkgb3JpZ2luIiksIHRoaXMuX2RhdGFiYXNlLmRhdGFiYXNlSWQuc2VjdXJpdHlP
cmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lVHJlZUVsZW1lbnQudGl0bGUgPSB0aGlzLl9mb3Jt
YXRIZWFkZXIoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOYW1lIiksIHRoaXMuX2RhdGFiYXNlLmRh
dGFiYXNlSWQubmFtZSk7Ci0gICAgICAgIHRoaXMuX3N0cmluZ1ZlcnNpb25UcmVlRWxlbWVudC50
aXRsZSA9IHRoaXMuX2Zvcm1hdEhlYWRlcihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0cmluZyBW
ZXJzaW9uIiksIHRoaXMuX2RhdGFiYXNlLnZlcnNpb24pOwotICAgICAgICB0aGlzLl9pbnRWZXJz
aW9uVHJlZUVsZW1lbnQudGl0bGUgPSB0aGlzLl9mb3JtYXRIZWFkZXIoV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJJbnRlZ2VyIFZlcnNpb24iKSwgdGhpcy5fZGF0YWJhc2UuaW50VmVyc2lvbik7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkluZGV4ZWREQk1v
ZGVsLkRhdGFiYXNlfSBkYXRhYmFzZQotICAgICAqLwotICAgIHVwZGF0ZTogZnVuY3Rpb24oZGF0
YWJhc2UpCi0gICAgewotICAgICAgICB0aGlzLl9kYXRhYmFzZSA9IGRhdGFiYXNlOwotICAgICAg
ICB0aGlzLl9yZWZyZXNoRGF0YWJhc2UoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJ
bnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICog
QGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5k
ZXhlZERCTW9kZWx9IG1vZGVsCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5JbmRleGVkREJNb2Rl
bC5EYXRhYmFzZUlkfSBkYXRhYmFzZUlkCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5JbmRleGVk
REJNb2RlbC5PYmplY3RTdG9yZX0gb2JqZWN0U3RvcmUKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkluZGV4ZWREQk1vZGVsLkluZGV4fSBpbmRleAotICovCi1XZWJJbnNwZWN0b3IuSURCRGF0YVZp
ZXcgPSBmdW5jdGlvbihtb2RlbCwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIGluZGV4KQotewot
ICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVp
cmVkQ1NTKCJpbmRleGVkREJWaWV3cy5jc3MiKTsKLQotICAgIHRoaXMuX21vZGVsID0gbW9kZWw7
Ci0gICAgdGhpcy5fZGF0YWJhc2VJZCA9IGRhdGFiYXNlSWQ7Ci0gICAgdGhpcy5faXNJbmRleCA9
ICEhaW5kZXg7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaW5kZXhlZC1kYi1k
YXRhLXZpZXciKTsKLQotICAgIHZhciBlZGl0b3JUb29sYmFyID0gdGhpcy5fY3JlYXRlRWRpdG9y
VG9vbGJhcigpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlZGl0b3JUb29sYmFyKTsK
LQotICAgIHRoaXMuX2RhdGFHcmlkQ29udGFpbmVyID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxk
KCJkaXYiLCAiZmlsbCIpOwotICAgIHRoaXMuX2RhdGFHcmlkQ29udGFpbmVyLmFkZFN0eWxlQ2xh
c3MoImRhdGEtZ3JpZC1jb250YWluZXIiKTsKLQotICAgIHRoaXMuX3JlZnJlc2hCdXR0b24gPSBu
ZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJl
ZnJlc2giKSwgInJlZnJlc2gtc3RvcmFnZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLl9y
ZWZyZXNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcmVmcmVzaEJ1dHRv
bkNsaWNrZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fY2xlYXJCdXR0b24gPSBuZXcgV2ViSW5zcGVj
dG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNsZWFyIG9iamVjdCBz
dG9yZSIpLCAiY2xlYXItc3RvcmFnZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLl9jbGVh
ckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsZWFyQnV0dG9uQ2xpY2tl
ZCwgdGhpcyk7Ci0KLSAgICB0aGlzLl9wYWdlU2l6ZSA9IDUwOwotICAgIHRoaXMuX3NraXBDb3Vu
dCA9IDA7Ci0KLSAgICB0aGlzLnVwZGF0ZShvYmplY3RTdG9yZSwgaW5kZXgpOwotICAgIHRoaXMu
X2VudHJpZXMgPSBbXTsKLX0KLQotV2ViSW5zcGVjdG9yLklEQkRhdGFWaWV3LnByb3RvdHlwZSA9
IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuRGF0YUdyaWR9Ci0gICAg
ICovCi0gICAgX2NyZWF0ZURhdGFHcmlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
a2V5UGF0aCA9IHRoaXMuX2lzSW5kZXggPyB0aGlzLl9pbmRleC5rZXlQYXRoIDogdGhpcy5fb2Jq
ZWN0U3RvcmUua2V5UGF0aDsKLQotICAgICAgICB2YXIgY29sdW1ucyA9IFtdOwotICAgICAgICBj
b2x1bW5zLnB1c2goe2lkOiAibnVtYmVyIiwgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
IyIpLCB3aWR0aDogIjUwcHgifSk7Ci0gICAgICAgIGNvbHVtbnMucHVzaCh7aWQ6ICJrZXkiLCB0
aXRsZURPTUZyYWdtZW50OiB0aGlzLl9rZXlDb2x1bW5IZWFkZXJGcmFnbWVudChXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIktleSIpLCBrZXlQYXRoKX0pOwotICAgICAgICBpZiAodGhpcy5faXNJbmRl
eCkKLSAgICAgICAgICAgIGNvbHVtbnMucHVzaCh7aWQ6ICJwcmltYXJ5S2V5IiwgdGl0bGVET01G
cmFnbWVudDogdGhpcy5fa2V5Q29sdW1uSGVhZGVyRnJhZ21lbnQoV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJQcmltYXJ5IGtleSIpLCB0aGlzLl9vYmplY3RTdG9yZS5rZXlQYXRoKX0pOwotICAgICAg
ICBjb2x1bW5zLnB1c2goe2lkOiAidmFsdWUiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJWYWx1ZSIpfSk7Ci0KLSAgICAgICAgdmFyIGRhdGFHcmlkID0gbmV3IFdlYkluc3BlY3Rvci5E
YXRhR3JpZChjb2x1bW5zKTsKLSAgICAgICAgcmV0dXJuIGRhdGFHcmlkOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4Ci0gICAgICogQHBhcmFtIHsqfSBr
ZXlQYXRoCi0gICAgICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH0KLSAgICAgKi8KLSAgICBf
a2V5Q29sdW1uSGVhZGVyRnJhZ21lbnQ6IGZ1bmN0aW9uKHByZWZpeCwga2V5UGF0aCkKLSAgICB7
Ci0gICAgICAgIHZhciBrZXlDb2x1bW5IZWFkZXJGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAga2V5Q29sdW1uSGVhZGVyRnJhZ21lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocHJlZml4KSk7Ci0gICAgICAgIGlmIChrZXlQ
YXRoID09PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGtleUNvbHVtbkhlYWRlckZyYWdtZW50
OwotCi0gICAgICAgIGtleUNvbHVtbkhlYWRlckZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCIgKCIgKyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIktleSBwYXRoOiAi
KSkpOwotICAgICAgICBpZiAoa2V5UGF0aCBpbnN0YW5jZW9mIEFycmF5KSB7Ci0gICAgICAgICAg
ICBrZXlDb2x1bW5IZWFkZXJGcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgiWyIpKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5UGF0aC5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgICAgICAg
ICAgIGtleUNvbHVtbkhlYWRlckZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCIsICIpKTsKLSAgICAgICAgICAgICAgICBrZXlDb2x1bW5IZWFkZXJGcmFnbWVudC5h
cHBlbmRDaGlsZCh0aGlzLl9rZXlQYXRoU3RyaW5nRnJhZ21lbnQoa2V5UGF0aFtpXSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAga2V5Q29sdW1uSGVhZGVyRnJhZ21lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIl0iKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB2YXIga2V5UGF0aFN0cmluZyA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoa2V5UGF0
aCk7Ci0gICAgICAgICAgICBrZXlDb2x1bW5IZWFkZXJGcmFnbWVudC5hcHBlbmRDaGlsZCh0aGlz
Ll9rZXlQYXRoU3RyaW5nRnJhZ21lbnQoa2V5UGF0aFN0cmluZykpOwotICAgICAgICB9Ci0gICAg
ICAgIGtleUNvbHVtbkhlYWRlckZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCIpIikpOwotICAgICAgICByZXR1cm4ga2V5Q29sdW1uSGVhZGVyRnJhZ21lbnQ7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlQYXRoU3RyaW5nCi0g
ICAgICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH0KLSAgICAgKi8KLSAgICBfa2V5UGF0aFN0
cmluZ0ZyYWdtZW50OiBmdW5jdGlvbihrZXlQYXRoU3RyaW5nKQotICAgIHsKLSAgICAgICAgdmFy
IGtleVBhdGhTdHJpbmdGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKLSAgICAgICAga2V5UGF0aFN0cmluZ0ZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJcIiIpKTsKLSAgICAgICAgdmFyIGtleVBhdGhTcGFuID0ga2V5UGF0aFN0
cmluZ0ZyYWdtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgInNvdXJjZS1jb2RlIGNvbnNvbGUtZm9y
bWF0dGVkLXN0cmluZyIpOwotICAgICAgICBrZXlQYXRoU3Bhbi50ZXh0Q29udGVudCA9IGtleVBh
dGhTdHJpbmc7Ci0gICAgICAgIGtleVBhdGhTdHJpbmdGcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgiXCIiKSk7Ci0gICAgICAgIHJldHVybiBrZXlQYXRoU3RyaW5n
RnJhZ21lbnQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0g
ICAgICovCi0gICAgX2NyZWF0ZUVkaXRvclRvb2xiYXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciBlZGl0b3JUb29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgICAgIGVkaXRvclRvb2xiYXIuYWRkU3R5bGVDbGFzcygic3RhdHVzLWJhciIpOwotICAgICAg
ICBlZGl0b3JUb29sYmFyLmFkZFN0eWxlQ2xhc3MoImRhdGEtdmlldy10b29sYmFyIik7Ci0KLSAg
ICAgICAgdGhpcy5fcGFnZUJhY2tCdXR0b24gPSBlZGl0b3JUb29sYmFyLmNyZWF0ZUNoaWxkKCJi
dXR0b24iLCAiYmFjay1idXR0b24iKTsKLSAgICAgICAgdGhpcy5fcGFnZUJhY2tCdXR0b24uYWRk
U3R5bGVDbGFzcygic3RhdHVzLWJhci1pdGVtIik7Ci0gICAgICAgIHRoaXMuX3BhZ2VCYWNrQnV0
dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IHByZXZpb3VzIHBhZ2UuIik7
Ci0gICAgICAgIHRoaXMuX3BhZ2VCYWNrQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAg
dGhpcy5fcGFnZUJhY2tCdXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aW1nIikpOwotICAgICAgICB0aGlzLl9wYWdlQmFja0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJj
bGljayIsIHRoaXMuX3BhZ2VCYWNrQnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0g
ICAgICAgIGVkaXRvclRvb2xiYXIuYXBwZW5kQ2hpbGQodGhpcy5fcGFnZUJhY2tCdXR0b24pOwot
Ci0gICAgICAgIHRoaXMuX3BhZ2VGb3J3YXJkQnV0dG9uID0gZWRpdG9yVG9vbGJhci5jcmVhdGVD
aGlsZCgiYnV0dG9uIiwgImZvcndhcmQtYnV0dG9uIik7Ci0gICAgICAgIHRoaXMuX3BhZ2VGb3J3
YXJkQnV0dG9uLmFkZFN0eWxlQ2xhc3MoInN0YXR1cy1iYXItaXRlbSIpOwotICAgICAgICB0aGlz
Ll9wYWdlRm9yd2FyZEJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBu
ZXh0IHBhZ2UuIik7Ci0gICAgICAgIHRoaXMuX3BhZ2VGb3J3YXJkQnV0dG9uLmRpc2FibGVkID0g
dHJ1ZTsKLSAgICAgICAgdGhpcy5fcGFnZUZvcndhcmRCdXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiaW1nIikpOwotICAgICAgICB0aGlzLl9wYWdlRm9yd2FyZEJ1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3BhZ2VGb3J3YXJkQnV0dG9uQ2xpY2tl
ZC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIGVkaXRvclRvb2xiYXIuYXBwZW5kQ2hpbGQo
dGhpcy5fcGFnZUZvcndhcmRCdXR0b24pOwotCi0gICAgICAgIHRoaXMuX2tleUlucHV0RWxlbWVu
dCA9IGVkaXRvclRvb2xiYXIuY3JlYXRlQ2hpbGQoImlucHV0IiwgImtleS1pbnB1dCIpOwotICAg
ICAgICB0aGlzLl9rZXlJbnB1dEVsZW1lbnQucGxhY2Vob2xkZXIgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlN0YXJ0IGZyb20ga2V5Iik7Ci0gICAgICAgIHRoaXMuX2tleUlucHV0RWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIHRoaXMuX2tleUlucHV0Q2hhbmdlZC5iaW5kKHRoaXMp
KTsKLSAgICAgICAgdGhpcy5fa2V5SW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImN1dCIs
IHRoaXMuX2tleUlucHV0Q2hhbmdlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fa2V5SW5w
dXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgdGhpcy5fa2V5SW5wdXRDaGFu
Z2VkLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9rZXlJbnB1dEVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2tleUlucHV0Q2hhbmdlZC5iaW5kKHRoaXMpKTsKLQot
ICAgICAgICByZXR1cm4gZWRpdG9yVG9vbGJhcjsKLSAgICB9LAotCi0gICAgX3BhZ2VCYWNrQnV0
dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2tpcENvdW50ID0g
TWF0aC5tYXgoMCwgdGhpcy5fc2tpcENvdW50IC0gdGhpcy5fcGFnZVNpemUpOwotICAgICAgICB0
aGlzLl91cGRhdGVEYXRhKGZhbHNlKTsKLSAgICB9LAotCi0gICAgX3BhZ2VGb3J3YXJkQnV0dG9u
Q2xpY2tlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2tpcENvdW50ID0gdGhp
cy5fc2tpcENvdW50ICsgdGhpcy5fcGFnZVNpemU7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURhdGEo
ZmFsc2UpOwotICAgIH0sCi0KLSAgICBfa2V5SW5wdXRDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh0aGlzLl91cGRhdGVEYXRhLmJpbmQodGhpcywg
ZmFsc2UpLCAwKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuSW5kZXhlZERCTW9kZWwuT2JqZWN0U3RvcmV9IG9iamVjdFN0b3JlCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuSW5kZXh9IGluZGV4Ci0gICAgICovCi0gICAg
dXBkYXRlOiBmdW5jdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpCi0gICAgewotICAgICAgICB0aGlz
Ll9vYmplY3RTdG9yZSA9IG9iamVjdFN0b3JlOwotICAgICAgICB0aGlzLl9pbmRleCA9IGluZGV4
OwotCi0gICAgICAgIGlmICh0aGlzLl9kYXRhR3JpZCkKLSAgICAgICAgICAgIHRoaXMuX2RhdGFH
cmlkLmRldGFjaCgpOwotICAgICAgICB0aGlzLl9kYXRhR3JpZCA9IHRoaXMuX2NyZWF0ZURhdGFH
cmlkKCk7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLnNob3codGhpcy5fZGF0YUdyaWRDb250YWlu
ZXIpOwotCi0gICAgICAgIHRoaXMuX3NraXBDb3VudCA9IDA7Ci0gICAgICAgIHRoaXMuX3VwZGF0
ZURhdGEodHJ1ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBr
ZXlTdHJpbmcKLSAgICAgKi8KLSAgICBfcGFyc2VLZXk6IGZ1bmN0aW9uKGtleVN0cmluZykKLSAg
ICB7Ci0gICAgICAgIHZhciByZXN1bHQ7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBKU09OLnBhcnNlKGtleVN0cmluZyk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGtleVN0cmluZzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgX3N0cmluZ2lmeUtleTogZnVuY3Rpb24oa2V5KQotICAgIHsKLSAgICAgICAgaWYgKHR5
cGVvZihrZXkpID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHJldHVybiBrZXk7Ci0gICAgICAg
IHJldHVybiBKU09OLnN0cmluZ2lmeShrZXkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW59IGZvcmNlCi0gICAgICovCi0gICAgX3VwZGF0ZURhdGE6IGZ1bmN0aW9u
KGZvcmNlKQotICAgIHsKLSAgICAgICAgdmFyIGtleSA9IHRoaXMuX3BhcnNlS2V5KHRoaXMuX2tl
eUlucHV0RWxlbWVudC52YWx1ZSk7Ci0gICAgICAgIHZhciBwYWdlU2l6ZSA9IHRoaXMuX3BhZ2VT
aXplOwotICAgICAgICB2YXIgc2tpcENvdW50ID0gdGhpcy5fc2tpcENvdW50OwotICAgICAgICB0
aGlzLl9yZWZyZXNoQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICB0aGlzLl9jbGVh
ckJ1dHRvbi5zZXRFbmFibGVkKCF0aGlzLl9pc0luZGV4KTsKLQotICAgICAgICBpZiAoIWZvcmNl
ICYmIHRoaXMuX2xhc3RLZXkgPT09IGtleSAmJiB0aGlzLl9sYXN0UGFnZVNpemUgPT09IHBhZ2VT
aXplICYmIHRoaXMuX2xhc3RTa2lwQ291bnQgPT09IHNraXBDb3VudCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAodGhpcy5fbGFzdEtleSAhPT0ga2V5IHx8IHRoaXMuX2xhc3RQ
YWdlU2l6ZSAhPT0gcGFnZVNpemUpIHsKLSAgICAgICAgICAgIHNraXBDb3VudCA9IDA7Ci0gICAg
ICAgICAgICB0aGlzLl9za2lwQ291bnQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2xh
c3RLZXkgPSBrZXk7Ci0gICAgICAgIHRoaXMuX2xhc3RQYWdlU2l6ZSA9IHBhZ2VTaXplOwotICAg
ICAgICB0aGlzLl9sYXN0U2tpcENvdW50ID0gc2tpcENvdW50OwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRW50cnk+
fSBlbnRyaWVzCi0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzTW9yZQotICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZW50cmllcywgaGFzTW9yZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotICAg
ICAgICAgICAgdGhpcy5jbGVhcigpOwotICAgICAgICAgICAgdGhpcy5fZW50cmllcyA9IGVudHJp
ZXM7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9OwotICAgICAgICAgICAgICAgIGRhdGFb
Im51bWJlciJdID0gaSArIHNraXBDb3VudDsKLSAgICAgICAgICAgICAgICBkYXRhWyJrZXkiXSA9
IGVudHJpZXNbaV0ua2V5OwotICAgICAgICAgICAgICAgIGRhdGFbInByaW1hcnlLZXkiXSA9IGVu
dHJpZXNbaV0ucHJpbWFyeUtleTsKLSAgICAgICAgICAgICAgICBkYXRhWyJ2YWx1ZSJdID0gZW50
cmllc1tpXS52YWx1ZTsKLQotICAgICAgICAgICAgICAgIHZhciBwcmltYXJ5S2V5ID0gSlNPTi5z
dHJpbmdpZnkodGhpcy5faXNJbmRleCA/IGVudHJpZXNbaV0ucHJpbWFyeUtleSA6IGVudHJpZXNb
aV0ua2V5KTsKLSAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSURC
RGF0YUdyaWROb2RlKGRhdGEpOwotICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnJvb3RO
b2RlKCkuYXBwZW5kQ2hpbGQobm9kZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRo
aXMuX3BhZ2VCYWNrQnV0dG9uLmRpc2FibGVkID0gc2tpcENvdW50ID09PSAwOwotICAgICAgICAg
ICAgdGhpcy5fcGFnZUZvcndhcmRCdXR0b24uZGlzYWJsZWQgPSAhaGFzTW9yZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBpZGJLZXlSYW5nZSA9IGtleSA/IHdpbmRvdy53ZWJraXRJREJLZXlS
YW5nZS5sb3dlckJvdW5kKGtleSkgOiBudWxsOwotICAgICAgICBpZiAodGhpcy5faXNJbmRleCkK
LSAgICAgICAgICAgIHRoaXMuX21vZGVsLmxvYWRJbmRleERhdGEodGhpcy5fZGF0YWJhc2VJZCwg
dGhpcy5fb2JqZWN0U3RvcmUubmFtZSwgdGhpcy5faW5kZXgubmFtZSwgaWRiS2V5UmFuZ2UsIHNr
aXBDb3VudCwgcGFnZVNpemUsIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aGlzLl9tb2RlbC5sb2FkT2JqZWN0U3RvcmVEYXRhKHRoaXMuX2RhdGFiYXNl
SWQsIHRoaXMuX29iamVjdFN0b3JlLm5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VT
aXplLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX3JlZnJlc2hCdXR0b25D
bGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURhdGEo
dHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9jbGVhckJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2xlYXJlZCgpIHsKLSAgICAgICAgICAgIHRoaXMu
X2NsZWFyQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVE
YXRhKHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NsZWFyQnV0dG9uLnNldEVuYWJs
ZWQoZmFsc2UpOwotICAgICAgICB0aGlzLl9tb2RlbC5jbGVhck9iamVjdFN0b3JlKHRoaXMuX2Rh
dGFiYXNlSWQsIHRoaXMuX29iamVjdFN0b3JlLm5hbWUsIGNsZWFyZWQuYmluZCh0aGlzKSk7Ci0g
ICAgfSwKLQotICAgIHN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gW3RoaXMuX3JlZnJlc2hCdXR0b24uZWxlbWVudCwgdGhpcy5fY2xlYXJCdXR0b24uZWxl
bWVudF07Ci0gICAgfSwKLQotICAgIGNsZWFyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLl9kYXRhR3JpZC5yb290Tm9kZSgpLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fZW50cmllcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
dGhpcy5fZW50cmllc1tpXS5rZXkucmVsZWFzZSgpOwotICAgICAgICAgICAgdGhpcy5fZW50cmll
c1tpXS5wcmltYXJ5S2V5LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHRoaXMuX2VudHJpZXNbaV0u
dmFsdWUucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2VudHJpZXMgPSBbXTsK
LSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuRGF0YUdy
aWROb2RlfQotICogQHBhcmFtIHsqfSBkYXRhCi0gKi8KLVdlYkluc3BlY3Rvci5JREJEYXRhR3Jp
ZE5vZGUgPSBmdW5jdGlvbihkYXRhKQotewotICAgIFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUu
Y2FsbCh0aGlzLCBkYXRhLCBmYWxzZSk7Ci0gICAgdGhpcy5zZWxlY3RhYmxlID0gZmFsc2U7Ci19
Ci0KLVdlYkluc3BlY3Rvci5JREJEYXRhR3JpZE5vZGUucHJvdG90eXBlID0gewotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgY3JlYXRlQ2VsbDogZnVuY3Rp
b24oY29sdW1uSWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHZhciBjZWxsID0gV2ViSW5zcGVj
dG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbC5jYWxsKHRoaXMsIGNvbHVtbklk
ZW50aWZpZXIpOwotICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRhdGFbY29sdW1uSWRlbnRpZmll
cl07Ci0KLSAgICAgICAgc3dpdGNoIChjb2x1bW5JZGVudGlmaWVyKSB7Ci0gICAgICAgIGNhc2Ug
InZhbHVlIjoKLSAgICAgICAgY2FzZSAia2V5IjoKLSAgICAgICAgY2FzZSAicHJpbWFyeUtleSI6
Ci0gICAgICAgICAgICBjZWxsLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICB0aGlzLl9m
b3JtYXRWYWx1ZShjZWxsLCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjZWxsOwotICAgIH0sCi0KLSAgICBf
Zm9ybWF0VmFsdWU6IGZ1bmN0aW9uKGNlbGwsIHZhbHVlKQotICAgIHsKLSAgICAgICAgdmFyIHR5
cGUgPSB2YWx1ZS5zdWJ0eXBlIHx8IHZhbHVlLnR5cGU7Ci0gICAgICAgIHZhciBjb250ZW50cyA9
IGNlbGwuY3JlYXRlQ2hpbGQoImRpdiIsICJzb3VyY2UtY29kZSBjb25zb2xlLWZvcm1hdHRlZC0i
ICsgdHlwZSk7Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgIm9iamVj
dCI6Ci0gICAgICAgIGNhc2UgImFycmF5IjoKLSAgICAgICAgICAgIHZhciBzZWN0aW9uID0gbmV3
IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbih2YWx1ZSwgdmFsdWUuZGVzY3Jp
cHRpb24pCi0gICAgICAgICAgICBzZWN0aW9uLmVkaXRhYmxlID0gZmFsc2U7Ci0gICAgICAgICAg
ICBzZWN0aW9uLnNraXBQcm90byA9IHRydWU7Ci0gICAgICAgICAgICBjb250ZW50cy5hcHBlbmRD
aGlsZChzZWN0aW9uLmVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
InN0cmluZyI6Ci0gICAgICAgICAgICBjb250ZW50cy5hZGRTdHlsZUNsYXNzKCJwcmltaXRpdmUt
dmFsdWUiKTsKLSAgICAgICAgICAgIGNvbnRlbnRzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCJcIiIgKyB2YWx1ZS5kZXNjcmlwdGlvbiArICJcIiIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY29udGVudHMuYWRkU3R5bGVD
bGFzcygicHJpbWl0aXZlLXZhbHVlIik7Ci0gICAgICAgICAgICBjb250ZW50cy5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZS5kZXNjcmlwdGlvbikpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90
b3R5cGUKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5ZmJmOWI4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci5qcworKysg
L2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KLSAqIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkluc3BlY3RFbGVtZW50TW9kZUNvbnRyb2xsZXIg
PSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy50b2dnbGVTZWFyY2hCdXR0b24gPSBuZXcgV2ViSW5z
cGVjdG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNlbGVjdCBhbiBl
bGVtZW50IGluIHRoZSBwYWdlIHRvIGluc3BlY3QgaXQuIiksICJub2RlLXNlYXJjaC1zdGF0dXMt
YmFyLWl0ZW0iKTsKLSAgICB0aGlzLnRvZ2dsZVNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIHRoaXMudG9nZ2xlU2VhcmNoLCB0aGlzKTsKLSAgICB0aGlzLl9zaG9ydGN1dCA9
IFdlYkluc3BlY3Rvci5JbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyLmNyZWF0ZVNob3J0Y3V0
KCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5JbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyLmNyZWF0
ZVNob3J0Y3V0ID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiBXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigiYyIsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lk1vZGlmaWVycy5DdHJsT3JNZXRhIHwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQu
TW9kaWZpZXJzLlNoaWZ0KTsKLX0KLQotV2ViSW5zcGVjdG9yLkluc3BlY3RFbGVtZW50TW9kZUNv
bnRyb2xsZXIucHJvdG90eXBlID0gewotICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVNlYXJjaEJ1dHRvbi50b2dnbGVkOwotICAgIH0sCi0K
LSAgICBkaXNhYmxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5lbmFibGVk
KCkpCi0gICAgICAgICAgICB0aGlzLnRvZ2dsZVNlYXJjaCgpOwotICAgIH0sCi0KLSAgICB0b2dn
bGVTZWFyY2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBlbmFibGVkID0gIXRoaXMu
ZW5hYmxlZCgpOwotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJy
b3J9IGVycm9yCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvcikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFlcnJvcikKLSAgICAgICAgICAgICAgICB0aGlz
LnRvZ2dsZVNlYXJjaEJ1dHRvbi50b2dnbGVkID0gZW5hYmxlZDsKLSAgICAgICAgfQotICAgICAg
ICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuc2V0SW5zcGVjdE1vZGVFbmFibGVkKGVuYWJsZWQsIGNh
bGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0tl
eWJvYXJkRXZlbnR9IGV2ZW50Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAg
ICBoYW5kbGVTaG9ydGN1dDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleUZyb21FdmVudChldmVudCkgIT09IHRo
aXMuX3Nob3J0Y3V0LmtleSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdGhp
cy50b2dnbGVTZWFyY2goKTsKLSAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1MjkzMTM4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZC5qcworKysgL2Rldi9udWxsCkBAIC0xLDM5NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gSW5zcGVjdG9yQmFja2VuZENs
YXNzKCkKLXsKLSAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5fcGVuZGlu
Z1Jlc3BvbnNlc0NvdW50ID0gMDsKLSAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlz
Ll9kb21haW5EaXNwYXRjaGVycyA9IHt9OwotICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OwotICAg
IHRoaXMuX3JlcGx5QXJncyA9IHt9OwotCi0gICAgdGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRz
ID0gZmFsc2U7Ci0gICAgdGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcyA9IGZhbHNl
OwotICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7Ci19Ci0KLUluc3BlY3RvckJhY2tlbmRD
bGFzcy5wcm90b3R5cGUgPSB7Ci0gICAgX3dyYXA6IGZ1bmN0aW9uKGNhbGxiYWNrLCBtZXRob2Qp
Ci0gICAgewotICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IHRoaXMuX2xhc3RDYWxsYmFja0lkKys7
Ci0gICAgICAgIGlmICghY2FsbGJhY2spCi0gICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9u
KCkge307Ci0KLSAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2s7
Ci0gICAgICAgIGNhbGxiYWNrLm1ldGhvZE5hbWUgPSBtZXRob2Q7Ci0gICAgICAgIGlmICh0aGlz
LmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCi0gICAgICAgICAgICBjYWxsYmFjay5zZW5kUmVxdWVz
dFRpbWUgPSBEYXRlLm5vdygpOwotCi0gICAgICAgIHJldHVybiBjYWxsYmFja0lkOwotICAgIH0s
Ci0KLSAgICBfZ2V0QWdlbnQ6IGZ1bmN0aW9uKGRvbWFpbikKLSAgICB7Ci0gICAgICAgIHZhciBh
Z2VudE5hbWUgPSBkb21haW4gKyAiQWdlbnQiOwotICAgICAgICBpZiAoIXdpbmRvd1thZ2VudE5h
bWVdKQotICAgICAgICAgICAgd2luZG93W2FnZW50TmFtZV0gPSB7fTsKLSAgICAgICAgcmV0dXJu
IHdpbmRvd1thZ2VudE5hbWVdOwotICAgIH0sCi0KLSAgICByZWdpc3RlckNvbW1hbmQ6IGZ1bmN0
aW9uKG1ldGhvZCwgc2lnbmF0dXJlLCByZXBseUFyZ3MpCi0gICAgewotICAgICAgICB2YXIgZG9t
YWluQW5kTWV0aG9kID0gbWV0aG9kLnNwbGl0KCIuIik7Ci0gICAgICAgIHZhciBhZ2VudCA9IHRo
aXMuX2dldEFnZW50KGRvbWFpbkFuZE1ldGhvZFswXSk7Ci0KLSAgICAgICAgYWdlbnRbZG9tYWlu
QW5kTWV0aG9kWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgbWV0
aG9kLCBzaWduYXR1cmUpOwotICAgICAgICBhZ2VudFtkb21haW5BbmRNZXRob2RbMV1dWyJpbnZv
a2UiXSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIG1ldGhvZCwgc2lnbmF0dXJlKTsKLSAgICAg
ICAgdGhpcy5fcmVwbHlBcmdzW21ldGhvZF0gPSByZXBseUFyZ3M7Ci0KLSAgICAgICAgdGhpcy5f
aW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0sCi0KLSAgICByZWdpc3RlckVudW06IGZ1bmN0aW9u
KHR5cGUsIHZhbHVlcykKLSAgICB7Ci0gICAgICAgIHZhciBkb21haW5BbmRNZXRob2QgPSB0eXBl
LnNwbGl0KCIuIik7Ci0gICAgICAgIHZhciBhZ2VudCA9IHRoaXMuX2dldEFnZW50KGRvbWFpbkFu
ZE1ldGhvZFswXSk7Ci0KLSAgICAgICAgYWdlbnRbZG9tYWluQW5kTWV0aG9kWzFdXSA9IHZhbHVl
czsKLQotICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfSwKLQotICAgIHJl
Z2lzdGVyRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgcGFyYW1zKQotICAgIHsKLSAgICAgICAg
dGhpcy5fZXZlbnRBcmdzW2V2ZW50TmFtZV0gPSBwYXJhbXM7Ci0KLSAgICAgICAgdGhpcy5faW5p
dGlhbGl6ZWQgPSB0cnVlOwotICAgIH0sCi0KLSAgICBfaW52b2tlOiBmdW5jdGlvbihtZXRob2Qs
IHNpZ25hdHVyZSwgYXJncywgY2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLl93cmFwQ2Fs
bGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChtZXRob2QsIGFyZ3MsIGNhbGxiYWNrKTsKLSAgICB9
LAotCi0gICAgX3NlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbihtZXRob2QsIHNpZ25hdHVy
ZSwgdmFyYXJnKQotICAgIHsKLSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAgICAgICB2YXIgY2FsbGJhY2sgPSAoYXJncy5sZW5n
dGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gImZ1bmN0aW9uIikgPyBhcmdz
LnBvcCgpIDogbnVsbDsKLQotICAgICAgICB2YXIgcGFyYW1zID0ge307Ci0gICAgICAgIHZhciBo
YXNQYXJhbXMgPSBmYWxzZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWduYXR1cmUu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBwYXJhbSA9IHNpZ25hdHVyZVtpXTsKLSAg
ICAgICAgICAgIHZhciBwYXJhbU5hbWUgPSBwYXJhbVsibmFtZSJdOwotICAgICAgICAgICAgdmFy
IHR5cGVOYW1lID0gcGFyYW1bInR5cGUiXTsKLSAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcg
PSBwYXJhbVsib3B0aW9uYWwiXTsKLQotICAgICAgICAgICAgaWYgKCFhcmdzLmxlbmd0aCAmJiAh
b3B0aW9uYWxGbGFnKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wg
RXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgbWV0aG9k
ICsgIicgY2FsbC4gSXQgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzICciICsgSlNP
Ti5zdHJpbmdpZnkoc2lnbmF0dXJlKSArICInLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHZhbHVlID0gYXJncy5zaGlmdCgpOwot
ICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmlu
ZWQiKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgdHlwZSBvZiBhcmd1bWVudCAn
IiArIHBhcmFtTmFtZSArICInIGZvciBtZXRob2QgJyIgKyBtZXRob2QgKyAiJyBjYWxsLiBJdCBt
dXN0IGJlICciICsgdHlwZU5hbWUgKyAiJyBidXQgaXQgaXMgJyIgKyB0eXBlb2YgdmFsdWUgKyAi
Jy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHBhcmFtc1twYXJhbU5hbWVdID0gdmFsdWU7Ci0gICAgICAgICAgICBoYXNQYXJhbXMgPSB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmICFjYWxs
YmFjaykgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5kZWZpbmVkIikg
ewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBPcHRpb25h
bCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsgbWV0aG9kICsgIicgY2FsbCBtdXN0
IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChtZXRob2QsIGhh
c1BhcmFtcyA/IHBhcmFtcyA6IG51bGwsIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgX3dyYXBD
YWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0OiBmdW5jdGlvbihtZXRob2QsIHBhcmFtcywgY2Fs
bGJhY2spCi0gICAgewotICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9IHt9OwotICAgICAgICBt
ZXNzYWdlT2JqZWN0Lm1ldGhvZCA9IG1ldGhvZDsKLSAgICAgICAgaWYgKHBhcmFtcykKLSAgICAg
ICAgICAgIG1lc3NhZ2VPYmplY3QucGFyYW1zID0gcGFyYW1zOwotICAgICAgICBtZXNzYWdlT2Jq
ZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFjaywgbWV0aG9kKTsKLQotICAgICAgICBpZiAodGhp
cy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUubG9n
KCJmcm9udGVuZDogIiArIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VPYmplY3QpKTsKLQotICAgICAg
ICArK3RoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKLSAgICAgICAgdGhpcy5zZW5kTWVzc2Fn
ZU9iamVjdFRvQmFja2VuZChtZXNzYWdlT2JqZWN0KTsKLSAgICB9LAotCi0gICAgc2VuZE1lc3Nh
Z2VPYmplY3RUb0JhY2tlbmQ6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fZGlzY29ubmVjdGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2
YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VPYmplY3QpOwotICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Ci0gICAgfSwK
LQotICAgIGRpc2Nvbm5lY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Rpc2Nv
bm5lY3RlZCA9IHRydWU7Ci0gICAgfSwKLQotICAgIHJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcjog
ZnVuY3Rpb24oZG9tYWluLCBkaXNwYXRjaGVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tYWlu
RGlzcGF0Y2hlcnNbZG9tYWluXSA9IGRpc3BhdGNoZXI7Ci0gICAgfSwKLQotICAgIGRpc3BhdGNo
OiBmdW5jdGlvbihtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3Rv
clByb3RvY29sTWVzc2FnZXMpCi0gICAgICAgICAgICBjb25zb2xlLmxvZygiYmFja2VuZDogIiAr
ICgodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lm
eShtZXNzYWdlKSkpOwotCi0gICAgICAgIHZhciBtZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBtZXNz
YWdlID09PSAic3RyaW5nIikgPyBKU09OLnBhcnNlKG1lc3NhZ2UpIDogbWVzc2FnZTsKLQotICAg
ICAgICBpZiAoImlkIiBpbiBtZXNzYWdlT2JqZWN0KSB7IC8vIGp1c3QgYSByZXNwb25zZSBmb3Ig
c29tZSByZXF1ZXN0Ci0gICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvcikgewotICAg
ICAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNvZGUgIT09IC0zMjAwMCkKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVycm9yKG1lc3NhZ2VPYmplY3Qp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxs
YmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKLSAg
ICAgICAgICAgICAgICB2YXIgYXJndW1lbnRzQXJyYXkgPSBbXTsKLSAgICAgICAgICAgICAgICBp
ZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFt
TmFtZXMgPSB0aGlzLl9yZXBseUFyZ3NbY2FsbGJhY2subWV0aG9kTmFtZV07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJhbU5hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnRzQXJyYXkucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtwYXJh
bU5hbWVzW2ldXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUp
Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwot
Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRzQXJyYXkudW5zaGlmdChtZXNzYWdlT2JqZWN0LmVy
cm9yID8gbWVzc2FnZU9iamVjdC5lcnJvci5tZXNzYWdlIDogbnVsbCk7Ci0gICAgICAgICAgICAg
ICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzQXJyYXkpOwotICAgICAgICAgICAgICAg
IC0tdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50OwotICAgICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgY2FsbGJhY2subWV0
aG9kTmFtZSArICIgPSAiICsgKHByb2Nlc3NpbmdTdGFydFRpbWUgLSBjYWxsYmFjay5zZW5kUmVx
dWVzdFRpbWUpICsgIiArICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMuX3NjcmlwdHMgJiYgIXRoaXMu
X3BlbmRpbmdSZXNwb25zZXNDb3VudCkKLSAgICAgICAgICAgICAgICB0aGlzLnJ1bkFmdGVyUGVu
ZGluZ0Rpc3BhdGNoZXMoKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IG1lc3NhZ2VPYmplY3QubWV0aG9kLnNwbGl0KCIu
Iik7Ci0gICAgICAgICAgICB2YXIgZG9tYWluTmFtZSA9IG1ldGhvZFswXTsKLSAgICAgICAgICAg
IHZhciBmdW5jdGlvbk5hbWUgPSBtZXRob2RbMV07Ci0gICAgICAgICAgICBpZiAoIShkb21haW5O
YW1lIGluIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzKSkgewotICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5n
IGRvbWFpbiAnIiArIGRvbWFpbk5hbWUgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBkaXNwYXRjaGVyID0gdGhpcy5fZG9tYWlu
RGlzcGF0Y2hlcnNbZG9tYWluTmFtZV07Ci0gICAgICAgICAgICBpZiAoIShmdW5jdGlvbk5hbWUg
aW4gZGlzcGF0Y2hlcikpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2Nv
bCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50ZWQgbWV0aG9kICci
ICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0aGlzLl9ldmVudEFyZ3NbbWVzc2Fn
ZU9iamVjdC5tZXRob2RdKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9j
b2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bnNwZWNpZmllZCBtZXRob2QgJyIg
KyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0gICAgICAgICAg
ICBpZiAobWVzc2FnZU9iamVjdC5wYXJhbXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYW1O
YW1lcyA9IHRoaXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF07Ci0gICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbU5hbWVzLmxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMucHVzaChtZXNzYWdlT2JqZWN0LnBhcmFtc1twYXJhbU5hbWVz
W2ldXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nU3RhcnRU
aW1lOwotICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAg
ICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAgICAgICAg
ICAgZGlzcGF0Y2hlcltmdW5jdGlvbk5hbWVdLmFwcGx5KGRpc3BhdGNoZXIsIHBhcmFtcyk7Ci0K
LSAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCi0gICAgICAgICAg
ICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCAr
ICIgPSAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcjogZnVuY3Rpb24obWVzc2FnZU9iamVj
dCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoIlJlcXVlc3Qgd2l0aCBpZCA9ICIgKyBt
ZXNzYWdlT2JqZWN0LmlkICsgIiBmYWlsZWQuICIgKyBtZXNzYWdlT2JqZWN0LmVycm9yKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSBzY3JpcHQKLSAgICAgKi8K
LSAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCi0gICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0g
W107Ci0KLSAgICAgICAgaWYgKHNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMucHVz
aChzY3JpcHQpOwotCi0gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KSB7
Ci0gICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Ci0gICAgICAgICAgICB0
aGlzLl9zY3JpcHRzID0gW10KLSAgICAgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQgPCBzY3Jp
cHRzLmxlbmd0aDsgKytpZCkKLSAgICAgICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2FsbCh0aGlz
KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBsb2FkRnJvbUpTT05JZk5lZWRlZDogZnVuY3Rp
b24oanNvblVybCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
Ci0gICAgICAgIHhoci5vcGVuKCJHRVQiLCBqc29uVXJsLCBmYWxzZSk7Ci0gICAgICAgIHhoci5z
ZW5kKG51bGwpOwotCi0gICAgICAgIHZhciBzY2hlbWEgPSBKU09OLnBhcnNlKHhoci5yZXNwb25z
ZVRleHQpOwotICAgICAgICB2YXIgY29kZSA9IEluc3BlY3RvckJhY2tlbmRDbGFzcy5fZ2VuZXJh
dGVDb21tYW5kcyhzY2hlbWEpOwotICAgICAgICBldmFsKGNvZGUpOwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAcGFyYW0geyp9IHNjaGVtYQotICogQHJldHVybiB7c3RyaW5nfQotICovCi1JbnNwZWN0
b3JCYWNrZW5kQ2xhc3MuX2dlbmVyYXRlQ29tbWFuZHMgPSBmdW5jdGlvbihzY2hlbWEpIHsKLSAg
ICB2YXIganNUeXBlcyA9IHsgaW50ZWdlcjogIm51bWJlciIsIGFycmF5OiAib2JqZWN0IiB9Owot
ICAgIHZhciByYXdUeXBlcyA9IHt9OwotICAgIHZhciByZXN1bHQgPSBbXTsKLQotICAgIHZhciBk
b21haW5zID0gc2NoZW1hWyJkb21haW5zIl0gfHwgW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkb21haW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBkb21haW4gPSBkb21haW5zW2ld
OwotICAgICAgICBmb3IgKHZhciBqID0gMDsgZG9tYWluLnR5cGVzICYmIGogPCBkb21haW4udHlw
ZXMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgIHZhciB0eXBlID0gZG9tYWluLnR5cGVzW2pd
OwotICAgICAgICAgICAgcmF3VHlwZXNbZG9tYWluLmRvbWFpbiArICIuIiArIHR5cGUuaWRdID0g
anNUeXBlc1t0eXBlLnR5cGVdIHx8IHR5cGUudHlwZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZ1bmN0aW9uIHRvVXBwZXJDYXNlKGdyb3VwSW5kZXgsIGdyb3VwMCwgZ3JvdXAxKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFtncm91cDAsIGdyb3VwMV1bZ3JvdXBJbmRleF0udG9VcHBlckNhc2Uo
KTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZ2VuZXJhdGVFbnVtKGVudW1OYW1lLCBpdGVtcykKLSAg
ICB7Ci0gICAgICAgIHZhciBtZW1iZXJzID0gW10KLSAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0g
PCBpdGVtcy5sZW5ndGg7ICsrbSkgewotICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlbXNbbV07
Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHZhbHVlLnJlcGxhY2UoLy0oXHcpL2csIHRvVXBwZXJD
YXNlLmJpbmQobnVsbCwgMSkpLnRvVGl0bGVDYXNlKCk7Ci0gICAgICAgICAgICBuYW1lID0gbmFt
ZS5yZXBsYWNlKC9IVE1MfFhNTHxXTUx8QVBJL2lnLCB0b1VwcGVyQ2FzZS5iaW5kKG51bGwsIDAp
KTsKLSAgICAgICAgICAgIG1lbWJlcnMucHVzaChuYW1lICsgIjogXCIiICsgdmFsdWUgKyJcIiIp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oXCIiICsgZW51bU5hbWUgKyAiXCIsIHsiICsgbWVtYmVycy5qb2luKCIsICIpICsgIn0pOyI7
Ci0gICAgfQotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5zLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIHZhciBkb21haW4gPSBkb21haW5zW2ldOwotCi0gICAgICAgIHZhciB0eXBlcyA9
IGRvbWFpblsidHlwZXMiXSB8fCBbXTsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0eXBl
cy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tqXTsKLSAgICAg
ICAgICAgIGlmICgodHlwZVsidHlwZSJdID09PSAic3RyaW5nIikgJiYgdHlwZVsiZW51bSJdKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlRW51bShkb21haW4uZG9tYWluICsg
Ii4iICsgdHlwZS5pZCwgdHlwZVsiZW51bSJdKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBl
WyJ0eXBlIl0gPT09ICJvYmplY3QiKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMg
PSB0eXBlWyJwcm9wZXJ0aWVzIl0gfHwgW107Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9
IDA7IGsgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNba107Ci0gICAgICAgICAgICAgICAgICAgIGlmICgocHJv
cGVydHlbInR5cGUiXSA9PT0gInN0cmluZyIpICYmIHByb3BlcnR5WyJlbnVtIl0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChnZW5lcmF0ZUVudW0oZG9tYWluLmRvbWFpbiAr
ICIuIiArIHR5cGUuaWQgKyBwcm9wZXJ0eVsibmFtZSJdLnRvVGl0bGVDYXNlKCksIHByb3BlcnR5
WyJlbnVtIl0pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2YXIgY29tbWFuZHMgPSBkb21haW5bImNvbW1hbmRzIl0gfHwgW107Ci0gICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tbWFuZHMubGVuZ3RoOyArK2opIHsKLSAgICAgICAg
ICAgIHZhciBjb21tYW5kID0gY29tbWFuZHNbal07Ci0gICAgICAgICAgICB2YXIgcGFyYW1ldGVy
cyA9IGNvbW1hbmRbInBhcmFtZXRlcnMiXTsKLSAgICAgICAgICAgIHZhciBwYXJhbXNUZXh0ID0g
W107Ci0gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgcGFyYW1ldGVycyAmJiBrIDwgcGFyYW1l
dGVycy5sZW5ndGg7ICsraykgewotICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXIgPSBwYXJh
bWV0ZXJzW2tdOwotCi0gICAgICAgICAgICAgICAgdmFyIHR5cGU7Ci0gICAgICAgICAgICAgICAg
aWYgKHBhcmFtZXRlci50eXBlKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0ganNUeXBlc1tw
YXJhbWV0ZXIudHlwZV0gfHwgcGFyYW1ldGVyLnR5cGU7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBwYXJhbWV0ZXJbIiRyZWYiXTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlZi5pbmRleE9mKCIuIikgIT09IC0xKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IHJhd1R5cGVzW3JlZl07Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSByYXdUeXBlc1tkb21haW4uZG9tYWlu
ICsgIi4iICsgcmVmXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIg
dGV4dCA9ICJ7XCJuYW1lXCI6IFwiIiArIHBhcmFtZXRlci5uYW1lICsgIlwiLCBcInR5cGVcIjog
XCIiICsgdHlwZSArICJcIiwgXCJvcHRpb25hbFwiOiAiICsgKHBhcmFtZXRlci5vcHRpb25hbCA/
ICJ0cnVlIiA6ICJmYWxzZSIpICsgIn0iOwotICAgICAgICAgICAgICAgIHBhcmFtc1RleHQucHVz
aCh0ZXh0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHJldHVybnNUZXh0ID0g
W107Ci0gICAgICAgICAgICB2YXIgcmV0dXJucyA9IGNvbW1hbmRbInJldHVybnMiXSB8fCBbXTsK
LSAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmV0dXJucy5sZW5ndGg7ICsraykgewot
ICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXIgPSByZXR1cm5zW2tdOwotICAgICAgICAgICAg
ICAgIHJldHVybnNUZXh0LnB1c2goIlwiIiArIHBhcmFtZXRlci5uYW1lICsgIlwiIik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQucHVzaCgiSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoXCIiICsgZG9tYWluLmRvbWFpbiArICIuIiArIGNvbW1hbmQubmFtZSArICJc
IiwgWyIgKyBwYXJhbXNUZXh0LmpvaW4oIiwgIikgKyAiXSwgWyIgKyByZXR1cm5zVGV4dC5qb2lu
KCIsICIpICsgIl0pOyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGRv
bWFpbi5ldmVudHMgJiYgaiA8IGRvbWFpbi5ldmVudHMubGVuZ3RoOyArK2opIHsKLSAgICAgICAg
ICAgIHZhciBldmVudCA9IGRvbWFpbi5ldmVudHNbal07Ci0gICAgICAgICAgICB2YXIgcGFyYW1z
VGV4dCA9IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGV2ZW50LnBhcmFtZXRlcnMg
JiYgayA8IGV2ZW50LnBhcmFtZXRlcnMubGVuZ3RoOyArK2spIHsKLSAgICAgICAgICAgICAgICB2
YXIgcGFyYW1ldGVyID0gZXZlbnQucGFyYW1ldGVyc1trXTsKLSAgICAgICAgICAgICAgICBwYXJh
bXNUZXh0LnB1c2goIlwiIiArIHBhcmFtZXRlci5uYW1lICsgIlwiIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXN1bHQucHVzaCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50
KFwiIiArIGRvbWFpbi5kb21haW4gKyAiLiIgKyBldmVudC5uYW1lICsgIlwiLCBbIiArIHBhcmFt
c1RleHQuam9pbigiLCAiKSArICJdKTsiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5w
dXNoKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyIiArIGRvbWFpbi5kb21haW4gKyAiRGlzcGF0
Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5z
cGVjdG9yQmFja2VuZCwgXCIiICsgZG9tYWluLmRvbWFpbiArICJcIik7Iik7Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQuam9pbigiXG4iKTsKLX0KLQotSW5zcGVjdG9yQmFja2VuZCA9IG5ldyBJ
bnNwZWN0b3JCYWNrZW5kQ2xhc3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLnFyYyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLnFyYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxNDg4Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5xcmMK
KysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTwhRE9DVFlQRSBSQ0M+PFJDQyB2ZXJzaW9u
PSIxLjAiPgotPHFyZXNvdXJjZSBwcmVmaXg9Ii93ZWJraXQvaW5zcGVjdG9yIj4KLSAgICA8Zmls
ZT5JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanM8L2ZpbGU+Ci08L3FyZXNvdXJjZT4KLTwvUkND
PgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3Bl
Y3RvckZyb250ZW5kQVBJLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JGcm9udGVuZEFQSS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFk
ZjMwYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kQVBJLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi12YXIg
SW5zcGVjdG9yRnJvbnRlbmRBUEkgPSB7Ci0gICAgX3BlbmRpbmdDb21tYW5kczogW10sCi0KLSAg
ICBpc0RlYnVnZ2luZ0VuYWJsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5kZWJ1Z2dlckVuYWJsZWQoKTsKLSAgICB9LAotCi0g
ICAgc2V0RGVidWdnaW5nRW5hYmxlZDogZnVuY3Rpb24oZW5hYmxlZCkKLSAgICB7Ci0gICAgICAg
IGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5l
bmFibGVEZWJ1Z2dlcigpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dQYW5lbCgic2Ny
aXB0cyIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmRpc2FibGVEZWJ1Z2dlcigpOwotICAgIH0sCi0KLSAgICBpc1RpbWVsaW5lUHJvZmls
aW5nRW5hYmxlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5wYW5lbHMudGltZWxpbmUgJiYgV2ViSW5zcGVjdG9yLnBhbmVscy50aW1lbGluZS50aW1lbGlu
ZVByb2ZpbGluZ0VuYWJsZWQ7Ci0gICAgfSwKLQotICAgIHNldFRpbWVsaW5lUHJvZmlsaW5nRW5h
YmxlZDogZnVuY3Rpb24oZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zaG93
UGFuZWwoInRpbWVsaW5lIikuc2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGVuYWJsZWQpOwot
ICAgIH0sCi0KLSAgICBpc1Byb2ZpbGluZ0phdmFTY3JpcHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzICYmIFdlYkluc3BlY3Rv
ci5DUFVQcm9maWxlVHlwZS5pbnN0YW5jZSAmJiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUu
aW5zdGFuY2UuaXNSZWNvcmRpbmdQcm9maWxlKCk7Ci0gICAgfSwKLQotICAgIHN0YXJ0UHJvZmls
aW5nSmF2YVNjcmlwdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNo
b3dQYW5lbCgicHJvZmlsZXMiKS5lbmFibGVQcm9maWxlcigpOwotICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLkNQVVByb2ZpbGVUeXBlLmluc3RhbmNlKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LkNQVVByb2ZpbGVUeXBlLmluc3RhbmNlLnN0YXJ0UmVjb3JkaW5nUHJvZmlsZSgpOwotICAgIH0s
Ci0KLSAgICBzdG9wUHJvZmlsaW5nSmF2YVNjcmlwdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLnNob3dQYW5lbCgicHJvZmlsZXMiKTsKLSAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5DUFVQcm9maWxlVHlwZS5pbnN0YW5jZSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5DUFVQcm9maWxlVHlwZS5pbnN0YW5jZS5zdG9wUmVjb3JkaW5nUHJvZmlsZSgpOwotICAgIH0s
Ci0KLSAgICBzZXRBdHRhY2hlZFdpbmRvdzogZnVuY3Rpb24oc2lkZSkKLSAgICB7Ci0gICAgICAK
LSAgICB9LAotCi0gICAgc2V0RG9ja1NpZGU6IGZ1bmN0aW9uKHNpZGUpCi0gICAgewotICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLmRvY2tDb250cm9sbGVyKQotICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmRvY2tDb250cm9sbGVyLnNldERvY2tTaWRlKHNpZGUpOwotICAgIH0sCi0KLSAgICBzaG93
Q29uc29sZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dQYW5l
bCgiY29uc29sZSIpOwotICAgIH0sCi0KLSAgICBzaG93TWFpblJlc291cmNlRm9yRnJhbWU6IGZ1
bmN0aW9uKGZyYW1lSWQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
dG8gc2hvdyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBtYWluIHJlc291cmNlIG9mIGEgZ2l2ZW4g
ZnJhbWUuCi0gICAgfSwKLQotICAgIHNob3dSZXNvdXJjZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5zaG93UGFuZWwoInJlc291cmNlcyIpOwotICAgIH0sCi0KLSAg
ICBzZXREb2NraW5nVW5hdmFpbGFibGU6IGZ1bmN0aW9uKHVuYXZhaWxhYmxlKQotICAgIHsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLnNldERvY2tpbmdVbmF2YWlsYWJsZSh1bmF2YWlsYWJsZSk7Ci0g
ICAgfSwKLQotICAgIGVudGVySW5zcGVjdEVsZW1lbnRNb2RlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmluc3BlY3RFbGVtZW50TW9kZUNvbnRyb2xsZXIpCi0g
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuaW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci50b2dn
bGVTZWFyY2goKTsKLSAgICB9LAotCi0gICAgZmlsZVN5c3RlbXNMb2FkZWQ6IGZ1bmN0aW9uKGZp
bGVTeXN0ZW1zKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmlzb2xhdGVkRmlsZVN5c3Rl
bURpc3BhdGNoZXIuZmlsZVN5c3RlbXNMb2FkZWQoZmlsZVN5c3RlbXMpOwotICAgIH0sCi0KLSAg
ICBmaWxlU3lzdGVtUmVtb3ZlZDogZnVuY3Rpb24oZmlsZVN5c3RlbVBhdGgpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuaXNvbGF0ZWRGaWxlU3lzdGVtRGlzcGF0Y2hlci5maWxlU3lzdGVt
UmVtb3ZlZChmaWxlU3lzdGVtUGF0aCk7Ci0gICAgfSwKLQotICAgIGZpbGVTeXN0ZW1BZGRlZDog
ZnVuY3Rpb24oZXJyb3JNZXNzYWdlLCBmaWxlU3lzdGVtKQotICAgIHsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLmlzb2xhdGVkRmlsZVN5c3RlbURpc3BhdGNoZXIuZmlsZVN5c3RlbUFkZGVkKGVycm9y
TWVzc2FnZSwgZmlsZVN5c3RlbSk7Ci0gICAgfSwKLQotICAgIHNhdmVkVVJMOiBmdW5jdGlvbih1
cmwpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuc2F2ZWRVUkwodXJs
KTsKLSAgICB9LAotCi0gICAgYXBwZW5kZWRUb1VSTDogZnVuY3Rpb24odXJsKQotICAgIHsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFwcGVuZGVkVG9VUkwodXJsKTsKLSAgICB9
LAotCi0gICAgc2V0VG9vbGJhckNvbG9yczogZnVuY3Rpb24oYmFja2dyb3VuZENvbG9yLCBjb2xv
cikKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zZXRUb29sYmFyQ29sb3JzKGJhY2tncm91
bmRDb2xvciwgY29sb3IpOwotICAgIH0sCi0KLSAgICBldmFsdWF0ZUZvclRlc3Q6IGZ1bmN0aW9u
KGNhbGxJZCwgc2NyaXB0KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQoY2FsbElkLCBzY3JpcHQpOwotICAgIH0sCi0KLSAgICBkaXNwYXRjaDog
ZnVuY3Rpb24oc2lnbmF0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckZyb250ZW5k
QVBJLl9pc0xvYWRlZCkgewotICAgICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSBzaWduYXR1cmUu
c2hpZnQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3JGcm9udGVuZEFQSVttZXRob2RO
YW1lXS5hcHBseShJbnNwZWN0b3JGcm9udGVuZEFQSSwgc2lnbmF0dXJlKTsKLSAgICAgICAgfQot
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQSS5fcGVuZGluZ0NvbW1hbmRzLnB1c2goc2lnbmF0
dXJlKTsKLSAgICB9LAotCi0gICAgZGlzcGF0Y2hRdWVyeVBhcmFtZXRlcnM6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIGlmICgiZGlzcGF0Y2giIGluIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFt
c09iamVjdCkKLSAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKEpTT04u
cGFyc2Uod2luZG93LmRlY29kZVVSSShXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImRp
c3BhdGNoIl0pKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwKLSAgICAgKi8KLSAgICBsb2FkVGltZWxpbmVGcm9tVVJMOiBmdW5jdGlvbih1cmwpIAotICAg
IHsKLSAgICAgICAgLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbH0gKi8gKFdl
Ykluc3BlY3Rvci5zaG93UGFuZWwoInRpbWVsaW5lIikpLmxvYWRGcm9tVVJMKHVybCk7Ci0gICAg
fSwKLQotICAgIGxvYWRDb21wbGV0ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQVBJLl9pc0xvYWRlZCA9IHRydWU7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgSW5zcGVjdG9yRnJvbnRlbmRBUEkuX3BlbmRpbmdDb21tYW5kcy5sZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKEluc3BlY3RvckZyb250
ZW5kQVBJLl9wZW5kaW5nQ29tbWFuZHNbaV0pOwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQ
SS5fcGVuZGluZ0NvbW1hbmRzID0gW107Ci0gICAgICAgIGlmICh3aW5kb3cub3BlbmVyKQotICAg
ICAgICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShbImxvYWRDb21wbGV0ZWQiXSwgIioi
KTsKLSAgICB9LAotCi0gICAgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQ6IGZ1bmN0aW9uKGlkKQot
ICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGlkKTsK
LSAgICB9LAotCi0gICAgY29udGV4dE1lbnVDbGVhcmVkOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuY29udGV4dE1lbnVDbGVhcmVkKCk7Ci0gICAgfSwKLQotICAgIGRp
c3BhdGNoTWVzc2FnZUFzeW5jOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoKG1lc3NhZ2VPYmplY3QpOwotICAgIH0sCi0KLSAgICBk
aXNwYXRjaE1lc3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCi0gICAgewotICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLmRpc3BhdGNoKG1lc3NhZ2VPYmplY3QpOwotICAgIH0KLX0KLQotaWYg
KHdpbmRvdy5vcGVuZXIgJiYgd2luZG93LmRpc3BhdGNoU3RhbmRhbG9uZVRlc3RSdW5uZXJNZXNz
YWdlcykgewotICAgIGZ1bmN0aW9uIG9uTWVzc2FnZUZyb21PcGVuZXIoZXZlbnQpCi0gICAgewot
ICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSB3aW5kb3cub3BlbmVyKQotICAgICAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2goZXZlbnQuZGF0YSk7Ci0gICAgfQotICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgb25NZXNzYWdlRnJvbU9wZW5lciwgdHJ1
ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ0Y2NmNjUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCisrKyAvZGV2L251bGwKQEAg
LTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi1pZiAoIXdpbmRvdy5JbnNwZWN0b3JGcm9udGVuZEhvc3QpIHsKLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtJbnNwZWN0b3JGcm9udGVuZEhvc3RB
UEl9Ci0gKi8KLVdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViID0gZnVuY3Rp
b24oKQotewotICAgIHRoaXMuX2F0dGFjaGVkV2luZG93SGVpZ2h0ID0gMDsKLSAgICB0aGlzLmlz
U3R1YiA9IHRydWU7Ci0gICAgdGhpcy5fZmlsZUJ1ZmZlcnMgPSB7fTsKLSAgICBXZWJJbnNwZWN0
b3IuZG9jdW1lbnRDb3B5RXZlbnRGaXJlZCA9IHRoaXMuZG9jdW1lbnRDb3B5LmJpbmQodGhpcyk7
Ci19Ci0KLVdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9
IHsKLSAgICBwbGF0Zm9ybTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG1hdGNoID0g
bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvV2luZG93cyBOVC8pOwotICAgICAgICBpZiAobWF0
Y2gpCi0gICAgICAgICAgICByZXR1cm4gIndpbmRvd3MiOwotICAgICAgICBtYXRjaCA9IG5hdmln
YXRvci51c2VyQWdlbnQubWF0Y2goL01hYyBPUyBYLyk7Ci0gICAgICAgIGlmIChtYXRjaCkKLSAg
ICAgICAgICAgIHJldHVybiAibWFjIjsKLSAgICAgICAgcmV0dXJuICJsaW51eCI7Ci0gICAgfSwK
LQotICAgIHBvcnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAidW5rbm93biI7
Ci0gICAgfSwKLQotICAgIGJyaW5nVG9Gcm9udDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fd2luZG93VmlzaWJsZSA9IHRydWU7Ci0gICAgfSwKLQotICAgIGNsb3NlV2luZG93OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl93aW5kb3dWaXNpYmxlID0gZmFsc2U7Ci0g
ICAgfSwKLQotICAgIHJlcXVlc3RTZXREb2NrU2lkZTogZnVuY3Rpb24oc2lkZSkKLSAgICB7Ci0g
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLnNldERvY2tTaWRlKHNpZGUpOwotICAgIH0sCi0K
LSAgICBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDogZnVuY3Rpb24oaGVpZ2h0KQotICAgIHsKLSAg
ICB9LAotCi0gICAgc2V0QXR0YWNoZWRXaW5kb3dXaWR0aDogZnVuY3Rpb24od2lkdGgpCi0gICAg
ewotICAgIH0sCi0KLSAgICBtb3ZlV2luZG93Qnk6IGZ1bmN0aW9uKHgsIHkpCi0gICAgewotICAg
IH0sCi0KLSAgICBzZXRJbmplY3RlZFNjcmlwdEZvck9yaWdpbjogZnVuY3Rpb24ob3JpZ2luLCBz
Y3JpcHQpCi0gICAgewotICAgIH0sCi0KLSAgICBsb2FkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgfSwKLQotICAgIGxvY2FsaXplZFN0cmluZ3NVUkw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgfSwKLQotICAgIGluc3BlY3RlZFVSTENoYW5nZWQ6
IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAgIGRvY3VtZW50LnRpdGxlID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKFByZWZlcmVuY2VzLmFwcGxpY2F0aW9uVGl0bGUsIHVybCk7Ci0gICAgfSwK
LQotICAgIGRvY3VtZW50Q29weTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAo
IXRoaXMuX3RleHRUb0NvcHkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGV2ZW50LmNs
aXBib2FyZERhdGEuc2V0RGF0YSgidGV4dCIsIHRoaXMuX3RleHRUb0NvcHkpOwotICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICBkZWxldGUgdGhpcy5fdGV4dFRvQ29weTsK
LSAgICB9LAotCi0gICAgY29weVRleHQ6IGZ1bmN0aW9uKHRleHQpCi0gICAgewotICAgICAgICB0
aGlzLl90ZXh0VG9Db3B5ID0gdGV4dDsKLSAgICAgICAgaWYgKCFkb2N1bWVudC5leGVjQ29tbWFu
ZCgiY29weSIpKSB7Ci0gICAgICAgICAgICB2YXIgc2NyZWVuID0gbmV3IFdlYkluc3BlY3Rvci5D
bGlwYm9hcmRBY2Nlc3NEZW5pZWRTY3JlZW4oKTsKLSAgICAgICAgICAgIHNjcmVlbi5zaG93TW9k
YWwoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBvcGVuSW5OZXdUYWI6IGZ1bmN0aW9uKHVy
bCkKLSAgICB7Ci0gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgIl9ibGFuayIpOwotICAgIH0sCi0K
LSAgICBjYW5TYXZlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9LAotCi0gICAgc2F2ZTogZnVuY3Rpb24odXJsLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBm
b3JjZVNhdmVBcykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9maWxlQnVmZmVyc1t1cmxdKQot
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb25jdXJyZW50IGZpbGUgbW9kaWZpY2F0aW9u
IGRlbmllZC4iKTsKLQotICAgICAgICB0aGlzLl9maWxlQnVmZmVyc1t1cmxdID0gW2NvbnRlbnRd
OwotICAgICAgICBzZXRUaW1lb3V0KFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5zYXZlZFVSTC5i
aW5kKFdlYkluc3BlY3Rvci5maWxlTWFuYWdlciwgdXJsKSwgMCk7Ci0gICAgfSwKLQotICAgIGFw
cGVuZDogZnVuY3Rpb24odXJsLCBjb250ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGJ1ZmZlciA9
IHRoaXMuX2ZpbGVCdWZmZXJzW3VybF07Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIG5vdCBvcGVuIGZvciB3cml0ZSB5ZXQuIik7Ci0K
LSAgICAgICAgYnVmZmVyLnB1c2goY29udGVudCk7Ci0gICAgICAgIHNldFRpbWVvdXQoV2ViSW5z
cGVjdG9yLmZpbGVNYW5hZ2VyLmFwcGVuZGVkVG9VUkwuYmluZChXZWJJbnNwZWN0b3IuZmlsZU1h
bmFnZXIsIHVybCksIDApOwotICAgIH0sCi0KLSAgICBjbG9zZTogZnVuY3Rpb24odXJsKQotICAg
IHsKLSAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9maWxlQnVmZmVyc1t1cmxdOwotICAgICAg
ICBkZWxldGUgdGhpcy5fZmlsZUJ1ZmZlcnNbdXJsXTsKLQotICAgICAgICBpZiAoIWNvbnRlbnQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGxhc3RTbGFzaEluZGV4ID0gdXJs
Lmxhc3RJbmRleE9mKCIvIik7Ci0gICAgICAgIHZhciBmaWxlTmFtZVN1ZmZpeCA9IChsYXN0U2xh
c2hJbmRleCA9PT0gLTEpID8gdXJsIDogdXJsLnN1YnN0cmluZyhsYXN0U2xhc2hJbmRleCArIDEp
OwotCi0gICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoY29udGVudCwgeyB0eXBlOiAiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIiB9KTsKLSAgICAgICAgdmFyIG9iamVjdFVybCA9IHdpbmRvdy5V
UkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwotICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBvYmpl
Y3RVcmwgKyAiIyIgKyBmaWxlTmFtZVN1ZmZpeDsKLQotICAgICAgICBmdW5jdGlvbiBjbGVhbnVw
KCkKLSAgICAgICAgewotICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2Jq
ZWN0VXJsKTsKLSAgICAgICAgfQotICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXAsIDApOwotICAg
IH0sCi0KLSAgICBzZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24obWVzc2FnZSkKLSAgICB7
Ci0gICAgfSwKLQotICAgIHJlY29yZEFjdGlvblRha2VuOiBmdW5jdGlvbihhY3Rpb25Db2RlKQot
ICAgIHsKLSAgICB9LAotCi0gICAgcmVjb3JkUGFuZWxTaG93bjogZnVuY3Rpb24ocGFuZWxDb2Rl
KQotICAgIHsKLSAgICB9LAotCi0gICAgcmVjb3JkU2V0dGluZ0NoYW5nZWQ6IGZ1bmN0aW9uKHNl
dHRpbmdDb2RlKQotICAgIHsKLSAgICB9LAotCi0gICAgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eTogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvYWRYSFIodXJsKTsKLSAg
ICB9LAotCi0gICAgc3VwcG9ydHNGaWxlU3lzdGVtczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICByZXF1ZXN0RmlsZVN5c3RlbXM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgfSwKLQotICAgIGFkZEZpbGVTeXN0ZW06IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgfSwKLQotICAgIHJlbW92ZUZpbGVTeXN0ZW06IGZ1bmN0aW9uKGZpbGVTeXN0ZW1Q
YXRoKQotICAgIHsKLSAgICB9LAotCi0gICAgaXNvbGF0ZWRGaWxlU3lzdGVtOiBmdW5jdGlvbihm
aWxlU3lzdGVtSWQsIHJlZ2lzdGVyZWROYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgfSwKLQotICAgIHNldFpvb21GYWN0b3I6IGZ1bmN0aW9uKHpvb20pCi0gICAgewotICAg
IH0sCi0KLSAgICBpc1VuZGVyVGVzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0ID0gbmV3IFdlYkluc3Bl
Y3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViKCk7Ci1QcmVmZXJlbmNlcy5sb2NhbGl6ZVVJ
ID0gZmFsc2U7Ci0KLS8vIERlZmF1bHQgaW1wbGVtZW50YXRpb247IHBsYXRmb3JtcyB3aWxsIG92
ZXJyaWRlLgotV2ViSW5zcGVjdG9yLmNsaXBib2FyZEFjY2Vzc0RlbmllZE1lc3NhZ2UgPSBmdW5j
dGlvbigpCi17Ci0gICAgcmV0dXJuICIiOwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICog
QGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWxwU2NyZWVufQotICovCi1XZWJJbnNwZWN0b3IuQ2xp
cGJvYXJkQWNjZXNzRGVuaWVkU2NyZWVuID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rv
ci5IZWxwU2NyZWVuLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGlwYm9hcmQg
YWNjZXNzIGlzIGRlbmllZCIpKTsKLSAgICB2YXIgcGxhdGZvcm1NZXNzYWdlID0gV2ViSW5zcGVj
dG9yLmNsaXBib2FyZEFjY2Vzc0RlbmllZE1lc3NhZ2UoKTsKLSAgICBpZiAocGxhdGZvcm1NZXNz
YWdlKSB7Ci0gICAgICAgIHZhciBwID0gdGhpcy5jb250ZW50RWxlbWVudC5jcmVhdGVDaGlsZCgi
cCIpOwotICAgICAgICBwLmFkZFN0eWxlQ2xhc3MoImhlbHAtc2VjdGlvbiIpOwotICAgICAgICBw
LnRleHRDb250ZW50ID0gcGxhdGZvcm1NZXNzYWdlOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9y
LkNsaXBib2FyZEFjY2Vzc0RlbmllZFNjcmVlbi5wcm90b3R5cGUgPSB7Ci0gICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuSGVscFNjcmVlbi5wcm90b3R5cGUKLX0KLQotfQotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWxwU2NyZWVufQotICovCi1X
ZWJJbnNwZWN0b3IuUmVtb3RlRGVidWdnaW5nVGVybWluYXRlZFNjcmVlbiA9IGZ1bmN0aW9uKHJl
YXNvbikKLXsKLSAgICBXZWJJbnNwZWN0b3IuSGVscFNjcmVlbi5jYWxsKHRoaXMsIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiRGV0YWNoZWQgZnJvbSB0aGUgdGFyZ2V0IikpOwotICAgIHZhciBwID0g
dGhpcy5jb250ZW50RWxlbWVudC5jcmVhdGVDaGlsZCgicCIpOwotICAgIHAuYWRkU3R5bGVDbGFz
cygiaGVscC1zZWN0aW9uIik7Ci0gICAgcC5jcmVhdGVDaGlsZCgic3BhbiIpLnRleHRDb250ZW50
ID0gIlJlbW90ZSBkZWJ1Z2dpbmcgaGFzIGJlZW4gdGVybWluYXRlZCB3aXRoIHJlYXNvbjogIjsK
LSAgICBwLmNyZWF0ZUNoaWxkKCJzcGFuIiwgImVycm9yLW1lc3NhZ2UiKS50ZXh0Q29udGVudCA9
IHJlYXNvbjsKLSAgICBwLmNyZWF0ZUNoaWxkKCJiciIpOwotICAgIHAuY3JlYXRlQ2hpbGQoInNw
YW4iKS50ZXh0Q29udGVudCA9ICJQbGVhc2UgcmUtYXR0YWNoIHRvIHRoZSBuZXcgdGFyZ2V0LiI7
Ci19Ci0KLVdlYkluc3BlY3Rvci5SZW1vdGVEZWJ1Z2dpbmdUZXJtaW5hdGVkU2NyZWVuLnByb3Rv
dHlwZSA9IHsKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5IZWxwU2NyZWVuLnByb3RvdHlw
ZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNw
ZWN0b3JWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0
b3JWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWFkM2JjLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqLwotV2ViSW5zcGVjdG9yLkluc3BlY3Rv
clZpZXcgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsK
LSAgICB0aGlzLm1hcmtBc1Jvb3QoKTsKLSAgICB0aGlzLmVsZW1lbnQuaWQgPSAibWFpbi1wYW5l
bHMiOwotICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCBmYWxzZSk7
Ci0gICAgdGhpcy5faGlzdG9yeSA9IFtdOwotICAgIHRoaXMuX2hpc3RvcnlJdGVyYXRvciA9IC0x
OwotICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9rZXlEb3du
LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlw
cmVzcyIsIHRoaXMuX2tleVByZXNzLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9wYW5l
bE9yZGVyID0gW107Ci0gICAgdGhpcy5fcGFuZWxEZXNjcmlwdG9ycyA9IHt9OwotCi0gICAgLy8g
V2luZG93cyBhbmQgTWFjIGhhdmUgdHdvIGRpZmZlcmVudCBkZWZpbml0aW9ucyBvZiAnWycgYW5k
ICddJywgc28gYWNjZXB0IGJvdGggb2YgZWFjaC4KLSAgICB0aGlzLl9vcGVuQnJhY2tldElkZW50
aWZpZXJzID0gWyJVKzAwNUIiLCAiVSswMERCIl0ua2V5U2V0KCk7Ci0gICAgdGhpcy5fY2xvc2VC
cmFja2V0SWRlbnRpZmllcnMgPSBbIlUrMDA1RCIsICJVKzAwREQiXS5rZXlTZXQoKTsKLSAgICB0
aGlzLl9mb290ZXJFbGVtZW50Q29udGFpbmVyID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJk
aXYiLCAiaW5zcGVjdG9yLWZvb3RlciBzdGF0dXMtYmFyIGhpZGRlbiIpOwotICAgIHRoaXMuX3Bh
bmVsc0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJmaWxsIik7Ci19
Ci0KLVdlYkluc3BlY3Rvci5JbnNwZWN0b3JWaWV3LkV2ZW50cyA9IHsKLSAgICBQYW5lbFNlbGVj
dGVkOiAiUGFuZWxTZWxlY3RlZCIKLX0KLQotV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBhbmVsRGVz
Y3JpcHRvcn0gcGFuZWxEZXNjcmlwdG9yCi0gICAgICovCi0gICAgYWRkUGFuZWw6IGZ1bmN0aW9u
KHBhbmVsRGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhbmVsT3JkZXIucHVzaChw
YW5lbERlc2NyaXB0b3IubmFtZSgpKTsKLSAgICAgICAgdGhpcy5fcGFuZWxEZXNjcmlwdG9yc1tw
YW5lbERlc2NyaXB0b3IubmFtZSgpXSA9IHBhbmVsRGVzY3JpcHRvcjsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnRvb2xiYXIuYWRkUGFuZWwocGFuZWxEZXNjcmlwdG9yKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhbmVsTmFtZQotICAgICAqIEByZXR1cm4gez9X
ZWJJbnNwZWN0b3IuUGFuZWx9Ci0gICAgICovCi0gICAgcGFuZWw6IGZ1bmN0aW9uKHBhbmVsTmFt
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBwYW5lbERlc2NyaXB0b3IgPSB0aGlzLl9wYW5lbERlc2Ny
aXB0b3JzW3BhbmVsTmFtZV07Ci0gICAgICAgIGlmICghcGFuZWxEZXNjcmlwdG9yICYmIHRoaXMu
X3BhbmVsT3JkZXIubGVuZ3RoKQotICAgICAgICAgICAgcGFuZWxEZXNjcmlwdG9yID0gdGhpcy5f
cGFuZWxEZXNjcmlwdG9yc1t0aGlzLl9wYW5lbE9yZGVyWzBdXTsKLSAgICAgICAgcmV0dXJuIHBh
bmVsRGVzY3JpcHRvciA/IHBhbmVsRGVzY3JpcHRvci5wYW5lbCgpIDogbnVsbDsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhbmVsTmFtZQotICAgICAqIEByZXR1
cm4gez9XZWJJbnNwZWN0b3IuUGFuZWx9Ci0gICAgICovCi0gICAgc2hvd1BhbmVsOiBmdW5jdGlv
bihwYW5lbE5hbWUpCi0gICAgewotICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsKHBhbmVs
TmFtZSk7Ci0gICAgICAgIGlmIChwYW5lbCkKLSAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBh
bmVsKHBhbmVsKTsKLSAgICAgICAgcmV0dXJuIHBhbmVsOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUGFuZWx9Ci0gICAgICovCi0gICAgY3VycmVudFBh
bmVsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhbmVs
OwotICAgIH0sCi0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUGFu
ZWx9IHgKLSAgICAgKi8KLSAgICBzZXRDdXJyZW50UGFuZWw6IGZ1bmN0aW9uKHgpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fY3VycmVudFBhbmVsID09PSB4KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICh0aGlzLl9jdXJyZW50UGFuZWwpCi0gICAgICAgICAgICB0aGlzLl9j
dXJyZW50UGFuZWwuZGV0YWNoKCk7Ci0KLSAgICAgICAgdGhpcy5fY3VycmVudFBhbmVsID0geDsK
LQotICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAgeC5zaG93KCk7Ci0gICAgICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuSW5zcGVjdG9yVmlldy5F
dmVudHMuUGFuZWxTZWxlY3RlZCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHNlYXJj
aCBjb250cm9sbGVyLgotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIu
Y2FuY2VsU2VhcmNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh2YXIgcGFuZWxOYW1lIGlu
IFdlYkluc3BlY3Rvci5wYW5lbHMpIHsKLSAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFu
ZWxzW3BhbmVsTmFtZV0gPT09IHgpIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MubGFzdEFjdGl2ZVBhbmVsLnNldChwYW5lbE5hbWUpOwotICAgICAgICAgICAgICAgIHRo
aXMuX3B1c2hUb0hpc3RvcnkocGFuZWxOYW1lKTsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0
b3IudXNlck1ldHJpY3MucGFuZWxTaG93bihwYW5lbE5hbWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAg
ICovCi0gICAgZGVmYXVsdEZvY3VzZWRFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fY3VycmVudFBhbmVsID8gdGhpcy5fY3VycmVudFBhbmVsLmRlZmF1bHRG
b2N1c2VkRWxlbWVudCgpIDogbnVsbDsKLSAgICB9LAotCi0gICAgX2tleVByZXNzOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIC8vIEJVRyAxMDQyNTA6IFdpbmRvd3MgNyBwb3N0cyBh
IFdNX0NIQVIgbWVzc2FnZSB1cG9uIHRoZSBDdHJsKyddJyBrZXlwcmVzcy4KLSAgICAgICAgLy8g
QW55IGNoYXJDb2RlIDwgMzIgaXMgbm90IGdvaW5nIHRvIGJlIGEgdmFsaWQga2V5cHJlc3MuCi0g
ICAgICAgIGlmIChldmVudC5jaGFyQ29kZSA8IDMyICYmIFdlYkluc3BlY3Rvci5pc1dpbigpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fa2V5RG93blRp
bWVyKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2tleURvd25UaW1lcjsKLSAgICB9LAotCi0gICAg
X2tleURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCFXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5ldmVudEhhc0N0cmxPck1ldGEoZXZlbnQpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIC8vIEN0cmwvQ21kICsgMS05IHNob3VsZCBzaG93IGNvcnJl
c3BvbmRpbmcgcGFuZWwuCi0gICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFs
dEtleSAmJiBldmVudC5rZXlDb2RlID4gMHgzMCAmJiBldmVudC5rZXlDb2RlIDwgMHgzQSkgewot
ICAgICAgICAgICAgdmFyIHBhbmVsTmFtZSA9IHRoaXMuX3BhbmVsT3JkZXJbZXZlbnQua2V5Q29k
ZSAtIDB4MzFdOwotICAgICAgICAgICAgaWYgKHBhbmVsTmFtZSkgewotICAgICAgICAgICAgICAg
IHRoaXMuc2hvd1BhbmVsKHBhbmVsTmFtZSk7Ci0gICAgICAgICAgICAgICAgZXZlbnQuY29uc3Vt
ZSh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIEJVRzg1MzEyOiBPbiBGcmVuY2ggQVpFUlRZIGtleWJvYXJkcywgQWx0R3It
XS9bIGNvbWJpbmF0aW9ucyAoc3lub255bW91cyB0byBDdHJsLUFsdC1dL1sgb24gV2luZG93cykg
YXJlIHVzZWQgdG8gZW50ZXIgXS9bLAotICAgICAgICAvLyBzbyBmb3IgYSBdL1stcmVsYXRlZCBr
ZXlkb3duIHdlIGRlbGF5IHRoZSBwYW5lbCBzd2l0Y2ggdXNpbmcgYSB0aW1lciwgdG8gc2VlIGlm
IHRoZXJlIGlzIGEga2V5cHJlc3MgZXZlbnQgZm9sbG93aW5nIHRoaXMgb25lLgotICAgICAgICAv
LyBJZiB0aGVyZSBpcywgd2UgY2FuY2VsIHRoZSB0aW1lciBhbmQgZG8gbm90IGNvbnNpZGVyIHRo
aXMgYSBwYW5lbCBzd2l0Y2guCi0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmlzV2luKCkgfHwg
KCF0aGlzLl9vcGVuQnJhY2tldElkZW50aWZpZXJzW2V2ZW50LmtleUlkZW50aWZpZXJdICYmICF0
aGlzLl9jbG9zZUJyYWNrZXRJZGVudGlmaWVyc1tldmVudC5rZXlJZGVudGlmaWVyXSkpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2tleURvd25JbnRlcm5hbChldmVudCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9rZXlEb3duVGltZXIgPSBzZXRUaW1lb3V0
KHRoaXMuX2tleURvd25JbnRlcm5hbC5iaW5kKHRoaXMsIGV2ZW50KSwgMCk7Ci0gICAgfSwKLQot
ICAgIF9rZXlEb3duSW50ZXJuYWw6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX29wZW5CcmFja2V0SWRlbnRpZmllcnNbZXZlbnQua2V5SWRlbnRpZmllcl0pIHsKLSAg
ICAgICAgICAgIHZhciBpc1JvdGF0ZUxlZnQgPSAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFs
dEtleTsKLSAgICAgICAgICAgIGlmIChpc1JvdGF0ZUxlZnQpIHsKLSAgICAgICAgICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLl9wYW5lbE9yZGVyLmluZGV4T2YodGhpcy5jdXJyZW50UGFuZWwoKS5u
YW1lKTsKLSAgICAgICAgICAgICAgICBpbmRleCA9IChpbmRleCA9PT0gMCkgPyB0aGlzLl9wYW5l
bE9yZGVyLmxlbmd0aCAtIDEgOiBpbmRleCAtIDE7Ci0gICAgICAgICAgICAgICAgdGhpcy5zaG93
UGFuZWwodGhpcy5fcGFuZWxPcmRlcltpbmRleF0pOwotICAgICAgICAgICAgICAgIGV2ZW50LmNv
bnN1bWUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2YXIgaXNHb0JhY2sgPSBldmVudC5hbHRLZXk7Ci0gICAgICAgICAgICBpZiAo
aXNHb0JhY2sgJiYgdGhpcy5fY2FuR29CYWNrSW5IaXN0b3J5KCkpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9nb0JhY2tJbkhpc3RvcnkoKTsKLSAgICAgICAgICAgICAgICBldmVudC5jb25zdW1l
KHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHRoaXMuX2Nsb3NlQnJhY2tldElkZW50aWZpZXJzW2V2ZW50LmtleUlkZW50
aWZpZXJdKSB7Ci0gICAgICAgICAgICB2YXIgaXNSb3RhdGVSaWdodCA9ICFldmVudC5zaGlmdEtl
eSAmJiAhZXZlbnQuYWx0S2V5OwotICAgICAgICAgICAgaWYgKGlzUm90YXRlUmlnaHQpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wYW5lbE9yZGVyLmluZGV4T2YodGhpcy5j
dXJyZW50UGFuZWwoKS5uYW1lKTsKLSAgICAgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEp
ICUgdGhpcy5fcGFuZWxPcmRlci5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgdGhpcy5zaG93UGFu
ZWwodGhpcy5fcGFuZWxPcmRlcltpbmRleF0pOwotICAgICAgICAgICAgICAgIGV2ZW50LmNvbnN1
bWUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB2YXIgaXNHb0ZvcndhcmQgPSBldmVudC5hbHRLZXk7Ci0gICAgICAgICAgICBpZiAo
aXNHb0ZvcndhcmQgJiYgdGhpcy5fY2FuR29Gb3J3YXJkSW5IaXN0b3J5KCkpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9nb0ZvcndhcmRJbkhpc3RvcnkoKTsKLSAgICAgICAgICAgICAgICBldmVu
dC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIF9jYW5Hb0JhY2tJbkhpc3Rvcnk6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oaXN0b3J5SXRlcmF0b3IgPiAwOwotICAgIH0sCi0K
LSAgICBfZ29CYWNrSW5IaXN0b3J5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9p
bkhpc3RvcnkgPSB0cnVlOwotICAgICAgICB0aGlzLnNldEN1cnJlbnRQYW5lbChXZWJJbnNwZWN0
b3IucGFuZWxzW3RoaXMuX2hpc3RvcnlbLS10aGlzLl9oaXN0b3J5SXRlcmF0b3JdXSk7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9pbkhpc3Rvcnk7Ci0gICAgfSwKLQotICAgIF9jYW5Hb0ZvcndhcmRJ
bkhpc3Rvcnk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oaXN0b3J5
SXRlcmF0b3IgPCB0aGlzLl9oaXN0b3J5Lmxlbmd0aCAtIDE7Ci0gICAgfSwKLQotICAgIF9nb0Zv
cndhcmRJbkhpc3Rvcnk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2luSGlzdG9y
eSA9IHRydWU7Ci0gICAgICAgIHRoaXMuc2V0Q3VycmVudFBhbmVsKFdlYkluc3BlY3Rvci5wYW5l
bHNbdGhpcy5faGlzdG9yeVsrK3RoaXMuX2hpc3RvcnlJdGVyYXRvcl1dKTsKLSAgICAgICAgZGVs
ZXRlIHRoaXMuX2luSGlzdG9yeTsKLSAgICB9LAotCi0gICAgX3B1c2hUb0hpc3Rvcnk6IGZ1bmN0
aW9uKHBhbmVsTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pbkhpc3RvcnkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGlzdG9yeS5zcGxpY2UodGhpcy5faGlz
dG9yeUl0ZXJhdG9yICsgMSwgdGhpcy5faGlzdG9yeS5sZW5ndGggLSB0aGlzLl9oaXN0b3J5SXRl
cmF0b3IgLSAxKTsKLSAgICAgICAgaWYgKCF0aGlzLl9oaXN0b3J5Lmxlbmd0aCB8fCB0aGlzLl9o
aXN0b3J5W3RoaXMuX2hpc3RvcnkubGVuZ3RoIC0gMV0gIT09IHBhbmVsTmFtZSkKLSAgICAgICAg
ICAgIHRoaXMuX2hpc3RvcnkucHVzaChwYW5lbE5hbWUpOwotICAgICAgICB0aGlzLl9oaXN0b3J5
SXRlcmF0b3IgPSB0aGlzLl9oaXN0b3J5Lmxlbmd0aCAtIDE7Ci0gICAgfSwKLQotICAgIHBhbmVs
c0VsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wYW5lbHNF
bGVtZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnQ/fSBlbGVt
ZW50Ci0gICAgICovCi0gICAgc2V0Rm9vdGVyRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkKLSAg
ICB7Ci0gICAgICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLl9mb290ZXJFbGVt
ZW50Q29udGFpbmVyLnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICAgICAgdGhp
cy5fZm9vdGVyRWxlbWVudENvbnRhaW5lci5hcHBlbmRDaGlsZChlbGVtZW50KTsKLSAgICAgICAg
ICAgIHRoaXMuX3BhbmVsc0VsZW1lbnQuc3R5bGUuYm90dG9tID0gdGhpcy5fZm9vdGVyRWxlbWVu
dENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAicHgiOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgdGhpcy5fZm9vdGVyRWxlbWVudENvbnRhaW5lci5hZGRTdHlsZUNsYXNzKCJoaWRkZW4i
KTsKLSAgICAgICAgICAgIHRoaXMuX2Zvb3RlckVsZW1lbnRDb250YWluZXIucmVtb3ZlQ2hpbGRy
ZW4oKTsKLSAgICAgICAgICAgIHRoaXMuX3BhbmVsc0VsZW1lbnQuc3R5bGUuYm90dG9tID0gMDsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLmRvUmVzaXplKCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBhbmVsfSBwYW5lbAotICAgICAqLwotICAgIHNo
b3dQYW5lbEZvckFuY2hvck5hdmlnYXRpb246IGZ1bmN0aW9uKHBhbmVsKQotICAgIHsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIuZGlzYWJsZVNlYXJjaFVudGlsRXhwbGlj
aXRBY3Rpb24oKTsKLSAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFuZWwocGFuZWwpOwotICAgIH0s
Ci0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioK
LSAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSW5zcGVjdG9yVmlld30KLSAqLwotV2ViSW5zcGVjdG9y
Lmluc3BlY3RvclZpZXcgPSBudWxsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Jc29sYXRlZEZpbGVTeXN0ZW0uanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0lzb2xhdGVkRmlsZVN5c3RlbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWE2MzhhYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0lzb2xhdGVkRmlsZVN5c3RlbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDMw
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLklz
b2xhdGVkRmlsZVN5c3RlbU1hbmFnZXJ9IG1hbmFnZXIKLSAqIEBwYXJhbSB7c3RyaW5nfSBwYXRo
Ci0gKi8KLVdlYkluc3BlY3Rvci5Jc29sYXRlZEZpbGVTeXN0ZW0gPSBmdW5jdGlvbihtYW5hZ2Vy
LCBwYXRoLCBuYW1lLCByb290VVJMKQotewotICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOwot
ICAgIHRoaXMuX3BhdGggPSBwYXRoOwotICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgIHRoaXMu
X3Jvb3RVUkwgPSByb290VVJMOwotfQotCi1XZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVt
LmVycm9yTWVzc2FnZSA9IGZ1bmN0aW9uKGVycm9yKQotewotICAgIHZhciBtc2c7Ci0gICAgc3dp
dGNoIChlcnJvci5jb2RlKSB7Ci0gICAgY2FzZSBGaWxlRXJyb3IuUVVPVEFfRVhDRUVERURfRVJS
OgotICAgICAgICBtc2cgPSAiUVVPVEFfRVhDRUVERURfRVJSIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGaWxlRXJyb3IuTk9UX0ZPVU5EX0VSUjoKLSAgICAgICAgbXNnID0gIk5PVF9GT1VO
RF9FUlIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbGVFcnJvci5TRUNVUklUWV9FUlI6
Ci0gICAgICAgIG1zZyA9ICJTRUNVUklUWV9FUlIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZpbGVFcnJvci5JTlZBTElEX01PRElGSUNBVElPTl9FUlI6Ci0gICAgICAgIG1zZyA9ICJJTlZB
TElEX01PRElGSUNBVElPTl9FUlIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbGVFcnJv
ci5JTlZBTElEX1NUQVRFX0VSUjoKLSAgICAgICAgbXNnID0gIklOVkFMSURfU1RBVEVfRVJSIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbXNnID0gIlVua25vd24gRXJy
b3IiOwotICAgICAgICBicmVhazsKLSAgICB9OwotCi0gICAgcmV0dXJuICJGaWxlIHN5c3RlbSBl
cnJvcjogIiArIG1zZzsKLX0KLQotV2ViSW5zcGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbS5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAg
IHBhdGg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wYXRoOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgbmFt
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICByb290VVJM
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcm9vdFVSTDsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihET01GaWxlU3lzdGVtKX0gY2Fs
bGJhY2sKLSAgICAgKi8KLSAgICBfcmVxdWVzdEZpbGVTeXN0ZW06IGZ1bmN0aW9uKGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5yZXF1ZXN0RE9NRmlsZVN5c3RlbSh0aGlz
Ll9wYXRoLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBwYXRoCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpfSBjYWxsYmFjawotICAg
ICAqLwotICAgIHJlcXVlc3RGaWxlc1JlY3Vyc2l2ZTogZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2sp
Ci0gICAgewotICAgICAgICB0aGlzLl9yZXF1ZXN0RmlsZVN5c3RlbShmaWxlU3lzdGVtTG9hZGVk
LmJpbmQodGhpcykpOwotCi0gICAgICAgIHZhciBkb21GaWxlU3lzdGVtOwotICAgICAgICAvKioK
LSAgICAgICAgICogQHBhcmFtIHtET01GaWxlU3lzdGVtfSBmcwotICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gZmlsZVN5c3RlbUxvYWRlZChmcykKLSAgICAgICAgewotICAgICAgICAgICAg
ZG9tRmlsZVN5c3RlbSA9IGZzOwotICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEVudHJpZXMoZG9t
RmlsZVN5c3RlbSwgcGF0aCwgaW5uZXJDYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxGaWxlRW50cnk+fSBlbnRy
aWVzCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBpbm5lckNhbGxiYWNrKGVudHJpZXMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07Ci0gICAg
ICAgICAgICAgICAgaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSkKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2soZW50cnkuZnVsbFBhdGgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEVudHJpZXMoZG9tRmlsZVN5c3RlbSwgZW50cnkuZnVs
bFBhdGgsIGlubmVyQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGgKLSAgICAg
KiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmcpfSBjYWxsYmFjawotICAgICAqLwotICAgIHJlcXVl
c3RGaWxlQ29udGVudDogZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB0
aGlzLl9yZXF1ZXN0RmlsZVN5c3RlbShmaWxlU3lzdGVtTG9hZGVkLmJpbmQodGhpcykpOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge0RPTUZpbGVTeXN0ZW19IGRvbUZpbGVTeXN0
ZW0KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGZpbGVTeXN0ZW1Mb2FkZWQoZG9tRmls
ZVN5c3RlbSkKLSAgICAgICAgewotICAgICAgICAgICAgZG9tRmlsZVN5c3RlbS5yb290LmdldEZp
bGUocGF0aCwgbnVsbCwgZmlsZUVudHJ5TG9hZGVkLCBlcnJvckhhbmRsZXIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7RmlsZUVudHJ5fSBlbnRyeQotICAg
ICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZmlsZUVudHJ5TG9hZGVkKGVudHJ5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBlbnRyeS5maWxlKGZpbGVMb2FkZWQsIGVycm9ySGFuZGxlcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHshQmxvYn0gZmlsZQot
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZmlsZUxvYWRlZChmaWxlKQotICAgICAgICB7
Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKLSAgICAgICAgICAg
IHJlYWRlci5vbmxvYWRlbmQgPSByZWFkZXJMb2FkRW5kOwotICAgICAgICAgICAgcmVhZGVyLnJl
YWRBc1RleHQoZmlsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHRo
aXMge0ZpbGVSZWFkZXJ9Ci0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiByZWFkZXJMb2Fk
RW5kKCkKLSAgICAgICAgewotICAgICAgICAgICAgY2FsbGJhY2soLyoqIEB0eXBlIHtzdHJpbmd9
ICovICh0aGlzLnJlc3VsdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZXJyb3JI
YW5kbGVyKGVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0g
RmlsZUVycm9yLk5PVF9GT1VORF9FUlIpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxs
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHZhciBlcnJvck1lc3NhZ2UgPSBXZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtLmVycm9y
TWVzc2FnZShlcnJvcik7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSAr
ICIgd2hlbiBnZXR0aW5nIGNvbnRlbnQgZm9yIGZpbGUgJyIgKyAodGhpcy5fcGF0aCArICIvIiAr
IHBhdGgpICsgIiciKTsKLSAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGNvbnRlbnQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNr
Ci0gICAgICovCi0gICAgc2V0RmlsZUNvbnRlbnQ6IGZ1bmN0aW9uKHBhdGgsIGNvbnRlbnQsIGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVxdWVzdEZpbGVTeXN0ZW0oZmlsZVN5c3Rl
bUxvYWRlZCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7RE9NRmlsZVN5c3Rl
bX0gZG9tRmlsZVN5c3RlbQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZmlsZVN5c3Rl
bUxvYWRlZChkb21GaWxlU3lzdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBkb21GaWxlU3lz
dGVtLnJvb3QuZ2V0RmlsZShwYXRoLCB7IGNyZWF0ZTogdHJ1ZSB9LCBmaWxlRW50cnlMb2FkZWQs
IGVycm9ySGFuZGxlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBh
cmFtIHtGaWxlRW50cnl9IGVudHJ5Ci0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBmaWxl
RW50cnlMb2FkZWQoZW50cnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVudHJ5LmNyZWF0ZVdy
aXRlcihmaWxlV3JpdGVyQ3JlYXRlZCwgZXJyb3JIYW5kbGVyKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge0ZpbGVXcml0ZXJ9IGZpbGVXcml0ZXIKLSAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGZpbGVXcml0ZXJDcmVhdGVkKGZpbGVXcml0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZpbGVXcml0ZXIub25lcnJvciA9IGVycm9ySGFuZGxlcjsK
LSAgICAgICAgICAgIGZpbGVXcml0ZXIub253cml0ZWVuZCA9IGZpbGVUcnVuY2F0ZWQ7Ci0gICAg
ICAgICAgICBmaWxlV3JpdGVyLnRydW5jYXRlKDApOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBm
aWxlVHJ1bmNhdGVkKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmaWxlV3JpdGVy
Lm9ud3JpdGVlbmQgPSB3cml0ZXJFbmQ7Ci0gICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcg
QmxvYihbY29udGVudF0sIHsgdHlwZTogInRleHQvcGxhaW4iIH0pOwotICAgICAgICAgICAgICAg
IGZpbGVXcml0ZXIud3JpdGUoYmxvYik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiB3cml0ZXJFbmQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsYmFj
aygpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKGVycm9yKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gV2ViSW5zcGVjdG9yLklz
b2xhdGVkRmlsZVN5c3RlbS5lcnJvck1lc3NhZ2UoZXJyb3IpOwotICAgICAgICAgICAgY29uc29s
ZS5lcnJvcihlcnJvck1lc3NhZ2UgKyAiIHdoZW4gc2V0dGluZyBjb250ZW50IGZvciBmaWxlICci
ICsgKHRoaXMuX3BhdGggKyAiLyIgKyBwYXRoKSArICInIik7Ci0gICAgICAgICAgICBjYWxsYmFj
aygpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RGlyZWN0
b3J5RW50cnl9IGRpckVudHJ5Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48RmlsZUVu
dHJ5Pil9IGNhbGxiYWNrCi0gICAgICovCi0gICAgX3JlYWREaXJlY3Rvcnk6IGZ1bmN0aW9uKGRp
ckVudHJ5LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBkaXJSZWFkZXIgPSBkaXJFbnRy
eS5jcmVhdGVSZWFkZXIoKTsKLSAgICAgICAgdmFyIGVudHJpZXMgPSBbXTsKLQotICAgICAgICBm
dW5jdGlvbiBpbm5lckNhbGxiYWNrKHJlc3VsdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2soZW50cmllcy5zb3J0
KCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJp
ZXMuY29uY2F0KHRvQXJyYXkocmVzdWx0cykpOwotICAgICAgICAgICAgICAgIGRpclJlYWRlci5y
ZWFkRW50cmllcyhpbm5lckNhbGxiYWNrLCBlcnJvckhhbmRsZXIpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gdG9BcnJheShsaXN0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobGlzdCB8fCBbXSwg
MCk7Ci0gICAgICAgIH0gICAgCi0KLSAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGlubmVy
Q2FsbGJhY2ssIGVycm9ySGFuZGxlcik7Ci0KLSAgICAgICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVy
KGVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gV2ViSW5z
cGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbS5lcnJvck1lc3NhZ2UoZXJyb3IpOwotICAgICAgICAg
ICAgY29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UgKyAiIHdoZW4gcmVhZGluZyBkaXJlY3Rvcnkg
JyIgKyBkaXJFbnRyeS5mdWxsUGF0aCArICInIik7Ci0gICAgICAgICAgICBjYWxsYmFjayhbXSk7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtET01GaWxlU3lz
dGVtfSBkb21GaWxlU3lzdGVtCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGgKLSAgICAgKiBA
cGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxGaWxlRW50cnk+KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAg
ICBfcmVxdWVzdEVudHJpZXM6IGZ1bmN0aW9uKGRvbUZpbGVTeXN0ZW0sIHBhdGgsIGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgZG9tRmlsZVN5c3RlbS5yb290LmdldERpcmVjdG9yeShwYXRoLCBu
dWxsLCBpbm5lckNhbGxiYWNrLmJpbmQodGhpcyksIGVycm9ySGFuZGxlcik7Ci0KLSAgICAgICAg
ZnVuY3Rpb24gaW5uZXJDYWxsYmFjayhkaXJFbnRyeSkKLSAgICAgICAgewotICAgICAgICAgICAg
dGhpcy5fcmVhZERpcmVjdG9yeShkaXJFbnRyeSwgY2FsbGJhY2spCi0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBlcnJvckhhbmRsZXIoZXJyb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZhciBlcnJvck1lc3NhZ2UgPSBXZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtLmVycm9y
TWVzc2FnZShlcnJvcik7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSAr
ICIgd2hlbiByZXF1ZXN0aW5nIGVudHJ5ICciICsgcGF0aCArICInIik7Ci0gICAgICAgICAgICBj
YWxsYmFjayhbXSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lzb2xhdGVkRmlsZVN5c3RlbU1hbmFn
ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOWYyOTMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Jc29sYXRlZEZpbGVTeXN0ZW1N
YW5hZ2VyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rv
ci5Jc29sYXRlZEZpbGVTeXN0ZW1NYW5hZ2VyID0gZnVuY3Rpb24oKQotewotICAgIC8qKiBAdHlw
ZSB7IU9iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtPn0gKi8K
LSAgICB0aGlzLl9maWxlU3lzdGVtcyA9IHt9OwotICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJp
bmcsIEFycmF5LjxmdW5jdGlvbihET01GaWxlU3lzdGVtKT4+fSAqLwotICAgIHRoaXMuX3BlbmRp
bmdGaWxlU3lzdGVtUmVxdWVzdHMgPSB7fTsKLSAgICB0aGlzLl9maWxlU3lzdGVtTWFwcGluZyA9
IG5ldyBXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1hcHBpbmdJbXBsKCk7Ci0KLSAgICBpZiAodGhp
cy5zdXBwb3J0c0ZpbGVTeXN0ZW1zKCkpCi0gICAgICAgIHRoaXMuX3JlcXVlc3RGaWxlU3lzdGVt
cygpOwotfQotCi0vKiogQHR5cGVkZWYge3tmaWxlU3lzdGVtTmFtZTogc3RyaW5nLCByb290VVJM
OiBzdHJpbmcsIGZpbGVTeXN0ZW1QYXRoOiBzdHJpbmd9fSAqLwotV2ViSW5zcGVjdG9yLklzb2xh
dGVkRmlsZVN5c3RlbU1hbmFnZXIuRmlsZVN5c3RlbTsKLQotV2ViSW5zcGVjdG9yLklzb2xhdGVk
RmlsZVN5c3RlbU1hbmFnZXIuRXZlbnRzID0gewotICAgIEZpbGVTeXN0ZW1BZGRlZDogIkZpbGVT
eXN0ZW1BZGRlZCIsCi0gICAgRmlsZVN5c3RlbVJlbW92ZWQ6ICJGaWxlU3lzdGVtUmVtb3ZlZCIK
LX0KLQotV2ViSW5zcGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIucHJvdG90eXBlID0g
ewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtTWFwcGlu
Z30KLSAgICAgKi8KLSAgICBtYXBwaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fZmlsZVN5c3RlbU1hcHBpbmc7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgc3VwcG9ydHNGaWxlU3lzdGVtczogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvckZyb250ZW5kSG9zdC5zdXBwb3J0
c0ZpbGVTeXN0ZW1zKCk7Ci0gICAgfSwKLQotICAgIF9yZXF1ZXN0RmlsZVN5c3RlbXM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9sb2FkZWQpOwotICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QucmVxdWVzdEZpbGVTeXN0ZW1zKCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyl9IGNhbGxiYWNrCi0g
ICAgICovCi0gICAgYWRkRmlsZVN5c3RlbTogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAg
ICAgICB0aGlzLl9zZWxlY3RGaWxlU3lzdGVtUGF0aENhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAg
ICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5hZGRGaWxlU3lzdGVtKCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBy
ZW1vdmVGaWxlU3lzdGVtOiBmdW5jdGlvbihmaWxlU3lzdGVtUGF0aCwgY2FsbGJhY2spCi0gICAg
ewotICAgICAgICB0aGlzLl9yZW1vdmVGaWxlU3lzdGVtQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnJlbW92ZUZpbGVTeXN0ZW0oZmlsZVN5c3RlbVBh
dGgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNwZWN0
b3IuSXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdlci5GaWxlU3lzdGVtPn0gZmlsZVN5c3RlbXMKLSAg
ICAgKi8KLSAgICBfZmlsZVN5c3RlbXNMb2FkZWQ6IGZ1bmN0aW9uKGZpbGVTeXN0ZW1zKQotICAg
IHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlU3lzdGVtcy5sZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIHRoaXMuX2lubmVyQWRkRmlsZVN5c3RlbShmaWxlU3lzdGVtc1tpXSk7Ci0g
ICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3Byb2Nlc3NQZW5kaW5n
RmlsZVN5c3RlbVJlcXVlc3RzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIuRmlsZVN5c3RlbX0gZmlsZVN5
c3RlbQotICAgICAqLwotICAgIF9pbm5lckFkZEZpbGVTeXN0ZW06IGZ1bmN0aW9uKGZpbGVTeXN0
ZW0pCi0gICAgewotICAgICAgICB2YXIgZmlsZVN5c3RlbVBhdGggPSBmaWxlU3lzdGVtLmZpbGVT
eXN0ZW1QYXRoOwotICAgICAgICB0aGlzLl9maWxlU3lzdGVtTWFwcGluZy5hZGRGaWxlU3lzdGVt
TWFwcGluZyhmaWxlU3lzdGVtUGF0aCk7Ci0gICAgICAgIHZhciBpc29sYXRlZEZpbGVTeXN0ZW0g
PSBuZXcgV2ViSW5zcGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbSh0aGlzLCBmaWxlU3lzdGVtUGF0
aCwgZmlsZVN5c3RlbS5maWxlU3lzdGVtTmFtZSwgZmlsZVN5c3RlbS5yb290VVJMKTsKLSAgICAg
ICAgdGhpcy5fZmlsZVN5c3RlbXNbZmlsZVN5c3RlbVBhdGhdID0gaXNvbGF0ZWRGaWxlU3lzdGVt
OwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuSXNv
bGF0ZWRGaWxlU3lzdGVtTWFuYWdlci5FdmVudHMuRmlsZVN5c3RlbUFkZGVkLCBpc29sYXRlZEZp
bGVTeXN0ZW0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48c3Ry
aW5nPn0KLSAgICAgKi8KLSAgICBfZmlsZVN5c3RlbVBhdGhzOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZmlsZVN5c3RlbXMpOwotICAgIH0sCi0K
LSAgICBfcHJvY2Vzc1BlbmRpbmdGaWxlU3lzdGVtUmVxdWVzdHM6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGZvciAodmFyIGZpbGVTeXN0ZW1QYXRoIGluIHRoaXMuX3BlbmRpbmdGaWxlU3lz
dGVtUmVxdWVzdHMpIHsKLSAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLl9wZW5kaW5n
RmlsZVN5c3RlbVJlcXVlc3RzW2ZpbGVTeXN0ZW1QYXRoXTsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGNhbGxi
YWNrc1tpXSh0aGlzLl9pc29sYXRlZEZpbGVTeXN0ZW0oZmlsZVN5c3RlbVBhdGgpKTsKLSAgICAg
ICAgfQotICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ0ZpbGVTeXN0ZW1SZXF1ZXN0czsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTWVzc2FnZQotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIuRmlsZVN5
c3RlbX0gZmlsZVN5c3RlbQotICAgICAqLwotICAgIF9maWxlU3lzdGVtQWRkZWQ6IGZ1bmN0aW9u
KGVycm9yTWVzc2FnZSwgZmlsZVN5c3RlbSkKLSAgICB7Ci0gICAgICAgIHZhciBmaWxlU3lzdGVt
UGF0aDsKLSAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5zaG93RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSkKLSAgICAgICAgZWxzZSBpZiAoZmlsZVN5
c3RlbSkgewotICAgICAgICAgICAgdGhpcy5faW5uZXJBZGRGaWxlU3lzdGVtKGZpbGVTeXN0ZW0p
OwotICAgICAgICAgICAgZmlsZVN5c3RlbVBhdGggPSBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1QYXRo
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX3NlbGVjdEZpbGVTeXN0ZW1QYXRoQ2Fs
bGJhY2spIHsKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdEZpbGVTeXN0ZW1QYXRoQ2FsbGJhY2so
ZmlsZVN5c3RlbVBhdGgpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdEZpbGVTeXN0
ZW1QYXRoQ2FsbGJhY2s7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGZpbGVTeXN0ZW1QYXRoCi0gICAgICovCi0gICAgX2ZpbGVTeXN0ZW1SZW1v
dmVkOiBmdW5jdGlvbihmaWxlU3lzdGVtUGF0aCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2ZpbGVT
eXN0ZW1NYXBwaW5nLnJlbW92ZUZpbGVTeXN0ZW1NYXBwaW5nKGZpbGVTeXN0ZW1QYXRoKTsKLSAg
ICAgICAgdmFyIGlzb2xhdGVkRmlsZVN5c3RlbSA9IHRoaXMuX2ZpbGVTeXN0ZW1zW2ZpbGVTeXN0
ZW1QYXRoXTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2ZpbGVTeXN0ZW1zW2ZpbGVTeXN0ZW1QYXRo
XTsKLSAgICAgICAgaWYgKHRoaXMuX3JlbW92ZUZpbGVTeXN0ZW1DYWxsYmFjaykgewotICAgICAg
ICAgICAgdGhpcy5fcmVtb3ZlRmlsZVN5c3RlbUNhbGxiYWNrKGZpbGVTeXN0ZW1QYXRoKTsKLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1vdmVGaWxlU3lzdGVtQ2FsbGJhY2s7Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLklz
b2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIuRXZlbnRzLkZpbGVTeXN0ZW1SZW1vdmVkLCBpc29sYXRl
ZEZpbGVTeXN0ZW0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
ZmlsZVN5c3RlbVBhdGgKLSAgICAgKiBAcmV0dXJuIHtET01GaWxlU3lzdGVtfQotICAgICAqLwot
ICAgIF9pc29sYXRlZEZpbGVTeXN0ZW06IGZ1bmN0aW9uKGZpbGVTeXN0ZW1QYXRoKQotICAgIHsK
LSAgICAgICAgdmFyIGZpbGVTeXN0ZW0gPSB0aGlzLl9maWxlU3lzdGVtc1tmaWxlU3lzdGVtUGF0
aF07Ci0gICAgICAgIGlmICghZmlsZVN5c3RlbSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgICBpZiAoIUluc3BlY3RvckZyb250ZW5kSG9zdC5pc29sYXRlZEZpbGVTeXN0ZW0pCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvckZyb250ZW5k
SG9zdC5pc29sYXRlZEZpbGVTeXN0ZW0oZmlsZVN5c3RlbS5uYW1lKCksIGZpbGVTeXN0ZW0ucm9v
dFVSTCgpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVT
eXN0ZW1QYXRoCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihET01GaWxlU3lzdGVtKX0gY2FsbGJh
Y2sKLSAgICAgKi8KLSAgICByZXF1ZXN0RE9NRmlsZVN5c3RlbTogZnVuY3Rpb24oZmlsZVN5c3Rl
bVBhdGgsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWQpIHsKLSAg
ICAgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ0ZpbGVTeXN0ZW1SZXF1ZXN0c1tmaWxlU3lzdGVt
UGF0aF0pCi0gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0ZpbGVTeXN0ZW1SZXF1ZXN0c1tm
aWxlU3lzdGVtUGF0aF0gPSB0aGlzLl9wZW5kaW5nRmlsZVN5c3RlbVJlcXVlc3RzW2ZpbGVTeXN0
ZW1QYXRoXSB8fCBbXTsKLSAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdGaWxlU3lzdGVtUmVxdWVz
dHNbZmlsZVN5c3RlbVBhdGhdLnB1c2goY2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKHRoaXMuX2lzb2xhdGVkRmlsZVN5c3RlbShmaWxl
U3lzdGVtUGF0aCkpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmpl
Y3QucHJvdG90eXBlCi19Ci0KLS8qKgotICogQHR5cGUgez9XZWJJbnNwZWN0b3IuSXNvbGF0ZWRG
aWxlU3lzdGVtTWFuYWdlcn0KLSAqLwotV2ViSW5zcGVjdG9yLmlzb2xhdGVkRmlsZVN5c3RlbU1h
bmFnZXIgPSBudWxsOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdlcn0gSXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdl
cgotICovCi1XZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtRGlzcGF0Y2hlciA9IGZ1bmN0
aW9uKElzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIpCi17Ci0gICAgdGhpcy5fSXNvbGF0ZWRGaWxl
U3lzdGVtTWFuYWdlciA9IElzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXI7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5Jc29sYXRlZEZpbGVTeXN0ZW1EaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtTWFu
YWdlci5GaWxlU3lzdGVtPn0gZmlsZVN5c3RlbXMKLSAgICAgKi8KLSAgICBmaWxlU3lzdGVtc0xv
YWRlZDogZnVuY3Rpb24oZmlsZVN5c3RlbXMpCi0gICAgewotICAgICAgICB0aGlzLl9Jc29sYXRl
ZEZpbGVTeXN0ZW1NYW5hZ2VyLl9maWxlU3lzdGVtc0xvYWRlZChmaWxlU3lzdGVtcyk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlU3lzdGVtUGF0aAotICAg
ICAqLwotICAgIGZpbGVTeXN0ZW1SZW1vdmVkOiBmdW5jdGlvbihmaWxlU3lzdGVtUGF0aCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX0lzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIuX2ZpbGVTeXN0ZW1S
ZW1vdmVkKGZpbGVTeXN0ZW1QYXRoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IGVycm9yTWVzc2FnZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLklzb2xh
dGVkRmlsZVN5c3RlbU1hbmFnZXIuRmlsZVN5c3RlbX0gZmlsZVN5c3RlbQotICAgICAqLwotICAg
IGZpbGVTeXN0ZW1BZGRlZDogZnVuY3Rpb24oZXJyb3JNZXNzYWdlLCBmaWxlU3lzdGVtKQotICAg
IHsKLSAgICAgICAgdGhpcy5fSXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdlci5fZmlsZVN5c3RlbUFk
ZGVkKGVycm9yTWVzc2FnZSwgZmlsZVN5c3RlbSk7Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBl
IHs/V2ViSW5zcGVjdG9yLklzb2xhdGVkRmlsZVN5c3RlbURpc3BhdGNoZXJ9Ci0gKi8KLVdlYklu
c3BlY3Rvci5pc29sYXRlZEZpbGVTeXN0ZW1EaXNwYXRjaGVyID0gbnVsbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSlNIZWFwU25hcHNob3QuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0pTSGVhcFNuYXBzaG90LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmMxNjdmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSlNIZWFwU25hcHNob3QuanMKKysrIC9kZXYvbnVs
bApAQCAtMSw1MzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdH0KLSAqLwotV2ViSW5zcGVjdG9yLkpTSGVhcFNuYXBzaG90
ID0gZnVuY3Rpb24ocHJvZmlsZSkKLXsKLSAgICB0aGlzLl9ub2RlRmxhZ3MgPSB7IC8vIGJpdCBm
bGFncwotICAgICAgICBjYW5CZVF1ZXJpZWQ6IDEsCi0gICAgICAgIGRldGFjaGVkRE9NVHJlZU5v
ZGU6IDIsCi0gICAgICAgIHBhZ2VPYmplY3Q6IDQsIC8vIFRoZSBpZGVhIGlzIHRvIHRyYWNrIHNl
cGFyYXRlbHkgdGhlIG9iamVjdHMgb3duZWQgYnkgdGhlIHBhZ2UgYW5kIHRoZSBvYmplY3RzIG93
bmVkIGJ5IGRlYnVnZ2VyLgotCi0gICAgICAgIHZpc2l0ZWRNYXJrZXJNYXNrOiAweDBmZmZmLCAv
LyBiaXRzOiAwLDExMTEsMTExMSwxMTExLDExMTEKLSAgICAgICAgdmlzaXRlZE1hcmtlcjogICAg
IDB4MTAwMDAgIC8vIGJpdHM6IDEsMDAwMCwwMDAwLDAwMDAsMDAwMAotICAgIH07Ci0gICAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5jYWxsKHRoaXMsIHByb2ZpbGUpOwotfQotCi1XZWJJbnNw
ZWN0b3IuSlNIZWFwU25hcHNob3QucHJvdG90eXBlID0gewotICAgIGNyZWF0ZU5vZGU6IGZ1bmN0
aW9uKG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkpT
SGVhcFNuYXBzaG90Tm9kZSh0aGlzLCBub2RlSW5kZXgpOwotICAgIH0sCi0KLSAgICBjcmVhdGVF
ZGdlOiBmdW5jdGlvbihlZGdlcywgZWRnZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuSlNIZWFwU25hcHNob3RFZGdlKHRoaXMsIGVkZ2VzLCBlZGdlSW5kZXgp
OwotICAgIH0sCi0KLSAgICBjcmVhdGVSZXRhaW5pbmdFZGdlOiBmdW5jdGlvbihyZXRhaW5lZE5v
ZGVJbmRleCwgcmV0YWluZXJJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLkpTSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlKHRoaXMsIHJldGFpbmVkTm9kZUluZGV4
LCByZXRhaW5lckluZGV4KTsKLSAgICB9LAotCi0gICAgY2xhc3NOb2Rlc0ZpbHRlcjogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZmlsdGVyKG5vZGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBub2RlLmlzVXNlck9iamVjdCgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmaWx0ZXI7Ci0gICAgfSwKLQotICAgIGNvbnRhaW5tZW50RWRnZXNGaWx0ZXI6IGZ1
bmN0aW9uKHNob3dIaWRkZW5EYXRhKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZmlsdGVyKGVk
Z2UpIHsKLSAgICAgICAgICAgIGlmIChlZGdlLmlzSW52aXNpYmxlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKHNob3dIaWRkZW5EYXRhKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuICFlZGdlLmlzSGlkZGVu
KCkgJiYgIWVkZ2Uubm9kZSgpLmlzSGlkZGVuKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZpbHRlcjsKLSAgICB9LAotCi0gICAgcmV0YWluaW5nRWRnZXNGaWx0ZXI6IGZ1bmN0aW9uKHNo
b3dIaWRkZW5EYXRhKQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRhaW5tZW50RWRnZXNGaWx0ZXIg
PSB0aGlzLmNvbnRhaW5tZW50RWRnZXNGaWx0ZXIoc2hvd0hpZGRlbkRhdGEpOwotICAgICAgICBm
dW5jdGlvbiBmaWx0ZXIoZWRnZSkgewotICAgICAgICAgICAgaWYgKCFjb250YWlubWVudEVkZ2Vz
RmlsdGVyKGVkZ2UpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiBlZGdlLm5vZGUoKS5pZCgpICE9PSAxICYmICFlZGdlLm5vZGUoKS5pc1N5bnRoZXRp
YygpICYmICFlZGdlLmlzV2VhaygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmaWx0ZXI7
Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTsKLSAgICAg
ICAgZGVsZXRlIHRoaXMuX2ZsYWdzOwotICAgIH0sCi0KLSAgICBfbWFya0ludmlzaWJsZUVkZ2Vz
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBNYXJrIGhpZGRlbiBlZGdlcyBvZiBnbG9i
YWwgb2JqZWN0cyBhcyBpbnZpc2libGUuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVt
cG9yYXJ5IG1lYXN1cmUuIE5vcm1hbGx5LCB3ZSBzaG91bGQKLSAgICAgICAgLy8gcmVhbGx5IGhp
ZGUgYWxsIGhpZGRlbiBub2Rlcy4KLSAgICAgICAgZm9yICh2YXIgaXRlciA9IHRoaXMucm9vdE5v
ZGUoKS5lZGdlcygpOyBpdGVyLmhhc05leHQoKTsgaXRlci5uZXh0KCkpIHsKLSAgICAgICAgICAg
IHZhciBlZGdlID0gaXRlci5lZGdlOwotICAgICAgICAgICAgaWYgKCFlZGdlLmlzU2hvcnRjdXQo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZhciBub2RlID0gZWRn
ZS5ub2RlKCk7Ci0gICAgICAgICAgICB2YXIgcHJvcE5hbWVzID0ge307Ci0gICAgICAgICAgICBm
b3IgKHZhciBpbm5lckl0ZXIgPSBub2RlLmVkZ2VzKCk7IGlubmVySXRlci5oYXNOZXh0KCk7IGlu
bmVySXRlci5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsT2JqRWRnZSA9IGlu
bmVySXRlci5lZGdlOwotICAgICAgICAgICAgICAgIGlmIChnbG9iYWxPYmpFZGdlLmlzU2hvcnRj
dXQoKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWVzW2dsb2JhbE9iakVkZ2UuX25hbWVP
ckluZGV4KCldID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW5uZXJJ
dGVyLnJld2luZCgpOyBpbm5lckl0ZXIuaGFzTmV4dCgpOyBpbm5lckl0ZXIubmV4dCgpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGdsb2JhbE9iakVkZ2UgPSBpbm5lckl0ZXIuZWRnZTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWdsb2JhbE9iakVkZ2UuaXNTaG9ydGN1dCgpCi0gICAgICAgICAgICAg
ICAgICAgICYmIGdsb2JhbE9iakVkZ2Uubm9kZSgpLmlzSGlkZGVuKCkKLSAgICAgICAgICAgICAg
ICAgICAgJiYgZ2xvYmFsT2JqRWRnZS5faGFzU3RyaW5nTmFtZSgpCi0gICAgICAgICAgICAgICAg
ICAgICYmIChnbG9iYWxPYmpFZGdlLl9uYW1lT3JJbmRleCgpIGluIHByb3BOYW1lcykpCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZ2xvYmFsT2JqRWRnZS5fZWRn
ZXMuX3N0YXJ0ICsgZ2xvYmFsT2JqRWRnZS5lZGdlSW5kZXggKyB0aGlzLl9lZGdlVHlwZU9mZnNl
dF0gPSB0aGlzLl9lZGdlSW52aXNpYmxlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICBfY2FsY3VsYXRlRmxhZ3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2ZsYWdzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMubm9kZUNvdW50KTsKLSAgICAgICAg
dGhpcy5fbWFya0RldGFjaGVkRE9NVHJlZU5vZGVzKCk7Ci0gICAgICAgIHRoaXMuX21hcmtRdWVy
aWFibGVIZWFwT2JqZWN0cygpOwotICAgICAgICB0aGlzLl9tYXJrUGFnZU93bmVkTm9kZXMoKTsK
LSAgICB9LAotCi0gICAgZGlzdGFuY2VGb3JVc2VyUm9vdDogZnVuY3Rpb24obm9kZSkKLSAgICB7
Ci0gICAgICAgIGlmIChub2RlLmlzV2luZG93KCkpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAg
ICAgICAgaWYgKG5vZGUuaXNEb2N1bWVudERPTVRyZWVzUm9vdCgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9LAotCi0gICAgdXNlck9iamVjdHNNYXBB
bmRGbGFnOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
bWFwOiB0aGlzLl9mbGFncywKLSAgICAgICAgICAgIGZsYWc6IHRoaXMuX25vZGVGbGFncy5wYWdl
T2JqZWN0Ci0gICAgICAgIH07Ci0gICAgfSwKLQotICAgIF9mbGFnc09mTm9kZTogZnVuY3Rpb24o
bm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mbGFnc1tub2RlLm5vZGVJbmRleCAv
IHRoaXMuX25vZGVGaWVsZENvdW50XTsKLSAgICB9LAotCi0gICAgX21hcmtEZXRhY2hlZERPTVRy
ZWVOb2RlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGZsYWcgPSB0aGlzLl9ub2Rl
RmxhZ3MuZGV0YWNoZWRET01UcmVlTm9kZTsKLSAgICAgICAgdmFyIGRldGFjaGVkRE9NVHJlZXNS
b290OwotICAgICAgICBmb3IgKHZhciBpdGVyID0gdGhpcy5yb290Tm9kZSgpLmVkZ2VzKCk7IGl0
ZXIuaGFzTmV4dCgpOyBpdGVyLm5leHQoKSkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSBpdGVy
LmVkZ2Uubm9kZSgpOwotICAgICAgICAgICAgaWYgKG5vZGUubmFtZSgpID09PSAiKERldGFjaGVk
IERPTSB0cmVlcykiKSB7Ci0gICAgICAgICAgICAgICAgZGV0YWNoZWRET01UcmVlc1Jvb3QgPSBu
b2RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFkZXRhY2hlZERPTVRyZWVzUm9vdCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgZGV0YWNoZWRET01UcmVlUkUgPSAvXkRldGFjaGVkIERPTSB0cmVlLzsK
LSAgICAgICAgZm9yICh2YXIgaXRlciA9IGRldGFjaGVkRE9NVHJlZXNSb290LmVkZ2VzKCk7IGl0
ZXIuaGFzTmV4dCgpOyBpdGVyLm5leHQoKSkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSBpdGVy
LmVkZ2Uubm9kZSgpOwotICAgICAgICAgICAgaWYgKGRldGFjaGVkRE9NVHJlZVJFLnRlc3Qobm9k
ZS5jbGFzc05hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBlZGdlc0l0ZXIgPSBu
b2RlLmVkZ2VzKCk7IGVkZ2VzSXRlci5oYXNOZXh0KCk7IGVkZ2VzSXRlci5uZXh0KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2ZsYWdzW2VkZ2VzSXRlci5lZGdlLm5vZGUoKS5ub2RlSW5k
ZXggLyB0aGlzLl9ub2RlRmllbGRDb3VudF0gfD0gZmxhZzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICBfbWFya1F1ZXJpYWJsZUhlYXBPYmplY3RzOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICAvLyBBbGxvdyBydW50aW1lIHByb3BlcnRpZXMgcXVlcnkgZm9yIG9i
amVjdHMgYWNjZXNzaWJsZSBmcm9tIFdpbmRvdyBvYmplY3RzCi0gICAgICAgIC8vIHZpYSByZWd1
bGFyIHByb3BlcnRpZXMsIGFuZCBmb3IgRE9NIHdyYXBwZXJzLiBUcnlpbmcgdG8gYWNjZXNzIHJh
bmRvbSBvYmplY3RzCi0gICAgICAgIC8vIGNhbiBjYXVzZSBhIGNyYXNoIGR1ZSB0byBpbnNvbnNp
c3RlbnQgc3RhdGUgb2YgaW50ZXJuYWwgcHJvcGVydGllcyBvZiB3cmFwcGVycy4KLSAgICAgICAg
dmFyIGZsYWcgPSB0aGlzLl9ub2RlRmxhZ3MuY2FuQmVRdWVyaWVkOwotICAgICAgICB2YXIgaGlk
ZGVuRWRnZVR5cGUgPSB0aGlzLl9lZGdlSGlkZGVuVHlwZTsKLSAgICAgICAgdmFyIGludGVybmFs
RWRnZVR5cGUgPSB0aGlzLl9lZGdlSW50ZXJuYWxUeXBlOwotICAgICAgICB2YXIgaW52aXNpYmxl
RWRnZVR5cGUgPSB0aGlzLl9lZGdlSW52aXNpYmxlVHlwZTsKLSAgICAgICAgdmFyIHdlYWtFZGdl
VHlwZSA9IHRoaXMuX2VkZ2VXZWFrVHlwZTsKLSAgICAgICAgdmFyIGVkZ2VUb05vZGVPZmZzZXQg
PSB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0OwotICAgICAgICB2YXIgZWRnZVR5cGVPZmZzZXQgPSB0
aGlzLl9lZGdlVHlwZU9mZnNldDsKLSAgICAgICAgdmFyIGVkZ2VGaWVsZHNDb3VudCA9IHRoaXMu
X2VkZ2VGaWVsZHNDb3VudDsKLSAgICAgICAgdmFyIGNvbnRhaW5tZW50RWRnZXMgPSB0aGlzLl9j
b250YWlubWVudEVkZ2VzOwotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ub2RlczsKLSAgICAg
ICAgdmFyIG5vZGVDb3VudCA9IHRoaXMubm9kZUNvdW50OwotICAgICAgICB2YXIgbm9kZUZpZWxk
Q291bnQgPSB0aGlzLl9ub2RlRmllbGRDb3VudDsKLSAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4
ZXMgPSB0aGlzLl9maXJzdEVkZ2VJbmRleGVzOwotCi0gICAgICAgIHZhciBmbGFncyA9IHRoaXMu
X2ZsYWdzOwotICAgICAgICB2YXIgbGlzdCA9IFtdOwotCi0gICAgICAgIGZvciAodmFyIGl0ZXIg
PSB0aGlzLnJvb3ROb2RlKCkuZWRnZXMoKTsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7
Ci0gICAgICAgICAgICBpZiAoaXRlci5lZGdlLm5vZGUoKS5pc1dpbmRvdygpKQotICAgICAgICAg
ICAgICAgIGxpc3QucHVzaChpdGVyLmVkZ2Uubm9kZSgpLm5vZGVJbmRleCAvIG5vZGVGaWVsZENv
dW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChsaXN0Lmxlbmd0aCkgewotICAgICAg
ICAgICAgdmFyIG5vZGVPcmRpbmFsID0gbGlzdC5wb3AoKTsKLSAgICAgICAgICAgIGlmIChmbGFn
c1tub2RlT3JkaW5hbF0gJiBmbGFnKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgZmxhZ3Nbbm9kZU9yZGluYWxdIHw9IGZsYWc7Ci0gICAgICAgICAgICB2YXIgYmVnaW5F
ZGdlSW5kZXggPSBmaXJzdEVkZ2VJbmRleGVzW25vZGVPcmRpbmFsXTsKLSAgICAgICAgICAgIHZh
ciBlbmRFZGdlSW5kZXggPSBmaXJzdEVkZ2VJbmRleGVzW25vZGVPcmRpbmFsICsgMV07Ci0gICAg
ICAgICAgICBmb3IgKHZhciBlZGdlSW5kZXggPSBiZWdpbkVkZ2VJbmRleDsgZWRnZUluZGV4IDwg
ZW5kRWRnZUluZGV4OyBlZGdlSW5kZXggKz0gZWRnZUZpZWxkc0NvdW50KSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGNoaWxkTm9kZUluZGV4ID0gY29udGFpbm1lbnRFZGdlc1tlZGdlSW5kZXggKyBl
ZGdlVG9Ob2RlT2Zmc2V0XTsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlT3JkaW5hbCA9
IGNoaWxkTm9kZUluZGV4IC8gbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGZs
YWdzW2NoaWxkTm9kZU9yZGluYWxdICYgZmxhZykKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBjb250YWlubWVudEVkZ2VzW2VkZ2VJbmRl
eCArIGVkZ2VUeXBlT2Zmc2V0XTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gaGlkZGVu
RWRnZVR5cGUgfHwgdHlwZSA9PT0gaW52aXNpYmxlRWRnZVR5cGUgfHwgdHlwZSA9PT0gaW50ZXJu
YWxFZGdlVHlwZSB8fCB0eXBlID09PSB3ZWFrRWRnZVR5cGUpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxpc3QucHVzaChjaGlsZE5vZGVPcmRpbmFsKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfbWFya1BhZ2VPd25lZE5v
ZGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZWRnZVNob3J0Y3V0VHlwZSA9IHRo
aXMuX2VkZ2VTaG9ydGN1dFR5cGU7Ci0gICAgICAgIHZhciBlZGdlRWxlbWVudFR5cGUgPSB0aGlz
Ll9lZGdlRWxlbWVudFR5cGU7Ci0gICAgICAgIHZhciBlZGdlVG9Ob2RlT2Zmc2V0ID0gdGhpcy5f
ZWRnZVRvTm9kZU9mZnNldDsKLSAgICAgICAgdmFyIGVkZ2VUeXBlT2Zmc2V0ID0gdGhpcy5fZWRn
ZVR5cGVPZmZzZXQ7Ci0gICAgICAgIHZhciBlZGdlRmllbGRzQ291bnQgPSB0aGlzLl9lZGdlRmll
bGRzQ291bnQ7Ci0gICAgICAgIHZhciBlZGdlV2Vha1R5cGUgPSB0aGlzLl9lZGdlV2Vha1R5cGU7
Ci0gICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleGVzID0gdGhpcy5fZmlyc3RFZGdlSW5kZXhlczsK
LSAgICAgICAgdmFyIGNvbnRhaW5tZW50RWRnZXMgPSB0aGlzLl9jb250YWlubWVudEVkZ2VzOwot
ICAgICAgICB2YXIgY29udGFpbm1lbnRFZGdlc0xlbmd0aCA9IGNvbnRhaW5tZW50RWRnZXMubGVu
Z3RoOwotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ub2RlczsKLSAgICAgICAgdmFyIG5vZGVG
aWVsZENvdW50ID0gdGhpcy5fbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgIHZhciBub2Rlc0NvdW50
ID0gdGhpcy5ub2RlQ291bnQ7Ci0KLSAgICAgICAgdmFyIGZsYWdzID0gdGhpcy5fZmxhZ3M7Ci0g
ICAgICAgIHZhciBmbGFnID0gdGhpcy5fbm9kZUZsYWdzLnBhZ2VPYmplY3Q7Ci0gICAgICAgIHZh
ciB2aXNpdGVkTWFya2VyID0gdGhpcy5fbm9kZUZsYWdzLnZpc2l0ZWRNYXJrZXI7Ci0gICAgICAg
IHZhciB2aXNpdGVkTWFya2VyTWFzayA9IHRoaXMuX25vZGVGbGFncy52aXNpdGVkTWFya2VyTWFz
azsKLSAgICAgICAgdmFyIG1hcmtlckFuZEZsYWcgPSB2aXNpdGVkTWFya2VyIHwgZmxhZzsKLQot
ICAgICAgICB2YXIgbm9kZXNUb1Zpc2l0ID0gbmV3IFVpbnQzMkFycmF5KG5vZGVzQ291bnQpOwot
ICAgICAgICB2YXIgbm9kZXNUb1Zpc2l0TGVuZ3RoID0gMDsKLQotICAgICAgICB2YXIgcm9vdE5v
ZGVPcmRpbmFsID0gdGhpcy5fcm9vdE5vZGVJbmRleCAvIG5vZGVGaWVsZENvdW50OwotICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMucm9vdE5vZGUoKTsKLSAgICAgICAgZm9yICh2YXIgZWRnZUluZGV4
ID0gZmlyc3RFZGdlSW5kZXhlc1tyb290Tm9kZU9yZGluYWxdLCBlbmRFZGdlSW5kZXggPSBmaXJz
dEVkZ2VJbmRleGVzW3Jvb3ROb2RlT3JkaW5hbCArIDFdOwotICAgICAgICAgICAgIGVkZ2VJbmRl
eCA8IGVuZEVkZ2VJbmRleDsKLSAgICAgICAgICAgICBlZGdlSW5kZXggKz0gZWRnZUZpZWxkc0Nv
dW50KSB7Ci0gICAgICAgICAgICB2YXIgZWRnZVR5cGUgPSBjb250YWlubWVudEVkZ2VzW2VkZ2VJ
bmRleCArIGVkZ2VUeXBlT2Zmc2V0XTsKLSAgICAgICAgICAgIHZhciBub2RlSW5kZXggPSBjb250
YWlubWVudEVkZ2VzW2VkZ2VJbmRleCArIGVkZ2VUb05vZGVPZmZzZXRdOwotICAgICAgICAgICAg
aWYgKGVkZ2VUeXBlID09PSBlZGdlRWxlbWVudFR5cGUpIHsKLSAgICAgICAgICAgICAgICBub2Rl
Lm5vZGVJbmRleCA9IG5vZGVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaXNEb2N1
bWVudERPTVRyZWVzUm9vdCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZWRnZVR5cGUgIT09IGVkZ2VTaG9ydGN1dFR5cGUpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2YXIgbm9kZU9yZGluYWwgPSBub2RlSW5k
ZXggLyBub2RlRmllbGRDb3VudDsKLSAgICAgICAgICAgIG5vZGVzVG9WaXNpdFtub2Rlc1RvVmlz
aXRMZW5ndGgrK10gPSBub2RlT3JkaW5hbDsKLSAgICAgICAgICAgIGZsYWdzW25vZGVPcmRpbmFs
XSB8PSB2aXNpdGVkTWFya2VyOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKG5vZGVzVG9W
aXNpdExlbmd0aCkgewotICAgICAgICAgICAgdmFyIG5vZGVPcmRpbmFsID0gbm9kZXNUb1Zpc2l0
Wy0tbm9kZXNUb1Zpc2l0TGVuZ3RoXTsKLSAgICAgICAgICAgIGZsYWdzW25vZGVPcmRpbmFsXSB8
PSBmbGFnOwotICAgICAgICAgICAgZmxhZ3Nbbm9kZU9yZGluYWxdICY9IHZpc2l0ZWRNYXJrZXJN
YXNrOwotICAgICAgICAgICAgdmFyIGJlZ2luRWRnZUluZGV4ID0gZmlyc3RFZGdlSW5kZXhlc1tu
b2RlT3JkaW5hbF07Ci0gICAgICAgICAgICB2YXIgZW5kRWRnZUluZGV4ID0gZmlyc3RFZGdlSW5k
ZXhlc1tub2RlT3JkaW5hbCArIDFdOwotICAgICAgICAgICAgZm9yICh2YXIgZWRnZUluZGV4ID0g
YmVnaW5FZGdlSW5kZXg7IGVkZ2VJbmRleCA8IGVuZEVkZ2VJbmRleDsgZWRnZUluZGV4ICs9IGVk
Z2VGaWVsZHNDb3VudCkgewotICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVJbmRleCA9IGNv
bnRhaW5tZW50RWRnZXNbZWRnZUluZGV4ICsgZWRnZVRvTm9kZU9mZnNldF07Ci0gICAgICAgICAg
ICAgICAgdmFyIGNoaWxkTm9kZU9yZGluYWwgPSBjaGlsZE5vZGVJbmRleCAvIG5vZGVGaWVsZENv
dW50OwotICAgICAgICAgICAgICAgIGlmIChmbGFnc1tjaGlsZE5vZGVPcmRpbmFsXSAmIG1hcmtl
ckFuZEZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IHZhciB0eXBlID0gY29udGFpbm1lbnRFZGdlc1tlZGdlSW5kZXggKyBlZGdlVHlwZU9mZnNldF07
Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IGVkZ2VXZWFrVHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbm9kZXNUb1Zpc2l0W25vZGVzVG9W
aXNpdExlbmd0aCsrXSA9IGNoaWxkTm9kZU9yZGluYWw7Ci0gICAgICAgICAgICAgICAgZmxhZ3Nb
Y2hpbGROb2RlT3JkaW5hbF0gfD0gdmlzaXRlZE1hcmtlcjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3Qu
cHJvdG90eXBlCi19OwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSlNIZWFw
U25hcHNob3R9IHNuYXBzaG90Ci0gKiBAcGFyYW0ge251bWJlcj19IG5vZGVJbmRleAotICovCi1X
ZWJJbnNwZWN0b3IuSlNIZWFwU25hcHNob3ROb2RlID0gZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJ
bmRleCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5jYWxsKHRoaXMsIHNu
YXBzaG90LCBub2RlSW5kZXgpCi19Ci0KLVdlYkluc3BlY3Rvci5KU0hlYXBTbmFwc2hvdE5vZGUu
cHJvdG90eXBlID0gewotICAgIGNhbkJlUXVlcmllZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIGZsYWdzID0gdGhpcy5fc25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOwotICAgICAg
ICByZXR1cm4gISEoZmxhZ3MgJiB0aGlzLl9zbmFwc2hvdC5fbm9kZUZsYWdzLmNhbkJlUXVlcmll
ZCk7Ci0gICAgfSwKLQotICAgIGlzVXNlck9iamVjdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIGZsYWdzID0gdGhpcy5fc25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOwotICAgICAg
ICByZXR1cm4gISEoZmxhZ3MgJiB0aGlzLl9zbmFwc2hvdC5fbm9kZUZsYWdzLnBhZ2VPYmplY3Qp
OwotICAgIH0sCi0KLSAgICBjbGFzc05hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZh
ciB0eXBlID0gdGhpcy50eXBlKCk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBj
YXNlICJoaWRkZW4iOgotICAgICAgICAgICAgcmV0dXJuICIoc3lzdGVtKSI7Ci0gICAgICAgIGNh
c2UgIm9iamVjdCI6Ci0gICAgICAgIGNhc2UgIm5hdGl2ZSI6Ci0gICAgICAgICAgICByZXR1cm4g
dGhpcy5uYW1lKCk7Ci0gICAgICAgIGNhc2UgImNvZGUiOgotICAgICAgICAgICAgcmV0dXJuICIo
Y29tcGlsZWQgY29kZSkiOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuICIo
IiArIHR5cGUgKyAiKSI7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgY2xhc3NJbmRleDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNuYXBzaG90ID0gdGhpcy5fc25hcHNob3Q7Ci0g
ICAgICAgIHZhciBub2RlcyA9IHNuYXBzaG90Ll9ub2RlczsKLSAgICAgICAgdmFyIHR5cGUgPSBu
b2Rlc1t0aGlzLm5vZGVJbmRleCArIHNuYXBzaG90Ll9ub2RlVHlwZU9mZnNldF07OwotICAgICAg
ICBpZiAodHlwZSA9PT0gc25hcHNob3QuX25vZGVPYmplY3RUeXBlIHx8IHR5cGUgPT09IHNuYXBz
aG90Ll9ub2RlTmF0aXZlVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBub2Rlc1t0aGlzLm5vZGVJ
bmRleCArIHNuYXBzaG90Ll9ub2RlTmFtZU9mZnNldF07Ci0gICAgICAgIHJldHVybiAtMSAtIHR5
cGU7Ci0gICAgfSwKLQotICAgIGlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc25h
cHNob3QgPSB0aGlzLl9zbmFwc2hvdDsKLSAgICAgICAgcmV0dXJuIHNuYXBzaG90Ll9ub2Rlc1t0
aGlzLm5vZGVJbmRleCArIHNuYXBzaG90Ll9ub2RlSWRPZmZzZXRdOwotICAgIH0sCi0KLSAgICBp
c0hpZGRlbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9
PT0gdGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5UeXBlOwotICAgIH0sCi0KLSAgICBpc1N5bnRo
ZXRpYzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0g
dGhpcy5fc25hcHNob3QuX25vZGVTeW50aGV0aWNUeXBlOwotICAgIH0sCi0KLSAgICBpc1dpbmRv
dzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgY29uc3Qgd2luZG93UkUgPSAvXldpbmRvdy87
Ci0gICAgICAgIHJldHVybiB3aW5kb3dSRS50ZXN0KHRoaXMubmFtZSgpKTsKLSAgICB9LAotCi0g
ICAgaXNEb2N1bWVudERPTVRyZWVzUm9vdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuaXNTeW50aGV0aWMoKSAmJiB0aGlzLm5hbWUoKSA9PT0gIihEb2N1bWVudCBET00g
dHJlZXMpIjsKLSAgICB9LAotCi0gICAgc2VyaWFsaXplOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgcmVzdWx0ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBl
LnNlcmlhbGl6ZS5jYWxsKHRoaXMpOwotICAgICAgICB2YXIgZmxhZ3MgPSB0aGlzLl9zbmFwc2hv
dC5fZmxhZ3NPZk5vZGUodGhpcyk7Ci0gICAgICAgIGlmIChmbGFncyAmIHRoaXMuX3NuYXBzaG90
Ll9ub2RlRmxhZ3MuY2FuQmVRdWVyaWVkKQotICAgICAgICAgICAgcmVzdWx0LmNhbkJlUXVlcmll
ZCA9IHRydWU7Ci0gICAgICAgIGlmIChmbGFncyAmIHRoaXMuX3NuYXBzaG90Ll9ub2RlRmxhZ3Mu
ZGV0YWNoZWRET01UcmVlTm9kZSkKLSAgICAgICAgICAgIHJlc3VsdC5kZXRhY2hlZERPTVRyZWVO
b2RlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgX19wcm90
b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUKLX07Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2V9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5KU0hlYXBTbmFwc2hvdH0gc25hcHNob3QKLSAq
IEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGVkZ2VzCi0gKiBAcGFyYW0ge251bWJlcj19IGVkZ2VJ
bmRleAotICovCi1XZWJJbnNwZWN0b3IuSlNIZWFwU25hcHNob3RFZGdlID0gZnVuY3Rpb24oc25h
cHNob3QsIGVkZ2VzLCBlZGdlSW5kZXgpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEVkZ2UuY2FsbCh0aGlzLCBzbmFwc2hvdCwgZWRnZXMsIGVkZ2VJbmRleCk7Ci19Ci0KLVdlYklu
c3BlY3Rvci5KU0hlYXBTbmFwc2hvdEVkZ2UucHJvdG90eXBlID0gewotICAgIGNsb25lOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5KU0hlYXBTbmFw
c2hvdEVkZ2UodGhpcy5fc25hcHNob3QsIHRoaXMuX2VkZ2VzLCB0aGlzLmVkZ2VJbmRleCk7Ci0g
ICAgfSwKLQotICAgIGhhc1N0cmluZ05hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy5pc1Nob3J0Y3V0KCkpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzU3RyaW5n
TmFtZSgpOwotICAgICAgICByZXR1cm4gaXNOYU4ocGFyc2VJbnQodGhpcy5fbmFtZSgpLCAxMCkp
OwotICAgIH0sCi0KLSAgICBpc0VsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl90eXBlKCkgPT09IHRoaXMuX3NuYXBzaG90Ll9lZGdlRWxlbWVudFR5cGU7Ci0g
ICAgfSwKLQotICAgIGlzSGlkZGVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fdHlwZSgpID09PSB0aGlzLl9zbmFwc2hvdC5fZWRnZUhpZGRlblR5cGU7Ci0gICAgfSwK
LQotICAgIGlzV2VhazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3R5
cGUoKSA9PT0gdGhpcy5fc25hcHNob3QuX2VkZ2VXZWFrVHlwZTsKLSAgICB9LAotCi0gICAgaXNJ
bnRlcm5hbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9
PT0gdGhpcy5fc25hcHNob3QuX2VkZ2VJbnRlcm5hbFR5cGU7Ci0gICAgfSwKLQotICAgIGlzSW52
aXNpYmxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSgpID09
PSB0aGlzLl9zbmFwc2hvdC5fZWRnZUludmlzaWJsZVR5cGU7Ci0gICAgfSwKLQotICAgIGlzU2hv
cnRjdXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90eXBlKCkgPT09
IHRoaXMuX3NuYXBzaG90Ll9lZGdlU2hvcnRjdXRUeXBlOwotICAgIH0sCi0KLSAgICBuYW1lOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuaXNTaG9ydGN1dCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX25hbWUoKTsKLSAgICAgICAgdmFyIG51bU5hbWUgPSBwYXJzZUlu
dCh0aGlzLl9uYW1lKCksIDEwKTsKLSAgICAgICAgcmV0dXJuIGlzTmFOKG51bU5hbWUpID8gdGhp
cy5fbmFtZSgpIDogbnVtTmFtZTsKLSAgICB9LAotCi0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lKCk7Ci0gICAgICAgIHN3aXRjaCAo
dGhpcy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSAiY29udGV4dCI6IHJldHVybiAiLT4iICsgbmFt
ZTsKLSAgICAgICAgY2FzZSAiZWxlbWVudCI6IHJldHVybiAiWyIgKyBuYW1lICsgIl0iOwotICAg
ICAgICBjYXNlICJ3ZWFrIjogcmV0dXJuICJbWyIgKyBuYW1lICsgIl1dIjsKLSAgICAgICAgY2Fz
ZSAicHJvcGVydHkiOgotICAgICAgICAgICAgcmV0dXJuIG5hbWUuaW5kZXhPZigiICIpID09PSAt
MSA/ICIuIiArIG5hbWUgOiAiW1wiIiArIG5hbWUgKyAiXCJdIjsKLSAgICAgICAgY2FzZSAic2hv
cnRjdXQiOgotICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAic3RyaW5nIikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmFtZS5pbmRleE9mKCIgIikgPT09IC0xID8gIi4iICsgbmFtZSA6
ICJbXCIiICsgbmFtZSArICJcIl0iOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJldHVybiAiWyIgKyBuYW1lICsgIl0iOwotICAgICAgICBjYXNlICJpbnRlcm5hbCI6Ci0gICAg
ICAgIGNhc2UgImhpZGRlbiI6Ci0gICAgICAgIGNhc2UgImludmlzaWJsZSI6Ci0gICAgICAgICAg
ICByZXR1cm4gInsiICsgbmFtZSArICJ9IjsKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuICI/
IiArIG5hbWUgKyAiPyI7Ci0gICAgfSwKLQotICAgIF9oYXNTdHJpbmdOYW1lOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gIXRoaXMuaXNFbGVtZW50KCkgJiYgIXRoaXMuaXNIaWRk
ZW4oKSAmJiAhdGhpcy5pc1dlYWsoKTsKLSAgICB9LAotCi0gICAgX25hbWU6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oYXNTdHJpbmdOYW1lKCkgPyB0aGlzLl9zbmFw
c2hvdC5fc3RyaW5nc1t0aGlzLl9uYW1lT3JJbmRleCgpXSA6IHRoaXMuX25hbWVPckluZGV4KCk7
Ci0gICAgfSwKLQotICAgIF9uYW1lT3JJbmRleDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX2VkZ2VzLml0ZW0odGhpcy5lZGdlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
ZWRnZU5hbWVPZmZzZXQpOwotICAgIH0sCi0KLSAgICBfdHlwZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzLml0ZW0odGhpcy5lZGdlSW5kZXggKyB0aGlzLl9z
bmFwc2hvdC5fZWRnZVR5cGVPZmZzZXQpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RFZGdlLnByb3RvdHlwZQotfTsKLQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVk
Z2V9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5KU0hlYXBTbmFwc2hvdH0gc25hcHNob3QKLSAq
LwotV2ViSW5zcGVjdG9yLkpTSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlID0gZnVuY3Rpb24oc25h
cHNob3QsIHJldGFpbmVkTm9kZUluZGV4LCByZXRhaW5lckluZGV4KQotewotICAgIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UuY2FsbCh0aGlzLCBzbmFwc2hvdCwgcmV0YWlu
ZWROb2RlSW5kZXgsIHJldGFpbmVySW5kZXgpOwotfQotCi1XZWJJbnNwZWN0b3IuSlNIZWFwU25h
cHNob3RSZXRhaW5lckVkZ2UucHJvdG90eXBlID0gewotICAgIGNsb25lOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5KU0hlYXBTbmFwc2hvdFJldGFp
bmVyRWRnZSh0aGlzLl9zbmFwc2hvdCwgdGhpcy5fcmV0YWluZWROb2RlSW5kZXgsIHRoaXMucmV0
YWluZXJJbmRleCgpKTsKLSAgICB9LAotCi0gICAgaXNIaWRkZW46IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9lZGdlKCkuaXNIaWRkZW4oKTsKLSAgICB9LAotCi0gICAg
aXNJbnRlcm5hbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2Uo
KS5pc0ludGVybmFsKCk7Ci0gICAgfSwKLQotICAgIGlzSW52aXNpYmxlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZWRnZSgpLmlzSW52aXNpYmxlKCk7Ci0gICAgfSwK
LQotICAgIGlzU2hvcnRjdXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9lZGdlKCkuaXNTaG9ydGN1dCgpOwotICAgIH0sCi0KLSAgICBpc1dlYWs6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lZGdlKCkuaXNXZWFrKCk7Ci0gICAgfSwKLQot
ICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZS5wcm90
b3R5cGUKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9KYXZhU2NyaXB0Rm9ybWF0dGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9KYXZhU2NyaXB0Rm9ybWF0dGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5NTM2Mjg5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSmF2YVNjcmlwdEZvcm1hdHRlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDkxNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
ZnVuY3Rpb24gRm9ybWF0dGVkQ29udGVudEJ1aWxkZXIoY29udGVudCwgbWFwcGluZywgb3JpZ2lu
YWxPZmZzZXQsIGZvcm1hdHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQotewotICAgIHRoaXMuX29y
aWdpbmFsQ29udGVudCA9IGNvbnRlbnQ7Ci0gICAgdGhpcy5fb3JpZ2luYWxPZmZzZXQgPSBvcmln
aW5hbE9mZnNldDsKLSAgICB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlvbiA9IDA7Ci0KLSAgICB0
aGlzLl9mb3JtYXR0ZWRDb250ZW50ID0gW107Ci0gICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudExl
bmd0aCA9IDA7Ci0gICAgdGhpcy5fZm9ybWF0dGVkT2Zmc2V0ID0gZm9ybWF0dGVkT2Zmc2V0Owot
ICAgIHRoaXMuX2xhc3RGb3JtYXR0ZWRQb3NpdGlvbiA9IDA7Ci0KLSAgICB0aGlzLl9tYXBwaW5n
ID0gbWFwcGluZzsKLQotICAgIHRoaXMuX2xpbmVOdW1iZXIgPSAwOwotICAgIHRoaXMuX25lc3Rp
bmdMZXZlbCA9IDA7Ci0gICAgdGhpcy5faW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nOwotICAg
IHRoaXMuX2NhY2hlZEluZGVudHMgPSB7fTsKLX0KLQotRm9ybWF0dGVkQ29udGVudEJ1aWxkZXIu
cHJvdG90eXBlID0gewotICAgIGFkZFRva2VuOiBmdW5jdGlvbih0b2tlbikKLSAgICB7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uY29tbWVudHNfYmVmb3JlLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdGhpcy5fYWRkQ29tbWVudCh0b2tlbi5jb21tZW50c19iZWZvcmVbaV0p
OwotCi0gICAgICAgIHdoaWxlICh0aGlzLl9saW5lTnVtYmVyIDwgdG9rZW4ubGluZSkgewotICAg
ICAgICAgICAgdGhpcy5fYWRkVGV4dCgiXG4iKTsKLSAgICAgICAgICAgIHRoaXMuX2FkZEluZGVu
dCgpOwotICAgICAgICAgICAgdGhpcy5fbmVlZE5ld0xpbmUgPSBmYWxzZTsKLSAgICAgICAgICAg
IHRoaXMuX2xpbmVOdW1iZXIgKz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9u
ZWVkTmV3TGluZSkgewotICAgICAgICAgICAgdGhpcy5fYWRkVGV4dCgiXG4iKTsKLSAgICAgICAg
ICAgIHRoaXMuX2FkZEluZGVudCgpOwotICAgICAgICAgICAgdGhpcy5fbmVlZE5ld0xpbmUgPSBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2FkZE1hcHBpbmdJZk5lZWRlZCh0b2tl
bi5wb3MpOwotICAgICAgICB0aGlzLl9hZGRUZXh0KHRoaXMuX29yaWdpbmFsQ29udGVudC5zdWJz
dHJpbmcodG9rZW4ucG9zLCB0b2tlbi5lbmRQb3MpKTsKLSAgICAgICAgdGhpcy5fbGluZU51bWJl
ciA9IHRva2VuLmVuZExpbmU7Ci0gICAgfSwKLQotICAgIGFkZFNwYWNlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9hZGRUZXh0KCIgIik7Ci0gICAgfSwKLQotICAgIGFkZE5ld0xp
bmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX25lZWROZXdMaW5lID0gdHJ1ZTsK
LSAgICB9LAotCi0gICAgaW5jcmVhc2VOZXN0aW5nTGV2ZWw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX25lc3RpbmdMZXZlbCArPSAxOwotICAgIH0sCi0KLSAgICBkZWNyZWFzZU5l
c3RpbmdMZXZlbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbmVzdGluZ0xldmVs
IC09IDE7Ci0gICAgfSwKLQotICAgIGNvbnRlbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LmpvaW4oIiIpOwotICAgIH0sCi0KLSAgICBt
YXBwaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4geyBvcmlnaW5hbDogdGhp
cy5fb3JpZ2luYWxQb3NpdGlvbnMsIGZvcm1hdHRlZDogdGhpcy5fZm9ybWF0dGVkUG9zaXRpb25z
IH07Ci0gICAgfSwKLQotICAgIF9hZGRJbmRlbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9jYWNoZWRJbmRlbnRzW3RoaXMuX25lc3RpbmdMZXZlbF0pIHsKLSAgICAgICAg
ICAgIHRoaXMuX2FkZFRleHQodGhpcy5fY2FjaGVkSW5kZW50c1t0aGlzLl9uZXN0aW5nTGV2ZWxd
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBmdWxsSW5k
ZW50ID0gIiI7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbmVzdGluZ0xldmVs
OyArK2kpCi0gICAgICAgICAgICBmdWxsSW5kZW50ICs9IHRoaXMuX2luZGVudFN0cmluZzsKLSAg
ICAgICAgdGhpcy5fYWRkVGV4dChmdWxsSW5kZW50KTsKLQotICAgICAgICAvLyBDYWNoZSBhIG1h
eGltdW0gb2YgMjAgbmVzdGluZyBsZXZlbCBpbmRlbnRzLgotICAgICAgICBpZiAodGhpcy5fbmVz
dGluZ0xldmVsIDw9IDIwKQotICAgICAgICAgICAgdGhpcy5fY2FjaGVkSW5kZW50c1t0aGlzLl9u
ZXN0aW5nTGV2ZWxdID0gZnVsbEluZGVudDsKLSAgICB9LAotCi0gICAgX2FkZENvbW1lbnQ6IGZ1
bmN0aW9uKGNvbW1lbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbGluZU51bWJlciA8IGNv
bW1lbnQubGluZSkgewotICAgICAgICAgICAgZm9yICh2YXIgaiA9IHRoaXMuX2xpbmVOdW1iZXI7
IGogPCBjb21tZW50LmxpbmU7ICsraikKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGRUZXh0KCJc
biIpOwotICAgICAgICAgICAgdGhpcy5fbGluZU51bWJlciA9IGNvbW1lbnQubGluZTsKLSAgICAg
ICAgICAgIHRoaXMuX25lZWROZXdMaW5lID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLl9hZGRJ
bmRlbnQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLmFkZFNwYWNlKCk7Ci0K
LSAgICAgICAgdGhpcy5fYWRkTWFwcGluZ0lmTmVlZGVkKGNvbW1lbnQucG9zKTsKLSAgICAgICAg
aWYgKGNvbW1lbnQudHlwZSA9PT0gImNvbW1lbnQxIikKLSAgICAgICAgICAgIHRoaXMuX2FkZFRl
eHQoIi8vIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2FkZFRleHQoIi8qIik7
Ci0KLSAgICAgICAgdGhpcy5fYWRkVGV4dChjb21tZW50LnZhbHVlKTsKLQotICAgICAgICBpZiAo
Y29tbWVudC50eXBlICE9PSAiY29tbWVudDEiKSB7Ci0gICAgICAgICAgICB0aGlzLl9hZGRUZXh0
KCIqLyIpOwotICAgICAgICAgICAgdmFyIHBvc2l0aW9uOwotICAgICAgICAgICAgd2hpbGUgKChw
b3NpdGlvbiA9IGNvbW1lbnQudmFsdWUuaW5kZXhPZigiXG4iLCBwb3NpdGlvbiArIDEpKSAhPT0g
LTEpCi0gICAgICAgICAgICAgICAgdGhpcy5fbGluZU51bWJlciArPSAxOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9hZGRUZXh0OiBmdW5jdGlvbih0ZXh0KQotICAgIHsKLSAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29udGVudC5wdXNoKHRleHQpOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRD
b250ZW50TGVuZ3RoICs9IHRleHQubGVuZ3RoOwotICAgIH0sCi0KLSAgICBfYWRkTWFwcGluZ0lm
TmVlZGVkOiBmdW5jdGlvbihvcmlnaW5hbFBvc2l0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKG9y
aWdpbmFsUG9zaXRpb24gLSB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlvbiA9PT0gdGhpcy5fZm9y
bWF0dGVkQ29udGVudExlbmd0aCAtIHRoaXMuX2xhc3RGb3JtYXR0ZWRQb3NpdGlvbikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fbWFwcGluZy5vcmlnaW5hbC5wdXNoKHRoaXMu
X29yaWdpbmFsT2Zmc2V0ICsgb3JpZ2luYWxQb3NpdGlvbik7Ci0gICAgICAgIHRoaXMuX2xhc3RP
cmlnaW5hbFBvc2l0aW9uID0gb3JpZ2luYWxQb3NpdGlvbjsKLSAgICAgICAgdGhpcy5fbWFwcGlu
Zy5mb3JtYXR0ZWQucHVzaCh0aGlzLl9mb3JtYXR0ZWRPZmZzZXQgKyB0aGlzLl9mb3JtYXR0ZWRD
b250ZW50TGVuZ3RoKTsKLSAgICAgICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gdGhp
cy5fZm9ybWF0dGVkQ29udGVudExlbmd0aDsKLSAgICB9Ci19Ci0KLXZhciB0b2tlbnMgPSBbCi0g
ICAgWyJFT1MiXSwKLSAgICBbIkxQQVJFTiIsICIoIl0sIFsiUlBBUkVOIiwgIikiXSwgWyJMQlJB
Q0siLCAiWyJdLCBbIlJCUkFDSyIsICJdIl0sIFsiTEJSQUNFIiwgInsiXSwgWyJSQlJBQ0UiLCAi
fSJdLCBbIkNPTE9OIiwgIjoiXSwgWyJTRU1JQ09MT04iLCAiOyJdLCBbIlBFUklPRCIsICIuIl0s
IFsiQ09ORElUSU9OQUwiLCAiPyJdLAotICAgIFsiSU5DIiwgIisrIl0sIFsiREVDIiwgIi0tIl0s
Ci0gICAgWyJBU1NJR04iLCAiPSJdLCBbIkFTU0lHTl9CSVRfT1IiLCAifD0iXSwgWyJBU1NJR05f
QklUX1hPUiIsICJePSJdLCBbIkFTU0lHTl9CSVRfQU5EIiwgIiY9Il0sIFsiQVNTSUdOX1NITCIs
ICI8PD0iXSwgWyJBU1NJR05fU0FSIiwgIj4+PSJdLCBbIkFTU0lHTl9TSFIiLCAiPj4+PSJdLAot
ICAgIFsiQVNTSUdOX0FERCIsICIrPSJdLCBbIkFTU0lHTl9TVUIiLCAiLT0iXSwgWyJBU1NJR05f
TVVMIiwgIio9Il0sIFsiQVNTSUdOX0RJViIsICIvPSJdLCBbIkFTU0lHTl9NT0QiLCAiJT0iXSwK
LSAgICBbIkNPTU1BIiwgIiwiXSwgWyJPUiIsICJ8fCJdLCBbIkFORCIsICImJiJdLCBbIkJJVF9P
UiIsICJ8Il0sIFsiQklUX1hPUiIsICJeIl0sIFsiQklUX0FORCIsICImIl0sIFsiU0hMIiwgIjw8
Il0sIFsiU0FSIiwgIj4+Il0sIFsiU0hSIiwgIj4+PiJdLAotICAgIFsiQUREIiwgIisiXSwgWyJT
VUIiLCAiLSJdLCBbIk1VTCIsICIqIl0sIFsiRElWIiwgIi8iXSwgWyJNT0QiLCAiJSJdLAotICAg
IFsiRVEiLCAiPT0iXSwgWyJORSIsICIhPSJdLCBbIkVRX1NUUklDVCIsICI9PT0iXSwgWyJORV9T
VFJJQ1QiLCAiIT09Il0sIFsiTFQiLCAiPCJdLCBbIkdUIiwgIj4iXSwgWyJMVEUiLCAiPD0iXSwg
WyJHVEUiLCAiPj0iXSwKLSAgICBbIklOU1RBTkNFT0YiLCAiaW5zdGFuY2VvZiJdLCBbIklOIiwg
ImluIl0sIFsiTk9UIiwgIiEiXSwgWyJCSVRfTk9UIiwgIn4iXSwgWyJERUxFVEUiLCAiZGVsZXRl
Il0sIFsiVFlQRU9GIiwgInR5cGVvZiJdLCBbIlZPSUQiLCAidm9pZCJdLAotICAgIFsiQlJFQUsi
LCAiYnJlYWsiXSwgWyJDQVNFIiwgImNhc2UiXSwgWyJDQVRDSCIsICJjYXRjaCJdLCBbIkNPTlRJ
TlVFIiwgImNvbnRpbnVlIl0sIFsiREVCVUdHRVIiLCAiZGVidWdnZXIiXSwgWyJERUZBVUxUIiwg
ImRlZmF1bHQiXSwgWyJETyIsICJkbyJdLCBbIkVMU0UiLCAiZWxzZSJdLCBbIkZJTkFMTFkiLCAi
ZmluYWxseSJdLAotICAgIFsiRk9SIiwgImZvciJdLCBbIkZVTkNUSU9OIiwgImZ1bmN0aW9uIl0s
IFsiSUYiLCAiaWYiXSwgWyJORVciLCAibmV3Il0sIFsiUkVUVVJOIiwgInJldHVybiJdLCBbIlNX
SVRDSCIsICJzd2l0Y2giXSwgWyJUSElTIiwgInRoaXMiXSwgWyJUSFJPVyIsICJ0aHJvdyJdLCBb
IlRSWSIsICJ0cnkiXSwgWyJWQVIiLCAidmFyIl0sCi0gICAgWyJXSElMRSIsICJ3aGlsZSJdLCBb
IldJVEgiLCAid2l0aCJdLCBbIk5VTExfTElURVJBTCIsICJudWxsIl0sIFsiVFJVRV9MSVRFUkFM
IiwgInRydWUiXSwgWyJGQUxTRV9MSVRFUkFMIiwgImZhbHNlIl0sIFsiTlVNQkVSIl0sIFsiU1RS
SU5HIl0sIFsiSURFTlRJRklFUiJdLCBbIkNPTlNUIiwgImNvbnN0Il0KLV07Ci0KLXZhciBUb2tl
bnMgPSB7fTsKLWZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKQotICAgIFRv
a2Vuc1t0b2tlbnNbaV1bMF1dID0gaTsKLQotdmFyIFRva2Vuc0J5VmFsdWUgPSB7fTsKLWZvciAo
dmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgaWYgKHRva2Vuc1tpXVsx
XSkKLSAgICAgICAgVG9rZW5zQnlWYWx1ZVt0b2tlbnNbaV1bMV1dID0gaTsKLX0KLQotdmFyIFRv
a2Vuc0J5VHlwZSA9IHsKLSAgICAiZW9mIjogVG9rZW5zLkVPUywKLSAgICAibmFtZSI6IFRva2Vu
cy5JREVOVElGSUVSLAotICAgICJudW0iOiBUb2tlbnMuTlVNQkVSLAotICAgICJyZWdleHAiOiBU
b2tlbnMuRElWLAotICAgICJzdHJpbmciOiBUb2tlbnMuU1RSSU5HCi19OwotCi1mdW5jdGlvbiBU
b2tlbml6ZXIoY29udGVudCkKLXsKLSAgICB0aGlzLl9yZWFkTmV4dFRva2VuID0gcGFyc2UudG9r
ZW5pemVyKGNvbnRlbnQpOwotICAgIHRoaXMuX3N0YXRlID0gdGhpcy5fcmVhZE5leHRUb2tlbi5j
b250ZXh0KCk7Ci19Ci0KLVRva2VuaXplci5wcm90b3R5cGUgPSB7Ci0gICAgY29udGVudDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLnRleHQ7Ci0gICAgfSwK
LQotICAgIG5leHQ6IGZ1bmN0aW9uKGZvcmNlUmVnZXhwKQotICAgIHsKLSAgICAgICAgdmFyIHVn
bGlmeVRva2VuID0gdGhpcy5fcmVhZE5leHRUb2tlbihmb3JjZVJlZ2V4cCk7Ci0gICAgICAgIHVn
bGlmeVRva2VuLmVuZFBvcyA9IHRoaXMuX3N0YXRlLnBvczsKLSAgICAgICAgdWdsaWZ5VG9rZW4u
ZW5kTGluZSA9IHRoaXMuX3N0YXRlLmxpbmU7Ci0gICAgICAgIHVnbGlmeVRva2VuLnRva2VuID0g
dGhpcy5fY29udmVydFVnbGlmeVRva2VuKHVnbGlmeVRva2VuKTsKLSAgICAgICAgcmV0dXJuIHVn
bGlmeVRva2VuOwotICAgIH0sCi0KLSAgICBfY29udmVydFVnbGlmeVRva2VuOiBmdW5jdGlvbih1
Z2xpZnlUb2tlbikKLSAgICB7Ci0gICAgICAgIHZhciB0b2tlbiA9IFRva2Vuc0J5VHlwZVt1Z2xp
ZnlUb2tlbi50eXBlXTsKLSAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gIm51bWJlciIpCi0g
ICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIHRva2VuID0gVG9rZW5zQnlWYWx1ZVt1
Z2xpZnlUb2tlbi52YWx1ZV07Ci0gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICJudW1iZXIi
KQotICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICB0aHJvdyAiVW5rbm93biB0b2tl
biB0eXBlICIgKyB1Z2xpZnlUb2tlbi50eXBlOwotICAgIH0KLX0KLQotZnVuY3Rpb24gSmF2YVNj
cmlwdEZvcm1hdHRlcih0b2tlbml6ZXIsIGJ1aWxkZXIpCi17Ci0gICAgdGhpcy5fdG9rZW5pemVy
ID0gdG9rZW5pemVyOwotICAgIHRoaXMuX2J1aWxkZXIgPSBidWlsZGVyOwotICAgIHRoaXMuX3Rv
a2VuID0gbnVsbDsKLSAgICB0aGlzLl9uZXh0VG9rZW4gPSB0aGlzLl90b2tlbml6ZXIubmV4dCgp
OwotfQotCi1KYXZhU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKLSAgICBmb3JtYXQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhcnNlU291cmNlRWxlbWVudHMoVG9rZW5z
LkVPUyk7Ci0gICAgICAgIHRoaXMuX2NvbnN1bWUoVG9rZW5zLkVPUyk7Ci0gICAgfSwKLQotICAg
IF9wZWVrOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmV4dFRva2Vu
LnRva2VuOwotICAgIH0sCi0KLSAgICBfbmV4dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX3Rva2VuICYmIHRoaXMuX3Rva2VuLnRva2VuID09PSBUb2tlbnMuRU9TKQotICAg
ICAgICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgRU9TIHRva2VuIjsKLQotICAgICAgICB0aGlzLl9i
dWlsZGVyLmFkZFRva2VuKHRoaXMuX25leHRUb2tlbik7Ci0gICAgICAgIHRoaXMuX3Rva2VuID0g
dGhpcy5fbmV4dFRva2VuOwotICAgICAgICB0aGlzLl9uZXh0VG9rZW4gPSB0aGlzLl90b2tlbml6
ZXIubmV4dCh0aGlzLl9mb3JjZVJlZ2V4cCk7Ci0gICAgICAgIHRoaXMuX2ZvcmNlUmVnZXhwID0g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiB0aGlzLl90b2tlbi50b2tlbjsKLSAgICB9LAotCi0gICAg
X2NvbnN1bWU6IGZ1bmN0aW9uKHRva2VuKQotICAgIHsKLSAgICAgICAgdmFyIG5leHQgPSB0aGlz
Ll9uZXh0KCk7Ci0gICAgICAgIGlmIChuZXh0ICE9PSB0b2tlbikKLSAgICAgICAgICAgIHRocm93
ICJVbmV4cGVjdGVkIHRva2VuIGluIGNvbnN1bWU6IGV4cGVjdGVkICIgKyB0b2tlbiArICIsIGFj
dHVhbCAiICsgbmV4dDsKLSAgICB9LAotCi0gICAgX2V4cGVjdDogZnVuY3Rpb24odG9rZW4pCi0g
ICAgewotICAgICAgICB2YXIgbmV4dCA9IHRoaXMuX25leHQoKTsKLSAgICAgICAgaWYgKG5leHQg
IT09IHRva2VuKQotICAgICAgICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgdG9rZW46IGV4cGVjdGVk
ICIgKyB0b2tlbiArICIsIGFjdHVhbCAiICsgbmV4dDsKLSAgICB9LAotCi0gICAgX2V4cGVjdFNl
bWljb2xvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3BlZWsoKSA9PT0g
VG9rZW5zLlNFTUlDT0xPTikKLSAgICAgICAgICAgIHRoaXMuX2NvbnN1bWUoVG9rZW5zLlNFTUlD
T0xPTik7Ci0gICAgfSwKLQotICAgIF9oYXNMaW5lVGVybWluYXRvckJlZm9yZU5leHQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9uZXh0VG9rZW4ubmxiOwotICAgIH0s
Ci0KLSAgICBfcGFyc2VTb3VyY2VFbGVtZW50czogZnVuY3Rpb24oZW5kVG9rZW4pCi0gICAgewot
ICAgICAgICB3aGlsZSAodGhpcy5fcGVlaygpICE9PSBlbmRUb2tlbikgewotICAgICAgICAgICAg
dGhpcy5fcGFyc2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkTmV3
TGluZSgpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9wYXJzZVN0YXRlbWVudE9yQmxvY2s6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9wZWVrKCkgPT09IFRva2Vucy5M
QlJBQ0UpIHsKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAg
ICAgIHRoaXMuX3BhcnNlQmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhpcy5fYnVpbGRlci5hZGROZXdMaW5lKCk7Ci0gICAgICAgIHRoaXMu
X2J1aWxkZXIuaW5jcmVhc2VOZXN0aW5nTGV2ZWwoKTsKLSAgICAgICAgdGhpcy5fcGFyc2VTdGF0
ZW1lbnQoKTsKLSAgICAgICAgdGhpcy5fYnVpbGRlci5kZWNyZWFzZU5lc3RpbmdMZXZlbCgpOwot
ICAgIH0sCi0KLSAgICBfcGFyc2VTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAodGhpcy5fcGVlaygpKSB7Ci0gICAgICAgIGNhc2UgVG9rZW5zLkxCUkFDRToKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZUJsb2NrKCk7Ci0gICAgICAgIGNhc2UgVG9rZW5z
LkNPTlNUOgotICAgICAgICBjYXNlIFRva2Vucy5WQVI6Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5fcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpOwotICAgICAgICBjYXNlIFRva2Vucy5TRU1JQ09M
T046Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmV4dCgpOwotICAgICAgICBjYXNlIFRva2Vu
cy5JRjoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZUlmU3RhdGVtZW50KCk7Ci0gICAg
ICAgIGNhc2UgVG9rZW5zLkRPOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlRG9XaGls
ZVN0YXRlbWVudCgpOwotICAgICAgICBjYXNlIFRva2Vucy5XSElMRToKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9wYXJzZVdoaWxlU3RhdGVtZW50KCk7Ci0gICAgICAgIGNhc2UgVG9rZW5zLkZP
UjoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZUZvclN0YXRlbWVudCgpOwotICAgICAg
ICBjYXNlIFRva2Vucy5DT05USU5VRToKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZUNv
bnRpbnVlU3RhdGVtZW50KCk7Ci0gICAgICAgIGNhc2UgVG9rZW5zLkJSRUFLOgotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3BhcnNlQnJlYWtTdGF0ZW1lbnQoKTsKLSAgICAgICAgY2FzZSBUb2tl
bnMuUkVUVVJOOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlUmV0dXJuU3RhdGVtZW50
KCk7Ci0gICAgICAgIGNhc2UgVG9rZW5zLldJVEg6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5f
cGFyc2VXaXRoU3RhdGVtZW50KCk7Ci0gICAgICAgIGNhc2UgVG9rZW5zLlNXSVRDSDoKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9wYXJzZVN3aXRjaFN0YXRlbWVudCgpOwotICAgICAgICBjYXNl
IFRva2Vucy5USFJPVzoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZVRocm93U3RhdGVt
ZW50KCk7Ci0gICAgICAgIGNhc2UgVG9rZW5zLlRSWToKLSAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9wYXJzZVRyeVN0YXRlbWVudCgpOwotICAgICAgICBjYXNlIFRva2Vucy5GVU5DVElPTjoKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKLSAgICAg
ICAgY2FzZSBUb2tlbnMuREVCVUdHRVI6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VE
ZWJ1Z2dlclN0YXRlbWVudCgpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3BhcnNlRXhwcmVzc2lvbk9yTGFiZWxsZWRTdGF0ZW1lbnQoKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICBfcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLkZVTkNUSU9OKTsKLSAgICAgICAgdGhpcy5f
YnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLklERU5USUZJ
RVIpOwotICAgICAgICB0aGlzLl9wYXJzZUZ1bmN0aW9uTGl0ZXJhbCgpCi0gICAgfSwKLQotICAg
IF9wYXJzZUJsb2NrOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9leHBlY3QoVG9r
ZW5zLkxCUkFDRSk7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkTmV3TGluZSgpOwotICAgICAg
ICB0aGlzLl9idWlsZGVyLmluY3JlYXNlTmVzdGluZ0xldmVsKCk7Ci0gICAgICAgIHdoaWxlICh0
aGlzLl9wZWVrKCkgIT09IFRva2Vucy5SQlJBQ0UpIHsKLSAgICAgICAgICAgIHRoaXMuX3BhcnNl
U3RhdGVtZW50KCk7Ci0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFkZE5ld0xpbmUoKTsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLl9idWlsZGVyLmRlY3JlYXNlTmVzdGluZ0xldmVsKCk7Ci0g
ICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuUkJSQUNFKTsKLSAgICB9LAotCi0gICAgX3BhcnNl
VmFyaWFibGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKLSAgICAgICAgdGhpcy5fZXhwZWN0U2VtaWNvbG9uKCk7
Ci0gICAgfSwKLQotICAgIF9wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fcGVlaygpID09PSBUb2tlbnMuVkFSKQotICAgICAgICAg
ICAgdGhpcy5fY29uc3VtZShUb2tlbnMuVkFSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dGhpcy5fY29uc3VtZShUb2tlbnMuQ09OU1QpCi0gICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3Bh
Y2UoKTsKLQotICAgICAgICB2YXIgaXNGaXJzdFZhcmlhYmxlID0gdHJ1ZTsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgaWYgKCFpc0ZpcnN0VmFyaWFibGUpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLl9jb25zdW1lKFRva2Vucy5DT01NQSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRl
ci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaXNGaXJzdFZhcmlhYmxl
ID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLklERU5USUZJRVIpOwot
ICAgICAgICAgICAgaWYgKHRoaXMuX3BlZWsoKSA9PT0gVG9rZW5zLkFTU0lHTikgewotICAgICAg
ICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9jb25zdW1lKFRva2Vucy5BU1NJR04pOwotICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIu
YWRkU3BhY2UoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKHRoaXMuX3BlZWsoKSA9PT0g
VG9rZW5zLkNPTU1BKTsKLSAgICB9LAotCi0gICAgX3BhcnNlRXhwcmVzc2lvbk9yTGFiZWxsZWRT
dGF0ZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhcnNlRXhwcmVzc2lv
bigpOwotICAgICAgICBpZiAodGhpcy5fcGVlaygpID09PSBUb2tlbnMuQ09MT04pIHsKLSAgICAg
ICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuQ09MT04pOwotICAgICAgICAgICAgdGhpcy5fYnVp
bGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgdGhpcy5fcGFyc2VTdGF0ZW1lbnQoKTsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLl9leHBlY3RTZW1pY29sb24oKTsKLSAgICB9LAotCi0gICAg
X3BhcnNlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4cGVj
dChUb2tlbnMuSUYpOwotICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0gICAgICAg
IHRoaXMuX2V4cGVjdChUb2tlbnMuTFBBUkVOKTsKLSAgICAgICAgdGhpcy5fcGFyc2VFeHByZXNz
aW9uKCk7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuUlBBUkVOKTsKLQotICAgICAgICB2
YXIgaXNCbG9jayA9IHRoaXMuX3BhcnNlU3RhdGVtZW50T3JCbG9jaygpOwotICAgICAgICBpZiAo
dGhpcy5fcGVlaygpID09PSBUb2tlbnMuRUxTRSkgewotICAgICAgICAgICAgaWYgKGlzQmxvY2sp
Ci0gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkTmV3TGluZSgpOwotICAgICAg
ICAgICAgdGhpcy5fbmV4dCgpOwotCi0gICAgICAgICAgICBpZiAodGhpcy5fcGVlaygpID09PSBU
b2tlbnMuSUYpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlU3RhdGVtZW50T3JCbG9jaygpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF9wYXJzZUNvbnRpbnVlU3RhdGVtZW50OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLkNPTlRJTlVFKTsKLSAgICAgICAgdmFy
IHRva2VuID0gdGhpcy5fcGVlaygpOwotICAgICAgICBpZiAoIXRoaXMuX2hhc0xpbmVUZXJtaW5h
dG9yQmVmb3JlTmV4dCgpICYmIHRva2VuICE9PSBUb2tlbnMuU0VNSUNPTE9OICYmIHRva2VuICE9
PSBUb2tlbnMuUkJSQUNFICYmIHRva2VuICE9PSBUb2tlbnMuRU9TKSB7Ci0gICAgICAgICAgICB0
aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0gICAgICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5z
LklERU5USUZJRVIpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2V4cGVjdFNlbWljb2xvbigp
OwotICAgIH0sCi0KLSAgICBfcGFyc2VCcmVha1N0YXRlbWVudDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5CUkVBSyk7Ci0gICAgICAgIHZhciB0b2tlbiA9
IHRoaXMuX3BlZWsoKTsKLSAgICAgICAgaWYgKCF0aGlzLl9oYXNMaW5lVGVybWluYXRvckJlZm9y
ZU5leHQoKSAmJiB0b2tlbiAhPT0gVG9rZW5zLlNFTUlDT0xPTiAmJiB0b2tlbiAhPT0gVG9rZW5z
LlJCUkFDRSAmJiB0b2tlbiAhPT0gVG9rZW5zLkVPUykgewotICAgICAgICAgICAgdGhpcy5fYnVp
bGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5JREVOVElG
SUVSKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9leHBlY3RTZW1pY29sb24oKTsKLSAgICB9
LAotCi0gICAgX3BhcnNlUmV0dXJuU3RhdGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9leHBlY3QoVG9rZW5zLlJFVFVSTik7Ci0gICAgICAgIHZhciB0b2tlbiA9IHRoaXMu
X3BlZWsoKTsKLSAgICAgICAgaWYgKCF0aGlzLl9oYXNMaW5lVGVybWluYXRvckJlZm9yZU5leHQo
KSAmJiB0b2tlbiAhPT0gVG9rZW5zLlNFTUlDT0xPTiAmJiB0b2tlbiAhPT0gVG9rZW5zLlJCUkFD
RSAmJiB0b2tlbiAhPT0gVG9rZW5zLkVPUykgewotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5h
ZGRTcGFjZSgpOwotICAgICAgICAgICAgdGhpcy5fcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5fZXhwZWN0U2VtaWNvbG9uKCk7Ci0gICAgfSwKLQotICAgIF9wYXJz
ZVdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChU
b2tlbnMuV0lUSCk7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAg
dGhpcy5fZXhwZWN0KFRva2Vucy5MUEFSRU4pOwotICAgICAgICB0aGlzLl9wYXJzZUV4cHJlc3Np
b24oKTsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5SUEFSRU4pOwotICAgICAgICB0aGlz
Ll9wYXJzZVN0YXRlbWVudE9yQmxvY2soKTsKLSAgICB9LAotCi0gICAgX3BhcnNlQ2FzZUNsYXVz
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3BlZWsoKSA9PT0gVG9rZW5z
LkNBU0UpIHsKLSAgICAgICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuQ0FTRSk7Ci0gICAgICAg
ICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0gICAgICAgICAgICB0aGlzLl9wYXJzZUV4
cHJlc3Npb24oKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9leHBlY3QoVG9r
ZW5zLkRFRkFVTFQpOwotICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLkNPTE9OKTsKLSAgICAg
ICAgdGhpcy5fYnVpbGRlci5hZGROZXdMaW5lKCk7Ci0KLSAgICAgICAgdGhpcy5fYnVpbGRlci5p
bmNyZWFzZU5lc3RpbmdMZXZlbCgpOwotICAgICAgICB3aGlsZSAodGhpcy5fcGVlaygpICE9PSBU
b2tlbnMuQ0FTRSAmJiB0aGlzLl9wZWVrKCkgIT09IFRva2Vucy5ERUZBVUxUICYmIHRoaXMuX3Bl
ZWsoKSAhPT0gVG9rZW5zLlJCUkFDRSkgewotICAgICAgICAgICAgdGhpcy5fcGFyc2VTdGF0ZW1l
bnQoKTsKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkTmV3TGluZSgpOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIuZGVjcmVhc2VOZXN0aW5nTGV2ZWwoKTsKLSAgICB9LAot
Ci0gICAgX3BhcnNlU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLl9leHBlY3QoVG9rZW5zLlNXSVRDSCk7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3Bh
Y2UoKTsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5MUEFSRU4pOwotICAgICAgICB0aGlz
Ll9wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5SUEFSRU4p
OwotICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0KLSAgICAgICAgdGhpcy5fZXhw
ZWN0KFRva2Vucy5MQlJBQ0UpOwotICAgICAgICB0aGlzLl9idWlsZGVyLmFkZE5ld0xpbmUoKTsK
LSAgICAgICAgdGhpcy5fYnVpbGRlci5pbmNyZWFzZU5lc3RpbmdMZXZlbCgpOwotICAgICAgICB3
aGlsZSAodGhpcy5fcGVlaygpICE9PSBUb2tlbnMuUkJSQUNFKQotICAgICAgICAgICAgdGhpcy5f
cGFyc2VDYXNlQ2xhdXNlKCk7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIuZGVjcmVhc2VOZXN0aW5n
TGV2ZWwoKTsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5SQlJBQ0UpOwotICAgIH0sCi0K
LSAgICBfcGFyc2VUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fZXhwZWN0KFRva2Vucy5USFJPVyk7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3BhY2Uo
KTsKLSAgICAgICAgdGhpcy5fcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgIHRoaXMuX2V4cGVj
dFNlbWljb2xvbigpOwotICAgIH0sCi0KLSAgICBfcGFyc2VUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuVFJZKTsKLSAgICAgICAgdGhp
cy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICB0aGlzLl9wYXJzZUJsb2NrKCk7Ci0KLSAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5fcGVlaygpOwotICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2Vucy5DQVRDSCkgewotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAg
ICAgICAgICAgdGhpcy5fY29uc3VtZShUb2tlbnMuQ0FUQ0gpOwotICAgICAgICAgICAgdGhpcy5f
YnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5MUEFS
RU4pOwotICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5JREVOVElGSUVSKTsKLSAgICAg
ICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuUlBBUkVOKTsKLSAgICAgICAgICAgIHRoaXMuX2J1
aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAgICAgIHRoaXMuX3BhcnNlQmxvY2soKTsKLSAgICAg
ICAgICAgIHRva2VuID0gdGhpcy5fcGVlaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRv
a2VuID09PSBUb2tlbnMuRklOQUxMWSkgewotICAgICAgICAgICAgdGhpcy5fY29uc3VtZShUb2tl
bnMuRklOQUxMWSk7Ci0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0gICAg
ICAgICAgICB0aGlzLl9wYXJzZUJsb2NrKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3Bh
cnNlRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZXhw
ZWN0KFRva2Vucy5ETyk7Ci0gICAgICAgIHZhciBpc0Jsb2NrID0gdGhpcy5fcGFyc2VTdGF0ZW1l
bnRPckJsb2NrKCk7Ci0gICAgICAgIGlmIChpc0Jsb2NrKQotICAgICAgICAgICAgdGhpcy5fYnVp
bGRlci5hZGRTcGFjZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9idWlsZGVy
LmFkZE5ld0xpbmUoKTsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5XSElMRSk7Ci0gICAg
ICAgIHRoaXMuX2J1aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vu
cy5MUEFSRU4pOwotICAgICAgICB0aGlzLl9wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgdGhp
cy5fZXhwZWN0KFRva2Vucy5SUEFSRU4pOwotICAgICAgICB0aGlzLl9leHBlY3RTZW1pY29sb24o
KTsKLSAgICB9LAotCi0gICAgX3BhcnNlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuV0hJTEUpOwotICAgICAgICB0aGlzLl9idWls
ZGVyLmFkZFNwYWNlKCk7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuTFBBUkVOKTsKLSAg
ICAgICAgdGhpcy5fcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tl
bnMuUlBBUkVOKTsKLSAgICAgICAgdGhpcy5fcGFyc2VTdGF0ZW1lbnRPckJsb2NrKCk7Ci0gICAg
fSwKLQotICAgIF9wYXJzZUZvclN0YXRlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fZXhwZWN0KFRva2Vucy5GT1IpOwotICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNl
KCk7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuTFBBUkVOKTsKLSAgICAgICAgaWYgKHRo
aXMuX3BlZWsoKSAhPT0gVG9rZW5zLlNFTUlDT0xPTikgewotICAgICAgICAgICAgaWYgKHRoaXMu
X3BlZWsoKSA9PT0gVG9rZW5zLlZBUiB8fCB0aGlzLl9wZWVrKCkgPT09IFRva2Vucy5DT05TVCkg
ewotICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlaygpID09PSBUb2tlbnMuSU4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9jb25zdW1lKFRva2Vucy5JTik7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2J1
aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VFeHByZXNz
aW9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgdGhpcy5fcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
dGhpcy5fcGVlaygpICE9PSBUb2tlbnMuUlBBUkVOKSB7Ci0gICAgICAgICAgICB0aGlzLl9leHBl
Y3QoVG9rZW5zLlNFTUlDT0xPTik7Ci0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNl
KCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcGVlaygpICE9PSBUb2tlbnMuU0VNSUNPTE9OKQot
ICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgdGhp
cy5fZXhwZWN0KFRva2Vucy5TRU1JQ09MT04pOwotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5h
ZGRTcGFjZSgpOwotICAgICAgICAgICAgaWYgKHRoaXMuX3BlZWsoKSAhPT0gVG9rZW5zLlJQQVJF
TikKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLlJQQVJFTik7Ci0KLSAgICAgICAgdGhpcy5fcGFy
c2VTdGF0ZW1lbnRPckJsb2NrKCk7Ci0gICAgfSwKLQotICAgIF9wYXJzZUV4cHJlc3Npb246IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
KTsKLSAgICAgICAgd2hpbGUgKHRoaXMuX3BlZWsoKSA9PT0gVG9rZW5zLkNPTU1BKSB7Ci0gICAg
ICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLkNPTU1BKTsKLSAgICAgICAgICAgIHRoaXMuX2J1
aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAgICAgIHRoaXMuX3BhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24oKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFyc2VDb25kaXRpb25hbEV4
cHJlc3Npb24oKTsKLSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5fcGVlaygpOwotICAgICAgICBp
ZiAoVG9rZW5zLkFTU0lHTiA8PSB0b2tlbiAmJiB0b2tlbiA8PSBUb2tlbnMuQVNTSUdOX01PRCkg
ewotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgdGhp
cy5fbmV4dCgpOwotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAg
ICAgICAgdGhpcy5fcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICB9Ci0gICAg
fSwKLQotICAgIF9wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fcGFyc2VCaW5hcnlFeHByZXNzaW9uKCk7Ci0gICAgICAgIGlmICh0aGlz
Ll9wZWVrKCkgPT09IFRva2Vucy5DT05ESVRJT05BTCkgewotICAgICAgICAgICAgdGhpcy5fYnVp
bGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgdGhpcy5fY29uc3VtZShUb2tlbnMuQ09ORElU
SU9OQUwpOwotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAg
ICAgdGhpcy5fcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgdGhpcy5f
YnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5DT0xP
Tik7Ci0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0gICAgICAgICAgICB0
aGlzLl9wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgX3BhcnNlQmluYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKLSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5fcGVl
aygpOwotICAgICAgICB3aGlsZSAoVG9rZW5zLk9SIDw9IHRva2VuICYmIHRva2VuIDw9IFRva2Vu
cy5JTikgewotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAg
ICAgdGhpcy5fbmV4dCgpOwotICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwot
ICAgICAgICAgICAgdGhpcy5fcGFyc2VCaW5hcnlFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB0
b2tlbiA9IHRoaXMuX3BlZWsoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcGFyc2VVbmFy
eUV4cHJlc3Npb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB0b2tlbiA9IHRoaXMu
X3BlZWsoKTsKLSAgICAgICAgaWYgKChUb2tlbnMuTk9UIDw9IHRva2VuICYmIHRva2VuIDw9IFRv
a2Vucy5WT0lEKSB8fCB0b2tlbiA9PT0gVG9rZW5zLkFERCB8fCB0b2tlbiA9PT0gVG9rZW5zLlNV
QiB8fCB0b2tlbiA9PT0gIFRva2Vucy5JTkMgfHwgdG9rZW4gPT09IFRva2Vucy5ERUMpIHsKLSAg
ICAgICAgICAgIHRoaXMuX25leHQoKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW5z
LkRFTEVURSB8fCB0b2tlbiA9PT0gVG9rZW5zLlRZUEVPRiB8fCB0b2tlbiA9PT0gVG9rZW5zLlZP
SUQpCi0gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAgICAgICAg
ICAgdGhpcy5fcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5fcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOwotICAgIH0sCi0KLSAg
ICBfcGFyc2VQb3N0Zml4RXhwcmVzc2lvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCk7Ci0gICAgICAgIHZhciB0b2tlbiA9IHRo
aXMuX3BlZWsoKTsKLSAgICAgICAgaWYgKCF0aGlzLl9oYXNMaW5lVGVybWluYXRvckJlZm9yZU5l
eHQoKSAmJiAodG9rZW4gPT09IFRva2Vucy5JTkMgfHwgdG9rZW4gPT09IFRva2Vucy5ERUMpKQot
ICAgICAgICAgICAgdGhpcy5fbmV4dCgpOwotICAgIH0sCi0KLSAgICBfcGFyc2VMZWZ0SGFuZFNp
ZGVFeHByZXNzaW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcGVlaygp
ID09PSBUb2tlbnMuTkVXKQotICAgICAgICAgICAgdGhpcy5fcGFyc2VOZXdFeHByZXNzaW9uKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3BhcnNlTWVtYmVyRXhwcmVzc2lvbigp
OwotCi0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3Bl
ZWsoKSkgewotICAgICAgICAgICAgY2FzZSBUb2tlbnMuTEJSQUNLOgotICAgICAgICAgICAgICAg
IHRoaXMuX2NvbnN1bWUoVG9rZW5zLkxCUkFDSyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGFy
c2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5SQlJB
Q0spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFRva2Vucy5M
UEFSRU46Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VBcmd1bWVudHMoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBUb2tlbnMuUEVSSU9EOgotICAgICAg
ICAgICAgICAgIHRoaXMuX2NvbnN1bWUoVG9rZW5zLlBFUklPRCk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fZXhwZWN0KFRva2Vucy5JREVOVElGSUVSKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3BhcnNlTmV3RXhwcmVzc2lvbjogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5ORVcpOwotICAgICAg
ICB0aGlzLl9idWlsZGVyLmFkZFNwYWNlKCk7Ci0gICAgICAgIGlmICh0aGlzLl9wZWVrKCkgPT09
IFRva2Vucy5ORVcpCi0gICAgICAgICAgICB0aGlzLl9wYXJzZU5ld0V4cHJlc3Npb24oKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fcGFyc2VNZW1iZXJFeHByZXNzaW9uKCk7Ci0g
ICAgfSwKLQotICAgIF9wYXJzZU1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9wZWVrKCkgPT09IFRva2Vucy5GVU5DVElPTikgewotICAgICAgICAg
ICAgdGhpcy5fZXhwZWN0KFRva2Vucy5GVU5DVElPTik7Ci0gICAgICAgICAgICBpZiAodGhpcy5f
cGVlaygpID09PSBUb2tlbnMuSURFTlRJRklFUikgewotICAgICAgICAgICAgICAgIHRoaXMuX2J1
aWxkZXIuYWRkU3BhY2UoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLklE
RU5USUZJRVIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fcGFyc2VGdW5jdGlv
bkxpdGVyYWwoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9wYXJzZVByaW1h
cnlFeHByZXNzaW9uKCk7Ci0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAodGhpcy5fcGVlaygpKSB7Ci0gICAgICAgICAgICBjYXNlIFRva2Vucy5MQlJBQ0s6Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fY29uc3VtZShUb2tlbnMuTEJSQUNLKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9leHBl
Y3QoVG9rZW5zLlJCUkFDSyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgVG9rZW5zLlBFUklPRDoKLSAgICAgICAgICAgICAgICB0aGlzLl9jb25zdW1lKFRva2Vu
cy5QRVJJT0QpOwotICAgICAgICAgICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuSURFTlRJRklF
Uik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgVG9rZW5zLkxQ
QVJFTjoKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZUFyZ3VtZW50cygpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcGFyc2VEZWJ1
Z2dlclN0YXRlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZXhwZWN0KFRv
a2Vucy5ERUJVR0dFUik7Ci0gICAgICAgIHRoaXMuX2V4cGVjdFNlbWljb2xvbigpOwotICAgIH0s
Ci0KLSAgICBfcGFyc2VQcmltYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoICh0aGlzLl9wZWVrKCkpIHsKLSAgICAgICAgY2FzZSBUb2tlbnMuVEhJUzoKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdW1lKFRva2Vucy5USElTKTsKLSAgICAgICAgY2Fz
ZSBUb2tlbnMuTlVMTF9MSVRFUkFMOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN1bWUo
VG9rZW5zLk5VTExfTElURVJBTCk7Ci0gICAgICAgIGNhc2UgVG9rZW5zLlRSVUVfTElURVJBTDoK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdW1lKFRva2Vucy5UUlVFX0xJVEVSQUwpOwot
ICAgICAgICBjYXNlIFRva2Vucy5GQUxTRV9MSVRFUkFMOgotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2NvbnN1bWUoVG9rZW5zLkZBTFNFX0xJVEVSQUwpOwotICAgICAgICBjYXNlIFRva2Vucy5J
REVOVElGSUVSOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN1bWUoVG9rZW5zLklERU5U
SUZJRVIpOwotICAgICAgICBjYXNlIFRva2Vucy5OVU1CRVI6Ci0gICAgICAgICAgICByZXR1cm4g
dGhpcy5fY29uc3VtZShUb2tlbnMuTlVNQkVSKTsKLSAgICAgICAgY2FzZSBUb2tlbnMuU1RSSU5H
OgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN1bWUoVG9rZW5zLlNUUklORyk7Ci0gICAg
ICAgIGNhc2UgVG9rZW5zLkFTU0lHTl9ESVY6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFy
c2VSZWdFeHBMaXRlcmFsKCk7Ci0gICAgICAgIGNhc2UgVG9rZW5zLkRJVjoKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9wYXJzZVJlZ0V4cExpdGVyYWwoKTsKLSAgICAgICAgY2FzZSBUb2tlbnMu
TEJSQUNLOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlQXJyYXlMaXRlcmFsKCk7Ci0g
ICAgICAgIGNhc2UgVG9rZW5zLkxCUkFDRToKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJz
ZU9iamVjdExpdGVyYWwoKTsKLSAgICAgICAgY2FzZSBUb2tlbnMuTFBBUkVOOgotICAgICAgICAg
ICAgdGhpcy5fY29uc3VtZShUb2tlbnMuTFBBUkVOKTsKLSAgICAgICAgICAgIHRoaXMuX3BhcnNl
RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5SUEFSRU4pOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX25leHQoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcGFyc2VBcnJheUxpdGVy
YWw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuTEJSQUNL
KTsKLSAgICAgICAgdGhpcy5fYnVpbGRlci5pbmNyZWFzZU5lc3RpbmdMZXZlbCgpOwotICAgICAg
ICB3aGlsZSAodGhpcy5fcGVlaygpICE9PSBUb2tlbnMuUkJSQUNLKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5fcGVlaygpICE9PSBUb2tlbnMuQ09NTUEpCi0gICAgICAgICAgICAgICAgdGhpcy5f
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgaWYgKHRoaXMuX3BlZWso
KSAhPT0gVG9rZW5zLlJCUkFDSykgewotICAgICAgICAgICAgICAgIHRoaXMuX2V4cGVjdChUb2tl
bnMuQ09NTUEpOwotICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3BhY2UoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB0aGlzLl9idWlsZGVyLmRlY3JlYXNlTmVz
dGluZ0xldmVsKCk7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuUkJSQUNLKTsKLSAgICB9
LAotCi0gICAgX3BhcnNlT2JqZWN0TGl0ZXJhbEdldFNldDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5fcGVlaygpOwotICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2Vucy5JREVOVElGSUVSIHx8IHRva2VuID09PSBUb2tlbnMuTlVNQkVSIHx8IHRva2VuID09PSBU
b2tlbnMuU1RSSU5HIHx8Ci0gICAgICAgICAgICBUb2tlbnMuREVMRVRFIDw9IHRva2VuICYmIHRv
a2VuIDw9IFRva2Vucy5GQUxTRV9MSVRFUkFMIHx8Ci0gICAgICAgICAgICB0b2tlbiA9PT0gVG9r
ZW5zLklOU1RBTkNFT0YgfHwgdG9rZW4gPT09IFRva2Vucy5JTiB8fCB0b2tlbiA9PT0gVG9rZW5z
LkNPTlNUKSB7Ci0gICAgICAgICAgICB0aGlzLl9uZXh0KCk7Ci0gICAgICAgICAgICB0aGlzLl9w
YXJzZUZ1bmN0aW9uTGl0ZXJhbCgpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9wYXJzZU9i
amVjdExpdGVyYWw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tl
bnMuTEJSQUNFKTsKLSAgICAgICAgdGhpcy5fYnVpbGRlci5pbmNyZWFzZU5lc3RpbmdMZXZlbCgp
OwotICAgICAgICB3aGlsZSAodGhpcy5fcGVlaygpICE9PSBUb2tlbnMuUkJSQUNFKSB7Ci0gICAg
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLl9wZWVrKCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICAgICAgICBjYXNlIFRva2Vucy5JREVOVElGSUVSOgotICAgICAgICAgICAg
ICAgIHRoaXMuX2NvbnN1bWUoVG9rZW5zLklERU5USUZJRVIpOwotICAgICAgICAgICAgICAgIHZh
ciBuYW1lID0gdGhpcy5fdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKChuYW1lID09
PSAiZ2V0IiB8fCBuYW1lID09PSAic2V0IikgJiYgdGhpcy5fcGVlaygpICE9PSBUb2tlbnMuQ09M
T04pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZU9iamVjdExpdGVyYWxHZXRTZXQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZWsoKSAhPT0gVG9rZW5zLlJCUkFDRSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vucy5DT01NQSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFRva2Vu
cy5TVFJJTkc6Ci0gICAgICAgICAgICAgICAgdGhpcy5fY29uc3VtZShUb2tlbnMuU1RSSU5HKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBUb2tlbnMuTlVNQkVS
OgotICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN1bWUoVG9rZW5zLk5VTUJFUik7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
dGhpcy5fbmV4dCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLl9leHBlY3Qo
VG9rZW5zLkNPTE9OKTsKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkU3BhY2UoKTsKLSAg
ICAgICAgICAgIHRoaXMuX3BhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAg
IGlmICh0aGlzLl9wZWVrKCkgIT09IFRva2Vucy5SQlJBQ0UpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLl9leHBlY3QoVG9rZW5zLkNPTU1BKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICB0aGlzLl9idWlsZGVyLmRlY3JlYXNlTmVzdGluZ0xldmVsKCk7Ci0KLSAgICAgICAgdGhp
cy5fZXhwZWN0KFRva2Vucy5SQlJBQ0UpOwotICAgIH0sCi0KLSAgICBfcGFyc2VSZWdFeHBMaXRl
cmFsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbmV4dFRva2VuLnR5cGUg
PT09ICJyZWdleHAiKQotICAgICAgICAgICAgdGhpcy5fbmV4dCgpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHRoaXMuX2ZvcmNlUmVnZXhwID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMu
X25leHQoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcGFyc2VBcmd1bWVudHM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuTFBBUkVOKTsKLSAgICAg
ICAgdmFyIGRvbmUgPSAodGhpcy5fcGVlaygpID09PSBUb2tlbnMuUlBBUkVOKTsKLSAgICAgICAg
d2hpbGUgKCFkb25lKSB7Ci0gICAgICAgICAgICB0aGlzLl9wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7Ci0gICAgICAgICAgICBkb25lID0gKHRoaXMuX3BlZWsoKSA9PT0gVG9rZW5zLlJQQVJF
Tik7Ci0gICAgICAgICAgICBpZiAoIWRvbmUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9leHBl
Y3QoVG9rZW5zLkNPTU1BKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFkZFNwYWNl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZXhwZWN0KFRva2Vu
cy5SUEFSRU4pOwotICAgIH0sCi0KLSAgICBfcGFyc2VGdW5jdGlvbkxpdGVyYWw6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuTFBBUkVOKTsKLSAgICAgICAg
dmFyIGRvbmUgPSAodGhpcy5fcGVlaygpID09PSBUb2tlbnMuUlBBUkVOKTsKLSAgICAgICAgd2hp
bGUgKCFkb25lKSB7Ci0gICAgICAgICAgICB0aGlzLl9leHBlY3QoVG9rZW5zLklERU5USUZJRVIp
OwotICAgICAgICAgICAgZG9uZSA9ICh0aGlzLl9wZWVrKCkgPT09IFRva2Vucy5SUEFSRU4pOwot
ICAgICAgICAgICAgaWYgKCFkb25lKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZXhwZWN0KFRv
a2Vucy5DT01NQSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2V4cGVjdChUb2tlbnMuUlBB
UkVOKTsKLSAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRTcGFjZSgpOwotCi0gICAgICAgIHRoaXMu
X2V4cGVjdChUb2tlbnMuTEJSQUNFKTsKLSAgICAgICAgdGhpcy5fYnVpbGRlci5hZGROZXdMaW5l
KCk7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIuaW5jcmVhc2VOZXN0aW5nTGV2ZWwoKTsKLSAgICAg
ICAgdGhpcy5fcGFyc2VTb3VyY2VFbGVtZW50cyhUb2tlbnMuUkJSQUNFKTsKLSAgICAgICAgdGhp
cy5fYnVpbGRlci5kZWNyZWFzZU5lc3RpbmdMZXZlbCgpOwotICAgICAgICB0aGlzLl9leHBlY3Qo
VG9rZW5zLlJCUkFDRSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0U291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWM1MWFkZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDYwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlRnJhbWV9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWx9IHNjcmlwdHNQYW5lbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3Vy
Y2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAqLwotV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VG
cmFtZSA9IGZ1bmN0aW9uKHNjcmlwdHNQYW5lbCwgdWlTb3VyY2VDb2RlKQotewotICAgIHRoaXMu
X3NjcmlwdHNQYW5lbCA9IHNjcmlwdHNQYW5lbDsKLSAgICB0aGlzLl9icmVha3BvaW50TWFuYWdl
ciA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlcjsKLSAgICB0aGlzLl91aVNvdXJjZUNv
ZGUgPSB1aVNvdXJjZUNvZGU7Ci0KLSAgICBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlRnJhbWUu
Y2FsbCh0aGlzLCB1aVNvdXJjZUNvZGUpOwotICAgIGlmICh1aVNvdXJjZUNvZGUucHJvamVjdCgp
LnR5cGUoKSA9PT0gV2ViSW5zcGVjdG9yLnByb2plY3RUeXBlcy5EZWJ1Z2dlcikKLSAgICAgICAg
dGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS1mcmFtZS1kZWJ1Z2dlci1zY3JpcHQi
KTsKLQotICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBv
cG92ZXJIZWxwZXIodGhpcy50ZXh0RWRpdG9yLmVsZW1lbnQsCi0gICAgICAgICAgICB0aGlzLl9n
ZXRQb3BvdmVyQW5jaG9yLmJpbmQodGhpcyksIHRoaXMuX3Jlc29sdmVPYmplY3RGb3JQb3BvdmVy
LmJpbmQodGhpcyksIHRoaXMuX29uSGlkZVBvcG92ZXIuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0KLSAg
ICB0aGlzLnRleHRFZGl0b3IuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhp
cy5fb25LZXlEb3duLmJpbmQodGhpcyksIHRydWUpOwotCi0gICAgdGhpcy50ZXh0RWRpdG9yLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnRzLkd1dHRlckNsaWNr
LCB0aGlzLl9oYW5kbGVHdXR0ZXJDbGljay5iaW5kKHRoaXMpLCB0aGlzKTsKLQotICAgIHRoaXMu
X2JyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwg
dGhpcyk7Ci0gICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlz
Ll9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7Ci0KLSAgICB0aGlzLl91aVNvdXJjZUNvZGUuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Db25zb2xlTWVz
c2FnZUFkZGVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzKTsKLSAgICB0aGlzLl91
aVNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2
ZW50cy5Db25zb2xlTWVzc2FnZVJlbW92ZWQsIHRoaXMuX2NvbnNvbGVNZXNzYWdlUmVtb3ZlZCwg
dGhpcyk7Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlVJU291cmNlQ29kZS5FdmVudHMuQ29uc29sZU1lc3NhZ2VzQ2xlYXJlZCwgdGhpcy5fY29u
c29sZU1lc3NhZ2VzQ2xlYXJlZCwgdGhpcyk7Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuU291cmNlTWFwcGlu
Z0NoYW5nZWQsIHRoaXMuX29uU291cmNlTWFwcGluZ0NoYW5nZWQsIHRoaXMpOwotICAgIHRoaXMu
X3VpU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUu
RXZlbnRzLldvcmtpbmdDb3B5Q2hhbmdlZCwgdGhpcy5fd29ya2luZ0NvcHlDaGFuZ2VkLCB0aGlz
KTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
VUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29weUNvbW1pdHRlZCwgdGhpcy5fd29ya2luZ0Nv
cHlDb21taXR0ZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fdXBkYXRlU2NyaXB0RmlsZSgpOwotfQot
Ci1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKLSAgICAv
LyBWaWV3IGV2ZW50cwotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlRnJhbWUucHJvdG90eXBlLndhc1Nob3duLmNhbGwodGhp
cyk7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlRnJhbWUucHJvdG90eXBlLndpbGxIaWRlLmNhbGwodGhp
cyk7Ci0gICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQKLSAgICAgKi8KLSAgICBv
blVJU291cmNlQ29kZUNvbnRlbnRDaGFuZ2VkOiBmdW5jdGlvbihjb250ZW50LCBjb250ZW50RW5j
b2RlZCwgbWltZVR5cGUpCi0gICAgewotICAgICAgICB0aGlzLl9yZW1vdmVBbGxCcmVha3BvaW50
cygpOwotICAgICAgICBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlRnJhbWUucHJvdG90eXBlLm9u
VUlTb3VyY2VDb2RlQ29udGVudENoYW5nZWQuY2FsbCh0aGlzLCBjb250ZW50KTsKLSAgICB9LAot
Ci0gICAgcG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51
LCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/
ICJDb250aW51ZSB0byBoZXJlIiA6ICJDb250aW51ZSB0byBIZXJlIiksIHRoaXMuX2NvbnRpbnVl
VG9MaW5lLmJpbmQodGhpcywgbGluZU51bWJlcikpOwotCi0gICAgICAgIHZhciBicmVha3BvaW50
ID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuZmluZEJyZWFrcG9pbnQodGhpcy5fdWlTb3VyY2VD
b2RlLCBsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50KSB7Ci0gICAgICAgICAg
ICAvLyBUaGlzIHJvdyBkb2Vzbid0IGhhdmUgYSBicmVha3BvaW50OiBXZSB3YW50IHRvIHNob3cg
QWRkIEJyZWFrcG9pbnQgYW5kIEFkZCBhbmQgRWRpdCBCcmVha3BvaW50LgotICAgICAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9y
LnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJBZGQgYnJlYWtwb2ludCIgOiAiQWRkIEJyZWFr
cG9pbnQiKSwgdGhpcy5fc2V0QnJlYWtwb2ludC5iaW5kKHRoaXMsIGxpbmVOdW1iZXIsICIiLCB0
cnVlKSk7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkFkZCBjb25k
aXRpb25hbCBicmVha3BvaW504oCmIiA6ICJBZGQgQ29uZGl0aW9uYWwgQnJlYWtwb2ludOKApiIp
LCB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMsIGxpbmVOdW1iZXIpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcm93IGhhcyBhIGJyZWFrcG9p
bnQsIHdlIHdhbnQgdG8gc2hvdyBlZGl0IGFuZCByZW1vdmUgYnJlYWtwb2ludCwgYW5kIGVpdGhl
ciBkaXNhYmxlIG9yIGVuYWJsZS4KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVz
KCkgPyAiUmVtb3ZlIGJyZWFrcG9pbnQiIDogIlJlbW92ZSBCcmVha3BvaW50IiksIGJyZWFrcG9p
bnQucmVtb3ZlLmJpbmQoYnJlYWtwb2ludCkpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1l
bnVUaXRsZXMoKSA/ICJFZGl0IGJyZWFrcG9pbnTigKYiIDogIkVkaXQgQnJlYWtwb2ludOKApiIp
LCB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMsIGxpbmVOdW1iZXIsIGJy
ZWFrcG9pbnQpKTsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQoKSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhX
ZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkRpc2FibGUgYnJlYWtwb2lu
dCIgOiAiRGlzYWJsZSBCcmVha3BvaW50IiksIGJyZWFrcG9pbnQuc2V0RW5hYmxlZC5iaW5kKGJy
ZWFrcG9pbnQsIGZhbHNlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVz
ZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJFbmFibGUgYnJlYWtwb2ludCIgOiAiRW5hYmxlIEJy
ZWFrcG9pbnQiKSwgYnJlYWtwb2ludC5zZXRFbmFibGVkLmJpbmQoYnJlYWtwb2ludCwgdHJ1ZSkp
OwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHBvcHVsYXRlVGV4dEFyZWFDb250ZXh0TWVudTog
ZnVuY3Rpb24oY29udGV4dE1lbnUsIGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICB2YXIgc2Vs
ZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLnR5
cGUgPT09ICJSYW5nZSIgJiYgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkgewotICAgICAgICAgICAg
dmFyIGFkZFRvV2F0Y2hMYWJlbCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3Iu
dXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkFkZCB0byB3YXRjaCIgOiAiQWRkIHRvIFdhdGNo
Iik7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKGFkZFRvV2F0Y2hMYWJlbCwg
dGhpcy5fc2NyaXB0c1BhbmVsLmFkZFRvV2F0Y2guYmluZCh0aGlzLl9zY3JpcHRzUGFuZWwsIHNl
bGVjdGlvbi50b1N0cmluZygpKSk7Ci0gICAgICAgICAgICB2YXIgZXZhbHVhdGVMYWJlbCA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygp
ID8gIkV2YWx1YXRlIGluIGNvbnNvbGUiIDogIkV2YWx1YXRlIGluIENvbnNvbGUiKTsKLSAgICAg
ICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oZXZhbHVhdGVMYWJlbCwgV2ViSW5zcGVjdG9y
LmV2YWx1YXRlSW5Db25zb2xlLmJpbmQoV2ViSW5zcGVjdG9yLCBzZWxlY3Rpb24udG9TdHJpbmco
KSkpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoIXRoaXMuX3VpU291cmNlQ29kZS5pc0VkaXRhYmxlKCkgJiYgdGhpcy5fdWlT
b3VyY2VDb2RlLmNvbnRlbnRUeXBlKCkgPT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlNj
cmlwdCkgewotICAgICAgICAgICAgZnVuY3Rpb24gbGl2ZUVkaXQoZXZlbnQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpdmVFZGl0VUlTb3VyY2VDb2RlID0gV2ViSW5zcGVj
dG9yLmxpdmVFZGl0U3VwcG9ydC51aVNvdXJjZUNvZGVGb3JMaXZlRWRpdCh0aGlzLl91aVNvdXJj
ZUNvZGUpOwotICAgICAgICAgICAgICAgIHRoaXMuX3NjcmlwdHNQYW5lbC5zaG93VUlTb3VyY2VD
b2RlKGxpdmVFZGl0VUlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyKQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBGSVhNRTogQ2hhbmdlIGNvbmRpdGlvbiBhYm92ZSB0byBleHBsaWNpdGx5
IGNoZWNrIHRoYXQgY3VycmVudCB1aVNvdXJjZUNvZGUgaXMgY3JlYXRlZCBieSBkZWZhdWx0IGRl
YnVnZ2VyIG1hcHBpbmcKLSAgICAgICAgICAgIC8vIGFuZCBtb3ZlIHRoZSBjb2RlIGFkZGluZyB0
aGlzIG1lbnUgaXRlbSB0byBnZW5lcmljIGNvbnRleHQgbWVudSBwcm92aWRlciBmb3IgVUlTb3Vy
Y2VDb2RlLgotICAgICAgICAgICAgdmFyIGxpdmVFZGl0TGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJMaXZlIGVkaXQi
IDogIkxpdmUgRWRpdCIpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShsaXZl
RWRpdExhYmVsLCBsaXZlRWRpdC5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgIGNvbnRleHRNZW51
LmFwcGVuZFNlcGFyYXRvcigpOwotICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGVGcmFtZS5wcm90b3R5cGUucG9wdWxhdGVUZXh0QXJlYUNvbnRleHRNZW51LmNhbGwo
dGhpcywgY29udGV4dE1lbnUsIGxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICBfd29ya2luZ0Nv
cHlDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zdXBw
b3J0c0VuYWJsZWRCcmVha3BvaW50c1doaWxlRWRpdGluZygpIHx8IHRoaXMuX3NjcmlwdEZpbGUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX3VpU291cmNlQ29kZS5p
c0RpcnR5KCkpCi0gICAgICAgICAgICB0aGlzLl9tdXRlQnJlYWtwb2ludHNXaGlsZUVkaXRpbmco
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fcmVzdG9yZUJyZWFrcG9pbnRzQWZ0
ZXJFZGl0aW5nKCk7Ci0gICAgfSwKLQotICAgIF93b3JraW5nQ29weUNvbW1pdHRlZDogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc3VwcG9ydHNFbmFibGVkQnJlYWtw
b2ludHNXaGlsZUVkaXRpbmcoKSB8fCB0aGlzLl9zY3JpcHRGaWxlKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0aGlzLl9yZXN0b3JlQnJlYWtwb2ludHNBZnRlckVkaXRpbmcoKTsKLSAg
ICB9LAotCi0gICAgX2RpZE1lcmdlVG9WTTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX3N1cHBvcnRzRW5hYmxlZEJyZWFrcG9pbnRzV2hpbGVFZGl0aW5nKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3Jlc3RvcmVCcmVha3BvaW50c0FmdGVyRWRpdGlu
ZygpOwotICAgIH0sCi0KLSAgICBfZGlkRGl2ZXJnZUZyb21WTTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX3N1cHBvcnRzRW5hYmxlZEJyZWFrcG9pbnRzV2hpbGVFZGl0aW5n
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX211dGVCcmVha3BvaW50c1do
aWxlRWRpdGluZygpOwotICAgIH0sCi0KLSAgICBfbXV0ZUJyZWFrcG9pbnRzV2hpbGVFZGl0aW5n
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbXV0ZWQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwg
dGhpcy5fdGV4dEVkaXRvci5saW5lc0NvdW50OyArK2xpbmVOdW1iZXIpIHsKLSAgICAgICAgICAg
IHZhciBicmVha3BvaW50RGVjb3JhdGlvbiA9IHRoaXMuX3RleHRFZGl0b3IuZ2V0QXR0cmlidXRl
KGxpbmVOdW1iZXIsICJicmVha3BvaW50Iik7Ci0gICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRE
ZWNvcmF0aW9uKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdGhpcy5f
cmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24obGluZU51bWJlcik7Ci0gICAgICAgICAgICB0aGlz
Ll9hZGRCcmVha3BvaW50RGVjb3JhdGlvbihsaW5lTnVtYmVyLCBicmVha3BvaW50RGVjb3JhdGlv
bi5jb25kaXRpb24sIGJyZWFrcG9pbnREZWNvcmF0aW9uLmVuYWJsZWQsIHRydWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMuX211dGVkID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgX3N1cHBvcnRz
RW5hYmxlZEJyZWFrcG9pbnRzV2hpbGVFZGl0aW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2RlLnByb2plY3QoKS50eXBlKCkgPT09IFdlYkluc3Bl
Y3Rvci5wcm9qZWN0VHlwZXMuU25pcHBldHM7Ci0gICAgfSwKLQotICAgIF9yZXN0b3JlQnJlYWtw
b2ludHNBZnRlckVkaXRpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlz
Ll9tdXRlZDsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0ge307Ci0gICAgICAgIC8vIFNhdmUg
YW5kIHJlbW92ZSBtdXRlZCBicmVha3BvaW50IGRlY29yYXRpb25zLgotICAgICAgICBmb3IgKHZh
ciBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IHRoaXMuX3RleHRFZGl0b3IubGluZXNDb3Vu
dDsgKytsaW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludERlY29yYXRpb24g
PSB0aGlzLl90ZXh0RWRpdG9yLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIp
OwotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnREZWNvcmF0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgYnJlYWtwb2ludHNbbGluZU51bWJlcl0gPSBicmVha3BvaW50RGVjb3JhdGlvbjsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVjb3JhdGlvbihsaW5lTnVtYmVyKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlbW92ZSBhbGwgYnJlYWtw
b2ludHMuCi0gICAgICAgIHRoaXMuX3JlbW92ZUFsbEJyZWFrcG9pbnRzKCk7Ci0KLSAgICAgICAg
Ly8gUmVzdG9yZSBhbGwgYnJlYWtwb2ludHMgZnJvbSBzYXZlZCBkZWNvcmF0aW9ucy4KLSAgICAg
ICAgZm9yICh2YXIgbGluZU51bWJlclN0cmluZyBpbiBicmVha3BvaW50cykgewotICAgICAgICAg
ICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJzZUludChsaW5lTnVtYmVyU3RyaW5nLCAxMCk7Ci0gICAg
ICAgICAgICBpZiAoaXNOYU4obGluZU51bWJlcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludERlY29yYXRpb24gPSBicmVha3BvaW50c1tsaW5l
TnVtYmVyU3RyaW5nXTsKLSAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQobGluZU51bWJl
ciwgYnJlYWtwb2ludERlY29yYXRpb24uY29uZGl0aW9uLCBicmVha3BvaW50RGVjb3JhdGlvbi5l
bmFibGVkKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcmVtb3ZlQWxsQnJlYWtwb2ludHM6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX2JyZWFr
cG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlKHRoaXMuX3VpU291cmNlQ29k
ZSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBicmVha3BvaW50c1tpXS5yZW1vdmUoKTsKLSAgICB9LAotCi0gICAgX2dl
dFBvcG92ZXJBbmNob3I6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50KQotICAgIHsKLSAgICAgICAg
aWYgKCFXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5pc1BhdXNlZCgpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudHlwZSA9PT0g
IlJhbmdlIikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciB0ZXh0UG9z
aXRpb24gPSB0aGlzLnRleHRFZGl0b3IuY29vcmRpbmF0ZXNUb0N1cnNvclBvc2l0aW9uKGV2ZW50
LngsIGV2ZW50LnkpOwotICAgICAgICBpZiAoIXRleHRQb3NpdGlvbikKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotCi0gICAgICAgIHZhciB0b2tlbiA9IHRoaXMudGV4dEVkaXRvci50b2tlbkF0
VGV4dFBvc2l0aW9uKHRleHRQb3NpdGlvbi5zdGFydExpbmUsIHRleHRQb3NpdGlvbi5zdGFydENv
bHVtbik7Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0ZXh0UG9zaXRpb24uc3RhcnRMaW5lOwotICAgICAgICB2
YXIgbGluZSA9IHRoaXMudGV4dEVkaXRvci5saW5lKGxpbmVOdW1iZXIpOwotICAgICAgICB2YXIg
dG9rZW5Db250ZW50ID0gbGluZS5zdWJzdHJpbmcodG9rZW4uc3RhcnRDb2x1bW4sIHRva2VuLmVu
ZENvbHVtbiArIDEpOwotICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gImphdmFzY3JpcHQtaWRl
bnQiICYmICh0b2tlbi50eXBlICE9PSAiamF2YXNjcmlwdC1rZXl3b3JkIiB8fCB0b2tlbkNvbnRl
bnQgIT09ICJ0aGlzIikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIg
bGVmdENvcm5lciA9IHRoaXMudGV4dEVkaXRvci5jdXJzb3JQb3NpdGlvblRvQ29vcmRpbmF0ZXMo
bGluZU51bWJlciwgdG9rZW4uc3RhcnRDb2x1bW4pOwotICAgICAgICB2YXIgcmlnaHRDb3JuZXIg
PSB0aGlzLnRleHRFZGl0b3IuY3Vyc29yUG9zaXRpb25Ub0Nvb3JkaW5hdGVzKGxpbmVOdW1iZXIs
IHRva2VuLmVuZENvbHVtbiArIDEpOwotICAgICAgICB2YXIgYW5jaG9yQm94ID0gbmV3IEFuY2hv
ckJveChsZWZ0Q29ybmVyLngsIGxlZnRDb3JuZXIueSwgcmlnaHRDb3JuZXIueCAtIGxlZnRDb3Ju
ZXIueCwgbGVmdENvcm5lci5oZWlnaHQpOwotCi0gICAgICAgIGFuY2hvckJveC50b2tlbiA9IHRv
a2VuOwotICAgICAgICBhbmNob3JCb3gubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0KLSAgICAg
ICAgcmV0dXJuIGFuY2hvckJveDsKLSAgICB9LAotCi0gICAgX3Jlc29sdmVPYmplY3RGb3JQb3Bv
dmVyOiBmdW5jdGlvbihhbmNob3JCb3gsIHNob3dDYWxsYmFjaywgb2JqZWN0R3JvdXBOYW1lKQot
ICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P1J1bnRpbWVBZ2VudC5SZW1v
dGVPYmplY3R9IHJlc3VsdAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3YXNUaHJvd24K
LSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHNob3dPYmplY3RQb3BvdmVyKHJlc3VsdCwg
d2FzVGhyb3duKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmlzUGF1c2VkKCkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVySGVs
cGVyLmhpZGVQb3BvdmVyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckFuY2hvckJveCA9IGFuY2hvckJveDsKLSAgICAg
ICAgICAgIHNob3dDYWxsYmFjayhXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2Fk
KHJlc3VsdCksIHdhc1Rocm93biwgdGhpcy5fcG9wb3ZlckFuY2hvckJveCk7Ci0gICAgICAgICAg
ICAvLyBQb3BvdmVyIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCBieSBzaG93Q2FsbGJhY2soKS4KLSAg
ICAgICAgICAgIGlmICh0aGlzLl9wb3BvdmVyQW5jaG9yQm94KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGhpZ2hsaWdodFJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UoYW5jaG9yQm94
LmxpbmVOdW1iZXIsIHN0YXJ0SGlnaGxpZ2h0LCBhbmNob3JCb3gubGluZU51bWJlciwgZW5kSGln
aGxpZ2h0KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVyQW5jaG9yQm94Ll9oaWdobGln
aHREZXNjcmlwdG9yID0gdGhpcy50ZXh0RWRpdG9yLmhpZ2hsaWdodFJhbmdlKGhpZ2hsaWdodFJh
bmdlLCAic291cmNlLWZyYW1lLWV2YWwtZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5pc1BhdXNl
ZCgpKSB7Ci0gICAgICAgICAgICB0aGlzLl9wb3BvdmVySGVscGVyLmhpZGVQb3BvdmVyKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgc3RhcnRIaWdobGln
aHQgPSBhbmNob3JCb3gudG9rZW4uc3RhcnRDb2x1bW47Ci0gICAgICAgIHZhciBlbmRIaWdobGln
aHQgPSBhbmNob3JCb3gudG9rZW4uZW5kQ29sdW1uOwotICAgICAgICB2YXIgbGluZSA9IHRoaXMu
dGV4dEVkaXRvci5saW5lKGFuY2hvckJveC5saW5lTnVtYmVyKTsKLSAgICAgICAgd2hpbGUgKHN0
YXJ0SGlnaGxpZ2h0ID4gMSAmJiBsaW5lLmNoYXJBdChzdGFydEhpZ2hsaWdodCAtIDEpID09PSAn
LicpCi0gICAgICAgICAgICBzdGFydEhpZ2hsaWdodCA9IHRoaXMudGV4dEVkaXRvci50b2tlbkF0
VGV4dFBvc2l0aW9uKGFuY2hvckJveC5saW5lTnVtYmVyLCBzdGFydEhpZ2hsaWdodCAtIDIpLnN0
YXJ0Q29sdW1uOwotICAgICAgICB2YXIgZXZhbHVhdGlvblRleHQgPSBsaW5lLnN1YnN0cmluZyhz
dGFydEhpZ2hsaWdodCwgZW5kSGlnaGxpZ2h0ICsgMSk7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGVk
Q2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2VsZWN0ZWRDYWxsRnJhbWUo
KTsKLSAgICAgICAgc2VsZWN0ZWRDYWxsRnJhbWUuZXZhbHVhdGUoZXZhbHVhdGlvblRleHQsIG9i
amVjdEdyb3VwTmFtZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgc2hvd09iamVjdFBvcG92
ZXIuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIF9vbkhpZGVQb3BvdmVyOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXJBbmNob3JCb3gpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9wb3BvdmVyQW5jaG9yQm94Ll9oaWdobGlnaHRE
ZXNjcmlwdG9yKQotICAgICAgICAgICAgdGhpcy50ZXh0RWRpdG9yLnJlbW92ZUhpZ2hsaWdodCh0
aGlzLl9wb3BvdmVyQW5jaG9yQm94Ll9oaWdobGlnaHREZXNjcmlwdG9yKTsKLSAgICAgICAgZGVs
ZXRlIHRoaXMuX3BvcG92ZXJBbmNob3JCb3g7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmRpdGlv
bgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZAotICAgICAqIEBwYXJhbSB7Ym9vbGVh
bn0gbXV0ZWRXaGlsZUVkaXRpbmcKLSAgICAgKi8KLSAgICBfYWRkQnJlYWtwb2ludERlY29yYXRp
b246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCwgbXV0ZWRXaGlsZUVk
aXRpbmcpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHsKLSAgICAgICAgICAgIGNv
bmRpdGlvbjogY29uZGl0aW9uLAotICAgICAgICAgICAgZW5hYmxlZDogZW5hYmxlZAotICAgICAg
ICB9OwotCi0gICAgICAgIHRoaXMudGV4dEVkaXRvci5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwg
ImJyZWFrcG9pbnQiLCBicmVha3BvaW50KTsKLQotICAgICAgICB2YXIgZGlzYWJsZWQgPSAhZW5h
YmxlZCB8fCBtdXRlZFdoaWxlRWRpdGluZzsKLSAgICAgICAgdGhpcy50ZXh0RWRpdG9yLmFkZEJy
ZWFrcG9pbnQobGluZU51bWJlciwgZGlzYWJsZWQsICEhY29uZGl0aW9uKTsKLSAgICB9LAotCi0g
ICAgX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAg
IHsKLSAgICAgICAgdGhpcy50ZXh0RWRpdG9yLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAi
YnJlYWtwb2ludCIpOwotICAgICAgICB0aGlzLnRleHRFZGl0b3IucmVtb3ZlQnJlYWtwb2ludChs
aW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAgX29uS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAxQiIpIHsgLy8g
RXNjYXBlIGtleQotICAgICAgICAgICAgaWYgKHRoaXMuX3BvcG92ZXJIZWxwZXIuaXNQb3BvdmVy
VmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9w
b3ZlcigpOwotICAgICAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZU51bWJlcgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJy
ZWFrcG9pbnQ9fSBicmVha3BvaW50Ci0gICAgICovCi0gICAgX2VkaXRCcmVha3BvaW50Q29uZGl0
aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBicmVha3BvaW50KQotICAgIHsKLSAgICAgICAgdGhp
cy5fY29uZGl0aW9uRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNvbmRpdGlvbkVsZW1lbnQobGluZU51
bWJlcik7Ci0gICAgICAgIHRoaXMudGV4dEVkaXRvci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIs
IHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOwotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmlzaEVkaXRp
bmcoY29tbWl0dGVkLCBlbGVtZW50LCBuZXdUZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICB0
aGlzLnRleHRFZGl0b3IucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlzLl9jb25kaXRp
b25FbGVtZW50KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVt
ZW50OwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQ7Ci0gICAgICAg
ICAgICBpZiAoYnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICBicmVha3BvaW50LnNldENvbmRp
dGlvbihuZXdUZXh0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9z
ZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIG5ld1RleHQsIHRydWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIGNvbmZpZyA9IG5ldyBXZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZyhmaW5pc2hF
ZGl0aW5nLmJpbmQodGhpcywgdHJ1ZSksIGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCBmYWxzZSkp
OwotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX2NvbmRpdGlvbkVkaXRv
ckVsZW1lbnQsIGNvbmZpZyk7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQu
dmFsdWUgPSBicmVha3BvaW50ID8gYnJlYWtwb2ludC5jb25kaXRpb24oKSA6ICIiOwotICAgICAg
ICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LnNlbGVjdCgpOwotICAgIH0sCi0KLSAgICBf
Y3JlYXRlQ29uZGl0aW9uRWxlbWVudDogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAg
ICAgIHZhciBjb25kaXRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0gICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1mcmFtZS1icmVh
a3BvaW50LWNvbmRpdGlvbiI7Ci0KLSAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7Ci0gICAgICAgIGxhYmVsRWxlbWVudC5jbGFzc05hbWUg
PSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtbWVzc2FnZSI7Ci0gICAgICAgIGxhYmVsRWxlbWVu
dC5odG1sRm9yID0gInNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlvbiI7Ci0gICAgICAg
IGxhYmVsRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlRoZSBicmVha3BvaW50IG9uIGxpbmUgJWQgd2lsbCBzdG9wIG9ubHkg
aWYgdGhpcyBleHByZXNzaW9uIGlzIHRydWU6IiwgbGluZU51bWJlcikpKTsKLSAgICAgICAgY29u
ZGl0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOwotCi0gICAgICAgIHZhciBl
ZGl0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAg
ZWRpdG9yRWxlbWVudC5pZCA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1jb25kaXRpb24iOwot
ICAgICAgICBlZGl0b3JFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOwotICAgICAgICBl
ZGl0b3JFbGVtZW50LnR5cGUgPSAidGV4dCI7Ci0gICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZWRpdG9yRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVs
ZW1lbnQgPSBlZGl0b3JFbGVtZW50OwotCi0gICAgICAgIHJldHVybiBjb25kaXRpb25FbGVtZW50
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgot
ICAgICAqLwotICAgIHNldEV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAg
ewotICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAg
ICAgaWYgKHRoaXMubG9hZGVkKSB7Ci0gICAgICAgICAgICB0aGlzLnRleHRFZGl0b3Iuc2V0RXhl
Y3V0aW9uTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIHRoaXMucmV2ZWFsTGluZSh0aGlz
Ll9leGVjdXRpb25MaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmNhbkVkaXRTb3Vy
Y2UoKSkKLSAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihXZWJJbnNwZWN0b3IuVGV4
dFJhbmdlLmNyZWF0ZUZyb21Mb2NhdGlvbihsaW5lTnVtYmVyLCAwKSk7Ci0gICAgICAgIH0KLSAg
ICB9LAotCi0gICAgY2xlYXJFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5sb2FkZWQgJiYgdHlwZW9mIHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIgPT09
ICJudW1iZXIiKQotICAgICAgICAgICAgdGhpcy50ZXh0RWRpdG9yLmNsZWFyRXhlY3V0aW9uTGlu
ZSgpOwotICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcjsKLSAgICB9LAot
Ci0gICAgX2xpbmVOdW1iZXJBZnRlckVkaXRpbmc6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIG9sZFJh
bmdlLCBuZXdSYW5nZSkKLSAgICB7Ci0gICAgICAgIHZhciBzaGlmdE9mZnNldCA9IGxpbmVOdW1i
ZXIgPD0gb2xkUmFuZ2Uuc3RhcnRMaW5lID8gMCA6IG5ld1JhbmdlLmxpbmVzQ291bnQgLSBvbGRS
YW5nZS5saW5lc0NvdW50OwotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBvZiBlZGl0aW5nIHRo
ZSBsaW5lIGl0c2VsZi4gV2Ugc2hvdWxkIGRlY2lkZSB3aGV0aGVyIHRoZSBsaW5lIG51bWJlciBz
aG91bGQgbW92ZSBiZWxvdyBvciBub3QuCi0gICAgICAgIGlmIChsaW5lTnVtYmVyID09PSBvbGRS
YW5nZS5zdGFydExpbmUpIHsKLSAgICAgICAgICAgIHZhciB3aGl0ZVNwYWNlc1JlZ2V4ID0gL15b
XHNceEEwXSokLzsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBsaW5lTnVtYmVyICsgaSA8
PSBuZXdSYW5nZS5lbmRMaW5lOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdoaXRlU3Bh
Y2VzUmVnZXgudGVzdCh0aGlzLnRleHRFZGl0b3IubGluZShsaW5lTnVtYmVyICsgaSkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNoaWZ0T2Zmc2V0ID0gaTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIG5ld0xpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCBsaW5lTnVtYmVyICsgc2hpZnRP
ZmZzZXQpOwotICAgICAgICBpZiAob2xkUmFuZ2Uuc3RhcnRMaW5lIDwgbGluZU51bWJlciAmJiBs
aW5lTnVtYmVyIDwgb2xkUmFuZ2UuZW5kTGluZSkKLSAgICAgICAgICAgIG5ld0xpbmVOdW1iZXIg
PSBvbGRSYW5nZS5zdGFydExpbmU7Ci0gICAgICAgIHJldHVybiBuZXdMaW5lTnVtYmVyOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9z
aG91bGRJZ25vcmVFeHRlcm5hbEJyZWFrcG9pbnRFdmVudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9zdXBwb3J0c0VuYWJsZWRCcmVha3BvaW50c1doaWxlRWRpdGluZygp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodGhpcy5fbXV0ZWQpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdEZpbGUg
JiYgKHRoaXMuX3NjcmlwdEZpbGUuaXNEaXZlcmdpbmdGcm9tVk0oKSB8fCB0aGlzLl9zY3JpcHRG
aWxlLmlzTWVyZ2luZ1RvVk0oKSk7Ci0gICAgfSwKLQotICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHVpTG9jYXRpb24gPSAvKiogQHR5cGUg
e1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufSAqLyAoZXZlbnQuZGF0YS51aUxvY2F0aW9uKTsKLSAg
ICAgICAgaWYgKHVpTG9jYXRpb24udWlTb3VyY2VDb2RlICE9PSB0aGlzLl91aVNvdXJjZUNvZGUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9zaG91bGRJZ25vcmVFeHRl
cm5hbEJyZWFrcG9pbnRFdmVudHMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LkJyZWFrcG9pbnR9ICovIChldmVudC5kYXRhLmJyZWFrcG9pbnQpOwotICAgICAgICBpZiAodGhp
cy5sb2FkZWQpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50RGVjb3JhdGlvbih1aUxv
Y2F0aW9uLmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uKCksIGJyZWFrcG9pbnQuZW5h
YmxlZCgpLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IC8qKiBAdHlwZSB7V2Vi
SW5zcGVjdG9yLlVJTG9jYXRpb259ICovIChldmVudC5kYXRhLnVpTG9jYXRpb24pOwotICAgICAg
ICBpZiAodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUgIT09IHRoaXMuX3VpU291cmNlQ29kZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX3Nob3VsZElnbm9yZUV4dGVybmFs
QnJlYWtwb2ludEV2ZW50cygpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBi
cmVha3BvaW50ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludH0gKi8gKGV2ZW50LmRhdGEuYnJlYWtwb2ludCk7Ci0gICAgICAgIHZhciByZW1haW5p
bmdCcmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuZmluZEJyZWFrcG9pbnQodGhp
cy5fdWlTb3VyY2VDb2RlLCB1aUxvY2F0aW9uLmxpbmVOdW1iZXIpOwotICAgICAgICBpZiAoIXJl
bWFpbmluZ0JyZWFrcG9pbnQgJiYgdGhpcy5sb2FkZWQpCi0gICAgICAgICAgICB0aGlzLl9yZW1v
dmVCcmVha3BvaW50RGVjb3JhdGlvbih1aUxvY2F0aW9uLmxpbmVOdW1iZXIpOwotICAgIH0sCi0K
LSAgICBfY29uc29sZU1lc3NhZ2VBZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgbWVzc2FnZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlByZXNlbnRhdGlvbkNvbnNv
bGVNZXNzYWdlfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIGlmICh0aGlzLmxvYWRlZCkKLSAg
ICAgICAgICAgIHRoaXMuYWRkTWVzc2FnZVRvU291cmNlKG1lc3NhZ2UubGluZU51bWJlciwgbWVz
c2FnZS5vcmlnaW5hbE1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICBfY29uc29sZU1lc3NhZ2VSZW1v
dmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gLyoqIEB0
eXBlIHtXZWJJbnNwZWN0b3IuUHJlc2VudGF0aW9uQ29uc29sZU1lc3NhZ2V9ICovIChldmVudC5k
YXRhKTsKLSAgICAgICAgaWYgKHRoaXMubG9hZGVkKQotICAgICAgICAgICAgdGhpcy5yZW1vdmVN
ZXNzYWdlRnJvbVNvdXJjZShtZXNzYWdlLmxpbmVOdW1iZXIsIG1lc3NhZ2Uub3JpZ2luYWxNZXNz
YWdlKTsKLSAgICB9LAotCi0gICAgX2NvbnNvbGVNZXNzYWdlc0NsZWFyZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5jbGVhck1lc3NhZ2VzKCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwot
ICAgIF9vblNvdXJjZU1hcHBpbmdDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0ZVNjcmlwdEZpbGUoKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVNjcmlw
dEZpbGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zY3JpcHRGaWxlKSB7
Ci0gICAgICAgICAgICB0aGlzLl9zY3JpcHRGaWxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLlNjcmlwdEZpbGUuRXZlbnRzLkRpZE1lcmdlVG9WTSwgdGhpcy5fZGlkTWVyZ2VUb1ZN
LCB0aGlzKTsKLSAgICAgICAgICAgIHRoaXMuX3NjcmlwdEZpbGUucmVtb3ZlRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuU2NyaXB0RmlsZS5FdmVudHMuRGlkRGl2ZXJnZUZyb21WTSwgdGhpcy5f
ZGlkRGl2ZXJnZUZyb21WTSwgdGhpcyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fbXV0ZWQgJiYg
IXRoaXMuX3VpU291cmNlQ29kZS5pc0RpcnR5KCkpCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVz
dG9yZUJyZWFrcG9pbnRzQWZ0ZXJFZGl0aW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5f
c2NyaXB0RmlsZSA9IHRoaXMuX3VpU291cmNlQ29kZS5zY3JpcHRGaWxlKCk7Ci0gICAgICAgIGlm
ICh0aGlzLl9zY3JpcHRGaWxlKSB7Ci0gICAgICAgICAgICB0aGlzLl9zY3JpcHRGaWxlLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNjcmlwdEZpbGUuRXZlbnRzLkRpZE1lcmdlVG9WTSwg
dGhpcy5fZGlkTWVyZ2VUb1ZNLCB0aGlzKTsKLSAgICAgICAgICAgIHRoaXMuX3NjcmlwdEZpbGUu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2NyaXB0RmlsZS5FdmVudHMuRGlkRGl2ZXJn
ZUZyb21WTSwgdGhpcy5fZGlkRGl2ZXJnZUZyb21WTSwgdGhpcyk7Ci0gICAgCi0gICAgICAgICAg
ICBpZiAodGhpcy5sb2FkZWQpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2NyaXB0RmlsZS5jaGVj
a01hcHBpbmcoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBvblRleHRFZGl0b3JDb250ZW50
TG9hZGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2V4ZWN1
dGlvbkxpbmVOdW1iZXIgPT09ICJudW1iZXIiKQotICAgICAgICAgICAgdGhpcy5zZXRFeGVjdXRp
b25MaW5lKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpOwotCi0gICAgICAgIHZhciBicmVha3Bv
aW50TG9jYXRpb25zID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludExvY2F0aW9u
c0ZvclVJU291cmNlQ29kZSh0aGlzLl91aVNvdXJjZUNvZGUpOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGJyZWFrcG9pbnRMb2NhdGlvbnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0
aGlzLl9icmVha3BvaW50QWRkZWQoe2RhdGE6YnJlYWtwb2ludExvY2F0aW9uc1tpXX0pOwotCi0g
ICAgICAgIHZhciBtZXNzYWdlcyA9IHRoaXMuX3VpU291cmNlQ29kZS5jb25zb2xlTWVzc2FnZXMo
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKLSAgICAgICAgICAgIHRoaXMu
YWRkTWVzc2FnZVRvU291cmNlKG1lc3NhZ2UubGluZU51bWJlciwgbWVzc2FnZS5vcmlnaW5hbE1l
c3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5fc2NyaXB0Rmls
ZSkKLSAgICAgICAgICAgIHRoaXMuX3NjcmlwdEZpbGUuY2hlY2tNYXBwaW5nKCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2hh
bmRsZUd1dHRlckNsaWNrOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9tdXRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbGluZU51bWJlciA9
IGV2ZW50LmRhdGEubGluZU51bWJlcjsKLSAgICAgICAgdmFyIGV2ZW50T2JqZWN0ID0gLyoqIEB0
eXBlIHtFdmVudH0gKi8gKGV2ZW50LmRhdGEuZXZlbnQpOwotCi0gICAgICAgIGlmIChldmVudE9i
amVjdC5idXR0b24gIT0gMCB8fCBldmVudE9iamVjdC5hbHRLZXkgfHwgZXZlbnRPYmplY3QuY3Ry
bEtleSB8fCBldmVudE9iamVjdC5tZXRhS2V5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHRoaXMuX3RvZ2dsZUJyZWFrcG9pbnQobGluZU51bWJlciwgZXZlbnRPYmplY3Quc2hpZnRL
ZXkpOwotICAgICAgICBldmVudE9iamVjdC5jb25zdW1lKHRydWUpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gb25seURpc2FibGUKLSAgICAgKi8KLSAgICBfdG9nZ2xlQnJlYWtwb2ludDogZnVuY3Rp
b24obGluZU51bWJlciwgb25seURpc2FibGUpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLmZpbmRCcmVha3BvaW50KHRoaXMuX3VpU291cmNl
Q29kZSwgbGluZU51bWJlcik7Ci0gICAgICAgIGlmIChicmVha3BvaW50KSB7Ci0gICAgICAgICAg
ICBpZiAob25seURpc2FibGUpCi0gICAgICAgICAgICAgICAgYnJlYWtwb2ludC5zZXRFbmFibGVk
KCFicmVha3BvaW50LmVuYWJsZWQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlz
Ll9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsICIiLCB0cnVlKTsKLSAgICB9LAotCi0gICAgdG9n
Z2xlQnJlYWtwb2ludE9uQ3VycmVudExpbmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9tdXRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgc2VsZWN0
aW9uID0gdGhpcy50ZXh0RWRpdG9yLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoIXNlbGVjdGlv
bikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fdG9nZ2xlQnJlYWtwb2ludChz
ZWxlY3Rpb24uc3RhcnRMaW5lLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmRpdGlv
bgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZAotICAgICAqLwotICAgIF9zZXRCcmVh
a3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpCi0gICAgewot
ICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KHRoaXMuX3VpU291
cmNlQ29kZSwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKTsKLQotICAgICAgICBXZWJJ
bnNwZWN0b3Iubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlVzZXJNZXRyaWNzLlVzZXJBY3Rpb24sIHsKLSAgICAgICAgICAgIGFjdGlvbjogV2ViSW5z
cGVjdG9yLlVzZXJNZXRyaWNzLlVzZXJBY3Rpb25OYW1lcy5TZXRCcmVha3BvaW50LAotICAgICAg
ICAgICAgdXJsOiB0aGlzLl91aVNvdXJjZUNvZGUub3JpZ2luVVJMKCksCi0gICAgICAgICAgICBs
aW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgZW5hYmxlZDogZW5hYmxlZAotICAgICAgICB9
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIK
LSAgICAgKi8KLSAgICBfY29udGludWVUb0xpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAg
ewotICAgICAgICB2YXIgcmF3TG9jYXRpb24gPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLkxvY2F0aW9ufSAqLyAodGhpcy5fdWlTb3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jh
d0xvY2F0aW9uKGxpbmVOdW1iZXIsIDApKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuY29udGludWVUb0xvY2F0aW9uKHJhd0xvY2F0aW9uKTsKLSAgICB9LAotCi0gICAgZGlz
cG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIu
cmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRz
LkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKLSAgICAgICAg
dGhpcy5fYnJlYWtwb2ludE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3Bv
aW50UmVtb3ZlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5yZW1vdmVFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLkNvbnNvbGVNZXNzYWdl
QWRkZWQsIHRoaXMuX2NvbnNvbGVNZXNzYWdlQWRkZWQsIHRoaXMpOwotICAgICAgICB0aGlzLl91
aVNvdXJjZUNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
LkV2ZW50cy5Db25zb2xlTWVzc2FnZVJlbW92ZWQsIHRoaXMuX2NvbnNvbGVNZXNzYWdlUmVtb3Zl
ZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5yZW1vdmVFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLkNvbnNvbGVNZXNzYWdlc0NsZWFyZWQs
IHRoaXMuX2NvbnNvbGVNZXNzYWdlc0NsZWFyZWQsIHRoaXMpOwotICAgICAgICB0aGlzLl91aVNv
dXJjZUNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2
ZW50cy5Tb3VyY2VNYXBwaW5nQ2hhbmdlZCwgdGhpcy5fb25Tb3VyY2VNYXBwaW5nQ2hhbmdlZCwg
dGhpcyk7Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5yZW1vdmVFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLldvcmtpbmdDb3B5Q2hhbmdlZCwgdGhpcy5f
d29ya2luZ0NvcHlDaGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlLnJl
bW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuV29ya2lu
Z0NvcHlDb21taXR0ZWQsIHRoaXMuX3dvcmtpbmdDb3B5Q29tbWl0dGVkLCB0aGlzKTsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZUZyYW1lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwo
dGhpcyk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZUZyYW1lLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9LZXlib2FyZFNob3J0Y3V0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9LZXlib2FyZFNob3J0Y3V0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5NmQ4ZTZlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvS2V5Ym9hcmRTaG9ydGN1dC5qcworKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
ID0gZnVuY3Rpb24oKQotewotfQotCi0vKioKLSAqIENvbnN0YW50cyBmb3IgZW5jb2RpbmcgbW9k
aWZpZXIga2V5IHNldCBhcyBhIGJpdCBtYXNrLgotICogQHNlZSAjX21ha2VLZXlGcm9tQ29kZUFu
ZE1vZGlmaWVycwotICovCi1XZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMg
PSB7Ci0gICAgTm9uZTogMCwgICAvLyBDb25zdGFudCBmb3IgZW1wdHkgbW9kaWZpZXJzIHNldC4K
LSAgICBTaGlmdDogMSwKLSAgICBDdHJsOiAyLAotICAgIEFsdDogNCwKLSAgICBNZXRhOiA4LCAg
IC8vIENvbW1hbmQga2V5IG9uIE1hYywgV2luIGtleSBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAg
Z2V0IEN0cmxPck1ldGEoKQotICAgIHsKLSAgICAgICAgLy8gImRlZmF1bHQiIGNvbW1hbmQvY3Ry
bCBrZXkgZm9yIHBsYXRmb3JtLCBDb21tYW5kIG9uIE1hYywgQ3RybCBvbiBvdGhlciBwbGF0Zm9y
bXMKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5pc01hYygpID8gdGhpcy5NZXRhIDogdGhp
cy5DdHJsOwotICAgIH0KLX07Ci0KLS8qKiBAdHlwZWRlZiB7e2NvZGU6IG51bWJlciwgbmFtZTog
KHN0cmluZ3xPYmplY3QuPHN0cmluZywgc3RyaW5nPil9fSAqLwotV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQuS2V5OwotCi0vKiogQHR5cGUgeyFPYmplY3QuPHN0cmluZywgIVdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0LktleT59ICovCi1XZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5LZXlzID0gewotICAgIEJhY2tzcGFjZTogeyBjb2RlOiA4LCBuYW1lOiAiXHUyMWE0IiB9
LAotICAgIFRhYjogeyBjb2RlOiA5LCBuYW1lOiB7IG1hYzogIlx1MjFlNSIsIG90aGVyOiAiPFRh
Yj4iIH0gfSwKLSAgICBFbnRlcjogeyBjb2RlOiAxMywgbmFtZTogeyBtYWM6ICJcdTIxYTkiLCBv
dGhlcjogIjxFbnRlcj4iIH0gfSwKLSAgICBFc2M6IHsgY29kZTogMjcsIG5hbWU6IHsgbWFjOiAi
XHUyMzhiIiwgb3RoZXI6ICI8RXNjPiIgfSB9LAotICAgIFNwYWNlOiB7IGNvZGU6IDMyLCBuYW1l
OiAiPFNwYWNlPiIgfSwKLSAgICBQYWdlVXA6IHsgY29kZTogMzMsICBuYW1lOiB7IG1hYzogIlx1
MjFkZSIsIG90aGVyOiAiPFBhZ2VVcD4iIH0gfSwgICAgICAvLyBhbHNvIE5VTV9OT1JUSF9FQVNU
Ci0gICAgUGFnZURvd246IHsgY29kZTogMzQsIG5hbWU6IHsgbWFjOiAiXHUyMWRmIiwgb3RoZXI6
ICI8UGFnZURvd24+IiB9IH0sICAgLy8gYWxzbyBOVU1fU09VVEhfRUFTVAotICAgIEVuZDogeyBj
b2RlOiAzNSwgbmFtZTogeyBtYWM6ICJcdTIxOTciLCBvdGhlcjogIjxFbmQ+IiB9IH0sICAgICAg
ICAgICAgIC8vIGFsc28gTlVNX1NPVVRIX1dFU1QKLSAgICBIb21lOiB7IGNvZGU6IDM2LCBuYW1l
OiB7IG1hYzogIlx1MjE5NiIsIG90aGVyOiAiPEhvbWU+IiB9IH0sICAgICAgICAgICAvLyBhbHNv
IE5VTV9OT1JUSF9XRVNUCi0gICAgTGVmdDogeyBjb2RlOiAzNywgbmFtZTogIjxMZWZ0PiIgfSwg
ICAgICAgICAgIC8vIGFsc28gTlVNX1dFU1QKLSAgICBVcDogeyBjb2RlOiAzOCwgbmFtZTogIjxV
cD4iIH0sICAgICAgICAgICAgIC8vIGFsc28gTlVNX05PUlRICi0gICAgUmlnaHQ6IHsgY29kZTog
MzksIG5hbWU6ICI8UmlnaHQ+IiB9LCAgICAgICAgICAvLyBhbHNvIE5VTV9FQVNUCi0gICAgRG93
bjogeyBjb2RlOiA0MCwgbmFtZTogIjxEb3duPiIgfSwgICAgICAgICAgIC8vIGFsc28gTlVNX1NP
VVRICi0gICAgRGVsZXRlOiB7IGNvZGU6IDQ2LCBuYW1lOiAiPERlbD4iIH0sCi0gICAgWmVybzog
eyBjb2RlOiA0OCwgbmFtZTogIjAiIH0sCi0gICAgRjE6IHsgY29kZTogMTEyLCBuYW1lOiAiRjEi
IH0sCi0gICAgRjI6IHsgY29kZTogMTEzLCBuYW1lOiAiRjIiIH0sCi0gICAgRjM6IHsgY29kZTog
MTE0LCBuYW1lOiAiRjMiIH0sCi0gICAgRjQ6IHsgY29kZTogMTE1LCBuYW1lOiAiRjQiIH0sCi0g
ICAgRjU6IHsgY29kZTogMTE2LCBuYW1lOiAiRjUiIH0sCi0gICAgRjY6IHsgY29kZTogMTE3LCBu
YW1lOiAiRjYiIH0sCi0gICAgRjc6IHsgY29kZTogMTE4LCBuYW1lOiAiRjciIH0sCi0gICAgRjg6
IHsgY29kZTogMTE5LCBuYW1lOiAiRjgiIH0sCi0gICAgRjk6IHsgY29kZTogMTIwLCBuYW1lOiAi
RjkiIH0sCi0gICAgRjEwOiB7IGNvZGU6IDEyMSwgbmFtZTogIkYxMCIgfSwKLSAgICBGMTE6IHsg
Y29kZTogMTIyLCBuYW1lOiAiRjExIiB9LAotICAgIEYxMjogeyBjb2RlOiAxMjMsIG5hbWU6ICJG
MTIiIH0sCi0gICAgU2VtaWNvbG9uOiB7IGNvZGU6IDE4NiwgbmFtZTogIjsiIH0sCi0gICAgUGx1
czogeyBjb2RlOiAxODcsIG5hbWU6ICIrIiB9LAotICAgIENvbW1hOiB7IGNvZGU6IDE4OCwgbmFt
ZTogIiwiIH0sCi0gICAgTWludXM6IHsgY29kZTogMTg5LCBuYW1lOiAiLSIgfSwKLSAgICBQZXJp
b2Q6IHsgY29kZTogMTkwLCBuYW1lOiAiLiIgfSwKLSAgICBTbGFzaDogeyBjb2RlOiAxOTEsIG5h
bWU6ICIvIiB9LAotICAgIEFwb3N0cm9waGU6IHsgY29kZTogMTkyLCBuYW1lOiAiYCIgfSwKLSAg
ICBTaW5nbGVRdW90ZTogeyBjb2RlOiAyMjIsIG5hbWU6ICJcJyIgfSwKLSAgICBIOiB7IGNvZGU6
IDcyLCBuYW1lOiAiSCIgfQotfTsKLQotLyoqCi0gKiBDcmVhdGVzIGEgbnVtYmVyIGVuY29kaW5n
IGtleUNvZGUgaW4gdGhlIGxvd2VyIDggYml0cyBhbmQgbW9kaWZpZXJzIG1hc2sgaW4gdGhlIGhp
Z2hlciA4IGJpdHMuCi0gKiBJdCBpcyB1c2VmdWwgZm9yIG1hdGNoaW5nIHByZXNzZWQga2V5cy4K
LSAqCi0gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGtleUNvZGUgVGhlIENvZGUgb2YgdGhlIGtl
eSwgb3IgYSBjaGFyYWN0ZXIgImEteiIgd2hpY2ggaXMgY29udmVydGVkIHRvIGEga2V5Q29kZSB2
YWx1ZS4KLSAqIEBwYXJhbSB7bnVtYmVyPX0gbW9kaWZpZXJzIE9wdGlvbmFsIGxpc3Qgb2YgbW9k
aWZpZXJzIHBhc3NlZCBhcyBhZGRpdGlvbmFsIHBhcmFtZXJ0ZXJzLgotICogQHJldHVybiB7bnVt
YmVyfQotICovCi1XZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5ID0gZnVuY3Rp
b24oa2V5Q29kZSwgbW9kaWZpZXJzKQotewotICAgIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gInN0
cmluZyIpCi0gICAgICAgIGtleUNvZGUgPSBrZXlDb2RlLmNoYXJDb2RlQXQoMCkgLSAzMjsKLSAg
ICBtb2RpZmllcnMgPSBtb2RpZmllcnMgfHwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQu
TW9kaWZpZXJzLk5vbmU7Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
Ll9tYWtlS2V5RnJvbUNvZGVBbmRNb2RpZmllcnMoa2V5Q29kZSwgbW9kaWZpZXJzKTsKLX0KLQot
LyoqCi0gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGtleWJvYXJkRXZlbnQKLSAqIEByZXR1cm4g
e251bWJlcn0KLSAqLwotV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleUZyb21F
dmVudCA9IGZ1bmN0aW9uKGtleWJvYXJkRXZlbnQpCi17Ci0gICAgdmFyIG1vZGlmaWVycyA9IFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5Ob25lOwotICAgIGlmIChrZXli
b2FyZEV2ZW50LnNoaWZ0S2V5KQotICAgICAgICBtb2RpZmllcnMgfD0gV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLlNoaWZ0OwotICAgIGlmIChrZXlib2FyZEV2ZW50LmN0
cmxLZXkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5Nb2RpZmllcnMuQ3RybDsKLSAgICBpZiAoa2V5Ym9hcmRFdmVudC5hbHRLZXkpCi0gICAgICAg
IG1vZGlmaWVycyB8PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQWx0
OwotICAgIGlmIChrZXlib2FyZEV2ZW50Lm1ldGFLZXkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuTWV0YTsKLSAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuX21ha2VLZXlGcm9tQ29kZUFuZE1vZGlmaWVy
cyhrZXlib2FyZEV2ZW50LmtleUNvZGUsIG1vZGlmaWVycyk7Ci19Ci0KLS8qKgotICogQHBhcmFt
IHtLZXlib2FyZEV2ZW50fSBldmVudAotICogQHJldHVybiB7Ym9vbGVhbn0KLSAqLwotV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhID0gZnVuY3Rpb24oZXZl
bnQpCi17Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5pc01hYygpID8gZXZlbnQubWV0YUtleSAm
JiAhZXZlbnQuY3RybEtleSA6IGV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXk7Ci19Ci0K
LS8qKgotICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudAotICogQHJldHVybiB7Ym9vbGVh
bn0KLSAqLwotV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuaGFzTm9Nb2RpZmllcnMgPSBm
dW5jdGlvbihldmVudCkKLXsKLSAgICByZXR1cm4gIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LnNo
aWZ0S2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50Lm1ldGFLZXk7Ci19Ci0KLS8qKiBAdHlw
ZWRlZiB7e2tleTogbnVtYmVyLCBuYW1lOiBzdHJpbmd9fSAqLwotV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQuRGVzY3JpcHRvcjsKLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ3xXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXl9IGtleQotICogQHBhcmFtIHtudW1iZXI9fSBtb2Rp
ZmllcnMKLSAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LkRlc2NyaXB0
b3J9Ci0gKi8KLVdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yID0g
ZnVuY3Rpb24oa2V5LCBtb2RpZmllcnMpCi17Ci0gICAgcmV0dXJuIHsKLSAgICAgICAga2V5OiBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KHR5cGVvZiBrZXkgPT09ICJzdHJp
bmciID8ga2V5IDoga2V5LmNvZGUsIG1vZGlmaWVycyksCi0gICAgICAgIG5hbWU6IFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0LnNob3J0Y3V0VG9TdHJpbmcoa2V5LCBtb2RpZmllcnMpCi0g
ICAgfTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ3xXZWJJbnNwZWN0b3IuS2V5Ym9hcmRT
aG9ydGN1dC5LZXl9IGtleQotICogQHBhcmFtIHtudW1iZXI9fSBtb2RpZmllcnMKLSAqIEByZXR1
cm4ge3N0cmluZ30KLSAqLwotV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuc2hvcnRjdXRU
b1N0cmluZyA9IGZ1bmN0aW9uKGtleSwgbW9kaWZpZXJzKQotewotICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5fbW9kaWZpZXJzVG9TdHJpbmcobW9kaWZpZXJzKSArIFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Ll9rZXlOYW1lKGtleSk7Ci19Ci0KLS8qKgotICog
QHBhcmFtIHtzdHJpbmd8V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5fSBrZXkKLSAq
IEByZXR1cm4ge3N0cmluZ30KLSAqLwotV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuX2tl
eU5hbWUgPSBmdW5jdGlvbihrZXkpCi17Ci0gICAgaWYgKHR5cGVvZiBrZXkgPT09ICJzdHJpbmci
KQotICAgICAgICByZXR1cm4ga2V5LnRvVXBwZXJDYXNlKCk7Ci0gICAgaWYgKHR5cGVvZiBrZXku
bmFtZSA9PT0gInN0cmluZyIpCi0gICAgICAgIHJldHVybiBrZXkubmFtZTsKLSAgICByZXR1cm4g
a2V5Lm5hbWVbV2ViSW5zcGVjdG9yLnBsYXRmb3JtKCldIHx8IGtleS5uYW1lLm90aGVyIHx8ICcn
OwotfQotCi0vKioKLSAqIEBwYXJhbSB7bnVtYmVyfSBrZXlDb2RlCi0gKiBAcGFyYW0gez9udW1i
ZXJ9IG1vZGlmaWVycwotICogQHJldHVybiB7bnVtYmVyfQotICovCi1XZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5fbWFrZUtleUZyb21Db2RlQW5kTW9kaWZpZXJzID0gZnVuY3Rpb24oa2V5
Q29kZSwgbW9kaWZpZXJzKQotewotICAgIHJldHVybiAoa2V5Q29kZSAmIDI1NSkgfCAobW9kaWZp
ZXJzIDw8IDgpOwotfTsKLQotLyoqCi0gKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IG1vZGlm
aWVycwotICogQHJldHVybiB7c3RyaW5nfQotICovCi1XZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5fbW9kaWZpZXJzVG9TdHJpbmcgPSBmdW5jdGlvbihtb2RpZmllcnMpCi17Ci0gICAgY29u
c3QgY21kS2V5ID0gIlx1MjMxOCI7Ci0gICAgY29uc3Qgb3B0S2V5ID0gIlx1MjMyNSI7Ci0gICAg
Y29uc3Qgc2hpZnRLZXkgPSAiXHUyMWU3IjsKLSAgICBjb25zdCBjdHJsS2V5ID0gIlx1MjMwMyI7
Ci0KLSAgICB2YXIgaXNNYWMgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKTsKLSAgICB2YXIgcmVzID0g
IiI7Ci0gICAgaWYgKG1vZGlmaWVycyAmIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVycy5DdHJsKQotICAgICAgICByZXMgKz0gaXNNYWMgPyBjdHJsS2V5IDogIjxDdHJsPiAr
ICI7Ci0gICAgaWYgKG1vZGlmaWVycyAmIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVycy5BbHQpCi0gICAgICAgIHJlcyArPSBpc01hYyA/IG9wdEtleSA6ICI8QWx0PiArICI7
Ci0gICAgaWYgKG1vZGlmaWVycyAmIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlm
aWVycy5TaGlmdCkKLSAgICAgICAgcmVzICs9IGlzTWFjID8gc2hpZnRLZXkgOiAiPFNoaWZ0PiAr
ICI7Ci0gICAgaWYgKG1vZGlmaWVycyAmIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVycy5NZXRhKQotICAgICAgICByZXMgKz0gaXNNYWMgPyBjbWRLZXkgOiAiPFdpbj4gKyAi
OwotCi0gICAgcmV0dXJuIHJlczsKLX07Ci0KLVdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LlNlbGVjdEFsbCA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoImEiLCBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3RybE9yTWV0YSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0xpbmtpZmllci5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTGlua2lmaWVyLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQxMTBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTGlua2lmaWVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MTgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotV2ViSW5zcGVjdG9yLkxpbmtpZmll
ckZvcm1hdHRlciA9IGZ1bmN0aW9uKCkKLXsKLX0KLQotV2ViSW5zcGVjdG9yLkxpbmtpZmllckZv
cm1hdHRlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSBh
bmNob3IKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufSB1aUxvY2F0aW9u
Ci0gICAgICovCi0gICAgZm9ybWF0TGl2ZUFuY2hvcjogZnVuY3Rpb24oYW5jaG9yLCB1aUxvY2F0
aW9uKSB7IH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkxpbmtpZmllckZvcm1hdHRlcj19IGZvcm1hdHRlcgotICovCi1XZWJJbnNwZWN0b3IuTGlu
a2lmaWVyID0gZnVuY3Rpb24oZm9ybWF0dGVyKQotewotICAgIHRoaXMuX2Zvcm1hdHRlciA9IGZv
cm1hdHRlciB8fCBuZXcgV2ViSW5zcGVjdG9yLkxpbmtpZmllci5EZWZhdWx0Rm9ybWF0dGVyKFdl
Ykluc3BlY3Rvci5MaW5raWZpZXIuTWF4TGVuZ3RoRm9yRGlzcGxheWVkVVJMcyk7Ci0gICAgdGhp
cy5fbGl2ZUxvY2F0aW9ucyA9IFtdOwotfQotCi1XZWJJbnNwZWN0b3IuTGlua2lmaWVyLnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlVVJMCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IGNv
bHVtbk51bWJlcgotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gY2xhc3NlcwotICAgICAqIEByZXR1
cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgbGlua2lmeUxvY2F0aW9uOiBmdW5jdGlvbihzb3Vy
Y2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY2xhc3NlcykKLSAgICB7Ci0gICAgICAg
IHZhciByYXdMb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmNyZWF0ZVJhd0xv
Y2F0aW9uQnlVUkwoc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIgfHwgMCk7Ci0g
ICAgICAgIGlmICghcmF3TG9jYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LmxpbmtpZnlSZXNvdXJjZUFzTm9kZShzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNsYXNzZXMpOwot
ICAgICAgICByZXR1cm4gdGhpcy5saW5raWZ5UmF3TG9jYXRpb24ocmF3TG9jYXRpb24sIGNsYXNz
ZXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLkxvY2F0aW9ufSByYXdMb2NhdGlvbgotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0g
Y2xhc3NlcwotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgbGlua2lmeVJh
d0xvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbiwgY2xhc3NlcykKLSAgICB7Ci0gICAgICAg
IHZhciBzY3JpcHQgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRGb3JJZChyYXdM
b2NhdGlvbi5zY3JpcHRJZCk7Ci0gICAgICAgIGlmICghc2NyaXB0KQotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIHZhciBhbmNob3IgPSBXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFz
Tm9kZSgiIiwgIiIsIGNsYXNzZXMsIGZhbHNlKTsKLSAgICAgICAgdmFyIGxpdmVMb2NhdGlvbiA9
IHNjcmlwdC5jcmVhdGVMaXZlTG9jYXRpb24ocmF3TG9jYXRpb24sIHRoaXMuX3VwZGF0ZUFuY2hv
ci5iaW5kKHRoaXMsIGFuY2hvcikpOwotICAgICAgICB0aGlzLl9saXZlTG9jYXRpb25zLnB1c2go
bGl2ZUxvY2F0aW9uKTsKLSAgICAgICAgcmV0dXJuIGFuY2hvcjsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1NTUnVsZX0gcnVsZQotICAgICAqIEByZXR1
cm4gez9FbGVtZW50fQotICAgICAqLwotICAgIGxpbmtpZnlDU1NSdWxlTG9jYXRpb246IGZ1bmN0
aW9uKHJ1bGUpCi0gICAgewotICAgICAgICB2YXIgYW5jaG9yID0gV2ViSW5zcGVjdG9yLmxpbmtp
ZnlVUkxBc05vZGUoIiIsICIiLCAiIiwgZmFsc2UpOwotICAgICAgICB2YXIgbGl2ZUxvY2F0aW9u
ID0gV2ViSW5zcGVjdG9yLmNzc01vZGVsLmNyZWF0ZUxpdmVMb2NhdGlvbihydWxlLCB0aGlzLl91
cGRhdGVBbmNob3IuYmluZCh0aGlzLCBhbmNob3IpKTsKLSAgICAgICAgaWYgKCFsaXZlTG9jYXRp
b24pCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdGhpcy5fbGl2ZUxvY2F0aW9u
cy5wdXNoKGxpdmVMb2NhdGlvbik7Ci0gICAgICAgIHJldHVybiBhbmNob3I7Ci0gICAgfSwKLQot
ICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX2xpdmVMb2NhdGlvbnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9saXZl
TG9jYXRpb25zW2ldLmRpc3Bvc2UoKTsKLSAgICAgICAgdGhpcy5fbGl2ZUxvY2F0aW9ucyA9IFtd
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGFuY2hvcgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259IHVpTG9jYXRpb24KLSAgICAgKi8K
LSAgICBfdXBkYXRlQW5jaG9yOiBmdW5jdGlvbihhbmNob3IsIHVpTG9jYXRpb24pCi0gICAgewot
ICAgICAgICBhbmNob3IucHJlZmVycmVkUGFuZWwgPSAic2NyaXB0cyI7Ci0gICAgICAgIGFuY2hv
ci5ocmVmID0gc2FuaXRpemVIcmVmKHVpTG9jYXRpb24udWlTb3VyY2VDb2RlLm9yaWdpblVSTCgp
KTsKLSAgICAgICAgYW5jaG9yLnVpU291cmNlQ29kZSA9IHVpTG9jYXRpb24udWlTb3VyY2VDb2Rl
OwotICAgICAgICBhbmNob3IubGluZU51bWJlciA9IHVpTG9jYXRpb24ubGluZU51bWJlcjsKLSAg
ICAgICAgdGhpcy5fZm9ybWF0dGVyLmZvcm1hdExpdmVBbmNob3IoYW5jaG9yLCB1aUxvY2F0aW9u
KTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2Vi
SW5zcGVjdG9yLkxpbmtpZmllckZvcm1hdHRlcn0KLSAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4TGVu
Z3RoCi0gKi8KLVdlYkluc3BlY3Rvci5MaW5raWZpZXIuRGVmYXVsdEZvcm1hdHRlciA9IGZ1bmN0
aW9uKG1heExlbmd0aCkKLXsKLSAgICB0aGlzLl9tYXhMZW5ndGggPSBtYXhMZW5ndGg7Ci19Ci0K
LVdlYkluc3BlY3Rvci5MaW5raWZpZXIuRGVmYXVsdEZvcm1hdHRlci5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSBhbmNob3IKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5VSUxvY2F0aW9ufSB1aUxvY2F0aW9uCi0gICAgICovCi0gICAgZm9ybWF0TGl2
ZUFuY2hvcjogZnVuY3Rpb24oYW5jaG9yLCB1aUxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgdmFy
IHRleHQgPSBXZWJJbnNwZWN0b3IuZm9ybWF0TGlua1RleHQodWlMb2NhdGlvbi51aVNvdXJjZUNv
ZGUub3JpZ2luVVJMKCksIHVpTG9jYXRpb24ubGluZU51bWJlcik7Ci0gICAgICAgIGlmICh0aGlz
Ll9tYXhMZW5ndGgpCi0gICAgICAgICAgICB0ZXh0ID0gdGV4dC5jZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGgodGhpcy5fbWF4TGVuZ3RoKTsKLSAgICAgICAgYW5jaG9yLnRleHRDb250ZW50ID0gdGV4
dDsKLQotICAgICAgICB2YXIgdGl0bGVUZXh0ID0gdWlMb2NhdGlvbi51aVNvdXJjZUNvZGUub3Jp
Z2luVVJMKCk7Ci0gICAgICAgIGlmICh0eXBlb2YgdWlMb2NhdGlvbi5saW5lTnVtYmVyID09PSAi
bnVtYmVyIikKLSAgICAgICAgICAgIHRpdGxlVGV4dCArPSAiOiIgKyAodWlMb2NhdGlvbi5saW5l
TnVtYmVyICsgMSk7Ci0gICAgICAgIGFuY2hvci50aXRsZSA9IHRpdGxlVGV4dDsKLSAgICB9LAot
Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuTGlua2lmaWVyRm9ybWF0dGVyLnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5M
aW5raWZpZXIuRGVmYXVsdEZvcm1hdHRlcn0KLSAqLwotV2ViSW5zcGVjdG9yLkxpbmtpZmllci5E
ZWZhdWx0Q1NTRm9ybWF0dGVyID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5MaW5r
aWZpZXIuRGVmYXVsdEZvcm1hdHRlci5jYWxsKHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuTGlu
a2lmaWVyLkRlZmF1bHRDU1NGb3JtYXR0ZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7RWxlbWVudH0gYW5jaG9yCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlM
b2NhdGlvbn0gdWlMb2NhdGlvbgotICAgICAqLwotICAgIGZvcm1hdExpdmVBbmNob3I6IGZ1bmN0
aW9uKGFuY2hvciwgdWlMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5MaW5r
aWZpZXIuRGVmYXVsdEZvcm1hdHRlci5wcm90b3R5cGUuZm9ybWF0TGl2ZUFuY2hvci5jYWxsKHRo
aXMsIGFuY2hvciwgdWlMb2NhdGlvbik7Ci0gICAgICAgIGFuY2hvci5jbGFzc0xpc3QuYWRkKCJ3
ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5rIik7Ci0gICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUo
ImRhdGEtdW5jb3B5YWJsZSIsIGFuY2hvci50ZXh0Q29udGVudCk7Ci0gICAgICAgIGFuY2hvci50
ZXh0Q29udGVudCA9ICIiOwotICAgIH0sCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuTGlu
a2lmaWVyLkRlZmF1bHRGb3JtYXR0ZXIucHJvdG90eXBlCi19Ci0KLS8qKgotICogVGhlIG1heGlt
dW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gZGlzcGxheSBpbiBhIFVSTC4KLSAqIEBjb25zdAot
ICogQHR5cGUge251bWJlcn0KLSAqLwotV2ViSW5zcGVjdG9yLkxpbmtpZmllci5NYXhMZW5ndGhG
b3JEaXNwbGF5ZWRVUkxzID0gMTUwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9MaXZlRWRpdFN1cHBvcnQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0xpdmVFZGl0U3VwcG9ydC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWNlMDk0ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0xpdmVFZGl0U3VwcG9ydC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldvcmtzcGFjZX0g
d29ya3NwYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5MaXZlRWRpdFN1cHBvcnQgPSBmdW5jdGlvbih3
b3Jrc3BhY2UpCi17Ci0gICAgdGhpcy5fd29ya3NwYWNlUHJvdmlkZXIgPSBuZXcgV2ViSW5zcGVj
dG9yLlNpbXBsZVdvcmtzcGFjZVByb3ZpZGVyKHdvcmtzcGFjZSwgV2ViSW5zcGVjdG9yLnByb2pl
Y3RUeXBlcy5MaXZlRWRpdCk7Ci0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuR2xvYmFsT2JqZWN0
Q2xlYXJlZCwgdGhpcy5fZGVidWdnZXJSZXNldCwgdGhpcyk7Ci0gICAgdGhpcy5fZGVidWdnZXJS
ZXNldCgpOwotfQotCi1XZWJJbnNwZWN0b3IuTGl2ZUVkaXRTdXBwb3J0LnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291
cmNlQ29kZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAg
ICovCi0gICAgdWlTb3VyY2VDb2RlRm9yTGl2ZUVkaXQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkK
LSAgICB7Ci0gICAgICAgIHZhciByYXdMb2NhdGlvbiA9IHVpU291cmNlQ29kZS51aUxvY2F0aW9u
VG9SYXdMb2NhdGlvbigwLCAwKTsKLSAgICAgICAgdmFyIGRlYnVnZ2VyTW9kZWxMb2NhdGlvbiA9
IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRpb259ICovIChyYXdM
b2NhdGlvbik7Ci0gICAgICAgIHZhciBzY3JpcHQgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2Rl
bC5zY3JpcHRGb3JJZChkZWJ1Z2dlck1vZGVsTG9jYXRpb24uc2NyaXB0SWQpOwotICAgICAgICB2
YXIgdWlMb2NhdGlvbiA9IHNjcmlwdC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbigwLCAwKTsKLQot
ICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBsaXZlIGVkaXRpbmcgb2Ygc2NyaXB0cyBtYXBwZWQg
dG8gc29tZSBmaWxlLgotICAgICAgICBpZiAodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUgIT09IHVp
U291cmNlQ29kZSkKLSAgICAgICAgICAgIHJldHVybiB1aUxvY2F0aW9uLnVpU291cmNlQ29kZTsK
LSAgICAgICAgaWYgKHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElkW3NjcmlwdC5zY3JpcHRJ
ZF0pCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbc2Ny
aXB0LnNjcmlwdElkXTsKLQotICAgICAgICBjb25zb2xlLmFzc2VydCghc2NyaXB0LmlzSW5saW5l
U2NyaXB0KCkpOwotICAgICAgICB2YXIgbGl2ZUVkaXRVSVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jr
c3BhY2VQcm92aWRlci5hZGRVbmlxdWVGaWxlRm9yVVJMKHNjcmlwdC5zb3VyY2VVUkwsIHNjcmlw
dCwgdHJ1ZSwgc2NyaXB0LmlzQ29udGVudFNjcmlwdCk7Ci0KLSAgICAgICAgbGl2ZUVkaXRVSVNv
dXJjZUNvZGUuc2V0U2NyaXB0RmlsZShuZXcgV2ViSW5zcGVjdG9yLkxpdmVFZGl0U2NyaXB0Rmls
ZSh1aVNvdXJjZUNvZGUsIGxpdmVFZGl0VUlTb3VyY2VDb2RlLCBzY3JpcHQuc2NyaXB0SWQpKTsK
LSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0LnNjcmlwdElkXSA9
IGxpdmVFZGl0VUlTb3VyY2VDb2RlOwotICAgICAgICB0aGlzLl9zY3JpcHRJZEZvclVJU291cmNl
Q29kZS5wdXQobGl2ZUVkaXRVSVNvdXJjZUNvZGUsIHNjcmlwdC5zY3JpcHRJZCk7Ci0gICAgICAg
IHJldHVybiBsaXZlRWRpdFVJU291cmNlQ29kZTsKLSAgICB9LAotCi0gICAgX2RlYnVnZ2VyUmVz
ZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcs
IFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+fSAqLwotICAgICAgICB0aGlzLl91aVNvdXJjZUNv
ZGVGb3JTY3JpcHRJZCA9IHt9OwotICAgICAgICB0aGlzLl9zY3JpcHRJZEZvclVJU291cmNlQ29k
ZSA9IG5ldyBNYXAoKTsKLSAgICAgICAgdGhpcy5fd29ya3NwYWNlUHJvdmlkZXIucmVzZXQoKTsK
LSAgICB9LAotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYklu
c3BlY3Rvci5TY3JpcHRGaWxlfQotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0g
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSBsaXZlRWRpdFVJU291cmNlQ29kZQotICog
QHBhcmFtIHtzdHJpbmd9IHNjcmlwdElkCi0gKi8KLVdlYkluc3BlY3Rvci5MaXZlRWRpdFNjcmlw
dEZpbGUgPSBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpdmVFZGl0VUlTb3VyY2VDb2RlLCBzY3Jp
cHRJZCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU2NyaXB0RmlsZS5jYWxsKHRoaXMpOwotICAgIHRo
aXMuX3VpU291cmNlQ29kZSA9IHVpU291cmNlQ29kZTsKLSAgICB0aGlzLl9saXZlRWRpdFVJU291
cmNlQ29kZSA9IGxpdmVFZGl0VUlTb3VyY2VDb2RlOwotICAgIHRoaXMuX3NjcmlwdElkID0gc2Ny
aXB0SWQ7Ci0gICAgdGhpcy5fbGl2ZUVkaXRVSVNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29weUNvbW1pdHRlZCwgdGhp
cy5fd29ya2luZ0NvcHlDb21taXR0ZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuTGl2ZUVk
aXRTY3JpcHRGaWxlLnByb3RvdHlwZSA9IHsKLSAgICBfd29ya2luZ0NvcHlDb21taXR0ZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P3N0
cmluZ30gZXJyb3IKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGlubmVyQ2FsbGJhY2so
ZXJyb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgc2NyaXB0
ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2NyaXB0Rm9ySWQodGhpcy5fc2NyaXB0SWQp
OwotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRTY3JpcHRTb3VyY2Uoc2Ny
aXB0LnNjcmlwdElkLCB0aGlzLl9saXZlRWRpdFVJU291cmNlQ29kZS53b3JraW5nQ29weSgpLCBp
bm5lckNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGhhc0RpdmVyZ2VkRnJvbVZNOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBpc0RpdmVyZ2luZ0Zyb21WTTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzTWVyZ2luZ1RvVk06IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgY2hlY2tN
YXBwaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkxp
dmVFZGl0U3VwcG9ydH0gKi8KLVdlYkluc3BlY3Rvci5saXZlRWRpdFN1cHBvcnQgPSBudWxsOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZW1vcnlTdGF0
aXN0aWNzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZW1vcnlTdGF0
aXN0aWNzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDVmYTdjMS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01lbW9yeVN0YXRpc3Rp
Y3MuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVGltZWxpbmVQYW5lbH0gdGltZWxpbmVQYW5lbAotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGltZWxpbmVNb2RlbH0gbW9kZWwKLSAqIEBwYXJhbSB7bnVtYmVyfSBzaWRlYmFyV2lk
dGgKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuTWVtb3J5U3RhdGlzdGljcyA9
IGZ1bmN0aW9uKHRpbWVsaW5lUGFuZWwsIG1vZGVsLCBzaWRlYmFyV2lkdGgpCi17Ci0gICAgdGhp
cy5fdGltZWxpbmVQYW5lbCA9IHRpbWVsaW5lUGFuZWw7Ci0gICAgdGhpcy5fY291bnRlcnMgPSBb
XTsKLQotICAgIG1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9k
ZWwuRXZlbnRzLlJlY29yZEFkZGVkLCB0aGlzLl9vblJlY29yZEFkZGVkLCB0aGlzKTsKLSAgICBt
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLkV2ZW50cy5S
ZWNvcmRzQ2xlYXJlZCwgdGhpcy5fb25SZWNvcmRzQ2xlYXJlZCwgdGhpcyk7Ci0KLSAgICB0aGlz
Ll9jb250YWluZXJBbmNob3IgPSB0aW1lbGluZVBhbmVsLmVsZW1lbnQubGFzdENoaWxkOwotICAg
IHRoaXMuX21lbW9yeVNpZGViYXJWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyVmlldyhX
ZWJJbnNwZWN0b3IuU2lkZWJhclZpZXcuU2lkZWJhclBvc2l0aW9uLlN0YXJ0LCB1bmRlZmluZWQs
IHNpZGViYXJXaWR0aCk7Ci0gICAgdGhpcy5fbWVtb3J5U2lkZWJhclZpZXcuc2lkZWJhckVsZW1l
bnQuYWRkU3R5bGVDbGFzcygic2lkZWJhciIpOwotICAgIHRoaXMuX21lbW9yeVNpZGViYXJWaWV3
LmVsZW1lbnQuaWQgPSAibWVtb3J5LWdyYXBocy1jb250YWluZXIiOwotCi0gICAgdGhpcy5fbWVt
b3J5U2lkZWJhclZpZXcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2lkZWJhclZpZXcu
RXZlbnRUeXBlcy5SZXNpemVkLCB0aGlzLl9zaWRlYmFyUmVzaXplZC5iaW5kKHRoaXMpKTsKLQot
ICAgIHRoaXMuX2NhbnZhc0NvbnRhaW5lciA9IHRoaXMuX21lbW9yeVNpZGViYXJWaWV3Lm1haW5F
bGVtZW50OwotICAgIHRoaXMuX2NhbnZhc0NvbnRhaW5lci5pZCA9ICJtZW1vcnktZ3JhcGhzLWNh
bnZhcy1jb250YWluZXIiOwotICAgIHRoaXMuX2NyZWF0ZUN1cnJlbnRWYWx1ZXNCYXIoKTsKLSAg
ICB0aGlzLl9jYW52YXMgPSB0aGlzLl9jYW52YXNDb250YWluZXIuY3JlYXRlQ2hpbGQoImNhbnZh
cyIpOwotICAgIHRoaXMuX2NhbnZhcy5pZCA9ICJtZW1vcnktY291bnRlcnMtZ3JhcGgiOwotICAg
IHRoaXMuX2xhc3RNYXJrZXJYUG9zaXRpb24gPSAwOwotCi0gICAgdGhpcy5fY2FudmFzLmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIHRoaXMuX29uTW91c2VPdmVyLmJpbmQodGhpcyksIHRy
dWUpOwotICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlz
Ll9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0aGlzLl9jYW52YXMuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2VvdXQiLCB0aGlzLl9vbk1vdXNlT3V0LmJpbmQodGhpcyksIHRydWUp
OwotICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uQ2xp
Y2suYmluZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgLy8gV2UgY3JlYXRlIGV4dHJhIHRpbWVsaW5lIGdy
aWQgaGVyZSB0byByZXVzZSBpdHMgZXZlbnQgZGl2aWRlcnMuCi0gICAgdGhpcy5fdGltZWxpbmVH
cmlkID0gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZUdyaWQoKTsKLSAgICB0aGlzLl9jYW52YXND
b250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fdGltZWxpbmVHcmlkLmRpdmlkZXJzRWxlbWVudCk7
Ci0KLSAgICAvLyBQb3B1bGF0ZSBzaWRlYmFyCi0gICAgdGhpcy5fbWVtb3J5U2lkZWJhclZpZXcu
c2lkZWJhckVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJzaWRlYmFyLXRyZWUgc2lkZWJhci10
cmVlLXNlY3Rpb24iKS50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ09VTlRF
UlMiKTsKLSAgICB0aGlzLl9jb3VudGVyVUkgPSB0aGlzLl9jcmVhdGVDb3VudGVyVUlMaXN0KCk7
Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge251bWJlcn0gdGltZQotICov
Ci1XZWJJbnNwZWN0b3IuTWVtb3J5U3RhdGlzdGljcy5Db3VudGVyID0gZnVuY3Rpb24odGltZSkK
LXsKLSAgICB0aGlzLnRpbWUgPSB0aW1lOwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICog
QGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5Td2F0Y2hD
aGVja2JveCA9IGZ1bmN0aW9uKHRpdGxlLCBjb2xvcikKLXsKLSAgICB0aGlzLmVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9zd2F0Y2ggPSB0aGlzLmVs
ZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJzd2F0Y2giKTsKLSAgICB0aGlzLmVsZW1lbnQuY3Jl
YXRlQ2hpbGQoInNwYW4iLCAidGl0bGUiKS50ZXh0Q29udGVudCA9IHRpdGxlOwotICAgIHRoaXMu
X2NvbG9yID0gY29sb3I7Ci0gICAgdGhpcy5jaGVja2VkID0gdHJ1ZTsKLQotICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZUNoZWNrYm94LmJpbmQo
dGhpcyksIHRydWUpOwotfQotCi1XZWJJbnNwZWN0b3IuU3dhdGNoQ2hlY2tib3guRXZlbnRzID0g
ewotICAgIENoYW5nZWQ6ICJDaGFuZ2VkIgotfQotCi1XZWJJbnNwZWN0b3IuU3dhdGNoQ2hlY2ti
b3gucHJvdG90eXBlID0gewotICAgIGdldCBjaGVja2VkKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9jaGVja2VkOwotICAgIH0sCi0KLSAgICBzZXQgY2hlY2tlZCh2KQotICAgIHsKLSAg
ICAgICAgdGhpcy5fY2hlY2tlZCA9IHY7Ci0gICAgICAgIGlmICh0aGlzLl9jaGVja2VkKQotICAg
ICAgICAgICAgdGhpcy5fc3dhdGNoLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuX2NvbG9y
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9zd2F0Y2guc3R5bGUuYmFja2dyb3Vu
ZENvbG9yID0gIiI7Ci0gICAgfSwKLQotICAgIF90b2dnbGVDaGVja2JveDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkOwotICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU3dhdGNoQ2hlY2ti
b3guRXZlbnRzLkNoYW5nZWQpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYklu
c3BlY3Rvci5Db3VudGVyVUlCYXNlID0gZnVuY3Rpb24obWVtb3J5Q291bnRlcnNQYW5lLCB0aXRs
ZSwgZ3JhcGhDb2xvciwgdmFsdWVHZXR0ZXIpCi17Ci0gICAgdGhpcy5fbWVtb3J5Q291bnRlcnNQ
YW5lID0gbWVtb3J5Q291bnRlcnNQYW5lOwotICAgIHRoaXMudmFsdWVHZXR0ZXIgPSB2YWx1ZUdl
dHRlcjsKLSAgICB2YXIgY29udGFpbmVyID0gbWVtb3J5Q291bnRlcnNQYW5lLl9tZW1vcnlTaWRl
YmFyVmlldy5zaWRlYmFyRWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgIm1lbW9yeS1jb3VudGVy
LXNpZGViYXItaW5mbyIpOwotICAgIHZhciBzd2F0Y2hDb2xvciA9IGdyYXBoQ29sb3I7Ci0gICAg
dGhpcy5fc3dhdGNoID0gbmV3IFdlYkluc3BlY3Rvci5Td2F0Y2hDaGVja2JveChXZWJJbnNwZWN0
b3IuVUlTdHJpbmcodGl0bGUpLCBzd2F0Y2hDb2xvcik7Ci0gICAgdGhpcy5fc3dhdGNoLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlN3YXRjaENoZWNrYm94LkV2ZW50cy5DaGFuZ2VkLCB0
aGlzLl90b2dnbGVDb3VudGVyR3JhcGguYmluZCh0aGlzKSk7Ci0gICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKHRoaXMuX3N3YXRjaC5lbGVtZW50KTsKLQotICAgIHRoaXMuX3ZhbHVlID0gbnVsbDsK
LSAgICB0aGlzLmdyYXBoQ29sb3IgPWdyYXBoQ29sb3I7Ci0gICAgdGhpcy5zdHJva2VDb2xvciA9
IGdyYXBoQ29sb3I7Ci0gICAgdGhpcy5ncmFwaFlWYWx1ZXMgPSBbXTsKLX0KLQotV2ViSW5zcGVj
dG9yLkNvdW50ZXJVSUJhc2UucHJvdG90eXBlID0gewotICAgIF90b2dnbGVDb3VudGVyR3JhcGg6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3N3YXRjaC5jaGVja2Vk
KQotICAgICAgICAgICAgdGhpcy5fdmFsdWUucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3ZhbHVlLmFkZFN0eWxlQ2xhc3MoImhpZGRl
biIpOwotICAgICAgICB0aGlzLl9tZW1vcnlDb3VudGVyc1BhbmUucmVmcmVzaCgpOwotICAgIH0s
Ci0KLSAgICB1cGRhdGVDdXJyZW50VmFsdWU6IGZ1bmN0aW9uKGNvdW50ZXJzRW50cnkpCi0gICAg
ewotICAgICAgICB0aGlzLl92YWx1ZS50ZXh0Q29udGVudCA9IE51bWJlci5ieXRlc1RvU3RyaW5n
KHRoaXMudmFsdWVHZXR0ZXIoY291bnRlcnNFbnRyeSkpOwotICAgIH0sCi0KLSAgICBjbGVhckN1
cnJlbnRWYWx1ZUFuZE1hcmtlcjogZnVuY3Rpb24oY3R4KQotICAgIHsKLSAgICAgICAgdGhpcy5f
dmFsdWUudGV4dENvbnRlbnQgPSAiIjsKLSAgICB9LAotCi0gICAgZ2V0IHZpc2libGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N3YXRjaC5jaGVja2VkOwotICAgIH0sCi19Ci0KLVdl
Ykluc3BlY3Rvci5NZW1vcnlTdGF0aXN0aWNzLnByb3RvdHlwZSA9IHsKLSAgICBfY3JlYXRlQ3Vy
cmVudFZhbHVlc0JhcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJOb3QgaW1wbGVtZW50ZWQiKTsKLSAgICB9LAotCi0gICAgX2NyZWF0ZUNvdW50ZXJVSUxpc3Q6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVu
dGVkIik7Ci0gICAgfSwKLQotICAgIF9vblJlY29yZHNDbGVhcmVkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLl9jb3VudGVycyA9IFtdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZUdyaWR9IHRpbWVsaW5lR3JpZAotICAgICAq
LwotICAgIHNldE1haW5UaW1lbGluZUdyaWQ6IGZ1bmN0aW9uKHRpbWVsaW5lR3JpZCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX21haW5UaW1lbGluZUdyaWQgPSB0aW1lbGluZUdyaWQ7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AKLSAgICAgKi8KLSAgICAgc2V0
VG9wUG9zaXRpb246IGZ1bmN0aW9uKHRvcCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21lbW9yeVNp
ZGViYXJWaWV3LmVsZW1lbnQuc3R5bGUudG9wID0gdG9wICsgInB4IjsKLSAgICAgICAgdGhpcy5f
dXBkYXRlU2l6ZSgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
d2lkdGgKLSAgICAgKi8KLSAgICBzZXRTaWRlYmFyV2lkdGg6IGZ1bmN0aW9uKHdpZHRoKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX2lnbm9yZVNpZGViYXJSZXNpemUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHRoaXMuX2lnbm9yZVNpZGViYXJSZXNpemUgPSB0cnVlOwotICAgICAg
ICB0aGlzLl9tZW1vcnlTaWRlYmFyVmlldy5zZXRTaWRlYmFyV2lkdGgod2lkdGgpOwotICAgICAg
ICB0aGlzLl9pZ25vcmVTaWRlYmFyUmVzaXplID0gZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9z
aWRlYmFyUmVzaXplZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
aWdub3JlU2lkZWJhclJlc2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5f
aWdub3JlU2lkZWJhclJlc2l6ZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3RpbWVsaW5lUGFuZWwu
c3BsaXRWaWV3LnNldFNpZGViYXJXaWR0aChldmVudC5kYXRhKTsKLSAgICAgICAgdGhpcy5faWdu
b3JlU2lkZWJhclJlc2l6ZSA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBfY2FudmFzSGVpZ2h0OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRl
ZCIpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIHdpZHRoID0gdGhpcy5fbWFpblRpbWVsaW5lR3JpZC5kaXZpZGVyc0VsZW1lbnQub2Zm
c2V0V2lkdGggKyAxOwotICAgICAgICB0aGlzLl9jYW52YXNDb250YWluZXIuc3R5bGUud2lkdGgg
PSB3aWR0aCArICJweCI7Ci0KLSAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuX2NhbnZhc0hlaWdo
dCgpOwotICAgICAgICB0aGlzLl9jYW52YXMud2lkdGggPSB3aWR0aDsKLSAgICAgICAgdGhpcy5f
Y2FudmFzLmhlaWdodCA9IGhlaWdodDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uUmVjb3JkQWRkZWQ6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1w
bGVtZW50ZWQiKTsKLSAgICB9LAotCi0gICAgX2RyYXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVJbmRleGVzKCk7Ci0gICAgICAgIHRoaXMuX2NhbGN1
bGF0ZVhWYWx1ZXMoKTsKLSAgICAgICAgdGhpcy5fY2xlYXIoKTsKLQotICAgICAgICB0aGlzLl9z
ZXRWZXJ0aWNhbENsaXAoMTAsIHRoaXMuX2NhbnZhcy5oZWlnaHQgLSAyMCk7Ci0gICAgfSwKLQot
ICAgIF9jYWxjdWxhdGVWaXNpYmxlSW5kZXhlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIGNhbGN1bGF0b3IgPSB0aGlzLl90aW1lbGluZVBhbmVsLmNhbGN1bGF0b3I7Ci0gICAgICAg
IHZhciBzdGFydCA9IGNhbGN1bGF0b3IubWluaW11bUJvdW5kYXJ5KCkgKiAxMDAwOwotICAgICAg
ICB2YXIgZW5kID0gY2FsY3VsYXRvci5tYXhpbXVtQm91bmRhcnkoKSAqIDEwMDA7Ci0gICAgICAg
IHZhciBmaXJzdEluZGV4ID0gMDsKLSAgICAgICAgdmFyIGxhc3RJbmRleCA9IHRoaXMuX2NvdW50
ZXJzLmxlbmd0aCAtIDE7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY291bnRl
cnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciB0aW1lID0gdGhpcy5fY291bnRlcnNb
aV0udGltZTsKLSAgICAgICAgICAgIGlmICh0aW1lIDw9IHN0YXJ0KSB7Ci0gICAgICAgICAgICAg
ICAgZmlyc3RJbmRleCA9IGk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChlbmQgPCB0aW1lKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBsYXN0SW5kZXggPSBpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8v
IE1heGltdW0gaW5kZXggb2YgZWxlbWVudCB3aG9zZSB0aW1lIDw9IHN0YXJ0LgotICAgICAgICB0
aGlzLl9taW5pbXVtSW5kZXggPSBmaXJzdEluZGV4OwotCi0gICAgICAgIC8vIE1heGltdW0gaW5k
ZXggb2YgZWxlbWVudCB3aG9zZSB0aW1lIDw9IGVuZC4KLSAgICAgICAgdGhpcy5fbWF4aW11bUlu
ZGV4ID0gbGFzdEluZGV4OwotCi0gICAgICAgIC8vIEN1cnJlbnQgd2luZG93IGJvdW5kcy4KLSAg
ICAgICAgdGhpcy5fbWluVGltZSA9IHN0YXJ0OwotICAgICAgICB0aGlzLl9tYXhUaW1lID0gZW5k
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50Ci0g
ICAgICovCi0gICAgIF9vbkNsaWNrOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZh
ciB4ID0gZXZlbnQueCAtIGV2ZW50LnRhcmdldC5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdDsKLSAg
ICAgICAgdmFyIGkgPSB0aGlzLl9yZWNvcmRJbmRleEF0KHgpOwotICAgICAgICB2YXIgY291bnRl
ciA9IHRoaXMuX2NvdW50ZXJzW2ldOwotICAgICAgICBpZiAoY291bnRlcikKLSAgICAgICAgICAg
IHRoaXMuX3RpbWVsaW5lUGFuZWwucmV2ZWFsUmVjb3JkQXQoY291bnRlci50aW1lIC8gMTAwMCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQKLSAg
ICAgKi8KLSAgICAgX29uTW91c2VPdXQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX21hcmtlclhQb3NpdGlvbjsKLQotICAgICAgICB2YXIgY3R4ID0gdGhpcy5f
Y2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgIHRoaXMuX2NsZWFyQ3VycmVudFZhbHVl
QW5kTWFya2VyKGN0eCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEfSBjdHgKLSAgICAgKi8KLSAgICBfY2xlYXJDdXJyZW50VmFsdWVB
bmRNYXJrZXI6IGZ1bmN0aW9uKGN0eCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fY291bnRlclVJLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgdGhpcy5fY291bnRl
clVJW2ldLmNsZWFyQ3VycmVudFZhbHVlQW5kTWFya2VyKGN0eCk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICAgX29uTW91
c2VPdmVyOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX29uTW91c2VNb3Zl
KGV2ZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBl
dmVudAotICAgICAqLwotICAgICBfb25Nb3VzZU1vdmU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIHggPSBldmVudC54IC0gZXZlbnQudGFyZ2V0Lm9mZnNldFBhcmVudC5vZmZz
ZXRMZWZ0Ci0gICAgICAgIHRoaXMuX21hcmtlclhQb3NpdGlvbiA9IHg7Ci0gICAgICAgIHRoaXMu
X3JlZnJlc2hDdXJyZW50VmFsdWVzKCk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoQ3VycmVudFZh
bHVlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jb3VudGVycy5sZW5n
dGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9tYXJrZXJYUG9zaXRp
b24gPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMu
X21heGltdW1JbmRleCA9PT0gLTEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBp
ID0gdGhpcy5fcmVjb3JkSW5kZXhBdCh0aGlzLl9tYXJrZXJYUG9zaXRpb24pOwotCi0gICAgICAg
IHRoaXMuX3VwZGF0ZUN1cnJlbnRWYWx1ZSh0aGlzLl9jb3VudGVyc1tpXSk7Ci0KLSAgICAgICAg
dGhpcy5faGlnaGxpZ2h0Q3VycmVudFBvc2l0aW9uT25HcmFwaHModGhpcy5fbWFya2VyWFBvc2l0
aW9uLCBpKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZUN1cnJlbnRWYWx1ZTogZnVuY3Rpb24oY291
bnRlckVudHJ5KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9jb3Vu
dGVyVUkubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICB0aGlzLl9jb3VudGVyVUlbal0udXBkYXRl
Q3VycmVudFZhbHVlKGNvdW50ZXJFbnRyeSk7Ci0gICAgfSwKLQotICAgIF9yZWNvcmRJbmRleEF0
OiBmdW5jdGlvbih4KQotICAgIHsKLSAgICAgICAgdmFyIGk7Ci0gICAgICAgIGZvciAoaSA9IHRo
aXMuX21pbmltdW1JbmRleCArIDE7IGkgPD0gdGhpcy5fbWF4aW11bUluZGV4OyBpKyspIHsKLSAg
ICAgICAgICAgIHZhciBzdGF0WCA9IHRoaXMuX2NvdW50ZXJzW2ldLng7Ci0gICAgICAgICAgICBp
ZiAoeCA8IHN0YXRYKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGktLTsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgfSwKLQotICAgIF9oaWdobGlnaHRDdXJyZW50
UG9zaXRpb25PbkdyYXBoczogZnVuY3Rpb24oeCwgaW5kZXgpCi0gICAgewotICAgICAgICB2YXIg
Y3R4ID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgIHRoaXMuX3Jlc3Rv
cmVJbWFnZVVuZGVyTWFya2VyKGN0eCk7Ci0gICAgICAgIHRoaXMuX2RyYXdNYXJrZXIoY3R4LCB4
LCBpbmRleCk7Ci0gICAgfSwKLQotICAgIF9yZXN0b3JlSW1hZ2VVbmRlck1hcmtlcjogZnVuY3Rp
b24oY3R4KQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQi
KTsKLSAgICB9LAotCi0gICAgX2RyYXdNYXJrZXI6IGZ1bmN0aW9uKGN0eCwgeCwgaW5kZXgpCi0g
ICAgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwotICAgIH0s
Ci0KLSAgICB2aXNpYmxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
bWVtb3J5U2lkZWJhclZpZXcuaXNTaG93aW5nKCk7Ci0gICAgfSwKLQotICAgIHNob3c6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBhbmNob3IgPSAvKiogQHR5cGUge0VsZW1lbnR8bnVs
bH0gKi8gKHRoaXMuX2NvbnRhaW5lckFuY2hvci5uZXh0U2libGluZyk7Ci0gICAgICAgIHRoaXMu
X21lbW9yeVNpZGViYXJWaWV3LnNob3codGhpcy5fdGltZWxpbmVQYW5lbC5lbGVtZW50LCBhbmNo
b3IpOwotICAgICAgICB0aGlzLl91cGRhdGVTaXplKCk7Ci0gICAgICAgIHRoaXMuX3JlZnJlc2hE
aXZpZGVycygpOwotICAgICAgICBzZXRUaW1lb3V0KHRoaXMuX2RyYXcuYmluZCh0aGlzKSwgMCk7
Ci0gICAgfSwKLQotICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3VwZGF0ZVNpemUoKTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaERpdmlkZXJzKCk7Ci0gICAgICAg
IHRoaXMuX2RyYXcoKTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRWYWx1ZXMoKTsKLSAg
ICB9LAotCi0gICAgaGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWVtb3J5
U2lkZWJhclZpZXcuZGV0YWNoKCk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoRGl2aWRlcnM6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC51cGRhdGVEaXZpZGVy
cyh0aGlzLl90aW1lbGluZVBhbmVsLmNhbGN1bGF0b3IpOwotICAgIH0sCi0KLSAgICBfc2V0VmVy
dGljYWxDbGlwOiBmdW5jdGlvbihvcmlnaW5ZLCBoZWlnaHQpCi0gICAgewotICAgICAgICB0aGlz
Ll9vcmlnaW5ZID0gb3JpZ2luWTsKLSAgICAgICAgdGhpcy5fY2xpcHBlZEhlaWdodCA9IGhlaWdo
dDsKLSAgICB9LAotCi0gICAgX2NhbGN1bGF0ZVhWYWx1ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5fY291bnRlcnMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciB3aWR0aCA9IHRoaXMuX2NhbnZhcy53aWR0aDsKLSAgICAgICAgdmFyIHhG
YWN0b3IgPSB3aWR0aCAvICh0aGlzLl9tYXhUaW1lIC0gdGhpcy5fbWluVGltZSk7Ci0KLSAgICAg
ICAgdGhpcy5fY291bnRlcnNbdGhpcy5fbWluaW11bUluZGV4XS54ID0gMDsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IHRoaXMuX21pbmltdW1JbmRleCArIDE7IGkgPCB0aGlzLl9tYXhpbXVtSW5kZXg7
IGkrKykKLSAgICAgICAgICAgICB0aGlzLl9jb3VudGVyc1tpXS54ID0geEZhY3RvciAqICh0aGlz
Ll9jb3VudGVyc1tpXS50aW1lIC0gdGhpcy5fbWluVGltZSk7Ci0gICAgICAgIHRoaXMuX2NvdW50
ZXJzW3RoaXMuX21heGltdW1JbmRleF0ueCA9IHdpZHRoOwotICAgIH0sCi0KLSAgICBfY2xlYXI6
IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQo
IjJkIik7Ci0gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY3R4LmNhbnZhcy53aWR0aCwgY3R4
LmNhbnZhcy5oZWlnaHQpOwotICAgICAgICB0aGlzLl9kaXNjYXJkSW1hZ2VVbmRlck1hcmtlcigp
OwotICAgIH0sCi0KLSAgICBfZGlzY2FyZEltYWdlVW5kZXJNYXJrZXI6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7Ci0gICAgfQot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJp
Y3NTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0
cmljc1NpZGViYXJQYW5lLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjkzNDMw
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmlj
c1NpZGViYXJQYW5lLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TaWRlYmFyUGFuZX0KLSAq
LwotV2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
Ik1ldHJpY3MiKSk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FdmVudHMuU3R5bGVTaGVldENoYW5nZWQsIHRo
aXMuX3N0eWxlU2hlZXRPck1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkLCB0aGlzKTsKLSAgICBXZWJJ
bnNwZWN0b3IuY3NzTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ1NTU3R5bGVN
b2RlbC5FdmVudHMuTWVkaWFRdWVyeVJlc3VsdENoYW5nZWQsIHRoaXMuX3N0eWxlU2hlZXRPck1l
ZGlhUXVlcnlSZXN1bHRDaGFuZ2VkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkF0dHJNb2RpZmll
ZCwgdGhpcy5fYXR0cmlidXRlc1VwZGF0ZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kb21B
Z2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuQXR0clJl
bW92ZWQsIHRoaXMuX2F0dHJpYnV0ZXNVcGRhdGVkLCB0aGlzKTsKLX0KLQotV2ViSW5zcGVjdG9y
Lk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuRE9NTm9kZT19IG5vZGUKLSAgICAgKi8KLSAgICB1cGRhdGU6IGZ1bmN0
aW9uKG5vZGUpCi0gICAgewotICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgIHRoaXMubm9k
ZSA9IG5vZGU7Ci0gICAgICAgIHRoaXMuX2lubmVyVXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIF9p
bm5lclVwZGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gInN0eWxlIiBhdHRyaWJ1
dGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLiBVcGRhdGUgbWV0cmljcyB1bmxlc3MgdGhleSBhcmUgYmVp
bmcgZWRpdGVkCi0gICAgICAgIC8vIChpZiBhIENTUyBwcm9wZXJ0eSBpcyBhZGRlZCwgYSBTdHls
ZVNoZWV0Q2hhbmdlZCBldmVudCBpcyBkaXNwYXRjaGVkKS4KLSAgICAgICAgaWYgKHRoaXMuX2lz
RWRpdGluZ01ldHJpY3MpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gRklYTUU6
IGF2b2lkIHVwZGF0ZXMgb2YgYSBjb2xsYXBzZWQgcGFuZS4KLSAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLm5vZGU7Ci0KLSAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUoKSAhPT0gTm9k
ZS5FTEVNRU5UX05PREUpIHsKLSAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hp
bGRyZW4oKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIGNhbGxiYWNrKHN0eWxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXN0eWxlIHx8
IHRoaXMubm9kZSAhPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB0aGlzLl91cGRhdGVNZXRyaWNzKHN0eWxlKTsKLSAgICAgICAgfQotICAgICAgICBXZWJJbnNw
ZWN0b3IuY3NzTW9kZWwuZ2V0Q29tcHV0ZWRTdHlsZUFzeW5jKG5vZGUuaWQsIGNhbGxiYWNrLmJp
bmQodGhpcykpOwotCi0gICAgICAgIGZ1bmN0aW9uIGlubGluZVN0eWxlQ2FsbGJhY2soc3R5bGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc3R5bGUgfHwgdGhpcy5ub2RlICE9PSBub2Rl
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHRoaXMuaW5saW5lU3R5bGUg
PSBzdHlsZTsKLSAgICAgICAgfQotICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0SW5s
aW5lU3R5bGVzQXN5bmMobm9kZS5pZCwgaW5saW5lU3R5bGVDYWxsYmFjay5iaW5kKHRoaXMpKTsK
LSAgICB9LAotCi0gICAgX3N0eWxlU2hlZXRPck1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9pbm5lclVwZGF0ZSgpOwotICAgIH0sCi0KLSAg
ICBfYXR0cmlidXRlc1VwZGF0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMubm9kZSAhPT0gZXZlbnQuZGF0YS5ub2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHRoaXMuX2lubmVyVXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIF9nZXRQcm9wZXJ0eVZh
bHVlQXNQeDogZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5TmFtZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBOdW1iZXIoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUpLnJlcGxhY2Uo
L3B4JC8sICIiKSB8fCAwKTsKLSAgICB9LAotCi0gICAgX2dldEJveDogZnVuY3Rpb24oY29tcHV0
ZWRTdHlsZSwgY29tcG9uZW50TmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBzdWZmaXggPSBjb21w
b25lbnROYW1lID09PSAiYm9yZGVyIiA/ICItd2lkdGgiIDogIiI7Ci0gICAgICAgIHZhciBsZWZ0
ID0gdGhpcy5fZ2V0UHJvcGVydHlWYWx1ZUFzUHgoY29tcHV0ZWRTdHlsZSwgY29tcG9uZW50TmFt
ZSArICItbGVmdCIgKyBzdWZmaXgpOwotICAgICAgICB2YXIgdG9wID0gdGhpcy5fZ2V0UHJvcGVy
dHlWYWx1ZUFzUHgoY29tcHV0ZWRTdHlsZSwgY29tcG9uZW50TmFtZSArICItdG9wIiArIHN1ZmZp
eCk7Ci0gICAgICAgIHZhciByaWdodCA9IHRoaXMuX2dldFByb3BlcnR5VmFsdWVBc1B4KGNvbXB1
dGVkU3R5bGUsIGNvbXBvbmVudE5hbWUgKyAiLXJpZ2h0IiArIHN1ZmZpeCk7Ci0gICAgICAgIHZh
ciBib3R0b20gPSB0aGlzLl9nZXRQcm9wZXJ0eVZhbHVlQXNQeChjb21wdXRlZFN0eWxlLCBjb21w
b25lbnROYW1lICsgIi1ib3R0b20iICsgc3VmZml4KTsKLSAgICAgICAgcmV0dXJuIHsgbGVmdDog
bGVmdCwgdG9wOiB0b3AsIHJpZ2h0OiByaWdodCwgYm90dG9tOiBib3R0b20gfTsKLSAgICB9LAot
Ci0gICAgX2hpZ2hsaWdodERPTU5vZGU6IGZ1bmN0aW9uKHNob3dIaWdobGlnaHQsIG1vZGUsIGV2
ZW50KQotICAgIHsKLSAgICAgICAgZXZlbnQuY29uc3VtZSgpOwotICAgICAgICB2YXIgbm9kZUlk
ID0gc2hvd0hpZ2hsaWdodCAmJiB0aGlzLm5vZGUgPyB0aGlzLm5vZGUuaWQgOiAwOwotICAgICAg
ICBpZiAobm9kZUlkKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0TW9kZSA9PT0g
bW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0aGlzLl9oaWdobGln
aHRNb2RlID0gbW9kZTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5oaWdobGln
aHRET01Ob2RlKG5vZGVJZCwgbW9kZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBk
ZWxldGUgdGhpcy5faGlnaGxpZ2h0TW9kZTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21B
Z2VudC5oaWRlRE9NTm9kZUhpZ2hsaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IHRoaXMuX2JveEVsZW1lbnRzICYmIGkgPCB0aGlzLl9ib3hFbGVtZW50cy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9ib3hFbGVtZW50c1tp
XTsKLSAgICAgICAgICAgIGlmICghbm9kZUlkIHx8IG1vZGUgPT09ICJhbGwiIHx8IGVsZW1lbnQu
X25hbWUgPT09IG1vZGUpCi0gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5k
Q29sb3IgPSBlbGVtZW50Ll9iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiIjsKLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICBfdXBkYXRlTWV0cmljczogZnVuY3Rpb24oc3R5bGUpCi0gICAgewot
ICAgICAgICAvLyBVcGRhdGluZyB3aXRoIGNvbXB1dGVkIHN0eWxlLgotICAgICAgICB2YXIgbWV0
cmljc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgbWV0
cmljc0VsZW1lbnQuY2xhc3NOYW1lID0gIm1ldHJpY3MiOwotICAgICAgICB2YXIgc2VsZiA9IHRo
aXM7Ci0KLSAgICAgICAgZnVuY3Rpb24gY3JlYXRlQm94UGFydEVsZW1lbnQoc3R5bGUsIG5hbWUs
IHNpZGUsIHN1ZmZpeCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9
IChuYW1lICE9PSAicG9zaXRpb24iID8gbmFtZSArICItIiA6ICIiKSArIHNpZGUgKyBzdWZmaXg7
Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT09ICIiIHx8IChuYW1lICE9PSAicG9zaXRp
b24iICYmIHZhbHVlID09PSAiMHB4IikpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSAiXHUyMDEy
IjsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICJwb3NpdGlvbiIgJiYgdmFsdWUgPT09
ICJhdXRvIikKLSAgICAgICAgICAgICAgICB2YWx1ZSA9ICJcdTIwMTIiOwotICAgICAgICAgICAg
dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9weCQvLCAiIik7Ci0KLSAgICAgICAgICAgIHZhciBlbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBlbGVtZW50
LmNsYXNzTmFtZSA9IHNpZGU7Ci0gICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdmFs
dWU7Ci0gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIiwgdGhp
cy5zdGFydEVkaXRpbmcuYmluZCh0aGlzLCBlbGVtZW50LCBuYW1lLCBwcm9wZXJ0eU5hbWUsIHN0
eWxlKSwgZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBnZXRDb250ZW50QXJlYVdpZHRoUHgoc3R5bGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciB3aWR0aCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoIndpZHRoIiku
cmVwbGFjZSgvcHgkLywgIiIpOwotICAgICAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5VmFs
dWUoImJveC1zaXppbmciKSA9PT0gImJvcmRlci1ib3giKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGJvcmRlckJveCA9IHNlbGYuX2dldEJveChzdHlsZSwgImJvcmRlciIpOwotICAgICAgICAgICAg
ICAgIHZhciBwYWRkaW5nQm94ID0gc2VsZi5fZ2V0Qm94KHN0eWxlLCAicGFkZGluZyIpOwotCi0g
ICAgICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAtIGJvcmRlckJveC5sZWZ0IC0gYm9yZGVyQm94
LnJpZ2h0IC0gcGFkZGluZ0JveC5sZWZ0IC0gcGFkZGluZ0JveC5yaWdodDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gZ2V0Q29udGVudEFyZWFIZWlnaHRQeChzdHlsZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgdmFyIGhlaWdodCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpLnJlcGxhY2Uo
L3B4JC8sICIiKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCJib3gt
c2l6aW5nIikgPT09ICJib3JkZXItYm94IikgewotICAgICAgICAgICAgICAgIHZhciBib3JkZXJC
b3ggPSBzZWxmLl9nZXRCb3goc3R5bGUsICJib3JkZXIiKTsKLSAgICAgICAgICAgICAgICB2YXIg
cGFkZGluZ0JveCA9IHNlbGYuX2dldEJveChzdHlsZSwgInBhZGRpbmciKTsKLQotICAgICAgICAg
ICAgICAgIGhlaWdodCA9IGhlaWdodCAtIGJvcmRlckJveC50b3AgLSBib3JkZXJCb3guYm90dG9t
IC0gcGFkZGluZ0JveC50b3AgLSBwYWRkaW5nQm94LmJvdHRvbTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpc3Bs
YXkgdHlwZXMgZm9yIHdoaWNoIG1hcmdpbiBpcyBpZ25vcmVkLgotICAgICAgICB2YXIgbm9NYXJn
aW5EaXNwbGF5VHlwZSA9IHsKLSAgICAgICAgICAgICJ0YWJsZS1jZWxsIjogdHJ1ZSwKLSAgICAg
ICAgICAgICJ0YWJsZS1jb2x1bW4iOiB0cnVlLAotICAgICAgICAgICAgInRhYmxlLWNvbHVtbi1n
cm91cCI6IHRydWUsCi0gICAgICAgICAgICAidGFibGUtZm9vdGVyLWdyb3VwIjogdHJ1ZSwKLSAg
ICAgICAgICAgICJ0YWJsZS1oZWFkZXItZ3JvdXAiOiB0cnVlLAotICAgICAgICAgICAgInRhYmxl
LXJvdyI6IHRydWUsCi0gICAgICAgICAgICAidGFibGUtcm93LWdyb3VwIjogdHJ1ZQotICAgICAg
ICB9OwotCi0gICAgICAgIC8vIERpc3BsYXkgdHlwZXMgZm9yIHdoaWNoIHBhZGRpbmcgaXMgaWdu
b3JlZC4KLSAgICAgICAgdmFyIG5vUGFkZGluZ0Rpc3BsYXlUeXBlID0gewotICAgICAgICAgICAg
InRhYmxlLWNvbHVtbiI6IHRydWUsCi0gICAgICAgICAgICAidGFibGUtY29sdW1uLWdyb3VwIjog
dHJ1ZSwKLSAgICAgICAgICAgICJ0YWJsZS1mb290ZXItZ3JvdXAiOiB0cnVlLAotICAgICAgICAg
ICAgInRhYmxlLWhlYWRlci1ncm91cCI6IHRydWUsCi0gICAgICAgICAgICAidGFibGUtcm93Ijog
dHJ1ZSwKLSAgICAgICAgICAgICJ0YWJsZS1yb3ctZ3JvdXAiOiB0cnVlCi0gICAgICAgIH07Ci0K
LSAgICAgICAgLy8gUG9zaXRpb24gdHlwZXMgZm9yIHdoaWNoIHRvcCwgbGVmdCwgYm90dG9tIGFu
ZCByaWdodCBhcmUgaWdub3JlZC4KLSAgICAgICAgdmFyIG5vUG9zaXRpb25UeXBlID0gewotICAg
ICAgICAgICAgInN0YXRpYyI6IHRydWUKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgYm94ZXMg
PSBbImNvbnRlbnQiLCAicGFkZGluZyIsICJib3JkZXIiLCAibWFyZ2luIiwgInBvc2l0aW9uIl07
Ci0gICAgICAgIHZhciBib3hDb2xvcnMgPSBbCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuQ29s
b3IuUGFnZUhpZ2hsaWdodC5Db250ZW50LAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbG9y
LlBhZ2VIaWdobGlnaHQuUGFkZGluZywKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Db2xvci5Q
YWdlSGlnaGxpZ2h0LkJvcmRlciwKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Db2xvci5QYWdl
SGlnaGxpZ2h0Lk1hcmdpbiwKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Db2xvci5mcm9tUkdC
QSgwLCAwLCAwLCAwKQotICAgICAgICBdOwotICAgICAgICB2YXIgYm94TGFiZWxzID0gW1dlYklu
c3BlY3Rvci5VSVN0cmluZygiY29udGVudCIpLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoInBhZGRp
bmciKSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJib3JkZXIiKSwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJtYXJnaW4iKSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJwb3NpdGlvbiIpXTsKLSAgICAg
ICAgdmFyIHByZXZpb3VzQm94ID0gbnVsbDsKLSAgICAgICAgdGhpcy5fYm94RWxlbWVudHMgPSBb
XTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3hlcy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIG5hbWUgPSBib3hlc1tpXTsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT09
ICJtYXJnaW4iICYmIG5vTWFyZ2luRGlzcGxheVR5cGVbc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgi
ZGlzcGxheSIpXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChu
YW1lID09PSAicGFkZGluZyIgJiYgbm9QYWRkaW5nRGlzcGxheVR5cGVbc3R5bGUuZ2V0UHJvcGVy
dHlWYWx1ZSgiZGlzcGxheSIpXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChuYW1lID09PSAicG9zaXRpb24iICYmIG5vUG9zaXRpb25UeXBlW3N0eWxlLmdldFBy
b3BlcnR5VmFsdWUoInBvc2l0aW9uIildKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICB2YXIgYm94RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICAgICAgYm94RWxlbWVudC5jbGFzc05hbWUgPSBuYW1lOwotICAgICAgICAgICAg
Ym94RWxlbWVudC5fYmFja2dyb3VuZENvbG9yID0gYm94Q29sb3JzW2ldLnRvU3RyaW5nKCJvcmln
aW5hbCIpOwotICAgICAgICAgICAgYm94RWxlbWVudC5fbmFtZSA9IG5hbWU7Ci0gICAgICAgICAg
ICBib3hFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJveEVsZW1lbnQuX2JhY2tncm91
bmRDb2xvcjsKLSAgICAgICAgICAgIGJveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vv
dmVyIiwgdGhpcy5faGlnaGxpZ2h0RE9NTm9kZS5iaW5kKHRoaXMsIHRydWUsIG5hbWUgPT09ICJw
b3NpdGlvbiIgPyAiYWxsIiA6IG5hbWUpLCBmYWxzZSk7Ci0gICAgICAgICAgICB0aGlzLl9ib3hF
bGVtZW50cy5wdXNoKGJveEVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAobmFtZSA9PT0gImNv
bnRlbnQiKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHdpZHRoRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICB3aWR0aEVsZW1lbnQudGV4dENv
bnRlbnQgPSBnZXRDb250ZW50QXJlYVdpZHRoUHgoc3R5bGUpOwotICAgICAgICAgICAgICAgIHdp
ZHRoRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsIHRoaXMuc3RhcnRFZGl0aW5n
LmJpbmQodGhpcywgd2lkdGhFbGVtZW50LCAid2lkdGgiLCAid2lkdGgiLCBzdHlsZSksIGZhbHNl
KTsKLQotICAgICAgICAgICAgICAgIHZhciBoZWlnaHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAgIGhlaWdodEVsZW1lbnQudGV4dENvbnRl
bnQgPSBnZXRDb250ZW50QXJlYUhlaWdodFB4KHN0eWxlKTsKLSAgICAgICAgICAgICAgICBoZWln
aHRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIiwgdGhpcy5zdGFydEVkaXRpbmcu
YmluZCh0aGlzLCBoZWlnaHRFbGVtZW50LCAiaGVpZ2h0IiwgImhlaWdodCIsIHN0eWxlKSwgZmFs
c2UpOwotCi0gICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZCh3aWR0aEVsZW1l
bnQpOwotICAgICAgICAgICAgICAgIGJveEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoIiBcdTAwRDcgIikpOwotICAgICAgICAgICAgICAgIGJveEVsZW1lbnQuYXBw
ZW5kQ2hpbGQoaGVpZ2h0RWxlbWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHZhciBzdWZmaXggPSAobmFtZSA9PT0gImJvcmRlciIgPyAiLXdpZHRoIiA6ICIiKTsK
LQotICAgICAgICAgICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICBsYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gImxh
YmVsIjsKLSAgICAgICAgICAgICAgICBsYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSBib3hMYWJl
bHNbaV07Ci0gICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW1l
bnQpOwotCi0gICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVCb3hQ
YXJ0RWxlbWVudC5jYWxsKHRoaXMsIHN0eWxlLCBuYW1lLCAidG9wIiwgc3VmZml4KSk7Ci0gICAg
ICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJiciIpKTsKLSAgICAgICAgICAgICAgICBib3hFbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUJv
eFBhcnRFbGVtZW50LmNhbGwodGhpcywgc3R5bGUsIG5hbWUsICJsZWZ0Iiwgc3VmZml4KSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNCb3gpCi0gICAgICAgICAgICAgICAgICAgIGJv
eEVsZW1lbnQuYXBwZW5kQ2hpbGQocHJldmlvdXNCb3gpOwotCi0gICAgICAgICAgICAgICAgYm94
RWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVCb3hQYXJ0RWxlbWVudC5jYWxsKHRoaXMsIHN0eWxl
LCBuYW1lLCAicmlnaHQiLCBzdWZmaXgpKTsKLSAgICAgICAgICAgICAgICBib3hFbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwotICAgICAgICAgICAgICAg
IGJveEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlQm94UGFydEVsZW1lbnQuY2FsbCh0aGlzLCBz
dHlsZSwgbmFtZSwgImJvdHRvbSIsIHN1ZmZpeCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBwcmV2aW91c0JveCA9IGJveEVsZW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtZXRy
aWNzRWxlbWVudC5hcHBlbmRDaGlsZChwcmV2aW91c0JveCk7Ci0gICAgICAgIG1ldHJpY3NFbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIHRoaXMuX2hpZ2hsaWdodERPTU5vZGUu
YmluZCh0aGlzLCBmYWxzZSwgIiIpLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuYm9keUVsZW1lbnQu
cmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCht
ZXRyaWNzRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIHN0YXJ0RWRpdGluZzogZnVuY3Rpb24odGFy
Z2V0RWxlbWVudCwgYm94LCBzdHlsZVByb3BlcnR5LCBjb21wdXRlZFN0eWxlKQotICAgIHsKLSAg
ICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKHRhcmdldEVsZW1lbnQpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjb250ZXh0ID0geyBib3g6IGJveCwgc3R5
bGVQcm9wZXJ0eTogc3R5bGVQcm9wZXJ0eSwgY29tcHV0ZWRTdHlsZTogY29tcHV0ZWRTdHlsZSB9
OwotICAgICAgICB2YXIgYm91bmRLZXlEb3duID0gdGhpcy5faGFuZGxlS2V5RG93bi5iaW5kKHRo
aXMsIGNvbnRleHQsIHN0eWxlUHJvcGVydHkpOwotICAgICAgICBjb250ZXh0LmtleURvd25IYW5k
bGVyID0gYm91bmRLZXlEb3duOwotICAgICAgICB0YXJnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoImtleWRvd24iLCBib3VuZEtleURvd24sIGZhbHNlKTsKLQotICAgICAgICB0aGlzLl9pc0Vk
aXRpbmdNZXRyaWNzID0gdHJ1ZTsKLQotICAgICAgICB2YXIgY29uZmlnID0gbmV3IFdlYkluc3Bl
Y3Rvci5FZGl0aW5nQ29uZmlnKHRoaXMuZWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCB0aGlz
LmVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgY29udGV4dCk7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5zdGFydEVkaXRpbmcodGFyZ2V0RWxlbWVudCwgY29uZmlnKTsKLQotICAgICAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0YXJnZXRFbGVtZW50LCAwLCB0YXJn
ZXRFbGVtZW50LCAxKTsKLSAgICB9LAotCi0gICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKGNv
bnRleHQsIHN0eWxlUHJvcGVydHksIGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQg
PSBldmVudC5jdXJyZW50VGFyZ2V0OwotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmlzaEhhbmRsZXIo
b3JpZ2luYWxWYWx1ZSwgcmVwbGFjZW1lbnRTdHJpbmcpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRoaXMuX2FwcGx5VXNlcklucHV0KGVsZW1lbnQsIHJlcGxhY2VtZW50U3RyaW5nLCBvcmlnaW5h
bFZhbHVlLCBjb250ZXh0LCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBj
dXN0b21OdW1iZXJIYW5kbGVyKG51bWJlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0
eWxlUHJvcGVydHkgIT09ICJtYXJnaW4iICYmIG51bWJlciA8IDApCi0gICAgICAgICAgICAgICAg
bnVtYmVyID0gMDsKLSAgICAgICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBXZWJJbnNwZWN0b3IuaGFuZGxlRWxlbWVudFZhbHVlTW9kaWZpY2F0aW9ucyhldmVudCwg
ZWxlbWVudCwgZmluaXNoSGFuZGxlci5iaW5kKHRoaXMpLCB1bmRlZmluZWQsIGN1c3RvbU51bWJl
ckhhbmRsZXIpOwotICAgIH0sCi0KLSAgICBlZGl0aW5nRW5kZWQ6IGZ1bmN0aW9uKGVsZW1lbnQs
IGNvbnRleHQpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5vcmlnaW5hbFByb3BlcnR5RGF0
YTsKLSAgICAgICAgZGVsZXRlIHRoaXMucHJldmlvdXNQcm9wZXJ0eURhdGFDYW5kaWRhdGU7Ci0g
ICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGNvbnRleHQua2V5
RG93bkhhbmRsZXIsIGZhbHNlKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2lzRWRpdGluZ01ldHJp
Y3M7Ci0gICAgfSwKLQotICAgIGVkaXRpbmdDYW5jZWxsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGNv
bnRleHQpCi0gICAgewotICAgICAgICBpZiAoIm9yaWdpbmFsUHJvcGVydHlEYXRhIiBpbiB0aGlz
ICYmIHRoaXMuaW5saW5lU3R5bGUpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5vcmlnaW5hbFBy
b3BlcnR5RGF0YSkgewotICAgICAgICAgICAgICAgIC8vIEFuIGFkZGVkIHByb3BlcnR5LCByZW1v
dmUgdGhlIGxhc3QgcHJvcGVydHkgaW4gdGhlIHN0eWxlLgotICAgICAgICAgICAgICAgIHZhciBw
YXN0TGFzdFNvdXJjZVByb3BlcnR5SW5kZXggPSB0aGlzLmlubGluZVN0eWxlLnBhc3RMYXN0U291
cmNlUHJvcGVydHlJbmRleCgpOwotICAgICAgICAgICAgICAgIGlmIChwYXN0TGFzdFNvdXJjZVBy
b3BlcnR5SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lU3R5bGUuYWxsUHJv
cGVydGllc1twYXN0TGFzdFNvdXJjZVByb3BlcnR5SW5kZXggLSAxXS5zZXRUZXh0KCIiLCBmYWxz
ZSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLmlubGluZVN0eWxl
LmFsbFByb3BlcnRpZXNbdGhpcy5vcmlnaW5hbFByb3BlcnR5RGF0YS5pbmRleF0uc2V0VGV4dCh0
aGlzLm9yaWdpbmFsUHJvcGVydHlEYXRhLnByb3BlcnR5VGV4dCwgZmFsc2UpOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMuZWRpdGluZ0VuZGVkKGVsZW1lbnQsIGNvbnRleHQpOwotICAgICAgICB0
aGlzLnVwZGF0ZSgpOwotICAgIH0sCi0KLSAgICBfYXBwbHlVc2VySW5wdXQ6IGZ1bmN0aW9uKGVs
ZW1lbnQsIHVzZXJJbnB1dCwgcHJldmlvdXNDb250ZW50LCBjb250ZXh0LCBjb21taXRFZGl0b3Ip
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuaW5saW5lU3R5bGUpIHsKLSAgICAgICAgICAgIC8v
IEVsZW1lbnQgaGFzIG5vIHJlbmRlcmVyLgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGlu
Z0NhbmNlbGxlZChlbGVtZW50LCBjb250ZXh0KTsgLy8gbm90aGluZyBjaGFuZ2VkLCBzbyBjYW5j
ZWwKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21taXRFZGl0b3IgJiYgdXNlcklucHV0ID09
PSBwcmV2aW91c0NvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0aW5nQ2FuY2Vs
bGVkKGVsZW1lbnQsIGNvbnRleHQpOyAvLyBub3RoaW5nIGNoYW5nZWQsIHNvIGNhbmNlbAotCi0g
ICAgICAgIGlmIChjb250ZXh0LmJveCAhPT0gInBvc2l0aW9uIiAmJiAoIXVzZXJJbnB1dCB8fCB1
c2VySW5wdXQgPT09ICJcdTIwMTIiKSkKLSAgICAgICAgICAgIHVzZXJJbnB1dCA9ICIwcHgiOwot
ICAgICAgICBlbHNlIGlmIChjb250ZXh0LmJveCA9PT0gInBvc2l0aW9uIiAmJiAoIXVzZXJJbnB1
dCB8fCB1c2VySW5wdXQgPT09ICJcdTIwMTIiKSkKLSAgICAgICAgICAgIHVzZXJJbnB1dCA9ICJh
dXRvIjsKLQotICAgICAgICB1c2VySW5wdXQgPSB1c2VySW5wdXQudG9Mb3dlckNhc2UoKTsKLSAg
ICAgICAgLy8gQXBwZW5kIGEgInB4IiB1bml0IGlmIHRoZSB1c2VyIGlucHV0IHdhcyBqdXN0IGEg
bnVtYmVyLgotICAgICAgICBpZiAoL15cZCskLy50ZXN0KHVzZXJJbnB1dCkpCi0gICAgICAgICAg
ICB1c2VySW5wdXQgKz0gInB4IjsKLQotICAgICAgICB2YXIgc3R5bGVQcm9wZXJ0eSA9IGNvbnRl
eHQuc3R5bGVQcm9wZXJ0eTsKLSAgICAgICAgdmFyIGNvbXB1dGVkU3R5bGUgPSBjb250ZXh0LmNv
bXB1dGVkU3R5bGU7Ci0KLSAgICAgICAgaWYgKGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1
ZSgiYm94LXNpemluZyIpID09PSAiYm9yZGVyLWJveCIgJiYgKHN0eWxlUHJvcGVydHkgPT09ICJ3
aWR0aCIgfHwgc3R5bGVQcm9wZXJ0eSA9PT0gImhlaWdodCIpKSB7Ci0gICAgICAgICAgICBpZiAo
IXVzZXJJbnB1dC5tYXRjaCgvcHgkLykpIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
bG9nKCJGb3IgZWxlbWVudHMgd2l0aCBib3gtc2l6aW5nOiBib3JkZXItYm94LCBvbmx5IGFic29s
dXRlIGNvbnRlbnQgYXJlYSBkaW1lbnNpb25zIGNhbiBiZSBhcHBsaWVkIiwgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciwgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgYm9yZGVyQm94ID0g
dGhpcy5fZ2V0Qm94KGNvbXB1dGVkU3R5bGUsICJib3JkZXIiKTsKLSAgICAgICAgICAgIHZhciBw
YWRkaW5nQm94ID0gdGhpcy5fZ2V0Qm94KGNvbXB1dGVkU3R5bGUsICJwYWRkaW5nIik7Ci0gICAg
ICAgICAgICB2YXIgdXNlclZhbHVlUHggPSBOdW1iZXIodXNlcklucHV0LnJlcGxhY2UoL3B4JC8s
ICIiKSk7Ci0gICAgICAgICAgICBpZiAoaXNOYU4odXNlclZhbHVlUHgpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChzdHlsZVByb3BlcnR5ID09PSAid2lkdGgiKQot
ICAgICAgICAgICAgICAgIHVzZXJWYWx1ZVB4ICs9IGJvcmRlckJveC5sZWZ0ICsgYm9yZGVyQm94
LnJpZ2h0ICsgcGFkZGluZ0JveC5sZWZ0ICsgcGFkZGluZ0JveC5yaWdodDsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyVmFsdWVQeCArPSBib3JkZXJCb3gudG9wICsgYm9y
ZGVyQm94LmJvdHRvbSArIHBhZGRpbmdCb3gudG9wICsgcGFkZGluZ0JveC5ib3R0b207Ci0KLSAg
ICAgICAgICAgIHVzZXJJbnB1dCA9IHVzZXJWYWx1ZVB4ICsgInB4IjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMucHJldmlvdXNQcm9wZXJ0eURhdGFDYW5kaWRhdGUgPSBudWxsOwotICAgICAg
ICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKHN0eWxl
KSB7Ci0gICAgICAgICAgICBpZiAoIXN0eWxlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHNlbGYuaW5saW5lU3R5bGUgPSBzdHlsZTsKLSAgICAgICAgICAgIGlmICghKCJv
cmlnaW5hbFByb3BlcnR5RGF0YSIgaW4gc2VsZikpCi0gICAgICAgICAgICAgICAgc2VsZi5vcmln
aW5hbFByb3BlcnR5RGF0YSA9IHNlbGYucHJldmlvdXNQcm9wZXJ0eURhdGFDYW5kaWRhdGU7Ci0K
LSAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZi5faGlnaGxpZ2h0TW9kZSAhPT0gInVuZGVmaW5l
ZCIpIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuaGlnaGxpZ2h0RE9N
Tm9kZShzZWxmLm5vZGUuaWQsIHNlbGYuX2hpZ2hsaWdodE1vZGUpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoY29tbWl0RWRpdG9yKSB7Ci0gICAgICAgICAgICAgICAgc2VsZi5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoIm1ldHJpY3MgZWRpdGVkIik7Ci0gICAgICAgICAgICAg
ICAgc2VsZi51cGRhdGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB2
YXIgYWxsUHJvcGVydGllcyA9IHRoaXMuaW5saW5lU3R5bGUuYWxsUHJvcGVydGllczsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgcHJvcGVydHkgPSBhbGxQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgaWYg
KHByb3BlcnR5Lm5hbWUgIT09IGNvbnRleHQuc3R5bGVQcm9wZXJ0eSB8fCBwcm9wZXJ0eS5pbmFj
dGl2ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdGhpcy5wcmV2
aW91c1Byb3BlcnR5RGF0YUNhbmRpZGF0ZSA9IHByb3BlcnR5OwotICAgICAgICAgICAgcHJvcGVy
dHkuc2V0VmFsdWUodXNlcklucHV0LCBjb21taXRFZGl0b3IsIHRydWUsIGNhbGxiYWNrKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuaW5saW5lU3R5bGUu
YXBwZW5kUHJvcGVydHkoY29udGV4dC5zdHlsZVByb3BlcnR5LCB1c2VySW5wdXQsIGNhbGxiYWNr
KTsKLSAgICB9LAotCi0gICAgZWRpdGluZ0NvbW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgdXNl
cklucHV0LCBwcmV2aW91c0NvbnRlbnQsIGNvbnRleHQpCi0gICAgewotICAgICAgICB0aGlzLmVk
aXRpbmdFbmRlZChlbGVtZW50LCBjb250ZXh0KTsKLSAgICAgICAgdGhpcy5fYXBwbHlVc2VySW5w
dXQoZWxlbWVudCwgdXNlcklucHV0LCBwcmV2aW91c0NvbnRlbnQsIGNvbnRleHQsIHRydWUpOwot
ICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90b3R5
cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0
aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvTmF0aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmU3MjNjNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIC9kZXYv
bnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtX
ZWJJbnNwZWN0b3IuU2lkZWJhclBhbmV9Ci0gKi8KLVdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3Bv
aW50c1NpZGViYXJQYW5lID0gZnVuY3Rpb24odGl0bGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNp
ZGViYXJQYW5lLmNhbGwodGhpcywgdGl0bGUpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENT
UygiYnJlYWtwb2ludHNMaXN0LmNzcyIpOwotCi0gICAgdGhpcy5saXN0RWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7Ci0gICAgdGhpcy5saXN0RWxlbWVudC5jbGFzc05hbWUg
PSAiYnJlYWtwb2ludC1saXN0IjsKLQotICAgIHRoaXMuZW1wdHlFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbXB0eUVsZW1lbnQuY2xhc3NOYW1lID0g
ImluZm8iOwotICAgIHRoaXMuZW1wdHlFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJObyBCcmVha3BvaW50cyIpOwotCi0gICAgdGhpcy5ib2R5RWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXRpdmVCcmVh
a3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKLSAgICBfYWRkTGlzdEVsZW1lbnQ6IGZ1
bmN0aW9uKGVsZW1lbnQsIGJlZm9yZUVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiAoYmVmb3Jl
RWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMubGlzdEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVsZW1l
bnQsIGJlZm9yZUVsZW1lbnQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICghdGhp
cy5saXN0RWxlbWVudC5maXJzdENoaWxkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5ib2R5RWxl
bWVudC5yZW1vdmVDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHRoaXMubGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgX3JlbW92ZUxpc3RFbGVtZW50OiBmdW5jdGlvbihlbGVt
ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5saXN0RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50
KTsKLSAgICAgICAgaWYgKCF0aGlzLmxpc3RFbGVtZW50LmZpcnN0Q2hpbGQpIHsKLSAgICAgICAg
ICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5saXN0RWxlbWVudCk7Ci0gICAg
ICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZW1wdHlFbGVtZW50KTsK
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMubGlzdEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgaWYgKHRoaXMu
bGlzdEVsZW1lbnQucGFyZW50RWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVu
dC5yZW1vdmVDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKLSAgICAgICAgICAgIHRoaXMuYm9keUVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbXB0eUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLnByb3RvdHlwZQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVIZWFw
U25hcHNob3QuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhl
YXBTbmFwc2hvdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIyZWU0My4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBT
bmFwc2hvdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90fQotICovCi1XZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90ID0gZnVuY3Rpb24ocHJvZmlsZSkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LmNhbGwodGhpcywgcHJvZmlsZSk7Ci0gICAgdGhpcy5f
bm9kZU9iamVjdFR5cGUgPSB0aGlzLl9tZXRhTm9kZS50eXBlX3N0cmluZ3NbIm9iamVjdCJdOwot
ICAgIHRoaXMuX2VkZ2VXZWFrVHlwZSA9IHRoaXMuX21ldGFOb2RlLnR5cGVfc3RyaW5nc1sid2Vh
ayJdOwotICAgIHRoaXMuX2VkZ2VFbGVtZW50VHlwZSA9IHRoaXMuX21ldGFOb2RlLnR5cGVfc3Ry
aW5nc1sicHJvcGVydHkiXTsKLX0KLQotV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBTbmFwc2hvdC5w
cm90b3R5cGUgPSB7Ci0gICAgY3JlYXRlTm9kZTogZnVuY3Rpb24obm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90Tm9kZSh0
aGlzLCBub2RlSW5kZXgpOwotICAgIH0sCi0KLSAgICBjcmVhdGVFZGdlOiBmdW5jdGlvbihlZGdl
cywgZWRnZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcFNuYXBzaG90RWRnZSh0aGlzLCBlZGdlcywgZWRnZUluZGV4KTsKLSAgICB9LAotCi0g
ICAgY3JlYXRlUmV0YWluaW5nRWRnZTogZnVuY3Rpb24ocmV0YWluZWROb2RlSW5kZXgsIHJldGFp
bmVySW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVI
ZWFwU25hcHNob3RSZXRhaW5lckVkZ2UodGhpcywgcmV0YWluZWROb2RlSW5kZXgsIHJldGFpbmVy
SW5kZXgpOwotICAgIH0sCi0KLSAgICBfbWFya0ludmlzaWJsZUVkZ2VzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgIH0sCi0KLSAgICBfY2FsY3VsYXRlRmxhZ3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgfSwKLQotICAgIHVzZXJPYmplY3RzTWFwQW5kRmxhZzogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIGltYWdlczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGFnZ3JlZ2F0ZXNCeUNsYXNzTmFtZSA9IHRoaXMuYWdncmVnYXRlcyhm
YWxzZSwgImFsbE9iamVjdHMiKTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICB2
YXIgY2FjaGVkSW1hZ2VzID0gYWdncmVnYXRlc0J5Q2xhc3NOYW1lWyJXZWJDb3JlOjpDYWNoZWRJ
bWFnZSJdOwotICAgICAgICBmdW5jdGlvbiBnZXRJbWFnZU5hbWUobm9kZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG5vZGUubmFtZSgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMu
X2FkZE5vZGVzKGNhY2hlZEltYWdlcywgZ2V0SW1hZ2VOYW1lLCByZXN1bHQpOwotCi0gICAgICAg
IHZhciBjYW52YXNlcyA9IGFnZ3JlZ2F0ZXNCeUNsYXNzTmFtZVsiV2ViQ29yZTo6SFRNTENhbnZh
c0VsZW1lbnQiXTsKLSAgICAgICAgZnVuY3Rpb24gZ2V0Q2FudmFzTmFtZShub2RlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gIkhUTUxDYW52YXNFbGVtZW50IjsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLl9hZGROb2RlcyhjYW52YXNlcywgZ2V0Q2FudmFzTmFtZSwgcmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgX2FkZE5vZGVzOiBmdW5jdGlv
bihjbGFzc0RhdGEsIG5hbWVSZXNvbHZlciwgcmVzdWx0KQotICAgIHsKLSAgICAgICAgaWYgKCFj
bGFzc0RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5y
b290Tm9kZSgpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzRGF0YS5pZHhzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9IGNsYXNzRGF0YS5pZHhz
W2ldOwotICAgICAgICAgICAgcmVzdWx0LnB1c2goewotICAgICAgICAgICAgICAgIG5hbWU6IG5h
bWVSZXNvbHZlcihub2RlKSwKLSAgICAgICAgICAgICAgICBzaXplOiBub2RlLnJldGFpbmVkU2l6
ZSgpLAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZQotfTsKLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZX0KLSAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBTbmFwc2hvdH0gc25hcHNob3QKLSAqIEBw
YXJhbSB7bnVtYmVyPX0gbm9kZUluZGV4Ci0gKi8KLVdlYkluc3BlY3Rvci5OYXRpdmVIZWFwU25h
cHNob3ROb2RlID0gZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJbmRleCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5jYWxsKHRoaXMsIHNuYXBzaG90LCBub2RlSW5kZXgpCi19
Ci0KLVdlYkluc3BlY3Rvci5OYXRpdmVIZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKLSAg
ICBjbGFzc05hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zbmFw
c2hvdC5fc3RyaW5nc1t0aGlzLmNsYXNzSW5kZXgoKV07Ci0gICAgfSwKLQotICAgIGNsYXNzSW5k
ZXg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fbm9k
ZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fbm9kZVR5cGVPZmZzZXRdOwotICAg
IH0sCi0KLSAgICBpZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Nu
YXBzaG90Ll9ub2Rlc1t0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlSWRPZmZz
ZXRdOwotICAgIH0sCi0KLSAgICBuYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fc25hcHNob3QuX3N0cmluZ3NbdGhpcy5fc25hcHNob3QuX25vZGVzW3RoaXMubm9k
ZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVOYW1lT2Zmc2V0XV07OwotICAgIH0sCi0KLSAg
ICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICBpZDogdGhpcy5pZCgpLAotICAgICAgICAgICAgbmFtZTogdGhpcy5jbGFzc05hbWUoKSwK
LSAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLm5hbWUoKSwKLSAgICAgICAgICAgIGRpc3Rh
bmNlOiB0aGlzLmRpc3RhbmNlKCksCi0gICAgICAgICAgICBub2RlSW5kZXg6IHRoaXMubm9kZUlu
ZGV4LAotICAgICAgICAgICAgcmV0YWluZWRTaXplOiB0aGlzLnJldGFpbmVkU2l6ZSgpLAotICAg
ICAgICAgICAgc2VsZlNpemU6IHRoaXMuc2VsZlNpemUoKSwKLSAgICAgICAgICAgIHR5cGU6IHRo
aXMuX3NuYXBzaG90Ll9ub2RlT2JqZWN0VHlwZQotICAgICAgIH07Ci0gICAgfSwKLQotICAgIGlz
SGlkZGVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwK
LQotICAgIGlzU3ludGhldGljOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGUucHJvdG90eXBlCi19OwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcFNuYXBzaG90fSBzbmFwc2hvdAotICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZWRn
ZXMKLSAqIEBwYXJhbSB7bnVtYmVyPX0gZWRnZUluZGV4Ci0gKi8KLVdlYkluc3BlY3Rvci5OYXRp
dmVIZWFwU25hcHNob3RFZGdlID0gZnVuY3Rpb24oc25hcHNob3QsIGVkZ2VzLCBlZGdlSW5kZXgp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2UuY2FsbCh0aGlzLCBzbmFwc2hv
dCwgZWRnZXMsIGVkZ2VJbmRleCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXRpdmVIZWFwU25hcHNo
b3RFZGdlLnByb3RvdHlwZSA9IHsKLSAgICBjbG9uZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90RWRnZSh0aGlzLl9z
bmFwc2hvdCwgdGhpcy5fZWRnZXMsIHRoaXMuZWRnZUluZGV4KTsKLSAgICB9LAotCi0gICAgaGFz
U3RyaW5nTmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSwKLQotICAgIGlzSGlkZGVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSwKLQotICAgIGlzV2VhazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBpc0ludGVybmFsOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIGlzSW52aXNpYmxlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIGlzU2hvcnRj
dXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0g
ICAgbmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90
Ll9zdHJpbmdzW3RoaXMuX25hbWVPckluZGV4KCldOwotICAgIH0sCi0KLSAgICB0b1N0cmluZzog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICAiTmF0aXZlSGVhcFNuYXBzaG90RWRn
ZTogIiArIHRoaXMubmFtZSgpOwotICAgIH0sCi0KLSAgICBfbmFtZU9ySW5kZXg6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lZGdlcy5pdGVtKHRoaXMuZWRnZUluZGV4
ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VOYW1lT2Zmc2V0KTsKLSAgICB9LAotCi0gICAgX19wcm90
b19fOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZS5wcm90b3R5cGUKLX07Ci0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UmV0YWluZXJFZGdlfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90
fSBzbmFwc2hvdAotICovCi1XZWJJbnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90UmV0YWluZXJF
ZGdlID0gZnVuY3Rpb24oc25hcHNob3QsIHJldGFpbmVkTm9kZUluZGV4LCByZXRhaW5lckluZGV4
KQotewotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UuY2FsbCh0aGlz
LCBzbmFwc2hvdCwgcmV0YWluZWROb2RlSW5kZXgsIHJldGFpbmVySW5kZXgpOwotfQotCi1XZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsKLSAg
ICBjbG9uZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9y
ZXRhaW5lZE5vZGVJbmRleCwgdGhpcy5yZXRhaW5lckluZGV4KCkpOwotICAgIH0sCi0KLSAgICBp
c0hpZGRlbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2UoKS5p
c0hpZGRlbigpOwotICAgIH0sCi0KLSAgICBpc0ludGVybmFsOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fZWRnZSgpLmlzSW50ZXJuYWwoKTsKLSAgICB9LAotCi0gICAg
aXNJbnZpc2libGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lZGdl
KCkuaXNJbnZpc2libGUoKTsKLSAgICB9LAotCi0gICAgaXNTaG9ydGN1dDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2UoKS5pc1Nob3J0Y3V0KCk7Ci0gICAgfSwK
LQotICAgIGlzV2VhazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Vk
Z2UoKS5pc1dlYWsoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeUdyYXBoLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlHcmFwaC5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkODRlYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeUdyYXBoLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMzYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5l
UGFuZWx9IHRpbWVsaW5lUGFuZWwKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9k
ZWx9IG1vZGVsCi0gKiBAcGFyYW0ge251bWJlcn0gc2lkZWJhcldpZHRoCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuTWVtb3J5U3RhdGlzdGljc30KLSAqLwotV2Vi
SW5zcGVjdG9yLk5hdGl2ZU1lbW9yeUdyYXBoID0gZnVuY3Rpb24odGltZWxpbmVQYW5lbCwgbW9k
ZWwsIHNpZGViYXJXaWR0aCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuTWVtb3J5U3RhdGlzdGljcy5j
YWxsKHRoaXMsIHRpbWVsaW5lUGFuZWwsIG1vZGVsLCBzaWRlYmFyV2lkdGgpOwotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5NZW1vcnlTdGF0aXN0
aWNzLkNvdW50ZXJ9Ci0gKi8KLVdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlHcmFwaC5Db3VudGVy
ID0gZnVuY3Rpb24odGltZSwgbmF0aXZlQ291bnRlcnMpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk1l
bW9yeVN0YXRpc3RpY3MuQ291bnRlci5jYWxsKHRoaXMsIHRpbWUpOwotICAgIHRoaXMubmF0aXZl
Q291bnRlcnMgPSBuYXRpdmVDb3VudGVyczsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQ291bnRlclVJQmFzZX0KLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLk5hdGl2ZU1lbW9yeUdyYXBofSBtZW1vcnlDb3VudGVyc1BhbmUKLSAqIEBwYXJhbSB7
c3RyaW5nfSB0aXRsZQotICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaHNsCi0gKiBAcGFyYW0g
e2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlHcmFwaC5Db3VudGVyKTpudW1iZXJ9
IHZhbHVlR2V0dGVyCi0gKi8KLVdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlDb3VudGVyVUkgPSBm
dW5jdGlvbihtZW1vcnlDb3VudGVyc1BhbmUsIHRpdGxlLCBoc2wsIHZhbHVlR2V0dGVyKQotewot
ICAgIHZhciBzd2F0Y2hDb2xvciA9IHRoaXMuX2hzbFRvU3RyaW5nKGhzbCk7Ci0gICAgV2ViSW5z
cGVjdG9yLkNvdW50ZXJVSUJhc2UuY2FsbCh0aGlzLCBtZW1vcnlDb3VudGVyc1BhbmUsIHRpdGxl
LCBzd2F0Y2hDb2xvciwgdmFsdWVHZXR0ZXIpOwotICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fc3dh
dGNoLmVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAibWVtb3J5LWNhdGVnb3J5LXZhbHVlIik7
Ci0KLSAgICBjb25zdCBib3JkZXJMaWdodG5lc3NEaWZmZXJlbmNlID0gMzsKLSAgICBoc2xbMl0g
LT0gYm9yZGVyTGlnaHRuZXNzRGlmZmVyZW5jZTsKLSAgICB0aGlzLnN0cm9rZUNvbG9yID0gdGhp
cy5faHNsVG9TdHJpbmcoaHNsKTsKLSAgICB0aGlzLmdyYXBoWVZhbHVlcyA9IFtdOwotfQotCi1X
ZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5Q291bnRlclVJLnByb3RvdHlwZSA9IHsKLSAgICBfaHNs
VG9TdHJpbmc6IGZ1bmN0aW9uKGhzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiaHNsKCIgKyBo
c2xbMF0gKyAiLCIgKyBoc2xbMV0gKyAiJSwiICsgaHNsWzJdICsgIiUpIjsKLSAgICB9LAotCi0g
ICAgdXBkYXRlQ3VycmVudFZhbHVlOiBmdW5jdGlvbihjb3VudGVyc0VudHJ5KQotICAgIHsKLSAg
ICAgICAgdmFyIGJ5dGVzID0gdGhpcy52YWx1ZUdldHRlcihjb3VudGVyc0VudHJ5KTsKLSAgICAg
ICAgdmFyIG1lZ2FieXRlcyA9ICBieXRlcyAvICgxMDI0ICogMTAyNCk7Ci0gICAgICAgIHRoaXMu
X3ZhbHVlLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjFmXHUyMDA5TUIi
LCBtZWdhYnl0ZXMpOwotICAgIH0sCi0KLSAgICBjbGVhckN1cnJlbnRWYWx1ZUFuZE1hcmtlcjog
ZnVuY3Rpb24oY3R4KQotICAgIHsKLSAgICAgICAgdGhpcy5fdmFsdWUudGV4dENvbnRlbnQgPSAi
IjsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQ291bnRlclVJQmFzZS5w
cm90b3R5cGUKLX0KLQotCi1XZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5R3JhcGgucHJvdG90eXBl
ID0gewotICAgIF9jcmVhdGVDdXJyZW50VmFsdWVzQmFyOiBmdW5jdGlvbigpCi0gICAgewotICAg
IH0sCi0KLSAgICBfY3JlYXRlQ291bnRlclVJTGlzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIG5hdGl2ZUNvdW50ZXJzID0gWwotICAgICAgICAgICAgIkpTRXh0ZXJuYWxSZXNvdXJj
ZXMiLAotICAgICAgICAgICAgIkNTUyIsCi0gICAgICAgICAgICAiR2x5cGhDYWNoZSIsCi0gICAg
ICAgICAgICAiSW1hZ2UiLAotICAgICAgICAgICAgIlJlc291cmNlcyIsCi0gICAgICAgICAgICAi
RE9NIiwKLSAgICAgICAgICAgICJSZW5kZXJpbmciLAotICAgICAgICAgICAgIkF1ZGlvIiwKLSAg
ICAgICAgICAgICJXZWJJbnNwZWN0b3IiLAotICAgICAgICAgICAgIkpTSGVhcC5Vc2VkIiwKLSAg
ICAgICAgICAgICJKU0hlYXAuVW51c2VkIiwKLSAgICAgICAgICAgICJNYWxsb2NXYXN0ZSIsCi0g
ICAgICAgICAgICAiT3RoZXIiLAotICAgICAgICAgICAgIlByaXZhdGVCeXRlcyIsCi0gICAgICAg
IF07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gICAg
ICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGdl
dENvdW50ZXJWYWx1ZShuYW1lLCBlbnRyeSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IChlbnRyeS5uYXRpdmVDb3VudGVycyAmJiBlbnRyeS5uYXRpdmVDb3VudGVyc1tuYW1lXSkgfHwg
MDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBsaXN0ID0gW107Ci0gICAgICAgIGZvciAodmFy
IGkgPSBuYXRpdmVDb3VudGVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAg
ICAgdmFyIG5hbWUgPSBuYXRpdmVDb3VudGVyc1tpXTsKLSAgICAgICAgICAgIGlmICgiUHJpdmF0
ZUJ5dGVzIiA9PT0gbmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBjb3VudGVyVUkgPSBuZXcg
V2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeUNvdW50ZXJVSSh0aGlzLCAiVG90YWwiLCBbMCwgMCwg
MF0sIGdldENvdW50ZXJWYWx1ZS5iaW5kKHRoaXMsIG5hbWUpKQotICAgICAgICAgICAgICAgIHRo
aXMuX3ByaXZhdGVCeXRlc0NvdW50ZXIgPSBjb3VudGVyVUk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHZhciBjb3VudGVyVUkgPSBuZXcgV2ViSW5zcGVjdG9yLk5hdGl2
ZU1lbW9yeUNvdW50ZXJVSSh0aGlzLCBuYW1lLCBbaSAqIDIwLCA2NSwgNjNdLCBnZXRDb3VudGVy
VmFsdWUuYmluZCh0aGlzLCBuYW1lKSkKLSAgICAgICAgICAgICAgICBsaXN0LnB1c2goY291bnRl
clVJKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdC5yZXZl
cnNlKCk7Ci0gICAgfSwKLQotICAgIF9jYW52YXNIZWlnaHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9jYW52YXNDb250YWluZXIub2Zmc2V0SGVpZ2h0OwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAg
ICAgKi8KLSAgICBfb25SZWNvcmRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgc3RhdGlzdGljcyA9IHRoaXMuX2NvdW50ZXJzOwotICAgICAgICBmdW5jdGlvbiBhZGRT
dGF0aXN0aWNzKHJlY29yZCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG5hdGl2ZUNvdW50
ZXJzID0gcmVjb3JkWyJuYXRpdmVIZWFwU3RhdGlzdGljcyJdOwotICAgICAgICAgICAgaWYgKCFu
YXRpdmVDb3VudGVycykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHZh
ciBrbm93blNpemUgPSAwOwotICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBuYXRpdmVDb3Vu
dGVycykgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAiUHJpdmF0ZUJ5dGVzIikKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAga25vd25TaXplICs9
IG5hdGl2ZUNvdW50ZXJzW25hbWVdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmF0aXZl
Q291bnRlcnNbIk90aGVyIl0gPSBuYXRpdmVDb3VudGVyc1siUHJpdmF0ZUJ5dGVzIl0gLSBrbm93
blNpemU7Ci0KLSAgICAgICAgICAgIHN0YXRpc3RpY3MucHVzaChuZXcgV2ViSW5zcGVjdG9yLk5h
dGl2ZU1lbW9yeUdyYXBoLkNvdW50ZXIoCi0gICAgICAgICAgICAgICAgcmVjb3JkLmVuZFRpbWUg
fHwgcmVjb3JkLnN0YXJ0VGltZSwKLSAgICAgICAgICAgICAgICBuYXRpdmVDb3VudGVycwotICAg
ICAgICAgICAgKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJl
c2VudGF0aW9uTW9kZWwuZm9yQWxsUmVjb3JkcyhbZXZlbnQuZGF0YV0sIG51bGwsIGFkZFN0YXRp
c3RpY3MpOwotICAgIH0sCi0KLSAgICBfZHJhdzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLk1lbW9yeVN0YXRpc3RpY3MucHJvdG90eXBlLl9kcmF3LmNhbGwodGhpcyk7
Ci0KLSAgICAgICAgdmFyIG1heFZhbHVlID0gdGhpcy5fbWF4Q291bnRlclZhbHVlKCk7Ci0gICAg
ICAgIHRoaXMuX3Jlc2V0VG90YWxWYWx1ZXMoKTsKLQotICAgICAgICB2YXIgcHJldmlvdXNDb3Vu
dGVyVUk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY291bnRlclVJLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICB0aGlzLl9kcmF3R3JhcGgodGhpcy5fY291bnRlclVJW2ld
LCBwcmV2aW91c0NvdW50ZXJVSSwgbWF4VmFsdWUpOwotICAgICAgICAgICAgaWYgKHRoaXMuX2Nv
dW50ZXJVSVtpXS52aXNpYmxlKQotICAgICAgICAgICAgICAgIHByZXZpb3VzQ291bnRlclVJID0g
dGhpcy5fY291bnRlclVJW2ldOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHgKLSAgICAgKi8KLSAgICBfY2xl
YXJDdXJyZW50VmFsdWVBbmRNYXJrZXI6IGZ1bmN0aW9uKGN0eCkKLSAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5NZW1vcnlTdGF0aXN0aWNzLnByb3RvdHlwZS5fY2xlYXJDdXJyZW50VmFsdWVB
bmRNYXJrZXIuY2FsbCh0aGlzLCBjdHgpOwotICAgICAgICB0aGlzLl9wcml2YXRlQnl0ZXNDb3Vu
dGVyLmNsZWFyQ3VycmVudFZhbHVlQW5kTWFya2VyKGN0eCk7Ci0gICAgfSwKLQotICAgIF91cGRh
dGVDdXJyZW50VmFsdWU6IGZ1bmN0aW9uKGNvdW50ZXJFbnRyeSkKLSAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5NZW1vcnlTdGF0aXN0aWNzLnByb3RvdHlwZS5fdXBkYXRlQ3VycmVudFZhbHVl
LmNhbGwodGhpcywgY291bnRlckVudHJ5KTsKLSAgICAgICAgdGhpcy5fcHJpdmF0ZUJ5dGVzQ291
bnRlci51cGRhdGVDdXJyZW50VmFsdWUoY291bnRlckVudHJ5KTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eAotICAgICAqLwot
ICAgIF9yZXN0b3JlSW1hZ2VVbmRlck1hcmtlcjogZnVuY3Rpb24oY3R4KQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX2ltYWdlVW5kZXJNYXJrZXIpCi0gICAgICAgICAgICBjdHgucHV0SW1hZ2VE
YXRhKHRoaXMuX2ltYWdlVW5kZXJNYXJrZXIuaW1hZ2VEYXRhLCB0aGlzLl9pbWFnZVVuZGVyTWFy
a2VyLngsIHRoaXMuX2ltYWdlVW5kZXJNYXJrZXIueSk7Ci0gICAgICAgIHRoaXMuX2Rpc2NhcmRJ
bWFnZVVuZGVyTWFya2VyKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHgKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdAot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHQK
LSAgICAgKiBAcGFyYW0ge251bWJlcn0gYm90dG9tCi0gICAgICovCi0gICAgX3NhdmVJbWFnZVVu
ZGVyTWFya2VyOiBmdW5jdGlvbihjdHgsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkKLSAgICB7
Ci0gICAgICAgIHZhciBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbSk7Ci0gICAgICAgIHRoaXMuX2ltYWdlVW5kZXJNYXJrZXIgPSB7Ci0gICAgICAg
ICAgICB4OiBsZWZ0LAotICAgICAgICAgICAgeTogdG9wLAotICAgICAgICAgICAgaW1hZ2VEYXRh
OiBpbWFnZURhdGEKLSAgICAgICAgfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gICAgICovCi0gICAgX2RyYXdNYXJrZXI6
IGZ1bmN0aW9uKGN0eCwgeCwgaW5kZXgpCi0gICAgewotICAgICAgICB2YXIgbGVmdCA9IHRoaXMu
X2NvdW50ZXJzW2luZGV4XS54OwotICAgICAgICB2YXIgcmlnaHQgPSBpbmRleCArIDEgPCB0aGlz
Ll9jb3VudGVycy5sZW5ndGggPyB0aGlzLl9jb3VudGVyc1tpbmRleCArIDFdLnggOiBsZWZ0Owot
ICAgICAgICB2YXIgdG9wID0gdGhpcy5fb3JpZ2luWTsKLSAgICAgICAgdG9wID0gMDsKLSAgICAg
ICAgdmFyIGJvdHRvbSA9IHRvcCArIHRoaXMuX2NsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIGJvdHRv
bSArPSB0aGlzLl9vcmlnaW5ZOwotCi0gICAgICAgIHRoaXMuX3NhdmVJbWFnZVVuZGVyTWFya2Vy
KGN0eCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLQotICAgICAgICBjdHguYmVnaW5QYXRo
KCk7Ci0gICAgICAgIGN0eC5tb3ZlVG8obGVmdCwgdG9wKTsKLSAgICAgICAgY3R4LmxpbmVUbyhy
aWdodCwgdG9wKTsKLSAgICAgICAgY3R4LmxpbmVUbyhyaWdodCwgYm90dG9tKTsKLSAgICAgICAg
Y3R4LmxpbmVUbyhsZWZ0LCBib3R0b20pOwotICAgICAgICBjdHgubGluZVdpZHRoID0gMTsKLSAg
ICAgICAgY3R4LmNsb3NlUGF0aCgpOwotICAgICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMjIw
LDIyMCwyMjAsMC4zKSI7Ci0gICAgICAgIGN0eC5maWxsKCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBfbWF4Q291bnRlclZhbHVlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2NvdW50ZXJzLmxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIHZhciB2YWx1ZUdldHRlciA9IHRoaXMuX3By
aXZhdGVCeXRlc0NvdW50ZXIudmFsdWVHZXR0ZXI7Ci0gICAgICAgIHZhciByZXN1bHQgPSAwOwot
ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fbWluaW11bUluZGV4OyBpIDwgdGhpcy5fbWF4aW11
bUluZGV4OyBpKyspIHsKLSAgICAgICAgICAgIHZhciBjb3VudGVyID0gdGhpcy5fY291bnRlcnNb
aV07Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZUdldHRlcihjb3VudGVyKTsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBfcmVz
ZXRUb3RhbFZhbHVlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRo
aXMuX21pbmltdW1JbmRleDsgaSA8PSB0aGlzLl9tYXhpbXVtSW5kZXg7IGkrKykgewotICAgICAg
ICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyc1tpXTsKLSAgICAgICAgICAgIGNvdW50
ZXIudG90YWwgPSAwOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkNvdW50ZXJVSUJhc2V9IGNvdW50ZXJVSQotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkNvdW50ZXJVSUJhc2V9IHByZXZpb3VzQ291bnRlclVJCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IG1heFRvdGFsVmFsdWUKLSAgICAgKi8KLSAgICBfZHJhd0dyYXBoOiBmdW5j
dGlvbihjb3VudGVyVUksIHByZXZpb3VzQ291bnRlclVJLCBtYXhUb3RhbFZhbHVlKQotICAgIHsK
LSAgICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhczsKLSAgICAgICAgdmFyIGN0eCA9IGNh
bnZhcy5nZXRDb250ZXh0KCIyZCIpOwotICAgICAgICB2YXIgd2lkdGggPSBjYW52YXMud2lkdGg7
Ci0gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLl9jbGlwcGVkSGVpZ2h0OwotICAgICAgICB2YXIg
b3JpZ2luWSA9IHRoaXMuX29yaWdpblk7Ci0gICAgICAgIHZhciB2YWx1ZUdldHRlciA9IGNvdW50
ZXJVSS52YWx1ZUdldHRlcjsKLQotICAgICAgICBpZiAoIXRoaXMuX2NvdW50ZXJzLmxlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWNvdW50ZXJVSS52aXNpYmxlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9taW5pbXVt
SW5kZXg7IGkgPD0gdGhpcy5fbWF4aW11bUluZGV4OyBpKyspIHsKLSAgICAgICAgICAgIHZhciBj
b3VudGVyID0gdGhpcy5fY291bnRlcnNbaV07Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1
ZUdldHRlcihjb3VudGVyKTsKLSAgICAgICAgICAgIGNvdW50ZXIudG90YWwgKz0gdmFsdWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YXIgeVZhbHVlcyA9IGNvdW50ZXJVSS5ncmFwaFlWYWx1ZXM7
Ci0gICAgICAgIHlWYWx1ZXMubGVuZ3RoID0gdGhpcy5fY291bnRlcnMubGVuZ3RoOwotCi0gICAg
ICAgIHZhciBtYXhZUmFuZ2UgPSAgbWF4VG90YWxWYWx1ZTsKLSAgICAgICAgdmFyIHlGYWN0b3Ig
PSBtYXhZUmFuZ2UgPyBoZWlnaHQgLyAobWF4WVJhbmdlKSA6IDE7Ci0KLSAgICAgICAgY3R4LmJl
Z2luUGF0aCgpOwotICAgICAgICBpZiAocHJldmlvdXNDb3VudGVyVUkpIHsKLSAgICAgICAgICAg
IHZhciBwcmV2WVZhbHVlcyA9IHByZXZpb3VzQ291bnRlclVJLmdyYXBoWVZhbHVlczsKLSAgICAg
ICAgICAgIHZhciBjdXJyZW50WSA9IHByZXZZVmFsdWVzW3RoaXMuX21heGltdW1JbmRleF07Ci0g
ICAgICAgICAgICBjdHgubW92ZVRvKHdpZHRoLCBjdXJyZW50WSk7Ci0gICAgICAgICAgICB2YXIg
Y3VycmVudFggPSB3aWR0aDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9tYXhpbXVt
SW5kZXggLSAxOyBpID49IHRoaXMuX21pbmltdW1JbmRleDsgaS0tKSB7Ci0gICAgICAgICAgICAg
ICAgY3VycmVudFkgPSBwcmV2WVZhbHVlc1tpXTsKLSAgICAgICAgICAgICAgICBjdXJyZW50WCA9
IHRoaXMuX2NvdW50ZXJzW2ldLng7Ci0gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhjdXJyZW50
WCwgY3VycmVudFkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdmFyIGxhc3RZID0gb3JpZ2luWSArIGhlaWdodDsKLSAgICAgICAgICAgIGN0eC5tb3ZlVG8o
d2lkdGgsIGxhc3RZKTsKLSAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgbGFzdFkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRZID0gb3JpZ2luWSArIChoZWlnaHQgLSB0aGlzLl9j
b3VudGVyc1t0aGlzLl9taW5pbXVtSW5kZXhdLnRvdGFsICogeUZhY3Rvcik7Ci0gICAgICAgIGN0
eC5saW5lVG8oMCwgY3VycmVudFkpOwotICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fbWluaW11
bUluZGV4OyBpIDw9IHRoaXMuX21heGltdW1JbmRleDsgaSsrKSB7Ci0gICAgICAgICAgICAgdmFy
IGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyc1tpXTsKLSAgICAgICAgICAgICB2YXIgeCA9IGNvdW50
ZXIueDsKLSAgICAgICAgICAgICBjdXJyZW50WSA9IG9yaWdpblkgKyAoaGVpZ2h0IC0gY291bnRl
ci50b3RhbCAqIHlGYWN0b3IpOwotICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgY3VycmVudFkp
OwotCi0gICAgICAgICAgICAgeVZhbHVlc1tpXSA9IGN1cnJlbnRZOwotICAgICAgICB9Ci0gICAg
ICAgIGN0eC5saW5lVG8od2lkdGgsIGN1cnJlbnRZKTsKLSAgICAgICAgY3R4LmNsb3NlUGF0aCgp
OwotICAgICAgICBjdHgubGluZVdpZHRoID0gMTsKLQotICAgICAgICBjdHguc3Ryb2tlU3R5bGUg
PSBjb3VudGVyVUkuc3Ryb2tlQ29sb3I7Ci0gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb3VudGVy
VUkuZ3JhcGhDb2xvcjsKLSAgICAgICAgY3R4LmZpbGwoKTsKLSAgICAgICAgY3R4LnN0cm9rZSgp
OwotICAgIH0sCi0KLSAgICBfZGlzY2FyZEltYWdlVW5kZXJNYXJrZXI6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9pbWFnZVVuZGVyTWFya2VyOwotICAgIH0sCi0KLSAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5NZW1vcnlTdGF0aXN0aWNzLnByb3RvdHlwZQotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdmlnYXRv
ck92ZXJsYXlDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9OYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDEyODBjNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL05hdmlnYXRvck92ZXJsYXlDb250cm9sbGVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MTgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KLSAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlNpZGViYXJWaWV3fSBwYXJlbnRTaWRlYmFyVmlldwotICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVmlld30gbmF2aWdhdG9yVmlldwotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVmlld30gZWRpdG9yVmlldwotICovCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yT3Zlcmxh
eUNvbnRyb2xsZXIgPSBmdW5jdGlvbihwYXJlbnRTaWRlYmFyVmlldywgbmF2aWdhdG9yVmlldywg
ZWRpdG9yVmlldykKLXsKLSAgICB0aGlzLl9wYXJlbnRTaWRlYmFyVmlldyA9IHBhcmVudFNpZGVi
YXJWaWV3OwotICAgIHRoaXMuX25hdmlnYXRvclZpZXcgPSBuYXZpZ2F0b3JWaWV3OwotICAgIHRo
aXMuX2VkaXRvclZpZXcgPSBlZGl0b3JWaWV3OwotCi0gICAgdGhpcy5fbmF2aWdhdG9yU2lkZWJh
clJlc2l6ZVdpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAg
ICB0aGlzLl9uYXZpZ2F0b3JTaWRlYmFyUmVzaXplV2lkZ2V0RWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJzY3JpcHRzLW5hdmlnYXRvci1yZXNpemVyLXdpZGdldCIpOwotICAgIHRoaXMuX3BhcmVudFNp
ZGViYXJWaWV3Lmluc3RhbGxSZXNpemVyKHRoaXMuX25hdmlnYXRvclNpZGViYXJSZXNpemVXaWRn
ZXRFbGVtZW50KTsKLSAgICB0aGlzLl9uYXZpZ2F0b3JWaWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5fbmF2aWdhdG9yU2lkZWJhclJlc2l6ZVdpZGdldEVsZW1lbnQpOwotCi0gICAgdGhpcy5f
bmF2aWdhdG9yU2hvd0hpZGVCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRv
bihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgbmF2aWdhdG9yIiksICJzY3JpcHRzLW5hdmln
YXRvci1zaG93LWhpZGUtYnV0dG9uIiwgMyk7Ci0gICAgdGhpcy5fbmF2aWdhdG9yU2hvd0hpZGVC
dXR0b24uc3RhdGUgPSAicGlubmVkIjsKLSAgICB0aGlzLl9uYXZpZ2F0b3JTaG93SGlkZUJ1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZU5hdmlnYXRvciwgdGhpcyk7
Ci0gICAgdGhpcy5fZWRpdG9yVmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX25hdmlnYXRv
clNob3dIaWRlQnV0dG9uLmVsZW1lbnQpOwotCi0gICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLm5h
dmlnYXRvckhpZGRlbiA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKCJuYXZp
Z2F0b3JIaWRkZW4iLCB0cnVlKTsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLnNldHRpbmdzLm5hdmln
YXRvckhpZGRlbi5nZXQoKSkKLSAgICAgICAgdGhpcy5fdG9nZ2xlTmF2aWdhdG9yKCk7Ci19Ci0K
LVdlYkluc3BlY3Rvci5OYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlci5wcm90b3R5cGUgPSB7Ci0g
ICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0
KHRoaXMuX21heWJlU2hvd05hdmlnYXRvck92ZXJsYXkuYmluZCh0aGlzKSwgMCk7Ci0gICAgfSwK
LQotICAgIF9tYXliZVNob3dOYXZpZ2F0b3JPdmVybGF5OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAoV2ViSW5zcGVjdG9yLnNldHRpbmdzLm5hdmlnYXRvckhpZGRlbi5nZXQoKSAmJiAh
V2ViSW5zcGVjdG9yLnNldHRpbmdzLm5hdmlnYXRvcldhc09uY2VIaWRkZW4uZ2V0KCkpCi0gICAg
ICAgICAgICB0aGlzLnNob3dOYXZpZ2F0b3JPdmVybGF5KCk7Ci0gICAgfSwKLQotICAgIF90b2dn
bGVOYXZpZ2F0b3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9uYXZpZ2F0
b3JTaG93SGlkZUJ1dHRvbi5zdGF0ZSA9PT0gIm92ZXJsYXkiKQotICAgICAgICAgICAgdGhpcy5f
cGluTmF2aWdhdG9yKCk7Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMuX25hdmlnYXRvclNob3dIaWRl
QnV0dG9uLnN0YXRlID09PSAiaGlkZGVuIikKLSAgICAgICAgICAgIHRoaXMuc2hvd05hdmlnYXRv
ck92ZXJsYXkoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5faGlkZVBpbm5lZE5h
dmlnYXRvcigpOwotICAgIH0sCi0KLSAgICBfaGlkZVBpbm5lZE5hdmlnYXRvcjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yU2hvd0hpZGVCdXR0b24uc3RhdGUgPSAi
aGlkZGVuIjsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yU2hvd0hpZGVCdXR0b24udGl0bGUgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgbmF2aWdhdG9yIik7Ci0gICAgICAgIHRoaXMuX3Bh
cmVudFNpZGViYXJWaWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbmF2aWdhdG9yU2hvd0hp
ZGVCdXR0b24uZWxlbWVudCk7Ci0KLSAgICAgICAgdGhpcy5fZWRpdG9yVmlldy5lbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoIm5hdmlnYXRvci1oaWRkZW4iKTsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9y
U2lkZWJhclJlc2l6ZVdpZGdldEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0KLSAg
ICAgICAgdGhpcy5fcGFyZW50U2lkZWJhclZpZXcuaGlkZVNpZGViYXJFbGVtZW50KCk7Ci0gICAg
ICAgIHRoaXMuX25hdmlnYXRvclZpZXcuZGV0YWNoKCk7Ci0gICAgICAgIHRoaXMuX2VkaXRvclZp
ZXcuZm9jdXMoKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubmF2aWdhdG9yV2Fz
T25jZUhpZGRlbi5zZXQodHJ1ZSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5uYXZp
Z2F0b3JIaWRkZW4uc2V0KHRydWUpOwotICAgIH0sCi0KLSAgICBfcGluTmF2aWdhdG9yOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JTaG93SGlkZUJ1dHRvbi5zdGF0
ZSA9ICJwaW5uZWQiOwotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JTaG93SGlkZUJ1dHRvbi50aXRs
ZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSGlkZSBuYXZpZ2F0b3IiKTsKLQotICAgICAgICB0
aGlzLl9lZGl0b3JWaWV3LmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygibmF2aWdhdG9yLWhpZGRl
biIpOwotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JTaWRlYmFyUmVzaXplV2lkZ2V0RWxlbWVudC5y
ZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yVmlldy5lbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuX25hdmlnYXRvclNob3dIaWRlQnV0dG9uLmVsZW1lbnQpOwot
Ci0gICAgICAgIHRoaXMuX2lubmVySGlkZU5hdmlnYXRvck92ZXJsYXkoKTsKLSAgICAgICAgdGhp
cy5fcGFyZW50U2lkZWJhclZpZXcuc2hvd1NpZGViYXJFbGVtZW50KCk7Ci0gICAgICAgIHRoaXMu
X25hdmlnYXRvclZpZXcuc2hvdyh0aGlzLl9wYXJlbnRTaWRlYmFyVmlldy5zaWRlYmFyRWxlbWVu
dCk7Ci0gICAgICAgIHRoaXMuX25hdmlnYXRvclZpZXcuZm9jdXMoKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnNldHRpbmdzLm5hdmlnYXRvckhpZGRlbi5zZXQoZmFsc2UpOwotICAgIH0sCi0KLSAg
ICBzaG93TmF2aWdhdG9yT3ZlcmxheTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX25hdmlnYXRvclNob3dIaWRlQnV0dG9uLnN0YXRlID09PSAib3ZlcmxheSIpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yU2hvd0hpZGVCdXR0b24uc3Rh
dGUgPSAib3ZlcmxheSI7Ci0gICAgICAgIHRoaXMuX25hdmlnYXRvclNob3dIaWRlQnV0dG9uLnRp
dGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQaW4gbmF2aWdhdG9yIik7Ci0KLSAgICAgICAg
dGhpcy5fc2lkZWJhck92ZXJsYXkgPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJPdmVybGF5KHRo
aXMuX25hdmlnYXRvclZpZXcsICJzY3JpcHRzUGFuZWxOYXZpZ2F0b3JPdmVybGF5V2lkdGgiLCBQ
cmVmZXJlbmNlcy5taW5TY3JpcHRzU2lkZWJhcldpZHRoKTsKLSAgICAgICAgdGhpcy5fYm91bmRL
ZXlEb3duID0gdGhpcy5fa2V5RG93bi5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLl9zaWRlYmFy
T3ZlcmxheS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9ib3VuZEtl
eURvd24sIGZhbHNlKTsKLSAgICAgICAgdmFyIG5hdmlnYXRvck92ZXJsYXlSZXNpemVXaWRnZXRF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIG5hdmlnYXRv
ck92ZXJsYXlSZXNpemVXaWRnZXRFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNjcmlwdHMtbmF2aWdh
dG9yLXJlc2l6ZXItd2lkZ2V0Iik7Ci0gICAgICAgIHRoaXMuX3NpZGViYXJPdmVybGF5LnJlc2l6
ZXJXaWRnZXRFbGVtZW50ID0gbmF2aWdhdG9yT3ZlcmxheVJlc2l6ZVdpZGdldEVsZW1lbnQ7Ci0K
LSAgICAgICAgdGhpcy5fbmF2aWdhdG9yVmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX25h
dmlnYXRvclNob3dIaWRlQnV0dG9uLmVsZW1lbnQpOwotICAgICAgICB0aGlzLl9ib3VuZENvbnRh
aW5pbmdFbGVtZW50Rm9jdXNlZCA9IHRoaXMuX2NvbnRhaW5pbmdFbGVtZW50Rm9jdXNlZC5iaW5k
KHRoaXMpOwotICAgICAgICB0aGlzLl9wYXJlbnRTaWRlYmFyVmlldy5lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX2JvdW5kQ29udGFpbmluZ0VsZW1lbnRGb2N1c2Vk
LCBmYWxzZSk7Ci0KLSAgICAgICAgdGhpcy5fc2lkZWJhck92ZXJsYXkuc2hvdyh0aGlzLl9wYXJl
bnRTaWRlYmFyVmlldy5lbGVtZW50KTsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yVmlldy5mb2N1
cygpOwotICAgIH0sCi0KLSAgICBfa2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICBpZiAoZXZlbnQuaGFuZGxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
ZiAoZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5F
c2MuY29kZSkgewotICAgICAgICAgICAgdGhpcy5oaWRlTmF2aWdhdG9yT3ZlcmxheSgpOwotICAg
ICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBo
aWRlTmF2aWdhdG9yT3ZlcmxheTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X25hdmlnYXRvclNob3dIaWRlQnV0dG9uLnN0YXRlICE9PSAib3ZlcmxheSIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yU2hvd0hpZGVCdXR0b24uc3RhdGUg
PSAiaGlkZGVuIjsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yU2hvd0hpZGVCdXR0b24udGl0bGUg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgbmF2aWdhdG9yIik7Ci0gICAgICAgIHRoaXMu
X3BhcmVudFNpZGViYXJWaWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbmF2aWdhdG9yU2hv
d0hpZGVCdXR0b24uZWxlbWVudCk7Ci0KLSAgICAgICAgdGhpcy5faW5uZXJIaWRlTmF2aWdhdG9y
T3ZlcmxheSgpOwotICAgICAgICB0aGlzLl9lZGl0b3JWaWV3LmZvY3VzKCk7Ci0gICAgfSwKLQot
ICAgIF9pbm5lckhpZGVOYXZpZ2F0b3JPdmVybGF5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9wYXJlbnRTaWRlYmFyVmlldy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1v
dXNlZG93biIsIHRoaXMuX2JvdW5kQ29udGFpbmluZ0VsZW1lbnRGb2N1c2VkLCBmYWxzZSk7Ci0g
ICAgICAgIHRoaXMuX3NpZGViYXJPdmVybGF5LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIHRoaXMuX2JvdW5kS2V5RG93biwgZmFsc2UpOwotICAgICAgICB0aGlzLl9zaWRl
YmFyT3ZlcmxheS5oaWRlKCk7Ci0gICAgfSwKLQotICAgIF9jb250YWluaW5nRWxlbWVudEZvY3Vz
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCFldmVudC50YXJnZXQuaXNT
ZWxmT3JEZXNjZW5kYW50KHRoaXMuX3NpZGViYXJPdmVybGF5LmVsZW1lbnQpKQotICAgICAgICAg
ICAgdGhpcy5oaWRlTmF2aWdhdG9yT3ZlcmxheSgpOwotICAgIH0sCi0gICAgCi0gICAgaXNOYXZp
Z2F0b3JQaW5uZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9uYXZp
Z2F0b3JTaG93SGlkZUJ1dHRvbi5zdGF0ZSA9PT0gInBpbm5lZCI7Ci0gICAgfSwKLSAgICAKLSAg
ICBpc05hdmlnYXRvckhpZGRlbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX25hdmlnYXRvclNob3dIaWRlQnV0dG9uLnN0YXRlID09PSAiaGlkZGVuIjsKLSAgICB9Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdmlnYXRv
clZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdmlnYXRvclZp
ZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OTY0NDUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXZpZ2F0b3JWaWV3LmpzCisr
KyAvZGV2L251bGwKQEAgLTEsMTAzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCi0gKiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICog
QGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYklu
c3BlY3Rvci5OYXZpZ2F0b3JWaWV3ID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5W
aWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJuYXZpZ2F0b3JW
aWV3LmNzcyIpOwotCi0gICAgdGhpcy5fdHJlZVNlYXJjaEJveEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl90cmVlU2VhcmNoQm94RWxlbWVudC5jbGFz
c05hbWUgPSAibmF2aWdhdG9yLXRyZWUtc2VhcmNoLWJveCI7Ci0gICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuX3RyZWVTZWFyY2hCb3hFbGVtZW50KTsKLQotICAgIHZhciBzY3JpcHRz
VHJlZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwotICAgIHRoaXMuX3Nj
cmlwdHNUcmVlID0gbmV3IFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JUcmVlT3V0bGluZSh0aGlzLl90
cmVlU2VhcmNoQm94RWxlbWVudCwgc2NyaXB0c1RyZWVFbGVtZW50KTsKLQotICAgIHZhciBzY3Jp
cHRzT3V0bGluZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBz
Y3JpcHRzT3V0bGluZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygib3V0bGluZS1kaXNjbG9zdXJlIik7
Ci0gICAgc2NyaXB0c091dGxpbmVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5hdmlnYXRvciIpOwot
ICAgIHNjcmlwdHNPdXRsaW5lRWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHRzVHJlZUVsZW1lbnQp
OwotCi0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImZpbGwiKTsKLSAgICB0aGlzLmVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygibmF2aWdhdG9yLWNvbnRhaW5lciIpOwotICAgIHRoaXMuZWxl
bWVudC5hcHBlbmRDaGlsZChzY3JpcHRzT3V0bGluZUVsZW1lbnQpOwotICAgIHRoaXMuc2V0RGVm
YXVsdEZvY3VzZWRFbGVtZW50KHRoaXMuX3NjcmlwdHNUcmVlLmVsZW1lbnQpOwotCi0gICAgLyoq
IEB0eXBlIHtPYmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLk5hdmlnYXRvclVJU291cmNlQ29k
ZVRyZWVOb2RlPn0gKi8KLSAgICB0aGlzLl91aVNvdXJjZUNvZGVOb2RlcyA9IHt9OwotCi0gICAg
dGhpcy5fcm9vdE5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLk5hdmlnYXRvclJvb3RUcmVlTm9kZSh0
aGlzKTsKLSAgICB0aGlzLl9yb290Tm9kZS5wb3B1bGF0ZSgpOwotCi0gICAgV2ViSW5zcGVjdG9y
LnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291cmNl
VHJlZU1vZGVsLkV2ZW50VHlwZXMuSW5zcGVjdGVkVVJMQ2hhbmdlZCwgdGhpcy5faW5zcGVjdGVk
VVJMQ2hhbmdlZCwgdGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXZpZ2F0b3JWaWV3LkV2ZW50
cyA9IHsKLSAgICBJdGVtU2VsZWN0ZWQ6ICJJdGVtU2VsZWN0ZWQiLAotICAgIEZpbGVSZW5hbWVk
OiAiRmlsZVJlbmFtZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5OYXZpZ2F0b3JWaWV3Lmljb25DbGFz
c0ZvclR5cGUgPSBmdW5jdGlvbih0eXBlKQotewotICAgIGlmICh0eXBlID09PSBXZWJJbnNwZWN0
b3IuTmF2aWdhdG9yVHJlZU91dGxpbmUuVHlwZXMuRG9tYWluKQotICAgICAgICByZXR1cm4gIm5h
dmlnYXRvci1kb21haW4tdHJlZS1pdGVtIjsKLSAgICBpZiAodHlwZSA9PT0gV2ViSW5zcGVjdG9y
Lk5hdmlnYXRvclRyZWVPdXRsaW5lLlR5cGVzLkZpbGVTeXN0ZW0pCi0gICAgICAgIHJldHVybiAi
bmF2aWdhdG9yLWZvbGRlci10cmVlLWl0ZW0iOwotICAgIHJldHVybiAibmF2aWdhdG9yLWZvbGRl
ci10cmVlLWl0ZW0iOwotfQotCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yVmlldy5wcm90b3R5cGUg
PSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1
aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBhZGRVSVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHVpU291
cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5fZ2V0T3JDcmVhdGVVSVNv
dXJjZUNvZGVQYXJlbnROb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNv
ZGVOb2RlID0gbmV3IFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JVSVNvdXJjZUNvZGVUcmVlTm9kZSh0
aGlzLCB1aVNvdXJjZUNvZGUpOwotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVOb2Rlc1t1aVNv
dXJjZUNvZGUudXJpKCldID0gdWlTb3VyY2VDb2RlTm9kZTsKLSAgICAgICAgbm9kZS5hcHBlbmRD
aGlsZCh1aVNvdXJjZUNvZGVOb2RlKTsKLSAgICAgICAgaWYgKHVpU291cmNlQ29kZS51cmwgPT09
IFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlVVJMKQotICAgICAgICAgICAgdGhpcy5yZXZlYWxV
SVNvdXJjZUNvZGUodWlTb3VyY2VDb2RlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2luc3BlY3RlZFVS
TENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVzID0gT2Jq
ZWN0LnZhbHVlcyh0aGlzLl91aVNvdXJjZUNvZGVOb2Rlcyk7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciB1aVNvdXJjZUNv
ZGUgPSBub2Rlc1tpXS51aVNvdXJjZUNvZGUoKTsKLSAgICAgICAgICAgIGlmICh1aVNvdXJjZUNv
ZGUudXJsID09PSBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCkKLSAgICAgICAgICAgICAg
ICB0aGlzLnJldmVhbFVJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICB9Ci0KLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvamVjdH0gcHJv
amVjdAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5OYXZpZ2F0b3JUcmVlTm9kZX0KLSAg
ICAgKi8KLSAgICBfZ2V0UHJvamVjdE5vZGU6IGZ1bmN0aW9uKHByb2plY3QpCi0gICAgewotICAg
ICAgICBpZiAoIXByb2plY3QuZGlzcGxheU5hbWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9yb290Tm9kZTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3ROb2RlLmNoaWxkKHByb2plY3Qu
aWQoKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBy
b2plY3R9IHByb2plY3QKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuTmF2aWdhdG9yRm9s
ZGVyVHJlZU5vZGV9Ci0gICAgICovCi0gICAgX2NyZWF0ZVByb2plY3ROb2RlOiBmdW5jdGlvbihw
cm9qZWN0KQotICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSBwcm9qZWN0LnR5cGUoKSA9PT0gV2Vi
SW5zcGVjdG9yLnByb2plY3RUeXBlcy5GaWxlU3lzdGVtID8gV2ViSW5zcGVjdG9yLk5hdmlnYXRv
clRyZWVPdXRsaW5lLlR5cGVzLkZpbGVTeXN0ZW0gOiBXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJl
ZU91dGxpbmUuVHlwZXMuRG9tYWluOwotICAgICAgICB2YXIgcHJvamVjdE5vZGUgPSBuZXcgV2Vi
SW5zcGVjdG9yLk5hdmlnYXRvckZvbGRlclRyZWVOb2RlKHRoaXMsIHByb2plY3QuaWQoKSwgdHlw
ZSwgcHJvamVjdC5kaXNwbGF5TmFtZSgpKTsKLSAgICAgICAgdGhpcy5fcm9vdE5vZGUuYXBwZW5k
Q2hpbGQocHJvamVjdE5vZGUpOwotICAgICAgICByZXR1cm4gcHJvamVjdE5vZGU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2plY3R9IHByb2plY3QK
LSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU5vZGV9Ci0gICAgICov
Ci0gICAgX2dldE9yQ3JlYXRlUHJvamVjdE5vZGU6IGZ1bmN0aW9uKHByb2plY3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UHJvamVjdE5vZGUocHJvamVjdCkgfHwgdGhpcy5fY3Jl
YXRlUHJvamVjdE5vZGUocHJvamVjdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLk5hdmlnYXRvclRyZWVOb2RlfSBwYXJlbnROb2RlCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuTmF2aWdhdG9y
Rm9sZGVyVHJlZU5vZGV9Ci0gICAgICovCi0gICAgX2dldEZvbGRlck5vZGU6IGZ1bmN0aW9uKHBh
cmVudE5vZGUsIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyZW50Tm9kZS5jaGlsZChu
YW1lKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF2
aWdhdG9yVHJlZU5vZGV9IHBhcmVudE5vZGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQot
ICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5OYXZpZ2F0b3JGb2xkZXJUcmVlTm9kZX0KLSAg
ICAgKi8KLSAgICBfY3JlYXRlRm9sZGVyTm9kZTogZnVuY3Rpb24ocGFyZW50Tm9kZSwgbmFtZSkK
LSAgICB7Ci0gICAgICAgIHZhciBmb2xkZXJOb2RlID0gbmV3IFdlYkluc3BlY3Rvci5OYXZpZ2F0
b3JGb2xkZXJUcmVlTm9kZSh0aGlzLCBuYW1lLCBXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU91
dGxpbmUuVHlwZXMuRm9sZGVyLCBuYW1lKTsKLSAgICAgICAgcGFyZW50Tm9kZS5hcHBlbmRDaGls
ZChmb2xkZXJOb2RlKTsKLSAgICAgICAgcmV0dXJuIGZvbGRlck5vZGU7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hdmlnYXRvclRyZWVOb2RlfSBwYXJl
bnROb2RlCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuTmF2aWdhdG9yRm9sZGVyVHJlZU5vZGV9Ci0gICAgICovCi0gICAgX2dldE9yQ3Jl
YXRlRm9sZGVyTm9kZTogZnVuY3Rpb24ocGFyZW50Tm9kZSwgbmFtZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9nZXRGb2xkZXJOb2RlKHBhcmVudE5vZGUsIG5hbWUpIHx8IHRoaXMuX2Ny
ZWF0ZUZvbGRlck5vZGUocGFyZW50Tm9kZSwgbmFtZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLk5hdmlnYXRvclRyZWVOb2RlfQotICAgICAqLwotICAg
IF9nZXRVSVNvdXJjZUNvZGVQYXJlbnROb2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAg
ewotICAgICAgICB2YXIgcHJvamVjdE5vZGUgPSB0aGlzLl9nZXRQcm9qZWN0Tm9kZSh1aVNvdXJj
ZUNvZGUucHJvamVjdCgpKTsKLSAgICAgICAgaWYgKCFwcm9qZWN0Tm9kZSkKLSAgICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICB2YXIgcGF0aCA9IHVpU291cmNlQ29kZS5wYXRoKCk7Ci0g
ICAgICAgIHZhciBwYXJlbnROb2RlID0gcHJvamVjdE5vZGU7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyArK2kpIHsKLSAgICAgICAgICAgIHBhcmVudE5vZGUg
PSB0aGlzLl9nZXRGb2xkZXJOb2RlKHBhcmVudE5vZGUsIHBhdGhbaV0pOwotICAgICAgICAgICAg
aWYgKCFwYXJlbnROb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBwYXJlbnROb2RlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5OYXZpZ2F0b3JUcmVlTm9kZX0KLSAgICAgKi8KLSAgICBfZ2V0
T3JDcmVhdGVVSVNvdXJjZUNvZGVQYXJlbnROb2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0g
ICAgewotICAgICAgICB2YXIgcHJvamVjdE5vZGUgPSB0aGlzLl9nZXRPckNyZWF0ZVByb2plY3RO
b2RlKHVpU291cmNlQ29kZS5wcm9qZWN0KCkpOwotICAgICAgICBpZiAoIXByb2plY3ROb2RlKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBwYXRoID0gdWlTb3VyY2VDb2Rl
LnBhdGgoKTsKLSAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBwcm9qZWN0Tm9kZTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aCAtIDE7ICsraSkgewotICAgICAgICAgICAg
cGFyZW50Tm9kZSA9IHRoaXMuX2dldE9yQ3JlYXRlRm9sZGVyTm9kZShwYXJlbnROb2RlLCBwYXRo
W2ldKTsKLSAgICAgICAgICAgIGlmICghcGFyZW50Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyZW50Tm9kZTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNv
dXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzZWxlY3QKLSAgICAgKi8KLSAgICBy
ZXZlYWxVSVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgc2VsZWN0KQotICAgIHsK
LSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl91aVNvdXJjZUNvZGVOb2Rlc1t1aVNvdXJjZUNvZGUu
dXJpKCldOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICAgICAgaWYgKHRoaXMuX3NjcmlwdHNUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQpCi0gICAgICAg
ICAgICB0aGlzLl9zY3JpcHRzVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50LmRlc2VsZWN0KCk7Ci0g
ICAgICAgIHRoaXMuX2xhc3RTZWxlY3RlZFVJU291cmNlQ29kZSA9IHVpU291cmNlQ29kZTsKLSAg
ICAgICAgbm9kZS5yZXZlYWwoc2VsZWN0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IGZvY3VzU291cmNlCi0gICAgICovCi0gICAgX3NjcmlwdFNlbGVjdGVkOiBm
dW5jdGlvbih1aVNvdXJjZUNvZGUsIGZvY3VzU291cmNlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
bGFzdFNlbGVjdGVkVUlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOwotICAgICAgICB2YXIgZGF0
YSA9IHsgdWlTb3VyY2VDb2RlOiB1aVNvdXJjZUNvZGUsIGZvY3VzU291cmNlOiBmb2N1c1NvdXJj
ZX07Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5O
YXZpZ2F0b3JWaWV3LkV2ZW50cy5JdGVtU2VsZWN0ZWQsIGRhdGEpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29k
ZQotICAgICAqLwotICAgIHJlbW92ZVVJU291cmNlQ29kZTogZnVuY3Rpb24odWlTb3VyY2VDb2Rl
KQotICAgIHsKLSAgICAgICAgdmFyIHBhcmVudE5vZGUgPSB0aGlzLl9nZXRVSVNvdXJjZUNvZGVQ
YXJlbnROb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIGlmICghcGFyZW50Tm9kZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl91aVNvdXJjZUNvZGVOb2Rl
c1t1aVNvdXJjZUNvZGUudXJpKCldOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl91aVNvdXJjZUNvZGVOb2Rlc1t1aVNvdXJjZUNv
ZGUudXJpKCldCi0gICAgICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0gICAgICAg
IG5vZGUgPSBwYXJlbnROb2RlOwotICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAg
cGFyZW50Tm9kZSA9IG5vZGUucGFyZW50OwotICAgICAgICAgICAgaWYgKCFwYXJlbnROb2RlIHx8
ICFub2RlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0gICAgICAgICAgICBub2RlID0gcGFyZW50Tm9k
ZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfZmlsZVJlbmFtZWQ6IGZ1bmN0aW9uKHVpU291
cmNlQ29kZSwgbmV3VGl0bGUpCi0gICAgeyAgICAKLSAgICAgICAgdmFyIGRhdGEgPSB7IHVpU291
cmNlQ29kZTogdWlTb3VyY2VDb2RlLCBuYW1lOiBuZXdUaXRsZSB9OwotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVmlldy5FdmVudHMu
RmlsZVJlbmFtZWQsIGRhdGEpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oYm9vbGVhbik9fSBjYWxsYmFjawotICAgICAqLwotICAgIHJlbmFtZTogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5f
dWlTb3VyY2VDb2RlTm9kZXNbdWlTb3VyY2VDb2RlLnVyaSgpXTsKLSAgICAgICAgaWYgKCFub2Rl
KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIG5vZGUucmVuYW1lKGNhbGxiYWNr
KTsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAo
dmFyIHVyaSBpbiB0aGlzLl91aVNvdXJjZUNvZGVOb2RlcykKLSAgICAgICAgICAgIHRoaXMuX3Vp
U291cmNlQ29kZU5vZGVzW3VyaV0uZGlzcG9zZSgpOwotCi0gICAgICAgIHRoaXMuX3NjcmlwdHNU
cmVlLnN0b3BTZWFyY2goKTsKLSAgICAgICAgdGhpcy5fc2NyaXB0c1RyZWUucmVtb3ZlQ2hpbGRy
ZW4oKTsKLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlTm9kZXMgPSB7fTsKLSAgICAgICAgdGhp
cy5fcm9vdE5vZGUucmVzZXQoKTsKLSAgICB9LAotCi0gICAgaGFuZGxlQ29udGV4dE1lbnU6IGZ1
bmN0aW9uKGV2ZW50LCB1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIgY29udGV4dE1l
bnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgY29udGV4
dE1lbnUuYXBwZW5kQXBwbGljYWJsZUl0ZW1zKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIGNvbnRl
eHRNZW51LnNob3coKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmll
dy5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVl
T3V0bGluZX0KLSAqIEBwYXJhbSB7RWxlbWVudH0gdHJlZVNlYXJjaEJveEVsZW1lbnQKLSAqIEBw
YXJhbSB7RWxlbWVudH0gZWxlbWVudAotICovCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU91
dGxpbmUgPSBmdW5jdGlvbih0cmVlU2VhcmNoQm94RWxlbWVudCwgZWxlbWVudCkKLXsKLSAgICBU
cmVlT3V0bGluZS5jYWxsKHRoaXMsIGVsZW1lbnQpOwotICAgIHRoaXMuZWxlbWVudCA9IGVsZW1l
bnQ7Ci0KLSAgICB0aGlzLl90cmVlU2VhcmNoQm94RWxlbWVudCA9IHRyZWVTZWFyY2hCb3hFbGVt
ZW50OwotICAgIAotICAgIHRoaXMuY29tcGFyYXRvciA9IFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JU
cmVlT3V0bGluZS5fdHJlZUVsZW1lbnRzQ29tcGFyZTsKLQotICAgIHRoaXMuc2VhcmNoYWJsZSA9
IHRydWU7Ci0gICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJpbnB1dCIpOwotfQotCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU91dGxpbmUuVHlw
ZXMgPSB7Ci0gICAgUm9vdDogIlJvb3QiLAotICAgIERvbWFpbjogIkRvbWFpbiIsCi0gICAgRm9s
ZGVyOiAiRm9sZGVyIiwKLSAgICBVSVNvdXJjZUNvZGU6ICJVSVNvdXJjZUNvZGUiLAotICAgIEZp
bGVTeXN0ZW06ICJGaWxlU3lzdGVtIgotfQotCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU91
dGxpbmUuX3RyZWVFbGVtZW50c0NvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKHRyZWVFbGVtZW50
MSwgdHJlZUVsZW1lbnQyKQotewotICAgIC8vIEluc2VydCBpbiB0aGUgYWxwaGFiZXRpY2FsIG9y
ZGVyLCBmaXJzdCBkb21haW5zLCB0aGVuIGZvbGRlcnMsIHRoZW4gc2NyaXB0cy4KLSAgICBmdW5j
dGlvbiB0eXBlV2VpZ2h0KHRyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSB0
cmVlRWxlbWVudC50eXBlKCk7Ci0gICAgICAgIGlmICh0eXBlID09PSBXZWJJbnNwZWN0b3IuTmF2
aWdhdG9yVHJlZU91dGxpbmUuVHlwZXMuRG9tYWluKSB7Ci0gICAgICAgICAgICBpZiAodHJlZUVs
ZW1lbnQudGl0bGVUZXh0ID09PSBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZURvbWFpbikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICB9
Ci0gICAgICAgIGlmICh0eXBlID09PSBXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU91dGxpbmUu
VHlwZXMuRmlsZVN5c3RlbSkKLSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICBpZiAodHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLk5hdmlnYXRvclRyZWVPdXRsaW5lLlR5cGVzLkZvbGRlcikKLSAg
ICAgICAgICAgIHJldHVybiA0OwotICAgICAgICByZXR1cm4gNTsKLSAgICB9Ci0KLSAgICB2YXIg
dHlwZVdlaWdodDEgPSB0eXBlV2VpZ2h0KHRyZWVFbGVtZW50MSk7Ci0gICAgdmFyIHR5cGVXZWln
aHQyID0gdHlwZVdlaWdodCh0cmVlRWxlbWVudDIpOwotCi0gICAgdmFyIHJlc3VsdDsKLSAgICBp
ZiAodHlwZVdlaWdodDEgPiB0eXBlV2VpZ2h0MikKLSAgICAgICAgcmVzdWx0ID0gMTsKLSAgICBl
bHNlIGlmICh0eXBlV2VpZ2h0MSA8IHR5cGVXZWlnaHQyKQotICAgICAgICByZXN1bHQgPSAtMTsK
LSAgICBlbHNlIHsKLSAgICAgICAgdmFyIHRpdGxlMSA9IHRyZWVFbGVtZW50MS50aXRsZVRleHQ7
Ci0gICAgICAgIHZhciB0aXRsZTIgPSB0cmVlRWxlbWVudDIudGl0bGVUZXh0OwotICAgICAgICBy
ZXN1bHQgPSB0aXRsZTEuY29tcGFyZVRvKHRpdGxlMik7Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXZpZ2F0b3JUcmVlT3V0bGluZS5wcm90b3R5cGUgPSB7
Ci0gICAvKioKLSAgICAqIEByZXR1cm4ge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
Pn0KLSAgICAqLwotICAgc2NyaXB0VHJlZUVsZW1lbnRzOiBmdW5jdGlvbigpCi0gICB7Ci0gICAg
ICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCkgewot
ICAgICAgICAgICBmb3IgKHZhciB0cmVlRWxlbWVudCA9IHRoaXMuY2hpbGRyZW5bMF07IHRyZWVF
bGVtZW50OyB0cmVlRWxlbWVudCA9IHRyZWVFbGVtZW50LnRyYXZlcnNlTmV4dFRyZWVFbGVtZW50
KGZhbHNlLCB0aGlzLCB0cnVlKSkgewotICAgICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50IGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLk5hdmlnYXRvclNvdXJjZVRyZWVFbGVtZW50KQotICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRyZWVFbGVtZW50LnVpU291cmNlQ29kZSk7Ci0gICAg
ICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgIH0sCi0KLSAgIHNl
YXJjaFN0YXJ0ZWQ6IGZ1bmN0aW9uKCkKLSAgIHsKLSAgICAgICB0aGlzLl90cmVlU2VhcmNoQm94
RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlYXJjaElucHV0RWxlbWVudCk7Ci0gICAgICAgdGhp
cy5fdHJlZVNlYXJjaEJveEVsZW1lbnQuYWRkU3R5bGVDbGFzcygidmlzaWJsZSIpOwotICAgfSwK
LQotICAgc2VhcmNoRmluaXNoZWQ6IGZ1bmN0aW9uKCkKLSAgIHsKLSAgICAgICB0aGlzLl90cmVl
U2VhcmNoQm94RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnNlYXJjaElucHV0RWxlbWVudCk7Ci0g
ICAgICAgdGhpcy5fdHJlZVNlYXJjaEJveEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidmlzaWJs
ZSIpOwotICAgfSwKLQotICAgIF9fcHJvdG9fXzogVHJlZU91dGxpbmUucHJvdG90eXBlCi19Ci0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7VHJlZUVsZW1lbnR9Ci0gKiBAcGFy
YW0ge3N0cmluZ30gdHlwZQotICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlCi0gKiBAcGFyYW0ge0Fy
cmF5LjxzdHJpbmc+fSBpY29uQ2xhc3NlcwotICogQHBhcmFtIHtib29sZWFufSBoYXNDaGlsZHJl
bgotICogQHBhcmFtIHtib29sZWFuPX0gbm9JY29uCi0gKi8KLVdlYkluc3BlY3Rvci5CYXNlTmF2
aWdhdG9yVHJlZUVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCB0aXRsZSwgaWNvbkNsYXNzZXMsIGhh
c0NoaWxkcmVuLCBub0ljb24pCi17Ci0gICAgdGhpcy5fdHlwZSA9IHR5cGU7Ci0gICAgVHJlZUVs
ZW1lbnQuY2FsbCh0aGlzLCAiIiwgbnVsbCwgaGFzQ2hpbGRyZW4pOwotICAgIHRoaXMuX3RpdGxl
VGV4dCA9IHRpdGxlOwotICAgIHRoaXMuX2ljb25DbGFzc2VzID0gaWNvbkNsYXNzZXM7Ci0gICAg
dGhpcy5fbm9JY29uID0gbm9JY29uOwotfQotCi1XZWJJbnNwZWN0b3IuQmFzZU5hdmlnYXRvclRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbmF0dGFjaDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAg
aWYgKHRoaXMuX2ljb25DbGFzc2VzKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX2ljb25DbGFzc2VzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMubGlz
dEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3ModGhpcy5faWNvbkNsYXNzZXNbaV0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICAgICAgc2VsZWN0aW9uRWxlbWVudC5jbGFzc05hbWUgPSAic2VsZWN0
aW9uIjsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0aW9u
RWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9ub0ljb24pIHsKLSAgICAgICAgICAgIHRo
aXMuaW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci0gICAgICAg
ICAgICB0aGlzLmltYWdlRWxlbWVudC5jbGFzc05hbWUgPSAiaWNvbiI7Ci0gICAgICAgICAgICB0
aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmltYWdlRWxlbWVudCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRoaXMudGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHRoaXMudGl0bGVFbGVtZW50LmNsYXNzTmFtZSA9
ICJiYXNlLW5hdmlnYXRvci10cmVlLWVsZW1lbnQtdGl0bGUiOwotICAgICAgICB0aGlzLl90aXRs
ZVRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotICAgICAgICB0aGlzLl90
aXRsZVRleHROb2RlLnRleHRDb250ZW50ID0gdGhpcy5fdGl0bGVUZXh0OwotICAgICAgICB0aGlz
LnRpdGxlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl90aXRsZVRleHROb2RlKTsKLSAgICAgICAg
dGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50aXRsZUVsZW1lbnQpOwotICAg
IH0sCi0KLSAgICBvbnJldmVhbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
bGlzdEl0ZW1FbGVtZW50KQotICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuc2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7c3RyaW5nfQotICAgICAqLwotICAgIGdldCB0aXRsZVRleHQoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3RpdGxlVGV4dDsKLSAgICB9LAotCi0gICAgc2V0IHRpdGxlVGV4dCh0aXRs
ZVRleHQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdGl0bGVUZXh0ID09PSB0aXRsZVRleHQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3RpdGxlVGV4dCA9IHRpdGxlVGV4
dCB8fCAiIjsKLSAgICAgICAgaWYgKHRoaXMudGl0bGVFbGVtZW50KQotICAgICAgICAgICAgdGhp
cy50aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLl90aXRsZVRleHQ7Ci0gICAgfSwKLSAg
ICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dAotICAgICAqLwot
ICAgIG1hdGNoZXNTZWFyY2hUZXh0OiBmdW5jdGlvbihzZWFyY2hUZXh0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMudGl0bGVUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoIl4iICsgc2VhcmNoVGV4
dC5lc2NhcGVGb3JSZWdFeHAoKSwgImkiKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICB0eXBlOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fdHlwZTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBUcmVlRWxl
bWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtX
ZWJJbnNwZWN0b3IuQmFzZU5hdmlnYXRvclRyZWVFbGVtZW50fQotICogQHBhcmFtIHtzdHJpbmd9
IHR5cGUKLSAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICovCi1XZWJJbnNwZWN0b3IuTmF2aWdh
dG9yRm9sZGVyVHJlZUVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCB0aXRsZSkKLXsKLSAgICB2YXIg
aWNvbkNsYXNzID0gV2ViSW5zcGVjdG9yLk5hdmlnYXRvclZpZXcuaWNvbkNsYXNzRm9yVHlwZSh0
eXBlKTsKLSAgICBXZWJJbnNwZWN0b3IuQmFzZU5hdmlnYXRvclRyZWVFbGVtZW50LmNhbGwodGhp
cywgdHlwZSwgdGl0bGUsIFtpY29uQ2xhc3NdLCB0cnVlKTsKLX0KLQotV2ViSW5zcGVjdG9yLk5h
dmlnYXRvckZvbGRlclRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbnBvcHVsYXRlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9ub2RlLnBvcHVsYXRlKCk7Ci0gICAgfSwK
LQotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iu
QmFzZU5hdmlnYXRvclRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaC5jYWxsKHRoaXMpOwot
ICAgICAgICB0aGlzLmNvbGxhcHNlKCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLkJhc2VOYXZpZ2F0b3JUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQmFzZU5hdmlnYXRvclRyZWVF
bGVtZW50fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVmlld30gbmF2aWdhdG9y
VmlldwotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUK
LSAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICovCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yU291
cmNlVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihuYXZpZ2F0b3JWaWV3LCB1aVNvdXJjZUNvZGUsIHRp
dGxlKQotewotICAgIFdlYkluc3BlY3Rvci5CYXNlTmF2aWdhdG9yVHJlZUVsZW1lbnQuY2FsbCh0
aGlzLCBXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU91dGxpbmUuVHlwZXMuVUlTb3VyY2VDb2Rl
LCB0aXRsZSwgWyJuYXZpZ2F0b3ItIiArIHVpU291cmNlQ29kZS5jb250ZW50VHlwZSgpLm5hbWUo
KSArICItdHJlZS1pdGVtIl0sIGZhbHNlKTsKLSAgICB0aGlzLl9uYXZpZ2F0b3JWaWV3ID0gbmF2
aWdhdG9yVmlldzsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7Ci0gICAg
dGhpcy50b29sdGlwID0gdWlTb3VyY2VDb2RlLm9yaWdpblVSTCgpOwotfQotCi1XZWJJbnNwZWN0
b3IuTmF2aWdhdG9yU291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAgICovCi0gICAgZ2V0
IHVpU291cmNlQ29kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2Rl
OwotICAgIH0sCi0KLSAgICBvbmF0dGFjaDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLkJhc2VOYXZpZ2F0b3JUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2guY2Fs
bCh0aGlzKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuZHJhZ2dhYmxlID0gdHJ1ZTsK
LSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0
aGlzLl9vbmNsaWNrLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVDb250ZXh0
TWVudUV2ZW50LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fb25tb3VzZWRvd24uYmluZCh0
aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJkcmFnc3RhcnQiLCB0aGlzLl9vbmRyYWdzdGFydC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0g
ICAgfSwKLQotICAgIF9vbm1vdXNlZG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICBpZiAoZXZlbnQud2hpY2ggPT09IDEpIC8vIFdhcm0tdXAgZGF0YSBmb3IgZHJhZyduJ2Ryb3AK
LSAgICAgICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChjYWxsYmFjay5i
aW5kKHRoaXMpKTsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29u
dGVudAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnRlbnRFbmNvZGVkCi0gICAgICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rp
b24gY2FsbGJhY2soY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0aGlzLl93YXJtZWRVcENvbnRlbnQgPSBjb250ZW50OwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIF9vbmRyYWdzdGFydDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsIHRoaXMuX3dhcm1l
ZFVwQ29udGVudCk7Ci0gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0g
ImNvcHkiOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgb25zcGFjZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yVmlldy5fc2NyaXB0U2VsZWN0
ZWQodGhpcy51aVNvdXJjZUNvZGUsIHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBf
b25jbGljazogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JW
aWV3Ll9zY3JpcHRTZWxlY3RlZCh0aGlzLnVpU291cmNlQ29kZSwgZmFsc2UpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIG9uZGJs
Y2xpY2s6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIG1pZGRsZUNsaWNrID0g
ZXZlbnQuYnV0dG9uID09PSAxOwotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JWaWV3Ll9zY3JpcHRT
ZWxlY3RlZCh0aGlzLnVpU291cmNlQ29kZSwgIW1pZGRsZUNsaWNrKTsKLSAgICB9LAotCi0gICAg
b25lbnRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yVmlldy5f
c2NyaXB0U2VsZWN0ZWQodGhpcy51aVNvdXJjZUNvZGUsIHRydWUpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAg
ICAgKi8KLSAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVudDogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JWaWV3LmhhbmRsZUNvbnRleHRNZW51KGV2ZW50LCB0
aGlzLl91aVNvdXJjZUNvZGUpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5CYXNlTmF2aWdhdG9yVHJlZUVsZW1lbnQucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAqLwotV2ViSW5zcGVjdG9yLk5hdmlnYXRv
clRyZWVOb2RlID0gZnVuY3Rpb24oaWQpCi17Ci0gICAgdGhpcy5pZCA9IGlkOwotICAgIHRoaXMu
X2NoaWxkcmVuID0ge307Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXZpZ2F0b3JUcmVlTm9kZS5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7VHJlZUVsZW1lbnR9Ci0gICAgICov
Ci0gICAgdHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rp
b24oKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwot
ICAgIGlzUm9vdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGhh
c0NoaWxkcmVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
LAotCi0gICAgcG9wdWxhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmlz
UG9wdWxhdGVkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLnBhcmVu
dCkKLSAgICAgICAgICAgIHRoaXMucGFyZW50LnBvcHVsYXRlKCk7Ci0gICAgICAgIHRoaXMuX3Bv
cHVsYXRlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMud2FzUG9wdWxhdGVkKCk7Ci0gICAgfSwKLQot
ICAgIHdhc1BvcHVsYXRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaWQg
aW4gdGhpcy5fY2hpbGRyZW4pCi0gICAgICAgICAgICB0aGlzLnRyZWVFbGVtZW50KCkuYXBwZW5k
Q2hpbGQodGhpcy5fY2hpbGRyZW5baWRdLnRyZWVFbGVtZW50KCkpOwotICAgIH0sCi0KLSAgICBk
aWRBZGRDaGlsZDogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmlzUG9w
dWxhdGVkKCkpCi0gICAgICAgICAgICB0aGlzLnRyZWVFbGVtZW50KCkuYXBwZW5kQ2hpbGQobm9k
ZS50cmVlRWxlbWVudCgpKTsKLSAgICB9LAotCi0gICAgd2lsbFJlbW92ZUNoaWxkOiBmdW5jdGlv
bihub2RlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNQb3B1bGF0ZWQoKSkKLSAgICAgICAg
ICAgIHRoaXMudHJlZUVsZW1lbnQoKS5yZW1vdmVDaGlsZChub2RlLnRyZWVFbGVtZW50KCkpOwot
ICAgIH0sCi0KLSAgICBpc1BvcHVsYXRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX3BvcHVsYXRlZDsKLSAgICB9LAotCi0gICAgaXNFbXB0eTogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4oKS5sZW5ndGggPT09IDA7Ci0gICAg
fSwKLQotICAgIGNoaWxkOiBmdW5jdGlvbihpZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9jaGlsZHJlbltpZF07Ci0gICAgfSwKLQotICAgIGNoaWxkcmVuOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9jaGlsZHJlbik7Ci0gICAgfSwK
LQotICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
Y2hpbGRyZW5bbm9kZS5pZF0gPSBub2RlOwotICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7Ci0g
ICAgICAgIHRoaXMuZGlkQWRkQ2hpbGQobm9kZSk7Ci0gICAgfSwKLQotICAgIHJlbW92ZUNoaWxk
OiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgdGhpcy53aWxsUmVtb3ZlQ2hpbGQobm9k
ZSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltub2RlLmlkXTsKLSAgICAgICAgZGVs
ZXRlIG5vZGUucGFyZW50OwotICAgICAgICBub2RlLmRpc3Bvc2UoKTsKLSAgICB9LAotCi0gICAg
cmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NoaWxkcmVuID0ge307Ci0g
ICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rv
ci5OYXZpZ2F0b3JUcmVlTm9kZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hdmlnYXRvclZp
ZXd9IG5hdmlnYXRvclZpZXcKLSAqLwotV2ViSW5zcGVjdG9yLk5hdmlnYXRvclJvb3RUcmVlTm9k
ZSA9IGZ1bmN0aW9uKG5hdmlnYXRvclZpZXcpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk5hdmlnYXRv
clRyZWVOb2RlLmNhbGwodGhpcywgIiIpOwotICAgIHRoaXMuX25hdmlnYXRvclZpZXcgPSBuYXZp
Z2F0b3JWaWV3OwotfQotCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yUm9vdFRyZWVOb2RlLnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAg
IGlzUm9vdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1RyZWVPdXRsaW5lfQotICAgICAqLwotICAgIHRy
ZWVFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdh
dG9yVmlldy5fc2NyaXB0c1RyZWU7Ci0gICAgfSwKLQotICAgIHdhc1BvcHVsYXRlZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fY2hpbGRyZW4pCi0gICAg
ICAgICAgICB0aGlzLnRyZWVFbGVtZW50KCkuYXBwZW5kQ2hpbGQodGhpcy5fY2hpbGRyZW5baWRd
LnRyZWVFbGVtZW50KCkpOwotICAgIH0sCi0KLSAgICBkaWRBZGRDaGlsZDogZnVuY3Rpb24obm9k
ZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmlzUG9wdWxhdGVkKCkpCi0gICAgICAgICAgICB0
aGlzLnRyZWVFbGVtZW50KCkuYXBwZW5kQ2hpbGQobm9kZS50cmVlRWxlbWVudCgpKTsKLSAgICB9
LAotCi0gICAgd2lsbFJlbW92ZUNoaWxkOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuaXNQb3B1bGF0ZWQoKSkKLSAgICAgICAgICAgIHRoaXMudHJlZUVsZW1lbnQoKS5y
ZW1vdmVDaGlsZChub2RlLnRyZWVFbGVtZW50KCkpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JUcmVlTm9kZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVHJlZU5vZGV9
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXZpZ2F0b3JWaWV3fSBuYXZpZ2F0b3JWaWV3Ci0g
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICovCi1X
ZWJJbnNwZWN0b3IuTmF2aWdhdG9yVUlTb3VyY2VDb2RlVHJlZU5vZGUgPSBmdW5jdGlvbihuYXZp
Z2F0b3JWaWV3LCB1aVNvdXJjZUNvZGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk5hdmlnYXRvclRy
ZWVOb2RlLmNhbGwodGhpcywgdWlTb3VyY2VDb2RlLm5hbWUoKSk7Ci0gICAgdGhpcy5fbmF2aWdh
dG9yVmlldyA9IG5hdmlnYXRvclZpZXc7Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlID0gdWlTb3Vy
Y2VDb2RlOwotfQotCi1XZWJJbnNwZWN0b3IuTmF2aWdhdG9yVUlTb3VyY2VDb2RlVHJlZU5vZGUu
cHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGV9Ci0gICAgICovCi0gICAgdWlTb3VyY2VDb2RlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2RlOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtUcmVlRWxlbWVudH0KLSAgICAgKi8KLSAgICB0cmVlRWxlbWVudDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3RyZWVFbGVtZW50KQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3RyZWVFbGVtZW50OwotCi0gICAgICAgIHRoaXMuX3RyZWVFbGVtZW50
ID0gbmV3IFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JTb3VyY2VUcmVlRWxlbWVudCh0aGlzLl9uYXZp
Z2F0b3JWaWV3LCB0aGlzLl91aVNvdXJjZUNvZGUsICIiKTsKLSAgICAgICAgdGhpcy51cGRhdGVU
aXRsZSgpOwotCi0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLlRpdGxlQ2hhbmdlZCwgdGhpcy5fdGl0bGVD
aGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuV29ya2luZ0NvcHlDaGFuZ2VkLCB0
aGlzLl93b3JraW5nQ29weUNoYW5nZWQsIHRoaXMpOwotICAgICAgICB0aGlzLl91aVNvdXJjZUNv
ZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3Jr
aW5nQ29weUNvbW1pdHRlZCwgdGhpcy5fd29ya2luZ0NvcHlDb21taXR0ZWQsIHRoaXMpOwotICAg
ICAgICB0aGlzLl91aVNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlLkV2ZW50cy5Gb3JtYXR0ZWRDaGFuZ2VkLCB0aGlzLl9mb3JtYXR0ZWRDaGFuZ2Vk
LCB0aGlzKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5fdHJlZUVsZW1lbnQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlnbm9yZUlzRGlydHkKLSAgICAgKi8K
LSAgICB1cGRhdGVUaXRsZTogZnVuY3Rpb24oaWdub3JlSXNEaXJ0eSkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5fdHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dmFyIHRpdGxlVGV4dCA9IHRoaXMuX3VpU291cmNlQ29kZS5uYW1lKCkudHJpbUVuZCgxMDApOwot
ICAgICAgICBpZiAoIXRpdGxlVGV4dCkKLSAgICAgICAgICAgIHRpdGxlVGV4dCA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiKHByb2dyYW0pIik7Ci0gICAgICAgIGlmICghaWdub3JlSXNEaXJ0eSAm
JiB0aGlzLl91aVNvdXJjZUNvZGUuaXNEaXJ0eSgpKQotICAgICAgICAgICAgdGl0bGVUZXh0ID0g
IioiICsgdGl0bGVUZXh0OwotICAgICAgICB0aGlzLl90cmVlRWxlbWVudC50aXRsZVRleHQgPSB0
aXRsZVRleHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0g
ICAgICovCi0gICAgaGFzQ2hpbGRyZW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl90cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dGhpcy5fdWlTb3VyY2VDb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291
cmNlQ29kZS5FdmVudHMuVGl0bGVDaGFuZ2VkLCB0aGlzLl90aXRsZUNoYW5nZWQsIHRoaXMpOwot
ICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29weUNoYW5nZWQsIHRoaXMuX3dvcmtpbmdD
b3B5Q2hhbmdlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5yZW1vdmVFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLldvcmtpbmdDb3B5Q29t
bWl0dGVkLCB0aGlzLl93b3JraW5nQ29weUNvbW1pdHRlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMu
X3VpU291cmNlQ29kZS5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNv
ZGUuRXZlbnRzLkZvcm1hdHRlZENoYW5nZWQsIHRoaXMuX2Zvcm1hdHRlZENoYW5nZWQsIHRoaXMp
OwotICAgIH0sCi0KLSAgICBfdGl0bGVDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMudXBkYXRlVGl0bGUoKTsKLSAgICB9LAotCi0gICAgX3dvcmtpbmdDb3B5Q2hh
bmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7
Ci0gICAgfSwKLQotICAgIF93b3JraW5nQ29weUNvbW1pdHRlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0gICAgfSwKLQotICAgIF9mb3JtYXR0
ZWRDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMudXBkYXRlVGl0
bGUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gc2VsZWN0
Ci0gICAgICovCi0gICAgcmV2ZWFsOiBmdW5jdGlvbihzZWxlY3QpCi0gICAgewotICAgICAgICB0
aGlzLnBhcmVudC5wb3B1bGF0ZSgpOwotICAgICAgICB0aGlzLnBhcmVudC50cmVlRWxlbWVudCgp
LmV4cGFuZCgpOwotICAgICAgICB0aGlzLl90cmVlRWxlbWVudC5yZXZlYWwoKTsKLSAgICAgICAg
aWYgKHNlbGVjdCkKLSAgICAgICAgICAgIHRoaXMuX3RyZWVFbGVtZW50LnNlbGVjdCgpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGJvb2xlYW4pPX0gY2FsbGJh
Y2sKLSAgICAgKi8KLSAgICByZW5hbWU6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl90cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAvLyBUcmVlIG91dGxpbmUgc2hvdWxkIGJlIG1hcmtlZCBhcyBlZGl0ZWQgYXMgd2VsbCBhcyB0
aGUgdHJlZSBlbGVtZW50IHRvIHByZXZlbnQgc2VhcmNoIGZyb20gc3RhcnRpbmcuCi0gICAgICAg
IHZhciB0cmVlT3V0bGluZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVudC50cmVlT3V0bGluZS5l
bGVtZW50OwotICAgICAgICBXZWJJbnNwZWN0b3IubWFya0JlaW5nRWRpdGVkKHRyZWVPdXRsaW5l
RWxlbWVudCwgdHJ1ZSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gY29tbWl0SGFuZGxlcihlbGVtZW50
LCBuZXdUaXRsZSwgb2xkVGl0bGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuZXdUaXRs
ZSAmJiBuZXdUaXRsZSAhPT0gb2xkVGl0bGUpCi0gICAgICAgICAgICAgICAgdGhpcy5fbmF2aWdh
dG9yVmlldy5fZmlsZVJlbmFtZWQodGhpcy5fdWlTb3VyY2VDb2RlLCBuZXdUaXRsZSk7Ci0gICAg
ICAgICAgICBhZnRlckVkaXRpbmcuY2FsbCh0aGlzLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIGNhbmNlbEhhbmRsZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBhZnRl
ckVkaXRpbmcuY2FsbCh0aGlzLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAg
ICAgICAgICogQHBhcmFtIHtib29sZWFufSBjb21taXR0ZWQKLSAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIGFmdGVyRWRpdGluZyhjb21taXR0ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5tYXJrQmVpbmdFZGl0ZWQodHJlZU91dGxpbmVFbGVtZW50LCBmYWxzZSk7
Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0gICAgICAgICAgICBpZiAoY2FsbGJh
Y2spCi0gICAgICAgICAgICAgICAgY2FsbGJhY2soY29tbWl0dGVkKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBlZGl0aW5nQ29uZmlnID0gbmV3IFdlYkluc3BlY3Rvci5FZGl0aW5nQ29uZmln
KGNvbW1pdEhhbmRsZXIuYmluZCh0aGlzKSwgY2FuY2VsSGFuZGxlci5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgdGhpcy51cGRhdGVUaXRsZSh0cnVlKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0
RWRpdGluZyh0aGlzLl90cmVlRWxlbWVudC50aXRsZUVsZW1lbnQsIGVkaXRpbmdDb25maWcpOwot
ICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0aGlzLl90cmVl
RWxlbWVudC50aXRsZUVsZW1lbnQsIDAsIHRoaXMuX3RyZWVFbGVtZW50LnRpdGxlRWxlbWVudCwg
MSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk5hdmlnYXRvclRyZWVO
b2RlLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5OYXZpZ2F0b3JUcmVlTm9kZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5h
dmlnYXRvclZpZXd9IG5hdmlnYXRvclZpZXcKLSAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICogQHBh
cmFtIHtzdHJpbmd9IHR5cGUKLSAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICovCi1XZWJJbnNw
ZWN0b3IuTmF2aWdhdG9yRm9sZGVyVHJlZU5vZGUgPSBmdW5jdGlvbihuYXZpZ2F0b3JWaWV3LCBp
ZCwgdHlwZSwgdGl0bGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk5hdmlnYXRvclRyZWVOb2RlLmNh
bGwodGhpcywgaWQpOwotICAgIHRoaXMuX25hdmlnYXRvclZpZXcgPSBuYXZpZ2F0b3JWaWV3Owot
ICAgIHRoaXMuX3R5cGUgPSB0eXBlOwotICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5OYXZpZ2F0b3JGb2xkZXJUcmVlTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7VHJlZUVsZW1lbnR9Ci0gICAgICovCi0gICAgdHJlZUVsZW1lbnQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl90cmVlRWxlbWVudCkKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl90cmVlRWxlbWVudDsKLSAgICAgICAgdGhpcy5fdHJlZUVsZW1l
bnQgPSB0aGlzLl9jcmVhdGVUcmVlRWxlbWVudCh0aGlzLl90aXRsZSwgdGhpcyk7Ci0gICAgICAg
IHJldHVybiB0aGlzLl90cmVlRWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJl
dHVybiB7VHJlZUVsZW1lbnR9Ci0gICAgICovCi0gICAgX2NyZWF0ZVRyZWVFbGVtZW50OiBmdW5j
dGlvbih0aXRsZSwgbm9kZSkKLSAgICB7Ci0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IG5ldyBX
ZWJJbnNwZWN0b3IuTmF2aWdhdG9yRm9sZGVyVHJlZUVsZW1lbnQodGhpcy5fdHlwZSwgdGl0bGUp
OwotICAgICAgICB0cmVlRWxlbWVudC5fbm9kZSA9IG5vZGU7Ci0gICAgICAgIHJldHVybiB0cmVl
RWxlbWVudDsKLSAgICB9LAotCi0gICAgd2FzUG9wdWxhdGVkOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuX3RyZWVFbGVtZW50IHx8IHRoaXMuX3RyZWVFbGVtZW50Ll9ub2Rl
ICE9PSB0aGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9hZGRDaGlsZHJl
blJlY3Vyc2l2ZSgpOwotICAgIH0sCi0KLSAgICBfYWRkQ2hpbGRyZW5SZWN1cnNpdmU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2NoaWxkcmVuKSB7Ci0g
ICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLl9jaGlsZHJlbltpZF07Ci0gICAgICAgICAgICB0
aGlzLmRpZEFkZENoaWxkKGNoaWxkKTsKLSAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JGb2xkZXJUcmVlTm9kZSkKLSAgICAgICAgICAgICAgICBj
aGlsZC5fYWRkQ2hpbGRyZW5SZWN1cnNpdmUoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBf
c2hvdWxkTWVyZ2U6IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
dHlwZSAhPT0gV2ViSW5zcGVjdG9yLk5hdmlnYXRvclRyZWVPdXRsaW5lLlR5cGVzLkRvbWFpbiAm
JiBub2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLk5hdmlnYXRvckZvbGRlclRyZWVOb2RlOwot
ICAgIH0sCi0KLSAgICBkaWRBZGRDaGlsZDogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAg
IGZ1bmN0aW9uIHRpdGxlRm9yTm9kZShub2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbm9kZS5fdGl0bGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRoaXMuX3RyZWVFbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMu
Y2hpbGRyZW4oKTsKLQotICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIHRoaXMu
X3Nob3VsZE1lcmdlKG5vZGUpKSB7Ci0gICAgICAgICAgICBub2RlLl9pc01lcmdlZCA9IHRydWU7
Ci0gICAgICAgICAgICB0aGlzLl90cmVlRWxlbWVudC50aXRsZVRleHQgPSB0aGlzLl90cmVlRWxl
bWVudC50aXRsZVRleHQgKyAiLyIgKyBub2RlLl90aXRsZTsKLSAgICAgICAgICAgIG5vZGUuX3Ry
ZWVFbGVtZW50ID0gdGhpcy5fdHJlZUVsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLl90cmVlRWxl
bWVudC5fbm9kZSA9IG5vZGU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgb2xkTm9kZTsKLSAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMikKLSAg
ICAgICAgICAgIG9sZE5vZGUgPSBjaGlsZHJlblswXSAhPT0gbm9kZSA/IGNoaWxkcmVuWzBdIDog
Y2hpbGRyZW5bMV07Ci0gICAgICAgIGlmIChvbGROb2RlICYmIG9sZE5vZGUuX2lzTWVyZ2VkKSB7
Ci0gICAgICAgICAgICBkZWxldGUgb2xkTm9kZS5faXNNZXJnZWQ7Ci0gICAgICAgICAgICB2YXIg
bWVyZ2VkVG9Ob2RlcyA9IFtdOwotICAgICAgICAgICAgbWVyZ2VkVG9Ob2Rlcy5wdXNoKHRoaXMp
OwotICAgICAgICAgICAgdmFyIHRyZWVOb2RlID0gdGhpczsKLSAgICAgICAgICAgIHdoaWxlICh0
cmVlTm9kZS5faXNNZXJnZWQpIHsKLSAgICAgICAgICAgICAgICB0cmVlTm9kZSA9IHRyZWVOb2Rl
LnBhcmVudDsKLSAgICAgICAgICAgICAgICBtZXJnZWRUb05vZGVzLnB1c2godHJlZU5vZGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbWVyZ2VkVG9Ob2Rlcy5yZXZlcnNlKCk7Ci0gICAg
ICAgICAgICB2YXIgdGl0bGVUZXh0ID0gbWVyZ2VkVG9Ob2Rlcy5tYXAodGl0bGVGb3JOb2RlKS5q
b2luKCIvIik7Ci0KLSAgICAgICAgICAgIHZhciBub2RlcyA9IFtdOwotICAgICAgICAgICAgdHJl
ZU5vZGUgPSBvbGROb2RlOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG5vZGVz
LnB1c2godHJlZU5vZGUpOwotICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gdHJlZU5vZGUuY2hp
bGRyZW4oKTsKLSAgICAgICAgICAgICAgICB0cmVlTm9kZSA9IGNoaWxkcmVuLmxlbmd0aCA9PT0g
MSA/IGNoaWxkcmVuWzBdIDogbnVsbDsKLSAgICAgICAgICAgIH0gd2hpbGUgKHRyZWVOb2RlICYm
IHRyZWVOb2RlLl9pc01lcmdlZCk7Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5pc1BvcHVsYXRl
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnQudGl0bGVUZXh0ID0gdGl0
bGVUZXh0OwotICAgICAgICAgICAgICAgIHRoaXMuX3RyZWVFbGVtZW50Ll9ub2RlID0gdGhpczsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBub2Rlc1tpXS5fdHJlZUVsZW1lbnQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBub2Rlc1tpXS5faXNNZXJnZWQ7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHZhciBvbGRUcmVlRWxlbWVudCA9IHRoaXMuX3RyZWVFbGVtZW50OwotICAgICAgICAgICAgdmFy
IHRyZWVFbGVtZW50ID0gdGhpcy5fY3JlYXRlVHJlZUVsZW1lbnQodGl0bGVUZXh0LCB0aGlzKTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVyZ2VkVG9Ob2Rlcy5sZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgICAgICBtZXJnZWRUb05vZGVzW2ldLl90cmVlRWxlbWVudCA9IHRyZWVF
bGVtZW50OwotICAgICAgICAgICAgb2xkVHJlZUVsZW1lbnQucGFyZW50LmFwcGVuZENoaWxkKHRy
ZWVFbGVtZW50KTsKLQotICAgICAgICAgICAgb2xkVHJlZUVsZW1lbnQuX25vZGUgPSBub2Rlc1tu
b2Rlcy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIG9sZFRyZWVFbGVtZW50LnRpdGxlVGV4dCA9
IG5vZGVzLm1hcCh0aXRsZUZvck5vZGUpLmpvaW4oIi8iKTsKLSAgICAgICAgICAgIG9sZFRyZWVF
bGVtZW50LnBhcmVudC5yZW1vdmVDaGlsZChvbGRUcmVlRWxlbWVudCk7Ci0gICAgICAgICAgICB0
aGlzLl90cmVlRWxlbWVudC5hcHBlbmRDaGlsZChvbGRUcmVlRWxlbWVudCk7Ci0gICAgICAgICAg
ICBpZiAob2xkVHJlZUVsZW1lbnQuZXhwYW5kZWQpCi0gICAgICAgICAgICAgICAgdHJlZUVsZW1l
bnQuZXhwYW5kKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuaXNQb3B1bGF0ZWQoKSkK
LSAgICAgICAgICAgIHRoaXMuX3RyZWVFbGVtZW50LmFwcGVuZENoaWxkKG5vZGUudHJlZUVsZW1l
bnQoKSk7Ci0gICAgfSwKLQotICAgIHdpbGxSZW1vdmVDaGlsZDogZnVuY3Rpb24obm9kZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChub2RlLl9pc01lcmdlZCB8fCAhdGhpcy5pc1BvcHVsYXRlZCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl90cmVlRWxlbWVudC5yZW1vdmVDaGls
ZChub2RlLl90cmVlRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLk5hdmlnYXRvclRyZWVOb2RlLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrSXRlbVZpZXcuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtJdGVtVmlldy5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMGRjNzgzYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtJdGVtVmlldy5qcworKysgL2Rldi9udWxsCkBAIC0x
LDE4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuVGFiYmVkUGFuZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSBy
ZXF1ZXN0Ci0gKi8KLVdlYkluc3BlY3Rvci5OZXR3b3JrSXRlbVZpZXcgPSBmdW5jdGlvbihyZXF1
ZXN0KQotewotICAgIFdlYkluc3BlY3Rvci5UYWJiZWRQYW5lLmNhbGwodGhpcyk7Ci0gICAgdGhp
cy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5ldHdvcmstaXRlbS12aWV3Iik7Ci0KLSAgICB2YXIg
aGVhZGVyc1ZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlJlcXVlc3RIZWFkZXJzVmlldyhyZXF1ZXN0
KTsKLSAgICB0aGlzLmFwcGVuZFRhYigiaGVhZGVycyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
SGVhZGVycyIpLCBoZWFkZXJzVmlldyk7Ci0KLSAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLlRhYmJlZFBhbmUuRXZlbnRUeXBlcy5UYWJTZWxlY3RlZCwgdGhpcy5fdGFiU2Vs
ZWN0ZWQsIHRoaXMpOwotCi0gICAgaWYgKHJlcXVlc3QudHlwZSA9PT0gV2ViSW5zcGVjdG9yLnJl
c291cmNlVHlwZXMuV2ViU29ja2V0KSB7Ci0gICAgICAgIHZhciBmcmFtZVZpZXcgPSBuZXcgV2Vi
SW5zcGVjdG9yLlJlc291cmNlV2ViU29ja2V0RnJhbWVWaWV3KHJlcXVlc3QpOwotICAgICAgICB0
aGlzLmFwcGVuZFRhYigid2ViU29ja2V0RnJhbWVzIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJG
cmFtZXMiKSwgZnJhbWVWaWV3KTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXIgcmVzcG9uc2VW
aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5SZXF1ZXN0UmVzcG9uc2VWaWV3KHJlcXVlc3QpOwotICAg
ICAgICB2YXIgcHJldmlld1ZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlJlcXVlc3RQcmV2aWV3Vmll
dyhyZXF1ZXN0LCByZXNwb25zZVZpZXcpOwotICAgICAgICB0aGlzLmFwcGVuZFRhYigicHJldmll
dyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJldmlldyIpLCBwcmV2aWV3Vmlldyk7Ci0gICAg
ICAgIHRoaXMuYXBwZW5kVGFiKCJyZXNwb25zZSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVz
cG9uc2UiKSwgcmVzcG9uc2VWaWV3KTsKLSAgICB9Ci0KLSAgICBpZiAocmVxdWVzdC5yZXF1ZXN0
Q29va2llcyB8fCByZXF1ZXN0LnJlc3BvbnNlQ29va2llcykgewotICAgICAgICB0aGlzLl9jb29r
aWVzVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuUmVxdWVzdENvb2tpZXNWaWV3KHJlcXVlc3QpOwot
ICAgICAgICB0aGlzLmFwcGVuZFRhYigiY29va2llcyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
Q29va2llcyIpLCB0aGlzLl9jb29raWVzVmlldyk7Ci0gICAgfQotCi0gICAgaWYgKHJlcXVlc3Qu
dGltaW5nKSB7Ci0gICAgICAgIHZhciB0aW1pbmdWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5SZXF1
ZXN0VGltaW5nVmlldyhyZXF1ZXN0KTsKLSAgICAgICAgdGhpcy5hcHBlbmRUYWIoInRpbWluZyIs
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGltaW5nIiksIHRpbWluZ1ZpZXcpOwotICAgIH0KLSAg
ICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdDsKLX0KLQotV2ViSW5zcGVjdG9yLk5ldHdvcmtJdGVt
Vmlldy5wcm90b3R5cGUgPSB7Ci0gICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5UYWJiZWRQYW5lLnByb3RvdHlwZS53YXNTaG93bi5jYWxsKHRoaXMp
OwotICAgICAgICB0aGlzLl9zZWxlY3RUYWIoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmc9fSB0YWJJZAotICAgICAqLwotICAgIF9zZWxlY3RUYWI6IGZ1bmN0aW9u
KHRhYklkKQotICAgIHsKLSAgICAgICAgaWYgKCF0YWJJZCkKLSAgICAgICAgICAgIHRhYklkID0g
V2ViSW5zcGVjdG9yLnNldHRpbmdzLnJlc291cmNlVmlld1RhYi5nZXQoKTsKLQotICAgICAgICBp
ZiAoIXRoaXMuc2VsZWN0VGFiKHRhYklkKSkgewotICAgICAgICAgICAgdGhpcy5faXNJbkZhbGxi
YWNrU2VsZWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKCJoZWFkZXJz
Iik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5faXNJbkZhbGxiYWNrU2VsZWN0aW9uOwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIF90YWJTZWxlY3RlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICBpZiAoIWV2ZW50LmRhdGEuaXNVc2VyR2VzdHVyZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucmVzb3VyY2VWaWV3VGFiLnNl
dChldmVudC5kYXRhLnRhYklkKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0aW9u
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLlVzZXJB
Y3Rpb24sIHsKLSAgICAgICAgICAgIGFjdGlvbjogV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLlVz
ZXJBY3Rpb25OYW1lcy5OZXR3b3JrUmVxdWVzdFRhYlNlbGVjdGVkLAotICAgICAgICAgICAgdGFi
OiBldmVudC5kYXRhLnRhYklkLAotICAgICAgICAgICAgdXJsOiB0aGlzLl9yZXF1ZXN0LnVybAot
ICAgICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5OZXR3b3JrUmVxdWVzdH0KLSAgICAgICovCi0gICAgcmVxdWVzdDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3Q7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLlRhYmJlZFBhbmUucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlJlcXVlc3RWaWV3fQotICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3R9IHJlcXVlc3QKLSAqLwotV2ViSW5zcGVj
dG9yLlJlcXVlc3RDb250ZW50VmlldyA9IGZ1bmN0aW9uKHJlcXVlc3QpCi17Ci0gICAgV2ViSW5z
cGVjdG9yLlJlcXVlc3RWaWV3LmNhbGwodGhpcywgcmVxdWVzdCk7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5SZXF1ZXN0Q29udGVudFZpZXcucHJvdG90eXBlID0gewotICAgIGhhc0NvbnRlbnQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBnZXQgaW5u
ZXJWaWV3KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclZpZXc7Ci0gICAgfSwK
LQotICAgIHNldCBpbm5lclZpZXcoaW5uZXJWaWV3KQotICAgIHsKLSAgICAgICAgdGhpcy5faW5u
ZXJWaWV3ID0gaW5uZXJWaWV3OwotICAgIH0sCi0KLSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fZW5zdXJlSW5uZXJWaWV3U2hvd24oKTsKLSAgICB9LAotCi0g
ICAgX2Vuc3VyZUlubmVyVmlld1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5faW5uZXJWaWV3U2hvd1JlcXVlc3RlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgdGhpcy5faW5uZXJWaWV3U2hvd1JlcXVlc3RlZCA9IHRydWU7Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAotICAgICAgICAgKiBAcGFyYW0ge2Jv
b2xlYW59IGNvbnRlbnRFbmNvZGVkCi0gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlw
ZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soY29udGVudCwgY29udGVu
dEVuY29kZWQsIG1pbWVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9pbm5lclZp
ZXdTaG93UmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZWQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMucmVxdWVzdC5yZXF1ZXN0Q29udGVudChjYWxs
YmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgY29udGVudExvYWRlZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMu
Ci0gICAgfSwKLQotICAgIGNhbkhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9pbm5lclZpZXcgJiYgdGhpcy5faW5uZXJWaWV3LmNhbkhpZ2hsaWdo
dExpbmUoKTsKLSAgICB9LAotCi0gICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGluZSkKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLmNhbkhpZ2hsaWdodExpbmUoKSkKLSAgICAgICAgICAgIHRo
aXMuX2lubmVyVmlldy5oaWdobGlnaHRMaW5lKGxpbmUpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5SZXF1ZXN0Vmlldy5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0d29ya0xvZy5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0d29ya0xvZy5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZmM0NTg1Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtMb2cuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5OZXR3b3JrTG9nID0g
ZnVuY3Rpb24oKQotewotICAgIHRoaXMuX3JlcXVlc3RzID0gW107Ci0gICAgdGhpcy5fcmVxdWVz
dEZvcklkID0ge307Ci0gICAgV2ViSW5zcGVjdG9yLm5ldHdvcmtNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLk5ldHdvcmtNYW5hZ2VyLkV2ZW50VHlwZXMuUmVxdWVzdFN0YXJ0
ZWQsIHRoaXMuX29uUmVxdWVzdFN0YXJ0ZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5yZXNv
dXJjZVRyZWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVN
b2RlbC5FdmVudFR5cGVzLk1haW5GcmFtZU5hdmlnYXRlZCwgdGhpcy5fb25NYWluRnJhbWVOYXZp
Z2F0ZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLk9uTG9h
ZCwgdGhpcy5fb25Mb2FkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9k
ZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRU
eXBlcy5ET01Db250ZW50TG9hZGVkLCB0aGlzLl9vbkRPTUNvbnRlbnRMb2FkZWQsIHRoaXMpOwot
fQotCi1XZWJJbnNwZWN0b3IuTmV0d29ya0xvZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdD59Ci0gICAgICov
Ci0gICAgZ2V0IHJlcXVlc3RzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0
czsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAotICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0KLSAgICAgKi8KLSAgICByZXF1
ZXN0Rm9yVVJMOiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX3JlcXVlc3RzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5f
cmVxdWVzdHNbaV0udXJsID09PSB1cmwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jl
cXVlc3RzW2ldOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVz
dAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5QYWdlTG9hZH0KLSAgICAgKi8KLSAgICBw
YWdlTG9hZEZvclJlcXVlc3Q6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAgICAgICByZXR1
cm4gcmVxdWVzdC5fX3BhZ2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9vbk1haW5GcmFtZU5hdmlnYXRl
ZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbWFpbkZyYW1lID0gLyoqIHR5
cGUge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0gKi8gZXZlbnQuZGF0YTsKLSAgICAg
ICAgLy8gUHJlc2VydmUgcmVxdWVzdHMgZnJvbSB0aGUgbmV3IHNlc3Npb24uCi0gICAgICAgIHRo
aXMuX2N1cnJlbnRQYWdlTG9hZCA9IG51bGw7Ci0gICAgICAgIHZhciBvbGRSZXF1ZXN0cyA9IHRo
aXMuX3JlcXVlc3RzLnNwbGljZSgwLCB0aGlzLl9yZXF1ZXN0cy5sZW5ndGgpOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG9sZFJlcXVlc3RzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICB2YXIgcmVxdWVzdCA9IG9sZFJlcXVlc3RzW2ldOwotICAgICAgICAgICAgaWYgKHJlcXVlc3Qu
bG9hZGVySWQgPT09IG1haW5GcmFtZS5sb2FkZXJJZCkgewotICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5fY3VycmVudFBhZ2VMb2FkKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
UGFnZUxvYWQgPSBuZXcgV2ViSW5zcGVjdG9yLlBhZ2VMb2FkKHJlcXVlc3QpOwotICAgICAgICAg
ICAgICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdCk7Ci0gICAgICAgICAgICAgICAgcmVx
dWVzdC5fX3BhZ2UgPSB0aGlzLl9jdXJyZW50UGFnZUxvYWQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZl
bnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uUmVxdWVzdFN0YXJ0ZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5O
ZXR3b3JrUmVxdWVzdH0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9yZXF1ZXN0cy5w
dXNoKHJlcXVlc3QpOwotICAgICAgICB0aGlzLl9yZXF1ZXN0Rm9ySWRbcmVxdWVzdC5yZXF1ZXN0
SWRdID0gcmVxdWVzdDsKLSAgICAgICAgcmVxdWVzdC5fX3BhZ2UgPSB0aGlzLl9jdXJyZW50UGFn
ZUxvYWQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2
ZW50fSBldmVudAotICAgICAqLwotICAgIF9vbkRPTUNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRQYWdlTG9hZCkKLSAgICAgICAg
ICAgIHRoaXMuX2N1cnJlbnRQYWdlTG9hZC5jb250ZW50TG9hZFRpbWUgPSBldmVudC5kYXRhOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZl
bnQKLSAgICAgKi8KLSAgICBfb25Mb2FkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9jdXJyZW50UGFnZUxvYWQpCi0gICAgICAgICAgICB0aGlzLl9jdXJyZW50UGFn
ZUxvYWQubG9hZFRpbWUgPSBldmVudC5kYXRhOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge05ldHdvcmtBZ2VudC5SZXF1ZXN0SWR9IHJlcXVlc3RJZAotICAgICAqIEByZXR1cm4g
ez9XZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3R9Ci0gICAgICovCi0gICAgcmVxdWVzdEZvcklk
OiBmdW5jdGlvbihyZXF1ZXN0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVz
dEZvcklkW3JlcXVlc3RJZF07Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBlIHtXZWJJbnNwZWN0
b3IuTmV0d29ya0xvZ30KLSAqLwotV2ViSW5zcGVjdG9yLm5ldHdvcmtMb2cgPSBudWxsOwotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVl
c3R9IG1haW5SZXF1ZXN0Ci0gKi8KLVdlYkluc3BlY3Rvci5QYWdlTG9hZCA9IGZ1bmN0aW9uKG1h
aW5SZXF1ZXN0KQotewotICAgIHRoaXMuaWQgPSArK1dlYkluc3BlY3Rvci5QYWdlTG9hZC5fbGFz
dElkZW50aWZpZXI7Ci0gICAgdGhpcy51cmwgPSBtYWluUmVxdWVzdC51cmw7Ci0gICAgdGhpcy5z
dGFydFRpbWUgPSBtYWluUmVxdWVzdC5zdGFydFRpbWU7Ci19Ci0KLVdlYkluc3BlY3Rvci5QYWdl
TG9hZC5fbGFzdElkZW50aWZpZXIgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvTmV0d29ya01hbmFnZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDdmZGJjOTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9OZXR3b3JrTWFuYWdlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDU4NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQot
ICovCi1XZWJJbnNwZWN0b3IuTmV0d29ya01hbmFnZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotICAgIHRoaXMuX2Rpc3BhdGNoZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLk5ldHdvcmtEaXNwYXRjaGVyKHRoaXMpOwotICAgIGlmIChXZWJJbnNwZWN0
b3Iuc2V0dGluZ3MuY2FjaGVEaXNhYmxlZC5nZXQoKSkKLSAgICAgICAgTmV0d29ya0FnZW50LnNl
dENhY2hlRGlzYWJsZWQodHJ1ZSk7Ci0KLSAgICBOZXR3b3JrQWdlbnQuZW5hYmxlKCk7Ci0KLSAg
ICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY2FjaGVEaXNhYmxlZC5hZGRDaGFuZ2VMaXN0ZW5lcih0
aGlzLl9jYWNoZURpc2FibGVkU2V0dGluZ0NoYW5nZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0
b3IuTmV0d29ya01hbmFnZXIuRXZlbnRUeXBlcyA9IHsKLSAgICBSZXF1ZXN0U3RhcnRlZDogIlJl
cXVlc3RTdGFydGVkIiwKLSAgICBSZXF1ZXN0VXBkYXRlZDogIlJlcXVlc3RVcGRhdGVkIiwKLSAg
ICBSZXF1ZXN0RmluaXNoZWQ6ICJSZXF1ZXN0RmluaXNoZWQiLAotICAgIFJlcXVlc3RVcGRhdGVE
cm9wcGVkOiAiUmVxdWVzdFVwZGF0ZURyb3BwZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5OZXR3b3Jr
TWFuYWdlci5fTUlNRVR5cGVzID0gewotICAgICJ0ZXh0L2h0bWwiOiAgICAgICAgICAgICAgICAg
ICB7ImRvY3VtZW50IjogdHJ1ZX0sCi0gICAgInRleHQveG1sIjogICAgICAgICAgICAgICAgICAg
IHsiZG9jdW1lbnQiOiB0cnVlfSwKLSAgICAidGV4dC9wbGFpbiI6ICAgICAgICAgICAgICAgICAg
eyJkb2N1bWVudCI6IHRydWV9LAotICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiOiAgICAgICB7
ImRvY3VtZW50IjogdHJ1ZX0sCi0gICAgInRleHQvY3NzIjogICAgICAgICAgICAgICAgICAgIHsi
c3R5bGVzaGVldCI6IHRydWV9LAotICAgICJ0ZXh0L3hzbCI6ICAgICAgICAgICAgICAgICAgICB7
InN0eWxlc2hlZXQiOiB0cnVlfSwKLSAgICAiaW1hZ2UvanBnIjogICAgICAgICAgICAgICAgICAg
eyJpbWFnZSI6IHRydWV9LAotICAgICJpbWFnZS9qcGVnIjogICAgICAgICAgICAgICAgICB7Imlt
YWdlIjogdHJ1ZX0sCi0gICAgImltYWdlL3BqcGVnIjogICAgICAgICAgICAgICAgIHsiaW1hZ2Ui
OiB0cnVlfSwKLSAgICAiaW1hZ2UvcG5nIjogICAgICAgICAgICAgICAgICAgeyJpbWFnZSI6IHRy
dWV9LAotICAgICJpbWFnZS9naWYiOiAgICAgICAgICAgICAgICAgICB7ImltYWdlIjogdHJ1ZX0s
Ci0gICAgImltYWdlL2JtcCI6ICAgICAgICAgICAgICAgICAgIHsiaW1hZ2UiOiB0cnVlfSwKLSAg
ICAiaW1hZ2Uvc3ZnK3htbCI6ICAgICAgICAgICAgICAgeyJpbWFnZSI6IHRydWV9LAotICAgICJp
bWFnZS92bmQubWljcm9zb2Z0Lmljb24iOiAgICB7ImltYWdlIjogdHJ1ZX0sCi0gICAgImltYWdl
L3dlYnAiOiAgICAgICAgICAgICAgICAgIHsiaW1hZ2UiOiB0cnVlfSwKLSAgICAiaW1hZ2UveC1p
Y29uIjogICAgICAgICAgICAgICAgeyJpbWFnZSI6IHRydWV9LAotICAgICJpbWFnZS94LXhiaXRt
YXAiOiAgICAgICAgICAgICB7ImltYWdlIjogdHJ1ZX0sCi0gICAgImZvbnQvdHRmIjogICAgICAg
ICAgICAgICAgICAgIHsiZm9udCI6IHRydWV9LAotICAgICJmb250L29wZW50eXBlIjogICAgICAg
ICAgICAgICB7ImZvbnQiOiB0cnVlfSwKLSAgICAiYXBwbGljYXRpb24vZm9udC13b2ZmIjogICAg
ICAgeyJmb250IjogdHJ1ZX0sCi0gICAgImFwcGxpY2F0aW9uL3gtZm9udC10eXBlMSI6ICAgIHsi
Zm9udCI6IHRydWV9LAotICAgICJhcHBsaWNhdGlvbi94LWZvbnQtdHRmIjogICAgICB7ImZvbnQi
OiB0cnVlfSwKLSAgICAiYXBwbGljYXRpb24veC10cnVldHlwZS1mb250IjogeyJmb250IjogdHJ1
ZX0sCi0gICAgInRleHQvamF2YXNjcmlwdCI6ICAgICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0s
Ci0gICAgInRleHQvZWNtYXNjcmlwdCI6ICAgICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0g
ICAgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiOiAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAg
ImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiOiAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAgImFw
cGxpY2F0aW9uL3gtamF2YXNjcmlwdCI6ICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAgImFwcGxp
Y2F0aW9uL2pzb24iOiAgICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAgInRleHQvamF2
YXNjcmlwdDEuMSI6ICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAgInRleHQvamF2YXNj
cmlwdDEuMiI6ICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAgInRleHQvamF2YXNjcmlw
dDEuMyI6ICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAgInRleHQvanNjcmlwdCI6ICAg
ICAgICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi0gICAgInRleHQvbGl2ZXNjcmlwdCI6ICAg
ICAgICAgICAgIHsic2NyaXB0IjogdHJ1ZX0sCi19Ci0KLVdlYkluc3BlY3Rvci5OZXR3b3JrTWFu
YWdlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAot
ICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0KLSAgICAgKi8KLSAg
ICBpbmZsaWdodFJlcXVlc3RGb3JVUkw6IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9kaXNwYXRjaGVyLl9pbmZsaWdodFJlcXVlc3RzQnlVUkxbdXJsXTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0g
ICAgICovCi0gICAgX2NhY2hlRGlzYWJsZWRTZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICB2YXIgZW5hYmxlZCA9IC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gKGV2
ZW50LmRhdGEpOwotICAgICAgICBOZXR3b3JrQWdlbnQuc2V0Q2FjaGVEaXNhYmxlZChlbmFibGVk
KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge05ldHdvcmtBZ2Vu
dC5EaXNwYXRjaGVyfQotICovCi1XZWJJbnNwZWN0b3IuTmV0d29ya0Rpc3BhdGNoZXIgPSBmdW5j
dGlvbihtYW5hZ2VyKQotewotICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOwotICAgIHRoaXMu
X2luZmxpZ2h0UmVxdWVzdHNCeUlkID0ge307Ci0gICAgdGhpcy5faW5mbGlnaHRSZXF1ZXN0c0J5
VVJMID0ge307Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVy
KHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuTmV0d29ya0Rpc3BhdGNoZXIucHJvdG90eXBlID0g
ewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LkhlYWRlcnN9IGhlYWRlcnNN
YXAKLSAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3Qu
TmFtZVZhbHVlPn0KLSAgICAgKi8KLSAgICBfaGVhZGVyc01hcFRvSGVhZGVyc0FycmF5OiBmdW5j
dGlvbihoZWFkZXJzTWFwKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAg
ICBmb3IgKHZhciBuYW1lIGluIGhlYWRlcnNNYXApIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZXMg
PSBoZWFkZXJzTWFwW25hbWVdLnNwbGl0KCJcbiIpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2go
e25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZXNbaV19KTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5OZXR3b3JrUmVxdWVzdH0gbmV0d29ya1JlcXVlc3QKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtB
Z2VudC5SZXF1ZXN0fSByZXF1ZXN0Ci0gICAgICovCi0gICAgX3VwZGF0ZU5ldHdvcmtSZXF1ZXN0
V2l0aFJlcXVlc3Q6IGZ1bmN0aW9uKG5ldHdvcmtSZXF1ZXN0LCByZXF1ZXN0KQotICAgIHsKLSAg
ICAgICAgbmV0d29ya1JlcXVlc3QucmVxdWVzdE1ldGhvZCA9IHJlcXVlc3QubWV0aG9kOwotICAg
ICAgICBuZXR3b3JrUmVxdWVzdC5yZXF1ZXN0SGVhZGVycyA9IHRoaXMuX2hlYWRlcnNNYXBUb0hl
YWRlcnNBcnJheShyZXF1ZXN0LmhlYWRlcnMpOwotICAgICAgICBuZXR3b3JrUmVxdWVzdC5yZXF1
ZXN0Rm9ybURhdGEgPSByZXF1ZXN0LnBvc3REYXRhOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gbmV0d29ya1JlcXVlc3QKLSAg
ICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5SZXNwb25zZT19IHJlc3BvbnNlCi0gICAgICovCi0g
ICAgX3VwZGF0ZU5ldHdvcmtSZXF1ZXN0V2l0aFJlc3BvbnNlOiBmdW5jdGlvbihuZXR3b3JrUmVx
dWVzdCwgcmVzcG9uc2UpCi0gICAgewotICAgICAgICBpZiAoIXJlc3BvbnNlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChyZXNwb25zZS51cmwgJiYgbmV0d29ya1JlcXVlc3Qu
dXJsICE9PSByZXNwb25zZS51cmwpCi0gICAgICAgICAgICBuZXR3b3JrUmVxdWVzdC51cmwgPSBy
ZXNwb25zZS51cmw7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0Lm1pbWVUeXBlID0gcmVzcG9uc2Uu
bWltZVR5cGU7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LnN0YXR1c0NvZGUgPSByZXNwb25zZS5z
dGF0dXM7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LnN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0
dXNUZXh0OwotICAgICAgICBuZXR3b3JrUmVxdWVzdC5yZXNwb25zZUhlYWRlcnMgPSB0aGlzLl9o
ZWFkZXJzTWFwVG9IZWFkZXJzQXJyYXkocmVzcG9uc2UuaGVhZGVycyk7Ci0gICAgICAgIGlmIChy
ZXNwb25zZS5oZWFkZXJzVGV4dCkKLSAgICAgICAgICAgIG5ldHdvcmtSZXF1ZXN0LnJlc3BvbnNl
SGVhZGVyc1RleHQgPSByZXNwb25zZS5oZWFkZXJzVGV4dDsKLSAgICAgICAgaWYgKHJlc3BvbnNl
LnJlcXVlc3RIZWFkZXJzKQotICAgICAgICAgICAgbmV0d29ya1JlcXVlc3QucmVxdWVzdEhlYWRl
cnMgPSB0aGlzLl9oZWFkZXJzTWFwVG9IZWFkZXJzQXJyYXkocmVzcG9uc2UucmVxdWVzdEhlYWRl
cnMpOwotICAgICAgICBpZiAocmVzcG9uc2UucmVxdWVzdEhlYWRlcnNUZXh0KQotICAgICAgICAg
ICAgbmV0d29ya1JlcXVlc3QucmVxdWVzdEhlYWRlcnNUZXh0ID0gcmVzcG9uc2UucmVxdWVzdEhl
YWRlcnNUZXh0OwotCi0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LmNvbm5lY3Rpb25SZXVzZWQgPSBy
ZXNwb25zZS5jb25uZWN0aW9uUmV1c2VkOwotICAgICAgICBuZXR3b3JrUmVxdWVzdC5jb25uZWN0
aW9uSWQgPSByZXNwb25zZS5jb25uZWN0aW9uSWQ7Ci0KLSAgICAgICAgaWYgKHJlc3BvbnNlLmZy
b21EaXNrQ2FjaGUpCi0gICAgICAgICAgICBuZXR3b3JrUmVxdWVzdC5jYWNoZWQgPSB0cnVlOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXR3b3JrUmVxdWVzdC50aW1pbmcgPSByZXNwb25z
ZS50aW1pbmc7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9taW1lVHlwZUlzQ29uc2lzdGVudFdpdGhU
eXBlKG5ldHdvcmtSZXF1ZXN0KSkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUu
YWRkTWVzc2FnZShXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY3JlYXRlKFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmssCi0gICAgICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2csCi0gICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXNvdXJjZSBpbnRlcnByZXRlZCBhcyAlcyBi
dXQgdHJhbnNmZXJyZWQgd2l0aCBNSU1FIHR5cGUgJXM6IFwiJXNcIi4iLCBuZXR3b3JrUmVxdWVz
dC50eXBlLnRpdGxlKCksIG5ldHdvcmtSZXF1ZXN0Lm1pbWVUeXBlLCBuZXR3b3JrUmVxdWVzdC51
cmwpLAotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5Mb2csCi0gICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIFtdLAotICAgICAgICAgICAgICAgIG51bGws
Ci0gICAgICAgICAgICAgICAgbmV0d29ya1JlcXVlc3QucmVxdWVzdElkKSk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmV0d29ya1Jl
cXVlc3R9IG5ldHdvcmtSZXF1ZXN0Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8K
LSAgICBfbWltZVR5cGVJc0NvbnNpc3RlbnRXaXRoVHlwZTogZnVuY3Rpb24obmV0d29ya1JlcXVl
c3QpCi0gICAgewotICAgICAgICAvLyBJZiBzdGF0dXMgaXMgYW4gZXJyb3IsIGNvbnRlbnQgaXMg
bGlrZWx5IHRvIGJlIG9mIGFuIGluY29uc2lzdGVudCB0eXBlLAotICAgICAgICAvLyBhcyBpdCdz
IGdvaW5nIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2UuIFdlIGRvIG5vdCB3YW50IHRvIGVtaXQgYSB3
YXJuaW5nCi0gICAgICAgIC8vIGZvciB0aGlzLCB0aG91Z2gsIGFzIHRoaXMgd2lsbCBhbHJlYWR5
IGJlIHJlcG9ydGVkIGFzIHJlc291cmNlIGxvYWRpbmcgZmFpbHVyZS4KLSAgICAgICAgLy8gQWxz
bywgaWYgYSBVUkwgbGlrZSBodHRwOi8vbG9jYWxob3N0L3dpa2kvbG9hZC5waHA/ZGVidWc9dHJ1
ZSZsYW5nPWVuIHByb2R1Y2VzIHRleHQvY3NzIGFuZCBnZXRzIHJlbG9hZGVkLAotICAgICAgICAv
LyBpdCBpcyAzMDQgTm90IE1vZGlmaWVkIGFuZCBpdHMgZ3Vlc3NlZCBtaW1lLXR5cGUgaXMgdGV4
dC9waHAsIHdoaWNoIGlzIHdyb25nLgotICAgICAgICAvLyBEb24ndCBjaGVjayBmb3IgbWltZS10
eXBlcyBpbiAzMDQtcmVzb3VyY2VzLgotICAgICAgICBpZiAobmV0d29ya1JlcXVlc3QuaGFzRXJy
b3JTdGF0dXNDb2RlKCkgfHwgbmV0d29ya1JlcXVlc3Quc3RhdHVzQ29kZSA9PT0gMzA0IHx8IG5l
dHdvcmtSZXF1ZXN0LnN0YXR1c0NvZGUgPT09IDIwNCkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIGlmICh0eXBlb2YgbmV0d29ya1JlcXVlc3QudHlwZSA9PT0gInVuZGVmaW5l
ZCIKLSAgICAgICAgICAgIHx8IG5ldHdvcmtSZXF1ZXN0LnR5cGUgPT09IFdlYkluc3BlY3Rvci5y
ZXNvdXJjZVR5cGVzLk90aGVyCi0gICAgICAgICAgICB8fCBuZXR3b3JrUmVxdWVzdC50eXBlID09
PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5YSFIKLSAgICAgICAgICAgIHx8IG5ldHdvcmtS
ZXF1ZXN0LnR5cGUgPT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLldlYlNvY2tldCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICghbmV0d29ya1JlcXVlc3QubWlt
ZVR5cGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTWlnaHQgYmUgbm90IGtub3duIGZv
ciBjYWNoZWQgcmVzb3VyY2VzIHdpdGggbnVsbCByZXNwb25zZXMuCi0KLSAgICAgICAgaWYgKG5l
dHdvcmtSZXF1ZXN0Lm1pbWVUeXBlIGluIFdlYkluc3BlY3Rvci5OZXR3b3JrTWFuYWdlci5fTUlN
RVR5cGVzKQotICAgICAgICAgICAgcmV0dXJuIG5ldHdvcmtSZXF1ZXN0LnR5cGUubmFtZSgpIGlu
IFdlYkluc3BlY3Rvci5OZXR3b3JrTWFuYWdlci5fTUlNRVR5cGVzW25ldHdvcmtSZXF1ZXN0Lm1p
bWVUeXBlXTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSBuZXR3b3JrUmVxdWVzdAot
ICAgICAqIEBwYXJhbSB7P05ldHdvcmtBZ2VudC5DYWNoZWRSZXNvdXJjZX0gY2FjaGVkUmVzb3Vy
Y2UKLSAgICAgKi8KLSAgICBfdXBkYXRlTmV0d29ya1JlcXVlc3RXaXRoQ2FjaGVkUmVzb3VyY2U6
IGZ1bmN0aW9uKG5ldHdvcmtSZXF1ZXN0LCBjYWNoZWRSZXNvdXJjZSkKLSAgICB7Ci0gICAgICAg
IG5ldHdvcmtSZXF1ZXN0LnR5cGUgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlc1tjYWNoZWRS
ZXNvdXJjZS50eXBlXTsKLSAgICAgICAgbmV0d29ya1JlcXVlc3QucmVzb3VyY2VTaXplID0gY2Fj
aGVkUmVzb3VyY2UuYm9keVNpemU7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU5ldHdvcmtSZXF1ZXN0
V2l0aFJlc3BvbnNlKG5ldHdvcmtSZXF1ZXN0LCBjYWNoZWRSZXNvdXJjZS5yZXNwb25zZSk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlc3BvbnNlfSBy
ZXNwb25zZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2lzTnVsbDog
ZnVuY3Rpb24ocmVzcG9uc2UpCi0gICAgewotICAgICAgICBpZiAoIXJlc3BvbnNlKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiAhcmVzcG9uc2Uuc3RhdHVzICYmICFy
ZXNwb25zZS5taW1lVHlwZSAmJiAoIXJlc3BvbnNlLmhlYWRlcnMgfHwgIU9iamVjdC5rZXlzKHJl
c3BvbnNlLmhlYWRlcnMpLmxlbmd0aCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7TmV0d29ya0FnZW50LlJlcXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICogQHBhcmFtIHtOZXR3
b3JrQWdlbnQuRnJhbWVJZH0gZnJhbWVJZAotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50Lkxv
YWRlcklkfSBsb2FkZXJJZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb2N1bWVudFVSTAotICAg
ICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlcXVlc3R9IHJlcXVlc3QKLSAgICAgKiBAcGFyYW0g
e05ldHdvcmtBZ2VudC5UaW1lc3RhbXB9IHRpbWUKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtBZ2Vu
dC5Jbml0aWF0b3J9IGluaXRpYXRvcgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlc3Bv
bnNlPX0gcmVkaXJlY3RSZXNwb25zZQotICAgICAqLwotICAgIHJlcXVlc3RXaWxsQmVTZW50OiBm
dW5jdGlvbihyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCBkb2N1bWVudFVSTCwgcmVxdWVz
dCwgdGltZSwgaW5pdGlhdG9yLCByZWRpcmVjdFJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgdmFy
IG5ldHdvcmtSZXF1ZXN0ID0gdGhpcy5faW5mbGlnaHRSZXF1ZXN0c0J5SWRbcmVxdWVzdElkXTsK
LSAgICAgICAgaWYgKG5ldHdvcmtSZXF1ZXN0KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogbW92
ZSB0aGlzIGNoZWNrIHRvIHRoZSBiYWNrZW5kLgotICAgICAgICAgICAgaWYgKCFyZWRpcmVjdFJl
c3BvbnNlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHRoaXMucmVzcG9u
c2VSZWNlaXZlZChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB0aW1lLCBQYWdlQWdlbnQu
UmVzb3VyY2VUeXBlLk90aGVyLCByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICAgICAgICAgIG5ldHdv
cmtSZXF1ZXN0ID0gdGhpcy5fYXBwZW5kUmVkaXJlY3QocmVxdWVzdElkLCB0aW1lLCByZXF1ZXN0
LnVybCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV0d29ya1JlcXVlc3QgPSB0aGlz
Ll9jcmVhdGVOZXR3b3JrUmVxdWVzdChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCByZXF1
ZXN0LnVybCwgZG9jdW1lbnRVUkwsIGluaXRpYXRvcik7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0
Lmhhc05ldHdvcmtEYXRhID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTmV0d29ya1JlcXVl
c3RXaXRoUmVxdWVzdChuZXR3b3JrUmVxdWVzdCwgcmVxdWVzdCk7Ci0gICAgICAgIG5ldHdvcmtS
ZXF1ZXN0LnN0YXJ0VGltZSA9IHRpbWU7Ci0KLSAgICAgICAgdGhpcy5fc3RhcnROZXR3b3JrUmVx
dWVzdChuZXR3b3JrUmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
TmV0d29ya0FnZW50LlJlcXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICovCi0gICAgcmVxdWVzdFNl
cnZlZEZyb21DYWNoZTogZnVuY3Rpb24ocmVxdWVzdElkKQotICAgIHsKLSAgICAgICAgdmFyIG5l
dHdvcmtSZXF1ZXN0ID0gdGhpcy5faW5mbGlnaHRSZXF1ZXN0c0J5SWRbcmVxdWVzdElkXTsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrUmVxdWVzdCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBuZXR3b3JrUmVxdWVzdC5jYWNoZWQgPSB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge05ldHdvcmtBZ2VudC5SZXF1ZXN0SWR9IHJlcXVlc3RJZAotICAgICAqIEBwYXJh
bSB7TmV0d29ya0FnZW50LkZyYW1lSWR9IGZyYW1lSWQKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtB
Z2VudC5Mb2FkZXJJZH0gbG9hZGVySWQKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5UaW1l
c3RhbXB9IHRpbWUKLSAgICAgKiBAcGFyYW0ge1BhZ2VBZ2VudC5SZXNvdXJjZVR5cGV9IHJlc291
cmNlVHlwZQotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlc3BvbnNlfSByZXNwb25zZQot
ICAgICAqLwotICAgIHJlc3BvbnNlUmVjZWl2ZWQ6IGZ1bmN0aW9uKHJlcXVlc3RJZCwgZnJhbWVJ
ZCwgbG9hZGVySWQsIHRpbWUsIHJlc291cmNlVHlwZSwgcmVzcG9uc2UpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogbW92ZSB0aGlzIGNoZWNrIHRvIHRoZSBiYWNrZW5kLgotICAgICAgICBpZiAo
dGhpcy5faXNOdWxsKHJlc3BvbnNlKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgbmV0d29ya1JlcXVlc3QgPSB0aGlzLl9pbmZsaWdodFJlcXVlc3RzQnlJZFtyZXF1ZXN0SWRd
OwotICAgICAgICBpZiAoIW5ldHdvcmtSZXF1ZXN0KSB7Ci0gICAgICAgICAgICAvLyBXZSBtaXNz
ZWQgdGhlIHJlcXVlc3RXaWxsQmVTZW50LgotICAgICAgICAgICAgdmFyIGV2ZW50RGF0YSA9IHt9
OwotICAgICAgICAgICAgZXZlbnREYXRhLnVybCA9IHJlc3BvbnNlLnVybDsKLSAgICAgICAgICAg
IGV2ZW50RGF0YS5mcmFtZUlkID0gZnJhbWVJZDsKLSAgICAgICAgICAgIGV2ZW50RGF0YS5sb2Fk
ZXJJZCA9IGxvYWRlcklkOwotICAgICAgICAgICAgZXZlbnREYXRhLnJlc291cmNlVHlwZSA9IHJl
c291cmNlVHlwZTsKLSAgICAgICAgICAgIGV2ZW50RGF0YS5taW1lVHlwZSA9IHJlc3BvbnNlLm1p
bWVUeXBlOwotICAgICAgICAgICAgdGhpcy5fbWFuYWdlci5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLk5ldHdvcmtNYW5hZ2VyLkV2ZW50VHlwZXMuUmVxdWVzdFVwZGF0ZURy
b3BwZWQsIGV2ZW50RGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBuZXR3b3JrUmVxdWVzdC5yZXNwb25zZVJlY2VpdmVkVGltZSA9IHRpbWU7Ci0gICAgICAg
IG5ldHdvcmtSZXF1ZXN0LnR5cGUgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlc1tyZXNvdXJj
ZVR5cGVdOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZU5ldHdvcmtSZXF1ZXN0V2l0aFJlc3BvbnNl
KG5ldHdvcmtSZXF1ZXN0LCByZXNwb25zZSk7Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlTmV0d29y
a1JlcXVlc3QobmV0d29ya1JlcXVlc3QpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge05ldHdvcmtBZ2VudC5SZXF1ZXN0SWR9IHJlcXVlc3RJZAotICAgICAqIEBwYXJhbSB7TmV0
d29ya0FnZW50LlRpbWVzdGFtcH0gdGltZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRhTGVu
Z3RoCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuY29kZWREYXRhTGVuZ3RoCi0gICAgICovCi0g
ICAgZGF0YVJlY2VpdmVkOiBmdW5jdGlvbihyZXF1ZXN0SWQsIHRpbWUsIGRhdGFMZW5ndGgsIGVu
Y29kZWREYXRhTGVuZ3RoKQotICAgIHsKLSAgICAgICAgdmFyIG5ldHdvcmtSZXF1ZXN0ID0gdGhp
cy5faW5mbGlnaHRSZXF1ZXN0c0J5SWRbcmVxdWVzdElkXTsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
UmVxdWVzdCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUmVxdWVzdC5y
ZXNvdXJjZVNpemUgKz0gZGF0YUxlbmd0aDsKLSAgICAgICAgaWYgKGVuY29kZWREYXRhTGVuZ3Ro
ICE9IC0xKQotICAgICAgICAgICAgbmV0d29ya1JlcXVlc3QuaW5jcmVhc2VUcmFuc2ZlclNpemUo
ZW5jb2RlZERhdGFMZW5ndGgpOwotICAgICAgICBuZXR3b3JrUmVxdWVzdC5lbmRUaW1lID0gdGlt
ZTsKLQotICAgICAgICB0aGlzLl91cGRhdGVOZXR3b3JrUmVxdWVzdChuZXR3b3JrUmVxdWVzdCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlcXVlc3RJ
ZH0gcmVxdWVzdElkCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuVGltZXN0YW1wfSBmaW5p
c2hUaW1lCi0gICAgICovCi0gICAgbG9hZGluZ0ZpbmlzaGVkOiBmdW5jdGlvbihyZXF1ZXN0SWQs
IGZpbmlzaFRpbWUpCi0gICAgewotICAgICAgICB2YXIgbmV0d29ya1JlcXVlc3QgPSB0aGlzLl9p
bmZsaWdodFJlcXVlc3RzQnlJZFtyZXF1ZXN0SWRdOwotICAgICAgICBpZiAoIW5ldHdvcmtSZXF1
ZXN0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9maW5pc2hOZXR3b3JrUmVx
dWVzdChuZXR3b3JrUmVxdWVzdCwgZmluaXNoVGltZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlcXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICogQHBh
cmFtIHtOZXR3b3JrQWdlbnQuVGltZXN0YW1wfSB0aW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IGxvY2FsaXplZERlc2NyaXB0aW9uCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gY2FuY2VsZWQK
LSAgICAgKi8KLSAgICBsb2FkaW5nRmFpbGVkOiBmdW5jdGlvbihyZXF1ZXN0SWQsIHRpbWUsIGxv
Y2FsaXplZERlc2NyaXB0aW9uLCBjYW5jZWxlZCkKLSAgICB7Ci0gICAgICAgIHZhciBuZXR3b3Jr
UmVxdWVzdCA9IHRoaXMuX2luZmxpZ2h0UmVxdWVzdHNCeUlkW3JlcXVlc3RJZF07Ci0gICAgICAg
IGlmICghbmV0d29ya1JlcXVlc3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0
d29ya1JlcXVlc3QuZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgbmV0d29ya1JlcXVlc3QuY2FuY2Vs
ZWQgPSBjYW5jZWxlZDsKLSAgICAgICAgbmV0d29ya1JlcXVlc3QubG9jYWxpemVkRmFpbERlc2Ny
aXB0aW9uID0gbG9jYWxpemVkRGVzY3JpcHRpb247Ci0gICAgICAgIHRoaXMuX2ZpbmlzaE5ldHdv
cmtSZXF1ZXN0KG5ldHdvcmtSZXF1ZXN0LCB0aW1lKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuUmVxdWVzdElkfSByZXF1ZXN0SWQKLSAgICAgKiBAcGFy
YW0ge05ldHdvcmtBZ2VudC5GcmFtZUlkfSBmcmFtZUlkCi0gICAgICogQHBhcmFtIHtOZXR3b3Jr
QWdlbnQuTG9hZGVySWR9IGxvYWRlcklkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRvY3VtZW50
VVJMCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuVGltZXN0YW1wfSB0aW1lCi0gICAgICog
QHBhcmFtIHtOZXR3b3JrQWdlbnQuSW5pdGlhdG9yfSBpbml0aWF0b3IKLSAgICAgKiBAcGFyYW0g
e05ldHdvcmtBZ2VudC5DYWNoZWRSZXNvdXJjZX0gY2FjaGVkUmVzb3VyY2UKLSAgICAgKi8KLSAg
ICByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlOiBmdW5jdGlvbihyZXF1ZXN0SWQsIGZyYW1l
SWQsIGxvYWRlcklkLCBkb2N1bWVudFVSTCwgdGltZSwgaW5pdGlhdG9yLCBjYWNoZWRSZXNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBuZXR3b3JrUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZU5ldHdv
cmtSZXF1ZXN0KHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIGNhY2hlZFJlc291cmNlLnVy
bCwgZG9jdW1lbnRVUkwsIGluaXRpYXRvcik7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU5ldHdvcmtS
ZXF1ZXN0V2l0aENhY2hlZFJlc291cmNlKG5ldHdvcmtSZXF1ZXN0LCBjYWNoZWRSZXNvdXJjZSk7
Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LmNhY2hlZCA9IHRydWU7Ci0gICAgICAgIG5ldHdvcmtS
ZXF1ZXN0LnJlcXVlc3RNZXRob2QgPSAiR0VUIjsKLSAgICAgICAgdGhpcy5fc3RhcnROZXR3b3Jr
UmVxdWVzdChuZXR3b3JrUmVxdWVzdCk7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LnN0YXJ0VGlt
ZSA9IG5ldHdvcmtSZXF1ZXN0LnJlc3BvbnNlUmVjZWl2ZWRUaW1lID0gdGltZTsKLSAgICAgICAg
dGhpcy5fZmluaXNoTmV0d29ya1JlcXVlc3QobmV0d29ya1JlcXVlc3QsIHRpbWUpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5SZXF1ZXN0SWR9IHJlcXVl
c3RJZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0VVJMCi0gICAgICovCi0gICAgd2Vi
U29ja2V0Q3JlYXRlZDogZnVuY3Rpb24ocmVxdWVzdElkLCByZXF1ZXN0VVJMKQotICAgIHsKLSAg
ICAgICAgdmFyIG5ldHdvcmtSZXF1ZXN0ID0gbmV3IFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVz
dChyZXF1ZXN0SWQsIHJlcXVlc3RVUkwsICIiLCAiIiwgIiIpOwotICAgICAgICBuZXR3b3JrUmVx
dWVzdC50eXBlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuV2ViU29ja2V0OwotICAgICAg
ICB0aGlzLl9zdGFydE5ldHdvcmtSZXF1ZXN0KG5ldHdvcmtSZXF1ZXN0KTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuUmVxdWVzdElkfSByZXF1ZXN0SWQK
LSAgICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5UaW1lc3RhbXB9IHRpbWUKLSAgICAgKiBAcGFy
YW0ge05ldHdvcmtBZ2VudC5XZWJTb2NrZXRSZXF1ZXN0fSByZXF1ZXN0Ci0gICAgICovCi0gICAg
d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0OiBmdW5jdGlvbihyZXF1ZXN0SWQsIHRp
bWUsIHJlcXVlc3QpCi0gICAgewotICAgICAgICB2YXIgbmV0d29ya1JlcXVlc3QgPSB0aGlzLl9p
bmZsaWdodFJlcXVlc3RzQnlJZFtyZXF1ZXN0SWRdOwotICAgICAgICBpZiAoIW5ldHdvcmtSZXF1
ZXN0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LnJlcXVl
c3RNZXRob2QgPSAiR0VUIjsKLSAgICAgICAgbmV0d29ya1JlcXVlc3QucmVxdWVzdEhlYWRlcnMg
PSB0aGlzLl9oZWFkZXJzTWFwVG9IZWFkZXJzQXJyYXkocmVxdWVzdC5oZWFkZXJzKTsKLSAgICAg
ICAgbmV0d29ya1JlcXVlc3Quc3RhcnRUaW1lID0gdGltZTsKLQotICAgICAgICB0aGlzLl91cGRh
dGVOZXR3b3JrUmVxdWVzdChuZXR3b3JrUmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlcXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICogQHBh
cmFtIHtOZXR3b3JrQWdlbnQuVGltZXN0YW1wfSB0aW1lCi0gICAgICogQHBhcmFtIHtOZXR3b3Jr
QWdlbnQuV2ViU29ja2V0UmVzcG9uc2V9IHJlc3BvbnNlCi0gICAgICovCi0gICAgd2ViU29ja2V0
SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZDogZnVuY3Rpb24ocmVxdWVzdElkLCB0aW1lLCByZXNw
b25zZSkKLSAgICB7Ci0gICAgICAgIHZhciBuZXR3b3JrUmVxdWVzdCA9IHRoaXMuX2luZmxpZ2h0
UmVxdWVzdHNCeUlkW3JlcXVlc3RJZF07Ci0gICAgICAgIGlmICghbmV0d29ya1JlcXVlc3QpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1JlcXVlc3Quc3RhdHVzQ29kZSA9
IHJlc3BvbnNlLnN0YXR1czsKLSAgICAgICAgbmV0d29ya1JlcXVlc3Quc3RhdHVzVGV4dCA9IHJl
c3BvbnNlLnN0YXR1c1RleHQ7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LnJlc3BvbnNlSGVhZGVy
cyA9IHRoaXMuX2hlYWRlcnNNYXBUb0hlYWRlcnNBcnJheShyZXNwb25zZS5oZWFkZXJzKTsKLSAg
ICAgICAgbmV0d29ya1JlcXVlc3QucmVzcG9uc2VSZWNlaXZlZFRpbWUgPSB0aW1lOwotCi0gICAg
ICAgIHRoaXMuX3VwZGF0ZU5ldHdvcmtSZXF1ZXN0KG5ldHdvcmtSZXF1ZXN0KTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuUmVxdWVzdElkfSByZXF1ZXN0
SWQKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5UaW1lc3RhbXB9IHRpbWUKLSAgICAgKiBA
cGFyYW0ge05ldHdvcmtBZ2VudC5XZWJTb2NrZXRGcmFtZX0gcmVzcG9uc2UKLSAgICAgKi8KLSAg
ICB3ZWJTb2NrZXRGcmFtZVJlY2VpdmVkOiBmdW5jdGlvbihyZXF1ZXN0SWQsIHRpbWUsIHJlc3Bv
bnNlKQotICAgIHsKLSAgICAgICAgdmFyIG5ldHdvcmtSZXF1ZXN0ID0gdGhpcy5faW5mbGlnaHRS
ZXF1ZXN0c0J5SWRbcmVxdWVzdElkXTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUmVxdWVzdCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUmVxdWVzdC5hZGRGcmFtZShyZXNw
b25zZSwgdGltZSk7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LnJlc3BvbnNlUmVjZWl2ZWRUaW1l
ID0gdGltZTsKLQotICAgICAgICB0aGlzLl91cGRhdGVOZXR3b3JrUmVxdWVzdChuZXR3b3JrUmVx
dWVzdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJl
cXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuVGltZXN0YW1w
fSB0aW1lCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuV2ViU29ja2V0RnJhbWV9IHJlc3Bv
bnNlCi0gICAgICovCi0gICAgd2ViU29ja2V0RnJhbWVTZW50OiBmdW5jdGlvbihyZXF1ZXN0SWQs
IHRpbWUsIHJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgdmFyIG5ldHdvcmtSZXF1ZXN0ID0gdGhp
cy5faW5mbGlnaHRSZXF1ZXN0c0J5SWRbcmVxdWVzdElkXTsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
UmVxdWVzdCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUmVxdWVzdC5h
ZGRGcmFtZShyZXNwb25zZSwgdGltZSwgdHJ1ZSk7Ci0gICAgICAgIG5ldHdvcmtSZXF1ZXN0LnJl
c3BvbnNlUmVjZWl2ZWRUaW1lID0gdGltZTsKLQotICAgICAgICB0aGlzLl91cGRhdGVOZXR3b3Jr
UmVxdWVzdChuZXR3b3JrUmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7TmV0d29ya0FnZW50LlJlcXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICogQHBhcmFtIHtOZXR3
b3JrQWdlbnQuVGltZXN0YW1wfSB0aW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTWVz
c2FnZQotICAgICAqLwotICAgIHdlYlNvY2tldEZyYW1lRXJyb3I6IGZ1bmN0aW9uKHJlcXVlc3RJ
ZCwgdGltZSwgZXJyb3JNZXNzYWdlKQotICAgIHsKLSAgICAgICAgdmFyIG5ldHdvcmtSZXF1ZXN0
ID0gdGhpcy5faW5mbGlnaHRSZXF1ZXN0c0J5SWRbcmVxdWVzdElkXTsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrUmVxdWVzdCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3JrUmVx
dWVzdC5hZGRGcmFtZUVycm9yKGVycm9yTWVzc2FnZSwgdGltZSk7Ci0gICAgICAgIG5ldHdvcmtS
ZXF1ZXN0LnJlc3BvbnNlUmVjZWl2ZWRUaW1lID0gdGltZTsKLQotICAgICAgICB0aGlzLl91cGRh
dGVOZXR3b3JrUmVxdWVzdChuZXR3b3JrUmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlcXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICogQHBh
cmFtIHtOZXR3b3JrQWdlbnQuVGltZXN0YW1wfSB0aW1lCi0gICAgICovCi0gICAgd2ViU29ja2V0
Q2xvc2VkOiBmdW5jdGlvbihyZXF1ZXN0SWQsIHRpbWUpCi0gICAgewotICAgICAgICB2YXIgbmV0
d29ya1JlcXVlc3QgPSB0aGlzLl9pbmZsaWdodFJlcXVlc3RzQnlJZFtyZXF1ZXN0SWRdOwotICAg
ICAgICBpZiAoIW5ldHdvcmtSZXF1ZXN0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLl9maW5pc2hOZXR3b3JrUmVxdWVzdChuZXR3b3JrUmVxdWVzdCwgdGltZSk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlJlcXVlc3RJZH0gcmVxdWVz
dElkCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuVGltZXN0YW1wfSB0aW1lCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VVJMCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
Lk5ldHdvcmtSZXF1ZXN0fQotICAgICAqLwotICAgIF9hcHBlbmRSZWRpcmVjdDogZnVuY3Rpb24o
cmVxdWVzdElkLCB0aW1lLCByZWRpcmVjdFVSTCkKLSAgICB7Ci0gICAgICAgIHZhciBvcmlnaW5h
bE5ldHdvcmtSZXF1ZXN0ID0gdGhpcy5faW5mbGlnaHRSZXF1ZXN0c0J5SWRbcmVxdWVzdElkXTsK
LSAgICAgICAgdmFyIHByZXZpb3VzUmVkaXJlY3RzID0gb3JpZ2luYWxOZXR3b3JrUmVxdWVzdC5y
ZWRpcmVjdHMgfHwgW107Ci0gICAgICAgIG9yaWdpbmFsTmV0d29ya1JlcXVlc3QucmVxdWVzdElk
ID0gInJlZGlyZWN0ZWQ6IiArIHJlcXVlc3RJZCArICIuIiArIHByZXZpb3VzUmVkaXJlY3RzLmxl
bmd0aDsKLSAgICAgICAgZGVsZXRlIG9yaWdpbmFsTmV0d29ya1JlcXVlc3QucmVkaXJlY3RzOwot
ICAgICAgICBpZiAocHJldmlvdXNSZWRpcmVjdHMubGVuZ3RoID4gMCkKLSAgICAgICAgICAgIG9y
aWdpbmFsTmV0d29ya1JlcXVlc3QucmVkaXJlY3RTb3VyY2UgPSBwcmV2aW91c1JlZGlyZWN0c1tw
cmV2aW91c1JlZGlyZWN0cy5sZW5ndGggLSAxXTsKLSAgICAgICAgdGhpcy5fZmluaXNoTmV0d29y
a1JlcXVlc3Qob3JpZ2luYWxOZXR3b3JrUmVxdWVzdCwgdGltZSk7Ci0gICAgICAgIHZhciBuZXdO
ZXR3b3JrUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZU5ldHdvcmtSZXF1ZXN0KHJlcXVlc3RJZCwgb3Jp
Z2luYWxOZXR3b3JrUmVxdWVzdC5mcmFtZUlkLCBvcmlnaW5hbE5ldHdvcmtSZXF1ZXN0LmxvYWRl
cklkLAotICAgICAgICAgICAgIHJlZGlyZWN0VVJMLCBvcmlnaW5hbE5ldHdvcmtSZXF1ZXN0LmRv
Y3VtZW50VVJMLCBvcmlnaW5hbE5ldHdvcmtSZXF1ZXN0LmluaXRpYXRvcik7Ci0gICAgICAgIG5l
d05ldHdvcmtSZXF1ZXN0LnJlZGlyZWN0cyA9IHByZXZpb3VzUmVkaXJlY3RzLmNvbmNhdChvcmln
aW5hbE5ldHdvcmtSZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuIG5ld05ldHdvcmtSZXF1ZXN0Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVx
dWVzdH0gbmV0d29ya1JlcXVlc3QKLSAgICAgKi8KLSAgICBfc3RhcnROZXR3b3JrUmVxdWVzdDog
ZnVuY3Rpb24obmV0d29ya1JlcXVlc3QpCi0gICAgewotICAgICAgICB0aGlzLl9pbmZsaWdodFJl
cXVlc3RzQnlJZFtuZXR3b3JrUmVxdWVzdC5yZXF1ZXN0SWRdID0gbmV0d29ya1JlcXVlc3Q7Ci0g
ICAgICAgIHRoaXMuX2luZmxpZ2h0UmVxdWVzdHNCeVVSTFtuZXR3b3JrUmVxdWVzdC51cmxdID0g
bmV0d29ya1JlcXVlc3Q7Ci0gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuTmV0d29ya01hbmFnZXIuRXZlbnRUeXBlcy5SZXF1ZXN0U3RhcnRlZCwgbmV0
d29ya1JlcXVlc3QpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5OZXR3b3JrUmVxdWVzdH0gbmV0d29ya1JlcXVlc3QKLSAgICAgKi8KLSAgICBfdXBkYXRl
TmV0d29ya1JlcXVlc3Q6IGZ1bmN0aW9uKG5ldHdvcmtSZXF1ZXN0KQotICAgIHsKLSAgICAgICAg
dGhpcy5fZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5OZXR3b3JrTWFuYWdl
ci5FdmVudFR5cGVzLlJlcXVlc3RVcGRhdGVkLCBuZXR3b3JrUmVxdWVzdCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSBuZXR3
b3JrUmVxdWVzdAotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50LlRpbWVzdGFtcH0gZmluaXNo
VGltZQotICAgICAqLwotICAgIF9maW5pc2hOZXR3b3JrUmVxdWVzdDogZnVuY3Rpb24obmV0d29y
a1JlcXVlc3QsIGZpbmlzaFRpbWUpCi0gICAgewotICAgICAgICBuZXR3b3JrUmVxdWVzdC5lbmRU
aW1lID0gZmluaXNoVGltZTsKLSAgICAgICAgbmV0d29ya1JlcXVlc3QuZmluaXNoZWQgPSB0cnVl
OwotICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLk5l
dHdvcmtNYW5hZ2VyLkV2ZW50VHlwZXMuUmVxdWVzdEZpbmlzaGVkLCBuZXR3b3JrUmVxdWVzdCk7
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9pbmZsaWdodFJlcXVlc3RzQnlJZFtuZXR3b3JrUmVxdWVz
dC5yZXF1ZXN0SWRdOwotICAgICAgICBkZWxldGUgdGhpcy5faW5mbGlnaHRSZXF1ZXN0c0J5VVJM
W25ldHdvcmtSZXF1ZXN0LnVybF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBldmVudFR5cGUKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVx
dWVzdH0gbmV0d29ya1JlcXVlc3QKLSAgICAgKi8KLSAgICBfZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzOiBmdW5jdGlvbihldmVudFR5cGUsIG5ldHdvcmtSZXF1ZXN0KQotICAgIHsKLSAgICAgICAg
dGhpcy5fbWFuYWdlci5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoZXZlbnRUeXBlLCBuZXR3b3Jr
UmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TmV0d29ya0FnZW50
LlJlcXVlc3RJZH0gcmVxdWVzdElkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGZyYW1lSWQKLSAg
ICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5Mb2FkZXJJZH0gbG9hZGVySWQKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRvY3VtZW50VVJMCi0gICAg
ICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuSW5pdGlhdG9yfSBpbml0aWF0b3IKLSAgICAgKi8KLSAg
ICBfY3JlYXRlTmV0d29ya1JlcXVlc3Q6IGZ1bmN0aW9uKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9h
ZGVySWQsIHVybCwgZG9jdW1lbnRVUkwsIGluaXRpYXRvcikKLSAgICB7Ci0gICAgICAgIHZhciBu
ZXR3b3JrUmVxdWVzdCA9IG5ldyBXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QocmVxdWVzdElk
LCB1cmwsIGRvY3VtZW50VVJMLCBmcmFtZUlkLCBsb2FkZXJJZCk7Ci0gICAgICAgIG5ldHdvcmtS
ZXF1ZXN0LmluaXRpYXRvciA9IGluaXRpYXRvcjsKLSAgICAgICAgcmV0dXJuIG5ldHdvcmtSZXF1
ZXN0OwotICAgIH0KLX0KLQotLyoqCi0gKiBAdHlwZSB7P1dlYkluc3BlY3Rvci5OZXR3b3JrTWFu
YWdlcn0KLSAqLwotV2ViSW5zcGVjdG9yLm5ldHdvcmtNYW5hZ2VyID0gbnVsbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0d29ya1BhbmVsLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrUGFuZWwuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NWRjNjUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrUGFuZWwuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwyNDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBB
bnRob255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1pbXBvcnRTY3JpcHQoIlJlcXVlc3RWaWV3Lmpz
Iik7Ci1pbXBvcnRTY3JpcHQoIk5ldHdvcmtJdGVtVmlldy5qcyIpOwotaW1wb3J0U2NyaXB0KCJS
ZXF1ZXN0Q29va2llc1ZpZXcuanMiKTsKLWltcG9ydFNjcmlwdCgiUmVxdWVzdEhlYWRlcnNWaWV3
LmpzIik7Ci1pbXBvcnRTY3JpcHQoIlJlcXVlc3RIVE1MVmlldy5qcyIpOwotaW1wb3J0U2NyaXB0
KCJSZXF1ZXN0SlNPTlZpZXcuanMiKTsKLWltcG9ydFNjcmlwdCgiUmVxdWVzdFByZXZpZXdWaWV3
LmpzIik7Ci1pbXBvcnRTY3JpcHQoIlJlcXVlc3RSZXNwb25zZVZpZXcuanMiKTsKLWltcG9ydFNj
cmlwdCgiUmVxdWVzdFRpbWluZ1ZpZXcuanMiKTsKLWltcG9ydFNjcmlwdCgiUmVzb3VyY2VXZWJT
b2NrZXRGcmFtZVZpZXcuanMiKTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNldHRpbmd9IGNv
dWxtbnNWaXNpYmlsaXR5U2V0dGluZwotICovCi1XZWJJbnNwZWN0b3IuTmV0d29ya0xvZ1ZpZXcg
PSBmdW5jdGlvbihjb3VsbW5zVmlzaWJpbGl0eVNldHRpbmcpCi17Ci0gICAgV2ViSW5zcGVjdG9y
LlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1MoIm5ldHdvcmtM
b2dWaWV3LmNzcyIpOwotCi0gICAgdGhpcy5fY291bG1uc1Zpc2liaWxpdHlTZXR0aW5nID0gY291
bG1uc1Zpc2liaWxpdHlTZXR0aW5nOwotICAgIHRoaXMuX2FsbG93UmVxdWVzdFNlbGVjdGlvbiA9
IGZhbHNlOwotICAgIHRoaXMuX3JlcXVlc3RzID0gW107Ci0gICAgdGhpcy5fcmVxdWVzdHNCeUlk
ID0ge307Ci0gICAgdGhpcy5fcmVxdWVzdHNCeVVSTCA9IHt9OwotICAgIHRoaXMuX3N0YWxlUmVx
dWVzdHMgPSB7fTsKLSAgICB0aGlzLl9yZXF1ZXN0R3JpZE5vZGVzID0ge307Ci0gICAgdGhpcy5f
bGFzdFJlcXVlc3RHcmlkTm9kZUlkID0gMDsKLSAgICB0aGlzLl9tYWluUmVxdWVzdExvYWRUaW1l
ID0gLTE7Ci0gICAgdGhpcy5fbWFpblJlcXVlc3RET01Db250ZW50VGltZSA9IC0xOwotICAgIHRo
aXMuX2hpZGRlbkNhdGVnb3JpZXMgPSB7fTsKLSAgICB0aGlzLl9tYXRjaGVkUmVxdWVzdHMgPSBb
XTsKLSAgICB0aGlzLl9oaWdobGlnaHRlZFN1YnN0cmluZ0NoYW5nZXMgPSBbXTsKLSAgICB0aGlz
Ll9maWx0ZXJlZE91dFJlcXVlc3RzID0gbmV3IE1hcCgpOwotICAgIAotICAgIHRoaXMuX21hdGNo
ZWRSZXF1ZXN0c01hcCA9IHt9OwotICAgIHRoaXMuX2N1cnJlbnRNYXRjaGVkUmVxdWVzdEluZGV4
ID0gLTE7Ci0KLSAgICB0aGlzLl9jcmVhdGVTdGF0dXNiYXJCdXR0b25zKCk7Ci0gICAgdGhpcy5f
Y3JlYXRlU3RhdHVzQmFySXRlbXMoKTsKLSAgICB0aGlzLl9saW5raWZpZXIgPSBuZXcgV2ViSW5z
cGVjdG9yLkxpbmtpZmllcigpOwotCi0gICAgV2ViSW5zcGVjdG9yLm5ldHdvcmtNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5ldHdvcmtNYW5hZ2VyLkV2ZW50VHlwZXMuUmVx
dWVzdFN0YXJ0ZWQsIHRoaXMuX29uUmVxdWVzdFN0YXJ0ZWQsIHRoaXMpOwotICAgIFdlYkluc3Bl
Y3Rvci5uZXR3b3JrTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3Jr
TWFuYWdlci5FdmVudFR5cGVzLlJlcXVlc3RVcGRhdGVkLCB0aGlzLl9vblJlcXVlc3RVcGRhdGVk
LCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IubmV0d29ya01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuTmV0d29ya01hbmFnZXIuRXZlbnRUeXBlcy5SZXF1ZXN0RmluaXNoZWQs
IHRoaXMuX29uUmVxdWVzdFVwZGF0ZWQsIHRoaXMpOwotCi0gICAgV2ViSW5zcGVjdG9yLnJlc291
cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1v
ZGVsLkV2ZW50VHlwZXMuTWFpbkZyYW1lTmF2aWdhdGVkLCB0aGlzLl9tYWluRnJhbWVOYXZpZ2F0
ZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLk9uTG9hZCwg
dGhpcy5fb25Mb2FkRXZlbnRGaXJlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLnJlc291cmNl
VHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVs
LkV2ZW50VHlwZXMuRE9NQ29udGVudExvYWRlZCwgdGhpcy5fZG9tQ29udGVudExvYWRlZEV2ZW50
RmlyZWQsIHRoaXMpOwotCi0gICAgdGhpcy5faW5pdGlhbGl6ZVZpZXcoKTsKLSAgICBmdW5jdGlv
biBvbkNhbkNsZWFyQnJvd3NlckNhY2hlKGVycm9yLCByZXN1bHQpCi0gICAgewotICAgICAgICB0
aGlzLl9jYW5DbGVhckJyb3dzZXJDYWNoZSA9IHJlc3VsdDsKLSAgICB9Ci0gICAgTmV0d29ya0Fn
ZW50LmNhbkNsZWFyQnJvd3NlckNhY2hlKG9uQ2FuQ2xlYXJCcm93c2VyQ2FjaGUuYmluZCh0aGlz
KSk7Ci0KLSAgICBmdW5jdGlvbiBvbkNhbkNsZWFyQnJvd3NlckNvb2tpZXMoZXJyb3IsIHJlc3Vs
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NhbkNsZWFyQnJvd3NlckNvb2tpZXMgPSByZXN1bHQ7
Ci0gICAgfQotICAgIE5ldHdvcmtBZ2VudC5jYW5DbGVhckJyb3dzZXJDb29raWVzKG9uQ2FuQ2xl
YXJCcm93c2VyQ29va2llcy5iaW5kKHRoaXMpKTsKLQotICAgIFdlYkluc3BlY3Rvci5uZXR3b3Jr
TG9nLnJlcXVlc3RzLmZvckVhY2godGhpcy5fYXBwZW5kUmVxdWVzdC5iaW5kKHRoaXMpKTsKLX0K
LQotV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3Ll9kZWZhdWx0Q29sdW1uc1Zpc2l2aWxpdHkg
PSB7bWV0aG9kOiB0cnVlLCBzdGF0dXM6IHRydWUsIGRvbWFpbjogZmFsc2UsIHR5cGU6IHRydWUs
IGluaXRpYXRvcjogdHJ1ZSwgY29va2llczogZmFsc2UsIHNldENvb2tpZXM6IGZhbHNlLCBzaXpl
OiB0cnVlLCB0aW1lOiB0cnVlfTsKLQotV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3LnByb3Rv
dHlwZSA9IHsKLSAgICBfaW5pdGlhbGl6ZVZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuZWxlbWVudC5pZCA9ICJuZXR3b3JrLWNvbnRhaW5lciI7Ci0KLSAgICAgICAgdGhpcy5f
Y3JlYXRlU29ydGluZ0Z1bmN0aW9ucygpOwotICAgICAgICB0aGlzLl9jcmVhdGVUYWJsZSgpOwot
ICAgICAgICB0aGlzLl9jcmVhdGVUaW1lbGluZUdyaWQoKTsKLSAgICAgICAgdGhpcy5fY3JlYXRl
U3VtbWFyeUJhcigpOwotCi0gICAgICAgIGlmICghdGhpcy51c2VMYXJnZVJvd3MpCi0gICAgICAg
ICAgICB0aGlzLl9zZXRMYXJnZXJSZXF1ZXN0cyh0aGlzLnVzZUxhcmdlUm93cyk7Ci0KLSAgICAg
ICAgdGhpcy5fYWxsb3dQb3BvdmVyID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3ZlckhlbHBlcih0aGlzLmVsZW1lbnQsIHRoaXMuX2dl
dFBvcG92ZXJBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5fc2hvd1BvcG92ZXIuYmluZCh0aGlzKSk7
Ci0gICAgICAgIC8vIEVuYWJsZSBmYXN0ZXIgaGludC4KLSAgICAgICAgdGhpcy5fcG9wb3Zlckhl
bHBlci5zZXRUaW1lb3V0KDEwMCk7Ci0KLSAgICAgICAgdGhpcy5jYWxjdWxhdG9yID0gbmV3IFdl
Ykluc3BlY3Rvci5OZXR3b3JrVHJhbnNmZXJUaW1lQ2FsY3VsYXRvcigpOwotICAgICAgICB0aGlz
Ll9maWx0ZXIodGhpcy5fZmlsdGVyQWxsRWxlbWVudCwgZmFsc2UpOwotCi0gICAgICAgIHRoaXMu
c3dpdGNoVG9EZXRhaWxlZFZpZXcoKTsKLSAgICB9LAotCi0gICAgc3RhdHVzQmFySXRlbXM6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fbGFyZ2VyUmVxdWVzdHNCdXR0
b24uZWxlbWVudCwgdGhpcy5fcHJlc2VydmVMb2dUb2dnbGUuZWxlbWVudCwgdGhpcy5fY2xlYXJC
dXR0b24uZWxlbWVudCwgdGhpcy5fZmlsdGVyQmFyRWxlbWVudCwgdGhpcy5fcHJvZ3Jlc3NCYXJD
b250YWluZXJdOwotICAgIH0sCi0KLSAgICBnZXQgdXNlTGFyZ2VSb3dzKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucmVzb3VyY2VzTGFyZ2VSb3dzLmdldCgp
OwotICAgIH0sCi0KLSAgICBzZXQgYWxsb3dQb3BvdmVyKGZsYWcpCi0gICAgewotICAgICAgICB0
aGlzLl9hbGxvd1BvcG92ZXIgPSBmbGFnOwotICAgIH0sCi0KLSAgICBlbGVtZW50c1RvUmVzdG9y
ZVNjcm9sbFBvc2l0aW9uc0ZvcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
Ll9kYXRhR3JpZCkgLy8gTm90IGluaXRpYWxpemVkIHlldC4KLSAgICAgICAgICAgIHJldHVybiBb
XTsKLSAgICAgICAgcmV0dXJuIFt0aGlzLl9kYXRhR3JpZC5zY3JvbGxDb250YWluZXJdOwotICAg
IH0sCi0KLSAgICBvblJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fdXBk
YXRlT2Zmc2NyZWVuUm93cygpOwotICAgIH0sCi0KLSAgICBfY3JlYXRlVGltZWxpbmVHcmlkOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl90aW1lbGluZUdyaWQgPSBuZXcgV2ViSW5z
cGVjdG9yLlRpbWVsaW5lR3JpZCgpOwotICAgICAgICB0aGlzLl90aW1lbGluZUdyaWQuZWxlbWVu
dC5hZGRTdHlsZUNsYXNzKCJuZXR3b3JrLXRpbWVsaW5lLWdyaWQiKTsKLSAgICAgICAgdGhpcy5f
ZGF0YUdyaWQuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl90aW1lbGluZUdyaWQuZWxlbWVudCk7
Ci0gICAgfSwKLQotICAgIF9jcmVhdGVUYWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIGNvbHVtbnMgPSBbXTsKLSAgICAgICAgY29sdW1ucy5wdXNoKHsKLSAgICAgICAgICAgIGlk
OiAibmFtZSIsIAotICAgICAgICAgICAgdGl0bGVET01GcmFnbWVudDogdGhpcy5fbWFrZUhlYWRl
ckZyYWdtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiTmFtZSIpLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlBhdGgiKSksCi0gICAgICAgICAgICB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJOYW1lIiksCi0gICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgIHdlaWdo
dDogMjAsCi0gICAgICAgICAgICBkaXNjbG9zdXJlOiB0cnVlCi0gICAgICAgIH0pOwotCi0gICAg
ICAgIGNvbHVtbnMucHVzaCh7Ci0gICAgICAgICAgICBpZDogIm1ldGhvZCIsCi0gICAgICAgICAg
ICB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJNZXRob2QiKSwKLSAgICAgICAgICAgIHNv
cnRhYmxlOiB0cnVlLAotICAgICAgICAgICAgd2VpZ2h0OiA2Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIGNvbHVtbnMucHVzaCh7Ci0gICAgICAgICAgICBpZDogInN0YXR1cyIsCi0gICAgICAgICAg
ICB0aXRsZURPTUZyYWdtZW50OiB0aGlzLl9tYWtlSGVhZGVyRnJhZ21lbnQoV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJTdGF0dXMiKSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUZXh0IikpLAotICAg
ICAgICAgICAgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3RhdHVzIiksCi0gICAgICAg
ICAgICBzb3J0YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgIHdlaWdodDogNgotICAgICAgICB9KTsK
LQotICAgICAgICBjb2x1bW5zLnB1c2goewotICAgICAgICAgICAgaWQ6ICJkb21haW4iLAotICAg
ICAgICAgICAgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRG9tYWluIiksCi0gICAgICAg
ICAgICBzb3J0YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgIHdlaWdodDogNgotICAgICAgICB9KTsK
LQotICAgICAgICBjb2x1bW5zLnB1c2goewotICAgICAgICAgICAgaWQ6ICJ0eXBlIiwKLSAgICAg
ICAgICAgIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlR5cGUiKSwKLSAgICAgICAgICAg
IHNvcnRhYmxlOiB0cnVlLAotICAgICAgICAgICAgd2VpZ2h0OiA2Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIGNvbHVtbnMucHVzaCh7Ci0gICAgICAgICAgICBpZDogImluaXRpYXRvciIsCi0gICAg
ICAgICAgICB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbml0aWF0b3IiKSwKLSAgICAg
ICAgICAgIHNvcnRhYmxlOiB0cnVlLAotICAgICAgICAgICAgd2VpZ2h0OiAxMAotICAgICAgICB9
KTsKLQotICAgICAgICBjb2x1bW5zLnB1c2goewotICAgICAgICAgICAgaWQ6ICJjb29raWVzIiwK
LSAgICAgICAgICAgIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvb2tpZXMiKSwKLSAg
ICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLAotICAgICAgICAgICAgd2VpZ2h0OiA2LAotICAgICAg
ICAgICAgYWxpZ246IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5BbGlnbi5SaWdodAotICAgICAgICB9
KTsKLQotICAgICAgICBjb2x1bW5zLnB1c2goewotICAgICAgICAgICAgaWQ6ICJzZXRDb29raWVz
IiwKLSAgICAgICAgICAgIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNldC1Db29raWVz
IiksCi0gICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgIHdlaWdodDogNiwK
LSAgICAgICAgICAgIGFsaWduOiBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuQWxpZ24uUmlnaHQKLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgY29sdW1ucy5wdXNoKHsKLSAgICAgICAgICAgIGlkOiAic2l6
ZSIsCi0gICAgICAgICAgICB0aXRsZURPTUZyYWdtZW50OiB0aGlzLl9tYWtlSGVhZGVyRnJhZ21l
bnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaXplIiksIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
Q29udGVudCIpKSwKLSAgICAgICAgICAgIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNp
emUiKSwKLSAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLAotICAgICAgICAgICAgd2VpZ2h0OiA2
LAotICAgICAgICAgICAgYWxpZ246IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5BbGlnbi5SaWdodAot
ICAgICAgICB9KTsKLQotICAgICAgICBjb2x1bW5zLnB1c2goewotICAgICAgICAgICAgaWQ6ICJ0
aW1lIiwKLSAgICAgICAgICAgIHRpdGxlRE9NRnJhZ21lbnQ6IHRoaXMuX21ha2VIZWFkZXJGcmFn
bWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRpbWUiKSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJMYXRlbmN5IikpLAotICAgICAgICAgICAgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
VGltZSIpLAotICAgICAgICAgICAgc29ydGFibGU6IHRydWUsCi0gICAgICAgICAgICB3ZWlnaHQ6
IDYsCi0gICAgICAgICAgICBhbGlnbjogV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkFsaWduLlJpZ2h0
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbHVtbnMucHVzaCh7Ci0gICAgICAgICAgICBpZDog
InRpbWVsaW5lIiwKLSAgICAgICAgICAgIHRpdGxlRE9NRnJhZ21lbnQ6IGRvY3VtZW50LmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKSwKLSAgICAgICAgICAgIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlRpbWVsaW5lIiksCi0gICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsCi0gICAgICAg
ICAgICB3ZWlnaHQ6IDQwLAotICAgICAgICAgICAgc29ydDogV2ViSW5zcGVjdG9yLkRhdGFHcmlk
Lk9yZGVyLkFzY2VuZGluZwotICAgICAgICB9KTsKLQotICAgICAgICB0aGlzLl9kYXRhR3JpZCA9
IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7Ci0gICAgICAgIHRoaXMuX2RhdGFH
cmlkLnJlc2l6ZU1ldGhvZCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5SZXNpemVNZXRob2QuTGFz
dDsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJuZXR3b3Jr
LWxvZy1ncmlkIik7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlkLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMpLCB0cnVlKTsK
LSAgICAgICAgdGhpcy5fZGF0YUdyaWQuc2hvdyh0aGlzLmVsZW1lbnQpOwotCi0gICAgICAgIC8v
IEV2ZW50IGxpc3RlbmVycyBuZWVkIHRvIGJlIGFkZGVkIF9hZnRlcl8gd2UgYXR0YWNoIHRvIHRo
ZSBkb2N1bWVudCwgc28gdGhhdCBvd25lciBkb2N1bWVudCBpcyBwcm9wZXJseSB1cGRhdGUuCi0g
ICAgICAgIHRoaXMuX2RhdGFHcmlkLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRhdGFH
cmlkLkV2ZW50cy5Tb3J0aW5nQ2hhbmdlZCwgdGhpcy5fc29ydEl0ZW1zLCB0aGlzKTsKLSAgICAg
ICAgdGhpcy5fZGF0YUdyaWQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGF0YUdyaWQu
RXZlbnRzLkNvbHVtbnNSZXNpemVkLCB0aGlzLl91cGRhdGVEaXZpZGVyc0lmTmVlZGVkLCB0aGlz
KTsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVu
ZXIoInNjcm9sbCIsIHRoaXMuX3VwZGF0ZU9mZnNjcmVlblJvd3MuYmluZCh0aGlzKSk7Ci0KLSAg
ICAgICAgdGhpcy5fcGF0Y2hUaW1lbGluZUhlYWRlcigpOwotICAgIH0sCi0KLSAgICBfbWFrZUhl
YWRlckZyYWdtZW50OiBmdW5jdGlvbih0aXRsZSwgc3VidGl0bGUpCi0gICAgewotICAgICAgICB2
YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAg
IGZyYWdtZW50LmNyZWF0ZVRleHRDaGlsZCh0aXRsZSk7Ci0gICAgICAgIHZhciBzdWJ0aXRsZURp
diA9IGZyYWdtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAibmV0d29yay1oZWFkZXItc3VidGl0bGUi
KTsKLSAgICAgICAgc3VidGl0bGVEaXYuY3JlYXRlVGV4dENoaWxkKHN1YnRpdGxlKTsKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0sCi0KLSAgICBfcGF0Y2hUaW1lbGluZUhlYWRlcjog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHRpbWVsaW5lU29ydGluZyA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotCi0gICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgb3B0aW9uLnZhbHVlID0gInN0YXJ0
VGltZSI7Ci0gICAgICAgIG9wdGlvbi5sYWJlbCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGlt
ZWxpbmUiKTsKLSAgICAgICAgdGltZWxpbmVTb3J0aW5nLmFwcGVuZENoaWxkKG9wdGlvbik7Ci0K
LSAgICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Ci0gICAg
ICAgIG9wdGlvbi52YWx1ZSA9ICJzdGFydFRpbWUiOwotICAgICAgICBvcHRpb24ubGFiZWwgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0YXJ0IFRpbWUiKTsKLSAgICAgICAgdGltZWxpbmVTb3J0
aW5nLmFwcGVuZENoaWxkKG9wdGlvbik7Ci0KLSAgICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgib3B0aW9uIik7Ci0gICAgICAgIG9wdGlvbi52YWx1ZSA9ICJyZXNwb25zZVRp
bWUiOwotICAgICAgICBvcHRpb24ubGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc3Bv
bnNlIFRpbWUiKTsKLSAgICAgICAgdGltZWxpbmVTb3J0aW5nLmFwcGVuZENoaWxkKG9wdGlvbik7
Ci0KLSAgICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Ci0g
ICAgICAgIG9wdGlvbi52YWx1ZSA9ICJlbmRUaW1lIjsKLSAgICAgICAgb3B0aW9uLmxhYmVsID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFbmQgVGltZSIpOwotICAgICAgICB0aW1lbGluZVNvcnRp
bmcuYXBwZW5kQ2hpbGQob3B0aW9uKTsKLQotICAgICAgICBvcHRpb24gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgb3B0aW9uLnZhbHVlID0gImR1cmF0aW9uIjsK
LSAgICAgICAgb3B0aW9uLmxhYmVsID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEdXJhdGlvbiIp
OwotICAgICAgICB0aW1lbGluZVNvcnRpbmcuYXBwZW5kQ2hpbGQob3B0aW9uKTsKLQotICAgICAg
ICBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgb3B0
aW9uLnZhbHVlID0gImxhdGVuY3kiOwotICAgICAgICBvcHRpb24ubGFiZWwgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkxhdGVuY3kiKTsKLSAgICAgICAgdGltZWxpbmVTb3J0aW5nLmFwcGVuZENo
aWxkKG9wdGlvbik7Ci0KLSAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMuX2RhdGFHcmlkLmhlYWRl
clRhYmxlSGVhZGVyKCJ0aW1lbGluZSIpOwotICAgICAgICBoZWFkZXIucmVwbGFjZUNoaWxkKHRp
bWVsaW5lU29ydGluZywgaGVhZGVyLmZpcnN0Q2hpbGQpOwotCi0gICAgICAgIHRpbWVsaW5lU29y
dGluZy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKGV2ZW50KSB7IGV2ZW50LmNv
bnN1bWUoKSB9LCBmYWxzZSk7Ci0gICAgICAgIHRpbWVsaW5lU29ydGluZy5hZGRFdmVudExpc3Rl
bmVyKCJjaGFuZ2UiLCB0aGlzLl9zb3J0QnlUaW1lbGluZS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0g
ICAgICAgIHRoaXMuX3RpbWVsaW5lU29ydFNlbGVjdG9yID0gdGltZWxpbmVTb3J0aW5nOwotICAg
IH0sCi0KLSAgICBfY3JlYXRlU29ydGluZ0Z1bmN0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fc29ydGluZ0Z1bmN0aW9ucyA9IHt9OwotICAgICAgICB0aGlzLl9zb3J0aW5n
RnVuY3Rpb25zLm5hbWUgPSBXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5OYW1lQ29t
cGFyYXRvcjsKLSAgICAgICAgdGhpcy5fc29ydGluZ0Z1bmN0aW9ucy5tZXRob2QgPSBXZWJJbnNw
ZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5SZXF1ZXN0UHJvcGVydHlDb21wYXJhdG9yLmJpbmQo
bnVsbCwgIm1ldGhvZCIsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fc29ydGluZ0Z1bmN0aW9ucy5z
dGF0dXMgPSBXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5SZXF1ZXN0UHJvcGVydHlD
b21wYXJhdG9yLmJpbmQobnVsbCwgInN0YXR1c0NvZGUiLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMu
X3NvcnRpbmdGdW5jdGlvbnMuZG9tYWluID0gV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZE5v
ZGUuUmVxdWVzdFByb3BlcnR5Q29tcGFyYXRvci5iaW5kKG51bGwsICJkb21haW4iLCBmYWxzZSk7
Ci0gICAgICAgIHRoaXMuX3NvcnRpbmdGdW5jdGlvbnMudHlwZSA9IFdlYkluc3BlY3Rvci5OZXR3
b3JrRGF0YUdyaWROb2RlLlJlcXVlc3RQcm9wZXJ0eUNvbXBhcmF0b3IuYmluZChudWxsLCAibWlt
ZVR5cGUiLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX3NvcnRpbmdGdW5jdGlvbnMuaW5pdGlhdG9y
ID0gV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZE5vZGUuSW5pdGlhdG9yQ29tcGFyYXRvcjsK
LSAgICAgICAgdGhpcy5fc29ydGluZ0Z1bmN0aW9ucy5jb29raWVzID0gV2ViSW5zcGVjdG9yLk5l
dHdvcmtEYXRhR3JpZE5vZGUuUmVxdWVzdENvb2tpZXNDb3VudENvbXBhcmF0b3I7Ci0gICAgICAg
IHRoaXMuX3NvcnRpbmdGdW5jdGlvbnMuc2V0Q29va2llcyA9IFdlYkluc3BlY3Rvci5OZXR3b3Jr
RGF0YUdyaWROb2RlLlJlc3BvbnNlQ29va2llc0NvdW50Q29tcGFyYXRvcjsKLSAgICAgICAgdGhp
cy5fc29ydGluZ0Z1bmN0aW9ucy5zaXplID0gV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZE5v
ZGUuU2l6ZUNvbXBhcmF0b3I7Ci0gICAgICAgIHRoaXMuX3NvcnRpbmdGdW5jdGlvbnMudGltZSA9
IFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWROb2RlLlJlcXVlc3RQcm9wZXJ0eUNvbXBhcmF0
b3IuYmluZChudWxsLCAiZHVyYXRpb24iLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX3NvcnRpbmdG
dW5jdGlvbnMudGltZWxpbmUgPSBXZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5SZXF1
ZXN0UHJvcGVydHlDb21wYXJhdG9yLmJpbmQobnVsbCwgInN0YXJ0VGltZSIsIGZhbHNlKTsKLSAg
ICAgICAgdGhpcy5fc29ydGluZ0Z1bmN0aW9ucy5zdGFydFRpbWUgPSBXZWJJbnNwZWN0b3IuTmV0
d29ya0RhdGFHcmlkTm9kZS5SZXF1ZXN0UHJvcGVydHlDb21wYXJhdG9yLmJpbmQobnVsbCwgInN0
YXJ0VGltZSIsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fc29ydGluZ0Z1bmN0aW9ucy5lbmRUaW1l
ID0gV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZE5vZGUuUmVxdWVzdFByb3BlcnR5Q29tcGFy
YXRvci5iaW5kKG51bGwsICJlbmRUaW1lIiwgZmFsc2UpOwotICAgICAgICB0aGlzLl9zb3J0aW5n
RnVuY3Rpb25zLnJlc3BvbnNlVGltZSA9IFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWROb2Rl
LlJlcXVlc3RQcm9wZXJ0eUNvbXBhcmF0b3IuYmluZChudWxsLCAicmVzcG9uc2VSZWNlaXZlZFRp
bWUiLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX3NvcnRpbmdGdW5jdGlvbnMuZHVyYXRpb24gPSBX
ZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5SZXF1ZXN0UHJvcGVydHlDb21wYXJhdG9y
LmJpbmQobnVsbCwgImR1cmF0aW9uIiwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuX3NvcnRpbmdGdW5j
dGlvbnMubGF0ZW5jeSA9IFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWROb2RlLlJlcXVlc3RQ
cm9wZXJ0eUNvbXBhcmF0b3IuYmluZChudWxsLCAibGF0ZW5jeSIsIHRydWUpOwotCi0gICAgICAg
IHZhciB0aW1lQ2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuTmV0d29ya1RyYW5zZmVyVGlt
ZUNhbGN1bGF0b3IoKTsKLSAgICAgICAgdmFyIGR1cmF0aW9uQ2FsY3VsYXRvciA9IG5ldyBXZWJJ
bnNwZWN0b3IuTmV0d29ya1RyYW5zZmVyRHVyYXRpb25DYWxjdWxhdG9yKCk7Ci0KLSAgICAgICAg
dGhpcy5fY2FsY3VsYXRvcnMgPSB7fTsKLSAgICAgICAgdGhpcy5fY2FsY3VsYXRvcnMudGltZWxp
bmUgPSB0aW1lQ2FsY3VsYXRvcjsKLSAgICAgICAgdGhpcy5fY2FsY3VsYXRvcnMuc3RhcnRUaW1l
ID0gdGltZUNhbGN1bGF0b3I7Ci0gICAgICAgIHRoaXMuX2NhbGN1bGF0b3JzLmVuZFRpbWUgPSB0
aW1lQ2FsY3VsYXRvcjsKLSAgICAgICAgdGhpcy5fY2FsY3VsYXRvcnMucmVzcG9uc2VUaW1lID0g
dGltZUNhbGN1bGF0b3I7Ci0gICAgICAgIHRoaXMuX2NhbGN1bGF0b3JzLmR1cmF0aW9uID0gZHVy
YXRpb25DYWxjdWxhdG9yOwotICAgICAgICB0aGlzLl9jYWxjdWxhdG9ycy5sYXRlbmN5ID0gZHVy
YXRpb25DYWxjdWxhdG9yOwotICAgIH0sCi0KLSAgICBfc29ydEl0ZW1zOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9yZW1vdmVBbGxOb2RlSGlnaGxpZ2h0cygpOwotICAgICAgICB2
YXIgY29sdW1uSWRlbnRpZmllciA9IHRoaXMuX2RhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVy
KCk7Ci0gICAgICAgIGlmIChjb2x1bW5JZGVudGlmaWVyID09PSAidGltZWxpbmUiKSB7Ci0gICAg
ICAgICAgICB0aGlzLl9zb3J0QnlUaW1lbGluZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHZhciBzb3J0aW5nRnVuY3Rpb24gPSB0aGlzLl9zb3J0aW5nRnVuY3Rp
b25zW2NvbHVtbklkZW50aWZpZXJdOwotICAgICAgICBpZiAoIXNvcnRpbmdGdW5jdGlvbikKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9kYXRhR3JpZC5zb3J0Tm9kZXMoc29y
dGluZ0Z1bmN0aW9uLCAhdGhpcy5fZGF0YUdyaWQuaXNTb3J0T3JkZXJBc2NlbmRpbmcoKSk7Ci0g
ICAgICAgIHRoaXMuX3RpbWVsaW5lU29ydFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggPSAwOwotICAg
ICAgICB0aGlzLl91cGRhdGVPZmZzY3JlZW5Sb3dzKCk7Ci0KLSAgICAgICAgdGhpcy5zZWFyY2hD
YW5jZWxlZCgpOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5ub3RpZmljYXRpb25zLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MuVXNlckFjdGlvbiwgewot
ICAgICAgICAgICAgYWN0aW9uOiBXZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MuVXNlckFjdGlvbk5h
bWVzLk5ldHdvcmtTb3J0LAotICAgICAgICAgICAgY29sdW1uOiBjb2x1bW5JZGVudGlmaWVyLAot
ICAgICAgICAgICAgc29ydE9yZGVyOiB0aGlzLl9kYXRhR3JpZC5zb3J0T3JkZXIoKQotICAgICAg
ICB9KTsKLSAgICB9LAotCi0gICAgX3NvcnRCeVRpbWVsaW5lOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9yZW1vdmVBbGxOb2RlSGlnaGxpZ2h0cygpOwotICAgICAgICB2YXIgc2Vs
ZWN0ZWRJbmRleCA9IHRoaXMuX3RpbWVsaW5lU29ydFNlbGVjdG9yLnNlbGVjdGVkSW5kZXg7Ci0g
ICAgICAgIGlmICghc2VsZWN0ZWRJbmRleCkKLSAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSAx
OyAvLyBTb3J0IGJ5IHN0YXJ0IHRpbWUgYnkgZGVmYXVsdC4KLSAgICAgICAgdmFyIHNlbGVjdGVk
T3B0aW9uID0gdGhpcy5fdGltZWxpbmVTb3J0U2VsZWN0b3Jbc2VsZWN0ZWRJbmRleF07Ci0gICAg
ICAgIHZhciB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLnZhbHVlOwotCi0gICAgICAgIHZhciBzb3J0
aW5nRnVuY3Rpb24gPSB0aGlzLl9zb3J0aW5nRnVuY3Rpb25zW3ZhbHVlXTsKLSAgICAgICAgdGhp
cy5fZGF0YUdyaWQuc29ydE5vZGVzKHNvcnRpbmdGdW5jdGlvbik7Ci0gICAgICAgIHRoaXMuY2Fs
Y3VsYXRvciA9IHRoaXMuX2NhbGN1bGF0b3JzW3ZhbHVlXTsKLSAgICAgICAgaWYgKHRoaXMuY2Fs
Y3VsYXRvci5zdGFydEF0WmVybykKLSAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5oaWRl
RXZlbnREaXZpZGVycygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl90aW1lbGlu
ZUdyaWQuc2hvd0V2ZW50RGl2aWRlcnMoKTsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQubWFya0Nv
bHVtbkFzU29ydGVkQnkoInRpbWVsaW5lIiwgV2ViSW5zcGVjdG9yLkRhdGFHcmlkLk9yZGVyLkFz
Y2VuZGluZyk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU9mZnNjcmVlblJvd3MoKTsKLSAgICB9LAot
Ci0gICAgX2NyZWF0ZVN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgZmlsdGVyQmFyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAg
ICAgICBmaWx0ZXJCYXJFbGVtZW50LmNsYXNzTmFtZSA9ICJzY29wZS1iYXIgc3RhdHVzLWJhci1p
dGVtIjsKLSAgICAgICAgZmlsdGVyQmFyRWxlbWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiVXNlICVzIENsaWNrIHRvIHNlbGVjdCBtdWx0aXBsZSB0eXBlcy4iLCBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKCIiLCBXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3RybE9yTWV0YSkpOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUKLSAgICAgICAgICogQHBhcmFtIHtzdHJp
bmd9IGxhYmVsCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJFbGVt
ZW50KHR5cGVOYW1lLCBsYWJlbCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGNhdGVnb3J5
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7Ci0gICAgICAgICAgICBjYXRl
Z29yeUVsZW1lbnQudHlwZU5hbWUgPSB0eXBlTmFtZTsKLSAgICAgICAgICAgIGNhdGVnb3J5RWxl
bWVudC5jbGFzc05hbWUgPSB0eXBlTmFtZTsKLSAgICAgICAgICAgIGNhdGVnb3J5RWxlbWVudC5j
cmVhdGVUZXh0Q2hpbGQobGFiZWwpOwotICAgICAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdXBkYXRlRmlsdGVyLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICAgICAgICAgIGZpbHRlckJhckVsZW1lbnQuYXBwZW5kQ2hpbGQoY2F0ZWdvcnlFbGVt
ZW50KTsKLQotICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5RWxlbWVudDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuX2ZpbHRlckFsbEVsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNh
bGwodGhpcywgImFsbCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWxsIikpOwotICAgICAgICBm
aWx0ZXJCYXJFbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAic2NvcGUtYmFyLWRpdmlkZXIiKTsK
LQotICAgICAgICBmb3IgKHZhciB0eXBlSWQgaW4gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMp
IHsKLSAgICAgICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXNbdHlw
ZUlkXTsKLSAgICAgICAgICAgIGNyZWF0ZUZpbHRlckVsZW1lbnQuY2FsbCh0aGlzLCB0eXBlLm5h
bWUoKSwgdHlwZS5jYXRlZ29yeVRpdGxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2Zp
bHRlckJhckVsZW1lbnQgPSBmaWx0ZXJCYXJFbGVtZW50OwotICAgICAgICB0aGlzLl9wcm9ncmVz
c0JhckNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICB0
aGlzLl9wcm9ncmVzc0JhckNvbnRhaW5lci5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtIjsK
LSAgICB9LAotCi0gICAgX2NyZWF0ZVN1bW1hcnlCYXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciB0Ym9keSA9IHRoaXMuX2RhdGFHcmlkLmRhdGFUYWJsZUJvZHk7Ci0gICAgICAgIHZh
ciB0Zm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmb290Iik7Ci0gICAgICAgIHZhciB0
ciA9IHRmb290LmNyZWF0ZUNoaWxkKCJ0ciIsICJyZXZlYWxlZCBuZXR3b3JrLXN1bW1hcnktYmFy
Iik7Ci0gICAgICAgIHZhciB0ZCA9IHRyLmNyZWF0ZUNoaWxkKCJ0ZCIpOwotICAgICAgICB0ZC5z
ZXRBdHRyaWJ1dGUoImNvbHNwYW4iLCA3KTsKLSAgICAgICAgdGJvZHkucGFyZW50Tm9kZS5pbnNl
cnRCZWZvcmUodGZvb3QsIHRib2R5KTsKLSAgICAgICAgdGhpcy5fc3VtbWFyeUJhckVsZW1lbnQg
PSB0ZDsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVN1bW1hcnlCYXI6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciByZXF1ZXN0c051bWJlciA9IHRoaXMuX3JlcXVlc3RzLmxlbmd0aDsKLQot
ICAgICAgICBpZiAoIXJlcXVlc3RzTnVtYmVyKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fc3Vt
bWFyeUJhckVsZW1lbnQuX2lzRGlzcGxheWluZ1dhcm5pbmcpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgdGhpcy5fc3VtbWFyeUJhckVsZW1lbnQuX2lzRGlzcGxheWluZ1dh
cm5pbmcgPSB0cnVlOwotCi0gICAgICAgICAgICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiaW1nIik7Ci0gICAgICAgICAgICBpbWcuc3JjID0gIkltYWdlcy93YXJuaW5nSWNvbi5w
bmciOwotICAgICAgICAgICAgdGhpcy5fc3VtbWFyeUJhckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4o
KTsKLSAgICAgICAgICAgIHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50LmFwcGVuZENoaWxkKGltZyk7
Ci0gICAgICAgICAgICB0aGlzLl9zdW1tYXJ5QmFyRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
Ik5vIHJlcXVlc3RzIGNhcHR1cmVkLiBSZWxvYWQgdGhlIHBhZ2UgdG8gc2VlIGRldGFpbGVkIGlu
Zm9ybWF0aW9uIG9uIHRoZSBuZXR3b3JrIGFjdGl2aXR5LiIpKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50Ll9p
c0Rpc3BsYXlpbmdXYXJuaW5nOwotCi0gICAgICAgIHZhciB0cmFuc2ZlclNpemUgPSAwOwotICAg
ICAgICB2YXIgc2VsZWN0ZWRSZXF1ZXN0c051bWJlciA9IDA7Ci0gICAgICAgIHZhciBzZWxlY3Rl
ZFRyYW5zZmVyU2l6ZSA9IDA7Ci0gICAgICAgIHZhciBiYXNlVGltZSA9IC0xOwotICAgICAgICB2
YXIgbWF4VGltZSA9IC0xOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlcXVl
c3RzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IHRoaXMuX3JlcXVl
c3RzW2ldOwotICAgICAgICAgICAgdmFyIHJlcXVlc3RUcmFuc2ZlclNpemUgPSAocmVxdWVzdC5j
YWNoZWQgfHwgIXJlcXVlc3QudHJhbnNmZXJTaXplKSA/IDAgOiByZXF1ZXN0LnRyYW5zZmVyU2l6
ZTsKLSAgICAgICAgICAgIHRyYW5zZmVyU2l6ZSArPSByZXF1ZXN0VHJhbnNmZXJTaXplOwotICAg
ICAgICAgICAgaWYgKCghdGhpcy5faGlkZGVuQ2F0ZWdvcmllc1siYWxsIl0gfHwgIXRoaXMuX2hp
ZGRlbkNhdGVnb3JpZXNbcmVxdWVzdC50eXBlLm5hbWUoKV0pICYmICF0aGlzLl9maWx0ZXJlZE91
dFJlcXVlc3RzLmdldChyZXF1ZXN0KSkgewotICAgICAgICAgICAgICAgIHNlbGVjdGVkUmVxdWVz
dHNOdW1iZXIrKzsKLSAgICAgICAgICAgICAgICBzZWxlY3RlZFRyYW5zZmVyU2l6ZSArPSByZXF1
ZXN0VHJhbnNmZXJTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlcXVlc3Qu
dXJsID09PSBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCkKLSAgICAgICAgICAgICAgICBi
YXNlVGltZSA9IHJlcXVlc3Quc3RhcnRUaW1lOwotICAgICAgICAgICAgaWYgKHJlcXVlc3QuZW5k
VGltZSA+IG1heFRpbWUpCi0gICAgICAgICAgICAgICAgbWF4VGltZSA9IHJlcXVlc3QuZW5kVGlt
ZTsKLSAgICAgICAgfQotICAgICAgICB2YXIgdGV4dCA9ICIiOwotICAgICAgICBpZiAoc2VsZWN0
ZWRSZXF1ZXN0c051bWJlciAhPT0gcmVxdWVzdHNOdW1iZXIpIHsKLSAgICAgICAgICAgIHRleHQg
Kz0gU3RyaW5nLnNwcmludGYoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCAvICVkIHJlcXVlc3Rz
IiksIHNlbGVjdGVkUmVxdWVzdHNOdW1iZXIsIHJlcXVlc3RzTnVtYmVyKTsKLSAgICAgICAgICAg
IHRleHQgKz0gIiAgXHUyNzU4ICAiICsgU3RyaW5nLnNwcmludGYoV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCIlcyAvICVzIHRyYW5zZmVycmVkIiksIE51bWJlci5ieXRlc1RvU3RyaW5nKHNlbGVjdGVk
VHJhbnNmZXJTaXplKSwgTnVtYmVyLmJ5dGVzVG9TdHJpbmcodHJhbnNmZXJTaXplKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZy5zcHJpbnRmKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiJWQgcmVxdWVzdHMiKSwgcmVxdWVzdHNOdW1iZXIpOwotICAgICAgICAg
ICAgdGV4dCArPSAiICBcdTI3NTggICIgKyBTdHJpbmcuc3ByaW50ZihXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIiVzIHRyYW5zZmVycmVkIiksIE51bWJlci5ieXRlc1RvU3RyaW5nKHRyYW5zZmVyU2l6
ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiYXNlVGltZSAhPT0gLTEgJiYgdGhpcy5fbWFp
blJlcXVlc3RMb2FkVGltZSAhPT0gLTEgJiYgdGhpcy5fbWFpblJlcXVlc3RET01Db250ZW50VGlt
ZSAhPT0gLTEgJiYgdGhpcy5fbWFpblJlcXVlc3RET01Db250ZW50VGltZSA+IGJhc2VUaW1lKSB7
Ci0gICAgICAgICAgICB0ZXh0ICs9ICIgIFx1Mjc1OCAgIiArIFN0cmluZy5zcHJpbnRmKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiJXMgKG9ubG9hZDogJXMsIERPTUNvbnRlbnRMb2FkZWQ6ICVzKSIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLnNlY29uZHNUb1N0cmluZyhtYXhUaW1l
IC0gYmFzZVRpbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLnNlY29uZHNUb1N0
cmluZyh0aGlzLl9tYWluUmVxdWVzdExvYWRUaW1lIC0gYmFzZVRpbWUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgTnVtYmVyLnNlY29uZHNUb1N0cmluZyh0aGlzLl9tYWluUmVxdWVzdERPTUNv
bnRlbnRUaW1lIC0gYmFzZVRpbWUpKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9zdW1tYXJ5
QmFyRWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7Ci0gICAgfSwKLQotICAgIF9zaG93Q2F0ZWdv
cnk6IGZ1bmN0aW9uKHR5cGVOYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGF0YUdyaWQuZWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJmaWx0ZXItIiArIHR5cGVOYW1lKTsKLSAgICAgICAgZGVsZXRl
IHRoaXMuX2hpZGRlbkNhdGVnb3JpZXNbdHlwZU5hbWVdOwotICAgIH0sCi0KLSAgICBfaGlkZUNh
dGVnb3J5OiBmdW5jdGlvbih0eXBlTmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RhdGFHcmlk
LmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZmlsdGVyLSIgKyB0eXBlTmFtZSk7Ci0gICAgICAg
IHRoaXMuX2hpZGRlbkNhdGVnb3JpZXNbdHlwZU5hbWVdID0gdHJ1ZTsKLSAgICB9LAotCi0gICAg
X3VwZGF0ZUZpbHRlcjogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlbW92ZUFs
bE5vZGVIaWdobGlnaHRzKCk7Ci0gICAgICAgIHZhciBpc01hYyA9IFdlYkluc3BlY3Rvci5pc01h
YygpOwotICAgICAgICB2YXIgc2VsZWN0TXVsdGlwbGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlz
TWFjICYmIGUubWV0YUtleSAmJiAhZS5jdHJsS2V5ICYmICFlLmFsdEtleSAmJiAhZS5zaGlmdEtl
eSkKLSAgICAgICAgICAgIHNlbGVjdE11bHRpcGxlID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFpc01h
YyAmJiBlLmN0cmxLZXkgJiYgIWUubWV0YUtleSAmJiAhZS5hbHRLZXkgJiYgIWUuc2hpZnRLZXkp
Ci0gICAgICAgICAgICBzZWxlY3RNdWx0aXBsZSA9IHRydWU7Ci0KLSAgICAgICAgdGhpcy5fZmls
dGVyKGUudGFyZ2V0LCBzZWxlY3RNdWx0aXBsZSk7Ci0gICAgICAgIHRoaXMuc2VhcmNoQ2FuY2Vs
ZWQoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU3VtbWFyeUJhcigpOwotICAgIH0sCi0KLSAgICBf
ZmlsdGVyOiBmdW5jdGlvbih0YXJnZXQsIHNlbGVjdE11bHRpcGxlKQotICAgIHsKLSAgICAgICAg
ZnVuY3Rpb24gdW5zZWxlY3RBbGwoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuX2ZpbHRlckJhckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuX2ZpbHRlckJhckVsZW1lbnQuY2hp
bGROb2Rlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLnR5cGVOYW1lKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZVN0
eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICAgICAgdGhpcy5faGlkZUNhdGVnb3J5
KGNoaWxkLnR5cGVOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0YXJnZXQgPT09IHRoaXMuX2ZpbHRlckFsbEVsZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICh0
YXJnZXQuaGFzU3R5bGVDbGFzcygic2VsZWN0ZWQiKSkgewotICAgICAgICAgICAgICAgIC8vIFdl
IGNhbid0IHVuc2VsZWN0IEFsbCwgc28gd2UgYnJlYWsgZWFybHkgaGVyZQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgQWxsIHdhc24n
dCBzZWxlY3RlZCwgYW5kIG5vdyBpcywgdW5zZWxlY3QgZXZlcnl0aGluZyBlbHNlLgotICAgICAg
ICAgICAgdW5zZWxlY3RBbGwuY2FsbCh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFNvbWV0aGluZyBvdGhlciB0aGFuIEFsbCBpcyBiZWluZyBzZWxlY3RlZCwgc28gd2Ug
d2FudCB0byB1bnNlbGVjdCBBbGwuCi0gICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyQWxsRWxl
bWVudC5oYXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
ZmlsdGVyQWxsRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotICAgICAgICAg
ICAgICAgIHRoaXMuX2hpZGVDYXRlZ29yeSgiYWxsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIXNlbGVjdE11bHRpcGxlKSB7Ci0gICAgICAgICAgICAvLyBJZiBt
dWx0aXBsZSBzZWxlY3Rpb24gaXMgb2ZmLCB3ZSB3YW50IHRvIHVuc2VsZWN0IGV2ZXJ5dGhpbmcg
ZWxzZQotICAgICAgICAgICAgLy8gYW5kIGp1c3Qgc2VsZWN0IG91cnNlbHZlcy4KLSAgICAgICAg
ICAgIHVuc2VsZWN0QWxsLmNhbGwodGhpcyk7Ci0KLSAgICAgICAgICAgIHRhcmdldC5hZGRTdHls
ZUNsYXNzKCJzZWxlY3RlZCIpOwotICAgICAgICAgICAgdGhpcy5fc2hvd0NhdGVnb3J5KHRhcmdl
dC50eXBlTmFtZSk7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVPZmZzY3JlZW5Sb3dzKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGFyZ2V0Lmhhc1N0
eWxlQ2xhc3MoInNlbGVjdGVkIikpIHsKLSAgICAgICAgICAgIC8vIElmIHNlbGVjdE11bHRpcGxl
IGlzIHR1cm5lZCBvbiwgYW5kIHdlIHdlcmUgc2VsZWN0ZWQsIHdlIGp1c3QKLSAgICAgICAgICAg
IC8vIHdhbnQgdG8gdW5zZWxlY3Qgb3Vyc2VsdmVzLgotICAgICAgICAgICAgdGFyZ2V0LnJlbW92
ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICB0aGlzLl9oaWRlQ2F0ZWdvcnko
dGFyZ2V0LnR5cGVOYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHNl
bGVjdE11bHRpcGxlIGlzIHR1cm5lZCBvbiwgYW5kIHdlIHdlcmVuJ3Qgc2VsZWN0ZWQsIHdlIGp1
c3QKLSAgICAgICAgICAgIC8vIHdhbnQgdG8gc2VsZWN0IG91cnNlbHZlcy4KLSAgICAgICAgICAg
IHRhcmdldC5hZGRTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotICAgICAgICAgICAgdGhpcy5fc2hv
d0NhdGVnb3J5KHRhcmdldC50eXBlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fdXBk
YXRlT2Zmc2NyZWVuUm93cygpOwotICAgIH0sCi0KLSAgICBfZGVmYXVsdFJlZnJlc2hEZWxheTog
NTAwLAotCi0gICAgX3NjaGVkdWxlUmVmcmVzaDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX25lZWRzUmVmcmVzaCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
aGlzLl9uZWVkc1JlZnJlc2ggPSB0cnVlOwotCi0gICAgICAgIGlmICh0aGlzLmlzU2hvd2luZygp
ICYmICF0aGlzLl9yZWZyZXNoVGltZW91dCkKLSAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hUaW1l
b3V0ID0gc2V0VGltZW91dCh0aGlzLnJlZnJlc2guYmluZCh0aGlzKSwgdGhpcy5fZGVmYXVsdFJl
ZnJlc2hEZWxheSk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVEaXZpZGVyc0lmTmVlZGVkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2RhdGFHcmlkKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB2YXIgdGltZWxpbmVDb2x1bW4gPSB0aGlzLl9kYXRhR3JpZC5jb2x1
bW5zLnRpbWVsaW5lOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2RhdGFHcmlk
LnJlc2l6ZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodGltZWxpbmVDb2x1bW4u
b3JkaW5hbCA9PT0gdGhpcy5fZGF0YUdyaWQucmVzaXplcnNbaV0ucmlnaHROZWlnaGJvcmluZ0Nv
bHVtbkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgLy8gUG9zaXRpb24gdGltbGluZSBncmlkIGxv
Y2F0aW9uLgotICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5lbGVtZW50LnN0eWxl
LmxlZnQgPSB0aGlzLl9kYXRhR3JpZC5yZXNpemVyc1tpXS5zdHlsZS5sZWZ0OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHByb2NlZWQgPSB0cnVlOwotICAgICAgICBp
ZiAoIXRoaXMuaXNTaG93aW5nKCkpIHsKLSAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlUmVmcmVz
aCgpOwotICAgICAgICAgICAgcHJvY2VlZCA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdGhpcy5jYWxjdWxhdG9yLnNldERpc3BsYXlXaW5kb3codGhpcy5fdGltZWxpbmVH
cmlkLmRpdmlkZXJzRWxlbWVudC5jbGllbnRXaWR0aCk7Ci0gICAgICAgICAgICBwcm9jZWVkID0g
dGhpcy5fdGltZWxpbmVHcmlkLnVwZGF0ZURpdmlkZXJzKHRoaXMuY2FsY3VsYXRvcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFwcm9jZWVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGlmICh0aGlzLmNhbGN1bGF0b3Iuc3RhcnRBdFplcm8gfHwgIXRoaXMuY2FsY3VsYXRvci5j
b21wdXRlUGVyY2VudGFnZUZyb21FdmVudFRpbWUpIHsKLSAgICAgICAgICAgIC8vIElmIG91ciBj
dXJyZW50IHNvcnRpbmcgbWV0aG9kIHN0YXJ0cyBhdCB6ZXJvLCB0aGF0IG1lYW5zIGl0IHNob3dz
IGFsbAotICAgICAgICAgICAgLy8gcmVxdWVzdHMgc3RhcnRpbmcgYXQgdGhlIHNhbWUgcG9pbnQs
IGFuZCBzbyBvbkxvYWQgZXZlbnQgYW5kIERPTUNvbnRlbnQKLSAgICAgICAgICAgIC8vIGV2ZW50
IGxpbmVzIHJlYWxseSB3b3VsZG4ndCBtYWtlIG11Y2ggc2Vuc2UgaGVyZSwgc28gZG9uJ3QgcmVu
ZGVyIHRoZW0uCi0gICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIGlmIHRoZSBjYWxjdWxhdG9y
IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcHV0ZVBlcmNlbnRhZ2VGcm9tRXZlbnRUaW1lCi0gICAgICAg
ICAgICAvLyBmdW5jdGlvbiBkZWZpbmVkLCB3ZSBhcmUgcHJvYmFibHkgc29ydGluZyBieSBzaXpl
LCBhbmQgZXZlbnQgdGltZXMgYXJlbid0IHJlbGV2YW50Ci0gICAgICAgICAgICAvLyBpbiB0aGlz
IGNhc2UuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl90
aW1lbGluZUdyaWQucmVtb3ZlRXZlbnREaXZpZGVycygpOwotICAgICAgICBpZiAodGhpcy5fbWFp
blJlcXVlc3RMb2FkVGltZSAhPT0gLTEpIHsKLSAgICAgICAgICAgIHZhciBwZXJjZW50ID0gdGhp
cy5jYWxjdWxhdG9yLmNvbXB1dGVQZXJjZW50YWdlRnJvbUV2ZW50VGltZSh0aGlzLl9tYWluUmVx
dWVzdExvYWRUaW1lKTsKLQotICAgICAgICAgICAgdmFyIGxvYWREaXZpZGVyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBsb2FkRGl2aWRlci5jbGFzc05hbWUg
PSAibmV0d29yay1ldmVudC1kaXZpZGVyIG5ldHdvcmstcmVkLWRpdmlkZXIiOwotCi0gICAgICAg
ICAgICB2YXIgbG9hZERpdmlkZXJQYWRkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgICAgICAgICBsb2FkRGl2aWRlclBhZGRpbmcuY2xhc3NOYW1lID0gIm5ldHdvcmst
ZXZlbnQtZGl2aWRlci1wYWRkaW5nIjsKLSAgICAgICAgICAgIGxvYWREaXZpZGVyUGFkZGluZy50
aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9hZCBldmVudCBmaXJlZCIpOwotICAgICAg
ICAgICAgbG9hZERpdmlkZXJQYWRkaW5nLmFwcGVuZENoaWxkKGxvYWREaXZpZGVyKTsKLSAgICAg
ICAgICAgIGxvYWREaXZpZGVyUGFkZGluZy5zdHlsZS5sZWZ0ID0gcGVyY2VudCArICIlIjsKLSAg
ICAgICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5hZGRFdmVudERpdmlkZXIobG9hZERpdmlkZXJQ
YWRkaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9tYWluUmVxdWVzdERPTUNv
bnRlbnRUaW1lICE9PSAtMSkgewotICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSB0aGlzLmNhbGN1
bGF0b3IuY29tcHV0ZVBlcmNlbnRhZ2VGcm9tRXZlbnRUaW1lKHRoaXMuX21haW5SZXF1ZXN0RE9N
Q29udGVudFRpbWUpOwotCi0gICAgICAgICAgICB2YXIgZG9tQ29udGVudERpdmlkZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIGRvbUNvbnRlbnREaXZpZGVy
LmNsYXNzTmFtZSA9ICJuZXR3b3JrLWV2ZW50LWRpdmlkZXIgbmV0d29yay1ibHVlLWRpdmlkZXIi
OwotCi0gICAgICAgICAgICB2YXIgZG9tQ29udGVudERpdmlkZXJQYWRkaW5nID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBkb21Db250ZW50RGl2aWRlclBhZGRp
bmcuY2xhc3NOYW1lID0gIm5ldHdvcmstZXZlbnQtZGl2aWRlci1wYWRkaW5nIjsKLSAgICAgICAg
ICAgIGRvbUNvbnRlbnREaXZpZGVyUGFkZGluZy50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiRE9NQ29udGVudCBldmVudCBmaXJlZCIpOwotICAgICAgICAgICAgZG9tQ29udGVudERpdmlk
ZXJQYWRkaW5nLmFwcGVuZENoaWxkKGRvbUNvbnRlbnREaXZpZGVyKTsKLSAgICAgICAgICAgIGRv
bUNvbnRlbnREaXZpZGVyUGFkZGluZy5zdHlsZS5sZWZ0ID0gcGVyY2VudCArICIlIjsKLSAgICAg
ICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5hZGRFdmVudERpdmlkZXIoZG9tQ29udGVudERpdmlk
ZXJQYWRkaW5nKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcmVmcmVzaElmTmVlZGVkOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbmVlZHNSZWZyZXNoKQotICAgICAg
ICAgICAgdGhpcy5yZWZyZXNoKCk7Ci0gICAgfSwKLQotICAgIF9pbnZhbGlkYXRlQWxsSXRlbXM6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVx
dWVzdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gdGhpcy5fcmVx
dWVzdHNbaV07Ci0gICAgICAgICAgICB0aGlzLl9zdGFsZVJlcXVlc3RzW3JlcXVlc3QucmVxdWVz
dElkXSA9IHJlcXVlc3Q7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0IGNhbGN1bGF0b3Io
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0b3I7Ci0gICAgfSwKLQotICAg
IHNldCBjYWxjdWxhdG9yKHgpCi0gICAgewotICAgICAgICBpZiAoIXggfHwgdGhpcy5fY2FsY3Vs
YXRvciA9PT0geCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9jYWxjdWxh
dG9yID0geDsKLSAgICAgICAgdGhpcy5fY2FsY3VsYXRvci5yZXNldCgpOwotCi0gICAgICAgIHRo
aXMuX2ludmFsaWRhdGVBbGxJdGVtcygpOwotICAgICAgICB0aGlzLnJlZnJlc2goKTsKLSAgICB9
LAotCi0gICAgX3JlcXVlc3RHcmlkTm9kZTogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0R3JpZE5vZGVzW3JlcXVlc3QuX19ncmlkTm9kZUlkXTsK
LSAgICB9LAotCi0gICAgX2NyZWF0ZVJlcXVlc3RHcmlkTm9kZTogZnVuY3Rpb24ocmVxdWVzdCkK
LSAgICB7Ci0gICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdy
aWROb2RlKHRoaXMsIHJlcXVlc3QpOwotICAgICAgICByZXF1ZXN0Ll9fZ3JpZE5vZGVJZCA9IHRo
aXMuX2xhc3RSZXF1ZXN0R3JpZE5vZGVJZCsrOwotICAgICAgICB0aGlzLl9yZXF1ZXN0R3JpZE5v
ZGVzW3JlcXVlc3QuX19ncmlkTm9kZUlkXSA9IG5vZGU7Ci0gICAgICAgIHJldHVybiBub2RlOwot
ICAgIH0sCi0KLSAgICBfY3JlYXRlU3RhdHVzYmFyQnV0dG9uczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fcHJlc2VydmVMb2dUb2dnbGUgPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1
c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByZXNlcnZlIExvZyB1cG9uIE5hdmln
YXRpb24iKSwgInJlY29yZC1wcm9maWxlLXN0YXR1cy1iYXItaXRlbSIpOwotICAgICAgICB0aGlz
Ll9wcmVzZXJ2ZUxvZ1RvZ2dsZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uUHJl
c2VydmVMb2dDbGlja2VkLCB0aGlzKTsKLQotICAgICAgICB0aGlzLl9jbGVhckJ1dHRvbiA9IG5l
dyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xl
YXIiKSwgImNsZWFyLXN0YXR1cy1iYXItaXRlbSIpOwotICAgICAgICB0aGlzLl9jbGVhckJ1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3Jlc2V0LCB0aGlzKTsKLQotICAgICAg
ICB0aGlzLl9sYXJnZXJSZXF1ZXN0c0J1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFy
QnV0dG9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiVXNlIHNtYWxsIHJlc291cmNlIHJvd3MuIiks
ICJuZXR3b3JrLWxhcmdlci1yZXNvdXJjZXMtc3RhdHVzLWJhci1pdGVtIik7Ci0gICAgICAgIHRo
aXMuX2xhcmdlclJlcXVlc3RzQnV0dG9uLnRvZ2dsZWQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
cmVzb3VyY2VzTGFyZ2VSb3dzLmdldCgpOwotICAgICAgICB0aGlzLl9sYXJnZXJSZXF1ZXN0c0J1
dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZUxhcmdlclJlcXVlc3Rz
LCB0aGlzKTsKLSAgICB9LAotCi0gICAgX29uTG9hZEV2ZW50RmlyZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblJlcXVlc3RMb2FkVGltZSA9IGV2ZW50LmRhdGEg
fHwgLTE7Ci0gICAgICAgIC8vIFNjaGVkdWxlIHJlZnJlc2ggdG8gdXBkYXRlIGJvdW5kYXJpZXMg
YW5kIGRyYXcgdGhlIG5ldyBsaW5lLgotICAgICAgICB0aGlzLl9zY2hlZHVsZVJlZnJlc2goKTsK
LSAgICB9LAotCi0gICAgX2RvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5SZXF1ZXN0RE9NQ29udGVudFRpbWUgPSBldmVu
dC5kYXRhIHx8IC0xOwotICAgICAgICAvLyBTY2hlZHVsZSByZWZyZXNoIHRvIHVwZGF0ZSBib3Vu
ZGFyaWVzIGFuZCBkcmF3IHRoZSBuZXcgbGluZS4KLSAgICAgICAgdGhpcy5fc2NoZWR1bGVSZWZy
ZXNoKCk7Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9yZWZyZXNoSWZOZWVkZWQoKTsKLSAgICB9LAotCi0gICAgd2lsbEhpZGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsK
LSAgICB9LAotCi0gICAgcmVmcmVzaDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
bmVlZHNSZWZyZXNoID0gZmFsc2U7Ci0gICAgICAgIGlmICh0aGlzLl9yZWZyZXNoVGltZW91dCkg
ewotICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlZnJlc2hUaW1lb3V0KTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9yZWZyZXNoVGltZW91dDsKLSAgICAgICAgfQotCi0gICAgICAg
IHRoaXMuX3JlbW92ZUFsbE5vZGVIaWdobGlnaHRzKCk7Ci0gICAgICAgIHZhciB3YXNTY3JvbGxl
ZFRvTGFzdFJvdyA9IHRoaXMuX2RhdGFHcmlkLmlzU2Nyb2xsZWRUb0xhc3RSb3coKTsKLSAgICAg
ICAgdmFyIGJvdW5kYXJpZXNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGlmICh0aGlzLmNhbGN1
bGF0b3IudXBkYXRlQm91bmRhcmllc0ZvckV2ZW50VGltZSkgewotICAgICAgICAgICAgYm91bmRh
cmllc0NoYW5nZWQgPSB0aGlzLmNhbGN1bGF0b3IudXBkYXRlQm91bmRhcmllc0ZvckV2ZW50VGlt
ZSh0aGlzLl9tYWluUmVxdWVzdExvYWRUaW1lKSB8fCBib3VuZGFyaWVzQ2hhbmdlZDsKLSAgICAg
ICAgICAgIGJvdW5kYXJpZXNDaGFuZ2VkID0gdGhpcy5jYWxjdWxhdG9yLnVwZGF0ZUJvdW5kYXJp
ZXNGb3JFdmVudFRpbWUodGhpcy5fbWFpblJlcXVlc3RET01Db250ZW50VGltZSkgfHwgYm91bmRh
cmllc0NoYW5nZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciByZXF1ZXN0SWQgaW4g
dGhpcy5fc3RhbGVSZXF1ZXN0cykgewotICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSB0aGlzLl9z
dGFsZVJlcXVlc3RzW3JlcXVlc3RJZF07Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX3Jl
cXVlc3RHcmlkTm9kZShyZXF1ZXN0KTsKLSAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAg
ICAgICAgIG5vZGUucmVmcmVzaFJlcXVlc3QoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSB0aGUgdGltZWxpbmUgdHJlZSBlbGVtZW50IGFuZCBncmFwaC4K
LSAgICAgICAgICAgICAgICBub2RlID0gdGhpcy5fY3JlYXRlUmVxdWVzdEdyaWROb2RlKHJlcXVl
c3QpOwotICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnJvb3ROb2RlKCkuYXBwZW5kQ2hp
bGQobm9kZSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5yZWZyZXNoUmVxdWVzdCgpOwotICAgICAg
ICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKG5vZGUpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAodGhpcy5jYWxjdWxhdG9yLnVwZGF0ZUJvdW5kYXJpZXMocmVxdWVzdCkpCi0g
ICAgICAgICAgICAgICAgYm91bmRhcmllc0NoYW5nZWQgPSB0cnVlOwotCi0gICAgICAgICAgICBp
ZiAoIW5vZGUuaXNGaWx0ZXJlZE91dCgpKQotICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhp
Z2hsaWdodElmTWF0Y2hlZChyZXF1ZXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3Vu
ZGFyaWVzQ2hhbmdlZCkgewotICAgICAgICAgICAgLy8gVGhlIGJvdW5kYXJpZXMgY2hhbmdlZCwg
c28gYWxsIGl0ZW0gZ3JhcGhzIGFyZSBzdGFsZS4KLSAgICAgICAgICAgIHRoaXMuX2ludmFsaWRh
dGVBbGxJdGVtcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgcmVxdWVzdElkIGlu
IHRoaXMuX3N0YWxlUmVxdWVzdHMpCi0gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0R3JpZE5vZGUo
dGhpcy5fc3RhbGVSZXF1ZXN0c1tyZXF1ZXN0SWRdKS5yZWZyZXNoR3JhcGgodGhpcy5jYWxjdWxh
dG9yKTsKLQotICAgICAgICB0aGlzLl9zdGFsZVJlcXVlc3RzID0ge307Ci0gICAgICAgIHRoaXMu
X3NvcnRJdGVtcygpOwotICAgICAgICB0aGlzLl91cGRhdGVTdW1tYXJ5QmFyKCk7Ci0gICAgICAg
IHRoaXMuX2RhdGFHcmlkLnVwZGF0ZVdpZHRocygpOwotICAgICAgICAvLyBGSVhNRTogZXZhbHVh
dGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIG1vdmluZyB0aGlzIGJlZm9yZSBhIGNhbGwgdG8gc29y
dEl0ZW1zKCkKLSAgICAgICAgaWYgKHdhc1Njcm9sbGVkVG9MYXN0Um93KQotICAgICAgICAgICAg
dGhpcy5fZGF0YUdyaWQuc2Nyb2xsVG9MYXN0Um93KCk7Ci0gICAgfSwKLQotICAgIF9vblByZXNl
cnZlTG9nQ2xpY2tlZDogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3ByZXNlcnZl
TG9nVG9nZ2xlLnRvZ2dsZWQgPSAhdGhpcy5fcHJlc2VydmVMb2dUb2dnbGUudG9nZ2xlZDsKLSAg
ICB9LAotCi0gICAgX3Jlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuTmV0d29ya0xvZ1ZpZXcuRXZlbnRUeXBl
cy5WaWV3Q2xlYXJlZCk7Ci0KLSAgICAgICAgdGhpcy5fY2xlYXJTZWFyY2hNYXRjaGVkTGlzdCgp
OwotICAgICAgICBpZiAodGhpcy5fcG9wb3ZlckhlbHBlcikKLSAgICAgICAgICAgIHRoaXMuX3Bv
cG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKLQotICAgICAgICBpZiAodGhpcy5fY2FsY3VsYXRv
cikKLSAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0b3IucmVzZXQoKTsKLQotICAgICAgICB0aGlz
Ll9yZXF1ZXN0cyA9IFtdOwotICAgICAgICB0aGlzLl9yZXF1ZXN0c0J5SWQgPSB7fTsKLSAgICAg
ICAgdGhpcy5fcmVxdWVzdHNCeVVSTCA9IHt9OwotICAgICAgICB0aGlzLl9zdGFsZVJlcXVlc3Rz
ID0ge307Ci0gICAgICAgIHRoaXMuX3JlcXVlc3RHcmlkTm9kZXMgPSB7fTsKLQotICAgICAgICBp
ZiAodGhpcy5fZGF0YUdyaWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnJvb3ROb2Rl
KCkucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpdmlkZXJzSWZO
ZWVkZWQoKTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN1bW1hcnlCYXIoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMuX21haW5SZXF1ZXN0TG9hZFRpbWUgPSAtMTsKLSAgICAgICAgdGhp
cy5fbWFpblJlcXVlc3RET01Db250ZW50VGltZSA9IC0xOwotICAgICAgICB0aGlzLl9saW5raWZp
ZXIucmVzZXQoKTsKLSAgICB9LAotCi0gICAgZ2V0IHJlcXVlc3RzKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9yZXF1ZXN0czsKLSAgICB9LAotCi0gICAgcmVxdWVzdEJ5SWQ6IGZ1bmN0
aW9uKGlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RzQnlJZFtpZF07Ci0g
ICAgfSwKLQotICAgIF9vblJlcXVlc3RTdGFydGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2FwcGVuZFJlcXVlc3QoZXZlbnQuZGF0YSk7Ci0gICAgfSwKLQotICAgIF9h
cHBlbmRSZXF1ZXN0OiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVx
dWVzdHMucHVzaChyZXF1ZXN0KTsKLQotICAgICAgICAvLyBJbiBjYXNlIG9mIHJlZGlyZWN0IHJl
cXVlc3QgaWQgaXMgcmVhc3NpZ25lZCB0byBhIHJlZGlyZWN0ZWQKLSAgICAgICAgLy8gcmVxdWVz
dCBhbmQgd2UgbmVlZCB0byB1cGRhdGUgX3JlcXVlc3RzQnlJZCBhbnMgc2VhcmNoIHJlc3VsdHMu
Ci0gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0c0J5SWRbcmVxdWVzdC5yZXF1ZXN0SWRdKSB7Ci0g
ICAgICAgICAgICB2YXIgb2xkUmVxdWVzdCA9IHJlcXVlc3QucmVkaXJlY3RzW3JlcXVlc3QucmVk
aXJlY3RzLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHNCeUlkW29sZFJl
cXVlc3QucmVxdWVzdElkXSA9IG9sZFJlcXVlc3Q7Ci0KLSAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZVNlYXJjaE1hdGNoZWRMaXN0QWZ0ZXJSZXF1ZXN0SWRDaGFuZ2VkKHJlcXVlc3QucmVxdWVzdElk
LCBvbGRSZXF1ZXN0LnJlcXVlc3RJZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fcmVxdWVz
dHNCeUlkW3JlcXVlc3QucmVxdWVzdElkXSA9IHJlcXVlc3Q7Ci0KLSAgICAgICAgdGhpcy5fcmVx
dWVzdHNCeVVSTFtyZXF1ZXN0LnVybF0gPSByZXF1ZXN0OwotCi0gICAgICAgIC8vIFB1bGwgYWxs
IHRoZSByZWRpcmVjdHMgb2YgdGhlIG1haW4gcmVxdWVzdCB1cG9uIGNvbW1pdCBsb2FkLgotICAg
ICAgICBpZiAocmVxdWVzdC5yZWRpcmVjdHMpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcmVxdWVzdC5yZWRpcmVjdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhp
cy5fcmVmcmVzaFJlcXVlc3QocmVxdWVzdC5yZWRpcmVjdHNbaV0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdGhpcy5fcmVmcmVzaFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9v
blJlcXVlc3RVcGRhdGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciByZXF1
ZXN0ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3R9ICovIChldmVudC5k
YXRhKTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSByZXF1
ZXN0Ci0gICAgICovCi0gICAgX3JlZnJlc2hSZXF1ZXN0OiBmdW5jdGlvbihyZXF1ZXN0KQotICAg
IHsKLSAgICAgICAgdGhpcy5fc3RhbGVSZXF1ZXN0c1tyZXF1ZXN0LnJlcXVlc3RJZF0gPSByZXF1
ZXN0OwotICAgICAgICB0aGlzLl9zY2hlZHVsZVJlZnJlc2goKTsKLSAgICB9LAotCi0gICAgY2xl
YXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9wcmVzZXJ2ZUxvZ1RvZ2ds
ZS50b2dnbGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9yZXNldCgpOwot
ICAgIH0sCi0KLSAgICBfbWFpbkZyYW1lTmF2aWdhdGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLl9wcmVzZXJ2ZUxvZ1RvZ2dsZS50b2dnbGVkKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBmcmFtZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9y
LlJlc291cmNlVHJlZUZyYW1lfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHZhciBsb2FkZXJJ
ZCA9IGZyYW1lLmxvYWRlcklkOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHByb3Zpc2lvbmFsIGxv
YWQgcmVxdWVzdHMuCi0gICAgICAgIHZhciByZXF1ZXN0c1RvUHJlc2VydmUgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZXF1ZXN0cy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIHJlcXVlc3QgPSB0aGlzLl9yZXF1ZXN0c1tpXTsKLSAgICAgICAgICAgIGlm
IChyZXF1ZXN0LmxvYWRlcklkID09PSBsb2FkZXJJZCkKLSAgICAgICAgICAgICAgICByZXF1ZXN0
c1RvUHJlc2VydmUucHVzaChyZXF1ZXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3Jl
c2V0KCk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSBwcmVzZXJ2ZWQgaXRlbXMuCi0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcmVxdWVzdHNUb1ByZXNlcnZlLmxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgdGhpcy5fYXBwZW5kUmVxdWVzdChyZXF1ZXN0c1RvUHJlc2VydmVbaV0pOwotICAgIH0s
Ci0KLSAgICBzd2l0Y2hUb0RldGFpbGVkVmlldzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9kYXRhR3JpZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRo
aXMuX2RhdGFHcmlkLnNlbGVjdGVkTm9kZSkKLSAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnNl
bGVjdGVkTm9kZS5zZWxlY3RlZCA9IGZhbHNlOwotCi0gICAgICAgIHRoaXMuZWxlbWVudC5yZW1v
dmVTdHlsZUNsYXNzKCJicmllZi1tb2RlIik7Ci0gICAgICAgIHRoaXMuX2RldGFpbGVkTW9kZSA9
IHRydWU7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMoKTsKLSAgICB9LAotCi0gICAgc3dp
dGNoVG9CcmllZlZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJicmllZi1tb2RlIik7Ci0gICAgICAgIHRoaXMuX3JlbW92ZUFsbE5vZGVI
aWdobGlnaHRzKCk7Ci0gICAgICAgIHRoaXMuX2RldGFpbGVkTW9kZSA9IGZhbHNlOwotICAgICAg
ICB0aGlzLl91cGRhdGVDb2x1bW5zKCk7Ci0gICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlk
ZVBvcG92ZXIoKTsKLSAgICB9LAotCi0gICAgX3RvZ2dsZUxhcmdlclJlcXVlc3RzOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucmVzb3VyY2VzTGFyZ2VS
b3dzLnNldCghV2ViSW5zcGVjdG9yLnNldHRpbmdzLnJlc291cmNlc0xhcmdlUm93cy5nZXQoKSk7
Ci0gICAgICAgIHRoaXMuX3NldExhcmdlclJlcXVlc3RzKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5y
ZXNvdXJjZXNMYXJnZVJvd3MuZ2V0KCkpOwotICAgIH0sCi0KLSAgICBfc2V0TGFyZ2VyUmVxdWVz
dHM6IGZ1bmN0aW9uKGVuYWJsZWQpCi0gICAgewotICAgICAgICB0aGlzLl9sYXJnZXJSZXF1ZXN0
c0J1dHRvbi50b2dnbGVkID0gZW5hYmxlZDsKLSAgICAgICAgaWYgKCFlbmFibGVkKSB7Ci0gICAg
ICAgICAgICB0aGlzLl9sYXJnZXJSZXF1ZXN0c0J1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiVXNlIGxhcmdlIHJlc291cmNlIHJvd3MuIik7Ci0gICAgICAgICAgICB0aGlzLl9k
YXRhR3JpZC5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNtYWxsIik7Ci0gICAgICAgICAgICB0aGlz
Ll90aW1lbGluZUdyaWQuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzbWFsbCIpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgdGhpcy5fbGFyZ2VyUmVxdWVzdHNCdXR0b24udGl0bGUgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlVzZSBzbWFsbCByZXNvdXJjZSByb3dzLiIpOwotICAgICAg
ICAgICAgdGhpcy5fZGF0YUdyaWQuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJzbWFsbCIpOwot
ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmVHcmlkLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygi
c21hbGwiKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuTmV0d29ya0xvZ1ZpZXcuRXZlbnRUeXBlcy5Sb3dTaXplQ2hhbmdlZCwg
eyBsYXJnZVJvd3M6IGVuYWJsZWQgfSk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU9mZnNjcmVlblJv
d3MoKTsKLSAgICB9LAotCi0gICAgX2dldFBvcG92ZXJBbmNob3I6IGZ1bmN0aW9uKGVsZW1lbnQp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2FsbG93UG9wb3ZlcikKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdmFyIGFuY2hvciA9IGVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcygibmV0d29yay1ncmFwaC1iYXIiKSB8fCBlbGVtZW50LmVuY2xvc2luZ05vZGVPclNl
bGZXaXRoQ2xhc3MoIm5ldHdvcmstZ3JhcGgtbGFiZWwiKTsKLSAgICAgICAgaWYgKGFuY2hvciAm
JiBhbmNob3IucGFyZW50RWxlbWVudC5yZXF1ZXN0ICYmIGFuY2hvci5wYXJlbnRFbGVtZW50LnJl
cXVlc3QudGltaW5nKQotICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjsKLSAgICAgICAgYW5jaG9y
ID0gZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJuZXR3b3JrLXNjcmlwdC1p
bml0aWF0ZWQiKTsKLSAgICAgICAgaWYgKGFuY2hvciAmJiBhbmNob3IucmVxdWVzdCAmJiBhbmNo
b3IucmVxdWVzdC5pbml0aWF0b3IpCi0gICAgICAgICAgICByZXR1cm4gYW5jaG9yOwotCi0gICAg
ICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1l
bnR9IGFuY2hvcgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBvcG92ZXJ9IHBvcG92ZXIK
LSAgICAgKi8KLSAgICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGFuY2hvciwgcG9wb3ZlcikKLSAg
ICB7Ci0gICAgICAgIHZhciBjb250ZW50OwotICAgICAgICBpZiAoYW5jaG9yLmhhc1N0eWxlQ2xh
c3MoIm5ldHdvcmstc2NyaXB0LWluaXRpYXRlZCIpKQotICAgICAgICAgICAgY29udGVudCA9IHRo
aXMuX2dlbmVyYXRlU2NyaXB0SW5pdGlhdGVkUG9wb3ZlckNvbnRlbnQoYW5jaG9yLnJlcXVlc3Qp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZW50ID0gV2ViSW5zcGVjdG9yLlJlcXVl
c3RUaW1pbmdWaWV3LmNyZWF0ZVRpbWluZ1RhYmxlKGFuY2hvci5wYXJlbnRFbGVtZW50LnJlcXVl
c3QpOwotICAgICAgICBwb3BvdmVyLnNob3coY29udGVudCwgYW5jaG9yKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSByZXF1
ZXN0Ci0gICAgICogQHJldHVybiB7IUVsZW1lbnR9Ci0gICAgICovCi0gICAgX2dlbmVyYXRlU2Ny
aXB0SW5pdGlhdGVkUG9wb3ZlckNvbnRlbnQ6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAg
ICAgICB2YXIgc3RhY2tUcmFjZSA9IHJlcXVlc3QuaW5pdGlhdG9yLnN0YWNrVHJhY2U7Ci0gICAg
ICAgIHZhciBmcmFtZXNUYWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIHN0YWNrRnJhbWUgPSBzdGFja1RyYWNlW2ldOwotICAgICAgICAgICAgdmFy
IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgICAgICAgICByb3cuY3Jl
YXRlQ2hpbGQoInRkIikudGV4dENvbnRlbnQgPSBzdGFja0ZyYW1lLmZ1bmN0aW9uTmFtZSA/IHN0
YWNrRnJhbWUuZnVuY3Rpb25OYW1lIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3Vz
IGZ1bmN0aW9uKSIpOwotICAgICAgICAgICAgcm93LmNyZWF0ZUNoaWxkKCJ0ZCIpLnRleHRDb250
ZW50ID0gIiBAICI7Ci0gICAgICAgICAgICByb3cuY3JlYXRlQ2hpbGQoInRkIikuYXBwZW5kQ2hp
bGQodGhpcy5fbGlua2lmaWVyLmxpbmtpZnlMb2NhdGlvbihzdGFja0ZyYW1lLnVybCwgc3RhY2tG
cmFtZS5saW5lTnVtYmVyIC0gMSwgMCkpOwotICAgICAgICAgICAgZnJhbWVzVGFibGUuYXBwZW5k
Q2hpbGQocm93KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZnJhbWVzVGFibGU7Ci0gICAg
fSwKLQotICAgIF91cGRhdGVDb2x1bW5zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
Y29sdW1uc1Zpc2liaWxpdHkgPSB0aGlzLl9jb3VsbW5zVmlzaWJpbGl0eVNldHRpbmcuZ2V0KCk7
Ci0gICAgICAgIHZhciBkZXRhaWxlZE1vZGUgPSAhIXRoaXMuX2RldGFpbGVkTW9kZTsKLSAgICAg
ICAgZm9yICh2YXIgY29sdW1uSWRlbnRpZmllciBpbiBjb2x1bW5zVmlzaWJpbGl0eSkgewotICAg
ICAgICAgICAgdmFyIHZpc2libGUgPSBkZXRhaWxlZE1vZGUgJiYgY29sdW1uc1Zpc2liaWxpdHlb
Y29sdW1uSWRlbnRpZmllcl07Ci0gICAgICAgICAgICB0aGlzLl9kYXRhR3JpZC5zZXRDb2x1bW5W
aXNpYmxlKGNvbHVtbklkZW50aWZpZXIsIHZpc2libGUpOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX2RhdGFHcmlkLnNldENvbHVtblZpc2libGUoInRpbWVsaW5lIiwgZGV0YWlsZWRNb2RlKTsK
LSAgICAgICAgdGhpcy5fZGF0YUdyaWQuYXBwbHlDb2x1bW5XZWlnaHRzKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5JZGVudGlmaWVyCi0gICAgICov
Ci0gICAgX3RvZ2dsZUNvbHVtblZpc2liaWxpdHk6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIp
Ci0gICAgewotICAgICAgICB2YXIgY29sdW1uc1Zpc2liaWxpdHkgPSB0aGlzLl9jb3VsbW5zVmlz
aWJpbGl0eVNldHRpbmcuZ2V0KCk7Ci0gICAgICAgIGNvbHVtbnNWaXNpYmlsaXR5W2NvbHVtbklk
ZW50aWZpZXJdID0gIWNvbHVtbnNWaXNpYmlsaXR5W2NvbHVtbklkZW50aWZpZXJdOwotICAgICAg
ICB0aGlzLl9jb3VsbW5zVmlzaWJpbGl0eVNldHRpbmcuc2V0KGNvbHVtbnNWaXNpYmlsaXR5KTsK
LQotICAgICAgICB0aGlzLl91cGRhdGVDb2x1bW5zKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4geyFBcnJheS48c3RyaW5nPn0KLSAgICAgKi8KLSAgICBfZ2V0Q29uZmlndXJh
YmxlQ29sdW1uSURzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY29uZmln
dXJhYmxlQ29sdW1uSURzKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYWJsZUNv
bHVtbklEczsKLQotICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuX2RhdGFHcmlkLmNvbHVtbnM7
Ci0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoaWQxLCBpZDIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBjb2x1bW5zW2lkMV0udGl0bGUuY29tcGFyZVRvKGNvbHVtbnNbaWQyXS50aXRs
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY29sdW1uSURzID0gT2JqZWN0LmtleXModGhp
cy5fY291bG1uc1Zpc2liaWxpdHlTZXR0aW5nLmdldCgpKTsKLSAgICAgICAgdGhpcy5fY29uZmln
dXJhYmxlQ29sdW1uSURzID0gY29sdW1uSURzLnNvcnQoY29tcGFyZSk7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9jb25maWd1cmFibGVDb2x1bW5JRHM7Ci0gICAgfSwKLQotICAgIF9jb250ZXh0TWVu
dTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcg
V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLQotICAgICAgICBpZiAodGhpcy5fZGV0
YWlsZWRNb2RlICYmIGV2ZW50LnRhcmdldC5pc1NlbGZPckRlc2NlbmRhbnQodGhpcy5fZGF0YUdy
aWQuaGVhZGVyVGFibGVCb2R5KSkgewotICAgICAgICAgICAgdmFyIGNvbHVtbnNWaXNpYmlsaXR5
ID0gdGhpcy5fY291bG1uc1Zpc2liaWxpdHlTZXR0aW5nLmdldCgpOwotICAgICAgICAgICAgdmFy
IGNvbHVtbklEcyA9IHRoaXMuX2dldENvbmZpZ3VyYWJsZUNvbHVtbklEcygpOwotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5JRHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgY29sdW1uSWRlbnRpZmllciA9IGNvbHVtbklEc1tpXTsKLSAgICAgICAgICAg
ICAgICB2YXIgY29sdW1uID0gdGhpcy5fZGF0YUdyaWQuY29sdW1uc1tjb2x1bW5JZGVudGlmaWVy
XTsKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2JveEl0ZW0oY29sdW1u
LnRpdGxlLCB0aGlzLl90b2dnbGVDb2x1bW5WaXNpYmlsaXR5LmJpbmQodGhpcywgY29sdW1uSWRl
bnRpZmllciksICEhY29sdW1uc1Zpc2liaWxpdHlbY29sdW1uSWRlbnRpZmllcl0pOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGdyaWROb2RlID0gdGhpcy5fZGF0YUdyaWQu
ZGF0YUdyaWROb2RlRnJvbU5vZGUoZXZlbnQudGFyZ2V0KTsKLSAgICAgICAgdmFyIHJlcXVlc3Qg
PSBncmlkTm9kZSAmJiBncmlkTm9kZS5fcmVxdWVzdDsKLQotICAgICAgICBpZiAocmVxdWVzdCkg
ewotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3Iub3Blbkxp
bmtFeHRlcm5hbGx5TGFiZWwoKSwgV2ViSW5zcGVjdG9yLm9wZW5SZXNvdXJjZS5iaW5kKFdlYklu
c3BlY3RvciwgcmVxdWVzdC51cmwsIGZhbHNlKSk7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5h
cHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2Vi
SW5zcGVjdG9yLmNvcHlMaW5rQWRkcmVzc0xhYmVsKCksIHRoaXMuX2NvcHlMb2NhdGlvbi5iaW5k
KHRoaXMsIHJlcXVlc3QpKTsKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlcXVlc3RIZWFkZXJz
VGV4dCkKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rv
ci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkNvcHkg
cmVxdWVzdCBoZWFkZXJzIiA6ICJDb3B5IFJlcXVlc3QgSGVhZGVycyIpLCB0aGlzLl9jb3B5UmVx
dWVzdEhlYWRlcnMuYmluZCh0aGlzLCByZXF1ZXN0KSk7Ci0gICAgICAgICAgICBpZiAocmVxdWVz
dC5yZXNwb25zZUhlYWRlcnNUZXh0KQotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51
VGl0bGVzKCkgPyAiQ29weSByZXNwb25zZSBoZWFkZXJzIiA6ICJDb3B5IFJlc3BvbnNlIEhlYWRl
cnMiKSwgdGhpcy5fY29weVJlc3BvbnNlSGVhZGVycy5iaW5kKHRoaXMsIHJlcXVlc3QpKTsKLSAg
ICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJD
b3B5IGFzIGNVUkwiKSwgdGhpcy5fY29weUN1cmxDb21tYW5kLmJpbmQodGhpcywgcmVxdWVzdCkp
OwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQ29weSBh
bGwgYXMgSEFSIiA6ICJDb3B5IEFsbCBhcyBIQVIiKSwgdGhpcy5fY29weUFsbC5iaW5kKHRoaXMp
KTsKLQotICAgICAgICBpZiAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNhblNhdmUoKSkgewotICAg
ICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNl
TG93ZXJDYXNlTWVudVRpdGxlcygpID8gIlNhdmUgYXMgSEFSIHdpdGggY29udGVudCIgOiAiU2F2
ZSBhcyBIQVIgd2l0aCBDb250ZW50IiksIHRoaXMuX2V4cG9ydEFsbC5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9jYW5DbGVhckJyb3dzZXJDYWNoZSB8fCB0aGlz
Ll9jYW5DbGVhckJyb3dzZXJDb29raWVzKQotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
U2VwYXJhdG9yKCk7Ci0gICAgICAgIGlmICh0aGlzLl9jYW5DbGVhckJyb3dzZXJDYWNoZSkKLSAg
ICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdl
Ykluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQ2xlYXIgYnJvd3NlciBjYWNo
ZSIgOiAiQ2xlYXIgQnJvd3NlciBDYWNoZSIpLCB0aGlzLl9jbGVhckJyb3dzZXJDYWNoZS5iaW5k
KHRoaXMpKTsKLSAgICAgICAgaWYgKHRoaXMuX2NhbkNsZWFyQnJvd3NlckNvb2tpZXMpCi0gICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJ
bnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkNsZWFyIGJyb3dzZXIgY29va2ll
cyIgOiAiQ2xlYXIgQnJvd3NlciBDb29raWVzIiksIHRoaXMuX2NsZWFyQnJvd3NlckNvb2tpZXMu
YmluZCh0aGlzKSk7Ci0KLQotICAgICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnR5cGUgPT09
IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlhIUikgewotICAgICAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVt
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVwbGF5IFhIUiIpLCB0aGlzLl9yZXBsYXlYSFIuYmlu
ZCh0aGlzLCByZXF1ZXN0LnJlcXVlc3RJZCkpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250ZXh0TWVudS5zaG93KCk7
Ci0gICAgfSwKLQotICAgIF9yZXBsYXlYSFI6IGZ1bmN0aW9uKHJlcXVlc3RJZCkKLSAgICB7Ci0g
ICAgICAgIE5ldHdvcmtBZ2VudC5yZXBsYXlYSFIocmVxdWVzdElkKTsKLSAgICB9LAotCi0gICAg
X2NvcHlBbGw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBoYXJBcmNoaXZlID0gewot
ICAgICAgICAgICAgbG9nOiAobmV3IFdlYkluc3BlY3Rvci5IQVJMb2codGhpcy5fcmVxdWVzdHMp
KS5idWlsZCgpCi0gICAgICAgIH07Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5jb3B5
VGV4dChKU09OLnN0cmluZ2lmeShoYXJBcmNoaXZlLCBudWxsLCAyKSk7Ci0gICAgfSwKLQotICAg
IF9jb3B5TG9jYXRpb246IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZEhvc3QuY29weVRleHQocmVxdWVzdC51cmwpOwotICAgIH0sCi0KLSAgICBfY29w
eVJlcXVlc3RIZWFkZXJzOiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHJlcXVlc3QucmVxdWVzdEhlYWRlcnNUZXh0KTsKLSAg
ICB9LAotCi0gICAgX2NvcHlSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAg
ewotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQocmVxdWVzdC5yZXNwb25z
ZUhlYWRlcnNUZXh0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuTmV0d29ya1JlcXVlc3R9IHJlcXVlc3QKLSAgICAgKi8KLSAgICBfY29weUN1cmxDb21t
YW5kOiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNvcHlUZXh0KHRoaXMuX2dlbmVyYXRlQ3VybENvbW1hbmQocmVxdWVzdCkpOwotICAgIH0s
Ci0KLSAgICBfZXhwb3J0QWxsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZmlsZW5h
bWUgPSBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZURvbWFpbiArICIuaGFyIjsKLSAgICAgICAg
dmFyIHN0cmVhbSA9IG5ldyBXZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbSgpOwotICAgICAg
ICBzdHJlYW0ub3BlbihmaWxlbmFtZSwgb3BlbkNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgICAg
ICBmdW5jdGlvbiBvcGVuQ2FsbGJhY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcHJv
Z3Jlc3NJbmRpY2F0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2dyZXNzSW5kaWNhdG9yKCk7Ci0g
ICAgICAgICAgICB0aGlzLl9wcm9ncmVzc0JhckNvbnRhaW5lci5hcHBlbmRDaGlsZChwcm9ncmVz
c0luZGljYXRvci5lbGVtZW50KTsKLSAgICAgICAgICAgIHZhciBoYXJXcml0ZXIgPSBuZXcgV2Vi
SW5zcGVjdG9yLkhBUldyaXRlcigpOwotICAgICAgICAgICAgaGFyV3JpdGVyLndyaXRlKHN0cmVh
bSwgdGhpcy5fcmVxdWVzdHMsIHByb2dyZXNzSW5kaWNhdG9yKTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfY2xlYXJCcm93c2VyQ2FjaGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
IChjb25maXJtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRv
IGNsZWFyIGJyb3dzZXIgY2FjaGU/IikpKQotICAgICAgICAgICAgTmV0d29ya0FnZW50LmNsZWFy
QnJvd3NlckNhY2hlKCk7Ci0gICAgfSwKLQotICAgIF9jbGVhckJyb3dzZXJDb29raWVzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAoY29uZmlybShXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbGVhciBicm93c2VyIGNvb2tpZXM/IikpKQotICAg
ICAgICAgICAgTmV0d29ya0FnZW50LmNsZWFyQnJvd3NlckNvb2tpZXMoKTsKLSAgICB9LAotCi0g
ICAgX3VwZGF0ZU9mZnNjcmVlblJvd3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBk
YXRhVGFibGVCb2R5ID0gdGhpcy5fZGF0YUdyaWQuZGF0YVRhYmxlQm9keTsKLSAgICAgICAgdmFy
IHJvd3MgPSBkYXRhVGFibGVCb2R5LmNoaWxkcmVuOwotICAgICAgICB2YXIgcmVjb3Jkc0NvdW50
ID0gcm93cy5sZW5ndGg7Ci0gICAgICAgIGlmIChyZWNvcmRzQ291bnQgPCAyKQotICAgICAgICAg
ICAgcmV0dXJuOyAgLy8gRmlsbGVyIHJvdyBvbmx5LgotCi0gICAgICAgIHZhciB2aXNpYmxlVG9w
ID0gdGhpcy5fZGF0YUdyaWQuc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcDsKLSAgICAgICAgdmFy
IHZpc2libGVCb3R0b20gPSB2aXNpYmxlVG9wICsgdGhpcy5fZGF0YUdyaWQuc2Nyb2xsQ29udGFp
bmVyLm9mZnNldEhlaWdodDsKLQotICAgICAgICB2YXIgcm93SGVpZ2h0ID0gMDsKLQotICAgICAg
ICAvLyBGaWxsZXIgaXMgYXQgcmVjb3Jkc0NvdW50IC0gMS4KLSAgICAgICAgdmFyIHVuZmlsdGVy
ZWRSb3dJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjb3Jkc0NvdW50
IC0gMTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcm93ID0gcm93c1tpXTsKLQotICAgICAgICAg
ICAgdmFyIGRhdGFHcmlkTm9kZSA9IHRoaXMuX2RhdGFHcmlkLmRhdGFHcmlkTm9kZUZyb21Ob2Rl
KHJvdyk7Ci0gICAgICAgICAgICBpZiAoZGF0YUdyaWROb2RlLmlzRmlsdGVyZWRPdXQoKSkgewot
ICAgICAgICAgICAgICAgIHJvdy5yZW1vdmVTdHlsZUNsYXNzKCJvZmZzY3JlZW4iKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFy
b3dIZWlnaHQpCi0gICAgICAgICAgICAgICAgcm93SGVpZ2h0ID0gcm93Lm9mZnNldEhlaWdodDsK
LQotICAgICAgICAgICAgdmFyIHJvd0lzVmlzaWJsZSA9IHVuZmlsdGVyZWRSb3dJbmRleCAqIHJv
d0hlaWdodCA8IHZpc2libGVCb3R0b20gJiYgKHVuZmlsdGVyZWRSb3dJbmRleCArIDEpICogcm93
SGVpZ2h0ID4gdmlzaWJsZVRvcDsKLSAgICAgICAgICAgIGlmIChyb3dJc1Zpc2libGUgIT09IHJv
dy5yb3dJc1Zpc2libGUpIHsKLSAgICAgICAgICAgICAgICByb3cuZW5hYmxlU3R5bGVDbGFzcygi
b2Zmc2NyZWVuIiwgIXJvd0lzVmlzaWJsZSk7Ci0gICAgICAgICAgICAgICAgcm93LnJvd0lzVmlz
aWJsZSA9IHJvd0lzVmlzaWJsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuZmlsdGVy
ZWRSb3dJbmRleCsrOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9tYXRjaFJlcXVlc3Q6IGZ1
bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlZ0V4cCkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICBpZiAoIXJlcXVlc3QubmFtZSgpLm1h
dGNoKHRoaXMuX3NlYXJjaFJlZ0V4cCkgJiYgIXJlcXVlc3QucGF0aCgpLm1hdGNoKHRoaXMuX3Nl
YXJjaFJlZ0V4cCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgaWYgKHJlcXVl
c3QucmVxdWVzdElkIGluIHRoaXMuX21hdGNoZWRSZXF1ZXN0c01hcCkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9tYXRjaGVkUmVxdWVzdHNNYXBbcmVxdWVzdC5yZXF1ZXN0SWRdOwotCi0gICAg
ICAgIHZhciBtYXRjaGVkUmVxdWVzdEluZGV4ID0gdGhpcy5fbWF0Y2hlZFJlcXVlc3RzLmxlbmd0
aDsKLSAgICAgICAgdGhpcy5fbWF0Y2hlZFJlcXVlc3RzTWFwW3JlcXVlc3QucmVxdWVzdElkXSA9
IG1hdGNoZWRSZXF1ZXN0SW5kZXg7Ci0gICAgICAgIHRoaXMuX21hdGNoZWRSZXF1ZXN0cy5wdXNo
KHJlcXVlc3QucmVxdWVzdElkKTsKLQotICAgICAgICByZXR1cm4gbWF0Y2hlZFJlcXVlc3RJbmRl
eDsKLSAgICB9LAotCi0gICAgX2NsZWFyU2VhcmNoTWF0Y2hlZExpc3Q6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zZWFyY2hSZWdFeHA7Ci0gICAgICAgIHRoaXMuX21h
dGNoZWRSZXF1ZXN0cyA9IFtdOwotICAgICAgICB0aGlzLl9tYXRjaGVkUmVxdWVzdHNNYXAgPSB7
fTsKLSAgICAgICAgdGhpcy5fcmVtb3ZlQWxsSGlnaGxpZ2h0cygpOwotICAgIH0sCi0KLSAgICBf
dXBkYXRlU2VhcmNoTWF0Y2hlZExpc3RBZnRlclJlcXVlc3RJZENoYW5nZWQ6IGZ1bmN0aW9uKG9s
ZFJlcXVlc3RJZCwgbmV3UmVxdWVzdElkKQotICAgIHsKLSAgICAgICAgdmFyIHJlcXVlc3RJbmRl
eCA9IHRoaXMuX21hdGNoZWRSZXF1ZXN0c01hcFtvbGRSZXF1ZXN0SWRdOwotICAgICAgICBpZiAo
cmVxdWVzdEluZGV4KSB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWF0Y2hlZFJlcXVlc3Rz
TWFwW29sZFJlcXVlc3RJZF07Ci0gICAgICAgICAgICB0aGlzLl9tYXRjaGVkUmVxdWVzdHNNYXBb
bmV3UmVxdWVzdElkXSA9IHJlcXVlc3RJbmRleDsKLSAgICAgICAgICAgIHRoaXMuX21hdGNoZWRS
ZXF1ZXN0c1tyZXF1ZXN0SW5kZXhdID0gbmV3UmVxdWVzdElkOwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIF91cGRhdGVIaWdobGlnaHRJZk1hdGNoZWQ6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAg
ewotICAgICAgICB2YXIgbWF0Y2hlZFJlcXVlc3RJbmRleCA9IHRoaXMuX21hdGNoUmVxdWVzdChy
ZXF1ZXN0KTsKLSAgICAgICAgaWYgKG1hdGNoZWRSZXF1ZXN0SW5kZXggPT09IC0xKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5OZXR3b3JrTG9nVmlldy5FdmVudFR5cGVzLlNlYXJjaENvdW50VXBkYXRlZCwg
dGhpcy5fbWF0Y2hlZFJlcXVlc3RzLmxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRNYXRjaGVkUmVxdWVzdEluZGV4ICE9PSAtMSAmJiB0aGlzLl9jdXJyZW50TWF0Y2hlZFJlcXVl
c3RJbmRleCAhPT0gbWF0Y2hlZFJlcXVlc3RJbmRleCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB0aGlzLl9oaWdobGlnaHROdGhNYXRjaGVkUmVxdWVzdEZvclNlYXJjaChtYXRjaGVk
UmVxdWVzdEluZGV4LCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVBbGxIaWdobGlnaHRz
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2hp
Z2hsaWdodGVkU3Vic3RyaW5nQ2hhbmdlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5yZXZlcnREb21DaGFuZ2VzKHRoaXMuX2hpZ2hsaWdodGVkU3Vic3RyaW5nQ2hhbmdl
c1tpXSk7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkU3Vic3RyaW5nQ2hhbmdlcyA9IFtdOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVx
dWVzdH0gcmVxdWVzdAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV2ZWFsCi0gICAgICogQHBh
cmFtIHtSZWdFeHA9fSByZWdFeHAKLSAgICAgKi8KLSAgICBfaGlnaGxpZ2h0TWF0Y2hlZFJlcXVl
c3Q6IGZ1bmN0aW9uKHJlcXVlc3QsIHJldmVhbCwgcmVnRXhwKQotICAgIHsKLSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLl9yZXF1ZXN0R3JpZE5vZGUocmVxdWVzdCk7Ci0gICAgICAgIGlmICghbm9k
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbmFtZU1hdGNoZWQgPSByZXF1
ZXN0Lm5hbWUoKS5tYXRjaChyZWdFeHApOwotICAgICAgICB2YXIgcGF0aE1hdGNoZWQgPSByZXF1
ZXN0LnBhdGgoKS5tYXRjaChyZWdFeHApOwotICAgICAgICBpZiAoIW5hbWVNYXRjaGVkICYmIHBh
dGhNYXRjaGVkICYmICF0aGlzLl9sYXJnZXJSZXF1ZXN0c0J1dHRvbi50b2dnbGVkKQotICAgICAg
ICAgICAgdGhpcy5fdG9nZ2xlTGFyZ2VyUmVxdWVzdHMoKTsKLSAgICAgICAgdmFyIGhpZ2hsaWdo
dGVkU3Vic3RyaW5nQ2hhbmdlcyA9IG5vZGUuX2hpZ2hsaWdodE1hdGNoZWRTdWJzdHJpbmcocmVn
RXhwKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRTdWJzdHJpbmdDaGFuZ2VzLnB1c2goaGln
aGxpZ2h0ZWRTdWJzdHJpbmdDaGFuZ2VzKTsKLSAgICAgICAgaWYgKHJldmVhbCkKLSAgICAgICAg
ICAgIG5vZGUucmV2ZWFsKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBtYXRjaGVkUmVxdWVzdEluZGV4Ci0gICAgICogQHBhcmFtIHtib29sZWFufSByZXZlYWwK
LSAgICAgKi8KLSAgICBfaGlnaGxpZ2h0TnRoTWF0Y2hlZFJlcXVlc3RGb3JTZWFyY2g6IGZ1bmN0
aW9uKG1hdGNoZWRSZXF1ZXN0SW5kZXgsIHJldmVhbCkKLSAgICB7Ci0gICAgICAgIHZhciByZXF1
ZXN0ID0gdGhpcy5yZXF1ZXN0QnlJZCh0aGlzLl9tYXRjaGVkUmVxdWVzdHNbbWF0Y2hlZFJlcXVl
c3RJbmRleF0pOwotICAgICAgICBpZiAoIXJlcXVlc3QpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHRoaXMuX3JlbW92ZUFsbEhpZ2hsaWdodHMoKTsKLSAgICAgICAgdGhpcy5faGlnaGxp
Z2h0TWF0Y2hlZFJlcXVlc3QocmVxdWVzdCwgcmV2ZWFsLCB0aGlzLl9zZWFyY2hSZWdFeHApOwot
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX3JlcXVlc3RHcmlkTm9kZShyZXF1ZXN0KTsKLSAgICAg
ICAgaWYgKG5vZGUpCi0gICAgICAgICAgICB0aGlzLl9jdXJyZW50TWF0Y2hlZFJlcXVlc3RJbmRl
eCA9IG1hdGNoZWRSZXF1ZXN0SW5kZXg7Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3LkV2ZW50VHlwZXMuU2VhcmNoSW5k
ZXhVcGRhdGVkLCB0aGlzLl9jdXJyZW50TWF0Y2hlZFJlcXVlc3RJbmRleCk7Ci0gICAgfSwKLQot
ICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHNlYXJjaFF1ZXJ5KQotICAgIHsKLSAgICAgICAg
dmFyIG5ld01hdGNoZWRSZXF1ZXN0SW5kZXggPSAwOwotICAgICAgICB2YXIgY3VycmVudE1hdGNo
ZWRSZXF1ZXN0SWQ7Ci0gICAgICAgIGlmICh0aGlzLl9jdXJyZW50TWF0Y2hlZFJlcXVlc3RJbmRl
eCAhPT0gLTEpCi0gICAgICAgICAgICBjdXJyZW50TWF0Y2hlZFJlcXVlc3RJZCA9IHRoaXMuX21h
dGNoZWRSZXF1ZXN0c1t0aGlzLl9jdXJyZW50TWF0Y2hlZFJlcXVlc3RJbmRleF07Ci0KLSAgICAg
ICAgdGhpcy5fY2xlYXJTZWFyY2hNYXRjaGVkTGlzdCgpOwotICAgICAgICB0aGlzLl9zZWFyY2hS
ZWdFeHAgPSBjcmVhdGVQbGFpblRleHRTZWFyY2hSZWdleChzZWFyY2hRdWVyeSwgImkiKTsKLQot
ICAgICAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMuX2RhdGFHcmlkLmRhdGFUYWJsZUJvZHkuY2hp
bGROb2RlczsKLSAgICAgICAgdmFyIHJlcXVlc3ROb2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGNoaWxkTm9kZXMsIDAsIGNoaWxkTm9kZXMubGVuZ3RoIC0gMSk7IC8vIGRyb3AgdGhl
IGZpbGxlciByb3cuCi0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1ZXN0Tm9kZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBkYXRhR3JpZE5vZGUgPSB0aGlzLl9kYXRh
R3JpZC5kYXRhR3JpZE5vZGVGcm9tTm9kZShyZXF1ZXN0Tm9kZXNbaV0pOwotICAgICAgICAgICAg
aWYgKGRhdGFHcmlkTm9kZS5pc0ZpbHRlcmVkT3V0KCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5fbWF0Y2hSZXF1ZXN0KGRhdGFHcmlkTm9kZS5fcmVx
dWVzdCkgIT09IC0xICYmIGRhdGFHcmlkTm9kZS5fcmVxdWVzdC5yZXF1ZXN0SWQgPT09IGN1cnJl
bnRNYXRjaGVkUmVxdWVzdElkKQotICAgICAgICAgICAgICAgIG5ld01hdGNoZWRSZXF1ZXN0SW5k
ZXggPSB0aGlzLl9tYXRjaGVkUmVxdWVzdHMubGVuZ3RoIC0gMTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5OZXR3b3JrTG9n
Vmlldy5FdmVudFR5cGVzLlNlYXJjaENvdW50VXBkYXRlZCwgdGhpcy5fbWF0Y2hlZFJlcXVlc3Rz
Lmxlbmd0aCk7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodE50aE1hdGNoZWRSZXF1ZXN0Rm9yU2Vh
cmNoKG5ld01hdGNoZWRSZXF1ZXN0SW5kZXgsIGZhbHNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZE5vZGV9IG5vZGUKLSAg
ICAgKi8KLSAgICBfYXBwbHlGaWx0ZXI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgdmFyIGZp
bHRlciA9IHRoaXMuX2ZpbHRlclJlZ0V4cDsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSBub2RlLl9y
ZXF1ZXN0OwotICAgICAgICBpZiAoIWZpbHRlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKGZpbHRlci50ZXN0KHJlcXVlc3QubmFtZSgpKSB8fCBmaWx0ZXIudGVzdChyZXF1ZXN0
LnBhdGgoKSkpCi0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRNYXRjaGVkUmVxdWVzdChyZXF1
ZXN0LCBmYWxzZSwgZmlsdGVyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlLmVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygiZmlsdGVyZWQtb3V0Iik7Ci0gICAgICAgICAgICB0aGlzLl9m
aWx0ZXJlZE91dFJlcXVlc3RzLnB1dChyZXF1ZXN0LCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKi8KLSAgICBw
ZXJmb3JtRmlsdGVyOiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlbW92
ZUFsbEhpZ2hsaWdodHMoKTsKLSAgICAgICAgdGhpcy5fZmlsdGVyZWRPdXRSZXF1ZXN0cy5jbGVh
cigpOwotICAgICAgICBkZWxldGUgdGhpcy5fZmlsdGVyUmVnRXhwOwotICAgICAgICBpZiAocXVl
cnkpCi0gICAgICAgICAgICB0aGlzLl9maWx0ZXJSZWdFeHAgPSBjcmVhdGVQbGFpblRleHRTZWFy
Y2hSZWdleChxdWVyeSwgImkiKTsKLQotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9kYXRhR3Jp
ZC5yb290Tm9kZSgpLmNoaWxkcmVuOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBub2Rlc1tpXS5lbGVtZW50LnJlbW92ZVN0eWxl
Q2xhc3MoImZpbHRlcmVkLW91dCIpOwotICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIobm9k
ZXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVN1bW1hcnlCYXIoKTsKLSAg
ICAgICAgdGhpcy5fdXBkYXRlT2Zmc2NyZWVuUm93cygpOwotICAgIH0sCi0gICAgCi0gICAganVt
cFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fbWF0Y2hlZFJlcXVlc3RzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgdGhpcy5faGlnaGxpZ2h0TnRoTWF0Y2hlZFJlcXVlc3RGb3JTZWFyY2goKHRoaXMuX2N1cnJl
bnRNYXRjaGVkUmVxdWVzdEluZGV4ICsgdGhpcy5fbWF0Y2hlZFJlcXVlc3RzLmxlbmd0aCAtIDEp
ICUgdGhpcy5fbWF0Y2hlZFJlcXVlc3RzLmxlbmd0aCwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIGp1
bXBUb05leHRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fbWF0Y2hlZFJlcXVlc3RzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dGhpcy5faGlnaGxpZ2h0TnRoTWF0Y2hlZFJlcXVlc3RGb3JTZWFyY2goKHRoaXMuX2N1cnJlbnRN
YXRjaGVkUmVxdWVzdEluZGV4ICsgMSkgJSB0aGlzLl9tYXRjaGVkUmVxdWVzdHMubGVuZ3RoLCB0
cnVlKTsKLSAgICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2NsZWFyU2VhcmNoTWF0Y2hlZExpc3QoKTsKLSAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3LkV2ZW50VHlw
ZXMuU2VhcmNoQ291bnRVcGRhdGVkLCAwKTsKLSAgICB9LAotCi0gICAgcmV2ZWFsQW5kSGlnaGxp
Z2h0UmVxdWVzdDogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlbW92
ZUFsbE5vZGVIaWdobGlnaHRzKCk7Ci0KLSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9yZXF1ZXN0
R3JpZE5vZGUocmVxdWVzdCk7Ci0gICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICB0aGlz
Ll9kYXRhR3JpZC5lbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgICAgICBub2RlLnJldmVhbCgpOwot
ICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0Tm9kZShub2RlKTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfcmVtb3ZlQWxsTm9kZUhpZ2hsaWdodHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9oaWdobGlnaHRlZE5vZGUpIHsKLSAgICAgICAgICAgIHRoaXMuX2hpZ2hs
aWdodGVkTm9kZS5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZ2hsaWdodGVkLXJvdyIpOwot
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVkTm9kZTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBfaGlnaGxpZ2h0Tm9kZTogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAg
IG5vZGUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWdobGlnaHRlZC1yb3ciKTsKLSAgICAgICAg
dGhpcy5faGlnaGxpZ2h0ZWROb2RlID0gbm9kZTsKLSAgICB9LAotCi0gICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBfZ2VuZXJhdGVDdXJsQ29tbWFuZDogZnVuY3Rpb24o
cmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHZhciBjb21tYW5kID0gWyJjdXJsIl07Ci0gICAgICAg
IHZhciBpZ25vcmVkSGVhZGVycyA9IHt9OwotCi0gICAgICAgIGZ1bmN0aW9uIGVzY2FwZShzdHIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAiXCIiICsgc3RyLnJlcGxhY2UoL1xcL2cs
ICJcXFxcIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wiL2csICJc
XFwiIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wkL2csICJcXCQi
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXG4vZywgIlxcXG4iKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXGAvZywgIlxcXGAiKSArICJc
IiI7Ci0gICAgICAgIH0KLSAgICAgICAgY29tbWFuZC5wdXNoKGVzY2FwZShyZXF1ZXN0LnVybCkp
OwotCi0gICAgICAgIHZhciBpbmZlcnJlZE1ldGhvZCA9ICJHRVQiOwotICAgICAgICB2YXIgZGF0
YSA9IFtdOwotICAgICAgICB2YXIgcmVxdWVzdENvbnRlbnRUeXBlID0gcmVxdWVzdC5yZXF1ZXN0
Q29udGVudFR5cGUoKTsKLSAgICAgICAgaWYgKHJlcXVlc3RDb250ZW50VHlwZSAmJiByZXF1ZXN0
Q29udGVudFR5cGUuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk
IikgJiYgcmVxdWVzdC5yZXF1ZXN0Rm9ybURhdGEpIHsKLSAgICAgICAgICAgZGF0YS5wdXNoKCIt
LWRhdGEiKTsKLSAgICAgICAgICAgZGF0YS5wdXNoKGVzY2FwZShyZXF1ZXN0LnJlcXVlc3RGb3Jt
RGF0YSkpOwotICAgICAgICAgICBpZ25vcmVkSGVhZGVyc1siQ29udGVudC1MZW5ndGgiXSA9IHRy
dWU7Ci0gICAgICAgICAgIGluZmVycmVkTWV0aG9kID0gIlBPU1QiOwotICAgICAgICB9IGVsc2Ug
aWYgKHJlcXVlc3QucmVxdWVzdEZvcm1EYXRhKSB7Ci0gICAgICAgICAgIGRhdGEucHVzaCgiLS1k
YXRhLWJpbmFyeSIpOwotICAgICAgICAgICBkYXRhLnB1c2goZXNjYXBlKHJlcXVlc3QucmVxdWVz
dEZvcm1EYXRhKSk7Ci0gICAgICAgICAgIGlnbm9yZWRIZWFkZXJzWyJDb250ZW50LUxlbmd0aCJd
ID0gdHJ1ZTsKLSAgICAgICAgICAgaW5mZXJyZWRNZXRob2QgPSAiUE9TVCI7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAocmVxdWVzdC5yZXF1ZXN0TWV0aG9kICE9PSBpbmZlcnJlZE1ldGhvZCkg
ewotICAgICAgICAgICAgY29tbWFuZC5wdXNoKCItWCIpOwotICAgICAgICAgICAgY29tbWFuZC5w
dXNoKHJlcXVlc3QucmVxdWVzdE1ldGhvZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJlcXVlc3QucmVxdWVzdEhlYWRlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgIHZhciBoZWFkZXIgPSByZXF1ZXN0LnJlcXVlc3RIZWFkZXJzW2ldOwotICAgICAgICAg
ICAgaWYgKGhlYWRlci5uYW1lIGluIGlnbm9yZWRIZWFkZXJzKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgY29tbWFuZC5wdXNoKCItSCIpOwotICAgICAgICAgICAgY29t
bWFuZC5wdXNoKGVzY2FwZShoZWFkZXIubmFtZSArICI6ICIgKyBoZWFkZXIudmFsdWUpKTsKLSAg
ICAgICAgfQotICAgICAgICBjb21tYW5kID0gY29tbWFuZC5jb25jYXQoZGF0YSk7Ci0gICAgICAg
IHJldHVybiBjb21tYW5kLmpvaW4oIiAiKTsKLSAgICB9LCAKLQotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLQotV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dW
aWV3LkV2ZW50VHlwZXMgPSB7Ci0gICAgVmlld0NsZWFyZWQ6ICJWaWV3Q2xlYXJlZCIsCi0gICAg
Um93U2l6ZUNoYW5nZWQ6ICJSb3dTaXplQ2hhbmdlZCIsCi0gICAgUmVxdWVzdFNlbGVjdGVkOiAi
UmVxdWVzdFNlbGVjdGVkIiwKLSAgICBTZWFyY2hDb3VudFVwZGF0ZWQ6ICJTZWFyY2hDb3VudFVw
ZGF0ZWQiLAotICAgIFNlYXJjaEluZGV4VXBkYXRlZDogIlNlYXJjaEluZGV4VXBkYXRlZCIKLX07
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlBhbmVs
fQotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudS5Qcm92aWRlcn0KLSAq
LwotV2ViSW5zcGVjdG9yLk5ldHdvcmtQYW5lbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuUGFuZWwuY2FsbCh0aGlzLCAibmV0d29yayIpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1
aXJlZENTUygibmV0d29ya1BhbmVsLmNzcyIpOwotICAgIHRoaXMuX2luamVjdFN0eWxlcygpOwot
Ci0gICAgdGhpcy5jcmVhdGVTaWRlYmFyVmlldygpOwotICAgIHRoaXMuc3BsaXRWaWV3LmhpZGVN
YWluRWxlbWVudCgpOwotCi0gICAgdmFyIGRlZmF1bHRDb2x1bW5zVmlzaWJpbGl0eSA9IFdlYklu
c3BlY3Rvci5OZXR3b3JrTG9nVmlldy5fZGVmYXVsdENvbHVtbnNWaXNpdmlsaXR5OwotICAgIHZh
ciBuZXR3b3JrTG9nQ29sdW1uc1Zpc2liaWxpdHlTZXR0aW5nID0gV2ViSW5zcGVjdG9yLnNldHRp
bmdzLmNyZWF0ZVNldHRpbmcoIm5ldHdvcmtMb2dDb2x1bW5zVmlzaWJpbGl0eSIsIGRlZmF1bHRD
b2x1bW5zVmlzaWJpbGl0eSk7Ci0gICAgdmFyIHNhdmVkQ29sdW1uc1Zpc2liaWxpdHkgPSBuZXR3
b3JrTG9nQ29sdW1uc1Zpc2liaWxpdHlTZXR0aW5nLmdldCgpOwotICAgIHZhciBjb2x1bW5zVmlz
aWJpbGl0eSA9IHt9OwotICAgIGZvciAodmFyIGNvbHVtbklkIGluIGRlZmF1bHRDb2x1bW5zVmlz
aWJpbGl0eSkKLSAgICAgICAgY29sdW1uc1Zpc2liaWxpdHlbY29sdW1uSWRdID0gc2F2ZWRDb2x1
bW5zVmlzaWJpbGl0eS5oYXNPd25Qcm9wZXJ0eShjb2x1bW5JZCkgPyBzYXZlZENvbHVtbnNWaXNp
YmlsaXR5W2NvbHVtbklkXSA6IGRlZmF1bHRDb2x1bW5zVmlzaWJpbGl0eVtjb2x1bW5JZF07Ci0g
ICAgbmV0d29ya0xvZ0NvbHVtbnNWaXNpYmlsaXR5U2V0dGluZy5zZXQoY29sdW1uc1Zpc2liaWxp
dHkpOwotCi0gICAgdGhpcy5fbmV0d29ya0xvZ1ZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLk5ldHdv
cmtMb2dWaWV3KG5ldHdvcmtMb2dDb2x1bW5zVmlzaWJpbGl0eVNldHRpbmcpOwotICAgIHRoaXMu
X25ldHdvcmtMb2dWaWV3LnNob3codGhpcy5zaWRlYmFyRWxlbWVudCk7Ci0KLSAgICB0aGlzLl92
aWV3c0NvbnRhaW5lckVsZW1lbnQgPSB0aGlzLnNwbGl0Vmlldy5tYWluRWxlbWVudDsKLSAgICB0
aGlzLl92aWV3c0NvbnRhaW5lckVsZW1lbnQuaWQgPSAibmV0d29yay12aWV3cyI7Ci0gICAgdGhp
cy5fdmlld3NDb250YWluZXJFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgIGlm
ICghdGhpcy5fbmV0d29ya0xvZ1ZpZXcudXNlTGFyZ2VSb3dzKQotICAgICAgICB0aGlzLl92aWV3
c0NvbnRhaW5lckVsZW1lbnQuYWRkU3R5bGVDbGFzcygic21hbGwiKTsKLQotICAgIHRoaXMuX25l
dHdvcmtMb2dWaWV3LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3
LkV2ZW50VHlwZXMuVmlld0NsZWFyZWQsIHRoaXMuX29uVmlld0NsZWFyZWQsIHRoaXMpOwotICAg
IHRoaXMuX25ldHdvcmtMb2dWaWV3LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5ldHdv
cmtMb2dWaWV3LkV2ZW50VHlwZXMuUm93U2l6ZUNoYW5nZWQsIHRoaXMuX29uUm93U2l6ZUNoYW5n
ZWQsIHRoaXMpOwotICAgIHRoaXMuX25ldHdvcmtMb2dWaWV3LmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3LkV2ZW50VHlwZXMuUmVxdWVzdFNlbGVjdGVkLCB0aGlz
Ll9vblJlcXVlc3RTZWxlY3RlZCwgdGhpcyk7Ci0gICAgdGhpcy5fbmV0d29ya0xvZ1ZpZXcuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTmV0d29ya0xvZ1ZpZXcuRXZlbnRUeXBlcy5TZWFy
Y2hDb3VudFVwZGF0ZWQsIHRoaXMuX29uU2VhcmNoQ291bnRVcGRhdGVkLCB0aGlzKTsKLSAgICB0
aGlzLl9uZXR3b3JrTG9nVmlldy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3Jr
TG9nVmlldy5FdmVudFR5cGVzLlNlYXJjaEluZGV4VXBkYXRlZCwgdGhpcy5fb25TZWFyY2hJbmRl
eFVwZGF0ZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fY2xvc2VCdXR0b25FbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci0gICAgdGhpcy5fY2xvc2VCdXR0b25FbGVtZW50
LmlkID0gIm5ldHdvcmstY2xvc2UtYnV0dG9uIjsKLSAgICB0aGlzLl9jbG9zZUJ1dHRvbkVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90b2dnbGVHcmlkTW9kZS5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5fdmlld3NDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxk
KHRoaXMuX2Nsb3NlQnV0dG9uRWxlbWVudCk7Ci0KLSAgICBmdW5jdGlvbiB2aWV3R2V0dGVyKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVWaWV3OwotICAgIH0KLSAgICBXZWJJ
bnNwZWN0b3IuR29Ub0xpbmVEaWFsb2cuaW5zdGFsbCh0aGlzLCB2aWV3R2V0dGVyLmJpbmQodGhp
cykpOwotfQotCi1XZWJJbnNwZWN0b3IuTmV0d29ya1BhbmVsLnByb3RvdHlwZSA9IHsKLSAgICBz
dGF0dXNCYXJJdGVtczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25l
dHdvcmtMb2dWaWV3LnN0YXR1c0Jhckl0ZW1zKCk7Ci0gICAgfSwKLQotICAgIGVsZW1lbnRzVG9S
ZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fbmV0d29ya0xvZ1ZpZXcuZWxlbWVudHNUb1Jlc3RvcmVTY3JvbGxQb3NpdGlvbnNG
b3IoKTsKLSAgICB9LAotCi0gICAgLy8gRklYTUU6IG9ubHkgdXNlZCBieSB0aGUgbGF5b3V0IHRl
c3RzLCBzaG91bGQgbm90IGJlIGV4cG9zZWQuCi0gICAgX3Jlc2V0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLl9uZXR3b3JrTG9nVmlldy5fcmVzZXQoKTsKLSAgICB9LAotCi0gICAg
aGFuZGxlU2hvcnRjdXQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X3ZpZXdpbmdSZXF1ZXN0TW9kZSAmJiBldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlKSB7Ci0gICAgICAgICAgICB0aGlzLl90b2dnbGVH
cmlkTW9kZSgpOwotICAgICAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90
eXBlLmhhbmRsZVNob3J0Y3V0LmNhbGwodGhpcywgZXZlbnQpOwotICAgIH0sCi0KLSAgICB3YXNT
aG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3Rv
dHlwZS53YXNTaG93bi5jYWxsKHRoaXMpOwotICAgIH0sCi0KLSAgICBnZXQgcmVxdWVzdHMoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25ldHdvcmtMb2dWaWV3LnJlcXVlc3RzOwotICAg
IH0sCi0KLSAgICByZXF1ZXN0QnlJZDogZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fbmV0d29ya0xvZ1ZpZXcucmVxdWVzdEJ5SWQoaWQpOwotICAgIH0sCi0KLSAgICBf
cmVxdWVzdEJ5QW5jaG9yOiBmdW5jdGlvbihhbmNob3IpCi0gICAgewotICAgICAgICByZXR1cm4g
YW5jaG9yLnJlcXVlc3RJZCA/IHRoaXMucmVxdWVzdEJ5SWQoYW5jaG9yLnJlcXVlc3RJZCkgOiB0
aGlzLl9uZXR3b3JrTG9nVmlldy5fcmVxdWVzdHNCeVVSTFthbmNob3IuaHJlZl07Ci0gICAgfSwK
LQotICAgIGNhblNob3dBbmNob3JMb2NhdGlvbjogZnVuY3Rpb24oYW5jaG9yKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEhdGhpcy5fcmVxdWVzdEJ5QW5jaG9yKGFuY2hvcik7Ci0gICAgfSwKLQot
ICAgIHNob3dBbmNob3JMb2NhdGlvbjogZnVuY3Rpb24oYW5jaG9yKQotICAgIHsKLSAgICAgICAg
dmFyIHJlcXVlc3QgPSB0aGlzLl9yZXF1ZXN0QnlBbmNob3IoYW5jaG9yKTsKLSAgICAgICAgdGhp
cy5yZXZlYWxBbmRIaWdobGlnaHRSZXF1ZXN0KHJlcXVlc3QpCi0gICAgfSwKLQotICAgIHJldmVh
bEFuZEhpZ2hsaWdodFJlcXVlc3Q6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAgICAgICB0
aGlzLl90b2dnbGVHcmlkTW9kZSgpOwotICAgICAgICBpZiAocmVxdWVzdCkKLSAgICAgICAgICAg
IHRoaXMuX25ldHdvcmtMb2dWaWV3LnJldmVhbEFuZEhpZ2hsaWdodFJlcXVlc3QocmVxdWVzdCk7
Ci0gICAgfSwKLQotICAgIF9vblZpZXdDbGVhcmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2Nsb3NlVmlzaWJsZVJlcXVlc3QoKTsKLSAgICAgICAgdGhpcy5fdG9nZ2xl
R3JpZE1vZGUoKTsKLSAgICAgICAgdGhpcy5fdmlld3NDb250YWluZXJFbGVtZW50LnJlbW92ZUNo
aWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX3ZpZXdzQ29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLl9jbG9zZUJ1dHRvbkVsZW1lbnQpOwotICAgIH0sCi0KLSAgICBfb25Sb3dTaXplQ2hh
bmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl92aWV3c0NvbnRhaW5l
ckVsZW1lbnQuZW5hYmxlU3R5bGVDbGFzcygic21hbGwiLCAhZXZlbnQuZGF0YS5sYXJnZVJvd3Mp
OwotICAgIH0sCi0KLSAgICBfb25TZWFyY2hDb3VudFVwZGF0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNo
TWF0Y2hlc0NvdW50KGV2ZW50LmRhdGEsIHRoaXMpOwotICAgIH0sCi0KLSAgICBfb25TZWFyY2hJ
bmRleFVwZGF0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LnNlYXJjaENvbnRyb2xsZXIudXBkYXRlQ3VycmVudE1hdGNoSW5kZXgoZXZlbnQuZGF0YSwgdGhp
cyk7Ci0gICAgfSwKLQotICAgIF9vblJlcXVlc3RTZWxlY3RlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB0aGlzLl9zaG93UmVxdWVzdChldmVudC5kYXRhKTsKLSAgICB9LAotCi0g
ICAgX3Nob3dSZXF1ZXN0OiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKCFy
ZXF1ZXN0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3RvZ2dsZVZpZXdp
bmdSZXF1ZXN0TW9kZSgpOwotCi0gICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3KSB7Ci0gICAg
ICAgICAgICB0aGlzLnZpc2libGVWaWV3LmRldGFjaCgpOwotICAgICAgICAgICAgZGVsZXRlIHRo
aXMudmlzaWJsZVZpZXc7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdmlldyA9IG5ldyBXZWJJ
bnNwZWN0b3IuTmV0d29ya0l0ZW1WaWV3KHJlcXVlc3QpOwotICAgICAgICB2aWV3LnNob3codGhp
cy5fdmlld3NDb250YWluZXJFbGVtZW50KTsKLSAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHZp
ZXc7Ci0gICAgfSwKLQotICAgIF9jbG9zZVZpc2libGVSZXF1ZXN0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidmlld2luZy1yZXNvdXJj
ZSIpOwotCi0gICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3KSB7Ci0gICAgICAgICAgICB0aGlz
LnZpc2libGVWaWV3LmRldGFjaCgpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMudmlzaWJsZVZp
ZXc7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3RvZ2dsZUdyaWRNb2RlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fdmlld2luZ1JlcXVlc3RNb2RlKSB7Ci0gICAgICAg
ICAgICB0aGlzLl92aWV3aW5nUmVxdWVzdE1vZGUgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJ2aWV3aW5nLXJlc291cmNlIik7Ci0gICAgICAgICAg
ICB0aGlzLnNwbGl0Vmlldy5oaWRlTWFpbkVsZW1lbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHRoaXMuX25ldHdvcmtMb2dWaWV3LnN3aXRjaFRvRGV0YWlsZWRWaWV3KCk7Ci0gICAgICAgIHRo
aXMuX25ldHdvcmtMb2dWaWV3LmFsbG93UG9wb3ZlciA9IHRydWU7Ci0gICAgICAgIHRoaXMuX25l
dHdvcmtMb2dWaWV3Ll9hbGxvd1JlcXVlc3RTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICB9LAotCi0g
ICAgX3RvZ2dsZVZpZXdpbmdSZXF1ZXN0TW9kZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX3ZpZXdpbmdSZXF1ZXN0TW9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgdGhpcy5fdmlld2luZ1JlcXVlc3RNb2RlID0gdHJ1ZTsKLQotICAgICAgICB0aGlzLmVsZW1l
bnQuYWRkU3R5bGVDbGFzcygidmlld2luZy1yZXNvdXJjZSIpOwotICAgICAgICB0aGlzLnNwbGl0
Vmlldy5zaG93TWFpbkVsZW1lbnQoKTsKLSAgICAgICAgdGhpcy5fbmV0d29ya0xvZ1ZpZXcuYWxs
b3dQb3BvdmVyID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX25ldHdvcmtMb2dWaWV3Ll9hbGxvd1Jl
cXVlc3RTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICB0aGlzLl9uZXR3b3JrTG9nVmlldy5zd2l0
Y2hUb0JyaWVmVmlldygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gc2VhcmNoUXVlcnkKLSAgICAgKi8KLSAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihzZWFy
Y2hRdWVyeSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX25ldHdvcmtMb2dWaWV3LnBlcmZvcm1TZWFy
Y2goc2VhcmNoUXVlcnkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIGNhbkZpbHRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBx
dWVyeQotICAgICAqLyAgICAKLSAgICBwZXJmb3JtRmlsdGVyOiBmdW5jdGlvbihxdWVyeSkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX25ldHdvcmtMb2dWaWV3LnBlcmZvcm1GaWx0ZXIocXVlcnkpOwot
ICAgIH0sCi0KLSAgICBqdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fbmV0d29ya0xvZ1ZpZXcuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1
bHQoKTsKLSAgICB9LAotCi0gICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fbmV0d29ya0xvZ1ZpZXcuanVtcFRvTmV4dFNlYXJjaFJlc3Vs
dCgpOwotICAgIH0sCi0KLSAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fbmV0d29ya0xvZ1ZpZXcuc2VhcmNoQ2FuY2VsZWQoKTsKLSAgICB9LAotCi0g
ICAgLyoqIAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51fSBjb250ZXh0
TWVudQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgKi8KLSAgICBhcHBlbmRB
cHBsaWNhYmxlSXRlbXM6IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0TWVudSwgdGFyZ2V0KQotICAg
IHsKLSAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLk5ldHdvcmtS
ZXF1ZXN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZp
ZXcgJiYgdGhpcy52aXNpYmxlVmlldy5pc1Nob3dpbmcoKSAmJiB0aGlzLnZpc2libGVWaWV3LnJl
cXVlc3QoKSA9PT0gdGFyZ2V0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZ1bmN0
aW9uIHJldmVhbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0
b3JWaWV3LnNldEN1cnJlbnRQYW5lbCh0aGlzKTsKLSAgICAgICAgICAgIHRoaXMucmV2ZWFsQW5k
SGlnaGxpZ2h0UmVxdWVzdCgvKiogQHR5cGUge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0g
Ki8gKHRhcmdldCkpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVz
KCkgPyAiUmV2ZWFsIGluIE5ldHdvcmsgcGFuZWwiIDogIlJldmVhbCBpbiBOZXR3b3JrIFBhbmVs
IiksIHJldmVhbC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX2luamVjdFN0eWxlczogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3R5bGUiKTsKLSAgICAgICAgdmFyIHJ1bGVzID0gW107Ci0KLSAgICAgICAgdmFyIGNvbHVt
bnMgPSBXZWJJbnNwZWN0b3IuTmV0d29ya0xvZ1ZpZXcuX2RlZmF1bHRDb2x1bW5zVmlzaXZpbGl0
eTsKLQotICAgICAgICB2YXIgaGlkZVNlbGVjdG9ycyA9IFtdOwotICAgICAgICB2YXIgYmdTZWxl
Y3RvcnMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgY29sdW1uSWQgaW4gY29sdW1ucykgewotICAg
ICAgICAgICAgaGlkZVNlbGVjdG9ycy5wdXNoKCIjbmV0d29yay1jb250YWluZXIgLmhpZGUtIiAr
IGNvbHVtbklkICsgIi1jb2x1bW4gLiIgKyBjb2x1bW5JZCArICItY29sdW1uIik7Ci0gICAgICAg
ICAgICBiZ1NlbGVjdG9ycy5wdXNoKCIubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgdGQuIiAr
IGNvbHVtbklkICsgIi1jb2x1bW4iKTsKLSAgICAgICAgfQotICAgICAgICBydWxlcy5wdXNoKGhp
ZGVTZWxlY3RvcnMuam9pbigiLCAiKSArICJ7Ym9yZGVyLXJpZ2h0OiAwIG5vbmUgdHJhbnNwYXJl
bnQ7fSIpOwotICAgICAgICBydWxlcy5wdXNoKGJnU2VsZWN0b3JzLmpvaW4oIiwgIikgKyAie2Jh
Y2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNyk7fSIpOwotCi0gICAgICAgIHZhciBm
aWx0ZXJTZWxlY3RvcnMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgdHlwZUlkIGluIFdlYkluc3Bl
Y3Rvci5yZXNvdXJjZVR5cGVzKSB7Ci0gICAgICAgICAgICB2YXIgdHlwZU5hbWUgPSBXZWJJbnNw
ZWN0b3IucmVzb3VyY2VUeXBlc1t0eXBlSWRdLm5hbWUoKTsKLSAgICAgICAgICAgIGZpbHRlclNl
bGVjdG9ycy5wdXNoKCIubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQuZmlsdGVyLSIgKyB0eXBl
TmFtZSArICIgdGFibGUuZGF0YSB0ci5yZXZlYWxlZC5uZXR3b3JrLXR5cGUtIiArIHR5cGVOYW1l
ICsgIjpub3QoLmZpbHRlcmVkLW91dCkiKTsKLSAgICAgICAgfQotICAgICAgICBmaWx0ZXJTZWxl
Y3RvcnMucHVzaCgiLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkLmZpbHRlci1hbGwgdGFibGUu
ZGF0YSB0ci5yZXZlYWxlZC5uZXR3b3JrLWl0ZW06bm90KC5maWx0ZXJlZC1vdXQpIik7Ci0gICAg
ICAgIHJ1bGVzLnB1c2goZmlsdGVyU2VsZWN0b3JzLmpvaW4oIiwgIikgKyAie2Rpc3BsYXk6IHRh
YmxlLXJvdzt9Iik7Ci0KLSAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBydWxlcy5qb2luKCJc
biIpOwotICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKLSAgICB9LAot
Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlCi19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lR3Jp
ZC5DYWxjdWxhdG9yfQotICovCi1XZWJJbnNwZWN0b3IuTmV0d29ya0Jhc2VDYWxjdWxhdG9yID0g
ZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuTmV0d29ya0Jhc2VDYWxjdWxhdG9yLnBy
b3RvdHlwZSA9IHsKLSAgICBjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKHRpbWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gKHRpbWUgLSB0aGlzLl9taW5pbXVtQm91bmRhcnkpIC8gdGhpcy5ib3Vu
ZGFyeVNwYW4oKSAqIHRoaXMuX3dvcmtpbmdBcmVhOwotICAgIH0sCi0KLSAgICBjb21wdXRlQmFy
R3JhcGhQZXJjZW50YWdlczogZnVuY3Rpb24oaXRlbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7
c3RhcnQ6IDAsIG1pZGRsZTogMCwgZW5kOiAodGhpcy5fdmFsdWUoaXRlbSkgLyB0aGlzLmJvdW5k
YXJ5U3BhbigpKSAqIDEwMH07Ci0gICAgfSwKLQotICAgIGNvbXB1dGVCYXJHcmFwaExhYmVsczog
ZnVuY3Rpb24oaXRlbSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5mb3JtYXRU
aW1lKHRoaXMuX3ZhbHVlKGl0ZW0pKTsKLSAgICAgICAgcmV0dXJuIHtsZWZ0OiBsYWJlbCwgcmln
aHQ6IGxhYmVsLCB0b29sdGlwOiBsYWJlbH07Ci0gICAgfSwKLQotICAgIGJvdW5kYXJ5U3Bhbjog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21heGltdW1Cb3VuZGFyeSAt
IHRoaXMuX21pbmltdW1Cb3VuZGFyeTsKLSAgICB9LAotCi0gICAgdXBkYXRlQm91bmRhcmllczog
ZnVuY3Rpb24oaXRlbSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21pbmltdW1Cb3VuZGFyeSA9IDA7
Ci0KLSAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUoaXRlbSk7Ci0gICAgICAgIGlmICh0
eXBlb2YgdGhpcy5fbWF4aW11bUJvdW5kYXJ5ID09PSAidW5kZWZpbmVkIiB8fCB2YWx1ZSA+IHRo
aXMuX21heGltdW1Cb3VuZGFyeSkgewotICAgICAgICAgICAgdGhpcy5fbWF4aW11bUJvdW5kYXJ5
ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBkZWxldGUgdGhpcy5fbWluaW11bUJvdW5kYXJ5OwotICAgICAgICBkZWxldGUgdGhpcy5f
bWF4aW11bUJvdW5kYXJ5OwotICAgIH0sCi0KLSAgICBtYXhpbXVtQm91bmRhcnk6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYXhpbXVtQm91bmRhcnk7Ci0gICAgfSwK
LQotICAgIG1pbmltdW1Cb3VuZGFyeTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX21pbmltdW1Cb3VuZGFyeTsKLSAgICB9LAotCi0gICAgemVyb1RpbWU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9taW5pbXVtQm91bmRhcnk7Ci0gICAgfSwK
LQotICAgIF92YWx1ZTogZnVuY3Rpb24oaXRlbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0sCi0KLSAgICBmb3JtYXRUaW1lOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS50b1N0cmluZygpOwotICAgIH0sCi0KLSAgICBzZXREaXNwbGF5V2luZG93
OiBmdW5jdGlvbihjbGllbnRXaWR0aCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3dvcmtpbmdBcmVh
ID0gY2xpZW50V2lkdGg7Ci0gICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSAwOwotICAgIH0KLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuTmV0d29y
a0Jhc2VDYWxjdWxhdG9yfQotICovCi1XZWJJbnNwZWN0b3IuTmV0d29ya1RpbWVDYWxjdWxhdG9y
ID0gZnVuY3Rpb24oc3RhcnRBdFplcm8pCi17Ci0gICAgV2ViSW5zcGVjdG9yLk5ldHdvcmtCYXNl
Q2FsY3VsYXRvci5jYWxsKHRoaXMpOwotICAgIHRoaXMuc3RhcnRBdFplcm8gPSBzdGFydEF0WmVy
bzsKLX0KLQotV2ViSW5zcGVjdG9yLk5ldHdvcmtUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUgPSB7
Ci0gICAgY29tcHV0ZUJhckdyYXBoUGVyY2VudGFnZXM6IGZ1bmN0aW9uKHJlcXVlc3QpCi0gICAg
ewotICAgICAgICBpZiAocmVxdWVzdC5zdGFydFRpbWUgIT09IC0xKQotICAgICAgICAgICAgdmFy
IHN0YXJ0ID0gKChyZXF1ZXN0LnN0YXJ0VGltZSAtIHRoaXMuX21pbmltdW1Cb3VuZGFyeSkgLyB0
aGlzLmJvdW5kYXJ5U3BhbigpKSAqIDEwMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFy
IHN0YXJ0ID0gMDsKLQotICAgICAgICBpZiAocmVxdWVzdC5yZXNwb25zZVJlY2VpdmVkVGltZSAh
PT0gLTEpCi0gICAgICAgICAgICB2YXIgbWlkZGxlID0gKChyZXF1ZXN0LnJlc3BvbnNlUmVjZWl2
ZWRUaW1lIC0gdGhpcy5fbWluaW11bUJvdW5kYXJ5KSAvIHRoaXMuYm91bmRhcnlTcGFuKCkpICog
MTAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YXIgbWlkZGxlID0gKHRoaXMuc3RhcnRB
dFplcm8gPyBzdGFydCA6IDEwMCk7Ci0KLSAgICAgICAgaWYgKHJlcXVlc3QuZW5kVGltZSAhPT0g
LTEpCi0gICAgICAgICAgICB2YXIgZW5kID0gKChyZXF1ZXN0LmVuZFRpbWUgLSB0aGlzLl9taW5p
bXVtQm91bmRhcnkpIC8gdGhpcy5ib3VuZGFyeVNwYW4oKSkgKiAxMDA7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHZhciBlbmQgPSAodGhpcy5zdGFydEF0WmVybyA/IG1pZGRsZSA6IDEwMCk7
Ci0KLSAgICAgICAgaWYgKHRoaXMuc3RhcnRBdFplcm8pIHsKLSAgICAgICAgICAgIGVuZCAtPSBz
dGFydDsKLSAgICAgICAgICAgIG1pZGRsZSAtPSBzdGFydDsKLSAgICAgICAgICAgIHN0YXJ0ID0g
MDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBtaWRkbGU6IG1p
ZGRsZSwgZW5kOiBlbmR9OwotICAgIH0sCi0KLSAgICBjb21wdXRlUGVyY2VudGFnZUZyb21FdmVu
dFRpbWU6IGZ1bmN0aW9uKGV2ZW50VGltZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rp
b24gY29tcHV0ZXMgYSBwZXJjZW50YWdlIGluIHRlcm1zIG9mIHRoZSB0b3RhbCBsb2FkaW5nIHRp
bWUKLSAgICAgICAgLy8gb2YgYSBzcGVjaWZpYyBldmVudC4gSWYgc3RhcnRBdFplcm8gaXMgc2V0
LCB0aGVuIHRoaXMgaXMgdXNlbGVzcywgYW5kIHdlCi0gICAgICAgIC8vIHdhbnQgdG8gcmV0dXJu
IDAuCi0gICAgICAgIGlmIChldmVudFRpbWUgIT09IC0xICYmICF0aGlzLnN0YXJ0QXRaZXJvKQot
ICAgICAgICAgICAgcmV0dXJuICgoZXZlbnRUaW1lIC0gdGhpcy5fbWluaW11bUJvdW5kYXJ5KSAv
IHRoaXMuYm91bmRhcnlTcGFuKCkpICogMTAwOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0s
Ci0KLSAgICB1cGRhdGVCb3VuZGFyaWVzRm9yRXZlbnRUaW1lOiBmdW5jdGlvbihldmVudFRpbWUp
Ci0gICAgewotICAgICAgICBpZiAoZXZlbnRUaW1lID09PSAtMSB8fCB0aGlzLnN0YXJ0QXRaZXJv
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5f
bWF4aW11bUJvdW5kYXJ5ID09PSAidW5kZWZpbmVkIiB8fCBldmVudFRpbWUgPiB0aGlzLl9tYXhp
bXVtQm91bmRhcnkpIHsKLSAgICAgICAgICAgIHRoaXMuX21heGltdW1Cb3VuZGFyeSA9IGV2ZW50
VGltZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9LAotCi0gICAgY29tcHV0ZUJhckdyYXBoTGFiZWxzOiBmdW5jdGlvbihy
ZXF1ZXN0KQotICAgIHsKLSAgICAgICAgdmFyIHJpZ2h0TGFiZWwgPSAiIjsKLSAgICAgICAgaWYg
KHJlcXVlc3QucmVzcG9uc2VSZWNlaXZlZFRpbWUgIT09IC0xICYmIHJlcXVlc3QuZW5kVGltZSAh
PT0gLTEpCi0gICAgICAgICAgICByaWdodExhYmVsID0gdGhpcy5mb3JtYXRUaW1lKHJlcXVlc3Qu
ZW5kVGltZSAtIHJlcXVlc3QucmVzcG9uc2VSZWNlaXZlZFRpbWUpOwotCi0gICAgICAgIHZhciBo
YXNMYXRlbmN5ID0gcmVxdWVzdC5sYXRlbmN5ID4gMDsKLSAgICAgICAgaWYgKGhhc0xhdGVuY3kp
Ci0gICAgICAgICAgICB2YXIgbGVmdExhYmVsID0gdGhpcy5mb3JtYXRUaW1lKHJlcXVlc3QubGF0
ZW5jeSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhciBsZWZ0TGFiZWwgPSByaWdodExh
YmVsOwotCi0gICAgICAgIGlmIChyZXF1ZXN0LnRpbWluZykKLSAgICAgICAgICAgIHJldHVybiB7
bGVmdDogbGVmdExhYmVsLCByaWdodDogcmlnaHRMYWJlbH07Ci0KLSAgICAgICAgaWYgKGhhc0xh
dGVuY3kgJiYgcmlnaHRMYWJlbCkgewotICAgICAgICAgICAgdmFyIHRvdGFsID0gdGhpcy5mb3Jt
YXRUaW1lKHJlcXVlc3QuZHVyYXRpb24pOwotICAgICAgICAgICAgdmFyIHRvb2x0aXAgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIiVzIGxhdGVuY3ksICVzIGRvd25sb2FkICglcyB0b3RhbCkiLCBs
ZWZ0TGFiZWwsIHJpZ2h0TGFiZWwsIHRvdGFsKTsKLSAgICAgICAgfSBlbHNlIGlmIChoYXNMYXRl
bmN5KQotICAgICAgICAgICAgdmFyIHRvb2x0aXAgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVz
IGxhdGVuY3kiLCBsZWZ0TGFiZWwpOwotICAgICAgICBlbHNlIGlmIChyaWdodExhYmVsKQotICAg
ICAgICAgICAgdmFyIHRvb2x0aXAgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzIGRvd25sb2Fk
IiwgcmlnaHRMYWJlbCk7Ci0KLSAgICAgICAgaWYgKHJlcXVlc3QuY2FjaGVkKQotICAgICAgICAg
ICAgdG9vbHRpcCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMgKGZyb20gY2FjaGUpIiwgdG9v
bHRpcCk7Ci0gICAgICAgIHJldHVybiB7bGVmdDogbGVmdExhYmVsLCByaWdodDogcmlnaHRMYWJl
bCwgdG9vbHRpcDogdG9vbHRpcH07Ci0gICAgfSwKLQotICAgIHVwZGF0ZUJvdW5kYXJpZXM6IGZ1
bmN0aW9uKHJlcXVlc3QpCi0gICAgewotICAgICAgICB2YXIgZGlkQ2hhbmdlID0gZmFsc2U7Ci0K
LSAgICAgICAgdmFyIGxvd2VyQm91bmQ7Ci0gICAgICAgIGlmICh0aGlzLnN0YXJ0QXRaZXJvKQot
ICAgICAgICAgICAgbG93ZXJCb3VuZCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxv
d2VyQm91bmQgPSB0aGlzLl9sb3dlckJvdW5kKHJlcXVlc3QpOwotCi0gICAgICAgIGlmIChsb3dl
ckJvdW5kICE9PSAtMSAmJiAodHlwZW9mIHRoaXMuX21pbmltdW1Cb3VuZGFyeSA9PT0gInVuZGVm
aW5lZCIgfHwgbG93ZXJCb3VuZCA8IHRoaXMuX21pbmltdW1Cb3VuZGFyeSkpIHsKLSAgICAgICAg
ICAgIHRoaXMuX21pbmltdW1Cb3VuZGFyeSA9IGxvd2VyQm91bmQ7Ci0gICAgICAgICAgICBkaWRD
aGFuZ2UgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlz
Ll91cHBlckJvdW5kKHJlcXVlc3QpOwotICAgICAgICBpZiAodXBwZXJCb3VuZCAhPT0gLTEgJiYg
KHR5cGVvZiB0aGlzLl9tYXhpbXVtQm91bmRhcnkgPT09ICJ1bmRlZmluZWQiIHx8IHVwcGVyQm91
bmQgPiB0aGlzLl9tYXhpbXVtQm91bmRhcnkpKSB7Ci0gICAgICAgICAgICB0aGlzLl9tYXhpbXVt
Qm91bmRhcnkgPSB1cHBlckJvdW5kOwotICAgICAgICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBkaWRDaGFuZ2U7Ci0gICAgfSwKLQotICAgIGZvcm1h
dFRpbWU6IGZ1bmN0aW9uKHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE51bWJlci5zZWNv
bmRzVG9TdHJpbmcodmFsdWUpOwotICAgIH0sCi0KLSAgICBfbG93ZXJCb3VuZDogZnVuY3Rpb24o
cmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0sCi0KLSAgICBfdXBwZXJC
b3VuZDogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0s
Ci0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5OZXR3b3JrQmFzZUNhbGN1bGF0b3IucHJv
dG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVj
dG9yLk5ldHdvcmtUaW1lQ2FsY3VsYXRvcn0KLSAqLwotV2ViSW5zcGVjdG9yLk5ldHdvcmtUcmFu
c2ZlclRpbWVDYWxjdWxhdG9yID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5OZXR3
b3JrVGltZUNhbGN1bGF0b3IuY2FsbCh0aGlzLCBmYWxzZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5O
ZXR3b3JrVHJhbnNmZXJUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUgPSB7Ci0gICAgZm9ybWF0VGlt
ZTogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gTnVtYmVyLnNlY29uZHNU
b1N0cmluZyh2YWx1ZSk7Ci0gICAgfSwKLQotICAgIF9sb3dlckJvdW5kOiBmdW5jdGlvbihyZXF1
ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlcXVlc3Quc3RhcnRUaW1lOwotICAgIH0sCi0K
LSAgICBfdXBwZXJCb3VuZDogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biByZXF1ZXN0LmVuZFRpbWU7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
Lk5ldHdvcmtUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuTmV0d29ya1RpbWVDYWxjdWxhdG9yfQotICov
Ci1XZWJJbnNwZWN0b3IuTmV0d29ya1RyYW5zZmVyRHVyYXRpb25DYWxjdWxhdG9yID0gZnVuY3Rp
b24oKQotewotICAgIFdlYkluc3BlY3Rvci5OZXR3b3JrVGltZUNhbGN1bGF0b3IuY2FsbCh0aGlz
LCB0cnVlKTsKLX0KLQotV2ViSW5zcGVjdG9yLk5ldHdvcmtUcmFuc2ZlckR1cmF0aW9uQ2FsY3Vs
YXRvci5wcm90b3R5cGUgPSB7Ci0gICAgZm9ybWF0VGltZTogZnVuY3Rpb24odmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gTnVtYmVyLnNlY29uZHNUb1N0cmluZyh2YWx1ZSk7Ci0gICAgfSwK
LQotICAgIF91cHBlckJvdW5kOiBmdW5jdGlvbihyZXF1ZXN0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlcXVlc3QuZHVyYXRpb247Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLk5ldHdvcmtUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlfQotICogQHBhcmFt
IHshV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3fSBwYXJlbnRWaWV3Ci0gKiBAcGFyYW0geyFX
ZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3R9IHJlcXVlc3QKLSAqLwotV2ViSW5zcGVjdG9yLk5l
dHdvcmtEYXRhR3JpZE5vZGUgPSBmdW5jdGlvbihwYXJlbnRWaWV3LCByZXF1ZXN0KQotewotICAg
IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUuY2FsbCh0aGlzLCB7fSk7Ci0gICAgdGhpcy5fcGFy
ZW50VmlldyA9IHBhcmVudFZpZXc7Ci0gICAgdGhpcy5fcmVxdWVzdCA9IHJlcXVlc3Q7Ci19Ci0K
LVdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWROb2RlLnByb3RvdHlwZSA9IHsKLSAgICBjcmVh
dGVDZWxsczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gT3V0IG9mIHNpZ2h0LCBvdXQg
b2YgbWluZDogY3JlYXRlIG5vZGVzIG9mZnNjcmVlbiB0byBzYXZlIG9uIHJlbmRlciB0cmVlIHVw
ZGF0ZSB0aW1lcyB3aGVuIHJ1bm5pbmcgdXBkYXRlT2Zmc2NyZWVuUm93cygpCi0gICAgICAgIHRo
aXMuX2VsZW1lbnQuYWRkU3R5bGVDbGFzcygib2Zmc2NyZWVuIik7Ci0gICAgICAgIHRoaXMuX25h
bWVDZWxsID0gdGhpcy5fY3JlYXRlRGl2SW5URCgibmFtZSIpOwotICAgICAgICB0aGlzLl9tZXRo
b2RDZWxsID0gdGhpcy5fY3JlYXRlRGl2SW5URCgibWV0aG9kIik7Ci0gICAgICAgIHRoaXMuX3N0
YXR1c0NlbGwgPSB0aGlzLl9jcmVhdGVEaXZJblREKCJzdGF0dXMiKTsKLSAgICAgICAgdGhpcy5f
ZG9tYWluQ2VsbCA9IHRoaXMuX2NyZWF0ZURpdkluVEQoImRvbWFpbiIpOwotICAgICAgICB0aGlz
Ll90eXBlQ2VsbCA9IHRoaXMuX2NyZWF0ZURpdkluVEQoInR5cGUiKTsKLSAgICAgICAgdGhpcy5f
aW5pdGlhdG9yQ2VsbCA9IHRoaXMuX2NyZWF0ZURpdkluVEQoImluaXRpYXRvciIpOwotICAgICAg
ICB0aGlzLl9jb29raWVzQ2VsbCA9IHRoaXMuX2NyZWF0ZURpdkluVEQoImNvb2tpZXMiKTsKLSAg
ICAgICAgdGhpcy5fc2V0Q29va2llc0NlbGwgPSB0aGlzLl9jcmVhdGVEaXZJblREKCJzZXRDb29r
aWVzIik7Ci0gICAgICAgIHRoaXMuX3NpemVDZWxsID0gdGhpcy5fY3JlYXRlRGl2SW5URCgic2l6
ZSIpOwotICAgICAgICB0aGlzLl90aW1lQ2VsbCA9IHRoaXMuX2NyZWF0ZURpdkluVEQoInRpbWUi
KTsKLSAgICAgICAgdGhpcy5fY3JlYXRlVGltZWxpbmVDZWxsKCk7Ci0gICAgICAgIHRoaXMuX25h
bWVDZWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fb25DbGljay5iaW5kKHRoaXMp
LCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX25hbWVDZWxsLmFkZEV2ZW50TGlzdGVuZXIoImRibGNs
aWNrIiwgdGhpcy5fb3BlbkluTmV3VGFiLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB9LAotCi0g
ICAgaXNGaWx0ZXJlZE91dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3Bh
cmVudFZpZXcuX2ZpbHRlcmVkT3V0UmVxdWVzdHMuZ2V0KHRoaXMuX3JlcXVlc3QpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghdGhpcy5fcGFyZW50Vmlldy5faGlkZGVu
Q2F0ZWdvcmllc1siYWxsIl0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9yZXF1ZXN0LnR5cGUubmFtZSgpIGluIHRoaXMuX3BhcmVudFZpZXcuX2hpZGRl
bkNhdGVnb3JpZXM7Ci0gICAgfSwKLQotICAgIF9vbkNsaWNrOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuX3BhcmVudFZpZXcuX2FsbG93UmVxdWVzdFNlbGVjdGlvbikKLSAg
ICAgICAgICAgIHRoaXMuc2VsZWN0KCk7Ci0gICAgfSwKLQotICAgIHNlbGVjdDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFyZW50Vmlldy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLk5ldHdvcmtMb2dWaWV3LkV2ZW50VHlwZXMuUmVxdWVzdFNlbGVjdGVk
LCB0aGlzLl9yZXF1ZXN0KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90
b3R5cGUuc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgV2ViSW5zcGVj
dG9yLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5V
c2VyTWV0cmljcy5Vc2VyQWN0aW9uLCB7Ci0gICAgICAgICAgICBhY3Rpb246IFdlYkluc3BlY3Rv
ci5Vc2VyTWV0cmljcy5Vc2VyQWN0aW9uTmFtZXMuTmV0d29ya1JlcXVlc3RTZWxlY3RlZCwKLSAg
ICAgICAgICAgIHVybDogdGhpcy5fcmVxdWVzdC51cmwKLSAgICAgICAgfSk7Ci0gICAgfSwKLQot
ICAgIF9oaWdobGlnaHRNYXRjaGVkU3Vic3RyaW5nOiBmdW5jdGlvbihyZWdleHApCi0gICAgewot
ICAgICAgICB2YXIgZG9tQ2hhbmdlcyA9IFtdOwotICAgICAgICB2YXIgbWF0Y2hJbmZvID0gdGhp
cy5fZWxlbWVudC50ZXh0Q29udGVudC5tYXRjaChyZWdleHApOwotICAgICAgICBpZiAobWF0Y2hJ
bmZvKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmhpZ2hsaWdodFNlYXJjaFJlc3VsdCh0aGlz
Ll9uYW1lQ2VsbCwgbWF0Y2hJbmZvLmluZGV4LCBtYXRjaEluZm9bMF0ubGVuZ3RoLCBkb21DaGFu
Z2VzKTsKLSAgICAgICAgcmV0dXJuIGRvbUNoYW5nZXM7Ci0gICAgfSwKLQotICAgIF9vcGVuSW5O
ZXdUYWI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5v
cGVuSW5OZXdUYWIodGhpcy5fcmVxdWVzdC51cmwpOwotICAgIH0sCi0KLSAgICBnZXQgc2VsZWN0
YWJsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Vmlldy5fYWxsb3dSZXF1
ZXN0U2VsZWN0aW9uICYmICF0aGlzLmlzRmlsdGVyZWRPdXQoKTsKLSAgICB9LAotCi0gICAgX2Ny
ZWF0ZURpdkluVEQ6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIpCi0gICAgewotICAgICAgICB2
YXIgdGQgPSB0aGlzLmNyZWF0ZVREKGNvbHVtbklkZW50aWZpZXIpOwotICAgICAgICB2YXIgZGl2
ID0gdGQuY3JlYXRlQ2hpbGQoImRpdiIpOwotICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENo
aWxkKHRkKTsKLSAgICAgICAgcmV0dXJuIGRpdjsKLSAgICB9LAotCi0gICAgX2NyZWF0ZVRpbWVs
aW5lQ2VsbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZ3JhcGhFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHRoaXMuX2dyYXBoRWxlbWVu
dC5jbGFzc05hbWUgPSAibmV0d29yay1ncmFwaC1zaWRlIjsKLQotICAgICAgICB0aGlzLl9iYXJB
cmVhRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAvLyAg
ICB0aGlzLl9iYXJBcmVhRWxlbWVudC5jbGFzc05hbWUgPSAibmV0d29yay1ncmFwaC1iYXItYXJl
YSBoaWRkZW4iOwotICAgICAgICB0aGlzLl9iYXJBcmVhRWxlbWVudC5jbGFzc05hbWUgPSAibmV0
d29yay1ncmFwaC1iYXItYXJlYSI7Ci0gICAgICAgIHRoaXMuX2JhckFyZWFFbGVtZW50LnJlcXVl
c3QgPSB0aGlzLl9yZXF1ZXN0OwotICAgICAgICB0aGlzLl9ncmFwaEVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fYmFyQXJlYUVsZW1lbnQpOwotCi0gICAgICAgIHRoaXMuX2JhckxlZnRFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHRoaXMuX2JhckxlZnRF
bGVtZW50LmNsYXNzTmFtZSA9ICJuZXR3b3JrLWdyYXBoLWJhciB3YWl0aW5nIjsKLSAgICAgICAg
dGhpcy5fYmFyQXJlYUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fYmFyTGVmdEVsZW1lbnQpOwot
Ci0gICAgICAgIHRoaXMuX2JhclJpZ2h0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgICAgICB0aGlzLl9iYXJSaWdodEVsZW1lbnQuY2xhc3NOYW1lID0gIm5ldHdv
cmstZ3JhcGgtYmFyIjsKLSAgICAgICAgdGhpcy5fYmFyQXJlYUVsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5fYmFyUmlnaHRFbGVtZW50KTsKLQotCi0gICAgICAgIHRoaXMuX2xhYmVsTGVmdEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgdGhpcy5fbGFiZWxM
ZWZ0RWxlbWVudC5jbGFzc05hbWUgPSAibmV0d29yay1ncmFwaC1sYWJlbCB3YWl0aW5nIjsKLSAg
ICAgICAgdGhpcy5fYmFyQXJlYUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbGFiZWxMZWZ0RWxl
bWVudCk7Ci0KLSAgICAgICAgdGhpcy5fbGFiZWxSaWdodEVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgdGhpcy5fbGFiZWxSaWdodEVsZW1lbnQuY2xhc3NO
YW1lID0gIm5ldHdvcmstZ3JhcGgtbGFiZWwiOwotICAgICAgICB0aGlzLl9iYXJBcmVhRWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLl9sYWJlbFJpZ2h0RWxlbWVudCk7Ci0KLSAgICAgICAgdGhpcy5f
Z3JhcGhFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIHRoaXMuX3JlZnJlc2hM
YWJlbFBvc2l0aW9ucy5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICAgICAgdGhpcy5fdGltZWxp
bmVDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgdGhpcy5fdGlt
ZWxpbmVDZWxsLmNsYXNzTmFtZSA9ICJ0aW1lbGluZS1jb2x1bW4iOwotICAgICAgICB0aGlzLl9l
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3RpbWVsaW5lQ2VsbCk7Ci0gICAgICAgIHRoaXMuX3Rp
bWVsaW5lQ2VsbC5hcHBlbmRDaGlsZCh0aGlzLl9ncmFwaEVsZW1lbnQpOwotICAgIH0sCi0KLSAg
ICByZWZyZXNoUmVxdWVzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVmcmVz
aE5hbWVDZWxsKCk7Ci0KLSAgICAgICAgdGhpcy5fbWV0aG9kQ2VsbC5zZXRUZXh0QW5kVGl0bGUo
dGhpcy5fcmVxdWVzdC5yZXF1ZXN0TWV0aG9kKTsKLQotICAgICAgICB0aGlzLl9yZWZyZXNoU3Rh
dHVzQ2VsbCgpOwotICAgICAgICB0aGlzLl9yZWZyZXNoRG9tYWluQ2VsbCgpOwotICAgICAgICB0
aGlzLl9yZWZyZXNoVHlwZUNlbGwoKTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaEluaXRpYXRvckNl
bGwoKTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaENvb2tpZXNDZWxsKCk7Ci0gICAgICAgIHRoaXMu
X3JlZnJlc2hTZXRDb29raWVzQ2VsbCgpOwotICAgICAgICB0aGlzLl9yZWZyZXNoU2l6ZUNlbGwo
KTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaFRpbWVDZWxsKCk7Ci0KLSAgICAgICAgaWYgKHRoaXMu
X3JlcXVlc3QuY2FjaGVkKQotICAgICAgICAgICAgdGhpcy5fZ3JhcGhFbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInJlc291cmNlLWNhY2hlZCIpOwotCi0gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkU3R5
bGVDbGFzcygibmV0d29yay1pdGVtIik7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUVsZW1lbnRTdHls
ZUNsYXNzZXModGhpcy5fZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7IUVsZW1lbnR9IGVsZW1lbnQKLSAgICAgKi8KLSAgICBfdXBkYXRlRWxlbWVudFN0eWxlQ2xh
c3NlczogZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHZhciB0eXBlQ2xhc3NOYW1l
ID0gIm5ldHdvcmstdHlwZS0iICsgdGhpcy5fcmVxdWVzdC50eXBlLm5hbWUoKTsKLSAgICAgICAg
aWYgKCFlbGVtZW50Lmhhc1N0eWxlQ2xhc3ModHlwZUNsYXNzTmFtZSkpIHsKLSAgICAgICAgICAg
IGVsZW1lbnQucmVtb3ZlTWF0Y2hpbmdTdHlsZUNsYXNzZXMoIm5ldHdvcmstdHlwZS1cXHcrIik7
Ci0gICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3ModHlwZUNsYXNzTmFtZSk7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgX3JlZnJlc2hOYW1lQ2VsbDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fbmFtZUNlbGwucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICBpZiAo
dGhpcy5fcmVxdWVzdC50eXBlID09PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5JbWFnZSkg
ewotICAgICAgICAgICAgdmFyIHByZXZpZXdJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImltZyIpOwotICAgICAgICAgICAgcHJldmlld0ltYWdlLmNsYXNzTmFtZSA9ICJpbWFnZS1uZXR3
b3JrLWljb24tcHJldmlldyI7Ci0gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0LnBvcHVsYXRlSW1h
Z2VTb3VyY2UocHJldmlld0ltYWdlKTsKLQotICAgICAgICAgICAgdmFyIGljb25FbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBpY29uRWxlbWVudC5j
bGFzc05hbWUgPSAiaWNvbiI7Ci0gICAgICAgICAgICBpY29uRWxlbWVudC5hcHBlbmRDaGlsZChw
cmV2aWV3SW1hZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGljb25FbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci0gICAgICAgICAgICBpY29uRWxl
bWVudC5jbGFzc05hbWUgPSAiaWNvbiI7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fbmFtZUNl
bGwuYXBwZW5kQ2hpbGQoaWNvbkVsZW1lbnQpOwotICAgICAgICB0aGlzLl9uYW1lQ2VsbC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9yZXF1ZXN0Lm5hbWUoKSkpOwot
ICAgICAgICB0aGlzLl9hcHBlbmRTdWJ0aXRsZSh0aGlzLl9uYW1lQ2VsbCwgdGhpcy5fcmVxdWVz
dC5wYXRoKCkpOwotICAgICAgICB0aGlzLl9uYW1lQ2VsbC50aXRsZSA9IHRoaXMuX3JlcXVlc3Qu
dXJsOwotICAgIH0sCi0KLSAgICBfcmVmcmVzaFN0YXR1c0NlbGw6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3N0YXR1c0NlbGwucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICBp
ZiAodGhpcy5fcmVxdWVzdC5mYWlsZWQpIHsKLSAgICAgICAgICAgIHZhciBmYWlsVGV4dCA9IHRo
aXMuX3JlcXVlc3QuY2FuY2VsZWQgPyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihjYW5jZWxlZCki
KSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGZhaWxlZCkiKTsKLSAgICAgICAgICAgIGlmICh0
aGlzLl9yZXF1ZXN0LmxvY2FsaXplZEZhaWxEZXNjcmlwdGlvbikgewotICAgICAgICAgICAgICAg
IHRoaXMuX3N0YXR1c0NlbGwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZmFp
bFRleHQpKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRTdWJ0aXRsZSh0aGlzLl9zdGF0
dXNDZWxsLCB0aGlzLl9yZXF1ZXN0LmxvY2FsaXplZEZhaWxEZXNjcmlwdGlvbik7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fc3RhdHVzQ2VsbC50aXRsZSA9IGZhaWxUZXh0ICsgIiAiICsgdGhpcy5f
cmVxdWVzdC5sb2NhbGl6ZWRGYWlsRGVzY3JpcHRpb247Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NlbGwuc2V0VGV4dEFuZFRpdGxlKGZhaWxUZXh0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NlbGwuYWRkU3R5bGVD
bGFzcygibmV0d29yay1kaW0tY2VsbCIpOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0
eWxlQ2xhc3MoIm5ldHdvcmstZXJyb3Itcm93Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICB0aGlzLl9zdGF0dXNDZWxsLnJlbW92ZVN0eWxlQ2xhc3MoIm5ldHdv
cmstZGltLWNlbGwiKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoIm5l
dHdvcmstZXJyb3Itcm93Iik7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3Quc3RhdHVzQ29k
ZSkgewotICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2VsbC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiIiArIHRoaXMuX3JlcXVlc3Quc3RhdHVzQ29kZSkpOwotICAgICAgICAg
ICAgdGhpcy5fYXBwZW5kU3VidGl0bGUodGhpcy5fc3RhdHVzQ2VsbCwgdGhpcy5fcmVxdWVzdC5z
dGF0dXNUZXh0KTsKLSAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NlbGwudGl0bGUgPSB0aGlzLl9y
ZXF1ZXN0LnN0YXR1c0NvZGUgKyAiICIgKyB0aGlzLl9yZXF1ZXN0LnN0YXR1c1RleHQ7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5zdGF0dXNDb2RlID49IDQwMCkKLSAgICAgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygibmV0d29yay1lcnJvci1yb3ciKTsKLSAg
ICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LmNhY2hlZCkKLSAgICAgICAgICAgICAgICB0aGlz
Ll9zdGF0dXNDZWxsLmFkZFN0eWxlQ2xhc3MoIm5ldHdvcmstZGltLWNlbGwiKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5fcmVxdWVzdC5pc0h0dHBGYW1pbHkoKSAm
JiB0aGlzLl9yZXF1ZXN0LmZpbmlzaGVkKQotICAgICAgICAgICAgICAgIHRoaXMuX3N0YXR1c0Nl
bGwuc2V0VGV4dEFuZFRpdGxlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3VjY2VzcyIpKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3JlcXVlc3QuaXNQaW5nUmVxdWVzdCgpKQotICAgICAg
ICAgICAgICAgIHRoaXMuX3N0YXR1c0NlbGwuc2V0VGV4dEFuZFRpdGxlKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiKHBpbmcpIikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRo
aXMuX3N0YXR1c0NlbGwuc2V0VGV4dEFuZFRpdGxlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHBl
bmRpbmcpIikpOwotICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2VsbC5hZGRTdHlsZUNsYXNzKCJu
ZXR3b3JrLWRpbS1jZWxsIik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3JlZnJlc2hEb21h
aW5DZWxsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9kb21haW5DZWxsLnJlbW92
ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX2RvbWFpbkNlbGwuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUodGhpcy5fcmVxdWVzdC5kb21haW4pKTsKLSAgICAgICAgdGhpcy5f
ZG9tYWluQ2VsbC50aXRsZSA9IHRoaXMuX3JlcXVlc3QucGFyc2VkVVJMLmhvc3Q7Ci0gICAgfSwK
LQotICAgIF9yZWZyZXNoVHlwZUNlbGw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9yZXF1ZXN0Lm1pbWVUeXBlKSB7Ci0gICAgICAgICAgICB0aGlzLl90eXBlQ2VsbC5yZW1v
dmVTdHlsZUNsYXNzKCJuZXR3b3JrLWRpbS1jZWxsIik7Ci0gICAgICAgICAgICB0aGlzLl90eXBl
Q2VsbC5zZXRUZXh0QW5kVGl0bGUodGhpcy5fcmVxdWVzdC5taW1lVHlwZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodGhpcy5fcmVxdWVzdC5pc1BpbmdSZXF1ZXN0KCkpIHsKLSAgICAgICAgICAgIHRo
aXMuX3R5cGVDZWxsLnJlbW92ZVN0eWxlQ2xhc3MoIm5ldHdvcmstZGltLWNlbGwiKTsKLSAgICAg
ICAgICAgIHRoaXMuX3R5cGVDZWxsLnNldFRleHRBbmRUaXRsZSh0aGlzLl9yZXF1ZXN0LnJlcXVl
c3RDb250ZW50VHlwZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX3R5
cGVDZWxsLmFkZFN0eWxlQ2xhc3MoIm5ldHdvcmstZGltLWNlbGwiKTsKLSAgICAgICAgICAgIHRo
aXMuX3R5cGVDZWxsLnNldFRleHRBbmRUaXRsZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBlbmRp
bmciKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3JlZnJlc2hJbml0aWF0b3JDZWxsOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9pbml0aWF0b3JDZWxsLnJlbW92ZUNoaWxk
cmVuKCk7Ci0gICAgICAgIHRoaXMuX2luaXRpYXRvckNlbGwucmVtb3ZlU3R5bGVDbGFzcygibmV0
d29yay1kaW0tY2VsbCIpOwotICAgICAgICB0aGlzLl9pbml0aWF0b3JDZWxsLnJlbW92ZVN0eWxl
Q2xhc3MoIm5ldHdvcmstc2NyaXB0LWluaXRpYXRlZCIpOwotICAgICAgICBkZWxldGUgdGhpcy5f
aW5pdGlhdG9yQ2VsbC5yZXF1ZXN0OwotCi0gICAgICAgIHZhciByZXF1ZXN0ID0gdGhpcy5fcmVx
dWVzdDsKLSAgICAgICAgdmFyIGluaXRpYXRvciA9IHJlcXVlc3QuaW5pdGlhdG9ySW5mbygpOwot
Ci0gICAgICAgIHN3aXRjaCAoaW5pdGlhdG9yLnR5cGUpIHsKLSAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuTmV0d29ya1JlcXVlc3QuSW5pdGlhdG9yVHlwZS5QYXJzZXI6Ci0gICAgICAgICAgICB0
aGlzLl9pbml0aWF0b3JDZWxsLnRpdGxlID0gaW5pdGlhdG9yLnVybCArICI6IiArIGluaXRpYXRv
ci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdGhpcy5faW5pdGlhdG9yQ2VsbC5hcHBlbmRDaGls
ZChXZWJJbnNwZWN0b3IubGlua2lmeVJlc291cmNlQXNOb2RlKGluaXRpYXRvci51cmwsIGluaXRp
YXRvci5saW5lTnVtYmVyIC0gMSkpOwotICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3VidGl0bGUo
dGhpcy5faW5pdGlhdG9yQ2VsbCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXJzZXIiKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5OZXR3b3JrUmVx
dWVzdC5Jbml0aWF0b3JUeXBlLlJlZGlyZWN0OgotICAgICAgICAgICAgdGhpcy5faW5pdGlhdG9y
Q2VsbC50aXRsZSA9IGluaXRpYXRvci51cmw7Ci0gICAgICAgICAgICB0aGlzLl9pbml0aWF0b3JD
ZWxsLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5saW5raWZ5UmVxdWVzdEFzTm9kZShyZXF1ZXN0
LnJlZGlyZWN0U291cmNlKSk7Ci0gICAgICAgICAgICB0aGlzLl9hcHBlbmRTdWJ0aXRsZSh0aGlz
Ll9pbml0aWF0b3JDZWxsLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlZGlyZWN0IikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVl
c3QuSW5pdGlhdG9yVHlwZS5TY3JpcHQ6Ci0gICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRo
aXMuX3BhcmVudFZpZXcuX2xpbmtpZmllci5saW5raWZ5TG9jYXRpb24oaW5pdGlhdG9yLnVybCwg
aW5pdGlhdG9yLmxpbmVOdW1iZXIgLSAxLCAwKTsKLSAgICAgICAgICAgIHVybEVsZW1lbnQudGl0
bGUgPSAiIjsKLSAgICAgICAgICAgIHRoaXMuX2luaXRpYXRvckNlbGwuYXBwZW5kQ2hpbGQodXJs
RWxlbWVudCk7Ci0gICAgICAgICAgICB0aGlzLl9hcHBlbmRTdWJ0aXRsZSh0aGlzLl9pbml0aWF0
b3JDZWxsLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICAgICAgICAgIHRo
aXMuX2luaXRpYXRvckNlbGwuYWRkU3R5bGVDbGFzcygibmV0d29yay1zY3JpcHQtaW5pdGlhdGVk
Iik7Ci0gICAgICAgICAgICB0aGlzLl9pbml0aWF0b3JDZWxsLnJlcXVlc3QgPSByZXF1ZXN0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRoaXMu
X2luaXRpYXRvckNlbGwudGl0bGUgPSAiIjsKLSAgICAgICAgICAgIHRoaXMuX2luaXRpYXRvckNl
bGwuYWRkU3R5bGVDbGFzcygibmV0d29yay1kaW0tY2VsbCIpOwotICAgICAgICAgICAgdGhpcy5f
aW5pdGlhdG9yQ2VsbC5zZXRUZXh0QW5kVGl0bGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdGhl
ciIpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcmVmcmVzaENvb2tpZXNDZWxsOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmVxdWVzdENvb2tpZXMgPSB0aGlzLl9yZXF1ZXN0
LnJlcXVlc3RDb29raWVzOwotICAgICAgICB0aGlzLl9jb29raWVzQ2VsbC5zZXRUZXh0QW5kVGl0
bGUocmVxdWVzdENvb2tpZXMgPyAiIiArIHJlcXVlc3RDb29raWVzLmxlbmd0aCA6ICIiKTsKLSAg
ICB9LAotCi0gICAgX3JlZnJlc2hTZXRDb29raWVzQ2VsbDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIHJlc3BvbnNlQ29va2llcyA9IHRoaXMuX3JlcXVlc3QucmVzcG9uc2VDb29raWVz
OwotICAgICAgICB0aGlzLl9zZXRDb29raWVzQ2VsbC5zZXRUZXh0QW5kVGl0bGUocmVzcG9uc2VD
b29raWVzID8gIiIgKyByZXNwb25zZUNvb2tpZXMubGVuZ3RoIDogIiIpOwotICAgIH0sCi0KLSAg
ICBfcmVmcmVzaFNpemVDZWxsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
cmVxdWVzdC5jYWNoZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX3NpemVDZWxsLnNldFRleHRBbmRU
aXRsZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihmcm9tIGNhY2hlKSIpKTsKLSAgICAgICAgICAg
IHRoaXMuX3NpemVDZWxsLmFkZFN0eWxlQ2xhc3MoIm5ldHdvcmstZGltLWNlbGwiKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZVNpemUgPSB0eXBlb2YgdGhpcy5f
cmVxdWVzdC5yZXNvdXJjZVNpemUgPT09ICJudW1iZXIiID8gTnVtYmVyLmJ5dGVzVG9TdHJpbmco
dGhpcy5fcmVxdWVzdC5yZXNvdXJjZVNpemUpIDogIj8iOwotICAgICAgICAgICAgdmFyIHRyYW5z
ZmVyU2l6ZSA9IHR5cGVvZiB0aGlzLl9yZXF1ZXN0LnRyYW5zZmVyU2l6ZSA9PT0gIm51bWJlciIg
PyBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLl9yZXF1ZXN0LnRyYW5zZmVyU2l6ZSkgOiAiPyI7
Ci0gICAgICAgICAgICB0aGlzLl9zaXplQ2VsbC5zZXRUZXh0QW5kVGl0bGUodHJhbnNmZXJTaXpl
KTsKLSAgICAgICAgICAgIHRoaXMuX3NpemVDZWxsLnJlbW92ZVN0eWxlQ2xhc3MoIm5ldHdvcmst
ZGltLWNlbGwiKTsKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZFN1YnRpdGxlKHRoaXMuX3NpemVD
ZWxsLCByZXNvdXJjZVNpemUpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoVGlt
ZUNlbGw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LmR1cmF0
aW9uID4gMCkgewotICAgICAgICAgICAgdGhpcy5fdGltZUNlbGwucmVtb3ZlU3R5bGVDbGFzcygi
bmV0d29yay1kaW0tY2VsbCIpOwotICAgICAgICAgICAgdGhpcy5fdGltZUNlbGwuc2V0VGV4dEFu
ZFRpdGxlKE51bWJlci5zZWNvbmRzVG9TdHJpbmcodGhpcy5fcmVxdWVzdC5kdXJhdGlvbikpOwot
ICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3VidGl0bGUodGhpcy5fdGltZUNlbGwsIE51bWJlci5z
ZWNvbmRzVG9TdHJpbmcodGhpcy5fcmVxdWVzdC5sYXRlbmN5KSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB0aGlzLl90aW1lQ2VsbC5hZGRTdHlsZUNsYXNzKCJuZXR3b3JrLWRpbS1j
ZWxsIik7Ci0gICAgICAgICAgICB0aGlzLl90aW1lQ2VsbC5zZXRUZXh0QW5kVGl0bGUoV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJQZW5kaW5nIikpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9h
cHBlbmRTdWJ0aXRsZTogZnVuY3Rpb24oY2VsbEVsZW1lbnQsIHN1YnRpdGxlVGV4dCkKLSAgICB7
Ci0gICAgICAgIHZhciBzdWJ0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgc3VidGl0bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJuZXR3b3JrLWNlbGwt
c3VidGl0bGUiOwotICAgICAgICBzdWJ0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdWJ0aXRs
ZVRleHQ7Ci0gICAgICAgIGNlbGxFbGVtZW50LmFwcGVuZENoaWxkKHN1YnRpdGxlRWxlbWVudCk7
Ci0gICAgfSwKLQotICAgIHJlZnJlc2hHcmFwaDogZnVuY3Rpb24oY2FsY3VsYXRvcikKLSAgICB7
Ci0gICAgICAgIHZhciBwZXJjZW50YWdlcyA9IGNhbGN1bGF0b3IuY29tcHV0ZUJhckdyYXBoUGVy
Y2VudGFnZXModGhpcy5fcmVxdWVzdCk7Ci0gICAgICAgIHRoaXMuX3BlcmNlbnRhZ2VzID0gcGVy
Y2VudGFnZXM7Ci0KLSAgICAgICAgdGhpcy5fYmFyQXJlYUVsZW1lbnQucmVtb3ZlU3R5bGVDbGFz
cygiaGlkZGVuIik7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUVsZW1lbnRTdHlsZUNsYXNzZXModGhp
cy5fZ3JhcGhFbGVtZW50KTsKLQotICAgICAgICB0aGlzLl9iYXJMZWZ0RWxlbWVudC5zdHlsZS5z
ZXRQcm9wZXJ0eSgibGVmdCIsIHBlcmNlbnRhZ2VzLnN0YXJ0ICsgIiUiKTsKLSAgICAgICAgdGhp
cy5fYmFyUmlnaHRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJyaWdodCIsICgxMDAgLSBwZXJj
ZW50YWdlcy5lbmQpICsgIiUiKTsKLQotICAgICAgICB0aGlzLl9iYXJMZWZ0RWxlbWVudC5zdHls
ZS5zZXRQcm9wZXJ0eSgicmlnaHQiLCAoMTAwIC0gcGVyY2VudGFnZXMuZW5kKSArICIlIik7Ci0g
ICAgICAgIHRoaXMuX2JhclJpZ2h0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgibGVmdCIsIHBl
cmNlbnRhZ2VzLm1pZGRsZSArICIlIik7Ci0KLSAgICAgICAgdmFyIGxhYmVscyA9IGNhbGN1bGF0
b3IuY29tcHV0ZUJhckdyYXBoTGFiZWxzKHRoaXMuX3JlcXVlc3QpOwotICAgICAgICB0aGlzLl9s
YWJlbExlZnRFbGVtZW50LnRleHRDb250ZW50ID0gbGFiZWxzLmxlZnQ7Ci0gICAgICAgIHRoaXMu
X2xhYmVsUmlnaHRFbGVtZW50LnRleHRDb250ZW50ID0gbGFiZWxzLnJpZ2h0OwotCi0gICAgICAg
IHZhciB0b29sdGlwID0gKGxhYmVscy50b29sdGlwIHx8ICIiKTsKLSAgICAgICAgdGhpcy5fYmFy
TGVmdEVsZW1lbnQudGl0bGUgPSB0b29sdGlwOwotICAgICAgICB0aGlzLl9sYWJlbExlZnRFbGVt
ZW50LnRpdGxlID0gdG9vbHRpcDsKLSAgICAgICAgdGhpcy5fbGFiZWxSaWdodEVsZW1lbnQudGl0
bGUgPSB0b29sdGlwOwotICAgICAgICB0aGlzLl9iYXJSaWdodEVsZW1lbnQudGl0bGUgPSB0b29s
dGlwOwotICAgIH0sCi0KLSAgICBfcmVmcmVzaExhYmVsUG9zaXRpb25zOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX3BlcmNlbnRhZ2VzKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB0aGlzLl9sYWJlbExlZnRFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJs
ZWZ0Iik7Ci0gICAgICAgIHRoaXMuX2xhYmVsTGVmdEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVy
dHkoInJpZ2h0Iik7Ci0gICAgICAgIHRoaXMuX2xhYmVsTGVmdEVsZW1lbnQucmVtb3ZlU3R5bGVD
bGFzcygiYmVmb3JlIik7Ci0gICAgICAgIHRoaXMuX2xhYmVsTGVmdEVsZW1lbnQucmVtb3ZlU3R5
bGVDbGFzcygiaGlkZGVuIik7Ci0KLSAgICAgICAgdGhpcy5fbGFiZWxSaWdodEVsZW1lbnQuc3R5
bGUucmVtb3ZlUHJvcGVydHkoImxlZnQiKTsKLSAgICAgICAgdGhpcy5fbGFiZWxSaWdodEVsZW1l
bnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoInJpZ2h0Iik7Ci0gICAgICAgIHRoaXMuX2xhYmVsUmln
aHRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImFmdGVyIik7Ci0gICAgICAgIHRoaXMuX2xhYmVs
UmlnaHRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotCi0gICAgICAgIGNvbnN0
IGxhYmVsUGFkZGluZyA9IDEwOwotICAgICAgICBjb25zdCBiYXJSaWdodEVsZW1lbnRPZmZzZXRX
aWR0aCA9IHRoaXMuX2JhclJpZ2h0RWxlbWVudC5vZmZzZXRXaWR0aDsKLSAgICAgICAgY29uc3Qg
YmFyTGVmdEVsZW1lbnRPZmZzZXRXaWR0aCA9IHRoaXMuX2JhckxlZnRFbGVtZW50Lm9mZnNldFdp
ZHRoOwotCi0gICAgICAgIGlmICh0aGlzLl9iYXJMZWZ0RWxlbWVudCkgewotICAgICAgICAgICAg
dmFyIGxlZnRCYXJXaWR0aCA9IGJhckxlZnRFbGVtZW50T2Zmc2V0V2lkdGggLSBsYWJlbFBhZGRp
bmc7Ci0gICAgICAgICAgICB2YXIgcmlnaHRCYXJXaWR0aCA9IChiYXJSaWdodEVsZW1lbnRPZmZz
ZXRXaWR0aCAtIGJhckxlZnRFbGVtZW50T2Zmc2V0V2lkdGgpIC0gbGFiZWxQYWRkaW5nOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGxlZnRCYXJXaWR0aCA9IChiYXJMZWZ0RWxl
bWVudE9mZnNldFdpZHRoIC0gYmFyUmlnaHRFbGVtZW50T2Zmc2V0V2lkdGgpIC0gbGFiZWxQYWRk
aW5nOwotICAgICAgICAgICAgdmFyIHJpZ2h0QmFyV2lkdGggPSBiYXJSaWdodEVsZW1lbnRPZmZz
ZXRXaWR0aCAtIGxhYmVsUGFkZGluZzsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGxhYmVs
TGVmdEVsZW1lbnRPZmZzZXRXaWR0aCA9IHRoaXMuX2xhYmVsTGVmdEVsZW1lbnQub2Zmc2V0V2lk
dGg7Ci0gICAgICAgIGNvbnN0IGxhYmVsUmlnaHRFbGVtZW50T2Zmc2V0V2lkdGggPSB0aGlzLl9s
YWJlbFJpZ2h0RWxlbWVudC5vZmZzZXRXaWR0aDsKLQotICAgICAgICBjb25zdCBsYWJlbEJlZm9y
ZSA9IChsYWJlbExlZnRFbGVtZW50T2Zmc2V0V2lkdGggPiBsZWZ0QmFyV2lkdGgpOwotICAgICAg
ICBjb25zdCBsYWJlbEFmdGVyID0gKGxhYmVsUmlnaHRFbGVtZW50T2Zmc2V0V2lkdGggPiByaWdo
dEJhcldpZHRoKTsKLSAgICAgICAgY29uc3QgZ3JhcGhFbGVtZW50T2Zmc2V0V2lkdGggPSB0aGlz
Ll9ncmFwaEVsZW1lbnQub2Zmc2V0V2lkdGg7Ci0KLSAgICAgICAgaWYgKGxhYmVsQmVmb3JlICYm
IChncmFwaEVsZW1lbnRPZmZzZXRXaWR0aCAqICh0aGlzLl9wZXJjZW50YWdlcy5zdGFydCAvIDEw
MCkpIDwgKGxhYmVsTGVmdEVsZW1lbnRPZmZzZXRXaWR0aCArIDEwKSkKLSAgICAgICAgICAgIHZh
ciBsZWZ0SGlkZGVuID0gdHJ1ZTsKLQotICAgICAgICBpZiAobGFiZWxBZnRlciAmJiAoZ3JhcGhF
bGVtZW50T2Zmc2V0V2lkdGggKiAoKDEwMCAtIHRoaXMuX3BlcmNlbnRhZ2VzLmVuZCkgLyAxMDAp
KSA8IChsYWJlbFJpZ2h0RWxlbWVudE9mZnNldFdpZHRoICsgMTApKQotICAgICAgICAgICAgdmFy
IHJpZ2h0SGlkZGVuID0gdHJ1ZTsKLQotICAgICAgICBpZiAoYmFyTGVmdEVsZW1lbnRPZmZzZXRX
aWR0aCA9PSBiYXJSaWdodEVsZW1lbnRPZmZzZXRXaWR0aCkgewotICAgICAgICAgICAgLy8gVGhl
IGxlZnQvcmlnaHQgbGFiZWwgZGF0YSBhcmUgdGhlIHNhbWUsIHNvIGEgYmVmb3JlL2FmdGVyIGxh
YmVsIGNhbiBiZSByZXBsYWNlZCBieSBhbiBvbi1iYXIgbGFiZWwuCi0gICAgICAgICAgICBpZiAo
bGFiZWxCZWZvcmUgJiYgIWxhYmVsQWZ0ZXIpCi0gICAgICAgICAgICAgICAgbGVmdEhpZGRlbiA9
IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChsYWJlbEFmdGVyICYmICFsYWJlbEJlZm9yZSkK
LSAgICAgICAgICAgICAgICByaWdodEhpZGRlbiA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobGFiZWxCZWZvcmUpIHsKLSAgICAgICAgICAgIGlmIChsZWZ0SGlkZGVuKQotICAgICAg
ICAgICAgICAgIHRoaXMuX2xhYmVsTGVmdEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7
Ci0gICAgICAgICAgICB0aGlzLl9sYWJlbExlZnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJy
aWdodCIsICgxMDAgLSB0aGlzLl9wZXJjZW50YWdlcy5zdGFydCkgKyAiJSIpOwotICAgICAgICAg
ICAgdGhpcy5fbGFiZWxMZWZ0RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJiZWZvcmUiKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX2xhYmVsTGVmdEVsZW1lbnQuc3R5bGUuc2V0
UHJvcGVydHkoImxlZnQiLCB0aGlzLl9wZXJjZW50YWdlcy5zdGFydCArICIlIik7Ci0gICAgICAg
ICAgICB0aGlzLl9sYWJlbExlZnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJyaWdodCIsICgx
MDAgLSB0aGlzLl9wZXJjZW50YWdlcy5taWRkbGUpICsgIiUiKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChsYWJlbEFmdGVyKSB7Ci0gICAgICAgICAgICBpZiAocmlnaHRIaWRkZW4pCi0gICAg
ICAgICAgICAgICAgdGhpcy5fbGFiZWxSaWdodEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVu
Iik7Ci0gICAgICAgICAgICB0aGlzLl9sYWJlbFJpZ2h0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0
eSgibGVmdCIsIHRoaXMuX3BlcmNlbnRhZ2VzLmVuZCArICIlIik7Ci0gICAgICAgICAgICB0aGlz
Ll9sYWJlbFJpZ2h0RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJhZnRlciIpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdGhpcy5fbGFiZWxSaWdodEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVy
dHkoImxlZnQiLCB0aGlzLl9wZXJjZW50YWdlcy5taWRkbGUgKyAiJSIpOwotICAgICAgICAgICAg
dGhpcy5fbGFiZWxSaWdodEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInJpZ2h0IiwgKDEwMCAt
IHRoaXMuX3BlcmNlbnRhZ2VzLmVuZCkgKyAiJSIpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUKLX0KLQotCi1X
ZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5OYW1lQ29tcGFyYXRvciA9IGZ1bmN0aW9u
KGEsIGIpCi17Ci0gICAgdmFyIGFGaWxlTmFtZSA9IGEuX3JlcXVlc3QubmFtZSgpOwotICAgIHZh
ciBiRmlsZU5hbWUgPSBiLl9yZXF1ZXN0Lm5hbWUoKTsKLSAgICBpZiAoYUZpbGVOYW1lID4gYkZp
bGVOYW1lKQotICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAoYkZpbGVOYW1lID4gYUZpbGVOYW1l
KQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdlYkluc3BlY3Rvci5O
ZXR3b3JrRGF0YUdyaWROb2RlLlNpemVDb21wYXJhdG9yID0gZnVuY3Rpb24oYSwgYikKLXsKLSAg
ICBpZiAoYi5fcmVxdWVzdC5jYWNoZWQgJiYgIWEuX3JlcXVlc3QuY2FjaGVkKQotICAgICAgICBy
ZXR1cm4gMTsKLSAgICBpZiAoYS5fcmVxdWVzdC5jYWNoZWQgJiYgIWIuX3JlcXVlc3QuY2FjaGVk
KQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoYS5fcmVxdWVzdC50cmFuc2ZlclNpemUg
PT09IGIuX3JlcXVlc3QudHJhbnNmZXJTaXplKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBhLl9yZXF1ZXN0LnRyYW5zZmVyU2l6ZSAtIGIuX3JlcXVlc3QudHJhbnNmZXJTaXplOwot
fQotCi1XZWJJbnNwZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5Jbml0aWF0b3JDb21wYXJhdG9y
ID0gZnVuY3Rpb24oYSwgYikKLXsKLSAgICB2YXIgYUluaXRpYXRvciA9IGEuX3JlcXVlc3QuaW5p
dGlhdG9ySW5mbygpOwotICAgIHZhciBiSW5pdGlhdG9yID0gYi5fcmVxdWVzdC5pbml0aWF0b3JJ
bmZvKCk7Ci0KLSAgICBpZiAoYUluaXRpYXRvci50eXBlIDwgYkluaXRpYXRvci50eXBlKQotICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGFJbml0aWF0b3IudHlwZSA+IGJJbml0aWF0b3IudHlw
ZSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoYUluaXRpYXRvci5zb3VyY2UgPCBiSW5p
dGlhdG9yLnNvdXJjZSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChhSW5pdGlhdG9yLnNv
dXJjZSA+IGJJbml0aWF0b3Iuc291cmNlKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmIChh
SW5pdGlhdG9yLmxpbmVOdW1iZXIgPCBiSW5pdGlhdG9yLmxpbmVOdW1iZXIpCi0gICAgICAgIHJl
dHVybiAtMTsKLSAgICBpZiAoYUluaXRpYXRvci5saW5lTnVtYmVyID4gYkluaXRpYXRvci5saW5l
TnVtYmVyKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHJldHVybiAwOwotfQotCi1XZWJJbnNw
ZWN0b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5SZXF1ZXN0Q29va2llc0NvdW50Q29tcGFyYXRvciA9
IGZ1bmN0aW9uKGEsIGIpCi17Ci0gICAgdmFyIGFTY29yZSA9IGEuX3JlcXVlc3QucmVxdWVzdENv
b2tpZXMgPyBhLl9yZXF1ZXN0LnJlcXVlc3RDb29raWVzLmxlbmd0aCA6IDA7Ci0gICAgdmFyIGJT
Y29yZSA9IGIuX3JlcXVlc3QucmVxdWVzdENvb2tpZXMgPyBiLl9yZXF1ZXN0LnJlcXVlc3RDb29r
aWVzLmxlbmd0aCA6IDA7Ci0gICAgcmV0dXJuIGFTY29yZSAtIGJTY29yZTsKLX0KLQotV2ViSW5z
cGVjdG9yLk5ldHdvcmtEYXRhR3JpZE5vZGUuUmVzcG9uc2VDb29raWVzQ291bnRDb21wYXJhdG9y
ID0gZnVuY3Rpb24oYSwgYikKLXsKLSAgICB2YXIgYVNjb3JlID0gYS5fcmVxdWVzdC5yZXNwb25z
ZUNvb2tpZXMgPyBhLl9yZXF1ZXN0LnJlc3BvbnNlQ29va2llcy5sZW5ndGggOiAwOwotICAgIHZh
ciBiU2NvcmUgPSBiLl9yZXF1ZXN0LnJlc3BvbnNlQ29va2llcyA/IGIuX3JlcXVlc3QucmVzcG9u
c2VDb29raWVzLmxlbmd0aCA6IDA7Ci0gICAgcmV0dXJuIGFTY29yZSAtIGJTY29yZTsKLX0KLQot
V2ViSW5zcGVjdG9yLk5ldHdvcmtEYXRhR3JpZE5vZGUuUmVxdWVzdFByb3BlcnR5Q29tcGFyYXRv
ciA9IGZ1bmN0aW9uKHByb3BlcnR5TmFtZSwgcmV2ZXJ0LCBhLCBiKQotewotICAgIHZhciBhVmFs
dWUgPSBhLl9yZXF1ZXN0W3Byb3BlcnR5TmFtZV07Ci0gICAgdmFyIGJWYWx1ZSA9IGIuX3JlcXVl
c3RbcHJvcGVydHlOYW1lXTsKLSAgICBpZiAoYVZhbHVlID4gYlZhbHVlKQotICAgICAgICByZXR1
cm4gcmV2ZXJ0ID8gLTEgOiAxOwotICAgIGlmIChiVmFsdWUgPiBhVmFsdWUpCi0gICAgICAgIHJl
dHVybiByZXZlcnQgPyAxIDogLTE7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtQYW5lbERlc2NyaXB0b3IuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdvcmtQYW5lbERlc2NyaXB0
b3IuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1Njc1ODMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrUGFuZWxEZXNjcmlw
dG9yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLgotICog
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlBhbmVsRGVz
Y3JpcHRvcn0KLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUuUHJvdmlk
ZXJ9Ci0gKi8KLVdlYkluc3BlY3Rvci5OZXR3b3JrUGFuZWxEZXNjcmlwdG9yID0gZnVuY3Rpb24o
KQotewotICAgIFdlYkluc3BlY3Rvci5QYW5lbERlc2NyaXB0b3IuY2FsbCh0aGlzLCAibmV0d29y
ayIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTmV0d29yayIpLCAiTmV0d29ya1BhbmVsIiwgIk5l
dHdvcmtQYW5lbC5qcyIpOwotICAgIFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5yZWdpc3RlclBy
b3ZpZGVyKHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuTmV0d29ya1BhbmVsRGVzY3JpcHRvci5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqIAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRl
eHRNZW51fSBjb250ZXh0TWVudQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAg
Ki8KLSAgICBhcHBlbmRBcHBsaWNhYmxlSXRlbXM6IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0TWVu
dSwgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLk5ldHdvcmtSZXF1ZXN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhp
cy5wYW5lbCgpLmFwcGVuZEFwcGxpY2FibGVJdGVtcyhldmVudCwgY29udGV4dE1lbnUsIHRhcmdl
dCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRv
ci5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvTmV0d29ya1JlcXVlc3QuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL05ldHdvcmtSZXF1ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjU3
ZDE1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmV0
d29ya1JlcXVlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NjQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqIEBpbXBsZW1l
bnRzIHtXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfQotICogQHBhcmFtIHtOZXR3b3JrQWdl
bnQuUmVxdWVzdElkfSByZXF1ZXN0SWQKLSAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAqIEBwYXJh
bSB7c3RyaW5nfSBkb2N1bWVudFVSTAotICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuRnJhbWVJZH0g
ZnJhbWVJZAotICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuTG9hZGVySWR9IGxvYWRlcklkCi0gKi8K
LVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdCA9IGZ1bmN0aW9uKHJlcXVlc3RJZCwgdXJsLCBk
b2N1bWVudFVSTCwgZnJhbWVJZCwgbG9hZGVySWQpCi17Ci0gICAgdGhpcy5fcmVxdWVzdElkID0g
cmVxdWVzdElkOwotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMuX2RvY3VtZW50VVJMID0g
ZG9jdW1lbnRVUkw7Ci0gICAgdGhpcy5fZnJhbWVJZCA9IGZyYW1lSWQ7Ci0gICAgdGhpcy5fbG9h
ZGVySWQgPSBsb2FkZXJJZDsKLSAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTsKLSAgICB0aGlzLl9l
bmRUaW1lID0gLTE7Ci0KLSAgICB0aGlzLnN0YXR1c0NvZGUgPSAwOwotICAgIHRoaXMuc3RhdHVz
VGV4dCA9ICIiOwotICAgIHRoaXMucmVxdWVzdE1ldGhvZCA9ICIiOwotICAgIHRoaXMucmVxdWVz
dFRpbWUgPSAwOwotICAgIHRoaXMucmVjZWl2ZUhlYWRlcnNFbmQgPSAwOwotCi0gICAgdGhpcy5f
dHlwZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLk90aGVyOwotICAgIHRoaXMuX2NvbnRl
bnRFbmNvZGVkID0gZmFsc2U7Ci0gICAgdGhpcy5fcGVuZGluZ0NvbnRlbnRDYWxsYmFja3MgPSBb
XTsKLSAgICB0aGlzLl9mcmFtZXMgPSBbXTsKLX0KLQotV2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1
ZXN0LkV2ZW50cyA9IHsKLSAgICBGaW5pc2hlZExvYWRpbmc6ICJGaW5pc2hlZExvYWRpbmciLAot
ICAgIFRpbWluZ0NoYW5nZWQ6ICJUaW1pbmdDaGFuZ2VkIiwKLSAgICBSZXF1ZXN0SGVhZGVyc0No
YW5nZWQ6ICJSZXF1ZXN0SGVhZGVyc0NoYW5nZWQiLAotICAgIFJlc3BvbnNlSGVhZGVyc0NoYW5n
ZWQ6ICJSZXNwb25zZUhlYWRlcnNDaGFuZ2VkIiwKLX0KLQotLyoqIEBlbnVtIHtzdHJpbmd9ICov
Ci1XZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QuSW5pdGlhdG9yVHlwZSA9IHsKLSAgICBPdGhl
cjogIm90aGVyIiwKLSAgICBQYXJzZXI6ICJwYXJzZXIiLAotICAgIFJlZGlyZWN0OiAicmVkaXJl
Y3QiLAotICAgIFNjcmlwdDogInNjcmlwdCIKLX0KLQotLyoqIEB0eXBlZGVmIHt7bmFtZTogc3Ry
aW5nLCB2YWx1ZTogc3RyaW5nfX0gKi8KLVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5OYW1l
VmFsdWU7Ci0KLVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5wcm90b3R5cGUgPSB7Ci0gICAg
LyoqCi0gICAgICogQHJldHVybiB7TmV0d29ya0FnZW50LlJlcXVlc3RJZH0KLSAgICAgKi8KLSAg
ICBnZXQgcmVxdWVzdElkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0SWQ7
Ci0gICAgfSwKLQotICAgIHNldCByZXF1ZXN0SWQocmVxdWVzdElkKQotICAgIHsKLSAgICAgICAg
dGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdElkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0IHVybCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fdXJsOwotICAgIH0sCi0KLSAgICBzZXQgdXJsKHgpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fdXJsID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMuX3VybCA9IHg7Ci0gICAgICAgIHRoaXMuX3BhcnNlZFVSTCA9IG5ldyBXZWJJbnNwZWN0b3Iu
UGFyc2VkVVJMKHgpOwotICAgICAgICBkZWxldGUgdGhpcy5fcGFyc2VkUXVlcnlQYXJhbWV0ZXJz
OwotICAgICAgICBkZWxldGUgdGhpcy5fbmFtZTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3BhdGg7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAg
ICBnZXQgZG9jdW1lbnRVUkwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50
VVJMOwotICAgIH0sCi0KLSAgICBnZXQgcGFyc2VkVVJMKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9wYXJzZWRVUkw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge05l
dHdvcmtBZ2VudC5GcmFtZUlkfQotICAgICAqLwotICAgIGdldCBmcmFtZUlkKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUlkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtOZXR3b3JrQWdlbnQuTG9hZGVySWR9Ci0gICAgICovCi0gICAgZ2V0IGxvYWRlcklk
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZXJJZDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGdldCBzdGFydFRpbWUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZSB8fCAtMTsKLSAgICB9LAot
Ci0gICAgc2V0IHN0YXJ0VGltZSh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0g
eDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwot
ICAgIGdldCByZXNwb25zZVJlY2VpdmVkVGltZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fcmVzcG9uc2VSZWNlaXZlZFRpbWUgfHwgLTE7Ci0gICAgfSwKLQotICAgIHNldCByZXNwb25z
ZVJlY2VpdmVkVGltZSh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzcG9uc2VSZWNlaXZlZFRp
bWUgPSB4OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAg
ICovCi0gICAgZ2V0IGVuZFRpbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VuZFRp
bWUgfHwgLTE7Ci0gICAgfSwKLQotICAgIHNldCBlbmRUaW1lKHgpCi0gICAgewotICAgICAgICBp
ZiAodGhpcy50aW1pbmcgJiYgdGhpcy50aW1pbmcucmVxdWVzdFRpbWUpIHsKLSAgICAgICAgICAg
IC8vIENoZWNrIGFnYWluc3QgYWNjdXJhdGUgcmVzcG9uc2VSZWNlaXZlZFRpbWUuCi0gICAgICAg
ICAgICB0aGlzLl9lbmRUaW1lID0gTWF0aC5tYXgoeCwgdGhpcy5yZXNwb25zZVJlY2VpdmVkVGlt
ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBQcmVmZXIgZW5kVGltZSBzaW5j
ZSBpdCBtaWdodCBiZSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrLgotICAgICAgICAgICAgdGhpcy5f
ZW5kVGltZSA9IHg7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcmVzcG9uc2VSZWNlaXZlZFRpbWUg
PiB4KQotICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlUmVjZWl2ZWRUaW1lID0geDsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAg
ICovCi0gICAgZ2V0IGR1cmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lbmRUaW1l
ID09PSAtMSB8fCB0aGlzLl9zdGFydFRpbWUgPT09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICByZXR1cm4gdGhpcy5fZW5kVGltZSAtIHRoaXMuX3N0YXJ0VGltZTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGdldCBs
YXRlbmN5KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZXNwb25zZVJlY2VpdmVkVGltZSA9
PT0gLTEgfHwgdGhpcy5fc3RhcnRUaW1lID09PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlUmVjZWl2ZWRUaW1lIC0gdGhpcy5fc3RhcnRU
aW1lOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICov
Ci0gICAgZ2V0IHJlY2VpdmVEdXJhdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZW5k
VGltZSA9PT0gLTEgfHwgdGhpcy5fcmVzcG9uc2VSZWNlaXZlZFRpbWUgPT09IC0xKQotICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXR1cm4gdGhpcy5fZW5kVGltZSAtIHRoaXMuX3Jl
c3BvbnNlUmVjZWl2ZWRUaW1lOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtu
dW1iZXJ9Ci0gICAgICovCi0gICAgZ2V0IHJlc291cmNlU2l6ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fcmVzb3VyY2VTaXplIHx8IDA7Ci0gICAgfSwKLQotICAgIHNldCByZXNvdXJj
ZVNpemUoeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlU2l6ZSA9IHg7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgdHJh
bnNmZXJTaXplKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmNhY2hlZCkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBpZiAodGhpcy5zdGF0dXNDb2RlID09PSAzMDQpIC8vIE5vdCBt
b2RpZmllZAotICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VIZWFkZXJzU2l6ZTsKLSAg
ICAgICAgaWYgKHRoaXMuX3RyYW5zZmVyU2l6ZSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3RyYW5zZmVyU2l6ZTsKLSAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCByZWNl
aXZlIGFjdHVhbCB0cmFuc2ZlciBzaXplIGZyb20gbmV0d29yawotICAgICAgICAvLyBzdGFjaywg
d2UgcHJlZmVyIHVzaW5nIENvbnRlbnQtTGVuZ3RoIG92ZXIgcmVzb3VyY2VTaXplIGFzCi0gICAg
ICAgIC8vIHJlc291cmNlU2l6ZSBtYXkgZGlmZmVyIGZyb20gYWN0dWFsIHRyYW5zZmVyIHNpemUg
aWYgcGxhdGZvcm0ncwotICAgICAgICAvLyBuZXR3b3JrIHN0YWNrIHBlcmZvcm1lZCBkZWNvZGlu
ZyAoZS5nLiBnemlwIGRlY29tcHJlc3Npb24pLgotICAgICAgICAvLyBUaGUgQ29udGVudC1MZW5n
dGgsIHRob3VnaCwgaXMgZXhwZWN0ZWQgdG8gY29tZSBmcm9tIHJhdwotICAgICAgICAvLyByZXNw
b25zZSBoZWFkZXJzIGFuZCB3aWxsIHJlZmxlY3QgYWN0dWFsIHRyYW5zZmVyIGxlbmd0aC4KLSAg
ICAgICAgLy8gVGhpcyB3b24ndCB3b3JrIGZvciBjaHVua2VkIGNvbnRlbnQgZW5jb2RpbmcsIHNv
IGZhbGwgYmFjayB0bwotICAgICAgICAvLyByZXNvdXJjZVNpemUgd2hlbiB3ZSBkb24ndCBoYXZl
IENvbnRlbnQtTGVuZ3RoLiBUaGlzIHN0aWxsIHdvbid0Ci0gICAgICAgIC8vIHdvcmsgZm9yIGNo
dW5rcyB3aXRoIG5vbi10cml2aWFsIGVuY29kaW5ncy4gV2UgbmVlZCBhIHdheSB0bwotICAgICAg
ICAvLyBnZXQgYWN0dWFsIHRyYW5zZmVyIHNpemUgZnJvbSB0aGUgbmV0d29yayBzdGFjay4KLSAg
ICAgICAgdmFyIGJvZHlTaXplID0gTnVtYmVyKHRoaXMucmVzcG9uc2VIZWFkZXJWYWx1ZSgiQ29u
dGVudC1MZW5ndGgiKSB8fCB0aGlzLnJlc291cmNlU2l6ZSk7Ci0gICAgICAgIHJldHVybiB0aGlz
LnJlc3BvbnNlSGVhZGVyc1NpemUgKyBib2R5U2l6ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IHgKLSAgICAgKi8KLSAgICBpbmNyZWFzZVRyYW5zZmVyU2l6ZTog
ZnVuY3Rpb24oeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RyYW5zZmVyU2l6ZSA9ICh0aGlzLl90
cmFuc2ZlclNpemUgfHwgMCkgKyB4OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtib29sZWFufQotICAgICAqLwotICAgIGdldCBmaW5pc2hlZCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fZmluaXNoZWQ7Ci0gICAgfSwKLQotICAgIHNldCBmaW5pc2hlZCh4KQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkID09PSB4KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHRoaXMuX2ZpbmlzaGVkID0geDsKLQotICAgICAgICBpZiAoeCkgewotICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLk5ldHdv
cmtSZXF1ZXN0LkV2ZW50cy5GaW5pc2hlZExvYWRpbmcsIHRoaXMpOwotICAgICAgICAgICAgaWYg
KHRoaXMuX3BlbmRpbmdDb250ZW50Q2FsbGJhY2tzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICB0
aGlzLl9pbm5lclJlcXVlc3RDb250ZW50KCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBnZXQgZmFpbGVkKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mYWlsZWQ7Ci0gICAgfSwKLQotICAgIHNldCBmYWls
ZWQoeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2ZhaWxlZCA9IHg7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgZ2V0IGNhbmNlbGVkKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jYW5jZWxlZDsKLSAgICB9LAotCi0gICAgc2V0
IGNhbmNlbGVkKHgpCi0gICAgewotICAgICAgICB0aGlzLl9jYW5jZWxlZCA9IHg7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgZ2V0IGNh
Y2hlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkOwotICAgIH0sCi0KLSAg
ICBzZXQgY2FjaGVkKHgpCi0gICAgewotICAgICAgICB0aGlzLl9jYWNoZWQgPSB4OwotICAgICAg
ICBpZiAoeCkKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1pbmc7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge05ldHdvcmtBZ2VudC5SZXNvdXJjZVRpbWluZ3x1bmRlZmlu
ZWR9Ci0gICAgICovCi0gICAgZ2V0IHRpbWluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fdGltaW5nOwotICAgIH0sCi0KLSAgICBzZXQgdGltaW5nKHgpCi0gICAgewotICAgICAgICBp
ZiAoeCAmJiAhdGhpcy5fY2FjaGVkKSB7Ci0gICAgICAgICAgICAvLyBUYWtlIHN0YXJ0VGltZSBh
bmQgcmVzcG9uc2VSZWNlaXZlZFRpbWUgZnJvbSB0aW1pbmcgZGF0YSBmb3IgYmV0dGVyIGFjY3Vy
YWN5LgotICAgICAgICAgICAgLy8gVGltaW5nJ3MgcmVxdWVzdFRpbWUgaXMgYSBiYXNlbGluZSBp
biBzZWNvbmRzLCByZXN0IG9mIHRoZSBudW1iZXJzIHRoZXJlIGFyZSB0aWNrcyBpbiBtaWxsaXMu
Ci0gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB4LnJlcXVlc3RUaW1lOwotICAgICAgICAg
ICAgdGhpcy5fcmVzcG9uc2VSZWNlaXZlZFRpbWUgPSB4LnJlcXVlc3RUaW1lICsgeC5yZWNlaXZl
SGVhZGVyc0VuZCAvIDEwMDAuMDsKLQotICAgICAgICAgICAgdGhpcy5fdGltaW5nID0geDsKLSAg
ICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5OZXR3
b3JrUmVxdWVzdC5FdmVudHMuVGltaW5nQ2hhbmdlZCwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGdldCBt
aW1lVHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWltZVR5cGU7Ci0gICAgfSwK
LQotICAgIHNldCBtaW1lVHlwZSh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fbWltZVR5cGUgPSB4
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0g
ICAgZ2V0IGRpc3BsYXlOYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wYXJzZWRV
UkwuZGlzcGxheU5hbWU7Ci0gICAgfSwKLQotICAgIG5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9uYW1lKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7Ci0g
ICAgICAgIHRoaXMuX3BhcnNlTmFtZUFuZFBhdGhGcm9tVVJMKCk7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9uYW1lOwotICAgIH0sCi0KLSAgICBwYXRoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fcGF0aCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXRoOwotICAgICAg
ICB0aGlzLl9wYXJzZU5hbWVBbmRQYXRoRnJvbVVSTCgpOwotICAgICAgICByZXR1cm4gdGhpcy5f
cGF0aDsKLSAgICB9LAotCi0gICAgX3BhcnNlTmFtZUFuZFBhdGhGcm9tVVJMOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fcGFyc2VkVVJMLmlzRGF0YVVSTCgpKSB7Ci0gICAg
ICAgICAgICB0aGlzLl9uYW1lID0gdGhpcy5fcGFyc2VkVVJMLmRhdGFVUkxEaXNwbGF5TmFtZSgp
OwotICAgICAgICAgICAgdGhpcy5fcGF0aCA9ICIiOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
X3BhcnNlZFVSTC5pc0Fib3V0QmxhbmsoKSkgewotICAgICAgICAgICAgdGhpcy5fbmFtZSA9IHRo
aXMuX3BhcnNlZFVSTC51cmw7Ci0gICAgICAgICAgICB0aGlzLl9wYXRoID0gIiI7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9wYXRoID0gdGhpcy5fcGFyc2VkVVJMLmhvc3Qg
KyB0aGlzLl9wYXJzZWRVUkwuZm9sZGVyUGF0aENvbXBvbmVudHM7Ci0gICAgICAgICAgICB0aGlz
Ll9wYXRoID0gdGhpcy5fcGF0aC50cmltVVJMKFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlRG9t
YWluID8gV2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VEb21haW4gOiAiIik7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5fcGFyc2VkVVJMLmxhc3RQYXRoQ29tcG9uZW50IHx8IHRoaXMuX3BhcnNlZFVS
TC5xdWVyeVBhcmFtcykKLSAgICAgICAgICAgICAgICB0aGlzLl9uYW1lID0gdGhpcy5fcGFyc2Vk
VVJMLmxhc3RQYXRoQ29tcG9uZW50ICsgKHRoaXMuX3BhcnNlZFVSTC5xdWVyeVBhcmFtcyA/ICI/
IiArIHRoaXMuX3BhcnNlZFVSTC5xdWVyeVBhcmFtcyA6ICIiKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHRoaXMuX3BhcnNlZFVSTC5mb2xkZXJQYXRoQ29tcG9uZW50cykgewotICAgICAgICAgICAg
ICAgIHRoaXMuX25hbWUgPSB0aGlzLl9wYXJzZWRVUkwuZm9sZGVyUGF0aENvbXBvbmVudHMuc3Vi
c3RyaW5nKHRoaXMuX3BhcnNlZFVSTC5mb2xkZXJQYXRoQ29tcG9uZW50cy5sYXN0SW5kZXhPZigi
LyIpICsgMSkgKyAiLyI7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGF0aCA9IHRoaXMuX3BhdGgu
c3Vic3RyaW5nKDAsIHRoaXMuX3BhdGgubGFzdEluZGV4T2YoIi8iKSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuX25hbWUgPSB0aGlzLl9wYXJzZWRVUkwuaG9z
dDsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAq
LwotICAgIGdldCBmb2xkZXIoKQotICAgIHsKLSAgICAgICAgdmFyIHBhdGggPSB0aGlzLl9wYXJz
ZWRVUkwucGF0aDsKLSAgICAgICAgdmFyIGluZGV4T2ZRdWVyeSA9IHBhdGguaW5kZXhPZigiPyIp
OwotICAgICAgICBpZiAoaW5kZXhPZlF1ZXJ5ICE9PSAtMSkKLSAgICAgICAgICAgIHBhdGggPSBw
YXRoLnN1YnN0cmluZygwLCBpbmRleE9mUXVlcnkpOwotICAgICAgICB2YXIgbGFzdFNsYXNoSW5k
ZXggPSBwYXRoLmxhc3RJbmRleE9mKCIvIik7Ci0gICAgICAgIHJldHVybiBsYXN0U2xhc2hJbmRl
eCAhPT0gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBsYXN0U2xhc2hJbmRleCkgOiAiIjsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJlc291cmNlVHlwZX0K
LSAgICAgKi8KLSAgICBnZXQgdHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdHlw
ZTsKLSAgICB9LAotCi0gICAgc2V0IHR5cGUoeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3R5cGUg
PSB4OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgZ2V0IGRvbWFpbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VkVVJM
Lmhvc3Q7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3Iu
TmV0d29ya1JlcXVlc3R9Ci0gICAgICovCi0gICAgZ2V0IHJlZGlyZWN0U291cmNlKCkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLnJlZGlyZWN0cyAmJiB0aGlzLnJlZGlyZWN0cy5sZW5ndGggPiAw
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RzW3RoaXMucmVkaXJlY3RzLmxlbmd0
aCAtIDFdOwotICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RTb3VyY2U7Ci0gICAgfSwKLQot
ICAgIHNldCByZWRpcmVjdFNvdXJjZSh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVkaXJlY3RT
b3VyY2UgPSB4OwotICAgICAgICBkZWxldGUgdGhpcy5faW5pdGlhdG9ySW5mbzsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLk5ldHdvcmtS
ZXF1ZXN0Lk5hbWVWYWx1ZT59Ci0gICAgICovCi0gICAgZ2V0IHJlcXVlc3RIZWFkZXJzKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0SGVhZGVycyB8fCBbXTsKLSAgICB9LAot
Ci0gICAgc2V0IHJlcXVlc3RIZWFkZXJzKHgpCi0gICAgewotICAgICAgICB0aGlzLl9yZXF1ZXN0
SGVhZGVycyA9IHg7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zb3J0ZWRSZXF1ZXN0SGVhZGVyczsK
LSAgICAgICAgZGVsZXRlIHRoaXMuX3JlcXVlc3RDb29raWVzOwotCi0gICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVudHMu
UmVxdWVzdEhlYWRlcnNDaGFuZ2VkKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7c3RyaW5nfQotICAgICAqLwotICAgIGdldCByZXF1ZXN0SGVhZGVyc1RleHQoKQotICAgIHsK
LSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9yZXF1ZXN0SGVhZGVyc1RleHQgPT09ICJ1bmRlZmlu
ZWQiKSB7Ci0gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0SGVhZGVyc1RleHQgPSB0aGlzLnJlcXVl
c3RNZXRob2QgKyAiICIgKyB0aGlzLnVybCArICIgSFRUUC8xLjFcclxuIjsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yZXF1ZXN0SGVhZGVycy5sZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0SGVhZGVyc1RleHQgKz0gdGhpcy5yZXF1ZXN0SGVh
ZGVyc1tpXS5uYW1lICsgIjogIiArIHRoaXMucmVxdWVzdEhlYWRlcnNbaV0udmFsdWUgKyAiXHJc
biI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RIZWFkZXJzVGV4dDsK
LSAgICB9LAotCi0gICAgc2V0IHJlcXVlc3RIZWFkZXJzVGV4dCh4KQotICAgIHsKLSAgICAgICAg
dGhpcy5fcmVxdWVzdEhlYWRlcnNUZXh0ID0geDsKLQotICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QuRXZlbnRzLlJlcXVlc3RI
ZWFkZXJzQ2hhbmdlZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJl
cn0KLSAgICAgKi8KLSAgICBnZXQgcmVxdWVzdEhlYWRlcnNTaXplKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLnJlcXVlc3RIZWFkZXJzVGV4dC5sZW5ndGg7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4geyFBcnJheS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5O
YW1lVmFsdWU+fQotICAgICAqLwotICAgIGdldCBzb3J0ZWRSZXF1ZXN0SGVhZGVycygpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5fc29ydGVkUmVxdWVzdEhlYWRlcnMgIT09IHVuZGVmaW5lZCkK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3J0ZWRSZXF1ZXN0SGVhZGVyczsKLQotICAgICAg
ICB0aGlzLl9zb3J0ZWRSZXF1ZXN0SGVhZGVycyA9IFtdOwotICAgICAgICB0aGlzLl9zb3J0ZWRS
ZXF1ZXN0SGVhZGVycyA9IHRoaXMucmVxdWVzdEhlYWRlcnMuc2xpY2UoKTsKLSAgICAgICAgdGhp
cy5fc29ydGVkUmVxdWVzdEhlYWRlcnMuc29ydChmdW5jdGlvbihhLGIpIHsgcmV0dXJuIGEubmFt
ZS50b0xvd2VyQ2FzZSgpLmNvbXBhcmVUbyhiLm5hbWUudG9Mb3dlckNhc2UoKSkgfSk7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zb3J0ZWRSZXF1ZXN0SGVhZGVyczsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlck5hbWUKLSAgICAgKiBAcmV0dXJuIHtzdHJp
bmd8dW5kZWZpbmVkfQotICAgICAqLwotICAgIHJlcXVlc3RIZWFkZXJWYWx1ZTogZnVuY3Rpb24o
aGVhZGVyTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJWYWx1ZSh0aGlz
LnJlcXVlc3RIZWFkZXJzLCBoZWFkZXJOYW1lKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5Db29raWU+fQotICAgICAqLwotICAgIGdldCBy
ZXF1ZXN0Q29va2llcygpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3JlcXVlc3RDb29raWVz
KQotICAgICAgICAgICAgdGhpcy5fcmVxdWVzdENvb2tpZXMgPSBXZWJJbnNwZWN0b3IuQ29va2ll
UGFyc2VyLnBhcnNlQ29va2llKHRoaXMucmVxdWVzdEhlYWRlclZhbHVlKCJDb29raWUiKSk7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q29va2llczsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH0KLSAgICAgKi8KLSAgICBnZXQgcmVxdWVz
dEZvcm1EYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Rm9ybURhdGE7
Ci0gICAgfSwKLQotICAgIHNldCByZXF1ZXN0Rm9ybURhdGEoeCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3JlcXVlc3RGb3JtRGF0YSA9IHg7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9wYXJzZWRGb3Jt
UGFyYW1ldGVyczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfHVu
ZGVmaW5lZH0KLSAgICAgKi8KLSAgICBnZXQgcmVxdWVzdEh0dHBWZXJzaW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBmaXJzdExpbmUgPSB0aGlzLnJlcXVlc3RIZWFkZXJzVGV4dC5zcGxpdCgvXHJc
bi8pWzBdOwotICAgICAgICB2YXIgbWF0Y2ggPSBmaXJzdExpbmUubWF0Y2goLyhIVFRQXC9cZCtc
LlxkKykkLyk7Ci0gICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogdW5kZWZpbmVkOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJbnNwZWN0b3Iu
TmV0d29ya1JlcXVlc3QuTmFtZVZhbHVlPn0KLSAgICAgKi8KLSAgICBnZXQgcmVzcG9uc2VIZWFk
ZXJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZUhlYWRlcnMgfHwgW107
Ci0gICAgfSwKLQotICAgIHNldCByZXNwb25zZUhlYWRlcnMoeCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3Jlc3BvbnNlSGVhZGVycyA9IHg7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zb3J0ZWRSZXNw
b25zZUhlYWRlcnM7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9yZXNwb25zZUNvb2tpZXM7Ci0KLSAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLk5ldHdvcmtS
ZXF1ZXN0LkV2ZW50cy5SZXNwb25zZUhlYWRlcnNDaGFuZ2VkKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGdldCByZXNwb25zZUhlYWRl
cnNUZXh0KCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fcmVzcG9uc2VIZWFkZXJz
VGV4dCA9PT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlSGVhZGVy
c1RleHQgPSAiSFRUUC8xLjEgIiArIHRoaXMuc3RhdHVzQ29kZSArICIgIiArIHRoaXMuc3RhdHVz
VGV4dCArICJcclxuIjsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yZXNw
b25zZUhlYWRlcnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VI
ZWFkZXJzVGV4dCArPSB0aGlzLnJlc3BvbnNlSGVhZGVyc1tpXS5uYW1lICsgIjogIiArIHRoaXMu
cmVzcG9uc2VIZWFkZXJzW2ldLnZhbHVlICsgIlxyXG4iOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9yZXNwb25zZUhlYWRlcnNUZXh0OwotICAgIH0sCi0KLSAgICBzZXQgcmVzcG9u
c2VIZWFkZXJzVGV4dCh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzcG9uc2VIZWFkZXJzVGV4
dCA9IHg7Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLk5ldHdvcmtSZXF1ZXN0LkV2ZW50cy5SZXNwb25zZUhlYWRlcnNDaGFuZ2VkKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGdldCBy
ZXNwb25zZUhlYWRlcnNTaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNl
SGVhZGVyc1RleHQubGVuZ3RoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHsh
QXJyYXkuPCFXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QuTmFtZVZhbHVlPn0KLSAgICAgKi8K
LSAgICBnZXQgc29ydGVkUmVzcG9uc2VIZWFkZXJzKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9zb3J0ZWRSZXNwb25zZUhlYWRlcnMgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLl9zb3J0ZWRSZXNwb25zZUhlYWRlcnM7Ci0KLSAgICAgICAgdGhpcy5fc29ydGVkUmVz
cG9uc2VIZWFkZXJzID0gW107Ci0gICAgICAgIHRoaXMuX3NvcnRlZFJlc3BvbnNlSGVhZGVycyA9
IHRoaXMucmVzcG9uc2VIZWFkZXJzLnNsaWNlKCk7Ci0gICAgICAgIHRoaXMuX3NvcnRlZFJlc3Bv
bnNlSGVhZGVycy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEubmFtZS50b0xvd2VyQ2Fz
ZSgpLmNvbXBhcmVUbyhiLm5hbWUudG9Mb3dlckNhc2UoKSk7IH0pOwotICAgICAgICByZXR1cm4g
dGhpcy5fc29ydGVkUmVzcG9uc2VIZWFkZXJzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gaGVhZGVyTmFtZQotICAgICAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmlu
ZWR9Ci0gICAgICovCi0gICAgcmVzcG9uc2VIZWFkZXJWYWx1ZTogZnVuY3Rpb24oaGVhZGVyTmFt
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJWYWx1ZSh0aGlzLnJlc3BvbnNl
SGVhZGVycywgaGVhZGVyTmFtZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e0FycmF5LjxXZWJJbnNwZWN0b3IuQ29va2llPn0KLSAgICAgKi8KLSAgICBnZXQgcmVzcG9uc2VD
b29raWVzKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fcmVzcG9uc2VDb29raWVzKQotICAg
ICAgICAgICAgdGhpcy5fcmVzcG9uc2VDb29raWVzID0gV2ViSW5zcGVjdG9yLkNvb2tpZVBhcnNl
ci5wYXJzZVNldENvb2tpZSh0aGlzLnJlc3BvbnNlSGVhZGVyVmFsdWUoIlNldC1Db29raWUiKSk7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZUNvb2tpZXM7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4gez9zdHJpbmd9Ci0gICAgICovCi0gICAgcXVlcnlTdHJpbmc6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9xdWVyeVN0cmluZykKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9xdWVyeVN0cmluZzsKLSAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0g
dGhpcy51cmwuc3BsaXQoIj8iLCAyKVsxXTsKLSAgICAgICAgaWYgKCFxdWVyeVN0cmluZykKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB0aGlzLl9xdWVyeVN0cmluZyA9IHF1ZXJ5
U3RyaW5nLnNwbGl0KCIjIiwgMilbMF07Ci0gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVN0cmlu
ZzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7P0FycmF5LjwhV2ViSW5zcGVj
dG9yLk5ldHdvcmtSZXF1ZXN0Lk5hbWVWYWx1ZT59Ci0gICAgICovCi0gICAgZ2V0IHF1ZXJ5UGFy
YW1ldGVycygpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcGFyc2VkUXVlcnlQYXJhbWV0ZXJz
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZFF1ZXJ5UGFyYW1ldGVyczsKLSAgICAg
ICAgdmFyIHF1ZXJ5U3RyaW5nID0gdGhpcy5xdWVyeVN0cmluZygpOwotICAgICAgICBpZiAoIXF1
ZXJ5U3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHRoaXMuX3BhcnNl
ZFF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuX3BhcnNlUGFyYW1ldGVycyhxdWVyeVN0cmluZyk7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9wYXJzZWRRdWVyeVBhcmFtZXRlcnM7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4gez9BcnJheS48IVdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVz
dC5OYW1lVmFsdWU+fQotICAgICAqLwotICAgIGdldCBmb3JtUGFyYW1ldGVycygpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fcGFyc2VkRm9ybVBhcmFtZXRlcnMpCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5fcGFyc2VkRm9ybVBhcmFtZXRlcnM7Ci0gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0
Rm9ybURhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIHJlcXVlc3RD
b250ZW50VHlwZSA9IHRoaXMucmVxdWVzdENvbnRlbnRUeXBlKCk7Ci0gICAgICAgIGlmICghcmVx
dWVzdENvbnRlbnRUeXBlIHx8ICFyZXF1ZXN0Q29udGVudFR5cGUubWF0Y2goL15hcHBsaWNhdGlv
blwveC13d3ctZm9ybS11cmxlbmNvZGVkXHMqKDsuKik/JC9pKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICB0aGlzLl9wYXJzZWRGb3JtUGFyYW1ldGVycyA9IHRoaXMuX3BhcnNl
UGFyYW1ldGVycyh0aGlzLnJlcXVlc3RGb3JtRGF0YSk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9w
YXJzZWRGb3JtUGFyYW1ldGVyczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
c3RyaW5nfHVuZGVmaW5lZH0KLSAgICAgKi8KLSAgICBnZXQgcmVzcG9uc2VIdHRwVmVyc2lvbigp
Ci0gICAgewotICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnJlc3BvbnNlSGVhZGVyc1RleHQubWF0
Y2goL14oSFRUUFwvXGQrXC5cZCspLyk7Ci0gICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFd
IDogdW5kZWZpbmVkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
cXVlcnlTdHJpbmcKLSAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuTmV0d29y
a1JlcXVlc3QuTmFtZVZhbHVlPn0KLSAgICAgKi8KLSAgICBfcGFyc2VQYXJhbWV0ZXJzOiBmdW5j
dGlvbihxdWVyeVN0cmluZykKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHBhcnNlTmFtZVZhbHVl
KHBhaXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzcGxpdFBhaXIgPSBwYWlyLnNwbGl0
KCI9IiwgMik7Ci0gICAgICAgICAgICByZXR1cm4ge25hbWU6IHNwbGl0UGFpclswXSwgdmFsdWU6
IHNwbGl0UGFpclsxXSB8fCAiIn07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHF1ZXJ5U3Ry
aW5nLnNwbGl0KCImIikubWFwKHBhcnNlTmFtZVZhbHVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QuTmFtZVZh
bHVlPn0gaGVhZGVycwotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJOYW1lCi0gICAgICog
QHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH0KLSAgICAgKi8KLSAgICBfaGVhZGVyVmFsdWU6IGZ1
bmN0aW9uKGhlYWRlcnMsIGhlYWRlck5hbWUpCi0gICAgewotICAgICAgICBoZWFkZXJOYW1lID0g
aGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoaGVhZGVyc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGhlYWRlck5hbWUpCi0g
ICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaGVhZGVyc1tpXS52YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCF2YWx1ZXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKLSAgICAgICAgLy8gU2V0LUNvb2tpZSB2YWx1ZXMgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSAn
XG4nLCBub3QgY29tbWEsIG90aGVyd2lzZSBjb29raWVzIGNvdWxkIG5vdCBiZSBwYXJzZWQuCi0g
ICAgICAgIGlmIChoZWFkZXJOYW1lID09PSAic2V0LWNvb2tpZSIpCi0gICAgICAgICAgICByZXR1
cm4gdmFsdWVzLmpvaW4oIlxuIik7Ci0gICAgICAgIHJldHVybiB2YWx1ZXMuam9pbigiLCAiKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7P3N0cmluZ3x1bmRlZmluZWR9Ci0g
ICAgICovCi0gICAgZ2V0IGNvbnRlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Nv
bnRlbnQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAg
ICovCi0gICAgZ2V0IGNvbnRlbnRFbmNvZGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9jb250ZW50RW5jb2RlZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3Ry
aW5nfQotICAgICAqLwotICAgIGNvbnRlbnRVUkw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl91cmw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dl
Ykluc3BlY3Rvci5SZXNvdXJjZVR5cGV9Ci0gICAgICovCi0gICAgY29udGVudFR5cGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90eXBlOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmcsIGJvb2xlYW4sIHN0cmluZyl9IGNh
bGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQot
ICAgIHsKLSAgICAgICAgLy8gV2UgZG8gbm90IHN1cHBvcnQgY29udGVudCByZXRyaWV2YWwgZm9y
IFdlYlNvY2tldHMgYXQgdGhlIG1vbWVudC4KLSAgICAgICAgLy8gU2luY2UgV2ViU29ja2V0cyBh
cmUgcG90ZW50aWFsbHkgbG9uZy1saXZpbmcsIGZhaWwgcmVxdWVzdHMgaW1tZWRpYXRlbHkKLSAg
ICAgICAgLy8gdG8gcHJldmVudCBjYWxsZXIgYmxvY2tpbmcgdW50aWwgcmVzb3VyY2UgaXMgbWFy
a2VkIGFzIGZpbmlzaGVkLgotICAgICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3Iu
cmVzb3VyY2VUeXBlcy5XZWJTb2NrZXQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZh
bHNlLCB0aGlzLl9taW1lVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb250ZW50ICE9PSAidW5kZWZpbmVkIikgewotICAgICAg
ICAgICAgY2FsbGJhY2sodGhpcy5jb250ZW50IHx8IG51bGwsIHRoaXMuX2NvbnRlbnRFbmNvZGVk
LCB0aGlzLnR5cGUuY2Fub25pY2FsTWltZVR5cGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhpcy5fcGVuZGluZ0NvbnRlbnRDYWxsYmFja3MucHVzaChjYWxs
YmFjayk7Ci0gICAgICAgIGlmICh0aGlzLmZpbmlzaGVkKQotICAgICAgICAgICAgdGhpcy5faW5u
ZXJSZXF1ZXN0Q29udGVudCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gcXVlcnkKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhc2VTZW5zaXRpdmUKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVnZXgKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5
LjxXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyLlNlYXJjaE1hdGNoPil9IGNhbGxiYWNrCi0g
ICAgICovCi0gICAgc2VhcmNoSW5Db250ZW50OiBmdW5jdGlvbihxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBjYWxsYmFjayhbXSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNI
dHRwRmFtaWx5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gISF0aGlzLnVybC5t
YXRjaCgvXmh0dHBzPzovaSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0
cmluZ3x1bmRlZmluZWR9Ci0gICAgICovCi0gICAgcmVxdWVzdENvbnRlbnRUeXBlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyVmFsdWUoIkNvbnRl
bnQtVHlwZSIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQot
ICAgICAqLwotICAgIGlzUGluZ1JlcXVlc3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAidGV4dC9waW5nIiA9PT0gdGhpcy5yZXF1ZXN0Q29udGVudFR5cGUoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBoYXNFcnJv
clN0YXR1c0NvZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnN0YXR1
c0NvZGUgPj0gNDAwOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9
IGltYWdlCi0gICAgICovCi0gICAgcG9wdWxhdGVJbWFnZVNvdXJjZTogZnVuY3Rpb24oaW1hZ2Up
Ci0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMge1dlYkluc3BlY3Rvci5OZXR3
b3JrUmVxdWVzdH0KLSAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBjb250ZW50Ci0gICAgICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29kZWQKLSAgICAgICAgICogQHBhcmFtIHtz
dHJpbmd9IG1pbWVUeXBlCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBvblJlc291cmNl
Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciBpbWFnZVNyYyA9IHRoaXMuYXNEYXRhVVJMKCk7Ci0gICAgICAgICAgICBp
ZiAoaW1hZ2VTcmMgPT09IG51bGwpCi0gICAgICAgICAgICAgICAgaW1hZ2VTcmMgPSB0aGlzLnVy
bDsKLSAgICAgICAgICAgIGltYWdlLnNyYyA9IGltYWdlU3JjOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5yZXF1ZXN0Q29udGVudChvblJlc291cmNlQ29udGVudC5iaW5kKHRoaXMpKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7P3N0cmluZ30KLSAgICAgKi8KLSAgICBh
c0RhdGFVUkw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
Y29udGVudEFzRGF0YVVSTCh0aGlzLl9jb250ZW50LCB0aGlzLm1pbWVUeXBlLCB0aGlzLl9jb250
ZW50RW5jb2RlZCk7Ci0gICAgfSwKLQotICAgIF9pbm5lclJlcXVlc3RDb250ZW50OiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY29udGVudFJlcXVlc3RlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fY29udGVudFJlcXVlc3RlZCA9IHRydWU7Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAg
ICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IGNvbnRlbnRFbmNvZGVkCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBvblJlc291
cmNlQ29udGVudChlcnJvciwgY29udGVudCwgY29udGVudEVuY29kZWQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRoaXMuX2NvbnRlbnQgPSBlcnJvciA/IG51bGwgOiBjb250ZW50OwotICAgICAg
ICAgICAgdGhpcy5fY29udGVudEVuY29kZWQgPSBjb250ZW50RW5jb2RlZDsKLSAgICAgICAgICAg
IHZhciBjYWxsYmFja3MgPSB0aGlzLl9wZW5kaW5nQ29udGVudENhbGxiYWNrcy5zbGljZSgpOwot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICAgICAgY2FsbGJhY2tzW2ldKHRoaXMuX2NvbnRlbnQsIHRoaXMuX2NvbnRlbnRF
bmNvZGVkLCB0aGlzLl9taW1lVHlwZSk7Ci0gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ29udGVu
dENhbGxiYWNrcy5sZW5ndGggPSAwOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRlbnRS
ZXF1ZXN0ZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgTmV0d29ya0FnZW50LmdldFJlc3BvbnNlQm9k
eSh0aGlzLl9yZXF1ZXN0SWQsIG9uUmVzb3VyY2VDb250ZW50LmJpbmQodGhpcykpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHt7dHlwZTogV2ViSW5zcGVjdG9yLk5ldHdvcmtS
ZXF1ZXN0LkluaXRpYXRvclR5cGUsIHVybDogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgbGluZU51
bWJlcjogbnVtYmVyfX0KLSAgICAgKi8KLSAgICBpbml0aWF0b3JJbmZvOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5faW5pdGlhdG9ySW5mbykKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLl9pbml0aWF0b3JJbmZvOwotCi0gICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9y
Lk5ldHdvcmtSZXF1ZXN0LkluaXRpYXRvclR5cGUuT3RoZXI7Ci0gICAgICAgIHZhciB1cmwgPSAi
IjsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSAtSW5maW5pdHk7Ci0KLSAgICAgICAgaWYgKHRo
aXMucmVkaXJlY3RTb3VyY2UpIHsKLSAgICAgICAgICAgIHR5cGUgPSBXZWJJbnNwZWN0b3IuTmV0
d29ya1JlcXVlc3QuSW5pdGlhdG9yVHlwZS5SZWRpcmVjdDsKLSAgICAgICAgICAgIHVybCA9IHRo
aXMucmVkaXJlY3RTb3VyY2UudXJsOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5pdGlhdG9y
KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5pbml0aWF0b3IudHlwZSA9PT0gTmV0d29ya0FnZW50
LkluaXRpYXRvclR5cGUuUGFyc2VyKSB7Ci0gICAgICAgICAgICAgICAgdHlwZSA9IFdlYkluc3Bl
Y3Rvci5OZXR3b3JrUmVxdWVzdC5Jbml0aWF0b3JUeXBlLlBhcnNlcjsKLSAgICAgICAgICAgICAg
ICB1cmwgPSB0aGlzLmluaXRpYXRvci51cmw7Ci0gICAgICAgICAgICAgICAgbGluZU51bWJlciA9
IHRoaXMuaW5pdGlhdG9yLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
aW5pdGlhdG9yLnR5cGUgPT09IE5ldHdvcmtBZ2VudC5Jbml0aWF0b3JUeXBlLlNjcmlwdCkgewot
ICAgICAgICAgICAgICAgIHZhciB0b3BGcmFtZSA9IHRoaXMuaW5pdGlhdG9yLnN0YWNrVHJhY2Vb
MF07Ci0gICAgICAgICAgICAgICAgaWYgKHRvcEZyYW1lLnVybCkgewotICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gV2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0LkluaXRpYXRvclR5cGUuU2Ny
aXB0OwotICAgICAgICAgICAgICAgICAgICB1cmwgPSB0b3BGcmFtZS51cmw7Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmVOdW1iZXIgPSB0b3BGcmFtZS5saW5lTnVtYmVyOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2luaXRpYXRv
ckluZm8gPSB7dHlwZTogdHlwZSwgdXJsOiB1cmwsIHNvdXJjZTogV2ViSW5zcGVjdG9yLmRpc3Bs
YXlOYW1lRm9yVVJMKHVybCksIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJ9OwotICAgICAgICByZXR1
cm4gdGhpcy5faW5pdGlhdG9ySW5mbzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7IUFycmF5LjwhT2JqZWN0Pn0KLSAgICAgKi8KLSAgICBmcmFtZXM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbgotICAgICAqIEByZXR1cm4ge09iamVjdHx1bmRl
ZmluZWR9Ci0gICAgICovCi0gICAgZnJhbWU6IGZ1bmN0aW9uKHBvc2l0aW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lc1twb3NpdGlvbl07Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1lc3NhZ2UKLSAgICAgKiBAcGFyYW0ge251bWJl
cn0gdGltZQotICAgICAqLwotICAgIGFkZEZyYW1lRXJyb3I6IGZ1bmN0aW9uKGVycm9yTWVzc2Fn
ZSwgdGltZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3B1c2hGcmFtZSh7ZXJyb3JNZXNzYWdlOiBl
cnJvck1lc3NhZ2UsIHRpbWU6IHRpbWV9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHshTmV0d29ya0FnZW50LldlYlNvY2tldEZyYW1lfSByZXNwb25zZQotICAgICAqIEBwYXJh
bSB7bnVtYmVyfSB0aW1lCi0gICAgICogQHBhcmFtIHtib29sZWFufSBzZW50Ci0gICAgICovCi0g
ICAgYWRkRnJhbWU6IGZ1bmN0aW9uKHJlc3BvbnNlLCB0aW1lLCBzZW50KQotICAgIHsKLSAgICAg
ICAgcmVzcG9uc2UudGltZSA9IHRpbWU7Ci0gICAgICAgIGlmIChzZW50KQotICAgICAgICAgICAg
cmVzcG9uc2Uuc2VudCA9IHNlbnQ7Ci0gICAgICAgIHRoaXMuX3B1c2hGcmFtZShyZXNwb25zZSk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IU9iamVjdH0gZnJhbWVPckVycm9y
Ci0gICAgICovCi0gICAgX3B1c2hGcmFtZTogZnVuY3Rpb24oZnJhbWVPckVycm9yKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX2ZyYW1lcy5sZW5ndGggPj0gMTAwKQotICAgICAgICAgICAgdGhp
cy5fZnJhbWVzLnNwbGljZSgwLCAxMCk7Ci0gICAgICAgIHRoaXMuX2ZyYW1lcy5wdXNoKGZyYW1l
T3JFcnJvcik7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5w
cm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvTmV0d29ya1VJU291cmNlQ29kZVByb3ZpZGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9OZXR3b3JrVUlTb3VyY2VDb2RlUHJvdmlkZXIuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFjZWQyYjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrVUlTb3VyY2VDb2RlUHJvdmlkZXIuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5TaW1wbGVXb3Jrc3BhY2VQcm92aWRlcn0gbmV0d29ya1dvcmtzcGFjZVBy
b3ZpZGVyCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Xb3Jrc3BhY2V9IHdvcmtzcGFjZQotICov
Ci1XZWJJbnNwZWN0b3IuTmV0d29ya1VJU291cmNlQ29kZVByb3ZpZGVyID0gZnVuY3Rpb24obmV0
d29ya1dvcmtzcGFjZVByb3ZpZGVyLCB3b3Jrc3BhY2UpCi17Ci0gICAgdGhpcy5fbmV0d29ya1dv
cmtzcGFjZVByb3ZpZGVyID0gbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyOwotICAgIHRoaXMuX3dv
cmtzcGFjZSA9IHdvcmtzcGFjZTsKLSAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBl
cy5SZXNvdXJjZUFkZGVkLCB0aGlzLl9yZXNvdXJjZUFkZGVkLCB0aGlzKTsKLSAgICBXZWJJbnNw
ZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5NYWluRnJhbWVOYXZpZ2F0ZWQsIHRoaXMuX21haW5G
cmFtZU5hdmlnYXRlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuUGFyc2VkU2Ny
aXB0U291cmNlLCB0aGlzLl9wYXJzZWRTY3JpcHRTb3VyY2UsIHRoaXMpOwotCi0gICAgdGhpcy5f
cHJvY2Vzc2VkVVJMcyA9IHt9OwotICAgIHRoaXMuX2xhc3REeW5hbWljQW5vbnltb3VzU2NyaXB0
SW5kZXhGb3JVUkwgPSB7fTsKLX0KLQotV2ViSW5zcGVjdG9yLk5ldHdvcmtVSVNvdXJjZUNvZGVQ
cm92aWRlci5wcm90b3R5cGUgPSB7Ci0gICAgX3BvcHVsYXRlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBmdW5jdGlvbiBwb3B1bGF0ZUZyYW1lKGZyYW1lKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lLmNoaWxkRnJhbWVzLmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgICAgIHBvcHVsYXRlRnJhbWUuY2FsbCh0aGlzLCBmcmFtZS5jaGlsZEZyYW1l
c1tpXSk7Ci0KLSAgICAgICAgICAgIHZhciByZXNvdXJjZXMgPSBmcmFtZS5yZXNvdXJjZXMoKTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlQWRkZWQoe2RhdGE6cmVzb3VyY2VzW2ldfSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBwb3B1bGF0ZUZyYW1lLmNhbGwodGhpcywgV2ViSW5zcGVj
dG9yLnJlc291cmNlVHJlZU1vZGVsLm1haW5GcmFtZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9wYXJz
ZWRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHNjcmlw
dCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gKi8gKGV2ZW50LmRhdGEpOwotICAg
ICAgICBpZiAoIXNjcmlwdC5zb3VyY2VVUkwgfHwgc2NyaXB0LmlzSW5saW5lU2NyaXB0KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNT
ZXR0aW5ncy5zbmlwcGV0c1N1cHBvcnQuaXNFbmFibGVkKCkgJiYgc2NyaXB0LmlzU25pcHBldCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgaXNEeW5hbWljQW5vbnltb3VzU2Ny
aXB0OwotICAgICAgICAvLyBPbmx5IGFkZCB1aVNvdXJjZUNvZGVzIGZvcgotICAgICAgICAvLyAt
IGNvbnRlbnQgc2NyaXB0czsKLSAgICAgICAgLy8gLSBzY3JpcHRzIHdpdGggZXhwbGljaXQgc291
cmNlVVJMIGNvbW1lbnQ7Ci0gICAgICAgIC8vIC0gZHluYW1pYyBzY3JpcHRzIChzY3JpcHQgZWxl
bWVudHMgd2l0aCBzcmMgYXR0cmlidXRlKSB3aGVuIGluc3BlY3RvciBpcyBvcGVuZWQgYWZ0ZXIg
dGhlIHNjcmlwdCB3YXMgbG9hZGVkLgotICAgICAgICBpZiAoIXNjcmlwdC5oYXNTb3VyY2VVUkwg
JiYgIXNjcmlwdC5pc0NvbnRlbnRTY3JpcHQpIHsKLSAgICAgICAgICAgIHZhciByZXF1ZXN0VVJM
ID0gc2NyaXB0LnNvdXJjZVVSTC5yZXBsYWNlKC8jLiovLCAiIik7Ci0gICAgICAgICAgICBpZiAo
V2ViSW5zcGVjdG9yLnJlc291cmNlRm9yVVJMKHJlcXVlc3RVUkwpIHx8IFdlYkluc3BlY3Rvci5u
ZXR3b3JrTG9nLnJlcXVlc3RGb3JVUkwocmVxdWVzdFVSTCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZpbHRlciBvdXQgZW1iZWRkZXIgaW5qZWN0ZWQg
Y29udGVudCBzY3JpcHRzLgotICAgICAgICBpZiAoc2NyaXB0LmlzQ29udGVudFNjcmlwdCAmJiAh
c2NyaXB0Lmhhc1NvdXJjZVVSTCkgewotICAgICAgICAgICAgdmFyIHBhcnNlZFVSTCA9IG5ldyBX
ZWJJbnNwZWN0b3IuUGFyc2VkVVJMKHNjcmlwdC5zb3VyY2VVUkwpOwotICAgICAgICAgICAgaWYg
KCFwYXJzZWRVUkwuaG9zdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy5fYWRkRmlsZShzY3JpcHQuc291cmNlVVJMLCBzY3JpcHQsIHNjcmlwdC5pc0Nv
bnRlbnRTY3JpcHQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfcmVzb3VyY2VBZGRlZDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcmVzb3VyY2UgPSAvKiogQHR5cGUge1dlYkluc3Bl
Y3Rvci5SZXNvdXJjZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9hZGRGaWxlKHJl
c291cmNlLnVybCwgcmVzb3VyY2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfbWFpbkZyYW1lTmF2aWdh
dGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc2V0KCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9IGNvbnRlbnRQcm92aWRlcgotICAgICAqIEBw
YXJhbSB7Ym9vbGVhbj19IGlzQ29udGVudFNjcmlwdAotICAgICAqLwotICAgIF9hZGRGaWxlOiBm
dW5jdGlvbih1cmwsIGNvbnRlbnRQcm92aWRlciwgaXNDb250ZW50U2NyaXB0KQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuX3dvcmtzcGFjZS5oYXNNYXBwaW5nRm9yVVJMKHVybCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHR5cGUgPSBjb250ZW50UHJvdmlkZXIuY29udGVu
dFR5cGUoKTsKLSAgICAgICAgaWYgKHR5cGUgIT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVz
LlN0eWxlc2hlZXQgJiYgdHlwZSAhPT0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuRG9jdW1l
bnQgJiYgdHlwZSAhPT0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU2NyaXB0KQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc2VkVVJMc1t1cmxdKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9wcm9jZXNzZWRVUkxzW3VybF0gPSB0cnVl
OwotICAgICAgICB2YXIgaXNFZGl0YWJsZSA9IHR5cGUgIT09IFdlYkluc3BlY3Rvci5yZXNvdXJj
ZVR5cGVzLkRvY3VtZW50OwotICAgICAgICB0aGlzLl9uZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIu
YWRkRmlsZUZvclVSTCh1cmwsIGNvbnRlbnRQcm92aWRlciwgaXNFZGl0YWJsZSwgaXNDb250ZW50
U2NyaXB0KTsKLSAgICB9LAotCi0gICAgX3Jlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9wcm9jZXNzZWRVUkxzID0ge307Ci0gICAgICAgIHRoaXMuX2xhc3REeW5hbWljQW5v
bnltb3VzU2NyaXB0SW5kZXhGb3JVUkwgPSB7fTsKLSAgICAgICAgdGhpcy5fbmV0d29ya1dvcmtz
cGFjZVByb3ZpZGVyLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX3BvcHVsYXRlKCk7Ci0gICAgfQot
fQotCi0vKioKLSAqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLlNpbXBsZVdvcmtzcGFjZVByb3ZpZGVy
fQotICovCi1XZWJJbnNwZWN0b3IubmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyID0gbnVsbDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0LmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3QuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAxZmZmNjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkV2ZW50VGFyZ2V0
fQotICovCi1XZWJJbnNwZWN0b3IuT2JqZWN0ID0gZnVuY3Rpb24oKSB7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5PYmplY3QucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBldmVudFR5cGUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5FdmVudCl9
IGxpc3RlbmVyCi0gICAgICogQHBhcmFtIHtPYmplY3Q9fSB0aGlzT2JqZWN0Ci0gICAgICovCi0g
ICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oZXZlbnRUeXBlLCBsaXN0ZW5lciwgdGhpc09i
amVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGxpc3RlbmVyKTsKLQotICAgICAg
ICBpZiAoIXRoaXMuX2xpc3RlbmVycykKLSAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9
OwotICAgICAgICBpZiAoIXRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdKQotICAgICAgICAgICAg
dGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0gPSBbXTsKLSAgICAgICAgdGhpcy5fbGlzdGVuZXJz
W2V2ZW50VHlwZV0ucHVzaCh7IHRoaXNPYmplY3Q6IHRoaXNPYmplY3QsIGxpc3RlbmVyOiBsaXN0
ZW5lciB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50
VHlwZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkV2ZW50KX0gbGlzdGVu
ZXIKLSAgICAgKiBAcGFyYW0ge09iamVjdD19IHRoaXNPYmplY3QKLSAgICAgKi8KLSAgICByZW1v
dmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbihldmVudFR5cGUsIGxpc3RlbmVyLCB0aGlzT2JqZWN0
KQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQobGlzdGVuZXIpOwotCi0gICAgICAgIGlm
ICghdGhpcy5fbGlzdGVuZXJzIHx8ICF0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tl
dmVudFR5cGVdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgaWYgKGxpc3RlbmVyICYmIGxpc3RlbmVyc1tpXS5saXN0ZW5l
ciA9PT0gbGlzdGVuZXIgJiYgbGlzdGVuZXJzW2ldLnRoaXNPYmplY3QgPT09IHRoaXNPYmplY3Qp
Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKCFsaXN0ZW5lciAmJiB0aGlzT2JqZWN0ICYmIGxpc3RlbmVyc1tpXS50aGlzT2JqZWN0
ID09PSB0aGlzT2JqZWN0KQotICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGgpCi0gICAgICAgICAg
ICBkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV07Ci0gICAgfSwKLQotICAgIHJlbW92
ZUFsbExpc3RlbmVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2xp
c3RlbmVyczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50
VHlwZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaGFzRXZlbnRMaXN0
ZW5lcnM6IGZ1bmN0aW9uKGV2ZW50VHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbGlz
dGVuZXJzIHx8ICF0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUKLSAgICAgKiBAcGFyYW0geyo9fSBldmVudERhdGEK
LSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVyczogZnVuY3Rpb24oZXZlbnRUeXBlLCBldmVudERhdGEpCi0gICAgewotICAgICAgICBp
ZiAoIXRoaXMuX2xpc3RlbmVycyB8fCAhdGhpcy5fbGlzdGVuZXJzW2V2ZW50VHlwZV0pCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFdlYkluc3Bl
Y3Rvci5FdmVudCh0aGlzLCBldmVudFR5cGUsIGV2ZW50RGF0YSk7Ci0gICAgICAgIHZhciBsaXN0
ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXS5zbGljZSgwKTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGxp
c3RlbmVyc1tpXS5saXN0ZW5lci5jYWxsKGxpc3RlbmVyc1tpXS50aGlzT2JqZWN0LCBldmVudCk7
Ci0gICAgICAgICAgICBpZiAoZXZlbnQuX3N0b3BwZWRQcm9wYWdhdGlvbikKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJl
dmVudGVkOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkV2ZW50VGFyZ2V0fSB0YXJnZXQKLSAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlCi0g
KiBAcGFyYW0geyo9fSBkYXRhCi0gKi8KLVdlYkluc3BlY3Rvci5FdmVudCA9IGZ1bmN0aW9uKHRh
cmdldCwgdHlwZSwgZGF0YSkKLXsKLSAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKLSAgICB0aGlz
LnR5cGUgPSB0eXBlOwotICAgIHRoaXMuZGF0YSA9IGRhdGE7Ci0gICAgdGhpcy5kZWZhdWx0UHJl
dmVudGVkID0gZmFsc2U7Ci0gICAgdGhpcy5fc3RvcHBlZFByb3BhZ2F0aW9uID0gZmFsc2U7Ci19
Ci0KLVdlYkluc3BlY3Rvci5FdmVudC5wcm90b3R5cGUgPSB7Ci0gICAgc3RvcFByb3BhZ2F0aW9u
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9zdG9wcGVkUHJvcGFnYXRpb24gPSB0
cnVlOwotICAgIH0sCi0KLSAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtib29sZWFuPX0gcHJldmVudERlZmF1bHQKLSAgICAgKi8KLSAgICBjb25z
dW1lOiBmdW5jdGlvbihwcmV2ZW50RGVmYXVsdCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc3RvcFBy
b3BhZ2F0aW9uKCk7Ci0gICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkKLSAgICAgICAgICAgIHRo
aXMucHJldmVudERlZmF1bHQoKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGludGVyZmFjZQotICov
Ci1XZWJJbnNwZWN0b3IuRXZlbnRUYXJnZXQgPSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5FdmVudFRhcmdldC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IGV2ZW50VHlwZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkV2
ZW50KX0gbGlzdGVuZXIKLSAgICAgKiBAcGFyYW0ge09iamVjdD19IHRoaXNPYmplY3QKLSAgICAg
Ki8KLSAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbihldmVudFR5cGUsIGxpc3RlbmVyLCB0
aGlzT2JqZWN0KSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRU
eXBlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuRXZlbnQpfSBsaXN0ZW5l
cgotICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gdGhpc09iamVjdAotICAgICAqLwotICAgIHJlbW92
ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHRoaXNPYmplY3Qp
IHsgfSwKLQotICAgIHJlbW92ZUFsbExpc3RlbmVyczogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlCi0gICAgICogQHJldHVybiB7Ym9v
bGVhbn0KLSAgICAgKi8KLSAgICBoYXNFdmVudExpc3RlbmVyczogZnVuY3Rpb24oZXZlbnRUeXBl
KSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlCi0gICAg
ICogQHBhcmFtIHsqPX0gZXZlbnREYXRhCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAg
Ki8KLSAgICBkaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnM6IGZ1bmN0aW9uKGV2ZW50VHlwZSwgZXZl
bnREYXRhKSB7IH0sCi19Ci0KLVdlYkluc3BlY3Rvci5ub3RpZmljYXRpb25zID0gbmV3IFdlYklu
c3BlY3Rvci5PYmplY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvT2JqZWN0UG9wb3ZlckhlbHBlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvT2JqZWN0UG9wb3ZlckhlbHBlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWMzMjUwMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL09iamVjdFBvcG92ZXJIZWxwZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlBv
cG92ZXJIZWxwZXJ9Ci0gKiBAcGFyYW0ge0VsZW1lbnR9IHBhbmVsRWxlbWVudAotICogQHBhcmFt
IHtmdW5jdGlvbihFbGVtZW50LCBFdmVudCk6RWxlbWVudHx1bmRlZmluZWR9IGdldEFuY2hvcgot
ICogQHBhcmFtIHtmdW5jdGlvbihFbGVtZW50LCBmdW5jdGlvbihXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0LCBib29sZWFuLCBFbGVtZW50PSk6dW5kZWZpbmVkLCBzdHJpbmcpOnVuZGVmaW5lZH0g
cXVlcnlPYmplY3QKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKT19IG9uSGlkZQotICogQHBhcmFtIHti
b29sZWFuPX0gZGlzYWJsZU9uQ2xpY2sKLSAqLwotV2ViSW5zcGVjdG9yLk9iamVjdFBvcG92ZXJI
ZWxwZXIgPSBmdW5jdGlvbihwYW5lbEVsZW1lbnQsIGdldEFuY2hvciwgcXVlcnlPYmplY3QsIG9u
SGlkZSwgZGlzYWJsZU9uQ2xpY2spCi17Ci0gICAgV2ViSW5zcGVjdG9yLlBvcG92ZXJIZWxwZXIu
Y2FsbCh0aGlzLCBwYW5lbEVsZW1lbnQsIGdldEFuY2hvciwgdGhpcy5fc2hvd09iamVjdFBvcG92
ZXIuYmluZCh0aGlzKSwgdGhpcy5fb25IaWRlT2JqZWN0UG9wb3Zlci5iaW5kKHRoaXMpLCBkaXNh
YmxlT25DbGljayk7Ci0gICAgdGhpcy5fcXVlcnlPYmplY3QgPSBxdWVyeU9iamVjdDsKLSAgICB0
aGlzLl9vbkhpZGVDYWxsYmFjayA9IG9uSGlkZTsKLSAgICB0aGlzLl9wb3BvdmVyT2JqZWN0R3Jv
dXAgPSAicG9wb3ZlciI7Ci0gICAgcGFuZWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9s
bCIsIHRoaXMuaGlkZVBvcG92ZXIuYmluZCh0aGlzKSwgdHJ1ZSk7Ci19OwotCi1XZWJJbnNwZWN0
b3IuT2JqZWN0UG9wb3ZlckhlbHBlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtFbGVtZW50fSBlbGVtZW50Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUG9wb3Zl
cn0gcG9wb3ZlcgotICAgICAqLwotICAgIF9zaG93T2JqZWN0UG9wb3ZlcjogZnVuY3Rpb24oZWxl
bWVudCwgcG9wb3ZlcikKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5SZW1vdGVPYmplY3R9IHJlc3VsdAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IHdhc1Rocm93bgotICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBhbmNob3JPdmVycmlk
ZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gc2hvd09iamVjdFBvcG92ZXIocmVzdWx0
LCB3YXNUaHJvd24sIGFuY2hvck92ZXJyaWRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
cG9wb3Zlci5kaXNwb3NlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBp
ZiAod2FzVGhyb3duKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5oaWRlUG9wb3ZlcigpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGFu
Y2hvckVsZW1lbnQgPSBhbmNob3JPdmVycmlkZSB8fCBlbGVtZW50OwotCi0gICAgICAgICAgICB2
YXIgcG9wb3ZlckNvbnRlbnRFbGVtZW50ID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChyZXN1bHQu
dHlwZSAhPT0gIm9iamVjdCIpIHsKLSAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgcG9w
b3ZlckNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UgY29uc29sZS1mb3JtYXR0
ZWQtIiArIHJlc3VsdC50eXBlOwotICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVu
dC5zdHlsZS53aGl0ZVNwYWNlID0gInByZSI7Ci0gICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRl
bnRFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0LmRlc2NyaXB0aW9uOwotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQudHlwZSA9PT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiBkaWRHZXREZXRhaWxzKGVycm9yLCByZXNwb25zZSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICJpbmxp
bmUtYmxvY2siOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250YWlu
ZXIuY3JlYXRlQ2hpbGQoImRpdiIsICJmdW5jdGlvbi1wb3BvdmVyLXRpdGxlIHNvdXJjZS1jb2Rl
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdGl0bGUuY3Jl
YXRlQ2hpbGQoInNwYW4iLCAiZnVuY3Rpb24tbmFtZSIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb25OYW1lLnRleHRDb250ZW50ID0gcmVzcG9uc2UubmFtZSB8fCByZXNwb25zZS5p
bmZlcnJlZE5hbWUgfHwgcmVzcG9uc2UuZGlzcGxheU5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9saW5raWZpZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkxpbmtpZmllcigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHJhd0xvY2F0aW9uID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5Mb2NhdGlvbn0gKi8gKHJlc3BvbnNlLmxvY2F0aW9uKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5fbGlua2lmaWVyLmxpbmtpZnlSYXdMb2Nh
dGlvbihyYXdMb2NhdGlvbiwgImZ1bmN0aW9uLWxvY2F0aW9uLWxpbmsiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChsaW5rKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxl
LmFwcGVuZENoaWxkKGxpbmspOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIu
YXBwZW5kQ2hpbGQocG9wb3ZlckNvbnRlbnRFbGVtZW50KTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgcG9wb3Zlci5zaG93KGNvbnRhaW5lciwgYW5jaG9yRWxlbWVudCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgRGVidWdnZXJBZ2VudC5nZXRGdW5jdGlv
bkRldGFpbHMocmVzdWx0Lm9iamVjdElkLCBkaWRHZXREZXRhaWxzLmJpbmQodGhpcykpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQudHlwZSA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICAgICAgICAgIHBv
cG92ZXJDb250ZW50RWxlbWVudC50ZXh0Q29udGVudCA9ICJcIiIgKyBwb3BvdmVyQ29udGVudEVs
ZW1lbnQudGV4dENvbnRlbnQgKyAiXCIiOwotICAgICAgICAgICAgICAgIHBvcG92ZXIuc2hvdyhw
b3BvdmVyQ29udGVudEVsZW1lbnQsIGFuY2hvckVsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN1YnR5cGUgPT09ICJub2RlIikKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmhpZ2hsaWdodEFzRE9NTm9kZSgpOwotICAgICAgICAgICAg
ICAgIHBvcG92ZXJDb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICAgICAgICAgIHRoaXMuX3RpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgICAgIHRoaXMuX3RpdGxlRWxlbWVudC5jbGFzc05h
bWUgPSAic291cmNlLWZyYW1lLXBvcG92ZXItdGl0bGUgbW9ub3NwYWNlIjsKLSAgICAgICAgICAg
ICAgICB0aGlzLl90aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSByZXN1bHQuZGVzY3JpcHRpb247
Ci0gICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
X3RpdGxlRWxlbWVudCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJ
bnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24ocmVzdWx0KTsKLSAgICAgICAgICAgICAg
ICAvLyBGb3IgSFRNTCBET00gd3JhcHBlcnMsIGFwcGVuZCAiI2lkIiB0byB0aXRsZSwgaWYgbm90
IGVtcHR5LgotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGVzY3JpcHRpb24uc3Vic3RyKDAs
IDQpID09PSAiSFRNTCIpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VjdGlvblVwZGF0
ZVByb3BlcnRpZXMgPSBzZWN0aW9uLnVwZGF0ZVByb3BlcnRpZXMuYmluZChzZWN0aW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2VjdGlvbi51cGRhdGVQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRl
SFRNTElkLmJpbmQodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNl
Y3Rpb24uZXhwYW5kZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHNlY3Rpb24uZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJzb3VyY2UtZnJhbWUtcG9wb3Zlci10cmVlIik7Ci0gICAgICAgICAgICAg
ICAgc2VjdGlvbi5oZWFkZXJFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAg
ICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChzZWN0aW9uLmVsZW1l
bnQpOwotCi0gICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlcldpZHRoID0gMzAwOwotICAgICAg
ICAgICAgICAgIGNvbnN0IHBvcG92ZXJIZWlnaHQgPSAyNTA7Ci0gICAgICAgICAgICAgICAgcG9w
b3Zlci5zaG93KHBvcG92ZXJDb250ZW50RWxlbWVudCwgYW5jaG9yRWxlbWVudCwgcG9wb3Zlcldp
ZHRoLCBwb3BvdmVySGVpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB0
aGlzLl9xdWVyeU9iamVjdChlbGVtZW50LCBzaG93T2JqZWN0UG9wb3Zlci5iaW5kKHRoaXMpLCB0
aGlzLl9wb3BvdmVyT2JqZWN0R3JvdXApOwotICAgIH0sCi0KLSAgICBfb25IaWRlT2JqZWN0UG9w
b3ZlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50Lmhp
ZGVET01Ob2RlSGlnaGxpZ2h0KCk7Ci0gICAgICAgIGlmICh0aGlzLl9saW5raWZpZXIpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2xpbmtpZmllci5yZXNldCgpOwotICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2xpbmtpZmllcjsKLSAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5fb25IaWRlQ2FsbGJh
Y2spCi0gICAgICAgICAgICB0aGlzLl9vbkhpZGVDYWxsYmFjaygpOwotICAgICAgICBSdW50aW1l
QWdlbnQucmVsZWFzZU9iamVjdEdyb3VwKHRoaXMuX3BvcG92ZXJPYmplY3RHcm91cCk7Ci0gICAg
fSwKLQotICAgIF91cGRhdGVIVE1MSWQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMsIHJvb3RUcmVlRWxl
bWVudENvbnN0cnVjdG9yLCByb290UHJvcGVydHlDb21wYXJlcikKLSAgICB7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
aWYgKHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gImlkIikgewotICAgICAgICAgICAgICAgIGlmIChw
cm9wZXJ0aWVzW2ldLnZhbHVlLmRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgKz0gIiMiICsgcHJvcGVydGllc1tpXS52YWx1ZS5k
ZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9zZWN0aW9uVXBkYXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBy
b290VHJlZUVsZW1lbnRDb25zdHJ1Y3Rvciwgcm9vdFByb3BlcnR5Q29tcGFyZXIpOwotICAgIH0s
Ci0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVyLnByb3RvdHlwZQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQ
cm9wZXJ0aWVzU2VjdGlvbi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
T2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY2ZGQ0MzYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDg4OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb259Ci0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5SZW1vdGVPYmplY3R9IG9iamVjdAotICogQHBhcmFtIHs/c3RyaW5nfEVsZW1l
bnQ9fSB0aXRsZQotICogQHBhcmFtIHtzdHJpbmc9fSBzdWJ0aXRsZQotICogQHBhcmFtIHs/c3Ry
aW5nPX0gZW1wdHlQbGFjZWhvbGRlcgotICogQHBhcmFtIHtib29sZWFuPX0gaWdub3JlSGFzT3du
UHJvcGVydHkKLSAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9w
ZXJ0eT49fSBleHRyYVByb3BlcnRpZXMKLSAqIEBwYXJhbSB7ZnVuY3Rpb24obmV3OlRyZWVFbGVt
ZW50LCBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHkpPX0gdHJlZUVsZW1lbnRDb25z
dHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24gPSBmdW5j
dGlvbihvYmplY3QsIHRpdGxlLCBzdWJ0aXRsZSwgZW1wdHlQbGFjZWhvbGRlciwgaWdub3JlSGFz
T3duUHJvcGVydHksIGV4dHJhUHJvcGVydGllcywgdHJlZUVsZW1lbnRDb25zdHJ1Y3RvcikKLXsK
LSAgICB0aGlzLmVtcHR5UGxhY2Vob2xkZXIgPSAoZW1wdHlQbGFjZWhvbGRlciB8fCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIk5vIFByb3BlcnRpZXMiKSk7Ci0gICAgdGhpcy5vYmplY3QgPSBvYmpl
Y3Q7Ci0gICAgdGhpcy5pZ25vcmVIYXNPd25Qcm9wZXJ0eSA9IGlnbm9yZUhhc093blByb3BlcnR5
OwotICAgIHRoaXMuZXh0cmFQcm9wZXJ0aWVzID0gZXh0cmFQcm9wZXJ0aWVzOwotICAgIHRoaXMu
dHJlZUVsZW1lbnRDb25zdHJ1Y3RvciA9IHRyZWVFbGVtZW50Q29uc3RydWN0b3IgfHwgV2ViSW5z
cGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQ7Ci0gICAgdGhpcy5lZGl0YWJsZSA9IHRy
dWU7Ci0gICAgdGhpcy5za2lwUHJvdG8gPSBmYWxzZTsKLQotICAgIFdlYkluc3BlY3Rvci5Qcm9w
ZXJ0aWVzU2VjdGlvbi5jYWxsKHRoaXMsIHRpdGxlIHx8ICIiLCBzdWJ0aXRsZSk7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5fYXJyYXlMb2FkVGhyZXNob2xkID0g
MTAwOwotCi1XZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0g
ewotICAgIGVuYWJsZUNvbnRleHRNZW51OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVu
dUV2ZW50RmlyZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIH0sCi0KLSAgICBfY29udGV4dE1l
bnVFdmVudEZpcmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjb250ZXh0
TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOwotICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRBcHBsaWNhYmxlSXRlbXModGhpcy5vYmplY3QpOwotICAgICAgICBjb250
ZXh0TWVudS5zaG93KCk7Ci0gICAgfSwKLQotICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMudXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIHVwZGF0ZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMub2JqZWN0LmFycmF5TGVuZ3RoKCkgPiBXZWJJ
bnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uX2FycmF5TG9hZFRocmVzaG9sZCkgewot
ICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUucmVtb3ZlQ2hpbGRyZW4oKTsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5BcnJheUdyb3VwaW5nVHJlZUVsZW1lbnQuX3BvcHVs
YXRlQXJyYXkodGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUsIHRoaXMub2JqZWN0LCAwLCB0aGlz
Lm9iamVjdC5hcnJheUxlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtBcnJheS48V2ViSW5zcGVjdG9y
LlJlbW90ZU9iamVjdFByb3BlcnR5Pn0gcHJvcGVydGllcwotICAgICAgICAgKiBAcGFyYW0ge0Fy
cmF5LjxXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHk+PX0gaW50ZXJuYWxQcm9wZXJ0
aWVzCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhwcm9wZXJ0aWVzLCBp
bnRlcm5hbFByb3BlcnRpZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghcHJvcGVydGll
cykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb3Bl
cnRpZXMocHJvcGVydGllcywgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh0aGlzLmlnbm9yZUhhc093blByb3BlcnR5KQotICAgICAgICAgICAgdGhpcy5vYmpl
Y3QuZ2V0QWxsUHJvcGVydGllcyhjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGhpcy5vYmplY3QuZ2V0T3duUHJvcGVydGllcyhjYWxsYmFjay5iaW5kKHRo
aXMpKTsKLSAgICB9LAotCi0gICAgdXBkYXRlUHJvcGVydGllczogZnVuY3Rpb24ocHJvcGVydGll
cywgaW50ZXJuYWxQcm9wZXJ0aWVzLCByb290VHJlZUVsZW1lbnRDb25zdHJ1Y3Rvciwgcm9vdFBy
b3BlcnR5Q29tcGFyZXIpCi0gICAgewotICAgICAgICBpZiAoIXJvb3RUcmVlRWxlbWVudENvbnN0
cnVjdG9yKQotICAgICAgICAgICAgcm9vdFRyZWVFbGVtZW50Q29uc3RydWN0b3IgPSB0aGlzLnRy
ZWVFbGVtZW50Q29uc3RydWN0b3I7Ci0KLSAgICAgICAgaWYgKCFyb290UHJvcGVydHlDb21wYXJl
cikKLSAgICAgICAgICAgIHJvb3RQcm9wZXJ0eUNvbXBhcmVyID0gV2ViSW5zcGVjdG9yLk9iamVj
dFByb3BlcnRpZXNTZWN0aW9uLkNvbXBhcmVQcm9wZXJ0aWVzOwotCi0gICAgICAgIGlmICh0aGlz
LmV4dHJhUHJvcGVydGllcykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LmV4dHJhUHJvcGVydGllcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVz
LnB1c2godGhpcy5leHRyYVByb3BlcnRpZXNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhp
cy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICBXZWJJ
bnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wb3B1bGF0ZVdpdGhQcm9wZXJ0aWVz
KHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLAotICAgICAgICAgICAgcHJvcGVydGllcywgaW50
ZXJuYWxQcm9wZXJ0aWVzLAotICAgICAgICAgICAgcm9vdFRyZWVFbGVtZW50Q29uc3RydWN0b3Is
IHJvb3RQcm9wZXJ0eUNvbXBhcmVyLAotICAgICAgICAgICAgdGhpcy5za2lwUHJvdG8sIHRoaXMu
b2JqZWN0KTsKLSAgICAgICAgICAgIAotICAgICAgICB0aGlzLnByb3BlcnRpZXNGb3JUZXN0ID0g
cHJvcGVydGllczsKLQotICAgICAgICBpZiAoIXRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNo
aWxkcmVuLmxlbmd0aCkgewotICAgICAgICAgICAgdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICB0aXRsZS5jbGFzc05hbWUgPSAiaW5mbyI7Ci0g
ICAgICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9IHRoaXMuZW1wdHlQbGFjZWhvbGRlcjsKLSAg
ICAgICAgICAgIHZhciBpbmZvRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudCh0aXRsZSwgbnVsbCwg
ZmFsc2UpOwotICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hp
bGQoaW5mb0VsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZQotfQotCi1XZWJJbnNwZWN0b3Iu
T2JqZWN0UHJvcGVydGllc1NlY3Rpb24uQ29tcGFyZVByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9w
ZXJ0eUEsIHByb3BlcnR5QikKLXsKLSAgICB2YXIgYSA9IHByb3BlcnR5QS5uYW1lOwotICAgIHZh
ciBiID0gcHJvcGVydHlCLm5hbWU7Ci0gICAgaWYgKGEgPT09ICJfX3Byb3RvX18iKQotICAgICAg
ICByZXR1cm4gMTsKLSAgICBpZiAoYiA9PT0gIl9fcHJvdG9fXyIpCi0gICAgICAgIHJldHVybiAt
MTsKLQotICAgIC8vIGlmIHVzZWQgZWxzZXdoZXJlIG1ha2Ugc3VyZSB0bwotICAgIC8vICAtIGNv
bnZlcnQgYSBhbmQgYiB0byBzdHJpbmdzIChub3QgbmVlZGVkIGhlcmUsIHByb3BlcnRpZXMgYXJl
IGFsbCBzdHJpbmdzKQotICAgIC8vICAtIGNoZWNrIGlmIGEgPT0gYiAobm90IG5lZWRlZCBoZXJl
LCBubyB0d28gcHJvcGVydGllcyBjYW4gYmUgdGhlIHNhbWUpCi0KLSAgICB2YXIgZGlmZiA9IDA7
Ci0gICAgdmFyIGNodW5rID0gL15cZCt8XlxEKy87Ci0gICAgdmFyIGNodW5rYSwgY2h1bmtiLCBh
bnVtLCBibnVtOwotICAgIHdoaWxlIChkaWZmID09PSAwKSB7Ci0gICAgICAgIGlmICghYSAmJiBi
KQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoIWIgJiYgYSkKLSAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICBjaHVua2EgPSBhLm1hdGNoKGNodW5rKVswXTsKLSAgICAg
ICAgY2h1bmtiID0gYi5tYXRjaChjaHVuaylbMF07Ci0gICAgICAgIGFudW0gPSAhaXNOYU4oY2h1
bmthKTsKLSAgICAgICAgYm51bSA9ICFpc05hTihjaHVua2IpOwotICAgICAgICBpZiAoYW51bSAm
JiAhYm51bSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKGJudW0gJiYgIWFu
dW0pCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgaWYgKGFudW0gJiYgYm51bSkgewot
ICAgICAgICAgICAgZGlmZiA9IGNodW5rYSAtIGNodW5rYjsKLSAgICAgICAgICAgIGlmIChkaWZm
ID09PSAwICYmIGNodW5rYS5sZW5ndGggIT09IGNodW5rYi5sZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIStjaHVua2EgJiYgIStjaHVua2IpIC8vIGNodW5rcyBhcmUgc3RyaW5ncyBvZiBh
bGwgMHMgKHNwZWNpYWwgY2FzZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rYS5s
ZW5ndGggLSBjaHVua2IubGVuZ3RoOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNodW5rYi5sZW5ndGggLSBjaHVua2EubGVuZ3RoOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNodW5rYSAhPT0gY2h1bmtiKQotICAgICAgICAgICAg
cmV0dXJuIChjaHVua2EgPCBjaHVua2IpID8gLTEgOiAxOwotICAgICAgICBhID0gYS5zdWJzdHJp
bmcoY2h1bmthLmxlbmd0aCk7Ci0gICAgICAgIGIgPSBiLnN1YnN0cmluZyhjaHVua2IubGVuZ3Ro
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGRpZmY7Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAZXh0ZW5kcyB7VHJlZUVsZW1lbnR9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZW1vdGVP
YmplY3RQcm9wZXJ0eX0gcHJvcGVydHkKLSAqLwotV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5
VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihwcm9wZXJ0eSkKLXsKLSAgICB0aGlzLnByb3BlcnR5ID0g
cHJvcGVydHk7Ci0KLSAgICAvLyBQYXNzIGFuIGVtcHR5IHRpdGxlLCB0aGUgdGl0bGUgZ2V0cyBt
YWRlIGxhdGVyIGluIG9uYXR0YWNoLgotICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgIiIsIG51
bGwsIGZhbHNlKTsKLSAgICB0aGlzLnRvZ2dsZU9uQ2xpY2sgPSB0cnVlOwotICAgIHRoaXMuc2Vs
ZWN0YWJsZSA9IGZhbHNlOwotfQotCi1XZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7Ci0gICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LnBvcHVs
YXRlKHRoaXMsIHRoaXMucHJvcGVydHkudmFsdWUpOwotICAgIH0sCi0KLSAgICBvbmRibGNsaWNr
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnByb3BlcnR5LndyaXRh
YmxlKQotICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRpbmcoZXZlbnQpOwotICAgIH0sCi0KLSAg
ICBvbmF0dGFjaDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy51cGRhdGUoKTsKLSAg
ICB9LAotCi0gICAgdXBkYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLm5hbWVF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB0aGlzLm5h
bWVFbGVtZW50LmNsYXNzTmFtZSA9ICJuYW1lIjsKLSAgICAgICAgdGhpcy5uYW1lRWxlbWVudC50
ZXh0Q29udGVudCA9IHRoaXMucHJvcGVydHkubmFtZTsKLSAgICAgICAgaWYgKCF0aGlzLnByb3Bl
cnR5LmVudW1lcmFibGUpCi0gICAgICAgICAgICB0aGlzLm5hbWVFbGVtZW50LmFkZFN0eWxlQ2xh
c3MoImRpbW1lZCIpOwotCi0gICAgICAgIHZhciBzZXBhcmF0b3JFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBzZXBhcmF0b3JFbGVtZW50LmNsYXNzTmFt
ZSA9ICJzZXBhcmF0b3IiOwotICAgICAgICBzZXBhcmF0b3JFbGVtZW50LnRleHRDb250ZW50ID0g
IjogIjsKLQotICAgICAgICB0aGlzLnZhbHVlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKLSAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQuY2xhc3NOYW1lID0gInZhbHVl
IjsKLQotICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnR5LnZhbHVlLmRlc2Ny
aXB0aW9uOwotICAgICAgICAvLyBSZW5kZXIgXG4gYXMgYSBuaWNlIHVuaWNvZGUgY3Igc3ltYm9s
LgotICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS53YXNUaHJvd24pCi0gICAgICAgICAgICB0aGlz
LnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCA9ICJbRXhjZXB0aW9uOiAiICsgZGVzY3JpcHRpb24g
KyAiXSI7Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvcGVydHkudmFsdWUudHlwZSA9PT0gInN0
cmluZyIgJiYgdHlwZW9mIGRlc2NyaXB0aW9uID09PSAic3RyaW5nIikgewotICAgICAgICAgICAg
dGhpcy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQgPSAiXCIiICsgZGVzY3JpcHRpb24ucmVwbGFj
ZSgvXG4vZywgIlx1MjFCNSIpICsgIlwiIjsKLSAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50
Ll9vcmlnaW5hbFRleHRDb250ZW50ID0gIlwiIiArIGRlc2NyaXB0aW9uICsgIlwiIjsKLSAgICAg
ICAgfSBlbHNlIGlmICh0aGlzLnByb3BlcnR5LnZhbHVlLnR5cGUgPT09ICJmdW5jdGlvbiIgJiYg
dHlwZW9mIGRlc2NyaXB0aW9uID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgdGhpcy52YWx1
ZUVsZW1lbnQudGV4dENvbnRlbnQgPSAvLiovLmV4ZWMoZGVzY3JpcHRpb24pWzBdLnJlcGxhY2Uo
LyArJC9nLCAiIik7Ci0gICAgICAgICAgICB0aGlzLnZhbHVlRWxlbWVudC5fb3JpZ2luYWxUZXh0
Q29udGVudCA9IGRlc2NyaXB0aW9uOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcGVydHku
dmFsdWUudHlwZSAhPT0gIm9iamVjdCIgfHwgdGhpcy5wcm9wZXJ0eS52YWx1ZS5zdWJ0eXBlICE9
PSAibm9kZSIpIAotICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBk
ZXNjcmlwdGlvbjsKLQotICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS53YXNUaHJvd24pCi0gICAg
ICAgICAgICB0aGlzLnZhbHVlRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJlcnJvciIpOwotICAgICAg
ICBpZiAodGhpcy5wcm9wZXJ0eS52YWx1ZS5zdWJ0eXBlKQotICAgICAgICAgICAgdGhpcy52YWx1
ZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS1mb3JtYXR0ZWQtIiArIHRoaXMucHJvcGVy
dHkudmFsdWUuc3VidHlwZSk7Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvcGVydHkudmFsdWUu
dHlwZSkKLSAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNv
bGUtZm9ybWF0dGVkLSIgKyB0aGlzLnByb3BlcnR5LnZhbHVlLnR5cGUpOwotCi0gICAgICAgIHRo
aXMudmFsdWVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5fY29u
dGV4dE1lbnVGaXJlZC5iaW5kKHRoaXMsIHRoaXMucHJvcGVydHkudmFsdWUpLCBmYWxzZSk7Ci0g
ICAgICAgIGlmICh0aGlzLnByb3BlcnR5LnZhbHVlLnR5cGUgPT09ICJvYmplY3QiICYmIHRoaXMu
cHJvcGVydHkudmFsdWUuc3VidHlwZSA9PT0gIm5vZGUiICYmIHRoaXMucHJvcGVydHkudmFsdWUu
ZGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5ET01QcmVzZW50YXRpb25V
dGlscy5jcmVhdGVTcGFuc0Zvck5vZGVUaXRsZSh0aGlzLnZhbHVlRWxlbWVudCwgdGhpcy5wcm9w
ZXJ0eS52YWx1ZS5kZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB0aGlzLnZhbHVlRWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlzLCB0
aGlzLnByb3BlcnR5LnZhbHVlKSwgZmFsc2UpOwotICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCB0aGlzLl9tb3VzZU91dC5iaW5kKHRoaXMs
IHRoaXMucHJvcGVydHkudmFsdWUpLCBmYWxzZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdGhpcy52YWx1ZUVsZW1lbnQudGl0bGUgPSBkZXNjcmlwdGlvbiB8fCAiIjsKLQotICAgICAg
ICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIHRoaXMu
bGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMubmFtZUVsZW1lbnQpOwotICAgICAgICB0
aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZChzZXBhcmF0b3JFbGVtZW50KTsKLSAgICAg
ICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZUVsZW1lbnQpOwot
ICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gdGhpcy5wcm9wZXJ0eS52YWx1ZS5oYXNDaGlsZHJl
biAmJiAhdGhpcy5wcm9wZXJ0eS53YXNUaHJvd247Ci0gICAgfSwKLQotICAgIF9jb250ZXh0TWVu
dUZpcmVkOiBmdW5jdGlvbih2YWx1ZSwgZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY29udGV4
dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgdGhp
cy5wb3B1bGF0ZUNvbnRleHRNZW51KGNvbnRleHRNZW51KTsKLSAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kQXBwbGljYWJsZUl0ZW1zKHZhbHVlKTsKLSAgICAgICAgY29udGV4dE1lbnUuc2hvdygp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0
TWVudX0gY29udGV4dE1lbnUKLSAgICAgKi8KLSAgICBwb3B1bGF0ZUNvbnRleHRNZW51OiBmdW5j
dGlvbihjb250ZXh0TWVudSkKLSAgICB7Ci0gICAgfSwKLQotICAgIF9tb3VzZU1vdmU6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5wcm9wZXJ0eS52YWx1ZS5oaWdobGlnaHRB
c0RPTU5vZGUoKTsKLSAgICB9LAotCi0gICAgX21vdXNlT3V0OiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMucHJvcGVydHkudmFsdWUuaGlkZURPTU5vZGVIaWdobGlnaHQoKTsK
LSAgICB9LAotCi0gICAgdXBkYXRlU2libGluZ3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLnBhcmVudC5yb290KQotICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5zZWN0
aW9uLnVwZGF0ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLnBhcmVudC5zaG91
bGRSZWZyZXNoQ2hpbGRyZW4gPSB0cnVlOwotICAgIH0sCi0KLSAgICByZW5kZXJQcm9tcHRBc0Js
b2NrOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAqLwotICAgIGVsZW1l
bnRBbmRWYWx1ZVRvRWRpdDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICByZXR1cm4g
W3RoaXMudmFsdWVFbGVtZW50LCAodHlwZW9mIHRoaXMudmFsdWVFbGVtZW50Ll9vcmlnaW5hbFRl
eHRDb250ZW50ID09PSAic3RyaW5nIikgPyB0aGlzLnZhbHVlRWxlbWVudC5fb3JpZ2luYWxUZXh0
Q29udGVudCA6IHVuZGVmaW5lZF07Ci0gICAgfSwKLQotICAgIHN0YXJ0RWRpdGluZzogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudEFuZFZhbHVlVG9FZGl0ID0gdGhp
cy5lbGVtZW50QW5kVmFsdWVUb0VkaXQoZXZlbnQpOwotICAgICAgICB2YXIgZWxlbWVudFRvRWRp
dCA9IGVsZW1lbnRBbmRWYWx1ZVRvRWRpdFswXTsKLSAgICAgICAgdmFyIHZhbHVlVG9FZGl0ID0g
ZWxlbWVudEFuZFZhbHVlVG9FZGl0WzFdOwotCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNC
ZWluZ0VkaXRlZChlbGVtZW50VG9FZGl0KSB8fCAhdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmVk
aXRhYmxlIHx8IHRoaXMuX3JlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IC8vIEVkaXQgb3JpZ2luYWwgc291cmNlLgotICAgICAgICBpZiAodHlwZW9mIHZhbHVlVG9FZGl0
ICE9PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgIGVsZW1lbnRUb0VkaXQudGV4dENvbnRlbnQg
PSB2YWx1ZVRvRWRpdDsKLQotICAgICAgICB2YXIgY29udGV4dCA9IHsgZXhwYW5kZWQ6IHRoaXMu
ZXhwYW5kZWQsIGVsZW1lbnRUb0VkaXQ6IGVsZW1lbnRUb0VkaXQsIHByZXZpb3VzQ29udGVudDog
ZWxlbWVudFRvRWRpdC50ZXh0Q29udGVudCB9OwotCi0gICAgICAgIC8vIExpZSBhYm91dCBvdXIg
Y2hpbGRyZW4gdG8gcHJldmVudCBleHBhbmRpbmcgb24gZG91YmxlIGNsaWNrIGFuZCB0byBjb2xs
YXBzZSBzdWJwcm9wZXJ0aWVzLgotICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gZmFsc2U7Ci0K
LSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZWRpdGluZy1zdWIt
cGFydCIpOwotCi0gICAgICAgIHRoaXMuX3Byb21wdCA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0
UHJvcGVydHlQcm9tcHQodGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcywgbnVsbCwgZWxl
bWVudFRvRWRpdC50ZXh0Q29udGVudCwgY29udGV4dC5wcmV2aW91c0NvbnRlbnQsIGNvbnRleHQp
LCB0aGlzLmVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzLCBudWxsLCBjb250ZXh0KSwgdGhpcy5y
ZW5kZXJQcm9tcHRBc0Jsb2NrKCkpOwotCi0gICAgICAgIGZ1bmN0aW9uIGJsdXJMaXN0ZW5lcigp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuZWRpdGluZ0NvbW1pdHRlZChudWxsLCBlbGVt
ZW50VG9FZGl0LnRleHRDb250ZW50LCBjb250ZXh0LnByZXZpb3VzQ29udGVudCwgY29udGV4dCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcHJveHlFbGVtZW50ID0gdGhpcy5fcHJvbXB0LmF0
dGFjaEFuZFN0YXJ0RWRpdGluZyhlbGVtZW50VG9FZGl0LCBibHVyTGlzdGVuZXIuYmluZCh0aGlz
KSk7Ci0gICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGVsZW1l
bnRUb0VkaXQsIDAsIGVsZW1lbnRUb0VkaXQsIDEpOwotICAgICAgICBwcm94eUVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX3Byb21wdEtleURvd24uYmluZCh0aGlzLCBj
b250ZXh0KSwgZmFsc2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIGlzRWRpdGluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICEhdGhpcy5fcHJvbXB0OwotICAgIH0sCi0KLSAgICBlZGl0aW5nRW5kZWQ6IGZ1bmN0
aW9uKGNvbnRleHQpCi0gICAgewotICAgICAgICB0aGlzLl9wcm9tcHQuZGV0YWNoKCk7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9wcm9tcHQ7Ci0KLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQu
c2Nyb2xsTGVmdCA9IDA7Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LnJlbW92ZVN0eWxl
Q2xhc3MoImVkaXRpbmctc3ViLXBhcnQiKTsKLSAgICAgICAgaWYgKGNvbnRleHQuZXhwYW5kZWQp
Ci0gICAgICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgIH0sCi0KLSAgICBlZGl0aW5nQ2FuY2Vs
bGVkOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgdGhpcy5lZGl0
aW5nRW5kZWQoY29udGV4dCk7Ci0gICAgICAgIHRoaXMudXBkYXRlKCk7Ci0gICAgfSwKLQotICAg
IGVkaXRpbmdDb21taXR0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHVzZXJJbnB1dCwgcHJldmlvdXND
b250ZW50LCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKHVzZXJJbnB1dCA9PT0gcHJldmlv
dXNDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGluZ0NhbmNlbGxlZChlbGVt
ZW50LCBjb250ZXh0KTsgLy8gbm90aGluZyBjaGFuZ2VkLCBzbyBjYW5jZWwKLQotICAgICAgICB0
aGlzLmVkaXRpbmdFbmRlZChjb250ZXh0KTsKLSAgICAgICAgdGhpcy5hcHBseUV4cHJlc3Npb24o
dXNlcklucHV0LCB0cnVlKTsKLSAgICB9LAotCi0gICAgX3Byb21wdEtleURvd246IGZ1bmN0aW9u
KGNvbnRleHQsIGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGlzRW50ZXJLZXkoZXZlbnQpKSB7
Ci0gICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZWRpdGluZ0NvbW1pdHRlZChudWxsLCBjb250ZXh0LmVsZW1lbnRUb0VkaXQudGV4dENvbnRl
bnQsIGNvbnRleHQucHJldmlvdXNDb250ZW50LCBjb250ZXh0KTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAxQiIpIHsgLy8gRXNjCi0gICAgICAg
ICAgICBldmVudC5jb25zdW1lKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0aW5nQ2Fu
Y2VsbGVkKG51bGwsIGNvbnRleHQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIGFwcGx5RXhw
cmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvbiwgdXBkYXRlSW50ZXJmYWNlKQotICAgIHsKLSAg
ICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24udHJpbSgpOwotICAgICAgICB2YXIgZXhwcmVz
c2lvbkxlbmd0aCA9IGV4cHJlc3Npb24ubGVuZ3RoOwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFj
ayhlcnJvcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCF1cGRhdGVJbnRlcmZhY2UpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAg
ICAgICAgICAgdGhpcy51cGRhdGUoKTsKLQotICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uTGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHdhcyBkZWxldGVkLCBzbyBy
ZW1vdmUgdGhpcyB0cmVlIGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVt
b3ZlQ2hpbGQodGhpcyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8v
IENhbGwgdXBkYXRlU2libGluZ3Mgc2luY2UgdGhlaXIgdmFsdWUgbWlnaHQgYmUgYmFzZWQgb24g
dGhlIHZhbHVlIHRoYXQganVzdCBjaGFuZ2VkLgotICAgICAgICAgICAgICAgIHRoaXMudXBkYXRl
U2libGluZ3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgdGhpcy5wcm9w
ZXJ0eS5wYXJlbnRPYmplY3Quc2V0UHJvcGVydHlWYWx1ZSh0aGlzLnByb3BlcnR5Lm5hbWUsIGV4
cHJlc3Npb24udHJpbSgpLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgcHJv
cGVydHlQYXRoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIl9jYWNoZWRQcm9wZXJ0
eVBhdGgiIGluIHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkUHJvcGVydHlQ
YXRoOwotCi0gICAgICAgIHZhciBjdXJyZW50ID0gdGhpczsKLSAgICAgICAgdmFyIHJlc3VsdDsK
LQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC5wcm9wZXJ0eSkgewotICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1
cnJlbnQucHJvcGVydHkubmFtZSArICIuIiArIHJlc3VsdDsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQucHJvcGVydHkubmFtZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDsKLSAgICAg
ICAgfSB3aGlsZSAoY3VycmVudCAmJiAhY3VycmVudC5yb290KTsKLQotICAgICAgICB0aGlzLl9j
YWNoZWRQcm9wZXJ0eVBhdGggPSByZXN1bHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fSwKLQotCi0gICAgX19wcm90b19fOiBUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0g
KiBAcGFyYW0ge1RyZWVFbGVtZW50fSB0cmVlRWxlbWVudAotICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuUmVtb3RlT2JqZWN0fSB2YWx1ZQotICovCi1XZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlU
cmVlRWxlbWVudC5wb3B1bGF0ZSA9IGZ1bmN0aW9uKHRyZWVFbGVtZW50LCB2YWx1ZSkgewotICAg
IGlmICh0cmVlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggJiYgIXRyZWVFbGVtZW50LnNob3VsZFJl
ZnJlc2hDaGlsZHJlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHZhbHVlLmFycmF5TGVu
Z3RoKCkgPiBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uX2FycmF5TG9hZFRo
cmVzaG9sZCkgewotICAgICAgICB0cmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAg
ICBXZWJJbnNwZWN0b3IuQXJyYXlHcm91cGluZ1RyZWVFbGVtZW50Ll9wb3B1bGF0ZUFycmF5KHRy
ZWVFbGVtZW50LCB2YWx1ZSwgMCwgdmFsdWUuYXJyYXlMZW5ndGgoKSAtIDEpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48V2ViSW5zcGVj
dG9yLlJlbW90ZU9iamVjdFByb3BlcnR5Pn0gcHJvcGVydGllcwotICAgICAqIEBwYXJhbSB7QXJy
YXkuPFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eT49fSBpbnRlcm5hbFByb3BlcnRp
ZXMKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjYWxsYmFjayhwcm9wZXJ0aWVzLCBpbnRlcm5hbFBy
b3BlcnRpZXMpCi0gICAgewotICAgICAgICB0cmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwot
ICAgICAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
ICghaW50ZXJuYWxQcm9wZXJ0aWVzKQotICAgICAgICAgICAgaW50ZXJuYWxQcm9wZXJ0aWVzID0g
W107Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucG9w
dWxhdGVXaXRoUHJvcGVydGllcyh0cmVlRWxlbWVudCwgcHJvcGVydGllcywgaW50ZXJuYWxQcm9w
ZXJ0aWVzLAotICAgICAgICAgICAgdHJlZUVsZW1lbnQudHJlZU91dGxpbmUuc2VjdGlvbi50cmVl
RWxlbWVudENvbnN0cnVjdG9yLCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24u
Q29tcGFyZVByb3BlcnRpZXMsCi0gICAgICAgICAgICB0cmVlRWxlbWVudC50cmVlT3V0bGluZS5z
ZWN0aW9uLnNraXBQcm90bywgdmFsdWUpOwotICAgIH0KLQotICAgIHZhbHVlLmdldE93blByb3Bl
cnRpZXMoY2FsbGJhY2spOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IVRyZWVFbGVtZW50fCFUcmVl
T3V0bGluZX0gdHJlZUVsZW1lbnQKLSAqIEBwYXJhbSB7QXJyYXkuPCFXZWJJbnNwZWN0b3IuUmVt
b3RlT2JqZWN0UHJvcGVydHk+fSBwcm9wZXJ0aWVzCi0gKiBAcGFyYW0gez9BcnJheS48IVdlYklu
c3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eT59IGludGVybmFsUHJvcGVydGllcwotICogQHBh
cmFtIHtmdW5jdGlvbihuZXc6VHJlZUVsZW1lbnQsIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQ
cm9wZXJ0eSl9IHRyZWVFbGVtZW50Q29uc3RydWN0b3IKLSAqIEBwYXJhbSB7ZnVuY3Rpb24gKFdl
Ykluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eSwgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVj
dFByb3BlcnR5KTogbnVtYmVyfSBjb21wYXJhdG9yCi0gKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBQ
cm90bwotICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gdmFsdWUKLSAqLwot
V2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucG9wdWxhdGVXaXRoUHJvcGVy
dGllcyA9IGZ1bmN0aW9uKHRyZWVFbGVtZW50LCBwcm9wZXJ0aWVzLCBpbnRlcm5hbFByb3BlcnRp
ZXMsIHRyZWVFbGVtZW50Q29uc3RydWN0b3IsIGNvbXBhcmF0b3IsIHNraXBQcm90bywgdmFsdWUp
IHsKLSAgICBwcm9wZXJ0aWVzLnNvcnQoY29tcGFyYXRvcik7Ci0gICAgCi0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChza2lwUHJv
dG8gJiYgcHJvcGVydGllc1tpXS5uYW1lID09PSAiX19wcm90b19fIikKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBwcm9wZXJ0aWVzW2ldLnBhcmVudE9iamVjdCA9IHZhbHVlOwotICAg
ICAgICB0cmVlRWxlbWVudC5hcHBlbmRDaGlsZChuZXcgdHJlZUVsZW1lbnRDb25zdHJ1Y3Rvcihw
cm9wZXJ0aWVzW2ldKSk7Ci0gICAgfQotICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS50eXBlID09PSAi
ZnVuY3Rpb24iKSB7Ci0gICAgICAgIC8vIFdoZXRoZXIgZnVuY3Rpb24gaGFzIFRhcmdldEZ1bmN0
aW9uIGludGVybmFsIHByb3BlcnR5LgotICAgICAgICAvLyBUaGlzIGlzIGEgc2ltcGxlIHdheSB0
byB0ZWxsIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgYm91bmQgZnVuY3Rpb24gKHdl
IGFyZSBub3QgdG9sZCkuCi0gICAgICAgIC8vIEJvdW5kIGZ1bmN0aW9uIG5ldmVyIGhhcyBpbm5l
ciBzY29wZSBhbmQgZG9lc24ndCBuZWVkIGNvcnJlc3BvbmRpbmcgVUkgbm9kZS4gICAKLSAgICAg
ICAgdmFyIGhhc1RhcmdldEZ1bmN0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGludGVybmFs
UHJvcGVydGllcykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRlcm5hbFBy
b3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxQcm9w
ZXJ0aWVzW2ldLm5hbWUgPT0gIltbVGFyZ2V0RnVuY3Rpb25dXSIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaGFzVGFyZ2V0RnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFoYXNUYXJnZXRGdW5jdGlvbikKLSAgICAgICAgICAgIHRyZWVFbGVtZW50LmFwcGVuZENo
aWxkKG5ldyBXZWJJbnNwZWN0b3IuRnVuY3Rpb25TY29wZU1haW5UcmVlRWxlbWVudCh2YWx1ZSkp
OwotICAgIH0KLSAgICBpZiAoaW50ZXJuYWxQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgaW50ZXJuYWxQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICBpbnRlcm5hbFByb3BlcnRpZXNbaV0ucGFyZW50T2JqZWN0ID0gdmFsdWU7Ci0gICAgICAgICAg
ICB0cmVlRWxlbWVudC5hcHBlbmRDaGlsZChuZXcgdHJlZUVsZW1lbnRDb25zdHJ1Y3RvcihpbnRl
cm5hbFByb3BlcnRpZXNbaV0pKTsKLSAgICAgICAgfSAKLSAgICB9Ci19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7VHJlZUVsZW1lbnR9Ci0gKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5SZW1vdGVPYmplY3R9IHJlbW90ZU9iamVjdAotICovCi1XZWJJbnNwZWN0b3IuRnVuY3Rp
b25TY29wZU1haW5UcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHJlbW90ZU9iamVjdCkKLXsKLSAgICBU
cmVlRWxlbWVudC5jYWxsKHRoaXMsICI8ZnVuY3Rpb24gc2NvcGU+IiwgbnVsbCwgZmFsc2UpOwot
ICAgIHRoaXMudG9nZ2xlT25DbGljayA9IHRydWU7Ci0gICAgdGhpcy5zZWxlY3RhYmxlID0gZmFs
c2U7Ci0gICAgdGhpcy5fcmVtb3RlT2JqZWN0ID0gcmVtb3RlT2JqZWN0OwotICAgIHRoaXMuaGFz
Q2hpbGRyZW4gPSB0cnVlOwotfQotCi1XZWJJbnNwZWN0b3IuRnVuY3Rpb25TY29wZU1haW5UcmVl
RWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoICYmICF0aGlzLnNob3VsZFJlZnJlc2hD
aGlsZHJlbikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmdW5jdGlvbiBkaWRHZXRE
ZXRhaWxzKGVycm9yLCByZXNwb25zZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJl
bigpOwotCi0gICAgICAgICAgICB2YXIgc2NvcGVDaGFpbiA9IHJlc3BvbnNlLnNjb3BlQ2hhaW47
Ci0gICAgICAgICAgICBpZiAoIXNjb3BlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY29wZUNoYWluLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHNjb3BlID0gc2NvcGVDaGFpbltpXTsKLSAgICAgICAgICAg
ICAgICB2YXIgdGl0bGUgPSBudWxsOwotICAgICAgICAgICAgICAgIHZhciBpc1RydWVPYmplY3Q7
Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNjb3BlLnR5cGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAibG9jYWwiOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IHJlYWxs
eSBleHBlY3RpbmcgdGhpcyBzY29wZSB0eXBlIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9jYWwiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlzVHJ1ZU9iamVjdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImNsb3N1cmUiOgotICAgICAgICAgICAg
ICAgICAgICAgICAgdGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNsb3N1cmUiKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlzVHJ1ZU9iamVjdCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImNhdGNoIjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDYXRj
aCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVlT2JqZWN0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAid2l0
aCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiV2l0aCBCbG9jayIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVlT2JqZWN0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlICJnbG9iYWwiOgotICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkdsb2JhbCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVl
T2JqZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cigiVW5rbm93biBzY29wZSB0eXBlOiAiICsgc2NvcGUudHlwZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgdmFyIHNjb3BlUmVmOwotICAgICAgICAgICAgICAgIGlmIChpc1RydWVP
YmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlUmVmID0gdW5kZWZpbmVkOwotICAgICAg
ICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlUmVmID0gbmV3IFdlYklu
c3BlY3Rvci5TY29wZVJlZihpLCB1bmRlZmluZWQsIHRoaXMuX3JlbW90ZU9iamVjdC5vYmplY3RJ
ZCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVtb3RlT2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJl
bW90ZU9iamVjdC5mcm9tU2NvcGVQYXlsb2FkKHNjb3BlLm9iamVjdCwgc2NvcGVSZWYpOwotICAg
ICAgICAgICAgICAgIGlmIChpc1RydWVPYmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IHByb3BlcnR5ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdFByb3BlcnR5LmZyb21TY29wZVZh
bHVlKHRpdGxlLCByZW1vdGVPYmplY3QpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5w
YXJlbnRPYmplY3QgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxk
KG5ldyB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24udHJlZUVsZW1lbnRDb25zdHJ1Y3Rvcihwcm9w
ZXJ0eSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBzY29wZVRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TY29wZVRyZWVFbGVtZW50KHRp
dGxlLCBudWxsLCByZW1vdGVPYmplY3QpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVu
ZENoaWxkKHNjb3BlVHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICB9Ci0gICAgICAgIERlYnVnZ2VyQWdlbnQuZ2V0RnVuY3Rpb25EZXRhaWxz
KHRoaXMuX3JlbW90ZU9iamVjdC5vYmplY3RJZCwgZGlkR2V0RGV0YWlscy5iaW5kKHRoaXMpKTsK
LSAgICB9LAotCi0gICAgX19wcm90b19fOiBUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVlRWxlbWVudH0KLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gcmVtb3RlT2JqZWN0Ci0gKi8KLVdlYkluc3BlY3Rv
ci5TY29wZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24odGl0bGUsIHN1YnRpdGxlLCByZW1vdGVPYmpl
Y3QpCi17Ci0gICAgLy8gVE9ETzogdXNlIHN1YnRpdGxlIHBhcmFtZXRlci4KLSAgICBUcmVlRWxl
bWVudC5jYWxsKHRoaXMsIHRpdGxlLCBudWxsLCBmYWxzZSk7Ci0gICAgdGhpcy50b2dnbGVPbkNs
aWNrID0gdHJ1ZTsKLSAgICB0aGlzLnNlbGVjdGFibGUgPSBmYWxzZTsKLSAgICB0aGlzLl9yZW1v
dGVPYmplY3QgPSByZW1vdGVPYmplY3Q7Ci0gICAgdGhpcy5oYXNDaGlsZHJlbiA9IHRydWU7Ci19
Ci0KLVdlYkluc3BlY3Rvci5TY29wZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbnBv
cHVsYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLk9i
amVjdFByb3BlcnR5VHJlZUVsZW1lbnQucG9wdWxhdGUodGhpcywgdGhpcy5fcmVtb3RlT2JqZWN0
KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVlRWxlbWVudH0KLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gb2JqZWN0Ci0gKiBAcGFyYW0ge251bWJlcn0g
ZnJvbUluZGV4Ci0gKiBAcGFyYW0ge251bWJlcn0gdG9JbmRleAotICogQHBhcmFtIHtudW1iZXJ9
IHByb3BlcnR5Q291bnQKLSAqLwotV2ViSW5zcGVjdG9yLkFycmF5R3JvdXBpbmdUcmVlRWxlbWVu
dCA9IGZ1bmN0aW9uKG9iamVjdCwgZnJvbUluZGV4LCB0b0luZGV4LCBwcm9wZXJ0eUNvdW50KQot
ewotICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgU3RyaW5nLnNwcmludGYoIlslZCBcdTIwMjYg
JWRdIiwgZnJvbUluZGV4LCB0b0luZGV4KSwgdW5kZWZpbmVkLCB0cnVlKTsKLSAgICB0aGlzLl9m
cm9tSW5kZXggPSBmcm9tSW5kZXg7Ci0gICAgdGhpcy5fdG9JbmRleCA9IHRvSW5kZXg7Ci0gICAg
dGhpcy5fb2JqZWN0ID0gb2JqZWN0OwotICAgIHRoaXMuX3JlYWRPbmx5ID0gdHJ1ZTsKLSAgICB0
aGlzLl9wcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlDb3VudDsKLSAgICB0aGlzLl9wb3B1bGF0ZWQg
PSBmYWxzZTsKLX0KLQotV2ViSW5zcGVjdG9yLkFycmF5R3JvdXBpbmdUcmVlRWxlbWVudC5fYnVj
a2V0VGhyZXNob2xkID0gMTAwOwotV2ViSW5zcGVjdG9yLkFycmF5R3JvdXBpbmdUcmVlRWxlbWVu
dC5fc3BhcnNlSXRlcmF0aW9uVGhyZXNob2xkID0gMjUwMDAwOwotCi0vKioKLSAqIEBwYXJhbSB7
VHJlZUVsZW1lbnR8VHJlZU91dGxpbmV9IHRyZWVFbGVtZW50Ci0gKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5SZW1vdGVPYmplY3R9IG9iamVjdAotICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleAot
ICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXgKLSAqLwotV2ViSW5zcGVjdG9yLkFycmF5R3JvdXBp
bmdUcmVlRWxlbWVudC5fcG9wdWxhdGVBcnJheSA9IGZ1bmN0aW9uKHRyZWVFbGVtZW50LCBvYmpl
Y3QsIGZyb21JbmRleCwgdG9JbmRleCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuQXJyYXlHcm91cGlu
Z1RyZWVFbGVtZW50Ll9wb3B1bGF0ZVJhbmdlcyh0cmVlRWxlbWVudCwgb2JqZWN0LCBmcm9tSW5k
ZXgsIHRvSW5kZXgsIHRydWUpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7VHJlZUVsZW1lbnR8VHJl
ZU91dGxpbmV9IHRyZWVFbGVtZW50Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZW1vdGVPYmpl
Y3R9IG9iamVjdAotICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleAotICogQHBhcmFtIHtudW1i
ZXJ9IHRvSW5kZXgKLSAqIEBwYXJhbSB7Ym9vbGVhbn0gdG9wTGV2ZWwKLSAqLwotV2ViSW5zcGVj
dG9yLkFycmF5R3JvdXBpbmdUcmVlRWxlbWVudC5fcG9wdWxhdGVSYW5nZXMgPSBmdW5jdGlvbih0
cmVlRWxlbWVudCwgb2JqZWN0LCBmcm9tSW5kZXgsIHRvSW5kZXgsIHRvcExldmVsKQotewotICAg
IG9iamVjdC5jYWxsRnVuY3Rpb25KU09OKHBhY2tSYW5nZXMsIFt7dmFsdWU6IGZyb21JbmRleH0s
IHt2YWx1ZTogdG9JbmRleH0sIHt2YWx1ZTogV2ViSW5zcGVjdG9yLkFycmF5R3JvdXBpbmdUcmVl
RWxlbWVudC5fYnVja2V0VGhyZXNob2xkfSwge3ZhbHVlOiBXZWJJbnNwZWN0b3IuQXJyYXlHcm91
cGluZ1RyZWVFbGVtZW50Ll9zcGFyc2VJdGVyYXRpb25UaHJlc2hvbGR9XSwgY2FsbGJhY2suYmlu
ZCh0aGlzKSk7Ci0KLSAgICAvKioKLSAgICAgKiBAdGhpcyB7T2JqZWN0fQotICAgICAqIEBwYXJh
bSB7bnVtYmVyPX0gZnJvbUluZGV4IC8vIG11c3QgZGVjbGFyZSBvcHRpb25hbAotICAgICAqIEBw
YXJhbSB7bnVtYmVyPX0gdG9JbmRleCAvLyBtdXN0IGRlY2xhcmUgb3B0aW9uYWwKLSAgICAgKiBA
cGFyYW0ge251bWJlcj19IGJ1Y2tldFRocmVzaG9sZCAvLyBtdXN0IGRlY2xhcmUgb3B0aW9uYWwK
LSAgICAgKiBAcGFyYW0ge251bWJlcj19IHNwYXJzZUl0ZXJhdGlvblRocmVzaG9sZCAvLyBtdXN0
IGRlY2xhcmUgb3B0aW9uYWwKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBwYWNrUmFuZ2VzKGZyb21J
bmRleCwgdG9JbmRleCwgYnVja2V0VGhyZXNob2xkLCBzcGFyc2VJdGVyYXRpb25UaHJlc2hvbGQp
Ci0gICAgewotICAgICAgICB2YXIgb3duUHJvcGVydHlOYW1lcyA9IG51bGw7Ci0gICAgICAgIGZ1
bmN0aW9uIGRvTG9vcChpdGVyYXRpb25DYWxsYmFjaykKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHRvSW5kZXggLSBmcm9tSW5kZXggPCBzcGFyc2VJdGVyYXRpb25UaHJlc2hvbGQpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gZnJvbUluZGV4OyBpIDw9IHRvSW5kZXg7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoaSBpbiB0aGlzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0aW9uQ2FsbGJhY2soaSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvd25Qcm9wZXJ0eU5hbWVzID0gb3duUHJvcGVy
dHlOYW1lcyB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG93blByb3BlcnR5TmFtZXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBvd25Qcm9wZXJ0eU5hbWVzW2ldOwotICAg
ICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBuYW1lID4+PiAwOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoU3RyaW5nKGluZGV4KSA9PT0gbmFtZSAmJiBmcm9tSW5kZXggPD0gaW5kZXggJiYg
aW5kZXggPD0gdG9JbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNhbGxi
YWNrKGluZGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2YXIgY291bnQgPSAwOwotICAgICAgICBmdW5jdGlvbiBjb3VudEl0ZXJhdGlv
bkNhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgfQot
ICAgICAgICBkb0xvb3AuY2FsbCh0aGlzLCBjb3VudEl0ZXJhdGlvbkNhbGxiYWNrKTsKLQotICAg
ICAgICB2YXIgYnVja2V0U2l6ZSA9IGNvdW50OwotICAgICAgICBpZiAoY291bnQgPD0gYnVja2V0
VGhyZXNob2xkKQotICAgICAgICAgICAgYnVja2V0U2l6ZSA9IGNvdW50OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBidWNrZXRTaXplID0gTWF0aC5wb3coYnVja2V0VGhyZXNob2xkLCBNYXRo
LmNlaWwoTWF0aC5sb2coY291bnQpIC8gTWF0aC5sb2coYnVja2V0VGhyZXNob2xkKSkgLSAxKTsK
LQotICAgICAgICB2YXIgcmFuZ2VzID0gW107Ci0gICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAg
dmFyIGdyb3VwU3RhcnQgPSAtMTsKLSAgICAgICAgdmFyIGdyb3VwRW5kID0gMDsKLSAgICAgICAg
ZnVuY3Rpb24gbG9vcEl0ZXJhdGlvbkNhbGxiYWNrKGkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChncm91cFN0YXJ0ID09PSAtMSkKLSAgICAgICAgICAgICAgICBncm91cFN0YXJ0ID0gaTsK
LQotICAgICAgICAgICAgZ3JvdXBFbmQgPSBpOwotICAgICAgICAgICAgaWYgKCsrY291bnQgPT09
IGJ1Y2tldFNpemUpIHsKLSAgICAgICAgICAgICAgICByYW5nZXMucHVzaChbZ3JvdXBTdGFydCwg
Z3JvdXBFbmQsIGNvdW50XSk7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAwOwotICAgICAgICAg
ICAgICAgIGdyb3VwU3RhcnQgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBkb0xvb3AuY2FsbCh0aGlzLCBsb29wSXRlcmF0aW9uQ2FsbGJhY2spOwotCi0gICAgICAgIGlm
IChjb3VudCA+IDApCi0gICAgICAgICAgICByYW5nZXMucHVzaChbZ3JvdXBTdGFydCwgZ3JvdXBF
bmQsIGNvdW50XSk7Ci0gICAgICAgIHJldHVybiByYW5nZXM7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gY2FsbGJhY2socmFuZ2VzKQotICAgIHsKLSAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPT0g
MSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5BcnJheUdyb3VwaW5nVHJlZUVsZW1lbnQuX3Bv
cHVsYXRlQXNGcmFnbWVudCh0cmVlRWxlbWVudCwgb2JqZWN0LCByYW5nZXNbMF1bMF0sIHJhbmdl
c1swXVsxXSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCByYW5nZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgZnJvbUluZGV4ID0g
cmFuZ2VzW2ldWzBdOwotICAgICAgICAgICAgICAgIHZhciB0b0luZGV4ID0gcmFuZ2VzW2ldWzFd
OwotICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHJhbmdlc1tpXVsyXTsKLSAgICAgICAgICAg
ICAgICBpZiAoZnJvbUluZGV4ID09IHRvSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5BcnJheUdyb3VwaW5nVHJlZUVsZW1lbnQuX3BvcHVsYXRlQXNGcmFnbWVudCh0cmVl
RWxlbWVudCwgb2JqZWN0LCBmcm9tSW5kZXgsIHRvSW5kZXgpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQobmV3IFdlYklu
c3BlY3Rvci5BcnJheUdyb3VwaW5nVHJlZUVsZW1lbnQob2JqZWN0LCBmcm9tSW5kZXgsIHRvSW5k
ZXgsIGNvdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvcExl
dmVsKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkFycmF5R3JvdXBpbmdUcmVlRWxlbWVudC5f
cG9wdWxhdGVOb25JbmRleFByb3BlcnRpZXModHJlZUVsZW1lbnQsIG9iamVjdCk7Ci0gICAgfQot
fQotCi0vKioKLSAqIEBwYXJhbSB7VHJlZUVsZW1lbnR8VHJlZU91dGxpbmV9IHRyZWVFbGVtZW50
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZW1vdGVPYmplY3R9IG9iamVjdAotICogQHBhcmFt
IHtudW1iZXJ9IGZyb21JbmRleAotICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXgKLSAqLwotV2Vi
SW5zcGVjdG9yLkFycmF5R3JvdXBpbmdUcmVlRWxlbWVudC5fcG9wdWxhdGVBc0ZyYWdtZW50ID0g
ZnVuY3Rpb24odHJlZUVsZW1lbnQsIG9iamVjdCwgZnJvbUluZGV4LCB0b0luZGV4KQotewotICAg
IG9iamVjdC5jYWxsRnVuY3Rpb24oYnVpbGRBcnJheUZyYWdtZW50LCBbe3ZhbHVlOiBmcm9tSW5k
ZXh9LCB7dmFsdWU6IHRvSW5kZXh9LCB7dmFsdWU6IFdlYkluc3BlY3Rvci5BcnJheUdyb3VwaW5n
VHJlZUVsZW1lbnQuX3NwYXJzZUl0ZXJhdGlvblRocmVzaG9sZH1dLCBwcm9jZXNzQXJyYXlGcmFn
bWVudC5iaW5kKHRoaXMpKTsKLQotICAgIC8qKgotICAgICAqIEB0aGlzIHtPYmplY3R9Ci0gICAg
ICogQHBhcmFtIHtudW1iZXI9fSBmcm9tSW5kZXggLy8gbXVzdCBkZWNsYXJlIG9wdGlvbmFsCi0g
ICAgICogQHBhcmFtIHtudW1iZXI9fSB0b0luZGV4IC8vIG11c3QgZGVjbGFyZSBvcHRpb25hbAot
ICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gc3BhcnNlSXRlcmF0aW9uVGhyZXNob2xkIC8vIG11c3Qg
ZGVjbGFyZSBvcHRpb25hbAotICAgICAqLwotICAgIGZ1bmN0aW9uIGJ1aWxkQXJyYXlGcmFnbWVu
dChmcm9tSW5kZXgsIHRvSW5kZXgsIHNwYXJzZUl0ZXJhdGlvblRocmVzaG9sZCkKLSAgICB7Ci0g
ICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpOwotICAgICAgICBpZiAodG9J
bmRleCAtIGZyb21JbmRleCA8IHNwYXJzZUl0ZXJhdGlvblRocmVzaG9sZCkgewotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8PSB0b0luZGV4OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoaSBpbiB0aGlzKQotICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSB0
aGlzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFy
IG93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKTsKLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3duUHJvcGVydHlOYW1lcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gb3duUHJvcGVydHlOYW1lc1tpXTsKLSAg
ICAgICAgICAgICAgICB2YXIgaW5kZXggPSBuYW1lID4+PiAwOwotICAgICAgICAgICAgICAgIGlm
IChTdHJpbmcoaW5kZXgpID09PSBuYW1lICYmIGZyb21JbmRleCA8PSBpbmRleCAmJiBpbmRleCA8
PSB0b0luZGV4KQotICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gdGhpc1tpbmRl
eF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0KLSAgICAvKiogQHRoaXMge1dlYkluc3BlY3Rvci5BcnJheUdyb3VwaW5nVHJlZUVsZW1l
bnR9ICovCi0gICAgZnVuY3Rpb24gcHJvY2Vzc0FycmF5RnJhZ21lbnQoYXJyYXlGcmFnbWVudCkK
LSAgICB7Ci0gICAgICAgIGFycmF5RnJhZ21lbnQuZ2V0QWxsUHJvcGVydGllcyhwcm9jZXNzUHJv
cGVydGllcy5iaW5kKHRoaXMpKTsKLSAgICB9Ci0KLSAgICAvKiogQHRoaXMge1dlYkluc3BlY3Rv
ci5BcnJheUdyb3VwaW5nVHJlZUVsZW1lbnR9ICovCi0gICAgZnVuY3Rpb24gcHJvY2Vzc1Byb3Bl
cnRpZXMocHJvcGVydGllcywgaW50ZXJuYWxQcm9wZXJ0aWVzKQotICAgIHsKLSAgICAgICAgaWYg
KCFwcm9wZXJ0aWVzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHByb3BlcnRpZXMu
c29ydChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uQ29tcGFyZVByb3BlcnRp
ZXMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIHByb3BlcnRpZXNbaV0ucGFyZW50T2JqZWN0ID0gdGhpcy5fb2JqZWN0
OwotICAgICAgICAgICAgdmFyIGNoaWxkVHJlZUVsZW1lbnQgPSBuZXcgdHJlZUVsZW1lbnQudHJl
ZU91dGxpbmUuc2VjdGlvbi50cmVlRWxlbWVudENvbnN0cnVjdG9yKHByb3BlcnRpZXNbaV0pOwot
ICAgICAgICAgICAgY2hpbGRUcmVlRWxlbWVudC5fcmVhZE9ubHkgPSB0cnVlOwotICAgICAgICAg
ICAgdHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGRUcmVlRWxlbWVudCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLS8qKgotICogQHBhcmFtIHtUcmVlRWxlbWVudHxUcmVlT3V0bGluZX0gdHJl
ZUVsZW1lbnQKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gb2JqZWN0Ci0g
Ki8KLVdlYkluc3BlY3Rvci5BcnJheUdyb3VwaW5nVHJlZUVsZW1lbnQuX3BvcHVsYXRlTm9uSW5k
ZXhQcm9wZXJ0aWVzID0gZnVuY3Rpb24odHJlZUVsZW1lbnQsIG9iamVjdCkKLXsKLSAgICBvYmpl
Y3QuY2FsbEZ1bmN0aW9uKGJ1aWxkT2JqZWN0RnJhZ21lbnQsIHVuZGVmaW5lZCwgcHJvY2Vzc09i
amVjdEZyYWdtZW50LmJpbmQodGhpcykpOwotCi0gICAgLyoqIEB0aGlzIHtPYmplY3R9ICovCi0g
ICAgZnVuY3Rpb24gYnVpbGRPYmplY3RGcmFnbWVudCgpCi0gICAgewotICAgICAgICB2YXIgcmVz
dWx0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9fcHJvdG9fXyk7Ci0gICAgICAgIHZhciBuYW1lcyA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IG5hbWVz
W2ldOwotICAgICAgICAgICAgLy8gQXJyYXkgaW5kZXggY2hlY2sgYWNjb3JkaW5nIHRvIHRoZSBF
UzUtMTUuNC4KLSAgICAgICAgICAgIGlmIChTdHJpbmcobmFtZSA+Pj4gMCkgPT09IG5hbWUgJiYg
bmFtZSA+Pj4gMCAhPT0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzLCBuYW1lKTsKLSAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKQotICAgICAgICAgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIG5hbWUsIGRlc2NyaXB0b3IpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcHJv
Y2Vzc09iamVjdEZyYWdtZW50KGFycmF5RnJhZ21lbnQpCi0gICAgewotICAgICAgICBhcnJheUZy
YWdtZW50LmdldE93blByb3BlcnRpZXMocHJvY2Vzc1Byb3BlcnRpZXMuYmluZCh0aGlzKSk7Ci0g
ICAgfQotCi0gICAgLyoqIEB0aGlzIHtXZWJJbnNwZWN0b3IuQXJyYXlHcm91cGluZ1RyZWVFbGVt
ZW50fSAqLwotICAgIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGludGVy
bmFsUHJvcGVydGllcykKLSAgICB7Ci0gICAgICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9yLk9iamVj
dFByb3BlcnRpZXNTZWN0aW9uLkNvbXBhcmVQcm9wZXJ0aWVzKTsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBwcm9wZXJ0
aWVzW2ldLnBhcmVudE9iamVjdCA9IHRoaXMuX29iamVjdDsKLSAgICAgICAgICAgIHZhciBjaGls
ZFRyZWVFbGVtZW50ID0gbmV3IHRyZWVFbGVtZW50LnRyZWVPdXRsaW5lLnNlY3Rpb24udHJlZUVs
ZW1lbnRDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIGNoaWxkVHJlZUVs
ZW1lbnQuX3JlYWRPbmx5ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRyZWVFbGVtZW50LmFwcGVuZENo
aWxkKGNoaWxkVHJlZUVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0
b3IuQXJyYXlHcm91cGluZ1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbnBvcHVsYXRl
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcG9wdWxhdGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3BvcHVsYXRlZCA9IHRydWU7Ci0KLSAgICAg
ICAgaWYgKHRoaXMuX3Byb3BlcnR5Q291bnQgPj0gV2ViSW5zcGVjdG9yLkFycmF5R3JvdXBpbmdU
cmVlRWxlbWVudC5fYnVja2V0VGhyZXNob2xkKSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
QXJyYXlHcm91cGluZ1RyZWVFbGVtZW50Ll9wb3B1bGF0ZVJhbmdlcyh0aGlzLCB0aGlzLl9vYmpl
Y3QsIHRoaXMuX2Zyb21JbmRleCwgdGhpcy5fdG9JbmRleCwgZmFsc2UpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5BcnJheUdyb3VwaW5nVHJl
ZUVsZW1lbnQuX3BvcHVsYXRlQXNGcmFnbWVudCh0aGlzLCB0aGlzLl9vYmplY3QsIHRoaXMuX2Zy
b21JbmRleCwgdGhpcy5fdG9JbmRleCk7Ci0gICAgfSwKLQotICAgIG9uYXR0YWNoOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJu
YW1lIik7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogVHJlZUVsZW1lbnQucHJvdG90eXBlCi19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHR9Ci0gKiBAcGFyYW0ge2Jvb2xlYW49fSByZW5kZXJBc0Jsb2NrCi0gKi8KLVdlYkluc3Bl
Y3Rvci5PYmplY3RQcm9wZXJ0eVByb21wdCA9IGZ1bmN0aW9uKGNvbW1pdEhhbmRsZXIsIGNhbmNl
bEhhbmRsZXIsIHJlbmRlckFzQmxvY2spCi17Ci0gICAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQu
Y2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVsLmNvbXBsZXRpb25zRm9yVGV4dFBy
b21wdC5iaW5kKFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwpKTsKLSAgICB0aGlzLnNldFN1Z2dl
c3RCb3hFbmFibGVkKCJnZW5lcmljLXN1Z2dlc3QiKTsKLSAgICBpZiAocmVuZGVyQXNCbG9jaykK
LSAgICAgICAgdGhpcy5yZW5kZXJBc0Jsb2NrKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5PYmplY3RQ
cm9wZXJ0eVByb21wdC5wcm90b3R5cGUgPSB7Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdC5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvT3ZlcnJpZGVzVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvT3ZlcnJpZGVzVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTIwZWEyNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL092ZXJyaWRlc1ZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2NDQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKi8KLVdl
Ykluc3BlY3Rvci5PdmVycmlkZXNWaWV3ID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rv
ci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJoZWxwU2Ny
ZWVuLmNzcyIpOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJmaWxsIik7Ci0gICAg
dGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhlbHAtd2luZG93LW1haW4iKTsKLSAgICB0aGlz
LmVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2V0dGluZ3MtdGFiLWNvbnRhaW5lciIpOwotCi0gICAg
dmFyIHBhbmVDb250ZW50ID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAidGFiYmVk
LXBhbmUtY29udGVudCIpOwotCi0gICAgZnVuY3Rpb24gYXBwZW5kQmxvY2tUbyh0YXJnZXRFbGVt
ZW50LCBjb250ZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHZhciBibG9ja0VsZW1lbnQgPSB0
YXJnZXRFbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiaGVscC1ibG9jayIpOwotICAgICAgICBi
bG9ja0VsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGVudEVsZW1lbnQpOwotICAgIH0KLQotICAgIHZh
ciBoZWFkZXJUaXRsZSA9IHBhbmVDb250ZW50LmNyZWF0ZUNoaWxkKCJoZWFkZXIiKS5jcmVhdGVD
aGlsZCgiaDMiKTsKLSAgICBoZWFkZXJUaXRsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk92ZXJyaWRlcyIpKSk7Ci0KLSAgICB2YXIg
Y29udGFpbmVyID0gcGFuZUNvbnRlbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJoZWxwLWNvbnRhaW5l
ci13cmFwcGVyIikuY3JlYXRlQ2hpbGQoImRpdiIsICJzZXR0aW5ncy10YWIgaGVscC1jb250ZW50
IGhlbHAtY29udGFpbmVyIik7Ci0gICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gY29udGFpbmVy
OwotICAgIGFwcGVuZEJsb2NrVG8oY29udGFpbmVyLCB0aGlzLl9jcmVhdGVVc2VyQWdlbnRDb250
cm9sKCkpOwotICAgIGlmIChDYXBhYmlsaXRpZXMuY2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKQot
ICAgICAgICBhcHBlbmRCbG9ja1RvKGNvbnRhaW5lciwgdGhpcy5fY3JlYXRlRGV2aWNlTWV0cmlj
c0NvbnRyb2woKSk7Ci0gICAgaWYgKENhcGFiaWxpdGllcy5jYW5PdmVycmlkZUdlb2xvY2F0aW9u
KQotICAgICAgICBhcHBlbmRCbG9ja1RvKGNvbnRhaW5lciwgdGhpcy5fY3JlYXRlR2VvbG9jYXRp
b25PdmVycmlkZUNvbnRyb2woKSk7Ci0gICAgaWYgKENhcGFiaWxpdGllcy5jYW5PdmVycmlkZURl
dmljZU9yaWVudGF0aW9uKQotICAgICAgICBhcHBlbmRCbG9ja1RvKGNvbnRhaW5lciwgdGhpcy5f
Y3JlYXRlRGV2aWNlT3JpZW50YXRpb25PdmVycmlkZUNvbnRyb2woKSk7Ci0gICAgYXBwZW5kQmxv
Y2tUbyhjb250YWluZXIsIHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0dGluZyhXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkVtdWxhdGUgdG91Y2ggZXZlbnRzIiksIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5l
bXVsYXRlVG91Y2hFdmVudHMpKTsKLSAgICBhcHBlbmRCbG9ja1RvKGNvbnRhaW5lciwgdGhpcy5f
Y3JlYXRlTWVkaWFFbXVsYXRpb25FbGVtZW50KCkpOwotCi0gICAgdGhpcy5fc3RhdHVzRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICB0aGlzLl9zdGF0dXNFbGVt
ZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdmVycmlkZXMiKTsKLX0K
LQotV2ViSW5zcGVjdG9yLk92ZXJyaWRlc1ZpZXcuc2hvd0luRHJhd2VyID0gZnVuY3Rpb24oKQot
ewotICAgIGlmICghV2ViSW5zcGVjdG9yLk92ZXJyaWRlc1ZpZXcuX3ZpZXcpCi0gICAgICAgIFdl
Ykluc3BlY3Rvci5PdmVycmlkZXNWaWV3Ll92aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5PdmVycmlk
ZXNWaWV3KCk7Ci0gICAgdmFyIHZpZXcgPSBXZWJJbnNwZWN0b3IuT3ZlcnJpZGVzVmlldy5fdmll
dzsKLSAgICBXZWJJbnNwZWN0b3Iuc2hvd1ZpZXdJbkRyYXdlcih2aWV3Ll9zdGF0dXNFbGVtZW50
LCB2aWV3KTsKLX0KLQotV2ViSW5zcGVjdG9yLk92ZXJyaWRlc1ZpZXcucHJvdG90eXBlID0gewot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IG9taXRQYXJhZ3JhcGhFbGVtZW50Ci0g
ICAgICogQHBhcmFtIHtFbGVtZW50PX0gaW5wdXRFbGVtZW50Ci0gICAgICovCi0gICAgX2NyZWF0
ZUNoZWNrYm94U2V0dGluZzogZnVuY3Rpb24obmFtZSwgc2V0dGluZywgb21pdFBhcmFncmFwaEVs
ZW1lbnQsIGlucHV0RWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHZhciBpbnB1dCA9IGlucHV0RWxl
bWVudCB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgICBpbnB1dC50
eXBlID0gImNoZWNrYm94IjsKLSAgICAgICAgaW5wdXQubmFtZSA9IG5hbWU7Ci0gICAgICAgIGlu
cHV0LmNoZWNrZWQgPSBzZXR0aW5nLmdldCgpOwotCi0gICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVy
KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0dGluZy5zZXQoaW5wdXQuY2hlY2tlZCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBsaXN0ZW5l
ciwgZmFsc2UpOwotCi0gICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImxhYmVsIik7Ci0gICAgICAgIGxhYmVsLmFwcGVuZENoaWxkKGlucHV0KTsKLSAgICAgICAgbGFi
ZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSkpOwotICAgICAgICBp
ZiAob21pdFBhcmFncmFwaEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbGFiZWw7Ci0KLSAg
ICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Ci0gICAgICAgIHAuYXBw
ZW5kQ2hpbGQobGFiZWwpOwotICAgICAgICByZXR1cm4gcDsKLSAgICB9LAotCi0gICAgX2NyZWF0
ZVVzZXJBZ2VudENvbnRyb2w6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB1c2VyQWdl
bnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudXNlckFnZW50LmdldCgpOwotCi0gICAgICAgIHZh
ciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICB2YXIgbGFiZWxFbGVt
ZW50ID0gcC5jcmVhdGVDaGlsZCgibGFiZWwiKTsKLSAgICAgICAgdmFyIGNoZWNrYm94RWxlbWVu
dCA9IGxhYmVsRWxlbWVudC5jcmVhdGVDaGlsZCgiaW5wdXQiKTsKLSAgICAgICAgY2hlY2tib3hF
bGVtZW50LnR5cGUgPSAiY2hlY2tib3giOwotICAgICAgICBjaGVja2JveEVsZW1lbnQuY2hlY2tl
ZCA9IGZhbHNlOwotICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJVc2VyIEFnZW50IikpKTsKLSAgICAg
ICAgcC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVVc2VyQWdlbnRTZWxlY3RSb3dFbGVtZW50KGNo
ZWNrYm94RWxlbWVudCkpOwotICAgICAgICByZXR1cm4gcDsKLSAgICB9LAotCi0gICAgX2NyZWF0
ZVVzZXJBZ2VudFNlbGVjdFJvd0VsZW1lbnQ6IGZ1bmN0aW9uKGNoZWNrYm94RWxlbWVudCkKLSAg
ICB7Ci0gICAgICAgIHZhciB1c2VyQWdlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudXNlckFn
ZW50LmdldCgpOwotCi0gICAgICAgIC8vIFdoZW4gcHJlc2VudCwgdGhlIHRoaXJkIGVsZW1lbnQg
bGlzdHMgZGV2aWNlIG1ldHJpY3Mgc2VwYXJhdGVkIGJ5ICd4JzoKLSAgICAgICAgLy8gLSBzY3Jl
ZW4gd2lkdGgsCi0gICAgICAgIC8vIC0gc2NyZWVuIGhlaWdodCwKLSAgICAgICAgLy8gLSBmb250
IHNjYWxlIGZhY3Rvci4KLSAgICAgICAgY29uc3QgdXNlckFnZW50cyA9IFsKLSAgICAgICAgICAg
IFsiSW50ZXJuZXQgRXhwbG9yZXIgOSIsICJNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgTVNJRSA5
LjA7IFdpbmRvd3MgTlQgNi4xOyBUcmlkZW50LzUuMCkiXSwKLSAgICAgICAgICAgIFsiSW50ZXJu
ZXQgRXhwbG9yZXIgOCIsICJNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA4LjA7IFdpbmRv
d3MgTlQgNi4wOyBUcmlkZW50LzQuMCkiXSwKLSAgICAgICAgICAgIFsiSW50ZXJuZXQgRXhwbG9y
ZXIgNyIsICJNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNi4w
KSJdLAotCi0gICAgICAgICAgICBbIkZpcmVmb3ggNyBcdTIwMTQgV2luZG93cyIsICJNb3ppbGxh
LzUuMCAoV2luZG93cyBOVCA2LjE7IEludGVsIE1hYyBPUyBYIDEwLjY7IHJ2OjcuMC4xKSBHZWNr
by8yMDEwMDEwMSBGaXJlZm94LzcuMC4xIl0sCi0gICAgICAgICAgICBbIkZpcmVmb3ggNyBcdTIw
MTQgTWFjIiwgIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwLjY7IHJ2
OjcuMC4xKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzcuMC4xIl0sCi0gICAgICAgICAgICBbIkZp
cmVmb3ggNCBcdTIwMTQgV2luZG93cyIsICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjE7IHJ2
OjIuMC4xKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzQuMC4xIl0sCi0gICAgICAgICAgICBbIkZp
cmVmb3ggNCBcdTIwMTQgTWFjIiwgIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBP
UyBYIDEwLjY7IHJ2OjIuMC4xKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzQuMC4xIl0sCi0gICAg
ICAgICAgICBbIkZpcmVmb3ggMTQgXHUyMDE0IEFuZHJvaWQgTW9iaWxlIiwgIk1vemlsbGEvNS4w
IChBbmRyb2lkOyBNb2JpbGU7IHJ2OjE0LjApIEdlY2tvLzE0LjAgRmlyZWZveC8xNC4wIl0sCi0g
ICAgICAgICAgICBbIkZpcmVmb3ggMTQgXHUyMDE0IEFuZHJvaWQgVGFibGV0IiwgIk1vemlsbGEv
NS4wIChBbmRyb2lkOyBUYWJsZXQ7IHJ2OjE0LjApIEdlY2tvLzE0LjAgRmlyZWZveC8xNC4wIl0s
Ci0KLSAgICAgICAgICAgIFsiQ2hyb21lIFx1MjAxNCBBbmRyb2lkIE1vYmlsZSIsICJNb3ppbGxh
LzUuMCAoTGludXg7IEFuZHJvaWQgNC4wLjQ7IEdhbGF4eSBOZXh1cyBCdWlsZC9JTU03NkIpIEFw
cGxlV2ViS2l0LzUzNS4xOSAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xOC4wLjEwMjUuMTMz
IE1vYmlsZSBTYWZhcmkvNTM1LjE5Il0sCi0gICAgICAgICAgICBbIkNocm9tZSBcdTIwMTQgQW5k
cm9pZCBUYWJsZXQiLCAiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDQuMS4yOyBOZXh1cyA3
IEJ1aWxkL0paMDU0SykgQXBwbGVXZWJLaXQvNTM1LjE5IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hy
b21lLzE4LjAuMTAyNS4xNjYgU2FmYXJpLzUzNS4xOSJdLAotCi0gICAgICAgICAgICBbImlQaG9u
ZSBcdTIwMTQgaU9TIDUiLCAiTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyA1XzAg
bGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNTM0LjQ2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVy
c2lvbi81LjEgTW9iaWxlLzlBMzM0IFNhZmFyaS83NTM0LjQ4LjMiLCAiNjQweDk2MHgxIl0sCi0g
ICAgICAgICAgICBbImlQaG9uZSBcdTIwMTQgaU9TIDQiLCAiTW96aWxsYS81LjAgKGlQaG9uZTsg
VTsgQ1BVIGlQaG9uZSBPUyA0XzNfMiBsaWtlIE1hYyBPUyBYOyBlbi11cykgQXBwbGVXZWJLaXQv
NTMzLjE3LjkgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzUuMC4yIE1vYmlsZS84SDcgU2Fm
YXJpLzY1MzMuMTguNSIsICI2NDB4OTYweDEiXSwKLSAgICAgICAgICAgIFsiaVBhZCBcdTIwMTQg
aU9TIDUiLCAiTW96aWxsYS81LjAgKGlQYWQ7IENQVSBPUyA1XzAgbGlrZSBNYWMgT1MgWCkgQXBw
bGVXZWJLaXQvNTM0LjQ2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi81LjEgTW9iaWxlLzlB
MzM0IFNhZmFyaS83NTM0LjQ4LjMiLCAiMTAyNHg3Njh4MSJdLAotICAgICAgICAgICAgWyJpUGFk
IFx1MjAxNCBpT1MgNCIsICJNb3ppbGxhLzUuMCAoaVBhZDsgQ1BVIE9TIDRfM18yIGxpa2UgTWFj
IE9TIFg7IGVuLXVzKSBBcHBsZVdlYktpdC81MzMuMTcuOSAoS0hUTUwsIGxpa2UgR2Vja28pIFZl
cnNpb24vNS4wLjIgTW9iaWxlLzhINyBTYWZhcmkvNjUzMy4xOC41IiwgIjEwMjR4NzY4eDEiXSwK
LQotICAgICAgICAgICAgWyJBbmRyb2lkIDIuMyBcdTIwMTQgTmV4dXMgUyIsICJNb3ppbGxhLzUu
MCAoTGludXg7IFU7IEFuZHJvaWQgMi4zLjY7IGVuLXVzOyBOZXh1cyBTIEJ1aWxkL0dSSzM5Rikg
QXBwbGVXZWJLaXQvNTMzLjEgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBNb2JpbGUg
U2FmYXJpLzUzMy4xIiwgIjQ4MHg4MDB4MS4xIl0sCi0gICAgICAgICAgICBbIkFuZHJvaWQgNC4w
LjIgXHUyMDE0IEdhbGF4eSBOZXh1cyIsICJNb3ppbGxhLzUuMCAoTGludXg7IFU7IEFuZHJvaWQg
NC4wLjI7IGVuLXVzOyBHYWxheHkgTmV4dXMgQnVpbGQvSUNMNTNGKSBBcHBsZVdlYktpdC81MzQu
MzAgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBNb2JpbGUgU2FmYXJpLzUzNC4zMCIs
ICI3MjB4MTI4MHgxLjEiXSwKLQotICAgICAgICAgICAgWyJCbGFja0JlcnJ5IFx1MjAxNCBQbGF5
Qm9vayAyLjEiLCAiTW96aWxsYS81LjAgKFBsYXlCb29rOyBVOyBSSU0gVGFibGV0IE9TIDIuMS4w
OyBlbi1VUykgQXBwbGVXZWJLaXQvNTM2LjIrIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi83
LjIuMS4wIFNhZmFyaS81MzYuMisiLCAiMTAyNHg2MDB4MSJdLAotICAgICAgICAgICAgWyJCbGFj
a0JlcnJ5IFx1MjAxNCA5OTAwIiwgIk1vemlsbGEvNS4wIChCbGFja0JlcnJ5OyBVOyBCbGFja0Jl
cnJ5IDk5MDA7IGVuLVVTKSBBcHBsZVdlYktpdC81MzQuMTErIChLSFRNTCwgbGlrZSBHZWNrbykg
VmVyc2lvbi83LjAuMC4xODcgTW9iaWxlIFNhZmFyaS81MzQuMTErIiwgIjY0MHg0ODB4MSJdLAot
ICAgICAgICAgICAgWyJCbGFja0JlcnJ5IFx1MjAxNCBCQjEwIiwgIk1vemlsbGEvNS4wIChCQjEw
OyBUb3VjaCkgQXBwbGVXZWJLaXQvNTM3LjErIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8x
MC4wLjAuMTMzNyBNb2JpbGUgU2FmYXJpLzUzNy4xKyIsICI3Njh4MTI4MHgxIl0sCi0KLSAgICAg
ICAgICAgIFsiTWVlR28gXHUyMDE0IE5va2lhIE45IiwgIk1vemlsbGEvNS4wIChNZWVHbzsgTm9r
aWFOOSkgQXBwbGVXZWJLaXQvNTM0LjEzIChLSFRNTCwgbGlrZSBHZWNrbykgTm9raWFCcm93c2Vy
LzguNS4wIE1vYmlsZSBTYWZhcmkvNTM0LjEzIiwgIjQ4MHg4NTR4MSJdLAotCi0gICAgICAgICAg
ICBbV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdGhlci4uLiIpLCAiT3RoZXIiXQotICAgICAgICBd
OwotCi0gICAgICAgIHZhciBmaWVsZHNldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJmaWVsZHNldCIpOwotICAgICAgICB0aGlzLl9zZWxlY3RFbGVtZW50ID0gZmllbGRzZXRFbGVt
ZW50LmNyZWF0ZUNoaWxkKCJzZWxlY3QiKTsKLSAgICAgICAgdGhpcy5fb3RoZXJVc2VyQWdlbnRF
bGVtZW50ID0gZmllbGRzZXRFbGVtZW50LmNyZWF0ZUNoaWxkKCJpbnB1dCIpOwotICAgICAgICB0
aGlzLl9vdGhlclVzZXJBZ2VudEVsZW1lbnQudHlwZSA9ICJ0ZXh0IjsKLSAgICAgICAgdGhpcy5f
b3RoZXJVc2VyQWdlbnRFbGVtZW50LnZhbHVlID0gdXNlckFnZW50OwotICAgICAgICB0aGlzLl9v
dGhlclVzZXJBZ2VudEVsZW1lbnQudGl0bGUgPSB1c2VyQWdlbnQ7Ci0gICAgICAgIHRoaXMuX3Vz
ZXJBZ2VudEZpZWxkc2V0RWxlbWVudCA9IGZpZWxkc2V0RWxlbWVudDsKLQotICAgICAgICB2YXIg
c2VsZWN0aW9uUmVzdG9yZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1
c2VyQWdlbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgYWdlbnQgPSB1c2VyQWdl
bnRzW2ldOwotICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG5ldyBPcHRpb24oYWdlbnRbMF0sIGFn
ZW50WzFdKTsKLSAgICAgICAgICAgIG9wdGlvbi5fbWV0cmljcyA9IGFnZW50WzJdID8gYWdlbnRb
Ml0gOiAiIjsKLSAgICAgICAgICAgIHRoaXMuX3NlbGVjdEVsZW1lbnQuYWRkKG9wdGlvbik7Ci0g
ICAgICAgICAgICBpZiAodXNlckFnZW50ID09PSBhZ2VudFsxXSkgewotICAgICAgICAgICAgICAg
IHRoaXMuX3NlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IGk7Ci0gICAgICAgICAgICAgICAg
c2VsZWN0aW9uUmVzdG9yZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFzZWxlY3Rpb25SZXN0b3JlZCkgewotICAgICAgICAgICAgaWYgKCF1c2VyQWdl
bnQpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0g
MDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RFbGVtZW50
LnNlbGVjdGVkSW5kZXggPSB1c2VyQWdlbnRzLmxlbmd0aCAtIDE7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLl9zZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMu
X3NlbGVjdGlvbkNoYW5nZWQuYmluZCh0aGlzLCB0cnVlKSwgZmFsc2UpOwotCi0gICAgICAgIGZp
ZWxkc2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsIHRleHREb3VibGVDbGlj
a2VkLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fb3RoZXJVc2VyQWdlbnRFbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpLCBmYWxz
ZSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gdGV4dERvdWJsZUNsaWNrZWQoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0aGlzLl9zZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSB1c2VyQWdlbnRz
Lmxlbmd0aCAtIDE7Ci0gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB0ZXh0Q2hhbmdlZCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy51c2VyQWdlbnQuc2V0KHRoaXMuX290aGVyVXNl
ckFnZW50RWxlbWVudC52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjaGVj
a2JveENsaWNrZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2hlY2tib3hFbGVtZW50
LmNoZWNrZWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl91c2VyQWdlbnRGaWVsZHNldEVsZW1l
bnQuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25DaGFu
Z2VkKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJB
Z2VudEZpZWxkc2V0RWxlbWVudC5kaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fb3RoZXJVc2VyQWdlbnRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci51c2VyQWdlbnRTdXBwb3J0LnRvZ2dsZVVzZXJBZ2Vu
dE92ZXJyaWRlKGNoZWNrYm94RWxlbWVudC5jaGVja2VkKTsKLSAgICAgICAgfQotICAgICAgICBj
aGVja2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjaGVja2JveENsaWNrZWQu
YmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgICAgIGNoZWNrYm94Q2xpY2tlZC5jYWxsKHRoaXMp
OwotICAgICAgICByZXR1cm4gZmllbGRzZXRFbGVtZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc1VzZXJHZXN0dXJlCi0gICAgICovCi0gICAgX3NlbGVj
dGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKGlzVXNlckdlc3R1cmUpCi0gICAgewotICAgICAgICB2YXIg
dmFsdWUgPSB0aGlzLl9zZWxlY3RFbGVtZW50Lm9wdGlvbnNbdGhpcy5fc2VsZWN0RWxlbWVudC5z
ZWxlY3RlZEluZGV4XS52YWx1ZTsKLSAgICAgICAgaWYgKHZhbHVlICE9PSAiT3RoZXIiKSB7Ci0g
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudXNlckFnZW50LnNldCh2YWx1ZSk7Ci0g
ICAgICAgICAgICB0aGlzLl9vdGhlclVzZXJBZ2VudEVsZW1lbnQudmFsdWUgPSB2YWx1ZTsKLSAg
ICAgICAgICAgIHRoaXMuX290aGVyVXNlckFnZW50RWxlbWVudC50aXRsZSA9IHZhbHVlOwotICAg
ICAgICAgICAgdGhpcy5fb3RoZXJVc2VyQWdlbnRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX290aGVyVXNlckFnZW50RWxlbWVudC5k
aXNhYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5fb3RoZXJVc2VyQWdlbnRFbGVtZW50
LmZvY3VzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNVc2VyR2VzdHVyZSAmJiBDYXBh
YmlsaXRpZXMuY2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKSB7Ci0gICAgICAgICAgICB2YXIgbWV0
cmljcyA9IHRoaXMuX3NlbGVjdEVsZW1lbnQub3B0aW9uc1t0aGlzLl9zZWxlY3RFbGVtZW50LnNl
bGVjdGVkSW5kZXhdLl9tZXRyaWNzOwotICAgICAgICAgICAgdGhpcy5fc2V0RGV2aWNlTWV0cmlj
c092ZXJyaWRlKFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmljZU1ldHJpY3MucGFy
c2VTZXR0aW5nKG1ldHJpY3MpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBlbGVtZW50IHVuZGVyIHRoZSBwYXJlbnRF
bGVtZW50IHdpdGggdGhlIGdpdmVuIGlkIGFuZCBkZWZhdWx0VGV4dC4KLSAgICAgKiBJdCBhbHNv
IHNldHMgYW4gb25ibHVyIGV2ZW50IGxpc3RlbmVyLgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0g
cGFyZW50RWxlbWVudAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBkZWZhdWx0VGV4dAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKil9IGV2ZW50TGlz
dGVuZXIKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBudW1lcmljCi0gICAgICogQHJldHVybiB7
RWxlbWVudH0gZWxlbWVudAotICAgICAqLwotICAgIF9jcmVhdGVJbnB1dDogZnVuY3Rpb24ocGFy
ZW50RWxlbWVudCwgaWQsIGRlZmF1bHRUZXh0LCBldmVudExpc3RlbmVyLCBudW1lcmljKQotICAg
IHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LmNyZWF0ZUNoaWxkKCJpbnB1
dCIpOwotICAgICAgICBlbGVtZW50LmlkID0gaWQ7Ci0gICAgICAgIGVsZW1lbnQudHlwZSA9ICJ0
ZXh0IjsKLSAgICAgICAgZWxlbWVudC5tYXhMZW5ndGggPSAxMjsKLSAgICAgICAgZWxlbWVudC5z
dHlsZS53aWR0aCA9ICI4MHB4IjsKLSAgICAgICAgZWxlbWVudC52YWx1ZSA9IGRlZmF1bHRUZXh0
OwotICAgICAgICBlbGVtZW50LmFsaWduID0gInJpZ2h0IjsKLSAgICAgICAgaWYgKG51bWVyaWMp
Ci0gICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJudW1lcmljIjsKLSAgICAgICAgZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgZXZlbnRMaXN0ZW5lciwgZmFsc2UpOwotICAg
ICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAgX2NyZWF0ZURldmljZU1ldHJpY3ND
b250cm9sOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBjb25zdCBtZXRyaWNzU2V0dGluZyA9
IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZXZpY2VNZXRyaWNzLmdldCgpOwotICAgICAgICB2YXIg
bWV0cmljcyA9IFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmljZU1ldHJpY3MucGFy
c2VTZXR0aW5nKG1ldHJpY3NTZXR0aW5nKTsKLQotICAgICAgICBjb25zdCBwID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICBjb25zdCBsYWJlbEVsZW1lbnQgPSBwLmNyZWF0
ZUNoaWxkKCJsYWJlbCIpOwotICAgICAgICBjb25zdCBjaGVja2JveEVsZW1lbnQgPSBsYWJlbEVs
ZW1lbnQuY3JlYXRlQ2hpbGQoImlucHV0Iik7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVudC5pZCA9
ICJtZXRyaWNzLW92ZXJyaWRlLWNoZWNrYm94IjsKLSAgICAgICAgY2hlY2tib3hFbGVtZW50LnR5
cGUgPSAiY2hlY2tib3giOwotICAgICAgICBjaGVja2JveEVsZW1lbnQuY2hlY2tlZCA9IGZhbHNl
OwotICAgICAgICBjaGVja2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlz
Ll9vbk1ldHJpY3NDaGVja2JveENsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0
aGlzLl9tZXRyaWNzQ2hlY2tib3hFbGVtZW50ID0gY2hlY2tib3hFbGVtZW50OwotICAgICAgICBs
YWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJEZXZpY2UgbWV0cmljcyIpKSk7Ci0KLSAgICAgICAgY29uc3QgbWV0cmlj
c1NlY3Rpb25FbGVtZW50ID0gdGhpcy5fY3JlYXRlRGV2aWNlTWV0cmljc0VsZW1lbnQobWV0cmlj
cyk7Ci0gICAgICAgIHAuYXBwZW5kQ2hpbGQobWV0cmljc1NlY3Rpb25FbGVtZW50KTsKLSAgICAg
ICAgdGhpcy5fbWV0cmljc1NlY3Rpb25FbGVtZW50ID0gbWV0cmljc1NlY3Rpb25FbGVtZW50Owot
ICAgICAgICB0aGlzLl9vbk1ldHJpY3NDaGVja2JveENsaWNrZWQoKTsKLQotICAgICAgICByZXR1
cm4gcDsKLSAgICB9LAotCi0gICAgX29uTWV0cmljc0NoZWNrYm94Q2xpY2tlZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRyb2xzRGlzYWJsZWQgPSAhdGhpcy5fbWV0cmljc0No
ZWNrYm94RWxlbWVudC5jaGVja2VkOwotICAgICAgICB0aGlzLl9kZXZpY2VNZXRyaWNzRmllbGRz
ZXRFbGVtZW50LmRpc2FibGVkID0gY29udHJvbHNEaXNhYmxlZDsKLQotICAgICAgICBpZiAoY29u
dHJvbHNEaXNhYmxlZCkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnVzZXJBZ2VudFN1cHBv
cnQudG9nZ2xlRGV2aWNlTWV0cmljc092ZXJyaWRlKGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBtZXRyaWNzID0gV2ViSW5zcGVjdG9yLlVzZXJB
Z2VudFN1cHBvcnQuRGV2aWNlTWV0cmljcy5wYXJzZVVzZXJJbnB1dCh0aGlzLl93aWR0aE92ZXJy
aWRlRWxlbWVudC52YWx1ZSwgdGhpcy5faGVpZ2h0T3ZlcnJpZGVFbGVtZW50LnZhbHVlLCB0aGlz
Ll9mb250U2NhbGVGYWN0b3JPdmVycmlkZUVsZW1lbnQudmFsdWUpOwotICAgICAgICBpZiAobWV0
cmljcyAmJiBtZXRyaWNzLmlzVmFsaWQoKSAmJiBtZXRyaWNzLndpZHRoICYmIG1ldHJpY3MuaGVp
Z2h0KSB7Ci0gICAgICAgICAgICB0aGlzLl9zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGUobWV0cmlj
cywgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci51c2VyQWdlbnRTdXBw
b3J0LnRvZ2dsZURldmljZU1ldHJpY3NPdmVycmlkZSh0cnVlKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIXRoaXMuX3dpZHRoT3ZlcnJpZGVFbGVtZW50LnZhbHVlKQotICAgICAgICAgICAgdGhp
cy5fd2lkdGhPdmVycmlkZUVsZW1lbnQuZm9jdXMoKTsKLSAgICB9LAotCi0gICAgX2FwcGx5RGV2
aWNlTWV0cmljc1VzZXJJbnB1dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2V0
RGV2aWNlTWV0cmljc092ZXJyaWRlKFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmlj
ZU1ldHJpY3MucGFyc2VVc2VySW5wdXQodGhpcy5fd2lkdGhPdmVycmlkZUVsZW1lbnQudmFsdWUu
dHJpbSgpLCB0aGlzLl9oZWlnaHRPdmVycmlkZUVsZW1lbnQudmFsdWUudHJpbSgpLCB0aGlzLl9m
b250U2NhbGVGYWN0b3JPdmVycmlkZUVsZW1lbnQudmFsdWUudHJpbSgpKSwgdHJ1ZSwgZmFsc2Up
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gez9XZWJJbnNwZWN0b3IuVXNlckFn
ZW50U3VwcG9ydC5EZXZpY2VNZXRyaWNzfSBtZXRyaWNzCi0gICAgICogQHBhcmFtIHtib29sZWFu
fSB1c2VySW5wdXRNb2RpZmllZAotICAgICAqLwotICAgIF9zZXREZXZpY2VNZXRyaWNzT3ZlcnJp
ZGU6IGZ1bmN0aW9uKG1ldHJpY3MsIHVzZXJJbnB1dE1vZGlmaWVkLCB1cGRhdGVDaGVja2JveCkK
LSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHNldFZhbGlkKGNvbmRpdGlvbiwgZWxlbWVudCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikKLSAgICAgICAgICAgICAgICBlbGVt
ZW50LnJlbW92ZVN0eWxlQ2xhc3MoImVycm9yLWlucHV0Iik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJlcnJvci1pbnB1dCIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc2V0VmFsaWQobWV0cmljcyAmJiBtZXRyaWNzLmlzV2lkdGhWYWxp
ZCgpLCB0aGlzLl93aWR0aE92ZXJyaWRlRWxlbWVudCk7Ci0gICAgICAgIHNldFZhbGlkKG1ldHJp
Y3MgJiYgbWV0cmljcy5pc0hlaWdodFZhbGlkKCksIHRoaXMuX2hlaWdodE92ZXJyaWRlRWxlbWVu
dCk7Ci0gICAgICAgIHNldFZhbGlkKG1ldHJpY3MgJiYgbWV0cmljcy5pc0ZvbnRTY2FsZUZhY3Rv
clZhbGlkKCksIHRoaXMuX2ZvbnRTY2FsZUZhY3Rvck92ZXJyaWRlRWxlbWVudCk7Ci0KLSAgICAg
ICAgaWYgKCFtZXRyaWNzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghdXNl
cklucHV0TW9kaWZpZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX3dpZHRoT3ZlcnJpZGVFbGVtZW50
LnZhbHVlID0gbWV0cmljcy53aWR0aFRvSW5wdXQoKTsKLSAgICAgICAgICAgIHRoaXMuX2hlaWdo
dE92ZXJyaWRlRWxlbWVudC52YWx1ZSA9IG1ldHJpY3MuaGVpZ2h0VG9JbnB1dCgpOwotICAgICAg
ICAgICAgdGhpcy5fZm9udFNjYWxlRmFjdG9yT3ZlcnJpZGVFbGVtZW50LnZhbHVlID0gbWV0cmlj
cy5mb250U2NhbGVGYWN0b3JUb0lucHV0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWV0
cmljcy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1ldHJpY3MudG9TZXR0
aW5nKCk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgIT09IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5k
ZXZpY2VNZXRyaWNzLmdldCgpKQotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5n
cy5kZXZpY2VNZXRyaWNzLnNldCh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhp
cy5fbWV0cmljc0NoZWNrYm94RWxlbWVudCAmJiB1cGRhdGVDaGVja2JveCkgewotICAgICAgICAg
ICAgdGhpcy5fbWV0cmljc0NoZWNrYm94RWxlbWVudC5jaGVja2VkID0gISFtZXRyaWNzLnRvU2V0
dGluZygpOwotICAgICAgICAgICAgdGhpcy5fb25NZXRyaWNzQ2hlY2tib3hDbGlja2VkKCk7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
VXNlckFnZW50U3VwcG9ydC5EZXZpY2VNZXRyaWNzfSBtZXRyaWNzCi0gICAgICovCi0gICAgX2Ny
ZWF0ZURldmljZU1ldHJpY3NFbGVtZW50OiBmdW5jdGlvbihtZXRyaWNzKQotICAgIHsKLSAgICAg
ICAgdmFyIGZpZWxkc2V0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0
Iik7Ci0gICAgICAgIGZpZWxkc2V0RWxlbWVudC5pZCA9ICJtZXRyaWNzLW92ZXJyaWRlLXNlY3Rp
b24iOwotICAgICAgICB0aGlzLl9kZXZpY2VNZXRyaWNzRmllbGRzZXRFbGVtZW50ID0gZmllbGRz
ZXRFbGVtZW50OwotCi0gICAgICAgIGZ1bmN0aW9uIHN3YXBEaW1lbnNpb25zQ2xpY2tlZChldmVu
dCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdpZHRoVmFsdWUgPSB0aGlzLl93aWR0aE92
ZXJyaWRlRWxlbWVudC52YWx1ZTsKLSAgICAgICAgICAgIHRoaXMuX3dpZHRoT3ZlcnJpZGVFbGVt
ZW50LnZhbHVlID0gdGhpcy5faGVpZ2h0T3ZlcnJpZGVFbGVtZW50LnZhbHVlOwotICAgICAgICAg
ICAgdGhpcy5faGVpZ2h0T3ZlcnJpZGVFbGVtZW50LnZhbHVlID0gd2lkdGhWYWx1ZTsKLSAgICAg
ICAgICAgIHRoaXMuX2FwcGx5RGV2aWNlTWV0cmljc1VzZXJJbnB1dCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIHRhYmxlRWxlbWVudCA9IGZpZWxkc2V0RWxlbWVudC5jcmVhdGVDaGlsZCgi
dGFibGUiLCAibm93cmFwIik7Ci0KLSAgICAgICAgdmFyIHJvd0VsZW1lbnQgPSB0YWJsZUVsZW1l
bnQuY3JlYXRlQ2hpbGQoInRyIik7Ci0gICAgICAgIHZhciBjZWxsRWxlbWVudCA9IHJvd0VsZW1l
bnQuY3JlYXRlQ2hpbGQoInRkIik7Ci0gICAgICAgIGNlbGxFbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2NyZWVuIHJlc29s
dXRpb246IikpKTsKLSAgICAgICAgY2VsbEVsZW1lbnQgPSByb3dFbGVtZW50LmNyZWF0ZUNoaWxk
KCJ0ZCIpOwotICAgICAgICB0aGlzLl93aWR0aE92ZXJyaWRlRWxlbWVudCA9IHRoaXMuX2NyZWF0
ZUlucHV0KGNlbGxFbGVtZW50LCAibWV0cmljcy1vdmVycmlkZS13aWR0aCIsIFN0cmluZyhtZXRy
aWNzLndpZHRoIHx8IHNjcmVlbi53aWR0aCksIHRoaXMuX2FwcGx5RGV2aWNlTWV0cmljc1VzZXJJ
bnB1dC5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICAgICAgY2VsbEVsZW1lbnQuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiBcdTAwRDcgIikpOyAvLyBNVUxUSVBMSUNBVElPTiBT
SUdOLgotICAgICAgICB0aGlzLl9oZWlnaHRPdmVycmlkZUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVJ
bnB1dChjZWxsRWxlbWVudCwgIm1ldHJpY3Mtb3ZlcnJpZGUtaGVpZ2h0IiwgU3RyaW5nKG1ldHJp
Y3MuaGVpZ2h0IHx8IHNjcmVlbi5oZWlnaHQpLCB0aGlzLl9hcHBseURldmljZU1ldHJpY3NVc2Vy
SW5wdXQuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgICAgIGNlbGxFbGVtZW50LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgXHUyMDE0ICIpKTsgLy8gRU0gREFTSC4KLSAgICAg
ICAgdGhpcy5fc3dhcERpbWVuc2lvbnNFbGVtZW50ID0gY2VsbEVsZW1lbnQuY3JlYXRlQ2hpbGQo
ImJ1dHRvbiIpOwotICAgICAgICB0aGlzLl9zd2FwRGltZW5zaW9uc0VsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiBcdTIxQzQgIikpOyAvLyBSSUdIVFdBUkRTIEFS
Uk9XIE9WRVIgTEVGVFdBUkRTIEFSUk9XLgotICAgICAgICB0aGlzLl9zd2FwRGltZW5zaW9uc0Vs
ZW1lbnQudGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN3YXAgZGltZW5zaW9ucyIpOwot
ICAgICAgICB0aGlzLl9zd2FwRGltZW5zaW9uc0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xp
Y2siLCBzd2FwRGltZW5zaW9uc0NsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgICAg
IHJvd0VsZW1lbnQgPSB0YWJsZUVsZW1lbnQuY3JlYXRlQ2hpbGQoInRyIik7Ci0gICAgICAgIGNl
bGxFbGVtZW50ID0gcm93RWxlbWVudC5jcmVhdGVDaGlsZCgidGQiKTsKLSAgICAgICAgY2VsbEVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJGb250IHNjYWxlIGZhY3RvcjoiKSkpOwotICAgICAgICBjZWxsRWxlbWVudCA9IHJv
d0VsZW1lbnQuY3JlYXRlQ2hpbGQoInRkIik7Ci0gICAgICAgIHRoaXMuX2ZvbnRTY2FsZUZhY3Rv
ck92ZXJyaWRlRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUlucHV0KGNlbGxFbGVtZW50LCAibWV0cmlj
cy1vdmVycmlkZS1mb250LXNjYWxlIiwgU3RyaW5nKG1ldHJpY3MuZm9udFNjYWxlRmFjdG9yIHx8
IDEpLCB0aGlzLl9hcHBseURldmljZU1ldHJpY3NVc2VySW5wdXQuYmluZCh0aGlzKSwgdHJ1ZSk7
Ci0KLSAgICAgICAgcm93RWxlbWVudCA9IHRhYmxlRWxlbWVudC5jcmVhdGVDaGlsZCgidHIiKTsK
LSAgICAgICAgY2VsbEVsZW1lbnQgPSByb3dFbGVtZW50LmNyZWF0ZUNoaWxkKCJ0ZCIpOwotICAg
ICAgICBjZWxsRWxlbWVudC5jb2xTcGFuID0gMjsKLSAgICAgICAgdGhpcy5fZml0V2luZG93Q2hl
Y2tib3hFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAg
Y2VsbEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ2hlY2tib3hTZXR0aW5nKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRml0IGluIHdpbmRvdyIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
ZGV2aWNlRml0V2luZG93LCB0cnVlLCB0aGlzLl9maXRXaW5kb3dDaGVja2JveEVsZW1lbnQpKTsK
LQotICAgICAgICByZXR1cm4gZmllbGRzZXRFbGVtZW50OwotICAgIH0sCi0KLSAgICBfY3JlYXRl
R2VvbG9jYXRpb25PdmVycmlkZUNvbnRyb2w6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGNv
bnN0IGdlb2xvY2F0aW9uU2V0dGluZyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5nZW9sb2NhdGlv
bk92ZXJyaWRlLmdldCgpOwotICAgICAgICB2YXIgZ2VvbG9jYXRpb24gPSBXZWJJbnNwZWN0b3Iu
VXNlckFnZW50U3VwcG9ydC5HZW9sb2NhdGlvblBvc2l0aW9uLnBhcnNlU2V0dGluZyhnZW9sb2Nh
dGlvblNldHRpbmcpOwotICAgICAgICB2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAi
KTsKLSAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IHAuY3JlYXRlQ2hpbGQoImxhYmVsIik7Ci0g
ICAgICAgIHZhciBjaGVja2JveEVsZW1lbnQgPSBsYWJlbEVsZW1lbnQuY3JlYXRlQ2hpbGQoImlu
cHV0Iik7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVudC5pZCA9ICJnZW9sb2NhdGlvbi1vdmVycmlk
ZS1jaGVja2JveCI7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVudC50eXBlID0gImNoZWNrYm94IjsK
LSAgICAgICAgY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSBmYWxzZTsKLSAgICAgICAgY2hlY2ti
b3hFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fb25HZW9sb2NhdGlvbk92
ZXJyaWRlQ2hlY2tib3hDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgdGhpcy5f
Z2VvbG9jYXRpb25PdmVycmlkZUNoZWNrYm94RWxlbWVudCA9IGNoZWNrYm94RWxlbWVudDsKLSAg
ICAgICAgbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiT3ZlcnJpZGUgR2VvbG9jYXRpb24iKSkpOwotCi0gICAgICAg
IHZhciBnZW9sb2NhdGlvblNlY3Rpb25FbGVtZW50ID0gdGhpcy5fY3JlYXRlR2VvbG9jYXRpb25P
dmVycmlkZUVsZW1lbnQoZ2VvbG9jYXRpb24pOwotICAgICAgICBwLmFwcGVuZENoaWxkKGdlb2xv
Y2F0aW9uU2VjdGlvbkVsZW1lbnQpOwotICAgICAgICB0aGlzLl9nZW9sb2NhdGlvblNlY3Rpb25F
bGVtZW50ID0gZ2VvbG9jYXRpb25TZWN0aW9uRWxlbWVudDsKLSAgICAgICAgdGhpcy5fb25HZW9s
b2NhdGlvbk92ZXJyaWRlQ2hlY2tib3hDbGlja2VkKCk7Ci0gICAgICAgIHJldHVybiBwOwotICAg
IH0sCi0KLSAgICBfb25HZW9sb2NhdGlvbk92ZXJyaWRlQ2hlY2tib3hDbGlja2VkOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgY29udHJvbHNEaXNhYmxlZCA9ICF0aGlzLl9nZW9sb2Nh
dGlvbk92ZXJyaWRlQ2hlY2tib3hFbGVtZW50LmNoZWNrZWQ7Ci0gICAgICAgIHRoaXMuX2dlb2xv
Y2F0aW9uRmllbGRzZXRFbGVtZW50LmRpc2FibGVkID0gY29udHJvbHNEaXNhYmxlZDsKLQotICAg
ICAgICBpZiAoY29udHJvbHNEaXNhYmxlZCkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnVz
ZXJBZ2VudFN1cHBvcnQudG9nZ2xlR2VvbG9jYXRpb25Qb3NpdGlvbk92ZXJyaWRlKGZhbHNlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBnZW9sb2NhdGlv
biA9IFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0Lkdlb2xvY2F0aW9uUG9zaXRpb24ucGFy
c2VVc2VySW5wdXQodGhpcy5fbGF0aXR1ZGVFbGVtZW50LnZhbHVlLCB0aGlzLl9sb25naXR1ZGVF
bGVtZW50LnZhbHVlLCB0aGlzLl9nZW9sb2NhdGlvbkVycm9yRWxlbWVudC5jaGVja2VkKTsKLSAg
ICAgICAgaWYgKGdlb2xvY2F0aW9uKSB7Ci0gICAgICAgICAgICB0aGlzLl9zZXRHZW9sb2NhdGlv
blBvc2l0aW9uKGdlb2xvY2F0aW9uLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLnVzZXJBZ2VudFN1cHBvcnQudG9nZ2xlR2VvbG9jYXRpb25Qb3NpdGlvbk92ZXJyaWRl
KHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdGhpcy5fbGF0aXR1ZGVFbGVtZW50LnZh
bHVlKQotICAgICAgICAgICAgdGhpcy5fbGF0aXR1ZGVFbGVtZW50LmZvY3VzKCk7Ci0gICAgfSwK
LQotICAgIF9hcHBseUdlb2xvY2F0aW9uVXNlcklucHV0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9zZXRHZW9sb2NhdGlvblBvc2l0aW9uKFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRT
dXBwb3J0Lkdlb2xvY2F0aW9uUG9zaXRpb24ucGFyc2VVc2VySW5wdXQodGhpcy5fbGF0aXR1ZGVF
bGVtZW50LnZhbHVlLnRyaW0oKSwgdGhpcy5fbG9uZ2l0dWRlRWxlbWVudC52YWx1ZS50cmltKCks
IHRoaXMuX2dlb2xvY2F0aW9uRXJyb3JFbGVtZW50LmNoZWNrZWQpLCB0cnVlLCBmYWxzZSk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5Vc2VyQWdlbnRT
dXBwb3J0Lkdlb2xvY2F0aW9uUG9zaXRpb259IGdlb2xvY2F0aW9uCi0gICAgICogQHBhcmFtIHti
b29sZWFufSB1c2VySW5wdXRNb2RpZmllZAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRl
Q2hlY2tib3gKLSAgICAgKi8KLSAgICBfc2V0R2VvbG9jYXRpb25Qb3NpdGlvbjogZnVuY3Rpb24o
Z2VvbG9jYXRpb24sIHVzZXJJbnB1dE1vZGlmaWVkLCB1cGRhdGVDaGVja2JveCkKLSAgICB7Ci0g
ICAgICAgIGlmICghZ2VvbG9jYXRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKCF1c2VySW5wdXRNb2RpZmllZCkgewotICAgICAgICAgICAgdGhpcy5fbGF0aXR1ZGVFbGVt
ZW50LnZhbHVlID0gZ2VvbG9jYXRpb24ubGF0aXR1ZGU7Ci0gICAgICAgICAgICB0aGlzLl9sb25n
aXR1ZGVFbGVtZW50LnZhbHVlID0gZ2VvbG9jYXRpb24ubG9uZ2l0dWRlOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIHZhbHVlID0gZ2VvbG9jYXRpb24udG9TZXR0aW5nKCk7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5zZXR0aW5ncy5nZW9sb2NhdGlvbk92ZXJyaWRlLnNldCh2YWx1ZSk7Ci0KLSAg
ICAgICAgaWYgKHRoaXMuX2dlb2xvY2F0aW9uT3ZlcnJpZGVDaGVja2JveEVsZW1lbnQgJiYgdXBk
YXRlQ2hlY2tib3gpIHsKLSAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uT3ZlcnJpZGVDaGVj
a2JveEVsZW1lbnQuY2hlY2tlZCA9ICEhZ2VvbG9jYXRpb24udG9TZXR0aW5nKCk7Ci0gICAgICAg
ICAgICB0aGlzLl9vbkdlb2xvY2F0aW9uT3ZlcnJpZGVDaGVja2JveENsaWNrZWQoKTsKLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Vc2Vy
QWdlbnRTdXBwb3J0Lkdlb2xvY2F0aW9uUG9zaXRpb259IGdlb2xvY2F0aW9uCi0gICAgICovCi0g
ICAgX2NyZWF0ZUdlb2xvY2F0aW9uT3ZlcnJpZGVFbGVtZW50OiBmdW5jdGlvbihnZW9sb2NhdGlv
bikKLSAgICB7Ci0gICAgICAgIHZhciBmaWVsZHNldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJmaWVsZHNldCIpOwotICAgICAgICBmaWVsZHNldEVsZW1lbnQuaWQgPSAiZ2VvbG9j
YXRpb24tb3ZlcnJpZGUtc2VjdGlvbiI7Ci0gICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uRmllbGRz
ZXRFbGVtZW50ID0gZmllbGRzZXRFbGVtZW50OwotCi0gICAgICAgIHZhciB0YWJsZUVsZW1lbnQg
PSBmaWVsZHNldEVsZW1lbnQuY3JlYXRlQ2hpbGQoInRhYmxlIik7Ci0gICAgICAgIHZhciByb3dF
bGVtZW50ID0gdGFibGVFbGVtZW50LmNyZWF0ZUNoaWxkKCJ0ciIpOwotICAgICAgICB2YXIgY2Vs
bEVsZW1lbnQgPSByb3dFbGVtZW50LmNyZWF0ZUNoaWxkKCJ0ZCIpOwotICAgICAgICBjZWxsRWxl
bWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkdlb2xvY2F0aW9uIFBvc2l0aW9uIikgKyAiOiIpKTsKLSAgICAgICAgY2VsbEVsZW1l
bnQgPSByb3dFbGVtZW50LmNyZWF0ZUNoaWxkKCJ0ZCIpOwotICAgICAgICBjZWxsRWxlbWVudC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkxhdCA9ICIpKSk7Ci0gICAgICAgIHRoaXMuX2xhdGl0dWRlRWxlbWVudCA9IHRoaXMuX2NyZWF0
ZUlucHV0KGNlbGxFbGVtZW50LCAiZ2VvbG9jYXRpb24tb3ZlcnJpZGUtbGF0aXR1ZGUiLCBTdHJp
bmcoZ2VvbG9jYXRpb24ubGF0aXR1ZGUpLCB0aGlzLl9hcHBseUdlb2xvY2F0aW9uVXNlcklucHV0
LmJpbmQodGhpcyksIHRydWUpOwotICAgICAgICBjZWxsRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgiICwgIikpOwotICAgICAgICBjZWxsRWxlbWVudC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvbiA9
ICIpKSk7Ci0gICAgICAgIHRoaXMuX2xvbmdpdHVkZUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVJbnB1
dChjZWxsRWxlbWVudCwgImdlb2xvY2F0aW9uLW92ZXJyaWRlLWxvbmdpdHVkZSIsIFN0cmluZyhn
ZW9sb2NhdGlvbi5sb25naXR1ZGUpLCB0aGlzLl9hcHBseUdlb2xvY2F0aW9uVXNlcklucHV0LmJp
bmQodGhpcyksIHRydWUpOwotICAgICAgICByb3dFbGVtZW50ID0gdGFibGVFbGVtZW50LmNyZWF0
ZUNoaWxkKCJ0ciIpOwotICAgICAgICBjZWxsRWxlbWVudCA9IHJvd0VsZW1lbnQuY3JlYXRlQ2hp
bGQoInRkIik7Ci0gICAgICAgIGNlbGxFbGVtZW50LmNvbFNwYW4gPSAyOwotICAgICAgICB2YXIg
Z2VvbG9jYXRpb25FcnJvckxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxh
YmVsIik7Ci0gICAgICAgIHZhciBnZW9sb2NhdGlvbkVycm9yQ2hlY2tib3hFbGVtZW50ID0gZ2Vv
bG9jYXRpb25FcnJvckxhYmVsRWxlbWVudC5jcmVhdGVDaGlsZCgiaW5wdXQiKTsKLSAgICAgICAg
Z2VvbG9jYXRpb25FcnJvckNoZWNrYm94RWxlbWVudC5pZCA9ICJnZW9sb2NhdGlvbi1lcnJvciI7
Ci0gICAgICAgIGdlb2xvY2F0aW9uRXJyb3JDaGVja2JveEVsZW1lbnQudHlwZSA9ICJjaGVja2Jv
eCI7Ci0gICAgICAgIGdlb2xvY2F0aW9uRXJyb3JDaGVja2JveEVsZW1lbnQuY2hlY2tlZCA9ICFn
ZW9sb2NhdGlvbiB8fCBnZW9sb2NhdGlvbi5lcnJvcjsKLSAgICAgICAgZ2VvbG9jYXRpb25FcnJv
ckNoZWNrYm94RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2FwcGx5R2Vv
bG9jYXRpb25Vc2VySW5wdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICBnZW9sb2NhdGlv
bkVycm9yTGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiRW11bGF0ZSBwb3NpdGlvbiB1bmF2YWlsYWJsZSIpKSk7Ci0g
ICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uRXJyb3JFbGVtZW50ID0gZ2VvbG9jYXRpb25FcnJvckNo
ZWNrYm94RWxlbWVudDsKLSAgICAgICAgY2VsbEVsZW1lbnQuYXBwZW5kQ2hpbGQoZ2VvbG9jYXRp
b25FcnJvckxhYmVsRWxlbWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIGZpZWxkc2V0RWxlbWVudDsK
LSAgICB9LAotCi0gICAgX2NyZWF0ZURldmljZU9yaWVudGF0aW9uT3ZlcnJpZGVDb250cm9sOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBjb25zdCBkZXZpY2VPcmllbnRhdGlvblNldHRpbmcg
PSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZGV2aWNlT3JpZW50YXRpb25PdmVycmlkZS5nZXQoKTsK
LSAgICAgICAgdmFyIGRldmljZU9yaWVudGF0aW9uID0gV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1
cHBvcnQuRGV2aWNlT3JpZW50YXRpb24ucGFyc2VTZXR0aW5nKGRldmljZU9yaWVudGF0aW9uU2V0
dGluZyk7Ci0KLSAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Ci0g
ICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBwLmNyZWF0ZUNoaWxkKCJsYWJlbCIpOwotICAgICAg
ICB2YXIgY2hlY2tib3hFbGVtZW50ID0gbGFiZWxFbGVtZW50LmNyZWF0ZUNoaWxkKCJpbnB1dCIp
OwotICAgICAgICBjaGVja2JveEVsZW1lbnQuaWQgPSAiZGV2aWNlLW9yaWVudGF0aW9uLW92ZXJy
aWRlLWNoZWNrYm94IjsKLSAgICAgICAgY2hlY2tib3hFbGVtZW50LnR5cGUgPSAiY2hlY2tib3gi
OwotICAgICAgICBjaGVja2JveEVsZW1lbnQuY2hlY2tlZCA9IGZhbHNlOwotICAgICAgICBjaGVj
a2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9vbkRldmljZU9yaWVu
dGF0aW9uT3ZlcnJpZGVDaGVja2JveENsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAg
ICB0aGlzLl9kZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlQ2hlY2tib3hFbGVtZW50ID0gY2hlY2ti
b3hFbGVtZW50OwotICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdmVycmlkZSBEZXZpY2UgT3JpZW50
YXRpb24iKSkpOwotCi0gICAgICAgIHZhciBkZXZpY2VPcmllbnRhdGlvblNlY3Rpb25FbGVtZW50
ID0gdGhpcy5fY3JlYXRlRGV2aWNlT3JpZW50YXRpb25PdmVycmlkZUVsZW1lbnQoZGV2aWNlT3Jp
ZW50YXRpb24pOwotICAgICAgICBwLmFwcGVuZENoaWxkKGRldmljZU9yaWVudGF0aW9uU2VjdGlv
bkVsZW1lbnQpOwotICAgICAgICB0aGlzLl9kZXZpY2VPcmllbnRhdGlvblNlY3Rpb25FbGVtZW50
ID0gZGV2aWNlT3JpZW50YXRpb25TZWN0aW9uRWxlbWVudDsKLSAgICAgICAgdGhpcy5fb25EZXZp
Y2VPcmllbnRhdGlvbk92ZXJyaWRlQ2hlY2tib3hDbGlja2VkKCk7Ci0gICAgICAgIHJldHVybiBw
OwotICAgIH0sCi0KLSAgICBfb25EZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlQ2hlY2tib3hDbGlj
a2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY29udHJvbHNEaXNhYmxlZCA9ICF0
aGlzLl9kZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlQ2hlY2tib3hFbGVtZW50LmNoZWNrZWQ7Ci0g
ICAgICAgIHRoaXMuX2RldmljZU9yaWVudGF0aW9uRmllbGRzZXRFbGVtZW50LmRpc2FibGVkID0g
Y29udHJvbHNEaXNhYmxlZDsKLQotICAgICAgICBpZiAoY29udHJvbHNEaXNhYmxlZCkgewotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnVzZXJBZ2VudFN1cHBvcnQudG9nZ2xlRGV2aWNlT3JpZW50
YXRpb25PdmVycmlkZShmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgZGV2aWNlT3JpZW50YXRpb24gPSBXZWJJbnNwZWN0b3IuVXNlckFnZW50U3Vw
cG9ydC5EZXZpY2VPcmllbnRhdGlvbi5wYXJzZVVzZXJJbnB1dCh0aGlzLl9hbHBoYUVsZW1lbnQu
dmFsdWUsIHRoaXMuX2JldGFFbGVtZW50LnZhbHVlLCB0aGlzLl9nYW1tYUVsZW1lbnQudmFsdWUp
OwotICAgICAgICBpZiAoZGV2aWNlT3JpZW50YXRpb24pIHsKLSAgICAgICAgICAgIHRoaXMuX3Nl
dERldmljZU9yaWVudGF0aW9uKGRldmljZU9yaWVudGF0aW9uLCBmYWxzZSwgZmFsc2UpOwotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnVzZXJBZ2VudFN1cHBvcnQudG9nZ2xlRGV2aWNlT3JpZW50
YXRpb25PdmVycmlkZSh0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXRoaXMuX2FscGhh
RWxlbWVudC52YWx1ZSkKLSAgICAgICAgICAgIHRoaXMuX2FscGhhRWxlbWVudC5mb2N1cygpOwot
ICAgIH0sCi0KLSAgICBfYXBwbHlEZXZpY2VPcmllbnRhdGlvblVzZXJJbnB1dDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fc2V0RGV2aWNlT3JpZW50YXRpb24oV2ViSW5zcGVjdG9y
LlVzZXJBZ2VudFN1cHBvcnQuRGV2aWNlT3JpZW50YXRpb24ucGFyc2VVc2VySW5wdXQodGhpcy5f
YWxwaGFFbGVtZW50LnZhbHVlLnRyaW0oKSwgdGhpcy5fYmV0YUVsZW1lbnQudmFsdWUudHJpbSgp
LCB0aGlzLl9nYW1tYUVsZW1lbnQudmFsdWUudHJpbSgpKSwgdHJ1ZSwgZmFsc2UpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gez9XZWJJbnNwZWN0b3IuVXNlckFnZW50U3VwcG9y
dC5EZXZpY2VPcmllbnRhdGlvbn0gZGV2aWNlT3JpZW50YXRpb24KLSAgICAgKiBAcGFyYW0ge2Jv
b2xlYW59IHVzZXJJbnB1dE1vZGlmaWVkCi0gICAgICogQHBhcmFtIHtib29sZWFufSB1cGRhdGVD
aGVja2JveAotICAgICAqLwotICAgIF9zZXREZXZpY2VPcmllbnRhdGlvbjogZnVuY3Rpb24oZGV2
aWNlT3JpZW50YXRpb24sIHVzZXJJbnB1dE1vZGlmaWVkLCB1cGRhdGVDaGVja2JveCkKLSAgICB7
Ci0gICAgICAgIGlmICghZGV2aWNlT3JpZW50YXRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKCF1c2VySW5wdXRNb2RpZmllZCkgewotICAgICAgICAgICAgdGhpcy5fYWxw
aGFFbGVtZW50LnZhbHVlID0gZGV2aWNlT3JpZW50YXRpb24uYWxwaGE7Ci0gICAgICAgICAgICB0
aGlzLl9iZXRhRWxlbWVudC52YWx1ZSA9IGRldmljZU9yaWVudGF0aW9uLmJldGE7Ci0gICAgICAg
ICAgICB0aGlzLl9nYW1tYUVsZW1lbnQudmFsdWUgPSBkZXZpY2VPcmllbnRhdGlvbi5nYW1tYTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZhciB2YWx1ZSA9IGRldmljZU9yaWVudGF0aW9uLnRvU2V0
dGluZygpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZGV2aWNlT3JpZW50YXRpb25P
dmVycmlkZS5zZXQodmFsdWUpOwotCi0gICAgICAgIGlmICh0aGlzLl9kZXZpY2VPcmllbnRhdGlv
bk92ZXJyaWRlQ2hlY2tib3hFbGVtZW50ICYmIHVwZGF0ZUNoZWNrYm94KSB7Ci0gICAgICAgICAg
ICB0aGlzLl9kZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlQ2hlY2tib3hFbGVtZW50LmNoZWNrZWQg
PSAhIWRldmljZU9yaWVudGF0aW9uLnRvU2V0dGluZygpOwotICAgICAgICAgICAgdGhpcy5fb25E
ZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlQ2hlY2tib3hDbGlja2VkKCk7Ci0gICAgICAgIH0KLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVXNlckFnZW50U3Vw
cG9ydC5EZXZpY2VPcmllbnRhdGlvbn0gZGV2aWNlT3JpZW50YXRpb24KLSAgICAgKi8KLSAgICBf
Y3JlYXRlRGV2aWNlT3JpZW50YXRpb25PdmVycmlkZUVsZW1lbnQ6IGZ1bmN0aW9uKGRldmljZU9y
aWVudGF0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGZpZWxkc2V0RWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7Ci0gICAgICAgIGZpZWxkc2V0RWxlbWVudC5pZCA9
ICJkZXZpY2Utb3JpZW50YXRpb24tb3ZlcnJpZGUtc2VjdGlvbiI7Ci0gICAgICAgIHRoaXMuX2Rl
dmljZU9yaWVudGF0aW9uRmllbGRzZXRFbGVtZW50ID0gZmllbGRzZXRFbGVtZW50OwotCi0gICAg
ICAgIHZhciB0YWJsZUVsZW1lbnQgPSBmaWVsZHNldEVsZW1lbnQuY3JlYXRlQ2hpbGQoInRhYmxl
Iik7Ci0KLSAgICAgICAgdmFyIHJvd0VsZW1lbnQgPSB0YWJsZUVsZW1lbnQuY3JlYXRlQ2hpbGQo
InRyIik7Ci0gICAgICAgIHZhciBjZWxsRWxlbWVudCA9IHJvd0VsZW1lbnQuY3JlYXRlQ2hpbGQo
InRkIik7Ci0gICAgICAgIGNlbGxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJcdTAzQjE6ICIpKTsKLSAgICAgICAgdGhpcy5fYWxwaGFFbGVtZW50ID0gdGhpcy5f
Y3JlYXRlSW5wdXQoY2VsbEVsZW1lbnQsICJkZXZpY2Utb3JpZW50YXRpb24tb3ZlcnJpZGUtYWxw
aGEiLCBTdHJpbmcoZGV2aWNlT3JpZW50YXRpb24uYWxwaGEpLCB0aGlzLl9hcHBseURldmljZU9y
aWVudGF0aW9uVXNlcklucHV0LmJpbmQodGhpcyksIHRydWUpOwotICAgICAgICBjZWxsRWxlbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIFx1MDNCMjogIikpOwotICAg
ICAgICB0aGlzLl9iZXRhRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUlucHV0KGNlbGxFbGVtZW50LCAi
ZGV2aWNlLW9yaWVudGF0aW9uLW92ZXJyaWRlLWJldGEiLCBTdHJpbmcoZGV2aWNlT3JpZW50YXRp
b24uYmV0YSksIHRoaXMuX2FwcGx5RGV2aWNlT3JpZW50YXRpb25Vc2VySW5wdXQuYmluZCh0aGlz
KSwgdHJ1ZSk7Ci0gICAgICAgIGNlbGxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCIgXHUwM0IzOiAiKSk7Ci0gICAgICAgIHRoaXMuX2dhbW1hRWxlbWVudCA9IHRo
aXMuX2NyZWF0ZUlucHV0KGNlbGxFbGVtZW50LCAiZGV2aWNlLW9yaWVudGF0aW9uLW92ZXJyaWRl
LWdhbW1hIiwgU3RyaW5nKGRldmljZU9yaWVudGF0aW9uLmdhbW1hKSwgdGhpcy5fYXBwbHlEZXZp
Y2VPcmllbnRhdGlvblVzZXJJbnB1dC5iaW5kKHRoaXMpLCB0cnVlKTsKLQotICAgICAgICByZXR1
cm4gZmllbGRzZXRFbGVtZW50OwotICAgIH0sCi0KLSAgICBfY3JlYXRlTWVkaWFFbXVsYXRpb25F
bGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBjb25zdCBwID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgicCIpOwotICAgICAgICBjb25zdCBsYWJlbEVsZW1lbnQgPSBwLmNyZWF0ZUNo
aWxkKCJsYWJlbCIpOwotICAgICAgICBjb25zdCBjaGVja2JveEVsZW1lbnQgPSBsYWJlbEVsZW1l
bnQuY3JlYXRlQ2hpbGQoImlucHV0Iik7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVudC50eXBlID0g
ImNoZWNrYm94IjsKLSAgICAgICAgY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSBmYWxzZTsKLSAg
ICAgICAgbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiRW11bGF0ZSBDU1MgbWVkaWEiKSkpOwotCi0gICAgICAgIHZh
ciBtZWRpYVNlbGVjdEVsZW1lbnQgPSBwLmNyZWF0ZUNoaWxkKCJzZWxlY3QiKTsKLSAgICAgICAg
dmFyIG1lZGlhVHlwZXMgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5NZWRpYVR5cGVzOwot
ICAgICAgICB2YXIgZGVmYXVsdE1lZGlhID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmVtdWxhdGVk
Q1NTTWVkaWEuZ2V0KCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFUeXBlcy5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIG1lZGlhVHlwZSA9IG1lZGlhVHlwZXNbaV07
Ci0gICAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAiYWxsIikgewotICAgICAgICAgICAgICAg
IC8vICJhbGwiIGlzIG5vdCBhIGRldmljZS1zcGVjaWZpYyBtZWRpYSB0eXBlLgotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG9wdGlvbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwotICAgICAgICAgICAgb3B0aW9uLnRl
eHQgPSBtZWRpYVR5cGU7Ci0gICAgICAgICAgICBvcHRpb24udmFsdWUgPSBtZWRpYVR5cGU7Ci0g
ICAgICAgICAgICBtZWRpYVNlbGVjdEVsZW1lbnQuYWRkKG9wdGlvbik7Ci0gICAgICAgICAgICBp
ZiAobWVkaWFUeXBlID09PSBkZWZhdWx0TWVkaWEpCi0gICAgICAgICAgICAgICAgbWVkaWFTZWxl
Y3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSBtZWRpYVNlbGVjdEVsZW1lbnQub3B0aW9ucy5sZW5n
dGggLSAxOwotICAgICAgICB9Ci0gICAgICAgIG1lZGlhU2VsZWN0RWxlbWVudC5kaXNhYmxlZCA9
IHRydWU7Ci0gICAgICAgIHZhciBib3VuZExpc3RlbmVyID0gdGhpcy5fZW11bGF0ZU1lZGlhQ2hh
bmdlZC5iaW5kKHRoaXMsIGNoZWNrYm94RWxlbWVudCwgbWVkaWFTZWxlY3RFbGVtZW50KTsKLSAg
ICAgICAgY2hlY2tib3hFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYm91bmRMaXN0
ZW5lciwgZmFsc2UpOwotICAgICAgICBtZWRpYVNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigiY2hhbmdlIiwgYm91bmRMaXN0ZW5lciwgZmFsc2UpOwotICAgICAgICByZXR1cm4gcDsKLSAg
ICB9LAotCi0gICAgX2VtdWxhdGVNZWRpYUNoYW5nZWQ6IGZ1bmN0aW9uKGNoZWNrYm94LCBzZWxl
Y3QpCi0gICAgewotICAgICAgICBzZWxlY3QuZGlzYWJsZWQgPSAhY2hlY2tib3guY2hlY2tlZDsK
LSAgICAgICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHsKLSAgICAgICAgICAgIHZhciBtZWRpYSA9
IHNlbGVjdC5vcHRpb25zW3NlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKLSAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5lbXVsYXRlZENTU01lZGlhLnNldChtZWRpYSk7Ci0gICAg
ICAgICAgICBQYWdlQWdlbnQuc2V0RW11bGF0ZWRNZWRpYShtZWRpYSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgUGFnZUFnZW50LnNldEVtdWxhdGVkTWVkaWEoIiIpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuY3NzTW9kZWwubWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKLSAgICB9LAot
Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT3ZlcnZpZXdHcmlkLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PdmVydmlld0dyaWQuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNzlmOGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PdmVydmlld0dyaWQuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw0NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30g
cHJlZml4Ci0gKi8KLVdlYkluc3BlY3Rvci5PdmVydmlld0dyaWQgPSBmdW5jdGlvbihwcmVmaXgp
Ci17Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJmaWxsIjsKLSAgICB0aGlzLmVsZW1lbnQuaWQg
PSBwcmVmaXggKyAiLW92ZXJ2aWV3LWNvbnRhaW5lciI7Ci0KLSAgICB0aGlzLl9ncmlkID0gbmV3
IFdlYkluc3BlY3Rvci5UaW1lbGluZUdyaWQoKTsKLSAgICB0aGlzLl9ncmlkLmVsZW1lbnQuaWQg
PSBwcmVmaXggKyAiLW92ZXJ2aWV3LWdyaWQiOwotICAgIHRoaXMuX2dyaWQuc2V0U2Nyb2xsQW5k
RGl2aWRlclRvcCgwLCAwKTsKLQotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9n
cmlkLmVsZW1lbnQpOwotCi0gICAgdGhpcy5fd2luZG93ID0gbmV3IFdlYkluc3BlY3Rvci5PdmVy
dmlld0dyaWQuV2luZG93KHRoaXMuZWxlbWVudCwgdGhpcy5fZ3JpZC5kaXZpZGVyc0xhYmVsQmFy
RWxlbWVudCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5PdmVydmlld0dyaWQucHJvdG90eXBlID0gewot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBjbGllbnRXaWR0
aDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGllbnRX
aWR0aDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlRp
bWVsaW5lR3JpZC5DYWxjdWxhdG9yfSBjYWxjdWxhdG9yCi0gICAgICovCi0gICAgdXBkYXRlRGl2
aWRlcnM6IGZ1bmN0aW9uKGNhbGN1bGF0b3IpCi0gICAgewotICAgICAgICB0aGlzLl9ncmlkLnVw
ZGF0ZURpdmlkZXJzKGNhbGN1bGF0b3IpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0geyFBcnJheS48RWxlbWVudD59IGRpdmlkZXJzCi0gICAgICovCi0gICAgYWRkRXZlbnREaXZp
ZGVyczogZnVuY3Rpb24oZGl2aWRlcnMpCi0gICAgewotICAgICAgICB0aGlzLl9ncmlkLmFkZEV2
ZW50RGl2aWRlcnMoZGl2aWRlcnMpOwotICAgIH0sCi0KLSAgICByZW1vdmVFdmVudERpdmlkZXJz
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9ncmlkLnJlbW92ZUV2ZW50RGl2aWRl
cnMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/bnVtYmVyfSBzdGFydAot
ICAgICAqIEBwYXJhbSB7P251bWJlcn0gZW5kCi0gICAgICovCi0gICAgc2V0V2luZG93UG9zaXRp
b246IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpCi0gICAgewotICAgICAgICB0aGlzLl93aW5kb3cuX3Nl
dFdpbmRvd1Bvc2l0aW9uKHN0YXJ0LCBlbmQpOwotICAgIH0sCi0KLSAgICByZXNldDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fd2luZG93LnJlc2V0KCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICB3aW5kb3dMZWZ0OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93LndpbmRvd0xlZnQ7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAg
ICB3aW5kb3dSaWdodDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3dp
bmRvdy53aW5kb3dSaWdodDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGxlZnQKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHQKLSAgICAgKi8KLSAgICBzZXRX
aW5kb3c6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KQotICAgIHsKLSAgICAgICAgdGhpcy5fd2luZG93
Ll9zZXRXaW5kb3cobGVmdCwgcmlnaHQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gZXZlbnRUeXBlCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0
b3IuRXZlbnQpfSBsaXN0ZW5lcgotICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gdGhpc09iamVjdAot
ICAgICAqLwotICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKGV2ZW50VHlwZSwgbGlzdGVu
ZXIsIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICB0aGlzLl93aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0aGlzT2JqZWN0KTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHshbnVtYmVyfSB6b29tRmFjdG9yCi0gICAgICogQHBhcmFtIHshbnVt
YmVyfSByZWZlcmVuY2VQb2ludAotICAgICAqLwotICAgIHpvb206IGZ1bmN0aW9uKHpvb21GYWN0
b3IsIHJlZmVyZW5jZVBvaW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fd2luZG93Ll96b29tKHpv
b21GYWN0b3IsIHJlZmVyZW5jZVBvaW50KTsKLSAgICB9Ci19Ci0KLQotV2ViSW5zcGVjdG9yLk92
ZXJ2aWV3R3JpZC5NaW5TZWxlY3RhYmxlU2l6ZSA9IDEyOwotCi1XZWJJbnNwZWN0b3IuT3ZlcnZp
ZXdHcmlkLldpbmRvd1Njcm9sbFNwZWVkRmFjdG9yID0gLjM7Ci0KLVdlYkluc3BlY3Rvci5PdmVy
dmlld0dyaWQuUmVzaXplck9mZnNldCA9IDMuNTsgLy8gaGFsZiBwaXhlbCBiZWNhdXNlIG9mZnNl
dCB2YWx1ZXMgYXJlIG5vdCByb3VuZGVkIGJ1dCBjZWlsZWQKLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQHBhcmFtIHtFbGVtZW50
fSBwYXJlbnRFbGVtZW50Ci0gKiBAcGFyYW0ge0VsZW1lbnR9IGRpdmlkZXJzTGFiZWxCYXJFbGVt
ZW50Ci0gKi8KLVdlYkluc3BlY3Rvci5PdmVydmlld0dyaWQuV2luZG93ID0gZnVuY3Rpb24ocGFy
ZW50RWxlbWVudCwgZGl2aWRlcnNMYWJlbEJhckVsZW1lbnQpCi17Ci0gICAgdGhpcy5fcGFyZW50
RWxlbWVudCA9IHBhcmVudEVsZW1lbnQ7Ci0gICAgdGhpcy5fZGl2aWRlcnNMYWJlbEJhckVsZW1l
bnQgPSBkaXZpZGVyc0xhYmVsQmFyRWxlbWVudDsKLQotICAgIFdlYkluc3BlY3Rvci5pbnN0YWxs
RHJhZ0hhbmRsZSh0aGlzLl9wYXJlbnRFbGVtZW50LCB0aGlzLl9zdGFydFdpbmRvd1NlbGVjdG9y
RHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fd2luZG93U2VsZWN0b3JEcmFnZ2luZy5iaW5kKHRo
aXMpLCB0aGlzLl9lbmRXaW5kb3dTZWxlY3RvckRyYWdnaW5nLmJpbmQodGhpcyksICJldy1yZXNp
emUiKTsKLSAgICBXZWJJbnNwZWN0b3IuaW5zdGFsbERyYWdIYW5kbGUodGhpcy5fZGl2aWRlcnNM
YWJlbEJhckVsZW1lbnQsIHRoaXMuX3N0YXJ0V2luZG93RHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhp
cy5fd2luZG93RHJhZ2dpbmcuYmluZCh0aGlzKSwgbnVsbCwgIm1vdmUiKTsKLQotICAgIHRoaXMu
d2luZG93TGVmdCA9IDAuMDsKLSAgICB0aGlzLndpbmRvd1JpZ2h0ID0gMS4wOwotCi0gICAgdGhp
cy5fcGFyZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwgdGhpcy5fb25N
b3VzZVdoZWVsLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuX3BhcmVudEVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLl9yZXNpemVXaW5kb3dNYXhpbXVtLmJpbmQo
dGhpcyksIHRydWUpOwotCi0gICAgdGhpcy5fb3ZlcnZpZXdXaW5kb3dFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fb3ZlcnZpZXdXaW5kb3dFbGVtZW50
LmNsYXNzTmFtZSA9ICJvdmVydmlldy1ncmlkLXdpbmRvdyI7Ci0gICAgcGFyZW50RWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLl9vdmVydmlld1dpbmRvd0VsZW1lbnQpOwotCi0gICAgdGhpcy5fb3Zl
cnZpZXdXaW5kb3dCb3JkZXJzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgIHRoaXMuX292ZXJ2aWV3V2luZG93Qm9yZGVyc0VsZW1lbnQuY2xhc3NOYW1lID0gIm92
ZXJ2aWV3LWdyaWQtd2luZG93LXJ1bGVycyI7Ci0gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLl9vdmVydmlld1dpbmRvd0JvcmRlcnNFbGVtZW50KTsKLQotICAgIHZhciBvdmVydmll
d0RpdmlkZXJzQmFja2dyb3VuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAg
IG92ZXJ2aWV3RGl2aWRlcnNCYWNrZ3JvdW5kLmNsYXNzTmFtZSA9ICJvdmVydmlldy1ncmlkLWRp
dmlkZXJzLWJhY2tncm91bmQiOwotICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQob3ZlcnZp
ZXdEaXZpZGVyc0JhY2tncm91bmQpOwotCi0gICAgdGhpcy5fbGVmdFJlc2l6ZUVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9sZWZ0UmVzaXplRWxlbWVu
dC5jbGFzc05hbWUgPSAib3ZlcnZpZXctZ3JpZC13aW5kb3ctcmVzaXplciI7Ci0gICAgdGhpcy5f
bGVmdFJlc2l6ZUVsZW1lbnQuc3R5bGUubGVmdCA9IDA7Ci0gICAgcGFyZW50RWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLl9sZWZ0UmVzaXplRWxlbWVudCk7Ci0gICAgV2ViSW5zcGVjdG9yLmluc3Rh
bGxEcmFnSGFuZGxlKHRoaXMuX2xlZnRSZXNpemVFbGVtZW50LCB0aGlzLl9yZXNpemVyRWxlbWVu
dFN0YXJ0RHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fbGVmdFJlc2l6ZUVsZW1lbnREcmFnZ2lu
Zy5iaW5kKHRoaXMpLCBudWxsLCAiZXctcmVzaXplIik7Ci0KLSAgICB0aGlzLl9yaWdodFJlc2l6
ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9yaWdo
dFJlc2l6ZUVsZW1lbnQuY2xhc3NOYW1lID0gIm92ZXJ2aWV3LWdyaWQtd2luZG93LXJlc2l6ZXIg
b3ZlcnZpZXctZ3JpZC13aW5kb3ctcmVzaXplci1yaWdodCI7Ci0gICAgdGhpcy5fcmlnaHRSZXNp
emVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gMDsKLSAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxk
KHRoaXMuX3JpZ2h0UmVzaXplRWxlbWVudCk7Ci0gICAgV2ViSW5zcGVjdG9yLmluc3RhbGxEcmFn
SGFuZGxlKHRoaXMuX3JpZ2h0UmVzaXplRWxlbWVudCwgdGhpcy5fcmVzaXplckVsZW1lbnRTdGFy
dERyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX3JpZ2h0UmVzaXplRWxlbWVudERyYWdnaW5nLmJp
bmQodGhpcyksIG51bGwsICJldy1yZXNpemUiKTsKLX0KLQotV2ViSW5zcGVjdG9yLk92ZXJ2aWV3
R3JpZC5FdmVudHMgPSB7Ci0gICAgV2luZG93Q2hhbmdlZDogIldpbmRvd0NoYW5nZWQiCi19Ci0K
LVdlYkluc3BlY3Rvci5PdmVydmlld0dyaWQuV2luZG93LnByb3RvdHlwZSA9IHsKLSAgICByZXNl
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy53aW5kb3dMZWZ0ID0gMC4wOwotICAg
ICAgICB0aGlzLndpbmRvd1JpZ2h0ID0gMS4wOwotCi0gICAgICAgIHRoaXMuX292ZXJ2aWV3V2lu
ZG93RWxlbWVudC5zdHlsZS5sZWZ0ID0gIjAlIjsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdXaW5k
b3dFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOwotICAgICAgICB0aGlzLl9vdmVydmlld1dp
bmRvd0JvcmRlcnNFbGVtZW50LnN0eWxlLmxlZnQgPSAiMCUiOwotICAgICAgICB0aGlzLl9vdmVy
dmlld1dpbmRvd0JvcmRlcnNFbGVtZW50LnN0eWxlLnJpZ2h0ID0gIjAlIjsKLSAgICAgICAgdGhp
cy5fbGVmdFJlc2l6ZUVsZW1lbnQuc3R5bGUubGVmdCA9ICIwJSI7Ci0gICAgICAgIHRoaXMuX3Jp
Z2h0UmVzaXplRWxlbWVudC5zdHlsZS5sZWZ0ID0gIjEwMCUiOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9yZXNpemVyRWxlbWVu
dFN0YXJ0RHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVz
aXplclBhcmVudE9mZnNldExlZnQgPSBldmVudC5wYWdlWCAtIGV2ZW50Lm9mZnNldFggLSBldmVu
dC50YXJnZXQub2Zmc2V0TGVmdDsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZl
bnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2xlZnRSZXNpemVFbGVtZW50RHJhZ2dpbmc6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzaXplV2luZG93TGVmdChldmVudC5w
YWdlWCAtIHRoaXMuX3Jlc2l6ZXJQYXJlbnRPZmZzZXRMZWZ0KTsKLSAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0g
ZXZlbnQKLSAgICAgKi8KLSAgICBfcmlnaHRSZXNpemVFbGVtZW50RHJhZ2dpbmc6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzaXplV2luZG93UmlnaHQoZXZlbnQucGFn
ZVggLSB0aGlzLl9yZXNpemVyUGFyZW50T2Zmc2V0TGVmdCk7Ci0gICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2
ZW50Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBfc3RhcnRXaW5kb3dT
ZWxlY3RvckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX29m
ZnNldExlZnQgPSBldmVudC5wYWdlWCAtIGV2ZW50Lm9mZnNldFg7Ci0gICAgICAgIHZhciBwb3Np
dGlvbiA9IGV2ZW50LnBhZ2VYIC0gdGhpcy5fb2Zmc2V0TGVmdDsKLSAgICAgICAgdGhpcy5fb3Zl
cnZpZXdXaW5kb3dTZWxlY3RvciA9IG5ldyBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlkLldpbmRv
d1NlbGVjdG9yKHRoaXMuX3BhcmVudEVsZW1lbnQsIHBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0g
ICAgICovCi0gICAgX3dpbmRvd1NlbGVjdG9yRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdXaW5kb3dTZWxlY3Rvci5fdXBkYXRlUG9zaXRpb24o
ZXZlbnQucGFnZVggLSB0aGlzLl9vZmZzZXRMZWZ0KTsKLSAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQK
LSAgICAgKi8KLSAgICBfZW5kV2luZG93U2VsZWN0b3JEcmFnZ2luZzogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICB2YXIgd2luZG93ID0gdGhpcy5fb3ZlcnZpZXdXaW5kb3dTZWxlY3Rv
ci5fY2xvc2UoZXZlbnQucGFnZVggLSB0aGlzLl9vZmZzZXRMZWZ0KTsKLSAgICAgICAgZGVsZXRl
IHRoaXMuX292ZXJ2aWV3V2luZG93U2VsZWN0b3I7Ci0gICAgICAgIGlmICh3aW5kb3cuZW5kID09
PSB3aW5kb3cuc3RhcnQpIHsgLy8gQ2xpY2ssIG5vdCBkcmFnLgotICAgICAgICAgICAgdmFyIG1p
ZGRsZSA9IHdpbmRvdy5lbmQ7Ci0gICAgICAgICAgICB3aW5kb3cuc3RhcnQgPSBNYXRoLm1heCgw
LCBtaWRkbGUgLSBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlkLk1pblNlbGVjdGFibGVTaXplIC8g
Mik7Ci0gICAgICAgICAgICB3aW5kb3cuZW5kID0gTWF0aC5taW4odGhpcy5fcGFyZW50RWxlbWVu
dC5jbGllbnRXaWR0aCwgbWlkZGxlICsgV2ViSW5zcGVjdG9yLk92ZXJ2aWV3R3JpZC5NaW5TZWxl
Y3RhYmxlU2l6ZSAvIDIpOwotICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5lbmQgLSB3aW5kb3cu
c3RhcnQgPCBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlkLk1pblNlbGVjdGFibGVTaXplKSB7Ci0g
ICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIHdpbmRvdy5l
bmQgPiBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlkLk1pblNlbGVjdGFibGVTaXplKQotICAgICAg
ICAgICAgICAgIHdpbmRvdy5lbmQgPSB3aW5kb3cuc3RhcnQgKyBXZWJJbnNwZWN0b3IuT3ZlcnZp
ZXdHcmlkLk1pblNlbGVjdGFibGVTaXplOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHdpbmRvdy5zdGFydCA9IHdpbmRvdy5lbmQgLSBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlk
Lk1pblNlbGVjdGFibGVTaXplOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3NldFdpbmRvd1Bv
c2l0aW9uKHdpbmRvdy5zdGFydCwgd2luZG93LmVuZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAg
Ki8KLSAgICBfc3RhcnRXaW5kb3dEcmFnZ2luZzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICB0aGlzLl9kcmFnU3RhcnRQb2ludCA9IGV2ZW50LnBhZ2VYOwotICAgICAgICB0aGlzLl9k
cmFnU3RhcnRMZWZ0ID0gdGhpcy53aW5kb3dMZWZ0OwotICAgICAgICB0aGlzLl9kcmFnU3RhcnRS
aWdodCA9IHRoaXMud2luZG93UmlnaHQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF93aW5k
b3dEcmFnZ2luZzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwotICAgICAgICB2YXIgZGVsdGEgPSAoZXZlbnQucGFnZVggLSB0aGlzLl9kcmFn
U3RhcnRQb2ludCkgLyB0aGlzLl9wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoOwotICAgICAgICBp
ZiAodGhpcy5fZHJhZ1N0YXJ0TGVmdCArIGRlbHRhIDwgMCkKLSAgICAgICAgICAgIGRlbHRhID0g
LXRoaXMuX2RyYWdTdGFydExlZnQ7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2RyYWdTdGFydFJpZ2h0
ICsgZGVsdGEgPiAxKQotICAgICAgICAgICAgZGVsdGEgPSAxIC0gdGhpcy5fZHJhZ1N0YXJ0Umln
aHQ7Ci0KLSAgICAgICAgdGhpcy5fc2V0V2luZG93KHRoaXMuX2RyYWdTdGFydExlZnQgKyBkZWx0
YSwgdGhpcy5fZHJhZ1N0YXJ0UmlnaHQgKyBkZWx0YSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydAotICAgICAqLwotICAgIF9yZXNpemVXaW5kb3dMZWZ0
OiBmdW5jdGlvbihzdGFydCkKLSAgICB7Ci0gICAgICAgIC8vIEdsdWUgdG8gZWRnZS4KLSAgICAg
ICAgaWYgKHN0YXJ0IDwgMTApCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIGVsc2Ug
aWYgKHN0YXJ0ID4gdGhpcy5fcmlnaHRSZXNpemVFbGVtZW50Lm9mZnNldExlZnQgLSAgNCkKLSAg
ICAgICAgICAgIHN0YXJ0ID0gdGhpcy5fcmlnaHRSZXNpemVFbGVtZW50Lm9mZnNldExlZnQgLSA0
OwotICAgICAgICB0aGlzLl9zZXRXaW5kb3dQb3NpdGlvbihzdGFydCwgbnVsbCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQKLSAgICAgKi8KLSAgICBfcmVz
aXplV2luZG93UmlnaHQ6IGZ1bmN0aW9uKGVuZCkKLSAgICB7Ci0gICAgICAgIC8vIEdsdWUgdG8g
ZWRnZS4KLSAgICAgICAgaWYgKGVuZCA+IHRoaXMuX3BhcmVudEVsZW1lbnQuY2xpZW50V2lkdGgg
LSAxMCkKLSAgICAgICAgICAgIGVuZCA9IHRoaXMuX3BhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7
Ci0gICAgICAgIGVsc2UgaWYgKGVuZCA8IHRoaXMuX2xlZnRSZXNpemVFbGVtZW50Lm9mZnNldExl
ZnQgKyBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlkLk1pblNlbGVjdGFibGVTaXplKQotICAgICAg
ICAgICAgZW5kID0gdGhpcy5fbGVmdFJlc2l6ZUVsZW1lbnQub2Zmc2V0TGVmdCArIFdlYkluc3Bl
Y3Rvci5PdmVydmlld0dyaWQuTWluU2VsZWN0YWJsZVNpemU7Ci0gICAgICAgIHRoaXMuX3NldFdp
bmRvd1Bvc2l0aW9uKG51bGwsIGVuZCk7Ci0gICAgfSwKLQotICAgIF9yZXNpemVXaW5kb3dNYXhp
bXVtOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9zZXRXaW5kb3dQb3NpdGlvbigw
LCB0aGlzLl9wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxlZnQKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcmlnaHQK
LSAgICAgKi8KLSAgICBfc2V0V2luZG93OiBmdW5jdGlvbihsZWZ0LCByaWdodCkKLSAgICB7Ci0g
ICAgICAgIHZhciBjbGllbnRXaWR0aCA9IHRoaXMuX3BhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7
Ci0gICAgICAgIHRoaXMuX3NldFdpbmRvd1Bvc2l0aW9uKGxlZnQgKiBjbGllbnRXaWR0aCwgcmln
aHQgKiBjbGllbnRXaWR0aCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7P251
bWJlcn0gc3RhcnQKLSAgICAgKiBAcGFyYW0gez9udW1iZXJ9IGVuZAotICAgICAqLwotICAgIF9z
ZXRXaW5kb3dQb3NpdGlvbjogZnVuY3Rpb24oc3RhcnQsIGVuZCkKLSAgICB7Ci0gICAgICAgIHZh
ciBjbGllbnRXaWR0aCA9IHRoaXMuX3BhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7Ci0gICAgICAg
IGNvbnN0IHJ1bGVyQWRqdXN0bWVudCA9IDEgLyBjbGllbnRXaWR0aDsKLSAgICAgICAgaWYgKHR5
cGVvZiBzdGFydCA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHRoaXMud2luZG93TGVmdCA9
IHN0YXJ0IC8gY2xpZW50V2lkdGg7Ci0gICAgICAgICAgICB0aGlzLl9sZWZ0UmVzaXplRWxlbWVu
dC5zdHlsZS5sZWZ0ID0gdGhpcy53aW5kb3dMZWZ0ICogMTAwICsgIiUiOwotICAgICAgICAgICAg
dGhpcy5fb3ZlcnZpZXdXaW5kb3dFbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlzLndpbmRvd0xlZnQg
KiAxMDAgKyAiJSI7Ci0gICAgICAgICAgICB0aGlzLl9vdmVydmlld1dpbmRvd0JvcmRlcnNFbGVt
ZW50LnN0eWxlLmxlZnQgPSAodGhpcy53aW5kb3dMZWZ0IC0gcnVsZXJBZGp1c3RtZW50KSAqIDEw
MCArICIlIjsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZW9mIGVuZCA9PT0gIm51bWJlciIp
IHsKLSAgICAgICAgICAgIHRoaXMud2luZG93UmlnaHQgPSBlbmQgLyBjbGllbnRXaWR0aDsKLSAg
ICAgICAgICAgIHRoaXMuX3JpZ2h0UmVzaXplRWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy53aW5k
b3dSaWdodCAqIDEwMCArICIlIjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9vdmVydmlld1dp
bmRvd0VsZW1lbnQuc3R5bGUud2lkdGggPSAodGhpcy53aW5kb3dSaWdodCAtIHRoaXMud2luZG93
TGVmdCkgKiAxMDAgKyAiJSI7Ci0gICAgICAgIHRoaXMuX292ZXJ2aWV3V2luZG93Qm9yZGVyc0Vs
ZW1lbnQuc3R5bGUucmlnaHQgPSAoMSAtIHRoaXMud2luZG93UmlnaHQgKyAyICogcnVsZXJBZGp1
c3RtZW50KSAqIDEwMCArICIlIjsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLk92ZXJ2aWV3R3JpZC5FdmVudHMuV2luZG93Q2hhbmdlZCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAg
X29uTW91c2VXaGVlbDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBjb25zdCB6b29t
RmFjdG9yID0gMS4xOwotICAgICAgICBjb25zdCBtb3VzZVdoZWVsWm9vbVNwZWVkID0gMSAvIDEy
MDsKLQotICAgICAgICBpZiAodHlwZW9mIGV2ZW50LndoZWVsRGVsdGFZID09PSAibnVtYmVyIiAm
JiBldmVudC53aGVlbERlbHRhWSkgewotICAgICAgICAgICAgdmFyIHJlZmVyZW5jZVBvaW50ID0g
ZXZlbnQub2Zmc2V0WDsKLSAgICAgICAgICAgIHRoaXMuX3pvb20oTWF0aC5wb3coem9vbUZhY3Rv
ciwgLWV2ZW50LndoZWVsRGVsdGFZICogbW91c2VXaGVlbFpvb21TcGVlZCksIHJlZmVyZW5jZVBv
aW50KTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZW9mIGV2ZW50LndoZWVsRGVsdGFYID09
PSAibnVtYmVyIiAmJiBldmVudC53aGVlbERlbHRhWCkgewotICAgICAgICAgICAgdmFyIG9mZnNl
dCA9IE1hdGgucm91bmQoZXZlbnQud2hlZWxEZWx0YVggKiBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdH
cmlkLldpbmRvd1Njcm9sbFNwZWVkRmFjdG9yKTsKLSAgICAgICAgICAgIHZhciB3aW5kb3dMZWZ0
ID0gdGhpcy5fbGVmdFJlc2l6ZUVsZW1lbnQub2Zmc2V0TGVmdCArIFdlYkluc3BlY3Rvci5PdmVy
dmlld0dyaWQuUmVzaXplck9mZnNldDsKLSAgICAgICAgICAgIHZhciB3aW5kb3dSaWdodCA9IHRo
aXMuX3JpZ2h0UmVzaXplRWxlbWVudC5vZmZzZXRMZWZ0ICsgV2ViSW5zcGVjdG9yLk92ZXJ2aWV3
R3JpZC5SZXNpemVyT2Zmc2V0OwotCi0gICAgICAgICAgICBpZiAod2luZG93TGVmdCAtIG9mZnNl
dCA8IDApCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gd2luZG93TGVmdDsKLQotICAgICAgICAg
ICAgaWYgKHdpbmRvd1JpZ2h0IC0gb2Zmc2V0ID4gdGhpcy5fcGFyZW50RWxlbWVudC5jbGllbnRX
aWR0aCkKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSB3aW5kb3dSaWdodCAtIHRoaXMuX3BhcmVu
dEVsZW1lbnQuY2xpZW50V2lkdGg7Ci0KLSAgICAgICAgICAgIHRoaXMuX3NldFdpbmRvd1Bvc2l0
aW9uKHdpbmRvd0xlZnQgLSBvZmZzZXQsIHdpbmRvd1JpZ2h0IC0gb2Zmc2V0KTsKLQotICAgICAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IHJlZmVyZW5jZVBvaW50Ci0gICAgICovCi0gICAgX3pvb206IGZ1bmN0aW9uKGZhY3RvciwgcmVm
ZXJlbmNlUG9pbnQpCi0gICAgewotICAgICAgICB2YXIgbGVmdCA9IHRoaXMuX2xlZnRSZXNpemVF
bGVtZW50Lm9mZnNldExlZnQgKyBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlkLlJlc2l6ZXJPZmZz
ZXQ7Ci0gICAgICAgIHZhciByaWdodCA9IHRoaXMuX3JpZ2h0UmVzaXplRWxlbWVudC5vZmZzZXRM
ZWZ0ICsgV2ViSW5zcGVjdG9yLk92ZXJ2aWV3R3JpZC5SZXNpemVyT2Zmc2V0OwotCi0gICAgICAg
IHZhciBkZWx0YSA9IGZhY3RvciAqIChyaWdodCAtIGxlZnQpOwotICAgICAgICBpZiAoZmFjdG9y
IDwgMSAmJiBkZWx0YSA8IFdlYkluc3BlY3Rvci5PdmVydmlld0dyaWQuTWluU2VsZWN0YWJsZVNp
emUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBtYXggPSB0aGlzLl9wYXJlbnRF
bGVtZW50LmNsaWVudFdpZHRoOwotICAgICAgICBpZiAodHlwZW9mIHJlZmVyZW5jZVBvaW50ICE9
PSAibnVtYmVyIikKLSAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50ID0gKHJpZ2h0ICsgbGVmdCkg
LyAyOwotICAgICAgICBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obWF4IC0gZGVsdGEsIHJl
ZmVyZW5jZVBvaW50ICsgKGxlZnQgLSByZWZlcmVuY2VQb2ludCkgKiBmYWN0b3IpKTsKLSAgICAg
ICAgcmlnaHQgPSBNYXRoLm1pbihtYXgsIGxlZnQgKyBkZWx0YSk7Ci0gICAgICAgIHRoaXMuX3Nl
dFdpbmRvd1Bvc2l0aW9uKGxlZnQsIHJpZ2h0KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBX
ZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICovCi1XZWJJbnNwZWN0b3IuT3ZlcnZpZXdHcmlkLldpbmRvd1NlbGVjdG9yID0gZnVuY3Rpb24o
cGFyZW50LCBwb3NpdGlvbikKLXsKLSAgICB0aGlzLl9zdGFydFBvc2l0aW9uID0gcG9zaXRpb247
Ci0gICAgdGhpcy5fd2lkdGggPSBwYXJlbnQub2Zmc2V0V2lkdGg7Ci0gICAgdGhpcy5fd2luZG93
U2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl93aW5k
b3dTZWxlY3Rvci5jbGFzc05hbWUgPSAib3ZlcnZpZXctZ3JpZC13aW5kb3ctc2VsZWN0b3IiOwot
ICAgIHRoaXMuX3dpbmRvd1NlbGVjdG9yLnN0eWxlLmxlZnQgPSB0aGlzLl9zdGFydFBvc2l0aW9u
ICsgInB4IjsKLSAgICB0aGlzLl93aW5kb3dTZWxlY3Rvci5zdHlsZS5yaWdodCA9IHRoaXMuX3dp
ZHRoIC0gdGhpcy5fc3RhcnRQb3NpdGlvbiArICJweCI7Ci0gICAgcGFyZW50LmFwcGVuZENoaWxk
KHRoaXMuX3dpbmRvd1NlbGVjdG9yKTsKLX0KLQotV2ViSW5zcGVjdG9yLk92ZXJ2aWV3R3JpZC5X
aW5kb3dTZWxlY3Rvci5wcm90b3R5cGUgPSB7Ci0gICAgX2NyZWF0ZVNlbGVjdG9yRWxlbWVudDog
ZnVuY3Rpb24ocGFyZW50LCBsZWZ0LCB3aWR0aCwgaGVpZ2h0KQotICAgIHsKLSAgICAgICAgdmFy
IHNlbGVjdG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAg
ICBzZWxlY3RvckVsZW1lbnQuY2xhc3NOYW1lID0gIm92ZXJ2aWV3LWdyaWQtd2luZG93LXNlbGVj
dG9yIjsKLSAgICAgICAgc2VsZWN0b3JFbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsK
LSAgICAgICAgc2VsZWN0b3JFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwotICAg
ICAgICBzZWxlY3RvckVsZW1lbnQuc3R5bGUudG9wID0gIjBweCI7Ci0gICAgICAgIHNlbGVjdG9y
RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwotICAgICAgICBwYXJlbnQuYXBw
ZW5kQ2hpbGQoc2VsZWN0b3JFbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yRWxlbWVu
dDsKLSAgICB9LAotCi0gICAgX2Nsb3NlOiBmdW5jdGlvbihwb3NpdGlvbikKLSAgICB7Ci0gICAg
ICAgIHBvc2l0aW9uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocG9zaXRpb24sIHRoaXMuX3dpZHRo
KSk7Ci0gICAgICAgIHRoaXMuX3dpbmRvd1NlbGVjdG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
dGhpcy5fd2luZG93U2VsZWN0b3IpOwotICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRQb3NpdGlv
biA8IHBvc2l0aW9uID8ge3N0YXJ0OiB0aGlzLl9zdGFydFBvc2l0aW9uLCBlbmQ6IHBvc2l0aW9u
fSA6IHtzdGFydDogcG9zaXRpb24sIGVuZDogdGhpcy5fc3RhcnRQb3NpdGlvbn07Ci0gICAgfSwK
LQotICAgIF91cGRhdGVQb3NpdGlvbjogZnVuY3Rpb24ocG9zaXRpb24pCi0gICAgewotICAgICAg
ICBwb3NpdGlvbiA9IE1hdGgubWF4KDAsIE1hdGgubWluKHBvc2l0aW9uLCB0aGlzLl93aWR0aCkp
OwotICAgICAgICBpZiAocG9zaXRpb24gPCB0aGlzLl9zdGFydFBvc2l0aW9uKSB7Ci0gICAgICAg
ICAgICB0aGlzLl93aW5kb3dTZWxlY3Rvci5zdHlsZS5sZWZ0ID0gcG9zaXRpb24gKyAicHgiOwot
ICAgICAgICAgICAgdGhpcy5fd2luZG93U2VsZWN0b3Iuc3R5bGUucmlnaHQgPSB0aGlzLl93aWR0
aCAtIHRoaXMuX3N0YXJ0UG9zaXRpb24gKyAicHgiOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgdGhpcy5fd2luZG93U2VsZWN0b3Iuc3R5bGUubGVmdCA9IHRoaXMuX3N0YXJ0UG9zaXRp
b24gKyAicHgiOwotICAgICAgICAgICAgdGhpcy5fd2luZG93U2VsZWN0b3Iuc3R5bGUucmlnaHQg
PSB0aGlzLl93aWR0aCAtIHBvc2l0aW9uICsgInB4IjsKLSAgICAgICAgfQotICAgIH0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwNTE4OWEzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8qKgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQotICogQGNvbnN0
cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5QYW5lbCA9IGZ1bmN0aW9uKG5hbWUpCi17Ci0gICAg
V2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IucGFuZWxzW25h
bWVdID0gdGhpczsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJwYW5lbCIpOwot
ICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKG5hbWUpOwotICAgIHRoaXMuX3BhbmVsTmFt
ZSA9IG5hbWU7Ci0KLSAgICB0aGlzLl9zaG9ydGN1dHMgPSAvKiogIU9iamVjdC48bnVtYmVyLCBm
dW5jdGlvbihFdmVudD0pOmJvb2xlYW4+ICovICh7fSk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3NbdGhpcy5fc2lkZWJhcldpZHRoU2V0dGluZ05hbWUoKV0gPSBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MuY3JlYXRlU2V0dGluZyh0aGlzLl9zaWRlYmFyV2lkdGhTZXR0aW5nTmFtZSgpLCB1bmRl
ZmluZWQpOwotfQotCi0vLyBTaG91bGQgYnkgaW4gc3luYyB3aXRoIHN0eWxlIGRlY2xhcmF0aW9u
cy4KLVdlYkluc3BlY3Rvci5QYW5lbC5jb3VudGVyUmlnaHRNYXJnaW4gPSAyNTsKLQotV2ViSW5z
cGVjdG9yLlBhbmVsLnByb3RvdHlwZSA9IHsKLSAgICBnZXQgbmFtZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fcGFuZWxOYW1lOwotICAgIH0sCi0KLSAgICBzaG93OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc2hvdy5jYWxsKHRo
aXMsIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LnBhbmVsc0VsZW1lbnQoKSk7Ci0gICAgfSwK
LQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcGFuZWxTdGF0
dXNCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFuZWwtc3RhdHVzLWJhciIpCi0gICAg
ICAgIHZhciBkcmF3ZXJWaWV3QW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdl
ci12aWV3LWFuY2hvciIpOwotICAgICAgICB2YXIgc3RhdHVzQmFySXRlbXMgPSB0aGlzLnN0YXR1
c0Jhckl0ZW1zKCk7Ci0gICAgICAgIGlmIChzdGF0dXNCYXJJdGVtcykgewotICAgICAgICAgICAg
dGhpcy5fc3RhdHVzQmFySXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0dXNCYXJJdGVtcy5sZW5n
dGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9zdGF0dXNCYXJJdGVtQ29udGFpbmVyLmFw
cGVuZENoaWxkKHN0YXR1c0Jhckl0ZW1zW2ldKTsKLSAgICAgICAgICAgIHBhbmVsU3RhdHVzQmFy
Lmluc2VydEJlZm9yZSh0aGlzLl9zdGF0dXNCYXJJdGVtQ29udGFpbmVyLCBkcmF3ZXJWaWV3QW5j
aG9yKTsKLSAgICAgICAgfQotICAgICAgICB2YXIgc3RhdHVzQmFyVGV4dCA9IHRoaXMuc3RhdHVz
QmFyVGV4dCgpOwotICAgICAgICBpZiAoc3RhdHVzQmFyVGV4dCkgewotICAgICAgICAgICAgdGhp
cy5fc3RhdHVzQmFyVGV4dEVsZW1lbnQgPSBzdGF0dXNCYXJUZXh0OwotICAgICAgICAgICAgcGFu
ZWxTdGF0dXNCYXIuYXBwZW5kQ2hpbGQoc3RhdHVzQmFyVGV4dCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLmZvY3VzKCk7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fc3RhdHVzQmFySXRlbUNvbnRhaW5lciAmJiB0aGlzLl9z
dGF0dXNCYXJJdGVtQ29udGFpbmVyLnBhcmVudE5vZGUpCi0gICAgICAgICAgICB0aGlzLl9zdGF0
dXNCYXJJdGVtQ29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fc3RhdHVzQmFy
SXRlbUNvbnRhaW5lcik7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGF0dXNCYXJJdGVtQ29udGFp
bmVyOwotCi0gICAgICAgIGlmICh0aGlzLl9zdGF0dXNCYXJUZXh0RWxlbWVudCAmJiB0aGlzLl9z
dGF0dXNCYXJUZXh0RWxlbWVudC5wYXJlbnROb2RlKQotICAgICAgICAgICAgdGhpcy5fc3RhdHVz
QmFyVGV4dEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9zdGF0dXNCYXJUZXh0
RWxlbWVudCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGF0dXNCYXJUZXh0RWxlbWVudDsKLSAg
ICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2VhcmNo
Q2FuY2VsZWQoKTsKLSAgICB9LAotCi0gICAgZGVmYXVsdEZvY3VzZWRFbGVtZW50OiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyVHJlZUVsZW1lbnQgfHwgdGhp
cy5lbGVtZW50OwotICAgIH0sCi0KLSAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0
Y2hlc0NvdW50KDAsIHRoaXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gcXVlcnkKLSAgICAgKi8KLSAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkK
LSAgICB7Ci0gICAgICAgIC8vIENhbGwgc2VhcmNoQ2FuY2VsZWQgc2luY2UgaXQgd2lsbCByZXNl
dCBldmVyeXRoaW5nIHdlIG5lZWQgYmVmb3JlIGRvaW5nIGEgbmV3IHNlYXJjaC4KLSAgICAgICAg
dGhpcy5zZWFyY2hDYW5jZWxlZCgpOwotICAgIH0sCi0KLSAgICBqdW1wVG9OZXh0U2VhcmNoUmVz
dWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICBqdW1wVG9QcmV2aW91c1NlYXJj
aFJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJl
dHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBjYW5TZWFyY2hBbmRSZXBsYWNlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAgICovCi0gICAgcmVwbGFjZVNlbGVjdGlvbldp
dGg6IGZ1bmN0aW9uKHRleHQpCi0gICAgewotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dAotICAgICAqLwot
ICAgIHJlcGxhY2VBbGxXaXRoOiBmdW5jdGlvbihxdWVyeSwgdGV4dCkKLSAgICB7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgY2FuRmls
dGVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqLwotICAgIHBlcmZv
cm1GaWx0ZXI6IGZ1bmN0aW9uKHF1ZXJ5KQotICAgIHsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtFbGVtZW50PX0gcGFyZW50RWxlbWVudAotICAgICAqIEBwYXJhbSB7c3RyaW5n
PX0gcG9zaXRpb24KLSAgICAgKiBAcGFyYW0ge251bWJlcj19IGRlZmF1bHRXaWR0aAotICAgICAq
IEBwYXJhbSB7bnVtYmVyPX0gZGVmYXVsdEhlaWdodAotICAgICAqLwotICAgIGNyZWF0ZVNpZGVi
YXJWaWV3OiBmdW5jdGlvbihwYXJlbnRFbGVtZW50LCBwb3NpdGlvbiwgZGVmYXVsdFdpZHRoLCBk
ZWZhdWx0SGVpZ2h0KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuc3BsaXRWaWV3KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghcGFyZW50RWxlbWVudCkKLSAgICAgICAgICAg
IHBhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7Ci0KLSAgICAgICAgdGhpcy5zcGxpdFZpZXcg
PSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJWaWV3KHBvc2l0aW9uLCB0aGlzLl9zaWRlYmFyV2lk
dGhTZXR0aW5nTmFtZSgpLCBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQpOwotICAgICAgICB0
aGlzLnNwbGl0Vmlldy5zaG93KHBhcmVudEVsZW1lbnQpOwotICAgICAgICB0aGlzLnNwbGl0Vmll
dy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TaWRlYmFyVmlldy5FdmVudFR5cGVzLlJl
c2l6ZWQsIHRoaXMuc2lkZWJhclJlc2l6ZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhpcy5z
aWRlYmFyRWxlbWVudCA9IHRoaXMuc3BsaXRWaWV3LnNpZGViYXJFbGVtZW50OwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBwYXJlbnRFbGVtZW50Ci0gICAgICog
QHBhcmFtIHtzdHJpbmc9fSBwb3NpdGlvbgotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gZGVmYXVs
dFdpZHRoCi0gICAgICovCi0gICAgY3JlYXRlU2lkZWJhclZpZXdXaXRoVHJlZTogZnVuY3Rpb24o
cGFyZW50RWxlbWVudCwgcG9zaXRpb24sIGRlZmF1bHRXaWR0aCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLnNwbGl0VmlldykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmNy
ZWF0ZVNpZGViYXJWaWV3KHBhcmVudEVsZW1lbnQsIHBvc2l0aW9uKTsKLQotICAgICAgICB0aGlz
LnNpZGViYXJUcmVlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7Ci0gICAg
ICAgIHRoaXMuc2lkZWJhclRyZWVFbGVtZW50LmNsYXNzTmFtZSA9ICJzaWRlYmFyLXRyZWUiOwot
ICAgICAgICB0aGlzLnNwbGl0Vmlldy5zaWRlYmFyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNp
ZGViYXJUcmVlRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuc3BsaXRWaWV3LnNpZGViYXJFbGVtZW50
LmFkZFN0eWxlQ2xhc3MoInNpZGViYXIiKTsKLQotICAgICAgICB0aGlzLnNpZGViYXJUcmVlID0g
bmV3IFRyZWVPdXRsaW5lKHRoaXMuc2lkZWJhclRyZWVFbGVtZW50KTsKLSAgICAgICAgdGhpcy5z
aWRlYmFyVHJlZS5wYW5lbCA9IHRoaXM7Ci0gICAgfSwKLQotICAgIF9zaWRlYmFyV2lkdGhTZXR0
aW5nTmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3BhbmVsTmFt
ZSArICJTaWRlYmFyV2lkdGgiOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBzaWRlYmFyUmVzaXplZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgIH0sCi0KLSAgICBzdGF0dXNCYXJSZXNpemVkOiBmdW5j
dGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9
IGFuY2hvcgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgY2FuU2hvd0Fu
Y2hvckxvY2F0aW9uOiBmdW5jdGlvbihhbmNob3IpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gYW5jaG9yCi0g
ICAgICovCi0gICAgc2hvd0FuY2hvckxvY2F0aW9uOiBmdW5jdGlvbihhbmNob3IpCi0gICAgewot
ICAgIH0sCi0KLSAgICBlbGVtZW50c1RvUmVzdG9yZVNjcm9sbFBvc2l0aW9uc0ZvcjogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgaGFuZGxlU2hvcnRj
dXQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHNob3J0Y3V0S2V5ID0gV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleUZyb21FdmVudChldmVudCk7Ci0gICAg
ICAgIHZhciBoYW5kbGVyID0gdGhpcy5fc2hvcnRjdXRzW3Nob3J0Y3V0S2V5XTsKLSAgICAgICAg
aWYgKGhhbmRsZXIgJiYgaGFuZGxlcihldmVudCkpCi0gICAgICAgICAgICBldmVudC5oYW5kbGVk
ID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshQXJyYXkuPCFXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5EZXNjcmlwdG9yPn0ga2V5cwotICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb24oRXZlbnQ9KTpib29sZWFufSBoYW5kbGVyCi0gICAgICovCi0gICAgcmVnaXN0
ZXJTaG9ydGN1dHM6IGZ1bmN0aW9uKGtleXMsIGhhbmRsZXIpCi0gICAgewotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9zaG9y
dGN1dHNba2V5c1tpXS5rZXldID0gaGFuZGxlcjsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBX
ZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAqIEBwYXJh
bSB7c3RyaW5nPX0gY2xhc3NOYW1lCi0gKiBAcGFyYW0ge3N0cmluZz19IHNjcmlwdE5hbWUKLSAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBhbmVsPX0gcGFuZWwKLSAqLwotV2ViSW5zcGVjdG9yLlBh
bmVsRGVzY3JpcHRvciA9IGZ1bmN0aW9uKG5hbWUsIHRpdGxlLCBjbGFzc05hbWUsIHNjcmlwdE5h
bWUsIHBhbmVsKQotewotICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgIHRoaXMuX3RpdGxlID0g
dGl0bGU7Ci0gICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgIHRoaXMuX3Njcmlw
dE5hbWUgPSBzY3JpcHROYW1lOwotICAgIHRoaXMuX3BhbmVsID0gcGFuZWw7Ci19Ci0KLVdlYklu
c3BlY3Rvci5QYW5lbERlc2NyaXB0b3IucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBuYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fbmFtZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7c3RyaW5nfQotICAgICAqLwotICAgIHRpdGxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fdGl0bGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e3N0cmluZ30KLSAgICAgKi8KLSAgICBpY29uVVJMOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5faWNvblVSTDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IGljb25VUkwKLSAgICAgKi8KLSAgICBzZXRJY29uVVJMOiBmdW5jdGlvbihpY29u
VVJMKQotICAgIHsKLSAgICAgICAgdGhpcy5faWNvblVSTCA9IGljb25VUkw7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5QYW5lbH0KLSAgICAgKi8KLSAg
ICBwYW5lbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3BhbmVsKQotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3BhbmVsOwotICAgICAgICBpZiAodGhpcy5fc2NyaXB0TmFt
ZSkKLSAgICAgICAgICAgIGxvYWRTY3JpcHQodGhpcy5fc2NyaXB0TmFtZSk7Ci0gICAgICAgIHRo
aXMuX3BhbmVsID0gbmV3IFdlYkluc3BlY3Rvclt0aGlzLl9jbGFzc05hbWVdOwotICAgICAgICBy
ZXR1cm4gdGhpcy5fcGFuZWw7Ci0gICAgfSwKLQotICAgIHJlZ2lzdGVyU2hvcnRjdXRzOiBmdW5j
dGlvbigpIHt9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1BhbmVsRW5hYmxlclZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1BhbmVsRW5hYmxlclZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZl
YWI3NGEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Q
YW5lbEVuYWJsZXJWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3Iu
UGFuZWxFbmFibGVyVmlldyA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIGhlYWRpbmdUZXh0LCBkaXNj
bGFpbWVyVGV4dCwgYnV0dG9uVGl0bGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0
aGlzKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1MoInBhbmVsRW5hYmxlclZpZXcuY3Nz
Iik7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygicGFuZWwtZW5hYmxlci12aWV3
Iik7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoaWRlbnRpZmllcik7Ci0KLSAgICB0
aGlzLmNvbnRlbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
dGhpcy5jb250ZW50RWxlbWVudC5jbGFzc05hbWUgPSAicGFuZWwtZW5hYmxlci12aWV3LWNvbnRl
bnQiOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbGVtZW50KTsK
LQotICAgIHRoaXMuaW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7
Ci0gICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmltYWdlRWxlbWVudCk7
Ci0KLSAgICB0aGlzLmNob2ljZXNGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIp
OwotICAgIHRoaXMuY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jaG9pY2VzRm9ybSk7
Ci0KLSAgICB0aGlzLmhlYWRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIp
OwotICAgIHRoaXMuaGVhZGVyRWxlbWVudC50ZXh0Q29udGVudCA9IGhlYWRpbmdUZXh0OwotICAg
IHRoaXMuY2hvaWNlc0Zvcm0uYXBwZW5kQ2hpbGQodGhpcy5oZWFkZXJFbGVtZW50KTsKLQotICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICBmdW5jdGlvbiBlbmFibGVPcHRpb24odGV4dCwgY2hlY2tl
ZCkgewotICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIp
OwotICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsK
LSAgICAgICAgb3B0aW9uLnR5cGUgPSAicmFkaW8iOwotICAgICAgICBvcHRpb24ubmFtZSA9ICJl
bmFibGUtb3B0aW9uIjsKLSAgICAgICAgaWYgKGNoZWNrZWQpCi0gICAgICAgICAgICBvcHRpb24u
Y2hlY2tlZCA9IHRydWU7Ci0gICAgICAgIGxhYmVsLmFwcGVuZENoaWxkKG9wdGlvbik7Ci0gICAg
ICAgIGxhYmVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKLSAg
ICAgICAgc2VsZi5jaG9pY2VzRm9ybS5hcHBlbmRDaGlsZChsYWJlbCk7Ci0gICAgICAgIHJldHVy
biBvcHRpb247Ci0gICAgfTsKLQotICAgIHRoaXMuZW5hYmxlZEZvclNlc3Npb24gPSBlbmFibGVP
cHRpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPbmx5IGVuYWJsZSBmb3IgdGhpcyBzZXNzaW9u
IiksIHRydWUpOwotICAgIHRoaXMuZW5hYmxlZEFsd2F5cyA9IGVuYWJsZU9wdGlvbihXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkFsd2F5cyBlbmFibGUiKSwgZmFsc2UpOwotCi0gICAgdGhpcy5kaXNj
bGFpbWVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMu
ZGlzY2xhaW1lckVsZW1lbnQuY2xhc3NOYW1lID0gInBhbmVsLWVuYWJsZXItZGlzY2xhaW1lciI7
Ci0gICAgdGhpcy5kaXNjbGFpbWVyRWxlbWVudC50ZXh0Q29udGVudCA9IGRpc2NsYWltZXJUZXh0
OwotICAgIHRoaXMuY2hvaWNlc0Zvcm0uYXBwZW5kQ2hpbGQodGhpcy5kaXNjbGFpbWVyRWxlbWVu
dCk7Ci0KLSAgICB0aGlzLmVuYWJsZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1
dHRvbiIpOwotICAgIHRoaXMuZW5hYmxlQnV0dG9uLnNldEF0dHJpYnV0ZSgidHlwZSIsICJidXR0
b24iKTsKLSAgICB0aGlzLmVuYWJsZUJ1dHRvbi50ZXh0Q29udGVudCA9IGJ1dHRvblRpdGxlOwot
ICAgIHRoaXMuZW5hYmxlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fZW5h
YmxlQnV0dG9uQ2lja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmNob2ljZXNGb3Jt
LmFwcGVuZENoaWxkKHRoaXMuZW5hYmxlQnV0dG9uKTsKLX0KLQotV2ViSW5zcGVjdG9yLlBhbmVs
RW5hYmxlclZpZXcucHJvdG90eXBlID0gewotICAgIF9lbmFibGVCdXR0b25DaWNrZWQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJlbmFi
bGUgY2xpY2tlZCIpOwotICAgIH0sCi0KLSAgICBvblJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5pbWFnZUVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0K
LSAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8ICh0aGlzLmNob2ljZXNGb3Jt
Lm9mZnNldFdpZHRoICsgdGhpcy5pbWFnZUVsZW1lbnQub2Zmc2V0V2lkdGgpKQotICAgICAgICAg
ICAgdGhpcy5pbWFnZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgfSwKLQot
ICAgIGdldCBhbHdheXNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkQWx3
YXlzLmNoZWNrZWQ7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcu
cHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1BhcnNlZFVSTC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFy
c2VkVVJMLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmJjYTFkLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFyc2VkVVJMLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KLSAqIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAqLwotV2ViSW5zcGVjdG9yLlBh
cnNlZFVSTCA9IGZ1bmN0aW9uKHVybCkKLXsKLSAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZTsKLSAg
ICB0aGlzLnVybCA9IHVybDsKLSAgICB0aGlzLnNjaGVtZSA9ICIiOwotICAgIHRoaXMuaG9zdCA9
ICIiOwotICAgIHRoaXMucG9ydCA9ICIiOwotICAgIHRoaXMucGF0aCA9ICIiOwotICAgIHRoaXMu
cXVlcnlQYXJhbXMgPSAiIjsKLSAgICB0aGlzLmZyYWdtZW50ID0gIiI7Ci0gICAgdGhpcy5mb2xk
ZXJQYXRoQ29tcG9uZW50cyA9ICIiOwotICAgIHRoaXMubGFzdFBhdGhDb21wb25lbnQgPSAiIjsK
LQotICAgIC8vIFJlZ0V4cCBncm91cHM6Ci0gICAgLy8gMSAtIHNjaGVtZSAodXNpbmcgdGhlIFJG
QzM5ODYgZ3JhbW1hcikKLSAgICAvLyAyIC0gaG9zdG5hbWUKLSAgICAvLyAzIC0gP3BvcnQKLSAg
ICAvLyA0IC0gP3BhdGgKLSAgICAvLyA1IC0gP2ZyYWdtZW50Ci0gICAgdmFyIG1hdGNoID0gdXJs
Lm1hdGNoKC9eKFtBLVphLXpdW0EtWmEtejAtOSsuLV0qKTpcL1wvKFteXC86XSopKD86OihbXGRd
KykpPyg/OihcL1teI10qKSg/OiMoLiopKT8pPyQvaSk7Ci0gICAgaWYgKG1hdGNoKSB7Ci0gICAg
ICAgIHRoaXMuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuc2NoZW1lID0gbWF0Y2hbMV0u
dG9Mb3dlckNhc2UoKTsKLSAgICAgICAgdGhpcy5ob3N0ID0gbWF0Y2hbMl07Ci0gICAgICAgIHRo
aXMucG9ydCA9IG1hdGNoWzNdOwotICAgICAgICB0aGlzLnBhdGggPSBtYXRjaFs0XSB8fCAiLyI7
Ci0gICAgICAgIHRoaXMuZnJhZ21lbnQgPSBtYXRjaFs1XTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAodGhpcy51cmwuc3RhcnRzV2l0aCgiZGF0YToiKSkgewotICAgICAgICAgICAgdGhpcy5z
Y2hlbWUgPSAiZGF0YSI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHRoaXMudXJsID09PSAiYWJvdXQ6YmxhbmsiKSB7Ci0gICAgICAgICAgICB0aGlzLnNjaGVt
ZSA9ICJhYm91dCI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy5wYXRoID0gdGhpcy51cmw7Ci0gICAgfQotCi0gICAgLy8gRmlyc3QgY3V0IHRoZSBxdWVyeSBw
YXJhbXMuCi0gICAgdmFyIHBhdGggPSB0aGlzLnBhdGg7Ci0gICAgdmFyIGluZGV4T2ZRdWVyeSA9
IHBhdGguaW5kZXhPZigiPyIpOwotICAgIGlmIChpbmRleE9mUXVlcnkgIT09IC0xKSB7Ci0gICAg
ICAgIHRoaXMucXVlcnlQYXJhbXMgPSBwYXRoLnN1YnN0cmluZyhpbmRleE9mUXVlcnkgKyAxKQot
ICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgaW5kZXhPZlF1ZXJ5KTsKLSAgICB9Ci0K
LSAgICAvLyBUaGVuIHRha2UgbGFzdCBwYXRoIGNvbXBvbmVudC4KLSAgICB2YXIgbGFzdFNsYXNo
SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCIvIik7Ci0gICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9
PSAtMSkgewotICAgICAgICB0aGlzLmZvbGRlclBhdGhDb21wb25lbnRzID0gcGF0aC5zdWJzdHJp
bmcoMCwgbGFzdFNsYXNoSW5kZXgpOwotICAgICAgICB0aGlzLmxhc3RQYXRoQ29tcG9uZW50ID0g
cGF0aC5zdWJzdHJpbmcobGFzdFNsYXNoSW5kZXggKyAxKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
dGhpcy5sYXN0UGF0aENvbXBvbmVudCA9IHBhdGg7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJp
bmd9IHVybAotICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59Ci0gKi8KLVdlYkluc3BlY3Rvci5Q
YXJzZWRVUkwuc3BsaXRVUkwgPSBmdW5jdGlvbih1cmwpCi17Ci0gICAgdmFyIHBhcnNlZFVSTCA9
IG5ldyBXZWJJbnNwZWN0b3IuUGFyc2VkVVJMKHVybCk7Ci0gICAgdmFyIG9yaWdpbjsKLSAgICB2
YXIgZm9sZGVyUGF0aDsKLSAgICB2YXIgbmFtZTsKLSAgICBpZiAocGFyc2VkVVJMLmlzVmFsaWQp
IHsKLSAgICAgICAgb3JpZ2luID0gcGFyc2VkVVJMLnNjaGVtZSArICI6Ly8iICsgcGFyc2VkVVJM
Lmhvc3Q7Ci0gICAgICAgIGlmIChwYXJzZWRVUkwucG9ydCkKLSAgICAgICAgICAgIG9yaWdpbiAr
PSAiOiIgKyBwYXJzZWRVUkwucG9ydDsKLSAgICAgICAgZm9sZGVyUGF0aCA9IHBhcnNlZFVSTC5m
b2xkZXJQYXRoQ29tcG9uZW50czsKLSAgICAgICAgbmFtZSA9IHBhcnNlZFVSTC5sYXN0UGF0aENv
bXBvbmVudDsKLSAgICAgICAgaWYgKHBhcnNlZFVSTC5xdWVyeVBhcmFtcykKLSAgICAgICAgICAg
IG5hbWUgKz0gIj8iICsgcGFyc2VkVVJMLnF1ZXJ5UGFyYW1zOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG9yaWdpbiA9ICIiOwotICAgICAgICBmb2xkZXJQYXRoID0gIiI7Ci0gICAgICAgIG5hbWUg
PSB1cmw7Ci0gICAgfQotICAgIHZhciByZXN1bHQgPSBbb3JpZ2luXTsKLSAgICB2YXIgc3BsaXR0
ZWRQYXRoID0gZm9sZGVyUGF0aC5zcGxpdCgiLyIpOwotICAgIGZvciAodmFyIGkgPSAxOyBpIDwg
c3BsaXR0ZWRQYXRoLmxlbmd0aDsgKytpKQotICAgICAgICByZXN1bHQucHVzaChzcGxpdHRlZFBh
dGhbaV0pOwotICAgIHJlc3VsdC5wdXNoKG5hbWUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS8qKgotICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwKLSAqIEBwYXJhbSB7c3RyaW5nfSBocmVm
Ci0gKiBAcmV0dXJuIHs/c3RyaW5nfQotICovCi1XZWJJbnNwZWN0b3IuUGFyc2VkVVJMLmNvbXBs
ZXRlVVJMID0gZnVuY3Rpb24oYmFzZVVSTCwgaHJlZikKLXsKLSAgICBpZiAoaHJlZikgewotICAg
ICAgICAvLyBSZXR1cm4gc3BlY2lhbCBVUkxzIGFzLWlzLgotICAgICAgICB2YXIgdHJpbW1lZEhy
ZWYgPSBocmVmLnRyaW0oKTsKLSAgICAgICAgaWYgKHRyaW1tZWRIcmVmLnN0YXJ0c1dpdGgoImRh
dGE6IikgfHwgdHJpbW1lZEhyZWYuc3RhcnRzV2l0aCgiYmxvYjoiKSB8fCB0cmltbWVkSHJlZi5z
dGFydHNXaXRoKCJqYXZhc2NyaXB0OiIpKQotICAgICAgICAgICAgcmV0dXJuIGhyZWY7Ci0KLSAg
ICAgICAgLy8gUmV0dXJuIGFic29sdXRlIFVSTHMgYXMtaXMuCi0gICAgICAgIHZhciBwYXJzZWRI
cmVmID0gdHJpbW1lZEhyZWYuYXNQYXJzZWRVUkwoKTsKLSAgICAgICAgaWYgKHBhcnNlZEhyZWYg
JiYgcGFyc2VkSHJlZi5zY2hlbWUpCi0gICAgICAgICAgICByZXR1cm4gdHJpbW1lZEhyZWY7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBiYXNlVVJMOwotCi0gICAgdmFyIHBhcnNlZFVSTCA9
IGJhc2VVUkwuYXNQYXJzZWRVUkwoKTsKLSAgICBpZiAocGFyc2VkVVJMKSB7Ci0gICAgICAgIGlm
IChwYXJzZWRVUkwuaXNEYXRhVVJMKCkpCi0gICAgICAgICAgICByZXR1cm4gaHJlZjsKLSAgICAg
ICAgdmFyIHBhdGggPSBocmVmOwotICAgICAgICBpZiAocGF0aC5jaGFyQXQoMCkgIT09ICIvIikg
ewotICAgICAgICAgICAgdmFyIGJhc2VQYXRoID0gcGFyc2VkVVJMLnBhdGg7Ci0KLSAgICAgICAg
ICAgIC8vIFRyaW0gb2ZmIHRoZSBxdWVyeSBwYXJ0IG9mIHRoZSBiYXNlUGF0aC4KLSAgICAgICAg
ICAgIHZhciBxdWVzdGlvbk1hcmtJbmRleCA9IGJhc2VQYXRoLmluZGV4T2YoIj8iKTsKLSAgICAg
ICAgICAgIGlmIChxdWVzdGlvbk1hcmtJbmRleCA+IDApCi0gICAgICAgICAgICAgICAgYmFzZVBh
dGggPSBiYXNlUGF0aC5zdWJzdHJpbmcoMCwgcXVlc3Rpb25NYXJrSW5kZXgpOwotICAgICAgICAg
ICAgLy8gQSBocmVmIG9mICI/Zm9vPWJhciIgaW1wbGllcyAiYmFzZVBhdGg/Zm9vPWJhciIuCi0g
ICAgICAgICAgICAvLyBXaXRoICJiYXNlUGF0aD9hPWIiIGFuZCAiP2Zvbz1iYXIiIHdlIHNob3Vs
ZCBnZXQgImJhc2VQYXRoP2Zvbz1iYXIiLgotICAgICAgICAgICAgdmFyIHByZWZpeDsKLSAgICAg
ICAgICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gIj8iKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGJhc2VQYXRoQ3V0SW5kZXggPSBiYXNlUGF0aC5pbmRleE9mKCI/Iik7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJhc2VQYXRoQ3V0SW5kZXggIT09IC0xKQotICAgICAgICAgICAgICAgICAgICBwcmVm
aXggPSBiYXNlUGF0aC5zdWJzdHJpbmcoMCwgYmFzZVBhdGhDdXRJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBiYXNlUGF0aDsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHByZWZpeCA9IGJhc2VQYXRoLnN1YnN0cmlu
ZygwLCBiYXNlUGF0aC5sYXN0SW5kZXhPZigiLyIpKSArICIvIjsKLQotICAgICAgICAgICAgcGF0
aCA9IHByZWZpeCArIHBhdGg7Ci0gICAgICAgIH0gZWxzZSBpZiAocGF0aC5sZW5ndGggPiAxICYm
IHBhdGguY2hhckF0KDEpID09PSAiLyIpIHsKLSAgICAgICAgICAgIC8vIGhyZWYgc3RhcnRzIHdp
dGggIi8vIiB3aGljaCBpcyBhIGZ1bGwgVVJMIHdpdGggdGhlIHByb3RvY29sIGRyb3BwZWQgKHVz
ZSB0aGUgYmFzZVVSTCBwcm90b2NvbCkuCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VkVVJMLnNj
aGVtZSArICI6IiArIHBhdGg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhcnNlZFVSTC5z
Y2hlbWUgKyAiOi8vIiArIHBhcnNlZFVSTC5ob3N0ICsgKHBhcnNlZFVSTC5wb3J0ID8gKCI6IiAr
IHBhcnNlZFVSTC5wb3J0KSA6ICIiKSArIHBhdGg7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwot
fQotCi1XZWJJbnNwZWN0b3IuUGFyc2VkVVJMLnByb3RvdHlwZSA9IHsKLSAgICBnZXQgZGlzcGxh
eU5hbWUoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlOYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlOYW1lOwotCi0gICAgICAgIGlmICh0aGlzLmlzRGF0YVVS
TCgpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVVSTERpc3BsYXlOYW1lKCk7Ci0gICAg
ICAgIGlmICh0aGlzLmlzQWJvdXRCbGFuaygpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMudXJs
OwotCi0gICAgICAgIHRoaXMuX2Rpc3BsYXlOYW1lID0gdGhpcy5sYXN0UGF0aENvbXBvbmVudDsK
LSAgICAgICAgaWYgKCF0aGlzLl9kaXNwbGF5TmFtZSAmJiB0aGlzLmhvc3QpCi0gICAgICAgICAg
ICB0aGlzLl9kaXNwbGF5TmFtZSA9IHRoaXMuaG9zdCArICIvIjsKLSAgICAgICAgaWYgKCF0aGlz
Ll9kaXNwbGF5TmFtZSAmJiB0aGlzLnVybCkKLSAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlOYW1l
ID0gdGhpcy51cmwudHJpbVVSTChXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZURvbWFpbiA/IFdl
Ykluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlRG9tYWluIDogIiIpOwotICAgICAgICBpZiAodGhpcy5f
ZGlzcGxheU5hbWUgPT09ICIvIikKLSAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlOYW1lID0gdGhp
cy51cmw7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5TmFtZTsKLSAgICB9LAotCi0gICAg
ZGF0YVVSTERpc3BsYXlOYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
ZGF0YVVSTERpc3BsYXlOYW1lKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFVUkxEaXNw
bGF5TmFtZTsKLSAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVVSTCgpKQotICAgICAgICAgICAgcmV0
dXJuICIiOwotICAgICAgICB0aGlzLl9kYXRhVVJMRGlzcGxheU5hbWUgPSB0aGlzLnVybC50cmlt
RW5kKDIwKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFVUkxEaXNwbGF5TmFtZTsKLSAgICB9
LAotCi0gICAgaXNBYm91dEJsYW5rOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy51cmwgPT09ICJhYm91dDpibGFuayI7Ci0gICAgfSwKLQotICAgIGlzRGF0YVVSTDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1lID09PSAiZGF0YSI7Ci0g
ICAgfQotfQotCi0vKioKLSAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuUGFyc2VkVVJMfQotICov
Ci1TdHJpbmcucHJvdG90eXBlLmFzUGFyc2VkVVJMID0gZnVuY3Rpb24oKQotewotICAgIHZhciBw
YXJzZWRVUkwgPSBuZXcgV2ViSW5zcGVjdG9yLlBhcnNlZFVSTCh0aGlzLnRvU3RyaW5nKCkpOwot
ICAgIGlmIChwYXJzZWRVUkwuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIHBhcnNlZFVSTDsKLSAg
ICByZXR1cm4gbnVsbDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUGxhY2FyZC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UGxhY2FyZC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU5MWE2Ni4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BsYWNhcmQuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmlu
Z30gdGl0bGUKLSAqIEBwYXJhbSB7c3RyaW5nfSBzdWJ0aXRsZQotICovCi1XZWJJbnNwZWN0b3Iu
UGxhY2FyZCA9IGZ1bmN0aW9uKHRpdGxlLCBzdWJ0aXRsZSkKLXsKLSAgICB0aGlzLmVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NO
YW1lID0gInBsYWNhcmQiOwotICAgIHRoaXMuZWxlbWVudC5wbGFjYXJkID0gdGhpczsKLQotICAg
IHRoaXMudGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
dGhpcy50aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInRpdGxlIjsKLQotICAgIHRoaXMuc3VidGl0
bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5zdWJ0
aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInN1YnRpdGxlIjsKLQotICAgIHRoaXMuZWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLnN1YnRpdGxlRWxlbWVudCk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMudGl0bGVFbGVtZW50KTsKLQotICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKLSAg
ICB0aGlzLnN1YnRpdGxlID0gc3VidGl0bGU7Ci0gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlOwot
fQotCi1XZWJJbnNwZWN0b3IuUGxhY2FyZC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqIEByZXR1cm4g
e3N0cmluZ30gKi8KLSAgICBnZXQgdGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X3RpdGxlOwotICAgIH0sCi0KLSAgICBzZXQgdGl0bGUoeCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl90aXRsZSA9PT0geCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fdGl0
bGUgPSB4OwotICAgICAgICB0aGlzLnRpdGxlRWxlbWVudC50ZXh0Q29udGVudCA9IHg7Ci0gICAg
fSwKLQotICAgIC8qKiBAcmV0dXJuIHtzdHJpbmd9ICovCi0gICAgZ2V0IHN1YnRpdGxlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdWJ0aXRsZTsKLSAgICB9LAotCi0gICAgc2V0IHN1
YnRpdGxlKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc3VidGl0bGUgPT09IHgpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3N1YnRpdGxlID0geDsKLSAgICAgICAgdGhp
cy5zdWJ0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB4OwotICAgIH0sCi0KLSAgICAvKiogQHJl
dHVybiB7Ym9vbGVhbn0gKi8KLSAgICBnZXQgc2VsZWN0ZWQoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX3NlbGVjdGVkOwotICAgIH0sCi0KLSAgICBzZXQgc2VsZWN0ZWQoeCkKLSAgICB7
Ci0gICAgICAgIGlmICh4KQotICAgICAgICAgICAgdGhpcy5zZWxlY3QoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpcy5kZXNlbGVjdCgpOwotICAgIH0sCi0KLSAgICBzZWxlY3Q6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICB0aGlzLmVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICB9LAotCi0gICAgZGVzZWxlY3Q6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gZmFsc2U7Ci0gICAgICAgIHRo
aXMuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotICAgIH0sCi0KLSAgICB0
b2dnbGVTZWxlY3RlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5zZWxlY3RlZCA9
ICF0aGlzLnNlbGVjdGVkOwotICAgIH0sCi0KLSAgICBkaXNjYXJkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUG9wb3Zlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUG9wb3Zl
ci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiZWNiOS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMKKysrIC9kZXYv
bnVsbApAQCAtMSw0NjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVy
PX0gcG9wb3ZlckhlbHBlcgotICovCi1XZWJJbnNwZWN0b3IuUG9wb3ZlciA9IGZ1bmN0aW9uKHBv
cG92ZXJIZWxwZXIpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0
aGlzLm1hcmtBc1Jvb3QoKTsKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInBvcG92ZXIg
Y3VzdG9tLXBvcHVwLXZlcnRpY2FsLXNjcm9sbCBjdXN0b20tcG9wdXAtaG9yaXpvbnRhbC1zY3Jv
bGwiOwotCi0gICAgdGhpcy5fcG9wdXBBcnJvd0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICB0aGlzLl9wb3B1cEFycm93RWxlbWVudC5jbGFzc05hbWUgPSAiYXJy
b3ciOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9wb3B1cEFycm93RWxlbWVu
dCk7Ci0KLSAgICB0aGlzLl9jb250ZW50RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgdGhpcy5fY29udGVudERpdi5jbGFzc05hbWUgPSAiY29udGVudCI7Ci0gICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnREaXYpOwotCi0gICAgdGhpcy5fcG9w
b3ZlckhlbHBlciA9IHBvcG92ZXJIZWxwZXI7Ci19Ci0KLVdlYkluc3BlY3Rvci5Qb3BvdmVyLnBy
b3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAg
ICAgKiBAcGFyYW0ge0VsZW1lbnR8QW5jaG9yQm94fSBhbmNob3IKLSAgICAgKiBAcGFyYW0gez9u
dW1iZXI9fSBwcmVmZXJyZWRXaWR0aAotICAgICAqIEBwYXJhbSB7P251bWJlcj19IHByZWZlcnJl
ZEhlaWdodAotICAgICAqIEBwYXJhbSB7P1dlYkluc3BlY3Rvci5Qb3BvdmVyLk9yaWVudGF0aW9u
PX0gYXJyb3dEaXJlY3Rpb24KLSAgICAgKi8KLSAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBh
bmNob3IsIHByZWZlcnJlZFdpZHRoLCBwcmVmZXJyZWRIZWlnaHQsIGFycm93RGlyZWN0aW9uKQot
ICAgIHsKLSAgICAgICAgdGhpcy5faW5uZXJTaG93KG51bGwsIGVsZW1lbnQsIGFuY2hvciwgcHJl
ZmVycmVkV2lkdGgsIHByZWZlcnJlZEhlaWdodCwgYXJyb3dEaXJlY3Rpb24pOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5WaWV3fSB2aWV3Ci0gICAgICog
QHBhcmFtIHtFbGVtZW50fEFuY2hvckJveH0gYW5jaG9yCi0gICAgICogQHBhcmFtIHs/bnVtYmVy
PX0gcHJlZmVycmVkV2lkdGgKLSAgICAgKiBAcGFyYW0gez9udW1iZXI9fSBwcmVmZXJyZWRIZWln
aHQKLSAgICAgKi8KLSAgICBzaG93VmlldzogZnVuY3Rpb24odmlldywgYW5jaG9yLCBwcmVmZXJy
ZWRXaWR0aCwgcHJlZmVycmVkSGVpZ2h0KQotICAgIHsKLSAgICAgICAgdGhpcy5faW5uZXJTaG93
KHZpZXcsIHZpZXcuZWxlbWVudCwgYW5jaG9yLCBwcmVmZXJyZWRXaWR0aCwgcHJlZmVycmVkSGVp
Z2h0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVmll
dz99IHZpZXcKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRlbnRFbGVtZW50Ci0gICAgICog
QHBhcmFtIHtFbGVtZW50fEFuY2hvckJveH0gYW5jaG9yCi0gICAgICogQHBhcmFtIHs/bnVtYmVy
PX0gcHJlZmVycmVkV2lkdGgKLSAgICAgKiBAcGFyYW0gez9udW1iZXI9fSBwcmVmZXJyZWRIZWln
aHQKLSAgICAgKiBAcGFyYW0gez9XZWJJbnNwZWN0b3IuUG9wb3Zlci5PcmllbnRhdGlvbj19IGFy
cm93RGlyZWN0aW9uCi0gICAgICovCi0gICAgX2lubmVyU2hvdzogZnVuY3Rpb24odmlldywgY29u
dGVudEVsZW1lbnQsIGFuY2hvciwgcHJlZmVycmVkV2lkdGgsIHByZWZlcnJlZEhlaWdodCwgYXJy
b3dEaXJlY3Rpb24pCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZGlzcG9zZWQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQgPSBjb250ZW50RWxlbWVu
dDsKLQotICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2UgaGlkZSBwcmV2
aW91cyBwb3B1cCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLgotICAgICAgICBpZiAoV2ViSW5zcGVj
dG9yLlBvcG92ZXIuX3BvcG92ZXIpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuUG9wb3Zlci5f
cG9wb3Zlci5kZXRhY2goKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBvcG92ZXIuX3BvcG92ZXIg
PSB0aGlzOwotCi0gICAgICAgIC8vIFRlbXBvcmFyaWx5IGF0dGFjaCBpbiBvcmRlciB0byBtZWFz
dXJlIHByZWZlcnJlZCBkaW1lbnNpb25zLgotICAgICAgICB2YXIgcHJlZmVycmVkU2l6ZSA9IHZp
ZXcgPyB2aWV3Lm1lYXN1cmVQcmVmZXJyZWRTaXplKCkgOiB0aGlzLmNvbnRlbnRFbGVtZW50Lm1l
YXN1cmVQcmVmZXJyZWRTaXplKCk7Ci0gICAgICAgIHByZWZlcnJlZFdpZHRoID0gcHJlZmVycmVk
V2lkdGggfHwgcHJlZmVycmVkU2l6ZS53aWR0aDsKLSAgICAgICAgcHJlZmVycmVkSGVpZ2h0ID0g
cHJlZmVycmVkSGVpZ2h0IHx8IHByZWZlcnJlZFNpemUuaGVpZ2h0OwotCi0gICAgICAgIFdlYklu
c3BlY3Rvci5WaWV3LnByb3RvdHlwZS5zaG93LmNhbGwodGhpcywgZG9jdW1lbnQuYm9keSk7Ci0K
LSAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICB2aWV3LnNob3codGhpcy5fY29udGVudERp
dik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2NvbnRlbnREaXYuYXBwZW5kQ2hp
bGQodGhpcy5jb250ZW50RWxlbWVudCk7Ci0KLSAgICAgICAgdGhpcy5fcG9zaXRpb25FbGVtZW50
KGFuY2hvciwgcHJlZmVycmVkV2lkdGgsIHByZWZlcnJlZEhlaWdodCwgYXJyb3dEaXJlY3Rpb24p
OwotCi0gICAgICAgIGlmICh0aGlzLl9wb3BvdmVySGVscGVyKSB7Ci0gICAgICAgICAgICBjb250
ZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLl9wb3BvdmVySGVs
cGVyLl9raWxsSGlkZVBvcG92ZXJUaW1lci5iaW5kKHRoaXMuX3BvcG92ZXJIZWxwZXIpLCB0cnVl
KTsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIs
IHRoaXMuX3BvcG92ZXJIZWxwZXIuX3BvcG92ZXJNb3VzZU91dC5iaW5kKHRoaXMuX3BvcG92ZXJI
ZWxwZXIpLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBoaWRlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLmRldGFjaCgpOwotICAgICAgICBkZWxldGUgV2ViSW5zcGVj
dG9yLlBvcG92ZXIuX3BvcG92ZXI7Ci0gICAgfSwKLQotICAgIGdldCBkaXNwb3NlZCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fZGlzcG9zZWQ7Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmlzU2hvd2luZygpKQotICAgICAg
ICAgICAgdGhpcy5oaWRlKCk7Ci0gICAgICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTsKLSAgICB9
LAotCi0gICAgc2V0Q2FuU2hyaW5rOiBmdW5jdGlvbihjYW5TaHJpbmspCi0gICAgewotICAgICAg
ICB0aGlzLl9oYXNGaXhlZEhlaWdodCA9ICFjYW5TaHJpbms7Ci0gICAgICAgIHRoaXMuX2NvbnRl
bnREaXYuYWRkU3R5bGVDbGFzcygiZml4ZWQtaGVpZ2h0Iik7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7RWxlbWVudHxBbmNob3JCb3h9IGFuY2hvckVsZW1lbnQKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gcHJlZmVycmVkV2lkdGgKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gcHJl
ZmVycmVkSGVpZ2h0Ci0gICAgICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLlBvcG92ZXIuT3JpZW50
YXRpb249fSBhcnJvd0RpcmVjdGlvbgotICAgICAqLwotICAgIF9wb3NpdGlvbkVsZW1lbnQ6IGZ1
bmN0aW9uKGFuY2hvckVsZW1lbnQsIHByZWZlcnJlZFdpZHRoLCBwcmVmZXJyZWRIZWlnaHQsIGFy
cm93RGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSAyNTsKLSAg
ICAgICAgY29uc3Qgc2Nyb2xsZXJXaWR0aCA9IHRoaXMuX2hhc0ZpeGVkSGVpZ2h0ID8gMCA6IDEx
OwotICAgICAgICBjb25zdCBhcnJvd0hlaWdodCA9IDE1OwotICAgICAgICBjb25zdCBhcnJvd09m
ZnNldCA9IDEwOwotICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSAxMDsKLQotICAgICAgICAv
LyBTa2lubnkgdG9vbHRpcHMgYXJlIG5vdCBwcmV0dHksIHRoZWlyIGFycm93IGxvY2F0aW9uIGlz
IG5vdCBuaWNlLgotICAgICAgICBwcmVmZXJyZWRXaWR0aCA9IE1hdGgubWF4KHByZWZlcnJlZFdp
ZHRoLCA1MCk7Ci0gICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsK
LSAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7Ci0KLSAgICAg
ICAgdmFyIGFuY2hvckJveCA9IGFuY2hvckVsZW1lbnQgaW5zdGFuY2VvZiBBbmNob3JCb3ggPyBh
bmNob3JFbGVtZW50IDogYW5jaG9yRWxlbWVudC5ib3hJbldpbmRvdyh3aW5kb3cpOwotICAgICAg
ICB2YXIgbmV3RWxlbWVudFBvc2l0aW9uID0geyB4OiAwLCB5OiAwLCB3aWR0aDogcHJlZmVycmVk
V2lkdGggKyBzY3JvbGxlcldpZHRoLCBoZWlnaHQ6IHByZWZlcnJlZEhlaWdodCB9OwotCi0gICAg
ICAgIHZhciB2ZXJ0aWNhbEFsaWdubWVudDsKLSAgICAgICAgdmFyIHJvb21BYm92ZSA9IGFuY2hv
ckJveC55OwotICAgICAgICB2YXIgcm9vbUJlbG93ID0gdG90YWxIZWlnaHQgLSBhbmNob3JCb3gu
eSAtIGFuY2hvckJveC5oZWlnaHQ7Ci0KLSAgICAgICAgaWYgKChyb29tQWJvdmUgPiByb29tQmVs
b3cpIHx8IChhcnJvd0RpcmVjdGlvbiA9PT0gV2ViSW5zcGVjdG9yLlBvcG92ZXIuT3JpZW50YXRp
b24uQm90dG9tKSkgewotICAgICAgICAgICAgLy8gUG9zaXRpb25pbmcgYWJvdmUgdGhlIGFuY2hv
ci4KLSAgICAgICAgICAgIGlmICgoYW5jaG9yQm94LnkgPiBuZXdFbGVtZW50UG9zaXRpb24uaGVp
Z2h0ICsgYXJyb3dIZWlnaHQgKyBib3JkZXJSYWRpdXMpIHx8IChhcnJvd0RpcmVjdGlvbiA9PT0g
V2ViSW5zcGVjdG9yLlBvcG92ZXIuT3JpZW50YXRpb24uQm90dG9tKSkKLSAgICAgICAgICAgICAg
ICBuZXdFbGVtZW50UG9zaXRpb24ueSA9IGFuY2hvckJveC55IC0gbmV3RWxlbWVudFBvc2l0aW9u
LmhlaWdodCAtIGFycm93SGVpZ2h0OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgbmV3RWxlbWVudFBvc2l0aW9uLnkgPSBib3JkZXJSYWRpdXM7Ci0gICAgICAgICAgICAgICAg
bmV3RWxlbWVudFBvc2l0aW9uLmhlaWdodCA9IGFuY2hvckJveC55IC0gYm9yZGVyUmFkaXVzICog
MiAtIGFycm93SGVpZ2h0OwotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9oYXNGaXhlZEhlaWdo
dCAmJiBuZXdFbGVtZW50UG9zaXRpb24uaGVpZ2h0IDwgcHJlZmVycmVkSGVpZ2h0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG5ld0VsZW1lbnRQb3NpdGlvbi55ID0gYm9yZGVyUmFkaXVzOwotICAg
ICAgICAgICAgICAgICAgICBuZXdFbGVtZW50UG9zaXRpb24uaGVpZ2h0ID0gcHJlZmVycmVkSGVp
Z2h0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZlcnRp
Y2FsQWxpZ25tZW50ID0gV2ViSW5zcGVjdG9yLlBvcG92ZXIuT3JpZW50YXRpb24uQm90dG9tOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUG9zaXRpb25pbmcgYmVsb3cgdGhlIGFu
Y2hvci4KLSAgICAgICAgICAgIG5ld0VsZW1lbnRQb3NpdGlvbi55ID0gYW5jaG9yQm94LnkgKyBh
bmNob3JCb3guaGVpZ2h0ICsgYXJyb3dIZWlnaHQ7Ci0gICAgICAgICAgICBpZiAoKG5ld0VsZW1l
bnRQb3NpdGlvbi55ICsgbmV3RWxlbWVudFBvc2l0aW9uLmhlaWdodCArIGFycm93SGVpZ2h0IC0g
Ym9yZGVyV2lkdGggPj0gdG90YWxIZWlnaHQpICYmIChhcnJvd0RpcmVjdGlvbiAhPT0gV2ViSW5z
cGVjdG9yLlBvcG92ZXIuT3JpZW50YXRpb24uVG9wKSkgewotICAgICAgICAgICAgICAgIG5ld0Vs
ZW1lbnRQb3NpdGlvbi5oZWlnaHQgPSB0b3RhbEhlaWdodCAtIGFuY2hvckJveC55IC0gYW5jaG9y
Qm94LmhlaWdodCAtIGJvcmRlclJhZGl1cyAqIDIgLSBhcnJvd0hlaWdodDsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5faGFzRml4ZWRIZWlnaHQgJiYgbmV3RWxlbWVudFBvc2l0aW9uLmhlaWdo
dCA8IHByZWZlcnJlZEhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50UG9z
aXRpb24ueSA9IHRvdGFsSGVpZ2h0IC0gcHJlZmVycmVkSGVpZ2h0IC0gYm9yZGVyUmFkaXVzOwot
ICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50UG9zaXRpb24uaGVpZ2h0ID0gcHJlZmVycmVk
SGVpZ2h0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8v
IEFsaWduIGFycm93LgotICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQgPSBXZWJJbnNwZWN0
b3IuUG9wb3Zlci5PcmllbnRhdGlvbi5Ub3A7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaG9y
aXpvbnRhbEFsaWdubWVudDsKLSAgICAgICAgaWYgKGFuY2hvckJveC54ICsgbmV3RWxlbWVudFBv
c2l0aW9uLndpZHRoIDwgdG90YWxXaWR0aCkgewotICAgICAgICAgICAgbmV3RWxlbWVudFBvc2l0
aW9uLnggPSBNYXRoLm1heChib3JkZXJSYWRpdXMsIGFuY2hvckJveC54IC0gYm9yZGVyUmFkaXVz
IC0gYXJyb3dPZmZzZXQpOwotICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudCA9ICJsZWZ0
IjsKLSAgICAgICAgfSBlbHNlIGlmIChuZXdFbGVtZW50UG9zaXRpb24ud2lkdGggKyBib3JkZXJS
YWRpdXMgKiAyIDwgdG90YWxXaWR0aCkgewotICAgICAgICAgICAgbmV3RWxlbWVudFBvc2l0aW9u
LnggPSB0b3RhbFdpZHRoIC0gbmV3RWxlbWVudFBvc2l0aW9uLndpZHRoIC0gYm9yZGVyUmFkaXVz
OwotICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudCA9ICJyaWdodCI7Ci0gICAgICAgICAg
ICAvLyBQb3NpdGlvbiBhcnJvdyBhY2N1cmF0ZWx5LgotICAgICAgICAgICAgdmFyIGFycm93Umln
aHRQb3NpdGlvbiA9IE1hdGgubWF4KDAsIHRvdGFsV2lkdGggLSBhbmNob3JCb3gueCAtIGFuY2hv
ckJveC53aWR0aCAtIGJvcmRlclJhZGl1cyAtIGFycm93T2Zmc2V0KTsKLSAgICAgICAgICAgIGFy
cm93UmlnaHRQb3NpdGlvbiArPSBhbmNob3JCb3gud2lkdGggLyAyOwotICAgICAgICAgICAgYXJy
b3dSaWdodFBvc2l0aW9uID0gTWF0aC5taW4oYXJyb3dSaWdodFBvc2l0aW9uLCBuZXdFbGVtZW50
UG9zaXRpb24ud2lkdGggLSBib3JkZXJSYWRpdXMgLSBhcnJvd09mZnNldCk7Ci0gICAgICAgICAg
ICB0aGlzLl9wb3B1cEFycm93RWxlbWVudC5zdHlsZS5yaWdodCA9IGFycm93UmlnaHRQb3NpdGlv
biArICJweCI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXdFbGVtZW50UG9zaXRp
b24ueCA9IGJvcmRlclJhZGl1czsKLSAgICAgICAgICAgIG5ld0VsZW1lbnRQb3NpdGlvbi53aWR0
aCA9IHRvdGFsV2lkdGggLSBib3JkZXJSYWRpdXMgKiAyOwotICAgICAgICAgICAgbmV3RWxlbWVu
dFBvc2l0aW9uLmhlaWdodCArPSBzY3JvbGxlcldpZHRoOwotICAgICAgICAgICAgaG9yaXpvbnRh
bEFsaWdubWVudCA9ICJsZWZ0IjsKLSAgICAgICAgICAgIGlmICh2ZXJ0aWNhbEFsaWdubWVudCA9
PT0gV2ViSW5zcGVjdG9yLlBvcG92ZXIuT3JpZW50YXRpb24uQm90dG9tKQotICAgICAgICAgICAg
ICAgIG5ld0VsZW1lbnRQb3NpdGlvbi55IC09IHNjcm9sbGVyV2lkdGg7Ci0gICAgICAgICAgICAv
LyBQb3NpdGlvbiBhcnJvdyBhY2N1cmF0ZWx5LgotICAgICAgICAgICAgdGhpcy5fcG9wdXBBcnJv
d0VsZW1lbnQuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIGFuY2hvckJveC54IC0gYm9yZGVyUmFk
aXVzICogMiAtIGFycm93T2Zmc2V0KSArICJweCI7Ci0gICAgICAgICAgICB0aGlzLl9wb3B1cEFy
cm93RWxlbWVudC5zdHlsZS5sZWZ0ICs9IGFuY2hvckJveC53aWR0aCAvIDI7Ci0gICAgICAgIH0K
LQotICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInBvcG92ZXIgY3VzdG9tLXBvcHVw
LXZlcnRpY2FsLXNjcm9sbCBjdXN0b20tcG9wdXAtaG9yaXpvbnRhbC1zY3JvbGwgIiArIHZlcnRp
Y2FsQWxpZ25tZW50ICsgIi0iICsgaG9yaXpvbnRhbEFsaWdubWVudCArICItYXJyb3ciOwotICAg
ICAgICB0aGlzLmVsZW1lbnQucG9zaXRpb25BdChuZXdFbGVtZW50UG9zaXRpb24ueCAtIGJvcmRl
cldpZHRoLCBuZXdFbGVtZW50UG9zaXRpb24ueSAtIGJvcmRlcldpZHRoKTsKLSAgICAgICAgdGhp
cy5lbGVtZW50LnN0eWxlLndpZHRoID0gbmV3RWxlbWVudFBvc2l0aW9uLndpZHRoICsgYm9yZGVy
V2lkdGggKiAyICsgInB4IjsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IG5l
d0VsZW1lbnRQb3NpdGlvbi5oZWlnaHQgKyBib3JkZXJXaWR0aCAqIDIgKyAicHgiOwotICAgIH0s
Ci0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtFbGVtZW50fSBwYW5lbEVsZW1lbnQKLSAqIEBw
YXJhbSB7ZnVuY3Rpb24oRWxlbWVudCwgRXZlbnQpOihFbGVtZW50fEFuY2hvckJveCl8dW5kZWZp
bmVkfSBnZXRBbmNob3IKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oRWxlbWVudCwgV2ViSW5zcGVjdG9y
LlBvcG92ZXIpOnVuZGVmaW5lZH0gc2hvd1BvcG92ZXIKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKT19
IG9uSGlkZQotICogQHBhcmFtIHtib29sZWFuPX0gZGlzYWJsZU9uQ2xpY2sKLSAqLwotV2ViSW5z
cGVjdG9yLlBvcG92ZXJIZWxwZXIgPSBmdW5jdGlvbihwYW5lbEVsZW1lbnQsIGdldEFuY2hvciwg
c2hvd1BvcG92ZXIsIG9uSGlkZSwgZGlzYWJsZU9uQ2xpY2spCi17Ci0gICAgdGhpcy5fcGFuZWxF
bGVtZW50ID0gcGFuZWxFbGVtZW50OwotICAgIHRoaXMuX2dldEFuY2hvciA9IGdldEFuY2hvcjsK
LSAgICB0aGlzLl9zaG93UG9wb3ZlciA9IHNob3dQb3BvdmVyOwotICAgIHRoaXMuX29uSGlkZSA9
IG9uSGlkZTsKLSAgICB0aGlzLl9kaXNhYmxlT25DbGljayA9ICEhZGlzYWJsZU9uQ2xpY2s7Ci0g
ICAgcGFuZWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNl
RG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgcGFuZWxFbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlbW92ZSIsIHRoaXMuX21vdXNlTW92ZS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAg
cGFuZWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5fbW91c2VPdXQu
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuc2V0VGltZW91dCgxMDAwKTsKLX0KLQotV2Vi
SW5zcGVjdG9yLlBvcG92ZXJIZWxwZXIucHJvdG90eXBlID0gewotICAgIHNldFRpbWVvdXQ6IGZ1
bmN0aW9uKHRpbWVvdXQpCi0gICAgewotICAgICAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudAotICAg
ICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2V2ZW50SW5Ib3ZlckVsZW1lbnQ6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9ob3ZlckVsZW1lbnQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZhciBib3ggPSB0aGlzLl9ob3Zl
ckVsZW1lbnQgaW5zdGFuY2VvZiBBbmNob3JCb3ggPyB0aGlzLl9ob3ZlckVsZW1lbnQgOiB0aGlz
Ll9ob3ZlckVsZW1lbnQuYm94SW5XaW5kb3coKTsKLSAgICAgICAgcmV0dXJuIChib3gueCA8PSBl
dmVudC5jbGllbnRYICYmIGV2ZW50LmNsaWVudFggPD0gYm94LnggKyBib3gud2lkdGggJiYKLSAg
ICAgICAgICAgIGJveC55IDw9IGV2ZW50LmNsaWVudFkgJiYgZXZlbnQuY2xpZW50WSA8PSBib3gu
eSArIGJveC5oZWlnaHQpOwotICAgIH0sCi0KLSAgICBfbW91c2VEb3duOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlT25DbGljayB8fCAhdGhpcy5fZXZl
bnRJbkhvdmVyRWxlbWVudChldmVudCkpCi0gICAgICAgICAgICB0aGlzLmhpZGVQb3BvdmVyKCk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGhpcy5fa2lsbEhpZGVQb3BvdmVyVGltZXIo
KTsKLSAgICAgICAgICAgIHRoaXMuX2hhbmRsZU1vdXNlQWN0aW9uKGV2ZW50LCB0cnVlKTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICBfbW91c2VNb3ZlOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIC8vIFByZXRlbmQgdGhhdCBub3RoaW5nIGhhcyBoYXBwZW5lZC4KLSAgICAgICAg
aWYgKHRoaXMuX2V2ZW50SW5Ib3ZlckVsZW1lbnQoZXZlbnQpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHRoaXMuX3N0YXJ0SGlkZVBvcG92ZXJUaW1lcigpOwotICAgICAgICB0aGlz
Ll9oYW5kbGVNb3VzZUFjdGlvbihldmVudCwgZmFsc2UpOwotICAgIH0sCi0KLSAgICBfcG9wb3Zl
ck1vdXNlT3V0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5pc1Bv
cG92ZXJWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChldmVudC5y
ZWxhdGVkVGFyZ2V0ICYmICFldmVudC5yZWxhdGVkVGFyZ2V0LmlzU2VsZk9yRGVzY2VuZGFudCh0
aGlzLl9wb3BvdmVyLl9jb250ZW50RGl2KSkKLSAgICAgICAgICAgIHRoaXMuX3N0YXJ0SGlkZVBv
cG92ZXJUaW1lcigpOwotICAgIH0sCi0KLSAgICBfbW91c2VPdXQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmlzUG9wb3ZlclZpc2libGUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKCF0aGlzLl9ldmVudEluSG92ZXJFbGVtZW50KGV2ZW50KSkK
LSAgICAgICAgICAgIHRoaXMuX3N0YXJ0SGlkZVBvcG92ZXJUaW1lcigpOwotICAgIH0sCi0KLSAg
ICBfc3RhcnRIaWRlUG9wb3ZlclRpbWVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBV
c2VyIGhhcyA1MDBtcyAodGhpcy5fdGltZW91dCAvIDIpIHRvIHJlYWNoIHRoZSBwb3B1cC4KLSAg
ICAgICAgaWYgKCF0aGlzLl9wb3BvdmVyIHx8IHRoaXMuX2hpZGVQb3BvdmVyVGltZXIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZnVuY3Rpb24gZG9IaWRlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdGhpcy5faGlkZVBvcG92ZXIoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9oaWRlUG9wb3ZlclRpbWVyOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2hpZGVQb3BvdmVy
VGltZXIgPSBzZXRUaW1lb3V0KGRvSGlkZS5iaW5kKHRoaXMpLCB0aGlzLl90aW1lb3V0IC8gMik7
Ci0gICAgfSwKLQotICAgIF9oYW5kbGVNb3VzZUFjdGlvbjogZnVuY3Rpb24oZXZlbnQsIGlzTW91
c2VEb3duKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzZXRIb3ZlclRpbWVyKCk7Ci0gICAgICAg
IGlmIChldmVudC53aGljaCAmJiB0aGlzLl9kaXNhYmxlT25DbGljaykKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdGhpcy5faG92ZXJFbGVtZW50ID0gdGhpcy5fZ2V0QW5jaG9yKGV2ZW50
LnRhcmdldCwgZXZlbnQpOwotICAgICAgICBpZiAoIXRoaXMuX2hvdmVyRWxlbWVudCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY29uc3QgdG9vbFRpcERlbGF5ID0gaXNNb3VzZURvd24g
PyAwIDogKHRoaXMuX3BvcHVwID8gdGhpcy5fdGltZW91dCAqIDAuNiA6IHRoaXMuX3RpbWVvdXQp
OwotICAgICAgICB0aGlzLl9ob3ZlclRpbWVyID0gc2V0VGltZW91dCh0aGlzLl9tb3VzZUhvdmVy
LmJpbmQodGhpcywgdGhpcy5faG92ZXJFbGVtZW50KSwgdG9vbFRpcERlbGF5KTsKLSAgICB9LAot
Ci0gICAgX3Jlc2V0SG92ZXJUaW1lcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX2hvdmVyVGltZXIpIHsKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ob3ZlclRp
bWVyKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ob3ZlclRpbWVyOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIGlzUG9wb3ZlclZpc2libGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAhIXRoaXMuX3BvcG92ZXI7Ci0gICAgfSwKLQotICAgIGhpZGVQb3BvdmVyOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9yZXNldEhvdmVyVGltZXIoKTsKLSAgICAgICAg
dGhpcy5faGlkZVBvcG92ZXIoKTsKLSAgICB9LAotCi0gICAgX2hpZGVQb3BvdmVyOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXIpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX29uSGlkZSkKLSAgICAgICAgICAgIHRoaXMuX29uSGlk
ZSgpOwotCi0gICAgICAgIHRoaXMuX3BvcG92ZXIuZGlzcG9zZSgpOwotICAgICAgICBkZWxldGUg
dGhpcy5fcG9wb3ZlcjsKLSAgICAgICAgdGhpcy5faG92ZXJFbGVtZW50ID0gbnVsbDsKLSAgICB9
LAotCi0gICAgX21vdXNlSG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewotICAgICAgICBk
ZWxldGUgdGhpcy5faG92ZXJUaW1lcjsKLQotICAgICAgICB0aGlzLl9oaWRlUG9wb3ZlcigpOwot
ICAgICAgICB0aGlzLl9wb3BvdmVyID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVyKHRoaXMpOwot
ICAgICAgICB0aGlzLl9zaG93UG9wb3ZlcihlbGVtZW50LCB0aGlzLl9wb3BvdmVyKTsKLSAgICB9
LAotCi0gICAgX2tpbGxIaWRlUG9wb3ZlclRpbWVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5faGlkZVBvcG92ZXJUaW1lcikgewotICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KHRoaXMuX2hpZGVQb3BvdmVyVGltZXIpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZGVQ
b3BvdmVyVGltZXI7Ci0KLSAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB3ZSByZWFjaGVkIHRo
ZSBwb3B1cCwgYnV0IHdlIG1pZ2h0IGhhdmUgbW92ZWQgb3ZlciBvdGhlciBlbGVtZW50cy4KLSAg
ICAgICAgICAgIC8vIERpc2NhcmQgcGVuZGluZyBjb21tYW5kLgotICAgICAgICAgICAgdGhpcy5f
cmVzZXRIb3ZlclRpbWVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8qKiBAZW51bSB7c3Ry
aW5nfSAqLwotV2ViSW5zcGVjdG9yLlBvcG92ZXIuT3JpZW50YXRpb24gPSB7Ci0gICAgVG9wOiAi
dG9wIiwKLSAgICBCb3R0b206ICJib3R0b20iCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAqLwotV2ViSW5zcGVjdG9yLlBvcG92ZXJDb250ZW50
SGVscGVyID0gZnVuY3Rpb24odGl0bGUpCi17Ci0gICAgdGhpcy5fY29udGVudFRhYmxlID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKLSAgICB2YXIgdGl0bGVDZWxsID0gdGhpcy5f
Y3JlYXRlQ2VsbChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzIC0gRGV0YWlscyIsIHRpdGxlKSwg
InBvcG92ZXItZGV0YWlscy10aXRsZSIpOwotICAgIHRpdGxlQ2VsbC5jb2xTcGFuID0gMjsKLSAg
ICB2YXIgdGl0bGVSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHRpdGxl
Um93LmFwcGVuZENoaWxkKHRpdGxlQ2VsbCk7Ci0gICAgdGhpcy5fY29udGVudFRhYmxlLmFwcGVu
ZENoaWxkKHRpdGxlUm93KTsKLX0KLQotV2ViSW5zcGVjdG9yLlBvcG92ZXJDb250ZW50SGVscGVy
LnByb3RvdHlwZSA9IHsKLSAgICBjb250ZW50VGFibGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9jb250ZW50VGFibGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nPX0gc3R5bGVOYW1lCi0gICAgICovCi0gICAgX2NyZWF0ZUNlbGw6IGZ1
bmN0aW9uKGNvbnRlbnQsIHN0eWxlTmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciB0ZXh0ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKLSAgICAgICAgdGV4dC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7Ci0gICAgICAgIHZhciBjZWxsID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAicG9w
b3Zlci1kZXRhaWxzIjsKLSAgICAgICAgaWYgKHN0eWxlTmFtZSkKLSAgICAgICAgICAgIGNlbGwu
Y2xhc3NOYW1lICs9ICIgIiArIHN0eWxlTmFtZTsKLSAgICAgICAgY2VsbC50ZXh0Q29udGVudCA9
IGNvbnRlbnQ7Ci0gICAgICAgIHJldHVybiBjZWxsOwotICAgIH0sCi0KLSAgICBhcHBlbmRUZXh0
Um93OiBmdW5jdGlvbih0aXRsZSwgY29udGVudCkKLSAgICB7Ci0gICAgICAgIHZhciByb3cgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgICAgICByb3cuYXBwZW5kQ2hpbGQodGhp
cy5fY3JlYXRlQ2VsbCh0aXRsZSwgInBvcG92ZXItZGV0YWlscy1yb3ctdGl0bGUiKSk7Ci0gICAg
ICAgIHJvdy5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVDZWxsKGNvbnRlbnQsICJwb3BvdmVyLWRl
dGFpbHMtcm93LWRhdGEiKSk7Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRUYWJsZS5hcHBlbmRDaGls
ZChyb3cpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRpdGxl
U3R5bGUKLSAgICAgKi8KLSAgICBhcHBlbmRFbGVtZW50Um93OiBmdW5jdGlvbih0aXRsZSwgY29u
dGVudCwgdGl0bGVTdHlsZSkKLSAgICB7Ci0gICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJ0ciIpOwotICAgICAgICB2YXIgdGl0bGVDZWxsID0gdGhpcy5fY3JlYXRlQ2Vs
bCh0aXRsZSwgInBvcG92ZXItZGV0YWlscy1yb3ctdGl0bGUiKTsKLSAgICAgICAgaWYgKHRpdGxl
U3R5bGUpCi0gICAgICAgICAgICB0aXRsZUNlbGwuYWRkU3R5bGVDbGFzcyh0aXRsZVN0eWxlKTsK
LSAgICAgICAgcm93LmFwcGVuZENoaWxkKHRpdGxlQ2VsbCk7Ci0gICAgICAgIHZhciBjZWxsID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAi
ZGV0YWlscyI7Ci0gICAgICAgIGNlbGwuYXBwZW5kQ2hpbGQoY29udGVudCk7Ci0gICAgICAgIHJv
dy5hcHBlbmRDaGlsZChjZWxsKTsKLSAgICAgICAgdGhpcy5fY29udGVudFRhYmxlLmFwcGVuZENo
aWxkKHJvdyk7Ci0gICAgfSwKLQotICAgIGFwcGVuZFN0YWNrVHJhY2U6IGZ1bmN0aW9uKHRpdGxl
LCBzdGFja1RyYWNlLCBjYWxsRnJhbWVMaW5raWZpZXIpCi0gICAgewotICAgICAgICB0aGlzLmFw
cGVuZFRleHRSb3coIiIsICIiKTsKLSAgICAgICAgdmFyIGZyYW1lc1RhYmxlID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgidGFibGUiKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFj
a1RyYWNlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZSA9IHN0YWNr
VHJhY2VbaV07Ci0gICAgICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
dHIiKTsKLSAgICAgICAgICAgIHJvdy5jbGFzc05hbWUgPSAiZGV0YWlscyI7Ci0gICAgICAgICAg
ICByb3cuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ2VsbChzdGFja0ZyYW1lLmZ1bmN0aW9uTmFt
ZSA/IHN0YWNrRnJhbWUuZnVuY3Rpb25OYW1lIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5v
bnltb3VzIGZ1bmN0aW9uKSIpLCAiZnVuY3Rpb24tbmFtZSIpKTsKLSAgICAgICAgICAgIHJvdy5h
cHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVDZWxsKCIgQCAiKSk7Ci0gICAgICAgICAgICB2YXIgbGlu
a0NlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICAgICAgdmFyIHVy
bEVsZW1lbnQgPSBjYWxsRnJhbWVMaW5raWZpZXIoc3RhY2tGcmFtZSk7Ci0gICAgICAgICAgICBs
aW5rQ2VsbC5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKLSAgICAgICAgICAgIHJvdy5hcHBlbmRD
aGlsZChsaW5rQ2VsbCk7Ci0gICAgICAgICAgICBmcmFtZXNUYWJsZS5hcHBlbmRDaGlsZChyb3cp
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuYXBwZW5kRWxlbWVudFJvdyh0aXRsZSwgZnJhbWVz
VGFibGUsICJwb3BvdmVyLXN0YWNrdHJhY2UtdGl0bGUiKTsKLSAgICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1ByZXNlbnRhdGlvbkNvbnNvbGVN
ZXNzYWdlSGVscGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QcmVz
ZW50YXRpb25Db25zb2xlTWVzc2FnZUhlbHBlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjU1MzNlZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1ByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlSGVscGVyLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVUlTb3VyY2VDb2RlUHJvdmlkZXJ9IHVpU291cmNlQ29kZVByb3ZpZGVyCi0gKi8KLVdl
Ykluc3BlY3Rvci5QcmVzZW50YXRpb25Db25zb2xlTWVzc2FnZUhlbHBlciA9IGZ1bmN0aW9uKHVp
U291cmNlQ29kZVByb3ZpZGVyKQotewotICAgIC8qKgotICAgICAqIEB0eXBlIHtPYmplY3QuPHN0
cmluZywgQXJyYXkuPFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZT4+fQotICAgICAqLwotICAg
IHRoaXMuX3BlbmRpbmdDb25zb2xlTWVzc2FnZXMgPSB7fTsKLSAgICB0aGlzLl9wcmVzZW50YXRp
b25Db25zb2xlTWVzc2FnZXMgPSBbXTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGVQcm92aWRlciA9
IHVpU291cmNlQ29kZVByb3ZpZGVyOwotCi0gICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ29uc29sZU1vZGVsLkV2ZW50cy5NZXNzYWdlQWRkZWQs
IHRoaXMuX2NvbnNvbGVNZXNzYWdlQWRkZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5jb25z
b2xlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNvbnNvbGVNb2RlbC5FdmVudHMuUmVw
ZWF0Q291bnRVcGRhdGVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzKTsKLSAgICBX
ZWJJbnNwZWN0b3IuY29uc29sZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Db25zb2xl
TW9kZWwuRXZlbnRzLkNvbnNvbGVDbGVhcmVkLCB0aGlzLl9jb25zb2xlQ2xlYXJlZCwgdGhpcyk7
Ci0KLSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5QYXJzZWRTY3JpcHRTb3VyY2UsIHRoaXMuX3Bh
cnNlZFNjcmlwdFNvdXJjZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRmFpbGVk
VG9QYXJzZVNjcmlwdFNvdXJjZSwgdGhpcy5fcGFyc2VkU2NyaXB0U291cmNlLCB0aGlzKTsKLSAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5HbG9iYWxPYmplY3RDbGVhcmVkLCB0aGlzLl9kZWJ1Z2dl
clJlc2V0LCB0aGlzKTsKLX0KLQotV2ViSW5zcGVjdG9yLlByZXNlbnRhdGlvbkNvbnNvbGVNZXNz
YWdlSGVscGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfY29uc29sZU1lc3NhZ2VBZGRlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbWVzc2FnZSA9IC8qKiBAdHlwZSB7V2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIGlmICgh
bWVzc2FnZS51cmwgfHwgIW1lc3NhZ2UuaXNFcnJvck9yV2FybmluZygpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciByYXdMb2NhdGlvbiA9IG1lc3NhZ2UubG9jYXRpb24oKTsK
LSAgICAgICAgaWYgKHJhd0xvY2F0aW9uKQotICAgICAgICAgICAgdGhpcy5fYWRkQ29uc29sZU1l
c3NhZ2VUb1NjcmlwdChtZXNzYWdlLCByYXdMb2NhdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRoaXMuX2FkZFBlbmRpbmdDb25zb2xlTWVzc2FnZShtZXNzYWdlKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2V9IG1l
c3NhZ2UKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9u
fSByYXdMb2NhdGlvbgotICAgICAqLwotICAgIF9hZGRDb25zb2xlTWVzc2FnZVRvU2NyaXB0OiBm
dW5jdGlvbihtZXNzYWdlLCByYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMuX3ByZXNl
bnRhdGlvbkNvbnNvbGVNZXNzYWdlcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuUHJlc2VudGF0aW9u
Q29uc29sZU1lc3NhZ2UobWVzc2FnZSwgcmF3TG9jYXRpb24pKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2V9IG1lc3NhZ2UKLSAg
ICAgKi8KLSAgICBfYWRkUGVuZGluZ0NvbnNvbGVNZXNzYWdlOiBmdW5jdGlvbihtZXNzYWdlKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtZXNzYWdlLnVybCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nQ29uc29sZU1lc3NhZ2VzW21lc3NhZ2UudXJsXSkKLSAg
ICAgICAgICAgIHRoaXMuX3BlbmRpbmdDb25zb2xlTWVzc2FnZXNbbWVzc2FnZS51cmxdID0gW107
Ci0gICAgICAgIHRoaXMuX3BlbmRpbmdDb25zb2xlTWVzc2FnZXNbbWVzc2FnZS51cmxdLnB1c2go
bWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9wYXJzZWRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHNjcmlwdCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVj
dG9yLlNjcmlwdH0gKi8gKGV2ZW50LmRhdGEpOwotCi0gICAgICAgIHZhciBtZXNzYWdlcyA9IHRo
aXMuX3BlbmRpbmdDb25zb2xlTWVzc2FnZXNbc2NyaXB0LnNvdXJjZVVSTF07Ci0gICAgICAgIGlm
ICghbWVzc2FnZXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHBlbmRpbmdN
ZXNzYWdlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldOwotICAgICAg
ICAgICAgdmFyIHJhd0xvY2F0aW9uID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJN
b2RlbC5Mb2NhdGlvbn0gKi8gKG1lc3NhZ2UubG9jYXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAo
c2NyaXB0LnNjcmlwdElkID09PSByYXdMb2NhdGlvbi5zY3JpcHRJZCkKLSAgICAgICAgICAgICAg
ICB0aGlzLl9hZGRDb25zb2xlTWVzc2FnZVRvU2NyaXB0KG1lc3NhZ2UsIHJhd0xvY2F0aW9uKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwZW5kaW5nTWVzc2FnZXMucHVzaCht
ZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwZW5kaW5nTWVzc2FnZXMubGVuZ3Ro
KQotICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NvbnNvbGVNZXNzYWdlc1tzY3JpcHQuc291cmNl
VVJMXSA9IHBlbmRpbmdNZXNzYWdlczsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX3BlbmRpbmdDb25zb2xlTWVzc2FnZXNbc2NyaXB0LnNvdXJjZVVSTF07Ci0gICAgfSwK
LQotICAgIF9jb25zb2xlQ2xlYXJlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
cGVuZGluZ0NvbnNvbGVNZXNzYWdlcyA9IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX3ByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlcy5sZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIHRoaXMuX3ByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlc1tpXS5kaXNwb3NlKCk7Ci0gICAg
ICAgIHRoaXMuX3ByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlcyA9IFtdOwotICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlcyA9IHRoaXMuX3VpU291cmNlQ29kZVByb3ZpZGVyLnVpU291cmNlQ29kZXMo
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aVNvdXJjZUNvZGVzLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdWlTb3VyY2VDb2Rlc1tpXS5jb25zb2xlTWVzc2FnZXNDbGVhcmVkKCk7
Ci0gICAgfSwKLQotICAgIF9kZWJ1Z2dlclJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9wZW5kaW5nQ29uc29sZU1lc3NhZ2VzID0ge307Ci0gICAgICAgIHRoaXMuX3ByZXNl
bnRhdGlvbkNvbnNvbGVNZXNzYWdlcyA9IFtdOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfSBtZXNzYWdlCi0g
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufSByYXdMb2NhdGlv
bgotICovCi1XZWJJbnNwZWN0b3IuUHJlc2VudGF0aW9uQ29uc29sZU1lc3NhZ2UgPSBmdW5jdGlv
bihtZXNzYWdlLCByYXdMb2NhdGlvbikKLXsKLSAgICB0aGlzLm9yaWdpbmFsTWVzc2FnZSA9IG1l
c3NhZ2U7Ci0gICAgdGhpcy5fbGl2ZUxvY2F0aW9uID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuY3JlYXRlTGl2ZUxvY2F0aW9uKHJhd0xvY2F0aW9uLCB0aGlzLl91cGRhdGVMb2NhdGlvbi5i
aW5kKHRoaXMpKTsKLX0KLQotV2ViSW5zcGVjdG9yLlByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdl
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSUxv
Y2F0aW9ufSB1aUxvY2F0aW9uCi0gICAgICovCi0gICAgX3VwZGF0ZUxvY2F0aW9uOiBmdW5jdGlv
bih1aUxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3VpTG9jYXRpb24pCi0gICAg
ICAgICAgICB0aGlzLl91aUxvY2F0aW9uLnVpU291cmNlQ29kZS5jb25zb2xlTWVzc2FnZVJlbW92
ZWQodGhpcyk7Ci0gICAgICAgIHRoaXMuX3VpTG9jYXRpb24gPSB1aUxvY2F0aW9uOwotICAgICAg
ICB0aGlzLl91aUxvY2F0aW9uLnVpU291cmNlQ29kZS5jb25zb2xlTWVzc2FnZUFkZGVkKHRoaXMp
OwotICAgIH0sCi0KLSAgICBnZXQgbGluZU51bWJlcigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fdWlMb2NhdGlvbi5saW5lTnVtYmVyOwotICAgIH0sCi0KLSAgICBkaXNwb3NlOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9saXZlTG9jYXRpb24uZGlzcG9zZSgpOwotICAg
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJv
ZmlsZURhdGFHcmlkVHJlZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UHJvZmlsZURhdGFHcmlkVHJlZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJj
YWUxNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1By
b2ZpbGVEYXRhR3JpZFRyZWUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSAyODAgTm9ydGggSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9Ci0gKiBA
cGFyYW0geyFQcm9maWxlckFnZW50LkNQVVByb2ZpbGVOb2RlfSBwcm9maWxlTm9kZQotICogQHBh
cmFtIHshV2ViSW5zcGVjdG9yLlRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlfSBvd25pbmdUcmVl
Ci0gKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0NoaWxkcmVuCi0gKi8KLVdlYkluc3BlY3Rvci5Qcm9m
aWxlRGF0YUdyaWROb2RlID0gZnVuY3Rpb24ocHJvZmlsZU5vZGUsIG93bmluZ1RyZWUsIGhhc0No
aWxkcmVuKQotewotICAgIHRoaXMucHJvZmlsZU5vZGUgPSBwcm9maWxlTm9kZTsKLQotICAgIFdl
Ykluc3BlY3Rvci5EYXRhR3JpZE5vZGUuY2FsbCh0aGlzLCBudWxsLCBoYXNDaGlsZHJlbik7Ci0K
LSAgICB0aGlzLnRyZWUgPSBvd25pbmdUcmVlOwotCi0gICAgdGhpcy5jaGlsZHJlbkJ5Q2FsbFVJ
RCA9IHt9OwotICAgIHRoaXMubGFzdENvbXBhcmF0b3IgPSBudWxsOwotCi0gICAgdGhpcy5jYWxs
VUlEID0gcHJvZmlsZU5vZGUuY2FsbFVJRDsKLSAgICB0aGlzLnNlbGZUaW1lID0gcHJvZmlsZU5v
ZGUuc2VsZlRpbWU7Ci0gICAgdGhpcy50b3RhbFRpbWUgPSBwcm9maWxlTm9kZS50b3RhbFRpbWU7
Ci0gICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBwcm9maWxlTm9kZS5mdW5jdGlvbk5hbWU7Ci0gICAg
dGhpcy5udW1iZXJPZkNhbGxzID0gcHJvZmlsZU5vZGUubnVtYmVyT2ZDYWxsczsKLSAgICB0aGlz
LnVybCA9IHByb2ZpbGVOb2RlLnVybDsKLX0KLQotV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3Jp
ZE5vZGUucHJvdG90eXBlID0gewotICAgIGdldCBkYXRhKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0
aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyh0aW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
Q2FwYWJpbGl0aWVzLnNhbXBsaW5nQ1BVUHJvZmlsZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4wZlx1MjAwOW1zIiwgdGltZSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4z
Zlx1MjAwOW1zIiwgdGltZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZGF0YSA9IHt9Owot
Ci0gICAgICAgIGRhdGFbImZ1bmN0aW9uIl0gPSB0aGlzLmZ1bmN0aW9uTmFtZTsKLSAgICAgICAg
ZGF0YVsiY2FsbHMiXSA9IHRoaXMubnVtYmVyT2ZDYWxsczsKLQotICAgICAgICBpZiAodGhpcy50
cmVlLnByb2ZpbGVWaWV3LnNob3dTZWxmVGltZUFzUGVyY2VudC5nZXQoKSkKLSAgICAgICAgICAg
IGRhdGFbInNlbGYiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUiLCB0aGlzLnNlbGZQ
ZXJjZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YVsic2VsZiJdID0gZm9ybWF0
TWlsbGlzZWNvbmRzKHRoaXMuc2VsZlRpbWUpOwotCi0gICAgICAgIGlmICh0aGlzLnRyZWUucHJv
ZmlsZVZpZXcuc2hvd1RvdGFsVGltZUFzUGVyY2VudC5nZXQoKSkKLSAgICAgICAgICAgIGRhdGFb
InRvdGFsIl0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmYlIiwgdGhpcy50b3RhbFBlcmNl
bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhWyJ0b3RhbCJdID0gZm9ybWF0TWls
bGlzZWNvbmRzKHRoaXMudG90YWxUaW1lKTsKLQotICAgICAgICBpZiAodGhpcy50cmVlLnByb2Zp
bGVWaWV3LnNob3dBdmVyYWdlVGltZUFzUGVyY2VudC5nZXQoKSkKLSAgICAgICAgICAgIGRhdGFb
ImF2ZXJhZ2UiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUiLCB0aGlzLmF2ZXJhZ2VQ
ZXJjZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YVsiYXZlcmFnZSJdID0gZm9y
bWF0TWlsbGlzZWNvbmRzKHRoaXMuYXZlcmFnZVRpbWUpOwotCi0gICAgICAgIHJldHVybiBkYXRh
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gY29sdW1uSWRlbnRpZmllcgotICAgICAqIEByZXR1cm4geyFFbGVtZW50fQotICAgICAq
LwotICAgIGNyZWF0ZUNlbGw6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIpCi0gICAgewotICAg
ICAgICB2YXIgY2VsbCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0
ZUNlbGwuY2FsbCh0aGlzLCBjb2x1bW5JZGVudGlmaWVyKTsKLQotICAgICAgICBpZiAoY29sdW1u
SWRlbnRpZmllciA9PT0gInNlbGYiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRTZWxmQ29sdW1uKQot
ICAgICAgICAgICAgY2VsbC5hZGRTdHlsZUNsYXNzKCJoaWdobGlnaHQiKTsKLSAgICAgICAgZWxz
ZSBpZiAoY29sdW1uSWRlbnRpZmllciA9PT0gInRvdGFsIiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVk
VG90YWxDb2x1bW4pCi0gICAgICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIp
OwotICAgICAgICBlbHNlIGlmIChjb2x1bW5JZGVudGlmaWVyID09PSAiYXZlcmFnZSIgJiYgdGhp
cy5fc2VhcmNoTWF0Y2hlZEF2ZXJhZ2VDb2x1bW4pCi0gICAgICAgICAgICBjZWxsLmFkZFN0eWxl
Q2xhc3MoImhpZ2hsaWdodCIpOwotICAgICAgICBlbHNlIGlmIChjb2x1bW5JZGVudGlmaWVyID09
PSAiY2FsbHMiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRDYWxsc0NvbHVtbikKLSAgICAgICAgICAg
IGNlbGwuYWRkU3R5bGVDbGFzcygiaGlnaGxpZ2h0Iik7Ci0KLSAgICAgICAgaWYgKGNvbHVtbklk
ZW50aWZpZXIgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICByZXR1cm4gY2VsbDsKLQotICAg
ICAgICBpZiAodGhpcy5wcm9maWxlTm9kZS5fc2VhcmNoTWF0Y2hlZEZ1bmN0aW9uQ29sdW1uKQot
ICAgICAgICAgICAgY2VsbC5hZGRTdHlsZUNsYXNzKCJoaWdobGlnaHQiKTsKLQotICAgICAgICBp
ZiAodGhpcy5wcm9maWxlTm9kZS51cmwpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FKDYyNzI1KTog
cHJvZmlsZU5vZGUgc2hvdWxkIHJlZmVyZW5jZSBhIGRlYnVnZ2VyIGxvY2F0aW9uLgotICAgICAg
ICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLnByb2ZpbGVOb2RlLmxpbmVOdW1iZXIgPyB0aGlz
LnByb2ZpbGVOb2RlLmxpbmVOdW1iZXIgLSAxIDogMDsKLSAgICAgICAgICAgIHZhciB1cmxFbGVt
ZW50ID0gdGhpcy50cmVlLnByb2ZpbGVWaWV3Ll9saW5raWZpZXIubGlua2lmeUxvY2F0aW9uKHRo
aXMucHJvZmlsZU5vZGUudXJsLCBsaW5lTnVtYmVyLCAwLCAicHJvZmlsZS1ub2RlLWZpbGUiKTsK
LSAgICAgICAgICAgIHVybEVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSAiNzUlIjsKLSAgICAgICAg
ICAgIGNlbGwuaW5zZXJ0QmVmb3JlKHVybEVsZW1lbnQsIGNlbGwuZmlyc3RDaGlsZCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICB9LAotCi0gICAgc2VsZWN0OiBmdW5j
dGlvbihzdXByZXNzU2VsZWN0ZWRFdmVudCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5E
YXRhR3JpZE5vZGUucHJvdG90eXBlLnNlbGVjdC5jYWxsKHRoaXMsIHN1cHJlc3NTZWxlY3RlZEV2
ZW50KTsKLSAgICAgICAgdGhpcy50cmVlLnByb2ZpbGVWaWV3Ll9kYXRhR3JpZE5vZGVTZWxlY3Rl
ZCh0aGlzKTsKLSAgICB9LAotCi0gICAgZGVzZWxlY3Q6IGZ1bmN0aW9uKHN1cHJlc3NEZXNlbGVj
dGVkRXZlbnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3Rv
dHlwZS5kZXNlbGVjdC5jYWxsKHRoaXMsIHN1cHJlc3NEZXNlbGVjdGVkRXZlbnQpOwotICAgICAg
ICB0aGlzLnRyZWUucHJvZmlsZVZpZXcuX2RhdGFHcmlkTm9kZURlc2VsZWN0ZWQodGhpcyk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oT2JqZWN0LCBPYmplY3Qp
fSBjb21wYXJhdG9yCi0gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZQotICAgICAqLwotICAg
IHNvcnQ6IGZ1bmN0aW9uKGNvbXBhcmF0b3IsIGZvcmNlKQotICAgIHsKLSAgICAgICAgdmFyIGdy
aWROb2RlR3JvdXBzID0gW1t0aGlzXV07Ci0KLSAgICAgICAgZm9yICh2YXIgZ3JpZE5vZGVHcm91
cEluZGV4ID0gMDsgZ3JpZE5vZGVHcm91cEluZGV4IDwgZ3JpZE5vZGVHcm91cHMubGVuZ3RoOyAr
K2dyaWROb2RlR3JvdXBJbmRleCkgewotICAgICAgICAgICAgdmFyIGdyaWROb2RlcyA9IGdyaWRO
b2RlR3JvdXBzW2dyaWROb2RlR3JvdXBJbmRleF07Ci0gICAgICAgICAgICB2YXIgY291bnQgPSBn
cmlkTm9kZXMubGVuZ3RoOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4
IDwgY291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgZ3JpZE5vZGUgPSBncmlk
Tm9kZXNbaW5kZXhdOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdyaWQgbm9kZSBpcyBj
b2xsYXBzZWQsIHRoZW4gZG9uJ3Qgc29ydCBjaGlsZHJlbiAoc2F2ZSBvcGVyYXRpb24gZm9yIGxh
dGVyKS4KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZ3JpZCBub2RlIGhhcyB0aGUgc2FtZSBz
b3J0aW5nIGFzIHByZXZpb3VzbHksIHRoZW4gdGhlcmUgaXMgbm8gcG9pbnQgaW4gc29ydGluZyBp
dCBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBpZiAoIWZvcmNlICYmICghZ3JpZE5vZGUuZXhwYW5k
ZWQgfHwgZ3JpZE5vZGUubGFzdENvbXBhcmF0b3IgPT09IGNvbXBhcmF0b3IpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChncmlkTm9kZS5jaGlsZHJlbi5sZW5ndGgpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBncmlkTm9kZS5zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBncmlkTm9kZS5sYXN0Q29tcGFyYXRvciA9IGNvbXBhcmF0b3I7Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgY2hpbGRyZW4gPSBncmlkTm9kZS5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICB2
YXIgY2hpbGRDb3VudCA9IGNoaWxkcmVuLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGlmIChj
aGlsZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNvcnQoY29tcGFyYXRv
cik7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hpbGRJbmRleCA9IDA7IGNoaWxk
SW5kZXggPCBjaGlsZENvdW50OyArK2NoaWxkSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjaGlsZHJlbltjaGlsZEluZGV4XS5fcmVjYWxjdWxhdGVTaWJsaW5ncyhjaGlsZEluZGV4KTsK
LQotICAgICAgICAgICAgICAgICAgICBncmlkTm9kZUdyb3Vwcy5wdXNoKGNoaWxkcmVuKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZE5vZGV9IHBy
b2ZpbGVEYXRhR3JpZE5vZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKi8K
LSAgICBpbnNlcnRDaGlsZDogZnVuY3Rpb24ocHJvZmlsZURhdGFHcmlkTm9kZSwgaW5kZXgpCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5pbnNlcnRD
aGlsZC5jYWxsKHRoaXMsIHByb2ZpbGVEYXRhR3JpZE5vZGUsIGluZGV4KTsKLQotICAgICAgICB0
aGlzLmNoaWxkcmVuQnlDYWxsVUlEW3Byb2ZpbGVEYXRhR3JpZE5vZGUuY2FsbFVJRF0gPSBwcm9m
aWxlRGF0YUdyaWROb2RlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFXZWJJ
bnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZX0gcHJvZmlsZURhdGFHcmlkTm9kZQotICAgICAq
LwotICAgIHJlbW92ZUNoaWxkOiBmdW5jdGlvbihwcm9maWxlRGF0YUdyaWROb2RlKQotICAgIHsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQu
Y2FsbCh0aGlzLCBwcm9maWxlRGF0YUdyaWROb2RlKTsKLQotICAgICAgICBkZWxldGUgdGhpcy5j
aGlsZHJlbkJ5Q2FsbFVJRFtwcm9maWxlRGF0YUdyaWROb2RlLmNhbGxVSURdOwotICAgIH0sCi0K
LSAgICByZW1vdmVDaGlsZHJlbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4uY2FsbCh0aGlzKTsKLQot
ICAgICAgICB0aGlzLmNoaWxkcmVuQnlDYWxsVUlEID0ge307Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlfSBub2RlCi0g
ICAgICovCi0gICAgZmluZENoaWxkOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgaWYg
KCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiB0aGlzLmNo
aWxkcmVuQnlDYWxsVUlEW25vZGUuY2FsbFVJRF07Ci0gICAgfSwKLQotICAgIGdldCBhdmVyYWdl
VGltZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5zZWxmVGltZSAvIE1hdGgubWF4KDEs
IHRoaXMubnVtYmVyT2ZDYWxscyk7Ci0gICAgfSwKLQotICAgIGdldCBhdmVyYWdlUGVyY2VudCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5hdmVyYWdlVGltZSAvIHRoaXMudHJlZS50b3Rh
bFRpbWUgKiAxMDAuMDsKLSAgICB9LAotCi0gICAgZ2V0IHNlbGZQZXJjZW50KCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLnNlbGZUaW1lIC8gdGhpcy50cmVlLnRvdGFsVGltZSAqIDEwMC4w
OwotICAgIH0sCi0KLSAgICBnZXQgdG90YWxQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLnRvdGFsVGltZSAvIHRoaXMudHJlZS50b3RhbFRpbWUgKiAxMDAuMDsKLSAgICB9LAot
Ci0gICAgZ2V0IF9wYXJlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICE9
PSB0aGlzLmRhdGFHcmlkID8gdGhpcy5wYXJlbnQgOiB0aGlzLnRyZWU7Ci0gICAgfSwKLQotICAg
IHBvcHVsYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcG9wdWxhdGVk
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9wb3B1bGF0ZWQgPSB0cnVlOwot
Ci0gICAgICAgIHRoaXMuX3NoYXJlZFBvcHVsYXRlKCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3Bh
cmVudCkgewotICAgICAgICAgICAgdmFyIGN1cnJlbnRDb21wYXJhdG9yID0gdGhpcy5fcGFyZW50
Lmxhc3RDb21wYXJhdG9yOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudENvbXBhcmF0b3IpCi0g
ICAgICAgICAgICAgICAgdGhpcy5zb3J0KGN1cnJlbnRDb21wYXJhdG9yLCB0cnVlKTsKLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICAvLyBXaGVuIGZvY3VzaW5nIGFuZCBjb2xsYXBzaW5nIHdlIG1v
ZGlmeSBsb3RzIG9mIG5vZGVzIGluIHRoZSB0cmVlLgotICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRv
IHJlc3RvcmUgdGhlbSBhbGwgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUgd2hlbiB3ZSByZXZlcnQu
Ci0gICAgX3NhdmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zYXZlZENo
aWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3NhdmVkU2VsZlRp
bWUgPSB0aGlzLnNlbGZUaW1lOwotICAgICAgICB0aGlzLl9zYXZlZFRvdGFsVGltZSA9IHRoaXMu
dG90YWxUaW1lOwotICAgICAgICB0aGlzLl9zYXZlZE51bWJlck9mQ2FsbHMgPSB0aGlzLm51bWJl
ck9mQ2FsbHM7Ci0KLSAgICAgICAgdGhpcy5fc2F2ZWRDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4u
c2xpY2UoKTsKLSAgICB9LAotCi0gICAgLy8gV2hlbiBmb2N1c2luZyBhbmQgY29sbGFwc2luZyB3
ZSBtb2RpZnkgbG90cyBvZiBub2RlcyBpbiB0aGUgdHJlZS4KLSAgICAvLyBUaGlzIGFsbG93cyB1
cyB0byByZXN0b3JlIHRoZW0gYWxsIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlIHdoZW4gd2UgcmV2
ZXJ0LgotICAgIF9yZXN0b3JlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X3NhdmVkQ2hpbGRyZW4pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5zZWxm
VGltZSA9IHRoaXMuX3NhdmVkU2VsZlRpbWU7Ci0gICAgICAgIHRoaXMudG90YWxUaW1lID0gdGhp
cy5fc2F2ZWRUb3RhbFRpbWU7Ci0gICAgICAgIHRoaXMubnVtYmVyT2ZDYWxscyA9IHRoaXMuX3Nh
dmVkTnVtYmVyT2ZDYWxsczsKLQotICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAg
ICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fc2F2ZWRDaGlsZHJlbjsKLSAgICAgICAgdmFyIGNv
dW50ID0gY2hpbGRyZW4ubGVuZ3RoOwotCi0gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBjb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgY2hpbGRyZW5baW5kZXhdLl9yZXN0
b3JlKCk7Ci0gICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgX21lcmdlOiBmdW5jdGlvbihjaGlsZCwgc2hvdWxkQWJz
b3JiKQotICAgIHsKLSAgICAgICAgdGhpcy5zZWxmVGltZSArPSBjaGlsZC5zZWxmVGltZTsKLQot
ICAgICAgICBpZiAoIXNob3VsZEFic29yYikgewotICAgICAgICAgICAgdGhpcy50b3RhbFRpbWUg
Kz0gY2hpbGQudG90YWxUaW1lOwotICAgICAgICAgICAgdGhpcy5udW1iZXJPZkNhbGxzICs9IGNo
aWxkLm51bWJlck9mQ2FsbHM7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0
aGlzLmNoaWxkcmVuLnNsaWNlKCk7Ci0KLSAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwot
Ci0gICAgICAgIHZhciBjb3VudCA9IGNoaWxkcmVuLmxlbmd0aDsKLQotICAgICAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmICgh
c2hvdWxkQWJzb3JiIHx8IGNoaWxkcmVuW2luZGV4XSAhPT0gY2hpbGQpCi0gICAgICAgICAgICAg
ICAgdGhpcy5hcHBlbmRDaGlsZChjaGlsZHJlbltpbmRleF0pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2hpbGRyZW4gPSBjaGlsZC5jaGlsZHJlbi5zbGljZSgpOwotICAgICAgICBjb3VudCA9IGNo
aWxkcmVuLmxlbmd0aDsKLQotICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY291
bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIHZhciBvcnBoYW5lZENoaWxkID0gY2hpbGRyZW5b
aW5kZXhdLAotICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGQgPSB0aGlzLmNoaWxkcmVuQnlD
YWxsVUlEW29ycGhhbmVkQ2hpbGQuY2FsbFVJRF07Ci0KLSAgICAgICAgICAgIGlmIChleGlzdGlu
Z0NoaWxkKQotICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGQuX21lcmdlKG9ycGhhbmVkQ2hp
bGQsIGZhbHNlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGVu
ZENoaWxkKG9ycGhhbmVkQ2hpbGQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9f
XzogV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3fSBwcm9maWxl
VmlldwotICogQHBhcmFtIHtQcm9maWxlckFnZW50LkNQVVByb2ZpbGVOb2RlfSByb290UHJvZmls
ZU5vZGUKLSAqLwotV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZFRyZWUgPSBmdW5jdGlvbihw
cm9maWxlVmlldywgcm9vdFByb2ZpbGVOb2RlKQotewotICAgIHRoaXMudHJlZSA9IHRoaXM7Ci0g
ICAgdGhpcy5jaGlsZHJlbiA9IFtdOwotCi0gICAgdGhpcy5wcm9maWxlVmlldyA9IHByb2ZpbGVW
aWV3OwotCi0gICAgdGhpcy50b3RhbFRpbWUgPSByb290UHJvZmlsZU5vZGUudG90YWxUaW1lOwot
ICAgIHRoaXMubGFzdENvbXBhcmF0b3IgPSBudWxsOwotCi0gICAgdGhpcy5jaGlsZHJlbkJ5Q2Fs
bFVJRCA9IHt9OwotfQotCi1XZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkVHJlZS5wcm90b3R5
cGUgPSB7Ci0gICAgZ2V0IGV4cGFuZGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0sCi0KLSAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpCi0gICAgewotICAgICAg
ICB0aGlzLmluc2VydENoaWxkKGNoaWxkLCB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7Ci0gICAgfSwK
LQotICAgIGluc2VydENoaWxkOiBmdW5jdGlvbihjaGlsZCwgaW5kZXgpCi0gICAgewotICAgICAg
ICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOwotICAgICAgICB0aGlzLmNo
aWxkcmVuQnlDYWxsVUlEW2NoaWxkLmNhbGxVSURdID0gY2hpbGQ7Ci0gICAgfSwKLQotICAgIHJl
bW92ZUNoaWxkcmVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNoaWxkcmVuID0g
W107Ci0gICAgICAgIHRoaXMuY2hpbGRyZW5CeUNhbGxVSUQgPSB7fTsKLSAgICB9LAotCi0gICAg
ZmluZENoaWxkOiBXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZS5wcm90b3R5cGUuZmlu
ZENoaWxkLAotICAgIHNvcnQ6IFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLnByb3Rv
dHlwZS5zb3J0LAotCi0gICAgX3NhdmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9zYXZlZENoaWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
X3NhdmVkVG90YWxUaW1lID0gdGhpcy50b3RhbFRpbWU7Ci0gICAgICAgIHRoaXMuX3NhdmVkQ2hp
bGRyZW4gPSB0aGlzLmNoaWxkcmVuLnNsaWNlKCk7Ci0gICAgfSwKLQotICAgIHJlc3RvcmU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2F2ZWRDaGlsZHJlbikKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmNoaWxkcmVuID0gdGhpcy5fc2F2ZWRDaGls
ZHJlbjsKLSAgICAgICAgdGhpcy50b3RhbFRpbWUgPSB0aGlzLl9zYXZlZFRvdGFsVGltZTsKLQot
ICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOwotICAgICAgICB2YXIgY291bnQg
PSBjaGlsZHJlbi5sZW5ndGg7Ci0KLSAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGNvdW50OyArK2luZGV4KQotICAgICAgICAgICAgY2hpbGRyZW5baW5kZXhdLl9yZXN0b3JlKCk7
Ci0KLSAgICAgICAgdGhpcy5fc2F2ZWRDaGlsZHJlbiA9IG51bGw7Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkVHJlZS5wcm9wZXJ0eUNvbXBhcmF0b3JzID0gW3t9LCB7
fV07Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5Ci0gKiBAcGFyYW0ge2Jvb2xl
YW59IGlzQXNjZW5kaW5nCi0gKiBAcmV0dXJuIHtmdW5jdGlvbihPYmplY3QsIE9iamVjdCl9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWRUcmVlLnByb3BlcnR5Q29tcGFyYXRvciA9
IGZ1bmN0aW9uKHByb3BlcnR5LCBpc0FzY2VuZGluZykKLXsKLSAgICB2YXIgY29tcGFyYXRvciA9
IFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWRUcmVlLnByb3BlcnR5Q29tcGFyYXRvcnNbKGlz
QXNjZW5kaW5nID8gMSA6IDApXVtwcm9wZXJ0eV07Ci0KLSAgICBpZiAoIWNvbXBhcmF0b3IpIHsK
LSAgICAgICAgaWYgKGlzQXNjZW5kaW5nKSB7Ci0gICAgICAgICAgICBjb21wYXJhdG9yID0gZnVu
Y3Rpb24obGhzLCByaHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxoc1tw
cm9wZXJ0eV0gPCByaHNbcHJvcGVydHldKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7
Ci0KLSAgICAgICAgICAgICAgICBpZiAobGhzW3Byb3BlcnR5XSA+IHJoc1twcm9wZXJ0eV0pCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb21wYXJhdG9y
ID0gZnVuY3Rpb24obGhzLCByaHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KGxoc1twcm9wZXJ0eV0gPiByaHNbcHJvcGVydHldKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gLTE7Ci0KLSAgICAgICAgICAgICAgICBpZiAobGhzW3Byb3BlcnR5XSA8IHJoc1twcm9wZXJ0
eV0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3Iu
UHJvZmlsZURhdGFHcmlkVHJlZS5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEg
OiAwKV1bcHJvcGVydHldID0gY29tcGFyYXRvcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29tcGFy
YXRvcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UHJvZmlsZUxhdW5jaGVyVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUHJvZmlsZUxhdW5jaGVyVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWYzMDFhYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1Byb2ZpbGVMYXVuY2hlclZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBA
cGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICovCi1X
ZWJJbnNwZWN0b3IuUHJvZmlsZUxhdW5jaGVyVmlldyA9IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX3BhbmVs
ID0gcHJvZmlsZXNQYW5lbDsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJwcm9m
aWxlLWxhdW5jaGVyLXZpZXciKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygicGFu
ZWwtZW5hYmxlci12aWV3Iik7Ci0KLSAgICB0aGlzLl9jb250ZW50RWxlbWVudCA9IHRoaXMuZWxl
bWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInByb2ZpbGUtbGF1bmNoZXItdmlldy1jb250ZW50Iik7
Ci0gICAgdGhpcy5faW5uZXJDb250ZW50RWxlbWVudCA9IHRoaXMuX2NvbnRlbnRFbGVtZW50LmNy
ZWF0ZUNoaWxkKCJkaXYiKTsKLQotICAgIHRoaXMuX2NvbnRyb2xCdXR0b24gPSB0aGlzLl9jb250
ZW50RWxlbWVudC5jcmVhdGVDaGlsZCgiYnV0dG9uIiwgImNvbnRyb2wtcHJvZmlsaW5nIik7Ci0g
ICAgdGhpcy5fY29udHJvbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2Nv
bnRyb2xCdXR0b25DbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKLX0KLQotV2ViSW5zcGVjdG9y
LlByb2ZpbGVMYXVuY2hlclZpZXcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfSBwcm9maWxlVHlwZQotICAgICAqLwotICAgIGFk
ZFByb2ZpbGVUeXBlOiBmdW5jdGlvbihwcm9maWxlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZhciBk
ZXNjcmlwdGlvbkVsZW1lbnQgPSB0aGlzLl9pbm5lckNvbnRlbnRFbGVtZW50LmNyZWF0ZUNoaWxk
KCJoMSIpOwotICAgICAgICBkZXNjcmlwdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9maWxl
VHlwZS5kZXNjcmlwdGlvbjsKLSAgICAgICAgdmFyIGRlY29yYXRpb25FbGVtZW50ID0gcHJvZmls
ZVR5cGUuZGVjb3JhdGlvbkVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGRlY29yYXRpb25FbGVtZW50
KQotICAgICAgICAgICAgdGhpcy5faW5uZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChkZWNv
cmF0aW9uRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2lzSW5zdGFudFByb2ZpbGUgPSBwcm9maWxl
VHlwZS5pc0luc3RhbnRQcm9maWxlKCk7Ci0gICAgfSwKLQotICAgIF9jb250cm9sQnV0dG9uQ2xp
Y2tlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFuZWwudG9nZ2xlUmVjb3Jk
QnV0dG9uKCk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVDb250cm9sczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX2lzSW5zdGFudFByb2ZpbGUpIHsKLSAgICAgICAgICAgIHRo
aXMuX2NvbnRyb2xCdXR0b24ucmVtb3ZlU3R5bGVDbGFzcygicnVubmluZyIpOwotICAgICAgICAg
ICAgdGhpcy5fY29udHJvbEJ1dHRvbi50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiVGFrZSBTbmFwc2hvdCIpOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJvZmlsaW5n
KSB7Ci0gICAgICAgICAgICB0aGlzLl9jb250cm9sQnV0dG9uLmFkZFN0eWxlQ2xhc3MoInJ1bm5p
bmciKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xCdXR0b24udGV4dENvbnRlbnQgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlN0b3AiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHRoaXMuX2NvbnRyb2xCdXR0b24ucmVtb3ZlU3R5bGVDbGFzcygicnVubmluZyIpOwotICAgICAg
ICAgICAgdGhpcy5fY29udHJvbEJ1dHRvbi50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiU3RhcnQiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBwcm9maWxlU3RhcnRlZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faXNQcm9maWxpbmcgPSB0cnVlOwotICAg
ICAgICB0aGlzLl91cGRhdGVDb250cm9scygpOwotICAgIH0sCi0KLSAgICBwcm9maWxlRmluaXNo
ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lzUHJvZmlsaW5nID0gZmFsc2U7
Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xzKCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9f
XzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUxhdW5jaGVyVmlld30KLSAqIEBw
YXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gKi8KLVdl
Ykluc3BlY3Rvci5NdWx0aVByb2ZpbGVMYXVuY2hlclZpZXcgPSBmdW5jdGlvbihwcm9maWxlc1Bh
bmVsKQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlTGF1bmNoZXJWaWV3LmNhbGwodGhpcywg
cHJvZmlsZXNQYW5lbCk7Ci0KLSAgICB2YXIgaGVhZGVyID0gdGhpcy5faW5uZXJDb250ZW50RWxl
bWVudC5jcmVhdGVDaGlsZCgiaDEiKTsKLSAgICBoZWFkZXIudGV4dENvbnRlbnQgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlNlbGVjdCBwcm9maWxpbmcgdHlwZSIpOwotCi0gICAgdGhpcy5fcHJv
ZmlsZVR5cGVTZWxlY3RvckZvcm0gPSB0aGlzLl9pbm5lckNvbnRlbnRFbGVtZW50LmNyZWF0ZUNo
aWxkKCJmb3JtIik7Ci0KLSAgICB0aGlzLl9pbm5lckNvbnRlbnRFbGVtZW50LmNyZWF0ZUNoaWxk
KCJkaXYiLCAiZmxleGlibGUtc3BhY2UiKTsKLX0KLQotV2ViSW5zcGVjdG9yLk11bHRpUHJvZmls
ZUxhdW5jaGVyVmlldy5FdmVudFR5cGVzID0gewotICAgIFByb2ZpbGVUeXBlU2VsZWN0ZWQ6ICJw
cm9maWxlLXR5cGUtc2VsZWN0ZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5NdWx0aVByb2ZpbGVMYXVu
Y2hlclZpZXcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfSBwcm9maWxlVHlwZQotICAgICAqLwot
ICAgIGFkZFByb2ZpbGVUeXBlOiBmdW5jdGlvbihwcm9maWxlVHlwZSkKLSAgICB7Ci0gICAgICAg
IHZhciBjaGVja2VkID0gIXRoaXMuX3Byb2ZpbGVUeXBlU2VsZWN0b3JGb3JtLmNoaWxkcmVuLmxl
bmd0aDsKLSAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IHRoaXMuX3Byb2ZpbGVUeXBlU2VsZWN0
b3JGb3JtLmNyZWF0ZUNoaWxkKCJsYWJlbCIpOwotICAgICAgICBsYWJlbEVsZW1lbnQudGV4dENv
bnRlbnQgPSBwcm9maWxlVHlwZS5uYW1lOwotICAgICAgICB2YXIgb3B0aW9uRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGxhYmVsRWxlbWVudC5pbnNl
cnRCZWZvcmUob3B0aW9uRWxlbWVudCwgbGFiZWxFbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgICAg
ICBvcHRpb25FbGVtZW50LnR5cGUgPSAicmFkaW8iOwotICAgICAgICBvcHRpb25FbGVtZW50Lm5h
bWUgPSAicHJvZmlsZS10eXBlIjsKLSAgICAgICAgb3B0aW9uRWxlbWVudC5zdHlsZS5oaWRkZW4g
PSB0cnVlOwotICAgICAgICBpZiAoY2hlY2tlZCkgewotICAgICAgICAgICAgb3B0aW9uRWxlbWVu
dC5jaGVja2VkID0gY2hlY2tlZDsKLSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdlYkluc3BlY3Rvci5NdWx0aVByb2ZpbGVMYXVuY2hlclZpZXcuRXZlbnRUeXBlcy5Q
cm9maWxlVHlwZVNlbGVjdGVkLCBwcm9maWxlVHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgb3B0
aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9wcm9maWxlVHlwZUNo
YW5nZWQuYmluZCh0aGlzLCBwcm9maWxlVHlwZSksIGZhbHNlKTsKLSAgICAgICAgdmFyIGRlc2Ny
aXB0aW9uRWxlbWVudCA9IGxhYmVsRWxlbWVudC5jcmVhdGVDaGlsZCgicCIpOwotICAgICAgICBk
ZXNjcmlwdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9maWxlVHlwZS5kZXNjcmlwdGlvbjsK
LSAgICAgICAgdmFyIGRlY29yYXRpb25FbGVtZW50ID0gcHJvZmlsZVR5cGUuZGVjb3JhdGlvbkVs
ZW1lbnQoKTsKLSAgICAgICAgaWYgKGRlY29yYXRpb25FbGVtZW50KQotICAgICAgICAgICAgbGFi
ZWxFbGVtZW50LmFwcGVuZENoaWxkKGRlY29yYXRpb25FbGVtZW50KTsKLSAgICB9LAotCi0gICAg
X2NvbnRyb2xCdXR0b25DbGlja2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9w
YW5lbC50b2dnbGVSZWNvcmRCdXR0b24oKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZUNvbnRyb2xz
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZUxhdW5jaGVy
Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUNvbnRyb2xzLmNhbGwodGhpcyk7Ci0gICAgICAgIHZhciBp
dGVtcyA9IHRoaXMuX3Byb2ZpbGVUeXBlU2VsZWN0b3JGb3JtLmVsZW1lbnRzOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
aXRlbXNbaV0udHlwZSA9PT0gInJhZGlvIikKLSAgICAgICAgICAgICAgICBpdGVtc1tpXS5kaXNh
YmxlZCA9IHRoaXMuX2lzUHJvZmlsaW5nOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfSBwcm9maWxlVHlwZQotICAg
ICAqLwotICAgIF9wcm9maWxlVHlwZUNoYW5nZWQ6IGZ1bmN0aW9uKHByb2ZpbGVUeXBlLCBldmVu
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5NdWx0aVByb2ZpbGVMYXVuY2hlclZpZXcuRXZlbnRUeXBlcy5Qcm9maWxlVHlwZVNlbGVj
dGVkLCBwcm9maWxlVHlwZSk7Ci0gICAgICAgIHRoaXMuX2lzSW5zdGFudFByb2ZpbGUgPSBwcm9m
aWxlVHlwZS5pc0luc3RhbnRQcm9maWxlKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xz
KCk7Ci0gICAgfSwKLQotICAgIHByb2ZpbGVTdGFydGVkOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9pc1Byb2ZpbGluZyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRy
b2xzKCk7Ci0gICAgfSwKLQotICAgIHByb2ZpbGVGaW5pc2hlZDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5faXNQcm9maWxpbmcgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fdXBkYXRl
Q29udHJvbHMoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmls
ZUxhdW5jaGVyVmlldy5wcm90b3R5cGUKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1N2ZhMmQ0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0MzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWNvbnN0IFVz
ZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcud2Via2l0LnByb2ZpbGVzLnVzZXItaW5pdGlh
dGVkIjsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3Iu
T2JqZWN0fQotICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZQot
ICovCi1XZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUgPSBmdW5jdGlvbihpZCwgbmFtZSkKLXsKLSAg
ICB0aGlzLl9pZCA9IGlkOwotICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgIC8qKiBAdHlwZSB7
IUFycmF5LjwhV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXI+fSAqLwotICAgIHRoaXMuX3Byb2Zp
bGVzID0gW107Ci0gICAgdGhpcy5fcHJvZmlsZXNJZE1hcCA9IHt9OwotICAgIC8qKiBAdHlwZSB7
V2ViSW5zcGVjdG9yLlNpZGViYXJTZWN0aW9uVHJlZUVsZW1lbnR9ICovCi0gICAgdGhpcy50cmVl
RWxlbWVudCA9IG51bGw7Ci19Ci0KLVdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMgPSB7
Ci0gICAgQWRkUHJvZmlsZUhlYWRlcjogImFkZC1wcm9maWxlLWhlYWRlciIsCi0gICAgUmVtb3Zl
UHJvZmlsZUhlYWRlcjogInJlbW92ZS1wcm9maWxlLWhlYWRlciIsCi0gICAgUHJvZ3Jlc3NVcGRh
dGVkOiAicHJvZ3Jlc3MtdXBkYXRlZCIsCi0gICAgVmlld1VwZGF0ZWQ6ICJ2aWV3LXVwZGF0ZWQi
Ci19Ci0KLVdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7Ci0gICAgc3RhdHVz
QmFySXRlbXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbXTsKLSAgICB9LAot
Ci0gICAgZ2V0IGJ1dHRvblRvb2x0aXAoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAg
IH0sCi0KLSAgICBnZXQgaWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lkOwotICAg
IH0sCi0KLSAgICBnZXQgdHJlZUl0ZW1UaXRsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fbmFtZTsKLSAgICB9LAotCi0gICAgZ2V0IG5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX25hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
Ci0gICAgICovCi0gICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBnZXQgZGVzY3JpcHRpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICIiOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIGlzSW5zdGFudFByb2ZpbGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
IUFycmF5LjwhV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXI+fQotICAgICAqLwotICAgIGdldFBy
b2ZpbGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcHJvZmlsZXMu
ZmlsdGVyKGZ1bmN0aW9uKHByb2ZpbGUpIHsgcmV0dXJuICFwcm9maWxlLmlzVGVtcG9yYXJ5OyB9
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7RWxlbWVudH0KLSAgICAgKi8K
LSAgICBkZWNvcmF0aW9uRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBub3NpZGVlZmZlY3RzCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IHVpZAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxl
SGVhZGVyfQotICAgICAqLwotICAgIGdldFByb2ZpbGU6IGZ1bmN0aW9uKHVpZCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkKV07Ci0g
ICAgfSwKLQotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRpdGxlCi0gICAgICogQHJldHVybiB7IVdlYklu
c3BlY3Rvci5Qcm9maWxlSGVhZGVyfQotICAgICAqLwotICAgIGNyZWF0ZVRlbXBvcmFyeVByb2Zp
bGU6IGZ1bmN0aW9uKHRpdGxlKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOZWVk
cyBpbXBsZW1lbnRlZC4iKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtQcm9m
aWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKiBAcmV0dXJuIHshV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gICAgICovCi0gICAgY3JlYXRlUHJvZmlsZTogZnVuY3Rp
b24ocHJvZmlsZSkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRl
ZCBmb3IgIiArIHRoaXMuX25hbWUgKyAiIHByb2ZpbGVzLiIpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAbm9zaWRlZWZmZWN0cwotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZAotICAgICAq
IEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBfbWFrZUtleTogZnVuY3Rpb24oaWQpCi0g
ICAgewotICAgICAgICByZXR1cm4gaWQgKyAnLycgKyBlc2NhcGUodGhpcy5pZCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfSBw
cm9maWxlCi0gICAgICovCi0gICAgYWRkUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzLnB1c2gocHJvZmlsZSk7Ci0gICAgICAgIC8vIEZJWE1F
OiB1aWQgb25seSBiYXNlZCBrZXkgc2hvdWxkIGJlIGVub3VnaC4KLSAgICAgICAgdGhpcy5fcHJv
ZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHByb2ZpbGUudWlkKV0gPSBwcm9maWxlOwotICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUu
RXZlbnRzLkFkZFByb2ZpbGVIZWFkZXIsIHByb2ZpbGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAq
LwotICAgIHJlbW92ZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5fcHJvZmlsZXNbaV0udWlkID09PSBwcm9maWxlLnVpZCkgewotICAgICAg
ICAgICAgICAgIHRoaXMuX3Byb2ZpbGVzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWxldGUgdGhpcy5fcHJv
ZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHByb2ZpbGUudWlkKV07Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBub3NpZGVlZmZlY3RzCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlBy
b2ZpbGVIZWFkZXJ9Ci0gICAgICovCi0gICAgZmluZFRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHJvZmlsZXMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9wcm9maWxlc1tpXS5pc1RlbXBvcmFy
eSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvZmlsZXNbaV07Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIF9yZXNldDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdmFyIHByb2ZpbGVzID0gdGhpcy5fcHJvZmlsZXMuc2xpY2UoMCk7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvZmlsZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBwcm9maWxlID0gcHJvZmlsZXNbaV07Ci0gICAgICAgICAgICB2YXIgdmlldyA9
IHByb2ZpbGUuZXhpc3RpbmdWaWV3KCk7Ci0gICAgICAgICAgICBpZiAodmlldykgewotICAgICAg
ICAgICAgICAgIHZpZXcuZGV0YWNoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCJkaXNwb3NlIiBp
biB2aWV3KQotICAgICAgICAgICAgICAgICAgICB2aWV3LmRpc3Bvc2UoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5Qcm9maWxlVHlwZS5FdmVudHMuUmVtb3ZlUHJvZmlsZUhlYWRlciwgcHJvZmlsZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdGhpcy50cmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAg
ICB0aGlzLl9wcm9maWxlcyA9IFtdOwotICAgICAgICB0aGlzLl9wcm9maWxlc0lkTWFwID0ge307
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24odGhpczpXZWJJbnNw
ZWN0b3IuUHJvZmlsZVR5cGUsID9zdHJpbmcsICFBcnJheS48IVByb2ZpbGVyQWdlbnQuUHJvZmls
ZUhlYWRlcj4pfSBwb3B1bGF0ZUNhbGxiYWNrCi0gICAgICovCi0gICAgX3JlcXVlc3RQcm9maWxl
c0Zyb21CYWNrZW5kOiBmdW5jdGlvbihwb3B1bGF0ZUNhbGxiYWNrKQotICAgIHsKLSAgICB9LAot
Ci0gICAgX3BvcHVsYXRlUHJvZmlsZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8qKgot
ICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7IUFy
cmF5LjwhUHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyPn0gcHJvZmlsZUhlYWRlcnMKLSAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHBvcHVsYXRlQ2FsbGJhY2soZXJyb3IsIHByb2ZpbGVI
ZWFkZXJzKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgcHJvZmlsZUhlYWRlcnMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVy
biBhLnVpZCAtIGIudWlkOyB9KTsKLSAgICAgICAgICAgIHZhciBjb3VudCA9IHByb2ZpbGVIZWFk
ZXJzLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgICAgICAgICB0aGlzLmFkZFByb2ZpbGUodGhpcy5jcmVhdGVQcm9maWxlKHByb2Zp
bGVIZWFkZXJzW2ldKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fcmVxdWVzdFByb2ZpbGVz
RnJvbUJhY2tlbmQocG9wdWxhdGVDYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfSBwcm9maWxl
VHlwZQotICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlCi0gKiBAcGFyYW0ge251bWJlcj19IHVpZAot
ICovCi1XZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlciA9IGZ1bmN0aW9uKHByb2ZpbGVUeXBlLCB0
aXRsZSwgdWlkKQotewotICAgIHRoaXMuX3Byb2ZpbGVUeXBlID0gcHJvZmlsZVR5cGU7Ci0gICAg
dGhpcy50aXRsZSA9IHRpdGxlOwotICAgIHRoaXMuaXNUZW1wb3JhcnkgPSB1aWQgPT09IHVuZGVm
aW5lZDsKLSAgICB0aGlzLnVpZCA9IHRoaXMuaXNUZW1wb3JhcnkgPyAtMSA6IHVpZDsKLSAgICB0
aGlzLl9mcm9tRmlsZSA9IGZhbHNlOwotfQotCi1XZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlci5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5Qcm9m
aWxlVHlwZX0KLSAgICAgKi8KLSAgICBwcm9maWxlVHlwZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX3Byb2ZpbGVUeXBlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCi0gICAgICogQHJldHVybiB7V2Vi
SW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnR9Ci0gICAgICovCi0gICAgY3JlYXRl
U2lkZWJhclRyZWVFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIk5lZWRzIGltcGxlbWVudGVkLiIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHs/V2ViSW5zcGVjdG9yLlZpZXd9Ci0gICAgICovCi0gICAgZXhpc3RpbmdWaWV3OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdmlldzsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHBhbmVs
Ci0gICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5WaWV3fQotICAgICAqLwotICAgIHZpZXc6
IGZ1bmN0aW9uKHBhbmVsKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl92aWV3KQotICAgICAg
ICAgICAgdGhpcy5fdmlldyA9IHRoaXMuY3JlYXRlVmlldyhwYW5lbCk7Ci0gICAgICAgIHJldHVy
biB0aGlzLl92aWV3OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbH0gcGFuZWwKLSAgICAgKiBAcmV0dXJuIHshV2ViSW5zcGVjdG9y
LlZpZXd9Ci0gICAgICovCi0gICAgY3JlYXRlVmlldzogZnVuY3Rpb24ocGFuZWwpCi0gICAgewot
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZC4iKTsKLSAgICB9LAotCi0g
ICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBsb2FkOiBmdW5jdGlvbihj
YWxsYmFjaykKLSAgICB7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xl
YW59Ci0gICAgICovCi0gICAgY2FuU2F2ZVRvRmlsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5lZWRzIGltcGxlbWVudGVkIik7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RmlsZX0gZmlsZQotICAgICAqLwotICAgIGxv
YWRGcm9tRmlsZTogZnVuY3Rpb24oZmlsZSkKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJv
cigiTmVlZHMgaW1wbGVtZW50ZWQiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBmcm9tRmlsZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2Zyb21GaWxlOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUGFuZWx9Ci0gKiBAaW1wbGVtZW50cyB7
V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LlByb3ZpZGVyfQotICogQHBhcmFtIHtzdHJpbmc9fSBu
YW1lCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlVHlwZT19IHR5cGUKLSAqLwotV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwgPSBmdW5jdGlvbihuYW1lLCB0eXBlKQotewotICAgIC8v
IElmIHRoZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQgdGhlIFByb2ZpbGVzUGFuZWwgd29ya3MgaW4g
bXVsdGktcHJvZmlsZSBtb2RlLgotICAgIHZhciBzaW5nbGVQcm9maWxlTW9kZSA9IHR5cGVvZiBu
YW1lICE9PSAidW5kZWZpbmVkIjsKLSAgICBuYW1lID0gbmFtZSB8fCAicHJvZmlsZXMiOwotICAg
IFdlYkluc3BlY3Rvci5QYW5lbC5jYWxsKHRoaXMsIG5hbWUpOwotICAgIHRoaXMucmVnaXN0ZXJS
ZXF1aXJlZENTUygicGFuZWxFbmFibGVyVmlldy5jc3MiKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVx
dWlyZWRDU1MoImhlYXBQcm9maWxlci5jc3MiKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRD
U1MoInByb2ZpbGVzUGFuZWwuY3NzIik7Ci0KLSAgICB0aGlzLmNyZWF0ZVNpZGViYXJWaWV3V2l0
aFRyZWUoKTsKLQotICAgIHRoaXMucHJvZmlsZXNJdGVtVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLlByb2ZpbGVzU2lkZWJhclRyZWVFbGVtZW50KHRoaXMpOwotICAgIHRoaXMuc2lkZWJh
clRyZWUuYXBwZW5kQ2hpbGQodGhpcy5wcm9maWxlc0l0ZW1UcmVlRWxlbWVudCk7Ci0KLSAgICB0
aGlzLl9zaW5nbGVQcm9maWxlTW9kZSA9IHNpbmdsZVByb2ZpbGVNb2RlOwotICAgIHRoaXMuX3By
b2ZpbGVUeXBlc0J5SWRNYXAgPSB7fTsKLQotICAgIHZhciBwYW5lbEVuYWJsZXJIZWFkaW5nID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJZb3UgbmVlZCB0byBlbmFibGUgcHJvZmlsaW5nIGJlZm9y
ZSB5b3UgY2FuIHVzZSB0aGUgUHJvZmlsZXMgcGFuZWwuIik7Ci0gICAgdmFyIHBhbmVsRW5hYmxl
ckRpc2NsYWltZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsaW5nIHByb2ZpbGluZyB3
aWxsIG1ha2Ugc2NyaXB0cyBydW4gc2xvd2VyLiIpOwotICAgIHZhciBwYW5lbEVuYWJsZXJCdXR0
b24gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBQcm9maWxpbmciKTsKLSAgICB0aGlz
LnBhbmVsRW5hYmxlclZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlBhbmVsRW5hYmxlclZpZXcobmFt
ZSwgcGFuZWxFbmFibGVySGVhZGluZywgcGFuZWxFbmFibGVyRGlzY2xhaW1lciwgcGFuZWxFbmFi
bGVyQnV0dG9uKTsKLSAgICB0aGlzLnBhbmVsRW5hYmxlclZpZXcuYWRkRXZlbnRMaXN0ZW5lcigi
ZW5hYmxlIGNsaWNrZWQiLCB0aGlzLmVuYWJsZVByb2ZpbGVyLCB0aGlzKTsKLQotICAgIHRoaXMu
cHJvZmlsZVZpZXdzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5w
cm9maWxlVmlld3MuaWQgPSAicHJvZmlsZS12aWV3cyI7Ci0gICAgdGhpcy5zcGxpdFZpZXcubWFp
bkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wcm9maWxlVmlld3MpOwotCi0gICAgdGhpcy5fc3Rh
dHVzQmFyQnV0dG9ucyA9IFtdOwotCi0gICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24gPSBuZXcg
V2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgImVuYWJsZS10b2dnbGUtc3RhdHVzLWJh
ci1pdGVtIik7Ci0gICAgaWYgKENhcGFiaWxpdGllcy5wcm9maWxlckNhdXNlc1JlY29tcGlsYXRp
b24pIHsKLSAgICAgICAgdGhpcy5fc3RhdHVzQmFyQnV0dG9ucy5wdXNoKHRoaXMuZW5hYmxlVG9n
Z2xlQnV0dG9uKTsKLSAgICAgICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24uYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLl9vblRvZ2dsZVByb2ZpbGluZywgdGhpcyk7Ci0gICAgfQotICAg
IHRoaXMucmVjb3JkQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oIiIs
ICJyZWNvcmQtcHJvZmlsZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLnJlY29yZEJ1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMudG9nZ2xlUmVjb3JkQnV0dG9uLCB0aGlz
KTsKLSAgICB0aGlzLl9zdGF0dXNCYXJCdXR0b25zLnB1c2godGhpcy5yZWNvcmRCdXR0b24pOwot
Ci0gICAgdGhpcy5jbGVhclJlc3VsdHNCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0Jh
ckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNsZWFyIGFsbCBwcm9maWxlcy4iKSwgImNs
ZWFyLXN0YXR1cy1iYXItaXRlbSIpOwotICAgIHRoaXMuY2xlYXJSZXN1bHRzQnV0dG9uLmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fY2xlYXJQcm9maWxlcywgdGhpcyk7Ci0gICAgdGhp
cy5fc3RhdHVzQmFyQnV0dG9ucy5wdXNoKHRoaXMuY2xlYXJSZXN1bHRzQnV0dG9uKTsKLQotICAg
IHRoaXMuX3Byb2ZpbGVUeXBlU3RhdHVzQmFySXRlbXNDb250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9wcm9maWxlVHlwZVN0YXR1c0Jhckl0ZW1zQ29u
dGFpbmVyLmNsYXNzTmFtZSA9ICJzdGF0dXMtYmFyLWl0ZW1zIjsKLQotICAgIHRoaXMuX3Byb2Zp
bGVWaWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICB0aGlzLl9wcm9maWxlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLmNsYXNz
TmFtZSA9ICJzdGF0dXMtYmFyLWl0ZW1zIjsKLQotICAgIHRoaXMuX3Byb2ZpbGVyRW5hYmxlZCA9
ICFDYXBhYmlsaXRpZXMucHJvZmlsZXJDYXVzZXNSZWNvbXBpbGF0aW9uIHx8IFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5wcm9maWxlckVuYWJsZWQuZ2V0KCk7Ci0KLSAgICBpZiAoc2luZ2xlUHJvZmls
ZU1vZGUpIHsKLSAgICAgICAgdGhpcy5fbGF1bmNoZXJWaWV3ID0gdGhpcy5fY3JlYXRlTGF1bmNo
ZXJWaWV3KCk7Ci0gICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJvZmlsZVR5cGUoLyoqIEB0eXBlIHsh
V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfSAqLyAodHlwZSkpOwotICAgICAgICB0aGlzLl9zZWxl
Y3RlZFByb2ZpbGVUeXBlID0gdHlwZTsKLSAgICAgICAgdGhpcy5fdXBkYXRlUHJvZmlsZVR5cGVT
cGVjaWZpY1VJKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5fbGF1bmNoZXJWaWV3ID0g
bmV3IFdlYkluc3BlY3Rvci5NdWx0aVByb2ZpbGVMYXVuY2hlclZpZXcodGhpcyk7Ci0gICAgICAg
IHRoaXMuX2xhdW5jaGVyVmlldy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5NdWx0aVBy
b2ZpbGVMYXVuY2hlclZpZXcuRXZlbnRUeXBlcy5Qcm9maWxlVHlwZVNlbGVjdGVkLCB0aGlzLl9v
blByb2ZpbGVUeXBlU2VsZWN0ZWQsIHRoaXMpOwotCi0gICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJv
ZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZSgpKTsKLSAgICAgICAgaWYg
KCFXZWJJbnNwZWN0b3IuV29ya2VyTWFuYWdlci5pc1dvcmtlckZyb250ZW5kKCkpCi0gICAgICAg
ICAgICB0aGlzLl9yZWdpc3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0
b3JQcm9maWxlVHlwZSgpKTsKLSAgICAgICAgaWYgKENhcGFiaWxpdGllcy5oZWFwUHJvZmlsZXJQ
cmVzZW50KQotICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlKCkpOwotICAgICAgICBpZiAoIVdlYkluc3Bl
Y3Rvci5Xb3JrZXJNYW5hZ2VyLmlzV29ya2VyRnJvbnRlbmQoKSAmJiBXZWJJbnNwZWN0b3IuZXhw
ZXJpbWVudHNTZXR0aW5ncy5jYW52YXNJbnNwZWN0aW9uLmlzRW5hYmxlZCgpKQotICAgICAgICAg
ICAgdGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2Zp
bGVUeXBlKCkpOwotICAgIH0KLQotICAgIHRoaXMuX3Jlc2V0KCk7Ci0KLSAgICB0aGlzLl9jcmVh
dGVGaWxlU2VsZWN0b3JFbGVtZW50KCk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFuZGxlQ29udGV4dE1lbnVFdmVudC5iaW5kKHRoaXMp
LCB0cnVlKTsKLQotICAgIFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5yZWdpc3RlclByb3ZpZGVy
KHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7Ci0g
ICAgX2NyZWF0ZUZpbGVTZWxlY3RvckVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5lbGVtZW50
LnJlbW92ZUNoaWxkKHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQpOwotICAgICAgICB0aGlzLl9m
aWxlU2VsZWN0b3JFbGVtZW50ID0gV2ViSW5zcGVjdG9yLmNyZWF0ZUZpbGVTZWxlY3RvckVsZW1l
bnQodGhpcy5fbG9hZEZyb21GaWxlLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLmVsZW1lbnQu
YXBwZW5kQ2hpbGQodGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUxhdW5jaGVyVmlld30KLSAg
ICAgKi8KLSAgICBfY3JlYXRlTGF1bmNoZXJWaWV3OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlTGF1bmNoZXJWaWV3KHRoaXMpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFGaWxlfSBmaWxlCi0gICAgICovCi0gICAg
X2xvYWRGcm9tRmlsZTogZnVuY3Rpb24oZmlsZSkKLSAgICB7Ci0gICAgICAgIGlmICghZmlsZS5u
YW1lLmVuZHNXaXRoKCIuaGVhcHNuYXBzaG90IikpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5sb2coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPbmx5IGhlYXAgc25hcHNob3RzIGZyb20gZmls
ZXMgd2l0aCBleHRlbnNpb24gJy5oZWFwc25hcHNob3QnIGNhbiBiZSBsb2FkZWQuIikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHByb2ZpbGVUeXBlID0g
dGhpcy5nZXRQcm9maWxlVHlwZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
VHlwZUlkKTsKLSAgICAgICAgaWYgKCEhcHJvZmlsZVR5cGUuZmluZFRlbXBvcmFyeVByb2ZpbGUo
KSkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkNhbid0IGxvYWQgcHJvZmlsZSB3aGVuIG90aGVyIHByb2ZpbGUgaXMgcmVjb3JkaW5nLiIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0ZW1wb3JhcnlQ
cm9maWxlID0gcHJvZmlsZVR5cGUuY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZShXZWJJbnNwZWN0b3Iu
UHJvZmlsZXNQYW5lbERlc2NyaXB0b3IuVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lICsgIi4iICsg
ZmlsZS5uYW1lKTsKLSAgICAgICAgcHJvZmlsZVR5cGUuYWRkUHJvZmlsZSh0ZW1wb3JhcnlQcm9m
aWxlKTsKLQotICAgICAgICB0ZW1wb3JhcnlQcm9maWxlLl9mcm9tRmlsZSA9IHRydWU7Ci0gICAg
ICAgIHRlbXBvcmFyeVByb2ZpbGUubG9hZEZyb21GaWxlKGZpbGUpOwotICAgICAgICB0aGlzLl9j
cmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50KCk7Ci0gICAgfSwKLQotICAgIHN0YXR1c0Jhckl0ZW1z
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzQmFyQnV0dG9u
cy5zZWxlY3QoImVsZW1lbnQiKS5jb25jYXQodGhpcy5fcHJvZmlsZVR5cGVTdGF0dXNCYXJJdGVt
c0NvbnRhaW5lciwgdGhpcy5fcHJvZmlsZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lcik7Ci0g
ICAgfSwKLQotICAgIHRvZ2dsZVJlY29yZEJ1dHRvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIGlzUHJvZmlsaW5nID0gdGhpcy5fc2VsZWN0ZWRQcm9maWxlVHlwZS5idXR0b25DbGlj
a2VkKCk7Ci0gICAgICAgIHRoaXMuc2V0UmVjb3JkaW5nUHJvZmlsZSh0aGlzLl9zZWxlY3RlZFBy
b2ZpbGVUeXBlLmlkLCBpc1Byb2ZpbGluZyk7Ci0gICAgfSwKLQotICAgIF9wb3B1bGF0ZUFsbFBy
b2ZpbGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3Byb2ZpbGVyRW5h
YmxlZCB8fCB0aGlzLl9wcm9maWxlc1dlcmVSZXF1ZXN0ZWQpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzV2VyZVJlcXVlc3RlZCA9IHRydWU7Ci0gICAgICAgIGZv
ciAodmFyIHR5cGVJZCBpbiB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwKQotICAgICAgICAgICAg
dGhpcy5fcHJvZmlsZVR5cGVzQnlJZE1hcFt0eXBlSWRdLl9wb3B1bGF0ZVByb2ZpbGVzKCk7Ci0g
ICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNw
ZWN0b3IuUGFuZWwucHJvdG90eXBlLndhc1Nob3duLmNhbGwodGhpcyk7Ci0gICAgICAgIHRoaXMu
X3BvcHVsYXRlQWxsUHJvZmlsZXMoKTsKLSAgICB9LAotCi0gICAgX3Byb2ZpbGVyV2FzRW5hYmxl
ZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3Byb2ZpbGVyRW5hYmxlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9wcm9maWxlckVuYWJsZWQgPSB0
cnVlOwotCi0gICAgICAgIHRoaXMuX3Jlc2V0KCk7Ci0gICAgICAgIGlmICh0aGlzLmlzU2hvd2lu
ZygpKQotICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVBbGxQcm9maWxlcygpOwotICAgIH0sCi0K
LSAgICBfcHJvZmlsZXJXYXNEaXNhYmxlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLl9wcm9maWxlckVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dGhpcy5fcHJvZmlsZXJFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3Jlc2V0KCk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVu
dAotICAgICAqLwotICAgIF9vblByb2ZpbGVUeXBlU2VsZWN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRQcm9maWxlVHlwZSA9IC8qKiBAdHlwZSB7IVdl
Ykluc3BlY3Rvci5Qcm9maWxlVHlwZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl91
cGRhdGVQcm9maWxlVHlwZVNwZWNpZmljVUkoKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVByb2Zp
bGVUeXBlU3BlY2lmaWNVSTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5yZWNvcmRC
dXR0b24udGl0bGUgPSB0aGlzLl9zZWxlY3RlZFByb2ZpbGVUeXBlLmJ1dHRvblRvb2x0aXA7Ci0K
LSAgICAgICAgdGhpcy5fcHJvZmlsZVR5cGVTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5yZW1vdmVD
aGlsZHJlbigpOwotICAgICAgICB2YXIgc3RhdHVzQmFySXRlbXMgPSB0aGlzLl9zZWxlY3RlZFBy
b2ZpbGVUeXBlLnN0YXR1c0Jhckl0ZW1zKCk7Ci0gICAgICAgIGlmIChzdGF0dXNCYXJJdGVtcykg
ewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0dXNCYXJJdGVtcy5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9wcm9maWxlVHlwZVN0YXR1c0Jhckl0ZW1zQ29u
dGFpbmVyLmFwcGVuZENoaWxkKHN0YXR1c0Jhckl0ZW1zW2ldKTsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLl9yZXNpemUodGhpcy5zcGxpdFZpZXcuc2lkZWJhcldpZHRoKCkpOwotICAgIH0sCi0K
LSAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5QYW5l
bC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKTsKLQotICAgICAgICBmb3IgKHZhciB0eXBlSWQg
aW4gdGhpcy5fcHJvZmlsZVR5cGVzQnlJZE1hcCkKLSAgICAgICAgICAgIHRoaXMuX3Byb2ZpbGVU
eXBlc0J5SWRNYXBbdHlwZUlkXS5fcmVzZXQoKTsKLQotICAgICAgICBkZWxldGUgdGhpcy52aXNp
YmxlVmlldzsKLSAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFF1ZXJ5OwotICAgICAgICB0aGlz
LnNlYXJjaENhbmNlbGVkKCk7Ci0KLSAgICAgICAgdGhpcy5fcHJvZmlsZUdyb3VwcyA9IHt9Owot
ICAgICAgICB0aGlzLl9wcm9maWxlc1dlcmVSZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICAgICAgdGhp
cy5yZWNvcmRCdXR0b24udG9nZ2xlZCA9IGZhbHNlOwotICAgICAgICBpZiAodGhpcy5fc2VsZWN0
ZWRQcm9maWxlVHlwZSkKLSAgICAgICAgICAgIHRoaXMucmVjb3JkQnV0dG9uLnRpdGxlID0gdGhp
cy5fc2VsZWN0ZWRQcm9maWxlVHlwZS5idXR0b25Ub29sdGlwOwotICAgICAgICB0aGlzLl9sYXVu
Y2hlclZpZXcucHJvZmlsZUZpbmlzaGVkKCk7Ci0KLSAgICAgICAgdGhpcy5zaWRlYmFyVHJlZUVs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygic29tZS1leHBhbmRhYmxlIik7Ci0KLSAgICAgICAgdGhp
cy5wcm9maWxlVmlld3MucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5fcHJvZmlsZVZp
ZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIHRo
aXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJmYWNl
KCk7Ci0gICAgICAgIHRoaXMucHJvZmlsZXNJdGVtVHJlZUVsZW1lbnQuc2VsZWN0KCk7Ci0gICAg
ICAgIHRoaXMuX3Nob3dMYXVuY2hlclZpZXcoKTsKLSAgICB9LAotCi0gICAgX3Nob3dMYXVuY2hl
clZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY2xvc2VWaXNpYmxlVmlldygp
OwotICAgICAgICB0aGlzLl9wcm9maWxlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLnJlbW92
ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX2xhdW5jaGVyVmlldy5zaG93KHRoaXMuc3BsaXRW
aWV3Lm1haW5FbGVtZW50KTsKLSAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHRoaXMuX2xhdW5j
aGVyVmlldzsKLSAgICB9LAotCi0gICAgX2NsZWFyUHJvZmlsZXM6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIFByb2ZpbGVyQWdlbnQuY2xlYXJQcm9maWxlcygpOwotICAgICAgICBIZWFwUHJv
ZmlsZXJBZ2VudC5jbGVhclByb2ZpbGVzKCk7Ci0gICAgICAgIHRoaXMuX3Jlc2V0KCk7Ci0gICAg
fSwKLQotICAgIF9nYXJiYWdlQ29sbGVjdEJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIEhlYXBQcm9maWxlckFnZW50LmNvbGxlY3RHYXJiYWdlKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZX0gcHJvZmls
ZVR5cGUKLSAgICAgKi8KLSAgICBfcmVnaXN0ZXJQcm9maWxlVHlwZTogZnVuY3Rpb24ocHJvZmls
ZVR5cGUpCi0gICAgewotICAgICAgICB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwW3Byb2ZpbGVU
eXBlLmlkXSA9IHByb2ZpbGVUeXBlOwotICAgICAgICB0aGlzLl9sYXVuY2hlclZpZXcuYWRkUHJv
ZmlsZVR5cGUocHJvZmlsZVR5cGUpOwotICAgICAgICBwcm9maWxlVHlwZS50cmVlRWxlbWVudCA9
IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudChwcm9maWxlVHlwZS50
cmVlSXRlbVRpdGxlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgcHJvZmlsZVR5cGUudHJlZUVsZW1l
bnQuaGlkZGVuID0gIXRoaXMuX3NpbmdsZVByb2ZpbGVNb2RlOwotICAgICAgICB0aGlzLnNpZGVi
YXJUcmVlLmFwcGVuZENoaWxkKHByb2ZpbGVUeXBlLnRyZWVFbGVtZW50KTsKLSAgICAgICAgcHJv
ZmlsZVR5cGUudHJlZUVsZW1lbnQuY2hpbGRyZW5MaXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJjb250ZXh0bWVudSIsIHRoaXMuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQuYmluZCh0aGlzKSwg
dHJ1ZSk7Ci0gICAgICAgIGZ1bmN0aW9uIG9uQWRkUHJvZmlsZUhlYWRlcihldmVudCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdGhpcy5fYWRkUHJvZmlsZUhlYWRlcihldmVudC5kYXRhKTsKLSAg
ICAgICAgfQotICAgICAgICBmdW5jdGlvbiBvblJlbW92ZVByb2ZpbGVIZWFkZXIoZXZlbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZVByb2ZpbGVIZWFkZXIoZXZlbnQuZGF0
YSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gb25Qcm9ncmVzc1VwZGF0ZWQoZXZlbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuX3JlcG9ydFByb2ZpbGVQcm9ncmVzcyhldmVu
dC5kYXRhLnByb2ZpbGUsIGV2ZW50LmRhdGEuZG9uZSwgZXZlbnQuZGF0YS50b3RhbCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcHJvZmlsZVR5cGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UHJvZmlsZVR5cGUuRXZlbnRzLlZpZXdVcGRhdGVkLCB0aGlzLl91cGRhdGVQcm9maWxlVHlwZVNw
ZWNpZmljVUksIHRoaXMpOwotICAgICAgICBwcm9maWxlVHlwZS5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMuQWRkUHJvZmlsZUhlYWRlciwgb25BZGRQcm9m
aWxlSGVhZGVyLCB0aGlzKTsKLSAgICAgICAgcHJvZmlsZVR5cGUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRzLlJlbW92ZVByb2ZpbGVIZWFkZXIsIG9uUmVt
b3ZlUHJvZmlsZUhlYWRlciwgdGhpcyk7Ci0gICAgICAgIHByb2ZpbGVUeXBlLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLkV2ZW50cy5Qcm9ncmVzc1VwZGF0ZWQsIG9u
UHJvZ3Jlc3NVcGRhdGVkLCB0aGlzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVudDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IGV2ZW50LnNyY0VsZW1l
bnQ7Ci0gICAgICAgIHdoaWxlIChlbGVtZW50ICYmICFlbGVtZW50LnRyZWVFbGVtZW50ICYmIGVs
ZW1lbnQgIT09IHRoaXMuZWxlbWVudCkKLSAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBh
cmVudEVsZW1lbnQ7Ci0gICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKGVsZW1lbnQudHJlZUVsZW1lbnQgJiYgZWxlbWVudC50cmVlRWxlbWVudC5o
YW5kbGVDb250ZXh0TWVudUV2ZW50KSB7Ci0gICAgICAgICAgICBlbGVtZW50LnRyZWVFbGVtZW50
LmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZlbnQsIHRoaXMpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLmVsZW1lbnQgfHwgZXZl
bnQuc3JjRWxlbWVudCA9PT0gdGhpcy5zaWRlYmFyRWxlbWVudCkgewotICAgICAgICAgICAgdmFy
IGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudShldmVudCk7Ci0gICAg
ICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RWaWV3KQotICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcucG9wdWxhdGVD
b250ZXh0TWVudShjb250ZXh0TWVudSwgZXZlbnQpOwotICAgICAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2Fz
ZU1lbnVUaXRsZXMoKSA/ICJMb2FkIGhlYXAgc25hcHNob3RcdTIwMjYiIDogIkxvYWQgSGVhcCBT
bmFwc2hvdFx1MjAyNiIpLCB0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50LmNsaWNrLmJpbmQodGhp
cy5fZmlsZVNlbGVjdG9yRWxlbWVudCkpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuc2hvdygp
OwotICAgICAgICB9Ci0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG5vc2lkZWVmZmVjdHMK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9m
aWxlVHlwZUlkCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIF9tYWtlVGl0
bGVLZXk6IGZ1bmN0aW9uKHRleHQsIHByb2ZpbGVUeXBlSWQpCi0gICAgewotICAgICAgICByZXR1
cm4gZXNjYXBlKHRleHQpICsgJy8nICsgZXNjYXBlKHByb2ZpbGVUeXBlSWQpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJv
ZmlsZQotICAgICAqLwotICAgIF9hZGRQcm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlKQot
ICAgIHsKLSAgICAgICAgaWYgKCFwcm9maWxlLmlzVGVtcG9yYXJ5KQotICAgICAgICAgICAgdGhp
cy5fcmVtb3ZlVGVtcG9yYXJ5UHJvZmlsZShwcm9maWxlLnByb2ZpbGVUeXBlKCkuaWQpOwotCi0g
ICAgICAgIHZhciBwcm9maWxlVHlwZSA9IHByb2ZpbGUucHJvZmlsZVR5cGUoKTsKLSAgICAgICAg
dmFyIHR5cGVJZCA9IHByb2ZpbGVUeXBlLmlkOwotICAgICAgICB2YXIgc2lkZWJhclBhcmVudCA9
IHByb2ZpbGVUeXBlLnRyZWVFbGVtZW50OwotICAgICAgICBzaWRlYmFyUGFyZW50LmhpZGRlbiA9
IGZhbHNlOwotICAgICAgICB2YXIgc21hbGwgPSBmYWxzZTsKLSAgICAgICAgdmFyIGFsdGVybmF0
ZVRpdGxlOwotCi0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWxEZXNjcmlw
dG9yLmlzVXNlckluaXRpYXRlZFByb2ZpbGUocHJvZmlsZS50aXRsZSkgJiYgIXByb2ZpbGUuaXNU
ZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIHZhciBwcm9maWxlVGl0bGVLZXkgPSB0aGlzLl9tYWtl
VGl0bGVLZXkocHJvZmlsZS50aXRsZSwgdHlwZUlkKTsKLSAgICAgICAgICAgIGlmICghKHByb2Zp
bGVUaXRsZUtleSBpbiB0aGlzLl9wcm9maWxlR3JvdXBzKSkKLSAgICAgICAgICAgICAgICB0aGlz
Ll9wcm9maWxlR3JvdXBzW3Byb2ZpbGVUaXRsZUtleV0gPSBbXTsKLQotICAgICAgICAgICAgdmFy
IGdyb3VwID0gdGhpcy5fcHJvZmlsZUdyb3Vwc1twcm9maWxlVGl0bGVLZXldOwotICAgICAgICAg
ICAgZ3JvdXAucHVzaChwcm9maWxlKTsKLSAgICAgICAgICAgIGlmIChncm91cC5sZW5ndGggPT09
IDIpIHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIGEgZ3JvdXAgVHJlZUVsZW1lbnQgbm93IHRo
YXQgdGhlcmUgYXJlIDIgcHJvZmlsZXMuCi0gICAgICAgICAgICAgICAgZ3JvdXAuX3Byb2ZpbGVz
VHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVHcm91cFNpZGViYXJUcmVlRWxl
bWVudCh0aGlzLCBwcm9maWxlLnRpdGxlKTsKLQotICAgICAgICAgICAgICAgIC8vIEluc2VydCBh
dCB0aGUgc2FtZSBpbmRleCBmb3IgdGhlIGZpcnN0IHByb2ZpbGUgb2YgdGhlIGdyb3VwLgotICAg
ICAgICAgICAgICAgIHZhciBpbmRleCA9IHNpZGViYXJQYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihn
cm91cFswXS5fcHJvZmlsZXNUcmVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgc2lkZWJhclBh
cmVudC5pbnNlcnRDaGlsZChncm91cC5fcHJvZmlsZXNUcmVlRWxlbWVudCwgaW5kZXgpOwotCi0g
ICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgZmlyc3QgcHJvZmlsZSB0byB0aGUgZ3JvdXAuCi0g
ICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gZ3JvdXBbMF0uX3Byb2ZpbGVzVHJlZUVsZW1l
bnQuc2VsZWN0ZWQ7Ci0gICAgICAgICAgICAgICAgc2lkZWJhclBhcmVudC5yZW1vdmVDaGlsZChn
cm91cFswXS5fcHJvZmlsZXNUcmVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgZ3JvdXAuX3By
b2ZpbGVzVHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZ3JvdXBbMF0uX3Byb2ZpbGVzVHJlZUVsZW1l
bnQpOwotICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkKLSAgICAgICAgICAgICAgICAgICAg
Z3JvdXBbMF0uX3Byb2ZpbGVzVHJlZUVsZW1lbnQucmV2ZWFsQW5kU2VsZWN0KCk7Ci0KLSAgICAg
ICAgICAgICAgICBncm91cFswXS5fcHJvZmlsZXNUcmVlRWxlbWVudC5zbWFsbCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgZ3JvdXBbMF0uX3Byb2ZpbGVzVHJlZUVsZW1lbnQubWFpblRpdGxlID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSdW4gJWQiLCAxKTsKLQotICAgICAgICAgICAgICAgIHRo
aXMuc2lkZWJhclRyZWVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvbWUtZXhwYW5kYWJsZSIpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZ3JvdXAubGVuZ3RoID49IDIpIHsKLSAg
ICAgICAgICAgICAgICBzaWRlYmFyUGFyZW50ID0gZ3JvdXAuX3Byb2ZpbGVzVHJlZUVsZW1lbnQ7
Ci0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlVGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlJ1biAlZCIsIGdyb3VwLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgc21hbGwgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHByb2ZpbGVUcmVlRWxlbWVu
dCA9IHByb2ZpbGUuY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50KCk7Ci0gICAgICAgIHByb2ZpbGUu
c2lkZWJhckVsZW1lbnQgPSBwcm9maWxlVHJlZUVsZW1lbnQ7Ci0gICAgICAgIHByb2ZpbGVUcmVl
RWxlbWVudC5zbWFsbCA9IHNtYWxsOwotICAgICAgICBpZiAoYWx0ZXJuYXRlVGl0bGUpCi0gICAg
ICAgICAgICBwcm9maWxlVHJlZUVsZW1lbnQubWFpblRpdGxlID0gYWx0ZXJuYXRlVGl0bGU7Ci0g
ICAgICAgIHByb2ZpbGUuX3Byb2ZpbGVzVHJlZUVsZW1lbnQgPSBwcm9maWxlVHJlZUVsZW1lbnQ7
Ci0KLSAgICAgICAgc2lkZWJhclBhcmVudC5hcHBlbmRDaGlsZChwcm9maWxlVHJlZUVsZW1lbnQp
OwotICAgICAgICBpZiAoIXByb2ZpbGUuaXNUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGlmICgh
dGhpcy52aXNpYmxlVmlldykKLSAgICAgICAgICAgICAgICB0aGlzLl9zaG93UHJvZmlsZShwcm9m
aWxlKTsKLSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJwcm9maWxl
IGFkZGVkIiwgewotICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVJZAotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVj
dG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKi8KLSAgICBfcmVtb3ZlUHJvZmlsZUhl
YWRlcjogZnVuY3Rpb24ocHJvZmlsZSkKLSAgICB7Ci0gICAgICAgIHByb2ZpbGUuZGlzcG9zZSgp
OwotICAgICAgICBwcm9maWxlLnByb2ZpbGVUeXBlKCkucmVtb3ZlUHJvZmlsZShwcm9maWxlKTsK
LQotICAgICAgICB2YXIgc2lkZWJhclBhcmVudCA9IHByb2ZpbGUucHJvZmlsZVR5cGUoKS50cmVl
RWxlbWVudDsKLSAgICAgICAgdmFyIHByb2ZpbGVUaXRsZUtleSA9IHRoaXMuX21ha2VUaXRsZUtl
eShwcm9maWxlLnRpdGxlLCBwcm9maWxlLnByb2ZpbGVUeXBlKCkuaWQpOwotICAgICAgICB2YXIg
Z3JvdXAgPSB0aGlzLl9wcm9maWxlR3JvdXBzW3Byb2ZpbGVUaXRsZUtleV07Ci0gICAgICAgIGlm
IChncm91cCkgewotICAgICAgICAgICAgZ3JvdXAuc3BsaWNlKGdyb3VwLmluZGV4T2YocHJvZmls
ZSksIDEpOwotICAgICAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAg
ICAgICAgIC8vIE1vdmUgdGhlIGxhc3QgcHJvZmlsZSBvdXQgb2YgaXRzIGdyb3VwIGFuZCByZW1v
dmUgdGhlIGdyb3VwLgotICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNpZGViYXJQYXJlbnQu
Y2hpbGRyZW4uaW5kZXhPZihncm91cC5fcHJvZmlsZXNUcmVlRWxlbWVudCk7Ci0gICAgICAgICAg
ICAgICAgc2lkZWJhclBhcmVudC5pbnNlcnRDaGlsZChncm91cFswXS5fcHJvZmlsZXNUcmVlRWxl
bWVudCwgaW5kZXgpOwotICAgICAgICAgICAgICAgIGdyb3VwWzBdLl9wcm9maWxlc1RyZWVFbGVt
ZW50LnNtYWxsID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZ3JvdXBbMF0uX3Byb2ZpbGVzVHJl
ZUVsZW1lbnQubWFpblRpdGxlID0gZ3JvdXBbMF0udGl0bGU7Ci0gICAgICAgICAgICAgICAgc2lk
ZWJhclBhcmVudC5yZW1vdmVDaGlsZChncm91cC5fcHJvZmlsZXNUcmVlRWxlbWVudCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZ3JvdXAubGVuZ3RoICE9PSAwKQotICAgICAgICAg
ICAgICAgIHNpZGViYXJQYXJlbnQgPSBncm91cC5fcHJvZmlsZXNUcmVlRWxlbWVudDsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcHJvZmlsZUdyb3Vwc1tw
cm9maWxlVGl0bGVLZXldOwotICAgICAgICB9Ci0gICAgICAgIHNpZGViYXJQYXJlbnQucmVtb3Zl
Q2hpbGQocHJvZmlsZS5fcHJvZmlsZXNUcmVlRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gTm8gb3Ro
ZXIgaXRlbSB3aWxsIGJlIHNlbGVjdGVkIGlmIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcHJvZmls
ZXMsIHNvCi0gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHZpZXcgZ2V0cyBjbGVhcmVkIHdoZW4g
dGhlIGxhc3QgcHJvZmlsZSBpcyByZW1vdmVkLgotICAgICAgICBpZiAoIXNpZGViYXJQYXJlbnQu
Y2hpbGRyZW4ubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aGlzLnByb2ZpbGVzSXRlbVRyZWVFbGVt
ZW50LnNlbGVjdCgpOwotICAgICAgICAgICAgdGhpcy5fc2hvd0xhdW5jaGVyVmlldygpOwotICAg
ICAgICAgICAgc2lkZWJhclBhcmVudC5oaWRkZW4gPSAhdGhpcy5fc2luZ2xlUHJvZmlsZU1vZGU7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVj
dG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKi8KLSAgICBfc2hvd1Byb2ZpbGU6IGZ1
bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICBpZiAoIXByb2ZpbGUgfHwgcHJvZmlsZS5p
c1RlbXBvcmFyeSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgdmlldyA9IHBy
b2ZpbGUudmlldyh0aGlzKTsKLSAgICAgICAgaWYgKHZpZXcgPT09IHRoaXMudmlzaWJsZVZpZXcp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5jbG9zZVZpc2libGVWaWV3KCk7
Ci0KLSAgICAgICAgdmlldy5zaG93KHRoaXMucHJvZmlsZVZpZXdzKTsKLQotICAgICAgICBwcm9m
aWxlLl9wcm9maWxlc1RyZWVFbGVtZW50Ll9zdXBwcmVzc09uU2VsZWN0ID0gdHJ1ZTsKLSAgICAg
ICAgcHJvZmlsZS5fcHJvZmlsZXNUcmVlRWxlbWVudC5yZXZlYWxBbmRTZWxlY3QoKTsKLSAgICAg
ICAgZGVsZXRlIHByb2ZpbGUuX3Byb2ZpbGVzVHJlZUVsZW1lbnQuX3N1cHByZXNzT25TZWxlY3Q7
Ci0KLSAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHZpZXc7Ci0KLSAgICAgICAgdGhpcy5fcHJv
ZmlsZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAg
ICAgIHZhciBzdGF0dXNCYXJJdGVtcyA9IHZpZXcuc3RhdHVzQmFySXRlbXMoKTsKLSAgICAgICAg
aWYgKHN0YXR1c0Jhckl0ZW1zKQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0
dXNCYXJJdGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9wcm9maWxlVmll
d1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLmFwcGVuZENoaWxkKHN0YXR1c0Jhckl0ZW1zW2ldKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtIZWFwUHJvZmlsZXJBZ2VudC5IZWFw
U25hcHNob3RPYmplY3RJZH0gc25hcHNob3RPYmplY3RJZAotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSB2aWV3TmFtZQotICAgICAqLwotICAgIHNob3dPYmplY3Q6IGZ1bmN0aW9uKHNuYXBzaG90T2Jq
ZWN0SWQsIHZpZXdOYW1lKQotICAgIHsKLSAgICAgICAgdmFyIGhlYXBQcm9maWxlcyA9IHRoaXMu
Z2V0UHJvZmlsZVR5cGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJ
ZCkuZ2V0UHJvZmlsZXMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFwUHJvZmls
ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBwcm9maWxlID0gaGVhcFByb2ZpbGVz
W2ldOwotICAgICAgICAgICAgLy8gRklYTUU6IGFsbG93IHRvIGNob29zZSBzbmFwc2hvdCBpZiB0
aGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zLgotICAgICAgICAgICAgaWYgKHByb2ZpbGUubWF4SlNP
YmplY3RJZCA+PSBzbmFwc2hvdE9iamVjdElkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2hv
d1Byb2ZpbGUocHJvZmlsZSk7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBwcm9maWxlLnZp
ZXcodGhpcyk7Ci0gICAgICAgICAgICAgICAgdmlldy5jaGFuZ2VWaWV3KHZpZXdOYW1lLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy5kYXRhR3JpZC5oaWdobGlnaHRPYmpl
Y3RCeUhlYXBTbmFwc2hvdElkKHNuYXBzaG90T2JqZWN0SWQpOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlSWQKLSAgICAgKi8KLSAg
ICBfY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odHlwZUlkKQotICAgIHsKLSAgICAg
ICAgdmFyIHR5cGUgPSB0aGlzLmdldFByb2ZpbGVUeXBlKHR5cGVJZCk7Ci0gICAgICAgIGlmICgh
dHlwZS5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpKQotICAgICAgICAgICAgdHlwZS5hZGRQcm9maWxl
KHR5cGUuY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZSgpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IHR5cGVJZAotICAgICAqLwotICAgIF9yZW1vdmVUZW1wb3JhcnlQ
cm9maWxlOiBmdW5jdGlvbih0eXBlSWQpCi0gICAgewotICAgICAgICB2YXIgdGVtcG9yYXJ5UHJv
ZmlsZSA9IHRoaXMuZ2V0UHJvZmlsZVR5cGUodHlwZUlkKS5maW5kVGVtcG9yYXJ5UHJvZmlsZSgp
OwotICAgICAgICBpZiAoISF0ZW1wb3JhcnlQcm9maWxlKQotICAgICAgICAgICAgdGhpcy5fcmVt
b3ZlUHJvZmlsZUhlYWRlcih0ZW1wb3JhcnlQcm9maWxlKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVJZAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQK
LSAgICAgKi8KLSAgICBnZXRQcm9maWxlOiBmdW5jdGlvbih0eXBlSWQsIHVpZCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLmdldFByb2ZpbGVUeXBlKHR5cGVJZCkuZ2V0UHJvZmlsZSh1aWQp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5WaWV3fSB2
aWV3Ci0gICAgICovCi0gICAgc2hvd1ZpZXc6IGZ1bmN0aW9uKHZpZXcpCi0gICAgewotICAgICAg
ICB0aGlzLl9zaG93UHJvZmlsZSh2aWV3LnByb2ZpbGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZUlkCi0gICAgICovCi0gICAgZ2V0UHJvZmlsZVR5cGU6
IGZ1bmN0aW9uKHR5cGVJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlVHlw
ZXNCeUlkTWFwW3R5cGVJZF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSB0eXBlSWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdWlkCi0gICAgICovCi0gICAgc2hv
d1Byb2ZpbGU6IGZ1bmN0aW9uKHR5cGVJZCwgdWlkKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2hv
d1Byb2ZpbGUodGhpcy5nZXRQcm9maWxlKHR5cGVJZCwgTnVtYmVyKHVpZCkpKTsKLSAgICB9LAot
Ci0gICAgY2xvc2VWaXNpYmxlVmlldzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMudmlzaWJsZVZpZXcpCi0gICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmRldGFjaCgpOwot
ICAgICAgICBkZWxldGUgdGhpcy52aXNpYmxlVmlldzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5Ci0gICAgICovCi0gICAgcGVyZm9ybVNlYXJjaDogZnVu
Y3Rpb24ocXVlcnkpCi0gICAgewotICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7Ci0KLSAg
ICAgICAgdmFyIHNlYXJjaGFibGVWaWV3cyA9IHRoaXMuX3NlYXJjaGFibGVWaWV3cygpOwotICAg
ICAgICBpZiAoIXNlYXJjaGFibGVWaWV3cyB8fCAhc2VhcmNoYWJsZVZpZXdzLmxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2li
bGVWaWV3OwotCi0gICAgICAgIHZhciBtYXRjaGVzQ291bnRVcGRhdGVUaW1lb3V0ID0gbnVsbDsK
LQotICAgICAgICBmdW5jdGlvbiB1cGRhdGVNYXRjaGVzQ291bnQoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRhdGVTZWFyY2hNYXRjaGVz
Q291bnQodGhpcy5fdG90YWxTZWFyY2hNYXRjaGVzLCB0aGlzKTsKLSAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZUN1cnJlbnRNYXRjaEluZGV4KHRoaXMuX2N1
cnJlbnRTZWFyY2hSZXN1bHRJbmRleCwgdGhpcyk7Ci0gICAgICAgICAgICBtYXRjaGVzQ291bnRV
cGRhdGVUaW1lb3V0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHVwZGF0
ZU1hdGNoZXNDb3VudFNvb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hlc0Nv
dW50VXBkYXRlVGltZW91dCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAv
LyBVcGRhdGUgdGhlIG1hdGNoZXMgY291bnQgZXZlcnkgaGFsZi1zZWNvbmQgc28gaXQgZG9lc24n
dCBmZWVsIHR3aXRjaHkuCi0gICAgICAgICAgICBtYXRjaGVzQ291bnRVcGRhdGVUaW1lb3V0ID0g
c2V0VGltZW91dCh1cGRhdGVNYXRjaGVzQ291bnQuYmluZCh0aGlzKSwgNTAwKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmlzaGVkQ2FsbGJhY2sodmlldywgc2VhcmNoTWF0Y2hl
cykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzZWFyY2hNYXRjaGVzKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdGhpcy5fdG90YWxTZWFyY2hNYXRjaGVzICs9
IHNlYXJjaE1hdGNoZXM7Ci0gICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzLnB1c2godmll
dyk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoRm91bmQpCi0gICAgICAgICAg
ICAgICAgdGhpcy5zZWFyY2hNYXRjaEZvdW5kKHZpZXcsIHNlYXJjaE1hdGNoZXMpOwotCi0gICAg
ICAgICAgICB1cGRhdGVNYXRjaGVzQ291bnRTb29uLmNhbGwodGhpcyk7Ci0KLSAgICAgICAgICAg
IGlmICh2aWV3ID09PSB2aXNpYmxlVmlldykKLSAgICAgICAgICAgICAgICB2aWV3Lmp1bXBUb0Zp
cnN0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaSA9IDA7Ci0gICAg
ICAgIHZhciBwYW5lbCA9IHRoaXM7Ci0gICAgICAgIHZhciBib3VuZEZpbmlzaGVkQ2FsbGJhY2sg
PSBmaW5pc2hlZENhbGxiYWNrLmJpbmQodGhpcyk7Ci0gICAgICAgIHZhciBjaHVua0ludGVydmFs
SWRlbnRpZmllciA9IG51bGw7Ci0KLSAgICAgICAgLy8gU3BsaXQgdXAgdGhlIHdvcmsgaW50byBj
aHVua3Mgc28gd2UgZG9uJ3QgYmxvY2sgdGhlCi0gICAgICAgIC8vIFVJIHRocmVhZCB3aGlsZSBw
cm9jZXNzaW5nLgotCi0gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NDaHVuaygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZhciB2aWV3ID0gc2VhcmNoYWJsZVZpZXdzW2ldOwotCi0gICAgICAgICAg
ICBpZiAoKytpID49IHNlYXJjaGFibGVWaWV3cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBp
ZiAocGFuZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllciA9PT0gY2h1bmtJ
bnRlcnZhbElkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYW5lbC5fY3Vy
cmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyOwotICAgICAgICAgICAgICAgIGNsZWFy
SW50ZXJ2YWwoY2h1bmtJbnRlcnZhbElkZW50aWZpZXIpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIXZpZXcpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICB2aWV3LmN1cnJlbnRRdWVyeSA9IHF1ZXJ5OwotICAgICAgICAgICAgdmlldy5wZXJmb3JtU2Vh
cmNoKHF1ZXJ5LCBib3VuZEZpbmlzaGVkQ2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAg
cHJvY2Vzc0NodW5rKCk7Ci0KLSAgICAgICAgY2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPSBzZXRJ
bnRlcnZhbChwcm9jZXNzQ2h1bmssIDI1KTsKLSAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaENo
dW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gY2h1bmtJbnRlcnZhbElkZW50aWZpZXI7Ci0gICAgfSwK
LQotICAgIGp1bXBUb05leHRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5zaG93VmlldyB8fCAhdGhpcy5fc2VhcmNoUmVzdWx0cyB8fCAhdGhpcy5fc2Vh
cmNoUmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNo
b3dGaXJzdFJlc3VsdCA9IGZhbHNlOwotCi0gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1
bHRJbmRleCA9IHRoaXMuX3NlYXJjaFJlc3VsdHMuaW5kZXhPZih0aGlzLnZpc2libGVWaWV3KTsK
LSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9PT0gLTEpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IDA7Ci0gICAgICAgICAg
ICBzaG93Rmlyc3RSZXN1bHQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGN1cnJl
bnRWaWV3ID0gdGhpcy5fc2VhcmNoUmVzdWx0c1t0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5k
ZXhdOwotCi0gICAgICAgIGlmIChjdXJyZW50Vmlldy5zaG93aW5nTGFzdFNlYXJjaFJlc3VsdCgp
KSB7Ci0gICAgICAgICAgICBpZiAoKyt0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPj0g
dGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4ID0gMDsKLSAgICAgICAgICAgIGN1cnJlbnRWaWV3ID0gdGhpcy5f
c2VhcmNoUmVzdWx0c1t0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXhdOwotICAgICAgICAg
ICAgc2hvd0ZpcnN0UmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFdlYkluc3Bl
Y3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZUN1cnJlbnRNYXRjaEluZGV4KHRoaXMuX2N1cnJl
bnRTZWFyY2hSZXN1bHRJbmRleCwgdGhpcyk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRWaWV3ICE9
PSB0aGlzLnZpc2libGVWaWV3KSB7Ci0gICAgICAgICAgICB0aGlzLnNob3dWaWV3KGN1cnJlbnRW
aWV3KTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnNob3dTZWFy
Y2hGaWVsZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNob3dGaXJzdFJlc3VsdCkKLSAg
ICAgICAgICAgIGN1cnJlbnRWaWV3Lmp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRWaWV3Lmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsK
LSAgICB9LAotCi0gICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5zaG93VmlldyB8fCAhdGhpcy5fc2VhcmNoUmVzdWx0cyB8
fCAhdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdmFyIHNob3dMYXN0UmVzdWx0ID0gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5fY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4ID0gdGhpcy5fc2VhcmNoUmVzdWx0cy5pbmRleE9mKHRoaXMudmlz
aWJsZVZpZXcpOwotICAgICAgICBpZiAodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID09
PSAtMSkgewotICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gMDsK
LSAgICAgICAgICAgIHNob3dMYXN0UmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZhciBjdXJyZW50VmlldyA9IHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJj
aFJlc3VsdEluZGV4XTsKLQotICAgICAgICBpZiAoY3VycmVudFZpZXcuc2hvd2luZ0ZpcnN0U2Vh
cmNoUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGlmICgtLXRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1
bHRJbmRleCA8IDApCi0gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdElu
ZGV4ID0gKHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoIC0gMSk7Ci0gICAgICAgICAgICBjdXJy
ZW50VmlldyA9IHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdElu
ZGV4XTsKLSAgICAgICAgICAgIHNob3dMYXN0UmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZUN1cnJlbnRNYXRjaElu
ZGV4KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCwgdGhpcyk7Ci0KLSAgICAgICAgaWYg
KGN1cnJlbnRWaWV3ICE9PSB0aGlzLnZpc2libGVWaWV3KSB7Ci0gICAgICAgICAgICB0aGlzLnNo
b3dWaWV3KGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250
cm9sbGVyLnNob3dTZWFyY2hGaWVsZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNob3dM
YXN0UmVzdWx0KQotICAgICAgICAgICAgY3VycmVudFZpZXcuanVtcFRvTGFzdFNlYXJjaFJlc3Vs
dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyZW50Vmlldy5qdW1wVG9QcmV2aW91
c1NlYXJjaFJlc3VsdCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHshQXJy
YXkuPCFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcj59Ci0gICAgICovCi0gICAgX2dldEFsbFBy
b2ZpbGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZXMgPSBbXTsKLSAg
ICAgICAgZm9yICh2YXIgdHlwZUlkIGluIHRoaXMuX3Byb2ZpbGVUeXBlc0J5SWRNYXApCi0gICAg
ICAgICAgICBwcm9maWxlcyA9IHByb2ZpbGVzLmNvbmNhdCh0aGlzLl9wcm9maWxlVHlwZXNCeUlk
TWFwW3R5cGVJZF0uZ2V0UHJvZmlsZXMoKSk7Ci0gICAgICAgIHJldHVybiBwcm9maWxlczsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLlZp
ZXc+fQotICAgICAqLwotICAgIF9zZWFyY2hhYmxlVmlld3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBwcm9maWxlcyA9IHRoaXMuX2dldEFsbFByb2ZpbGVzKCk7Ci0gICAgICAgIHZh
ciBzZWFyY2hhYmxlVmlld3MgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9m
aWxlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHZpZXcgPSBwcm9maWxlc1tpXS52
aWV3KHRoaXMpOwotICAgICAgICAgICAgaWYgKHZpZXcucGVyZm9ybVNlYXJjaCkKLSAgICAgICAg
ICAgICAgICBzZWFyY2hhYmxlVmlld3MucHVzaCh2aWV3KQotICAgICAgICB9Ci0gICAgICAgIHZh
ciBpbmRleCA9IHNlYXJjaGFibGVWaWV3cy5pbmRleE9mKHRoaXMudmlzaWJsZVZpZXcpOwotICAg
ICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgICAgICAvLyBNb3ZlIHZpc2libGVWaWV3IHRv
IHRoZSBmaXJzdCBwb3NpdGlvbi4KLSAgICAgICAgICAgIHNlYXJjaGFibGVWaWV3c1tpbmRleF0g
PSBzZWFyY2hhYmxlVmlld3NbMF07Ci0gICAgICAgICAgICBzZWFyY2hhYmxlVmlld3NbMF0gPSB0
aGlzLnZpc2libGVWaWV3OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzZWFyY2hhYmxlVmll
d3M7Ci0gICAgfSwKLQotICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKHZpZXcsIG1hdGNo
ZXMpCi0gICAgewotICAgICAgICB2aWV3LnByb2ZpbGUuX3Byb2ZpbGVzVHJlZUVsZW1lbnQuc2Vh
cmNoTWF0Y2hlcyA9IG1hdGNoZXM7Ci0gICAgfSwKLQotICAgIHNlYXJjaENhbmNlbGVkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2VhcmNoUmVzdWx0cykgewotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW2ldOwot
ICAgICAgICAgICAgICAgIGlmICh2aWV3LnNlYXJjaENhbmNlbGVkKQotICAgICAgICAgICAgICAg
ICAgICB2aWV3LnNlYXJjaENhbmNlbGVkKCk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHZpZXcu
Y3VycmVudFF1ZXJ5OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgV2ViSW5z
cGVjdG9yLlBhbmVsLnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZC5jYWxsKHRoaXMpOwotCi0gICAg
ICAgIGlmICh0aGlzLl9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXIpIHsKLSAg
ICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJ
ZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50U2VhcmNoQ2h1bmtJ
bnRlcnZhbElkZW50aWZpZXI7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl90b3RhbFNlYXJj
aE1hdGNoZXMgPSAwOwotICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAw
OwotICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107Ci0KLSAgICAgICAgdmFyIHByb2Zp
bGVzID0gdGhpcy5fZ2V0QWxsUHJvZmlsZXMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwcm9maWxlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHByb2ZpbGVzW2ldLl9wcm9maWxl
c1RyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXMgPSAwOwotICAgIH0sCi0KLSAgICBfdXBkYXRlSW50
ZXJmYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogUmVwbGFjZSBQcm9m
aWxlVHlwZS1zcGVjaWZpYyBidXR0b24gdmlzaWJpbGl0eSBjaGFuZ2VzIGJ5IGEgc2luZ2xlIFBy
b2ZpbGVUeXBlLWFnbm9zdGljICJjb21iby1idXR0b24iIHZpc2liaWxpdHkgY2hhbmdlLgotICAg
ICAgICBpZiAodGhpcy5fcHJvZmlsZXJFbmFibGVkKSB7Ci0gICAgICAgICAgICB0aGlzLmVuYWJs
ZVRvZ2dsZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJvZmlsaW5nIGVu
YWJsZWQuIENsaWNrIHRvIGRpc2FibGUuIik7Ci0gICAgICAgICAgICB0aGlzLmVuYWJsZVRvZ2ds
ZUJ1dHRvbi50b2dnbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMucmVjb3JkQnV0dG9uLnZp
c2libGUgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5fcHJvZmlsZVZpZXdTdGF0dXNCYXJJdGVt
c0NvbnRhaW5lci5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAgIHRoaXMu
Y2xlYXJSZXN1bHRzQnV0dG9uLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0g
ICAgICAgICAgICB0aGlzLnBhbmVsRW5hYmxlclZpZXcuZGV0YWNoKCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRvbi50aXRsZSA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiUHJvZmlsaW5nIGRpc2FibGVkLiBDbGljayB0byBlbmFibGUuIik7Ci0g
ICAgICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRvbi50b2dnbGVkID0gZmFsc2U7Ci0gICAg
ICAgICAgICB0aGlzLnJlY29yZEJ1dHRvbi52aXNpYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICB0
aGlzLl9wcm9maWxlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLmFkZFN0eWxlQ2xhc3MoImhp
ZGRlbiIpOwotICAgICAgICAgICAgdGhpcy5jbGVhclJlc3VsdHNCdXR0b24uZWxlbWVudC5hZGRT
dHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAgIHRoaXMucGFuZWxFbmFibGVyVmlldy5z
aG93KHRoaXMuZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0IHByb2ZpbGVy
RW5hYmxlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcHJvZmlsZXJFbmFibGVkOwot
ICAgIH0sCi0KLSAgICBlbmFibGVQcm9maWxlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX3Byb2ZpbGVyRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dGhpcy5fdG9nZ2xlUHJvZmlsaW5nKHRoaXMucGFuZWxFbmFibGVyVmlldy5hbHdheXNFbmFibGVk
KTsKLSAgICB9LAotCi0gICAgZGlzYWJsZVByb2ZpbGVyOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMuX3Byb2ZpbGVyRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy5fdG9nZ2xlUHJvZmlsaW5nKHRoaXMucGFuZWxFbmFibGVyVmlldy5hbHdheXNF
bmFibGVkKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
RXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uVG9nZ2xlUHJvZmlsaW5nOiBmdW5jdGlvbihl
dmVudCkgewotICAgICAgICB0aGlzLl90b2dnbGVQcm9maWxpbmcodHJ1ZSk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWx3YXlzCi0gICAgICovCi0gICAgX3Rv
Z2dsZVByb2ZpbGluZzogZnVuY3Rpb24oYWx3YXlzKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X3Byb2ZpbGVyRW5hYmxlZCkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnBy
b2ZpbGVyRW5hYmxlZC5zZXQoZmFsc2UpOwotICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5kaXNh
YmxlKHRoaXMuX3Byb2ZpbGVyV2FzRGlzYWJsZWQuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvZmlsZXJFbmFibGVkLnNl
dChhbHdheXMpOwotICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5lbmFibGUodGhpcy5fcHJvZmls
ZXJXYXNFbmFibGVkLmJpbmQodGhpcykpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBz
aWRlYmFyUmVzaXplZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgc2lkZWJh
cldpZHRoID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgdGhp
cy5fcmVzaXplKHNpZGViYXJXaWR0aCk7Ci0gICAgfSwKLQotICAgIG9uUmVzaXplOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9yZXNpemUodGhpcy5zcGxpdFZpZXcuc2lkZWJhcldp
ZHRoKCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc2lkZWJh
cldpZHRoCi0gICAgICovCi0gICAgX3Jlc2l6ZTogZnVuY3Rpb24oc2lkZWJhcldpZHRoKQotICAg
IHsKLSAgICAgICAgdmFyIGxhc3RJdGVtRWxlbWVudCA9IHRoaXMuX3N0YXR1c0JhckJ1dHRvbnNb
dGhpcy5fc3RhdHVzQmFyQnV0dG9ucy5sZW5ndGggLSAxXS5lbGVtZW50OwotICAgICAgICB2YXIg
bGVmdCA9IGxhc3RJdGVtRWxlbWVudC50b3RhbE9mZnNldExlZnQoKSArIGxhc3RJdGVtRWxlbWVu
dC5vZmZzZXRXaWR0aDsKLSAgICAgICAgdGhpcy5fcHJvZmlsZVR5cGVTdGF0dXNCYXJJdGVtc0Nv
bnRhaW5lci5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7Ci0gICAgICAgIGxlZnQgKz0gdGhpcy5f
cHJvZmlsZVR5cGVTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5vZmZzZXRXaWR0aCAtIDE7Ci0gICAg
ICAgIHRoaXMuX3Byb2ZpbGVWaWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIuc3R5bGUubGVmdCA9
IE1hdGgubWF4KGxlZnQsIHNpZGViYXJXaWR0aCkgKyAicHgiOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvZmlsZVR5cGUKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW59IGlzUHJvZmlsaW5nCi0gICAgICovCi0gICAgc2V0UmVjb3JkaW5nUHJvZmlsZTogZnVuY3Rp
b24ocHJvZmlsZVR5cGUsIGlzUHJvZmlsaW5nKQotICAgIHsKLSAgICAgICAgdmFyIHByb2ZpbGVU
eXBlT2JqZWN0ID0gdGhpcy5nZXRQcm9maWxlVHlwZShwcm9maWxlVHlwZSk7Ci0gICAgICAgIHRo
aXMucmVjb3JkQnV0dG9uLnRvZ2dsZWQgPSBpc1Byb2ZpbGluZzsKLSAgICAgICAgdGhpcy5yZWNv
cmRCdXR0b24udGl0bGUgPSBwcm9maWxlVHlwZU9iamVjdC5idXR0b25Ub29sdGlwOwotICAgICAg
ICBpZiAoaXNQcm9maWxpbmcpIHsKLSAgICAgICAgICAgIHRoaXMuX2xhdW5jaGVyVmlldy5wcm9m
aWxlU3RhcnRlZCgpOwotICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZShw
cm9maWxlVHlwZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fbGF1bmNoZXJW
aWV3LnByb2ZpbGVGaW5pc2hlZCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
eyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBkb25lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsCi0gICAgICovCi0gICAgX3Jl
cG9ydFByb2ZpbGVQcm9ncmVzczogZnVuY3Rpb24ocHJvZmlsZSwgZG9uZSwgdG90YWwpCi0gICAg
ewotICAgICAgICBwcm9maWxlLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIlLjBmJSIsIChkb25lIC8gdG90YWwpICogMTAwKTsKLSAgICAgICAgcHJvZmls
ZS5zaWRlYmFyRWxlbWVudC53YWl0ID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqIAotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51fSBjb250ZXh0TWVudQotICAgICAqIEBw
YXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgKi8KLSAgICBhcHBlbmRBcHBsaWNhYmxlSXRlbXM6
IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0TWVudSwgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgaWYg
KFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpICE9PSB0aGlzKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBvYmplY3QgPSAvKiogQHR5cGUge1dlYklu
c3BlY3Rvci5SZW1vdGVPYmplY3R9ICovICh0YXJnZXQpOwotICAgICAgICB2YXIgb2JqZWN0SWQg
PSBvYmplY3Qub2JqZWN0SWQ7Ci0gICAgICAgIGlmICghb2JqZWN0SWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgdmFyIGhlYXBQcm9maWxlcyA9IHRoaXMuZ2V0UHJvZmlsZVR5cGUo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCkuZ2V0UHJvZmlsZXMo
KTsKLSAgICAgICAgaWYgKCFoZWFwUHJvZmlsZXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGZ1bmN0aW9uIHJldmVhbEluVmlldyh2aWV3TmFtZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgSGVhcFByb2ZpbGVyQWdlbnQuZ2V0SGVhcE9iamVjdElkKG9iamVjdElkLCBk
aWRSZWNlaXZlSGVhcE9iamVjdElkLmJpbmQodGhpcywgdmlld05hbWUpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIGRpZFJlY2VpdmVIZWFwT2JqZWN0SWQodmlld05hbWUsIGVycm9y
LCByZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaW5zcGVj
dG9yVmlldy5jdXJyZW50UGFuZWwoKSAhPT0gdGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBpZiAoIWVycm9yKQotICAgICAgICAgICAgICAgIHRoaXMuc2hvd09iamVj
dChyZXN1bHQsIHZpZXdOYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHRNZW51LmFw
cGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VN
ZW51VGl0bGVzKCkgPyAiUmV2ZWFsIGluIERvbWluYXRvcnMgdmlldyIgOiAiUmV2ZWFsIGluIERv
bWluYXRvcnMgVmlldyIpLCByZXZlYWxJblZpZXcuYmluZCh0aGlzLCAiRG9taW5hdG9ycyIpKTsK
LSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2Vi
SW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJSZXZlYWwgaW4gU3VtbWFyeSB2
aWV3IiA6ICJSZXZlYWwgaW4gU3VtbWFyeSBWaWV3IiksIHJldmVhbEluVmlldy5iaW5kKHRoaXMs
ICJTdW1tYXJ5IikpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5QYW5l
bC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50fQotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlBy
b2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZUZvcm1hdAotICog
QHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZQotICovCi1XZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGVi
YXJUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb2ZpbGUsIHRpdGxlRm9ybWF0LCBjbGFzc05hbWUp
Ci17Ci0gICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTsKLSAgICB0aGlzLl90aXRsZUZvcm1hdCA9
IHRpdGxlRm9ybWF0OwotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsRGVzY3Jp
cHRvci5pc1VzZXJJbml0aWF0ZWRQcm9maWxlKHRoaXMucHJvZmlsZS50aXRsZSkpCi0gICAgICAg
IHRoaXMuX3Byb2ZpbGVOdW1iZXIgPSBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbERlc2NyaXB0
b3IudXNlckluaXRpYXRlZFByb2ZpbGVJbmRleCh0aGlzLnByb2ZpbGUudGl0bGUpOwotCi0gICAg
V2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5jYWxsKHRoaXMsIGNsYXNzTmFtZSwgIiIs
ICIiLCBwcm9maWxlLCBmYWxzZSk7Ci0KLSAgICB0aGlzLnJlZnJlc2hUaXRsZXMoKTsKLX0KLQot
V2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewotICAg
IG9uc2VsZWN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3N1cHByZXNz
T25TZWxlY3QpCi0gICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnBhbmVsLl9zaG93UHJvZmls
ZSh0aGlzLnByb2ZpbGUpOwotICAgIH0sCi0KLSAgICBvbmRlbGV0ZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy50cmVlT3V0bGluZS5wYW5lbC5fcmVtb3ZlUHJvZmlsZUhlYWRlcih0
aGlzLnByb2ZpbGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgZ2V0IG1h
aW5UaXRsZSgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbWFpblRpdGxlKQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX21haW5UaXRsZTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Qcm9m
aWxlc1BhbmVsRGVzY3JpcHRvci5pc1VzZXJJbml0aWF0ZWRQcm9maWxlKHRoaXMucHJvZmlsZS50
aXRsZSkpCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKHRoaXMuX3Rp
dGxlRm9ybWF0LCB0aGlzLl9wcm9maWxlTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIHRoaXMucHJv
ZmlsZS50aXRsZTsKLSAgICB9LAotCi0gICAgc2V0IG1haW5UaXRsZSh4KQotICAgIHsKLSAgICAg
ICAgdGhpcy5fbWFpblRpdGxlID0geDsKLSAgICAgICAgdGhpcy5yZWZyZXNoVGl0bGVzKCk7Ci0g
ICAgfSwKLQotICAgIHNldCBzZWFyY2hNYXRjaGVzKG1hdGNoZXMpCi0gICAgewotICAgICAgICBp
ZiAoIW1hdGNoZXMpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5idWJibGVFbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHRoaXMuYnViYmxlRWxlbWVudC5yZW1v
dmVTdHlsZUNsYXNzKCJzZWFyY2gtbWF0Y2hlcyIpOwotICAgICAgICAgICAgdGhpcy5idWJibGVU
ZXh0ID0gIiI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
LmJ1YmJsZVRleHQgPSBtYXRjaGVzOwotICAgICAgICB0aGlzLmJ1YmJsZUVsZW1lbnQuYWRkU3R5
bGVDbGFzcygic2VhcmNoLW1hdGNoZXMiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHshRXZlbnR9IGV2ZW50Ci0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWx9IHBhbmVsCi0gICAgICovCi0gICAgaGFuZGxlQ29udGV4dE1lbnVFdmVudDogZnVuY3Rp
b24oZXZlbnQsIHBhbmVsKQotICAgIHsKLSAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLnByb2Zp
bGU7Ci0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1l
bnUoZXZlbnQpOwotICAgICAgICAvLyBGSVhNRTogdXNlIGNvbnRleHQgbWVudSBwcm92aWRlcgot
ICAgICAgICBpZiAocHJvZmlsZS5jYW5TYXZlVG9GaWxlKCkpIHsKLSAgICAgICAgICAgIGNvbnRl
eHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VM
b3dlckNhc2VNZW51VGl0bGVzKCkgPyAiU2F2ZSBoZWFwIHNuYXBzaG90XHUyMDI2IiA6ICJTYXZl
IEhlYXAgU25hcHNob3RcdTIwMjYiKSwgcHJvZmlsZS5zYXZlVG9GaWxlLmJpbmQocHJvZmlsZSkp
OwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJMb2FkIGhlYXAgc25h
cHNob3RcdTIwMjYiIDogIkxvYWQgSGVhcCBTbmFwc2hvdFx1MjAyNiIpLCBwYW5lbC5fZmlsZVNl
bGVjdG9yRWxlbWVudC5jbGljay5iaW5kKHBhbmVsLl9maWxlU2VsZWN0b3JFbGVtZW50KSk7Ci0g
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhX
ZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkRlbGV0ZSBoZWFwIHNuYXBz
aG90IiA6ICJEZWxldGUgSGVhcCBTbmFwc2hvdCIpLCB0aGlzLm9uZGVsZXRlLmJpbmQodGhpcykp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMo
KSA/ICJMb2FkIGhlYXAgc25hcHNob3RcdTIwMjYiIDogIkxvYWQgSGVhcCBTbmFwc2hvdFx1MjAy
NiIpLCBwYW5lbC5fZmlsZVNlbGVjdG9yRWxlbWVudC5jbGljay5iaW5kKHBhbmVsLl9maWxlU2Vs
ZWN0b3JFbGVtZW50KSk7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYklu
c3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8g
IkRlbGV0ZSBwcm9maWxlIiA6ICJEZWxldGUgUHJvZmlsZSIpLCB0aGlzLm9uZGVsZXRlLmJpbmQo
dGhpcykpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKLSAgICB9LAot
Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5T
aWRlYmFyVHJlZUVsZW1lbnR9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVs
fSBwYW5lbAotICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlCi0gKiBAcGFyYW0ge3N0cmluZz19IHN1
YnRpdGxlCi0gKi8KLVdlYkluc3BlY3Rvci5Qcm9maWxlR3JvdXBTaWRlYmFyVHJlZUVsZW1lbnQg
PSBmdW5jdGlvbihwYW5lbCwgdGl0bGUsIHN1YnRpdGxlKQotewotICAgIFdlYkluc3BlY3Rvci5T
aWRlYmFyVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAicHJvZmlsZS1ncm91cC1zaWRlYmFyLXRyZWUt
aXRlbSIsIHRpdGxlLCBzdWJ0aXRsZSwgbnVsbCwgdHJ1ZSk7Ci0gICAgdGhpcy5fcGFuZWwgPSBw
YW5lbDsKLX0KLQotV2ViSW5zcGVjdG9yLlByb2ZpbGVHcm91cFNpZGViYXJUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7Ci0gICAgb25zZWxlY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApCi0gICAgICAgICAgICB0aGlzLl9wYW5lbC5fc2hv
d1Byb2ZpbGUodGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdLnByb2ZpbGUp
OwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1l
bnQucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2Vi
SW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudH0KLSAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsfSBwYW5lbAotICovCi1XZWJJbnNwZWN0b3IuUHJvZmlsZXNTaWRlYmFyVHJl
ZUVsZW1lbnQgPSBmdW5jdGlvbihwYW5lbCkKLXsKLSAgICB0aGlzLl9wYW5lbCA9IHBhbmVsOwot
ICAgIHRoaXMuc21hbGwgPSBmYWxzZTsKLQotICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVs
ZW1lbnQuY2FsbCh0aGlzLCAicHJvZmlsZS1sYXVuY2hlci12aWV3LXRyZWUtaXRlbSIsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiUHJvZmlsZXMiKSwgIiIsIG51bGwsIGZhbHNlKTsKLX0KLQotV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBv
bnNlbGVjdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFuZWwuX3Nob3dMYXVu
Y2hlclZpZXcoKTsKLSAgICB9LAotCi0gICAgZ2V0IHNlbGVjdGFibGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNp
ZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfQotICovCi1XZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZXJQYW5lbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbC5jYWxsKHRoaXMsICJjcHUtcHJvZmlsZXIiLCBuZXcgV2ViSW5zcGVjdG9yLkNQ
VVByb2ZpbGVUeXBlKCkpOwotfQotCi1XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZXJQYW5lbC5wcm90
b3R5cGUgPSB7Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90
b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsfQotICovCi1XZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxl
clBhbmVsID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLmNh
bGwodGhpcywgImNzcy1wcm9maWxlciIsIG5ldyBXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9m
aWxlVHlwZSgpKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZXJQYW5lbC5w
cm90b3R5cGUgPSB7Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5w
cm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5Qcm9maWxlc1BhbmVsfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVyUGFu
ZWwgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwuY2FsbCh0
aGlzLCAiaGVhcC1wcm9maWxlciIsIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUoKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZXJQYW5lbC5wcm90b3R5cGUg
PSB7Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUK
LX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsfQotICovCi1XZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZXJQYW5lbCA9IGZ1
bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5jYWxsKHRoaXMsICJj
YW52YXMtcHJvZmlsZXIiLCBuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlKCkpOwot
fQotCi1XZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZXJQYW5lbC5wcm90b3R5cGUgPSB7Ci0gICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUKLX0KLQotCi1p
bXBvcnRTY3JpcHQoIlByb2ZpbGVEYXRhR3JpZFRyZWUuanMiKTsKLWltcG9ydFNjcmlwdCgiQm90
dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzIik7Ci1pbXBvcnRTY3JpcHQoIkNQVVByb2ZpbGVW
aWV3LmpzIik7Ci1pbXBvcnRTY3JpcHQoIkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMiKTsKLWlt
cG9ydFNjcmlwdCgiRmxhbWVDaGFydC5qcyIpOwotaW1wb3J0U2NyaXB0KCJIZWFwU25hcHNob3Qu
anMiKTsKLWltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzIik7Ci1pbXBvcnRT
Y3JpcHQoIkhlYXBTbmFwc2hvdEdyaWROb2Rlcy5qcyIpOwotaW1wb3J0U2NyaXB0KCJIZWFwU25h
cHNob3RMb2FkZXIuanMiKTsKLWltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90UHJveHkuanMiKTsK
LWltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90Vmlldy5qcyIpOwotaW1wb3J0U2NyaXB0KCJIZWFw
U25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIik7Ci1pbXBvcnRTY3JpcHQoIkpTSGVhcFNuYXBz
aG90LmpzIik7Ci1pbXBvcnRTY3JpcHQoIk5hdGl2ZUhlYXBTbmFwc2hvdC5qcyIpOwotaW1wb3J0
U2NyaXB0KCJQcm9maWxlTGF1bmNoZXJWaWV3LmpzIik7Ci1pbXBvcnRTY3JpcHQoIlRvcERvd25Q
cm9maWxlRGF0YUdyaWRUcmVlLmpzIik7Ci1pbXBvcnRTY3JpcHQoIkNhbnZhc1Byb2ZpbGVWaWV3
LmpzIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1By
b2ZpbGVzUGFuZWxEZXNjcmlwdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Qcm9maWxlc1BhbmVsRGVzY3JpcHRvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWMzMGE5MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Byb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBHT09HTEUgSU5DLgotICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVu
ZHMge1dlYkluc3BlY3Rvci5QYW5lbERlc2NyaXB0b3J9Ci0gKi8KLVdlYkluc3BlY3Rvci5Qcm9m
aWxlc1BhbmVsRGVzY3JpcHRvciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUGFu
ZWxEZXNjcmlwdG9yLmNhbGwodGhpcywgInByb2ZpbGVzIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJQcm9maWxlcyIpLCAiUHJvZmlsZXNQYW5lbCIsICJQcm9maWxlc1BhbmVsLmpzIik7Ci19Ci0K
LVdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsRGVzY3JpcHRvci5wcm90b3R5cGUgPSB7Ci0gICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuUGFuZWxEZXNjcmlwdG9yLnByb3RvdHlwZQotfQotCi1X
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbERlc2NyaXB0b3IuUHJvZmlsZVVSTFJlZ0V4cCA9IC93
ZWJraXQtcHJvZmlsZTpcL1wvKC4rKVwvKC4rKSMoWzAtOV0rKS87Ci0KLVdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsRGVzY3JpcHRvci5Vc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndl
YmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9
IHRpdGxlCi0gKiBAcmV0dXJuIHtib29sZWFufQotICovCi1XZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbERlc2NyaXB0b3IuaXNVc2VySW5pdGlhdGVkUHJvZmlsZSA9IGZ1bmN0aW9uKHRpdGxlKQot
ewotICAgIHJldHVybiB0aXRsZS5zdGFydHNXaXRoKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVs
RGVzY3JpcHRvci5Vc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUpOwotfQotCi0vKioKLSAqIEBwYXJh
bSB7c3RyaW5nfSB0aXRsZQotICogQHJldHVybiB7bnVtYmVyfQotICogQHRocm93cyB7c3RyaW5n
fQotICovCi1XZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbERlc2NyaXB0b3IudXNlckluaXRpYXRl
ZFByb2ZpbGVJbmRleCA9IGZ1bmN0aW9uKHRpdGxlKQotewotICAgIGlmICghV2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLmlzVXNlckluaXRpYXRlZFByb2ZpbGUodGl0bGUpKQot
ICAgICAgICB0aHJvdyAiTm90IHVzZXItaW5pdGlhdGVkIHByb2ZpbGUgdGl0bGUuIjsKLSAgICB2
YXIgc3VmZml4ID0gdGl0bGUuc3Vic3RyaW5nKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsRGVz
Y3JpcHRvci5Vc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUubGVuZ3RoICsgMSk7Ci0gICAgcmV0dXJu
IHBhcnNlSW50KHN1ZmZpeCwgMTApOwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB0aXRs
ZQotICogQHJldHVybiB7c3RyaW5nfQotICovCi1XZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbERl
c2NyaXB0b3IucmVzb2x2ZVByb2ZpbGVUaXRsZSA9IGZ1bmN0aW9uKHRpdGxlKQotewotICAgIGlm
ICghV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLmlzVXNlckluaXRpYXRlZFBy
b2ZpbGUodGl0bGUpKQotICAgICAgICByZXR1cm4gdGl0bGU7Ci0gICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiUHJvZmlsZSAlZCIsIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsRGVz
Y3JpcHRvci51c2VySW5pdGlhdGVkUHJvZmlsZUluZGV4KHRpdGxlKSk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2dyZXNzLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9ncmVzcy5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGNkMDUwOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Byb2dyZXNzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotV2ViSW5zcGVjdG9yLlByb2dyZXNzID0gZnVuY3Rp
b24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuUHJvZ3Jlc3MucHJvdG90eXBlID0gewotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFdvcmsKLSAgICAgKi8KLSAgICBzZXRUb3Rh
bFdvcms6IGZ1bmN0aW9uKHRvdGFsV29yaykgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IHRpdGxlCi0gICAgICovCi0gICAgc2V0VGl0bGU6IGZ1bmN0aW9uKHRpdGxlKSB7
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ya2VkCi0gICAgICogQHBh
cmFtIHtzdHJpbmc9fSB0aXRsZQotICAgICAqLwotICAgIHNldFdvcmtlZDogZnVuY3Rpb24od29y
a2VkLCB0aXRsZSkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSB3b3Jr
ZWQKLSAgICAgKi8KLSAgICB3b3JrZWQ6IGZ1bmN0aW9uKHdvcmtlZCkgeyB9LAotCi0gICAgZG9u
ZTogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQot
ICAgICAqLwotICAgIGlzQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2dyZXNz
fSBwYXJlbnQKLSAqLwotV2ViSW5zcGVjdG9yLkNvbXBvc2l0ZVByb2dyZXNzID0gZnVuY3Rpb24o
cGFyZW50KQotewotICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDsKLSAgICB0aGlzLl9jaGlsZHJl
biA9IFtdOwotICAgIHRoaXMuX2NoaWxkcmVuRG9uZSA9IDA7Ci0gICAgdGhpcy5fcGFyZW50LnNl
dFRvdGFsV29yaygxKTsKLSAgICB0aGlzLl9wYXJlbnQuc2V0V29ya2VkKDApOwotfQotCi1XZWJJ
bnNwZWN0b3IuQ29tcG9zaXRlUHJvZ3Jlc3MucHJvdG90eXBlID0gewotICAgIF9jaGlsZERvbmU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICgrK3RoaXMuX2NoaWxkcmVuRG9uZSA9PT0g
dGhpcy5fY2hpbGRyZW4ubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fcGFyZW50LmRvbmUoKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSB3ZWlnaHQKLSAgICAg
Ki8KLSAgICBjcmVhdGVTdWJQcm9ncmVzczogZnVuY3Rpb24od2VpZ2h0KQotICAgIHsKLSAgICAg
ICAgdmFyIGNoaWxkID0gbmV3IFdlYkluc3BlY3Rvci5TdWJQcm9ncmVzcyh0aGlzLCB3ZWlnaHQp
OwotICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNoaWxkKTsKLSAgICAgICAgcmV0dXJuIGNo
aWxkOwotICAgIH0sCi0KLSAgICBfdXBkYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgdG90YWxXZWlnaHRzID0gMDsKLSAgICAgICAgdmFyIGRvbmUgPSAwOwotCi0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIHZhciBjaGlsZCA9IHRoaXMuX2NoaWxkcmVuW2ldOwotICAgICAgICAgICAgaWYgKGNoaWxk
Ll90b3RhbFdvcmspCi0gICAgICAgICAgICAgICAgZG9uZSArPSBjaGlsZC5fd2VpZ2h0ICogY2hp
bGQuX3dvcmtlZCAvIGNoaWxkLl90b3RhbFdvcms7Ci0gICAgICAgICAgICB0b3RhbFdlaWdodHMg
Kz0gY2hpbGQuX3dlaWdodDsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9wYXJlbnQuc2V0V29y
a2VkKGRvbmUgLyB0b3RhbFdlaWdodHMpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuUHJvZ3Jlc3N9Ci0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5Db21wb3NpdGVQcm9ncmVzc30gY29tcG9zaXRlCi0gKiBAcGFyYW0ge251bWJl
cj19IHdlaWdodAotICovCi1XZWJJbnNwZWN0b3IuU3ViUHJvZ3Jlc3MgPSBmdW5jdGlvbihjb21w
b3NpdGUsIHdlaWdodCkKLXsKLSAgICB0aGlzLl9jb21wb3NpdGUgPSBjb21wb3NpdGU7Ci0gICAg
dGhpcy5fd2VpZ2h0ID0gd2VpZ2h0IHx8IDE7Ci0gICAgdGhpcy5fd29ya2VkID0gMDsKLX0KLQot
V2ViSW5zcGVjdG9yLlN1YlByb2dyZXNzLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb21wb3NpdGUuX3BhcmVudC5pc0NhbmNlbGVkKCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICAgICAq
LwotICAgIHNldFRpdGxlOiBmdW5jdGlvbih0aXRsZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Nv
bXBvc2l0ZS5fcGFyZW50LnNldFRpdGxlKHRpdGxlKTsKLSAgICB9LAotCi0gICAgZG9uZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5zZXRXb3JrZWQodGhpcy5fdG90YWxXb3JrKTsK
LSAgICAgICAgdGhpcy5fY29tcG9zaXRlLl9jaGlsZERvbmUoKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsV29yawotICAgICAqLwotICAgIHNldFRvdGFs
V29yazogZnVuY3Rpb24odG90YWxXb3JrKQotICAgIHsKLSAgICAgICAgdGhpcy5fdG90YWxXb3Jr
ID0gdG90YWxXb3JrOwotICAgICAgICB0aGlzLl9jb21wb3NpdGUuX3VwZGF0ZSgpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gd29ya2VkCi0gICAgICogQHBhcmFt
IHtzdHJpbmc9fSB0aXRsZQotICAgICAqLwotICAgIHNldFdvcmtlZDogZnVuY3Rpb24od29ya2Vk
LCB0aXRsZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3dvcmtlZCA9IHdvcmtlZDsKLSAgICAgICAg
aWYgKHR5cGVvZiB0aXRsZSAhPT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICB0aGlzLnNldFRp
dGxlKHRpdGxlKTsKLSAgICAgICAgdGhpcy5fY29tcG9zaXRlLl91cGRhdGUoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSB3b3JrZWQKLSAgICAgKi8KLSAgICB3
b3JrZWQ6IGZ1bmN0aW9uKHdvcmtlZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0V29ya2VkKHRo
aXMuX3dvcmtlZCArICh3b3JrZWQgfHwgMSkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZ3Jlc3NJbmRpY2F0b3IuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2dyZXNzSW5kaWNhdG9yLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjlkMmVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZ3Jlc3NJbmRpY2F0b3IuanMKKysrIC9kZXYv
bnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50
cyB7V2ViSW5zcGVjdG9yLlByb2dyZXNzfQotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmpl
Y3R9Ci0gKi8KLVdlYkluc3BlY3Rvci5Qcm9ncmVzc0luZGljYXRvciA9IGZ1bmN0aW9uKCkKLXsK
LSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInByb2dyZXNzLWJhci1jb250YWluZXIiOwotICAgIHRo
aXMuX2xhYmVsRWxlbWVudCA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgic3BhbiIpOwotICAg
IHRoaXMuX3Byb2dyZXNzRWxlbWVudCA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgicHJvZ3Jl
c3MiKTsKLSAgICB0aGlzLl9zdG9wQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJC
dXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDYW5jZWwiKSwgInByb2dyZXNzLWJhci1zdG9w
LWJ1dHRvbiIpOwotICAgIHRoaXMuX3N0b3BCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLmNhbmNlbCwgdGhpcyk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
X3N0b3BCdXR0b24uZWxlbWVudCk7Ci0gICAgdGhpcy5faXNDYW5jZWxlZCA9IGZhbHNlOwotICAg
IHRoaXMuX3dvcmtlZCA9IDA7Ci19Ci0KLVdlYkluc3BlY3Rvci5Qcm9ncmVzc0luZGljYXRvci5F
dmVudHMgPSB7Ci0gICAgRG9uZTogIkRvbmUiCi19Ci0KLVdlYkluc3BlY3Rvci5Qcm9ncmVzc0lu
ZGljYXRvci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSBw
YXJlbnQKLSAgICAgKi8KLSAgICBzaG93OiBmdW5jdGlvbihwYXJlbnQpCi0gICAgewotICAgICAg
ICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKLSAgICB9LAotCi0gICAgaGlkZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuZWxlbWVudC5wYXJl
bnRFbGVtZW50OwotICAgICAgICBpZiAocGFyZW50KQotICAgICAgICAgICAgcGFyZW50LnJlbW92
ZUNoaWxkKHRoaXMuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIGRvbmU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc0RvbmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHRoaXMuX2lzRG9uZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuaGlkZSgpOwotICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUHJvZ3Jlc3NJbmRpY2F0
b3IuRXZlbnRzLkRvbmUpOwotICAgIH0sCi0KLSAgICBjYW5jZWw6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2lzQ2FuY2VsZWQgPSB0cnVlOwotICAgIH0sCi0KLSAgICBpc0NhbmNl
bGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faXNDYW5jZWxlZDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlCi0gICAgICov
Ci0gICAgc2V0VGl0bGU6IGZ1bmN0aW9uKHRpdGxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fbGFi
ZWxFbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSB0b3RhbFdvcmsKLSAgICAgKi8KLSAgICBzZXRUb3RhbFdvcms6IGZ1
bmN0aW9uKHRvdGFsV29yaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2dyZXNzRWxlbWVudC5t
YXggPSB0b3RhbFdvcms7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSB3b3JrZWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRpdGxlCi0gICAgICovCi0gICAgc2V0
V29ya2VkOiBmdW5jdGlvbih3b3JrZWQsIHRpdGxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fd29y
a2VkID0gd29ya2VkOwotICAgICAgICB0aGlzLl9wcm9ncmVzc0VsZW1lbnQudmFsdWUgPSB3b3Jr
ZWQ7Ci0gICAgICAgIGlmICh0aXRsZSkKLSAgICAgICAgICAgIHRoaXMuc2V0VGl0bGUodGl0bGUp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IHdvcmtlZAotICAg
ICAqLwotICAgIHdvcmtlZDogZnVuY3Rpb24od29ya2VkKQotICAgIHsKLSAgICAgICAgdGhpcy5z
ZXRXb3JrZWQodGhpcy5fd29ya2VkICsgKHdvcmtlZCB8fCAxKSk7Ci0gICAgfSwKLQotICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvcGVydGllc1NlY3Rpb24uanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb3BlcnRpZXNTZWN0aW9uLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWE0ZmM0Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvcGVydGllc1NlY3Rpb24uanMKKysrIC9k
ZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRl
bmRzIHtXZWJJbnNwZWN0b3IuU2VjdGlvbn0KLSAqIEBwYXJhbSB7c3RyaW5nfEVsZW1lbnR9IHRp
dGxlCi0gKiBAcGFyYW0ge3N0cmluZz19IHN1YnRpdGxlCi0gKi8KLVdlYkluc3BlY3Rvci5Qcm9w
ZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW9uKHRpdGxlLCBzdWJ0aXRsZSkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuU2VjdGlvbi5jYWxsKHRoaXMsIHRpdGxlLCBzdWJ0aXRsZSk7Ci0KLSAgICB0aGlzLmhl
YWRlckVsZW1lbnQuYWRkU3R5bGVDbGFzcygibW9ub3NwYWNlIik7Ci0gICAgdGhpcy5wcm9wZXJ0
aWVzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7Ci0gICAgdGhpcy5wcm9w
ZXJ0aWVzRWxlbWVudC5jbGFzc05hbWUgPSAicHJvcGVydGllcyBwcm9wZXJ0aWVzLXRyZWUgbW9u
b3NwYWNlIjsKLSAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZSA9IG5ldyBUcmVlT3V0bGlu
ZSh0aGlzLnByb3BlcnRpZXNFbGVtZW50LCB0cnVlKTsKLSAgICB0aGlzLnByb3BlcnRpZXNUcmVl
T3V0bGluZS5zZXRGb2N1c2FibGUoZmFsc2UpOwotICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRs
aW5lLnNlY3Rpb24gPSB0aGlzOwotCi0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
cHJvcGVydGllc0VsZW1lbnQpOwotfQotCi1XZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb24u
cHJvdG90eXBlID0gewotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNlY3Rpb24ucHJvdG90
eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1By
b3BlcnRpZXNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUHJvcGVydGllc1NpZGViYXJQYW5lLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwZjdiYmY2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUHJvcGVydGllc1NpZGViYXJQYW5lLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TaWRl
YmFyUGFuZX0KLSAqLwotV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTaWRlYmFyUGFuZSA9IGZ1bmN0
aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlByb3BlcnRpZXMiKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Qcm9wZXJ0
aWVzU2lkZWJhclBhbmUuX29iamVjdEdyb3VwTmFtZSA9ICJwcm9wZXJ0aWVzLXNpZGViYXItcGFu
ZSI7Ci0KLVdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewot
ICAgIHVwZGF0ZTogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHZhciBib2R5ID0gdGhp
cy5ib2R5RWxlbWVudDsKLQotICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgIGJvZHku
cmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFdlYkluc3BlY3Rvci5SZW1vdGVP
YmplY3QucmVzb2x2ZU5vZGUobm9kZSwgV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTaWRlYmFyUGFu
ZS5fb2JqZWN0R3JvdXBOYW1lLCBub2RlUmVzb2x2ZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAg
ZnVuY3Rpb24gbm9kZVJlc29sdmVkKG9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCFvYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rpb24g
cHJvdG9MaXN0KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSB0
aGlzOwotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7fTsKLSAgICAgICAgICAgICAgICB2
YXIgY291bnRlciA9IDE7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHByb3RvKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFtjb3VudGVyKytdID0gcHJvdG87Ci0gICAgICAgICAgICAgICAg
ICAgIHByb3RvID0gcHJvdG8uX19wcm90b19fOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb2JqZWN0
LmNhbGxGdW5jdGlvbihwcm90b0xpc3QsIHVuZGVmaW5lZCwgbm9kZVByb3RvdHlwZXNSZWFkeS5i
aW5kKHRoaXMpKTsKLSAgICAgICAgICAgIG9iamVjdC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBub2RlUHJvdG90eXBlc1JlYWR5KG9iamVjdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgb2JqZWN0LmdldE93blByb3BlcnRpZXMoZmlsbFNlY3Rpb24uYmluZCh0aGlzKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmaWxsU2VjdGlvbihwcm90b3R5cGVzKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoIXByb3RvdHlwZXMpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMuYm9keUVsZW1lbnQ7Ci0gICAgICAg
ICAgICBib2R5LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICB0aGlzLnNlY3Rpb25zID0g
W107Ci0KLSAgICAgICAgICAgIC8vIEdldCBhcnJheSBvZiBwcm90b3R5cGUgdXNlci1mcmllbmRs
eSBuYW1lcy4KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvdG90eXBlcy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICghcGFyc2VJbnQocHJvdG90eXBlc1tpXS5u
YW1lLCAxMCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAg
ICAgdmFyIHByb3RvdHlwZSA9IHByb3RvdHlwZXNbaV0udmFsdWU7Ci0gICAgICAgICAgICAgICAg
dmFyIHRpdGxlID0gcHJvdG90eXBlLmRlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgIGlmICh0
aXRsZS5tYXRjaCgvUHJvdG90eXBlJC8pKQotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRp
dGxlLnJlcGxhY2UoL1Byb3RvdHlwZSQvLCAiIik7Ci0gICAgICAgICAgICAgICAgdmFyIHNlY3Rp
b24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKHByb3RvdHlwZSwg
dGl0bGUpOwotICAgICAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMucHVzaChzZWN0aW9uKTsKLSAg
ICAgICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
U2lkZWJhclBhbmUucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jhd1NvdXJjZUNvZGUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1Jhd1NvdXJjZUNvZGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZW1vdGVPYmplY3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJj
ODFjZmUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9S
ZW1vdGVPYmplY3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IG9iamVjdElkCi0gKiBAcGFy
YW0ge3N0cmluZ30gdHlwZQotICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBzdWJ0eXBlCi0g
KiBAcGFyYW0geyp9IHZhbHVlCi0gKiBAcGFyYW0ge3N0cmluZz19IGRlc2NyaXB0aW9uCi0gKiBA
cGFyYW0ge1J1bnRpbWVBZ2VudC5PYmplY3RQcmV2aWV3PX0gcHJldmlldwotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuU2NvcGVSZWY9fSBzY29wZVJlZgotICovCi1XZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0SWQsIHR5cGUsIHN1YnR5cGUsIHZhbHVlLCBkZXNjcmlw
dGlvbiwgcHJldmlldywgc2NvcGVSZWYpCi17Ci0gICAgdGhpcy5fdHlwZSA9IHR5cGU7Ci0gICAg
dGhpcy5fc3VidHlwZSA9IHN1YnR5cGU7Ci0gICAgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgIC8v
IGhhbmRsZQotICAgICAgICB0aGlzLl9vYmplY3RJZCA9IG9iamVjdElkOwotICAgICAgICB0aGlz
Ll9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgICAgICB0aGlzLl9oYXNDaGlsZHJlbiA9
IHRydWU7Ci0gICAgICAgIHRoaXMuX3ByZXZpZXcgPSBwcmV2aWV3OwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIFByaW1pdGl2ZSBvciBudWxsIG9iamVjdC4KLSAgICAgICAgY29uc29sZS5hc3Nl
cnQodHlwZSAhPT0gIm9iamVjdCIgfHwgdmFsdWUgPT09IG51bGwpOwotICAgICAgICB0aGlzLl9k
ZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICh2YWx1ZSArICIiKTsKLSAgICAgICAgdGhpcy5f
aGFzQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgIH0K
LSAgICB0aGlzLl9zY29wZVJlZiA9IHNjb3BlUmVmOwotfQotCi0vKioKLSAqIEBwYXJhbSB7bnVt
YmVyfHN0cmluZ3xib29sZWFufSB2YWx1ZQotICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFs
dWUgPSBmdW5jdGlvbih2YWx1ZSkKLXsKLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5SZW1v
dGVPYmplY3QodW5kZWZpbmVkLCB0eXBlb2YgdmFsdWUsIHVuZGVmaW5lZCwgdmFsdWUpOwotfQot
Ci0vKioKLSAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZQotICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LlJlbW90ZU9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tTG9jYWxP
YmplY3QgPSBmdW5jdGlvbih2YWx1ZSkKLXsKLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5M
b2NhbEpTT05PYmplY3QodmFsdWUpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkRPTU5vZGV9IG5vZGUKLSAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RHcm91cAotICogQHBhcmFt
IHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCl9IGNhbGxiYWNrCi0gKi8KLVdl
Ykluc3BlY3Rvci5SZW1vdGVPYmplY3QucmVzb2x2ZU5vZGUgPSBmdW5jdGlvbihub2RlLCBvYmpl
Y3RHcm91cCwgY2FsbGJhY2spCi17Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/UHJvdG9jb2wu
RXJyb3J9IGVycm9yCi0gICAgICogQHBhcmFtIHtSdW50aW1lQWdlbnQuUmVtb3RlT2JqZWN0fSBv
YmplY3QKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBteWNhbGxiYWNrKGVycm9yLCBvYmplY3QpCi0g
ICAgewotICAgICAgICBpZiAoIWNhbGxiYWNrKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGlmIChlcnJvciB8fCAhb2JqZWN0KQotICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVPYmpl
Y3QuZnJvbVBheWxvYWQob2JqZWN0KSk7Ci0gICAgfQotICAgIERPTUFnZW50LnJlc29sdmVOb2Rl
KG5vZGUuaWQsIG9iamVjdEdyb3VwLCBteWNhbGxiYWNrKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0g
e1J1bnRpbWVBZ2VudC5SZW1vdGVPYmplY3Q9fSBwYXlsb2FkCi0gKiBAcmV0dXJuIHtXZWJJbnNw
ZWN0b3IuUmVtb3RlT2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21Q
YXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCkKLXsKLSAgICBjb25zb2xlLmFzc2VydCh0eXBlb2Yg
cGF5bG9hZCA9PT0gIm9iamVjdCIsICJSZW1vdGUgb2JqZWN0IHBheWxvYWQgc2hvdWxkIG9ubHkg
YmUgYW4gb2JqZWN0Iik7Ci0KLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5SZW1vdGVPYmpl
Y3QocGF5bG9hZC5vYmplY3RJZCwgcGF5bG9hZC50eXBlLCBwYXlsb2FkLnN1YnR5cGUsIHBheWxv
YWQudmFsdWUsIHBheWxvYWQuZGVzY3JpcHRpb24sIHBheWxvYWQucHJldmlldyk7Ci19Ci0KLS8q
KgotICogQHBhcmFtIHtSdW50aW1lQWdlbnQuUmVtb3RlT2JqZWN0fSBwYXlsb2FkCi0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5TY29wZVJlZj19IHNjb3BlUmVmCi0gKiBAcmV0dXJuIHtXZWJJbnNw
ZWN0b3IuUmVtb3RlT2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21T
Y29wZVBheWxvYWQgPSBmdW5jdGlvbihwYXlsb2FkLCBzY29wZVJlZikKLXsKLSAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QocGF5bG9hZC5vYmplY3RJZCwgcGF5bG9hZC50
eXBlLCBwYXlsb2FkLnN1YnR5cGUsIHBheWxvYWQudmFsdWUsIHBheWxvYWQuZGVzY3JpcHRpb24s
IHBheWxvYWQucHJldmlldywgc2NvcGVSZWYpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlJlbW90ZU9iamVjdH0gcmVtb3RlT2JqZWN0Ci0gKiBAcmV0dXJuIHtzdHJpbmd9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QudHlwZSA9IGZ1bmN0aW9uKHJlbW90ZU9iamVj
dCkKLXsKLSAgICBpZiAocmVtb3RlT2JqZWN0ID09PSBudWxsKQotICAgICAgICByZXR1cm4gIm51
bGwiOwotCi0gICAgdmFyIHR5cGUgPSB0eXBlb2YgcmVtb3RlT2JqZWN0OwotICAgIGlmICh0eXBl
ICE9PSAib2JqZWN0IiAmJiB0eXBlICE9PSAiZnVuY3Rpb24iKQotICAgICAgICByZXR1cm4gdHlw
ZTsKLQotICAgIHJldHVybiByZW1vdGVPYmplY3QudHlwZTsKLX0KLQotV2ViSW5zcGVjdG9yLlJl
bW90ZU9iamVjdC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqIEByZXR1cm4ge1J1bnRpbWVBZ2VudC5S
ZW1vdGVPYmplY3RJZH0gKi8KLSAgICBnZXQgb2JqZWN0SWQoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX29iamVjdElkOwotICAgIH0sCi0KLSAgICAvKiogQHJldHVybiB7c3RyaW5nfSAq
LwotICAgIGdldCB0eXBlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90eXBlOwotICAg
IH0sCi0KLSAgICAvKiogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH0gKi8KLSAgICBnZXQgc3Vi
dHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3VidHlwZTsKLSAgICB9LAotCi0g
ICAgLyoqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9ICovCi0gICAgZ2V0IGRlc2NyaXB0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbjsKLSAgICB9LAotCi0g
ICAgLyoqIEByZXR1cm4ge2Jvb2xlYW59ICovCi0gICAgZ2V0IGhhc0NoaWxkcmVuKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9oYXNDaGlsZHJlbjsKLSAgICB9LAotCi0gICAgLyoqIEBy
ZXR1cm4ge1J1bnRpbWVBZ2VudC5PYmplY3RQcmV2aWV3fHVuZGVmaW5lZH0gKi8KLSAgICBnZXQg
cHJldmlldygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcHJldmlldzsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48V2ViSW5zcGVjdG9yLlJl
bW90ZU9iamVjdFByb3BlcnR5PiwgQXJyYXkuPFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9w
ZXJ0eT49KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBnZXRPd25Qcm9wZXJ0aWVzOiBmdW5jdGlv
bihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2dldFByb3BlcnRpZXModHJ1ZSwgY2Fs
bGJhY2spOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5
LjxXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHk+LCBBcnJheS48V2ViSW5zcGVjdG9y
LlJlbW90ZU9iamVjdFByb3BlcnR5Pj0pfSBjYWxsYmFjawotICAgICAqLwotICAgIGdldEFsbFBy
b3BlcnRpZXM6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdGhpcy5fZ2V0UHJv
cGVydGllcyhmYWxzZSwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IG93blByb3BlcnRpZXMKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5
LjxXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHk+LCBBcnJheS48V2ViSW5zcGVjdG9y
LlJlbW90ZU9iamVjdFByb3BlcnR5Pj0pfSBjYWxsYmFjawotICAgICAqLwotICAgIF9nZXRQcm9w
ZXJ0aWVzOiBmdW5jdGlvbihvd25Qcm9wZXJ0aWVzLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5fb2JqZWN0SWQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFtdKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFy
YW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtBcnJheS48UnVu
dGltZUFnZW50LlByb3BlcnR5RGVzY3JpcHRvcj59IHByb3BlcnRpZXMKLSAgICAgICAgICogQHBh
cmFtIHtBcnJheS48UnVudGltZUFnZW50LkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj19IGlu
dGVybmFsUHJvcGVydGllcwotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVtb3RlT2Jq
ZWN0QmluZGVyKGVycm9yLCBwcm9wZXJ0aWVzLCBpbnRlcm5hbFByb3BlcnRpZXMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51
bGwpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBwcm9wZXJ0aWVz
ICYmIGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBy
b3BlcnR5ID0gcHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuZ2V0
IHx8IHByb3BlcnR5LnNldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuZ2V0
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFdlYkluc3BlY3Rvci5S
ZW1vdGVPYmplY3RQcm9wZXJ0eSgiZ2V0ICIgKyBwcm9wZXJ0eS5uYW1lLCBXZWJJbnNwZWN0b3Iu
UmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHByb3BlcnR5LmdldCksIHByb3BlcnR5KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5zZXQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQucHVzaChuZXcgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdFByb3BlcnR5KCJzZXQg
IiArIHByb3BlcnR5Lm5hbWUsIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQo
cHJvcGVydHkuc2V0KSwgcHJvcGVydHkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQ
cm9wZXJ0eShwcm9wZXJ0eS5uYW1lLCBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXls
b2FkKHByb3BlcnR5LnZhbHVlKSwgcHJvcGVydHkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhciBpbnRlcm5hbFByb3BlcnRpZXNSZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoaW50ZXJu
YWxQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxQcm9wZXJ0aWVzUmVzdWx0
ID0gW107Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRlcm5hbFByb3Bl
cnRpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0g
aW50ZXJuYWxQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFByb3Bl
cnRpZXNSZXN1bHQucHVzaChuZXcgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdFByb3BlcnR5KHBy
b3BlcnR5Lm5hbWUsIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocHJvcGVy
dHkudmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0LCBpbnRlcm5hbFByb3BlcnRpZXNSZXN1bHQpOwotICAgICAgICB9
Ci0gICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRQcm9wZXJ0aWVzKHRoaXMuX29iamVjdElkLCBvd25Q
cm9wZXJ0aWVzLCByZW1vdGVPYmplY3RCaW5kZXIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQotICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nPSl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgc2V0
UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUsIGNhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9vYmplY3RJZCkgewotICAgICAgICAgICAgY2FsbGJhY2soIkNhbid0
IHNldCBhIHByb3BlcnR5IG9mIG5vbi1vYmplY3QuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVhdGUuaW52b2tlKHtleHByZXNz
aW9uOnZhbHVlLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGU6dHJ1ZX0sIGV2
YWx1YXRlZENhbGxiYWNrLmJpbmQodGhpcykpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBA
cGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtSdW50aW1l
QWdlbnQuUmVtb3RlT2JqZWN0fSByZXN1bHQKLSAgICAgICAgICogQHBhcmFtIHtib29sZWFuPX0g
d2FzVGhyb3duCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBldmFsdWF0ZWRDYWxsYmFj
ayhlcnJvciwgcmVzdWx0LCB3YXNUaHJvd24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChl
cnJvciB8fCB3YXNUaHJvd24pIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvciB8fCBy
ZXN1bHQuZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgdGhpcy5fc2V0T2JqZWN0UHJvcGVydHlWYWx1
ZShyZXN1bHQsIG5hbWUsIGNhbGxiYWNrKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdC5fb2Jq
ZWN0SWQpCi0gICAgICAgICAgICAgICAgUnVudGltZUFnZW50LnJlbGVhc2VPYmplY3QocmVzdWx0
Ll9vYmplY3RJZCk7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIAotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gcmVzdWx0Ci0gICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZz0pfSBjYWxsYmFjawot
ICAgICAqLwotICAgIF9zZXRPYmplY3RQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihyZXN1bHQsIG5h
bWUsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IGl0IGlzIG5vdCB0aGF0
IHNpbXBsZSB3aXRoIGFjY2Vzc29yIHByb3BlcnRpZXMuIFRoZSBwcm90byBvYmplY3QgbWF5IGNv
bnRhaW4gdGhlIHByb3BlcnR5LAotICAgICAgICAvLyBob3dldmVyIG5vdCB0aGUgcHJvdG8gb2Jq
ZWN0IG11c3QgYmUgJ3RoaXMnLCBidXQgdGhlIG1haW4gb2JqZWN0LiAKLSAgICAgICAgdmFyIHNl
dFByb3BlcnR5VmFsdWVGdW5jdGlvbiA9ICJmdW5jdGlvbihhLCBiKSB7IHRoaXNbYV0gPSBiOyB9
IjsKLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIE5hTiwgSW5maW5pdHkgYW5kIC1JbmZp
bml0eQotICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT09ICJudW1iZXIiICYmIHR5cGVvZiByZXN1
bHQudmFsdWUgIT09ICJudW1iZXIiKQotICAgICAgICAgICAgc2V0UHJvcGVydHlWYWx1ZUZ1bmN0
aW9uID0gImZ1bmN0aW9uKGEpIHsgdGhpc1thXSA9ICIgKyByZXN1bHQuZGVzY3JpcHRpb24gKyAi
OyB9IjsKLQotICAgICAgICBkZWxldGUgcmVzdWx0LmRlc2NyaXB0aW9uOyAvLyBPcHRpbWl6ZSBv
biB0cmFmZmljLgotICAgICAgICBSdW50aW1lQWdlbnQuY2FsbEZ1bmN0aW9uT24odGhpcy5fb2Jq
ZWN0SWQsIHNldFByb3BlcnR5VmFsdWVGdW5jdGlvbiwgW3sgdmFsdWU6bmFtZSB9LCByZXN1bHRd
LCB0cnVlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcHJvcGVydHlTZXRDYWxsYmFjay5iaW5kKHRo
aXMpKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9
IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7UnVudGltZUFnZW50LlJlbW90ZU9iamVjdH0gcmVz
dWx0Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHdhc1Rocm93bgotICAgICAgICAgKi8K
LSAgICAgICAgZnVuY3Rpb24gcHJvcGVydHlTZXRDYWxsYmFjayhlcnJvciwgcmVzdWx0LCB3YXNU
aHJvd24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvciB8fCB3YXNUaHJvd24pIHsK
LSAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvciB8fCByZXN1bHQuZGVzY3JpcHRpb24pOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbGxi
YWNrKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5j
dGlvbig/RE9NQWdlbnQuTm9kZUlkKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBwdXNoTm9kZVRv
RnJvbnRlbmQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX29i
amVjdElkKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LnB1c2hOb2RlVG9Gcm9u
dGVuZCh0aGlzLl9vYmplY3RJZCwgY2FsbGJhY2spOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYWxsYmFjaygwKTsKLSAgICB9LAotCi0gICAgaGlnaGxpZ2h0QXNET01Ob2RlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuaGlnaGxpZ2h0RE9NTm9k
ZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5fb2JqZWN0SWQpOwotICAgIH0sCi0KLSAgICBo
aWRlRE9NTm9kZUhpZ2hsaWdodDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmRvbUFnZW50LmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24odGhpczpPYmplY3QpfSBmdW5jdGlvbkRlY2xhcmF0aW9u
Ci0gICAgICogQHBhcmFtIHtBcnJheS48UnVudGltZUFnZW50LkNhbGxBcmd1bWVudD49fSBhcmdz
Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCk9fSBj
YWxsYmFjawotICAgICAqLwotICAgIGNhbGxGdW5jdGlvbjogZnVuY3Rpb24oZnVuY3Rpb25EZWNs
YXJhdGlvbiwgYXJncywgY2FsbGJhY2spCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICog
QHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7UnVudGlt
ZUFnZW50LlJlbW90ZU9iamVjdH0gcmVzdWx0Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19
IHdhc1Rocm93bgotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbXljYWxsYmFjayhlcnJv
ciwgcmVzdWx0LCB3YXNUaHJvd24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghY2FsbGJh
Y2spCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBjYWxsYmFjaygoZXJy
b3IgfHwgd2FzVGhyb3duKSA/IG51bGwgOiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21Q
YXlsb2FkKHJlc3VsdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVudGltZUFnZW50LmNhbGxG
dW5jdGlvbk9uKHRoaXMuX29iamVjdElkLCBmdW5jdGlvbkRlY2xhcmF0aW9uLnRvU3RyaW5nKCks
IGFyZ3MsIHRydWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBteWNhbGxiYWNrKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbih0aGlzOk9iamVjdCl9IGZ1bmN0aW9u
RGVjbGFyYXRpb24KLSAgICAgKiBAcGFyYW0ge0FycmF5LjxSdW50aW1lQWdlbnQuQ2FsbEFyZ3Vt
ZW50Pnx1bmRlZmluZWR9IGFyZ3MKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCopfSBjYWxsYmFj
awotICAgICAqLwotICAgIGNhbGxGdW5jdGlvbkpTT046IGZ1bmN0aW9uKGZ1bmN0aW9uRGVjbGFy
YXRpb24sIGFyZ3MsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBw
YXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge1J1bnRpbWVB
Z2VudC5SZW1vdGVPYmplY3R9IHJlc3VsdAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3
YXNUaHJvd24KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG15Y2FsbGJhY2soZXJyb3Is
IHJlc3VsdCwgd2FzVGhyb3duKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxsYmFjaygoZXJy
b3IgfHwgd2FzVGhyb3duKSA/IG51bGwgOiByZXN1bHQudmFsdWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUnVudGltZUFnZW50LmNhbGxGdW5jdGlvbk9uKHRoaXMuX29iamVjdElkLCBmdW5jdGlv
bkRlY2xhcmF0aW9uLnRvU3RyaW5nKCksIGFyZ3MsIHRydWUsIHRydWUsIGZhbHNlLCBteWNhbGxi
YWNrKTsKLSAgICB9LAotCi0gICAgcmVsZWFzZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9vYmplY3RJZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgUnVudGlt
ZUFnZW50LnJlbGVhc2VPYmplY3QodGhpcy5fb2JqZWN0SWQpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgYXJyYXlMZW5ndGg6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnN1YnR5cGUgIT09ICJhcnJheSIpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICB2YXIgbWF0Y2hlcyA9IHRoaXMuX2Rlc2NyaXB0
aW9uLm1hdGNoKC9cWyhbMC05XSspXF0vKTsKLSAgICAgICAgaWYgKCFtYXRjaGVzKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7
Ci0gICAgfQotfQotCi0vKioKLSAqIEVpdGhlciBjYWxsRnJhbWVJZCBvciBmdW5jdGlvbklkIChl
eGFjdGx5IG9uZSkgbXVzdCBiZSBkZWZpbmVkLgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0g
e251bWJlcn0gbnVtYmVyCi0gKiBAcGFyYW0ge3N0cmluZz19IGNhbGxGcmFtZUlkCi0gKiBAcGFy
YW0ge3N0cmluZz19IGZ1bmN0aW9uSWQKLSAqLwotV2ViSW5zcGVjdG9yLlNjb3BlUmVmID0gZnVu
Y3Rpb24obnVtYmVyLCBjYWxsRnJhbWVJZCwgZnVuY3Rpb25JZCkKLXsKLSAgICB0aGlzLm51bWJl
ciA9IG51bWJlcjsKLSAgICB0aGlzLmNhbGxGcmFtZUlkID0gY2FsbEZyYW1lSWQ7Ci0gICAgdGhp
cy5mdW5jdGlvbklkID0gZnVuY3Rpb25JZDsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZW1vdGVPYmpl
Y3R9IHZhbHVlCi0gKiBAcGFyYW0ge09iamVjdD19IGRlc2NyaXB0b3IKLSAqLwotV2ViSW5zcGVj
dG9yLlJlbW90ZU9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGRlc2NyaXB0
b3IpCi17Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0g
ICAgdGhpcy5lbnVtZXJhYmxlID0gZGVzY3JpcHRvciA/ICEhZGVzY3JpcHRvci5lbnVtZXJhYmxl
IDogdHJ1ZTsKLSAgICB0aGlzLndyaXRhYmxlID0gZGVzY3JpcHRvciA/ICEhZGVzY3JpcHRvci53
cml0YWJsZSA6IHRydWU7Ci0gICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci53YXNUaHJv
d24pCi0gICAgICAgIHRoaXMud2FzVGhyb3duID0gdHJ1ZTsKLX0KLQotLyoqCi0gKiBAcGFyYW0g
e3N0cmluZ30gbmFtZQotICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCi0gKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHl9Ci0gKi8KLVdlYkluc3BlY3Rvci5SZW1vdGVP
YmplY3RQcm9wZXJ0eS5mcm9tUHJpbWl0aXZlVmFsdWUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eShuYW1l
LCBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRpdmVWYWx1ZSh2YWx1ZSkpOwot
fQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5SZW1vdGVPYmplY3R9IHZhbHVlCi0gKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUmVtb3RlT2Jq
ZWN0UHJvcGVydHl9Ci0gKi8KLVdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eS5mcm9t
U2NvcGVWYWx1ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKQotewotICAgIHZhciByZXN1bHQgPSBu
ZXcgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLSAgICBy
ZXN1bHQud3JpdGFibGUgPSBmYWxzZTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBUaGUg
YmVsb3cgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIGxvY2FsIG9iamVjdCB0aGF0IHByb3ZpZGVzIGFu
IGludGVyZmFjZSBjb21hcHRpYmxlCi0vLyB3aXRoIFJlbW90ZU9iamVjdCwgdG8gYmUgdXNlZCBi
eSB0aGUgVUkgY29kZSAocHJpbWFyaWx5IE9iamVjdFByb3BlcnRpZXNTZWN0aW9uKS4KLS8vIE5v
dGUgdGhhdCBvbmx5IEpTT04tY29tcGxpYW50IG9iamVjdHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0
ZWQsIGFzIHRoZXJlJ3Mgbm8gcHJvdmlzaW9uCi0vLyBmb3IgdHJhdmVyc2luZyBwcm90b3R5cGVz
LCBleHRyYWN0aW5nIGNsYXNzIG5hbWVzIHZpYSBjb25zdHVjdG9yLCBoYW5kbGluZyBwcm9wZXJ0
aWVzCi0vLyBvciBmdW5jdGlvbnMuCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0KLSAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZQot
ICovCi1XZWJJbnNwZWN0b3IuTG9jYWxKU09OT2JqZWN0ID0gZnVuY3Rpb24odmFsdWUpCi17Ci0g
ICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKLX0KLQotV2ViSW5zcGVjdG9yLkxvY2FsSlNPTk9iamVj
dC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAq
LwotICAgIGdldCBkZXNjcmlwdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY2FjaGVk
RGVzY3JpcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkRGVzY3JpcHRpb247
Ci0KLSAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gIm9iamVjdCIpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAodGhpcy5zdWJ0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlICJhcnJheSI6Ci0gICAgICAg
ICAgICAgICAgZnVuY3Rpb24gZm9ybWF0QXJyYXlJdGVtKHByb3BlcnR5KQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5LnZhbHVlLmRlc2NyaXB0
aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWREZXNj
cmlwdGlvbiA9IHRoaXMuX2NvbmNhdGVuYXRlKCJbIiwgIl0iLCBmb3JtYXRBcnJheUl0ZW0pOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAiZGF0ZSI6Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fY2FjaGVkRGVzY3JpcHRpb24gPSAiIiArIHRoaXMuX3ZhbHVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAibnVsbCI6Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fY2FjaGVkRGVzY3JpcHRpb24gPSAibnVsbCI7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZv
cm1hdE9iamVjdEl0ZW0ocHJvcGVydHkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcHJvcGVydHkubmFtZSArICI6IiArIHByb3BlcnR5LnZhbHVlLmRlc2Ny
aXB0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRE
ZXNjcmlwdGlvbiA9IHRoaXMuX2NvbmNhdGVuYXRlKCJ7IiwgIn0iLCBmb3JtYXRPYmplY3RJdGVt
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9jYWNo
ZWREZXNjcmlwdGlvbiA9IFN0cmluZyh0aGlzLl92YWx1ZSk7Ci0KLSAgICAgICAgcmV0dXJuIHRo
aXMuX2NhY2hlZERlc2NyaXB0aW9uOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gcHJlZml4Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeAotICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBfY29uY2F0ZW5hdGU6IGZ1bmN0aW9uKHByZWZp
eCwgc3VmZml4LCBmb3JtYXRQcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IHByZXZpZXdD
aGFycyA9IDEwMDsKLQotICAgICAgICB2YXIgYnVmZmVyID0gcHJlZml4OwotICAgICAgICB2YXIg
Y2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbigpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgaXRlbURlc2NyaXB0aW9u
ID0gZm9ybWF0UHJvcGVydHkoY2hpbGRyZW5baV0pOwotICAgICAgICAgICAgaWYgKGJ1ZmZlci5s
ZW5ndGggKyBpdGVtRGVzY3JpcHRpb24ubGVuZ3RoID4gcHJldmlld0NoYXJzKSB7Ci0gICAgICAg
ICAgICAgICAgYnVmZmVyICs9ICIsXHUyMDI2IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIGJ1ZmZlciAr
PSAiLCAiOwotICAgICAgICAgICAgYnVmZmVyICs9IGl0ZW1EZXNjcmlwdGlvbjsKLSAgICAgICAg
fQotICAgICAgICBidWZmZXIgKz0gc3VmZml4OwotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0
IHR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl92YWx1ZTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH0KLSAgICAgKi8K
LSAgICBnZXQgc3VidHlwZSgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT09IG51
bGwpCi0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotCi0gICAgICAgIGlmICh0aGlzLl92YWx1
ZSBpbnN0YW5jZW9mIEFycmF5KQotICAgICAgICAgICAgcmV0dXJuICJhcnJheSI7Ci0KLSAgICAg
ICAgaWYgKHRoaXMuX3ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkKLSAgICAgICAgICAgIHJldHVybiAi
ZGF0ZSI7Ci0KLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBnZXQgaGFzQ2hpbGRyZW4oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl92YWx1ZSA9PT0gIm9iamVjdCIgJiYg
dGhpcy5fdmFsdWUgIT09IG51bGwgJiYgISFPYmplY3Qua2V5cyh0aGlzLl92YWx1ZSkubGVuZ3Ro
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxXZWJJ
bnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHk+KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBn
ZXRPd25Qcm9wZXJ0aWVzOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGNhbGxi
YWNrKHRoaXMuX2NoaWxkcmVuKCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e2Z1bmN0aW9uKEFycmF5LjxXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHk+KX0gY2Fs
bGJhY2sKLSAgICAgKi8KLSAgICBnZXRBbGxQcm9wZXJ0aWVzOiBmdW5jdGlvbihjYWxsYmFjaykK
LSAgICB7Ci0gICAgICAgIGNhbGxiYWNrKHRoaXMuX2NoaWxkcmVuKCkpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdFBy
b3BlcnR5Pn0KLSAgICAgKi8KLSAgICBfY2hpbGRyZW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5oYXNDaGlsZHJlbikKLSAgICAgICAgICAgIHJldHVybiBbXTsKLQotICAg
ICAgICBmdW5jdGlvbiBidWlsZFByb3BlcnR5KHByb3BOYW1lKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3RQcm9wZXJ0eShwcm9wTmFt
ZSwgbmV3IFdlYkluc3BlY3Rvci5Mb2NhbEpTT05PYmplY3QodGhpcy5fdmFsdWVbcHJvcE5hbWVd
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRDaGlsZHJlbikKLSAgICAg
ICAgICAgIHRoaXMuX2NhY2hlZENoaWxkcmVuID0gT2JqZWN0LmtleXModGhpcy5fdmFsdWUgfHwg
e30pLm1hcChidWlsZFByb3BlcnR5LmJpbmQodGhpcykpOwotICAgICAgICByZXR1cm4gdGhpcy5f
Y2FjaGVkQ2hpbGRyZW47Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xl
YW59Ci0gICAgICovCi0gICAgaXNFcnJvcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0g
ICAgICovCi0gICAgYXJyYXlMZW5ndGg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl92YWx1ZSBpbnN0YW5jZW9mIEFycmF5ID8gdGhpcy5fdmFsdWUubGVuZ3RoIDogMDsK
LSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1JlcXVlc3RDb29raWVzVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUmVxdWVzdENvb2tpZXNWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
YWYwY2ViLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UmVxdWVzdENvb2tpZXNWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAotICovCi1XZWJJbnNwZWN0
b3IuUmVxdWVzdENvb2tpZXNWaWV3ID0gZnVuY3Rpb24ocmVxdWVzdCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJy
ZXNvdXJjZS1jb29raWVzLXZpZXciKTsKLQotICAgIHRoaXMuX3JlcXVlc3QgPSByZXF1ZXN0Owot
fQotCi1XZWJJbnNwZWN0b3IuUmVxdWVzdENvb2tpZXNWaWV3LnByb3RvdHlwZSA9IHsKLSAgICB3
YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVxdWVzdC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVudHMuUmVxdWVzdEhlYWRl
cnNDaGFuZ2VkLCB0aGlzLl9yZWZyZXNoQ29va2llcywgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3Jl
cXVlc3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QuRXZlbnRz
LlJlc3BvbnNlSGVhZGVyc0NoYW5nZWQsIHRoaXMuX3JlZnJlc2hDb29raWVzLCB0aGlzKTsKLQot
ICAgICAgICBpZiAoIXRoaXMuX2dvdENvb2tpZXMpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5f
ZW1wdHlWaWV3KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZW1wdHlWaWV3ID0gbmV3IFdlYklu
c3BlY3Rvci5FbXB0eVZpZXcoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIHJlcXVlc3QgaGFz
IG5vIGNvb2tpZXMuIikpOwotICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5Vmlldy5zaG93KHRo
aXMuZWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIXRoaXMuX2Nvb2tpZXNUYWJsZSkKLSAgICAgICAgICAgIHRoaXMu
X2J1aWxkQ29va2llc1RhYmxlKCk7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl9yZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLk5ldHdvcmtSZXF1ZXN0LkV2ZW50cy5SZXF1ZXN0SGVhZGVyc0NoYW5nZWQsIHRoaXMu
X3JlZnJlc2hDb29raWVzLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fcmVxdWVzdC5yZW1vdmVFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVudHMuUmVzcG9uc2VIZWFk
ZXJzQ2hhbmdlZCwgdGhpcy5fcmVmcmVzaENvb2tpZXMsIHRoaXMpOwotICAgIH0sCi0KLSAgICBn
ZXQgX2dvdENvb2tpZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLl9yZXF1ZXN0LnJl
cXVlc3RDb29raWVzICYmIHRoaXMuX3JlcXVlc3QucmVxdWVzdENvb2tpZXMubGVuZ3RoKSB8fCAo
dGhpcy5fcmVxdWVzdC5yZXNwb25zZUNvb2tpZXMgJiYgdGhpcy5fcmVxdWVzdC5yZXNwb25zZUNv
b2tpZXMubGVuZ3RoKTsKLSAgICB9LAotCi0gICAgX2J1aWxkQ29va2llc1RhYmxlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLmRldGFjaENoaWxkVmlld3MoKTsKLQotICAgICAgICB0
aGlzLl9jb29raWVzVGFibGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvb2tpZXNUYWJsZSh0cnVlKTsK
LSAgICAgICAgdGhpcy5fY29va2llc1RhYmxlLnNldENvb2tpZUZvbGRlcnMoWwotICAgICAgICAg
ICAge2ZvbGRlck5hbWU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVxdWVzdCBDb29raWVzIiks
IGNvb2tpZXM6IHRoaXMuX3JlcXVlc3QucmVxdWVzdENvb2tpZXN9LAotICAgICAgICAgICAge2Zv
bGRlck5hbWU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVzcG9uc2UgQ29va2llcyIpLCBjb29r
aWVzOiB0aGlzLl9yZXF1ZXN0LnJlc3BvbnNlQ29va2llc30KLSAgICAgICAgXSk7Ci0gICAgICAg
IHRoaXMuX2Nvb2tpZXNUYWJsZS5zaG93KHRoaXMuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9y
ZWZyZXNoQ29va2llczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2Nv
b2tpZXNUYWJsZTsKLSAgICAgICAgaWYgKCF0aGlzLl9nb3RDb29raWVzIHx8ICF0aGlzLmlzU2hv
d2luZygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9idWlsZENvb2tpZXNU
YWJsZSgpOwotICAgICAgICB0aGlzLl9jb29raWVzVGFibGUudXBkYXRlV2lkdGhzKCk7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RIVE1MVmll
dy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdEhUTUxWaWV3
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2ZhY2YzLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdEhUTUxWaWV3LmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLlJlcXVlc3RWaWV3fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
TmV0d29ya1JlcXVlc3R9IHJlcXVlc3QKLSAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhVVJMCi0gKi8K
LVdlYkluc3BlY3Rvci5SZXF1ZXN0SFRNTFZpZXcgPSBmdW5jdGlvbihyZXF1ZXN0LCBkYXRhVVJM
KQotewotICAgIFdlYkluc3BlY3Rvci5SZXF1ZXN0Vmlldy5jYWxsKHRoaXMsIHJlcXVlc3QpOwot
ICAgIHRoaXMuX2RhdGFVUkwgPSBkYXRhVVJMOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJodG1sIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5SZXF1ZXN0SFRNTFZpZXcucHJvdG90eXBl
ID0gewotICAgIGhhc0NvbnRlbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0sCi0KLSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fY3JlYXRlSUZyYW1lKCk7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbihw
YXJlbnRFbGVtZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVJRnJhbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGlmcmFtZSBhZ2FpbiBlYWNoIHRpbWUgYmVjYXVzZSBj
b250ZW50RG9jdW1lbnQKLSAgICAgICAgLy8gaXMgZGVsZXRlZCB3aGVuIGlmcmFtZSBpcyByZW1v
dmVkIGZyb20gaXRzIHBhcmVudC4KLSAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7Ci0gICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUi
KTsKLSAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgic2FuZGJveCIsICIiKTsgLy8gRm9yYmlk
IHRvIHJ1biBKYXZhU2NyaXB0IGFuZCBzZXQgdW5pcXVlIG9yaWdpbi4KLSAgICAgICAgaWZyYW1l
LnNldEF0dHJpYnV0ZSgic3JjIiwgdGhpcy5fZGF0YVVSTCk7Ci0gICAgICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZChpZnJhbWUpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5SZXF1ZXN0Vmlldy5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdEhlYWRlcnNWaWV3LmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1ZXN0SGVhZGVyc1ZpZXcuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVlMTMyMjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1ZXN0SGVhZGVyc1ZpZXcuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw0NjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAw
OSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVz
dH0gcmVxdWVzdAotICovCi1XZWJJbnNwZWN0b3IuUmVxdWVzdEhlYWRlcnNWaWV3ID0gZnVuY3Rp
b24ocmVxdWVzdCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRo
aXMucmVnaXN0ZXJSZXF1aXJlZENTUygicmVzb3VyY2VWaWV3LmNzcyIpOwotICAgIHRoaXMuZWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJyZXNvdXJjZS1oZWFkZXJzLXZpZXciKTsKLQotICAgIHRoaXMu
X3JlcXVlc3QgPSByZXF1ZXN0OwotCi0gICAgdGhpcy5faGVhZGVyc0xpc3RFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKLSAgICB0aGlzLl9oZWFkZXJzTGlzdEVsZW1lbnQu
Y2xhc3NOYW1lID0gIm91dGxpbmUtZGlzY2xvc3VyZSI7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuX2hlYWRlcnNMaXN0RWxlbWVudCk7Ci0KLSAgICB0aGlzLl9oZWFkZXJzVHJl
ZU91dGxpbmUgPSBuZXcgVHJlZU91dGxpbmUodGhpcy5faGVhZGVyc0xpc3RFbGVtZW50KTsKLSAg
ICB0aGlzLl9oZWFkZXJzVHJlZU91dGxpbmUuZXhwYW5kVHJlZUVsZW1lbnRzV2hlbkFycm93aW5n
ID0gdHJ1ZTsKLQotICAgIHRoaXMuX3VybFRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KCIi
LCBudWxsLCBmYWxzZSk7Ci0gICAgdGhpcy5fdXJsVHJlZUVsZW1lbnQuc2VsZWN0YWJsZSA9IGZh
bHNlOwotICAgIHRoaXMuX2hlYWRlcnNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZCh0aGlzLl91cmxU
cmVlRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9yZXF1ZXN0TWV0aG9kVHJlZUVsZW1lbnQgPSBuZXcg
VHJlZUVsZW1lbnQoIiIsIG51bGwsIGZhbHNlKTsKLSAgICB0aGlzLl9yZXF1ZXN0TWV0aG9kVHJl
ZUVsZW1lbnQuc2VsZWN0YWJsZSA9IGZhbHNlOwotICAgIHRoaXMuX2hlYWRlcnNUcmVlT3V0bGlu
ZS5hcHBlbmRDaGlsZCh0aGlzLl9yZXF1ZXN0TWV0aG9kVHJlZUVsZW1lbnQpOwotCi0gICAgdGhp
cy5fc3RhdHVzQ29kZVRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KCIiLCBudWxsLCBmYWxz
ZSk7Ci0gICAgdGhpcy5fc3RhdHVzQ29kZVRyZWVFbGVtZW50LnNlbGVjdGFibGUgPSBmYWxzZTsK
LSAgICB0aGlzLl9oZWFkZXJzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQodGhpcy5fc3RhdHVzQ29k
ZVRyZWVFbGVtZW50KTsKLQotICAgIHRoaXMuX3JlcXVlc3RIZWFkZXJzVHJlZUVsZW1lbnQgPSBu
ZXcgVHJlZUVsZW1lbnQoIiIsIG51bGwsIHRydWUpOwotICAgIHRoaXMuX3JlcXVlc3RIZWFkZXJz
VHJlZUVsZW1lbnQuZXhwYW5kZWQgPSB0cnVlOwotICAgIHRoaXMuX3JlcXVlc3RIZWFkZXJzVHJl
ZUVsZW1lbnQuc2VsZWN0YWJsZSA9IGZhbHNlOwotICAgIHRoaXMuX2hlYWRlcnNUcmVlT3V0bGlu
ZS5hcHBlbmRDaGlsZCh0aGlzLl9yZXF1ZXN0SGVhZGVyc1RyZWVFbGVtZW50KTsKLQotICAgIHRo
aXMuX2RlY29kZVJlcXVlc3RQYXJhbWV0ZXJzID0gdHJ1ZTsKLQotICAgIHRoaXMuX3Nob3dSZXF1
ZXN0SGVhZGVyc1RleHQgPSBmYWxzZTsKLSAgICB0aGlzLl9zaG93UmVzcG9uc2VIZWFkZXJzVGV4
dCA9IGZhbHNlOwotCi0gICAgdGhpcy5fcXVlcnlTdHJpbmdUcmVlRWxlbWVudCA9IG5ldyBUcmVl
RWxlbWVudCgiIiwgbnVsbCwgdHJ1ZSk7Ci0gICAgdGhpcy5fcXVlcnlTdHJpbmdUcmVlRWxlbWVu
dC5leHBhbmRlZCA9IHRydWU7Ci0gICAgdGhpcy5fcXVlcnlTdHJpbmdUcmVlRWxlbWVudC5zZWxl
Y3RhYmxlID0gZmFsc2U7Ci0gICAgdGhpcy5fcXVlcnlTdHJpbmdUcmVlRWxlbWVudC5oaWRkZW4g
PSB0cnVlOwotICAgIHRoaXMuX2hlYWRlcnNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZCh0aGlzLl9x
dWVyeVN0cmluZ1RyZWVFbGVtZW50KTsKLQotICAgIHRoaXMuX3VybEZyYWdtZW50VHJlZUVsZW1l
bnQgPSBuZXcgVHJlZUVsZW1lbnQoIiIsIG51bGwsIHRydWUpOwotICAgIHRoaXMuX3VybEZyYWdt
ZW50VHJlZUVsZW1lbnQuZXhwYW5kZWQgPSB0cnVlOwotICAgIHRoaXMuX3VybEZyYWdtZW50VHJl
ZUVsZW1lbnQuc2VsZWN0YWJsZSA9IGZhbHNlOwotICAgIHRoaXMuX3VybEZyYWdtZW50VHJlZUVs
ZW1lbnQuaGlkZGVuID0gdHJ1ZTsKLSAgICB0aGlzLl9oZWFkZXJzVHJlZU91dGxpbmUuYXBwZW5k
Q2hpbGQodGhpcy5fdXJsRnJhZ21lbnRUcmVlRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9mb3JtRGF0
YVRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KCIiLCBudWxsLCB0cnVlKTsKLSAgICB0aGlz
Ll9mb3JtRGF0YVRyZWVFbGVtZW50LmV4cGFuZGVkID0gdHJ1ZTsKLSAgICB0aGlzLl9mb3JtRGF0
YVRyZWVFbGVtZW50LnNlbGVjdGFibGUgPSBmYWxzZTsKLSAgICB0aGlzLl9mb3JtRGF0YVRyZWVF
bGVtZW50LmhpZGRlbiA9IHRydWU7Ci0gICAgdGhpcy5faGVhZGVyc1RyZWVPdXRsaW5lLmFwcGVu
ZENoaWxkKHRoaXMuX2Zvcm1EYXRhVHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy5fcmVxdWVzdFBh
eWxvYWRUcmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlJlcXVlc3QgUGF5bG9hZCIpLCBudWxsLCB0cnVlKTsKLSAgICB0aGlzLl9yZXF1ZXN0UGF5bG9h
ZFRyZWVFbGVtZW50LmV4cGFuZGVkID0gdHJ1ZTsKLSAgICB0aGlzLl9yZXF1ZXN0UGF5bG9hZFRy
ZWVFbGVtZW50LnNlbGVjdGFibGUgPSBmYWxzZTsKLSAgICB0aGlzLl9yZXF1ZXN0UGF5bG9hZFRy
ZWVFbGVtZW50LmhpZGRlbiA9IHRydWU7Ci0gICAgdGhpcy5faGVhZGVyc1RyZWVPdXRsaW5lLmFw
cGVuZENoaWxkKHRoaXMuX3JlcXVlc3RQYXlsb2FkVHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy5f
cmVzcG9uc2VIZWFkZXJzVHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoIiIsIG51bGwsIHRy
dWUpOwotICAgIHRoaXMuX3Jlc3BvbnNlSGVhZGVyc1RyZWVFbGVtZW50LmV4cGFuZGVkID0gdHJ1
ZTsKLSAgICB0aGlzLl9yZXNwb25zZUhlYWRlcnNUcmVlRWxlbWVudC5zZWxlY3RhYmxlID0gZmFs
c2U7Ci0gICAgdGhpcy5faGVhZGVyc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKHRoaXMuX3Jlc3Bv
bnNlSGVhZGVyc1RyZWVFbGVtZW50KTsKLX0KLQotV2ViSW5zcGVjdG9yLlJlcXVlc3RIZWFkZXJz
Vmlldy5wcm90b3R5cGUgPSB7Ci0KLSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3Jr
UmVxdWVzdC5FdmVudHMuUmVxdWVzdEhlYWRlcnNDaGFuZ2VkLCB0aGlzLl9yZWZyZXNoUmVxdWVz
dEhlYWRlcnMsIHRoaXMpOwotICAgICAgICB0aGlzLl9yZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0LkV2ZW50cy5SZXNwb25zZUhlYWRlcnNDaGFuZ2Vk
LCB0aGlzLl9yZWZyZXNoUmVzcG9uc2VIZWFkZXJzLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fcmVx
dWVzdC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVudHMu
RmluaXNoZWRMb2FkaW5nLCB0aGlzLl9yZWZyZXNoSFRUUEluZm9ybWF0aW9uLCB0aGlzKTsKLQot
ICAgICAgICB0aGlzLl9yZWZyZXNoVVJMKCk7Ci0gICAgICAgIHRoaXMuX3JlZnJlc2hRdWVyeVN0
cmluZygpOwotICAgICAgICB0aGlzLl9yZWZyZXNoVXJsRnJhZ21lbnQoKTsKLSAgICAgICAgdGhp
cy5fcmVmcmVzaFJlcXVlc3RIZWFkZXJzKCk7Ci0gICAgICAgIHRoaXMuX3JlZnJlc2hSZXNwb25z
ZUhlYWRlcnMoKTsKLSAgICAgICAgdGhpcy5fcmVmcmVzaEhUVFBJbmZvcm1hdGlvbigpOwotICAg
IH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVx
dWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVu
dHMuUmVxdWVzdEhlYWRlcnNDaGFuZ2VkLCB0aGlzLl9yZWZyZXNoUmVxdWVzdEhlYWRlcnMsIHRo
aXMpOwotICAgICAgICB0aGlzLl9yZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLk5ldHdvcmtSZXF1ZXN0LkV2ZW50cy5SZXNwb25zZUhlYWRlcnNDaGFuZ2VkLCB0aGlzLl9y
ZWZyZXNoUmVzcG9uc2VIZWFkZXJzLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fcmVxdWVzdC5yZW1v
dmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVudHMuRmluaXNo
ZWRMb2FkaW5nLCB0aGlzLl9yZWZyZXNoSFRUUEluZm9ybWF0aW9uLCB0aGlzKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gdmFsdWUKLSAgICAgKi8KLSAgICBfZm9ybWF0SGVhZGVyOiBmdW5jdGlvbihuYW1lLCB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKLSAgICAgICAgZnJhZ21lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJoZWFk
ZXItbmFtZSIpLnRleHRDb250ZW50ID0gbmFtZSArICI6IjsKLSAgICAgICAgZnJhZ21lbnQuY3Jl
YXRlQ2hpbGQoImRpdiIsICJoZWFkZXItdmFsdWUgc291cmNlLWNvZGUiKS50ZXh0Q29udGVudCA9
IHZhbHVlOwotCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNz
TmFtZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGVjb2RlUGFyYW1ldGVycwotICAgICAqLwot
ICAgIF9mb3JtYXRQYXJhbWV0ZXI6IGZ1bmN0aW9uKHZhbHVlLCBjbGFzc05hbWUsIGRlY29kZVBh
cmFtZXRlcnMpCi0gICAgewotICAgICAgICB2YXIgZXJyb3JEZWNvZGluZyA9IGZhbHNlOwotCi0g
ICAgICAgIGlmIChkZWNvZGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IHZhbHVl
LnJlcGxhY2UoL1wrL2csICIgIik7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiJSIp
ID49IDApIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAo
ZSkgewotICAgICAgICAgICAgICAgICAgICBlcnJvckRlY29kaW5nID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBkaXYuY2xhc3NOYW1lID0gY2xh
c3NOYW1lOwotICAgICAgICBpZiAoZXJyb3JEZWNvZGluZykKLSAgICAgICAgICAgIGRpdi5jcmVh
dGVDaGlsZCgic3BhbiIsICJlcnJvci1tZXNzYWdlIikudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIih1bmFibGUgdG8gZGVjb2RlIHZhbHVlKSIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBkaXYudGV4dENvbnRlbnQgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIGRpdjsK
LSAgICB9LAotCi0gICAgX3JlZnJlc2hVUkw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3VybFRyZWVFbGVtZW50LnRpdGxlID0gdGhpcy5fZm9ybWF0SGVhZGVyKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiUmVxdWVzdCBVUkwiKSwgdGhpcy5fcmVxdWVzdC51cmwpOwotICAgIH0sCi0K
LSAgICBfcmVmcmVzaFF1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
cXVlcnlTdHJpbmcgPSB0aGlzLl9yZXF1ZXN0LnF1ZXJ5U3RyaW5nKCk7Ci0gICAgICAgIHZhciBx
dWVyeVBhcmFtZXRlcnMgPSB0aGlzLl9yZXF1ZXN0LnF1ZXJ5UGFyYW1ldGVyczsKLSAgICAgICAg
dGhpcy5fcXVlcnlTdHJpbmdUcmVlRWxlbWVudC5oaWRkZW4gPSAhcXVlcnlQYXJhbWV0ZXJzOwot
ICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXJzKQotICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFBh
cmFtcyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlF1ZXJ5IFN0cmluZyBQYXJhbWV0ZXJzIiksIHF1
ZXJ5UGFyYW1ldGVycywgcXVlcnlTdHJpbmcsIHRoaXMuX3F1ZXJ5U3RyaW5nVHJlZUVsZW1lbnQp
OwotICAgIH0sCi0KLSAgICBfcmVmcmVzaFVybEZyYWdtZW50OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB2YXIgdXJsRnJhZ21lbnQgPSB0aGlzLl9yZXF1ZXN0LnBhcnNlZFVSTC5mcmFnbWVu
dDsKLSAgICAgICAgdGhpcy5fdXJsRnJhZ21lbnRUcmVlRWxlbWVudC5oaWRkZW4gPSAhdXJsRnJh
Z21lbnQ7Ci0KLSAgICAgICAgaWYgKCF1cmxGcmFnbWVudCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgc2VjdGlvblRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJVUkwg
ZnJhZ21lbnQiKTsKLQotICAgICAgICB0aGlzLl91cmxGcmFnbWVudFRyZWVFbGVtZW50LnJlbW92
ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX3VybEZyYWdtZW50VHJlZUVsZW1lbnQubGlzdEl0
ZW1FbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX3VybEZyYWdtZW50VHJl
ZUVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKHNlY3Rpb25UaXRsZSkpOwotCi0gICAgICAgIHZhciBmcmFnbWVudFRyZWVFbGVtZW50ID0g
bmV3IFRyZWVFbGVtZW50KG51bGwsIG51bGwsIGZhbHNlKTsKLSAgICAgICAgZnJhZ21lbnRUcmVl
RWxlbWVudC50aXRsZSA9IHRoaXMuX2Zvcm1hdEhlYWRlcigiIyIsIHVybEZyYWdtZW50KTsKLSAg
ICAgICAgZnJhZ21lbnRUcmVlRWxlbWVudC5zZWxlY3RhYmxlID0gZmFsc2U7Ci0gICAgICAgIHRo
aXMuX3VybEZyYWdtZW50VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnRUcmVlRWxlbWVu
dCk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoRm9ybURhdGE6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2Zvcm1EYXRhVHJlZUVsZW1lbnQuaGlkZGVuID0gdHJ1ZTsKLSAgICAgICAg
dGhpcy5fcmVxdWVzdFBheWxvYWRUcmVlRWxlbWVudC5oaWRkZW4gPSB0cnVlOwotCi0gICAgICAg
IHZhciBmb3JtRGF0YSA9IHRoaXMuX3JlcXVlc3QucmVxdWVzdEZvcm1EYXRhOwotICAgICAgICBp
ZiAoIWZvcm1EYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBmb3JtUGFy
YW1ldGVycyA9IHRoaXMuX3JlcXVlc3QuZm9ybVBhcmFtZXRlcnM7Ci0gICAgICAgIGlmIChmb3Jt
UGFyYW1ldGVycykgewotICAgICAgICAgICAgdGhpcy5fZm9ybURhdGFUcmVlRWxlbWVudC5oaWRk
ZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hQYXJhbXMoV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJGb3JtIERhdGEiKSwgZm9ybVBhcmFtZXRlcnMsIGZvcm1EYXRhLCB0aGlzLl9m
b3JtRGF0YVRyZWVFbGVtZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMu
X3JlcXVlc3RQYXlsb2FkVHJlZUVsZW1lbnQuaGlkZGVuID0gZmFsc2U7Ci0gICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShmb3JtRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcXVlc3RKU09OUGF5bG9hZChqc29uLCBmb3Jt
RGF0YSwgZmFsc2UpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAg
IHRoaXMuX3BvcHVsYXRlVHJlZUVsZW1lbnRXaXRoU291cmNlVGV4dCh0aGlzLl9yZXF1ZXN0UGF5
bG9hZFRyZWVFbGVtZW50LCBmb3JtRGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9LAotCi0gICAgX3BvcHVsYXRlVHJlZUVsZW1lbnRXaXRoU291cmNlVGV4dDogZnVuY3Rpb24o
dHJlZUVsZW1lbnQsIHNvdXJjZVRleHQpCi0gICAgewotICAgICAgICB0cmVlRWxlbWVudC5yZW1v
dmVDaGlsZHJlbigpOwotCi0gICAgICAgIHZhciBzb3VyY2VUcmVlRWxlbWVudCA9IG5ldyBUcmVl
RWxlbWVudChudWxsLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgIHNvdXJjZVRyZWVFbGVtZW50LnNl
bGVjdGFibGUgPSBmYWxzZTsKLSAgICAgICAgdHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc291cmNl
VHJlZUVsZW1lbnQpOwotCi0gICAgICAgIHZhciBzb3VyY2VUZXh0RWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgc291cmNlVGV4dEVsZW1lbnQuYWRkU3R5
bGVDbGFzcygiaGVhZGVyLXZhbHVlIik7Ci0gICAgICAgIHNvdXJjZVRleHRFbGVtZW50LmFkZFN0
eWxlQ2xhc3MoInNvdXJjZS1jb2RlIik7Ci0gICAgICAgIHNvdXJjZVRleHRFbGVtZW50LnRleHRD
b250ZW50ID0gU3RyaW5nKHNvdXJjZVRleHQpLnRyaW0oKTsKLSAgICAgICAgc291cmNlVHJlZUVs
ZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKHNvdXJjZVRleHRFbGVtZW50KTsKLSAg
ICB9LAotCi0gICAgX3JlZnJlc2hQYXJhbXM6IGZ1bmN0aW9uKHRpdGxlLCBwYXJhbXMsIHNvdXJj
ZVRleHQsIHBhcmFtc1RyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgcGFyYW1zVHJlZUVsZW1l
bnQucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICBwYXJhbXNUcmVlRWxlbWVudC5saXN0SXRl
bUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgcGFyYW1zVHJlZUVsZW1lbnQubGlz
dEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRpdGxlKSk7
Ci0KLSAgICAgICAgdmFyIGhlYWRlckNvdW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOwotICAgICAgICBoZWFkZXJDb3VudC5hZGRTdHlsZUNsYXNzKCJoZWFkZXItY291bnQiKTsK
LSAgICAgICAgaGVhZGVyQ291bnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IiAoJWQpIiwgcGFyYW1zLmxlbmd0aCk7Ci0gICAgICAgIHBhcmFtc1RyZWVFbGVtZW50Lmxpc3RJ
dGVtRWxlbWVudC5hcHBlbmRDaGlsZChoZWFkZXJDb3VudCk7Ci0KLSAgICAgICAgZnVuY3Rpb24g
dG9nZ2xlVmlld1NvdXJjZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcmFtc1RyZWVFbGVt
ZW50Ll92aWV3U291cmNlID0gIXBhcmFtc1RyZWVFbGVtZW50Ll92aWV3U291cmNlOwotICAgICAg
ICAgICAgdGhpcy5fcmVmcmVzaFBhcmFtcyh0aXRsZSwgcGFyYW1zLCBzb3VyY2VUZXh0LCBwYXJh
bXNUcmVlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbXNUcmVlRWxlbWVudC5s
aXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlVmlld1NvdXJjZVRvZ2dsZShw
YXJhbXNUcmVlRWxlbWVudC5fdmlld1NvdXJjZSwgdG9nZ2xlVmlld1NvdXJjZS5iaW5kKHRoaXMp
KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocGFyYW1zVHJlZUVsZW1lbnQuX3ZpZXdTb3VyY2Up
IHsKLSAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlVHJlZUVsZW1lbnRXaXRoU291cmNlVGV4dChw
YXJhbXNUcmVlRWxlbWVudCwgc291cmNlVGV4dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgdG9nZ2xlVGl0bGUgPSB0aGlzLl9kZWNvZGVSZXF1ZXN0UGFy
YW1ldGVycyA/IFdlYkluc3BlY3Rvci5VSVN0cmluZygidmlldyBVUkwgZW5jb2RlZCIpIDogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJ2aWV3IGRlY29kZWQiKTsKLSAgICAgICAgdmFyIHRvZ2dsZUJ1
dHRvbiA9IHRoaXMuX2NyZWF0ZVRvZ2dsZUJ1dHRvbih0b2dnbGVUaXRsZSk7Ci0gICAgICAgIHRv
Z2dsZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZVVSTERlY29k
aW5nLmJpbmQodGhpcykpOwotICAgICAgICBwYXJhbXNUcmVlRWxlbWVudC5saXN0SXRlbUVsZW1l
bnQuYXBwZW5kQ2hpbGQodG9nZ2xlQnV0dG9uKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHBhcmFtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHBhcmFtTmFtZVZhbHVl
ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgICAgdmFyIG5h
bWUgPSB0aGlzLl9mb3JtYXRQYXJhbWV0ZXIocGFyYW1zW2ldLm5hbWUgKyAiOiIsICJoZWFkZXIt
bmFtZSIsIHRoaXMuX2RlY29kZVJlcXVlc3RQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIHZhciB2
YWx1ZSA9IHRoaXMuX2Zvcm1hdFBhcmFtZXRlcihwYXJhbXNbaV0udmFsdWUsICJoZWFkZXItdmFs
dWUgc291cmNlLWNvZGUiLCB0aGlzLl9kZWNvZGVSZXF1ZXN0UGFyYW1ldGVycyk7Ci0gICAgICAg
ICAgICBwYXJhbU5hbWVWYWx1ZS5hcHBlbmRDaGlsZChuYW1lKTsKLSAgICAgICAgICAgIHBhcmFt
TmFtZVZhbHVlLmFwcGVuZENoaWxkKHZhbHVlKTsKLQotICAgICAgICAgICAgdmFyIHBhcm1UcmVl
RWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChwYXJhbU5hbWVWYWx1ZSwgbnVsbCwgZmFsc2UpOwot
ICAgICAgICAgICAgcGFybVRyZWVFbGVtZW50LnNlbGVjdGFibGUgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHBhcmFtc1RyZWVFbGVtZW50LmFwcGVuZENoaWxkKHBhcm1UcmVlRWxlbWVudCk7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IHBhcnNlZE9i
amVjdAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VUZXh0Ci0gICAgICogQHBhcmFtIHti
b29sZWFufSB2aWV3U291cmNlCi0gICAgICovCi0gICAgX3JlZnJlc2hSZXF1ZXN0SlNPTlBheWxv
YWQ6IGZ1bmN0aW9uKHBhcnNlZE9iamVjdCwgc291cmNlVGV4dCwgdmlld1NvdXJjZSkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3JlcXVlc3RQYXlsb2FkVHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4o
KTsKLQotICAgICAgICB2YXIgbGlzdEl0ZW0gPSB0aGlzLl9yZXF1ZXN0UGF5bG9hZFRyZWVFbGVt
ZW50Lmxpc3RJdGVtRWxlbWVudDsKLSAgICAgICAgbGlzdEl0ZW0ucmVtb3ZlQ2hpbGRyZW4oKTsK
LSAgICAgICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhp
cy5fcmVxdWVzdFBheWxvYWRUcmVlRWxlbWVudC50aXRsZSkpOwotCi0gICAgICAgIHZhciBzZXRW
aWV3U291cmNlID0gdGhpcy5fcmVmcmVzaFJlcXVlc3RKU09OUGF5bG9hZC5iaW5kKHRoaXMsIHBh
cnNlZE9iamVjdCwgc291cmNlVGV4dCk7Ci0KLSAgICAgICAgaWYgKHZpZXdTb3VyY2UpIHsKLSAg
ICAgICAgICAgIGxpc3RJdGVtLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVZpZXdTb3VyY2VUb2dn
bGUodHJ1ZSwgc2V0Vmlld1NvdXJjZS5iaW5kKHRoaXMsIGZhbHNlKSkpOwotICAgICAgICAgICAg
dGhpcy5fcG9wdWxhdGVUcmVlRWxlbWVudFdpdGhTb3VyY2VUZXh0KHRoaXMuX3JlcXVlc3RQYXls
b2FkVHJlZUVsZW1lbnQsIHNvdXJjZVRleHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlVmlld1NvdXJjZVRvZ2dsZShmYWxz
ZSwgc2V0Vmlld1NvdXJjZS5iaW5kKHRoaXMsIHRydWUpKSk7Ci0gICAgICAgICAgICB2YXIgb2Jq
ZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tTG9jYWxPYmplY3QocGFyc2VkT2Jq
ZWN0KTsKLSAgICAgICAgICAgIHZhciBzZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQ
cm9wZXJ0aWVzU2VjdGlvbihvYmplY3QsIG9iamVjdC5kZXNjcmlwdGlvbik7Ci0gICAgICAgICAg
ICBzZWN0aW9uLmV4cGFuZCgpOwotICAgICAgICAgICAgc2VjdGlvbi5lZGl0YWJsZSA9IGZhbHNl
OwotICAgICAgICAgICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoc2VjdGlvbi5lbGVtZW50KTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZpZXdT
b3VyY2UKLSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyCi0gICAgICovCi0gICAgX2Ny
ZWF0ZVZpZXdTb3VyY2VUb2dnbGU6IGZ1bmN0aW9uKHZpZXdTb3VyY2UsIGhhbmRsZXIpCi0gICAg
ewotICAgICAgICB2YXIgdmlld1NvdXJjZVRvZ2dsZVRpdGxlID0gdmlld1NvdXJjZSA/IFdlYklu
c3BlY3Rvci5VSVN0cmluZygidmlldyBwYXJzZWQiKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
dmlldyBzb3VyY2UiKTsKLSAgICAgICAgdmFyIHZpZXdTb3VyY2VUb2dnbGVCdXR0b24gPSB0aGlz
Ll9jcmVhdGVUb2dnbGVCdXR0b24odmlld1NvdXJjZVRvZ2dsZVRpdGxlKTsKLSAgICAgICAgdmll
d1NvdXJjZVRvZ2dsZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGhhbmRsZXIpOwot
ICAgICAgICByZXR1cm4gdmlld1NvdXJjZVRvZ2dsZUJ1dHRvbjsKLSAgICB9LAotCi0gICAgX3Rv
Z2dsZVVSTERlY29kaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Rl
Y29kZVJlcXVlc3RQYXJhbWV0ZXJzID0gIXRoaXMuX2RlY29kZVJlcXVlc3RQYXJhbWV0ZXJzOwot
ICAgICAgICB0aGlzLl9yZWZyZXNoUXVlcnlTdHJpbmcoKTsKLSAgICAgICAgdGhpcy5fcmVmcmVz
aEZvcm1EYXRhKCk7Ci0gICAgfSwKLQotICAgIF9nZXRIZWFkZXJWYWx1ZTogZnVuY3Rpb24oaGVh
ZGVycywga2V5KQotICAgIHsKLSAgICAgICAgdmFyIGxvd2VyS2V5ID0ga2V5LnRvTG93ZXJDYXNl
KCk7Ci0gICAgICAgIGZvciAodmFyIHRlc3RLZXkgaW4gaGVhZGVycykgewotICAgICAgICAgICAg
aWYgKHRlc3RLZXkudG9Mb3dlckNhc2UoKSA9PT0gbG93ZXJLZXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGhlYWRlcnNbdGVzdEtleV07Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3JlZnJl
c2hSZXF1ZXN0SGVhZGVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3No
b3dSZXF1ZXN0SGVhZGVyc1RleHQpCi0gICAgICAgICAgICB0aGlzLl9yZWZyZXNoSGVhZGVyc1Rl
eHQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXF1ZXN0IEhlYWRlcnMiKSwgdGhpcy5fcmVxdWVz
dC5zb3J0ZWRSZXF1ZXN0SGVhZGVycywgdGhpcy5fcmVxdWVzdC5yZXF1ZXN0SGVhZGVyc1RleHQs
IHRoaXMuX3JlcXVlc3RIZWFkZXJzVHJlZUVsZW1lbnQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0aGlzLl9yZWZyZXNoSGVhZGVycyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlcXVlc3Qg
SGVhZGVycyIpLCB0aGlzLl9yZXF1ZXN0LnNvcnRlZFJlcXVlc3RIZWFkZXJzLCB0aGlzLl9yZXF1
ZXN0SGVhZGVyc1RyZWVFbGVtZW50KTsKLQotICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5yZXF1
ZXN0SGVhZGVyc1RleHQpIHsKLSAgICAgICAgICAgIHZhciB0b2dnbGVCdXR0b24gPSB0aGlzLl9j
cmVhdGVIZWFkZXJzVG9nZ2xlQnV0dG9uKHRoaXMuX3Nob3dSZXF1ZXN0SGVhZGVyc1RleHQpOwot
ICAgICAgICAgICAgdG9nZ2xlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5f
dG9nZ2xlUmVxdWVzdEhlYWRlcnNUZXh0LmJpbmQodGhpcykpOwotICAgICAgICAgICAgdGhpcy5f
cmVxdWVzdEhlYWRlcnNUcmVlRWxlbWVudC5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQodG9n
Z2xlQnV0dG9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3JlZnJlc2hGb3JtRGF0YSgp
OwotICAgIH0sCi0KLSAgICBfcmVmcmVzaFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3Nob3dSZXNwb25zZUhlYWRlcnNUZXh0KQotICAgICAgICAg
ICAgdGhpcy5fcmVmcmVzaEhlYWRlcnNUZXh0KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVzcG9u
c2UgSGVhZGVycyIpLCB0aGlzLl9yZXF1ZXN0LnNvcnRlZFJlc3BvbnNlSGVhZGVycywgdGhpcy5f
cmVxdWVzdC5yZXNwb25zZUhlYWRlcnNUZXh0LCB0aGlzLl9yZXNwb25zZUhlYWRlcnNUcmVlRWxl
bWVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIZWFkZXJzKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUmVzcG9uc2UgSGVhZGVycyIpLCB0aGlzLl9yZXF1ZXN0LnNv
cnRlZFJlc3BvbnNlSGVhZGVycywgdGhpcy5fcmVzcG9uc2VIZWFkZXJzVHJlZUVsZW1lbnQpOwot
Ci0gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LnJlc3BvbnNlSGVhZGVyc1RleHQpIHsKLSAgICAg
ICAgICAgIHZhciB0b2dnbGVCdXR0b24gPSB0aGlzLl9jcmVhdGVIZWFkZXJzVG9nZ2xlQnV0dG9u
KHRoaXMuX3Nob3dSZXNwb25zZUhlYWRlcnNUZXh0KTsKLSAgICAgICAgICAgIHRvZ2dsZUJ1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZVJlc3BvbnNlSGVhZGVyc1Rl
eHQuYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICB0aGlzLl9yZXNwb25zZUhlYWRlcnNUcmVlRWxl
bWVudC5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQodG9nZ2xlQnV0dG9uKTsKLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICBfcmVmcmVzaEhUVFBJbmZvcm1hdGlvbjogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIHJlcXVlc3RNZXRob2RFbGVtZW50ID0gdGhpcy5fcmVxdWVzdE1ldGhv
ZFRyZWVFbGVtZW50OwotICAgICAgICByZXF1ZXN0TWV0aG9kRWxlbWVudC5oaWRkZW4gPSAhdGhp
cy5fcmVxdWVzdC5zdGF0dXNDb2RlOwotICAgICAgICB2YXIgc3RhdHVzQ29kZUVsZW1lbnQgPSB0
aGlzLl9zdGF0dXNDb2RlVHJlZUVsZW1lbnQ7Ci0gICAgICAgIHN0YXR1c0NvZGVFbGVtZW50Lmhp
ZGRlbiA9ICF0aGlzLl9yZXF1ZXN0LnN0YXR1c0NvZGU7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3Jl
cXVlc3Quc3RhdHVzQ29kZSkgewotICAgICAgICAgICAgdmFyIHN0YXR1c0ltYWdlU291cmNlID0g
IiI7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5zdGF0dXNDb2RlIDwgMzAwIHx8IHRo
aXMuX3JlcXVlc3Quc3RhdHVzQ29kZSA9PT0gMzA0KQotICAgICAgICAgICAgICAgIHN0YXR1c0lt
YWdlU291cmNlID0gIkltYWdlcy9zdWNjZXNzR3JlZW5Eb3QucG5nIjsKLSAgICAgICAgICAgIGVs
c2UgaWYgKHRoaXMuX3JlcXVlc3Quc3RhdHVzQ29kZSA8IDQwMCkKLSAgICAgICAgICAgICAgICBz
dGF0dXNJbWFnZVNvdXJjZSA9ICJJbWFnZXMvd2FybmluZ09yYW5nZURvdC5wbmciOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXR1c0ltYWdlU291cmNlID0gIkltYWdlcy9l
cnJvclJlZERvdC5wbmciOwotCi0gICAgICAgICAgICByZXF1ZXN0TWV0aG9kRWxlbWVudC50aXRs
ZSA9IHRoaXMuX2Zvcm1hdEhlYWRlcihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlcXVlc3QgTWV0
aG9kIiksIHRoaXMuX3JlcXVlc3QucmVxdWVzdE1ldGhvZCk7Ci0KLSAgICAgICAgICAgIHZhciBz
dGF0dXNDb2RlRnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0g
ICAgICAgICAgICBzdGF0dXNDb2RlRnJhZ21lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJoZWFkZXIt
bmFtZSIpLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdGF0dXMgQ29kZSIp
ICsgIjoiOwotCi0gICAgICAgICAgICB2YXIgc3RhdHVzQ29kZUltYWdlID0gc3RhdHVzQ29kZUZy
YWdtZW50LmNyZWF0ZUNoaWxkKCJpbWciLCAicmVzb3VyY2Utc3RhdHVzLWltYWdlIik7Ci0gICAg
ICAgICAgICBzdGF0dXNDb2RlSW1hZ2Uuc3JjID0gc3RhdHVzSW1hZ2VTb3VyY2U7Ci0gICAgICAg
ICAgICBzdGF0dXNDb2RlSW1hZ2UudGl0bGUgPSB0aGlzLl9yZXF1ZXN0LnN0YXR1c0NvZGUgKyAi
ICIgKyB0aGlzLl9yZXF1ZXN0LnN0YXR1c1RleHQ7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBz
dGF0dXNDb2RlRnJhZ21lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJoZWFkZXItdmFsdWUgc291cmNl
LWNvZGUiKTsKLSAgICAgICAgICAgIHZhbHVlLnRleHRDb250ZW50ID0gdGhpcy5fcmVxdWVzdC5z
dGF0dXNDb2RlICsgIiAiICsgdGhpcy5fcmVxdWVzdC5zdGF0dXNUZXh0OwotICAgICAgICAgICAg
aWYgKHRoaXMuX3JlcXVlc3QuY2FjaGVkKQotICAgICAgICAgICAgICAgIHZhbHVlLmNyZWF0ZUNo
aWxkKCJzcGFuIiwgInN0YXR1cy1mcm9tLWNhY2hlIikudGV4dENvbnRlbnQgPSAiICIgKyBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIihmcm9tIGNhY2hlKSIpOwotCi0gICAgICAgICAgICBzdGF0dXND
b2RlRWxlbWVudC50aXRsZSA9IHN0YXR1c0NvZGVGcmFnbWVudDsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfcmVmcmVzaEhlYWRlcnNUaXRsZTogZnVuY3Rpb24odGl0bGUsIGhlYWRlcnNUcmVl
RWxlbWVudCwgaGVhZGVyc0xlbmd0aCkKLSAgICB7Ci0gICAgICAgIGhlYWRlcnNUcmVlRWxlbWVu
dC5saXN0SXRlbUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgaGVhZGVyc1RyZWVF
bGVtZW50Lmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSh0aXRsZSkpOwotCi0gICAgICAgIHZhciBoZWFkZXJDb3VudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKLSAgICAgICAgaGVhZGVyQ291bnQuYWRkU3R5bGVDbGFzcygiaGVhZGVy
LWNvdW50Iik7Ci0gICAgICAgIGhlYWRlckNvdW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIgKCVkKSIsIGhlYWRlcnNMZW5ndGgpOwotICAgICAgICBoZWFkZXJzVHJlZUVs
ZW1lbnQubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGhlYWRlckNvdW50KTsKLSAgICB9LAot
Ci0gICAgX3JlZnJlc2hIZWFkZXJzOiBmdW5jdGlvbih0aXRsZSwgaGVhZGVycywgaGVhZGVyc1Ry
ZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgaGVhZGVyc1RyZWVFbGVtZW50LnJlbW92ZUNoaWxk
cmVuKCk7Ci0KLSAgICAgICAgdmFyIGxlbmd0aCA9IGhlYWRlcnMubGVuZ3RoOwotICAgICAgICB0
aGlzLl9yZWZyZXNoSGVhZGVyc1RpdGxlKHRpdGxlLCBoZWFkZXJzVHJlZUVsZW1lbnQsIGxlbmd0
aCk7Ci0gICAgICAgIGhlYWRlcnNUcmVlRWxlbWVudC5oaWRkZW4gPSAhbGVuZ3RoOwotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgaGVh
ZGVyVHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQobnVsbCwgbnVsbCwgZmFsc2UpOwotICAg
ICAgICAgICAgaGVhZGVyVHJlZUVsZW1lbnQudGl0bGUgPSB0aGlzLl9mb3JtYXRIZWFkZXIoaGVh
ZGVyc1tpXS5uYW1lLCBoZWFkZXJzW2ldLnZhbHVlKTsKLSAgICAgICAgICAgIGhlYWRlclRyZWVF
bGVtZW50LnNlbGVjdGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGhlYWRlcnNUcmVlRWxlbWVu
dC5hcHBlbmRDaGlsZChoZWFkZXJUcmVlRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgX3JlZnJlc2hIZWFkZXJzVGV4dDogZnVuY3Rpb24odGl0bGUsIGhlYWRlcnMsIGhlYWRlcnNU
ZXh0LCBoZWFkZXJzVHJlZUVsZW1lbnQpCi0gICAgewotICAgICAgICB0aGlzLl9wb3B1bGF0ZVRy
ZWVFbGVtZW50V2l0aFNvdXJjZVRleHQoaGVhZGVyc1RyZWVFbGVtZW50LCBoZWFkZXJzVGV4dCk7
Ci0gICAgICAgIHRoaXMuX3JlZnJlc2hIZWFkZXJzVGl0bGUodGl0bGUsIGhlYWRlcnNUcmVlRWxl
bWVudCwgaGVhZGVycy5sZW5ndGgpOwotICAgIH0sCi0KLSAgICBfdG9nZ2xlUmVxdWVzdEhlYWRl
cnNUZXh0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3dSZXF1ZXN0
SGVhZGVyc1RleHQgPSAhdGhpcy5fc2hvd1JlcXVlc3RIZWFkZXJzVGV4dDsKLSAgICAgICAgdGhp
cy5fcmVmcmVzaFJlcXVlc3RIZWFkZXJzKCk7Ci0gICAgfSwKLQotICAgIF90b2dnbGVSZXNwb25z
ZUhlYWRlcnNUZXh0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3dS
ZXNwb25zZUhlYWRlcnNUZXh0ID0gIXRoaXMuX3Nob3dSZXNwb25zZUhlYWRlcnNUZXh0OwotICAg
ICAgICB0aGlzLl9yZWZyZXNoUmVzcG9uc2VIZWFkZXJzKCk7Ci0gICAgfSwKLQotICAgIF9jcmVh
dGVUb2dnbGVCdXR0b246IGZ1bmN0aW9uKHRpdGxlKQotICAgIHsKLSAgICAgICAgdmFyIGJ1dHRv
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgYnV0dG9uLmFkZFN0
eWxlQ2xhc3MoImhlYWRlci10b2dnbGUiKTsKLSAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0g
dGl0bGU7Ci0gICAgICAgIHJldHVybiBidXR0b247Ci0gICAgfSwKLQotICAgIF9jcmVhdGVIZWFk
ZXJzVG9nZ2xlQnV0dG9uOiBmdW5jdGlvbihpc0hlYWRlcnNUZXh0U2hvd24pCi0gICAgewotICAg
ICAgICB2YXIgdG9nZ2xlVGl0bGUgPSBpc0hlYWRlcnNUZXh0U2hvd24gPyBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoInZpZXcgcGFyc2VkIikgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoInZpZXcgc291
cmNlIik7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVUb2dnbGVCdXR0b24odG9nZ2xlVGl0
bGUpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlw
ZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1
ZXN0SlNPTlZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVl
c3RKU09OVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkNWM1Yi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RKU09O
Vmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUmVxdWVzdFZpZXd9Ci0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAotICovCi1XZWJJbnNwZWN0b3IuUmVx
dWVzdEpTT05WaWV3ID0gZnVuY3Rpb24ocmVxdWVzdCwgcGFyc2VkSlNPTikKLXsKLSAgICBXZWJJ
bnNwZWN0b3IuUmVxdWVzdFZpZXcuY2FsbCh0aGlzLCByZXF1ZXN0KTsKLSAgICB0aGlzLl9wYXJz
ZWRKU09OID0gcGFyc2VkSlNPTjsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygianNv
biIpOwotfQotCi1XZWJJbnNwZWN0b3IuUmVxdWVzdEpTT05WaWV3LnBhcnNlSlNPTiA9IGZ1bmN0
aW9uKHRleHQpCi17Ci0gICAgdmFyIHByZWZpeCA9ICIiOwotCi0gICAgLy8gVHJpbSB3aGlsZSgx
KSwgZm9yKDs7KSwgd2VpcmQgbnVtYmVycywgZXRjLiBXZSBuZWVkIEpTT04gc3RhcnQuCi0gICAg
dmFyIHN0YXJ0ID0gL1t7W10vLmV4ZWModGV4dCk7Ci0gICAgaWYgKHN0YXJ0ICYmIHN0YXJ0Lmlu
ZGV4KSB7Ci0gICAgICAgIHByZWZpeCA9IHRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0LmluZGV4KTsK
LSAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0LmluZGV4KTsKLSAgICB9Ci0KLSAg
ICB0cnkgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5QYXJzZWRKU09OKEpTT04u
cGFyc2UodGV4dCksIHByZWZpeCwgIiIpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLlJlcXVlc3RKU09OVmlldy5wYXJzZUpTT05Q
ID0gZnVuY3Rpb24odGV4dCkKLXsKLSAgICAvLyBUYWtpbmcgZXZlcnl0aGluZyBiZXR3ZWVuIGZp
cnN0IGFuZCBsYXN0IHBhcmVudGhlc2VzCi0gICAgdmFyIHN0YXJ0ID0gdGV4dC5pbmRleE9mKCIo
Iik7Ci0gICAgdmFyIGVuZCA9IHRleHQubGFzdEluZGV4T2YoIikiKTsKLSAgICBpZiAoc3RhcnQg
PT0gLTEgfHwgZW5kID09IC0xIHx8IGVuZCA8IHN0YXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB2YXIgcHJlZml4ID0gdGV4dC5zdWJzdHJpbmcoMCwgc3RhcnQgKyAxKTsKLSAgICB2YXIgc3Vm
Zml4ID0gdGV4dC5zdWJzdHJpbmcoZW5kKTsKLSAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoc3Rh
cnQgKyAxLCBlbmQpOwotCi0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuUGFyc2VkSlNPTihKU09OLnBhcnNlKHRleHQpLCBwcmVmaXgsIHN1ZmZpeCk7Ci0gICAgfSBj
YXRjaCAoZSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuUmVx
dWVzdEpTT05WaWV3LnByb3RvdHlwZSA9IHsKLSAgICBoYXNDb250ZW50OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgd2FzU2hvd246IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2luaXRpYWxpemUoKTsKLSAgICB9LAotCi0gICAg
X2luaXRpYWxpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pbml0aWFs
aXplZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0
cnVlOwotCi0gICAgICAgIHZhciBvYmogPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21M
b2NhbE9iamVjdCh0aGlzLl9wYXJzZWRKU09OLmRhdGEpOwotICAgICAgICB2YXIgdGl0bGUgPSB0
aGlzLl9wYXJzZWRKU09OLnByZWZpeCArIG9iai5kZXNjcmlwdGlvbiArIHRoaXMuX3BhcnNlZEpT
T04uc3VmZml4OwotICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0
UHJvcGVydGllc1NlY3Rpb24ob2JqLCB0aXRsZSk7Ci0gICAgICAgIHNlY3Rpb24uZXhwYW5kKCk7
Ci0gICAgICAgIHNlY3Rpb24uZWRpdGFibGUgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzog
V2ViSW5zcGVjdG9yLlJlcXVlc3RWaWV3LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuUGFyc2VkSlNPTiA9IGZ1bmN0aW9uKGRhdGEsIHByZWZp
eCwgc3VmZml4KQotewotICAgIHRoaXMuZGF0YSA9IGRhdGE7Ci0gICAgdGhpcy5wcmVmaXggPSBw
cmVmaXg7Ci0gICAgdGhpcy5zdWZmaXggPSBzdWZmaXg7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RQcmV2aWV3Vmlldy5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdFByZXZpZXdWaWV3LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDE4OGM1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdFByZXZpZXdWaWV3LmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5SZXF1ZXN0Q29udGVudFZpZXd9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAotICovCi1XZWJJbnNwZWN0b3IuUmVxdWVzdFByZXZp
ZXdWaWV3ID0gZnVuY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2VWaWV3KQotewotICAgIFdlYkluc3Bl
Y3Rvci5SZXF1ZXN0Q29udGVudFZpZXcuY2FsbCh0aGlzLCByZXF1ZXN0KTsKLSAgICB0aGlzLl9y
ZXNwb25zZVZpZXcgPSByZXNwb25zZVZpZXc7Ci19Ci0KLVdlYkluc3BlY3Rvci5SZXF1ZXN0UHJl
dmlld1ZpZXcucHJvdG90eXBlID0gewotICAgIGNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0LmNvbnRlbnQpIHsKLSAgICAgICAgICAgIGlm
ICghdGhpcy5fZW1wdHlWaWV3KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZW1wdHlWaWV3ID0g
dGhpcy5fY3JlYXRlRW1wdHlWaWV3KCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZW1wdHlWaWV3
LnNob3codGhpcy5lbGVtZW50KTsKLSAgICAgICAgICAgICAgICB0aGlzLmlubmVyVmlldyA9IHRo
aXMuX2VtcHR5VmlldzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmICh0aGlzLl9lbXB0eVZpZXcpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9lbXB0eVZp
ZXcuZGV0YWNoKCk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2VtcHR5VmlldzsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0aGlzLl9wcmV2aWV3VmlldykKLSAgICAg
ICAgICAgICAgICB0aGlzLl9wcmV2aWV3VmlldyA9IHRoaXMuX2NyZWF0ZVByZXZpZXdWaWV3KCk7
Ci0gICAgICAgICAgICB0aGlzLl9wcmV2aWV3Vmlldy5zaG93KHRoaXMuZWxlbWVudCk7Ci0gICAg
ICAgICAgICB0aGlzLmlubmVyVmlldyA9IHRoaXMuX3ByZXZpZXdWaWV3OwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9jcmVhdGVFbXB0eVZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkVtcHR5VmlldyhXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlRoaXMgcmVxdWVzdCBoYXMgbm8gcHJldmlldyBhdmFpbGFibGUuIikpOwotICAgIH0sCi0KLSAg
ICBfanNvblZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBwYXJzZWRKU09OID0g
V2ViSW5zcGVjdG9yLlJlcXVlc3RKU09OVmlldy5wYXJzZUpTT04odGhpcy5yZXF1ZXN0LmNvbnRl
bnQpOwotICAgICAgICBpZiAocGFyc2VkSlNPTikKLSAgICAgICAgICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLlJlcXVlc3RKU09OVmlldyh0aGlzLnJlcXVlc3QsIHBhcnNlZEpTT04pOwotICAg
IH0sCi0KLSAgICBfaHRtbFZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRh
VVJMID0gdGhpcy5yZXF1ZXN0LmFzRGF0YVVSTCgpOwotICAgICAgICBpZiAoZGF0YVVSTCAhPT0g
bnVsbCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlJlcXVlc3RIVE1MVmll
dyh0aGlzLnJlcXVlc3QsIGRhdGFVUkwpOwotICAgIH0sCi0KLSAgICBfY3JlYXRlUHJldmlld1Zp
ZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnJlcXVlc3QuY29udGVudCkg
ewotICAgICAgICAgICAgaWYgKHRoaXMucmVxdWVzdC5oYXNFcnJvclN0YXR1c0NvZGUoKSkgewot
ICAgICAgICAgICAgICAgIHZhciBodG1sVmlldyA9IHRoaXMuX2h0bWxWaWV3KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGh0bWxWaWV3KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFZp
ZXc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3QudHlwZSA9
PT0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuWEhSKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGpzb25WaWV3ID0gdGhpcy5fanNvblZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoanNvblZp
ZXcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uVmlldzsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHRoaXMucmVxdWVzdC50eXBlID09PSBXZWJJbnNwZWN0b3IucmVz
b3VyY2VUeXBlcy5YSFIgJiYgdGhpcy5yZXF1ZXN0Lm1pbWVUeXBlID09PSAidGV4dC9odG1sIikg
ewotICAgICAgICAgICAgICAgIHZhciBodG1sVmlldyA9IHRoaXMuX2h0bWxWaWV3KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGh0bWxWaWV3KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRt
bFZpZXc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3QudHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU2NyaXB0ICYmIHRoaXMucmVxdWVzdC5t
aW1lVHlwZSA9PT0gImFwcGxpY2F0aW9uL2pzb24iKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGpz
b25WaWV3ID0gdGhpcy5fanNvblZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoanNvblZpZXcp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uVmlldzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9yZXNwb25zZVZpZXcuc291cmNlVmlldykKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZVZpZXcuc291cmNlVmlldzsKLQotICAgICAg
ICBpZiAodGhpcy5yZXF1ZXN0LnR5cGUgPT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLk90
aGVyKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVtcHR5VmlldygpOwotCi0gICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUmVxdWVzdFZpZXcubm9uU291cmNlVmlld0ZvclJlcXVl
c3QodGhpcy5yZXF1ZXN0KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
UmVxdWVzdENvbnRlbnRWaWV3LnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1ZXN0UmVzcG9uc2VWaWV3LmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1ZXN0UmVzcG9uc2VWaWV3LmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODRiYWU5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVxdWVzdFJlc3BvbnNlVmlldy5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5SZXF1ZXN0Q29udGVudFZpZXd9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5O
ZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAotICovCi1XZWJJbnNwZWN0b3IuUmVxdWVzdFJlc3BvbnNl
VmlldyA9IGZ1bmN0aW9uKHJlcXVlc3QpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlJlcXVlc3RDb250
ZW50Vmlldy5jYWxsKHRoaXMsIHJlcXVlc3QpOwotfQotCi1XZWJJbnNwZWN0b3IuUmVxdWVzdFJl
c3BvbnNlVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IHNvdXJjZVZpZXcoKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9zb3VyY2VWaWV3ICYmIFdlYkluc3BlY3Rvci5SZXF1ZXN0Vmlldy5o
YXNUZXh0Q29udGVudCh0aGlzLnJlcXVlc3QpKQotICAgICAgICAgICAgdGhpcy5fc291cmNlVmll
dyA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTb3VyY2VGcmFtZSh0aGlzLnJlcXVlc3QpOwot
ICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlVmlldzsKLSAgICB9LAotCi0gICAgY29udGVudExv
YWRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3QuY29udGVu
dCB8fCAhdGhpcy5zb3VyY2VWaWV3KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2VtcHR5Vmll
dykgewotICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5VmlldyA9IG5ldyBXZWJJbnNwZWN0b3Iu
RW1wdHlWaWV3KFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGhpcyByZXF1ZXN0IGhhcyBubyByZXNw
b25zZSBkYXRhIGF2YWlsYWJsZS4iKSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZW1wdHlWaWV3
LnNob3codGhpcy5lbGVtZW50KTsKLSAgICAgICAgICAgICAgICB0aGlzLmlubmVyVmlldyA9IHRo
aXMuX2VtcHR5VmlldzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmICh0aGlzLl9lbXB0eVZpZXcpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9lbXB0eVZp
ZXcuZGV0YWNoKCk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2VtcHR5VmlldzsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5zb3VyY2VWaWV3LnNob3codGhpcy5lbGVt
ZW50KTsKLSAgICAgICAgICAgIHRoaXMuaW5uZXJWaWV3ID0gdGhpcy5zb3VyY2VWaWV3OwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlJlcXVlc3RDb250
ZW50Vmlldy5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUmVxdWVzdFRpbWluZ1ZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1JlcXVlc3RUaW1pbmdWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2M2QwN2U1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVxdWVzdFRpbWluZ1ZpZXcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAotICovCi1X
ZWJJbnNwZWN0b3IuUmVxdWVzdFRpbWluZ1ZpZXcgPSBmdW5jdGlvbihyZXF1ZXN0KQotewotICAg
IFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInJlc291cmNlLXRpbWluZy12aWV3Iik7Ci0KLSAgICB0aGlzLl9yZXF1ZXN0ID0gcmVx
dWVzdDsKLX0KLQotV2ViSW5zcGVjdG9yLlJlcXVlc3RUaW1pbmdWaWV3LnByb3RvdHlwZSA9IHsK
LSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVxdWVzdC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVudHMuVGltaW5n
Q2hhbmdlZCwgdGhpcy5fcmVmcmVzaCwgdGhpcyk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9yZXF1
ZXN0LnRpbWluZykgewotICAgICAgICAgICAgaWYgKCF0aGlzLl9lbXB0eVZpZXcpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9lbXB0eVZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkVtcHR5VmlldyhX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoaXMgcmVxdWVzdCBoYXMgbm8gZGV0YWlsZWQgdGltaW5n
IGluZm8uIikpOwotICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5Vmlldy5zaG93KHRoaXMuZWxl
bWVudCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbm5lclZpZXcgPSB0aGlzLl9lbXB0eVZpZXc7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAodGhpcy5fZW1wdHlWaWV3KSB7Ci0gICAgICAgICAgICB0aGlzLl9lbXB0eVZpZXcuZGV0
YWNoKCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fZW1wdHlWaWV3OwotICAgICAgICB9Ci0K
LSAgICAgICAgdGhpcy5fcmVmcmVzaCgpOwotICAgIH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdC5FdmVudHMuVGltaW5nQ2hhbmdlZCwgdGhpcy5fcmVm
cmVzaCwgdGhpcyk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fdGFibGVFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fdGFibGVF
bGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fdGFibGVFbGVtZW50KTsKLQot
ICAgICAgICB0aGlzLl90YWJsZUVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuUmVxdWVzdFRpbWluZ1Zp
ZXcuY3JlYXRlVGltaW5nVGFibGUodGhpcy5fcmVxdWVzdCk7Ci0gICAgICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLl90YWJsZUVsZW1lbnQpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0KLVdlYkluc3BlY3Rvci5SZXF1
ZXN0VGltaW5nVmlldy5jcmVhdGVUaW1pbmdUYWJsZSA9IGZ1bmN0aW9uKHJlcXVlc3QpCi17Ci0g
ICAgdmFyIHRhYmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0g
ICAgdmFyIHJvd3MgPSBbXTsKLQotICAgIGZ1bmN0aW9uIGFkZFJvdyh0aXRsZSwgY2xhc3NOYW1l
LCBzdGFydCwgZW5kKQotICAgIHsKLSAgICAgICAgdmFyIHJvdyA9IHt9OwotICAgICAgICByb3cu
dGl0bGUgPSB0aXRsZTsKLSAgICAgICAgcm93LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICAg
ICAgcm93LnN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIHJvdy5lbmQgPSBlbmQ7Ci0gICAgICAgIHJv
d3MucHVzaChyb3cpOwotICAgIH0KLQotICAgIGlmIChyZXF1ZXN0LnRpbWluZy5wcm94eVN0YXJ0
ICE9PSAtMSkKLSAgICAgICAgYWRkUm93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJveHkiKSwg
InByb3h5IiwgcmVxdWVzdC50aW1pbmcucHJveHlTdGFydCwgcmVxdWVzdC50aW1pbmcucHJveHlF
bmQpOwotCi0gICAgaWYgKHJlcXVlc3QudGltaW5nLmRuc1N0YXJ0ICE9PSAtMSkKLSAgICAgICAg
YWRkUm93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRE5TIExvb2t1cCIpLCAiZG5zIiwgcmVxdWVz
dC50aW1pbmcuZG5zU3RhcnQsIHJlcXVlc3QudGltaW5nLmRuc0VuZCk7Ci0KLSAgICBpZiAocmVx
dWVzdC50aW1pbmcuY29ubmVjdFN0YXJ0ICE9PSAtMSkgewotICAgICAgICBpZiAocmVxdWVzdC5j
b25uZWN0aW9uUmV1c2VkKQotICAgICAgICAgICAgYWRkUm93KFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQmxvY2tpbmciKSwgImNvbm5lY3RpbmciLCByZXF1ZXN0LnRpbWluZy5jb25uZWN0U3RhcnQs
IHJlcXVlc3QudGltaW5nLmNvbm5lY3RFbmQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHZhciBjb25uZWN0U3RhcnQgPSByZXF1ZXN0LnRpbWluZy5jb25uZWN0U3RhcnQ7Ci0gICAgICAg
ICAgICAvLyBDb25uZWN0aW9uIGluY2x1ZGVzIEROUywgc3VidHJhY3QgaXQgaGVyZS4KLSAgICAg
ICAgICAgIGlmIChyZXF1ZXN0LnRpbWluZy5kbnNTdGFydCAhPT0gLTEpCi0gICAgICAgICAgICAg
ICAgY29ubmVjdFN0YXJ0ICs9IHJlcXVlc3QudGltaW5nLmRuc0VuZCAtIHJlcXVlc3QudGltaW5n
LmRuc1N0YXJ0OwotICAgICAgICAgICAgYWRkUm93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29u
bmVjdGluZyIpLCAiY29ubmVjdGluZyIsIGNvbm5lY3RTdGFydCwgcmVxdWVzdC50aW1pbmcuY29u
bmVjdEVuZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWVzdC50aW1pbmcuc3Ns
U3RhcnQgIT09IC0xKQotICAgICAgICBhZGRSb3coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTU0wi
KSwgInNzbCIsIHJlcXVlc3QudGltaW5nLnNzbFN0YXJ0LCByZXF1ZXN0LnRpbWluZy5zc2xFbmQp
OwotCi0gICAgdmFyIHNlbmRTdGFydCA9IHJlcXVlc3QudGltaW5nLnNlbmRTdGFydDsKLSAgICBp
ZiAocmVxdWVzdC50aW1pbmcuc3NsU3RhcnQgIT09IC0xKQotICAgICAgICBzZW5kU3RhcnQgKz0g
cmVxdWVzdC50aW1pbmcuc3NsRW5kIC0gcmVxdWVzdC50aW1pbmcuc3NsU3RhcnQ7Ci0KLSAgICBh
ZGRSb3coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZW5kaW5nIiksICJzZW5kaW5nIiwgcmVxdWVz
dC50aW1pbmcuc2VuZFN0YXJ0LCByZXF1ZXN0LnRpbWluZy5zZW5kRW5kKTsKLSAgICBhZGRSb3co
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXYWl0aW5nIiksICJ3YWl0aW5nIiwgcmVxdWVzdC50aW1p
bmcuc2VuZEVuZCwgcmVxdWVzdC50aW1pbmcucmVjZWl2ZUhlYWRlcnNFbmQpOwotICAgIGFkZFJv
dyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlY2VpdmluZyIpLCAicmVjZWl2aW5nIiwgKHJlcXVl
c3QucmVzcG9uc2VSZWNlaXZlZFRpbWUgLSByZXF1ZXN0LnRpbWluZy5yZXF1ZXN0VGltZSkgKiAx
MDAwLCAocmVxdWVzdC5lbmRUaW1lIC0gcmVxdWVzdC50aW1pbmcucmVxdWVzdFRpbWUpICogMTAw
MCk7Ci0KLSAgICBjb25zdCBjaGFydFdpZHRoID0gMjAwOwotICAgIHZhciB0b3RhbCA9IChyZXF1
ZXN0LmVuZFRpbWUgLSByZXF1ZXN0LnRpbWluZy5yZXF1ZXN0VGltZSkgKiAxMDAwOwotICAgIHZh
ciBzY2FsZSA9IGNoYXJ0V2lkdGggLyB0b3RhbDsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cm93cy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJ0ciIpOwotICAgICAgICB0YWJsZUVsZW1lbnQuYXBwZW5kQ2hpbGQodHIpOwotCi0gICAg
ICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgICAgIHRkLnRl
eHRDb250ZW50ID0gcm93c1tpXS50aXRsZTsKLSAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwot
Ci0gICAgICAgIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgdGQu
d2lkdGggPSBjaGFydFdpZHRoICsgInB4IjsKLQotICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHJvdy5jbGFzc05hbWUgPSAibmV0d29yay10
aW1pbmctcm93IjsKLSAgICAgICAgdGQuYXBwZW5kQ2hpbGQocm93KTsKLQotICAgICAgICB2YXIg
YmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBiYXIuY2xhc3NO
YW1lID0gIm5ldHdvcmstdGltaW5nLWJhciAiICsgcm93c1tpXS5jbGFzc05hbWU7Ci0gICAgICAg
IGJhci5zdHlsZS5sZWZ0ID0gc2NhbGUgKiByb3dzW2ldLnN0YXJ0ICsgInB4IjsKLSAgICAgICAg
YmFyLnN0eWxlLnJpZ2h0ID0gc2NhbGUgKiAodG90YWwgLSByb3dzW2ldLmVuZCkgKyAicHgiOwot
ICAgICAgICBiYXIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcm93c1tpXS5jb2xvcjsKLSAgICAg
ICAgYmFyLnRleHRDb250ZW50ID0gIlx1MjAwQiI7IC8vIEltcG9ydGFudCBmb3IgMC10aW1lIGl0
ZW1zIHRvIGhhdmUgMCB3aWR0aC4KLSAgICAgICAgcm93LmFwcGVuZENoaWxkKGJhcik7Ci0KLSAg
ICAgICAgdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAg
ICB0aXRsZS5jbGFzc05hbWUgPSAibmV0d29yay10aW1pbmctYmFyLXRpdGxlIjsKLSAgICAgICAg
aWYgKHRvdGFsIC0gcm93c1tpXS5lbmQgPCByb3dzW2ldLnN0YXJ0KQotICAgICAgICAgICAgdGl0
bGUuc3R5bGUucmlnaHQgPSAoc2NhbGUgKiAodG90YWwgLSByb3dzW2ldLmVuZCkgKyAzKSArICJw
eCI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRpdGxlLnN0eWxlLmxlZnQgPSAoc2NhbGUg
KiByb3dzW2ldLnN0YXJ0ICsgMykgKyAicHgiOwotICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9
IE51bWJlci5zZWNvbmRzVG9TdHJpbmcoKHJvd3NbaV0uZW5kIC0gcm93c1tpXS5zdGFydCkgLyAx
MDAwKTsKLSAgICAgICAgcm93LmFwcGVuZENoaWxkKHRpdGxlKTsKLQotICAgICAgICB0ci5hcHBl
bmRDaGlsZCh0ZCk7Ci0gICAgfQotICAgIHJldHVybiB0YWJsZUVsZW1lbnQ7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RWaWV3LmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXF1ZXN0Vmlldy5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU5ZTNlYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlcXVlc3RWaWV3LmpzCisrKyAvZGV2L251bGwKQEAg
LTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVj
dG9yLlZpZXd9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVz
dAotICovCi1XZWJJbnNwZWN0b3IuUmVxdWVzdFZpZXcgPSBmdW5jdGlvbihyZXF1ZXN0KQotewot
ICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVp
cmVkQ1NTKCJyZXNvdXJjZVZpZXcuY3NzIik7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVD
bGFzcygicmVzb3VyY2UtdmlldyIpOwotICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7Ci19Ci0K
LVdlYkluc3BlY3Rvci5SZXF1ZXN0Vmlldy5wcm90b3R5cGUgPSB7Ci0gICAgaGFzQ29udGVudDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLk5ldHdvcmtSZXF1ZXN0fSByZXF1ZXN0Ci0gKi8KLVdlYkluc3BlY3Rv
ci5SZXF1ZXN0Vmlldy5oYXNUZXh0Q29udGVudCA9IGZ1bmN0aW9uKHJlcXVlc3QpCi17Ci0gICAg
aWYgKHJlcXVlc3QudHlwZS5pc1RleHRUeXBlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOyAKLSAg
ICBpZiAocmVxdWVzdC50eXBlID09PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5PdGhlciB8
fCByZXF1ZXN0Lmhhc0Vycm9yU3RhdHVzQ29kZSgpKQotICAgICAgICByZXR1cm4gcmVxdWVzdC5j
b250ZW50ICYmICFyZXF1ZXN0LmNvbnRlbnRFbmNvZGVkOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotLyoqCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAot
ICovCi1XZWJJbnNwZWN0b3IuUmVxdWVzdFZpZXcubm9uU291cmNlVmlld0ZvclJlcXVlc3QgPSBm
dW5jdGlvbihyZXF1ZXN0KQotewotICAgIHN3aXRjaCAocmVxdWVzdC50eXBlKSB7Ci0gICAgY2Fz
ZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5JbWFnZToKLSAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuSW1hZ2VWaWV3KHJlcXVlc3QpOwotICAgIGNhc2UgV2ViSW5zcGVjdG9yLnJl
c291cmNlVHlwZXMuRm9udDoKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRm9udFZp
ZXcocmVxdWVzdCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuUmVxdWVzdFZpZXcocmVxdWVzdCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRiMmIzOTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQot
ICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9Ci0gKiBAcGFyYW0g
ez9XZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3R9IHJlcXVlc3QKLSAqIEBwYXJhbSB7c3RyaW5n
fSB1cmwKLSAqIEBwYXJhbSB7c3RyaW5nfSBkb2N1bWVudFVSTAotICogQHBhcmFtIHtOZXR3b3Jr
QWdlbnQuRnJhbWVJZH0gZnJhbWVJZAotICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuTG9hZGVySWR9
IGxvYWRlcklkCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGV9IHR5cGUKLSAq
IEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQotICogQHBhcmFtIHtib29sZWFuPX0gaXNIaWRkZW4K
LSAqLwotV2ViSW5zcGVjdG9yLlJlc291cmNlID0gZnVuY3Rpb24ocmVxdWVzdCwgdXJsLCBkb2N1
bWVudFVSTCwgZnJhbWVJZCwgbG9hZGVySWQsIHR5cGUsIG1pbWVUeXBlLCBpc0hpZGRlbikKLXsK
LSAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICB0aGlzLnVybCA9IHVybDsKLSAgICB0
aGlzLl9kb2N1bWVudFVSTCA9IGRvY3VtZW50VVJMOwotICAgIHRoaXMuX2ZyYW1lSWQgPSBmcmFt
ZUlkOwotICAgIHRoaXMuX2xvYWRlcklkID0gbG9hZGVySWQ7Ci0gICAgdGhpcy5fdHlwZSA9IHR5
cGUgfHwgV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuT3RoZXI7Ci0gICAgdGhpcy5fbWltZVR5
cGUgPSBtaW1lVHlwZTsKLSAgICB0aGlzLl9pc0hpZGRlbiA9IGlzSGlkZGVuOwotCi0gICAgLyoq
IEB0eXBlIHs/c3RyaW5nfSAqLyB0aGlzLl9jb250ZW50OwotICAgIC8qKiBAdHlwZSB7Ym9vbGVh
bn0gKi8gdGhpcy5fY29udGVudEVuY29kZWQ7Ci0gICAgdGhpcy5fcGVuZGluZ0NvbnRlbnRDYWxs
YmFja3MgPSBbXTsKLSAgICBpZiAodGhpcy5fcmVxdWVzdCAmJiAhdGhpcy5fcmVxdWVzdC5maW5p
c2hlZCkKLSAgICAgICAgdGhpcy5fcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5OZXR3b3JrUmVxdWVzdC5FdmVudHMuRmluaXNoZWRMb2FkaW5nLCB0aGlzLl9yZXF1ZXN0Rmlu
aXNoZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnRzID0gewotICAg
IE1lc3NhZ2VBZGRlZDogIm1lc3NhZ2UtYWRkZWQiLAotICAgIE1lc3NhZ2VzQ2xlYXJlZDogIm1l
c3NhZ2VzLWNsZWFyZWQiLAotfQotCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0g
ewotICAgIC8qKgotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3R9
Ci0gICAgICovCi0gICAgZ2V0IHJlcXVlc3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X3JlcXVlc3Q7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAg
ICAgKi8KLSAgICBnZXQgdXJsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl91cmw7Ci0g
ICAgfSwKLQotICAgIHNldCB1cmwoeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VybCA9IHg7Ci0g
ICAgICAgIHRoaXMuX3BhcnNlZFVSTCA9IG5ldyBXZWJJbnNwZWN0b3IuUGFyc2VkVVJMKHgpOwot
ICAgIH0sCi0KLSAgICBnZXQgcGFyc2VkVVJMKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9wYXJzZWRVUkw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30K
LSAgICAgKi8KLSAgICBnZXQgZG9jdW1lbnRVUkwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX2RvY3VtZW50VVJMOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtOZXR3
b3JrQWdlbnQuRnJhbWVJZH0KLSAgICAgKi8KLSAgICBnZXQgZnJhbWVJZCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fZnJhbWVJZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJl
dHVybiB7TmV0d29ya0FnZW50LkxvYWRlcklkfQotICAgICAqLwotICAgIGdldCBsb2FkZXJJZCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVySWQ7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgZGlzcGxheU5hbWUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZFVSTC5kaXNwbGF5TmFtZTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJlc291cmNlVHlw
ZX0KLSAgICAgKi8KLSAgICBnZXQgdHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
cmVxdWVzdCA/IHRoaXMuX3JlcXVlc3QudHlwZSA6IHRoaXMuX3R5cGU7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgbWltZVR5cGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3QgPyB0aGlzLl9yZXF1ZXN0Lm1p
bWVUeXBlIDogdGhpcy5fbWltZVR5cGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge0FycmF5LjxXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2U+fQotICAgICAqLwotICAgIGdl
dCBtZXNzYWdlcygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZXMgfHwgW107
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlfSBtc2cKLSAgICAgKi8KLSAgICBhZGRNZXNzYWdlOiBmdW5jdGlvbihtc2cpCi0gICAg
ewotICAgICAgICBpZiAoIW1zZy5pc0Vycm9yT3JXYXJuaW5nKCkgfHwgIW1zZy5tZXNzYWdlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghdGhpcy5fbWVzc2FnZXMpCi0gICAg
ICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdOwotICAgICAgICB0aGlzLl9tZXNzYWdlcy5wdXNo
KG1zZyk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZS5FdmVudHMuTWVzc2FnZUFkZGVkLCBtc2cpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgZ2V0IGVycm9ycygpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JzIHx8IDA7Ci0gICAgfSwKLQotICAgIHNldCBl
cnJvcnMoeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Vycm9ycyA9IHg7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgd2FybmluZ3Mo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3dhcm5pbmdzIHx8IDA7Ci0gICAgfSwKLQot
ICAgIHNldCB3YXJuaW5ncyh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fd2FybmluZ3MgPSB4Owot
ICAgIH0sCi0KLSAgICBjbGVhckVycm9yc0FuZFdhcm5pbmdzOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdOwotICAgICAgICB0aGlzLl93YXJuaW5ncyA9IDA7
Ci0gICAgICAgIHRoaXMuX2Vycm9ycyA9IDA7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudHMuTWVzc2FnZXNDbGVhcmVkKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7P3N0cmluZ30KLSAgICAgKi8KLSAg
ICBnZXQgY29udGVudCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBn
ZXQgY29udGVudEVuY29kZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRF
bmNvZGVkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAg
ICovCi0gICAgY29udGVudFVSTDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX3VybDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LlJlc291cmNlVHlwZX0KLSAgICAgKi8KLSAgICBjb250ZW50VHlwZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMudHlwZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nLCBib29sZWFuLCBzdHJpbmcpfSBjYWxsYmFjawotICAg
ICAqLwotICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAg
ICAgIGlmICh0eXBlb2YgdGhpcy5fY29udGVudCAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKHRoaXMuX2NvbnRlbnQsICEhdGhpcy5fY29udGVudEVuY29kZWQsIHRoaXMu
Y2Fub25pY2FsTWltZVR5cGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICB0aGlzLl9wZW5kaW5nQ29udGVudENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKLSAg
ICAgICAgaWYgKCF0aGlzLl9yZXF1ZXN0IHx8IHRoaXMuX3JlcXVlc3QuZmluaXNoZWQpCi0gICAg
ICAgICAgICB0aGlzLl9pbm5lclJlcXVlc3RDb250ZW50KCk7Ci0gICAgfSwKLQotICAgIGNhbm9u
aWNhbE1pbWVUeXBlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy50eXBl
LmNhbm9uaWNhbE1pbWVUeXBlKCkgfHwgdGhpcy5taW1lVHlwZTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5Ci0gICAgICogQHBhcmFtIHtib29sZWFufSBj
YXNlU2Vuc2l0aXZlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBpc1JlZ2V4Ci0gICAgICogQHBh
cmFtIHtmdW5jdGlvbihBcnJheS48V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlci5TZWFyY2hN
YXRjaD4pfSBjYWxsYmFjawotICAgICAqLwotICAgIHNlYXJjaEluQ29udGVudDogZnVuY3Rpb24o
cXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAg
LyoqCi0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAg
KiBAcGFyYW0ge0FycmF5LjxQYWdlQWdlbnQuU2VhcmNoTWF0Y2g+fSBzZWFyY2hNYXRjaGVzCi0g
ICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFja1dyYXBwZXIoZXJyb3IsIHNlYXJj
aE1hdGNoZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHNlYXJjaE1hdGNoZXMg
fHwgW10pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuZnJhbWVJZCkKLSAgICAgICAg
ICAgIFBhZ2VBZ2VudC5zZWFyY2hJblJlc291cmNlKHRoaXMuZnJhbWVJZCwgdGhpcy51cmwsIHF1
ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCBjYWxsYmFja1dyYXBwZXIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsYmFjayhbXSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7RWxlbWVudH0gaW1hZ2UKLSAgICAgKi8KLSAgICBwb3B1bGF0ZUltYWdlU291cmNl
OiBmdW5jdGlvbihpbWFnZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIG9uUmVzb3VyY2VDb250
ZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGltYWdlU3JjID0gV2ViSW5zcGVjdG9y
LmNvbnRlbnRBc0RhdGFVUkwodGhpcy5fY29udGVudCwgdGhpcy5taW1lVHlwZSwgdGhpcy5fY29u
dGVudEVuY29kZWQpOwotICAgICAgICAgICAgaWYgKGltYWdlU3JjID09PSBudWxsKQotICAgICAg
ICAgICAgICAgIGltYWdlU3JjID0gdGhpcy51cmw7Ci0gICAgICAgICAgICBpbWFnZS5zcmMgPSBp
bWFnZVNyYzsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnQob25SZXNv
dXJjZUNvbnRlbnQuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIF9yZXF1ZXN0RmluaXNoZWQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlcXVlc3QucmVtb3ZlRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QuRXZlbnRzLkZpbmlzaGVkTG9hZGluZywg
dGhpcy5fcmVxdWVzdEZpbmlzaGVkLCB0aGlzKTsKLSAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdD
b250ZW50Q2FsbGJhY2tzLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuX2lubmVyUmVxdWVzdENv
bnRlbnQoKTsKLSAgICB9LAotCi0KLSAgICBfaW5uZXJSZXF1ZXN0Q29udGVudDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRSZXF1ZXN0ZWQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0ZWQgPSB0cnVlOwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKLSAgICAgICAgICog
QHBhcmFtIHtib29sZWFufSBjb250ZW50RW5jb2RlZAotICAgICAgICAgKi8KLSAgICAgICAgZnVu
Y3Rpb24gY29udGVudExvYWRlZChjb250ZW50LCBjb250ZW50RW5jb2RlZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdGhpcy5fY29udGVudCA9IGNvbnRlbnQ7Ci0gICAgICAgICAgICB0aGlzLl9j
b250ZW50RW5jb2RlZCA9IGNvbnRlbnRFbmNvZGVkOwotICAgICAgICAgICAgdmFyIGNhbGxiYWNr
cyA9IHRoaXMuX3BlbmRpbmdDb250ZW50Q2FsbGJhY2tzLnNsaWNlKCk7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAg
ICBjYWxsYmFja3NbaV0odGhpcy5fY29udGVudCwgdGhpcy5fY29udGVudEVuY29kZWQsIHRoaXMu
Y2Fub25pY2FsTWltZVR5cGUoKSk7Ci0gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ29udGVudENh
bGxiYWNrcy5sZW5ndGggPSAwOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRlbnRSZXF1
ZXN0ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/UHJv
dG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50Ci0g
ICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29kZWQKLSAgICAgICAgICovCi0g
ICAgICAgIGZ1bmN0aW9uIHJlc291cmNlQ29udGVudExvYWRlZChlcnJvciwgY29udGVudCwgY29u
dGVudEVuY29kZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCJSZXNvdXJjZSBjb250ZW50IHJlcXVlc3QgZmFpbGVkOiAi
ICsgZXJyb3IpOwotICAgICAgICAgICAgY29udGVudExvYWRlZC5jYWxsKHRoaXMsIGVycm9yID8g
bnVsbCA6IGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHRoaXMucmVxdWVzdCkgewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
KiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKLSAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVh
bn0gY29udGVudEVuY29kZWQKLSAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlw
ZQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmdW5jdGlvbiByZXF1ZXN0Q29udGVudExv
YWRlZChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgY29udGVudExvYWRlZC5jYWxsKHRoaXMsIGNvbnRlbnQsIGNvbnRlbnRF
bmNvZGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgdGhpcy5y
ZXF1ZXN0LnJlcXVlc3RDb250ZW50KHJlcXVlc3RDb250ZW50TG9hZGVkLmJpbmQodGhpcykpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFBhZ2VBZ2VudC5nZXRSZXNv
dXJjZUNvbnRlbnQodGhpcy5mcmFtZUlkLCB0aGlzLnVybCwgcmVzb3VyY2VDb250ZW50TG9hZGVk
LmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFu
fQotICAgICAqLwotICAgIGlzSGlkZGVuOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gISF0aGlzLl9pc0hpZGRlbjsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlU2NyaXB0TWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VTY3JpcHRNYXBwaW5nLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzOTA5MGFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VTY3JpcHRNYXBwaW5nLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsNDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMg
e1dlYkluc3BlY3Rvci5TY3JpcHRTb3VyY2VNYXBwaW5nfQotICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuV29ya3NwYWNlfSB3b3Jrc3BhY2UKLSAqLwotV2ViSW5zcGVjdG9yLlJlc291cmNlU2NyaXB0
TWFwcGluZyA9IGZ1bmN0aW9uKHdvcmtzcGFjZSkKLXsKLSAgICB0aGlzLl93b3Jrc3BhY2UgPSB3
b3Jrc3BhY2U7Ci0gICAgdGhpcy5fd29ya3NwYWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlVJU291cmNlQ29kZVByb3ZpZGVyLkV2ZW50cy5VSVNvdXJjZUNvZGVBZGRlZCwgdGhpcy5f
dWlTb3VyY2VDb2RlQWRkZWRUb1dvcmtzcGFjZSwgdGhpcyk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5HbG9iYWxPYmplY3RDbGVhcmVkLCB0aGlzLl9kZWJ1Z2dlclJlc2V0LCB0aGlzKTsK
LSAgICB0aGlzLl9pbml0aWFsaXplKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5SZXNvdXJjZVNjcmlw
dE1hcHBpbmcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlJhd0xvY2F0aW9ufSByYXdMb2NhdGlvbgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rv
ci5VSUxvY2F0aW9ufQotICAgICAqLwotICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5j
dGlvbihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciBkZWJ1Z2dlck1vZGVsTG9jYXRp
b24gPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufSAqLyAo
cmF3TG9jYXRpb24pOwotICAgICAgICB2YXIgc2NyaXB0ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuc2NyaXB0Rm9ySWQoZGVidWdnZXJNb2RlbExvY2F0aW9uLnNjcmlwdElkKTsKLSAgICAg
ICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3dvcmtzcGFjZVVJU291cmNlQ29kZUZvclNjcmlw
dChzY3JpcHQpOwotICAgICAgICBpZiAoIXVpU291cmNlQ29kZSkKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICB2YXIgc2NyaXB0RmlsZSA9IHVpU291cmNlQ29kZS5zY3JpcHRGaWxl
KCk7Ci0gICAgICAgIGlmIChzY3JpcHRGaWxlICYmICgoc2NyaXB0RmlsZS5oYXNEaXZlcmdlZEZy
b21WTSgpICYmICFzY3JpcHRGaWxlLmlzTWVyZ2luZ1RvVk0oKSkgfHwgc2NyaXB0RmlsZS5pc0Rp
dmVyZ2luZ0Zyb21WTSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgZGVidWdnZXJNb2Rl
bExvY2F0aW9uLmxpbmVOdW1iZXIsIGRlYnVnZ2VyTW9kZWxMb2NhdGlvbi5jb2x1bW5OdW1iZXIg
fHwgMCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJ
U291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1i
ZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uTnVtYmVyCi0gICAgICogQHJldHVybiB7
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRpb259Ci0gICAgICovCi0gICAgdWlMb2Nh
dGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9zY3JpcHRzRm9y
VUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlw
dHMubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmNy
ZWF0ZVJhd0xvY2F0aW9uKHNjcmlwdHNbMF0sIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAg
aXNJZGVudGl0eTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gc2NyaXB0
Ci0gICAgICovCi0gICAgYWRkU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQpCi0gICAgewotICAgICAg
ICBpZiAoc2NyaXB0LmlzQW5vbnltb3VzU2NyaXB0KCkgfHwgc2NyaXB0LmlzRHluYW1pY1Njcmlw
dCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzY3JpcHQucHVzaFNvdXJjZU1hcHBp
bmcodGhpcyk7Ci0gICAgICAgIAotICAgICAgICB2YXIgc2NyaXB0c0ZvclNvdXJjZVVSTCA9IHNj
cmlwdC5pc0lubGluZVNjcmlwdCgpID8gdGhpcy5faW5saW5lU2NyaXB0c0ZvclNvdXJjZVVSTCA6
IHRoaXMuX25vbklubGluZVNjcmlwdHNGb3JTb3VyY2VVUkw7Ci0gICAgICAgIHNjcmlwdHNGb3JT
b3VyY2VVUkxbc2NyaXB0LnNvdXJjZVVSTF0gPSBzY3JpcHRzRm9yU291cmNlVVJMW3NjcmlwdC5z
b3VyY2VVUkxdIHx8IFtdOwotICAgICAgICBzY3JpcHRzRm9yU291cmNlVVJMW3NjcmlwdC5zb3Vy
Y2VVUkxdLnB1c2goc2NyaXB0KTsKLQotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5f
d29ya3NwYWNlVUlTb3VyY2VDb2RlRm9yU2NyaXB0KHNjcmlwdCk7Ci0gICAgICAgIGlmICghdWlT
b3VyY2VDb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2JpbmRVSVNv
dXJjZUNvZGVUb1NjcmlwdHModWlTb3VyY2VDb2RlLCBbc2NyaXB0XSk7Ci0gICAgfSwKLQotICAg
IF91aVNvdXJjZUNvZGVBZGRlZFRvV29ya3NwYWNlOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0g
ICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNvdXJj
ZUNvZGV9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgaWYgKCF1aVNvdXJjZUNvZGUudXJsKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0
c0ZvclVJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICBpZiAoIXNjcmlwdHMubGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2JpbmRVSVNvdXJjZUNv
ZGVUb1NjcmlwdHModWlTb3VyY2VDb2RlLCBzY3JpcHRzKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAg
ICAgKi8KLSAgICBfaGFzTWVyZ2VkVG9WTTogZnVuY3Rpb24odWlTb3VyY2VDb2RlKQotICAgIHsK
LSAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9zY3JpcHRzRm9yVUlTb3VyY2VDb2RlKHVpU291
cmNlQ29kZSk7Ci0gICAgICAgIGlmICghc2NyaXB0cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIHNjcmlwdHNbaV0udXBkYXRlTG9jYXRpb25zKCk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2Rl
Ci0gICAgICovCi0gICAgX2hhc0RpdmVyZ2VkRnJvbVZNOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUp
Ci0gICAgewotICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHNGb3JVSVNvdXJjZUNv
ZGUodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgaWYgKCFzY3JpcHRzLmxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsg
KytpKQotICAgICAgICAgICAgc2NyaXB0c1tpXS51cGRhdGVMb2NhdGlvbnMoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2NyaXB0fSBzY3JpcHQKLSAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfQotICAgICAqLwotICAgIF93
b3Jrc3BhY2VVSVNvdXJjZUNvZGVGb3JTY3JpcHQ6IGZ1bmN0aW9uKHNjcmlwdCkKLSAgICB7Ci0g
ICAgICAgIGlmIChzY3JpcHQuaXNBbm9ueW1vdXNTY3JpcHQoKSB8fCBzY3JpcHQuaXNEeW5hbWlj
U2NyaXB0KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgLy8gRklYTUU6IHdv
cmthcm91bmQgZm9yIHNjcmlwdC5pc0R5bmFtaWNTY3JpcHQoKSBiZWluZyB1bnJlbGlhYmxlLgot
ICAgICAgICBpZiAoIXNjcmlwdC5pc0lubGluZVNjcmlwdCgpICYmIHRoaXMuX2lubGluZVNjcmlw
dHNGb3JTb3VyY2VVUkxbc2NyaXB0LnNvdXJjZVVSTF0pCi0gICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkwoc2Ny
aXB0LnNvdXJjZVVSTCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICogQHJldHVybiB7QXJyYXku
PFdlYkluc3BlY3Rvci5TY3JpcHQ+fQotICAgICAqLwotICAgIF9zY3JpcHRzRm9yVUlTb3VyY2VD
b2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIgaXNJbmxpbmVT
Y3JpcHQ7Ci0gICAgICAgIHN3aXRjaCAodWlTb3VyY2VDb2RlLmNvbnRlbnRUeXBlKCkpIHsKLSAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5Eb2N1bWVudDoKLSAgICAgICAg
ICAgIGlzSW5saW5lU2NyaXB0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlNjcmlwdDoKLSAgICAgICAgICAgIGlzSW5s
aW5lU2NyaXB0ID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXVpU291cmNl
Q29kZS51cmwpCi0gICAgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgIHZhciBzY3JpcHRzRm9y
U291cmNlVVJMID0gaXNJbmxpbmVTY3JpcHQgPyB0aGlzLl9pbmxpbmVTY3JpcHRzRm9yU291cmNl
VVJMIDogdGhpcy5fbm9uSW5saW5lU2NyaXB0c0ZvclNvdXJjZVVSTDsKLSAgICAgICAgcmV0dXJu
IHNjcmlwdHNGb3JTb3VyY2VVUkxbdWlTb3VyY2VDb2RlLnVybF0gfHwgW107Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3Vy
Y2VDb2RlCi0gICAgICogQHBhcmFtIHtBcnJheS48V2ViSW5zcGVjdG9yLlNjcmlwdD59IHNjcmlw
dHMKLSAgICAgKi8KLSAgICBfYmluZFVJU291cmNlQ29kZVRvU2NyaXB0czogZnVuY3Rpb24odWlT
b3VyY2VDb2RlLCBzY3JpcHRzKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0
cy5sZW5ndGgpOwotICAgICAgICB2YXIgc2NyaXB0RmlsZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVz
b3VyY2VTY3JpcHRGaWxlKHRoaXMsIHVpU291cmNlQ29kZSwgc2NyaXB0cyk7Ci0gICAgICAgIHVp
U291cmNlQ29kZS5zZXRTY3JpcHRGaWxlKHNjcmlwdEZpbGUpOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzY3JpcHRzW2ldLnVw
ZGF0ZUxvY2F0aW9ucygpOwotICAgICAgICB1aVNvdXJjZUNvZGUuc2V0U291cmNlTWFwcGluZyh0
aGlzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNwZWN0
b3IuU2NyaXB0Pn0gc2NyaXB0cwotICAgICAqLwotICAgIF91bmJpbmRVSVNvdXJjZUNvZGVGcm9t
U2NyaXB0czogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBzY3JpcHRzKQotICAgIHsKLSAgICAgICAg
Y29uc29sZS5hc3NlcnQoc2NyaXB0cy5sZW5ndGgpOwotICAgICAgICB2YXIgc2NyaXB0RmlsZSA9
IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlJlc291cmNlU2NyaXB0RmlsZX0gKi8gKHVpU291cmNl
Q29kZS5zY3JpcHRGaWxlKCkpOwotICAgICAgICBzY3JpcHRGaWxlLmRpc3Bvc2UoKTsKLSAgICAg
ICAgdWlTb3VyY2VDb2RlLnNldFNjcmlwdEZpbGUobnVsbCk7Ci0gICAgICAgIHVpU291cmNlQ29k
ZS5zZXRTb3VyY2VNYXBwaW5nKG51bGwpOwotICAgIH0sCi0KLSAgICBfaW5pdGlhbGl6ZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgLyoqIEB0eXBlIHshT2JqZWN0LjxzdHJpbmcsICFBcnJh
eS48IVdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+Pn0gKi8KLSAgICAgICAgdGhpcy5faW5saW5l
U2NyaXB0c0ZvclNvdXJjZVVSTCA9IHt9OwotICAgICAgICAvKiogQHR5cGUgeyFPYmplY3QuPHN0
cmluZywgIUFycmF5LjwhV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT4+fSAqLwotICAgICAgICB0
aGlzLl9ub25JbmxpbmVTY3JpcHRzRm9yU291cmNlVVJMID0ge307Ci0gICAgfSwKLQotICAgIF9k
ZWJ1Z2dlclJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICog
QHBhcmFtIHshT2JqZWN0LjxzdHJpbmcsICFBcnJheS48IVdlYkluc3BlY3Rvci5VSVNvdXJjZUNv
ZGU+Pn0gc2NyaXB0c0ZvclNvdXJjZVVSTAotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
dW5iaW5kVUlTb3VyY2VDb2RlcyhzY3JpcHRzRm9yU291cmNlVVJMKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKHZhciBzb3VyY2VVUkwgaW4gc2NyaXB0c0ZvclNvdXJjZVVSTCkgewotICAg
ICAgICAgICAgICAgIHZhciBzY3JpcHRzID0gc2NyaXB0c0ZvclNvdXJjZVVSTFtzb3VyY2VVUkxd
OwotICAgICAgICAgICAgICAgIGlmICghc2NyaXB0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93
b3Jrc3BhY2VVSVNvdXJjZUNvZGVGb3JTY3JpcHQoc2NyaXB0c1swXSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF1aVNvdXJjZUNvZGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIHRoaXMuX3VuYmluZFVJU291cmNlQ29kZUZyb21TY3JpcHRzKHVpU291cmNl
Q29kZSwgc2NyaXB0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmJp
bmRVSVNvdXJjZUNvZGVzLmNhbGwodGhpcywgdGhpcy5faW5saW5lU2NyaXB0c0ZvclNvdXJjZVVS
TCk7Ci0gICAgICAgIHVuYmluZFVJU291cmNlQ29kZXMuY2FsbCh0aGlzLCB0aGlzLl9ub25Jbmxp
bmVTY3JpcHRzRm9yU291cmNlVVJMKTsKLSAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpOwotICAg
IH0sCi19Ci0KLS8qKgotICogQGludGVyZmFjZQotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5F
dmVudFRhcmdldH0KLSAqLwotV2ViSW5zcGVjdG9yLlNjcmlwdEZpbGUgPSBmdW5jdGlvbigpCi17
Ci19Ci0KLVdlYkluc3BlY3Rvci5TY3JpcHRGaWxlLkV2ZW50cyA9IHsKLSAgICBEaWRNZXJnZVRv
Vk06ICJEaWRNZXJnZVRvVk0iLAotICAgIERpZERpdmVyZ2VGcm9tVk06ICJEaWREaXZlcmdlRnJv
bVZNIiwKLX0KLQotV2ViSW5zcGVjdG9yLlNjcmlwdEZpbGUucHJvdG90eXBlID0gewotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaGFzRGl2ZXJnZWRGcm9t
Vk06IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzRGl2ZXJnaW5nRnJvbVZNOiBmdW5jdGlvbigp
IHsgcmV0dXJuIGZhbHNlOyB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0K
LSAgICAgKi8KLSAgICBpc01lcmdpbmdUb1ZNOiBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9
LAotCi0gICAgY2hlY2tNYXBwaW5nOiBmdW5jdGlvbigpIHsgfSwKLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuU2NyaXB0RmlsZX0KLSAqIEBl
eHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVz
b3VyY2VTY3JpcHRNYXBwaW5nfSByZXNvdXJjZVNjcmlwdE1hcHBpbmcKLSAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gKi8KLVdlYkluc3BlY3Rvci5S
ZXNvdXJjZVNjcmlwdEZpbGUgPSBmdW5jdGlvbihyZXNvdXJjZVNjcmlwdE1hcHBpbmcsIHVpU291
cmNlQ29kZSwgc2NyaXB0cykKLXsKLSAgICBjb25zb2xlLmFzc2VydChzY3JpcHRzLmxlbmd0aCk7
Ci0KLSAgICBXZWJJbnNwZWN0b3IuU2NyaXB0RmlsZS5jYWxsKHRoaXMpOwotICAgIHRoaXMuX3Jl
c291cmNlU2NyaXB0TWFwcGluZyA9IHJlc291cmNlU2NyaXB0TWFwcGluZzsKLSAgICB0aGlzLl91
aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7Ci0KLSAgICBpZiAodGhpcy5fdWlTb3VyY2VDb2Rl
LmNvbnRlbnRUeXBlKCkgPT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlNjcmlwdCkKLSAg
ICAgICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0c1swXTsKLQotICAgIHRoaXMuX3VpU291cmNlQ29k
ZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLldvcmtp
bmdDb3B5Q29tbWl0dGVkLCB0aGlzLl93b3JraW5nQ29weUNvbW1pdHRlZCwgdGhpcyk7Ci0gICAg
dGhpcy5fdWlTb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNl
Q29kZS5FdmVudHMuV29ya2luZ0NvcHlDaGFuZ2VkLCB0aGlzLl93b3JraW5nQ29weUNoYW5nZWQs
IHRoaXMpOwotICAgIHRoaXMuX3VwZGF0ZSgpOwotfQotCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VT
Y3JpcHRGaWxlLnByb3RvdHlwZSA9IHsKLSAgICBfd29ya2luZ0NvcHlDb21taXR0ZWQ6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P3N0cmlu
Z30gZXJyb3IKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGlubmVyQ2FsbGJhY2soZXJy
b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZSgpOwotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93RXJyb3JN
ZXNzYWdlKGVycm9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHRoaXMuX3NjcmlwdFNvdXJjZSA9IHNvdXJjZTsKLSAgICAgICAgICAgIHRo
aXMuX3VwZGF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdGhpcy5fc2NyaXB0KQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fdWlTb3VyY2VDb2Rl
LndvcmtpbmdDb3B5KCk7Ci0gICAgICAgIGlmICh0aGlzLl9zY3JpcHQuaGFzU291cmNlVVJMICYm
ICF0aGlzLl9zb3VyY2VFbmRzV2l0aFNvdXJjZVVSTChzb3VyY2UpKQotICAgICAgICAgICAgc291
cmNlICs9ICJcbiAvL0Agc291cmNlVVJMPSIgKyB0aGlzLl9zY3JpcHQuc291cmNlVVJMOwotICAg
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRTY3JpcHRTb3VyY2UodGhpcy5fc2Ny
aXB0LnNjcmlwdElkLCBzb3VyY2UsIGlubmVyQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2lzRGl2
ZXJnZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl91aVNvdXJjZUNvZGUu
aXNEaXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghdGhpcy5f
c2NyaXB0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodHlwZW9mIHRo
aXMuX3NjcmlwdFNvdXJjZSA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJldHVybiAhdGhpcy5fc291cmNlTWF0Y2hlc1NjcmlwdFNvdXJjZSh0aGlz
Ll91aVNvdXJjZUNvZGUud29ya2luZ0NvcHkoKSwgdGhpcy5fc2NyaXB0U291cmNlKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZQotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBzY3JpcHRTb3VyY2UKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAq
LwotICAgIF9zb3VyY2VNYXRjaGVzU2NyaXB0U291cmNlOiBmdW5jdGlvbihzb3VyY2UsIHNjcmlw
dFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmICghc2NyaXB0U291cmNlLnN0YXJ0c1dpdGgoc291
cmNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFyIHNjcmlwdFNvdXJj
ZVRhaWwgPSBzY3JpcHRTb3VyY2Uuc3Vic3RyKHNvdXJjZS5sZW5ndGgpLnRyaW0oKTsKLSAgICAg
ICAgcmV0dXJuICFzY3JpcHRTb3VyY2VUYWlsIHx8ICEhc2NyaXB0U291cmNlVGFpbC5tYXRjaCgv
XlwvXC9AXHNzb3VyY2VVUkw9XHMqKFxTKj8pXHMqJC9tKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0g
ICAgICovCi0gICAgX3NvdXJjZUVuZHNXaXRoU291cmNlVVJMOiBmdW5jdGlvbihzb3VyY2UpCi0g
ICAgewotICAgICAgICByZXR1cm4gISFzb3VyY2UubWF0Y2goL1wvXC9AXHNzb3VyY2VVUkw9XHMq
KFxTKj8pXHMqJC9tKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX3dvcmtpbmdDb3B5Q2hhbmdlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGUoKTsKLSAgICB9LAotCi0g
ICAgX3VwZGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzRGl2ZXJn
ZWQoKSAmJiAhdGhpcy5faGFzRGl2ZXJnZWRGcm9tVk0pCi0gICAgICAgICAgICB0aGlzLl9kaXZl
cmdlRnJvbVZNKCk7Ci0gICAgICAgIGVsc2UgaWYgKCF0aGlzLl9pc0RpdmVyZ2VkKCkgJiYgdGhp
cy5faGFzRGl2ZXJnZWRGcm9tVk0pCi0gICAgICAgICAgICB0aGlzLl9tZXJnZVRvVk0oKTsKLSAg
ICB9LAotCi0gICAgX2RpdmVyZ2VGcm9tVk06IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2lzRGl2ZXJnaW5nRnJvbVZNID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fcmVzb3VyY2VTY3Jp
cHRNYXBwaW5nLl9oYXNEaXZlcmdlZEZyb21WTSh0aGlzLl91aVNvdXJjZUNvZGUpOwotICAgICAg
ICBkZWxldGUgdGhpcy5faXNEaXZlcmdpbmdGcm9tVk07Ci0gICAgICAgIHRoaXMuX2hhc0RpdmVy
Z2VkRnJvbVZNID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlNjcmlwdEZpbGUuRXZlbnRzLkRpZERpdmVyZ2VGcm9tVk0sIHRoaXMuX3Vp
U291cmNlQ29kZSk7Ci0gICAgfSwKLQotICAgIF9tZXJnZVRvVk06IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9oYXNEaXZlcmdlZEZyb21WTTsKLSAgICAgICAgdGhpcy5f
aXNNZXJnaW5nVG9WTSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlU2NyaXB0TWFwcGlu
Zy5faGFzTWVyZ2VkVG9WTSh0aGlzLl91aVNvdXJjZUNvZGUpOwotICAgICAgICBkZWxldGUgdGhp
cy5faXNNZXJnaW5nVG9WTTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlNjcmlwdEZpbGUuRXZlbnRzLkRpZE1lcmdlVG9WTSwgdGhpcy5fdWlTb3Vy
Y2VDb2RlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAg
ICAgKi8KLSAgICBoYXNEaXZlcmdlZEZyb21WTTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX2hhc0RpdmVyZ2VkRnJvbVZNOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzRGl2ZXJnaW5nRnJvbVZNOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faXNEaXZlcmdpbmdGcm9tVk07Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAg
aXNNZXJnaW5nVG9WTTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lz
TWVyZ2luZ1RvVk07Ci0gICAgfSwKLQotICAgIGNoZWNrTWFwcGluZzogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLl9zY3JpcHQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmICh0eXBlb2YgdGhpcy5fc2NyaXB0U291cmNlICE9PSAidW5kZWZpbmVkIikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fc2NyaXB0LnJlcXVlc3RDb250ZW50KGNhbGxi
YWNrLmJpbmQodGhpcykpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0gez9zdHJp
bmd9IHNvdXJjZQotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuY29kZWQKLSAgICAgICAg
ICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnRUeXBlCi0gICAgICAgICAqLwotICAgICAgICBmdW5j
dGlvbiBjYWxsYmFjayhzb3VyY2UsIGVuY29kZWQsIGNvbnRlbnRUeXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0aGlzLl9zY3JpcHRTb3VyY2UgPSBzb3VyY2U7Ci0gICAgICAgICAgICB0aGlz
Ll91cGRhdGUoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBkaXNwb3NlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29weUNvbW1pdHRlZCwgdGhp
cy5fd29ya2luZ0NvcHlDb21taXR0ZWQsIHRoaXMpOwotICAgICAgICB0aGlzLl91aVNvdXJjZUNv
ZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5X
b3JraW5nQ29weUNoYW5nZWQsIHRoaXMuX3dvcmtpbmdDb3B5Q2hhbmdlZCwgdGhpcyk7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVl
TW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJl
ZU1vZGVsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmM5YmZkLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9k
ZWwuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLk5ldHdvcmtNYW5hZ2VyfSBuZXR3b3JrTWFuYWdlcgotICovCi1XZWJJbnNwZWN0b3IuUmVz
b3VyY2VUcmVlTW9kZWwgPSBmdW5jdGlvbihuZXR3b3JrTWFuYWdlcikKLXsKLSAgICBuZXR3b3Jr
TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OZXR3b3JrTWFuYWdlci5FdmVu
dFR5cGVzLlJlcXVlc3RGaW5pc2hlZCwgdGhpcy5fb25SZXF1ZXN0RmluaXNoZWQsIHRoaXMpOwot
ICAgIG5ldHdvcmtNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5ldHdvcmtN
YW5hZ2VyLkV2ZW50VHlwZXMuUmVxdWVzdFVwZGF0ZURyb3BwZWQsIHRoaXMuX29uUmVxdWVzdFVw
ZGF0ZURyb3BwZWQsIHRoaXMpOwotCi0gICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuQ29uc29sZU1vZGVsLkV2ZW50cy5NZXNzYWdlQWRkZWQsIHRo
aXMuX2NvbnNvbGVNZXNzYWdlQWRkZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5jb25zb2xl
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNvbnNvbGVNb2RlbC5FdmVudHMuUmVwZWF0
Q291bnRVcGRhdGVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzKTsKLSAgICBXZWJJ
bnNwZWN0b3IuY29uc29sZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Db25zb2xlTW9k
ZWwuRXZlbnRzLkNvbnNvbGVDbGVhcmVkLCB0aGlzLl9jb25zb2xlQ2xlYXJlZCwgdGhpcyk7Ci0K
LSAgICBQYWdlQWdlbnQuZW5hYmxlKCk7Ci0KLSAgICBOZXR3b3JrQWdlbnQuZW5hYmxlKCk7Ci0g
ICAgdGhpcy5fZmV0Y2hSZXNvdXJjZVRyZWUoKTsKLQotICAgIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJQYWdlRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLlBhZ2VEaXNwYXRjaGVyKHRoaXMp
KTsKLQotICAgIHRoaXMuX3BlbmRpbmdDb25zb2xlTWVzc2FnZXMgPSB7fTsKLSAgICB0aGlzLl9z
ZWN1cml0eU9yaWdpbkZyYW1lQ291bnQgPSB7fTsKLX0KLQotV2ViSW5zcGVjdG9yLlJlc291cmNl
VHJlZU1vZGVsLkV2ZW50VHlwZXMgPSB7Ci0gICAgRnJhbWVBZGRlZDogIkZyYW1lQWRkZWQiLAot
ICAgIEZyYW1lTmF2aWdhdGVkOiAiRnJhbWVOYXZpZ2F0ZWQiLAotICAgIEZyYW1lRGV0YWNoZWQ6
ICJGcmFtZURldGFjaGVkIiwKLSAgICBNYWluRnJhbWVOYXZpZ2F0ZWQ6ICJNYWluRnJhbWVOYXZp
Z2F0ZWQiLAotICAgIE1haW5GcmFtZUNyZWF0ZWRPck5hdmlnYXRlZDogIk1haW5GcmFtZUNyZWF0
ZWRPck5hdmlnYXRlZCIsCi0gICAgUmVzb3VyY2VBZGRlZDogIlJlc291cmNlQWRkZWQiLAotICAg
IFdpbGxMb2FkQ2FjaGVkUmVzb3VyY2VzOiAiV2lsbExvYWRDYWNoZWRSZXNvdXJjZXMiLAotICAg
IENhY2hlZFJlc291cmNlc0xvYWRlZDogIkNhY2hlZFJlc291cmNlc0xvYWRlZCIsCi0gICAgRE9N
Q29udGVudExvYWRlZDogIkRPTUNvbnRlbnRMb2FkZWQiLAotICAgIE9uTG9hZDogIk9uTG9hZCIs
Ci0gICAgSW5zcGVjdGVkVVJMQ2hhbmdlZDogIkluc3BlY3RlZFVSTENoYW5nZWQiLAotICAgIFNl
Y3VyaXR5T3JpZ2luQWRkZWQ6ICJTZWN1cml0eU9yaWdpbkFkZGVkIiwKLSAgICBTZWN1cml0eU9y
aWdpblJlbW92ZWQ6ICJTZWN1cml0eU9yaWdpblJlbW92ZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5S
ZXNvdXJjZVRyZWVNb2RlbC5wcm90b3R5cGUgPSB7Ci0gICAgX2ZldGNoUmVzb3VyY2VUcmVlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9mcmFtZXMgPSB7fTsKLSAgICAgICAgZGVs
ZXRlIHRoaXMuX2NhY2hlZFJlc291cmNlc1Byb2Nlc3NlZDsKLSAgICAgICAgUGFnZUFnZW50Lmdl
dFJlc291cmNlVHJlZSh0aGlzLl9wcm9jZXNzQ2FjaGVkUmVzb3VyY2VzLmJpbmQodGhpcykpOwot
ICAgIH0sCi0KLSAgICBfcHJvY2Vzc0NhY2hlZFJlc291cmNlczogZnVuY3Rpb24oZXJyb3IsIG1h
aW5GcmFtZVBheWxvYWQpCi0gICAgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLldpbGxMb2FkQ2FjaGVkUmVz
b3VyY2VzKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwgPSBtYWluRnJh
bWVQYXlsb2FkLmZyYW1lLnVybDsKLSAgICAgICAgdGhpcy5fYWRkRnJhbWVzUmVjdXJzaXZlbHko
bnVsbCwgbWFpbkZyYW1lUGF5bG9hZCk7Ci0gICAgICAgIHRoaXMuX2Rpc3BhdGNoSW5zcGVjdGVk
VVJMQ2hhbmdlZCgpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5DYWNoZWRSZXNvdXJjZXNMb2Fk
ZWQpOwotICAgICAgICB0aGlzLl9jYWNoZWRSZXNvdXJjZXNQcm9jZXNzZWQgPSB0cnVlOwotICAg
IH0sCi0KLSAgICBjYWNoZWRSZXNvdXJjZXNMb2FkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9jYWNoZWRSZXNvdXJjZXNQcm9jZXNzZWQ7Ci0gICAgfSwKLQotICAg
IF9kaXNwYXRjaEluc3BlY3RlZFVSTENoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3Rvci5p
bnNwZWN0ZWRQYWdlVVJMKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuSW5zcGVjdGVkVVJMQ2hh
bmdlZCwgV2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0gZnJhbWUKLSAg
ICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBhYm91dFRvTmF2aWdhdGUKLSAgICAgKi8KLSAgICBfYWRk
RnJhbWU6IGZ1bmN0aW9uKGZyYW1lLCBhYm91dFRvTmF2aWdhdGUpCi0gICAgewotICAgICAgICB0
aGlzLl9mcmFtZXNbZnJhbWUuaWRdID0gZnJhbWU7Ci0gICAgICAgIGlmIChmcmFtZS5pc01haW5G
cmFtZSgpKQotICAgICAgICAgICAgdGhpcy5tYWluRnJhbWUgPSBmcmFtZTsKLSAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVs
LkV2ZW50VHlwZXMuRnJhbWVBZGRlZCwgZnJhbWUpOwotICAgICAgICBpZiAoIWFib3V0VG9OYXZp
Z2F0ZSkKLSAgICAgICAgICAgIHRoaXMuX2FkZFNlY3VyaXR5T3JpZ2luKGZyYW1lLnNlY3VyaXR5
T3JpZ2luKTsKLSAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9k
ZWwuRXZlbnRUeXBlcy5NYWluRnJhbWVDcmVhdGVkT3JOYXZpZ2F0ZWQsIGZyYW1lKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3VyaXR5T3JpZ2luCi0gICAg
ICovCi0gICAgX2FkZFNlY3VyaXR5T3JpZ2luOiBmdW5jdGlvbihzZWN1cml0eU9yaWdpbikKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2VjdXJpdHlPcmlnaW5GcmFtZUNvdW50W3NlY3VyaXR5
T3JpZ2luXSkgewotICAgICAgICAgICAgdGhpcy5fc2VjdXJpdHlPcmlnaW5GcmFtZUNvdW50W3Nl
Y3VyaXR5T3JpZ2luXSA9IDE7Ci0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5TZWN1cml0eU9y
aWdpbkFkZGVkLCBzZWN1cml0eU9yaWdpbik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5fc2VjdXJpdHlPcmlnaW5GcmFtZUNvdW50W3NlY3VyaXR5T3JpZ2lu
XSArPSAxOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJp
dHlPcmlnaW4KLSAgICAgKi8KLSAgICBfcmVtb3ZlU2VjdXJpdHlPcmlnaW46IGZ1bmN0aW9uKHNl
Y3VyaXR5T3JpZ2luKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2VjdXJp
dHlPcmlnaW5GcmFtZUNvdW50W3NlY3VyaXR5T3JpZ2luXSk7Ci0gICAgICAgIGlmICh0aGlzLl9z
ZWN1cml0eU9yaWdpbkZyYW1lQ291bnRbc2VjdXJpdHlPcmlnaW5dID09PSAxKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgdGhpcy5fc2VjdXJpdHlPcmlnaW5GcmFtZUNvdW50W3NlY3VyaXR5T3JpZ2lu
XTsKLSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLlNlY3VyaXR5T3JpZ2luUmVtb3ZlZCwgc2Vj
dXJpdHlPcmlnaW4pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX3NlY3VyaXR5T3JpZ2luRnJhbWVDb3VudFtzZWN1cml0eU9yaWdpbl0gLT0gMTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59Ci0gICAgICovCi0g
ICAgc2VjdXJpdHlPcmlnaW5zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gT2Jq
ZWN0LmtleXModGhpcy5fc2VjdXJpdHlPcmlnaW5GcmFtZUNvdW50KTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRnJhbWV9IG1haW5G
cmFtZQotICAgICAqLwotICAgIF9oYW5kbGVNYWluRnJhbWVEZXRhY2hlZDogZnVuY3Rpb24obWFp
bkZyYW1lKQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlJlc291cmNlVHJlZUZyYW1lfSBmcmFtZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rp
b24gcmVtb3ZlT3JpZ2luRm9yRnJhbWUoZnJhbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZnJhbWUuY2hpbGRGcmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgcmVtb3ZlT3JpZ2luRm9yRnJhbWUuY2FsbCh0aGlzLCBmcmFtZS5jaGlsZEZyYW1l
c1tpXSk7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fcmVtb3ZlU2VjdXJpdHlPcmlnaW4oZnJhbWUuc2VjdXJpdHlPcmlnaW4pOwot
ICAgICAgICB9Ci0gICAgICAgIHJlbW92ZU9yaWdpbkZvckZyYW1lLmNhbGwodGhpcywgV2ViSW5z
cGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLm1haW5GcmFtZSk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7UGFnZUFnZW50LkZyYW1lfSBmcmFtZVBheWxvYWQKLSAgICAgKi8KLSAg
ICBfZnJhbWVOYXZpZ2F0ZWQ6IGZ1bmN0aW9uKGZyYW1lUGF5bG9hZCkKLSAgICB7Ci0gICAgICAg
IC8vIERvIG5vdGhpbmcgdW5sZXNzIGNhY2hlZCByZXNvdXJjZSB0cmVlIGlzIHByb2Nlc3NlZCAt
IGl0IHdpbGwgb3ZlcndyaXRlIGV2ZXJ5dGhpbmcuCi0gICAgICAgIGlmICghdGhpcy5fY2FjaGVk
UmVzb3VyY2VzUHJvY2Vzc2VkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgZnJh
bWUgPSB0aGlzLl9mcmFtZXNbZnJhbWVQYXlsb2FkLmlkXTsKLSAgICAgICAgdmFyIGFkZGVkT3Jp
Z2luOwotICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgIC8vIE5hdmlnYXRpb24gd2l0
aGluIGV4aXN0aW5nIGZyYW1lLgotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU2VjdXJpdHlPcmln
aW4oZnJhbWUuc2VjdXJpdHlPcmlnaW4pOwotICAgICAgICAgICAgZnJhbWUuX25hdmlnYXRlKGZy
YW1lUGF5bG9hZCk7Ci0gICAgICAgICAgICBhZGRlZE9yaWdpbiA9IGZyYW1lLnNlY3VyaXR5T3Jp
Z2luOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRWl0aGVyIGEgbmV3IGZyYW1l
IG9yIGEgbWFpbiBmcmFtZSBuYXZpZ2F0aW9uIHRvIHRoZSBuZXcgYmFja2VuZCBwcm9jZXNzLiAK
LSAgICAgICAgICAgIHZhciBwYXJlbnRGcmFtZSA9IHRoaXMuX2ZyYW1lc1tmcmFtZVBheWxvYWQu
cGFyZW50SWRdOwotICAgICAgICAgICAgZnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNl
VHJlZUZyYW1lKHRoaXMsIHBhcmVudEZyYW1lLCBmcmFtZVBheWxvYWQpOwotICAgICAgICAgICAg
aWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkgJiYgdGhpcy5tYWluRnJhbWUpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9oYW5kbGVNYWluRnJhbWVEZXRhY2hlZCh0aGlzLm1haW5GcmFtZSk7Ci0gICAg
ICAgICAgICAgICAgLy8gRGVmaW5pdGVseSBhIG5hdmlnYXRpb24gdG8gdGhlIG5ldyBiYWNrZW5k
IHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWVEZXRhY2hlZCh0aGlzLm1haW5G
cmFtZS5pZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9hZGRGcmFtZShmcmFt
ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBhZGRlZE9yaWdpbiA9IGZyYW1lLnNlY3VyaXR5T3JpZ2lu
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCA9IGZyYW1lLnVybDsKLQotICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVl
TW9kZWwuRXZlbnRUeXBlcy5GcmFtZU5hdmlnYXRlZCwgZnJhbWUpOwotICAgICAgICBpZiAoZnJh
bWUuaXNNYWluRnJhbWUoKSkgewotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuTWFpbkZyYW1l
TmF2aWdhdGVkLCBmcmFtZSk7Ci0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5NYWluRnJhbWVD
cmVhdGVkT3JOYXZpZ2F0ZWQsIGZyYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYWRkZWRP
cmlnaW4pCi0gICAgICAgICAgICB0aGlzLl9hZGRTZWN1cml0eU9yaWdpbihhZGRlZE9yaWdpbik7
Ci0KLSAgICAgICAgLy8gRmlsbCBmcmFtZSB3aXRoIHJldGFpbmVkIHJlc291cmNlcyAodGhlIG9u
ZXMgbG9hZGVkIHVzaW5nIG5ldyBsb2FkZXIpLgotICAgICAgICB2YXIgcmVzb3VyY2VzID0gZnJh
bWUucmVzb3VyY2VzKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuUmVzb3VyY2VBZGRlZCwgcmVz
b3VyY2VzW2ldKTsKLQotICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgIHRoaXMuX2Rpc3BhdGNoSW5zcGVjdGVkVVJMQ2hhbmdlZCgpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge05ldHdvcmtBZ2VudC5GcmFtZUlkfSBmcmFtZUlkCi0gICAgICov
Ci0gICAgX2ZyYW1lRGV0YWNoZWQ6IGZ1bmN0aW9uKGZyYW1lSWQpCi0gICAgewotICAgICAgICAv
LyBEbyBub3RoaW5nIHVubGVzcyBjYWNoZWQgcmVzb3VyY2UgdHJlZSBpcyBwcm9jZXNzZWQgLSBp
dCB3aWxsIG92ZXJ3cml0ZSBldmVyeXRoaW5nLgotICAgICAgICBpZiAoIXRoaXMuX2NhY2hlZFJl
c291cmNlc1Byb2Nlc3NlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgZnJh
bWUgPSB0aGlzLl9mcmFtZXNbZnJhbWVJZF07Ci0gICAgICAgIGlmICghZnJhbWUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcmVtb3ZlU2VjdXJpdHlPcmlnaW4oZnJhbWUu
c2VjdXJpdHlPcmlnaW4pOwotICAgICAgICBpZiAoZnJhbWUucGFyZW50RnJhbWUpCi0gICAgICAg
ICAgICBmcmFtZS5wYXJlbnRGcmFtZS5fcmVtb3ZlQ2hpbGRGcmFtZShmcmFtZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZyYW1lLl9yZW1vdmUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29u
UmVxdWVzdEZpbmlzaGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fY2FjaGVkUmVzb3VyY2VzUHJvY2Vzc2VkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHZhciByZXF1ZXN0ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3R9
ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgaWYgKHJlcXVlc3QuZmFpbGVkIHx8IHJlcXVlc3Qu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuWEhSKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX2ZyYW1lc1tyZXF1ZXN0LmZyYW1lSWRd
OwotICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IGZyYW1l
Ll9hZGRSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAgICAgdGhpcy5fYWRkUGVuZGluZ0NvbnNv
bGVNZXNzYWdlc1RvUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwot
ICAgIF9vblJlcXVlc3RVcGRhdGVEcm9wcGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5fY2FjaGVkUmVzb3VyY2VzUHJvY2Vzc2VkKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBmcmFtZUlkID0gZXZlbnQuZGF0YS5mcmFtZUlkOwotICAgICAg
ICB2YXIgZnJhbWUgPSB0aGlzLl9mcmFtZXNbZnJhbWVJZF07Ci0gICAgICAgIGlmICghZnJhbWUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHVybCA9IGV2ZW50LmRhdGEudXJs
OwotICAgICAgICBpZiAoZnJhbWUuX3Jlc291cmNlc01hcFt1cmxdKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciByZXNvdXJjZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uo
bnVsbCwgdXJsLCBmcmFtZS51cmwsIGZyYW1lSWQsIGV2ZW50LmRhdGEubG9hZGVySWQsIFdlYklu
c3BlY3Rvci5yZXNvdXJjZVR5cGVzW2V2ZW50LmRhdGEucmVzb3VyY2VUeXBlXSwgZXZlbnQuZGF0
YS5taW1lVHlwZSk7Ci0gICAgICAgIGZyYW1lLmFkZFJlc291cmNlKHJlc291cmNlKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtOZXR3b3JrQWdlbnQuRnJhbWVJZH0gZnJhbWVJ
ZAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0KLSAgICAg
Ki8KLSAgICBmcmFtZUZvcklkOiBmdW5jdGlvbihmcmFtZUlkKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2ZyYW1lc1tmcmFtZUlkXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuUmVzb3VyY2UpfSBjYWxsYmFjawotICAgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgZm9yQWxsUmVzb3VyY2VzOiBmdW5jdGlvbihj
YWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLm1haW5GcmFtZSkKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLm1haW5GcmFtZS5fY2FsbEZvckZyYW1lUmVzb3VyY2VzKGNhbGxiYWNrKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtBcnJheS48V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUZyYW1lPn0KLSAgICAgKi8KLSAgICBm
cmFtZXM6IGZ1bmN0aW9uKCkgCi0gICAgewotICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0
aGlzLl9mcmFtZXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfY29uc29sZU1lc3NhZ2VBZGRlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbXNnID0gLyoqIEB0eXBlIHtXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2V9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgdmFyIHJlc291
cmNlID0gbXNnLnVybCA/IHRoaXMucmVzb3VyY2VGb3JVUkwobXNnLnVybCkgOiBudWxsOwotICAg
ICAgICBpZiAocmVzb3VyY2UpCi0gICAgICAgICAgICB0aGlzLl9hZGRDb25zb2xlTWVzc2FnZVRv
UmVzb3VyY2UobXNnLCByZXNvdXJjZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMu
X2FkZFBlbmRpbmdDb25zb2xlTWVzc2FnZShtc2cpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZX0gbXNnCi0gICAgICovCi0gICAg
X2FkZFBlbmRpbmdDb25zb2xlTWVzc2FnZTogZnVuY3Rpb24obXNnKQotICAgIHsKLSAgICAgICAg
aWYgKCFtc2cudXJsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXRoaXMuX3Bl
bmRpbmdDb25zb2xlTWVzc2FnZXNbbXNnLnVybF0pCi0gICAgICAgICAgICB0aGlzLl9wZW5kaW5n
Q29uc29sZU1lc3NhZ2VzW21zZy51cmxdID0gW107Ci0gICAgICAgIHRoaXMuX3BlbmRpbmdDb25z
b2xlTWVzc2FnZXNbbXNnLnVybF0ucHVzaChtc2cpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZX0gcmVzb3VyY2UKLSAgICAgKi8KLSAgICBf
YWRkUGVuZGluZ0NvbnNvbGVNZXNzYWdlc1RvUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQot
ICAgIHsKLSAgICAgICAgdmFyIG1lc3NhZ2VzID0gdGhpcy5fcGVuZGluZ0NvbnNvbGVNZXNzYWdl
c1tyZXNvdXJjZS51cmxdOwotICAgICAgICBpZiAobWVzc2FnZXMpIHsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAg
dGhpcy5fYWRkQ29uc29sZU1lc3NhZ2VUb1Jlc291cmNlKG1lc3NhZ2VzW2ldLCByZXNvdXJjZSk7
Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ0NvbnNvbGVNZXNzYWdlc1tyZXNvdXJj
ZS51cmxdOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfSBtc2cKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5SZXNvdXJjZX0gcmVzb3VyY2UKLSAgICAgKi8KLSAgICBfYWRkQ29uc29sZU1lc3NhZ2VUb1Jl
c291cmNlOiBmdW5jdGlvbihtc2csIHJlc291cmNlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICht
c2cubGV2ZWwpIHsKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZUxldmVsLldhcm5pbmc6Ci0gICAgICAgICAgICByZXNvdXJjZS53YXJuaW5ncyArPSBtc2cu
cmVwZWF0RGVsdGE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgotICAgICAgICAgICAgcmVzb3Vy
Y2UuZXJyb3JzICs9IG1zZy5yZXBlYXREZWx0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHJlc291cmNlLmFkZE1lc3NhZ2UobXNnKTsKLSAgICB9LAotCi0gICAgX2Nv
bnNvbGVDbGVhcmVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBjYWxsYmFj
ayhyZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2UuY2xlYXJFcnJvcnNB
bmRXYXJuaW5ncygpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcGVuZGluZ0NvbnNvbGVN
ZXNzYWdlcyA9IHt9OwotICAgICAgICB0aGlzLmZvckFsbFJlc291cmNlcyhjYWxsYmFjayk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcmV0
dXJuIHtXZWJJbnNwZWN0b3IuUmVzb3VyY2V9Ci0gICAgICovCi0gICAgcmVzb3VyY2VGb3JVUkw6
IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAgIC8vIFdvcmtlcnMgY2FsbCBpbnRvIHRoaXMg
d2l0aCBubyBmcmFtZXMgYXZhaWxhYmxlLgotICAgICAgICByZXR1cm4gdGhpcy5tYWluRnJhbWUg
PyB0aGlzLm1haW5GcmFtZS5yZXNvdXJjZUZvclVSTCh1cmwpIDogbnVsbDsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRnJhbWV9IHBh
cmVudEZyYW1lCi0gICAgICogQHBhcmFtIHtQYWdlQWdlbnQuRnJhbWVSZXNvdXJjZVRyZWV9IGZy
YW1lVHJlZVBheWxvYWQKLSAgICAgKi8KLSAgICBfYWRkRnJhbWVzUmVjdXJzaXZlbHk6IGZ1bmN0
aW9uKHBhcmVudEZyYW1lLCBmcmFtZVRyZWVQYXlsb2FkKQotICAgIHsKLSAgICAgICAgdmFyIGZy
YW1lUGF5bG9hZCA9IGZyYW1lVHJlZVBheWxvYWQuZnJhbWU7Ci0gICAgICAgIHZhciBmcmFtZSA9
IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRnJhbWUodGhpcywgcGFyZW50RnJhbWUsIGZy
YW1lUGF5bG9hZCk7Ci0gICAgICAgIHRoaXMuX2FkZEZyYW1lKGZyYW1lKTsKLQotICAgICAgICB2
YXIgZnJhbWVSZXNvdXJjZSA9IHRoaXMuX2NyZWF0ZVJlc291cmNlRnJvbUZyYW1lUGF5bG9hZChm
cmFtZVBheWxvYWQsIGZyYW1lUGF5bG9hZC51cmwsIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVz
LkRvY3VtZW50LCBmcmFtZVBheWxvYWQubWltZVR5cGUpOwotICAgICAgICBpZiAoZnJhbWUuaXNN
YWluRnJhbWUoKSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlVVJMID0g
ZnJhbWVSZXNvdXJjZS51cmw7Ci0gICAgICAgIGZyYW1lLmFkZFJlc291cmNlKGZyYW1lUmVzb3Vy
Y2UpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBmcmFtZVRyZWVQYXlsb2FkLmNoaWxkRnJh
bWVzICYmIGkgPCBmcmFtZVRyZWVQYXlsb2FkLmNoaWxkRnJhbWVzLmxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgdGhpcy5fYWRkRnJhbWVzUmVjdXJzaXZlbHkoZnJhbWUsIGZyYW1lVHJlZVBheWxv
YWQuY2hpbGRGcmFtZXNbaV0pOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVU
cmVlUGF5bG9hZC5yZXNvdXJjZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzdWJy
ZXNvdXJjZSA9IGZyYW1lVHJlZVBheWxvYWQucmVzb3VyY2VzW2ldOwotICAgICAgICAgICAgdmFy
IHJlc291cmNlID0gdGhpcy5fY3JlYXRlUmVzb3VyY2VGcm9tRnJhbWVQYXlsb2FkKGZyYW1lUGF5
bG9hZCwgc3VicmVzb3VyY2UudXJsLCBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlc1tzdWJyZXNv
dXJjZS50eXBlXSwgc3VicmVzb3VyY2UubWltZVR5cGUpOwotICAgICAgICAgICAgZnJhbWUuYWRk
UmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7UGFnZUFnZW50LkZyYW1lfSBmcmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGV9IHR5cGUKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gbWltZVR5cGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
UmVzb3VyY2V9Ci0gICAgICovCi0gICAgX2NyZWF0ZVJlc291cmNlRnJvbUZyYW1lUGF5bG9hZDog
ZnVuY3Rpb24oZnJhbWUsIHVybCwgdHlwZSwgbWltZVR5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZShudWxsLCB1cmwsIGZyYW1lLnVybCwgZnJhbWUu
aWQsIGZyYW1lLmxvYWRlcklkLCB0eXBlLCBtaW1lVHlwZSk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsfSBtb2RlbAot
ICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUZyYW1lfSBwYXJlbnRGcmFtZQot
ICogQHBhcmFtIHtQYWdlQWdlbnQuRnJhbWV9IHBheWxvYWQKLSAqLwotV2ViSW5zcGVjdG9yLlJl
c291cmNlVHJlZUZyYW1lID0gZnVuY3Rpb24obW9kZWwsIHBhcmVudEZyYW1lLCBwYXlsb2FkKQot
ewotICAgIHRoaXMuX21vZGVsID0gbW9kZWw7Ci0gICAgdGhpcy5fcGFyZW50RnJhbWUgPSBwYXJl
bnRGcmFtZTsKLQotICAgIHRoaXMuX2lkID0gcGF5bG9hZC5pZDsKLSAgICB0aGlzLl9sb2FkZXJJ
ZCA9IHBheWxvYWQubG9hZGVySWQ7Ci0gICAgdGhpcy5fbmFtZSA9IHBheWxvYWQubmFtZTsKLSAg
ICB0aGlzLl91cmwgPSBwYXlsb2FkLnVybDsKLSAgICB0aGlzLl9zZWN1cml0eU9yaWdpbiA9IHBh
eWxvYWQuc2VjdXJpdHlPcmlnaW47Ci0gICAgdGhpcy5fbWltZVR5cGUgPSBwYXlsb2FkLm1pbWVU
eXBlOwotCi0gICAgLyoqCi0gICAgICogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VUcmVlRnJhbWU+fQotICAgICAqLwotICAgIHRoaXMuX2NoaWxkRnJhbWVzID0gW107Ci0KLSAg
ICAvKioKLSAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5SZXNvdXJj
ZT59Ci0gICAgICovCi0gICAgdGhpcy5fcmVzb3VyY2VzTWFwID0ge307Ci0KLSAgICBpZiAodGhp
cy5fcGFyZW50RnJhbWUpCi0gICAgICAgIHRoaXMuX3BhcmVudEZyYW1lLl9jaGlsZEZyYW1lcy5w
dXNoKHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRnJhbWUucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQg
aWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lkOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0IG5hbWUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX25hbWUgfHwgIiI7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgdXJsKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl91cmw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgc2VjdXJpdHlPcmlnaW4oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3NlY3VyaXR5T3JpZ2luOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0IGxvYWRlcklkKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9sb2FkZXJJZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUZyYW1lfQotICAgICAqLwotICAgIGdl
dCBwYXJlbnRGcmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50RnJhbWU7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VUcmVlRnJhbWU+fQotICAgICAqLwotICAgIGdldCBjaGlsZEZyYW1lcygpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRGcmFtZXM7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNNYWluRnJhbWU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhdGhpcy5fcGFyZW50RnJhbWU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7UGFnZUFnZW50LkZyYW1lfSBmcmFtZVBheWxvYWQK
LSAgICAgKi8KLSAgICBfbmF2aWdhdGU6IGZ1bmN0aW9uKGZyYW1lUGF5bG9hZCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2xvYWRlcklkID0gZnJhbWVQYXlsb2FkLmxvYWRlcklkOwotICAgICAgICB0
aGlzLl9uYW1lID0gZnJhbWVQYXlsb2FkLm5hbWU7Ci0gICAgICAgIHRoaXMuX3VybCA9IGZyYW1l
UGF5bG9hZC51cmw7Ci0gICAgICAgIHRoaXMuX3NlY3VyaXR5T3JpZ2luID0gZnJhbWVQYXlsb2Fk
LnNlY3VyaXR5T3JpZ2luOwotICAgICAgICB0aGlzLl9taW1lVHlwZSA9IGZyYW1lUGF5bG9hZC5t
aW1lVHlwZTsKLQotICAgICAgICB2YXIgbWFpblJlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzTWFw
W3RoaXMuX3VybF07Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlc01hcCA9IHt9OwotICAgICAgICB0
aGlzLl9yZW1vdmVDaGlsZEZyYW1lcygpOwotICAgICAgICBpZiAobWFpblJlc291cmNlICYmIG1h
aW5SZXNvdXJjZS5sb2FkZXJJZCA9PT0gdGhpcy5fbG9hZGVySWQpCi0gICAgICAgICAgICB0aGlz
LmFkZFJlc291cmNlKG1haW5SZXNvdXJjZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZX0KLSAgICAgKi8KLSAgICBnZXQgbWFpblJlc291
cmNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZXNNYXBbdGhpcy5fdXJs
XTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VUcmVlRnJhbWV9IGZyYW1lCi0gICAgICovCi0gICAgX3JlbW92ZUNoaWxkRnJhbWU6IGZ1bmN0
aW9uKGZyYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2hpbGRGcmFtZXMucmVtb3ZlKGZyYW1l
KTsKLSAgICAgICAgZnJhbWUuX3JlbW92ZSgpOwotICAgIH0sCi0KLSAgICBfcmVtb3ZlQ2hpbGRG
cmFtZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjb3B5ID0gdGhpcy5fY2hpbGRG
cmFtZXMuc2xpY2UoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3B5Lmxlbmd0aDsg
KytpKQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ2hpbGRGcmFtZShjb3B5W2ldKTsgCi0gICAg
fSwKLQotICAgIF9yZW1vdmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlbW92
ZUNoaWxkRnJhbWVzKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9tb2RlbC5fZnJhbWVzW3RoaXMu
aWRdOwotICAgICAgICB0aGlzLl9tb2RlbC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuRnJhbWVEZXRhY2hlZCwgdGhpcyk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJlc291cmNl
fSByZXNvdXJjZQotICAgICAqLwotICAgIGFkZFJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZXNvdXJjZXNNYXBbcmVzb3VyY2UudXJsXSA9PT0g
cmVzb3VyY2UpIHsKLSAgICAgICAgICAgIC8vIEFscmVhZHkgaW4gdGhlIHRyZWUsIHdlIGp1c3Qg
Z290IGFuIGV4dHJhIHVwZGF0ZS4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLl9yZXNvdXJjZXNNYXBbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlOwotICAgICAg
ICB0aGlzLl9tb2RlbC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlc291
cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuUmVzb3VyY2VBZGRlZCwgcmVzb3VyY2UpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0g
cmVxdWVzdAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZX0KLSAgICAgKi8K
LSAgICBfYWRkUmVxdWVzdDogZnVuY3Rpb24ocmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHZhciBy
ZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc01hcFtyZXF1ZXN0LnVybF07Ci0gICAgICAgIGlmIChy
ZXNvdXJjZSAmJiByZXNvdXJjZS5yZXF1ZXN0ID09PSByZXF1ZXN0KSB7Ci0gICAgICAgICAgICAv
LyBBbHJlYWR5IGluIHRoZSB0cmVlLCB3ZSBqdXN0IGdvdCBhbiBleHRyYSB1cGRhdGUuCi0gICAg
ICAgICAgICByZXR1cm4gcmVzb3VyY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzb3VyY2UgPSBu
ZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlKHJlcXVlc3QsIHJlcXVlc3QudXJsLCByZXF1ZXN0LmRv
Y3VtZW50VVJMLCByZXF1ZXN0LmZyYW1lSWQsIHJlcXVlc3QubG9hZGVySWQsIHJlcXVlc3QudHlw
ZSwgcmVxdWVzdC5taW1lVHlwZSk7Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlc01hcFtyZXNvdXJj
ZS51cmxdID0gcmVzb3VyY2U7Ci0gICAgICAgIHRoaXMuX21vZGVsLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5SZXNvdXJj
ZUFkZGVkLCByZXNvdXJjZSk7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5SZXNvdXJjZT59Ci0g
ICAgICovCi0gICAgcmVzb3VyY2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmVz
dWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIHVybCBpbiB0aGlzLl9yZXNvdXJjZXNNYXApCi0g
ICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLl9yZXNvdXJjZXNNYXBbdXJsXSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSB1cmwKLSAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlJlc291cmNlfQotICAgICAqLwot
ICAgIHJlc291cmNlRm9yVVJMOiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICB2YXIgcmVz
dWx0OwotICAgICAgICBmdW5jdGlvbiBmaWx0ZXIocmVzb3VyY2UpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChyZXNvdXJjZS51cmwgPT09IHVybCkgewotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHJlc291cmNlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NhbGxGb3JGcmFtZVJlc291cmNlcyhmaWx0ZXIp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5SZXNvdXJjZSl9IGNhbGxiYWNrCi0gICAgICogQHJl
dHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBfY2FsbEZvckZyYW1lUmVzb3VyY2VzOiBmdW5j
dGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIHVybCBpbiB0aGlzLl9yZXNv
dXJjZXNNYXApIHsKLSAgICAgICAgICAgIGlmIChjYWxsYmFjayh0aGlzLl9yZXNvdXJjZXNNYXBb
dXJsXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NoaWxkRnJhbWVzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAodGhpcy5fY2hpbGRGcmFtZXNbaV0uX2NhbGxGb3JGcmFtZVJlc291cmNl
cyhjYWxsYmFjaykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBpbXBsZW1lbnRzIHtQYWdlQWdlbnQuRGlzcGF0Y2hlcn0KLSAqLwotV2ViSW5zcGVjdG9yLlBh
Z2VEaXNwYXRjaGVyID0gZnVuY3Rpb24ocmVzb3VyY2VUcmVlTW9kZWwpCi17Ci0gICAgdGhpcy5f
cmVzb3VyY2VUcmVlTW9kZWwgPSByZXNvdXJjZVRyZWVNb2RlbDsKLX0KLQotV2ViSW5zcGVjdG9y
LlBhZ2VEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLSAgICBkb21Db250ZW50RXZlbnRGaXJlZDog
ZnVuY3Rpb24odGltZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlVHJlZU1vZGVsLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZl
bnRUeXBlcy5ET01Db250ZW50TG9hZGVkLCB0aW1lKTsKLSAgICB9LAotCi0gICAgbG9hZEV2ZW50
RmlyZWQ6IGZ1bmN0aW9uKHRpbWUpCi0gICAgewotICAgICAgICB0aGlzLl9yZXNvdXJjZVRyZWVN
b2RlbC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1v
ZGVsLkV2ZW50VHlwZXMuT25Mb2FkLCB0aW1lKTsKLSAgICB9LAotCi0gICAgZnJhbWVOYXZpZ2F0
ZWQ6IGZ1bmN0aW9uKGZyYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzb3VyY2VUcmVlTW9k
ZWwuX2ZyYW1lTmF2aWdhdGVkKGZyYW1lKTsKLSAgICB9LAotCi0gICAgZnJhbWVEZXRhY2hlZDog
ZnVuY3Rpb24oZnJhbWVJZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlVHJlZU1vZGVs
Ll9mcmFtZURldGFjaGVkKGZyYW1lSWQpOwotICAgIH0sCi0KLSAgICBmcmFtZVN0YXJ0ZWRMb2Fk
aW5nOiBmdW5jdGlvbihmcmFtZUlkKQotICAgIHsKLSAgICB9LAotCi0gICAgZnJhbWVTdG9wcGVk
TG9hZGluZzogZnVuY3Rpb24oZnJhbWVJZCkKLSAgICB7Ci0gICAgfSwKLQotICAgIGZyYW1lU2No
ZWR1bGVkTmF2aWdhdGlvbjogZnVuY3Rpb24oZnJhbWVJZCwgZGVsYXkpCi0gICAgewotICAgIH0s
Ci0KLSAgICBmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uOiBmdW5jdGlvbihmcmFtZUlk
KQotICAgIHsKLSAgICB9LAotCi0gICAgamF2YXNjcmlwdERpYWxvZ09wZW5pbmc6IGZ1bmN0aW9u
KG1lc3NhZ2UpCi0gICAgewotICAgIH0sCi0KLSAgICBqYXZhc2NyaXB0RGlhbG9nQ2xvc2VkOiBm
dW5jdGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICBzY3JpcHRzRW5hYmxlZDogZnVuY3Rpb24o
aXNFbmFibGVkKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmphdmFTY3Jp
cHREaXNhYmxlZC5zZXQoIWlzRW5hYmxlZCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBlIHtX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWx9Ci0gKi8KLVdlYkluc3BlY3Rvci5yZXNvdXJj
ZVRyZWVNb2RlbCA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlVHlwZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUmVzb3VyY2VUeXBlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Yz
MTEwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2VUeXBlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAqIEBwYXJhbSB7c3Ry
aW5nfSB0aXRsZQotICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5VGl0bGUKLSAqIEBwYXJhbSB7
c3RyaW5nfSBjb2xvcgotICogQHBhcmFtIHtib29sZWFufSBpc1RleHRUeXBlCi0gKi8KLVdlYklu
c3BlY3Rvci5SZXNvdXJjZVR5cGUgPSBmdW5jdGlvbihuYW1lLCB0aXRsZSwgY2F0ZWdvcnlUaXRs
ZSwgY29sb3IsIGlzVGV4dFR5cGUpCi17Ci0gICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgdGhp
cy5fdGl0bGUgPSB0aXRsZTsKLSAgICB0aGlzLl9jYXRlZ29yeVRpdGxlID0gY2F0ZWdvcnlUaXRs
ZTsKLSAgICB0aGlzLl9jb2xvciA9IGNvbG9yOwotICAgIHRoaXMuX2lzVGV4dFR5cGUgPSBpc1Rl
eHRUeXBlOwotfQotCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VUeXBlLnByb3RvdHlwZSA9IHsKLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgbmFtZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICB0aXRsZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgY2F0ZWdvcnlUaXRsZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5VGl0bGU7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBjb2xv
cjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzVGV4
dFR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pc1RleHRUeXBl
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0g
ICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9uYW1l
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0g
ICAgY2Fub25pY2FsTWltZVR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
ID09PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5Eb2N1bWVudCkKLSAgICAgICAgICAgIHJl
dHVybiAidGV4dC9odG1sIjsKLSAgICAgICAgaWYgKHRoaXMgPT09IFdlYkluc3BlY3Rvci5yZXNv
dXJjZVR5cGVzLlNjcmlwdCkKLSAgICAgICAgICAgIHJldHVybiAidGV4dC9qYXZhc2NyaXB0IjsK
LSAgICAgICAgaWYgKHRoaXMgPT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hl
ZXQpCi0gICAgICAgICAgICByZXR1cm4gInRleHQvY3NzIjsKLSAgICAgICAgcmV0dXJuICIiOwot
ICAgIH0KLX0KLQotLyoqCi0gKiBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCBXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24KLSAqIEBlbnVtIHshV2ViSW5zcGVjdG9y
LlJlc291cmNlVHlwZX0KLSAqLwotV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMgPSB7Ci0gICAg
RG9jdW1lbnQ6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUeXBlKCJkb2N1bWVudCIsICJEb2N1
bWVudCIsICJEb2N1bWVudHMiLCAicmdiKDQ3LDEwMiwyMzYpIiwgdHJ1ZSksCi0gICAgU3R5bGVz
aGVldDogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGUoInN0eWxlc2hlZXQiLCAiU3R5bGVz
aGVldCIsICJTdHlsZXNoZWV0cyIsICJyZ2IoMTU3LDIzMSwxMTkpIiwgdHJ1ZSksCi0gICAgSW1h
Z2U6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUeXBlKCJpbWFnZSIsICJJbWFnZSIsICJJbWFn
ZXMiLCAicmdiKDE2NCw2MCwyNTUpIiwgZmFsc2UpLAotICAgIFNjcmlwdDogbmV3IFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZVR5cGUoInNjcmlwdCIsICJTY3JpcHQiLCAiU2NyaXB0cyIsICJyZ2IoMjU1
LDEyMSwwKSIsIHRydWUpLAotICAgIFhIUjogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGUo
InhociIsICJYSFIiLCAiWEhSIiwgInJnYigyMzEsMjMxLDEwKSIsIHRydWUpLAotICAgIEZvbnQ6
IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUeXBlKCJmb250IiwgIkZvbnQiLCAiRm9udHMiLCAi
cmdiKDI1NSw4Miw2MikiLCBmYWxzZSksCi0gICAgV2ViU29ja2V0OiBuZXcgV2ViSW5zcGVjdG9y
LlJlc291cmNlVHlwZSgid2Vic29ja2V0IiwgIldlYlNvY2tldCIsICJXZWJTb2NrZXRzIiwgInJn
YigxODYsMTg2LDE4NikiLCBmYWxzZSksIC8vIEZJWE1FOiBEZWNpZGUgdGhlIGNvbG9yLgotICAg
IE90aGVyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlVHlwZSgib3RoZXIiLCAiT3RoZXIiLCAi
T3RoZXIiLCAicmdiKDE4NiwxODYsMTg2KSIsIGZhbHNlKQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVV0aWxzLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVV0aWxzLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlMzlhZTZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VVdGlscy5qcworKysgL2Rldi9udWxsCkBAIC0xLDIz
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTWF0dCBMaWxl
ayAocGV3dGVybW9vc2VAZ21haWwuY29tKS4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGgg
UGVjb3Jhcm8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAqIEByZXR1cm4gez9XZWJJbnNw
ZWN0b3IuUmVzb3VyY2V9Ci0gKi8KLVdlYkluc3BlY3Rvci5yZXNvdXJjZUZvclVSTCA9IGZ1bmN0
aW9uKHVybCkKLXsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLnJl
c291cmNlRm9yVVJMKHVybCk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UpfSBjYWxsYmFjawotICovCi1XZWJJbnNwZWN0b3IuZm9yQWxsUmVzb3Vy
Y2VzID0gZnVuY3Rpb24oY2FsbGJhY2spCi17Ci0gICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRy
ZWVNb2RlbC5mb3JBbGxSZXNvdXJjZXMoY2FsbGJhY2spOwotfQotCi0vKioKLSAqIEBwYXJhbSB7
c3RyaW5nfSB1cmwKLSAqIEByZXR1cm4ge3N0cmluZ30KLSAqLwotV2ViSW5zcGVjdG9yLmRpc3Bs
YXlOYW1lRm9yVVJMID0gZnVuY3Rpb24odXJsKQotewotICAgIGlmICghdXJsKQotICAgICAgICBy
ZXR1cm4gIiI7Ci0KLSAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VGb3JV
UkwodXJsKTsKLSAgICBpZiAocmVzb3VyY2UpCi0gICAgICAgIHJldHVybiByZXNvdXJjZS5kaXNw
bGF5TmFtZTsKLQotICAgIHZhciB1aVNvdXJjZUNvZGUgPSBXZWJJbnNwZWN0b3Iud29ya3NwYWNl
LnVpU291cmNlQ29kZUZvclVSTCh1cmwpOwotICAgIGlmICh1aVNvdXJjZUNvZGUpCi0gICAgICAg
IHJldHVybiB1aVNvdXJjZUNvZGUuZGlzcGxheU5hbWUoKTsKLQotICAgIGlmICghV2ViSW5zcGVj
dG9yLmluc3BlY3RlZFBhZ2VVUkwpCi0gICAgICAgIHJldHVybiB1cmwudHJpbVVSTCgiIik7Ci0K
LSAgICB2YXIgcGFyc2VkVVJMID0gV2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwuYXNQYXJz
ZWRVUkwoKTsKLSAgICB2YXIgbGFzdFBhdGhDb21wb25lbnQgPSBwYXJzZWRVUkwgPyBwYXJzZWRV
UkwubGFzdFBhdGhDb21wb25lbnQgOiBwYXJzZWRVUkw7Ci0gICAgdmFyIGluZGV4ID0gV2ViSW5z
cGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwuaW5kZXhPZihsYXN0UGF0aENvbXBvbmVudCk7Ci0gICAg
aWYgKGluZGV4ICE9PSAtMSAmJiBpbmRleCArIGxhc3RQYXRoQ29tcG9uZW50Lmxlbmd0aCA9PT0g
V2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwubGVuZ3RoKSB7Ci0gICAgICAgIHZhciBiYXNl
VVJMID0gV2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwuc3Vic3RyaW5nKDAsIGluZGV4KTsK
LSAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKGJhc2VVUkwpKQotICAgICAgICAgICAgcmV0dXJu
IHVybC5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIGlmICghcGFyc2VkVVJMKQotICAg
ICAgICByZXR1cm4gdXJsOwotCi0gICAgdmFyIGRpc3BsYXlOYW1lID0gdXJsLnRyaW1VUkwocGFy
c2VkVVJMLmhvc3QpOwotICAgIHJldHVybiBkaXNwbGF5TmFtZSA9PT0gIi8iID8gcGFyc2VkVVJM
Lmhvc3QgKyAiLyIgOiBkaXNwbGF5TmFtZTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30g
c3RyaW5nCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyxzdHJpbmcsbnVtYmVyPSk6Tm9kZX0g
bGlua2lmaWVyCi0gKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fQotICovCi1XZWJJbnNwZWN0
b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnRXaXRoQ3VzdG9tTGlua2lmaWVyID0gZnVuY3Rpb24o
c3RyaW5nLCBsaW5raWZpZXIpCi17Ci0gICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICB2YXIgbGlua1N0cmluZ1JlZ0V4ID0gLyg/OlthLXpB
LVpdW2EtekEtWjAtOSsuLV17Mix9OlwvXC98ZGF0YTp8d3d3XC4pW1x3JFwtXysqJz1cfFwvXFwo
KXt9W1xdXiVAJiN+LDo7LiE/XXsyLH1bXHckXC1fKyo9XHxcL1xcKHteJUAmI35dLzsKLSAgICB2
YXIgbGluZUNvbHVtblJlZ0V4ID0gLzooXGQrKSg6KFxkKykpPyQvOwotCi0gICAgd2hpbGUgKHN0
cmluZykgewotICAgICAgICB2YXIgbGlua1N0cmluZyA9IGxpbmtTdHJpbmdSZWdFeC5leGVjKHN0
cmluZyk7Ci0gICAgICAgIGlmICghbGlua1N0cmluZykKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGxpbmtTdHJpbmcgPSBsaW5rU3RyaW5nWzBdOwotICAgICAgICB2YXIgbGlua0luZGV4
ID0gc3RyaW5nLmluZGV4T2YobGlua1N0cmluZyk7Ci0gICAgICAgIHZhciBub25MaW5rID0gc3Ry
aW5nLnN1YnN0cmluZygwLCBsaW5rSW5kZXgpOwotICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9uTGluaykpOwotCi0gICAgICAgIHZhciB0aXRs
ZSA9IGxpbmtTdHJpbmc7Ci0gICAgICAgIHZhciByZWFsVVJMID0gKGxpbmtTdHJpbmcuc3RhcnRz
V2l0aCgid3d3LiIpID8gImh0dHA6Ly8iICsgbGlua1N0cmluZyA6IGxpbmtTdHJpbmcpOwotICAg
ICAgICB2YXIgbGluZUNvbHVtbk1hdGNoID0gbGluZUNvbHVtblJlZ0V4LmV4ZWMocmVhbFVSTCk7
Ci0gICAgICAgIHZhciBsaW5lTnVtYmVyOwotICAgICAgICBpZiAobGluZUNvbHVtbk1hdGNoKSB7
Ci0gICAgICAgICAgICByZWFsVVJMID0gcmVhbFVSTC5zdWJzdHJpbmcoMCwgcmVhbFVSTC5sZW5n
dGggLSBsaW5lQ29sdW1uTWF0Y2hbMF0ubGVuZ3RoKTsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIg
PSBwYXJzZUludChsaW5lQ29sdW1uTWF0Y2hbMV0sIDEwKTsKLSAgICAgICAgICAgIGxpbmVOdW1i
ZXIgPSBpc05hTihsaW5lTnVtYmVyKSA/IHVuZGVmaW5lZCA6IGxpbmVOdW1iZXI7Ci0gICAgICAg
IH0KLQotICAgICAgICB2YXIgbGlua05vZGUgPSBsaW5raWZpZXIodGl0bGUsIHJlYWxVUkwsIGxp
bmVOdW1iZXIpOwotICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGlua05vZGUpOwotICAg
ICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKGxpbmtJbmRleCArIGxpbmtTdHJpbmcubGVu
Z3RoLCBzdHJpbmcubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyaW5nKQotICAgICAgICBj
b250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyaW5nKSk7Ci0K
LSAgICByZXR1cm4gY29udGFpbmVyOwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSBzdHJp
bmcKLSAqIEByZXR1cm4ge0RvY3VtZW50RnJhZ21lbnR9Ci0gKi8KLVdlYkluc3BlY3Rvci5saW5r
aWZ5U3RyaW5nQXNGcmFnbWVudCA9IGZ1bmN0aW9uKHN0cmluZykKLXsKLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAg
ICogQHBhcmFtIHtudW1iZXI9fSBsaW5lTnVtYmVyCi0gICAgICogQHJldHVybiB7Tm9kZX0KLSAg
ICAgKi8KLSAgICBmdW5jdGlvbiBsaW5raWZpZXIodGl0bGUsIHVybCwgbGluZU51bWJlcikKLSAg
ICB7Ci0gICAgICAgIHZhciBpc0V4dGVybmFsID0gIVdlYkluc3BlY3Rvci5yZXNvdXJjZUZvclVS
TCh1cmwpOwotICAgICAgICB2YXIgdXJsTm9kZSA9IFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNO
b2RlKHVybCwgdGl0bGUsIHVuZGVmaW5lZCwgaXNFeHRlcm5hbCk7Ci0gICAgICAgIGlmICh0eXBl
b2YobGluZU51bWJlcikgIT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICB1cmxOb2RlLmxp
bmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICAgICAgdXJsTm9kZS5wcmVmZXJyZWRQYW5l
bCA9ICJzY3JpcHRzIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHVybE5v
ZGU7IAotICAgIH0KLSAgICAKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdB
c0ZyYWdtZW50V2l0aEN1c3RvbUxpbmtpZmllcihzdHJpbmcsIGxpbmtpZmllcik7Ci19Ci0KLS8q
KgotICogQHBhcmFtIHtzdHJpbmd9IHVybAotICogQHBhcmFtIHtzdHJpbmc9fSBsaW5rVGV4dAot
ICogQHBhcmFtIHtzdHJpbmc9fSBjbGFzc2VzCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0V4dGVy
bmFsCi0gKiBAcGFyYW0ge3N0cmluZz19IHRvb2x0aXBUZXh0Ci0gKiBAcmV0dXJuIHshRWxlbWVu
dH0KLSAqLwotV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUgPSBmdW5jdGlvbih1cmwsIGxp
bmtUZXh0LCBjbGFzc2VzLCBpc0V4dGVybmFsLCB0b29sdGlwVGV4dCkKLXsKLSAgICBpZiAoIWxp
bmtUZXh0KQotICAgICAgICBsaW5rVGV4dCA9IHVybDsKLSAgICBjbGFzc2VzID0gKGNsYXNzZXMg
PyBjbGFzc2VzICsgIiAiIDogIiIpOwotICAgIGNsYXNzZXMgKz0gaXNFeHRlcm5hbCA/ICJ3ZWJr
aXQtaHRtbC1leHRlcm5hbC1saW5rIiA6ICJ3ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5rIjsKLQot
ICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgIGEuaHJlZiA9IHNh
bml0aXplSHJlZih1cmwpOwotICAgIGEuY2xhc3NOYW1lID0gY2xhc3NlczsKLSAgICBpZiAodHlw
ZW9mIHRvb2x0aXBUZXh0ID09PSAidW5kZWZpbmVkIikKLSAgICAgICAgYS50aXRsZSA9IHVybDsK
LSAgICBlbHNlIGlmICh0eXBlb2YgdG9vbHRpcFRleHQgIT09ICJzdHJpbmciIHx8IHRvb2x0aXBU
ZXh0Lmxlbmd0aCkKLSAgICAgICAgYS50aXRsZSA9IHRvb2x0aXBUZXh0OwotICAgIGEudGV4dENv
bnRlbnQgPSBsaW5rVGV4dC5jZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoV2ViSW5zcGVjdG9yLkxp
bmtpZmllci5NYXhMZW5ndGhGb3JEaXNwbGF5ZWRVUkxzKTsKLSAgICBpZiAoaXNFeHRlcm5hbCkK
LSAgICAgICAgYS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsICJfYmxhbmsiKTsKLQotICAgIHJldHVy
biBhOwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAqIEBwYXJhbSB7bnVtYmVy
PX0gbGluZU51bWJlcgotICogQHJldHVybiB7c3RyaW5nfQotICovCi1XZWJJbnNwZWN0b3IuZm9y
bWF0TGlua1RleHQgPSBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIpCi17Ci0gICAgdmFyIHRleHQg
PSB1cmwgPyBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwodXJsKSA6IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiKHByb2dyYW0pIik7Ci0gICAgaWYgKHR5cGVvZiBsaW5lTnVtYmVyID09PSAi
bnVtYmVyIikKLSAgICAgICAgdGV4dCArPSAiOiIgKyAobGluZU51bWJlciArIDEpOwotICAgIHJl
dHVybiB0ZXh0OwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAqIEBwYXJhbSB7
bnVtYmVyPX0gbGluZU51bWJlcgotICogQHBhcmFtIHtzdHJpbmc9fSBjbGFzc2VzCi0gKiBAcGFy
YW0ge3N0cmluZz19IHRvb2x0aXBUZXh0Ci0gKiBAcmV0dXJuIHtFbGVtZW50fQotICovCi1XZWJJ
bnNwZWN0b3IubGlua2lmeVJlc291cmNlQXNOb2RlID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVy
LCBjbGFzc2VzLCB0b29sdGlwVGV4dCkKLXsKLSAgICB2YXIgbGlua1RleHQgPSBXZWJJbnNwZWN0
b3IuZm9ybWF0TGlua1RleHQodXJsLCBsaW5lTnVtYmVyKTsKLSAgICB2YXIgYW5jaG9yID0gV2Vi
SW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUodXJsLCBsaW5rVGV4dCwgY2xhc3NlcywgZmFsc2Us
IHRvb2x0aXBUZXh0KTsKLSAgICBhbmNob3IubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAg
cmV0dXJuIGFuY2hvcjsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3Jr
UmVxdWVzdH0gcmVxdWVzdAotICogQHBhcmFtIHtzdHJpbmc9fSBjbGFzc2VzCi0gKiBAcmV0dXJu
IHtFbGVtZW50fQotICovCi1XZWJJbnNwZWN0b3IubGlua2lmeVJlcXVlc3RBc05vZGUgPSBmdW5j
dGlvbihyZXF1ZXN0LCBjbGFzc2VzKQotewotICAgIHZhciBhbmNob3IgPSBXZWJJbnNwZWN0b3Iu
bGlua2lmeVVSTEFzTm9kZShyZXF1ZXN0LnVybCk7Ci0gICAgYW5jaG9yLnByZWZlcnJlZFBhbmVs
ID0gIm5ldHdvcmsiOwotICAgIGFuY2hvci5yZXF1ZXN0SWQgID0gcmVxdWVzdC5yZXF1ZXN0SWQ7
Ci0gICAgcmV0dXJuIGFuY2hvcjsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gY29udGVu
dAotICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnRl
bnRFbmNvZGVkCi0gKiBAcmV0dXJuIHs/c3RyaW5nfQotICovCi1XZWJJbnNwZWN0b3IuY29udGVu
dEFzRGF0YVVSTCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG1pbWVUeXBlLCBjb250ZW50RW5jb2RlZCkK
LXsKLSAgICBjb25zdCBtYXhEYXRhVXJsU2l6ZSA9IDEwMjQgKiAxMDI0OwotICAgIGlmIChjb250
ZW50ID09IG51bGwgfHwgY29udGVudC5sZW5ndGggPiBtYXhEYXRhVXJsU2l6ZSkKLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgKGNvbnRlbnRF
bmNvZGVkID8gIjtiYXNlNjQsIiA6ICIsIikgKyBjb250ZW50OwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVmlldy5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTQ4ZTVlYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDEw
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA5ICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8qKgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQotICog
QGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcgPSBmdW5jdGlvbihy
ZXNvdXJjZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMu
cmVnaXN0ZXJSZXF1aXJlZENTUygicmVzb3VyY2VWaWV3LmNzcyIpOwotCi0gICAgdGhpcy5lbGVt
ZW50LmFkZFN0eWxlQ2xhc3MoInJlc291cmNlLXZpZXciKTsKLSAgICB0aGlzLnJlc291cmNlID0g
cmVzb3VyY2U7Ci19Ci0KLVdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcucHJvdG90eXBlID0gewot
ICAgIGhhc0NvbnRlbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0K
LQotLyoqCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZX0gcmVzb3VyY2UKLSAqLwot
V2ViSW5zcGVjdG9yLlJlc291cmNlVmlldy5oYXNUZXh0Q29udGVudCA9IGZ1bmN0aW9uKHJlc291
cmNlKQotewotICAgIGlmIChyZXNvdXJjZS50eXBlLmlzVGV4dFR5cGUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7IAotICAgIGlmIChyZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IucmVzb3Vy
Y2VUeXBlcy5PdGhlcikKLSAgICAgICAgcmV0dXJuIHJlc291cmNlLmNvbnRlbnQgJiYgIXJlc291
cmNlLmNvbnRlbnRFbmNvZGVkOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZX0gcmVzb3VyY2UKLSAqLwotV2ViSW5zcGVjdG9yLlJl
c291cmNlVmlldy5ub25Tb3VyY2VWaWV3Rm9yUmVzb3VyY2UgPSBmdW5jdGlvbihyZXNvdXJjZSkK
LXsKLSAgICBzd2l0Y2ggKHJlc291cmNlLnR5cGUpIHsKLSAgICBjYXNlIFdlYkluc3BlY3Rvci5y
ZXNvdXJjZVR5cGVzLkltYWdlOgotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5JbWFn
ZVZpZXcocmVzb3VyY2UpOwotICAgIGNhc2UgV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuRm9u
dDoKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRm9udFZpZXcocmVzb3VyY2UpOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlVmll
dyhyZXNvdXJjZSk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWV9Ci0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLlJlc291cmNl
U291cmNlRnJhbWUgPSBmdW5jdGlvbihyZXNvdXJjZSkKLXsKLSAgICB0aGlzLl9yZXNvdXJjZSA9
IHJlc291cmNlOwotICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jYWxsKHRoaXMsIHJlc291
cmNlKTsKLX0KLQotV2ViSW5zcGVjdG9yLlJlc291cmNlU291cmNlRnJhbWUucHJvdG90eXBlID0g
ewotICAgIGdldCByZXNvdXJjZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3Vy
Y2U7Ci0gICAgfSwKLQotICAgIHBvcHVsYXRlVGV4dEFyZWFDb250ZXh0TWVudTogZnVuY3Rpb24o
Y29udGV4dE1lbnUsIGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRBcHBsaWNhYmxlSXRlbXModGhpcy5fcmVzb3VyY2UpOwotICAgICAgICBpZiAodGhpcy5fcmVz
b3VyY2UucmVxdWVzdCkKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEFwcGxpY2FibGVJ
dGVtcyh0aGlzLl9yZXNvdXJjZS5yZXF1ZXN0KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlV2ViU29ja2V0RnJhbWVWaWV3Lmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVdlYlNvY2tldEZy
YW1lVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVjYmIzNy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlV2ViU29j
a2V0RnJhbWVWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqLwotV2ViSW5zcGVjdG9yLlJlc291cmNl
V2ViU29ja2V0RnJhbWVWaWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UpCi17Ci0gICAgV2ViSW5zcGVj
dG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygicmVz
b3VyY2Utd2Vic29ja2V0Iik7Ci0gICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlOwotICAgIHRo
aXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgdmFyIGRhdGFHcmlkID0gbmV3IFdl
Ykluc3BlY3Rvci5EYXRhR3JpZChbCi0gICAgICAgIHtpZDogImRhdGEiLCB0aXRsZTogV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJEYXRhIiksIHNvcnRhYmxlOiBmYWxzZX0sCi0gICAgICAgIHtpZDog
Imxlbmd0aCIsIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxlbmd0aCIpLCBzb3J0YWJs
ZTogZmFsc2UsIGFsaWc6IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5BbGlnbi5SaWdodCwgd2lkdGg6
ICI1MHB4In0sCi0gICAgICAgIHtpZDogInRpbWUiLCB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJUaW1lIiksIHdpZHRoOiAiNzBweCJ9Ci0gICAgXSk7Ci0KLSAgICB2YXIgZnJhbWVzID0g
dGhpcy5yZXNvdXJjZS5mcmFtZXMoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5s
ZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgcGF5bG9hZCA9IGZyYW1lc1tpXTsKLQotICAgICAg
ICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHBheWxvYWQudGltZSAqIDEwMDApOwotICAgICAgICB2YXIg
cm93ID0gewotICAgICAgICAgICAgZGF0YTogIiIsCi0gICAgICAgICAgICBsZW5ndGg6IHR5cGVv
ZiBwYXlsb2FkLnBheWxvYWREYXRhID09PSAidW5kZWZpbmVkIiA/IHBheWxvYWQuZXJyb3JNZXNz
YWdlLmxlbmd0aC50b1N0cmluZygpIDogcGF5bG9hZC5wYXlsb2FkRGF0YS5sZW5ndGgudG9TdHJp
bmcoKSwKLSAgICAgICAgICAgIHRpbWU6IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCkKLSAgICAg
ICAgfTsKLQotICAgICAgICB2YXIgcm93Q2xhc3MgPSAiIjsKLSAgICAgICAgaWYgKHBheWxvYWQu
ZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICByb3dDbGFzcyA9ICJlcnJvciI7Ci0gICAgICAg
ICAgICByb3cuZGF0YSA9IHBheWxvYWQuZXJyb3JNZXNzYWdlOwotICAgICAgICB9IGVsc2UgaWYg
KHBheWxvYWQub3Bjb2RlID09IFdlYkluc3BlY3Rvci5SZXNvdXJjZVdlYlNvY2tldEZyYW1lVmll
dy5PcENvZGVzLlRleHRGcmFtZSkgewotICAgICAgICAgICAgaWYgKHBheWxvYWQuc2VudCkKLSAg
ICAgICAgICAgICAgICByb3dDbGFzcyA9ICJvdXRjb21pbmciOwotCi0gICAgICAgICAgICByb3cu
ZGF0YSA9IHBheWxvYWQucGF5bG9hZERhdGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICByb3dDbGFzcyA9ICJvcGNvZGUiOwotICAgICAgICAgICAgdmFyIG9wY29kZU1lYW5pbmcgPSAi
IjsKLSAgICAgICAgICAgIHN3aXRjaCAocGF5bG9hZC5vcGNvZGUpIHsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLlJlc291cmNlV2ViU29ja2V0RnJhbWVWaWV3Lk9wQ29kZXMuQ29udGlu
dWF0aW9uRnJhbWU6Ci0gICAgICAgICAgICAgICAgb3Bjb2RlTWVhbmluZyA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ29udGludWF0aW9uIEZyYW1lIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5SZXNvdXJjZVdlYlNvY2tldEZyYW1lVmll
dy5PcENvZGVzLkJpbmFyeUZyYW1lOgotICAgICAgICAgICAgICAgIG9wY29kZU1lYW5pbmcgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkJpbmFyeSBGcmFtZSIpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuUmVzb3VyY2VXZWJTb2NrZXRGcmFt
ZVZpZXcuT3BDb2Rlcy5Db25uZWN0aW9uQ2xvc2VGcmFtZToKLSAgICAgICAgICAgICAgICBvcGNv
ZGVNZWFuaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb25uZWN0aW9uIENsb3NlIEZyYW1l
Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5SZXNvdXJjZVdlYlNvY2tldEZyYW1lVmlldy5PcENvZGVzLlBpbmdGcmFtZToKLSAgICAgICAg
ICAgICAgICBvcGNvZGVNZWFuaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQaW5nIEZyYW1l
Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5SZXNvdXJjZVdlYlNvY2tldEZyYW1lVmlldy5PcENvZGVzLlBvbmdGcmFtZToKLSAgICAgICAg
ICAgICAgICBvcGNvZGVNZWFuaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQb25nIEZyYW1l
Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
b3cuZGF0YSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMgKE9wY29kZSAlZCVzKSIsIG9wY29k
ZU1lYW5pbmcsIHBheWxvYWQub3Bjb2RlLCAocGF5bG9hZC5tYXNrID8gIiwgbWFzayIgOiAiIikp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFH
cmlkTm9kZShyb3csIGZhbHNlKTsKLSAgICAgICAgZGF0YUdyaWQucm9vdE5vZGUoKS5hcHBlbmRD
aGlsZChub2RlKTsKLQotICAgICAgICBpZiAocm93Q2xhc3MpCi0gICAgICAgICAgICBub2RlLmVs
ZW1lbnQuY2xhc3NMaXN0LmFkZCgicmVzb3VyY2Utd2Vic29ja2V0LXJvdy0iICsgcm93Q2xhc3Mp
OwotCi0gICAgfQotICAgIGRhdGFHcmlkLnNob3codGhpcy5lbGVtZW50KTsKLX0KLQotV2ViSW5z
cGVjdG9yLlJlc291cmNlV2ViU29ja2V0RnJhbWVWaWV3Lk9wQ29kZXMgPSB7Ci0gICAgQ29udGlu
dWF0aW9uRnJhbWU6IDAsCi0gICAgVGV4dEZyYW1lOiAxLAotICAgIEJpbmFyeUZyYW1lOiAyLAot
ICAgIENvbm5lY3Rpb25DbG9zZUZyYW1lOiA4LAotICAgIFBpbmdGcmFtZTogOSwKLSAgICBQb25n
RnJhbWU6IDEwCi19OwotCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VXZWJTb2NrZXRGcmFtZVZpZXcu
cHJvdG90eXBlID0gewotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBl
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291
cmNlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVhYzkyOC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVs
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjMxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1pbXBvcnRTY3JpcHQoIkFw
cGxpY2F0aW9uQ2FjaGVJdGVtc1ZpZXcuanMiKTsKLWltcG9ydFNjcmlwdCgiRE9NU3RvcmFnZUl0
ZW1zVmlldy5qcyIpOwotaW1wb3J0U2NyaXB0KCJEYXRhYmFzZVF1ZXJ5Vmlldy5qcyIpOwotaW1w
b3J0U2NyaXB0KCJEYXRhYmFzZVRhYmxlVmlldy5qcyIpOwotaW1wb3J0U2NyaXB0KCJEaXJlY3Rv
cnlDb250ZW50Vmlldy5qcyIpOwotaW1wb3J0U2NyaXB0KCJJbmRleGVkREJWaWV3cy5qcyIpOwot
aW1wb3J0U2NyaXB0KCJGaWxlQ29udGVudFZpZXcuanMiKTsKLWltcG9ydFNjcmlwdCgiRmlsZVN5
c3RlbVZpZXcuanMiKTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuUGFuZWx9Ci0gKi8KLVdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbCA9IGZ1bmN0
aW9uKGRhdGFiYXNlKQotewotICAgIFdlYkluc3BlY3Rvci5QYW5lbC5jYWxsKHRoaXMsICJyZXNv
dXJjZXMiKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1MoInJlc291cmNlc1BhbmVsLmNz
cyIpOwotCi0gICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnJlc291cmNlc0xhc3RTZWxlY3RlZEl0
ZW0gPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZygicmVzb3VyY2VzTGFzdFNl
bGVjdGVkSXRlbSIsIHt9KTsKLQotICAgIHRoaXMuY3JlYXRlU2lkZWJhclZpZXdXaXRoVHJlZSgp
OwotICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuYWRkU3R5bGVDbGFzcygib3V0bGluZS1kaXNjbG9z
dXJlIik7Ci0gICAgdGhpcy5zaWRlYmFyRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJmaWx0ZXItYWxs
Iik7Ci0gICAgdGhpcy5zaWRlYmFyRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjaGlsZHJlbiIpOwot
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuYWRkU3R5bGVDbGFzcygic21hbGwiKTsKLQotICAgIHRo
aXMuc2lkZWJhclRyZWVFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNpZGViYXItdHJlZSIpOwot
Ci0gICAgdGhpcy5yZXNvdXJjZXNMaXN0VHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlN0
b3JhZ2VDYXRlZ29yeVRyZWVFbGVtZW50KHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRnJh
bWVzIiksICJGcmFtZXMiLCBbImZyYW1lLXN0b3JhZ2UtdHJlZS1pdGVtIl0pOwotICAgIHRoaXMu
c2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5yZXNvdXJjZXNMaXN0VHJlZUVsZW1lbnQpOwot
Ci0gICAgdGhpcy5kYXRhYmFzZXNMaXN0VHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlN0
b3JhZ2VDYXRlZ29yeVRyZWVFbGVtZW50KHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiV2Vi
IFNRTCIpLCAiRGF0YWJhc2VzIiwgWyJkYXRhYmFzZS1zdG9yYWdlLXRyZWUtaXRlbSJdKTsKLSAg
ICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVt
ZW50KTsKLQotICAgIHRoaXMuaW5kZXhlZERCTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3Bl
Y3Rvci5JbmRleGVkREJUcmVlRWxlbWVudCh0aGlzKTsKLSAgICB0aGlzLnNpZGViYXJUcmVlLmFw
cGVuZENoaWxkKHRoaXMuaW5kZXhlZERCTGlzdFRyZWVFbGVtZW50KTsKLQotICAgIHRoaXMubG9j
YWxTdG9yYWdlTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TdG9yYWdlQ2F0ZWdv
cnlUcmVlRWxlbWVudCh0aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvY2FsIFN0b3JhZ2Ui
KSwgIkxvY2FsU3RvcmFnZSIsIFsiZG9tc3RvcmFnZS1zdG9yYWdlLXRyZWUtaXRlbSIsICJsb2Nh
bC1zdG9yYWdlIl0pOwotICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5sb2Nh
bFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy5zZXNzaW9uU3RvcmFnZUxpc3RU
cmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5VHJlZUVsZW1lbnQo
dGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZXNzaW9uIFN0b3JhZ2UiKSwgIlNlc3Npb25T
dG9yYWdlIiwgWyJkb21zdG9yYWdlLXN0b3JhZ2UtdHJlZS1pdGVtIiwgInNlc3Npb24tc3RvcmFn
ZSJdKTsKLSAgICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuc2Vzc2lvblN0b3Jh
Z2VMaXN0VHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy5jb29raWVMaXN0VHJlZUVsZW1lbnQgPSBu
ZXcgV2ViSW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVRyZWVFbGVtZW50KHRoaXMsIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiQ29va2llcyIpLCAiQ29va2llcyIsIFsiY29va2llLXN0b3JhZ2UtdHJl
ZS1pdGVtIl0pOwotICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5jb29raWVM
aXN0VHJlZUVsZW1lbnQpOwotCi0gICAgdGhpcy5hcHBsaWNhdGlvbkNhY2hlTGlzdFRyZWVFbGVt
ZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TdG9yYWdlQ2F0ZWdvcnlUcmVlRWxlbWVudCh0aGlzLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFwcGxpY2F0aW9uIENhY2hlIiksICJBcHBsaWNhdGlvbkNh
Y2hlIiwgWyJhcHBsaWNhdGlvbi1jYWNoZS1zdG9yYWdlLXRyZWUtaXRlbSJdKTsKLSAgICB0aGlz
LnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuYXBwbGljYXRpb25DYWNoZUxpc3RUcmVlRWxl
bWVudCk7Ci0KLSAgICBpZiAoUHJlZmVyZW5jZXMuZXhwb3NlRmlsZVN5c3RlbUluc3BlY3Rpb24g
JiYgV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3MuZmlsZVN5c3RlbUluc3BlY3Rpb24u
aXNFbmFibGVkKCkpIHsKLSAgICAgICAgdGhpcy5maWxlU3lzdGVtTGlzdFRyZWVFbGVtZW50ID0g
bmV3IFdlYkluc3BlY3Rvci5GaWxlU3lzdGVtTGlzdFRyZWVFbGVtZW50KHRoaXMpOwotICAgICAg
ICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuZmlsZVN5c3RlbUxpc3RUcmVlRWxl
bWVudCk7Ci0gICAgfQotCi0gICAgdGhpcy5zdG9yYWdlVmlld3MgPSB0aGlzLnNwbGl0Vmlldy5t
YWluRWxlbWVudDsKLSAgICB0aGlzLnN0b3JhZ2VWaWV3cy5hZGRTdHlsZUNsYXNzKCJkaWZmLWNv
bnRhaW5lciIpOwotCi0gICAgdGhpcy5zdG9yYWdlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5zdG9yYWdlVmlld1N0
YXR1c0Jhckl0ZW1zQ29udGFpbmVyLmNsYXNzTmFtZSA9ICJzdGF0dXMtYmFyLWl0ZW1zIjsKLQot
ICAgIHRoaXMuX2RhdGFiYXNlVGFibGVWaWV3cyA9IG5ldyBNYXAoKTsKLSAgICB0aGlzLl9kYXRh
YmFzZVF1ZXJ5Vmlld3MgPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5fZGF0YWJhc2VUcmVlRWxlbWVu
dHMgPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5fZG9tU3RvcmFnZVZpZXdzID0gbmV3IE1hcCgpOwot
ICAgIHRoaXMuX2RvbVN0b3JhZ2VUcmVlRWxlbWVudHMgPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5f
Y29va2llVmlld3MgPSB7fTsKLSAgICB0aGlzLl9vcmlnaW5zID0ge307Ci0gICAgdGhpcy5fZG9t
YWlucyA9IHt9OwotCi0gICAgdGhpcy5zaWRlYmFyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJt
b3VzZW1vdmUiLCB0aGlzLl9vbm1vdXNlbW92ZS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhp
cy5zaWRlYmFyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIHRoaXMuX29ubW91
c2VvdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgZnVuY3Rpb24gdmlld0dldHRlcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlVmlldzsKLSAgICB9Ci0gICAgV2ViSW5z
cGVjdG9yLkdvVG9MaW5lRGlhbG9nLmluc3RhbGwodGhpcywgdmlld0dldHRlci5iaW5kKHRoaXMp
KTsKLQotICAgIGlmIChXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuY2FjaGVkUmVzb3Vy
Y2VzTG9hZGVkKCkpCi0gICAgICAgIHRoaXMuX2NhY2hlZFJlc291cmNlc0xvYWRlZCgpOwotCi0g
ICAgV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuT25Mb2FkLCB0aGlzLl9vbkxvYWRF
dmVudEZpcmVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5D
YWNoZWRSZXNvdXJjZXNMb2FkZWQsIHRoaXMuX2NhY2hlZFJlc291cmNlc0xvYWRlZCwgdGhpcyk7
Ci0gICAgV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuV2lsbExvYWRDYWNoZWRSZXNv
dXJjZXMsIHRoaXMuX3Jlc2V0V2l0aEZyYW1lcywgdGhpcyk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iu
ZGF0YWJhc2VNb2RlbC5kYXRhYmFzZXMoKS5mb3JFYWNoKHRoaXMuX2FkZERhdGFiYXNlLmJpbmQo
dGhpcykpOwotICAgIFdlYkluc3BlY3Rvci5kYXRhYmFzZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkRhdGFiYXNlTW9kZWwuRXZlbnRzLkRhdGFiYXNlQWRkZWQsIHRoaXMuX2Rh
dGFiYXNlQWRkZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJv
dG90eXBlID0gewotICAgIHN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gW3RoaXMuc3RvcmFnZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lcl07Ci0gICAg
fSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0
b3IuUGFuZWwucHJvdG90eXBlLndhc1Nob3duLmNhbGwodGhpcyk7Ci0gICAgICAgIHRoaXMuX2lu
aXRpYWxpemUoKTsKLSAgICB9LAotCi0gICAgX2luaXRpYWxpemU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQgJiYgdGhpcy5pc1Nob3dpbmcoKSAmJiB0
aGlzLl9jYWNoZWRSZXNvdXJjZXNXZXJlTG9hZGVkKSB7Ci0gICAgICAgICAgICB0aGlzLl9wb3B1
bGF0ZVJlc291cmNlVHJlZSgpOwotICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVET01TdG9yYWdl
VHJlZSgpOwotICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVBcHBsaWNhdGlvbkNhY2hlVHJlZSgp
OwotICAgICAgICAgICAgdGhpcy5faW5pdERlZmF1bHRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAg
IHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfb25M
b2FkRXZlbnRGaXJlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faW5pdERlZmF1
bHRTZWxlY3Rpb24oKTsKLSAgICB9LAotCi0gICAgX2luaXREZWZhdWx0U2VsZWN0aW9uOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBpdGVtVVJMID0gV2ViSW5zcGVjdG9yLnNldHRpbmdz
LnJlc291cmNlc0xhc3RTZWxlY3RlZEl0ZW0uZ2V0KCk7Ci0gICAgICAgIGlmIChpdGVtVVJMKSB7
Ci0gICAgICAgICAgICBmb3IgKHZhciB0cmVlRWxlbWVudCA9IHRoaXMuc2lkZWJhclRyZWUuY2hp
bGRyZW5bMF07IHRyZWVFbGVtZW50OyB0cmVlRWxlbWVudCA9IHRyZWVFbGVtZW50LnRyYXZlcnNl
TmV4dFRyZWVFbGVtZW50KGZhbHNlLCB0aGlzLnNpZGViYXJUcmVlLCB0cnVlKSkgewotICAgICAg
ICAgICAgICAgIGlmICh0cmVlRWxlbWVudC5pdGVtVVJMID09PSBpdGVtVVJMKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRyZWVFbGVtZW50LnJldmVhbEFuZFNlbGVjdCh0cnVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBtYWluUmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IuaW5zcGVj
dGVkUGFnZVVSTCAmJiB0aGlzLnJlc291cmNlc0xpc3RUcmVlRWxlbWVudCAmJiB0aGlzLnJlc291
cmNlc0xpc3RUcmVlRWxlbWVudC5leHBhbmRlZCAmJiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVl
TW9kZWwucmVzb3VyY2VGb3JVUkwoV2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwpOwotICAg
ICAgICBpZiAobWFpblJlc291cmNlKQotICAgICAgICAgICAgdGhpcy5zaG93UmVzb3VyY2UobWFp
blJlc291cmNlKTsKLSAgICB9LAotCi0gICAgX3Jlc2V0V2l0aEZyYW1lczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5yZXNvdXJjZXNMaXN0VHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGRy
ZW4oKTsKLSAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFtZUlkID0ge307Ci0gICAgICAg
IHRoaXMuX3Jlc2V0KCk7Ci0gICAgfSwKLQotICAgIF9yZXNldDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fb3JpZ2lucyA9IHt9OwotICAgICAgICB0aGlzLl9kb21haW5zID0ge307
Ci0gICAgICAgIHZhciBxdWVyeVZpZXdzID0gdGhpcy5fZGF0YWJhc2VRdWVyeVZpZXdzLnZhbHVl
cygpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5Vmlld3MubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBxdWVyeVZpZXdzW2ldLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkRhdGFiYXNlUXVlcnlWaWV3LkV2ZW50cy5TY2hlbWFVcGRhdGVkLCB0aGlzLl91cGRhdGVE
YXRhYmFzZVRhYmxlcywgdGhpcyk7Ci0gICAgICAgIHRoaXMuX2RhdGFiYXNlVGFibGVWaWV3cy5j
bGVhcigpOwotICAgICAgICB0aGlzLl9kYXRhYmFzZVF1ZXJ5Vmlld3MuY2xlYXIoKTsKLSAgICAg
ICAgdGhpcy5fZGF0YWJhc2VUcmVlRWxlbWVudHMuY2xlYXIoKTsKLSAgICAgICAgdGhpcy5fZG9t
U3RvcmFnZVZpZXdzLmNsZWFyKCk7Ci0gICAgICAgIHRoaXMuX2RvbVN0b3JhZ2VUcmVlRWxlbWVu
dHMuY2xlYXIoKTsKLSAgICAgICAgdGhpcy5fY29va2llVmlld3MgPSB7fTsKLQotICAgICAgICB0
aGlzLmRhdGFiYXNlc0xpc3RUcmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0
aGlzLmxvY2FsU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAg
ICB0aGlzLnNlc3Npb25TdG9yYWdlTGlzdFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0g
ICAgICAgIHRoaXMuY29va2llTGlzdFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAg
ICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcgJiYgISh0aGlzLnZpc2libGVWaWV3IGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVZpZXcpKQotICAgICAgICAgICAgdGhpcy52
aXNpYmxlVmlldy5kZXRhY2goKTsKLQotICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFy
SXRlbXNDb250YWluZXIucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICBpZiAodGhpcy5zaWRl
YmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5zaWRlYmFyVHJl
ZS5zZWxlY3RlZFRyZWVFbGVtZW50LmRlc2VsZWN0KCk7Ci0gICAgfSwKLQotICAgIF9wb3B1bGF0
ZVJlc291cmNlVHJlZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fdHJlZUVsZW1l
bnRGb3JGcmFtZUlkID0ge307Ci0gICAgICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2Rl
bC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5
cGVzLkZyYW1lQWRkZWQsIHRoaXMuX2ZyYW1lQWRkZWQsIHRoaXMpOwotICAgICAgICBXZWJJbnNw
ZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5GcmFtZU5hdmlnYXRlZCwgdGhpcy5fZnJhbWVOYXZp
Z2F0ZWQsIHRoaXMpOwotICAgICAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5G
cmFtZURldGFjaGVkLCB0aGlzLl9mcmFtZURldGFjaGVkLCB0aGlzKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJl
c291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuUmVzb3VyY2VBZGRlZCwgdGhpcy5fcmVzb3VyY2VB
ZGRlZCwgdGhpcyk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcG9wdWxhdGVGcmFtZShmcmFtZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgdGhpcy5fZnJhbWVBZGRlZCh7ZGF0YTpmcmFtZX0pOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZS5jaGlsZEZyYW1lcy5sZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgICAgICBwb3B1bGF0ZUZyYW1lLmNhbGwodGhpcywgZnJhbWUuY2hpbGRG
cmFtZXNbaV0pOwotCi0gICAgICAgICAgICB2YXIgcmVzb3VyY2VzID0gZnJhbWUucmVzb3VyY2Vz
KCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlcy5sZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZUFkZGVkKHtkYXRhOnJlc291cmNlc1tp
XX0pOwotICAgICAgICB9Ci0gICAgICAgIHBvcHVsYXRlRnJhbWUuY2FsbCh0aGlzLCBXZWJJbnNw
ZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZyYW1lKTsKLSAgICB9LAotCi0gICAgX2ZyYW1l
QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGZyYW1lID0gZXZlbnQu
ZGF0YTsKLSAgICAgICAgdmFyIHBhcmVudEZyYW1lID0gZnJhbWUucGFyZW50RnJhbWU7Ci0KLSAg
ICAgICAgdmFyIHBhcmVudFRyZWVFbGVtZW50ID0gcGFyZW50RnJhbWUgPyB0aGlzLl90cmVlRWxl
bWVudEZvckZyYW1lSWRbcGFyZW50RnJhbWUuaWRdIDogdGhpcy5yZXNvdXJjZXNMaXN0VHJlZUVs
ZW1lbnQ7Ci0gICAgICAgIGlmICghcGFyZW50VHJlZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIGNv
bnNvbGUud2FybigiTm8gZnJhbWUgdG8gcm91dGUgIiArIGZyYW1lLnVybCArICIgdG8uIikKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBmcmFtZVRyZWVFbGVt
ZW50ID0gbmV3IFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KHRoaXMsIGZyYW1lKTsKLSAg
ICAgICAgdGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFtZUlkW2ZyYW1lLmlkXSA9IGZyYW1lVHJlZUVs
ZW1lbnQ7Ci0gICAgICAgIHBhcmVudFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKGZyYW1lVHJlZUVs
ZW1lbnQpOwotICAgIH0sCi0KLSAgICBfZnJhbWVEZXRhY2hlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgZnJhbWUgPSBldmVudC5kYXRhOwotICAgICAgICB2YXIgZnJhbWVU
cmVlRWxlbWVudCA9IHRoaXMuX3RyZWVFbGVtZW50Rm9yRnJhbWVJZFtmcmFtZS5pZF07Ci0gICAg
ICAgIGlmICghZnJhbWVUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBkZWxldGUgdGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFtZUlkW2ZyYW1lLmlkXTsKLSAgICAgICAg
aWYgKGZyYW1lVHJlZUVsZW1lbnQucGFyZW50KQotICAgICAgICAgICAgZnJhbWVUcmVlRWxlbWVu
dC5wYXJlbnQucmVtb3ZlQ2hpbGQoZnJhbWVUcmVlRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9y
ZXNvdXJjZUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciByZXNvdXJj
ZSA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHZhciBmcmFtZUlkID0gcmVzb3VyY2UuZnJhbWVJZDsK
LQotICAgICAgICBpZiAocmVzb3VyY2Uuc3RhdHVzQ29kZSA+PSAzMDEgJiYgcmVzb3VyY2Uuc3Rh
dHVzQ29kZSA8PSAzMDMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGZyYW1l
VHJlZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVudEZvckZyYW1lSWRbZnJhbWVJZF07Ci0gICAg
ICAgIGlmICghZnJhbWVUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGZy
YW1lJ3MgbWFpbiByZXNvdXJjZSwgaXQgd2lsbCBiZSByZXRhaW5lZAotICAgICAgICAgICAgLy8g
YW5kIHJlLWFkZGVkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnJhbWVUcmVlRWxlbWVudC5hcHBlbmRSZXNvdXJjZShy
ZXNvdXJjZSk7Ci0gICAgfSwKLQotICAgIF9mcmFtZU5hdmlnYXRlZDogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICB2YXIgZnJhbWUgPSBldmVudC5kYXRhOwotCi0gICAgICAgIGlmICgh
ZnJhbWUucGFyZW50RnJhbWUpCi0gICAgICAgICAgICB0aGlzLl9yZXNldCgpOwotCi0gICAgICAg
IHZhciBmcmFtZUlkID0gZnJhbWUuaWQ7Ci0gICAgICAgIHZhciBmcmFtZVRyZWVFbGVtZW50ID0g
dGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFtZUlkW2ZyYW1lSWRdOwotICAgICAgICBpZiAoZnJhbWVU
cmVlRWxlbWVudCkKLSAgICAgICAgICAgIGZyYW1lVHJlZUVsZW1lbnQuZnJhbWVOYXZpZ2F0ZWQo
ZnJhbWUpOwotCi0gICAgICAgIHZhciBhcHBsaWNhdGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudCA9
IHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVGcmFtZUVsZW1lbnRzW2ZyYW1lSWRdOwotICAgICAgICBp
ZiAoYXBwbGljYXRpb25DYWNoZUZyYW1lVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICBhcHBsaWNh
dGlvbkNhY2hlRnJhbWVUcmVlRWxlbWVudC5mcmFtZU5hdmlnYXRlZChmcmFtZSk7Ci0gICAgfSwK
LQotICAgIF9jYWNoZWRSZXNvdXJjZXNMb2FkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2NhY2hlZFJlc291cmNlc1dlcmVMb2FkZWQgPSB0cnVlOwotICAgICAgICB0aGlzLl9p
bml0aWFsaXplKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9kYXRhYmFzZUFkZGVkOiBmdW5jdGlvbihl
dmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRhYmFzZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVj
dG9yLkRhdGFiYXNlfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHRoaXMuX2FkZERhdGFiYXNl
KGRhdGFiYXNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuRGF0YWJhc2V9IGRhdGFiYXNlCi0gICAgICovCi0gICAgX2FkZERhdGFiYXNlOiBmdW5jdGlv
bihkYXRhYmFzZSkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRhYmFzZVRyZWVFbGVtZW50ID0gbmV3
IFdlYkluc3BlY3Rvci5EYXRhYmFzZVRyZWVFbGVtZW50KHRoaXMsIGRhdGFiYXNlKTsKLSAgICAg
ICAgdGhpcy5fZGF0YWJhc2VUcmVlRWxlbWVudHMucHV0KGRhdGFiYXNlLCBkYXRhYmFzZVRyZWVF
bGVtZW50KTsKLSAgICAgICAgdGhpcy5kYXRhYmFzZXNMaXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hp
bGQoZGF0YWJhc2VUcmVlRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIGFkZERvY3VtZW50VVJMOiBm
dW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICB2YXIgcGFyc2VkVVJMID0gdXJsLmFzUGFyc2Vk
VVJMKCk7Ci0gICAgICAgIGlmICghcGFyc2VkVVJMKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHZhciBkb21haW4gPSBwYXJzZWRVUkwuaG9zdDsKLSAgICAgICAgaWYgKCF0aGlzLl9k
b21haW5zW2RvbWFpbl0pIHsKLSAgICAgICAgICAgIHRoaXMuX2RvbWFpbnNbZG9tYWluXSA9IHRy
dWU7Ci0KLSAgICAgICAgICAgIHZhciBjb29raWVEb21haW5UcmVlRWxlbWVudCA9IG5ldyBXZWJJ
bnNwZWN0b3IuQ29va2llVHJlZUVsZW1lbnQodGhpcywgZG9tYWluKTsKLSAgICAgICAgICAgIHRo
aXMuY29va2llTGlzdFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKGNvb2tpZURvbWFpblRyZWVFbGVt
ZW50KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfZG9tU3RvcmFnZUFkZGVkOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBkb21TdG9yYWdlID0gLyoqIEB0eXBlIHtX
ZWJJbnNwZWN0b3IuRE9NU3RvcmFnZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9h
ZGRET01TdG9yYWdlKGRvbVN0b3JhZ2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5ET01TdG9yYWdlfSBkb21TdG9yYWdlCi0gICAgICovCi0gICAgX2Fk
ZERPTVN0b3JhZ2U6IGZ1bmN0aW9uKGRvbVN0b3JhZ2UpCi0gICAgewotICAgICAgICBjb25zb2xl
LmFzc2VydCghdGhpcy5fZG9tU3RvcmFnZVRyZWVFbGVtZW50cy5nZXQoZG9tU3RvcmFnZSkpOwot
Ci0gICAgICAgIHZhciBkb21TdG9yYWdlVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRP
TVN0b3JhZ2VUcmVlRWxlbWVudCh0aGlzLCBkb21TdG9yYWdlLCAoZG9tU3RvcmFnZS5pc0xvY2Fs
U3RvcmFnZSA/ICJsb2NhbC1zdG9yYWdlIiA6ICJzZXNzaW9uLXN0b3JhZ2UiKSk7Ci0gICAgICAg
IHRoaXMuX2RvbVN0b3JhZ2VUcmVlRWxlbWVudHMucHV0KGRvbVN0b3JhZ2UsIGRvbVN0b3JhZ2VU
cmVlRWxlbWVudCk7Ci0gICAgICAgIGlmIChkb21TdG9yYWdlLmlzTG9jYWxTdG9yYWdlKQotICAg
ICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9t
U3RvcmFnZVRyZWVFbGVtZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5zZXNz
aW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChkb21TdG9yYWdlVHJlZUVsZW1l
bnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVu
dH0gZXZlbnQKLSAgICAgKi8KLSAgICBfZG9tU3RvcmFnZVJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgdmFyIGRvbVN0b3JhZ2UgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rv
ci5ET01TdG9yYWdlfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHRoaXMuX3JlbW92ZURPTVN0
b3JhZ2UoZG9tU3RvcmFnZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkRPTVN0b3JhZ2V9IGRvbVN0b3JhZ2UKLSAgICAgKi8KLSAgICBfcmVtb3ZlRE9N
U3RvcmFnZTogZnVuY3Rpb24oZG9tU3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIHZhciB0cmVlRWxl
bWVudCA9IHRoaXMuX2RvbVN0b3JhZ2VUcmVlRWxlbWVudHMuZ2V0KGRvbVN0b3JhZ2UpOwotICAg
ICAgICBpZiAoIXRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIg
d2FzU2VsZWN0ZWQgPSB0cmVlRWxlbWVudC5zZWxlY3RlZDsKLSAgICAgICAgdmFyIHBhcmVudExp
c3RUcmVlRWxlbWVudCA9IHRyZWVFbGVtZW50LnBhcmVudDsKLSAgICAgICAgcGFyZW50TGlzdFRy
ZWVFbGVtZW50LnJlbW92ZUNoaWxkKHRyZWVFbGVtZW50KTsKLSAgICAgICAgaWYgKHdhc1NlbGVj
dGVkKQotICAgICAgICAgICAgcGFyZW50TGlzdFRyZWVFbGVtZW50LnNlbGVjdCgpOwotICAgICAg
ICB0aGlzLl9kb21TdG9yYWdlVHJlZUVsZW1lbnRzLnJlbW92ZSh0cmVlRWxlbWVudCk7Ci0gICAg
ICAgIHRoaXMuX2RvbVN0b3JhZ2VWaWV3cy5yZW1vdmUoZG9tU3RvcmFnZSk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRhdGFiYXNlfSBkYXRhYmFzZQot
ICAgICAqLwotICAgIHNlbGVjdERhdGFiYXNlOiBmdW5jdGlvbihkYXRhYmFzZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChkYXRhYmFzZSkgewotICAgICAgICAgICAgdGhpcy5fc2hvd0RhdGFiYXNlKGRh
dGFiYXNlKTsKLSAgICAgICAgICAgIHRoaXMuX2RhdGFiYXNlVHJlZUVsZW1lbnRzLmdldChkYXRh
YmFzZSkuc2VsZWN0KCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZX0gZG9tU3RvcmFnZQotICAgICAqLwotICAgIHNl
bGVjdERPTVN0b3JhZ2U6IGZ1bmN0aW9uKGRvbVN0b3JhZ2UpCi0gICAgewotICAgICAgICBpZiAo
ZG9tU3RvcmFnZSkgewotICAgICAgICAgICAgdGhpcy5fc2hvd0RPTVN0b3JhZ2UoZG9tU3RvcmFn
ZSk7Ci0gICAgICAgICAgICB0aGlzLl9kb21TdG9yYWdlVHJlZUVsZW1lbnRzLmdldChkb21TdG9y
YWdlKS5zZWxlY3QoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBjYW5TaG93QW5jaG9yTG9j
YXRpb246IGZ1bmN0aW9uKGFuY2hvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIVdlYkluc3Bl
Y3Rvci5yZXNvdXJjZUZvclVSTChhbmNob3IuaHJlZik7Ci0gICAgfSwKLQotICAgIHNob3dBbmNo
b3JMb2NhdGlvbjogZnVuY3Rpb24oYW5jaG9yKQotICAgIHsKLSAgICAgICAgdmFyIHJlc291cmNl
ID0gV2ViSW5zcGVjdG9yLnJlc291cmNlRm9yVVJMKGFuY2hvci5ocmVmKTsKLSAgICAgICAgdGhp
cy5zaG93UmVzb3VyY2UocmVzb3VyY2UsIGFuY2hvci5saW5lTnVtYmVyKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSBsaW5lCi0gICAgICovCi0gICAgc2hvd1Jl
c291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSwgbGluZSkKLSAgICB7Ci0gICAgICAgIHZhciByZXNv
dXJjZVRyZWVFbGVtZW50ID0gdGhpcy5fZmluZFRyZWVFbGVtZW50Rm9yUmVzb3VyY2UocmVzb3Vy
Y2UpOwotICAgICAgICBpZiAocmVzb3VyY2VUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIHJlc291
cmNlVHJlZUVsZW1lbnQucmV2ZWFsQW5kU2VsZWN0KCk7Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBs
aW5lID09PSAibnVtYmVyIikgewotICAgICAgICAgICAgdmFyIHZpZXcgPSB0aGlzLl9yZXNvdXJj
ZVZpZXdGb3JSZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAodmlldy5jYW5IaWdo
bGlnaHRMaW5lKCkpCi0gICAgICAgICAgICAgICAgdmlldy5oaWdobGlnaHRMaW5lKGxpbmUpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBfc2hvd1Jlc291
cmNlVmlldzogZnVuY3Rpb24ocmVzb3VyY2UpCi0gICAgewotICAgICAgICB2YXIgdmlldyA9IHRo
aXMuX3Jlc291cmNlVmlld0ZvclJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgaWYgKCF2aWV3
KSB7Ci0gICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmRldGFjaCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2aWV3LnNlYXJjaENhbmNlbGVkKQotICAg
ICAgICAgICAgdmlldy5zZWFyY2hDYW5jZWxlZCgpOwotICAgICAgICB0aGlzLl9pbm5lclNob3dW
aWV3KHZpZXcpOwotICAgIH0sCi0KLSAgICBfcmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2U6IGZ1bmN0
aW9uKHJlc291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVZp
ZXcuaGFzVGV4dENvbnRlbnQocmVzb3VyY2UpKSB7Ci0gICAgICAgICAgICB2YXIgdHJlZUVsZW1l
bnQgPSB0aGlzLl9maW5kVHJlZUVsZW1lbnRGb3JSZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAg
ICAgICBpZiAoIXRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50LnNvdXJjZVZpZXcoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlJlc291cmNlVmlldy5ub25Tb3VyY2VWaWV3Rm9yUmVz
b3VyY2UocmVzb3VyY2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Zz19IHRhYmxlTmFtZQotICAgICAqLwotICAgIF9zaG93RGF0YWJhc2U6IGZ1bmN0aW9uKGRhdGFi
YXNlLCB0YWJsZU5hbWUpCi0gICAgewotICAgICAgICBpZiAoIWRhdGFiYXNlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHZhciB2aWV3OwotICAgICAgICBpZiAodGFibGVOYW1lKSB7
Ci0gICAgICAgICAgICB2YXIgdGFibGVWaWV3cyA9IHRoaXMuX2RhdGFiYXNlVGFibGVWaWV3cy5n
ZXQoZGF0YWJhc2UpOwotICAgICAgICAgICAgaWYgKCF0YWJsZVZpZXdzKSB7Ci0gICAgICAgICAg
ICAgICAgdGFibGVWaWV3cyA9IHt9OwotICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFiYXNlVGFi
bGVWaWV3cy5wdXQoZGF0YWJhc2UsIHRhYmxlVmlld3MpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmlldyA9IHRhYmxlVmlld3NbdGFibGVOYW1lXTsKLSAgICAgICAgICAgIGlmICghdmll
dykgewotICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFi
bGVWaWV3KGRhdGFiYXNlLCB0YWJsZU5hbWUpOwotICAgICAgICAgICAgICAgIHRhYmxlVmlld3Nb
dGFibGVOYW1lXSA9IHZpZXc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB2aWV3ID0gdGhpcy5fZGF0YWJhc2VRdWVyeVZpZXdzLmdldChkYXRhYmFzZSk7Ci0g
ICAgICAgICAgICBpZiAoIXZpZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IFdlYklu
c3BlY3Rvci5EYXRhYmFzZVF1ZXJ5VmlldyhkYXRhYmFzZSk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fZGF0YWJhc2VRdWVyeVZpZXdzLnB1dChkYXRhYmFzZSwgdmlldyk7Ci0gICAgICAgICAgICAg
ICAgdmlldy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EYXRhYmFzZVF1ZXJ5Vmlldy5F
dmVudHMuU2NoZW1hVXBkYXRlZCwgdGhpcy5fdXBkYXRlRGF0YWJhc2VUYWJsZXMsIHRoaXMpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5faW5uZXJTaG93Vmlldyh2
aWV3KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVmll
d30gdmlldwotICAgICAqLwotICAgIHNob3dJbmRleGVkREI6IGZ1bmN0aW9uKHZpZXcpCi0gICAg
ewotICAgICAgICB0aGlzLl9pbm5lclNob3dWaWV3KHZpZXcpOwotICAgIH0sCi0KLSAgICBfc2hv
d0RPTVN0b3JhZ2U6IGZ1bmN0aW9uKGRvbVN0b3JhZ2UpCi0gICAgewotICAgICAgICBpZiAoIWRv
bVN0b3JhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHZpZXc7Ci0gICAg
ICAgIHZpZXcgPSB0aGlzLl9kb21TdG9yYWdlVmlld3MuZ2V0KGRvbVN0b3JhZ2UpOwotICAgICAg
ICBpZiAoIXZpZXcpIHsKLSAgICAgICAgICAgIHZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVN0
b3JhZ2VJdGVtc1ZpZXcoZG9tU3RvcmFnZSwgV2ViSW5zcGVjdG9yLmRvbVN0b3JhZ2VNb2RlbCk7
Ci0gICAgICAgICAgICB0aGlzLl9kb21TdG9yYWdlVmlld3MucHV0KGRvbVN0b3JhZ2UsIHZpZXcp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5faW5uZXJTaG93Vmlldyh2aWV3KTsKLSAgICB9
LAotCi0gICAgc2hvd0Nvb2tpZXM6IGZ1bmN0aW9uKHRyZWVFbGVtZW50LCBjb29raWVEb21haW4p
Ci0gICAgewotICAgICAgICB2YXIgdmlldyA9IHRoaXMuX2Nvb2tpZVZpZXdzW2Nvb2tpZURvbWFp
bl07Ci0gICAgICAgIGlmICghdmlldykgewotICAgICAgICAgICAgdmlldyA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29va2llSXRlbXNWaWV3KHRyZWVFbGVtZW50LCBjb29raWVEb21haW4pOwotICAgICAg
ICAgICAgdGhpcy5fY29va2llVmlld3NbY29va2llRG9tYWluXSA9IHZpZXc7Ci0gICAgICAgIH0K
LQotICAgICAgICB0aGlzLl9pbm5lclNob3dWaWV3KHZpZXcpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29va2llRG9tYWluCi0gICAgICovCi0gICAgY2xlYXJD
b29raWVzOiBmdW5jdGlvbihjb29raWVEb21haW4pCi0gICAgewotICAgICAgICB0aGlzLl9jb29r
aWVWaWV3c1tjb29raWVEb21haW5dLmNsZWFyKCk7Ci0gICAgfSwKLQotICAgIHNob3dBcHBsaWNh
dGlvbkNhY2hlOiBmdW5jdGlvbihmcmFtZUlkKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9h
cHBsaWNhdGlvbkNhY2hlVmlld3NbZnJhbWVJZF0pCi0gICAgICAgICAgICB0aGlzLl9hcHBsaWNh
dGlvbkNhY2hlVmlld3NbZnJhbWVJZF0gPSBuZXcgV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2Fj
aGVJdGVtc1ZpZXcodGhpcy5fYXBwbGljYXRpb25DYWNoZU1vZGVsLCBmcmFtZUlkKTsKLQotICAg
ICAgICB0aGlzLl9pbm5lclNob3dWaWV3KHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVWaWV3c1tmcmFt
ZUlkXSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqICBAcGFyYW0ge1dlYkluc3BlY3Rvci5W
aWV3fSB2aWV3Ci0gICAgICovCi0gICAgc2hvd0ZpbGVTeXN0ZW06IGZ1bmN0aW9uKHZpZXcpCi0g
ICAgewotICAgICAgICB0aGlzLl9pbm5lclNob3dWaWV3KHZpZXcpOwotICAgIH0sCi0KLSAgICBz
aG93Q2F0ZWdvcnlWaWV3OiBmdW5jdGlvbihjYXRlZ29yeU5hbWUpCi0gICAgewotICAgICAgICBp
ZiAoIXRoaXMuX2NhdGVnb3J5VmlldykKLSAgICAgICAgICAgIHRoaXMuX2NhdGVnb3J5VmlldyA9
IG5ldyBXZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5VmlldygpOwotICAgICAgICB0aGlzLl9j
YXRlZ29yeVZpZXcuc2V0VGV4dChjYXRlZ29yeU5hbWUpOwotICAgICAgICB0aGlzLl9pbm5lclNo
b3dWaWV3KHRoaXMuX2NhdGVnb3J5Vmlldyk7Ci0gICAgfSwKLQotICAgIF9pbm5lclNob3dWaWV3
OiBmdW5jdGlvbih2aWV3KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcgPT09
IHZpZXcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZp
ZXcpCi0gICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmRldGFjaCgpOwotCi0gICAgICAgIHZp
ZXcuc2hvdyh0aGlzLnN0b3JhZ2VWaWV3cyk7Ci0gICAgICAgIHRoaXMudmlzaWJsZVZpZXcgPSB2
aWV3OwotCi0gICAgICAgIHRoaXMuc3RvcmFnZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5y
ZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB2YXIgc3RhdHVzQmFySXRlbXMgPSB2aWV3LnN0YXR1
c0Jhckl0ZW1zKCkgfHwgW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdHVzQmFy
SXRlbXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFy
SXRlbXNDb250YWluZXIuYXBwZW5kQ2hpbGQoc3RhdHVzQmFySXRlbXNbaV0pOwotICAgIH0sCi0K
LSAgICBjbG9zZVZpc2libGVWaWV3OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMudmlzaWJsZVZpZXcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMudmlzaWJs
ZVZpZXcuZGV0YWNoKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLnZpc2libGVWaWV3OwotICAgIH0s
Ci0KLSAgICBfdXBkYXRlRGF0YWJhc2VUYWJsZXM6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgdmFyIGRhdGFiYXNlID0gZXZlbnQuZGF0YTsKLQotICAgICAgICBpZiAoIWRhdGFiYXNl
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBkYXRhYmFzZXNUcmVlRWxlbWVu
dCA9IHRoaXMuX2RhdGFiYXNlVHJlZUVsZW1lbnRzLmdldChkYXRhYmFzZSk7Ci0gICAgICAgIGlm
ICghZGF0YWJhc2VzVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ZGF0YWJhc2VzVHJlZUVsZW1lbnQuc2hvdWxkUmVmcmVzaENoaWxkcmVuID0gdHJ1ZTsKLSAgICAg
ICAgdmFyIHRhYmxlVmlld3MgPSB0aGlzLl9kYXRhYmFzZVRhYmxlVmlld3MuZ2V0KGRhdGFiYXNl
KTsKLQotICAgICAgICBpZiAoIXRhYmxlVmlld3MpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdmFyIHRhYmxlTmFtZXNIYXNoID0ge307Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsK
LSAgICAgICAgZnVuY3Rpb24gdGFibGVOYW1lc0NhbGxiYWNrKHRhYmxlTmFtZXMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZhciB0YWJsZU5hbWVzTGVuZ3RoID0gdGFibGVOYW1lcy5sZW5ndGg7
Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlTmFtZXNMZW5ndGg7ICsraSkK
LSAgICAgICAgICAgICAgICB0YWJsZU5hbWVzSGFzaFt0YWJsZU5hbWVzW2ldXSA9IHRydWU7Ci0K
LSAgICAgICAgICAgIGZvciAodmFyIHRhYmxlTmFtZSBpbiB0YWJsZVZpZXdzKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEodGFibGVOYW1lIGluIHRhYmxlTmFtZXNIYXNoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoc2VsZi52aXNpYmxlVmlldyA9PT0gdGFibGVWaWV3c1t0YWJsZU5hbWVd
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZVZpc2libGVWaWV3KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0YWJsZVZpZXdzW3RhYmxlTmFtZV07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRhdGFiYXNlLmdldFRh
YmxlTmFtZXModGFibGVOYW1lc0NhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlRE9N
U3RvcmFnZVRyZWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kb21T
dG9yYWdlTW9kZWwuc3RvcmFnZXMoKS5mb3JFYWNoKHRoaXMuX2FkZERPTVN0b3JhZ2UuYmluZCh0
aGlzKSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kb21TdG9yYWdlTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU1vZGVsLkV2ZW50cy5ET01TdG9yYWdlQWRkZWQs
IHRoaXMuX2RvbVN0b3JhZ2VBZGRlZCwgdGhpcyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kb21T
dG9yYWdlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU1vZGVs
LkV2ZW50cy5ET01TdG9yYWdlUmVtb3ZlZCwgdGhpcy5fZG9tU3RvcmFnZVJlbW92ZWQsIHRoaXMp
OwotICAgIH0sCi0KLSAgICBfcG9wdWxhdGVBcHBsaWNhdGlvbkNhY2hlVHJlZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fYXBwbGljYXRpb25DYWNoZU1vZGVsID0gbmV3IFdlYklu
c3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTW9kZWwoKTsKLQotICAgICAgICB0aGlzLl9hcHBsaWNh
dGlvbkNhY2hlVmlld3MgPSB7fTsKLSAgICAgICAgdGhpcy5fYXBwbGljYXRpb25DYWNoZUZyYW1l
RWxlbWVudHMgPSB7fTsKLSAgICAgICAgdGhpcy5fYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0RWxl
bWVudHMgPSB7fTsKLQotICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNhY2hlTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1vZGVsLkV2ZW50VHlwZXMu
RnJhbWVNYW5pZmVzdEFkZGVkLCB0aGlzLl9hcHBsaWNhdGlvbkNhY2hlRnJhbWVNYW5pZmVzdEFk
ZGVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fYXBwbGljYXRpb25DYWNoZU1vZGVsLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNb2RlbC5FdmVudFR5cGVzLkZy
YW1lTWFuaWZlc3RSZW1vdmVkLCB0aGlzLl9hcHBsaWNhdGlvbkNhY2hlRnJhbWVNYW5pZmVzdFJl
bW92ZWQsIHRoaXMpOwotCi0gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVNb2RlbC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTW9kZWwuRXZlbnRUeXBl
cy5GcmFtZU1hbmlmZXN0U3RhdHVzVXBkYXRlZCwgdGhpcy5fYXBwbGljYXRpb25DYWNoZUZyYW1l
TWFuaWZlc3RTdGF0dXNDaGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fYXBwbGljYXRpb25D
YWNoZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVN
b2RlbC5FdmVudFR5cGVzLk5ldHdvcmtTdGF0ZUNoYW5nZWQsIHRoaXMuX2FwcGxpY2F0aW9uQ2Fj
aGVOZXR3b3JrU3RhdGVDaGFuZ2VkLCB0aGlzKTsKLSAgICB9LAotCi0gICAgX2FwcGxpY2F0aW9u
Q2FjaGVGcmFtZU1hbmlmZXN0QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dmFyIGZyYW1lSWQgPSBldmVudC5kYXRhOwotICAgICAgICB2YXIgbWFuaWZlc3RVUkwgPSB0aGlz
Ll9hcHBsaWNhdGlvbkNhY2hlTW9kZWwuZnJhbWVNYW5pZmVzdFVSTChmcmFtZUlkKTsKLSAgICAg
ICAgdmFyIHN0YXR1cyA9IHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVNb2RlbC5mcmFtZU1hbmlmZXN0
U3RhdHVzKGZyYW1lSWQpCi0KLSAgICAgICAgdmFyIG1hbmlmZXN0VHJlZUVsZW1lbnQgPSB0aGlz
Ll9hcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RFbGVtZW50c1ttYW5pZmVzdFVSTF0KLSAgICAgICAg
aWYgKCFtYW5pZmVzdFRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICBtYW5pZmVzdFRyZWVFbGVt
ZW50ID0gbmV3IFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RUcmVlRWxlbWVu
dCh0aGlzLCBtYW5pZmVzdFVSTCk7Ci0gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uQ2FjaGVM
aXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQobWFuaWZlc3RUcmVlRWxlbWVudCk7Ci0gICAgICAg
ICAgICB0aGlzLl9hcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RFbGVtZW50c1ttYW5pZmVzdFVSTF0g
PSBtYW5pZmVzdFRyZWVFbGVtZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGZyYW1lVHJl
ZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZVRyZWVFbGVt
ZW50KHRoaXMsIGZyYW1lSWQsIG1hbmlmZXN0VVJMKTsKLSAgICAgICAgbWFuaWZlc3RUcmVlRWxl
bWVudC5hcHBlbmRDaGlsZChmcmFtZVRyZWVFbGVtZW50KTsKLSAgICAgICAgbWFuaWZlc3RUcmVl
RWxlbWVudC5leHBhbmQoKTsKLSAgICAgICAgdGhpcy5fYXBwbGljYXRpb25DYWNoZUZyYW1lRWxl
bWVudHNbZnJhbWVJZF0gPSBmcmFtZVRyZWVFbGVtZW50OwotICAgIH0sCi0KLSAgICBfYXBwbGlj
YXRpb25DYWNoZUZyYW1lTWFuaWZlc3RSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0g
ICAgICAgIHZhciBmcmFtZUlkID0gZXZlbnQuZGF0YTsKLSAgICAgICAgdmFyIGZyYW1lVHJlZUVs
ZW1lbnQgPSB0aGlzLl9hcHBsaWNhdGlvbkNhY2hlRnJhbWVFbGVtZW50c1tmcmFtZUlkXTsKLSAg
ICAgICAgaWYgKCFmcmFtZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHZhciBtYW5pZmVzdFVSTCA9IGZyYW1lVHJlZUVsZW1lbnQubWFuaWZlc3RVUkw7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9hcHBsaWNhdGlvbkNhY2hlRnJhbWVFbGVtZW50c1tmcmFtZUlkXTsK
LSAgICAgICAgZGVsZXRlIHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVWaWV3c1tmcmFtZUlkXTsKLSAg
ICAgICAgZnJhbWVUcmVlRWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hpbGQoZnJhbWVUcmVlRWxlbWVu
dCk7Ci0KLSAgICAgICAgdmFyIG1hbmlmZXN0VHJlZUVsZW1lbnQgPSB0aGlzLl9hcHBsaWNhdGlv
bkNhY2hlTWFuaWZlc3RFbGVtZW50c1ttYW5pZmVzdFVSTF07Ci0gICAgICAgIGlmIChtYW5pZmVz
dFRyZWVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBkZWxldGUgdGhpcy5fYXBwbGljYXRpb25DYWNoZU1hbmlmZXN0RWxlbWVudHNb
bWFuaWZlc3RVUkxdOwotICAgICAgICBtYW5pZmVzdFRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVD
aGlsZChtYW5pZmVzdFRyZWVFbGVtZW50KTsKLSAgICB9LAotCi0gICAgX2FwcGxpY2F0aW9uQ2Fj
aGVGcmFtZU1hbmlmZXN0U3RhdHVzQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICB2YXIgZnJhbWVJZCA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHZhciBzdGF0dXMgPSB0aGlz
Ll9hcHBsaWNhdGlvbkNhY2hlTW9kZWwuZnJhbWVNYW5pZmVzdFN0YXR1cyhmcmFtZUlkKQotCi0g
ICAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbkNhY2hlVmlld3NbZnJhbWVJZF0pCi0gICAgICAg
ICAgICB0aGlzLl9hcHBsaWNhdGlvbkNhY2hlVmlld3NbZnJhbWVJZF0udXBkYXRlU3RhdHVzKHN0
YXR1cyk7Ci0gICAgfSwKLQotICAgIF9hcHBsaWNhdGlvbkNhY2hlTmV0d29ya1N0YXRlQ2hhbmdl
ZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgaXNOb3dPbmxpbmUgPSBldmVu
dC5kYXRhOwotCi0gICAgICAgIGZvciAodmFyIG1hbmlmZXN0VVJMIGluIHRoaXMuX2FwcGxpY2F0
aW9uQ2FjaGVWaWV3cykKLSAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVWaWV3c1tt
YW5pZmVzdFVSTF0udXBkYXRlTmV0d29ya1N0YXRlKGlzTm93T25saW5lKTsKLSAgICB9LAotCi0g
ICAgc2lkZWJhclJlc2l6ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHdp
ZHRoID0gZXZlbnQuZGF0YTsKLSAgICAgICAgdGhpcy5zdG9yYWdlVmlld1N0YXR1c0Jhckl0ZW1z
Q29udGFpbmVyLnN0eWxlLmxlZnQgPSB3aWR0aCArICJweCI7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqLwotICAgIHBlcmZvcm1TZWFyY2g6
IGZ1bmN0aW9uKHF1ZXJ5KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzZXRTZWFyY2hSZXN1bHRz
KCk7Ci0gICAgICAgIHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVT
ZWFyY2hSZWdleChxdWVyeSk7Ci0gICAgICAgIHZhciB0b3RhbE1hdGNoZXNDb3VudCA9IDA7Ci0K
LSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHJlc3VsdCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFlcnJvcikgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hS
ZXN1bHQgPSByZXN1bHRbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZVRyZWVFbGVt
ZW50ID0gdGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFtZUlkW3NlYXJjaFJlc3VsdC5mcmFtZUlkXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZVRyZWVFbGVtZW50KQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9
IGZyYW1lVHJlZUVsZW1lbnQucmVzb3VyY2VCeVVSTChzZWFyY2hSZXN1bHQudXJsKTsKLQotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgc2FtZSBzY3JpcHQgaXMgdXNlZCBp
biBzZXZlcmFsIGZyYW1lcyBhbmQgdGhpcyBzY3JpcHQgY29udGFpbnMgYXQgbGVhc3QKLSAgICAg
ICAgICAgICAgICAgICAgLy8gb25lIHNlYXJjaCByZXN1bHQgdGhlbiBzb21lIHNlYXJjaCByZXN1
bHRzIGNhbiBub3QgYmUgbWF0Y2hlZCB3aXRoIGEgcmVzb3VyY2Ugb24gcGFuZWwuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjAwNQotICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc291cmNlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluZFRyZWVF
bGVtZW50Rm9yUmVzb3VyY2UocmVzb3VyY2UpLnNlYXJjaE1hdGNoZXNGb3VuZChzZWFyY2hSZXN1
bHQubWF0Y2hlc0NvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxNYXRjaGVzQ291bnQg
Kz0gc2VhcmNoUmVzdWx0Lm1hdGNoZXNDb3VudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0
ZVNlYXJjaE1hdGNoZXNDb3VudCh0b3RhbE1hdGNoZXNDb3VudCwgdGhpcyk7Ci0gICAgICAgICAg
ICB0aGlzLl9zZWFyY2hDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZXNTZWFy
Y2hDb250cm9sbGVyKHRoaXMucmVzb3VyY2VzTGlzdFRyZWVFbGVtZW50LCB0b3RhbE1hdGNoZXND
b3VudCk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVs
ZW1lbnQgJiYgdGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50LnNlYXJjaE1hdGNo
ZXNDb3VudCkKLSAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFBhZ2VBZ2VudC5zZWFyY2hJblJlc291cmNlcyhyZWdleC5z
b3VyY2UsICFyZWdleC5pZ25vcmVDYXNlLCB0cnVlLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAg
ICB9LAotCi0gICAgX2Vuc3VyZVZpZXdTZWFyY2hQZXJmb3JtZWQ6IGZ1bmN0aW9uKGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gdmlld1NlYXJjaFBlcmZvcm1lZENhbGxiYWNrKHNl
YXJjaElkKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoSWQgIT09IHRoaXMuX2xh
c3RWaWV3U2VhcmNoSWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBTZWFyY2ggaXMgb2Jz
b2xldGUuCi0gICAgICAgICAgICB0aGlzLl92aWV3U2VhcmNoSW5Qcm9ncmVzcyA9IGZhbHNlOwot
ICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdGhpcy5f
dmlld1NlYXJjaEluUHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy52aXNpYmxlVmll
dy5oYXNTZWFyY2hSZXN1bHRzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIGlkIHRv
IGVhY2ggc2VhcmNoLCBzbyB0aGF0IHdlIGNhbiBza2lwIGNhbGxiYWNrcyBmb3Igb2Jzb2xldGUg
c2VhcmNoZXMuCi0gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFZpZXdTZWFyY2hJZCA9IHRoaXMu
X2xhc3RWaWV3U2VhcmNoSWQgPyB0aGlzLl9sYXN0Vmlld1NlYXJjaElkICsgMSA6IDA7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIHRoaXMudmlzaWJsZVZpZXcucGVyZm9ybVNlYXJjaCh0aGlzLmN1cnJlbnRRdWVyeSwg
dmlld1NlYXJjaFBlcmZvcm1lZENhbGxiYWNrLmJpbmQodGhpcywgdGhpcy5fbGFzdFZpZXdTZWFy
Y2hJZCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY2FsbGJhY2soKTsK
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfc2hvd1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oc2Vh
cmNoUmVzdWx0KQotICAgIHsKLSAgICAgICAgdGhpcy5fbGFzdFNlYXJjaFJlc3VsdEluZGV4ID0g
c2VhcmNoUmVzdWx0LmluZGV4OwotICAgICAgICB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0VHJlZUVs
ZW1lbnQgPSBzZWFyY2hSZXN1bHQudHJlZUVsZW1lbnQ7Ci0KLSAgICAgICAgLy8gQXQgZmlyc3Qg
c2hvdyB2aWV3IGZvciB0cmVlRWxlbWVudC4KLSAgICAgICAgaWYgKHNlYXJjaFJlc3VsdC50cmVl
RWxlbWVudCAhPT0gdGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50KSB7Ci0gICAg
ICAgICAgICB0aGlzLnNob3dSZXNvdXJjZShzZWFyY2hSZXN1bHQudHJlZUVsZW1lbnQucmVwcmVz
ZW50ZWRPYmplY3QpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIu
c2hvd1NlYXJjaEZpZWxkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjYWxsYmFj
ayhzZWFyY2hJZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoaXMuc2lkZWJhclRyZWUu
c2VsZWN0ZWRUcmVlRWxlbWVudCAhPT0gdGhpcy5fbGFzdFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50
KQotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gVXNlciBoYXMgc2VsZWN0ZWQgYW5vdGhlciB2
aWV3IHdoaWxlIHdlIHdlcmUgc2VhcmNoaW5nLgotICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RT
ZWFyY2hSZXN1bHRJbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3
Lmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9sYXN0U2VhcmNoUmVzdWx0SW5kZXgpOwotICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlQ3VycmVudE1hdGNoSW5k
ZXgoc2VhcmNoUmVzdWx0LmN1cnJlbnRNYXRjaEluZGV4IC0gMSwgdGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBUaGVuIHJ1biBTb3VyY2VGcmFtZSBzZWFyY2ggaWYgbmVlZGVkIGFuZCBq
dW1wIHRvIHNlYXJjaCByZXN1bHQgaW5kZXggd2hlbiBkb25lLgotICAgICAgICB0aGlzLl9lbnN1
cmVWaWV3U2VhcmNoUGVyZm9ybWVkKGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAg
ICBfcmVzZXRTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlv
biBjYWxsYmFjayhyZXNvdXJjZVRyZWVFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXNvdXJjZVRyZWVFbGVtZW50Ll9yZXNldFNlYXJjaFJlc3VsdHMoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRzKGNhbGxiYWNrKTsKLSAgICAg
ICAgaWYgKHRoaXMudmlzaWJsZVZpZXcgJiYgdGhpcy52aXNpYmxlVmlldy5zZWFyY2hDYW5jZWxl
ZCkKLSAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2VhcmNoQ2FuY2VsZWQoKTsKLQotICAg
ICAgICB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQgPSBudWxsOwotICAgICAgICB0
aGlzLl9sYXN0U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKLSAgICAgICAgdGhpcy5fdmlld1NlYXJj
aEluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNlVHJlZUVsZW1l
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlVHJlZUVsZW1lbnQuX3VwZGF0ZUVy
cm9yc0FuZFdhcm5pbmdzQnViYmxlcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgV2ViSW5zcGVj
dG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KDAsIHRoaXMpOwot
ICAgICAgICB0aGlzLl9yZXNldFNlYXJjaFJlc3VsdHMoKTsKLSAgICAgICAgdGhpcy5fZm9yQWxs
UmVzb3VyY2VUcmVlRWxlbWVudHMoY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBqdW1wVG9OZXh0
U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuY3VycmVu
dFNlYXJjaE1hdGNoZXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBjdXJyZW50
VHJlZUVsZW1lbnQgPSB0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQ7Ci0gICAg
ICAgIHZhciBuZXh0U2VhcmNoUmVzdWx0ID0gdGhpcy5fc2VhcmNoQ29udHJvbGxlci5uZXh0U2Vh
cmNoUmVzdWx0KGN1cnJlbnRUcmVlRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX3Nob3dTZWFyY2hS
ZXN1bHQobmV4dFNlYXJjaFJlc3VsdCk7Ci0gICAgfSwKLQotICAgIGp1bXBUb1ByZXZpb3VzU2Vh
cmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuY3VycmVudFNl
YXJjaE1hdGNoZXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBjdXJyZW50VHJl
ZUVsZW1lbnQgPSB0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQ7Ci0gICAgICAg
IHZhciBwcmV2aW91c1NlYXJjaFJlc3VsdCA9IHRoaXMuX3NlYXJjaENvbnRyb2xsZXIucHJldmlv
dXNTZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50KTsKLSAgICAgICAgdGhpcy5fc2hvd1Nl
YXJjaFJlc3VsdChwcmV2aW91c1NlYXJjaFJlc3VsdCk7Ci0gICAgfSwKLQotICAgIF9mb3JBbGxS
ZXNvdXJjZVRyZWVFbGVtZW50czogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICB2
YXIgc3RvcCA9IGZhbHNlOwotICAgICAgICBmb3IgKHZhciB0cmVlRWxlbWVudCA9IHRoaXMucmVz
b3VyY2VzTGlzdFRyZWVFbGVtZW50OyAhc3RvcCAmJiB0cmVlRWxlbWVudDsgdHJlZUVsZW1lbnQg
PSB0cmVlRWxlbWVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChmYWxzZSwgdGhpcy5yZXNvdXJj
ZXNMaXN0VHJlZUVsZW1lbnQsIHRydWUpKSB7Ci0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQg
aW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50KQotICAgICAg
ICAgICAgICAgIHN0b3AgPSBjYWxsYmFjayh0cmVlRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX2ZpbmRUcmVlRWxlbWVudEZvclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkK
LSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGlzQW5jZXN0b3IoYW5jZXN0b3IsIG9iamVjdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gUmVkaXJlY3RzLCBYSFJzIGRvIG5vdCBiZWxvbmcgdG8g
dGhlIHRyZWUsIGl0IGlzIGZpbmUgdG8gc2lsZW50bHkgcmV0dXJuIGZhbHNlIGhlcmUuCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRQ
YXJlbnQob2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZWRpcmVjdHMsIFhIUnMg
ZG8gbm90IGJlbG9uZyB0byB0aGUgdHJlZSwgaXQgaXMgZmluZSB0byBzaWxlbnRseSByZXR1cm4g
ZmFsc2UgaGVyZS4KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHRoaXMuc2lkZWJhclRyZWUuZmluZFRyZWVFbGVtZW50KHJlc291cmNlLCBpc0Fu
Y2VzdG9yLCBnZXRQYXJlbnQpOwotICAgIH0sCi0KLSAgICBzaG93VmlldzogZnVuY3Rpb24odmll
dykKLSAgICB7Ci0gICAgICAgIGlmICh2aWV3KQotICAgICAgICAgICAgdGhpcy5zaG93UmVzb3Vy
Y2Uodmlldy5yZXNvdXJjZSk7Ci0gICAgfSwKLQotICAgIF9vbm1vdXNlbW92ZTogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbm9kZVVuZGVyTW91c2UgPSBkb2N1bWVudC5lbGVt
ZW50RnJvbVBvaW50KGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSk7Ci0gICAgICAgIGlmICghbm9k
ZVVuZGVyTW91c2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGxpc3ROb2Rl
ID0gbm9kZVVuZGVyTW91c2UuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgibGkiKTsK
LSAgICAgICAgaWYgKCFsaXN0Tm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgZWxlbWVudCA9IGxpc3ROb2RlLnRyZWVFbGVtZW50OwotICAgICAgICBpZiAodGhpcy5fcHJl
dmlvdXNIb3ZlcmVkRWxlbWVudCA9PT0gZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudCkgewotICAgICAgICAgICAg
dGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudC5ob3ZlcmVkID0gZmFsc2U7Ci0gICAgICAgICAg
ICBkZWxldGUgdGhpcy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQp
IHsKLSAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzSG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50Owot
ICAgICAgICAgICAgZWxlbWVudC5ob3ZlcmVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICBfb25tb3VzZW91dDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fcHJldmlvdXNIb3ZlcmVkRWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNI
b3ZlcmVkRWxlbWVudC5ob3ZlcmVkID0gZmFsc2U7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5f
cHJldmlvdXNIb3ZlcmVkRWxlbWVudDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtUcmVlRWxlbWVudH0KLSAqIEBwYXJhbSB7Ym9vbGVhbj19IGhhc0No
aWxkcmVuCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBub0ljb24KLSAqLwotV2ViSW5zcGVjdG9yLkJh
c2VTdG9yYWdlVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwsIHJlcHJlc2VudGVk
T2JqZWN0LCB0aXRsZSwgaWNvbkNsYXNzZXMsIGhhc0NoaWxkcmVuLCBub0ljb24pCi17Ci0gICAg
VHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAiIiwgcmVwcmVzZW50ZWRPYmplY3QsIGhhc0NoaWxkcmVu
KTsKLSAgICB0aGlzLl9zdG9yYWdlUGFuZWwgPSBzdG9yYWdlUGFuZWw7Ci0gICAgdGhpcy5fdGl0
bGVUZXh0ID0gdGl0bGU7Ci0gICAgdGhpcy5faWNvbkNsYXNzZXMgPSBpY29uQ2xhc3NlczsKLSAg
ICB0aGlzLl9ub0ljb24gPSBub0ljb247Ci19Ci0KLVdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbmF0dGFjaDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAg
aWYgKHRoaXMuX2ljb25DbGFzc2VzKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX2ljb25DbGFzc2VzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMubGlz
dEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3ModGhpcy5faWNvbkNsYXNzZXNbaV0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICAgICAgc2VsZWN0aW9uRWxlbWVudC5jbGFzc05hbWUgPSAic2VsZWN0
aW9uIjsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0aW9u
RWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9ub0ljb24pIHsKLSAgICAgICAgICAgIHRo
aXMuaW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci0gICAgICAg
ICAgICB0aGlzLmltYWdlRWxlbWVudC5jbGFzc05hbWUgPSAiaWNvbiI7Ci0gICAgICAgICAgICB0
aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmltYWdlRWxlbWVudCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICB0aGlzLnRpdGxlRWxlbWVudC5jbGFzc05hbWUgPSAiYmFzZS1z
dG9yYWdlLXRyZWUtZWxlbWVudC10aXRsZSI7Ci0gICAgICAgIHRoaXMuX3RpdGxlVGV4dE5vZGUg
PSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0gICAgICAgIHRoaXMudGl0bGVFbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuX3RpdGxlVGV4dE5vZGUpOwotICAgICAgICB0aGlzLl91cGRhdGVU
aXRsZSgpOwotICAgICAgICB0aGlzLl91cGRhdGVTdWJ0aXRsZSgpOwotICAgICAgICB0aGlzLmxp
c3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRpdGxlRWxlbWVudCk7Ci0gICAgfSwKLQot
ICAgIGdldCBkaXNwbGF5TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxh
eU5hbWU7Ci0gICAgfSwKLQotICAgIF91cGRhdGVEaXNwbGF5TmFtZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fZGlzcGxheU5hbWUgPSB0aGlzLl90aXRsZVRleHQgfHwgIiI7Ci0g
ICAgICAgIGlmICh0aGlzLl9zdWJ0aXRsZVRleHQpCi0gICAgICAgICAgICB0aGlzLl9kaXNwbGF5
TmFtZSArPSAiICgiICsgdGhpcy5fc3VidGl0bGVUZXh0ICsgIikiOwotICAgIH0sCi0KLSAgICBf
dXBkYXRlVGl0bGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURpc3Bs
YXlOYW1lKCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLnRpdGxlRWxlbWVudCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB0aGlzLl90aXRsZVRleHROb2RlLnRleHRDb250ZW50ID0gdGhp
cy5fdGl0bGVUZXh0IHx8ICIiOwotICAgIH0sCi0KLSAgICBfdXBkYXRlU3VidGl0bGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlOYW1lKCk7Ci0KLSAgICAg
ICAgaWYgKCF0aGlzLnRpdGxlRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAodGhpcy5fc3VidGl0bGVUZXh0KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX3N1YnRp
dGxlRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3N1YnRpdGxlRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdWJ0
aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gImJhc2Utc3RvcmFnZS10cmVlLWVsZW1lbnQtc3VidGl0
bGUiOwotICAgICAgICAgICAgICAgIHRoaXMudGl0bGVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
X3N1YnRpdGxlRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9zdWJ0
aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSAiKCIgKyB0aGlzLl9zdWJ0aXRsZVRleHQgKyAiKSI7
Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc3VidGl0bGVFbGVtZW50KSB7Ci0gICAgICAgICAg
ICB0aGlzLnRpdGxlRWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9zdWJ0aXRsZUVsZW1lbnQpOwot
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3N1YnRpdGxlRWxlbWVudDsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBvbnNlbGVjdDogZnVuY3Rpb24oc2VsZWN0ZWRCeVVzZXIpCi0gICAgewotICAg
ICAgICBpZiAoIXNlbGVjdGVkQnlVc2VyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2
YXIgaXRlbVVSTCA9IHRoaXMuaXRlbVVSTDsKLSAgICAgICAgaWYgKGl0ZW1VUkwpCi0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucmVzb3VyY2VzTGFzdFNlbGVjdGVkSXRlbS5zZXQo
aXRlbVVSTCk7Ci0gICAgfSwKLQotICAgIG9ucmV2ZWFsOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5saXN0SXRlbUVsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLmxpc3RJdGVt
RWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKLSAgICB9LAotCi0gICAgZ2V0
IHRpdGxlVGV4dCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVUZXh0OwotICAg
IH0sCi0KLSAgICBzZXQgdGl0bGVUZXh0KHRpdGxlVGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3RpdGxlVGV4dCA9IHRpdGxlVGV4dDsKLSAgICAgICAgdGhpcy5fdXBkYXRlVGl0bGUoKTsKLSAg
ICB9LAotCi0gICAgZ2V0IHN1YnRpdGxlVGV4dCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fc3VidGl0bGVUZXh0OwotICAgIH0sCi0KLSAgICBzZXQgc3VidGl0bGVUZXh0KHN1YnRpdGxl
VGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N1YnRpdGxlVGV4dCA9IHN1YnRpdGxlVGV4dDsK
LSAgICAgICAgdGhpcy5fdXBkYXRlU3VidGl0bGUoKTsKLSAgICB9LAotCi0gICAgZ2V0IHNlYXJj
aE1hdGNoZXNDb3VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9LAotCi0gICAg
X19wcm90b19fOiBUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0KLSAq
IEBwYXJhbSB7Ym9vbGVhbj19IG5vSWNvbgotICovCi1XZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVn
b3J5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwsIGNhdGVnb3J5TmFtZSwgc2V0
dGluZ3NLZXksIGljb25DbGFzc2VzLCBub0ljb24pCi17Ci0gICAgV2ViSW5zcGVjdG9yLkJhc2VT
dG9yYWdlVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBzdG9yYWdlUGFuZWwsIG51bGwsIGNhdGVnb3J5
TmFtZSwgaWNvbkNsYXNzZXMsIHRydWUsIG5vSWNvbik7Ci0gICAgdGhpcy5fZXhwYW5kZWRTZXR0
aW5nS2V5ID0gInJlc291cmNlcyIgKyBzZXR0aW5nc0tleSArICJFeHBhbmRlZCI7Ci0gICAgV2Vi
SW5zcGVjdG9yLnNldHRpbmdzW3RoaXMuX2V4cGFuZGVkU2V0dGluZ0tleV0gPSBXZWJJbnNwZWN0
b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZyh0aGlzLl9leHBhbmRlZFNldHRpbmdLZXksIHNldHRp
bmdzS2V5ID09PSAiRnJhbWVzIik7Ci0gICAgdGhpcy5fY2F0ZWdvcnlOYW1lID0gY2F0ZWdvcnlO
YW1lOwotfQotCi1XZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5VHJlZUVsZW1lbnQucHJvdG90
eXBlID0gewotICAgIGdldCBpdGVtVVJMKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiY2F0ZWdv
cnk6Ly8iICsgdGhpcy5fY2F0ZWdvcnlOYW1lOwotICAgIH0sCi0KLSAgICBvbnNlbGVjdDogZnVu
Y3Rpb24oc2VsZWN0ZWRCeVVzZXIpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuQmFzZVN0
b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25zZWxlY3QuY2FsbCh0aGlzLCBzZWxlY3RlZEJ5
VXNlcik7Ci0gICAgICAgIHRoaXMuX3N0b3JhZ2VQYW5lbC5zaG93Q2F0ZWdvcnlWaWV3KHRoaXMu
X2NhdGVnb3J5TmFtZSk7Ci0gICAgfSwKLQotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUu
b25hdHRhY2guY2FsbCh0aGlzKTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5zZXR0aW5nc1t0
aGlzLl9leHBhbmRlZFNldHRpbmdLZXldLmdldCgpKQotICAgICAgICAgICAgdGhpcy5leHBhbmQo
KTsKLSAgICB9LAotCi0gICAgb25leHBhbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5zZXR0aW5nc1t0aGlzLl9leHBhbmRlZFNldHRpbmdLZXldLnNldCh0cnVlKTsK
LSAgICB9LAotCi0gICAgb25jb2xsYXBzZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLnNldHRpbmdzW3RoaXMuX2V4cGFuZGVkU2V0dGluZ0tleV0uc2V0KGZhbHNlKTsK
LSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxl
bWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtX
ZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0KLSAqLwotV2ViSW5zcGVjdG9yLkZy
YW1lVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwsIGZyYW1lKQotewotICAgIFdl
Ykluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LmNhbGwodGhpcywgc3RvcmFnZVBhbmVs
LCBudWxsLCAiIiwgWyJmcmFtZS1zdG9yYWdlLXRyZWUtaXRlbSJdKTsKLSAgICB0aGlzLl9mcmFt
ZSA9IGZyYW1lOwotICAgIHRoaXMuZnJhbWVOYXZpZ2F0ZWQoZnJhbWUpOwotfQotCi1XZWJJbnNw
ZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgZnJhbWVOYXZpZ2F0ZWQ6
IGZ1bmN0aW9uKGZyYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwot
ICAgICAgICB0aGlzLl9mcmFtZUlkID0gZnJhbWUuaWQ7Ci0KLSAgICAgICAgdGhpcy50aXRsZVRl
eHQgPSBmcmFtZS5uYW1lOwotICAgICAgICB0aGlzLnN1YnRpdGxlVGV4dCA9IG5ldyBXZWJJbnNw
ZWN0b3IuUGFyc2VkVVJMKGZyYW1lLnVybCkuZGlzcGxheU5hbWU7Ci0KLSAgICAgICAgdGhpcy5f
Y2F0ZWdvcnlFbGVtZW50cyA9IHt9OwotICAgICAgICB0aGlzLl90cmVlRWxlbWVudEZvclJlc291
cmNlID0ge307Ci0KLSAgICAgICAgdGhpcy5fc3RvcmFnZVBhbmVsLmFkZERvY3VtZW50VVJMKGZy
YW1lLnVybCk7Ci0gICAgfSwKLQotICAgIGdldCBpdGVtVVJMKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAiZnJhbWU6Ly8iICsgZW5jb2RlVVJJKHRoaXMuZGlzcGxheU5hbWUpOwotICAgIH0sCi0K
LSAgICBvbnNlbGVjdDogZnVuY3Rpb24oc2VsZWN0ZWRCeVVzZXIpCi0gICAgewotICAgICAgICBX
ZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25zZWxlY3QuY2Fs
bCh0aGlzLCBzZWxlY3RlZEJ5VXNlcik7Ci0gICAgICAgIHRoaXMuX3N0b3JhZ2VQYW5lbC5zaG93
Q2F0ZWdvcnlWaWV3KHRoaXMuZGlzcGxheU5hbWUpOwotCi0gICAgICAgIHRoaXMubGlzdEl0ZW1F
bGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhvdmVyZWQiKTsKLSAgICAgICAgRE9NQWdlbnQuaGlk
ZUhpZ2hsaWdodCgpOwotICAgIH0sCi0KLSAgICBzZXQgaG92ZXJlZChob3ZlcmVkKQotICAgIHsK
LSAgICAgICAgaWYgKGhvdmVyZWQpIHsKLSAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50
LmFkZFN0eWxlQ2xhc3MoImhvdmVyZWQiKTsKLSAgICAgICAgICAgIERPTUFnZW50LmhpZ2hsaWdo
dEZyYW1lKHRoaXMuX2ZyYW1lSWQsIFdlYkluc3BlY3Rvci5Db2xvci5QYWdlSGlnaGxpZ2h0LkNv
bnRlbnQudG9Qcm90b2NvbFJHQkEoKSwgV2ViSW5zcGVjdG9yLkNvbG9yLlBhZ2VIaWdobGlnaHQu
Q29udGVudE91dGxpbmUudG9Qcm90b2NvbFJHQkEoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJob3ZlcmVkIik7
Ci0gICAgICAgICAgICBET01BZ2VudC5oaWRlSGlnaGxpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgYXBwZW5kUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQotICAgIHsKLSAgICAg
ICAgaWYgKHJlc291cmNlLmlzSGlkZGVuKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHZhciBjYXRlZ29yeU5hbWUgPSByZXNvdXJjZS50eXBlLm5hbWUoKTsKLSAgICAgICAgdmFyIGNh
dGVnb3J5RWxlbWVudCA9IHJlc291cmNlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5
cGVzLkRvY3VtZW50ID8gdGhpcyA6IHRoaXMuX2NhdGVnb3J5RWxlbWVudHNbY2F0ZWdvcnlOYW1l
XTsKLSAgICAgICAgaWYgKCFjYXRlZ29yeUVsZW1lbnQpIHsKLSAgICAgICAgICAgIGNhdGVnb3J5
RWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5VHJlZUVsZW1lbnQodGhp
cy5fc3RvcmFnZVBhbmVsLCByZXNvdXJjZS50eXBlLmNhdGVnb3J5VGl0bGUoKSwgY2F0ZWdvcnlO
YW1lLCBudWxsLCB0cnVlKTsKLSAgICAgICAgICAgIHRoaXMuX2NhdGVnb3J5RWxlbWVudHNbcmVz
b3VyY2UudHlwZS5uYW1lKCldID0gY2F0ZWdvcnlFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5f
aW5zZXJ0SW5QcmVzZW50YXRpb25PcmRlcih0aGlzLCBjYXRlZ29yeUVsZW1lbnQpOwotICAgICAg
ICB9Ci0gICAgICAgIHZhciByZXNvdXJjZVRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5G
cmFtZVJlc291cmNlVHJlZUVsZW1lbnQodGhpcy5fc3RvcmFnZVBhbmVsLCByZXNvdXJjZSk7Ci0g
ICAgICAgIHRoaXMuX2luc2VydEluUHJlc2VudGF0aW9uT3JkZXIoY2F0ZWdvcnlFbGVtZW50LCBy
ZXNvdXJjZVRyZWVFbGVtZW50KTsKLSAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnRGb3JSZXNvdXJj
ZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2VUcmVlRWxlbWVudDsKLSAgICB9LAotCi0gICAgcmVz
b3VyY2VCeVVSTDogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50
ID0gdGhpcy5fdHJlZUVsZW1lbnRGb3JSZXNvdXJjZVt1cmxdOwotICAgICAgICByZXR1cm4gdHJl
ZUVsZW1lbnQgPyB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA6IG51bGw7Ci0gICAgfSwK
LQotICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbih0cmVlRWxlbWVudCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2luc2VydEluUHJlc2VudGF0aW9uT3JkZXIodGhpcywgdHJlZUVsZW1lbnQpOwotICAg
IH0sCi0KLSAgICBfaW5zZXJ0SW5QcmVzZW50YXRpb25PcmRlcjogZnVuY3Rpb24ocGFyZW50VHJl
ZUVsZW1lbnQsIGNoaWxkVHJlZUVsZW1lbnQpCi0gICAgewotICAgICAgICAvLyBJbnNlcnQgaW4g
dGhlIGFscGhhYmV0aWNhbCBvcmRlciwgZmlyc3QgZnJhbWVzLCB0aGVuIHJlc291cmNlcy4gRG9j
dW1lbnQgcmVzb3VyY2UgZ29lcyBsYXN0LgotICAgICAgICBmdW5jdGlvbiB0eXBlV2VpZ2h0KHRy
ZWVFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5VHJlZUVsZW1lbnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsK
LSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29t
cGFyZSh0cmVlRWxlbWVudDEsIHRyZWVFbGVtZW50MikKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIHR5cGVXZWlnaHQxID0gdHlwZVdlaWdodCh0cmVlRWxlbWVudDEpOwotICAgICAgICAgICAg
dmFyIHR5cGVXZWlnaHQyID0gdHlwZVdlaWdodCh0cmVlRWxlbWVudDIpOwotCi0gICAgICAgICAg
ICB2YXIgcmVzdWx0OwotICAgICAgICAgICAgaWYgKHR5cGVXZWlnaHQxID4gdHlwZVdlaWdodDIp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVX
ZWlnaHQxIDwgdHlwZVdlaWdodDIpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gLTE7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgdGl0bGUxID0gdHJlZUVsZW1lbnQx
LmRpc3BsYXlOYW1lIHx8IHRyZWVFbGVtZW50MS50aXRsZVRleHQ7Ci0gICAgICAgICAgICAgICAg
dmFyIHRpdGxlMiA9IHRyZWVFbGVtZW50Mi5kaXNwbGF5TmFtZSB8fCB0cmVlRWxlbWVudDIudGl0
bGVUZXh0OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRpdGxlMS5sb2NhbGVDb21wYXJlKHRp
dGxlMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIGNoaWxkcmVuID0gcGFyZW50VHJlZUVsZW1lbnQuY2hpbGRyZW47
Ci0gICAgICAgIHZhciBpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjb21wYXJlKGNoaWxkVHJlZUVsZW1lbnQsIGNoaWxk
cmVuW2ldKSA8IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
cGFyZW50VHJlZUVsZW1lbnQuaW5zZXJ0Q2hpbGQoY2hpbGRUcmVlRWxlbWVudCwgaSk7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQu
cHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnR9Ci0gKi8KLVdlYkluc3BlY3Rvci5GcmFtZVJl
c291cmNlVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwsIHJlc291cmNlKQotewot
ICAgIFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LmNhbGwodGhpcywgc3RvcmFn
ZVBhbmVsLCByZXNvdXJjZSwgcmVzb3VyY2UuZGlzcGxheU5hbWUsIFsicmVzb3VyY2Utc2lkZWJh
ci10cmVlLWl0ZW0iLCAicmVzb3VyY2VzLXR5cGUtIiArIHJlc291cmNlLnR5cGUubmFtZSgpXSk7
Ci0gICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICB0aGlzLl9yZXNvdXJjZS5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudHMuTWVzc2FnZUFkZGVkLCB0
aGlzLl9jb25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzKTsKLSAgICB0aGlzLl9yZXNvdXJjZS5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudHMuTWVzc2FnZXNDbGVhcmVk
LCB0aGlzLl9jb25zb2xlTWVzc2FnZXNDbGVhcmVkLCB0aGlzKTsKLSAgICB0aGlzLnRvb2x0aXAg
PSByZXNvdXJjZS51cmw7Ci19Ci0KLVdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1l
bnQucHJvdG90eXBlID0gewotICAgIGdldCBpdGVtVVJMKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9yZXNvdXJjZS51cmw7Ci0gICAgfSwKLQotICAgIG9uc2VsZWN0OiBmdW5jdGlvbihz
ZWxlY3RlZEJ5VXNlcikKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRy
ZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdC5jYWxsKHRoaXMsIHNlbGVjdGVkQnlVc2VyKTsK
LSAgICAgICAgdGhpcy5fc3RvcmFnZVBhbmVsLl9zaG93UmVzb3VyY2VWaWV3KHRoaXMuX3Jlc291
cmNlKTsKLSAgICB9LAotCi0gICAgb25kYmxjbGljazogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qub3BlbkluTmV3VGFiKHRoaXMuX3Jlc291cmNl
LnVybCk7Ci0gICAgfSwKLQotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2gu
Y2FsbCh0aGlzKTsKLQotICAgICAgICBpZiAodGhpcy5fcmVzb3VyY2UudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLnJlc291cmNlVHlwZXMuSW1hZ2UpIHsKLSAgICAgICAgICAgIHZhciBwcmV2aWV3SW1h
Z2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKLSAgICAgICAgICAgIHByZXZpZXdJ
bWFnZS5jbGFzc05hbWUgPSAiaW1hZ2UtcmVzb3VyY2UtaWNvbi1wcmV2aWV3IjsKLSAgICAgICAg
ICAgIHRoaXMuX3Jlc291cmNlLnBvcHVsYXRlSW1hZ2VTb3VyY2UocHJldmlld0ltYWdlKTsKLQot
ICAgICAgICAgICAgdmFyIGljb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgICAgICAgICBpY29uRWxlbWVudC5jbGFzc05hbWUgPSAiaWNvbiI7Ci0gICAgICAg
ICAgICBpY29uRWxlbWVudC5hcHBlbmRDaGlsZChwcmV2aWV3SW1hZ2UpOwotICAgICAgICAgICAg
dGhpcy5saXN0SXRlbUVsZW1lbnQucmVwbGFjZUNoaWxkKGljb25FbGVtZW50LCB0aGlzLmltYWdl
RWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9zdGF0dXNFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHRoaXMuX3N0YXR1c0VsZW1lbnQu
Y2xhc3NOYW1lID0gInN0YXR1cyI7Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50Lmluc2Vy
dEJlZm9yZSh0aGlzLl9zdGF0dXNFbGVtZW50LCB0aGlzLnRpdGxlRWxlbWVudCk7Ci0KLSAgICAg
ICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuZHJhZ2dhYmxlID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5s
aXN0SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0IiwgdGhpcy5fb25kcmFn
c3RhcnQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2hhbmRsZUNvbnRleHRNZW51RXZl
bnQuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlRXJyb3JzQW5kV2Fy
bmluZ3NCdWJibGVzKCk7Ci0gICAgfSwKLQotICAgIF9vbmRyYWdzdGFydDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFp
biIsIHRoaXMuX3Jlc291cmNlLmNvbnRlbnQpOwotICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIu
ZWZmZWN0QWxsb3dlZCA9ICJjb3B5IjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQot
ICAgIF9oYW5kbGVDb250ZXh0TWVudUV2ZW50OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQp
OwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRBcHBsaWNhYmxlSXRlbXModGhpcy5fcmVzb3Vy
Y2UpOwotICAgICAgICBpZiAodGhpcy5fcmVzb3VyY2UucmVxdWVzdCkKLSAgICAgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEFwcGxpY2FibGVJdGVtcyh0aGlzLl9yZXNvdXJjZS5yZXF1ZXN0KTsK
LSAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgIH0sCi0KLSAgICBfc2V0QnViYmxlVGV4
dDogZnVuY3Rpb24oeCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fYnViYmxlRWxlbWVudCkg
ewotICAgICAgICAgICAgdGhpcy5fYnViYmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICAgICAgdGhpcy5fYnViYmxlRWxlbWVudC5jbGFzc05hbWUgPSAi
YnViYmxlIjsKLSAgICAgICAgICAgIHRoaXMuX3N0YXR1c0VsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5fYnViYmxlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9idWJibGVFbGVt
ZW50LnRleHRDb250ZW50ID0geDsKLSAgICB9LAotCi0gICAgX3Jlc2V0QnViYmxlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fYnViYmxlRWxlbWVudCkgewotICAgICAgICAg
ICAgdGhpcy5fYnViYmxlRWxlbWVudC50ZXh0Q29udGVudCA9ICIiOwotICAgICAgICAgICAgdGhp
cy5fYnViYmxlRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJzZWFyY2gtbWF0Y2hlcyIpOwotICAg
ICAgICAgICAgdGhpcy5fYnViYmxlRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJ3YXJuaW5nIik7
Ci0gICAgICAgICAgICB0aGlzLl9idWJibGVFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImVycm9y
Iik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3Jlc2V0U2VhcmNoUmVzdWx0czogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzZXRCdWJibGUoKTsKLSAgICAgICAgdGhpcy5f
c2VhcmNoTWF0Y2hlc0NvdW50ID0gMDsKLSAgICB9LAotCi0gICAgZ2V0IHNlYXJjaE1hdGNoZXND
b3VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50Owot
ICAgIH0sCi0KLSAgICBzZWFyY2hNYXRjaGVzRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXNDb3VudCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNoUmVzdWx0cygpOwotCi0gICAgICAgIHRo
aXMuX3NlYXJjaE1hdGNoZXNDb3VudCA9IG1hdGNoZXNDb3VudDsKLSAgICAgICAgdGhpcy5fc2V0
QnViYmxlVGV4dChtYXRjaGVzQ291bnQpOwotICAgICAgICB0aGlzLl9idWJibGVFbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoInNlYXJjaC1tYXRjaGVzIik7Ci0KLSAgICAgICAgLy8gRXhwYW5kLCBkbyBu
b3Qgc2Nyb2xsIGludG8gdmlldy4KLSAgICAgICAgdmFyIGN1cnJlbnRBbmNlc3RvciA9IHRoaXMu
cGFyZW50OwotICAgICAgICB3aGlsZSAoY3VycmVudEFuY2VzdG9yICYmICFjdXJyZW50QW5jZXN0
b3Iucm9vdCkgewotICAgICAgICAgICAgaWYgKCFjdXJyZW50QW5jZXN0b3IuZXhwYW5kZWQpCi0g
ICAgICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yLmV4cGFuZCgpOwotICAgICAgICAgICAgY3Vy
cmVudEFuY2VzdG9yID0gY3VycmVudEFuY2VzdG9yLnBhcmVudDsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfdXBkYXRlRXJyb3JzQW5kV2FybmluZ3NCdWJibGVzOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5fc3RvcmFnZVBhbmVsLmN1cnJlbnRRdWVyeSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9yZXNldEJ1YmJsZSgpOwotCi0gICAgICAgIGlm
ICh0aGlzLl9yZXNvdXJjZS53YXJuaW5ncyB8fCB0aGlzLl9yZXNvdXJjZS5lcnJvcnMpCi0gICAg
ICAgICAgICB0aGlzLl9zZXRCdWJibGVUZXh0KHRoaXMuX3Jlc291cmNlLndhcm5pbmdzICsgdGhp
cy5fcmVzb3VyY2UuZXJyb3JzKTsKLQotICAgICAgICBpZiAodGhpcy5fcmVzb3VyY2Uud2Fybmlu
Z3MpCi0gICAgICAgICAgICB0aGlzLl9idWJibGVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIndhcm5p
bmciKTsKLQotICAgICAgICBpZiAodGhpcy5fcmVzb3VyY2UuZXJyb3JzKQotICAgICAgICAgICAg
dGhpcy5fYnViYmxlRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJlcnJvciIpOwotICAgIH0sCi0KLSAg
ICBfY29uc29sZU1lc3NhZ2VzQ2xlYXJlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IG1vdmUgdG8gdGhlIFNvdXJjZUZyYW1lLgotICAgICAgICBpZiAodGhpcy5fc291cmNl
VmlldykKLSAgICAgICAgICAgIHRoaXMuX3NvdXJjZVZpZXcuY2xlYXJNZXNzYWdlcygpOwotCi0g
ICAgICAgIHRoaXMuX3VwZGF0ZUVycm9yc0FuZFdhcm5pbmdzQnViYmxlcygpOwotICAgIH0sCi0K
LSAgICBfY29uc29sZU1lc3NhZ2VBZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgbXNnID0gZXZlbnQuZGF0YTsKLSAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVZpZXcpCi0g
ICAgICAgICAgICB0aGlzLl9zb3VyY2VWaWV3LmFkZE1lc3NhZ2UobXNnKTsKLSAgICAgICAgdGhp
cy5fdXBkYXRlRXJyb3JzQW5kV2FybmluZ3NCdWJibGVzKCk7Ci0gICAgfSwKLQotICAgIHNvdXJj
ZVZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc291cmNlVmlldykg
ewotICAgICAgICAgICAgdGhpcy5fc291cmNlVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VTb3VyY2VGcmFtZSh0aGlzLl9yZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcmVz
b3VyY2UubWVzc2FnZXMpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3Jlc291cmNlLm1lc3NhZ2VzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9zb3VyY2VWaWV3LmFkZE1lc3NhZ2UodGhpcy5fcmVzb3VyY2UubWVzc2FnZXNbaV0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VWaWV3
OwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVF
bGVtZW50LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50fQotICovCi1XZWJJbnNwZWN0b3Iu
RGF0YWJhc2VUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHN0b3JhZ2VQYW5lbCwgZGF0YWJhc2UpCi17
Ci0gICAgV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBzdG9y
YWdlUGFuZWwsIG51bGwsIGRhdGFiYXNlLm5hbWUsIFsiZGF0YWJhc2Utc3RvcmFnZS10cmVlLWl0
ZW0iXSwgdHJ1ZSk7Ci0gICAgdGhpcy5fZGF0YWJhc2UgPSBkYXRhYmFzZTsKLX0KLQotV2ViSW5z
cGVjdG9yLkRhdGFiYXNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIGdldCBpdGVtVVJM
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiZGF0YWJhc2U6Ly8iICsgZW5jb2RlVVJJKHRoaXMu
X2RhdGFiYXNlLm5hbWUpOwotICAgIH0sCi0KLSAgICBvbnNlbGVjdDogZnVuY3Rpb24oc2VsZWN0
ZWRCeVVzZXIpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxl
bWVudC5wcm90b3R5cGUub25zZWxlY3QuY2FsbCh0aGlzLCBzZWxlY3RlZEJ5VXNlcik7Ci0gICAg
ICAgIHRoaXMuX3N0b3JhZ2VQYW5lbC5fc2hvd0RhdGFiYXNlKHRoaXMuX2RhdGFiYXNlKTsKLSAg
ICB9LAotCi0gICAgb25leHBhbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Vw
ZGF0ZUNoaWxkcmVuKCk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIGZ1bmN0
aW9uIHRhYmxlTmFtZXNDYWxsYmFjayh0YWJsZU5hbWVzKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB2YXIgdGFibGVOYW1lc0xlbmd0aCA9IHRhYmxlTmFtZXMubGVuZ3RoOwotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZU5hbWVzTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAg
ICAgdGhpcy5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVUcmVlRWxl
bWVudCh0aGlzLl9zdG9yYWdlUGFuZWwsIHRoaXMuX2RhdGFiYXNlLCB0YWJsZU5hbWVzW2ldKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZGF0YWJhc2UuZ2V0VGFibGVOYW1lcyh0YWJsZU5h
bWVzQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1l
bnR9Ci0gKi8KLVdlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlVHJlZUVsZW1lbnQgPSBmdW5jdGlv
bihzdG9yYWdlUGFuZWwsIGRhdGFiYXNlLCB0YWJsZU5hbWUpCi17Ci0gICAgV2ViSW5zcGVjdG9y
LkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBzdG9yYWdlUGFuZWwsIG51bGwsIHRh
YmxlTmFtZSwgWyJkYXRhYmFzZS1zdG9yYWdlLXRyZWUtaXRlbSJdKTsKLSAgICB0aGlzLl9kYXRh
YmFzZSA9IGRhdGFiYXNlOwotICAgIHRoaXMuX3RhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLX0KLQot
V2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAg
Z2V0IGl0ZW1VUkwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJkYXRhYmFzZTovLyIgKyBlbmNv
ZGVVUkkodGhpcy5fZGF0YWJhc2UubmFtZSkgKyAiLyIgKyBlbmNvZGVVUkkodGhpcy5fdGFibGVO
YW1lKTsKLSAgICB9LAotCi0gICAgb25zZWxlY3Q6IGZ1bmN0aW9uKHNlbGVjdGVkQnlVc2VyKQot
ICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90
eXBlLm9uc2VsZWN0LmNhbGwodGhpcywgc2VsZWN0ZWRCeVVzZXIpOwotICAgICAgICB0aGlzLl9z
dG9yYWdlUGFuZWwuX3Nob3dEYXRhYmFzZSh0aGlzLl9kYXRhYmFzZSwgdGhpcy5fdGFibGVOYW1l
KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVl
RWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5VHJlZUVsZW1lbnR9Ci0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbH0gc3RvcmFnZVBhbmVsCi0gKi8KLVdlYkluc3BlY3Rv
ci5JbmRleGVkREJUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHN0b3JhZ2VQYW5lbCkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5VHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBzdG9yYWdl
UGFuZWwsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW5kZXhlZERCIiksICJJbmRleGVkREIiLCBb
ImluZGV4ZWQtZGItc3RvcmFnZS10cmVlLWl0ZW0iXSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5JbmRl
eGVkREJUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgb25leHBhbmQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5TdG9yYWdlQ2F0ZWdvcnlUcmVlRWxlbWVudC5w
cm90b3R5cGUub25leHBhbmQuY2FsbCh0aGlzKTsKLSAgICAgICAgaWYgKCF0aGlzLl9pbmRleGVk
REJNb2RlbCkKLSAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUluZGV4ZWREQk1vZGVsKCk7Ci0gICAg
fSwKLQotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0
b3IuU3RvcmFnZUNhdGVnb3J5VHJlZUVsZW1lbnQucHJvdG90eXBlLm9uYXR0YWNoLmNhbGwodGhp
cyk7Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRl
eHRtZW51IiwgdGhpcy5faGFuZGxlQ29udGV4dE1lbnVFdmVudC5iaW5kKHRoaXMpLCB0cnVlKTsK
LSAgICB9LAotCi0gICAgX2hhbmRsZUNvbnRleHRNZW51RXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0
TWVudShldmVudCk7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJSZWZyZXNoIEluZGV4ZWREQiIpLCB0aGlzLnJlZnJlc2hJbmRleGVkREIuYmlu
ZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKLSAgICB9LAotCi0gICAgX2Ny
ZWF0ZUluZGV4ZWREQk1vZGVsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9pbmRl
eGVkREJNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwoKTsKLSAgICAgICAg
dGhpcy5faWRiRGF0YWJhc2VUcmVlRWxlbWVudHMgPSBbXTsKLSAgICAgICAgdGhpcy5faW5kZXhl
ZERCTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRXZl
bnRUeXBlcy5EYXRhYmFzZUFkZGVkLCB0aGlzLl9pbmRleGVkREJBZGRlZCwgdGhpcyk7Ci0gICAg
ICAgIHRoaXMuX2luZGV4ZWREQk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLklu
ZGV4ZWREQk1vZGVsLkV2ZW50VHlwZXMuRGF0YWJhc2VSZW1vdmVkLCB0aGlzLl9pbmRleGVkREJS
ZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5faW5kZXhlZERCTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRXZlbnRUeXBlcy5EYXRhYmFzZUxvYWRl
ZCwgdGhpcy5faW5kZXhlZERCTG9hZGVkLCB0aGlzKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaElu
ZGV4ZWREQjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9pbmRleGVkREJN
b2RlbCkgewotICAgICAgICAgICAgdGhpcy5fY3JlYXRlSW5kZXhlZERCTW9kZWwoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2luZGV4ZWREQk1vZGVs
LnJlZnJlc2hEYXRhYmFzZU5hbWVzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9pbmRleGVkREJBZGRl
ZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZGF0YWJhc2VJZCA9IC8qKiBA
dHlwZSB7V2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLkRhdGFiYXNlSWR9ICovIChldmVudC5k
YXRhKTsKLQotICAgICAgICB2YXIgaWRiRGF0YWJhc2VUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNw
ZWN0b3IuSURCRGF0YWJhc2VUcmVlRWxlbWVudCh0aGlzLl9zdG9yYWdlUGFuZWwsIHRoaXMuX2lu
ZGV4ZWREQk1vZGVsLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgdGhpcy5faWRiRGF0YWJhc2VUcmVl
RWxlbWVudHMucHVzaChpZGJEYXRhYmFzZVRyZWVFbGVtZW50KTsKLSAgICAgICAgdGhpcy5hcHBl
bmRDaGlsZChpZGJEYXRhYmFzZVRyZWVFbGVtZW50KTsKLQotICAgICAgICB0aGlzLl9pbmRleGVk
REJNb2RlbC5yZWZyZXNoRGF0YWJhc2UoZGF0YWJhc2VJZCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9p
bmRleGVkREJSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRh
YmFzZUlkID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2VJ
ZH0gKi8gKGV2ZW50LmRhdGEpOwotCi0gICAgICAgIHZhciBpZGJEYXRhYmFzZVRyZWVFbGVtZW50
ID0gdGhpcy5faWRiRGF0YWJhc2VUcmVlRWxlbWVudChkYXRhYmFzZUlkKQotICAgICAgICBpZiAo
IWlkYkRhdGFiYXNlVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWRiRGF0YWJhc2VUcmVlRWxlbWVudC5jbGVhcigpOwotICAgICAgICB0aGlzLnJlbW92ZUNoaWxk
KGlkYkRhdGFiYXNlVHJlZUVsZW1lbnQpOwotICAgICAgICB0aGlzLl9pZGJEYXRhYmFzZVRyZWVF
bGVtZW50cy5yZW1vdmUoaWRiRGF0YWJhc2VUcmVlRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAg
IF9pbmRleGVkREJMb2FkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGRh
dGFiYXNlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2V9
ICovIChldmVudC5kYXRhKTsKLQotICAgICAgICB2YXIgaWRiRGF0YWJhc2VUcmVlRWxlbWVudCA9
IHRoaXMuX2lkYkRhdGFiYXNlVHJlZUVsZW1lbnQoZGF0YWJhc2UuZGF0YWJhc2VJZCkKLSAgICAg
ICAgaWYgKCFpZGJEYXRhYmFzZVRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGlkYkRhdGFiYXNlVHJlZUVsZW1lbnQudXBkYXRlKGRhdGFiYXNlKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0
YWJhc2VJZH0gZGF0YWJhc2VJZAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5JREJEYXRh
YmFzZVRyZWVFbGVtZW50fQotICAgICAqLwotICAgIF9pZGJEYXRhYmFzZVRyZWVFbGVtZW50OiBm
dW5jdGlvbihkYXRhYmFzZUlkKQotICAgIHsKLSAgICAgICAgdmFyIGluZGV4ID0gLTE7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faWRiRGF0YWJhc2VUcmVlRWxlbWVudHMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9pZGJEYXRhYmFzZVRyZWVFbGVtZW50
c1tpXS5fZGF0YWJhc2VJZC5lcXVhbHMoZGF0YWJhc2VJZCkpIHsKLSAgICAgICAgICAgICAgICBp
bmRleCA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9p
ZGJEYXRhYmFzZVRyZWVFbGVtZW50c1tpXTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwK
LQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVRyZWVFbGVtZW50
LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5TdG9yYWdlQ2F0ZWdvcnlUcmVlRWxlbWVudH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlJlc291cmNlc1BhbmVsfSBzdG9yYWdlUGFuZWwKLSAqLwotV2ViSW5zcGVjdG9yLkZpbGVT
eXN0ZW1MaXN0VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVRyZWVFbGVtZW50LmNhbGwodGhpcywgc3RvcmFnZVBh
bmVsLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZpbGVTeXN0ZW0iKSwgIkZpbGVTeXN0ZW0iLCBb
ImZpbGUtc3lzdGVtLXN0b3JhZ2UtdHJlZS1pdGVtIl0pOwotfQotCi1XZWJJbnNwZWN0b3IuRmls
ZVN5c3RlbUxpc3RUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgb25leHBhbmQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5TdG9yYWdlQ2F0ZWdvcnlUcmVlRWxl
bWVudC5wcm90b3R5cGUub25leHBhbmQuY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5fcmVmcmVz
aEZpbGVTeXN0ZW0oKTsKLSAgICB9LAotCi0gICAgb25hdHRhY2g6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5TdG9yYWdlQ2F0ZWdvcnlUcmVlRWxlbWVudC5wcm90b3R5
cGUub25hdHRhY2guY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50
LmJpbmQodGhpcyksIHRydWUpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVu
dDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcg
V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1l
bnVUaXRsZXMoKSA/ICJSZWZyZXNoIEZpbGVTeXN0ZW0gbGlzdCIgOiAiUmVmcmVzaCBGaWxlU3lz
dGVtIExpc3QiKSwgdGhpcy5fcmVmcmVzaEZpbGVTeXN0ZW0uYmluZCh0aGlzKSk7Ci0gICAgICAg
IGNvbnRleHRNZW51LnNob3coKTsKLSAgICB9LAotCi0gICAgX2ZpbGVTeXN0ZW1BZGRlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgZmlsZVN5c3RlbSA9IC8qKiBAdHlwZSB7
V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5GaWxlU3lzdGVtfSAqLyAoZXZlbnQuZGF0YSk7
Ci0gICAgICAgIHZhciBmaWxlU3lzdGVtVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkZp
bGVTeXN0ZW1UcmVlRWxlbWVudCh0aGlzLl9zdG9yYWdlUGFuZWwsIGZpbGVTeXN0ZW0pOwotICAg
ICAgICB0aGlzLmFwcGVuZENoaWxkKGZpbGVTeXN0ZW1UcmVlRWxlbWVudCk7Ci0gICAgfSwKLQot
ICAgIF9maWxlU3lzdGVtUmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2
YXIgZmlsZVN5c3RlbSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5G
aWxlU3lzdGVtfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHZhciBmaWxlU3lzdGVtVHJlZUVs
ZW1lbnQgPSB0aGlzLl9maWxlU3lzdGVtVHJlZUVsZW1lbnRCeU5hbWUoZmlsZVN5c3RlbS5uYW1l
KTsKLSAgICAgICAgaWYgKCFmaWxlU3lzdGVtVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZpbGVTeXN0ZW1UcmVlRWxlbWVudC5jbGVhcigpOwotICAgICAgICB0aGlz
LnJlbW92ZUNoaWxkKGZpbGVTeXN0ZW1UcmVlRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9maWxl
U3lzdGVtVHJlZUVsZW1lbnRCeU5hbWU6IGZ1bmN0aW9uKGZpbGVTeXN0ZW1OYW1lKQotICAgIHsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICB2YXIgY2hpbGQgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5GaWxlU3lz
dGVtVHJlZUVsZW1lbnR9ICovICh0aGlzLmNoaWxkcmVuW2ldKTsKLSAgICAgICAgICAgIGlmIChj
aGlsZC5maWxlU3lzdGVtTmFtZSA9PT0gZmlsZVN5c3RlbU5hbWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuY2hpbGRyZW5baV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoRmlsZVN5c3RlbTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9maWxlU3lzdGVtTW9kZWwpIHsKLSAgICAgICAgICAgIHRoaXMuX2Zp
bGVTeXN0ZW1Nb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsKCk7Ci0gICAg
ICAgICAgICB0aGlzLl9maWxlU3lzdGVtTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuRmlsZVN5c3RlbU1vZGVsLkV2ZW50VHlwZXMuRmlsZVN5c3RlbUFkZGVkLCB0aGlzLl9maWxl
U3lzdGVtQWRkZWQsIHRoaXMpOwotICAgICAgICAgICAgdGhpcy5fZmlsZVN5c3RlbU1vZGVsLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Nb2RlbC5FdmVudFR5cGVzLkZp
bGVTeXN0ZW1SZW1vdmVkLCB0aGlzLl9maWxlU3lzdGVtUmVtb3ZlZCwgdGhpcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0aGlzLl9maWxlU3lzdGVtTW9kZWwucmVmcmVzaEZpbGVTeXN0ZW1MaXN0
KCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29y
eVRyZWVFbGVtZW50LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50fQotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWx9IHN0b3JhZ2VQYW5lbAotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuSW5kZXhlZERCTW9kZWx9IG1vZGVsCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5J
bmRleGVkREJNb2RlbC5EYXRhYmFzZUlkfSBkYXRhYmFzZUlkCi0gKi8KLVdlYkluc3BlY3Rvci5J
REJEYXRhYmFzZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc3RvcmFnZVBhbmVsLCBtb2RlbCwgZGF0
YWJhc2VJZCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5jYWxs
KHRoaXMsIHN0b3JhZ2VQYW5lbCwgbnVsbCwgZGF0YWJhc2VJZC5uYW1lICsgIiAtICIgKyBkYXRh
YmFzZUlkLnNlY3VyaXR5T3JpZ2luLCBbImluZGV4ZWQtZGItc3RvcmFnZS10cmVlLWl0ZW0iXSk7
Ci0gICAgdGhpcy5fbW9kZWwgPSBtb2RlbDsKLSAgICB0aGlzLl9kYXRhYmFzZUlkID0gZGF0YWJh
c2VJZDsKLSAgICB0aGlzLl9pZGJPYmplY3RTdG9yZVRyZWVFbGVtZW50cyA9IHt9OwotfQotCi1X
ZWJJbnNwZWN0b3IuSURCRGF0YWJhc2VUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0
IGl0ZW1VUkwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJpbmRleGVkREI6Ly8iICsgdGhpcy5f
ZGF0YWJhc2VJZC5zZWN1cml0eU9yaWdpbiArICIvIiArIHRoaXMuX2RhdGFiYXNlSWQubmFtZTsK
LSAgICB9LAotCi0gICAgb25hdHRhY2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaC5jYWxsKHRo
aXMpOwotICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250
ZXh0bWVudSIsIHRoaXMuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQuYmluZCh0aGlzKSwgdHJ1ZSk7
Ci0gICAgfSwKLQotICAgIF9oYW5kbGVDb250ZXh0TWVudUV2ZW50OiBmdW5jdGlvbihldmVudCkK
LSAgICB7Ci0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4
dE1lbnUoZXZlbnQpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiUmVmcmVzaCBJbmRleGVkREIiKSwgdGhpcy5fcmVmcmVzaEluZGV4ZWREQi5i
aW5kKHRoaXMpKTsKLSAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgIH0sCi0KLSAgICBf
cmVmcmVzaEluZGV4ZWREQjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbW9kZWwu
cmVmcmVzaERhdGFiYXNlTmFtZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2V9IGRhdGFiYXNlCi0gICAgICov
Ci0gICAgdXBkYXRlOiBmdW5jdGlvbihkYXRhYmFzZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Rh
dGFiYXNlID0gZGF0YWJhc2U7Ci0gICAgICAgIHZhciBvYmplY3RTdG9yZU5hbWVzID0ge307Ci0g
ICAgICAgIGZvciAodmFyIG9iamVjdFN0b3JlTmFtZSBpbiB0aGlzLl9kYXRhYmFzZS5vYmplY3RT
dG9yZXMpIHsKLSAgICAgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IHRoaXMuX2RhdGFiYXNlLm9i
amVjdFN0b3Jlc1tvYmplY3RTdG9yZU5hbWVdOwotICAgICAgICAgICAgb2JqZWN0U3RvcmVOYW1l
c1tvYmplY3RTdG9yZS5uYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2lkYk9i
amVjdFN0b3JlVHJlZUVsZW1lbnRzW29iamVjdFN0b3JlLm5hbWVdKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGlkYk9iamVjdFN0b3JlVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLklEQk9i
amVjdFN0b3JlVHJlZUVsZW1lbnQodGhpcy5fc3RvcmFnZVBhbmVsLCB0aGlzLl9tb2RlbCwgdGhp
cy5fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUpOwotICAgICAgICAgICAgICAgIHRoaXMuX2lkYk9i
amVjdFN0b3JlVHJlZUVsZW1lbnRzW29iamVjdFN0b3JlLm5hbWVdID0gaWRiT2JqZWN0U3RvcmVU
cmVlRWxlbWVudDsKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGlkYk9iamVjdFN0
b3JlVHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5faWRiT2Jq
ZWN0U3RvcmVUcmVlRWxlbWVudHNbb2JqZWN0U3RvcmUubmFtZV0udXBkYXRlKG9iamVjdFN0b3Jl
KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBvYmplY3RTdG9yZU5hbWUgaW4gdGhpcy5f
aWRiT2JqZWN0U3RvcmVUcmVlRWxlbWVudHMpIHsKLSAgICAgICAgICAgIGlmICghb2JqZWN0U3Rv
cmVOYW1lc1tvYmplY3RTdG9yZU5hbWVdKQotICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdFN0
b3JlUmVtb3ZlZChvYmplY3RTdG9yZU5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRo
aXMuY2hpbGRyZW4ubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gdHJ1
ZTsKLSAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
dGhpcy5fdmlldykKLSAgICAgICAgICAgIHRoaXMuX3ZpZXcudXBkYXRlKGRhdGFiYXNlKTsKLQot
ICAgICAgICB0aGlzLl91cGRhdGVUb29sdGlwKCk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVUb29s
dGlwOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnRvb2x0aXAgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlZlcnNpb24iKSArICI6ICIgKyB0aGlzLl9kYXRhYmFzZS52ZXJzaW9uOwot
ICAgIH0sCi0KLSAgICBvbnNlbGVjdDogZnVuY3Rpb24oc2VsZWN0ZWRCeVVzZXIpCi0gICAgewot
ICAgICAgICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25z
ZWxlY3QuY2FsbCh0aGlzLCBzZWxlY3RlZEJ5VXNlcik7Ci0gICAgICAgIGlmICghdGhpcy5fdmll
dykKLSAgICAgICAgICAgIHRoaXMuX3ZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLklEQkRhdGFiYXNl
Vmlldyh0aGlzLl9kYXRhYmFzZSk7Ci0KLSAgICAgICAgdGhpcy5fc3RvcmFnZVBhbmVsLnNob3dJ
bmRleGVkREIodGhpcy5fdmlldyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBvYmplY3RTdG9yZU5hbWUKLSAgICAgKi8KLSAgICBfb2JqZWN0U3RvcmVSZW1vdmVk
OiBmdW5jdGlvbihvYmplY3RTdG9yZU5hbWUpCi0gICAgewotICAgICAgICB2YXIgb2JqZWN0U3Rv
cmVUcmVlRWxlbWVudCA9IHRoaXMuX2lkYk9iamVjdFN0b3JlVHJlZUVsZW1lbnRzW29iamVjdFN0
b3JlTmFtZV07Ci0gICAgICAgIG9iamVjdFN0b3JlVHJlZUVsZW1lbnQuY2xlYXIoKTsKLSAgICAg
ICAgdGhpcy5yZW1vdmVDaGlsZChvYmplY3RTdG9yZVRyZWVFbGVtZW50KTsKLSAgICAgICAgZGVs
ZXRlIHRoaXMuX2lkYk9iamVjdFN0b3JlVHJlZUVsZW1lbnRzW29iamVjdFN0b3JlTmFtZV07Ci0g
ICAgfSwKLQotICAgIGNsZWFyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBv
YmplY3RTdG9yZU5hbWUgaW4gdGhpcy5faWRiT2JqZWN0U3RvcmVUcmVlRWxlbWVudHMpCi0gICAg
ICAgICAgICB0aGlzLl9vYmplY3RTdG9yZVJlbW92ZWQob2JqZWN0U3RvcmVOYW1lKTsKLSAgICB9
LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5w
cm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNw
ZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJl
c291cmNlc1BhbmVsfSBzdG9yYWdlUGFuZWwKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkluZGV4
ZWREQk1vZGVsfSBtb2RlbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwu
RGF0YWJhc2VJZH0gZGF0YWJhc2VJZAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERC
TW9kZWwuT2JqZWN0U3RvcmV9IG9iamVjdFN0b3JlCi0gKi8KLVdlYkluc3BlY3Rvci5JREJPYmpl
Y3RTdG9yZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc3RvcmFnZVBhbmVsLCBtb2RlbCwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVs
ZW1lbnQuY2FsbCh0aGlzLCBzdG9yYWdlUGFuZWwsIG51bGwsIG9iamVjdFN0b3JlLm5hbWUsIFsi
aW5kZXhlZC1kYi1vYmplY3Qtc3RvcmUtc3RvcmFnZS10cmVlLWl0ZW0iXSk7Ci0gICAgdGhpcy5f
bW9kZWwgPSBtb2RlbDsKLSAgICB0aGlzLl9kYXRhYmFzZUlkID0gZGF0YWJhc2VJZDsKLSAgICB0
aGlzLl9pZGJJbmRleFRyZWVFbGVtZW50cyA9IHt9OwotfQotCi1XZWJJbnNwZWN0b3IuSURCT2Jq
ZWN0U3RvcmVUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IGl0ZW1VUkwoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICJpbmRleGVkREI6Ly8iICsgdGhpcy5fZGF0YWJhc2VJZC5zZWN1
cml0eU9yaWdpbiArICIvIiArIHRoaXMuX2RhdGFiYXNlSWQubmFtZSArICIvIiArIHRoaXMuX29i
amVjdFN0b3JlLm5hbWU7Ci0gICAgfSwKLQotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUu
b25hdHRhY2guY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50LmJp
bmQodGhpcyksIHRydWUpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVudDog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2Vi
SW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
SXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNsZWFyIiksIHRoaXMuX2NsZWFyT2JqZWN0U3Rv
cmUuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKLSAgICB9LAotCi0g
ICAgX2NsZWFyT2JqZWN0U3RvcmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKCkgewotICAgICAgICAgICAgdGhpcy51cGRhdGUodGhpcy5fb2JqZWN0U3RvcmUp
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX21vZGVsLmNsZWFyT2JqZWN0U3RvcmUodGhpcy5f
ZGF0YWJhc2VJZCwgdGhpcy5fb2JqZWN0U3RvcmUubmFtZSwgY2FsbGJhY2suYmluZCh0aGlzKSk7
Ci0gICAgfSwKLQotICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERC
TW9kZWwuT2JqZWN0U3RvcmV9IG9iamVjdFN0b3JlCi0gICAgICovCi0gICAgdXBkYXRlOiBmdW5j
dGlvbihvYmplY3RTdG9yZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX29iamVjdFN0b3JlID0gb2Jq
ZWN0U3RvcmU7Ci0KLSAgICAgICAgdmFyIGluZGV4TmFtZXMgPSB7fTsKLSAgICAgICAgZm9yICh2
YXIgaW5kZXhOYW1lIGluIHRoaXMuX29iamVjdFN0b3JlLmluZGV4ZXMpIHsKLSAgICAgICAgICAg
IHZhciBpbmRleCA9IHRoaXMuX29iamVjdFN0b3JlLmluZGV4ZXNbaW5kZXhOYW1lXTsKLSAgICAg
ICAgICAgIGluZGV4TmFtZXNbaW5kZXgubmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKCF0
aGlzLl9pZGJJbmRleFRyZWVFbGVtZW50c1tpbmRleC5uYW1lXSkgewotICAgICAgICAgICAgICAg
IHZhciBpZGJJbmRleFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5JREJJbmRleFRyZWVF
bGVtZW50KHRoaXMuX3N0b3JhZ2VQYW5lbCwgdGhpcy5fbW9kZWwsIHRoaXMuX2RhdGFiYXNlSWQs
IHRoaXMuX29iamVjdFN0b3JlLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5faWRiSW5k
ZXhUcmVlRWxlbWVudHNbaW5kZXgubmFtZV0gPSBpZGJJbmRleFRyZWVFbGVtZW50OwotICAgICAg
ICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoaWRiSW5kZXhUcmVlRWxlbWVudCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9pZGJJbmRleFRyZWVFbGVtZW50c1tpbmRleC5uYW1l
XS51cGRhdGUoaW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGluZGV4TmFtZSBp
biB0aGlzLl9pZGJJbmRleFRyZWVFbGVtZW50cykgewotICAgICAgICAgICAgaWYgKCFpbmRleE5h
bWVzW2luZGV4TmFtZV0pCi0gICAgICAgICAgICAgICAgdGhpcy5faW5kZXhSZW1vdmVkKGluZGV4
TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh2YXIgaW5kZXhOYW1lIGluIHRoaXMuX2lk
YkluZGV4VHJlZUVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIWluZGV4TmFtZXNbaW5kZXhO
YW1lXSkgewotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5faWRiSW5kZXhU
cmVlRWxlbWVudHNbaW5kZXhOYW1lXSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2lk
YkluZGV4VHJlZUVsZW1lbnRzW2luZGV4TmFtZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRoaXMu
aGFzQ2hpbGRyZW4gPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICh0aGlzLl92aWV3KQotICAgICAgICAgICAgdGhpcy5fdmlldy51cGRh
dGUodGhpcy5fb2JqZWN0U3RvcmUpOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZVRvb2x0aXAoKTsK
LSAgICB9LAotCi0gICAgX3VwZGF0ZVRvb2x0aXA6IGZ1bmN0aW9uKCkKLSAgICB7Ci0KLSAgICAg
ICAgdmFyIGtleVBhdGhTdHJpbmcgPSB0aGlzLl9vYmplY3RTdG9yZS5rZXlQYXRoU3RyaW5nOwot
ICAgICAgICB2YXIgdG9vbHRpcFN0cmluZyA9IGtleVBhdGhTdHJpbmcgIT09IG51bGwgPyAoV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJLZXkgcGF0aDogIikgKyBrZXlQYXRoU3RyaW5nKSA6ICIiOwot
ICAgICAgICBpZiAodGhpcy5fb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCkKLSAgICAgICAgICAg
IHRvb2x0aXBTdHJpbmcgKz0gIlxuIiArIFdlYkluc3BlY3Rvci5VSVN0cmluZygiYXV0b0luY3Jl
bWVudCIpOwotICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwU3RyaW5nCi0gICAgfSwKLQot
ICAgIG9uc2VsZWN0OiBmdW5jdGlvbihzZWxlY3RlZEJ5VXNlcikKLSAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdC5jYWxs
KHRoaXMsIHNlbGVjdGVkQnlVc2VyKTsKLSAgICAgICAgaWYgKCF0aGlzLl92aWV3KQotICAgICAg
ICAgICAgdGhpcy5fdmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuSURCRGF0YVZpZXcodGhpcy5fbW9k
ZWwsIHRoaXMuX2RhdGFiYXNlSWQsIHRoaXMuX29iamVjdFN0b3JlLCBudWxsKTsKLQotICAgICAg
ICB0aGlzLl9zdG9yYWdlUGFuZWwuc2hvd0luZGV4ZWREQih0aGlzLl92aWV3KTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGluZGV4TmFtZQotICAgICAqLwotICAg
IF9pbmRleFJlbW92ZWQ6IGZ1bmN0aW9uKGluZGV4TmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBp
bmRleFRyZWVFbGVtZW50ID0gdGhpcy5faWRiSW5kZXhUcmVlRWxlbWVudHNbaW5kZXhOYW1lXTsK
LSAgICAgICAgaW5kZXhUcmVlRWxlbWVudC5jbGVhcigpOwotICAgICAgICB0aGlzLnJlbW92ZUNo
aWxkKGluZGV4VHJlZUVsZW1lbnQpOwotICAgICAgICBkZWxldGUgdGhpcy5faWRiSW5kZXhUcmVl
RWxlbWVudHNbaW5kZXhOYW1lXTsKLSAgICB9LAotCi0gICAgY2xlYXI6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGZvciAodmFyIGluZGV4TmFtZSBpbiB0aGlzLl9pZGJJbmRleFRyZWVFbGVt
ZW50cykKLSAgICAgICAgICAgIHRoaXMuX2luZGV4UmVtb3ZlZChpbmRleE5hbWUpOwotICAgICAg
ICBpZiAodGhpcy5fdmlldykKLSAgICAgICAgICAgIHRoaXMuX3ZpZXcuY2xlYXIoKTsKLSAgICB9
LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5w
cm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNw
ZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJl
c291cmNlc1BhbmVsfSBzdG9yYWdlUGFuZWwKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkluZGV4
ZWREQk1vZGVsfSBtb2RlbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwu
RGF0YWJhc2VJZH0gZGF0YWJhc2VJZAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERC
TW9kZWwuT2JqZWN0U3RvcmV9IG9iamVjdFN0b3JlCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5J
bmRleGVkREJNb2RlbC5JbmRleH0gaW5kZXgKLSAqLwotV2ViSW5zcGVjdG9yLklEQkluZGV4VHJl
ZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwsIG1vZGVsLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZSwgaW5kZXgpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1l
bnQuY2FsbCh0aGlzLCBzdG9yYWdlUGFuZWwsIG51bGwsIGluZGV4Lm5hbWUsIFsiaW5kZXhlZC1k
Yi1pbmRleC1zdG9yYWdlLXRyZWUtaXRlbSJdKTsKLSAgICB0aGlzLl9tb2RlbCA9IG1vZGVsOwot
ICAgIHRoaXMuX2RhdGFiYXNlSWQgPSBkYXRhYmFzZUlkOwotICAgIHRoaXMuX29iamVjdFN0b3Jl
ID0gb2JqZWN0U3RvcmU7Ci0gICAgdGhpcy5faW5kZXggPSBpbmRleDsKLX0KLQotV2ViSW5zcGVj
dG9yLklEQkluZGV4VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIGdldCBpdGVtVVJMKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiAiaW5kZXhlZERCOi8vIiArIHRoaXMuX2RhdGFiYXNlSWQu
c2VjdXJpdHlPcmlnaW4gKyAiLyIgKyB0aGlzLl9kYXRhYmFzZUlkLm5hbWUgKyAiLyIgKyB0aGlz
Ll9vYmplY3RTdG9yZS5uYW1lICsgIi8iICsgdGhpcy5faW5kZXgubmFtZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuSW5kZXh9
IGluZGV4Ci0gICAgICovCi0gICAgdXBkYXRlOiBmdW5jdGlvbihpbmRleCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3ZpZXcpCi0gICAg
ICAgICAgICB0aGlzLl92aWV3LnVwZGF0ZSh0aGlzLl9pbmRleCk7Ci0KLSAgICAgICAgdGhpcy5f
dXBkYXRlVG9vbHRpcCgpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlVG9vbHRpcDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIHRvb2x0aXBMaW5lcyA9IFtdOwotICAgICAgICB2YXIga2V5
UGF0aFN0cmluZyA9IHRoaXMuX2luZGV4LmtleVBhdGhTdHJpbmc7Ci0gICAgICAgIHRvb2x0aXBM
aW5lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiS2V5IHBhdGg6ICIpICsga2V5UGF0aFN0
cmluZyk7Ci0gICAgICAgIGlmICh0aGlzLl9pbmRleC51bmlxdWUpCi0gICAgICAgICAgICB0b29s
dGlwTGluZXMucHVzaChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoInVuaXF1ZSIpKTsKLSAgICAgICAg
aWYgKHRoaXMuX2luZGV4Lm11bHRpRW50cnkpCi0gICAgICAgICAgICB0b29sdGlwTGluZXMucHVz
aChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIm11bHRpRW50cnkiKSk7Ci0gICAgICAgIHRoaXMudG9v
bHRpcCA9IHRvb2x0aXBMaW5lcy5qb2luKCJcbiIpOwotICAgIH0sCi0KLSAgICBvbnNlbGVjdDog
ZnVuY3Rpb24oc2VsZWN0ZWRCeVVzZXIpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuQmFz
ZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUub25zZWxlY3QuY2FsbCh0aGlzLCBzZWxlY3Rl
ZEJ5VXNlcik7Ci0gICAgICAgIGlmICghdGhpcy5fdmlldykKLSAgICAgICAgICAgIHRoaXMuX3Zp
ZXcgPSBuZXcgV2ViSW5zcGVjdG9yLklEQkRhdGFWaWV3KHRoaXMuX21vZGVsLCB0aGlzLl9kYXRh
YmFzZUlkLCB0aGlzLl9vYmplY3RTdG9yZSwgdGhpcy5faW5kZXgpOwotCi0gICAgICAgIHRoaXMu
X3N0b3JhZ2VQYW5lbC5zaG93SW5kZXhlZERCKHRoaXMuX3ZpZXcpOwotICAgIH0sCi0KLSAgICBj
bGVhcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3ZpZXcpCi0gICAgICAg
ICAgICB0aGlzLl92aWV3LmNsZWFyKCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1l
bnR9Ci0gKi8KLVdlYkluc3BlY3Rvci5ET01TdG9yYWdlVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihz
dG9yYWdlUGFuZWwsIGRvbVN0b3JhZ2UsIGNsYXNzTmFtZSkKLXsKLSAgICBXZWJJbnNwZWN0b3Iu
QmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHN0b3JhZ2VQYW5lbCwgbnVsbCwgZG9t
U3RvcmFnZS5zZWN1cml0eU9yaWdpbiA/IGRvbVN0b3JhZ2Uuc2VjdXJpdHlPcmlnaW4gOiBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkxvY2FsIEZpbGVzIiksIFsiZG9tc3RvcmFnZS1zdG9yYWdlLXRy
ZWUtaXRlbSIsIGNsYXNzTmFtZV0pOwotICAgIHRoaXMuX2RvbVN0b3JhZ2UgPSBkb21TdG9yYWdl
OwotfQotCi1XZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
LSAgICBnZXQgaXRlbVVSTCgpCi0gICAgewotICAgICAgICByZXR1cm4gInN0b3JhZ2U6Ly8iICsg
dGhpcy5fZG9tU3RvcmFnZS5zZWN1cml0eU9yaWdpbiArICIvIiArICh0aGlzLl9kb21TdG9yYWdl
LmlzTG9jYWxTdG9yYWdlID8gImxvY2FsIiA6ICJzZXNzaW9uIik7Ci0gICAgfSwKLQotICAgIG9u
c2VsZWN0OiBmdW5jdGlvbihzZWxlY3RlZEJ5VXNlcikKLSAgICB7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdC5jYWxsKHRoaXMs
IHNlbGVjdGVkQnlVc2VyKTsKLSAgICAgICAgdGhpcy5fc3RvcmFnZVBhbmVsLl9zaG93RE9NU3Rv
cmFnZSh0aGlzLl9kb21TdG9yYWdlKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNw
ZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVu
dH0KLSAqLwotV2ViSW5zcGVjdG9yLkNvb2tpZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc3RvcmFn
ZVBhbmVsLCBjb29raWVEb21haW4pCi17Ci0gICAgV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJl
ZUVsZW1lbnQuY2FsbCh0aGlzLCBzdG9yYWdlUGFuZWwsIG51bGwsIGNvb2tpZURvbWFpbiA/IGNv
b2tpZURvbWFpbiA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9jYWwgRmlsZXMiKSwgWyJjb29r
aWUtc3RvcmFnZS10cmVlLWl0ZW0iXSk7Ci0gICAgdGhpcy5fY29va2llRG9tYWluID0gY29va2ll
RG9tYWluOwotfQotCi1XZWJJbnNwZWN0b3IuQ29va2llVHJlZUVsZW1lbnQucHJvdG90eXBlID0g
ewotICAgIGdldCBpdGVtVVJMKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiY29va2llczovLyIg
KyB0aGlzLl9jb29raWVEb21haW47Ci0gICAgfSwKLQotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90
b3R5cGUub25hdHRhY2guY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVDb250ZXh0TWVudUV2
ZW50LmJpbmQodGhpcyksIHRydWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9oYW5kbGVDb250ZXh0TWVudUV2ZW50OiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVt
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xlYXIiKSwgdGhpcy5fY2xlYXJDb29raWVzLmJpbmQo
dGhpcykpOwotICAgICAgICBjb250ZXh0TWVudS5zaG93KCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW4KLSAgICAgKi8KLSAgICBfY2xlYXJDb29raWVz
OiBmdW5jdGlvbihkb21haW4pCi0gICAgewotICAgICAgICB0aGlzLl9zdG9yYWdlUGFuZWwuY2xl
YXJDb29raWVzKHRoaXMuX2Nvb2tpZURvbWFpbik7Ci0gICAgfSwKLQotICAgIG9uc2VsZWN0OiBm
dW5jdGlvbihzZWxlY3RlZEJ5VXNlcikKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5CYXNl
U3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdC5jYWxsKHRoaXMsIHNlbGVjdGVk
QnlVc2VyKTsKLSAgICAgICAgdGhpcy5fc3RvcmFnZVBhbmVsLnNob3dDb29raWVzKHRoaXMsIHRo
aXMuX2Nvb2tpZURvbWFpbik7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
LkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnR9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RUcmVlRWxlbWVudCA9IGZ1
bmN0aW9uKHN0b3JhZ2VQYW5lbCwgbWFuaWZlc3RVUkwpCi17Ci0gICAgdmFyIHRpdGxlID0gbmV3
IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwobWFuaWZlc3RVUkwpLmRpc3BsYXlOYW1lOwotICAgIFdl
Ykluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LmNhbGwodGhpcywgc3RvcmFnZVBhbmVs
LCBudWxsLCB0aXRsZSwgWyJhcHBsaWNhdGlvbi1jYWNoZS1zdG9yYWdlLXRyZWUtaXRlbSJdKTsK
LSAgICB0aGlzLnRvb2x0aXAgPSBtYW5pZmVzdFVSTDsKLSAgICB0aGlzLl9tYW5pZmVzdFVSTCA9
IG1hbmlmZXN0VVJMOwotfQotCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0
VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIGdldCBpdGVtVVJMKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAiYXBwY2FjaGU6Ly8iICsgdGhpcy5fbWFuaWZlc3RVUkw7Ci0gICAgfSwKLQot
ICAgIGdldCBtYW5pZmVzdFVSTCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWFuaWZl
c3RVUkw7Ci0gICAgfSwKLQotICAgIG9uc2VsZWN0OiBmdW5jdGlvbihzZWxlY3RlZEJ5VXNlcikK
LSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LnByb3Rv
dHlwZS5vbnNlbGVjdC5jYWxsKHRoaXMsIHNlbGVjdGVkQnlVc2VyKTsKLSAgICAgICAgdGhpcy5f
c3RvcmFnZVBhbmVsLnNob3dDYXRlZ29yeVZpZXcodGhpcy5fbWFuaWZlc3RVUkwpOwotICAgIH0s
Ci0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LnBy
b3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3Bl
Y3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50fQotICovCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRp
b25DYWNoZUZyYW1lVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwsIGZyYW1lSWQs
IG1hbmlmZXN0VVJMKQotewotICAgIFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50
LmNhbGwodGhpcywgc3RvcmFnZVBhbmVsLCBudWxsLCAiIiwgWyJmcmFtZS1zdG9yYWdlLXRyZWUt
aXRlbSJdKTsKLSAgICB0aGlzLl9mcmFtZUlkID0gZnJhbWVJZDsKLSAgICB0aGlzLl9tYW5pZmVz
dFVSTCA9IG1hbmlmZXN0VVJMOwotICAgIHRoaXMuX3JlZnJlc2hUaXRsZXMoKTsKLX0KLQotV2Vi
SW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVGcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
LSAgICBnZXQgaXRlbVVSTCgpCi0gICAgewotICAgICAgICByZXR1cm4gImFwcGNhY2hlOi8vIiAr
IHRoaXMuX21hbmlmZXN0VVJMICsgIi8iICsgZW5jb2RlVVJJKHRoaXMuZGlzcGxheU5hbWUpOwot
ICAgIH0sCi0KLSAgICBnZXQgZnJhbWVJZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
ZnJhbWVJZDsKLSAgICB9LAotCi0gICAgZ2V0IG1hbmlmZXN0VVJMKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9tYW5pZmVzdFVSTDsKLSAgICB9LAotCi0gICAgX3JlZnJlc2hUaXRsZXM6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBmcmFtZSA9IFdlYkluc3BlY3Rvci5yZXNv
dXJjZVRyZWVNb2RlbC5mcmFtZUZvcklkKHRoaXMuX2ZyYW1lSWQpOwotICAgICAgICBpZiAoIWZy
YW1lKSB7Ci0gICAgICAgICAgICB0aGlzLnN1YnRpdGxlVGV4dCA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygibmV3IGZyYW1lIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy50aXRsZVRleHQgPSBmcmFtZS5uYW1lOwotICAgICAgICB0aGlzLnN1YnRpdGxlVGV4
dCA9IG5ldyBXZWJJbnNwZWN0b3IuUGFyc2VkVVJMKGZyYW1lLnVybCkuZGlzcGxheU5hbWU7Ci0g
ICAgfSwKLQotICAgIGZyYW1lTmF2aWdhdGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLl9yZWZyZXNoVGl0bGVzKCk7Ci0gICAgfSwKLQotICAgIG9uc2VsZWN0OiBmdW5jdGlvbihz
ZWxlY3RlZEJ5VXNlcikKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRy
ZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdC5jYWxsKHRoaXMsIHNlbGVjdGVkQnlVc2VyKTsK
LSAgICAgICAgdGhpcy5fc3RvcmFnZVBhbmVsLnNob3dBcHBsaWNhdGlvbkNhY2hlKHRoaXMuX2Zy
YW1lSWQpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5CYXNlU3RvcmFn
ZVRyZWVFbGVtZW50LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50fQotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWx9IHN0b3JhZ2VQYW5lbAotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuRmlsZVN5c3RlbU1vZGVsLkZpbGVTeXN0ZW19IGZpbGVTeXN0ZW0KLSAqLwotV2Vi
SW5zcGVjdG9yLkZpbGVTeXN0ZW1UcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHN0b3JhZ2VQYW5lbCwg
ZmlsZVN5c3RlbSkKLXsKLSAgICB2YXIgZGlzcGxheU5hbWUgPSBmaWxlU3lzdGVtLnR5cGUgKyAi
IC0gIiArIGZpbGVTeXN0ZW0ub3JpZ2luOwotICAgIFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRy
ZWVFbGVtZW50LmNhbGwodGhpcywgc3RvcmFnZVBhbmVsLCBudWxsLCBkaXNwbGF5TmFtZSwgWyJm
aWxlLXN5c3RlbS1zdG9yYWdlLXRyZWUtaXRlbSJdKTsKLSAgICB0aGlzLl9maWxlU3lzdGVtID0g
ZmlsZVN5c3RlbTsKLX0KLQotV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1UcmVlRWxlbWVudC5wcm90
b3R5cGUgPSB7Ci0gICAgZ2V0IGZpbGVTeXN0ZW1OYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9maWxlU3lzdGVtLm5hbWU7Ci0gICAgfSwKLQotICAgIGdldCBpdGVtVVJMKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAiZmlsZXN5c3RlbTovLyIgKyB0aGlzLl9maWxlU3lzdGVtLm5h
bWU7Ci0gICAgfSwKLQotICAgIG9uc2VsZWN0OiBmdW5jdGlvbihzZWxlY3RlZEJ5VXNlcikKLSAg
ICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50LnByb3RvdHlw
ZS5vbnNlbGVjdC5jYWxsKHRoaXMsIHNlbGVjdGVkQnlVc2VyKTsKLSAgICAgICAgdGhpcy5fZmls
ZVN5c3RlbVZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1WaWV3KHRoaXMuX2ZpbGVT
eXN0ZW0pOwotICAgICAgICB0aGlzLl9zdG9yYWdlUGFuZWwuc2hvd0ZpbGVTeXN0ZW0odGhpcy5f
ZmlsZVN5c3RlbVZpZXcpOwotICAgIH0sCi0KLSAgICBjbGVhcjogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuZmlsZVN5c3RlbVZpZXcgJiYgdGhpcy5fc3RvcmFnZVBhbmVsLnZp
c2libGVWaWV3ID09PSB0aGlzLmZpbGVTeXN0ZW1WaWV3KQotICAgICAgICAgICAgdGhpcy5fc3Rv
cmFnZVBhbmVsLmNsb3NlVmlzaWJsZVZpZXcoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBX
ZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqLwotV2Vi
SW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVZpZXcgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5z
cGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJzdG9yYWdlLXZpZXciKTsKLSAgICB0aGlzLl9lbXB0eVZpZXcgPSBuZXcgV2ViSW5zcGVjdG9y
LkVtcHR5VmlldygiIik7Ci0gICAgdGhpcy5fZW1wdHlWaWV3LnNob3codGhpcy5lbGVtZW50KTsK
LX0KLQotV2ViSW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVZpZXcucHJvdG90eXBlID0gewotICAg
IHNldFRleHQ6IGZ1bmN0aW9uKHRleHQpCi0gICAgewotICAgICAgICB0aGlzLl9lbXB0eVZpZXcu
dGV4dCA9IHRleHQ7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcu
cHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50fSByb290RWxlbWVudAotICogQHBhcmFtIHtudW1i
ZXJ9IG1hdGNoZXNDb3VudAotICovCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJv
bGxlciA9IGZ1bmN0aW9uKHJvb3RFbGVtZW50LCBtYXRjaGVzQ291bnQpCi17Ci0gICAgdGhpcy5f
cm9vdCA9IHJvb3RFbGVtZW50OwotICAgIHRoaXMuX21hdGNoZXNDb3VudCA9IG1hdGNoZXNDb3Vu
dDsKLSAgICB0aGlzLl90cmF2ZXJzZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNU
cmVlRWxlbWVudHNUcmF2ZXJzZXIocm9vdEVsZW1lbnQpOwotICAgIHRoaXMuX2xhc3RUcmVlRWxl
bWVudCA9IG51bGw7Ci0gICAgdGhpcy5fbGFzdEluZGV4ID0gLTE7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50fSBjdXJyZW50VHJl
ZUVsZW1lbnQKLSAgICAgKi8KLSAgICBuZXh0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbihjdXJyZW50
VHJlZUVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiAoIWN1cnJlbnRUcmVlRWxlbWVudCkKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodGhpcy5fdHJhdmVyc2VyLmZpcnN0
KCksIDAsIDEpOwotCi0gICAgICAgIGlmICghY3VycmVudFRyZWVFbGVtZW50LnNlYXJjaE1hdGNo
ZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodGhpcy5fdHJh
dmVyc2VyLm5leHQoY3VycmVudFRyZWVFbGVtZW50KSwgMCk7Ci0KLSAgICAgICAgaWYgKHRoaXMu
X2xhc3RUcmVlRWxlbWVudCAhPT0gY3VycmVudFRyZWVFbGVtZW50IHx8IHRoaXMuX2xhc3RJbmRl
eCA9PT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KGN1cnJlbnRU
cmVlRWxlbWVudCwgMCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2xhc3RJbmRleCA9PT0gY3VycmVu
dFRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudCAtIDEpCi0gICAgICAgICAgICByZXR1cm4g
dGhpcy5fc2VhcmNoUmVzdWx0KHRoaXMuX3RyYXZlcnNlci5uZXh0KGN1cnJlbnRUcmVlRWxlbWVu
dCksIDAsIHRoaXMuX2N1cnJlbnRNYXRjaEluZGV4ICUgdGhpcy5fbWF0Y2hlc0NvdW50ICsgMSk7
Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQs
IHRoaXMuX2xhc3RJbmRleCArIDEsIHRoaXMuX2N1cnJlbnRNYXRjaEluZGV4ICsgMSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJl
ZUVsZW1lbnR9IGN1cnJlbnRUcmVlRWxlbWVudAotICAgICAqLwotICAgIHByZXZpb3VzU2VhcmNo
UmVzdWx0OiBmdW5jdGlvbihjdXJyZW50VHJlZUVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiAo
IWN1cnJlbnRUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhp
cy5fdHJhdmVyc2VyLmxhc3QoKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1
bHQodHJlZUVsZW1lbnQsIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudCAtIDEsIHRoaXMu
X21hdGNoZXNDb3VudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3VycmVudFRyZWVFbGVt
ZW50LnNlYXJjaE1hdGNoZXNDb3VudCAmJiB0aGlzLl9sYXN0VHJlZUVsZW1lbnQgPT09IGN1cnJl
bnRUcmVlRWxlbWVudCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RJbmRleCA+IDApCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1l
bnQsIHRoaXMuX2xhc3RJbmRleCAtIDEsIHRoaXMuX2N1cnJlbnRNYXRjaEluZGV4IC0gMSk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlz
Ll90cmF2ZXJzZXIucHJldmlvdXMoY3VycmVudFRyZWVFbGVtZW50KTsKLSAgICAgICAgICAgICAg
ICB2YXIgY3VycmVudE1hdGNoSW5kZXggPSB0aGlzLl9jdXJyZW50TWF0Y2hJbmRleCAtIDEgPyB0
aGlzLl9jdXJyZW50TWF0Y2hJbmRleCAtIDEgOiB0aGlzLl9tYXRjaGVzQ291bnQ7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0cmVlRWxlbWVudCwgdHJlZUVsZW1l
bnQuc2VhcmNoTWF0Y2hlc0NvdW50IC0gMSwgY3VycmVudE1hdGNoSW5kZXgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVy
c2VyLnByZXZpb3VzKGN1cnJlbnRUcmVlRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Nl
YXJjaFJlc3VsdCh0cmVlRWxlbWVudCwgdHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlc0NvdW50IC0g
MSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJhc2VT
dG9yYWdlVHJlZUVsZW1lbnR9IHRyZWVFbGVtZW50Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGlu
ZGV4Ci0gICAgICogQHBhcmFtIHtudW1iZXI9fSBjdXJyZW50TWF0Y2hJbmRleAotICAgICAqIEBy
ZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBfc2VhcmNoUmVzdWx0OiBmdW5jdGlvbih0cmVl
RWxlbWVudCwgaW5kZXgsIGN1cnJlbnRNYXRjaEluZGV4KQotICAgIHsKLSAgICAgICAgdGhpcy5f
bGFzdFRyZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQ7Ci0gICAgICAgIHRoaXMuX2xhc3RJbmRleCA9
IGluZGV4OwotICAgICAgICBpZiAoIWN1cnJlbnRNYXRjaEluZGV4KQotICAgICAgICAgICAgY3Vy
cmVudE1hdGNoSW5kZXggPSB0aGlzLl90cmF2ZXJzZXIubWF0Y2hJbmRleCh0cmVlRWxlbWVudCwg
aW5kZXgpOwotICAgICAgICB0aGlzLl9jdXJyZW50TWF0Y2hJbmRleCA9IGN1cnJlbnRNYXRjaElu
ZGV4OwotICAgICAgICByZXR1cm4ge3RyZWVFbGVtZW50OiB0cmVlRWxlbWVudCwgaW5kZXg6IGlu
ZGV4LCBjdXJyZW50TWF0Y2hJbmRleDogY3VycmVudE1hdGNoSW5kZXh9OwotICAgIH0KLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdl
VHJlZUVsZW1lbnR9IHJvb3RFbGVtZW50Ci0gKi8KLVdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRz
VHJlZUVsZW1lbnRzVHJhdmVyc2VyID0gZnVuY3Rpb24ocm9vdEVsZW1lbnQpCi17Ci0gICAgdGhp
cy5fcm9vdCA9IHJvb3RFbGVtZW50OwotfQotCi1XZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1Ry
ZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnR9Ci0gICAgICovCi0gICAgZmly
c3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5fcm9v
dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5CYXNl
U3RvcmFnZVRyZWVFbGVtZW50fQotICAgICAqLwotICAgIGxhc3Q6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzKHRoaXMuX3Jvb3QpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CYXNlU3RvcmFnZVRyZWVFbGVtZW50
fSBzdGFydFRyZWVFbGVtZW50Ci0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkJhc2VTdG9y
YWdlVHJlZUVsZW1lbnR9Ci0gICAgICovCi0gICAgbmV4dDogZnVuY3Rpb24oc3RhcnRUcmVlRWxl
bWVudCkKLSAgICB7Ci0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHN0YXJ0VHJlZUVsZW1lbnQ7
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVyc2VO
ZXh0KHRyZWVFbGVtZW50KSB8fCB0aGlzLl9yb290OwotICAgICAgICB9IHdoaWxlICh0cmVlRWxl
bWVudCAhPSBzdGFydFRyZWVFbGVtZW50ICYmICF0aGlzLl9lbGVtZW50U2VhcmNoTWF0Y2hlc0Nv
dW50KHRyZWVFbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiB0cmVlRWxlbWVudDsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxl
bWVudH0gc3RhcnRUcmVlRWxlbWVudAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5CYXNl
U3RvcmFnZVRyZWVFbGVtZW50fQotICAgICAqLwotICAgIHByZXZpb3VzOiBmdW5jdGlvbihzdGFy
dFRyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc3RhcnRUcmVl
RWxlbWVudDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLl90
cmF2ZXJzZVByZXZpb3VzKHRyZWVFbGVtZW50KSB8fCB0aGlzLl9sYXN0VHJlZUVsZW1lbnQoKTsK
LSAgICAgICAgfSB3aGlsZSAodHJlZUVsZW1lbnQgIT0gc3RhcnRUcmVlRWxlbWVudCAmJiAhdGhp
cy5fZWxlbWVudFNlYXJjaE1hdGNoZXNDb3VudCh0cmVlRWxlbWVudCkpOwotICAgICAgICByZXR1
cm4gdHJlZUVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnR9IHN0YXJ0VHJlZUVsZW1lbnQKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0g
ICAgbWF0Y2hJbmRleDogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCwgaW5kZXgpCi0gICAgewot
ICAgICAgICB2YXIgbWF0Y2hJbmRleCA9IDE7Ci0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRo
aXMuX3Jvb3Q7Ci0gICAgICAgIHdoaWxlICh0cmVlRWxlbWVudCAhPSBzdGFydFRyZWVFbGVtZW50
KSB7Ci0gICAgICAgICAgICBtYXRjaEluZGV4ICs9IHRoaXMuX2VsZW1lbnRTZWFyY2hNYXRjaGVz
Q291bnQodHJlZUVsZW1lbnQpOwotICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2
ZXJzZU5leHQodHJlZUVsZW1lbnQpIHx8IHRoaXMuX3Jvb3Q7Ci0gICAgICAgICAgICBpZiAodHJl
ZUVsZW1lbnQgPT09IHRoaXMuX3Jvb3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXggKyBpbmRleDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0g
dHJlZUVsZW1lbnQKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgX2VsZW1l
bnRTZWFyY2hNYXRjaGVzQ291bnQ6IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0g
dHJlZUVsZW1lbnQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVl
RWxlbWVudH0KLSAgICAgKi8KLSAgICBfdHJhdmVyc2VOZXh0OiBmdW5jdGlvbih0cmVlRWxlbWVu
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5CYXNlU3Rv
cmFnZVRyZWVFbGVtZW50fSAqLyAodHJlZUVsZW1lbnQudHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQo
ZmFsc2UsIHRoaXMuX3Jvb3QsIHRydWUpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0gdHJlZUVsZW1lbnQKLSAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0KLSAgICAg
Ki8KLSAgICBfdHJhdmVyc2VQcmV2aW91czogZnVuY3Rpb24odHJlZUVsZW1lbnQpCi0gICAgewot
ICAgICAgICByZXR1cm4gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxl
bWVudH0gKi8gKHRyZWVFbGVtZW50LnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudChmYWxzZSwg
dHJ1ZSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
QmFzZVN0b3JhZ2VUcmVlRWxlbWVudH0KLSAgICAgKi8KLSAgICBfbGFzdFRyZWVFbGVtZW50OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl9yb290Owot
ICAgICAgICB2YXIgbmV4dFRyZWVFbGVtZW50OwotICAgICAgICB3aGlsZSAobmV4dFRyZWVFbGVt
ZW50ID0gdGhpcy5fdHJhdmVyc2VOZXh0KHRyZWVFbGVtZW50KSkKLSAgICAgICAgICAgIHRyZWVF
bGVtZW50ID0gbmV4dFRyZWVFbGVtZW50OwotICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7Ci0g
ICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9S
ZXZpc2lvbkhpc3RvcnlWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SZXZpc2lvbkhpc3RvcnlWaWV3LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MTM0ODMzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UmV2aXNpb25IaXN0b3J5Vmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDMxOCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqLwot
V2ViSW5zcGVjdG9yLlJldmlzaW9uSGlzdG9yeVZpZXcgPSBmdW5jdGlvbigpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1Mo
InJldmlzaW9uSGlzdG9yeS5jc3MiKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
cmV2aXNpb24taGlzdG9yeS1kcmF3ZXIiKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygiZmlsbCIpOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJvdXRsaW5lLWRpc2Ns
b3N1cmUiKTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGVJdGVtcyA9IG5ldyBNYXAoKTsKLQotICAg
IHZhciBvbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoIm9sIik7Ci0gICAgdGhp
cy5fdHJlZU91dGxpbmUgPSBuZXcgVHJlZU91dGxpbmUob2xFbGVtZW50KTsKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0g
ICAgICovCi0gICAgZnVuY3Rpb24gcG9wdWxhdGVSZXZpc2lvbnModWlTb3VyY2VDb2RlKQotICAg
IHsKLSAgICAgICAgaWYgKHVpU291cmNlQ29kZS5oaXN0b3J5Lmxlbmd0aCkKLSAgICAgICAgICAg
IHRoaXMuX2NyZWF0ZVVJU291cmNlQ29kZUl0ZW0odWlTb3VyY2VDb2RlKTsKLSAgICB9Ci0KLSAg
ICBXZWJJbnNwZWN0b3Iud29ya3NwYWNlLnVpU291cmNlQ29kZXMoKS5mb3JFYWNoKHBvcHVsYXRl
UmV2aXNpb25zLmJpbmQodGhpcykpOwotICAgIFdlYkluc3BlY3Rvci53b3Jrc3BhY2UuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuV29ya3NwYWNlLkV2ZW50cy5VSVNvdXJjZUNvZGVDb250
ZW50Q29tbWl0dGVkLCB0aGlzLl9yZXZpc2lvbkFkZGVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0
b3Iud29ya3NwYWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZVBy
b3ZpZGVyLkV2ZW50cy5VSVNvdXJjZUNvZGVSZW1vdmVkLCB0aGlzLl91aVNvdXJjZUNvZGVSZW1v
dmVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3Iud29ya3NwYWNlLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLldvcmtzcGFjZS5FdmVudHMuUHJvamVjdFdpbGxSZXNldCwgdGhpcy5fcHJv
amVjdFdpbGxSZXNldCwgdGhpcyk7Ci0KLSAgICB0aGlzLl9zdGF0dXNFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIHRoaXMuX3N0YXR1c0VsZW1lbnQudGV4dENv
bnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvY2FsIG1vZGlmaWNhdGlvbnMiKTsKLQot
fQotCi0vKioKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VD
b2RlCi0gKi8KLVdlYkluc3BlY3Rvci5SZXZpc2lvbkhpc3RvcnlWaWV3LnNob3dIaXN0b3J5ID0g
ZnVuY3Rpb24odWlTb3VyY2VDb2RlKQotewotICAgIGlmICghV2ViSW5zcGVjdG9yLlJldmlzaW9u
SGlzdG9yeVZpZXcuX3ZpZXcpIAotICAgICAgICBXZWJJbnNwZWN0b3IuUmV2aXNpb25IaXN0b3J5
Vmlldy5fdmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuUmV2aXNpb25IaXN0b3J5VmlldygpOwotICAg
IHZhciB2aWV3ID0gV2ViSW5zcGVjdG9yLlJldmlzaW9uSGlzdG9yeVZpZXcuX3ZpZXc7Ci0gICAg
V2ViSW5zcGVjdG9yLnNob3dWaWV3SW5EcmF3ZXIodmlldy5fc3RhdHVzRWxlbWVudCwgdmlldyk7
Ci0gICAgdmlldy5fcmV2ZWFsVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSk7Ci19Ci0KLVdlYklu
c3BlY3Rvci5SZXZpc2lvbkhpc3RvcnlWaWV3LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAq
LwotICAgIF9jcmVhdGVVSVNvdXJjZUNvZGVJdGVtOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0g
ICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlSXRlbSA9IG5ldyBUcmVlRWxlbWVudCh1aVNv
dXJjZUNvZGUuZGlzcGxheU5hbWUoKSwgbnVsbCwgdHJ1ZSk7Ci0gICAgICAgIHVpU291cmNlQ29k
ZUl0ZW0uc2VsZWN0YWJsZSA9IGZhbHNlOwotCi0gICAgICAgIC8vIEluc2VydCBpbiBzb3J0ZWQg
b3JkZXIKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90cmVlT3V0bGluZS5jaGls
ZHJlbi5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3RyZWVPdXRsaW5lLmNo
aWxkcmVuW2ldLnRpdGxlLmxvY2FsZUNvbXBhcmUodWlTb3VyY2VDb2RlLmRpc3BsYXlOYW1lKCkp
ID4gMCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3RyZWVPdXRsaW5lLmluc2VydENoaWxkKHVp
U291cmNlQ29kZUl0ZW0sIGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmIChpID09PSB0aGlzLl90cmVlT3V0bGluZS5jaGlsZHJl
bi5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLl90cmVlT3V0bGluZS5hcHBlbmRDaGlsZCh1aVNv
dXJjZUNvZGVJdGVtKTsKLQotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVJdGVtcy5wdXQodWlT
b3VyY2VDb2RlLCB1aVNvdXJjZUNvZGVJdGVtKTsKLQotICAgICAgICB2YXIgcmV2aXNpb25Db3Vu
dCA9IHVpU291cmNlQ29kZS5oaXN0b3J5Lmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHJl
dmlzaW9uQ291bnQgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgdmFyIHJldmlzaW9u
ID0gdWlTb3VyY2VDb2RlLmhpc3RvcnlbaV07Ci0gICAgICAgICAgICB2YXIgaGlzdG9yeUl0ZW0g
PSBuZXcgV2ViSW5zcGVjdG9yLlJldmlzaW9uSGlzdG9yeVRyZWVFbGVtZW50KHJldmlzaW9uLCB1
aVNvdXJjZUNvZGUuaGlzdG9yeVtpIC0gMV0sIGkgIT09IHJldmlzaW9uQ291bnQgLSAxKTsKLSAg
ICAgICAgICAgIHVpU291cmNlQ29kZUl0ZW0uYXBwZW5kQ2hpbGQoaGlzdG9yeUl0ZW0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIGxpbmtJdGVtID0gbmV3IFRyZWVFbGVtZW50KCIiLCBudWxs
LCBmYWxzZSk7Ci0gICAgICAgIGxpbmtJdGVtLnNlbGVjdGFibGUgPSBmYWxzZTsKLSAgICAgICAg
dWlTb3VyY2VDb2RlSXRlbS5hcHBlbmRDaGlsZChsaW5rSXRlbSk7Ci0KLSAgICAgICAgdmFyIHJl
dmVydFRvT3JpZ2luYWwgPSBsaW5rSXRlbS5saXN0SXRlbUVsZW1lbnQuY3JlYXRlQ2hpbGQoInNw
YW4iLCAicmV2aXNpb24taGlzdG9yeS1saW5rIHJldmlzaW9uLWhpc3RvcnktbGluay1yb3ciKTsK
LSAgICAgICAgcmV2ZXJ0VG9PcmlnaW5hbC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiYXBwbHkgb3JpZ2luYWwgY29udGVudCIpOwotICAgICAgICByZXZlcnRUb09yaWdpbmFs
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdWlTb3VyY2VDb2RlLnJldmVydFRvT3JpZ2luYWwu
YmluZCh1aVNvdXJjZUNvZGUpKTsKLQotICAgICAgICB2YXIgY2xlYXJIaXN0b3J5RWxlbWVudCA9
IHVpU291cmNlQ29kZUl0ZW0ubGlzdEl0ZW1FbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgInJl
dmlzaW9uLWhpc3RvcnktbGluayIpOwotICAgICAgICBjbGVhckhpc3RvcnlFbGVtZW50LnRleHRD
b250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJyZXZlcnQiKTsKLSAgICAgICAgY2xlYXJI
aXN0b3J5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsZWFySGlzdG9y
eS5iaW5kKHRoaXMsIHVpU291cmNlQ29kZSkpOwotICAgICAgICByZXR1cm4gdWlTb3VyY2VDb2Rl
SXRlbTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBfY2xlYXJIaXN0b3J5OiBmdW5j
dGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB1aVNvdXJjZUNvZGUucmV2ZXJ0QW5k
Q2xlYXJIaXN0b3J5KHRoaXMuX3JlbW92ZVVJU291cmNlQ29kZS5iaW5kKHRoaXMpKTsKLSAgICB9
LAotCi0gICAgX3JldmlzaW9uQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dmFyIHVpU291cmNlQ29kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0g
Ki8gKGV2ZW50LmRhdGEudWlTb3VyY2VDb2RlKTsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZUl0
ZW0gPSB0aGlzLl91aVNvdXJjZUNvZGVJdGVtcy5nZXQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAg
aWYgKCF1aVNvdXJjZUNvZGVJdGVtKSB7Ci0gICAgICAgICAgICB1aVNvdXJjZUNvZGVJdGVtID0g
dGhpcy5fY3JlYXRlVUlTb3VyY2VDb2RlSXRlbSh1aVNvdXJjZUNvZGUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGhpc3RvcnlMZW5ndGggPSB1aVNvdXJj
ZUNvZGUuaGlzdG9yeS5sZW5ndGg7Ci0gICAgICAgIHZhciBoaXN0b3J5SXRlbSA9IG5ldyBXZWJJ
bnNwZWN0b3IuUmV2aXNpb25IaXN0b3J5VHJlZUVsZW1lbnQodWlTb3VyY2VDb2RlLmhpc3Rvcnlb
aGlzdG9yeUxlbmd0aCAtIDFdLCB1aVNvdXJjZUNvZGUuaGlzdG9yeVtoaXN0b3J5TGVuZ3RoIC0g
Ml0sIGZhbHNlKTsKLSAgICAgICAgaWYgKHVpU291cmNlQ29kZUl0ZW0uY2hpbGRyZW4ubGVuZ3Ro
KQotICAgICAgICAgICAgdWlTb3VyY2VDb2RlSXRlbS5jaGlsZHJlblswXS5hbGxvd1JldmVydCgp
OwotICAgICAgICB1aVNvdXJjZUNvZGVJdGVtLmluc2VydENoaWxkKGhpc3RvcnlJdGVtLCAwKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBfcmV2ZWFsVUlTb3VyY2VDb2RlOiBmdW5j
dGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlSXRlbSA9
IHRoaXMuX3VpU291cmNlQ29kZUl0ZW1zLmdldCh1aVNvdXJjZUNvZGUpOwotICAgICAgICBpZiAo
dWlTb3VyY2VDb2RlSXRlbSkgewotICAgICAgICAgICAgdWlTb3VyY2VDb2RlSXRlbS5yZXZlYWwo
KTsKLSAgICAgICAgICAgIHVpU291cmNlQ29kZUl0ZW0uZXhwYW5kKCk7Ci0gICAgICAgIH0KLSAg
ICB9LAotCi0gICAgX3VpU291cmNlQ29kZVJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291
cmNlQ29kZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9yZW1vdmVVSVNvdXJjZUNv
ZGUodWlTb3VyY2VDb2RlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBfcmVtb3Zl
VUlTb3VyY2VDb2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlSXRlbSA9IHRoaXMuX3VpU291cmNlQ29kZUl0ZW1zLmdldCh1aVNvdXJjZUNv
ZGUpOwotICAgICAgICBpZiAoIXVpU291cmNlQ29kZUl0ZW0pCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHRoaXMuX3RyZWVPdXRsaW5lLnJlbW92ZUNoaWxkKHVpU291cmNlQ29kZUl0ZW0p
OwotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVJdGVtcy5yZW1vdmUodWlTb3VyY2VDb2RlKTsK
LSAgICB9LAotCi0gICAgX3Byb2plY3RXaWxsUmVzZXQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIHByb2plY3QgPSBldmVudC5kYXRhOwotICAgICAgICBwcm9qZWN0LnVpU291
cmNlQ29kZXMoKS5mb3JFYWNoKHRoaXMuX3JlbW92ZVVJU291cmNlQ29kZS5iaW5kKHRoaXMpKTsK
LSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVlRWxlbWVudH0KLSAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlJldmlzaW9ufSByZXZpc2lvbgotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuUmV2aXNpb259IGJhc2VSZXZpc2lvbgotICogQHBhcmFtIHtib29sZWFufSBhbGxvd1Jl
dmVydAotICovCi1XZWJJbnNwZWN0b3IuUmV2aXNpb25IaXN0b3J5VHJlZUVsZW1lbnQgPSBmdW5j
dGlvbihyZXZpc2lvbiwgYmFzZVJldmlzaW9uLCBhbGxvd1JldmVydCkKLXsKLSAgICBUcmVlRWxl
bWVudC5jYWxsKHRoaXMsIHJldmlzaW9uLnRpbWVzdGFtcC50b0xvY2FsZVRpbWVTdHJpbmcoKSwg
bnVsbCwgdHJ1ZSk7Ci0gICAgdGhpcy5zZWxlY3RhYmxlID0gZmFsc2U7Ci0KLSAgICB0aGlzLl9y
ZXZpc2lvbiA9IHJldmlzaW9uOwotICAgIHRoaXMuX2Jhc2VSZXZpc2lvbiA9IGJhc2VSZXZpc2lv
bjsKLQotICAgIHRoaXMuX3JldmVydEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgdGhpcy5fcmV2ZXJ0RWxlbWVudC5jbGFzc05hbWUgPSAicmV2aXNpb24taGlz
dG9yeS1saW5rIjsKLSAgICB0aGlzLl9yZXZlcnRFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJhcHBseSByZXZpc2lvbiBjb250ZW50Iik7Ci0gICAgdGhpcy5fcmV2
ZXJ0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3JldmlzaW9uLnJldmVy
dFRvVGhpcy5iaW5kKHRoaXMuX3JldmlzaW9uKSwgZmFsc2UpOwotICAgIGlmICghYWxsb3dSZXZl
cnQpCi0gICAgICAgIHRoaXMuX3JldmVydEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7
Ci19Ci0KLVdlYkluc3BlY3Rvci5SZXZpc2lvbkhpc3RvcnlUcmVlRWxlbWVudC5wcm90b3R5cGUg
PSB7Ci0gICAgb25hdHRhY2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMubGlzdEl0
ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoInJldmlzaW9uLWhpc3RvcnktcmV2aXNpb24iKTsKLSAg
ICB9LAotCi0gICAgb25leHBhbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMubGlz
dEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3JldmVydEVsZW1lbnQpOwotCi0gICAgICAg
IGlmICh0aGlzLl93YXNFeHBhbmRlZE9uY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHRoaXMuX3dhc0V4cGFuZGVkT25jZSA9IHRydWU7Ci0KLSAgICAgICAgdGhpcy5jaGlsZHJlbkxp
c3RFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS1jb2RlIik7Ci0gICAgICAgIGlmICh0aGlz
Ll9iYXNlUmV2aXNpb24pCi0gICAgICAgICAgICB0aGlzLl9iYXNlUmV2aXNpb24ucmVxdWVzdENv
bnRlbnQoc3RlcDEuYmluZCh0aGlzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMu
X3JldmlzaW9uLnVpU291cmNlQ29kZS5yZXF1ZXN0T3JpZ2luYWxDb250ZW50KHN0ZXAxLmJpbmQo
dGhpcykpOwotCi0gICAgICAgIGZ1bmN0aW9uIHN0ZXAxKGJhc2VDb250ZW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICB0aGlzLl9yZXZpc2lvbi5yZXF1ZXN0Q29udGVudChzdGVwMi5iaW5kKHRo
aXMsIGJhc2VDb250ZW50KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzdGVwMihi
YXNlQ29udGVudCwgbmV3Q29udGVudCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJhc2VM
aW5lcyA9IGRpZmZsaWIuc3RyaW5nQXNMaW5lcyhiYXNlQ29udGVudCk7Ci0gICAgICAgICAgICB2
YXIgbmV3TGluZXMgPSBkaWZmbGliLnN0cmluZ0FzTGluZXMobmV3Q29udGVudCk7Ci0gICAgICAg
ICAgICB2YXIgc20gPSBuZXcgZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoYmFzZUxpbmVzLCBuZXdM
aW5lcyk7Ci0gICAgICAgICAgICB2YXIgb3Bjb2RlcyA9IHNtLmdldF9vcGNvZGVzKCk7Ci0gICAg
ICAgICAgICB2YXIgbGFzdFdhc1NlcGFyYXRvciA9IGZhbHNlOwotCi0gICAgICAgICAgICBmb3Ig
KHZhciBpZHggPSAwOyBpZHggPCBvcGNvZGVzLmxlbmd0aDsgaWR4KyspIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY29kZSA9IG9wY29kZXNbaWR4XTsKLSAgICAgICAgICAgICAgICB2YXIgY2hhbmdl
ID0gY29kZVswXTsKLSAgICAgICAgICAgICAgICB2YXIgYiA9IGNvZGVbMV07Ci0gICAgICAgICAg
ICAgICAgdmFyIGJlID0gY29kZVsyXTsKLSAgICAgICAgICAgICAgICB2YXIgbiA9IGNvZGVbM107
Ci0gICAgICAgICAgICAgICAgdmFyIG5lID0gY29kZVs0XTsKLSAgICAgICAgICAgICAgICB2YXIg
cm93Q291bnQgPSBNYXRoLm1heChiZSAtIGIsIG5lIC0gbik7Ci0gICAgICAgICAgICAgICAgdmFy
IHRvcFJvd3MgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIgYm90dG9tUm93cyA9IFtdOwotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hhbmdlID09PSAiZGVsZXRlIiB8fCAoY2hhbmdlID09PSAicmVw
bGFjZSIgJiYgYiA8IGJlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSBiKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVMaW5lKGxpbmVO
dW1iZXIsIG51bGwsIGJhc2VMaW5lc1tsaW5lTnVtYmVyXSwgInJlbW92ZWQiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RXYXNTZXBhcmF0b3IgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2UgPT09ICJpbnNlcnQiIHx8
IChjaGFuZ2UgPT09ICJyZXBsYWNlIiAmJiBuIDwgbmUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgbGluZU51bWJlciA9IG4rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2NyZWF0ZUxpbmUobnVsbCwgbGluZU51bWJlciwgbmV3TGluZXNbbGluZU51bWJlcl0sICJhZGRl
ZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFdhc1NlcGFyYXRvciA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZSA9
PT0gImVxdWFsIikgewotICAgICAgICAgICAgICAgICAgICAgICAgYisrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0V2FzU2Vw
YXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUxpbmUobnVs
bCwgbnVsbCwgIiAgICBcdTIwMjYiLCAic2VwYXJhdG9yIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0V2FzU2VwYXJhdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBv
bmNvbGxhcHNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmV2ZXJ0RWxl
bWVudC5wYXJlbnRFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fcmV2ZXJ0RWxlbWVudC5wYXJl
bnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX3JldmVydEVsZW1lbnQpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0gez9udW1iZXJ9IGJhc2VMaW5lTnVtYmVyCi0gICAgICogQHBh
cmFtIHs/bnVtYmVyfSBuZXdMaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmVD
b250ZW50Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZVR5cGUKLSAgICAgKi8KLSAgICBf
Y3JlYXRlTGluZTogZnVuY3Rpb24oYmFzZUxpbmVOdW1iZXIsIG5ld0xpbmVOdW1iZXIsIGxpbmVD
b250ZW50LCBjaGFuZ2VUeXBlKQotICAgIHsKLSAgICAgICAgdmFyIGNoaWxkID0gbmV3IFRyZWVF
bGVtZW50KCIiLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgIGNoaWxkLnNlbGVjdGFibGUgPSBmYWxz
ZTsKLSAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgICAgIHZhciBsaW5lRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLQotICAgICAgICBmdW5jdGlv
biBhcHBlbmRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciBudW1iZXJTdHJpbmcgPSBsaW5lTnVtYmVyICE9PSBudWxsID8gbnVtYmVyVG9TdHJpbmdXaXRo
U3BhY2VzUGFkZGluZyhsaW5lTnVtYmVyICsgMSwgNCkgOiAiICAgICI7Ci0gICAgICAgICAgICB2
YXIgbGluZU51bWJlclNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ICAgICAgICBsaW5lTnVtYmVyU3Bhbi5hZGRTdHlsZUNsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIi
KTsKLSAgICAgICAgICAgIGxpbmVOdW1iZXJTcGFuLnRleHRDb250ZW50ID0gbnVtYmVyU3RyaW5n
OwotICAgICAgICAgICAgY2hpbGQubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGxpbmVOdW1i
ZXJTcGFuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGVuZExpbmVOdW1iZXIoYmFzZUxpbmVO
dW1iZXIpOwotICAgICAgICBhcHBlbmRMaW5lTnVtYmVyKG5ld0xpbmVOdW1iZXIpOwotCi0gICAg
ICAgIHZhciBjb250ZW50U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAg
ICAgICAgY29udGVudFNwYW4udGV4dENvbnRlbnQgPSBsaW5lQ29udGVudDsKLSAgICAgICAgY2hp
bGQubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnRTcGFuKTsKLSAgICAgICAgY2hp
bGQubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoInJldmlzaW9uLWhpc3RvcnktbGluZSIp
OwotICAgICAgICBjaGlsZC5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygicmV2aXNpb24t
aGlzdG9yeS1saW5lLSIgKyBjaGFuZ2VUeXBlKTsKLSAgICB9LAotCi0gICAgYWxsb3dSZXZlcnQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JldmVydEVsZW1lbnQucmVtb3ZlU3R5
bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogVHJlZUVsZW1lbnQu
cHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1J1bnRpbWVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UnVudGltZU1vZGVsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmQ3YzM4Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1v
ZGVsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5SZXNvdXJjZVRyZWVNb2RlbH0gcmVzb3VyY2VUcmVlTW9kZWwKLSAqLwotV2ViSW5zcGVj
dG9yLlJ1bnRpbWVNb2RlbCA9IGZ1bmN0aW9uKHJlc291cmNlVHJlZU1vZGVsKQotewotICAgIHJl
c291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJl
ZU1vZGVsLkV2ZW50VHlwZXMuRnJhbWVBZGRlZCwgdGhpcy5fZnJhbWVBZGRlZCwgdGhpcyk7Ci0g
ICAgcmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5GcmFtZU5hdmlnYXRlZCwgdGhpcy5fZnJhbWVOYXZpZ2F0
ZWQsIHRoaXMpOwotICAgIHJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuRnJhbWVEZXRhY2hlZCwgdGhpcy5f
ZnJhbWVEZXRhY2hlZCwgdGhpcyk7Ci0gICAgcmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5DYWNoZWRSZXNv
dXJjZXNMb2FkZWQsIHRoaXMuX2RpZExvYWRDYWNoZWRSZXNvdXJjZXMsIHRoaXMpOwotICAgIHRo
aXMuX2ZyYW1lSWRUb0NvbnRleHRMaXN0ID0ge307Ci19Ci0KLVdlYkluc3BlY3Rvci5SdW50aW1l
TW9kZWwuRXZlbnRzID0gewotICAgIEZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3RBZGRlZDogIkZy
YW1lRXhlY3V0aW9uQ29udGV4dExpc3RBZGRlZCIsCi0gICAgRnJhbWVFeGVjdXRpb25Db250ZXh0
TGlzdFJlbW92ZWQ6ICJGcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0UmVtb3ZlZCIsCi19Ci0KLVdl
Ykluc3BlY3Rvci5SdW50aW1lTW9kZWwucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHR9IGV4ZWN1dGlvbkNvbnRleHQKLSAg
ICAgKi8KLSAgICBzZXRDdXJyZW50RXhlY3V0aW9uQ29udGV4dDogZnVuY3Rpb24oZXhlY3V0aW9u
Q29udGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRFeGVjdXRpb25Db250ZXh0ID0g
ZXhlY3V0aW9uQ29udGV4dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2Vi
SW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHR9Ci0gICAgICovCi0gICAgY3VycmVudEV4ZWN1dGlv
bkNvbnRleHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50
RXhlY3V0aW9uQ29udGV4dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJy
YXkuPFdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0Pn0KLSAgICAgKi8KLSAg
ICBjb250ZXh0TGlzdHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmplY3Qu
dmFsdWVzKHRoaXMuX2ZyYW1lSWRUb0NvbnRleHRMaXN0KTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRnJhbWV9IGZyYW1lCi0gICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3R9Ci0gICAg
ICovCi0gICAgY29udGV4dExpc3RCeUZyYW1lOiBmdW5jdGlvbihmcmFtZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9mcmFtZUlkVG9Db250ZXh0TGlzdFtmcmFtZS5pZF07Ci0gICAgfSwK
LQotICAgIF9mcmFtZUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBm
cmFtZSA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHZhciBjb250ZXh0ID0gbmV3IFdlYkluc3BlY3Rv
ci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0KGZyYW1lKTsKLSAgICAgICAgdGhpcy5fZnJhbWVJ
ZFRvQ29udGV4dExpc3RbZnJhbWUuaWRdID0gY29udGV4dDsKLSAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5FdmVudHMuRnJhbWVF
eGVjdXRpb25Db250ZXh0TGlzdEFkZGVkLCBjb250ZXh0KTsKLSAgICB9LAotCi0gICAgX2ZyYW1l
TmF2aWdhdGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBmcmFtZSA9IGV2
ZW50LmRhdGE7Ci0gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5fZnJhbWVJZFRvQ29udGV4dExp
c3RbZnJhbWUuaWRdOwotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGNvbnRleHQu
X2ZyYW1lTmF2aWdhdGVkKGZyYW1lKTsKLSAgICB9LAotCi0gICAgX2ZyYW1lRGV0YWNoZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGZyYW1lID0gZXZlbnQuZGF0YTsKLSAg
ICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9mcmFtZUlkVG9Db250ZXh0TGlzdFtmcmFtZS5pZF07
Ci0gICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5FdmVu
dHMuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdFJlbW92ZWQsIGNvbnRleHQpOwotICAgICAgICBk
ZWxldGUgdGhpcy5fZnJhbWVJZFRvQ29udGV4dExpc3RbZnJhbWUuaWRdOwotICAgIH0sCi0KLSAg
ICBfZGlkTG9hZENhY2hlZFJlc291cmNlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3Iu
UnVudGltZURpc3BhdGNoZXIodGhpcykpOwotICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlKCk7
Ci0gICAgfSwKLQotICAgIF9leGVjdXRpb25Db250ZXh0Q3JlYXRlZDogZnVuY3Rpb24oY29udGV4
dCkKLSAgICB7Ci0gICAgICAgIHZhciBjb250ZXh0TGlzdCA9IHRoaXMuX2ZyYW1lSWRUb0NvbnRl
eHRMaXN0W2NvbnRleHQuZnJhbWVJZF07Ci0gICAgICAgIC8vIEZJWE1FKDg1NzA4KTogdGhpcyBz
aG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgIGlmICghY29udGV4dExpc3QpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNvbnRleHRMaXN0Ll9hZGRFeGVjdXRpb25Db250ZXh0KG5ldyBX
ZWJJbnNwZWN0b3IuRXhlY3V0aW9uQ29udGV4dChjb250ZXh0LmlkLCBjb250ZXh0Lm5hbWUsIGNv
bnRleHQuaXNQYWdlQ29udGV4dCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gZXhwcmVzc2lvbgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RHcm91cAot
ICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbW1hbmRMaW5lQVBJCi0gICAgICogQHBh
cmFtIHtib29sZWFufSBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkJ5VmFsdWUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59
IGdlbmVyYXRlUHJldmlldwotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5S
ZW1vdGVPYmplY3QsIGJvb2xlYW4sIFJ1bnRpbWVBZ2VudC5SZW1vdGVPYmplY3Q9KX0gY2FsbGJh
Y2sKLSAgICAgKi8KLSAgICBldmFsdWF0ZTogZnVuY3Rpb24oZXhwcmVzc2lvbiwgb2JqZWN0R3Jv
dXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIGNhbGxiYWNrKQotICAgIHsK
LSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNlbGVjdGVkQ2FsbEZyYW1l
KCkpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmV2YWx1YXRlT25T
ZWxlY3RlZENhbGxGcmFtZShleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIHJldHVybkJ5VmFs
dWUsIGdlbmVyYXRlUHJldmlldywgY2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFleHByZXNzaW9uKSB7Ci0gICAgICAgICAgICAvLyBUaGVy
ZSBpcyBubyBleHByZXNzaW9uLCBzbyB0aGUgY29tcGxldGlvbiBzaG91bGQgaGFwcGVuIGFnYWlu
c3QgZ2xvYmFsIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBleHByZXNzaW9uID0gInRoaXMiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVy
cm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge1J1bnRpbWVBZ2VudC5SZW1vdGVPYmplY3R9
IHJlc3VsdAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3YXNUaHJvd24KLSAgICAgICAg
ICovCi0gICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFjayhlcnJvciwgcmVzdWx0LCB3YXNUaHJv
d24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZh
bHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChyZXR1cm5CeVZhbHVlKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICEh
d2FzVGhyb3duLCB3YXNUaHJvd24gPyBudWxsIDogcmVzdWx0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjYWxsYmFjayhXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21Q
YXlsb2FkKHJlc3VsdCksICEhd2FzVGhyb3duKTsKLSAgICAgICAgfQotICAgICAgICBSdW50aW1l
QWdlbnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGlu
ZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCB0aGlzLl9jdXJyZW50
RXhlY3V0aW9uQ29udGV4dCA/IHRoaXMuX2N1cnJlbnRFeGVjdXRpb25Db250ZXh0LmlkIDogdW5k
ZWZpbmVkLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIGV2YWxDYWxsYmFjayk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcHJveHlFbGVtZW50Ci0g
ICAgICogQHBhcmFtIHtSYW5nZX0gd29yZFJhbmdlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBm
b3JjZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUFycmF5LjxzdHJpbmc+LCBudW1iZXI9KX0g
Y29tcGxldGlvbnNSZWFkeUNhbGxiYWNrCi0gICAgICovCi0gICAgY29tcGxldGlvbnNGb3JUZXh0
UHJvbXB0OiBmdW5jdGlvbihwcm94eUVsZW1lbnQsIHdvcmRSYW5nZSwgZm9yY2UsIGNvbXBsZXRp
b25zUmVhZHlDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8vIFBhc3MgbGVzcyBzdG9wIGNoYXJh
Y3RlcnMgdG8gcmFuZ2VPZldvcmQgc28gdGhlIHJhbmdlIHdpbGwgYmUgYSBtb3JlIGNvbXBsZXRl
IGV4cHJlc3Npb24uCi0gICAgICAgIHZhciBleHByZXNzaW9uUmFuZ2UgPSB3b3JkUmFuZ2Uuc3Rh
cnRDb250YWluZXIucmFuZ2VPZldvcmQod29yZFJhbmdlLnN0YXJ0T2Zmc2V0LCAiID06Wyh7Oywh
Ky0qLyZ8Xjw+IiwgcHJveHlFbGVtZW50LCAiYmFja3dhcmQiKTsKLSAgICAgICAgdmFyIGV4cHJl
c3Npb25TdHJpbmcgPSBleHByZXNzaW9uUmFuZ2UudG9TdHJpbmcoKTsKLSAgICAgICAgdmFyIHBy
ZWZpeCA9IHdvcmRSYW5nZS50b1N0cmluZygpOwotICAgICAgICB0aGlzLl9jb21wbGV0aW9uc0Zv
ckV4cHJlc3Npb24oZXhwcmVzc2lvblN0cmluZywgcHJlZml4LCBmb3JjZSwgY29tcGxldGlvbnNS
ZWFkeUNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IGV4cHJlc3Npb25TdHJpbmcKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4Ci0gICAgICog
QHBhcmFtIHtib29sZWFufSBmb3JjZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUFycmF5Ljxz
dHJpbmc+LCBudW1iZXI9KX0gY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrCi0gICAgICovCi0gICAg
X2NvbXBsZXRpb25zRm9yRXhwcmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvblN0cmluZywgcHJl
Zml4LCBmb3JjZSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFy
IGxhc3RJbmRleCA9IGV4cHJlc3Npb25TdHJpbmcubGVuZ3RoIC0gMTsKLQotICAgICAgICB2YXIg
ZG90Tm90YXRpb24gPSAoZXhwcmVzc2lvblN0cmluZ1tsYXN0SW5kZXhdID09PSAiLiIpOwotICAg
ICAgICB2YXIgYnJhY2tldE5vdGF0aW9uID0gKGV4cHJlc3Npb25TdHJpbmdbbGFzdEluZGV4XSA9
PT0gIlsiKTsKLQotICAgICAgICBpZiAoZG90Tm90YXRpb24gfHwgYnJhY2tldE5vdGF0aW9uKQot
ICAgICAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmcuc3Vic3RyKDAs
IGxhc3RJbmRleCk7Ci0KLSAgICAgICAgaWYgKGV4cHJlc3Npb25TdHJpbmcgJiYgcGFyc2VJbnQo
ZXhwcmVzc2lvblN0cmluZywgMTApID09IGV4cHJlc3Npb25TdHJpbmcpIHsKLSAgICAgICAgICAg
IC8vIFVzZXIgaXMgZW50ZXJpbmcgZmxvYXQgdmFsdWUsIGRvIG5vdCBzdWdnZXN0IGFueXRoaW5n
LgotICAgICAgICAgICAgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKFtdKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcHJlZml4ICYmICFleHByZXNzaW9u
U3RyaW5nICYmICFmb3JjZSkgewotICAgICAgICAgICAgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNr
KFtdKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZXhw
cmVzc2lvblN0cmluZyAmJiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZWxlY3RlZENhbGxG
cmFtZSgpKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuZ2V0U2VsZWN0
ZWRDYWxsRnJhbWVWYXJpYWJsZXMocmVjZWl2ZWRQcm9wZXJ0eU5hbWVzLmJpbmQodGhpcykpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLmV2YWx1YXRlKGV4cHJlc3Npb25TdHJpbmcs
ICJjb21wbGV0aW9uIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBldmFsdWF0ZWQuYmluZCh0
aGlzKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gZXZhbHVhdGVkKHJlc3VsdCwgd2FzVGhyb3duKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCB3YXNUaHJvd24pIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2soW10pOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q29tcGxl
dGlvbnMocHJpbWl0aXZlVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIg
b2JqZWN0OwotICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlID09PSAic3RyaW5nIikK
LSAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFN0cmluZygiIik7Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVHlwZSA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICAg
ICAgICAgIG9iamVjdCA9IG5ldyBOdW1iZXIoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVHlwZSA9PT0gImJvb2xlYW4iKQotICAgICAgICAgICAgICAgICAgICBvYmplY3Qg
PSBuZXcgQm9vbGVhbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBvYmplY3QgPSB0aGlzOwotCi0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdFNldCA9
IHt9OwotICAgICAgICAgICAgICAgIGZvciAodmFyIG8gPSBvYmplY3Q7IG87IG8gPSBvLl9fcHJv
dG9fXykgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldFtuYW1lc1tpXV0gPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFNldDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSAib2JqZWN0IiB8fCBy
ZXN1bHQudHlwZSA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgICAgICByZXN1bHQuY2FsbEZ1
bmN0aW9uSlNPTihnZXRDb21wbGV0aW9ucywgdW5kZWZpbmVkLCByZWNlaXZlZFByb3BlcnR5TmFt
ZXMuYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQudHlwZSA9PT0gInN0
cmluZyIgfHwgcmVzdWx0LnR5cGUgPT09ICJudW1iZXIiIHx8IHJlc3VsdC50eXBlID09PSAiYm9v
bGVhbiIpCi0gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZSgiKCIgKyBnZXRDb21wbGV0aW9u
cyArICIpKFwiIiArIHJlc3VsdC50eXBlICsgIlwiKSIsICJjb21wbGV0aW9uIiwgZmFsc2UsIHRy
dWUsIHRydWUsIGZhbHNlLCByZWNlaXZlZFByb3BlcnR5TmFtZXNGcm9tRXZhbC5iaW5kKHRoaXMp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVkUHJvcGVydHlOYW1lc0Zy
b21FdmFsKG5vdFJlbGV2YW50LCB3YXNUaHJvd24sIHJlc3VsdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHJlc3VsdCAmJiAhd2FzVGhyb3duKQotICAgICAgICAgICAgICAgIHJlY2VpdmVk
UHJvcGVydHlOYW1lcy5jYWxsKHRoaXMsIHJlc3VsdC52YWx1ZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKFtdKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVkUHJvcGVydHlOYW1lcyhwcm9wZXJ0eU5hbWVz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQWdlbnQucmVsZWFzZU9iamVjdEdyb3Vw
KCJjb21wbGV0aW9uIik7Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnR5TmFtZXMpIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2soW10pOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBpbmNsdWRlQ29tbWFuZExp
bmVBUEkgPSAoIWRvdE5vdGF0aW9uICYmICFicmFja2V0Tm90YXRpb24pOwotICAgICAgICAgICAg
aWYgKGluY2x1ZGVDb21tYW5kTGluZUFQSSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1h
bmRMaW5lQVBJID0gWyJkaXIiLCAiZGlyeG1sIiwgImtleXMiLCAidmFsdWVzIiwgInByb2ZpbGUi
LCAicHJvZmlsZUVuZCIsICJtb25pdG9yRXZlbnRzIiwgInVubW9uaXRvckV2ZW50cyIsICJpbnNw
ZWN0IiwgImNvcHkiLCAiY2xlYXIiLAotICAgICAgICAgICAgICAgICAgICAiZ2V0RXZlbnRMaXN0
ZW5lcnMiLCAiJCIsICIkJCIsICIkeCJdOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY29tbWFuZExpbmVBUEkubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXNbY29tbWFuZExpbmVBUElbaV1dID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHRoaXMuX3JlcG9ydENvbXBsZXRpb25zKGNvbXBsZXRpb25zUmVhZHlDYWxsYmFj
aywgZG90Tm90YXRpb24sIGJyYWNrZXROb3RhdGlvbiwgZXhwcmVzc2lvblN0cmluZywgcHJlZml4
LCBPYmplY3Qua2V5cyhwcm9wZXJ0eU5hbWVzKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbighQXJyYXkuPHN0cmluZz4sIG51bWJlcj0pfSBj
b21wbGV0aW9uc1JlYWR5Q2FsbGJhY2sKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvdE5vdGF0
aW9uCi0gICAgICogQHBhcmFtIHtib29sZWFufSBicmFja2V0Tm90YXRpb24KLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gZXhwcmVzc2lvblN0cmluZwotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVm
aXgKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwcm9wZXJ0aWVzCi0gICAgICovCi0g
ICAgX3JlcG9ydENvbXBsZXRpb25zOiBmdW5jdGlvbihjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ss
IGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIGV4cHJlc3Npb25TdHJpbmcsIHByZWZpeCwg
cHJvcGVydGllcykgewotICAgICAgICBpZiAoYnJhY2tldE5vdGF0aW9uKSB7Ci0gICAgICAgICAg
ICBpZiAocHJlZml4Lmxlbmd0aCAmJiBwcmVmaXhbMF0gPT09ICInIikKLSAgICAgICAgICAgICAg
ICB2YXIgcXVvdGVVc2VkID0gIiciOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHZhciBxdW90ZVVzZWQgPSAiXCIiOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHJlc3VsdHMg
PSBbXTsKLQotICAgICAgICBpZiAoIWV4cHJlc3Npb25TdHJpbmcpIHsKLSAgICAgICAgICAgIGNv
bnN0IGtleXdvcmRzID0gWyJicmVhayIsICJjYXNlIiwgImNhdGNoIiwgImNvbnRpbnVlIiwgImRl
ZmF1bHQiLCAiZGVsZXRlIiwgImRvIiwgImVsc2UiLCAiZmluYWxseSIsICJmb3IiLCAiZnVuY3Rp
b24iLCAiaWYiLCAiaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbmNl
b2YiLCAibmV3IiwgInJldHVybiIsICJzd2l0Y2giLCAidGhpcyIsICJ0aHJvdyIsICJ0cnkiLCAi
dHlwZW9mIiwgInZhciIsICJ2b2lkIiwgIndoaWxlIiwgIndpdGgiXTsKLSAgICAgICAgICAgIHBy
b3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmNvbmNhdChrZXl3b3Jkcyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBwcm9wZXJ0aWVzLnNvcnQoKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBy
b3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3Bl
cnRpZXNbaV07Ci0KLSAgICAgICAgICAgIGlmIChkb3ROb3RhdGlvbiAmJiAhL15bYS16QS1aXyRd
W2EtekEtWjAtOV8kXSokLy50ZXN0KHByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgaWYgKGJyYWNrZXROb3RhdGlvbikgewotICAgICAgICAgICAgICAg
IGlmICghL15bMC05XSskLy50ZXN0KHByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHkgPSBxdW90ZVVzZWQgKyBwcm9wZXJ0eS5lc2NhcGVDaGFyYWN0ZXJzKHF1b3RlVXNlZCAr
ICJcXCIpICsgcXVvdGVVc2VkOwotICAgICAgICAgICAgICAgIHByb3BlcnR5ICs9ICJdIjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHByb3BlcnR5Lmxlbmd0aCA8IHByZWZpeC5s
ZW5ndGgpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAocHJlZml4
Lmxlbmd0aCAmJiAhcHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICByZXN1bHRzLnB1c2gocHJvcGVydHkpOwotICAgICAg
ICB9Ci0gICAgICAgIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjayhyZXN1bHRzKTsKLSAgICB9LAot
Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi0vKioK
LSAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuUnVudGltZU1vZGVsfQotICovCi1XZWJJbnNwZWN0b3Iu
cnVudGltZU1vZGVsID0gbnVsbDsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1l
bnRzIHtSdW50aW1lQWdlbnQuRGlzcGF0Y2hlcn0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJ1
bnRpbWVNb2RlbH0gcnVudGltZU1vZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5SdW50aW1lRGlzcGF0
Y2hlciA9IGZ1bmN0aW9uKHJ1bnRpbWVNb2RlbCkKLXsKLSAgICB0aGlzLl9ydW50aW1lTW9kZWwg
PSBydW50aW1lTW9kZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5SdW50aW1lRGlzcGF0Y2hlci5wcm90
b3R5cGUgPSB7Ci0gICAgZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQ6IGZ1bmN0aW9uKGNvbnRleHQp
Ci0gICAgewotICAgICAgICB0aGlzLl9ydW50aW1lTW9kZWwuX2V4ZWN1dGlvbkNvbnRleHRDcmVh
dGVkKGNvbnRleHQpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRl
bmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuRXhlY3V0aW9uQ29u
dGV4dCA9IGZ1bmN0aW9uKGlkLCBuYW1lLCBpc1BhZ2VDb250ZXh0KQotewotICAgIHRoaXMuaWQg
PSBpZDsKLSAgICB0aGlzLm5hbWUgPSAoaXNQYWdlQ29udGV4dCAmJiAhbmFtZSkgPyAiPHBhZ2Ug
Y29udGV4dD4iIDogbmFtZTsKLSAgICB0aGlzLmlzTWFpbldvcmxkQ29udGV4dCA9IGlzUGFnZUNv
bnRleHQ7Ci19Ci0KLS8qKgotICogQHBhcmFtIHsqfSBhCi0gKiBAcGFyYW0geyp9IGIKLSAqIEBy
ZXR1cm4ge251bWJlcn0KLSAqLwotV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHQuY29tcGFy
YXRvciA9IGZ1bmN0aW9uKGEsIGIpCi17Ci0gICAgLy8gTWFpbiB3b3JsZCBjb250ZXh0IHNob3Vs
ZCBhbHdheXMgZ28gZmlyc3QuCi0gICAgaWYgKGEuaXNNYWluV29ybGRDb250ZXh0KQotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgaWYgKGIuaXNNYWluV29ybGRDb250ZXh0KQotICAgICAgICByZXR1
cm4gKzE7Ci0gICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7Ci19Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAq
LwotV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3QgPSBmdW5jdGlvbihmcmFt
ZSkKLXsKLSAgICB0aGlzLl9mcmFtZSA9IGZyYW1lOwotICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRl
eHRzID0gW107Ci19Ci0KLVdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LkV2
ZW50VHlwZXMgPSB7Ci0gICAgQ29udGV4dHNVcGRhdGVkOiAiQ29udGV4dHNVcGRhdGVkIiwKLSAg
ICBDb250ZXh0QWRkZWQ6ICJDb250ZXh0QWRkZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5GcmFtZUV4
ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZSA9Ci17Ci0gICAgX2ZyYW1lTmF2aWdhdGVkOiBm
dW5jdGlvbihmcmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7Ci0gICAg
ICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHRzID0gW107Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LkV2
ZW50VHlwZXMuQ29udGV4dHNVcGRhdGVkLCB0aGlzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXhlY3V0aW9uQ29udGV4dH0gY29udGV4dAotICAgICAq
LwotICAgIF9hZGRFeGVjdXRpb25Db250ZXh0OiBmdW5jdGlvbihjb250ZXh0KQotICAgIHsKLSAg
ICAgICAgdmFyIGluc2VydEF0ID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRC
eUZ1bmN0aW9uKGNvbnRleHQsIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHRzLCBXZWJJbnNwZWN0b3Iu
RXhlY3V0aW9uQ29udGV4dC5jb21wYXJhdG9yKTsKLSAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29u
dGV4dHMuc3BsaWNlKGluc2VydEF0LCAwLCBjb250ZXh0KTsKLSAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3Qu
RXZlbnRUeXBlcy5Db250ZXh0QWRkZWQsIHRoaXMpOwotICAgIH0sCi0KLSAgICBleGVjdXRpb25D
b250ZXh0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlv
bkNvbnRleHRzOwotICAgIH0sCi0KLSAgICBtYWluV29ybGRDb250ZXh0OiBmdW5jdGlvbigpIAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHRzWzBdOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJpdHlPcmlnaW4KLSAgICAg
Ki8KLSAgICBjb250ZXh0QnlTZWN1cml0eU9yaWdpbjogZnVuY3Rpb24oc2VjdXJpdHlPcmlnaW4p
Ci0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4ZWN1dGlvbkNvbnRl
eHRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2V4ZWN1
dGlvbkNvbnRleHRzW2ldOwotICAgICAgICAgICAgaWYgKCFjb250ZXh0LmlzTWFpbldvcmxkQ29u
dGV4dCAmJiBjb250ZXh0Lm5hbWUgPT09IHNlY3VyaXR5T3JpZ2luKQotICAgICAgICAgICAgICAg
IHJldHVybiBjb250ZXh0OyAKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBnZXQgZnJhbWVJZCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWUuaWQ7Ci0gICAgfSwKLQotICAgIGdl
dCB1cmwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lLnVybDsKLSAgICB9LAot
Ci0gICAgZ2V0IGRpc3BsYXlOYW1lKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZnJhbWUu
cGFyZW50RnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gIjx0b3AgZnJhbWU+IjsKLSAgICAgICAg
dmFyIG5hbWUgPSB0aGlzLl9mcmFtZS5uYW1lIHx8ICIiOwotICAgICAgICB2YXIgc3VidGl0bGUg
PSBuZXcgV2ViSW5zcGVjdG9yLlBhcnNlZFVSTCh0aGlzLl9mcmFtZS51cmwpLmRpc3BsYXlOYW1l
OwotICAgICAgICBpZiAoc3VidGl0bGUpIHsKLSAgICAgICAgICAgIGlmICghbmFtZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3VidGl0bGU7Ci0gICAgICAgICAgICByZXR1cm4gbmFtZSArICIo
ICIgKyBzdWJ0aXRsZSArICIgKSI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICI8aWZyYW1l
PiI7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5
cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU0FT
U1NvdXJjZU1hcHBpbmcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NB
U1NTb3VyY2VNYXBwaW5nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI3Njc4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU0FTU1Nv
dXJjZU1hcHBpbmcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlNvdXJjZU1hcHBpbmd9Ci0g
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsfSBjc3NNb2RlbAotICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuV29ya3NwYWNlfSB3b3Jrc3BhY2UKLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlNpbXBsZVdvcmtzcGFjZVByb3ZpZGVyfSBuZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIKLSAq
LwotV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nID0gZnVuY3Rpb24oY3NzTW9kZWwsIHdv
cmtzcGFjZSwgbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyKQotewotICAgIHRoaXMuX2Nzc01vZGVs
ID0gY3NzTW9kZWw7Ci0gICAgdGhpcy5fd29ya3NwYWNlID0gd29ya3NwYWNlOwotICAgIHRoaXMu
X25ldHdvcmtXb3Jrc3BhY2VQcm92aWRlciA9IG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcjsKLSAg
ICB0aGlzLl9zb3VyY2VNYXBCeVVSTCA9IHt9OwotICAgIHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVT
aGVldFVSTCA9IHt9OwotICAgIHRoaXMuX2Nzc1VSTHNGb3JTQVNTVVJMID0ge307Ci0gICAgdGhp
cy5fdGltZW91dEZvclVSTCA9IHt9OwotICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2Rl
bC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5
cGVzLlJlc291cmNlQWRkZWQsIHRoaXMuX3Jlc291cmNlQWRkZWQsIHRoaXMpOwotICAgIFdlYklu
c3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFu
YWdlci5FdmVudFR5cGVzLlNhdmVkVVJMLCB0aGlzLl9maWxlU2F2ZUZpbmlzaGVkLCB0aGlzKTsK
LSAgICB0aGlzLl9jc3NNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5DU1NTdHls
ZU1vZGVsLkV2ZW50cy5TdHlsZVNoZWV0Q2hhbmdlZCwgdGhpcy5fc3R5bGVTaGVldENoYW5nZWQs
IHRoaXMpOwotICAgIHRoaXMuX3dvcmtzcGFjZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5Xb3Jrc3BhY2UuRXZlbnRzLlByb2plY3RXaWxsUmVzZXQsIHRoaXMuX3Jlc2V0LCB0aGlzKTsK
LX0KLQotV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKLSAgICBf
cG9wdWxhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHBvcHVsYXRlRnJh
bWUoZnJhbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJh
bWUuY2hpbGRGcmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgcG9wdWxhdGVGcmFt
ZS5jYWxsKHRoaXMsIGZyYW1lLmNoaWxkRnJhbWVzW2ldKTsKLQotICAgICAgICAgICAgdmFyIHJl
c291cmNlcyA9IGZyYW1lLnJlc291cmNlcygpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCByZXNvdXJjZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVzb3Vy
Y2VBZGRlZCh7ZGF0YTpyZXNvdXJjZXNbaV19KTsKLSAgICAgICAgfQotCi0gICAgICAgIHBvcHVs
YXRlRnJhbWUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZy
YW1lKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZl
bnR9IGV2ZW50Ci0gICAgICovCi0gICAgX3N0eWxlU2hlZXRDaGFuZ2VkOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIHZhciBpc0FkZGluZ1JldmlzaW9uID0gdGhpcy5faXNBZGRpbmdS
ZXZpc2lvbjsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2lzQWRkaW5nUmV2aXNpb247Ci0KLSAgICAg
ICAgaWYgKGlzQWRkaW5nUmV2aXNpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRo
aXMuX2Nzc01vZGVsLnJlc291cmNlQmluZGluZygpLnJlcXVlc3RSZXNvdXJjZVVSTEZvclN0eWxl
U2hlZXRJZChldmVudC5kYXRhLnN0eWxlU2hlZXRJZCwgY2FsbGJhY2suYmluZCh0aGlzKSk7Ci0K
LSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXJsKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIXVybCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0aGlzLl9jc3NN
b2RlbC5zZXRTb3VyY2VNYXBwaW5nKHVybCwgbnVsbCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICov
Ci0gICAgX2ZpbGVTYXZlRmluaXNoZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBGaWxlTWFwcGluZy4KLSAgICAgICAgdmFyIHNhc3NV
UkwgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICBmdW5jdGlv
biBjYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lb3V0
Rm9yVVJMW3Nhc3NVUkxdOwotICAgICAgICAgICAgdmFyIGNzc1VSTHMgPSB0aGlzLl9jc3NVUkxz
Rm9yU0FTU1VSTFtzYXNzVVJMXTsKLSAgICAgICAgICAgIGlmICghY3NzVVJMcykKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNzc1VSTHMu
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2FkQ1NTKGNzc1VSTHNbaV0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRpbWVyID0gdGhpcy5fdGltZW91dEZvclVSTFtz
YXNzVVJMXTsKLSAgICAgICAgaWYgKHRpbWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQo
dGltZXIpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RpbWVvdXRGb3JVUkxbc2Fzc1VSTF07
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3NzUmVsb2Fk
RW5hYmxlZC5nZXQoKSB8fCAhdGhpcy5fY3NzVVJMc0ZvclNBU1NVUkxbc2Fzc1VSTF0pCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciB0aW1lb3V0ID0gV2ViSW5zcGVjdG9yLnNldHRp
bmdzLmNzc1JlbG9hZFRpbWVvdXQuZ2V0KCk7Ci0gICAgICAgIGlmICh0aW1lb3V0ICYmIGlzRmlu
aXRlKHRpbWVvdXQpKQotICAgICAgICAgICAgdGhpcy5fdGltZW91dEZvclVSTFtzYXNzVVJMXSA9
IHNldFRpbWVvdXQoY2FsbGJhY2suYmluZCh0aGlzKSwgTnVtYmVyKHRpbWVvdXQpKTsKLSAgICB9
LAotCi0gICAgX3JlbG9hZENTUzogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgdmFyIHVp
U291cmNlQ29kZSA9IHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkwodXJsKTsKLSAg
ICAgICAgaWYgKCF1aVNvdXJjZUNvZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZh
ciBuZXdDb250ZW50ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkodXJsKTsKLSAgICAgICAgdGhpcy5faXNBZGRpbmdSZXZpc2lvbiA9IHRydWU7Ci0gICAg
ICAgIHVpU291cmNlQ29kZS5hZGRSZXZpc2lvbihuZXdDb250ZW50KTsKLSAgICAgICAgLy8gdGhp
cy5faXNBZGRpbmdSZXZpc2lvbiB3aWxsIGJlIGRlbGV0ZWQgaW4gdGhpcy5fc3R5bGVTaGVldENo
YW5nZWQoKS4KLSAgICAgICAgdGhpcy5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXAobmV3Q29udGVu
dCwgdXJsLCB0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX3Jlc291cmNlQWRkZWQ6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHJlc291cmNlID0gLyoqIEB0eXBlIHtXZWJJbnNw
ZWN0b3IuUmVzb3VyY2V9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgaWYgKHJlc291cmNlLnR5
cGUgIT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29u
dGVudAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnRlbnRFbmNvZGVkCi0gICAgICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rp
b24gZGlkUmVxdWVzdENvbnRlbnQoY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9sb2FkQW5kUHJvY2Vzc1NvdXJjZU1hcChjb250
ZW50LCByZXNvdXJjZS51cmwpOwotICAgICAgICB9Ci0gICAgICAgIHJlc291cmNlLnJlcXVlc3RD
b250ZW50KGRpZFJlcXVlc3RDb250ZW50LmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
Y3NzVVJMCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gZm9yY2VSZWJpbmQKLSAgICAgKi8KLSAg
ICBfbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXA6IGZ1bmN0aW9uKGNvbnRlbnQsIGNzc1VSTCwgZm9y
Y2VSZWJpbmQpCi0gICAgewotICAgICAgICBpZiAoIWNvbnRlbnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xyP1xuLyk7Ci0gICAgICAg
IGlmICghbGluZXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbnN0
IHNvdXJjZU1hcFJlZ2V4ID0gL15cL1wqWyNAXSBzb3VyY2VNYXBwaW5nVVJMPShbXlxzXSspXHMq
XCpcLyQvOwotICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTsK
LSAgICAgICAgdmFyIG1hdGNoID0gbGFzdExpbmUubWF0Y2goc291cmNlTWFwUmVnZXgpOwotICAg
ICAgICBpZiAoIW1hdGNoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghZm9y
Y2VSZWJpbmQgJiYgdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VSTF0pCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLmxvYWRTb3VyY2VN
YXBGb3JTdHlsZVNoZWV0KG1hdGNoWzFdLCBjc3NVUkwsIGZvcmNlUmViaW5kKTsKLQotICAgICAg
ICBpZiAoIXNvdXJjZU1hcCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fc291
cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VSTF0gPSBzb3VyY2VNYXA7Ci0gICAgICAgIHRoaXMu
X2JpbmRVSVNvdXJjZUNvZGUoY3NzVVJMLCBzb3VyY2VNYXApOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzVVJMCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNh
c3NVUkwKLSAgICAgKi8KLSAgICBfYWRkQ1NTVVJMZm9yU0FTU1VSTDogZnVuY3Rpb24oY3NzVVJM
LCBzYXNzVVJMKQotICAgIHsKLSAgICAgICAgdmFyIGNzc1VSTHM7Ci0gICAgICAgIGlmICh0aGlz
Ll9jc3NVUkxzRm9yU0FTU1VSTC5oYXNPd25Qcm9wZXJ0eShzYXNzVVJMKSkKLSAgICAgICAgICAg
IGNzc1VSTHMgPSB0aGlzLl9jc3NVUkxzRm9yU0FTU1VSTFtzYXNzVVJMXTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBjc3NVUkxzID0gW107Ci0gICAgICAgICAgICB0aGlzLl9jc3NVUkxz
Rm9yU0FTU1VSTFtzYXNzVVJMXSA9IGNzc1VSTHM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNz
c1VSTHMuaW5kZXhPZihjc3NVUkwpID09PSAtMSkKLSAgICAgICAgICAgIGNzc1VSTHMucHVzaChj
c3NVUkwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNl
TWFwVVJMCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlU2hlZXRVUkwKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW49fSBmb3JjZVJlbG9hZAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5T
b3VyY2VNYXB9Ci0gICAgICovCi0gICAgbG9hZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQ6IGZ1bmN0
aW9uKHNvdXJjZU1hcFVSTCwgc3R5bGVTaGVldFVSTCwgZm9yY2VSZWxvYWQpCi0gICAgewotICAg
ICAgICB2YXIgY29tcGxldGVTdHlsZVNoZWV0VVJMID0gV2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5j
b21wbGV0ZVVSTChXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCwgc3R5bGVTaGVldFVSTCk7
Ci0gICAgICAgIGlmICghY29tcGxldGVTdHlsZVNoZWV0VVJMKQotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgIHZhciBjb21wbGV0ZVNvdXJjZU1hcFVSTCA9IFdlYkluc3BlY3Rvci5Q
YXJzZWRVUkwuY29tcGxldGVVUkwoY29tcGxldGVTdHlsZVNoZWV0VVJMLCBzb3VyY2VNYXBVUkwp
OwotICAgICAgICBpZiAoIWNvbXBsZXRlU291cmNlTWFwVVJMKQotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3VyY2VNYXBCeVVSTFtjb21w
bGV0ZVNvdXJjZU1hcFVSTF07Ci0gICAgICAgIGlmIChzb3VyY2VNYXAgJiYgIWZvcmNlUmVsb2Fk
KQotICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1hcDsKLSAgICAgICAgc291cmNlTWFwID0gV2Vi
SW5zcGVjdG9yLlNvdXJjZU1hcC5sb2FkKGNvbXBsZXRlU291cmNlTWFwVVJMLCBjb21wbGV0ZVN0
eWxlU2hlZXRVUkwpOwotICAgICAgICBpZiAoIXNvdXJjZU1hcCkgewotICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX3NvdXJjZU1hcEJ5VVJMW2NvbXBsZXRlU291cmNlTWFwVVJMXTsKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5VVJM
W2NvbXBsZXRlU291cmNlTWFwVVJMXSA9IHNvdXJjZU1hcDsKLSAgICAgICAgcmV0dXJuIHNvdXJj
ZU1hcDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1VSTAot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNvdXJjZU1hcH0gc291cmNlTWFwCi0gICAgICov
Ci0gICAgX2JpbmRVSVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHJhd1VSTCwgc291cmNlTWFwKQotICAg
IHsKLSAgICAgICAgdGhpcy5fY3NzTW9kZWwuc2V0U291cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMp
OwotICAgICAgICB2YXIgc291cmNlcyA9IHNvdXJjZU1hcC5zb3VyY2VzKCk7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc291cmNlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFy
IHVybCA9IHNvdXJjZXNbaV07Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX3dvcmtzcGFjZS5oYXNN
YXBwaW5nRm9yVVJMKHVybCkgJiYgIXRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkwo
dXJsKSkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsKTsKLSAgICAgICAgICAgICAgICB2YXIg
Y29udGVudFByb3ZpZGVyID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIo
V2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldCwgY29udGVudCwgInRleHQveC1z
Y3NzIik7Ci0gICAgICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX25ldHdvcmtX
b3Jrc3BhY2VQcm92aWRlci5hZGRGaWxlRm9yVVJMKHVybCwgY29udGVudFByb3ZpZGVyLCB0cnVl
KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGRDU1NVUkxmb3JTQVNTVVJMKHJhd1VSTCwgdXJs
KTsKLSAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUuc2V0U291cmNlTWFwcGluZyh0aGlzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5SYXdMb2NhdGlvbn0gcmF3TG9jYXRpb24KLSAgICAgKiBAcmV0dXJu
IHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KLSAgICAgKi8KLSAgICByYXdMb2NhdGlvblRvVUlM
b2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCi0gICAgewotICAgICAgICB2YXIgbG9jYXRp
b24gPSAvKiogQHR5cGUgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uICovIChyYXdMb2NhdGlvbik7
Ci0gICAgICAgIHZhciBlbnRyeTsKLSAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJj
ZU1hcEJ5U3R5bGVTaGVldFVSTFtsb2NhdGlvbi51cmxdOwotICAgICAgICBpZiAoIXNvdXJjZU1h
cCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBlbnRyeSA9IHNvdXJjZU1hcC5m
aW5kRW50cnkobG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyKTsKLSAg
ICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeS5sZW5ndGggPT09IDIpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3dvcmtzcGFjZS51aVNv
dXJjZUNvZGVGb3JVUkwoZW50cnlbMl0pOwotICAgICAgICBpZiAoIXVpU291cmNlQ29kZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5V
SUxvY2F0aW9uKHVpU291cmNlQ29kZSwgZW50cnlbM10sIGVudHJ5WzRdKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJj
ZUNvZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBjb2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUmF3TG9j
YXRpb259Ci0gICAgICovCi0gICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKHVp
U291cmNlQ29kZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIHdoZW4gdWkgLT4gcmF3IG1hcHBpbmcgaGFzIGNsaWVudHMu
Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uKHVpU291cmNlQ29k
ZS51cmwgfHwgIiIsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNJZGVudGl0eTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBfcmVz
ZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5VVJMID0ge307
Ci0gICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTCA9IHt9OwotICAgICAgICB0
aGlzLl9wb3B1bGF0ZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2NvcGVDaGFpblNpZGViYXJQYW5lLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY29wZUNoYWluU2lkZWJhclBhbmUuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OGExMDcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY29wZUNoYWluU2lkZWJhclBhbmUuanMKKysrIC9kZXYv
bnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuU2lkZWJhclBhbmV9Ci0gKi8KLVdlYkluc3BlY3Rvci5TY29wZUNoYWluU2lkZWJhclBhbmUg
PSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTY29wZSBWYXJpYWJsZXMiKSk7Ci0gICAgdGhpcy5fc2Vj
dGlvbnMgPSBbXTsKLSAgICB0aGlzLl9leHBhbmRlZFNlY3Rpb25zID0ge307Ci0gICAgdGhpcy5f
ZXhwYW5kZWRQcm9wZXJ0aWVzID0gW107Ci19Ci0KLVdlYkluc3BlY3Rvci5TY29wZUNoYWluU2lk
ZWJhclBhbmUucHJvdG90eXBlID0gewotICAgIHVwZGF0ZTogZnVuY3Rpb24oY2FsbEZyYW1lKQot
ICAgIHsKLSAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAg
ICAgIGlmICghY2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICB2YXIgaW5mb0VsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIGluZm9FbGVtZW50LmNsYXNz
TmFtZSA9ICJpbmZvIjsKLSAgICAgICAgICAgIGluZm9FbGVtZW50LnRleHRDb250ZW50ID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJOb3QgUGF1c2VkIik7Ci0gICAgICAgICAgICB0aGlzLmJvZHlF
bGVtZW50LmFwcGVuZENoaWxkKGluZm9FbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07
Ci0gICAgICAgICAgICBpZiAoIXNlY3Rpb24udGl0bGUpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAoc2VjdGlvbi5leHBhbmRlZCkKLSAgICAgICAgICAgICAgICB0
aGlzLl9leHBhbmRlZFNlY3Rpb25zW3NlY3Rpb24udGl0bGVdID0gdHJ1ZTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRTZWN0aW9uc1tzZWN0
aW9uLnRpdGxlXTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NlY3Rpb25zID0gW107Ci0K
LSAgICAgICAgdmFyIGZvdW5kTG9jYWxTY29wZSA9IGZhbHNlOwotICAgICAgICB2YXIgc2NvcGVD
aGFpbiA9IGNhbGxGcmFtZS5zY29wZUNoYWluOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNjb3BlQ2hhaW4ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzY29wZSA9IHNjb3Bl
Q2hhaW5baV07Ci0gICAgICAgICAgICB2YXIgdGl0bGUgPSBudWxsOwotICAgICAgICAgICAgdmFy
IHN1YnRpdGxlID0gc2NvcGUub2JqZWN0LmRlc2NyaXB0aW9uOwotICAgICAgICAgICAgdmFyIGVt
cHR5UGxhY2Vob2xkZXIgPSBudWxsOwotICAgICAgICAgICAgdmFyIGV4dHJhUHJvcGVydGllcyA9
IG51bGw7Ci0gICAgICAgICAgICB2YXIgZGVjbGFyYXRpdmVTY29wZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3dpdGNoIChzY29wZS50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAi
bG9jYWwiOgotICAgICAgICAgICAgICAgICAgICBmb3VuZExvY2FsU2NvcGUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICB0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9jYWwiKTsK
LSAgICAgICAgICAgICAgICAgICAgZW1wdHlQbGFjZWhvbGRlciA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiTm8gVmFyaWFibGVzIik7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gbnVs
bDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS50aGlzKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmFQcm9wZXJ0aWVzID0gWyBuZXcgV2ViSW5zcGVjdG9yLlJlbW90ZU9i
amVjdFByb3BlcnR5KCJ0aGlzIiwgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9h
ZChjYWxsRnJhbWUudGhpcykpIF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXRhaWxzID0gV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuZGVidWdnZXJQYXVzZWREZXRhaWxzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZXhjZXB0aW9uID0gZGV0YWlscy5yZWFzb24gPT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkJyZWFrUmVhc29uLkV4Y2VwdGlvbiA/IGRldGFpbHMuYXV4RGF0YSA6IDA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0cmFQcm9wZXJ0aWVzID0gZXh0cmFQcm9wZXJ0aWVzIHx8IFtdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBleGNlcHRpb25PYmplY3QgPSAvKiogQHR5cGUge1J1
bnRpbWVBZ2VudC5SZW1vdGVPYmplY3R9ICovIChleGNlcHRpb24pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhUHJvcGVydGllcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0UHJvcGVydHkoIjxleGNlcHRpb24+IiwgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5m
cm9tUGF5bG9hZChleGNlcHRpb25PYmplY3QpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpdmVT
Y29wZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgImNsb3N1cmUiOgotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ2xvc3VyZSIpOwotICAgICAgICAgICAgICAgICAgICBlbXB0eVBsYWNlaG9s
ZGVyID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBWYXJpYWJsZXMiKTsKLSAgICAgICAgICAg
ICAgICAgICAgc3VidGl0bGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGl2
ZVNjb3BlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAiY2F0Y2giOgotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ2F0Y2giKTsKLSAgICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBudWxs
OwotICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGl2ZVNjb3BlID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAid2l0aCI6Ci0gICAgICAg
ICAgICAgICAgICAgIHRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXaXRoIEJsb2NrIik7
Ci0gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aXZlU2NvcGUgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAiZ2xvYmFsIjoKLSAgICAg
ICAgICAgICAgICAgICAgdGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdsb2JhbCIpOwot
ICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGl2ZVNjb3BlID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXRpdGxl
IHx8IHRpdGxlID09PSBzdWJ0aXRsZSkKLSAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IG51bGw7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhciBzY29wZVJlZjsKLSAgICAgICAgICAgIGlm
IChkZWNsYXJhdGl2ZVNjb3BlKQotICAgICAgICAgICAgICAgIHNjb3BlUmVmID0gbmV3IFdlYklu
c3BlY3Rvci5TY29wZVJlZihpLCBjYWxsRnJhbWUuaWQsIHVuZGVmaW5lZCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgc2NvcGVSZWYgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAg
ICAKLQotICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBy
b3BlcnRpZXNTZWN0aW9uKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVNjb3BlUGF5bG9h
ZChzY29wZS5vYmplY3QsIHNjb3BlUmVmKSwgdGl0bGUsIHN1YnRpdGxlLCBlbXB0eVBsYWNlaG9s
ZGVyLCB0cnVlLCBleHRyYVByb3BlcnRpZXMsIFdlYkluc3BlY3Rvci5TY29wZVZhcmlhYmxlVHJl
ZUVsZW1lbnQpOwotICAgICAgICAgICAgc2VjdGlvbi5lZGl0SW5TZWxlY3RlZENhbGxGcmFtZVdo
ZW5QYXVzZWQgPSB0cnVlOwotICAgICAgICAgICAgc2VjdGlvbi5wYW5lID0gdGhpczsKLQotICAg
ICAgICAgICAgaWYgKHNjb3BlLnR5cGUgPT09ICJnbG9iYWwiKQotICAgICAgICAgICAgICAgIHNl
Y3Rpb24uZXhwYW5kZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFmb3VuZExvY2Fs
U2NvcGUgfHwgc2NvcGUudHlwZSA9PT0gImxvY2FsIiB8fCB0aXRsZSBpbiB0aGlzLl9leHBhbmRl
ZFNlY3Rpb25zKQotICAgICAgICAgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOwotCi0g
ICAgICAgICAgICB0aGlzLl9zZWN0aW9ucy5wdXNoKHNlY3Rpb24pOwotICAgICAgICAgICAgdGhp
cy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZChzZWN0aW9uLmVsZW1lbnQpOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5P
YmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0UHJvcGVydHl9IHByb3BlcnR5Ci0gKi8KLVdlYkluc3BlY3Rvci5TY29wZVZhcmlhYmxl
VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihwcm9wZXJ0eSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuT2Jq
ZWN0UHJvcGVydHlUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHByb3BlcnR5KTsKLX0KLQotV2ViSW5z
cGVjdG9yLlNjb3BlVmFyaWFibGVUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgb25hdHRh
Y2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0
eVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmF0dGFjaC5jYWxsKHRoaXMpOwotICAgICAgICBpZiAo
dGhpcy5oYXNDaGlsZHJlbiAmJiB0aGlzLnByb3BlcnR5SWRlbnRpZmllciBpbiB0aGlzLnRyZWVP
dXRsaW5lLnNlY3Rpb24ucGFuZS5fZXhwYW5kZWRQcm9wZXJ0aWVzKQotICAgICAgICAgICAgdGhp
cy5leHBhbmQoKTsKLSAgICB9LAotCi0gICAgb25leHBhbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5lLl9leHBhbmRlZFByb3BlcnRpZXNb
dGhpcy5wcm9wZXJ0eUlkZW50aWZpZXJdID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgb25jb2xsYXBz
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMudHJlZU91dGxpbmUuc2Vj
dGlvbi5wYW5lLl9leHBhbmRlZFByb3BlcnRpZXNbdGhpcy5wcm9wZXJ0eUlkZW50aWZpZXJdOwot
ICAgIH0sCi0KLSAgICBnZXQgcHJvcGVydHlJZGVudGlmaWVyKCkKLSAgICB7Ci0gICAgICAgIGlm
ICgiX3Byb3BlcnR5SWRlbnRpZmllciIgaW4gdGhpcykKLSAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9wcm9wZXJ0eUlkZW50aWZpZXI7Ci0gICAgICAgIHZhciBzZWN0aW9uID0gdGhpcy50cmVlT3V0
bGluZS5zZWN0aW9uOwotICAgICAgICB0aGlzLl9wcm9wZXJ0eUlkZW50aWZpZXIgPSBzZWN0aW9u
LnRpdGxlICsgIjoiICsgKHNlY3Rpb24uc3VidGl0bGUgPyBzZWN0aW9uLnN1YnRpdGxlICsgIjoi
IDogIiIpICsgdGhpcy5wcm9wZXJ0eVBhdGgoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3Bl
cnR5SWRlbnRpZmllcjsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2Jq
ZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGExODM5OTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNw
ZWN0b3IuQ29udGVudFByb3ZpZGVyfQotICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdElkCi0gKiBA
cGFyYW0ge3N0cmluZ30gc291cmNlVVJMCi0gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCi0g
KiBAcGFyYW0ge251bWJlcn0gc3RhcnRDb2x1bW4KLSAqIEBwYXJhbSB7bnVtYmVyfSBlbmRMaW5l
Ci0gKiBAcGFyYW0ge251bWJlcn0gZW5kQ29sdW1uCi0gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQ29u
dGVudFNjcmlwdAotICogQHBhcmFtIHtzdHJpbmc9fSBzb3VyY2VNYXBVUkwKLSAqIEBwYXJhbSB7
Ym9vbGVhbj19IGhhc1NvdXJjZVVSTAotICovCi1XZWJJbnNwZWN0b3IuU2NyaXB0ID0gZnVuY3Rp
b24oc2NyaXB0SWQsIHNvdXJjZVVSTCwgc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwg
ZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTCwgaGFzU291cmNlVVJMKQot
ewotICAgIHRoaXMuc2NyaXB0SWQgPSBzY3JpcHRJZDsKLSAgICB0aGlzLnNvdXJjZVVSTCA9IHNv
dXJjZVVSTDsKLSAgICB0aGlzLmxpbmVPZmZzZXQgPSBzdGFydExpbmU7Ci0gICAgdGhpcy5jb2x1
bW5PZmZzZXQgPSBzdGFydENvbHVtbjsKLSAgICB0aGlzLmVuZExpbmUgPSBlbmRMaW5lOwotICAg
IHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uOwotICAgIHRoaXMuaXNDb250ZW50U2NyaXB0ID0g
aXNDb250ZW50U2NyaXB0OwotICAgIHRoaXMuc291cmNlTWFwVVJMID0gc291cmNlTWFwVVJMOwot
ICAgIHRoaXMuaGFzU291cmNlVVJMID0gaGFzU291cmNlVVJMOwotICAgIHRoaXMuX2xvY2F0aW9u
cyA9IG5ldyBTZXQoKTsKLSAgICB0aGlzLl9zb3VyY2VNYXBwaW5ncyA9IFtdOwotfQotCi1XZWJJ
bnNwZWN0b3IuU2NyaXB0LkV2ZW50cyA9IHsKLSAgICBTY3JpcHRFZGl0ZWQ6ICJTY3JpcHRFZGl0
ZWQiLAotfQotCi1XZWJJbnNwZWN0b3IuU2NyaXB0LnNuaXBwZXRTb3VyY2VVUkxQcmVmaXggPSAi
c25pcHBldHM6Ly8vIjsKLQotV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7Ci0gICAg
LyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGNvbnRlbnRVUkw6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZVVSTDsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJlc291cmNlVHlwZX0KLSAg
ICAgKi8KLSAgICBjb250ZW50VHlwZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlNjcmlwdDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nLGJvb2xlYW4sc3RyaW5nKX0gY2FsbGJhY2sK
LSAgICAgKi8KLSAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9z
b3VyY2UsIGZhbHNlLCAidGV4dC9qYXZhc2NyaXB0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMge1dlYkluc3BlY3Rvci5T
Y3JpcHR9Ci0gICAgICAgICAqIEBwYXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biBkaWRHZXRTY3JpcHRTb3VyY2UoZXJyb3IsIHNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgdGhpcy5fc291cmNlID0gZXJyb3IgPyAiIiA6IHNvdXJjZTsKLSAgICAgICAgICAgIGNhbGxi
YWNrKHRoaXMuX3NvdXJjZSwgZmFsc2UsICJ0ZXh0L2phdmFzY3JpcHQiKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAodGhpcy5zY3JpcHRJZCkgewotICAgICAgICAgICAgLy8gU2NyaXB0IGZhaWxl
ZCB0byBwYXJzZS4KLSAgICAgICAgICAgIERlYnVnZ2VyQWdlbnQuZ2V0U2NyaXB0U291cmNlKHRo
aXMuc2NyaXB0SWQsIGRpZEdldFNjcmlwdFNvdXJjZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjYWxsYmFjaygiIiwgZmFsc2UsICJ0ZXh0L2phdmFzY3JpcHQiKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5Ci0gICAgICog
QHBhcmFtIHtib29sZWFufSBjYXNlU2Vuc2l0aXZlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBp
c1JlZ2V4Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48UGFnZUFnZW50LlNlYXJjaE1h
dGNoPil9IGNhbGxiYWNrCi0gICAgICovCi0gICAgc2VhcmNoSW5Db250ZW50OiBmdW5jdGlvbihx
dWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICAv
KioKLSAgICAgICAgICogQHRoaXMge1dlYkluc3BlY3Rvci5TY3JpcHR9Ci0gICAgICAgICAqIEBw
YXJhbSB7P1Byb3RvY29sLkVycm9yfSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxQ
YWdlQWdlbnQuU2VhcmNoTWF0Y2g+fSBzZWFyY2hNYXRjaGVzCi0gICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBpbm5lckNhbGxiYWNrKGVycm9yLCBzZWFyY2hNYXRjaGVzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihl
cnJvcik7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHNlYXJjaE1hdGNoZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgc2VhcmNoTWF0Y2ggPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlci5TZWFy
Y2hNYXRjaChzZWFyY2hNYXRjaGVzW2ldLmxpbmVOdW1iZXIsIHNlYXJjaE1hdGNoZXNbaV0ubGlu
ZUNvbnRlbnQpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNlYXJjaE1hdGNoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCB8fCBbXSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAodGhpcy5zY3JpcHRJZCkgewotICAgICAgICAgICAgLy8gU2NyaXB0
IGZhaWxlZCB0byBwYXJzZS4KLSAgICAgICAgICAgIERlYnVnZ2VyQWdlbnQuc2VhcmNoSW5Db250
ZW50KHRoaXMuc2NyaXB0SWQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCBpbm5lckNh
bGxiYWNrLmJpbmQodGhpcykpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNr
KFtdKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1NvdXJj
ZQotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1Byb3RvY29sLkVycm9yLCBBcnJheS48RGVidWdn
ZXJBZ2VudC5DYWxsRnJhbWU+PSl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgZWRpdFNvdXJjZTog
ZnVuY3Rpb24obmV3U291cmNlLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAg
ICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLlNjcmlwdH0KLSAgICAgICAgICogQHBhcmFtIHs/UHJv
dG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7QXJyYXkuPERlYnVnZ2VyQWdl
bnQuQ2FsbEZyYW1lPj19IGNhbGxGcmFtZXMKLSAgICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBk
ZWJ1Z0RhdGEKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRTY3JpcHRTb3Vy
Y2UoZXJyb3IsIGNhbGxGcmFtZXMsIGRlYnVnRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gRklYTUU6IHN1cHBvcnQgZGVidWdEYXRhLnN0YWNrX3VwZGF0ZV9uZWVkc19zdGVwX2luIGZs
YWcgYnkgY2FsbGluZyBXZWJJbnNwZWN0b3IuZGVidWdnZXJfbW9kZWwuY2FsbFN0YWNrTW9kaWZp
ZWQKLSAgICAgICAgICAgIGlmICghZXJyb3IpCi0gICAgICAgICAgICAgICAgdGhpcy5fc291cmNl
ID0gbmV3U291cmNlOwotICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIGNhbGxGcmFtZXMpOwot
ICAgICAgICAgICAgaWYgKCFlcnJvcikKLSAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU2NyaXB0LkV2ZW50cy5TY3JpcHRFZGl0ZWQsIG5l
d1NvdXJjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuc2NyaXB0SWQpIHsKLSAgICAg
ICAgICAgIC8vIFNjcmlwdCBmYWlsZWQgdG8gcGFyc2UuCi0gICAgICAgICAgICBEZWJ1Z2dlckFn
ZW50LnNldFNjcmlwdFNvdXJjZSh0aGlzLnNjcmlwdElkLCBuZXdTb3VyY2UsIHVuZGVmaW5lZCwg
ZGlkRWRpdFNjcmlwdFNvdXJjZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBjYWxsYmFjaygiU2NyaXB0IGZhaWxlZCB0byBwYXJzZSIpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzSW5saW5lU2NyaXB0
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc3RhcnRzQXRaZXJvID0gIXRoaXMubGlu
ZU9mZnNldCAmJiAhdGhpcy5jb2x1bW5PZmZzZXQ7Ci0gICAgICAgIHJldHVybiAhIXRoaXMuc291
cmNlVVJMICYmICFzdGFydHNBdFplcm87Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNBbm9ueW1vdXNTY3JpcHQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiAhdGhpcy5zb3VyY2VVUkw7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEeW5hbWljU2NyaXB0Ci0gICAgICovCi0gICAg
c2V0SXNEeW5hbWljU2NyaXB0OiBmdW5jdGlvbihpc0R5bmFtaWNTY3JpcHQpCi0gICAgewotICAg
ICAgICB0aGlzLl9pc0R5bmFtaWNTY3JpcHQgPSBpc0R5bmFtaWNTY3JpcHQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNEeW5hbWlj
U2NyaXB0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gISF0aGlzLl9pc0R5bmFt
aWNTY3JpcHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0g
ICAgICovCi0gICAgaXNTbmlwcGV0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5zb3VyY2VVUkwgJiYgdGhpcy5zb3VyY2VVUkwuc3RhcnRzV2l0aChXZWJJbnNwZWN0b3Iu
U2NyaXB0LnNuaXBwZXRTb3VyY2VVUkxQcmVmaXgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gY29s
dW1uTnVtYmVyCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259Ci0gICAg
ICovCi0gICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciB1aUxvY2F0aW9uOwotICAgICAgICB2YXIg
cmF3TG9jYXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRpb24odGhp
cy5zY3JpcHRJZCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyIHx8IDApOwotICAgICAgICBmb3Ig
KHZhciBpID0gdGhpcy5fc291cmNlTWFwcGluZ3MubGVuZ3RoIC0gMTsgIXVpTG9jYXRpb24gJiYg
aSA+PSAwOyAtLWkpCi0gICAgICAgICAgICB1aUxvY2F0aW9uID0gdGhpcy5fc291cmNlTWFwcGlu
Z3NbaV0ucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24ocmF3TG9jYXRpb24pOwotICAgICAgICBjb25z
b2xlLmFzc2VydCh1aUxvY2F0aW9uLCAiU2NyaXB0IHJhdyBsb2NhdGlvbiBjYW4gbm90IGJlIG1h
cHBlZCB0byBhbnkgdWkgbG9jYXRpb24uIik7Ci0gICAgICAgIHJldHVybiB1aUxvY2F0aW9uLnVp
U291cmNlQ29kZS5vdmVycmlkZUxvY2F0aW9uKHVpTG9jYXRpb24pOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXBwaW5nfSBzb3VyY2VNYXBw
aW5nCi0gICAgICovCi0gICAgcHVzaFNvdXJjZU1hcHBpbmc6IGZ1bmN0aW9uKHNvdXJjZU1hcHBp
bmcpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5ncy5wdXNoKHNvdXJjZU1hcHBp
bmcpOwotICAgICAgICB0aGlzLnVwZGF0ZUxvY2F0aW9ucygpOwotICAgIH0sCi0KLSAgICBwb3BT
b3VyY2VNYXBwaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VNYXBw
aW5ncy5wb3AoKTsKLSAgICAgICAgdGhpcy51cGRhdGVMb2NhdGlvbnMoKTsKLSAgICB9LAotCi0g
ICAgdXBkYXRlTG9jYXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgaXRlbXMg
PSB0aGlzLl9sb2NhdGlvbnMuaXRlbXMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBp
dGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGl0ZW1zW2ldLnVwZGF0ZSgpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkxv
Y2F0aW9ufSByYXdMb2NhdGlvbgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9y
LlVJTG9jYXRpb24pOihib29sZWFufHVuZGVmaW5lZCl9IHVwZGF0ZURlbGVnYXRlCi0gICAgICog
QHJldHVybiB7V2ViSW5zcGVjdG9yLlNjcmlwdC5Mb2NhdGlvbn0KLSAgICAgKi8KLSAgICBjcmVh
dGVMaXZlTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uLCB1cGRhdGVEZWxlZ2F0ZSkKLSAg
ICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJhd0xvY2F0aW9uLnNjcmlwdElkID09PSB0aGlz
LnNjcmlwdElkKTsKLSAgICAgICAgdmFyIGxvY2F0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5TY3Jp
cHQuTG9jYXRpb24odGhpcywgcmF3TG9jYXRpb24sIHVwZGF0ZURlbGVnYXRlKTsKLSAgICAgICAg
dGhpcy5fbG9jYXRpb25zLmFkZChsb2NhdGlvbik7Ci0gICAgICAgIGxvY2F0aW9uLnVwZGF0ZSgp
OwotICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9ufQotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuU2NyaXB0fSBzY3JpcHQKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9k
ZWwuTG9jYXRpb259IHJhd0xvY2F0aW9uCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rv
ci5VSUxvY2F0aW9uKTooYm9vbGVhbnx1bmRlZmluZWQpfSB1cGRhdGVEZWxlZ2F0ZQotICovCi1X
ZWJJbnNwZWN0b3IuU2NyaXB0LkxvY2F0aW9uID0gZnVuY3Rpb24oc2NyaXB0LCByYXdMb2NhdGlv
biwgdXBkYXRlRGVsZWdhdGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkxpdmVMb2NhdGlvbi5jYWxs
KHRoaXMsIHJhd0xvY2F0aW9uLCB1cGRhdGVEZWxlZ2F0ZSk7Ci0gICAgdGhpcy5fc2NyaXB0ID0g
c2NyaXB0OwotfQotCi1XZWJJbnNwZWN0b3IuU2NyaXB0LkxvY2F0aW9uLnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KLSAgICAg
Ki8KLSAgICB1aUxvY2F0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZGVidWdn
ZXJNb2RlbExvY2F0aW9uID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5M
b2NhdGlvbn0gKi8gKHRoaXMucmF3TG9jYXRpb24oKSk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9z
Y3JpcHQucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oZGVidWdnZXJNb2RlbExvY2F0aW9uLmxpbmVO
dW1iZXIsIGRlYnVnZ2VyTW9kZWxMb2NhdGlvbi5jb2x1bW5OdW1iZXIpOwotICAgIH0sCi0KLSAg
ICBkaXNwb3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuTGl2ZUxv
Y2F0aW9uLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7Ci0gICAgICAgIHRoaXMuX3Njcmlw
dC5fbG9jYXRpb25zLnJlbW92ZSh0aGlzKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJ
bnNwZWN0b3IuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2VlZGViYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcworKysgL2Rldi9udWxsCkBAIC0x
LDI3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLyoqCi0gKiBAaW50ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5Gb3JtYXR0
ZXIgPSBmdW5jdGlvbigpCi17Ci19Ci0KLS8qKgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUeXBlfSBjb250ZW50VHlwZQotICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5Gb3JtYXR0
ZXJ9Ci0gKi8KLVdlYkluc3BlY3Rvci5Gb3JtYXR0ZXIuY3JlYXRlRm9ybWF0dGVyID0gZnVuY3Rp
b24oY29udGVudFR5cGUpCi17Ci0gICAgaWYgKGNvbnRlbnRUeXBlID09PSBXZWJJbnNwZWN0b3Iu
cmVzb3VyY2VUeXBlcy5TY3JpcHQgfHwgY29udGVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5yZXNv
dXJjZVR5cGVzLkRvY3VtZW50KQotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5TY3Jp
cHRGb3JtYXR0ZXIoKTsKLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5JZGVudGl0eUZvcm1h
dHRlcigpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGxpbmVFbmRpbmdz
Ci0gKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICogQHBhcmFtIHtudW1iZXJ9IGNvbHVt
bk51bWJlcgotICogQHJldHVybiB7bnVtYmVyfQotICovCi1XZWJJbnNwZWN0b3IuRm9ybWF0dGVy
LmxvY2F0aW9uVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGxpbmVFbmRpbmdzLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpCi17Ci0gICAgdmFyIHBvc2l0aW9uID0gbGluZU51bWJlciA/IGxpbmVFbmRp
bmdzW2xpbmVOdW1iZXIgLSAxXSArIDEgOiAwOwotICAgIHJldHVybiBwb3NpdGlvbiArIGNvbHVt
bk51bWJlcjsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBsaW5lRW5kaW5n
cwotICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uCi0gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVy
Pn0KLSAqLwotV2ViSW5zcGVjdG9yLkZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRpb24gPSBmdW5j
dGlvbihsaW5lRW5kaW5ncywgcG9zaXRpb24pCi17Ci0gICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5l
RW5kaW5ncy51cHBlckJvdW5kKHBvc2l0aW9uIC0gMSk7Ci0gICAgaWYgKCFsaW5lTnVtYmVyKQot
ICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gcG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgICB2
YXIgY29sdW1uTnVtYmVyID0gcG9zaXRpb24gLSBsaW5lRW5kaW5nc1tsaW5lTnVtYmVyIC0gMV0g
LSAxOwotICAgIHJldHVybiBbbGluZU51bWJlciwgY29sdW1uTnVtYmVyXTsKLX0KLQotV2ViSW5z
cGVjdG9yLkZvcm1hdHRlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IG1pbWVUeXBlCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQKLSAgICAgKiBA
cGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBp
bmcpfSBjYWxsYmFjawotICAgICAqLwotICAgIGZvcm1hdENvbnRlbnQ6IGZ1bmN0aW9uKG1pbWVU
eXBlLCBjb250ZW50LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Gb3JtYXR0ZXJ9Ci0gKi8KLVdl
Ykluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fdGFz
a3MgPSBbXTsKLX0KLQotV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IGNvbnRlbnQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgV2ViSW5z
cGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBpbmcpfSBjYWxsYmFjawotICAgICAqLwotICAgIGZv
cm1hdENvbnRlbnQ6IGZ1bmN0aW9uKG1pbWVUeXBlLCBjb250ZW50LCBjYWxsYmFjaykKLSAgICB7
Ci0gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1xyXG4/fFtcblx1MjAyOFx1MjAy
OV0vZywgIlxuIikucmVwbGFjZSgvXlx1RkVGRi8sICcnKTsKLSAgICAgICAgY29uc3QgbWV0aG9k
ID0gImZvcm1hdCI7Ci0gICAgICAgIHZhciBwYXJhbWV0ZXJzID0geyBtaW1lVHlwZTogbWltZVR5
cGUsIGNvbnRlbnQ6IGNvbnRlbnQsIGluZGVudFN0cmluZzogV2ViSW5zcGVjdG9yLnNldHRpbmdz
LnRleHRFZGl0b3JJbmRlbnQuZ2V0KCkgfTsKLSAgICAgICAgdGhpcy5fdGFza3MucHVzaCh7IGRh
dGE6IHBhcmFtZXRlcnMsIGNhbGxiYWNrOiBjYWxsYmFjayB9KTsKLSAgICAgICAgdGhpcy5fd29y
a2VyLnBvc3RNZXNzYWdlKHsgbWV0aG9kOiBtZXRob2QsIHBhcmFtczogcGFyYW1ldGVycyB9KTsK
LSAgICB9LAotCi0gICAgX2RpZEZvcm1hdENvbnRlbnQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrcy5zaGlmdCgpOwotICAgICAgICB2YXIgb3Jp
Z2luYWxDb250ZW50ID0gdGFzay5kYXRhLmNvbnRlbnQ7Ci0gICAgICAgIHZhciBmb3JtYXR0ZWRD
b250ZW50ID0gZXZlbnQuZGF0YS5jb250ZW50OwotICAgICAgICB2YXIgbWFwcGluZyA9IGV2ZW50
LmRhdGFbIm1hcHBpbmciXTsKLSAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBuZXcgV2ViSW5z
cGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBpbmdJbXBsKG9yaWdpbmFsQ29udGVudC5saW5lRW5k
aW5ncygpLCBmb3JtYXR0ZWRDb250ZW50LmxpbmVFbmRpbmdzKCksIG1hcHBpbmcpOwotICAgICAg
ICB0YXNrLmNhbGxiYWNrKGZvcm1hdHRlZENvbnRlbnQsIHNvdXJjZU1hcHBpbmcpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXb3JrZXJ9Ci0gICAgICovCi0gICAgZ2V0IF93
b3JrZXIoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRXb3JrZXIpIHsKLSAgICAg
ICAgICAgIHRoaXMuX2NhY2hlZFdvcmtlciA9IG5ldyBXb3JrZXIoIlNjcmlwdEZvcm1hdHRlcldv
cmtlci5qcyIpOwotICAgICAgICAgICAgdGhpcy5fY2FjaGVkV29ya2VyLm9ubWVzc2FnZSA9IC8q
KiBAdHlwZSB7ZnVuY3Rpb24odGhpczpXb3JrZXIpfSAqLyAodGhpcy5fZGlkRm9ybWF0Q29udGVu
dC5iaW5kKHRoaXMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkV29y
a2VyOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtX
ZWJJbnNwZWN0b3IuRm9ybWF0dGVyfQotICovCi1XZWJJbnNwZWN0b3IuSWRlbnRpdHlGb3JtYXR0
ZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fdGFza3MgPSBbXTsKLX0KLQotV2ViSW5zcGVj
dG9yLklkZW50aXR5Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gbWltZVR5cGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudAotICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nLCBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNl
TWFwcGluZyl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgZm9ybWF0Q29udGVudDogZnVuY3Rpb24o
bWltZVR5cGUsIGNvbnRlbnQsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgY2FsbGJhY2soY29u
dGVudCwgbmV3IFdlYkluc3BlY3Rvci5JZGVudGl0eUZvcm1hdHRlclNvdXJjZU1hcHBpbmcoKSk7
Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuRm9y
bWF0dGVyTWFwcGluZ1BheWxvYWQgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5vcmlnaW5hbCA9
IFtdOwotICAgIHRoaXMuZm9ybWF0dGVkID0gW107Ci19Ci0KLS8qKgotICogQGludGVyZmFjZQot
ICovCi1XZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwcGluZyA9IGZ1bmN0aW9uKCkKLXsK
LX0KLQotV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFt
IHtudW1iZXI9fSBjb2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0K
LSAgICAgKi8KLSAgICBvcmlnaW5hbFRvRm9ybWF0dGVkOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5l
TnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0
dXJuIHtBcnJheS48bnVtYmVyPn0KLSAgICAgKi8KLSAgICBmb3JtYXR0ZWRUb09yaWdpbmFsOiBm
dW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpIHsgfQotfQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBw
aW5nfQotICovCi1XZWJJbnNwZWN0b3IuSWRlbnRpdHlGb3JtYXR0ZXJTb3VyY2VNYXBwaW5nID0g
ZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuSWRlbnRpdHlGb3JtYXR0ZXJTb3VyY2VN
YXBwaW5nLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gY29sdW1uTnVtYmVyCi0gICAgICogQHJl
dHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICovCi0gICAgb3JpZ2luYWxUb0Zvcm1hdHRlZDog
ZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IFtsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIgfHwgMF07IAotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0g
Y29sdW1uTnVtYmVyCi0gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICovCi0g
ICAgZm9ybWF0dGVkVG9PcmlnaW5hbDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFtsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIgfHwgMF07
Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYklu
c3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nfQotICogQHBhcmFtIHtBcnJheS48bnVtYmVy
Pn0gb3JpZ2luYWxMaW5lRW5kaW5ncwotICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZm9ybWF0
dGVkTGluZUVuZGluZ3MKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZvcm1hdHRlck1hcHBpbmdQ
YXlsb2FkfSBtYXBwaW5nCi0gKi8KLVdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5n
SW1wbCA9IGZ1bmN0aW9uKG9yaWdpbmFsTGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdz
LCBtYXBwaW5nKQotewotICAgIHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MgPSBvcmlnaW5hbExp
bmVFbmRpbmdzOwotICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGlu
ZUVuZGluZ3M7Ci0gICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nSW1wbC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IGNv
bHVtbk51bWJlcgotICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fQotICAgICAqLwotICAg
IG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
LSAgICB7Ci0gICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gV2ViSW5zcGVjdG9yLkZvcm1h
dHRlci5sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyIHx8IDApOwotICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24g
PSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFw
cGluZy5mb3JtYXR0ZWQsIG9yaWdpbmFsUG9zaXRpb24gfHwgMCk7Ci0gICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuRm9ybWF0dGVyLnBvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9mb3JtYXR0ZWRM
aW5lRW5kaW5ncywgZm9ybWF0dGVkUG9zaXRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gY29s
dW1uTnVtYmVyCi0gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICovCi0gICAg
Zm9ybWF0dGVkVG9PcmlnaW5hbDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQot
ICAgIHsKLSAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9uID0gV2ViSW5zcGVjdG9yLkZvcm1h
dHRlci5sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciB8fCAwKTsKLSAgICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24g
PSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIHRoaXMuX21h
cHBpbmcub3JpZ2luYWwsIGZvcm1hdHRlZFBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5Gb3JtYXR0ZXIucG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVu
ZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24gfHwgMCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHBvc2l0aW9uczEKLSAgICAgKiBAcGFyYW0ge0FycmF5
LjxudW1iZXI+fSBwb3NpdGlvbnMyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uCi0g
ICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIF9jb252ZXJ0UG9zaXRpb246IGZ1
bmN0aW9uKHBvc2l0aW9uczEsIHBvc2l0aW9uczIsIHBvc2l0aW9uKQotICAgIHsKLSAgICAgICAg
dmFyIGluZGV4ID0gcG9zaXRpb25zMS51cHBlckJvdW5kKHBvc2l0aW9uKSAtIDE7Ci0gICAgICAg
IHZhciBjb252ZXJ0ZWRQb3NpdGlvbiA9IHBvc2l0aW9uczJbaW5kZXhdICsgcG9zaXRpb24gLSBw
b3NpdGlvbnMxW2luZGV4XTsKLSAgICAgICAgaWYgKGluZGV4IDwgcG9zaXRpb25zMi5sZW5ndGgg
LSAxICYmIGNvbnZlcnRlZFBvc2l0aW9uID4gcG9zaXRpb25zMltpbmRleCArIDFdKQotICAgICAg
ICAgICAgY29udmVydGVkUG9zaXRpb24gPSBwb3NpdGlvbnMyW2luZGV4ICsgMV07Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0ZWRQb3NpdGlvbjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlcldvcmtlci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk0YTJhLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVu
dCkgewotICAgIGlmICghZXZlbnQuZGF0YS5tZXRob2QpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNlbGZbZXZlbnQuZGF0YS5tZXRob2RdKGV2ZW50LmRhdGEucGFyYW1zKTsKLX07Ci0KLWZ1bmN0
aW9uIGZvcm1hdChwYXJhbXMpCi17Ci0gICAgLy8gRGVmYXVsdCB0byBhIDQtc3BhY2UgaW5kZW50
LgotICAgIHZhciBpbmRlbnRTdHJpbmcgPSBwYXJhbXMuaW5kZW50U3RyaW5nIHx8ICIgICAgIjsK
LSAgICB2YXIgcmVzdWx0ID0ge307Ci0KLSAgICBpZiAocGFyYW1zLm1pbWVUeXBlID09PSAidGV4
dC9odG1sIikgewotICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEhUTUxTY3JpcHRGb3JtYXR0
ZXIoaW5kZW50U3RyaW5nKTsKLSAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdChwYXJh
bXMuY29udGVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lm1hcHBpbmcgPSB7IG9y
aWdpbmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdIH07Ci0gICAgICAgIHJlc3VsdC5jb250ZW50ID0g
Zm9ybWF0U2NyaXB0KHBhcmFtcy5jb250ZW50LCByZXN1bHQubWFwcGluZywgMCwgMCwgaW5kZW50
U3RyaW5nKTsKLSAgICB9Ci0gICAgcG9zdE1lc3NhZ2UocmVzdWx0KTsKLX0KLQotZnVuY3Rpb24g
Z2V0Q2h1bmtDb3VudCh0b3RhbExlbmd0aCwgY2h1bmtTaXplKQotewotICAgIGlmICh0b3RhbExl
bmd0aCA8PSBjaHVua1NpemUpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgdmFyIHJlbWFpbmRl
ciA9IHRvdGFsTGVuZ3RoICUgY2h1bmtTaXplOwotICAgIHZhciBwYXJ0aWFsTGVuZ3RoID0gdG90
YWxMZW5ndGggLSByZW1haW5kZXI7Ci0gICAgcmV0dXJuIChwYXJ0aWFsTGVuZ3RoIC8gY2h1bmtT
aXplKSArIChyZW1haW5kZXIgPyAxIDogMCk7Ci19Ci0KLWZ1bmN0aW9uIG91dGxpbmUocGFyYW1z
KQotewotICAgIGNvbnN0IGNodW5rU2l6ZSA9IDEwMDAwMDsgLy8gY2hhcmFjdGVycyBwZXIgZGF0
YSBjaHVuawotICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gcGFyYW1zLmNvbnRlbnQubGVuZ3RoOwot
ICAgIGNvbnN0IGxpbmVzID0gcGFyYW1zLmNvbnRlbnQuc3BsaXQoIlxuIik7Ci0gICAgY29uc3Qg
Y2h1bmtDb3VudCA9IGdldENodW5rQ291bnQodG90YWxMZW5ndGgsIGNodW5rU2l6ZSk7Ci0gICAg
dmFyIG91dGxpbmVDaHVuayA9IFtdOwotICAgIHZhciBwcmV2aW91c0lkZW50aWZpZXIgPSBudWxs
OwotICAgIHZhciBwcmV2aW91c1Rva2VuID0gbnVsbDsKLSAgICB2YXIgcHJldmlvdXNUb2tlblR5
cGUgPSBudWxsOwotICAgIHZhciBjdXJyZW50Q2h1bmsgPSAxOwotICAgIHZhciBwcm9jZXNzZWRD
aHVua0NoYXJhY3RlcnMgPSAwOwotICAgIHZhciBhZGRlZEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAg
dmFyIGlzUmVhZGluZ0FyZ3VtZW50cyA9IGZhbHNlOwotICAgIHZhciBhcmd1bWVudHNUZXh0ID0g
IiI7Ci0gICAgdmFyIGN1cnJlbnRGdW5jdGlvbiA9IG51bGw7Ci0gICAgdmFyIHNjcmlwdFRva2Vu
aXplciA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlSmF2YVNjcmlwdFRva2VuaXplcigpOwotICAg
IHNjcmlwdFRva2VuaXplci5jb25kaXRpb24gPSBzY3JpcHRUb2tlbml6ZXIuY3JlYXRlSW5pdGlh
bENvbmRpdGlvbigpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2ldOwotICAgICAgICB2YXIgY29sdW1uID0g
MDsKLSAgICAgICAgc2NyaXB0VG9rZW5pemVyLmxpbmUgPSBsaW5lOwotICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICB2YXIgbmV3Q29sdW1uID0gc2NyaXB0VG9rZW5pemVyLm5leHRUb2tlbihjb2x1
bW4pOwotICAgICAgICAgICAgdmFyIHRva2VuVHlwZSA9IHNjcmlwdFRva2VuaXplci50b2tlblR5
cGU7Ci0gICAgICAgICAgICB2YXIgdG9rZW5WYWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbiwg
bmV3Q29sdW1uKTsKLSAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09ICJqYXZhc2NyaXB0LWlk
ZW50IikgewotICAgICAgICAgICAgICAgIHByZXZpb3VzSWRlbnRpZmllciA9IHRva2VuVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuVmFsdWUgJiYgcHJldmlvdXNUb2tlbiA9PT0gImZ1
bmN0aW9uIikgewotICAgICAgICAgICAgICAgICAgICAvLyBBIG5hbWVkIGZ1bmN0aW9uOiAiZnVu
Y3Rpb24gZi4uLiIuCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IHsgbGlu
ZTogaSwgbmFtZTogdG9rZW5WYWx1ZSB9OwotICAgICAgICAgICAgICAgICAgICBhZGRlZEZ1bmN0
aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNJZGVudGlmaWVyID0gbnVs
bDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuVHlwZSA9
PT0gImphdmFzY3JpcHQta2V5d29yZCIpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW5WYWx1
ZSA9PT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNJZGVu
dGlmaWVyICYmIChwcmV2aW91c1Rva2VuID09PSAiPSIgfHwgcHJldmlvdXNUb2tlbiA9PT0gIjoi
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5vbnltb3VzIGZ1bmN0aW9uIGFzc2ln
bmVkIHRvIGFuIGlkZW50aWZpZXI6ICIuLi5mID0gZnVuY3Rpb24uLi4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvciAiZnVuY05hbWU6IGZ1bmN0aW9uLi4uIi4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IHsgbGluZTogaSwgbmFtZTogcHJldmlvdXNJZGVu
dGlmaWVyIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRlZEZ1bmN0aW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzSWRlbnRpZmllciA9IG51bGw7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKHRva2VuVmFsdWUgPT09ICIuIiAmJiBwcmV2aW91c1Rva2VuVHlwZSA9PT0gImphdmFzY3Jp
cHQtaWRlbnQiKQotICAgICAgICAgICAgICAgIHByZXZpb3VzSWRlbnRpZmllciArPSAiLiI7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh0b2tlblZhbHVlID09PSAiKCIgJiYgYWRkZWRGdW5jdGlvbikK
LSAgICAgICAgICAgICAgICBpc1JlYWRpbmdBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAg
aWYgKGlzUmVhZGluZ0FyZ3VtZW50cyAmJiB0b2tlblZhbHVlKQotICAgICAgICAgICAgICAgIGFy
Z3VtZW50c1RleHQgKz0gdG9rZW5WYWx1ZTsKLQotICAgICAgICAgICAgaWYgKHRva2VuVmFsdWUg
PT09ICIpIiAmJiBpc1JlYWRpbmdBcmd1bWVudHMpIHsKLSAgICAgICAgICAgICAgICBhZGRlZEZ1
bmN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaXNSZWFkaW5nQXJndW1lbnRzID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uLmFyZ3VtZW50cyA9IGFyZ3VtZW50
c1RleHQucmVwbGFjZSgvLFtcclxuXHNdKi9nLCAiLCAiKS5yZXBsYWNlKC8oW14sXSlbXHJcblxz
XSsvZywgIiQxIik7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRzVGV4dCA9ICIiOwotICAgICAg
ICAgICAgICAgIG91dGxpbmVDaHVuay5wdXNoKGN1cnJlbnRGdW5jdGlvbik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh0b2tlblZhbHVlLnRyaW0oKS5sZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UgdG9rZW5zLgotICAgICAgICAgICAgICAgIHBy
ZXZpb3VzVG9rZW4gPSB0b2tlblZhbHVlOwotICAgICAgICAgICAgICAgIHByZXZpb3VzVG9rZW5U
eXBlID0gdG9rZW5UeXBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvY2Vzc2VkQ2h1
bmtDaGFyYWN0ZXJzICs9IG5ld0NvbHVtbiAtIGNvbHVtbjsKLSAgICAgICAgICAgIGNvbHVtbiA9
IG5ld0NvbHVtbjsKLQotICAgICAgICAgICAgaWYgKHByb2Nlc3NlZENodW5rQ2hhcmFjdGVycyA+
PSBjaHVua1NpemUpIHsKLSAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IGNodW5rOiBvdXRs
aW5lQ2h1bmssIHRvdGFsOiBjaHVua0NvdW50LCBpbmRleDogY3VycmVudENodW5rKysgfSk7Ci0g
ICAgICAgICAgICAgICAgb3V0bGluZUNodW5rID0gW107Ci0gICAgICAgICAgICAgICAgcHJvY2Vz
c2VkQ2h1bmtDaGFyYWN0ZXJzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAo
Y29sdW1uIDwgbGluZS5sZW5ndGgpOwotICAgIH0KLSAgICBwb3N0TWVzc2FnZSh7IGNodW5rOiBv
dXRsaW5lQ2h1bmssIHRvdGFsOiBjaHVua0NvdW50LCBpbmRleDogY2h1bmtDb3VudCB9KTsKLX0K
LQotZnVuY3Rpb24gZm9ybWF0U2NyaXB0KGNvbnRlbnQsIG1hcHBpbmcsIG9mZnNldCwgZm9ybWF0
dGVkT2Zmc2V0LCBpbmRlbnRTdHJpbmcpCi17Ci0gICAgdmFyIGZvcm1hdHRlZENvbnRlbnQ7Ci0g
ICAgdHJ5IHsKLSAgICAgICAgdmFyIHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoY29udGVudCk7
Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEZvcm1hdHRlZENvbnRlbnRCdWlsZGVyKHRva2Vu
aXplci5jb250ZW50KCksIG1hcHBpbmcsIG9mZnNldCwgZm9ybWF0dGVkT2Zmc2V0LCBpbmRlbnRT
dHJpbmcpOwotICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEphdmFTY3JpcHRGb3JtYXR0ZXIo
dG9rZW5pemVyLCBidWlsZGVyKTsKLSAgICAgICAgZm9ybWF0dGVyLmZvcm1hdCgpOwotICAgICAg
ICBmb3JtYXR0ZWRDb250ZW50ID0gYnVpbGRlci5jb250ZW50KCk7Ci0gICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICBmb3JtYXR0ZWRDb250ZW50ID0gY29udGVudDsKLSAgICB9Ci0gICAgcmV0dXJu
IGZvcm1hdHRlZENvbnRlbnQ7Ci19Ci0KLVdlYkluc3BlY3RvciA9IHt9OwotCi1BcnJheS5wcm90
b3R5cGUua2V5U2V0ID0gZnVuY3Rpb24oKQotewotICAgIHZhciBrZXlzID0ge307Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKQotICAgICAgICBrZXlzW3RoaXNbaV1d
ID0gdHJ1ZTsKLSAgICByZXR1cm4ga2V5czsKLX07Ci0KLWltcG9ydFNjcmlwdHMoIlNvdXJjZVRv
a2VuaXplci5qcyIpOwotaW1wb3J0U2NyaXB0cygiU291cmNlSFRNTFRva2VuaXplci5qcyIpOwot
aW1wb3J0U2NyaXB0cygiU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5qcyIpOwotCi1IVE1MU2Ny
aXB0Rm9ybWF0dGVyID0gZnVuY3Rpb24oaW5kZW50U3RyaW5nKQotewotICAgIFdlYkluc3BlY3Rv
ci5Tb3VyY2VIVE1MVG9rZW5pemVyLmNhbGwodGhpcyk7Ci0gICAgdGhpcy5faW5kZW50U3RyaW5n
ID0gaW5kZW50U3RyaW5nOwotfQotCi1IVE1MU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsK
LSAgICBmb3JtYXQ6IGZ1bmN0aW9uKGNvbnRlbnQpCi0gICAgewotICAgICAgICB0aGlzLmxpbmUg
PSBjb250ZW50OwotICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKLSAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29udGVudCA9ICIiOwotICAgICAgICB0aGlzLl9tYXBwaW5nID0geyBvcmln
aW5hbDogWzBdLCBmb3JtYXR0ZWQ6IFswXSB9OwotICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IDA7
Ci0KLSAgICAgICAgdmFyIGN1cnNvciA9IDA7Ci0gICAgICAgIHdoaWxlIChjdXJzb3IgPCB0aGlz
Ll9jb250ZW50Lmxlbmd0aCkKLSAgICAgICAgICAgIGN1cnNvciA9IHRoaXMubmV4dFRva2VuKGN1
cnNvcik7Ci0KLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCArPSB0aGlzLl9jb250ZW50
LnN1YnN0cmluZyh0aGlzLl9wb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IHRo
aXMuX2Zvcm1hdHRlZENvbnRlbnQsIG1hcHBpbmc6IHRoaXMuX21hcHBpbmcgfTsKLSAgICB9LAot
Ci0gICAgc2NyaXB0U3RhcnRlZDogZnVuY3Rpb24oY3Vyc29yKQotICAgIHsKLSAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29udGVudCArPSB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0aGlzLl9wb3Np
dGlvbiwgY3Vyc29yKTsKLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCArPSAiXG4iOwot
ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IGN1cnNvcjsKLSAgICB9LAotCi0gICAgc2NyaXB0RW5k
ZWQ6IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7Ci0gICAgICAgIGlmIChjdXJzb3IgPT09IHRoaXMu
X3Bvc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzY3JpcHRDb250
ZW50ID0gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodGhpcy5fcG9zaXRpb24sIGN1cnNvcik7Ci0g
ICAgICAgIHRoaXMuX21hcHBpbmcub3JpZ2luYWwucHVzaCh0aGlzLl9wb3NpdGlvbik7Ci0gICAg
ICAgIHRoaXMuX21hcHBpbmcuZm9ybWF0dGVkLnB1c2godGhpcy5fZm9ybWF0dGVkQ29udGVudC5s
ZW5ndGgpOwotICAgICAgICB2YXIgZm9ybWF0dGVkU2NyaXB0Q29udGVudCA9IGZvcm1hdFNjcmlw
dChzY3JpcHRDb250ZW50LCB0aGlzLl9tYXBwaW5nLCB0aGlzLl9wb3NpdGlvbiwgdGhpcy5fZm9y
bWF0dGVkQ29udGVudC5sZW5ndGgsIHRoaXMuX2luZGVudFN0cmluZyk7Ci0KLSAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29udGVudCArPSBmb3JtYXR0ZWRTY3JpcHRDb250ZW50OwotICAgICAgICB0
aGlzLl9wb3NpdGlvbiA9IGN1cnNvcjsKLSAgICB9LAotCi0gICAgc3R5bGVTaGVldFN0YXJ0ZWQ6
IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7Ci0gICAgfSwKLQotICAgIHN0eWxlU2hlZXRFbmRlZDog
ZnVuY3Rpb24oY3Vyc29yKQotICAgIHsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNw
ZWN0b3IuU291cmNlSFRNTFRva2VuaXplci5wcm90b3R5cGUKLX0KLQotZnVuY3Rpb24gcmVxdWly
ZSgpCi17Ci0gICAgcmV0dXJuIHBhcnNlOwotfQotCi12YXIgZXhwb3J0cyA9IHt9OwotaW1wb3J0
U2NyaXB0cygiVWdsaWZ5SlMvcGFyc2UtanMuanMiKTsKLXZhciBwYXJzZSA9IGV4cG9ydHM7Ci0K
LWltcG9ydFNjcmlwdHMoIkphdmFTY3JpcHRGb3JtYXR0ZXIuanMiKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0U25pcHBldE1vZGVsLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRTbmlwcGV0TW9kZWwuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTAyMDAuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRTbmlwcGV0TW9kZWwuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw1NDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldvcmtz
cGFjZX0gd29ya3NwYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5TY3JpcHRTbmlwcGV0TW9kZWwgPSBm
dW5jdGlvbih3b3Jrc3BhY2UpCi17Ci0gICAgdGhpcy5fd29ya3NwYWNlID0gd29ya3NwYWNlOwot
ICAgIC8qKiB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+fSAqLwot
ICAgIHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElkID0ge307Ci0gICAgdGhpcy5fc2NyaXB0
Rm9yVUlTb3VyY2VDb2RlID0gbmV3IE1hcCgpOwotICAgIC8qKiB7T2JqZWN0LjxzdHJpbmcsIFdl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGU+fSAqLwotICAgIHRoaXMuX3VpU291cmNlQ29kZUZvclNu
aXBwZXRJZCA9IHt9OwotICAgIHRoaXMuX3NuaXBwZXRJZEZvclVJU291cmNlQ29kZSA9IG5ldyBN
YXAoKTsKLSAgICAKLSAgICB0aGlzLl9zbmlwcGV0U3RvcmFnZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
U25pcHBldFN0b3JhZ2UoInNjcmlwdCIsICJTY3JpcHQgc25pcHBldCAjIik7Ci0gICAgdGhpcy5f
bGFzdFNuaXBwZXRFdmFsdWF0aW9uSW5kZXhTZXR0aW5nID0gV2ViSW5zcGVjdG9yLnNldHRpbmdz
LmNyZWF0ZVNldHRpbmcoImxhc3RTbmlwcGV0RXZhbHVhdGlvbkluZGV4IiwgMCk7Ci0gICAgdGhp
cy5fc25pcHBldFNjcmlwdE1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNuaXBwZXRTY3JpcHRN
YXBwaW5nKHRoaXMpOwotICAgIHRoaXMuX3dvcmtzcGFjZVByb3ZpZGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5TaW1wbGVXb3Jrc3BhY2VQcm92aWRlcih0aGlzLl93b3Jrc3BhY2UsIFdlYkluc3BlY3Rv
ci5wcm9qZWN0VHlwZXMuU25pcHBldHMpOwotICAgIHRoaXMucmVzZXQoKTsKLSAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkV2ZW50cy5HbG9iYWxPYmplY3RDbGVhcmVkLCB0aGlzLl9kZWJ1Z2dlclJlc2V0LCB0
aGlzKTsKLX0KLQotV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNuaXBwZXRTY3JpcHRNYXBw
aW5nfQotICAgICAqLwotICAgIGdldCBzY3JpcHRNYXBwaW5nKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9zbmlwcGV0U2NyaXB0TWFwcGluZzsKLSAgICB9LAotCi0gICAgX2xvYWRTbmlw
cGV0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNuaXBwZXRzID0gdGhpcy5fc25p
cHBldFN0b3JhZ2Uuc25pcHBldHMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbmlw
cGV0cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2FkZFNjcmlwdFNuaXBwZXQoc25p
cHBldHNbaV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuVUlTb3VyY2VDb2RlfQotICAgICAqLwotICAgIGNyZWF0ZVNjcmlwdFNuaXBwZXQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzbmlwcGV0ID0gdGhpcy5fc25pcHBldFN0b3JhZ2Uu
Y3JlYXRlU25pcHBldCgpOwotICAgICAgICByZXR1cm4gdGhpcy5fYWRkU2NyaXB0U25pcHBldChz
bmlwcGV0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
U25pcHBldH0gc25pcHBldAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNv
ZGV9Ci0gICAgICovCi0gICAgX2FkZFNjcmlwdFNuaXBwZXQ6IGZ1bmN0aW9uKHNuaXBwZXQpCi0g
ICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlUHJvdmlkZXIu
YWRkRmlsZUJ5TmFtZSgiIiwgc25pcHBldC5uYW1lLCBuZXcgV2ViSW5zcGVjdG9yLlNuaXBwZXRD
b250ZW50UHJvdmlkZXIoc25pcHBldCksIHRydWUpOwotICAgICAgICB2YXIgc2NyaXB0RmlsZSA9
IG5ldyBXZWJJbnNwZWN0b3IuU25pcHBldFNjcmlwdEZpbGUodGhpcywgdWlTb3VyY2VDb2RlKTsK
LSAgICAgICAgdWlTb3VyY2VDb2RlLnNldFNjcmlwdEZpbGUoc2NyaXB0RmlsZSk7Ci0gICAgICAg
IHRoaXMuX3NuaXBwZXRJZEZvclVJU291cmNlQ29kZS5wdXQodWlTb3VyY2VDb2RlLCBzbmlwcGV0
LmlkKTsKLSAgICAgICAgdWlTb3VyY2VDb2RlLnNldFNvdXJjZU1hcHBpbmcodGhpcy5fc25pcHBl
dFNjcmlwdE1hcHBpbmcpOwotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVGb3JTbmlwcGV0SWRb
c25pcHBldC5pZF0gPSB1aVNvdXJjZUNvZGU7Ci0gICAgICAgIHJldHVybiB1aVNvdXJjZUNvZGU7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNl
Q29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgZGVsZXRlU2NyaXB0U25pcHBldDogZnVu
Y3Rpb24odWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgdmFyIHNuaXBwZXRJZCA9IHRoaXMu
X3NuaXBwZXRJZEZvclVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgdmFy
IHNuaXBwZXQgPSB0aGlzLl9zbmlwcGV0U3RvcmFnZS5zbmlwcGV0Rm9ySWQoc25pcHBldElkKTsK
LSAgICAgICAgdGhpcy5fc25pcHBldFN0b3JhZ2UuZGVsZXRlU25pcHBldChzbmlwcGV0KTsKLSAg
ICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludHModWlTb3VyY2VDb2RlKTsKLSAgICAgICAgdGhp
cy5fcmVsZWFzZVNuaXBwZXRTY3JpcHQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgZGVsZXRlIHRo
aXMuX3VpU291cmNlQ29kZUZvclNuaXBwZXRJZFtzbmlwcGV0LmlkXTsKLSAgICAgICAgdGhpcy5f
c25pcHBldElkRm9yVUlTb3VyY2VDb2RlLnJlbW92ZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICB0
aGlzLl93b3Jrc3BhY2VQcm92aWRlci5yZW1vdmVGaWxlQnlOYW1lKCIiLCBzbmlwcGV0Lm5hbWUp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJj
ZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lCi0gICAg
ICovCi0gICAgcmVuYW1lU2NyaXB0U25pcHBldDogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBuZXdO
YW1lKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRMb2NhdGlvbnMgPSB0aGlzLl9yZW1v
dmVCcmVha3BvaW50cyh1aVNvdXJjZUNvZGUpOwotICAgICAgICB2YXIgc25pcHBldElkID0gdGhp
cy5fc25pcHBldElkRm9yVUlTb3VyY2VDb2RlLmdldCh1aVNvdXJjZUNvZGUpOwotICAgICAgICB2
YXIgc25pcHBldCA9IHRoaXMuX3NuaXBwZXRTdG9yYWdlLnNuaXBwZXRGb3JJZChzbmlwcGV0SWQp
OwotICAgICAgICBpZiAoIXNuaXBwZXQgfHwgIW5ld05hbWUgfHwgc25pcHBldC5uYW1lID09PSBu
ZXdOYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzbmlwcGV0Lm5hbWUgPSBuZXdO
YW1lOwotICAgICAgICB0aGlzLl9yZXN0b3JlQnJlYWtwb2ludHModWlTb3VyY2VDb2RlLCBicmVh
a3BvaW50TG9jYXRpb25zKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gbmV3Q29udGVudAotICAgICAqLwotICAgIF9zZXRTY3JpcHRTbmlwcGV0Q29udGVudDogZnVu
Y3Rpb24odWlTb3VyY2VDb2RlLCBuZXdDb250ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHNuaXBw
ZXRJZCA9IHRoaXMuX3NuaXBwZXRJZEZvclVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKTsK
LSAgICAgICAgdmFyIHNuaXBwZXQgPSB0aGlzLl9zbmlwcGV0U3RvcmFnZS5zbmlwcGV0Rm9ySWQo
c25pcHBldElkKTsKLSAgICAgICAgc25pcHBldC5jb250ZW50ID0gbmV3Q29udGVudDsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1
aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBfc2NyaXB0U25pcHBldEVkaXRlZDogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgdmFyIHNjcmlwdCA9IHRoaXMuX3NjcmlwdEZv
clVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgaWYgKCFzY3JpcHQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRMb2NhdGlvbnMgPSB0
aGlzLl9yZW1vdmVCcmVha3BvaW50cyh1aVNvdXJjZUNvZGUpOwotICAgICAgICB2YXIgc2NyaXB0
VUlTb3VyY2VDb2RlID0gdGhpcy5fcmVsZWFzZVNuaXBwZXRTY3JpcHQodWlTb3VyY2VDb2RlKTsK
LSAgICAgICAgdGhpcy5fcmVzdG9yZUJyZWFrcG9pbnRzKHVpU291cmNlQ29kZSwgYnJlYWtwb2lu
dExvY2F0aW9ucyk7Ci0gICAgICAgIGlmIChzY3JpcHRVSVNvdXJjZUNvZGUpCi0gICAgICAgICAg
ICB0aGlzLl9yZXN0b3JlQnJlYWtwb2ludHMoc2NyaXB0VUlTb3VyY2VDb2RlLCBicmVha3BvaW50
TG9jYXRpb25zKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNu
aXBwZXRJZAotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBfbmV4dEV2YWx1
YXRpb25JbmRleDogZnVuY3Rpb24oc25pcHBldElkKQotICAgIHsKLSAgICAgICAgdmFyIGV2YWx1
YXRpb25JbmRleCA9IHRoaXMuX2xhc3RTbmlwcGV0RXZhbHVhdGlvbkluZGV4U2V0dGluZy5nZXQo
KSArIDE7Ci0gICAgICAgIHRoaXMuX2xhc3RTbmlwcGV0RXZhbHVhdGlvbkluZGV4U2V0dGluZy5z
ZXQoZXZhbHVhdGlvbkluZGV4KTsKLSAgICAgICAgcmV0dXJuIGV2YWx1YXRpb25JbmRleDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
fSB1aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBldmFsdWF0ZVNjcmlwdFNuaXBwZXQ6IGZ1bmN0
aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50TG9jYXRpb25z
ID0gdGhpcy5fcmVtb3ZlQnJlYWtwb2ludHModWlTb3VyY2VDb2RlKTsKLSAgICAgICAgdGhpcy5f
cmVsZWFzZVNuaXBwZXRTY3JpcHQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgdGhpcy5fcmVzdG9y
ZUJyZWFrcG9pbnRzKHVpU291cmNlQ29kZSwgYnJlYWtwb2ludExvY2F0aW9ucyk7Ci0gICAgICAg
IHZhciBzbmlwcGV0SWQgPSB0aGlzLl9zbmlwcGV0SWRGb3JVSVNvdXJjZUNvZGUuZ2V0KHVpU291
cmNlQ29kZSk7Ci0gICAgICAgIHZhciBldmFsdWF0aW9uSW5kZXggPSB0aGlzLl9uZXh0RXZhbHVh
dGlvbkluZGV4KHNuaXBwZXRJZCk7Ci0gICAgICAgIHVpU291cmNlQ29kZS5fZXZhbHVhdGlvbklu
ZGV4ID0gZXZhbHVhdGlvbkluZGV4OwotICAgICAgICB2YXIgZXZhbHVhdGlvblVybCA9IHRoaXMu
X2V2YWx1YXRpb25Tb3VyY2VVUkwodWlTb3VyY2VDb2RlKTsKLQotICAgICAgICB2YXIgZXhwcmVz
c2lvbiA9IHVpU291cmNlQ29kZS53b3JraW5nQ29weSgpOwotICAgICAgICAKLSAgICAgICAgLy8g
SW4gb3JkZXIgdG8gc3RvcCBvbiB0aGUgYnJlYWtwb2ludHMgZHVyaW5nIHRoZSBzbmlwcGV0IGV2
YWx1YXRpb24gd2UgbmVlZCB0byBjb21waWxlIGFuZCBydW4gaXQgc2VwYXJhdGVseS4KLSAgICAg
ICAgLy8gSWYgc2VwYXJhdGUgY29tcGlsYXRpb24gYW5kIGV4ZWN1dGlvbiBpcyBub3Qgc3VwcG9y
dGVkIGJ5IHRoZSBwb3J0IHdlIGZhbGwgYmFjayB0byBldmFsdWF0aW9uIGluIGNvbnNvbGUuCi0g
ICAgICAgIC8vIEluIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0aGF0IHNpbmNlIGRlYnVnZ2VyIGlzIGFs
cmVhZHkgcGF1c2VkLgotICAgICAgICAvLyBXZSBkbyB0aGUgc2FtZSB3aGVuIHdlIGFyZSBzdG9w
cGVkIG9uIHRoZSBjYWxsIGZyYW1lICBzaW5jZSBkZWJ1Z2dlciBpcyBhbHJlYWR5IHBhdXNlZCBh
bmQgY2FuIG5vdCBzdG9wIG9uIGJyZWFrcG9pbnQgYW55bW9yZS4KLSAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNlbGVjdGVkQ2FsbEZyYW1lKCkgfHwgIUNhcGFiaWxpdGll
cy5zZXBhcmF0ZVNjcmlwdENvbXBpbGF0aW9uQW5kRXhlY3V0aW9uRW5hYmxlZCkgewotICAgICAg
ICAgICAgZXhwcmVzc2lvbiA9IHVpU291cmNlQ29kZS53b3JraW5nQ29weSgpICsgIlxuLy9AIHNv
dXJjZVVSTD0iICsgZXZhbHVhdGlvblVybCArICJcbiI7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0
b3IuZXZhbHVhdGVJbkNvbnNvbGUoZXhwcmVzc2lvbiwgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFdlYkluc3BlY3Rvci5zaG93Q29uc29s
ZSgpOwotICAgICAgICBEZWJ1Z2dlckFnZW50LmNvbXBpbGVTY3JpcHQoZXhwcmVzc2lvbiwgZXZh
bHVhdGlvblVybCwgY29tcGlsZUNhbGxiYWNrLmJpbmQodGhpcykpOwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7c3Ry
aW5nPX0gc2NyaXB0SWQKLSAgICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBzeW50YXhFcnJvck1l
c3NhZ2UKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNvbXBpbGVDYWxsYmFjayhlcnJv
ciwgc2NyaXB0SWQsIHN5bnRheEVycm9yTWVzc2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKCF1aVNvdXJjZUNvZGUgfHwgdWlTb3VyY2VDb2RlLl9ldmFsdWF0aW9uSW5kZXggIT09IGV2
YWx1YXRpb25JbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlm
IChlcnJvcikgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzY3Jp
cHRJZCkgewotICAgICAgICAgICAgICAgIHZhciBjb25zb2xlTWVzc2FnZSA9IFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5jcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzeW50YXhFcnJvck1lc3NhZ2UgfHwgIiIpOwotICAgICAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5jb25zb2xlLmFkZE1lc3NhZ2UoY29uc29sZU1lc3NhZ2Up
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dmFyIGJyZWFrcG9pbnRMb2NhdGlvbnMgPSB0aGlzLl9yZW1vdmVCcmVha3BvaW50cyh1aVNvdXJj
ZUNvZGUpOwotICAgICAgICAgICAgdGhpcy5fcmVzdG9yZUJyZWFrcG9pbnRzKHVpU291cmNlQ29k
ZSwgYnJlYWtwb2ludExvY2F0aW9ucyk7Ci0KLSAgICAgICAgICAgIHRoaXMuX3J1blNjcmlwdChz
Y3JpcHRJZCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtE
ZWJ1Z2dlckFnZW50LlNjcmlwdElkfSBzY3JpcHRJZAotICAgICAqLwotICAgIF9ydW5TY3JpcHQ6
IGZ1bmN0aW9uKHNjcmlwdElkKQotICAgIHsKLSAgICAgICAgdmFyIGN1cnJlbnRFeGVjdXRpb25D
b250ZXh0ID0gV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2RlbC5jdXJyZW50RXhlY3V0aW9uQ29udGV4
dCgpOwotICAgICAgICBEZWJ1Z2dlckFnZW50LnJ1blNjcmlwdChzY3JpcHRJZCwgY3VycmVudEV4
ZWN1dGlvbkNvbnRleHQgPyBjdXJyZW50RXhlY3V0aW9uQ29udGV4dC5pZCA6IHVuZGVmaW5lZCwg
ImNvbnNvbGUiLCBmYWxzZSwgcnVuQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHs/
UnVudGltZUFnZW50LlJlbW90ZU9iamVjdH0gcmVzdWx0Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9v
bGVhbj19IHdhc1Rocm93bgotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcnVuQ2FsbGJh
Y2soZXJyb3IsIHJlc3VsdCwgd2FzVGhyb3duKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMuX3ByaW50
UnVuU2NyaXB0UmVzdWx0KHJlc3VsdCwgd2FzVGhyb3duKTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0gez9SdW50aW1lQWdlbnQuUmVtb3RlT2JqZWN0fSByZXN1
bHQKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3YXNUaHJvd24KLSAgICAgKi8KLSAgICBfcHJp
bnRSdW5TY3JpcHRSZXN1bHQ6IGZ1bmN0aW9uKHJlc3VsdCwgd2FzVGhyb3duKQotICAgIHsKLSAg
ICAgICAgdmFyIGxldmVsID0gKHdhc1Rocm93biA/IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuRXJyb3IgOiBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLkxvZyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLmNyZWF0ZShXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5K
UywgbGV2ZWwsICIiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQs
IFtyZXN1bHRdKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRkTWVzc2FnZShtZXNz
YWdlKQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLkxvY2F0aW9ufSByYXdMb2NhdGlvbgotICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5VSUxvY2F0aW9ufQotICAgICAqLwotICAgIF9yYXdMb2NhdGlvblRvVUlMb2NhdGlvbjog
ZnVuY3Rpb24ocmF3TG9jYXRpb24pCi0gICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0g
dGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbcmF3TG9jYXRpb24uc2NyaXB0SWRdOwotICAg
ICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgcmF3
TG9jYXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyIHx8IDApOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9
IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLkxvY2F0aW9ufQotICAgICAqLwotICAgIF91aUxvY2F0aW9uVG9SYXdM
b2NhdGlvbjogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
Ci0gICAgewotICAgICAgICB2YXIgc2NyaXB0ID0gdGhpcy5fc2NyaXB0Rm9yVUlTb3VyY2VDb2Rl
LmdldCh1aVNvdXJjZUNvZGUpOwotICAgICAgICBpZiAoIXNjcmlwdCkKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5j
cmVhdGVSYXdMb2NhdGlvbihzY3JpcHQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gc2NyaXB0
Ci0gICAgICovCi0gICAgX2FkZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAgICAg
ICAgdmFyIHNuaXBwZXRJZCA9IHRoaXMuX3NuaXBwZXRJZEZvclNvdXJjZVVSTChzY3JpcHQuc291
cmNlVVJMKTsKLSAgICAgICAgaWYgKCFzbmlwcGV0SWQpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl91aVNvdXJjZUNvZGVGb3JTbmlwcGV0SWRb
c25pcHBldElkXTsKLQotICAgICAgICBpZiAoIXVpU291cmNlQ29kZSB8fCB0aGlzLl9ldmFsdWF0
aW9uU291cmNlVVJMKHVpU291cmNlQ29kZSkgIT09IHNjcmlwdC5zb3VyY2VVUkwpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX3NjcmlwdEZvclVJ
U291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKSk7Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29k
ZUZvclNjcmlwdElkW3NjcmlwdC5zY3JpcHRJZF0gPSB1aVNvdXJjZUNvZGU7Ci0gICAgICAgIHRo
aXMuX3NjcmlwdEZvclVJU291cmNlQ29kZS5wdXQodWlTb3VyY2VDb2RlLCBzY3JpcHQpOwotICAg
ICAgICB1aVNvdXJjZUNvZGUuc2NyaXB0RmlsZSgpLnNldEhhc0RpdmVyZ2VkRnJvbVZNKGZhbHNl
KTsKLSAgICAgICAgc2NyaXB0LnB1c2hTb3VyY2VNYXBwaW5nKHRoaXMuX3NuaXBwZXRTY3JpcHRN
YXBwaW5nKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
VUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48T2JqZWN0
Pn0KLSAgICAgKi8KLSAgICBfcmVtb3ZlQnJlYWtwb2ludHM6IGZ1bmN0aW9uKHVpU291cmNlQ29k
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50TG9jYXRpb25zID0gV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRMb2NhdGlvbnNGb3JVSVNvdXJjZUNvZGUodWlT
b3VyY2VDb2RlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50TG9jYXRp
b25zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnJlYWtwb2ludExvY2F0aW9uc1tpXS5icmVh
a3BvaW50LnJlbW92ZSgpOwotICAgICAgICByZXR1cm4gYnJlYWtwb2ludExvY2F0aW9uczsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
fSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBicmVha3BvaW50
TG9jYXRpb25zCi0gICAgICovCi0gICAgX3Jlc3RvcmVCcmVha3BvaW50czogZnVuY3Rpb24odWlT
b3VyY2VDb2RlLCBicmVha3BvaW50TG9jYXRpb25zKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBicmVha3BvaW50TG9jYXRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICB2YXIgdWlMb2NhdGlvbiA9IGJyZWFrcG9pbnRMb2NhdGlvbnNbaV0udWlMb2NhdGlvbjsKLSAg
ICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludExvY2F0aW9uc1tpXS5icmVha3Bv
aW50OwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFr
cG9pbnQodWlTb3VyY2VDb2RlLCB1aUxvY2F0aW9uLmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29u
ZGl0aW9uKCksIGJyZWFrcG9pbnQuZW5hYmxlZCgpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNl
Q29kZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAgICov
Ci0gICAgX3JlbGVhc2VTbmlwcGV0U2NyaXB0OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAg
ewotICAgICAgICB2YXIgc2NyaXB0ID0gdGhpcy5fc2NyaXB0Rm9yVUlTb3VyY2VDb2RlLmdldCh1
aVNvdXJjZUNvZGUpOwotICAgICAgICBpZiAoIXNjcmlwdCkKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotCi0gICAgICAgIHVpU291cmNlQ29kZS5zY3JpcHRGaWxlKCkuc2V0SXNEaXZlcmdpbmdG
cm9tVk0odHJ1ZSk7Ci0gICAgICAgIHVpU291cmNlQ29kZS5zY3JpcHRGaWxlKCkuc2V0SGFzRGl2
ZXJnZWRGcm9tVk0odHJ1ZSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl91aVNvdXJjZUNvZGVGb3JT
Y3JpcHRJZFtzY3JpcHQuc2NyaXB0SWRdOwotICAgICAgICB0aGlzLl9zY3JpcHRGb3JVSVNvdXJj
ZUNvZGUucmVtb3ZlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIGRlbGV0ZSB1aVNvdXJjZUNvZGUu
X2V2YWx1YXRpb25JbmRleDsKLSAgICAgICAgc2NyaXB0LnBvcFNvdXJjZU1hcHBpbmcodGhpcy5f
c25pcHBldFNjcmlwdE1hcHBpbmcpOwotICAgICAgICB1aVNvdXJjZUNvZGUuc2NyaXB0RmlsZSgp
LnNldElzRGl2ZXJnaW5nRnJvbVZNKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHNjcmlwdC5yYXdM
b2NhdGlvblRvVUlMb2NhdGlvbigwLCAwKS51aVNvdXJjZUNvZGU7Ci0gICAgfSwKLQotICAgIF9k
ZWJ1Z2dlclJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBzbmlwcGV0
SWQgaW4gdGhpcy5fdWlTb3VyY2VDb2RlRm9yU25pcHBldElkKSB7Ci0gICAgICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlID0gdGhpcy5fdWlTb3VyY2VDb2RlRm9yU25pcHBldElkW3NuaXBwZXRJZF07
Ci0gICAgICAgICAgICB0aGlzLl9yZWxlYXNlU25pcHBldFNjcmlwdCh1aVNvdXJjZUNvZGUpOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAg
ICAqLwotICAgIF9ldmFsdWF0aW9uU291cmNlVVJMOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0g
ICAgewotICAgICAgICB2YXIgZXZhbHVhdGlvblN1ZmZpeCA9ICJfIiArIHVpU291cmNlQ29kZS5f
ZXZhbHVhdGlvbkluZGV4OwotICAgICAgICB2YXIgc25pcHBldElkID0gdGhpcy5fc25pcHBldElk
Rm9yVUlTb3VyY2VDb2RlLmdldCh1aVNvdXJjZUNvZGUpOwotICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLlNjcmlwdC5zbmlwcGV0U291cmNlVVJMUHJlZml4ICsgc25pcHBldElkICsgZXZhbHVh
dGlvblN1ZmZpeDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNv
dXJjZVVSTAotICAgICAqIEByZXR1cm4ge3N0cmluZ3xudWxsfQotICAgICAqLwotICAgIF9zbmlw
cGV0SWRGb3JTb3VyY2VVUkw6IGZ1bmN0aW9uKHNvdXJjZVVSTCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzbmlwcGV0UHJlZml4ID0gV2ViSW5zcGVjdG9yLlNjcmlwdC5zbmlwcGV0U291cmNlVVJMUHJl
Zml4OwotICAgICAgICBpZiAoIXNvdXJjZVVSTC5zdGFydHNXaXRoKHNuaXBwZXRQcmVmaXgpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBzcGxpdHRlZFVSTCA9IHNvdXJj
ZVVSTC5zdWJzdHJpbmcoc25pcHBldFByZWZpeC5sZW5ndGgpLnNwbGl0KCJfIik7Ci0gICAgICAg
IHZhciBzbmlwcGV0SWQgPSBzcGxpdHRlZFVSTFswXTsKLSAgICAgICAgcmV0dXJuIHNuaXBwZXRJ
ZDsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8qKiBA
dHlwZSB7IU9iamVjdC48c3RyaW5nLCBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlPn0gKi8KLSAg
ICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWQgPSB7fTsKLSAgICAgICAgdGhpcy5f
c2NyaXB0Rm9yVUlTb3VyY2VDb2RlID0gbmV3IE1hcCgpOwotICAgICAgICAvKiogQHR5cGUgeyFP
YmplY3QuPHN0cmluZywgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59ICovCi0gICAgICAgIHRo
aXMuX3VpU291cmNlQ29kZUZvclNuaXBwZXRJZCA9IHt9OwotICAgICAgICB0aGlzLl9zbmlwcGV0
SWRGb3JVSVNvdXJjZUNvZGUgPSBuZXcgTWFwKCk7Ci0gICAgICAgIHRoaXMuX3dvcmtzcGFjZVBy
b3ZpZGVyLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX2xvYWRTbmlwcGV0cygpOwotICAgIH0sCi0K
LSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlNjcmlwdEZpbGV9
Ci0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlNjcmlwdFNuaXBwZXRNb2RlbH0gc2NyaXB0U25pcHBldE1vZGVsCi0gKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICovCi1XZWJJbnNwZWN0b3Iu
U25pcHBldFNjcmlwdEZpbGUgPSBmdW5jdGlvbihzY3JpcHRTbmlwcGV0TW9kZWwsIHVpU291cmNl
Q29kZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU2NyaXB0RmlsZS5jYWxsKHRoaXMpOwotICAgIHRo
aXMuX3NjcmlwdFNuaXBwZXRNb2RlbCA9IHNjcmlwdFNuaXBwZXRNb2RlbDsKLSAgICB0aGlzLl91
aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7Ci0gICAgdGhpcy5faGFzRGl2ZXJnZWRGcm9tVk0g
PSB0cnVlOwotICAgIHRoaXMuX3VpU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLldvcmtpbmdDb3B5Q29tbWl0dGVkLCB0aGlzLl93b3Jr
aW5nQ29weUNvbW1pdHRlZCwgdGhpcyk7Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuV29ya2luZ0NvcHlDaGFu
Z2VkLCB0aGlzLl93b3JraW5nQ29weUNoYW5nZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3Iu
U25pcHBldFNjcmlwdEZpbGUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e2Jvb2xlYW59Ci0gICAgICovCi0gICAgaGFzRGl2ZXJnZWRGcm9tVk06IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oYXNEaXZlcmdlZEZyb21WTTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBoYXNEaXZlcmdlZEZyb21WTQotICAgICAq
LwotICAgIHNldEhhc0RpdmVyZ2VkRnJvbVZNOiBmdW5jdGlvbihoYXNEaXZlcmdlZEZyb21WTSkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX2hhc0RpdmVyZ2VkRnJvbVZNID0gaGFzRGl2ZXJnZWRGcm9t
Vk07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICov
Ci0gICAgaXNEaXZlcmdpbmdGcm9tVk06IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9pc0RpdmVyZ2luZ0Zyb21WTTsKLSAgICB9LAotCi0gICAgY2hlY2tNYXBwaW5nOiBm
dW5jdGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIGlzTWVyZ2luZ1RvVk06IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29s
ZWFufSBpc0RpdmVyZ2luZ0Zyb21WTQotICAgICAqLwotICAgIHNldElzRGl2ZXJnaW5nRnJvbVZN
OiBmdW5jdGlvbihpc0RpdmVyZ2luZ0Zyb21WTSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lzRGl2
ZXJnaW5nRnJvbVZNID0gaXNEaXZlcmdpbmdGcm9tVk07Ci0gICAgfSwKLQotICAgIF93b3JraW5n
Q29weUNvbW1pdHRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2NyaXB0U25p
cHBldE1vZGVsLl9zZXRTY3JpcHRTbmlwcGV0Q29udGVudCh0aGlzLl91aVNvdXJjZUNvZGUsIHRo
aXMuX3VpU291cmNlQ29kZS53b3JraW5nQ29weSgpKTsKLSAgICB9LAotCi0gICAgX3dvcmtpbmdD
b3B5Q2hhbmdlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2NyaXB0U25pcHBl
dE1vZGVsLl9zY3JpcHRTbmlwcGV0RWRpdGVkKHRoaXMuX3VpU291cmNlQ29kZSk7Ci0gICAgfSwK
LQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuU2NyaXB0U291
cmNlTWFwcGluZ30KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbH0g
c2NyaXB0U25pcHBldE1vZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5TbmlwcGV0U2NyaXB0TWFwcGlu
ZyA9IGZ1bmN0aW9uKHNjcmlwdFNuaXBwZXRNb2RlbCkKLXsKLSAgICB0aGlzLl9zY3JpcHRTbmlw
cGV0TW9kZWwgPSBzY3JpcHRTbmlwcGV0TW9kZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5TbmlwcGV0
U2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuUmF3TG9jYXRpb259IHJhd0xvY2F0aW9uCi0gICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlVJTG9jYXRpb259Ci0gICAgICovCi0gICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246
IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGRlYnVnZ2VyTW9kZWxM
b2NhdGlvbiA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuTG9jYXRpb259
ICovKHJhd0xvY2F0aW9uKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdFNuaXBwZXRNb2Rl
bC5fcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oZGVidWdnZXJNb2RlbExvY2F0aW9uKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1
aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5Mb2NhdGlvbn0KLSAgICAgKi8KLSAgICB1aUxvY2F0aW9uVG9SYXdMb2Nh
dGlvbjogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0U25pcHBldE1vZGVsLl91aUxvY2F0aW9u
VG9SYXdMb2NhdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAg
aXNJZGVudGl0eTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VVUkwKLSAgICAgKiBA
cmV0dXJuIHtzdHJpbmd8bnVsbH0KLSAgICAgKi8KLSAgICBzbmlwcGV0SWRGb3JTb3VyY2VVUkw6
IGZ1bmN0aW9uKHNvdXJjZVVSTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRT
bmlwcGV0TW9kZWwuX3NuaXBwZXRJZEZvclNvdXJjZVVSTChzb3VyY2VVUkwpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAotICAg
ICAqLwotICAgIGFkZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAgICAgICAgdGhp
cy5fc2NyaXB0U25pcHBldE1vZGVsLl9hZGRTY3JpcHQoc2NyaXB0KTsKLSAgICB9Ci19Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlN0YXRpY0NvbnRl
bnRQcm92aWRlcn0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNuaXBwZXR9IHNuaXBwZXQKLSAq
LwotV2ViSW5zcGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlkZXIgPSBmdW5jdGlvbihzbmlwcGV0
KQotewotICAgIFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIuY2FsbCh0aGlzLCBX
ZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TY3JpcHQsIHNuaXBwZXQuY29udGVudCk7Ci19Ci0K
LVdlYkluc3BlY3Rvci5TbmlwcGV0Q29udGVudFByb3ZpZGVyLnByb3RvdHlwZSA9IHsKLSAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIucHJvdG90eXBlCi19
Ci0KLS8qKgotICogQHR5cGUgez9XZWJJbnNwZWN0b3IuU2NyaXB0U25pcHBldE1vZGVsfQotICov
Ci1XZWJJbnNwZWN0b3Iuc2NyaXB0U25pcHBldE1vZGVsID0gbnVsbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c05hdmlnYXRvci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c05hdmlnYXRvci5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlY2EwNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNOYXZpZ2F0b3IuanMKKysrIC9kZXYv
bnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLgotICogT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rv
ci5TY3JpcHRzTmF2aWdhdG9yID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5PYmpl
Y3QuY2FsbCh0aGlzKTsKLSAgICAKLSAgICB0aGlzLl90YWJiZWRQYW5lID0gbmV3IFdlYkluc3Bl
Y3Rvci5UYWJiZWRQYW5lKCk7Ci0gICAgdGhpcy5fdGFiYmVkUGFuZS5zaHJpbmthYmxlVGFicyA9
IHRydWU7Ci0gICAgdGhpcy5fdGFiYmVkUGFuZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5hdmln
YXRvci10YWJiZWQtcGFuZSIpOwotCi0gICAgdGhpcy5fc2NyaXB0c1ZpZXcgPSBuZXcgV2ViSW5z
cGVjdG9yLk5hdmlnYXRvclZpZXcoKTsKLSAgICB0aGlzLl9zY3JpcHRzVmlldy5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JWaWV3LkV2ZW50cy5JdGVtU2VsZWN0ZWQsIHRo
aXMuX3NjcmlwdFNlbGVjdGVkLCB0aGlzKTsKLQotICAgIHRoaXMuX2NvbnRlbnRTY3JpcHRzVmll
dyA9IG5ldyBXZWJJbnNwZWN0b3IuTmF2aWdhdG9yVmlldygpOwotICAgIHRoaXMuX2NvbnRlbnRT
Y3JpcHRzVmlldy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5OYXZpZ2F0b3JWaWV3LkV2
ZW50cy5JdGVtU2VsZWN0ZWQsIHRoaXMuX3NjcmlwdFNlbGVjdGVkLCB0aGlzKTsKLQotICAgIHRo
aXMuX3NuaXBwZXRzVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuU25pcHBldHNOYXZpZ2F0b3JWaWV3
KCk7Ci0gICAgdGhpcy5fc25pcHBldHNWaWV3LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
Lk5hdmlnYXRvclZpZXcuRXZlbnRzLkl0ZW1TZWxlY3RlZCwgdGhpcy5fc2NyaXB0U2VsZWN0ZWQs
IHRoaXMpOwotICAgIHRoaXMuX3NuaXBwZXRzVmlldy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5OYXZpZ2F0b3JWaWV3LkV2ZW50cy5GaWxlUmVuYW1lZCwgdGhpcy5fZmlsZVJlbmFtZWQs
IHRoaXMpOwotICAgIHRoaXMuX3NuaXBwZXRzVmlldy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5TbmlwcGV0c05hdmlnYXRvclZpZXcuRXZlbnRzLlNuaXBwZXRDcmVhdGlvblJlcXVlc3Rl
ZCwgdGhpcy5fc25pcHBldENyZWF0aW9uUmVxdWVzdGVkLCB0aGlzKTsKLSAgICB0aGlzLl9zbmlw
cGV0c1ZpZXcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU25pcHBldHNOYXZpZ2F0b3JW
aWV3LkV2ZW50cy5JdGVtUmVuYW1pbmdSZXF1ZXN0ZWQsIHRoaXMuX2l0ZW1SZW5hbWluZ1JlcXVl
c3RlZCwgdGhpcyk7Ci0KLSAgICB0aGlzLl90YWJiZWRQYW5lLmFwcGVuZFRhYihXZWJJbnNwZWN0
b3IuU2NyaXB0c05hdmlnYXRvci5TY3JpcHRzVGFiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNv
dXJjZXMiKSwgdGhpcy5fc2NyaXB0c1ZpZXcpOwotICAgIHRoaXMuX3RhYmJlZFBhbmUuc2VsZWN0
VGFiKFdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLlNjcmlwdHNUYWIpOwotICAgIHRoaXMu
X3RhYmJlZFBhbmUuYXBwZW5kVGFiKFdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLkNvbnRl
bnRTY3JpcHRzVGFiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRlbnQgc2NyaXB0cyIpLCB0
aGlzLl9jb250ZW50U2NyaXB0c1ZpZXcpOwotICAgIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVu
dHNTZXR0aW5ncy5zbmlwcGV0c1N1cHBvcnQuaXNFbmFibGVkKCkpCi0gICAgICAgIHRoaXMuX3Rh
YmJlZFBhbmUuYXBwZW5kVGFiKFdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLlNuaXBwZXRz
VGFiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNuaXBwZXRzIiksIHRoaXMuX3NuaXBwZXRzVmll
dyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLkV2ZW50cyA9IHsKLSAgICBT
Y3JpcHRTZWxlY3RlZDogIlNjcmlwdFNlbGVjdGVkIiwKLSAgICBTbmlwcGV0Q3JlYXRpb25SZXF1
ZXN0ZWQ6ICJTbmlwcGV0Q3JlYXRpb25SZXF1ZXN0ZWQiLAotICAgIEl0ZW1SZW5hbWluZ1JlcXVl
c3RlZDogIkl0ZW1SZW5hbWluZ1JlcXVlc3RlZCIsCi0gICAgRmlsZVJlbmFtZWQ6ICJGaWxlUmVu
YW1lZCIKLX0KLQotV2ViSW5zcGVjdG9yLlNjcmlwdHNOYXZpZ2F0b3IuU2NyaXB0c1RhYiA9ICJz
Y3JpcHRzIjsKLVdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLkNvbnRlbnRTY3JpcHRzVGFi
ID0gImNvbnRlbnRTY3JpcHRzIjsKLVdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLlNuaXBw
ZXRzVGFiID0gInNuaXBwZXRzIjsKLQotV2ViSW5zcGVjdG9yLlNjcmlwdHNOYXZpZ2F0b3IucHJv
dG90eXBlID0gewotICAgIC8qCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0g
ICAgICovCi0gICAgZ2V0IHZpZXcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmJl
ZFBhbmU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJ
U291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX25hdmlnYXRvclZpZXdGb3JV
SVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIGlmICh1
aVNvdXJjZUNvZGUuaXNDb250ZW50U2NyaXB0KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nv
bnRlbnRTY3JpcHRzVmlldzsKLSAgICAgICAgZWxzZSBpZiAodWlTb3VyY2VDb2RlLnByb2plY3Qo
KS50eXBlKCkgPT09IFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuU25pcHBldHMpCi0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5fc25pcHBldHNWaWV3OwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc2NyaXB0c1ZpZXc7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0g
ICAgYWRkVUlTb3VyY2VDb2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAg
ICB0aGlzLl9uYXZpZ2F0b3JWaWV3Rm9yVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSkuYWRkVUlT
b3VyY2VDb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAg
cmVtb3ZlVUlTb3VyY2VDb2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAg
ICB0aGlzLl9uYXZpZ2F0b3JWaWV3Rm9yVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSkucmVtb3Zl
VUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICogQHBh
cmFtIHtib29sZWFuPX0gc2VsZWN0Ci0gICAgICovCi0gICAgcmV2ZWFsVUlTb3VyY2VDb2RlOiBm
dW5jdGlvbih1aVNvdXJjZUNvZGUsIHNlbGVjdCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX25hdmln
YXRvclZpZXdGb3JVSVNvdXJjZUNvZGUodWlTb3VyY2VDb2RlKS5yZXZlYWxVSVNvdXJjZUNvZGUo
dWlTb3VyY2VDb2RlLCBzZWxlY3QpOwotICAgICAgICBpZiAodWlTb3VyY2VDb2RlLmlzQ29udGVu
dFNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMuX3RhYmJlZFBhbmUuc2VsZWN0VGFiKFdlYkluc3Bl
Y3Rvci5TY3JpcHRzTmF2aWdhdG9yLkNvbnRlbnRTY3JpcHRzVGFiKTsKLSAgICAgICAgZWxzZSBp
ZiAodWlTb3VyY2VDb2RlLnByb2plY3QoKS50eXBlKCkgIT09IFdlYkluc3BlY3Rvci5wcm9qZWN0
VHlwZXMuU25pcHBldHMpCi0gICAgICAgICAgICB0aGlzLl90YWJiZWRQYW5lLnNlbGVjdFRhYihX
ZWJJbnNwZWN0b3IuU2NyaXB0c05hdmlnYXRvci5TY3JpcHRzVGFiKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNv
ZGUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGJvb2xlYW4pPX0gY2FsbGJhY2sKLSAgICAgKi8K
LSAgICByZW5hbWU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgY2FsbGJhY2spCi0gICAgewotICAg
ICAgICB0aGlzLl9uYXZpZ2F0b3JWaWV3Rm9yVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSkucmVu
YW1lKHVpU291cmNlQ29kZSwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfc2NyaXB0U2Vs
ZWN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNjcmlwdHNOYXZpZ2F0b3IuRXZlbnRzLlNjcmlwdFNl
bGVjdGVkLCBldmVudC5kYXRhKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2ZpbGVSZW5hbWVkOiBmdW5j
dGlvbihldmVudCkKLSAgICB7ICAgIAotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuU2NyaXB0c05hdmlnYXRvci5FdmVudHMuRmlsZVJlbmFtZWQsIGV2
ZW50LmRhdGEpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfaXRlbVJlbmFtaW5nUmVxdWVzdGVkOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLkV2ZW50cy5JdGVtUmVuYW1pbmdSZXF1ZXN0
ZWQsIGV2ZW50LmRhdGEpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfc25pcHBldENyZWF0aW9uUmVxdWVz
dGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7ICAgIAotICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU2NyaXB0c05hdmlnYXRvci5FdmVudHMuU25pcHBl
dENyZWF0aW9uUmVxdWVzdGVkLCBldmVudC5kYXRhKTsKLSAgICB9LAotCi0gICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5OYXZpZ2F0b3JWaWV3fQotICovCi1XZWJJbnNw
ZWN0b3IuU25pcHBldHNOYXZpZ2F0b3JWaWV3ID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3Bl
Y3Rvci5OYXZpZ2F0b3JWaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5oYW5kbGVDb250ZXh0TWVudS5iaW5kKHRoaXMp
LCBmYWxzZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TbmlwcGV0c05hdmlnYXRvclZpZXcuRXZlbnRz
ID0gewotICAgIFNuaXBwZXRDcmVhdGlvblJlcXVlc3RlZDogIlNuaXBwZXRDcmVhdGlvblJlcXVl
c3RlZCIsCi0gICAgSXRlbVJlbmFtaW5nUmVxdWVzdGVkOiAiSXRlbVJlbmFtaW5nUmVxdWVzdGVk
IgotfQotCi1XZWJJbnNwZWN0b3IuU25pcHBldHNOYXZpZ2F0b3JWaWV3LnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlVJU291cmNlQ29kZT19IHVpU291cmNlQ29kZQotICAgICAqLwotICAgIGhhbmRs
ZUNvbnRleHRNZW51OiBmdW5jdGlvbihldmVudCwgdWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAg
ICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudShldmVudCk7
Ci0gICAgICAgIGlmICh1aVNvdXJjZUNvZGUpIHsKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFw
cGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSdW4iKSwgdGhpcy5faGFuZGxlRXZhbHVh
dGVTbmlwcGV0LmJpbmQodGhpcywgdWlTb3VyY2VDb2RlKSk7Ci0gICAgICAgICAgICBjb250ZXh0
TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVuYW1lIiksIHRoaXMuX2hh
bmRsZVJlbmFtZVNuaXBwZXQuYmluZCh0aGlzLCB1aVNvdXJjZUNvZGUpKTsKLSAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZW1vdmUiKSwg
dGhpcy5faGFuZGxlUmVtb3ZlU25pcHBldC5iaW5kKHRoaXMsIHVpU291cmNlQ29kZSkpOwotICAg
ICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5ldyIpLCB0
aGlzLl9oYW5kbGVDcmVhdGVTbmlwcGV0LmJpbmQodGhpcykpOwotICAgICAgICBjb250ZXh0TWVu
dS5zaG93KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX2hhbmRsZUV2YWx1YXRl
U25pcHBldDogZnVuY3Rpb24odWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgaWYgKHVpU291
cmNlQ29kZS5wcm9qZWN0KCkudHlwZSgpICE9PSBXZWJJbnNwZWN0b3IucHJvamVjdFR5cGVzLlNu
aXBwZXRzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2NyaXB0
U25pcHBldE1vZGVsLmV2YWx1YXRlU2NyaXB0U25pcHBldCh1aVNvdXJjZUNvZGUpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVp
U291cmNlQ29kZQotICAgICAqLwotICAgIF9oYW5kbGVSZW5hbWVTbmlwcGV0OiBmdW5jdGlvbih1
aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuU2NyaXB0c05hdmlnYXRvci5FdmVudHMuSXRlbVJlbmFtaW5nUmVxdWVz
dGVkLCB1aVNvdXJjZUNvZGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqLwotICAgIF9oYW5k
bGVSZW1vdmVTbmlwcGV0OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICBp
ZiAodWlTb3VyY2VDb2RlLnByb2plY3QoKS50eXBlKCkgIT09IFdlYkluc3BlY3Rvci5wcm9qZWN0
VHlwZXMuU25pcHBldHMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5zY3JpcHRTbmlwcGV0TW9kZWwuZGVsZXRlU2NyaXB0U25pcHBldCh1aVNvdXJjZUNvZGUpOwot
ICAgIH0sCi0KLSAgICBfaGFuZGxlQ3JlYXRlU25pcHBldDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fc25pcHBldENyZWF0aW9uUmVxdWVzdGVkKCk7Ci0gICAgfSwKLQotICAgIF9z
bmlwcGV0Q3JlYXRpb25SZXF1ZXN0ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5TbmlwcGV0c05hdmlnYXRvclZp
ZXcuRXZlbnRzLlNuaXBwZXRDcmVhdGlvblJlcXVlc3RlZCwgbnVsbCk7Ci0gICAgfSwKLQotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk5hdmlnYXRvclZpZXcucHJvdG90eXBlCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMTA4ZDEwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMTM0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1pbXBvcnRTY3JpcHQoIkJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMiKTsKLWlt
cG9ydFNjcmlwdCgiQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMiKTsKLWltcG9ydFNjcmlwdCgiRmls
dGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmpzIik7Ci1pbXBvcnRTY3JpcHQoIlVJU291cmNlQ29k
ZUZyYW1lLmpzIik7Ci1pbXBvcnRTY3JpcHQoIkphdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyIpOwot
aW1wb3J0U2NyaXB0KCJOYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlci5qcyIpOwotaW1wb3J0U2Ny
aXB0KCJOYXZpZ2F0b3JWaWV3LmpzIik7Ci1pbXBvcnRTY3JpcHQoIlJldmlzaW9uSGlzdG9yeVZp
ZXcuanMiKTsKLWltcG9ydFNjcmlwdCgiU2NvcGVDaGFpblNpZGViYXJQYW5lLmpzIik7Ci1pbXBv
cnRTY3JpcHQoIlNjcmlwdHNOYXZpZ2F0b3IuanMiKTsKLWltcG9ydFNjcmlwdCgiU2NyaXB0c1Nl
YXJjaFNjb3BlLmpzIik7Ci1pbXBvcnRTY3JpcHQoIlNuaXBwZXRKYXZhU2NyaXB0U291cmNlRnJh
bWUuanMiKTsKLWltcG9ydFNjcmlwdCgiU3R5bGVTaGVldE91dGxpbmVEaWFsb2cuanMiKTsKLWlt
cG9ydFNjcmlwdCgiVGFiYmVkRWRpdG9yQ29udGFpbmVyLmpzIik7Ci1pbXBvcnRTY3JpcHQoIldh
dGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcyIpOwotaW1wb3J0U2NyaXB0KCJXb3JrZXJzU2lk
ZWJhclBhbmUuanMiKTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtX
ZWJJbnNwZWN0b3IuVGFiYmVkRWRpdG9yQ29udGFpbmVyRGVsZWdhdGV9Ci0gKiBAaW1wbGVtZW50
cyB7V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LlByb3ZpZGVyfQotICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5QYW5lbH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldvcmtzcGFjZT19IHdvcmtz
cGFjZUZvclRlc3QKLSAqLwotV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKHdv
cmtzcGFjZUZvclRlc3QpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlBhbmVsLmNhbGwodGhpcywgInNj
cmlwdHMiKTsKLSAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1MoInNjcmlwdHNQYW5lbC5jc3Mi
KTsKLQotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5uYXZpZ2F0b3JXYXNPbmNlSGlkZGVuID0g
V2ViSW5zcGVjdG9yLnNldHRpbmdzLmNyZWF0ZVNldHRpbmcoIm5hdmlnYXRvcldhc09uY2VIaWRk
ZW4iLCBmYWxzZSk7Ci0gICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmRlYnVnZ2VyU2lkZWJhckhp
ZGRlbiA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKCJkZWJ1Z2dlclNpZGVi
YXJIaWRkZW4iLCBmYWxzZSk7Ci0KLSAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2VGb3JU
ZXN0IHx8IFdlYkluc3BlY3Rvci53b3Jrc3BhY2U7Ci0KLSAgICBmdW5jdGlvbiB2aWV3R2V0dGVy
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVWaWV3OwotICAgIH0KLSAgICBX
ZWJJbnNwZWN0b3IuR29Ub0xpbmVEaWFsb2cuaW5zdGFsbCh0aGlzLCB2aWV3R2V0dGVyLmJpbmQo
dGhpcykpOwotCi0gICAgdmFyIGhlbHBTZWN0aW9uID0gV2ViSW5zcGVjdG9yLnNob3J0Y3V0c1Nj
cmVlbi5zZWN0aW9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU291cmNlcyBQYW5lbCIpKTsKLSAg
ICB0aGlzLmRlYnVnVG9vbGJhciA9IHRoaXMuX2NyZWF0ZURlYnVnVG9vbGJhcigpOwotCi0gICAg
Y29uc3QgaW5pdGlhbERlYnVnU2lkZWJhcldpZHRoID0gMjI1OwotICAgIGNvbnN0IG1pbmltdW1E
ZWJ1Z1NpZGViYXJXaWR0aFBlcmNlbnQgPSA1MDsKLSAgICB0aGlzLmNyZWF0ZVNpZGViYXJWaWV3
KHRoaXMuZWxlbWVudCwgV2ViSW5zcGVjdG9yLlNpZGViYXJWaWV3LlNpZGViYXJQb3NpdGlvbi5F
bmQsIGluaXRpYWxEZWJ1Z1NpZGViYXJXaWR0aCk7Ci0gICAgdGhpcy5zcGxpdFZpZXcuZWxlbWVu
dC5pZCA9ICJzY3JpcHRzLXNwbGl0LXZpZXciOwotICAgIHRoaXMuc3BsaXRWaWV3LnNldE1pbmlt
dW1TaWRlYmFyV2lkdGgoUHJlZmVyZW5jZXMubWluU2NyaXB0c1NpZGViYXJXaWR0aCk7Ci0gICAg
dGhpcy5zcGxpdFZpZXcuc2V0TWluaW11bU1haW5XaWR0aFBlcmNlbnQobWluaW11bURlYnVnU2lk
ZWJhcldpZHRoUGVyY2VudCk7Ci0KLSAgICB0aGlzLmRlYnVnU2lkZWJhclJlc2l6ZVdpZGdldEVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmRlYnVnU2lk
ZWJhclJlc2l6ZVdpZGdldEVsZW1lbnQuaWQgPSAic2NyaXB0cy1kZWJ1Zy1zaWRlYmFyLXJlc2l6
ZXItd2lkZ2V0IjsKLSAgICB0aGlzLnNwbGl0Vmlldy5pbnN0YWxsUmVzaXplcih0aGlzLmRlYnVn
U2lkZWJhclJlc2l6ZVdpZGdldEVsZW1lbnQpOwotCi0gICAgLy8gQ3JlYXRlIHNjcmlwdHMgbmF2
aWdhdG9yCi0gICAgY29uc3QgaW5pdGlhbE5hdmlnYXRvcldpZHRoID0gMjI1OwotICAgIGNvbnN0
IG1pbmltdW1WaWV3c0NvbnRhaW5lcldpZHRoUGVyY2VudCA9IDUwOwotICAgIHRoaXMuZWRpdG9y
VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclZpZXcoV2ViSW5zcGVjdG9yLlNpZGViYXJW
aWV3LlNpZGViYXJQb3NpdGlvbi5TdGFydCwgInNjcmlwdHNQYW5lbE5hdmlnYXRvclNpZGViYXJX
aWR0aCIsIGluaXRpYWxOYXZpZ2F0b3JXaWR0aCk7Ci0gICAgdGhpcy5lZGl0b3JWaWV3LmVsZW1l
bnQudGFiSW5kZXggPSAwOwotCi0gICAgdGhpcy5lZGl0b3JWaWV3LnNldE1pbmltdW1TaWRlYmFy
V2lkdGgoUHJlZmVyZW5jZXMubWluU2NyaXB0c1NpZGViYXJXaWR0aCk7Ci0gICAgdGhpcy5lZGl0
b3JWaWV3LnNldE1pbmltdW1NYWluV2lkdGhQZXJjZW50KG1pbmltdW1WaWV3c0NvbnRhaW5lcldp
ZHRoUGVyY2VudCk7Ci0gICAgdGhpcy5lZGl0b3JWaWV3LnNob3codGhpcy5zcGxpdFZpZXcubWFp
bkVsZW1lbnQpOwotCi0gICAgdGhpcy5fbmF2aWdhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5TY3Jp
cHRzTmF2aWdhdG9yKCk7Ci0gICAgdGhpcy5fbmF2aWdhdG9yLnZpZXcuc2hvdyh0aGlzLmVkaXRv
clZpZXcuc2lkZWJhckVsZW1lbnQpOwotCi0gICAgdGhpcy5fZWRpdG9yQ29udGFpbmVyID0gbmV3
IFdlYkluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIodGhpcywgInByZXZpb3VzbHlWaWV3
ZWRGaWxlcyIpOwotICAgIHRoaXMuX2VkaXRvckNvbnRhaW5lci5zaG93KHRoaXMuZWRpdG9yVmll
dy5tYWluRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9uYXZpZ2F0b3JDb250cm9sbGVyID0gbmV3IFdl
Ykluc3BlY3Rvci5OYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlcih0aGlzLmVkaXRvclZpZXcsIHRo
aXMuX25hdmlnYXRvci52aWV3LCB0aGlzLl9lZGl0b3JDb250YWluZXIudmlldyk7Ci0KLSAgICB0
aGlzLl9uYXZpZ2F0b3IuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2NyaXB0c05hdmln
YXRvci5FdmVudHMuU2NyaXB0U2VsZWN0ZWQsIHRoaXMuX3NjcmlwdFNlbGVjdGVkLCB0aGlzKTsK
LSAgICB0aGlzLl9uYXZpZ2F0b3IuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2NyaXB0
c05hdmlnYXRvci5FdmVudHMuU25pcHBldENyZWF0aW9uUmVxdWVzdGVkLCB0aGlzLl9zbmlwcGV0
Q3JlYXRpb25SZXF1ZXN0ZWQsIHRoaXMpOwotICAgIHRoaXMuX25hdmlnYXRvci5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5TY3JpcHRzTmF2aWdhdG9yLkV2ZW50cy5JdGVtUmVuYW1pbmdS
ZXF1ZXN0ZWQsIHRoaXMuX2l0ZW1SZW5hbWluZ1JlcXVlc3RlZCwgdGhpcyk7Ci0gICAgdGhpcy5f
bmF2aWdhdG9yLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNjcmlwdHNOYXZpZ2F0b3Iu
RXZlbnRzLkZpbGVSZW5hbWVkLCB0aGlzLl9maWxlUmVuYW1lZCwgdGhpcyk7Ci0KLSAgICB0aGlz
Ll9lZGl0b3JDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVGFiYmVkRWRp
dG9yQ29udGFpbmVyLkV2ZW50cy5FZGl0b3JTZWxlY3RlZCwgdGhpcy5fZWRpdG9yU2VsZWN0ZWQs
IHRoaXMpOwotICAgIHRoaXMuX2VkaXRvckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIuRXZlbnRzLkVkaXRvckNsb3NlZCwgdGhpcy5f
ZWRpdG9yQ2xvc2VkLCB0aGlzKTsKLQotICAgIHRoaXMuc3BsaXRWaWV3Lm1haW5FbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuZGVidWdTaWRlYmFyUmVzaXplV2lkZ2V0RWxlbWVudCk7Ci0KLSAgICB0
aGlzLnNpZGViYXJQYW5lcyA9IHt9OwotICAgIHRoaXMuc2lkZWJhclBhbmVzLndhdGNoRXhwcmVz
c2lvbnMgPSBuZXcgV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZSgpOwot
ICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjayA9IG5ldyBXZWJJbnNwZWN0b3IuQ2FsbFN0
YWNrU2lkZWJhclBhbmUoKTsKLSAgICB0aGlzLnNpZGViYXJQYW5lcy5zY29wZWNoYWluID0gbmV3
IFdlYkluc3BlY3Rvci5TY29wZUNoYWluU2lkZWJhclBhbmUoKTsKLSAgICB0aGlzLnNpZGViYXJQ
YW5lcy5qc0JyZWFrcG9pbnRzID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2lu
dHNTaWRlYmFyUGFuZShXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIsIHRoaXMuX3Nob3dT
b3VyY2VMaW5lLmJpbmQodGhpcykpOwotICAgIHRoaXMuc2lkZWJhclBhbmVzLmRvbUJyZWFrcG9p
bnRzID0gV2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuY3JlYXRlUHJveHko
dGhpcyk7Ci0gICAgdGhpcy5zaWRlYmFyUGFuZXMueGhyQnJlYWtwb2ludHMgPSBuZXcgV2ViSW5z
cGVjdG9yLlhIUkJyZWFrcG9pbnRzU2lkZWJhclBhbmUoKTsKLSAgICB0aGlzLnNpZGViYXJQYW5l
cy5ldmVudExpc3RlbmVyQnJlYWtwb2ludHMgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50c1NpZGViYXJQYW5lKCk7Ci0KLSAgICBpZiAoQ2FwYWJpbGl0aWVzLmNhbklu
c3BlY3RXb3JrZXJzICYmICFXZWJJbnNwZWN0b3IuV29ya2VyTWFuYWdlci5pc1dvcmtlckZyb250
ZW5kKCkpIHsKLSAgICAgICAgV29ya2VyQWdlbnQuZW5hYmxlKCk7Ci0gICAgICAgIHRoaXMuc2lk
ZWJhclBhbmVzLndvcmtlckxpc3QgPSBuZXcgV2ViSW5zcGVjdG9yLldvcmtlcnNTaWRlYmFyUGFu
ZShXZWJJbnNwZWN0b3Iud29ya2VyTWFuYWdlcik7Ci0gICAgfQotCi0gICAgdGhpcy5zaWRlYmFy
UGFuZXMuY2FsbHN0YWNrLnJlZ2lzdGVyU2hvcnRjdXRzKHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMu
YmluZCh0aGlzKSk7Ci0gICAgdGhpcy5yZWdpc3RlclNob3J0Y3V0cyhXZWJJbnNwZWN0b3IuU2Ny
aXB0c1BhbmVsRGVzY3JpcHRvci5TaG9ydGN1dEtleXMuRXZhbHVhdGVTZWxlY3Rpb25JbkNvbnNv
bGUsIHRoaXMuX2V2YWx1YXRlU2VsZWN0aW9uSW5Db25zb2xlLmJpbmQodGhpcykpOwotICAgIHRo
aXMucmVnaXN0ZXJTaG9ydGN1dHMoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbERlc2NyaXB0b3Iu
U2hvcnRjdXRLZXlzLkdvVG9NZW1iZXIsIHRoaXMuX3Nob3dPdXRsaW5lRGlhbG9nLmJpbmQodGhp
cykpOwotICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLlRvZ2dsZUJyZWFrcG9pbnQsIHRoaXMuX3RvZ2dsZUJy
ZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0KLSAgICB2YXIgcGFuZWxFbmFibGVySGVhZGluZyA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiWW91IG5lZWQgdG8gZW5hYmxlIGRlYnVnZ2luZyBiZWZvcmUg
eW91IGNhbiB1c2UgdGhlIFNjcmlwdHMgcGFuZWwuIik7Ci0gICAgdmFyIHBhbmVsRW5hYmxlckRp
c2NsYWltZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsaW5nIGRlYnVnZ2luZyB3aWxs
IG1ha2Ugc2NyaXB0cyBydW4gc2xvd2VyLiIpOwotICAgIHZhciBwYW5lbEVuYWJsZXJCdXR0b24g
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBEZWJ1Z2dpbmciKTsKLQotICAgIHRoaXMu
cGFuZWxFbmFibGVyVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuUGFuZWxFbmFibGVyVmlldygic2Ny
aXB0cyIsIHBhbmVsRW5hYmxlckhlYWRpbmcsIHBhbmVsRW5hYmxlckRpc2NsYWltZXIsIHBhbmVs
RW5hYmxlckJ1dHRvbik7Ci0gICAgdGhpcy5wYW5lbEVuYWJsZXJWaWV3LmFkZEV2ZW50TGlzdGVu
ZXIoImVuYWJsZSBjbGlja2VkIiwgdGhpcy5fZW5hYmxlRGVidWdnaW5nLCB0aGlzKTsKLQotICAg
IHRoaXMuZW5hYmxlVG9nZ2xlQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0
b24oIiIsICJlbmFibGUtdG9nZ2xlLXN0YXR1cy1iYXItaXRlbSIpOwotICAgIHRoaXMuZW5hYmxl
VG9nZ2xlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdG9nZ2xlRGVidWdn
aW5nLCB0aGlzKTsKLSAgICBpZiAoIUNhcGFiaWxpdGllcy5kZWJ1Z2dlckNhdXNlc1JlY29tcGls
YXRpb24pCi0gICAgICAgIHRoaXMuZW5hYmxlVG9nZ2xlQnV0dG9uLmVsZW1lbnQuYWRkU3R5bGVD
bGFzcygiaGlkZGVuIik7Ci0KLSAgICB0aGlzLl9wYXVzZU9uRXhjZXB0aW9uQnV0dG9uID0gbmV3
IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oIiIsICJzY3JpcHRzLXBhdXNlLW9uLWV4Y2Vw
dGlvbnMtc3RhdHVzLWJhci1pdGVtIiwgMyk7Ci0gICAgdGhpcy5fcGF1c2VPbkV4Y2VwdGlvbkJ1
dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZVBhdXNlT25FeGNlcHRp
b25zLCB0aGlzKTsKLQotICAgIHRoaXMuX3RvZ2dsZUZvcm1hdFNvdXJjZUJ1dHRvbiA9IG5ldyBX
ZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJldHR5
IHByaW50IiksICJzY3JpcHRzLXRvZ2dsZS1wcmV0dHktcHJpbnQtc3RhdHVzLWJhci1pdGVtIik7
Ci0gICAgdGhpcy5fdG9nZ2xlRm9ybWF0U291cmNlQnV0dG9uLnRvZ2dsZWQgPSBmYWxzZTsKLSAg
ICB0aGlzLl90b2dnbGVGb3JtYXRTb3VyY2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl90b2dnbGVGb3JtYXRTb3VyY2UsIHRoaXMpOwotCi0gICAgdGhpcy5fc2NyaXB0Vmll
d1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0gICAgdGhpcy5fc2NyaXB0Vmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLmNsYXNzTmFtZSA9
ICJpbmxpbmUtYmxvY2siOwotCi0gICAgdGhpcy5fc2NyaXB0Vmlld1N0YXR1c0JhclRleHRDb250
YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9zY3JpcHRW
aWV3U3RhdHVzQmFyVGV4dENvbnRhaW5lci5jbGFzc05hbWUgPSAiaW5saW5lLWJsb2NrIjsKLQot
ICAgIHRoaXMuX2luc3RhbGxEZWJ1Z2dlclNpZGViYXJDb250cm9sbGVyKCk7Ci0KLSAgICBXZWJJ
bnNwZWN0b3IuZG9ja0NvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRG9j
a0NvbnRyb2xsZXIuRXZlbnRzLkRvY2tTaWRlQ2hhbmdlZCwgdGhpcy5fZG9ja1NpZGVDaGFuZ2Vk
LmJpbmQodGhpcykpOwotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5zcGxpdFZlcnRpY2FsbHlX
aGVuRG9ja2VkVG9SaWdodC5hZGRDaGFuZ2VMaXN0ZW5lcih0aGlzLl9kb2NrU2lkZUNoYW5nZWQu
YmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fZG9ja1NpZGVDaGFuZ2VkKCk7Ci0KLSAgICB0aGlzLl9z
b3VyY2VGcmFtZXNCeVVJU291cmNlQ29kZSA9IG5ldyBNYXAoKTsKLSAgICB0aGlzLl91cGRhdGVE
ZWJ1Z2dlckJ1dHRvbnMoKTsKLSAgICB0aGlzLl9wYXVzZU9uRXhjZXB0aW9uU3RhdGVDaGFuZ2Vk
KCk7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmlzUGF1c2VkKCkpCi0gICAg
ICAgIHRoaXMuX2RlYnVnZ2VyUGF1c2VkKCk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
cGF1c2VPbkV4Y2VwdGlvblN0YXRlU3RyaW5nLmFkZENoYW5nZUxpc3RlbmVyKHRoaXMuX3BhdXNl
T25FeGNlcHRpb25TdGF0ZUNoYW5nZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRz
LkRlYnVnZ2VyV2FzRW5hYmxlZCwgdGhpcy5fZGVidWdnZXJXYXNFbmFibGVkLCB0aGlzKTsKLSAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlcldhc0Rpc2FibGVkLCB0aGlzLl9kZWJ1Z2dl
cldhc0Rpc2FibGVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBh
dXNlZCwgdGhpcy5fZGVidWdnZXJQYXVzZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZl
bnRzLkRlYnVnZ2VyUmVzdW1lZCwgdGhpcy5fZGVidWdnZXJSZXN1bWVkLCB0aGlzKTsKLSAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkV2ZW50cy5DYWxsRnJhbWVTZWxlY3RlZCwgdGhpcy5fY2FsbEZyYW1lU2Vs
ZWN0ZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkNvbnNvbGVDb21tYW5kRXZh
bHVhdGVkSW5TZWxlY3RlZENhbGxGcmFtZSwgdGhpcy5fY29uc29sZUNvbW1hbmRFdmFsdWF0ZWRJ
blNlbGVjdGVkQ2FsbEZyYW1lLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2Rl
bC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5FeGVj
dXRpb25MaW5lQ2hhbmdlZCwgdGhpcy5fZXhlY3V0aW9uTGluZUNoYW5nZWQsIHRoaXMpOwotICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRzQWN0aXZlU3RhdGVDaGFuZ2VkLCB0aGlz
Ll9icmVha3BvaW50c0FjdGl2ZVN0YXRlQ2hhbmdlZCwgdGhpcyk7Ci0KLSAgICBXZWJJbnNwZWN0
b3Iuc3RhcnRCYXRjaFVwZGF0ZSgpOwotICAgIHZhciB1aVNvdXJjZUNvZGVzID0gdGhpcy5fd29y
a3NwYWNlLnVpU291cmNlQ29kZXMoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpU291cmNl
Q29kZXMubGVuZ3RoOyArK2kpCi0gICAgICAgIHRoaXMuX2FkZFVJU291cmNlQ29kZSh1aVNvdXJj
ZUNvZGVzW2ldKTsKLSAgICBXZWJJbnNwZWN0b3IuZW5kQmF0Y2hVcGRhdGUoKTsKLQotICAgIHRo
aXMuX3dvcmtzcGFjZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGVQ
cm92aWRlci5FdmVudHMuVUlTb3VyY2VDb2RlQWRkZWQsIHRoaXMuX3VpU291cmNlQ29kZUFkZGVk
LCB0aGlzKTsKLSAgICB0aGlzLl93b3Jrc3BhY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuVUlTb3VyY2VDb2RlUHJvdmlkZXIuRXZlbnRzLlVJU291cmNlQ29kZVJlbW92ZWQsIHRoaXMu
X3VpU291cmNlQ29kZVJlbW92ZWQsIHRoaXMpOwotICAgIHRoaXMuX3dvcmtzcGFjZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5Xb3Jrc3BhY2UuRXZlbnRzLlByb2plY3RXaWxsUmVzZXQs
IHRoaXMuX3Byb2plY3RXaWxsUmVzZXQuYmluZCh0aGlzKSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJN
b2RlbC5FdmVudHMuR2xvYmFsT2JqZWN0Q2xlYXJlZCwgdGhpcy5fZGVidWdnZXJSZXNldCwgdGhp
cyk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuYWR2YW5jZWRTZWFyY2hDb250cm9sbGVyLnJlZ2lzdGVy
U2VhcmNoU2NvcGUobmV3IFdlYkluc3BlY3Rvci5TY3JpcHRzU2VhcmNoU2NvcGUodGhpcy5fd29y
a3NwYWNlKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewot
ICAgIHN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW3Ro
aXMuZW5hYmxlVG9nZ2xlQnV0dG9uLmVsZW1lbnQsIHRoaXMuX3BhdXNlT25FeGNlcHRpb25CdXR0
b24uZWxlbWVudCwgdGhpcy5fdG9nZ2xlRm9ybWF0U291cmNlQnV0dG9uLmVsZW1lbnQsIHRoaXMu
X3NjcmlwdFZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lcl07Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4gez9FbGVtZW50fQotICAgICAqLwotICAgIHN0YXR1c0JhclRleHQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRWaWV3U3RhdHVzQmFy
VGV4dENvbnRhaW5lcjsKLSAgICB9LAotCi0gICAgZGVmYXVsdEZvY3VzZWRFbGVtZW50OiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yQ29udGFpbmVyLnZpZXcu
ZGVmYXVsdEZvY3VzZWRFbGVtZW50KCkgfHwgdGhpcy5fbmF2aWdhdG9yLnZpZXcuZGVmYXVsdEZv
Y3VzZWRFbGVtZW50KCk7Ci0gICAgfSwKLQotICAgIGdldCBwYXVzZWQoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3BhdXNlZDsKLSAgICB9LAotCi0gICAgd2FzU2hvd246IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUud2FzU2hvd24u
Y2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5fbmF2aWdhdG9yQ29udHJvbGxlci53YXNTaG93bigp
OwotICAgIH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS53aWxsSGlkZS5jYWxsKHRoaXMpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuY2xvc2VWaWV3SW5EcmF3ZXIoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX3VpU291
cmNlQ29kZUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB1aVNvdXJj
ZUNvZGUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIChldmVudC5k
YXRhKTsKLSAgICAgICAgdGhpcy5fYWRkVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0g
dWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX2FkZFVJU291cmNlQ29kZTogZnVuY3Rpb24odWlT
b3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3RvZ2dsZUZvcm1hdFNvdXJjZUJ1
dHRvbi50b2dnbGVkKQotICAgICAgICAgICAgdWlTb3VyY2VDb2RlLnNldEZvcm1hdHRlZCh0cnVl
KTsKLSAgICAgICAgaWYgKHVpU291cmNlQ29kZS5wcm9qZWN0KCkuaXNTZXJ2aWNlUHJvamVjdCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9uYXZpZ2F0b3IuYWRkVUlTb3Vy
Y2VDb2RlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIHRoaXMuX2VkaXRvckNvbnRhaW5lci5hZGRV
SVNvdXJjZUNvZGUodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgLy8gUmVwbGFjZSBkZWJ1Z2dlciBz
Y3JpcHQtYmFzZWQgdWlTb3VyY2VDb2RlIHdpdGggYSBuZXR3b3JrLWJhc2VkIG9uZS4KLSAgICAg
ICAgdmFyIGN1cnJlbnRVSVNvdXJjZUNvZGUgPSB0aGlzLl9jdXJyZW50VUlTb3VyY2VDb2RlOwot
ICAgICAgICBpZiAoY3VycmVudFVJU291cmNlQ29kZSAmJiBjdXJyZW50VUlTb3VyY2VDb2RlLnBy
b2plY3QoKS5pc1NlcnZpY2VQcm9qZWN0KCkgJiYgY3VycmVudFVJU291cmNlQ29kZSAhPT0gdWlT
b3VyY2VDb2RlICYmIGN1cnJlbnRVSVNvdXJjZUNvZGUudXJsID09PSB1aVNvdXJjZUNvZGUudXJs
KSB7Ci0gICAgICAgICAgICB0aGlzLl9zaG93RmlsZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICAg
ICAgdGhpcy5fZWRpdG9yQ29udGFpbmVyLnJlbW92ZVVJU291cmNlQ29kZShjdXJyZW50VUlTb3Vy
Y2VDb2RlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfdWlTb3VyY2VDb2RlUmVtb3ZlZDog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gLyoqIEB0
eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAg
IHRoaXMuX3JlbW92ZVVJU291cmNlQ29kZXMoW3VpU291cmNlQ29kZV0pOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlPn0g
dWlTb3VyY2VDb2RlcwotICAgICAqLwotICAgIF9yZW1vdmVVSVNvdXJjZUNvZGVzOiBmdW5jdGlv
bih1aVNvdXJjZUNvZGVzKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aVNv
dXJjZUNvZGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0b3IucmVt
b3ZlVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZXNbaV0pOwotICAgICAgICAgICAgdGhpcy5fcmVt
b3ZlU291cmNlRnJhbWUodWlTb3VyY2VDb2Rlc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy5fZWRpdG9yQ29udGFpbmVyLnJlbW92ZVVJU291cmNlQ29kZXModWlTb3VyY2VDb2Rlcyk7Ci0g
ICAgfSwKLQotICAgIF9jb25zb2xlQ29tbWFuZEV2YWx1YXRlZEluU2VsZWN0ZWRDYWxsRnJhbWU6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuc2NvcGVj
aGFpbi51cGRhdGUoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2VsZWN0ZWRDYWxsRnJhbWUo
KSk7Ci0gICAgfSwKLQotICAgIF9kZWJ1Z2dlclBhdXNlZDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIGRldGFpbHMgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5kZWJ1Z2dlclBh
dXNlZERldGFpbHMoKTsKLQotICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlOwotICAgICAgICB0
aGlzLl93YWl0aW5nVG9QYXVzZSA9IGZhbHNlOwotICAgICAgICB0aGlzLl9zdGVwcGluZyA9IGZh
bHNlOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZURlYnVnZ2VyQnV0dG9ucygpOwotCi0gICAgICAg
IFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LnNldEN1cnJlbnRQYW5lbCh0aGlzKTsKLSAgICAg
ICAgdGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnVwZGF0ZShkZXRhaWxzLmNhbGxGcmFtZXMp
OwotCi0gICAgICAgIGlmIChkZXRhaWxzLnJlYXNvbiA9PT0gV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwuQnJlYWtSZWFzb24uRE9NKSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5oaWdobGlnaHRCcmVha3BvaW50KGRldGFpbHMuYXV4RGF0YSk7
Ci0gICAgICAgICAgICBmdW5jdGlvbiBkaWRDcmVhdGVCcmVha3BvaW50SGl0U3RhdHVzTWVzc2Fn
ZShlbGVtZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhclBh
bmVzLmNhbGxzdGFjay5zZXRTdGF0dXMoZWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuZG9tQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5jcmVhdGVCcmVha3Bv
aW50SGl0U3RhdHVzTWVzc2FnZShkZXRhaWxzLmF1eERhdGEsIGRpZENyZWF0ZUJyZWFrcG9pbnRI
aXRTdGF0dXNNZXNzYWdlLmJpbmQodGhpcykpOwotICAgICAgICB9IGVsc2UgaWYgKGRldGFpbHMu
cmVhc29uID09PSBXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5CcmVha1JlYXNvbi5FdmVudExp
c3RlbmVyKSB7Ci0gICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gZGV0YWlscy5hdXhEYXRhLmV2
ZW50TmFtZTsKLSAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50cy5oaWdobGlnaHRCcmVha3BvaW50KGRldGFpbHMuYXV4RGF0YS5ldmVudE5hbWUpOwot
ICAgICAgICAgICAgdmFyIGV2ZW50TmFtZUZvclVJID0gV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLmV2ZW50TmFtZUZvclVJKGV2ZW50TmFtZSk7Ci0gICAg
ICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5jYWxsc3RhY2suc2V0U3RhdHVzKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiUGF1c2VkIG9uIGEgXCIlc1wiIEV2ZW50IExpc3RlbmVyLiIsIGV2ZW50TmFt
ZUZvclVJKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGV0YWlscy5yZWFzb24gPT09IFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkJyZWFrUmVhc29uLlhIUikgewotICAgICAgICAgICAgdGhpcy5z
aWRlYmFyUGFuZXMueGhyQnJlYWtwb2ludHMuaGlnaGxpZ2h0QnJlYWtwb2ludChkZXRhaWxzLmF1
eERhdGFbImJyZWFrcG9pbnRVUkwiXSk7Ci0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5j
YWxsc3RhY2suc2V0U3RhdHVzKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGF1c2VkIG9uIGEgWE1M
SHR0cFJlcXVlc3QuIikpOwotICAgICAgICB9IGVsc2UgaWYgKGRldGFpbHMucmVhc29uID09PSBX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5CcmVha1JlYXNvbi5FeGNlcHRpb24pCi0gICAgICAg
ICAgICB0aGlzLnNpZGViYXJQYW5lcy5jYWxsc3RhY2suc2V0U3RhdHVzKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiUGF1c2VkIG9uIGV4Y2VwdGlvbjogJyVzJy4iLCBkZXRhaWxzLmF1eERhdGEuZGVz
Y3JpcHRpb24pKTsKLSAgICAgICAgZWxzZSBpZiAoZGV0YWlscy5yZWFzb24gPT09IFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkJyZWFrUmVhc29uLkFzc2VydCkKLSAgICAgICAgICAgIHRoaXMu
c2lkZWJhclBhbmVzLmNhbGxzdGFjay5zZXRTdGF0dXMoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQ
YXVzZWQgb24gYXNzZXJ0aW9uLiIpKTsKLSAgICAgICAgZWxzZSBpZiAoZGV0YWlscy5yZWFzb24g
PT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkJyZWFrUmVhc29uLkNTUFZpb2xhdGlvbikK
LSAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5zZXRTdGF0dXMoV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJQYXVzZWQgb24gYSBzY3JpcHQgYmxvY2tlZCBkdWUgdG8gQ29udGVu
dCBTZWN1cml0eSBQb2xpY3kgZGlyZWN0aXZlOiBcIiVzXCIuIiwgZGV0YWlscy5hdXhEYXRhWyJk
aXJlY3RpdmVUZXh0Il0pKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBk
aWRHZXRVSUxvY2F0aW9uKHVpTG9jYXRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuZmluZEJy
ZWFrcG9pbnQodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUsIHVpTG9jYXRpb24ubGluZU51bWJlcik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5o
aWdobGlnaHRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIHRoaXMuc2lk
ZWJhclBhbmVzLmNhbGxzdGFjay5zZXRTdGF0dXMoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXVz
ZWQgb24gYSBKYXZhU2NyaXB0IGJyZWFrcG9pbnQuIikpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGRldGFpbHMuY2FsbEZyYW1lcy5sZW5ndGgpIAotICAgICAgICAgICAgICAgIGRl
dGFpbHMuY2FsbEZyYW1lc1swXS5jcmVhdGVMaXZlTG9jYXRpb24oZGlkR2V0VUlMb2NhdGlvbi5i
aW5kKHRoaXMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb25zb2xlLndh
cm4oIlNjcmlwdHNQYW5lbCBwYXVzZWQsIGJ1dCBjYWxsRnJhbWVzLmxlbmd0aCBpcyB6ZXJvLiIp
OyAvLyBUT0RPIHJlbW92ZSB0aGlzIG9uY2Ugd2UgdW5kZXJzdGFuZCB0aGlzIGNhc2UgYmV0dGVy
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9zaG93RGVidWdnZXJTaWRlYmFyKCk7Ci0gICAg
ICAgIHRoaXMuX3RvZ2dsZURlYnVnZ2VyU2lkZWJhckJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsK
LSAgICAgICAgd2luZG93LmZvY3VzKCk7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5i
cmluZ1RvRnJvbnQoKTsKLSAgICB9LAotCi0gICAgX2RlYnVnZ2VyUmVzdW1lZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3dh
aXRpbmdUb1BhdXNlID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3N0ZXBwaW5nID0gZmFsc2U7Ci0K
LSAgICAgICAgdGhpcy5fY2xlYXJJbnRlcmZhY2UoKTsKLSAgICAgICAgdGhpcy5fdG9nZ2xlRGVi
dWdnZXJTaWRlYmFyQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9kZWJ1
Z2dlcldhc0VuYWJsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURl
YnVnZ2VyQnV0dG9ucygpOwotICAgIH0sCi0KLSAgICBfZGVidWdnZXJXYXNEaXNhYmxlZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVidWdnZXJSZXNldCgpOwotICAgIH0sCi0K
LSAgICBfZGVidWdnZXJSZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVi
dWdnZXJSZXN1bWVkKCk7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLndhdGNoRXhwcmVzc2lv
bnMucmVzZXQoKTsKLSAgICB9LAotCi0gICAgX3Byb2plY3RXaWxsUmVzZXQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHByb2plY3QgPSBldmVudC5kYXRhOwotICAgICAgICB2
YXIgdWlTb3VyY2VDb2RlcyA9IHByb2plY3QudWlTb3VyY2VDb2RlcygpOwotICAgICAgICB0aGlz
Ll9yZW1vdmVVSVNvdXJjZUNvZGVzKHVpU291cmNlQ29kZXMpOwotICAgICAgICBpZiAocHJvamVj
dC50eXBlKCkgPT09IFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuTmV0d29yaykKLSAgICAgICAg
ICAgIHRoaXMuX2VkaXRvckNvbnRhaW5lci5yZXNldCgpOwotICAgIH0sCi0KLSAgICBnZXQgdmlz
aWJsZVZpZXcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvckNvbnRhaW5lci52
aXNpYmxlVmlldzsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVNjcmlwdFZpZXdTdGF0dXNCYXJJdGVt
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2NyaXB0Vmlld1N0YXR1c0Jhckl0
ZW1zQ29udGFpbmVyLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX3NjcmlwdFZpZXdT
dGF0dXNCYXJUZXh0Q29udGFpbmVyLnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICAgICAgdmFyIHNv
dXJjZUZyYW1lID0gdGhpcy52aXNpYmxlVmlldzsKLSAgICAgICAgaWYgKHNvdXJjZUZyYW1lKSB7
Ci0gICAgICAgICAgICB2YXIgc3RhdHVzQmFySXRlbXMgPSBzb3VyY2VGcmFtZS5zdGF0dXNCYXJJ
dGVtcygpIHx8IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0dXNCYXJJ
dGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9zY3JpcHRWaWV3U3RhdHVz
QmFySXRlbXNDb250YWluZXIuYXBwZW5kQ2hpbGQoc3RhdHVzQmFySXRlbXNbaV0pOwotICAgICAg
ICAgICAgdmFyIHN0YXR1c0JhclRleHQgPSBzb3VyY2VGcmFtZS5zdGF0dXNCYXJUZXh0KCk7Ci0g
ICAgICAgICAgICBpZiAoc3RhdHVzQmFyVGV4dCkKLSAgICAgICAgICAgICAgICB0aGlzLl9zY3Jp
cHRWaWV3U3RhdHVzQmFyVGV4dENvbnRhaW5lci5hcHBlbmRDaGlsZChzdGF0dXNCYXJUZXh0KTsK
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICBjYW5TaG93QW5jaG9yTG9jYXRpb246IGZ1bmN0aW9u
KGFuY2hvcikKLSAgICB7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5k
ZWJ1Z2dlckVuYWJsZWQoKSAmJiBhbmNob3IudWlTb3VyY2VDb2RlKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSBXZWJJbnNwZWN0b3Iud29ya3Nw
YWNlLnVpU291cmNlQ29kZUZvclVSTChhbmNob3IuaHJlZik7Ci0gICAgICAgIGlmICh1aVNvdXJj
ZUNvZGUpIHsKLSAgICAgICAgICAgIGFuY2hvci51aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSwKLQotICAgIHNob3dBbmNob3JMb2NhdGlvbjogZnVuY3Rpb24oYW5jaG9yKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fc2hvd1NvdXJjZUxpbmUoYW5jaG9yLnVpU291cmNlQ29kZSwg
YW5jaG9yLmxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAgc2hvd1VJU291cmNlQ29kZTogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2hvd1NvdXJj
ZUxpbmUodWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAg
KiBAcGFyYW0ge251bWJlcj19IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBfc2hvd1NvdXJjZUxp
bmU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHZh
ciBzb3VyY2VGcmFtZSA9IHRoaXMuX3Nob3dGaWxlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIGlm
ICh0eXBlb2YgbGluZU51bWJlciA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICBzb3VyY2VGcmFt
ZS5oaWdobGlnaHRMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICBzb3VyY2VGcmFtZS5mb2N1cygp
OwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5ub3RpZmljYXRpb25zLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MuVXNlckFjdGlvbiwgewotICAgICAgICAg
ICAgYWN0aW9uOiBXZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MuVXNlckFjdGlvbk5hbWVzLk9wZW5T
b3VyY2VMaW5rLAotICAgICAgICAgICAgdXJsOiB1aVNvdXJjZUNvZGUub3JpZ2luVVJMKCksCi0g
ICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyCi0gICAgICAgIH0pOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291
cmNlQ29kZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZX0KLSAgICAg
Ki8KLSAgICBfc2hvd0ZpbGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAg
IHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX2dldE9yQ3JlYXRlU291cmNlRnJhbWUodWlTb3VyY2VD
b2RlKTsKLSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRVSVNvdXJjZUNvZGUgPT09IHVpU291cmNl
Q29kZSkKLSAgICAgICAgICAgIHJldHVybiBzb3VyY2VGcmFtZTsKLSAgICAgICAgdGhpcy5fY3Vy
cmVudFVJU291cmNlQ29kZSA9IHVpU291cmNlQ29kZTsKLSAgICAgICAgaWYgKCF1aVNvdXJjZUNv
ZGUucHJvamVjdCgpLmlzU2VydmljZVByb2plY3QoKSkKLSAgICAgICAgICAgIHRoaXMuX25hdmln
YXRvci5yZXZlYWxVSVNvdXJjZUNvZGUodWlTb3VyY2VDb2RlLCB0cnVlKTsKLSAgICAgICAgdGhp
cy5fZWRpdG9yQ29udGFpbmVyLnNob3dGaWxlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIHRoaXMu
X3VwZGF0ZVNjcmlwdFZpZXdTdGF0dXNCYXJJdGVtcygpOwotCi0gICAgICAgIHJldHVybiBzb3Vy
Y2VGcmFtZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
VUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWV9Ci0gICAgICovCi0gICAgX2NyZWF0ZVNvdXJjZUZyYW1lOiBmdW5jdGlvbih1
aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIgc291cmNlRnJhbWU7Ci0gICAgICAgIHN3
aXRjaCAodWlTb3VyY2VDb2RlLmNvbnRlbnRUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IucmVzb3VyY2VUeXBlcy5TY3JpcHQ6Ci0gICAgICAgICAgICBpZiAodWlTb3VyY2VDb2Rl
LnByb2plY3QoKS50eXBlKCkgPT09IFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuU25pcHBldHMp
Ci0gICAgICAgICAgICAgICAgc291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNuaXBwZXRK
YXZhU2NyaXB0U291cmNlRnJhbWUodGhpcywgdWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdFNvdXJjZUZyYW1lKHRoaXMsIHVpU291cmNlQ29kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5Eb2N1bWVudDoKLSAgICAg
ICAgICAgIHNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWUodGhpcywgdWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQ6Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBzb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
RnJhbWUodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy5fc291cmNlRnJhbWVzQnlVSVNvdXJjZUNvZGUucHV0KHVpU291cmNlQ29kZSwgc291cmNl
RnJhbWUpOwotICAgICAgICByZXR1cm4gc291cmNlRnJhbWU7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0g
ICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lfQotICAgICAqLwotICAgIF9n
ZXRPckNyZWF0ZVNvdXJjZUZyYW1lOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fc291cmNlRnJhbWVzQnlVSVNvdXJjZUNvZGUuZ2V0KHVpU291cmNl
Q29kZSkgfHwgdGhpcy5fY3JlYXRlU291cmNlRnJhbWUodWlTb3VyY2VDb2RlKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNv
dXJjZUNvZGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuU291cmNlRnJhbWV9Ci0gICAg
ICovCi0gICAgdmlld0ZvckZpbGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9nZXRPckNyZWF0ZVNvdXJjZUZyYW1lKHVpU291cmNlQ29kZSk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX3JlbW92ZVNvdXJjZUZyYW1lOiBmdW5jdGlv
bih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9z
b3VyY2VGcmFtZXNCeVVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgaWYg
KCFzb3VyY2VGcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fc291cmNl
RnJhbWVzQnlVSVNvdXJjZUNvZGUucmVtb3ZlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIHNvdXJj
ZUZyYW1lLmRpc3Bvc2UoKTsKLSAgICB9LAotCi0gICAgX2NsZWFyQ3VycmVudEV4ZWN1dGlvbkxp
bmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25Tb3VyY2VG
cmFtZSkKLSAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lLmNsZWFyRXhlY3V0
aW9uTGluZSgpOwotICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWU7Ci0g
ICAgfSwKLQotICAgIF9leGVjdXRpb25MaW5lQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IGV2ZW50LmRhdGE7Ci0KLSAgICAgICAgdGhpcy5f
Y2xlYXJDdXJyZW50RXhlY3V0aW9uTGluZSgpOwotICAgICAgICBpZiAoIXVpTG9jYXRpb24pCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX2dldE9y
Q3JlYXRlU291cmNlRnJhbWUodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUpOwotICAgICAgICBzb3Vy
Y2VGcmFtZS5zZXRFeGVjdXRpb25MaW5lKHVpTG9jYXRpb24ubGluZU51bWJlcik7Ci0gICAgICAg
IHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7Ci0gICAgfSwKLQotICAg
IF9yZXZlYWxFeGVjdXRpb25MaW5lOiBmdW5jdGlvbih1aUxvY2F0aW9uKQotICAgIHsKLSAgICAg
ICAgdmFyIHVpU291cmNlQ29kZSA9IHVpTG9jYXRpb24udWlTb3VyY2VDb2RlOwotICAgICAgICAv
LyBTb21lIHNjcmlwdHMgKGFub255bW91cyBhbmQgc25pcHBldHMgZXZhbHVhdGlvbnMpIGFyZSBu
b3QgYWRkZWQgdG8gZmlsZXMgc2VsZWN0IGJ5IGRlZmF1bHQuCi0gICAgICAgIGlmICh0aGlzLl9j
dXJyZW50VUlTb3VyY2VDb2RlICYmIHRoaXMuX2N1cnJlbnRVSVNvdXJjZUNvZGUuc2NyaXB0Rmls
ZSgpICYmIHRoaXMuX2N1cnJlbnRVSVNvdXJjZUNvZGUuc2NyaXB0RmlsZSgpLmlzRGl2ZXJnaW5n
RnJvbVZNKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl90b2dnbGVG
b3JtYXRTb3VyY2VCdXR0b24udG9nZ2xlZCAmJiAhdWlTb3VyY2VDb2RlLmZvcm1hdHRlZCgpKQot
ICAgICAgICAgICAgdWlTb3VyY2VDb2RlLnNldEZvcm1hdHRlZCh0cnVlKTsKLSAgICAgICAgdmFy
IHNvdXJjZUZyYW1lID0gdGhpcy5fc2hvd0ZpbGUodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgc291
cmNlRnJhbWUucmV2ZWFsTGluZSh1aUxvY2F0aW9uLmxpbmVOdW1iZXIpOwotICAgICAgICBzb3Vy
Y2VGcmFtZS5mb2N1cygpOwotICAgIH0sCi0KLSAgICBfY2FsbEZyYW1lU2VsZWN0ZWQ6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNhbGxGcmFtZSA9IGV2ZW50LmRhdGE7Ci0K
LSAgICAgICAgaWYgKCFjYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dGhpcy5zaWRlYmFyUGFuZXMuc2NvcGVjaGFpbi51cGRhdGUoY2FsbEZyYW1lKTsKLSAgICAgICAg
dGhpcy5zaWRlYmFyUGFuZXMud2F0Y2hFeHByZXNzaW9ucy5yZWZyZXNoRXhwcmVzc2lvbnMoKTsK
LSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnNldFNlbGVjdGVkQ2FsbEZyYW1l
KGNhbGxGcmFtZSk7Ci0gICAgICAgIGNhbGxGcmFtZS5jcmVhdGVMaXZlTG9jYXRpb24odGhpcy5f
cmV2ZWFsRXhlY3V0aW9uTGluZS5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX2VkaXRvckNs
b3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JDb250
cm9sbGVyLmhpZGVOYXZpZ2F0b3JPdmVybGF5KCk7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUg
PSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIChldmVudC5kYXRhKTsK
LQotICAgICAgICBpZiAodGhpcy5fY3VycmVudFVJU291cmNlQ29kZSA9PT0gdWlTb3VyY2VDb2Rl
KQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRVSVNvdXJjZUNvZGU7Ci0KLSAgICAg
ICAgLy8gU2NyaXB0c05hdmlnYXRvciBkb2VzIG5vdCBuZWVkIHRvIHVwZGF0ZSBvbiBFZGl0b3JD
bG9zZWQuCi0gICAgICAgIHRoaXMuX3VwZGF0ZVNjcmlwdFZpZXdTdGF0dXNCYXJJdGVtcygpOwot
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci5yZXNldFNlYXJjaCgpOwotICAg
IH0sCi0KLSAgICBfZWRpdG9yU2VsZWN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgdmFyIHVpU291cmNlQ29kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zaG93
RmlsZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JDb250cm9sbGVyLmhp
ZGVOYXZpZ2F0b3JPdmVybGF5KCk7Ci0gICAgICAgIHNvdXJjZUZyYW1lLmZvY3VzKCk7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnJlc2V0U2VhcmNoKCk7Ci0gICAgfSwK
LQotICAgIF9zY3JpcHRTZWxlY3RlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2
YXIgdWlTb3VyY2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAq
LyAoZXZlbnQuZGF0YS51aVNvdXJjZUNvZGUpOwotICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0
aGlzLl9zaG93RmlsZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICB0aGlzLl9uYXZpZ2F0b3JDb250
cm9sbGVyLmhpZGVOYXZpZ2F0b3JPdmVybGF5KCk7Ci0gICAgICAgIGlmIChzb3VyY2VGcmFtZSAm
JiBldmVudC5kYXRhLmZvY3VzU291cmNlKQotICAgICAgICAgICAgc291cmNlRnJhbWUuZm9jdXMo
KTsKLSAgICB9LAotCi0gICAgX3BhdXNlT25FeGNlcHRpb25TdGF0ZUNoYW5nZWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gV2ViSW5zcGVj
dG9yLnNldHRpbmdzLnBhdXNlT25FeGNlcHRpb25TdGF0ZVN0cmluZy5nZXQoKTsKLSAgICAgICAg
c3dpdGNoIChwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKSB7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTW9kZWwuUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZS5Eb250UGF1c2VPbkV4Y2Vw
dGlvbnM6Ci0gICAgICAgICAgICB0aGlzLl9wYXVzZU9uRXhjZXB0aW9uQnV0dG9uLnRpdGxlID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEb24ndCBwYXVzZSBvbiBleGNlcHRpb25zLlxuQ2xpY2sg
dG8gUGF1c2Ugb24gYWxsIGV4Y2VwdGlvbnMuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5QYXVzZU9uRXhjZXB0aW9uc1N0YXRl
LlBhdXNlT25BbGxFeGNlcHRpb25zOgotICAgICAgICAgICAgdGhpcy5fcGF1c2VPbkV4Y2VwdGlv
bkJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGF1c2Ugb24gYWxsIGV4Y2Vw
dGlvbnMuXG5DbGljayB0byBQYXVzZSBvbiB1bmNhdWdodCBleGNlcHRpb25zLiIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuUGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZS5QYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zOgotICAgICAgICAg
ICAgdGhpcy5fcGF1c2VPbkV4Y2VwdGlvbkJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiUGF1c2Ugb24gdW5jYXVnaHQgZXhjZXB0aW9ucy5cbkNsaWNrIHRvIE5vdCBwYXVzZSBv
biBleGNlcHRpb25zLiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy5fcGF1c2VPbkV4Y2VwdGlvbkJ1dHRvbi5zdGF0ZSA9IHBhdXNlT25FeGNlcHRpb25zU3Rh
dGU7Ci0gICAgfSwKLQotICAgIF91cGRhdGVEZWJ1Z2dlckJ1dHRvbnM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5kZWJ1Z2dlckVuYWJs
ZWQoKSkgewotICAgICAgICAgICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24udGl0bGUgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkRlYnVnZ2luZyBlbmFibGVkLiBDbGljayB0byBkaXNhYmxlLiIp
OwotICAgICAgICAgICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24udG9nZ2xlZCA9IHRydWU7Ci0g
ICAgICAgICAgICB0aGlzLl9wYXVzZU9uRXhjZXB0aW9uQnV0dG9uLnZpc2libGUgPSB0cnVlOwot
ICAgICAgICAgICAgdGhpcy5wYW5lbEVuYWJsZXJWaWV3LmRldGFjaCgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24udGl0bGUgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkRlYnVnZ2luZyBkaXNhYmxlZC4gQ2xpY2sgdG8gZW5hYmxlLiIpOwot
ICAgICAgICAgICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24udG9nZ2xlZCA9IGZhbHNlOwotICAg
ICAgICAgICAgdGhpcy5fcGF1c2VPbkV4Y2VwdGlvbkJ1dHRvbi52aXNpYmxlID0gZmFsc2U7Ci0g
ICAgICAgICAgICB0aGlzLnBhbmVsRW5hYmxlclZpZXcuc2hvdyh0aGlzLmVsZW1lbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkgewotICAgICAgICAgICAgdGhpcy5f
dXBkYXRlQnV0dG9uVGl0bGUodGhpcy5wYXVzZUJ1dHRvbiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJSZXN1bWUgc2NyaXB0IGV4ZWN1dGlvbiAoJXMpLiIpKQotICAgICAgICAgICAgdGhpcy5wYXVz
ZUJ1dHRvbi5hZGRTdHlsZUNsYXNzKCJwYXVzZWQiKTsKLQotICAgICAgICAgICAgdGhpcy5wYXVz
ZUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5zdGVwT3ZlckJ1dHRv
bi5kaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5zdGVwSW50b0J1dHRvbi5kaXNh
YmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5zdGVwT3V0QnV0dG9uLmRpc2FibGVkID0g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIHRoaXMuZGVidWdnZXJTdGF0dXNFbGVtZW50LnRleHRDb250
ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXVzZWQiKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJ1dHRvblRpdGxlKHRoaXMucGF1c2VCdXR0b24sIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUGF1c2Ugc2NyaXB0IGV4ZWN1dGlvbiAoJXMpLiIpKQotICAg
ICAgICAgICAgdGhpcy5wYXVzZUJ1dHRvbi5yZW1vdmVTdHlsZUNsYXNzKCJwYXVzZWQiKTsKLQot
ICAgICAgICAgICAgdGhpcy5wYXVzZUJ1dHRvbi5kaXNhYmxlZCA9IHRoaXMuX3dhaXRpbmdUb1Bh
dXNlOwotICAgICAgICAgICAgdGhpcy5zdGVwT3ZlckJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7Ci0g
ICAgICAgICAgICB0aGlzLnN0ZXBJbnRvQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHRoaXMuc3RlcE91dEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlm
ICh0aGlzLl93YWl0aW5nVG9QYXVzZSkKLSAgICAgICAgICAgICAgICB0aGlzLmRlYnVnZ2VyU3Rh
dHVzRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGF1c2luZyIp
OwotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fc3RlcHBpbmcpCi0gICAgICAgICAgICAgICAg
dGhpcy5kZWJ1Z2dlclN0YXR1c0VsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlN0ZXBwaW5nIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhp
cy5kZWJ1Z2dlclN0YXR1c0VsZW1lbnQudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBfY2xlYXJJbnRlcmZhY2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay51cGRhdGUobnVsbCk7Ci0gICAgICAgIHRoaXMuc2lk
ZWJhclBhbmVzLnNjb3BlY2hhaW4udXBkYXRlKG51bGwpOwotICAgICAgICB0aGlzLnNpZGViYXJQ
YW5lcy5qc0JyZWFrcG9pbnRzLmNsZWFyQnJlYWtwb2ludEhpZ2hsaWdodCgpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuZG9tQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5jbGVhckJyZWFrcG9pbnRIaWdo
bGlnaHQoKTsKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuZXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnRzLmNsZWFyQnJlYWtwb2ludEhpZ2hsaWdodCgpOwotICAgICAgICB0aGlzLnNpZGViYXJQYW5l
cy54aHJCcmVha3BvaW50cy5jbGVhckJyZWFrcG9pbnRIaWdobGlnaHQoKTsKLQotICAgICAgICB0
aGlzLl9jbGVhckN1cnJlbnRFeGVjdXRpb25MaW5lKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURl
YnVnZ2VyQnV0dG9ucygpOwotICAgIH0sCi0KLSAgICBfZW5hYmxlRGVidWdnaW5nOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl90b2dnbGVEZWJ1Z2dpbmcodGhpcy5wYW5lbEVuYWJs
ZXJWaWV3LmFsd2F5c0VuYWJsZWQpOwotICAgIH0sCi0KLSAgICBfdG9nZ2xlRGVidWdnaW5nOiBm
dW5jdGlvbihvcHRpb25hbEFsd2F5cykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZh
bHNlOwotICAgICAgICB0aGlzLl93YWl0aW5nVG9QYXVzZSA9IGZhbHNlOwotICAgICAgICB0aGlz
Ll9zdGVwcGluZyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5kZWJ1Z2dlckVuYWJsZWQoKSkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRp
bmdzLmRlYnVnZ2VyRW5hYmxlZC5zZXQoZmFsc2UpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTW9kZWwuZGlzYWJsZURlYnVnZ2VyKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZGVidWdnZXJFbmFibGVkLnNldCghIW9wdGlv
bmFsQWx3YXlzKTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmVuYWJs
ZURlYnVnZ2VyKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3RvZ2dsZVBhdXNlT25FeGNl
cHRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbmV4dFN0YXRlTWFwID0ge307
Ci0gICAgICAgIHZhciBzdGF0ZUVudW0gPSBXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5QYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlOwotICAgICAgICBuZXh0U3RhdGVNYXBbc3RhdGVFbnVtLkRvbnRQ
YXVzZU9uRXhjZXB0aW9uc10gPSBzdGF0ZUVudW0uUGF1c2VPbkFsbEV4Y2VwdGlvbnM7Ci0gICAg
ICAgIG5leHRTdGF0ZU1hcFtzdGF0ZUVudW0uUGF1c2VPbkFsbEV4Y2VwdGlvbnNdID0gc3RhdGVF
bnVtLlBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnM7Ci0gICAgICAgIG5leHRTdGF0ZU1hcFtzdGF0
ZUVudW0uUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9uc10gPSBzdGF0ZUVudW0uRG9udFBhdXNlT25F
eGNlcHRpb25zOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucGF1c2VPbkV4Y2VwdGlv
blN0YXRlU3RyaW5nLnNldChuZXh0U3RhdGVNYXBbdGhpcy5fcGF1c2VPbkV4Y2VwdGlvbkJ1dHRv
bi5zdGF0ZV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50PX0gZXZl
bnQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF90b2dnbGVQYXVzZTog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7Ci0gICAg
ICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdU
b1BhdXNlID0gZmFsc2U7Ci0gICAgICAgICAgICBEZWJ1Z2dlckFnZW50LnJlc3VtZSgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5fc3RlcHBpbmcgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHRoaXMuX3dhaXRpbmdUb1BhdXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIERlYnVnZ2Vy
QWdlbnQucGF1c2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2NsZWFySW50ZXJmYWNl
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge0V2ZW50PX0gZXZlbnQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAg
IF9zdGVwT3ZlckNsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLl9wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB0aGlzLl9w
YXVzZWQgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fc3RlcHBpbmcgPSB0cnVlOwotCi0gICAgICAg
IHRoaXMuX2NsZWFySW50ZXJmYWNlKCk7Ci0KLSAgICAgICAgRGVidWdnZXJBZ2VudC5zdGVwT3Zl
cigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtFdmVudD19IGV2ZW50Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAg
ICBfc3RlcEludG9DbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fcGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgdGhpcy5f
cGF1c2VkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3N0ZXBwaW5nID0gdHJ1ZTsKLQotICAgICAg
ICB0aGlzLl9jbGVhckludGVyZmFjZSgpOwotCi0gICAgICAgIERlYnVnZ2VyQWdlbnQuc3RlcElu
dG8oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0g
ICAgX3N0ZXBPdXRDbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fcGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgdGhpcy5f
cGF1c2VkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3N0ZXBwaW5nID0gdHJ1ZTsKLQotICAgICAg
ICB0aGlzLl9jbGVhckludGVyZmFjZSgpOwotCi0gICAgICAgIERlYnVnZ2VyQWdlbnQuc3RlcE91
dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgX3RvZ2dsZUJyZWFrcG9p
bnRzQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50c0FjdGl2ZSghV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuYnJlYWtwb2ludHNBY3RpdmUoKSk7Ci0gICAgfSwKLQotICAgIF9icmVha3BvaW50c0Fj
dGl2ZVN0YXRlQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYWN0
aXZlID0gZXZlbnQuZGF0YTsKLSAgICAgICAgdGhpcy5fdG9nZ2xlQnJlYWtwb2ludHNCdXR0b24u
dG9nZ2xlZCA9IGFjdGl2ZTsKLSAgICAgICAgaWYgKGFjdGl2ZSkgewotICAgICAgICAgICAgdGhp
cy5fdG9nZ2xlQnJlYWtwb2ludHNCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkRlYWN0aXZhdGUgYnJlYWtwb2ludHMuIik7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuaW5z
cGVjdG9yVmlldy5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImJyZWFrcG9pbnRzLWRlYWN0aXZh
dGVkIik7Ci0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5qc0JyZWFrcG9pbnRzLmxpc3RF
bGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImJyZWFrcG9pbnRzLWxpc3QtZGVhY3RpdmF0ZWQiKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUJyZWFrcG9pbnRzQnV0
dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBY3RpdmF0ZSBicmVha3BvaW50cy4i
KTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmVsZW1lbnQuYWRkU3R5
bGVDbGFzcygiYnJlYWtwb2ludHMtZGVhY3RpdmF0ZWQiKTsKLSAgICAgICAgICAgIHRoaXMuc2lk
ZWJhclBhbmVzLmpzQnJlYWtwb2ludHMubGlzdEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiYnJlYWtw
b2ludHMtbGlzdC1kZWFjdGl2YXRlZCIpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0g
ICAgICovCi0gICAgX2V2YWx1YXRlU2VsZWN0aW9uSW5Db25zb2xlOiBmdW5jdGlvbihldmVudCkK
LSAgICB7Ci0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0g
ICAgICAgIGlmIChzZWxlY3Rpb24udHlwZSAhPT0gIlJhbmdlIiB8fCBzZWxlY3Rpb24uaXNDb2xs
YXBzZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5l
dmFsdWF0ZUluQ29uc29sZShzZWxlY3Rpb24udG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0sCi0KLSAgICBfY3JlYXRlRGVidWdUb29sYmFyOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB2YXIgZGVidWdUb29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgICAgIGRlYnVnVG9vbGJhci5jbGFzc05hbWUgPSAic3RhdHVzLWJhciI7Ci0gICAg
ICAgIGRlYnVnVG9vbGJhci5pZCA9ICJzY3JpcHRzLWRlYnVnLXRvb2xiYXIiOwotCi0gICAgICAg
IHZhciB0aXRsZSwgaGFuZGxlcjsKLSAgICAgICAgdmFyIHBsYXRmb3JtU3BlY2lmaWNNb2RpZmll
ciA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsT3JNZXRhOwot
Ci0gICAgICAgIC8vIENvbnRpbnVlLgotICAgICAgICBoYW5kbGVyID0gdGhpcy5fdG9nZ2xlUGF1
c2UuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5wYXVzZUJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1
dHRvbkFuZFJlZ2lzdGVyU2hvcnRjdXRzKCJzY3JpcHRzLXBhdXNlIiwgIiIsIGhhbmRsZXIsIFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5QYXVzZUNvbnRp
bnVlKTsKLSAgICAgICAgZGVidWdUb29sYmFyLmFwcGVuZENoaWxkKHRoaXMucGF1c2VCdXR0b24p
OwotCi0gICAgICAgIC8vIFN0ZXAgb3Zlci4KLSAgICAgICAgdGl0bGUgPSBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlN0ZXAgb3ZlciBuZXh0IGZ1bmN0aW9uIGNhbGwgKCVzKS4iKTsKLSAgICAgICAg
aGFuZGxlciA9IHRoaXMuX3N0ZXBPdmVyQ2xpY2tlZC5iaW5kKHRoaXMpOwotICAgICAgICB0aGlz
LnN0ZXBPdmVyQnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uQW5kUmVnaXN0ZXJTaG9ydGN1dHMo
InNjcmlwdHMtc3RlcC1vdmVyIiwgdGl0bGUsIGhhbmRsZXIsIFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5TdGVwT3Zlcik7Ci0gICAgICAgIGRlYnVnVG9v
bGJhci5hcHBlbmRDaGlsZCh0aGlzLnN0ZXBPdmVyQnV0dG9uKTsKLQotICAgICAgICAvLyBTdGVw
IGludG8uCi0gICAgICAgIHRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdGVwIGludG8g
bmV4dCBmdW5jdGlvbiBjYWxsICglcykuIik7Ci0gICAgICAgIGhhbmRsZXIgPSB0aGlzLl9zdGVw
SW50b0NsaWNrZWQuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5zdGVwSW50b0J1dHRvbiA9IHRo
aXMuX2NyZWF0ZUJ1dHRvbkFuZFJlZ2lzdGVyU2hvcnRjdXRzKCJzY3JpcHRzLXN0ZXAtaW50byIs
IHRpdGxlLCBoYW5kbGVyLCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsRGVzY3JpcHRvci5TaG9y
dGN1dEtleXMuU3RlcEludG8pOwotICAgICAgICBkZWJ1Z1Rvb2xiYXIuYXBwZW5kQ2hpbGQodGhp
cy5zdGVwSW50b0J1dHRvbik7Ci0KLSAgICAgICAgLy8gU3RlcCBvdXQuCi0gICAgICAgIHRpdGxl
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdGVwIG91dCBvZiBjdXJyZW50IGZ1bmN0aW9uICgl
cykuIik7Ci0gICAgICAgIGhhbmRsZXIgPSB0aGlzLl9zdGVwT3V0Q2xpY2tlZC5iaW5kKHRoaXMp
OwotICAgICAgICB0aGlzLnN0ZXBPdXRCdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b25BbmRSZWdp
c3RlclNob3J0Y3V0cygic2NyaXB0cy1zdGVwLW91dCIsIHRpdGxlLCBoYW5kbGVyLCBXZWJJbnNw
ZWN0b3IuU2NyaXB0c1BhbmVsRGVzY3JpcHRvci5TaG9ydGN1dEtleXMuU3RlcE91dCk7Ci0gICAg
ICAgIGRlYnVnVG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLnN0ZXBPdXRCdXR0b24pOwotCi0gICAg
ICAgIHRoaXMuX3RvZ2dsZUJyZWFrcG9pbnRzQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0
dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWFjdGl2YXRlIGJyZWFrcG9pbnRz
LiIpLCAidG9nZ2xlLWJyZWFrcG9pbnRzIik7Ci0gICAgICAgIHRoaXMuX3RvZ2dsZUJyZWFrcG9p
bnRzQnV0dG9uLnRvZ2dsZWQgPSB0cnVlOwotICAgICAgICB0aGlzLl90b2dnbGVCcmVha3BvaW50
c0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZUJyZWFrcG9pbnRz
Q2xpY2tlZCwgdGhpcyk7Ci0gICAgICAgIGRlYnVnVG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLl90
b2dnbGVCcmVha3BvaW50c0J1dHRvbi5lbGVtZW50KTsKLQotICAgICAgICB0aGlzLmRlYnVnZ2Vy
U3RhdHVzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICB0
aGlzLmRlYnVnZ2VyU3RhdHVzRWxlbWVudC5pZCA9ICJzY3JpcHRzLWRlYnVnZ2VyLXN0YXR1cyI7
Ci0gICAgICAgIGRlYnVnVG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLmRlYnVnZ2VyU3RhdHVzRWxl
bWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIGRlYnVnVG9vbGJhcjsKLSAgICB9LAotCi0gICAgX3Vw
ZGF0ZUJ1dHRvblRpdGxlOiBmdW5jdGlvbihidXR0b24sIGJ1dHRvblRpdGxlKQotICAgIHsKLSAg
ICAgICAgYnV0dG9uLmJ1dHRvblRpdGxlID0gYnV0dG9uVGl0bGU7Ci0gICAgICAgIHZhciBoYXNT
aG9ydGN1dHMgPSBidXR0b24uc2hvcnRjdXRzICYmIGJ1dHRvbi5zaG9ydGN1dHMubGVuZ3RoOwot
ICAgICAgICBpZiAoaGFzU2hvcnRjdXRzKQotICAgICAgICAgICAgYnV0dG9uLnRpdGxlID0gU3Ry
aW5nLnZzcHJpbnRmKGJ1dHRvblRpdGxlLCBbYnV0dG9uLnNob3J0Y3V0c1swXS5uYW1lXSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1dHRvbi50aXRsZSA9IGJ1dHRvblRpdGxlOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gYnV0dG9uSWQKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gYnV0dG9uVGl0bGUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEV2ZW50
PSk6Ym9vbGVhbn0gaGFuZGxlcgotICAgICAqIEBwYXJhbSB7IUFycmF5LjwhV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuRGVzY3JpcHRvcj59IHNob3J0Y3V0cwotICAgICAqLwotICAgIF9j
cmVhdGVCdXR0b25BbmRSZWdpc3RlclNob3J0Y3V0czogZnVuY3Rpb24oYnV0dG9uSWQsIGJ1dHRv
blRpdGxlLCBoYW5kbGVyLCBzaG9ydGN1dHMpCi0gICAgewotICAgICAgICB2YXIgYnV0dG9uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci0gICAgICAgIGJ1dHRvbi5jbGFzc05h
bWUgPSAic3RhdHVzLWJhci1pdGVtIjsKLSAgICAgICAgYnV0dG9uLmlkID0gYnV0dG9uSWQ7Ci0g
ICAgICAgIGJ1dHRvbi5zaG9ydGN1dHMgPSBzaG9ydGN1dHM7Ci0gICAgICAgIHRoaXMuX3VwZGF0
ZUJ1dHRvblRpdGxlKGJ1dHRvbiwgYnV0dG9uVGl0bGUpOwotICAgICAgICBidXR0b24uZGlzYWJs
ZWQgPSB0cnVlOwotICAgICAgICBidXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiaW1nIikpOwotICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBo
YW5kbGVyLCBmYWxzZSk7Ci0KLSAgICAgICAgdGhpcy5yZWdpc3RlclNob3J0Y3V0cyhzaG9ydGN1
dHMsIGhhbmRsZXIpOwotCi0gICAgICAgIHJldHVybiBidXR0b247Ci0gICAgfSwKLQotICAgIHNl
YXJjaENhbmNlbGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2VhcmNo
VmlldykKLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaFZpZXcuc2VhcmNoQ2FuY2VsZWQoKTsKLQot
ICAgICAgICBkZWxldGUgdGhpcy5fc2VhcmNoVmlldzsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3Nl
YXJjaFF1ZXJ5OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVl
cnkKLSAgICAgKi8KLSAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXND
b3VudCgwLCB0aGlzKTsKLQotICAgICAgICBpZiAoIXRoaXMudmlzaWJsZVZpZXcpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ2FsbCBzZWFyY2hDYW5jZWxlZCBzaW5jZSBpdCB3
aWxsIHJlc2V0IGV2ZXJ5dGhpbmcgd2UgbmVlZCBiZWZvcmUgZG9pbmcgYSBuZXcgc2VhcmNoLgot
ICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7Ci0KLSAgICAgICAgdGhpcy5fc2VhcmNoVmll
dyA9IHRoaXMudmlzaWJsZVZpZXc7Ci0gICAgICAgIHRoaXMuX3NlYXJjaFF1ZXJ5ID0gcXVlcnk7
Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluaXNoZWRDYWxsYmFjayh2aWV3LCBzZWFyY2hNYXRjaGVz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNlYXJjaE1hdGNoZXMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxl
ci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoc2VhcmNoTWF0Y2hlcywgdGhpcyk7Ci0gICAgICAg
ICAgICB2aWV3Lmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZUN1cnJlbnRNYXRjaEluZGV4KHZpZXcuY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4LCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3Nl
YXJjaFZpZXcucGVyZm9ybVNlYXJjaChxdWVyeSwgZmluaXNoZWRDYWxsYmFjay5iaW5kKHRoaXMp
KTsKLSAgICB9LAotCi0gICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hWaWV3KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmICh0aGlzLl9zZWFyY2hWaWV3ICE9PSB0aGlzLnZpc2libGVWaWV3KSB7Ci0g
ICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2godGhpcy5fc2VhcmNoUXVlcnkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFZpZXcu
c2hvd2luZ0xhc3RTZWFyY2hSZXN1bHQoKSkKLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaFZpZXcu
anVtcFRvRmlyc3RTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhp
cy5fc2VhcmNoVmlldy5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZUN1cnJlbnRNYXRjaEluZGV4KHRoaXMuX3NlYXJj
aFZpZXcuY3VycmVudFNlYXJjaFJlc3VsdEluZGV4LCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSwKLQotICAgIGp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFZpZXcpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFZpZXcgIT09IHRoaXMudmlzaWJsZVZpZXcp
IHsKLSAgICAgICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCh0aGlzLl9zZWFyY2hRdWVyeSk7Ci0g
ICAgICAgICAgICBpZiAodGhpcy5fc2VhcmNoVmlldykKLSAgICAgICAgICAgICAgICB0aGlzLl9z
ZWFyY2hWaWV3Lmp1bXBUb0xhc3RTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9zZWFyY2hWaWV3LnNob3dpbmdGaXJzdFNl
YXJjaFJlc3VsdCgpKQotICAgICAgICAgICAgdGhpcy5fc2VhcmNoVmlldy5qdW1wVG9MYXN0U2Vh
cmNoUmVzdWx0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaFZpZXcu
anVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJj
aENvbnRyb2xsZXIudXBkYXRlQ3VycmVudE1hdGNoSW5kZXgodGhpcy5fc2VhcmNoVmlldy5jdXJy
ZW50U2VhcmNoUmVzdWx0SW5kZXgsIHRoaXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGNhblNlYXJjaEFuZFJlcGxhY2U6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB2aWV3ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWV9ICovICh0aGlzLnZpc2libGVWaWV3KTsKLSAgICAgICAgcmV0dXJuICEhdmll
dyAmJiB2aWV3LmNhbkVkaXRTb3VyY2UoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKi8KLSAgICByZXBsYWNlU2VsZWN0aW9uV2l0aDogZnVu
Y3Rpb24odGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciB2aWV3ID0gLyoqIEB0eXBlIHtXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWV9ICovICh0aGlzLnZpc2libGVWaWV3KTsKLSAgICAgICAgdmlldy5y
ZXBsYWNlU2VhcmNoTWF0Y2hXaXRoKHRleHQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dAotICAgICAq
LwotICAgIHJlcGxhY2VBbGxXaXRoOiBmdW5jdGlvbihxdWVyeSwgdGV4dCkKLSAgICB7Ci0gICAg
ICAgIHZhciB2aWV3ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuU291cmNlRnJhbWV9ICovICh0
aGlzLnZpc2libGVWaWV3KTsKLSAgICAgICAgdmlldy5yZXBsYWNlQWxsV2l0aChxdWVyeSwgdGV4
dCk7Ci0gICAgfSwKLQotICAgIF90b2dnbGVGb3JtYXRTb3VyY2U6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3RvZ2dsZUZvcm1hdFNvdXJjZUJ1dHRvbi50b2dnbGVkID0gIXRoaXMu
X3RvZ2dsZUZvcm1hdFNvdXJjZUJ1dHRvbi50b2dnbGVkOwotICAgICAgICB2YXIgdWlTb3VyY2VD
b2RlcyA9IHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVzKCk7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdWlTb3VyY2VDb2Rlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHVpU291
cmNlQ29kZXNbaV0uc2V0Rm9ybWF0dGVkKHRoaXMuX3RvZ2dsZUZvcm1hdFNvdXJjZUJ1dHRvbi50
b2dnbGVkKTsKLQotICAgICAgICB2YXIgY3VycmVudEZpbGUgPSB0aGlzLl9lZGl0b3JDb250YWlu
ZXIuY3VycmVudEZpbGUoKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0aW9ucy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLlVzZXJBY3Rp
b24sIHsKLSAgICAgICAgICAgIGFjdGlvbjogV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLlVzZXJB
Y3Rpb25OYW1lcy5Ub2dnbGVQcmV0dHlQcmludCwKLSAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMu
X3RvZ2dsZUZvcm1hdFNvdXJjZUJ1dHRvbi50b2dnbGVkLAotICAgICAgICAgICAgdXJsOiBjdXJy
ZW50RmlsZSA/IGN1cnJlbnRGaWxlLm9yaWdpblVSTCgpIDogbnVsbAotICAgICAgICB9KTsKLSAg
ICB9LAotCi0gICAgYWRkVG9XYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbikKLSAgICB7Ci0gICAg
ICAgIHRoaXMuc2lkZWJhclBhbmVzLndhdGNoRXhwcmVzc2lvbnMuYWRkRXhwcmVzc2lvbihleHBy
ZXNzaW9uKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAg
ICAgKi8KLSAgICBfdG9nZ2xlQnJlYWtwb2ludDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIHNvdXJjZUZyYW1lID0gdGhpcy52aXNpYmxlVmlldzsKLSAgICAgICAgaWYgKCFzb3VyY2VG
cmFtZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoc291cmNlRnJh
bWUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lKSB7Ci0gICAg
ICAgICAgICB2YXIgamF2YVNjcmlwdFNvdXJjZUZyYW1lID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lfSAqLyAoc291cmNlRnJhbWUpOwotICAgICAgICAgICAg
amF2YVNjcmlwdFNvdXJjZUZyYW1lLnRvZ2dsZUJyZWFrcG9pbnRPbkN1cnJlbnRMaW5lKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAq
IEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX3Nob3dPdXRsaW5lRGlhbG9nOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl9lZGl0
b3JDb250YWluZXIuY3VycmVudEZpbGUoKTsKLSAgICAgICAgaWYgKCF1aVNvdXJjZUNvZGUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoICh1aVNvdXJjZUNvZGUu
Y29udGVudFR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVz
LkRvY3VtZW50OgotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlNjcmlw
dDoKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0T3V0bGluZURpYWxvZy5zaG93
KHRoaXMudmlzaWJsZVZpZXcsIHVpU291cmNlQ29kZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TdHlsZXNoZWV0Ogot
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlN0eWxlU2hlZXRPdXRsaW5lRGlhbG9nLnNob3codGhp
cy52aXNpYmxlVmlldywgdWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgX2luc3RhbGxE
ZWJ1Z2dlclNpZGViYXJDb250cm9sbGVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Ll90b2dnbGVEZWJ1Z2dlclNpZGViYXJCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0Jh
ckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgZGVidWdnZXIiKSwgInNjcmlwdHMt
ZGVidWdnZXItc2hvdy1oaWRlLWJ1dHRvbiIsIDMpOwotICAgICAgICB0aGlzLl90b2dnbGVEZWJ1
Z2dlclNpZGViYXJCdXR0b24uc3RhdGUgPSAic2hvd24iOwotICAgICAgICB0aGlzLl90b2dnbGVE
ZWJ1Z2dlclNpZGViYXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjbGlja0hhbmRs
ZXIsIHRoaXMpOwotCi0gICAgICAgIGZ1bmN0aW9uIGNsaWNrSGFuZGxlcigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh0aGlzLl90b2dnbGVEZWJ1Z2dlclNpZGViYXJCdXR0b24uc3RhdGUg
PT09ICJzaG93biIpCi0gICAgICAgICAgICAgICAgdGhpcy5faGlkZURlYnVnZ2VyU2lkZWJhcigp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dEZWJ1Z2dlclNp
ZGViYXIoKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmVkaXRvclZpZXcuZWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLl90b2dnbGVEZWJ1Z2dlclNpZGViYXJCdXR0b24uZWxlbWVudCk7Ci0KLSAg
ICAgICAgaWYgKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZWJ1Z2dlclNpZGViYXJIaWRkZW4uZ2V0
KCkpCi0gICAgICAgICAgICB0aGlzLl9oaWRlRGVidWdnZXJTaWRlYmFyKCk7Ci0KLSAgICB9LAot
Ci0gICAgX3Nob3dEZWJ1Z2dlclNpZGViYXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl90b2dnbGVEZWJ1Z2dlclNpZGViYXJCdXR0b24uc3RhdGUgPT09ICJzaG93biIpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3RvZ2dsZURlYnVnZ2VyU2lkZWJhckJ1
dHRvbi5zdGF0ZSA9ICJzaG93biI7Ci0gICAgICAgIHRoaXMuX3RvZ2dsZURlYnVnZ2VyU2lkZWJh
ckJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSGlkZSBkZWJ1Z2dlciIpOwot
ICAgICAgICB0aGlzLnNwbGl0Vmlldy5zaG93U2lkZWJhckVsZW1lbnQoKTsKLSAgICAgICAgdGhp
cy5kZWJ1Z1NpZGViYXJSZXNpemVXaWRnZXRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRl
biIpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZGVidWdnZXJTaWRlYmFySGlkZGVu
LnNldChmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9oaWRlRGVidWdnZXJTaWRlYmFyOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdG9nZ2xlRGVidWdnZXJTaWRlYmFyQnV0dG9u
LnN0YXRlID09PSAiaGlkZGVuIikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5f
dG9nZ2xlRGVidWdnZXJTaWRlYmFyQnV0dG9uLnN0YXRlID0gImhpZGRlbiI7Ci0gICAgICAgIHRo
aXMuX3RvZ2dsZURlYnVnZ2VyU2lkZWJhckJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiU2hvdyBkZWJ1Z2dlciIpOwotICAgICAgICB0aGlzLnNwbGl0Vmlldy5oaWRlU2lkZWJh
ckVsZW1lbnQoKTsKLSAgICAgICAgdGhpcy5kZWJ1Z1NpZGViYXJSZXNpemVXaWRnZXRFbGVtZW50
LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
ZGVidWdnZXJTaWRlYmFySGlkZGVuLnNldCh0cnVlKTsKLSAgICB9LAotCi0gICAgX2ZpbGVSZW5h
bWVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSAv
KiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIChldmVudC5kYXRhLnVpU291
cmNlQ29kZSk7Ci0gICAgICAgIHZhciBuYW1lID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChldmVu
dC5kYXRhLm5hbWUpOwotICAgICAgICBpZiAodWlTb3VyY2VDb2RlLnByb2plY3QoKS50eXBlKCkg
IT09IFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuU25pcHBldHMpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zY3JpcHRTbmlwcGV0TW9kZWwucmVuYW1lU2NyaXB0
U25pcHBldCh1aVNvdXJjZUNvZGUsIG5hbWUpOwotICAgICAgICB1aVNvdXJjZUNvZGUucmVuYW1l
KG5hbWUpOwotICAgIH0sCi0gICAgICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9zbmlwcGV0Q3JlYXRpb25SZXF1ZXN0
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IFdl
Ykluc3BlY3Rvci5zY3JpcHRTbmlwcGV0TW9kZWwuY3JlYXRlU2NyaXB0U25pcHBldCgpOwotICAg
ICAgICB0aGlzLl9zaG93U291cmNlTGluZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICAKLSAgICAg
ICAgdmFyIHNob3VsZEhpZGVOYXZpZ2F0b3IgPSAhdGhpcy5fbmF2aWdhdG9yQ29udHJvbGxlci5p
c05hdmlnYXRvclBpbm5lZCgpOwotICAgICAgICBpZiAodGhpcy5fbmF2aWdhdG9yQ29udHJvbGxl
ci5pc05hdmlnYXRvckhpZGRlbigpKQotICAgICAgICAgICAgdGhpcy5fbmF2aWdhdG9yQ29udHJv
bGxlci5zaG93TmF2aWdhdG9yT3ZlcmxheSgpOwotICAgICAgICB0aGlzLl9uYXZpZ2F0b3IucmVu
YW1lKHVpU291cmNlQ29kZSwgY2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgCi0gICAgICAgIC8q
KgotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbW1pdHRlZAotICAgICAgICAgKi8KLSAg
ICAgICAgZnVuY3Rpb24gY2FsbGJhY2soY29tbWl0dGVkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoc2hvdWxkSGlkZU5hdmlnYXRvcikKLSAgICAgICAgICAgICAgICB0aGlzLl9uYXZpZ2F0
b3JDb250cm9sbGVyLmhpZGVOYXZpZ2F0b3JPdmVybGF5KCk7Ci0KLSAgICAgICAgICAgIGlmICgh
Y29tbWl0dGVkKSB7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNjcmlwdFNuaXBwZXRN
b2RlbC5kZWxldGVTY3JpcHRTbmlwcGV0KHVpU291cmNlQ29kZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLl9zaG93U291cmNlTGlu
ZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9pdGVtUmVuYW1p
bmdSZXF1ZXN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHVpU291cmNl
Q29kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gKi8gKGV2ZW50LmRh
dGEpOwotICAgICAgICAKLSAgICAgICAgdmFyIHNob3VsZEhpZGVOYXZpZ2F0b3IgPSAhdGhpcy5f
bmF2aWdhdG9yQ29udHJvbGxlci5pc05hdmlnYXRvclBpbm5lZCgpOwotICAgICAgICBpZiAodGhp
cy5fbmF2aWdhdG9yQ29udHJvbGxlci5pc05hdmlnYXRvckhpZGRlbigpKQotICAgICAgICAgICAg
dGhpcy5fbmF2aWdhdG9yQ29udHJvbGxlci5zaG93TmF2aWdhdG9yT3ZlcmxheSgpOwotICAgICAg
ICB0aGlzLl9uYXZpZ2F0b3IucmVuYW1lKHVpU291cmNlQ29kZSwgY2FsbGJhY2suYmluZCh0aGlz
KSk7Ci0gICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbW1p
dHRlZAotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soY29tbWl0dGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkSGlkZU5hdmlnYXRvciAmJiBjb21taXR0
ZWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9uYXZpZ2F0b3JDb250cm9sbGVyLmhpZGVOYXZp
Z2F0b3JPdmVybGF5KCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2hvd1NvdXJjZUxpbmUodWlT
b3VyY2VDb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQot
ICAgICAqLwotICAgIF9zaG93TG9jYWxIaXN0b3J5OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuUmV2aXNpb25IaXN0b3J5Vmlldy5zaG93SGlzdG9y
eSh1aVNvdXJjZUNvZGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5Db250ZXh0TWVudX0gY29udGV4dE1lbnUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
dGFyZ2V0Ci0gICAgICovCi0gICAgYXBwZW5kQXBwbGljYWJsZUl0ZW1zOiBmdW5jdGlvbihldmVu
dCwgY29udGV4dE1lbnUsIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2FwcGVuZFVJU291
cmNlQ29kZUl0ZW1zKGNvbnRleHRNZW51LCB0YXJnZXQpOwotICAgICAgICB0aGlzLl9hcHBlbmRG
dW5jdGlvbkl0ZW1zKGNvbnRleHRNZW51LCB0YXJnZXQpOwotICAgIH0sCi0KLSAgICAvKiogCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAg
ICAgKi8KLSAgICBfbWFwRmlsZVN5c3RlbVRvTmV0d29yazogZnVuY3Rpb24odWlTb3VyY2VDb2Rl
KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlNlbGVjdFVJU291cmNlQ29kZUZvclByb2pl
Y3RUeXBlRGlhbG9nLnNob3codWlTb3VyY2VDb2RlLm5hbWUoKSwgV2ViSW5zcGVjdG9yLnByb2pl
Y3RUeXBlcy5OZXR3b3JrLCBtYXBGaWxlU3lzdGVtVG9OZXR3b3JrLmJpbmQodGhpcyksIHRoaXMu
ZWRpdG9yVmlldy5tYWluRWxlbWVudCkgICAgICAgICAgICAgICAgCi0KLSAgICAgICAgLyoqIAot
ICAgICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IG5ldHdvcmtVSVNv
dXJjZUNvZGUKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG1hcEZpbGVTeXN0ZW1Ub05l
dHdvcmsobmV0d29ya1VJU291cmNlQ29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5f
d29ya3NwYWNlLmFkZE1hcHBpbmcobmV0d29ya1VJU291cmNlQ29kZSwgdWlTb3VyY2VDb2RlLCBX
ZWJJbnNwZWN0b3IuZmlsZVN5c3RlbVdvcmtzcGFjZVByb3ZpZGVyKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICAvKiogCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
fSB1aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBfcmVtb3ZlTmV0d29ya01hcHBpbmc6IGZ1bmN0
aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maXJtKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSBuZXR3b3JrIG1hcHBp
bmc/IikpKQotICAgICAgICAgICAgdGhpcy5fd29ya3NwYWNlLnJlbW92ZU1hcHBpbmcodWlTb3Vy
Y2VDb2RlKTsKLSAgICB9LAotCi0gICAgLyoqIAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZX0gbmV0d29ya1VJU291cmNlQ29kZQotICAgICAqLwotICAgIF9tYXBOZXR3
b3JrVG9GaWxlU3lzdGVtOiBmdW5jdGlvbihuZXR3b3JrVUlTb3VyY2VDb2RlKQotICAgIHsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLlNlbGVjdFVJU291cmNlQ29kZUZvclByb2plY3RUeXBlRGlhbG9n
LnNob3cobmV0d29ya1VJU291cmNlQ29kZS5uYW1lKCksIFdlYkluc3BlY3Rvci5wcm9qZWN0VHlw
ZXMuRmlsZVN5c3RlbSwgbWFwTmV0d29ya1RvRmlsZVN5c3RlbS5iaW5kKHRoaXMpLCB0aGlzLmVk
aXRvclZpZXcubWFpbkVsZW1lbnQpICAgICAgICAgICAgICAgIAotCi0gICAgICAgIC8qKiAKLSAg
ICAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUK
LSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG1hcE5ldHdvcmtUb0ZpbGVTeXN0ZW0odWlT
b3VyY2VDb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2UuYWRkTWFw
cGluZyhuZXR3b3JrVUlTb3VyY2VDb2RlLCB1aVNvdXJjZUNvZGUsIFdlYkluc3BlY3Rvci5maWxl
U3lzdGVtV29ya3NwYWNlUHJvdmlkZXIpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKiAK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudX0gY29udGV4dE1lbnUKLSAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAg
ICAqLwotICAgIF9hcHBlbmRVSVNvdXJjZUNvZGVNYXBwaW5nSXRlbXM6IGZ1bmN0aW9uKGNvbnRl
eHRNZW51LCB1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICBpZiAodWlTb3VyY2VDb2RlLnBy
b2plY3QoKS50eXBlKCkgPT09IFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuRmlsZVN5c3RlbSkg
ewotICAgICAgICAgICAgdmFyIGhhc01hcHBpbmdzID0gISF1aVNvdXJjZUNvZGUudXJsOwotICAg
ICAgICAgICAgaWYgKCFoYXNNYXBwaW5ncykKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5h
cHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNl
TWVudVRpdGxlcygpID8gIk1hcCB0byBuZXR3b3JrIHJlc291cmNlXHUyMDI2IiA6ICJNYXAgdG8g
TmV0d29yayBSZXNvdXJjZVx1MjAyNiIpLCB0aGlzLl9tYXBGaWxlU3lzdGVtVG9OZXR3b3JrLmJp
bmQodGhpcywgdWlTb3VyY2VDb2RlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVj
dG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJSZW1vdmUgbmV0d29yayBtYXBwaW5nIiA6
ICJSZW1vdmUgTmV0d29yayBNYXBwaW5nIiksIHRoaXMuX3JlbW92ZU5ldHdvcmtNYXBwaW5nLmJp
bmQodGhpcywgdWlTb3VyY2VDb2RlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodWlTb3Vy
Y2VDb2RlLnByb2plY3QoKS50eXBlKCkgPT09IFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuTmV0
d29yaykgewotICAgICAgICAgICAgLyoqIAotICAgICAgICAgICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuUHJvamVjdH0gcHJvamVjdAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmdW5j
dGlvbiBmaWx0ZXJQcm9qZWN0KHByb2plY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHByb2plY3QudHlwZSgpID09PSBXZWJJbnNwZWN0b3IucHJvamVjdFR5cGVzLkZp
bGVTeXN0ZW07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5fd29ya3Nw
YWNlLnByb2plY3RzKCkuZmlsdGVyKGZpbHRlclByb2plY3QpLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAodGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29k
ZUZvclVSTCh1aVNvdXJjZUNvZGUudXJsKSA9PT0gdWlTb3VyY2VDb2RlKQotICAgICAgICAgICAg
ICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3Bl
Y3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiTWFwIHRvIGZpbGUgc3lzdGVtIHJlc291
cmNlXHUyMDI2IiA6ICJNYXAgdG8gRmlsZSBTeXN0ZW0gUmVzb3VyY2VcdTIwMjYiKSwgdGhpcy5f
bWFwTmV0d29ya1RvRmlsZVN5c3RlbS5iaW5kKHRoaXMsIHVpU291cmNlQ29kZSkpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIC8qKiAKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250
ZXh0TWVudX0gY29udGV4dE1lbnUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0Ci0gICAg
ICovCi0gICAgX2FwcGVuZFVJU291cmNlQ29kZUl0ZW1zOiBmdW5jdGlvbihjb250ZXh0TWVudSwg
dGFyZ2V0KQotICAgIHsKLSAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLlVJU291cmNlQ29kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHVp
U291cmNlQ29kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gKi8gKHRh
cmdldCk7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiTG9jYWwgbW9kaWZp
Y2F0aW9uc1x1MjAyNiIgOiAiTG9jYWwgTW9kaWZpY2F0aW9uc1x1MjAyNiIpLCB0aGlzLl9zaG93
TG9jYWxIaXN0b3J5LmJpbmQodGhpcywgdWlTb3VyY2VDb2RlKSk7Ci0KLSAgICAgICAgaWYgKFdl
Ykluc3BlY3Rvci5pc29sYXRlZEZpbGVTeXN0ZW1NYW5hZ2VyLnN1cHBvcnRzRmlsZVN5c3RlbXMo
KSAmJiBXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5maWxlU3lzdGVtUHJvamVjdC5p
c0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZFVJU291cmNlQ29kZU1hcHBpbmdJ
dGVtcyhjb250ZXh0TWVudSwgdWlTb3VyY2VDb2RlKTsKLQotICAgICAgICB2YXIgcmVzb3VyY2Ug
PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VGb3JVUkwodWlTb3VyY2VDb2RlLnVybCk7Ci0gICAgICAg
IGlmIChyZXNvdXJjZSAmJiByZXNvdXJjZS5yZXF1ZXN0KQotICAgICAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kQXBwbGljYWJsZUl0ZW1zKHJlc291cmNlLnJlcXVlc3QpOwotICAgIH0sCi0KLSAg
ICAvKiogCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnV9IGNvbnRleHRN
ZW51Ci0gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldAotICAgICAqLwotICAgIF9hcHBlbmRG
dW5jdGlvbkl0ZW1zOiBmdW5jdGlvbihjb250ZXh0TWVudSwgdGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciByZW1vdGVPYmplY3QgPSAvKiogQHR5cGUg
e1dlYkluc3BlY3Rvci5SZW1vdGVPYmplY3R9ICovICh0YXJnZXQpOwotICAgICAgICBpZiAocmVt
b3RlT2JqZWN0LnR5cGUgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgZnVuY3Rpb24gZGlkR2V0RGV0YWlscyhlcnJvciwgcmVzcG9uc2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
ZXJyb3IpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LnNob3dQYW5lbEZvckFuY2hvck5hdmlnYXRp
b24odGhpcyk7Ci0gICAgICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJlc3BvbnNlLmxvY2F0aW9uKTsKLSAg
ICAgICAgICAgIHRoaXMuX3Nob3dTb3VyY2VMaW5lKHVpTG9jYXRpb24udWlTb3VyY2VDb2RlLCB1
aUxvY2F0aW9uLmxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmV2
ZWFsRnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBEZWJ1Z2dlckFnZW50LmdldEZ1
bmN0aW9uRGV0YWlscyhyZW1vdGVPYmplY3Qub2JqZWN0SWQsIGRpZEdldERldGFpbHMuYmluZCh0
aGlzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYklu
c3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8g
IlNob3cgZnVuY3Rpb24gZGVmaW5pdGlvbiIgOiAiU2hvdyBGdW5jdGlvbiBEZWZpbml0aW9uIiks
IHJldmVhbEZ1bmN0aW9uLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBzaG93R29Ub1NvdXJj
ZURpYWxvZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLk9wZW5SZXNv
dXJjZURpYWxvZy5zaG93KHRoaXMsIHRoaXMuZWRpdG9yVmlldy5tYWluRWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIF9kb2NrU2lkZUNoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZh
ciBkb2NrU2lkZSA9IFdlYkluc3BlY3Rvci5kb2NrQ29udHJvbGxlci5kb2NrU2lkZSgpOwotICAg
ICAgICB2YXIgdmVydGljYWxseSA9IGRvY2tTaWRlID09PSBXZWJJbnNwZWN0b3IuRG9ja0NvbnRy
b2xsZXIuU3RhdGUuRG9ja2VkVG9SaWdodCAmJiBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc3BsaXRW
ZXJ0aWNhbGx5V2hlbkRvY2tlZFRvUmlnaHQuZ2V0KCk7Ci0gICAgICAgIHRoaXMuX3NwbGl0VmVy
dGljYWxseSh2ZXJ0aWNhbGx5KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHti
b29sZWFufSB2ZXJ0aWNhbGx5Ci0gICAgICovCi0gICAgX3NwbGl0VmVydGljYWxseTogZnVuY3Rp
b24odmVydGljYWxseSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnNpZGViYXJQYW5lVmlldyAm
JiB2ZXJ0aWNhbGx5ID09PSAhdGhpcy5zcGxpdFZpZXcuaXNWZXJ0aWNhbCgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLnNpZGViYXJQYW5lVmlldykKLSAgICAgICAg
ICAgIHRoaXMuc2lkZWJhclBhbmVWaWV3LmRldGFjaCgpOwotCi0gICAgICAgIHRoaXMuc3BsaXRW
aWV3LnNldFZlcnRpY2FsKCF2ZXJ0aWNhbGx5KTsKLQotICAgICAgICBpZiAoIXZlcnRpY2FsbHkp
IHsKLSAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5T
aWRlYmFyUGFuZVN0YWNrKCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBwYW5lIGluIHRoaXMuc2lk
ZWJhclBhbmVzKQotICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVWaWV3LmFkZFBhbmUo
dGhpcy5zaWRlYmFyUGFuZXNbcGFuZV0pOwotCi0gICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuZGVidWdUb29sYmFyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHRoaXMuX3Nob3dEZWJ1Z2dlclNpZGViYXIoKTsKLQotICAgICAgICAgICAgdGhp
cy5zaWRlYmFyUGFuZVZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlNwbGl0Vmlldyh0cnVlLCB0aGlz
Lm5hbWUgKyAiUGFuZWxTcGxpdFNpZGViYXJSYXRpbyIsIDAuNSk7Ci0KLSAgICAgICAgICAgIHZh
ciBncm91cDEgPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lU3RhY2soKTsKLSAgICAgICAg
ICAgIGdyb3VwMS5zaG93KHRoaXMuc2lkZWJhclBhbmVWaWV3LmZpcnN0RWxlbWVudCgpKTsKLSAg
ICAgICAgICAgIGdyb3VwMS5lbGVtZW50LmlkID0gInNjcmlwdHMtc2lkZWJhci1zdGFjay1wYW5l
IjsKLSAgICAgICAgICAgIGdyb3VwMS5hZGRQYW5lKHRoaXMuc2lkZWJhclBhbmVzLndhdGNoRXhw
cmVzc2lvbnMpOwotICAgICAgICAgICAgZ3JvdXAxLmFkZFBhbmUodGhpcy5zaWRlYmFyUGFuZXMu
Y2FsbHN0YWNrKTsKLSAgICAgICAgICAgIGdyb3VwMS5hZGRQYW5lKHRoaXMuc2lkZWJhclBhbmVz
LnNjb3BlY2hhaW4pOwotCi0gICAgICAgICAgICB2YXIgZ3JvdXAyID0gbmV3IFdlYkluc3BlY3Rv
ci5TaWRlYmFyVGFiYmVkUGFuZSgpOwotICAgICAgICAgICAgZ3JvdXAyLnNob3codGhpcy5zaWRl
YmFyUGFuZVZpZXcuc2Vjb25kRWxlbWVudCgpKTsKLSAgICAgICAgICAgIGdyb3VwMi5hZGRQYW5l
KHRoaXMuc2lkZWJhclBhbmVzLmpzQnJlYWtwb2ludHMpOwotICAgICAgICAgICAgZ3JvdXAyLmFk
ZFBhbmUodGhpcy5zaWRlYmFyUGFuZXMuZG9tQnJlYWtwb2ludHMpOwotICAgICAgICAgICAgZ3Jv
dXAyLmFkZFBhbmUodGhpcy5zaWRlYmFyUGFuZXMueGhyQnJlYWtwb2ludHMpOwotICAgICAgICAg
ICAgZ3JvdXAyLmFkZFBhbmUodGhpcy5zaWRlYmFyUGFuZXMuZXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnRzKTsKLSAgICAgICAgICAgIGdyb3VwMi5hZGRQYW5lKHRoaXMuc2lkZWJhclBhbmVzLndvcmtl
ckxpc3QpOwotCi0gICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lVmlldy5maXJzdEVsZW1lbnQo
KS5hcHBlbmRDaGlsZCh0aGlzLmRlYnVnVG9vbGJhcik7Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLnNpZGViYXJQYW5lVmlldy5lbGVtZW50LmlkID0gInNjcmlwdHMtZGVidWctc2lkZWJhci1j
b250ZW50cyI7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVWaWV3LnNob3codGhpcy5zcGxpdFZp
ZXcuc2lkZWJhckVsZW1lbnQpOwotCi0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLnNjb3BlY2hh
aW4uZXhwYW5kKCk7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmpzQnJlYWtwb2ludHMuZXhw
YW5kKCk7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5leHBhbmQoKTsKLQot
ICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNldHRpbmdzLndhdGNoRXhwcmVzc2lvbnMuZ2V0KCku
bGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLndhdGNoRXhwcmVzc2lv
bnMuZXhwYW5kKCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlBhbmVs
LnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRzUGFuZWxEZXNjcmlwdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWxEZXNjcmlwdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ZTY1NDJkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsRGVzY3JpcHRvci5qcworKysgL2Rldi9udWxsCkBAIC0x
LDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCi0gKiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRvcn0KLSAqIEBpbXBsZW1lbnRzIHtX
ZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUuUHJvdmlkZXJ9Ci0gKi8KLVdlYkluc3BlY3Rvci5TY3Jp
cHRzUGFuZWxEZXNjcmlwdG9yID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5QYW5l
bERlc2NyaXB0b3IuY2FsbCh0aGlzLCAic2NyaXB0cyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
U291cmNlcyIpLCAiU2NyaXB0c1BhbmVsIiwgIlNjcmlwdHNQYW5lbC5qcyIpOwotICAgIFdlYklu
c3BlY3Rvci5Db250ZXh0TWVudS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpOwotfQotCi1XZWJJbnNw
ZWN0b3IuU2NyaXB0c1BhbmVsRGVzY3JpcHRvci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqIAotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51fSBjb250ZXh0TWVudQotICAgICAq
IEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgKi8KLSAgICBhcHBlbmRBcHBsaWNhYmxlSXRl
bXM6IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0TWVudSwgdGFyZ2V0KQotICAgIHsKLSAgICAgICAg
dmFyIGhhc0FwcGxpY2FibGVJdGVtcyA9IHRhcmdldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGU7Ci0KLSAgICAgICAgaWYgKCFoYXNBcHBsaWNhYmxlSXRlbXMgJiYgdGFyZ2V0
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkgewotICAgICAgICAgICAgdmFy
IHJlbW90ZU9iamVjdCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdH0gKi8g
KHRhcmdldCk7Ci0gICAgICAgICAgICBpZiAocmVtb3RlT2JqZWN0LnR5cGUgIT09ICJmdW5jdGlv
biIpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5w
YW5lbCgpLmFwcGVuZEFwcGxpY2FibGVJdGVtcyhldmVudCwgY29udGV4dE1lbnUsIHRhcmdldCk7
Ci0gICAgfSwKLQotICAgIHJlZ2lzdGVyU2hvcnRjdXRzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgc2VjdGlvbiA9IFdlYkluc3BlY3Rvci5zaG9ydGN1dHNTY3JlZW4uc2VjdGlvbihX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNvdXJjZXMgUGFuZWwiKSk7Ci0KLSAgICAgICAgc2VjdGlv
bi5hZGRBbHRlcm5hdGVLZXlzKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWxEZXNjcmlwdG9yLlNo
b3J0Y3V0S2V5cy5QYXVzZUNvbnRpbnVlLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBhdXNlL0Nv
bnRpbnVlIikpOwotICAgICAgICBzZWN0aW9uLmFkZEFsdGVybmF0ZUtleXMoV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLlN0ZXBPdmVyLCBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlN0ZXAgb3ZlciIpKTsKLSAgICAgICAgc2VjdGlvbi5hZGRBbHRlcm5hdGVL
ZXlzKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5TdGVw
SW50bywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdGVwIGludG8iKSk7Ci0gICAgICAgIHNlY3Rp
b24uYWRkQWx0ZXJuYXRlS2V5cyhXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsRGVzY3JpcHRvci5T
aG9ydGN1dEtleXMuU3RlcE91dCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdGVwIG91dCIpKTsK
LQotICAgICAgICB2YXIgbmV4dEFuZFByZXZGcmFtZUtleXMgPSBXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsRGVzY3JpcHRvci5TaG9ydGN1dEtleXMuTmV4dENhbGxGcmFtZS5jb25jYXQoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLlByZXZDYWxsRnJhbWUp
OwotICAgICAgICBzZWN0aW9uLmFkZFJlbGF0ZWRLZXlzKG5leHRBbmRQcmV2RnJhbWVLZXlzLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5leHQvcHJldmlvdXMgY2FsbCBmcmFtZSIpKTsKLQotICAg
ICAgICBzZWN0aW9uLmFkZEFsdGVybmF0ZUtleXMoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbERl
c2NyaXB0b3IuU2hvcnRjdXRLZXlzLkV2YWx1YXRlU2VsZWN0aW9uSW5Db25zb2xlLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkV2YWx1YXRlIHNlbGVjdGlvbiBpbiBjb25zb2xlIikpOwotICAgICAg
ICBzZWN0aW9uLmFkZEFsdGVybmF0ZUtleXMoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbERlc2Ny
aXB0b3IuU2hvcnRjdXRLZXlzLkdvVG9NZW1iZXIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiR28g
dG8gbWVtYmVyIikpOwotICAgICAgICBzZWN0aW9uLmFkZEFsdGVybmF0ZUtleXMoV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLlRvZ2dsZUJyZWFrcG9pbnQs
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVG9nZ2xlIGJyZWFrcG9pbnQiKSk7Ci0gICAgfSwKLQot
ICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRvci5wcm90b3R5cGUKLX0K
LQotV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzID0gewot
ICAgIFBhdXNlQ29udGludWU6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQubWFrZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5GOCks
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuU2xhc2gsIFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsT3JNZXRhKQotICAgIF0sCi0KLSAgICBTdGVwT3Zl
cjogWwotICAgICAgICBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRv
cihXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkYxMCksCi0gICAgICAgIFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0LktleXMuU2luZ2xlUXVvdGUsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lk1vZGlmaWVycy5DdHJsT3JNZXRhKQotICAgIF0sCi0KLSAgICBTdGVwSW50bzogWwotICAg
ICAgICBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcihXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkYxMSksCi0gICAgICAgIFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0LktleXMuU2VtaWNvbG9uLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmll
cnMuQ3RybE9yTWV0YSkKLSAgICBdLAotCi0gICAgU3RlcE91dDogWwotICAgICAgICBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcihXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5LZXlzLkYxMSwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXJzLlNoaWZ0KSwKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURl
c2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5TZW1pY29sb24sIFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5TaGlmdCB8IFdlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsT3JNZXRhKQotICAgIF0sCi0KLSAgICBF
dmFsdWF0ZVNlbGVjdGlvbkluQ29uc29sZTogWwotICAgICAgICBXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigiZSIsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lk1vZGlmaWVycy5TaGlmdCB8IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlm
aWVycy5DdHJsKQotICAgIF0sCi0KLSAgICBHb1RvTWVtYmVyOiBbCi0gICAgICAgIFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKCJvIiwgV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLkN0cmxPck1ldGEgfCBXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5Nb2RpZmllcnMuU2hpZnQpCi0gICAgXSwKLQotICAgIFRvZ2dsZUJyZWFrcG9p
bnQ6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0
b3IoImIiLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3RybE9yTWV0
YSkKLSAgICBdLAotCi0gICAgTmV4dENhbGxGcmFtZTogWwotICAgICAgICBXZWJJbnNwZWN0b3Iu
S2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcihXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5LZXlzLlBlcmlvZCwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJz
LkN0cmwpCi0gICAgXSwKLQotICAgIFByZXZDYWxsRnJhbWU6IFsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQuS2V5cy5Db21tYSwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXJzLkN0cmwpCi0gICAgXQotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU2NyaXB0c1NlYXJjaFNjb3BlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzU2VhcmNoU2NvcGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU4ZTM1N2UuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzU2VhcmNoU2NvcGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBHT09HTEUgSU5DLgotICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxl
bWVudHMge1dlYkluc3BlY3Rvci5TZWFyY2hTY29wZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LldvcmtzcGFjZX0gd29ya3NwYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5TY3JpcHRzU2VhcmNoU2Nv
cGUgPSBmdW5jdGlvbih3b3Jrc3BhY2UpCi17Ci0gICAgLy8gRklYTUU6IEFkZCB0aXRsZSBvbmNl
IGl0IGlzIHVzZWQgYnkgc2VhcmNoIGNvbnRyb2xsZXIuCi0gICAgV2ViSW5zcGVjdG9yLlNlYXJj
aFNjb3BlLmNhbGwodGhpcykKLSAgICB0aGlzLl9zZWFyY2hJZCA9IDA7Ci0gICAgdGhpcy5fd29y
a3NwYWNlID0gd29ya3NwYWNlOwotfQotCi1XZWJJbnNwZWN0b3IuU2NyaXB0c1NlYXJjaFNjb3Bl
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TZWFy
Y2hDb25maWd9IHNlYXJjaENvbmZpZwotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVj
dG9yLkZpbGVCYXNlZFNlYXJjaFJlc3VsdHNQYW5lLlNlYXJjaFJlc3VsdCl9IHNlYXJjaFJlc3Vs
dENhbGxiYWNrCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihib29sZWFuKX0gc2VhcmNoRmluaXNo
ZWRDYWxsYmFjawotICAgICAqLwotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHNlYXJjaENv
bmZpZywgc2VhcmNoUmVzdWx0Q2FsbGJhY2ssIHNlYXJjaEZpbmlzaGVkQ2FsbGJhY2spCi0gICAg
ewotICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTsKLSAgICAgICAgCi0gICAgICAgIHZhciB1aVNv
dXJjZUNvZGVzID0gdGhpcy5fc29ydGVkVUlTb3VyY2VDb2RlcygpOwotICAgICAgICB2YXIgdWlT
b3VyY2VDb2RlSW5kZXggPSAwOwotICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24gZmlsdGVyT3V0
Q29udGVudFNjcmlwdHModWlTb3VyY2VDb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gIXVpU291cmNlQ29kZS5pc0NvbnRlbnRTY3JpcHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNlYXJjaEluQ29udGVudFNjcmlwdHMu
Z2V0KCkpCi0gICAgICAgICAgICB1aVNvdXJjZUNvZGVzID0gdWlTb3VyY2VDb2Rlcy5maWx0ZXIo
ZmlsdGVyT3V0Q29udGVudFNjcmlwdHMpOwotCi0gICAgICAgIGZ1bmN0aW9uIGNvbnRpbnVlU2Vh
cmNoKCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRklYTUU6IEVuYWJsZSBzdXBwb3J0IGZv
ciBjb3VudGluZyBtYXRjaGVzIGZvciBpbmNyZW1lbnRhbCBzZWFyY2guCi0gICAgICAgICAgICAv
LyBGSVhNRTogRW5hYmxlIHN1cHBvcnQgZm9yIGJvdW5kaW5nIHNlYXJjaCByZXN1bHRzL21hdGNo
ZXMgbnVtYmVyIHRvIGtlZXAgaW5zcGVjdG9yIHJlc3BvbnNpdmUuCi0gICAgICAgICAgICBpZiAo
dWlTb3VyY2VDb2RlSW5kZXggPCB1aVNvdXJjZUNvZGVzLmxlbmd0aCkgewotICAgICAgICAgICAg
ICAgIHZhciB1aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGVzW3VpU291cmNlQ29kZUluZGV4Kytd
OwotICAgICAgICAgICAgICAgIHVpU291cmNlQ29kZS5zZWFyY2hJbkNvbnRlbnQoc2VhcmNoQ29u
ZmlnLnF1ZXJ5LCAhc2VhcmNoQ29uZmlnLmlnbm9yZUNhc2UsIHNlYXJjaENvbmZpZy5pc1JlZ2V4
LCBzZWFyY2hDYWxsYmFja1dyYXBwZXIuYmluZCh0aGlzLCB0aGlzLl9zZWFyY2hJZCwgdWlTb3Vy
Y2VDb2RlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgc2VhcmNoRmlu
aXNoZWRDYWxsYmFjayh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNlYXJj
aENhbGxiYWNrV3JhcHBlcihzZWFyY2hJZCwgdWlTb3VyY2VDb2RlLCBzZWFyY2hNYXRjaGVzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoSWQgIT09IHRoaXMuX3NlYXJjaElkKSB7
Ci0gICAgICAgICAgICAgICAgc2VhcmNoRmluaXNoZWRDYWxsYmFjayhmYWxzZSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHNlYXJjaFJl
c3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2VhcmNoUmVzdWx0c1BhbmUuU2VhcmNo
UmVzdWx0KHVpU291cmNlQ29kZSwgc2VhcmNoTWF0Y2hlcyk7Ci0gICAgICAgICAgICBzZWFyY2hS
ZXN1bHRDYWxsYmFjayhzZWFyY2hSZXN1bHQpOwotICAgICAgICAgICAgaWYgKHNlYXJjaElkICE9
PSB0aGlzLl9zZWFyY2hJZCkgewotICAgICAgICAgICAgICAgIHNlYXJjaEZpbmlzaGVkQ2FsbGJh
Y2soZmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNvbnRpbnVlU2VhcmNoLmNhbGwodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGNvbnRpbnVlU2VhcmNoLmNhbGwodGhpcyk7Ci0gICAgICAgIHJldHVybiB1aVNvdXJj
ZUNvZGVzLmxlbmd0aDsKLSAgICB9LAotCi0gICAgc3RvcFNlYXJjaDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgKyt0aGlzLl9zZWFyY2hJZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuU2VhcmNoQ29uZmlnfSBzZWFyY2hDb25maWcKLSAgICAgKi8K
LSAgICBjcmVhdGVTZWFyY2hSZXN1bHRzUGFuZTogZnVuY3Rpb24oc2VhcmNoQ29uZmlnKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRmlsZUJhc2VkU2VhcmNoUmVzdWx0
c1BhbmUoc2VhcmNoQ29uZmlnKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+fQotICAgICAqLwotICAgIF9zb3J0ZWRV
SVNvdXJjZUNvZGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBmaWx0ZXJP
dXRBbm9ueW1vdXModWlTb3VyY2VDb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ISF1aVNvdXJjZUNvZGUub3JpZ2luVVJMKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGZ1bmN0aW9uIGNvbXBhcmF0b3IoYSwgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGEub3JpZ2luVVJMKCkuY29tcGFyZVRvKGIub3JpZ2luVVJMKCkpOyAgIAotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICB2YXIgcHJvamVjdHMgPSB0aGlzLl93b3Jrc3BhY2UucHJvamVjdHMo
KTsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZXMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKHByb2plY3Rz
W2ldLmlzU2VydmljZVByb2plY3QoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHVpU291cmNlQ29kZXMgPSB1aVNvdXJjZUNvZGVzLmNvbmNhdChwcm9qZWN0c1tpXS51
aVNvdXJjZUNvZGVzKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1aVNvdXJjZUNv
ZGVzID0gdWlTb3VyY2VDb2Rlcy5maWx0ZXIoZmlsdGVyT3V0QW5vbnltb3VzKTsKLSAgICAgICAg
dWlTb3VyY2VDb2Rlcy5zb3J0KGNvbXBhcmF0b3IpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHVpU291cmNlQ29kZXM7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNl
YXJjaFNjb3BlLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TZWFyY2hDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TZWFyY2hDb250cm9sbGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3OTFiOThhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2VhcmNoQ29udHJvbGxlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ2MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTWF0dCBMaWxlayAocGV3
dGVybW9vc2VAZ21haWwuY29tKS4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jh
cm8KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVy
ID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJ0YWJsZSIpOwotICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NOYW1lID0gInRvb2xiYXItc2Vh
cmNoIjsKLSAgICB0aGlzLl9lbGVtZW50LmNlbGxTcGFjaW5nID0gMDsKLQotICAgIHRoaXMuX2Zp
cnN0Um93RWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuY3JlYXRlQ2hpbGQoInRyIik7Ci0gICAgdGhp
cy5fc2Vjb25kUm93RWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuY3JlYXRlQ2hpbGQoInRyIiwgImhp
ZGRlbiIpOwotCi0gICAgLy8gQ29sdW1uIDEKLSAgICB2YXIgc2VhcmNoQ29udHJvbEVsZW1lbnRD
b2x1bW4gPSB0aGlzLl9maXJzdFJvd0VsZW1lbnQuY3JlYXRlQ2hpbGQoInRkIik7IAotICAgIHRo
aXMuX3NlYXJjaENvbnRyb2xFbGVtZW50ID0gc2VhcmNoQ29udHJvbEVsZW1lbnRDb2x1bW4uY3Jl
YXRlQ2hpbGQoInNwYW4iLCAidG9vbGJhci1zZWFyY2gtY29udHJvbCIpOwotICAgIHRoaXMuX3Nl
YXJjaElucHV0RWxlbWVudCA9IHRoaXMuX3NlYXJjaENvbnRyb2xFbGVtZW50LmNyZWF0ZUNoaWxk
KCJpbnB1dCIsICJzZWFyY2gtcmVwbGFjZSIpOwotICAgIHRoaXMuX3NlYXJjaElucHV0RWxlbWVu
dC5pZCA9ICJzZWFyY2gtaW5wdXQtZmllbGQiOwotICAgIHRoaXMuX3NlYXJjaElucHV0RWxlbWVu
dC5wbGFjZWhvbGRlciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRmluZCIpOwotCi0gICAgdGhp
cy5fZmlsdGVyQ29udHJvbEVsZW1lbnQgPSBzZWFyY2hDb250cm9sRWxlbWVudENvbHVtbi5jcmVh
dGVDaGlsZCgic3BhbiIsICJ0b29sYmFyLXNlYXJjaC1jb250cm9sIik7Ci0gICAgdGhpcy5fZmls
dGVyQ29udHJvbEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgdGhpcy5fZmls
dGVySW5wdXRFbGVtZW50ID0gdGhpcy5fZmlsdGVyQ29udHJvbEVsZW1lbnQuY3JlYXRlQ2hpbGQo
ImlucHV0IiwgImZpbHRlciIpOwotICAgIHRoaXMuX2ZpbHRlcklucHV0RWxlbWVudC5pZCA9ICJm
aWx0ZXItaW5wdXQtZmllbGQiOwotICAgIHRoaXMuX2ZpbHRlcklucHV0RWxlbWVudC5wbGFjZWhv
bGRlciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRmlsdGVyIik7Ci0KLSAgICB0aGlzLl9tYXRj
aGVzRWxlbWVudCA9IHRoaXMuX3NlYXJjaENvbnRyb2xFbGVtZW50LmNyZWF0ZUNoaWxkKCJsYWJl
bCIsICJzZWFyY2gtcmVzdWx0cy1tYXRjaGVzIik7Ci0gICAgdGhpcy5fbWF0Y2hlc0VsZW1lbnQu
c2V0QXR0cmlidXRlKCJmb3IiLCAic2VhcmNoLWlucHV0LWZpZWxkIik7Ci0KLSAgICB2YXIgc2Vh
cmNoTmF2aWdhdGlvbkVsZW1lbnQgPSB0aGlzLl9zZWFyY2hDb250cm9sRWxlbWVudC5jcmVhdGVD
aGlsZCgiZGl2IiwgInRvb2xiYXItc2VhcmNoLW5hdmlnYXRpb24tY29udHJvbHMiKTsKLQotICAg
IHRoaXMuX3NlYXJjaE5hdmlnYXRpb25QcmV2RWxlbWVudCA9IHNlYXJjaE5hdmlnYXRpb25FbGVt
ZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAidG9vbGJhci1zZWFyY2gtbmF2aWdhdGlvbiB0b29sYmFy
LXNlYXJjaC1uYXZpZ2F0aW9uLXByZXYiKTsKLSAgICB0aGlzLl9zZWFyY2hOYXZpZ2F0aW9uUHJl
dkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9vblByZXZCdXR0b25TZWFy
Y2guYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX3NlYXJjaE5hdmlnYXRpb25QcmV2RWxl
bWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2VhcmNoIFByZXZpb3VzIik7Ci0K
LSAgICB0aGlzLl9zZWFyY2hOYXZpZ2F0aW9uTmV4dEVsZW1lbnQgPSBzZWFyY2hOYXZpZ2F0aW9u
RWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInRvb2xiYXItc2VhcmNoLW5hdmlnYXRpb24gdG9v
bGJhci1zZWFyY2gtbmF2aWdhdGlvbi1uZXh0Iik7IAotICAgIHRoaXMuX3NlYXJjaE5hdmlnYXRp
b25OZXh0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uTmV4dEJ1dHRv
blNlYXJjaC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5fc2VhcmNoTmF2aWdhdGlvbk5l
eHRFbGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZWFyY2ggTmV4dCIpOwot
Ci0gICAgdGhpcy5fc2VhcmNoSW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93
biIsIHRoaXMuX29uU2VhcmNoRmllbGRNYW51YWxGb2N1cy5iaW5kKHRoaXMpLCBmYWxzZSk7IC8v
IHdoZW4gdGhlIHNlYXJjaCBmaWVsZCBpcyBtYW51YWxseSBzZWxlY3RlZAotICAgIHRoaXMuX3Nl
YXJjaElucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlE
b3duLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuX2ZpbHRlcklucHV0RWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksIHRydWUp
OwotICAgIHRoaXMuX2ZpbHRlcklucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIs
IHRoaXMuX29uRmlsdGVySW5wdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX3NlYXJj
aElucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIHRoaXMuX29uU2VhcmNoSW5w
dXQuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgdGhpcy5fcmVwbGFjZUlucHV0RWxlbWVudCA9
IHRoaXMuX3NlY29uZFJvd0VsZW1lbnQuY3JlYXRlQ2hpbGQoInRkIikuY3JlYXRlQ2hpbGQoImlu
cHV0IiwgInNlYXJjaC1yZXBsYWNlIHRvb2xiYXItcmVwbGFjZS1jb250cm9sIik7Ci0gICAgdGhp
cy5fcmVwbGFjZUlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5f
b25LZXlEb3duLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuX3JlcGxhY2VJbnB1dEVsZW1l
bnQucGxhY2Vob2xkZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlcGxhY2UiKTsKLQotICAg
IC8vIENvbHVtbiAyCi0gICAgdGhpcy5fZmluZEJ1dHRvbkVsZW1lbnQgPSB0aGlzLl9maXJzdFJv
d0VsZW1lbnQuY3JlYXRlQ2hpbGQoInRkIikuY3JlYXRlQ2hpbGQoImJ1dHRvbiIsICJoaWRkZW4i
KTsKLSAgICB0aGlzLl9maW5kQnV0dG9uRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiRmluZCIpOwotICAgIHRoaXMuX2ZpbmRCdXR0b25FbGVtZW50LnRhYkluZGV4
ID0gLTE7Ci0gICAgdGhpcy5fZmluZEJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xp
Y2siLCB0aGlzLl9vbk5leHRCdXR0b25TZWFyY2guYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAg
dGhpcy5fcmVwbGFjZUJ1dHRvbkVsZW1lbnQgPSB0aGlzLl9zZWNvbmRSb3dFbGVtZW50LmNyZWF0
ZUNoaWxkKCJ0ZCIpLmNyZWF0ZUNoaWxkKCJidXR0b24iKTsKLSAgICB0aGlzLl9yZXBsYWNlQnV0
dG9uRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVwbGFjZSIp
OwotICAgIHRoaXMuX3JlcGxhY2VCdXR0b25FbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLSAgICB0
aGlzLl9yZXBsYWNlQnV0dG9uRWxlbWVudC50YWJJbmRleCA9IC0xOwotICAgIHRoaXMuX3JlcGxh
Y2VCdXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcmVwbGFjZS5i
aW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICAvLyBDb2x1bW4gMwotICAgIHRoaXMuX3ByZXZCdXR0
b25FbGVtZW50ID0gdGhpcy5fZmlyc3RSb3dFbGVtZW50LmNyZWF0ZUNoaWxkKCJ0ZCIpLmNyZWF0
ZUNoaWxkKCJidXR0b24iLCAiaGlkZGVuIik7Ci0gICAgdGhpcy5fcHJldkJ1dHRvbkVsZW1lbnQu
dGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByZXZpb3VzIik7Ci0gICAgdGhp
cy5fcHJldkJ1dHRvbkVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwotICAgIHRoaXMuX3ByZXZCdXR0
b25FbGVtZW50LnRhYkluZGV4ID0gLTE7Ci0gICAgdGhpcy5fcHJldkJ1dHRvbkVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9vblByZXZCdXR0b25TZWFyY2guYmluZCh0aGlz
KSwgZmFsc2UpOwotCi0gICAgdGhpcy5fcmVwbGFjZUFsbEJ1dHRvbkVsZW1lbnQgPSB0aGlzLl9z
ZWNvbmRSb3dFbGVtZW50LmNyZWF0ZUNoaWxkKCJ0ZCIpLmNyZWF0ZUNoaWxkKCJidXR0b24iKTsK
LSAgICB0aGlzLl9yZXBsYWNlQWxsQnV0dG9uRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiUmVwbGFjZSBBbGwiKTsKLSAgICB0aGlzLl9yZXBsYWNlQWxsQnV0dG9u
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3JlcGxhY2VBbGwuYmluZCh0
aGlzKSwgZmFsc2UpOwotCi0gICAgLy8gQ29sdW1uIDQKLSAgICB0aGlzLl9yZXBsYWNlRWxlbWVu
dCA9IHRoaXMuX2ZpcnN0Um93RWxlbWVudC5jcmVhdGVDaGlsZCgidGQiKS5jcmVhdGVDaGlsZCgi
c3BhbiIpOwotCi0gICAgdGhpcy5fcmVwbGFjZUNoZWNrYm94RWxlbWVudCA9IHRoaXMuX3JlcGxh
Y2VFbGVtZW50LmNyZWF0ZUNoaWxkKCJpbnB1dCIpOwotICAgIHRoaXMuX3JlcGxhY2VDaGVja2Jv
eEVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7Ci0gICAgdGhpcy5fcmVwbGFjZUNoZWNrYm94RWxl
bWVudC5pZCA9ICJzZWFyY2gtcmVwbGFjZS10cmlnZ2VyIjsKLSAgICB0aGlzLl9yZXBsYWNlQ2hl
Y2tib3hFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdXBkYXRlU2Vjb25k
Um93VmlzaWJpbGl0eS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICB0aGlzLl9yZXBsYWNlTGFi
ZWxFbGVtZW50ID0gdGhpcy5fcmVwbGFjZUVsZW1lbnQuY3JlYXRlQ2hpbGQoImxhYmVsIik7Ci0g
ICAgdGhpcy5fcmVwbGFjZUxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiUmVwbGFjZSIpOwotICAgIHRoaXMuX3JlcGxhY2VMYWJlbEVsZW1lbnQuc2V0QXR0
cmlidXRlKCJmb3IiLCAic2VhcmNoLXJlcGxhY2UtdHJpZ2dlciIpOwotCi0gICAgLy8gQ29sdW1u
IDUKLSAgICB0aGlzLl9maWx0ZXJDaGVja2JveENvbnRhaW5lciA9IHRoaXMuX2ZpcnN0Um93RWxl
bWVudC5jcmVhdGVDaGlsZCgidGQiKS5jcmVhdGVDaGlsZCgic3BhbiIpOwotCi0gICAgdGhpcy5f
ZmlsdGVyQ2hlY2tib3hFbGVtZW50ID0gdGhpcy5fZmlsdGVyQ2hlY2tib3hDb250YWluZXIuY3Jl
YXRlQ2hpbGQoImlucHV0Iik7Ci0gICAgdGhpcy5fZmlsdGVyQ2hlY2tib3hFbGVtZW50LnR5cGUg
PSAiY2hlY2tib3giOwotICAgIHRoaXMuX2ZpbHRlckNoZWNrYm94RWxlbWVudC5pZCA9ICJmaWx0
ZXItdHJpZ2dlciI7Ci0gICAgdGhpcy5fZmlsdGVyQ2hlY2tib3hFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgdGhpcy5fZmlsdGVyQ2hlY2tib3hDbGljay5iaW5kKHRoaXMpLCBmYWxz
ZSk7Ci0gIAotICAgIHRoaXMuX2ZpbHRlckxhYmVsRWxlbWVudCA9IHRoaXMuX2ZpbHRlckNoZWNr
Ym94Q29udGFpbmVyLmNyZWF0ZUNoaWxkKCJsYWJlbCIpOwotICAgIHRoaXMuX2ZpbHRlckxhYmVs
RWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRmlsdGVyIik7Ci0g
ICAgdGhpcy5fZmlsdGVyTGFiZWxFbGVtZW50LnNldEF0dHJpYnV0ZSgiZm9yIiwgImZpbHRlci10
cmlnZ2VyIik7Ci0KLSAgICAvLyBDb2x1bW4gNgotICAgIHZhciBjYW5jZWxCdXR0b25FbGVtZW50
ID0gdGhpcy5fZmlyc3RSb3dFbGVtZW50LmNyZWF0ZUNoaWxkKCJ0ZCIpLmNyZWF0ZUNoaWxkKCJi
dXR0b24iKTsKLSAgICBjYW5jZWxCdXR0b25FbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJDYW5jZWwiKTsKLSAgICBjYW5jZWxCdXR0b25FbGVtZW50LnRhYkluZGV4
ID0gLTE7Ci0gICAgY2FuY2VsQnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
IHRoaXMuY2FuY2VsU2VhcmNoLmJpbmQodGhpcyksIGZhbHNlKTsKLX0KLQotV2ViSW5zcGVjdG9y
LlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlID0gewotICAgIHVwZGF0ZVNlYXJjaE1hdGNoZXND
b3VudDogZnVuY3Rpb24obWF0Y2hlcywgcGFuZWwpCi0gICAgewotICAgICAgICBpZiAoIXBhbmVs
KQotICAgICAgICAgICAgcGFuZWwgPSBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50
UGFuZWwoKTsKLQotICAgICAgICBwYW5lbC5jdXJyZW50U2VhcmNoTWF0Y2hlcyA9IG1hdGNoZXM7
Ci0KLSAgICAgICAgaWYgKHBhbmVsID09PSBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJy
ZW50UGFuZWwoKSkKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudEFu
ZEN1cnJlbnRNYXRjaEluZGV4KFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5l
bCgpLmN1cnJlbnRRdWVyeSA/IG1hdGNoZXMgOiAwLCAtMSk7Ci0gICAgfSwKLQotICAgIHVwZGF0
ZUN1cnJlbnRNYXRjaEluZGV4OiBmdW5jdGlvbihjdXJyZW50TWF0Y2hJbmRleCwgcGFuZWwpCi0g
ICAgewotICAgICAgICBpZiAocGFuZWwgPT09IFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1
cnJlbnRQYW5lbCgpKQotICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50
QW5kQ3VycmVudE1hdGNoSW5kZXgocGFuZWwuY3VycmVudFNlYXJjaE1hdGNoZXMsIGN1cnJlbnRN
YXRjaEluZGV4KTsKLSAgICB9LAotCi0gICAgY2FuY2VsU2VhcmNoOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaElzVmlzaWJsZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKHRoaXMuX2ZpbHRlckNoZWNrYm94RWxlbWVudC5jaGVja2VkKSB7Ci0g
ICAgICAgICAgICB0aGlzLl9maWx0ZXJDaGVja2JveEVsZW1lbnQuY2hlY2tlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgdGhpcy5fc3dpdGNoRmlsdGVyVG9TZWFyY2goKTsKLSAgICAgICAgfSAKLSAg
ICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaElzVmlzaWJsZTsKLSAgICAgICAgV2ViSW5zcGVjdG9y
Lmluc3BlY3RvclZpZXcuc2V0Rm9vdGVyRWxlbWVudChudWxsKTsKLSAgICAgICAgdGhpcy5yZXNl
dFNlYXJjaCgpOwotICAgIH0sCi0KLSAgICByZXNldFNlYXJjaDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fcGVyZm9ybVNlYXJjaCgiIiwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAg
dGhpcy5fdXBkYXRlUmVwbGFjZVZpc2liaWxpdHkoKTsKLSAgICAgICAgdGhpcy5fbWF0Y2hlc0Vs
ZW1lbnQudGV4dENvbnRlbnQgPSAiIjsKLSAgICB9LAotCi0gICAgZGlzYWJsZVNlYXJjaFVudGls
RXhwbGljaXRBY3Rpb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BlcmZvcm1T
ZWFyY2goIiIsIGZhbHNlLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7RXZlbnR9IGV2ZW50Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBo
YW5kbGVTaG9ydGN1dDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgaXNNYWMg
PSBXZWJJbnNwZWN0b3IuaXNNYWMoKTsKLQotICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50
aWZpZXIpIHsKLSAgICAgICAgICAgIGNhc2UgIlUrMDA0NiI6IC8vIEYga2V5Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzTWFjKQotICAgICAgICAgICAgICAgICAgICB2YXIgaXNGaW5kS2V5ID0gZXZl
bnQubWV0YUtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5z
aGlmdEtleTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZhciBp
c0ZpbmRLZXkgPSBldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRL
ZXkgJiYgIWV2ZW50LnNoaWZ0S2V5OwotCi0gICAgICAgICAgICAgICAgaWYgKGlzRmluZEtleSkg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTZWFyY2hGaWVsZCgpOwotICAgICAgICAg
ICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGNhc2UgIkYzIjoKLSAgICAgICAgICAgICAgICBpZiAoIWlzTWFjKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGV2ZW50LmNvbnN1bWUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgIlUrMDA0NyI6IC8vIEcga2V5Ci0gICAgICAgICAg
ICAgICAgdmFyIGN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJl
bnRQYW5lbCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzTWFjICYmIGV2ZW50Lm1ldGFLZXkg
JiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoZXZlbnQuc2hpZnRLZXkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFu
ZWwuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhbmVsLmp1bXBUb05leHRTZWFyY2hS
ZXN1bHQoKTsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAot
Ci0gICAgX3VwZGF0ZVNlYXJjaE5hdmlnYXRpb25CdXR0b25TdGF0ZTogZnVuY3Rpb24oZW5hYmxl
ZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlcGxhY2VCdXR0b25FbGVtZW50LmRpc2FibGVkID0g
IWVuYWJsZWQ7Ci0gICAgICAgIHRoaXMuX3ByZXZCdXR0b25FbGVtZW50LmRpc2FibGVkID0gIWVu
YWJsZWQ7Ci0gICAgICAgIHZhciBwYW5lbCA9IFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1
cnJlbnRQYW5lbCgpOwotICAgICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICAgICAgdGhpcy5f
c2VhcmNoTmF2aWdhdGlvblByZXZFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImVuYWJsZWQiKTsKLSAg
ICAgICAgICAgIHRoaXMuX3NlYXJjaE5hdmlnYXRpb25OZXh0RWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJlbmFibGVkIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9zZWFyY2hO
YXZpZ2F0aW9uUHJldkVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZW5hYmxlZCIpOwotICAgICAg
ICAgICAgdGhpcy5fc2VhcmNoTmF2aWdhdGlvbk5leHRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3Mo
ImVuYWJsZWQiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gbWF0Y2hlcwotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50TWF0Y2hJbmRl
eAotICAgICAqLwotICAgIF91cGRhdGVTZWFyY2hNYXRjaGVzQ291bnRBbmRDdXJyZW50TWF0Y2hJ
bmRleDogZnVuY3Rpb24obWF0Y2hlcywgY3VycmVudE1hdGNoSW5kZXgpCi0gICAgewotICAgICAg
ICBpZiAobWF0Y2hlcyA9PT0gMCB8fCBjdXJyZW50TWF0Y2hJbmRleCA+PSAwKQotICAgICAgICAg
ICAgdGhpcy5fbWF0Y2hlc0VsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIiVkIG9mICVkIiwgY3VycmVudE1hdGNoSW5kZXggKyAxLCBtYXRjaGVzKTsKLSAgICAgICAg
dGhpcy5fdXBkYXRlU2VhcmNoTmF2aWdhdGlvbkJ1dHRvblN0YXRlKG1hdGNoZXMgPiAwKTsKLSAg
ICB9LAotCi0gICAgc2hvd1NlYXJjaEZpZWxkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBX
ZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5zZXRGb290ZXJFbGVtZW50KHRoaXMuX2VsZW1lbnQp
OwotICAgICAgICB0aGlzLl91cGRhdGVSZXBsYWNlVmlzaWJpbGl0eSgpOwotICAgICAgICB0aGlz
Ll91cGRhdGVGaWx0ZXJWaXNpYmlsaXR5KCk7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuY3Vy
cmVudEZvY3VzRWxlbWVudCgpICE9PSB0aGlzLl9zZWFyY2hJbnB1dEVsZW1lbnQpIHsKLSAgICAg
ICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgICAg
ICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNo
SW5wdXRFbGVtZW50LnZhbHVlID0gc2VsZWN0aW9uLnRvU3RyaW5nKCkucmVwbGFjZSgvXHI/XG4u
Ki8sICIiKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9wZXJmb3JtU2VhcmNoKHRoaXMuX3Nl
YXJjaElucHV0RWxlbWVudC52YWx1ZSwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICB0aGlzLl9zZWFy
Y2hJbnB1dEVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRFbGVtZW50
LnNlbGVjdCgpOwotICAgICAgICB0aGlzLl9zZWFyY2hJc1Zpc2libGUgPSB0cnVlOwotICAgIH0s
Ci0KLSAgICBfc3dpdGNoRmlsdGVyVG9TZWFyY2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2ZpbHRlckNvbnRyb2xFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAg
ICAgICB0aGlzLl9zZWFyY2hDb250cm9sRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4i
KTsKLSAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRFbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgIHRo
aXMuX3NlYXJjaElucHV0RWxlbWVudC5zZWxlY3QoKTsKLSAgICAgICAgdGhpcy5fc2VhcmNoSW5w
dXRFbGVtZW50LnZhbHVlID0gdGhpcy5fZmlsdGVySW5wdXRFbGVtZW50LnZhbHVlOwotICAgICAg
ICB0aGlzLnJlc2V0RmlsdGVyKCk7Ci0gICAgfSwKLQotICAgIF9zd2l0Y2hTZWFyY2hUb0ZpbHRl
cjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZmlsdGVyQ29udHJvbEVsZW1lbnQu
cmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgIHRoaXMuX3NlYXJjaENvbnRyb2xF
bGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICB0aGlzLl9maWx0ZXJJbnB1
dEVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgdGhpcy5fZmlsdGVySW5wdXRFbGVtZW50LnNlbGVj
dCgpOwotICAgICAgICB0aGlzLl9maWx0ZXJJbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLl9zZWFy
Y2hJbnB1dEVsZW1lbnQudmFsdWU7Ci0gICAgICAgIHRoaXMucmVzZXRTZWFyY2goKTsKLSAgICB9
LAotICAgIAotICAgIF91cGRhdGVGaWx0ZXJWaXNpYmlsaXR5OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmluc3BlY3RvclZpZXcuY3VycmVudFBhbmVsKCkuY2Fu
RmlsdGVyKCkpCi0gICAgICAgICAgICB0aGlzLl9maWx0ZXJDaGVja2JveENvbnRhaW5lci5yZW1v
dmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5f
ZmlsdGVyQ2hlY2tib3hDb250YWluZXIuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgfSwK
LSAgCi0gICAgX3VwZGF0ZVJlcGxhY2VWaXNpYmlsaXR5OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgcGFuZWwgPSBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50UGFuZWwo
KTsKLSAgICAgICAgaWYgKHBhbmVsICYmIHBhbmVsLmNhblNlYXJjaEFuZFJlcGxhY2UoKSkKLSAg
ICAgICAgICAgIHRoaXMuX3JlcGxhY2VFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VFbGVtZW50LmFkZFN0
eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICAgICAgdGhpcy5fcmVwbGFjZUNoZWNrYm94RWxl
bWVudC5jaGVja2VkID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVTZWNvbmRSb3dW
aXNpYmlsaXR5KCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX29uU2VhcmNoRmllbGRNYW51
YWxGb2N1czogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0
Q3VycmVudEZvY3VzRWxlbWVudChldmVudC50YXJnZXQpOwotICAgIH0sCi0KLSAgICBfb25LZXlE
b3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIC8vIEVzY2FwZSBLZXkgd2lsbCBj
bGVhciB0aGUgZmllbGQgYW5kIGNsZWFyIHRoZSBzZWFyY2ggcmVzdWx0cwotICAgICAgICBpZiAo
ZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5Fc2Mu
Y29kZSkgewotICAgICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAgICAgICAgIHRo
aXMuY2FuY2VsU2VhcmNoKCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0Q3VycmVudEZv
Y3VzRWxlbWVudChXZWJJbnNwZWN0b3IucHJldmlvdXNGb2N1c0VsZW1lbnQoKSk7Ci0gICAgICAg
ICAgICBpZiAoV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQoKSA9PT0gZXZlbnQudGFy
Z2V0KQotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50KCku
c2VsZWN0KCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXNFbnRlcktleShldmVudCkpIHsKLSAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQg
PT09IHRoaXMuX3NlYXJjaElucHV0RWxlbWVudCkKLSAgICAgICAgICAgICAgICB0aGlzLl9wZXJm
b3JtU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSwgdHJ1ZSwgZXZlbnQuc2hpZnRLZXkpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLl9yZXBsYWNlSW5wdXRFbGVt
ZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2UoKTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfb25OZXh0QnV0dG9uU2VhcmNoOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIC8vIFNpbXVsYXRlIG5leHQgc2VhcmNoIG9uIHNlYXJjaC1uYXZpZ2F0aW9uLWJ1dHRvbiBj
bGljay4KLSAgICAgICAgdGhpcy5fcGVyZm9ybVNlYXJjaCh0aGlzLl9zZWFyY2hJbnB1dEVsZW1l
bnQudmFsdWUsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRFbGVtZW50
LmZvY3VzKCk7Ci0gICAgfSwKLQotICAgIF9vblByZXZCdXR0b25TZWFyY2g6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2hOYXZpZ2F0aW9uUHJldkVsZW1l
bnQuaGFzU3R5bGVDbGFzcygiZW5hYmxlZCIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAvLyBTaW11bGF0ZSBwcmV2aW91cyBzZWFyY2ggb24gc2VhcmNoLW5hdmlnYXRpb24tYnV0dG9u
IGNsaWNrLgotICAgICAgICB0aGlzLl9wZXJmb3JtU2VhcmNoKHRoaXMuX3NlYXJjaElucHV0RWxl
bWVudC52YWx1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuX3NlYXJjaElucHV0RWxlbWVu
dC5mb2N1cygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVl
cnkKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlU2VhcmNoCi0gICAgICogQHBhcmFtIHti
b29sZWFufSBpc0JhY2t3YXJkU2VhcmNoCi0gICAgICovCi0gICAgX3BlcmZvcm1TZWFyY2g6IGZ1
bmN0aW9uKHF1ZXJ5LCBmb3JjZVNlYXJjaCwgaXNCYWNrd2FyZFNlYXJjaCkKLSAgICB7Ci0gICAg
ICAgIGlmICghcXVlcnkgfHwgIXF1ZXJ5Lmxlbmd0aCkgewotICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2N1cnJlbnRRdWVyeTsKLQotICAgICAgICAgICAgZm9yICh2YXIgcGFuZWxOYW1lIGluIFdl
Ykluc3BlY3Rvci5wYW5lbHMpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFuZWwgPSBXZWJJbnNw
ZWN0b3IucGFuZWxzW3BhbmVsTmFtZV07Ci0gICAgICAgICAgICAgICAgdmFyIGhhZEN1cnJlbnRR
dWVyeSA9ICEhcGFuZWwuY3VycmVudFF1ZXJ5OwotICAgICAgICAgICAgICAgIGRlbGV0ZSBwYW5l
bC5jdXJyZW50UXVlcnk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhZEN1cnJlbnRRdWVyeSkKLSAg
ICAgICAgICAgICAgICAgICAgcGFuZWwuc2VhcmNoQ2FuY2VsZWQoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudEFuZEN1cnJlbnRNYXRj
aEluZGV4KDAsIC0xKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IHZhciBjdXJyZW50UGFuZWwgPSBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50UGFu
ZWwoKTsKLSAgICAgICAgaWYgKHF1ZXJ5ID09PSBjdXJyZW50UGFuZWwuY3VycmVudFF1ZXJ5ICYm
IGN1cnJlbnRQYW5lbC5jdXJyZW50UXVlcnkgPT09IHRoaXMuX2N1cnJlbnRRdWVyeSkgewotICAg
ICAgICAgICAgLy8gV2hlbiB0aGlzIGlzIHRoZSBzYW1lIHF1ZXJ5IGFuZCBhIGZvcmNlZCBzZWFy
Y2gsIGp1bXAgdG8gdGhlIG5leHQKLSAgICAgICAgICAgIC8vIHNlYXJjaCByZXN1bHQgZm9yIGEg
Z29vZCB1c2VyIGV4cGVyaWVuY2UuCi0gICAgICAgICAgICBpZiAoZm9yY2VTZWFyY2gpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlzQmFja3dhcmRTZWFyY2gpCi0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRQYW5lbC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXNCYWNrd2FyZFNlYXJjaCkKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFBh
bmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvcmNlU2VhcmNoICYmIHF1
ZXJ5Lmxlbmd0aCA8IDMgJiYgIXRoaXMuX2N1cnJlbnRRdWVyeSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB0aGlzLl9jdXJyZW50UXVlcnkgPSBxdWVyeTsKLQotICAgICAgICBjdXJy
ZW50UGFuZWwuY3VycmVudFF1ZXJ5ID0gcXVlcnk7Ci0gICAgICAgIGN1cnJlbnRQYW5lbC5wZXJm
b3JtU2VhcmNoKHF1ZXJ5KTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVNlY29uZFJvd1Zpc2liaWxp
dHk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2VhcmNoSXNWaXNpYmxl
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fcmVwbGFjZUNoZWNrYm94
RWxlbWVudC5jaGVja2VkKSB7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZFN0eWxlQ2xh
c3MoInRvb2xiYXItc2VhcmNoLXJlcGxhY2UiKTsKLSAgICAgICAgICAgIHRoaXMuX3NlY29uZFJv
d0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICB0aGlzLl9w
cmV2QnV0dG9uRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAg
IHRoaXMuX2ZpbmRCdXR0b25FbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAg
ICAgICAgICAgdGhpcy5fcmVwbGFjZUNoZWNrYm94RWxlbWVudC50YWJJbmRleCA9IC0xOwotICAg
ICAgICAgICAgdGhpcy5fcmVwbGFjZUlucHV0RWxlbWVudC5mb2N1cygpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJ0b29sYmFy
LXNlYXJjaC1yZXBsYWNlIik7Ci0gICAgICAgICAgICB0aGlzLl9zZWNvbmRSb3dFbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICAgICAgdGhpcy5fcHJldkJ1dHRvbkVsZW1l
bnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICB0aGlzLl9maW5kQnV0dG9u
RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAgIHRoaXMuX3JlcGxh
Y2VDaGVja2JveEVsZW1lbnQudGFiSW5kZXggPSAwOwotICAgICAgICAgICAgdGhpcy5fc2VhcmNo
SW5wdXRFbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmlu
c3BlY3RvclZpZXcuc2V0Rm9vdGVyRWxlbWVudCh0aGlzLl9lbGVtZW50KTsKLSAgICB9LAotCi0g
ICAgX3JlcGxhY2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjdXJyZW50UGFuZWwg
PSBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5jdXJyZW50UGFuZWwoKTsKLSAgICAgICAgY3Vy
cmVudFBhbmVsLnJlcGxhY2VTZWxlY3Rpb25XaXRoKHRoaXMuX3JlcGxhY2VJbnB1dEVsZW1lbnQu
dmFsdWUpOwotICAgICAgICB2YXIgcXVlcnkgPSB0aGlzLl9jdXJyZW50UXVlcnk7Ci0gICAgICAg
IGRlbGV0ZSB0aGlzLl9jdXJyZW50UXVlcnk7Ci0gICAgICAgIHRoaXMuX3BlcmZvcm1TZWFyY2go
cXVlcnksIHRydWUsIGZhbHNlKTsKLSAgICB9LAotCi0gICAgX3JlcGxhY2VBbGw6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBjdXJyZW50UGFuZWwgPSBXZWJJbnNwZWN0b3IuaW5zcGVj
dG9yVmlldy5jdXJyZW50UGFuZWwoKTsKLSAgICAgICAgY3VycmVudFBhbmVsLnJlcGxhY2VBbGxX
aXRoKHRoaXMuX3NlYXJjaElucHV0RWxlbWVudC52YWx1ZSwgdGhpcy5fcmVwbGFjZUlucHV0RWxl
bWVudC52YWx1ZSk7Ci0gICAgfSwKLSAgCi0gICAgX2ZpbHRlckNoZWNrYm94Q2xpY2s6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9maWx0ZXJDaGVja2JveEVsZW1lbnQuY2hl
Y2tlZCkgeyAKLSAgICAgICAgICAgIHRoaXMuX3N3aXRjaFNlYXJjaFRvRmlsdGVyKCk7Ci0gICAg
ICAgICAgICB0aGlzLl9wZXJmb3JtRmlsdGVyKHRoaXMuX2ZpbHRlcklucHV0RWxlbWVudC52YWx1
ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9zd2l0Y2hGaWx0ZXJUb1Nl
YXJjaCgpOwotICAgICAgICAgICAgdGhpcy5fcGVyZm9ybVNlYXJjaCh0aGlzLl9zZWFyY2hJbnB1
dEVsZW1lbnQudmFsdWUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIAot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqLwotICAgIF9wZXJm
b3JtRmlsdGVyOiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5p
bnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpLnBlcmZvcm1GaWx0ZXIocXVlcnkpOwotICAgIH0s
Ci0gIAotICAgIF9vbkZpbHRlcklucHV0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX3BlcmZvcm1GaWx0ZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTsKLSAgICB9LAotICAKLSAg
ICBfb25TZWFyY2hJbnB1dDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9w
ZXJmb3JtU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgICB9LAot
ICAgIAotICAgIHJlc2V0RmlsdGVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9w
ZXJmb3JtRmlsdGVyKCIiKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQHR5cGUgez9XZWJJbnNwZWN0
b3IuU2VhcmNoQ29udHJvbGxlcn0KLSAqLwotV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIg
PSBudWxsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
ZWN0aW9uLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZWN0aW9uLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjdmMWVlLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VjdGlvbi5qcworKysgL2Rldi9udWxs
CkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7c3Ry
aW5nfEVsZW1lbnR9IHRpdGxlCi0gKiBAcGFyYW0ge3N0cmluZz19IHN1YnRpdGxlCi0gKi8KLVdl
Ykluc3BlY3Rvci5TZWN0aW9uID0gZnVuY3Rpb24odGl0bGUsIHN1YnRpdGxlKQotewotICAgIHRo
aXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZWxl
bWVudC5jbGFzc05hbWUgPSAic2VjdGlvbiI7Ci0gICAgdGhpcy5lbGVtZW50Ll9zZWN0aW9uID0g
dGhpczsKLQotICAgIHRoaXMuaGVhZGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgIHRoaXMuaGVhZGVyRWxlbWVudC5jbGFzc05hbWUgPSAiaGVhZGVyIjsKLQot
ICAgIHRoaXMudGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgdGhpcy50aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInRpdGxlIjsKLQotICAgIHRoaXMuc3Vi
dGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5z
dWJ0aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInN1YnRpdGxlIjsKLQotICAgIHRoaXMuaGVhZGVy
RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnN1YnRpdGxlRWxlbWVudCk7Ci0gICAgdGhpcy5oZWFk
ZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGl0bGVFbGVtZW50KTsKLQotICAgIHRoaXMuaGVh
ZGVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2suYmlu
ZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhlYWRl
ckVsZW1lbnQpOwotCi0gICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIHRoaXMuc3VidGl0bGUg
PSBzdWJ0aXRsZTsKLSAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlOwotfQotCi1XZWJJbnNwZWN0
b3IuU2VjdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IHRpdGxlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl90aXRsZTsKLSAgICB9LAotCi0gICAgc2V0IHRpdGxlKHgpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fdGl0bGUgPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHRoaXMuX3RpdGxlID0geDsKLQotICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE5vZGUpIHsK
LSAgICAgICAgICAgIHRoaXMudGl0bGVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAg
ICAgICB0aGlzLnRpdGxlRWxlbWVudC5hcHBlbmRDaGlsZCh4KTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB4OwotICAgIH0sCi0KLSAg
ICBnZXQgc3VidGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnRpdGxlOwot
ICAgIH0sCi0KLSAgICBzZXQgc3VidGl0bGUoeCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9z
dWJ0aXRsZSA9PT0geCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fc3VidGl0
bGUgPSB4OwotICAgICAgICB0aGlzLnN1YnRpdGxlRWxlbWVudC50ZXh0Q29udGVudCA9IHg7Ci0g
ICAgfSwKLQotICAgIGdldCBzdWJ0aXRsZUFzVGV4dEZvclRlc3QoKQotICAgIHsKLSAgICAgICAg
dmFyIHJlc3VsdCA9IHRoaXMuc3VidGl0bGVFbGVtZW50LnRleHRDb250ZW50OwotICAgICAgICB2
YXIgY2hpbGQgPSB0aGlzLnN1YnRpdGxlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS11bmNv
cHlhYmxlXSIpOwotICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIHZhciBsaW5rRGF0
YSA9IGNoaWxkLmdldEF0dHJpYnV0ZSgiZGF0YS11bmNvcHlhYmxlIik7Ci0gICAgICAgICAgICBp
ZiAobGlua0RhdGEpCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmtEYXRhOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIGdldCBleHBhbmRlZCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7Ci0gICAgfSwKLQotICAgIHNl
dCBleHBhbmRlZCh4KQotICAgIHsKLSAgICAgICAgaWYgKHgpCi0gICAgICAgICAgICB0aGlzLmV4
cGFuZCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7Ci0gICAg
fSwKLQotICAgIGdldCBwb3B1bGF0ZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Bv
cHVsYXRlZDsKLSAgICB9LAotCi0gICAgc2V0IHBvcHVsYXRlZCh4KQotICAgIHsKLSAgICAgICAg
dGhpcy5fcG9wdWxhdGVkID0geDsKLSAgICAgICAgaWYgKCF4ICYmIHRoaXMuX2V4cGFuZGVkKSB7
Ci0gICAgICAgICAgICB0aGlzLm9ucG9wdWxhdGUoKTsKLSAgICAgICAgICAgIHRoaXMuX3BvcHVs
YXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgb25wb3B1bGF0ZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgLy8gT3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMuCi0gICAgfSwK
LQotICAgIGdldCBmaXJzdFNpYmxpbmcoKQotICAgIHsKLSAgICAgICAgdmFyIHBhcmVudCA9IHRo
aXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgICAgICBpZiAoIXBhcmVudCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBjaGlsZEVsZW1lbnQgPSBwYXJlbnQuZmly
c3RDaGlsZDsKLSAgICAgICAgd2hpbGUgKGNoaWxkRWxlbWVudCkgewotICAgICAgICAgICAgaWYg
KGNoaWxkRWxlbWVudC5fc2VjdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRFbGVt
ZW50Ll9zZWN0aW9uOwotICAgICAgICAgICAgY2hpbGRFbGVtZW50ID0gY2hpbGRFbGVtZW50Lm5l
eHRTaWJsaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQot
ICAgIGdldCBsYXN0U2libGluZygpCi0gICAgewotICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5l
bGVtZW50LnBhcmVudEVsZW1lbnQ7Ci0gICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIGNoaWxkRWxlbWVudCA9IHBhcmVudC5sYXN0Q2hp
bGQ7Ci0gICAgICAgIHdoaWxlIChjaGlsZEVsZW1lbnQpIHsKLSAgICAgICAgICAgIGlmIChjaGls
ZEVsZW1lbnQuX3NlY3Rpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkRWxlbWVudC5f
c2VjdGlvbjsKLSAgICAgICAgICAgIGNoaWxkRWxlbWVudCA9IGNoaWxkRWxlbWVudC5wcmV2aW91
c1NpYmxpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0g
ICAgZ2V0IG5leHRTaWJsaW5nKCkKLSAgICB7Ci0gICAgICAgIHZhciBjdXJFbGVtZW50ID0gdGhp
cy5lbGVtZW50OwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjdXJFbGVtZW50ID0gY3VyRWxl
bWVudC5uZXh0U2libGluZzsKLSAgICAgICAgfSB3aGlsZSAoY3VyRWxlbWVudCAmJiAhY3VyRWxl
bWVudC5fc2VjdGlvbik7Ci0KLSAgICAgICAgcmV0dXJuIGN1ckVsZW1lbnQgPyBjdXJFbGVtZW50
Ll9zZWN0aW9uIDogbnVsbDsKLSAgICB9LAotCi0gICAgZ2V0IHByZXZpb3VzU2libGluZygpCi0g
ICAgewotICAgICAgICB2YXIgY3VyRWxlbWVudCA9IHRoaXMuZWxlbWVudDsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgY3VyRWxlbWVudCA9IGN1ckVsZW1lbnQucHJldmlvdXNTaWJsaW5nOwot
ICAgICAgICB9IHdoaWxlIChjdXJFbGVtZW50ICYmICFjdXJFbGVtZW50Ll9zZWN0aW9uKTsKLQot
ICAgICAgICByZXR1cm4gY3VyRWxlbWVudCA/IGN1ckVsZW1lbnQuX3NlY3Rpb24gOiBudWxsOwot
ICAgIH0sCi0KLSAgICBleHBhbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9leHBhbmRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fZXhwYW5kZWQg
PSB0cnVlOwotICAgICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZXhwYW5kZWQiKTsK
LQotICAgICAgICBpZiAoIXRoaXMuX3BvcHVsYXRlZCkgewotICAgICAgICAgICAgdGhpcy5vbnBv
cHVsYXRlKCk7Ci0gICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZWQgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIGNvbGxhcHNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
IXRoaXMuX2V4cGFuZGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9leHBh
bmRlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZXhw
YW5kZWQiKTsKLSAgICB9LAotCi0gICAgdG9nZ2xlRXhwYW5kZWQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuZXhwYW5kZWQgPSAhdGhpcy5leHBhbmRlZDsKLSAgICB9LAotCi0gICAg
aGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy50b2dnbGVF
eHBhbmRlZCgpOwotICAgICAgICBldmVudC5jb25zdW1lKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNlODY2Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcworKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotCi12YXIgUHJlZmVyZW5jZXMgPSB7Ci0gICAgbWF4SW5saW5lVGV4dENoaWxkTGVuZ3RoOiA4
MCwKLSAgICBtaW5Db25zb2xlSGVpZ2h0OiA3NSwKLSAgICBtaW5TaWRlYmFyV2lkdGg6IDEwMCwK
LSAgICBtaW5TaWRlYmFySGVpZ2h0OiA3NSwKLSAgICBtaW5FbGVtZW50c1NpZGViYXJXaWR0aDog
MjAwLAotICAgIG1pbkVsZW1lbnRzU2lkZWJhckhlaWdodDogMjAwLAotICAgIG1pblNjcmlwdHNT
aWRlYmFyV2lkdGg6IDIwMCwKLSAgICBzdHlsZVJ1bGVzRXhwYW5kZWRTdGF0ZToge30sCi0gICAg
c2hvd01pc3NpbmdMb2NhbGl6ZWRTdHJpbmdzOiBmYWxzZSwKLSAgICB1c2VMb3dlckNhc2VNZW51
VGl0bGVzT25XaW5kb3dzOiBmYWxzZSwKLSAgICBzaGFyZWRXb3JrZXJzRGVidWdOb3RlOiB1bmRl
ZmluZWQsCi0gICAgbG9jYWxpemVVSTogdHJ1ZSwKLSAgICBleHBvc2VEaXNhYmxlQ2FjaGU6IGZh
bHNlLAotICAgIGFwcGxpY2F0aW9uVGl0bGU6ICJXZWIgSW5zcGVjdG9yIC0gJXMiLAotICAgIHNo
b3dEb2NrVG9SaWdodDogZmFsc2UsCi0gICAgZXhwb3NlRmlsZVN5c3RlbUluc3BlY3Rpb246IGZh
bHNlLAotICAgIGV4cGVyaW1lbnRzRW5hYmxlZDogdHJ1ZQotfQotCi12YXIgQ2FwYWJpbGl0aWVz
ID0gewotICAgIHNhbXBsaW5nQ1BVUHJvZmlsZXI6IGZhbHNlLAotICAgIGRlYnVnZ2VyQ2F1c2Vz
UmVjb21waWxhdGlvbjogdHJ1ZSwKLSAgICBzZXBhcmF0ZVNjcmlwdENvbXBpbGF0aW9uQW5kRXhl
Y3V0aW9uRW5hYmxlZDogZmFsc2UsCi0gICAgcHJvZmlsZXJDYXVzZXNSZWNvbXBpbGF0aW9uOiB0
cnVlLAotICAgIGhlYXBQcm9maWxlclByZXNlbnQ6IGZhbHNlLAotICAgIGNhbk92ZXJyaWRlRGV2
aWNlTWV0cmljczogZmFsc2UsCi0gICAgdGltZWxpbmVTdXBwb3J0c0ZyYW1lSW5zdHJ1bWVudGF0
aW9uOiBmYWxzZSwKLSAgICB0aW1lbGluZUNhbk1vbml0b3JNYWluVGhyZWFkOiBmYWxzZSwKLSAg
ICBjYW5PdmVycmlkZUdlb2xvY2F0aW9uOiBmYWxzZSwKLSAgICBjYW5PdmVycmlkZURldmljZU9y
aWVudGF0aW9uOiBmYWxzZSwKLSAgICBjYW5TaG93RGVidWdCb3JkZXJzOiBmYWxzZSwKLSAgICBj
YW5TaG93RlBTQ291bnRlcjogZmFsc2UsCi0gICAgY2FuQ29udGludW91c2x5UGFpbnQ6IGZhbHNl
LAotICAgIGNhbkluc3BlY3RXb3JrZXJzOiBmYWxzZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICovCi1XZWJJbnNwZWN0b3IuU2V0dGluZ3MgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5f
ZXZlbnRTdXBwb3J0ID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3QoKTsKLSAgICB0aGlzLl9yZWdp
c3RyeSA9IC8qKiBAdHlwZSB7IU9iamVjdC48c3RyaW5nLCAhV2ViSW5zcGVjdG9yLlNldHRpbmc+
fSAqLyAoe30pOwotCi0gICAgdGhpcy5jb2xvckZvcm1hdCA9IHRoaXMuY3JlYXRlU2V0dGluZygi
Y29sb3JGb3JtYXQiLCAib3JpZ2luYWwiKTsKLSAgICB0aGlzLmNvbnNvbGVIaXN0b3J5ID0gdGhp
cy5jcmVhdGVTZXR0aW5nKCJjb25zb2xlSGlzdG9yeSIsIFtdKTsKLSAgICB0aGlzLmRlYnVnZ2Vy
RW5hYmxlZCA9IHRoaXMuY3JlYXRlU2V0dGluZygiZGVidWdnZXJFbmFibGVkIiwgZmFsc2UpOwot
ICAgIHRoaXMuZG9tV29yZFdyYXAgPSB0aGlzLmNyZWF0ZVNldHRpbmcoImRvbVdvcmRXcmFwIiwg
dHJ1ZSk7Ci0gICAgdGhpcy5wcm9maWxlckVuYWJsZWQgPSB0aGlzLmNyZWF0ZVNldHRpbmcoInBy
b2ZpbGVyRW5hYmxlZCIsIGZhbHNlKTsKLSAgICB0aGlzLmV2ZW50TGlzdGVuZXJzRmlsdGVyID0g
dGhpcy5jcmVhdGVTZXR0aW5nKCJldmVudExpc3RlbmVyc0ZpbHRlciIsICJhbGwiKTsKLSAgICB0
aGlzLmxhc3RBY3RpdmVQYW5lbCA9IHRoaXMuY3JlYXRlU2V0dGluZygibGFzdEFjdGl2ZVBhbmVs
IiwgImVsZW1lbnRzIik7Ci0gICAgdGhpcy5sYXN0Vmlld2VkU2NyaXB0RmlsZSA9IHRoaXMuY3Jl
YXRlU2V0dGluZygibGFzdFZpZXdlZFNjcmlwdEZpbGUiLCAiYXBwbGljYXRpb24iKTsKLSAgICB0
aGlzLm1vbml0b3JpbmdYSFJFbmFibGVkID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJtb25pdG9yaW5n
WEhSRW5hYmxlZCIsIGZhbHNlKTsKLSAgICB0aGlzLnByZXNlcnZlQ29uc29sZUxvZyA9IHRoaXMu
Y3JlYXRlU2V0dGluZygicHJlc2VydmVDb25zb2xlTG9nIiwgZmFsc2UpOwotICAgIHRoaXMucmVz
b3VyY2VzTGFyZ2VSb3dzID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJyZXNvdXJjZXNMYXJnZVJvd3Mi
LCB0cnVlKTsKLSAgICB0aGlzLnJlc291cmNlc1NvcnRPcHRpb25zID0gdGhpcy5jcmVhdGVTZXR0
aW5nKCJyZXNvdXJjZXNTb3J0T3B0aW9ucyIsIHt0aW1lT3B0aW9uOiAicmVzcG9uc2VUaW1lIiwg
c2l6ZU9wdGlvbjogInRyYW5zZmVyU2l6ZSJ9KTsKLSAgICB0aGlzLnJlc291cmNlVmlld1RhYiA9
IHRoaXMuY3JlYXRlU2V0dGluZygicmVzb3VyY2VWaWV3VGFiIiwgInByZXZpZXciKTsKLSAgICB0
aGlzLnNob3dJbmhlcml0ZWRDb21wdXRlZFN0eWxlUHJvcGVydGllcyA9IHRoaXMuY3JlYXRlU2V0
dGluZygic2hvd0luaGVyaXRlZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzIiwgZmFsc2UpOwotICAg
IHRoaXMuc2hvd1VzZXJBZ2VudFN0eWxlcyA9IHRoaXMuY3JlYXRlU2V0dGluZygic2hvd1VzZXJB
Z2VudFN0eWxlcyIsIHRydWUpOwotICAgIHRoaXMud2F0Y2hFeHByZXNzaW9ucyA9IHRoaXMuY3Jl
YXRlU2V0dGluZygid2F0Y2hFeHByZXNzaW9ucyIsIFtdKTsKLSAgICB0aGlzLmJyZWFrcG9pbnRz
ID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJicmVha3BvaW50cyIsIFtdKTsKLSAgICB0aGlzLmV2ZW50
TGlzdGVuZXJCcmVha3BvaW50cyA9IHRoaXMuY3JlYXRlU2V0dGluZygiZXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnRzIiwgW10pOwotICAgIHRoaXMuZG9tQnJlYWtwb2ludHMgPSB0aGlzLmNyZWF0ZVNl
dHRpbmcoImRvbUJyZWFrcG9pbnRzIiwgW10pOwotICAgIHRoaXMueGhyQnJlYWtwb2ludHMgPSB0
aGlzLmNyZWF0ZVNldHRpbmcoInhockJyZWFrcG9pbnRzIiwgW10pOwotICAgIHRoaXMuc291cmNl
TWFwc0VuYWJsZWQgPSB0aGlzLmNyZWF0ZVNldHRpbmcoInNvdXJjZU1hcHNFbmFibGVkIiwgZmFs
c2UpOwotICAgIHRoaXMuY2FjaGVEaXNhYmxlZCA9IHRoaXMuY3JlYXRlU2V0dGluZygiY2FjaGVE
aXNhYmxlZCIsIGZhbHNlKTsKLSAgICB0aGlzLm92ZXJyaWRlVXNlckFnZW50ID0gdGhpcy5jcmVh
dGVTZXR0aW5nKCJvdmVycmlkZVVzZXJBZ2VudCIsICIiKTsKLSAgICB0aGlzLnVzZXJBZ2VudCA9
IHRoaXMuY3JlYXRlU2V0dGluZygidXNlckFnZW50IiwgIiIpOwotICAgIHRoaXMuZGV2aWNlTWV0
cmljcyA9IHRoaXMuY3JlYXRlU2V0dGluZygiZGV2aWNlTWV0cmljcyIsICIiKTsKLSAgICB0aGlz
LmRldmljZUZpdFdpbmRvdyA9IHRoaXMuY3JlYXRlU2V0dGluZygiZGV2aWNlRml0V2luZG93Iiwg
ZmFsc2UpOwotICAgIHRoaXMuZW11bGF0ZVRvdWNoRXZlbnRzID0gdGhpcy5jcmVhdGVTZXR0aW5n
KCJlbXVsYXRlVG91Y2hFdmVudHMiLCBmYWxzZSk7Ci0gICAgdGhpcy5zaG93UGFpbnRSZWN0cyA9
IHRoaXMuY3JlYXRlU2V0dGluZygic2hvd1BhaW50UmVjdHMiLCBmYWxzZSk7Ci0gICAgdGhpcy5j
b250aW51b3VzUGFpbnRpbmcgPSB0aGlzLmNyZWF0ZVNldHRpbmcoImNvbnRpbnVvdXNQYWludGlu
ZyIsIGZhbHNlKTsKLSAgICB0aGlzLnNob3dEZWJ1Z0JvcmRlcnMgPSB0aGlzLmNyZWF0ZVNldHRp
bmcoInNob3dEZWJ1Z0JvcmRlcnMiLCBmYWxzZSk7Ci0gICAgdGhpcy5zaG93RlBTQ291bnRlciA9
IHRoaXMuY3JlYXRlU2V0dGluZygic2hvd0ZQU0NvdW50ZXIiLCBmYWxzZSk7Ci0gICAgdGhpcy5z
aG93U2hhZG93RE9NID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJzaG93U2hhZG93RE9NIiwgZmFsc2Up
OwotICAgIHRoaXMuem9vbUxldmVsID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJ6b29tTGV2ZWwiLCAw
KTsKLSAgICB0aGlzLnNhdmVkVVJMcyA9IHRoaXMuY3JlYXRlU2V0dGluZygic2F2ZWRVUkxzIiwg
e30pOwotICAgIHRoaXMuamF2YVNjcmlwdERpc2FibGVkID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJq
YXZhU2NyaXB0RGlzYWJsZWQiLCBmYWxzZSk7Ci0gICAgdGhpcy5nZW9sb2NhdGlvbk92ZXJyaWRl
ID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJnZW9sb2NhdGlvbk92ZXJyaWRlIiwgIiIpOwotICAgIHRo
aXMuZGV2aWNlT3JpZW50YXRpb25PdmVycmlkZSA9IHRoaXMuY3JlYXRlU2V0dGluZygiZGV2aWNl
T3JpZW50YXRpb25PdmVycmlkZSIsICIiKTsKLSAgICB0aGlzLnNob3dIZWFwU25hcHNob3RPYmpl
Y3RzSGlkZGVuUHJvcGVydGllcyA9IHRoaXMuY3JlYXRlU2V0dGluZygic2hvd0hlYXBTbmFwc2hv
dE9iamVjdHNIaWRkZW5Qcm9wZXJ0aWVzIiwgZmFsc2UpOwotICAgIHRoaXMuc2VhcmNoSW5Db250
ZW50U2NyaXB0cyA9IHRoaXMuY3JlYXRlU2V0dGluZygic2VhcmNoSW5Db250ZW50U2NyaXB0cyIs
IGZhbHNlKTsKLSAgICB0aGlzLnRleHRFZGl0b3JJbmRlbnQgPSB0aGlzLmNyZWF0ZVNldHRpbmco
InRleHRFZGl0b3JJbmRlbnQiLCAiICAgICIpOwotICAgIHRoaXMubGFzdERvY2tTdGF0ZSA9IHRo
aXMuY3JlYXRlU2V0dGluZygibGFzdERvY2tTdGF0ZSIsICIiKTsKLSAgICB0aGlzLmNzc1JlbG9h
ZEVuYWJsZWQgPSB0aGlzLmNyZWF0ZVNldHRpbmcoImNzc1JlbG9hZEVuYWJsZWQiLCBmYWxzZSk7
Ci0gICAgdGhpcy5jc3NSZWxvYWRUaW1lb3V0ID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJjc3NSZWxv
YWRUaW1lb3V0IiwgMTAwMCk7Ci0gICAgdGhpcy5zaG93Q3B1T25UaW1lbGluZVJ1bGVyID0gdGhp
cy5jcmVhdGVTZXR0aW5nKCJzaG93Q3B1T25UaW1lbGluZVJ1bGVyIiwgZmFsc2UpOwotICAgIHRo
aXMudGltZWxpbmVTdGFja0ZyYW1lc1RvQ2FwdHVyZSA9IHRoaXMuY3JlYXRlU2V0dGluZygidGlt
ZWxpbmVTdGFja0ZyYW1lc1RvQ2FwdHVyZSIsIDMwKTsKLSAgICB0aGlzLnRpbWVsaW5lTGltaXRT
dGFja0ZyYW1lc0ZsYWcgPSB0aGlzLmNyZWF0ZVNldHRpbmcoInRpbWVsaW5lTGltaXRTdGFja0Zy
YW1lc0ZsYWciLCBmYWxzZSk7Ci0gICAgdGhpcy5zaG93TWV0cmljc1J1bGVycyA9IHRoaXMuY3Jl
YXRlU2V0dGluZygic2hvd01ldHJpY3NSdWxlcnMiLCBmYWxzZSk7Ci0gICAgdGhpcy5lbXVsYXRl
ZENTU01lZGlhID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJlbXVsYXRlZENTU01lZGlhIiwgInByaW50
Iik7Ci0gICAgdGhpcy5zaG93VG9vbGJhckljb25zID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJzaG93
VG9vbGJhckljb25zIiwgZmFsc2UpOwotICAgIHRoaXMud29ya2VySW5zcGVjdG9yV2lkdGggPSB0
aGlzLmNyZWF0ZVNldHRpbmcoIndvcmtlckluc3BlY3RvcldpZHRoIiwgNjAwKTsKLSAgICB0aGlz
Lndvcmtlckluc3BlY3RvckhlaWdodCA9IHRoaXMuY3JlYXRlU2V0dGluZygid29ya2VySW5zcGVj
dG9ySGVpZ2h0IiwgNjAwKTsKLSAgICB0aGlzLm1lc3NhZ2VVUkxGaWx0ZXJzID0gdGhpcy5jcmVh
dGVTZXR0aW5nKCJtZXNzYWdlVVJMRmlsdGVycyIsIHt9KTsKLSAgICB0aGlzLnNwbGl0VmVydGlj
YWxseVdoZW5Eb2NrZWRUb1JpZ2h0ID0gdGhpcy5jcmVhdGVTZXR0aW5nKCJzcGxpdFZlcnRpY2Fs
bHlXaGVuRG9ja2VkVG9SaWdodCIsIHRydWUpOwotICAgIHRoaXMudmlzaWJsZVBhbmVscyA9IHRo
aXMuY3JlYXRlU2V0dGluZygidmlzaWJsZVBhbmVscyIsIHt9KTsKLX0KLQotV2ViSW5zcGVjdG9y
LlNldHRpbmdzLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
a2V5Ci0gICAgICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWUKLSAgICAgKiBAcmV0dXJuIHshV2Vi
SW5zcGVjdG9yLlNldHRpbmd9Ci0gICAgICovCi0gICAgY3JlYXRlU2V0dGluZzogZnVuY3Rpb24o
a2V5LCBkZWZhdWx0VmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdHJ5W2tl
eV0pCi0gICAgICAgICAgICB0aGlzLl9yZWdpc3RyeVtrZXldID0gbmV3IFdlYkluc3BlY3Rvci5T
ZXR0aW5nKGtleSwgZGVmYXVsdFZhbHVlLCB0aGlzLl9ldmVudFN1cHBvcnQsIHdpbmRvdy5sb2Nh
bFN0b3JhZ2UpOwotICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnlba2V5XTsKLSAgICB9Ci19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICogQHBh
cmFtIHsqfSBkZWZhdWx0VmFsdWUKLSAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5PYmplY3R9IGV2
ZW50U3VwcG9ydAotICogQHBhcmFtIHs/U3RvcmFnZX0gc3RvcmFnZQotICovCi1XZWJJbnNwZWN0
b3IuU2V0dGluZyA9IGZ1bmN0aW9uKG5hbWUsIGRlZmF1bHRWYWx1ZSwgZXZlbnRTdXBwb3J0LCBz
dG9yYWdlKQotewotICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgIHRoaXMuX2RlZmF1bHRWYWx1
ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICB0aGlzLl9ldmVudFN1cHBvcnQgPSBldmVudFN1cHBvcnQ7
Ci0gICAgdGhpcy5fc3RvcmFnZSA9IHN0b3JhZ2U7Ci19Ci0KLVdlYkluc3BlY3Rvci5TZXR0aW5n
LnByb3RvdHlwZSA9IHsKLSAgICBhZGRDaGFuZ2VMaXN0ZW5lcjogZnVuY3Rpb24obGlzdGVuZXIs
IHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICB0aGlzLl9ldmVudFN1cHBvcnQuYWRkRXZlbnRM
aXN0ZW5lcih0aGlzLl9uYW1lLCBsaXN0ZW5lciwgdGhpc09iamVjdCk7Ci0gICAgfSwKLQotICAg
IHJlbW92ZUNoYW5nZUxpc3RlbmVyOiBmdW5jdGlvbihsaXN0ZW5lciwgdGhpc09iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2V2ZW50U3VwcG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMu
X25hbWUsIGxpc3RlbmVyLCB0aGlzT2JqZWN0KTsKLSAgICB9LAotCi0gICAgZ2V0IG5hbWUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7Ci0gICAgfSwKLQotICAgIGdldDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl92YWx1ZSAhPT0gInVuZGVm
aW5lZCIpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7Ci0KLSAgICAgICAgdGhpcy5f
dmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWU7Ci0gICAgICAgIGlmICh0aGlzLl9zdG9yYWdlICYm
IHRoaXMuX25hbWUgaW4gdGhpcy5fc3RvcmFnZSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICB0aGlzLl92YWx1ZSA9IEpTT04ucGFyc2UodGhpcy5fc3RvcmFnZVt0aGlzLl9u
YW1lXSk7Ci0gICAgICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUg
dGhpcy5fc3RvcmFnZVt0aGlzLl9uYW1lXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdGhpcy5fdmFsdWU7Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rpb24odmFs
dWUpCi0gICAgewotICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwotICAgICAgICBpZiAodGhp
cy5fc3RvcmFnZSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0aGlzLl9z
dG9yYWdlW3RoaXMuX25hbWVdID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpOwotICAgICAgICAgICAg
fSBjYXRjaChlKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc2F2aW5n
IHNldHRpbmcgd2l0aCBuYW1lOiIgKyB0aGlzLl9uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9ldmVudFN1cHBvcnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KHRoaXMuX25hbWUsIHZhbHVlKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
Ki8KLVdlYkluc3BlY3Rvci5FeHBlcmltZW50c1NldHRpbmdzID0gZnVuY3Rpb24oKQotewotICAg
IHRoaXMuX3NldHRpbmcgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZygiZXhw
ZXJpbWVudHMiLCB7fSk7Ci0gICAgdGhpcy5fZXhwZXJpbWVudHMgPSBbXTsKLSAgICB0aGlzLl9l
bmFibGVkRm9yVGVzdCA9IHt9OwotCi0gICAgLy8gQWRkIGN1cnJlbnRseSBydW5uaW5nIGV4cGVy
aW1lbnRzIGhlcmUuCi0gICAgdGhpcy5zbmlwcGV0c1N1cHBvcnQgPSB0aGlzLl9jcmVhdGVFeHBl
cmltZW50KCJzbmlwcGV0c1N1cHBvcnQiLCAiU25pcHBldHMgc3VwcG9ydCIpOwotICAgIHRoaXMu
bmF0aXZlTWVtb3J5VGltZWxpbmUgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJuYXRpdmVNZW1v
cnlUaW1lbGluZSIsICJOYXRpdmUgbWVtb3J5IHRpbWVsaW5lIik7Ci0gICAgdGhpcy5maWxlU3lz
dGVtSW5zcGVjdGlvbiA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImZpbGVTeXN0ZW1JbnNwZWN0
aW9uIiwgIkZpbGVTeXN0ZW0gaW5zcGVjdGlvbiIpOwotICAgIHRoaXMuY2FudmFzSW5zcGVjdGlv
biA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImNhbnZhc0luc3BlY3Rpb24gIiwgIkNhbnZhcyBp
bnNwZWN0aW9uIik7Ci0gICAgdGhpcy5zYXNzID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgic2Fz
cyIsICJTdXBwb3J0IGZvciBTYXNzIik7Ci0gICAgdGhpcy5jb2RlbWlycm9yID0gdGhpcy5fY3Jl
YXRlRXhwZXJpbWVudCgiY29kZW1pcnJvciIsICJVc2UgQ29kZU1pcnJvciBlZGl0b3IiKTsKLSAg
ICB0aGlzLmFjZVRleHRFZGl0b3IgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJhY2VUZXh0RWRp
dG9yIiwgIlVzZSBBY2UgZWRpdG9yIik7Ci0gICAgdGhpcy5jc3NSZWdpb25zID0gdGhpcy5fY3Jl
YXRlRXhwZXJpbWVudCgiY3NzUmVnaW9ucyIsICJDU1MgUmVnaW9ucyBTdXBwb3J0Iik7Ci0gICAg
dGhpcy5zaG93T3ZlcnJpZGVzSW5EcmF3ZXIgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJzaG93
T3ZlcnJpZGVzSW5EcmF3ZXIiLCAiU2hvdyBPdmVycmlkZXMgaW4gZHJhd2VyIik7Ci0gICAgdGhp
cy5maWxlU3lzdGVtUHJvamVjdCA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImZpbGVTeXN0ZW1Q
cm9qZWN0IiwgIkZpbGUgc3lzdGVtIGZvbGRlcnMgaW4gU291cmNlcyBQYW5lbCIpOwotICAgIHRo
aXMuc2hvd1doaXRlc3BhY2VJbkVkaXRvciA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoInNob3dX
aGl0ZXNwYWNlSW5FZGl0b3IiLCAiU2hvdyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gZWRpdG9y
Iik7Ci0gICAgdGhpcy50ZXh0RWRpdG9yU21hcnRCcmFjZXMgPSB0aGlzLl9jcmVhdGVFeHBlcmlt
ZW50KCJ0ZXh0RWRpdG9yU21hcnRCcmFjZXMiLCAiRW5hYmxlIHNtYXJ0IGJyYWNlcyBpbiB0ZXh0
IGVkaXRvciIpOwotICAgIHRoaXMuc2VwYXJhdGVQcm9maWxlcnMgPSB0aGlzLl9jcmVhdGVFeHBl
cmltZW50KCJzZXBhcmF0ZVByb2ZpbGVycyIsICJTZXBhcmF0ZSBwcm9maWxlciB0b29scyIpOwot
ICAgIHRoaXMuY3B1RmxhbWVDaGFydCA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoImNwdUZsYW1l
Q2hhcnQiLCAiU2hvdyBGbGFtZSBDaGFydCBpbiBDUFUgUHJvZmlsZXIiKTsKLQotICAgIHRoaXMu
X2NsZWFuVXBTZXR0aW5nKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5FeHBlcmltZW50c1NldHRpbmdz
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVj
dG9yLkV4cGVyaW1lbnQ+fQotICAgICAqLwotICAgIGdldCBleHBlcmltZW50cygpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fZXhwZXJpbWVudHMuc2xpY2UoKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBnZXQgZXhwZXJpbWVu
dHNFbmFibGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBQcmVmZXJlbmNlcy5leHBlcmltZW50
c0VuYWJsZWQgfHwgKCJleHBlcmltZW50cyIgaW4gV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2Jq
ZWN0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cGVyaW1l
bnROYW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cGVyaW1lbnRUaXRsZQotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5FeHBlcmltZW50fQotICAgICAqLwotICAgIF9jcmVhdGVFeHBl
cmltZW50OiBmdW5jdGlvbihleHBlcmltZW50TmFtZSwgZXhwZXJpbWVudFRpdGxlKQotICAgIHsK
LSAgICAgICAgdmFyIGV4cGVyaW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkV4cGVyaW1lbnQodGhp
cywgZXhwZXJpbWVudE5hbWUsIGV4cGVyaW1lbnRUaXRsZSk7Ci0gICAgICAgIHRoaXMuX2V4cGVy
aW1lbnRzLnB1c2goZXhwZXJpbWVudCk7Ci0gICAgICAgIHJldHVybiBleHBlcmltZW50OwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwZXJpbWVudE5hbWUKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzRW5hYmxlZDogZnVuY3Rpb24o
ZXhwZXJpbWVudE5hbWUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZW5hYmxlZEZvclRlc3Rb
ZXhwZXJpbWVudE5hbWVdKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYg
KCF0aGlzLmV4cGVyaW1lbnRzRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCi0gICAgICAgIHZhciBleHBlcmltZW50c1NldHRpbmcgPSB0aGlzLl9zZXR0aW5nLmdl
dCgpOwotICAgICAgICByZXR1cm4gZXhwZXJpbWVudHNTZXR0aW5nW2V4cGVyaW1lbnROYW1lXTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cGVyaW1lbnROYW1l
Ci0gICAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkCi0gICAgICovCi0gICAgc2V0RW5hYmxl
ZDogZnVuY3Rpb24oZXhwZXJpbWVudE5hbWUsIGVuYWJsZWQpCi0gICAgewotICAgICAgICB2YXIg
ZXhwZXJpbWVudHNTZXR0aW5nID0gdGhpcy5fc2V0dGluZy5nZXQoKTsKLSAgICAgICAgZXhwZXJp
bWVudHNTZXR0aW5nW2V4cGVyaW1lbnROYW1lXSA9IGVuYWJsZWQ7Ci0gICAgICAgIHRoaXMuX3Nl
dHRpbmcuc2V0KGV4cGVyaW1lbnRzU2V0dGluZyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBleHBlcmltZW50TmFtZQotICAgICAqLwotICAgIF9lbmFibGVGb3JU
ZXN0OiBmdW5jdGlvbihleHBlcmltZW50TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2VuYWJs
ZWRGb3JUZXN0W2V4cGVyaW1lbnROYW1lXSA9IHRydWU7Ci0gICAgfSwKLQotICAgIF9jbGVhblVw
U2V0dGluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGV4cGVyaW1lbnRzU2V0dGlu
ZyA9IHRoaXMuX3NldHRpbmcuZ2V0KCk7Ci0gICAgICAgIHZhciBjbGVhbmVkVXBFeHBlcmltZW50
U2V0dGluZyA9IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGVyaW1l
bnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgZXhwZXJpbWVudE5hbWUgPSB0aGlz
Ll9leHBlcmltZW50c1tpXS5uYW1lOwotICAgICAgICAgICAgaWYgKGV4cGVyaW1lbnRzU2V0dGlu
Z1tleHBlcmltZW50TmFtZV0pCi0gICAgICAgICAgICAgICAgY2xlYW5lZFVwRXhwZXJpbWVudFNl
dHRpbmdbZXhwZXJpbWVudE5hbWVdID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9z
ZXR0aW5nLnNldChjbGVhbmVkVXBFeHBlcmltZW50U2V0dGluZyk7Ci0gICAgfQotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXhwZXJpbWVudHNTZXR0
aW5nc30gZXhwZXJpbWVudHNTZXR0aW5ncwotICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAqIEBw
YXJhbSB7c3RyaW5nfSB0aXRsZQotICovCi1XZWJJbnNwZWN0b3IuRXhwZXJpbWVudCA9IGZ1bmN0
aW9uKGV4cGVyaW1lbnRzU2V0dGluZ3MsIG5hbWUsIHRpdGxlKQotewotICAgIHRoaXMuX25hbWUg
PSBuYW1lOwotICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7Ci0gICAgdGhpcy5fZXhwZXJpbWVudHNT
ZXR0aW5ncyA9IGV4cGVyaW1lbnRzU2V0dGluZ3M7Ci19Ci0KLVdlYkluc3BlY3Rvci5FeHBlcmlt
ZW50LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAg
ICovCi0gICAgZ2V0IG5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBn
ZXQgdGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzRW5hYmxl
ZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGVyaW1lbnRzU2V0
dGluZ3MuaXNFbmFibGVkKHRoaXMuX25hbWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQKLSAgICAgKi8KLSAgICBzZXRFbmFibGVkOiBmdW5jdGlv
bihlbmFibGVkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGVyaW1lbnRzU2V0dGlu
Z3Muc2V0RW5hYmxlZCh0aGlzLl9uYW1lLCBlbmFibGVkKTsKLSAgICB9LAotCi0gICAgZW5hYmxl
Rm9yVGVzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZXhwZXJpbWVudHNTZXR0
aW5ncy5fZW5hYmxlRm9yVGVzdCh0aGlzLl9uYW1lKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5WZXJzaW9uQ29udHJvbGxlciA9IGZ1bmN0aW9u
KCkKLXsKLX0KLQotV2ViSW5zcGVjdG9yLlZlcnNpb25Db250cm9sbGVyLmN1cnJlbnRWZXJzaW9u
ID0gMjsKLQotV2ViSW5zcGVjdG9yLlZlcnNpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAg
ICB1cGRhdGVWZXJzaW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgdmVyc2lvblNl
dHRpbmcgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZygiaW5zcGVjdG9yVmVy
c2lvbiIsIDApOwotICAgICAgICB2YXIgY3VycmVudFZlcnNpb24gPSBXZWJJbnNwZWN0b3IuVmVy
c2lvbkNvbnRyb2xsZXIuY3VycmVudFZlcnNpb247Ci0gICAgICAgIHZhciBvbGRWZXJzaW9uID0g
dmVyc2lvblNldHRpbmcuZ2V0KCk7Ci0gICAgICAgIHZhciBtZXRob2RzVG9SdW4gPSB0aGlzLl9t
ZXRob2RzVG9SdW5Ub1VwZGF0ZVZlcnNpb24ob2xkVmVyc2lvbiwgY3VycmVudFZlcnNpb24pOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGhvZHNUb1J1bi5sZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIHRoaXNbbWV0aG9kc1RvUnVuW2ldXS5jYWxsKHRoaXMpOwotICAgICAgICB2ZXJz
aW9uU2V0dGluZy5zZXQoY3VycmVudFZlcnNpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gb2xkVmVyc2lvbgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJy
ZW50VmVyc2lvbgotICAgICAqLwotICAgIF9tZXRob2RzVG9SdW5Ub1VwZGF0ZVZlcnNpb246IGZ1
bmN0aW9uKG9sZFZlcnNpb24sIGN1cnJlbnRWZXJzaW9uKQotICAgIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gb2xkVmVyc2lvbjsgaSA8IGN1cnJlbnRW
ZXJzaW9uOyArK2kpCi0gICAgICAgICAgICByZXN1bHQucHVzaCgiX3VwZGF0ZVZlcnNpb25Gcm9t
IiArIGkgKyAiVG8iICsgKGkgKyAxKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwK
LQotICAgIF91cGRhdGVWZXJzaW9uRnJvbTBUbzE6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2NsZWFyQnJlYWtwb2ludHNXaGVuVG9vTWFueShXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
YnJlYWtwb2ludHMsIDUwMDAwMCk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVWZXJzaW9uRnJvbTFU
bzI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB2ZXJzaW9uU2V0dGluZyA9IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKCJwcmV2aW91c2x5Vmlld2VkRmlsZXMiLCBb
XSk7Ci0gICAgICAgIHZlcnNpb25TZXR0aW5nLnNldChbXSk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNldHRpbmd9IGJyZWFrcG9pbnRzU2V0dGluZwot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhCcmVha3BvaW50c0NvdW50Ci0gICAgICovCi0gICAg
X2NsZWFyQnJlYWtwb2ludHNXaGVuVG9vTWFueTogZnVuY3Rpb24oYnJlYWtwb2ludHNTZXR0aW5n
LCBtYXhCcmVha3BvaW50c0NvdW50KQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHRv
byBtYW55IGJyZWFrcG9pbnRzIGluIGEgc3RvcmFnZSwgaXQgaXMgbGlrZWx5IGR1ZSB0byBhIHJl
Y2VudCBidWcgdGhhdCBjYXVzZWQKLSAgICAgICAgLy8gcGVyaW9kaWNhbCBicmVha3BvaW50cyBk
dXBsaWNhdGlvbiBsZWFkaW5nIHRvIGluc3BlY3RvciBzbG93bmVzcy4KLSAgICAgICAgaWYgKGJy
ZWFrcG9pbnRzU2V0dGluZy5nZXQoKS5sZW5ndGggPiBtYXhCcmVha3BvaW50c0NvdW50KQotICAg
ICAgICAgICAgYnJlYWtwb2ludHNTZXR0aW5nLnNldChbXSk7Ci0gICAgfQotfQotCi1XZWJJbnNw
ZWN0b3Iuc2V0dGluZ3MgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmdzKCk7Ci1XZWJJbnNwZWN0
b3IuZXhwZXJpbWVudHNTZXR0aW5ncyA9IG5ldyBXZWJJbnNwZWN0b3IuRXhwZXJpbWVudHNTZXR0
aW5ncygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
ZXR0aW5nc1NjcmVlbi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3NTY3JlZW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNzIyMjguLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5nc1Nj
cmVlbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDgzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBwYXJhbSB7IWZ1bmN0aW9uKCl9IG9uSGlkZQotICogQGV4dGVuZHMge1dlYkluc3Bl
Y3Rvci5IZWxwU2NyZWVufQotICovCi1XZWJJbnNwZWN0b3IuU2V0dGluZ3NTY3JlZW4gPSBmdW5j
dGlvbihvbkhpZGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkhlbHBTY3JlZW4uY2FsbCh0aGlzKTsK
LSAgICB0aGlzLmVsZW1lbnQuaWQgPSAic2V0dGluZ3Mtc2NyZWVuIjsKLQotICAgIC8qKiBAdHlw
ZSB7ZnVuY3Rpb24oKX0gKi8KLSAgICB0aGlzLl9vbkhpZGUgPSBvbkhpZGU7Ci0KLSAgICB0aGlz
Ll90YWJiZWRQYW5lID0gbmV3IFdlYkluc3BlY3Rvci5UYWJiZWRQYW5lKCk7Ci0gICAgdGhpcy5f
dGFiYmVkUGFuZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhlbHAtd2luZG93LW1haW4iKTsKLSAg
ICB2YXIgc2V0dGluZ3NMYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICBzZXR0aW5nc0xhYmVsRWxlbWVudC5jbGFzc05hbWUgPSAiaGVscC13aW5kb3ctbGFi
ZWwiOwotICAgIHNldHRpbmdzTGFiZWxFbGVtZW50LmNyZWF0ZVRleHRDaGlsZChXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlNldHRpbmdzIikpOwotICAgIHRoaXMuX3RhYmJlZFBhbmUuZWxlbWVudC5p
bnNlcnRCZWZvcmUoc2V0dGluZ3NMYWJlbEVsZW1lbnQsIHRoaXMuX3RhYmJlZFBhbmUuZWxlbWVu
dC5maXJzdENoaWxkKTsKLSAgICB0aGlzLl90YWJiZWRQYW5lLmVsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5fY3JlYXRlQ2xvc2VCdXR0b24oKSk7Ci0gICAgdGhpcy5fdGFiYmVkUGFuZS5hcHBlbmRU
YWIoV2ViSW5zcGVjdG9yLlNldHRpbmdzU2NyZWVuLlRhYnMuR2VuZXJhbCwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJHZW5lcmFsIiksIG5ldyBXZWJJbnNwZWN0b3IuR2VuZXJpY1NldHRpbmdzVGFi
KCkpOwotICAgIGlmICghV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3Muc2hvd092ZXJy
aWRlc0luRHJhd2VyLmlzRW5hYmxlZCgpKQotICAgICAgICB0aGlzLl90YWJiZWRQYW5lLmFwcGVu
ZFRhYihXZWJJbnNwZWN0b3IuU2V0dGluZ3NTY3JlZW4uVGFicy5PdmVycmlkZXMsIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiT3ZlcnJpZGVzIiksIG5ldyBXZWJJbnNwZWN0b3IuT3ZlcnJpZGVzU2V0
dGluZ3NUYWIoKSk7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLmZp
bGVTeXN0ZW1Qcm9qZWN0LmlzRW5hYmxlZCgpKQotICAgICAgICB0aGlzLl90YWJiZWRQYW5lLmFw
cGVuZFRhYihXZWJJbnNwZWN0b3IuU2V0dGluZ3NTY3JlZW4uVGFicy5Xb3Jrc3BhY2UsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiV29ya3NwYWNlIiksIG5ldyBXZWJJbnNwZWN0b3IuV29ya3NwYWNl
U2V0dGluZ3NUYWIoKSk7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdz
LmV4cGVyaW1lbnRzRW5hYmxlZCkKLSAgICAgICAgdGhpcy5fdGFiYmVkUGFuZS5hcHBlbmRUYWIo
V2ViSW5zcGVjdG9yLlNldHRpbmdzU2NyZWVuLlRhYnMuRXhwZXJpbWVudHMsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiRXhwZXJpbWVudHMiKSwgbmV3IFdlYkluc3BlY3Rvci5FeHBlcmltZW50c1Nl
dHRpbmdzVGFiKCkpOwotICAgIHRoaXMuX3RhYmJlZFBhbmUuYXBwZW5kVGFiKFdlYkluc3BlY3Rv
ci5TZXR0aW5nc1NjcmVlbi5UYWJzLlNob3J0Y3V0cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJT
aG9ydGN1dHMiKSwgV2ViSW5zcGVjdG9yLnNob3J0Y3V0c1NjcmVlbi5jcmVhdGVTaG9ydGN1dHNU
YWJWaWV3KCkpOwotICAgIHRoaXMuX3RhYmJlZFBhbmUuc2hyaW5rYWJsZVRhYnMgPSBmYWxzZTsK
LSAgICB0aGlzLl90YWJiZWRQYW5lLnZlcnRpY2FsVGFiTGF5b3V0ID0gdHJ1ZTsKLQotICAgIHRo
aXMuX2xhc3RTZWxlY3RlZFRhYlNldHRpbmcgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRl
U2V0dGluZygibGFzdFNlbGVjdGVkU2V0dGluZ3NUYWIiLCBXZWJJbnNwZWN0b3IuU2V0dGluZ3NT
Y3JlZW4uVGFicy5HZW5lcmFsKTsKLSAgICB0aGlzLnNlbGVjdFRhYih0aGlzLl9sYXN0U2VsZWN0
ZWRUYWJTZXR0aW5nLmdldCgpKTsKLSAgICB0aGlzLl90YWJiZWRQYW5lLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLlRhYmJlZFBhbmUuRXZlbnRUeXBlcy5UYWJTZWxlY3RlZCwgdGhpcy5f
dGFiU2VsZWN0ZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuU2V0dGluZ3NTY3JlZW4uVGFi
cyA9IHsKLSAgICBHZW5lcmFsOiAiZ2VuZXJhbCIsCi0gICAgT3ZlcnJpZGVzOiAib3ZlcnJpZGVz
IiwKLSAgICBXb3Jrc3BhY2U6ICJ3b3Jrc3BhY2UiLAotICAgIEV4cGVyaW1lbnRzOiAiZXhwZXJp
bWVudHMiLAotICAgIFNob3J0Y3V0czogInNob3J0Y3V0cyIKLX0KLQotV2ViSW5zcGVjdG9yLlNl
dHRpbmdzU2NyZWVuLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gdGFiSWQKLSAgICAgKi8KLSAgICBzZWxlY3RUYWI6IGZ1bmN0aW9uKHRhYklkKQotICAgIHsK
LSAgICAgICAgdGhpcy5fdGFiYmVkUGFuZS5zZWxlY3RUYWIodGFiSWQpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8K
LSAgICBfdGFiU2VsZWN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5f
bGFzdFNlbGVjdGVkVGFiU2V0dGluZy5zZXQodGhpcy5fdGFiYmVkUGFuZS5zZWxlY3RlZFRhYklk
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgd2Fz
U2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RhYmJlZFBhbmUuc2hvdyh0
aGlzLmVsZW1lbnQpOwotICAgICAgICBXZWJJbnNwZWN0b3IuSGVscFNjcmVlbi5wcm90b3R5cGUu
d2FzU2hvd24uY2FsbCh0aGlzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRl
Ci0gICAgICovCi0gICAgaXNDbG9zaW5nS2V5OiBmdW5jdGlvbihrZXlDb2RlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LktleXMuRW50ZXIuY29kZSwKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0LktleXMuRXNjLmNvZGUsCi0gICAgICAgIF0uaW5kZXhPZihrZXlDb2RlKSA+PSAwOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICB3aWxsSGlkZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fb25IaWRlKCk7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5IZWxwU2NyZWVuLnByb3RvdHlwZS53aWxsSGlkZS5jYWxsKHRoaXMpOwotICAgIH0s
Ci0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5IZWxwU2NyZWVuLnByb3RvdHlwZQotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQot
ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gaWQKLSAqLwotV2Vi
SW5zcGVjdG9yLlNldHRpbmdzVGFiID0gZnVuY3Rpb24obmFtZSwgaWQpCi17Ci0gICAgV2ViSW5z
cGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInNl
dHRpbmdzLXRhYi1jb250YWluZXIiOwotICAgIGlmIChpZCkKLSAgICAgICAgdGhpcy5lbGVtZW50
LmlkID0gaWQ7Ci0gICAgdmFyIGhlYWRlciA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgiaGVh
ZGVyIik7Ci0gICAgaGVhZGVyLmNyZWF0ZUNoaWxkKCJoMyIpLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG5hbWUpKTsKLSAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQgPSB0aGlz
LmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJoZWxwLWNvbnRhaW5lci13cmFwcGVyIikuY3Jl
YXRlQ2hpbGQoImRpdiIsICJzZXR0aW5ncy10YWIgaGVscC1jb250ZW50IGhlbHAtY29udGFpbmVy
Iik7Ci19Ci0KLVdlYkluc3BlY3Rvci5TZXR0aW5nc1RhYi5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogIEBwYXJhbSB7c3RyaW5nPX0gbmFtZQotICAgICAqICBAcmV0dXJuIHshRWxlbWVu
dH0KLSAgICAgKi8KLSAgICBfYXBwZW5kU2VjdGlvbjogZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0g
ICAgICAgIHZhciBibG9jayA9IHRoaXMuY29udGFpbmVyRWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2
IiwgImhlbHAtYmxvY2siKTsKLSAgICAgICAgaWYgKG5hbWUpCi0gICAgICAgICAgICBibG9jay5j
cmVhdGVDaGlsZCgiZGl2IiwgImhlbHAtc2VjdGlvbi10aXRsZSIpLnRleHRDb250ZW50ID0gbmFt
ZTsKLSAgICAgICAgcmV0dXJuIGJsb2NrOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW49fSBvbWl0UGFyYWdyYXBoRWxlbWVudAotICAgICAqIEBwYXJhbSB7RWxlbWVu
dD19IGlucHV0RWxlbWVudAotICAgICAqLwotICAgIF9jcmVhdGVDaGVja2JveFNldHRpbmc6IGZ1
bmN0aW9uKG5hbWUsIHNldHRpbmcsIG9taXRQYXJhZ3JhcGhFbGVtZW50LCBpbnB1dEVsZW1lbnQp
Ci0gICAgewotICAgICAgICB2YXIgaW5wdXQgPSBpbnB1dEVsZW1lbnQgfHwgZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgaW5wdXQudHlwZSA9ICJjaGVja2JveCI7Ci0g
ICAgICAgIGlucHV0Lm5hbWUgPSBuYW1lOwotICAgICAgICBpbnB1dC5jaGVja2VkID0gc2V0dGlu
Zy5nZXQoKTsKLQotICAgICAgICBmdW5jdGlvbiBsaXN0ZW5lcigpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHNldHRpbmcuc2V0KGlucHV0LmNoZWNrZWQpOwotICAgICAgICB9Ci0gICAgICAgIGlu
cHV0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgbGlzdGVuZXIsIGZhbHNlKTsKLQotICAgICAg
ICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwotICAgICAgICBs
YWJlbC5hcHBlbmRDaGlsZChpbnB1dCk7Ci0gICAgICAgIGxhYmVsLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKG5hbWUpKTsKLSAgICAgICAgaWYgKG9taXRQYXJhZ3JhcGhFbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIGxhYmVsOwotCi0gICAgICAgIHZhciBwID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICBwLmFwcGVuZENoaWxkKGxhYmVsKTsKLSAg
ICAgICAgcmV0dXJuIHA7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVTZWxlY3RTZXR0aW5nOiBmdW5j
dGlvbihuYW1lLCBvcHRpb25zLCBzZXR0aW5nKQotICAgIHsKLSAgICAgICAgdmFyIGZpZWxkc2V0
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7Ci0gICAgICAgIGZp
ZWxkc2V0RWxlbWVudC5jcmVhdGVDaGlsZCgibGFiZWwiKS50ZXh0Q29udGVudCA9IG5hbWU7Ci0K
LSAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwot
ICAgICAgICB2YXIgc2V0dGluZ1ZhbHVlID0gc2V0dGluZy5nZXQoKTsKLQotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBv
cHRpb24gPSBvcHRpb25zW2ldOwotICAgICAgICAgICAgc2VsZWN0LmFkZChuZXcgT3B0aW9uKG9w
dGlvblswXSwgb3B0aW9uWzFdKSk7Ci0gICAgICAgICAgICBpZiAoc2V0dGluZ1ZhbHVlID09PSBv
cHRpb25bMV0pCi0gICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY2hhbmdlTGlzdGVuZXIoZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgc2V0dGluZy5zZXQoZS50YXJnZXQudmFsdWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGNoYW5nZUxpc3RlbmVyLCBm
YWxzZSk7Ci0gICAgICAgIGZpZWxkc2V0RWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3QpOwotCi0g
ICAgICAgIHZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICBwLmFw
cGVuZENoaWxkKGZpZWxkc2V0RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBwOwotICAgIH0sCi0K
LSAgICBfY3JlYXRlUmFkaW9TZXR0aW5nOiBmdW5jdGlvbihuYW1lLCBvcHRpb25zLCBzZXR0aW5n
KQotICAgIHsKLSAgICAgICAgdmFyIHBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwot
ICAgICAgICB2YXIgZmllbGRzZXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZmll
bGRzZXQiKTsKLSAgICAgICAgdmFyIGxlZ2VuZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJsZWdlbmQiKTsKLSAgICAgICAgbGVnZW5kRWxlbWVudC50ZXh0Q29udGVudCA9IG5hbWU7
Ci0gICAgICAgIGZpZWxkc2V0RWxlbWVudC5hcHBlbmRDaGlsZChsZWdlbmRFbGVtZW50KTsKLQot
ICAgICAgICBmdW5jdGlvbiBjbGlja0xpc3RlbmVyKGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHNldHRpbmcuc2V0KGUudGFyZ2V0LnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBz
ZXR0aW5nVmFsdWUgPSBzZXR0aW5nLmdldCgpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG9wdGlvbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBwID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgicCIpOwotICAgICAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgibGFiZWwiKTsKLSAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQobGFiZWwpOwotCi0g
ICAgICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwot
ICAgICAgICAgICAgaW5wdXQudHlwZSA9ICJyYWRpbyI7Ci0gICAgICAgICAgICBpbnB1dC5uYW1l
ID0gc2V0dGluZy5uYW1lOwotICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBvcHRpb25zW2ldWzBd
OwotICAgICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjbGlja0xpc3Rl
bmVyLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc2V0dGluZ1ZhbHVlID09IGlucHV0LnZhbHVl
KQotICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlOwotCi0gICAgICAgICAgICBs
YWJlbC5hcHBlbmRDaGlsZChpbnB1dCk7Ci0gICAgICAgICAgICBsYWJlbC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvcHRpb25zW2ldWzFdKSk7Ci0KLSAgICAgICAgICAgIGZp
ZWxkc2V0RWxlbWVudC5hcHBlbmRDaGlsZChwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBwLmFw
cGVuZENoaWxkKGZpZWxkc2V0RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBwcDsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuU2V0dGluZ30gc2V0dGluZwotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbnVt
ZXJpYwotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4TGVuZ3RoCi0gICAgICogQHBhcmFtIHtz
dHJpbmc9fSB3aWR0aAotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTpib29sZWFuPX0g
dmFsaWRhdG9yQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBfY3JlYXRlSW5wdXRTZXR0aW5nOiBmdW5j
dGlvbihsYWJlbCwgc2V0dGluZywgbnVtZXJpYywgbWF4TGVuZ3RoLCB3aWR0aCwgdmFsaWRhdG9y
Q2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgZmllbGRzZXQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJmaWVsZHNldCIpOwotICAgICAgICB2YXIgcCA9IGZpZWxkc2V0LmNyZWF0ZUNoaWxk
KCJwIik7Ci0gICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBwLmNyZWF0ZUNoaWxkKCJsYWJlbCIp
OwotICAgICAgICBsYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSBsYWJlbCArICIgIjsKLSAgICAg
ICAgdmFyIGlucHV0RWxlbWVudCA9IGxhYmVsRWxlbWVudC5jcmVhdGVDaGlsZCgiaW5wdXQiKTsK
LSAgICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gc2V0dGluZy5nZXQoKTsKLSAgICAgICAgaW5w
dXRFbGVtZW50LnR5cGUgPSAidGV4dCI7Ci0gICAgICAgIGlmIChudW1lcmljKQotICAgICAgICAg
ICAgaW5wdXRFbGVtZW50LmNsYXNzTmFtZSA9ICJudW1lcmljIjsKLSAgICAgICAgaWYgKG1heExl
bmd0aCkKLSAgICAgICAgICAgIGlucHV0RWxlbWVudC5tYXhMZW5ndGggPSBtYXhMZW5ndGg7Ci0g
ICAgICAgIGlmICh3aWR0aCkKLSAgICAgICAgICAgIGlucHV0RWxlbWVudC5zdHlsZS53aWR0aCA9
IHdpZHRoOwotCi0gICAgICAgIGZ1bmN0aW9uIG9uQmx1cigpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh2YWxpZGF0b3JDYWxsYmFjayAmJiAhdmFsaWRhdG9yQ2FsbGJhY2soaW5wdXRFbGVt
ZW50LnZhbHVlKSkgewotICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC52YWx1ZSA9IHNldHRp
bmcuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc2V0dGluZy5zZXQobnVtZXJpYyA/IE51bWJlcihpbnB1dEVsZW1lbnQudmFsdWUpIDog
aW5wdXRFbGVtZW50LnZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBpbnB1dEVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiYmx1ciIsIG9uQmx1ciwgZmFsc2UpOwotICAgICAgICByZXR1cm4gZmll
bGRzZXQ7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVDdXN0b21TZXR0aW5nOiBmdW5jdGlvbihuYW1l
LCBlbGVtZW50KQotICAgIHsKLSAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJwIik7Ci0gICAgICAgIHZhciBmaWVsZHNldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJmaWVsZHNldCIpOwotICAgICAgICBmaWVsZHNldEVsZW1lbnQuY3JlYXRlQ2hpbGQoImxh
YmVsIikudGV4dENvbnRlbnQgPSBuYW1lOwotICAgICAgICBmaWVsZHNldEVsZW1lbnQuYXBwZW5k
Q2hpbGQoZWxlbWVudCk7Ci0gICAgICAgIHAuYXBwZW5kQ2hpbGQoZmllbGRzZXRFbGVtZW50KTsK
LSAgICAgICAgcmV0dXJuIHA7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
LlZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLlNldHRpbmdzVGFifQotICovCi1XZWJJbnNwZWN0b3IuR2VuZXJpY1NldHRp
bmdzVGFiID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5TZXR0aW5nc1RhYi5jYWxs
KHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiR2VuZXJhbCIpKTsKLQotICAgIHZhciBwID0g
dGhpcy5fYXBwZW5kU2VjdGlvbigpOwotICAgIGlmIChQcmVmZXJlbmNlcy5leHBvc2VEaXNhYmxl
Q2FjaGUpCi0gICAgICAgIHAuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ2hlY2tib3hTZXR0aW5n
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJsZSBjYWNoZSIpLCBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MuY2FjaGVEaXNhYmxlZCkpOwotICAgIHZhciBkaXNhYmxlSlNFbGVtZW50ID0gdGhpcy5f
Y3JlYXRlQ2hlY2tib3hTZXR0aW5nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJsZSBKYXZh
U2NyaXB0IiksIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5qYXZhU2NyaXB0RGlzYWJsZWQpOwotICAg
IHAuYXBwZW5kQ2hpbGQoZGlzYWJsZUpTRWxlbWVudCk7Ci0gICAgV2ViSW5zcGVjdG9yLnNldHRp
bmdzLmphdmFTY3JpcHREaXNhYmxlZC5hZGRDaGFuZ2VMaXN0ZW5lcih0aGlzLl9qYXZhU2NyaXB0
RGlzYWJsZWRDaGFuZ2VkLCB0aGlzKTsKLSAgICB0aGlzLl9kaXNhYmxlSlNDaGVja2JveCA9IGRp
c2FibGVKU0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF07Ci0gICAgdGhp
cy5fdXBkYXRlU2NyaXB0RGlzYWJsZWRDaGVja2JveCgpOwotCi0gICAgcCA9IHRoaXMuX2FwcGVu
ZFNlY3Rpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBcHBlYXJhbmNlIikpOwotICAgIHAuYXBw
ZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ2hlY2tib3hTZXR0aW5nKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU2hvdyB0b29sYmFyIGljb25zIiksIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93VG9vbGJh
ckljb25zKSk7Ci0gICAgcC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVDaGVja2JveFNldHRpbmco
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTcGxpdCBwYW5lbHMgdmVydGljYWxseSB3aGVuIGRvY2tl
ZCB0byByaWdodCIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc3BsaXRWZXJ0aWNhbGx5V2hlbkRv
Y2tlZFRvUmlnaHQpKTsKLQotICAgIHAgPSB0aGlzLl9hcHBlbmRTZWN0aW9uKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiRWxlbWVudHMiKSk7Ci0gICAgcC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVS
YWRpb1NldHRpbmcoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb2xvciBmb3JtYXQiKSwgWwotICAg
ICAgICBbIFdlYkluc3BlY3Rvci5Db2xvci5Gb3JtYXQuT3JpZ2luYWwsIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQXMgYXV0aG9yZWQiKSBdLAotICAgICAgICBbIFdlYkluc3BlY3Rvci5Db2xvci5G
b3JtYXQuSEVYLCAiSEVYOiAjREFDMERFIiBdLAotICAgICAgICBbIFdlYkluc3BlY3Rvci5Db2xv
ci5Gb3JtYXQuUkdCLCAiUkdCOiByZ2IoMTI4LCAyNTUsIDI1NSkiIF0sCi0gICAgICAgIFsgV2Vi
SW5zcGVjdG9yLkNvbG9yLkZvcm1hdC5IU0wsICJIU0w6IGhzbCgzMDAsIDgwJSwgOTAlKSIgXSBd
LCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29sb3JGb3JtYXQpKTsKLSAgICBwLmFwcGVuZENoaWxk
KHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0dGluZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cg
dXNlciBhZ2VudCBzdHlsZXMiKSwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNob3dVc2VyQWdlbnRT
dHlsZXMpKTsKLSAgICBwLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0dGluZyhX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldvcmQgd3JhcCIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
ZG9tV29yZFdyYXApKTsKLSAgICBwLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0
dGluZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgU2hhZG93IERPTSIpLCBXZWJJbnNwZWN0
b3Iuc2V0dGluZ3Muc2hvd1NoYWRvd0RPTSkpOwotICAgIHAuYXBwZW5kQ2hpbGQodGhpcy5fY3Jl
YXRlQ2hlY2tib3hTZXR0aW5nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBydWxlcnMiKSwg
V2ViSW5zcGVjdG9yLnNldHRpbmdzLnNob3dNZXRyaWNzUnVsZXJzKSk7Ci0KLSAgICBwID0gdGhp
cy5fYXBwZW5kU2VjdGlvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlbmRlcmluZyIpKTsKLSAg
ICBwLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0dGluZyhXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlNob3cgcGFpbnQgcmVjdGFuZ2xlcyIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
c2hvd1BhaW50UmVjdHMpKTsKLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd1BhaW50UmVj
dHMuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fc2hvd1BhaW50UmVjdHNDaGFuZ2VkLCB0aGlzKTsK
LQotICAgIGlmIChDYXBhYmlsaXRpZXMuY2FuU2hvd0RlYnVnQm9yZGVycykgewotICAgICAgICBw
LmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0dGluZyhXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlNob3cgY29tcG9zaXRlZCBsYXllciBib3JkZXJzIiksIFdlYkluc3BlY3Rvci5zZXR0
aW5ncy5zaG93RGVidWdCb3JkZXJzKSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5z
aG93RGVidWdCb3JkZXJzLmFkZENoYW5nZUxpc3RlbmVyKHRoaXMuX3Nob3dEZWJ1Z0JvcmRlcnND
aGFuZ2VkLCB0aGlzKTsKLSAgICB9Ci0gICAgaWYgKENhcGFiaWxpdGllcy5jYW5TaG93RlBTQ291
bnRlcikgewotICAgICAgICBwLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0dGlu
ZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgRlBTIG1ldGVyIiksIFdlYkluc3BlY3Rvci5z
ZXR0aW5ncy5zaG93RlBTQ291bnRlcikpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
c2hvd0ZQU0NvdW50ZXIuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fc2hvd0ZQU0NvdW50ZXJDaGFu
Z2VkLCB0aGlzKTsKLSAgICB9Ci0gICAgaWYgKENhcGFiaWxpdGllcy5jYW5Db250aW51b3VzbHlQ
YWludCkgewotICAgICAgICBwLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0dGlu
ZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBjb250aW51b3VzIHBhZ2UgcmVwYWludGlu
ZyIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29udGludW91c1BhaW50aW5nKSk7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jb250aW51b3VzUGFpbnRpbmcuYWRkQ2hhbmdlTGlzdGVu
ZXIodGhpcy5fY29udGludW91c1BhaW50aW5nQ2hhbmdlZCwgdGhpcyk7Ci0gICAgfQotCi0gICAg
cCA9IHRoaXMuX2FwcGVuZFNlY3Rpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTb3VyY2VzIikp
OwotICAgIHAuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ2hlY2tib3hTZXR0aW5nKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiU2VhcmNoIGluIGNvbnRlbnQgc2NyaXB0cyIpLCBXZWJJbnNwZWN0b3Iu
c2V0dGluZ3Muc2VhcmNoSW5Db250ZW50U2NyaXB0cykpOwotICAgIHAuYXBwZW5kQ2hpbGQodGhp
cy5fY3JlYXRlQ2hlY2tib3hTZXR0aW5nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRW5hYmxlIHNv
dXJjZSBtYXBzIiksIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5zb3VyY2VNYXBzRW5hYmxlZCkpOwot
ICAgIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5pc0VuYWJsZWQoInNhc3Mi
KSkKLSAgICAgICAgcC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVDU1NBdXRvUmVsb2FkQ29udHJv
bHMoKSk7Ci0gICAgdmFyIGluZGVudGF0aW9uRWxlbWVudCA9IHRoaXMuX2NyZWF0ZVNlbGVjdFNl
dHRpbmcoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbmRlbnRhdGlvbiIpLCBbCi0gICAgICAgICAg
ICBbIFdlYkluc3BlY3Rvci5VSVN0cmluZygiMiBzcGFjZXMiKSwgV2ViSW5zcGVjdG9yLlRleHRV
dGlscy5JbmRlbnQuVHdvU3BhY2VzIF0sCi0gICAgICAgICAgICBbIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiNCBzcGFjZXMiKSwgV2ViSW5zcGVjdG9yLlRleHRVdGlscy5JbmRlbnQuRm91clNwYWNl
cyBdLAotICAgICAgICAgICAgWyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIjggc3BhY2VzIiksIFdl
Ykluc3BlY3Rvci5UZXh0VXRpbHMuSW5kZW50LkVpZ2h0U3BhY2VzIF0sCi0gICAgICAgICAgICBb
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGFiIGNoYXJhY3RlciIpLCBXZWJJbnNwZWN0b3IuVGV4
dFV0aWxzLkluZGVudC5UYWJDaGFyYWN0ZXIgXQotICAgICAgICBdLCBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MudGV4dEVkaXRvckluZGVudCk7Ci0gICAgaW5kZW50YXRpb25FbGVtZW50LmZpcnN0Q2hp
bGQuY2xhc3NOYW1lID0gInRvcGxldmVsIjsKLSAgICBwLmFwcGVuZENoaWxkKGluZGVudGF0aW9u
RWxlbWVudCk7Ci0KLSAgICBwID0gdGhpcy5fYXBwZW5kU2VjdGlvbihXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlByb2ZpbGVyIikpOwotICAgIHAuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ2hlY2ti
b3hTZXR0aW5nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBvYmplY3RzJyBoaWRkZW4gcHJv
cGVydGllcyIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd0hlYXBTbmFwc2hvdE9iamVjdHNI
aWRkZW5Qcm9wZXJ0aWVzKSk7Ci0KLSAgICBwID0gdGhpcy5fYXBwZW5kU2VjdGlvbihXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlRpbWVsaW5lIikpOwotICAgIHZhciBjaGVja2JveCA9IHRoaXMuX2Ny
ZWF0ZUNoZWNrYm94U2V0dGluZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxpbWl0IG51bWJlciBv
ZiBjYXB0dXJlZCBKUyBzdGFjayBmcmFtZXMiKSwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRpbWVs
aW5lTGltaXRTdGFja0ZyYW1lc0ZsYWcpOwotICAgIHAuYXBwZW5kQ2hpbGQoY2hlY2tib3gpOwot
ICAgIHZhciBmaWVsZHNldCA9IHRoaXMuX2NyZWF0ZUlucHV0U2V0dGluZyhXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkZyYW1lcyB0byBjYXB0dXJlIiksIFdlYkluc3BlY3Rvci5zZXR0aW5ncy50aW1l
bGluZVN0YWNrRnJhbWVzVG9DYXB0dXJlLCB0cnVlLCAyLCAiMmVtIik7Ci0gICAgZmllbGRzZXQu
ZGlzYWJsZWQgPSAhV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRpbWVsaW5lTGltaXRTdGFja0ZyYW1l
c0ZsYWcuZ2V0KCk7Ci0gICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRpbWVsaW5lTGltaXRTdGFj
a0ZyYW1lc0ZsYWcuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fdGltZWxpbmVMaW1pdFN0YWNrRnJh
bWVzQ2hhbmdlZC5iaW5kKHRoaXMsIGZpZWxkc2V0KSk7Ci0gICAgY2hlY2tib3guYXBwZW5kQ2hp
bGQoZmllbGRzZXQpOwotCi0gICAgaWYgKENhcGFiaWxpdGllcy50aW1lbGluZUNhbk1vbml0b3JN
YWluVGhyZWFkKQotICAgICAgICBwLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNoZWNrYm94U2V0
dGluZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgQ1BVIGFjdGl2aXR5IG9uIHRoZSBydWxl
ciIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd0NwdU9uVGltZWxpbmVSdWxlcikpOwotCi0g
ICAgcCA9IHRoaXMuX2FwcGVuZFNlY3Rpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb25zb2xl
IikpOwotICAgIHAuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ2hlY2tib3hTZXR0aW5nKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiTG9nIFhNTEh0dHBSZXF1ZXN0cyIpLCBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MubW9uaXRvcmluZ1hIUkVuYWJsZWQpKTsKLSAgICBwLmFwcGVuZENoaWxkKHRoaXMuX2Ny
ZWF0ZUNoZWNrYm94U2V0dGluZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByZXNlcnZlIGxvZyB1
cG9uIG5hdmlnYXRpb24iKSwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnByZXNlcnZlQ29uc29sZUxv
ZykpOwotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5leHRlbnNpb25TZXJ2ZXIuaGFzRXh0ZW5zaW9u
cygpKSB7Ci0gICAgICAgIHZhciBoYW5kbGVyU2VsZWN0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkhh
bmRsZXJTZWxlY3RvcihXZWJJbnNwZWN0b3Iub3BlbkFuY2hvckxvY2F0aW9uUmVnaXN0cnkpOwot
ICAgICAgICBwID0gdGhpcy5fYXBwZW5kU2VjdGlvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkV4
dGVuc2lvbnMiKSk7Ci0gICAgICAgIHAuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlQ3VzdG9tU2V0
dGluZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9wZW4gbGlua3MgaW4iKSwgaGFuZGxlclNlbGVj
dG9yLmVsZW1lbnQpKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5HZW5lcmljU2V0dGluZ3NU
YWIucHJvdG90eXBlID0gewotICAgIF9zaG93UGFpbnRSZWN0c0NoYW5nZWQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIFBhZ2VBZ2VudC5zZXRTaG93UGFpbnRSZWN0cyhXZWJJbnNwZWN0b3Iu
c2V0dGluZ3Muc2hvd1BhaW50UmVjdHMuZ2V0KCkpOwotICAgIH0sCi0KLSAgICBfc2hvd0RlYnVn
Qm9yZGVyc0NoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFBhZ2VBZ2VudC5zZXRT
aG93RGVidWdCb3JkZXJzKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzLmdl
dCgpKTsKLSAgICB9LAotCi0gICAgX3Nob3dGUFNDb3VudGVyQ2hhbmdlZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgUGFnZUFnZW50LnNldFNob3dGUFNDb3VudGVyKFdlYkluc3BlY3Rvci5z
ZXR0aW5ncy5zaG93RlBTQ291bnRlci5nZXQoKSk7Ci0gICAgfSwKLQotICAgIF9jb250aW51b3Vz
UGFpbnRpbmdDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBQYWdlQWdlbnQuc2V0
Q29udGludW91c1BhaW50aW5nRW5hYmxlZChXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29udGludW91
c1BhaW50aW5nLmdldCgpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtIVE1M
RmllbGRTZXRFbGVtZW50fSBmaWVsZHNldAotICAgICAqLwotICAgIF90aW1lbGluZUxpbWl0U3Rh
Y2tGcmFtZXNDaGFuZ2VkOiBmdW5jdGlvbihmaWVsZHNldCkKLSAgICB7Ci0gICAgICAgIGZpZWxk
c2V0LmRpc2FibGVkID0gIVdlYkluc3BlY3Rvci5zZXR0aW5ncy50aW1lbGluZUxpbWl0U3RhY2tG
cmFtZXNGbGFnLmdldCgpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlU2NyaXB0RGlzYWJsZWRDaGVj
a2JveDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZXhlY3V0aW9uU3RhdHVz
Q2FsbGJhY2soZXJyb3IsIHN0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGVycm9y
IHx8ICFzdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKHN0YXR1cykgewotICAgICAgICAgICAgY2FzZSAiZm9yYmlkZGVuIjoKLSAgICAgICAgICAg
ICAgICB0aGlzLl9kaXNhYmxlSlNDaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9kaXNhYmxlSlNDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJkaXNhYmxlZCI6Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fZGlzYWJsZUpTQ2hlY2tib3guY2hlY2tlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRoaXMuX2Rp
c2FibGVKU0NoZWNrYm94LmNoZWNrZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFBhZ2VBZ2VudC5nZXRTY3JpcHRF
eGVjdXRpb25TdGF0dXMoZXhlY3V0aW9uU3RhdHVzQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAg
fSwKLQotICAgIF9qYXZhU2NyaXB0RGlzYWJsZWRDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICAvLyBXZSBuZWVkIHRvIG1hbnVhbGx5IHVwZGF0ZSB0aGUgY2hlY2tib3ggc3RhdGUs
IHNpbmNlIGVuYWJsaW5nIEphdmFTY3JpcHQgaW4gdGhlIHBhZ2UgY2FuIGFjdHVhbGx5IHVuY292
ZXIgdGhlICJmb3JiaWRkZW4iIHN0YXRlLgotICAgICAgICBQYWdlQWdlbnQuc2V0U2NyaXB0RXhl
Y3V0aW9uRGlzYWJsZWQoV2ViSW5zcGVjdG9yLnNldHRpbmdzLmphdmFTY3JpcHREaXNhYmxlZC5n
ZXQoKSwgdGhpcy5fdXBkYXRlU2NyaXB0RGlzYWJsZWRDaGVja2JveC5iaW5kKHRoaXMpKTsKLSAg
ICB9LAotCi0gICAgX2NyZWF0ZUNTU0F1dG9SZWxvYWRDb250cm9sczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOwotICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZnJhZ21lbnQuY3JlYXRlQ2hpbGQoImxh
YmVsIik7Ci0gICAgICAgIHZhciBjaGVja2JveEVsZW1lbnQgPSBsYWJlbEVsZW1lbnQuY3JlYXRl
Q2hpbGQoImlucHV0Iik7Ci0gICAgICAgIGNoZWNrYm94RWxlbWVudC50eXBlID0gImNoZWNrYm94
IjsKLSAgICAgICAgY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSBXZWJJbnNwZWN0b3Iuc2V0dGlu
Z3MuY3NzUmVsb2FkRW5hYmxlZC5nZXQoKTsKLSAgICAgICAgY2hlY2tib3hFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgY2hlY2tib3hDbGlja2VkLCBmYWxzZSk7Ci0gICAgICAgIGxh
YmVsRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkF1dG8tcmVsb2FkIENTUyB1cG9uIFNhc3Mgc2F2ZSIpKSk7Ci0KLSAgICAg
ICAgdmFyIGZpZWxkc2V0RWxlbWVudCA9IHRoaXMuX2NyZWF0ZUlucHV0U2V0dGluZyhXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlRpbWVvdXQgKG1zKSIpLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY3Nz
UmVsb2FkVGltZW91dCwgdHJ1ZSwgOCwgIjYwcHgiLCB2YWxpZGF0ZVJlbG9hZFRpbWVvdXQpOwot
ICAgICAgICBmaWVsZHNldEVsZW1lbnQuZGlzYWJsZWQgPSAhY2hlY2tib3hFbGVtZW50LmNoZWNr
ZWQ7Ci0gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGZpZWxkc2V0RWxlbWVudCk7Ci0gICAg
ICAgIHJldHVybiBmcmFnbWVudDsKLQotICAgICAgICBmdW5jdGlvbiBjaGVja2JveENsaWNrZWQo
KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcmVsb2FkRW5hYmxlZCA9IGNoZWNrYm94RWxl
bWVudC5jaGVja2VkOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmNzc1JlbG9h
ZEVuYWJsZWQuc2V0KHJlbG9hZEVuYWJsZWQpOwotICAgICAgICAgICAgZmllbGRzZXRFbGVtZW50
LmRpc2FibGVkID0gIXJlbG9hZEVuYWJsZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biB2YWxpZGF0ZVJlbG9hZFRpbWVvdXQodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpc0Zpbml0ZSh2YWx1ZSkgJiYgdmFsdWUgPiAwOwotICAgICAgICB9Ci0gICAgfSwKLQot
ICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNldHRpbmdzVGFiLnByb3RvdHlwZQotfQotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TZXR0aW5nc1Rh
Yn0KLSAqLwotV2ViSW5zcGVjdG9yLk92ZXJyaWRlc1NldHRpbmdzVGFiID0gZnVuY3Rpb24oKQot
ewotICAgIFdlYkluc3BlY3Rvci5TZXR0aW5nc1RhYi5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiT3ZlcnJpZGVzIiksICJvdmVycmlkZXMtdGFiLWNvbnRlbnQiKTsKLSAgICB0aGlz
Ll92aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5PdmVycmlkZXNWaWV3KCk7Ci0gICAgdGhpcy5jb250
YWluZXJFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fdmlldy5jb250YWlu
ZXJFbGVtZW50KTsKLSAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQucmVtb3ZlU2VsZigpOwotICAg
IHRoaXMuY29udGFpbmVyRWxlbWVudCA9IHRoaXMuX3ZpZXcuY29udGFpbmVyRWxlbWVudDsKLX0K
LQotV2ViSW5zcGVjdG9yLk92ZXJyaWRlc1NldHRpbmdzVGFiLnByb3RvdHlwZSA9IHsKLSAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5TZXR0aW5nc1RhYi5wcm90b3R5cGUKLX0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU2V0dGluZ3NUYWJ9Ci0g
Ki8KLVdlYkluc3BlY3Rvci5Xb3Jrc3BhY2VTZXR0aW5nc1RhYiA9IGZ1bmN0aW9uKCkKLXsKLSAg
ICBXZWJJbnNwZWN0b3IuU2V0dGluZ3NUYWIuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIldvcmtzcGFjZSIpLCAid29ya3NwYWNlLXRhYi1jb250ZW50Iik7Ci0gICAgdGhpcy5fcmVz
ZXQoKTsKLX0KLQotV2ViSW5zcGVjdG9yLldvcmtzcGFjZVNldHRpbmdzVGFiLnByb3RvdHlwZSA9
IHsKLSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LlNldHRpbmdzVGFiLnByb3RvdHlwZS53YXNTaG93bi5jYWxsKHRoaXMpOwotICAgICAgICB0aGlz
Ll9yZXNldCgpOwotICAgIH0sCi0KLSAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlz
Ll9jcmVhdGVGaWxlU3lzdGVtc0VkaXRvcigpOwotICAgICAgICB0aGlzLl9jcmVhdGVGaWxlTWFw
cGluZ0VkaXRvcigpOwotICAgIH0sCi0KLSAgICBfY3JlYXRlRmlsZVN5c3RlbXNFZGl0b3I6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBwID0gdGhpcy5fYXBwZW5kU2VjdGlvbihXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkZpbGUgc3lzdGVtcyIpKTsKLSAgICAgICAgdGhpcy5fZmlsZVN5
c3RlbXNFZGl0b3IgPSBwLmNyZWF0ZUNoaWxkKCJwIiwgImZpbGUtc3lzdGVtcy1lZGl0b3IiKTsK
LQotICAgICAgICB0aGlzLl9hZGRGaWxlU3lzdGVtUm93RWxlbWVudCA9IHRoaXMuX2ZpbGVTeXN0
ZW1zRWRpdG9yLmNyZWF0ZUNoaWxkKCJkaXYiLCAid29ya3NwYWNlLXNldHRpbmdzLXJvdyIpOwot
ICAgICAgICB2YXIgYWRkRmlsZVN5c3RlbUJ1dHRvbiA9IHRoaXMuX2FkZEZpbGVTeXN0ZW1Sb3dF
bGVtZW50LmNyZWF0ZUNoaWxkKCJpbnB1dCIsICJmaWxlLXN5c3RlbS1hZGQtYnV0dG9uIik7Ci0g
ICAgICAgIGFkZEZpbGVTeXN0ZW1CdXR0b24udHlwZSA9ICJidXR0b24iOwotICAgICAgICBhZGRG
aWxlU3lzdGVtQnV0dG9uLnZhbHVlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgZmlsZSBz
eXN0ZW0iKTsKLSAgICAgICAgYWRkRmlsZVN5c3RlbUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJj
bGljayIsIHRoaXMuX2FkZEZpbGVTeXN0ZW1DbGlja2VkLmJpbmQodGhpcykpOwotCi0gICAgICAg
IHZhciBmaWxlU3lzdGVtUGF0aHMgPSBXZWJJbnNwZWN0b3IuaXNvbGF0ZWRGaWxlU3lzdGVtTWFu
YWdlci5tYXBwaW5nKCkuZmlsZVN5c3RlbVBhdGhzKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZmlsZVN5c3RlbVBhdGhzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fYWRk
RmlsZVN5c3RlbVJvdyhmaWxlU3lzdGVtUGF0aHNbaV0pOwotCi0gICAgICAgIHJldHVybiB0aGlz
Ll9maWxlU3lzdGVtc0VkaXRvcjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
RWxlbWVudH0KLSAgICAgKi8KLSAgICBfY3JlYXRlU2hvd1RleHRJbnB1dDogZnVuY3Rpb24oY2xh
c3NOYW1lLCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHZhciBpbnB1dEVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgICBpbnB1dEVsZW1lbnQuYWRkU3R5bGVD
bGFzcyhjbGFzc05hbWUpOwotICAgICAgICBpbnB1dEVsZW1lbnQudHlwZSA9ICJ0ZXh0IjsKLSAg
ICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGlucHV0RWxlbWVudC50
aXRsZSA9IHZhbHVlOwotICAgICAgICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gaW5wdXRFbGVtZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIF9jcmVhdGVFZGl0VGV4dElucHV0OiBmdW5jdGlv
bihjbGFzc05hbWUsIHBsYWNlSG9sZGVyKQotICAgIHsKLSAgICAgICAgdmFyIGlucHV0RWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGlucHV0RWxlbWVu
dC5hZGRTdHlsZUNsYXNzKGNsYXNzTmFtZSk7Ci0gICAgICAgIGlucHV0RWxlbWVudC50eXBlID0g
InRleHQiOwotICAgICAgICBpbnB1dEVsZW1lbnQucGxhY2Vob2xkZXIgPSBwbGFjZUhvbGRlcjsK
LSAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtmdW5jdGlvbihFdmVudCl9IGhhbmRsZXIKLSAgICAgKiBAcmV0dXJuIHtFbGVtZW50
fQotICAgICAqLwotICAgIF9jcmVhdGVSZW1vdmVCdXR0b246IGZ1bmN0aW9uKGhhbmRsZXIpCi0g
ICAgewotICAgICAgICB2YXIgcmVtb3ZlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YnV0dG9uIik7Ci0gICAgICAgIHJlbW92ZUJ1dHRvbi5hZGRTdHlsZUNsYXNzKCJidXR0b24iKTsK
LSAgICAgICAgcmVtb3ZlQnV0dG9uLmFkZFN0eWxlQ2xhc3MoInJlbW92ZS1idXR0b24iKTsKLSAg
ICAgICAgcmVtb3ZlQnV0dG9uLnZhbHVlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZW1vdmUi
KTsKLSAgICAgICAgcmVtb3ZlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxl
ciwgZmFsc2UpOwotICAgICAgICByZXR1cm4gcmVtb3ZlQnV0dG9uOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEV2ZW50KX0gaGFuZGxlcgotICAgICAqIEByZXR1
cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgX2NyZWF0ZUFkZEJ1dHRvbjogZnVuY3Rpb24oaGFu
ZGxlcikKLSAgICB7Ci0gICAgICAgIHZhciBhZGRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJidXR0b24iKTsKLSAgICAgICAgYWRkQnV0dG9uLmFkZFN0eWxlQ2xhc3MoImJ1dHRvbiIp
OwotICAgICAgICBhZGRCdXR0b24uYWRkU3R5bGVDbGFzcygiYWRkLWJ1dHRvbiIpOwotICAgICAg
ICBhZGRCdXR0b24udmFsdWUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCIpOwotICAgICAg
ICBhZGRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVyLCBmYWxzZSk7Ci0g
ICAgICAgIHJldHVybiBhZGRCdXR0b247Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBmaWxlU3lzdGVtUGF0aAotICAgICAqLwotICAgIF9hZGRGaWxlU3lzdGVtUm93
OiBmdW5jdGlvbihmaWxlU3lzdGVtUGF0aCkKLSAgICB7Ci0gICAgICAgIHZhciBmaWxlU3lzdGVt
Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGZpbGVTeXN0ZW1S
b3cuYWRkU3R5bGVDbGFzcygid29ya3NwYWNlLXNldHRpbmdzLXJvdyIpOwotICAgICAgICBmaWxl
U3lzdGVtUm93LmFkZFN0eWxlQ2xhc3MoImZpbGUtc3lzdGVtLXJvdyIpOwotICAgICAgICB0aGlz
Ll9maWxlU3lzdGVtc0VkaXRvci5pbnNlcnRCZWZvcmUoZmlsZVN5c3RlbVJvdywgdGhpcy5fYWRk
RmlsZVN5c3RlbVJvd0VsZW1lbnQpOwotCi0gICAgICAgIGZpbGVTeXN0ZW1Sb3cuYXBwZW5kQ2hp
bGQodGhpcy5fY3JlYXRlU2hvd1RleHRJbnB1dCgiZmlsZS1zeXN0ZW0tcGF0aCIsIGZpbGVTeXN0
ZW1QYXRoKSk7Ci0gICAgICAgIHZhciByZW1vdmVGaWxlU3lzdGVtQnV0dG9uID0gdGhpcy5fY3Jl
YXRlUmVtb3ZlQnV0dG9uKHJlbW92ZUZpbGVTeXN0ZW1DbGlja2VkLmJpbmQodGhpcykpOwotICAg
ICAgICBmaWxlU3lzdGVtUm93LmFwcGVuZENoaWxkKHJlbW92ZUZpbGVTeXN0ZW1CdXR0b24pOwot
Ci0gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUZpbGVTeXN0ZW1DbGlja2VkKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmVtb3ZlRmlsZVN5c3RlbUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7Ci0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuaXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdlci5yZW1vdmVGaWxl
U3lzdGVtKGZpbGVTeXN0ZW1QYXRoLCBmaWxlU3lzdGVtUmVtb3ZlZC5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24gZmlsZVN5c3RlbVJlbW92ZWQoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9maWxlU3lzdGVtc0VkaXRvci5yZW1vdmVDaGls
ZChmaWxlU3lzdGVtUm93KTsKLSAgICAgICAgICAgIHJlbW92ZUZpbGVTeXN0ZW1CdXR0b24uZGlz
YWJsZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfYWRkRmlsZVN5c3RlbUNs
aWNrZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pc29sYXRlZEZp
bGVTeXN0ZW1NYW5hZ2VyLmFkZEZpbGVTeXN0ZW0odGhpcy5fZmlsZVN5c3RlbUFkZGVkLmJpbmQo
dGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVT
eXN0ZW1QYXRoCi0gICAgICovCi0gICAgX2ZpbGVTeXN0ZW1BZGRlZDogZnVuY3Rpb24oZmlsZVN5
c3RlbVBhdGgpCi0gICAgewotICAgICAgICBpZiAoZmlsZVN5c3RlbVBhdGgpCi0gICAgICAgICAg
ICB0aGlzLl9hZGRGaWxlU3lzdGVtUm93KGZpbGVTeXN0ZW1QYXRoKTsKLSAgICB9LAotCi0gICAg
X2NyZWF0ZUZpbGVNYXBwaW5nRWRpdG9yOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
cCA9IHRoaXMuX2FwcGVuZFNlY3Rpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJNYXBwaW5ncyIp
KTsKLSAgICAgICAgdGhpcy5fZmlsZU1hcHBpbmdFZGl0b3IgPSBwLmNyZWF0ZUNoaWxkKCJwIiwg
ImZpbGUtbWFwcGluZ3MtZWRpdG9yIik7Ci0KLSAgICAgICAgdGhpcy5fYWRkTWFwcGluZ1Jvd0Vs
ZW1lbnQgPSB0aGlzLl9maWxlTWFwcGluZ0VkaXRvci5jcmVhdGVDaGlsZCgiZGl2IiwgIndvcmtz
cGFjZS1zZXR0aW5ncy1yb3ciKTsKLQotICAgICAgICB0aGlzLl91cmxJbnB1dEVsZW1lbnQgPSB0
aGlzLl9jcmVhdGVFZGl0VGV4dElucHV0KCJmaWxlLW1hcHBpbmctdXJsIiwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJGaWxlIG1hcHBpbmcgdXJsIikpOwotICAgICAgICB0aGlzLl9hZGRNYXBwaW5n
Um93RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl91cmxJbnB1dEVsZW1lbnQpOwotICAgICAgICB0
aGlzLl9wYXRoSW5wdXRFbGVtZW50ID0gdGhpcy5fY3JlYXRlRWRpdFRleHRJbnB1dCgiZmlsZS1t
YXBwaW5nLXBhdGgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZpbGUgbWFwcGluZyBwYXRoIikp
OwotICAgICAgICB0aGlzLl9hZGRNYXBwaW5nUm93RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9w
YXRoSW5wdXRFbGVtZW50KTsKLQotICAgICAgICB0aGlzLl9hZGRNYXBwaW5nUm93RWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVBZGRCdXR0b24odGhpcy5fYWRkRmlsZU1hcHBpbmdDbGlj
a2VkLmJpbmQodGhpcykpKTsKLQotICAgICAgICB2YXIgbWFwcGluZ0VudHJpZXMgPSBXZWJJbnNw
ZWN0b3IuZmlsZU1hcHBpbmcubWFwcGluZ0VudHJpZXMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtYXBwaW5nRW50cmllcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2Fk
ZE1hcHBpbmdSb3cobWFwcGluZ0VudHJpZXNbaV0pOwotCi0gICAgICAgIHJldHVybiB0aGlzLl9m
aWxlTWFwcGluZ0VkaXRvcjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuRmlsZU1hcHBpbmcuRW50cnl9IG1hcHBpbmdFbnRyeQotICAgICAqLwotICAgIF9h
ZGRNYXBwaW5nUm93OiBmdW5jdGlvbihtYXBwaW5nRW50cnkpCi0gICAgewotICAgICAgICB2YXIg
ZmlsZU1hcHBpbmdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAg
ZmlsZU1hcHBpbmdSb3cuYWRkU3R5bGVDbGFzcygid29ya3NwYWNlLXNldHRpbmdzLXJvdyIpOwot
ICAgICAgICB0aGlzLl9maWxlTWFwcGluZ0VkaXRvci5pbnNlcnRCZWZvcmUoZmlsZU1hcHBpbmdS
b3csIHRoaXMuX2FkZE1hcHBpbmdSb3dFbGVtZW50KTsKLQotICAgICAgICBmaWxlTWFwcGluZ1Jv
dy5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVTaG93VGV4dElucHV0KCJmaWxlLW1hcHBpbmctdXJs
IiwgbWFwcGluZ0VudHJ5LnVybFByZWZpeCkpOwotICAgICAgICBmaWxlTWFwcGluZ1Jvdy5hcHBl
bmRDaGlsZCh0aGlzLl9jcmVhdGVTaG93VGV4dElucHV0KCJmaWxlLW1hcHBpbmctcGF0aCIsIG1h
cHBpbmdFbnRyeS5wYXRoUHJlZml4KSk7Ci0KLSAgICAgICAgZmlsZU1hcHBpbmdSb3cuYXBwZW5k
Q2hpbGQodGhpcy5fY3JlYXRlUmVtb3ZlQnV0dG9uKHJlbW92ZU1hcHBpbmdDbGlja2VkLmJpbmQo
dGhpcykpKTsKLQotICAgICAgICBmdW5jdGlvbiByZW1vdmVNYXBwaW5nQ2xpY2tlZCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGZpbGVNYXBwaW5nUm93LnBhcmVudEVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihmaWxlTWFw
cGluZ1Jvdyk7Ci0gICAgICAgICAgICB2YXIgbWFwcGluZ0VudHJpZXMgPSBXZWJJbnNwZWN0b3Iu
ZmlsZU1hcHBpbmcubWFwcGluZ0VudHJpZXMoKTsKLSAgICAgICAgICAgIG1hcHBpbmdFbnRyaWVz
LnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcu
c2V0TWFwcGluZ0VudHJpZXMobWFwcGluZ0VudHJpZXMpOwotICAgICAgICAgICAgdGhpcy5fZmls
ZU1hcHBpbmdFZGl0b3IucmVtb3ZlQ2hpbGQoZmlsZU1hcHBpbmdSb3cpOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9hZGRGaWxlTWFwcGluZ0NsaWNrZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciB1cmwgPSB0aGlzLl91cmxJbnB1dEVsZW1lbnQudmFsdWU7Ci0gICAgICAgIHZh
ciBwYXRoID0gdGhpcy5fcGF0aElucHV0RWxlbWVudC52YWx1ZTsKLSAgICAgICAgaWYgKCF1cmwg
fHwgIXBhdGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBtYXBwaW5nRW50cmll
cyA9IFdlYkluc3BlY3Rvci5maWxlTWFwcGluZy5tYXBwaW5nRW50cmllcygpOwotICAgICAgICBp
ZiAodXJsW3VybC5sZW5ndGggLSAxXSAhPT0gIi8iKQotICAgICAgICAgICAgdXJsICs9ICIvIjsK
LSAgICAgICAgaWYgKHBhdGhbcGF0aC5sZW5ndGggLSAxXSAhPT0gIi8iKQotICAgICAgICAgICAg
cGF0aCArPSAiLyI7Ci0gICAgICAgIHZhciBtYXBwaW5nRW50cnkgPSBuZXcgV2ViSW5zcGVjdG9y
LkZpbGVNYXBwaW5nLkVudHJ5KHVybCwgcGF0aCk7Ci0gICAgICAgIG1hcHBpbmdFbnRyaWVzLnB1
c2gobWFwcGluZ0VudHJ5KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnNldE1h
cHBpbmdFbnRyaWVzKG1hcHBpbmdFbnRyaWVzKTsKLSAgICAgICAgdGhpcy5fYWRkTWFwcGluZ1Jv
dyhtYXBwaW5nRW50cnkpOwotICAgICAgICB0aGlzLl91cmxJbnB1dEVsZW1lbnQudmFsdWUgPSAi
IjsKLSAgICAgICAgdGhpcy5fcGF0aElucHV0RWxlbWVudC52YWx1ZSA9ICIiOwotICAgIH0sCi0K
LSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TZXR0aW5nc1RhYi5wcm90b3R5cGUKLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU2V0dGluZ3NU
YWJ9Ci0gKi8KLVdlYkluc3BlY3Rvci5FeHBlcmltZW50c1NldHRpbmdzVGFiID0gZnVuY3Rpb24o
KQotewotICAgIFdlYkluc3BlY3Rvci5TZXR0aW5nc1RhYi5jYWxsKHRoaXMsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiRXhwZXJpbWVudHMiKSwgImV4cGVyaW1lbnRzLXRhYi1jb250ZW50Iik7Ci0K
LSAgICB2YXIgZXhwZXJpbWVudHMgPSBXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5l
eHBlcmltZW50czsKLSAgICBpZiAoZXhwZXJpbWVudHMubGVuZ3RoKSB7Ci0gICAgICAgIHZhciBl
eHBlcmltZW50c1NlY3Rpb24gPSB0aGlzLl9hcHBlbmRTZWN0aW9uKCk7Ci0gICAgICAgIGV4cGVy
aW1lbnRzU2VjdGlvbi5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVFeHBlcmltZW50c1dhcm5pbmdT
dWJzZWN0aW9uKCkpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVyaW1lbnRzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgZXhwZXJpbWVudHNTZWN0aW9uLmFwcGVuZENoaWxkKHRo
aXMuX2NyZWF0ZUV4cGVyaW1lbnRDaGVja2JveChleHBlcmltZW50c1tpXSkpOwotICAgIH0KLX0K
LQotV2ViSW5zcGVjdG9yLkV4cGVyaW1lbnRzU2V0dGluZ3NUYWIucHJvdG90eXBlID0gewotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9IGVsZW1lbnQKLSAgICAgKi8KLSAgICBfY3Jl
YXRlRXhwZXJpbWVudHNXYXJuaW5nU3Vic2VjdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIHN1YnNlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAg
ICAgdmFyIHdhcm5pbmcgPSBzdWJzZWN0aW9uLmNyZWF0ZUNoaWxkKCJzcGFuIiwgInNldHRpbmdz
LWV4cGVyaW1lbnRzLXdhcm5pbmctc3Vic2VjdGlvbi13YXJuaW5nIik7Ci0gICAgICAgIHdhcm5p
bmcudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldBUk5JTkc6Iik7Ci0gICAg
ICAgIHN1YnNlY3Rpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7
Ci0gICAgICAgIHZhciBtZXNzYWdlID0gc3Vic2VjdGlvbi5jcmVhdGVDaGlsZCgic3BhbiIsICJz
ZXR0aW5ncy1leHBlcmltZW50cy13YXJuaW5nLXN1YnNlY3Rpb24tbWVzc2FnZSIpOwotICAgICAg
ICBtZXNzYWdlLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGVzZSBleHBl
cmltZW50cyBjb3VsZCBiZSBkYW5nZXJvdXMgYW5kIG1heSByZXF1aXJlIHJlc3RhcnQuIik7Ci0g
ICAgICAgIHJldHVybiBzdWJzZWN0aW9uOwotICAgIH0sCi0KLSAgICBfY3JlYXRlRXhwZXJpbWVu
dENoZWNrYm94OiBmdW5jdGlvbihleHBlcmltZW50KQotICAgIHsKLSAgICAgICAgdmFyIGlucHV0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgaW5wdXQudHlwZSA9
ICJjaGVja2JveCI7Ci0gICAgICAgIGlucHV0Lm5hbWUgPSBleHBlcmltZW50Lm5hbWU7Ci0gICAg
ICAgIGlucHV0LmNoZWNrZWQgPSBleHBlcmltZW50LmlzRW5hYmxlZCgpOwotICAgICAgICBmdW5j
dGlvbiBsaXN0ZW5lcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4cGVyaW1lbnQuc2V0RW5h
YmxlZChpbnB1dC5jaGVja2VkKTsKLSAgICAgICAgfQotICAgICAgICBpbnB1dC5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIGxpc3RlbmVyLCBmYWxzZSk7Ci0KLSAgICAgICAgdmFyIHAgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Ci0gICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImxhYmVsIik7Ci0gICAgICAgIGxhYmVsLmFwcGVuZENoaWxkKGlucHV0KTsK
LSAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKGV4cGVyaW1lbnQudGl0bGUpKSk7Ci0gICAgICAgIHAuYXBwZW5kQ2hp
bGQobGFiZWwpOwotICAgICAgICByZXR1cm4gcDsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBX
ZWJJbnNwZWN0b3IuU2V0dGluZ3NUYWIucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKi8KLVdlYkluc3BlY3Rvci5TZXR0aW5nc0NvbnRyb2xsZXIgPSBmdW5jdGlvbigpCi17
Ci0gICAgdGhpcy5fc3RhdHVzQmFyQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJC
dXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZXR0aW5ncyIpLCAic2V0dGluZ3Mtc3RhdHVz
LWJhci1pdGVtIik7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLnNo
b3dPdmVycmlkZXNJbkRyYXdlci5pc0VuYWJsZWQoKSkKLSAgICAgICAgdGhpcy5fc3RhdHVzQmFy
QnV0dG9uLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fbW91c2VE
b3duLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIHRoaXMuX3N0YXR1c0Jh
ckJ1dHRvbi5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLl9tb3VzZVVw
LmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIC8qKiBAdHlwZSB7P1dlYkluc3BlY3Rvci5TZXR0
aW5nc1NjcmVlbn0gKi8KLSAgICB0aGlzLl9zZXR0aW5nc1NjcmVlbjsKLX0KLQotV2ViSW5zcGVj
dG9yLlNldHRpbmdzQ29udHJvbGxlci5wcm90b3R5cGUgPQotewotICAgIGdldCBzdGF0dXNCYXJJ
dGVtKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXNCYXJCdXR0b24uZWxlbWVu
dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAg
Ki8KLSAgICBfbW91c2VEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBj
b250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOwotICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3ZlcnJpZGVz
IiksIHNob3dPdmVycmlkZXMuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZXR0aW5ncyIpLCBzaG93U2V0dGluZ3MuYmlu
ZCh0aGlzKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gc2hvd092ZXJyaWRlcygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NjcmVlblZpc2libGUpCi0gICAgICAgICAg
ICAgICAgdGhpcy5faGlkZVNldHRpbmdzU2NyZWVuKCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0
b3IuT3ZlcnJpZGVzVmlldy5zaG93SW5EcmF3ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIHNob3dTZXR0aW5ncygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5f
c2V0dGluZ3NTY3JlZW5WaXNpYmxlKQotICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NldHRpbmdz
U2NyZWVuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250ZXh0TWVudS5zaG93U29mdE1lbnUo
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAg
Ki8KLSAgICBfbW91c2VVcDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLnNo
b3dTZXR0aW5nc1NjcmVlbigpOwotICAgIH0sCi0KLSAgICBfb25IaWRlU2V0dGluZ3NTY3JlZW46
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zZXR0aW5nc1NjcmVlblZp
c2libGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdGFiSWQK
LSAgICAgKi8KLSAgICBzaG93U2V0dGluZ3NTY3JlZW46IGZ1bmN0aW9uKHRhYklkKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5nc1NjcmVlbikKLSAgICAgICAgICAgIHRoaXMuX3Nl
dHRpbmdzU2NyZWVuID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nc1NjcmVlbih0aGlzLl9vbkhp
ZGVTZXR0aW5nc1NjcmVlbi5iaW5kKHRoaXMpKTsKLQotICAgICAgICBpZiAodGFiSWQpCi0gICAg
ICAgICAgICB0aGlzLl9zZXR0aW5nc1NjcmVlbi5zZWxlY3RUYWIodGFiSWQpOwotCi0gICAgICAg
IHRoaXMuX3NldHRpbmdzU2NyZWVuLnNob3dNb2RhbCgpOwotICAgICAgICB0aGlzLl9zZXR0aW5n
c1NjcmVlblZpc2libGUgPSB0cnVlOwotICAgIH0sCi0KLSAgICBfaGlkZVNldHRpbmdzU2NyZWVu
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NTY3JlZW4pCi0g
ICAgICAgICAgICB0aGlzLl9zZXR0aW5nc1NjcmVlbi5oaWRlKCk7Ci0gICAgfSwKLQotICAgIHJl
c2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2NyZWVu
ICYmIHRoaXMuX3NldHRpbmdzU2NyZWVuLmlzU2hvd2luZygpKQotICAgICAgICAgICAgdGhpcy5f
c2V0dGluZ3NTY3JlZW4uZG9SZXNpemUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nob3J0Y3V0c1NjcmVlbi5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2hvcnRjdXRzU2NyZWVuLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhMTM2YzMwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2hvcnRjdXRzU2NyZWVuLmpzCisrKyAvZGV2L251bGwKQEAg
LTEsMjA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuU2hv
cnRjdXRzU2NyZWVuID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuX3NlY3Rpb25zID0gLyoqIEB0
eXBlIHtPYmplY3QuPHN0cmluZywgIVdlYkluc3BlY3Rvci5TaG9ydGN1dHNTZWN0aW9uPn0gKi8g
KHt9KTsKLX0KLQotV2ViSW5zcGVjdG9yLlNob3J0Y3V0c1NjcmVlbi5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHshV2Vi
SW5zcGVjdG9yLlNob3J0Y3V0c1NlY3Rpb259Ci0gICAgICovCi0gICAgc2VjdGlvbjogZnVuY3Rp
b24obmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbbmFt
ZV07Ci0gICAgICAgIGlmICghc2VjdGlvbikKLSAgICAgICAgICAgIHRoaXMuX3NlY3Rpb25zW25h
bWVdID0gc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU2hvcnRjdXRzU2VjdGlvbihuYW1lKTsK
LSAgICAgICAgcmV0dXJuIHNlY3Rpb247Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4geyFXZWJJbnNwZWN0b3IuVmlld30KLSAgICAgKi8KLSAgICBjcmVhdGVTaG9ydGN1dHNUYWJW
aWV3OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgb3JkZXJlZFNlY3Rpb25zID0gW107
Ci0gICAgICAgIGZvciAodmFyIHNlY3Rpb24gaW4gdGhpcy5fc2VjdGlvbnMpCi0gICAgICAgICAg
ICBvcmRlcmVkU2VjdGlvbnMucHVzaCh0aGlzLl9zZWN0aW9uc1tzZWN0aW9uXSk7Ci0gICAgICAg
IGZ1bmN0aW9uIGNvbXBhcmVTZWN0aW9ucyhhLCBiKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7Ci0gICAgICAgIH0KLSAgICAgICAgb3JkZXJlZFNlY3Rp
b25zLnNvcnQoY29tcGFyZVNlY3Rpb25zKTsKLQotICAgICAgICB2YXIgdmlldyA9IG5ldyBXZWJJ
bnNwZWN0b3IuVmlldygpOwotCi0gICAgICAgIHZpZXcuZWxlbWVudC5jbGFzc05hbWUgPSAic2V0
dGluZ3MtdGFiLWNvbnRhaW5lciI7Ci0gICAgICAgIHZpZXcuZWxlbWVudC5jcmVhdGVDaGlsZCgi
aGVhZGVyIikuY3JlYXRlQ2hpbGQoImgzIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG9ydGN1dHMiKSkpOwotICAgICAgICB2YXIg
Y29udGFpbmVyID0gdmlldy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiaGVscC1jb250YWlu
ZXItd3JhcHBlciIpLmNyZWF0ZUNoaWxkKCJkaXYiKTsKLSAgICAgICAgY29udGFpbmVyLmNsYXNz
TmFtZSA9ICJoZWxwLWNvbnRlbnQgaGVscC1jb250YWluZXIiOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG9yZGVyZWRTZWN0aW9ucy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG9yZGVy
ZWRTZWN0aW9uc1tpXS5yZW5kZXJTZWN0aW9uKGNvbnRhaW5lcik7Ci0KLSAgICAgICAgcmV0dXJu
IHZpZXc7Ci0gICAgfQotfQotCi0vKioKLSAqIFdlIGNhbm5vdCBpbml0aWFsaXplIGl0IGhlcmUg
YXMgbG9jYWxpemVkIHN0cmluZ3MgYXJlIG5vdCBsb2FkZWQgeWV0LgotICogQHR5cGUgez9XZWJJ
bnNwZWN0b3IuU2hvcnRjdXRzU2NyZWVufQotICovCi1XZWJJbnNwZWN0b3Iuc2hvcnRjdXRzU2Ny
ZWVuID0gbnVsbDsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSBu
YW1lCi0gKi8KLVdlYkluc3BlY3Rvci5TaG9ydGN1dHNTZWN0aW9uID0gZnVuY3Rpb24obmFtZSkK
LXsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMuX2xpbmVzID0gLyoqIEB0eXBlIHsh
QXJyYXkuPHtrZXk6ICFOb2RlLCB0ZXh0OiBzdHJpbmd9Pn0gKi8gKFtdKTsKLSAgICB0aGlzLm9y
ZGVyID0gKytXZWJJbnNwZWN0b3IuU2hvcnRjdXRzU2VjdGlvbi5fc2VxdWVuY2VOdW1iZXI7Ci19
OwotCi1XZWJJbnNwZWN0b3IuU2hvcnRjdXRzU2VjdGlvbi5fc2VxdWVuY2VOdW1iZXIgPSAwOwot
Ci1XZWJJbnNwZWN0b3IuU2hvcnRjdXRzU2VjdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuRGVzY3JpcHRvcn0g
a2V5Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uCi0gICAgICovCi0gICAgYWRk
S2V5OiBmdW5jdGlvbihrZXksIGRlc2NyaXB0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fYWRk
TGluZSh0aGlzLl9yZW5kZXJLZXkoa2V5KSwgZGVzY3JpcHRpb24pOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LkRlc2NyaXB0b3I+fSBrZXlzCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uCi0g
ICAgICovCi0gICAgYWRkUmVsYXRlZEtleXM6IGZ1bmN0aW9uKGtleXMsIGRlc2NyaXB0aW9uKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fYWRkTGluZSh0aGlzLl9yZW5kZXJTZXF1ZW5jZShrZXlzLCAi
LyIpLCBkZXNjcmlwdGlvbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IUFy
cmF5LjwhV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuRGVzY3JpcHRvcj59IGtleXMKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24KLSAgICAgKi8KLSAgICBhZGRBbHRlcm5h
dGVLZXlzOiBmdW5jdGlvbihrZXlzLCBkZXNjcmlwdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMu
X2FkZExpbmUodGhpcy5fcmVuZGVyU2VxdWVuY2Uoa2V5cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJvciIpKSwgZGVzY3JpcHRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
eyFOb2RlfSBrZXlFbGVtZW50Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uCi0g
ICAgICovCi0gICAgX2FkZExpbmU6IGZ1bmN0aW9uKGtleUVsZW1lbnQsIGRlc2NyaXB0aW9uKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fbGluZXMucHVzaCh7IGtleToga2V5RWxlbWVudCwgdGV4dDog
ZGVzY3JpcHRpb24gfSkKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshRWxlbWVu
dH0gY29udGFpbmVyCi0gICAgICovCi0gICAgcmVuZGVyU2VjdGlvbjogZnVuY3Rpb24oY29udGFp
bmVyKQotICAgIHsKLSAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRhaW5lci5jcmVhdGVDaGlsZCgi
ZGl2IiwgImhlbHAtYmxvY2siKTsKLQotICAgICAgICB2YXIgaGVhZExpbmUgPSBwYXJlbnQuY3Jl
YXRlQ2hpbGQoImRpdiIsICJoZWxwLWxpbmUiKTsKLSAgICAgICAgaGVhZExpbmUuY3JlYXRlQ2hp
bGQoImRpdiIsICJoZWxwLWtleS1jZWxsIik7Ci0gICAgICAgIGhlYWRMaW5lLmNyZWF0ZUNoaWxk
KCJkaXYiLCAiaGVscC1zZWN0aW9uLXRpdGxlIGhlbHAtY2VsbCIpLnRleHRDb250ZW50ID0gdGhp
cy5uYW1lOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGluZXMubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lID0gcGFyZW50LmNyZWF0ZUNoaWxkKCJkaXYi
LCAiaGVscC1saW5lIik7Ci0gICAgICAgICAgICB2YXIga2V5Q2VsbCA9IGxpbmUuY3JlYXRlQ2hp
bGQoImRpdiIsICJoZWxwLWtleS1jZWxsIik7Ci0gICAgICAgICAgICBrZXlDZWxsLmFwcGVuZENo
aWxkKHRoaXMuX2xpbmVzW2ldLmtleSk7Ci0gICAgICAgICAgICBrZXlDZWxsLmFwcGVuZENoaWxk
KHRoaXMuX2NyZWF0ZVNwYW4oImhlbHAta2V5LWRlbGltaXRlciIsICI6IikpOwotICAgICAgICAg
ICAgbGluZS5jcmVhdGVDaGlsZCgiZGl2IiwgImhlbHAtY2VsbCIpLnRleHRDb250ZW50ID0gdGhp
cy5fbGluZXNbaV0udGV4dDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0geyFBcnJheS48IVdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LkRlc2NyaXB0b3I+
fSBzZXF1ZW5jZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxpbWl0ZXIKLSAgICAgKiBAcmV0
dXJuIHshTm9kZX0KLSAgICAgKi8KLSAgICBfcmVuZGVyU2VxdWVuY2U6IGZ1bmN0aW9uKHNlcXVl
bmNlLCBkZWxpbWl0ZXIpCi0gICAgewotICAgICAgICB2YXIgZGVsaW1pdGVyU3BhbiA9IHRoaXMu
X2NyZWF0ZVNwYW4oImhlbHAta2V5LWRlbGltaXRlciIsIGRlbGltaXRlcik7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9qb2luTm9kZXMoc2VxdWVuY2UubWFwKHRoaXMuX3JlbmRlcktleS5iaW5kKHRo
aXMpKSwgZGVsaW1pdGVyU3Bhbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
IVdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LkRlc2NyaXB0b3J9IGtleQotICAgICAqIEBy
ZXR1cm4geyFOb2RlfQotICAgICAqLwotICAgIF9yZW5kZXJLZXk6IGZ1bmN0aW9uKGtleSkKLSAg
ICB7Ci0gICAgICAgIHZhciBrZXlOYW1lID0ga2V5Lm5hbWU7Ci0gICAgICAgIHZhciBwbHVzID0g
dGhpcy5fY3JlYXRlU3BhbigiaGVscC1jb21iaW5lLWtleXMiLCAiKyIpOwotICAgICAgICByZXR1
cm4gdGhpcy5fam9pbk5vZGVzKGtleU5hbWUuc3BsaXQoIiArICIpLm1hcCh0aGlzLl9jcmVhdGVT
cGFuLmJpbmQodGhpcywgImhlbHAta2V5IG1vbm9zcGFjZSIpKSwgcGx1cyk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gdGV4dENvbnRlbnQKLSAgICAgKiBAcmV0dXJuIHshRWxlbWVudH0KLSAgICAgKi8K
LSAgICBfY3JlYXRlU3BhbjogZnVuY3Rpb24oY2xhc3NOYW1lLCB0ZXh0Q29udGVudCkKLSAgICB7
Ci0gICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAg
ICAgICBub2RlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICAgICAgbm9kZS50ZXh0Q29udGVu
dCA9IHRleHRDb250ZW50OwotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHshQXJyYXkuPCFFbGVtZW50Pn0gbm9kZXMKLSAgICAgKiBAcGFyYW0g
eyFFbGVtZW50fSBkZWxpbWl0ZXIKLSAgICAgKiBAcmV0dXJuIHshTm9kZX0KLSAgICAgKi8KLSAg
ICBfam9pbk5vZGVzOiBmdW5jdGlvbihub2RlcywgZGVsaW1pdGVyKQotICAgIHsKLSAgICAgICAg
dmFyIHJlc3VsdCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYg
KGkgPiAwKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRDaGlsZChkZWxpbWl0ZXIuY2xv
bmVOb2RlKHRydWUpKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRDaGlsZChub2Rlc1tpXSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nob3dNb3JlRGF0YUdyaWROb2Rl
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TaG93TW9yZURhdGFHcmlk
Tm9kZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkxNGExYi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nob3dNb3JlRGF0YUdyaWRO
b2RlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGV9Ci0gKiBAcGFyYW0ge2Z1
bmN0aW9uKG51bWJlciwgbnVtYmVyKX0gY2FsbGJhY2sKLSAqIEBwYXJhbSB7bnVtYmVyfSBzdGFy
dFBvc2l0aW9uCi0gKiBAcGFyYW0ge251bWJlcn0gZW5kUG9zaXRpb24KLSAqIEBwYXJhbSB7bnVt
YmVyfSBjaHVua1NpemUKLSAqLwotV2ViSW5zcGVjdG9yLlNob3dNb3JlRGF0YUdyaWROb2RlID0g
ZnVuY3Rpb24oY2FsbGJhY2ssIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjaHVua1NpemUp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5jYWxsKHRoaXMsIHtzdW1tYXJ5Um93
OnRydWV9LCBmYWxzZSk7Ci0gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB0aGlz
Ll9zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICB0aGlzLl9lbmRQb3NpdGlvbiA9
IGVuZFBvc2l0aW9uOwotICAgIHRoaXMuX2NodW5rU2l6ZSA9IGNodW5rU2l6ZTsKLQotICAgIHRo
aXMuc2hvd05leHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKLSAgICB0aGlz
LnNob3dOZXh0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJidXR0b24iKTsKLSAgICB0aGlzLnNob3dO
ZXh0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fc2hvd05leHRDaHVuay5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5zaG93TmV4dC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiU2hvdyAlZCBiZWZvcmUiLCB0aGlzLl9jaHVua1NpemUpOwotCi0gICAgdGhp
cy5zaG93QWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci0gICAgdGhpcy5z
aG93QWxsLnNldEF0dHJpYnV0ZSgidHlwZSIsICJidXR0b24iKTsKLSAgICB0aGlzLnNob3dBbGwu
YWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9zaG93QWxsLmJpbmQodGhpcyksIGZhbHNl
KTsKLQotICAgIHRoaXMuc2hvd0xhc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24i
KTsKLSAgICB0aGlzLnNob3dMYXN0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJidXR0b24iKTsKLSAg
ICB0aGlzLnNob3dMYXN0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fc2hvd0xhc3RD
aHVuay5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5zaG93TGFzdC50ZXh0Q29udGVudCA9
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyAlZCBhZnRlciIsIHRoaXMuX2NodW5rU2l6ZSk7
Ci0KLSAgICB0aGlzLl91cGRhdGVMYWJlbHMoKTsKLSAgICB0aGlzLnNlbGVjdGFibGUgPSBmYWxz
ZTsKLX0KLQotV2ViSW5zcGVjdG9yLlNob3dNb3JlRGF0YUdyaWROb2RlLnByb3RvdHlwZSA9IHsK
LSAgICBfc2hvd05leHRDaHVuazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2Fs
bGJhY2sodGhpcy5fc3RhcnRQb3NpdGlvbiwgdGhpcy5fc3RhcnRQb3NpdGlvbiArIHRoaXMuX2No
dW5rU2l6ZSk7Ci0gICAgfSwKLQotICAgIF9zaG93QWxsOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9jYWxsYmFjayh0aGlzLl9zdGFydFBvc2l0aW9uLCB0aGlzLl9lbmRQb3NpdGlv
bik7Ci0gICAgfSwKLQotICAgIF9zaG93TGFzdENodW5rOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9jYWxsYmFjayh0aGlzLl9lbmRQb3NpdGlvbiAtIHRoaXMuX2NodW5rU2l6ZSwg
dGhpcy5fZW5kUG9zaXRpb24pOwotICAgIH0sCi0KLSAgICBfdXBkYXRlTGFiZWxzOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgdG90YWxTaXplID0gdGhpcy5fZW5kUG9zaXRpb24gLSB0
aGlzLl9zdGFydFBvc2l0aW9uOwotICAgICAgICBpZiAodG90YWxTaXplID4gdGhpcy5fY2h1bmtT
aXplKSB7Ci0gICAgICAgICAgICB0aGlzLnNob3dOZXh0LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRl
biIpOwotICAgICAgICAgICAgdGhpcy5zaG93TGFzdC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4i
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuc2hvd05leHQuYWRkU3R5bGVD
bGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICB0aGlzLnNob3dMYXN0LmFkZFN0eWxlQ2xhc3Mo
ImhpZGRlbiIpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuc2hvd0FsbC50ZXh0Q29udGVudCA9
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBhbGwgJWQiLCB0b3RhbFNpemUpOwotICAgIH0s
Ci0KLSAgICBjcmVhdGVDZWxsczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGNlbGwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICBpZiAodGhpcy5kZXB0aCkK
LSAgICAgICAgICAgIGNlbGwuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctbGVmdCIsICh0aGlz
LmRlcHRoICogdGhpcy5kYXRhR3JpZC5pbmRlbnRXaWR0aCkgKyAicHgiKTsKLSAgICAgICAgY2Vs
bC5hcHBlbmRDaGlsZCh0aGlzLnNob3dOZXh0KTsKLSAgICAgICAgY2VsbC5hcHBlbmRDaGlsZCh0
aGlzLnNob3dBbGwpOwotICAgICAgICBjZWxsLmFwcGVuZENoaWxkKHRoaXMuc2hvd0xhc3QpOwot
ICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGNlbGwpOwotCi0gICAgICAgIHZhciBj
b2x1bW5zID0gdGhpcy5kYXRhR3JpZC5jb2x1bW5zOwotICAgICAgICB2YXIgY291bnQgPSAwOwot
ICAgICAgICBmb3IgKHZhciBjIGluIGNvbHVtbnMpCi0gICAgICAgICAgICArK2NvdW50OwotICAg
ICAgICB3aGlsZSAoLS1jb3VudCA+IDApIHsKLSAgICAgICAgICAgIGNlbGwgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGls
ZChjZWxsKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gZnJvbQotICAgICAqLwotICAgIHNldFN0YXJ0UG9zaXRpb246IGZ1bmN0aW9uKGZyb20p
Ci0gICAgewotICAgICAgICB0aGlzLl9zdGFydFBvc2l0aW9uID0gZnJvbTsKLSAgICAgICAgdGhp
cy5fdXBkYXRlTGFiZWxzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSB0bwotICAgICAqLwotICAgIHNldEVuZFBvc2l0aW9uOiBmdW5jdGlvbih0bykKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2VuZFBvc2l0aW9uID0gdG87Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUxh
YmVscygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcmV0
dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgbm9kZUhlaWdodDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDMyOwotICAgIH0sCi0KLSAgICBkaXNwb3NlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUu
cHJvdG90eXBlCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2lkZWJhck92ZXJsYXkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NpZGViYXJPdmVybGF5LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTlm
NTZmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2lk
ZWJhck92ZXJsYXkuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5WaWV3fSB2aWV3Ci0gKiBAcGFyYW0g
e3N0cmluZ30gd2lkdGhTZXR0aW5nTmFtZQotICogQHBhcmFtIHtudW1iZXJ9IG1pbmltYWxXaWR0
aAotICovCi1XZWJJbnNwZWN0b3IuU2lkZWJhck92ZXJsYXkgPSBmdW5jdGlvbih2aWV3LCB3aWR0
aFNldHRpbmdOYW1lLCBtaW5pbWFsV2lkdGgpCi17Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJz
aWRlYmFyLW92ZXJsYXkiOwotCi0gICAgdGhpcy5fdmlldyA9IHZpZXc7Ci0gICAgdGhpcy5fd2lk
dGhTZXR0aW5nTmFtZSA9IHdpZHRoU2V0dGluZ05hbWU7Ci0gICAgdGhpcy5fbWluaW1hbFdpZHRo
ID0gbWluaW1hbFdpZHRoOwotICAgIHRoaXMuX3NhdmVkV2lkdGggPSBtaW5pbWFsV2lkdGggfHwg
MzAwOwotICAgIAotICAgIGlmICh0aGlzLl93aWR0aFNldHRpbmdOYW1lKQotICAgICAgICBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3NbdGhpcy5fd2lkdGhTZXR0aW5nTmFtZV0gPSBXZWJJbnNwZWN0b3Iu
c2V0dGluZ3MuY3JlYXRlU2V0dGluZyh0aGlzLl93aWR0aFNldHRpbmdOYW1lLCB1bmRlZmluZWQp
OwotICAgIAotICAgIHRoaXMuX3Jlc2l6ZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgdGhpcy5fcmVzaXplckVsZW1lbnQuY2xhc3NOYW1lID0gInNpZGViYXIt
b3ZlcmxheS1yZXNpemVyIjsKLSAgICB0aGlzLl9pbnN0YWxsUmVzaXplcih0aGlzLl9yZXNpemVy
RWxlbWVudCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TaWRlYmFyT3ZlcmxheS5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSByZWxhdGl2ZVRvRWxlbWVudAotICAg
ICAqLwotICAgIHNob3c6IGZ1bmN0aW9uKHJlbGF0aXZlVG9FbGVtZW50KQotICAgIHsKLSAgICAg
ICAgcmVsYXRpdmVUb0VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKLSAgICAgICAg
cmVsYXRpdmVUb0VsZW1lbnQuYWRkU3R5bGVDbGFzcygic2lkZWJhci1vdmVybGF5LXNob3duIik7
Ci0gICAgICAgIHRoaXMuX3ZpZXcuc2hvdyh0aGlzLmVsZW1lbnQpOwotICAgICAgICB0aGlzLmVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fcmVzaXplckVsZW1lbnQpOwotICAgICAgICBpZiAodGhp
cy5fcmVzaXplcldpZGdldEVsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5fcmVzaXplcldpZGdldEVsZW1lbnQpOwotICAgICAgICB0aGlzLnBvc2l0aW9u
KHJlbGF0aXZlVG9FbGVtZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtF
bGVtZW50fSByZWxhdGl2ZVRvRWxlbWVudAotICAgICAqLwotICAgIHBvc2l0aW9uOiBmdW5jdGlv
bihyZWxhdGl2ZVRvRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RvdGFsV2lkdGggPSBy
ZWxhdGl2ZVRvRWxlbWVudC5vZmZzZXRXaWR0aDsKLSAgICAgICAgdGhpcy5fc2V0V2lkdGgodGhp
cy5fcHJlZmVycmVkV2lkdGgoKSk7Ci0gICAgfSwKLQotICAgIGZvY3VzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0Q3VycmVudEZvY3VzRWxlbWVudCh0aGlzLl92
aWV3LmVsZW1lbnQpOwotICAgIH0sCi0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgICAgICBp
ZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fdmlldy5k
ZXRhY2goKTsKLSAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOwotICAg
ICAgICBlbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNpZGViYXItb3ZlcmxheS1zaG93biIpOwot
ICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fcmVzaXplckVsZW1lbnQpOwot
ICAgICAgICBpZiAodGhpcy5fcmVzaXplcldpZGdldEVsZW1lbnQpCi0gICAgICAgICAgICB0aGlz
LmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fcmVzaXplcldpZGdldEVsZW1lbnQpOwotICAgIH0s
Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IG5ld1dpZHRoCi0gICAgICov
Ci0gICAgX3NldFdpZHRoOiBmdW5jdGlvbihuZXdXaWR0aCkKLSAgICB7Ci0gICAgICAgIHZhciB3
aWR0aCA9IE51bWJlci5jb25zdHJhaW4obmV3V2lkdGgsIHRoaXMuX21pbmltYWxXaWR0aCwgdGhp
cy5fdG90YWxXaWR0aCk7Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5fd2lkdGggPT09IHdp
ZHRoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53
aWR0aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgdGhpcy5fcmVzaXplckVsZW1lbnQuc3R5bGUu
bGVmdCA9ICh3aWR0aCAtIDMpICsgInB4IjsKLSAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDsK
LSAgICAgICAgdGhpcy5fdmlldy5kb1Jlc2l6ZSgpOwotICAgICAgICB0aGlzLl9zYXZlV2lkdGgo
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwot
ICAgIF9wcmVmZXJyZWRXaWR0aDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
Ll93aWR0aFNldHRpbmdOYW1lKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVkV2lkdGg7
Ci0KLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5zZXR0aW5nc1t0aGlzLl93aWR0aFNldHRp
bmdOYW1lXS5nZXQoKSB8fCB0aGlzLl9zYXZlZFdpZHRoOwotICAgIH0sCi0gICAgCi0gICAgX3Nh
dmVXaWR0aDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2F2ZWRXaWR0aCA9IHRo
aXMuX3dpZHRoOwotICAgICAgICBpZiAoIXRoaXMuX3dpZHRoU2V0dGluZ05hbWUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzW3RoaXMuX3dpZHRo
U2V0dGluZ05hbWVdLnNldCh0aGlzLl93aWR0aCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8K
LSAgICBfc3RhcnRSZXNpemVyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7Ci0gICAgICAgIHRoaXMuX2RyYWdPZmZzZXQgPSB3
aWR0aCAtIGV2ZW50LnBhZ2VYOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfcmVzaXplckRy
YWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB3aWR0aCA9IGV2ZW50
LnBhZ2VYICsgdGhpcy5fZHJhZ09mZnNldDsKLSAgICAgICAgdGhpcy5fc2V0V2lkdGgod2lkdGgp
OwotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9lbmRSZXNpemVyRHJhZ2dp
bmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2RyYWdPZmZz
ZXQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcmVzaXplckVs
ZW1lbnQKLSAgICAgKi8KLSAgICBfaW5zdGFsbFJlc2l6ZXI6IGZ1bmN0aW9uKHJlc2l6ZXJFbGVt
ZW50KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmluc3RhbGxEcmFnSGFuZGxlKHJlc2l6
ZXJFbGVtZW50LCB0aGlzLl9zdGFydFJlc2l6ZXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0aGlzLl9y
ZXNpemVyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fZW5kUmVzaXplckRyYWdnaW5nLmJpbmQo
dGhpcyksICJldy1yZXNpemUiKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHR5cGUge0Vs
ZW1lbnR9Ci0gICAgICovCi0gICAgc2V0IHJlc2l6ZXJXaWRnZXRFbGVtZW50KHJlc2l6ZXJXaWRn
ZXRFbGVtZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzaXplcldpZGdldEVsZW1lbnQgPSBy
ZXNpemVyV2lkZ2V0RWxlbWVudDsKLSAgICAgICAgdGhpcy5faW5zdGFsbFJlc2l6ZXIocmVzaXpl
cldpZGdldEVsZW1lbnQpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NpZGViYXJQYW5lLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmMjMxMTg0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2lkZWJhclBhbmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKi8KLVdl
Ykluc3BlY3Rvci5TaWRlYmFyUGFuZSA9IGZ1bmN0aW9uKHRpdGxlKQotewotICAgIFdlYkluc3Bl
Y3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJzaWRl
YmFyLXBhbmUiOwotCi0gICAgdGhpcy50aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICB0aGlzLnRpdGxlRWxlbWVudC5jbGFzc05hbWUgPSAic2lkZWJhci1w
YW5lLXRvb2xiYXIiOwotCi0gICAgdGhpcy5ib2R5RWxlbWVudCA9IHRoaXMuZWxlbWVudC5jcmVh
dGVDaGlsZCgiZGl2IiwgImJvZHkiKTsKLQotICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7Ci0KLSAg
ICB0aGlzLl9leHBhbmRDYWxsYmFjayA9IG51bGw7Ci19Ci0KLVdlYkluc3BlY3Rvci5TaWRlYmFy
UGFuZS5FdmVudFR5cGVzID0gewotICAgIHdhc1Nob3duOiAid2FzU2hvd24iCi19Ci0KLVdlYklu
c3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7Ci0gICAgdGl0bGU6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxsYmFjawotICAgICAqLwotICAgIHByZXBhcmVD
b250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGlmIChjYWxsYmFjaykK
LSAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfSwKLQotICAgIGV4cGFuZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5wcmVwYXJlQ29udGVudCh0aGlzLm9uQ29udGVudFJlYWR5
LmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBvbkNvbnRlbnRSZWFkeTogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2V4cGFuZENhbGxiYWNrKQotICAgICAgICAgICAgdGhp
cy5fZXhwYW5kQ2FsbGJhY2soKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fZXhw
YW5kUGVuZGluZyA9IHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZXRFeHBhbmRDYWxsYmFjazogZnVuY3Rp
b24oY2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLl9leHBhbmRDYWxsYmFjayA9IGNhbGxi
YWNrOwotICAgICAgICBpZiAodGhpcy5fZXhwYW5kUGVuZGluZykgewotICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2V4cGFuZFBlbmRpbmc7Ci0gICAgICAgICAgICB0aGlzLl9leHBhbmRDYWxsYmFj
aygpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUud2FzU2hvd24uY2FsbCh0aGlz
KTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNp
ZGViYXJQYW5lLkV2ZW50VHlwZXMud2FzU2hvd24pOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNp
ZGViYXJQYW5lfSBwYW5lCi0gKi8KLVdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZVRpdGxlID0gZnVu
Y3Rpb24oY29udGFpbmVyLCBwYW5lKQotewotICAgIHRoaXMuX3BhbmUgPSBwYW5lOwotCi0gICAg
dGhpcy5lbGVtZW50ID0gY29udGFpbmVyLmNyZWF0ZUNoaWxkKCJkaXYiLCAic2lkZWJhci1wYW5l
LXRpdGxlIik7Ci0gICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gcGFuZS50aXRsZSgpOwot
ICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdG9nZ2xlRXhwYW5kZWQuYmluZCh0aGlzKSwgZmFsc2Up
OwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25U
aXRsZUtleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLl9wYW5lLnRpdGxlRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9wYW5lLnNldEV4cGFu
ZENhbGxiYWNrKHRoaXMuX2V4cGFuZC5iaW5kKHRoaXMpKTsKLX0KLQotV2ViSW5zcGVjdG9yLlNp
ZGViYXJQYW5lVGl0bGUucHJvdG90eXBlID0gewotCi0gICAgX2V4cGFuZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImV4cGFuZGVkIik7Ci0g
ICAgICAgIHRoaXMuX3BhbmUuc2hvdyh0aGlzLmVsZW1lbnQucGFyZW50Tm9kZSwgdGhpcy5lbGVt
ZW50Lm5leHRTaWJsaW5nKTsKLSAgICB9LAotCi0gICAgX2NvbGxhcHNlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZXhwYW5kZWQiKTsK
LSAgICAgICAgaWYgKHRoaXMuX3BhbmUuZWxlbWVudC5wYXJlbnROb2RlID09IHRoaXMuZWxlbWVu
dC5wYXJlbnROb2RlKQotICAgICAgICAgICAgdGhpcy5fcGFuZS5kZXRhY2goKTsKLSAgICB9LAot
Ci0gICAgX3RvZ2dsZUV4cGFuZGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5lbGVtZW50Lmhhc1N0eWxlQ2xhc3MoImV4cGFuZGVkIikpCi0gICAgICAgICAgICB0aGlzLl9j
b2xsYXBzZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9wYW5lLmV4cGFuZCgp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAq
LwotICAgIF9vblRpdGxlS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBp
ZiAoaXNFbnRlcktleShldmVudCkgfHwgZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuS2V5cy5TcGFjZS5jb2RlKQotICAgICAgICAgICAgdGhpcy5fdG9nZ2xl
RXhwYW5kZWQoKTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKi8KLVdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZVN0YWNr
ID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAg
dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJzaWRlYmFyLXBhbmUtc3RhY2sgZmlsbCI7Ci0gICAg
dGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJzaWRlYmFyUGFuZS5jc3MiKTsKLX0KLQotV2ViSW5z
cGVjdG9yLlNpZGViYXJQYW5lU3RhY2sucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lfSBwYW5lCi0gICAgICovCi0gICAgYWRkUGFu
ZTogZnVuY3Rpb24ocGFuZSkKLSAgICB7Ci0gICAgICAgIG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJh
clBhbmVUaXRsZSh0aGlzLmVsZW1lbnQsIHBhbmUpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5UYWJiZWRQYW5lfQotICovCi1XZWJJbnNwZWN0b3Iu
U2lkZWJhclRhYmJlZFBhbmUgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlRhYmJl
ZFBhbmUuY2FsbCh0aGlzKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2lkZWJh
ci10YWJiZWQtcGFuZSIpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygic2lkZWJhclBh
bmUuY3NzIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5TaWRlYmFyVGFiYmVkUGFuZS5wcm90b3R5cGUg
PSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmV9IHBh
bmUKLSAgICAgKi8KLSAgICBhZGRQYW5lOiBmdW5jdGlvbihwYW5lKQotICAgIHsKLSAgICAgICAg
dmFyIHRpdGxlID0gcGFuZS50aXRsZSgpOwotICAgICAgICB0aGlzLmFwcGVuZFRhYih0aXRsZSwg
dGl0bGUsIHBhbmUpOwotICAgICAgICBwYW5lLmVsZW1lbnQuYXBwZW5kQ2hpbGQocGFuZS50aXRs
ZUVsZW1lbnQpOwotICAgICAgICBwYW5lLnNldEV4cGFuZENhbGxiYWNrKHRoaXMuc2VsZWN0VGFi
LmJpbmQodGhpcywgdGl0bGUpKTsKLQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5UYWJiZWRQYW5lLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TaWRlYmFyVHJlZUVsZW1lbnQuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJUcmVlRWxlbWVudC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzk4YWJjOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJUcmVlRWxlbWVudC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDIyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVlRWxlbWVudH0KLSAq
LwotV2ViSW5zcGVjdG9yLlNpZGViYXJTZWN0aW9uVHJlZUVsZW1lbnQgPSBmdW5jdGlvbih0aXRs
ZSwgcmVwcmVzZW50ZWRPYmplY3QsIGhhc0NoaWxkcmVuKQotewotICAgIFRyZWVFbGVtZW50LmNh
bGwodGhpcywgdGl0bGUuZXNjYXBlSFRNTCgpLCByZXByZXNlbnRlZE9iamVjdCB8fCB7fSwgaGFz
Q2hpbGRyZW4pOwotICAgIHRoaXMuZXhwYW5kKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TaWRlYmFy
U2VjdGlvblRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBzZWxlY3RhYmxlOiBmYWxzZSwK
LQotICAgIGNvbGxhcHNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBTaG91bGQgbm90
IGNvbGxhcHNlIGFzIGl0IGlzIG5vdCBzZWxlY3RhYmxlLgotICAgIH0sCi0KLSAgICBnZXQgc21h
bGxDaGlsZHJlbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc21hbGxDaGlsZHJlbjsK
LSAgICB9LAotCi0gICAgc2V0IHNtYWxsQ2hpbGRyZW4oeCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9zbWFsbENoaWxkcmVuID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHRoaXMuX3NtYWxsQ2hpbGRyZW4gPSB4OwotCi0gICAgICAgIGlmICh0aGlzLl9zbWFsbENoaWxk
cmVuKQotICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5hZGRTdHlsZUNsYXNzKCJz
bWFsbCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2Rl
LnJlbW92ZVN0eWxlQ2xhc3MoInNtYWxsIik7Ci0gICAgfSwKLQotICAgIG9uYXR0YWNoOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkU3R5bGVDbGFzcygi
c2lkZWJhci10cmVlLXNlY3Rpb24iKTsKLSAgICB9LAotCi0gICAgb25yZXZlYWw6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmxpc3RJdGVtRWxlbWVudCkKLSAgICAgICAgICAg
IHRoaXMubGlzdEl0ZW1FbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOwotICAg
IH0sCi0KLSAgICBfX3Byb3RvX186IFRyZWVFbGVtZW50LnByb3RvdHlwZQotfQotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1RyZWVFbGVtZW50fQotICogQHBhcmFtIHtzdHJp
bmc9fSBzdWJ0aXRsZQotICogQHBhcmFtIHtPYmplY3Q9fSByZXByZXNlbnRlZE9iamVjdAotICog
QHBhcmFtIHtib29sZWFuPX0gaGFzQ2hpbGRyZW4KLSAqLwotV2ViSW5zcGVjdG9yLlNpZGViYXJU
cmVlRWxlbWVudCA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgdGl0bGUsIHN1YnRpdGxlLCByZXByZXNl
bnRlZE9iamVjdCwgaGFzQ2hpbGRyZW4pCi17Ci0gICAgVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAi
IiwgcmVwcmVzZW50ZWRPYmplY3QsIGhhc0NoaWxkcmVuKTsKLQotICAgIGlmIChoYXNDaGlsZHJl
bikgewotICAgICAgICB0aGlzLmRpc2Nsb3N1cmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJidXR0b24iKTsKLSAgICAgICAgdGhpcy5kaXNjbG9zdXJlQnV0dG9uLmNsYXNzTmFtZSA9
ICJkaXNjbG9zdXJlLWJ1dHRvbiI7Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzLmljb25FbGVtZW50
KSB7Ci0gICAgICAgIHRoaXMuaWNvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJp
bWciKTsKLSAgICAgICAgdGhpcy5pY29uRWxlbWVudC5jbGFzc05hbWUgPSAiaWNvbiI7Ci0gICAg
fQotCi0gICAgdGhpcy5zdGF0dXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgdGhpcy5zdGF0dXNFbGVtZW50LmNsYXNzTmFtZSA9ICJzdGF0dXMiOwotCi0gICAg
dGhpcy50aXRsZXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
dGhpcy50aXRsZXNFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZXMiOwotCi0gICAgdGhpcy50aXRs
ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgdGhpcy50aXRs
ZUVsZW1lbnQuY2xhc3NOYW1lID0gInRpdGxlIjsKLSAgICB0aGlzLnRpdGxlc0VsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy50aXRsZUVsZW1lbnQpOwotCi0gICAgdGhpcy5zdWJ0aXRsZUVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgdGhpcy5zdWJ0aXRsZUVsZW1l
bnQuY2xhc3NOYW1lID0gInN1YnRpdGxlIjsKLSAgICB0aGlzLnRpdGxlc0VsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5zdWJ0aXRsZUVsZW1lbnQpOwotCi0gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFz
c05hbWU7Ci0gICAgdGhpcy5tYWluVGl0bGUgPSB0aXRsZTsKLSAgICB0aGlzLnN1YnRpdGxlID0g
c3VidGl0bGU7Ci19Ci0KLVdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBl
ID0gewotICAgIGdldCBzbWFsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc21hbGw7
Ci0gICAgfSwKLQotICAgIHNldCBzbWFsbCh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fc21hbGwg
PSB4OwotCi0gICAgICAgIGlmICh0aGlzLl9saXN0SXRlbU5vZGUpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLl9zbWFsbCkKLSAgICAgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkU3R5
bGVDbGFzcygic21hbGwiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlz
Ll9saXN0SXRlbU5vZGUucmVtb3ZlU3R5bGVDbGFzcygic21hbGwiKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBnZXQgbWFpblRpdGxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9t
YWluVGl0bGU7Ci0gICAgfSwKLQotICAgIHNldCBtYWluVGl0bGUoeCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX21haW5UaXRsZSA9IHg7Ci0gICAgICAgIHRoaXMucmVmcmVzaFRpdGxlcygpOwotICAg
IH0sCi0KLSAgICBnZXQgc3VidGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N1
YnRpdGxlOwotICAgIH0sCi0KLSAgICBzZXQgc3VidGl0bGUoeCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3N1YnRpdGxlID0geDsKLSAgICAgICAgdGhpcy5yZWZyZXNoVGl0bGVzKCk7Ci0gICAgfSwK
LQotICAgIGdldCBidWJibGVUZXh0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9idWJi
bGVUZXh0OwotICAgIH0sCi0KLSAgICBzZXQgYnViYmxlVGV4dCh4KQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLmJ1YmJsZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMuYnViYmxlRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgdGhpcy5idWJi
bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJidWJibGUiOwotICAgICAgICAgICAgdGhpcy5zdGF0dXNF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuYnViYmxlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLl9idWJibGVUZXh0ID0geDsKLSAgICAgICAgdGhpcy5idWJibGVFbGVtZW50LnRl
eHRDb250ZW50ID0geDsKLSAgICB9LAotCi0gICAgc2V0IHdhaXQoeCkKLSAgICB7Ci0gICAgICAg
IGlmICh4KQotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZFN0eWxlQ2xhc3MoIndh
aXQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLnJlbW92
ZVN0eWxlQ2xhc3MoIndhaXQiKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaFRpdGxlczogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdmFyIG1haW5UaXRsZSA9IHRoaXMubWFpblRpdGxlOwotICAg
ICAgICBpZiAodGhpcy50aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgIT09IG1haW5UaXRsZSkKLSAg
ICAgICAgICAgIHRoaXMudGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gbWFpblRpdGxlOwotCi0g
ICAgICAgIHZhciBzdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGU7Ci0gICAgICAgIGlmIChzdWJ0aXRs
ZSkgewotICAgICAgICAgICAgaWYgKHRoaXMuc3VidGl0bGVFbGVtZW50LnRleHRDb250ZW50ICE9
PSBzdWJ0aXRsZSkKLSAgICAgICAgICAgICAgICB0aGlzLnN1YnRpdGxlRWxlbWVudC50ZXh0Q29u
dGVudCA9IHN1YnRpdGxlOwotICAgICAgICAgICAgdGhpcy50aXRsZXNFbGVtZW50LnJlbW92ZVN0
eWxlQ2xhc3MoIm5vLXN1YnRpdGxlIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0
aGlzLnN1YnRpdGxlRWxlbWVudC50ZXh0Q29udGVudCA9ICIiOwotICAgICAgICAgICAgdGhpcy50
aXRsZXNFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5vLXN1YnRpdGxlIik7Ci0gICAgICAgIH0KLSAg
ICB9LAotCi0gICAgaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZTogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0ID09PSB0aGlzLmRpc2Nsb3N1
cmVCdXR0b247Ci0gICAgfSwKLQotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkU3R5bGVDbGFzcygic2lkZWJhci10cmVlLWl0ZW0i
KTsKLQotICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUpCi0gICAgICAgICAgICB0aGlzLl9saXN0
SXRlbU5vZGUuYWRkU3R5bGVDbGFzcyh0aGlzLmNsYXNzTmFtZSk7Ci0KLSAgICAgICAgaWYgKHRo
aXMuc21hbGwpCi0gICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkU3R5bGVDbGFzcygi
c21hbGwiKTsKLQotICAgICAgICBpZiAodGhpcy5oYXNDaGlsZHJlbiAmJiB0aGlzLmRpc2Nsb3N1
cmVCdXR0b24pCi0gICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYXBwZW5kQ2hpbGQodGhp
cy5kaXNjbG9zdXJlQnV0dG9uKTsKLQotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYXBwZW5k
Q2hpbGQodGhpcy5pY29uRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5hcHBl
bmRDaGlsZCh0aGlzLnN0YXR1c0VsZW1lbnQpOwotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUu
YXBwZW5kQ2hpbGQodGhpcy50aXRsZXNFbGVtZW50KTsKLSAgICB9LAotCi0gICAgb25yZXZlYWw6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9saXN0SXRlbU5vZGUpCi0gICAg
ICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7
Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogVHJlZUVsZW1lbnQucHJvdG90eXBlCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJWaWV3Lmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TaWRlYmFyVmlldy5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIwNmJmNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJWaWV3LmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KLSAqIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU3BsaXRWaWV3fQotICogQHBhcmFtIHtzdHJpbmc9
fSBzaWRlYmFyUG9zaXRpb24KLSAqIEBwYXJhbSB7c3RyaW5nPX0gc2lkZWJhcldpZHRoU2V0dGlu
Z05hbWUKLSAqIEBwYXJhbSB7bnVtYmVyPX0gZGVmYXVsdFNpZGViYXJXaWR0aAotICogQHBhcmFt
IHtudW1iZXI9fSBkZWZhdWx0U2lkZWJhckhlaWdodAotICovCi1XZWJJbnNwZWN0b3IuU2lkZWJh
clZpZXcgPSBmdW5jdGlvbihzaWRlYmFyUG9zaXRpb24sIHNpZGViYXJXaWR0aFNldHRpbmdOYW1l
LCBkZWZhdWx0U2lkZWJhcldpZHRoLCBkZWZhdWx0U2lkZWJhckhlaWdodCkKLXsKLSAgICBXZWJJ
bnNwZWN0b3IuU3BsaXRWaWV3LmNhbGwodGhpcywgdHJ1ZSwgc2lkZWJhcldpZHRoU2V0dGluZ05h
bWUsIGRlZmF1bHRTaWRlYmFyV2lkdGgsIGRlZmF1bHRTaWRlYmFySGVpZ2h0KTsKLQotICAgIHRo
aXMuX21pbmltdW1TaWRlYmFyV2lkdGggPSBQcmVmZXJlbmNlcy5taW5TaWRlYmFyV2lkdGg7Ci0g
ICAgdGhpcy5fbWluaW11bU1haW5XaWR0aFBlcmNlbnQgPSA1MDsKLQotICAgIHRoaXMuX21pbmlt
dW1TaWRlYmFySGVpZ2h0ID0gUHJlZmVyZW5jZXMubWluU2lkZWJhckhlaWdodDsKLSAgICB0aGlz
Ll9taW5pbXVtTWFpbkhlaWdodFBlcmNlbnQgPSA1MDsKLQotICAgIHRoaXMuX3NpZGViYXJQb3Np
dGlvbiA9IHNpZGViYXJQb3NpdGlvbiB8fCBXZWJJbnNwZWN0b3IuU2lkZWJhclZpZXcuU2lkZWJh
clBvc2l0aW9uLlN0YXJ0OwotICAgIHRoaXMuc2V0U2Vjb25kSXNTaWRlYmFyKHRoaXMuX3NpZGVi
YXJQb3NpdGlvbiA9PT0gV2ViSW5zcGVjdG9yLlNpZGViYXJWaWV3LlNpZGViYXJQb3NpdGlvbi5F
bmQpOwotfQotCi1XZWJJbnNwZWN0b3IuU2lkZWJhclZpZXcuRXZlbnRUeXBlcyA9IHsKLSAgICBS
ZXNpemVkOiAiUmVzaXplZCIKLX0KLQotLyoqCi0gKiBAZW51bSB7c3RyaW5nfQotICovCi1XZWJJ
bnNwZWN0b3IuU2lkZWJhclZpZXcuU2lkZWJhclBvc2l0aW9uID0gewotICAgIFN0YXJ0OiAiU3Rh
cnQiLAotICAgIEVuZDogIkVuZCIKLX0KLQotV2ViSW5zcGVjdG9yLlNpZGViYXJWaWV3LnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGgKLSAgICAgKi8K
LSAgICBzZXRNaW5pbXVtU2lkZWJhcldpZHRoOiBmdW5jdGlvbih3aWR0aCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX21pbmltdW1TaWRlYmFyV2lkdGggPSB3aWR0aDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodAotICAgICAqLwotICAgIHNldE1pbmltdW1T
aWRlYmFySGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQpCi0gICAgewotICAgICAgICB0aGlzLl9taW5p
bXVtU2lkZWJhckhlaWdodCA9IGhlaWdodDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IHdpZHRoUGVyY2VudAotICAgICAqLwotICAgIHNldE1pbmltdW1NYWluV2lk
dGhQZXJjZW50OiBmdW5jdGlvbih3aWR0aFBlcmNlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9t
aW5pbXVtTWFpbldpZHRoUGVyY2VudCA9IHdpZHRoUGVyY2VudDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFBlcmNlbnQKLSAgICAgKi8KLSAgICBzZXRN
aW5pbXVtTWFpbkhlaWdodFBlcmNlbnQ6IGZ1bmN0aW9uKGhlaWdodFBlcmNlbnQpCi0gICAgewot
ICAgICAgICB0aGlzLl9taW5pbXVtTWFpbkhlaWdodFBlcmNlbnQgPSBoZWlnaHRQZXJjZW50Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGgKLSAgICAgKi8K
LSAgICBzZXRTaWRlYmFyV2lkdGg6IGZ1bmN0aW9uKHdpZHRoKQotICAgIHsKLSAgICAgICAgdGhp
cy5zZXRTaWRlYmFyU2l6ZSh3aWR0aCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBzaWRlYmFyV2lkdGg6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLnNpZGViYXJTaXplKCk7Ci0gICAgfSwKLQotICAgIG9uUmVz
aXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuU3BsaXRWaWV3LnBy
b3RvdHlwZS5vblJlc2l6ZS5jYWxsKHRoaXMpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU2lkZWJhclZpZXcuRXZlbnRUeXBlcy5SZXNpemVkLCB0
aGlzLnNpZGViYXJXaWR0aCgpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IHNpemUKLSAgICAgKi8KLSAgICBhcHBseUNvbnN0cmFpbnRzOiBmdW5jdGlvbihzaXpl
KQotICAgIHsKLSAgICAgICAgdmFyIG1pblNpZGViYXJTaXplID0gdGhpcy5pc1ZlcnRpY2FsKCkg
PyB0aGlzLl9taW5pbXVtU2lkZWJhcldpZHRoIDogdGhpcy5fbWluaW11bVNpZGViYXJIZWlnaHQ7
Ci0gICAgICAgIHZhciBtaW5NYWluU2l6ZVBlcmNlbnQgPSB0aGlzLmlzVmVydGljYWwoKSA/IHRo
aXMuX21pbmltdW1NYWluV2lkdGhQZXJjZW50IDogdGhpcy5fbWluaW11bU1haW5IZWlnaHRQZXJj
ZW50OwotICAgICAgICByZXR1cm4gTnVtYmVyLmNvbnN0cmFpbihzaXplLCBtaW5TaWRlYmFyU2l6
ZSwgdGhpcy50b3RhbFNpemUoKSAqICgxMDAgLSBtaW5NYWluU2l6ZVBlcmNlbnQpIC8gMTAwKTsK
LSAgICB9LAotCi0gICAgaGlkZU1haW5FbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5pc1NpZGViYXJTZWNvbmQoKSkKLSAgICAgICAgICAgIHRoaXMuc2hvd09ubHlT
ZWNvbmQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5zaG93T25seUZpcnN0KCk7
Ci0gICAgfSwKLQotICAgIHNob3dNYWluRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdGhpcy5zaG93Qm90aCgpOwotICAgIH0sCi0KLSAgICBoaWRlU2lkZWJhckVsZW1lbnQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmlzU2lkZWJhclNlY29uZCgpKQotICAg
ICAgICAgICAgdGhpcy5zaG93T25seUZpcnN0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHRoaXMuc2hvd09ubHlTZWNvbmQoKTsKLSAgICB9LAotCi0gICAgc2hvd1NpZGViYXJFbGVtZW50
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnNob3dCb3RoKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxFbGVtZW50Pn0KLSAgICAgKi8KLSAgICBl
bGVtZW50c1RvUmVzdG9yZVNjcm9sbFBvc2l0aW9uc0ZvcjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFsgdGhpcy5tYWluRWxlbWVudCwgdGhpcy5zaWRlYmFyRWxlbWVudCBdOwot
ICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TcGxpdFZpZXcucHJvdG90eXBl
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NpbXBs
ZVdvcmtzcGFjZVByb3ZpZGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TaW1wbGVXb3Jrc3BhY2VQcm92aWRlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNGU1NDk5MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NpbXBsZVdvcmtzcGFjZVByb3ZpZGVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Db250
ZW50UHJvdmlkZXJCYXNlZFByb2plY3REZWxlZ2F0ZX0KLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1l
Ci0gKiBAcGFyYW0ge3N0cmluZ30gdHlwZQotICovCi1XZWJJbnNwZWN0b3IuU2ltcGxlUHJvamVj
dERlbGVnYXRlID0gZnVuY3Rpb24obmFtZSwgdHlwZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuQ29u
dGVudFByb3ZpZGVyQmFzZWRQcm9qZWN0RGVsZWdhdGUuY2FsbCh0aGlzLCB0eXBlKTsKLSAgICB0
aGlzLl9uYW1lID0gbmFtZTsKLSAgICB0aGlzLl9sYXN0VW5pcXVlU3VmZml4ID0gMDsKLX0KLQot
V2ViSW5zcGVjdG9yLlNpbXBsZVByb2plY3REZWxlZ2F0ZS5wcm9qZWN0SWQgPSBmdW5jdGlvbihu
YW1lLCB0eXBlKQotewotICAgIHZhciB0eXBlUHJlZml4ID0gdHlwZSAhPT0gV2ViSW5zcGVjdG9y
LnByb2plY3RUeXBlcy5OZXR3b3JrID8gKHR5cGUgKyAiOiIpIDogIiI7Ci0gICAgcmV0dXJuIHR5
cGVQcmVmaXggKyBuYW1lOwotfQotCi1XZWJJbnNwZWN0b3IuU2ltcGxlUHJvamVjdERlbGVnYXRl
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgaWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
U2ltcGxlUHJvamVjdERlbGVnYXRlLnByb2plY3RJZCh0aGlzLl9uYW1lLCB0aGlzLnR5cGUoKSk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAg
ICBkaXNwbGF5TmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlz
Ll9kaXNwbGF5TmFtZSAhPT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZGlzcGxheU5hbWU7Ci0gICAgICAgIGlmICghdGhpcy5fbmFtZSkgewotICAgICAgICAgICAgdGhp
cy5fZGlzcGxheU5hbWUgPSB0aGlzLnR5cGUoKSAhPT0gV2ViSW5zcGVjdG9yLnByb2plY3RUeXBl
cy5TbmlwcGV0cyA/IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKG5vIGRvbWFpbikiKSA6ICIiOwot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlOYW1lOwotICAgICAgICB9Ci0gICAgICAg
IHZhciBwYXJzZWRVUkwgPSBuZXcgV2ViSW5zcGVjdG9yLlBhcnNlZFVSTCh0aGlzLl9uYW1lKTsK
LSAgICAgICAgaWYgKHBhcnNlZFVSTC5pc1ZhbGlkKSB7Ci0gICAgICAgICAgICB0aGlzLl9kaXNw
bGF5TmFtZSA9IHBhcnNlZFVSTC5ob3N0ICsgKHBhcnNlZFVSTC5wb3J0ID8gKCI6IiArIHBhcnNl
ZFVSTC5wb3J0KSA6ICIiKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5fZGlzcGxheU5hbWUpCi0g
ICAgICAgICAgICAgICAgdGhpcy5fZGlzcGxheU5hbWUgPSB0aGlzLl9uYW1lOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlOYW1lID0gdGhpcy5fbmFt
ZTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlOYW1lOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IHVybAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlcn0gY29u
dGVudFByb3ZpZGVyCi0gICAgICogQHBhcmFtIHtib29sZWFufSBpc0VkaXRhYmxlCi0gICAgICog
QHBhcmFtIHtib29sZWFuPX0gaXNDb250ZW50U2NyaXB0Ci0gICAgICogQHJldHVybiB7QXJyYXku
PHN0cmluZz59Ci0gICAgICovCi0gICAgYWRkRmlsZTogZnVuY3Rpb24ocGF0aCwgZm9yY2VVbmlx
dWVQYXRoLCB1cmwsIGNvbnRlbnRQcm92aWRlciwgaXNFZGl0YWJsZSwgaXNDb250ZW50U2NyaXB0
KQotICAgIHsKLSAgICAgICAgaWYgKGZvcmNlVW5pcXVlUGF0aCkKLSAgICAgICAgICAgIHRoaXMu
X2Vuc3VyZVVuaXF1ZVBhdGgocGF0aCk7Ci0gICAgICAgIHJldHVybiB0aGlzLmFkZENvbnRlbnRQ
cm92aWRlcihwYXRoLCB1cmwsIGNvbnRlbnRQcm92aWRlciwgaXNFZGl0YWJsZSwgaXNDb250ZW50
U2NyaXB0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5n
Pn0gcGF0aAotICAgICAqLwotICAgIF9lbnN1cmVVbmlxdWVQYXRoOiBmdW5jdGlvbihwYXRoKQot
ICAgICB7Ci0gICAgICAgIHZhciB1bmlxdWVQYXRoID0gcGF0aC5qb2luKCIvIik7Ci0gICAgICAg
IHZhciBzdWZmaXggPSAiIjsKLSAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlcnMgPSB0aGlzLmNv
bnRlbnRQcm92aWRlcnMoKTsKLSAgICAgICAgd2hpbGUgKGNvbnRlbnRQcm92aWRlcnNbdW5pcXVl
UGF0aF0pIHsKLSAgICAgICAgICAgIHN1ZmZpeCA9ICIgKCIgKyAoKyt0aGlzLl9sYXN0VW5pcXVl
U3VmZml4KSArICIpIjsKLSAgICAgICAgICAgIHVuaXF1ZVBhdGggPSBwYXRoICsgc3VmZml4Owot
ICAgICAgICB9Ci0gICAgICAgIHBhdGhbcGF0aC5sZW5ndGggLSAxXSArPSBzdWZmaXg7Ci0gICAg
fSwKLSAgICAKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJCYXNl
ZFByb2plY3REZWxlZ2F0ZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
V29ya3NwYWNlfSB3b3Jrc3BhY2UKLSAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlCi0gKi8KLVdlYklu
c3BlY3Rvci5TaW1wbGVXb3Jrc3BhY2VQcm92aWRlciA9IGZ1bmN0aW9uKHdvcmtzcGFjZSwgdHlw
ZSkKLXsKLSAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7Ci0gICAgdGhpcy5fdHlwZSA9
IHR5cGU7Ci0gICAgdGhpcy5fc2ltcGxlUHJvamVjdERlbGVnYXRlcyA9IHt9OwotfQotCi0vKioK
LSAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHNwbGl0dGVkVVJMCi0gKiBAcmV0dXJuIHtBcnJh
eS48c3RyaW5nPn0KLSAqLwotV2ViSW5zcGVjdG9yLlNpbXBsZVdvcmtzcGFjZVByb3ZpZGVyLnBh
dGhGb3JTcGxpdHRlZFVSTCA9IGZ1bmN0aW9uKHNwbGl0dGVkVVJMKQotewotICAgIHZhciByZXN1
bHQgPSBzcGxpdHRlZFVSTC5zbGljZSgpOwotICAgIHJlc3VsdC5zaGlmdCgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5TaW1wbGVXb3Jrc3BhY2VQcm92aWRlci5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3ROYW1lCi0g
ICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2plY3REZWxlZ2F0ZX0KLSAgICAgKi8KLSAg
ICBfcHJvamVjdERlbGVnYXRlOiBmdW5jdGlvbihwcm9qZWN0TmFtZSkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9zaW1wbGVQcm9qZWN0RGVsZWdhdGVzW3Byb2plY3ROYW1lXSkKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zaW1wbGVQcm9qZWN0RGVsZWdhdGVzW3Byb2plY3ROYW1lXTsKLSAg
ICAgICAgdmFyIHNpbXBsZVByb2plY3REZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0b3IuU2ltcGxl
UHJvamVjdERlbGVnYXRlKHByb2plY3ROYW1lLCB0aGlzLl90eXBlKTsKLSAgICAgICAgdGhpcy5f
c2ltcGxlUHJvamVjdERlbGVnYXRlc1twcm9qZWN0TmFtZV0gPSBzaW1wbGVQcm9qZWN0RGVsZWdh
dGU7Ci0gICAgICAgIHRoaXMuX3dvcmtzcGFjZS5hZGRQcm9qZWN0KHNpbXBsZVByb2plY3REZWxl
Z2F0ZSk7Ci0gICAgICAgIHJldHVybiBzaW1wbGVQcm9qZWN0RGVsZWdhdGU7Ci0gICAgfSwKLSAK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSBjb250ZW50UHJvdmlkZXIKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGlzRWRpdGFibGUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0NvbnRlbnRT
Y3JpcHQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfQotICAgICAq
LwotICAgIGFkZEZpbGVGb3JVUkw6IGZ1bmN0aW9uKHVybCwgY29udGVudFByb3ZpZGVyLCBpc0Vk
aXRhYmxlLCBpc0NvbnRlbnRTY3JpcHQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faW5u
ZXJBZGRGaWxlRm9yVVJMKHVybCwgY29udGVudFByb3ZpZGVyLCBpc0VkaXRhYmxlLCBmYWxzZSwg
aXNDb250ZW50U2NyaXB0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IHVybAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlcn0gY29u
dGVudFByb3ZpZGVyCi0gICAgICogQHBhcmFtIHtib29sZWFufSBpc0VkaXRhYmxlCi0gICAgICog
QHBhcmFtIHtib29sZWFuPX0gaXNDb250ZW50U2NyaXB0Ci0gICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlVJU291cmNlQ29kZX0KLSAgICAgKi8KLSAgICBhZGRVbmlxdWVGaWxlRm9yVVJMOiBm
dW5jdGlvbih1cmwsIGNvbnRlbnRQcm92aWRlciwgaXNFZGl0YWJsZSwgaXNDb250ZW50U2NyaXB0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyQWRkRmlsZUZvclVSTCh1cmwsIGNv
bnRlbnRQcm92aWRlciwgaXNFZGl0YWJsZSwgdHJ1ZSwgaXNDb250ZW50U2NyaXB0KTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlcn0gY29udGVudFByb3ZpZGVyCi0gICAgICogQHBh
cmFtIHtib29sZWFufSBpc0VkaXRhYmxlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZVVu
aXF1ZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzQ29udGVudFNjcmlwdAotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAgICovCi0gICAgX2lubmVyQWRk
RmlsZUZvclVSTDogZnVuY3Rpb24odXJsLCBjb250ZW50UHJvdmlkZXIsIGlzRWRpdGFibGUsIGZv
cmNlVW5pcXVlLCBpc0NvbnRlbnRTY3JpcHQpCi0gICAgewotICAgICAgICB2YXIgc3BsaXR0ZWRV
UkwgPSBXZWJJbnNwZWN0b3IuUGFyc2VkVVJMLnNwbGl0VVJMKHVybCk7Ci0gICAgICAgIHZhciBw
cm9qZWN0TmFtZSA9IHNwbGl0dGVkVVJMWzBdOwotICAgICAgICB2YXIgcGF0aCA9IFdlYkluc3Bl
Y3Rvci5TaW1wbGVXb3Jrc3BhY2VQcm92aWRlci5wYXRoRm9yU3BsaXR0ZWRVUkwoc3BsaXR0ZWRV
UkwpOwotICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJBZGRGaWxlKHByb2plY3ROYW1lLCBwYXRo
LCB1cmwsIGNvbnRlbnRQcm92aWRlciwgaXNFZGl0YWJsZSwgZm9yY2VVbmlxdWUsIGlzQ29udGVu
dFNjcmlwdCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9q
ZWN0TmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSBjb250ZW50UHJvdmlkZXIKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGlzRWRpdGFibGUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0NvbnRlbnRT
Y3JpcHQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfQotICAgICAq
LwotICAgIGFkZEZpbGVCeU5hbWU6IGZ1bmN0aW9uKHByb2plY3ROYW1lLCBuYW1lLCBjb250ZW50
UHJvdmlkZXIsIGlzRWRpdGFibGUsIGlzQ29udGVudFNjcmlwdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9pbm5lckFkZEZpbGUoIiIsIFtuYW1lXSwgbmFtZSwgY29udGVudFByb3ZpZGVy
LCBpc0VkaXRhYmxlLCBmYWxzZSwgaXNDb250ZW50U2NyaXB0KTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3ROYW1lCi0gICAgICogQHBhcmFtIHtBcnJh
eS48c3RyaW5nPn0gcGF0aAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92
aWRlcn0gY29udGVudFByb3ZpZGVyCi0gICAgICogQHBhcmFtIHtib29sZWFufSBpc0VkaXRhYmxl
Ci0gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZVVuaXF1ZQotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbj19IGlzQ29udGVudFNjcmlwdAotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGV9Ci0gICAgICovCi0gICAgX2lubmVyQWRkRmlsZTogZnVuY3Rpb24ocHJvamVjdE5h
bWUsIHBhdGgsIHVybCwgY29udGVudFByb3ZpZGVyLCBpc0VkaXRhYmxlLCBmb3JjZVVuaXF1ZSwg
aXNDb250ZW50U2NyaXB0KQotICAgIHsKLSAgICAgICAgdmFyIHByb2plY3REZWxlZ2F0ZSA9IHRo
aXMuX3Byb2plY3REZWxlZ2F0ZShwcm9qZWN0TmFtZSk7Ci0gICAgICAgIHBhdGggPSBwcm9qZWN0
RGVsZWdhdGUuYWRkRmlsZShwYXRoLCBmb3JjZVVuaXF1ZSwgdXJsLCBjb250ZW50UHJvdmlkZXIs
IGlzRWRpdGFibGUsIGlzQ29udGVudFNjcmlwdCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl93b3Jr
c3BhY2UudWlTb3VyY2VDb2RlKHByb2plY3REZWxlZ2F0ZS5pZCgpLCBwYXRoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3ROYW1lCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKi8KLSAgICByZW1vdmVGaWxlQnlOYW1lOiBmdW5jdGlv
bihwcm9qZWN0TmFtZSwgbmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBwcm9qZWN0RGVsZWdhdGUg
PSB0aGlzLl9wcm9qZWN0RGVsZWdhdGUocHJvamVjdE5hbWUpOwotICAgICAgICBwcm9qZWN0RGVs
ZWdhdGUucmVtb3ZlRmlsZShbbmFtZV0pOwotICAgIH0sCi0KLSAgICByZXNldDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgcHJvamVjdE5hbWUgaW4gdGhpcy5fc2ltcGxlUHJv
amVjdERlbGVnYXRlcykKLSAgICAgICAgICAgIHRoaXMuX3NpbXBsZVByb2plY3REZWxlZ2F0ZXNb
cHJvamVjdE5hbWVdLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX3NpbXBsZVByb2plY3REZWxlZ2F0
ZXMgPSB7fTsKLSAgICB9LAotICAgIAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVj
dC5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU25pcHBldEphdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU25pcHBldEphdmFTY3JpcHRTb3VyY2VGcmFtZS5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhY2E0Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRKYXZhU2NyaXB0U291cmNlRnJhbWUuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBl
eHRlbmRzIHtXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lfQotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsfSBzY3JpcHRzUGFuZWwKLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gKi8KLVdlYkluc3BlY3Rvci5Tbmlw
cGV0SmF2YVNjcmlwdFNvdXJjZUZyYW1lID0gZnVuY3Rpb24oc2NyaXB0c1BhbmVsLCB1aVNvdXJj
ZUNvZGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5jYWxsKHRo
aXMsIHNjcmlwdHNQYW5lbCwgdWlTb3VyY2VDb2RlKTsKLSAgICAKLSAgICB0aGlzLl91aVNvdXJj
ZUNvZGUgPSB1aVNvdXJjZUNvZGU7Ci0gICAgdGhpcy5fcnVuQnV0dG9uID0gbmV3IFdlYkluc3Bl
Y3Rvci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSdW4iKSwgImV2YWx1
YXRlLXNuaXBwZXQtc3RhdHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5fcnVuQnV0dG9uLmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcnVuQnV0dG9uQ2xpY2tlZCwgdGhpcyk7Ci0gICAg
dGhpcy50ZXh0RWRpdG9yLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMu
X29uS2V5RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0aGlzLl9zbmlwcGV0c1Nob3J0Y3V0
cyA9IHt9OwotICAgIHZhciBydW5TbmlwcGV0U2hvcnRjdXREZXNjcmlwdG9yID0gV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0b3IoV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQuS2V5cy5FbnRlciwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXJzLkN0cmxPck1ldGEpCi0gICAgdGhpcy5fc25pcHBldHNTaG9ydGN1dHNbcnVuU25pcHBldFNo
b3J0Y3V0RGVzY3JpcHRvci5rZXldID0gdGhpcy5fcnVuU25pcHBldC5iaW5kKHRoaXMpOwotfQot
Ci1XZWJJbnNwZWN0b3IuU25pcHBldEphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQotICAgICAqLwotICAg
IHN0YXR1c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMu
X3J1bkJ1dHRvbi5lbGVtZW50XS5jb25jYXQoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VG
cmFtZS5wcm90b3R5cGUuc3RhdHVzQmFySXRlbXMuY2FsbCh0aGlzKSk7Ci0gICAgfSwKLQotICAg
IF9ydW5CdXR0b25DbGlja2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9ydW5T
bmlwcGV0KCk7Ci0gICAgfSwKLQotICAgIF9ydW5TbmlwcGV0OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2NyaXB0U25pcHBldE1vZGVsLmV2YWx1YXRlU2NyaXB0U25p
cHBldCh0aGlzLl91aVNvdXJjZUNvZGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uS2V5RG93bjogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgc2hvcnRjdXRLZXkgPSBXZWJJbnNwZWN0b3Iu
S2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5RnJvbUV2ZW50KGV2ZW50KTsKLSAgICAgICAgdmFyIGhh
bmRsZXIgPSB0aGlzLl9zbmlwcGV0c1Nob3J0Y3V0c1tzaG9ydGN1dEtleV07Ci0gICAgICAgIGlm
IChoYW5kbGVyKSB7Ci0gICAgICAgICAgICBoYW5kbGVyKGV2ZW50KTsKLSAgICAgICAgICAgIGV2
ZW50LmhhbmRsZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzog
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldFN0b3JhZ2UuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRTdG9yYWdlLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmRjODczLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldFN0b3JhZ2UuanMKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9yLlNuaXBwZXRTdG9yYWdlID0g
ZnVuY3Rpb24oc2V0dGluZ1ByZWZpeCwgbmFtZVByZWZpeCkKLXsKLSAgICB0aGlzLl9zbmlwcGV0
cyA9IHt9OwotCi0gICAgdGhpcy5fbGFzdFNuaXBwZXRJZGVudGlmaWVyU2V0dGluZyA9IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKHNldHRpbmdQcmVmaXggKyAiU25pcHBldHNf
bGFzdElkZW50aWZpZXIiLCAwKTsKLSAgICB0aGlzLl9zbmlwcGV0c1NldHRpbmcgPSBXZWJJbnNw
ZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZyhzZXR0aW5nUHJlZml4ICsgIlNuaXBwZXRzIiwg
W10pOwotICAgIHRoaXMuX25hbWVQcmVmaXggPSBuYW1lUHJlZml4OwotCi0gICAgdGhpcy5fbG9h
ZFNldHRpbmdzKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TbmlwcGV0U3RvcmFnZS5wcm90b3R5cGUg
PSB7Ci0gICAgZ2V0IG5hbWVQcmVmaXgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25h
bWVQcmVmaXg7Ci0gICAgfSwKLQotICAgIF9zYXZlU2V0dGluZ3M6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciBzYXZlZFNuaXBwZXRzID0gW107Ci0gICAgICAgIGZvciAodmFyIGlkIGlu
IHRoaXMuX3NuaXBwZXRzKQotICAgICAgICAgICAgc2F2ZWRTbmlwcGV0cy5wdXNoKHRoaXMuX3Nu
aXBwZXRzW2lkXS5zZXJpYWxpemVUb09iamVjdCgpKTsKLSAgICAgICAgdGhpcy5fc25pcHBldHNT
ZXR0aW5nLnNldChzYXZlZFNuaXBwZXRzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJl
dHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5TbmlwcGV0Pn0KLSAgICAgKi8KLSAgICBzbmlwcGV0
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBm
b3IgKHZhciBpZCBpbiB0aGlzLl9zbmlwcGV0cykKLSAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRo
aXMuX3NuaXBwZXRzW2lkXSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5TbmlwcGV0fQotICAgICAqLwotICAgIHNuaXBwZXRGb3JJZDogZnVuY3Rpb24oaWQpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc25pcHBldHNbaWRdOwotICAgIH0sCi0KLSAgICBf
bG9hZFNldHRpbmdzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2F2ZWRTbmlwcGV0
cyA9IHRoaXMuX3NuaXBwZXRzU2V0dGluZy5nZXQoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzYXZlZFNuaXBwZXRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fc25pcHBl
dEFkZGVkKFdlYkluc3BlY3Rvci5TbmlwcGV0LmZyb21PYmplY3QodGhpcywgc2F2ZWRTbmlwcGV0
c1tpXSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5T
bmlwcGV0fSBzbmlwcGV0Ci0gICAgICovCi0gICAgZGVsZXRlU25pcHBldDogZnVuY3Rpb24oc25p
cHBldCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zbmlwcGV0c1tzbmlwcGV0LmlkXTsK
LSAgICAgICAgdGhpcy5fc2F2ZVNldHRpbmdzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge1dlYkluc3BlY3Rvci5TbmlwcGV0fQotICAgICAqLwotICAgIGNyZWF0ZVNuaXBw
ZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBuZXh0SWQgPSB0aGlzLl9sYXN0U25p
cHBldElkZW50aWZpZXJTZXR0aW5nLmdldCgpICsgMTsKLSAgICAgICAgdmFyIHNuaXBwZXRJZCA9
IFN0cmluZyhuZXh0SWQpOwotICAgICAgICB0aGlzLl9sYXN0U25pcHBldElkZW50aWZpZXJTZXR0
aW5nLnNldChuZXh0SWQpOwotICAgICAgICB2YXIgc25pcHBldCA9IG5ldyBXZWJJbnNwZWN0b3Iu
U25pcHBldCh0aGlzLCBzbmlwcGV0SWQpOwotICAgICAgICB0aGlzLl9zbmlwcGV0QWRkZWQoc25p
cHBldCk7Ci0gICAgICAgIHRoaXMuX3NhdmVTZXR0aW5ncygpOwotICAgICAgICByZXR1cm4gc25p
cHBldDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25p
cHBldH0gc25pcHBldAotICAgICAqLwotICAgIF9zbmlwcGV0QWRkZWQ6IGZ1bmN0aW9uKHNuaXBw
ZXQpCi0gICAgewotICAgICAgICB0aGlzLl9zbmlwcGV0c1tzbmlwcGV0LmlkXSA9IHNuaXBwZXQ7
Ci0gICAgfSwKLSAgICAKLSAgICByZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fbGFzdFNuaXBwZXRJZGVudGlmaWVyU2V0dGluZy5zZXQoMCk7Ci0gICAgICAgIHRoaXMuX3Nu
aXBwZXRzU2V0dGluZy5zZXQoW10pOwotICAgICAgICB0aGlzLl9zbmlwcGV0cyA9IHt9OwotICAg
IH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0K
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNuaXBwZXRTdG9yYWdlfSBzdG9yYWdlCi0gKiBAcGFy
YW0ge3N0cmluZ30gaWQKLSAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZQotICogQHBhcmFtIHtzdHJp
bmc9fSBjb250ZW50Ci0gKi8KLVdlYkluc3BlY3Rvci5TbmlwcGV0ID0gZnVuY3Rpb24oc3RvcmFn
ZSwgaWQsIG5hbWUsIGNvbnRlbnQpCi17Ci0gICAgdGhpcy5fc3RvcmFnZSA9IHN0b3JhZ2U7Ci0g
ICAgdGhpcy5faWQgPSBpZDsKLSAgICB0aGlzLl9uYW1lID0gbmFtZSB8fCBzdG9yYWdlLm5hbWVQ
cmVmaXggKyBpZDsKLSAgICB0aGlzLl9jb250ZW50ID0gY29udGVudCB8fCAiIjsKLX0KLQotLyoq
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TbmlwcGV0U3RvcmFnZX0gc3RvcmFnZQotICogQHBh
cmFtIHtPYmplY3R9IHNlcmlhbGl6ZWRTbmlwcGV0Ci0gKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
U25pcHBldH0KLSAqLwotV2ViSW5zcGVjdG9yLlNuaXBwZXQuZnJvbU9iamVjdCA9IGZ1bmN0aW9u
KHN0b3JhZ2UsIHNlcmlhbGl6ZWRTbmlwcGV0KQotewotICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLlNuaXBwZXQoc3RvcmFnZSwgc2VyaWFsaXplZFNuaXBwZXQuaWQsIHNlcmlhbGl6ZWRTbmlw
cGV0Lm5hbWUsIHNlcmlhbGl6ZWRTbmlwcGV0LmNvbnRlbnQpOwotfQotCi1XZWJJbnNwZWN0b3Iu
U25pcHBldC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQot
ICAgICAqLwotICAgIGdldCBpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faWQ7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBn
ZXQgbmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTsKLSAgICB9LAotCi0g
ICAgc2V0IG5hbWUobmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9uYW1lID09PSBuYW1l
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAg
ICAgICB0aGlzLl9zdG9yYWdlLl9zYXZlU2V0dGluZ3MoKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGdldCBjb250ZW50KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50OwotICAgIH0sCi0KLSAgICBzZXQgY29udGVu
dChjb250ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQgPT09IGNvbnRlbnQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fY29udGVudCA9IGNvbnRlbnQ7
Ci0gICAgICAgIHRoaXMuX3N0b3JhZ2UuX3NhdmVTZXR0aW5ncygpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgc2VyaWFsaXplVG9PYmpl
Y3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZXJpYWxpemVkU25pcHBldCA9IHt9
OwotICAgICAgICBzZXJpYWxpemVkU25pcHBldC5pZCA9IHRoaXMuaWQ7Ci0gICAgICAgIHNlcmlh
bGl6ZWRTbmlwcGV0Lm5hbWUgPSB0aGlzLm5hbWU7Ci0gICAgICAgIHNlcmlhbGl6ZWRTbmlwcGV0
LmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemVkU25pcHBl
dDsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb2Z0
Q29udGV4dE1lbnUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvZnRD
b250ZXh0TWVudS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYyZWQxZS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvZnRDb250ZXh0
TWVudS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnU9fSBwYXJlbnRNZW51Ci0gKi8KLVdl
Ykluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUgPSBmdW5jdGlvbihpdGVtcywgcGFyZW50TWVudSkK
LXsKLSAgICB0aGlzLl9pdGVtcyA9IGl0ZW1zOwotICAgIHRoaXMuX3BhcmVudE1lbnUgPSBwYXJl
bnRNZW51OwotfQotCi1XZWJJbnNwZWN0b3IuU29mdENvbnRleHRNZW51LnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBhbGlnblRvQ3VycmVudFRhcmdldAot
ICAgICAqLwotICAgIHNob3c6IGZ1bmN0aW9uKGV2ZW50LCBhbGlnblRvQ3VycmVudFRhcmdldCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX3ggPSBldmVudC54OwotICAgICAgICB0aGlzLl95ID0gZXZl
bnQueTsKLSAgICAgICAgdGhpcy5fdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwotCi0gICAg
ICAgIC8vIEFic29sdXRlbHkgcG9zaXRpb24gbWVudSBmb3IgaWZyYW1lcy4KLSAgICAgICAgdmFy
IGFic29sdXRlWCA9IGV2ZW50LnBhZ2VYOwotICAgICAgICB2YXIgYWJzb2x1dGVZID0gZXZlbnQu
cGFnZVk7Ci0gICAgICAgIHZhciB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAg
ICB3aGlsZSAodGFyZ2V0RWxlbWVudCAmJiB3aW5kb3cgIT09IHRhcmdldEVsZW1lbnQub3duZXJE
b2N1bWVudC5kZWZhdWx0VmlldykgewotICAgICAgICAgICAgdmFyIGZyYW1lRWxlbWVudCA9IHRh
cmdldEVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5mcmFtZUVsZW1lbnQ7Ci0gICAg
ICAgICAgICBhYnNvbHV0ZVkgKz0gZnJhbWVFbGVtZW50LnRvdGFsT2Zmc2V0VG9wKCk7Ci0gICAg
ICAgICAgICBhYnNvbHV0ZVggKz0gZnJhbWVFbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCgpOwotICAg
ICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGZyYW1lRWxlbWVudDsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIENyZWF0ZSBjb250ZXh0IG1lbnUuCi0gICAgICAgIHZhciB0YXJnZXRSZWN0OwotICAg
ICAgICB0aGlzLl9jb250ZXh0TWVudUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgdGhpcy5fY29udGV4dE1lbnVFbGVtZW50LmNsYXNzTmFtZSA9ICJzb2Z0
LWNvbnRleHQtbWVudSI7Ci0gICAgICAgIHRoaXMuX2NvbnRleHRNZW51RWxlbWVudC50YWJJbmRl
eCA9IDA7Ci0gICAgICAgIGlmIChhbGlnblRvQ3VycmVudFRhcmdldCkgewotICAgICAgICAgICAg
dGFyZ2V0UmVjdCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
Ci0gICAgICAgICAgICAvLyBBbGlnbiB3aXRoIGJvdHRvbSBsZWZ0IG9mIGN1cnJlbnRUYXJnZXQg
YnkgZGVmYXVsdC4KLSAgICAgICAgICAgIGFic29sdXRlWCA9IHRhcmdldFJlY3QubGVmdDsKLSAg
ICAgICAgICAgIGFic29sdXRlWSA9IHRhcmdldFJlY3QuYm90dG9tOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMuX2NvbnRleHRNZW51RWxlbWVudC5zdHlsZS50b3AgPSBhYnNvbHV0ZVkgKyAicHgi
OwotICAgICAgICB0aGlzLl9jb250ZXh0TWVudUVsZW1lbnQuc3R5bGUubGVmdCA9IGFic29sdXRl
WCArICJweCI7Ci0KLSAgICAgICAgdGhpcy5fY29udGV4dE1lbnVFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNldXAiLCBjb25zdW1lRXZlbnQsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fY29u
dGV4dE1lbnVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9tZW51S2V5
RG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLl9pdGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2NvbnRleHRNZW51RWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVNZW51SXRlbSh0aGlzLl9pdGVtc1tpXSkpOwot
Ci0gICAgICAgIC8vIEluc3RhbGwgZ2xhc3MgcGFuZSBjYXB0dXJpbmcgZXZlbnRzLgotICAgICAg
ICBpZiAoIXRoaXMuX3BhcmVudE1lbnUpIHsKLSAgICAgICAgICAgIHRoaXMuX2dsYXNzUGFuZUVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIHRoaXMu
X2dsYXNzUGFuZUVsZW1lbnQuY2xhc3NOYW1lID0gInNvZnQtY29udGV4dC1tZW51LWdsYXNzLXBh
bmUiOwotICAgICAgICAgICAgdGhpcy5fZ2xhc3NQYW5lRWxlbWVudC50YWJJbmRleCA9IDA7Ci0g
ICAgICAgICAgICB0aGlzLl9nbGFzc1BhbmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
dXAiLCB0aGlzLl9nbGFzc1BhbmVNb3VzZVVwLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAg
ICAgIHRoaXMuX2dsYXNzUGFuZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGV4dE1lbnVF
bGVtZW50KTsKLSAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZ2xh
c3NQYW5lRWxlbWVudCk7Ci0gICAgICAgICAgICB0aGlzLl9mb2N1cygpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHRoaXMuX3BhcmVudE1lbnUuX3BhcmVudEdsYXNzUGFuZUVsZW1lbnQo
KS5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZXh0TWVudUVsZW1lbnQpOwotCi0gICAgICAgIC8vIFJl
LXBvc2l0aW9uIG1lbnUgaW4gY2FzZSBpdCBkb2VzIG5vdCBmaXQuCi0gICAgICAgIGlmIChkb2N1
bWVudC5ib2R5Lm9mZnNldFdpZHRoIDwgIHRoaXMuX2NvbnRleHRNZW51RWxlbWVudC5vZmZzZXRM
ZWZ0ICsgdGhpcy5fY29udGV4dE1lbnVFbGVtZW50Lm9mZnNldFdpZHRoKSB7Ci0gICAgICAgICAg
ICBpZiAoYWxpZ25Ub0N1cnJlbnRUYXJnZXQpCi0gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4
dE1lbnVFbGVtZW50LnN0eWxlLmxlZnQgPSBNYXRoLm1heCgwLCB0YXJnZXRSZWN0LnJpZ2h0IC0g
dGhpcy5fY29udGV4dE1lbnVFbGVtZW50Lm9mZnNldFdpZHRoKSArICJweCI7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVFbGVtZW50LnN0eWxlLmxl
ZnQgPSAoYWJzb2x1dGVYIC0gdGhpcy5fY29udGV4dE1lbnVFbGVtZW50Lm9mZnNldFdpZHRoKSAr
ICJweCI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0
IDwgdGhpcy5fY29udGV4dE1lbnVFbGVtZW50Lm9mZnNldFRvcCArIHRoaXMuX2NvbnRleHRNZW51
RWxlbWVudC5vZmZzZXRIZWlnaHQpIHsKLSAgICAgICAgICAgIGlmIChhbGlnblRvQ3VycmVudFRh
cmdldCkKLSAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0TWVudUVsZW1lbnQuc3R5bGUudG9w
ID0gTWF0aC5tYXgoMCwgdGFyZ2V0UmVjdC50b3AgLSB0aGlzLl9jb250ZXh0TWVudUVsZW1lbnQu
b2Zmc2V0SGVpZ2h0KSArICJweCI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
dGhpcy5fY29udGV4dE1lbnVFbGVtZW50LnN0eWxlLnRvcCA9IChkb2N1bWVudC5ib2R5Lm9mZnNl
dEhlaWdodCAtIHRoaXMuX2NvbnRleHRNZW51RWxlbWVudC5vZmZzZXRIZWlnaHQpICsgInB4IjsK
LSAgICAgICAgfQotCi0gICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0gICAgfSwKLQotICAg
IF9wYXJlbnRHbGFzc1BhbmVFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5fZ2xhc3NQYW5lRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9nbGFzc1Bh
bmVFbGVtZW50OwotICAgICAgICBpZiAodGhpcy5fcGFyZW50TWVudSkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9wYXJlbnRNZW51Ll9wYXJlbnRHbGFzc1BhbmVFbGVtZW50KCk7Ci0gICAgICAg
IHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICBfY3JlYXRlTWVudUl0ZW06IGZ1bmN0aW9uKGl0
ZW0pCi0gICAgewotICAgICAgICBpZiAoaXRlbS50eXBlID09PSAic2VwYXJhdG9yIikKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTZXBhcmF0b3IoKTsKLQotICAgICAgICBpZiAoaXRl
bS50eXBlID09PSAic3ViTWVudSIpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlU3Vi
TWVudShpdGVtKTsKLQotICAgICAgICB2YXIgbWVudUl0ZW1FbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIG1lbnVJdGVtRWxlbWVudC5jbGFzc05hbWUgPSAi
c29mdC1jb250ZXh0LW1lbnUtaXRlbSI7Ci0KLSAgICAgICAgdmFyIGNoZWNrTWFya0VsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGNoZWNrTWFya0VsZW1l
bnQudGV4dENvbnRlbnQgPSAiXHUyNzEzICI7IC8vIENoZWNrbWFyayBVbmljb2RlIHN5bWJvbAot
ICAgICAgICBjaGVja01hcmtFbGVtZW50LmNsYXNzTmFtZSA9ICJzb2Z0LWNvbnRleHQtbWVudS1p
dGVtLWNoZWNrbWFyayI7Ci0gICAgICAgIGlmICghaXRlbS5jaGVja2VkKQotICAgICAgICAgICAg
Y2hlY2tNYXJrRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gIjAiOwotCi0gICAgICAgIG1lbnVJdGVt
RWxlbWVudC5hcHBlbmRDaGlsZChjaGVja01hcmtFbGVtZW50KTsKLSAgICAgICAgbWVudUl0ZW1F
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGl0ZW0ubGFiZWwpKTsK
LQotICAgICAgICBtZW51SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwg
dGhpcy5fbWVudUl0ZW1Nb3VzZURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICBtZW51
SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuX21lbnVJdGVtTW91
c2VVcC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gTWFudWFsbHkgbWFuYWdlIGhv
dmVyIGhpZ2hsaWdodCBzaW5jZSA6aG92ZXIgZG9lcyBub3Qgd29yayBpbiBjYXNlIG9mIGNsaWNr
LWFuZC1ob2xkIG1lbnUgaW52b2NhdGlvbi4KLSAgICAgICAgbWVudUl0ZW1FbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIHRoaXMuX21lbnVJdGVtTW91c2VPdmVyLmJpbmQodGhp
cyksIGZhbHNlKTsKLSAgICAgICAgbWVudUl0ZW1FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlb3V0IiwgdGhpcy5fbWVudUl0ZW1Nb3VzZU91dC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAg
ICAgICAgbWVudUl0ZW1FbGVtZW50Ll9hY3Rpb25JZCA9IGl0ZW0uaWQ7Ci0gICAgICAgIHJldHVy
biBtZW51SXRlbUVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVTdWJNZW51OiBmdW5jdGlv
bihpdGVtKQotICAgIHsKLSAgICAgICAgdmFyIG1lbnVJdGVtRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBtZW51SXRlbUVsZW1lbnQuY2xhc3NOYW1lID0g
InNvZnQtY29udGV4dC1tZW51LWl0ZW0iOwotICAgICAgICBtZW51SXRlbUVsZW1lbnQuX3N1Ykl0
ZW1zID0gaXRlbS5zdWJJdGVtczsKLQotICAgICAgICAvLyBPY2N1cHkgdGhlIHNhbWUgc3BhY2Ug
b24gdGhlIGxlZnQgaW4gYWxsIGl0ZW1zLgotICAgICAgICB2YXIgY2hlY2tNYXJrRWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgY2hlY2tNYXJrRWxlbWVu
dC50ZXh0Q29udGVudCA9ICJcdTI3MTMgIjsgLy8gQ2hlY2ttYXJrIFVuaWNvZGUgc3ltYm9sCi0g
ICAgICAgIGNoZWNrTWFya0VsZW1lbnQuY2xhc3NOYW1lID0gInNvZnQtY29udGV4dC1tZW51LWl0
ZW0tY2hlY2ttYXJrIjsKLSAgICAgICAgY2hlY2tNYXJrRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0g
IjAiOwotICAgICAgICBtZW51SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hlY2tNYXJrRWxlbWVu
dCk7Ci0KLSAgICAgICAgdmFyIHN1Yk1lbnVBcnJvd0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHN1Yk1lbnVBcnJvd0VsZW1lbnQudGV4dENvbnRlbnQg
PSAiXHUyNUI2IjsgLy8gQkxBQ0sgUklHSFQtUE9JTlRJTkcgVFJJQU5HTEUKLSAgICAgICAgc3Vi
TWVudUFycm93RWxlbWVudC5jbGFzc05hbWUgPSAic29mdC1jb250ZXh0LW1lbnUtaXRlbS1zdWJt
ZW51LWFycm93IjsKLQotICAgICAgICBtZW51SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoaXRlbS5sYWJlbCkpOwotICAgICAgICBtZW51SXRlbUVsZW1lbnQu
YXBwZW5kQ2hpbGQoc3ViTWVudUFycm93RWxlbWVudCk7Ci0KLSAgICAgICAgbWVudUl0ZW1FbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21lbnVJdGVtTW91c2VEb3du
LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgbWVudUl0ZW1FbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNldXAiLCB0aGlzLl9tZW51SXRlbU1vdXNlVXAuYmluZCh0aGlzKSwgZmFsc2Up
OwotCi0gICAgICAgIC8vIE1hbnVhbGx5IG1hbmFnZSBob3ZlciBoaWdobGlnaHQgc2luY2UgOmhv
dmVyIGRvZXMgbm90IHdvcmsgaW4gY2FzZSBvZiBjbGljay1hbmQtaG9sZCBtZW51IGludm9jYXRp
b24uCi0gICAgICAgIG1lbnVJdGVtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIi
LCB0aGlzLl9tZW51SXRlbU1vdXNlT3Zlci5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIG1l
bnVJdGVtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIHRoaXMuX21lbnVJdGVt
TW91c2VPdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgICAgIHJldHVybiBtZW51SXRlbUVs
ZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVTZXBhcmF0b3I6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciBzZXBhcmF0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7Ci0gICAgICAgIHNlcGFyYXRvckVsZW1lbnQuY2xhc3NOYW1lID0gInNvZnQtY29udGV4
dC1tZW51LXNlcGFyYXRvciI7Ci0gICAgICAgIHNlcGFyYXRvckVsZW1lbnQuX2lzU2VwYXJhdG9y
ID0gdHJ1ZTsKLSAgICAgICAgc2VwYXJhdG9yRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZW92ZXIiLCB0aGlzLl9oaWRlU3ViTWVudS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIHNl
cGFyYXRvckVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJzZXBhcmF0b3ItbGluZSIpOwotICAg
ICAgICByZXR1cm4gc2VwYXJhdG9yRWxlbWVudDsKLSAgICB9LAotCi0gICAgX21lbnVJdGVtTW91
c2VEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIC8vIERvIG5vdCBsZXQgc2Vw
YXJhdG9yJ3MgbW91c2UgZG93biBoaXQgbWVudSdzIGhhbmRsZXIgLSB3ZSBuZWVkIHRvIHJlY2Vp
dmUgbW91c2UgdXAhCi0gICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0gICAgfSwKLQotICAg
IF9tZW51SXRlbU1vdXNlVXA6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5f
dHJpZ2dlckFjdGlvbihldmVudC50YXJnZXQsIGV2ZW50KTsKLSAgICAgICAgZXZlbnQuY29uc3Vt
ZSgpOwotICAgIH0sCi0KLSAgICBfZm9jdXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2NvbnRleHRNZW51RWxlbWVudC5mb2N1cygpOwotICAgIH0sCi0KLSAgICBfdHJpZ2dlckFj
dGlvbjogZnVuY3Rpb24obWVudUl0ZW1FbGVtZW50LCBldmVudCkKLSAgICB7Ci0gICAgICAgIGlm
ICghbWVudUl0ZW1FbGVtZW50Ll9zdWJJdGVtcykgewotICAgICAgICAgICAgdGhpcy5fZGlzY2Fy
ZE1lbnUodHJ1ZSwgZXZlbnQpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBtZW51SXRlbUVsZW1l
bnQuX2FjdGlvbklkICE9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChtZW51SXRlbUVsZW1lbnQuX2FjdGlvbklkKTsK
LSAgICAgICAgICAgICAgICBkZWxldGUgbWVudUl0ZW1FbGVtZW50Ll9hY3Rpb25JZDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X3Nob3dTdWJNZW51KG1lbnVJdGVtRWxlbWVudCwgZXZlbnQpOwotICAgICAgICBldmVudC5jb25z
dW1lKCk7Ci0gICAgfSwKLQotICAgIF9zaG93U3ViTWVudTogZnVuY3Rpb24obWVudUl0ZW1FbGVt
ZW50LCBldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChtZW51SXRlbUVsZW1lbnQuX3N1Yk1lbnVU
aW1lcikgewotICAgICAgICAgICAgY2xlYXJUaW1lb3V0KG1lbnVJdGVtRWxlbWVudC5fc3ViTWVu
dVRpbWVyKTsKLSAgICAgICAgICAgIGRlbGV0ZSBtZW51SXRlbUVsZW1lbnQuX3N1Yk1lbnVUaW1l
cjsKLSAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5fc3ViTWVudSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB0aGlzLl9zdWJNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Tb2Z0Q29u
dGV4dE1lbnUobWVudUl0ZW1FbGVtZW50Ll9zdWJJdGVtcywgdGhpcyk7Ci0gICAgICAgIHRoaXMu
X3N1Yk1lbnUuc2hvdyh0aGlzLl9idWlsZE1vdXNlRXZlbnRGb3JTdWJNZW51KG1lbnVJdGVtRWxl
bWVudCkpOwotICAgIH0sCi0KLSAgICBfYnVpbGRNb3VzZUV2ZW50Rm9yU3ViTWVudTogZnVuY3Rp
b24oc3ViTWVudUl0ZW1FbGVtZW50KQotICAgIHsKLSAgICAgICAgdmFyIHN1Yk1lbnVPZmZzZXQg
PSB7IHg6IHN1Yk1lbnVJdGVtRWxlbWVudC5vZmZzZXRXaWR0aCAtIDMsIHk6IHN1Yk1lbnVJdGVt
RWxlbWVudC5vZmZzZXRUb3AgLSAxIH07Ci0gICAgICAgIHZhciB0YXJnZXRYID0gdGhpcy5feCAr
IHN1Yk1lbnVPZmZzZXQueDsKLSAgICAgICAgdmFyIHRhcmdldFkgPSB0aGlzLl95ICsgc3ViTWVu
dU9mZnNldC55OwotICAgICAgICB2YXIgdGFyZ2V0UGFnZVggPSBwYXJzZUludCh0aGlzLl9jb250
ZXh0TWVudUVsZW1lbnQuc3R5bGUubGVmdCwgMTApICsgc3ViTWVudU9mZnNldC54OwotICAgICAg
ICB2YXIgdGFyZ2V0UGFnZVkgPSBwYXJzZUludCh0aGlzLl9jb250ZXh0TWVudUVsZW1lbnQuc3R5
bGUudG9wLCAxMCkgKyBzdWJNZW51T2Zmc2V0Lnk7Ci0gICAgICAgIHJldHVybiB7IHg6IHRhcmdl
dFgsIHk6IHRhcmdldFksIHBhZ2VYOiB0YXJnZXRQYWdlWCwgcGFnZVk6IHRhcmdldFBhZ2VZLCBj
b25zdW1lOiBmdW5jdGlvbigpIHt9IH07Ci0gICAgfSwKLQotICAgIF9oaWRlU3ViTWVudTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zdWJNZW51KQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLl9zdWJNZW51Ll9kaXNjYXJkU3ViTWVudXMoKTsKLSAgICAg
ICAgdGhpcy5fZm9jdXMoKTsKLSAgICB9LAotCi0gICAgX21lbnVJdGVtTW91c2VPdmVyOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodE1lbnVJdGVtKGV2ZW50
LnRhcmdldCk7Ci0gICAgfSwKLQotICAgIF9tZW51SXRlbU1vdXNlT3V0OiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc3ViTWVudSB8fCAhZXZlbnQucmVsYXRlZFRh
cmdldCkgewotICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0TWVudUl0ZW0obnVsbCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9
IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7Ci0gICAgICAgIGlmICh0aGlzLl9jb250ZXh0TWVudUVsZW1l
bnQuaXNTZWxmT3JBbmNlc3RvcihyZWxhdGVkVGFyZ2V0KSB8fCByZWxhdGVkVGFyZ2V0Lmhhc1N0
eWxlQ2xhc3MoInNvZnQtY29udGV4dC1tZW51LWdsYXNzLXBhbmUiKSkKLSAgICAgICAgICAgIHRo
aXMuX2hpZ2hsaWdodE1lbnVJdGVtKG51bGwpOwotICAgIH0sCi0KLSAgICBfaGlnaGxpZ2h0TWVu
dUl0ZW06IGZ1bmN0aW9uKG1lbnVJdGVtRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9oaWdobGlnaHRlZE1lbnVJdGVtRWxlbWVudCA9PT0gIG1lbnVJdGVtRWxlbWVudCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9oaWRlU3ViTWVudSgpOwotICAgICAgICBp
ZiAodGhpcy5faGlnaGxpZ2h0ZWRNZW51SXRlbUVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMu
X2hpZ2hsaWdodGVkTWVudUl0ZW1FbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNvZnQtY29udGV4
dC1tZW51LWl0ZW0tbW91c2Utb3ZlciIpOwotICAgICAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdo
dGVkTWVudUl0ZW1FbGVtZW50Ll9zdWJJdGVtcyAmJiB0aGlzLl9oaWdobGlnaHRlZE1lbnVJdGVt
RWxlbWVudC5fc3ViTWVudVRpbWVyKSB7Ci0gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRo
aXMuX2hpZ2hsaWdodGVkTWVudUl0ZW1FbGVtZW50Ll9zdWJNZW51VGltZXIpOwotICAgICAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRlZE1lbnVJdGVtRWxlbWVudC5fc3ViTWVudVRp
bWVyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVk
TWVudUl0ZW1FbGVtZW50ID0gbWVudUl0ZW1FbGVtZW50OwotICAgICAgICBpZiAodGhpcy5faGln
aGxpZ2h0ZWRNZW51SXRlbUVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVk
TWVudUl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvZnQtY29udGV4dC1tZW51LWl0ZW0tbW91
c2Utb3ZlciIpOwotICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVFbGVtZW50LmZvY3VzKCk7
Ci0gICAgICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0ZWRNZW51SXRlbUVsZW1lbnQuX3N1Ykl0
ZW1zICYmICF0aGlzLl9oaWdobGlnaHRlZE1lbnVJdGVtRWxlbWVudC5fc3ViTWVudVRpbWVyKQot
ICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkTWVudUl0ZW1FbGVtZW50Ll9zdWJNZW51
VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3Nob3dTdWJNZW51LmJpbmQodGhpcywgdGhpcy5faGln
aGxpZ2h0ZWRNZW51SXRlbUVsZW1lbnQsIHRoaXMuX2J1aWxkTW91c2VFdmVudEZvclN1Yk1lbnUo
dGhpcy5faGlnaGxpZ2h0ZWRNZW51SXRlbUVsZW1lbnQpKSwgMTUwKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBfaGlnaGxpZ2h0UHJldmlvdXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHZhciBtZW51SXRlbUVsZW1lbnQgPSB0aGlzLl9oaWdobGlnaHRlZE1lbnVJdGVtRWxlbWVudCA/
IHRoaXMuX2hpZ2hsaWdodGVkTWVudUl0ZW1FbGVtZW50LnByZXZpb3VzU2libGluZyA6IHRoaXMu
X2NvbnRleHRNZW51RWxlbWVudC5sYXN0Q2hpbGQ7Ci0gICAgICAgIHdoaWxlIChtZW51SXRlbUVs
ZW1lbnQgJiYgbWVudUl0ZW1FbGVtZW50Ll9pc1NlcGFyYXRvcikKLSAgICAgICAgICAgIG1lbnVJ
dGVtRWxlbWVudCA9IG1lbnVJdGVtRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgIGlm
IChtZW51SXRlbUVsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRNZW51SXRlbSht
ZW51SXRlbUVsZW1lbnQpOwotICAgIH0sCi0KLSAgICBfaGlnaGxpZ2h0TmV4dDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIG1lbnVJdGVtRWxlbWVudCA9IHRoaXMuX2hpZ2hsaWdodGVk
TWVudUl0ZW1FbGVtZW50ID8gdGhpcy5faGlnaGxpZ2h0ZWRNZW51SXRlbUVsZW1lbnQubmV4dFNp
YmxpbmcgOiB0aGlzLl9jb250ZXh0TWVudUVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgd2hp
bGUgKG1lbnVJdGVtRWxlbWVudCAmJiBtZW51SXRlbUVsZW1lbnQuX2lzU2VwYXJhdG9yKQotICAg
ICAgICAgICAgbWVudUl0ZW1FbGVtZW50ID0gbWVudUl0ZW1FbGVtZW50Lm5leHRTaWJsaW5nOwot
ICAgICAgICBpZiAobWVudUl0ZW1FbGVtZW50KQotICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0
TWVudUl0ZW0obWVudUl0ZW1FbGVtZW50KTsKLSAgICB9LAotCi0gICAgX21lbnVLZXlEb3duOiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5SWRlbnRpZmll
cikgewotICAgICAgICBjYXNlICJVcCI6Ci0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRQcmV2
aW91cygpOyBicmVhazsKLSAgICAgICAgY2FzZSAiRG93biI6Ci0gICAgICAgICAgICB0aGlzLl9o
aWdobGlnaHROZXh0KCk7IGJyZWFrOwotICAgICAgICBjYXNlICJMZWZ0IjoKLSAgICAgICAgICAg
IGlmICh0aGlzLl9wYXJlbnRNZW51KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0
TWVudUl0ZW0obnVsbCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50TWVudS5fZm9jdXMo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJSaWdo
dCI6Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2hpZ2hsaWdodGVkTWVudUl0ZW1FbGVtZW50KQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodGVk
TWVudUl0ZW1FbGVtZW50Ll9zdWJJdGVtcykgewotICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dT
dWJNZW51KHRoaXMuX2hpZ2hsaWdodGVkTWVudUl0ZW1FbGVtZW50LCB0aGlzLl9idWlsZE1vdXNl
RXZlbnRGb3JTdWJNZW51KHRoaXMuX2hpZ2hsaWdodGVkTWVudUl0ZW1FbGVtZW50KSk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fc3ViTWVudS5fZm9jdXMoKTsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9zdWJNZW51Ll9oaWdobGlnaHROZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAiVSswMDFCIjogLy8gRXNjYXBlCi0gICAgICAgICAgICB0aGlz
Ll9kaXNjYXJkTWVudSh0cnVlLCBldmVudCk7IGJyZWFrOwotICAgICAgICBjYXNlICJFbnRlciI6
Ci0gICAgICAgICAgICBpZiAoIWlzRW50ZXJLZXkoZXZlbnQpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoCi0gICAgICAgIGNhc2UgIlUrMDAyMCI6
IC8vIFNwYWNlCi0gICAgICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0ZWRNZW51SXRlbUVsZW1l
bnQpCi0gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlckFjdGlvbih0aGlzLl9oaWdobGlnaHRl
ZE1lbnVJdGVtRWxlbWVudCwgZXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICB9LAotCi0gICAgX2dsYXNzUGFuZU1v
dXNlVXA6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgLy8gUmV0dXJuIGlmIHRoaXMg
aXMgc2ltcGxlICdjbGljaycsIHNpbmNlIGRpc3BhdGNoZWQgb24gZ2xhc3MgcGFuZSwgY2FuJ3Qg
dXNlICdjbGljaycgZXZlbnQuCi0gICAgICAgIGlmIChldmVudC54ID09PSB0aGlzLl94ICYmIGV2
ZW50LnkgPT09IHRoaXMuX3kgJiYgbmV3IERhdGUoKS5nZXRUaW1lKCkgLSB0aGlzLl90aW1lIDwg
MzAwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9kaXNjYXJkTWVudSh0cnVl
LCBldmVudCk7Ci0gICAgICAgIGV2ZW50LmNvbnN1bWUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtib29sZWFufSBjbG9zZVBhcmVudE1lbnVzCi0gICAgICogQHBhcmFtIHtF
dmVudD19IGV2ZW50Ci0gICAgICovCi0gICAgX2Rpc2NhcmRNZW51OiBmdW5jdGlvbihjbG9zZVBh
cmVudE1lbnVzLCBldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zdWJNZW51ICYmICFj
bG9zZVBhcmVudE1lbnVzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5f
Z2xhc3NQYW5lRWxlbWVudCkgewotICAgICAgICAgICAgdmFyIGdsYXNzUGFuZSA9IHRoaXMuX2ds
YXNzUGFuZUVsZW1lbnQ7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fZ2xhc3NQYW5lRWxlbWVu
dDsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FuIHJlLWVudGVyIGRpc2NhcmRNZW51IGR1ZSB0byBi
bHVyLgotICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChnbGFzc1BhbmUpOwot
ICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudE1lbnUpIHsKLSAgICAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fcGFyZW50TWVudS5fc3ViTWVudTsKLSAgICAgICAgICAgICAgICBpZiAoY2xvc2VQ
YXJlbnRNZW51cykKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50TWVudS5fZGlzY2Fy
ZE1lbnUoY2xvc2VQYXJlbnRNZW51cywgZXZlbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoZXZlbnQpCi0gICAgICAgICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAg
ICAgICAgfSBlbHNlIGlmICh0aGlzLl9wYXJlbnRNZW51ICYmIHRoaXMuX2NvbnRleHRNZW51RWxl
bWVudC5wYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLl9kaXNjYXJkU3ViTWVudXMo
KTsKLSAgICAgICAgICAgIGlmIChjbG9zZVBhcmVudE1lbnVzKQotICAgICAgICAgICAgICAgIHRo
aXMuX3BhcmVudE1lbnUuX2Rpc2NhcmRNZW51KGNsb3NlUGFyZW50TWVudXMsIGV2ZW50KTsKLQot
ICAgICAgICAgICAgaWYgKGV2ZW50KQotICAgICAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1
ZSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2Rpc2NhcmRTdWJNZW51czogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3N1Yk1lbnUpCi0gICAgICAgICAgICB0aGlzLl9z
dWJNZW51Ll9kaXNjYXJkU3ViTWVudXMoKTsKLSAgICAgICAgaWYgKHRoaXMuX2NvbnRleHRNZW51
RWxlbWVudC5wYXJlbnRFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVFbGVt
ZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fY29udGV4dE1lbnVFbGVtZW50KTsK
LSAgICAgICAgaWYgKHRoaXMuX3BhcmVudE1lbnUpCi0gICAgICAgICAgICBkZWxldGUgdGhpcy5f
cGFyZW50TWVudS5fc3ViTWVudTsKLSAgICB9Ci19Ci0KLWlmICghSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LnNob3dDb250ZXh0TWVudSkgewotCi1JbnNwZWN0b3JGcm9udGVuZEhvc3Quc2hvd0NvbnRl
eHRNZW51ID0gZnVuY3Rpb24oZXZlbnQsIGl0ZW1zKQotewotICAgIG5ldyBXZWJJbnNwZWN0b3Iu
U29mdENvbnRleHRNZW51KGl0ZW1zKS5zaG93KGV2ZW50KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUNTU1Rva2VuaXplci5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkMGVmZi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUNTU1Rva2VuaXplci5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDE1NzEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IHJlMmMgMC4x
My41IG9uIEZyaSBTZXAgIDcgMTc6MDk6MzAgMjAxMiAqLwotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIEdlbmVyYXRlIGpzIGZpbGUgYXMg
Zm9sbG93czoKLQotLyoKLXJlMmMgLWlzYyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUNTU1Rva2VuaXplci5yZTJqcyBcCi0gIHwgc2VkICdzfF55eVwoW146XSpcKSpc
OnxjYXNlIFwxOnwnIFwKLSAgfCBzZWQgJ3N8WypdY3Vyc29yWytdWytdfHRoaXMuX2NoYXJBdChj
dXJzb3IrKyl8JyBcCi0gIHwgc2VkICdzfFtbKl1bK11bK11jdXJzb3J8dGhpcy5fY2hhckF0KCsr
Y3Vyc29yKXwnIFwKLSAgfCBzZWQgJ3N8WypdY3Vyc29yfHRoaXMuX2NoYXJBdChjdXJzb3IpfCcg
XAotICB8IHNlZCAnc3x5eWNoID0gXCpcKFteO10qXCl8eXljaCA9IHRoaXMuX2NoYXJBdFwxfCcg
XAotICB8IHNlZCAnc3x7IGdvdG9DYXNlID0gXChbXjsgY29udGludWU7IH07XSpcKXx7IGdvdG9D
YXNlID0gXDE7IGNvbnRpbnVlOyB9fCcgXAotICB8IHNlZCAnc3x5eWNoIDw9IFwoMHhbMC05YS1m
QS1GXSpcKXx5eWNoIFw8XD0gU3RyaW5nLmZyb21DaGFyQ29kZShcMSl8JyBcCi0gIHwgc2VkICdz
fHVuc2lnbmVkXCBpbnR8dmFyfCcgXAotICB8IHNlZCAnc3x2YXJcIHl5Y2h8Y2FzZSAxOiBjYXNl
IDE6IHZhciB5eWNofCcgPiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJj
ZUNTU1Rva2VuaXplci5qcwotKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyfQotICovCi1XZWJJbnNwZWN0b3IuU291cmNl
Q1NTVG9rZW5pemVyID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tl
bml6ZXIuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX3Byb3BlcnR5S2V5d29yZHMgPSBXZWJJbnNw
ZWN0b3IuQ1NTTWV0YWRhdGEuY3NzUHJvcGVydGllc01ldGFpbmZvS2V5U2V0KCk7Ci0gICAgdGhp
cy5fY29sb3JLZXl3b3JkcyA9IFdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5jb2xvcnMoKTsKLQot
ICAgIHRoaXMuX3ZhbHVlS2V5d29yZHMgPSBbCi0gICAgICAgICJhYm92ZSIsICJhYnNvbHV0ZSIs
ICJhY3RpdmVib3JkZXIiLCAiYWN0aXZlY2FwdGlvbiIsICJhZmFyIiwgImFmdGVyLXdoaXRlLXNw
YWNlIiwgImFoZWFkIiwgImFsaWFzIiwgImFsbCIsICJhbGwtc2Nyb2xsIiwKLSAgICAgICAgImFs
dGVybmF0ZSIsICJhbHdheXMiLCAiYW1oYXJpYyIsICJhbWhhcmljLWFiZWdlZGUiLCAiYW50aWFs
aWFzZWQiLCAiYXBwd29ya3NwYWNlIiwgImFyYWJpYy1pbmRpYyIsICJhcm1lbmlhbiIsICJhc3Rl
cmlza3MiLAotICAgICAgICAiYXV0byIsICJhdm9pZCIsICJiYWNrZ3JvdW5kIiwgImJhY2t3YXJk
cyIsICJiYXNlbGluZSIsICJiZWxvdyIsICJiaWRpLW92ZXJyaWRlIiwgImJpbmFyeSIsICJiZW5n
YWxpIiwgImJsaW5rIiwKLSAgICAgICAgImJsb2NrIiwgImJsb2NrLWF4aXMiLCAiYm9sZCIsICJi
b2xkZXIiLCAiYm9yZGVyIiwgImJvcmRlci1ib3giLCAiYm90aCIsICJib3R0b20iLCAiYnJlYWst
YWxsIiwgImJyZWFrLXdvcmQiLCAiYnV0dG9uIiwKLSAgICAgICAgImJ1dHRvbi1iZXZlbCIsICJi
dXR0b25mYWNlIiwgImJ1dHRvbmhpZ2hsaWdodCIsICJidXR0b25zaGFkb3ciLCAiYnV0dG9udGV4
dCIsICJjYW1ib2RpYW4iLCAiY2FwaXRhbGl6ZSIsICJjYXBzLWxvY2staW5kaWNhdG9yIiwKLSAg
ICAgICAgImNhcHRpb24iLCAiY2FwdGlvbnRleHQiLCAiY2FyZXQiLCAiY2VsbCIsICJjZW50ZXIi
LCAiY2hlY2tib3giLCAiY2lyY2xlIiwgImNqay1lYXJ0aGx5LWJyYW5jaCIsICJjamstaGVhdmVu
bHktc3RlbSIsICJjamstaWRlb2dyYXBoaWMiLAotICAgICAgICAiY2xlYXIiLCAiY2xpcCIsICJj
bG9zZS1xdW90ZSIsICJjb2wtcmVzaXplIiwgImNvbGxhcHNlIiwgImNvbXBhY3QiLCAiY29uZGVu
c2VkIiwgImNvbnRhaW4iLCAiY29udGVudCIsICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUi
LAotICAgICAgICAiY29udGludW91cyIsICJjb3B5IiwgImNvdmVyIiwgImNyb3AiLCAiY3Jvc3Mi
LCAiY3Jvc3NoYWlyIiwgImN1cnJlbnRjb2xvciIsICJjdXJzaXZlIiwgImRhc2hlZCIsICJkZWNp
bWFsIiwgImRlY2ltYWwtbGVhZGluZy16ZXJvIiwgImRlZmF1bHQiLAotICAgICAgICAiZGVmYXVs
dC1idXR0b24iLCAiZGVzdGluYXRpb24tYXRvcCIsICJkZXN0aW5hdGlvbi1pbiIsICJkZXN0aW5h
dGlvbi1vdXQiLCAiZGVzdGluYXRpb24tb3ZlciIsICJkZXZhbmFnYXJpIiwgImRpc2MiLCAiZGlz
Y2FyZCIsICJkb2N1bWVudCIsCi0gICAgICAgICJkb3QtZGFzaCIsICJkb3QtZG90LWRhc2giLCAi
ZG90dGVkIiwgImRvdWJsZSIsICJkb3duIiwgImUtcmVzaXplIiwgImVhc2UiLCAiZWFzZS1pbiIs
ICJlYXNlLWluLW91dCIsICJlYXNlLW91dCIsICJlbGVtZW50IiwKLSAgICAgICAgImVsbGlwc2lz
IiwgImVtYmVkIiwgImVuZCIsICJldGhpb3BpYyIsICJldGhpb3BpYy1hYmVnZWRlIiwgImV0aGlv
cGljLWFiZWdlZGUtYW0tZXQiLCAiZXRoaW9waWMtYWJlZ2VkZS1nZXoiLAotICAgICAgICAiZXRo
aW9waWMtYWJlZ2VkZS10aS1lciIsICJldGhpb3BpYy1hYmVnZWRlLXRpLWV0IiwgImV0aGlvcGlj
LWhhbGVoYW1lLWFhLWVyIiwgImV0aGlvcGljLWhhbGVoYW1lLWFhLWV0IiwKLSAgICAgICAgImV0
aGlvcGljLWhhbGVoYW1lLWFtLWV0IiwgImV0aGlvcGljLWhhbGVoYW1lLWdleiIsICJldGhpb3Bp
Yy1oYWxlaGFtZS1vbS1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1zaWQtZXQiLAotICAgICAgICAi
ZXRoaW9waWMtaGFsZWhhbWUtc28tZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtdGktZXIiLCAiZXRo
aW9waWMtaGFsZWhhbWUtdGktZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtdGlnIiwgImV3LXJlc2l6
ZSIsICJleHBhbmRlZCIsCi0gICAgICAgICJleHRyYS1jb25kZW5zZWQiLCAiZXh0cmEtZXhwYW5k
ZWQiLCAiZmFudGFzeSIsICJmYXN0IiwgImZpbGwiLCAiZml4ZWQiLCAiZmxhdCIsICJmb290bm90
ZXMiLCAiZm9yd2FyZHMiLCAiZnJvbSIsICJnZW9tZXRyaWNQcmVjaXNpb24iLAotICAgICAgICAi
Z2VvcmdpYW4iLCAiZ3JheXRleHQiLCAiZ3Jvb3ZlIiwgImd1amFyYXRpIiwgImd1cm11a2hpIiwg
ImhhbmQiLCAiaGFuZ3VsIiwgImhhbmd1bC1jb25zb25hbnQiLCAiaGVicmV3IiwgImhlbHAiLAot
ICAgICAgICAiaGlkZGVuIiwgImhpZGUiLCAiaGlnaGVyIiwgImhpZ2hsaWdodCIsICJoaWdobGln
aHR0ZXh0IiwgImhpcmFnYW5hIiwgImhpcmFnYW5hLWlyb2hhIiwgImhvcml6b250YWwiLCAiaHNs
IiwgImhzbGEiLCAiaWNvbiIsICJpZ25vcmUiLAotICAgICAgICAiaW5hY3RpdmVib3JkZXIiLCAi
aW5hY3RpdmVjYXB0aW9uIiwgImluYWN0aXZlY2FwdGlvbnRleHQiLCAiaW5maW5pdGUiLCAiaW5m
b2JhY2tncm91bmQiLCAiaW5mb3RleHQiLCAiaW5oZXJpdCIsICJpbml0aWFsIiwgImlubGluZSIs
Ci0gICAgICAgICJpbmxpbmUtYXhpcyIsICJpbmxpbmUtYmxvY2siLCAiaW5saW5lLXRhYmxlIiwg
Imluc2V0IiwgImluc2lkZSIsICJpbnRyaW5zaWMiLCAiaW52ZXJ0IiwgIml0YWxpYyIsICJqdXN0
aWZ5IiwgImthbm5hZGEiLCAia2F0YWthbmEiLAotICAgICAgICAia2F0YWthbmEtaXJvaGEiLCAi
a2htZXIiLCAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJnZXIiLCAibGVmdCIsICJs
ZXZlbCIsICJsaWdodGVyIiwgImxpbmUtdGhyb3VnaCIsICJsaW5lYXIiLCAibGluZXMiLAotICAg
ICAgICAibGlzdC1pdGVtIiwgImxpc3Rib3giLCAibGlzdGl0ZW0iLCAibG9jYWwiLCAibG9naWNh
bCIsICJsb3VkIiwgImxvd2VyIiwgImxvd2VyLWFscGhhIiwgImxvd2VyLWFybWVuaWFuIiwgImxv
d2VyLWdyZWVrIiwKLSAgICAgICAgImxvd2VyLWhleGFkZWNpbWFsIiwgImxvd2VyLWxhdGluIiwg
Imxvd2VyLW5vcndlZ2lhbiIsICJsb3dlci1yb21hbiIsICJsb3dlcmNhc2UiLCAibHRyIiwgIm1h
bGF5YWxhbSIsICJtYXRjaCIsICJtZWRpYS1jb250cm9scy1iYWNrZ3JvdW5kIiwKLSAgICAgICAg
Im1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5IiwgIm1lZGlhLWZ1bGxzY3JlZW4tYnV0dG9uIiwg
Im1lZGlhLW11dGUtYnV0dG9uIiwgIm1lZGlhLXBsYXktYnV0dG9uIiwgIm1lZGlhLXJldHVybi10
by1yZWFsdGltZS1idXR0b24iLAotICAgICAgICAibWVkaWEtcmV3aW5kLWJ1dHRvbiIsICJtZWRp
YS1zZWVrLWJhY2stYnV0dG9uIiwgIm1lZGlhLXNlZWstZm9yd2FyZC1idXR0b24iLCAibWVkaWEt
c2xpZGVyIiwgIm1lZGlhLXNsaWRlcnRodW1iIiwgIm1lZGlhLXRpbWUtcmVtYWluaW5nLWRpc3Bs
YXkiLAotICAgICAgICAibWVkaWEtdm9sdW1lLXNsaWRlciIsICJtZWRpYS12b2x1bWUtc2xpZGVy
LWNvbnRhaW5lciIsICJtZWRpYS12b2x1bWUtc2xpZGVydGh1bWIiLCAibWVkaXVtIiwgIm1lbnUi
LCAibWVudWxpc3QiLCAibWVudWxpc3QtYnV0dG9uIiwKLSAgICAgICAgIm1lbnVsaXN0LXRleHQi
LCAibWVudWxpc3QtdGV4dGZpZWxkIiwgIm1lbnV0ZXh0IiwgIm1lc3NhZ2UtYm94IiwgIm1pZGRs
ZSIsICJtaW4taW50cmluc2ljIiwgIm1peCIsICJtb25nb2xpYW4iLCAibW9ub3NwYWNlIiwgIm1v
dmUiLCAibXVsdGlwbGUiLAotICAgICAgICAibXlhbm1hciIsICJuLXJlc2l6ZSIsICJuYXJyb3dl
ciIsICJuYXZ5IiwgIm5lLXJlc2l6ZSIsICJuZXN3LXJlc2l6ZSIsICJuby1jbG9zZS1xdW90ZSIs
ICJuby1kcm9wIiwgIm5vLW9wZW4tcXVvdGUiLCAibm8tcmVwZWF0IiwgIm5vbmUiLAotICAgICAg
ICAibm9ybWFsIiwgIm5vdC1hbGxvd2VkIiwgIm5vd3JhcCIsICJucy1yZXNpemUiLCAibnctcmVz
aXplIiwgIm53c2UtcmVzaXplIiwgIm9ibGlxdWUiLCAib2N0YWwiLCAib3Blbi1xdW90ZSIsICJv
cHRpbWl6ZUxlZ2liaWxpdHkiLAotICAgICAgICAib3B0aW1pemVTcGVlZCIsICJvcml5YSIsICJv
cm9tbyIsICJvdXRzZXQiLCAib3V0c2lkZSIsICJvdmVybGF5IiwgIm92ZXJsaW5lIiwgInBhZGRp
bmciLCAicGFkZGluZy1ib3giLCAicGFpbnRlZCIsICJwYXVzZWQiLAotICAgICAgICAicGVyc2lh
biIsICJwbHVzLWRhcmtlciIsICJwbHVzLWxpZ2h0ZXIiLCAicG9pbnRlciIsICJwb3J0cmFpdCIs
ICJwcmUiLCAicHJlLWxpbmUiLCAicHJlLXdyYXAiLCAicHJlc2VydmUtM2QiLCAicHJvZ3Jlc3Mi
LAotICAgICAgICAicHVzaC1idXR0b24iLCAicmFkaW8iLCAicmVhZC1vbmx5IiwgInJlYWQtd3Jp
dGUiLCAicmVhZC13cml0ZS1wbGFpbnRleHQtb25seSIsICJyZWxhdGl2ZSIsICJyZXBlYXQiLCAi
cmVwZWF0LXgiLAotICAgICAgICAicmVwZWF0LXkiLCAicmVzZXQiLCAicmV2ZXJzZSIsICJyZ2Ii
LCAicmdiYSIsICJyaWRnZSIsICJyaWdodCIsICJyb3VuZCIsICJyb3ctcmVzaXplIiwgInJ0bCIs
ICJydW4taW4iLCAicnVubmluZyIsICJzLXJlc2l6ZSIsICJzYW5zLXNlcmlmIiwKLSAgICAgICAg
InNjcm9sbCIsICJzY3JvbGxiYXIiLCAic2UtcmVzaXplIiwgInNlYXJjaGZpZWxkIiwgInNlYXJj
aGZpZWxkLWNhbmNlbC1idXR0b24iLCAic2VhcmNoZmllbGQtZGVjb3JhdGlvbiIsICJzZWFyY2hm
aWVsZC1yZXN1bHRzLWJ1dHRvbiIsCi0gICAgICAgICJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29y
YXRpb24iLCAic2VtaS1jb25kZW5zZWQiLCAic2VtaS1leHBhbmRlZCIsICJzZXBhcmF0ZSIsICJz
ZXJpZiIsICJzaG93IiwgInNpZGFtYSIsICJzaW5nbGUiLAotICAgICAgICAic2tpcC13aGl0ZS1z
cGFjZSIsICJzbGlkZSIsICJzbGlkZXItaG9yaXpvbnRhbCIsICJzbGlkZXItdmVydGljYWwiLCAi
c2xpZGVydGh1bWItaG9yaXpvbnRhbCIsICJzbGlkZXJ0aHVtYi12ZXJ0aWNhbCIsICJzbG93IiwK
LSAgICAgICAgInNtYWxsIiwgInNtYWxsLWNhcHMiLCAic21hbGwtY2FwdGlvbiIsICJzbWFsbGVy
IiwgInNvbGlkIiwgInNvbWFsaSIsICJzb3VyY2UtYXRvcCIsICJzb3VyY2UtaW4iLCAic291cmNl
LW91dCIsICJzb3VyY2Utb3ZlciIsCi0gICAgICAgICJzcGFjZSIsICJzcXVhcmUiLCAic3F1YXJl
LWJ1dHRvbiIsICJzdGFydCIsICJzdGF0aWMiLCAic3RhdHVzLWJhciIsICJzdHJldGNoIiwgInN0
cm9rZSIsICJzdWIiLCAic3VicGl4ZWwtYW50aWFsaWFzZWQiLCAic3VwZXIiLAotICAgICAgICAi
c3ctcmVzaXplIiwgInRhYmxlIiwgInRhYmxlLWNhcHRpb24iLCAidGFibGUtY2VsbCIsICJ0YWJs
ZS1jb2x1bW4iLCAidGFibGUtY29sdW1uLWdyb3VwIiwgInRhYmxlLWZvb3Rlci1ncm91cCIsICJ0
YWJsZS1oZWFkZXItZ3JvdXAiLAotICAgICAgICAidGFibGUtcm93IiwgInRhYmxlLXJvdy1ncm91
cCIsICJ0ZWx1Z3UiLCAidGV4dCIsICJ0ZXh0LWJvdHRvbSIsICJ0ZXh0LXRvcCIsICJ0ZXh0YXJl
YSIsICJ0ZXh0ZmllbGQiLCAidGhhaSIsICJ0aGljayIsICJ0aGluIiwKLSAgICAgICAgInRocmVl
ZGRhcmtzaGFkb3ciLCAidGhyZWVkZmFjZSIsICJ0aHJlZWRoaWdobGlnaHQiLCAidGhyZWVkbGln
aHRzaGFkb3ciLCAidGhyZWVkc2hhZG93IiwgInRpYmV0YW4iLCAidGlncmUiLCAidGlncmlueWEt
ZXIiLCAidGlncmlueWEtZXItYWJlZ2VkZSIsCi0gICAgICAgICJ0aWdyaW55YS1ldCIsICJ0aWdy
aW55YS1ldC1hYmVnZWRlIiwgInRvIiwgInRvcCIsICJ0cmFuc3BhcmVudCIsICJ1bHRyYS1jb25k
ZW5zZWQiLCAidWx0cmEtZXhwYW5kZWQiLCAidW5kZXJsaW5lIiwgInVwIiwgInVwcGVyLWFscGhh
IiwgInVwcGVyLWFybWVuaWFuIiwKLSAgICAgICAgInVwcGVyLWdyZWVrIiwgInVwcGVyLWhleGFk
ZWNpbWFsIiwgInVwcGVyLWxhdGluIiwgInVwcGVyLW5vcndlZ2lhbiIsICJ1cHBlci1yb21hbiIs
ICJ1cHBlcmNhc2UiLCAidXJkdSIsICJ1cmwiLCAidmVydGljYWwiLCAidmVydGljYWwtdGV4dCIs
ICJ2aXNpYmxlIiwKLSAgICAgICAgInZpc2libGVGaWxsIiwgInZpc2libGVQYWludGVkIiwgInZp
c2libGVTdHJva2UiLCAidmlzdWFsIiwgInctcmVzaXplIiwgIndhaXQiLCAid2F2ZSIsICJ3aGl0
ZSIsICJ3aWRlciIsICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIsCi0gICAg
ICAgICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwgInh4LWxhcmdlIiwgInh4LXNtYWxsIiwg
InllbGxvdyIsICItd2FwLW1hcnF1ZWUiLCAiLXdlYmtpdC1hY3RpdmVsaW5rIiwgIi13ZWJraXQt
YXV0byIsICItd2Via2l0LWJhc2VsaW5lLW1pZGRsZSIsCi0gICAgICAgICItd2Via2l0LWJvZHki
LCAiLXdlYmtpdC1ib3giLCAiLXdlYmtpdC1jZW50ZXIiLCAiLXdlYmtpdC1jb250cm9sIiwgIi13
ZWJraXQtZm9jdXMtcmluZy1jb2xvciIsICItd2Via2l0LWdyYWIiLCAiLXdlYmtpdC1ncmFiYmlu
ZyIsCi0gICAgICAgICItd2Via2l0LWdyYWRpZW50IiwgIi13ZWJraXQtaW5saW5lLWJveCIsICIt
d2Via2l0LWxlZnQiLCAiLXdlYmtpdC1saW5rIiwgIi13ZWJraXQtbWFycXVlZSIsICItd2Via2l0
LW1pbmktY29udHJvbCIsICItd2Via2l0LW5vd3JhcCIsICItd2Via2l0LXBpY3RvZ3JhcGgiLAot
ICAgICAgICAiLXdlYmtpdC1yaWdodCIsICItd2Via2l0LXNtYWxsLWNvbnRyb2wiLCAiLXdlYmtp
dC10ZXh0IiwgIi13ZWJraXQteHh4LWxhcmdlIiwgIi13ZWJraXQtem9vbS1pbiIsICItd2Via2l0
LXpvb20tb3V0IiwKLSAgICBdLmtleVNldCgpOwotCi0gICAgdGhpcy5fc2Nzc1ZhbHVlS2V5d29y
ZHMgPSBbCi0gICAgICAgICJhYnMiLCAiYWRqdXN0LWNvbG9yIiwgImFkanVzdC1odWUiLCAiYWxw
aGEiLCAiYXBwZW5kIiwgImNlaWwiLCAiY2hhbmdlLWNvbG9yIiwgImNvbXBhcmFibGUiLCAiY29t
cGxlbWVudCIsICJkYXJrZW4iLCAiZGVzYXR1cmF0ZSIsCi0gICAgICAgICJmYWRlLWluIiwgImZh
ZGUtb3V0IiwgImZsb29yIiwgImdyYXlzY2FsZSIsICJodWUiLCAiaWUtaGV4LXN0ciIsICJpbnZl
cnQiLCAiam9pbiIsICJsZW5ndGgiLCAibGlnaHRlbiIsCi0gICAgICAgICJsaWdodG5lc3MiLCAi
bWF4IiwgIm1pbiIsICJtaXgiLCAibnRoIiwgIm9wYWNpZnkiLCAib3BhY2l0eSIsICJwZXJjZW50
YWdlIiwgInF1b3RlIiwgInJvdW5kIiwgInNhdHVyYXRlIiwKLSAgICAgICAgInNhdHVyYXRpb24i
LCAic2NhbGUtY29sb3IiLCAidHJhbnNwYXJlbnRpemUiLCAidHlwZS1vZiIsICJ1bml0IiwgInVu
aXRsZXNzIiwgInVucXVvdGUiLCAiemlwIgotICAgIF0ua2V5U2V0KCk7Ci0KLSAgICB0aGlzLl9s
ZXhDb25kaXRpb25zID0gewotICAgICAgICBJTklUSUFMOiAwLAotICAgICAgICBDT01NRU5UOiAx
LAotICAgICAgICBEU1RSSU5HOiAyLAotICAgICAgICBTU1RSSU5HOiAzCi0gICAgfTsKLQotICAg
IHRoaXMuX3BhcnNlQ29uZGl0aW9ucyA9IHsKLSAgICAgICAgSU5JVElBTDogMCwKLSAgICAgICAg
UFJPUEVSVFk6IDEsCi0gICAgICAgIFBST1BFUlRZX1ZBTFVFOiAyLAotICAgICAgICBBVF9SVUxF
OiAzLAotICAgICAgICBBVF9NRURJQV9SVUxFOiA0Ci0gICAgfTsKLQotICAgIHRoaXMuY2FzZV9J
TklUSUFMID0gMTAwMDsKLSAgICB0aGlzLmNhc2VfQ09NTUVOVCA9IDEwMDI7Ci0gICAgdGhpcy5j
YXNlX0RTVFJJTkcgPSAxMDAzOwotICAgIHRoaXMuY2FzZV9TU1RSSU5HID0gMTAwNDsKLQotICAg
IHRoaXMuY29uZGl0aW9uID0gdGhpcy5jcmVhdGVJbml0aWFsQ29uZGl0aW9uKCk7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5Tb3VyY2VDU1NUb2tlbml6ZXIuU0NTU0F0UmVsYXRlZEtleXdvcmRzID0gWyJm
cm9tIiwgImlmIiwgImluIiwgInRocm91Z2giXS5rZXlTZXQoKTsKLQotV2ViSW5zcGVjdG9yLlNv
dXJjZUNTU1Rva2VuaXplci5NZWRpYVR5cGVzID0gWyJhbGwiLCAiYXVyYWwiLCAiYnJhaWxsZSIs
ICJlbWJvc3NlZCIsICJoYW5kaGVsZCIsICJpbXBvcnQiLCAicHJpbnQiLCAicHJvamVjdGlvbiIs
ICJzY3JlZW4iLCAidHR5IiwgInR2Il0ua2V5U2V0KCk7Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VD
U1NUb2tlbml6ZXIucHJvdG90eXBlID0gewotICAgIGNyZWF0ZUluaXRpYWxDb25kaXRpb246IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IGxleENvbmRpdGlvbjogdGhpcy5fbGV4
Q29uZGl0aW9ucy5JTklUSUFMLCBwYXJzZUNvbmRpdGlvbjogdGhpcy5fcGFyc2VDb25kaXRpb25z
LklOSVRJQUwgfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0g
c3RyaW5nRW5kcwotICAgICAqLwotICAgIF9zdHJpbmdUb2tlbjogZnVuY3Rpb24oY3Vyc29yLCBz
dHJpbmdFbmRzKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzUHJvcGVydHlWYWx1ZSgpKQot
ICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiY3NzLXN0cmluZyI7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIGN1cnNv
cjsKLSAgICB9LAotCi0gICAgX2lzUHJvcGVydHlWYWx1ZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0gdGhpcy5fcGFy
c2VDb25kaXRpb25zLlBST1BFUlRZX1ZBTFVFIHx8IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRp
dGlvbiA9PT0gdGhpcy5fcGFyc2VDb25kaXRpb25zLkFUX1JVTEU7Ci0gICAgfSwKLQotICAgIF9z
ZXRQYXJzZUNvbmRpdGlvbjogZnVuY3Rpb24oY29uZGl0aW9uKQotICAgIHsKLSAgICAgICAgdGhp
cy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uID0gY29uZGl0aW9uOwotICAgIH0sCi0KLSAgICBu
ZXh0VG9rZW46IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7Ci0gICAgICAgIHZhciBjdXJzb3JPbkVu
dGVyID0gY3Vyc29yOwotICAgICAgICB2YXIgZ290b0Nhc2UgPSAxOwotICAgICAgICB2YXIgWVlN
QVJLRVI7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGdvdG9DYXNl
KQotICAgICAgICAgICAgLy8gRm9sbG93aW5nIGNvbW1lbnQgaXMgcmVwbGFjZWQgd2l0aCBnZW5l
cmF0ZWQgc3RhdGUgbWFjaGluZS4KLSAgICAgICAgICAgIAotICAgICAgICB7Ci0gICAgICAgICAg
ICBjYXNlIDE6IHZhciB5eWNoOwotICAgICAgICAgICAgdmFyIHl5YWNjZXB0ID0gMDsKLSAgICAg
ICAgICAgIGlmICh0aGlzLmdldExleENvbmRpdGlvbigpIDwgMikgewotICAgICAgICAgICAgICAg
IGlmICh0aGlzLmdldExleENvbmRpdGlvbigpIDwgMSkgewotICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gdGhpcy5jYXNlX0lOSVRJQUw7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSB0aGlzLmNhc2Vf
Q09NTUVOVDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMZXhDb25kaXRpb24oKSA8IDMpIHsK
LSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IHRoaXMuY2FzZV9EU1RSSU5HOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gdGhpcy5jYXNlX1NTVFJJTkc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqICovCi1jYXNlIHRoaXMuY2FzZV9DT01NRU5UOgotCi0gICAgICAgICAgICB5eWNoID0gdGhp
cy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDQ7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2Fz
ZSA9IDQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICcqJykgeyBn
b3RvQ2FzZSA9IDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAz
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMjoKLSAgICAgICAgICAgIHsgdGhp
cy50b2tlblR5cGUgPSAiY3NzLWNvbW1lbnQiOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDM6Ci0g
ICAgICAgICAgICB5eWFjY2VwdCA9IDA7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0
KFlZTUFSS0VSID0gKytjdXJzb3IpOwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyOyBjb250
aW51ZTsgfTsKLWNhc2UgNDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeyB0
aGlzLnRva2VuVHlwZSA9IG51bGw7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgNjoKLSAgICAgICAg
ICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJL
RVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnKicpIHsgZ290b0Nhc2Ug
PSA5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICcvJykgeyBnb3RvQ2Fz
ZSA9IDExOyBjb250aW51ZTsgfTsKLWNhc2UgNzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAg
ICAgICAgICAgdGhpcy5zZXRMZXhDb25kaXRpb24odGhpcy5fbGV4Q29uZGl0aW9ucy5JTklUSUFM
KTsKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAiY3NzLWNvbW1lbnQiOyByZXR1cm4g
Y3Vyc29yOyB9Ci1jYXNlIDk6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICcqJykg
eyBnb3RvQ2FzZSA9IDk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy8n
KSB7IGdvdG9DYXNlID0gNzsgY29udGludWU7IH07Ci1jYXNlIDExOgotICAgICAgICAgICAgeXlh
Y2NlcHQgPSAwOwotICAgICAgICAgICAgWVlNQVJLRVIgPSArK2N1cnNvcjsKLSAgICAgICAgICAg
IHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLWNhc2UgMTI6Ci0gICAgICAgICAgICBpZiAo
eXljaCA8PSAnXGYnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3Rv
Q2FzZSA9IDI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdccicpIHsgZ290b0Nhc2UgPSAyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnKicpIHsgZ290b0Nhc2UgPSA5OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotLyog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLWNhc2UgdGhpcy5jYXNlX0RT
VFJJTkc6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAg
ICAgICBpZiAoeXljaCA8PSAnXHInKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xu
JykgeyBnb3RvQ2FzZSA9IDE3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnXGYnKSB7IGdvdG9DYXNlID0gMTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSAxNzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnIScpIHsgZ290b0Nhc2UgPSAxNjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSAxOTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xcJykgeyBnb3RvQ2FzZSA9
IDIxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE2OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDE1Ogot
ICAgICAgICAgICAgeyByZXR1cm4gdGhpcy5fc3RyaW5nVG9rZW4oY3Vyc29yKTsgfQotY2FzZSAx
NjoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9j
aGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMjM7
IGNvbnRpbnVlOyB9OwotY2FzZSAxNzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotY2FzZSAxODoK
LSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSBudWxsOyByZXR1cm4gY3Vyc29yOyB9Ci1j
YXNlIDE5OgotICAgICAgICAgICAgKytjdXJzb3I7Ci1jYXNlIDIwOgotICAgICAgICAgICAgdGhp
cy5zZXRMZXhDb25kaXRpb24odGhpcy5fbGV4Q29uZGl0aW9ucy5JTklUSUFMKTsKLSAgICAgICAg
ICAgIHsgcmV0dXJuIHRoaXMuX3N0cmluZ1Rva2VuKGN1cnNvciwgdHJ1ZSk7IH0KLWNhc2UgMjE6
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdlJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyInKSB7IGdvdG9DYXNlID0gMjI7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJicpIHsgZ290b0Nh
c2UgPSAxODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNlID0gMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0g
J2InKSB7IGdvdG9DYXNlID0gMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAncicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ20n
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnZycpIHsgZ290b0Nhc2Ug
PSAxODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnbicpIHsgZ290b0Nhc2UgPSAyMjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAncScpIHsgZ290b0Nh
c2UgPSAxODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndCcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdzJykgeyBnb3RvQ2FzZSA9IDE4OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoICE9ICd2JykgeyBnb3RvQ2FzZSA9IDE4OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LWNhc2UgMjI6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDA7Ci0gICAgICAgICAgICBZWU1BUktF
UiA9ICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwot
Y2FzZSAyMzoKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdccicpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTU7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsgZ290b0Nhc2UgPSAyMjsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE1OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICchJykgeyBnb3RvQ2FzZSA9IDIyOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDI2OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAn
XFwnKSB7IGdvdG9DYXNlID0gMjI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2UnKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1wnJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAnIicpIHsgZ290b0Nhc2UgPSAyMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID49ICdcJycpIHsgZ290b0Nhc2UgPSAyMjsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J1xcJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJ1xcJykgeyBnb3Rv
Q2FzZSA9IDIyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdiJykgeyBnb3RvQ2FzZSA9IDIyOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3InKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdtJykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ2YnKSB7IGdvdG9DYXNlID0gMjI7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ24nKSB7IGdvdG9DYXNlID0gMjI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPj0gJ3InKSB7IGdvdG9DYXNlID0gMjI7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3QnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA+PSAndCcpIHsgZ290b0Nhc2UgPSAyMjsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAn
dicpIHsgZ290b0Nhc2UgPSAyMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJzb3IgPSBZ
WU1BUktFUjsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNTsgY29udGludWU7IH07Ci1jYXNl
IDI2OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KGN1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9Owot
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLWNhc2UgdGhpcy5jYXNl
X0lOSVRJQUw6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAg
ICAgICAgICBpZiAoeXljaCA8PSAnOicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
JicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnICcpIHsgZ290b0Nhc2UgPSAyOTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIScpIHsgZ290b0Nhc2Ug
PSAzMTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
MzM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyMnKSB7IGdvdG9DYXNlID0gMzQ7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyQnKSB7IGdvdG9DYXNl
ID0gMzU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0g
JyYnKSB7IGdvdG9DYXNlID0gMzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7IGdv
dG9DYXNlID0gMzY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPj0gJy0nKSB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy4nKSB7
IGdvdG9DYXNlID0gMzg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMzk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gNDA7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQyOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ10nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICc9JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJzsnKSB7IGdvdG9DYXNlID0gNDQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPj0gJz0nKSB7IGdvdG9DYXNlID0gMzE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJz8nKSB7IGdvdG9DYXNlID0gMjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ1xcJykgeyBnb3RvQ2FzZSA9IDMxOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd6JykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ18nKSB7IGdvdG9DYXNlID0gMzE7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJ2EnKSB7IGdvdG9DYXNlID0gMzE7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ3snKSB7IGdvdG9DYXNlID0gNDY7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ30nKSB7IGdvdG9DYXNlID0gNDg7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotY2FzZSAyOToKLSAgICAgICAgICAgICsrY3Vyc29yOwotY2FzZSAzMDoKLSAg
ICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSBudWxsOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNl
IDMxOgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KGN1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9Owot
Y2FzZSAzMjoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0g
dGhpcy5fbGluZS5zdWJzdHJpbmcoY3Vyc29yT25FbnRlciwgY3Vyc29yKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2tlblR5cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uID09PSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMu
SU5JVElBTCB8fCB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNl
Q29uZGl0aW9ucy5QUk9QRVJUWSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vu
LmNoYXJBdCgwKSA9PT0gIkAiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2tlblR5cGUgPSAiY3NzLWF0LXJ1bGUiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3NldFBhcnNlQ29uZGl0aW9uKHRva2VuID09PSAiQG1lZGlhIiA/IHRoaXMuX3BhcnNlQ29u
ZGl0aW9ucy5BVF9NRURJQV9SVUxFIDogdGhpcy5fcGFyc2VDb25kaXRpb25zLkFUX1JVTEUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbi5hdEtleXdvcmQgPSB0
b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZGl0aW9u
LnBhcnNlQ29uZGl0aW9uID09PSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuSU5JVElBTCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJjc3Mtc2VsZWN0b3IiOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fcHJvcGVydHlLZXl3b3Jkcy5o
YXNPd25Qcm9wZXJ0eSh0b2tlbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2tlblR5cGUgPSAiY3NzLXByb3BlcnR5IjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0aW9u
cy5BVF9NRURJQV9SVUxFIHx8IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0gdGhp
cy5fcGFyc2VDb25kaXRpb25zLkFUX1JVTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChXZWJJbnNwZWN0b3IuU291cmNlQ1NTVG9rZW5pemVyLlNDU1NBdFJlbGF0ZWRLZXl3b3Jkcy5o
YXNPd25Qcm9wZXJ0eSh0b2tlbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2tlblR5cGUgPSAiY3NzLWF0LXJ1bGUiOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoV2ViSW5zcGVjdG9yLlNvdXJjZUNTU1Rva2VuaXplci5NZWRpYVR5cGVzLmhhc093blByb3Bl
cnR5KHRva2VuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9
ICJjc3Mta2V5d29yZCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMudG9rZW5UeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnNvcjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNQcm9wZXJ0eVZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdENoYXIgPSB0b2tlbi5jaGFyQXQo
MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGFyID09PSAiJCIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAic2Nzcy12YXJpYWJsZSI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmaXJzdENoYXIgPT09ICIhIikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJjc3MtYmFuZy1rZXl3
b3JkIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbmRpdGlvbi5h
dEtleXdvcmQgPT09ICJAZXh0ZW5kIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnRva2VuVHlwZSA9ICJjc3Mtc2VsZWN0b3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAodGhpcy5fdmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikgfHwgdGhpcy5f
c2Nzc1ZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkodG9rZW4pKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gImNzcy1rZXl3b3JkIjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbG9yS2V5d29yZHMuaGFzT3duUHJvcGVydHko
dG9rZW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgZG9l
cyBub3QgY29udmVydCB0b2tlbnMgdG9Mb3dlckNhc2UoKSBmb3IgdGhlIHNha2Ugb2Ygc3BlZWQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiY3NzLWNvbG9y
IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gIT09IHRoaXMuX3BhcnNlQ29uZGl0
aW9ucy5QUk9QRVJUWV9WQUxVRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5U
eXBlID0gImNzcy1zZWxlY3RvciI7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7
Ci0gICAgICAgICAgICAgICAgfQotY2FzZSAzMzoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0g
ICAgICAgICAgICBpZiAoeXljaCA8PSAnLicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnIScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDMyOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMzI7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2FzZSA9IDMyOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcgJykgeyBnb3RvQ2FzZSA9IDEzMjsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTMwOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykgeyBnb3RvQ2FzZSA9IDExNjsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJScpIHsgZ290b0Nhc2Ug
PSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDEzMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnLScpIHsgZ290b0Nhc2UgPSAxMzA7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEzMjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcXCcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2UgPSAxMzA7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzwnKSB7IGdvdG9DYXNlID0gMTMyOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMzA7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJz8nKSB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdbJykgeyBnb3RvQ2FzZSA9IDEzMDsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTM0OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdfJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ14nKSB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMzA7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd6JykgeyBnb3RvQ2FzZSA9IDEzMDsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLWNhc2UgMzQ6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29y
KTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDMwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2UgPSAxMjc7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDEyNzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNl
ID0gMzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd6JykgeyBn
b3RvQ2FzZSA9IDEyNzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDMwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMzU6Ci0gICAgICAgICAgICB5
eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICc8
JykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJyAnKSB7IGdvdG9DYXNlID0gMzA7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIicpIHsgZ290b0Nhc2UgPSAxMjQ7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJScpIHsgZ290b0Nhc2Ug
PSAzMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMjQ7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICctJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJywnKSB7IGdvdG9DYXNlID0gMzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDEyNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLicpIHsgZ290
b0Nhc2UgPSAzMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnOScpIHsgZ290b0Nhc2UgPSAxMjQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgeyBnb3RvQ2FzZSA9IDMwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICc/JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJz0nKSB7IGdvdG9D
YXNlID0gMTI0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSAzMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnXFwnKSB7IGdvdG9DYXNlID0gMzA7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyNDsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXycpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdeJykgeyBnb3RvQ2FzZSA9IDMwOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMjQ7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3onKSB7IGdvdG9DYXNlID0gMTI0OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMDsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci1jYXNlIDM2OgotICAgICAgICAgICAgeXlhY2NlcHQgPSAwOwotICAgICAgICAgICAgeXljaCA9
IHRoaXMuX2NoYXJBdChZWU1BUktFUiA9ICsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNo
IDw9ICcuJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
XHInKSB7IGdvdG9DYXNlID0gMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJyAnKSB7IGdvdG9DYXNlID0gMTE4OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMTQ7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ1wnJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJyUnKSB7IGdvdG9DYXNlID0gMTE4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICcmJykgeyBnb3RvQ2FzZSA9IDExNDsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTE2OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoID09ICctJykgeyBnb3RvQ2FzZSA9IDExNDsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTE4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnPScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5Jykg
eyBnb3RvQ2FzZSA9IDExNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnPCcpIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDExNDsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
PycpIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMjA7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ18nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnXicpIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgeyBnb3RvQ2FzZSA9IDExNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsg
Z290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ3onKSB7IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAzNzoKLSAg
ICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
WVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnLicpIHsgZ290
b0Nhc2UgPSA2NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsg
Z290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnOScp
IHsgZ290b0Nhc2UgPSA1MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0g
NTE7IGNvbnRpbnVlOyB9OwotY2FzZSAzODoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFy
QXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0g
MzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNl
ID0gNzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDMwOyBjb250aW51
ZTsgfTsKLWNhc2UgMzk6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDA7Ci0gICAgICAgICAgICB5
eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytjdXJzb3IpOwotICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJyonKSB7IGdvdG9DYXNlID0gMTA2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci1jYXNlIDQwOgotICAgICAgICAgICAgeXlh
Y2NlcHQgPSAxOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChZWU1BUktFUiA9ICsr
Y3Vyc29yKTsKLSAgICAgICAgICAgIHN3aXRjaCAoeXljaCkgewotICAgICAgICAgICAgY2FzZSAn
ISc6Ci0gICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIGNhc2UgJyYnOgotICAgICAg
ICAgICAgY2FzZSAnXCcnOgotICAgICAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICBjYXNl
ICcvJzoKLSAgICAgICAgICAgIGNhc2UgJz0nOgotICAgICAgICAgICAgY2FzZSAnQCc6Ci0gICAg
ICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgIGNhc2UgJ0InOgotICAgICAgICAgICAgY2Fz
ZSAnQyc6Ci0gICAgICAgICAgICBjYXNlICdEJzoKLSAgICAgICAgICAgIGNhc2UgJ0UnOgotICAg
ICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICBjYXNlICdHJzoKLSAgICAgICAgICAgIGNh
c2UgJ0knOgotICAgICAgICAgICAgY2FzZSAnSic6Ci0gICAgICAgICAgICBjYXNlICdLJzoKLSAg
ICAgICAgICAgIGNhc2UgJ0wnOgotICAgICAgICAgICAgY2FzZSAnTSc6Ci0gICAgICAgICAgICBj
YXNlICdOJzoKLSAgICAgICAgICAgIGNhc2UgJ08nOgotICAgICAgICAgICAgY2FzZSAnUCc6Ci0g
ICAgICAgICAgICBjYXNlICdRJzoKLSAgICAgICAgICAgIGNhc2UgJ1InOgotICAgICAgICAgICAg
Y2FzZSAnUyc6Ci0gICAgICAgICAgICBjYXNlICdUJzoKLSAgICAgICAgICAgIGNhc2UgJ1UnOgot
ICAgICAgICAgICAgY2FzZSAnVic6Ci0gICAgICAgICAgICBjYXNlICdXJzoKLSAgICAgICAgICAg
IGNhc2UgJ1gnOgotICAgICAgICAgICAgY2FzZSAnWSc6Ci0gICAgICAgICAgICBjYXNlICdaJzoK
LSAgICAgICAgICAgIGNhc2UgJ1snOgotICAgICAgICAgICAgY2FzZSAnXSc6Ci0gICAgICAgICAg
ICBjYXNlICdhJzoKLSAgICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAgICAgY2FzZSAnZic6
Ci0gICAgICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIGNhc2UgJ2onOgotICAgICAgICAg
ICAgY2FzZSAnbCc6Ci0gICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgIGNhc2UgJ28n
OgotICAgICAgICAgICAgY2FzZSAncSc6Ci0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAg
ICAgIGNhc2UgJ3YnOgotICAgICAgICAgICAgY2FzZSAndyc6Ci0gICAgICAgICAgICBjYXNlICd4
JzoKLSAgICAgICAgICAgIGNhc2UgJ3knOgotICAgICAgICAgICAgY2FzZSAneic6ICAgIHsgZ290
b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICBjYXNlICclJzogICAgeyBnb3Rv
Q2FzZSA9IDY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGNhc2UgJy4nOiAgICB7IGdvdG9D
YXNlID0gNjc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgY2FzZSAnMCc6Ci0gICAgICAgICAg
ICBjYXNlICcxJzoKLSAgICAgICAgICAgIGNhc2UgJzInOgotICAgICAgICAgICAgY2FzZSAnMyc6
Ci0gICAgICAgICAgICBjYXNlICc0JzoKLSAgICAgICAgICAgIGNhc2UgJzUnOgotICAgICAgICAg
ICAgY2FzZSAnNic6Ci0gICAgICAgICAgICBjYXNlICc3JzoKLSAgICAgICAgICAgIGNhc2UgJzgn
OgotICAgICAgICAgICAgY2FzZSAnOSc6ICAgIHsgZ290b0Nhc2UgPSA1MjsgY29udGludWU7IH07
Ci0gICAgICAgICAgICBjYXNlICdIJzogICAgeyBnb3RvQ2FzZSA9IDU0OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIGNhc2UgJ18nOiAgICB7IGdvdG9DYXNlID0gNTU7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgY2FzZSAnYyc6ICAgIHsgZ290b0Nhc2UgPSA1NjsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICBjYXNlICdkJzogICAgeyBnb3RvQ2FzZSA9IDU3OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIGNhc2UgJ2UnOiAgICB7IGdvdG9DYXNlID0gNTg7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgY2FzZSAnZyc6ICAgIHsgZ290b0Nhc2UgPSA1OTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICBjYXNlICdpJzogICAgeyBnb3RvQ2FzZSA9IDYwOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIGNhc2UgJ2snOiAgICB7IGdvdG9DYXNlID0gNjE7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgY2FzZSAnbSc6ICAgIHsgZ290b0Nhc2UgPSA2MjsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICBjYXNlICdwJzogICAgeyBnb3RvQ2FzZSA9IDYzOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgIGNhc2UgJ3InOiAgICB7IGdvdG9DYXNlID0gNjQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgY2FzZSAncyc6ICAgIHsgZ290b0Nhc2UgPSA2NTsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICBjYXNlICd0JzogICAgeyBnb3RvQ2FzZSA9IDY2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
IGRlZmF1bHQ6ICAgIHsgZ290b0Nhc2UgPSA0MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9
Ci1jYXNlIDQxOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
aXNQcm9wZXJ0eVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlw
ZSA9ICJjc3MtbnVtYmVyIjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLWNhc2UgNDI6Ci0gICAgICAgICAgICAr
K2N1cnNvcjsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5
cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9uLnBhcnNl
Q29uZGl0aW9uID09PSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuUFJPUEVSVFkgfHwgdGhpcy5fY29u
ZGl0aW9uLnBhcnNlQ29uZGl0aW9uID09PSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuSU5JVElBTCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFBhcnNlQ29uZGl0aW9uKHRoaXMuX3Bh
cnNlQ29uZGl0aW9ucy5QUk9QRVJUWV9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgfQotY2FzZSA0NDoKLSAgICAgICAgICAgICsrY3Vy
c29yOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9
IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFBhcnNlQ29uZGl0aW9uKHRoaXMu
X2NvbmRpdGlvbi5vcGVuQnJhY2VzID8gdGhpcy5fcGFyc2VDb25kaXRpb25zLlBST1BFUlRZIDog
dGhpcy5fcGFyc2VDb25kaXRpb25zLklOSVRJQUwpOwotICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fY29uZGl0aW9uLmF0S2V5d29yZDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9Ci1jYXNlIDQ2OgotICAgICAgICAgICAgKytjdXJz
b3I7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0g
ImJsb2NrLXN0YXJ0IjsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZGl0aW9uLm9wZW5C
cmFjZXMgPSAodGhpcy5fY29uZGl0aW9uLm9wZW5CcmFjZXMgfHwgMCkgKyAxOwotICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uID09PSB0aGlzLl9w
YXJzZUNvbmRpdGlvbnMuQVRfTUVESUFfUlVMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3NldFBhcnNlQ29uZGl0aW9uKHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklUSUFMKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0
UGFyc2VDb25kaXRpb24odGhpcy5fcGFyc2VDb25kaXRpb25zLlBST1BFUlRZKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9Ci1jYXNlIDQ4Ogot
ICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMudG9rZW5UeXBlID0gImJsb2NrLWVuZCI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9jb25kaXRpb24ub3BlbkJyYWNlcyA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAt
LXRoaXMuX2NvbmRpdGlvbi5vcGVuQnJhY2VzOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9z
ZXRQYXJzZUNvbmRpdGlvbih0aGlzLl9jb25kaXRpb24ub3BlbkJyYWNlcyA/IHRoaXMuX3BhcnNl
Q29uZGl0aW9ucy5QUk9QRVJUWSA6IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklUSUFMKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbi5hdEtleXdvcmQ7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgfQotY2FzZSA1
MDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJB
dChjdXJzb3IpOwotY2FzZSA1MToKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICc8JykgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJyAnKSB7IGdvdG9DYXNlID0gMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnIicpIHsgZ290b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICclJykgeyBnb3RvQ2FzZSA9IDMyOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDUwOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcsJykgeyBn
b3RvQ2FzZSA9IDMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLicpIHsgZ290b0Nhc2UgPSAzMjsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsg
Z290b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdv
dG9DYXNlID0gMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnXScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJz8nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnPScpIHsgZ290b0Nhc2UgPSA1MDsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMzI7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPT0gJ1xcJykgeyBnb3RvQ2FzZSA9IDMyOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnXycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdeJykgeyBnb3RvQ2FzZSA9IDMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsgZ290b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsg
Z290b0Nhc2UgPSAzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAneicpIHsgZ290b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSA1MjoKLSAgICAg
ICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgIFlZTUFSS0VSID0gKytjdXJzb3I7Ci0g
ICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHl5Y2gpIHsKLSAgICAgICAgICAgIGNhc2UgJyEnOgotICAgICAgICAgICAgY2FzZSAnIic6
Ci0gICAgICAgICAgICBjYXNlICcmJzoKLSAgICAgICAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAg
ICAgIGNhc2UgJy0nOgotICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICBjYXNlICc9
JzoKLSAgICAgICAgICAgIGNhc2UgJ0AnOgotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAg
ICAgICBjYXNlICdCJzoKLSAgICAgICAgICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAgY2FzZSAn
RCc6Ci0gICAgICAgICAgICBjYXNlICdFJzoKLSAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAg
ICAgICAgY2FzZSAnRyc6Ci0gICAgICAgICAgICBjYXNlICdJJzoKLSAgICAgICAgICAgIGNhc2Ug
J0onOgotICAgICAgICAgICAgY2FzZSAnSyc6Ci0gICAgICAgICAgICBjYXNlICdMJzoKLSAgICAg
ICAgICAgIGNhc2UgJ00nOgotICAgICAgICAgICAgY2FzZSAnTic6Ci0gICAgICAgICAgICBjYXNl
ICdPJzoKLSAgICAgICAgICAgIGNhc2UgJ1AnOgotICAgICAgICAgICAgY2FzZSAnUSc6Ci0gICAg
ICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgY2Fz
ZSAnVCc6Ci0gICAgICAgICAgICBjYXNlICdVJzoKLSAgICAgICAgICAgIGNhc2UgJ1YnOgotICAg
ICAgICAgICAgY2FzZSAnVyc6Ci0gICAgICAgICAgICBjYXNlICdYJzoKLSAgICAgICAgICAgIGNh
c2UgJ1knOgotICAgICAgICAgICAgY2FzZSAnWic6Ci0gICAgICAgICAgICBjYXNlICdbJzoKLSAg
ICAgICAgICAgIGNhc2UgJ10nOgotICAgICAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBj
YXNlICdiJzoKLSAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgY2FzZSAnaCc6Ci0g
ICAgICAgICAgICBjYXNlICdqJzoKLSAgICAgICAgICAgIGNhc2UgJ2wnOgotICAgICAgICAgICAg
Y2FzZSAnbic6Ci0gICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgIGNhc2UgJ3EnOgot
ICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICd2JzoKLSAgICAgICAgICAg
IGNhc2UgJ3cnOgotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICBjYXNlICd5JzoK
LSAgICAgICAgICAgIGNhc2UgJ3onOiAgICB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgY2FzZSAnJSc6ICAgIHsgZ290b0Nhc2UgPSA2OTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICBjYXNlICcuJzogICAgeyBnb3RvQ2FzZSA9IDY3OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIGNhc2UgJzAnOgotICAgICAgICAgICAgY2FzZSAnMSc6Ci0gICAgICAgICAgICBj
YXNlICcyJzoKLSAgICAgICAgICAgIGNhc2UgJzMnOgotICAgICAgICAgICAgY2FzZSAnNCc6Ci0g
ICAgICAgICAgICBjYXNlICc1JzoKLSAgICAgICAgICAgIGNhc2UgJzYnOgotICAgICAgICAgICAg
Y2FzZSAnNyc6Ci0gICAgICAgICAgICBjYXNlICc4JzoKLSAgICAgICAgICAgIGNhc2UgJzknOiAg
ICB7IGdvdG9DYXNlID0gNTI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgY2FzZSAnSCc6ICAg
IHsgZ290b0Nhc2UgPSA1NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICBjYXNlICdfJzogICAg
eyBnb3RvQ2FzZSA9IDU1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGNhc2UgJ2MnOiAgICB7
IGdvdG9DYXNlID0gNTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgY2FzZSAnZCc6ICAgIHsg
Z290b0Nhc2UgPSA1NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICBjYXNlICdlJzogICAgeyBn
b3RvQ2FzZSA9IDU4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGNhc2UgJ2cnOiAgICB7IGdv
dG9DYXNlID0gNTk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgY2FzZSAnaSc6ICAgIHsgZ290
b0Nhc2UgPSA2MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICBjYXNlICdrJzogICAgeyBnb3Rv
Q2FzZSA9IDYxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGNhc2UgJ20nOiAgICB7IGdvdG9D
YXNlID0gNjI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgY2FzZSAncCc6ICAgIHsgZ290b0Nh
c2UgPSA2MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICBjYXNlICdyJzogICAgeyBnb3RvQ2Fz
ZSA9IDY0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGNhc2UgJ3MnOiAgICB7IGdvdG9DYXNl
ID0gNjU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgY2FzZSAndCc6ICAgIHsgZ290b0Nhc2Ug
PSA2NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICBkZWZhdWx0OiAgICB7IGdvdG9DYXNlID0g
NDE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSA1NDoKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3on
KSB7IGdvdG9DYXNlID0gNjU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDUxOyBjb250aW51ZTsgfTsKLWNhc2UgNTU6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdfJykgeyBnb3RvQ2FzZSA9
IDEwMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVl
OyB9OwotY2FzZSA1NjoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3Ip
OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ20nKSB7IGdvdG9DYXNlID0gNjU7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLWNhc2UgNTc6
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAg
IGlmICh5eWNoID09ICdlJykgeyBnb3RvQ2FzZSA9IDEwMjsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICB7IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9OwotY2FzZSA1ODoKLSAgICAgICAgICAg
IHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
J20nKSB7IGdvdG9DYXNlID0gNjU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2gg
PT0gJ3gnKSB7IGdvdG9DYXNlID0gNjU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3Rv
Q2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLWNhc2UgNTk6Ci0gICAgICAgICAgICB5eWNoID0gdGhp
cy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdyJykgeyBnb3Rv
Q2FzZSA9IDEwMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNTE7IGNv
bnRpbnVlOyB9OwotY2FzZSA2MDoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytj
dXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ24nKSB7IGdvdG9DYXNlID0gNjU7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLWNh
c2UgNjE6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAg
ICAgICAgIGlmICh5eWNoID09ICdIJykgeyBnb3RvQ2FzZSA9IDk5OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIHsgZ290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci1jYXNlIDYyOgotICAgICAg
ICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXlj
aCA9PSAnbScpIHsgZ290b0Nhc2UgPSA2NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAo
eXljaCA9PSAncycpIHsgZ290b0Nhc2UgPSA2NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7
IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9OwotY2FzZSA2MzoKLSAgICAgICAgICAgIHl5Y2gg
PSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3MnKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2MnKSB7IGdvdG9DYXNlID0gNjU7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd0JykgeyBn
b3RvQ2FzZSA9IDY1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAn
eCcpIHsgZ290b0Nhc2UgPSA2NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3Rv
Q2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgNjQ6Ci0gICAgICAg
ICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNo
ID09ICdhJykgeyBnb3RvQ2FzZSA9IDk3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5
eWNoID09ICdlJykgeyBnb3RvQ2FzZSA9IDk4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsg
Z290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci1jYXNlIDY1OgotICAgICAgICAgICAgeXljaCA9
IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnPCcpIHsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICcgJykgeyBnb3RvQ2FzZSA9IDQxOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJScpIHsgZ290b0Nhc2UgPSA0MTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA1MDsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLCcp
IHsgZ290b0Nhc2UgPSA0MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy4nKSB7IGdvdG9DYXNlID0g
NDE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzkn
KSB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDQxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc/Jykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJz0nKSB7IGdvdG9DYXNlID0gNTA7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQxOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoID09ICdcXCcpIHsgZ290b0Nhc2UgPSA0MTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ18nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnXicpIHsgZ290b0Nhc2UgPSA0MTsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2An
KSB7IGdvdG9DYXNlID0gNDE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ3onKSB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgNjY6Ci0g
ICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlm
ICh5eWNoID09ICd1JykgeyBnb3RvQ2FzZSA9IDk1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci1jYXNlIDY3OgotICAgICAgICAgICAgeXlj
aCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnLycp
IHsgZ290b0Nhc2UgPSA2ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAn
OScpIHsgZ290b0Nhc2UgPSA3MDsgY29udGludWU7IH07Ci1jYXNlIDY4OgotICAgICAgICAgICAg
Y3Vyc29yID0gWVlNQVJLRVI7Ci0gICAgICAgICAgICBpZiAoeXlhY2NlcHQgPD0gMCkgewotICAg
ICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA0MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB9Ci1jYXNlIDY5OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgr
K2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNDE7IGNvbnRpbnVlOyB9OwotY2Fz
ZSA3MDoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgIFlZTUFSS0VSID0g
KytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAg
ICAgICAgICBpZiAoeXljaCA8PSAnZicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
SCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnJScpIHsgZ290b0Nhc2UgPSA2OTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNDE7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gNzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0cnKSB7IGdvdG9DYXNlID0gNDE7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDgyOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdiJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ18nKSB7IGdvdG9DYXNlID0gNzQ7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQxOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdjJykgeyBnb3RvQ2FzZSA9IDc2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdkJykgeyBnb3RvQ2FzZSA9IDc5OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdmJykgeyBnb3RvQ2FzZSA9IDQxOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ20nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdpJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ2cnKSB7IGdvdG9DYXNlID0gODA7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2gnKSB7IGdvdG9DYXNlID0gNDE7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDc4OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoID09ICdrJykgeyBnb3RvQ2FzZSA9IDgzOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdsJykgeyBnb3RvQ2FzZSA9IDQxOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA3NzsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAncScpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdwJykgeyBnb3RvQ2FzZSA9IDc1OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA0MTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAncicpIHsgZ290b0Nhc2UgPSA3MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAncycpIHsgZ290b0Nhc2UgPSA2OTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndCcpIHsgZ290b0Nhc2UgPSA4MTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNDE7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0g
ICAgICAgICAgICBpZiAoeXljaCA9PSAnbScpIHsgZ290b0Nhc2UgPSA2OTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAneCcpIHsgZ290b0Nhc2UgPSA2OTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNjg7IGNvbnRpbnVlOyB9OwotY2FzZSA3MzoK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAg
aWYgKHl5Y2ggPT0gJ2EnKSB7IGdvdG9DYXNlID0gOTM7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ2UnKSB7IGdvdG9DYXNlID0gOTQ7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLWNhc2UgNzQ6Ci0gICAgICAgICAg
ICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09
ICdfJykgeyBnb3RvQ2FzZSA9IDkwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSA2ODsgY29udGludWU7IH07Ci1jYXNlIDc1OgotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAncycpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA9PSAnYycpIHsgZ290b0Nhc2UgPSA2OTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3QnKSB7IGdvdG9DYXNl
ID0gNjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICd4JykgeyBn
b3RvQ2FzZSA9IDY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
Njg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSA3NjoKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ20n
KSB7IGdvdG9DYXNlID0gNjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDY4OyBjb250aW51ZTsgfTsKLWNhc2UgNzc6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdtJykgeyBnb3RvQ2FzZSA9
IDY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdzJykgeyBnb3RvQ2Fz
ZSA9IDY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA2ODsgY29udGlu
dWU7IH07Ci1jYXNlIDc4OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnbicpIHsgZ290b0Nhc2UgPSA2OTsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNjg7IGNvbnRpbnVlOyB9OwotY2FzZSA3
OToKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ2UnKSB7IGdvdG9DYXNlID0gODk7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLWNhc2UgODA6Ci0gICAgICAgICAg
ICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09
ICdyJykgeyBnb3RvQ2FzZSA9IDg3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSA2ODsgY29udGludWU7IH07Ci1jYXNlIDgxOgotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAndScpIHsgZ290b0Nh
c2UgPSA4NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNjg7IGNvbnRp
bnVlOyB9OwotY2FzZSA4MjoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJz
b3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3onKSB7IGdvdG9DYXNlID0gNjk7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLWNhc2Ug
ODM6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAg
ICAgIGlmICh5eWNoICE9ICdIJykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5
Y2ggPT0gJ3onKSB7IGdvdG9DYXNlID0gNjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLWNhc2UgODU6Ci0gICAgICAgICAgICB5eWNoID0g
dGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdyJykgeyBn
b3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFy
QXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ24nKSB7IGdvdG9DYXNlID0g
Njk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsg
fTsKLWNhc2UgODc6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsK
LSAgICAgICAgICAgIGlmICh5eWNoICE9ICdhJykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ2QnKSB7IGdvdG9DYXNlID0gNjk7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLWNhc2UgODk6Ci0gICAgICAgICAg
ICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09
ICdnJykgeyBnb3RvQ2FzZSA9IDY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSA2ODsgY29udGludWU7IH07Ci1jYXNlIDkwOgotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCAhPSAncScpIHsgZ290b0Nh
c2UgPSA2ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsr
Y3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdlJykgeyBnb3RvQ2FzZSA9IDY4OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwot
ICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ20nKSB7IGdvdG9DYXNlID0gNjk7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLWNhc2UgOTM6Ci0g
ICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlm
ICh5eWNoID09ICdkJykgeyBnb3RvQ2FzZSA9IDY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSA2ODsgY29udGludWU7IH07Ci1jYXNlIDk0OgotICAgICAgICAgICAgeXlj
aCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnbScp
IHsgZ290b0Nhc2UgPSA2OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0g
Njg7IGNvbnRpbnVlOyB9OwotY2FzZSA5NToKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFy
QXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ3InKSB7IGdvdG9DYXNlID0g
NTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnbicpIHsgZ290b0Nhc2UgPSA2NTsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9OwotY2FzZSA5
NzoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ2QnKSB7IGdvdG9DYXNlID0gNjU7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLWNhc2UgOTg6Ci0gICAgICAgICAg
ICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09
ICdtJykgeyBnb3RvQ2FzZSA9IDY1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSA1MTsgY29udGludWU7IH07Ci1jYXNlIDk5OgotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAneicpIHsgZ290b0Nh
c2UgPSA2NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNTE7IGNvbnRp
bnVlOyB9OwotY2FzZSAxMDA6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vy
c29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdhJykgeyBnb3RvQ2FzZSA9IDUxOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAg
ICAgICAgICAgaWYgKHl5Y2ggPT0gJ2QnKSB7IGdvdG9DYXNlID0gNjU7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLWNhc2UgMTAyOgotICAg
ICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAo
eXljaCA9PSAnZycpIHsgZ290b0Nhc2UgPSA2NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7
IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9OwotY2FzZSAxMDM6Ci0gICAgICAgICAgICB5eWNo
ID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdxJykg
eyBnb3RvQ2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9j
aGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ2UnKSB7IGdvdG9DYXNl
ID0gNTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1
cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnbScpIHsgZ290b0Nhc2UgPSA2NTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9OwotY2Fz
ZSAxMDY6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9j
aGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTEwOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTA2OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2Fz
ZSA9IDExMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJyonKSB7
IGdvdG9DYXNlID0gMTA2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMTA4Ogot
ICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1
cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnKicpIHsgZ290b0Nhc2UgPSAxMDg7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy8nKSB7IGdvdG9DYXNlID0gMTEy
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMDY7IGNvbnRpbnVlOyB9
OwotY2FzZSAxMTA6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0
TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuQ09NTUVOVCk7Ci0gICAgICAgICAgICB7
IHRoaXMudG9rZW5UeXBlID0gImNzcy1jb21tZW50IjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAx
MTI6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUg
PSAiY3NzLWNvbW1lbnQiOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDExNDoKLSAgICAgICAgICAg
IHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIFlZTUFSS0VSID0gKytjdXJzb3I7Ci0gICAgICAg
ICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8
PSAnLicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIicpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xy
JykgeyBnb3RvQ2FzZSA9IDMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICcgJykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdcJycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICclJykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnJicpIHsgZ290b0Nhc2UgPSAxMTQ7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJy0nKSB7IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICc9JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7
IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICc8JykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc/
JykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnWycpIHsgZ290b0Nhc2UgPSAxMTQ7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyMDsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnXycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
ID09ICdeJykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykgeyBn
b3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAneicpIHsgZ290b0Nhc2UgPSAxMTQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDExNjoKLSAg
ICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgaWYgKCh5eWNoID0gdGhpcy5fY2hhckF0
KGN1cnNvcikpIDw9ICc8JykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyAnKSB7IGdvdG9DYXNlID0gMTE3OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7IGdvdG9D
YXNlID0gNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAn
JicpIHsgZ290b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy0nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA+PSAnLScpIHsgZ290b0Nhc2UgPSA1MDsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnLicpIHsgZ290b0Nhc2UgPSAxMTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXScpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnPScpIHsgZ290b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAn
XFwnKSB7IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ18nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnXycpIHsgZ290
b0Nhc2UgPSA1MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAxMTc7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3onKSB7
IGdvdG9DYXNlID0gNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAxMTc6Ci0gICAgICAgICAgICB7IHJl
dHVybiB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3IsIHRydWUpOyB9Ci1jYXNlIDExODoKLSAgICAg
ICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3Ip
OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSA2ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ1xmJykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1wnJykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnJicpIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTIzOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAnXFwn
KSB7IGdvdG9DYXNlID0gMTE4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci1jYXNlIDEyMDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAg
eXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2En
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyEnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdcdCcpIHsgZ290b0Nhc2UgPSA2ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAnXHInKSB7
IGdvdG9DYXNlID0gNjg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1wn
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7IGdvdG9DYXNl
ID0gMTE4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICcmJykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xcJykgeyBnb3Rv
Q2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9D
YXNlID0gNjg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAncScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYicpIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2UnKSB7IGdvdG9D
YXNlID0gNjg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnbicpIHsgZ290b0Nhc2UgPSAxMTg7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd0JykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPT0gJ3MnKSB7IGdvdG9DYXNlID0gNjg7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAndicpIHsgZ290b0Nhc2UgPSAxMTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsr
Y3Vyc29yOwotICAgICAgICAgICAgdGhpcy5zZXRMZXhDb25kaXRpb24odGhpcy5fbGV4Q29uZGl0
aW9ucy5TU1RSSU5HKTsKLSAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMuX3N0cmluZ1Rva2VuKGN1
cnNvcik7IH0KLWNhc2UgMTIzOgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1
cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMTE3OyBjb250aW51ZTsgfTsKLWNhc2Ug
MTI0OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnPCcpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICcgJykgeyBnb3RvQ2FzZSA9IDEyNjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICciJykgeyBnb3RvQ2FzZSA9IDEyNDsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoID49ICcmJykgeyBnb3RvQ2FzZSA9IDEyNDsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnLScpIHsg
Z290b0Nhc2UgPSAxMjQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy4nKSB7IGdvdG9DYXNlID0g
MTI2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5
JykgeyBnb3RvQ2FzZSA9IDEyNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICddJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnPycp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc9JykgeyBnb3RvQ2FzZSA9
IDEyNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAnXFwnKSB7IGdvdG9DYXNlID0gMTI0OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdfJykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPj0gJ18nKSB7IGdvdG9DYXNlID0gMTI0OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdgJykgeyBnb3RvQ2FzZSA9IDEyNjsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAneicpIHsgZ290b0Nhc2UgPSAxMjQ7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotY2FzZSAxMjY6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNv
bmRpdGlvbi5JTklUSUFMIHx8IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0gdGhp
cy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uLkFUX1JVTEUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9zZXRQYXJzZUNvbmRpdGlvbih0aGlzLl9wYXJzZUNvbmRpdGlvbnMuUFJPUEVS
VFkpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJzY3NzLXZhcmlhYmxl
IjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9
Ci1jYXNlIDEyNzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMTI5OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2UgPSAxMjc7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnWicpIHsgZ290b0Nhc2UgPSAxMjc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdgJykgeyBnb3RvQ2FzZSA9IDEyOTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ3onKSB7IGdvdG9DYXNlID0gMTI3OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIH0KLWNhc2UgMTI5OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5faXNQcm9wZXJ0eVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRva2VuVHlwZSA9ICJjc3MtY29sb3IiOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0
aW9ucy5JTklUSUFMKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAi
Y3NzLXNlbGVjdG9yIjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2tlblR5cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLWNhc2UgMTMwOgotICAgICAgICAgICAgeXlh
Y2NlcHQgPSAwOwotICAgICAgICAgICAgWVlNQVJLRVIgPSArK2N1cnNvcjsKLSAgICAgICAgICAg
IHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICcu
JykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICchJykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnXGYnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykg
eyBnb3RvQ2FzZSA9IDMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoID49ICchJykgeyBnb3RvQ2FzZSA9IDEzMDsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnIicpIHsgZ290b0Nhc2UgPSAxMTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPj0gJyYnKSB7IGdvdG9DYXNlID0gMTMwOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoID09ICctJykgeyBnb3RvQ2FzZSA9IDEzMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsg
Z290b0Nhc2UgPSAxMzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPj0gJz0nKSB7IGdvdG9DYXNlID0gMTMwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc/
JykgeyBnb3RvQ2FzZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnWycpIHsgZ290b0Nhc2UgPSAxMzA7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEzNDsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnXycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
ICE9ICdeJykgeyBnb3RvQ2FzZSA9IDEzMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsg
Z290b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ3onKSB7IGdvdG9DYXNlID0gMTMwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMTMyOgot
ICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1
cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnXHInKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNjg7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIicpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyEnKSB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyMzsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0g
J1xcJykgeyBnb3RvQ2FzZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotY2FzZSAxMzQ6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAg
ICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdhJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICchJykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnXHQnKSB7IGdvdG9DYXNlID0gNjg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ1xy
JykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdcJycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykgeyBnb3Rv
Q2FzZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnJicpIHsgZ290b0Nhc2UgPSA2ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcXCcpIHsg
Z290b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ3EnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2InKSB7IGdvdG9DYXNlID0gMTMyOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdlJykgeyBn
b3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ24nKSB7IGdvdG9DYXNlID0gMTMy
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA2ODsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndCcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoID09ICdzJykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPT0gJ3YnKSB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA2ODsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENv
bmRpdGlvbnMuRFNUUklORyk7Ci0gICAgICAgICAgICB7IHJldHVybiB0aGlzLl9zdHJpbmdUb2tl
bihjdXJzb3IpOyB9Ci0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwot
Y2FzZSB0aGlzLmNhc2VfU1NUUklORzoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
Y3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdccicpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTQxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7IGdvdG9DYXNlID0gMTQwOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1wnJykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJicpIHsgZ290b0Nhc2UgPSAxNDA7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQzOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnXFwnKSB7IGdvdG9DYXNlID0gMTQ1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDE0MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotY2FzZSAxMzk6Ci0gICAgICAgICAgICB7IHJldHVybiB0aGlzLl9zdHJp
bmdUb2tlbihjdXJzb3IpOyB9Ci1jYXNlIDE0MDoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0g
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQ3OyBjb250aW51ZTsgfTsKLWNhc2UgMTQxOgotICAg
ICAgICAgICAgKytjdXJzb3I7Ci1jYXNlIDE0MjoKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5
cGUgPSBudWxsOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDE0MzoKLSAgICAgICAgICAgICsrY3Vy
c29yOwotY2FzZSAxNDQ6Ci0gICAgICAgICAgICB0aGlzLnNldExleENvbmRpdGlvbih0aGlzLl9s
ZXhDb25kaXRpb25zLklOSVRJQUwpOwotICAgICAgICAgICAgeyByZXR1cm4gdGhpcy5fc3RyaW5n
VG9rZW4oY3Vyc29yLCB0cnVlKTsgfQotY2FzZSAxNDU6Ci0gICAgICAgICAgICB5eWNoID0gdGhp
cy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdlJykgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJyInKSB7IGdvdG9DYXNlID0gMTQ2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJyYnKSB7IGdvdG9DYXNlID0gMTQyOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnWycpIHsgZ290
b0Nhc2UgPSAxNDI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ2InKSB7IGdvdG9DYXNlID0gMTQy
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3InKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdtJykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPj0gJ2cnKSB7IGdvdG9DYXNlID0gMTQyOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICduJykgeyBnb3RvQ2FzZSA9IDE0NjsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAncScpIHsgZ290b0Nhc2UgPSAxNDI7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3QnKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAncycpIHsgZ290b0Nhc2UgPSAxNDI7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggIT0gJ3YnKSB7IGdvdG9DYXNlID0gMTQyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMTQ2OgotICAg
ICAgICAgICAgeXlhY2NlcHQgPSAwOwotICAgICAgICAgICAgWVlNQVJLRVIgPSArK2N1cnNvcjsK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLWNhc2UgMTQ3OgotICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoID09
ICdcbicpIHsgZ290b0Nhc2UgPSAxMzk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdcZicpIHsgZ290b0Nhc2UgPSAxNDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSAxMzk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICcmJykgeyBnb3RvQ2FzZSA9IDE0NjsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoICE9ICdcXCcpIHsg
Z290b0Nhc2UgPSAxNDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2No
YXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2UnKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ1wnJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnIicpIHsgZ290b0Nhc2UgPSAxNDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA+PSAnXCcnKSB7IGdvdG9DYXNlID0gMTQ2OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwn
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnXFwnKSB7IGdvdG9DYXNl
ID0gMTQ2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdiJykgeyBnb3RvQ2FzZSA9IDE0NjsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdyJykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnbScpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdmJykgeyBnb3RvQ2FzZSA9IDE0NjsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnbicpIHsgZ290b0Nhc2UgPSAxNDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPj0gJ3InKSB7IGdvdG9DYXNlID0gMTQ2OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd0JykgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPj0gJ3QnKSB7IGdvdG9DYXNlID0gMTQ2OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09
ICd2JykgeyBnb3RvQ2FzZSA9IDE0NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJzb3Ig
PSBZWU1BUktFUjsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMzk7IGNvbnRpbnVlOyB9Owot
Y2FzZSAxNTA6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlz
Ll9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNDQ7IGNvbnRpbnVl
OyB9OwotICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUNTU1Rva2VuaXplci5yZTJqcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlQ1NTVG9rZW5pemVyLnJl
MmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDMzY2M3Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlQ1NTVG9rZW5pemVyLnJl
MmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBHZW5lcmF0ZSBqcyBmaWxlIGFz
IGZvbGxvd3M6Ci0KLS8qCi1yZTJjIC1pc2MgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIucmUyanMgXAotICB8IHNlZCAnc3xeeXlcKFteOl0qXCkq
XDp8Y2FzZSBcMTp8JyBcCi0gIHwgc2VkICdzfFsqXWN1cnNvclsrXVsrXXx0aGlzLl9jaGFyQXQo
Y3Vyc29yKyspfCcgXAotICB8IHNlZCAnc3xbWypdWytdWytdY3Vyc29yfHRoaXMuX2NoYXJBdCgr
K2N1cnNvcil8JyBcCi0gIHwgc2VkICdzfFsqXWN1cnNvcnx0aGlzLl9jaGFyQXQoY3Vyc29yKXwn
IFwKLSAgfCBzZWQgJ3N8eXljaCA9IFwqXChbXjtdKlwpfHl5Y2ggPSB0aGlzLl9jaGFyQXRcMXwn
IFwKLSAgfCBzZWQgJ3N8Z290byBjYXNlIFwoW147XSpcKXx7IGdvdG9DYXNlID0gXDE7IGNvbnRp
bnVlOyB9fCcgXAotICB8IHNlZCAnc3x5eWNoIDw9IFwoMHhbMC05YS1mQS1GXSpcKXx5eWNoIFw8
XD0gU3RyaW5nLmZyb21DaGFyQ29kZShcMSl8JyBcCi0gIHwgc2VkICdzfHVuc2lnbmVkXCBpbnR8
dmFyfCcgXAotICB8IHNlZCAnc3x2YXJcIHl5Y2h8Y2FzZSAxOiB2YXIgeXljaHwnID4gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIuanMKLSovCi0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlNvdXJjZVRv
a2VuaXplcn0KLSAqLwotV2ViSW5zcGVjdG9yLlNvdXJjZUNTU1Rva2VuaXplciA9IGZ1bmN0aW9u
KCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLmNhbGwodGhpcyk7Ci0KLSAg
ICB0aGlzLl9wcm9wZXJ0eUtleXdvcmRzID0gV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLmNzc1By
b3BlcnRpZXNNZXRhaW5mb0tleVNldCgpOwotICAgIHRoaXMuX2NvbG9yS2V5d29yZHMgPSBXZWJJ
bnNwZWN0b3IuQ1NTTWV0YWRhdGEuY29sb3JzKCk7Ci0KLSAgICB0aGlzLl92YWx1ZUtleXdvcmRz
ID0gWwotICAgICAgICAiYWJvdmUiLCAiYWJzb2x1dGUiLCAiYWN0aXZlYm9yZGVyIiwgImFjdGl2
ZWNhcHRpb24iLCAiYWZhciIsICJhZnRlci13aGl0ZS1zcGFjZSIsICJhaGVhZCIsICJhbGlhcyIs
ICJhbGwiLCAiYWxsLXNjcm9sbCIsCi0gICAgICAgICJhbHRlcm5hdGUiLCAiYWx3YXlzIiwgImFt
aGFyaWMiLCAiYW1oYXJpYy1hYmVnZWRlIiwgImFudGlhbGlhc2VkIiwgImFwcHdvcmtzcGFjZSIs
ICJhcmFiaWMtaW5kaWMiLCAiYXJtZW5pYW4iLCAiYXN0ZXJpc2tzIiwKLSAgICAgICAgImF1dG8i
LCAiYXZvaWQiLCAiYmFja2dyb3VuZCIsICJiYWNrd2FyZHMiLCAiYmFzZWxpbmUiLCAiYmVsb3ci
LCAiYmlkaS1vdmVycmlkZSIsICJiaW5hcnkiLCAiYmVuZ2FsaSIsICJibGluayIsCi0gICAgICAg
ICJibG9jayIsICJibG9jay1heGlzIiwgImJvbGQiLCAiYm9sZGVyIiwgImJvcmRlciIsICJib3Jk
ZXItYm94IiwgImJvdGgiLCAiYm90dG9tIiwgImJyZWFrLWFsbCIsICJicmVhay13b3JkIiwgImJ1
dHRvbiIsCi0gICAgICAgICJidXR0b24tYmV2ZWwiLCAiYnV0dG9uZmFjZSIsICJidXR0b25oaWdo
bGlnaHQiLCAiYnV0dG9uc2hhZG93IiwgImJ1dHRvbnRleHQiLCAiY2FtYm9kaWFuIiwgImNhcGl0
YWxpemUiLCAiY2Fwcy1sb2NrLWluZGljYXRvciIsCi0gICAgICAgICJjYXB0aW9uIiwgImNhcHRp
b250ZXh0IiwgImNhcmV0IiwgImNlbGwiLCAiY2VudGVyIiwgImNoZWNrYm94IiwgImNpcmNsZSIs
ICJjamstZWFydGhseS1icmFuY2giLCAiY2prLWhlYXZlbmx5LXN0ZW0iLCAiY2prLWlkZW9ncmFw
aGljIiwKLSAgICAgICAgImNsZWFyIiwgImNsaXAiLCAiY2xvc2UtcXVvdGUiLCAiY29sLXJlc2l6
ZSIsICJjb2xsYXBzZSIsICJjb21wYWN0IiwgImNvbmRlbnNlZCIsICJjb250YWluIiwgImNvbnRl
bnQiLCAiY29udGVudC1ib3giLCAiY29udGV4dC1tZW51IiwKLSAgICAgICAgImNvbnRpbnVvdXMi
LCAiY29weSIsICJjb3ZlciIsICJjcm9wIiwgImNyb3NzIiwgImNyb3NzaGFpciIsICJjdXJyZW50
Y29sb3IiLCAiY3Vyc2l2ZSIsICJkYXNoZWQiLCAiZGVjaW1hbCIsICJkZWNpbWFsLWxlYWRpbmct
emVybyIsICJkZWZhdWx0IiwKLSAgICAgICAgImRlZmF1bHQtYnV0dG9uIiwgImRlc3RpbmF0aW9u
LWF0b3AiLCAiZGVzdGluYXRpb24taW4iLCAiZGVzdGluYXRpb24tb3V0IiwgImRlc3RpbmF0aW9u
LW92ZXIiLCAiZGV2YW5hZ2FyaSIsICJkaXNjIiwgImRpc2NhcmQiLCAiZG9jdW1lbnQiLAotICAg
ICAgICAiZG90LWRhc2giLCAiZG90LWRvdC1kYXNoIiwgImRvdHRlZCIsICJkb3VibGUiLCAiZG93
biIsICJlLXJlc2l6ZSIsICJlYXNlIiwgImVhc2UtaW4iLCAiZWFzZS1pbi1vdXQiLCAiZWFzZS1v
dXQiLCAiZWxlbWVudCIsCi0gICAgICAgICJlbGxpcHNpcyIsICJlbWJlZCIsICJlbmQiLCAiZXRo
aW9waWMiLCAiZXRoaW9waWMtYWJlZ2VkZSIsICJldGhpb3BpYy1hYmVnZWRlLWFtLWV0IiwgImV0
aGlvcGljLWFiZWdlZGUtZ2V6IiwKLSAgICAgICAgImV0aGlvcGljLWFiZWdlZGUtdGktZXIiLCAi
ZXRoaW9waWMtYWJlZ2VkZS10aS1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1hYS1lciIsICJldGhp
b3BpYy1oYWxlaGFtZS1hYS1ldCIsCi0gICAgICAgICJldGhpb3BpYy1oYWxlaGFtZS1hbS1ldCIs
ICJldGhpb3BpYy1oYWxlaGFtZS1nZXoiLCAiZXRoaW9waWMtaGFsZWhhbWUtb20tZXQiLCAiZXRo
aW9waWMtaGFsZWhhbWUtc2lkLWV0IiwKLSAgICAgICAgImV0aGlvcGljLWhhbGVoYW1lLXNvLWV0
IiwgImV0aGlvcGljLWhhbGVoYW1lLXRpLWVyIiwgImV0aGlvcGljLWhhbGVoYW1lLXRpLWV0Iiwg
ImV0aGlvcGljLWhhbGVoYW1lLXRpZyIsICJldy1yZXNpemUiLCAiZXhwYW5kZWQiLAotICAgICAg
ICAiZXh0cmEtY29uZGVuc2VkIiwgImV4dHJhLWV4cGFuZGVkIiwgImZhbnRhc3kiLCAiZmFzdCIs
ICJmaWxsIiwgImZpeGVkIiwgImZsYXQiLCAiZm9vdG5vdGVzIiwgImZvcndhcmRzIiwgImZyb20i
LCAiZ2VvbWV0cmljUHJlY2lzaW9uIiwKLSAgICAgICAgImdlb3JnaWFuIiwgImdyYXl0ZXh0Iiwg
Imdyb292ZSIsICJndWphcmF0aSIsICJndXJtdWtoaSIsICJoYW5kIiwgImhhbmd1bCIsICJoYW5n
dWwtY29uc29uYW50IiwgImhlYnJldyIsICJoZWxwIiwKLSAgICAgICAgImhpZGRlbiIsICJoaWRl
IiwgImhpZ2hlciIsICJoaWdobGlnaHQiLCAiaGlnaGxpZ2h0dGV4dCIsICJoaXJhZ2FuYSIsICJo
aXJhZ2FuYS1pcm9oYSIsICJob3Jpem9udGFsIiwgImhzbCIsICJoc2xhIiwgImljb24iLCAiaWdu
b3JlIiwKLSAgICAgICAgImluYWN0aXZlYm9yZGVyIiwgImluYWN0aXZlY2FwdGlvbiIsICJpbmFj
dGl2ZWNhcHRpb250ZXh0IiwgImluZmluaXRlIiwgImluZm9iYWNrZ3JvdW5kIiwgImluZm90ZXh0
IiwgImluaGVyaXQiLCAiaW5pdGlhbCIsICJpbmxpbmUiLAotICAgICAgICAiaW5saW5lLWF4aXMi
LCAiaW5saW5lLWJsb2NrIiwgImlubGluZS10YWJsZSIsICJpbnNldCIsICJpbnNpZGUiLCAiaW50
cmluc2ljIiwgImludmVydCIsICJpdGFsaWMiLCAianVzdGlmeSIsICJrYW5uYWRhIiwgImthdGFr
YW5hIiwKLSAgICAgICAgImthdGFrYW5hLWlyb2hhIiwgImtobWVyIiwgImxhbmRzY2FwZSIsICJs
YW8iLCAibGFyZ2UiLCAibGFyZ2VyIiwgImxlZnQiLCAibGV2ZWwiLCAibGlnaHRlciIsICJsaW5l
LXRocm91Z2giLCAibGluZWFyIiwgImxpbmVzIiwKLSAgICAgICAgImxpc3QtaXRlbSIsICJsaXN0
Ym94IiwgImxpc3RpdGVtIiwgImxvY2FsIiwgImxvZ2ljYWwiLCAibG91ZCIsICJsb3dlciIsICJs
b3dlci1hbHBoYSIsICJsb3dlci1hcm1lbmlhbiIsICJsb3dlci1ncmVlayIsCi0gICAgICAgICJs
b3dlci1oZXhhZGVjaW1hbCIsICJsb3dlci1sYXRpbiIsICJsb3dlci1ub3J3ZWdpYW4iLCAibG93
ZXItcm9tYW4iLCAibG93ZXJjYXNlIiwgImx0ciIsICJtYWxheWFsYW0iLCAibWF0Y2giLCAibWVk
aWEtY29udHJvbHMtYmFja2dyb3VuZCIsCi0gICAgICAgICJtZWRpYS1jdXJyZW50LXRpbWUtZGlz
cGxheSIsICJtZWRpYS1mdWxsc2NyZWVuLWJ1dHRvbiIsICJtZWRpYS1tdXRlLWJ1dHRvbiIsICJt
ZWRpYS1wbGF5LWJ1dHRvbiIsICJtZWRpYS1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uIiwKLSAg
ICAgICAgIm1lZGlhLXJld2luZC1idXR0b24iLCAibWVkaWEtc2Vlay1iYWNrLWJ1dHRvbiIsICJt
ZWRpYS1zZWVrLWZvcndhcmQtYnV0dG9uIiwgIm1lZGlhLXNsaWRlciIsICJtZWRpYS1zbGlkZXJ0
aHVtYiIsICJtZWRpYS10aW1lLXJlbWFpbmluZy1kaXNwbGF5IiwKLSAgICAgICAgIm1lZGlhLXZv
bHVtZS1zbGlkZXIiLCAibWVkaWEtdm9sdW1lLXNsaWRlci1jb250YWluZXIiLCAibWVkaWEtdm9s
dW1lLXNsaWRlcnRodW1iIiwgIm1lZGl1bSIsICJtZW51IiwgIm1lbnVsaXN0IiwgIm1lbnVsaXN0
LWJ1dHRvbiIsCi0gICAgICAgICJtZW51bGlzdC10ZXh0IiwgIm1lbnVsaXN0LXRleHRmaWVsZCIs
ICJtZW51dGV4dCIsICJtZXNzYWdlLWJveCIsICJtaWRkbGUiLCAibWluLWludHJpbnNpYyIsICJt
aXgiLCAibW9uZ29saWFuIiwgIm1vbm9zcGFjZSIsICJtb3ZlIiwgIm11bHRpcGxlIiwKLSAgICAg
ICAgIm15YW5tYXIiLCAibi1yZXNpemUiLCAibmFycm93ZXIiLCAibmF2eSIsICJuZS1yZXNpemUi
LCAibmVzdy1yZXNpemUiLCAibm8tY2xvc2UtcXVvdGUiLCAibm8tZHJvcCIsICJuby1vcGVuLXF1
b3RlIiwgIm5vLXJlcGVhdCIsICJub25lIiwKLSAgICAgICAgIm5vcm1hbCIsICJub3QtYWxsb3dl
ZCIsICJub3dyYXAiLCAibnMtcmVzaXplIiwgIm53LXJlc2l6ZSIsICJud3NlLXJlc2l6ZSIsICJv
YmxpcXVlIiwgIm9jdGFsIiwgIm9wZW4tcXVvdGUiLCAib3B0aW1pemVMZWdpYmlsaXR5IiwKLSAg
ICAgICAgIm9wdGltaXplU3BlZWQiLCAib3JpeWEiLCAib3JvbW8iLCAib3V0c2V0IiwgIm91dHNp
ZGUiLCAib3ZlcmxheSIsICJvdmVybGluZSIsICJwYWRkaW5nIiwgInBhZGRpbmctYm94IiwgInBh
aW50ZWQiLCAicGF1c2VkIiwKLSAgICAgICAgInBlcnNpYW4iLCAicGx1cy1kYXJrZXIiLCAicGx1
cy1saWdodGVyIiwgInBvaW50ZXIiLCAicG9ydHJhaXQiLCAicHJlIiwgInByZS1saW5lIiwgInBy
ZS13cmFwIiwgInByZXNlcnZlLTNkIiwgInByb2dyZXNzIiwKLSAgICAgICAgInB1c2gtYnV0dG9u
IiwgInJhZGlvIiwgInJlYWQtb25seSIsICJyZWFkLXdyaXRlIiwgInJlYWQtd3JpdGUtcGxhaW50
ZXh0LW9ubHkiLCAicmVsYXRpdmUiLCAicmVwZWF0IiwgInJlcGVhdC14IiwKLSAgICAgICAgInJl
cGVhdC15IiwgInJlc2V0IiwgInJldmVyc2UiLCAicmdiIiwgInJnYmEiLCAicmlkZ2UiLCAicmln
aHQiLCAicm91bmQiLCAicm93LXJlc2l6ZSIsICJydGwiLCAicnVuLWluIiwgInJ1bm5pbmciLCAi
cy1yZXNpemUiLCAic2Fucy1zZXJpZiIsCi0gICAgICAgICJzY3JvbGwiLCAic2Nyb2xsYmFyIiwg
InNlLXJlc2l6ZSIsICJzZWFyY2hmaWVsZCIsICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwg
InNlYXJjaGZpZWxkLWRlY29yYXRpb24iLCAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLAot
ICAgICAgICAic2VhcmNoZmllbGQtcmVzdWx0cy1kZWNvcmF0aW9uIiwgInNlbWktY29uZGVuc2Vk
IiwgInNlbWktZXhwYW5kZWQiLCAic2VwYXJhdGUiLCAic2VyaWYiLCAic2hvdyIsICJzaWRhbWEi
LCAic2luZ2xlIiwKLSAgICAgICAgInNraXAtd2hpdGUtc3BhY2UiLCAic2xpZGUiLCAic2xpZGVy
LWhvcml6b250YWwiLCAic2xpZGVyLXZlcnRpY2FsIiwgInNsaWRlcnRodW1iLWhvcml6b250YWwi
LCAic2xpZGVydGh1bWItdmVydGljYWwiLCAic2xvdyIsCi0gICAgICAgICJzbWFsbCIsICJzbWFs
bC1jYXBzIiwgInNtYWxsLWNhcHRpb24iLCAic21hbGxlciIsICJzb2xpZCIsICJzb21hbGkiLCAi
c291cmNlLWF0b3AiLCAic291cmNlLWluIiwgInNvdXJjZS1vdXQiLCAic291cmNlLW92ZXIiLAot
ICAgICAgICAic3BhY2UiLCAic3F1YXJlIiwgInNxdWFyZS1idXR0b24iLCAic3RhcnQiLCAic3Rh
dGljIiwgInN0YXR1cy1iYXIiLCAic3RyZXRjaCIsICJzdHJva2UiLCAic3ViIiwgInN1YnBpeGVs
LWFudGlhbGlhc2VkIiwgInN1cGVyIiwKLSAgICAgICAgInN3LXJlc2l6ZSIsICJ0YWJsZSIsICJ0
YWJsZS1jYXB0aW9uIiwgInRhYmxlLWNlbGwiLCAidGFibGUtY29sdW1uIiwgInRhYmxlLWNvbHVt
bi1ncm91cCIsICJ0YWJsZS1mb290ZXItZ3JvdXAiLCAidGFibGUtaGVhZGVyLWdyb3VwIiwKLSAg
ICAgICAgInRhYmxlLXJvdyIsICJ0YWJsZS1yb3ctZ3JvdXAiLCAidGVsdWd1IiwgInRleHQiLCAi
dGV4dC1ib3R0b20iLCAidGV4dC10b3AiLCAidGV4dGFyZWEiLCAidGV4dGZpZWxkIiwgInRoYWki
LCAidGhpY2siLCAidGhpbiIsCi0gICAgICAgICJ0aHJlZWRkYXJrc2hhZG93IiwgInRocmVlZGZh
Y2UiLCAidGhyZWVkaGlnaGxpZ2h0IiwgInRocmVlZGxpZ2h0c2hhZG93IiwgInRocmVlZHNoYWRv
dyIsICJ0aWJldGFuIiwgInRpZ3JlIiwgInRpZ3JpbnlhLWVyIiwgInRpZ3JpbnlhLWVyLWFiZWdl
ZGUiLAotICAgICAgICAidGlncmlueWEtZXQiLCAidGlncmlueWEtZXQtYWJlZ2VkZSIsICJ0byIs
ICJ0b3AiLCAidHJhbnNwYXJlbnQiLCAidWx0cmEtY29uZGVuc2VkIiwgInVsdHJhLWV4cGFuZGVk
IiwgInVuZGVybGluZSIsICJ1cCIsICJ1cHBlci1hbHBoYSIsICJ1cHBlci1hcm1lbmlhbiIsCi0g
ICAgICAgICJ1cHBlci1ncmVlayIsICJ1cHBlci1oZXhhZGVjaW1hbCIsICJ1cHBlci1sYXRpbiIs
ICJ1cHBlci1ub3J3ZWdpYW4iLCAidXBwZXItcm9tYW4iLCAidXBwZXJjYXNlIiwgInVyZHUiLCAi
dXJsIiwgInZlcnRpY2FsIiwgInZlcnRpY2FsLXRleHQiLCAidmlzaWJsZSIsCi0gICAgICAgICJ2
aXNpYmxlRmlsbCIsICJ2aXNpYmxlUGFpbnRlZCIsICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIs
ICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2hpdGUiLCAid2lkZXIiLCAid2luZG93Iiwg
IndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLAotICAgICAgICAieC1sYXJnZSIsICJ4LXNtYWxs
IiwgInhvciIsICJ4eC1sYXJnZSIsICJ4eC1zbWFsbCIsICJ5ZWxsb3ciLCAiLXdhcC1tYXJxdWVl
IiwgIi13ZWJraXQtYWN0aXZlbGluayIsICItd2Via2l0LWF1dG8iLCAiLXdlYmtpdC1iYXNlbGlu
ZS1taWRkbGUiLAotICAgICAgICAiLXdlYmtpdC1ib2R5IiwgIi13ZWJraXQtYm94IiwgIi13ZWJr
aXQtY2VudGVyIiwgIi13ZWJraXQtY29udHJvbCIsICItd2Via2l0LWZvY3VzLXJpbmctY29sb3Ii
LCAiLXdlYmtpdC1ncmFiIiwgIi13ZWJraXQtZ3JhYmJpbmciLAotICAgICAgICAiLXdlYmtpdC1n
cmFkaWVudCIsICItd2Via2l0LWlubGluZS1ib3giLCAiLXdlYmtpdC1sZWZ0IiwgIi13ZWJraXQt
bGluayIsICItd2Via2l0LW1hcnF1ZWUiLCAiLXdlYmtpdC1taW5pLWNvbnRyb2wiLCAiLXdlYmtp
dC1ub3dyYXAiLCAiLXdlYmtpdC1waWN0b2dyYXBoIiwKLSAgICAgICAgIi13ZWJraXQtcmlnaHQi
LCAiLXdlYmtpdC1zbWFsbC1jb250cm9sIiwgIi13ZWJraXQtdGV4dCIsICItd2Via2l0LXh4eC1s
YXJnZSIsICItd2Via2l0LXpvb20taW4iLCAiLXdlYmtpdC16b29tLW91dCIsCi0gICAgXS5rZXlT
ZXQoKTsKLQotICAgIHRoaXMuX3Njc3NWYWx1ZUtleXdvcmRzID0gWwotICAgICAgICAiYWJzIiwg
ImFkanVzdC1jb2xvciIsICJhZGp1c3QtaHVlIiwgImFscGhhIiwgImFwcGVuZCIsICJjZWlsIiwg
ImNoYW5nZS1jb2xvciIsICJjb21wYXJhYmxlIiwgImNvbXBsZW1lbnQiLCAiZGFya2VuIiwgImRl
c2F0dXJhdGUiLAotICAgICAgICAiZmFkZS1pbiIsICJmYWRlLW91dCIsICJmbG9vciIsICJncmF5
c2NhbGUiLCAiaHVlIiwgImllLWhleC1zdHIiLCAiaW52ZXJ0IiwgImpvaW4iLCAibGVuZ3RoIiwg
ImxpZ2h0ZW4iLAotICAgICAgICAibGlnaHRuZXNzIiwgIm1heCIsICJtaW4iLCAibWl4IiwgIm50
aCIsICJvcGFjaWZ5IiwgIm9wYWNpdHkiLCAicGVyY2VudGFnZSIsICJxdW90ZSIsICJyb3VuZCIs
ICJzYXR1cmF0ZSIsCi0gICAgICAgICJzYXR1cmF0aW9uIiwgInNjYWxlLWNvbG9yIiwgInRyYW5z
cGFyZW50aXplIiwgInR5cGUtb2YiLCAidW5pdCIsICJ1bml0bGVzcyIsICJ1bnF1b3RlIiwgInpp
cCIKLSAgICBdLmtleVNldCgpOwotCi0gICAgdGhpcy5fbGV4Q29uZGl0aW9ucyA9IHsKLSAgICAg
ICAgSU5JVElBTDogMCwKLSAgICAgICAgQ09NTUVOVDogMSwKLSAgICAgICAgRFNUUklORzogMiwK
LSAgICAgICAgU1NUUklORzogMwotICAgIH07Ci0KLSAgICB0aGlzLl9wYXJzZUNvbmRpdGlvbnMg
PSB7Ci0gICAgICAgIElOSVRJQUw6IDAsCi0gICAgICAgIFBST1BFUlRZOiAxLAotICAgICAgICBQ
Uk9QRVJUWV9WQUxVRTogMiwKLSAgICAgICAgQVRfUlVMRTogMywKLSAgICAgICAgQVRfTUVESUFf
UlVMRTogNAotICAgIH07Ci0KLSAgICB0aGlzLmNhc2VfSU5JVElBTCA9IDEwMDA7Ci0gICAgdGhp
cy5jYXNlX0NPTU1FTlQgPSAxMDAyOwotICAgIHRoaXMuY2FzZV9EU1RSSU5HID0gMTAwMzsKLSAg
ICB0aGlzLmNhc2VfU1NUUklORyA9IDEwMDQ7Ci0KLSAgICB0aGlzLmNvbmRpdGlvbiA9IHRoaXMu
Y3JlYXRlSW5pdGlhbENvbmRpdGlvbigpOwotfQotCi1XZWJJbnNwZWN0b3IuU291cmNlQ1NTVG9r
ZW5pemVyLlNDU1NBdFJlbGF0ZWRLZXl3b3JkcyA9IFsiZnJvbSIsICJpZiIsICJpbiIsICJ0aHJv
dWdoIl0ua2V5U2V0KCk7Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VDU1NUb2tlbml6ZXIuTWVkaWFU
eXBlcyA9IFsiYWxsIiwgImF1cmFsIiwgImJyYWlsbGUiLCAiZW1ib3NzZWQiLCAiaGFuZGhlbGQi
LCAiaW1wb3J0IiwgInByaW50IiwgInByb2plY3Rpb24iLCAic2NyZWVuIiwgInR0eSIsICJ0diJd
LmtleVNldCgpOwotCi1XZWJJbnNwZWN0b3IuU291cmNlQ1NTVG9rZW5pemVyLnByb3RvdHlwZSA9
IHsKLSAgICBjcmVhdGVJbml0aWFsQ29uZGl0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4geyBsZXhDb25kaXRpb246IHRoaXMuX2xleENvbmRpdGlvbnMuSU5JVElBTCwgcGFy
c2VDb25kaXRpb246IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklUSUFMIH07Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHN0cmluZ0VuZHMKLSAgICAgKi8KLSAg
ICBfc3RyaW5nVG9rZW46IGZ1bmN0aW9uKGN1cnNvciwgc3RyaW5nRW5kcykKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9pc1Byb3BlcnR5VmFsdWUoKSkKLSAgICAgICAgICAgIHRoaXMudG9rZW5U
eXBlID0gImNzcy1zdHJpbmciOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLnRva2Vu
VHlwZSA9IG51bGw7Ci0gICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgfSwKLQotICAgIF9pc1By
b3BlcnR5VmFsdWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb25k
aXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5QUk9QRVJUWV9W
QUxVRSB8fCB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29u
ZGl0aW9ucy5BVF9SVUxFOwotICAgIH0sCi0KLSAgICBfc2V0UGFyc2VDb25kaXRpb246IGZ1bmN0
aW9uKGNvbmRpdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRp
dGlvbiA9IGNvbmRpdGlvbjsKLSAgICB9LAotCi0gICAgbmV4dFRva2VuOiBmdW5jdGlvbihjdXJz
b3IpCi0gICAgewotICAgICAgICB2YXIgY3Vyc29yT25FbnRlciA9IGN1cnNvcjsKLSAgICAgICAg
dmFyIGdvdG9DYXNlID0gMTsKLSAgICAgICAgdmFyIFlZTUFSS0VSOwotICAgICAgICB3aGlsZSAo
MSkgewotICAgICAgICAgICAgc3dpdGNoIChnb3RvQ2FzZSkKLSAgICAgICAgICAgIC8vIEZvbGxv
d2luZyBjb21tZW50IGlzIHJlcGxhY2VkIHdpdGggZ2VuZXJhdGVkIHN0YXRlIG1hY2hpbmUuCi0g
ICAgICAgICAgICAvKiFyZTJjCi0gICAgICAgICAgICAgICAgcmUyYzpkZWZpbmU6WVlDVFlQRSAg
PSAidmFyIjsKLSAgICAgICAgICAgICAgICByZTJjOmRlZmluZTpZWUNVUlNPUiA9IGN1cnNvcjsK
LSAgICAgICAgICAgICAgICByZTJjOmRlZmluZTpZWUdFVENPTkRJVElPTiA9ICJ0aGlzLmdldExl
eENvbmRpdGlvbiI7Ci0gICAgICAgICAgICAgICAgcmUyYzpkZWZpbmU6WVlTRVRDT05ESVRJT04g
PSAidGhpcy5zZXRMZXhDb25kaXRpb24iOwotICAgICAgICAgICAgICAgIHJlMmM6Y29uZHByZWZp
eCA9ICJjYXNlIHRoaXMuY2FzZV8iOwotICAgICAgICAgICAgICAgIHJlMmM6Y29uZGVudW1wcmVm
aXggPSAidGhpcy5fbGV4Q29uZGl0aW9ucy4iOwotICAgICAgICAgICAgICAgIHJlMmM6eXlmaWxs
OmVuYWJsZSA9IDA7Ci0gICAgICAgICAgICAgICAgcmUyYzpsYWJlbHByZWZpeCA9ICJjYXNlICI7
Ci0gICAgICAgICAgICAgICAgcmUyYzppbmRlbnQ6dG9wID0gMjsKLSAgICAgICAgICAgICAgICBy
ZTJjOmluZGVudDpzdHJpbmcgPSAiICAgICI7Ci0KLSAgICAgICAgICAgICAgICBDb21tZW50Q29u
dGVudCA9IChbXipcclxuXSB8ICgiKiIrW14vKl0pKSo7Ci0gICAgICAgICAgICAgICAgQ29tbWVu
dCA9ICIvKiIgQ29tbWVudENvbnRlbnQgIioiKyAiLyI7Ci0gICAgICAgICAgICAgICAgQ29tbWVu
dFN0YXJ0ID0gIi8qIiBDb21tZW50Q29udGVudCBbXHJcbl07Ci0gICAgICAgICAgICAgICAgQ29t
bWVudEVuZCA9IENvbW1lbnRDb250ZW50ICIqIisgIi8iOwotCi0gICAgICAgICAgICAgICAgT3Bl
bkN1cmx5QnJhY2tldCA9ICJ7IjsKLSAgICAgICAgICAgICAgICBDbG9zZUN1cmx5QnJhY2tldCA9
ICJ9IjsKLQotICAgICAgICAgICAgICAgIENvbG9uID0gIjoiOwotICAgICAgICAgICAgICAgIFNl
bWljb2xvbiA9ICI7IjsKLQotICAgICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsID0gIi0iPyAo
WzAtOV0rIHwgWzAtOV0qICIuIiBbMC05XSspICAoImVtIiB8ICJyZW0iIHwgIl9fcWVtIiB8ICJl
eCIgfCAicHgiIHwgImNtIiB8Ci0gICAgICAgICAgICAgICAgICAgICJtbSIgfCAiaW4iIHwgInB0
IiB8ICJwYyIgfCAiZGVnIiB8ICJyYWQiIHwgImdyYWQiIHwgInR1cm4iIHwgIm1zIiB8ICJzIiB8
ICJIeiIgfCAia0h6IiB8ICIlIik/OwotCi0gICAgICAgICAgICAgICAgQ29sb3JPclNlbGVjdG9y
ID0gIiMiIFswLTlBLVphLXpdKzsKLSAgICAgICAgICAgICAgICBJZGVudGlmaWVyID0gW0AhX1wt
MC05YS16QS1aXFtcXT0nIi8mXSs7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGUgPSAiJCIgSWRl
bnRpZmllcjsKLQotICAgICAgICAgICAgICAgIERvdWJsZVN0cmluZ0NvbnRlbnQgPSAoW15cclxu
XCJcXF0gfCAiXFwiIFsnIlxcYmZucnR2XSkqOwotICAgICAgICAgICAgICAgIFNpbmdsZVN0cmlu
Z0NvbnRlbnQgPSAoW15cclxuXCdcXF0gfCAiXFwiIFsnIlxcYmZucnR2XSkqOwotICAgICAgICAg
ICAgICAgIFN0cmluZ0xpdGVyYWwgPSAiXCIiIERvdWJsZVN0cmluZ0NvbnRlbnQgIlwiIiB8ICIn
IiBTaW5nbGVTdHJpbmdDb250ZW50ICInIjsKLSAgICAgICAgICAgICAgICBEb3VibGVTdHJpbmdT
dGFydCA9ICJcIiIgRG91YmxlU3RyaW5nQ29udGVudCAiXFwiIFtcclxuXTsKLSAgICAgICAgICAg
ICAgICBEb3VibGVTdHJpbmdFbmQgPSBEb3VibGVTdHJpbmdDb250ZW50ICJcIiI7Ci0gICAgICAg
ICAgICAgICAgU2luZ2xlU3RyaW5nU3RhcnQgPSAiJyIgU2luZ2xlU3RyaW5nQ29udGVudCAiXFwi
IFtcclxuXTsKLSAgICAgICAgICAgICAgICBTaW5nbGVTdHJpbmdFbmQgPSBTaW5nbGVTdHJpbmdD
b250ZW50ICInIjsKLQotICAgICAgICAgICAgICAgIDxJTklUSUFMPiBDb21tZW50IHsgdGhpcy50
b2tlblR5cGUgPSAiY3NzLWNvbW1lbnQiOyByZXR1cm4gY3Vyc29yOyB9Ci0gICAgICAgICAgICAg
ICAgPElOSVRJQUw+IENvbW1lbnRTdGFydCA9PiBDT01NRU5UIHsgdGhpcy50b2tlblR5cGUgPSAi
Y3NzLWNvbW1lbnQiOyByZXR1cm4gY3Vyc29yOyB9Ci0gICAgICAgICAgICAgICAgPENPTU1FTlQ+
IENvbW1lbnRDb250ZW50ID0+IENPTU1FTlQgeyB0aGlzLnRva2VuVHlwZSA9ICJjc3MtY29tbWVu
dCI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8Q09NTUVOVD4gQ29tbWVudEVu
ZCA9PiBJTklUSUFMIHsgdGhpcy50b2tlblR5cGUgPSAiY3NzLWNvbW1lbnQiOyByZXR1cm4gY3Vy
c29yOyB9Ci0KLSAgICAgICAgICAgICAgICA8SU5JVElBTD4gU3RyaW5nTGl0ZXJhbCB7IHJldHVy
biB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3IsIHRydWUpOyB9Ci0gICAgICAgICAgICAgICAgPElO
SVRJQUw+IERvdWJsZVN0cmluZ1N0YXJ0ID0+IERTVFJJTkcgeyByZXR1cm4gdGhpcy5fc3RyaW5n
VG9rZW4oY3Vyc29yKTsgfQotICAgICAgICAgICAgICAgIDxEU1RSSU5HPiBEb3VibGVTdHJpbmdD
b250ZW50ID0+IERTVFJJTkcgeyByZXR1cm4gdGhpcy5fc3RyaW5nVG9rZW4oY3Vyc29yKTsgfQot
ICAgICAgICAgICAgICAgIDxEU1RSSU5HPiBEb3VibGVTdHJpbmdFbmQgPT4gSU5JVElBTCB7IHJl
dHVybiB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3IsIHRydWUpOyB9Ci0gICAgICAgICAgICAgICAg
PElOSVRJQUw+IFNpbmdsZVN0cmluZ1N0YXJ0ID0+IFNTVFJJTkcgeyByZXR1cm4gdGhpcy5fc3Ry
aW5nVG9rZW4oY3Vyc29yKTsgfQotICAgICAgICAgICAgICAgIDxTU1RSSU5HPiBTaW5nbGVTdHJp
bmdDb250ZW50ID0+IFNTVFJJTkcgeyByZXR1cm4gdGhpcy5fc3RyaW5nVG9rZW4oY3Vyc29yKTsg
fQotICAgICAgICAgICAgICAgIDxTU1RSSU5HPiBTaW5nbGVTdHJpbmdFbmQgPT4gSU5JVElBTCB7
IHJldHVybiB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3IsIHRydWUpOyB9Ci0KLSAgICAgICAgICAg
ICAgICA8SU5JVElBTD4gT3BlbkN1cmx5QnJhY2tldAotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiYmxvY2stc3RhcnQiOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9jb25kaXRpb24ub3BlbkJyYWNlcyA9ICh0aGlzLl9jb25kaXRpb24u
b3BlbkJyYWNlcyB8fCAwKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25k
aXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5BVF9NRURJQV9S
VUxFKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0UGFyc2VDb25kaXRpb24odGhp
cy5fcGFyc2VDb25kaXRpb25zLklOSVRJQUwpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRQYXJzZUNvbmRpdGlvbih0aGlzLl9wYXJz
ZUNvbmRpdGlvbnMuUFJPUEVSVFkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29y
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIDxJTklUSUFMPiBDbG9zZUN1
cmx5QnJhY2tldAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2tlblR5cGUgPSAiYmxvY2stZW5kIjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nv
bmRpdGlvbi5vcGVuQnJhY2VzID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tdGhpcy5f
Y29uZGl0aW9uLm9wZW5CcmFjZXM7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFBhcnNl
Q29uZGl0aW9uKHRoaXMuX2NvbmRpdGlvbi5vcGVuQnJhY2VzID8gdGhpcy5fcGFyc2VDb25kaXRp
b25zLlBST1BFUlRZIDogdGhpcy5fcGFyc2VDb25kaXRpb25zLklOSVRJQUwpOwotICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fY29uZGl0aW9uLmF0S2V5d29yZDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICA8SU5JVElBTD4gQ29sb24KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0gdGhpcy5fcGFyc2VDb25kaXRpb25zLlBST1BF
UlRZIHx8IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0gdGhpcy5fcGFyc2VDb25k
aXRpb25zLklOSVRJQUwpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRQYXJzZUNv
bmRpdGlvbih0aGlzLl9wYXJzZUNvbmRpdGlvbnMuUFJPUEVSVFlfVkFMVUUpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIDxJTklUSUFMPiBTZW1pY29sb24KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc2V0UGFyc2VDb25kaXRpb24odGhpcy5fY29uZGl0aW9uLm9wZW5CcmFjZXMgPyB0aGlzLl9w
YXJzZUNvbmRpdGlvbnMuUFJPUEVSVFkgOiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuSU5JVElBTCk7
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb24uYXRLZXl3b3JkOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIDxJTklUSUFMPiBOdW1lcmljTGl0ZXJhbAotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUHJvcGVydHlWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiY3NzLW51bWJlciI7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5U
eXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICA8SU5JVElBTD4gQ29sb3JPclNlbGVjdG9yCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNQcm9wZXJ0
eVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJjc3Mt
Y29sb3IiOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25kaXRpb24ucGFy
c2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklUSUFMKQotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiY3NzLXNlbGVjdG9yIjsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUg
PSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIDxJTklUSUFMPiBWYXJpYWJsZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRp
dGlvbiA9PT0gdGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uLklOSVRJQUwgfHwgdGhpcy5f
Y29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uID09PSB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRp
b24uQVRfUlVMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFBhcnNlQ29uZGl0
aW9uKHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5QUk9QRVJUWSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMudG9rZW5UeXBlID0gInNjc3MtdmFyaWFibGUiOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIDxJTklU
SUFMPiBJZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLl9saW5lLnN1YnN0cmluZyhjdXJzb3JPbkVudGVyLCBjdXJzb3IpOwot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNl
Q29uZGl0aW9ucy5JTklUSUFMIHx8IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0g
dGhpcy5fcGFyc2VDb25kaXRpb25zLlBST1BFUlRZKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW4uY2hhckF0KDApID09PSAiQCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRva2VuVHlwZSA9ICJjc3MtYXQtcnVsZSI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fc2V0UGFyc2VDb25kaXRpb24odG9rZW4gPT09ICJAbWVkaWEiID8gdGhp
cy5fcGFyc2VDb25kaXRpb25zLkFUX01FRElBX1JVTEUgOiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMu
QVRfUlVMRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZGl0aW9uLmF0
S2V5d29yZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlz
Ll9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklU
SUFMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gImNzcy1z
ZWxlY3RvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9wcm9wZXJ0
eUtleXdvcmRzLmhhc093blByb3BlcnR5KHRva2VuKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRva2VuVHlwZSA9ICJjc3MtcHJvcGVydHkiOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0gdGhpcy5fcGFy
c2VDb25kaXRpb25zLkFUX01FRElBX1JVTEUgfHwgdGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0
aW9uID09PSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuQVRfUlVMRSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Tb3VyY2VDU1NUb2tlbml6ZXIuU0NTU0F0UmVsYXRl
ZEtleXdvcmRzLmhhc093blByb3BlcnR5KHRva2VuKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRva2VuVHlwZSA9ICJjc3MtYXQtcnVsZSI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChXZWJJbnNwZWN0b3IuU291cmNlQ1NTVG9rZW5pemVyLk1lZGlhVHlwZXMu
aGFzT3duUHJvcGVydHkodG9rZW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
dG9rZW5UeXBlID0gImNzcy1rZXl3b3JkIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy50b2tlblR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3Vyc29yOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1Byb3Bl
cnR5VmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0Q2hhciA9IHRv
a2VuLmNoYXJBdCgwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoYXIgPT09
ICIkIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJzY3Nz
LXZhcmlhYmxlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0Q2hhciA9
PT0gIiEiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gImNz
cy1iYW5nLWtleXdvcmQiOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5f
Y29uZGl0aW9uLmF0S2V5d29yZCA9PT0gIkBleHRlbmQiKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9rZW5UeXBlID0gImNzcy1zZWxlY3RvciI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLl92YWx1ZUtleXdvcmRzLmhhc093blByb3BlcnR5KHRva2Vu
KSB8fCB0aGlzLl9zY3NzVmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiY3NzLWtleXdvcmQiOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY29sb3JLZXl3b3Jkcy5oYXNP
d25Qcm9wZXJ0eSh0b2tlbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogdGhpcyBkb2VzIG5vdCBjb252ZXJ0IHRva2VucyB0b0xvd2VyQ2FzZSgpIGZvciB0aGUgc2Fr
ZSBvZiBzcGVlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9
ICJjc3MtY29sb3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAhPT0gdGhpcy5f
cGFyc2VDb25kaXRpb25zLlBST1BFUlRZX1ZBTFVFKQotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2tlblR5cGUgPSAiY3NzLXNlbGVjdG9yIjsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgPCo+IFteXSB7
IHRoaXMudG9rZW5UeXBlID0gbnVsbDsgcmV0dXJuIGN1cnNvcjsgfQotICAgICAgICAgICAgKi8K
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Tb3VyY2VU
b2tlbml6ZXIucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Tb3VyY2VGcmFtZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2
NDM3MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzY2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBleHRl
bmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSBjb250ZW50UHJvdmlkZXIKLSAqLwotV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24oY29udGVudFByb3ZpZGVyKQotewotICAgIFdlYklu
c3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
InNjcmlwdC12aWV3Iik7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImZpbGwiKTsK
LQotICAgIHRoaXMuX3VybCA9IGNvbnRlbnRQcm92aWRlci5jb250ZW50VVJMKCk7Ci0gICAgdGhp
cy5fY29udGVudFByb3ZpZGVyID0gY29udGVudFByb3ZpZGVyOwotCi0gICAgdmFyIHRleHRFZGl0
b3JEZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlRm9yU291cmNl
RnJhbWUodGhpcyk7Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3Mu
Y29kZW1pcnJvci5pc0VuYWJsZWQoKSkgewotICAgICAgICBsb2FkU2NyaXB0KCJDb2RlTWlycm9y
VGV4dEVkaXRvci5qcyIpOwotICAgICAgICB0aGlzLl90ZXh0RWRpdG9yID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvcih0aGlzLl91cmwsIHRleHRFZGl0b3JEZWxlZ2F0ZSk7
Ci0gICAgfSBlbHNlIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5hY2VUZXh0
RWRpdG9yLmlzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGxvYWRTY3JpcHQoIkFjZVRleHRFZGl0b3Iu
anMiKTsKLSAgICAgICAgdGhpcy5fdGV4dEVkaXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuQWNlVGV4
dEVkaXRvcih0aGlzLl91cmwsIHRleHRFZGl0b3JEZWxlZ2F0ZSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHRoaXMuX3RleHRFZGl0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9y
KHRoaXMuX3VybCwgdGV4dEVkaXRvckRlbGVnYXRlKTsKLQotICAgIHRoaXMuX2N1cnJlbnRTZWFy
Y2hSZXN1bHRJbmRleCA9IC0xOwotICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMgPSBbXTsKLQotICAg
IHRoaXMuX21lc3NhZ2VzID0gW107Ci0gICAgdGhpcy5fcm93TWVzc2FnZXMgPSB7fTsKLSAgICB0
aGlzLl9tZXNzYWdlQnViYmxlcyA9IHt9OwotCi0gICAgdGhpcy5fdGV4dEVkaXRvci5zZXRSZWFk
T25seSghdGhpcy5jYW5FZGl0U291cmNlKCkpOwotCi0gICAgdGhpcy5fc2hvcnRjdXRzID0ge307
Ci0gICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VL
ZXkoInMiLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3RybE9yTWV0
YSldID0gdGhpcy5fY29tbWl0RWRpdGluZy5iaW5kKHRoaXMpOwotICAgIHRoaXMuZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5faGFuZGxlS2V5RG93bi5iaW5kKHRoaXMp
LCBmYWxzZSk7Ci0KLSAgICB0aGlzLl9zb3VyY2VQb3NpdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9zb3VyY2VQb3NpdGlvbkVsZW1lbnQuY2xh
c3NOYW1lID0gInNvdXJjZS1mcmFtZS1jdXJzb3ItcG9zaXRpb24iOwotfQotCi0vKioKLSAqIEBw
YXJhbSB7c3RyaW5nfSBxdWVyeQotICogQHBhcmFtIHtzdHJpbmc9fSBtb2RpZmllcnMKLSAqLwot
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4ID0gZnVuY3Rpb24ocXVl
cnksIG1vZGlmaWVycykKLXsKLSAgICB2YXIgcmVnZXg7Ci0gICAgbW9kaWZpZXJzID0gbW9kaWZp
ZXJzIHx8ICIiOwotCi0gICAgLy8gRmlyc3QgdHJ5IGNyZWF0aW5nIHJlZ2V4IGlmIHVzZXIga25v
d3MgdGhlIC8gLyBoaW50LgotICAgIHRyeSB7Ci0gICAgICAgIGlmICgvXlwvLipcLyQvLnRlc3Qo
cXVlcnkpKQotICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHF1ZXJ5LnN1YnN0cmluZygx
LCBxdWVyeS5sZW5ndGggLSAxKSwgbW9kaWZpZXJzKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgIC8vIFNpbGVudCBjYXRjaC4KLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UganVzdCBkbyBj
YXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KLSAgICBpZiAoIXJlZ2V4KQotICAgICAgICByZWdleCA9
IGNyZWF0ZVBsYWluVGV4dFNlYXJjaFJlZ2V4KHF1ZXJ5LCAiaSIgKyBtb2RpZmllcnMpOwotCi0g
ICAgcmV0dXJuIHJlZ2V4OwotfQotCi1XZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzID0g
ewotICAgIFNjcm9sbENoYW5nZWQ6ICJTY3JvbGxDaGFuZ2VkIiwKLSAgICBTZWxlY3Rpb25DaGFu
Z2VkOiAiU2VsZWN0aW9uQ2hhbmdlZCIKLX0KLQotV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKLSAgICB3YXNTaG93bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fZW5zdXJlQ29udGVudExvYWRlZCgpOwotICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnNob3co
dGhpcy5lbGVtZW50KTsKLSAgICAgICAgdGhpcy5fZWRpdG9yQXR0YWNoZWQgPSB0cnVlOwotICAg
ICAgICB0aGlzLl93YXNTaG93bk9yTG9hZGVkKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2lzRWRpdG9yU2hvd2luZzogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNTaG93aW5nKCkgJiYgdGhpcy5fZWRp
dG9yQXR0YWNoZWQ7Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUud2lsbEhpZGUuY2FsbCh0aGlzKTsK
LQotICAgICAgICB0aGlzLl9jbGVhckxpbmVIaWdobGlnaHQoKTsKLSAgICAgICAgdGhpcy5fY2xl
YXJMaW5lVG9SZXZlYWwoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7P0Vs
ZW1lbnR9Ci0gICAgICovCi0gICAgc3RhdHVzQmFyVGV4dDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVBvc2l0aW9uRWxlbWVudDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQotICAgICAqLwotICAgIHN0YXR1
c0Jhckl0ZW1zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gW107Ci0gICAgfSwK
LQotICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3RleHRFZGl0b3IuZGVmYXVsdEZvY3VzZWRFbGVtZW50KCk7Ci0gICAgfSwK
LQotICAgIGdldCBsb2FkZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZDsK
LSAgICB9LAotCi0gICAgaGFzQ29udGVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGdldCB0ZXh0RWRpdG9yKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl90ZXh0RWRpdG9yOwotICAgIH0sCi0KLSAgICBfZW5zdXJlQ29udGVudExv
YWRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jb250ZW50UmVxdWVz
dGVkKSB7Ci0gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVxdWVzdGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHRoaXMuX2NvbnRlbnRQcm92aWRlci5yZXF1ZXN0Q29udGVudCh0aGlzLnNldENvbnRl
bnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgYWRkTWVzc2FnZTogZnVu
Y3Rpb24obXNnKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWVzc2FnZXMucHVzaChtc2cpOwotICAg
ICAgICBpZiAodGhpcy5sb2FkZWQpCi0gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2VUb1NvdXJj
ZShtc2cubGluZSAtIDEsIG1zZyk7Ci0gICAgfSwKLQotICAgIGNsZWFyTWVzc2FnZXM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGxpbmUgaW4gdGhpcy5fbWVzc2FnZUJ1YmJs
ZXMpIHsKLSAgICAgICAgICAgIHZhciBidWJibGUgPSB0aGlzLl9tZXNzYWdlQnViYmxlc1tsaW5l
XTsKLSAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gcGFyc2VJbnQobGluZSwgMTApOwotICAg
ICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGJ1
YmJsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdOwotICAgICAg
ICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9OwotICAgICAgICB0aGlzLl9tZXNzYWdlQnViYmxlcyA9
IHt9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQotICAg
ICAqLwotICAgIGNhbkhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKGxpbmUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmUKLSAgICAgKi8KLSAgICBoaWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lKQotICAgIHsK
LSAgICAgICAgdGhpcy5fY2xlYXJMaW5lVG9SZXZlYWwoKTsKLSAgICAgICAgdGhpcy5fY2xlYXJM
aW5lVG9TY3JvbGxUbygpOwotICAgICAgICB0aGlzLl9saW5lVG9IaWdobGlnaHQgPSBsaW5lOwot
ICAgICAgICB0aGlzLl9pbm5lckhpZ2hsaWdodExpbmVJZk5lZWRlZCgpOwotICAgICAgICB0aGlz
Ll90ZXh0RWRpdG9yLnNldFNlbGVjdGlvbihXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLmNyZWF0ZUZy
b21Mb2NhdGlvbihsaW5lLCAwKSk7Ci0gICAgfSwKLQotICAgIF9pbm5lckhpZ2hsaWdodExpbmVJ
Zk5lZWRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9saW5l
VG9IaWdobGlnaHQgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5sb2FkZWQg
JiYgdGhpcy5faXNFZGl0b3JTaG93aW5nKCkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
RWRpdG9yLmhpZ2hsaWdodExpbmUodGhpcy5fbGluZVRvSGlnaGxpZ2h0KTsKLSAgICAgICAgICAg
ICAgICBkZWxldGUgdGhpcy5fbGluZVRvSGlnaGxpZ2h0Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgX2NsZWFyTGluZUhpZ2hsaWdodDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5jbGVhckxpbmVIaWdobGlnaHQoKTsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX2xpbmVUb0hpZ2hsaWdodDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAgKi8KLSAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihs
aW5lKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXJMaW5lSGlnaGxpZ2h0KCk7Ci0gICAgICAg
IHRoaXMuX2NsZWFyTGluZVRvU2Nyb2xsVG8oKTsKLSAgICAgICAgdGhpcy5fbGluZVRvUmV2ZWFs
ID0gbGluZTsKLSAgICAgICAgdGhpcy5faW5uZXJSZXZlYWxMaW5lSWZOZWVkZWQoKTsKLSAgICB9
LAotCi0gICAgX2lubmVyUmV2ZWFsTGluZUlmTmVlZGVkOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAodHlwZW9mIHRoaXMuX2xpbmVUb1JldmVhbCA9PT0gIm51bWJlciIpIHsKLSAgICAg
ICAgICAgIGlmICh0aGlzLmxvYWRlZCAmJiB0aGlzLl9pc0VkaXRvclNob3dpbmcoKSkgewotICAg
ICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IucmV2ZWFsTGluZSh0aGlzLl9saW5lVG9SZXZl
YWwpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9SZXZlYWwKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfY2xlYXJMaW5lVG9SZXZlYWw6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9SZXZlYWw7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICovCi0gICAgc2Ny
b2xsVG9MaW5lOiBmdW5jdGlvbihsaW5lKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXJMaW5l
SGlnaGxpZ2h0KCk7Ci0gICAgICAgIHRoaXMuX2NsZWFyTGluZVRvUmV2ZWFsKCk7Ci0gICAgICAg
IHRoaXMuX2xpbmVUb1Njcm9sbFRvID0gbGluZTsKLSAgICAgICAgdGhpcy5faW5uZXJTY3JvbGxU
b0xpbmVJZk5lZWRlZCgpOwotICAgIH0sCi0KLSAgICBfaW5uZXJTY3JvbGxUb0xpbmVJZk5lZWRl
ZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9saW5lVG9TY3Jv
bGxUbyA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmxvYWRlZCAmJiB0aGlz
Ll9pc0VkaXRvclNob3dpbmcoKSkgewotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0b3Iu
c2Nyb2xsVG9MaW5lKHRoaXMuX2xpbmVUb1Njcm9sbFRvKTsKLSAgICAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fbGluZVRvU2Nyb2xsVG87Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX2NsZWFyTGluZVRvU2Nyb2xsVG86IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGRlbGV0ZSB0aGlzLl9saW5lVG9TY3JvbGxUbzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSB0ZXh0UmFuZ2UKLSAgICAgKi8KLSAgICBz
ZXRTZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nl
bGVjdGlvblRvU2V0ID0gdGV4dFJhbmdlOwotICAgICAgICB0aGlzLl9pbm5lclNldFNlbGVjdGlv
bklmTmVlZGVkKCk7Ci0gICAgfSwKLQotICAgIF9pbm5lclNldFNlbGVjdGlvbklmTmVlZGVkOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVG9TZXQgJiYgdGhp
cy5sb2FkZWQgJiYgdGhpcy5faXNFZGl0b3JTaG93aW5nKCkpIHsKLSAgICAgICAgICAgIHRoaXMu
X3RleHRFZGl0b3Iuc2V0U2VsZWN0aW9uKHRoaXMuX3NlbGVjdGlvblRvU2V0KTsKLSAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb25Ub1NldDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfd2FzU2hvd25PckxvYWRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faW5u
ZXJIaWdobGlnaHRMaW5lSWZOZWVkZWQoKTsKLSAgICAgICAgdGhpcy5faW5uZXJSZXZlYWxMaW5l
SWZOZWVkZWQoKTsKLSAgICAgICAgdGhpcy5faW5uZXJTY3JvbGxUb0xpbmVJZk5lZWRlZCgpOwot
ICAgICAgICB0aGlzLl9pbm5lclNldFNlbGVjdGlvbklmTmVlZGVkKCk7Ci0gICAgfSwKLQotICAg
IG9uVGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5faXNSZXBsYWNpbmcpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2Vh
cmNoQ29udHJvbGxlci5jYW5jZWxTZWFyY2goKTsKLSAgICAgICAgdGhpcy5jbGVhck1lc3NhZ2Vz
KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAot
ICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29kZWQKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gbWltZVR5cGUKLSAgICAgKi8KLSAgICBzZXRDb250ZW50OiBmdW5jdGlvbihjb250ZW50
LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgewotICAgICAgICB0aGlzLl90ZXh0RWRp
dG9yLm1pbWVUeXBlID0gbWltZVR5cGU7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWQpIHsK
LSAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0
RWRpdG9yLnNldFRleHQoY29udGVudCB8fCAiIik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdGhpcy5fdGV4dEVkaXRvci5lZGl0UmFuZ2UodGhpcy5fdGV4dEVkaXRvci5yYW5nZSgpLCBj
b250ZW50IHx8ICIiKTsKLQotICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmJlZ2luVXBkYXRlcygp
OwotCi0gICAgICAgIHRoaXMuX3NldFRleHRFZGl0b3JEZWNvcmF0aW9ucygpOwotCi0gICAgICAg
IHRoaXMuX3dhc1Nob3duT3JMb2FkZWQoKTsKLQotICAgICAgICBpZiAodGhpcy5fZGVsYXllZEZp
bmRTZWFyY2hNYXRjaGVzKSB7Ci0gICAgICAgICAgICB0aGlzLl9kZWxheWVkRmluZFNlYXJjaE1h
dGNoZXMoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9kZWxheWVkRmluZFNlYXJjaE1hdGNo
ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLm9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQo
KTsKLQotICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmVuZFVwZGF0ZXMoKTsKLSAgICB9LAotCi0g
ICAgb25UZXh0RWRpdG9yQ29udGVudExvYWRlZDogZnVuY3Rpb24oKSB7fSwKLQotICAgIF9zZXRU
ZXh0RWRpdG9yRGVjb3JhdGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jv
d01lc3NhZ2VzID0ge307Ci0gICAgICAgIHRoaXMuX21lc3NhZ2VCdWJibGVzID0ge307Ci0KLSAg
ICAgICAgdGhpcy5fdGV4dEVkaXRvci5iZWdpblVwZGF0ZXMoKTsKLQotICAgICAgICB0aGlzLl9h
ZGRFeGlzdGluZ01lc3NhZ2VzVG9Tb3VyY2UoKTsKLQotICAgICAgICB0aGlzLl90ZXh0RWRpdG9y
LmVuZFVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHF1ZXJ5Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuVmlldywgbnVtYmVy
KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSwg
Y2FsbGJhY2spCi0gICAgewotICAgICAgICAvLyBDYWxsIHNlYXJjaENhbmNlbGVkIHNpbmNlIGl0
IHdpbGwgcmVzZXQgZXZlcnl0aGluZyB3ZSBuZWVkIGJlZm9yZSBkb2luZyBhIG5ldyBzZWFyY2gu
Ci0gICAgICAgIHRoaXMuc2VhcmNoQ2FuY2VsZWQoKTsKLQotICAgICAgICBmdW5jdGlvbiBkb0Zp
bmRTZWFyY2hNYXRjaGVzKHF1ZXJ5KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9jdXJy
ZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3Vs
dHMgPSBbXTsKLQotICAgICAgICAgICAgdmFyIHJlZ2V4ID0gV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJl
c3VsdHMgPSB0aGlzLl9jb2xsZWN0UmVnZXhNYXRjaGVzKHJlZ2V4KTsKLSAgICAgICAgICAgIHZh
ciBzaGlmdFRvSW5kZXggPSAwOwotICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX3Rl
eHRFZGl0b3IubGFzdFNlbGVjdGlvbigpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IHNl
bGVjdGlvbiAmJiBpIDwgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9zZWFyY2hSZXN1bHRzW2ldLmNvbXBhcmVUbyhzZWxlY3Rpb24p
ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc2hpZnRUb0luZGV4ID0gaTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoc2hpZnRUb0luZGV4KQotICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJj
aFJlc3VsdHMgPSB0aGlzLl9zZWFyY2hSZXN1bHRzLnJvdGF0ZShzaGlmdFRvSW5kZXgpOwotCi0g
ICAgICAgICAgICBjYWxsYmFjayh0aGlzLCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5sb2FkZWQpCi0gICAgICAgICAgICBkb0ZpbmRT
ZWFyY2hNYXRjaGVzLmNhbGwodGhpcywgcXVlcnkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aGlzLl9kZWxheWVkRmluZFNlYXJjaE1hdGNoZXMgPSBkb0ZpbmRTZWFyY2hNYXRjaGVzLmJp
bmQodGhpcywgcXVlcnkpOwotCi0gICAgICAgIHRoaXMuX2Vuc3VyZUNvbnRlbnRMb2FkZWQoKTsK
LSAgICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGRlbGV0ZSB0aGlzLl9kZWxheWVkRmluZFNlYXJjaE1hdGNoZXM7Ci0gICAgICAgIGlmICghdGhp
cy5sb2FkZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fY3VycmVudFNl
YXJjaFJlc3VsdEluZGV4ID0gLTE7Ci0gICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMgPSBbXTsK
LSAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7Ci0gICAg
fSwKLQotICAgIGhhc1NlYXJjaFJlc3VsdHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDA7Ci0gICAgfSwKLQotICAgIGp1bXBU
b0ZpcnN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmp1bXBU
b1NlYXJjaFJlc3VsdCgwKTsKLSAgICB9LAotCi0gICAganVtcFRvTGFzdFNlYXJjaFJlc3VsdDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5f
c2VhcmNoUmVzdWx0cy5sZW5ndGggLSAxKTsKLSAgICB9LAotCi0gICAganVtcFRvTmV4dFNlYXJj
aFJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1
bHQodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ICsgMSk7Ci0gICAgfSwKLQotICAgIGp1
bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Lmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggLSAxKTsK
LSAgICB9LAotCi0gICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggJiYgIHRoaXMuX2N1
cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9PT0gMDsKLSAgICB9LAotCi0gICAgc2hvd2luZ0xhc3RT
ZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zZWFy
Y2hSZXN1bHRzLmxlbmd0aCAmJiB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPT09ICh0
aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCAtIDEpOwotICAgIH0sCi0KLSAgICBnZXQgY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50
U2VhcmNoUmVzdWx0SW5kZXg7Ci0gICAgfSwKLQotICAgIGp1bXBUb1NlYXJjaFJlc3VsdDogZnVu
Y3Rpb24oaW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMubG9hZGVkIHx8ICF0aGlzLl9z
ZWFyY2hSZXN1bHRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5f
Y3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gKGluZGV4ICsgdGhpcy5fc2VhcmNoUmVzdWx0cy5s
ZW5ndGgpICUgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7Ci0gICAgICAgIHRoaXMuX3RleHRF
ZGl0b3IubWFya0FuZFJldmVhbFJhbmdlKHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5fY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4XSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSB0ZXh0Ci0gICAgICovCi0gICAgcmVwbGFjZVNlYXJjaE1hdGNoV2l0aDogZnVuY3Rp
b24odGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3NlYXJjaFJlc3VsdHNb
dGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4XTsKLSAgICAgICAgaWYgKCFyYW5nZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5tYXJrQW5kUmV2ZWFs
UmFuZ2UobnVsbCk7Ci0KLSAgICAgICAgdGhpcy5faXNSZXBsYWNpbmcgPSB0cnVlOwotICAgICAg
ICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl90ZXh0RWRpdG9yLmVkaXRSYW5nZShyYW5nZSwgdGV4dCk7
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9pc1JlcGxhY2luZzsKLQotICAgICAgICB0aGlzLl90ZXh0
RWRpdG9yLnNldFNlbGVjdGlvbihuZXdSYW5nZS5jb2xsYXBzZVRvRW5kKCkpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gcmVwbGFjZW1lbnQKLSAgICAgKi8KLSAgICByZXBsYWNlQWxsV2l0aDogZnVuY3Rpb24o
cXVlcnksIHJlcGxhY2VtZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5tYXJr
QW5kUmV2ZWFsUmFuZ2UobnVsbCk7Ci0KLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90ZXh0RWRp
dG9yLnRleHQoKTsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fdGV4dEVkaXRvci5yYW5nZSgp
OwotICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5j
cmVhdGVTZWFyY2hSZWdleChxdWVyeSwgImciKSwgcmVwbGFjZW1lbnQpOwotCi0gICAgICAgIHRo
aXMuX2lzUmVwbGFjaW5nID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5lZGl0UmFu
Z2UocmFuZ2UsIHRleHQpOwotICAgICAgICBkZWxldGUgdGhpcy5faXNSZXBsYWNpbmc7Ci0gICAg
fSwKLQotICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5jdGlvbihyZWdleE9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHZhciByYW5nZXMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLl90ZXh0RWRpdG9yLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIGxp
bmUgPSB0aGlzLl90ZXh0RWRpdG9yLmxpbmUoaSk7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0g
MDsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSByZWdleE9i
amVjdC5leGVjKGxpbmUpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2VzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UoaSwgb2Zmc2V0ICsgbWF0Y2gu
aW5kZXgsIGksIG9mZnNldCArIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG9mZnNldCArPSBtYXRjaC5pbmRleCArIDE7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUgKG1hdGNoICYmIGxpbmUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiByYW5nZXM7Ci0gICAgfSwKLQotICAgIF9hZGRFeGlzdGluZ01lc3Nh
Z2VzVG9Tb3VyY2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBsZW5ndGggPSB0aGlz
Ll9tZXNzYWdlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2VUb1NvdXJjZSh0aGlzLl9tZXNzYWdlc1tp
XS5saW5lIC0gMSwgdGhpcy5fbWVzc2FnZXNbaV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlfSBtc2cKLSAgICAgKi8KLSAgICBhZGRNZXNzYWdlVG9Tb3VyY2U6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIG1zZykKLSAgICB7Ci0gICAgICAgIGlmIChsaW5lTnVtYmVyID49
IHRoaXMuX3RleHRFZGl0b3IubGluZXNDb3VudCkKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgPSB0
aGlzLl90ZXh0RWRpdG9yLmxpbmVzQ291bnQgLSAxOwotICAgICAgICBpZiAobGluZU51bWJlciA8
IDApCi0gICAgICAgICAgICBsaW5lTnVtYmVyID0gMDsKLQotICAgICAgICB2YXIgcm93TWVzc2Fn
ZXMgPSB0aGlzLl9yb3dNZXNzYWdlc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgaWYgKCFyb3dNZXNz
YWdlcykgewotICAgICAgICAgICAgcm93TWVzc2FnZXMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMu
X3Jvd01lc3NhZ2VzW2xpbmVOdW1iZXJdID0gcm93TWVzc2FnZXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd01lc3NhZ2VzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAocm93TWVzc2FnZXNbaV0uY29uc29sZU1lc3NhZ2UuaXNFcXVhbChtc2cpKSB7
Ci0gICAgICAgICAgICAgICAgcm93TWVzc2FnZXNbaV0ucmVwZWF0Q291bnQgPSBtc2cudG90YWxS
ZXBlYXRDb3VudDsKLSAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVNZXNzYWdlUmVwZWF0Q291
bnQocm93TWVzc2FnZXNbaV0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciByb3dNZXNzYWdlID0geyBjb25zb2xlTWVzc2Fn
ZTogbXNnIH07Ci0gICAgICAgIHJvd01lc3NhZ2VzLnB1c2gocm93TWVzc2FnZSk7Ci0KLSAgICAg
ICAgdGhpcy5fdGV4dEVkaXRvci5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAgdmFyIG1lc3NhZ2VC
dWJibGVFbGVtZW50ID0gdGhpcy5fbWVzc2FnZUJ1YmJsZXNbbGluZU51bWJlcl07Ci0gICAgICAg
IGlmICghbWVzc2FnZUJ1YmJsZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBtZXNz
YWdlQnViYmxlRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUi
OwotICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXNbbGluZU51bWJlcl0gPSBtZXNzYWdl
QnViYmxlRWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIgaW1hZ2VVUkw7Ci0gICAgICAgIHN3aXRjaCAobXNnLmxldmVsKSB7Ci0gICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6Ci0g
ICAgICAgICAgICAgICAgbWVzc2FnZUJ1YmJsZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygid2Via2l0
LWh0bWwtZXJyb3ItbWVzc2FnZSIpOwotICAgICAgICAgICAgICAgIGltYWdlVVJMID0gIkltYWdl
cy9lcnJvckljb24ucG5nIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAg
ICAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1o
dG1sLXdhcm5pbmctbWVzc2FnZSIpOwotICAgICAgICAgICAgICAgIGltYWdlVVJMID0gIkltYWdl
cy93YXJuaW5nSWNvbi5wbmciOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIG1lc3NhZ2VMaW5lRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwotICAgICAgICBtZXNzYWdlTGluZUVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1o
dG1sLW1lc3NhZ2UtbGluZSI7Ci0gICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmFwcGVuZENo
aWxkKG1lc3NhZ2VMaW5lRWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBpbWFnZSBl
bGVtZW50IGluIHRoZSBJbnNwZWN0b3IncyBkb2N1bWVudCBzbyB3ZSBjYW4gdXNlIHJlbGF0aXZl
IGltYWdlIFVSTHMuCi0gICAgICAgIHZhciBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImltZyIpOwotICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVSTDsKLSAgICAgICAgaW1hZ2UuY2xh
c3NOYW1lID0gIndlYmtpdC1odG1sLW1lc3NhZ2UtaWNvbiI7Ci0gICAgICAgIG1lc3NhZ2VMaW5l
RWxlbWVudC5hcHBlbmRDaGlsZChpbWFnZSk7Ci0gICAgICAgIG1lc3NhZ2VMaW5lRWxlbWVudC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cubWVzc2FnZSkpOwotCi0gICAg
ICAgIHJvd01lc3NhZ2UuZWxlbWVudCA9IG1lc3NhZ2VMaW5lRWxlbWVudDsKLSAgICAgICAgcm93
TWVzc2FnZS5yZXBlYXRDb3VudCA9IG1zZy50b3RhbFJlcGVhdENvdW50OwotICAgICAgICB0aGlz
Ll91cGRhdGVNZXNzYWdlUmVwZWF0Q291bnQocm93TWVzc2FnZSk7Ci0gICAgICAgIHRoaXMuX3Rl
eHRFZGl0b3IuZW5kVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlTWVzc2FnZVJlcGVh
dENvdW50OiBmdW5jdGlvbihyb3dNZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKHJvd01lc3Nh
Z2UucmVwZWF0Q291bnQgPCAyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICgh
cm93TWVzc2FnZS5yZXBlYXRDb3VudEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHZhciByZXBlYXRD
b3VudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAg
ICByb3dNZXNzYWdlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocmVwZWF0Q291bnRFbGVtZW50KTsKLSAg
ICAgICAgICAgIHJvd01lc3NhZ2UucmVwZWF0Q291bnRFbGVtZW50ID0gcmVwZWF0Q291bnRFbGVt
ZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgcm93TWVzc2FnZS5yZXBlYXRDb3VudEVsZW1lbnQu
dGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiAocmVwZWF0ZWQgJWQgdGltZXMp
Iiwgcm93TWVzc2FnZS5yZXBlYXRDb3VudCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2V9IG1zZwotICAgICAqLwotICAgIHJlbW92ZU1lc3NhZ2VGcm9tU291cmNlOiBm
dW5jdGlvbihsaW5lTnVtYmVyLCBtc2cpCi0gICAgewotICAgICAgICBpZiAobGluZU51bWJlciA+
PSB0aGlzLl90ZXh0RWRpdG9yLmxpbmVzQ291bnQpCi0gICAgICAgICAgICBsaW5lTnVtYmVyID0g
dGhpcy5fdGV4dEVkaXRvci5saW5lc0NvdW50IC0gMTsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXIg
PCAwKQotICAgICAgICAgICAgbGluZU51bWJlciA9IDA7Ci0KLSAgICAgICAgdmFyIHJvd01lc3Nh
Z2VzID0gdGhpcy5fcm93TWVzc2FnZXNbbGluZU51bWJlcl07Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyByb3dNZXNzYWdlcyAmJiBpIDwgcm93TWVzc2FnZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciByb3dNZXNzYWdlID0gcm93TWVzc2FnZXNbaV07Ci0gICAgICAgICAgICBpZiAo
cm93TWVzc2FnZS5jb25zb2xlTWVzc2FnZSAhPT0gbXNnKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICB2YXIgbWVzc2FnZUxpbmVFbGVtZW50ID0gcm93TWVzc2FnZS5l
bGVtZW50OwotICAgICAgICAgICAgdmFyIG1lc3NhZ2VCdWJibGVFbGVtZW50ID0gbWVzc2FnZUxp
bmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Ci0gICAgICAgICAgICBtZXNzYWdlQnViYmxlRWxlbWVu
dC5yZW1vdmVDaGlsZChtZXNzYWdlTGluZUVsZW1lbnQpOwotICAgICAgICAgICAgcm93TWVzc2Fn
ZXMucmVtb3ZlKHJvd01lc3NhZ2UpOwotICAgICAgICAgICAgaWYgKCFyb3dNZXNzYWdlcy5sZW5n
dGgpCi0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Jvd01lc3NhZ2VzW2xpbmVOdW1iZXJd
OwotICAgICAgICAgICAgaWYgKCFtZXNzYWdlQnViYmxlRWxlbWVudC5jaGlsZEVsZW1lbnRDb3Vu
dCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IucmVtb3ZlRGVjb3JhdGlvbihs
aW5lTnVtYmVyLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX21lc3NhZ2VCdWJibGVzW2xpbmVOdW1iZXJdOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcG9wdWxhdGVMaW5lR3V0dGVy
Q29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51LCBsaW5lTnVtYmVyKQotICAgIHsKLSAg
ICB9LAotCi0gICAgcG9wdWxhdGVUZXh0QXJlYUNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0
TWVudSwgbGluZU51bWJlcikKLSAgICB7Ci0gICAgfSwKLQotICAgIGluaGVyaXRTY3JvbGxQb3Np
dGlvbnM6IGZ1bmN0aW9uKHNvdXJjZUZyYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dEVk
aXRvci5pbmhlcml0U2Nyb2xsUG9zaXRpb25zKHNvdXJjZUZyYW1lLl90ZXh0RWRpdG9yKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBj
YW5FZGl0U291cmNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IAotICAgICAqLwot
ICAgIGNvbW1pdEVkaXRpbmc6IGZ1bmN0aW9uKHRleHQpCi0gICAgewotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHRleHRSYW5nZQotICAg
ICAqLwotICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3VwZGF0ZVNvdXJjZVBvc2l0aW9uKHRleHRSYW5nZSk7Ci0gICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVu
dHMuU2VsZWN0aW9uQ2hhbmdlZCwgdGV4dFJhbmdlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSB0ZXh0UmFuZ2UKLSAgICAgKi8KLSAg
ICBfdXBkYXRlU291cmNlUG9zaXRpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGV4dFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0
ZXh0UmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0aGlzLl9zb3VyY2VQb3NpdGlvbkVs
ZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxpbmUgJWQsIENvbHVt
biAlZCIsIHRleHRSYW5nZS5lbmRMaW5lICsgMSwgdGV4dFJhbmdlLmVuZENvbHVtbiArIDEpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRleHRSYW5nZSA9IHRleHRS
YW5nZS5ub3JtYWxpemUoKTsKLQotICAgICAgICB2YXIgc2VsZWN0ZWRUZXh0ID0gdGhpcy5fdGV4
dEVkaXRvci5jb3B5UmFuZ2UodGV4dFJhbmdlKTsKLSAgICAgICAgaWYgKHRleHRSYW5nZS5zdGFy
dExpbmUgPT09IHRleHRSYW5nZS5lbmRMaW5lKQotICAgICAgICAgICAgdGhpcy5fc291cmNlUG9z
aXRpb25FbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBjaGFy
YWN0ZXJzIHNlbGVjdGVkIiwgc2VsZWN0ZWRUZXh0Lmxlbmd0aCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRoaXMuX3NvdXJjZVBvc2l0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiJWQgbGluZXMsICVkIGNoYXJhY3RlcnMgc2VsZWN0ZWQiLCB0ZXh0
UmFuZ2UuZW5kTGluZSAtIHRleHRSYW5nZS5zdGFydExpbmUgKyAxLCBzZWxlY3RlZFRleHQubGVu
Z3RoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1i
ZXIKLSAgICAgKi8KLSAgICBzY3JvbGxDaGFuZ2VkOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAg
IHsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLkV2ZW50cy5TY3JvbGxDaGFuZ2VkLCBsaW5lTnVtYmVyKTsKLSAgICB9LAotCi0g
ICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICB2YXIgc2hvcnRj
dXRLZXkgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5RnJvbUV2ZW50KGUp
OwotICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dEtleV07Ci0g
ICAgICAgIGlmIChoYW5kbGVyICYmIGhhbmRsZXIoKSkKLSAgICAgICAgICAgIGUuY29uc3VtZSh0
cnVlKTsKLSAgICB9LAotCi0gICAgX2NvbW1pdEVkaXRpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl90ZXh0RWRpdG9yLnJlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl90ZXh0RWRpdG9yLnRleHQo
KTsKLSAgICAgICAgdGhpcy5jb21taXRFZGl0aW5nKGNvbnRlbnQpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5
cGUKLX0KLQotCi0vKioKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckRl
bGVnYXRlfQotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yRGVs
ZWdhdGVGb3JTb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHNvdXJjZUZyYW1lKQotewotICAgIHRoaXMu
X3NvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
RGVsZWdhdGVGb3JTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7Ci0gICAgb25UZXh0Q2hhbmdlZDog
ZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQotICAgIHsKLSAgICAgICAgdGhpcy5fc291cmNl
RnJhbWUub25UZXh0Q2hhbmdlZChvbGRSYW5nZSwgbmV3UmFuZ2UpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHRleHRSYW5nZQotICAg
ICAqLwotICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3NvdXJjZUZyYW1lLnNlbGVjdGlvbkNoYW5nZWQodGV4dFJhbmdlKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAg
Ki8KLSAgICBzY3JvbGxDaGFuZ2VkOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fc291cmNlRnJhbWUuc2Nyb2xsQ2hhbmdlZChsaW5lTnVtYmVyKTsKLSAgICB9LAot
Ci0gICAgcG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51
LCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fc291cmNlRnJhbWUucG9wdWxhdGVM
aW5lR3V0dGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIGxpbmVOdW1iZXIpOwotICAgIH0sCi0K
LSAgICBwb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51LCBs
aW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fc291cmNlRnJhbWUucG9wdWxhdGVUZXh0
QXJlYUNvbnRleHRNZW51KGNvbnRleHRNZW51LCBsaW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWZWYWx1ZQotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gaXNFeHRlcm5hbAotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAg
Y3JlYXRlTGluazogZnVuY3Rpb24oaHJlZlZhbHVlLCBpc0V4dGVybmFsKQotICAgIHsKLSAgICAg
ICAgdmFyIHRhcmdldExvY2F0aW9uID0gV2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5jb21wbGV0ZVVS
TCh0aGlzLl9zb3VyY2VGcmFtZS5fdXJsLCBocmVmVmFsdWUpOwotICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUodGFyZ2V0TG9jYXRpb24gfHwgaHJlZlZhbHVlLCBo
cmVmVmFsdWUsIHVuZGVmaW5lZCwgaXNFeHRlcm5hbCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9f
XzogV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxlZ2F0ZS5wcm90b3R5cGUKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlSFRNTFRva2VuaXpl
ci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlSFRNTFRva2Vu
aXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExNDA0NC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUhUTUxUb2tlbml6
ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4MTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IHJl
MmMgMC4xMy41IG9uIEZyaSBNYXkgIDYgMTM6NDc6MDYgMjAxMSAqLwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIEdlbmVyYXRlIGpzIGZp
bGUgYXMgZm9sbG93czoKLS8vCi0vLyByZTJjIC1pc2MgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUhUTUxUb2tlbml6ZXIucmUyanMgXAotLy8gfCBzZWQgJ3N8Xnl5XChbXjpdKlwp
Klw6fGNhc2UgXDE6fCcgXAotLy8gfCBzZWQgJ3N8WypdY3Vyc29yWytdWytdfHRoaXMuX2NoYXJB
dChjdXJzb3IrKyl8JyBcCi0vLyB8IHNlZCAnc3xbWypdWytdWytdY3Vyc29yfHRoaXMuX2NoYXJB
dCgrK2N1cnNvcil8JyBcCi0vLyB8IHNlZCAnc3xbKl1jdXJzb3J8dGhpcy5fY2hhckF0KGN1cnNv
cil8JyBcCi0vLyB8IHNlZCAnc3x5eWNoID0gXCpcKFteO10qXCl8eXljaCA9IHRoaXMuX2NoYXJB
dFwxfCcgXAotLy8gfCBzZWQgJ3N8eyBnb3RvQ2FzZSA9IFwoW147IGNvbnRpbnVlOyB9O10qXCl8
eyBnb3RvQ2FzZSA9IFwxOyBjb250aW51ZTsgfXwnIFwKLS8vIHwgc2VkICdzfHVuc2lnbmVkXCBp
bnR8dmFyfCcgXAotLy8gfCBzZWQgJ3N8dmFyXCB5eWNofGNhc2UgMTogY2FzZSAxOiB2YXIgeXlj
aHwnCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlNv
dXJjZVRva2VuaXplcn0KLSAqLwotV2ViSW5zcGVjdG9yLlNvdXJjZUhUTUxUb2tlbml6ZXIgPSBm
dW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5jYWxsKHRoaXMp
OwotCi0gICAgLy8gVGhlIG9yZGVyIGlzIGRldGVybWluZWQgYnkgdGhlIGdlbmVyYXRlZCBjb2Rl
LgotICAgIHRoaXMuX2xleENvbmRpdGlvbnMgPSB7Ci0gICAgICAgIElOSVRJQUw6IDAsCi0gICAg
ICAgIENPTU1FTlQ6IDEsCi0gICAgICAgIERPQ1RZUEU6IDIsCi0gICAgICAgIFRBRzogMywKLSAg
ICAgICAgRFNUUklORzogNCwKLSAgICAgICAgU1NUUklORzogNQotICAgIH07Ci0gICAgdGhpcy5j
YXNlX0lOSVRJQUwgPSAxMDAwOwotICAgIHRoaXMuY2FzZV9DT01NRU5UID0gMTAwMTsKLSAgICB0
aGlzLmNhc2VfRE9DVFlQRSA9IDEwMDI7Ci0gICAgdGhpcy5jYXNlX1RBRyA9IDEwMDM7Ci0gICAg
dGhpcy5jYXNlX0RTVFJJTkcgPSAxMDA0OwotICAgIHRoaXMuY2FzZV9TU1RSSU5HID0gMTAwNTsK
LQotICAgIHRoaXMuX3BhcnNlQ29uZGl0aW9ucyA9IHsKLSAgICAgICAgSU5JVElBTDogMCwKLSAg
ICAgICAgQVRUUklCVVRFOiAxLAotICAgICAgICBBVFRSSUJVVEVfVkFMVUU6IDIsCi0gICAgICAg
IExJTktJRlk6IDQsCi0gICAgICAgIEFfTk9ERTogOCwKLSAgICAgICAgU0NSSVBUOiAxNiwKLSAg
ICAgICAgU1RZTEU6IDMyCi0gICAgfTsKLQotICAgIHRoaXMuY29uZGl0aW9uID0gdGhpcy5jcmVh
dGVJbml0aWFsQ29uZGl0aW9uKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VIVE1MVG9rZW5p
emVyLnByb3RvdHlwZSA9IHsKLSAgICBjcmVhdGVJbml0aWFsQ29uZGl0aW9uOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4geyBsZXhDb25kaXRpb246IHRoaXMuX2xleENvbmRpdGlv
bnMuSU5JVElBTCwgcGFyc2VDb25kaXRpb246IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklUSUFM
IH07Ci0gICAgfSwKLQotICAgIHNldCBsaW5lKGxpbmUpIHsKLSAgICAgICAgaWYgKHRoaXMuX2Nv
bmRpdGlvbi5pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXJDb25kaXRpb24pIHsKLSAgICAgICAg
ICAgIHZhciBtYXRjaCA9IC88XC9zY3JpcHQvaS5leGVjKGxpbmUpOwotICAgICAgICAgICAgaWYg
KG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxKYXZhU2NyaXB0VG9rZW5p
emVyLmxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXIu
bGluZSA9IGxpbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZGl0aW9uLmludGVybmFs
Q1NTVG9rZW5pemVyQ29uZGl0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSAvPFwvc3R5
bGUvaS5leGVjKGxpbmUpOwotICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5faW50ZXJuYWxDU1NUb2tlbml6ZXIubGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsIG1h
dGNoLmluZGV4KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX2lu
dGVybmFsQ1NTVG9rZW5pemVyLmxpbmUgPSBsaW5lOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMu
X2xpbmUgPSBsaW5lOwotICAgIH0sCi0KLSAgICBfaXNFeHBlY3RpbmdBdHRyaWJ1dGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRp
b24gJiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuQVRUUklCVVRFOwotICAgIH0sCi0KLSAgICBfaXNF
eHBlY3RpbmdBdHRyaWJ1dGVWYWx1ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAmIHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5B
VFRSSUJVVEVfVkFMVUU7Ci0gICAgfSwKLQotICAgIF9zZXRFeHBlY3RpbmdBdHRyaWJ1dGU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc0V4cGVjdGluZ0F0dHJpYnV0ZVZh
bHVlKCkpCi0gICAgICAgICAgICB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gXj0gdGhp
cy5fcGFyc2VDb25kaXRpb25zLkFUVFJJQlVURV9WQUxVRTsKLSAgICAgICAgdGhpcy5fY29uZGl0
aW9uLnBhcnNlQ29uZGl0aW9uIHw9IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5BVFRSSUJVVEU7Ci0g
ICAgfSwKLQotICAgIF9zZXRFeHBlY3RpbmdBdHRyaWJ1dGVWYWx1ZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX2lzRXhwZWN0aW5nQXR0cmlidXRlKCkpCi0gICAgICAgICAg
ICB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gXj0gdGhpcy5fcGFyc2VDb25kaXRpb25z
LkFUVFJJQlVURTsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uIHw9IHRo
aXMuX3BhcnNlQ29uZGl0aW9ucy5BVFRSSUJVVEVfVkFMVUU7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHN0cmluZ0VuZHMKLSAgICAgKi8KLSAgICBfc3RyaW5n
VG9rZW46IGZ1bmN0aW9uKGN1cnNvciwgc3RyaW5nRW5kcykKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5faXNFeHBlY3RpbmdBdHRyaWJ1dGVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICB0aGlzLnRv
a2VuVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICB9Ci0g
ICAgICAgIHRoaXMudG9rZW5UeXBlID0gdGhpcy5fYXR0clZhbHVlVG9rZW5UeXBlKCk7Ci0gICAg
ICAgIGlmIChzdHJpbmdFbmRzKQotICAgICAgICAgICAgdGhpcy5fc2V0RXhwZWN0aW5nQXR0cmli
dXRlKCk7Ci0gICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgfSwKLQotICAgIF9hdHRyVmFsdWVU
b2tlblR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24u
cGFyc2VDb25kaXRpb24gJiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuTElOS0lGWSkgewotICAgICAg
ICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAmIHRoaXMuX3BhcnNlQ29u
ZGl0aW9ucy5BX05PREUpCi0gICAgICAgICAgICAgICAgcmV0dXJuICJodG1sLWV4dGVybmFsLWxp
bmsiOwotICAgICAgICAgICAgcmV0dXJuICJodG1sLXJlc291cmNlLWxpbmsiOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAiaHRtbC1hdHRyaWJ1dGUtdmFsdWUiOwotICAgIH0sCi0KLSAgICBn
ZXQgX2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplcigpCi0gICAgewotICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFRv
a2VuaXplcigidGV4dC9qYXZhc2NyaXB0Iik7Ci0gICAgfSwKLQotICAgIGdldCBfaW50ZXJuYWxD
U1NUb2tlbml6ZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Tb3VyY2VU
b2tlbml6ZXIuUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUb2tlbml6ZXIoInRleHQvY3NzIik7
Ci0gICAgfSwKLQotICAgIHNjcmlwdFN0YXJ0ZWQ6IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2NvbmRpdGlvbi5pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXJDb25kaXRp
b24gPSB0aGlzLl9pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXIuY3JlYXRlSW5pdGlhbENvbmRp
dGlvbigpOwotICAgIH0sCi0KLSAgICBzY3JpcHRFbmRlZDogZnVuY3Rpb24oY3Vyc29yKQotICAg
IHsKLSAgICB9LAotCi0gICAgc3R5bGVTaGVldFN0YXJ0ZWQ6IGZ1bmN0aW9uKGN1cnNvcikKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbi5pbnRlcm5hbENTU1Rva2VuaXplckNvbmRpdGlv
biA9IHRoaXMuX2ludGVybmFsQ1NTVG9rZW5pemVyLmNyZWF0ZUluaXRpYWxDb25kaXRpb24oKTsK
LSAgICB9LAotCi0gICAgc3R5bGVTaGVldEVuZGVkOiBmdW5jdGlvbihjdXJzb3IpCi0gICAgewot
ICAgIH0sCi0KLSAgICBuZXh0VG9rZW46IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9jb25kaXRpb24uaW50ZXJuYWxKYXZhU2NyaXB0VG9rZW5pemVyQ29uZGl0aW9u
KSB7Ci0gICAgICAgICAgICAvLyBSZS1zZXQgbGluZSB0byBmb3JjZSA8L3NjcmlwdD4gZGV0ZWN0
aW9uIGZpcnN0LgotICAgICAgICAgICAgdGhpcy5saW5lID0gdGhpcy5fbGluZTsKLSAgICAgICAg
ICAgIGlmIChjdXJzb3IgIT09IHRoaXMuX2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplci5fbGlu
ZS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAvLyBUb2tlbml6ZXIgaXMgc3RhdGVsZXNzLCBz
byByZXN0b3JlIGl0cyBjb25kaXRpb24gYmVmb3JlIHRva2VuaXppbmcgYW5kIHNhdmUgaXQgYWZ0
ZXIuCi0gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxKYXZhU2NyaXB0VG9rZW5pemVyLmNv
bmRpdGlvbiA9IHRoaXMuX2NvbmRpdGlvbi5pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXJDb25k
aXRpb247Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2ludGVybmFsSmF2YVNj
cmlwdFRva2VuaXplci5uZXh0VG9rZW4oY3Vyc29yKTsKLSAgICAgICAgICAgICAgICB0aGlzLnRv
a2VuVHlwZSA9IHRoaXMuX2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplci50b2tlblR5cGU7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fY29uZGl0aW9uLmludGVybmFsSmF2YVNjcmlwdFRva2VuaXpl
ckNvbmRpdGlvbiA9IHRoaXMuX2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplci5jb25kaXRpb247
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y3Vyc29yICE9PSB0aGlzLl9saW5lLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fY29uZGl0aW9uLmludGVybmFsSmF2YVNjcmlwdFRva2VuaXplckNvbmRpdGlvbjsKLSAgICAg
ICAgfSBlbHNlIGlmICh0aGlzLl9jb25kaXRpb24uaW50ZXJuYWxDU1NUb2tlbml6ZXJDb25kaXRp
b24pIHsKLSAgICAgICAgICAgIC8vIFJlLXNldCBsaW5lIHRvIGZvcmNlIDwvc3R5bGU+IGRldGVj
dGlvbiBmaXJzdC4KLSAgICAgICAgICAgIHRoaXMubGluZSA9IHRoaXMuX2xpbmU7Ci0gICAgICAg
ICAgICBpZiAoY3Vyc29yICE9PSB0aGlzLl9pbnRlcm5hbENTU1Rva2VuaXplci5fbGluZS5sZW5n
dGgpIHsKLSAgICAgICAgICAgICAgICAvLyBUb2tlbml6ZXIgaXMgc3RhdGVsZXNzLCBzbyByZXN0
b3JlIGl0cyBjb25kaXRpb24gYmVmb3JlIHRva2VuaXppbmcgYW5kIHNhdmUgaXQgYWZ0ZXIuCi0g
ICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxDU1NUb2tlbml6ZXIuY29uZGl0aW9uID0gdGhp
cy5fY29uZGl0aW9uLmludGVybmFsQ1NTVG9rZW5pemVyQ29uZGl0aW9uOwotICAgICAgICAgICAg
ICAgIHZhciByZXN1bHQgPSB0aGlzLl9pbnRlcm5hbENTU1Rva2VuaXplci5uZXh0VG9rZW4oY3Vy
c29yKTsKLSAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9IHRoaXMuX2ludGVybmFsQ1NT
VG9rZW5pemVyLnRva2VuVHlwZTsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb25kaXRpb24uaW50
ZXJuYWxDU1NUb2tlbml6ZXJDb25kaXRpb24gPSB0aGlzLl9pbnRlcm5hbENTU1Rva2VuaXplci5j
b25kaXRpb247Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY3Vyc29yICE9PSB0aGlzLl9saW5lLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpcy5fY29uZGl0aW9uLmludGVybmFsQ1NTVG9rZW5pemVyQ29uZGl0aW9uOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIGN1cnNvck9uRW50ZXIgPSBjdXJzb3I7Ci0gICAgICAgIHZh
ciBnb3RvQ2FzZSA9IDE7Ci0gICAgICAgIHZhciBZWU1BUktFUjsKLSAgICAgICAgd2hpbGUgKDEp
IHsKLSAgICAgICAgICAgIHN3aXRjaCAoZ290b0Nhc2UpCi0gICAgICAgICAgICAvLyBGb2xsb3dp
bmcgY29tbWVudCBpcyByZXBsYWNlZCB3aXRoIGdlbmVyYXRlZCBzdGF0ZSBtYWNoaW5lLgotCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMTogdmFyIHl5Y2g7Ci0gICAgICAgICAgICB2YXIg
eXlhY2NlcHQgPSAwOwotICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TGV4Q29uZGl0aW9uKCkgPCAz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TGV4Q29uZGl0aW9uKCkgPCAxKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSB0aGlzLmNhc2VfSU5JVElBTDsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuZ2V0TGV4Q29uZGl0aW9uKCkgPCAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gdGhpcy5jYXNlX0NPTU1FTlQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IHRo
aXMuY2FzZV9ET0NUWVBFOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRoaXMuZ2V0TGV4Q29uZGl0aW9uKCkgPCA0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSB0aGlzLmNhc2VfVEFHOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMZXhDb25kaXRpb24oKSA8IDUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSB0aGlzLmNhc2VfRFNUUklO
RzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gdGhpcy5jYXNlX1NTVFJJTkc7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLWNhc2UgdGhpcy5j
YXNlX0NPTU1FTlQ6Ci0KLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsK
LSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnXHInKSB7IGdvdG9DYXNlID0gNDsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy0nKSB7IGdvdG9DYXNlID0gNjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDM7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgfQotY2FzZSAyOgotICAgICAgICAgICAgeyB0aGlzLnRva2VuVHlwZSA9ICJodG1s
LWNvbW1lbnQiOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDM6Ci0gICAgICAgICAgICB5eWFjY2Vw
dCA9IDA7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytjdXJz
b3IpOwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDk7IGNvbnRpbnVlOyB9OwotY2FzZSA0Ogot
ICAgICAgICAgICAgKytjdXJzb3I7Ci1jYXNlIDU6Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5U
eXBlID0gbnVsbDsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSA2OgotICAgICAgICAgICAgeXlhY2Nl
cHQgPSAxOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChZWU1BUktFUiA9ICsrY3Vy
c29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICctJykgeyBnb3RvQ2FzZSA9IDU7IGNvbnRp
bnVlOyB9OwotY2FzZSA3OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNo
ID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnPicpIHsg
Z290b0Nhc2UgPSAxMDsgY29udGludWU7IH07Ci1jYXNlIDg6Ci0gICAgICAgICAgICB5eWFjY2Vw
dCA9IDA7Ci0gICAgICAgICAgICBZWU1BUktFUiA9ICsrY3Vyc29yOwotICAgICAgICAgICAgeXlj
aCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotY2FzZSA5OgotICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ1xmJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2Ug
PSAyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gODsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdccicpIHsgZ290b0Nhc2UgPSAyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAnLScpIHsgZ290b0Nhc2UgPSAxMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgeyBnb3RvQ2FzZSA9IDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAxMDoK
LSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgdGhpcy5zZXRMZXhDb25kaXRpb24o
dGhpcy5fbGV4Q29uZGl0aW9ucy5JTklUSUFMKTsKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5
cGUgPSAiaHRtbC1jb21tZW50IjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAxMjoKLSAgICAgICAg
ICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwot
ICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy0nKSB7IGdvdG9DYXNlID0gNzsgY29udGludWU7IH07
Ci0gICAgICAgICAgICBjdXJzb3IgPSBZWU1BUktFUjsKLSAgICAgICAgICAgIGlmICh5eWFjY2Vw
dCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDI7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICB9Ci0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiAqLwotY2FzZSB0aGlzLmNhc2VfRE9DVFlQRToKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTg7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdccicpIHsgZ290
b0Nhc2UgPSAxODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz4n
KSB7IGdvdG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSAxNzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDE2OgotICAgICAgICAg
ICAgeyB0aGlzLnRva2VuVHlwZSA9ICJodG1sLWRvY3R5cGUiOyByZXR1cm4gY3Vyc29yOyB9Ci1j
YXNlIDE3OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMjM7IGNvbnRpbnVlOyB9OwotY2FzZSAxODoKLSAgICAgICAg
ICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeyB0aGlzLnRva2VuVHlwZSA9IG51bGw7IHJldHVy
biBjdXJzb3I7IH0KLWNhc2UgMjA6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAg
IHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuSU5JVElBTCk7Ci0gICAg
ICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gImh0bWwtZG9jdHlwZSI7IHJldHVybiBjdXJzb3I7
IH0KLWNhc2UgMjI6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoY3Vyc29yKTsKLWNhc2UgMjM6Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAn
XGYnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDE2
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjI7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
XHInKSB7IGdvdG9DYXNlID0gMTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5
eWNoID09ICc+JykgeyBnb3RvQ2FzZSA9IDE2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICB7IGdvdG9DYXNlID0gMjI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotLyogKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLWNhc2UgdGhpcy5jYXNlX0RTVFJJTkc6
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBp
ZiAoeXljaCA8PSAnXGYnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBn
b3RvQ2FzZSA9IDI4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
Mjc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnXHInKSB7IGdvdG9DYXNlID0gMjg7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICciJykgeyBnb3RvQ2FzZSA9IDMwOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
fQotY2FzZSAyNjoKLSAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMuX3N0cmluZ1Rva2VuKGN1cnNv
cik7IH0KLWNhc2UgMjc6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29y
KTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzNDsgY29udGludWU7IH07Ci1jYXNlIDI4Ogot
ICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gbnVs
bDsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAzMDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotY2Fz
ZSAzMToKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlv
bnMuVEFHKTsKLSAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMuX3N0cmluZ1Rva2VuKGN1cnNvciwg
dHJ1ZSk7IH0KLWNhc2UgMzI6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vy
c29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMTsgY29udGludWU7IH07Ci1jYXNlIDMz
OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0
KGN1cnNvcik7Ci1jYXNlIDM0OgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSAyNjsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDMzOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3Rv
Q2FzZSA9IDI2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnIicp
IHsgZ290b0Nhc2UgPSAzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDMzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLS8qICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqICovCi1jYXNlIHRoaXMuY2FzZV9JTklUSUFMOgotICAgICAgICAg
ICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
JzwnKSB7IGdvdG9DYXNlID0gMzk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgKytjdXJzb3I7
Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gbnVsbDsgcmV0dXJuIGN1cnNvcjsgfQot
Y2FzZSAzOToKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8
PSAnLycpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnIScpIHsgZ290b0Nhc2UgPSA0
NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJy8nKSB7IGdvdG9D
YXNlID0gNDE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnUycpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0g
J1MnKSB7IGdvdG9DYXNlID0gNDI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdzJykgeyBnb3RvQ2FzZSA9IDQy
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDQw
OgotICAgICAgICAgICAgdGhpcy5zZXRMZXhDb25kaXRpb24odGhpcy5fbGV4Q29uZGl0aW9ucy5U
QUcpOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29uZGl0
aW9uLnBhcnNlQ29uZGl0aW9uICYgKHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5TQ1JJUFQgfCB0aGlz
Ll9wYXJzZUNvbmRpdGlvbnMuU1RZTEUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBE
byBub3QgdG9rZW5pemUgc2NyaXB0IGFuZCBzdHlsZSB0YWcgY29udGVudHMsIGtlZXAgbGV4ZXIg
c3RhdGUsIGV2ZW4gdGhvdWdoIHByb2Nlc3NpbmcgIjwiLgotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZXRMZXhDb25kaXRpb24odGhpcy5fbGV4Q29uZGl0aW9ucy5JTklUSUFMKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPSB0aGlzLl9w
YXJzZUNvbmRpdGlvbnMuSU5JVElBTDsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5
cGUgPSAiaHRtbC10YWciOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAg
ICAgICAgICAgICAgIH0KLWNhc2UgNDE6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDA7Ci0gICAg
ICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytjdXJzb3IpOwotICAgICAg
ICAgICAgaWYgKHl5Y2ggPT0gJ1MnKSB7IGdvdG9DYXNlID0gNzM7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgaWYgKHl5Y2ggPT0gJ3MnKSB7IGdvdG9DYXNlID0gNzM7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQwOyBjb250aW51ZTsgfTsKLWNhc2UgNDI6Ci0gICAg
ICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdUJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdDJykgeyBnb3RvQ2Fz
ZSA9IDYyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnVCcpIHsg
Z290b0Nhc2UgPSA2MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdjJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA+PSAnYycpIHsgZ290b0Nhc2UgPSA2MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3QnKSB7IGdvdG9DYXNl
ID0gNjM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNh
c2UgNDM6Ci0gICAgICAgICAgICBjdXJzb3IgPSBZWU1BUktFUjsKLSAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSA0MDsgY29udGludWU7IH07Ci1jYXNlIDQ0OgotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQycpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoeXljaCAhPSAnLScpIHsgZ290b0Nhc2UgPSA0MzsgY29udGludWU7
IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdE
JykgeyBnb3RvQ2FzZSA9IDQ2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnZCcpIHsgZ290b0Nhc2UgPSA0NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
Jy0nKSB7IGdvdG9DYXNlID0gNTQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2UgNDY6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5f
Y2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdPJykgeyBnb3RvQ2Fz
ZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdvJykgeyBnb3Rv
Q2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2UgNDc6Ci0gICAgICAgICAgICB5eWNoID0gdGhp
cy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdDJykgeyBnb3Rv
Q2FzZSA9IDQ4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdjJykgeyBn
b3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2UgNDg6Ci0gICAgICAgICAgICB5eWNoID0g
dGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdUJykgeyBn
b3RvQ2FzZSA9IDQ5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICd0Jykg
eyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2UgNDk6Ci0gICAgICAgICAgICB5eWNo
ID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdZJykg
eyBnb3RvQ2FzZSA9IDUwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICd5
JykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2UgNTA6Ci0gICAgICAgICAgICB5
eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdQ
JykgeyBnb3RvQ2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9
ICdwJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2UgNTE6Ci0gICAgICAgICAg
ICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09
ICdFJykgeyBnb3RvQ2FzZSA9IDUyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNo
ICE9ICdlJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2UgNTI6Ci0gICAgICAg
ICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xl
eENvbmRpdGlvbnMuRE9DVFlQRSk7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gImh0
bWwtZG9jdHlwZSI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgNTQ6Ci0gICAgICAgICAgICArK2N1
cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdcZicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4n
KSB7IGdvdG9DYXNlID0gNTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSA1NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdccicpIHsgZ290b0Nhc2UgPSA1NzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJy0nKSB7IGdvdG9DYXNlID0gNTQ7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNo
ID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnLScpIHsg
Z290b0Nhc2UgPSA1OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNDM7
IGNvbnRpbnVlOyB9OwotY2FzZSA1NzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAg
ICAgdGhpcy5zZXRMZXhDb25kaXRpb24odGhpcy5fbGV4Q29uZGl0aW9ucy5DT01NRU5UKTsKLSAg
ICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAiaHRtbC1jb21tZW50IjsgcmV0dXJuIGN1cnNv
cjsgfQotY2FzZSA1OToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9
IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJz4nKSB7IGdv
dG9DYXNlID0gNTQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAg
ICAgICB7IHRoaXMudG9rZW5UeXBlID0gImh0bWwtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0K
LWNhc2UgNjI6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAg
ICAgICAgICAgIGlmICh5eWNoID09ICdSJykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIGlmICh5eWNoID09ICdyJykgeyBnb3RvQ2FzZSA9IDY4OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA0MzsgY29udGludWU7IH07Ci1jYXNlIDYzOgot
ICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBp
ZiAoeXljaCA9PSAnWScpIHsgZ290b0Nhc2UgPSA2NDsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICBpZiAoeXljaCAhPSAneScpIHsgZ290b0Nhc2UgPSA0MzsgY29udGludWU7IH07Ci1jYXNlIDY0
OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA9PSAnTCcpIHsgZ290b0Nhc2UgPSA2NTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICBpZiAoeXljaCAhPSAnbCcpIHsgZ290b0Nhc2UgPSA0MzsgY29udGludWU7IH07Ci1jYXNl
IDY1OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAg
ICAgICBpZiAoeXljaCA9PSAnRScpIHsgZ290b0Nhc2UgPSA2NjsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICBpZiAoeXljaCAhPSAnZScpIHsgZ290b0Nhc2UgPSA0MzsgY29udGludWU7IH07Ci1j
YXNlIDY2OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB0aGlzLnNldExleENv
bmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLlRBRyk7Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gJiB0aGlzLl9w
YXJzZUNvbmRpdGlvbnMuU1RZTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5v
dCB0b2tlbml6ZSBzdHlsZSB0YWcgY29udGVudHMsIGtlZXAgbGV4ZXIgc3RhdGUsIGV2ZW4gdGhv
dWdoIHByb2Nlc3NpbmcgIjwiLgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZXhD
b25kaXRpb24odGhpcy5fbGV4Q29uZGl0aW9ucy5JTklUSUFMKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2tlblR5cGUgPSAiaHRtbC10YWciOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
b25kaXRpb24ucGFyc2VDb25kaXRpb24gPSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuU1RZTEU7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEV4cGVjdGluZ0F0dHJpYnV0ZSgpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLWNhc2UgNjg6
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAg
IGlmICh5eWNoID09ICdJJykgeyBnb3RvQ2FzZSA9IDY5OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgIGlmICh5eWNoICE9ICdpJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNhc2Ug
Njk6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAg
ICAgIGlmICh5eWNoID09ICdQJykgeyBnb3RvQ2FzZSA9IDcwOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIGlmICh5eWNoICE9ICdwJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLWNh
c2UgNzA6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAg
ICAgICAgIGlmICh5eWNoID09ICdUJykgeyBnb3RvQ2FzZSA9IDcxOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIGlmICh5eWNoICE9ICd0JykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsK
LWNhc2UgNzE6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4
Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuVEFHKTsKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAmIHRoaXMu
X3BhcnNlQ29uZGl0aW9ucy5TQ1JJUFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERv
IG5vdCB0b2tlbml6ZSBzY3JpcHQgdGFnIGNvbnRlbnRzLCBrZWVwIGxleGVyIHN0YXRlLCBldmVu
IHRob3VnaCBwcm9jZXNzaW5nICI8Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0
TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuSU5JVElBTCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMudG9rZW5UeXBlID0gImh0bWwtdGFnIjsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uID0gdGhpcy5fcGFyc2VDb25kaXRpb25zLlNDUklQ
VDsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RXhwZWN0aW5nQXR0cmlidXRlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgfQotY2Fz
ZSA3MzoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ1QnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ0Mn
KSB7IGdvdG9DYXNlID0gNzU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdTJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2MnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdiJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDc1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAndCcpIHsgZ290
b0Nhc2UgPSA0MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA9PSAnWScpIHsgZ290b0Nhc2UgPSA4MTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICBpZiAoeXljaCA9PSAneScpIHsgZ290b0Nhc2UgPSA4MTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICB7IGdvdG9DYXNlID0gNDM7IGNvbnRpbnVlOyB9OwotY2FzZSA3NToKLSAgICAgICAg
ICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2gg
PT0gJ1InKSB7IGdvdG9DYXNlID0gNzY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5
Y2ggIT0gJ3InKSB7IGdvdG9DYXNlID0gNDM7IGNvbnRpbnVlOyB9OwotY2FzZSA3NjoKLSAgICAg
ICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5
Y2ggPT0gJ0knKSB7IGdvdG9DYXNlID0gNzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYg
KHl5Y2ggIT0gJ2knKSB7IGdvdG9DYXNlID0gNDM7IGNvbnRpbnVlOyB9OwotY2FzZSA3NzoKLSAg
ICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJ1AnKSB7IGdvdG9DYXNlID0gNzg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
aWYgKHl5Y2ggIT0gJ3AnKSB7IGdvdG9DYXNlID0gNDM7IGNvbnRpbnVlOyB9OwotY2FzZSA3ODoK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAg
aWYgKHl5Y2ggPT0gJ1QnKSB7IGdvdG9DYXNlID0gNzk7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgaWYgKHl5Y2ggIT0gJ3QnKSB7IGdvdG9DYXNlID0gNDM7IGNvbnRpbnVlOyB9OwotY2FzZSA3
OToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgdGhpcy5zZXRMZXhDb25kaXRp
b24odGhpcy5fbGV4Q29uZGl0aW9ucy5UQUcpOwotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJodG1sLXRhZyI7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5J
TklUSUFMOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdEVuZGVkKGN1cnNvciAtIDgp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0K
LWNhc2UgODE6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAg
ICAgICAgICAgIGlmICh5eWNoID09ICdMJykgeyBnb3RvQ2FzZSA9IDgyOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIGlmICh5eWNoICE9ICdsJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51ZTsg
fTsKLWNhc2UgODI6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsK
LSAgICAgICAgICAgIGlmICh5eWNoID09ICdFJykgeyBnb3RvQ2FzZSA9IDgzOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdlJykgeyBnb3RvQ2FzZSA9IDQzOyBjb250aW51
ZTsgfTsKLWNhc2UgODM6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMu
c2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuVEFHKTsKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiaHRtbC10YWciOwotICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPSB0aGlzLl9wYXJz
ZUNvbmRpdGlvbnMuSU5JVElBTDsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZVNoZWV0
RW5kZWQoY3Vyc29yIC0gNyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0g
ICAgICAgICAgICAgICAgfQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog
Ki8KLWNhc2UgdGhpcy5jYXNlX1NTVFJJTkc6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDg5OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gODg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXHInKSB7IGdvdG9DYXNlID0g
ODk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcJycpIHsgZ290
b0Nhc2UgPSA5MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDg4
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgODc6Ci0gICAgICAgICAgICB7IHJl
dHVybiB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3IpOyB9Ci1jYXNlIDg4OgotICAgICAgICAgICAg
eXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0g
OTU7IGNvbnRpbnVlOyB9OwotY2FzZSA4OToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAg
ICAgICAgeyB0aGlzLnRva2VuVHlwZSA9IG51bGw7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgOTE6
Ci0gICAgICAgICAgICArK2N1cnNvcjsKLWNhc2UgOTI6Ci0gICAgICAgICAgICB0aGlzLnNldExl
eENvbmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLlRBRyk7Ci0gICAgICAgICAgICB7IHJldHVy
biB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3IsIHRydWUpOyB9Ci1jYXNlIDkzOgotICAgICAgICAg
ICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNl
ID0gOTI7IGNvbnRpbnVlOyB9OwotY2FzZSA5NDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAg
ICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotY2FzZSA5NToKLSAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdcZicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4n
KSB7IGdvdG9DYXNlID0gODc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSA5NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdccicpIHsgZ290b0Nhc2UgPSA4NzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1wnJykgeyBnb3RvQ2FzZSA9IDkzOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gOTQ7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgfQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLWNhc2Ug
dGhpcy5jYXNlX1RBRzoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsK
LSAgICAgICAgICAgIGlmICh5eWNoIDw9ICcmJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdccicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3Rv
Q2FzZSA9IDEwMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49
ICdccicpIHsgZ290b0Nhc2UgPSAxMDA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcgJykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJyAnKSB7IGdvdG9DYXNlID0gMTAwOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoID09ICciJykgeyBnb3RvQ2FzZSA9IDEwMjsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc+JykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnOycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdcJycpIHsgZ290b0Nhc2UgPSAxMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzwnKSB7IGdv
dG9DYXNlID0gMTAwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICc9JykgeyBnb3RvQ2FzZSA9IDEwNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMTA2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdbJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJ1sn
KSB7IGdvdG9DYXNlID0gMTAwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICddJykgeyBnb3RvQ2Fz
ZSA9IDEwMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAg
IHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAx
MTk7IGNvbnRpbnVlOyB9OwotY2FzZSA5OToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9PT0gdGhpcy5fcGFyc2VD
b25kaXRpb25zLlNDUklQVCB8fCB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRo
aXMuX3BhcnNlQ29uZGl0aW9ucy5TVFlMRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RmFsbCB0aHJvdWdoIGlmIGV4cGVjdGluZyBhdHRyaWJ1dGVzLgotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2tlblR5cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0
aW9ucy5JTklUSUFMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9
ICJodG1sLXRhZyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRFeHBlY3RpbmdB
dHRyaWJ1dGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuX2xp
bmUuc3Vic3RyaW5nKGN1cnNvck9uRW50ZXIsIGN1cnNvcik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG9rZW4gPT09ICJhIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gfD0gdGhpcy5fcGFyc2VDb25kaXRpb25zLkFfTk9E
RTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJz
ZUNvbmRpdGlvbiAmIHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5BX05PREUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uIF49IHRoaXMuX3Bh
cnNlQ29uZGl0aW9ucy5BX05PREU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhp
cy5faXNFeHBlY3RpbmdBdHRyaWJ1dGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHRva2VuID0gdGhpcy5fbGluZS5zdWJzdHJpbmcoY3Vyc29yT25FbnRlciwgY3Vyc29yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gImhyZWYiIHx8IHRva2VuID09PSAi
c3JjIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25kaXRpb24ucGFyc2VD
b25kaXRpb24gfD0gdGhpcy5fcGFyc2VDb25kaXRpb25zLkxJTktJRlk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gfD0gdGhp
cy5fcGFyc2VDb25kaXRpb25zLkxJTktJRlkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uIF49IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5M
SU5LSUZZOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiaHRtbC1h
dHRyaWJ1dGUtbmFtZSI7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNF
eHBlY3RpbmdBdHRyaWJ1dGVWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2tlblR5cGUgPSB0aGlzLl9hdHRyVmFsdWVUb2tlblR5cGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSBudWxsOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLWNh
c2UgMTAwOgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5U
eXBlID0gbnVsbDsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAxMDI6Ci0gICAgICAgICAgICB5eWFj
Y2VwdCA9IDA7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytj
dXJzb3IpOwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDExNTsgY29udGludWU7IH07Ci1jYXNl
IDEwMzoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlz
Ll9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0g
MTA5OyBjb250aW51ZTsgfTsKLWNhc2UgMTA0OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0V4cGVjdGluZ0F0dHJp
YnV0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RXhwZWN0aW5nQXR0cmli
dXRlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSBudWxsOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLWNh
c2UgMTA2OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB0aGlzLnNldExleENv
bmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLklOSVRJQUwpOwotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJodG1sLXRhZyI7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gJiB0aGlzLl9wYXJz
ZUNvbmRpdGlvbnMuU0NSSVBUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcmlw
dFN0YXJ0ZWQoY3Vyc29yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0b2tl
bml6ZSBzY3JpcHQgdGFnIGNvbnRlbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gJiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMu
U1RZTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVTaGVldFN0YXJ0ZWQo
Y3Vyc29yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0b2tlbml6ZSBzdHls
ZSB0YWcgY29udGVudHMuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZGl0
aW9uLnBhcnNlQ29uZGl0aW9uID0gdGhpcy5fcGFyc2VDb25kaXRpb25zLklOSVRJQUw7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgfQotY2FzZSAx
MDg6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFy
QXQoY3Vyc29yKTsKLWNhc2UgMTA5OgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgewot
ICAgICAgICAgICAgICAgIGlmICh5eWNoICE9ICdcbicpIHsgZ290b0Nhc2UgPSAxMDg7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnXHInKSB7IGdvdG9DYXNlID0gMTEwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBp
ZiAoeXljaCA9PSAnXCcnKSB7IGdvdG9DYXNlID0gMTEyOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMTA4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNh
c2UgMTEwOgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB0aGlzLnNldExleENv
bmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLlNTVFJJTkcpOwotICAgICAgICAgICAgeyByZXR1
cm4gdGhpcy5fc3RyaW5nVG9rZW4oY3Vyc29yKTsgfQotY2FzZSAxMTI6Ci0gICAgICAgICAgICAr
K2N1cnNvcjsKLSAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMuX3N0cmluZ1Rva2VuKGN1cnNvciwg
dHJ1ZSk7IH0KLWNhc2UgMTE0OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5
eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci1jYXNlIDExNToKLSAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdcZicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAnXG4nKSB7IGdvdG9D
YXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2FzZSA9IDExNjsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyInKSB7IGdvdG9DYXNlID0gMTEyOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTE0OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIH0KLWNhc2UgMTE2OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAg
ICB0aGlzLnNldExleENvbmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLkRTVFJJTkcpOwotICAg
ICAgICAgICAgeyByZXR1cm4gdGhpcy5fc3RyaW5nVG9rZW4oY3Vyc29yKTsgfQotY2FzZSAxMTg6
Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
Y3Vyc29yKTsKLWNhc2UgMTE5OgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gOTk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7IGdvdG9DYXNlID0gMTE4OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDk5OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnICcp
IHsgZ290b0Nhc2UgPSA5OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICchJykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSA5OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnPicpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1wnJykgeyBnb3RvQ2FzZSA9IDk5OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzsnKSB7IGdvdG9D
YXNlID0gMTE4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDk5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnWycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gOTk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ10nKSB7
IGdvdG9DYXNlID0gOTk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IDExODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB9Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5wcm90b3R5
cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlSFRNTFRva2VuaXplci5yZTJqcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlSFRNTFRva2VuaXplci5yZTJqcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTQwZDdjYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUhUTUxUb2tlbml6ZXIucmUyanMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIEdlbmVyYXRlIGpzIGZpbGUgYXMgZm9sbG93czoKLS8vCi0vLyByZTJjIC1pc2MgV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUhUTUxUb2tlbml6ZXIucmUyanMgXAotLy8g
fCBzZWQgJ3N8Xnl5XChbXjpdKlwpKlw6fGNhc2UgXDE6fCcgXAotLy8gfCBzZWQgJ3N8WypdY3Vy
c29yWytdWytdfHRoaXMuX2NoYXJBdChjdXJzb3IrKyl8JyBcCi0vLyB8IHNlZCAnc3xbWypdWytd
WytdY3Vyc29yfHRoaXMuX2NoYXJBdCgrK2N1cnNvcil8JyBcCi0vLyB8IHNlZCAnc3xbKl1jdXJz
b3J8dGhpcy5fY2hhckF0KGN1cnNvcil8JyBcCi0vLyB8IHNlZCAnc3x5eWNoID0gXCpcKFteO10q
XCl8eXljaCA9IHRoaXMuX2NoYXJBdFwxfCcgXAotLy8gfCBzZWQgJ3N8Z290byBjYXNlIFwoW147
XSpcKXx7IGdvdG9DYXNlID0gXDE7IGNvbnRpbnVlOyB9fCcgXAotLy8gfCBzZWQgJ3N8dW5zaWdu
ZWRcIGludHx2YXJ8JyBcCi0vLyB8IHNlZCAnc3x2YXJcIHl5Y2h8Y2FzZSAxOiB2YXIgeXljaHwn
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlNvdXJj
ZVRva2VuaXplcn0KLSAqLwotV2ViSW5zcGVjdG9yLlNvdXJjZUhUTUxUb2tlbml6ZXIgPSBmdW5j
dGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5jYWxsKHRoaXMpOwot
Ci0gICAgLy8gVGhlIG9yZGVyIGlzIGRldGVybWluZWQgYnkgdGhlIGdlbmVyYXRlZCBjb2RlLgot
ICAgIHRoaXMuX2xleENvbmRpdGlvbnMgPSB7Ci0gICAgICAgIElOSVRJQUw6IDAsCi0gICAgICAg
IENPTU1FTlQ6IDEsCi0gICAgICAgIERPQ1RZUEU6IDIsCi0gICAgICAgIFRBRzogMywKLSAgICAg
ICAgRFNUUklORzogNCwKLSAgICAgICAgU1NUUklORzogNQotICAgIH07Ci0gICAgdGhpcy5jYXNl
X0lOSVRJQUwgPSAxMDAwOwotICAgIHRoaXMuY2FzZV9DT01NRU5UID0gMTAwMTsKLSAgICB0aGlz
LmNhc2VfRE9DVFlQRSA9IDEwMDI7Ci0gICAgdGhpcy5jYXNlX1RBRyA9IDEwMDM7Ci0gICAgdGhp
cy5jYXNlX0RTVFJJTkcgPSAxMDA0OwotICAgIHRoaXMuY2FzZV9TU1RSSU5HID0gMTAwNTsKLQot
ICAgIHRoaXMuX3BhcnNlQ29uZGl0aW9ucyA9IHsKLSAgICAgICAgSU5JVElBTDogMCwKLSAgICAg
ICAgQVRUUklCVVRFOiAxLAotICAgICAgICBBVFRSSUJVVEVfVkFMVUU6IDIsCi0gICAgICAgIExJ
TktJRlk6IDQsCi0gICAgICAgIEFfTk9ERTogOCwKLSAgICAgICAgU0NSSVBUOiAxNiwKLSAgICAg
ICAgU1RZTEU6IDMyCi0gICAgfTsKLQotICAgIHRoaXMuY29uZGl0aW9uID0gdGhpcy5jcmVhdGVJ
bml0aWFsQ29uZGl0aW9uKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VIVE1MVG9rZW5pemVy
LnByb3RvdHlwZSA9IHsKLSAgICBjcmVhdGVJbml0aWFsQ29uZGl0aW9uOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4geyBsZXhDb25kaXRpb246IHRoaXMuX2xleENvbmRpdGlvbnMu
SU5JVElBTCwgcGFyc2VDb25kaXRpb246IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklUSUFMIH07
Ci0gICAgfSwKLQotICAgIHNldCBsaW5lKGxpbmUpIHsKLSAgICAgICAgaWYgKHRoaXMuX2NvbmRp
dGlvbi5pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXJDb25kaXRpb24pIHsKLSAgICAgICAgICAg
IHZhciBtYXRjaCA9IC88XC9zY3JpcHQvaS5leGVjKGxpbmUpOwotICAgICAgICAgICAgaWYgKG1h
dGNoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxKYXZhU2NyaXB0VG9rZW5pemVy
LmxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCk7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXIubGlu
ZSA9IGxpbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZGl0aW9uLmludGVybmFsQ1NT
VG9rZW5pemVyQ29uZGl0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSAvPFwvc3R5bGUv
aS5leGVjKGxpbmUpOwotICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5faW50ZXJuYWxDU1NUb2tlbml6ZXIubGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsIG1hdGNo
LmluZGV4KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX2ludGVy
bmFsQ1NTVG9rZW5pemVyLmxpbmUgPSBsaW5lOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2xp
bmUgPSBsaW5lOwotICAgIH0sCi0KLSAgICBfaXNFeHBlY3RpbmdBdHRyaWJ1dGU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24g
JiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuQVRUUklCVVRFOwotICAgIH0sCi0KLSAgICBfaXNFeHBl
Y3RpbmdBdHRyaWJ1dGVWYWx1ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAmIHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5BVFRS
SUJVVEVfVkFMVUU7Ci0gICAgfSwKLQotICAgIF9zZXRFeHBlY3RpbmdBdHRyaWJ1dGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc0V4cGVjdGluZ0F0dHJpYnV0ZVZhbHVl
KCkpCi0gICAgICAgICAgICB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gXj0gdGhpcy5f
cGFyc2VDb25kaXRpb25zLkFUVFJJQlVURV9WQUxVRTsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9u
LnBhcnNlQ29uZGl0aW9uIHw9IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5BVFRSSUJVVEU7Ci0gICAg
fSwKLQotICAgIF9zZXRFeHBlY3RpbmdBdHRyaWJ1dGVWYWx1ZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX2lzRXhwZWN0aW5nQXR0cmlidXRlKCkpCi0gICAgICAgICAgICB0
aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gXj0gdGhpcy5fcGFyc2VDb25kaXRpb25zLkFU
VFJJQlVURTsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uIHw9IHRoaXMu
X3BhcnNlQ29uZGl0aW9ucy5BVFRSSUJVVEVfVkFMVUU7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbj19IHN0cmluZ0VuZHMKLSAgICAgKi8KLSAgICBfc3RyaW5nVG9r
ZW46IGZ1bmN0aW9uKGN1cnNvciwgc3RyaW5nRW5kcykKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5faXNFeHBlY3RpbmdBdHRyaWJ1dGVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICB0aGlzLnRva2Vu
VHlwZSA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMudG9rZW5UeXBlID0gdGhpcy5fYXR0clZhbHVlVG9rZW5UeXBlKCk7Ci0gICAgICAg
IGlmIChzdHJpbmdFbmRzKQotICAgICAgICAgICAgdGhpcy5fc2V0RXhwZWN0aW5nQXR0cmlidXRl
KCk7Ci0gICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgfSwKLQotICAgIF9hdHRyVmFsdWVUb2tl
blR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFy
c2VDb25kaXRpb24gJiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuTElOS0lGWSkgewotICAgICAgICAg
ICAgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAmIHRoaXMuX3BhcnNlQ29uZGl0
aW9ucy5BX05PREUpCi0gICAgICAgICAgICAgICAgcmV0dXJuICJodG1sLWV4dGVybmFsLWxpbmsi
OwotICAgICAgICAgICAgcmV0dXJuICJodG1sLXJlc291cmNlLWxpbmsiOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAiaHRtbC1hdHRyaWJ1dGUtdmFsdWUiOwotICAgIH0sCi0KLSAgICBnZXQg
X2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplcigpCi0gICAgewotICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldFRva2Vu
aXplcigidGV4dC9qYXZhc2NyaXB0Iik7Ci0gICAgfSwKLQotICAgIGdldCBfaW50ZXJuYWxDU1NU
b2tlbml6ZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tl
bml6ZXIuUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUb2tlbml6ZXIoInRleHQvY3NzIik7Ci0g
ICAgfSwKLQotICAgIHNjcmlwdFN0YXJ0ZWQ6IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2NvbmRpdGlvbi5pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXJDb25kaXRpb24g
PSB0aGlzLl9pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXIuY3JlYXRlSW5pdGlhbENvbmRpdGlv
bigpOwotICAgIH0sCi0KLSAgICBzY3JpcHRFbmRlZDogZnVuY3Rpb24oY3Vyc29yKQotICAgIHsK
LSAgICB9LAotCi0gICAgc3R5bGVTaGVldFN0YXJ0ZWQ6IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbi5pbnRlcm5hbENTU1Rva2VuaXplckNvbmRpdGlvbiA9
IHRoaXMuX2ludGVybmFsQ1NTVG9rZW5pemVyLmNyZWF0ZUluaXRpYWxDb25kaXRpb24oKTsKLSAg
ICB9LAotCi0gICAgc3R5bGVTaGVldEVuZGVkOiBmdW5jdGlvbihjdXJzb3IpCi0gICAgewotICAg
IH0sCi0KLSAgICBuZXh0VG9rZW46IGZ1bmN0aW9uKGN1cnNvcikKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9jb25kaXRpb24uaW50ZXJuYWxKYXZhU2NyaXB0VG9rZW5pemVyQ29uZGl0aW9uKSB7
Ci0gICAgICAgICAgICAvLyBSZS1zZXQgbGluZSB0byBmb3JjZSA8L3NjcmlwdD4gZGV0ZWN0aW9u
IGZpcnN0LgotICAgICAgICAgICAgdGhpcy5saW5lID0gdGhpcy5fbGluZTsKLSAgICAgICAgICAg
IGlmIChjdXJzb3IgIT09IHRoaXMuX2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplci5fbGluZS5s
ZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAvLyBUb2tlbml6ZXIgaXMgc3RhdGVsZXNzLCBzbyBy
ZXN0b3JlIGl0cyBjb25kaXRpb24gYmVmb3JlIHRva2VuaXppbmcgYW5kIHNhdmUgaXQgYWZ0ZXIu
Ci0gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxKYXZhU2NyaXB0VG9rZW5pemVyLmNvbmRp
dGlvbiA9IHRoaXMuX2NvbmRpdGlvbi5pbnRlcm5hbEphdmFTY3JpcHRUb2tlbml6ZXJDb25kaXRp
b247Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2ludGVybmFsSmF2YVNjcmlw
dFRva2VuaXplci5uZXh0VG9rZW4oY3Vyc29yKTsKLSAgICAgICAgICAgICAgICB0aGlzLnRva2Vu
VHlwZSA9IHRoaXMuX2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplci50b2tlblR5cGU7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fY29uZGl0aW9uLmludGVybmFsSmF2YVNjcmlwdFRva2VuaXplckNv
bmRpdGlvbiA9IHRoaXMuX2ludGVybmFsSmF2YVNjcmlwdFRva2VuaXplci5jb25kaXRpb247Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vy
c29yICE9PSB0aGlzLl9saW5lLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5f
Y29uZGl0aW9uLmludGVybmFsSmF2YVNjcmlwdFRva2VuaXplckNvbmRpdGlvbjsKLSAgICAgICAg
fSBlbHNlIGlmICh0aGlzLl9jb25kaXRpb24uaW50ZXJuYWxDU1NUb2tlbml6ZXJDb25kaXRpb24p
IHsKLSAgICAgICAgICAgIC8vIFJlLXNldCBsaW5lIHRvIGZvcmNlIDwvc3R5bGU+IGRldGVjdGlv
biBmaXJzdC4KLSAgICAgICAgICAgIHRoaXMubGluZSA9IHRoaXMuX2xpbmU7Ci0gICAgICAgICAg
ICBpZiAoY3Vyc29yICE9PSB0aGlzLl9pbnRlcm5hbENTU1Rva2VuaXplci5fbGluZS5sZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICAvLyBUb2tlbml6ZXIgaXMgc3RhdGVsZXNzLCBzbyByZXN0b3Jl
IGl0cyBjb25kaXRpb24gYmVmb3JlIHRva2VuaXppbmcgYW5kIHNhdmUgaXQgYWZ0ZXIuCi0gICAg
ICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxDU1NUb2tlbml6ZXIuY29uZGl0aW9uID0gdGhpcy5f
Y29uZGl0aW9uLmludGVybmFsQ1NTVG9rZW5pemVyQ29uZGl0aW9uOwotICAgICAgICAgICAgICAg
IHZhciByZXN1bHQgPSB0aGlzLl9pbnRlcm5hbENTU1Rva2VuaXplci5uZXh0VG9rZW4oY3Vyc29y
KTsKLSAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9IHRoaXMuX2ludGVybmFsQ1NTVG9r
ZW5pemVyLnRva2VuVHlwZTsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb25kaXRpb24uaW50ZXJu
YWxDU1NUb2tlbml6ZXJDb25kaXRpb24gPSB0aGlzLl9pbnRlcm5hbENTU1Rva2VuaXplci5jb25k
aXRpb247Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyc29yICE9PSB0aGlzLl9saW5lLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fY29uZGl0aW9uLmludGVybmFsQ1NTVG9rZW5pemVyQ29uZGl0aW9uOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIGN1cnNvck9uRW50ZXIgPSBjdXJzb3I7Ci0gICAgICAgIHZhciBn
b3RvQ2FzZSA9IDE7Ci0gICAgICAgIHZhciBZWU1BUktFUjsKLSAgICAgICAgd2hpbGUgKDEpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAoZ290b0Nhc2UpCi0gICAgICAgICAgICAvLyBGb2xsb3dpbmcg
Y29tbWVudCBpcyByZXBsYWNlZCB3aXRoIGdlbmVyYXRlZCBzdGF0ZSBtYWNoaW5lLgotICAgICAg
ICAgICAgLyohcmUyYwotICAgICAgICAgICAgICAgIHJlMmM6ZGVmaW5lOllZQ1RZUEUgID0gInZh
ciI7Ci0gICAgICAgICAgICAgICAgcmUyYzpkZWZpbmU6WVlDVVJTT1IgPSBjdXJzb3I7Ci0gICAg
ICAgICAgICAgICAgcmUyYzpkZWZpbmU6WVlHRVRDT05ESVRJT04gPSAidGhpcy5nZXRMZXhDb25k
aXRpb24iOwotICAgICAgICAgICAgICAgIHJlMmM6ZGVmaW5lOllZU0VUQ09ORElUSU9OID0gInRo
aXMuc2V0TGV4Q29uZGl0aW9uIjsKLSAgICAgICAgICAgICAgICByZTJjOmNvbmRwcmVmaXggPSAi
Y2FzZSB0aGlzLmNhc2VfIjsKLSAgICAgICAgICAgICAgICByZTJjOmNvbmRlbnVtcHJlZml4ID0g
InRoaXMuX2xleENvbmRpdGlvbnMuIjsKLSAgICAgICAgICAgICAgICByZTJjOnl5ZmlsbDplbmFi
bGUgPSAwOwotICAgICAgICAgICAgICAgIHJlMmM6bGFiZWxwcmVmaXggPSAiY2FzZSAiOwotICAg
ICAgICAgICAgICAgIHJlMmM6aW5kZW50OnRvcCA9IDI7Ci0gICAgICAgICAgICAgICAgcmUyYzpp
bmRlbnQ6c3RyaW5nID0gIiAgICAiOwotCi0gICAgICAgICAgICAgICAgQ29tbWVudENvbnRlbnQg
PSAoW14tXHJcbl0gfCAoIi0tIiBbXj5dKSkqOwotICAgICAgICAgICAgICAgIENvbW1lbnQgPSAi
PCEtLSIgQ29tbWVudENvbnRlbnQgIi0tPiI7Ci0gICAgICAgICAgICAgICAgQ29tbWVudFN0YXJ0
ID0gIjwhLS0iIENvbW1lbnRDb250ZW50IFtcclxuXTsKLSAgICAgICAgICAgICAgICBDb21tZW50
RW5kID0gQ29tbWVudENvbnRlbnQgIi0tPiI7Ci0KLSAgICAgICAgICAgICAgICBEb2NUeXBlU3Rh
cnQgPSAiPCEiIFtEZF0gW09vXSBbQ2NdIFtUdF0gW1l5XSBbUHBdIFtFZV07Ci0gICAgICAgICAg
ICAgICAgRG9jVHlwZUNvbnRlbnQgPSBbXlxyXG4+XSo7Ci0KLSAgICAgICAgICAgICAgICBTY3Jp
cHRTdGFydCA9ICI8IiBbU3NdIFtDY10gW1JyXSBbSWldIFtQcF0gW1R0XTsKLSAgICAgICAgICAg
ICAgICBTY3JpcHRFbmQgPSAiPC8iIFtTc10gW0NjXSBbUnJdIFtJaV0gW1BwXSBbVHRdOwotCi0g
ICAgICAgICAgICAgICAgU3R5bGVTdGFydCA9ICI8IiBbU3NdIFtUdF0gW1l5XSBbTGxdIFtFZV07
Ci0gICAgICAgICAgICAgICAgU3R5bGVFbmQgPSAiPC8iIFtTc10gW1R0XSBbWXldIFtMbF0gW0Vl
XTsKLQotICAgICAgICAgICAgICAgIExUID0gIjwiIHwgIjwvIjsKLSAgICAgICAgICAgICAgICBH
VCA9ICI+IjsKLSAgICAgICAgICAgICAgICBFcXVhbFNpZ24gPSAiPSI7Ci0KLSAgICAgICAgICAg
ICAgICBEb3VibGVTdHJpbmdDb250ZW50ID0gW15cclxuXCJdKjsKLSAgICAgICAgICAgICAgICBT
aW5nbGVTdHJpbmdDb250ZW50ID0gW15cclxuXCddKjsKLSAgICAgICAgICAgICAgICBTdHJpbmdM
aXRlcmFsID0gIlwiIiBEb3VibGVTdHJpbmdDb250ZW50ICJcIiIgfCAiJyIgU2luZ2xlU3RyaW5n
Q29udGVudCAiJyI7Ci0gICAgICAgICAgICAgICAgRG91YmxlU3RyaW5nU3RhcnQgPSAiXCIiIERv
dWJsZVN0cmluZ0NvbnRlbnQgW1xyXG5dOwotICAgICAgICAgICAgICAgIERvdWJsZVN0cmluZ0Vu
ZCA9IERvdWJsZVN0cmluZ0NvbnRlbnQgIlwiIjsKLSAgICAgICAgICAgICAgICBTaW5nbGVTdHJp
bmdTdGFydCA9ICInIiBTaW5nbGVTdHJpbmdDb250ZW50IFtcclxuXTsKLSAgICAgICAgICAgICAg
ICBTaW5nbGVTdHJpbmdFbmQgPSBTaW5nbGVTdHJpbmdDb250ZW50ICInIjsKLQotICAgICAgICAg
ICAgICAgIElkZW50aWZpZXIgPSBbXiBcclxuIic8PlxbXF09XSs7Ci0KLSAgICAgICAgICAgICAg
ICA8SU5JVElBTD4gQ29tbWVudCB7IHRoaXMudG9rZW5UeXBlID0gImh0bWwtY29tbWVudCI7IHJl
dHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8SU5JVElBTD4gQ29tbWVudFN0YXJ0ID0+
IENPTU1FTlQgeyB0aGlzLnRva2VuVHlwZSA9ICJodG1sLWNvbW1lbnQiOyByZXR1cm4gY3Vyc29y
OyB9Ci0gICAgICAgICAgICAgICAgPENPTU1FTlQ+IENvbW1lbnRDb250ZW50ID0+IENPTU1FTlQg
eyB0aGlzLnRva2VuVHlwZSA9ICJodG1sLWNvbW1lbnQiOyByZXR1cm4gY3Vyc29yOyB9Ci0gICAg
ICAgICAgICAgICAgPENPTU1FTlQ+IENvbW1lbnRFbmQgPT4gSU5JVElBTCB7IHRoaXMudG9rZW5U
eXBlID0gImh0bWwtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLQotICAgICAgICAgICAgICAg
IDxJTklUSUFMPiBEb2NUeXBlU3RhcnQgPT4gRE9DVFlQRSB7IHRoaXMudG9rZW5UeXBlID0gImh0
bWwtZG9jdHlwZSI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8RE9DVFlQRT4g
RG9jVHlwZUNvbnRlbnQgPT4gRE9DVFlQRSB7IHRoaXMudG9rZW5UeXBlID0gImh0bWwtZG9jdHlw
ZSI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8RE9DVFlQRT4gR1QgPT4gSU5J
VElBTCB7IHRoaXMudG9rZW5UeXBlID0gImh0bWwtZG9jdHlwZSI7IHJldHVybiBjdXJzb3I7IH0K
LQotICAgICAgICAgICAgICAgIDxJTklUSUFMPiBTY3JpcHRTdGFydCA9PiBUQUcKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VD
b25kaXRpb24gJiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuU0NSSVBUKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBEbyBub3QgdG9rZW5pemUgc2NyaXB0IHRhZyBjb250ZW50cywga2VlcCBs
ZXhlciBzdGF0ZSwgZXZlbiB0aG91Z2ggcHJvY2Vzc2luZyAiPCIuCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNldExleENvbmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLklOSVRJQUwp
OwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSBudWxsOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJodG1sLXRhZyI7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiA9IHRoaXMuX3BhcnNl
Q29uZGl0aW9ucy5TQ1JJUFQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEV4cGVjdGlu
Z0F0dHJpYnV0ZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIDxJTklUSUFMPiBTY3JpcHRFbmQgPT4gVEFH
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9
ICJodG1sLXRhZyI7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNv
bmRpdGlvbiA9IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5JTklUSUFMOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNjcmlwdEVuZGVkKGN1cnNvciAtIDgpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIDxJTklU
SUFMPiBTdHlsZVN0YXJ0ID0+IFRBRwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAmIHRoaXMuX3BhcnNlQ29u
ZGl0aW9ucy5TVFlMRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IHRva2Vu
aXplIHN0eWxlIHRhZyBjb250ZW50cywga2VlcCBsZXhlciBzdGF0ZSwgZXZlbiB0aG91Z2ggcHJv
Y2Vzc2luZyAiPCIuCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExleENvbmRpdGlv
bih0aGlzLl9sZXhDb25kaXRpb25zLklOSVRJQUwpOwotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2tlblR5cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLnRv
a2VuVHlwZSA9ICJodG1sLXRhZyI7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlv
bi5wYXJzZUNvbmRpdGlvbiA9IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5TVFlMRTsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fc2V0RXhwZWN0aW5nQXR0cmlidXRlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgPElOSVRJQUw+IFN0eWxlRW5kID0+IFRBRwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiaHRtbC10YWciOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gPSB0aGlzLl9wYXJzZUNvbmRpdGlv
bnMuSU5JVElBTDsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZVNoZWV0RW5kZWQoY3Vy
c29yIC0gNyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgPElOSVRJQUw+IExUID0+IFRBRwotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNv
bmRpdGlvbiAmICh0aGlzLl9wYXJzZUNvbmRpdGlvbnMuU0NSSVBUIHwgdGhpcy5fcGFyc2VDb25k
aXRpb25zLlNUWUxFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IHRva2Vu
aXplIHNjcmlwdCBhbmQgc3R5bGUgdGFnIGNvbnRlbnRzLCBrZWVwIGxleGVyIHN0YXRlLCBldmVu
IHRob3VnaCBwcm9jZXNzaW5nICI8Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0
TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuSU5JVElBTCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uID0gdGhpcy5fcGFyc2VDb25kaXRp
b25zLklOSVRJQUw7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gImh0bWwt
dGFnIjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICA8VEFHPiBHVCA9PiBJTklUSUFMCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJodG1sLXRhZyI7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gJiB0
aGlzLl9wYXJzZUNvbmRpdGlvbnMuU0NSSVBUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnNjcmlwdFN0YXJ0ZWQoY3Vyc29yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERv
IG5vdCB0b2tlbml6ZSBzY3JpcHQgdGFnIGNvbnRlbnRzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gJiB0aGlzLl9wYXJzZUNv
bmRpdGlvbnMuU1RZTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVTaGVl
dFN0YXJ0ZWQoY3Vyc29yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0b2tl
bml6ZSBzdHlsZSB0YWcgY29udGVudHMuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3Vyc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uID0gdGhpcy5fcGFyc2VDb25kaXRpb25zLklOSVRJ
QUw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgPFRBRz4gU3RyaW5nTGl0ZXJhbCB7IHJldHVybiB0aGlzLl9z
dHJpbmdUb2tlbihjdXJzb3IsIHRydWUpOyB9Ci0gICAgICAgICAgICAgICAgPFRBRz4gRG91Ymxl
U3RyaW5nU3RhcnQgPT4gRFNUUklORyB7IHJldHVybiB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3Ip
OyB9Ci0gICAgICAgICAgICAgICAgPERTVFJJTkc+IERvdWJsZVN0cmluZ0NvbnRlbnQgPT4gRFNU
UklORyB7IHJldHVybiB0aGlzLl9zdHJpbmdUb2tlbihjdXJzb3IpOyB9Ci0gICAgICAgICAgICAg
ICAgPERTVFJJTkc+IERvdWJsZVN0cmluZ0VuZCA9PiBUQUcgeyByZXR1cm4gdGhpcy5fc3RyaW5n
VG9rZW4oY3Vyc29yLCB0cnVlKTsgfQotICAgICAgICAgICAgICAgIDxUQUc+IFNpbmdsZVN0cmlu
Z1N0YXJ0ID0+IFNTVFJJTkcgeyByZXR1cm4gdGhpcy5fc3RyaW5nVG9rZW4oY3Vyc29yKTsgfQot
ICAgICAgICAgICAgICAgIDxTU1RSSU5HPiBTaW5nbGVTdHJpbmdDb250ZW50ID0+IFNTVFJJTkcg
eyByZXR1cm4gdGhpcy5fc3RyaW5nVG9rZW4oY3Vyc29yKTsgfQotICAgICAgICAgICAgICAgIDxT
U1RSSU5HPiBTaW5nbGVTdHJpbmdFbmQgPT4gVEFHIHsgcmV0dXJuIHRoaXMuX3N0cmluZ1Rva2Vu
KGN1cnNvciwgdHJ1ZSk7IH0KLQotICAgICAgICAgICAgICAgIDxUQUc+IEVxdWFsU2lnbiA9PiBU
QUcKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0V4
cGVjdGluZ0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RXhw
ZWN0aW5nQXR0cmlidXRlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblR5
cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIDxUQUc+IElkZW50aWZpZXIKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25k
aXRpb24gPT09IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5TQ1JJUFQgfHwgdGhpcy5fY29uZGl0aW9u
LnBhcnNlQ29uZGl0aW9uID09PSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuU1RZTEUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBpZiBleHBlY3RpbmcgYXR0cmlidXRl
cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9u
ID09PSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuSU5JVElBTCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2tlblR5cGUgPSAiaHRtbC10YWciOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fc2V0RXhwZWN0aW5nQXR0cmlidXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdG9rZW4gPSB0aGlzLl9saW5lLnN1YnN0cmluZyhjdXJzb3JPbkVudGVyLCBjdXJzb3Ip
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSAiYSIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uIHw9IHRoaXMu
X3BhcnNlQ29uZGl0aW9ucy5BX05PREU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
ICh0aGlzLl9jb25kaXRpb24ucGFyc2VDb25kaXRpb24gJiB0aGlzLl9wYXJzZUNvbmRpdGlvbnMu
QV9OT0RFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbi5wYXJz
ZUNvbmRpdGlvbiBePSB0aGlzLl9wYXJzZUNvbmRpdGlvbnMuQV9OT0RFOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzRXhwZWN0aW5nQXR0cmlidXRlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuX2xpbmUuc3Vic3RyaW5nKGN1cnNv
ck9uRW50ZXIsIGN1cnNvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09
ICJocmVmIiB8fCB0b2tlbiA9PT0gInNyYyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fY29uZGl0aW9uLnBhcnNlQ29uZGl0aW9uIHw9IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5M
SU5LSUZZOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY29uZGl0aW9u
LnBhcnNlQ29uZGl0aW9uIHw9IHRoaXMuX3BhcnNlQ29uZGl0aW9ucy5MSU5LSUZZKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiBePSB0
aGlzLl9wYXJzZUNvbmRpdGlvbnMuTElOS0lGWTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9rZW5UeXBlID0gImh0bWwtYXR0cmlidXRlLW5hbWUiOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRoaXMuX2lzRXhwZWN0aW5nQXR0cmlidXRlVmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gdGhpcy5fYXR0clZhbHVlVG9rZW5UeXBl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgPCo+IFteXSB7IHRoaXMudG9rZW5U
eXBlID0gbnVsbDsgcmV0dXJuIGN1cnNvcjsgfQotICAgICAgICAgICAgKi8KLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIucHJv
dG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDA3MmRkZTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VKYXZhU2NyaXB0VG9rZW5pemVyLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMjQ5MCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgcmUyYyAwLjEzLjUgb24gVHVlIEZl
YiAxOSAxNjoxNjo0NyAyMDEzICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIEdlbmVyYXRlIGpzIGZpbGUgYXMgZm9sbG93czoK
LXJlMmMgLWlzYyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUphdmFT
Y3JpcHRUb2tlbml6ZXIucmUyanMgXAotICB8IHNlZCAnc3xeeXlcKFteOl0qXCkqXDp8Y2FzZSBc
MTp8JyBcCi0gIHwgc2VkICdzfFsqXWN1cnNvclsrXVsrXXx0aGlzLl9jaGFyQXQoY3Vyc29yKysp
fCcgXAotICB8IHNlZCAnc3xbWypdWytdWytdY3Vyc29yfHRoaXMuX2NoYXJBdCgrK2N1cnNvcil8
JyBcCi0gIHwgc2VkICdzfFsqXWN1cnNvcnx0aGlzLl9jaGFyQXQoY3Vyc29yKXwnIFwKLSAgfCBz
ZWQgJ3N8eXljaCA9IFwqXChbXjtdKlwpfHl5Y2ggPSB0aGlzLl9jaGFyQXRcMXwnIFwKLSAgfCBz
ZWQgJ3N8eyBnb3RvQ2FzZSA9IFwoW147IGNvbnRpbnVlOyB9O10qXCl8eyBnb3RvQ2FzZSA9IFwx
OyBjb250aW51ZTsgfXwnIFwKLSAgfCBzZWQgJ3N8eXljaCA8PSBcKDB4WzAtOWEtZkEtRl0qXCl8
eXljaCBcPFw9IFN0cmluZy5mcm9tQ2hhckNvZGUoXDEpfCcgXAotICB8IHNlZCAnc3x1bnNpZ25l
ZFwgaW50fHZhcnwnIFwKLSAgfCBzZWQgJ3N8dmFyXCB5eWNofGNhc2UgMTogY2FzZSAxOiB2YXIg
eXljaHwnID4gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VKYXZhU2Ny
aXB0VG9rZW5pemVyLmpzCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyfQotICovCi1XZWJJbnNwZWN0b3IuU291cmNl
SmF2YVNjcmlwdFRva2VuaXplciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU291
cmNlVG9rZW5pemVyLmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLl9sZXhDb25kaXRpb25zID0gewot
ICAgICAgICBESVY6IDAsCi0gICAgICAgIE5PRElWOiAxLAotICAgICAgICBDT01NRU5UOiAyLAot
ICAgICAgICBEU1RSSU5HOiAzLAotICAgICAgICBTU1RSSU5HOiA0LAotICAgICAgICBSRUdFWDog
NQotICAgIH07Ci0KLSAgICB0aGlzLmNhc2VfRElWID0gMTAwMDsKLSAgICB0aGlzLmNhc2VfTk9E
SVYgPSAxMDAxOwotICAgIHRoaXMuY2FzZV9DT01NRU5UID0gMTAwMjsKLSAgICB0aGlzLmNhc2Vf
RFNUUklORyA9IDEwMDM7Ci0gICAgdGhpcy5jYXNlX1NTVFJJTkcgPSAxMDA0OwotICAgIHRoaXMu
Y2FzZV9SRUdFWCA9IDEwMDU7Ci0KLSAgICB0aGlzLmNvbmRpdGlvbiA9IHRoaXMuY3JlYXRlSW5p
dGlhbENvbmRpdGlvbigpOwotfQotCi1XZWJJbnNwZWN0b3IuU291cmNlSmF2YVNjcmlwdFRva2Vu
aXplci5LZXl3b3JkcyA9IFsKLSAgICAgICAgIm51bGwiLCAidHJ1ZSIsICJmYWxzZSIsICJicmVh
ayIsICJjYXNlIiwgImNhdGNoIiwgImNvbnN0IiwgImRlZmF1bHQiLCAiZmluYWxseSIsICJmb3Ii
LAotICAgICAgICAiaW5zdGFuY2VvZiIsICJuZXciLCAidmFyIiwgImNvbnRpbnVlIiwgImZ1bmN0
aW9uIiwgInJldHVybiIsICJ2b2lkIiwgImRlbGV0ZSIsICJpZiIsCi0gICAgICAgICJ0aGlzIiwg
ImRvIiwgIndoaWxlIiwgImVsc2UiLCAiaW4iLCAic3dpdGNoIiwgInRocm93IiwgInRyeSIsICJ0
eXBlb2YiLCAiZGVidWdnZXIiLAotICAgICAgICAiY2xhc3MiLCAiZW51bSIsICJleHBvcnQiLCAi
ZXh0ZW5kcyIsICJpbXBvcnQiLCAic3VwZXIiLCAiZ2V0IiwgInNldCIsICJ3aXRoIgotICAgIF0u
a2V5U2V0KCk7Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VKYXZhU2NyaXB0VG9rZW5pemVyLkdsb2Jh
bE9iamVjdFZhbHVlUHJvcGVydGllcyA9IHsKLSAgICAiTmFOIjogImphdmFzY3JpcHQtbmFuIiwK
LSAgICAidW5kZWZpbmVkIjogImphdmFzY3JpcHQtdW5kZWYiLAotICAgICJJbmZpbml0eSI6ICJq
YXZhc2NyaXB0LWluZiIKLX07Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VKYXZhU2NyaXB0VG9rZW5p
emVyLnByb3RvdHlwZSA9IHsKLSAgICBjcmVhdGVJbml0aWFsQ29uZGl0aW9uOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4geyBsZXhDb25kaXRpb246IHRoaXMuX2xleENvbmRpdGlv
bnMuTk9ESVYgfTsKLSAgICB9LAotCi0gICAgbmV4dFRva2VuOiBmdW5jdGlvbihjdXJzb3IpCi0g
ICAgewotICAgICAgICB2YXIgY3Vyc29yT25FbnRlciA9IGN1cnNvcjsKLSAgICAgICAgdmFyIGdv
dG9DYXNlID0gMTsKLSAgICAgICAgdmFyIFlZTUFSS0VSOwotICAgICAgICB3aGlsZSAoMSkgewot
ICAgICAgICAgICAgc3dpdGNoIChnb3RvQ2FzZSkKLSAgICAgICAgICAgIC8vIEZvbGxvd2luZyBj
b21tZW50IGlzIHJlcGxhY2VkIHdpdGggZ2VuZXJhdGVkIHN0YXRlIG1hY2hpbmUuCi0gICAgICAg
ICAgICAKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSAxOiB2YXIgeXljaDsKLSAgICAgICAg
ICAgIHZhciB5eWFjY2VwdCA9IDA7Ci0gICAgICAgICAgICBpZiAodGhpcy5nZXRMZXhDb25kaXRp
b24oKSA8IDMpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMZXhDb25kaXRpb24oKSA8
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IHRoaXMuY2FzZV9ESVY7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLmdldExleENvbmRpdGlvbigpIDwgMikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgeyBnb3RvQ2FzZSA9IHRoaXMuY2FzZV9OT0RJVjsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
dGhpcy5jYXNlX0NPTU1FTlQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5nZXRMZXhDb25kaXRpb24oKSA8IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IHRoaXMuY2FzZV9EU1RSSU5HOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMZXhDb25kaXRpb24o
KSA8IDUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSB0aGlzLmNhc2Vf
U1NUUklORzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gdGhpcy5jYXNlX1JFR0VYOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi1jYXNlIHRo
aXMuY2FzZV9DT01NRU5UOgotCi0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgIHsgZ290b0Nhc2UgPSAzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2FzZSA9IDQ7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICcqJykgeyBnb3RvQ2FzZSA9IDY7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIH0KLWNhc2UgMjoKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAi
amF2YXNjcmlwdC1jb21tZW50IjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAzOgotICAgICAgICAg
ICAgeXlhY2NlcHQgPSAwOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChZWU1BUktF
UiA9ICsrY3Vyc29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMjsgY29udGludWU7IH07
Ci1jYXNlIDQ6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHsgdGhpcy50b2tl
blR5cGUgPSBudWxsOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDY6Ci0gICAgICAgICAgICB5eWFj
Y2VwdCA9IDE7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytj
dXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyonKSB7IGdvdG9DYXNlID0gOTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCAhPSAnLycpIHsgZ290b0Nhc2UgPSAxMTsg
Y29udGludWU7IH07Ci1jYXNlIDc6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAg
IHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuTk9ESVYpOwotICAgICAg
ICAgICAgeyB0aGlzLnRva2VuVHlwZSA9ICJqYXZhc2NyaXB0LWNvbW1lbnQiOyByZXR1cm4gY3Vy
c29yOyB9Ci1jYXNlIDk6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2gg
PSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICcqJykgeyBn
b3RvQ2FzZSA9IDk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy8nKSB7
IGdvdG9DYXNlID0gNzsgY29udGludWU7IH07Ci1jYXNlIDExOgotICAgICAgICAgICAgeXlhY2Nl
cHQgPSAwOwotICAgICAgICAgICAgWVlNQVJLRVIgPSArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLWNhc2UgMTI6Ci0gICAgICAgICAgICBpZiAoeXlj
aCA8PSAnXGYnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2Fz
ZSA9IDI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdccicpIHsgZ290b0Nhc2UgPSAyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBp
ZiAoeXljaCA9PSAnKicpIHsgZ290b0Nhc2UgPSA5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICB7IGdvdG9DYXNlID0gMTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotLyogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLWNhc2UgdGhpcy5jYXNlX0RJVjoK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICc5JykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MUYpKSB7IGdvdG9DYXNlID0g
MTU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyAn
KSB7IGdvdG9DYXNlID0gMTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJyEnKSB7IGdvdG9DYXNlID0gMTk7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICck
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICckJykgeyBnb3Rv
Q2FzZSA9IDIyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyUnKSB7IGdvdG9DYXNl
ID0gMjQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICcmJykgeyBnb3RvQ2FzZSA9IDI1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMjY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJywnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnKScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnKCcpIHsgZ290b0Nhc2UgPSAyNzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDI4OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJyonKSB7IGdvdG9DYXNlID0gMzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcrJykgeyBnb3RvQ2FzZSA9IDMxOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjc7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy4nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy0nKSB7IGdvdG9DYXNlID0g
MzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2Ug
PSAzMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDM0
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
MCcpIHsgZ290b0Nhc2UgPSAzNjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDM4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICc7JykgeyBnb3RvQ2FzZSA9IDI3OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc8JykgeyBnb3RvQ2FzZSA9IDM5OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc9JykgeyBnb3RvQ2Fz
ZSA9IDQwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2Ug
PSA0MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnPycpIHsgZ290b0Nhc2UgPSAyNzsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDIyOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnWycpIHsgZ290b0Nhc2UgPSAyNzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQy
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICd6JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ14n
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ10nKSB7IGdvdG9D
YXNlID0gMjc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSA0MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoICE9ICdgJykgeyBnb3RvQ2Fz
ZSA9IDIyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICd8JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd7JykgeyBn
b3RvQ2FzZSA9IDI3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gNDQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnficpIHsgZ290
b0Nhc2UgPSAyNzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPj0gMHg4MCkgeyBnb3RvQ2FzZSA9IDIyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLWNhc2UgMTU6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLWNhc2UgMTY6
Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gbnVsbDsgcmV0dXJuIGN1cnNvcjsgfQot
Y2FzZSAxNzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDExOTsgY29udGludWU7
IH07Ci1jYXNlIDE4OgotICAgICAgICAgICAge3RoaXMudG9rZW5UeXBlID0gIndoaXRlc3BhY2Ui
OyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDE5OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAg
ICAgICAgICBpZiAoKHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKSkgPT0gJz0nKSB7IGdvdG9D
YXNlID0gMTE3OyBjb250aW51ZTsgfTsKLWNhc2UgMjA6Ci0gICAgICAgICAgICB0aGlzLnNldExl
eENvbmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLk5PRElWKTsKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5fbGluZS5jaGFyQXQoY3Vyc29yT25F
bnRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gInsiKQotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSAiYmxvY2stc3RhcnQiOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gIn0iKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy50b2tlblR5cGUgPSAiYmxvY2stZW5kIjsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAodG9rZW4gPT09ICIoIikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5U
eXBlID0gImJyYWNlLXN0YXJ0IjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB0aGlzLnRva2Vu
VHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7Ci0gICAgICAg
ICAgICAgICAgfQotY2FzZSAyMToKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAg
ICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTY7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgaWYgKHl5Y2ggPT0gJ1xyJykgeyBnb3RvQ2FzZSA9IDE2OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMDk7IGNvbnRpbnVlOyB9OwotY2FzZSAyMjoKLSAgICAg
ICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlN
QVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gNTI7IGNvbnRpbnVl
OyB9OwotY2FzZSAyMzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRv
a2VuID0gdGhpcy5fbGluZS5zdWJzdHJpbmcoY3Vyc29yT25FbnRlciwgY3Vyc29yKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Tb3VyY2VKYXZhU2NyaXB0VG9rZW5pemVy
Lkdsb2JhbE9iamVjdFZhbHVlUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VK
YXZhU2NyaXB0VG9rZW5pemVyLkdsb2JhbE9iamVjdFZhbHVlUHJvcGVydGllc1t0b2tlbl07Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFdlYkluc3BlY3Rvci5Tb3VyY2VKYXZhU2NyaXB0
VG9rZW5pemVyLktleXdvcmRzW3Rva2VuXSA9PT0gdHJ1ZSAmJiB0b2tlbiAhPT0gIl9fcHJvdG9f
XyIpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJqYXZhc2NyaXB0
LWtleXdvcmQiOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRva2VuVHlwZSA9ICJqYXZhc2NyaXB0LWlkZW50IjsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9Ci1jYXNlIDI0OgotICAgICAg
ICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXlj
aCA9PSAnPScpIHsgZ290b0Nhc2UgPSA0NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdv
dG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9OwotY2FzZSAyNToKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyYnKSB7IGdv
dG9DYXNlID0gNDU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz0nKSB7
IGdvdG9DYXNlID0gNDU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIw
OyBjb250aW51ZTsgfTsKLWNhc2UgMjY6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDA7Ci0gICAg
ICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytjdXJzb3IpOwotICAgICAg
ICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDE2OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAxNjsgY29udGludWU7IH07
Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gOTg7IGNvbnRpbnVlOyB9OwotY2FzZSAyNzoKLSAg
ICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IDIwOyBjb250aW51ZTsgfTsKLWNhc2UgMjg6Ci0gICAgICAgICAgICArK2N1cnNv
cjsKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAiYnJhY2UtZW5kIjsgcmV0dXJuIGN1
cnNvcjsgfQotY2FzZSAzMDoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJz
b3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz0nKSB7IGdvdG9DYXNlID0gNDU7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwOyBjb250aW51ZTsgfTsKLWNhc2Ug
MzE6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAg
ICAgIGlmICh5eWNoID09ICcrJykgeyBnb3RvQ2FzZSA9IDQ1OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIGlmICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9IDQ1OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMDsgY29udGludWU7IH07Ci1jYXNlIDMyOgotICAgICAg
ICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXlj
aCA9PSAnLScpIHsgZ290b0Nhc2UgPSA0NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAo
eXljaCA9PSAnPScpIHsgZ290b0Nhc2UgPSA0NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7
IGdvdG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9OwotY2FzZSAzMzoKLSAgICAgICAgICAgIHl5Y2gg
PSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7
IGdvdG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzkn
KSB7IGdvdG9DYXNlID0gOTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDIwOyBjb250aW51ZTsgfTsKLWNhc2UgMzQ6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDI7Ci0g
ICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytjdXJzb3IpOwotICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
JyonKSB7IGdvdG9DYXNlID0gODA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSA4MjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz0nKSB7IGdvdG9DYXNlID0gNzk7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAzNToKLSAgICAgICAgICAgIHRoaXMu
c2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlvbnMuTk9ESVYpOwotICAgICAgICAgICAg
eyB0aGlzLnRva2VuVHlwZSA9IG51bGw7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMzY6Ci0gICAg
ICAgICAgICB5eWFjY2VwdCA9IDM7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZ
TUFSS0VSID0gKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0UnKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoID09ICcuJykgeyBnb3RvQ2FzZSA9IDY1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnNycpIHsgZ290b0Nh
c2UgPSA3NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdF
JykgeyBnb3RvQ2FzZSA9IDY0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdkJykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnWCcpIHsgZ290b0Nhc2UgPSA3NjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ2UnKSB7IGdvdG9DYXNlID0gNjQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA9PSAneCcpIHsgZ290b0Nhc2UgPSA3NjsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAzNzoKLSAgICAgICAgICAgIHsg
dGhpcy50b2tlblR5cGUgPSAiamF2YXNjcmlwdC1udW1iZXIiOyByZXR1cm4gY3Vyc29yOyB9Ci1j
YXNlIDM4OgotICAgICAgICAgICAgeXlhY2NlcHQgPSAzOwotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdChZWU1BUktFUiA9ICsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9
ICc5JykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICcuJykgeyBnb3RvQ2FzZSA9IDY1
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nh
c2UgPSAzNzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDYyOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ0UnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdEJykgeyBnb3Rv
Q2FzZSA9IDM3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDY0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA9PSAnZScpIHsgZ290b0Nhc2UgPSA2NDsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzNzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAzOToKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzsnKSB7IGdv
dG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzwnKSB7
IGdvdG9DYXNlID0gNjE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJz0n
KSB7IGdvdG9DYXNlID0gNDU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDIwOyBjb250aW51ZTsgfTsKLWNhc2UgNDA6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9
IDYwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMDsgY29udGludWU7
IH07Ci1jYXNlIDQxOgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7
Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnPCcpIHsgZ290b0Nhc2UgPSAyMDsgY29udGludWU7
IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnPScpIHsgZ290b0Nhc2UgPSA0NTsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnPicpIHsgZ290b0Nhc2UgPSA1ODsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9OwotY2Fz
ZSA0MjoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlz
Ll9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAn
dScpIHsgZ290b0Nhc2UgPSA0NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNl
ID0gMTY7IGNvbnRpbnVlOyB9OwotY2FzZSA0MzoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9j
aGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz0nKSB7IGdvdG9DYXNl
ID0gNDU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwOyBjb250aW51
ZTsgfTsKLWNhc2UgNDQ6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29y
KTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9IDQ1OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICd8JykgeyBnb3RvQ2FzZSA9IDIwOyBjb250
aW51ZTsgfTsKLWNhc2UgNDU6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vy
c29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMDsgY29udGludWU7IH07Ci1jYXNlIDQ2
OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsg
Z290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
JzknKSB7IGdvdG9DYXNlID0gNDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nhc2UgPSA0ODsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gNDc7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykgeyBnb3RvQ2Fz
ZSA9IDQ4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgNDc6Ci0gICAgICAgICAg
ICBjdXJzb3IgPSBZWU1BUktFUjsKLSAgICAgICAgICAgIGlmICh5eWFjY2VwdCA8PSAxKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5YWNjZXB0IDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDE2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjM7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5
YWNjZXB0IDw9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDM1OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLWNhc2UgNDg6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29y
KTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2Fz
ZSA9IDQ5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsg
Z290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0g
J2cnKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSA0
OToKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7
IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49
ICc6JykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gNTA7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykgeyBnb3RvQ2FzZSA9IDQ3
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnZycpIHsgZ290b0Nh
c2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDUwOgotICAgICAgICAg
ICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8
PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSA0
NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJzonKSB7IGdvdG9D
YXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdnJykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgNTE6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9
IDE7Ci0gICAgICAgICAgICBZWU1BUktFUiA9ICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9
IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotY2FzZSA1MjoKLSAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdbJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA9PSAnJCcpIHsgZ290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7
IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnQCcpIHsgZ290b0Nhc2UgPSAyMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdfJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwnKSB7IGdvdG9DYXNl
ID0gNTM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXicp
IHsgZ290b0Nhc2UgPSAyMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMjM7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAneicpIHsgZ290b0Nhc2UgPSA1
MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IFN0cmluZy5m
cm9tQ2hhckNvZGUoMHg3RikpIHsgZ290b0Nhc2UgPSAyMzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA1MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotY2FzZSA1MzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAg
ICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5
Y2ggIT0gJ3UnKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgKytj
dXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAg
ICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycp
IHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2gg
Pj0gJzonKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nhc2UgPSA1NTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0g
NDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdnJykgeyBnb3Rv
Q2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgNTU6Ci0gICAgICAg
ICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsK
LSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICcvJykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBp
ZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9
IDU2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290
b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJ2cn
KSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSA1NjoK
LSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChj
dXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIGlmICh5eWNoID49ICc6JykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdv
dG9DYXNlID0gNTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdg
JykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA+PSAnZycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1j
YXNlIDU3OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5f
Y2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3Rv
Q2FzZSA9IDUxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcp
IHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ2YnKSB7IGdvdG9DYXNlID0gNTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsg
Z290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDU4OgotICAg
ICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAo
eXljaCA8PSAnPCcpIHsgZ290b0Nhc2UgPSAyMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICBp
ZiAoeXljaCA8PSAnPScpIHsgZ290b0Nhc2UgPSA0NTsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICBpZiAoeXljaCA+PSAnPycpIHsgZ290b0Nhc2UgPSAyMDsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNo
ID09ICc9JykgeyBnb3RvQ2FzZSA9IDQ1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSAyMDsgY29udGludWU7IH07Ci1jYXNlIDYwOgotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnPScpIHsgZ290
b0Nhc2UgPSA0NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMjA7IGNv
bnRpbnVlOyB9OwotY2FzZSA2MToKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytj
dXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz0nKSB7IGdvdG9DYXNlID0gNDU7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwOyBjb250aW51ZTsgfTsKLWNh
c2UgNjI6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDM7Ci0gICAgICAgICAgICBZWU1BUktFUiA9
ICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
Jy4nKSB7IGdvdG9DYXNlID0gNjU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDM3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICB7IGdvdG9DYXNlID0gNjI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ0QnKSB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoICE9ICdlJykgeyBnb3Rv
Q2FzZSA9IDM3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci1jYXNlIDY0OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0g
ICAgICAgICAgICBpZiAoeXljaCA8PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnKycpIHsgZ290b0Nhc2UgPSA3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJy0nKSB7IGdvdG9DYXNlID0gNzE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2UgPSA3Mjsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIH0KLWNhc2UgNjU6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDM7Ci0g
ICAgICAgICAgICBZWU1BUktFUiA9ICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0QnKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDY1OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRScpIHsgZ290
b0Nhc2UgPSA2NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ2Un
KSB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSA2NzoK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJywnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJysnKSB7IGdv
dG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnLScpIHsgZ290b0Nhc2UgPSA2ODsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDY5OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgfQotY2FzZSA2ODoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFy
QXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0g
NDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJzonKSB7IGdvdG9DYXNl
ID0gNDc7IGNvbnRpbnVlOyB9OwotY2FzZSA2OToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAg
ICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gNjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDM3OyBjb250aW51ZTsgfTsKLWNhc2UgNzE6Ci0gICAgICAgICAgICB5eWNo
ID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykg
eyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID49ICc6
JykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLWNhc2UgNzI6Ci0gICAgICAgICAgICAr
K2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDM3OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDcyOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzNzsgY29udGludWU7IH07Ci1jYXNlIDc0OgotICAg
ICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAzNzsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnNycpIHsgZ290b0Nhc2UgPSA3NDsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotY2Fz
ZSA3NjoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8n
KSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNo
ID49ICc6JykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gNzc7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykgeyBnb3RvQ2FzZSA9
IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnZycpIHsgZ290
b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDc3OgotICAgICAg
ICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7
Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnLycpIHsgZ290b0Nhc2UgPSAzNzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gNzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSAzNzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9IDc3OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAz
NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKSB7IGdvdG9D
YXNlID0gNzc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzNzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDc5OgotICAgICAgICAgICAgeXljaCA9
IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMzU7IGNv
bnRpbnVlOyB9OwotY2FzZSA4MDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAg
eXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xm
JykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSA4Nzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDgwOyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xy
JykgeyBnb3RvQ2FzZSA9IDg3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnKicpIHsgZ290b0Nhc2UgPSA4NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDgwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgODI6Ci0g
ICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vy
c29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSA4NDsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCAhPSAnXHInKSB7IGdvdG9DYXNlID0gODI7
IGNvbnRpbnVlOyB9OwotY2FzZSA4NDoKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAi
amF2YXNjcmlwdC1jb21tZW50IjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSA4NToKLSAgICAgICAg
ICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwot
ICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyonKSB7IGdvdG9DYXNlID0gODU7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy8nKSB7IGdvdG9DYXNlID0gODk7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDgwOyBjb250aW51ZTsgfTsKLWNhc2UgODc6
Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9u
KHRoaXMuX2xleENvbmRpdGlvbnMuQ09NTUVOVCk7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5U
eXBlID0gImphdmFzY3JpcHQtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgODk6Ci0g
ICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAiamF2
YXNjcmlwdC1jb21tZW50IjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSA5MToKLSAgICAgICAgICAg
IHl5YWNjZXB0ID0gMzsKLSAgICAgICAgICAgIFlZTUFSS0VSID0gKytjdXJzb3I7Ci0gICAgICAg
ICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8
PSAnRCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAz
NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9D
YXNlID0gOTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzNzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdFJykgeyBnb3RvQ2FzZSA9IDkzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCAhPSAnZScpIHsgZ290b0Nhc2UgPSAzNzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICB9Ci1jYXNlIDkzOgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBpZiAo
eXljaCAhPSAnKycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICctJykgeyBnb3RvQ2FzZSA9IDk0
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nh
c2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7
IGdvdG9DYXNlID0gOTU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2Ug
PSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDk0OgotICAgICAgICAgICAg
eXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAn
LycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA+
PSAnOicpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci1jYXNlIDk1OgotICAgICAgICAg
ICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0g
ICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAzNzsgY29udGludWU7IH07
Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2UgPSA5NTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMzc7IGNvbnRpbnVlOyB9OwotY2FzZSA5NzoK
LSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChj
dXJzb3IpOwotY2FzZSA5ODoKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdccicpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsgZ290b0Nhc2UgPSA5NzsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1wnJykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJicpIHsgZ290b0Nhc2UgPSA5Nzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMDA7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoICE9ICdcXCcpIHsgZ290b0Nhc2UgPSA5NzsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAg
ICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAn
YScpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIScpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ1x0JykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xyJykg
eyBnb3RvQ2FzZSA9IDEwMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1wn
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7IGdvdG9DYXNl
ID0gOTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
JyYnKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgeyBnb3RvQ2FzZSA9IDk3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcXCcpIHsgZ290b0Nh
c2UgPSA5NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNl
ID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
cScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYicpIHsgZ290b0Nhc2UgPSA5NzsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZScpIHsgZ290b0Nhc2Ug
PSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
OTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ24nKSB7IGdvdG9DYXNlID0gOTc7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd0JykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ3MnKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDk3OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICd1JykgeyBnb3RvQ2FzZSA9IDEwMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAndicpIHsgZ290b0Nhc2UgPSA5NzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAx
MDA6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUg
PSAiamF2YXNjcmlwdC1zdHJpbmciOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDEwMjoKLSAgICAg
ICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3Ip
OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDEwNTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMTA1OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2Ug
PSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKSB7IGdv
dG9DYXNlID0gMTA1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
NDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAxMDM6Ci0gICAgICAgICAgICAr
K2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRp
dGlvbnMuU1NUUklORyk7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gImphdmFzY3Jp
cHQtc3RyaW5nIjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAxMDU6Ci0gICAgICAgICAgICArK2N1
cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykg
eyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+
PSAnOicpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9IDEwNjsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0g
NDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdnJykgeyBnb3Rv
Q2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMTA2OgotICAgICAg
ICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7
Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnLycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPj0gJzonKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nhc2Ug
PSAxMDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykgeyBn
b3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAn
ZycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDEw
NzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJB
dChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDk3OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nhc2Ug
PSA5NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdv
dG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdm
JykgeyBnb3RvQ2FzZSA9IDk3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9D
YXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAxMDg6Ci0gICAgICAg
ICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsK
LWNhc2UgMTA5OgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgewotICAgICAgICAgICAg
ICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgeyBnb3RvQ2FzZSA9IDEwODsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICchJykgeyBnb3RvQ2FzZSA9IDEwODsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMDA7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
ICE9ICdcXCcpIHsgZ290b0Nhc2UgPSAxMDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXlj
aCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2EnKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyEnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdcdCcpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB7IGdvdG9DYXNlID0gMTEyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290
b0Nhc2UgPSAxMTI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3Rv
Q2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykgeyBnb3RvQ2FzZSA9IDEw
ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJicp
IHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gMTA4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcXCcpIHsgZ290b0Nhc2Ug
PSAxMDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3En
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2InKSB7IGdvdG9DYXNlID0gMTA4OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdlJykgeyBnb3RvQ2FzZSA9
IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAx
MDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ24nKSB7IGdvdG9DYXNlID0gMTA4OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndCcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoID09ICdzJykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMDg7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ3UnKSB7IGdvdG9DYXNlID0gMTExOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICd2JykgeyBnb3RvQ2FzZSA9IDEwODsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2Fz
ZSAxMTE6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9j
aGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2UgPSAxMTQ7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3Rv
Q2FzZSA9IDExNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2An
KSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdmJykgeyBnb3RvQ2FzZSA9IDExNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMTEyOgot
ICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB0aGlzLnNldExleENvbmRpdGlvbih0
aGlzLl9sZXhDb25kaXRpb25zLkRTVFJJTkcpOwotICAgICAgICAgICAgeyB0aGlzLnRva2VuVHlw
ZSA9ICJqYXZhc2NyaXB0LXN0cmluZyI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMTE0OgotICAg
ICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPj0gJzonKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nh
c2UgPSAxMTU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykg
eyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+
PSAnZycpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNl
IDExNToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2No
YXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgIGlmICh5eWNoID49ICc6JykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0Yn
KSB7IGdvdG9DYXNlID0gMTE2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnYCcpIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPj0gJ2cnKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgfQotY2FzZSAxMTY6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2gg
PSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewot
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2UgPSAxMDg7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSA0NzsgY29udGludWU7
IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdG
JykgeyBnb3RvQ2FzZSA9IDEwODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gNDc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdmJykgeyBnb3RvQ2FzZSA9IDEwODsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgeyBnb3RvQ2FzZSA9IDQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNh
c2UgMTE3OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAg
ICAgICAgICBpZiAoeXljaCA9PSAnPScpIHsgZ290b0Nhc2UgPSA0NTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMjA7IGNvbnRpbnVlOyB9OwotY2FzZSAxMTg6Ci0gICAg
ICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29y
KTsKLWNhc2UgMTE5OgotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyAnKSB7IGdvdG9DYXNlID0g
MTE4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxODsgY29udGludWU7
IH07Ci0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotY2FzZSB0aGlz
LmNhc2VfRFNUUklORzoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsK
LSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdccicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTI0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnXGYnKSB7IGdvdG9DYXNlID0gMTIzOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMTI0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICchJykgeyBnb3RvQ2FzZSA9IDEyMzsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxMjY7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcXCcp
IHsgZ290b0Nhc2UgPSAxMjg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdv
dG9DYXNlID0gMTIzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci1jYXNlIDEyMjoKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAiamF2YXNjcmlw
dC1zdHJpbmciOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDEyMzoKLSAgICAgICAgICAgIHl5YWNj
ZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1
cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMTMwOyBjb250aW51ZTsgfTsKLWNhc2Ug
MTI0OgotICAgICAgICAgICAgKytjdXJzb3I7Ci1jYXNlIDEyNToKLSAgICAgICAgICAgIHsgdGhp
cy50b2tlblR5cGUgPSBudWxsOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDEyNjoKLSAgICAgICAg
ICAgICsrY3Vyc29yOwotY2FzZSAxMjc6Ci0gICAgICAgICAgICB0aGlzLnNldExleENvbmRpdGlv
bih0aGlzLl9sZXhDb25kaXRpb25zLk5PRElWKTsKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5
cGUgPSAiamF2YXNjcmlwdC1zdHJpbmciOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDEyODoKLSAg
ICAgICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
WVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnZScpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoID09ICciJykgeyBnb3RvQ2FzZSA9IDEyOTsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICcmJykgeyBnb3RvQ2FzZSA9IDEyNTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdv
dG9DYXNlID0gMTI1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoICE9ICdiJykgeyBnb3RvQ2FzZSA9IDEy
NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdyJykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnbScpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoID49ICdnJykgeyBnb3RvQ2FzZSA9IDEyNTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnbicpIHsgZ290b0Nhc2UgPSAxMjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3EnKSB7IGdvdG9DYXNlID0gMTI1OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd0JykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ3MnKSB7IGdvdG9DYXNlID0gMTI1OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICd1JykgeyBnb3RvQ2FzZSA9IDEzMTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA+PSAndycpIHsgZ290b0Nhc2UgPSAxMjU7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotY2FzZSAxMjk6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDA7Ci0gICAgICAgICAgICBZWU1B
UktFUiA9ICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3Ip
OwotY2FzZSAxMzA6Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnXHInKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDEyMjsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgeyBnb3RvQ2FzZSA9IDEyOTsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyMjsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIScpIHsgZ290b0Nhc2UgPSAxMjk7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTM3OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAnXFwnKSB7IGdvdG9DYXNlID0gMTM2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyOTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotY2FzZSAxMzE6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAg
ICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9
IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdv
dG9DYXNlID0gMTMzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMTMzOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAxMzI7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykgeyBnb3RvQ2FzZSA9IDEz
MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDEzMjoKLSAgICAgICAgICAgIGN1
cnNvciA9IFlZTUFSS0VSOwotICAgICAgICAgICAgaWYgKHl5YWNjZXB0IDw9IDApIHsKLSAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMTIyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyNTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB9Ci1jYXNlIDEzMzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAg
ICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J0AnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMTMy
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nh
c2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nhc2UgPSAxMzQ7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykgeyBnb3RvQ2FzZSA9IDEzMjsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJ2cnKSB7IGdvdG9DYXNlID0gMTMyOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMTM0OgotICAgICAgICAgICAgKytjdXJz
b3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsg
Z290b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49
ICc6JykgeyBnb3RvQ2FzZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9IDEzNTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0g
MTMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnZycpIHsgZ290
b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAxMzU6Ci0gICAg
ICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29y
KTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gMTI5OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMTMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMTI5
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nh
c2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykg
eyBnb3RvQ2FzZSA9IDEyOTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDEzNjoKLSAgICAgICAg
ICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwot
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2UnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ1wnJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnIicpIHsgZ290b0Nh
c2UgPSAxMjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
JicpIHsgZ290b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gMTI5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnWycpIHsgZ290b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEyOTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAnYicpIHsgZ290b0Nhc2UgPSAxMjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdyJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnbScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykgeyBn
b3RvQ2FzZSA9IDEyOTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdv
dG9DYXNlID0gMTMyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICduJykgeyBnb3RvQ2FzZSA9IDEy
OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAncScp
IHsgZ290b0Nhc2UgPSAxMzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDEyOTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
dCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdzJykgeyBnb3RvQ2Fz
ZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNl
ID0gMTI5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd1JykgeyBnb3RvQ2FzZSA9IDEzMTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndicpIHsgZ290
b0Nhc2UgPSAxMjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3Rv
Q2FzZSA9IDEzMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDEzNzoKLSAgICAgICAgICAgICsrY3Vyc29y
OwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDEyNzsgY29udGludWU7IH07Ci0vKiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAqLwotY2FzZSB0aGlzLmNhc2VfTk9ESVY6Ci0gICAgICAgICAgICB5eWNo
ID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICciJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
U3RyaW5nLmZyb21DaGFyQ29kZSgweDFGKSkgeyBnb3RvQ2FzZSA9IDE0MDsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnICcpIHsgZ290b0Nhc2UgPSAx
NDI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyEn
KSB7IGdvdG9DYXNlID0gMTQ0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSAxNDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyQnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJyQnKSB7IGdvdG9DYXNlID0gMTQ3OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyUnKSB7IGdvdG9DYXNlID0gMTQ5OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnJicpIHsg
Z290b0Nhc2UgPSAxNTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSAxNTE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJywnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnKScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnKCcpIHsgZ290b0Nhc2UgPSAxNTI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNTM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnKicpIHsgZ290b0Nhc2UgPSAxNTU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcrJykgeyBnb3RvQ2FzZSA9IDE1NjsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE1MjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLScpIHsgZ290b0Nhc2UgPSAxNTc7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAx
NTg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNTk7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcw
JykgeyBnb3RvQ2FzZSA9IDE2MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDE2MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcXCcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnOycpIHsgZ290b0Nhc2UgPSAxNTI7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzwnKSB7IGdvdG9DYXNlID0gMTYzOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc9JykgeyBnb3Rv
Q2FzZSA9IDE2NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9D
YXNlID0gMTY1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc/JykgeyBnb3RvQ2FzZSA9IDE1MjsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDE0NzsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNl
ID0gMTUyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9D
YXNlID0gMTY2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICd6JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ14nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ10n
KSB7IGdvdG9DYXNlID0gMTUyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7IGdvdG9DYXNlID0gMTY3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ2An
KSB7IGdvdG9DYXNlID0gMTQ3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICd8JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICd7JykgeyBnb3RvQ2FzZSA9IDE1MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE2ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICd+JykgeyBnb3RvQ2FzZSA9IDE1MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPj0gMHg4MCkgeyBnb3RvQ2FzZSA9IDE0NzsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDE0MDoKLSAgICAgICAgICAgICsr
Y3Vyc29yOwotY2FzZSAxNDE6Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gbnVsbDsg
cmV0dXJuIGN1cnNvcjsgfQotY2FzZSAxNDI6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAg
ICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSAyNjg7IGNvbnRpbnVlOyB9OwotY2FzZSAxNDM6Ci0gICAgICAgICAgICB7dGhpcy50b2tl
blR5cGUgPSAid2hpdGVzcGFjZSI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMTQ0OgotICAgICAg
ICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICBpZiAoKHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vy
c29yKSkgPT0gJz0nKSB7IGdvdG9DYXNlID0gMjY2OyBjb250aW51ZTsgfTsKLWNhc2UgMTQ1Ogot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLl9saW5l
LmNoYXJBdChjdXJzb3JPbkVudGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09
PSAieyIpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJibG9jay1z
dGFydCI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAifSIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJibG9jay1lbmQiOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gIigiKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2tlblR5cGUgPSAiYnJhY2Utc3RhcnQiOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlIHRoaXMudG9rZW5UeXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9Ci1jYXNlIDE0NjoKLSAgICAgICAgICAgIHl5YWNj
ZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1
cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTQxOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAx
NDE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDI1ODsgY29udGludWU7
IH07Ci1jYXNlIDE0NzoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdv
dG9DYXNlID0gMTc2OyBjb250aW51ZTsgfTsKLWNhc2UgMTQ4OgotICAgICAgICAgICAgdGhpcy5z
ZXRMZXhDb25kaXRpb24odGhpcy5fbGV4Q29uZGl0aW9ucy5ESVYpOwotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLl9saW5lLnN1YnN0cmluZyhjdXJz
b3JPbkVudGVyLCBjdXJzb3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuR2xvYmFsT2JqZWN0VmFsdWVQcm9wZXJ0aWVzLmhh
c093blByb3BlcnR5KHRva2VuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5U
eXBlID0gV2ViSW5zcGVjdG9yLlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuR2xvYmFsT2JqZWN0
VmFsdWVQcm9wZXJ0aWVzW3Rva2VuXTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuS2V5d29yZHNbdG9rZW5dID09PSB0
cnVlICYmIHRva2VuICE9PSAiX19wcm90b19fIikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9rZW5UeXBlID0gImphdmFzY3JpcHQta2V5d29yZCI7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlID0gImphdmFzY3Jp
cHQtaWRlbnQiOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAg
ICAgICAgIH0KLWNhc2UgMTQ5OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1
cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnPScpIHsgZ290b0Nhc2UgPSAxNjk7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE0NTsgY29udGludWU7IH07Ci1j
YXNlIDE1MDoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAg
ICAgICAgICAgaWYgKHl5Y2ggPT0gJyYnKSB7IGdvdG9DYXNlID0gMTY5OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIGlmICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9IDE2OTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQ1OyBjb250aW51ZTsgfTsKLWNhc2UgMTUx
OgotICAgICAgICAgICAgeXlhY2NlcHQgPSAwOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2No
YXJBdChZWU1BUktFUiA9ICsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicp
IHsgZ290b0Nhc2UgPSAxNDE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
J1xyJykgeyBnb3RvQ2FzZSA9IDE0MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9D
YXNlID0gMjQ3OyBjb250aW51ZTsgfTsKLWNhc2UgMTUyOgotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQ1OyBjb250
aW51ZTsgfTsKLWNhc2UgMTUzOgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB0
aGlzLnNldExleENvbmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLkRJVik7Ci0gICAgICAgICAg
ICB7IHRoaXMudG9rZW5UeXBlID0gImJyYWNlLWVuZCI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2Ug
MTU1OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAg
ICAgICBpZiAoeXljaCA9PSAnPScpIHsgZ290b0Nhc2UgPSAxNjk7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgeyBnb3RvQ2FzZSA9IDE0NTsgY29udGludWU7IH07Ci1jYXNlIDE1NjoKLSAgICAg
ICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5
Y2ggPT0gJysnKSB7IGdvdG9DYXNlID0gMTY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlm
ICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9IDE2OTsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICB7IGdvdG9DYXNlID0gMTQ1OyBjb250aW51ZTsgfTsKLWNhc2UgMTU3OgotICAgICAgICAgICAg
eXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAn
LScpIHsgZ290b0Nhc2UgPSAxNjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2gg
PT0gJz0nKSB7IGdvdG9DYXNlID0gMTY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSAxNDU7IGNvbnRpbnVlOyB9OwotY2FzZSAxNTg6Ci0gICAgICAgICAgICB5eWNoID0g
dGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBn
b3RvQ2FzZSA9IDE0NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnOScp
IHsgZ290b0Nhc2UgPSAyNDA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDE0NTsgY29udGludWU7IH07Ci1jYXNlIDE1OToKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0g
ICAgICAgICAgICBpZiAoeXljaCA8PSAnKicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnXGYnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nh
c2UgPSAxNDE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
MjAzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnXHInKSB7IGdvdG9DYXNlID0gMTQxOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyknKSB7IGdvdG9DYXNlID0gMjAzOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwODsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnWicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PT0gJy8nKSB7IGdvdG9DYXNlID0gMjEwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAg
ICAgeyBnb3RvQ2FzZSA9IDIwMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNlID0gMjA2
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgeyBn
b3RvQ2FzZSA9IDIwNTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICddJykgeyBnb3RvQ2FzZSA9IDE0MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIHsgZ290b0Nhc2UgPSAyMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLWNhc2UgMTYwOgotICAgICAgICAgICAgeXlhY2NlcHQgPSAyOwotICAgICAg
ICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChZWU1BUktFUiA9ICsrY3Vyc29yKTsKLSAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdFJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnLicpIHsgZ290b0Nhc2UgPSAxODk7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICc3JykgeyBnb3RvQ2FzZSA9IDE5ODsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdFJykgeyBnb3RvQ2FzZSA9IDE4ODsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PT0gJ1gnKSB7IGdvdG9DYXNlID0gMjAwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZScpIHsgZ290b0Nhc2Ug
PSAxODg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAneCcp
IHsgZ290b0Nhc2UgPSAyMDA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLWNhc2UgMTYxOgotICAgICAgICAgICAgdGhpcy5zZXRMZXhDb25kaXRpb24odGhp
cy5fbGV4Q29uZGl0aW9ucy5ESVYpOwotICAgICAgICAgICAgeyB0aGlzLnRva2VuVHlwZSA9ICJq
YXZhc2NyaXB0LW51bWJlciI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMTYyOgotICAgICAgICAg
ICAgeXlhY2NlcHQgPSAyOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChZWU1BUktF
UiA9ICsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgewotICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICcuJykgeyBnb3RvQ2FzZSA9IDE4OTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMTYxOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTg2OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0UnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdEJykgeyBnb3RvQ2FzZSA9IDE2MTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxODg7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoID09ICdlJykgeyBnb3RvQ2FzZSA9IDE4ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLWNhc2UgMTYzOgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJB
dCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnOycpIHsgZ290b0Nhc2UgPSAx
NDU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzwnKSB7IGdvdG9DYXNl
ID0gMTg1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICc9JykgeyBnb3Rv
Q2FzZSA9IDE2OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQ1OyBj
b250aW51ZTsgfTsKLWNhc2UgMTY0OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgr
K2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnPScpIHsgZ290b0Nhc2UgPSAxODQ7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE0NTsgY29udGludWU7IH07
Ci1jYXNlIDE2NToKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwot
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzwnKSB7IGdvdG9DYXNlID0gMTQ1OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICc9JykgeyBnb3RvQ2FzZSA9IDE2OTsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnPicpIHsgZ290b0Nhc2UgPSAxODI7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE0NTsgY29udGludWU7IH07Ci1j
YXNlIDE2NjoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9
PSAndScpIHsgZ290b0Nhc2UgPSAxNzA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3Rv
Q2FzZSA9IDE0MTsgY29udGludWU7IH07Ci1jYXNlIDE2NzoKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz0nKSB7IGdv
dG9DYXNlID0gMTY5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNDU7
IGNvbnRpbnVlOyB9OwotY2FzZSAxNjg6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0
KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9IDE2
OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCAhPSAnfCcpIHsgZ290b0Nhc2Ug
PSAxNDU7IGNvbnRpbnVlOyB9OwotY2FzZSAxNjk6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5f
Y2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNDU7IGNvbnRpbnVl
OyB9OwotY2FzZSAxNzA6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29y
KTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gMTcyOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9D
YXNlID0gMTcyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcp
IHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdmJykgeyBnb3RvQ2FzZSA9IDE3MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1j
YXNlIDE3MToKLSAgICAgICAgICAgIGN1cnNvciA9IFlZTUFSS0VSOwotICAgICAgICAgICAgaWYg
KHl5YWNjZXB0IDw9IDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlhY2NlcHQgPD0gMCkgewot
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQ4
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmICh5eWFjY2VwdCA8PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMjM7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMTcyOgotICAgICAgICAgICAgeXlj
aCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcp
IHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICc6JykgeyBnb3RvQ2FzZSA9
IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9IDE3MzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnZycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAxNzM6Ci0gICAgICAgICAgICB5eWNoID0gdGhp
cy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJzonKSB7IGdvdG9DYXNlID0gMTcxOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMTc0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgIGlmICh5eWNoID49ICdnJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICB9Ci1jYXNlIDE3NDoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFy
QXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
RicpIHsgZ290b0Nhc2UgPSAxNzU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdgJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPj0gJ2cnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIH0KLWNhc2UgMTc1OgotICAgICAgICAgICAgeXlhY2NlcHQgPSAxOwotICAgICAgICAg
ICAgWVlNQVJLRVIgPSArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
Y3Vyc29yKTsKLWNhc2UgMTc2OgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoID09ICckJykgeyBnb3RvQ2FzZSA9IDE3NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSAxNDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9
IDE3NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykg
eyBnb3RvQ2FzZSA9IDE0ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDE3NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSAxNDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ18nKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcXCcpIHsgZ290b0Nhc2UgPSAxNzc7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXicpIHsgZ290
b0Nhc2UgPSAxNDg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNl
ID0gMTc1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAxNDg7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAneicpIHsgZ290b0Nhc2UgPSAxNzU7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSBTdHJpbmcuZnJv
bUNoYXJDb2RlKDB4N0YpKSB7IGdvdG9DYXNlID0gMTQ4OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotY2FzZSAxNzc6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAg
ICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5
eWNoICE9ICd1JykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAr
K2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcv
JykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPj0gJzonKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMTc5
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nh
c2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdnJykg
eyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDE3OToK
LSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChj
dXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpIHsg
Z290b0Nhc2UgPSAxODA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdgJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPj0gJ2cnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
IH0KLWNhc2UgMTgwOgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0g
dGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICc6JykgeyBnb3RvQ2FzZSA9IDE3MTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9IDE4MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA+PSAnZycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgfQotY2FzZSAxODE6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAg
ICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9
IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdv
dG9DYXNlID0gMTc1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
MTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMTc1OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykgeyBnb3RvQ2FzZSA9IDE3NTsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB9Ci1jYXNlIDE4MjoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
KytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzwnKSB7IGdvdG9DYXNlID0gMTQ1
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICc9JykgeyBnb3RvQ2FzZSA9
IDE2OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA+PSAnPycpIHsgZ290b0Nh
c2UgPSAxNDU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgr
K2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnPScpIHsgZ290b0Nhc2UgPSAxNjk7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE0NTsgY29udGludWU7IH07
Ci1jYXNlIDE4NDoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwot
ICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJz0nKSB7IGdvdG9DYXNlID0gMTY5OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNDU7IGNvbnRpbnVlOyB9OwotY2FzZSAxODU6
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAg
IGlmICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9IDE2OTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICB7IGdvdG9DYXNlID0gMTQ1OyBjb250aW51ZTsgfTsKLWNhc2UgMTg2OgotICAgICAgICAg
ICAgeXlhY2NlcHQgPSAyOwotICAgICAgICAgICAgWVlNQVJLRVIgPSArK2N1cnNvcjsKLSAgICAg
ICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNo
IDw9ICc5JykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICcuJykgeyBnb3RvQ2FzZSA9
IDE4OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdv
dG9DYXNlID0gMTYxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
MTg2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ0UnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdEJykg
eyBnb3RvQ2FzZSA9IDE2MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ2UnKSB7IGdvdG9DYXNlID0gMTYxOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDE4ODoK
LSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJywnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJysnKSB7IGdv
dG9DYXNlID0gMTk1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0g
MTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJy0nKSB7IGdvdG9DYXNlID0gMTk1OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDE5NjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB9Ci1jYXNlIDE4OToKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMjsKLSAgICAg
ICAgICAgIFlZTUFSS0VSID0gKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnRCcpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDE4OTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE2MTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdFJykgeyBnb3Rv
Q2FzZSA9IDE5MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ2Un
KSB7IGdvdG9DYXNlID0gMTYxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMTkx
OgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA8PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAnKycpIHsg
Z290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnLScpIHsgZ290b0Nhc2UgPSAxOTI7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0g
MTkzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTcxOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMTkyOgotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290
b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJzonKSB7
IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLWNhc2UgMTkzOgotICAgICAgICAgICAgKytj
dXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAg
ICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gMTkzOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotY2FzZSAxOTU6Ci0g
ICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotY2FzZSAx
OTY6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFy
QXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE2
MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpIHsgZ290b0Nhc2Ug
PSAxOTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE2MTsgY29udGlu
dWU7IH07Ci1jYXNlIDE5ODoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXlj
aCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7
IGdvdG9DYXNlID0gMTYxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICc3
JykgeyBnb3RvQ2FzZSA9IDE5ODsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNl
ID0gMTYxOyBjb250aW51ZTsgfTsKLWNhc2UgMjAwOgotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICc6JykgeyBnb3RvQ2FzZSA9IDE3MTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdGJykgeyBnb3RvQ2FzZSA9IDIwMTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA+PSAnZycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgfQotY2FzZSAyMDE6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAg
ICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE2
MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9D
YXNlID0gMjAxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTYx
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMjAxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykgeyBnb3RvQ2FzZSA9IDIwMTsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE2MTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICB9Ci1jYXNlIDIwMzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAg
eXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy4n
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xuJykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnXHQnKSB7IGdvdG9DYXNlID0gMjAzOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xyJykg
eyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSAyMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDIyNjsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDIwMzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMzQ7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdcXCcpIHsgZ290b0Nhc2UgPSAyMzM7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnXScpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjAzOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDIwNToKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xu
JykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA9
PSAnXHInKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSAyMDM7IGNvbnRpbnVlOyB9OwotY2FzZSAyMDY6Ci0gICAgICAgICAgICArK2N1cnNv
cjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAg
IGlmICh5eWNoIDw9ICcqJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDE3MTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMDY7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdccicpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnKScpIHsgZ290b0Nhc2UgPSAyMDY7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdbJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnLycpIHsg
Z290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9D
YXNlID0gMjA2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwnKSB7IGdvdG9DYXNlID0gMjIxOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ10nKSB7IGdvdG9DYXNlID0g
MjE5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwNjsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAyMDg6
Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
Y3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMjE1OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB7IGdvdG9DYXNlID0gMjA4OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2FzZSA9IDIx
NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyonKSB7IGdvdG9D
YXNlID0gMjEzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjA4
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMjEwOgotICAgICAgICAgICAgKytj
dXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAg
ICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMjEyOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIGlmICh5eWNoICE9ICdccicpIHsgZ290b0Nhc2UgPSAyMTA7IGNvbnRpbnVlOyB9
OwotY2FzZSAyMTI6Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gImphdmFzY3JpcHQt
Y29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMjEzOgotICAgICAgICAgICAgKytjdXJz
b3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA9PSAnKicpIHsgZ290b0Nhc2UgPSAyMTM7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgaWYgKHl5Y2ggPT0gJy8nKSB7IGdvdG9DYXNlID0gMjE3OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMDg7IGNvbnRpbnVlOyB9OwotY2FzZSAyMTU6Ci0gICAg
ICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMu
X2xleENvbmRpdGlvbnMuQ09NTUVOVCk7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0g
ImphdmFzY3JpcHQtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMjE3OgotICAgICAg
ICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gImphdmFzY3Jp
cHQtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMjE5OgotICAgICAgICAgICAgKytj
dXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAg
ICAgICBpZiAoeXljaCA8PSAnKicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSAx
NzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjE5OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnXHInKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyknKSB7IGdvdG9DYXNlID0gMjE5OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwMzsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnWicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy8n
KSB7IGdvdG9DYXNlID0gMjI2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IDIxOTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNlID0gMjI0OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgeyBnb3RvQ2Fz
ZSA9IDIyMjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAy
MTk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2Ug
MjIxOgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hh
ckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0g
MTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nh
c2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwNjsgY29u
dGludWU7IH07Ci1jYXNlIDIyMjoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMzsKLSAgICAgICAg
ICAgIFlZTUFSS0VSID0gKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0
KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMjIz
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoICE9ICdccicpIHsgZ290b0Nhc2Ug
PSAyMTk7IGNvbnRpbnVlOyB9OwotY2FzZSAyMjM6Ci0gICAgICAgICAgICB0aGlzLnNldExleENv
bmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLlJFR0VYKTsKLSAgICAgICAgICAgIHsgdGhpcy50
b2tlblR5cGUgPSAiamF2YXNjcmlwdC1yZWdleHAiOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDIy
NDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJB
dChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyonKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ1xmJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAn
XG4nKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDIyNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2FzZSA9IDE3MTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcpJykgeyBnb3Rv
Q2FzZSA9IDIyNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2Ug
PSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoID09ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMjQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcXCcpIHsg
Z290b0Nhc2UgPSAyMzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnXScpIHsgZ290b0Nhc2UgPSAyMjk7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICB7IGdvdG9DYXNlID0gMjI0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci1jYXNlIDIyNjoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAg
ICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J2gnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2cnKSB7IGdvdG9DYXNlID0gMjI2
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ2knKSB7IGdvdG9DYXNlID0gMjI2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA9PSAnbScpIHsgZ290b0Nhc2UgPSAyMjY7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgeyB0aGlzLnRva2VuVHlwZSA9ICJqYXZhc2NyaXB0LXJl
Z2V4cCI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMjI5OgotICAgICAgICAgICAgKytjdXJzb3I7
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBp
ZiAoeXljaCA8PSAnKicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSAxNzE7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjI5OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnXHInKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJyknKSB7IGdvdG9DYXNlID0gMjI5OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwMzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnWicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy8nKSB7IGdv
dG9DYXNlID0gMjI2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDIyOTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNlID0gMjI0OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgeyBnb3RvQ2FzZSA9IDIz
MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMjk7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMjMxOgot
ICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1
cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTcxOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAx
NzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIyNDsgY29udGludWU7
IH07Ci1jYXNlIDIzMjoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMzsKLSAgICAgICAgICAgIFlZ
TUFSS0VSID0gKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMjIzOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAyMjM7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIyOTsgY29udGludWU7IH07
Ci1jYXNlIDIzMzoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMzsKLSAgICAgICAgICAgIFlZTUFS
S0VSID0gKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7
Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMjIzOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAyMjM7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwMzsgY29udGludWU7IH07Ci1j
YXNlIDIzNDoKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyonKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICAgICAgeyBnb3RvQ2FzZSA9IDIzNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2FzZSA9
IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcpJykg
eyBnb3RvQ2FzZSA9IDIzNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoID09ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMzQ7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdc
XCcpIHsgZ290b0Nhc2UgPSAyMzg7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA+PSAnXicpIHsgZ290b0Nhc2UgPSAyMzQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMjM2OgotICAgICAgICAgICAgKytjdXJzb3I7
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBp
ZiAoeXljaCA8PSAnKicpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXGYnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSAxNzE7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjM2OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnXHInKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJyknKSB7IGdvdG9DYXNlID0gMjM2OyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIwMzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnWicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy8nKSB7IGdv
dG9DYXNlID0gMjI2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDIzNjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNlID0gMjM0OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgeyBnb3RvQ2FzZSA9IDIz
OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyMzY7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMjM4Ogot
ICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1
cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMTcxOyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAx
NzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIzNDsgY29udGludWU7
IH07Ci1jYXNlIDIzOToKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMzsKLSAgICAgICAgICAgIFlZ
TUFSS0VSID0gKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNv
cik7Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMjIzOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAyMjM7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDIzNjsgY29udGludWU7IH07
Ci1jYXNlIDI0MDoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMjsKLSAgICAgICAgICAgIFlZTUFS
S0VSID0gKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7
Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnRCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDI0MDsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgeyBnb3RvQ2FzZSA9IDE2MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdFJykgeyBnb3RvQ2FzZSA9IDI0Mjsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ2UnKSB7IGdvdG9DYXNl
ID0gMTYxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMjQyOgotICAgICAgICAg
ICAgeXljaCA9IHRoaXMuX2NoYXJBdCgrK2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8
PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCAhPSAnKycpIHsgZ290b0Nhc2UgPSAx
NzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnLScpIHsgZ290b0Nhc2UgPSAyNDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gMjQ0OyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIH0KLWNhc2UgMjQzOgotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdCgr
K2N1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPj0gJzonKSB7IGdvdG9DYXNlID0g
MTcxOyBjb250aW51ZTsgfTsKLWNhc2UgMjQ0OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAg
ICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXlj
aCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJzknKSB7IGdvdG9DYXNlID0gMjQ0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSAxNjE7IGNvbnRpbnVlOyB9OwotY2FzZSAyNDY6Ci0gICAgICAgICAgICAr
K2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLWNhc2Ug
MjQ3OgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgewotICAgICAgICAgICAgICAgIGlm
ICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsgZ290b0Nhc2UgPSAyNDY7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcmJykgeyBnb3RvQ2FzZSA9IDI0NjsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyNDk7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoICE9
ICdcXCcpIHsgZ290b0Nhc2UgPSAyNDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9
IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2EnKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyEnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdc
dCcpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgeyBnb3RvQ2FzZSA9IDI1MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnXHInKSB7IGdvdG9D
YXNlID0gMjUyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1wnJykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKSB7IGdvdG9DYXNlID0gMjQ2
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcmJykg
eyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7
IGdvdG9DYXNlID0gMjQ2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcXCcpIHsgZ290b0Nhc2Ug
PSAyNDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdx
JykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdiJykgeyBnb3RvQ2FzZSA9IDI0NjsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZScpIHsgZ290b0Nhc2Ug
PSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDI0NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnbicpIHsgZ290b0Nhc2UgPSAyNDY7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndCcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdzJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjQ2OyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICd1JykgeyBnb3RvQ2FzZSA9IDI1MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAndicpIHsgZ290b0Nhc2UgPSAyNDY7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci1jYXNlIDI0OToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeyB0aGlzLnRv
a2VuVHlwZSA9ICJqYXZhc2NyaXB0LXN0cmluZyI7IHJldHVybiBjdXJzb3I7IH0KLWNhc2UgMjUx
OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0
KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDI1NDsgY29udGludWU7IH07
Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2Fz
ZSA9IDI1NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7
IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnZicpIHsgZ290b0Nhc2UgPSAyNTQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsg
Z290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAyNTI6Ci0g
ICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRo
aXMuX2xleENvbmRpdGlvbnMuU1NUUklORyk7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBl
ID0gImphdmFzY3JpcHQtc3RyaW5nIjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAyNTQ6Ci0gICAg
ICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29y
KTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICcvJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPj0gJzonKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9D
YXNlID0gMjU1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcp
IHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNo
ID49ICdnJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1j
YXNlIDI1NToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMu
X2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnRicpIHsgZ290b0Nhc2UgPSAyNTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdgJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPj0gJ2cnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgIH0KLWNhc2UgMjU2OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAg
ICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAn
QCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2Fz
ZSA9IDI0NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9IDI0NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpIHsgZ290b0Nhc2UgPSAyNDY7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgfQotY2FzZSAyNTc6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLWNhc2UgMjU4OgotICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ1xyJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nh
c2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicp
IHsgZ290b0Nhc2UgPSAyNTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nh
c2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnIicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
JyEnKSB7IGdvdG9DYXNlID0gMjU3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDI0OTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggIT0gJ1xcJykgeyBnb3RvQ2FzZSA9IDI1Nzsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0g
ICAgICAgICAgICBpZiAoeXljaCA8PSAnYScpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnIScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xuJykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1x0JykgeyBnb3RvQ2FzZSA9IDE3MTsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjYxOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAyNjE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnIicpIHsgZ290b0Nhc2UgPSAyNTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyYnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyNTc7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ1xcJykgeyBnb3RvQ2FzZSA9IDI1NzsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3EnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdmJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J2InKSB7IGdvdG9DYXNlID0gMjU3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdlJykgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjU3OyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
ID09ICduJykgeyBnb3RvQ2FzZSA9IDI1NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICd0JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3MnKSB7
IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsg
Z290b0Nhc2UgPSAyNTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3UnKSB7IGdvdG9DYXNlID0g
MjYwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd2
JykgeyBnb3RvQ2FzZSA9IDI1NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMjYwOgotICAgICAgICAgICAg
KytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAg
ICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
LycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDI2MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2FzZSA9IDI2MzsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMTcx
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpIHsgZ290b0Nh
c2UgPSAyNjM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAxNzE7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAyNjE6Ci0gICAgICAgICAgICArK2N1
cnNvcjsKLSAgICAgICAgICAgIHRoaXMuc2V0TGV4Q29uZGl0aW9uKHRoaXMuX2xleENvbmRpdGlv
bnMuRFNUUklORyk7Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gImphdmFzY3JpcHQt
c3RyaW5nIjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAyNjM6Ci0gICAgICAgICAgICArK2N1cnNv
cjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykgeyBn
b3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPj0g
JzonKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0gMjY0OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290b0Nhc2UgPSAx
NzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdnJykgeyBnb3Rv
Q2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDI2NDoKLSAgICAg
ICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3Ip
OwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAg
ICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpIHsgZ290b0Nh
c2UgPSAyNjU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykg
eyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2gg
Pj0gJ2cnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNh
c2UgMjY1OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5f
Y2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDI1NzsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDE3MTsgY29udGludWU7IH07Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBn
b3RvQ2FzZSA9IDI1NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J2AnKSB7IGdvdG9DYXNlID0gMTcxOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnZicpIHsgZ290b0Nhc2UgPSAyNTc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgIHsgZ290b0Nhc2UgPSAxNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAy
NjY6Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KCsrY3Vyc29yKTsKLSAgICAgICAg
ICAgIGlmICh5eWNoID09ICc9JykgeyBnb3RvQ2FzZSA9IDE2OTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMTQ1OyBjb250aW51ZTsgfTsKLWNhc2UgMjY3OgotICAgICAg
ICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7
Ci1jYXNlIDI2ODoKLSAgICAgICAgICAgIGlmICh5eWNoID09ICcgJykgeyBnb3RvQ2FzZSA9IDI2
NzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMTQzOyBjb250aW51ZTsg
fTsKLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi1jYXNlIHRoaXMu
Y2FzZV9SRUdFWDoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICcuJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1x0JykgeyBnb3RvQ2Fz
ZSA9IDI3MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAy
NzM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdccicpIHsgZ290b0Nhc2UgPSAyNzM7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjcyOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdbJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290
b0Nhc2UgPSAyNzU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnWicpIHsgZ290b0Nhc2UgPSAyNzI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAg
ICB7IGdvdG9DYXNlID0gMjc3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwnKSB7IGdvdG9DYXNlID0gMjc4
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ10nKSB7IGdv
dG9DYXNlID0gMjczOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDI3MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Y2FzZSAyNzE6Ci0gICAgICAgICAgICB7IHRoaXMudG9rZW5UeXBlID0gImphdmFzY3JpcHQtcmVn
ZXhwIjsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAyNzI6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9
IDA7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KFlZTUFSS0VSID0gKytjdXJzb3Ip
OwotICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDI4MDsgY29udGludWU7IH07Ci1jYXNlIDI3MzoK
LSAgICAgICAgICAgICsrY3Vyc29yOwotY2FzZSAyNzQ6Ci0gICAgICAgICAgICB7IHRoaXMudG9r
ZW5UeXBlID0gbnVsbDsgcmV0dXJuIGN1cnNvcjsgfQotY2FzZSAyNzU6Ci0gICAgICAgICAgICAr
K2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAg
ICAgICAgIHsgZ290b0Nhc2UgPSAyODY7IGNvbnRpbnVlOyB9OwotY2FzZSAyNzY6Ci0gICAgICAg
ICAgICB0aGlzLnNldExleENvbmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLk5PRElWKTsKLSAg
ICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAiamF2YXNjcmlwdC1yZWdleHAiOyByZXR1cm4g
Y3Vyc29yOyB9Ci1jYXNlIDI3NzoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAg
ICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAg
ICBpZiAoeXljaCA8PSAnXHInKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykg
eyBnb3RvQ2FzZSA9IDI3NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ1xmJykgeyBnb3RvQ2FzZSA9IDI4NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDI3NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcqJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAnKScpIHsgZ290b0Nhc2UgPSAyODQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICB7IGdvdG9DYXNlID0gMjc0OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnLycpIHsgZ290b0Nhc2Ug
PSAyNzQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjg0
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDI3
ODoKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoKytjdXJzb3IpOwotICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDI3NDsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICBpZiAoeXljaCA9PSAnXHInKSB7IGdvdG9DYXNlID0gMjc0OyBjb250aW51ZTsgfTsK
LWNhc2UgMjc5OgotICAgICAgICAgICAgeXlhY2NlcHQgPSAwOwotICAgICAgICAgICAgWVlNQVJL
RVIgPSArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsK
LWNhc2UgMjgwOgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy4nKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
XHQnKSB7IGdvdG9DYXNlID0gMjc5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAg
eyBnb3RvQ2FzZSA9IDI3MTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xyJykgeyBnb3RvQ2FzZSA9IDI3MTsg
Y29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyNzk7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICcvJykgeyBnb3RvQ2FzZSA9IDI4NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdaJykgeyBnb3RvQ2FzZSA9IDI3OTsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyODM7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcXCcpIHsg
Z290b0Nhc2UgPSAyODE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnXScpIHsgZ290b0Nhc2UgPSAyNzE7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
ICAgICB7IGdvdG9DYXNlID0gMjc5OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci1jYXNlIDI4MToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAg
ICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
J1xuJykgeyBnb3RvQ2FzZSA9IDI4MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXlj
aCAhPSAnXHInKSB7IGdvdG9DYXNlID0gMjc5OyBjb250aW51ZTsgfTsKLWNhc2UgMjgyOgotICAg
ICAgICAgICAgY3Vyc29yID0gWVlNQVJLRVI7Ci0gICAgICAgICAgICBpZiAoeXlhY2NlcHQgPD0g
MCkgewotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyNzE7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjc0OyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgIH0KLWNhc2UgMjgzOgotICAgICAgICAgICAgKytjdXJzb3I7
Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci1jYXNlIDI4NDoKLSAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICcqJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdcZicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2Fz
ZSA9IDI4MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAy
ODM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdccicpIHsgZ290b0Nhc2UgPSAyODI7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnKScpIHsgZ290b0Nhc2UgPSAyODM7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjgyOyBjb250aW51
ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdbJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnLycpIHsgZ290b0Nhc2UgPSAyODI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAg
ICB7IGdvdG9DYXNlID0gMjgzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwnKSB7IGdvdG9DYXNlID0gMjg5
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ10nKSB7IGdv
dG9DYXNlID0gMjg3OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2Fz
ZSA9IDI4MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Y2FzZSAyODU6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlz
Ll9jaGFyQXQoY3Vyc29yKTsKLWNhc2UgMjg2OgotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2gn
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2cnKSB7IGdvdG9DYXNlID0gMjg1OyBj
b250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjc2OyBjb250aW51ZTsg
fTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2kn
KSB7IGdvdG9DYXNlID0gMjg1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA9PSAnbScpIHsgZ290b0Nhc2UgPSAyODU7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IHsgZ290b0Nhc2UgPSAyNzY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAyODc6
Ci0gICAgICAgICAgICB5eWFjY2VwdCA9IDA7Ci0gICAgICAgICAgICBZWU1BUktFUiA9ICsrY3Vy
c29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJyonKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnXG4nKSB7IGdvdG9DYXNlID0gMjcx
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDI4NzsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ1xyJykgeyBnb3RvQ2FzZSA9IDI3MTsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcpJykgeyBnb3RvQ2FzZSA9IDI4NzsgY29udGludWU7
IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyNzk7IGNvbnRpbnVlOyB9Owot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ1onKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICcvJykg
eyBnb3RvQ2FzZSA9IDI4NTsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290
b0Nhc2UgPSAyODc7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdbJykgeyBnb3RvQ2FzZSA9IDI4MzsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcXCcpIHsgZ290b0Nhc2Ug
PSAyOTA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjg3
OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDI4
OToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJB
dChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9IDI4
MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICBpZiAoeXljaCA9PSAnXHInKSB7IGdvdG9DYXNl
ID0gMjgyOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyODM7IGNvbnRp
bnVlOyB9OwotY2FzZSAyOTA6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5
Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicp
IHsgZ290b0Nhc2UgPSAyODI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgaWYgKHl5Y2ggPT0g
J1xyJykgeyBnb3RvQ2FzZSA9IDI4MjsgY29udGludWU7IH07Ci0gICAgICAgICAgICB7IGdvdG9D
YXNlID0gMjg3OyBjb250aW51ZTsgfTsKLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqICovCi1jYXNlIHRoaXMuY2FzZV9TU1RSSU5HOgotICAgICAgICAgICAgeXljaCA9IHRo
aXMuX2NoYXJBdChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xyJykgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoID09ICdcbicpIHsgZ290b0Nhc2UgPSAyOTU7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcZicpIHsgZ290b0Nhc2UgPSAyOTQ7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyOTU7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
XCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcmJykgeyBnb3RvQ2FzZSA9
IDI5NDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyOTc7
IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoID09ICdcXCcpIHsgZ290b0Nhc2UgPSAyOTk7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgICAgICB7IGdvdG9DYXNlID0gMjk0OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci1jYXNlIDI5MzoKLSAgICAgICAgICAgIHsgdGhpcy50
b2tlblR5cGUgPSAiamF2YXNjcmlwdC1zdHJpbmciOyByZXR1cm4gY3Vyc29yOyB9Ci1jYXNlIDI5
NDoKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9j
aGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICB7IGdvdG9DYXNlID0gMzAx
OyBjb250aW51ZTsgfTsKLWNhc2UgMjk1OgotICAgICAgICAgICAgKytjdXJzb3I7Ci1jYXNlIDI5
NjoKLSAgICAgICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSBudWxsOyByZXR1cm4gY3Vyc29yOyB9
Ci1jYXNlIDI5NzoKLSAgICAgICAgICAgICsrY3Vyc29yOwotY2FzZSAyOTg6Ci0gICAgICAgICAg
ICB0aGlzLnNldExleENvbmRpdGlvbih0aGlzLl9sZXhDb25kaXRpb25zLk5PRElWKTsKLSAgICAg
ICAgICAgIHsgdGhpcy50b2tlblR5cGUgPSAiamF2YXNjcmlwdC1zdHJpbmciOyByZXR1cm4gY3Vy
c29yOyB9Ci1jYXNlIDI5OToKLSAgICAgICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAg
IHl5Y2ggPSB0aGlzLl9jaGFyQXQoWVlNQVJLRVIgPSArK2N1cnNvcik7Ci0gICAgICAgICAgICBp
ZiAoeXljaCA8PSAnZScpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXCcnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICciJykgeyBnb3RvQ2FzZSA9IDMwMDsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcmJykgeyBnb3RvQ2Fz
ZSA9IDI5NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNlID0gMjk2OyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoICE9
ICdiJykgeyBnb3RvQ2FzZSA9IDI5NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdyJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
bScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdnJykgeyBnb3RvQ2Fz
ZSA9IDI5NjsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnbicpIHsgZ290b0Nhc2UgPSAzMDA7IGNv
bnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3EnKSB7IGdv
dG9DYXNlID0gMjk2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd0Jykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3MnKSB7IGdvdG9DYXNlID0g
Mjk2OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd1JykgeyBnb3RvQ2FzZSA9IDMwMjsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA+PSAndycpIHsgZ290b0Nh
c2UgPSAyOTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAzMDA6Ci0gICAgICAgICAgICB5eWFjY2VwdCA9
IDA7Ci0gICAgICAgICAgICBZWU1BUktFUiA9ICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9
IHRoaXMuX2NoYXJBdChjdXJzb3IpOwotY2FzZSAzMDE6Ci0gICAgICAgICAgICBpZiAoeXljaCA8
PSAnXHInKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xuJykgeyBnb3RvQ2FzZSA9
IDI5MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xmJykgeyBn
b3RvQ2FzZSA9IDMwMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9
IDI5MzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdcJycpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyYn
KSB7IGdvdG9DYXNlID0gMzAwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgeyBn
b3RvQ2FzZSA9IDMwODsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ1xcJykgeyBnb3RvQ2FzZSA9IDMwNzsgY29u
dGludWU7IH07Ci0gICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMDA7IGNvbnRpbnVl
OyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLWNhc2UgMzAyOgotICAgICAg
ICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNoID0gdGhpcy5fY2hhckF0KGN1cnNvcik7
Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnLycpIHsgZ290b0Nhc2UgPSAzMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDMwNDsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykgeyBnb3RvQ2Fz
ZSA9IDMwNDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKSB7
IGdvdG9DYXNlID0gMzAzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnZicpIHsgZ290b0Nhc2UgPSAzMDQ7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2Fz
ZSAzMDM6Ci0gICAgICAgICAgICBjdXJzb3IgPSBZWU1BUktFUjsKLSAgICAgICAgICAgIGlmICh5
eWFjY2VwdCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDI5MzsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHsgZ290b0Nhc2Ug
PSAyOTY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgfQotY2FzZSAzMDQ6Ci0gICAgICAgICAg
ICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICcvJykgeyBnb3RvQ2FzZSA9IDMwMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPj0gJzonKSB7IGdvdG9DYXNlID0gMzAzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKSB7IGdvdG9DYXNlID0g
MzA1OyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnYCcpIHsgZ290
b0Nhc2UgPSAzMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICdn
JykgeyBnb3RvQ2FzZSA9IDMwMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICB9Ci1jYXNlIDMw
NToKLSAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgeXljaCA9IHRoaXMuX2NoYXJB
dChjdXJzb3IpOwotICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gJy8nKSB7IGdvdG9DYXNlID0gMzAzOyBjb250aW51ZTsgfTsKLSAgICAg
ICAgICAgICAgICBpZiAoeXljaCA+PSAnOicpIHsgZ290b0Nhc2UgPSAzMDM7IGNvbnRpbnVlOyB9
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicp
IHsgZ290b0Nhc2UgPSAzMDY7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdgJykgeyBnb3RvQ2FzZSA9IDMwMzsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPj0gJ2cnKSB7IGdvdG9DYXNlID0gMzAzOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgIH0KLWNhc2UgMzA2OgotICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB5eWNo
ID0gdGhpcy5fY2hhckF0KGN1cnNvcik7Ci0gICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpIHsK
LSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpIHsgZ290b0Nhc2UgPSAzMDM7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykgeyBnb3RvQ2FzZSA9IDMw
MDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDMwMzsgY29udGlu
dWU7IH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdGJykgeyBnb3RvQ2FzZSA9IDMwMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ2AnKSB7IGdvdG9DYXNlID0gMzAzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnZicpIHsgZ290b0Nhc2UgPSAzMDA7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
fQotY2FzZSAzMDc6Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0
aGlzLl9jaGFyQXQoY3Vyc29yKTsKLSAgICAgICAgICAgIGlmICh5eWNoIDw9ICdlJykgewotICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdcJycpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJyInKSB7IGdvdG9DYXNlID0gMzAwOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJyYnKSB7IGdvdG9DYXNlID0gMzAzOyBjb250aW51ZTsgfTsK
LSAgICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDMwMDsgY29udGludWU7IH07Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1xc
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKSB7IGdvdG9DYXNl
ID0gMzAzOyBjb250aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2Ug
PSAzMDA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2InKSB7IGdvdG9DYXNlID0gMzAwOyBjb250
aW51ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMDM7IGNvbnRp
bnVlOyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAncicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ20nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnZicpIHsgZ290b0Nhc2UgPSAzMDA7IGNvbnRpbnVlOyB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDMwMzsgY29udGludWU7IH07Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnbicpIHsgZ290b0Nhc2UgPSAzMDA7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ3EnKSB7IGdvdG9DYXNlID0gMzAzOyBjb250aW51ZTsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMDA7IGNvbnRpbnVlOyB9OwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ3QnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAncycpIHsgZ290b0Nhc2UgPSAzMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgeyBnb3RvQ2FzZSA9IDMwMDsgY29udGludWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndScp
IHsgZ290b0Nhc2UgPSAzMDI7IGNvbnRpbnVlOyB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ3YnKSB7IGdvdG9DYXNlID0gMzAwOyBjb250aW51ZTsgfTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAzMDM7IGNvbnRpbnVlOyB9OwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotY2FzZSAzMDg6
Ci0gICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIHl5Y2ggPSB0aGlzLl9jaGFyQXQo
Y3Vyc29yKTsKLSAgICAgICAgICAgIHsgZ290b0Nhc2UgPSAyOTg7IGNvbnRpbnVlOyB9OwotICAg
ICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5Tb3VyY2VUb2tlbml6ZXIucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIucmUyanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUphdmFTY3JpcHRUb2tlbml6
ZXIucmUyanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTFjMDUuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VKYXZhU2NyaXB0
VG9rZW5pemVyLnJlMmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogR2Vu
ZXJhdGUganMgZmlsZSBhcyBmb2xsb3dzOgotcmUyYyAtaXNjIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5yZTJqcyBcCi0gIHwgc2Vk
ICdzfF55eVwoW146XSpcKSpcOnxjYXNlIFwxOnwnIFwKLSAgfCBzZWQgJ3N8WypdY3Vyc29yWytd
WytdfHRoaXMuX2NoYXJBdChjdXJzb3IrKyl8JyBcCi0gIHwgc2VkICdzfFtbKl1bK11bK11jdXJz
b3J8dGhpcy5fY2hhckF0KCsrY3Vyc29yKXwnIFwKLSAgfCBzZWQgJ3N8WypdY3Vyc29yfHRoaXMu
X2NoYXJBdChjdXJzb3IpfCcgXAotICB8IHNlZCAnc3x5eWNoID0gXCpcKFteO10qXCl8eXljaCA9
IHRoaXMuX2NoYXJBdFwxfCcgXAotICB8IHNlZCAnc3xnb3RvIGNhc2UgXChbXjtdKlwpfHsgZ290
b0Nhc2UgPSBcMTsgY29udGludWU7IH18JyBcCi0gIHwgc2VkICdzfHl5Y2ggPD0gXCgweFswLTlh
LWZBLUZdKlwpfHl5Y2ggXDxcPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFwxKXwnIFwKLSAgfCBzZWQg
J3N8dW5zaWduZWRcIGludHx2YXJ8JyBcCi0gIHwgc2VkICdzfHZhclwgeXljaHxjYXNlIDE6IHZh
ciB5eWNofCcgPiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUphdmFT
Y3JpcHRUb2tlbml6ZXIuanMKLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVu
ZHMge1dlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXJ9Ci0gKi8KLVdlYkluc3BlY3Rvci5Tb3Vy
Y2VKYXZhU2NyaXB0VG9rZW5pemVyID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5T
b3VyY2VUb2tlbml6ZXIuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX2xleENvbmRpdGlvbnMgPSB7
Ci0gICAgICAgIERJVjogMCwKLSAgICAgICAgTk9ESVY6IDEsCi0gICAgICAgIENPTU1FTlQ6IDIs
Ci0gICAgICAgIERTVFJJTkc6IDMsCi0gICAgICAgIFNTVFJJTkc6IDQsCi0gICAgICAgIFJFR0VY
OiA1Ci0gICAgfTsKLQotICAgIHRoaXMuY2FzZV9ESVYgPSAxMDAwOwotICAgIHRoaXMuY2FzZV9O
T0RJViA9IDEwMDE7Ci0gICAgdGhpcy5jYXNlX0NPTU1FTlQgPSAxMDAyOwotICAgIHRoaXMuY2Fz
ZV9EU1RSSU5HID0gMTAwMzsKLSAgICB0aGlzLmNhc2VfU1NUUklORyA9IDEwMDQ7Ci0gICAgdGhp
cy5jYXNlX1JFR0VYID0gMTAwNTsKLQotICAgIHRoaXMuY29uZGl0aW9uID0gdGhpcy5jcmVhdGVJ
bml0aWFsQ29uZGl0aW9uKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VKYXZhU2NyaXB0VG9r
ZW5pemVyLktleXdvcmRzID0gWwotICAgICAgICAibnVsbCIsICJ0cnVlIiwgImZhbHNlIiwgImJy
ZWFrIiwgImNhc2UiLCAiY2F0Y2giLCAiY29uc3QiLCAiZGVmYXVsdCIsICJmaW5hbGx5IiwgImZv
ciIsCi0gICAgICAgICJpbnN0YW5jZW9mIiwgIm5ldyIsICJ2YXIiLCAiY29udGludWUiLCAiZnVu
Y3Rpb24iLCAicmV0dXJuIiwgInZvaWQiLCAiZGVsZXRlIiwgImlmIiwKLSAgICAgICAgInRoaXMi
LCAiZG8iLCAid2hpbGUiLCAiZWxzZSIsICJpbiIsICJzd2l0Y2giLCAidGhyb3ciLCAidHJ5Iiwg
InR5cGVvZiIsICJkZWJ1Z2dlciIsCi0gICAgICAgICJjbGFzcyIsICJlbnVtIiwgImV4cG9ydCIs
ICJleHRlbmRzIiwgImltcG9ydCIsICJzdXBlciIsICJnZXQiLCAic2V0IiwgIndpdGgiCi0gICAg
XS5rZXlTZXQoKTsKLQotV2ViSW5zcGVjdG9yLlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuR2xv
YmFsT2JqZWN0VmFsdWVQcm9wZXJ0aWVzID0gewotICAgICJOYU4iOiAiamF2YXNjcmlwdC1uYW4i
LAotICAgICJ1bmRlZmluZWQiOiAiamF2YXNjcmlwdC11bmRlZiIsCi0gICAgIkluZmluaXR5Ijog
ImphdmFzY3JpcHQtaW5mIgotfTsKLQotV2ViSW5zcGVjdG9yLlNvdXJjZUphdmFTY3JpcHRUb2tl
bml6ZXIucHJvdG90eXBlID0gewotICAgIGNyZWF0ZUluaXRpYWxDb25kaXRpb246IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IGxleENvbmRpdGlvbjogdGhpcy5fbGV4Q29uZGl0
aW9ucy5OT0RJViB9OwotICAgIH0sCi0KLSAgICBuZXh0VG9rZW46IGZ1bmN0aW9uKGN1cnNvcikK
LSAgICB7Ci0gICAgICAgIHZhciBjdXJzb3JPbkVudGVyID0gY3Vyc29yOwotICAgICAgICB2YXIg
Z290b0Nhc2UgPSAxOwotICAgICAgICB2YXIgWVlNQVJLRVI7Ci0gICAgICAgIHdoaWxlICgxKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGdvdG9DYXNlKQotICAgICAgICAgICAgLy8gRm9sbG93aW5n
IGNvbW1lbnQgaXMgcmVwbGFjZWQgd2l0aCBnZW5lcmF0ZWQgc3RhdGUgbWFjaGluZS4KLSAgICAg
ICAgICAgIC8qIXJlMmMKLSAgICAgICAgICAgICAgICByZTJjOmRlZmluZTpZWUNUWVBFICA9ICJ2
YXIiOwotICAgICAgICAgICAgICAgIHJlMmM6ZGVmaW5lOllZQ1VSU09SID0gY3Vyc29yOwotICAg
ICAgICAgICAgICAgIHJlMmM6ZGVmaW5lOllZR0VUQ09ORElUSU9OID0gInRoaXMuZ2V0TGV4Q29u
ZGl0aW9uIjsKLSAgICAgICAgICAgICAgICByZTJjOmRlZmluZTpZWVNFVENPTkRJVElPTiA9ICJ0
aGlzLnNldExleENvbmRpdGlvbiI7Ci0gICAgICAgICAgICAgICAgcmUyYzpjb25kcHJlZml4ID0g
ImNhc2UgdGhpcy5jYXNlXyI7Ci0gICAgICAgICAgICAgICAgcmUyYzpjb25kZW51bXByZWZpeCA9
ICJ0aGlzLl9sZXhDb25kaXRpb25zLiI7Ci0gICAgICAgICAgICAgICAgcmUyYzp5eWZpbGw6ZW5h
YmxlID0gMDsKLSAgICAgICAgICAgICAgICByZTJjOmxhYmVscHJlZml4ID0gImNhc2UgIjsKLSAg
ICAgICAgICAgICAgICByZTJjOmluZGVudDp0b3AgPSAyOwotICAgICAgICAgICAgICAgIHJlMmM6
aW5kZW50OnN0cmluZyA9ICIgICAgIjsKLQotICAgICAgICAgICAgICAgIExpbmVDb21tZW50ID0g
Ii8vIiBbXlxyXG5dKjsKLSAgICAgICAgICAgICAgICBDb21tZW50Q29udGVudCA9IChbXipcclxu
XSB8ICgiKiIrW14vKl0pKSo7Ci0gICAgICAgICAgICAgICAgQ29tbWVudCA9ICIvKiIgQ29tbWVu
dENvbnRlbnQgIioiKyAiLyI7Ci0gICAgICAgICAgICAgICAgQ29tbWVudFN0YXJ0ID0gIi8qIiBD
b21tZW50Q29udGVudCBbXHJcbl07Ci0gICAgICAgICAgICAgICAgQ29tbWVudEVuZCA9IENvbW1l
bnRDb250ZW50ICIqIisgIi8iOwotCi0gICAgICAgICAgICAgICAgRGVjaW1hbERpZ2l0ID0gWzAt
OV07Ci0gICAgICAgICAgICAgICAgTm9uWmVyb0RpZ2l0ID0gWzEtOV07Ci0gICAgICAgICAgICAg
ICAgT2N0YWxEaWdpdCA9IFswLTddOwotICAgICAgICAgICAgICAgIEhleERpZ2l0ID0gWzAtOWEt
ZkEtRl07Ci0gICAgICAgICAgICAgICAgU2lnbmVkSW50ZWdlciA9ICgiKyJ8Ii0iKT8gRGVjaW1h
bERpZ2l0KzsKLSAgICAgICAgICAgICAgICBFeHBvbmVudFBhcnQgPSAoImUiIHwgIkUiKSBTaWdu
ZWRJbnRlZ2VyOwotICAgICAgICAgICAgICAgIERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCA9ICIwIiB8
IE5vblplcm9EaWdpdCBEZWNpbWFsRGlnaXQqOwotICAgICAgICAgICAgICAgIERlY2ltYWxMaXRl
cmFsID0gRGVjaW1hbEludGVnZXJMaXRlcmFsICIuIiBEZWNpbWFsRGlnaXQqIEV4cG9uZW50UGFy
dD8gfCAiLiIgRGVjaW1hbERpZ2l0KyBFeHBvbmVudFBhcnQ/IHwgRGVjaW1hbEludGVnZXJMaXRl
cmFsIEV4cG9uZW50UGFydD87Ci0gICAgICAgICAgICAgICAgSGV4SW50ZWdlckxpdGVyYWwgPSAi
MCIgKCJ4InwiWCIpIEhleERpZ2l0KzsKLSAgICAgICAgICAgICAgICBPY3RhbEludGVnZXJMaXRl
cmFsID0gIjAiIE9jdGFsRGlnaXQrOwotICAgICAgICAgICAgICAgIE51bWVyaWNMaXRlcmFsID0g
RGVjaW1hbExpdGVyYWwgfCBIZXhJbnRlZ2VyTGl0ZXJhbCB8IE9jdGFsSW50ZWdlckxpdGVyYWw7
Ci0KLSAgICAgICAgICAgICAgICBQdW5jdHVhdGlvbiA9IFtcIVwlXCZcKFwqXCtcLFwtXC5cOlw7
XDxcPVw+XD9cW1xdXF5ce1x8XH1cfl0gfCAiIT0iIHwgIiE9PSIgfCAiJT0iIHwgIiYmIiB8ICIm
PSIgfCAiKj0iIHwgIisrIiB8ICIrPSIgfCAiLS0iIHwgIi09IiB8ICI8PCIgfCAiPDw9IiAgfCAi
PD0iIHwgIj09IiB8ICI9PT0iIHwgIj49IiB8ICI+PiIgfCAiPj49IiB8ICI+Pj4iIHwgIj4+Pj0i
IHwgIl49IiB8ICJ8PSIgfCAifHwiOwotICAgICAgICAgICAgICAgIERpdmlzaW9uID0gIi8iIHwg
Ii89IjsKLSAgICAgICAgICAgICAgICBSaWdodFBhcmVuID0gIikiOwotCi0gICAgICAgICAgICAg
ICAgTGV0dGVyID0gW2EtekEtWlx4ODAtXHhGRl07Ci0gICAgICAgICAgICAgICAgVW5pY29kZUVz
Y2FwZVNlcXVlbmNlID0gIlxcdSIgSGV4RGlnaXQgSGV4RGlnaXQgSGV4RGlnaXQgSGV4RGlnaXQ7
Ci0KLSAgICAgICAgICAgICAgICBJZGVudGlmaWVyU3RhcnQgPSBMZXR0ZXIgfCAiXyIgfCAiJCIg
fCBVbmljb2RlRXNjYXBlU2VxdWVuY2U7Ci0gICAgICAgICAgICAgICAgSWRlbnRpZmllclBhcnQg
PSBJZGVudGlmaWVyU3RhcnQgfCBEZWNpbWFsRGlnaXQ7Ci0gICAgICAgICAgICAgICAgSWRlbnRp
ZmllciA9IElkZW50aWZpZXJTdGFydCBJZGVudGlmaWVyUGFydCAqOwotICAgICAgICAgICAgICAg
IFNwYWNlcyA9ICIgIis7Ci0KLSAgICAgICAgICAgICAgICBEb3VibGVTdHJpbmdDb250ZW50ID0g
KFteXHJcblwiXFxdIHwgVW5pY29kZUVzY2FwZVNlcXVlbmNlIHwgIlxcIiBbJyJcXGJmbnJ0dl0p
KjsKLSAgICAgICAgICAgICAgICBTaW5nbGVTdHJpbmdDb250ZW50ID0gKFteXHJcblwnXFxdIHwg
VW5pY29kZUVzY2FwZVNlcXVlbmNlIHwgIlxcIiBbJyJcXGJmbnJ0dl0pKjsKLSAgICAgICAgICAg
ICAgICBTdHJpbmdMaXRlcmFsID0gIlwiIiBEb3VibGVTdHJpbmdDb250ZW50ICJcIiIgfCAiJyIg
U2luZ2xlU3RyaW5nQ29udGVudCAiJyI7Ci0gICAgICAgICAgICAgICAgRG91YmxlU3RyaW5nU3Rh
cnQgPSAiXCIiIERvdWJsZVN0cmluZ0NvbnRlbnQgIlxcIiBbXHJcbl07Ci0gICAgICAgICAgICAg
ICAgRG91YmxlU3RyaW5nRW5kID0gRG91YmxlU3RyaW5nQ29udGVudCAiXCIiOwotICAgICAgICAg
ICAgICAgIFNpbmdsZVN0cmluZ1N0YXJ0ID0gIiciIFNpbmdsZVN0cmluZ0NvbnRlbnQgIlxcIiBb
XHJcbl07Ci0gICAgICAgICAgICAgICAgU2luZ2xlU3RyaW5nRW5kID0gU2luZ2xlU3RyaW5nQ29u
dGVudCAiJyI7Ci0KLSAgICAgICAgICAgICAgICBCYWNrc2xhc2hTZXF1ZW5jZSA9ICJcXCIgW15c
clxuXTsKLSAgICAgICAgICAgICAgICBSZWdleFNldCA9ICJbIiAoW15cclxuKlxcL10gfCBCYWNr
c2xhc2hTZXF1ZW5jZSkqICJdIjsKLSAgICAgICAgICAgICAgICBSZWdleEZpcnN0Q2hhciA9IFte
XHJcbipcXC9cW1xdXSB8IEJhY2tzbGFzaFNlcXVlbmNlIHwgUmVnZXhTZXQ7Ci0gICAgICAgICAg
ICAgICAgUmVnZXhDaGFyID0gW15cclxuXFwvXFtcXV0gfCBCYWNrc2xhc2hTZXF1ZW5jZSB8IFJl
Z2V4U2V0OwotICAgICAgICAgICAgICAgIFJlZ2V4Q29udGVudCA9IFJlZ2V4Q2hhcio7Ci0gICAg
ICAgICAgICAgICAgUmVnZXggPSAiLyIgUmVnZXhGaXJzdENoYXIgUmVnZXhDb250ZW50ICIvIiBb
aWdtXSo7Ci0gICAgICAgICAgICAgICAgUmVnZXhTdGFydCA9ICIvIiBSZWdleEZpcnN0Q2hhciBS
ZWdleENvbnRlbnQgIlxcIjsKLSAgICAgICAgICAgICAgICBSZWdleEVuZCA9IFJlZ2V4Q29udGVu
dCAiLyIgW2lnbV0qOwotCi0gICAgICAgICAgICAgICAgPERJVixOT0RJVj4gTGluZUNvbW1lbnQg
eyB0aGlzLnRva2VuVHlwZSA9ICJqYXZhc2NyaXB0LWNvbW1lbnQiOyByZXR1cm4gY3Vyc29yOyB9
Ci0gICAgICAgICAgICAgICAgPERJVixOT0RJVj4gQ29tbWVudCB7IHRoaXMudG9rZW5UeXBlID0g
ImphdmFzY3JpcHQtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8
RElWLE5PRElWPiBDb21tZW50U3RhcnQgPT4gQ09NTUVOVCB7IHRoaXMudG9rZW5UeXBlID0gImph
dmFzY3JpcHQtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8Q09N
TUVOVD4gQ29tbWVudENvbnRlbnQgPT4gQ09NTUVOVCB7IHRoaXMudG9rZW5UeXBlID0gImphdmFz
Y3JpcHQtY29tbWVudCI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8Q09NTUVO
VD4gQ29tbWVudEVuZCA9PiBOT0RJViB7IHRoaXMudG9rZW5UeXBlID0gImphdmFzY3JpcHQtY29t
bWVudCI7IHJldHVybiBjdXJzb3I7IH0KLQotICAgICAgICAgICAgICAgIDxESVYsTk9ESVY+IFNw
YWNlcyB7dGhpcy50b2tlblR5cGUgPSAid2hpdGVzcGFjZSI7IHJldHVybiBjdXJzb3I7IH0KLSAg
ICAgICAgICAgICAgICA8RElWLE5PRElWPiBTdHJpbmdMaXRlcmFsIHsgdGhpcy50b2tlblR5cGUg
PSAiamF2YXNjcmlwdC1zdHJpbmciOyByZXR1cm4gY3Vyc29yOyB9Ci0gICAgICAgICAgICAgICAg
PERJVixOT0RJVj4gRG91YmxlU3RyaW5nU3RhcnQgPT4gRFNUUklORyB7IHRoaXMudG9rZW5UeXBl
ID0gImphdmFzY3JpcHQtc3RyaW5nIjsgcmV0dXJuIGN1cnNvcjsgfQotICAgICAgICAgICAgICAg
IDxEU1RSSU5HPiBEb3VibGVTdHJpbmdDb250ZW50ID0+IERTVFJJTkcgeyB0aGlzLnRva2VuVHlw
ZSA9ICJqYXZhc2NyaXB0LXN0cmluZyI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAg
ICA8RFNUUklORz4gRG91YmxlU3RyaW5nRW5kID0+IE5PRElWIHsgdGhpcy50b2tlblR5cGUgPSAi
amF2YXNjcmlwdC1zdHJpbmciOyByZXR1cm4gY3Vyc29yOyB9Ci0gICAgICAgICAgICAgICAgPERJ
VixOT0RJVj4gU2luZ2xlU3RyaW5nU3RhcnQgPT4gU1NUUklORyB7IHRoaXMudG9rZW5UeXBlID0g
ImphdmFzY3JpcHQtc3RyaW5nIjsgcmV0dXJuIGN1cnNvcjsgfQotICAgICAgICAgICAgICAgIDxT
U1RSSU5HPiBTaW5nbGVTdHJpbmdDb250ZW50ID0+IFNTVFJJTkcgeyB0aGlzLnRva2VuVHlwZSA9
ICJqYXZhc2NyaXB0LXN0cmluZyI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8
U1NUUklORz4gU2luZ2xlU3RyaW5nRW5kID0+IE5PRElWIHsgdGhpcy50b2tlblR5cGUgPSAiamF2
YXNjcmlwdC1zdHJpbmciOyByZXR1cm4gY3Vyc29yOyB9Ci0KLSAgICAgICAgICAgICAgICA8Tk9E
SVY+IFJlZ2V4IHsgdGhpcy50b2tlblR5cGUgPSAiamF2YXNjcmlwdC1yZWdleHAiOyByZXR1cm4g
Y3Vyc29yOyB9Ci0gICAgICAgICAgICAgICAgPE5PRElWPiBSZWdleFN0YXJ0ID0+IFJFR0VYIHsg
dGhpcy50b2tlblR5cGUgPSAiamF2YXNjcmlwdC1yZWdleHAiOyByZXR1cm4gY3Vyc29yOyB9Ci0g
ICAgICAgICAgICAgICAgPFJFR0VYPiBSZWdleENvbnRlbnQgPT4gUkVHRVggeyB0aGlzLnRva2Vu
VHlwZSA9ICJqYXZhc2NyaXB0LXJlZ2V4cCI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAg
ICAgICA8UkVHRVg+IFJlZ2V4RW5kID0+IE5PRElWIHsgdGhpcy50b2tlblR5cGUgPSAiamF2YXNj
cmlwdC1yZWdleHAiOyByZXR1cm4gY3Vyc29yOyB9Ci0KLSAgICAgICAgICAgICAgICA8RElWLE5P
RElWPiBOdW1lcmljTGl0ZXJhbCA9PiBESVYgeyB0aGlzLnRva2VuVHlwZSA9ICJqYXZhc2NyaXB0
LW51bWJlciI7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICAgICA8RElWLE5PRElWPiBJ
ZGVudGlmaWVyID0+IERJVgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHRva2VuID0gdGhpcy5fbGluZS5zdWJzdHJpbmcoY3Vyc29yT25FbnRlciwgY3Vyc29yKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Tb3VyY2VKYXZhU2NyaXB0VG9r
ZW5pemVyLkdsb2JhbE9iamVjdFZhbHVlUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9IFdlYkluc3BlY3Rvci5T
b3VyY2VKYXZhU2NyaXB0VG9rZW5pemVyLkdsb2JhbE9iamVjdFZhbHVlUHJvcGVydGllc1t0b2tl
bl07Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFdlYkluc3BlY3Rvci5Tb3VyY2VKYXZh
U2NyaXB0VG9rZW5pemVyLktleXdvcmRzW3Rva2VuXSA9PT0gdHJ1ZSAmJiB0b2tlbiAhPT0gIl9f
cHJvdG9fXyIpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJqYXZh
c2NyaXB0LWtleXdvcmQiOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJqYXZhc2NyaXB0LWlkZW50IjsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgPERJVixOT0RJVj4gUmlnaHRQYXJlbiA9PiBESVYgeyB0aGlzLnRva2VuVHlwZSA9ICJi
cmFjZS1lbmQiOyByZXR1cm4gY3Vyc29yOyB9Ci0gICAgICAgICAgICAgICAgPERJVixOT0RJVj4g
UHVuY3R1YXRpb24gPT4gTk9ESVYKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciB0b2tlbiA9IHRoaXMuX2xpbmUuY2hhckF0KGN1cnNvck9uRW50ZXIpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodG9rZW4gPT09ICJ7IikKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMudG9rZW5UeXBlID0gImJsb2NrLXN0YXJ0IjsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAodG9rZW4gPT09ICJ9IikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5U
eXBlID0gImJsb2NrLWVuZCI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09
PSAiKCIpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuVHlwZSA9ICJicmFjZS1z
dGFydCI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgdGhpcy50b2tlblR5cGUgPSBudWxsOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICA8RElWPiBEaXZpc2lvbiA9PiBOT0RJViB7IHRoaXMudG9rZW5UeXBlID0g
bnVsbDsgcmV0dXJuIGN1cnNvcjsgfQotICAgICAgICAgICAgICAgIDwqPiBbXl0geyB0aGlzLnRv
a2VuVHlwZSA9IG51bGw7IHJldHVybiBjdXJzb3I7IH0KLSAgICAgICAgICAgICovCi0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVy
LnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VNYXAuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZU1hcC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE4MjI1ZC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBJbXBsZW1lbnRzIFNvdXJjZSBN
YXAgVjMgbW9kZWwuIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxl
ci93aWtpL1NvdXJjZU1hcHMKLSAqIGZvciBmb3JtYXQgZGVzY3JpcHRpb24uCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VNYXBwaW5nVVJMCi0gKiBAcGFyYW0ge1Nv
dXJjZU1hcFYzfSBwYXlsb2FkCi0gKi8KLVdlYkluc3BlY3Rvci5Tb3VyY2VNYXAgPSBmdW5jdGlv
bihzb3VyY2VNYXBwaW5nVVJMLCBwYXlsb2FkKQotewotICAgIGlmICghV2ViSW5zcGVjdG9yLlNv
dXJjZU1hcC5wcm90b3R5cGUuX2Jhc2U2NE1hcCkgewotICAgICAgICBjb25zdCBiYXNlNjREaWdp
dHMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5
ejAxMjM0NTY3ODkrLyI7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAucHJvdG90eXBl
Ll9iYXNlNjRNYXAgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlNjREaWdp
dHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3Rv
dHlwZS5fYmFzZTY0TWFwW2Jhc2U2NERpZ2l0cy5jaGFyQXQoaSldID0gaTsKLSAgICB9Ci0KLSAg
ICB0aGlzLl9zb3VyY2VNYXBwaW5nVVJMID0gc291cmNlTWFwcGluZ1VSTDsKLSAgICB0aGlzLl9y
ZXZlcnNlTWFwcGluZ3NCeVNvdXJjZVVSTCA9IHt9OwotICAgIHRoaXMuX21hcHBpbmdzID0gW107
Ci0gICAgdGhpcy5fc291cmNlcyA9IHt9OwotICAgIHRoaXMuX3NvdXJjZUNvbnRlbnRCeVVSTCA9
IHt9OwotICAgIHRoaXMuX3BhcnNlTWFwcGluZ1BheWxvYWQocGF5bG9hZCk7Ci19Ci0KLS8qKgot
ICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZU1hcFVSTAotICogQHBhcmFtIHtzdHJpbmd9IGNvbXBp
bGVkVVJMCi0gKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwfQotICovCi1XZWJJbnNw
ZWN0b3IuU291cmNlTWFwLmxvYWQgPSBmdW5jdGlvbihzb3VyY2VNYXBVUkwsIGNvbXBpbGVkVVJM
KQotewotICAgIHRyeSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHNlbmRSZXF1ZXN0IGFzeW5j
LgotICAgICAgICB2YXIgcmVzcG9uc2UgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZFJlc291
cmNlU3luY2hyb25vdXNseShzb3VyY2VNYXBVUkwpOwotICAgICAgICBpZiAoIXJlc3BvbnNlKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGlmIChyZXNwb25zZS5zbGljZSgwLCAz
KSA9PT0gIildfSIpCi0gICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLnN1YnN0cmluZyhy
ZXNwb25zZS5pbmRleE9mKCdcbicpKTsKLSAgICAgICAgdmFyIHBheWxvYWQgPSAvKiogQHR5cGUg
e1NvdXJjZU1hcFYzfSAqLyAoSlNPTi5wYXJzZShyZXNwb25zZSkpOwotICAgICAgICB2YXIgYmFz
ZVVSTCA9IHNvdXJjZU1hcFVSTC5zdGFydHNXaXRoKCJkYXRhOiIpID8gY29tcGlsZWRVUkwgOiBz
b3VyY2VNYXBVUkw7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcChi
YXNlVVJMLCBwYXlsb2FkKTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgY29uc29sZS5lcnJv
cihlLm1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5Tb3VyY2VNYXAucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0Fy
cmF5LjxzdHJpbmc+fQotICAgICAqLwotICAgIHNvdXJjZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9zb3VyY2VzKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVVSTAotICAgICAqIEByZXR1cm4ge3N0
cmluZ3x1bmRlZmluZWR9Ci0gICAgICovCi0gICAgc291cmNlQ29udGVudDogZnVuY3Rpb24oc291
cmNlVVJMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvbnRlbnRCeVVSTFtz
b3VyY2VVUkxdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1NvdXJjZU1hcFYz
fSBtYXBwaW5nUGF5bG9hZAotICAgICAqLwotICAgIF9wYXJzZU1hcHBpbmdQYXlsb2FkOiBmdW5j
dGlvbihtYXBwaW5nUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIGlmIChtYXBwaW5nUGF5bG9hZC5z
ZWN0aW9ucykKLSAgICAgICAgICAgIHRoaXMuX3BhcnNlU2VjdGlvbnMobWFwcGluZ1BheWxvYWQu
c2VjdGlvbnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9wYXJzZU1hcChtYXBw
aW5nUGF5bG9hZCwgMCwgMCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJy
YXkuPFNvdXJjZU1hcFYzLlNlY3Rpb24+fSBzZWN0aW9ucwotICAgICAqLwotICAgIF9wYXJzZVNl
Y3Rpb25zOiBmdW5jdGlvbihzZWN0aW9ucykKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc2VjdGlvbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzZWN0aW9uID0g
c2VjdGlvbnNbaV07Ci0gICAgICAgICAgICB0aGlzLl9wYXJzZU1hcChzZWN0aW9uLm1hcCwgc2Vj
dGlvbi5vZmZzZXQubGluZSwgc2VjdGlvbi5vZmZzZXQuY29sdW1uKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlciBpbiBjb21w
aWxlZCByZXNvdXJjZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIgaW4gY29t
cGlsZWQgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuIHs/QXJyYXl9Ci0gICAgICovCi0gICAgZmlu
ZEVudHJ5OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCi0gICAgewotICAgICAg
ICB2YXIgZmlyc3QgPSAwOwotICAgICAgICB2YXIgY291bnQgPSB0aGlzLl9tYXBwaW5ncy5sZW5n
dGg7Ci0gICAgICAgIHdoaWxlIChjb3VudCA+IDEpIHsKLSAgICAgICAgICB2YXIgc3RlcCA9IGNv
dW50ID4+IDE7Ci0gICAgICAgICAgdmFyIG1pZGRsZSA9IGZpcnN0ICsgc3RlcDsKLSAgICAgICAg
ICB2YXIgbWFwcGluZyA9IHRoaXMuX21hcHBpbmdzW21pZGRsZV07Ci0gICAgICAgICAgaWYgKGxp
bmVOdW1iZXIgPCBtYXBwaW5nWzBdIHx8IChsaW5lTnVtYmVyID09PSBtYXBwaW5nWzBdICYmIGNv
bHVtbk51bWJlciA8IG1hcHBpbmdbMV0pKQotICAgICAgICAgICAgICBjb3VudCA9IHN0ZXA7Ci0g
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlOwotICAgICAgICAg
ICAgICBjb3VudCAtPSBzdGVwOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIg
ZW50cnkgPSB0aGlzLl9tYXBwaW5nc1tmaXJzdF07Ci0gICAgICAgIGlmICghZmlyc3QgJiYgZW50
cnkgJiYgKGxpbmVOdW1iZXIgPCBlbnRyeVswXSB8fCAobGluZU51bWJlciA9PT0gZW50cnlbMF0g
JiYgY29sdW1uTnVtYmVyIDwgZW50cnlbMV0pKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBzb3VyY2VVUkwgb2YgdGhlIG9yaWdpbmF0aW5nIHJlc291cmNlCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIgaW4gdGhlIG9yaWdpbmF0aW5nIHJlc291cmNlCi0gICAg
ICogQHJldHVybiB7QXJyYXl9Ci0gICAgICovCi0gICAgZmluZEVudHJ5UmV2ZXJzZWQ6IGZ1bmN0
aW9uKHNvdXJjZVVSTCwgbGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBtYXBwaW5ncyA9
IHRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJMW3NvdXJjZVVSTF07Ci0gICAgICAgIGZv
ciAoIDsgbGluZU51bWJlciA8IG1hcHBpbmdzLmxlbmd0aDsgKytsaW5lTnVtYmVyKSB7Ci0gICAg
ICAgICAgICB2YXIgbWFwcGluZyA9IG1hcHBpbmdzW2xpbmVOdW1iZXJdOwotICAgICAgICAgICAg
aWYgKG1hcHBpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmc7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuX21hcHBpbmdzWzBdOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICBfcGFyc2VNYXA6IGZ1bmN0aW9uKG1hcCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUluZGV4ID0g
MDsKLSAgICAgICAgdmFyIHNvdXJjZUxpbmVOdW1iZXIgPSAwOwotICAgICAgICB2YXIgc291cmNl
Q29sdW1uTnVtYmVyID0gMDsKLSAgICAgICAgdmFyIG5hbWVJbmRleCA9IDA7Ci0KLSAgICAgICAg
dmFyIHNvdXJjZXMgPSBbXTsKLSAgICAgICAgdmFyIG9yaWdpbmFsVG9DYW5vbmljYWxVUkxNYXAg
PSB7fTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAuc291cmNlcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlVVJMID0gbWFwLnNvdXJjZXNbaV07
Ci0gICAgICAgICAgICB2YXIgaHJlZiA9IChtYXAuc291cmNlUm9vdCA/IG1hcC5zb3VyY2VSb290
ICsgIi8iIDogIiIpICsgb3JpZ2luYWxTb3VyY2VVUkw7Ci0gICAgICAgICAgICB2YXIgdXJsID0g
V2ViSW5zcGVjdG9yLlBhcnNlZFVSTC5jb21wbGV0ZVVSTCh0aGlzLl9zb3VyY2VNYXBwaW5nVVJM
LCBocmVmKSB8fCBocmVmOwotICAgICAgICAgICAgb3JpZ2luYWxUb0Nhbm9uaWNhbFVSTE1hcFtv
cmlnaW5hbFNvdXJjZVVSTF0gPSB1cmw7Ci0gICAgICAgICAgICBzb3VyY2VzLnB1c2godXJsKTsK
LSAgICAgICAgICAgIHRoaXMuX3NvdXJjZXNbdXJsXSA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlm
IChtYXAuc291cmNlc0NvbnRlbnQgJiYgbWFwLnNvdXJjZXNDb250ZW50W2ldKQotICAgICAgICAg
ICAgICAgIHRoaXMuX3NvdXJjZUNvbnRlbnRCeVVSTFt1cmxdID0gbWFwLnNvdXJjZXNDb250ZW50
W2ldOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHN0cmluZ0NoYXJJdGVyYXRvciA9IG5ldyBX
ZWJJbnNwZWN0b3IuU291cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvcihtYXAubWFwcGluZ3MpOwot
ICAgICAgICB2YXIgc291cmNlVVJMID0gc291cmNlc1tzb3VyY2VJbmRleF07Ci0KLSAgICAgICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmdDaGFySXRlcmF0b3IucGVlaygp
ID09PSAiLCIpCi0gICAgICAgICAgICAgICAgc3RyaW5nQ2hhckl0ZXJhdG9yLm5leHQoKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHdoaWxlIChzdHJpbmdDaGFySXRlcmF0
b3IucGVlaygpID09PSAiOyIpIHsKLSAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciArPSAx
OwotICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIgPSAwOwotICAgICAgICAgICAgICAg
ICAgICBzdHJpbmdDaGFySXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoIXN0cmluZ0NoYXJJdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb2x1bW5OdW1i
ZXIgKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmluZ0NoYXJJdGVyYXRvcik7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5faXNTZXBhcmF0b3Ioc3RyaW5nQ2hhckl0ZXJhdG9yLnBlZWsoKSkpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9tYXBwaW5ncy5wdXNoKFtsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXJd
KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdmFyIHNvdXJjZUluZGV4RGVsdGEgPSB0aGlzLl9kZWNvZGVWTFEoc3RyaW5nQ2hhckl0ZXJh
dG9yKTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VJbmRleERlbHRhKSB7Ci0gICAgICAgICAgICAg
ICAgc291cmNlSW5kZXggKz0gc291cmNlSW5kZXhEZWx0YTsKLSAgICAgICAgICAgICAgICBzb3Vy
Y2VVUkwgPSBzb3VyY2VzW3NvdXJjZUluZGV4XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHNvdXJjZUxpbmVOdW1iZXIgKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmluZ0NoYXJJdGVyYXRvcik7
Ci0gICAgICAgICAgICBzb3VyY2VDb2x1bW5OdW1iZXIgKz0gdGhpcy5fZGVjb2RlVkxRKHN0cmlu
Z0NoYXJJdGVyYXRvcik7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU2VwYXJhdG9yKHN0cmlu
Z0NoYXJJdGVyYXRvci5wZWVrKCkpKQotICAgICAgICAgICAgICAgIG5hbWVJbmRleCArPSB0aGlz
Ll9kZWNvZGVWTFEoc3RyaW5nQ2hhckl0ZXJhdG9yKTsKLQotICAgICAgICAgICAgdGhpcy5fbWFw
cGluZ3MucHVzaChbbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUxp
bmVOdW1iZXIsIHNvdXJjZUNvbHVtbk51bWJlcl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYXBwaW5ncy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9tYXBwaW5nc1tpXTsKLSAgICAgICAgICAgIHZhciB1cmwg
PSBtYXBwaW5nWzJdOwotICAgICAgICAgICAgaWYgKCF1cmwpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX3JldmVyc2VNYXBwaW5nc0J5U291cmNlVVJM
W3VybF0pCi0gICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZU1hcHBpbmdzQnlTb3VyY2VVUkxb
dXJsXSA9IFtdOwotICAgICAgICAgICAgdmFyIHJldmVyc2VNYXBwaW5ncyA9IHRoaXMuX3JldmVy
c2VNYXBwaW5nc0J5U291cmNlVVJMW3VybF07Ci0gICAgICAgICAgICB2YXIgc291cmNlTGluZSA9
IG1hcHBpbmdbM107Ci0gICAgICAgICAgICBpZiAoIXJldmVyc2VNYXBwaW5nc1tzb3VyY2VMaW5l
XSkKLSAgICAgICAgICAgICAgICByZXZlcnNlTWFwcGluZ3Nbc291cmNlTGluZV0gPSBbbWFwcGlu
Z1swXSwgbWFwcGluZ1sxXV07Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IGNoYXIKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwot
ICAgIF9pc1NlcGFyYXRvcjogZnVuY3Rpb24oY2hhcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
aGFyID09PSAiLCIgfHwgY2hhciA9PT0gIjsiOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXAuU3RyaW5nQ2hhckl0ZXJhdG9yfSBzdHJpbmdD
aGFySXRlcmF0b3IKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgX2RlY29k
ZVZMUTogZnVuY3Rpb24oc3RyaW5nQ2hhckl0ZXJhdG9yKQotICAgIHsKLSAgICAgICAgLy8gUmVh
ZCB1bnNpZ25lZCB2YWx1ZS4KLSAgICAgICAgdmFyIHJlc3VsdCA9IDA7Ci0gICAgICAgIHZhciBz
aGlmdCA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHZhciBkaWdpdCA9IHRoaXMuX2Jh
c2U2NE1hcFtzdHJpbmdDaGFySXRlcmF0b3IubmV4dCgpXTsKLSAgICAgICAgICAgIHJlc3VsdCAr
PSAoZGlnaXQgJiB0aGlzLl9WTFFfQkFTRV9NQVNLKSA8PCBzaGlmdDsKLSAgICAgICAgICAgIHNo
aWZ0ICs9IHRoaXMuX1ZMUV9CQVNFX1NISUZUOwotICAgICAgICB9IHdoaWxlIChkaWdpdCAmIHRo
aXMuX1ZMUV9DT05USU5VQVRJT05fTUFTSyk7Ci0KLSAgICAgICAgLy8gRml4IHRoZSBzaWduLgot
ICAgICAgICB2YXIgbmVnYXRpdmUgPSByZXN1bHQgJiAxOwotICAgICAgICByZXN1bHQgPj49IDE7
Ci0gICAgICAgIHJldHVybiBuZWdhdGl2ZSA/IC1yZXN1bHQgOiByZXN1bHQ7Ci0gICAgfSwKLQot
ICAgIF9WTFFfQkFTRV9TSElGVDogNSwKLSAgICBfVkxRX0JBU0VfTUFTSzogKDEgPDwgNSkgLSAx
LAotICAgIF9WTFFfQ09OVElOVUFUSU9OX01BU0s6IDEgPDwgNQotfQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZwotICovCi1XZWJJbnNwZWN0b3IuU291
cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvciA9IGZ1bmN0aW9uKHN0cmluZykKLXsKLSAgICB0aGlz
Ll9zdHJpbmcgPSBzdHJpbmc7Ci0gICAgdGhpcy5fcG9zaXRpb24gPSAwOwotfQotCi1XZWJJbnNw
ZWN0b3IuU291cmNlTWFwLlN0cmluZ0NoYXJJdGVyYXRvci5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIG5leHQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX3Bvc2l0aW9u
KyspOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgcGVlazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmlu
Zy5jaGFyQXQodGhpcy5fcG9zaXRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGhhc05leHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiA8IHRoaXMuX3N0cmluZy5sZW5ndGg7Ci0gICAg
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VN
YXBwaW5nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFhZjlmLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwcGluZy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwot
V2ViSW5zcGVjdG9yLlNvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5Tb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5SYXdMb2NhdGlvbn0gcmF3TG9jYXRpb24KLSAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KLSAgICAgKi8KLSAgICByYXdMb2NhdGlvblRvVUlMb2Nh
dGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pIHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uTnVtYmVy
Ci0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJhd0xvY2F0aW9ufQotICAgICAqLwotICAg
IHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcikgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVh
bn0KLSAgICAgKi8KLSAgICBpc0lkZW50aXR5OiBmdW5jdGlvbigpIHsgfQotfQotCi0vKioKLSAq
IEBpbnRlcmZhY2UKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwcGluZ30KLSAq
LwotV2ViSW5zcGVjdG9yLlNjcmlwdFNvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbigpCi17Ci19Ci0K
LVdlYkluc3BlY3Rvci5TY3JpcHRTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAotICAgICAqLwotICAg
IGFkZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KSB7IH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZVRva2VuaXplci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlVG9rZW5pemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmMzZGIyLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVG9r
ZW5pemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBi
eSByZTJjIDAuMTMuNSBvbiBUdWUgSmFuIDI2IDAxOjE2OjMzIDIwMTAgKi8KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyID0gZnVuY3Rpb24oKQot
ewotICAgIC8qKiBAdHlwZSB7P3N0cmluZ30gKi8KLSAgICB0aGlzLnRva2VuVHlwZSA9IG51bGw7
Ci19Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIucHJvdG90eXBlID0gewotICAgIHNl
dCBsaW5lKGxpbmUpIHsKLSAgICAgICAgdGhpcy5fbGluZSA9IGxpbmU7Ci0gICAgfSwKLQotICAg
IHNldCBjb25kaXRpb24oY29uZGl0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9u
ID0gY29uZGl0aW9uOwotICAgIH0sCi0KLSAgICBnZXQgY29uZGl0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9jb25kaXRpb247Ci0gICAgfSwKLQotICAgIGdldExleENvbmRpdGlv
bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uLmxleENv
bmRpdGlvbjsKLSAgICB9LAotCi0gICAgc2V0TGV4Q29uZGl0aW9uOiBmdW5jdGlvbihsZXhDb25k
aXRpb24pCi0gICAgewotICAgICAgICB0aGlzLmNvbmRpdGlvbi5sZXhDb25kaXRpb24gPSBsZXhD
b25kaXRpb247Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJz
b3IKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgX2NoYXJBdDogZnVuY3Rp
b24oY3Vyc29yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGN1cnNvciA8IHRoaXMuX2xpbmUubGVu
Z3RoID8gdGhpcy5fbGluZS5jaGFyQXQoY3Vyc29yKSA6ICJcbiI7Ci0gICAgfSwKLQotICAgIGNy
ZWF0ZUluaXRpYWxDb25kaXRpb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJzb3IKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9
Ci0gICAgICovCi0gICAgbmV4dFRva2VuOiBmdW5jdGlvbihjdXJzb3IpCi0gICAgewotICAgIH0K
LX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLlNvdXJjZVRva2Vu
aXplci5SZWdpc3RyeSA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuX3Rva2VuaXplcnMgPSB7fTsK
LSAgICB0aGlzLl90b2tlbml6ZXJDb25zdHJ1Y3RvcnMgPSB7Ci0gICAgICAgICJ0ZXh0L2NzcyI6
ICJTb3VyY2VDU1NUb2tlbml6ZXIiLAotICAgICAgICAidGV4dC9odG1sIjogIlNvdXJjZUhUTUxU
b2tlbml6ZXIiLAotICAgICAgICAidGV4dC9qYXZhc2NyaXB0IjogIlNvdXJjZUphdmFTY3JpcHRU
b2tlbml6ZXIiLAotICAgICAgICAidGV4dC94LXNjc3MiOiAiU291cmNlQ1NTVG9rZW5pemVyIgot
ICAgIH07Ci19Ci0KLS8qKgotICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXpl
ci5SZWdpc3RyeX0KLSAqLwotV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5SZWdpc3RyeS5n
ZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5Tb3VyY2VU
b2tlbml6ZXIuUmVnaXN0cnkuX2luc3RhbmNlKQotICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNl
VG9rZW5pemVyLlJlZ2lzdHJ5Ll9pbnN0YW5jZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlVG9r
ZW5pemVyLlJlZ2lzdHJ5KCk7Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6
ZXIuUmVnaXN0cnkuX2luc3RhbmNlOwotfQotCi1XZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVy
LlJlZ2lzdHJ5LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
bWltZVR5cGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyfQot
ICAgICAqLwotICAgIGdldFRva2VuaXplcjogZnVuY3Rpb24obWltZVR5cGUpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMuX3Rva2VuaXplckNvbnN0cnVjdG9yc1ttaW1lVHlwZV0pCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIHRva2VuaXplckNsYXNzID0gdGhpcy5fdG9r
ZW5pemVyQ29uc3RydWN0b3JzW21pbWVUeXBlXTsKLSAgICAgICAgdmFyIHRva2VuaXplciA9IHRo
aXMuX3Rva2VuaXplcnNbdG9rZW5pemVyQ2xhc3NdOwotICAgICAgICBpZiAoIXRva2VuaXplcikg
ewotICAgICAgICAgICAgdG9rZW5pemVyID0gbmV3IFdlYkluc3BlY3Rvclt0b2tlbml6ZXJDbGFz
c10oKTsKLSAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplcnNbdG9rZW5pemVyQ2xhc3NdID0gdG9r
ZW5pemVyOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b2tlbml6ZXI7Ci0gICAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TcGVjdHJ1bS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3BlY3RydW0uanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMzQ5NjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TcGVjdHJ1bS5qcworKysgL2Rldi9udWxsCkBAIC0x
LDUwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEJyaWFuIEdyaW5zdGVhZCBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2Vi
SW5zcGVjdG9yLlZpZXd9Ci0gKi8KLVdlYkluc3BlY3Rvci5TcGVjdHJ1bSA9IGZ1bmN0aW9uKCkK
LXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMucmVnaXN0ZXJS
ZXF1aXJlZENTUygic3BlY3RydW0uY3NzIik7Ci0KLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1l
ID0gInNwZWN0cnVtLWNvbnRhaW5lciI7Ci0gICAgdGhpcy5lbGVtZW50LnRhYkluZGV4ID0gMDsK
LQotICAgIHZhciB0b3BFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAi
c3BlY3RydW0tdG9wIik7Ci0gICAgdG9wRWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInNwZWN0
cnVtLWZpbGwiKTsKLQotICAgIHZhciB0b3BJbm5lckVsZW1lbnQgPSB0b3BFbGVtZW50LmNyZWF0
ZUNoaWxkKCJkaXYiLCAic3BlY3RydW0tdG9wLWlubmVyIGZpbGwiKTsKLSAgICB0aGlzLl9kcmFn
Z2VyRWxlbWVudCA9IHRvcElubmVyRWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInNwZWN0cnVt
LWNvbG9yIik7Ci0gICAgdGhpcy5fZHJhZ0hlbHBlckVsZW1lbnQgPSB0aGlzLl9kcmFnZ2VyRWxl
bWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInNwZWN0cnVtLXNhdCBmaWxsIikuY3JlYXRlQ2hpbGQo
ImRpdiIsICJzcGVjdHJ1bS12YWwgZmlsbCIpLmNyZWF0ZUNoaWxkKCJkaXYiLCAic3BlY3RydW0t
ZHJhZ2dlciIpOwotCi0gICAgdGhpcy5fc2xpZGVyRWxlbWVudCA9IHRvcElubmVyRWxlbWVudC5j
cmVhdGVDaGlsZCgiZGl2IiwgInNwZWN0cnVtLWh1ZSIpOwotICAgIHRoaXMuc2xpZGVIZWxwZXIg
PSB0aGlzLl9zbGlkZXJFbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAic3BlY3RydW0tc2xpZGVy
Iik7Ci0KLSAgICB2YXIgcmFuZ2VDb250YWluZXIgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQo
ImRpdiIsICJzcGVjdHJ1bS1yYW5nZS1jb250YWluZXIiKTsKLSAgICB2YXIgYWxwaGFMYWJlbCA9
IHJhbmdlQ29udGFpbmVyLmNyZWF0ZUNoaWxkKCJsYWJlbCIpOwotICAgIGFscGhhTGFiZWwudGV4
dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlx1MDNCMToiKTsKLQotICAgIHRoaXMu
X2FscGhhRWxlbWVudCA9IHJhbmdlQ29udGFpbmVyLmNyZWF0ZUNoaWxkKCJpbnB1dCIsICJzcGVj
dHJ1bS1yYW5nZSIpOwotICAgIHRoaXMuX2FscGhhRWxlbWVudC5zZXRBdHRyaWJ1dGUoInR5cGUi
LCAicmFuZ2UiKTsKLSAgICB0aGlzLl9hbHBoYUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtaW4iLCAi
MCIpOwotICAgIHRoaXMuX2FscGhhRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1heCIsICIxMDAiKTsK
LSAgICB0aGlzLl9hbHBoYUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgYWxwaGFE
cmFnLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHZhciBzd2F0Y2hFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIHN3YXRjaEVsZW1lbnQuY2xhc3NOYW1lID0g
InN3YXRjaCI7Ci0gICAgdGhpcy5fc3dhdGNoSW5uZXJFbGVtZW50ID0gc3dhdGNoRWxlbWVudC5j
cmVhdGVDaGlsZCgic3BhbiIsICJzd2F0Y2gtaW5uZXIiKTsKLQotICAgIHZhciBkaXNwbGF5Q29u
dGFpbmVyID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiKTsKLSAgICBkaXNwbGF5Q29u
dGFpbmVyLmFwcGVuZENoaWxkKHN3YXRjaEVsZW1lbnQpOwotICAgIHRoaXMuX2Rpc3BsYXlFbGVt
ZW50ID0gZGlzcGxheUNvbnRhaW5lci5jcmVhdGVDaGlsZCgic3BhbiIsICJzb3VyY2UtY29kZSBz
cGVjdHJ1bS1kaXNwbGF5LXZhbHVlIik7Ci0KLSAgICBXZWJJbnNwZWN0b3IuU3BlY3RydW0uZHJh
Z2dhYmxlKHRoaXMuX3NsaWRlckVsZW1lbnQsIGh1ZURyYWcuYmluZCh0aGlzKSk7Ci0gICAgV2Vi
SW5zcGVjdG9yLlNwZWN0cnVtLmRyYWdnYWJsZSh0aGlzLl9kcmFnZ2VyRWxlbWVudCwgY29sb3JE
cmFnLmJpbmQodGhpcyksIGNvbG9yRHJhZ1N0YXJ0LmJpbmQodGhpcykpOwotCi0gICAgZnVuY3Rp
b24gaHVlRHJhZyhlbGVtZW50LCBkcmFnWCwgZHJhZ1kpCi0gICAgewotICAgICAgICB0aGlzLmhz
dlswXSA9IChkcmFnWSAvIHRoaXMuc2xpZGVIZWlnaHQpOwotCi0gICAgICAgIHRoaXMuX29uY2hh
bmdlKCk7Ci0gICAgfQotCi0gICAgdmFyIGluaXRpYWxIZWxwZXJPZmZzZXQ7Ci0KLSAgICBmdW5j
dGlvbiBjb2xvckRyYWdTdGFydChlbGVtZW50LCBkcmFnWCwgZHJhZ1kpCi0gICAgewotICAgICAg
ICBpbml0aWFsSGVscGVyT2Zmc2V0ID0geyB4OiB0aGlzLl9kcmFnSGVscGVyRWxlbWVudC5vZmZz
ZXRMZWZ0LCB5OiB0aGlzLl9kcmFnSGVscGVyRWxlbWVudC5vZmZzZXRUb3AgfTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBjb2xvckRyYWcoZWxlbWVudCwgZHJhZ1gsIGRyYWdZLCBldmVudCkKLSAg
ICB7Ci0gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkgewotICAgICAgICAgICAgaWYgKE1hdGgu
YWJzKGRyYWdYIC0gaW5pdGlhbEhlbHBlck9mZnNldC54KSA+PSBNYXRoLmFicyhkcmFnWSAtIGlu
aXRpYWxIZWxwZXJPZmZzZXQueSkpCi0gICAgICAgICAgICAgICAgZHJhZ1kgPSBpbml0aWFsSGVs
cGVyT2Zmc2V0Lnk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZHJhZ1ggPSBp
bml0aWFsSGVscGVyT2Zmc2V0Lng7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmhzdlsxXSA9
IGRyYWdYIC8gdGhpcy5kcmFnV2lkdGg7Ci0gICAgICAgIHRoaXMuaHN2WzJdID0gKHRoaXMuZHJh
Z0hlaWdodCAtIGRyYWdZKSAvIHRoaXMuZHJhZ0hlaWdodDsKLQotICAgICAgICB0aGlzLl9vbmNo
YW5nZSgpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFscGhhRHJhZygpCi0gICAgewotICAgICAg
ICB0aGlzLmhzdlszXSA9IHRoaXMuX2FscGhhRWxlbWVudC52YWx1ZSAvIDEwMDsKLQotICAgICAg
ICB0aGlzLl9vbmNoYW5nZSgpOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5TcGVjdHJ1bS5F
dmVudHMgPSB7Ci0gICAgQ29sb3JDaGFuZ2VkOiAiQ29sb3JDaGFuZ2VkIgotfTsKLQotV2ViSW5z
cGVjdG9yLlNwZWN0cnVtLmhzdmFUb1JHQkEgPSBmdW5jdGlvbihoLCBzLCB2LCBhKQotewotICAg
IHZhciByLCBnLCBiOwotCi0gICAgdmFyIGkgPSBNYXRoLmZsb29yKGggKiA2KTsKLSAgICB2YXIg
ZiA9IGggKiA2IC0gaTsKLSAgICB2YXIgcCA9IHYgKiAoMSAtIHMpOwotICAgIHZhciBxID0gdiAq
ICgxIC0gZiAqIHMpOwotICAgIHZhciB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpOwotCi0gICAg
c3dpdGNoKGkgJSA2KSB7Ci0gICAgY2FzZSAwOgotICAgICAgICByID0gdiwgZyA9IHQsIGIgPSBw
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIHIgPSBxLCBnID0gdiwgYiA9
IHA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgciA9IHAsIGcgPSB2LCBi
ID0gdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICByID0gcCwgZyA9IHEs
IGIgPSB2OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIHIgPSB0LCBnID0g
cCwgYiA9IHY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNToKLSAgICAgICAgciA9IHYsIGcg
PSBwLCBiID0gcTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFtNYXRoLnJv
dW5kKHIgKiAyNTUpLCBNYXRoLnJvdW5kKGcgKiAyNTUpLCBNYXRoLnJvdW5kKGIgKiAyNTUpLCBh
XTsKLX07Ci0KLVdlYkluc3BlY3Rvci5TcGVjdHJ1bS5yZ2JhVG9IU1ZBID0gZnVuY3Rpb24ociwg
ZywgYiwgYSkKLXsKLSAgICByID0gciAvIDI1NTsKLSAgICBnID0gZyAvIDI1NTsKLSAgICBiID0g
YiAvIDI1NTsKLQotICAgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTsKLSAgICB2YXIgbWlu
ID0gTWF0aC5taW4ociwgZywgYik7Ci0gICAgdmFyIGg7Ci0gICAgdmFyIHM7Ci0gICAgdmFyIHYg
PSBtYXg7Ci0KLSAgICB2YXIgZCA9IG1heCAtIG1pbjsKLSAgICBzID0gbWF4ID8gZCAvIG1heCA6
IDA7Ci0KLSAgICBpZihtYXggPT09IG1pbikgewotICAgICAgICAvLyBBY2hyb21hdGljLgotICAg
ICAgICBoID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2gobWF4KSB7Ci0gICAgICAg
IGNhc2UgcjoKLSAgICAgICAgICAgIGggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGc6Ci0gICAgICAgICAgICBoID0gKGIg
LSByKSAvIGQgKyAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgYjoKLSAgICAg
ICAgICAgIGggPSAociAtIGcpIC8gZCArIDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBoIC89IDY7Ci0gICAgfQotICAgIHJldHVybiBbaCwgcywgdiwgYV07Ci19Owot
Ci0vL0ZJWE1FOiBtaWdyYXRlIHRvIFdlYkluc3BlY3Rvci5pbnN0YWxsRHJhZ0hhbmRsZQotLyoq
Ci0gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25tb3ZlCi0gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25z
dGFydAotICogQHBhcmFtIHtGdW5jdGlvbj19IG9uc3RvcAotICovCi1XZWJJbnNwZWN0b3IuU3Bl
Y3RydW0uZHJhZ2dhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgb25tb3ZlLCBvbnN0YXJ0LCBvbnN0
b3ApIHsKLQotICAgIHZhciBkb2MgPSBkb2N1bWVudDsKLSAgICB2YXIgZHJhZ2dpbmc7Ci0gICAg
dmFyIG9mZnNldDsKLSAgICB2YXIgc2Nyb2xsT2Zmc2V0OwotICAgIHZhciBtYXhIZWlnaHQ7Ci0g
ICAgdmFyIG1heFdpZHRoOwotCi0gICAgZnVuY3Rpb24gY29uc3VtZShlKQotICAgIHsKLSAgICAg
ICAgZS5jb25zdW1lKHRydWUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1vdmUoZSkKLSAgICB7
Ci0gICAgICAgIGlmIChkcmFnZ2luZykgewotICAgICAgICAgICAgdmFyIGRyYWdYID0gTWF0aC5t
YXgoMCwgTWF0aC5taW4oZS5wYWdlWCAtIG9mZnNldC5sZWZ0ICsgc2Nyb2xsT2Zmc2V0LmxlZnQs
IG1heFdpZHRoKSk7Ci0gICAgICAgICAgICB2YXIgZHJhZ1kgPSBNYXRoLm1heCgwLCBNYXRoLm1p
bihlLnBhZ2VZIC0gb2Zmc2V0LnRvcCArIHNjcm9sbE9mZnNldC50b3AsIG1heEhlaWdodCkpOwot
Ci0gICAgICAgICAgICBpZiAob25tb3ZlKQotICAgICAgICAgICAgICAgIG9ubW92ZShlbGVtZW50
LCBkcmFnWCwgZHJhZ1ksIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc3Rh
cnQoZSkKLSAgICB7Ci0gICAgICAgIHZhciByaWdodENsaWNrID0gZS53aGljaCA/IChlLndoaWNo
ID09PSAzKSA6IChlLmJ1dHRvbiA9PT0gMik7Ci0KLSAgICAgICAgaWYgKCFyaWdodENsaWNrICYm
ICFkcmFnZ2luZykgewotCi0gICAgICAgICAgICBpZiAob25zdGFydCkKLSAgICAgICAgICAgICAg
ICBvbnN0YXJ0KGVsZW1lbnQsIGUpCi0KLSAgICAgICAgICAgIGRyYWdnaW5nID0gdHJ1ZTsKLSAg
ICAgICAgICAgIG1heEhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0OwotICAgICAgICAgICAg
bWF4V2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoOwotCi0gICAgICAgICAgICBzY3JvbGxPZmZz
ZXQgPSBlbGVtZW50LnNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgb2Zmc2V0ID0gZWxlbWVu
dC50b3RhbE9mZnNldCgpOwotCi0gICAgICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigic2Vs
ZWN0c3RhcnQiLCBjb25zdW1lLCBmYWxzZSk7Ci0gICAgICAgICAgICBkb2MuYWRkRXZlbnRMaXN0
ZW5lcigiZHJhZ3N0YXJ0IiwgY29uc3VtZSwgZmFsc2UpOwotICAgICAgICAgICAgZG9jLmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIG1vdmUsIGZhbHNlKTsKLSAgICAgICAgICAgIGRvYy5h
ZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgc3RvcCwgZmFsc2UpOwotCi0gICAgICAgICAgICBt
b3ZlKGUpOwotICAgICAgICAgICAgY29uc3VtZShlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZ1bmN0aW9uIHN0b3AoZSkKLSAgICB7Ci0gICAgICAgIGlmIChkcmFnZ2luZykgewotICAgICAg
ICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IiwgY29uc3VtZSwgZmFs
c2UpOwotICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIGNv
bnN1bWUsIGZhbHNlKTsKLSAgICAgICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3Vz
ZW1vdmUiLCBtb3ZlLCBmYWxzZSk7Ci0gICAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5l
cigibW91c2V1cCIsIHN0b3AsIGZhbHNlKTsKLQotICAgICAgICAgICAgaWYgKG9uc3RvcCkKLSAg
ICAgICAgICAgICAgICBvbnN0b3AoZWxlbWVudCwgZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBk
cmFnZ2luZyA9IGZhbHNlOwotICAgIH0KLQotICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
bW91c2Vkb3duIiwgc3RhcnQsIGZhbHNlKTsKLX07Ci0KLVdlYkluc3BlY3Rvci5TcGVjdHJ1bS5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHR5cGUge1dlYkluc3BlY3Rvci5Db2xvcn0K
LSAgICAgKi8KLSAgICBzZXQgY29sb3IoY29sb3IpCi0gICAgewotICAgICAgICB2YXIgcmdiYSA9
IChjb2xvci5yZ2JhIHx8IGNvbG9yLnJnYikuc2xpY2UoMCk7Ci0KLSAgICAgICAgaWYgKHJnYmEu
bGVuZ3RoID09PSAzKQotICAgICAgICAgICAgcmdiYVszXSA9IDE7Ci0KLSAgICAgICAgdGhpcy5o
c3YgPSBXZWJJbnNwZWN0b3IuU3BlY3RydW0ucmdiYVRvSFNWQShyZ2JhWzBdLCByZ2JhWzFdLCBy
Z2JhWzJdLCByZ2JhWzNdKTsKLSAgICB9LAotCi0gICAgZ2V0IGNvbG9yKCkKLSAgICB7Ci0gICAg
ICAgIHZhciByZ2JhID0gV2ViSW5zcGVjdG9yLlNwZWN0cnVtLmhzdmFUb1JHQkEodGhpcy5oc3Zb
MF0sIHRoaXMuaHN2WzFdLCB0aGlzLmhzdlsyXSwgdGhpcy5oc3ZbM10pOwotICAgICAgICB2YXIg
Y29sb3I7Ci0KLSAgICAgICAgaWYgKHJnYmFbM10gPT09IDEpCi0gICAgICAgICAgICBjb2xvciA9
IFdlYkluc3BlY3Rvci5Db2xvci5mcm9tUkdCKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0pOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2xvciA9IFdlYkluc3BlY3Rvci5Db2xvci5mcm9t
UkdCQShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsKLQotICAgICAgICB2YXIg
Y29sb3JWYWx1ZSA9IGNvbG9yLnRvU3RyaW5nKHRoaXMub3V0cHV0Q29sb3JGb3JtYXQpOwotICAg
ICAgICBpZiAoIWNvbG9yVmFsdWUpCi0gICAgICAgICAgICBjb2xvclZhbHVlID0gY29sb3IudG9T
dHJpbmcoKTsgLy8gdGhpcy5vdXRwdXRDb2xvckZvcm1hdCBjYW4gYmUgaW52YWxpZCBmb3IgY3Vy
cmVudCBjb2xvciAoZS5nLiAibmlja25hbWUiKS4KLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5Db2xvci5wYXJzZShjb2xvclZhbHVlKTsKLSAgICB9LAotCi0gICAgZ2V0IG91dHB1dENvbG9y
Rm9ybWF0KCkKLSAgICB7Ci0gICAgICAgIHZhciBjZiA9IFdlYkluc3BlY3Rvci5Db2xvci5Gb3Jt
YXQ7Ci0gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9vcmlnaW5hbEZvcm1hdDsKLQotICAgICAg
ICBpZiAodGhpcy5oc3ZbM10gPT09IDEpIHsKLSAgICAgICAgICAgIC8vIFNpbXBsaWZ5IHRyYW5z
cGFyZW50IGZvcm1hdHMuCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBjZi5SR0JBKQotICAg
ICAgICAgICAgICAgIGZvcm1hdCA9IGNmLlJHQjsKLSAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1h
dCA9PT0gY2YuSFNMQSkKLSAgICAgICAgICAgICAgICBmb3JtYXQgPSBjZi5IU0w7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGV4Y2VwdCBIU0woQSkgc2hvdWxk
IGJlIHJldHVybmVkIGFzIFJHQkEgaWYgdHJhbnNwYXJlbmN5IGlzIGludm9sdmVkLgotICAgICAg
ICAgICAgaWYgKGZvcm1hdCA9PT0gY2YuSFNMIHx8IGZvcm1hdCA9PT0gY2YuSFNMQSkKLSAgICAg
ICAgICAgICAgICBmb3JtYXQgPSBjZi5IU0xBOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGZvcm1hdCA9IGNmLlJHQkE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZm9y
bWF0OwotICAgIH0sCi0KLSAgICBnZXQgY29sb3JIdWVPbmx5KCkKLSAgICB7Ci0gICAgICAgIHZh
ciByZ2JhID0gV2ViSW5zcGVjdG9yLlNwZWN0cnVtLmhzdmFUb1JHQkEodGhpcy5oc3ZbMF0sIDEs
IDEsIDEpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkNvbG9yLmZyb21SR0JBKHJnYmFb
MF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOwotICAgIH0sCi0KLSAgICBzZXQgZGlzcGxh
eVRleHQodGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Rpc3BsYXlFbGVtZW50LnRleHRDb250
ZW50ID0gdGV4dDsKLSAgICB9LAotCi0gICAgX29uY2hhbmdlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl91cGRhdGVVSSgpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuU3BlY3RydW0uRXZlbnRzLkNvbG9yQ2hhbmdlZCwgdGhpcy5j
b2xvcik7Ci0gICAgfSwKLQotICAgIF91cGRhdGVIZWxwZXJMb2NhdGlvbnM6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciBoID0gdGhpcy5oc3ZbMF07Ci0gICAgICAgIHZhciBzID0gdGhp
cy5oc3ZbMV07Ci0gICAgICAgIHZhciB2ID0gdGhpcy5oc3ZbMl07Ci0KLSAgICAgICAgLy8gV2hl
cmUgdG8gc2hvdyB0aGUgbGl0dGxlIGNpcmNsZSB0aGF0IGRpc3BsYXlzIHlvdXIgY3VycmVudCBz
ZWxlY3RlZCBjb2xvci4KLSAgICAgICAgdmFyIGRyYWdYID0gcyAqIHRoaXMuZHJhZ1dpZHRoOwot
ICAgICAgICB2YXIgZHJhZ1kgPSB0aGlzLmRyYWdIZWlnaHQgLSAodiAqIHRoaXMuZHJhZ0hlaWdo
dCk7Ci0KLSAgICAgICAgZHJhZ1ggPSBNYXRoLm1heCgtdGhpcy5fZHJhZ0hlbHBlckVsZW1lbnRI
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbih0aGlzLmRyYWdXaWR0aCAt
IHRoaXMuX2RyYWdIZWxwZXJFbGVtZW50SGVpZ2h0LCBkcmFnWCAtIHRoaXMuX2RyYWdIZWxwZXJF
bGVtZW50SGVpZ2h0KSk7Ci0gICAgICAgIGRyYWdZID0gTWF0aC5tYXgoLXRoaXMuX2RyYWdIZWxw
ZXJFbGVtZW50SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4odGhpcy5k
cmFnSGVpZ2h0IC0gdGhpcy5fZHJhZ0hlbHBlckVsZW1lbnRIZWlnaHQsIGRyYWdZIC0gdGhpcy5f
ZHJhZ0hlbHBlckVsZW1lbnRIZWlnaHQpKTsKLQotICAgICAgICB0aGlzLl9kcmFnSGVscGVyRWxl
bWVudC5wb3NpdGlvbkF0KGRyYWdYLCBkcmFnWSk7Ci0KLSAgICAgICAgLy8gV2hlcmUgdG8gc2hv
dyB0aGUgYmFyIHRoYXQgZGlzcGxheXMgeW91ciBjdXJyZW50IHNlbGVjdGVkIGh1ZS4KLSAgICAg
ICAgdmFyIHNsaWRlWSA9IChoICogdGhpcy5zbGlkZUhlaWdodCkgLSB0aGlzLnNsaWRlSGVscGVy
SGVpZ2h0OwotICAgICAgICB0aGlzLnNsaWRlSGVscGVyLnN0eWxlLnRvcCA9IHNsaWRlWSArICJw
eCI7Ci0KLSAgICAgICAgdGhpcy5fYWxwaGFFbGVtZW50LnZhbHVlID0gdGhpcy5oc3ZbM10gKiAx
MDA7Ci0gICAgfSwKLQotICAgIF91cGRhdGVVSTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fdXBkYXRlSGVscGVyTG9jYXRpb25zKCk7Ci0KLSAgICAgICAgdmFyIHJnYiA9ICh0aGlz
LmNvbG9yLnJnYmEgfHwgdGhpcy5jb2xvci5yZ2IpLnNsaWNlKDApOwotCi0gICAgICAgIGlmIChy
Z2IubGVuZ3RoID09PSAzKQotICAgICAgICAgICAgcmdiWzNdID0gMTsKLQotICAgICAgICB2YXIg
cmdiSHVlT25seSA9IHRoaXMuY29sb3JIdWVPbmx5LnJnYjsKLQotICAgICAgICB2YXIgZmxhdENv
bG9yID0gInJnYigiICsgcmdiSHVlT25seVswXSArICIsICIgKyByZ2JIdWVPbmx5WzFdICsgIiwg
IiArIHJnYkh1ZU9ubHlbMl0gKyAiKSI7Ci0gICAgICAgIHZhciBmdWxsQ29sb3IgPSAicmdiYSgi
ICsgcmdiWzBdICsgIiwgIiArIHJnYlsxXSArICIsICIgKyByZ2JbMl0gKyAiLCAiICsgcmdiWzNd
ICsgIikiOwotCi0gICAgICAgIHRoaXMuX2RyYWdnZXJFbGVtZW50LnN0eWxlLmJhY2tncm91bmRD
b2xvciA9IGZsYXRDb2xvcjsKLSAgICAgICAgdGhpcy5fc3dhdGNoSW5uZXJFbGVtZW50LnN0eWxl
LmJhY2tncm91bmRDb2xvciA9IGZ1bGxDb2xvcjsKLQotICAgICAgICB0aGlzLl9hbHBoYUVsZW1l
bnQudmFsdWUgPSB0aGlzLmhzdlszXSAqIDEwMDsKLSAgICB9LAotCi0gICAgd2FzU2hvd246IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2xpZGVIZWlnaHQgPSB0aGlzLl9zbGlkZXJF
bGVtZW50Lm9mZnNldEhlaWdodDsKLSAgICAgICAgdGhpcy5kcmFnV2lkdGggPSB0aGlzLl9kcmFn
Z2VyRWxlbWVudC5vZmZzZXRXaWR0aDsKLSAgICAgICAgdGhpcy5kcmFnSGVpZ2h0ID0gdGhpcy5f
ZHJhZ2dlckVsZW1lbnQub2Zmc2V0SGVpZ2h0OwotICAgICAgICB0aGlzLl9kcmFnSGVscGVyRWxl
bWVudEhlaWdodCA9IHRoaXMuX2RyYWdIZWxwZXJFbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7Ci0g
ICAgICAgIHRoaXMuc2xpZGVIZWxwZXJIZWlnaHQgPSB0aGlzLnNsaWRlSGVscGVyLm9mZnNldEhl
aWdodCAvIDI7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVVJKCk7Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9y
LlNwZWN0cnVtUG9wdXBIZWxwZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fc3BlY3RydW0g
PSBuZXcgV2ViSW5zcGVjdG9yLlNwZWN0cnVtKCk7Ci0gICAgdGhpcy5fc3BlY3RydW0uZWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyks
IGZhbHNlKTsKLQotICAgIHRoaXMuX3BvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIo
KTsKLSAgICB0aGlzLl9wb3BvdmVyLnNldENhblNocmluayhmYWxzZSk7Ci0gICAgdGhpcy5fcG9w
b3Zlci5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGNvbnN1bWVFdmVudCwg
ZmFsc2UpOwotCi0gICAgdGhpcy5faGlkZVByb3h5ID0gdGhpcy5oaWRlLmJpbmQodGhpcywgdHJ1
ZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TcGVjdHJ1bVBvcHVwSGVscGVyLkV2ZW50cyA9IHsKLSAg
ICBIaWRkZW46ICJIaWRkZW4iCi19OwotCi1XZWJJbnNwZWN0b3IuU3BlY3RydW1Qb3B1cEhlbHBl
ci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNw
ZWN0cnVtfQotICAgICAqLwotICAgIHNwZWN0cnVtOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fc3BlY3RydW07Ci0gICAgfSwKLQotICAgIHRvZ2dsZTogZnVuY3Rpb24o
ZWxlbWVudCwgY29sb3IsIGZvcm1hdCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9wb3BvdmVy
LmlzU2hvd2luZygpKQotICAgICAgICAgICAgdGhpcy5oaWRlKHRydWUpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB0aGlzLnNob3coZWxlbWVudCwgY29sb3IsIGZvcm1hdCk7Ci0KLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3BvcG92ZXIuaXNTaG93aW5nKCk7Ci0gICAgfSwKLQotICAgIHNob3c6
IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbG9yLCBmb3JtYXQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fcG9wb3Zlci5pc1Nob3dpbmcoKSkgewotICAgICAgICAgICAgaWYgKHRoaXMuX2FuY2hvckVs
ZW1lbnQgPT09IGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICAvLyBSZW9wZW4gdGhlIHBpY2tlciBmb3IgYW5vdGhlciBhbmNob3IgZWxlbWVudC4K
LSAgICAgICAgICAgIHRoaXMuaGlkZSh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X2FuY2hvckVsZW1lbnQgPSBlbGVtZW50OwotCi0gICAgICAgIHRoaXMuX3NwZWN0cnVtLmNvbG9y
ID0gY29sb3I7Ci0gICAgICAgIHRoaXMuX3NwZWN0cnVtLl9vcmlnaW5hbEZvcm1hdCA9IGZvcm1h
dCB8fCBjb2xvci5mb3JtYXQ7Ci0gICAgICAgIHRoaXMucmVwb3NpdGlvbihlbGVtZW50KTsKLQot
ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9oaWRl
UHJveHksIGZhbHNlKTsKLSAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0
aGlzLl9oaWRlUHJveHksIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQot
ICAgIHJlcG9zaXRpb246IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuX3ByZXZpb3VzRm9jdXNFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNGb2N1
c0VsZW1lbnQgPSBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCgpOwotICAgICAgICB0
aGlzLl9wb3BvdmVyLnNob3dWaWV3KHRoaXMuX3NwZWN0cnVtLCBlbGVtZW50KTsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLnNldEN1cnJlbnRGb2N1c0VsZW1lbnQodGhpcy5fc3BlY3RydW0uZWxlbWVu
dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNvbW1pdEVk
aXQKLSAgICAgKi8KLSAgICBoaWRlOiBmdW5jdGlvbihjb21taXRFZGl0KQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl9wb3BvdmVyLmlzU2hvd2luZygpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB0aGlzLl9wb3BvdmVyLmhpZGUoKTsKLQotICAgICAgICBkb2N1bWVudC5yZW1vdmVF
dmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9oaWRlUHJveHksIGZhbHNlKTsKLSAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9oaWRlUHJveHksIGZh
bHNlKTsKLQotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuU3BlY3RydW1Qb3B1cEhlbHBlci5FdmVudHMuSGlkZGVuLCAhIWNvbW1pdEVkaXQpOwotCi0g
ICAgICAgIFdlYkluc3BlY3Rvci5zZXRDdXJyZW50Rm9jdXNFbGVtZW50KHRoaXMuX3ByZXZpb3Vz
Rm9jdXNFbGVtZW50KTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3ByZXZpb3VzRm9jdXNFbGVtZW50
OwotCi0gICAgICAgIGRlbGV0ZSB0aGlzLl9hbmNob3JFbGVtZW50OwotICAgIH0sCi0KLSAgICBf
b25LZXlEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudC5rZXlJ
ZGVudGlmaWVyID09PSAiRW50ZXIiKSB7Ci0gICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7Ci0g
ICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSswMDFCIikgeyAv
LyBFc2NhcGUga2V5Ci0gICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpOwotICAgICAgICAgICAg
ZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKi8KLVdlYkluc3BlY3Rvci5Db2xvclN3YXRjaCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlz
LmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgdGhpcy5fc3dh
dGNoSW5uZXJFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgInN3YXRj
aC1pbm5lciIpOwotICAgIHRoaXMuZWxlbWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQ2xpY2sgdG8gb3BlbiBhIGNvbG9ycGlja2VyLiBTaGlmdC1jbGljayB0byBjaGFuZ2UgY29s
b3IgZm9ybWF0Iik7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJzd2F0Y2giOwotICAg
IHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBjb25zdW1lRXZlbnQs
IGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCBj
b25zdW1lRXZlbnQsIGZhbHNlKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNvbG9yU3dhdGNoLnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JTdHJpbmcKLSAg
ICAgKi8KLSAgICBzZXRDb2xvclN0cmluZzogZnVuY3Rpb24oY29sb3JTdHJpbmcpCi0gICAgewot
ICAgICAgICB0aGlzLl9zd2F0Y2hJbm5lckVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0g
Y29sb3JTdHJpbmc7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TcGxpdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NwbGl0Vmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjNDBm
NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NwbGl0
Vmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCi0g
KiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0g
KiBAcGFyYW0ge2Jvb2xlYW59IGlzVmVydGljYWwKLSAqIEBwYXJhbSB7c3RyaW5nPX0gc2lkZWJh
clNpemVTZXR0aW5nTmFtZQotICogQHBhcmFtIHtudW1iZXI9fSBkZWZhdWx0U2lkZWJhcldpZHRo
Ci0gKiBAcGFyYW0ge251bWJlcj19IGRlZmF1bHRTaWRlYmFySGVpZ2h0Ci0gKi8KLVdlYkluc3Bl
Y3Rvci5TcGxpdFZpZXcgPSBmdW5jdGlvbihpc1ZlcnRpY2FsLCBzaWRlYmFyU2l6ZVNldHRpbmdO
YW1lLCBkZWZhdWx0U2lkZWJhcldpZHRoLCBkZWZhdWx0U2lkZWJhckhlaWdodCkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotCi0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVk
Q1NTKCJzcGxpdFZpZXcuY3NzIik7Ci0KLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInNw
bGl0LXZpZXciOwotCi0gICAgdGhpcy5fZmlyc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNyZWF0
ZUNoaWxkKCJkaXYiLCAic3BsaXQtdmlldy1jb250ZW50cyBzY3JvbGwtdGFyZ2V0IHNwbGl0LXZp
ZXctY29udGVudHMtZmlyc3QiKTsKLSAgICB0aGlzLl9zZWNvbmRFbGVtZW50ID0gdGhpcy5lbGVt
ZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAic3BsaXQtdmlldy1jb250ZW50cyBzY3JvbGwtdGFyZ2V0
IHNwbGl0LXZpZXctY29udGVudHMtc2Vjb25kIik7Ci0KLSAgICB0aGlzLl9yZXNpemVyRWxlbWVu
dCA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInNwbGl0LXZpZXctcmVzaXplciIp
OwotICAgIHRoaXMuaW5zdGFsbFJlc2l6ZXIodGhpcy5fcmVzaXplckVsZW1lbnQpOwotICAgIHRo
aXMuX3Jlc2l6YWJsZSA9IHRydWU7Ci0KLSAgICB0aGlzLl9zYXZlZFNpZGViYXJXaWR0aCA9IGRl
ZmF1bHRTaWRlYmFyV2lkdGggfHwgMjAwOwotICAgIHRoaXMuX3NhdmVkU2lkZWJhckhlaWdodCA9
IGRlZmF1bHRTaWRlYmFySGVpZ2h0IHx8IHRoaXMuX3NhdmVkU2lkZWJhcldpZHRoOwotCi0gICAg
aWYgKDAgPCB0aGlzLl9zYXZlZFNpZGViYXJXaWR0aCAmJiB0aGlzLl9zYXZlZFNpZGViYXJXaWR0
aCA8IDEgJiYKLSAgICAgICAgMCA8IHRoaXMuX3NhdmVkU2lkZWJhckhlaWdodCAmJiB0aGlzLl9z
YXZlZFNpZGViYXJIZWlnaHQgPCAxKQotICAgICAgICB0aGlzLl91c2VGcmFjdGlvbiA9IHRydWU7
Ci0gICAgCi0gICAgdGhpcy5fc2lkZWJhclNpemVTZXR0aW5nTmFtZSA9IHNpZGViYXJTaXplU2V0
dGluZ05hbWU7Ci0KLSAgICB0aGlzLnNldFNlY29uZElzU2lkZWJhcih0cnVlKTsKLQotICAgIHRo
aXMuX2lubmVyU2V0VmVydGljYWwoaXNWZXJ0aWNhbCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TcGxp
dFZpZXcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0g
ICAgICovCi0gICAgaXNWZXJ0aWNhbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX2lzVmVydGljYWw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gaXNWZXJ0aWNhbAotICAgICAqLwotICAgIHNldFZlcnRpY2FsOiBmdW5jdGlvbihpc1Zl
cnRpY2FsKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzVmVydGljYWwgPT09IGlzVmVydGlj
YWwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faW5uZXJTZXRWZXJ0aWNh
bChpc1ZlcnRpY2FsKTsKLQotICAgICAgICBpZiAodGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAg
ICAgIHRoaXMuX3VwZGF0ZUxheW91dCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IGlzVmVydGljYWwKLSAgICAgKi8KLSAgICBfaW5uZXJTZXRWZXJ0aWNhbDog
ZnVuY3Rpb24oaXNWZXJ0aWNhbCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVT
dHlsZUNsYXNzKHRoaXMuX2lzVmVydGljYWwgPyAic3BsaXQtdmlldy12ZXJ0aWNhbCIgOiAic3Bs
aXQtdmlldy1ob3Jpem9udGFsIik7Ci0gICAgICAgIHRoaXMuX2lzVmVydGljYWwgPSBpc1ZlcnRp
Y2FsOwotICAgICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcyh0aGlzLl9pc1ZlcnRpY2Fs
ID8gInNwbGl0LXZpZXctdmVydGljYWwiIDogInNwbGl0LXZpZXctaG9yaXpvbnRhbCIpOwotICAg
IH0sCi0gIAotICAgIF91cGRhdGVMYXlvdXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3VwZGF0ZVRvdGFsU2l6ZSgpOwotCi0gICAgICAgIGRlbGV0ZSB0aGlzLl9zaWRlYmFyU2l6
ZTsgIC8vIEZvcmNlIHVwZGF0ZS4KLSAgICAgICAgdGhpcy5zZXRTaWRlYmFyU2l6ZSh0aGlzLl9s
YXN0U2lkZWJhclNpemUoKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0Vs
ZW1lbnR9Ci0gICAgICovCi0gICAgZmlyc3RFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fZmlyc3RFbGVtZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIHNlY29uZEVsZW1lbnQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRFbGVtZW50OwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIGdldCBtYWlu
RWxlbWVudCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5pc1NpZGViYXJTZWNvbmQoKSA/
IHRoaXMuZmlyc3RFbGVtZW50KCkgOiB0aGlzLnNlY29uZEVsZW1lbnQoKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7RWxlbWVudH0KLSAgICAgKi8KLSAgICBnZXQgc2lkZWJh
ckVsZW1lbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNTaWRlYmFyU2Vjb25kKCkg
PyB0aGlzLnNlY29uZEVsZW1lbnQoKSA6IHRoaXMuZmlyc3RFbGVtZW50KCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNTaWRlYmFy
U2Vjb25kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kSXNT
aWRlYmFyOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlY29u
ZElzU2lkZWJhcgotICAgICAqLwotICAgIHNldFNlY29uZElzU2lkZWJhcjogZnVuY3Rpb24oc2Vj
b25kSXNTaWRlYmFyKQotICAgIHsKLSAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5yZW1vdmVT
dHlsZUNsYXNzKCJzcGxpdC12aWV3LXNpZGViYXIiKTsKLSAgICAgICAgdGhpcy5fc2Vjb25kSXNT
aWRlYmFyID0gc2Vjb25kSXNTaWRlYmFyOwotICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoInNwbGl0LXZpZXctc2lkZWJhciIpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIHJlc2l6ZXJFbGVtZW50OiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVzaXplckVsZW1lbnQ7Ci0gICAg
fSwKLQotICAgIHNob3dPbmx5Rmlyc3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3Nob3dPbmx5KHRoaXMuX2ZpcnN0RWxlbWVudCwgdGhpcy5fc2Vjb25kRWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIHNob3dPbmx5U2Vjb25kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Ll9zaG93T25seSh0aGlzLl9zZWNvbmRFbGVtZW50LCB0aGlzLl9maXJzdEVsZW1lbnQpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHNpZGVBCi0gICAgICogQHBh
cmFtIHtFbGVtZW50fSBzaWRlQgotICAgICAqLwotICAgIF9zaG93T25seTogZnVuY3Rpb24oc2lk
ZUEsIHNpZGVCKQotICAgIHsKLSAgICAgICAgc2lkZUEucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVu
Iik7Ci0gICAgICAgIHNpZGVBLmFkZFN0eWxlQ2xhc3MoIm1heGltaXplZCIpOwotICAgICAgICBz
aWRlQi5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgc2lkZUIucmVtb3ZlU3R5bGVD
bGFzcygibWF4aW1pemVkIik7Ci0gICAgICAgIHRoaXMuX3JlbW92ZUFsbExheW91dFByb3BlcnRp
ZXMoKTsKLQotICAgICAgICB0aGlzLl9pc1Nob3dpbmdPbmUgPSB0cnVlOwotICAgICAgICB0aGlz
LnNldFJlc2l6YWJsZShmYWxzZSk7Ci0gICAgICAgIHRoaXMuZG9SZXNpemUoKTsKLSAgICB9LAot
Ci0gICAgX3JlbW92ZUFsbExheW91dFByb3BlcnRpZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2ZpcnN0RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicmlnaHQiKTsKLSAg
ICAgICAgdGhpcy5fZmlyc3RFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJib3R0b20iKTsK
LSAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ3aWR0aCIp
OwotICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoImhlaWdo
dCIpOwotCi0gICAgICAgIHRoaXMuX3NlY29uZEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHko
ImxlZnQiKTsKLSAgICAgICAgdGhpcy5fc2Vjb25kRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0
eSgidG9wIik7Ci0gICAgICAgIHRoaXMuX3NlY29uZEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVy
dHkoIndpZHRoIik7Ci0gICAgICAgIHRoaXMuX3NlY29uZEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJv
cGVydHkoImhlaWdodCIpOwotCi0gICAgICAgIHRoaXMuX3Jlc2l6ZXJFbGVtZW50LnN0eWxlLnJl
bW92ZVByb3BlcnR5KCJsZWZ0Iik7Ci0gICAgICAgIHRoaXMuX3Jlc2l6ZXJFbGVtZW50LnN0eWxl
LnJlbW92ZVByb3BlcnR5KCJyaWdodCIpOwotICAgICAgICB0aGlzLl9yZXNpemVyRWxlbWVudC5z
dHlsZS5yZW1vdmVQcm9wZXJ0eSgidG9wIik7Ci0gICAgICAgIHRoaXMuX3Jlc2l6ZXJFbGVtZW50
LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJib3R0b20iKTsKLQotICAgICAgICB0aGlzLl9yZXNpemVy
RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgibWFyZ2luLWxlZnQiKTsKLSAgICAgICAgdGhp
cy5fcmVzaXplckVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIm1hcmdpbi1yaWdodCIpOwot
ICAgICAgICB0aGlzLl9yZXNpemVyRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgibWFyZ2lu
LXRvcCIpOwotICAgICAgICB0aGlzLl9yZXNpemVyRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0
eSgibWFyZ2luLWJvdHRvbSIpOwotICAgIH0sCi0KLSAgICBzaG93Qm90aDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5faXNTaG93aW5nT25lID0gZmFsc2U7Ci0gICAgICAgIHRoaXMu
X2ZpcnN0RWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgdGhpcy5f
Zmlyc3RFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoIm1heGltaXplZCIpOwotICAgICAgICB0aGlz
Ll9zZWNvbmRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICB0aGlz
Ll9zZWNvbmRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoIm1heGltaXplZCIpOwotCi0gICAgICAg
IHRoaXMuX3VwZGF0ZUxheW91dCgpOwotCi0gICAgICAgIHRoaXMuc2V0UmVzaXphYmxlKHRydWUp
OwotICAgICAgICB0aGlzLmRvUmVzaXplKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gcmVzaXphYmxlCi0gICAgICovCi0gICAgc2V0UmVzaXphYmxlOiBmdW5j
dGlvbihyZXNpemFibGUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmVzaXphYmxlID09PSBy
ZXNpemFibGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3Jlc2l6YWJsZSA9
IHJlc2l6YWJsZTsKLSAgICAgICAgaWYgKHJlc2l6YWJsZSkKLSAgICAgICAgICAgIHRoaXMuX3Jl
c2l6ZXJFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aGlzLl9yZXNpemVyRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUKLSAgICAgKi8K
LSAgICBzZXRTaWRlYmFyU2l6ZTogZnVuY3Rpb24oc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9zaWRlYmFyU2l6ZSA9PT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBzaXplID0gdGhpcy5hcHBseUNvbnN0cmFpbnRzKHNpemUpOwotICAgICAgICB0aGlzLl9pbm5l
clNldFNpZGViYXJTaXplKHNpemUpOwotICAgICAgICB0aGlzLl9zYXZlU2lkZWJhclNpemUoc2l6
ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8K
LSAgICBzaWRlYmFyU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X3NpZGViYXJTaXplOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9
Ci0gICAgICovCi0gICAgdG90YWxTaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fdG90YWxTaXplOwotICAgIH0sCi0KLSAgICBfdXBkYXRlVG90YWxTaXplOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl90b3RhbFNpemUgPSB0aGlzLl9pc1ZlcnRpY2Fs
ID8gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIDogdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsK
LSAgICAgICAgaWYgKHRoaXMuX3VzZUZyYWN0aW9uKQotICAgICAgICAgICAgdGhpcy5fc2lkZWJh
clNpemUgPSB0aGlzLl9sYXN0U2lkZWJhclNpemUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IHNpemUKLSAgICAgKi8KLSAgICBfaW5uZXJTZXRTaWRlYmFyU2l6
ZTogZnVuY3Rpb24oc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc1Nob3dpbmdPbmUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGF5b3V0UHJv
cGVydGllcygpOwotCi0gICAgICAgIHZhciBzaXplVmFsdWU7Ci0gICAgICAgIGlmICh0aGlzLl91
c2VGcmFjdGlvbikKLSAgICAgICAgICAgIHNpemVWYWx1ZSA9IChzaXplIC8gdGhpcy5fdG90YWxT
aXplKSAqIDEwMCArICIlIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2l6ZVZhbHVlID0g
c2l6ZSArICJweCI7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2lzVmVydGljYWwpIHsKLSAgICAgICAg
ICAgIHZhciByZXNpemVyV2lkdGggPSB0aGlzLl9yZXNpemVyRWxlbWVudC5vZmZzZXRXaWR0aDsK
LSAgICAgICAgICAgIGlmICh0aGlzLl9zZWNvbmRJc1NpZGViYXIpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9maXJzdEVsZW1lbnQuc3R5bGUucmlnaHQgPSBzaXplVmFsdWU7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fc2Vjb25kRWxlbWVudC5zdHlsZS53aWR0aCA9IHNpemVWYWx1ZTsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9yZXNpemVyRWxlbWVudC5zdHlsZS5yaWdodCA9IHNpemVWYWx1ZTsK
LSAgICAgICAgICAgICAgICB0aGlzLl9yZXNpemVyRWxlbWVudC5zdHlsZS5tYXJnaW5SaWdodCA9
IC1yZXNpemVyV2lkdGggLyAyICsgInB4IjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50LnN0eWxlLndpZHRoID0gc2l6ZVZhbHVlOwotICAg
ICAgICAgICAgICAgIHRoaXMuX3NlY29uZEVsZW1lbnQuc3R5bGUubGVmdCA9IHNpemVWYWx1ZTsK
LSAgICAgICAgICAgICAgICB0aGlzLl9yZXNpemVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gc2l6ZVZh
bHVlOwotICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZXJFbGVtZW50LnN0eWxlLm1hcmdpbkxl
ZnQgPSAtcmVzaXplcldpZHRoIC8gMiArICJweCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB2YXIgcmVzaXplckhlaWdodCA9IHRoaXMuX3Jlc2l6ZXJFbGVt
ZW50Lm9mZnNldEhlaWdodDsKLQotICAgICAgICAgICAgaWYgKHRoaXMuX3NlY29uZElzU2lkZWJh
cikgewotICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudC5zdHlsZS5ib3R0b20gPSBz
aXplVmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2Vjb25kRWxlbWVudC5zdHlsZS5oZWln
aHQgPSBzaXplVmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplckVsZW1lbnQuc3R5
bGUuYm90dG9tID0gc2l6ZVZhbHVlOwotICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZXJFbGVt
ZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1yZXNpemVySGVpZ2h0IC8gMiArICJweCI7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudC5zdHls
ZS5oZWlnaHQgPSBzaXplVmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2Vjb25kRWxlbWVu
dC5zdHlsZS50b3AgPSBzaXplVmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplckVs
ZW1lbnQuc3R5bGUudG9wID0gc2l6ZVZhbHVlOwotICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6
ZXJFbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9IC1yZXNpemVySGVpZ2h0IC8gMiArICJweCI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9zaWRlYmFyU2l6ZSA9IHNp
emU7Ci0gICAgICAgIHRoaXMuZG9SZXNpemUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IHNpemUKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0g
ICAgYXBwbHlDb25zdHJhaW50czogZnVuY3Rpb24oc2l6ZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0
IG1pblNpemUgPSAyMDsKLSAgICAgICAgc2l6ZSA9IE1hdGgubWF4KHNpemUsIG1pblNpemUpOwot
ICAgICAgICBpZiAodGhpcy5fdG90YWxTaXplIC0gc2l6ZSA8IG1pblNpemUpCi0gICAgICAgICAg
ICBzaXplID0gdGhpcy5fdG90YWxTaXplIC0gbWluU2l6ZTsKLSAgICAgICAgcmV0dXJuIHNpemU7
Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Ll91cGRhdGVMYXlvdXQoKTsKLSAgICB9LAotCi0gICAgb25SZXNpemU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVRvdGFsU2l6ZSgpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0g
ICAgICovCi0gICAgX3N0YXJ0UmVzaXplckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5fcmVzaXphYmxlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHRoaXMuX2RyYWdPZmZzZXQgPSAodGhpcy5fc2Vjb25kSXNTaWRlYmFyID8g
dGhpcy5fdG90YWxTaXplIC0gdGhpcy5fc2lkZWJhclNpemUgOiB0aGlzLl9zaWRlYmFyU2l6ZSkg
LSAodGhpcy5faXNWZXJ0aWNhbCA/IGV2ZW50LnBhZ2VYIDogZXZlbnQucGFnZVkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0g
ZXZlbnQKLSAgICAgKi8KLSAgICBfcmVzaXplckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHZhciBuZXdPZmZzZXQgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGV2ZW50LnBh
Z2VYIDogZXZlbnQucGFnZVkpICsgdGhpcy5fZHJhZ09mZnNldDsKLSAgICAgICAgdmFyIG5ld1Np
emUgPSAodGhpcy5fc2Vjb25kSXNTaWRlYmFyID8gdGhpcy5fdG90YWxTaXplIC0gbmV3T2Zmc2V0
IDogbmV3T2Zmc2V0KTsKLSAgICAgICAgdGhpcy5zZXRTaWRlYmFyU2l6ZShuZXdTaXplKTsKLSAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfZW5kUmVzaXplckRyYWdnaW5nOiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9kcmFnT2Zmc2V0Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJlc2l6ZXJFbGVtZW50
Ci0gICAgICovCi0gICAgaW5zdGFsbFJlc2l6ZXI6IGZ1bmN0aW9uKHJlc2l6ZXJFbGVtZW50KQot
ICAgIHsKLSAgICAgICAgcmVzaXplckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3du
IiwgdGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKgotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29u
RHJhZ1N0YXJ0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5f
ZWxlbWVudERyYWdTdGFydCh0aGlzLl9zdGFydFJlc2l6ZXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0
aGlzLl9yZXNpemVyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fZW5kUmVzaXplckRyYWdnaW5n
LmJpbmQodGhpcyksIHRoaXMuX2lzVmVydGljYWwgPyAiZXctcmVzaXplIiA6ICJucy1yZXNpemUi
LCBldmVudCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rv
ci5TZXR0aW5nfQotICAgICAqLwotICAgIF9zaXplU2V0dGluZzogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9zaWRlYmFyU2l6ZVNldHRpbmdOYW1lKQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIHNldHRpbmdOYW1lID0gdGhpcy5fc2lkZWJhclNp
emVTZXR0aW5nTmFtZSArICh0aGlzLl9pc1ZlcnRpY2FsID8gIiIgOiAiSCIpOwotICAgICAgICBp
ZiAoIVdlYkluc3BlY3Rvci5zZXR0aW5nc1tzZXR0aW5nTmFtZV0pCi0gICAgICAgICAgICBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3Nbc2V0dGluZ05hbWVdID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmNy
ZWF0ZVNldHRpbmcoc2V0dGluZ05hbWUsIHVuZGVmaW5lZCk7Ci0KLSAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5zZXR0aW5nc1tzZXR0aW5nTmFtZV07Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBfbGFzdFNpZGViYXJTaXplOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2l6ZVNldHRpbmcgPSB0aGlzLl9zaXplU2V0dGlu
ZygpOwotICAgICAgICB2YXIgc2l6ZSA9IHNpemVTZXR0aW5nID8gc2l6ZVNldHRpbmcuZ2V0KCkg
OiAwOwotICAgICAgICBpZiAoIXNpemUpCi0gICAgICAgICAgICAgc2l6ZSA9IHRoaXMuX2lzVmVy
dGljYWwgPyB0aGlzLl9zYXZlZFNpZGViYXJXaWR0aCA6IHRoaXMuX3NhdmVkU2lkZWJhckhlaWdo
dDsKLSAgICAgICAgaWYgKHRoaXMuX3VzZUZyYWN0aW9uKQotICAgICAgICAgICAgc2l6ZSAqPSB0
aGlzLl90b3RhbFNpemU7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZQotICAgICAqLwotICAgIF9zYXZlU2lkZWJhclNp
emU6IGZ1bmN0aW9uKHNpemUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdXNlRnJhY3Rpb24p
Ci0gICAgICAgICAgICBzaXplIC89IHRoaXMuX3RvdGFsU2l6ZTsKLQotICAgICAgICBpZiAodGhp
cy5faXNWZXJ0aWNhbCkKLSAgICAgICAgICAgIHRoaXMuX3NhdmVkU2lkZWJhcldpZHRoID0gc2l6
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fc2F2ZWRTaWRlYmFySGVpZ2h0ID0g
c2l6ZTsKLQotICAgICAgICB2YXIgc2l6ZVNldHRpbmcgPSB0aGlzLl9zaXplU2V0dGluZygpOwot
ICAgICAgICBpZiAoc2l6ZVNldHRpbmcpCi0gICAgICAgICAgICBzaXplU2V0dGluZy5zZXQoc2l6
ZSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBl
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0YXR1
c0JhckJ1dHRvbi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3RhdHVz
QmFyQnV0dG9uLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzYzZDA5Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3RhdHVzQmFyQnV0
dG9uLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKiBAcGFyYW0geyFFbGVtZW50
fSBlbGVtZW50Ci0gKi8KLVdlYkluc3BlY3Rvci5TdGF0dXNCYXJJdGVtID0gZnVuY3Rpb24oZWxl
bWVudCkKLXsKLSAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotICAgIHRoaXMuX2VuYWJsZWQg
PSB0cnVlOwotfQotCi1XZWJJbnNwZWN0b3IuU3RhdHVzQmFySXRlbS5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZQotICAgICAqLwotICAgIHNldEVu
YWJsZWQ6IGZ1bmN0aW9uKHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQg
PT09IHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9lbmFibGVkID0g
dmFsdWU7Ci0gICAgICAgIHRoaXMuX2FwcGx5RW5hYmxlZFN0YXRlKCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwcm90ZWN0ZWQKLSAgICAgKi8KLSAgICBfYXBwbHlFbmFibGVkU3RhdGU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5kaXNhYmxlZCA9ICF0aGlz
Ll9lbmFibGVkOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLlN0YXR1c0Jhckl0ZW19Ci0gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAqIEBwYXJh
bSB7c3RyaW5nfSBjbGFzc05hbWUKLSAqIEBwYXJhbSB7bnVtYmVyPX0gc3RhdGVzCi0gKi8KLVdl
Ykluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24gPSBmdW5jdGlvbih0aXRsZSwgY2xhc3NOYW1lLCBz
dGF0ZXMpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlN0YXR1c0Jhckl0ZW0uY2FsbCh0aGlzLCBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSk7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFt
ZSA9IGNsYXNzTmFtZSArICIgc3RhdHVzLWJhci1pdGVtIjsKLSAgICB0aGlzLmVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9jbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsK
LQotICAgIHRoaXMuZ2x5cGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0
aGlzLmdseXBoLmNsYXNzTmFtZSA9ICJnbHlwaCI7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMuZ2x5cGgpOwotCi0gICAgdGhpcy5nbHlwaFNoYWRvdyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZ2x5cGhTaGFkb3cuY2xhc3NOYW1lID0gImdseXBo
IHNoYWRvdyI7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ2x5cGhTaGFkb3cp
OwotCi0gICAgdGhpcy5zdGF0ZXMgPSBzdGF0ZXM7Ci0gICAgaWYgKCFzdGF0ZXMpCi0gICAgICAg
IHRoaXMuc3RhdGVzID0gMjsKLQotICAgIGlmIChzdGF0ZXMgPT0gMikKLSAgICAgICAgdGhpcy5f
c3RhdGUgPSBmYWxzZTsKLSAgICBlbHNlCi0gICAgICAgIHRoaXMuX3N0YXRlID0gMDsKLQotICAg
IHRoaXMudGl0bGUgPSB0aXRsZTsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAg
ICB0aGlzLl92aXNpYmxlID0gdHJ1ZTsKLX0KLQotV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRv
bi5wcm90b3R5cGUgPSB7Ci0gICAgX2NsaWNrZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJjbGljayIpOwotICAgICAgICBpZiAodGhp
cy5fc2hvd09wdGlvbnNUaW1lcikKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zaG93
T3B0aW9uc1RpbWVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVh
bn0KLSAgICAgKi8KLSAgICBlbmFibGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fZW5hYmxlZDsKLSAgICB9LAotCi0gICAgZ2V0IHRpdGxlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl90aXRsZTsKLSAgICB9LAotCi0gICAgc2V0IHRpdGxlKHgpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5fdGl0bGUgPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHRoaXMuX3RpdGxlID0geDsKLSAgICAgICAgdGhpcy5lbGVtZW50LnRpdGxlID0geDsK
LSAgICB9LAotCi0gICAgZ2V0IHN0YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9z
dGF0ZTsKLSAgICB9LAotCi0gICAgc2V0IHN0YXRlKHgpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fc3RhdGUgPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMu
c3RhdGVzID09PSAyKQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmVuYWJsZVN0eWxlQ2xhc3Mo
InRvZ2dsZWQtb24iLCB4KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLmVsZW1l
bnQucmVtb3ZlU3R5bGVDbGFzcygidG9nZ2xlZC0iICsgdGhpcy5fc3RhdGUpOwotICAgICAgICAg
ICAgaWYgKHggIT09IDApCi0gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xh
c3MoInRvZ2dsZWQtIiArIHgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3N0YXRlID0geDsK
LSAgICB9LAotCi0gICAgZ2V0IHRvZ2dsZWQoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuc3Rh
dGVzICE9PSAyKQotICAgICAgICAgICAgdGhyb3coIk9ubHkgdXNlZCB0b2dnbGVkIHdoZW4gdGhl
cmUgYXJlIDIgc3RhdGVzLCBvdGhlcndpc2UsIHVzZSBzdGF0ZSIpOwotICAgICAgICByZXR1cm4g
dGhpcy5zdGF0ZTsKLSAgICB9LAotCi0gICAgc2V0IHRvZ2dsZWQoeCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLnN0YXRlcyAhPT0gMikKLSAgICAgICAgICAgIHRocm93KCJPbmx5IHVzZWQgdG9n
Z2xlZCB3aGVuIHRoZXJlIGFyZSAyIHN0YXRlcywgb3RoZXJ3aXNlLCB1c2Ugc3RhdGUiKTsKLSAg
ICAgICAgdGhpcy5zdGF0ZSA9IHg7Ci0gICAgfSwKLQotICAgIGdldCB2aXNpYmxlKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlOwotICAgIH0sCi0KLSAgICBzZXQgdmlzaWJs
ZSh4KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3Zpc2libGUgPT09IHgpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5lbGVtZW50LmVuYWJsZVN0eWxlQ2xhc3MoImhpZGRl
biIsICF4KTsKLSAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHg7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTpBcnJheS48V2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1
dHRvbj59IGJ1dHRvbnNQcm92aWRlcgotICAgICAqLwotICAgIG1ha2VMb25nQ2xpY2tFbmFibGVk
OiBmdW5jdGlvbihidXR0b25zUHJvdmlkZXIpCi0gICAgewotICAgICAgICB0aGlzLmxvbmdDbGlj
a0dseXBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHRoaXMubG9u
Z0NsaWNrR2x5cGguY2xhc3NOYW1lID0gImZpbGwgbG9uZy1jbGljay1nbHlwaCI7Ci0gICAgICAg
IHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmxvbmdDbGlja0dseXBoKTsKLSAgCi0gICAg
ICAgIHRoaXMubG9uZ0NsaWNrR2x5cGhTaGFkb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgdGhpcy5sb25nQ2xpY2tHbHlwaFNoYWRvdy5jbGFzc05hbWUgPSAiZmls
bCBsb25nLWNsaWNrLWdseXBoIHNoYWRvdyI7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLmxvbmdDbGlja0dseXBoU2hhZG93KTsKLQotICAgICAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgbW91c2VEb3duLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgbW91
c2VVcC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZXVwIiwgbW91c2VVcC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICAgICAg
ZnVuY3Rpb24gbW91c2VEb3duKGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlLndoaWNo
ICE9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHRoaXMuX3Nob3dP
cHRpb25zVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3Nob3dPcHRpb25zLmJpbmQodGhpcywgYnV0
dG9uc1Byb3ZpZGVyKSwgMjAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1vdXNl
VXAoZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGUud2hpY2ggIT09IDEpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3dPcHRpb25zVGltZXIp
Ci0gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dPcHRpb25zVGltZXIpOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTpB
cnJheS48V2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbj59IGJ1dHRvbnNQcm92aWRlcgotICAg
ICAqLwotICAgIF9zaG93T3B0aW9uczogZnVuY3Rpb24oYnV0dG9uc1Byb3ZpZGVyKQotICAgIHsK
LSAgICAgICAgdmFyIGJ1dHRvbnMgPSBidXR0b25zUHJvdmlkZXIoKTsKLSAgICAgICAgdmFyIG1h
aW5CdXR0b25DbG9uZSA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKHRoaXMudGl0
bGUsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLnN0YXRlcyk7Ci0gICAgICAgIG1haW5CdXR0b25DbG9u
ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsaWNrZWQsIHRoaXMpOwotICAgICAg
ICBtYWluQnV0dG9uQ2xvbmUuc3RhdGUgPSB0aGlzLnN0YXRlOwotICAgICAgICBidXR0b25zLnB1
c2gobWFpbkJ1dHRvbkNsb25lKTsKLQotICAgICAgICB2YXIgbW91c2VVcExpc3RlbmVyID0gbW91
c2VVcC5iaW5kKHRoaXMpOwotICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2V1cCIsIG1vdXNlVXBMaXN0ZW5lciwgZmFsc2UpOwotCi0gICAgICAg
IHZhciBvcHRpb25zR2xhc3NQYW5lID0gbmV3IFdlYkluc3BlY3Rvci5HbGFzc1BhbmUoKTsKLSAg
ICAgICAgdmFyIG9wdGlvbnNCYXJFbGVtZW50ID0gb3B0aW9uc0dsYXNzUGFuZS5lbGVtZW50LmNy
ZWF0ZUNoaWxkKCJkaXYiLCAiYWx0ZXJuYXRlLXN0YXR1cy1iYXItYnV0dG9ucy1iYXIiKTsKLSAg
ICAgICAgY29uc3QgYnV0dG9uSGVpZ2h0ID0gMjQ7Ci0gICAgICAgIG9wdGlvbnNCYXJFbGVtZW50
LnN0eWxlLmhlaWdodCA9IChidXR0b25IZWlnaHQgKiBidXR0b25zLmxlbmd0aCkgKyAicHgiOwot
ICAgICAgICBvcHRpb25zQmFyRWxlbWVudC5zdHlsZS5sZWZ0ID0gKHRoaXMuZWxlbWVudC5vZmZz
ZXRMZWZ0ICsgMSkgKyAicHgiOwotCi0gICAgICAgIHZhciBib3VuZE1vdXNlT3ZlciA9IG1vdXNl
T3Zlci5iaW5kKHRoaXMpOwotICAgICAgICB2YXIgYm91bmRNb3VzZU91dCA9IG1vdXNlT3V0LmJp
bmQodGhpcyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgYnV0dG9uc1tpXS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlbW92ZSIsIGJvdW5kTW91c2VPdmVyLCBmYWxzZSk7Ci0gICAgICAgICAgICBidXR0b25zW2ld
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCBib3VuZE1vdXNlT3V0LCBmYWxz
ZSk7Ci0gICAgICAgICAgICBvcHRpb25zQmFyRWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25zW2ld
LmVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGJ1dHRvbnNbYnV0dG9ucy5sZW5ndGggLSAx
XS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImVtdWxhdGUtYWN0aXZlIik7Ci0KLSAgICAgICAgZnVu
Y3Rpb24gbW91c2VPdmVyKGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlLndoaWNoICE9
PSAxKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBidXR0b25FbGVt
ZW50ID0gZS50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygic3RhdHVzLWJhci1p
dGVtIik7Ci0gICAgICAgICAgICBidXR0b25FbGVtZW50LmFkZFN0eWxlQ2xhc3MoImVtdWxhdGUt
YWN0aXZlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtb3VzZU91dChlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoZS53aGljaCAhPT0gMSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB2YXIgYnV0dG9uRWxlbWVudCA9IGUudGFyZ2V0LmVuY2xvc2lu
Z05vZGVPclNlbGZXaXRoQ2xhc3MoInN0YXR1cy1iYXItaXRlbSIpOwotICAgICAgICAgICAgYnV0
dG9uRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJlbXVsYXRlLWFjdGl2ZSIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gbW91c2VVcChlKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoZS53aGljaCAhPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBv
cHRpb25zR2xhc3NQYW5lLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgbW91c2VVcExpc3RlbmVyLCBm
YWxzZSk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChidXR0b25zW2ldLmVsZW1lbnQuaGFzU3R5bGVD
bGFzcygiZW11bGF0ZS1hY3RpdmUiKSkKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uc1tpXS5f
Y2xpY2tlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLlN0YXR1c0Jhckl0ZW0ucHJvdG90eXBlCi19Ci0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlN0YXR1c0Jhckl0ZW19Ci0g
KiBAcGFyYW0gez9mdW5jdGlvbihFdmVudCl9IGNoYW5nZUhhbmRsZXIKLSAqIEBwYXJhbSB7c3Ry
aW5nPX0gY2xhc3NOYW1lCi0gKi8KLVdlYkluc3BlY3Rvci5TdGF0dXNCYXJDb21ib0JveCA9IGZ1
bmN0aW9uKGNoYW5nZUhhbmRsZXIsIGNsYXNzTmFtZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU3Rh
dHVzQmFySXRlbS5jYWxsKHRoaXMsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSk7Ci0g
ICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJzdGF0dXMtYmFyLXNlbGVjdC1jb250YWluZXIi
OwotCi0gICAgdGhpcy5fc2VsZWN0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgi
c2VsZWN0IiwgInN0YXR1cy1iYXItaXRlbSIpOwotICAgIGlmIChjaGFuZ2VIYW5kbGVyKQotICAg
ICAgICB0aGlzLl9zZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGNoYW5n
ZUhhbmRsZXIsIGZhbHNlKTsKLSAgICBpZiAoY2xhc3NOYW1lKQotICAgICAgICB0aGlzLl9zZWxl
Y3RFbGVtZW50LmFkZFN0eWxlQ2xhc3MoY2xhc3NOYW1lKTsKLX0KLQotV2ViSW5zcGVjdG9yLlN0
YXR1c0JhckNvbWJvQm94LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtu
dW1iZXJ9Ci0gICAgICovCi0gICAgc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX3NlbGVjdEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7IUVsZW1lbnR9IG9wdGlvbgotICAgICAqLwotICAgIGFkZE9w
dGlvbjogZnVuY3Rpb24ob3B0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2VsZWN0RWxlbWVu
dC5hcHBlbmRDaGlsZChvcHRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gbGFiZWwKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRpdGxlCi0gICAgICogQHBh
cmFtIHtzdHJpbmc9fSB2YWx1ZQotICAgICAqIEByZXR1cm4geyFFbGVtZW50fQotICAgICAqLwot
ICAgIGNyZWF0ZU9wdGlvbjogZnVuY3Rpb24obGFiZWwsIHRpdGxlLCB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHZhciBvcHRpb24gPSB0aGlzLl9zZWxlY3RFbGVtZW50LmNyZWF0ZUNoaWxkKCJvcHRp
b24iKTsKLSAgICAgICAgb3B0aW9uLnRleHQgPSBsYWJlbDsKLSAgICAgICAgaWYgKHRpdGxlKQot
ICAgICAgICAgICAgb3B0aW9uLnRpdGxlID0gdGl0bGU7Ci0gICAgICAgIGlmICh0eXBlb2YgdmFs
dWUgIT09ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgb3B0aW9uLnZhbHVlID0gdmFsdWU7Ci0g
ICAgICAgIHJldHVybiBvcHRpb247Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqLwotICAgIF9hcHBseUVuYWJsZWRTdGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fc2VsZWN0RWxlbWVudC5kaXNhYmxlZCA9ICF0aGlzLl9lbmFibGVkOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFFbGVtZW50fSBvcHRpb24KLSAgICAgKi8K
LSAgICByZW1vdmVPcHRpb246IGZ1bmN0aW9uKG9wdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3NlbGVjdEVsZW1lbnQucmVtb3ZlQ2hpbGQob3B0aW9uKTsKLSAgICB9LAotCi0gICAgcmVtb3Zl
T3B0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2VsZWN0RWxlbWVudC5y
ZW1vdmVDaGlsZHJlbigpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHs/RWxl
bWVudH0KLSAgICAgKi8KLSAgICBzZWxlY3RlZE9wdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuX3NlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA+PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdEVsZW1lbnRbdGhpcy5fc2VsZWN0RWxlbWVudC5zZWxl
Y3RlZEluZGV4XTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7RWxlbWVudH0gb3B0aW9uCi0gICAgICovCi0gICAgc2VsZWN0OiBmdW5jdGlv
bihvcHRpb24pCi0gICAgewotICAgICAgICB0aGlzLl9zZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5k
ZXggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMuX3NlbGVjdEVsZW1lbnQsIG9w
dGlvbik7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlN0YXR1c0Jhckl0
ZW0ucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1N0eWxlU2hlZXRPdXRsaW5lRGlhbG9nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TdHlsZVNoZWV0T3V0bGluZURpYWxvZy5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggN2QyNWJhMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1N0eWxlU2hlZXRPdXRsaW5lRGlhbG9nLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KLSAqIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuU2VsZWN0aW9uRGlhbG9nQ29udGVudFByb3Zp
ZGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVmlld30gdmlldwotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAqLwotV2ViSW5zcGVjdG9yLlN0
eWxlU2hlZXRPdXRsaW5lRGlhbG9nID0gZnVuY3Rpb24odmlldywgdWlTb3VyY2VDb2RlKQotewot
ICAgIFdlYkluc3BlY3Rvci5TZWxlY3Rpb25EaWFsb2dDb250ZW50UHJvdmlkZXIuY2FsbCh0aGlz
KTsKLQotICAgIHRoaXMuX3J1bGVzID0gW107Ci0gICAgdGhpcy5fdmlldyA9IHZpZXc7Ci0gICAg
dGhpcy5fdWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOwotfQotCi0vKioKLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlZpZXd9IHZpZXcKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNl
Q29kZX0gdWlTb3VyY2VDb2RlCi0gKi8KLVdlYkluc3BlY3Rvci5TdHlsZVNoZWV0T3V0bGluZURp
YWxvZy5zaG93ID0gZnVuY3Rpb24odmlldywgdWlTb3VyY2VDb2RlKQotewotICAgIGlmIChXZWJJ
bnNwZWN0b3IuRGlhbG9nLmN1cnJlbnRJbnN0YW5jZSgpKQotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB2YXIgZGVsZWdhdGUgPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlU2hlZXRPdXRsaW5lRGlh
bG9nKHZpZXcsIHVpU291cmNlQ29kZSk7Ci0gICAgdmFyIGZpbHRlcmVkSXRlbVNlbGVjdGlvbkRp
YWxvZyA9IG5ldyBXZWJJbnNwZWN0b3IuRmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nKGRlbGVn
YXRlKTsKLSAgICBXZWJJbnNwZWN0b3IuRGlhbG9nLnNob3codmlldy5lbGVtZW50LCBmaWx0ZXJl
ZEl0ZW1TZWxlY3Rpb25EaWFsb2cpOwotfQotCi1XZWJJbnNwZWN0b3IuU3R5bGVTaGVldE91dGxp
bmVEaWFsb2cucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBp
dGVtSW5kZXgKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgaXRlbVRpdGxl
QXQ6IGZ1bmN0aW9uKGl0ZW1JbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9ydWxl
c1tpdGVtSW5kZXhdLnNlbGVjdG9yVGV4dDsKLSAgICB9LAotCi0gICAgLyoKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0gaXRlbUluZGV4Ci0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwot
ICAgIGl0ZW1TdWZmaXhBdDogZnVuY3Rpb24oaXRlbUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0
dXJuICIiOwotICAgIH0sCi0KLSAgICAvKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdGVtSW5k
ZXgKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgaXRlbVN1YnRpdGxlQXQ6
IGZ1bmN0aW9uKGl0ZW1JbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiOiIgKyAodGhpcy5f
cnVsZXNbaXRlbUluZGV4XS5zb3VyY2VMaW5lICsgMSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBpdGVtSW5kZXgKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0g
ICAgICovCi0gICAgaXRlbUtleUF0OiBmdW5jdGlvbihpdGVtSW5kZXgpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fcnVsZXNbaXRlbUluZGV4XS5zZWxlY3RvclRleHQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBpdGVtc0NvdW50
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcnVsZXMubGVuZ3RoOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlciwgbnVtYmVy
KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICByZXF1ZXN0SXRlbXM6IGZ1bmN0aW9uKGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZGlkR2V0QWxsU3R5bGVTaGVldHMoZXJyb3IsIGlu
Zm9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAg
ICBjYWxsYmFjaygwLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gIAotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmZvcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIHZhciBpbmZvID0gaW5mb3NbaV07Ci0gICAgICAgICAgICAgICAg
aWYgKGluZm8uc291cmNlVVJMID09PSB0aGlzLl91aVNvdXJjZUNvZGUudXJsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LmNyZWF0ZUZvcklkKGluZm8u
c3R5bGVTaGVldElkLCBkaWRHZXRTdHlsZVNoZWV0LmJpbmQodGhpcykpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FsbGJhY2soMCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDU1NBZ2VudC5nZXRB
bGxTdHlsZVNoZWV0cyhkaWRHZXRBbGxTdHlsZVNoZWV0cy5iaW5kKHRoaXMpKTsKLQotICAgICAg
ICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXR9IHN0
eWxlU2hlZXQKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZEdldFN0eWxlU2hlZXQo
c3R5bGVTaGVldCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzdHlsZVNoZWV0KSB7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2soMCwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLl9ydWxlcyA9IHN0eWxlU2hlZXQucnVs
ZXM7Ci0gICAgICAgICAgICBjYWxsYmFjaygwLCAxKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaXRlbUluZGV4Ci0gICAgICogQHBhcmFtIHtz
dHJpbmd9IHByb21wdFZhbHVlCi0gICAgICovCi0gICAgc2VsZWN0SXRlbTogZnVuY3Rpb24oaXRl
bUluZGV4LCBwcm9tcHRWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHZhciBsaW5lTnVtYmVyID0gdGhp
cy5fcnVsZXNbaXRlbUluZGV4XS5zb3VyY2VMaW5lOwotICAgICAgICBpZiAoIWlzTmFOKGxpbmVO
dW1iZXIpICYmIGxpbmVOdW1iZXIgPj0gMCkKLSAgICAgICAgICAgIHRoaXMuX3ZpZXcuaGlnaGxp
Z2h0TGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgdGhpcy5fdmlldy5mb2N1cygpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBAcmV0dXJu
IHtzdHJpbmd9Ci0gICAgICovCi0gICAgcmV3cml0ZVF1ZXJ5OiBmdW5jdGlvbihxdWVyeSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBxdWVyeTsKLSAgICB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTFiOWZlZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjc0MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmV9Ci0gKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlU2lkZWJhclBhbmV9IGNvbXB1dGVkU3R5
bGVQYW5lCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKERPTUFnZW50Lk5vZGVJZCwgc3RyaW5nLCBib29s
ZWFuKX0gc2V0UHNldWRvQ2xhc3NDYWxsYmFjawotICovCi1XZWJJbnNwZWN0b3IuU3R5bGVzU2lk
ZWJhclBhbmUgPSBmdW5jdGlvbihjb21wdXRlZFN0eWxlUGFuZSwgc2V0UHNldWRvQ2xhc3NDYWxs
YmFjaykKLXsKLSAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlN0eWxlcyIpKTsKLQotICAgIHRoaXMuc2V0dGluZ3NTZWxlY3RFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgdGhpcy5zZXR0aW5n
c1NlbGVjdEVsZW1lbnQuY2xhc3NOYW1lID0gInNlbGVjdC1zZXR0aW5ncyI7Ci0KLSAgICB2YXIg
b3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Ci0gICAgb3B0aW9uLnZh
bHVlID0gV2ViSW5zcGVjdG9yLkNvbG9yLkZvcm1hdC5PcmlnaW5hbDsKLSAgICBvcHRpb24ubGFi
ZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVU
aXRsZXMoKSA/ICJBcyBhdXRob3JlZCIgOiAiQXMgQXV0aG9yZWQiKTsKLSAgICB0aGlzLnNldHRp
bmdzU2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb24pOwotCi0gICAgb3B0aW9uID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Ci0gICAgb3B0aW9uLnZhbHVlID0gV2ViSW5z
cGVjdG9yLkNvbG9yLkZvcm1hdC5IRVg7Ci0gICAgb3B0aW9uLmxhYmVsID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJIZXggQ29sb3JzIik7Ci0gICAgdGhpcy5zZXR0aW5nc1NlbGVjdEVsZW1lbnQu
YXBwZW5kQ2hpbGQob3B0aW9uKTsKLQotICAgIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoIm9wdGlvbiIpOwotICAgIG9wdGlvbi52YWx1ZSA9IFdlYkluc3BlY3Rvci5Db2xvci5Gb3Jt
YXQuUkdCOwotICAgIG9wdGlvbi5sYWJlbCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUkdCIENv
bG9ycyIpOwotICAgIHRoaXMuc2V0dGluZ3NTZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlv
bik7Ci0KLSAgICBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAg
ICBvcHRpb24udmFsdWUgPSBXZWJJbnNwZWN0b3IuQ29sb3IuRm9ybWF0LkhTTDsKLSAgICBvcHRp
b24ubGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhTTCBDb2xvcnMiKTsKLSAgICB0aGlz
LnNldHRpbmdzU2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb24pOwotCi0gICAgLy8gUHJl
dmVudCBzZWN0aW9uIGZyb20gY29sbGFwc2luZy4KLSAgICB2YXIgbXV0ZUV2ZW50TGlzdGVuZXIg
PSBmdW5jdGlvbihldmVudCkgeyBldmVudC5jb25zdW1lKHRydWUpOyB9OwotCi0gICAgdGhpcy5z
ZXR0aW5nc1NlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBtdXRlRXZlbnRM
aXN0ZW5lciwgdHJ1ZSk7Ci0gICAgdGhpcy5zZXR0aW5nc1NlbGVjdEVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiY2hhbmdlIiwgdGhpcy5fY2hhbmdlU2V0dGluZy5iaW5kKHRoaXMpLCBmYWxzZSk7
Ci0gICAgdGhpcy5fdXBkYXRlQ29sb3JGb3JtYXRGaWx0ZXIoKTsKLQotICAgIHRoaXMudGl0bGVF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NTZWxlY3RFbGVtZW50KTsKLQotICAgIHRo
aXMuX2VsZW1lbnRTdGF0ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIp
OwotICAgIHRoaXMuX2VsZW1lbnRTdGF0ZUJ1dHRvbi5jbGFzc05hbWUgPSAicGFuZS10aXRsZS1i
dXR0b24gZWxlbWVudC1zdGF0ZSI7Ci0gICAgdGhpcy5fZWxlbWVudFN0YXRlQnV0dG9uLnRpdGxl
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUb2dnbGUgRWxlbWVudCBTdGF0ZSIpOwotICAgIHRo
aXMuX2VsZW1lbnRTdGF0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3Rv
Z2dsZUVsZW1lbnRTdGF0ZVBhbmUuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMudGl0bGVF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRTdGF0ZUJ1dHRvbik7Ci0KLSAgICB2YXIg
YWRkQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci0gICAgYWRkQnV0
dG9uLmNsYXNzTmFtZSA9ICJwYW5lLXRpdGxlLWJ1dHRvbiBhZGQiOwotICAgIGFkZEJ1dHRvbi5p
ZCA9ICJhZGQtc3R5bGUtYnV0dG9uLXRlc3QtaWQiOwotICAgIGFkZEJ1dHRvbi50aXRsZSA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiTmV3IFN0eWxlIFJ1bGUiKTsKLSAgICBhZGRCdXR0b24uYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9jcmVhdGVOZXdSdWxlLmJpbmQodGhpcyksIGZh
bHNlKTsKLSAgICB0aGlzLnRpdGxlRWxlbWVudC5hcHBlbmRDaGlsZChhZGRCdXR0b24pOwotCi0g
ICAgdGhpcy5fY29tcHV0ZWRTdHlsZVBhbmUgPSBjb21wdXRlZFN0eWxlUGFuZTsKLSAgICBjb21w
dXRlZFN0eWxlUGFuZS5fc3R5bGVzU2lkZWJhclBhbmUgPSB0aGlzOwotICAgIHRoaXMuX3NldFBz
ZXVkb0NsYXNzQ2FsbGJhY2sgPSBzZXRQc2V1ZG9DbGFzc0NhbGxiYWNrOwotICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51RXZl
bnRGaXJlZC5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29s
b3JGb3JtYXQuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fY29sb3JGb3JtYXRTZXR0aW5nQ2hhbmdl
ZC5iaW5kKHRoaXMpKTsKLQotICAgIHRoaXMuX2NyZWF0ZUVsZW1lbnRTdGF0ZVBhbmUoKTsKLSAg
ICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRTdGF0ZVBhbmUpOwot
ICAgIHRoaXMuX3NlY3Rpb25zQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9zZWN0aW9uc0NvbnRh
aW5lcik7Ci0KLSAgICB0aGlzLl9zcGVjdHJ1bUhlbHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuU3Bl
Y3RydW1Qb3B1cEhlbHBlcigpOwotICAgIHRoaXMuX2xpbmtpZmllciA9IG5ldyBXZWJJbnNwZWN0
b3IuTGlua2lmaWVyKG5ldyBXZWJJbnNwZWN0b3IuTGlua2lmaWVyLkRlZmF1bHRDU1NGb3JtYXR0
ZXIoKSk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FdmVudHMuU3R5bGVTaGVldENoYW5nZWQsIHRoaXMuX3N0
eWxlU2hlZXRPck1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0
b3IuY3NzTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5F
dmVudHMuTWVkaWFRdWVyeVJlc3VsdENoYW5nZWQsIHRoaXMuX3N0eWxlU2hlZXRPck1lZGlhUXVl
cnlSZXN1bHRDaGFuZ2VkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkF0dHJNb2RpZmllZCwgdGhp
cy5fYXR0cmlidXRlQ2hhbmdlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5BdHRyUmVtb3ZlZCwg
dGhpcy5fYXR0cmlidXRlQ2hhbmdlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLnNldHRpbmdz
LnNob3dVc2VyQWdlbnRTdHlsZXMuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fc2hvd1VzZXJBZ2Vu
dFN0eWxlc1NldHRpbmdDaGFuZ2VkLmJpbmQodGhpcykpOwotfQotCi0vLyBLZWVwIGluIHN5bmMg
d2l0aCBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIFBzZXVkb0lkIGVudW0uIEFycmF5IGJlbG93IGNv
bnRhaW5zIHBzZXVkbyBpZCBuYW1lcyBmb3IgY29ycmVzcG9uZGluZyBlbnVtIGluZGV4ZXMuCi0v
LyBGaXJzdCBpdGVtIGlzIGVtcHR5IGR1ZSB0byBpdHMgYXJ0aWZpY2lhbCBOT1BTRVVETyBuYXR1
cmUgaW4gdGhlIGVudW0uCi0vLyBGSVhNRTogZmluZCBhIHdheSBvZiBnZW5lcmF0aW5nIHRoaXMg
bWFwcGluZyBvciBnZXR0aW5nIGl0IGZyb20gY29tYmluYXRpb24gb2YgUmVuZGVyU3R5bGVDb25z
dGFudHMgYW5kIENTU1NlbGVjdG9yLmNwcCBhdAotLy8gcnVudGltZS4KLVdlYkluc3BlY3Rvci5T
dHlsZXNTaWRlYmFyUGFuZS5Qc2V1ZG9JZE5hbWVzID0gWwotICAgICIiLCAiZmlyc3QtbGluZSIs
ICJmaXJzdC1sZXR0ZXIiLCAiYmVmb3JlIiwgImFmdGVyIiwgInNlbGVjdGlvbiIsICIiLCAiLXdl
YmtpdC1zY3JvbGxiYXIiLCAiLXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24iLAotICAgICItd2Vi
a2l0LWlucHV0LXBsYWNlaG9sZGVyIiwgIi13ZWJraXQtc2xpZGVyLXRodW1iIiwgIi13ZWJraXQt
c2VhcmNoLWNhbmNlbC1idXR0b24iLCAiLXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiIsCi0gICAg
Ii13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbiIsICItd2Via2l0LXNlYXJjaC1yZXN1
bHRzLWJ1dHRvbiIsICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIiwKLSAgICAiLXdlYmtp
dC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiIsICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11
dGUtYnV0dG9uIiwgIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUiLAotICAgICItd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciIsICItd2Via2l0LW1lZGlhLWNv
bnRyb2xzLXZvbHVtZS1zbGlkZXIiLAotICAgICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVt
ZS1zbGlkZXItY29udGFpbmVyIiwgIi13ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1l
LWRpc3BsYXkiLAotICAgICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRp
c3BsYXkiLCAiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIiwgIi13ZWJr
aXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiIsCi0gICAgIi13ZWJraXQtbWVk
aWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24iLCAiLXdlYmtpdC1tZWRpYS1jb250cm9scy1y
ZXdpbmQtYnV0dG9uIiwgIi13ZWJraXQtbWVkaWEtY29udHJvbHMtcmV0dXJuLXRvLXJlYWx0aW1l
LWJ1dHRvbiIsCi0gICAgIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0
aW9ucy1idXR0b24iLCAiLXdlYmtpdC1tZWRpYS1jb250cm9scy1zdGF0dXMtZGlzcGxheSIsICIt
d2Via2l0LXNjcm9sbGJhci10aHVtYiIsCi0gICAgIi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiIs
ICItd2Via2l0LXNjcm9sbGJhci10cmFjayIsICItd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVj
ZSIsICItd2Via2l0LXNjcm9sbGJhci1jb3JuZXIiLAotICAgICItd2Via2l0LXJlc2l6ZXIiLCAi
LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiIsICItd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIgot
XTsKLQotV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLmNhbm9uaWNhbFByb3BlcnR5TmFt
ZSA9IGZ1bmN0aW9uKG5hbWUpCi17Ci0gICAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoIDwgOSB8
fCBuYW1lLmNoYXJBdCgwKSAhPT0gIi0iKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB2YXIg
bWF0Y2ggPSBuYW1lLm1hdGNoKC8oPzotd2Via2l0LXwta2h0bWwtfC1hcHBsZS0pKC4rKS8pOwot
ICAgIGlmICghbWF0Y2gpCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIHJldHVybiBtYXRjaFsx
XTsKLX0KLQotV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLmNyZWF0ZUV4Y2xhbWF0aW9u
TWFyayA9IGZ1bmN0aW9uKHByb3BlcnR5TmFtZSkKLXsKLSAgICB2YXIgZXhjbGFtYXRpb25FbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci0gICAgZXhjbGFtYXRpb25FbGVt
ZW50LmNsYXNzTmFtZSA9ICJleGNsYW1hdGlvbi1tYXJrIjsKLSAgICBleGNsYW1hdGlvbkVsZW1l
bnQudGl0bGUgPSBXZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuY3NzUHJvcGVydGllc01ldGFpbmZv
LmtleVNldCgpW3Byb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpXSA/IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiSW52YWxpZCBwcm9wZXJ0eSB2YWx1ZS4iKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
VW5rbm93biBwcm9wZXJ0eSBuYW1lLiIpOwotICAgIHJldHVybiBleGNsYW1hdGlvbkVsZW1lbnQ7
Ci19Ci0KLVdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7Ci0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfY29udGV4dE1l
bnVFdmVudEZpcmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIHN0YXJ0
IGVkaXRpbmcgdXBvbiBjbGljayAtPiBkZWZhdWx0IG5hdmlnYXRpb24gdG8gcmVzb3VyY2VzIHBh
bmVsIGlzIG5vdCBhdmFpbGFibGUKLSAgICAgICAgLy8gSGVuY2Ugd2UgYWRkIGEgc29mdCBjb250
ZXh0IG1lbnUgZm9yIGhyZWZzLgotICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5z
cGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kQXBw
bGljYWJsZUl0ZW1zKGV2ZW50LnRhcmdldCk7Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coKTsK
LSAgICB9LAotCi0gICAgZ2V0IF9mb3JjZWRQc2V1ZG9DbGFzc2VzKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLm5vZGUgPyAodGhpcy5ub2RlLmdldFVzZXJQcm9wZXJ0eSgicHNldWRvU3Rh
dGUiKSB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkOwotICAgIH0sCi0KLSAgICBfdXBkYXRlRm9y
Y2VkUHNldWRvU3RhdGVJbnB1dHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5ub2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBub2RlUHNldWRvU3Rh
dGUgPSB0aGlzLl9mb3JjZWRQc2V1ZG9DbGFzc2VzOwotICAgICAgICBpZiAoIW5vZGVQc2V1ZG9T
dGF0ZSkKLSAgICAgICAgICAgIG5vZGVQc2V1ZG9TdGF0ZSA9IFtdOwotCi0gICAgICAgIHZhciBp
bnB1dHMgPSB0aGlzLl9lbGVtZW50U3RhdGVQYW5lLmlucHV0czsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBpbnB1dHNbaV0uY2hl
Y2tlZCA9IG5vZGVQc2V1ZG9TdGF0ZS5pbmRleE9mKGlucHV0c1tpXS5zdGF0ZSkgPj0gMDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRE9NTm9kZT19IG5v
ZGUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZVVwZGF0ZQotICAgICAqLwotICAgIHVw
ZGF0ZTogZnVuY3Rpb24obm9kZSwgZm9yY2VVcGRhdGUpCi0gICAgewotICAgICAgICB0aGlzLl9z
cGVjdHJ1bUhlbHBlci5oaWRlKCk7Ci0KLSAgICAgICAgdmFyIHJlZnJlc2ggPSBmYWxzZTsKLQot
ICAgICAgICBpZiAoZm9yY2VVcGRhdGUpCi0gICAgICAgICAgICBkZWxldGUgdGhpcy5ub2RlOwot
Ci0gICAgICAgIGlmICghZm9yY2VVcGRhdGUgJiYgKG5vZGUgPT09IHRoaXMubm9kZSkpCi0gICAg
ICAgICAgICByZWZyZXNoID0gdHJ1ZTsKLQotICAgICAgICBpZiAobm9kZSAmJiBub2RlLm5vZGVU
eXBlKCkgPT09IE5vZGUuVEVYVF9OT0RFICYmIG5vZGUucGFyZW50Tm9kZSkKLSAgICAgICAgICAg
IG5vZGUgPSBub2RlLnBhcmVudE5vZGU7Ci0KLSAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS5ub2Rl
VHlwZSgpICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgIG5vZGUgPSBudWxsOwot
Ci0gICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbm9kZSA9IHRoaXMubm9kZTsKLQotICAgICAgICB0aGlzLl91
cGRhdGVGb3JjZWRQc2V1ZG9TdGF0ZUlucHV0cygpOwotCi0gICAgICAgIGlmIChyZWZyZXNoKQot
ICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFVwZGF0ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0aGlzLl9yZWJ1aWxkVXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb249fSBlZGl0ZWRTZWN0aW9u
Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gZm9yY2VGZXRjaENvbXB1dGVkU3R5bGUKLSAgICAg
KiBAcGFyYW0ge2Z1bmN0aW9uKCk9fSB1c2VyQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBfcmVmcmVz
aFVwZGF0ZTogZnVuY3Rpb24oZWRpdGVkU2VjdGlvbiwgZm9yY2VGZXRjaENvbXB1dGVkU3R5bGUs
IHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZWZyZXNoVXBkYXRlSW5Q
cm9ncmVzcykgewotICAgICAgICAgICAgdGhpcy5fbGFzdE5vZGVGb3JJbm5lclJlZnJlc2ggPSB0
aGlzLm5vZGU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuX3ZhbGlkYXRlTm9kZSh1c2VyQ2FsbGJhY2spOwotICAgICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZnVuY3Rpb24gY29tcHV0ZWRTdHls
ZUNhbGxiYWNrKGNvbXB1dGVkU3R5bGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9yZWZyZXNoVXBkYXRlSW5Qcm9ncmVzczsKLQotICAgICAgICAgICAgaWYgKHRoaXMuX2xh
c3ROb2RlRm9ySW5uZXJSZWZyZXNoKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xh
c3ROb2RlRm9ySW5uZXJSZWZyZXNoOwotICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hVcGRh
dGUoZWRpdGVkU2VjdGlvbiwgZm9yY2VGZXRjaENvbXB1dGVkU3R5bGUsIHVzZXJDYWxsYmFjayk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGhpcy5ub2RlID09PSBub2RlICYmIGNvbXB1dGVkU3R5bGUpCi0gICAgICAgICAgICAgICAg
dGhpcy5faW5uZXJSZWZyZXNoVXBkYXRlKG5vZGUsIGNvbXB1dGVkU3R5bGUsIGVkaXRlZFNlY3Rp
b24pOwotCi0gICAgICAgICAgICBpZiAodXNlckNhbGxiYWNrKQotICAgICAgICAgICAgICAgIHVz
ZXJDYWxsYmFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGVkU3R5
bGVQYW5lLmlzU2hvd2luZygpIHx8IGZvcmNlRmV0Y2hDb21wdXRlZFN0eWxlKSB7Ci0gICAgICAg
ICAgICB0aGlzLl9yZWZyZXNoVXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7Ci0gICAgICAgICAgICBX
ZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0Q29tcHV0ZWRTdHlsZUFzeW5jKG5vZGUuaWQsIGNvbXB1
dGVkU3R5bGVDYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHRoaXMuX2lubmVyUmVmcmVzaFVwZGF0ZShub2RlLCBudWxsLCBlZGl0ZWRTZWN0aW9uKTsK
LSAgICAgICAgICAgIGlmICh1c2VyQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgdXNlckNhbGxi
YWNrKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3JlYnVpbGRVcGRhdGU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZWJ1aWxkVXBkYXRlSW5Qcm9ncmVzcykgewot
ICAgICAgICAgICAgdGhpcy5fbGFzdE5vZGVGb3JJbm5lclJlYnVpbGQgPSB0aGlzLm5vZGU7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
X3ZhbGlkYXRlTm9kZSgpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgdGhpcy5fcmVidWlsZFVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAg
ICAgIHZhciByZXN1bHRTdHlsZXMgPSB7fTsKLQotICAgICAgICBmdW5jdGlvbiBzdHlsZXNDYWxs
YmFjayhtYXRjaGVkUmVzdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5f
cmVidWlsZFVwZGF0ZUluUHJvZ3Jlc3M7Ci0KLSAgICAgICAgICAgIHZhciBsYXN0Tm9kZUZvclJl
YnVpbGQgPSB0aGlzLl9sYXN0Tm9kZUZvcklubmVyUmVidWlsZDsKLSAgICAgICAgICAgIGlmIChs
YXN0Tm9kZUZvclJlYnVpbGQpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGFzdE5v
ZGVGb3JJbm5lclJlYnVpbGQ7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3ROb2RlRm9yUmVidWls
ZCAhPT0gdGhpcy5ub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYnVpbGRVcGRh
dGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1hdGNoZWRSZXN1bHQgJiYgdGhpcy5ub2Rl
ID09PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0U3R5bGVzLm1hdGNoZWRDU1NSdWxl
cyA9IG1hdGNoZWRSZXN1bHQubWF0Y2hlZENTU1J1bGVzOwotICAgICAgICAgICAgICAgIHJlc3Vs
dFN0eWxlcy5wc2V1ZG9FbGVtZW50cyA9IG1hdGNoZWRSZXN1bHQucHNldWRvRWxlbWVudHM7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0U3R5bGVzLmluaGVyaXRlZCA9IG1hdGNoZWRSZXN1bHQuaW5o
ZXJpdGVkOwotICAgICAgICAgICAgICAgIHRoaXMuX2lubmVyUmVidWlsZFVwZGF0ZShub2RlLCBy
ZXN1bHRTdHlsZXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGFzdE5vZGVG
b3JSZWJ1aWxkKSB7Ci0gICAgICAgICAgICAgICAgLy8gbGFzdE5vZGVGb3JSZWJ1aWxkIGlzIHRo
ZSBzYW1lIGFzIHRoaXMubm9kZSAtIGFub3RoZXIgcmVidWlsZCBoYXMgYmVlbiByZXF1ZXN0ZWQu
Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVidWlsZFVwZGF0ZSgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGlu
bGluZUNhbGxiYWNrKGlubGluZVN0eWxlLCBhdHRyaWJ1dGVzU3R5bGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJlc3VsdFN0eWxlcy5pbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlOwotICAgICAg
ICAgICAgcmVzdWx0U3R5bGVzLmF0dHJpYnV0ZXNTdHlsZSA9IGF0dHJpYnV0ZXNTdHlsZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVkQ2FsbGJhY2soY29tcHV0ZWRTdHls
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0U3R5bGVzLmNvbXB1dGVkU3R5bGUgPSBj
b21wdXRlZFN0eWxlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX2NvbXB1dGVkU3R5
bGVQYW5lLmlzU2hvd2luZygpKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdl
dENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCBjb21wdXRlZENhbGxiYWNrLmJpbmQodGhpcykp
OwotICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0SW5saW5lU3R5bGVzQXN5bmMobm9k
ZS5pZCwgaW5saW5lQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5j
c3NNb2RlbC5nZXRNYXRjaGVkU3R5bGVzQXN5bmMobm9kZS5pZCwgdHJ1ZSwgdHJ1ZSwgc3R5bGVz
Q2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
ZnVuY3Rpb24oKT19IHVzZXJDYWxsYmFjawotICAgICAqLwotICAgIF92YWxpZGF0ZU5vZGU6IGZ1
bmN0aW9uKHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5ub2RlKSB7Ci0g
ICAgICAgICAgICB0aGlzLl9zZWN0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZHJlbigpOwotICAg
ICAgICAgICAgdGhpcy5fY29tcHV0ZWRTdHlsZVBhbmUuYm9keUVsZW1lbnQucmVtb3ZlQ2hpbGRy
ZW4oKTsKLSAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMgPSB7fTsKLSAgICAgICAgICAgIGlmICh1
c2VyQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5ub2RlOwotICAg
IH0sCi0KLSAgICBfc3R5bGVTaGVldE9yTWVkaWFRdWVyeVJlc3VsdENoYW5nZWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl91c2VyT3BlcmF0aW9uIHx8IHRoaXMuX2lzRWRp
dGluZ1N0eWxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3JlYnVpbGRV
cGRhdGUoKTsKLSAgICB9LAotCi0gICAgX2F0dHJpYnV0ZUNoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgLy8gQW55IGF0dHJpYnV0ZSByZW1vdmFsIG9yIG1vZGlmaWNhdGlv
biBjYW4gYWZmZWN0IHRoZSBzdHlsZXMgb2YgInJlbGF0ZWQiIG5vZGVzLgotICAgICAgICAvLyBE
byBub3QgdG91Y2ggdGhlIHN0eWxlcyBpZiB0aGV5IGFyZSBiZWluZyBlZGl0ZWQuCi0gICAgICAg
IGlmICh0aGlzLl9pc0VkaXRpbmdTdHlsZSB8fCB0aGlzLl91c2VyT3BlcmF0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghdGhpcy5fY2FuQWZmZWN0Q3VycmVudFN0eWxl
cyhldmVudC5kYXRhLm5vZGUpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
X3JlYnVpbGRVcGRhdGUoKTsKLSAgICB9LAotCi0gICAgX2NhbkFmZmVjdEN1cnJlbnRTdHlsZXM6
IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5ub2RlICYmICh0aGlz
Lm5vZGUgPT09IG5vZGUgfHwgbm9kZS5wYXJlbnROb2RlID09PSB0aGlzLm5vZGUucGFyZW50Tm9k
ZSB8fCBub2RlLmlzQW5jZXN0b3IodGhpcy5ub2RlKSk7Ci0gICAgfSwKLQotICAgIF9pbm5lclJl
ZnJlc2hVcGRhdGU6IGZ1bmN0aW9uKG5vZGUsIGNvbXB1dGVkU3R5bGUsIGVkaXRlZFNlY3Rpb24p
Ci0gICAgewotICAgICAgICBmb3IgKHZhciBwc2V1ZG9JZCBpbiB0aGlzLnNlY3Rpb25zKSB7Ci0g
ICAgICAgICAgICB2YXIgc3R5bGVSdWxlcyA9IHRoaXMuX3JlZnJlc2hTdHlsZVJ1bGVzKHRoaXMu
c2VjdGlvbnNbcHNldWRvSWRdLCBjb21wdXRlZFN0eWxlKTsKLSAgICAgICAgICAgIHZhciB1c2Vk
UHJvcGVydGllcyA9IHt9OwotICAgICAgICAgICAgdGhpcy5fbWFya1VzZWRQcm9wZXJ0aWVzKHN0
eWxlUnVsZXMsIHVzZWRQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hTZWN0
aW9uc0ZvclN0eWxlUnVsZXMoc3R5bGVSdWxlcywgdXNlZFByb3BlcnRpZXMsIGVkaXRlZFNlY3Rp
b24pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb21wdXRlZFN0eWxlKQotICAgICAgICAgICAg
dGhpcy5zZWN0aW9uc1swXVswXS5yZWJ1aWxkQ29tcHV0ZWRUcmFjZSh0aGlzLnNlY3Rpb25zWzBd
KTsKLQotICAgICAgICB0aGlzLl9ub2RlU3R5bGVzVXBkYXRlZEZvclRlc3Qobm9kZSwgZmFsc2Up
OwotICAgIH0sCi0KLSAgICBfaW5uZXJSZWJ1aWxkVXBkYXRlOiBmdW5jdGlvbihub2RlLCBzdHls
ZXMpCi0gICAgewotICAgICAgICB0aGlzLl9zZWN0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZHJl
bigpOwotICAgICAgICB0aGlzLl9jb21wdXRlZFN0eWxlUGFuZS5ib2R5RWxlbWVudC5yZW1vdmVD
aGlsZHJlbigpOwotICAgICAgICB0aGlzLl9saW5raWZpZXIucmVzZXQoKTsKLQotICAgICAgICB2
YXIgc3R5bGVSdWxlcyA9IHRoaXMuX3JlYnVpbGRTdHlsZVJ1bGVzKG5vZGUsIHN0eWxlcyk7Ci0g
ICAgICAgIHZhciB1c2VkUHJvcGVydGllcyA9IHt9OwotICAgICAgICB0aGlzLl9tYXJrVXNlZFBy
b3BlcnRpZXMoc3R5bGVSdWxlcywgdXNlZFByb3BlcnRpZXMpOwotICAgICAgICB0aGlzLnNlY3Rp
b25zWzBdID0gdGhpcy5fcmVidWlsZFNlY3Rpb25zRm9yU3R5bGVSdWxlcyhzdHlsZVJ1bGVzLCB1
c2VkUHJvcGVydGllcywgMCwgbnVsbCk7Ci0gICAgICAgIHZhciBhbmNob3JFbGVtZW50ID0gdGhp
cy5zZWN0aW9uc1swXS5pbmhlcml0ZWRQcm9wZXJ0aWVzU2VwYXJhdG9yRWxlbWVudDsKLQotICAg
ICAgICBpZiAoc3R5bGVzLmNvbXB1dGVkU3R5bGUpCi0gICAgICAgICAgICB0aGlzLnNlY3Rpb25z
WzBdWzBdLnJlYnVpbGRDb21wdXRlZFRyYWNlKHRoaXMuc2VjdGlvbnNbMF0pOwotCi0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLnBzZXVkb0VsZW1lbnRzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICB2YXIgcHNldWRvRWxlbWVudENTU1J1bGVzID0gc3R5bGVzLnBzZXVkb0Vs
ZW1lbnRzW2ldOwotCi0gICAgICAgICAgICBzdHlsZVJ1bGVzID0gW107Ci0gICAgICAgICAgICB2
YXIgcHNldWRvSWQgPSBwc2V1ZG9FbGVtZW50Q1NTUnVsZXMucHNldWRvSWQ7Ci0KLSAgICAgICAg
ICAgIHZhciBlbnRyeSA9IHsgaXNTdHlsZVNlcGFyYXRvcjogdHJ1ZSwgcHNldWRvSWQ6IHBzZXVk
b0lkIH07Ci0gICAgICAgICAgICBzdHlsZVJ1bGVzLnB1c2goZW50cnkpOwotCi0gICAgICAgICAg
ICAvLyBBZGQgcnVsZXMgaW4gcmV2ZXJzZSBvcmRlciB0byBtYXRjaCB0aGUgY2FzY2FkZSBvcmRl
ci4KLSAgICAgICAgICAgIGZvciAodmFyIGogPSBwc2V1ZG9FbGVtZW50Q1NTUnVsZXMucnVsZXMu
bGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHsKLSAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHBz
ZXVkb0VsZW1lbnRDU1NSdWxlcy5ydWxlc1tqXTsKLSAgICAgICAgICAgICAgICBzdHlsZVJ1bGVz
LnB1c2goeyBzdHlsZTogcnVsZS5zdHlsZSwgc2VsZWN0b3JUZXh0OiBydWxlLnNlbGVjdG9yVGV4
dCwgbWVkaWE6IHJ1bGUubWVkaWEsIHNvdXJjZVVSTDogcnVsZS5zb3VyY2VVUkwsIHJ1bGU6IHJ1
bGUsIGVkaXRhYmxlOiAhIShydWxlLnN0eWxlICYmIHJ1bGUuc3R5bGUuaWQpIH0pOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdXNlZFByb3BlcnRpZXMgPSB7fTsKLSAgICAgICAgICAgIHRo
aXMuX21hcmtVc2VkUHJvcGVydGllcyhzdHlsZVJ1bGVzLCB1c2VkUHJvcGVydGllcyk7Ci0gICAg
ICAgICAgICB0aGlzLnNlY3Rpb25zW3BzZXVkb0lkXSA9IHRoaXMuX3JlYnVpbGRTZWN0aW9uc0Zv
clN0eWxlUnVsZXMoc3R5bGVSdWxlcywgdXNlZFByb3BlcnRpZXMsIHBzZXVkb0lkLCBhbmNob3JF
bGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX25vZGVTdHlsZXNVcGRhdGVkRm9y
VGVzdChub2RlLCB0cnVlKTsKLSAgICB9LAotCi0gICAgX25vZGVTdHlsZXNVcGRhdGVkRm9yVGVz
dDogZnVuY3Rpb24obm9kZSwgcmVidWlsZCkKLSAgICB7Ci0gICAgICAgIC8vIFRlc3RzIG92ZXJy
aWRlIHRoaXMgbWV0aG9kLgotICAgIH0sCi0KLSAgICBfcmVmcmVzaFN0eWxlUnVsZXM6IGZ1bmN0
aW9uKHNlY3Rpb25zLCBjb21wdXRlZFN0eWxlKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVDb21w
dXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKLSAgICAgICAgdmFyIHN0eWxlUnVsZXMgPSBbXTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IHNlY3Rpb25zICYmIGkgPCBzZWN0aW9ucy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBzZWN0aW9uc1tpXTsKLSAgICAgICAg
ICAgIGlmIChzZWN0aW9uLmlzQmxhbmspCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAoc2VjdGlvbi5jb21wdXRlZFN0eWxlKQotICAgICAgICAgICAgICAgIHNlY3Rp
b24uc3R5bGVSdWxlLnN0eWxlID0gbm9kZUNvbXB1dGVkU3R5bGU7Ci0gICAgICAgICAgICB2YXIg
c3R5bGVSdWxlID0geyBzZWN0aW9uOiBzZWN0aW9uLCBzdHlsZTogc2VjdGlvbi5zdHlsZVJ1bGUu
c3R5bGUsIGNvbXB1dGVkU3R5bGU6IHNlY3Rpb24uY29tcHV0ZWRTdHlsZSwgcnVsZTogc2VjdGlv
bi5ydWxlLCBlZGl0YWJsZTogISEoc2VjdGlvbi5zdHlsZVJ1bGUuc3R5bGUgJiYgc2VjdGlvbi5z
dHlsZVJ1bGUuc3R5bGUuaWQpLCBpc0F0dHJpYnV0ZTogc2VjdGlvbi5zdHlsZVJ1bGUuaXNBdHRy
aWJ1dGUsIGlzSW5oZXJpdGVkOiBzZWN0aW9uLnN0eWxlUnVsZS5pc0luaGVyaXRlZCB9OwotICAg
ICAgICAgICAgc3R5bGVSdWxlcy5wdXNoKHN0eWxlUnVsZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHN0eWxlUnVsZXM7Ci0gICAgfSwKLQotICAgIF9yZWJ1aWxkU3R5bGVSdWxlczogZnVu
Y3Rpb24obm9kZSwgc3R5bGVzKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVDb21wdXRlZFN0eWxl
ID0gc3R5bGVzLmNvbXB1dGVkU3R5bGU7Ci0gICAgICAgIHRoaXMuc2VjdGlvbnMgPSB7fTsKLQot
ICAgICAgICB2YXIgc3R5bGVSdWxlcyA9IFtdOwotCi0gICAgICAgIGZ1bmN0aW9uIGFkZEF0dHJp
YnV0ZXNTdHlsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc3R5bGVzLmF0dHJpYnV0
ZXNTdHlsZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2YXIgYXR0clN0
eWxlID0geyBzdHlsZTogc3R5bGVzLmF0dHJpYnV0ZXNTdHlsZSwgZWRpdGFibGU6IGZhbHNlIH07
Ci0gICAgICAgICAgICBhdHRyU3R5bGUuc2VsZWN0b3JUZXh0ID0gbm9kZS5ub2RlTmFtZUluQ29y
cmVjdENhc2UoKSArICJbIiArIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQXR0cmlidXRlcyBTdHls
ZSIpICsgIl0iOwotICAgICAgICAgICAgc3R5bGVSdWxlcy5wdXNoKGF0dHJTdHlsZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzdHlsZVJ1bGVzLnB1c2goeyBjb21wdXRlZFN0eWxlOiB0cnVlLCBz
ZWxlY3RvclRleHQ6ICIiLCBzdHlsZTogbm9kZUNvbXB1dGVkU3R5bGUsIGVkaXRhYmxlOiBmYWxz
ZSB9KTsKLQotICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaGFzIHRoZSBncmVhdGVzdCBzcGVjaWZp
Y2l0eS4KLSAgICAgICAgaWYgKHN0eWxlcy5pbmxpbmVTdHlsZSAmJiBub2RlLm5vZGVUeXBlKCkg
PT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICB2YXIgaW5saW5lU3R5bGUgPSB7
IHNlbGVjdG9yVGV4dDogImVsZW1lbnQuc3R5bGUiLCBzdHlsZTogc3R5bGVzLmlubGluZVN0eWxl
LCBpc0F0dHJpYnV0ZTogdHJ1ZSB9OwotICAgICAgICAgICAgc3R5bGVSdWxlcy5wdXNoKGlubGlu
ZVN0eWxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFkZCBydWxlcyBpbiByZXZlcnNlIG9y
ZGVyIHRvIG1hdGNoIHRoZSBjYXNjYWRlIG9yZGVyLgotICAgICAgICBpZiAoc3R5bGVzLm1hdGNo
ZWRDU1NSdWxlcy5sZW5ndGgpCi0gICAgICAgICAgICBzdHlsZVJ1bGVzLnB1c2goeyBpc1N0eWxl
U2VwYXJhdG9yOiB0cnVlLCB0ZXh0OiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk1hdGNoZWQgQ1NT
IFJ1bGVzIikgfSk7Ci0gICAgICAgIHZhciBhZGRlZEF0dHJpYnV0ZXNTdHlsZTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IHN0eWxlcy5tYXRjaGVkQ1NTUnVsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAt
LWkpIHsKLSAgICAgICAgICAgIHZhciBydWxlID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlc1tpXTsK
LSAgICAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNob3dVc2VyQWdlbnRTdHls
ZXMuZ2V0KCkgJiYgKHJ1bGUuaXNVc2VyIHx8IHJ1bGUuaXNVc2VyQWdlbnQpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKChydWxlLmlzVXNlciB8fCBydWxlLmlz
VXNlckFnZW50KSAmJiAhYWRkZWRBdHRyaWJ1dGVzU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAv
LyBTaG93IGVsZW1lbnQncyBTdHlsZSBBdHRyaWJ1dGVzIGFmdGVyIGFsbCBhdXRob3IgcnVsZXMu
Ci0gICAgICAgICAgICAgICAgYWRkZWRBdHRyaWJ1dGVzU3R5bGUgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGFkZEF0dHJpYnV0ZXNTdHlsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
c3R5bGVSdWxlcy5wdXNoKHsgc3R5bGU6IHJ1bGUuc3R5bGUsIHNlbGVjdG9yVGV4dDogcnVsZS5z
ZWxlY3RvclRleHQsIG1lZGlhOiBydWxlLm1lZGlhLCBzb3VyY2VVUkw6IHJ1bGUuc291cmNlVVJM
LCBydWxlOiBydWxlLCBlZGl0YWJsZTogISEocnVsZS5zdHlsZSAmJiBydWxlLnN0eWxlLmlkKSB9
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghYWRkZWRBdHRyaWJ1dGVzU3R5bGUpCi0gICAg
ICAgICAgICBhZGRBdHRyaWJ1dGVzU3R5bGUoKTsKLQotICAgICAgICAvLyBXYWxrIHRoZSBub2Rl
IHN0cnVjdHVyZSBhbmQgaWRlbnRpZnkgc3R5bGVzIHdpdGggaW5oZXJpdGVkIHByb3BlcnRpZXMu
Ci0gICAgICAgIHZhciBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlOwotICAgICAgICBmdW5j
dGlvbiBpbnNlcnRJbmhlcml0ZWROb2RlU2VwYXJhdG9yKG5vZGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZhciBlbnRyeSA9IHt9OwotICAgICAgICAgICAgZW50cnkuaXNTdHlsZVNlcGFyYXRv
ciA9IHRydWU7Ci0gICAgICAgICAgICBlbnRyeS5ub2RlID0gbm9kZTsKLSAgICAgICAgICAgIHN0
eWxlUnVsZXMucHVzaChlbnRyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBwYXJl
bnRPcmRpbmFsID0gMDsgcGFyZW50T3JkaW5hbCA8IHN0eWxlcy5pbmhlcml0ZWQubGVuZ3RoOyAr
K3BhcmVudE9yZGluYWwpIHsKLSAgICAgICAgICAgIHZhciBwYXJlbnRTdHlsZXMgPSBzdHlsZXMu
aW5oZXJpdGVkW3BhcmVudE9yZGluYWxdOwotICAgICAgICAgICAgdmFyIHNlcGFyYXRvckluc2Vy
dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAocGFyZW50U3R5bGVzLmlubGluZVN0eWxlKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5zSW5oZXJpdGVkKHBhcmVudFN0eWxl
cy5pbmxpbmVTdHlsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGlubGluZVN0eWxlID0g
eyBzZWxlY3RvclRleHQ6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3R5bGUgQXR0cmlidXRlIiks
IHN0eWxlOiBwYXJlbnRTdHlsZXMuaW5saW5lU3R5bGUsIGlzQXR0cmlidXRlOiB0cnVlLCBpc0lu
aGVyaXRlZDogdHJ1ZSwgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSB9OwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXNlcGFyYXRvckluc2VydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRJbmhlcml0ZWROb2RlU2VwYXJhdG9yKHBhcmVudE5vZGUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VwYXJhdG9ySW5zZXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlUnVsZXMucHVzaChpbmxpbmVTdHlsZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0g
cGFyZW50U3R5bGVzLm1hdGNoZWRDU1NSdWxlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewot
ICAgICAgICAgICAgICAgIHZhciBydWxlUGF5bG9hZCA9IHBhcmVudFN0eWxlcy5tYXRjaGVkQ1NT
UnVsZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jb250YWluc0luaGVyaXRlZChy
dWxlUGF5bG9hZC5zdHlsZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIHZhciBydWxlID0gcnVsZVBheWxvYWQ7Ci0gICAgICAgICAgICAgICAgaWYgKCFX
ZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd1VzZXJBZ2VudFN0eWxlcy5nZXQoKSAmJiAocnVsZS5p
c1VzZXIgfHwgcnVsZS5pc1VzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFzZXBhcmF0b3JJbnNlcnRlZCkgewotICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRJbmhlcml0ZWROb2RlU2VwYXJhdG9yKHBhcmVudE5vZGUpOwotICAg
ICAgICAgICAgICAgICAgICBzZXBhcmF0b3JJbnNlcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHN0eWxlUnVsZXMucHVzaCh7IHN0eWxlOiBydWxlLnN0eWxl
LCBzZWxlY3RvclRleHQ6IHJ1bGUuc2VsZWN0b3JUZXh0LCBtZWRpYTogcnVsZS5tZWRpYSwgc291
cmNlVVJMOiBydWxlLnNvdXJjZVVSTCwgcnVsZTogcnVsZSwgaXNJbmhlcml0ZWQ6IHRydWUsIHBh
cmVudE5vZGU6IHBhcmVudE5vZGUsIGVkaXRhYmxlOiAhIShydWxlLnN0eWxlICYmIHJ1bGUuc3R5
bGUuaWQpIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVu
dE5vZGUucGFyZW50Tm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3R5bGVSdWxlczsK
LSAgICB9LAotCi0gICAgX21hcmtVc2VkUHJvcGVydGllczogZnVuY3Rpb24oc3R5bGVSdWxlcywg
dXNlZFByb3BlcnRpZXMpCi0gICAgewotICAgICAgICB2YXIgZm91bmRJbXBvcnRhbnRQcm9wZXJ0
aWVzID0ge307Ci0gICAgICAgIHZhciBwcm9wZXJ0eVRvRWZmZWN0aXZlUnVsZSA9IHt9OwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlUnVsZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBzdHlsZVJ1bGUgPSBzdHlsZVJ1bGVzW2ldOwotICAgICAgICAgICAgaWYgKHN0
eWxlUnVsZS5jb21wdXRlZFN0eWxlIHx8IHN0eWxlUnVsZS5pc1N0eWxlU2VwYXJhdG9yKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHN0eWxlUnVsZS5zZWN0aW9u
ICYmIHN0eWxlUnVsZS5zZWN0aW9uLm5vQWZmZWN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICBzdHlsZVJ1bGUudXNlZFByb3BlcnRpZXMgPSB7fTsKLQotICAgICAg
ICAgICAgdmFyIHN0eWxlID0gc3R5bGVSdWxlLnN0eWxlOwotICAgICAgICAgICAgdmFyIGFsbFBy
b3BlcnRpZXMgPSBzdHlsZS5hbGxQcm9wZXJ0aWVzOwotICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHByb3BlcnR5ID0gYWxsUHJvcGVydGllc1tqXTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3Bl
cnR5LmlzTGl2ZSB8fCAhcHJvcGVydHkucGFyc2VkT2spCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICAgICAgdmFyIGNhbm9uaWNhbE5hbWUgPSBXZWJJbnNwZWN0
b3IuU3R5bGVzU2lkZWJhclBhbmUuY2Fub25pY2FsUHJvcGVydHlOYW1lKHByb3BlcnR5Lm5hbWUp
OwotICAgICAgICAgICAgICAgIC8vIERvIG5vdCBwaWNrIG5vbi1pbmhlcml0ZWQgcHJvcGVydGll
cyBmcm9tIGluaGVyaXRlZCBzdHlsZXMuCi0gICAgICAgICAgICAgICAgaWYgKHN0eWxlUnVsZS5p
c0luaGVyaXRlZCAmJiAhV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLkluaGVyaXRlZFByb3BlcnRp
ZXNbY2Fub25pY2FsTmFtZV0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGZvdW5kSW1wb3J0YW50UHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShj
YW5vbmljYWxOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgaXNJbXBvcnRhbnQgPSBwcm9wZXJ0eS5wcmlvcml0eS5sZW5ndGg7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpc0ltcG9ydGFudCAmJiB1c2VkUHJvcGVydGllcy5oYXNPd25Qcm9w
ZXJ0eShjYW5vbmljYWxOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaXNJbXBvcnRhbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91
bmRJbXBvcnRhbnRQcm9wZXJ0aWVzW2Nhbm9uaWNhbE5hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5VG9FZmZlY3RpdmVSdWxlLmhhc093blByb3BlcnR5KGNhbm9u
aWNhbE5hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BlcnR5VG9FZmZl
Y3RpdmVSdWxlW2Nhbm9uaWNhbE5hbWVdLnVzZWRQcm9wZXJ0aWVzW2Nhbm9uaWNhbE5hbWVdOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0eWxlUnVsZS51c2VkUHJvcGVy
dGllc1tjYW5vbmljYWxOYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdXNlZFByb3BlcnRp
ZXNbY2Fub25pY2FsTmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgICAgIHByb3BlcnR5VG9FZmZl
Y3RpdmVSdWxlW2Nhbm9uaWNhbE5hbWVdID0gc3R5bGVSdWxlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoU2VjdGlvbnNGb3JTdHlsZVJ1bGVzOiBmdW5j
dGlvbihzdHlsZVJ1bGVzLCB1c2VkUHJvcGVydGllcywgZWRpdGVkU2VjdGlvbikKLSAgICB7Ci0g
ICAgICAgIC8vIFdhbGsgdGhlIHN0eWxlIHJ1bGVzIGFuZCB1cGRhdGUgdGhlIHNlY3Rpb25zIHdp
dGggbmV3IG92ZXJsb2FkZWQgYW5kIHVzZWQgcHJvcGVydGllcy4KLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzdHlsZVJ1bGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgc3R5
bGVSdWxlID0gc3R5bGVSdWxlc1tpXTsKLSAgICAgICAgICAgIHZhciBzZWN0aW9uID0gc3R5bGVS
dWxlLnNlY3Rpb247Ci0gICAgICAgICAgICBpZiAoc3R5bGVSdWxlLmNvbXB1dGVkU3R5bGUpIHsK
LSAgICAgICAgICAgICAgICBzZWN0aW9uLl91c2VkUHJvcGVydGllcyA9IHVzZWRQcm9wZXJ0aWVz
OwotICAgICAgICAgICAgICAgIHNlY3Rpb24udXBkYXRlKCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHNlY3Rpb24uX3VzZWRQcm9wZXJ0aWVzID0gc3R5bGVSdWxlLnVz
ZWRQcm9wZXJ0aWVzOwotICAgICAgICAgICAgICAgIHNlY3Rpb24udXBkYXRlKHNlY3Rpb24gPT09
IGVkaXRlZFNlY3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IF9yZWJ1aWxkU2VjdGlvbnNGb3JTdHlsZVJ1bGVzOiBmdW5jdGlvbihzdHlsZVJ1bGVzLCB1c2Vk
UHJvcGVydGllcywgcHNldWRvSWQsIGFuY2hvckVsZW1lbnQpCi0gICAgewotICAgICAgICAvLyBN
YWtlIGEgcHJvcGVydHkgc2VjdGlvbiBmb3IgZWFjaCBzdHlsZSBydWxlLgotICAgICAgICB2YXIg
c2VjdGlvbnMgPSBbXTsKLSAgICAgICAgdmFyIGxhc3RXYXNTZXBhcmF0b3IgPSB0cnVlOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlUnVsZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBzdHlsZVJ1bGUgPSBzdHlsZVJ1bGVzW2ldOwotICAgICAgICAgICAgaWYgKHN0
eWxlUnVsZS5pc1N0eWxlU2VwYXJhdG9yKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlcGFyYXRv
ckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAg
ICBzZXBhcmF0b3JFbGVtZW50LmNsYXNzTmFtZSA9ICJzaWRlYmFyLXNlcGFyYXRvciI7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0eWxlUnVsZS5ub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBsaW5rID0gV2ViSW5zcGVjdG9yLkRPTVByZXNlbnRhdGlvblV0aWxzLmxpbmtpZnlOb2RlUmVm
ZXJlbmNlKHN0eWxlUnVsZS5ub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yRWxl
bWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkluaGVyaXRlZCBmcm9tIikgKyAiICIpKTsKLSAgICAgICAgICAgICAgICAgICAgc2Vw
YXJhdG9yRWxlbWVudC5hcHBlbmRDaGlsZChsaW5rKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFzZWN0aW9ucy5pbmhlcml0ZWRQcm9wZXJ0aWVzU2VwYXJhdG9yRWxlbWVudCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNlY3Rpb25zLmluaGVyaXRlZFByb3BlcnRpZXNTZXBhcmF0b3JFbGVt
ZW50ID0gc2VwYXJhdG9yRWxlbWVudDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJwc2V1
ZG9JZCIgaW4gc3R5bGVSdWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwc2V1ZG9OYW1l
ID0gV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLlBzZXVkb0lkTmFtZXNbc3R5bGVSdWxl
LnBzZXVkb0lkXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBzZXVkb05hbWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZXBhcmF0b3JFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJQc2V1ZG8gOjolcyBlbGVtZW50IiwgcHNldWRvTmFtZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvckVsZW1l
bnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBzZXVkbyBlbGVtZW50Iik7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvckVs
ZW1lbnQudGV4dENvbnRlbnQgPSBzdHlsZVJ1bGUudGV4dDsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9zZWN0aW9uc0NvbnRhaW5lci5pbnNlcnRCZWZvcmUoc2VwYXJhdG9yRWxlbWVudCwgYW5jaG9y
RWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgbGFzdFdhc1NlcGFyYXRvciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgY29t
cHV0ZWRTdHlsZSA9IHN0eWxlUnVsZS5jb21wdXRlZFN0eWxlOwotCi0gICAgICAgICAgICAvLyBE
ZWZhdWx0IGVkaXRhYmxlIHRvIHRydWUgaWYgaXQgd2FzIG9taXR0ZWQuCi0gICAgICAgICAgICB2
YXIgZWRpdGFibGUgPSBzdHlsZVJ1bGUuZWRpdGFibGU7Ci0gICAgICAgICAgICBpZiAodHlwZW9m
IGVkaXRhYmxlID09PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgICAgICBlZGl0YWJsZSA9IHRy
dWU7Ci0KLSAgICAgICAgICAgIGlmIChjb21wdXRlZFN0eWxlKQotICAgICAgICAgICAgICAgIHZh
ciBzZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlUHJvcGVydGllc1NlY3Rp
b24odGhpcywgc3R5bGVSdWxlLCB1c2VkUHJvcGVydGllcyk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9w
ZXJ0aWVzU2VjdGlvbih0aGlzLCBzdHlsZVJ1bGUsIGVkaXRhYmxlLCBzdHlsZVJ1bGUuaXNJbmhl
cml0ZWQsIGxhc3RXYXNTZXBhcmF0b3IpOwotICAgICAgICAgICAgICAgIHNlY3Rpb24uX21hcmtT
ZWxlY3Rvck1hdGNoZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlY3Rpb24uZXhw
YW5kZWQgPSB0cnVlOwotCi0gICAgICAgICAgICBpZiAoY29tcHV0ZWRTdHlsZSkgewotICAgICAg
ICAgICAgICAgIHRoaXMuX2NvbXB1dGVkU3R5bGVQYW5lLmJvZHlFbGVtZW50LmFwcGVuZENoaWxk
KHNlY3Rpb24uZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgbGFzdFdhc1NlcGFyYXRvciA9IHRy
dWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuX3NlY3Rpb25z
Q29udGFpbmVyLmluc2VydEJlZm9yZShzZWN0aW9uLmVsZW1lbnQsIGFuY2hvckVsZW1lbnQpOwot
ICAgICAgICAgICAgICAgIGxhc3RXYXNTZXBhcmF0b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHNlY3Rpb25zLnB1c2goc2VjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHNlY3Rpb25zOwotICAgIH0sCi0KLSAgICBfY29udGFpbnNJbmhlcml0ZWQ6IGZ1bmN0
aW9uKHN0eWxlKQotICAgIHsKLSAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBzdHlsZS5hbGxQcm9w
ZXJ0aWVzOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07Ci0gICAgICAg
ICAgICAvLyBEb2VzIHRoaXMgc3R5bGUgY29udGFpbiBub24tb3ZlcnJpZGRlbiBpbmhlcml0ZWQg
cHJvcGVydHk/Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkuaXNMaXZlICYmIHByb3BlcnR5Lm5h
bWUgaW4gV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLkluaGVyaXRlZFByb3BlcnRpZXMpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0sCi0KLSAgICBfY29sb3JGb3JtYXRTZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVDb2xvckZvcm1hdEZpbHRlcigpOwotICAg
ICAgICBmb3IgKHZhciBwc2V1ZG9JZCBpbiB0aGlzLnNlY3Rpb25zKSB7Ci0gICAgICAgICAgICB2
YXIgc2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zW3BzZXVkb0lkXTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgc2Vj
dGlvbnNbaV0udXBkYXRlKHRydWUpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF91cGRhdGVD
b2xvckZvcm1hdEZpbHRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gU2VsZWN0IHRo
ZSBjb3JyZWN0IGNvbG9yIGZvcm1hdCBzZXR0aW5nIGFnYWluLCBzaW5jZSBpdCBuZWVkcyB0byBi
ZSBzZWxlY3RlZC4KLSAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSAwOwotICAgICAgICB2YXIg
dmFsdWUgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29sb3JGb3JtYXQuZ2V0KCk7Ci0gICAgICAg
IHZhciBvcHRpb25zID0gdGhpcy5zZXR0aW5nc1NlbGVjdEVsZW1lbnQub3B0aW9uczsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAob3B0aW9uc1tpXS52YWx1ZSA9PT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzZWxl
Y3RlZEluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICB0aGlzLnNldHRpbmdzU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4
ID0gc2VsZWN0ZWRJbmRleDsKLSAgICB9LAotCi0gICAgX2NoYW5nZVNldHRpbmc6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLnNldHRpbmdzU2VsZWN0
RWxlbWVudC5vcHRpb25zOwotICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zW3Ro
aXMuc2V0dGluZ3NTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXhdOwotICAgICAgICBXZWJJbnNw
ZWN0b3Iuc2V0dGluZ3MuY29sb3JGb3JtYXQuc2V0KHNlbGVjdGVkT3B0aW9uLnZhbHVlKTsKLSAg
ICB9LAotCi0gICAgX2NyZWF0ZU5ld1J1bGU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgZXZlbnQuY29uc3VtZSgpOwotICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgICAgICB0aGlz
LmFkZEJsYW5rU2VjdGlvbigpLnN0YXJ0RWRpdGluZ1NlbGVjdG9yKCk7Ci0gICAgfSwKLQotICAg
IGFkZEJsYW5rU2VjdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGJsYW5rU2Vj
dGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uKHRoaXMs
IHRoaXMubm9kZSA/IHRoaXMubm9kZS5hcHByb3ByaWF0ZVNlbGVjdG9yRm9yKHRydWUpIDogIiIp
OwotCi0gICAgICAgIHZhciBlbGVtZW50U3R5bGVTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1swXVsx
XTsKLSAgICAgICAgdGhpcy5fc2VjdGlvbnNDb250YWluZXIuaW5zZXJ0QmVmb3JlKGJsYW5rU2Vj
dGlvbi5lbGVtZW50LCBlbGVtZW50U3R5bGVTZWN0aW9uLmVsZW1lbnQubmV4dFNpYmxpbmcpOwot
Ci0gICAgICAgIHRoaXMuc2VjdGlvbnNbMF0uc3BsaWNlKDIsIDAsIGJsYW5rU2VjdGlvbik7Ci0K
LSAgICAgICAgcmV0dXJuIGJsYW5rU2VjdGlvbjsKLSAgICB9LAotCi0gICAgcmVtb3ZlU2VjdGlv
bjogZnVuY3Rpb24oc2VjdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIHBzZXVkb0lkIGlu
IHRoaXMuc2VjdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBzZWN0aW9ucyA9IHRoaXMuc2VjdGlv
bnNbcHNldWRvSWRdOwotICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VjdGlvbnMuaW5kZXhPZihz
ZWN0aW9uKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAg
ICAgICAgaWYgKHNlY3Rpb24uZWxlbWVudC5wYXJlbnROb2RlKQotICAgICAgICAgICAgICAgIHNl
Y3Rpb24uZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlY3Rpb24uZWxlbWVudCk7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgX3RvZ2dsZUVsZW1lbnRTdGF0ZVBhbmU6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgZXZlbnQuY29uc3VtZSgpOwotICAgICAgICBpZiAoIXRo
aXMuX2VsZW1lbnRTdGF0ZUJ1dHRvbi5oYXNTdHlsZUNsYXNzKCJ0b2dnbGVkIikpIHsKLSAgICAg
ICAgICAgIHRoaXMuZXhwYW5kKCk7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50U3RhdGVCdXR0
b24uYWRkU3R5bGVDbGFzcygidG9nZ2xlZCIpOwotICAgICAgICAgICAgdGhpcy5fZWxlbWVudFN0
YXRlUGFuZS5hZGRTdHlsZUNsYXNzKCJleHBhbmRlZCIpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdGhpcy5fZWxlbWVudFN0YXRlQnV0dG9uLnJlbW92ZVN0eWxlQ2xhc3MoInRvZ2ds
ZWQiKTsKLSAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRTdGF0ZVBhbmUucmVtb3ZlU3R5bGVDbGFz
cygiZXhwYW5kZWQiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfY3JlYXRlRWxlbWVudFN0
YXRlUGFuZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZWxlbWVudFN0YXRlUGFu
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICB0aGlzLl9lbGVtZW50
U3RhdGVQYW5lLmNsYXNzTmFtZSA9ICJzdHlsZXMtZWxlbWVudC1zdGF0ZS1wYW5lIHNvdXJjZS1j
b2RlIjsKLSAgICAgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUi
KTsKLQotICAgICAgICB2YXIgaW5wdXRzID0gW107Ci0gICAgICAgIHRoaXMuX2VsZW1lbnRTdGF0
ZVBhbmUuaW5wdXRzID0gaW5wdXRzOwotCi0gICAgICAgIGZ1bmN0aW9uIGNsaWNrTGlzdGVuZXIo
ZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5fdmFsaWRhdGVO
b2RlKCk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgdGhpcy5fc2V0UHNldWRvQ2xhc3NDYWxsYmFjayhub2RlLmlkLCBldmVudC50
YXJnZXQuc3RhdGUsIGV2ZW50LnRhcmdldC5jaGVja2VkKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGNyZWF0ZUNoZWNrYm94KHN0YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICAgICAgdmFyIGxh
YmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKLSAgICAgICAgICAgIHZhciBp
bnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgICAgICBpbnB1
dC50eXBlID0gImNoZWNrYm94IjsKLSAgICAgICAgICAgIGlucHV0LnN0YXRlID0gc3RhdGU7Ci0g
ICAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGNsaWNrTGlzdGVuZXIu
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICAgICAgaW5wdXRzLnB1c2goaW5wdXQpOwotICAg
ICAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQoaW5wdXQpOwotICAgICAgICAgICAgbGFiZWwuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjoiICsgc3RhdGUpKTsKLSAgICAgICAg
ICAgIHRkLmFwcGVuZENoaWxkKGxhYmVsKTsKLSAgICAgICAgICAgIHJldHVybiB0ZDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0g
ICAgICAgIHRyLmFwcGVuZENoaWxkKGNyZWF0ZUNoZWNrYm94LmNhbGwodGhpcywgImFjdGl2ZSIp
KTsKLSAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY3JlYXRlQ2hlY2tib3guY2FsbCh0aGlzLCAiaG92
ZXIiKSk7Ci0gICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTsKLQotICAgICAgICB0ciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAgICAgIHRyLmFwcGVuZENoaWxkKGNyZWF0
ZUNoZWNrYm94LmNhbGwodGhpcywgImZvY3VzIikpOwotICAgICAgICB0ci5hcHBlbmRDaGlsZChj
cmVhdGVDaGVja2JveC5jYWxsKHRoaXMsICJ2aXNpdGVkIikpOwotICAgICAgICB0YWJsZS5hcHBl
bmRDaGlsZCh0cik7Ci0KLSAgICAgICAgdGhpcy5fZWxlbWVudFN0YXRlUGFuZS5hcHBlbmRDaGls
ZCh0YWJsZSk7Ci0gICAgfSwKLQotICAgIF9zaG93VXNlckFnZW50U3R5bGVzU2V0dGluZ0NoYW5n
ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlYnVpbGRVcGRhdGUoKTsKLSAg
ICB9LAotCi0gICAgd2lsbEhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nw
ZWN0cnVtSGVscGVyLmhpZGUoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuU2lkZWJhclBhbmUucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lfQotICovCi1XZWJJbnNwZWN0b3IuQ29t
cHV0ZWRTdHlsZVNpZGViYXJQYW5lID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5T
aWRlYmFyUGFuZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29tcHV0ZWQgU3R5
bGUiKSk7Ci0gICAgdmFyIHNob3dJbmhlcml0ZWRDaGVja2JveCA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q2hlY2tib3goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGluaGVyaXRlZCIpLCAic2lkZWJh
ci1wYW5lLXN1YnRpdGxlIik7Ci0gICAgdGhpcy50aXRsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2hv
d0luaGVyaXRlZENoZWNrYm94LmVsZW1lbnQpOwotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5zZXR0
aW5ncy5zaG93SW5oZXJpdGVkQ29tcHV0ZWRTdHlsZVByb3BlcnRpZXMuZ2V0KCkpIHsKLSAgICAg
ICAgdGhpcy5ib2R5RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaG93LWluaGVyaXRlZCIpOwotICAg
ICAgICBzaG93SW5oZXJpdGVkQ2hlY2tib3guY2hlY2tlZCA9IHRydWU7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gc2hvd0luaGVyaXRlZFRvZ2dsZUZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNob3dJbmhlcml0ZWRDb21wdXRlZFN0eWxlUHJvcGVy
dGllcy5zZXQoc2hvd0luaGVyaXRlZENoZWNrYm94LmNoZWNrZWQpOwotICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLnNldHRpbmdzLnNob3dJbmhlcml0ZWRDb21wdXRlZFN0eWxlUHJvcGVydGllcy5n
ZXQoKSkKLSAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2hvdy1p
bmhlcml0ZWQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5y
ZW1vdmVTdHlsZUNsYXNzKCJzaG93LWluaGVyaXRlZCIpOwotICAgIH0KLQotICAgIHNob3dJbmhl
cml0ZWRDaGVja2JveC5hZGRFdmVudExpc3RlbmVyKHNob3dJbmhlcml0ZWRUb2dnbGVGdW5jdGlv
bi5iaW5kKHRoaXMpKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNvbXB1dGVkU3R5bGVTaWRlYmFyUGFu
ZS5wcm90b3R5cGUgPSB7Ci0gICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5wcm90b3R5cGUud2FzU2hvd24uY2FsbCh0aGlzKTsK
LSAgICAgICAgaWYgKCF0aGlzLl9oYXNGcmVzaENvbnRlbnQpCi0gICAgICAgICAgICB0aGlzLnBy
ZXBhcmVDb250ZW50KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oKT19IGNhbGxiYWNrCi0gICAgICovCi0gICAgcHJlcGFyZUNvbnRlbnQ6IGZ1bmN0aW9uKGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gd3JhcHBlZENhbGxiYWNrKCkgewotICAg
ICAgICAgICAgdGhpcy5faGFzRnJlc2hDb250ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChj
YWxsYmFjaykKLSAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2hhc0ZyZXNoQ29udGVudDsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9zdHlsZXNT
aWRlYmFyUGFuZS5fcmVmcmVzaFVwZGF0ZShudWxsLCB0cnVlLCB3cmFwcGVkQ2FsbGJhY2suYmlu
ZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlNpZGViYXJQ
YW5lLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbn0KLSAqLwotV2ViSW5zcGVjdG9yLlN0eWxlUHJv
cGVydGllc1NlY3Rpb24gPSBmdW5jdGlvbihwYXJlbnRQYW5lLCBzdHlsZVJ1bGUsIGVkaXRhYmxl
LCBpc0luaGVyaXRlZCwgaXNGaXJzdFNlY3Rpb24pCi17Ci0gICAgV2ViSW5zcGVjdG9yLlByb3Bl
cnRpZXNTZWN0aW9uLmNhbGwodGhpcywgIiIpOwotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUg
PSAic3R5bGVzLXNlY3Rpb24gbWF0Y2hlZC1zdHlsZXMgbW9ub3NwYWNlIiArIChpc0ZpcnN0U2Vj
dGlvbiA/ICIgZmlyc3Qtc3R5bGVzLXNlY3Rpb24iIDogIiIpOwotCi0gICAgaWYgKHN0eWxlUnVs
ZS5tZWRpYSkgewotICAgICAgICBmb3IgKHZhciBpID0gc3R5bGVSdWxlLm1lZGlhLmxlbmd0aCAt
IDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICB2YXIgbWVkaWEgPSBzdHlsZVJ1bGUubWVk
aWFbaV07Ci0gICAgICAgICAgICB2YXIgbWVkaWFEYXRhRWxlbWVudCA9IHRoaXMudGl0bGVFbGVt
ZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAibWVkaWEiKTsKLSAgICAgICAgICAgIHZhciBtZWRpYVRl
eHQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lZGlhLnNvdXJjZSkgewotICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ1NTTWVkaWEuU291cmNlLkxJTktFRF9TSEVFVDoKLSAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkNTU01lZGlhLlNvdXJjZS5JTkxJTkVfU0hFRVQ6Ci0gICAgICAg
ICAgICAgICAgbWVkaWFUZXh0ID0gIm1lZGlhPVwiIiArIG1lZGlhLnRleHQgKyAiXCIiOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ1NTTWVk
aWEuU291cmNlLk1FRElBX1JVTEU6Ci0gICAgICAgICAgICAgICAgbWVkaWFUZXh0ID0gIkBtZWRp
YSAiICsgbWVkaWEudGV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNTU01lZGlhLlNvdXJjZS5JTVBPUlRfUlVMRToKLSAgICAgICAgICAg
ICAgICBtZWRpYVRleHQgPSAiQGltcG9ydCAiICsgbWVkaWEudGV4dDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1lZGlhLnNvdXJjZVVS
TCkgewotICAgICAgICAgICAgICAgIHZhciByZWZFbGVtZW50ID0gbWVkaWFEYXRhRWxlbWVudC5j
cmVhdGVDaGlsZCgiZGl2IiwgInN1YnRpdGxlIik7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVO
dW1iZXIgPSBtZWRpYS5zb3VyY2VMaW5lIDwgMCA/IHVuZGVmaW5lZCA6IG1lZGlhLnNvdXJjZUxp
bmU7Ci0gICAgICAgICAgICAgICAgdmFyIGFuY2hvciA9IFdlYkluc3BlY3Rvci5saW5raWZ5UmVz
b3VyY2VBc05vZGUobWVkaWEuc291cmNlVVJMLCBsaW5lTnVtYmVyLCAic3VidGl0bGUiLCBtZWRp
YS5zb3VyY2VVUkwgKyAoaXNOYU4obGluZU51bWJlcikgPyAiIiA6ICgiOiIgKyAobGluZU51bWJl
ciArIDEpKSkpOwotICAgICAgICAgICAgICAgIGFuY2hvci5wcmVmZXJyZWRQYW5lbCA9ICJzY3Jp
cHRzIjsKLSAgICAgICAgICAgICAgICBhbmNob3Iuc3R5bGUuZmxvYXQgPSAicmlnaHQiOwotICAg
ICAgICAgICAgICAgIHJlZkVsZW1lbnQuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIG1lZGlhVGV4dEVsZW1lbnQgPSBtZWRpYURhdGFFbGVtZW50
LmNyZWF0ZUNoaWxkKCJzcGFuIik7Ci0gICAgICAgICAgICBtZWRpYVRleHRFbGVtZW50LnRleHRD
b250ZW50ID0gbWVkaWFUZXh0OwotICAgICAgICAgICAgbWVkaWFUZXh0RWxlbWVudC50aXRsZSA9
IG1lZGlhLnRleHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2YXIgc2VsZWN0b3JDb250YWlu
ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9zZWxlY3RvckVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgdGhpcy5fc2VsZWN0
b3JFbGVtZW50LnRleHRDb250ZW50ID0gc3R5bGVSdWxlLnNlbGVjdG9yVGV4dDsKLSAgICBzZWxl
Y3RvckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9zZWxlY3RvckVsZW1lbnQpOwotCi0gICAg
dmFyIG9wZW5CcmFjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICBvcGVu
QnJhY2UudGV4dENvbnRlbnQgPSAiIHsiOwotICAgIHNlbGVjdG9yQ29udGFpbmVyLmFwcGVuZENo
aWxkKG9wZW5CcmFjZSk7Ci0gICAgc2VsZWN0b3JDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigi
bW91c2Vkb3duIiwgdGhpcy5faGFuZGxlRW1wdHlTcGFjZU1vdXNlRG93bi5iaW5kKHRoaXMpLCBm
YWxzZSk7Ci0gICAgc2VsZWN0b3JDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0
aGlzLl9oYW5kbGVTZWxlY3RvckNvbnRhaW5lckNsaWNrLmJpbmQodGhpcyksIGZhbHNlKTsKLQot
ICAgIHZhciBjbG9zZUJyYWNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
Y2xvc2VCcmFjZS50ZXh0Q29udGVudCA9ICJ9IjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hp
bGQoY2xvc2VCcmFjZSk7Ci0KLSAgICB0aGlzLl9zZWxlY3RvckVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5kbGVTZWxlY3RvckNsaWNrLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5f
aGFuZGxlRW1wdHlTcGFjZU1vdXNlRG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5faGFuZGxlRW1wdHlTcGFjZUNs
aWNrLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX3BhcmVudFBhbmUgPSBwYXJlbnRQ
YW5lOwotICAgIHRoaXMuc3R5bGVSdWxlID0gc3R5bGVSdWxlOwotICAgIHRoaXMucnVsZSA9IHRo
aXMuc3R5bGVSdWxlLnJ1bGU7Ci0gICAgdGhpcy5lZGl0YWJsZSA9IGVkaXRhYmxlOwotICAgIHRo
aXMuaXNJbmhlcml0ZWQgPSBpc0luaGVyaXRlZDsKLQotICAgIGlmICh0aGlzLnJ1bGUpIHsKLSAg
ICAgICAgLy8gUHJldmVudCBlZGl0aW5nIHRoZSB1c2VyIGFnZW50IGFuZCB1c2VyIHJ1bGVzLgot
ICAgICAgICBpZiAodGhpcy5ydWxlLmlzVXNlckFnZW50IHx8IHRoaXMucnVsZS5pc1VzZXIpCi0g
ICAgICAgICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhpcyBpcyBhIHJlYWwgQ1NTUnVsZSwgbm90IGEgYm9ndXMgb2JqZWN0
IGNvbWluZyBmcm9tIFdlYkluc3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24uCi0g
ICAgICAgICAgICBpZiAodGhpcy5ydWxlLmlkKQotICAgICAgICAgICAgICAgIHRoaXMubmF2aWdh
YmxlID0gdGhpcy5ydWxlLmlzU291cmNlTmF2aWdhYmxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy50aXRsZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygic3R5bGVzLXNlbGVjdG9yIik7Ci0gICAg
fQotCi0gICAgdGhpcy5fdXNlZFByb3BlcnRpZXMgPSBzdHlsZVJ1bGUudXNlZFByb3BlcnRpZXM7
Ci0KLSAgICB0aGlzLl9zZWxlY3RvclJlZkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICB0aGlzLl9zZWxlY3RvclJlZkVsZW1lbnQuY2xhc3NOYW1lID0gInN1YnRp
dGxlIjsKLSAgICB0aGlzLl9zZWxlY3RvclJlZkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3Jl
YXRlUnVsZU9yaWdpbk5vZGUoKSk7Ci0gICAgc2VsZWN0b3JDb250YWluZXIuaW5zZXJ0QmVmb3Jl
KHRoaXMuX3NlbGVjdG9yUmVmRWxlbWVudCwgc2VsZWN0b3JDb250YWluZXIuZmlyc3RDaGlsZCk7
Ci0gICAgdGhpcy50aXRsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0b3JDb250YWluZXIpOwot
ICAgIHRoaXMuX3NlbGVjdG9yQ29udGFpbmVyID0gc2VsZWN0b3JDb250YWluZXI7Ci0KLSAgICBp
ZiAoaXNJbmhlcml0ZWQpCi0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaG93
LWluaGVyaXRlZCIpOyAvLyBUaGlzIG9uZSBpcyByZWxhdGVkIHRvIGluaGVyaXRlZCBydWxlcywg
bm90IGNvbXB1dGVkIHN0eWxlLgotCi0gICAgaWYgKHRoaXMubmF2aWdhYmxlKQotICAgICAgICB0
aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygibmF2aWdhYmxlIik7Ci0KLSAgICBpZiAoIXRoaXMu
ZWRpdGFibGUpCi0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJyZWFkLW9ubHki
KTsKLX0KLQotV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0g
ewotICAgIGdldCBwYW5lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRQYW5l
OwotICAgIH0sCi0KLSAgICBjb2xsYXBzZTogZnVuY3Rpb24oZG9udFJlbWVtYmVyU3RhdGUpCi0g
ICAgewotICAgICAgICAvLyBPdmVycmlkaW5nIHdpdGggZW1wdHkgYm9keS4KLSAgICB9LAotCi0g
ICAgaXNQcm9wZXJ0eUluaGVyaXRlZDogZnVuY3Rpb24ocHJvcGVydHlOYW1lKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuaXNJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgIC8vIFdoaWxlIHJlbmRl
cmluZyBpbmhlcml0ZWQgc3R5bGVzaGVldCwgcmV2ZXJzZSBtZWFuaW5nIG9mIHRoaXMgcHJvcGVy
dHkuCi0gICAgICAgICAgICAvLyBSZW5kZXIgdHJ1bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgd2l0
aCBibGFjaywgaS5lLiByZXR1cm4gdGhlbSBhcyBub24taW5oZXJpdGVkLgotICAgICAgICAgICAg
cmV0dXJuICEocHJvcGVydHlOYW1lIGluIFdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5Jbmhlcml0
ZWRQcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUKLSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW49fSBpc1Nob3J0aGFuZAotICAgICAqLwotICAgIGlzUHJvcGVydHlPdmVy
bG9hZGVkOiBmdW5jdGlvbihwcm9wZXJ0eU5hbWUsIGlzU2hvcnRoYW5kKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl91c2VkUHJvcGVydGllcyB8fCB0aGlzLm5vQWZmZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh0aGlzLmlzSW5oZXJpdGVkICYmICEocHJv
cGVydHlOYW1lIGluIFdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5Jbmhlcml0ZWRQcm9wZXJ0aWVz
KSkgewotICAgICAgICAgICAgLy8gSW4gdGhlIGluaGVyaXRlZCBzZWN0aW9ucywgb25seSBzaG93
IG92ZXJyaWRlcyBmb3IgdGhlIHBvdGVudGlhbGx5IGluaGVyaXRlZCBwcm9wZXJ0aWVzLgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGNhbm9uaWNh
bE5hbWUgPSBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuY2Fub25pY2FsUHJvcGVydHlO
YW1lKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHZhciB1c2VkID0gKGNhbm9uaWNhbE5hbWUgaW4g
dGhpcy5fdXNlZFByb3BlcnRpZXMpOwotICAgICAgICBpZiAodXNlZCB8fCAhaXNTaG9ydGhhbmQp
Ci0gICAgICAgICAgICByZXR1cm4gIXVzZWQ7Ci0KLSAgICAgICAgLy8gRmluZCBvdXQgaWYgYW55
IG9mIHRoZSBpbmRpdmlkdWFsIGxvbmdoYW5kIHByb3BlcnRpZXMgb2YgdGhlIHNob3J0aGFuZAot
ICAgICAgICAvLyBhcmUgdXNlZCwgaWYgbm9uZSBhcmUgdGhlbiB0aGUgc2hvcnRoYW5kIGlzIG92
ZXJsb2FkZWQgdG9vLgotICAgICAgICB2YXIgbG9uZ2hhbmRQcm9wZXJ0aWVzID0gdGhpcy5zdHls
ZVJ1bGUuc3R5bGUubG9uZ2hhbmRQcm9wZXJ0aWVzKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgbG9uZ2hhbmRQcm9wZXJ0aWVzLmxlbmd0aDsgKytqKSB7Ci0gICAg
ICAgICAgICB2YXIgaW5kaXZpZHVhbFByb3BlcnR5ID0gbG9uZ2hhbmRQcm9wZXJ0aWVzW2pdOwot
ICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5jYW5vbmljYWxQ
cm9wZXJ0eU5hbWUoaW5kaXZpZHVhbFByb3BlcnR5Lm5hbWUpIGluIHRoaXMuX3VzZWRQcm9wZXJ0
aWVzKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBuZXh0RWRpdGFibGVTaWJsaW5nOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgY3VyU2VjdGlvbiA9IHRoaXM7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIGN1clNlY3Rpb24gPSBjdXJTZWN0aW9uLm5leHRTaWJsaW5nOwotICAgICAg
ICB9IHdoaWxlIChjdXJTZWN0aW9uICYmICFjdXJTZWN0aW9uLmVkaXRhYmxlKTsKLQotICAgICAg
ICBpZiAoIWN1clNlY3Rpb24pIHsKLSAgICAgICAgICAgIGN1clNlY3Rpb24gPSB0aGlzLmZpcnN0
U2libGluZzsKLSAgICAgICAgICAgIHdoaWxlIChjdXJTZWN0aW9uICYmICFjdXJTZWN0aW9uLmVk
aXRhYmxlKQotICAgICAgICAgICAgICAgIGN1clNlY3Rpb24gPSBjdXJTZWN0aW9uLm5leHRTaWJs
aW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIChjdXJTZWN0aW9uICYmIGN1clNlY3Rp
b24uZWRpdGFibGUpID8gY3VyU2VjdGlvbiA6IG51bGw7Ci0gICAgfSwKLQotICAgIHByZXZpb3Vz
RWRpdGFibGVTaWJsaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY3VyU2VjdGlv
biA9IHRoaXM7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGN1clNlY3Rpb24gPSBjdXJTZWN0
aW9uLnByZXZpb3VzU2libGluZzsKLSAgICAgICAgfSB3aGlsZSAoY3VyU2VjdGlvbiAmJiAhY3Vy
U2VjdGlvbi5lZGl0YWJsZSk7Ci0KLSAgICAgICAgaWYgKCFjdXJTZWN0aW9uKSB7Ci0gICAgICAg
ICAgICBjdXJTZWN0aW9uID0gdGhpcy5sYXN0U2libGluZzsKLSAgICAgICAgICAgIHdoaWxlIChj
dXJTZWN0aW9uICYmICFjdXJTZWN0aW9uLmVkaXRhYmxlKQotICAgICAgICAgICAgICAgIGN1clNl
Y3Rpb24gPSBjdXJTZWN0aW9uLnByZXZpb3VzU2libGluZzsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiAoY3VyU2VjdGlvbiAmJiBjdXJTZWN0aW9uLmVkaXRhYmxlKSA/IGN1clNlY3Rpb24g
OiBudWxsOwotICAgIH0sCi0KLSAgICB1cGRhdGU6IGZ1bmN0aW9uKGZ1bGwpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5zdHlsZVJ1bGUuc2VsZWN0b3JUZXh0KQotICAgICAgICAgICAgdGhpcy5f
c2VsZWN0b3JFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5zdHlsZVJ1bGUuc2VsZWN0b3JUZXh0
OwotICAgICAgICB0aGlzLl9tYXJrU2VsZWN0b3JNYXRjaGVzKCk7Ci0gICAgICAgIGlmIChmdWxs
KSB7Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5yZW1vdmVDaGlsZHJl
bigpOwotICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNo
aWxkcmVuWzBdOwotICAgICAgICAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgICAgICAgICAg
Y2hpbGQub3ZlcmxvYWRlZCA9IHRoaXMuaXNQcm9wZXJ0eU92ZXJsb2FkZWQoY2hpbGQubmFtZSwg
Y2hpbGQuaXNTaG9ydGhhbmQpOwotICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQudHJhdmVy
c2VOZXh0VHJlZUVsZW1lbnQoZmFsc2UsIG51bGwsIHRydWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuYWZ0ZXJVcGRhdGUoKTsKLSAgICB9LAotCi0gICAgYWZ0ZXJV
cGRhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9hZnRlclVwZGF0ZSkg
ewotICAgICAgICAgICAgdGhpcy5fYWZ0ZXJVcGRhdGUodGhpcyk7Ci0gICAgICAgICAgICBkZWxl
dGUgdGhpcy5fYWZ0ZXJVcGRhdGU7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgb25wb3B1bGF0
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5zdHlsZVJ1bGUu
c3R5bGU7Ci0gICAgICAgIHZhciBhbGxQcm9wZXJ0aWVzID0gc3R5bGUuYWxsUHJvcGVydGllczsK
LSAgICAgICAgdGhpcy51bmlxdWVQcm9wZXJ0aWVzID0gW107Ci0KLSAgICAgICAgdmFyIHN0eWxl
SGFzRWRpdGFibGVTb3VyY2UgPSB0aGlzLmVkaXRhYmxlICYmICEhc3R5bGUucmFuZ2U7Ci0gICAg
ICAgIGlmIChzdHlsZUhhc0VkaXRhYmxlU291cmNlKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2
YXIgcHJvcGVydHkgPSBhbGxQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgICAgIHRoaXMudW5p
cXVlUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVy
dHkuc3R5bGVCYXNlZCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgaXNTaG9ydGhhbmQgPSAhIVdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5jc3NQ
cm9wZXJ0aWVzTWV0YWluZm8ubG9uZ2hhbmRzKHByb3BlcnR5Lm5hbWUpOwotICAgICAgICAgICAg
ICAgIHZhciBpbmhlcml0ZWQgPSB0aGlzLmlzUHJvcGVydHlJbmhlcml0ZWQocHJvcGVydHkubmFt
ZSk7Ci0gICAgICAgICAgICAgICAgdmFyIG92ZXJsb2FkZWQgPSBwcm9wZXJ0eS5pbmFjdGl2ZSB8
fCB0aGlzLmlzUHJvcGVydHlPdmVybG9hZGVkKHByb3BlcnR5Lm5hbWUpOwotICAgICAgICAgICAg
ICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQo
dGhpcy5fcGFyZW50UGFuZSwgdGhpcy5zdHlsZVJ1bGUsIHN0eWxlLCBwcm9wZXJ0eSwgaXNTaG9y
dGhhbmQsIGluaGVyaXRlZCwgb3ZlcmxvYWRlZCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5wcm9w
ZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZ2VuZXJhdGVkU2hvcnRo
YW5kcyA9IHt9OwotICAgICAgICAvLyBGb3Igc3R5bGUtYmFzZWQgcHJvcGVydGllcywgZ2VuZXJh
dGUgc2hvcnRoYW5kcyB3aXRoIHZhbHVlcyB3aGVuIHBvc3NpYmxlLgotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IGFsbFByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICB0aGlzLnVuaXF1ZVBy
b3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB2YXIgaXNTaG9ydGhhbmQgPSAh
IVdlYkluc3BlY3Rvci5DU1NNZXRhZGF0YS5jc3NQcm9wZXJ0aWVzTWV0YWluZm8ubG9uZ2hhbmRz
KHByb3BlcnR5Lm5hbWUpOwotCi0gICAgICAgICAgICAvLyBGb3Igc3R5bGUtYmFzZWQgcHJvcGVy
dGllcywgdHJ5IGdlbmVyYXRpbmcgc2hvcnRoYW5kcy4KLSAgICAgICAgICAgIHZhciBzaG9ydGhh
bmRzID0gaXNTaG9ydGhhbmQgPyBudWxsIDogV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhLmNzc1By
b3BlcnRpZXNNZXRhaW5mby5zaG9ydGhhbmRzKHByb3BlcnR5Lm5hbWUpOwotICAgICAgICAgICAg
dmFyIHNob3J0aGFuZFByb3BlcnR5QXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgc2hvcnRoYW5kcyAmJiAhc2hvcnRoYW5kUHJvcGVydHlBdmFpbGFibGUgJiYg
aiA8IHNob3J0aGFuZHMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgICAgICB2YXIgc2hvcnRo
YW5kID0gc2hvcnRoYW5kc1tqXTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvcnRoYW5kIGluIGdl
bmVyYXRlZFNob3J0aGFuZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kUHJvcGVy
dHlBdmFpbGFibGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8vIFRo
ZXJlIGFscmVhZHkgaXMgYSBzaG9ydGhhbmQgdGhpcyBsb25naGFuZHMgZmFsbHMgdW5kZXIuCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdHlsZS5nZXRMaXZlUHJvcGVy
dHkoc2hvcnRoYW5kKSkgewotICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRQcm9wZXJ0eUF2
YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgLy8gVGhlcmUg
aXMgYW4gZXhwbGljdCBzaG9ydGhhbmQgcHJvcGVydHkgdGhpcyBsb25naGFuZHMgZmFsbHMgdW5k
ZXIuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghc3R5bGUuc2hvcnRo
YW5kVmFsdWUoc2hvcnRoYW5kKSkgewotICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRQcm9w
ZXJ0eUF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8v
IE5ldmVyIGdlbmVyYXRlIHN5bnRoZXRpYyBzaG9ydGhhbmRzIHdoZW4gbm8gdmFsdWUgaXMgYXZh
aWxhYmxlLgotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRl
IHN5bnRoZXRpYyBzaG9ydGhhbmQgd2UgaGF2ZSBhIHZhbHVlIGZvci4KLSAgICAgICAgICAgICAg
ICB2YXIgc2hvcnRoYW5kUHJvcGVydHkgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5KHN0
eWxlLCBzdHlsZS5hbGxQcm9wZXJ0aWVzLmxlbmd0aCwgc2hvcnRoYW5kLCBzdHlsZS5zaG9ydGhh
bmRWYWx1ZShzaG9ydGhhbmQpLCAiIiwgInN0eWxlIiwgdHJ1ZSwgdHJ1ZSwgdW5kZWZpbmVkKTsK
LSAgICAgICAgICAgICAgICB2YXIgb3ZlcmxvYWRlZCA9IHByb3BlcnR5LmluYWN0aXZlIHx8IHRo
aXMuaXNQcm9wZXJ0eU92ZXJsb2FkZWQocHJvcGVydHkubmFtZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVu
dCh0aGlzLl9wYXJlbnRQYW5lLCB0aGlzLnN0eWxlUnVsZSwgc3R5bGUsIHNob3J0aGFuZFByb3Bl
cnR5LCAgLyogaXNTaG9ydGhhbmQgKi8gdHJ1ZSwgLyogaW5oZXJpdGVkICovIGZhbHNlLCBvdmVy
bG9hZGVkKTsKLSAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBl
bmRDaGlsZChpdGVtKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZWRTaG9ydGhhbmRzW3Nob3J0
aGFuZF0gPSBzaG9ydGhhbmRQcm9wZXJ0eTsKLSAgICAgICAgICAgICAgICBzaG9ydGhhbmRQcm9w
ZXJ0eUF2YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hv
cnRoYW5kUHJvcGVydHlBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7ICAvLyBT
aG9ydGhhbmQgZm9yIHRoZSBwcm9wZXJ0eSBmb3VuZC4KLQotICAgICAgICAgICAgdmFyIGluaGVy
aXRlZCA9IHRoaXMuaXNQcm9wZXJ0eUluaGVyaXRlZChwcm9wZXJ0eS5uYW1lKTsKLSAgICAgICAg
ICAgIHZhciBvdmVybG9hZGVkID0gcHJvcGVydHkuaW5hY3RpdmUgfHwgdGhpcy5pc1Byb3BlcnR5
T3ZlcmxvYWRlZChwcm9wZXJ0eS5uYW1lLCBpc1Nob3J0aGFuZCk7Ci0gICAgICAgICAgICB2YXIg
aXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHRoaXMuX3Bh
cmVudFBhbmUsIHRoaXMuc3R5bGVSdWxlLCBzdHlsZSwgcHJvcGVydHksIGlzU2hvcnRoYW5kLCBp
bmhlcml0ZWQsIG92ZXJsb2FkZWQpOwotICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91
dGxpbmUuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZmluZFRy
ZWVFbGVtZW50V2l0aE5hbWU6IGZ1bmN0aW9uKG5hbWUpCi0gICAgewotICAgICAgICB2YXIgdHJl
ZUVsZW1lbnQgPSB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJlblswXTsKLSAgICAg
ICAgd2hpbGUgKHRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQubmFt
ZSA9PT0gbmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7Ci0gICAgICAg
ICAgICB0cmVlRWxlbWVudCA9IHRyZWVFbGVtZW50LnRyYXZlcnNlTmV4dFRyZWVFbGVtZW50KHRy
dWUsIG51bGwsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0s
Ci0KLSAgICBfbWFya1NlbGVjdG9yTWF0Y2hlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIHJ1bGUgPSB0aGlzLnN0eWxlUnVsZS5ydWxlOwotICAgICAgICBpZiAoIXJ1bGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG1hdGNoaW5nU2VsZWN0b3JzID0gcnVsZS5t
YXRjaGluZ1NlbGVjdG9yczsKLSAgICAgICAgLy8gLnNlbGVjdG9yIGlzIHJlbmRlcmVkIGFzIG5v
bi1hZmZlY3Rpbmcgc2VsZWN0b3IgYnkgZGVmYXVsdC4KLSAgICAgICAgaWYgKHRoaXMubm9BZmZl
Y3QgfHwgbWF0Y2hpbmdTZWxlY3RvcnMpCi0gICAgICAgICAgICB0aGlzLl9zZWxlY3RvckVsZW1l
bnQuY2xhc3NOYW1lID0gInNlbGVjdG9yIjsKLSAgICAgICAgaWYgKCFtYXRjaGluZ1NlbGVjdG9y
cykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgc2VsZWN0b3JzID0gcnVsZS5z
ZWxlY3RvcnM7Ci0gICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTsKLSAgICAgICAgdmFyIGN1cnJlbnRNYXRjaCA9IDA7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsYXN0U2VsZWN0b3JJbmRleCA9IHNlbGVjdG9ycy5sZW5ndGggLSAxOyBpIDw9
IGxhc3RTZWxlY3RvckluZGV4IDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgc2VsZWN0b3JOb2Rl
OwotICAgICAgICAgICAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc2Vs
ZWN0b3JzW2ldKTsKLSAgICAgICAgICAgIGlmIChtYXRjaGluZ1NlbGVjdG9yc1tjdXJyZW50TWF0
Y2hdID09PSBpKSB7Ci0gICAgICAgICAgICAgICAgKytjdXJyZW50TWF0Y2g7Ci0gICAgICAgICAg
ICAgICAgc2VsZWN0b3JOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAg
ICAgICAgICAgICAgIHNlbGVjdG9yTm9kZS5jbGFzc05hbWUgPSAic2VsZWN0b3ItbWF0Y2hlcyI7
Ci0gICAgICAgICAgICAgICAgc2VsZWN0b3JOb2RlLmFwcGVuZENoaWxkKHRleHROb2RlKTsKLSAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNlbGVjdG9yTm9kZSA9IHRleHROb2Rl
OwotCi0gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzZWxlY3Rvck5vZGUpOwotICAg
ICAgICAgICAgaWYgKGkgIT09IGxhc3RTZWxlY3RvckluZGV4KQotICAgICAgICAgICAgICAgIGZy
YWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIsICIpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuX3NlbGVjdG9yRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwot
ICAgICAgICB0aGlzLl9zZWxlY3RvckVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwotICAg
IH0sCi0KLSAgICBfY2hlY2tXaWxsQ2FuY2VsRWRpdGluZzogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIHdpbGxDYXVzZUNhbmNlbEVkaXRpbmcgPSB0aGlzLl93aWxsQ2F1c2VDYW5jZWxF
ZGl0aW5nOwotICAgICAgICBkZWxldGUgdGhpcy5fd2lsbENhdXNlQ2FuY2VsRWRpdGluZzsKLSAg
ICAgICAgcmV0dXJuIHdpbGxDYXVzZUNhbmNlbEVkaXRpbmc7Ci0gICAgfSwKLQotICAgIF9oYW5k
bGVTZWxlY3RvckNvbnRhaW5lckNsaWNrOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9jaGVja1dpbGxDYW5jZWxFZGl0aW5nKCkgfHwgIXRoaXMuZWRpdGFibGUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuX3Nl
bGVjdG9yQ29udGFpbmVyKQotICAgICAgICAgICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KDAp
LnN0YXJ0RWRpdGluZygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJl
cj19IGluZGV4Ci0gICAgICovCi0gICAgYWRkTmV3QmxhbmtQcm9wZXJ0eTogZnVuY3Rpb24oaW5k
ZXgpCi0gICAgewotICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLnN0eWxlUnVsZS5zdHlsZTsKLSAg
ICAgICAgdmFyIHByb3BlcnR5ID0gc3R5bGUubmV3QmxhbmtQcm9wZXJ0eShpbmRleCk7Ci0gICAg
ICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQo
dGhpcy5fcGFyZW50UGFuZSwgdGhpcy5zdHlsZVJ1bGUsIHN0eWxlLCBwcm9wZXJ0eSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIGluZGV4ID0gcHJvcGVydHkuaW5kZXg7Ci0gICAgICAg
IHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmluc2VydENoaWxkKGl0ZW0sIGluZGV4KTsKLSAg
ICAgICAgaXRlbS5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgaXRl
bS5fbmV3UHJvcGVydHkgPSB0cnVlOwotICAgICAgICBpdGVtLnVwZGF0ZVRpdGxlKCk7Ci0gICAg
ICAgIHJldHVybiBpdGVtOwotICAgIH0sCi0KLSAgICBfY3JlYXRlUnVsZU9yaWdpbk5vZGU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30g
dXJsCi0gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBsaW5raWZ5VW5jb3B5YWJsZSh1cmwsIGxpbmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZhciBsaW5rID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh1cmws
IGxpbmUsICIiLCB1cmwgKyAiOiIgKyAobGluZSArIDEpKTsKLSAgICAgICAgICAgIGxpbmsucHJl
ZmVycmVkUGFuZWwgPSAic2NyaXB0cyI7Ci0gICAgICAgICAgICBsaW5rLmNsYXNzTGlzdC5hZGQo
IndlYmtpdC1odG1sLXJlc291cmNlLWxpbmsiKTsKLSAgICAgICAgICAgIGxpbmsuc2V0QXR0cmli
dXRlKCJkYXRhLXVuY29weWFibGUiLCBsaW5rLnRleHRDb250ZW50KTsKLSAgICAgICAgICAgIGxp
bmsudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgICAgIHJldHVybiBsaW5rOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHRoaXMuc3R5bGVSdWxlLnNvdXJjZVVSTCkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9wYXJlbnRQYW5lLl9saW5raWZpZXIubGlua2lmeUNTU1J1bGVMb2NhdGlvbih0
aGlzLnJ1bGUpIHx8IGxpbmtpZnlVbmNvcHlhYmxlKHRoaXMuc3R5bGVSdWxlLnNvdXJjZVVSTCwg
dGhpcy5ydWxlLnNvdXJjZUxpbmUpOwotCi0gICAgICAgIGlmICghdGhpcy5ydWxlKQotICAgICAg
ICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQotICAgICAgICB2YXIg
b3JpZ2luID0gIiI7Ci0gICAgICAgIGlmICh0aGlzLnJ1bGUuaXNVc2VyQWdlbnQpCi0gICAgICAg
ICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJ1c2VyIGFnZW50IHN0eWxlc2hlZXQiKSk7Ci0gICAgICAgIGlmICh0aGlzLnJ1bGUuaXNVc2Vy
KQotICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygidXNlciBzdHlsZXNoZWV0IikpOwotICAgICAgICBpZiAodGhpcy5ydWxlLmlz
VmlhSW5zcGVjdG9yKSB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQHBhcmFt
IHs/V2ViSW5zcGVjdG9yLlJlc291cmNlfSByZXNvdXJjZQotICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXNvdXJjZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAocmVzb3VyY2UpCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBw
ZW5kQ2hpbGQobGlua2lmeVVuY29weWFibGUocmVzb3VyY2UudXJsLCB0aGlzLnJ1bGUuc291cmNl
TGluZSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygidmlhIGluc3BlY3RvciIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldFZpYUlu
c3BlY3RvclJlc291cmNlRm9yUnVsZSh0aGlzLnJ1bGUsIGNhbGxiYWNrLmJpbmQodGhpcykpOwot
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2hh
bmRsZUVtcHR5U3BhY2VNb3VzZURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dGhpcy5fd2lsbENhdXNlQ2FuY2VsRWRpdGluZyA9IHRoaXMuX3BhcmVudFBhbmUuX2lzRWRpdGlu
Z1N0eWxlOwotICAgIH0sCi0KLSAgICBfaGFuZGxlRW1wdHlTcGFjZUNsaWNrOiBmdW5jdGlvbihl
dmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5lZGl0YWJsZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGhpcy5fY2hlY2tXaWxsQ2FuY2Vs
RWRpdGluZygpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChldmVudC50YXJn
ZXQuaGFzU3R5bGVDbGFzcygiaGVhZGVyIikgfHwgdGhpcy5lbGVtZW50Lmhhc1N0eWxlQ2xhc3Mo
InJlYWQtb25seSIpIHx8IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNz
KCJtZWRpYSIpKSB7Ci0gICAgICAgICAgICBldmVudC5jb25zdW1lKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAgICAgICAgdGhpcy5h
ZGROZXdCbGFua1Byb3BlcnR5KCkuc3RhcnRFZGl0aW5nKCk7Ci0gICAgfSwKLQotICAgIF9oYW5k
bGVTZWxlY3RvckNsaWNrOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N0
YXJ0RWRpdGluZ09uTW91c2VFdmVudCgpOwotICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwot
ICAgIH0sCi0KLSAgICBfc3RhcnRFZGl0aW5nT25Nb3VzZUV2ZW50OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuZWRpdGFibGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgaWYgKCF0aGlzLnJ1bGUgJiYgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRy
ZW4ubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgICAgICAg
ICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KCkuc3RhcnRFZGl0aW5nKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRoaXMucnVsZSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLnN0YXJ0RWRpdGluZ1NlbGVjdG9yKCk7Ci0gICAg
fSwKLQotICAgIHN0YXJ0RWRpdGluZ1NlbGVjdG9yOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgZWxlbWVudCA9IHRoaXMuX3NlbGVjdG9yRWxlbWVudDsKLSAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5pc0JlaW5nRWRpdGVkKGVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7Ci0gICAgICAgIGVs
ZW1lbnQudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50OyAvLyBSZXNldCBzZWxlY3Rv
ciBtYXJrcyBpbiBncm91cC4KLQotICAgICAgICB2YXIgY29uZmlnID0gbmV3IFdlYkluc3BlY3Rv
ci5FZGl0aW5nQ29uZmlnKHRoaXMuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkLmJpbmQodGhpcyks
IHRoaXMuZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkLmJpbmQodGhpcykpOwotICAgICAgICBXZWJJ
bnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX3NlbGVjdG9yRWxlbWVudCwgY29uZmlnKTsKLQot
ICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChlbGVtZW50LCAw
LCBlbGVtZW50LCAxKTsKLSAgICB9LAotCi0gICAgX21vdmVFZGl0b3JGcm9tU2VsZWN0b3I6IGZ1
bmN0aW9uKG1vdmVEaXJlY3Rpb24pCi0gICAgewotICAgICAgICB0aGlzLl9tYXJrU2VsZWN0b3JN
YXRjaGVzKCk7Ci0KLSAgICAgICAgaWYgKCFtb3ZlRGlyZWN0aW9uKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChtb3ZlRGlyZWN0aW9uID09PSAiZm9yd2FyZCIpIHsKLSAgICAg
ICAgICAgIHRoaXMuZXhwYW5kKCk7Ci0gICAgICAgICAgICB2YXIgZmlyc3RDaGlsZCA9IHRoaXMu
cHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuWzBdOwotICAgICAgICAgICAgd2hpbGUgKGZp
cnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5pbmhlcml0ZWQpCi0gICAgICAgICAgICAgICAgZmlyc3RD
aGlsZCA9IGZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICBpZiAoIWZpcnN0Q2hp
bGQpCi0gICAgICAgICAgICAgICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KCkuc3RhcnRFZGl0
aW5nKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmlyc3RDaGlsZC5zdGFy
dEVkaXRpbmcoZmlyc3RDaGlsZC5uYW1lRWxlbWVudCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB2YXIgcHJldmlvdXNTZWN0aW9uID0gdGhpcy5wcmV2aW91c0VkaXRhYmxlU2libGlu
ZygpOwotICAgICAgICAgICAgaWYgKCFwcmV2aW91c1NlY3Rpb24pCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBwcmV2aW91c1NlY3Rpb24uZXhwYW5kKCk7Ci0gICAgICAg
ICAgICBwcmV2aW91c1NlY3Rpb24uYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygp
OwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIGVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZDogZnVu
Y3Rpb24oZWxlbWVudCwgbmV3Q29udGVudCwgb2xkQ29udGVudCwgY29udGV4dCwgbW92ZURpcmVj
dGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChuZXdDb250ZW50KQotICAgICAgICAgICAgbmV3Q29u
dGVudCA9IG5ld0NvbnRlbnQudHJpbSgpOwotICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gb2xk
Q29udGVudCkgewotICAgICAgICAgICAgLy8gUmV2ZXJ0IHRvIGEgdHJpbW1lZCB2ZXJzaW9uIG9m
IHRoZSBzZWxlY3RvciBpZiBuZWVkIGJlLgotICAgICAgICAgICAgdGhpcy5fc2VsZWN0b3JFbGVt
ZW50LnRleHRDb250ZW50ID0gbmV3Q29udGVudDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9t
b3ZlRWRpdG9yRnJvbVNlbGVjdG9yKG1vdmVEaXJlY3Rpb24pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIHNlbGVjdGVkTm9kZSA9IHRoaXMuX3BhcmVudFBhbmUubm9kZTsKLQotICAgICAgICBm
dW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2sobmV3UnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5ub0FmZmVjdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdGhp
cy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5vLWFmZmVjdCIpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ub0FmZmVjdDsKLSAgICAgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygibm8tYWZmZWN0Iik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHRoaXMucnVsZSA9IG5ld1J1bGU7Ci0gICAgICAgICAgICB0aGlz
LnN0eWxlUnVsZSA9IHsgc2VjdGlvbjogdGhpcywgc3R5bGU6IG5ld1J1bGUuc3R5bGUsIHNlbGVj
dG9yVGV4dDogbmV3UnVsZS5zZWxlY3RvclRleHQsIG1lZGlhOiBuZXdSdWxlLm1lZGlhLCBzb3Vy
Y2VVUkw6IG5ld1J1bGUuc291cmNlVVJMLCBydWxlOiBuZXdSdWxlIH07Ci0KLSAgICAgICAgICAg
IHRoaXMuX3BhcmVudFBhbmUudXBkYXRlKHNlbGVjdGVkTm9kZSk7Ci0KLSAgICAgICAgICAgIGZp
bmlzaE9wZXJhdGlvbkFuZE1vdmVFZGl0b3IuY2FsbCh0aGlzLCBtb3ZlRGlyZWN0aW9uKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmlzaE9wZXJhdGlvbkFuZE1vdmVFZGl0b3Io
ZGlyZWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGFyZW50UGFu
ZS5fdXNlck9wZXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuX21vdmVFZGl0b3JGcm9tU2VsZWN0
b3IoZGlyZWN0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgZ2V0cyBkZWxldGVk
IGluIGZpbmlzaE9wZXJhdGlvbkFuZE1vdmVFZGl0b3IoKSwgd2hpY2ggaXMgY2FsbGVkIGJvdGgg
b24gc3VjY2VzcyBhbmQgZmFpbHVyZS4KLSAgICAgICAgdGhpcy5fcGFyZW50UGFuZS5fdXNlck9w
ZXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5zZXRSdWxlU2Vs
ZWN0b3IodGhpcy5ydWxlLmlkLCBzZWxlY3RlZE5vZGUgPyBzZWxlY3RlZE5vZGUuaWQgOiAwLCBu
ZXdDb250ZW50LCBzdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKSwgZmluaXNoT3BlcmF0aW9uQW5k
TW92ZUVkaXRvci5iaW5kKHRoaXMsIG1vdmVEaXJlY3Rpb24pKTsKLSAgICB9LAotCi0gICAgZWRp
dGluZ1NlbGVjdG9yQ2FuY2VsbGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBEbyBu
b3RoaW5nIGJ1dCBtYXJrIHRoZSBzZWxlY3RvcnMgaW4gZ3JvdXAgaWYgbmVjZXNzYXJ5LgotICAg
ICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gYnkgQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9u
LgotICAgICAgICB0aGlzLl9tYXJrU2VsZWN0b3JNYXRjaGVzKCk7Ci0gICAgfSwKLQotICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZQotfQotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9wZXJ0aWVz
U2VjdGlvbn0KLSAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZX0gc3R5
bGVzUGFuZQotICogQHBhcmFtIHshT2JqZWN0fSBzdHlsZVJ1bGUKLSAqIEBwYXJhbSB7IU9iamVj
dC48c3RyaW5nLCBib29sZWFuPn0gdXNlZFByb3BlcnRpZXMKLSAqLwotV2ViSW5zcGVjdG9yLkNv
bXB1dGVkU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW9uKHN0eWxlc1BhbmUsIHN0eWxl
UnVsZSwgdXNlZFByb3BlcnRpZXMpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0
aW9uLmNhbGwodGhpcywgIiIpOwotICAgIHRoaXMuaGVhZGVyRWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJoaWRkZW4iKTsKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInN0eWxlcy1zZWN0aW9u
IG1vbm9zcGFjZSBmaXJzdC1zdHlsZXMtc2VjdGlvbiByZWFkLW9ubHkgY29tcHV0ZWQtc3R5bGUi
OwotICAgIHRoaXMuX3N0eWxlc1BhbmUgPSBzdHlsZXNQYW5lOwotICAgIHRoaXMuc3R5bGVSdWxl
ID0gc3R5bGVSdWxlOwotICAgIHRoaXMuX3VzZWRQcm9wZXJ0aWVzID0gdXNlZFByb3BlcnRpZXM7
Ci0gICAgdGhpcy5fYWx3YXlzU2hvd0NvbXB1dGVkUHJvcGVydGllcyA9IHsgImRpc3BsYXkiOiB0
cnVlLCAiaGVpZ2h0IjogdHJ1ZSwgIndpZHRoIjogdHJ1ZSB9OwotICAgIHRoaXMuY29tcHV0ZWRT
dHlsZSA9IHRydWU7Ci0gICAgdGhpcy5fcHJvcGVydHlUcmVlRWxlbWVudHMgPSB7fTsKLSAgICB0
aGlzLl9leHBhbmRlZFByb3BlcnR5TmFtZXMgPSB7fTsKLX0KLQotV2ViSW5zcGVjdG9yLkNvbXB1
dGVkU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgY29sbGFwc2U6IGZ1
bmN0aW9uKGRvbnRSZW1lbWJlclN0YXRlKQotICAgIHsKLSAgICAgICAgLy8gT3ZlcnJpZGluZyB3
aXRoIGVtcHR5IGJvZHkuCi0gICAgfSwKLQotICAgIF9pc1Byb3BlcnR5SW5oZXJpdGVkOiBmdW5j
dGlvbihwcm9wZXJ0eU5hbWUpCi0gICAgewotICAgICAgICB2YXIgY2Fub25pY2FsTmFtZSA9IFdl
Ykluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5jYW5vbmljYWxQcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgcmV0dXJuICEoY2Fub25pY2FsTmFtZSBpbiB0aGlzLl91c2VkUHJv
cGVydGllcykgJiYgIShjYW5vbmljYWxOYW1lIGluIHRoaXMuX2Fsd2F5c1Nob3dDb21wdXRlZFBy
b3BlcnRpZXMpOwotICAgIH0sCi0KLSAgICB1cGRhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2V4cGFuZGVkUHJvcGVydHlOYW1lcyA9IHt9OwotICAgICAgICBmb3IgKHZhciBu
YW1lIGluIHRoaXMuX3Byb3BlcnR5VHJlZUVsZW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAodGhp
cy5fcHJvcGVydHlUcmVlRWxlbWVudHNbbmFtZV0uZXhwYW5kZWQpCi0gICAgICAgICAgICAgICAg
dGhpcy5fZXhwYW5kZWRQcm9wZXJ0eU5hbWVzW25hbWVdID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLl9wcm9wZXJ0eVRyZWVFbGVtZW50cyA9IHt9OwotICAgICAgICB0aGlzLnByb3Bl
cnRpZXNUcmVlT3V0bGluZS5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLnBvcHVsYXRl
ZCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBvbnBvcHVsYXRlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBmdW5jdGlvbiBzb3J0ZXIoYSwgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBz
dHlsZSA9IHRoaXMuc3R5bGVSdWxlLnN0eWxlOwotICAgICAgICBpZiAoIXN0eWxlKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciB1bmlxdWVQcm9wZXJ0aWVzID0gW107Ci0gICAg
ICAgIHZhciBhbGxQcm9wZXJ0aWVzID0gc3R5bGUuYWxsUHJvcGVydGllczsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAg
dW5pcXVlUHJvcGVydGllcy5wdXNoKGFsbFByb3BlcnRpZXNbaV0pOwotICAgICAgICB1bmlxdWVQ
cm9wZXJ0aWVzLnNvcnQoc29ydGVyKTsKLQotICAgICAgICB0aGlzLl9wcm9wZXJ0eVRyZWVFbGVt
ZW50cyA9IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaXF1ZVByb3BlcnRpZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHVuaXF1ZVByb3BlcnRp
ZXNbaV07Ci0gICAgICAgICAgICB2YXIgaW5oZXJpdGVkID0gdGhpcy5faXNQcm9wZXJ0eUluaGVy
aXRlZChwcm9wZXJ0eS5uYW1lKTsKLSAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db21wdXRlZFN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCh0aGlzLl9zdHlsZXNQYW5lLCB0
aGlzLnN0eWxlUnVsZSwgc3R5bGUsIHByb3BlcnR5LCBpbmhlcml0ZWQpOwotICAgICAgICAgICAg
dGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgICAgICAg
ICB0aGlzLl9wcm9wZXJ0eVRyZWVFbGVtZW50c1twcm9wZXJ0eS5uYW1lXSA9IGl0ZW07Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgcmVidWlsZENvbXB1dGVkVHJhY2U6IGZ1bmN0aW9uKHNlY3Rp
b25zKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBzZWN0aW9uc1tpXTsKLSAgICAgICAg
ICAgIGlmIChzZWN0aW9uLmNvbXB1dGVkU3R5bGUgfHwgc2VjdGlvbi5pc0JsYW5rKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNl
Y3Rpb24udW5pcXVlUHJvcGVydGllcy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHNlY3Rpb24udW5pcXVlUHJvcGVydGllc1tqXTsKLSAgICAgICAgICAgICAg
ICBpZiAocHJvcGVydHkuZGlzYWJsZWQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLmlzSW5oZXJpdGVkICYmICEocHJvcGVydHkubmFt
ZSBpbiBXZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEuSW5oZXJpdGVkUHJvcGVydGllcykpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVt
ZW50ID0gdGhpcy5fcHJvcGVydHlUcmVlRWxlbWVudHNbcHJvcGVydHkubmFtZV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHRyZWVFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmcmFn
bWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHNlbGVjdG9yID0gZnJhZ21lbnQuY3JlYXRlQ2hpbGQoInNwYW4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0b3Iuc3R5bGUuY29sb3IgPSAiZ3JheSI7Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGVjdG9yLnRleHRDb250ZW50ID0gc2VjdGlvbi5zdHlsZVJ1bGUuc2VsZWN0
b3JUZXh0OwotICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiIC0gIiArIHByb3BlcnR5LnZhbHVlICsgIiAiKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBzdWJ0aXRsZSA9IGZyYWdtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIik7
Ci0gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlLnN0eWxlLmZsb2F0ID0gInJpZ2h0IjsKLSAg
ICAgICAgICAgICAgICAgICAgc3VidGl0bGUuYXBwZW5kQ2hpbGQoc2VjdGlvbi5fY3JlYXRlUnVs
ZU9yaWdpbk5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZEVsZW1lbnQgPSBu
ZXcgVHJlZUVsZW1lbnQoZnJhZ21lbnQsIG51bGwsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgdHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGRFbGVtZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHByb3BlcnR5LmluYWN0aXZlIHx8IHNlY3Rpb24uaXNQcm9wZXJ0eU92ZXJsb2Fk
ZWQocHJvcGVydHkubmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQu
bGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm92ZXJsb2FkZWQiKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFwcm9wZXJ0eS5wYXJzZWRPaykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY2hpbGRFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJub3QtcGFyc2Vk
LW9rIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQubGlzdEl0ZW1FbGVt
ZW50Lmluc2VydEJlZm9yZShXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuY3JlYXRlRXhj
bGFtYXRpb25NYXJrKHByb3BlcnR5Lm5hbWUpLCBjaGlsZEVsZW1lbnQubGlzdEl0ZW1FbGVtZW50
LmZpcnN0Q2hpbGQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVzdG9yZSBleHBhbmRlZCBz
dGF0ZSBhZnRlciB1cGRhdGUuCi0gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fZXhwYW5k
ZWRQcm9wZXJ0eU5hbWVzKSB7Ci0gICAgICAgICAgICBpZiAobmFtZSBpbiB0aGlzLl9wcm9wZXJ0
eVRyZWVFbGVtZW50cykKLSAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0eVRyZWVFbGVtZW50
c1tuYW1lXS5leHBhbmQoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlv
bn0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lfSBzdHlsZXNQYW5l
Ci0gKiBAcGFyYW0ge3N0cmluZ30gZGVmYXVsdFNlbGVjdG9yVGV4dAotICovCi1XZWJJbnNwZWN0
b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24oc3R5bGVzUGFuZSwgZGVm
YXVsdFNlbGVjdG9yVGV4dCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2Vj
dGlvbi5jYWxsKHRoaXMsIHN0eWxlc1BhbmUsIHtzZWxlY3RvclRleHQ6IGRlZmF1bHRTZWxlY3Rv
clRleHQsIHJ1bGU6IHtpc1ZpYUluc3BlY3RvcjogdHJ1ZX19LCB0cnVlLCBmYWxzZSwgZmFsc2Up
OwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJibGFuay1zZWN0aW9uIik7Ci19Ci0K
LVdlYkluc3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewot
ICAgIGdldCBpc0JsYW5rKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhdGhpcy5fbm9ybWFsOwot
ICAgIH0sCi0KLSAgICBleHBhbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5pc0JsYW5rKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rp
b24ucHJvdG90eXBlLmV4cGFuZC5jYWxsKHRoaXMpOwotICAgIH0sCi0KLSAgICBlZGl0aW5nU2Vs
ZWN0b3JDb21taXR0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0NvbnRlbnQsIG9sZENvbnRlbnQs
IGNvbnRleHQsIG1vdmVEaXJlY3Rpb24pCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuaXNCbGFu
aykgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJv
dG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZC5jYWxsKHRoaXMsIGVsZW1lbnQsIG5ld0Nv
bnRlbnQsIG9sZENvbnRlbnQsIGNvbnRleHQsIG1vdmVEaXJlY3Rpb24pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKG5l
d1J1bGUsIGRvZXNTZWxlY3RvckFmZmVjdFNlbGVjdGVkTm9kZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFyIHN0eWxlUnVsZSA9IHsgc2VjdGlvbjogdGhpcywgc3R5bGU6IG5ld1J1bGUuc3R5
bGUsIHNlbGVjdG9yVGV4dDogbmV3UnVsZS5zZWxlY3RvclRleHQsIHNvdXJjZVVSTDogbmV3UnVs
ZS5zb3VyY2VVUkwsIHJ1bGU6IG5ld1J1bGUgfTsKLSAgICAgICAgICAgIHRoaXMubWFrZU5vcm1h
bChzdHlsZVJ1bGUpOwotCi0gICAgICAgICAgICBpZiAoIWRvZXNTZWxlY3RvckFmZmVjdFNlbGVj
dGVkTm9kZSkgewotICAgICAgICAgICAgICAgIHRoaXMubm9BZmZlY3QgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJuby1hZmZlY3QiKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5fc2VsZWN0b3JSZWZFbGVtZW50LnJlbW92ZUNo
aWxkcmVuKCk7Ci0gICAgICAgICAgICB0aGlzLl9zZWxlY3RvclJlZkVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fY3JlYXRlUnVsZU9yaWdpbk5vZGUoKSk7Ci0gICAgICAgICAgICB0aGlzLmV4cGFu
ZCgpOwotICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50KSAvLyBNaWdo
dCBoYXZlIGJlZW4gZGV0YWNoZWQgYWxyZWFkeS4KLSAgICAgICAgICAgICAgICB0aGlzLl9tb3Zl
RWRpdG9yRnJvbVNlbGVjdG9yKG1vdmVEaXJlY3Rpb24pOwotCi0gICAgICAgICAgICB0aGlzLl9t
YXJrU2VsZWN0b3JNYXRjaGVzKCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGFyZW50UGFu
ZS5fdXNlck9wZXJhdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXdDb250ZW50KQot
ICAgICAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQudHJpbSgpOwotICAgICAgICB0aGlz
Ll9wYXJlbnRQYW5lLl91c2VyT3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LmNzc01vZGVsLmFkZFJ1bGUodGhpcy5wYW5lLm5vZGUuaWQsIG5ld0NvbnRlbnQsIHN1Y2Nlc3ND
YWxsYmFjay5iaW5kKHRoaXMpLCB0aGlzLmVkaXRpbmdTZWxlY3RvckNhbmNlbGxlZC5iaW5kKHRo
aXMpKTsKLSAgICB9LAotCi0gICAgZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fcGFyZW50UGFuZS5fdXNlck9wZXJhdGlvbjsK
LSAgICAgICAgaWYgKCF0aGlzLmlzQmxhbmspIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2VsZWN0b3JDYW5jZWxsZWQu
Y2FsbCh0aGlzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRo
aXMucGFuZS5yZW1vdmVTZWN0aW9uKHRoaXMpOwotICAgIH0sCi0KLSAgICBtYWtlTm9ybWFsOiBm
dW5jdGlvbihzdHlsZVJ1bGUpCi0gICAgewotICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5
bGVDbGFzcygiYmxhbmstc2VjdGlvbiIpOwotICAgICAgICB0aGlzLnN0eWxlUnVsZSA9IHN0eWxl
UnVsZTsKLSAgICAgICAgdGhpcy5ydWxlID0gc3R5bGVSdWxlLnJ1bGU7Ci0KLSAgICAgICAgLy8g
RklYTUU6IHJlcGxhY2UgdGhpcyBpbnN0YW5jZSBieSBhIG5vcm1hbCBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0aWVzU2VjdGlvbi4KLSAgICAgICAgdGhpcy5fbm9ybWFsID0gdHJ1ZTsKLSAgICB9
LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5w
cm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtUcmVlRWxl
bWVudH0KLSAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZVJ1bGUKLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5D
U1NQcm9wZXJ0eX0gcHJvcGVydHkKLSAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkCi0gKiBA
cGFyYW0ge2Jvb2xlYW59IG92ZXJsb2FkZWQKLSAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQ2hpbGRy
ZW4KLSAqLwotV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudEJhc2UgPSBmdW5j
dGlvbihzdHlsZVJ1bGUsIHN0eWxlLCBwcm9wZXJ0eSwgaW5oZXJpdGVkLCBvdmVybG9hZGVkLCBo
YXNDaGlsZHJlbikKLXsKLSAgICB0aGlzLl9zdHlsZVJ1bGUgPSBzdHlsZVJ1bGU7Ci0gICAgdGhp
cy5zdHlsZSA9IHN0eWxlOwotICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKLSAgICB0aGlz
Ll9pbmhlcml0ZWQgPSBpbmhlcml0ZWQ7Ci0gICAgdGhpcy5fb3ZlcmxvYWRlZCA9IG92ZXJsb2Fk
ZWQ7Ci0KLSAgICAvLyBQYXNzIGFuIGVtcHR5IHRpdGxlLCB0aGUgdGl0bGUgZ2V0cyBtYWRlIGxh
dGVyIGluIG9uYXR0YWNoLgotICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgIiIsIG51bGwsIGhh
c0NoaWxkcmVuKTsKLQotICAgIHRoaXMuc2VsZWN0YWJsZSA9IGZhbHNlOwotfQotCi1XZWJJbnNw
ZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50QmFzZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5ET01Ob2RlfQotICAgICAqLwotICAgIG5v
ZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOyAgLy8gT3ZlcnJpZGRl
biBieSBhbmNlc3RvcnMuCi0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gez9XZWJJ
bnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmV9Ci0gICAgICovCi0gICAgZWRpdGFibGVQYW5lOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsgIC8vIE92ZXJyaWRkZW4gYnkg
YW5jZXN0b3JzLgotICAgIH0sCi0KLSAgICBnZXQgaW5oZXJpdGVkKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9pbmhlcml0ZWQ7Ci0gICAgfSwKLQotICAgIHNldCBpbmhlcml0ZWQoeCkK
LSAgICB7Ci0gICAgICAgIGlmICh4ID09PSB0aGlzLl9pbmhlcml0ZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHRoaXMuX2luaGVyaXRlZCA9IHg7Ci0gICAgICAgIHRoaXMudXBkYXRl
U3RhdGUoKTsKLSAgICB9LAotCi0gICAgZ2V0IG92ZXJsb2FkZWQoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX292ZXJsb2FkZWQ7Ci0gICAgfSwKLQotICAgIHNldCBvdmVybG9hZGVkKHgp
Ci0gICAgewotICAgICAgICBpZiAoeCA9PT0gdGhpcy5fb3ZlcmxvYWRlZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgdGhpcy5fb3ZlcmxvYWRlZCA9IHg7Ci0gICAgICAgIHRoaXMudXBk
YXRlU3RhdGUoKTsKLSAgICB9LAotCi0gICAgZ2V0IGRpc2FibGVkKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLnByb3BlcnR5LmRpc2FibGVkOwotICAgIH0sCi0KLSAgICBnZXQgbmFtZSgp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgfHwgIXRoaXMucHJvcGVydHkudGV4
dCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5Lm5hbWU7Ci0KLSAgICAgICAgdmFy
IHRleHQgPSB0aGlzLnByb3BlcnR5LnRleHQ7Ci0gICAgICAgIHZhciBpbmRleCA9IHRleHQuaW5k
ZXhPZigiOiIpOwotICAgICAgICBpZiAoaW5kZXggPCAxKQotICAgICAgICAgICAgcmV0dXJuIHRo
aXMucHJvcGVydHkubmFtZTsKLQotICAgICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgaW5k
ZXgpLnRyaW0oKTsKLSAgICB9LAotCi0gICAgZ2V0IHByaW9yaXR5KCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLmRpc2FibGVkKQotICAgICAgICAgICAgcmV0dXJuICIiOyAvLyByZWx5IHVwb24g
cmF3IHRleHQgdG8gcmVuZGVyIGl0IGluIHRoZSB2YWx1ZSBmaWVsZAotICAgICAgICByZXR1cm4g
dGhpcy5wcm9wZXJ0eS5wcmlvcml0eTsKLSAgICB9LAotCi0gICAgZ2V0IHZhbHVlKCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5wcm9wZXJ0eS50ZXh0KQotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkudmFsdWU7Ci0KLSAgICAgICAgdmFyIG1hdGNo
ID0gdGhpcy5wcm9wZXJ0eS50ZXh0Lm1hdGNoKC8oLiopO1xzKi8pOwotICAgICAgICBpZiAoIW1h
dGNoIHx8ICFtYXRjaFsxXSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnZhbHVl
OwotCi0gICAgICAgIHZhciB0ZXh0ID0gbWF0Y2hbMV07Ci0gICAgICAgIHZhciBpbmRleCA9IHRl
eHQuaW5kZXhPZigiOiIpOwotICAgICAgICBpZiAoaW5kZXggPCAxKQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMucHJvcGVydHkudmFsdWU7Ci0KLSAgICAgICAgcmV0dXJuIHRleHQuc3Vic3RyaW5n
KGluZGV4ICsgMSkudHJpbSgpOwotICAgIH0sCi0KLSAgICBnZXQgcGFyc2VkT2soKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkucGFyc2VkT2s7Ci0gICAgfSwKLQotICAgIG9u
YXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0g
ICAgfSwKLQotICAgIHVwZGF0ZVRpdGxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
dmFsdWUgPSB0aGlzLnZhbHVlOwotCi0gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTsKLQotICAg
ICAgICB2YXIgbmFtZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0g
ICAgICAgIG5hbWVFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtY3NzLXByb3BlcnR5IjsKLSAg
ICAgICAgbmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLm5hbWU7Ci0gICAgICAgIG5hbWVF
bGVtZW50LnRpdGxlID0gdGhpcy5wcm9wZXJ0eS5wcm9wZXJ0eVRleHQ7Ci0gICAgICAgIHRoaXMu
bmFtZUVsZW1lbnQgPSBuYW1lRWxlbWVudDsKLQotICAgICAgICB0aGlzLl9leHBhbmRFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB0aGlzLl9leHBhbmRF
bGVtZW50LmNsYXNzTmFtZSA9ICJleHBhbmQtZWxlbWVudCI7Ci0KLSAgICAgICAgdmFyIHZhbHVl
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgdmFsdWVF
bGVtZW50LmNsYXNzTmFtZSA9ICJ2YWx1ZSI7Ci0gICAgICAgIHRoaXMudmFsdWVFbGVtZW50ID0g
dmFsdWVFbGVtZW50OwotCi0gICAgICAgIHZhciBjZiA9IFdlYkluc3BlY3Rvci5Db2xvci5Gb3Jt
YXQ7Ci0KLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7
Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZShyZWdleCwgcHJvY2Vzc29yLCBu
ZXh0UHJvY2Vzc29yLCB2YWx1ZVRleHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAg
ICAgICAgICAgICAgIHZhciBpdGVtcyA9IHZhbHVlVGV4dC5yZXBsYWNlKHJlZ2V4LCAiXDAkMVww
Iikuc3BsaXQoIlwwIik7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVt
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGkgJSAyKSA9PT0gMCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRQcm9jZXNzb3IpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG5leHRQcm9jZXNzb3IoaXRl
bXNbaV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
aXRlbXNbaV0pKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBwcm9jZXNzZWROb2RlID0gcHJvY2Vzc29yKGl0ZW1zW2ldKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWROb2RlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwcm9jZXNzZWROb2RlKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biBjb250YWluZXI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGxpbmtp
ZnlVUkwodXJsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBocmVmVXJsID0g
dXJsOwotICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGhyZWZVcmwubWF0Y2goL1snIl0/KFte
JyJdKykvKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2gpCi0gICAgICAgICAgICAgICAgICAg
IGhyZWZVcmwgPSBtYXRjaFsxXTsKLSAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9j
dW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5l
ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidXJsKCIpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc2VsZi5fc3R5bGVSdWxlLnNvdXJjZVVSTCkKLSAgICAgICAgICAgICAgICAg
ICAgaHJlZlVybCA9IFdlYkluc3BlY3Rvci5QYXJzZWRVUkwuY29tcGxldGVVUkwoc2VsZi5fc3R5
bGVSdWxlLnNvdXJjZVVSTCwgaHJlZlVybCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Vs
Zi5ub2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIGhyZWZVcmwgPSBzZWxmLm5vZGUoKS5yZXNv
bHZlVVJMKGhyZWZVcmwpOwotICAgICAgICAgICAgICAgIHZhciBoYXNSZXNvdXJjZSA9ICEhV2Vi
SW5zcGVjdG9yLnJlc291cmNlRm9yVVJMKGhyZWZVcmwpOwotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFzTm9kZSgpIHNob3VsZCByZWFsbHkgdXNlIGJh
c2VVUkkuCi0gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rv
ci5saW5raWZ5VVJMQXNOb2RlKGhyZWZVcmwsIHVybCwgdW5kZWZpbmVkLCAhaGFzUmVzb3VyY2Up
KTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIikiKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0NvbG9yKHRleHQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gV2ViSW5zcGVjdG9yLkNvbG9y
LnBhcnNlKHRleHQpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY2FuIGJlIGNhbGxlZCB3aXRo
IHZhbGlkIG5vbi1jb2xvciB2YWx1ZXMgb2YgfHRleHR8IChsaWtlICdub25lJyBmcm9tIGJvcmRl
ciBzdHlsZSkKLSAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgZm9ybWF0ID0gZ2V0Rm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgdmFyIHNwZWN0cnVt
SGVscGVyID0gc2VsZi5lZGl0YWJsZVBhbmUoKSAmJiBzZWxmLmVkaXRhYmxlUGFuZSgpLl9zcGVj
dHJ1bUhlbHBlcjsKLSAgICAgICAgICAgICAgICB2YXIgc3BlY3RydW0gPSBzcGVjdHJ1bUhlbHBl
ciA/IHNwZWN0cnVtSGVscGVyLnNwZWN0cnVtKCkgOiBudWxsOwotCi0gICAgICAgICAgICAgICAg
dmFyIGNvbG9yU3dhdGNoID0gbmV3IFdlYkluc3BlY3Rvci5Db2xvclN3YXRjaCgpOwotICAgICAg
ICAgICAgICAgIGNvbG9yU3dhdGNoLnNldENvbG9yU3RyaW5nKHRleHQpOwotICAgICAgICAgICAg
ICAgIGNvbG9yU3dhdGNoLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBzd2F0Y2hD
bGljaywgZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgdmFyIHNjcm9sbGVyRWxlbWVudDsKLQot
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNwZWN0cnVtQ2hhbmdlZChlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBlLmRhdGE7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBjb2xvclN0cmluZyA9IGNvbG9yLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHNwZWN0cnVtLmRpc3BsYXlUZXh0ID0gY29sb3JTdHJpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yVmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gY29sb3JTdHJpbmc7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbG9yU3dhdGNoLnNldENvbG9yU3RyaW5nKGNvbG9yU3RyaW5nKTsK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseVN0eWxlVGV4dChuYW1lRWxlbWVudC50ZXh0
Q29udGVudCArICI6ICIgKyB2YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNw
ZWN0cnVtSGlkZGVuKGV2ZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNjcm9sbGVyRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVy
RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLCByZXBvc2l0aW9uU3BlY3RydW0s
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1pdEVkaXQgPSBldmVudC5kYXRh
OwotICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHlUZXh0ID0gIWNvbW1pdEVkaXQgJiYg
c2VsZi5vcmlnaW5hbFByb3BlcnR5VGV4dCA/IHNlbGYub3JpZ2luYWxQcm9wZXJ0eVRleHQgOiAo
bmFtZUVsZW1lbnQudGV4dENvbnRlbnQgKyAiOiAiICsgdmFsdWVFbGVtZW50LnRleHRDb250ZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseVN0eWxlVGV4dChwcm9wZXJ0eVRleHQs
IHRydWUsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3RydW0ucmVtb3Zl
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU3BlY3RydW0uRXZlbnRzLkNvbG9yQ2hhbmdlZCwg
c3BlY3RydW1DaGFuZ2VkKTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3RydW1IZWxwZXIucmVt
b3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU3BlY3RydW1Qb3B1cEhlbHBlci5FdmVudHMu
SGlkZGVuLCBzcGVjdHJ1bUhpZGRlbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNl
bGYuZWRpdGFibGVQYW5lKCkuX2lzRWRpdGluZ1N0eWxlOwotICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgc2VsZi5vcmlnaW5hbFByb3BlcnR5VGV4dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBmdW5jdGlvbiByZXBvc2l0aW9uU3BlY3RydW0oKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3RydW1IZWxwZXIucmVwb3NpdGlvbihjb2xv
clN3YXRjaC5lbGVtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBm
dW5jdGlvbiBzd2F0Y2hDbGljayhlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gU2hpZnQgKyBjbGljayB0b2dnbGVzIGNvbG9yIGZvcm1hdHMuCi0gICAgICAgICAg
ICAgICAgICAgIC8vIENsaWNrIG9wZW5zIGNvbG9ycGlja2VyLCBvbmx5IGlmIHRoZSBlbGVtZW50
IGlzIG5vdCBpbiBjb21wdXRlZCBzdHlsZXMgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFzcGVjdHJ1bUhlbHBlciB8fCBlLnNoaWZ0S2V5KQotICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlQ29sb3JEaXNwbGF5KGUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB2aXNpYmxlID0gc3BlY3RydW1IZWxwZXIudG9nZ2xl
KGNvbG9yU3dhdGNoLmVsZW1lbnQsIGNvbG9yLCBmb3JtYXQpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmlzaWJsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN0
cnVtLmRpc3BsYXlUZXh0ID0gY29sb3IudG9TdHJpbmcoZm9ybWF0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLm9yaWdpbmFsUHJvcGVydHlUZXh0ID0gc2VsZi5wcm9wZXJ0eS5w
cm9wZXJ0eVRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lZGl0YWJsZVBh
bmUoKS5faXNFZGl0aW5nU3R5bGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWN0cnVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNwZWN0cnVtLkV2ZW50cy5D
b2xvckNoYW5nZWQsIHNwZWN0cnVtQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3BlY3RydW1IZWxwZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU3BlY3RydW1Q
b3B1cEhlbHBlci5FdmVudHMuSGlkZGVuLCBzcGVjdHJ1bUhpZGRlbik7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQgPSBjb2xvclN3YXRjaC5lbGVtZW50LmVu
Y2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoInNjcm9sbC10YXJnZXQiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsZXJFbGVtZW50KQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwg
cmVwb3NpdGlvblNwZWN0cnVtLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJVbmFi
bGUgdG8gaGFuZGxlIGNvbG9yIHBpY2tlciBzY3JvbGxpbmciKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlLmNv
bnN1bWUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZnVuY3Rp
b24gZ2V0Rm9ybWF0KCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBmb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXRTZXR0aW5nID0gV2ViSW5z
cGVjdG9yLnNldHRpbmdzLmNvbG9yRm9ybWF0LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZm9ybWF0U2V0dGluZyA9PT0gY2YuT3JpZ2luYWwpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JtYXQgPSBjZi5PcmlnaW5hbDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9y
bWF0U2V0dGluZyA9PT0gY2YuUkdCKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0g
KGNvbG9yLnNpbXBsZSA/IGNmLlJHQiA6IGNmLlJHQkEpOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChmb3JtYXRTZXR0aW5nID09PSBjZi5IU0wpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JtYXQgPSAoY29sb3Iuc2ltcGxlID8gY2YuSFNMIDogY2YuSFNMQSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNvbG9yLnNpbXBsZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvcm1hdCA9IChjb2xvci5oYXNTaG9ydEhleCgpID8gY2YuU2hvcnRIRVggOiBjZi5IRVgpOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQg
PSBjZi5SR0JBOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGNvbG9yVmFsdWVFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgICAgIGNvbG9yVmFsdWVF
bGVtZW50LnRleHRDb250ZW50ID0gY29sb3IudG9TdHJpbmcoZm9ybWF0KTsKLQotICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIG5leHRGb3JtYXQoY3VyRm9ybWF0KQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBsb29wIGlzIGFzIGZvbGxvd3M6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICogb3JpZ2luYWwKLSAgICAgICAgICAgICAgICAgICAgLy8g
KiByZ2IoYSkKLSAgICAgICAgICAgICAgICAgICAgLy8gKiBoc2woYSkKLSAgICAgICAgICAgICAg
ICAgICAgLy8gKiBuaWNrbmFtZSAoaWYgdGhlIGNvbG9yIGhhcyBhIG5pY2tuYW1lKQotICAgICAg
ICAgICAgICAgICAgICAvLyAqIGlmIHRoZSBjb2xvciBpcyBzaW1wbGU6Ci0gICAgICAgICAgICAg
ICAgICAgIC8vICAgLSBzaG9ydGhleCAoaWYgaGFzIHNob3J0IGhleCkKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAtIGhleAotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGN1ckZvcm1hdCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjZi5PcmlnaW5hbDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3Iuc2ltcGxlID8gY2YuUkdCIDogY2YuUkdCQTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjZi5SR0I6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIGNmLlJHQkE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbG9yLnNpbXBsZSA/IGNmLkhTTCA6IGNmLkhTTEE7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgY2YuSFNMOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjZi5IU0xBOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvci5uaWNrbmFtZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNmLk5pY2tuYW1lOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb2xvci5zaW1wbGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb2xvci5oYXNTaG9ydEhleCgpID8gY2YuU2hvcnRIRVggOiBjZi5I
RVg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2YuT3JpZ2luYWw7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgY2YuU2hvcnRIRVg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNmLkhFWDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjZi5IRVg6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNmLk9yaWdpbmFsOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIGNmLk5pY2tuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjb2xvci5zaW1wbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjb2xvci5oYXNTaG9ydEhleCgpID8gY2YuU2hvcnRIRVggOiBjZi5IRVg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2YuT3JpZ2luYWw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFu
Z2VDb2xvckRpc3BsYXkoZXZlbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBuZXh0Rm9ybWF0KGZv
cm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gY29sb3Iu
dG9TdHJpbmcoZm9ybWF0IHx8ICIiKTsKLSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoZm9y
bWF0ICYmIGN1cnJlbnRWYWx1ZSA9PT0gY29sb3IudmFsdWUgJiYgZm9ybWF0ICE9PSBjZi5Pcmln
aW5hbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbG9yVmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gY3VycmVudFZhbHVlOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJub2JyIik7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKGNvbG9yU3dhdGNoLmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5l
ci5hcHBlbmRDaGlsZChjb2xvclZhbHVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnRhaW5lcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNvbG9yUmVnZXgg
PSAvKCg/OnJnYnxoc2wpYT9cKFteKV0rXCl8I1swLTlhLWZBLUZdezZ9fCNbMC05YS1mQS1GXXsz
fXxcYlx3K1xiKD8hLSkpL2c7Ci0gICAgICAgICAgICB2YXIgY29sb3JQcm9jZXNzb3IgPSBwcm9j
ZXNzVmFsdWUuYmluZCh3aW5kb3csIGNvbG9yUmVnZXgsIHByb2Nlc3NDb2xvciwgbnVsbCk7Ci0K
LSAgICAgICAgICAgIHZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZChwcm9jZXNzVmFsdWUoL3VybFwo
XHMqKFteKV0rKVxzKlwpL2csIGxpbmtpZnlVUkwuYmluZCh0aGlzKSwgV2ViSW5zcGVjdG9yLkNT
U01ldGFkYXRhLmlzQ29sb3JBd2FyZVByb3BlcnR5KHNlbGYubmFtZSkgPyBjb2xvclByb2Nlc3Nv
ciA6IG51bGwsIHZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmxpc3RJdGVtRWxl
bWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICBuYW1lRWxlbWVudC5ub3JtYWxpemUoKTsK
LSAgICAgICAgdmFsdWVFbGVtZW50Lm5vcm1hbGl6ZSgpOwotCi0gICAgICAgIGlmICghdGhpcy50
cmVlT3V0bGluZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmxpc3RJdGVt
RWxlbWVudC5hcHBlbmRDaGlsZChuYW1lRWxlbWVudCk7Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1F
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI6ICIpKTsKLSAgICAg
ICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZXhwYW5kRWxlbWVudCk7
Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlRWxlbWVudCk7
Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCI7IikpOwotCi0gICAgICAgIGlmICghdGhpcy5wYXJzZWRPaykgewotICAgICAg
ICAgICAgLy8gQXZvaWQgaGF2aW5nIGxvbmdoYW5kcyB1bmRlciBhbiBpbnZhbGlkIHNob3J0aGFu
ZC4KLSAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIHRo
aXMubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5vdC1wYXJzZWQtb2siKTsKLQotICAg
ICAgICAgICAgLy8gQWRkIGEgc2VwYXJhdGUgZXhjbGFtYXRpb24gbWFyayBJTUcgZWxlbWVudCB3
aXRoIGEgdG9vbHRpcC4KLSAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50Lmluc2VydEJl
Zm9yZShXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuY3JlYXRlRXhjbGFtYXRpb25NYXJr
KHRoaXMucHJvcGVydHkubmFtZSksIHRoaXMubGlzdEl0ZW1FbGVtZW50LmZpcnN0Q2hpbGQpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICh0aGlzLnByb3BlcnR5LmluYWN0aXZlKQotICAgICAgICAg
ICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaW5hY3RpdmUiKTsKLSAgICB9
LAotCi0gICAgdXBkYXRlU3RhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5saXN0SXRlbUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRo
aXMuc3R5bGUuaXNQcm9wZXJ0eUltcGxpY2l0KHRoaXMubmFtZSkgfHwgdGhpcy52YWx1ZSA9PT0g
ImluaXRpYWwiKQotICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFz
cygiaW1wbGljaXQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaW1wbGljaXQiKTsKLQotICAgICAgICBpZiAodGhpcy5p
bmhlcml0ZWQpCi0gICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJpbmhlcml0ZWQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaW5oZXJpdGVkIik7Ci0KLSAgICAgICAgaWYgKHRoaXMu
b3ZlcmxvYWRlZCkKLSAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xh
c3MoIm92ZXJsb2FkZWQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5saXN0SXRl
bUVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygib3ZlcmxvYWRlZCIpOwotCi0gICAgICAgIGlmICh0
aGlzLmRpc2FibGVkKQotICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVD
bGFzcygiZGlzYWJsZWQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5saXN0SXRl
bUVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZGlzYWJsZWQiKTsKLSAgICB9LAotCi0gICAgX19w
cm90b19fOiBUcmVlRWxlbWVudC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50QmFzZX0K
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lfSBzdHlsZXNQYW5lCi0g
KiBAcGFyYW0ge09iamVjdH0gc3R5bGVSdWxlCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DU1NT
dHlsZURlY2xhcmF0aW9ufSBzdHlsZQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1NTUHJvcGVy
dHl9IHByb3BlcnR5Ci0gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZAotICovCi1XZWJJbnNw
ZWN0b3IuQ29tcHV0ZWRTdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdHlsZXNQ
YW5lLCBzdHlsZVJ1bGUsIHN0eWxlLCBwcm9wZXJ0eSwgaW5oZXJpdGVkKQotewotICAgIFdlYklu
c3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnRCYXNlLmNhbGwodGhpcywgc3R5bGVSdWxl
LCBzdHlsZSwgcHJvcGVydHksIGluaGVyaXRlZCwgZmFsc2UsIGZhbHNlKTsKLSAgICB0aGlzLl9z
dHlsZXNQYW5lID0gc3R5bGVzUGFuZTsKLX0KLQotV2ViSW5zcGVjdG9yLkNvbXB1dGVkU3R5bGVQ
cm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHs/V2ViSW5zcGVjdG9yLkRPTU5vZGV9Ci0gICAgICovCi0gICAgbm9kZTogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlc1BhbmUubm9kZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZX0K
LSAgICAgKi8KLSAgICBlZGl0YWJsZVBhbmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnR5VHJlZUVsZW1lbnRCYXNlLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnRCYXNl
fQotICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lfSBzdHlsZXNQYW5l
Ci0gKiBAcGFyYW0ge09iamVjdH0gc3R5bGVSdWxlCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1NTUHJv
cGVydHl9IHByb3BlcnR5Ci0gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU2hvcnRoYW5kCi0gKiBAcGFy
YW0ge2Jvb2xlYW59IGluaGVyaXRlZAotICogQHBhcmFtIHtib29sZWFufSBvdmVybG9hZGVkCi0g
Ki8KLVdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdHls
ZXNQYW5lLCBzdHlsZVJ1bGUsIHN0eWxlLCBwcm9wZXJ0eSwgaXNTaG9ydGhhbmQsIGluaGVyaXRl
ZCwgb3ZlcmxvYWRlZCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50QmFzZS5jYWxsKHRoaXMsIHN0eWxlUnVsZSwgc3R5bGUsIHByb3BlcnR5LCBpbmhlcml0ZWQs
IG92ZXJsb2FkZWQsIGlzU2hvcnRoYW5kKTsKLSAgICB0aGlzLl9wYXJlbnRQYW5lID0gc3R5bGVz
UGFuZTsKLSAgICB0aGlzLmlzU2hvcnRoYW5kID0gaXNTaG9ydGhhbmQ7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIC8qKgotICAg
ICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuRE9NTm9kZX0KLSAgICAgKi8KLSAgICBub2RlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50UGFuZS5ub2RlOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlN0eWxlc1Np
ZGViYXJQYW5lfQotICAgICAqLwotICAgIGVkaXRhYmxlUGFuZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFBhbmU7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9ufQotICAgICAq
LwotICAgIHNlY3Rpb246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnRy
ZWVPdXRsaW5lICYmIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbjsKLSAgICB9LAotCi0gICAgX3Vw
ZGF0ZVBhbmU6IGZ1bmN0aW9uKHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBzZWN0
aW9uID0gdGhpcy5zZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzZWN0aW9uICYmIHNlY3Rpb24ucGFu
ZSkKLSAgICAgICAgICAgIHNlY3Rpb24ucGFuZS5fcmVmcmVzaFVwZGF0ZShzZWN0aW9uLCBmYWxz
ZSwgdXNlckNhbGxiYWNrKTsKLSAgICAgICAgZWxzZSAgewotICAgICAgICAgICAgaWYgKHVzZXJD
YWxsYmFjaykKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2soKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICB0b2dnbGVFbmFibGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IHZhciBkaXNhYmxlZCA9ICFldmVudC50YXJnZXQuY2hlY2tlZDsKLQotICAgICAgICBmdW5jdGlv
biBjYWxsYmFjayhuZXdTdHlsZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFuZXdTdHls
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIG5ld1N0eWxlLnBhcmVu
dFJ1bGUgPSB0aGlzLnN0eWxlLnBhcmVudFJ1bGU7Ci0gICAgICAgICAgICB0aGlzLnN0eWxlID0g
bmV3U3R5bGU7Ci0gICAgICAgICAgICB0aGlzLl9zdHlsZVJ1bGUuc3R5bGUgPSBuZXdTdHlsZTsK
LQotICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLnNlY3Rpb24oKTsKLSAgICAgICAgICAg
IGlmIChzZWN0aW9uICYmIHNlY3Rpb24ucGFuZSkKLSAgICAgICAgICAgICAgICBzZWN0aW9uLnBh
bmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzdHlsZSBwcm9wZXJ0eSB0b2dnbGVkIik7Ci0K
LSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBhbmUoKTsKLQotICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX3BhcmVudFBhbmUuX3VzZXJPcGVyYXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
Ll9wYXJlbnRQYW5lLl91c2VyT3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5wcm9wZXJ0
eS5zZXREaXNhYmxlZChkaXNhYmxlZCwgY2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgICAgIGV2
ZW50LmNvbnN1bWUoKTsKLSAgICB9LAotCi0gICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgLy8gT25seSBwb3B1bGF0ZSBvbmNlIGFuZCBpZiB0aGlzIHByb3BlcnR5IGlz
IGEgc2hvcnRoYW5kLgotICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMu
aXNTaG9ydGhhbmQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGxvbmdoYW5k
UHJvcGVydGllcyA9IHRoaXMuc3R5bGUubG9uZ2hhbmRQcm9wZXJ0aWVzKHRoaXMubmFtZSk7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRQcm9wZXJ0aWVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IGxvbmdoYW5kUHJvcGVydGllc1tpXS5uYW1lOwot
Ci0gICAgICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbigpOwotICAgICAgICAgICAg
aWYgKHNlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICB2YXIgaW5oZXJpdGVkID0gc2VjdGlvbi5p
c1Byb3BlcnR5SW5oZXJpdGVkKG5hbWUpOwotICAgICAgICAgICAgICAgIHZhciBvdmVybG9hZGVk
ID0gc2VjdGlvbi5pc1Byb3BlcnR5T3ZlcmxvYWRlZChuYW1lKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdmFyIGxpdmVQcm9wZXJ0eSA9IHRoaXMuc3R5bGUuZ2V0TGl2ZVByb3BlcnR5
KG5hbWUpOwotICAgICAgICAgICAgaWYgKCFsaXZlUHJvcGVydHkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnR5VHJlZUVsZW1lbnQodGhpcy5fcGFyZW50UGFuZSwgdGhpcy5fc3R5bGVSdWxlLCB0
aGlzLnN0eWxlLCBsaXZlUHJvcGVydHksIGZhbHNlLCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQpOwot
ICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChpdGVtKTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICByZXN0b3JlTmFtZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIFJl
c3RvcmUgPHNwYW4gY2xhc3M9IndlYmtpdC1jc3MtcHJvcGVydHkiPiBpZiBpdCBkb2Vzbid0IHll
dCBleGlzdCBvciB3YXMgYWNjaWRlbnRhbGx5IGRlbGV0ZWQuCi0gICAgICAgIGlmICh0aGlzLm5h
bWVFbGVtZW50ID09PSB0aGlzLmxpc3RJdGVtRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIud2Via2l0
LWNzcy1wcm9wZXJ0eSIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMubmFt
ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHRoaXMu
bmFtZUVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1jc3MtcHJvcGVydHkiOwotICAgICAgICB0
aGlzLm5hbWVFbGVtZW50LnRleHRDb250ZW50ID0gIiI7Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1F
bGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLm5hbWVFbGVtZW50LCB0aGlzLmxpc3RJdGVtRWxlbWVu
dC5maXJzdENoaWxkKTsKLSAgICB9LAotCi0gICAgb25hdHRhY2g6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnRCYXNlLnByb3Rv
dHlwZS5vbmF0dGFjaC5jYWxsKHRoaXMpOwotCi0gICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMp
KTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1
cCIsIHRoaXMuX3Jlc2V0TW91c2VEb3duRWxlbWVudC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhp
cy5saXN0SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9tb3VzZUNs
aWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICBfbW91c2VEb3duOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9wYXJlbnRQYW5lKSB7Ci0gICAgICAgICAgICB0
aGlzLl9wYXJlbnRQYW5lLl9tb3VzZURvd25UcmVlRWxlbWVudCA9IHRoaXM7Ci0gICAgICAgICAg
ICB0aGlzLl9wYXJlbnRQYW5lLl9tb3VzZURvd25UcmVlRWxlbWVudElzTmFtZSA9IHRoaXMuX2lz
TmFtZUVsZW1lbnQoZXZlbnQudGFyZ2V0KTsKLSAgICAgICAgICAgIHRoaXMuX3BhcmVudFBhbmUu
X21vdXNlRG93blRyZWVFbGVtZW50SXNWYWx1ZSA9IHRoaXMuX2lzVmFsdWVFbGVtZW50KGV2ZW50
LnRhcmdldCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3Jlc2V0TW91c2VEb3duRWxlbWVu
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3BhcmVudFBhbmUpIHsKLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYXJlbnRQYW5lLl9tb3VzZURvd25UcmVlRWxlbWVudDsK
LSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYXJlbnRQYW5lLl9tb3VzZURvd25UcmVlRWxlbWVu
dElzTmFtZTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYXJlbnRQYW5lLl9tb3VzZURvd25U
cmVlRWxlbWVudElzVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgdXBkYXRlVGl0bGU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJl
ZUVsZW1lbnRCYXNlLnByb3RvdHlwZS51cGRhdGVUaXRsZS5jYWxsKHRoaXMpOwotCi0gICAgICAg
IGlmICh0aGlzLnBhcnNlZE9rICYmIHRoaXMuc2VjdGlvbigpICYmIHRoaXMucGFyZW50LnJvb3Qp
IHsKLSAgICAgICAgICAgIHZhciBlbmFibGVkQ2hlY2tib3hFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgICAgIGVuYWJsZWRDaGVja2JveEVsZW1lbnQu
Y2xhc3NOYW1lID0gImVuYWJsZWQtYnV0dG9uIjsKLSAgICAgICAgICAgIGVuYWJsZWRDaGVja2Jv
eEVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7Ci0gICAgICAgICAgICBlbmFibGVkQ2hlY2tib3hF
bGVtZW50LmNoZWNrZWQgPSAhdGhpcy5kaXNhYmxlZDsKLSAgICAgICAgICAgIGVuYWJsZWRDaGVj
a2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLnRvZ2dsZUVuYWJsZWQu
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuaW5z
ZXJ0QmVmb3JlKGVuYWJsZWRDaGVja2JveEVsZW1lbnQsIHRoaXMubGlzdEl0ZW1FbGVtZW50LmZp
cnN0Q2hpbGQpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9tb3VzZUNsaWNrOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29s
bGFwc2VkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1
ZSk7Ci0KLSAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5saXN0SXRlbUVsZW1lbnQp
IHsKLSAgICAgICAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5zZWN0aW9uKCk7Ci0gICAgICAgICAg
ICBpZiAoIXNlY3Rpb24gfHwgIXNlY3Rpb24uZWRpdGFibGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICBpZiAoc2VjdGlvbi5fY2hlY2tXaWxsQ2FuY2VsRWRpdGluZygp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHNlY3Rpb24uYWRkTmV3Qmxh
bmtQcm9wZXJ0eSh0aGlzLnByb3BlcnR5LmluZGV4ICsgMSkuc3RhcnRFZGl0aW5nKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50KSAmJiB0aGlzLnNlY3Rpb24o
KS5uYXZpZ2FibGUpIHsKLSAgICAgICAgICAgIHRoaXMuX25hdmlnYXRlVG9Tb3VyY2UoZXZlbnQu
dGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
c3RhcnRFZGl0aW5nKGV2ZW50LnRhcmdldCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7RWxlbWVudH0gZWxlbWVudAotICAgICAqLwotICAgIF9uYXZpZ2F0ZVRvU291cmNlOiBm
dW5jdGlvbihlbGVtZW50KQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5zZWN0
aW9uKCkubmF2aWdhYmxlKTsKLSAgICAgICAgdmFyIHByb3BlcnR5TmFtZUNsaWNrZWQgPSBlbGVt
ZW50ID09PSB0aGlzLm5hbWVFbGVtZW50OwotICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IHRoaXMu
cHJvcGVydHkudWlMb2NhdGlvbihwcm9wZXJ0eU5hbWVDbGlja2VkKTsKLSAgICAgICAgaWYgKCF1
aUxvY2F0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2hv
d1BhbmVsKCJzY3JpcHRzIikuc2hvd1VJU291cmNlQ29kZSh1aUxvY2F0aW9uLnVpU291cmNlQ29k
ZSwgdWlMb2NhdGlvbi5saW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAgX2lzTmFtZUVsZW1lbnQ6
IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gZWxlbWVudC5lbmNsb3Np
bmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtY3NzLXByb3BlcnR5IikgPT09IHRoaXMubmFt
ZUVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9pc1ZhbHVlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVu
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIWVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcygidmFsdWUiKTsKLSAgICB9LAotCi0gICAgc3RhcnRFZGl0aW5nOiBmdW5jdGlvbihz
ZWxlY3RFbGVtZW50KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IHdlIGRvbid0IGFsbG93IGVk
aXRpbmcgb2YgbG9uZ2hhbmQgcHJvcGVydGllcyB1bmRlciBhIHNob3J0aGFuZCByaWdodCBub3cu
Ci0gICAgICAgIGlmICh0aGlzLnBhcmVudC5pc1Nob3J0aGFuZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoc2VsZWN0RWxlbWVudCA9PT0gdGhpcy5fZXhwYW5kRWxlbWVudCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuc2VjdGlv
bigpOwotICAgICAgICBpZiAoc2VjdGlvbiAmJiAhc2VjdGlvbi5lZGl0YWJsZSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXNlbGVjdEVsZW1lbnQpCi0gICAgICAgICAgICBz
ZWxlY3RFbGVtZW50ID0gdGhpcy5uYW1lRWxlbWVudDsgLy8gTm8gYXJndW1lbnRzIHBhc3NlZCBp
biAtIGVkaXQgdGhlIG5hbWUgZWxlbWVudCBieSBkZWZhdWx0LgotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZWxlY3RFbGVtZW50ID0gc2VsZWN0RWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxm
V2l0aENsYXNzKCJ3ZWJraXQtY3NzLXByb3BlcnR5IikgfHwgc2VsZWN0RWxlbWVudC5lbmNsb3Np
bmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ2YWx1ZSIpOwotCi0gICAgICAgIHZhciBpc0VkaXRpbmdO
YW1lID0gc2VsZWN0RWxlbWVudCA9PT0gdGhpcy5uYW1lRWxlbWVudDsKLSAgICAgICAgaWYgKCFp
c0VkaXRpbmdOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0RWxlbWVudCAhPT0gdGhpcy52
YWx1ZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBDbGljayBpbiB0aGUgTEkgLSBzdGFy
dCBlZGl0aW5nIHZhbHVlLgotICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQgPSB0aGlzLnZh
bHVlRWxlbWVudDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1l
bnQudGV4dENvbnRlbnQgPSB0aGlzLnZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdl
Ykluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKHNlbGVjdEVsZW1lbnQpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBjb250ZXh0ID0gewotICAgICAgICAgICAgZXhwYW5kZWQ6IHRo
aXMuZXhwYW5kZWQsCi0gICAgICAgICAgICBoYXNDaGlsZHJlbjogdGhpcy5oYXNDaGlsZHJlbiwK
LSAgICAgICAgICAgIGlzRWRpdGluZ05hbWU6IGlzRWRpdGluZ05hbWUsCi0gICAgICAgICAgICBw
cmV2aW91c0NvbnRlbnQ6IHNlbGVjdEVsZW1lbnQudGV4dENvbnRlbnQKLSAgICAgICAgfTsKLQot
ICAgICAgICAvLyBMaWUgYWJvdXQgb3VyIGNoaWxkcmVuIHRvIHByZXZlbnQgZXhwYW5kaW5nIG9u
IGRvdWJsZSBjbGljayBhbmQgdG8gY29sbGFwc2Ugc2hvcnRoYW5kcy4KLSAgICAgICAgdGhpcy5o
YXNDaGlsZHJlbiA9IGZhbHNlOwotCi0gICAgICAgIGlmIChzZWxlY3RFbGVtZW50LnBhcmVudEVs
ZW1lbnQpCi0gICAgICAgICAgICBzZWxlY3RFbGVtZW50LnBhcmVudEVsZW1lbnQuYWRkU3R5bGVD
bGFzcygiY2hpbGQtZWRpdGluZyIpOwotICAgICAgICBzZWxlY3RFbGVtZW50LnRleHRDb250ZW50
ID0gc2VsZWN0RWxlbWVudC50ZXh0Q29udGVudDsgLy8gcmVtb3ZlIGNvbG9yIHN3YXRjaCBhbmQg
dGhlIGxpa2UKLQotICAgICAgICBmdW5jdGlvbiBwYXN0ZUhhbmRsZXIoY29udGV4dCwgZXZlbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBkYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YS5n
ZXREYXRhKCJUZXh0Iik7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgdmFyIGNvbG9uSWR4ID0gZGF0YS5pbmRleE9mKCI6Iik7Ci0g
ICAgICAgICAgICBpZiAoY29sb25JZHggPCAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHZhciBuYW1lID0gZGF0YS5zdWJzdHJpbmcoMCwgY29sb25JZHgpLnRyaW0oKTsK
LSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGEuc3Vic3RyaW5nKGNvbG9uSWR4ICsgMSkudHJp
bSgpOwotCi0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotCi0gICAgICAgICAg
ICBpZiAoISgib3JpZ2luYWxOYW1lIiBpbiBjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQub3JpZ2luYWxOYW1lID0gdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudDsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0Lm9yaWdpbmFsVmFsdWUgPSB0aGlzLnZhbHVlRWxlbWVudC50ZXh0
Q29udGVudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMucHJvcGVydHkubmFtZSA9
IG5hbWU7Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnR5LnZhbHVlID0gdmFsdWU7Ci0gICAgICAg
ICAgICB0aGlzLm5hbWVFbGVtZW50LnRleHRDb250ZW50ID0gbmFtZTsKLSAgICAgICAgICAgIHRo
aXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gdmFsdWU7Ci0gICAgICAgICAgICB0aGlzLm5h
bWVFbGVtZW50Lm5vcm1hbGl6ZSgpOwotICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQubm9y
bWFsaXplKCk7Ci0KLSAgICAgICAgICAgIHRoaXMuZWRpdGluZ0NvbW1pdHRlZChudWxsLCBldmVu
dC50YXJnZXQudGV4dENvbnRlbnQsIGNvbnRleHQucHJldmlvdXNDb250ZW50LCBjb250ZXh0LCAi
Zm9yd2FyZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYmx1ckxpc3RlbmVyKGNv
bnRleHQsIGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0
aGlzLl9wYXJlbnRQYW5lLl9tb3VzZURvd25UcmVlRWxlbWVudDsKLSAgICAgICAgICAgIHZhciBt
b3ZlRGlyZWN0aW9uID0gIiI7Ci0gICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQgPT09IHRoaXMp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFZGl0aW5nTmFtZSAmJiB0aGlzLl9wYXJlbnRQYW5l
Ll9tb3VzZURvd25UcmVlRWxlbWVudElzVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG1vdmVE
aXJlY3Rpb24gPSAiZm9yd2FyZCI7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0VkaXRpbmdOYW1l
ICYmIHRoaXMuX3BhcmVudFBhbmUuX21vdXNlRG93blRyZWVFbGVtZW50SXNOYW1lKQotICAgICAg
ICAgICAgICAgICAgICBtb3ZlRGlyZWN0aW9uID0gImJhY2t3YXJkIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRoaXMuZWRpdGluZ0NvbW1pdHRlZChudWxsLCBldmVudC50YXJnZXQudGV4
dENvbnRlbnQsIGNvbnRleHQucHJldmlvdXNDb250ZW50LCBjb250ZXh0LCBtb3ZlRGlyZWN0aW9u
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGV0ZSB0aGlzLm9yaWdpbmFsUHJvcGVydHlUZXh0
OwotCi0gICAgICAgIHRoaXMuX3BhcmVudFBhbmUuX2lzRWRpdGluZ1N0eWxlID0gdHJ1ZTsKLSAg
ICAgICAgaWYgKHNlbGVjdEVsZW1lbnQucGFyZW50RWxlbWVudCkKLSAgICAgICAgICAgIHNlbGVj
dEVsZW1lbnQucGFyZW50RWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKLQot
ICAgICAgICB2YXIgYXBwbHlJdGVtQ2FsbGJhY2sgPSAhaXNFZGl0aW5nTmFtZSA/IHRoaXMuX2Fw
cGx5RnJlZUZsb3dTdHlsZVRleHRFZGl0LmJpbmQodGhpcywgdHJ1ZSkgOiB1bmRlZmluZWQ7Ci0g
ICAgICAgIHRoaXMuX3Byb21wdCA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUu
Q1NTUHJvcGVydHlQcm9tcHQoaXNFZGl0aW5nTmFtZSA/IFdlYkluc3BlY3Rvci5DU1NNZXRhZGF0
YS5jc3NQcm9wZXJ0aWVzTWV0YWluZm8gOiBXZWJJbnNwZWN0b3IuQ1NTTWV0YWRhdGEua2V5d29y
ZHNGb3JQcm9wZXJ0eSh0aGlzLm5hbWVFbGVtZW50LnRleHRDb250ZW50KSwgdGhpcywgaXNFZGl0
aW5nTmFtZSk7Ci0gICAgICAgIGlmIChhcHBseUl0ZW1DYWxsYmFjaykgewotICAgICAgICAgICAg
dGhpcy5fcHJvbXB0LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuRXZl
bnRzLkl0ZW1BcHBsaWVkLCBhcHBseUl0ZW1DYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgICAgICB0
aGlzLl9wcm9tcHQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5FdmVu
dHMuSXRlbUFjY2VwdGVkLCBhcHBseUl0ZW1DYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgdmFyIHByb3h5RWxlbWVudCA9IHRoaXMuX3Byb21wdC5hdHRhY2hBbmRTdGFydEVkaXRp
bmcoc2VsZWN0RWxlbWVudCwgYmx1ckxpc3RlbmVyLmJpbmQodGhpcywgY29udGV4dCkpOwotCi0g
ICAgICAgIHByb3h5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5lZGl0
aW5nTmFtZVZhbHVlS2V5RG93bi5iaW5kKHRoaXMsIGNvbnRleHQpLCBmYWxzZSk7Ci0gICAgICAg
IGlmIChpc0VkaXRpbmdOYW1lKQotICAgICAgICAgICAgcHJveHlFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoInBhc3RlIiwgcGFzdGVIYW5kbGVyLmJpbmQodGhpcywgY29udGV4dCkpOwotCi0gICAg
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHNlbGVjdEVsZW1lbnQs
IDAsIHNlbGVjdEVsZW1lbnQsIDEpOwotICAgIH0sCi0KLSAgICBlZGl0aW5nTmFtZVZhbHVlS2V5
RG93bjogZnVuY3Rpb24oY29udGV4dCwgZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQu
aGFuZGxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgaXNFZGl0aW5nTmFt
ZSA9IGNvbnRleHQuaXNFZGl0aW5nTmFtZTsKLSAgICAgICAgdmFyIHJlc3VsdDsKLQotICAgICAg
ICBmdW5jdGlvbiBzaG91bGRDb21taXRWYWx1ZVNlbWljb2xvbih0ZXh0LCBjdXJzb3JQb3NpdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGFjY291bnQg
Zm9yIHNlbWljb2xvbnMgaW5zaWRlIGNvbW1lbnRzPwotICAgICAgICAgICAgdmFyIG9wZW5RdW90
ZSA9ICIiOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJzb3JQb3NpdGlvbjsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gdGV4dFtpXTsKLSAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09ICJcXCIgJiYgb3BlblF1b3RlICE9PSAiIikKLSAgICAgICAgICAgICAgICAg
ICAgKytpOyAvLyBza2lwIG5leHQgY2hhcmFjdGVyIGluc2lkZSBzdHJpbmcKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmICghb3BlblF1b3RlICYmIChjaCA9PT0gIlwiIiB8fCBjaCA9PT0gIiciKSkK
LSAgICAgICAgICAgICAgICAgICAgb3BlblF1b3RlID0gY2g7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAob3BlblF1b3RlID09PSBjaCkKLSAgICAgICAgICAgICAgICAgICAgb3BlblF1b3RlID0g
IiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gIW9wZW5RdW90ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiB0aGUgIjoiLyI7IiBkZXRlY3Rpb24gZG9lcyBub3Qg
d29yayBmb3Igbm9uLVVTIGxheW91dHMgZHVlIHRvIHRoZSBldmVudCBiZWluZyBrZXlkb3duIHJh
dGhlciB0aGFuIGtleXByZXNzLgotICAgICAgICB2YXIgaXNGaWVsZElucHV0VGVybWluYXRlZCA9
IChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLlNl
bWljb2xvbi5jb2RlKSAmJgotICAgICAgICAgICAgKGlzRWRpdGluZ05hbWUgPyBldmVudC5zaGlm
dEtleSA6ICghZXZlbnQuc2hpZnRLZXkgJiYgc2hvdWxkQ29tbWl0VmFsdWVTZW1pY29sb24oZXZl
bnQudGFyZ2V0LnRleHRDb250ZW50LCBldmVudC50YXJnZXQuc2VsZWN0aW9uTGVmdE9mZnNldCgp
KSkpOwotICAgICAgICBpZiAoaXNFbnRlcktleShldmVudCkgfHwgaXNGaWVsZElucHV0VGVybWlu
YXRlZCkgewotICAgICAgICAgICAgLy8gRW50ZXIgb3IgY29sb24gKGZvciBuYW1lKS9zZW1pY29s
b24gb3V0c2lkZSBvZiBzdHJpbmcgKGZvciB2YWx1ZSkuCi0gICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgcmVzdWx0ID0gImZvcndhcmQiOwotICAgICAgICB9
IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LktleXMuRXNjLmNvZGUgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAxQiIpCi0gICAg
ICAgICAgICByZXN1bHQgPSAiY2FuY2VsIjsKLSAgICAgICAgZWxzZSBpZiAoIWlzRWRpdGluZ05h
bWUgJiYgdGhpcy5fbmV3UHJvcGVydHkgJiYgZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuS2V5cy5CYWNrc3BhY2UuY29kZSkgewotICAgICAgICAgICAgLy8g
Rm9yIGEgbmV3IHByb3BlcnR5LCB3aGVuIEJhY2tzcGFjZSBpcyBwcmVzc2VkIGF0IHRoZSBiZWdp
bm5pbmcgb2YgbmV3IHByb3BlcnR5IHZhbHVlLCBtb3ZlIGJhY2sgdG8gdGhlIHByb3BlcnR5IG5h
bWUuCi0gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwot
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCAmJiAhc2VsZWN0aW9uLmZvY3Vz
T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSAiYmFja3dhcmQiOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAwMDkiKSB7IC8vIFRhYiBrZXku
Ci0gICAgICAgICAgICByZXN1bHQgPSBldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9y
d2FyZCI7Ci0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKLSAg
ICAgICAgICAgIGNhc2UgImNhbmNlbCI6Ci0gICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nQ2Fu
Y2VsbGVkKG51bGwsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSAiZm9yd2FyZCI6Ci0gICAgICAgICAgICBjYXNlICJiYWNrd2FyZCI6Ci0gICAgICAg
ICAgICAgICAgdGhpcy5lZGl0aW5nQ29tbWl0dGVkKG51bGwsIGV2ZW50LnRhcmdldC50ZXh0Q29u
dGVudCwgY29udGV4dC5wcmV2aW91c0NvbnRlbnQsIGNvbnRleHQsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGV2ZW50LmNvbnN1
bWUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNF
ZGl0aW5nTmFtZSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGx5RnJlZUZsb3dTdHlsZVRleHRFZGl0
KGZhbHNlKTsKLSAgICB9LAotCi0gICAgX2FwcGx5RnJlZUZsb3dTdHlsZVRleHRFZGl0OiBmdW5j
dGlvbihub3cpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fYXBwbHlGcmVlRmxvd1N0eWxlVGV4
dEVkaXRUaW1lcikKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9hcHBseUZyZWVGbG93
U3R5bGVUZXh0RWRpdFRpbWVyKTsKLQotICAgICAgICBmdW5jdGlvbiBhcHBseSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZhciB2YWx1ZVRleHQgPSB0aGlzLnZhbHVlRWxlbWVudC50ZXh0Q29u
dGVudDsKLSAgICAgICAgICAgIGlmICh2YWx1ZVRleHQuaW5kZXhPZigiOyIpID09PSAtMSkKLSAg
ICAgICAgICAgICAgICB0aGlzLmFwcGx5U3R5bGVUZXh0KHRoaXMubmFtZUVsZW1lbnQudGV4dENv
bnRlbnQgKyAiOiAiICsgdmFsdWVUZXh0LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAobm93KQotICAgICAgICAgICAgYXBwbHkuY2FsbCh0aGlzKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fYXBwbHlGcmVlRmxvd1N0eWxlVGV4dEVkaXRUaW1l
ciA9IHNldFRpbWVvdXQoYXBwbHkuYmluZCh0aGlzKSwgMTAwKTsKLSAgICB9LAotCi0gICAga2lj
a0ZyZWVGbG93U3R5bGVFZGl0Rm9yVGVzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fYXBwbHlGcmVlRmxvd1N0eWxlVGV4dEVkaXQodHJ1ZSk7Ci0gICAgfSwKLQotICAgIGVkaXRp
bmdFbmRlZDogZnVuY3Rpb24oY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc2V0TW91
c2VEb3duRWxlbWVudCgpOwotICAgICAgICBpZiAodGhpcy5fYXBwbHlGcmVlRmxvd1N0eWxlVGV4
dEVkaXRUaW1lcikKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9hcHBseUZyZWVGbG93
U3R5bGVUZXh0RWRpdFRpbWVyKTsKLQotICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gY29udGV4
dC5oYXNDaGlsZHJlbjsKLSAgICAgICAgaWYgKGNvbnRleHQuZXhwYW5kZWQpCi0gICAgICAgICAg
ICB0aGlzLmV4cGFuZCgpOwotICAgICAgICB2YXIgZWRpdGVkRWxlbWVudCA9IGNvbnRleHQuaXNF
ZGl0aW5nTmFtZSA/IHRoaXMubmFtZUVsZW1lbnQgOiB0aGlzLnZhbHVlRWxlbWVudDsKLSAgICAg
ICAgLy8gVGhlIHByb3h5RWxlbWVudCBoYXMgYmVlbiBkZWxldGVkLCBubyBuZWVkIHRvIHJlbW92
ZSBsaXN0ZW5lci4KLSAgICAgICAgaWYgKGVkaXRlZEVsZW1lbnQucGFyZW50RWxlbWVudCkKLSAg
ICAgICAgICAgIGVkaXRlZEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJj
aGlsZC1lZGl0aW5nIik7Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX3BhcmVudFBhbmUuX2lzRWRp
dGluZ1N0eWxlOwotICAgIH0sCi0KLSAgICBlZGl0aW5nQ2FuY2VsbGVkOiBmdW5jdGlvbihlbGVt
ZW50LCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVtb3ZlUHJvbXB0KCk7Ci0gICAg
ICAgIHRoaXMuX3JldmVydFN0eWxlVXBvbkVkaXRpbmdDYW5jZWxlZCh0aGlzLm9yaWdpbmFsUHJv
cGVydHlUZXh0KTsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIGxhc3QsIGFzIGl0IGNs
ZWFycyB0aGUgaW5mbyBuZWNlc3NhcnkgdG8gcmVzdG9yZSB0aGUgcHJvcGVydHkgdmFsdWUgYWZ0
ZXIgW1BhZ2VdVXAvRG93biBjaGFuZ2VzLgotICAgICAgICB0aGlzLmVkaXRpbmdFbmRlZChjb250
ZXh0KTsKLSAgICB9LAotCi0gICAgX3JldmVydFN0eWxlVXBvbkVkaXRpbmdDYW5jZWxlZDogZnVu
Y3Rpb24ob3JpZ2luYWxQcm9wZXJ0eVRleHQpCi0gICAgewotICAgICAgICBpZiAodHlwZW9mIG9y
aWdpbmFsUHJvcGVydHlUZXh0ID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgZGVsZXRlIHRo
aXMub3JpZ2luYWxQcm9wZXJ0eVRleHQ7Ci0gICAgICAgICAgICB0aGlzLmFwcGx5U3R5bGVUZXh0
KG9yaWdpbmFsUHJvcGVydHlUZXh0LCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fbmV3UHJvcGVydHkpCi0gICAgICAgICAgICAgICAg
dGhpcy50cmVlT3V0bGluZS5yZW1vdmVDaGlsZCh0aGlzKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgX2ZpbmRTaWJsaW5nOiBmdW5jdGlvbihtb3ZlRGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAg
dmFyIHRhcmdldCA9IHRoaXM7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHRhcmdldCA9ICht
b3ZlRGlyZWN0aW9uID09PSAiZm9yd2FyZCIgPyB0YXJnZXQubmV4dFNpYmxpbmcgOiB0YXJnZXQu
cHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgfSB3aGlsZSh0YXJnZXQgJiYgdGFyZ2V0LmluaGVy
aXRlZCk7Ci0KLSAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICB9LAotCi0gICAgZWRpdGluZ0Nv
bW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgdXNlcklucHV0LCBwcmV2aW91c0NvbnRlbnQsIGNv
bnRleHQsIG1vdmVEaXJlY3Rpb24pCi0gICAgewotICAgICAgICB0aGlzLl9yZW1vdmVQcm9tcHQo
KTsKLSAgICAgICAgdGhpcy5lZGl0aW5nRW5kZWQoY29udGV4dCk7Ci0gICAgICAgIHZhciBpc0Vk
aXRpbmdOYW1lID0gY29udGV4dC5pc0VkaXRpbmdOYW1lOwotCi0gICAgICAgIC8vIERldGVybWlu
ZSB3aGVyZSB0byBtb3ZlIHRvIGJlZm9yZSBtYWtpbmcgY2hhbmdlcwotICAgICAgICB2YXIgY3Jl
YXRlTmV3UHJvcGVydHksIG1vdmVUb1Byb3BlcnR5TmFtZSwgbW92ZVRvU2VsZWN0b3I7Ci0gICAg
ICAgIHZhciBpc0RhdGFQYXN0ZWQgPSAib3JpZ2luYWxOYW1lIiBpbiBjb250ZXh0OwotICAgICAg
ICB2YXIgaXNEaXJ0eVZpYVBhc3RlID0gaXNEYXRhUGFzdGVkICYmICh0aGlzLm5hbWVFbGVtZW50
LnRleHRDb250ZW50ICE9PSBjb250ZXh0Lm9yaWdpbmFsTmFtZSB8fCB0aGlzLnZhbHVlRWxlbWVu
dC50ZXh0Q29udGVudCAhPT0gY29udGV4dC5vcmlnaW5hbFZhbHVlKTsKLSAgICAgICAgdmFyIGlz
UHJvcGVydHlTcGxpdFBhc3RlID0gaXNEYXRhUGFzdGVkICYmIGlzRWRpdGluZ05hbWUgJiYgdGhp
cy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQgIT09IGNvbnRleHQub3JpZ2luYWxWYWx1ZTsKLSAg
ICAgICAgdmFyIG1vdmVUbyA9IHRoaXM7Ci0gICAgICAgIHZhciBtb3ZlVG9PdGhlciA9IChpc0Vk
aXRpbmdOYW1lIF4gKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIikpOwotICAgICAgICB2YXIg
YWJhbmRvbk5ld1Byb3BlcnR5ID0gdGhpcy5fbmV3UHJvcGVydHkgJiYgIXVzZXJJbnB1dCAmJiAo
bW92ZVRvT3RoZXIgfHwgaXNFZGl0aW5nTmFtZSk7Ci0gICAgICAgIGlmIChtb3ZlRGlyZWN0aW9u
ID09PSAiZm9yd2FyZCIgJiYgKCFpc0VkaXRpbmdOYW1lIHx8IGlzUHJvcGVydHlTcGxpdFBhc3Rl
KSB8fCBtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiICYmIGlzRWRpdGluZ05hbWUpIHsKLSAg
ICAgICAgICAgIG1vdmVUbyA9IG1vdmVUby5fZmluZFNpYmxpbmcobW92ZURpcmVjdGlvbik7Ci0g
ICAgICAgICAgICBpZiAobW92ZVRvKQotICAgICAgICAgICAgICAgIG1vdmVUb1Byb3BlcnR5TmFt
ZSA9IG1vdmVUby5uYW1lOwotICAgICAgICAgICAgZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0g
ImZvcndhcmQiICYmICghdGhpcy5fbmV3UHJvcGVydHkgfHwgdXNlcklucHV0KSkKLSAgICAgICAg
ICAgICAgICBjcmVhdGVOZXdQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmICht
b3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiKQotICAgICAgICAgICAgICAgIG1vdmVUb1NlbGVj
dG9yID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1ha2UgdGhlIENoYW5nZXMgYW5k
IHRyaWdnZXIgdGhlIG1vdmVUb05leHRDYWxsYmFjayBhZnRlciB1cGRhdGluZy4KLSAgICAgICAg
dmFyIG1vdmVUb0luZGV4ID0gbW92ZVRvICYmIHRoaXMudHJlZU91dGxpbmUgPyB0aGlzLnRyZWVP
dXRsaW5lLmNoaWxkcmVuLmluZGV4T2YobW92ZVRvKSA6IC0xOwotICAgICAgICB2YXIgYmxhbmtJ
bnB1dCA9IC9eXHMqJC8udGVzdCh1c2VySW5wdXQpOwotICAgICAgICB2YXIgc2hvdWxkQ29tbWl0
TmV3UHJvcGVydHkgPSB0aGlzLl9uZXdQcm9wZXJ0eSAmJiAoaXNQcm9wZXJ0eVNwbGl0UGFzdGUg
fHwgbW92ZVRvT3RoZXIgfHwgKCFtb3ZlRGlyZWN0aW9uICYmICFpc0VkaXRpbmdOYW1lKSB8fCAo
aXNFZGl0aW5nTmFtZSAmJiBibGFua0lucHV0KSk7Ci0gICAgICAgIHZhciBzZWN0aW9uID0gdGhp
cy5zZWN0aW9uKCk7Ci0gICAgICAgIGlmICgoKHVzZXJJbnB1dCAhPT0gcHJldmlvdXNDb250ZW50
IHx8IGlzRGlydHlWaWFQYXN0ZSkgJiYgIXRoaXMuX25ld1Byb3BlcnR5KSB8fCBzaG91bGRDb21t
aXROZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgc2VjdGlvbi5fYWZ0ZXJVcGRhdGUgPSBtb3Zl
VG9OZXh0Q2FsbGJhY2suYmluZCh0aGlzLCB0aGlzLl9uZXdQcm9wZXJ0eSwgIWJsYW5rSW5wdXQs
IHNlY3Rpb24pOwotICAgICAgICAgICAgdmFyIHByb3BlcnR5VGV4dDsKLSAgICAgICAgICAgIGlm
IChibGFua0lucHV0IHx8ICh0aGlzLl9uZXdQcm9wZXJ0eSAmJiAvXlxzKiQvLnRlc3QodGhpcy52
YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQpKSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQg
PSAiIjsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc0VkaXRpbmdO
YW1lKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSB1c2VySW5wdXQgKyAiOiAi
ICsgdGhpcy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQ7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSB0aGlzLm5hbWVFbGVtZW50LnRleHRD
b250ZW50ICsgIjogIiArIHVzZXJJbnB1dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRo
aXMuYXBwbHlTdHlsZVRleHQocHJvcGVydHlUZXh0LCB0cnVlLCB0cnVlLCBmYWxzZSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWlzRGF0YVBhc3RlZCAmJiAhdGhpcy5fbmV3
UHJvcGVydHkpCi0gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpOwotICAgICAgICAg
ICAgbW92ZVRvTmV4dENhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fbmV3UHJvcGVydHksIGZhbHNl
LCBzZWN0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSBDYWxsYmFjayB0byBzdGFy
dCBlZGl0aW5nIHRoZSBuZXh0L3ByZXZpb3VzIHByb3BlcnR5L3NlbGVjdG9yLgotICAgICAgICBm
dW5jdGlvbiBtb3ZlVG9OZXh0Q2FsbGJhY2soYWxyZWFkeU5ldywgdmFsdWVDaGFuZ2VkLCBzZWN0
aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1vdmVEaXJlY3Rpb24pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAvLyBVc2VyIGp1c3QgdGFiYmVkIHRocm91
Z2ggd2l0aG91dCBjaGFuZ2VzLgotICAgICAgICAgICAgaWYgKG1vdmVUbyAmJiBtb3ZlVG8ucGFy
ZW50KSB7Ci0gICAgICAgICAgICAgICAgbW92ZVRvLnN0YXJ0RWRpdGluZyghaXNFZGl0aW5nTmFt
ZSA/IG1vdmVUby5uYW1lRWxlbWVudCA6IG1vdmVUby52YWx1ZUVsZW1lbnQpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVXNlciBoYXMg
bWFkZSBhIGNoYW5nZSB0aGVuIHRhYmJlZCwgd2lwaW5nIGFsbCB0aGUgb3JpZ2luYWwgdHJlZUVs
ZW1lbnRzLgotICAgICAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIG5ldyB0cmVlRWxlbWVudCBm
b3IgdGhlIHNhbWUgcHJvcGVydHkgd2Ugd2VyZSBnb2luZyB0byBlZGl0IG5leHQuCi0gICAgICAg
ICAgICBpZiAobW92ZVRvICYmICFtb3ZlVG8ucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHByb3BlcnR5RWxlbWVudHMgPSBzZWN0aW9uLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJl
bjsKLSAgICAgICAgICAgICAgICBpZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiICYmIGJs
YW5rSW5wdXQgJiYgIWlzRWRpdGluZ05hbWUpCi0gICAgICAgICAgICAgICAgICAgIC0tbW92ZVRv
SW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKG1vdmVUb0luZGV4ID49IHByb3BlcnR5RWxlbWVu
dHMubGVuZ3RoICYmICF0aGlzLl9uZXdQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlTmV3UHJvcGVydHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSBtb3ZlVG9JbmRleCA+PSAwID8gcHJvcGVydHlF
bGVtZW50c1ttb3ZlVG9JbmRleF0gOiBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJl
ZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50VG9FZGl0ID0g
IWlzRWRpdGluZ05hbWUgfHwgaXNQcm9wZXJ0eVNwbGl0UGFzdGUgPyB0cmVlRWxlbWVudC5uYW1l
RWxlbWVudCA6IHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhbHJlYWR5TmV3ICYmIGJsYW5rSW5wdXQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudFRvRWRpdCA9IG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIiA/IHRyZWVF
bGVtZW50Lm5hbWVFbGVtZW50IDogdHJlZUVsZW1lbnQudmFsdWVFbGVtZW50OwotICAgICAgICAg
ICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQuc3RhcnRFZGl0aW5nKGVsZW1lbnRUb0VkaXQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFhbHJlYWR5TmV3KQotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU2VsZWN0
b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gQ3JlYXRlIGEgbmV3IGF0dHJpYnV0ZSBpbiB0aGlzIHNlY3Rpb24gKG9yIG1vdmUgdG8g
bmV4dCBlZGl0YWJsZSBzZWxlY3RvciBpZiBwb3NzaWJsZSkuCi0gICAgICAgICAgICBpZiAoY3Jl
YXRlTmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeU5ldyAmJiAhdmFs
dWVDaGFuZ2VkICYmIChpc0VkaXRpbmdOYW1lIF4gKG1vdmVEaXJlY3Rpb24gPT09ICJiYWNrd2Fy
ZCIpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgc2Vj
dGlvbi5hZGROZXdCbGFua1Byb3BlcnR5KCkuc3RhcnRFZGl0aW5nKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYWJhbmRvbk5ld1By
b3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgbW92ZVRvID0gdGhpcy5fZmluZFNpYmxpbmcobW92
ZURpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgdmFyIHNlY3Rpb25Ub0VkaXQgPSAobW92ZVRv
IHx8IG1vdmVEaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIpID8gc2VjdGlvbiA6IHNlY3Rpb24ubmV4
dEVkaXRhYmxlU2libGluZygpOwotICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uVG9FZGl0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uVG9FZGl0LnJ1bGUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzZWN0aW9uVG9FZGl0LnN0YXJ0RWRpdGluZ1NlbGVjdG9yKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25Ub0Vk
aXQuX21vdmVFZGl0b3JGcm9tU2VsZWN0b3IobW92ZURpcmVjdGlvbik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKG1vdmVUb1NlbGVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24ucnVs
ZSkKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5zdGFydEVkaXRpbmdTZWxlY3RvcigpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5fbW92ZUVk
aXRvckZyb21TZWxlY3Rvcihtb3ZlRGlyZWN0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICBfcmVtb3ZlUHJvbXB0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICAvLyBCVUcgNTMyNDIuIFRoaXMgY2Fubm90IGdvIGludG8gZWRpdGluZ0VuZGVkKCksIGFzIGl0
IHNob3VsZCBhbHdheXMgaGFwcGVuIGZpcnN0IGZvciBhbnkgZWRpdGluZyBvdXRjb21lLgotICAg
ICAgICBpZiAodGhpcy5fcHJvbXB0KSB7Ci0gICAgICAgICAgICB0aGlzLl9wcm9tcHQuZGV0YWNo
KCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcHJvbXB0OwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIF9oYXNCZWVuTW9kaWZpZWRJbmNyZW1lbnRhbGx5OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICAvLyBOZXcgcHJvcGVydGllcyBhcHBsaWVkIHZpYSB1cC9kb3duIG9yIGxpdmUgZWRp
dGluZyBoYXZlIGFuIG9yaWdpbmFsUHJvcGVydHlUZXh0IGFuZCB3aWxsIGJlIGRlbGV0ZWQgbGF0
ZXIKLSAgICAgICAgLy8gb24sIGlmIGNhbmNlbGxlZCwgd2hlbiB0aGUgZW1wdHkgc3RyaW5nIGdl
dHMgYXBwbGllZCBhcyB0aGVpciBzdHlsZSB0ZXh0LgotICAgICAgICByZXR1cm4gdHlwZW9mIHRo
aXMub3JpZ2luYWxQcm9wZXJ0eVRleHQgPT09ICJzdHJpbmciIHx8ICghIXRoaXMucHJvcGVydHku
cHJvcGVydHlUZXh0ICYmIHRoaXMuX25ld1Byb3BlcnR5KTsKLSAgICB9LAotCi0gICAgYXBwbHlT
dHlsZVRleHQ6IGZ1bmN0aW9uKHN0eWxlVGV4dCwgdXBkYXRlSW50ZXJmYWNlLCBtYWpvckNoYW5n
ZSwgaXNSZXZlcnQpCi0gICAgewotICAgICAgICBmdW5jdGlvbiB1c2VyT3BlcmF0aW9uRmluaXNo
ZWRDYWxsYmFjayhwYXJlbnRQYW5lLCB1cGRhdGVJbnRlcmZhY2UpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBhcmVu
dFBhbmUuX3VzZXJPcGVyYXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBMZWF2ZSBhIHdh
eSB0byBjYW5jZWwgZWRpdGluZyBhZnRlciBpbmNyZW1lbnRhbCBjaGFuZ2VzLgotICAgICAgICBp
ZiAoIWlzUmV2ZXJ0ICYmICF1cGRhdGVJbnRlcmZhY2UgJiYgIXRoaXMuX2hhc0JlZW5Nb2RpZmll
ZEluY3JlbWVudGFsbHkoKSkgewotICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHJ1bGUncyBv
cmlnaW5hbCBDU1MgdGV4dCBvbiBbUGFnZV0oVXB8RG93biksIHNvIGl0IGNhbiBiZSByZXN0b3Jl
ZAotICAgICAgICAgICAgLy8gaWYgdGhlIGVkaXRpbmcgaXMgY2FuY2VsZWQuCi0gICAgICAgICAg
ICB0aGlzLm9yaWdpbmFsUHJvcGVydHlUZXh0ID0gdGhpcy5wcm9wZXJ0eS5wcm9wZXJ0eVRleHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRoaXMudHJlZU91dGxpbmUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLnNlY3Rpb24oKTsKLSAgICAg
ICAgc3R5bGVUZXh0ID0gc3R5bGVUZXh0LnJlcGxhY2UoL1xzL2csICIgIikudHJpbSgpOyAvLyBS
ZXBsYWNlICZuYnNwOyB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgIHZhciBzdHlsZVRleHRMZW5n
dGggPSBzdHlsZVRleHQubGVuZ3RoOwotICAgICAgICBpZiAoIXN0eWxlVGV4dExlbmd0aCAmJiB1
cGRhdGVJbnRlcmZhY2UgJiYgIWlzUmV2ZXJ0ICYmIHRoaXMuX25ld1Byb3BlcnR5ICYmICF0aGlz
Ll9oYXNCZWVuTW9kaWZpZWRJbmNyZW1lbnRhbGx5KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB1
c2VyIGRlbGV0ZWQgZXZlcnl0aGluZyBhbmQgbmV2ZXIgYXBwbGllZCBhIG5ldyBwcm9wZXJ0eSB2
YWx1ZSB2aWEgVXAvRG93biBzY3JvbGxpbmcvbGl2ZSBlZGl0aW5nLCBzbyByZW1vdmUgdGhlIHRy
ZWUgZWxlbWVudCBhbmQgdXBkYXRlLgotICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hp
bGQodGhpcyk7Ci0gICAgICAgICAgICBzZWN0aW9uLmFmdGVyVXBkYXRlKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY3VycmVudE5vZGUgPSB0aGlzLl9w
YXJlbnRQYW5lLm5vZGU7Ci0gICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCi0gICAgICAgICAg
ICB0aGlzLl9wYXJlbnRQYW5lLl91c2VyT3BlcmF0aW9uID0gdHJ1ZTsKLQotICAgICAgICBmdW5j
dGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIG9yaWdpbmFsUHJvcGVydHlUZXh0LCBuZXdTdHls
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFuZXdTdHlsZSkgewotICAgICAgICAgICAg
ICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSXQgZGlk
IG5vdCBhcHBseSwgY2FuY2VsIGVkaXRpbmcuCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jl
dmVydFN0eWxlVXBvbkVkaXRpbmdDYW5jZWxlZChvcmlnaW5hbFByb3BlcnR5VGV4dCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjaygpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMuX25l
d1Byb3BlcnR5KQotICAgICAgICAgICAgICAgIHRoaXMuX25ld1Byb3BlcnR5SW5TdHlsZSA9IHRy
dWU7Ci0gICAgICAgICAgICBuZXdTdHlsZS5wYXJlbnRSdWxlID0gdGhpcy5zdHlsZS5wYXJlbnRS
dWxlOwotICAgICAgICAgICAgdGhpcy5zdHlsZSA9IG5ld1N0eWxlOwotICAgICAgICAgICAgdGhp
cy5wcm9wZXJ0eSA9IG5ld1N0eWxlLnByb3BlcnR5QXQodGhpcy5wcm9wZXJ0eS5pbmRleCk7Ci0g
ICAgICAgICAgICB0aGlzLl9zdHlsZVJ1bGUuc3R5bGUgPSB0aGlzLnN0eWxlOwotCi0gICAgICAg
ICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLnBhbmUpCi0gICAgICAgICAgICAgICAgc2VjdGlv
bi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgZWRpdGVkIik7Ci0KLSAgICAg
ICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UgJiYgY3VycmVudE5vZGUgPT09IHRoaXMubm9kZSgp
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFuZSh1c2VyQ2FsbGJhY2spOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXNlckNh
bGxiYWNrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBcHBlbmQgYSAiOyIgaWYgdGhlIG5l
dyB0ZXh0IGRvZXMgbm90IGVuZCBpbiAiOyIuCi0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGRvZXMg
bm90IGhhbmRsZSB0cmFpbGluZyBjb21tZW50cy4KLSAgICAgICAgaWYgKHN0eWxlVGV4dC5sZW5n
dGggJiYgIS87XHMqJC8udGVzdChzdHlsZVRleHQpKQotICAgICAgICAgICAgc3R5bGVUZXh0ICs9
ICI7IjsKLSAgICAgICAgdmFyIG92ZXJ3cml0ZVByb3BlcnR5ID0gISEoIXRoaXMuX25ld1Byb3Bl
cnR5IHx8IHRoaXMuX25ld1Byb3BlcnR5SW5TdHlsZSk7Ci0gICAgICAgIHRoaXMucHJvcGVydHku
c2V0VGV4dChzdHlsZVRleHQsIG1ham9yQ2hhbmdlLCBvdmVyd3JpdGVQcm9wZXJ0eSwgY2FsbGJh
Y2suYmluZCh0aGlzLCB1c2VyT3BlcmF0aW9uRmluaXNoZWRDYWxsYmFjay5iaW5kKG51bGwsIHRo
aXMuX3BhcmVudFBhbmUsIHVwZGF0ZUludGVyZmFjZSksIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRl
eHQpKTsKLSAgICB9LAotCi0gICAgb25kYmxjbGljazogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIGhhbmRsZWQKLSAgICB9LAotCi0gICAgaXNFdmVudFdpdGhpbkRp
c2Nsb3N1cmVUcmlhbmdsZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXZlbnQudGFyZ2V0ID09PSB0aGlzLl9leHBhbmRFbGVtZW50OwotICAgIH0sCi0KLSAgICBfX3By
b3RvX186IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnRCYXNlLnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0fQotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkNTU01ldGFkYXRhfSBjc3NDb21w
bGV0aW9ucwotICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVu
dH0gc2lkZWJhclBhbmUKLSAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFZGl0aW5nTmFtZQotICovCi1X
ZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQgPSBmdW5jdGlv
bihjc3NDb21wbGV0aW9ucywgc2lkZWJhclBhbmUsIGlzRWRpdGluZ05hbWUpCi17Ci0gICAgLy8g
VXNlIHRoZSBzYW1lIGNhbGxiYWNrIGJvdGggZm9yIGFwcGx5SXRlbUNhbGxiYWNrIGFuZCBhY2Nl
cHRJdGVtQ2FsbGJhY2suCi0gICAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuY2FsbCh0aGlzLCB0
aGlzLl9idWlsZFByb3BlcnR5Q29tcGxldGlvbnMuYmluZCh0aGlzKSwgV2ViSW5zcGVjdG9yLlN0
eWxlVmFsdWVEZWxpbWl0ZXJzKTsKLSAgICB0aGlzLnNldFN1Z2dlc3RCb3hFbmFibGVkKCJnZW5l
cmljLXN1Z2dlc3QiKTsKLSAgICB0aGlzLl9jc3NDb21wbGV0aW9ucyA9IGNzc0NvbXBsZXRpb25z
OwotICAgIHRoaXMuX3NpZGViYXJQYW5lID0gc2lkZWJhclBhbmU7Ci0gICAgdGhpcy5faXNFZGl0
aW5nTmFtZSA9IGlzRWRpdGluZ05hbWU7Ci19Ci0KLVdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFy
UGFuZS5DU1NQcm9wZXJ0eVByb21wdC5wcm90b3R5cGUgPSB7Ci0gICAgb25LZXlEb3duOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5SWRlbnRpZmllcikg
ewotICAgICAgICBjYXNlICJVcCI6Ci0gICAgICAgIGNhc2UgIkRvd24iOgotICAgICAgICBjYXNl
ICJQYWdlVXAiOgotICAgICAgICBjYXNlICJQYWdlRG93biI6Ci0gICAgICAgICAgICBpZiAodGhp
cy5faGFuZGxlTmFtZU9yVmFsdWVVcERvd24oZXZlbnQpKSB7Ci0gICAgICAgICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZS5vbktleURvd24uY2FsbCh0aGlzLCBldmVudCk7Ci0gICAg
fSwKLQotICAgIG9uTW91c2VXaGVlbDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBp
ZiAodGhpcy5faGFuZGxlTmFtZU9yVmFsdWVVcERvd24oZXZlbnQpKSB7Ci0gICAgICAgICAgICBl
dmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5vbk1vdXNlV2hlZWwuY2FsbCh0
aGlzLCBldmVudCk7Ci0gICAgfSwKLQotICAgIHRhYktleVByZXNzZWQ6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuYWNjZXB0QXV0b0NvbXBsZXRlKCk7Ci0KLSAgICAgICAgLy8gQWx3
YXlzIHRhYiB0byB0aGUgbmV4dCBmaWVsZC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0s
Ci0KLSAgICBfaGFuZGxlTmFtZU9yVmFsdWVVcERvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgZnVuY3Rpb24gZmluaXNoSGFuZGxlcihvcmlnaW5hbFZhbHVlLCByZXBsYWNlbWVu
dFN0cmluZykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gU3ludGhlc2l6ZSBwcm9wZXJ0eSB0
ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3RvbSB3aGl0ZXNwYWNlIGV0Yy4KLSAg
ICAgICAgICAgIHRoaXMuX3NpZGViYXJQYW5lLmFwcGx5U3R5bGVUZXh0KHRoaXMuX3NpZGViYXJQ
YW5lLm5hbWVFbGVtZW50LnRleHRDb250ZW50ICsgIjogIiArIHRoaXMuX3NpZGViYXJQYW5lLnZh
bHVlRWxlbWVudC50ZXh0Q29udGVudCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBIYW5kbGUgbnVtZXJpYyB2YWx1ZSBpbmNyZW1lbnQvZGVjcmVtZW50IG9u
bHkgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgaWYgKCF0aGlzLl9pc0VkaXRpbmdOYW1lICYmIFdl
Ykluc3BlY3Rvci5oYW5kbGVFbGVtZW50VmFsdWVNb2RpZmljYXRpb25zKGV2ZW50LCB0aGlzLl9z
aWRlYmFyUGFuZS52YWx1ZUVsZW1lbnQsIGZpbmlzaEhhbmRsZXIuYmluZCh0aGlzKSwgdGhpcy5f
aXNWYWx1ZVN1Z2dlc3Rpb24uYmluZCh0aGlzKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIF9pc1ZhbHVlU3VnZ2VzdGlv
bjogZnVuY3Rpb24od29yZCkKLSAgICB7Ci0gICAgICAgIGlmICghd29yZCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2Nzc0NvbXBsZXRpb25zLmtleVNldCgpLmhhc093blByb3BlcnR5KHdv
cmQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHByb3h5RWxl
bWVudAotICAgICAqIEBwYXJhbSB7UmFuZ2V9IHdvcmRSYW5nZQotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gZm9yY2UKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFBcnJheS48c3RyaW5nPiwgbnVt
YmVyPSl9IGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjawotICAgICAqLwotICAgIF9idWlsZFByb3Bl
cnR5Q29tcGxldGlvbnM6IGZ1bmN0aW9uKHByb3h5RWxlbWVudCwgd29yZFJhbmdlLCBmb3JjZSwg
Y29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIHByZWZpeCA9IHdv
cmRSYW5nZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIGlmICghcHJlZml4ICYm
ICFmb3JjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcmVzdWx0cyA9IHRo
aXMuX2Nzc0NvbXBsZXRpb25zLnN0YXJ0c1dpdGgocHJlZml4KTsKLSAgICAgICAgdmFyIHNlbGVj
dGVkSW5kZXggPSB0aGlzLl9jc3NDb21wbGV0aW9ucy5tb3N0VXNlZE9mKHJlc3VsdHMpOwotICAg
ICAgICBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2socmVzdWx0cywgc2VsZWN0ZWRJbmRleCk7Ci0g
ICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBl
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxl
c1NvdXJjZU1hcHBpbmcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0
eWxlc1NvdXJjZU1hcHBpbmcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYmNh
MjEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHls
ZXNTb3VyY2VNYXBwaW5nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXBwaW5n
fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbH0gY3NzTW9kZWwKLSAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLldvcmtzcGFjZX0gd29ya3NwYWNlCi0gKi8KLVdlYkluc3BlY3Rv
ci5TdHlsZXNTb3VyY2VNYXBwaW5nID0gZnVuY3Rpb24oY3NzTW9kZWwsIHdvcmtzcGFjZSkKLXsK
LSAgICB0aGlzLl9jc3NNb2RlbCA9IGNzc01vZGVsOwotICAgIHRoaXMuX3dvcmtzcGFjZSA9IHdv
cmtzcGFjZTsKLSAgICB0aGlzLl93b3Jrc3BhY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuV29ya3NwYWNlLkV2ZW50cy5Qcm9qZWN0V2lsbFJlc2V0LCB0aGlzLl9wcm9qZWN0V2lsbFJl
c2V0LCB0aGlzKTsKLSAgICB0aGlzLl93b3Jrc3BhY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuVUlTb3VyY2VDb2RlUHJvdmlkZXIuRXZlbnRzLlVJU291cmNlQ29kZUFkZGVkLCB0aGlz
Ll91aVNvdXJjZUNvZGVBZGRlZFRvV29ya3NwYWNlLCB0aGlzKTsKLQotICAgIFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJj
ZVRyZWVNb2RlbC5FdmVudFR5cGVzLk1haW5GcmFtZUNyZWF0ZWRPck5hdmlnYXRlZCwgdGhpcy5f
bWFpbkZyYW1lQ3JlYXRlZE9yTmF2aWdhdGVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IucmVz
b3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVl
TW9kZWwuRXZlbnRUeXBlcy5SZXNvdXJjZUFkZGVkLCB0aGlzLl9yZXNvdXJjZUFkZGVkLCB0aGlz
KTsKLSAgICB0aGlzLl9pbml0aWFsaXplKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TdHlsZXNTb3Vy
Y2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5SYXdMb2NhdGlvbn0gcmF3TG9jYXRpb24KLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuVUlMb2NhdGlvbn0KLSAgICAgKi8KLSAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVu
Y3Rpb24ocmF3TG9jYXRpb24pCi0gICAgewotICAgICAgICB2YXIgbG9jYXRpb24gPSAvKiogQHR5
cGUgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uICovIChyYXdMb2NhdGlvbik7Ci0gICAgICAgIHZh
ciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJMKGxvY2F0
aW9uLnVybCk7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlT
b3VyY2VDb2RlLCBsb2NhdGlvbi5saW5lTnVtYmVyLCAwKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBj
b2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUmF3TG9jYXRpb259Ci0g
ICAgICovCi0gICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKHVpU291cmNlQ29k
ZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24odWlTb3VyY2VDb2RlLnVybCB8fCAiIiwgbGluZU51bWJl
cik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICov
Ci0gICAgaXNJZGVudGl0eTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfSwKLQotICAgIF9yZXNvdXJjZUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0g
ICAgICAgIHZhciByZXNvdXJjZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICBpZiAocmVzb3VyY2UuY29udGVudFR5cGUoKSAh
PT0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5bGVzaGVldCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKCFyZXNvdXJjZS51cmwpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9y
VVJMKHJlc291cmNlLnVybCk7Ci0gICAgICAgIGlmICghdWlTb3VyY2VDb2RlKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSk7
Ci0gICAgfSwKLQotICAgIF91aVNvdXJjZUNvZGVBZGRlZFRvV29ya3NwYWNlOiBmdW5jdGlvbihl
dmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSAvKiogQHR5cGUge1dlYklu
c3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgaWYgKHVpU291
cmNlQ29kZS5jb250ZW50VHlwZSgpICE9PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TdHls
ZXNoZWV0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXVpU291cmNlQ29kZS51
cmwgfHwgIVdlYkluc3BlY3Rvci5yZXNvdXJjZUZvclVSTCh1aVNvdXJjZUNvZGUudXJsKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fYmluZFVJU291cmNlQ29kZSh1aVNvdXJj
ZUNvZGUpOwotICAgIH0sCi0KLSAgICBfYmluZFVJU291cmNlQ29kZTogZnVuY3Rpb24odWlTb3Vy
Y2VDb2RlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX21hcHBlZFVSTHNbdWlTb3VyY2VDb2Rl
LnVybF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX21hcHBlZFVSTHNbdWlT
b3VyY2VDb2RlLnVybF0gPSB0cnVlOwotICAgICAgICB1aVNvdXJjZUNvZGUuc2V0U291cmNlTWFw
cGluZyh0aGlzKTsKLSAgICAgICAgdmFyIHN0eWxlRmlsZSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5
bGVGaWxlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIHVpU291cmNlQ29kZS5zZXRTdHlsZUZpbGUo
c3R5bGVGaWxlKTsKLSAgICAgICAgdGhpcy5fY3NzTW9kZWwuc2V0U291cmNlTWFwcGluZyh1aVNv
dXJjZUNvZGUudXJsLCB0aGlzKTsKLSAgICB9LAotCi0gICAgX3Byb2plY3RXaWxsUmVzZXQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHByb2plY3QgPSBldmVudC5kYXRhOwot
ICAgICAgICB2YXIgdWlTb3VyY2VDb2RlcyA9IHByb2plY3QudWlTb3VyY2VDb2RlcygpOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpU291cmNlQ29kZXM7ICsraSkKLSAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9tYXBwZWRVUkxzW3VpU291cmNlQ29kZXNbaV0udXJsXTsKLSAgICB9LAot
Ci0gICAgX2luaXRpYWxpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8qKiB7T2JqZWN0
LjxzdHJpbmcsIGJvb2xlYW4+fSAqLwotICAgICAgICB0aGlzLl9tYXBwZWRVUkxzID0ge307Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVu
dAotICAgICAqLwotICAgIF9tYWluRnJhbWVDcmVhdGVkT3JOYXZpZ2F0ZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgbWFwcGVkVVJMIGluIHRoaXMuX21hcHBlZFVS
THMpIHsKLSAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlT
b3VyY2VDb2RlRm9yVVJMKG1hcHBlZFVSTCk7Ci0gICAgICAgICAgICBpZiAoIXVpU291cmNlQ29k
ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHVpU291cmNlQ29kZS5z
dHlsZUZpbGUoKS5kaXNwb3NlKCk7Ci0gICAgICAgICAgICB1aVNvdXJjZUNvZGUuc2V0U3R5bGVG
aWxlKG51bGwpOwotICAgICAgICAgICAgdWlTb3VyY2VDb2RlLnNldFNvdXJjZU1hcHBpbmcobnVs
bCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpOwotICAgIH0KLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZX0gdWlTb3VyY2VDb2RlCi0gKi8KLVdlYkluc3BlY3Rvci5TdHlsZUZpbGUgPSBmdW5jdGlvbih1
aVNvdXJjZUNvZGUpCi17Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOwot
ICAgIHRoaXMuX3VpU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGUuRXZlbnRzLldvcmtpbmdDb3B5Q2hhbmdlZCwgdGhpcy5fd29ya2luZ0NvcHlDaGFu
Z2VkLCB0aGlzKTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29weUNvbW1pdHRlZCwgdGhpcy5f
d29ya2luZ0NvcHlDb21taXR0ZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuU3R5bGVGaWxl
LnVwZGF0ZVRpbWVvdXQgPSAyMDA7Ci0KLVdlYkluc3BlY3Rvci5TdHlsZUZpbGUucHJvdG90eXBl
ID0gewotICAgIF93b3JraW5nQ29weUNvbW1pdHRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5faXNBZGRpbmdSZXZpc2lvbikKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB0aGlzLl9jb21taXRJbmNyZW1lbnRhbEVkaXQodHJ1ZSk7Ci0gICAgfSwKLQot
ICAgIF93b3JraW5nQ29weUNoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX2lzQWRkaW5nUmV2aXNpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgLy8gRklYTUU6IEV4dGVuc2lvbnMgdGVzdHMgb3ZlcnJpZGUgdXBkYXRlVGltZW91dCBiZWNh
dXNlIGV4dGVuc2lvbnMgZG9uJ3QgaGF2ZSBhbnkgY29udHJvbCBvdmVyIGFwcGx5aW5nIGNoYW5n
ZXMgdG8gZG9tYWluIHNwZWNpZmljIGJpbmRpbmdzLgotICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LlN0eWxlRmlsZS51cGRhdGVUaW1lb3V0ID49IDApIHsKLSAgICAgICAgICAgIHRoaXMuX2luY3Jl
bWVudGFsVXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX2NvbW1pdEluY3JlbWVudGFsRWRp
dC5iaW5kKHRoaXMsIGZhbHNlKSwgV2ViSW5zcGVjdG9yLlN0eWxlRmlsZS51cGRhdGVUaW1lb3V0
KQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2NvbW1pdEluY3JlbWVudGFsRWRp
dChmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWFq
b3JDaGFuZ2UKLSAgICAgKi8KLSAgICBfY29tbWl0SW5jcmVtZW50YWxFZGl0OiBmdW5jdGlvbiht
YWpvckNoYW5nZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFySW5jcmVtZW50YWxVcGRhdGVU
aW1lcigpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc3R5bGVDb250ZW50QmluZGluZy5zZXRTdHls
ZUNvbnRlbnQodGhpcy5fdWlTb3VyY2VDb2RlLCB0aGlzLl91aVNvdXJjZUNvZGUud29ya2luZ0Nv
cHkoKSwgbWFqb3JDaGFuZ2UsIHRoaXMuX3N0eWxlQ29udGVudFNldC5iaW5kKHRoaXMpKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/c3RyaW5nfSBlcnJvcgotICAgICAqLwot
ICAgIF9zdHlsZUNvbnRlbnRTZXQ6IGZ1bmN0aW9uKGVycm9yKQotICAgIHsKLSAgICAgICAgaWYg
KGVycm9yKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dFcnJvck1lc3NhZ2UoZXJyb3Ip
OwotICAgIH0sCi0KLSAgICBfY2xlYXJJbmNyZW1lbnRhbFVwZGF0ZVRpbWVyOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2luY3JlbWVudGFsVXBkYXRlVGltZXIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pbmNyZW1lbnRhbFVw
ZGF0ZVRpbWVyKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2luY3JlbWVudGFsVXBkYXRlVGltZXI7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50Ci0gICAg
ICovCi0gICAgYWRkUmV2aXNpb246IGZ1bmN0aW9uKGNvbnRlbnQpCi0gICAgewotICAgICAgICB0
aGlzLl9pc0FkZGluZ1JldmlzaW9uID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2Rl
LmFkZFJldmlzaW9uKGNvbnRlbnQpOwotICAgICAgICBkZWxldGUgdGhpcy5faXNBZGRpbmdSZXZp
c2lvbjsKLSAgICB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fdWlTb3VyY2VDb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291
cmNlQ29kZS5FdmVudHMuV29ya2luZ0NvcHlDb21taXR0ZWQsIHRoaXMuX3dvcmtpbmdDb3B5Q29t
bWl0dGVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlLnJlbW92ZUV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuV29ya2luZ0NvcHlDaGFuZ2Vk
LCB0aGlzLl93b3JraW5nQ29weUNoYW5nZWQsIHRoaXMpOwotICAgIH0KLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWx9IGNzc01v
ZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5TdHlsZUNvbnRlbnRCaW5kaW5nID0gZnVuY3Rpb24oY3Nz
TW9kZWwsIHdvcmtzcGFjZSkKLXsKLSAgICB0aGlzLl9jc3NNb2RlbCA9IGNzc01vZGVsOwotICAg
IHRoaXMuX3dvcmtzcGFjZSA9IHdvcmtzcGFjZTsKLSAgICB0aGlzLl9jc3NNb2RlbC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkV2ZW50cy5TdHlsZVNoZWV0Q2hh
bmdlZCwgdGhpcy5fc3R5bGVTaGVldENoYW5nZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3Iu
U3R5bGVDb250ZW50QmluZGluZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gY29udGVudAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWFqb3JDaGFuZ2UKLSAg
ICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmcpfSB1c2VyQ2FsbGJhY2sKLSAgICAgKi8KLSAg
ICBzZXRTdHlsZUNvbnRlbnQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgY29udGVudCwgbWFqb3JD
aGFuZ2UsIHVzZXJDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXNvdXJjZSA9IFdlYklu
c3BlY3Rvci5yZXNvdXJjZUZvclVSTCh1aVNvdXJjZUNvZGUudXJsKTsKLSAgICAgICAgaWYgKCFy
ZXNvdXJjZSkgewotICAgICAgICAgICAgdXNlckNhbGxiYWNrKCJObyByZXNvdXJjZSBmb3VuZDog
IiArIHVpU291cmNlQ29kZS51cmwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgdGhpcy5fY3NzTW9kZWwucmVzb3VyY2VCaW5kaW5nKCkucmVx
dWVzdFN0eWxlU2hlZXRJZEZvclJlc291cmNlKHJlc291cmNlLCBjYWxsYmFjay5iaW5kKHRoaXMp
KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/Q1NTQWdlbnQuU3R5bGVTaGVl
dElkfSBzdHlsZVNoZWV0SWQKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KHN0eWxlU2hlZXRJZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzdHlsZVNoZWV0SWQp
IHsKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2soIk5vIHN0eWxlc2hlZXQgZm91bmQ6ICIg
KyByZXNvdXJjZS5mcmFtZUlkICsgIjoiICsgcmVzb3VyY2UudXJsKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMuX2lubmVyU2V0Q29u
dGVudChzdHlsZVNoZWV0SWQsIGNvbnRlbnQsIG1ham9yQ2hhbmdlLCB1c2VyQ2FsbGJhY2ssIG51
bGwpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q1NTQWdl
bnQuU3R5bGVTaGVldElkfSBzdHlsZVNoZWV0SWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29u
dGVudAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWFqb3JDaGFuZ2UKLSAgICAgKiBAcGFyYW0g
e2Z1bmN0aW9uKD9zdHJpbmcpfSB1c2VyQ2FsbGJhY2sKLSAgICAgKi8KLSAgICBfaW5uZXJTZXRD
b250ZW50OiBmdW5jdGlvbihzdHlsZVNoZWV0SWQsIGNvbnRlbnQsIG1ham9yQ2hhbmdlLCB1c2Vy
Q2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLl9pc1NldHRpbmdDb250ZW50ID0gdHJ1ZTsK
LSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVzZXJDYWxsYmFjayhlcnJvcik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5faXNTZXR0aW5n
Q29udGVudDsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9jc3NNb2RlbC5zZXRTdHlsZVNoZWV0
VGV4dChzdHlsZVNoZWV0SWQsIGNvbnRlbnQsIG1ham9yQ2hhbmdlLCBjYWxsYmFjay5iaW5kKHRo
aXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZl
bnR9IGV2ZW50Ci0gICAgICovCi0gICAgX3N0eWxlU2hlZXRDaGFuZ2VkOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc1NldHRpbmdDb250ZW50KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghZXZlbnQuZGF0YS5tYWpvckNoYW5nZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/c3RyaW5n
fSBlcnJvcgotICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudAotICAgICAgICAgKi8K
LSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIGNvbnRlbnQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghZXJyb3IpCi0gICAgICAgICAgICAgICAgdGhpcy5faW5uZXJTdHlsZVNo
ZWV0Q2hhbmdlZChldmVudC5kYXRhLnN0eWxlU2hlZXRJZCwgY29udGVudCk7Ci0gICAgICAgIH0K
LSAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVTaGVldFRleHQoZXZlbnQuZGF0YS5zdHlsZVNoZWV0
SWQsIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge0NTU0FnZW50LlN0eWxlU2hlZXRJZH0gc3R5bGVTaGVldElkCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IGNvbnRlbnQKLSAgICAgKi8KLSAgICBfaW5uZXJTdHlsZVNoZWV0Q2hhbmdlZDogZnVu
Y3Rpb24oc3R5bGVTaGVldElkLCBjb250ZW50KQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAg
ICAqIEBwYXJhbSB7P3N0cmluZ30gc3R5bGVTaGVldFVSTAotICAgICAgICAgKi8KLSAgICAgICAg
ZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVTaGVldFVSTCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHR5cGVvZiBzdHlsZVNoZWV0VVJMICE9PSAic3RyaW5nIikKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2Uu
dWlTb3VyY2VDb2RlRm9yVVJMKHN0eWxlU2hlZXRVUkwpOwotICAgICAgICAgICAgaWYgKCF1aVNv
dXJjZUNvZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAodWlT
b3VyY2VDb2RlLnN0eWxlRmlsZSgpKQotICAgICAgICAgICAgICAgIHVpU291cmNlQ29kZS5zdHls
ZUZpbGUoKS5hZGRSZXZpc2lvbihjb250ZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X2Nzc01vZGVsLnJlc291cmNlQmluZGluZygpLnJlcXVlc3RSZXNvdXJjZVVSTEZvclN0eWxlU2hl
ZXRJZChzdHlsZVNoZWV0SWQsIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCi19Ci0KLS8q
KgotICogQHR5cGUgez9XZWJJbnNwZWN0b3IuU3R5bGVDb250ZW50QmluZGluZ30KLSAqLwotV2Vi
SW5zcGVjdG9yLnN0eWxlQ29udGVudEJpbmRpbmcgPSBudWxsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdWdnZXN0Qm94LmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdWdnZXN0Qm94LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxM2E0ZTQ5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU3VnZ2VzdEJveC5qcworKysgL2Rldi9udWxsCkBAIC0xLDM5MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
LyoqCi0gKiBAaW50ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUg
PSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWdnZXN0aW9uCi0g
ICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCi0gICAgICov
Ci0gICAgYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0
ZVN1Z2dlc3Rpb24pIHsgfSwKLQotICAgIC8qKgotICAgICAqIGFjY2VwdFN1Z2dlc3Rpb24gd2ls
bCBiZSBhbHdheXMgY2FsbGVkIGFmdGVyIGNhbGwgdG8gYXBwbHlTdWdnZXN0aW9uIHdpdGggaXNJ
bnRlcm1lZGlhdGVTdWdnZXN0aW9uIGJlaW5nIGVxdWFsIHRvIGZhbHNlLgotICAgICAqLwotICAg
IGFjY2VwdFN1Z2dlc3Rpb246IGZ1bmN0aW9uKCkgeyB9LAotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveERlbGVnYXRlfSBzdWdnZXN0
Qm94RGVsZWdhdGUKLSAqIEBwYXJhbSB7RWxlbWVudH0gYW5jaG9yRWxlbWVudAotICogQHBhcmFt
IHtzdHJpbmc9fSBjbGFzc05hbWUKLSAqLwotV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3ggPSBmdW5j
dGlvbihzdWdnZXN0Qm94RGVsZWdhdGUsIGFuY2hvckVsZW1lbnQsIGNsYXNzTmFtZSkKLXsKLSAg
ICB0aGlzLl9zdWdnZXN0Qm94RGVsZWdhdGUgPSBzdWdnZXN0Qm94RGVsZWdhdGU7Ci0gICAgdGhp
cy5fYW5jaG9yRWxlbWVudCA9IGFuY2hvckVsZW1lbnQ7Ci0gICAgdGhpcy5fbGVuZ3RoID0gMDsK
LSAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gLTE7Ci0gICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50
ID0gbnVsbDsKLSAgICB0aGlzLl9ib3VuZE9uU2Nyb2xsID0gdGhpcy5fb25TY3JvbGxPclJlc2l6
ZS5iaW5kKHRoaXMsIHRydWUpOwotICAgIHRoaXMuX2JvdW5kT25SZXNpemUgPSB0aGlzLl9vblNj
cm9sbE9yUmVzaXplLmJpbmQodGhpcywgZmFsc2UpOwotICAgIHdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCJzY3JvbGwiLCB0aGlzLl9ib3VuZE9uU2Nyb2xsLCB0cnVlKTsKLSAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fYm91bmRPblJlc2l6ZSwgdHJ1ZSk7Ci0KLSAg
ICB0aGlzLl9ib2R5RWxlbWVudCA9IGFuY2hvckVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5Owot
ICAgIHRoaXMuX2VsZW1lbnQgPSBhbmNob3JFbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fZWxlbWVudC5jbGFzc05hbWUgPSAic3VnZ2VzdC1ib3gg
IiArIChjbGFzc05hbWUgfHwgIiIpOwotICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigibW91c2Vkb3duIiwgdGhpcy5fb25Cb3hNb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7Ci0g
ICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2
IiwgImNvbnRhaW5lciIpOwotICAgIHRoaXMuY29udGVudEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5l
ckVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJjb250ZW50Iik7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5TdWdnZXN0Qm94LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIHZpc2libGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAhIXRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtib29sZWFufSBpc1Njcm9sbAotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2
ZW50Ci0gICAgICovCi0gICAgX29uU2Nyb2xsT3JSZXNpemU6IGZ1bmN0aW9uKGlzU2Nyb2xsLCBl
dmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1Njcm9sbCAmJiB0aGlzLl9lbGVtZW50LmlzQW5j
ZXN0b3IoZXZlbnQudGFyZ2V0KSB8fCAhdGhpcy52aXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9uKHRoaXMuX2FuY2hvckJveCk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QW5jaG9yQm94fSBhbmNob3JCb3gKLSAg
ICAgKi8KLSAgICBfdXBkYXRlQm94UG9zaXRpb246IGZ1bmN0aW9uKGFuY2hvckJveCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2FuY2hvckJveCA9IGFuY2hvckJveDsKLQotICAgICAgICAvLyBNZWFz
dXJlIHRoZSBjb250ZW50IGVsZW1lbnQgYm94LgotICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50
LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbGVtZW50KTsKLSAgICAgICAgdGhpcy5jb250ZW50RWxl
bWVudC5wb3NpdGlvbkF0KDAsIDApOwotICAgICAgICB2YXIgY29udGVudFdpZHRoID0gdGhpcy5j
b250ZW50RWxlbWVudC5vZmZzZXRXaWR0aDsKLSAgICAgICAgdmFyIGNvbnRlbnRIZWlnaHQgPSB0
aGlzLmNvbnRlbnRFbGVtZW50Lm9mZnNldEhlaWdodDsKLSAgICAgICAgdGhpcy5jb250ZW50RWxl
bWVudC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgICAgdGhpcy5jb250YWluZXJFbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudEVsZW1lbnQpOwotCi0gICAgICAgIGNvbnN0IHNw
YWNlciA9IDY7Ci0gICAgICAgIGNvbnN0IHN1Z2dlc3RCb3hQYWRkaW5nWCA9IDIxOwotICAgICAg
ICBjb25zdCBzdWdnZXN0Qm94UGFkZGluZ1kgPSAyOwotCi0gICAgICAgIHZhciBtYXhXaWR0aCA9
IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLSBhbmNob3JCb3gueCAtIHNwYWNlcjsKLSAgICAg
ICAgdmFyIHdpZHRoID0gTWF0aC5taW4oY29udGVudFdpZHRoLCBtYXhXaWR0aCAtIHN1Z2dlc3RC
b3hQYWRkaW5nWCkgKyBzdWdnZXN0Qm94UGFkZGluZ1g7Ci0gICAgICAgIHZhciBwYWRkZWRXaWR0
aCA9IGNvbnRlbnRXaWR0aCArIHN1Z2dlc3RCb3hQYWRkaW5nWDsKLSAgICAgICAgdmFyIGJveFgg
PSBhbmNob3JCb3gueDsKLSAgICAgICAgaWYgKHdpZHRoIDwgcGFkZGVkV2lkdGgpIHsKLSAgICAg
ICAgICAgIC8vIFNoaWZ0IHRoZSBzdWdnZXN0IGJveCB0byB0aGUgbGVmdCB0byBhY2NvbW1vZGF0
ZSB0aGUgY29udGVudCB3aXRob3V0IHRyaW1taW5nIHRvIHRoZSBCT0RZIGVkZ2UuCi0gICAgICAg
ICAgICBtYXhXaWR0aCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLSBzcGFjZXI7Ci0gICAg
ICAgICAgICB3aWR0aCA9IE1hdGgubWluKGNvbnRlbnRXaWR0aCwgbWF4V2lkdGggLSBzdWdnZXN0
Qm94UGFkZGluZ1gpICsgc3VnZ2VzdEJveFBhZGRpbmdYOwotICAgICAgICAgICAgYm94WCA9IGRv
Y3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLSB3aWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIHZh
ciBib3hZOwotICAgICAgICB2YXIgYWJvdmVIZWlnaHQgPSBhbmNob3JCb3gueTsKLSAgICAgICAg
dmFyIHVuZGVySGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgLSBhbmNob3JCb3gu
eSAtIGFuY2hvckJveC5oZWlnaHQ7Ci0gICAgICAgIHZhciBtYXhIZWlnaHQgPSBNYXRoLm1heCh1
bmRlckhlaWdodCwgYWJvdmVIZWlnaHQpIC0gc3BhY2VyOwotICAgICAgICB2YXIgaGVpZ2h0ID0g
TWF0aC5taW4oY29udGVudEhlaWdodCwgbWF4SGVpZ2h0IC0gc3VnZ2VzdEJveFBhZGRpbmdZKSAr
IHN1Z2dlc3RCb3hQYWRkaW5nWTsKLSAgICAgICAgaWYgKHVuZGVySGVpZ2h0ID49IGFib3ZlSGVp
Z2h0KSB7Ci0gICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHN1Z2dlc3QgYm94IHVuZGVyIHRoZSBh
bmNob3JCb3guCi0gICAgICAgICAgICBib3hZID0gYW5jaG9yQm94LnkgKyBhbmNob3JCb3guaGVp
Z2h0OwotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJhYm92ZS1h
bmNob3IiKTsKLSAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkU3R5bGVDbGFzcygidW5kZXIt
YW5jaG9yIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHN1
Z2dlc3QgYm94IGFib3ZlIHRoZSBhbmNob3JCb3guCi0gICAgICAgICAgICBib3hZID0gYW5jaG9y
Qm94LnkgLSBoZWlnaHQ7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZVN0eWxlQ2xh
c3MoInVuZGVyLWFuY2hvciIpOwotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJhYm92ZS1hbmNob3IiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2VsZW1lbnQu
cG9zaXRpb25BdChib3hYLCBib3hZKTsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS53aWR0
aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBo
ZWlnaHQgKyAicHgiOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBl
dmVudAotICAgICAqLwotICAgIF9vbkJveE1vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBoaWRlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVD
aGlsZCh0aGlzLl9lbGVtZW50KTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdGVkRWxlbWVu
dDsKLSAgICB9LAotCi0gICAgcmVtb3ZlRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9ib3VuZE9u
U2Nyb2xsLCB0cnVlKTsKLSAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6
ZSIsIHRoaXMuX2JvdW5kT25SZXNpemUsIHRydWUpOwotICAgICAgICB0aGlzLmhpZGUoKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSB0ZXh0Ci0gICAgICogQHBh
cmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCi0gICAgICovCi0gICAgX2Fw
cGx5U3VnZ2VzdGlvbjogZnVuY3Rpb24odGV4dCwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKQot
ICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnZpc2libGUoKSB8fCAhKHRleHQgfHwgdGhpcy5fc2Vs
ZWN0ZWRFbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIg
c3VnZ2VzdGlvbiA9IHRleHQgfHwgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnRleHRDb250ZW50Owot
ICAgICAgICBpZiAoIXN1Z2dlc3Rpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlLmFwcGx5U3VnZ2VzdGlvbihzdWdnZXN0aW9u
LCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSB0ZXh0Ci0gICAgICovCi0gICAg
YWNjZXB0U3VnZ2VzdGlvbjogZnVuY3Rpb24odGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1
bHQgPSB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odGV4dCwgZmFsc2UpOwotICAgICAgICB0aGlzLmhp
ZGUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlLmFjY2VwdFN1Z2dlc3Rpb24oKTsKLQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IHNoaWZ0Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNDaXJjdWxhcgotICAgICAq
IEByZXR1cm4ge2Jvb2xlYW59IGlzIGNoYW5nZWQKLSAgICAgKi8KLSAgICBfc2VsZWN0Q2xvc2Vz
dDogZnVuY3Rpb24oc2hpZnQsIGlzQ2lyY3VsYXIpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgaW5kZXgg
PSB0aGlzLl9zZWxlY3RlZEluZGV4ICsgc2hpZnQ7Ci0KLSAgICAgICAgaWYgKGlzQ2lyY3VsYXIp
Ci0gICAgICAgICAgICBpbmRleCA9ICh0aGlzLl9sZW5ndGggKyBpbmRleCkgJSB0aGlzLl9sZW5n
dGg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluZGV4ID0gTnVtYmVyLmNvbnN0cmFpbihp
bmRleCwgMCwgdGhpcy5fbGVuZ3RoIC0gMSk7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShp
bmRleCk7Ci0gICAgICAgIHRoaXMuX2FwcGx5U3VnZ2VzdGlvbih1bmRlZmluZWQsIHRydWUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IHRleHQKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9v
bkl0ZW1Nb3VzZURvd246IGZ1bmN0aW9uKHRleHQsIGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhp
cy5hY2NlcHRTdWdnZXN0aW9uKHRleHQpOwotICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4Ci0gICAgICog
QHBhcmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKi8KLSAgICBfY3JlYXRlSXRlbUVsZW1lbnQ6IGZ1
bmN0aW9uKHByZWZpeCwgdGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gInN1
Z2dlc3QtYm94LWNvbnRlbnQtaXRlbSBzb3VyY2UtY29kZSI7Ci0gICAgICAgIGVsZW1lbnQudGFi
SW5kZXggPSAtMTsKLSAgICAgICAgaWYgKHByZWZpeCAmJiBwcmVmaXgubGVuZ3RoICYmICF0ZXh0
LmluZGV4T2YocHJlZml4KSkgewotICAgICAgICAgICAgdmFyIHByZWZpeEVsZW1lbnQgPSBlbGVt
ZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgInByZWZpeCIpOwotICAgICAgICAgICAgcHJlZml4RWxl
bWVudC50ZXh0Q29udGVudCA9IHByZWZpeDsKLSAgICAgICAgICAgIHZhciBzdWZmaXhFbGVtZW50
ID0gZWxlbWVudC5jcmVhdGVDaGlsZCgic3BhbiIsICJzdWZmaXgiKTsKLSAgICAgICAgICAgIHN1
ZmZpeEVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBzdWZmaXhFbGVtZW50ID0gZWxlbWVu
dC5jcmVhdGVDaGlsZCgic3BhbiIsICJzdWZmaXgiKTsKLSAgICAgICAgICAgIHN1ZmZpeEVsZW1l
bnQudGV4dENvbnRlbnQgPSB0ZXh0OwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fb25JdGVtTW91c2VEb3duLmJpbmQodGhpcywg
dGV4dCksIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSBpdGVtcwotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBzZWxlY3RlZEluZGV4Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJFbnRlcmVk
VGV4dAotICAgICAqLwotICAgIF91cGRhdGVJdGVtczogZnVuY3Rpb24oaXRlbXMsIHNlbGVjdGVk
SW5kZXgsIHVzZXJFbnRlcmVkVGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xlbmd0aCA9IGl0
ZW1zLmxlbmd0aDsKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5yZW1vdmVDaGlsZHJlbigp
OwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAgICAgICB2YXIgY3VycmVudEl0
ZW1FbGVtZW50ID0gdGhpcy5fY3JlYXRlSXRlbUVsZW1lbnQodXNlckVudGVyZWRUZXh0LCBpdGVt
KTsKLSAgICAgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEl0
ZW1FbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9
IG51bGw7Ci0gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWRJbmRleCA9PT0gIm51bWJlciIpCi0g
ICAgICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKHNlbGVjdGVkSW5kZXgpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKi8KLSAgICBfc2VsZWN0
SXRlbTogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRF
bGVtZW50KQotICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5yZW1v
dmUoInNlbGVjdGVkIik7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IGluZGV4Owot
ICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSB0aGlzLmNvbnRlbnRFbGVtZW50LmNoaWxk
cmVuW2luZGV4XTsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQo
InNlbGVjdGVkIik7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnNjcm9sbEludG9W
aWV3SWZOZWVkZWQoZmFsc2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFB
cnJheS48c3RyaW5nPn0gY29tcGxldGlvbnMKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhblNo
b3dGb3JTaW5nbGVJdGVtCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJFbnRlcmVkVGV4dAot
ICAgICAqLwotICAgIF9jYW5TaG93Qm94OiBmdW5jdGlvbihjb21wbGV0aW9ucywgY2FuU2hvd0Zv
clNpbmdsZUl0ZW0sIHVzZXJFbnRlcmVkVGV4dCkKLSAgICB7Ci0gICAgICAgIGlmICghY29tcGxl
dGlvbnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID4gMSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgICAgIC8vIERvIG5vdCBzaG93IGEgc2luZ2xlIHN1Z2dlc3Rpb24gaWYg
aXQgaXMgdGhlIHNhbWUgYXMgdXNlci1lbnRlcmVkIHByZWZpeCwgZXZlbiBpZiBhbGxvd2VkIHRv
IHNob3cgc2luZ2xlLWl0ZW0gc3VnZ2VzdCBib3hlcy4KLSAgICAgICAgcmV0dXJuIGNhblNob3dG
b3JTaW5nbGVJdGVtICYmIGNvbXBsZXRpb25zWzBdICE9PSB1c2VyRW50ZXJlZFRleHQ7Ci0gICAg
fSwKLQotICAgIF9yZW1lbWJlclJvd0NvdW50UGVyVmlld3BvcnQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5jb250ZW50RWxlbWVudC5maXJzdENoaWxkKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQgPSBNYXRoLmZs
b29yKHRoaXMuY29udGFpbmVyRWxlbWVudC5vZmZzZXRIZWlnaHQgLyB0aGlzLmNvbnRlbnRFbGVt
ZW50LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtBbmNob3JCb3h9IGFuY2hvckJveAotICAgICAqIEBwYXJhbSB7IUFycmF5LjxzdHJp
bmc+fSBjb21wbGV0aW9ucwotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzZWxlY3RlZEluZGV4Ci0g
ICAgICogQHBhcmFtIHtib29sZWFufSBjYW5TaG93Rm9yU2luZ2xlSXRlbQotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSB1c2VyRW50ZXJlZFRleHQKLSAgICAgKi8KLSAgICB1cGRhdGVTdWdnZXN0aW9u
czogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCwgY2FuU2hv
d0ZvclNpbmdsZUl0ZW0sIHVzZXJFbnRlcmVkVGV4dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9jYW5TaG93Qm94KGNvbXBsZXRpb25zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSwgdXNlckVudGVy
ZWRUZXh0KSkgewotICAgICAgICAgICAgdGhpcy5fdXBkYXRlSXRlbXMoY29tcGxldGlvbnMsIHNl
bGVjdGVkSW5kZXgsIHVzZXJFbnRlcmVkVGV4dCk7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVC
b3hQb3NpdGlvbihhbmNob3JCb3gpOwotICAgICAgICAgICAgaWYgKCF0aGlzLnZpc2libGUoKSkK
LSAgICAgICAgICAgICAgICB0aGlzLl9ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVt
ZW50KTsKLSAgICAgICAgICAgIHRoaXMuX3JlbWVtYmVyUm93Q291bnRQZXJWaWV3cG9ydCgpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMuaGlkZSgpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHVwS2V5UHJlc3NlZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QoLTEs
IHRydWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAg
ICAqLwotICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgxLCB0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBwYWdlVXBLZXlQcmVzc2VkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgtdGhpcy5f
cm93Q291bnRQZXJWaWV3cG9ydCwgZmFsc2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIHBhZ2VEb3duS2V5UHJlc3NlZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QodGhpcy5fcm93
Q291bnRQZXJWaWV3cG9ydCwgZmFsc2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGVudGVyS2V5UHJlc3NlZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdmFyIGhhc1NlbGVjdGVkSXRlbSA9ICEhdGhpcy5fc2VsZWN0ZWRFbGVt
ZW50OwotICAgICAgICB0aGlzLmFjY2VwdFN1Z2dlc3Rpb24oKTsKLQotICAgICAgICAvLyBSZXBv
cnQgdGhlIGV2ZW50IGFzIG5vbi1oYW5kbGVkIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkIGl0ZW0s
Ci0gICAgICAgIC8vIHRvIGNvbW1pdCB0aGUgaW5wdXQgb3IgaGFuZGxlIGl0IG90aGVyd2lzZS4K
LSAgICAgICAgcmV0dXJuIGhhc1NlbGVjdGVkSXRlbTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICB0YWJLZXlQcmVzc2VkOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5lbnRlcktleVByZXNzZWQoKTsKLSAgICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RhYmJl
ZEVkaXRvckNvbnRhaW5lci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGFiYmVkRWRpdG9yQ29udGFpbmVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
OTZjZTU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGFiYmVkRWRpdG9yQ29udGFpbmVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgR09PR0xFIElOQy4KLSAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAaW50ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5U
YWJiZWRFZGl0b3JDb250YWluZXJEZWxlZ2F0ZSA9IGZ1bmN0aW9uKCkgeyB9Ci0KLVdlYkluc3Bl
Y3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXJEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUK
LSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuU291cmNlRnJhbWV9Ci0gICAgICovCi0gICAg
dmlld0ZvckZpbGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkgeyB9Ci19Ci0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lckRlbGVnYXRlfSBkZWxlZ2F0ZQotICog
QHBhcmFtIHtzdHJpbmd9IHNldHRpbmdOYW1lCi0gKi8KLVdlYkluc3BlY3Rvci5UYWJiZWRFZGl0
b3JDb250YWluZXIgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgc2V0dGluZ05hbWUpCi17Ci0gICAgV2Vi
SW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdh
dGU7Ci0KLSAgICB0aGlzLl90YWJiZWRQYW5lID0gbmV3IFdlYkluc3BlY3Rvci5UYWJiZWRQYW5l
KCk7Ci0gICAgdGhpcy5fdGFiYmVkUGFuZS5zZXRUYWJEZWxlZ2F0ZShuZXcgV2ViSW5zcGVjdG9y
LkVkaXRvckNvbnRhaW5lclRhYkRlbGVnYXRlKHRoaXMpKTsKLQotICAgIHRoaXMuX3RhYmJlZFBh
bmUuY2xvc2VhYmxlVGFicyA9IHRydWU7Ci0gICAgdGhpcy5fdGFiYmVkUGFuZS5lbGVtZW50Lmlk
ID0gInNjcmlwdHMtZWRpdG9yLWNvbnRhaW5lci10YWJiZWQtcGFuZSI7Ci0KLSAgICB0aGlzLl90
YWJiZWRQYW5lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRhYmJlZFBhbmUuRXZlbnRU
eXBlcy5UYWJDbG9zZWQsIHRoaXMuX3RhYkNsb3NlZCwgdGhpcyk7Ci0gICAgdGhpcy5fdGFiYmVk
UGFuZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UYWJiZWRQYW5lLkV2ZW50VHlwZXMu
VGFiU2VsZWN0ZWQsIHRoaXMuX3RhYlNlbGVjdGVkLCB0aGlzKTsKLQotICAgIHRoaXMuX3RhYklk
cyA9IG5ldyBNYXAoKTsKLSAgICB0aGlzLl9maWxlcyA9IHt9OwotICAgIHRoaXMuX2xvYWRlZFVS
SXMgPSB7fTsKLQotICAgIHRoaXMuX3ByZXZpb3VzbHlWaWV3ZWRGaWxlc1NldHRpbmcgPSBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3MuY3JlYXRlU2V0dGluZyhzZXR0aW5nTmFtZSwgW10pOwotICAgIHRo
aXMuX2hpc3RvcnkgPSBXZWJJbnNwZWN0b3IuVGFiYmVkRWRpdG9yQ29udGFpbmVyLkhpc3Rvcnku
ZnJvbU9iamVjdCh0aGlzLl9wcmV2aW91c2x5Vmlld2VkRmlsZXNTZXR0aW5nLmdldCgpKTsKLX0K
LQotCi1XZWJJbnNwZWN0b3IuVGFiYmVkRWRpdG9yQ29udGFpbmVyLkV2ZW50cyA9IHsKLSAgICBF
ZGl0b3JTZWxlY3RlZDogIkVkaXRvclNlbGVjdGVkIiwKLSAgICBFZGl0b3JDbG9zZWQ6ICJFZGl0
b3JDbG9zZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIuX3RhYklk
ID0gMDsKLQotV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5tYXhpbWFsUHJldmlv
dXNseVZpZXdlZEZpbGVzQ291bnQgPSAzMDsKLQotV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNv
bnRhaW5lci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVj
dG9yLlZpZXd9Ci0gICAgICovCi0gICAgZ2V0IHZpZXcoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX3RhYmJlZFBhbmU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEB0eXBlIHtXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWV9Ci0gICAgICovCi0gICAgZ2V0IHZpc2libGVWaWV3KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90YWJiZWRQYW5lLnZpc2libGVWaWV3OwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudEVsZW1lbnQKLSAgICAg
Ki8KLSAgICBzaG93OiBmdW5jdGlvbihwYXJlbnRFbGVtZW50KQotICAgIHsKLSAgICAgICAgdGhp
cy5fdGFiYmVkUGFuZS5zaG93KHBhcmVudEVsZW1lbnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAg
ICAqLwotICAgIHNob3dGaWxlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAg
ICB0aGlzLl9pbm5lclNob3dGaWxlKHVpU291cmNlQ29kZSwgdHJ1ZSk7Ci0gICAgfSwKLQotICAg
IF9hZGRTY3JvbGxBbmRTZWxlY3Rpb25MaXN0ZW5lcnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5fY3VycmVudFZpZXcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHRoaXMuX2N1cnJlbnRWaWV3LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLkV2ZW50cy5TY3JvbGxDaGFuZ2VkLCB0aGlzLl9zY3JvbGxDaGFuZ2VkLCB0aGlzKTsKLSAg
ICAgICAgdGhpcy5fY3VycmVudFZpZXcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUuRXZlbnRzLlNlbGVjdGlvbkNoYW5nZWQsIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQs
IHRoaXMpOwotICAgIH0sCi0KLSAgICBfcmVtb3ZlU2Nyb2xsQW5kU2VsZWN0aW9uTGlzdGVuZXJz
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRWaWV3KQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9jdXJyZW50Vmlldy5yZW1vdmVFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVudHMuU2Nyb2xsQ2hhbmdlZCwgdGhp
cy5fc2Nyb2xsQ2hhbmdlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRWaWV3LnJlbW92
ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cy5TZWxlY3Rpb25D
aGFuZ2VkLCB0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLCB0aGlzKTsKLSAgICB9LAotCi0gICAgX3Nj
cm9sbENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9o
aXN0b3J5LnVwZGF0ZVNjcm9sbExpbmVOdW1iZXIodGhpcy5fY3VycmVudEZpbGUudXJpKCksIGxp
bmVOdW1iZXIpOwotICAgICAgICB0aGlzLl9oaXN0b3J5LnNhdmUodGhpcy5fcHJldmlvdXNseVZp
ZXdlZEZpbGVzU2V0dGluZyk7Ci0gICAgfSwKLQotICAgIF9zZWxlY3Rpb25DaGFuZ2VkOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IC8qKiBAdHlwZSB7V2ViSW5z
cGVjdG9yLlRleHRSYW5nZX0gKi8gKGV2ZW50LmRhdGEpOwotICAgICAgICB0aGlzLl9oaXN0b3J5
LnVwZGF0ZVNlbGVjdGlvblJhbmdlKHRoaXMuX2N1cnJlbnRGaWxlLnVyaSgpLCByYW5nZSk7Ci0g
ICAgICAgIHRoaXMuX2hpc3Rvcnkuc2F2ZSh0aGlzLl9wcmV2aW91c2x5Vmlld2VkRmlsZXNTZXR0
aW5nKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB1c2VyR2Vz
dHVyZQotICAgICAqLwotICAgIF9pbm5lclNob3dGaWxlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUs
IHVzZXJHZXN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGaWxlID09PSB1
aVNvdXJjZUNvZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3JlbW92ZVNj
cm9sbEFuZFNlbGVjdGlvbkxpc3RlbmVycygpOwotICAgICAgICB0aGlzLl9jdXJyZW50RmlsZSA9
IHVpU291cmNlQ29kZTsKLQotICAgICAgICB2YXIgdGFiSWQgPSB0aGlzLl90YWJJZHMuZ2V0KHVp
U291cmNlQ29kZSkgfHwgdGhpcy5fYXBwZW5kRmlsZVRhYih1aVNvdXJjZUNvZGUsIHVzZXJHZXN0
dXJlKTsKLSAgICAgICAgCi0gICAgICAgIHRoaXMuX3RhYmJlZFBhbmUuc2VsZWN0VGFiKHRhYklk
LCB1c2VyR2VzdHVyZSk7Ci0gICAgICAgIGlmICh1c2VyR2VzdHVyZSkKLSAgICAgICAgICAgIHRo
aXMuX2VkaXRvclNlbGVjdGVkQnlVc2VyQWN0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICB0aGlz
Ll9jdXJyZW50VmlldyA9IHRoaXMudmlzaWJsZVZpZXc7Ci0gICAgICAgIHRoaXMuX2FkZFNjcm9s
bEFuZFNlbGVjdGlvbkxpc3RlbmVycygpOwotICAgICAgICAKLSAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5FdmVu
dHMuRWRpdG9yU2VsZWN0ZWQsIHRoaXMuX2N1cnJlbnRGaWxlKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUK
LSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgX3RpdGxlRm9yRmlsZTogZnVu
Y3Rpb24odWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgY29uc3QgbWF4RGlzcGxheU5hbWVM
ZW5ndGggPSAzMDsKLSAgICAgICAgY29uc3QgbWluRGlzcGxheVF1ZXJ5UGFyYW1MZW5ndGggPSA1
OwotCi0gICAgICAgIHZhciB0aXRsZSA9IHVpU291cmNlQ29kZS5uYW1lKCk7Ci0gICAgICAgIHRp
dGxlID0gdGl0bGUgPyB0aXRsZS5jZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgobWF4RGlzcGxheU5h
bWVMZW5ndGgpIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIocHJvZ3JhbSkiKTsKLSAgICAgICAg
aWYgKHVpU291cmNlQ29kZS5pc0RpcnR5KCkpCi0gICAgICAgICAgICB0aXRsZSArPSAiKiI7Ci0g
ICAgICAgIHJldHVybiB0aXRsZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IGlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5leHRUYWJJZAotICAgICAqLwotICAg
IF9tYXliZUNsb3NlVGFiOiBmdW5jdGlvbihpZCwgbmV4dFRhYklkKQotICAgIHsKLSAgICAgICAg
dmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX2ZpbGVzW2lkXTsKLSAgICAgICAgdmFyIHNob3VsZFBy
b21wdCA9IHVpU291cmNlQ29kZS5pc0RpcnR5KCkgJiYgdWlTb3VyY2VDb2RlLnByb2plY3QoKS5j
YW5TZXRGaWxlQ29udGVudCgpOwotICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgcmVw
bGFjZWQgd2l0aCBjb21tb24gU2F2ZS9EaXNjYXJkL0NhbmNlbCBkaWFsb2cuCi0gICAgICAgIGlm
ICghc2hvdWxkUHJvbXB0IHx8IGNvbmZpcm0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBcmUgeW91
IHN1cmUgeW91IHdhbnQgdG8gY2xvc2UgdW5zYXZlZCBmaWxlOiAlcz8iLCB1aVNvdXJjZUNvZGUu
bmFtZSgpKSkpIHsKLSAgICAgICAgICAgIHVpU291cmNlQ29kZS5yZXNldFdvcmtpbmdDb3B5KCk7
Ci0gICAgICAgICAgICBpZiAobmV4dFRhYklkKQotICAgICAgICAgICAgICAgIHRoaXMuX3RhYmJl
ZFBhbmUuc2VsZWN0VGFiKG5leHRUYWJJZCwgdHJ1ZSk7Ci0gICAgICAgICAgICB0aGlzLl90YWJi
ZWRQYW5lLmNsb3NlVGFiKGlkLCB0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtBcnJheS48c3RyaW5nPn0gaWRzCi0gICAgICovCi0gICAgX2Nsb3NlVGFiczogZnVu
Y3Rpb24oaWRzKQotICAgIHsKLSAgICAgICAgdmFyIGRpcnR5VGFicyA9IFtdOwotICAgICAgICB2
YXIgY2xlYW5UYWJzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgaWQgPSBpZHNbaV07Ci0gICAgICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlID0gdGhpcy5fZmlsZXNbaWRdOwotICAgICAgICAgICAgaWYgKHVpU291cmNl
Q29kZS5pc0RpcnR5KCkpCi0gICAgICAgICAgICAgICAgZGlydHlUYWJzLnB1c2goaWQpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNsZWFuVGFicy5wdXNoKGlkKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoZGlydHlUYWJzLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuX3Rh
YmJlZFBhbmUuc2VsZWN0VGFiKGRpcnR5VGFic1swXSwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuX3Rh
YmJlZFBhbmUuY2xvc2VUYWJzKGNsZWFuVGFicywgdHJ1ZSk7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZGlydHlUYWJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbmV4dFRh
YklkID0gaSArIDEgPCBkaXJ0eVRhYnMubGVuZ3RoID8gZGlydHlUYWJzW2kgKyAxXSA6IG51bGw7
Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlQ2xvc2VUYWIoZGlydHlUYWJzW2ldLCBuZXh0
VGFiSWQpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VD
b2RlCi0gICAgICovCi0gICAgYWRkVUlTb3VyY2VDb2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fdXNlclNlbGVjdGVkRmlsZXMgfHwgdGhpcy5fbG9h
ZGVkVVJJc1t1aVNvdXJjZUNvZGUudXJpKCldKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB0aGlzLl9sb2FkZWRVUklzW3VpU291cmNlQ29kZS51cmkoKV0gPSB0cnVlOwotCi0gICAgICAg
IHZhciBpbmRleCA9IHRoaXMuX2hpc3RvcnkuaW5kZXgodWlTb3VyY2VDb2RlLnVyaSgpKQotICAg
ICAgICBpZiAoaW5kZXggPT09IC0xKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciB0YWJJZCA9IHRoaXMuX3RhYklkcy5nZXQodWlTb3VyY2VDb2RlKSB8fCB0aGlzLl9hcHBlbmRG
aWxlVGFiKHVpU291cmNlQ29kZSwgZmFsc2UpOwotCi0gICAgICAgIGlmICghdGhpcy5fY3VycmVu
dEZpbGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gU2VsZWN0IHRhYiBpZiB0
aGlzIGZpbGUgd2FzIHRoZSBsYXN0IHRvIGJlIHNob3duLgotICAgICAgICBpZiAoIWluZGV4KSB7
Ci0gICAgICAgICAgICB0aGlzLl9pbm5lclNob3dGaWxlKHVpU291cmNlQ29kZSwgZmFsc2UpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRQcm9q
ZWN0VHlwZSA9IHRoaXMuX2N1cnJlbnRGaWxlLnByb2plY3QoKS50eXBlKCk7Ci0gICAgICAgIHZh
ciBhZGRlZFByb2plY3RUeXBlID0gdWlTb3VyY2VDb2RlLnByb2plY3QoKS50eXBlKCk7Ci0gICAg
ICAgIHZhciBzbmlwcGV0c1Byb2plY3RUeXBlID0gV2ViSW5zcGVjdG9yLnByb2plY3RUeXBlcy5T
bmlwcGV0czsKLSAgICAgICAgaWYgKHRoaXMuX2hpc3RvcnkuaW5kZXgodGhpcy5fY3VycmVudEZp
bGUudXJpKCkpICYmIGN1cnJlbnRQcm9qZWN0VHlwZSA9PT0gc25pcHBldHNQcm9qZWN0VHlwZSAm
JiBhZGRlZFByb2plY3RUeXBlICE9PSBzbmlwcGV0c1Byb2plY3RUeXBlKQotICAgICAgICAgICAg
dGhpcy5faW5uZXJTaG93RmlsZSh1aVNvdXJjZUNvZGUsIGZhbHNlKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNv
ZGUKLSAgICAgKi8KLSAgICByZW1vdmVVSVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHVpU291cmNlQ29k
ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVtb3ZlVUlTb3VyY2VDb2RlcyhbdWlTb3VyY2VDb2Rl
XSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rv
ci5VSVNvdXJjZUNvZGU+fSB1aVNvdXJjZUNvZGVzCi0gICAgICovCi0gICAgcmVtb3ZlVUlTb3Vy
Y2VDb2RlczogZnVuY3Rpb24odWlTb3VyY2VDb2RlcykKLSAgICB7Ci0gICAgICAgIHZhciB0YWJJ
ZHMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aVNvdXJjZUNvZGVzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2Rlc1tp
XTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sb2FkZWRVUklzW3VpU291cmNlQ29kZS51cmko
KV07Ci0gICAgICAgICAgICB2YXIgdGFiSWQgPSB0aGlzLl90YWJJZHMuZ2V0KHVpU291cmNlQ29k
ZSk7Ci0gICAgICAgICAgICBpZiAodGFiSWQpCi0gICAgICAgICAgICAgICAgdGFiSWRzLnB1c2go
dGFiSWQpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3RhYmJlZFBhbmUuY2xvc2VUYWJzKHRh
Yklkcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJ
U291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX2VkaXRvckNsb3NlZEJ5VXNl
ckFjdGlvbjogZnVuY3Rpb24odWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgdGhpcy5fdXNl
clNlbGVjdGVkRmlsZXMgPSB0cnVlOwotICAgICAgICB0aGlzLl9oaXN0b3J5LnJlbW92ZSh1aVNv
dXJjZUNvZGUudXJpKCkpOwotICAgICAgICB0aGlzLl91cGRhdGVIaXN0b3J5KCk7Ci0gICAgfSwK
LQotICAgIF9lZGl0b3JTZWxlY3RlZEJ5VXNlckFjdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fdXNlclNlbGVjdGVkRmlsZXMgPSB0cnVlOwotICAgICAgICB0aGlzLl91cGRh
dGVIaXN0b3J5KCk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVIaXN0b3J5OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB2YXIgdGFiSWRzID0gdGhpcy5fdGFiYmVkUGFuZS5sYXN0T3BlbmVkVGFi
SWRzKFdlYkluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIubWF4aW1hbFByZXZpb3VzbHlW
aWV3ZWRGaWxlc0NvdW50KTsKLSAgICAgICAgCi0gICAgICAgIGZ1bmN0aW9uIHRhYklkVG9VUkko
dGFiSWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlc1t0YWJJZF0u
dXJpKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRoaXMuX2hpc3RvcnkudXBkYXRl
KHRhYklkcy5tYXAodGFiSWRUb1VSSS5iaW5kKHRoaXMpKSk7Ci0gICAgICAgIHRoaXMuX2hpc3Rv
cnkuc2F2ZSh0aGlzLl9wcmV2aW91c2x5Vmlld2VkRmlsZXNTZXR0aW5nKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJj
ZUNvZGUKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgX3Rvb2x0aXBGb3JG
aWxlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdWlTb3Vy
Y2VDb2RlLm9yaWdpblVSTCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbj19IHVzZXJHZXN0dXJlCi0gICAgICovCi0gICAgX2FwcGVuZEZpbGVUYWI6IGZ1bmN0aW9u
KHVpU291cmNlQ29kZSwgdXNlckdlc3R1cmUpCi0gICAgewotICAgICAgICB2YXIgdmlldyA9IHRo
aXMuX2RlbGVnYXRlLnZpZXdGb3JGaWxlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIHZhciB0aXRs
ZSA9IHRoaXMuX3RpdGxlRm9yRmlsZSh1aVNvdXJjZUNvZGUpOwotICAgICAgICB2YXIgdG9vbHRp
cCA9IHRoaXMuX3Rvb2x0aXBGb3JGaWxlKHVpU291cmNlQ29kZSk7Ci0KLSAgICAgICAgdmFyIHRh
YklkID0gdGhpcy5fZ2VuZXJhdGVUYWJJZCgpOwotICAgICAgICB0aGlzLl90YWJJZHMucHV0KHVp
U291cmNlQ29kZSwgdGFiSWQpOwotICAgICAgICB0aGlzLl9maWxlc1t0YWJJZF0gPSB1aVNvdXJj
ZUNvZGU7Ci0KLSAgICAgICAgdmFyIHNhdmVkU2Nyb2xsTGluZU51bWJlciA9IHRoaXMuX2hpc3Rv
cnkuc2Nyb2xsTGluZU51bWJlcih1aVNvdXJjZUNvZGUudXJpKCkpOwotICAgICAgICBpZiAoc2F2
ZWRTY3JvbGxMaW5lTnVtYmVyKQotICAgICAgICAgICAgdmlldy5zY3JvbGxUb0xpbmUoc2F2ZWRT
Y3JvbGxMaW5lTnVtYmVyKTsKLSAgICAgICAgdmFyIHNhdmVkU2VsZWN0aW9uUmFuZ2UgPSB0aGlz
Ll9oaXN0b3J5LnNlbGVjdGlvblJhbmdlKHVpU291cmNlQ29kZS51cmkoKSk7Ci0gICAgICAgIGlm
IChzYXZlZFNlbGVjdGlvblJhbmdlKQotICAgICAgICAgICAgdmlldy5zZXRTZWxlY3Rpb24oc2F2
ZWRTZWxlY3Rpb25SYW5nZSk7Ci0KLSAgICAgICAgdGhpcy5fdGFiYmVkUGFuZS5hcHBlbmRUYWIo
dGFiSWQsIHRpdGxlLCB2aWV3LCB0b29sdGlwLCB1c2VyR2VzdHVyZSk7Ci0KLSAgICAgICAgdGhp
cy5fYWRkVUlTb3VyY2VDb2RlTGlzdGVuZXJzKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIHJldHVy
biB0YWJJZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
RXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX3RhYkNsb3NlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgdGFiSWQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGV2ZW50LmRh
dGEudGFiSWQpOwotICAgICAgICB2YXIgdXNlckdlc3R1cmUgPSAvKiogQHR5cGUge2Jvb2xlYW59
ICovIChldmVudC5kYXRhLmlzVXNlckdlc3R1cmUpOwotCi0gICAgICAgIHZhciB1aVNvdXJjZUNv
ZGUgPSB0aGlzLl9maWxlc1t0YWJJZF07Ci0gICAgICAgIGlmICh0aGlzLl9jdXJyZW50RmlsZSA9
PT0gdWlTb3VyY2VDb2RlKSB7Ci0gICAgICAgICAgICB0aGlzLl9yZW1vdmVTY3JvbGxBbmRTZWxl
Y3Rpb25MaXN0ZW5lcnMoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50VmlldzsK
LSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50RmlsZTsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLl90YWJJZHMucmVtb3ZlKHVpU291cmNlQ29kZSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlz
Ll9maWxlc1t0YWJJZF07Ci0KLSAgICAgICAgdGhpcy5fcmVtb3ZlVUlTb3VyY2VDb2RlTGlzdGVu
ZXJzKHVpU291cmNlQ29kZSk7Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5FdmVudHMuRWRpdG9yQ2xvc2Vk
LCB1aVNvdXJjZUNvZGUpOwotCi0gICAgICAgIGlmICh1c2VyR2VzdHVyZSkKLSAgICAgICAgICAg
IHRoaXMuX2VkaXRvckNsb3NlZEJ5VXNlckFjdGlvbih1aVNvdXJjZUNvZGUpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAg
Ki8KLSAgICBfdGFiU2VsZWN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFy
IHRhYklkID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChldmVudC5kYXRhLnRhYklkKTsKLSAgICAg
ICAgdmFyIHVzZXJHZXN0dXJlID0gLyoqIEB0eXBlIHtib29sZWFufSAqLyAoZXZlbnQuZGF0YS5p
c1VzZXJHZXN0dXJlKTsKLQotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fZmlsZXNb
dGFiSWRdOwotICAgICAgICB0aGlzLl9pbm5lclNob3dGaWxlKHVpU291cmNlQ29kZSwgdXNlckdl
c3R1cmUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqLwotICAgIF9hZGRVSVNvdXJjZUNvZGVM
aXN0ZW5lcnM6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIHVpU291cmNl
Q29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLlRp
dGxlQ2hhbmdlZCwgdGhpcy5fdWlTb3VyY2VDb2RlVGl0bGVDaGFuZ2VkLCB0aGlzKTsKLSAgICAg
ICAgdWlTb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZS5FdmVudHMuV29ya2luZ0NvcHlDaGFuZ2VkLCB0aGlzLl91aVNvdXJjZUNvZGVXb3JraW5nQ29w
eUNoYW5nZWQsIHRoaXMpOwotICAgICAgICB1aVNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29weUNvbW1pdHRlZCwgdGhp
cy5fdWlTb3VyY2VDb2RlV29ya2luZ0NvcHlDb21taXR0ZWQsIHRoaXMpOwotICAgICAgICB1aVNv
dXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50
cy5Gb3JtYXR0ZWRDaGFuZ2VkLCB0aGlzLl91aVNvdXJjZUNvZGVGb3JtYXR0ZWRDaGFuZ2VkLCB0
aGlzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBfcmVtb3ZlVUlTb3VyY2VDb2Rl
TGlzdGVuZXJzOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB1aVNvdXJj
ZUNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50
cy5UaXRsZUNoYW5nZWQsIHRoaXMuX3VpU291cmNlQ29kZVRpdGxlQ2hhbmdlZCwgdGhpcyk7Ci0g
ICAgICAgIHVpU291cmNlQ29kZS5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGUuRXZlbnRzLldvcmtpbmdDb3B5Q2hhbmdlZCwgdGhpcy5fdWlTb3VyY2VDb2RlV29y
a2luZ0NvcHlDaGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgdWlTb3VyY2VDb2RlLnJlbW92ZUV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuV29ya2luZ0NvcHlDb21t
aXR0ZWQsIHRoaXMuX3VpU291cmNlQ29kZVdvcmtpbmdDb3B5Q29tbWl0dGVkLCB0aGlzKTsKLSAg
ICAgICAgdWlTb3VyY2VDb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291
cmNlQ29kZS5FdmVudHMuRm9ybWF0dGVkQ2hhbmdlZCwgdGhpcy5fdWlTb3VyY2VDb2RlRm9ybWF0
dGVkQ2hhbmdlZCwgdGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAgICovCi0gICAgX3VwZGF0
ZUZpbGVUaXRsZTogZnVuY3Rpb24odWlTb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgdmFyIHRh
YklkID0gdGhpcy5fdGFiSWRzLmdldCh1aVNvdXJjZUNvZGUpOwotICAgICAgICBpZiAodGFiSWQp
IHsKLSAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuX3RpdGxlRm9yRmlsZSh1aVNvdXJjZUNv
ZGUpOwotICAgICAgICAgICAgdGhpcy5fdGFiYmVkUGFuZS5jaGFuZ2VUYWJUaXRsZSh0YWJJZCwg
dGl0bGUpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF91aVNvdXJjZUNvZGVUaXRsZUNoYW5n
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IC8q
KiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gKi8gKGV2ZW50LnRhcmdldCk7Ci0g
ICAgICAgIHRoaXMuX3VwZGF0ZUZpbGVUaXRsZSh1aVNvdXJjZUNvZGUpOwotICAgIH0sCi0KLSAg
ICBfdWlTb3VyY2VDb2RlV29ya2luZ0NvcHlDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGV9ICovIChldmVudC50YXJnZXQpOwotICAgICAgICB0aGlzLl91cGRhdGVGaWxlVGl0
bGUodWlTb3VyY2VDb2RlKTsKLSAgICB9LAotCi0gICAgX3VpU291cmNlQ29kZVdvcmtpbmdDb3B5
Q29tbWl0dGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNv
ZGUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIChldmVudC50YXJn
ZXQpOwotICAgICAgICB0aGlzLl91cGRhdGVGaWxlVGl0bGUodWlTb3VyY2VDb2RlKTsKLSAgICB9
LAotCi0gICAgX3VpU291cmNlQ29kZUZvcm1hdHRlZENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZX0gKi8gKGV2ZW50LnRhcmdldCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUZp
bGVUaXRsZSh1aVNvdXJjZUNvZGUpOwotICAgIH0sCi0KLSAgICByZXNldDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3VzZXJTZWxlY3RlZEZpbGVzOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgX2dlbmVyYXRl
VGFiSWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAidGFiXyIgKyAoV2ViSW5z
cGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5fdGFiSWQrKyk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29k
ZQotICAgICAqLwotICAgIGN1cnJlbnRGaWxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fY3VycmVudEZpbGU7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBw
YXJhbSB7c3RyaW5nfSB1cmwKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZT19IHNl
bGVjdGlvblJhbmdlCi0gKiBAcGFyYW0ge251bWJlcj19IHNjcm9sbExpbmVOdW1iZXIKLSAqLwot
V2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5IaXN0b3J5SXRlbSA9IGZ1bmN0aW9u
KHVybCwgc2VsZWN0aW9uUmFuZ2UsIHNjcm9sbExpbmVOdW1iZXIpCi17Ci0gICAgLyoqIEBjb25z
dCAqLyB0aGlzLnVybCA9IHVybDsKLSAgICAvKiogQGNvbnN0ICovIHRoaXMuX2lzU2VyaWFsaXph
YmxlID0gdXJsLmxlbmd0aCA8IFdlYkluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIuSGlz
dG9yeUl0ZW0uc2VyaWFsaXphYmxlVXJsTGVuZ3RoTGltaXQ7Ci0gICAgdGhpcy5zZWxlY3Rpb25S
YW5nZSA9IHNlbGVjdGlvblJhbmdlOwotICAgIHRoaXMuc2Nyb2xsTGluZU51bWJlciA9IHNjcm9s
bExpbmVOdW1iZXI7Ci19Ci0KLVdlYkluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIuSGlz
dG9yeUl0ZW0uc2VyaWFsaXphYmxlVXJsTGVuZ3RoTGltaXQgPSA0MDk2OwotCi0vKioKLSAqIEBw
YXJhbSB7T2JqZWN0fSBzZXJpYWxpemVkSGlzdG9yeUl0ZW0KLSAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIuSGlzdG9yeUl0ZW19Ci0gKi8KLVdlYkluc3BlY3Rv
ci5UYWJiZWRFZGl0b3JDb250YWluZXIuSGlzdG9yeUl0ZW0uZnJvbU9iamVjdCA9IGZ1bmN0aW9u
IChzZXJpYWxpemVkSGlzdG9yeUl0ZW0pCi17Ci0gICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2Vy
aWFsaXplZEhpc3RvcnlJdGVtLnNlbGVjdGlvblJhbmdlID8gV2ViSW5zcGVjdG9yLlRleHRSYW5n
ZS5mcm9tT2JqZWN0KHNlcmlhbGl6ZWRIaXN0b3J5SXRlbS5zZWxlY3Rpb25SYW5nZSkgOiBudWxs
OwotICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5IaXN0
b3J5SXRlbShzZXJpYWxpemVkSGlzdG9yeUl0ZW0udXJsLCBzZWxlY3Rpb25SYW5nZSwgc2VyaWFs
aXplZEhpc3RvcnlJdGVtLnNjcm9sbExpbmVOdW1iZXIpOwotfQotCi1XZWJJbnNwZWN0b3IuVGFi
YmVkRWRpdG9yQ29udGFpbmVyLkhpc3RvcnlJdGVtLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHs/T2JqZWN0fQotICAgICAqLwotICAgIHNlcmlhbGl6ZVRvT2JqZWN0OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2lzU2VyaWFsaXphYmxlKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBzZXJpYWxpemVkSGlzdG9yeUl0ZW0g
PSB7fTsKLSAgICAgICAgc2VyaWFsaXplZEhpc3RvcnlJdGVtLnVybCA9IHRoaXMudXJsOwotICAg
ICAgICBzZXJpYWxpemVkSGlzdG9yeUl0ZW0uc2VsZWN0aW9uUmFuZ2UgPSB0aGlzLnNlbGVjdGlv
blJhbmdlOwotICAgICAgICBzZXJpYWxpemVkSGlzdG9yeUl0ZW0uc2Nyb2xsTGluZU51bWJlciA9
IHRoaXMuc2Nyb2xsTGluZU51bWJlcjsKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRIaXN0b3J5
SXRlbTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3Rv
dHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtBcnJheS48V2ViSW5z
cGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5IaXN0b3J5SXRlbT59IGl0ZW1zCi0gKi8KLVdl
Ykluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIuSGlzdG9yeSA9IGZ1bmN0aW9uKGl0ZW1z
KQotewotICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7Ci0gICAgdGhpcy5fcmVidWlsZEl0ZW1JbmRl
eCgpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IUFycmF5LjwhT2JqZWN0Pn0gc2VyaWFsaXplZEhp
c3RvcnkKLSAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWluZXIuSGlz
dG9yeX0KLSAqLwotV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5IaXN0b3J5LmZy
b21PYmplY3QgPSBmdW5jdGlvbihzZXJpYWxpemVkSGlzdG9yeSkKLXsKLSAgICB2YXIgaXRlbXMg
PSBbXTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRIaXN0b3J5Lmxlbmd0aDsg
KytpKQotICAgICAgICBpdGVtcy5wdXNoKFdlYkluc3BlY3Rvci5UYWJiZWRFZGl0b3JDb250YWlu
ZXIuSGlzdG9yeUl0ZW0uZnJvbU9iamVjdChzZXJpYWxpemVkSGlzdG9yeVtpXSkpOwotICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5IaXN0b3J5KGl0ZW1z
KTsKLX0KLQotV2ViSW5zcGVjdG9yLlRhYmJlZEVkaXRvckNvbnRhaW5lci5IaXN0b3J5LnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHJl
dHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGluZGV4OiBmdW5jdGlvbih1cmwpCi0gICAgewot
ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pdGVtc0luZGV4W3VybF07Ci0gICAgICAgIGlmICh0
eXBlb2YgaW5kZXggPT09ICJudW1iZXIiKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgfSwKLQotICAgIF9yZWJ1aWxkSXRlbUluZGV4OiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9pdGVtc0luZGV4ID0ge307Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5faXRlbXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCF0aGlzLl9pdGVtc0luZGV4Lmhhc093blByb3BlcnR5KHRoaXMuX2l0ZW1z
W2ldLnVybCkpOwotICAgICAgICAgICAgdGhpcy5faXRlbXNJbmRleFt0aGlzLl9pdGVtc1tpXS51
cmxdID0gaTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gdXJsCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZXx1bmRlZmlu
ZWR9Ci0gICAgICovCi0gICAgc2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0g
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgodXJsKTsKLSAgICAgICAgcmV0dXJuIGluZGV4
ICE9PSAtMSA/IHRoaXMuX2l0ZW1zW2luZGV4XS5zZWxlY3Rpb25SYW5nZSA6IHVuZGVmaW5lZDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gc2VsZWN0aW9uUmFuZ2UKLSAgICAgKi8KLSAg
ICB1cGRhdGVTZWxlY3Rpb25SYW5nZTogZnVuY3Rpb24odXJsLCBzZWxlY3Rpb25SYW5nZSkKLSAg
ICB7Ci0gICAgICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgodXJsKTsKLSAgICAgICAgaWYgKGluZGV4ID09
PSAtMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5faXRlbXNbaW5kZXhdLnNl
bGVjdGlvblJhbmdlID0gc2VsZWN0aW9uUmFuZ2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ8dW5kZWZpbmVkfQot
ICAgICAqLwotICAgIHNjcm9sbExpbmVOdW1iZXI6IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgodXJsKTsKLSAgICAgICAgcmV0dXJuIGluZGV4ICE9
PSAtMSA/IHRoaXMuX2l0ZW1zW2luZGV4XS5zY3JvbGxMaW5lTnVtYmVyIDogdW5kZWZpbmVkOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IHNjcm9sbExpbmVOdW1iZXIKLSAgICAgKi8KLSAgICB1cGRhdGVTY3JvbGxM
aW5lTnVtYmVyOiBmdW5jdGlvbih1cmwsIHNjcm9sbExpbmVOdW1iZXIpCi0gICAgewotICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLmluZGV4KHVybCk7Ci0gICAgICAgIGlmIChpbmRleCA9PT0gLTEp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2l0ZW1zW2luZGV4XS5zY3JvbGxM
aW5lTnVtYmVyID0gc2Nyb2xsTGluZU51bWJlcjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtBcnJheS48c3RyaW5nPn0gdXJscwotICAgICAqLwotICAgIHVwZGF0ZTogZnVuY3Rp
b24odXJscykKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSB1cmxzLmxlbmd0aCAtIDE7IGkg
Pj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4KHVybHNbaV0p
OwotICAgICAgICAgICAgdmFyIGl0ZW07Ci0gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7
Ci0gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuX2l0ZW1zW2luZGV4XTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9pdGVtcy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuVGFiYmVkRWRpdG9yQ29udGFp
bmVyLkhpc3RvcnlJdGVtKHVybHNbaV0pOwotICAgICAgICAgICAgdGhpcy5faXRlbXMudW5zaGlm
dChpdGVtKTsKLSAgICAgICAgICAgIHRoaXMuX3JlYnVpbGRJdGVtSW5kZXgoKTsKLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICov
Ci0gICAgcmVtb3ZlOiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICB2YXIgaW5kZXggPSB0
aGlzLmluZGV4KHVybCk7Ci0gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKLSAgICAgICAgICAg
IHRoaXMuX2l0ZW1zLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgICAgICB0aGlzLl9yZWJ1aWxk
SXRlbUluZGV4KCk7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIAotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlNldHRpbmd9IHNldHRpbmcKLSAgICAgKi8KLSAgICBzYXZlOiBm
dW5jdGlvbihzZXR0aW5nKQotICAgIHsKLSAgICAgICAgc2V0dGluZy5zZXQodGhpcy5fc2VyaWFs
aXplVG9PYmplY3QoKSk7Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHsh
QXJyYXkuPCFPYmplY3Q+fQotICAgICAqLwotICAgIF9zZXJpYWxpemVUb09iamVjdDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdmFyIHNlcmlhbGl6ZWRIaXN0b3J5ID0gW107Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faXRlbXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIHZhciBzZXJpYWxpemVkSXRlbSA9IHRoaXMuX2l0ZW1zW2ldLnNlcmlhbGl6ZVRvT2JqZWN0
KCk7Ci0gICAgICAgICAgICBpZiAoc2VyaWFsaXplZEl0ZW0pCi0gICAgICAgICAgICAgICAgc2Vy
aWFsaXplZEhpc3RvcnkucHVzaChzZXJpYWxpemVkSXRlbSk7Ci0gICAgICAgICAgICBpZiAoc2Vy
aWFsaXplZEhpc3RvcnkubGVuZ3RoID09PSBXZWJJbnNwZWN0b3IuVGFiYmVkRWRpdG9yQ29udGFp
bmVyLm1heGltYWxQcmV2aW91c2x5Vmlld2VkRmlsZXNDb3VudCkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc2VyaWFsaXplZEhpc3Rvcnk7Ci0gICAg
fSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuVGFiYmVk
UGFuZVRhYkRlbGVnYXRlfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGFiYmVkRWRpdG9yQ29u
dGFpbmVyfSBlZGl0b3JDb250YWluZXIKLSAqLwotV2ViSW5zcGVjdG9yLkVkaXRvckNvbnRhaW5l
clRhYkRlbGVnYXRlID0gZnVuY3Rpb24oZWRpdG9yQ29udGFpbmVyKQotewotICAgIHRoaXMuX2Vk
aXRvckNvbnRhaW5lciA9IGVkaXRvckNvbnRhaW5lcjsKLX0KLQotV2ViSW5zcGVjdG9yLkVkaXRv
ckNvbnRhaW5lclRhYkRlbGVnYXRlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5UYWJiZWRQYW5lfSB0YWJiZWRQYW5lCi0gICAgICogQHBhcmFtIHtB
cnJheS48c3RyaW5nPn0gaWRzCi0gICAgICovCi0gICAgY2xvc2VUYWJzOiBmdW5jdGlvbih0YWJi
ZWRQYW5lLCBpZHMpCi0gICAgewotICAgICAgICB0aGlzLl9lZGl0b3JDb250YWluZXIuX2Nsb3Nl
VGFicyhpZHMpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGFiYmVkUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvVGFiYmVkUGFuZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ0NjQx
Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RhYmJl
ZFBhbmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4NjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5WaWV3fQotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5U
YWJiZWRQYW5lID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhp
cyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJ0YWJiZWRQYW5lLmNzcyIpOwotICAg
IHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0YWJiZWQtcGFuZSIpOwotICAgIHRoaXMuX2hl
YWRlckVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJ0YWJiZWQtcGFu
ZS1oZWFkZXIiKTsKLSAgICB0aGlzLl9oZWFkZXJDb250ZW50c0VsZW1lbnQgPSB0aGlzLl9oZWFk
ZXJFbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAidGFiYmVkLXBhbmUtaGVhZGVyLWNvbnRlbnRz
Iik7Ci0gICAgdGhpcy5fdGFic0VsZW1lbnQgPSB0aGlzLl9oZWFkZXJDb250ZW50c0VsZW1lbnQu
Y3JlYXRlQ2hpbGQoImRpdiIsICJ0YWJiZWQtcGFuZS1oZWFkZXItdGFicyIpOwotICAgIHRoaXMu
X2NvbnRlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAidGFiYmVk
LXBhbmUtY29udGVudCBzY3JvbGwtdGFyZ2V0Iik7Ci0gICAgdGhpcy5fdGFicyA9IFtdOwotICAg
IHRoaXMuX3RhYnNIaXN0b3J5ID0gW107Ci0gICAgdGhpcy5fdGFic0J5SWQgPSB7fTsKLSAgICB0
aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmZvY3VzLmJpbmQodGhp
cyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIs
IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX2Ryb3BEb3du
QnV0dG9uID0gdGhpcy5fY3JlYXRlRHJvcERvd25CdXR0b24oKTsKLX0KLQotV2ViSW5zcGVjdG9y
LlRhYmJlZFBhbmUuRXZlbnRUeXBlcyA9IHsKLSAgICBUYWJTZWxlY3RlZDogIlRhYlNlbGVjdGVk
IiwKLSAgICBUYWJDbG9zZWQ6ICJUYWJDbG9zZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5UYWJiZWRQ
YW5lLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
Vmlld30KLSAgICAgKi8KLSAgICBnZXQgdmlzaWJsZVZpZXcoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2N1cnJlbnRUYWIgPyB0aGlzLl9jdXJyZW50VGFiLnZpZXcgOiBudWxsOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0
IHNlbGVjdGVkVGFiSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUYWIg
PyB0aGlzLl9jdXJyZW50VGFiLmlkIDogbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHR5cGUge2Jvb2xlYW59IHNocmlua2FibGVUYWJzCi0gICAgICovCi0gICAgc2V0IHNocmlua2Fi
bGVUYWJzKHNocmlua2FibGVUYWJzKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2hyaW5rYWJsZVRh
YnMgPSBzaHJpbmthYmxlVGFiczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHR5cGUge2Jv
b2xlYW59IHZlcnRpY2FsVGFiTGF5b3V0Ci0gICAgICovCi0gICAgc2V0IHZlcnRpY2FsVGFiTGF5
b3V0KHZlcnRpY2FsVGFiTGF5b3V0KQotICAgIHsKLSAgICAgICAgdGhpcy5fdmVydGljYWxUYWJM
YXlvdXQgPSB2ZXJ0aWNhbFRhYkxheW91dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHR5
cGUge2Jvb2xlYW59IHNocmlua2FibGVUYWJzCi0gICAgICovCi0gICAgc2V0IGNsb3NlYWJsZVRh
YnMoY2xvc2VhYmxlVGFicykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Nsb3NlYWJsZVRhYnMgPSBj
bG9zZWFibGVUYWJzOwotICAgIH0sCi0KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVWaWV3ID8gdGhpcy52aXNp
YmxlVmlldy5kZWZhdWx0Rm9jdXNlZEVsZW1lbnQoKSA6IG51bGw7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRhYmJlZFBhbmVUYWJEZWxlZ2F0ZX0gZGVs
ZWdhdGUKLSAgICAgKi8KLSAgICBzZXRUYWJEZWxlZ2F0ZTogZnVuY3Rpb24oZGVsZWdhdGUpCi0g
ICAgewotICAgICAgICB2YXIgdGFicyA9IHRoaXMuX3RhYnMuc2xpY2UoKTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFic1tpXS5z
ZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICov
Ci0gICAgb25Nb3VzZVVwOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
aXMgbmVlZGVkIHRvIHByZXZlbnQgbWlkZGxlLWNsaWNrIHBhc3Rpbmcgb24gbGludXggd2hlbiB0
YWJzIGFyZSBjbGlja2VkLgotICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAxKQotICAgICAg
ICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhYlRpdGxlCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVmlld30gdmlldwotICAgICAqIEBwYXJhbSB7c3RyaW5nPX0g
dGFiVG9vbHRpcAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVzZXJHZXN0dXJlCi0gICAgICov
Ci0gICAgYXBwZW5kVGFiOiBmdW5jdGlvbihpZCwgdGFiVGl0bGUsIHZpZXcsIHRhYlRvb2x0aXAs
IHVzZXJHZXN0dXJlKQotICAgIHsKLSAgICAgICAgdmFyIHRhYiA9IG5ldyBXZWJJbnNwZWN0b3Iu
VGFiYmVkUGFuZVRhYih0aGlzLCBpZCwgdGFiVGl0bGUsIHRoaXMuX2Nsb3NlYWJsZVRhYnMsIHZp
ZXcsIHRhYlRvb2x0aXApOwotICAgICAgICB0YWIuc2V0RGVsZWdhdGUodGhpcy5fZGVsZWdhdGUp
OwotICAgICAgICB0aGlzLl90YWJzQnlJZFtpZF0gPSB0YWI7Ci0KLSAgICAgICAgdGhpcy5fdGFi
cy5wdXNoKHRhYik7Ci0gICAgICAgIHRoaXMuX3RhYnNIaXN0b3J5LnB1c2godGFiKTsKLQotICAg
ICAgICBpZiAodGhpcy5fdGFic0hpc3RvcnlbMF0gPT09IHRhYikKLSAgICAgICAgICAgIHRoaXMu
c2VsZWN0VGFiKHRhYi5pZCwgdXNlckdlc3R1cmUpOwotCi0gICAgICAgIHRoaXMuX3VwZGF0ZVRh
YkVsZW1lbnRzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBp
ZAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVzZXJHZXN0dXJlCi0gICAgICovCi0gICAgY2xv
c2VUYWI6IGZ1bmN0aW9uKGlkLCB1c2VyR2VzdHVyZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuY2xv
c2VUYWJzKFtpZF0sIHVzZXJHZXN0dXJlKTsKLSAgICB9LAotCi0gICAgIC8qKgotICAgICAgKiBA
cGFyYW0ge0FycmF5LjxzdHJpbmc+fSBpZHMKLSAgICAgICogQHBhcmFtIHtib29sZWFuPX0gdXNl
ckdlc3R1cmUKLSAgICAgICovCi0gICAgIGNsb3NlVGFiczogZnVuY3Rpb24oaWRzLCB1c2VyR2Vz
dHVyZSkKLSAgICAgewotICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICAgdGhpcy5faW5uZXJDbG9zZVRhYihpZHNbaV0sIHVzZXJHZXN0dXJl
KTsKLSAgICAgICAgIHRoaXMuX3VwZGF0ZVRhYkVsZW1lbnRzKCk7Ci0gICAgICAgICBpZiAodGhp
cy5fdGFic0hpc3RvcnkubGVuZ3RoKQotICAgICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKHRoaXMu
X3RhYnNIaXN0b3J5WzBdLmlkLCB1c2VyR2VzdHVyZSk7Ci0gICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB1c2VyR2Vz
dHVyZQotICAgICAqLwotICAgIF9pbm5lckNsb3NlVGFiOiBmdW5jdGlvbihpZCwgdXNlckdlc3R1
cmUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY3VycmVudFRhYiAmJiB0aGlzLl9jdXJyZW50
VGFiLmlkID09PSBpZCkKLSAgICAgICAgICAgIHRoaXMuX2hpZGVDdXJyZW50VGFiKCk7Ci0KLSAg
ICAgICAgdmFyIHRhYiA9IHRoaXMuX3RhYnNCeUlkW2lkXTsKLSAgICAgICAgZGVsZXRlIHRoaXMu
X3RhYnNCeUlkW2lkXTsKLQotICAgICAgICB0aGlzLl90YWJzSGlzdG9yeS5zcGxpY2UodGhpcy5f
dGFic0hpc3RvcnkuaW5kZXhPZih0YWIpLCAxKTsKLSAgICAgICAgdGhpcy5fdGFicy5zcGxpY2Uo
dGhpcy5fdGFicy5pbmRleE9mKHRhYiksIDEpOwotICAgICAgICBpZiAodGFiLl9zaG93bikKLSAg
ICAgICAgICAgIHRoaXMuX2hpZGVUYWJFbGVtZW50KHRhYik7Ci0KLSAgICAgICAgdmFyIGV2ZW50
RGF0YSA9IHsgdGFiSWQ6IGlkLCB2aWV3OiB0YWIudmlldywgaXNVc2VyR2VzdHVyZTogdXNlckdl
c3R1cmUgfTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlRhYmJlZFBhbmUuRXZlbnRUeXBlcy5UYWJDbG9zZWQsIGV2ZW50RGF0YSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48
c3RyaW5nPn0KLSAgICAgKi8KLSAgICBhbGxUYWJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIHZhciB0YWJzID0gdGhpcy5fdGFicy5zbGljZSgp
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICByZXN1bHQucHVzaCh0YWJzW2ldLmlkKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gICAgICogQHJldHVy
biB7QXJyYXkuPHN0cmluZz59Ci0gICAgICovCi0gICAgb3RoZXJUYWJzOiBmdW5jdGlvbihpZCkK
LSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgdmFyIHRhYnMgPSB0aGlz
Ll90YWJzLnNsaWNlKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgaWYgKHRhYnNbaV0uaWQgIT09IGlkKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKHRhYnNbaV0uaWQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVzZXJHZXN0dXJlCi0gICAgICovCi0gICAgc2VsZWN0VGFi
OiBmdW5jdGlvbihpZCwgdXNlckdlc3R1cmUpCi0gICAgewotICAgICAgICB2YXIgdGFiID0gdGhp
cy5fdGFic0J5SWRbaWRdOwotICAgICAgICBpZiAoIXRhYikKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUYWIgJiYgdGhpcy5fY3VycmVudFRhYi5pZCA9PT0g
aWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGlkZUN1cnJlbnRUYWIo
KTsKLSAgICAgICAgdGhpcy5fc2hvd1RhYih0YWIpOwotICAgICAgICB0aGlzLl9jdXJyZW50VGFi
ID0gdGFiOwotICAgICAgICAKLSAgICAgICAgdGhpcy5fdGFic0hpc3Rvcnkuc3BsaWNlKHRoaXMu
X3RhYnNIaXN0b3J5LmluZGV4T2YodGFiKSwgMSk7Ci0gICAgICAgIHRoaXMuX3RhYnNIaXN0b3J5
LnNwbGljZSgwLCAwLCB0YWIpOwotICAgICAgICAKLSAgICAgICAgdGhpcy5fdXBkYXRlVGFiRWxl
bWVudHMoKTsKLQotICAgICAgICB2YXIgZXZlbnREYXRhID0geyB0YWJJZDogaWQsIHZpZXc6IHRh
Yi52aWV3LCBpc1VzZXJHZXN0dXJlOiB1c2VyR2VzdHVyZSB9OwotICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGFiYmVkUGFuZS5FdmVudFR5cGVzLlRh
YlNlbGVjdGVkLCBldmVudERhdGEpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRhYnNDb3VudAotICAgICAqIEByZXR1cm4g
e0FycmF5LjxzdHJpbmc+fQotICAgICAqLwotICAgIGxhc3RPcGVuZWRUYWJJZHM6IGZ1bmN0aW9u
KHRhYnNDb3VudCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHRhYlRvVGFiSWQodGFiKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gdGFiLmlkOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRo
aXMuX3RhYnNIaXN0b3J5LnNsaWNlKDAsIHRhYnNDb3VudCkubWFwKHRhYlRvVGFiSWQpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gdGFiVGl0bGUKLSAgICAgKi8KLSAgICBjaGFuZ2VUYWJUaXRsZTogZnVuY3Rpb24o
aWQsIHRhYlRpdGxlKQotICAgIHsKLSAgICAgICAgdmFyIHRhYiA9IHRoaXMuX3RhYnNCeUlkW2lk
XTsKLSAgICAgICAgdGFiLnRpdGxlID0gdGFiVGl0bGU7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVRh
YkVsZW1lbnRzKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBp
ZAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlZpZXd9IHZpZXcKLSAgICAgKi8KLSAgICBj
aGFuZ2VUYWJWaWV3OiBmdW5jdGlvbihpZCwgdmlldykKLSAgICB7Ci0gICAgICAgIHZhciB0YWIg
PSB0aGlzLl90YWJzQnlJZFtpZF07Ci0gICAgICAgIGlmICh0aGlzLl9jdXJyZW50VGFiICYmIHRo
aXMuX2N1cnJlbnRUYWIuaWQgPT09IHRhYi5pZCkgewotICAgICAgICAgICAgdGhpcy5faGlkZVRh
Yih0YWIpOwotICAgICAgICAgICAgdGFiLnZpZXcgPSB2aWV3OwotICAgICAgICAgICAgdGhpcy5f
c2hvd1RhYih0YWIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRhYi52aWV3ID0gdmll
dzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gICAgICog
QHBhcmFtIHtzdHJpbmc9fSB0YWJUb29sdGlwCi0gICAgICovCi0gICAgY2hhbmdlVGFiVG9vbHRp
cDogZnVuY3Rpb24oaWQsIHRhYlRvb2x0aXApCi0gICAgewotICAgICAgICB2YXIgdGFiID0gdGhp
cy5fdGFic0J5SWRbaWRdOwotICAgICAgICB0YWIudG9vbHRpcCA9IHRhYlRvb2x0aXA7Ci0gICAg
fSwKLQotICAgIG9uUmVzaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl91cGRh
dGVUYWJFbGVtZW50cygpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlVGFiRWxlbWVudHM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pbnZva2VPbmNlQWZ0ZXJCYXRjaFVw
ZGF0ZSh0aGlzLCB0aGlzLl9pbm5lclVwZGF0ZVRhYkVsZW1lbnRzKTsKLSAgICB9LAotCi0gICAg
X2lubmVyVXBkYXRlVGFiRWxlbWVudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXRo
aXMuX3RhYnMubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fY29udGVudEVsZW1lbnQuYWRkU3R5
bGVDbGFzcygiaGFzLW5vLXRhYnMiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5f
Y29udGVudEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaGFzLW5vLXRhYnMiKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghdGhpcy5fbWVhc3VyZWREcm9wRG93bkJ1dHRvbldpZHRoKQotICAgICAg
ICAgICAgdGhpcy5fbWVhc3VyZURyb3BEb3duQnV0dG9uKCk7Ci0KLSAgICAgICAgdGhpcy5fdXBk
YXRlV2lkdGhzKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVRhYnNEcm9wRG93bigpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5UYWJiZWRQYW5lVGFifSB0YWIKLSAgICAgKi8KLSAgICBfc2hvd1RhYkVs
ZW1lbnQ6IGZ1bmN0aW9uKGluZGV4LCB0YWIpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0g
dGhpcy5fdGFic0VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fdGFi
c0VsZW1lbnQuYXBwZW5kQ2hpbGQodGFiLnRhYkVsZW1lbnQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0aGlzLl90YWJzRWxlbWVudC5pbnNlcnRCZWZvcmUodGFiLnRhYkVsZW1lbnQsIHRo
aXMuX3RhYnNFbGVtZW50LmNoaWxkcmVuW2luZGV4XSk7Ci0gICAgICAgIHRhYi5fc2hvd24gPSB0
cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UYWJi
ZWRQYW5lVGFifSB0YWIKLSAgICAgKi8KLSAgICBfaGlkZVRhYkVsZW1lbnQ6IGZ1bmN0aW9uKHRh
YikKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RhYnNFbGVtZW50LnJlbW92ZUNoaWxkKHRhYi50YWJF
bGVtZW50KTsKLSAgICAgICAgdGFiLl9zaG93biA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBfY3Jl
YXRlRHJvcERvd25CdXR0b246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBkcm9wRG93
bkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBkcm9w
RG93bkNvbnRhaW5lci5hZGRTdHlsZUNsYXNzKCJ0YWJiZWQtcGFuZS1oZWFkZXItdGFicy1kcm9w
LWRvd24tY29udGFpbmVyIik7Ci0gICAgICAgIHZhciBkcm9wRG93bkJ1dHRvbiA9IGRyb3BEb3du
Q29udGFpbmVyLmNyZWF0ZUNoaWxkKCJkaXYiLCAidGFiYmVkLXBhbmUtaGVhZGVyLXRhYnMtZHJv
cC1kb3duIik7Ci0gICAgICAgIGRyb3BEb3duQnV0dG9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJcdTAwYmIiKSk7Ci0gICAgICAgIHRoaXMuX3RhYnNTZWxlY3QgPSBkcm9w
RG93bkJ1dHRvbi5jcmVhdGVDaGlsZCgic2VsZWN0IiwgInRhYmJlZC1wYW5lLWhlYWRlci10YWJz
LWRyb3AtZG93bi1zZWxlY3QiKTsKLSAgICAgICAgdGhpcy5fdGFic1NlbGVjdC5hZGRFdmVudExp
c3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl90YWJzU2VsZWN0Q2hhbmdlZC5iaW5kKHRoaXMpLCBmYWxz
ZSk7Ci0gICAgICAgIHJldHVybiBkcm9wRG93bkNvbnRhaW5lcjsKLSAgICB9LAotCi0gICAgX3Rv
dGFsV2lkdGg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJD
b250ZW50c0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7Ci0gICAgfSwKLQot
ICAgIF91cGRhdGVUYWJzRHJvcERvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB0
YWJzVG9TaG93SW5kZXhlcyA9IHRoaXMuX3RhYnNUb1Nob3dJbmRleGVzKHRoaXMuX3RhYnMsIHRo
aXMuX3RhYnNIaXN0b3J5LCB0aGlzLl90b3RhbFdpZHRoKCksIHRoaXMuX21lYXN1cmVkRHJvcERv
d25CdXR0b25XaWR0aCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YWJz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fdGFic1tpXS5fc2hvd24gJiYg
dGFic1RvU2hvd0luZGV4ZXMuaW5kZXhPZihpKSA9PT0gLTEpCi0gICAgICAgICAgICAgICAgdGhp
cy5faGlkZVRhYkVsZW1lbnQodGhpcy5fdGFic1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0YWJzVG9TaG93SW5kZXhlcy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgdmFyIHRhYiA9IHRoaXMuX3RhYnNbdGFic1RvU2hvd0luZGV4ZXNbaV1dOwotICAgICAg
ICAgICAgaWYgKCF0YWIuX3Nob3duKQotICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dUYWJFbGVt
ZW50KGksIHRhYik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRoaXMuX3BvcHVsYXRl
RHJvcERvd25Gcm9tSW5kZXgoKTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlRHJvcERvd25Gcm9t
SW5kZXg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kcm9wRG93bkJ1dHRv
bi5wYXJlbnRFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5faGVhZGVyQ29udGVudHNFbGVtZW50
LnJlbW92ZUNoaWxkKHRoaXMuX2Ryb3BEb3duQnV0dG9uKTsKLQotICAgICAgICB0aGlzLl90YWJz
U2VsZWN0LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHZhciB0YWJzVG9TaG93ID0gW107Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFicy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgaWYgKCF0aGlzLl90YWJzW2ldLl9zaG93bikKLSAgICAgICAgICAgICAgICB0YWJz
VG9TaG93LnB1c2godGhpcy5fdGFic1tpXSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjb21wYXJlRnVuY3Rpb24odGFiMSwgdGFiMikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRhYjEudGl0bGUubG9jYWxlQ29tcGFyZSh0
YWIyLnRpdGxlKTsKLSAgICAgICAgfQotICAgICAgICB0YWJzVG9TaG93LnNvcnQoY29tcGFyZUZ1
bmN0aW9uKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnNUb1Nob3cubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBvcHRpb24gPSBuZXcgT3B0aW9uKHRhYnNUb1Nob3db
aV0udGl0bGUpOwotICAgICAgICAgICAgb3B0aW9uLnRhYiA9IHRhYnNUb1Nob3dbaV07Ci0gICAg
ICAgICAgICB0aGlzLl90YWJzU2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHRoaXMuX3RhYnNTZWxlY3Qub3B0aW9ucy5sZW5ndGgpIHsKLSAgICAgICAg
ICAgIHRoaXMuX2hlYWRlckNvbnRlbnRzRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9kcm9wRG93
bkJ1dHRvbik7Ci0gICAgICAgICAgICB0aGlzLl90YWJzU2VsZWN0LnNlbGVjdGVkSW5kZXggPSAt
MTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfdGFic1NlbGVjdENoYW5nZWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5fdGFic1NlbGVjdC5vcHRpb25z
OwotICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zW3RoaXMuX3RhYnNTZWxlY3Qu
c2VsZWN0ZWRJbmRleF07Ci0gICAgICAgIHRoaXMuc2VsZWN0VGFiKHNlbGVjdGVkT3B0aW9uLnRh
Yi5pZCwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9tZWFzdXJlRHJvcERvd25CdXR0b246IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Ryb3BEb3duQnV0dG9uLmFkZFN0eWxlQ2xhc3Mo
Im1lYXN1cmluZyIpOwotICAgICAgICB0aGlzLl9oZWFkZXJDb250ZW50c0VsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5fZHJvcERvd25CdXR0b24pOwotICAgICAgICB0aGlzLl9tZWFzdXJlZERyb3BE
b3duQnV0dG9uV2lkdGggPSB0aGlzLl9kcm9wRG93bkJ1dHRvbi5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS53aWR0aDsKLSAgICAgICAgdGhpcy5faGVhZGVyQ29udGVudHNFbGVtZW50LnJlbW92ZUNo
aWxkKHRoaXMuX2Ryb3BEb3duQnV0dG9uKTsKLSAgICAgICAgdGhpcy5fZHJvcERvd25CdXR0b24u
cmVtb3ZlU3R5bGVDbGFzcygibWVhc3VyaW5nIik7Ci0gICAgfSwKLQotICAgIF91cGRhdGVXaWR0
aHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBtZWFzdXJlZFdpZHRocyA9IHRoaXMu
X21lYXN1cmVXaWR0aHMoKTsKLSAgICAgICAgdmFyIG1heFdpZHRoID0gdGhpcy5fc2hyaW5rYWJs
ZVRhYnMgPyB0aGlzLl9jYWxjdWxhdGVNYXhXaWR0aChtZWFzdXJlZFdpZHRocy5zbGljZSgpLCB0
aGlzLl90b3RhbFdpZHRoKCkpIDogTnVtYmVyLk1BWF9WQUxVRTsKLQotICAgICAgICB2YXIgaSA9
IDA7Ci0gICAgICAgIGZvciAodmFyIHRhYklkIGluIHRoaXMuX3RhYnMpIHsKLSAgICAgICAgICAg
IHZhciB0YWIgPSB0aGlzLl90YWJzW3RhYklkXTsKLSAgICAgICAgICAgIHRhYi5zZXRXaWR0aCh0
aGlzLl92ZXJ0aWNhbFRhYkxheW91dCA/IC0xIDogTWF0aC5taW4obWF4V2lkdGgsIG1lYXN1cmVk
V2lkdGhzW2krK10pKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfbWVhc3VyZVdpZHRoczog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gQWRkIGFsbCBlbGVtZW50cyB0byBtZWFzdXJl
IGludG8gdGhpcy5fdGFic0VsZW1lbnQKLSAgICAgICAgdmFyIG1lYXN1cmluZ1RhYkVsZW1lbnRz
ID0gW107Ci0gICAgICAgIGZvciAodmFyIHRhYklkIGluIHRoaXMuX3RhYnMpIHsKLSAgICAgICAg
ICAgIHZhciB0YWIgPSB0aGlzLl90YWJzW3RhYklkXTsKLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
dGFiLl9tZWFzdXJlZFdpZHRoID09PSAibnVtYmVyIikKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIHZhciBtZWFzdXJpbmdUYWJFbGVtZW50ID0gdGFiLl9jcmVhdGVUYWJF
bGVtZW50KHRydWUpOwotICAgICAgICAgICAgbWVhc3VyaW5nVGFiRWxlbWVudC5fX3RhYiA9IHRh
YjsKLSAgICAgICAgICAgIG1lYXN1cmluZ1RhYkVsZW1lbnRzLnB1c2gobWVhc3VyaW5nVGFiRWxl
bWVudCk7Ci0gICAgICAgICAgICB0aGlzLl90YWJzRWxlbWVudC5hcHBlbmRDaGlsZChtZWFzdXJp
bmdUYWJFbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBlcmZvcm0gbWVhc3VyZW1l
bnQKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJpbmdUYWJFbGVtZW50cy5sZW5n
dGg7ICsraSkKLSAgICAgICAgICAgIG1lYXN1cmluZ1RhYkVsZW1lbnRzW2ldLl9fdGFiLl9tZWFz
dXJlZFdpZHRoID0gbWVhc3VyaW5nVGFiRWxlbWVudHNbaV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCkud2lkdGg7Ci0KLSAgICAgICAgLy8gTnVrZSBlbGVtZW50cyBmcm9tIHRoZSBVSQotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG1lYXN1cmluZ1RhYkVsZW1lbnRzLmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgbWVhc3VyaW5nVGFiRWxlbWVudHNbaV0ucGFyZW50RWxlbWVudC5yZW1vdmVD
aGlsZChtZWFzdXJpbmdUYWJFbGVtZW50c1tpXSk7Ci0KLSAgICAgICAgLy8gQ29tYmluZSB0aGUg
cmVzdWx0cy4KLSAgICAgICAgdmFyIG1lYXN1cmVkV2lkdGhzID0gW107Ci0gICAgICAgIGZvciAo
dmFyIHRhYklkIGluIHRoaXMuX3RhYnMpCi0gICAgICAgICAgICBtZWFzdXJlZFdpZHRocy5wdXNo
KHRoaXMuX3RhYnNbdGFiSWRdLl9tZWFzdXJlZFdpZHRoKTsKLQotICAgICAgICByZXR1cm4gbWVh
c3VyZWRXaWR0aHM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPG51
bWJlcj59IG1lYXN1cmVkV2lkdGhzCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsV2lkdGgK
LSAgICAgKi8KLSAgICBfY2FsY3VsYXRlTWF4V2lkdGg6IGZ1bmN0aW9uKG1lYXN1cmVkV2lkdGhz
LCB0b3RhbFdpZHRoKQotICAgIHsKLSAgICAgICAgaWYgKCFtZWFzdXJlZFdpZHRocy5sZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBtZWFzdXJlZFdpZHRocy5zb3J0KGZ1
bmN0aW9uKHgsIHkpIHsgcmV0dXJuIHggLSB5IH0pOwotCi0gICAgICAgIHZhciB0b3RhbE1lYXN1
cmVkV2lkdGggPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lYXN1cmVkV2lkdGhz
Lmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdG90YWxNZWFzdXJlZFdpZHRoICs9IG1lYXN1cmVk
V2lkdGhzW2ldOwotCi0gICAgICAgIGlmICh0b3RhbFdpZHRoID49IHRvdGFsTWVhc3VyZWRXaWR0
aCkKLSAgICAgICAgICAgIHJldHVybiBtZWFzdXJlZFdpZHRoc1ttZWFzdXJlZFdpZHRocy5sZW5n
dGggLSAxXTsKLQotICAgICAgICB2YXIgdG90YWxFeHRyYVdpZHRoID0gMDsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IG1lYXN1cmVkV2lkdGhzLmxlbmd0aCAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgICAgIHZhciBleHRyYVdpZHRoID0gbWVhc3VyZWRXaWR0aHNbaV0gLSBtZWFzdXJlZFdpZHRo
c1tpIC0gMV07Ci0gICAgICAgICAgICB0b3RhbEV4dHJhV2lkdGggKz0gKG1lYXN1cmVkV2lkdGhz
Lmxlbmd0aCAtIGkpICogZXh0cmFXaWR0aDsKLQotICAgICAgICAgICAgaWYgKHRvdGFsV2lkdGgg
KyB0b3RhbEV4dHJhV2lkdGggPj0gdG90YWxNZWFzdXJlZFdpZHRoKQotICAgICAgICAgICAgICAg
IHJldHVybiBtZWFzdXJlZFdpZHRoc1tpIC0gMV0gKyAodG90YWxXaWR0aCArIHRvdGFsRXh0cmFX
aWR0aCAtIHRvdGFsTWVhc3VyZWRXaWR0aCkgLyAobWVhc3VyZWRXaWR0aHMubGVuZ3RoIC0gaSk7
IAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRvdGFsV2lkdGggLyBtZWFzdXJlZFdpZHRo
cy5sZW5ndGg7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYklu
c3BlY3Rvci5UYWJiZWRQYW5lVGFiPn0gdGFic09yZGVyZWQKLSAgICAgKiBAcGFyYW0ge0FycmF5
LjxXZWJJbnNwZWN0b3IuVGFiYmVkUGFuZVRhYj59IHRhYnNIaXN0b3J5Ci0gICAgICogQHBhcmFt
IHtudW1iZXJ9IHRvdGFsV2lkdGgKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbWVhc3VyZWREcm9w
RG93bkJ1dHRvbldpZHRoCi0gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICov
Ci0gICAgX3RhYnNUb1Nob3dJbmRleGVzOiBmdW5jdGlvbih0YWJzT3JkZXJlZCwgdGFic0hpc3Rv
cnksIHRvdGFsV2lkdGgsIG1lYXN1cmVkRHJvcERvd25CdXR0b25XaWR0aCkKLSAgICB7Ci0gICAg
ICAgIHZhciB0YWJzVG9TaG93SW5kZXhlcyA9IFtdOwotCi0gICAgICAgIHZhciB0b3RhbFRhYnNX
aWR0aCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFic0hpc3RvcnkubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIHRvdGFsVGFic1dpZHRoICs9IHRhYnNIaXN0b3J5W2ldLndp
ZHRoKCk7Ci0gICAgICAgICAgICB2YXIgbWluaW1hbFJlcXVpcmVkV2lkdGggPSB0b3RhbFRhYnNX
aWR0aDsKLSAgICAgICAgICAgIGlmIChpICE9PSB0YWJzSGlzdG9yeS5sZW5ndGggLSAxKQotICAg
ICAgICAgICAgICAgIG1pbmltYWxSZXF1aXJlZFdpZHRoICs9IG1lYXN1cmVkRHJvcERvd25CdXR0
b25XaWR0aDsKLSAgICAgICAgICAgIGlmICghdGhpcy5fdmVydGljYWxUYWJMYXlvdXQgJiYgbWlu
aW1hbFJlcXVpcmVkV2lkdGggPiB0b3RhbFdpZHRoKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgdGFic1RvU2hvd0luZGV4ZXMucHVzaCh0YWJzT3JkZXJlZC5pbmRleE9mKHRh
YnNIaXN0b3J5W2ldKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRhYnNUb1Nob3dJ
bmRleGVzLnNvcnQoZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4geCAtIHkgfSk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gdGFic1RvU2hvd0luZGV4ZXM7Ci0gICAgfSwKLSAgICAKLSAgICBfaGlk
ZUN1cnJlbnRUYWI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY3VycmVu
dFRhYikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9oaWRlVGFiKHRoaXMu
X2N1cnJlbnRUYWIpOwotICAgICAgICBkZWxldGUgdGhpcy5fY3VycmVudFRhYjsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGFiYmVkUGFuZVRhYn0gdGFi
Ci0gICAgICovCi0gICAgX3Nob3dUYWI6IGZ1bmN0aW9uKHRhYikKLSAgICB7Ci0gICAgICAgIHRh
Yi50YWJFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgIHRhYi52aWV3
LnNob3codGhpcy5fY29udGVudEVsZW1lbnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5UYWJiZWRQYW5lVGFifSB0YWIKLSAgICAgKi8KLSAgICBfaGlk
ZVRhYjogZnVuY3Rpb24odGFiKQotICAgIHsKLSAgICAgICAgdGFiLnRhYkVsZW1lbnQucmVtb3Zl
U3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAgdGFiLnZpZXcuZGV0YWNoKCk7Ci0gICAg
fSwKLQotICAgIGNhbkhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9jdXJyZW50VGFiICYmIHRoaXMuX2N1cnJlbnRUYWIudmlldyAmJiB0aGlzLl9j
dXJyZW50VGFiLnZpZXcuY2FuSGlnaGxpZ2h0TGluZSgpOwotICAgIH0sCi0KLSAgICBoaWdobGln
aHRMaW5lOiBmdW5jdGlvbihsaW5lKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuY2FuSGlnaGxp
Z2h0TGluZSgpKQotICAgICAgICAgICAgdGhpcy5fY3VycmVudFRhYi52aWV3LmhpZ2hsaWdodExp
bmUobGluZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxFbGVt
ZW50Pn0KLSAgICAgKi8KLSAgICBlbGVtZW50c1RvUmVzdG9yZVNjcm9sbFBvc2l0aW9uc0Zvcjog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFsgdGhpcy5fY29udGVudEVsZW1lbnQg
XTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGFiYmVk
UGFuZVRhYn0gdGFiCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gICAgICovCi0gICAg
X2luc2VydEJlZm9yZTogZnVuY3Rpb24odGFiLCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3RhYnNFbGVtZW50Lmluc2VydEJlZm9yZSh0YWIuX3RhYkVsZW1lbnQsIHRoaXMuX3RhYnNFbGVt
ZW50LmNoaWxkTm9kZXNbaW5kZXhdKTsKLSAgICAgICAgdmFyIG9sZEluZGV4ID0gdGhpcy5fdGFi
cy5pbmRleE9mKHRhYik7Ci0gICAgICAgIHRoaXMuX3RhYnMuc3BsaWNlKG9sZEluZGV4LCAxKTsK
LSAgICAgICAgaWYgKG9sZEluZGV4IDwgaW5kZXgpCi0gICAgICAgICAgICAtLWluZGV4OwotICAg
ICAgICB0aGlzLl90YWJzLnNwbGljZShpbmRleCwgMCwgdGFiKTsKLSAgICB9LAotCi0gICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25z
dHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGFiYmVkUGFuZX0gdGFiYmVkUGFuZQot
ICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUKLSAqIEBwYXJh
bSB7Ym9vbGVhbn0gY2xvc2VhYmxlCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5WaWV3fSB2aWV3
Ci0gKiBAcGFyYW0ge3N0cmluZz19IHRvb2x0aXAKLSAqLwotV2ViSW5zcGVjdG9yLlRhYmJlZFBh
bmVUYWIgPSBmdW5jdGlvbih0YWJiZWRQYW5lLCBpZCwgdGl0bGUsIGNsb3NlYWJsZSwgdmlldywg
dG9vbHRpcCkKLXsKLSAgICB0aGlzLl9jbG9zZWFibGUgPSBjbG9zZWFibGU7Ci0gICAgdGhpcy5f
dGFiYmVkUGFuZSA9IHRhYmJlZFBhbmU7Ci0gICAgdGhpcy5faWQgPSBpZDsKLSAgICB0aGlzLl90
aXRsZSA9IHRpdGxlOwotICAgIHRoaXMuX3Rvb2x0aXAgPSB0b29sdGlwOwotICAgIHRoaXMuX3Zp
ZXcgPSB2aWV3OwotICAgIHRoaXMuX3Nob3duID0gZmFsc2U7Ci0gICAgLyoqIEB0eXBlIHtudW1i
ZXJ9ICovIHRoaXMuX21lYXN1cmVkV2lkdGg7Ci0gICAgLyoqIEB0eXBlIHtFbGVtZW50fSAqLyB0
aGlzLl90YWJFbGVtZW50OwotfQotCi1XZWJJbnNwZWN0b3IuVGFiYmVkUGFuZVRhYi5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGdl
dCBpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faWQ7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgdGl0bGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlOwotICAgIH0sCi0KLSAgICBzZXQgdGl0bGUo
dGl0bGUpCi0gICAgewotICAgICAgICBpZiAodGl0bGUgPT09IHRoaXMuX3RpdGxlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlOwotICAgICAgICBpZiAo
dGhpcy5fdGl0bGVFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fdGl0bGVFbGVtZW50LnRleHRD
b250ZW50ID0gdGl0bGU7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9tZWFzdXJlZFdpZHRoOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVmlld30KLSAgICAg
Ki8KLSAgICBnZXQgdmlldygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdmlldzsKLSAg
ICB9LAotCi0gICAgc2V0IHZpZXcodmlldykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3ZpZXcgPSB2
aWV3OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVk
fQotICAgICAqLwotICAgIGdldCB0b29sdGlwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll90b29sdGlwOwotICAgIH0sCi0KLSAgICBzZXQgdG9vbHRpcCh0b29sdGlwKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fdG9vbHRpcCA9IHRvb2x0aXA7Ci0gICAgICAgIGlmICh0aGlzLl90aXRsZUVs
ZW1lbnQpCi0gICAgICAgICAgICB0aGlzLl90aXRsZUVsZW1lbnQudGl0bGUgPSB0b29sdGlwIHx8
ICIiOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAq
LwotICAgIGdldCB0YWJFbGVtZW50KCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YodGhpcy5f
dGFiRWxlbWVudCkgIT09ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Rh
YkVsZW1lbnQ7Ci0gICAgICAgIAotICAgICAgICB0aGlzLl9jcmVhdGVUYWJFbGVtZW50KGZhbHNl
KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RhYkVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICB3aWR0aDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGgKLSAgICAgKi8KLSAgICBzZXRXaWR0aDogZnVuY3Rp
b24od2lkdGgpCi0gICAgewotICAgICAgICB0aGlzLnRhYkVsZW1lbnQuc3R5bGUud2lkdGggPSB3
aWR0aCA9PT0gLTEgPyAiIiA6ICh3aWR0aCArICJweCIpOwotICAgICAgICB0aGlzLl93aWR0aCA9
IHdpZHRoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5U
YWJiZWRQYW5lVGFiRGVsZWdhdGV9IGRlbGVnYXRlCi0gICAgICovCi0gICAgc2V0RGVsZWdhdGU6
IGZ1bmN0aW9uKGRlbGVnYXRlKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBtZWFzdXJp
bmcKLSAgICAgKi8KLSAgICBfY3JlYXRlVGFiRWxlbWVudDogZnVuY3Rpb24obWVhc3VyaW5nKQot
ICAgIHsKLSAgICAgICAgdmFyIHRhYkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgdGFiRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0YWJiZWQtcGFuZS1oZWFk
ZXItdGFiIik7Ci0gICAgICAgIHRhYkVsZW1lbnQuaWQgPSAidGFiLSIgKyB0aGlzLl9pZDsKLSAg
ICAgICAgdGFiRWxlbWVudC50YWJJbmRleCA9IC0xOwotCi0gICAgICAgIHZhciB0aXRsZUVsZW1l
bnQgPSB0YWJFbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgInRhYmJlZC1wYW5lLWhlYWRlci10
YWItdGl0bGUiKTsKLSAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy50aXRs
ZTsKLSAgICAgICAgdGl0bGVFbGVtZW50LnRpdGxlID0gdGhpcy50b29sdGlwIHx8ICIiOwotICAg
ICAgICBpZiAoIW1lYXN1cmluZykKLSAgICAgICAgICAgIHRoaXMuX3RpdGxlRWxlbWVudCA9IHRp
dGxlRWxlbWVudDsKLQotICAgICAgICBpZiAodGhpcy5fY2xvc2VhYmxlKSB7Ci0gICAgICAgICAg
ICB2YXIgY2xvc2VCdXR0b25TcGFuID0gdGFiRWxlbWVudC5jcmVhdGVDaGlsZCgic3BhbiIsICJ0
YWJiZWQtcGFuZS1oZWFkZXItdGFiLWNsb3NlLWJ1dHRvbiIpOwotICAgICAgICAgICAgY2xvc2VC
dXR0b25TcGFuLnRleHRDb250ZW50ID0gIlx1MDBENyI7IC8vICdNVUxUSVBMSUNBVElPTiBTSUdO
JyAKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWFzdXJpbmcpCi0gICAgICAgICAgICB0YWJF
bGVtZW50LmFkZFN0eWxlQ2xhc3MoIm1lYXN1cmluZyIpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIHRoaXMuX3RhYkVsZW1lbnQgPSB0YWJFbGVtZW50OwotICAgICAgICAgICAgdGFiRWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RhYkNsaWNrZWQuYmluZCh0aGlz
KSwgZmFsc2UpOwotICAgICAgICAgICAgdGFiRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZWRvd24iLCB0aGlzLl90YWJNb3VzZURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICAg
ICAgaWYgKHRoaXMuX2Nsb3NlYWJsZSkgewotICAgICAgICAgICAgICAgIHRhYkVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl90YWJDb250ZXh0TWVudS5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmluc3RhbGxEcmFnSGFu
ZGxlKHRhYkVsZW1lbnQsIHRoaXMuX3N0YXJ0VGFiRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5f
dGFiRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fZW5kVGFiRHJhZ2dpbmcuYmluZCh0aGlzKSwg
InBvaW50ZXIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0
YWJFbGVtZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVu
dAotICAgICAqLwotICAgIF90YWJDbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9jbG9zZWFibGUgJiYgKGV2ZW50LmJ1dHRvbiA9PT0gMSB8fCBldmVudC50
YXJnZXQuaGFzU3R5bGVDbGFzcygidGFiYmVkLXBhbmUtaGVhZGVyLXRhYi1jbG9zZS1idXR0b24i
KSkpCi0gICAgICAgICAgICB0aGlzLl9jbG9zZVRhYnMoW3RoaXMuaWRdKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfdGFiTW91
c2VEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudC50YXJnZXQu
aGFzU3R5bGVDbGFzcygidGFiYmVkLXBhbmUtaGVhZGVyLXRhYi1jbG9zZS1idXR0b24iKSB8fCBl
dmVudC5idXR0b24gPT09IDEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3Rh
YmJlZFBhbmUuc2VsZWN0VGFiKHRoaXMuaWQsIHRydWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBpZHMKLSAgICAgKi8KLSAgICBfY2xvc2VUYWJz
OiBmdW5jdGlvbihpZHMpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLmNsb3NlVGFicyh0aGlzLl90YWJiZWRQYW5lLCBpZHMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3RhYmJlZFBh
bmUuY2xvc2VUYWJzKGlkcywgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIF90YWJDb250ZXh0TWVudTog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBjbG9zZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRoaXMuX2Nsb3NlVGFicyhbdGhpcy5pZF0pOwotICAgICAgICB9Ci0g
IAotICAgICAgICBmdW5jdGlvbiBjbG9zZU90aGVycygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRoaXMuX2Nsb3NlVGFicyh0aGlzLl90YWJiZWRQYW5lLm90aGVyVGFicyh0aGlzLmlkKSk7Ci0g
ICAgICAgIH0KLSAgCi0gICAgICAgIGZ1bmN0aW9uIGNsb3NlQWxsKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhpcy5fY2xvc2VUYWJzKHRoaXMuX3RhYmJlZFBhbmUuYWxsVGFicyh0aGlzLmlk
KSk7Ci0gICAgICAgIH0KLSAgCi0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVt
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xvc2UiKSwgY2xvc2UuYmluZCh0aGlzKSk7Ci0gICAg
ICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3Bl
Y3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQ2xvc2Ugb3RoZXJzIiA6ICJDbG9zZSBP
dGhlcnMiKSwgY2xvc2VPdGhlcnMuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LmFw
cGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VN
ZW51VGl0bGVzKCkgPyAiQ2xvc2UgYWxsIiA6ICJDbG9zZSBBbGwiKSwgY2xvc2VBbGwuYmluZCh0
aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAg
ICAqLwotICAgIF9zdGFydFRhYkRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIGlmIChldmVudC50YXJnZXQuaGFzU3R5bGVDbGFzcygidGFiYmVkLXBhbmUtaGVhZGVyLXRh
Yi1jbG9zZS1idXR0b24iKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdGhp
cy5fZHJhZ1N0YXJ0WCA9IGV2ZW50LnBhZ2VYOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBf
dGFiRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHRhYkVsZW1l
bnRzID0gdGhpcy5fdGFiYmVkUGFuZS5fdGFic0VsZW1lbnQuY2hpbGROb2RlczsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0YWJFbGVtZW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgdmFyIHRhYkVsZW1lbnQgPSB0YWJFbGVtZW50c1tpXTsKLSAgICAgICAgICAgIGlmICh0YWJF
bGVtZW50ID09PSB0aGlzLl90YWJFbGVtZW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICB2YXIgaW50ZXJzZWN0cyA9IHRhYkVsZW1lbnQub2Zmc2V0TGVmdCArIHRh
YkVsZW1lbnQuY2xpZW50V2lkdGggPiB0aGlzLl90YWJFbGVtZW50Lm9mZnNldExlZnQgJiYKLSAg
ICAgICAgICAgICAgICB0aGlzLl90YWJFbGVtZW50Lm9mZnNldExlZnQgKyB0aGlzLl90YWJFbGVt
ZW50LmNsaWVudFdpZHRoID4gdGFiRWxlbWVudC5vZmZzZXRMZWZ0OwotICAgICAgICAgICAgaWYg
KCFpbnRlcnNlY3RzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBp
ZiAoTWF0aC5hYnMoZXZlbnQucGFnZVggLSB0aGlzLl9kcmFnU3RhcnRYKSA8IHRhYkVsZW1lbnQu
Y2xpZW50V2lkdGggLyAyICsgNSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgaWYgKGV2ZW50LnBhZ2VYIC0gdGhpcy5fZHJhZ1N0YXJ0WCA+IDApIHsKLSAgICAgICAgICAg
ICAgICB0YWJFbGVtZW50ID0gdGFiRWxlbWVudC5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAg
ICArK2k7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBvbGRPZmZzZXRMZWZ0ID0g
dGhpcy5fdGFiRWxlbWVudC5vZmZzZXRMZWZ0OwotICAgICAgICAgICAgdGhpcy5fdGFiYmVkUGFu
ZS5faW5zZXJ0QmVmb3JlKHRoaXMsIGkpOwotICAgICAgICAgICAgdGhpcy5fZHJhZ1N0YXJ0WCAr
PSB0aGlzLl90YWJFbGVtZW50Lm9mZnNldExlZnQgLSBvbGRPZmZzZXRMZWZ0OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRoaXMuX3RhYkVsZW1lbnQucHJl
dmlvdXNTaWJsaW5nICYmIGV2ZW50LnBhZ2VYIC0gdGhpcy5fZHJhZ1N0YXJ0WCA8IDApIHsKLSAg
ICAgICAgICAgIHRoaXMuX3RhYkVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoImxlZnQiLCAiMHB4
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0aGlzLl90
YWJFbGVtZW50Lm5leHRTaWJsaW5nICYmIGV2ZW50LnBhZ2VYIC0gdGhpcy5fZHJhZ1N0YXJ0WCA+
IDApIHsKLSAgICAgICAgICAgIHRoaXMuX3RhYkVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoImxl
ZnQiLCAiMHB4Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLl90YWJFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJwb3NpdGlvbiIsICJyZWxhdGl2ZSIp
OwotICAgICAgICB0aGlzLl90YWJFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJsZWZ0IiwgKGV2
ZW50LnBhZ2VYIC0gdGhpcy5fZHJhZ1N0YXJ0WCkgKyAicHgiKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfZW5kVGFiRHJhZ2dp
bmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fdGFiRWxlbWVudC5zdHls
ZS5yZW1vdmVQcm9wZXJ0eSgicG9zaXRpb24iKTsKLSAgICAgICAgdGhpcy5fdGFiRWxlbWVudC5z
dHlsZS5yZW1vdmVQcm9wZXJ0eSgibGVmdCIpOwotICAgICAgICBkZWxldGUgdGhpcy5fZHJhZ1N0
YXJ0WDsKLSAgICB9Ci19Ci0KLS8qKgotICogQGludGVyZmFjZQotICovCi1XZWJJbnNwZWN0b3Iu
VGFiYmVkUGFuZVRhYkRlbGVnYXRlID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3Iu
VGFiYmVkUGFuZVRhYkRlbGVnYXRlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5UYWJiZWRQYW5lfSB0YWJiZWRQYW5lCi0gICAgICogQHBhcmFtIHtB
cnJheS48c3RyaW5nPn0gaWRzCi0gICAgICovCi0gICAgY2xvc2VUYWJzOiBmdW5jdGlvbih0YWJi
ZWRQYW5lLCBpZHMpIHsgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXN0Q29udHJvbGxlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGVzdENvbnRyb2xsZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNmMGMzMmUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXN0Q29udHJvbGxlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1XZWJJbnNw
ZWN0b3IuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCA9IGZ1bmN0aW9uKGNhbGxJZCwgc2NyaXB0
KQotewotICAgIGlmICghSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlzVW5kZXJUZXN0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZ1bmN0aW9uIGludm9rZU1ldGhvZCgpCi0gICAgewotICAgICAg
ICB2YXIgbWVzc2FnZTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlw
dCArICIvL0Agc291cmNlVVJMPWV2YWx1YXRlSW5XZWJJbnNwZWN0b3IiICsgY2FsbElkICsgIi5q
cyI7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gd2luZG93LmV2YWwoc2NyaXB0KTsKLSAgICAg
ICAgICAgIG1lc3NhZ2UgPSB0eXBlb2YgcmVzdWx0ID09PSAidW5kZWZpbmVkIiA/ICJcIjx1bmRl
ZmluZWQ+XCIiIDogSlNPTi5zdHJpbmdpZnkocmVzdWx0KTsKLSAgICAgICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICAgICAgbWVzc2FnZSA9IGUudG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAg
ICBSdW50aW1lQWdlbnQuZXZhbHVhdGUoImRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoIiAr
IGNhbGxJZCArICIsICIgKyBtZXNzYWdlICsgIikiLCAidGVzdCIpOwotICAgIH0KLSAgICBJbnNw
ZWN0b3JCYWNrZW5kLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoaW52b2tlTWV0aG9kKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRv
ci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvci5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjMTVjNi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3IuanMKKysrIC9kZXYvbnVs
bApAQCAtMSwyOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3IgPSBmdW5jdGlvbigpIHsgfTsKLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZl
bnRzID0gewotICAgIEd1dHRlckNsaWNrOiAiZ3V0dGVyQ2xpY2siCi19OwotCi1XZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9v
bGVhbn0KLSAgICAgKi8KLSAgICBpc0NsZWFuOiBmdW5jdGlvbigpIHsgfSwKLQotICAgIG1hcmtD
bGVhbjogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBs
aW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbgotICAgICAqIEByZXR1cm4g
ez97eDogbnVtYmVyLCB5OiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX0KLSAgICAgKi8KLSAgICBj
dXJzb3JQb3NpdGlvblRvQ29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbikg
eyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHgKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0geQotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQotICAg
ICAqLwotICAgIGNvb3JkaW5hdGVzVG9DdXJzb3JQb3NpdGlvbjogZnVuY3Rpb24oeCwgeSkgeyB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gY29sdW1uCi0gICAgICogQHJldHVybiB7P3tzdGFydENvbHVtbjogbnVt
YmVyLCBlbmRDb2x1bW46IG51bWJlciwgdHlwZTogc3RyaW5nfX0KLSAgICAgKi8KLSAgICB0b2tl
bkF0VGV4dFBvc2l0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW4pIHsgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQotICAgICAqLwotICAgIHNldCBt
aW1lVHlwZShtaW1lVHlwZSkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFu
fSByZWFkT25seQotICAgICAqLwotICAgIHNldFJlYWRPbmx5OiBmdW5jdGlvbihyZWFkT25seSkg
eyB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBy
ZWFkT25seTogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtFbGVt
ZW50fQotICAgICAqLwotICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVudDogZnVuY3Rpb24oKSB7IH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnZXgKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gY3NzQ2xhc3MKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAg
aGlnaGxpZ2h0UmVnZXg6IGZ1bmN0aW9uKHJlZ2V4LCBjc3NDbGFzcykgeyB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBjc3NDbGFzcwotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8K
LSAgICBoaWdobGlnaHRSYW5nZTogZnVuY3Rpb24ocmFuZ2UsIGNzc0NsYXNzKSB7IH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gaGlnaGxpZ2h0RGVzY3JpcHRvcgotICAgICAq
LwotICAgIHJlbW92ZUhpZ2hsaWdodDogZnVuY3Rpb24oaGlnaGxpZ2h0RGVzY3JpcHRvcikgeyB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8K
LSAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKSB7IH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
ZGlzYWJsZWQKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbmRpdGlvbmFsCi0gICAgICovCi0g
ICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwgZGlzYWJsZWQsIGNvbmRpdGlv
bmFsKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgot
ICAgICAqLwotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpIHsgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0g
ICAgc2V0RXhlY3V0aW9uTGluZTogZnVuY3Rpb24obGluZU51bWJlcikgeyB9LAotCi0gICAgY2xl
YXJFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50Ci0g
ICAgICovCi0gICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZWxlbWVudCkg
eyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAg
KiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAgICAgKi8KLSAgICByZW1vdmVEZWNvcmF0aW9u
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBlbGVtZW50KSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCi0gICAgICovCi0gICAgbWFya0Fu
ZFJldmVhbFJhbmdlOiBmdW5jdGlvbihyYW5nZSkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBoaWdobGlnaHRMaW5lOiBmdW5j
dGlvbihsaW5lTnVtYmVyKSB7IH0sCi0KLSAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9u
KCkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQotICAg
ICAqLwotICAgIGVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBmdW5jdGlvbigp
IHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3J9
IHRleHRFZGl0b3IKLSAgICAgKi8KLSAgICBpbmhlcml0U2Nyb2xsUG9zaXRpb25zOiBmdW5jdGlv
bih0ZXh0RWRpdG9yKSB7IH0sCi0KLSAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkgeyB9LAot
Ci0gICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBvblJlc2l6ZTogZnVuY3Rp
b24oKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFu
Z2V9IHJhbmdlCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQotICAgICAqLwotICAgIGVkaXRSYW5nZTogZnVuY3Rpb24o
cmFuZ2UsIHRleHQpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5l
TnVtYmVyCi0gICAgICovCi0gICAgc2Nyb2xsVG9MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKSB7
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQot
ICAgICAqLwotICAgIHNlbGVjdGlvbjogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlP30KLSAgICAgKi8KLSAgICBsYXN0U2Vs
ZWN0aW9uOiBmdW5jdGlvbigpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlRleHRSYW5nZX0gdGV4dFJhbmdlCi0gICAgICovCi0gICAgc2V0U2VsZWN0aW9uOiBm
dW5jdGlvbih0ZXh0UmFuZ2UpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgY29weVJhbmdlOiBmdW5jdGlvbihyYW5nZSkgeyB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IHRleHQgCi0gICAgICovCi0gICAgc2V0VGV4dDogZnVuY3Rpb24odGV4
dCkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAg
IHRleHQ6IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICByYW5nZTogZnVuY3Rpb24oKSB7IH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBsaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKSB7IH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgZ2V0IGxp
bmVzQ291bnQoKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAKLSAgICAgKiBAcGFyYW0ge09iamVjdD99IHZh
bHVlICAKLSAgICAgKi8KLSAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxpbmUsIG5hbWUsIHZh
bHVlKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZQotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lICAKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gdmFs
dWUgIAotICAgICAqLwotICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSkgeyB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gbmFtZQotICAgICAqLwotICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24obGlu
ZSwgbmFtZSkgeyB9LAotCi0gICAgd2FzU2hvd246IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgd2ls
bEhpZGU6IGZ1bmN0aW9uKCkgeyB9Ci19Ci0KLS8qKgotICogQGludGVyZmFjZQotICovCi1XZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IG9sZFJhbmdlCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBuZXdSYW5nZQotICAgICAqLwotICAgIG9uVGV4dENoYW5n
ZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkgeyB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSB0ZXh0UmFuZ2UKLSAgICAgKi8KLSAgICBz
ZWxlY3Rpb25DaGFuZ2VkOiBmdW5jdGlvbih0ZXh0UmFuZ2UpIHsgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAgc2Nyb2xsQ2hhbmdl
ZDogZnVuY3Rpb24obGluZU51bWJlcikgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuQ29udGV4dE1lbnV9IGNvbnRleHRNZW51Ci0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBwb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0TWVu
dTogZnVuY3Rpb24oY29udGV4dE1lbnUsIGxpbmVOdW1iZXIpIHsgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRleHRNZW51fSBjb250ZXh0TWVudQotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAgcG9wdWxhdGVUZXh0QXJl
YUNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0TWVudSwgbGluZU51bWJlcikgeyB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWZWYWx1ZQotICAgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gaXNFeHRlcm5hbAotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0g
ICAgY3JlYXRlTGluazogZnVuY3Rpb24oaHJlZlZhbHVlLCBpc0V4dGVybmFsKSB7IH0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvckhp
Z2hsaWdodGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRp
dG9ySGlnaGxpZ2h0ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNWFkZjcu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRp
dG9ySGlnaGxpZ2h0ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyID0gZnVu
Y3Rpb24odGV4dE1vZGVsLCBkYW1hZ2VDYWxsYmFjaykKLXsKLSAgICB0aGlzLl90ZXh0TW9kZWwg
PSB0ZXh0TW9kZWw7Ci0gICAgdGhpcy5fbWltZVR5cGUgPSAidGV4dC9odG1sIjsKLSAgICB0aGlz
Ll90b2tlbml6ZXIgPSBXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLlJlZ2lzdHJ5LmdldElu
c3RhbmNlKCkuZ2V0VG9rZW5pemVyKHRoaXMuX21pbWVUeXBlKTsKLSAgICB0aGlzLl9kYW1hZ2VD
YWxsYmFjayA9IGRhbWFnZUNhbGxiYWNrOwotICAgIHRoaXMuX2hpZ2hsaWdodENodW5rTGltaXQg
PSAxMDAwOwotICAgIHRoaXMuX2hpZ2hsaWdodExpbmVMaW1pdCA9IDUwMDsKLX0KLQotV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlci5fTWF4TGluZUNvdW50ID0gMTAwMDA7Ci0KLVdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIucHJvdG90eXBlID0gewotCi0gICAgZ2V0
IG1pbWVUeXBlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9taW1lVHlwZTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gICAgICovCi0g
ICAgc2V0IG1pbWVUeXBlKG1pbWVUeXBlKQotICAgIHsKLSAgICAgICAgdmFyIHRva2VuaXplciA9
IFdlYkluc3BlY3Rvci5Tb3VyY2VUb2tlbml6ZXIuUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRU
b2tlbml6ZXIobWltZVR5cGUpOwotICAgICAgICBpZiAodG9rZW5pemVyKSB7Ci0gICAgICAgICAg
ICB0aGlzLl90b2tlbml6ZXIgPSB0b2tlbml6ZXI7Ci0gICAgICAgICAgICB0aGlzLl9taW1lVHlw
ZSA9IG1pbWVUeXBlOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHNldCBoaWdobGlnaHRDaHVu
a0xpbWl0KGhpZ2hsaWdodENodW5rTGltaXQpCi0gICAgewotICAgICAgICB0aGlzLl9oaWdobGln
aHRDaHVua0xpbWl0ID0gaGlnaGxpZ2h0Q2h1bmtMaW1pdDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGhpZ2hsaWdodExpbmVMaW1pdAotICAgICAqLwotICAgIHNl
dEhpZ2hsaWdodExpbmVMaW1pdDogZnVuY3Rpb24oaGlnaGxpZ2h0TGluZUxpbWl0KQotICAgIHsK
LSAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGluZUxpbWl0ID0gaGlnaGxpZ2h0TGluZUxpbWl0Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZVJ1bgotICAg
ICAqLwotICAgIGhpZ2hsaWdodDogZnVuY3Rpb24oZW5kTGluZSwgZm9yY2VSdW4pCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgPiBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckhpZ2hsaWdodGVyLl9NYXhMaW5lQ291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgd2UgaGF2ZSB3b3JrIHRvIGRvLgotICAgICAgICB2
YXIgc3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGVuZExpbmUgLSAxLCAiaGln
aGxpZ2h0Iik7Ci0gICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5wb3N0Q29uZGl0aW9uU3RyaW5n
aWZpZWQpIHsKLSAgICAgICAgICAgIC8vIExhc3QgbGluZSBpcyBoaWdobGlnaHRlZCwganVzdCBl
eGl0LgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcmVx
dWVzdGVkRW5kTGluZSA9IGVuZExpbmU7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodFRp
bWVyICYmICFmb3JjZVJ1bikgewotICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSB0aW1lciBzY2hl
ZHVsZWQsIGl0IHdpbGwgY2F0Y2ggdGhlIG5ldyBqb2IgYmFzZWQgb24gdGhlIG5ldyBlbmRMaW5l
IHNldC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIHdp
bGwgYmUgaGlnaGxpZ2h0aW5nLiBGaXJzdCByZXdpbmQgdG8gdGhlIGxhc3QgaGlnaGxpZ2h0ZWQg
bGluZSB0byBnYWluIHByb3BlciBoaWdobGlnaHRlciBjb250ZXh0LgotICAgICAgICB2YXIgc3Rh
cnRMaW5lID0gZW5kTGluZTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0TGluZSA+IDApIHsKLSAgICAg
ICAgICAgIHN0YXRlID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShzdGFydExpbmUgLSAx
LCAiaGlnaGxpZ2h0Iik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUucG9zdENvbmRp
dGlvblN0cmluZ2lmaWVkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc3Rh
cnRMaW5lLS07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEbyBzbWFsbCBoaWdobGlnaHQgc3lu
Y2hyb25vdXNseS4gVGhpcyB3aWxsIHByb3ZpZGUgaW5zdGFudCBoaWdobGlnaHQgb24gUGFnZVVw
IC8gUGFnZURvd24sIGdlbnRsZSBzY3JvbGxpbmcuCi0gICAgICAgIHRoaXMuX2hpZ2hsaWdodElu
Q2h1bmtzKHN0YXJ0TGluZSwgZW5kTGluZSk7Ci0gICAgfSwKLQotICAgIHVwZGF0ZUhpZ2hsaWdo
dDogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50ID4gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRl
ci5fTWF4TGluZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFN0YXJ0
IGxpbmUgd2FzIGVkaXRlZCwgd2Ugc2hvdWxkIGhpZ2hsaWdodCBldmVyeXRoaW5nIHVudGlsIGVu
ZExpbmUuCi0gICAgICAgIHRoaXMuX2NsZWFySGlnaGxpZ2h0U3RhdGUoc3RhcnRMaW5lKTsKLQot
ICAgICAgICBpZiAoc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl90
ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKHN0YXJ0TGluZSAtIDEsICJoaWdobGlnaHQiKTsKLSAgICAg
ICAgICAgIGlmICghc3RhdGUgfHwgIXN0YXRlLnBvc3RDb25kaXRpb25TdHJpbmdpZmllZCkgewot
ICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodGVyIGRpZCBub3QgcmVhY2ggdGhpcyBwb2ludCB5
ZXQsIG5vdGhpbmcgdG8gdXBkYXRlLiBJdCB3aWxsIHJlYWNoIGl0IG9uIHN1YnNlcXVlbnQgdGlt
ZXIgdGljayBhbmQgZG8gdGhlIGpvYi4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcmVzdG9yZWQgPSB0aGlzLl9o
aWdobGlnaHRMaW5lcyhzdGFydExpbmUsIGVuZExpbmUpOwotICAgICAgICBpZiAoIXJlc3RvcmVk
KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fbGFzdEhpZ2hsaWdodGVkTGluZTsg
aSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICB2
YXIgc3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJoaWdobGlnaHQiKTsK
LSAgICAgICAgICAgICAgICBpZiAoIXN0YXRlICYmIGkgPiBlbmRMaW5lKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmli
dXRlKGksICJoaWdobGlnaHQtb3V0ZGF0ZWQiLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShpLCAiaGlnaGxpZ2h0Iik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRUaW1lcikgewotICAgICAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWdobGlnaHRUaW1lcik7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fcmVxdWVzdGVkRW5kTGluZSA9IGVuZExpbmU7Ci0gICAgICAgICAgICAgICAgdGhp
cy5faGlnaGxpZ2h0VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX2hpZ2hsaWdodEluQ2h1bmtzLmJp
bmQodGhpcywgdGhpcy5fbGFzdEhpZ2hsaWdodGVkTGluZSwgdGhpcy5fcmVxdWVzdGVkRW5kTGlu
ZSksIDEwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdG9y
ZWQ7Ci0gICAgfSwKLQotICAgIF9oaWdobGlnaHRJbkNodW5rczogZnVuY3Rpb24oc3RhcnRMaW5l
LCBlbmRMaW5lKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodFRpbWVyOwot
Ci0gICAgICAgIC8vIEZpcnN0IHdlIGFsd2F5cyBjaGVjayBpZiB3ZSBoYXZlIHdvcmsgdG8gZG8u
IENvdWxkIGJlIHRoYXQgdXNlciBzY3JvbGxlZCBiYWNrIGFuZCB3ZSBjYW4gcXVpdC4KLSAgICAg
ICAgdmFyIHN0YXRlID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZSh0aGlzLl9yZXF1ZXN0
ZWRFbmRMaW5lIC0gMSwgImhpZ2hsaWdodCIpOwotICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUu
cG9zdENvbmRpdGlvblN0cmluZ2lmaWVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmICh0aGlzLl9yZXF1ZXN0ZWRFbmRMaW5lICE9PSBlbmRMaW5lKSB7Ci0gICAgICAgICAgICAv
LyBVc2VyIGtlZXBzIHVwZGF0aW5nIHRoZSBqb2IgaW4gYmV0d2VlbiBvZiBvdXIgdGltZXIgdGlj
a3MuIEp1c3QgcmVzY2hlZHVsZSBzZWxmLCBkb24ndCBlYXQgQ1BVICh0aGV5IG11c3QgYmUgc2Ny
b2xsaW5nKS4KLSAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFRpbWVyID0gc2V0VGltZW91dCh0
aGlzLl9oaWdobGlnaHRJbkNodW5rcy5iaW5kKHRoaXMsIHN0YXJ0TGluZSwgdGhpcy5fcmVxdWVz
dGVkRW5kTGluZSksIDEwMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBUaGUgdGV4dE1vZGVsIG1heSBoYXZlIGJlZW4gYWxyZWFkeSB1cGRhdGVkLgotICAg
ICAgICBpZiAodGhpcy5fcmVxdWVzdGVkRW5kTGluZSA+IHRoaXMuX3RleHRNb2RlbC5saW5lc0Nv
dW50KQotICAgICAgICAgICAgdGhpcy5fcmVxdWVzdGVkRW5kTGluZSA9IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50OwotCi0gICAgICAgIHRoaXMuX2hpZ2hsaWdodExpbmVzKHN0YXJ0TGluZSwg
dGhpcy5fcmVxdWVzdGVkRW5kTGluZSk7Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgdGFpbCBoaWdo
bGlnaHQgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAodGhpcy5fbGFzdEhpZ2hsaWdodGVkTGlu
ZSA8IHRoaXMuX3JlcXVlc3RlZEVuZExpbmUpCi0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRU
aW1lciA9IHNldFRpbWVvdXQodGhpcy5faGlnaGxpZ2h0SW5DaHVua3MuYmluZCh0aGlzLCB0aGlz
Ll9sYXN0SGlnaGxpZ2h0ZWRMaW5lLCB0aGlzLl9yZXF1ZXN0ZWRFbmRMaW5lKSwgMTApOwotICAg
IH0sCi0KLSAgICBfaGlnaGxpZ2h0TGluZXM6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkK
LSAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUgaGlnaGxpZ2h0ZXIgY29udGV4dCB0YWtlbiBmcm9t
IHByZXZpb3VzIGxpbmUuCi0gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRB
dHRyaWJ1dGUoc3RhcnRMaW5lIC0gMSwgImhpZ2hsaWdodCIpOwotICAgICAgICB2YXIgcG9zdENv
bmRpdGlvblN0cmluZ2lmaWVkID0gc3RhdGUgPyBzdGF0ZS5wb3N0Q29uZGl0aW9uU3RyaW5naWZp
ZWQgOiBKU09OLnN0cmluZ2lmeSh0aGlzLl90b2tlbml6ZXIuY3JlYXRlSW5pdGlhbENvbmRpdGlv
bigpKTsKLQotICAgICAgICB2YXIgdG9rZW5zQ291bnQgPSAwOwotICAgICAgICBmb3IgKHZhciBs
aW5lTnVtYmVyID0gc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDwgZW5kTGluZTsgKytsaW5lTnVtYmVy
KSB7Ci0gICAgICAgICAgICBzdGF0ZSA9IHRoaXMuX3NlbGVjdEhpZ2hsaWdodFN0YXRlKGxpbmVO
dW1iZXIsIHBvc3RDb25kaXRpb25TdHJpbmdpZmllZCk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUu
cG9zdENvbmRpdGlvblN0cmluZ2lmaWVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5l
IGlzIGFscmVhZHkgaGlnaGxpZ2h0ZWQuCi0gICAgICAgICAgICAgICAgcG9zdENvbmRpdGlvblN0
cmluZ2lmaWVkID0gc3RhdGUucG9zdENvbmRpdGlvblN0cmluZ2lmaWVkOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgbGFzdEhpZ2hsaWdodGVkQ29sdW1uID0gMDsK
LSAgICAgICAgICAgICAgICBpZiAoc3RhdGUubWlkQ29uZGl0aW9uU3RyaW5naWZpZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbGFzdEhpZ2hsaWdodGVkQ29sdW1uID0gc3RhdGUubGFzdEhpZ2hs
aWdodGVkQ29sdW1uOwotICAgICAgICAgICAgICAgICAgICBwb3N0Q29uZGl0aW9uU3RyaW5naWZp
ZWQgPSBzdGF0ZS5taWRDb25kaXRpb25TdHJpbmdpZmllZDsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1i
ZXIpOwotICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplci5saW5lID0gbGluZTsKLSAgICAg
ICAgICAgICAgICB0aGlzLl90b2tlbml6ZXIuY29uZGl0aW9uID0gSlNPTi5wYXJzZShwb3N0Q29u
ZGl0aW9uU3RyaW5naWZpZWQpOwotCi0gICAgICAgICAgICAgICAgLy8gSGlnaGxpZ2h0IGxpbmUu
Ci0gICAgICAgICAgICAgICAgc3RhdGUucmFuZ2VzID0gc3RhdGUucmFuZ2VzIHx8IFtdOwotICAg
ICAgICAgICAgICAgIHN0YXRlLmJyYWNlcyA9IHN0YXRlLmJyYWNlcyB8fCBbXTsKLSAgICAgICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuZXdDb2x1bW4gPSB0aGlzLl90
b2tlbml6ZXIubmV4dFRva2VuKGxhc3RIaWdobGlnaHRlZENvbHVtbik7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLl90b2tlbml6ZXIudG9rZW5UeXBlOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodG9rZW5UeXBlICYmIGxhc3RIaWdobGlnaHRlZENvbHVtbiA8IHRo
aXMuX2hpZ2hsaWdodExpbmVMaW1pdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRv
a2VuVHlwZSA9PT0gImJyYWNlLXN0YXJ0IiB8fCB0b2tlblR5cGUgPT09ICJicmFjZS1lbmQiIHx8
IHRva2VuVHlwZSA9PT0gImJsb2NrLXN0YXJ0IiB8fCB0b2tlblR5cGUgPT09ICJibG9jay1lbmQi
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYnJhY2VzLnB1c2goewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbHVtbjogbGFzdEhpZ2hsaWdodGVk
Q29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb2x1bW46IG5ld0Nv
bHVtbiAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlblR5
cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucmFuZ2VzLnB1
c2goewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbHVtbjogbGFzdEhp
Z2hsaWdodGVkQ29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb2x1
bW46IG5ld0NvbHVtbiAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
OiB0b2tlblR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBsYXN0SGlnaGxpZ2h0ZWRDb2x1bW4gPSBuZXdDb2x1bW47Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgrK3Rva2Vuc0NvdW50ID4gdGhpcy5faGlnaGxpZ2h0Q2h1bmtMaW1pdCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxhc3RIaWdo
bGlnaHRlZENvbHVtbiA8IGxpbmUubGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHBvc3RDb25k
aXRpb25TdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3Rva2VuaXplci5jb25kaXRp
b24pOwotCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RIaWdobGlnaHRlZENvbHVtbiA8IGxpbmUu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRvbyBtdWNoIHdvcmsgZm9yIHNpbmds
ZSBjaHVuayAtIGV4aXQuCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RIaWdobGlnaHRl
ZENvbHVtbiA9IGxhc3RIaWdobGlnaHRlZENvbHVtbjsKLSAgICAgICAgICAgICAgICAgICAgc3Rh
dGUubWlkQ29uZGl0aW9uU3RyaW5naWZpZWQgPSBwb3N0Q29uZGl0aW9uU3RyaW5naWZpZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5sYXN0SGlnaGxpZ2h0ZWRDb2x1bW47Ci0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5taWRDb25kaXRpb25TdHJpbmdpZmllZDsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGUucG9zdENvbmRpdGlvblN0cmluZ2lmaWVkID0gcG9zdENv
bmRpdGlvblN0cmluZ2lmaWVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdmFyIG5leHRMaW5lU3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmli
dXRlKGxpbmVOdW1iZXIgKyAxLCAiaGlnaGxpZ2h0Iik7Ci0gICAgICAgICAgICBpZiAobmV4dExp
bmVTdGF0ZSAmJiBuZXh0TGluZVN0YXRlLnByZUNvbmRpdGlvblN0cmluZ2lmaWVkID09PSBzdGF0
ZS5wb3N0Q29uZGl0aW9uU3RyaW5naWZpZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBGb2xsb3dp
bmcgbGluZXMgYXJlIHVwIHRvIGRhdGUsIG5vIG5lZWQgcmUtaGlnaGxpZ2h0LgotICAgICAgICAg
ICAgICAgICsrbGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICB0aGlzLl9kYW1hZ2VDYWxsYmFj
ayhzdGFydExpbmUsIGxpbmVOdW1iZXIpOwotCi0gICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0
aGUgInBvaW50ZXIiIHRvIHRoZSBsYXN0IGhpZ2hsaWdodGVkIGxpbmUgd2l0aGluIHRoZSBnaXZl
biBjaHVuay4KLSAgICAgICAgICAgICAgICBmb3IgKDsgbGluZU51bWJlciA8IGVuZExpbmU7ICsr
bGluZU51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuX3RleHRNb2Rl
bC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImhpZ2hsaWdodCIpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN0YXRlIHx8ICFzdGF0ZS5wb3N0Q29uZGl0aW9uU3RyaW5naWZpZWQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fbGFzdEhpZ2hsaWdodGVkTGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLl9kYW1hZ2VDYWxsYmFjayhzdGFydExpbmUsIGxpbmVOdW1iZXIpOwotICAgICAgICB0aGlz
Ll9sYXN0SGlnaGxpZ2h0ZWRMaW5lID0gbGluZU51bWJlcjsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0sCi0KLSAgICBfc2VsZWN0SGlnaGxpZ2h0U3RhdGU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIHByZUNvbmRpdGlvblN0cmluZ2lmaWVkKQotICAgIHsKLSAgICAgICAgdmFyIHN0YXRlID0g
dGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0Iik7Ci0g
ICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5wcmVDb25kaXRpb25TdHJpbmdpZmllZCA9PT0gcHJl
Q29uZGl0aW9uU3RyaW5naWZpZWQpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0KLSAgICAg
ICAgdmFyIG91dGRhdGVkU3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJoaWdobGlnaHQtb3V0ZGF0ZWQiKTsKLSAgICAgICAgaWYgKG91dGRhdGVkU3RhdGUg
JiYgb3V0ZGF0ZWRTdGF0ZS5wcmVDb25kaXRpb25TdHJpbmdpZmllZCA9PT0gcHJlQ29uZGl0aW9u
U3RyaW5naWZpZWQpIHsKLSAgICAgICAgICAgIC8vIFN3YXAgc3RhdGVzLgotICAgICAgICAgICAg
dGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0Iiwgb3V0
ZGF0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxp
bmVOdW1iZXIsICJoaWdobGlnaHQtb3V0ZGF0ZWQiLCBzdGF0ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gb3V0ZGF0ZWRTdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0ZSkKLSAgICAg
ICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImhpZ2hsaWdo
dC1vdXRkYXRlZCIsIHN0YXRlKTsKLQotICAgICAgICBzdGF0ZSA9IHt9OwotICAgICAgICBzdGF0
ZS5wcmVDb25kaXRpb25TdHJpbmdpZmllZCA9IHByZUNvbmRpdGlvblN0cmluZ2lmaWVkOwotICAg
ICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQi
LCBzdGF0ZSk7Ci0gICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICB9LAotCi0gICAgX2NsZWFySGln
aGxpZ2h0U3RhdGU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICB0aGlzLl90
ZXh0TW9kZWwucmVtb3ZlQXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiKTsKLSAgICAg
ICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0
LW91dGRhdGVkIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTI1YjUzMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDg4NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKLSAqIEBw
YXJhbSB7bnVtYmVyfSBzdGFydENvbHVtbgotICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKLSAq
IEBwYXJhbSB7bnVtYmVyfSBlbmRDb2x1bW4KLSAqLwotV2ViSW5zcGVjdG9yLlRleHRSYW5nZSA9
IGZ1bmN0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbikKLXsK
LSAgICB0aGlzLnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKLSAgICB0aGlzLnN0YXJ0Q29sdW1uID0g
c3RhcnRDb2x1bW47Ci0gICAgdGhpcy5lbmRMaW5lID0gZW5kTGluZTsKLSAgICB0aGlzLmVuZENv
bHVtbiA9IGVuZENvbHVtbjsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5jcmVhdGVGcm9t
TG9jYXRpb24gPSBmdW5jdGlvbihsaW5lLCBjb2x1bW4pCi17Ci0gICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlKGxpbmUsIGNvbHVtbiwgbGluZSwgY29sdW1uKTsKLX0KLQotLyoq
Ci0gKiBAcGFyYW0ge09iamVjdH0gc2VyaWFsaXplZFRleHRSYW5nZQotICogQHJldHVybiB7V2Vi
SW5zcGVjdG9yLlRleHRSYW5nZX0KLSAqLwotV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5mcm9tT2Jq
ZWN0ID0gZnVuY3Rpb24gKHNlcmlhbGl6ZWRUZXh0UmFuZ2UpCi17Ci0gICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHNlcmlhbGl6ZWRUZXh0UmFuZ2Uuc3RhcnRMaW5lLCBzZXJp
YWxpemVkVGV4dFJhbmdlLnN0YXJ0Q29sdW1uLCBzZXJpYWxpemVkVGV4dFJhbmdlLmVuZExpbmUs
IHNlcmlhbGl6ZWRUZXh0UmFuZ2UuZW5kQ29sdW1uKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRS
YW5nZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAg
ICAgKi8KLSAgICBpc0VtcHR5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5zdGFydExpbmUgPT09IHRoaXMuZW5kTGluZSAmJiB0aGlzLnN0YXJ0Q29sdW1uID09PSB0aGlz
LmVuZENvbHVtbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0g
ICAgaW1tZWRpYXRlbHlQcmVjZWRlczogZnVuY3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAgICBp
ZiAoIXJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdGhp
cy5lbmRMaW5lID09PSByYW5nZS5zdGFydExpbmUgJiYgdGhpcy5lbmRDb2x1bW4gPT09IHJhbmdl
LnN0YXJ0Q29sdW1uOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5UZXh0UmFuZ2V9IHJhbmdlCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8K
LSAgICBpbW1lZGlhdGVseUZvbGxvd3M6IGZ1bmN0aW9uKHJhbmdlKQotICAgIHsKLSAgICAgICAg
aWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHJh
bmdlLmltbWVkaWF0ZWx5UHJlY2VkZXModGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgbGluZXNDb3VudCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5lbmRMaW5lIC0gdGhpcy5zdGFydExpbmU7Ci0gICAgfSwKLQot
ICAgIGNvbGxhcHNlVG9FbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
V2ViSW5zcGVjdG9yLlRleHRSYW5nZSh0aGlzLmVuZExpbmUsIHRoaXMuZW5kQ29sdW1uLCB0aGlz
LmVuZExpbmUsIHRoaXMuZW5kQ29sdW1uKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJl
dHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICBub3JtYWxpemU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnN0YXJ0TGluZSA+IHRoaXMuZW5kTGlu
ZSB8fCAodGhpcy5zdGFydExpbmUgPT09IHRoaXMuZW5kTGluZSAmJiB0aGlzLnN0YXJ0Q29sdW1u
ID4gdGhpcy5lbmRDb2x1bW4pKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlKHRoaXMuZW5kTGluZSwgdGhpcy5lbmRDb2x1bW4sIHRoaXMuc3RhcnRMaW5lLCB0
aGlzLnN0YXJ0Q29sdW1uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y2xvbmUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICBjbG9uZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHRoaXMuc3RhcnRMaW5lLCB0aGlz
LnN0YXJ0Q29sdW1uLCB0aGlzLmVuZExpbmUsIHRoaXMuZW5kQ29sdW1uKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAqLwotICAgIHNlcmlhbGl6ZVRv
T2JqZWN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2VyaWFsaXplZFRleHRSYW5n
ZSA9IHt9OwotICAgICAgICBzZXJpYWxpemVkVGV4dFJhbmdlLnN0YXJ0TGluZSA9IHRoaXMuc3Rh
cnRMaW5lOwotICAgICAgICBzZXJpYWxpemVkVGV4dFJhbmdlLnN0YXJ0Q29sdW1uID0gdGhpcy5z
dGFydENvbHVtbjsKLSAgICAgICAgc2VyaWFsaXplZFRleHRSYW5nZS5lbmRMaW5lID0gdGhpcy5l
bmRMaW5lOwotICAgICAgICBzZXJpYWxpemVkVGV4dFJhbmdlLmVuZENvbHVtbiA9IHRoaXMuZW5k
Q29sdW1uOwotICAgICAgICByZXR1cm4gc2VyaWFsaXplZFRleHRSYW5nZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBvdGhlcgotICAg
ICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBjb21wYXJlVG86IGZ1bmN0aW9uKG90
aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuc3RhcnRMaW5lID4gb3RoZXIuc3RhcnRMaW5l
KQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGlmICh0aGlzLnN0YXJ0TGluZSA8IG90
aGVyLnN0YXJ0TGluZSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHRoaXMu
c3RhcnRDb2x1bW4gPiBvdGhlci5zdGFydENvbHVtbikKLSAgICAgICAgICAgIHJldHVybiAxOwot
ICAgICAgICBpZiAodGhpcy5zdGFydENvbHVtbiA8IG90aGVyLnN0YXJ0Q29sdW1uKQotICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVPZmZzZXQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNw
ZWN0b3IuVGV4dFJhbmdlfQotICAgICAqLwotICAgIHNoaWZ0OiBmdW5jdGlvbihsaW5lT2Zmc2V0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHRoaXMu
c3RhcnRMaW5lICsgbGluZU9mZnNldCwgdGhpcy5zdGFydENvbHVtbiwgdGhpcy5lbmRMaW5lICsg
bGluZU9mZnNldCwgdGhpcy5lbmRDb2x1bW4pOwotICAgIH0sCi0KLSAgICB0b1N0cmluZzogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpOwotICAg
IH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRl
eHRSYW5nZX0gbmV3UmFuZ2UKLSAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbFRleHQKLSAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gb3JpZ2luYWxTZWxlY3Rpb24KLSAqLwotV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDb21tYW5kID0gZnVuY3Rpb24obmV3UmFuZ2UsIG9yaWdpbmFs
VGV4dCwgb3JpZ2luYWxTZWxlY3Rpb24pCi17Ci0gICAgdGhpcy5uZXdSYW5nZSA9IG5ld1Jhbmdl
OwotICAgIHRoaXMub3JpZ2luYWxUZXh0ID0gb3JpZ2luYWxUZXh0OwotICAgIHRoaXMub3JpZ2lu
YWxTZWxlY3Rpb24gPSBvcmlnaW5hbFNlbGVjdGlvbjsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1vZGVsID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuX2xpbmVzID0gWyIiXTsK
LSAgICB0aGlzLl9hdHRyaWJ1dGVzID0gW107Ci0gICAgLyoqIEB0eXBlIHtBcnJheS48V2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JDb21tYW5kPn0gKi8KLSAgICB0aGlzLl91bmRvU3RhY2sgPSBbXTsK
LSAgICB0aGlzLl9ub1B1bmN0dWF0aW9uUmVnZXggPSAvW14gISUmKCkqKywtLjo7PD0+P1xbXF1c
Xnt8fX5dKy87Ci0gICAgdGhpcy5fbGluZUJyZWFrID0gIlxuIjsKLX0KLQotV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNb2RlbC5FdmVudHMgPSB7Ci0gICAgVGV4dENoYW5nZWQ6ICJUZXh0Q2hhbmdl
ZCIKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbC5lbmRzV2l0aEJyYWNrZXRSZWdl
eCA9IC9beyhcW11ccyokLzsKLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbC5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBp
c0NsZWFuOiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuICF0aGlzLl91bmRvU3RhY2subGVu
Z3RoOwotICAgIH0sCi0KLSAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlz
Ll9yZXNldFVuZG9TdGFjaygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtu
dW1iZXJ9Ci0gICAgICovCi0gICAgZ2V0IGxpbmVzQ291bnQoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2xpbmVzLmxlbmd0aDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7c3RyaW5nfQotICAgICAqLwotICAgIHRleHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9saW5lcy5qb2luKHRoaXMuX2xpbmVCcmVhayk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9Ci0gICAgICovCi0g
ICAgcmFuZ2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLlRleHRSYW5nZSgwLCAwLCB0aGlzLl9saW5lcy5sZW5ndGggLSAxLCB0aGlzLl9saW5lc1t0
aGlzLl9saW5lcy5sZW5ndGggLSAxXS5sZW5ndGgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZ2V0IGxpbmVCcmVhaygpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fbGluZUJyZWFrOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAg
ICAgKi8KLSAgICBsaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPj0gdGhpcy5fbGluZXMubGVuZ3RoKQotICAgICAgICAgICAgdGhyb3cgIk91
dCBvZiBib3VuZHM6IiArIGxpbmVOdW1iZXI7Ci0gICAgICAgIHJldHVybiB0aGlzLl9saW5lc1ts
aW5lTnVtYmVyXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxp
bmVOdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgbGluZUxlbmd0
aDogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9saW5l
c1tsaW5lTnVtYmVyXS5sZW5ndGg7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSB0ZXh0IAotICAgICAqLwotICAgIHNldFRleHQ6IGZ1bmN0aW9uKHRleHQpCi0gICAg
ewotICAgICAgICB0aGlzLl9yZXNldFVuZG9TdGFjaygpOwotICAgICAgICB0ZXh0ID0gdGV4dCB8
fCAiIjsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5yYW5nZSgpOwotICAgICAgICB0aGlzLl9s
aW5lQnJlYWsgPSAvXHJcbi8udGVzdCh0ZXh0KSA/ICJcclxuIiA6ICJcbiI7Ci0gICAgICAgIHZh
ciBuZXdSYW5nZSA9IHRoaXMuX2lubmVyU2V0VGV4dChyYW5nZSwgdGV4dCk7Ci0gICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwu
RXZlbnRzLlRleHRDaGFuZ2VkLCB7IG9sZFJhbmdlOiByYW5nZSwgbmV3UmFuZ2U6IG5ld1Jhbmdl
fSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRS
YW5nZX0gcmFuZ2UKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9yYW5n
ZUhhc09uZUNoYXJhY3RlcjogZnVuY3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAgICBpZiAocmFu
Z2Uuc3RhcnRMaW5lID09PSByYW5nZS5lbmRMaW5lICYmIHJhbmdlLmVuZENvbHVtbiAtIHJhbmdl
LnN0YXJ0Q29sdW1uID09PSAxKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
IChyYW5nZS5lbmRMaW5lIC0gcmFuZ2Uuc3RhcnRMaW5lID09PSAxICYmIHJhbmdlLmVuZENvbHVt
biA9PT0gMCAmJiByYW5nZS5zdGFydENvbHVtbiA9PT0gdGhpcy5saW5lTGVuZ3RoKHJhbmdlLnN0
YXJ0TGluZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFu
Z2V9IHJhbmdlCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5UZXh0UmFuZ2U9fSBvcmlnaW5hbFNlbGVjdGlvbgotICAgICAqIEByZXR1cm4g
e2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2lzRWRpdFJhbmdlVW5kb0JvdW5kYXJ5OiBmdW5jdGlv
bihyYW5nZSwgdGV4dCwgb3JpZ2luYWxTZWxlY3Rpb24pCi0gICAgewotICAgICAgICBpZiAob3Jp
Z2luYWxTZWxlY3Rpb24gJiYgIW9yaWdpbmFsU2VsZWN0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAodGV4dCkKLSAgICAgICAgICAgIHJldHVybiB0
ZXh0Lmxlbmd0aCA+IDEgfHwgIXJhbmdlLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuICF0aGlz
Ll9yYW5nZUhhc09uZUNoYXJhY3RlcihyYW5nZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gdGV4dAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2lzRWRp
dFJhbmdlQWRqYWNlbnRUb0xhc3RDb21tYW5kOiBmdW5jdGlvbihyYW5nZSwgdGV4dCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5fbGFzdENvbW1hbmQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgaWYgKCF0ZXh0KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRGlzdGluZ3Vp
c2ggYmFja3NwYWNlIGFuZCBkZWxldGUgaW4gbGFzdENvbW1hbmQuCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5fbGFzdENvbW1hbmQubmV3UmFuZ2UuaW1tZWRpYXRlbHlQcmVjZWRlcyhyYW5nZSkg
fHwgdGhpcy5fbGFzdENvbW1hbmQubmV3UmFuZ2UuaW1tZWRpYXRlbHlGb2xsb3dzKHJhbmdlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGV4dC5pbmRleE9mKCJcbiIpID09PSAtMSAmJiB0
aGlzLl9sYXN0Q29tbWFuZC5uZXdSYW5nZS5pbW1lZGlhdGVseVByZWNlZGVzKHJhbmdlKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBy
YW5nZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGV4dFJhbmdlPX0gb3JpZ2luYWxTZWxlY3Rpb24KLSAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlfQotICAgICAqLwotICAgIGVkaXRSYW5nZTogZnVuY3Rpb24ocmFu
Z2UsIHRleHQsIG9yaWdpbmFsU2VsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIHVuZG9Cb3Vu
ZGFyeSA9IHRoaXMuX2lzRWRpdFJhbmdlVW5kb0JvdW5kYXJ5KHJhbmdlLCB0ZXh0LCBvcmlnaW5h
bFNlbGVjdGlvbik7Ci0gICAgICAgIGlmICh1bmRvQm91bmRhcnkgfHwgIXRoaXMuX2lzRWRpdFJh
bmdlQWRqYWNlbnRUb0xhc3RDb21tYW5kKHJhbmdlLCB0ZXh0KSkKLSAgICAgICAgICAgIHRoaXMu
X21hcmtVbmRvYWJsZVN0YXRlKCk7Ci0gICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuX2lubmVy
RWRpdFJhbmdlKHJhbmdlLCB0ZXh0LCBvcmlnaW5hbFNlbGVjdGlvbik7Ci0gICAgICAgIGlmICh1
bmRvQm91bmRhcnkpCi0gICAgICAgICAgICB0aGlzLl9tYXJrVW5kb2FibGVTdGF0ZSgpOwotICAg
ICAgICByZXR1cm4gbmV3UmFuZ2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4
dAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZT19IG9yaWdpbmFsU2VsZWN0
aW9uCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAg
ICBfaW5uZXJFZGl0UmFuZ2U6IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0LCBvcmlnaW5hbFNlbGVjdGlv
bikKLSAgICB7Ci0gICAgICAgIHZhciBvcmlnaW5hbFRleHQgPSB0aGlzLmNvcHlSYW5nZShyYW5n
ZSk7Ci0gICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuX2lubmVyU2V0VGV4dChyYW5nZSwgdGV4
dCk7Ci0gICAgICAgIHRoaXMuX2xhc3RDb21tYW5kID0gdGhpcy5fcHVzaFVuZG9hYmxlQ29tbWFu
ZChuZXdSYW5nZSwgb3JpZ2luYWxUZXh0LCBvcmlnaW5hbFNlbGVjdGlvbiB8fCByYW5nZSk7Ci0g
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTW9kZWwuRXZlbnRzLlRleHRDaGFuZ2VkLCB7IG9sZFJhbmdlOiByYW5nZSwgbmV3UmFuZ2U6
IG5ld1JhbmdlLCBlZGl0UmFuZ2U6IHRydWUgfSk7Ci0gICAgICAgIHJldHVybiBuZXdSYW5nZTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
fSByYW5nZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAgICogQHJldHVybiB7V2Vi
SW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICBfaW5uZXJTZXRUZXh0OiBmdW5jdGlv
bihyYW5nZSwgdGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2VyYXNlUmFuZ2UocmFuZ2UpOwot
ICAgICAgICBpZiAodGV4dCA9PT0gIiIpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3Bl
Y3Rvci5UZXh0UmFuZ2UocmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbHVtbiwgcmFuZ2Uu
c3RhcnRMaW5lLCByYW5nZS5zdGFydENvbHVtbik7Ci0KLSAgICAgICAgdmFyIG5ld0xpbmVzID0g
dGV4dC5zcGxpdCgvXHI/XG4vKTsKLQotICAgICAgICB2YXIgcHJlZml4ID0gdGhpcy5fbGluZXNb
cmFuZ2Uuc3RhcnRMaW5lXS5zdWJzdHJpbmcoMCwgcmFuZ2Uuc3RhcnRDb2x1bW4pOwotICAgICAg
ICB2YXIgc3VmZml4ID0gdGhpcy5fbGluZXNbcmFuZ2Uuc3RhcnRMaW5lXS5zdWJzdHJpbmcocmFu
Z2Uuc3RhcnRDb2x1bW4pOwotCi0gICAgICAgIHZhciBwb3N0Q2FyZXQgPSBwcmVmaXgubGVuZ3Ro
OwotICAgICAgICAvLyBJbnNlcnQgdGV4dC4KLSAgICAgICAgaWYgKG5ld0xpbmVzLmxlbmd0aCA9
PT0gMSkgewotICAgICAgICAgICAgdGhpcy5fc2V0TGluZShyYW5nZS5zdGFydExpbmUsIHByZWZp
eCArIG5ld0xpbmVzWzBdICsgc3VmZml4KTsKLSAgICAgICAgICAgIHBvc3RDYXJldCArPSBuZXdM
aW5lc1swXS5sZW5ndGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9zZXRM
aW5lKHJhbmdlLnN0YXJ0TGluZSwgcHJlZml4ICsgbmV3TGluZXNbMF0pOwotICAgICAgICAgICAg
dGhpcy5faW5zZXJ0TGluZXMocmFuZ2UsIG5ld0xpbmVzKTsKLSAgICAgICAgICAgIHRoaXMuX3Nl
dExpbmUocmFuZ2Uuc3RhcnRMaW5lICsgbmV3TGluZXMubGVuZ3RoIC0gMSwgbmV3TGluZXNbbmV3
TGluZXMubGVuZ3RoIC0gMV0gKyBzdWZmaXgpOwotICAgICAgICAgICAgcG9zdENhcmV0ID0gbmV3
TGluZXNbbmV3TGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uu
c3RhcnRDb2x1bW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
YW5nZS5zdGFydExpbmUgKyBuZXdMaW5lcy5sZW5ndGggLSAxLCBwb3N0Q2FyZXQpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdl
Ci0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gbmV3TGluZXMKLSAgICAgKi8KLSAgICBf
aW5zZXJ0TGluZXM6IGZ1bmN0aW9uKHJhbmdlLCBuZXdMaW5lcykKLSAgICB7Ci0gICAgICAgIHZh
ciBsaW5lcyA9IG5ldyBBcnJheSh0aGlzLl9saW5lcy5sZW5ndGggKyBuZXdMaW5lcy5sZW5ndGgg
LSAxKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcmFuZ2Uuc3RhcnRMaW5lOyArK2kp
Ci0gICAgICAgICAgICBsaW5lc1tpXSA9IHRoaXMuX2xpbmVzW2ldOwotICAgICAgICAvLyBMaW5l
IGF0IFswXSBpcyBhbHJlYWR5IHNldCB2aWEgc2V0TGluZS4KLSAgICAgICAgZm9yICh2YXIgaSA9
IDE7IGkgPCBuZXdMaW5lcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGxpbmVzW3JhbmdlLnN0
YXJ0TGluZSArIGldID0gbmV3TGluZXNbaV07Ci0gICAgICAgIGZvciAodmFyIGkgPSByYW5nZS5z
dGFydExpbmUgKyBuZXdMaW5lcy5sZW5ndGg7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkKLSAgICAg
ICAgICAgIGxpbmVzW2ldID0gdGhpcy5fbGluZXNbaSAtIG5ld0xpbmVzLmxlbmd0aCArIDFdOwot
ICAgICAgICB0aGlzLl9saW5lcyA9IGxpbmVzOwotCi0gICAgICAgIC8vIEFkanVzdCBhdHRyaWJ1
dGVzLCBhdHRyaWJ1dGVzIG1vdmUgd2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGxpbmUuCi0g
ICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7Ci0gICAgICAg
IHZhciBpbnNlcnRpb25JbmRleCA9IHJhbmdlLnN0YXJ0Q29sdW1uID8gcmFuZ2Uuc3RhcnRMaW5l
ICsgMSA6IHJhbmdlLnN0YXJ0TGluZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnNl
cnRpb25JbmRleDsgKytpKQotICAgICAgICAgICAgYXR0cmlidXRlc1tpXSA9IHRoaXMuX2F0dHJp
YnV0ZXNbaV07Ci0gICAgICAgIGZvciAodmFyIGkgPSBpbnNlcnRpb25JbmRleCArIG5ld0xpbmVz
Lmxlbmd0aCAtIDE7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgYXR0
cmlidXRlc1tpXSA9IHRoaXMuX2F0dHJpYnV0ZXNbaSAtIG5ld0xpbmVzLmxlbmd0aCArIDFdOwot
ICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqLwot
ICAgIF9lcmFzZVJhbmdlOiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIGlmIChyYW5n
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHByZWZpeCA9
IHRoaXMuX2xpbmVzW3JhbmdlLnN0YXJ0TGluZV0uc3Vic3RyaW5nKDAsIHJhbmdlLnN0YXJ0Q29s
dW1uKTsKLSAgICAgICAgdmFyIHN1ZmZpeCA9IHRoaXMuX2xpbmVzW3JhbmdlLmVuZExpbmVdLnN1
YnN0cmluZyhyYW5nZS5lbmRDb2x1bW4pOwotCi0gICAgICAgIGlmIChyYW5nZS5lbmRMaW5lID4g
cmFuZ2Uuc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB0aGlzLl9saW5lcy5zcGxpY2UocmFuZ2Uu
c3RhcnRMaW5lICsgMSwgcmFuZ2UuZW5kTGluZSAtIHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAgICAg
ICAgICAvLyBBZGp1c3QgYXR0cmlidXRlcywgYXR0cmlidXRlcyBtb3ZlIHdpdGggdGhlIGZpcnN0
IGNoYXJhY3RlciBvZiBsaW5lLgotICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlcy5zcGxpY2Uo
cmFuZ2Uuc3RhcnRDb2x1bW4gPyByYW5nZS5zdGFydExpbmUgKyAxIDogcmFuZ2Uuc3RhcnRMaW5l
LCByYW5nZS5lbmRMaW5lIC0gcmFuZ2Uuc3RhcnRMaW5lKTsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLl9zZXRMaW5lKHJhbmdlLnN0YXJ0TGluZSwgcHJlZml4ICsgc3VmZml4KTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gdGV4dAotICAgICAqLwotICAgIF9zZXRMaW5lOiBmdW5jdGlvbihsaW5lTnVt
YmVyLCB0ZXh0KQotICAgIHsKLSAgICAgICAgdGhpcy5fbGluZXNbbGluZU51bWJlcl0gPSB0ZXh0
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4KLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuVGV4dFJhbmdlfQotICAgICAqLwotICAgIHdvcmRSYW5nZTogZnVuY3Rpb24obGluZU51bWJl
ciwgY29sdW1uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlKGxpbmVOdW1iZXIsIHRoaXMud29yZFN0YXJ0KGxpbmVOdW1iZXIsIGNvbHVtbiwgdHJ1ZSks
IGxpbmVOdW1iZXIsIHRoaXMud29yZEVuZChsaW5lTnVtYmVyLCBjb2x1bW4sIHRydWUpKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gY29sdW1uCi0gICAgICogQHBhcmFtIHtib29sZWFufSBnYXBsZXNz
Ci0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIHdvcmRTdGFydDogZnVuY3Rp
b24obGluZU51bWJlciwgY29sdW1uLCBnYXBsZXNzKQotICAgIHsKLSAgICAgICAgdmFyIGxpbmUg
PSB0aGlzLl9saW5lc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgdmFyIHByZWZpeCA9IGxpbmUuc3Vi
c3RyaW5nKDAsIGNvbHVtbikuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKTsKLSAgICAgICAg
dmFyIHByZWZpeE1hdGNoID0gdGhpcy5fbm9QdW5jdHVhdGlvblJlZ2V4LmV4ZWMocHJlZml4KTsK
LSAgICAgICAgcmV0dXJuIHByZWZpeE1hdGNoICYmICghZ2FwbGVzcyB8fCBwcmVmaXhNYXRjaC5p
bmRleCA9PT0gMCkgPyBjb2x1bW4gLSBwcmVmaXhNYXRjaC5pbmRleCAtIHByZWZpeE1hdGNoWzBd
Lmxlbmd0aCA6IGNvbHVtbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uCi0gICAgICogQHBh
cmFtIHtib29sZWFufSBnYXBsZXNzCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwot
ICAgIHdvcmRFbmQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbiwgZ2FwbGVzcykKLSAgICB7
Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5fbGluZXNbbGluZU51bWJlcl07Ci0gICAgICAgIHZh
ciBzdWZmaXggPSBsaW5lLnN1YnN0cmluZyhjb2x1bW4pOwotICAgICAgICB2YXIgc3VmZml4TWF0
Y2ggPSB0aGlzLl9ub1B1bmN0dWF0aW9uUmVnZXguZXhlYyhzdWZmaXgpOwotICAgICAgICByZXR1
cm4gc3VmZml4TWF0Y2ggJiYgKCFnYXBsZXNzIHx8IHN1ZmZpeE1hdGNoLmluZGV4ID09PSAwKSA/
IGNvbHVtbiArIHN1ZmZpeE1hdGNoLmluZGV4ICsgc3VmZml4TWF0Y2hbMF0ubGVuZ3RoIDogY29s
dW1uOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0
UmFuZ2V9IHJhbmdlCi0gICAgICogQHJldHVybiB7c3RyaW5nfSAgCi0gICAgICovCi0gICAgY29w
eVJhbmdlOiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIGlmICghcmFuZ2UpCi0gICAg
ICAgICAgICByYW5nZSA9IHRoaXMucmFuZ2UoKTsKLQotICAgICAgICB2YXIgY2xpcCA9IFtdOwot
ICAgICAgICBpZiAocmFuZ2Uuc3RhcnRMaW5lID09PSByYW5nZS5lbmRMaW5lKSB7Ci0gICAgICAg
ICAgICBjbGlwLnB1c2godGhpcy5fbGluZXNbcmFuZ2Uuc3RhcnRMaW5lXS5zdWJzdHJpbmcocmFu
Z2Uuc3RhcnRDb2x1bW4sIHJhbmdlLmVuZENvbHVtbikpOwotICAgICAgICAgICAgcmV0dXJuIGNs
aXAuam9pbih0aGlzLl9saW5lQnJlYWspOwotICAgICAgICB9Ci0gICAgICAgIGNsaXAucHVzaCh0
aGlzLl9saW5lc1tyYW5nZS5zdGFydExpbmVdLnN1YnN0cmluZyhyYW5nZS5zdGFydENvbHVtbikp
OwotICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2Uuc3RhcnRMaW5lICsgMTsgaSA8IHJhbmdlLmVu
ZExpbmU7ICsraSkKLSAgICAgICAgICAgIGNsaXAucHVzaCh0aGlzLl9saW5lc1tpXSk7Ci0gICAg
ICAgIGNsaXAucHVzaCh0aGlzLl9saW5lc1tyYW5nZS5lbmRMaW5lXS5zdWJzdHJpbmcoMCwgcmFu
Z2UuZW5kQ29sdW1uKSk7Ci0gICAgICAgIHJldHVybiBjbGlwLmpvaW4odGhpcy5fbGluZUJyZWFr
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgCi0gICAgICogQHBhcmFtIHtPYmplY3Q/fSB2YWx1ZSAg
Ci0gICAgICovCi0gICAgc2V0QXR0cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lLCB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHZhciBhdHRycyA9IHRoaXMuX2F0dHJpYnV0ZXNbbGluZV07Ci0gICAg
ICAgIGlmICghYXR0cnMpIHsKLSAgICAgICAgICAgIGF0dHJzID0ge307Ci0gICAgICAgICAgICB0
aGlzLl9hdHRyaWJ1dGVzW2xpbmVdID0gYXR0cnM7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0cnNb
bmFtZV0gPSB2YWx1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IGxpbmUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgCi0gICAgICogQHJldHVybiB7T2Jq
ZWN0fG51bGx9IHZhbHVlICAKLSAgICAgKi8KLSAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxp
bmUsIG5hbWUpCi0gICAgewotICAgICAgICB2YXIgYXR0cnMgPSB0aGlzLl9hdHRyaWJ1dGVzW2xp
bmVdOwotICAgICAgICByZXR1cm4gYXR0cnMgPyBhdHRyc1tuYW1lXSA6IG51bGw7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUKLSAgICAgKi8KLSAgICByZW1vdmVBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxpbmUs
IG5hbWUpCi0gICAgewotICAgICAgICB2YXIgYXR0cnMgPSB0aGlzLl9hdHRyaWJ1dGVzW2xpbmVd
OwotICAgICAgICBpZiAoYXR0cnMpCi0gICAgICAgICAgICBkZWxldGUgYXR0cnNbbmFtZV07Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0g
bmV3UmFuZ2UKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxUZXh0Ci0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBvcmlnaW5hbFNlbGVjdGlvbgotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ29tbWFuZH0KLSAgICAgKi8KLSAgICBfcHVz
aFVuZG9hYmxlQ29tbWFuZDogZnVuY3Rpb24obmV3UmFuZ2UsIG9yaWdpbmFsVGV4dCwgb3JpZ2lu
YWxTZWxlY3Rpb24pCi0gICAgewotICAgICAgICB2YXIgY29tbWFuZCA9IG5ldyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNvbW1hbmQobmV3UmFuZ2UuY2xvbmUoKSwgb3JpZ2luYWxUZXh0LCBvcmln
aW5hbFNlbGVjdGlvbik7Ci0gICAgICAgIGlmICh0aGlzLl9pblVuZG8pCi0gICAgICAgICAgICB0
aGlzLl9yZWRvU3RhY2sucHVzaChjb21tYW5kKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIXRoaXMuX2luUmVkbykKLSAgICAgICAgICAgICAgICB0aGlzLl9yZWRvU3RhY2sgPSBb
XTsKLSAgICAgICAgICAgIHRoaXMuX3VuZG9TdGFjay5wdXNoKGNvbW1hbmQpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBjb21tYW5kOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHs/V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICB1bmRvOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3VuZG9TdGFjay5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB0aGlzLl9tYXJrUmVkb2FibGVTdGF0ZSgpOwot
Ci0gICAgICAgIHRoaXMuX2luVW5kbyA9IHRydWU7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMu
X2RvVW5kbyh0aGlzLl91bmRvU3RhY2spOwotICAgICAgICBkZWxldGUgdGhpcy5faW5VbmRvOwot
Ci0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICByZWRvOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3JlZG9TdGFjayB8fCAhdGhpcy5fcmVkb1N0YWNr
Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB0aGlzLl9tYXJrVW5k
b2FibGVTdGF0ZSgpOwotCi0gICAgICAgIHRoaXMuX2luUmVkbyA9IHRydWU7Ci0gICAgICAgIHZh
ciByYW5nZSA9IHRoaXMuX2RvVW5kbyh0aGlzLl9yZWRvU3RhY2spOwotICAgICAgICBkZWxldGUg
dGhpcy5faW5SZWRvOwotCi0gICAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlLmNvbGxhcHNlVG9F
bmQoKSA6IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yQ29tbWFuZD59IHN0YWNrCi0gICAgICogQHJldHVybiB7V2Vi
SW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAgICBfZG9VbmRvOiBmdW5jdGlvbihzdGFj
aykKLSAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IG51bGw7Ci0gICAgICAgIGZvciAodmFyIGkg
PSBzdGFjay5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgdmFyIGNvbW1h
bmQgPSBzdGFja1tpXTsKLSAgICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IGk7Ci0gICAgICAgICAg
ICB0aGlzLl9pbm5lckVkaXRSYW5nZShjb21tYW5kLm5ld1JhbmdlLCBjb21tYW5kLm9yaWdpbmFs
VGV4dCk7Ci0gICAgICAgICAgICByYW5nZSA9IGNvbW1hbmQub3JpZ2luYWxTZWxlY3Rpb247Ci0g
ICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3RhY2tbaSAtIDFdLmV4cGxpY2l0KQotICAgICAgICAg
ICAgICAgIHJldHVybiByYW5nZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmFuZ2U7Ci0g
ICAgfSwKLQotICAgIF9tYXJrVW5kb2FibGVTdGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX3VuZG9TdGFjay5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLl91bmRvU3Rh
Y2tbdGhpcy5fdW5kb1N0YWNrLmxlbmd0aCAtIDFdLmV4cGxpY2l0ID0gdHJ1ZTsKLSAgICB9LAot
Ci0gICAgX21hcmtSZWRvYWJsZVN0YXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5fcmVkb1N0YWNrLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuX3JlZG9TdGFja1t0aGlz
Ll9yZWRvU3RhY2subGVuZ3RoIC0gMV0uZXhwbGljaXQgPSB0cnVlOwotICAgIH0sCi0KLSAgICBf
cmVzZXRVbmRvU3RhY2s6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VuZG9TdGFj
ayA9IFtdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5U
ZXh0UmFuZ2V9IHJhbmdlCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0K
LSAgICAgKi8KLSAgICBpbmRlbnRMaW5lczogZnVuY3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAg
ICB0aGlzLl9tYXJrVW5kb2FibGVTdGF0ZSgpOwotCi0gICAgICAgIHZhciBpbmRlbnQgPSBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsKLSAgICAgICAgdmFyIG5l
d1JhbmdlID0gcmFuZ2UuY2xvbmUoKTsKLSAgICAgICAgLy8gRG8gbm90IGNoYW5nZSBhIHNlbGVj
dGlvbiBzdGFydCBwb3NpdGlvbiB3aGVuIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5l
Ci0gICAgICAgIGlmIChyYW5nZS5zdGFydENvbHVtbikKLSAgICAgICAgICAgIG5ld1JhbmdlLnN0
YXJ0Q29sdW1uICs9IGluZGVudC5sZW5ndGg7Ci0KLSAgICAgICAgdmFyIGluZGVudEVuZExpbmUg
PSByYW5nZS5lbmRMaW5lOwotICAgICAgICBpZiAocmFuZ2UuZW5kQ29sdW1uKQotICAgICAgICAg
ICAgbmV3UmFuZ2UuZW5kQ29sdW1uICs9IGluZGVudC5sZW5ndGg7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGluZGVudEVuZExpbmUtLTsKLQotICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVy
ID0gcmFuZ2Uuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDw9IGluZGVudEVuZExpbmU7IGxpbmVOdW1i
ZXIrKykKLSAgICAgICAgICAgIHRoaXMuX2lubmVyRWRpdFJhbmdlKFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2UuY3JlYXRlRnJvbUxvY2F0aW9uKGxpbmVOdW1iZXIsIDApLCBpbmRlbnQpOwotCi0gICAg
ICAgIHJldHVybiBuZXdSYW5nZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rv
ci5UZXh0UmFuZ2V9Ci0gICAgICovCi0gICAgdW5pbmRlbnRMaW5lczogZnVuY3Rpb24ocmFuZ2Up
Ci0gICAgewotICAgICAgICB0aGlzLl9tYXJrVW5kb2FibGVTdGF0ZSgpOwotCi0gICAgICAgIHZh
ciBpbmRlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsK
LSAgICAgICAgdmFyIGluZGVudExlbmd0aCA9IGluZGVudCA9PT0gV2ViSW5zcGVjdG9yLlRleHRV
dGlscy5JbmRlbnQuVGFiQ2hhcmFjdGVyID8gNCA6IGluZGVudC5sZW5ndGg7Ci0gICAgICAgIHZh
ciBsaW5lSW5kZW50UmVnZXggPSBuZXcgUmVnRXhwKCJeIHsxLCIgKyBpbmRlbnRMZW5ndGggKyAi
fSIpOwotICAgICAgICB2YXIgbmV3UmFuZ2UgPSByYW5nZS5jbG9uZSgpOwotCi0gICAgICAgIHZh
ciBpbmRlbnRFbmRMaW5lID0gcmFuZ2UuZW5kTGluZTsKLSAgICAgICAgaWYgKCFyYW5nZS5lbmRD
b2x1bW4pCi0gICAgICAgICAgICBpbmRlbnRFbmRMaW5lLS07Ci0KLSAgICAgICAgZm9yICh2YXIg
bGluZU51bWJlciA9IHJhbmdlLnN0YXJ0TGluZTsgbGluZU51bWJlciA8PSBpbmRlbnRFbmRMaW5l
OyBsaW5lTnVtYmVyKyspIHsKLSAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lKGxpbmVO
dW1iZXIpOwotICAgICAgICAgICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gbGluZS5jaGFyQXQoMCk7
Ci0gICAgICAgICAgICB2YXIgbGluZUluZGVudExlbmd0aDsKLQotICAgICAgICAgICAgaWYgKGZp
cnN0Q2hhcmFjdGVyID09PSAiICIpCi0gICAgICAgICAgICAgICAgbGluZUluZGVudExlbmd0aCA9
IGxpbmUubWF0Y2gobGluZUluZGVudFJlZ2V4KVswXS5sZW5ndGg7Ci0gICAgICAgICAgICBlbHNl
IGlmIChmaXJzdENoYXJhY3RlciA9PT0gIlx0IikKLSAgICAgICAgICAgICAgICBsaW5lSW5kZW50
TGVuZ3RoID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgdGhpcy5faW5uZXJFZGl0UmFuZ2UobmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2UobGluZU51bWJlciwgMCwgbGluZU51bWJlciwgbGluZUluZGVudExlbmd0aCksICIiKTsK
LQotICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IHJhbmdlLnN0YXJ0TGluZSkKLSAgICAg
ICAgICAgICAgICBuZXdSYW5nZS5zdGFydENvbHVtbiA9IE1hdGgubWF4KDAsIG5ld1JhbmdlLnN0
YXJ0Q29sdW1uIC0gbGluZUluZGVudExlbmd0aCk7Ci0gICAgICAgICAgICBpZiAobGluZU51bWJl
ciA9PT0gcmFuZ2UuZW5kTGluZSkKLSAgICAgICAgICAgICAgICBuZXdSYW5nZS5lbmRDb2x1bW4g
PSBNYXRoLm1heCgwLCBuZXdSYW5nZS5lbmRDb2x1bW4gLSBsaW5lSW5kZW50TGVuZ3RoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdSYW5nZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXI9fSBmcm9tCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSB0bwot
ICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWx9Ci0gICAgICovCi0g
ICAgc2xpY2U6IGZ1bmN0aW9uKGZyb20sIHRvKQotICAgIHsKLSAgICAgICAgdmFyIHRleHRNb2Rl
bCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsKCk7Ci0gICAgICAgIHRleHRNb2Rl
bC5fbGluZXMgPSB0aGlzLl9saW5lcy5zbGljZShmcm9tLCB0byk7Ci0gICAgICAgIHRleHRNb2Rl
bC5fbGluZUJyZWFrID0gdGhpcy5fbGluZUJyZWFrOwotICAgICAgICByZXR1cm4gdGV4dE1vZGVs
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFu
Z2V9IHJhbmdlCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAg
Ki8KLSAgICBncm93UmFuZ2VMZWZ0OiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIHZh
ciByZXN1bHQgPSByYW5nZS5jbG9uZSgpOwotICAgICAgICBpZiAocmVzdWx0LnN0YXJ0Q29sdW1u
KQotICAgICAgICAgICAgLS1yZXN1bHQuc3RhcnRDb2x1bW47Ci0gICAgICAgIGVsc2UgaWYgKHJl
c3VsdC5zdGFydExpbmUpCi0gICAgICAgICAgICByZXN1bHQuc3RhcnRDb2x1bW4gPSB0aGlzLmxp
bmVMZW5ndGgoLS1yZXN1bHQuc3RhcnRMaW5lKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBy
YW5nZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9Ci0gICAgICovCi0g
ICAgZ3Jvd1JhbmdlUmlnaHQ6IGZ1bmN0aW9uKHJhbmdlKQotICAgIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IHJhbmdlLmNsb25lKCk7Ci0gICAgICAgIGlmIChyZXN1bHQuZW5kQ29sdW1uIDwgdGhp
cy5saW5lTGVuZ3RoKHJlc3VsdC5lbmRMaW5lKSkKLSAgICAgICAgICAgICsrcmVzdWx0LmVuZENv
bHVtbjsKLSAgICAgICAgZWxzZSBpZiAocmVzdWx0LmVuZExpbmUgPCB0aGlzLmxpbmVzQ291bnQp
IHsKLSAgICAgICAgICAgIHJlc3VsdC5lbmRDb2x1bW4gPSAwOwotICAgICAgICAgICAgKytyZXN1
bHQuZW5kTGluZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0K
LSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWx9
IHRleHRNb2RlbAotICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLkJyYWNlTWF0Y2hl
ciA9IGZ1bmN0aW9uKHRleHRNb2RlbCkKLXsKLSAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9k
ZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwuQnJhY2VNYXRjaGVyLnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAg
ICAqIEByZXR1cm4ge0FycmF5Ljx7c3RhcnRDb2x1bW46IG51bWJlciwgZW5kQ29sdW1uOiBudW1i
ZXIsIHRva2VuOiBzdHJpbmd9Pn0KLSAgICAgKi8KLSAgICBfYnJhY2VSYW5nZXM6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlzLl90ZXh0
TW9kZWwubGluZXNDb3VudCB8fCBsaW5lTnVtYmVyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotCi0gICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmli
dXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiKTsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGUpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZS5icmFjZXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBicmFjZVRva2VuTGVmdAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBicmFjZVRva2VuUmln
aHQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9tYXRjaGVzOiBmdW5j
dGlvbihicmFjZVRva2VuTGVmdCwgYnJhY2VUb2tlblJpZ2h0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuICgoYnJhY2VUb2tlbkxlZnQgPT09ICJicmFjZS1zdGFydCIgJiYgYnJhY2VUb2tlblJpZ2h0
ID09PSAiYnJhY2UtZW5kIikgfHwgKGJyYWNlVG9rZW5MZWZ0ID09PSAiYmxvY2stc3RhcnQiICYm
IGJyYWNlVG9rZW5SaWdodCA9PT0gImJsb2NrLWVuZCIpKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
Y29sdW1uCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhCcmFjZUl0ZXJhdGlvbgotICAgICAq
IEByZXR1cm4gez97bGluZU51bWJlcjogbnVtYmVyLCBjb2x1bW46IG51bWJlciwgdG9rZW46IHN0
cmluZ319Ci0gICAgICovCi0gICAgZmluZExlZnRDYW5kaWRhdGU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIGNvbHVtbiwgbWF4QnJhY2VJdGVyYXRpb24pCi0gICAgewotICAgICAgICB2YXIgYnJhY2Vz
ID0gdGhpcy5fYnJhY2VSYW5nZXMobGluZU51bWJlcik7Ci0gICAgICAgIGlmICghYnJhY2VzKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIGJyYWNlSW5kZXggPSBicmFj
ZXMubGVuZ3RoIC0gMTsKLSAgICAgICAgd2hpbGUgKGJyYWNlSW5kZXggPj0gMCAmJiBicmFjZXNb
YnJhY2VJbmRleF0uc3RhcnRDb2x1bW4gPiBjb2x1bW4pCi0gICAgICAgICAgICAtLWJyYWNlSW5k
ZXg7Ci0KLSAgICAgICAgdmFyIGJyYWNlID0gYnJhY2VJbmRleCA+PSAwID8gYnJhY2VzW2JyYWNl
SW5kZXhdIDogbnVsbDsKLSAgICAgICAgaWYgKGJyYWNlICYmIGJyYWNlLnN0YXJ0Q29sdW1uID09
PSBjb2x1bW4gJiYgKGJyYWNlLnRva2VuID09PSAiYmxvY2stZW5kIiB8fCBicmFjZS50b2tlbiA9
PT0gImJyYWNlLWVuZCIpKQotICAgICAgICAgICAgLS1icmFjZUluZGV4OwotCi0gICAgICAgIHZh
ciBzdGFjayA9IFtdOwotICAgICAgICBtYXhCcmFjZUl0ZXJhdGlvbiA9IG1heEJyYWNlSXRlcmF0
aW9uIHx8IE51bWJlci5NQVhfVkFMVUU7Ci0gICAgICAgIHdoaWxlICgtLW1heEJyYWNlSXRlcmF0
aW9uKSB7Ci0gICAgICAgICAgICBpZiAoYnJhY2VJbmRleCA8IDApIHsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoKGJyYWNlcyA9IHRoaXMuX2JyYWNlUmFuZ2VzKC0tbGluZU51bWJlcikpICYmICFi
cmFjZXMubGVuZ3RoKSB7fTsKLSAgICAgICAgICAgICAgICBpZiAoIWJyYWNlcykKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgYnJhY2VJbmRleCA9IGJy
YWNlcy5sZW5ndGggLSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJhY2UgPSBicmFj
ZXNbYnJhY2VJbmRleF07Ci0gICAgICAgICAgICBpZiAoYnJhY2UudG9rZW4gPT09ICJibG9jay1l
bmQiIHx8IGJyYWNlLnRva2VuID09PSAiYnJhY2UtZW5kIikKLSAgICAgICAgICAgICAgICBzdGFj
ay5wdXNoKGJyYWNlLnRva2VuKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLmxlbmd0aCA9
PT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGJyYWNlLnN0
YXJ0Q29sdW1uLAotICAgICAgICAgICAgICAgICAgICB0b2tlbjogYnJhY2UudG9rZW4KLSAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuX21hdGNoZXMoYnJhY2Uu
dG9rZW4sIHN0YWNrLnBvcCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
ICAgICAgICAgLS1icmFjZUluZGV4OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4KLSAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJy
YWNlSXRlcmF0aW9uCi0gICAgICogQHJldHVybiB7P3tsaW5lTnVtYmVyOiBudW1iZXIsIGNvbHVt
bjogbnVtYmVyLCB0b2tlbjogc3RyaW5nfX0KLSAgICAgKi8KLSAgICBmaW5kUmlnaHRDYW5kaWRh
dGU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbiwgbWF4QnJhY2VJdGVyYXRpb24pCi0gICAg
ewotICAgICAgICB2YXIgYnJhY2VzID0gdGhpcy5fYnJhY2VSYW5nZXMobGluZU51bWJlcik7Ci0g
ICAgICAgIGlmICghYnJhY2VzKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAg
dmFyIGJyYWNlSW5kZXggPSAwOwotICAgICAgICB3aGlsZSAoYnJhY2VJbmRleCA8IGJyYWNlcy5s
ZW5ndGggJiYgYnJhY2VzW2JyYWNlSW5kZXhdLnN0YXJ0Q29sdW1uIDwgY29sdW1uKQotICAgICAg
ICAgICAgKyticmFjZUluZGV4OwotCi0gICAgICAgIHZhciBicmFjZSA9IGJyYWNlSW5kZXggPCBi
cmFjZXMubGVuZ3RoID8gYnJhY2VzW2JyYWNlSW5kZXhdIDogbnVsbDsKLSAgICAgICAgaWYgKGJy
YWNlICYmIGJyYWNlLnN0YXJ0Q29sdW1uID09PSBjb2x1bW4gJiYgKGJyYWNlLnRva2VuID09PSAi
YmxvY2stc3RhcnQiIHx8IGJyYWNlLnRva2VuID09PSAiYnJhY2Utc3RhcnQiKSkKLSAgICAgICAg
ICAgICsrYnJhY2VJbmRleDsKLQotICAgICAgICB2YXIgc3RhY2sgPSBbXTsKLSAgICAgICAgbWF4
QnJhY2VJdGVyYXRpb24gPSBtYXhCcmFjZUl0ZXJhdGlvbiB8fCBOdW1iZXIuTUFYX1ZBTFVFOwot
ICAgICAgICB3aGlsZSAoLS1tYXhCcmFjZUl0ZXJhdGlvbikgewotICAgICAgICAgICAgaWYgKGJy
YWNlSW5kZXggPj0gYnJhY2VzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHdoaWxlICgoYnJh
Y2VzID0gdGhpcy5fYnJhY2VSYW5nZXMoKytsaW5lTnVtYmVyKSkgJiYgIWJyYWNlcy5sZW5ndGgp
IHt9OwotICAgICAgICAgICAgICAgIGlmICghYnJhY2VzKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICBicmFjZUluZGV4ID0gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyYWNlID0gYnJhY2VzW2JyYWNlSW5kZXhdOwotICAgICAgICAgICAg
aWYgKGJyYWNlLnRva2VuID09PSAiYmxvY2stc3RhcnQiIHx8IGJyYWNlLnRva2VuID09PSAiYnJh
Y2Utc3RhcnQiKQotICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYnJhY2UudG9rZW4pOwotICAg
ICAgICAgICAgZWxzZSBpZiAoc3RhY2subGVuZ3RoID09PSAwKQotICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgIGNvbHVtbjogYnJhY2Uuc3RhcnRDb2x1bW4sCi0gICAgICAgICAgICAg
ICAgICAgIHRva2VuOiBicmFjZS50b2tlbgotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICBlbHNlIGlmICghdGhpcy5fbWF0Y2hlcyhzdGFjay5wb3AoKSwgYnJhY2UudG9rZW4pKQotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgKyticmFjZUluZGV4OwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4K
LSAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJyYWNlSXRlcmF0aW9uCi0gICAgICogQHJldHVy
biB7P3tsZWZ0QnJhY2U6IHtsaW5lTnVtYmVyOiBudW1iZXIsIGNvbHVtbjogbnVtYmVyLCB0b2tl
bjogc3RyaW5nfSwgcmlnaHRCcmFjZToge2xpbmVOdW1iZXI6IG51bWJlciwgY29sdW1uOiBudW1i
ZXIsIHRva2VuOiBzdHJpbmd9fX0KLSAgICAgKi8KLSAgICBlbmNsb3NpbmdCcmFjZXM6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbiwgbWF4QnJhY2VJdGVyYXRpb24pCi0gICAgewotICAgICAg
ICB2YXIgbGVmdEJyYWNlTG9jYXRpb24gPSB0aGlzLmZpbmRMZWZ0Q2FuZGlkYXRlKGxpbmVOdW1i
ZXIsIGNvbHVtbiwgbWF4QnJhY2VJdGVyYXRpb24pOwotICAgICAgICBpZiAoIWxlZnRCcmFjZUxv
Y2F0aW9uKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIHJpZ2h0QnJh
Y2VMb2NhdGlvbiA9IHRoaXMuZmluZFJpZ2h0Q2FuZGlkYXRlKGxpbmVOdW1iZXIsIGNvbHVtbiwg
bWF4QnJhY2VJdGVyYXRpb24pOwotICAgICAgICBpZiAoIXJpZ2h0QnJhY2VMb2NhdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGlmICghdGhpcy5fbWF0Y2hlcyhsZWZ0
QnJhY2VMb2NhdGlvbi50b2tlbiwgcmlnaHRCcmFjZUxvY2F0aW9uLnRva2VuKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBsZWZ0QnJh
Y2U6IGxlZnRCcmFjZUxvY2F0aW9uLAotICAgICAgICAgICAgcmlnaHRCcmFjZTogcmlnaHRCcmFj
ZUxvY2F0aW9uCi0gICAgICAgIH07Ci0gICAgfSwKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzc0NDNmOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRQcm9tcHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Ci0gKiBA
aW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZX0KLSAqIEBwYXJhbSB7
ZnVuY3Rpb24oRWxlbWVudCwgUmFuZ2UsIGJvb2xlYW4sIGZ1bmN0aW9uKCFBcnJheS48c3RyaW5n
PiwgbnVtYmVyPSkpfSBjb21wbGV0aW9ucwotICogQHBhcmFtIHtzdHJpbmc9fSBzdG9wQ2hhcmFj
dGVycwotICovCi1XZWJJbnNwZWN0b3IuVGV4dFByb21wdCA9IGZ1bmN0aW9uKGNvbXBsZXRpb25z
LCBzdG9wQ2hhcmFjdGVycykKLXsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7RWxlbWVudHx1bmRl
ZmluZWR9Ci0gICAgICovCi0gICAgdGhpcy5fcHJveHlFbGVtZW50OwotICAgIHRoaXMuX3Byb3h5
RWxlbWVudERpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKLSAgICB0aGlzLl9sb2FkQ29tcGxldGlv
bnMgPSBjb21wbGV0aW9uczsKLSAgICB0aGlzLl9jb21wbGV0aW9uU3RvcENoYXJhY3RlcnMgPSBz
dG9wQ2hhcmFjdGVycyB8fCAiID06Wyh7OywhKy0qLyZ8Xjw+LiI7Ci0gICAgdGhpcy5fc3VnZ2Vz
dEZvcmNlYWJsZSA9IHRydWU7Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LkV2ZW50cyA9
IHsKLSAgICBJdGVtQXBwbGllZDogInRleHQtcHJvbXB0LWl0ZW0tYXBwbGllZCIsCi0gICAgSXRl
bUFjY2VwdGVkOiAidGV4dC1wcm9tcHQtaXRlbS1hY2NlcHRlZCIKLX07Ci0KLVdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgcHJveHlFbGVtZW50KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm94eUVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIHNldFN1
Z2dlc3RGb3JjZWFibGU6IGZ1bmN0aW9uKHgpCi0gICAgewotICAgICAgICB0aGlzLl9zdWdnZXN0
Rm9yY2VhYmxlID0geDsKLSAgICB9LAotCi0gICAgc2V0U3VnZ2VzdEJveEVuYWJsZWQ6IGZ1bmN0
aW9uKGNsYXNzTmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N1Z2dlc3RCb3hDbGFzc05hbWUg
PSBjbGFzc05hbWU7Ci0gICAgfSwKLQotICAgIHJlbmRlckFzQmxvY2s6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX3Byb3h5RWxlbWVudERpc3BsYXkgPSAiYmxvY2siOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBDbGllbnRzIHNob3VsZCBuZXZlciBhdHRhY2ggYW55IGV2ZW50
IGxpc3RlbmVycyB0byB0aGUgfGVsZW1lbnR8LiBJbnN0ZWFkLAotICAgICAqIHRoZXkgc2hvdWxk
IHVzZSB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHRvIGF0dGFjaCBsaXN0ZW5lcnMgZm9yIGJ1
YmJsaW5nIGV2ZW50cy4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAot
ICAgICAqLwotICAgIGF0dGFjaDogZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9hdHRhY2hJbnRlcm5hbChlbGVtZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQ2xpZW50cyBzaG91bGQgbmV2ZXIgYXR0YWNoIGFueSBldmVudCBsaXN0ZW5lcnMgdG8g
dGhlIHxlbGVtZW50fC4gSW5zdGVhZCwKLSAgICAgKiB0aGV5IHNob3VsZCB1c2UgdGhlIHJlc3Vs
dCBvZiB0aGlzIG1ldGhvZCB0byBhdHRhY2ggbGlzdGVuZXJzIGZvciBidWJibGluZyBldmVudHMK
LSAgICAgKiBvciB0aGUgfGJsdXJMaXN0ZW5lcnwgcGFyYW1ldGVyIHRvIHJlZ2lzdGVyIGEgImJs
dXIiIGV2ZW50IGxpc3RlbmVyIG9uIHRoZSB8ZWxlbWVudHwKLSAgICAgKiAoc2luY2UgdGhlICJi
bHVyIiBldmVudCBkb2VzIG5vdCBidWJibGUuKQotICAgICAqCi0gICAgICogQHBhcmFtIHtFbGVt
ZW50fSBlbGVtZW50Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbihFdmVudCl9IGJsdXJMaXN0ZW5l
cgotICAgICAqLwotICAgIGF0dGFjaEFuZFN0YXJ0RWRpdGluZzogZnVuY3Rpb24oZWxlbWVudCwg
Ymx1ckxpc3RlbmVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fYXR0YWNoSW50ZXJuYWwoZWxlbWVu
dCk7Ci0gICAgICAgIHRoaXMuX3N0YXJ0RWRpdGluZyhibHVyTGlzdGVuZXIpOwotICAgICAgICBy
ZXR1cm4gdGhpcy5wcm94eUVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9hdHRhY2hJbnRlcm5hbDog
ZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnByb3h5RWxlbWVudCkK
LSAgICAgICAgICAgIHRocm93ICJDYW5ub3QgYXR0YWNoIGFuIGF0dGFjaGVkIFRleHRQcm9tcHQi
OwotICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLQotICAgICAgICB0aGlzLl9ib3Vu
ZE9uS2V5RG93biA9IHRoaXMub25LZXlEb3duLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuX2Jv
dW5kT25Nb3VzZVdoZWVsID0gdGhpcy5vbk1vdXNlV2hlZWwuYmluZCh0aGlzKTsKLSAgICAgICAg
dGhpcy5fYm91bmRTZWxlY3RTdGFydCA9IHRoaXMuX3NlbGVjdFN0YXJ0LmJpbmQodGhpcyk7Ci0g
ICAgICAgIHRoaXMuX3Byb3h5RWxlbWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHRoaXMuX3Byb3h5RWxlbWVudC5zdHlsZS5kaXNwbGF5
ID0gdGhpcy5fcHJveHlFbGVtZW50RGlzcGxheTsKLSAgICAgICAgZWxlbWVudC5wYXJlbnRFbGVt
ZW50Lmluc2VydEJlZm9yZSh0aGlzLnByb3h5RWxlbWVudCwgZWxlbWVudCk7Ci0gICAgICAgIHRo
aXMucHJveHlFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICAgICAgICB0aGlzLl9lbGVt
ZW50LmFkZFN0eWxlQ2xhc3MoInRleHQtcHJvbXB0Iik7Ci0gICAgICAgIHRoaXMuX2VsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2JvdW5kT25LZXlEb3duLCBmYWxzZSk7
Ci0gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V3aGVlbCIsIHRo
aXMuX2JvdW5kT25Nb3VzZVdoZWVsLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLCB0aGlzLl9ib3VuZFNlbGVjdFN0YXJ0LCBmYWxz
ZSk7Ci0KLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdWdnZXN0Qm94Q2xhc3NOYW1lID09PSAi
c3RyaW5nIikKLSAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3RCb3ggPSBuZXcgV2ViSW5zcGVjdG9y
LlN1Z2dlc3RCb3godGhpcywgdGhpcy5fZWxlbWVudCwgdGhpcy5fc3VnZ2VzdEJveENsYXNzTmFt
ZSk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMucHJveHlFbGVtZW50OwotICAgIH0sCi0KLSAgICBk
ZXRhY2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlbW92ZUZyb21FbGVtZW50
KCk7Ci0gICAgICAgIHRoaXMucHJveHlFbGVtZW50LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHRoaXMuX2VsZW1lbnQsIHRoaXMucHJveHlFbGVtZW50KTsKLSAgICAgICAgdGhpcy5wcm94eUVs
ZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnByb3h5RWxlbWVudCk7Ci0gICAg
ICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidGV4dC1wcm9tcHQiKTsKLSAgICAg
ICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fYm91
bmRPbktleURvd24sIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZXdoZWVsIiwgdGhpcy5fYm91bmRPbk1vdXNlV2hlZWwsIGZhbHNlKTsKLSAg
ICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsIHRo
aXMuX2JvdW5kU2VsZWN0U3RhcnQsIGZhbHNlKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3Byb3h5
RWxlbWVudDsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnJlc3RvcmVGb2N1c0Zyb21FbGVtZW50KHRo
aXMuX2VsZW1lbnQpOwotICAgIH0sCi0KLSAgICBnZXQgdGV4dCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudDsKLSAgICB9LAotCi0gICAgc2V0IHRleHQo
eCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlbW92ZVN1Z2dlc3Rpb25BaWRzKCk7Ci0gICAgICAg
IGlmICgheCkgewotICAgICAgICAgICAgLy8gQXBwZW5kIGEgYnJlYWsgZWxlbWVudCBpbnN0ZWFk
IG9mIHNldHRpbmcgdGV4dENvbnRlbnQgdG8gbWFrZSBzdXJlIHRoZSBzZWxlY3Rpb24gaXMgaW5z
aWRlIHRoZSBwcm9tcHQuCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImJyIikpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2VsZW1l
bnQudGV4dENvbnRlbnQgPSB4OwotCi0gICAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmRPZlByb21w
dCgpOwotICAgICAgICB0aGlzLl9lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7Ci0gICAgfSwKLQot
ICAgIF9yZW1vdmVGcm9tRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5j
bGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVu
dExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fYm91bmRPbktleURvd24sIGZhbHNlKTsKLSAgICAg
ICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsIHRoaXMu
X2JvdW5kU2VsZWN0U3RhcnQsIGZhbHNlKTsKLSAgICAgICAgaWYgKHRoaXMuX2lzRWRpdGluZykK
LSAgICAgICAgICAgIHRoaXMuX3N0b3BFZGl0aW5nKCk7Ci0gICAgICAgIGlmICh0aGlzLl9zdWdn
ZXN0Qm94KQotICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdEJveC5yZW1vdmVGcm9tRWxlbWVudCgp
OwotICAgIH0sCi0KLSAgICBfc3RhcnRFZGl0aW5nOiBmdW5jdGlvbihibHVyTGlzdGVuZXIpCi0g
ICAgewotICAgICAgICB0aGlzLl9pc0VkaXRpbmcgPSB0cnVlOwotICAgICAgICB0aGlzLl9lbGVt
ZW50LmFkZFN0eWxlQ2xhc3MoImVkaXRpbmciKTsKLSAgICAgICAgaWYgKGJsdXJMaXN0ZW5lcikg
ewotICAgICAgICAgICAgdGhpcy5fYmx1ckxpc3RlbmVyID0gYmx1ckxpc3RlbmVyOwotICAgICAg
ICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgdGhpcy5fYmx1ckxp
c3RlbmVyLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fb2xkVGFiSW5kZXggPSB0
aGlzLl9lbGVtZW50LnRhYkluZGV4OwotICAgICAgICBpZiAodGhpcy5fZWxlbWVudC50YWJJbmRl
eCA8IDApCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnRhYkluZGV4ID0gMDsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLnNldEN1cnJlbnRGb2N1c0VsZW1lbnQodGhpcy5fZWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIF9zdG9wRWRpdGluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
ZWxlbWVudC50YWJJbmRleCA9IHRoaXMuX29sZFRhYkluZGV4OwotICAgICAgICBpZiAodGhpcy5f
Ymx1ckxpc3RlbmVyKQotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3Rl
bmVyKCJibHVyIiwgdGhpcy5fYmx1ckxpc3RlbmVyLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX2Vs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZWRpdGluZyIpOwotICAgICAgICBkZWxldGUgdGhpcy5f
aXNFZGl0aW5nOwotICAgIH0sCi0KLSAgICBfcmVtb3ZlU3VnZ2VzdGlvbkFpZHM6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUoKTsKLSAgICAgICAgdGhp
cy5oaWRlU3VnZ2VzdEJveCgpOwotICAgIH0sCi0KLSAgICBfc2VsZWN0U3RhcnQ6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGlvblRpbWVvdXQpCi0gICAg
ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VsZWN0aW9uVGltZW91dCk7Ci0KLSAgICAgICAg
dGhpcy5fcmVtb3ZlU3VnZ2VzdGlvbkFpZHMoKTsKLQotICAgICAgICBmdW5jdGlvbiBtb3ZlQmFj
a0lmT3V0c2lkZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rp
b25UaW1lb3V0OwotICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSAm
JiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLm1vdmVDYXJldFRvRW5kT2ZQcm9tcHQoKTsKLSAgICAgICAgICAgICAgICB0aGlzLmF1dG9D
b21wbGV0ZVNvb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X3NlbGVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KG1vdmVCYWNrSWZPdXRzaWRlLmJpbmQodGhp
cyksIDEwMCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGZv
cmNlCi0gICAgICovCi0gICAgZGVmYXVsdEtleUhhbmRsZXI6IGZ1bmN0aW9uKGV2ZW50LCBmb3Jj
ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUoKTsKLSAgICAgICAgdGhp
cy5hdXRvQ29tcGxldGVTb29uKGZvcmNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0s
Ci0KLSAgICBvbk1vdXNlV2hlZWw6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgLy8g
U3ViY2xhc3NlcyBjYW4gaW1wbGVtZW50LiAKLSAgICB9LAotCi0gICAgb25LZXlEb3duOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBoYW5kbGVkID0gZmFsc2U7Ci0gICAgICAg
IHZhciBpbnZva2VEZWZhdWx0ID0gdHJ1ZTsKLQotICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlk
ZW50aWZpZXIpIHsKLSAgICAgICAgY2FzZSAiVXAiOgotICAgICAgICAgICAgaGFuZGxlZCA9IHRo
aXMudXBLZXlQcmVzc2VkKGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
ICJEb3duIjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLmRvd25LZXlQcmVzc2VkKGV2ZW50
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJQYWdlVXAiOgotICAgICAgICAg
ICAgaGFuZGxlZCA9IHRoaXMucGFnZVVwS2V5UHJlc3NlZChldmVudCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAiUGFnZURvd24iOgotICAgICAgICAgICAgaGFuZGxlZCA9IHRo
aXMucGFnZURvd25LZXlQcmVzc2VkKGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICJVKzAwMDkiOiAvLyBUYWIKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLnRhYktl
eVByZXNzZWQoZXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIkVudGVy
IjoKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLmVudGVyS2V5UHJlc3NlZChldmVudCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiTGVmdCI6Ci0gICAgICAgIGNhc2UgIkhv
bWUiOgotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU3VnZ2VzdGlvbkFpZHMoKTsKLSAgICAgICAg
ICAgIGludm9rZURlZmF1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlICJSaWdodCI6Ci0gICAgICAgIGNhc2UgIkVuZCI6Ci0gICAgICAgICAgICBpZiAodGhpcy5p
c0NhcmV0QXRFbmRPZlByb21wdCgpKQotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLmFj
Y2VwdEF1dG9Db21wbGV0ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRo
aXMuX3JlbW92ZVN1Z2dlc3Rpb25BaWRzKCk7Ci0gICAgICAgICAgICBpbnZva2VEZWZhdWx0ID0g
ZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiVSswMDFCIjogLy8gRXNj
Ci0gICAgICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9zdWdnZXN0Qm94LmhpZGUoKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
ICJVKzAwMjAiOiAvLyBTcGFjZQotICAgICAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RGb3JjZWFi
bGUgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYm
ICFldmVudC5zaGlmdEtleSkgewotICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEtleUhhbmRs
ZXIoZXZlbnQsIHRydWUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIkFsdCI6Ci0gICAgICAg
IGNhc2UgIk1ldGEiOgotICAgICAgICBjYXNlICJTaGlmdCI6Ci0gICAgICAgIGNhc2UgIkNvbnRy
b2wiOgotICAgICAgICAgICAgaW52b2tlRGVmYXVsdCA9IGZhbHNlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWhhbmRsZWQgJiYgaW52b2tlRGVmYXVsdCkK
LSAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLmRlZmF1bHRLZXlIYW5kbGVyKGV2ZW50KTsKLQot
ICAgICAgICBpZiAoaGFuZGxlZCkKLSAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0K
LSAgICAgICAgcmV0dXJuIGhhbmRsZWQ7Ci0gICAgfSwKLQotICAgIGFjY2VwdEF1dG9Db21wbGV0
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlOwotICAgICAg
ICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXN1bHQgPSB0
aGlzLl9zdWdnZXN0Qm94LmFjY2VwdFN1Z2dlc3Rpb24oKTsKLSAgICAgICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmFjY2VwdFN1Z2dlc3Rpb24oKTsKLQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW49fSBpbmNsdWRlVGltZW91dAotICAgICAqLwotICAgIGNsZWFyQXV0b0NvbXBsZXRlOiBmdW5j
dGlvbihpbmNsdWRlVGltZW91dCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmNsdWRlVGltZW91dCAm
JiB0aGlzLl9jb21wbGV0ZVRpbWVvdXQpIHsKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlz
Ll9jb21wbGV0ZVRpbWVvdXQpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbXBsZXRlVGlt
ZW91dDsKLSAgICAgICAgfQotICAgICAgICBkZWxldGUgdGhpcy5fd2FpdGluZ0ZvckNvbXBsZXRp
b25zOwotCi0gICAgICAgIGlmICghdGhpcy5hdXRvQ29tcGxldGVFbGVtZW50KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLmF1dG9Db21wbGV0ZUVsZW1lbnQucGFyZW50
Tm9kZSkKLSAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudC5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlz
LmF1dG9Db21wbGV0ZUVsZW1lbnQ7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl91c2VyRW50ZXJlZFJh
bmdlIHx8ICF0aGlzLl91c2VyRW50ZXJlZFRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdGhpcy5fdXNlckVudGVyZWRSYW5nZS5kZWxldGVDb250ZW50cygpOwotICAgICAgICB0
aGlzLl9lbGVtZW50Lm5vcm1hbGl6ZSgpOwotCi0gICAgICAgIHZhciB1c2VyVGV4dE5vZGUgPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl91c2VyRW50ZXJlZFRleHQpOwotICAgICAgICB0
aGlzLl91c2VyRW50ZXJlZFJhbmdlLmluc2VydE5vZGUodXNlclRleHROb2RlKTsKLQotICAgICAg
ICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICBz
ZWxlY3Rpb25SYW5nZS5zZXRTdGFydCh1c2VyVGV4dE5vZGUsIHRoaXMuX3VzZXJFbnRlcmVkVGV4
dC5sZW5ndGgpOwotICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRFbmQodXNlclRleHROb2RlLCB0
aGlzLl91c2VyRW50ZXJlZFRleHQubGVuZ3RoKTsKLQotICAgICAgICB2YXIgc2VsZWN0aW9uID0g
d2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2Vz
KCk7Ci0gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShzZWxlY3Rpb25SYW5nZSk7Ci0KLSAgICAg
ICAgZGVsZXRlIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2U7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl91
c2VyRW50ZXJlZFRleHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVh
bj19IGZvcmNlCi0gICAgICovCi0gICAgYXV0b0NvbXBsZXRlU29vbjogZnVuY3Rpb24oZm9yY2Up
Ci0gICAgewotICAgICAgICB2YXIgaW1tZWRpYXRlbHkgPSB0aGlzLmlzU3VnZ2VzdEJveFZpc2li
bGUoKSB8fCBmb3JjZTsKLSAgICAgICAgaWYgKCF0aGlzLl9jb21wbGV0ZVRpbWVvdXQpCi0gICAg
ICAgICAgICB0aGlzLl9jb21wbGV0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuY29tcGxldGUu
YmluZCh0aGlzLCB0cnVlLCBmb3JjZSksIGltbWVkaWF0ZWx5ID8gMCA6IDI1MCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJldmVyc2UKLSAgICAgKi8KLSAg
ICBjb21wbGV0ZTogZnVuY3Rpb24oYXV0bywgZm9yY2UsIHJldmVyc2UpCi0gICAgewotICAgICAg
ICB0aGlzLmNsZWFyQXV0b0NvbXBsZXRlKHRydWUpOwotICAgICAgICB2YXIgc2VsZWN0aW9uID0g
d2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNl
bGVjdGlvbi5nZXRSYW5nZUF0KDApOwotICAgICAgICB2YXIgaXNFbXB0eUlucHV0ID0gc2VsZWN0
aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgPT09IHRoaXMuX2VsZW1lbnQ7IC8vIHRo
aXMuX2VsZW1lbnQgaGFzIG5vIGNoaWxkIFRleHQgbm9kZXMuCi0KLSAgICAgICAgdmFyIHNob3Vs
ZEV4aXQ7Ci0KLSAgICAgICAgLy8gRG8gbm90IGF0dGVtcHQgdG8gYXV0by1jb21wbGV0ZSBhbiBl
bXB0eSBpbnB1dCBpbiB0aGUgYXV0byBtb2RlIChvbmx5IG9uIGRlbWFuZCkuCi0gICAgICAgIGlm
IChhdXRvICYmIGlzRW1wdHlJbnB1dCAmJiAhZm9yY2UpCi0gICAgICAgICAgICBzaG91bGRFeGl0
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIWF1dG8gJiYgIWlzRW1wdHlJbnB1dCAmJiAhc2Vs
ZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMuX2Vs
ZW1lbnQpKQotICAgICAgICAgICAgc2hvdWxkRXhpdCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYg
KGF1dG8gJiYgIWZvcmNlICYmICF0aGlzLmlzQ2FyZXRBdEVuZE9mUHJvbXB0KCkgJiYgIXRoaXMu
aXNTdWdnZXN0Qm94VmlzaWJsZSgpKQotICAgICAgICAgICAgc2hvdWxkRXhpdCA9IHRydWU7Ci0g
ICAgICAgIGVsc2UgaWYgKCFzZWxlY3Rpb24uaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICBzaG91
bGRFeGl0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIWZvcmNlKSB7Ci0gICAgICAgICAgICAv
LyBCVUc3MjAxODogRG8gbm90IHNob3cgc3VnZ2VzdCBib3ggaWYgY2FyZXQgaXMgZm9sbG93ZWQg
YnkgYSBub24tc3RvcCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICB2YXIgd29yZFN1ZmZpeFJhbmdl
ID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFu
Z2UuZW5kT2Zmc2V0LCB0aGlzLl9jb21wbGV0aW9uU3RvcENoYXJhY3RlcnMsIHRoaXMuX2VsZW1l
bnQsICJmb3J3YXJkIik7Ci0gICAgICAgICAgICBpZiAod29yZFN1ZmZpeFJhbmdlLnRvU3RyaW5n
KCkubGVuZ3RoKQotICAgICAgICAgICAgICAgIHNob3VsZEV4aXQgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChzaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICB0aGlzLmhpZGVTdWdnZXN0
Qm94KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgd29y
ZFByZWZpeFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQo
c2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHRoaXMuX2NvbXBsZXRpb25TdG9wQ2hhcmFjdGVy
cywgdGhpcy5fZWxlbWVudCwgImJhY2t3YXJkIik7Ci0gICAgICAgIHRoaXMuX3dhaXRpbmdGb3JD
b21wbGV0aW9ucyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2xvYWRDb21wbGV0aW9ucyh0aGlzLnBy
b3h5RWxlbWVudCwgd29yZFByZWZpeFJhbmdlLCBmb3JjZSwgdGhpcy5fY29tcGxldGlvbnNSZWFk
eS5iaW5kKHRoaXMsIHNlbGVjdGlvbiwgYXV0bywgd29yZFByZWZpeFJhbmdlLCAhIXJldmVyc2Up
KTsKLSAgICB9LAotCi0gICAgX2JveEZvckFuY2hvckF0U3RhcnQ6IGZ1bmN0aW9uKHNlbGVjdGlv
biwgdGV4dFJhbmdlKQotICAgIHsKLSAgICAgICAgdmFyIHJhbmdlQ29weSA9IHNlbGVjdGlvbi5n
ZXRSYW5nZUF0KDApLmNsb25lUmFuZ2UoKTsKLSAgICAgICAgdmFyIGFuY2hvckVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGFuY2hvckVsZW1lbnQudGV4
dENvbnRlbnQgPSAiXHUyMDBCIjsKLSAgICAgICAgdGV4dFJhbmdlLmluc2VydE5vZGUoYW5jaG9y
RWxlbWVudCk7Ci0gICAgICAgIHZhciBib3ggPSBhbmNob3JFbGVtZW50LmJveEluV2luZG93KHdp
bmRvdyk7Ci0gICAgICAgIGFuY2hvckVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChh
bmNob3JFbGVtZW50KTsKLSAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwotICAg
ICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2VDb3B5KTsKLSAgICAgICAgcmV0dXJuIGJveDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gY29tcGxl
dGlvbnMKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gd29yZFByZWZpeExlbmd0aAotICAgICAqLwot
ICAgIF9idWlsZENvbW1vblByZWZpeDogZnVuY3Rpb24oY29tcGxldGlvbnMsIHdvcmRQcmVmaXhM
ZW5ndGgpCi0gICAgewotICAgICAgICB2YXIgY29tbW9uUHJlZml4ID0gY29tcGxldGlvbnNbMF07
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBjb21wbGV0aW9uID0gY29tcGxldGlvbnNbaV07Ci0gICAgICAgICAg
ICB2YXIgbGFzdEluZGV4ID0gTWF0aC5taW4oY29tbW9uUHJlZml4Lmxlbmd0aCwgY29tcGxldGlv
bi5sZW5ndGgpOwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IHdvcmRQcmVmaXhMZW5ndGg7IGog
PCBsYXN0SW5kZXg7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChjb21tb25QcmVmaXhbal0g
IT09IGNvbXBsZXRpb25bal0pIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4ID0g
Y29tbW9uUHJlZml4LnN1YnN0cigwLCBqKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBjb21tb25QcmVmaXg7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7U2VsZWN0
aW9ufSBzZWxlY3Rpb24KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dG8KLSAgICAgKiBAcGFy
YW0ge1JhbmdlfSBvcmlnaW5hbFdvcmRQcmVmaXhSYW5nZQotICAgICAqIEBwYXJhbSB7Ym9vbGVh
bn0gcmV2ZXJzZQotICAgICAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSBjb21wbGV0aW9ucwot
ICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gc2VsZWN0ZWRJbmRleAotICAgICAqLwotICAgIF9jb21w
bGV0aW9uc1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24sIGF1dG8sIG9yaWdpbmFsV29yZFByZWZp
eFJhbmdlLCByZXZlcnNlLCBjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5fd2FpdGluZ0ZvckNvbXBsZXRpb25zIHx8ICFjb21wbGV0aW9ucy5sZW5n
dGgpIHsKLSAgICAgICAgICAgIHRoaXMuaGlkZVN1Z2dlc3RCb3goKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBkZWxldGUgdGhpcy5fd2FpdGluZ0ZvckNvbXBsZXRp
b25zOwotCi0gICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0
KDApOwotCi0gICAgICAgIHZhciBmdWxsV29yZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTsKLSAgICAgICAgZnVsbFdvcmRSYW5nZS5zZXRTdGFydChvcmlnaW5hbFdvcmRQcmVmaXhSYW5n
ZS5zdGFydENvbnRhaW5lciwgb3JpZ2luYWxXb3JkUHJlZml4UmFuZ2Uuc3RhcnRPZmZzZXQpOwot
ICAgICAgICBmdWxsV29yZFJhbmdlLnNldEVuZChzZWxlY3Rpb25SYW5nZS5lbmRDb250YWluZXIs
IHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7Ci0KLSAgICAgICAgaWYgKG9yaWdpbmFsV29yZFBy
ZWZpeFJhbmdlLnRvU3RyaW5nKCkgKyBzZWxlY3Rpb25SYW5nZS50b1N0cmluZygpICE9IGZ1bGxX
b3JkUmFuZ2UudG9TdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBzZWxl
Y3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleCB8fCAwOwotCi0gICAgICAgIHRoaXMuX3VzZXJFbnRl
cmVkUmFuZ2UgPSBmdWxsV29yZFJhbmdlOwotICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFRleHQg
PSBmdWxsV29yZFJhbmdlLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RC
b3gpCi0gICAgICAgICAgICB0aGlzLl9zdWdnZXN0Qm94LnVwZGF0ZVN1Z2dlc3Rpb25zKHRoaXMu
X2JveEZvckFuY2hvckF0U3RhcnQoc2VsZWN0aW9uLCBmdWxsV29yZFJhbmdlKSwgY29tcGxldGlv
bnMsIHNlbGVjdGVkSW5kZXgsICF0aGlzLmlzQ2FyZXRBdEVuZE9mUHJvbXB0KCksIHRoaXMuX3Vz
ZXJFbnRlcmVkVGV4dCk7Ci0KLSAgICAgICAgdmFyIHdvcmRQcmVmaXhMZW5ndGggPSBvcmlnaW5h
bFdvcmRQcmVmaXhSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKLQotICAgICAgICBpZiAoYXV0bykg
ewotICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbc2VsZWN0ZWRJ
bmRleF07Ci0gICAgICAgICAgICB2YXIgY29tbW9uUHJlZml4ID0gdGhpcy5fYnVpbGRDb21tb25Q
cmVmaXgoY29tcGxldGlvbnMsIHdvcmRQcmVmaXhMZW5ndGgpOwotCi0gICAgICAgICAgICB0aGlz
Ll9jb21tb25QcmVmaXggPSBjb21tb25QcmVmaXg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbc2VsZWN0ZWRJbmRleF07Ci0gICAgICAgICAg
ICAgICAgd29yZFByZWZpeExlbmd0aCA9IGNvbXBsZXRpb25UZXh0Lmxlbmd0aDsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbW1vblByZWZpeCA9IHRoaXMuX2J1
aWxkQ29tbW9uUHJlZml4KGNvbXBsZXRpb25zLCB3b3JkUHJlZml4TGVuZ3RoKTsKLSAgICAgICAg
ICAgICAgICB3b3JkUHJlZml4TGVuZ3RoID0gY29tbW9uUHJlZml4Lmxlbmd0aDsKLQotICAgICAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICAgICAgICAg
IHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zW3NlbGVjdGVkSW5kZXhdOwotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRleHQgPSBm
dWxsV29yZFJhbmdlLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5k
SW5kZXggPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNv
bXBsZXRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29t
cGxldGlvbnNbaV0gPT09IGN1cnJlbnRUZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvdW5kSW5kZXggPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIG5leHRJbmRleCA9IGZvdW5kSW5kZXggKyAocmV2ZXJzZSA/IC0xIDogMSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ID09PSBudWxsIHx8IG5leHRJbmRleCA+
PSBjb21wbGV0aW9ucy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxl
dGlvblRleHQgPSBjb21wbGV0aW9uc1tzZWxlY3RlZEluZGV4XTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmV4dEluZGV4IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBj
b21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zW2NvbXBsZXRpb25zLmxlbmd0aCAtIDFdOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxl
dGlvblRleHQgPSBjb21wbGV0aW9uc1tuZXh0SW5kZXhdOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdXRvKSB7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5pc0NhcmV0QXRFbmRPZlByb21wdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fdXNlckVudGVyZWRSYW5nZS5kZWxldGVDb250ZW50cygpOwotICAgICAgICAgICAgICAgIHRo
aXMuX2VsZW1lbnQubm9ybWFsaXplKCk7Ci0gICAgICAgICAgICAgICAgdmFyIGZpbmFsU2VsZWN0
aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgICAgIHZhciBw
cmVmaXhUZXh0ID0gY29tcGxldGlvblRleHQuc3Vic3RyaW5nKDAsIHdvcmRQcmVmaXhMZW5ndGgp
OwotICAgICAgICAgICAgICAgIHZhciBzdWZmaXhUZXh0ID0gY29tcGxldGlvblRleHQuc3Vic3Ry
aW5nKHdvcmRQcmVmaXhMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgdmFyIHByZWZpeFRleHRO
b2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocHJlZml4VGV4dCk7Ci0gICAgICAgICAgICAg
ICAgZnVsbFdvcmRSYW5nZS5pbnNlcnROb2RlKHByZWZpeFRleHROb2RlKTsKLQotICAgICAgICAg
ICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKLSAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZUVsZW1lbnQuY2xhc3NO
YW1lID0gImF1dG8tY29tcGxldGUtdGV4dCI7Ci0gICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29t
cGxldGVFbGVtZW50LnRleHRDb250ZW50ID0gc3VmZml4VGV4dDsKLQotICAgICAgICAgICAgICAg
IHByZWZpeFRleHROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuYXV0b0NvbXBsZXRl
RWxlbWVudCwgcHJlZml4VGV4dE5vZGUubmV4dFNpYmxpbmcpOwotCi0gICAgICAgICAgICAgICAg
ZmluYWxTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChwcmVmaXhUZXh0Tm9kZSwgd29yZFByZWZpeExl
bmd0aCk7Ci0gICAgICAgICAgICAgICAgZmluYWxTZWxlY3Rpb25SYW5nZS5zZXRFbmQocHJlZml4
VGV4dE5vZGUsIHdvcmRQcmVmaXhMZW5ndGgpOwotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5y
ZW1vdmVBbGxSYW5nZXMoKTsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UoZmlu
YWxTZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgdGhpcy5fYXBwbHlTdWdnZXN0aW9uKGNvbXBsZXRpb25UZXh0LCBjb21wbGV0aW9ucy5s
ZW5ndGggPiAxLCBvcmlnaW5hbFdvcmRQcmVmaXhSYW5nZSk7Ci0gICAgfSwKLQotICAgIF9jb21w
bGV0ZUNvbW1vblByZWZpeDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmF1
dG9Db21wbGV0ZUVsZW1lbnQgfHwgIXRoaXMuX2NvbW1vblByZWZpeCB8fCAhdGhpcy5fdXNlckVu
dGVyZWRUZXh0IHx8ICF0aGlzLl9jb21tb25QcmVmaXguc3RhcnRzV2l0aCh0aGlzLl91c2VyRW50
ZXJlZFRleHQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghdGhpcy5pc1N1
Z2dlc3RCb3hWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgIHRoaXMuYWNjZXB0QXV0b0NvbXBsZXRl
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmF1dG9D
b21wbGV0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLl9jb21tb25QcmVmaXguc3Vic3RyaW5n
KHRoaXMuX3VzZXJFbnRlcmVkVGV4dC5sZW5ndGgpOwotICAgICAgICB0aGlzLmFjY2VwdFN1Z2dl
c3Rpb24odHJ1ZSkKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNv
bXBsZXRpb25UZXh0Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdn
ZXN0aW9uCi0gICAgICovCi0gICAgYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbihjb21wbGV0aW9u
VGV4dCwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fYXBw
bHlTdWdnZXN0aW9uKGNvbXBsZXRpb25UZXh0LCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29tcGxldGlvblRleHQK
LSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24KLSAgICAg
KiBAcGFyYW0ge1JhbmdlPX0gb3JpZ2luYWxQcmVmaXhSYW5nZQotICAgICAqLwotICAgIF9hcHBs
eVN1Z2dlc3Rpb246IGZ1bmN0aW9uKGNvbXBsZXRpb25UZXh0LCBpc0ludGVybWVkaWF0ZVN1Z2dl
c3Rpb24sIG9yaWdpbmFsUHJlZml4UmFuZ2UpCi0gICAgewotICAgICAgICB2YXIgd29yZFByZWZp
eExlbmd0aDsKLSAgICAgICAgaWYgKG9yaWdpbmFsUHJlZml4UmFuZ2UpCi0gICAgICAgICAgICB3
b3JkUHJlZml4TGVuZ3RoID0gb3JpZ2luYWxQcmVmaXhSYW5nZS50b1N0cmluZygpLmxlbmd0aDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgd29yZFByZWZpeExlbmd0aCA9IHRoaXMuX3VzZXJF
bnRlcmVkVGV4dCA/IHRoaXMuX3VzZXJFbnRlcmVkVGV4dC5sZW5ndGggOiAwOwotCi0gICAgICAg
IHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKLSAgICAgICAgdGhpcy5f
ZWxlbWVudC5ub3JtYWxpemUoKTsKLSAgICAgICAgdmFyIGZpbmFsU2VsZWN0aW9uUmFuZ2UgPSBk
b2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICB2YXIgY29tcGxldGlvblRleHROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29tcGxldGlvblRleHQpOwotICAgICAgICB0aGlzLl91
c2VyRW50ZXJlZFJhbmdlLmluc2VydE5vZGUoY29tcGxldGlvblRleHROb2RlKTsKLSAgICAgICAg
aWYgKHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudCAmJiB0aGlzLmF1dG9Db21wbGV0ZUVsZW1lbnQu
cGFyZW50Tm9kZSkgewotICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVFbGVtZW50LnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5hdXRvQ29tcGxldGVFbGVtZW50KTsKLSAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLmF1dG9Db21wbGV0ZUVsZW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKQotICAgICAgICAgICAgZmluYWxTZWxlY3Rpb25S
YW5nZS5zZXRTdGFydChjb21wbGV0aW9uVGV4dE5vZGUsIHdvcmRQcmVmaXhMZW5ndGgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KGNvbXBs
ZXRpb25UZXh0Tm9kZSwgY29tcGxldGlvblRleHQubGVuZ3RoKTsKLQotICAgICAgICBmaW5hbFNl
bGVjdGlvblJhbmdlLnNldEVuZChjb21wbGV0aW9uVGV4dE5vZGUsIGNvbXBsZXRpb25UZXh0Lmxl
bmd0aCk7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsK
LSAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwotICAgICAgICBzZWxlY3Rpb24u
YWRkUmFuZ2UoZmluYWxTZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgIGlmIChpc0ludGVybWVkaWF0
ZVN1Z2dlc3Rpb24pCi0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdC5FdmVudHMuSXRlbUFwcGxpZWQsIHsgaXRlbVRleHQ6IGNv
bXBsZXRpb25UZXh0IH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xl
YW49fSBwcmVmaXhBY2NlcHRlZAotICAgICAqLwotICAgIGFjY2VwdFN1Z2dlc3Rpb246IGZ1bmN0
aW9uKHByZWZpeEFjY2VwdGVkKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzQWNjZXB0aW5n
U3VnZ2VzdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIXRo
aXMuYXV0b0NvbXBsZXRlRWxlbWVudCB8fCAhdGhpcy5hdXRvQ29tcGxldGVFbGVtZW50LnBhcmVu
dE5vZGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHRleHQgPSB0
aGlzLmF1dG9Db21wbGV0ZUVsZW1lbnQudGV4dENvbnRlbnQ7Ci0gICAgICAgIHZhciB0ZXh0Tm9k
ZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOwotICAgICAgICB0aGlzLmF1dG9Db21w
bGV0ZUVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGV4dE5vZGUsIHRoaXMuYXV0b0Nv
bXBsZXRlRWxlbWVudCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLmF1dG9Db21wbGV0ZUVsZW1lbnQ7
Ci0KLSAgICAgICAgdmFyIGZpbmFsU2VsZWN0aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5n
ZSgpOwotICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHRleHROb2RlLCB0ZXh0
Lmxlbmd0aCk7Ci0gICAgICAgIGZpbmFsU2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKHRleHROb2RlLCB0
ZXh0Lmxlbmd0aCk7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rp
b24oKTsKLSAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwotICAgICAgICBzZWxl
Y3Rpb24uYWRkUmFuZ2UoZmluYWxTZWxlY3Rpb25SYW5nZSk7Ci0KLSAgICAgICAgaWYgKCFwcmVm
aXhBY2NlcHRlZCkgewotICAgICAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdEJveCgpOwotICAgICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQuRXZlbnRzLkl0ZW1BY2NlcHRlZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhp
cy5hdXRvQ29tcGxldGVTb29uKHRydWUpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0s
Ci0KLSAgICBoaWRlU3VnZ2VzdEJveDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuaXNTdWdnZXN0Qm94VmlzaWJsZSgpKQotICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdEJveC5o
aWRlKCk7Ci0gICAgfSwKLQotICAgIGlzU3VnZ2VzdEJveFZpc2libGU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94ICYmIHRoaXMuX3N1Z2dlc3RCb3gu
dmlzaWJsZSgpOwotICAgIH0sCi0KLSAgICBpc0NhcmV0SW5zaWRlUHJvbXB0OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5pc0luc2VydGlvbkNhcmV0SW5z
aWRlKCk7Ci0gICAgfSwKLQotICAgIGlzQ2FyZXRBdEVuZE9mUHJvbXB0OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAg
ICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50IHx8ICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdl
ID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7Ci0gICAgICAgIHZhciBub2RlID0gc2VsZWN0aW9u
UmFuZ2Uuc3RhcnRDb250YWluZXI7Ci0gICAgICAgIGlmICghbm9kZS5pc1NlbGZPckRlc2NlbmRh
bnQodGhpcy5fZWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHNlbGVjdGlvblJhbmdlLnN0
YXJ0T2Zmc2V0IDwgbm9kZS5ub2RlVmFsdWUubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHZhciBmb3VuZE5leHRUZXh0ID0gZmFsc2U7Ci0gICAgICAgIHdoaWxl
IChub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05P
REUgJiYgbm9kZS5ub2RlVmFsdWUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvdW5k
TmV4dFRleHQgJiYgKCF0aGlzLmF1dG9Db21wbGV0ZUVsZW1lbnQgfHwgIXRoaXMuYXV0b0NvbXBs
ZXRlRWxlbWVudC5pc0FuY2VzdG9yKG5vZGUpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvdW5kTmV4dFRleHQgPSB0cnVlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKHRoaXMuX2Vs
ZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAg
IGlzQ2FyZXRPbkZpcnN0TGluZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVj
dGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgdmFyIGZvY3VzTm9kZSA9IHNl
bGVjdGlvbi5mb2N1c05vZGU7Ci0gICAgICAgIGlmICghZm9jdXNOb2RlIHx8IGZvY3VzTm9kZS5u
b2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgfHwgZm9jdXNOb2RlLnBhcmVudE5vZGUgIT09IHRo
aXMuX2VsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoZm9j
dXNOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpLmlu
ZGV4T2YoIlxuIikgIT09IC0xKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBm
b2N1c05vZGUgPSBmb2N1c05vZGUucHJldmlvdXNTaWJsaW5nOwotCi0gICAgICAgIHdoaWxlIChm
b2N1c05vZGUpIHsKLSAgICAgICAgICAgIGlmIChmb2N1c05vZGUubm9kZVR5cGUgIT09IE5vZGUu
VEVYVF9OT0RFKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYg
KGZvY3VzTm9kZS50ZXh0Q29udGVudC5pbmRleE9mKCJcbiIpICE9PSAtMSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmb2N1c05vZGUgPSBmb2N1c05vZGUucHJl
dmlvdXNTaWJsaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwK
LQotICAgIGlzQ2FyZXRPbkxhc3RMaW5lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICB2YXIgZm9jdXNOb2Rl
ID0gc2VsZWN0aW9uLmZvY3VzTm9kZTsKLSAgICAgICAgaWYgKCFmb2N1c05vZGUgfHwgZm9jdXNO
b2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSB8fCBmb2N1c05vZGUucGFyZW50Tm9kZSAh
PT0gdGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlm
IChmb2N1c05vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKHNlbGVjdGlvbi5mb2N1c09mZnNldCku
aW5kZXhPZigiXG4iKSAhPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5uZXh0U2libGluZzsKLQotICAgICAgICB3aGlsZSAoZm9j
dXNOb2RlKSB7Ci0gICAgICAgICAgICBpZiAoZm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLlRF
WFRfTk9ERSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChm
b2N1c05vZGUudGV4dENvbnRlbnQuaW5kZXhPZigiXG4iKSAhPT0gLTEpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZm9jdXNOb2RlID0gZm9jdXNOb2RlLm5leHRT
aWJsaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAg
IG1vdmVDYXJldFRvRW5kT2ZQcm9tcHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBz
ZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIHZhciBzZWxlY3Rpb25S
YW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0KLSAgICAgICAgdmFyIG9mZnNldCA9IHRo
aXMuX2VsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7Ci0gICAgICAgIHNlbGVjdGlvblJhbmdlLnNl
dFN0YXJ0KHRoaXMuX2VsZW1lbnQsIG9mZnNldCk7Ci0gICAgICAgIHNlbGVjdGlvblJhbmdlLnNl
dEVuZCh0aGlzLl9lbGVtZW50LCBvZmZzZXQpOwotCi0gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVB
bGxSYW5nZXMoKTsKLSAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHNlbGVjdGlvblJhbmdlKTsK
LSAgICB9LAotCi0gICAgdGFiS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICB0aGlzLl9jb21wbGV0ZUNvbW1vblByZWZpeCgpOwotCi0gICAgICAgIC8vIENvbnN1bWUg
dGhlIGtleS4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGVudGVyS2V5UHJl
c3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RC
b3hWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5lbnRlcktl
eVByZXNzZWQoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIHVwS2V5
UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5pc1N1Z2dl
c3RCb3hWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC51cEtl
eVByZXNzZWQoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIGRvd25L
ZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmlzU3Vn
Z2VzdEJveFZpc2libGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LmRv
d25LZXlQcmVzc2VkKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBw
YWdlVXBLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
LmlzU3VnZ2VzdEJveFZpc2libGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0
Qm94LnBhZ2VVcEtleVByZXNzZWQoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwK
LQotICAgIHBhZ2VEb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhp
cy5fc3VnZ2VzdEJveC5wYWdlRG93bktleVByZXNzZWQoKTsKLQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5
cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0fQotICogQHBhcmFtIHtmdW5jdGlvbihFbGVtZW50LCBSYW5nZSwgYm9vbGVh
biwgZnVuY3Rpb24oIUFycmF5LjxzdHJpbmc+LCBudW1iZXI9KSl9IGNvbXBsZXRpb25zCi0gKiBA
cGFyYW0ge3N0cmluZz19IHN0b3BDaGFyYWN0ZXJzCi0gKi8KLVdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0V2l0aEhpc3RvcnkgPSBmdW5jdGlvbihjb21wbGV0aW9ucywgc3RvcENoYXJhY3RlcnMpCi17
Ci0gICAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuY2FsbCh0aGlzLCBjb21wbGV0aW9ucywgc3Rv
cENoYXJhY3RlcnMpOwotCi0gICAgLyoqCi0gICAgICogQHR5cGUge0FycmF5LjxzdHJpbmc+fQot
ICAgICAqLwotICAgIHRoaXMuX2RhdGEgPSBbXTsKLQotICAgIC8qKgotICAgICAqIDEtYmFzZWQg
ZW50cnkgaW4gdGhlIGhpc3Rvcnkgc3RhY2suCi0gICAgICogQHR5cGUge251bWJlcn0KLSAgICAg
Ki8KLSAgICB0aGlzLl9oaXN0b3J5T2Zmc2V0ID0gMTsKLQotICAgIC8qKgotICAgICAqIFdoZXRo
ZXIgdG8gY29hbGVzY2UgZHVwbGljYXRlIGl0ZW1zIGluIHRoZSBoaXN0b3J5LCBkZWZhdWx0IGlz
IHRydWUuCi0gICAgICogQHR5cGUge2Jvb2xlYW59Ci0gICAgICovCi0gICAgdGhpcy5fY29hbGVz
Y2VIaXN0b3J5RHVwZXMgPSB0cnVlOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhI
aXN0b3J5LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgaGlzdG9yeURhdGEoKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY29weSB0aGlzPwotICAgICAgICByZXR1cm4gdGhp
cy5fZGF0YTsKLSAgICB9LAotCi0gICAgc2V0Q29hbGVzY2VIaXN0b3J5RHVwZXM6IGZ1bmN0aW9u
KHgpCi0gICAgewotICAgICAgICB0aGlzLl9jb2FsZXNjZUhpc3RvcnlEdXBlcyA9IHg7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGRhdGEKLSAgICAg
Ki8KLSAgICBzZXRIaXN0b3J5RGF0YTogZnVuY3Rpb24oZGF0YSkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2RhdGEgPSBbXS5jb25jYXQoZGF0YSk7Ci0gICAgICAgIHRoaXMuX2hpc3RvcnlPZmZzZXQg
PSAxOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBQdXNoZXMgYSBjb21taXR0ZWQgdGV4dCBp
bnRvIHRoZSBoaXN0b3J5LgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAgICovCi0g
ICAgcHVzaEhpc3RvcnlJdGVtOiBmdW5jdGlvbih0ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX3VuY29tbWl0dGVkSXNUb3ApIHsKLSAgICAgICAgICAgIHRoaXMuX2RhdGEucG9wKCk7Ci0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fdW5jb21taXR0ZWRJc1RvcDsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuX2hpc3RvcnlPZmZzZXQgPSAxOwotICAgICAgICBpZiAodGhpcy5fY29hbGVz
Y2VIaXN0b3J5RHVwZXMgJiYgdGV4dCA9PT0gdGhpcy5fY3VycmVudEhpc3RvcnlJdGVtKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2RhdGEucHVzaCh0ZXh0KTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogUHVzaGVzIHRoZSBjdXJyZW50ICh1bmNvbW1pdHRlZCkgdGV4
dCBpbnRvIHRoZSBoaXN0b3J5LgotICAgICAqLwotICAgIF9wdXNoQ3VycmVudFRleHQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl91bmNvbW1pdHRlZElzVG9wKQotICAgICAg
ICAgICAgdGhpcy5fZGF0YS5wb3AoKTsgLy8gVGhyb3cgYXdheSBvYnNvbGV0ZSB1bmNvbW1pdHRl
ZCB0ZXh0LgotICAgICAgICB0aGlzLl91bmNvbW1pdHRlZElzVG9wID0gdHJ1ZTsKLSAgICAgICAg
dGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKLSAgICAgICAgdGhpcy5fZGF0YS5wdXNoKHRo
aXMudGV4dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ3x1bmRl
ZmluZWR9Ci0gICAgICovCi0gICAgX3ByZXZpb3VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5faGlzdG9yeU9mZnNldCA+IHRoaXMuX2RhdGEubGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgICAgaWYgKHRoaXMuX2hpc3RvcnlPZmZzZXQgPT09
IDEpCi0gICAgICAgICAgICB0aGlzLl9wdXNoQ3VycmVudFRleHQoKTsKLSAgICAgICAgKyt0aGlz
Ll9oaXN0b3J5T2Zmc2V0OwotICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEhpc3RvcnlJdGVt
KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9
Ci0gICAgICovCi0gICAgX25leHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9oaXN0b3J5T2Zmc2V0ID09PSAxKQotICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAg
ICAgICAgLS10aGlzLl9oaXN0b3J5T2Zmc2V0OwotICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVu
dEhpc3RvcnlJdGVtKCk7Ci0gICAgfSwKLQotICAgIF9jdXJyZW50SGlzdG9yeUl0ZW06IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kYXRhW3RoaXMuX2RhdGEubGVuZ3Ro
IC0gdGhpcy5faGlzdG9yeU9mZnNldF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVy
cmlkZQotICAgICAqLwotICAgIGRlZmF1bHRLZXlIYW5kbGVyOiBmdW5jdGlvbihldmVudCwgZm9y
Y2UpCi0gICAgewotICAgICAgICB2YXIgbmV3VGV4dDsKLSAgICAgICAgdmFyIGlzUHJldmlvdXM7
Ci0KLSAgICAgICAgc3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7Ci0gICAgICAgIGNhc2Ug
IlVwIjoKLSAgICAgICAgICAgIGlmICghdGhpcy5pc0NhcmV0T25GaXJzdExpbmUoKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5ld1RleHQgPSB0aGlzLl9wcmV2aW91cygp
OwotICAgICAgICAgICAgaXNQcmV2aW91cyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAiRG93biI6Ci0gICAgICAgICAgICBpZiAoIXRoaXMuaXNDYXJldE9uTGFzdExp
bmUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5ld1RleHQgPSB0aGlz
Ll9uZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiVSswMDUwIjogLy8g
Q3RybCtQID0gUHJldmlvdXMKLSAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSAm
JiBldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2
ZW50LnNoaWZ0S2V5KSB7Ci0gICAgICAgICAgICAgICAgbmV3VGV4dCA9IHRoaXMuX3ByZXZpb3Vz
KCk7Ci0gICAgICAgICAgICAgICAgaXNQcmV2aW91cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiVSswMDRFIjogLy8gQ3RybCtOID0gTmV4
dAotICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc01hYygpICYmIGV2ZW50LmN0cmxLZXkg
JiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpCi0g
ICAgICAgICAgICAgICAgbmV3VGV4dCA9IHRoaXMuX25leHQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5ld1RleHQgIT09IHVuZGVmaW5lZCkgewotICAg
ICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAgICAgICAgIHRoaXMudGV4dCA9IG5l
d1RleHQ7Ci0KLSAgICAgICAgICAgIGlmIChpc1ByZXZpb3VzKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGZpcnN0TmV3bGluZUluZGV4ID0gdGhpcy50ZXh0LmluZGV4T2YoIlxuIik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSkKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0U3Rh
cnQodGhpcy5fZWxlbWVudC5maXJzdENoaWxkLCBmaXJzdE5ld2xpbmVJbmRleCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnNldEVuZCh0aGlzLl9lbGVtZW50LmZpcnN0Q2hp
bGQsIGZpcnN0TmV3bGluZUluZGV4KTsKLQotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24u
cmVtb3ZlQWxsUmFuZ2VzKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5n
ZShzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZGVmYXVsdEtleUhhbmRsZXIuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVGV4
dFByb21wdC5wcm90b3R5cGUKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9UZXh0VXRpbHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRVdGlscy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYwM2Ew
Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRV
dGlscy5qcworKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLlRleHRV
dGlscyA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcgotICAgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNTdG9wQ2hhcjogZnVuY3Rpb24oY2hhcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiAoY2hhciA+ICIgIiAmJiBjaGFyIDwgIjAiKSB8fAotICAg
ICAgICAgICAgKGNoYXIgPiAiOSIgJiYgY2hhciA8ICJBIikgfHwKLSAgICAgICAgICAgIChjaGFy
ID4gIloiICYmIGNoYXIgPCAiXyIpIHx8Ci0gICAgICAgICAgICAoY2hhciA+ICJfIiAmJiBjaGFy
IDwgImEiKSB8fAotICAgICAgICAgICAgKGNoYXIgPiAieiIgJiYgY2hhciA8PSAifiIpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcgotICAgICAqIEByZXR1
cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNXb3JkQ2hhcjogZnVuY3Rpb24oY2hhcikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhV2ViSW5zcGVjdG9yLlRleHRVdGlscy5pc1N0b3BDaGFyKGNo
YXIpICYmICFXZWJJbnNwZWN0b3IuVGV4dFV0aWxzLmlzU3BhY2VDaGFyKGNoYXIpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcgotICAgICAqIEByZXR1cm4g
e2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNTcGFjZUNoYXI6IGZ1bmN0aW9uKGNoYXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlRleHRVdGlscy5fU3BhY2VDaGFyUmVnZXgu
dGVzdChjaGFyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHdv
cmQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzV29yZDogZnVuY3Rp
b24od29yZCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZC5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuVGV4dFV0aWxzLmlzV29yZENo
YXIod29yZC5jaGFyQXQoaSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGNoYXIKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAg
IGlzT3BlbmluZ0JyYWNlQ2hhcjogZnVuY3Rpb24oY2hhcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjaGFyID09PSAiKCIgfHwgY2hhciA9PT0gInsiOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gY2hhcgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICov
Ci0gICAgaXNDbG9zaW5nQnJhY2VDaGFyOiBmdW5jdGlvbihjaGFyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNoYXIgPT09ICIpIiB8fCBjaGFyID09PSAifSI7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAg
ICAgKi8KLSAgICBpc0JyYWNlQ2hhcjogZnVuY3Rpb24oY2hhcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuVGV4dFV0aWxzLmlzT3BlbmluZ0JyYWNlQ2hhcihjaGFyKSB8fCBX
ZWJJbnNwZWN0b3IuVGV4dFV0aWxzLmlzQ2xvc2luZ0JyYWNlQ2hhcihjaGFyKTsKLSAgICB9Ci19
Ci0KLVdlYkluc3BlY3Rvci5UZXh0VXRpbHMuX1NwYWNlQ2hhclJlZ2V4ID0gL1xzLzsKLQotLyoq
Ci0gKiBAZW51bSB7c3RyaW5nfQotICovCi1XZWJJbnNwZWN0b3IuVGV4dFV0aWxzLkluZGVudCA9
IHsKLSAgICBUd29TcGFjZXM6ICIgICIsCi0gICAgRm91clNwYWNlczogIiAgICAiLAotICAgIEVp
Z2h0U3BhY2VzOiAiICAgICAgICAiLAotICAgIFRhYkNoYXJhY3RlcjogIlx0IgotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZUZyYW1lQ29u
dHJvbGxlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVG
cmFtZUNvbnRyb2xsZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYmVlNDAu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGlu
ZUZyYW1lQ29udHJvbGxlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWx9IG1v
ZGVsCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3UGFuZX0gb3ZlcnZp
ZXdQYW5lCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVs
fSBwcmVzZW50YXRpb25Nb2RlbAotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVGcmFtZUNvbnRy
b2xsZXIgPSBmdW5jdGlvbihtb2RlbCwgb3ZlcnZpZXdQYW5lLCBwcmVzZW50YXRpb25Nb2RlbCkK
LXsKLSAgICB0aGlzLl9sYXN0RnJhbWUgPSBudWxsOwotICAgIHRoaXMuX21vZGVsID0gbW9kZWw7
Ci0gICAgdGhpcy5fb3ZlcnZpZXdQYW5lID0gb3ZlcnZpZXdQYW5lOwotICAgIHRoaXMuX3ByZXNl
bnRhdGlvbk1vZGVsID0gcHJlc2VudGF0aW9uTW9kZWw7Ci0gICAgdGhpcy5fbW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5FdmVudHMuUmVjb3JkQWRkZWQs
IHRoaXMuX29uUmVjb3JkQWRkZWQsIHRoaXMpOwotICAgIHRoaXMuX21vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuRXZlbnRzLlJlY29yZHNDbGVhcmVkLCB0
aGlzLl9vblJlY29yZHNDbGVhcmVkLCB0aGlzKTsKLQotICAgIHZhciByZWNvcmRzID0gbW9kZWwu
cmVjb3JkczsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29yZHMubGVuZ3RoOyArK2kpCi0g
ICAgICAgIHRoaXMuX2FkZFJlY29yZChyZWNvcmRzW2ldKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRp
bWVsaW5lRnJhbWVDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBfb25SZWNvcmRBZGRlZDog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9hZGRSZWNvcmQoZXZlbnQuZGF0
YSk7Ci0gICAgfSwKLQotICAgIF9vblJlY29yZHNDbGVhcmVkOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9sYXN0RnJhbWUgPSBudWxsOwotICAgIH0sCi0KLSAgICBfYWRkUmVjb3Jk
OiBmdW5jdGlvbihyZWNvcmQpCi0gICAgewotICAgICAgICB2YXIgcmVjb3JkczsKLSAgICAgICAg
aWYgKHJlY29yZC5pc0JhY2tncm91bmQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChyZWNvcmQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5Q
cm9ncmFtKQotICAgICAgICAgICAgcmVjb3JkcyA9IHJlY29yZFsiY2hpbGRyZW4iXSB8fCBbXTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjb3JkcyA9IFtyZWNvcmRdOwotICAgICAgICBy
ZWNvcmRzLmZvckVhY2godGhpcy5faW5uZXJBZGRSZWNvcmQsIHRoaXMpOwotICAgIH0sCi0KLSAg
ICBfaW5uZXJBZGRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZWNvcmQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5CZWdp
bkZyYW1lICYmIHRoaXMuX2xhc3RGcmFtZSkKLSAgICAgICAgICAgIHRoaXMuX2ZsdXNoRnJhbWUo
cmVjb3JkKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2xhc3RGcmFt
ZSkKLSAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RnJhbWUgPSB0aGlzLl9jcmVhdGVGcmFtZShy
ZWNvcmQpOwotICAgICAgICAgICAgaWYgKCFyZWNvcmQudGhyZWFkKQotICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLmFnZ3JlZ2F0ZVRpbWVGb3JSZWNvcmQodGhpcy5f
bGFzdEZyYW1lLnRpbWVCeUNhdGVnb3J5LCByZWNvcmQpOwotICAgICAgICAgICAgdGhpcy5fbGFz
dEZyYW1lLmNwdVRpbWUgKz0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuZHVyYXRpb25JblNl
Y29uZHMocmVjb3JkKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfZmx1c2hGcmFtZTogZnVu
Y3Rpb24ocmVjb3JkKQotICAgIHsKLSAgICAgICAgdGhpcy5fbGFzdEZyYW1lLmVuZFRpbWUgPSBX
ZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5zdGFydFRpbWVJblNlY29uZHMocmVjb3JkKTsKLSAg
ICAgICAgdGhpcy5fbGFzdEZyYW1lLmR1cmF0aW9uID0gdGhpcy5fbGFzdEZyYW1lLmVuZFRpbWUg
LSB0aGlzLl9sYXN0RnJhbWUuc3RhcnRUaW1lOwotICAgICAgICB0aGlzLl9vdmVydmlld1BhbmUu
YWRkRnJhbWUodGhpcy5fbGFzdEZyYW1lKTsKLSAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9k
ZWwuYWRkRnJhbWUodGhpcy5fbGFzdEZyYW1lKTsKLSAgICAgICAgdGhpcy5fbGFzdEZyYW1lID0g
dGhpcy5fY3JlYXRlRnJhbWUocmVjb3JkKTsKLSAgICB9LAotCi0gICAgX2NyZWF0ZUZyYW1lOiBm
dW5jdGlvbihyZWNvcmQpCi0gICAgewotICAgICAgICB2YXIgZnJhbWUgPSBuZXcgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lRnJhbWUoKTsKLSAgICAgICAgZnJhbWUuc3RhcnRUaW1lID0gV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwuc3RhcnRUaW1lSW5TZWNvbmRzKHJlY29yZCk7Ci0gICAgICAgIGZy
YW1lLnN0YXJ0VGltZU9mZnNldCA9IHRoaXMuX21vZGVsLnJlY29yZE9mZnNldEluU2Vjb25kcyhy
ZWNvcmQpOwotICAgICAgICByZXR1cm4gZnJhbWU7Ci0gICAgfSwKLQotICAgIGRpc3Bvc2U6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21vZGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuRXZlbnRzLlJlY29yZEFkZGVkLCB0aGlzLl9vblJl
Y29yZEFkZGVkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fbW9kZWwucmVtb3ZlRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5FdmVudHMuUmVjb3Jkc0NsZWFyZWQsIHRoaXMu
X29uUmVjb3Jkc0NsZWFyZWQsIHRoaXMpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5UaW1lbGluZUZyYW1lPn0gZnJhbWVz
Ci0gKi8KLVdlYkluc3BlY3Rvci5GcmFtZVN0YXRpc3RpY3MgPSBmdW5jdGlvbihmcmFtZXMpCi17
Ci0gICAgdGhpcy5mcmFtZUNvdW50ID0gZnJhbWVzLmxlbmd0aDsKLSAgICB0aGlzLm1pbkR1cmF0
aW9uID0gSW5maW5pdHk7Ci0gICAgdGhpcy5tYXhEdXJhdGlvbiA9IDA7Ci0gICAgdGhpcy50aW1l
QnlDYXRlZ29yeSA9IHt9OwotICAgIHRoaXMuc3RhcnRPZmZzZXQgPSBmcmFtZXNbMF0uc3RhcnRU
aW1lT2Zmc2V0OwotICAgIHZhciBsYXN0RnJhbWUgPSBmcmFtZXNbdGhpcy5mcmFtZUNvdW50IC0g
MV07Ci0gICAgdGhpcy5lbmRPZmZzZXQgPSBsYXN0RnJhbWUuc3RhcnRUaW1lT2Zmc2V0ICsgbGFz
dEZyYW1lLmR1cmF0aW9uOwotCi0gICAgdmFyIHRvdGFsRHVyYXRpb24gPSAwOwotICAgIHZhciBz
dW1PZlNxdWFyZXMgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mcmFtZUNvdW50
OyArK2kpIHsKLSAgICAgICAgdmFyIGR1cmF0aW9uID0gZnJhbWVzW2ldLmR1cmF0aW9uOwotICAg
ICAgICB0b3RhbER1cmF0aW9uICs9IGR1cmF0aW9uOwotICAgICAgICBzdW1PZlNxdWFyZXMgKz0g
ZHVyYXRpb24gKiBkdXJhdGlvbjsKLSAgICAgICAgdGhpcy5taW5EdXJhdGlvbiA9IE1hdGgubWlu
KHRoaXMubWluRHVyYXRpb24sIGR1cmF0aW9uKTsKLSAgICAgICAgdGhpcy5tYXhEdXJhdGlvbiA9
IE1hdGgubWF4KHRoaXMubWF4RHVyYXRpb24sIGR1cmF0aW9uKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwuYWdncmVnYXRlVGltZUJ5Q2F0ZWdvcnkodGhpcy50aW1lQnlDYXRl
Z29yeSwgZnJhbWVzW2ldLnRpbWVCeUNhdGVnb3J5KTsKLSAgICB9Ci0gICAgdGhpcy5hdmVyYWdl
ID0gdG90YWxEdXJhdGlvbiAvIHRoaXMuZnJhbWVDb3VudDsKLSAgICB2YXIgdmFyaWFuY2UgPSBz
dW1PZlNxdWFyZXMgLyB0aGlzLmZyYW1lQ291bnQgLSB0aGlzLmF2ZXJhZ2UgKiB0aGlzLmF2ZXJh
Z2U7Ci0gICAgdGhpcy5zdGRkZXYgPSBNYXRoLnNxcnQodmFyaWFuY2UpOwotfQotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVGcmFtZSA9IGZ1bmN0aW9u
KCkKLXsKLSAgICB0aGlzLnRpbWVCeUNhdGVnb3J5ID0ge307Ci0gICAgdGhpcy5jcHVUaW1lID0g
MDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGlt
ZWxpbmVHcmlkLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGlu
ZUdyaWQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYjc3YmYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZUdyaWQuanMK
KysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEFudGhvbnkgUmljYXVkIDxyaWtAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZUdyaWQgPSBmdW5jdGlvbigpCi17Ci0g
ICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0KLSAgICB0
aGlzLl9pdGVtc0dyYXBoc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICB0aGlzLl9pdGVtc0dyYXBoc0VsZW1lbnQuaWQgPSAicmVzb3VyY2VzLWdyYXBocyI7Ci0g
ICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2l0ZW1zR3JhcGhzRWxlbWVudCk7Ci0K
LSAgICB0aGlzLl9kaXZpZGVyc0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRp
diIsICJyZXNvdXJjZXMtZGl2aWRlcnMiKTsKLQotICAgIHRoaXMuX2dyaWRIZWFkZXJFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7IAotICAgIHRoaXMuX2V2ZW50RGl2aWRl
cnNFbGVtZW50ID0gdGhpcy5fZ3JpZEhlYWRlckVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJy
ZXNvdXJjZXMtZXZlbnQtZGl2aWRlcnMiKTsKLSAgICB0aGlzLl9kaXZpZGVyc0xhYmVsQmFyRWxl
bWVudCA9IHRoaXMuX2dyaWRIZWFkZXJFbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAicmVzb3Vy
Y2VzLWRpdmlkZXJzLWxhYmVsLWJhciIpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0
aGlzLl9ncmlkSGVhZGVyRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9sZWZ0Q3VydGFpbkVsZW1lbnQg
PSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJ0aW1lbGluZS1jcHUtY3VydGFpbi1s
ZWZ0Iik7Ci0gICAgdGhpcy5fcmlnaHRDdXJ0YWluRWxlbWVudCA9IHRoaXMuZWxlbWVudC5jcmVh
dGVDaGlsZCgiZGl2IiwgInRpbWVsaW5lLWNwdS1jdXJ0YWluLXJpZ2h0Iik7Ci19Ci0KLVdlYklu
c3BlY3Rvci5UaW1lbGluZUdyaWQucHJvdG90eXBlID0gewotICAgIGdldCBpdGVtc0dyYXBoc0Vs
ZW1lbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zR3JhcGhzRWxlbWVudDsK
LSAgICB9LAotCi0gICAgZ2V0IGRpdmlkZXJzRWxlbWVudCgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fZGl2aWRlcnNFbGVtZW50OwotICAgIH0sCi0KLSAgICBnZXQgZGl2aWRlcnNMYWJl
bEJhckVsZW1lbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RpdmlkZXJzTGFiZWxC
YXJFbGVtZW50OwotICAgIH0sCi0KLSAgICBnZXQgZ3JpZEhlYWRlckVsZW1lbnQoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWRIZWFkZXJFbGVtZW50OwotICAgIH0sCi0KLSAgICBy
ZW1vdmVEaXZpZGVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGl2aWRlcnNF
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX2RpdmlkZXJzTGFiZWxCYXJF
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgfSwKLQotICAgIHVwZGF0ZURpdmlkZXJzOiBm
dW5jdGlvbihjYWxjdWxhdG9yKQotICAgIHsKLSAgICAgICAgdmFyIGRpdmlkZXJzRWxlbWVudENs
aWVudFdpZHRoID0gdGhpcy5fZGl2aWRlcnNFbGVtZW50LmNsaWVudFdpZHRoOwotICAgICAgICB2
YXIgZGl2aWRlckNvdW50ID0gTWF0aC5yb3VuZChkaXZpZGVyc0VsZW1lbnRDbGllbnRXaWR0aCAv
IDY0KTsKLSAgICAgICAgdmFyIHNsaWNlID0gY2FsY3VsYXRvci5ib3VuZGFyeVNwYW4oKSAvIGRp
dmlkZXJDb3VudDsKLQotICAgICAgICB0aGlzLl9jdXJyZW50RGl2aWRlclNsaWNlID0gc2xpY2U7
Ci0KLSAgICAgICAgLy8gUmV1c2UgZGl2aWRlciBlbGVtZW50cyBhbmQgbGFiZWxzLgotICAgICAg
ICB2YXIgZGl2aWRlciA9IHRoaXMuX2RpdmlkZXJzRWxlbWVudC5maXJzdENoaWxkOwotICAgICAg
ICB2YXIgZGl2aWRlckxhYmVsQmFyID0gdGhpcy5fZGl2aWRlcnNMYWJlbEJhckVsZW1lbnQuZmly
c3RDaGlsZDsKLQotICAgICAgICB2YXIgc2xpY2VSZW1haW5kZXIgPSAoY2FsY3VsYXRvci5taW5p
bXVtQm91bmRhcnkoKSAtIGNhbGN1bGF0b3IuemVyb1RpbWUoKSkgJSBzbGljZTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPD0gZGl2aWRlckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICghZGl2aWRlcikgewotICAgICAgICAgICAgICAgIGRpdmlkZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICBkaXZpZGVyLmNsYXNzTmFtZSA9ICJyZXNv
dXJjZXMtZGl2aWRlciI7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGl2aWRlcnNFbGVtZW50LmFw
cGVuZENoaWxkKGRpdmlkZXIpOwotCi0gICAgICAgICAgICAgICAgZGl2aWRlckxhYmVsQmFyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICAgICAgZGl2aWRlckxh
YmVsQmFyLmNsYXNzTmFtZSA9ICJyZXNvdXJjZXMtZGl2aWRlciI7Ci0gICAgICAgICAgICAgICAg
dmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICAg
ICAgbGFiZWwuY2xhc3NOYW1lID0gInJlc291cmNlcy1kaXZpZGVyLWxhYmVsIjsKLSAgICAgICAg
ICAgICAgICBkaXZpZGVyTGFiZWxCYXIuX2xhYmVsRWxlbWVudCA9IGxhYmVsOwotICAgICAgICAg
ICAgICAgIGRpdmlkZXJMYWJlbEJhci5hcHBlbmRDaGlsZChsYWJlbCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fZGl2aWRlcnNMYWJlbEJhckVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2aWRlckxhYmVs
QmFyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFpKSB7Ci0gICAgICAgICAg
ICAgICAgZGl2aWRlci5hZGRTdHlsZUNsYXNzKCJmaXJzdCIpOwotICAgICAgICAgICAgICAgIGRp
dmlkZXJMYWJlbEJhci5hZGRTdHlsZUNsYXNzKCJmaXJzdCIpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBkaXZpZGVyLnJlbW92ZVN0eWxlQ2xhc3MoImZpcnN0Iik7Ci0g
ICAgICAgICAgICAgICAgZGl2aWRlckxhYmVsQmFyLnJlbW92ZVN0eWxlQ2xhc3MoImZpcnN0Iik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpID09PSBkaXZpZGVyQ291bnQpIHsK
LSAgICAgICAgICAgICAgICBkaXZpZGVyLmFkZFN0eWxlQ2xhc3MoImxhc3QiKTsKLSAgICAgICAg
ICAgICAgICBkaXZpZGVyTGFiZWxCYXIuYWRkU3R5bGVDbGFzcygibGFzdCIpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkaXZpZGVyLnJlbW92ZVN0eWxlQ2xhc3MoImxh
c3QiKTsKLSAgICAgICAgICAgICAgICBkaXZpZGVyTGFiZWxCYXIucmVtb3ZlU3R5bGVDbGFzcygi
bGFzdCIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgbGVmdDsKLSAgICAgICAg
ICAgIGlmICghc2xpY2UpIHsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gZGl2aWRlcnNFbGVtZW50
Q2xpZW50V2lkdGggLyBkaXZpZGVyQ291bnQgKiBpOwotICAgICAgICAgICAgICAgIGRpdmlkZXJM
YWJlbEJhci5fbGFiZWxFbGVtZW50LnRleHRDb250ZW50ID0gIiI7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGxlZnQgPSBjYWxjdWxhdG9yLmNvbXB1dGVQb3NpdGlvbihj
YWxjdWxhdG9yLm1pbmltdW1Cb3VuZGFyeSgpICsgc2xpY2UgKiBpIC0gc2xpY2VSZW1haW5kZXIp
OwotICAgICAgICAgICAgICAgIGRpdmlkZXJMYWJlbEJhci5fbGFiZWxFbGVtZW50LnRleHRDb250
ZW50ID0gY2FsY3VsYXRvci5mb3JtYXRUaW1lKHNsaWNlICogaSAtIHNsaWNlUmVtYWluZGVyKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBwZXJjZW50TGVmdCA9IDEwMCAqIGxlZnQg
LyBkaXZpZGVyc0VsZW1lbnRDbGllbnRXaWR0aDsKLSAgICAgICAgICAgIHRoaXMuX3NldERpdmlk
ZXJBbmRCYXJMZWZ0KGRpdmlkZXIsIGRpdmlkZXJMYWJlbEJhciwgcGVyY2VudExlZnQpOwotCi0g
ICAgICAgICAgICBkaXZpZGVyID0gZGl2aWRlci5uZXh0U2libGluZzsKLSAgICAgICAgICAgIGRp
dmlkZXJMYWJlbEJhciA9IGRpdmlkZXJMYWJlbEJhci5uZXh0U2libGluZzsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFJlbW92ZSBleHRyYXMuCi0gICAgICAgIHdoaWxlIChkaXZpZGVyKSB7Ci0g
ICAgICAgICAgICB2YXIgbmV4dERpdmlkZXIgPSBkaXZpZGVyLm5leHRTaWJsaW5nOwotICAgICAg
ICAgICAgdGhpcy5fZGl2aWRlcnNFbGVtZW50LnJlbW92ZUNoaWxkKGRpdmlkZXIpOwotICAgICAg
ICAgICAgZGl2aWRlciA9IG5leHREaXZpZGVyOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChk
aXZpZGVyTGFiZWxCYXIpIHsKLSAgICAgICAgICAgIHZhciBuZXh0RGl2aWRlciA9IGRpdmlkZXJM
YWJlbEJhci5uZXh0U2libGluZzsKLSAgICAgICAgICAgIHRoaXMuX2RpdmlkZXJzTGFiZWxCYXJF
bGVtZW50LnJlbW92ZUNoaWxkKGRpdmlkZXJMYWJlbEJhcik7Ci0gICAgICAgICAgICBkaXZpZGVy
TGFiZWxCYXIgPSBuZXh0RGl2aWRlcjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9LAotCi0gICAgX3NldERpdmlkZXJBbmRCYXJMZWZ0OiBmdW5jdGlvbihkaXZpZGVyLCBk
aXZpZGVyTGFiZWxCYXIsIHBlcmNlbnRMZWZ0KQotICAgIHsKLSAgICAgICAgdmFyIHBlcmNlbnRT
dHlsZUxlZnQgPSBwYXJzZUZsb2F0KGRpdmlkZXIuc3R5bGUubGVmdCk7Ci0gICAgICAgIGlmICgh
aXNOYU4ocGVyY2VudFN0eWxlTGVmdCkgJiYgTWF0aC5hYnMocGVyY2VudFN0eWxlTGVmdCAtIHBl
cmNlbnRMZWZ0KSA8IDAuMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGl2aWRlci5z
dHlsZS5sZWZ0ID0gcGVyY2VudExlZnQgKyAiJSI7Ci0gICAgICAgIGRpdmlkZXJMYWJlbEJhci5z
dHlsZS5sZWZ0ID0gcGVyY2VudExlZnQgKyAiJSI7Ci0gICAgfSwKLQotICAgIGFkZEV2ZW50RGl2
aWRlcjogZnVuY3Rpb24oZGl2aWRlcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V2ZW50RGl2aWRl
cnNFbGVtZW50LmFwcGVuZENoaWxkKGRpdmlkZXIpOwotICAgIH0sCi0KLSAgICBhZGRFdmVudERp
dmlkZXJzOiBmdW5jdGlvbihkaXZpZGVycykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2dyaWRIZWFk
ZXJFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2V2ZW50RGl2aWRlcnNFbGVtZW50KTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXZpZGVycy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgaWYgKGRpdmlkZXJzW2ldKQotICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50RGl2aWRlcnNF
bGVtZW50LmFwcGVuZENoaWxkKGRpdmlkZXJzW2ldKTsKLSAgICAgICAgfQotICAgICAgICB0aGlz
Ll9ncmlkSGVhZGVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9ldmVudERpdmlkZXJzRWxlbWVu
dCk7Ci0gICAgfSwKLQotICAgIHJlbW92ZUV2ZW50RGl2aWRlcnM6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2V2ZW50RGl2aWRlcnNFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0g
ICAgfSwKLQotICAgIGhpZGVFdmVudERpdmlkZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9ldmVudERpdmlkZXJzRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAg
ICB9LAotCi0gICAgc2hvd0V2ZW50RGl2aWRlcnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2V2ZW50RGl2aWRlcnNFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwot
ICAgIH0sCi0KLSAgICBoaWRlQ3VydGFpbnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2xlZnRDdXJ0YWluRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAg
dGhpcy5fcmlnaHRDdXJ0YWluRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGdhcE9mZnNldAotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBnYXBXaWR0aAotICAgICAqLwotICAgIHNob3dDdXJ0YWluczogZnVuY3Rp
b24oZ2FwT2Zmc2V0LCBnYXBXaWR0aCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xlZnRDdXJ0YWlu
RWxlbWVudC5zdHlsZS53aWR0aCA9IGdhcE9mZnNldCArICJweCI7Ci0gICAgICAgIHRoaXMuX2xl
ZnRDdXJ0YWluRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgdGhp
cy5fcmlnaHRDdXJ0YWluRWxlbWVudC5zdHlsZS5sZWZ0ID0gKGdhcE9mZnNldCArIGdhcFdpZHRo
KSArICJweCI7Ci0gICAgICAgIHRoaXMuX3JpZ2h0Q3VydGFpbkVsZW1lbnQucmVtb3ZlU3R5bGVD
bGFzcygiaGlkZGVuIik7Ci0gICAgfSwKLQotICAgIHNldFNjcm9sbEFuZERpdmlkZXJUb3A6IGZ1
bmN0aW9uKHNjcm9sbFRvcCwgZGl2aWRlcnNUb3ApCi0gICAgewotICAgICAgICB0aGlzLl9kaXZp
ZGVyc0VsZW1lbnQuc3R5bGUudG9wID0gc2Nyb2xsVG9wICsgInB4IjsKLSAgICAgICAgdGhpcy5f
bGVmdEN1cnRhaW5FbGVtZW50LnN0eWxlLnRvcCA9IHNjcm9sbFRvcCArICJweCI7Ci0gICAgICAg
IHRoaXMuX3JpZ2h0Q3VydGFpbkVsZW1lbnQuc3R5bGUudG9wID0gc2Nyb2xsVG9wICsgInB4IjsK
LSAgICB9Ci19Ci0KLS8qKgotICogQGludGVyZmFjZQotICovCi1XZWJJbnNwZWN0b3IuVGltZWxp
bmVHcmlkLkNhbGN1bGF0b3IgPSBmdW5jdGlvbigpIHsgfQotCi1XZWJJbnNwZWN0b3IuVGltZWxp
bmVHcmlkLkNhbGN1bGF0b3IucHJvdG90eXBlID0gewotICAgIC8qKiBAcGFyYW0ge251bWJlcn0g
dGltZSAqLwotICAgIGNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24odGltZSkgeyB9LAotCi0gICAg
LyoqIEBwYXJhbSB7bnVtYmVyfSB0aW1lICovCi0gICAgZm9ybWF0VGltZTogZnVuY3Rpb24odGlt
ZSkgeyB9LAotCi0gICAgLyoqIEByZXR1cm4ge251bWJlcn0gKi8KLSAgICBtaW5pbXVtQm91bmRh
cnk6IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgLyoqIEByZXR1cm4ge251bWJlcn0gKi8KLSAgICB6
ZXJvVGltZTogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKiogQHJldHVybiB7bnVtYmVyfSAqLwot
ICAgIG1heGltdW1Cb3VuZGFyeTogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKiogQHJldHVybiB7
bnVtYmVyfSAqLwotICAgIGJvdW5kYXJ5U3BhbjogZnVuY3Rpb24oKSB7IH0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNYW5hZ2VyLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1hbmFnZXIuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNDIzMGUuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1hbmFnZXIuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdl
ciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0g
ICAgdGhpcy5fZGlzcGF0Y2hlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVEaXNwYXRjaGVy
KHRoaXMpOwotICAgIHRoaXMuX2VuYWJsZW1lbnRDb3VudCA9IDA7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5UaW1lbGluZU1hbmFnZXIuRXZlbnRUeXBlcyA9IHsKLSAgICBUaW1lbGluZVN0YXJ0ZWQ6ICJU
aW1lbGluZVN0YXJ0ZWQiLAotICAgIFRpbWVsaW5lU3RvcHBlZDogIlRpbWVsaW5lU3RvcHBlZCIs
Ci0gICAgVGltZWxpbmVFdmVudFJlY29yZGVkOiAiVGltZWxpbmVFdmVudFJlY29yZGVkIgotfQot
Ci1XZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge251bWJlcj19IG1heENhbGxTdGFja0RlcHRoCi0gICAgICogQHBhcmFtIHti
b29sZWFuPX0gaW5jbHVkZURvbUNvdW50ZXJzCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gaW5j
bHVkZU5hdGl2ZU1lbW9yeVN0YXRpc3RpY3MKLSAgICAgKi8KLSAgICBzdGFydDogZnVuY3Rpb24o
bWF4Q2FsbFN0YWNrRGVwdGgsIGluY2x1ZGVEb21Db3VudGVycywgaW5jbHVkZU5hdGl2ZU1lbW9y
eVN0YXRpc3RpY3MpCi0gICAgewotICAgICAgICB0aGlzLl9lbmFibGVtZW50Q291bnQrKzsKLSAg
ICAgICAgaWYgKHRoaXMuX2VuYWJsZW1lbnRDb3VudCA9PT0gMSkKLSAgICAgICAgICAgIFRpbWVs
aW5lQWdlbnQuc3RhcnQobWF4Q2FsbFN0YWNrRGVwdGgsIGluY2x1ZGVEb21Db3VudGVycywgaW5j
bHVkZU5hdGl2ZU1lbW9yeVN0YXRpc3RpY3MsIHRoaXMuX3N0YXJ0ZWQuYmluZCh0aGlzKSk7Ci0g
ICAgfSwKLQotICAgIHN0b3A6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
ZW5hYmxlbWVudENvdW50KSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJXZWJJbnNwZWN0
b3IuVGltZWxpbmVNYW5hZ2VyIHN0YXJ0L3N0b3AgY2FsbHMgYXJlIHVuYmFsYW5jZWQiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9lbmFibGVtZW50Q291
bnQtLTsKLSAgICAgICAgaWYgKCF0aGlzLl9lbmFibGVtZW50Q291bnQpCi0gICAgICAgICAgICBU
aW1lbGluZUFnZW50LnN0b3AodGhpcy5fc3RvcHBlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0g
ICAgX3N0YXJ0ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuRXZlbnRUeXBlcy5UaW1l
bGluZVN0YXJ0ZWQpOwotICAgIH0sCi0KLSAgICBfc3RvcHBlZDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lTWFuYWdlci5FdmVudFR5cGVzLlRpbWVsaW5lU3RvcHBlZCk7Ci0gICAgfSwKLQotICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtUaW1lbGluZUFnZW50LkRpc3BhdGNoZXJ9Ci0gKi8K
LVdlYkluc3BlY3Rvci5UaW1lbGluZURpc3BhdGNoZXIgPSBmdW5jdGlvbihtYW5hZ2VyKQotewot
ICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOwotICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJUaW1lbGluZURpc3BhdGNoZXIodGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZURp
c3BhdGNoZXIucHJvdG90eXBlID0gewotICAgIGV2ZW50UmVjb3JkZWQ6IGZ1bmN0aW9uKHJlY29y
ZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21hbmFnZXIuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuRXZlbnRUeXBlcy5UaW1lbGluZUV2ZW50UmVj
b3JkZWQsIHJlY29yZCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEB0eXBlIHtXZWJJbnNwZWN0b3Iu
VGltZWxpbmVNYW5hZ2VyfQotICovCi1XZWJJbnNwZWN0b3IudGltZWxpbmVNYW5hZ2VyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVs
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODMxNWFlLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcworKysgL2Rl
di9udWxsCkBAIC0xLDQ1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbCA9
IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9yZWNvcmRzID0gW107Ci0gICAgdGhpcy5fc3RyaW5n
UG9vbCA9IG5ldyBTdHJpbmdQb29sKCk7Ci0gICAgdGhpcy5fbWluaW11bVJlY29yZFRpbWUgPSAt
MTsKLSAgICB0aGlzLl9tYXhpbXVtUmVjb3JkVGltZSA9IC0xOwotICAgIHRoaXMuX2NvbGxlY3Rp
b25FbmFibGVkID0gZmFsc2U7Ci0KLSAgICBXZWJJbnNwZWN0b3IudGltZWxpbmVNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5FdmVudFR5cGVzLlRp
bWVsaW5lRXZlbnRSZWNvcmRlZCwgdGhpcy5fb25SZWNvcmRBZGRlZCwgdGhpcyk7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5UaW1lbGluZU1vZGVsLlRyYW5zZmVyQ2h1bmtMZW5ndGhCeXRlcyA9IDUwMDAw
MDA7Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLlJlY29yZFR5cGUgPSB7Ci0gICAgUm9v
dDogIlJvb3QiLAotICAgIFByb2dyYW06ICJQcm9ncmFtIiwKLSAgICBFdmVudERpc3BhdGNoOiAi
RXZlbnREaXNwYXRjaCIsCi0KLSAgICBCZWdpbkZyYW1lOiAiQmVnaW5GcmFtZSIsCi0gICAgU2No
ZWR1bGVTdHlsZVJlY2FsY3VsYXRpb246ICJTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbiIsCi0g
ICAgUmVjYWxjdWxhdGVTdHlsZXM6ICJSZWNhbGN1bGF0ZVN0eWxlcyIsCi0gICAgSW52YWxpZGF0
ZUxheW91dDogIkludmFsaWRhdGVMYXlvdXQiLAotICAgIExheW91dDogIkxheW91dCIsCi0gICAg
UGFpbnQ6ICJQYWludCIsCi0gICAgUmFzdGVyaXplOiAiUmFzdGVyaXplIiwKLSAgICBTY3JvbGxM
YXllcjogIlNjcm9sbExheWVyIiwKLSAgICBEZWNvZGVJbWFnZTogIkRlY29kZUltYWdlIiwKLSAg
ICBSZXNpemVJbWFnZTogIlJlc2l6ZUltYWdlIiwKLSAgICBDb21wb3NpdGVMYXllcnM6ICJDb21w
b3NpdGVMYXllcnMiLAotCi0gICAgUGFyc2VIVE1MOiAiUGFyc2VIVE1MIiwKLQotICAgIFRpbWVy
SW5zdGFsbDogIlRpbWVySW5zdGFsbCIsCi0gICAgVGltZXJSZW1vdmU6ICJUaW1lclJlbW92ZSIs
Ci0gICAgVGltZXJGaXJlOiAiVGltZXJGaXJlIiwKLQotICAgIFhIUlJlYWR5U3RhdGVDaGFuZ2U6
ICJYSFJSZWFkeVN0YXRlQ2hhbmdlIiwKLSAgICBYSFJMb2FkOiAiWEhSTG9hZCIsCi0gICAgRXZh
bHVhdGVTY3JpcHQ6ICJFdmFsdWF0ZVNjcmlwdCIsCi0KLSAgICBNYXJrTG9hZDogIk1hcmtMb2Fk
IiwKLSAgICBNYXJrRE9NQ29udGVudDogIk1hcmtET01Db250ZW50IiwKLQotICAgIFRpbWVTdGFt
cDogIlRpbWVTdGFtcCIsCi0gICAgVGltZTogIlRpbWUiLAotICAgIFRpbWVFbmQ6ICJUaW1lRW5k
IiwKLQotICAgIFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0OiAiU2NoZWR1bGVSZXNvdXJjZVJlcXVl
c3QiLAotICAgIFJlc291cmNlU2VuZFJlcXVlc3Q6ICJSZXNvdXJjZVNlbmRSZXF1ZXN0IiwKLSAg
ICBSZXNvdXJjZVJlY2VpdmVSZXNwb25zZTogIlJlc291cmNlUmVjZWl2ZVJlc3BvbnNlIiwKLSAg
ICBSZXNvdXJjZVJlY2VpdmVkRGF0YTogIlJlc291cmNlUmVjZWl2ZWREYXRhIiwKLSAgICBSZXNv
dXJjZUZpbmlzaDogIlJlc291cmNlRmluaXNoIiwKLQotICAgIEZ1bmN0aW9uQ2FsbDogIkZ1bmN0
aW9uQ2FsbCIsCi0gICAgR0NFdmVudDogIkdDRXZlbnQiLAotCi0gICAgUmVxdWVzdEFuaW1hdGlv
bkZyYW1lOiAiUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKLSAgICBDYW5jZWxBbmltYXRpb25GcmFt
ZTogIkNhbmNlbEFuaW1hdGlvbkZyYW1lIiwKLSAgICBGaXJlQW5pbWF0aW9uRnJhbWU6ICJGaXJl
QW5pbWF0aW9uRnJhbWUiLAotCi0gICAgV2ViU29ja2V0Q3JlYXRlIDogIldlYlNvY2tldENyZWF0
ZSIsCi0gICAgV2ViU29ja2V0U2VuZEhhbmRzaGFrZVJlcXVlc3QgOiAiV2ViU29ja2V0U2VuZEhh
bmRzaGFrZVJlcXVlc3QiLAotICAgIFdlYlNvY2tldFJlY2VpdmVIYW5kc2hha2VSZXNwb25zZSA6
ICJXZWJTb2NrZXRSZWNlaXZlSGFuZHNoYWtlUmVzcG9uc2UiLAotICAgIFdlYlNvY2tldERlc3Ry
b3kgOiAiV2ViU29ja2V0RGVzdHJveSIsCi19Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVs
LkV2ZW50cyA9IHsKLSAgICBSZWNvcmRBZGRlZDogIlJlY29yZEFkZGVkIiwKLSAgICBSZWNvcmRz
Q2xlYXJlZDogIlJlY29yZHNDbGVhcmVkIgotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNb2Rl
bC5zdGFydFRpbWVJblNlY29uZHMgPSBmdW5jdGlvbihyZWNvcmQpCi17Ci0gICAgcmV0dXJuIHJl
Y29yZC5zdGFydFRpbWUgLyAxMDAwOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5l
bmRUaW1lSW5TZWNvbmRzID0gZnVuY3Rpb24ocmVjb3JkKQotewotICAgIHJldHVybiAodHlwZW9m
IHJlY29yZC5lbmRUaW1lID09PSAidW5kZWZpbmVkIiA/IHJlY29yZC5zdGFydFRpbWUgOiByZWNv
cmQuZW5kVGltZSkgLyAxMDAwOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5kdXJh
dGlvbkluU2Vjb25kcyA9IGZ1bmN0aW9uKHJlY29yZCkKLXsKLSAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwuZW5kVGltZUluU2Vjb25kcyhyZWNvcmQpIC0gV2ViSW5zcGVjdG9y
LlRpbWVsaW5lTW9kZWwuc3RhcnRUaW1lSW5TZWNvbmRzKHJlY29yZCk7Ci19Ci0KLS8qKgotICog
QHBhcmFtIHtPYmplY3R9IHRvdGFsCi0gKiBAcGFyYW0ge09iamVjdH0gcmF3UmVjb3JkCi0gKi8K
LVdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLmFnZ3JlZ2F0ZVRpbWVGb3JSZWNvcmQgPSBmdW5j
dGlvbih0b3RhbCwgcmF3UmVjb3JkKQotewotICAgIHZhciBjaGlsZHJlblRpbWUgPSAwOwotICAg
IHZhciBjaGlsZHJlbiA9IHJhd1JlY29yZFsiY2hpbGRyZW4iXSB8fCBbXTsKLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5UaW1lbGluZU1vZGVsLmFnZ3JlZ2F0ZVRpbWVGb3JSZWNvcmQodG90YWwsIGNoaWxkcmVuW2ld
KTsKLSAgICAgICAgY2hpbGRyZW5UaW1lICs9IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLmR1
cmF0aW9uSW5TZWNvbmRzKGNoaWxkcmVuW2ldKTsKLSAgICB9Ci0gICAgdmFyIGNhdGVnb3J5TmFt
ZSA9IFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLnJlY29yZFN0eWxlKHJh
d1JlY29yZCkuY2F0ZWdvcnkubmFtZTsKLSAgICB2YXIgb3duVGltZSA9IFdlYkluc3BlY3Rvci5U
aW1lbGluZU1vZGVsLmR1cmF0aW9uSW5TZWNvbmRzKHJhd1JlY29yZCkgLSBjaGlsZHJlblRpbWU7
Ci0gICAgdG90YWxbY2F0ZWdvcnlOYW1lXSA9ICh0b3RhbFtjYXRlZ29yeU5hbWVdIHx8IDApICsg
b3duVGltZTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge09iamVjdH0gdG90YWwKLSAqIEBwYXJhbSB7
T2JqZWN0fSBhZGRlbmQKLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuYWdncmVnYXRl
VGltZUJ5Q2F0ZWdvcnkgPSBmdW5jdGlvbih0b3RhbCwgYWRkZW5kKQotewotICAgIGZvciAodmFy
IGNhdGVnb3J5IGluIGFkZGVuZCkKLSAgICAgICAgdG90YWxbY2F0ZWdvcnldID0gKHRvdGFsW2Nh
dGVnb3J5XSB8fCAwKSArIGFkZGVuZFtjYXRlZ29yeV07Ci19Ci0KLVdlYkluc3BlY3Rvci5UaW1l
bGluZU1vZGVsLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49
fSBpbmNsdWRlRG9tQ291bnRlcnMKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpbmNsdWRlTmF0
aXZlTWVtb3J5U3RhdGlzdGljcwotICAgICAqLwotICAgIHN0YXJ0UmVjb3JkOiBmdW5jdGlvbihp
bmNsdWRlRG9tQ291bnRlcnMsIGluY2x1ZGVOYXRpdmVNZW1vcnlTdGF0aXN0aWNzKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX2NvbGxlY3Rpb25FbmFibGVkKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB0aGlzLnJlc2V0KCk7Ci0gICAgICAgIHZhciBtYXhTdGFja0ZyYW1lcyA9IFdl
Ykluc3BlY3Rvci5zZXR0aW5ncy50aW1lbGluZUxpbWl0U3RhY2tGcmFtZXNGbGFnLmdldCgpID8g
V2ViSW5zcGVjdG9yLnNldHRpbmdzLnRpbWVsaW5lU3RhY2tGcmFtZXNUb0NhcHR1cmUuZ2V0KCkg
OiAzMDsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnRpbWVsaW5lTWFuYWdlci5zdGFydChtYXhTdGFj
a0ZyYW1lcywgaW5jbHVkZURvbUNvdW50ZXJzLCBpbmNsdWRlTmF0aXZlTWVtb3J5U3RhdGlzdGlj
cyk7Ci0gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25FbmFibGVkID0gdHJ1ZTsKLSAgICB9LAotCi0g
ICAgc3RvcFJlY29yZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jb2xs
ZWN0aW9uRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LnRpbWVsaW5lTWFuYWdlci5zdG9wKCk7Ci0gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25FbmFibGVk
ID0gZmFsc2U7Ci0gICAgfSwKLQotICAgIGdldCByZWNvcmRzKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9yZWNvcmRzOwotICAgIH0sCi0KLSAgICBfb25SZWNvcmRBZGRlZDogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY29sbGVjdGlvbkVuYWJsZWQpCi0g
ICAgICAgICAgICB0aGlzLl9hZGRSZWNvcmQoZXZlbnQuZGF0YSk7Ci0gICAgfSwKLQotICAgIF9h
ZGRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N0cmluZ1Bv
b2wuaW50ZXJuT2JqZWN0U3RyaW5ncyhyZWNvcmQpOwotICAgICAgICB0aGlzLl9yZWNvcmRzLnB1
c2gocmVjb3JkKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlQm91bmRhcmllcyhyZWNvcmQpOwotICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGltZWxpbmVN
b2RlbC5FdmVudHMuUmVjb3JkQWRkZWQsIHJlY29yZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7IUJsb2J9IGZpbGUKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJv
Z3Jlc3N9IHByb2dyZXNzCi0gICAgICovCi0gICAgbG9hZEZyb21GaWxlOiBmdW5jdGlvbihmaWxl
LCBwcm9ncmVzcykKLSAgICB7Ci0gICAgICAgIHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0
b3IuVGltZWxpbmVNb2RlbExvYWRGcm9tRmlsZURlbGVnYXRlKHRoaXMsIHByb2dyZXNzKTsKLSAg
ICAgICAgdmFyIGZpbGVSZWFkZXIgPSB0aGlzLl9jcmVhdGVGaWxlUmVhZGVyKGZpbGUsIGRlbGVn
YXRlKTsKLSAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2Rl
bExvYWRlcih0aGlzLCBmaWxlUmVhZGVyLCBwcm9ncmVzcyk7Ci0gICAgICAgIGZpbGVSZWFkZXIu
c3RhcnQobG9hZGVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHVybAotICAgICAqLwotICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1cmwsIHByb2dyZXNzKQot
ICAgIHsKLSAgICAgICAgdmFyIGRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZU1v
ZGVsTG9hZEZyb21GaWxlRGVsZWdhdGUodGhpcywgcHJvZ3Jlc3MpOwotICAgICAgICB2YXIgdXJs
UmVhZGVyID0gbmV3IFdlYkluc3BlY3Rvci5DaHVua2VkWEhSUmVhZGVyKHVybCwgZGVsZWdhdGUp
OwotICAgICAgICB2YXIgbG9hZGVyID0gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsTG9h
ZGVyKHRoaXMsIHVybFJlYWRlciwgcHJvZ3Jlc3MpOwotICAgICAgICB1cmxSZWFkZXIuc3RhcnQo
bG9hZGVyKTsKLSAgICB9LAotCi0gICAgX2NyZWF0ZUZpbGVSZWFkZXI6IGZ1bmN0aW9uKGZpbGUs
IGRlbGVnYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ2h1bmtl
ZEZpbGVSZWFkZXIoZmlsZSwgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuVHJhbnNmZXJDaHVu
a0xlbmd0aEJ5dGVzLCBkZWxlZ2F0ZSk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVGaWxlV3JpdGVy
OiBmdW5jdGlvbihmaWxlTmFtZSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgc3RyZWFt
ID0gbmV3IFdlYkluc3BlY3Rvci5GaWxlT3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIHN0cmVhbS5v
cGVuKGZpbGVOYW1lLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIHNhdmVUb0ZpbGU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOwotICAgICAgICB2YXIg
ZmlsZU5hbWUgPSAiVGltZWxpbmVSYXdEYXRhLSIgKyBub3cudG9JU084NjAxQ29tcGFjdCgpICsg
Ii5qc29uIjsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soc3RyZWFtKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB2YXIgc2F2ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5lU2F2ZXIoc3Ry
ZWFtKTsKLSAgICAgICAgICAgIHNhdmVyLnNhdmUodGhpcy5fcmVjb3Jkcywgd2luZG93Lm5hdmln
YXRvci5hcHBWZXJzaW9uKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9jcmVhdGVGaWxlV3Jp
dGVyKGZpbGVOYW1lLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgcmVzZXQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlY29yZHMgPSBbXTsKLSAgICAgICAg
dGhpcy5fc3RyaW5nUG9vbC5yZXNldCgpOwotICAgICAgICB0aGlzLl9taW5pbXVtUmVjb3JkVGlt
ZSA9IC0xOwotICAgICAgICB0aGlzLl9tYXhpbXVtUmVjb3JkVGltZSA9IC0xOwotICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5F
dmVudHMuUmVjb3Jkc0NsZWFyZWQpOwotICAgIH0sCi0KLSAgICBtaW5pbXVtUmVjb3JkVGltZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21pbmltdW1SZWNvcmRUaW1l
OwotICAgIH0sCi0KLSAgICBtYXhpbXVtUmVjb3JkVGltZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX21heGltdW1SZWNvcmRUaW1lOwotICAgIH0sCi0KLSAgICBfdXBk
YXRlQm91bmRhcmllczogZnVuY3Rpb24ocmVjb3JkKQotICAgIHsKLSAgICAgICAgdmFyIHN0YXJ0
VGltZSA9IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnN0YXJ0VGltZUluU2Vjb25kcyhyZWNv
cmQpOwotICAgICAgICB2YXIgZW5kVGltZSA9IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLmVu
ZFRpbWVJblNlY29uZHMocmVjb3JkKTsKLQotICAgICAgICBpZiAodGhpcy5fbWluaW11bVJlY29y
ZFRpbWUgPT09IC0xIHx8IHN0YXJ0VGltZSA8IHRoaXMuX21pbmltdW1SZWNvcmRUaW1lKQotICAg
ICAgICAgICAgdGhpcy5fbWluaW11bVJlY29yZFRpbWUgPSBzdGFydFRpbWU7Ci0gICAgICAgIGlm
ICh0aGlzLl9tYXhpbXVtUmVjb3JkVGltZSA9PT0gLTEgfHwgZW5kVGltZSA+IHRoaXMuX21heGlt
dW1SZWNvcmRUaW1lKQotICAgICAgICAgICAgdGhpcy5fbWF4aW11bVJlY29yZFRpbWUgPSBlbmRU
aW1lOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gcmF3UmVjb3Jk
Ci0gICAgICovCi0gICAgcmVjb3JkT2Zmc2V0SW5TZWNvbmRzOiBmdW5jdGlvbihyYXdSZWNvcmQp
Ci0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuc3RhcnRU
aW1lSW5TZWNvbmRzKHJhd1JlY29yZCkgLSB0aGlzLl9taW5pbXVtUmVjb3JkVGltZTsKLSAgICB9
LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5PdXRwdXRT
dHJlYW19Ci0gKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbH0gbW9kZWwKLSAq
IEBwYXJhbSB7IXtjYW5jZWw6IGZ1bmN0aW9uKCl9fSByZWFkZXIKLSAqIEBwYXJhbSB7IVdlYklu
c3BlY3Rvci5Qcm9ncmVzc30gcHJvZ3Jlc3MKLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9k
ZWxMb2FkZXIgPSBmdW5jdGlvbihtb2RlbCwgcmVhZGVyLCBwcm9ncmVzcykKLXsKLSAgICB0aGlz
Ll9tb2RlbCA9IG1vZGVsOwotICAgIHRoaXMuX3JlYWRlciA9IHJlYWRlcjsKLSAgICB0aGlzLl9w
cm9ncmVzcyA9IHByb2dyZXNzOwotICAgIHRoaXMuX2J1ZmZlciA9ICIiOwotICAgIHRoaXMuX2Zp
cnN0Q2h1bmsgPSB0cnVlOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbExvYWRlci5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCi0gICAg
ICovCi0gICAgd3JpdGU6IGZ1bmN0aW9uKGNodW5rKQotICAgIHsKLSAgICAgICAgdmFyIGRhdGEg
PSB0aGlzLl9idWZmZXIgKyBjaHVuazsKLSAgICAgICAgdmFyIGxhc3RJbmRleCA9IDA7Ci0gICAg
ICAgIHZhciBpbmRleDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaW5kZXggPSBsYXN0SW5k
ZXg7Ci0gICAgICAgICAgICBsYXN0SW5kZXggPSBXZWJJbnNwZWN0b3IuZmluZEJhbGFuY2VkQ3Vy
bHlCcmFja2V0cyhkYXRhLCBpbmRleCk7Ci0gICAgICAgIH0gd2hpbGUgKGxhc3RJbmRleCAhPT0g
LTEpCi0KLSAgICAgICAgdmFyIGpzb24gPSBkYXRhLnNsaWNlKDAsIGluZGV4KSArICJdIjsKLSAg
ICAgICAgdGhpcy5fYnVmZmVyID0gZGF0YS5zbGljZShpbmRleCk7Ci0KLSAgICAgICAgaWYgKCFp
bmRleCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBQcmVwZW5kaW5nICIwIiB0
byB0dXJuIHN0cmluZyBpbnRvIHZhbGlkIEpTT04uCi0gICAgICAgIGlmICghdGhpcy5fZmlyc3RD
aHVuaykKLSAgICAgICAgICAgIGpzb24gPSAiWzAiICsganNvbjsKLQotICAgICAgICB2YXIgaXRl
bXM7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpdGVtcyA9IC8qKiBAdHlwZSB7QXJyYXl9
ICovIChKU09OLnBhcnNlKGpzb24pKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnNob3dFcnJvck1lc3NhZ2UoIk1hbGZvcm1lZCB0aW1lbGluZSBkYXRh
LiIpOwotICAgICAgICAgICAgdGhpcy5fbW9kZWwucmVzZXQoKTsKLSAgICAgICAgICAgIHRoaXMu
X3JlYWRlci5jYW5jZWwoKTsKLSAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmRvbmUoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9maXJzdENo
dW5rKSB7Ci0gICAgICAgICAgICB0aGlzLl92ZXJzaW9uID0gaXRlbXNbMF07Ci0gICAgICAgICAg
ICB0aGlzLl9maXJzdENodW5rID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLl9tb2RlbC5yZXNl
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2tpcCAwLXRoIGVsZW1lbnQgLSBpdCBpcyBl
aXRoZXIgdmVyc2lvbiBvciAwLgotICAgICAgICBmb3IgKHZhciBpID0gMSwgc2l6ZSA9IGl0ZW1z
Lmxlbmd0aDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX21vZGVsLl9hZGRSZWNv
cmQoaXRlbXNbaV0pOwotICAgIH0sCi0KLSAgICBjbG9zZTogZnVuY3Rpb24oKSB7IH0KLX0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuT3V0cHV0
U3RyZWFtRGVsZWdhdGV9Ci0gKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbH0g
bW9kZWwKLSAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9ncmVzc30gcHJvZ3Jlc3MKLSAqLwot
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWxMb2FkRnJvbUZpbGVEZWxlZ2F0ZSA9IGZ1bmN0aW9u
KG1vZGVsLCBwcm9ncmVzcykKLXsKLSAgICB0aGlzLl9tb2RlbCA9IG1vZGVsOwotICAgIHRoaXMu
X3Byb2dyZXNzID0gcHJvZ3Jlc3M7Ci19Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsTG9h
ZEZyb21GaWxlRGVsZWdhdGUucHJvdG90eXBlID0gewotICAgIG9uVHJhbnNmZXJTdGFydGVkOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9wcm9ncmVzcy5zZXRUaXRsZShXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmdcdTIwMjYiKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNodW5rZWRSZWFkZXJ9IHJlYWRlcgotICAgICAqLwot
ICAgIG9uQ2h1bmtUcmFuc2ZlcnJlZDogZnVuY3Rpb24ocmVhZGVyKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX3Byb2dyZXNzLmlzQ2FuY2VsZWQoKSkgewotICAgICAgICAgICAgcmVhZGVyLmNh
bmNlbCgpOwotICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuZG9uZSgpOwotICAgICAgICAgICAg
dGhpcy5fbW9kZWwucmVzZXQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciB0b3RhbFNpemUgPSByZWFkZXIuZmlsZVNpemUoKTsKLSAgICAgICAgaWYgKHRv
dGFsU2l6ZSkgewotICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3Muc2V0VG90YWxXb3JrKHRvdGFs
U2l6ZSk7Ci0gICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5zZXRXb3JrZWQocmVhZGVyLmxvYWRl
ZFNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgb25UcmFuc2ZlckZpbmlzaGVkOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9wcm9ncmVzcy5kb25lKCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNodW5rZWRSZWFkZXJ9IHJl
YWRlcgotICAgICAqLwotICAgIG9uRXJyb3I6IGZ1bmN0aW9uKHJlYWRlciwgZXZlbnQpCi0gICAg
ewotICAgICAgICB0aGlzLl9wcm9ncmVzcy5kb25lKCk7Ci0gICAgICAgIHRoaXMuX21vZGVsLnJl
c2V0KCk7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQudGFyZ2V0LmVycm9yLmNvZGUpIHsKLSAgICAg
ICAgY2FzZSBGaWxlRXJyb3IuTk9UX0ZPVU5EX0VSUjoKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5zaG93RXJyb3JNZXNzYWdlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRmlsZSBcIiVzXCIgbm90
IGZvdW5kLiIsIHJlYWRlci5maWxlTmFtZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBGaWxlRXJyb3IuTk9UX1JFQURBQkxFX0VSUjoKLSAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5zaG93RXJyb3JNZXNzYWdlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRmlsZSBcIiVzXCIg
aXMgbm90IHJlYWRhYmxlIiwgcmVhZGVyLmZpbGVOYW1lKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEZpbGVFcnJvci5BQk9SVF9FUlI6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93RXJyb3JNZXNz
YWdlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGlu
ZyB0aGUgZmlsZSBcIiVzXCIiLCByZWFkZXIuZmlsZU5hbWUoKSkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVT
YXZlciA9IGZ1bmN0aW9uKHN0cmVhbSkKLXsKLSAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07Ci19
Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZVNhdmVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0FycmF5fSByZWNvcmRzCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNp
b24KLSAgICAgKi8KLSAgICBzYXZlOiBmdW5jdGlvbihyZWNvcmRzLCB2ZXJzaW9uKQotICAgIHsK
LSAgICAgICAgdGhpcy5fcmVjb3JkcyA9IHJlY29yZHM7Ci0gICAgICAgIHRoaXMuX3JlY29yZElu
ZGV4ID0gMDsKLSAgICAgICAgdGhpcy5fcHJvbG9ndWUgPSAiWyIgKyBKU09OLnN0cmluZ2lmeSh2
ZXJzaW9uKTsKLQotICAgICAgICB0aGlzLl93cml0ZU5leHRDaHVuayh0aGlzLl9zdHJlYW0pOwot
ICAgIH0sCi0KLSAgICBfd3JpdGVOZXh0Q2h1bms6IGZ1bmN0aW9uKHN0cmVhbSkKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IHNlcGFyYXRvciA9ICIsXG4iOwotICAgICAgICB2YXIgZGF0YSA9IFtdOwot
ICAgICAgICB2YXIgbGVuZ3RoID0gMDsKLQotICAgICAgICBpZiAodGhpcy5fcHJvbG9ndWUpIHsK
LSAgICAgICAgICAgIGRhdGEucHVzaCh0aGlzLl9wcm9sb2d1ZSk7Ci0gICAgICAgICAgICBsZW5n
dGggKz0gdGhpcy5fcHJvbG9ndWUubGVuZ3RoOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3By
b2xvZ3VlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHRoaXMuX3JlY29yZElu
ZGV4ID09PSB0aGlzLl9yZWNvcmRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHN0cmVhbS5j
bG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGRhdGEucHVzaCgiIik7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHRoaXMuX3JlY29y
ZEluZGV4IDwgdGhpcy5fcmVjb3Jkcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHZhciBpdGVtID0g
SlNPTi5zdHJpbmdpZnkodGhpcy5fcmVjb3Jkc1t0aGlzLl9yZWNvcmRJbmRleF0pOwotICAgICAg
ICAgICAgdmFyIGl0ZW1MZW5ndGggPSBpdGVtLmxlbmd0aCArIHNlcGFyYXRvci5sZW5ndGg7Ci0g
ICAgICAgICAgICBpZiAobGVuZ3RoICsgaXRlbUxlbmd0aCA+IFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU1vZGVsLlRyYW5zZmVyQ2h1bmtMZW5ndGhCeXRlcykKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGxlbmd0aCArPSBpdGVtTGVuZ3RoOwotICAgICAgICAgICAgZGF0YS5wdXNo
KGl0ZW0pOwotICAgICAgICAgICAgKyt0aGlzLl9yZWNvcmRJbmRleDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAodGhpcy5fcmVjb3JkSW5kZXggPT09IHRoaXMuX3JlY29yZHMubGVuZ3RoKQotICAg
ICAgICAgICAgZGF0YS5wdXNoKGRhdGEucG9wKCkgKyAiXSIpOwotICAgICAgICBzdHJlYW0ud3Jp
dGUoZGF0YS5qb2luKHNlcGFyYXRvciksIHRoaXMuX3dyaXRlTmV4dENodW5rLmJpbmQodGhpcykp
OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGltZWxpbmVPdmVydmlld1BhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RpbWVsaW5lT3ZlcnZpZXdQYW5lLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MDk2YjRjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvVGltZWxpbmVPdmVydmlld1BhbmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4OTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsfSBtb2RlbAotICovCi1XZWJJ
bnNwZWN0b3IuVGltZWxpbmVPdmVydmlld1BhbmUgPSBmdW5jdGlvbihtb2RlbCkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMuZWxlbWVudC5pZCA9ICJ0aW1l
bGluZS1vdmVydmlldy1wYW5lbCI7Ci0KLSAgICB0aGlzLl93aW5kb3dTdGFydFRpbWUgPSAwOwot
ICAgIHRoaXMuX3dpbmRvd0VuZFRpbWUgPSBJbmZpbml0eTsKLSAgICB0aGlzLl9ldmVudERpdmlk
ZXJzID0gW107Ci0KLSAgICB0aGlzLl9tb2RlbCA9IG1vZGVsOwotCi0gICAgdGhpcy5fdG9wUGFu
ZVNpZGViYXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhp
cy5fdG9wUGFuZVNpZGViYXJFbGVtZW50LmlkID0gInRpbWVsaW5lLW92ZXJ2aWV3LXNpZGViYXIi
OwotCi0gICAgdmFyIG92ZXJ2aWV3VHJlZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJvbCIpOwotICAgIG92ZXJ2aWV3VHJlZUVsZW1lbnQuY2xhc3NOYW1lID0gInNpZGViYXItdHJl
ZSI7Ci0gICAgdGhpcy5fdG9wUGFuZVNpZGViYXJFbGVtZW50LmFwcGVuZENoaWxkKG92ZXJ2aWV3
VHJlZUVsZW1lbnQpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl90b3BQYW5l
U2lkZWJhckVsZW1lbnQpOwotCi0gICAgdmFyIHRvcFBhbmVTaWRlYmFyVHJlZSA9IG5ldyBUcmVl
T3V0bGluZShvdmVydmlld1RyZWVFbGVtZW50KTsKLQotICAgIHRoaXMuX292ZXJ2aWV3SXRlbXMg
PSB7fTsKLSAgICB0aGlzLl9vdmVydmlld0l0ZW1zW1dlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2
aWV3UGFuZS5Nb2RlLkV2ZW50c10gPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVu
dCgidGltZWxpbmUtb3ZlcnZpZXctc2lkZWJhci1ldmVudHMiLAotICAgICAgICBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkV2ZW50cyIpKTsKLSAgICBpZiAoQ2FwYWJpbGl0aWVzLnRpbWVsaW5lU3Vw
cG9ydHNGcmFtZUluc3RydW1lbnRhdGlvbikgewotICAgICAgICB0aGlzLl9vdmVydmlld0l0ZW1z
W1dlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3UGFuZS5Nb2RlLkZyYW1lc10gPSBuZXcgV2Vi
SW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudCgidGltZWxpbmUtb3ZlcnZpZXctc2lkZWJhci1m
cmFtZXMiLAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJGcmFtZXMiKSk7Ci0g
ICAgfQotICAgIHRoaXMuX292ZXJ2aWV3SXRlbXNbV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZp
ZXdQYW5lLk1vZGUuTWVtb3J5XSA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50
KCJ0aW1lbGluZS1vdmVydmlldy1zaWRlYmFyLW1lbW9yeSIsCi0gICAgICAgIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiTWVtb3J5IikpOwotCi0gICAgZm9yICh2YXIgbW9kZSBpbiB0aGlzLl9vdmVy
dmlld0l0ZW1zKSB7Ci0gICAgICAgIHZhciBpdGVtID0gdGhpcy5fb3ZlcnZpZXdJdGVtc1ttb2Rl
XTsKLSAgICAgICAgaXRlbS5vbnNlbGVjdCA9IHRoaXMuc2V0TW9kZS5iaW5kKHRoaXMsIG1vZGUp
OwotICAgICAgICB0b3BQYW5lU2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgfQot
ICAgIAotICAgIHRoaXMuX292ZXJ2aWV3R3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuT3ZlcnZpZXdH
cmlkKCJ0aW1lbGluZSIpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9vdmVy
dmlld0dyaWQuZWxlbWVudCk7Ci0KLSAgICB2YXIgc2VwYXJhdG9yRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHNlcGFyYXRvckVsZW1lbnQuaWQgPSAidGltZWxp
bmUtb3ZlcnZpZXctc2VwYXJhdG9yIjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2Vw
YXJhdG9yRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9pbm5lclNldE1vZGUoV2ViSW5zcGVjdG9yLlRp
bWVsaW5lT3ZlcnZpZXdQYW5lLk1vZGUuRXZlbnRzKTsKLQotICAgIHZhciBjYXRlZ29yaWVzID0g
V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY2F0ZWdvcmllcygpOwotICAg
IGZvciAodmFyIGNhdGVnb3J5IGluIGNhdGVnb3JpZXMpCi0gICAgICAgIGNhdGVnb3JpZXNbY2F0
ZWdvcnldLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2F0ZWdvcnkuRXZl
bnRzLlZpc2liaWxpdHlDaGFuZ2VkLCB0aGlzLl9vbkNhdGVnb3J5VmlzaWJpbGl0eUNoYW5nZWQs
IHRoaXMpOwotCi0gICAgdGhpcy5fb3ZlcnZpZXdDYWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rv
ci5UaW1lbGluZU92ZXJ2aWV3Q2FsY3VsYXRvcigpOwotCi0gICAgbW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5FdmVudHMuUmVjb3JkQWRkZWQsIHRoaXMu
X29uUmVjb3JkQWRkZWQsIHRoaXMpOwotICAgIG1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLlRpbWVsaW5lTW9kZWwuRXZlbnRzLlJlY29yZHNDbGVhcmVkLCB0aGlzLl9yZXNldCwg
dGhpcyk7Ci0gICAgdGhpcy5fb3ZlcnZpZXdHcmlkLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLk92ZXJ2aWV3R3JpZC5FdmVudHMuV2luZG93Q2hhbmdlZCwgdGhpcy5fb25XaW5kb3dDaGFu
Z2VkLCB0aGlzKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdQYW5lLk1vZGUg
PSB7Ci0gICAgRXZlbnRzOiAiRXZlbnRzIiwKLSAgICBGcmFtZXM6ICJGcmFtZXMiLAotICAgIE1l
bW9yeTogIk1lbW9yeSIKLX07Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3UGFuZS5F
dmVudHMgPSB7Ci0gICAgTW9kZUNoYW5nZWQ6ICJNb2RlQ2hhbmdlZCIsCi0gICAgV2luZG93Q2hh
bmdlZDogIldpbmRvd0NoYW5nZWQiCi19OwotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmll
d1BhbmUucHJvdG90eXBlID0gewotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl91cGRhdGUoKTsKLSAgICB9LAotCi0gICAgb25SZXNpemU6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZSgpOwotICAgIH0sCi0KLSAgICBzZXRNb2RlOiBm
dW5jdGlvbihuZXdNb2RlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRNb2RlID09
PSBuZXdNb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9pbm5lclNldE1v
ZGUobmV3TW9kZSk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3UGFuZS5FdmVudHMuTW9kZUNoYW5nZWQsIHRoaXMuX2N1
cnJlbnRNb2RlKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIF9pbm5l
clNldE1vZGU6IGZ1bmN0aW9uKG5ld01vZGUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fb3Zl
cnZpZXdDb250cm9sKQotICAgICAgICAgICAgdGhpcy5fb3ZlcnZpZXdDb250cm9sLmRldGFjaCgp
OwotCi0gICAgICAgIHRoaXMuX2N1cnJlbnRNb2RlID0gbmV3TW9kZTsKLSAgICAgICAgdGhpcy5f
b3ZlcnZpZXdDb250cm9sID0gdGhpcy5fY3JlYXRlT3ZlcnZpZXdDb250cm9sKCk7Ci0gICAgICAg
IHRoaXMuX292ZXJ2aWV3Q29udHJvbC5zaG93KHRoaXMuX292ZXJ2aWV3R3JpZC5lbGVtZW50KTsK
LSAgICAgICAgdGhpcy5fb3ZlcnZpZXdJdGVtc1t0aGlzLl9jdXJyZW50TW9kZV0ucmV2ZWFsQW5k
U2VsZWN0KGZhbHNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdCYXNlfG51bGx9Ci0gICAgICovCi0gICAgX2NyZWF0ZU92
ZXJ2aWV3Q29udHJvbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0aGlzLl9j
dXJyZW50TW9kZSkgewotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3
UGFuZS5Nb2RlLkV2ZW50czoKLSAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRp
bWVsaW5lRXZlbnRPdmVydmlldyh0aGlzLl9tb2RlbCk7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lT3ZlcnZpZXdQYW5lLk1vZGUuRnJhbWVzOgotICAgICAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVGcmFtZU92ZXJ2aWV3KHRoaXMuX21vZGVsKTsKLSAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlld1BhbmUuTW9kZS5NZW1vcnk6
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZU1lbW9yeU92ZXJ2
aWV3KHRoaXMuX21vZGVsKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIklu
dmFsaWQgb3ZlcnZpZXcgbW9kZTogIiArIHRoaXMuX2N1cnJlbnRNb2RlKTsKLSAgICB9LAotCi0g
ICAgX29uQ2F0ZWdvcnlWaXNpYmlsaXR5Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICB0aGlzLl9vdmVydmlld0NvbnRyb2wuY2F0ZWdvcnlWaXNpYmlsaXR5Q2hhbmdlZCgp
OwotICAgIH0sCi0KLSAgICBfdXBkYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxl
dGUgdGhpcy5fcmVmcmVzaFRpbWVvdXQ7Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlV2luZG93KCk7
Ci0gICAgICAgIHRoaXMuX292ZXJ2aWV3Q2FsY3VsYXRvci5zZXRXaW5kb3codGhpcy5fbW9kZWwu
bWluaW11bVJlY29yZFRpbWUoKSwgdGhpcy5fbW9kZWwubWF4aW11bVJlY29yZFRpbWUoKSk7Ci0g
ICAgICAgIHRoaXMuX292ZXJ2aWV3Q2FsY3VsYXRvci5zZXREaXNwbGF5V2luZG93KDAsIHRoaXMu
X292ZXJ2aWV3R3JpZC5jbGllbnRXaWR0aCgpKTsKLQotICAgICAgICB0aGlzLl9vdmVydmlld0Nv
bnRyb2wudXBkYXRlKCk7Ci0gICAgICAgIHRoaXMuX292ZXJ2aWV3R3JpZC51cGRhdGVEaXZpZGVy
cyh0aGlzLl9vdmVydmlld0NhbGN1bGF0b3IpOwotICAgICAgICB0aGlzLl91cGRhdGVFdmVudERp
dmlkZXJzKCk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVFdmVudERpdmlkZXJzOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB2YXIgcmVjb3JkcyA9IHRoaXMuX2V2ZW50RGl2aWRlcnM7Ci0gICAg
ICAgIHRoaXMuX292ZXJ2aWV3R3JpZC5yZW1vdmVFdmVudERpdmlkZXJzKCk7Ci0gICAgICAgIHZh
ciBkaXZpZGVycyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29yZHMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciByZWNvcmQgPSByZWNvcmRzW2ldOwotICAgICAg
ICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuX292ZXJ2aWV3Q2FsY3VsYXRvci5jb21wdXRlQmFy
R3JhcGhQZXJjZW50YWdlcyhyZWNvcmQpOwotICAgICAgICAgICAgdmFyIGRpdmlkZXJQb3NpdGlv
biA9IE1hdGgucm91bmQocG9zaXRpb25zLnN0YXJ0ICogMTApOwotICAgICAgICAgICAgaWYgKGRp
dmlkZXJzW2RpdmlkZXJQb3NpdGlvbl0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB2YXIgZGl2aWRlciA9IFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1v
ZGVsLmNyZWF0ZUV2ZW50RGl2aWRlcihyZWNvcmQudHlwZSk7Ci0gICAgICAgICAgICBkaXZpZGVy
LnN0eWxlLmxlZnQgPSBwb3NpdGlvbnMuc3RhcnQgKyAiJSI7Ci0gICAgICAgICAgICBkaXZpZGVy
c1tkaXZpZGVyUG9zaXRpb25dID0gZGl2aWRlcjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9v
dmVydmlld0dyaWQuYWRkRXZlbnREaXZpZGVycyhkaXZpZGVycyk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aAotICAgICAqLwotICAgIHNpZGViYXJSZXNp
emVkOiBmdW5jdGlvbih3aWR0aCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX292ZXJ2aWV3R3JpZC5l
bGVtZW50LnN0eWxlLmxlZnQgPSB3aWR0aCArICJweCI7Ci0gICAgICAgIHRoaXMuX3RvcFBhbmVT
aWRlYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgdGhpcy5f
dXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlRpbWVsaW5lRnJhbWV9IGZyYW1lCi0gICAgICovCi0gICAgYWRkRnJhbWU6IGZ1bmN0aW9uKGZy
YW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdDb250cm9sLmFkZEZyYW1lKGZyYW1l
KTsKLSAgICAgICAgdGhpcy5fc2NoZWR1bGVSZWZyZXNoKCk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lRnJhbWV9IGZyYW1lCi0gICAgICov
Ci0gICAgem9vbVRvRnJhbWU6IGZ1bmN0aW9uKGZyYW1lKQotICAgIHsKLSAgICAgICAgdmFyIGZy
YW1lT3ZlcnZpZXcgPSAvKiogQHR5cGUgV2ViSW5zcGVjdG9yLlRpbWVsaW5lRnJhbWVPdmVydmll
dyAqLyAodGhpcy5fb3ZlcnZpZXdDb250cm9sKTsKLSAgICAgICAgdmFyIHdpbmRvdyA9IGZyYW1l
T3ZlcnZpZXcuZnJhbWVQb3NpdGlvbihmcmFtZSk7Ci0gICAgICAgIGlmICghd2luZG93KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX292ZXJ2aWV3R3JpZC5zZXRXaW5kb3dQ
b3NpdGlvbih3aW5kb3cuc3RhcnQsIHdpbmRvdy5lbmQpOwotICAgIH0sCi0KLSAgICBfb25SZWNv
cmRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcmVjb3JkID0gZXZl
bnQuZGF0YTsKLSAgICAgICAgdmFyIGV2ZW50RGl2aWRlcnMgPSB0aGlzLl9ldmVudERpdmlkZXJz
OwotICAgICAgICBmdW5jdGlvbiBhZGRFdmVudERpdmlkZXJzKHJlY29yZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmlz
RXZlbnREaXZpZGVyKHJlY29yZCkpCi0gICAgICAgICAgICAgICAgZXZlbnREaXZpZGVycy5wdXNo
KHJlY29yZCk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2Vu
dGF0aW9uTW9kZWwuZm9yQWxsUmVjb3JkcyhbcmVjb3JkXSwgYWRkRXZlbnREaXZpZGVycyk7Ci0g
ICAgICAgIHRoaXMuX3NjaGVkdWxlUmVmcmVzaCgpOwotICAgIH0sCi0KLSAgICBfcmVzZXQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3dpbmRvd1N0YXJ0VGltZSA9IDA7Ci0gICAg
ICAgIHRoaXMuX3dpbmRvd0VuZFRpbWUgPSBJbmZpbml0eTsKLSAgICAgICAgdGhpcy5fb3ZlcnZp
ZXdDYWxjdWxhdG9yLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX292ZXJ2aWV3R3JpZC5yZXNldCgp
OwotICAgICAgICB0aGlzLl9ldmVudERpdmlkZXJzID0gW107Ci0gICAgICAgIHRoaXMuX292ZXJ2
aWV3R3JpZC51cGRhdGVEaXZpZGVycyh0aGlzLl9vdmVydmlld0NhbGN1bGF0b3IpOwotICAgICAg
ICB0aGlzLl9vdmVydmlld0NvbnRyb2wucmVzZXQoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlKCk7
Ci0gICAgfSwKLQotICAgIHdpbmRvd1N0YXJ0VGltZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3dpbmRvd1N0YXJ0VGltZSB8fCB0aGlzLl9tb2RlbC5taW5pbXVtUmVj
b3JkVGltZSgpOwotICAgIH0sCi0KLSAgICB3aW5kb3dFbmRUaW1lOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93RW5kVGltZSA8IEluZmluaXR5ID8gdGhpcy5f
d2luZG93RW5kVGltZSA6IHRoaXMuX21vZGVsLm1heGltdW1SZWNvcmRUaW1lKCk7Ci0gICAgfSwK
LQotICAgIHdpbmRvd0xlZnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9vdmVydmlld0dyaWQud2luZG93TGVmdCgpOwotICAgIH0sCi0KLSAgICB3aW5kb3dSaWdodDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJ2aWV3R3JpZC53aW5k
b3dSaWdodCgpOwotICAgIH0sCi0KLSAgICBfb25XaW5kb3dDaGFuZ2VkOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5faWdub3JlV2luZG93Q2hhbmdlZEV2ZW50KQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdGltZXMgPSB0aGlzLl9vdmVydmlld0NvbnRyb2wu
d2luZG93VGltZXModGhpcy53aW5kb3dMZWZ0KCksIHRoaXMud2luZG93UmlnaHQoKSk7Ci0gICAg
ICAgIHRoaXMuX3dpbmRvd1N0YXJ0VGltZSA9IHRpbWVzLnN0YXJ0VGltZTsKLSAgICAgICAgdGhp
cy5fd2luZG93RW5kVGltZSA9IHRpbWVzLmVuZFRpbWU7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3UGFuZS5FdmVudHMu
V2luZG93Q2hhbmdlZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7TnVtYmVy
fSBsZWZ0Ci0gICAgICogQHBhcmFtIHtOdW1iZXJ9IHJpZ2h0Ci0gICAgICovCi0gICAgc2V0V2lu
ZG93VGltZXM6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KQotICAgIHsKLSAgICAgICAgdGhpcy5fd2lu
ZG93U3RhcnRUaW1lID0gbGVmdDsKLSAgICAgICAgdGhpcy5fd2luZG93RW5kVGltZSA9IHJpZ2h0
OwotICAgICAgICB0aGlzLl91cGRhdGVXaW5kb3coKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVdp
bmRvdzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX21vZGVs
Lm1pbmltdW1SZWNvcmRUaW1lKCk7Ci0gICAgICAgIHZhciB0aW1lU3BhbiA9IHRoaXMuX21vZGVs
Lm1heGltdW1SZWNvcmRUaW1lKCkgLSBvZmZzZXQ7Ci0gICAgICAgIHZhciBsZWZ0ID0gdGhpcy5f
d2luZG93U3RhcnRUaW1lID8gKHRoaXMuX3dpbmRvd1N0YXJ0VGltZSAtIG9mZnNldCkgLyB0aW1l
U3BhbiA6IDA7Ci0gICAgICAgIHZhciByaWdodCA9IHRoaXMuX3dpbmRvd0VuZFRpbWUgPCBJbmZp
bml0eSA/ICh0aGlzLl93aW5kb3dFbmRUaW1lIC0gb2Zmc2V0KSAvIHRpbWVTcGFuIDogMTsKLSAg
ICAgICAgdGhpcy5faWdub3JlV2luZG93Q2hhbmdlZEV2ZW50ID0gdHJ1ZTsKLSAgICAgICAgdGhp
cy5fb3ZlcnZpZXdHcmlkLnNldFdpbmRvdyhsZWZ0LCByaWdodCk7Ci0gICAgICAgIHRoaXMuX2ln
bm9yZVdpbmRvd0NoYW5nZWRFdmVudCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICBfc2NoZWR1bGVS
ZWZyZXNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmVmcmVzaFRpbWVv
dXQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fcmVmcmVzaFRpbWVvdXQgPSBzZXRU
aW1lb3V0KHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpLCAzMDApOwotICAgIH0sCi0KLSAgICBfX3By
b3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UaW1lbGluZUdyaWQuQ2FsY3VsYXRv
cn0KLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdDYWxjdWxhdG9yID0gZnVuY3Rp
b24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlld0NhbGN1bGF0b3IucHJv
dG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lCi0gICAgICov
Ci0gICAgY29tcHV0ZVBvc2l0aW9uOiBmdW5jdGlvbih0aW1lKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICh0aW1lIC0gdGhpcy5fbWluaW11bUJvdW5kYXJ5KSAvIHRoaXMuYm91bmRhcnlTcGFuKCkg
KiB0aGlzLl93b3JraW5nQXJlYSArIHRoaXMucGFkZGluZ0xlZnQ7Ci0gICAgfSwKLQotICAgIGNv
bXB1dGVCYXJHcmFwaFBlcmNlbnRhZ2VzOiBmdW5jdGlvbihyZWNvcmQpCi0gICAgewotICAgICAg
ICB2YXIgc3RhcnQgPSAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuc3RhcnRUaW1lSW5TZWNv
bmRzKHJlY29yZCkgLSB0aGlzLl9taW5pbXVtQm91bmRhcnkpIC8gdGhpcy5ib3VuZGFyeVNwYW4o
KSAqIDEwMDsKLSAgICAgICAgdmFyIGVuZCA9IChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5l
bmRUaW1lSW5TZWNvbmRzKHJlY29yZCkgLSB0aGlzLl9taW5pbXVtQm91bmRhcnkpIC8gdGhpcy5i
b3VuZGFyeVNwYW4oKSAqIDEwMDsKLSAgICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDog
ZW5kfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSBtaW5pbXVt
Ci0gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhpbXVtCi0gICAgICovCi0gICAgc2V0V2luZG93
OiBmdW5jdGlvbihtaW5pbXVtLCBtYXhpbXVtKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWluaW11
bUJvdW5kYXJ5ID0gbWluaW11bSA+PSAwID8gbWluaW11bSA6IHVuZGVmaW5lZDsKLSAgICAgICAg
dGhpcy5fbWF4aW11bUJvdW5kYXJ5ID0gbWF4aW11bSA+PSAwID8gbWF4aW11bSA6IHVuZGVmaW5l
ZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZGRpbmdMZWZ0
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNsaWVudFdpZHRoCi0gICAgICovCi0gICAgc2V0RGlz
cGxheVdpbmRvdzogZnVuY3Rpb24ocGFkZGluZ0xlZnQsIGNsaWVudFdpZHRoKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fd29ya2luZ0FyZWEgPSBjbGllbnRXaWR0aCAtIHBhZGRpbmdMZWZ0OwotICAg
ICAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gcGFkZGluZ0xlZnQ7Ci0gICAgfSwKLQotICAgIHJlc2V0
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnNldFdpbmRvdygpOwotICAgIH0sCi0K
LSAgICBmb3JtYXRUaW1lOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBO
dW1iZXIuc2Vjb25kc1RvU3RyaW5nKHZhbHVlKTsKLSAgICB9LAotCi0gICAgbWF4aW11bUJvdW5k
YXJ5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWF4aW11bUJvdW5k
YXJ5OwotICAgIH0sCi0KLSAgICBtaW5pbXVtQm91bmRhcnk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9taW5pbXVtQm91bmRhcnk7Ci0gICAgfSwKLQotICAgIHplcm9U
aW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWluaW11bUJvdW5k
YXJ5OwotICAgIH0sCi0KLSAgICBib3VuZGFyeVNwYW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9tYXhpbXVtQm91bmRhcnkgLSB0aGlzLl9taW5pbXVtQm91bmRhcnk7
Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3Bl
Y3Rvci5WaWV3fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbH0gbW9kZWwK
LSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdCYXNlID0gZnVuY3Rpb24obW9kZWwp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLl9tb2RlbCA9
IG1vZGVsOwotICAgIHRoaXMuX2NhbnZhcyA9IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgiY2Fu
dmFzIiwgImZpbGwiKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdCYXNlLnBy
b3RvdHlwZSA9IHsKLSAgICB1cGRhdGU6IGZ1bmN0aW9uKCkgeyB9LAotICAgIHJlc2V0OiBmdW5j
dGlvbigpIHsgfSwKLQotICAgIGNhdGVnb3J5VmlzaWJpbGl0eUNoYW5nZWQ6IGZ1bmN0aW9uKCkg
eyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVGcmFt
ZX0gZnJhbWUKLSAgICAgKi8KLSAgICBhZGRGcmFtZTogZnVuY3Rpb24oZnJhbWUpIHsgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aW5kb3dMZWZ0Ci0gICAgICogQHBhcmFt
IHtudW1iZXJ9IHdpbmRvd1JpZ2h0Ci0gICAgICovCi0gICAgd2luZG93VGltZXM6IGZ1bmN0aW9u
KHdpbmRvd0xlZnQsIHdpbmRvd1JpZ2h0KQotICAgIHsKLSAgICAgICAgdmFyIGFic29sdXRlTWlu
ID0gdGhpcy5fbW9kZWwubWluaW11bVJlY29yZFRpbWUoKTsKLSAgICAgICAgdmFyIGFic29sdXRl
TWF4ID0gdGhpcy5fbW9kZWwubWF4aW11bVJlY29yZFRpbWUoKTsKLSAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgIHN0YXJ0VGltZTogYWJzb2x1dGVNaW4gKyAoYWJzb2x1dGVNYXggLSBhYnNv
bHV0ZU1pbikgKiB3aW5kb3dMZWZ0LAotICAgICAgICAgICAgZW5kVGltZTogYWJzb2x1dGVNaW4g
KyAoYWJzb2x1dGVNYXggLSBhYnNvbHV0ZU1pbikgKiB3aW5kb3dSaWdodAotICAgICAgICB9Owot
ICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5UaW1lbGlu
ZU92ZXJ2aWV3QmFzZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWx9IG1v
ZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZU1lbW9yeU92ZXJ2aWV3ID0gZnVuY3Rpb24o
bW9kZWwpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdCYXNlLmNhbGwodGhp
cywgbW9kZWwpOwotICAgIHRoaXMuZWxlbWVudC5pZCA9ICJ0aW1lbGluZS1vdmVydmlldy1tZW1v
cnkiOwotICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJmaWxsIik7Ci0KLSAgICB0aGlz
Ll9tYXhIZWFwU2l6ZUxhYmVsID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAibWF4
IG1lbW9yeS1ncmFwaC1sYWJlbCIpOwotICAgIHRoaXMuX21pbkhlYXBTaXplTGFiZWwgPSB0aGlz
LmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJtaW4gbWVtb3J5LWdyYXBoLWxhYmVsIik7Ci19
Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZU1lbW9yeU92ZXJ2aWV3LnByb3RvdHlwZSA9IHsKLSAg
ICByZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWF4SGVhcFNpemVMYWJl
bC50ZXh0Q29udGVudCA9ICIiOwotICAgICAgICB0aGlzLl9taW5IZWFwU2l6ZUxhYmVsLnRleHRD
b250ZW50ID0gIiI7Ci0gICAgfSwKLQotICAgIHVwZGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgY29uc3QgeVBhZGRpbmcgPSA1OwotICAgICAgICB0aGlzLl9jYW52YXMud2lkdGggPSB0
aGlzLmVsZW1lbnQuY2xpZW50V2lkdGg7Ci0gICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSB0
aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0IC0geVBhZGRpbmc7Ci0KLSAgICAgICAgdmFyIHJlY29y
ZHMgPSB0aGlzLl9tb2RlbC5yZWNvcmRzOwotICAgICAgICBpZiAoIXJlY29yZHMubGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbnN0IGxvd2VyT2Zmc2V0ID0gMzsKLSAg
ICAgICAgdmFyIG1heFVzZWRIZWFwU2l6ZSA9IDA7Ci0gICAgICAgIHZhciBtaW5Vc2VkSGVhcFNp
emUgPSAxMDAwMDAwMDAwMDA7Ci0gICAgICAgIHZhciBtaW5UaW1lID0gdGhpcy5fbW9kZWwubWlu
aW11bVJlY29yZFRpbWUoKTsKLSAgICAgICAgdmFyIG1heFRpbWUgPSB0aGlzLl9tb2RlbC5tYXhp
bXVtUmVjb3JkVGltZSgpOzsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0
aW9uTW9kZWwuZm9yQWxsUmVjb3JkcyhyZWNvcmRzLCBmdW5jdGlvbihyKSB7Ci0gICAgICAgICAg
ICBtYXhVc2VkSGVhcFNpemUgPSBNYXRoLm1heChtYXhVc2VkSGVhcFNpemUsIHIudXNlZEhlYXBT
aXplIHx8IG1heFVzZWRIZWFwU2l6ZSk7Ci0gICAgICAgICAgICBtaW5Vc2VkSGVhcFNpemUgPSBN
YXRoLm1pbihtaW5Vc2VkSGVhcFNpemUsIHIudXNlZEhlYXBTaXplIHx8IG1pblVzZWRIZWFwU2l6
ZSk7Ci0gICAgICAgIH0pOwotICAgICAgICBtaW5Vc2VkSGVhcFNpemUgPSBNYXRoLm1pbihtaW5V
c2VkSGVhcFNpemUsIG1heFVzZWRIZWFwU2l6ZSk7Ci0KLSAgICAgICAgdmFyIHdpZHRoID0gdGhp
cy5fY2FudmFzLndpZHRoOwotICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fY2FudmFzLmhlaWdo
dCAtIGxvd2VyT2Zmc2V0OwotICAgICAgICB2YXIgeEZhY3RvciA9IHdpZHRoIC8gKG1heFRpbWUg
LSBtaW5UaW1lKTsKLSAgICAgICAgdmFyIHlGYWN0b3IgPSBoZWlnaHQgLyAobWF4VXNlZEhlYXBT
aXplIC0gbWluVXNlZEhlYXBTaXplKTsKLQotICAgICAgICB2YXIgaGlzdG9ncmFtID0gbmV3IEFy
cmF5KHdpZHRoKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9k
ZWwuZm9yQWxsUmVjb3JkcyhyZWNvcmRzLCBmdW5jdGlvbihyKSB7Ci0gICAgICAgICAgICBpZiAo
IXIudXNlZEhlYXBTaXplKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZh
ciB4ID0gTWF0aC5yb3VuZCgoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuZW5kVGltZUluU2Vj
b25kcyhyKSAtIG1pblRpbWUpICogeEZhY3Rvcik7Ci0gICAgICAgICAgICB2YXIgeSA9IE1hdGgu
cm91bmQoKHIudXNlZEhlYXBTaXplIC0gbWluVXNlZEhlYXBTaXplKSAqIHlGYWN0b3IpOwotICAg
ICAgICAgICAgaGlzdG9ncmFtW3hdID0gTWF0aC5tYXgoaGlzdG9ncmFtW3hdIHx8IDAsIHkpOwot
ICAgICAgICB9KTsKLQotICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQo
IjJkIik7Ci0gICAgICAgIHRoaXMuX2NsZWFyKGN0eCk7Ci0KLSAgICAgICAgLy8gKzEgc28gdGhh
dCB0aGUgYm9yZGVyIGFsd2F5cyBmaXQgaW50byB0aGUgY2FudmFzIGFyZWEuCi0gICAgICAgIGhl
aWdodCA9IGhlaWdodCArIDE7Ci0KLSAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICB2
YXIgaW5pdGlhbFkgPSAwOwotICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGhpc3RvZ3JhbS5s
ZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKGhpc3RvZ3JhbVtrXSkgewotICAgICAgICAg
ICAgICAgIGluaXRpYWxZID0gaGlzdG9ncmFtW2tdOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGN0eC5tb3ZlVG8oMCwgaGVpZ2h0IC0g
aW5pdGlhbFkpOwotCi0gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgaGlzdG9ncmFtLmxlbmd0
aDsgeCsrKSB7Ci0gICAgICAgICAgICAgaWYgKCFoaXN0b2dyYW1beF0pCi0gICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgaGVpZ2h0IC0gaGlzdG9n
cmFtW3hdKTsKLSAgICAgICAgfQotCi0gICAgICAgIGN0eC5saW5lV2lkdGggPSAwLjU7Ci0gICAg
ICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDIwLDAsMCwwLjgpIjsKLSAgICAgICAgY3R4LnN0
cm9rZSgpOwotCi0gICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSgyMTQsMjI1LDI1NCwgMC44
KTsiOwotICAgICAgICBjdHgubGluZVRvKHdpZHRoLCA2MCk7Ci0gICAgICAgIGN0eC5saW5lVG8o
MCwgNjApOwotICAgICAgICBjdHgubGluZVRvKDAsIGhlaWdodCAtIGluaXRpYWxZKTsKLSAgICAg
ICAgY3R4LmZpbGwoKTsKLSAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwotCi0gICAgICAgIHRoaXMu
X21heEhlYXBTaXplTGFiZWwudGV4dENvbnRlbnQgPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyhtYXhV
c2VkSGVhcFNpemUpOwotICAgICAgICB0aGlzLl9taW5IZWFwU2l6ZUxhYmVsLnRleHRDb250ZW50
ID0gTnVtYmVyLmJ5dGVzVG9TdHJpbmcobWluVXNlZEhlYXBTaXplKTsKLSAgICB9LAotCi0gICAg
X2NsZWFyOiBmdW5jdGlvbihjdHgpCi0gICAgewotICAgICAgICBjdHguZmlsbFN0eWxlID0gInJn
YmEoMjU1LDI1NSwyNTUsMC44KSI7Ci0gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLl9j
YW52YXMud2lkdGgsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3QmFzZS5wcm90b3R5cGUKLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVy
dmlld0Jhc2V9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsfSBtb2RlbAot
ICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVFdmVudE92ZXJ2aWV3ID0gZnVuY3Rpb24obW9kZWwp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdCYXNlLmNhbGwodGhpcywgbW9k
ZWwpOwotCi0gICAgdGhpcy5lbGVtZW50LmlkID0gInRpbWVsaW5lLW92ZXJ2aWV3LWV2ZW50cyI7
Ci0gICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwotCi0g
ICAgdGhpcy5fZmlsbFN0eWxlcyA9IHt9OwotICAgIHZhciBjYXRlZ29yaWVzID0gV2ViSW5zcGVj
dG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY2F0ZWdvcmllcygpOwotICAgIGZvciAodmFy
IGNhdGVnb3J5IGluIGNhdGVnb3JpZXMpCi0gICAgICAgIHRoaXMuX2ZpbGxTdHlsZXNbY2F0ZWdv
cnldID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY3JlYXRlRmlsbFN0
eWxlRm9yQ2F0ZWdvcnkodGhpcy5fY29udGV4dCwgMCwgV2ViSW5zcGVjdG9yLlRpbWVsaW5lRXZl
bnRPdmVydmlldy5faW5uZXJTdHJpcEhlaWdodCwgY2F0ZWdvcmllc1tjYXRlZ29yeV0pOwotCi0g
ICAgdGhpcy5fZGlzYWJsZWRDYXRlZ29yeUZpbGxTdHlsZSA9IFdlYkluc3BlY3Rvci5UaW1lbGlu
ZVByZXNlbnRhdGlvbk1vZGVsLmNyZWF0ZUZpbGxTdHlsZSh0aGlzLl9jb250ZXh0LCAwLCBXZWJJ
bnNwZWN0b3IuVGltZWxpbmVFdmVudE92ZXJ2aWV3Ll9pbm5lclN0cmlwSGVpZ2h0LAotICAgICAg
ICAicmdiKDIxOCwgMjE4LCAyMTgpIiwgInJnYigxNzAsIDE3MCwgMTcwKSIsICJyZ2IoMTQzLCAx
NDMsIDE0MykiKTsKLQotICAgIHRoaXMuX2Rpc2FibGVkQ2F0ZWdvcnlCb3JkZXJTdHlsZSA9ICJy
Z2IoMTQzLCAxNDMsIDE0MykiOwotfQotCi0vKiogQGNvbnN0ICovCi1XZWJJbnNwZWN0b3IuVGlt
ZWxpbmVFdmVudE92ZXJ2aWV3Ll9jYW52YXNIZWlnaHQgPSA2MDsKLS8qKiBAY29uc3QgKi8KLVdl
Ykluc3BlY3Rvci5UaW1lbGluZUV2ZW50T3ZlcnZpZXcuX251bWJlck9mU3RyaXBzID0gMzsKLS8q
KiBAY29uc3QgKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZUV2ZW50T3ZlcnZpZXcuX3N0cmlwSGVp
Z2h0ID0gTWF0aC5yb3VuZChXZWJJbnNwZWN0b3IuVGltZWxpbmVFdmVudE92ZXJ2aWV3Ll9jYW52
YXNIZWlnaHQgIC8gV2ViSW5zcGVjdG9yLlRpbWVsaW5lRXZlbnRPdmVydmlldy5fbnVtYmVyT2ZT
dHJpcHMpOwotLyoqIEBjb25zdCAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lRXZlbnRPdmVydmll
dy5fc3RyaXBQYWRkaW5nID0gNDsKLS8qKiBAY29uc3QgKi8KLVdlYkluc3BlY3Rvci5UaW1lbGlu
ZUV2ZW50T3ZlcnZpZXcuX2lubmVyU3RyaXBIZWlnaHQgPSBXZWJJbnNwZWN0b3IuVGltZWxpbmVF
dmVudE92ZXJ2aWV3Ll9zdHJpcEhlaWdodCAtIDIgKiBXZWJJbnNwZWN0b3IuVGltZWxpbmVFdmVu
dE92ZXJ2aWV3Ll9zdHJpcFBhZGRpbmc7Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZUV2ZW50T3Zl
cnZpZXcucHJvdG90eXBlID0gewotICAgIHVwZGF0ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgLy8gVXNlIHJlYWwgd29ybGQsIDE6MSBjb29yZGluYXRlcyBpbiBjYW52YXMuIFRoaXMgd2ls
bCBhbHNvIHRha2UgY2FyZSBvZiBjbGVhcmluZyBpdC4KLSAgICAgICAgdGhpcy5fY2FudmFzLndp
ZHRoID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7Ci0gICAgICAgIHRo
aXMuX2NhbnZhcy5oZWlnaHQgPSBXZWJJbnNwZWN0b3IuVGltZWxpbmVFdmVudE92ZXJ2aWV3Ll9j
YW52YXNIZWlnaHQ7Ci0KLSAgICAgICAgdmFyIHRpbWVPZmZzZXQgPSB0aGlzLl9tb2RlbC5taW5p
bXVtUmVjb3JkVGltZSgpOwotICAgICAgICB2YXIgdGltZVNwYW4gPSB0aGlzLl9tb2RlbC5tYXhp
bXVtUmVjb3JkVGltZSgpIC0gdGltZU9mZnNldDsKLSAgICAgICAgdmFyIHNjYWxlID0gdGhpcy5f
Y2FudmFzLndpZHRoIC8gdGltZVNwYW47Ci0KLSAgICAgICAgdmFyIGxhc3RCYXJCeUdyb3VwID0g
W107Ci0KLSAgICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSAicmdiYSgwLCAwLCAwLCAw
LjA1KSI7Ci0gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
RXZlbnRPdmVydmlldy5fbnVtYmVyT2ZTdHJpcHM7IGkgKz0gMikKLSAgICAgICAgICAgIHRoaXMu
X2NvbnRleHQuZmlsbFJlY3QoMC41LCBpICogV2ViSW5zcGVjdG9yLlRpbWVsaW5lRXZlbnRPdmVy
dmlldy5fc3RyaXBIZWlnaHQgKyAwLjUsIHRoaXMuX2NhbnZhcy53aWR0aCwgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lRXZlbnRPdmVydmlldy5fc3RyaXBIZWlnaHQpOwotCi0gICAgICAgIGZ1bmN0aW9u
IGFwcGVuZFJlY29yZChyZWNvcmQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWNvcmQu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5CZWdpbkZyYW1l
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciByZWNvcmRTdGFydCA9
IE1hdGguZmxvb3IoKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnN0YXJ0VGltZUluU2Vjb25k
cyhyZWNvcmQpIC0gdGltZU9mZnNldCkgKiBzY2FsZSk7Ci0gICAgICAgICAgICB2YXIgcmVjb3Jk
RW5kID0gTWF0aC5jZWlsKChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5lbmRUaW1lSW5TZWNv
bmRzKHJlY29yZCkgLSB0aW1lT2Zmc2V0KSAqIHNjYWxlKTsKLSAgICAgICAgICAgIHZhciBjYXRl
Z29yeSA9IFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmNhdGVnb3J5Rm9y
UmVjb3JkKHJlY29yZCk7Ci0gICAgICAgICAgICBpZiAoY2F0ZWdvcnkub3ZlcnZpZXdTdHJpcEdy
b3VwSW5kZXggPCAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBi
YXIgPSBsYXN0QmFyQnlHcm91cFtjYXRlZ29yeS5vdmVydmlld1N0cmlwR3JvdXBJbmRleF07Ci0g
ICAgICAgICAgICAvLyBUaGlzIGJhciBtYXkgYmUgbWVyZ2VkIHdpdGggcHJldmlvdXMgLS0gc28g
anVzdCBhZGp1c3QgdGhlIHByZXZpb3VzIGJhci4KLSAgICAgICAgICAgIGNvbnN0IGJhcnNNZXJn
ZVRocmVzaG9sZCA9IDI7Ci0gICAgICAgICAgICBpZiAoYmFyICYmIGJhci5jYXRlZ29yeSA9PT0g
Y2F0ZWdvcnkgJiYgYmFyLmVuZCArIGJhcnNNZXJnZVRocmVzaG9sZCA+PSByZWNvcmRTdGFydCkg
ewotICAgICAgICAgICAgICAgIGlmIChyZWNvcmRFbmQgPiBiYXIuZW5kKQotICAgICAgICAgICAg
ICAgICAgICBiYXIuZW5kID0gcmVjb3JkRW5kOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChiYXIpCi0gICAgICAgICAgICAgICAgdGhpcy5f
cmVuZGVyQmFyKGJhci5zdGFydCwgYmFyLmVuZCwgYmFyLmNhdGVnb3J5KTsKLSAgICAgICAgICAg
IGxhc3RCYXJCeUdyb3VwW2NhdGVnb3J5Lm92ZXJ2aWV3U3RyaXBHcm91cEluZGV4XSA9IHsgc3Rh
cnQ6IHJlY29yZFN0YXJ0LCBlbmQ6IHJlY29yZEVuZCwgY2F0ZWdvcnk6IGNhdGVnb3J5IH07Ci0g
ICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwu
Zm9yQWxsUmVjb3Jkcyh0aGlzLl9tb2RlbC5yZWNvcmRzLCBhcHBlbmRSZWNvcmQuYmluZCh0aGlz
KSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdEJhckJ5R3JvdXAubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChsYXN0QmFyQnlHcm91cFtpXSkKLSAgICAgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJCYXIobGFzdEJhckJ5R3JvdXBbaV0uc3RhcnQsIGxhc3RCYXJCeUdyb3Vw
W2ldLmVuZCwgbGFzdEJhckJ5R3JvdXBbaV0uY2F0ZWdvcnkpOwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIGNhdGVnb3J5VmlzaWJpbGl0eUNoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMudXBkYXRlKCk7Ci0gICAgfSwKLQotICAgIF9yZW5kZXJCYXI6IGZ1bmN0aW9uKGJl
Z2luLCBlbmQsIGNhdGVnb3J5KQotICAgIHsKLSAgICAgICAgdmFyIHggPSBiZWdpbiArIDAuNTsK
LSAgICAgICAgdmFyIHkgPSBjYXRlZ29yeS5vdmVydmlld1N0cmlwR3JvdXBJbmRleCAqIFdlYklu
c3BlY3Rvci5UaW1lbGluZUV2ZW50T3ZlcnZpZXcuX3N0cmlwSGVpZ2h0ICsgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lRXZlbnRPdmVydmlldy5fc3RyaXBQYWRkaW5nICsgMC41OwotICAgICAgICB2YXIg
d2lkdGggPSBNYXRoLm1heChlbmQgLSBiZWdpbiwgMSk7Ci0KLSAgICAgICAgdGhpcy5fY29udGV4
dC5zYXZlKCk7Ci0gICAgICAgIHRoaXMuX2NvbnRleHQudHJhbnNsYXRlKHgsIHkpOwotICAgICAg
ICB0aGlzLl9jb250ZXh0LmZpbGxTdHlsZSA9IGNhdGVnb3J5LmhpZGRlbiA/IHRoaXMuX2Rpc2Fi
bGVkQ2F0ZWdvcnlGaWxsU3R5bGUgOiB0aGlzLl9maWxsU3R5bGVzW2NhdGVnb3J5Lm5hbWVdOwot
ICAgICAgICB0aGlzLl9jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVFdmVudE92ZXJ2aWV3Ll9pbm5lclN0cmlwSGVpZ2h0KTsKLSAgICAgICAgdGhpcy5f
Y29udGV4dC5zdHJva2VTdHlsZSA9IGNhdGVnb3J5LmhpZGRlbiA/IHRoaXMuX2Rpc2FibGVkQ2F0
ZWdvcnlCb3JkZXJTdHlsZSA6IGNhdGVnb3J5LmJvcmRlckNvbG9yOwotICAgICAgICB0aGlzLl9j
b250ZXh0LnN0cm9rZVJlY3QoMCwgMCwgd2lkdGgsIFdlYkluc3BlY3Rvci5UaW1lbGluZUV2ZW50
T3ZlcnZpZXcuX2lubmVyU3RyaXBIZWlnaHQpOwotICAgICAgICB0aGlzLl9jb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVy
dmlld0Jhc2UucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5k
cyB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lT3ZlcnZpZXdCYXNlfQotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGltZWxpbmVNb2RlbH0gbW9kZWwKLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lRnJh
bWVPdmVydmlldyA9IGZ1bmN0aW9uKG1vZGVsKQotewotICAgIFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU92ZXJ2aWV3QmFzZS5jYWxsKHRoaXMsIG1vZGVsKTsKLSAgICB0aGlzLl9jYW52YXMuY2xhc3NM
aXN0LmFkZCgidGltZWxpbmUtZnJhbWUtb3ZlcnZpZXctYmFycyIpOwotICAgIHRoaXMucmVzZXQo
KTsKLQotICAgIHRoaXMuX291dGVyUGFkZGluZyA9IDQ7Ci0gICAgdGhpcy5fbWF4SW5uZXJCYXJX
aWR0aCA9IDEwOwotCi0gICAgLy8gVGhlIGJlbG93IHR3byBhcmUgcmVhbGx5IGNvbXB1dGVkIGJ5
IHVwZGF0ZSgpIC0tIGJ1dCBsZXQncyBoYXZlIHNvbWV0aGluZyBzbyB0aGF0IHdpbmRvd1RpbWVz
KCkgaXMgaGFwcHkuCi0gICAgdGhpcy5fYWN0dWFsUGFkZGluZyA9IDU7Ci0gICAgdGhpcy5fYWN0
dWFsT3V0ZXJCYXJXaWR0aCA9IHRoaXMuX21heElubmVyQmFyV2lkdGggKyB0aGlzLl9hY3R1YWxQ
YWRkaW5nOwotCi0gICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCIy
ZCIpOwotCi0gICAgdGhpcy5fZmlsbFN0eWxlcyA9IHt9OwotICAgIHZhciBjYXRlZ29yaWVzID0g
V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY2F0ZWdvcmllcygpOwotICAg
IGZvciAodmFyIGNhdGVnb3J5IGluIGNhdGVnb3JpZXMpCi0gICAgICAgIHRoaXMuX2ZpbGxTdHls
ZXNbY2F0ZWdvcnldID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY3Jl
YXRlRmlsbFN0eWxlRm9yQ2F0ZWdvcnkodGhpcy5fY29udGV4dCwgdGhpcy5fbWF4SW5uZXJCYXJX
aWR0aCwgMCwgY2F0ZWdvcmllc1tjYXRlZ29yeV0pOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxp
bmVGcmFtZU92ZXJ2aWV3LnByb3RvdHlwZSA9IHsKLSAgICByZXNldDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fcmVjb3Jkc1BlckJhciA9IDE7Ci0gICAgICAgIHRoaXMuX2JhclRp
bWVzID0gW107Ci0gICAgICAgIHRoaXMuX2ZyYW1lcyA9IFtdOwotICAgIH0sCi0KLSAgICB1cGRh
dGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IG1pbkJhcldpZHRoID0gNDsKLSAg
ICAgICAgdGhpcy5fZnJhbWVzUGVyQmFyID0gTWF0aC5tYXgoMSwgdGhpcy5fZnJhbWVzLmxlbmd0
aCAqIG1pbkJhcldpZHRoIC8gdGhpcy5lbGVtZW50LmNsaWVudFdpZHRoKTsKLSAgICAgICAgdGhp
cy5fYmFyVGltZXMgPSBbXTsKLSAgICAgICAgdmFyIHZpc2libGVGcmFtZXMgPSB0aGlzLl9hZ2dy
ZWdhdGVGcmFtZXModGhpcy5fZnJhbWVzUGVyQmFyKTsKLQotICAgICAgICBjb25zdCBwYWRkaW5n
VG9wID0gNDsKLQotICAgICAgICAvLyBPcHRpbWl6ZSBhcHBlYXJhbmNlIGZvciAzMGZwcy4gSG93
ZXZlciwgaWYgYXQgbGVhc3QgaGFsZiBmcmFtZXMgd29uJ3QgZml0IGF0IHRoaXMgc2NhbGUsCi0g
ICAgICAgIC8vIGZhbGwgYmFjayB0byB1c2luZyBhdXRvc2NhbGUuCi0gICAgICAgIGNvbnN0IHRh
cmdldEZQUyA9IDMwOwotICAgICAgICB2YXIgZnVsbEJhckxlbmd0aCA9IDEuMCAvIHRhcmdldEZQ
UzsKLSAgICAgICAgaWYgKGZ1bGxCYXJMZW5ndGggPCB0aGlzLl9tZWRpYW5GcmFtZUxlbmd0aCkK
LSAgICAgICAgICAgIGZ1bGxCYXJMZW5ndGggPSBNYXRoLm1pbih0aGlzLl9tZWRpYW5GcmFtZUxl
bmd0aCAqIDIsIHRoaXMuX21heEZyYW1lTGVuZ3RoKTsKLQotICAgICAgICB2YXIgc2NhbGUgPSAo
dGhpcy5fY2FudmFzLmNsaWVudEhlaWdodCAtIHBhZGRpbmdUb3ApIC8gZnVsbEJhckxlbmd0aDsK
LSAgICAgICAgdGhpcy5fcmVuZGVyQmFycyh2aXNpYmxlRnJhbWVzLCBzY2FsZSk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lRnJhbWV9IGZy
YW1lCi0gICAgICovCi0gICAgYWRkRnJhbWU6IGZ1bmN0aW9uKGZyYW1lKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fZnJhbWVzLnB1c2goZnJhbWUpOwotICAgIH0sCi0KLSAgICBmcmFtZVBvc2l0aW9u
OiBmdW5jdGlvbihmcmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBmcmFtZU51bWJlciA9IHRoaXMu
X2ZyYW1lcy5pbmRleE9mKGZyYW1lKTsKLSAgICAgICAgaWYgKGZyYW1lTnVtYmVyIDwgMCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGJhck51bWJlciA9IE1hdGguZmxvb3IoZnJh
bWVOdW1iZXIgLyB0aGlzLl9mcmFtZXNQZXJCYXIpOwotICAgICAgICB2YXIgZmlyc3RCYXIgPSB0
aGlzLl9mcmFtZXNQZXJCYXIgPiAxID8gYmFyTnVtYmVyIDogTWF0aC5tYXgoYmFyTnVtYmVyIC0g
MSwgMCk7Ci0gICAgICAgIHZhciBsYXN0QmFyID0gdGhpcy5fZnJhbWVzUGVyQmFyID4gMSA/IGJh
ck51bWJlciA6IE1hdGgubWluKGJhck51bWJlciArIDEsIHRoaXMuX2JhclRpbWVzLmxlbmd0aCAt
IDEpOwotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgc3RhcnQ6IE1hdGguY2VpbCh0aGlz
Ll9iYXJOdW1iZXJUb1NjcmVlblBvc2l0aW9uKGZpcnN0QmFyKSAtIHRoaXMuX2FjdHVhbFBhZGRp
bmcgLyAyKSwKLSAgICAgICAgICAgIGVuZDogTWF0aC5mbG9vcih0aGlzLl9iYXJOdW1iZXJUb1Nj
cmVlblBvc2l0aW9uKGxhc3RCYXIgKyAxKSAtIHRoaXMuX2FjdHVhbFBhZGRpbmcgLyAyKQotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZXNQ
ZXJCYXIKLSAgICAgKi8KLSAgICBfYWdncmVnYXRlRnJhbWVzOiBmdW5jdGlvbihmcmFtZXNQZXJC
YXIpCi0gICAgewotICAgICAgICB2YXIgdmlzaWJsZUZyYW1lcyA9IFtdOwotICAgICAgICB2YXIg
ZHVyYXRpb25zID0gW107Ci0KLSAgICAgICAgdGhpcy5fbWF4RnJhbWVMZW5ndGggPSAwOwotCi0g
ICAgICAgIGZvciAodmFyIGJhck51bWJlciA9IDAsIGN1cnJlbnRGcmFtZSA9IDA7IGN1cnJlbnRG
cmFtZSA8IHRoaXMuX2ZyYW1lcy5sZW5ndGg7ICsrYmFyTnVtYmVyKSB7Ci0gICAgICAgICAgICB2
YXIgYmFyU3RhcnRUaW1lID0gdGhpcy5fZnJhbWVzW2N1cnJlbnRGcmFtZV0uc3RhcnRUaW1lOwot
ICAgICAgICAgICAgdmFyIGxvbmdlc3RGcmFtZSA9IG51bGw7Ci0KLSAgICAgICAgICAgIGZvciAo
dmFyIGxhc3RGcmFtZSA9IE1hdGgubWluKE1hdGguZmxvb3IoKGJhck51bWJlciArIDEpICogZnJh
bWVzUGVyQmFyKSwgdGhpcy5fZnJhbWVzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgIGN1cnJl
bnRGcmFtZSA8IGxhc3RGcmFtZTsgKytjdXJyZW50RnJhbWUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWxvbmdlc3RGcmFtZSB8fCBsb25nZXN0RnJhbWUuZHVyYXRpb24gPCB0aGlzLl9mcmFtZXNb
Y3VycmVudEZyYW1lXS5kdXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgbG9uZ2VzdEZyYW1l
ID0gdGhpcy5fZnJhbWVzW2N1cnJlbnRGcmFtZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB2YXIgYmFyRW5kVGltZSA9IHRoaXMuX2ZyYW1lc1tjdXJyZW50RnJhbWUgLSAxXS5lbmRUaW1l
OwotICAgICAgICAgICAgaWYgKGxvbmdlc3RGcmFtZSkgewotICAgICAgICAgICAgICAgIHRoaXMu
X21heEZyYW1lTGVuZ3RoID0gTWF0aC5tYXgodGhpcy5fbWF4RnJhbWVMZW5ndGgsIGxvbmdlc3RG
cmFtZS5kdXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgdmlzaWJsZUZyYW1lcy5wdXNoKGxvbmdl
c3RGcmFtZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYmFyVGltZXMucHVzaCh7IHN0YXJ0VGlt
ZTogYmFyU3RhcnRUaW1lLCBlbmRUaW1lOiBiYXJFbmRUaW1lIH0pOwotICAgICAgICAgICAgICAg
IGR1cmF0aW9ucy5wdXNoKGxvbmdlc3RGcmFtZS5kdXJhdGlvbik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhpcy5fbWVkaWFuRnJhbWVMZW5ndGggPSBkdXJhdGlvbnMucXNl
bGVjdChNYXRoLmZsb29yKGR1cmF0aW9ucy5sZW5ndGggLyAyKSk7Ci0gICAgICAgIHJldHVybiB2
aXNpYmxlRnJhbWVzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxX
ZWJJbnNwZWN0b3IuVGltZWxpbmVGcmFtZT59IGZyYW1lcwotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBzY2FsZQotICAgICAqLwotICAgIF9yZW5kZXJCYXJzOiBmdW5jdGlvbihmcmFtZXMsIHNjYWxl
KQotICAgIHsKLSAgICAgICAgLy8gVXNlIHJlYWwgd29ybGQsIDE6MSBjb29yZGluYXRlcyBpbiBj
YW52YXMuIFRoaXMgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBjbGVhcmluZyBpdC4KLSAgICAgICAg
dGhpcy5fY2FudmFzLndpZHRoID0gdGhpcy5fY2FudmFzLmNsaWVudFdpZHRoOwotICAgICAgICB0
aGlzLl9jYW52YXMuaGVpZ2h0ID0gdGhpcy5fY2FudmFzLmNsaWVudEhlaWdodDsKLQotICAgICAg
ICBjb25zdCBtYXhQYWRkaW5nID0gNTsKLSAgICAgICAgdGhpcy5fYWN0dWFsT3V0ZXJCYXJXaWR0
aCA9IE1hdGgubWluKCh0aGlzLl9jYW52YXMud2lkdGggLSAyICogdGhpcy5fb3V0ZXJQYWRkaW5n
KSAvIGZyYW1lcy5sZW5ndGgsIHRoaXMuX21heElubmVyQmFyV2lkdGggKyBtYXhQYWRkaW5nKTsK
LSAgICAgICAgdGhpcy5fYWN0dWFsUGFkZGluZyA9IE1hdGgubWluKE1hdGguZmxvb3IodGhpcy5f
YWN0dWFsT3V0ZXJCYXJXaWR0aCAvIDMpLCBtYXhQYWRkaW5nKTsKLQotICAgICAgICB2YXIgYmFy
V2lkdGggPSB0aGlzLl9hY3R1YWxPdXRlckJhcldpZHRoIC0gdGhpcy5fYWN0dWFsUGFkZGluZzsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICB0aGlzLl9yZW5kZXJCYXIodGhpcy5fYmFyTnVtYmVyVG9TY3JlZW5Qb3NpdGlvbihpKSwg
YmFyV2lkdGgsIGZyYW1lc1tpXSwgc2NhbGUpOwotCi0gICAgICAgIHRoaXMuX2RyYXdGUFNNYXJr
cyhzY2FsZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuCi0g
ICAgICovCi0gICAgX2Jhck51bWJlclRvU2NyZWVuUG9zaXRpb246IGZ1bmN0aW9uKG4pCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fb3V0ZXJQYWRkaW5nICsgdGhpcy5fYWN0dWFsT3V0ZXJC
YXJXaWR0aCAqIG47Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBz
Y2FsZQotICAgICAqLwotICAgIF9kcmF3RlBTTWFya3M6IGZ1bmN0aW9uKHNjYWxlKQotICAgIHsK
LSAgICAgICAgY29uc3QgZnBzTWFya3MgPSBbMzAsIDYwXTsKLQotICAgICAgICB0aGlzLl9jb250
ZXh0LnNhdmUoKTsKLSAgICAgICAgdGhpcy5fY29udGV4dC5iZWdpblBhdGgoKTsKLSAgICAgICAg
dGhpcy5fY29udGV4dC5mb250ID0gIjlweCBtb25vc3BhY2UiOwotICAgICAgICB0aGlzLl9jb250
ZXh0LnRleHRBbGlnbiA9ICJyaWdodCI7Ci0gICAgICAgIHRoaXMuX2NvbnRleHQudGV4dEJhc2Vs
aW5lID0gInRvcCI7Ci0KLSAgICAgICAgY29uc3QgbGFiZWxQYWRkaW5nID0gMjsKLSAgICAgICAg
dmFyIGxpbmVIZWlnaHQgPSAxMjsKLSAgICAgICAgdmFyIGxhYmVsVG9wTWFyZ2luID0gMDsKLQot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZwc01hcmtzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgZnBzID0gZnBzTWFya3NbaV07Ci0gICAgICAgICAgICAvLyBEcmF3IGxpbmVz
IG9uZSBwaXhlbCBhYm92ZSB0aGV5IG5lZWQgdG8gYmUsIHNvIDYwcGZzIGxpbmUgZG9lcyBub3Qg
Y3Jvc3MgbW9zdCBvZiB0aGUgZnJhbWVzIHRvcHMuCi0gICAgICAgICAgICB2YXIgeSA9IHRoaXMu
X2NhbnZhcy5oZWlnaHQgLSBNYXRoLmZsb29yKDEuMCAvIGZwcyAqIHNjYWxlKSAtIDAuNTsKLSAg
ICAgICAgICAgIHZhciBsYWJlbCA9IGZwcyArICIgRlBTICI7Ci0gICAgICAgICAgICB2YXIgbGFi
ZWxXaWR0aCA9IHRoaXMuX2NvbnRleHQubWVhc3VyZVRleHQobGFiZWwpLndpZHRoOwotICAgICAg
ICAgICAgdmFyIGxhYmVsWCA9IHRoaXMuX2NhbnZhcy53aWR0aDsKLSAgICAgICAgICAgIHZhciBs
YWJlbFk7Ci0KLSAgICAgICAgICAgIGlmIChsYWJlbFRvcE1hcmdpbiA8IHkgLSBsaW5lSGVpZ2h0
KQotICAgICAgICAgICAgICAgIGxhYmVsWSA9IHkgLSBsaW5lSGVpZ2h0OwotICAgICAgICAgICAg
ZWxzZSBpZiAoeSArIGxpbmVIZWlnaHQgPCB0aGlzLl9jYW52YXMuaGVpZ2h0KQotICAgICAgICAg
ICAgICAgIGxhYmVsWSA9IHk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJl
YWs7IC8vIE5vIHNwYWNlIGZvciB0aGUgbGFiZWwsIHNvIG5vIGxpbmUgYXMgd2VsbC4KLQotICAg
ICAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oMCwgeSk7Ci0gICAgICAgICAgICB0aGlzLl9j
b250ZXh0LmxpbmVUbyh0aGlzLl9jYW52YXMud2lkdGgsIHkpOwotCi0gICAgICAgICAgICB0aGlz
Ll9jb250ZXh0LmZpbGxTdHlsZSA9ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpIjsKLSAgICAg
ICAgICAgIHRoaXMuX2NvbnRleHQuZmlsbFJlY3QobGFiZWxYIC0gbGFiZWxXaWR0aCAtIGxhYmVs
UGFkZGluZywgbGFiZWxZLCBsYWJlbFdpZHRoICsgMiAqIGxhYmVsUGFkZGluZywgbGluZUhlaWdo
dCk7Ci0gICAgICAgICAgICB0aGlzLl9jb250ZXh0LmZpbGxTdHlsZSA9ICJyZ2IoMCwgMCwgMCki
OwotICAgICAgICAgICAgdGhpcy5fY29udGV4dC5maWxsVGV4dChsYWJlbCwgbGFiZWxYLCBsYWJl
bFkpOwotICAgICAgICAgICAgbGFiZWxUb3BNYXJnaW4gPSBsYWJlbFkgKyBsaW5lSGVpZ2h0Owot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbnRleHQuc3Ryb2tlU3R5bGUgPSAicmdiKDUxLCA1
MSwgNTEpIjsKLSAgICAgICAgdGhpcy5fY29udGV4dC5zdHJva2UoKTsKLSAgICAgICAgdGhpcy5f
Y29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfSwKLQotICAgIF9yZW5kZXJCYXI6IGZ1bmN0aW9uKGxl
ZnQsIHdpZHRoLCBmcmFtZSwgc2NhbGUpCi0gICAgewotICAgICAgICB2YXIgY2F0ZWdvcmllcyA9
IE9iamVjdC5rZXlzKFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmNhdGVn
b3JpZXMoKSk7Ci0gICAgICAgIGlmICghY2F0ZWdvcmllcy5sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciB4ID0gTWF0aC5mbG9vcihsZWZ0KSArIDAuNTsKLSAgICAgICAg
d2lkdGggPSBNYXRoLmZsb29yKHdpZHRoKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMCwgYm90
dG9tT2Zmc2V0ID0gdGhpcy5fY2FudmFzLmhlaWdodDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIHZhciBjYXRlZ29yeSA9IGNhdGVnb3JpZXNbaV07Ci0gICAgICAg
ICAgICB2YXIgZHVyYXRpb24gPSBmcmFtZS50aW1lQnlDYXRlZ29yeVtjYXRlZ29yeV07Ci0KLSAg
ICAgICAgICAgIGlmICghZHVyYXRpb24pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB2YXIgaGVpZ2h0ID0gZHVyYXRpb24gKiBzY2FsZTsKLSAgICAgICAgICAgIHZhciB5
ID0gTWF0aC5mbG9vcihib3R0b21PZmZzZXQgLSBoZWlnaHQpICsgMC41OwotCi0gICAgICAgICAg
ICB0aGlzLl9jb250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRleHQudHJhbnNs
YXRlKHgsIDApOwotICAgICAgICAgICAgdGhpcy5fY29udGV4dC5zY2FsZSh3aWR0aCAvIHRoaXMu
X21heElubmVyQmFyV2lkdGgsIDEpOwotICAgICAgICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5
bGUgPSB0aGlzLl9maWxsU3R5bGVzW2NhdGVnb3J5XTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRl
eHQuZmlsbFJlY3QoMCwgeSwgdGhpcy5fbWF4SW5uZXJCYXJXaWR0aCwgTWF0aC5mbG9vcihoZWln
aHQpKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRleHQucmVzdG9yZSgpOwotCi0gICAgICAgICAg
ICB0aGlzLl9jb250ZXh0LnN0cm9rZVN0eWxlID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2Vu
dGF0aW9uTW9kZWwuY2F0ZWdvcmllcygpW2NhdGVnb3J5XS5ib3JkZXJDb2xvcjsKLSAgICAgICAg
ICAgIHRoaXMuX2NvbnRleHQuc3Ryb2tlUmVjdCh4LCB5LCB3aWR0aCwgTWF0aC5mbG9vcihoZWln
aHQpKTsKLSAgICAgICAgICAgIGJvdHRvbU9mZnNldCAtPSBoZWlnaHQgLSAxOwotICAgICAgICB9
Ci0gICAgICAgIC8vIERyYXcgYSBjb250b3VyIGZvciB0aGUgcmVzdCBvZiBmcmFtZSB0aW1lIHRo
YXQgd2UgZGlkIG5vdCBpbnN0cnVtZW50LgotICAgICAgICB2YXIgbm9uQ1BVVGltZSA9IGZyYW1l
LmR1cmF0aW9uIC0gZnJhbWUuY3B1VGltZTsKLSAgICAgICAgdmFyIHkwID0gTWF0aC5mbG9vcihi
b3R0b21PZmZzZXQgLSBub25DUFVUaW1lICogc2NhbGUpICsgMC41OwotICAgICAgICB2YXIgeTEg
PSBNYXRoLmZsb29yKGJvdHRvbU9mZnNldCkgKyAwLjU7Ci0KLSAgICAgICAgdGhpcy5fY29udGV4
dC5zdHJva2VTdHlsZSA9ICJyZ2IoOTAsIDkwLCA5MCkiOwotICAgICAgICB0aGlzLl9jb250ZXh0
LmJlZ2luUGF0aCgpOwotICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5MSk7Ci0gICAg
ICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkwKTsKLSAgICAgICAgdGhpcy5fY29udGV4dC5s
aW5lVG8oeCArIHdpZHRoLCB5MCk7Ci0gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHggKyB3
aWR0aCwgeTEpOwotICAgICAgICB0aGlzLl9jb250ZXh0LnN0cm9rZSgpOwotICAgIH0sCi0KLSAg
ICB3aW5kb3dUaW1lczogZnVuY3Rpb24od2luZG93TGVmdCwgd2luZG93UmlnaHQpCi0gICAgewot
ICAgICAgICB2YXIgd2luZG93U3BhbiA9IHRoaXMuZWxlbWVudC5jbGllbnRXaWR0aDsKLSAgICAg
ICAgdmFyIGxlZnRPZmZzZXQgPSB3aW5kb3dMZWZ0ICogd2luZG93U3BhbiAtIHRoaXMuX291dGVy
UGFkZGluZyArIHRoaXMuX2FjdHVhbFBhZGRpbmc7Ci0gICAgICAgIHZhciByaWdodE9mZnNldCA9
IHdpbmRvd1JpZ2h0ICogd2luZG93U3BhbiAtIHRoaXMuX291dGVyUGFkZGluZzsKLSAgICAgICAg
dmFyIGJhcnMgPSB0aGlzLmVsZW1lbnQuY2hpbGRyZW47Ci0gICAgICAgIHZhciBmaXJzdEJhciA9
IE1hdGguZmxvb3IoTWF0aC5tYXgobGVmdE9mZnNldCwgMCkgLyB0aGlzLl9hY3R1YWxPdXRlckJh
cldpZHRoKTsKLSAgICAgICAgdmFyIGxhc3RCYXIgPSBNYXRoLm1pbihNYXRoLmZsb29yKHJpZ2h0
T2Zmc2V0IC8gdGhpcy5fYWN0dWFsT3V0ZXJCYXJXaWR0aCksIHRoaXMuX2JhclRpbWVzLmxlbmd0
aCAtIDEpOwotICAgICAgICBjb25zdCBzbmFwVG9SaWdodFRvbGVyYW5jZVBpeGVscyA9IDM7Ci0g
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBzdGFydFRpbWU6IGZpcnN0QmFyID49IHRoaXMu
X2JhclRpbWVzLmxlbmd0aCA/IEluZmluaXR5IDogdGhpcy5fYmFyVGltZXNbZmlyc3RCYXJdLnN0
YXJ0VGltZSwKLSAgICAgICAgICAgIGVuZFRpbWU6IHJpZ2h0T2Zmc2V0ICsgc25hcFRvUmlnaHRU
b2xlcmFuY2VQaXhlbHMgPiB3aW5kb3dTcGFuID8gSW5maW5pdHkgOiB0aGlzLl9iYXJUaW1lc1ts
YXN0QmFyXS5lbmRUaW1lCi0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJ
bnNwZWN0b3IuVGltZWxpbmVPdmVydmlld0Jhc2UucHJvdG90eXBlCi19Ci0KLS8qKgotICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlld1BhbmV9IHBhbmUKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1v
ZGVsLkZpbHRlcn0KLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lV2luZG93RmlsdGVyID0gZnVu
Y3Rpb24ocGFuZSkKLXsKLSAgICB0aGlzLl9wYW5lID0gcGFuZTsKLX0KLQotV2ViSW5zcGVjdG9y
LlRpbWVsaW5lV2luZG93RmlsdGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFy
YW0geyFXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNvcmR9IHJlY29y
ZAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgYWNjZXB0OiBmdW5jdGlv
bihyZWNvcmQpCi0gICAgewotICAgICAgICByZXR1cm4gcmVjb3JkLmxhc3RDaGlsZEVuZFRpbWUg
Pj0gdGhpcy5fcGFuZS5fd2luZG93U3RhcnRUaW1lICYmIHJlY29yZC5zdGFydFRpbWUgPD0gdGhp
cy5fcGFuZS5fd2luZG93RW5kVGltZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc2NjNmNmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTYyNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLWltcG9ydFNjcmlwdCgiTWVtb3J5U3RhdGlzdGljcy5qcyIpOwotaW1wb3J0U2NyaXB0KCJE
T01Db3VudGVyc0dyYXBoLmpzIik7Ci1pbXBvcnRTY3JpcHQoIk5hdGl2ZU1lbW9yeUdyYXBoLmpz
Iik7Ci1pbXBvcnRTY3JpcHQoIlRpbWVsaW5lTW9kZWwuanMiKTsKLWltcG9ydFNjcmlwdCgiVGlt
ZWxpbmVPdmVydmlld1BhbmUuanMiKTsKLWltcG9ydFNjcmlwdCgiVGltZWxpbmVQcmVzZW50YXRp
b25Nb2RlbC5qcyIpOwotaW1wb3J0U2NyaXB0KCJUaW1lbGluZUZyYW1lQ29udHJvbGxlci5qcyIp
OwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5QYW5l
bH0KLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwgPSBmdW5jdGlvbigpCi17Ci0gICAg
V2ViSW5zcGVjdG9yLlBhbmVsLmNhbGwodGhpcywgInRpbWVsaW5lIik7Ci0gICAgdGhpcy5yZWdp
c3RlclJlcXVpcmVkQ1NTKCJ0aW1lbGluZVBhbmVsLmNzcyIpOwotCi0gICAgdGhpcy5fbW9kZWwg
PSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwoKTsKLSAgICB0aGlzLl9wcmVzZW50YXRp
b25Nb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbCgpOwot
Ci0gICAgdGhpcy5fb3ZlcnZpZXdNb2RlU2V0dGluZyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5j
cmVhdGVTZXR0aW5nKCJ0aW1lbGluZU92ZXJ2aWV3TW9kZSIsIFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU92ZXJ2aWV3UGFuZS5Nb2RlLkV2ZW50cyk7Ci0gICAgdGhpcy5fZ2x1ZVJlY29yZHNTZXR0aW5n
ID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmNyZWF0ZVNldHRpbmcoInRpbWVsaW5lR2x1ZVJlY29y
ZHMiLCBmYWxzZSk7Ci0KLSAgICB0aGlzLl9vdmVydmlld1BhbmUgPSBuZXcgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lT3ZlcnZpZXdQYW5lKHRoaXMuX21vZGVsKTsKLSAgICB0aGlzLl9vdmVydmlld1Bh
bmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVGltZWxpbmVPdmVydmlld1BhbmUuRXZl
bnRzLldpbmRvd0NoYW5nZWQsIHRoaXMuX2ludmFsaWRhdGVBbmRTY2hlZHVsZVJlZnJlc2guYmlu
ZCh0aGlzLCBmYWxzZSwgdHJ1ZSkpOwotICAgIHRoaXMuX292ZXJ2aWV3UGFuZS5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3UGFuZS5FdmVudHMuTW9kZUNoYW5n
ZWQsIHRoaXMuX292ZXJ2aWV3TW9kZUNoYW5nZWQsIHRoaXMpOwotICAgIHRoaXMuX292ZXJ2aWV3
UGFuZS5zaG93KHRoaXMuZWxlbWVudCk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMpLCBmYWxzZSk7
Ci0gICAgdGhpcy5lbGVtZW50LnRhYkluZGV4ID0gMDsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRT
dHlsZUNsYXNzKCJzcGxpdC12aWV3LXZlcnRpY2FsIik7Ci0KLSAgICB0aGlzLl9zaWRlYmFyQmFj
a2dyb3VuZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlz
Ll9zaWRlYmFyQmFja2dyb3VuZEVsZW1lbnQuY2xhc3NOYW1lID0gInNpZGViYXIgc3BsaXQtdmll
dy1zaWRlYmFyIHNwbGl0LXZpZXctY29udGVudHMtZmlyc3QgdGltZWxpbmUtc2lkZWJhci1iYWNr
Z3JvdW5kIjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fc2lkZWJhckJhY2tn
cm91bmRFbGVtZW50KTsKLQotICAgIHRoaXMuY3JlYXRlU2lkZWJhclZpZXdXaXRoVHJlZSgpOwot
ICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNwbGl0Vmlldy5yZXNpemVyRWxlbWVu
dCgpKTsKLQotICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQgPSB0aGlzLnNwbGl0Vmlldy5lbGVt
ZW50OwotICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuaWQgPSAidGltZWxpbmUtY29udGFpbmVy
IjsKLSAgICB0aGlzLl9jb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIs
IHRoaXMuX29uU2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX3RpbWVsaW5l
TWVtb3J5U3BsaXR0ZXIgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIpOwotICAgIHRo
aXMuX3RpbWVsaW5lTWVtb3J5U3BsaXR0ZXIuaWQgPSAidGltZWxpbmUtbWVtb3J5LXNwbGl0dGVy
IjsKLSAgICBXZWJJbnNwZWN0b3IuaW5zdGFsbERyYWdIYW5kbGUodGhpcy5fdGltZWxpbmVNZW1v
cnlTcGxpdHRlciwgdGhpcy5fc3RhcnRTcGxpdHRlckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMu
X3NwbGl0dGVyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fZW5kU3BsaXR0ZXJEcmFnZ2luZy5i
aW5kKHRoaXMpLCAibnMtcmVzaXplIik7Ci0gICAgdGhpcy5fdGltZWxpbmVNZW1vcnlTcGxpdHRl
ci5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICB0aGlzLl9pbmNsdWRlRG9tQ291bnRlcnMg
PSBmYWxzZTsKLSAgICB0aGlzLl9pbmNsdWRlTmF0aXZlTWVtb3J5U3RhdGlzdGljcyA9IGZhbHNl
OwotICAgIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5uYXRpdmVNZW1vcnlU
aW1lbGluZS5pc0VuYWJsZWQoKSkgewotICAgICAgICB0aGlzLl9tZW1vcnlTdGF0aXN0aWNzID0g
bmV3IFdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlHcmFwaCh0aGlzLCB0aGlzLl9tb2RlbCwgdGhp
cy5zcGxpdFZpZXcuc2lkZWJhcldpZHRoKCkpOwotICAgICAgICB0aGlzLl9pbmNsdWRlTmF0aXZl
TWVtb3J5U3RhdGlzdGljcyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5fbWVt
b3J5U3RhdGlzdGljcyA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NQ291bnRlcnNHcmFwaCh0aGlzLCB0
aGlzLl9tb2RlbCwgdGhpcy5zcGxpdFZpZXcuc2lkZWJhcldpZHRoKCkpOwotICAgICAgICB0aGlz
Ll9pbmNsdWRlRG9tQ291bnRlcnMgPSB0cnVlOwotICAgIH0KLSAgICBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MubWVtb3J5Q291bnRlckdyYXBoc0hlaWdodCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5j
cmVhdGVTZXR0aW5nKCJtZW1vcnlDb3VudGVyR3JhcGhzSGVpZ2h0IiwgMTUwKTsKLQotICAgIHZh
ciBpdGVtc1RyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyU2VjdGlvblRyZWVF
bGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUkVDT1JEUyIpLCB7fSwgdHJ1ZSk7Ci0gICAg
dGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZChpdGVtc1RyZWVFbGVtZW50KTsKLQotICAgIHRo
aXMuX3NpZGViYXJMaXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fc2lkZWJhckxpc3RFbGVt
ZW50KTsKLQotICAgIHRoaXMuX2NvbnRhaW5lckNvbnRlbnRFbGVtZW50ID0gdGhpcy5zcGxpdFZp
ZXcubWFpbkVsZW1lbnQ7Ci0gICAgdGhpcy5fY29udGFpbmVyQ29udGVudEVsZW1lbnQuaWQgPSAi
cmVzb3VyY2VzLWNvbnRhaW5lci1jb250ZW50IjsKLQotICAgIHRoaXMuX3RpbWVsaW5lR3JpZCA9
IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVHcmlkKCk7Ci0gICAgdGhpcy5faXRlbXNHcmFwaHNF
bGVtZW50ID0gdGhpcy5fdGltZWxpbmVHcmlkLml0ZW1zR3JhcGhzRWxlbWVudDsKLSAgICB0aGlz
Ll9pdGVtc0dyYXBoc0VsZW1lbnQuaWQgPSAidGltZWxpbmUtZ3JhcGhzIjsKLSAgICB0aGlzLl9j
b250YWluZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl90aW1lbGluZUdyaWQuZWxl
bWVudCk7Ci0gICAgdGhpcy5fdGltZWxpbmVHcmlkLmdyaWRIZWFkZXJFbGVtZW50LmlkID0gInRp
bWVsaW5lLWdyaWQtaGVhZGVyIjsKLSAgICB0aGlzLl9tZW1vcnlTdGF0aXN0aWNzLnNldE1haW5U
aW1lbGluZUdyaWQodGhpcy5fdGltZWxpbmVHcmlkKTsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5fdGltZWxpbmVHcmlkLmdyaWRIZWFkZXJFbGVtZW50KTsKLQotICAgIHRoaXMu
X3RvcEdhcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlz
Ll90b3BHYXBFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aW1lbGluZS1nYXAiOwotICAgIHRoaXMuX2l0
ZW1zR3JhcGhzRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl90b3BHYXBFbGVtZW50KTsKLQotICAg
IHRoaXMuX2dyYXBoUm93c0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICB0aGlzLl9pdGVtc0dyYXBoc0VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZ3JhcGhSb3dz
RWxlbWVudCk7Ci0KLSAgICB0aGlzLl9ib3R0b21HYXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fYm90dG9tR2FwRWxlbWVudC5jbGFzc05hbWUgPSAi
dGltZWxpbmUtZ2FwIjsKLSAgICB0aGlzLl9pdGVtc0dyYXBoc0VsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5fYm90dG9tR2FwRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9leHBhbmRFbGVtZW50cyA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2V4cGFuZEVsZW1lbnRzLmlk
ID0gIm9ycGhhbi1leHBhbmQtZWxlbWVudHMiOwotICAgIHRoaXMuX2l0ZW1zR3JhcGhzRWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLl9leHBhbmRFbGVtZW50cyk7Ci0KLSAgICB0aGlzLl9jYWxjdWxh
dG9yID0gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IodGhpcy5fbW9kZWwpOwot
ICAgIHRoaXMuX2NyZWF0ZVN0YXR1c0Jhckl0ZW1zKCk7Ci0KLSAgICB0aGlzLl9mcmFtZU1vZGUg
PSBmYWxzZTsKLSAgICB0aGlzLl9ib3VuZGFyaWVzQXJlVmFsaWQgPSB0cnVlOwotICAgIHRoaXMu
X3Njcm9sbFRvcCA9IDA7Ci0KLSAgICB0aGlzLl9wb3BvdmVySGVscGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5Qb3BvdmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0UG9wb3ZlckFuY2hvci5i
aW5kKHRoaXMpLCB0aGlzLl9zaG93UG9wb3Zlci5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLmVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fbW91c2VNb3ZlLmJpbmQodGhp
cyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQi
LCB0aGlzLl9tb3VzZU91dC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICAvLyBTaG9ydCBldmVu
dHMgZmlsdGVyIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgdGhpcy5fZHVyYXRpb25GaWx0
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5lSXNMb25nRmlsdGVyKCk7Ci0KLSAgICB0aGlz
Ll9leHBhbmRPZmZzZXQgPSAxNTsKLQotICAgIHRoaXMuX2hlYWRlckxpbmVDb3VudCA9IDE7Ci0g
ICAgdGhpcy5fYWRqdXN0SGVhZGVySGVpZ2h0KCk7Ci0KLSAgICB0aGlzLl9tYWluVGhyZWFkVGFz
a3MgPSAvKiogQHR5cGUgeyFBcnJheS48e3N0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1i
ZXJ9Pn0gKi8gKFtdKTsKLSAgICB0aGlzLl9jcHVCYXJzRWxlbWVudCA9IHRoaXMuX3RpbWVsaW5l
R3JpZC5ncmlkSGVhZGVyRWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInRpbWVsaW5lLWNwdS1i
YXJzIik7Ci0gICAgdGhpcy5fbWFpblRocmVhZE1vbml0b3JpbmdFbmFibGVkID0gQ2FwYWJpbGl0
aWVzLnRpbWVsaW5lQ2FuTW9uaXRvck1haW5UaHJlYWQgJiYgV2ViSW5zcGVjdG9yLnNldHRpbmdz
LnNob3dDcHVPblRpbWVsaW5lUnVsZXIuZ2V0KCk7Ci0gICAgV2ViSW5zcGVjdG9yLnNldHRpbmdz
LnNob3dDcHVPblRpbWVsaW5lUnVsZXIuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fc2hvd0NwdU9u
VGltZWxpbmVSdWxlckNoYW5nZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fY3JlYXRlRmlsZVNlbGVj
dG9yKCk7Ci0KLSAgICB0aGlzLl9tb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5U
aW1lbGluZU1vZGVsLkV2ZW50cy5SZWNvcmRBZGRlZCwgdGhpcy5fb25UaW1lbGluZUV2ZW50UmVj
b3JkZWQsIHRoaXMpOwotICAgIHRoaXMuX21vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwuRXZlbnRzLlJlY29yZHNDbGVhcmVkLCB0aGlzLl9vblJlY29yZHND
bGVhcmVkLCB0aGlzKTsKLQotICAgIHRoaXMuX3JlZ2lzdGVyU2hvcnRjdXRzKCk7Ci0KLSAgICB0
aGlzLl9hbGxSZWNvcmRzQ291bnQgPSAwOwotCi0gICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwu
YWRkRmlsdGVyKG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVXaW5kb3dGaWx0ZXIodGhpcy5fb3Zl
cnZpZXdQYW5lKSk7Ci0gICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRmlsdGVyKG5ldyBX
ZWJJbnNwZWN0b3IuVGltZWxpbmVDYXRlZ29yeUZpbHRlcigpKTsgCi0gICAgdGhpcy5fcHJlc2Vu
dGF0aW9uTW9kZWwuYWRkRmlsdGVyKHRoaXMuX2R1cmF0aW9uRmlsdGVyKTsKLX0KLQotLy8gRGVm
aW5lIHJvdyBoZWlnaHQsIHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3R5bGVzIGZvciB0aW1lbGlu
ZSBncmFwaHMuCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5yb3dIZWlnaHQgPSAxODsKLQot
V2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwuZHVyYXRpb25GaWx0ZXJQcmVzZXRzTXMgPSBbMCwg
MSwgMTVdOwotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5wcm90b3R5cGUgPSB7Ci0gICAg
X3Nob3dDcHVPblRpbWVsaW5lUnVsZXJDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgbWFpblRocmVhZE1vbml0b3JpbmdFbmFibGVkID0gV2ViSW5zcGVjdG9yLnNldHRpbmdz
LnNob3dDcHVPblRpbWVsaW5lUnVsZXIuZ2V0KCk7Ci0gICAgICAgIGlmICh0aGlzLl9tYWluVGhy
ZWFkTW9uaXRvcmluZ0VuYWJsZWQgIT09IG1haW5UaHJlYWRNb25pdG9yaW5nRW5hYmxlZCkgewot
ICAgICAgICAgICAgdGhpcy5fbWFpblRocmVhZE1vbml0b3JpbmdFbmFibGVkID0gbWFpblRocmVh
ZE1vbml0b3JpbmdFbmFibGVkOwotICAgICAgICAgICAgdGhpcy5fcmVmcmVzaE1haW5UaHJlYWRC
YXJzKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVu
dH0gZXZlbnQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9zdGFydFNw
bGl0dGVyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fZHJh
Z09mZnNldCA9IHRoaXMuX3RpbWVsaW5lTWVtb3J5U3BsaXR0ZXIub2Zmc2V0VG9wICsgMiAtIGV2
ZW50LnBhZ2VZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfc3BsaXR0ZXJEcmFnZ2luZzog
ZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgdG9wID0gZXZlbnQucGFnZVkgKyB0
aGlzLl9kcmFnT2Zmc2V0Ci0gICAgICAgIHRoaXMuX3NldFNwbGl0dGVyUG9zaXRpb24odG9wKTsK
LSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfZW5kU3BsaXR0ZXJEcmFnZ2lu
ZzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fZHJhZ09mZnNl
dDsKLSAgICAgICAgdGhpcy5fbWVtb3J5U3RhdGlzdGljcy5zaG93KCk7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5tZW1vcnlDb3VudGVyR3JhcGhzSGVpZ2h0LnNldCh0aGlzLnNwbGl0
Vmlldy5lbGVtZW50Lm9mZnNldEhlaWdodCk7Ci0gICAgfSwKLQotICAgIF9zZXRTcGxpdHRlclBv
c2l0aW9uOiBmdW5jdGlvbih0b3ApCi0gICAgewotICAgICAgICBjb25zdCBvdmVydmlld0hlaWdo
dCA9IDkwOwotICAgICAgICBjb25zdCBzZWN0aW9uTWluSGVpZ2h0ID0gMTAwOwotICAgICAgICB0
b3AgPSBOdW1iZXIuY29uc3RyYWluKHRvcCwgb3ZlcnZpZXdIZWlnaHQgKyBzZWN0aW9uTWluSGVp
Z2h0LCB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gc2VjdGlvbk1pbkhlaWdodCk7Ci0KLSAg
ICAgICAgdGhpcy5zcGxpdFZpZXcuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAodG9wIC0gb3ZlcnZp
ZXdIZWlnaHQpICsgInB4IjsKLSAgICAgICAgdGhpcy5fdGltZWxpbmVNZW1vcnlTcGxpdHRlci5z
dHlsZS50b3AgPSAodG9wIC0gMikgKyAicHgiOwotICAgICAgICB0aGlzLl9tZW1vcnlTdGF0aXN0
aWNzLnNldFRvcFBvc2l0aW9uKHRvcCk7Ci0gICAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnRI
ZWlnaHQgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodDsKLSAgICAgICAgdGhp
cy5vblJlc2l6ZSgpOwotICAgIH0sCi0KLSAgICBnZXQgY2FsY3VsYXRvcigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRvcjsKLSAgICB9LAotCi0gICAgc3RhdHVzQmFySXRl
bXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXNCYXJJdGVt
cy5zZWxlY3QoImVsZW1lbnQiKS5jb25jYXQoWwotICAgICAgICAgICAgdGhpcy5fbWlzY1N0YXR1
c0Jhckl0ZW1zCi0gICAgICAgIF0pOwotICAgIH0sCi0KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1l
bnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7Ci0gICAg
fSwKLQotICAgIF9jcmVhdGVTdGF0dXNCYXJJdGVtczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fc3RhdHVzQmFySXRlbXMgPSAvKiogQHR5cGUgeyFBcnJheS48IVdlYkluc3BlY3Rv
ci5TdGF0dXNCYXJJdGVtPn0gKi8gKFtdKTsKLQotICAgICAgICB0aGlzLnRvZ2dsZVRpbWVsaW5l
QnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJSZWNvcmQiKSwgInJlY29yZC1wcm9maWxlLXN0YXR1cy1iYXItaXRlbSIpOwotICAg
ICAgICB0aGlzLnRvZ2dsZVRpbWVsaW5lQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
dGhpcy5fdG9nZ2xlVGltZWxpbmVCdXR0b25DbGlja2VkLCB0aGlzKTsKLSAgICAgICAgdGhpcy5f
c3RhdHVzQmFySXRlbXMucHVzaCh0aGlzLnRvZ2dsZVRpbWVsaW5lQnV0dG9uKTsKLQotICAgICAg
ICB0aGlzLmNsZWFyQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJDbGVhciIpLCAiY2xlYXItc3RhdHVzLWJhci1pdGVtIik7Ci0g
ICAgICAgIHRoaXMuY2xlYXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9j
bGVhclBhbmVsLCB0aGlzKTsKLSAgICAgICAgdGhpcy5fc3RhdHVzQmFySXRlbXMucHVzaCh0aGlz
LmNsZWFyQnV0dG9uKTsKLQotICAgICAgICB0aGlzLmdhcmJhZ2VDb2xsZWN0QnV0dG9uID0gbmV3
IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb2xs
ZWN0IEdhcmJhZ2UiKSwgImdhcmJhZ2UtY29sbGVjdC1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICAg
ICAgdGhpcy5nYXJiYWdlQ29sbGVjdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRo
aXMuX2dhcmJhZ2VDb2xsZWN0QnV0dG9uQ2xpY2tlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3N0
YXR1c0Jhckl0ZW1zLnB1c2godGhpcy5nYXJiYWdlQ29sbGVjdEJ1dHRvbik7Ci0KLSAgICAgICAg
dGhpcy5fZ2x1ZVBhcmVudEJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9u
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiR2x1ZSBhc3luY2hyb25vdXMgZXZlbnRzIHRvIGNhdXNl
cyIpLCAiZ2x1ZS1hc3luYy1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICAgICAgdGhpcy5fZ2x1ZVBh
cmVudEJ1dHRvbi50b2dnbGVkID0gdGhpcy5fZ2x1ZVJlY29yZHNTZXR0aW5nLmdldCgpOwotICAg
ICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5zZXRHbHVlUmVjb3Jkcyh0aGlzLl9nbHVlUGFy
ZW50QnV0dG9uLnRvZ2dsZWQpOwotICAgICAgICB0aGlzLl9nbHVlUGFyZW50QnV0dG9uLmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fZ2x1ZVBhcmVudEJ1dHRvbkNsaWNrZWQsIHRoaXMp
OwotICAgICAgICB0aGlzLl9zdGF0dXNCYXJJdGVtcy5wdXNoKHRoaXMuX2dsdWVQYXJlbnRCdXR0
b24pOwotCi0gICAgICAgIHRoaXMuX2R1cmF0aW9uRmlsdGVyU2VsZWN0b3IgPSBuZXcgV2ViSW5z
cGVjdG9yLlN0YXR1c0JhckNvbWJvQm94KHRoaXMuX2R1cmF0aW9uRmlsdGVyQ2hhbmdlZC5iaW5k
KHRoaXMpKTsKLSAgICAgICAgZm9yICh2YXIgcHJlc2V0SW5kZXggPSAwOyBwcmVzZXRJbmRleCA8
IFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLmR1cmF0aW9uRmlsdGVyUHJlc2V0c01zLmxlbmd0
aDsgKytwcmVzZXRJbmRleCkgewotICAgICAgICAgICAgdmFyIGR1cmF0aW9uTXMgPSBXZWJJbnNw
ZWN0b3IuVGltZWxpbmVQYW5lbC5kdXJhdGlvbkZpbHRlclByZXNldHNNc1twcmVzZXRJbmRleF07
Ci0gICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9u
Iik7Ci0gICAgICAgICAgICBpZiAoIWR1cmF0aW9uTXMpIHsKLSAgICAgICAgICAgICAgICBvcHRp
b24udGV4dCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWxsIik7Ci0gICAgICAgICAgICAgICAg
b3B0aW9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGFsbCByZWNvcmRzIik7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG9wdGlvbi50ZXh0ID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJcdTIyNjUgJWRtcyIsIGR1cmF0aW9uTXMpOwotICAgICAgICAg
ICAgICAgIG9wdGlvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSGlkZSByZWNvcmRz
IHNob3J0ZXIgdGhhbiAlZG1zIiwgZHVyYXRpb25Ncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBvcHRpb24uX2R1cmF0aW9uTXMgPSBkdXJhdGlvbk1zOwotICAgICAgICAgICAgdGhpcy5f
ZHVyYXRpb25GaWx0ZXJTZWxlY3Rvci5hZGRPcHRpb24ob3B0aW9uKTsKLSAgICAgICAgICAgIHRo
aXMuX2R1cmF0aW9uRmlsdGVyU2VsZWN0b3IuZWxlbWVudC50aXRsZSA9IHRoaXMuX2R1cmF0aW9u
RmlsdGVyU2VsZWN0b3Iuc2VsZWN0ZWRPcHRpb24oKS50aXRsZTsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLl9zdGF0dXNCYXJJdGVtcy5wdXNoKHRoaXMuX2R1cmF0aW9uRmlsdGVyU2VsZWN0b3Ip
OwotCi0gICAgICAgIHRoaXMuX21pc2NTdGF0dXNCYXJJdGVtcyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgICAgICB0aGlzLl9taXNjU3RhdHVzQmFySXRlbXMuY2xhc3NOYW1l
ID0gInN0YXR1cy1iYXItaXRlbXMgdGltZWxpbmUtbWlzYy1zdGF0dXMtYmFyLWl0ZW1zIjsKLQot
ICAgICAgICB0aGlzLl9zdGF0dXNCYXJGaWx0ZXJzID0gdGhpcy5fbWlzY1N0YXR1c0Jhckl0ZW1z
LmNyZWF0ZUNoaWxkKCJkaXYiLCAidGltZWxpbmUtbWlzYy1zdGF0dXMtYmFyLWZpbHRlcnMiKTsK
LSAgICAgICAgdmFyIGNhdGVnb3JpZXMgPSBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRp
b25Nb2RlbC5jYXRlZ29yaWVzKCk7Ci0gICAgICAgIGZvciAodmFyIGNhdGVnb3J5TmFtZSBpbiBj
YXRlZ29yaWVzKSB7Ci0gICAgICAgICAgICB2YXIgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2NhdGVn
b3J5TmFtZV07Ci0gICAgICAgICAgICBpZiAoY2F0ZWdvcnkub3ZlcnZpZXdTdHJpcEdyb3VwSW5k
ZXggPCAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdGhpcy5fc3Rh
dHVzQmFyRmlsdGVycy5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVUaW1lbGluZUNhdGVnb3J5U3Rh
dHVzQmFyQ2hlY2tib3goY2F0ZWdvcnksIHRoaXMuX29uQ2F0ZWdvcnlDaGVja2JveENsaWNrZWQu
YmluZCh0aGlzLCBjYXRlZ29yeSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzdGF0c0Nv
bnRhaW5lciA9IHRoaXMuX3N0YXR1c0JhckZpbHRlcnMuY3JlYXRlQ2hpbGQoImRpdiIpOwotICAg
ICAgICBzdGF0c0NvbnRhaW5lci5jbGFzc05hbWUgPSAidGltZWxpbmUtcmVjb3Jkcy1zdGF0cy1j
b250YWluZXIiOwotCi0gICAgICAgIHRoaXMucmVjb3Jkc0NvdW50ZXIgPSBzdGF0c0NvbnRhaW5l
ci5jcmVhdGVDaGlsZCgiZGl2Iik7Ci0gICAgICAgIHRoaXMucmVjb3Jkc0NvdW50ZXIuY2xhc3NO
YW1lID0gInRpbWVsaW5lLXJlY29yZHMtc3RhdHMiOwotCi0gICAgICAgIHRoaXMuZnJhbWVTdGF0
aXN0aWNzID0gc3RhdHNDb250YWluZXIuY3JlYXRlQ2hpbGQoImRpdiIpOwotICAgICAgICB0aGlz
LmZyYW1lU3RhdGlzdGljcy5jbGFzc05hbWUgPSAidGltZWxpbmUtcmVjb3Jkcy1zdGF0cyBoaWRk
ZW4iOwotCi0gICAgICAgIGZ1bmN0aW9uIGdldEFuY2hvcigpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZyYW1lU3RhdGlzdGljczsKLSAgICAgICAgfQotICAgICAgICB0aGlz
Ll9mcmFtZVN0YXRpc3RpY3NQb3BvdmVySGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVy
SGVscGVyKHRoaXMuZnJhbWVTdGF0aXN0aWNzLCBnZXRBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5f
c2hvd0ZyYW1lU3RhdGlzdGljcy5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX2NyZWF0ZVRp
bWVsaW5lQ2F0ZWdvcnlTdGF0dXNCYXJDaGVja2JveDogZnVuY3Rpb24oY2F0ZWdvcnksIG9uQ2hl
Y2tib3hDbGlja2VkKQotICAgIHsKLSAgICAgICAgdmFyIGxhYmVsQ29udGFpbmVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGxhYmVsQ29udGFpbmVyLmFkZFN0eWxl
Q2xhc3MoInRpbWVsaW5lLWNhdGVnb3J5LXN0YXR1c2Jhci1pdGVtIik7Ci0gICAgICAgIGxhYmVs
Q29udGFpbmVyLmFkZFN0eWxlQ2xhc3MoInRpbWVsaW5lLWNhdGVnb3J5LSIgKyBjYXRlZ29yeS5u
YW1lKTsKLSAgICAgICAgbGFiZWxDb250YWluZXIuYWRkU3R5bGVDbGFzcygic3RhdHVzLWJhci1p
dGVtIik7Ci0KLSAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFi
ZWwiKTsKLSAgICAgICAgdmFyIGNoZWNrRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImlucHV0Iik7Ci0gICAgICAgIGNoZWNrRWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKLSAgICAg
ICAgY2hlY2tFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aW1lbGluZS1jYXRlZ29yeS1jaGVja2JveCI7
Ci0gICAgICAgIGNoZWNrRWxlbWVudC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgICAgY2hlY2tFbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgb25DaGVja2JveENsaWNrZWQsIGZhbHNlKTsK
LSAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQoY2hlY2tFbGVtZW50KTsKLQotICAgICAgICB2YXIg
dHlwZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHR5
cGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0eXBlIjsKLSAgICAgICAgdHlwZUVsZW1lbnQudGV4dENv
bnRlbnQgPSBjYXRlZ29yeS50aXRsZTsKLSAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQodHlwZUVs
ZW1lbnQpOwotCi0gICAgICAgIGxhYmVsQ29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKLSAg
ICAgICAgcmV0dXJuIGxhYmVsQ29udGFpbmVyOwotICAgIH0sCi0KLSAgICBfb25DYXRlZ29yeUNo
ZWNrYm94Q2xpY2tlZDogZnVuY3Rpb24oY2F0ZWdvcnksIGV2ZW50KQotICAgIHsKLSAgICAgICAg
Y2F0ZWdvcnkuaGlkZGVuID0gIWV2ZW50LnRhcmdldC5jaGVja2VkOwotICAgICAgICB0aGlzLl9p
bnZhbGlkYXRlQW5kU2NoZWR1bGVSZWZyZXNoKHRydWUsIHRydWUpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0gez9XZWJJbnNwZWN0b3IuUHJvZ3Jlc3NJbmRpY2F0b3J9IGluZGlj
YXRvcgotICAgICAqLwotICAgIF9zZXRPcGVyYXRpb25JblByb2dyZXNzOiBmdW5jdGlvbihpbmRp
Y2F0b3IpCi0gICAgewotICAgICAgICB0aGlzLl9vcGVyYXRpb25JblByb2dyZXNzID0gISFpbmRp
Y2F0b3I7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc3RhdHVzQmFySXRlbXMu
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9zdGF0dXNCYXJJdGVtc1tpXS5zZXRFbmFi
bGVkKCF0aGlzLl9vcGVyYXRpb25JblByb2dyZXNzKTsKLSAgICAgICAgdGhpcy5fZ2x1ZVBhcmVu
dEJ1dHRvbi5zZXRFbmFibGVkKCF0aGlzLl9vcGVyYXRpb25JblByb2dyZXNzICYmICF0aGlzLl9m
cmFtZUNvbnRyb2xsZXIpOwotICAgICAgICB0aGlzLl9taXNjU3RhdHVzQmFySXRlbXMucmVtb3Zl
Q2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5fbWlzY1N0YXR1c0Jhckl0ZW1zLmFwcGVuZENoaWxk
KGluZGljYXRvciA/IGluZGljYXRvci5lbGVtZW50IDogdGhpcy5fc3RhdHVzQmFyRmlsdGVycyk7
Ci0gICAgfSwKLQotICAgIF9yZWdpc3RlclNob3J0Y3V0czogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5yZWdpc3RlclNob3J0Y3V0cyhXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbERl
c2NyaXB0b3IuU2hvcnRjdXRLZXlzLlN0YXJ0U3RvcFJlY29yZGluZywgdGhpcy5fdG9nZ2xlVGlt
ZWxpbmVCdXR0b25DbGlja2VkLmJpbmQodGhpcykpOwotICAgICAgICBpZiAoSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmNhblNhdmUoKSkKLSAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMo
V2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5TYXZlVG9G
aWxlLCB0aGlzLl9zYXZlVG9GaWxlLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLnJlZ2lzdGVy
U2hvcnRjdXRzKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsRGVzY3JpcHRvci5TaG9ydGN1dEtl
eXMuTG9hZEZyb21GaWxlLCB0aGlzLl9zZWxlY3RGaWxlVG9Mb2FkLmJpbmQodGhpcykpOwotICAg
IH0sCi0KLSAgICBfY3JlYXRlRmlsZVNlbGVjdG9yOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuZWxlbWVu
dC5yZW1vdmVDaGlsZCh0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50KTsKLQotICAgICAgICB0aGlz
Ll9maWxlU2VsZWN0b3JFbGVtZW50ID0gV2ViSW5zcGVjdG9yLmNyZWF0ZUZpbGVTZWxlY3RvckVs
ZW1lbnQodGhpcy5fbG9hZEZyb21GaWxlLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5fZmlsZVNlbGVjdG9yRWxlbWVudCk7Ci0gICAgfSwKLQotICAg
IF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY29udGV4
dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgaWYg
KEluc3BlY3RvckZyb250ZW5kSG9zdC5jYW5TYXZlKCkpCi0gICAgICAgICAgICBjb250ZXh0TWVu
dS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJD
YXNlTWVudVRpdGxlcygpID8gIlNhdmUgVGltZWxpbmUgZGF0YVx1MjAyNiIgOiAiU2F2ZSBUaW1l
bGluZSBEYXRhXHUyMDI2IiksIHRoaXMuX3NhdmVUb0ZpbGUuYmluZCh0aGlzKSwgdGhpcy5fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyk7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAi
TG9hZCBUaW1lbGluZSBkYXRhXHUyMDI2IiA6ICJMb2FkIFRpbWVsaW5lIERhdGFcdTIwMjYiKSwg
dGhpcy5fc2VsZWN0RmlsZVRvTG9hZC5iaW5kKHRoaXMpLCB0aGlzLl9vcGVyYXRpb25JblByb2dy
ZXNzKTsKLSAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0V2ZW50PX0gZXZlbnQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAg
ICAqLwotICAgIF9zYXZlVG9GaWxlOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9vcGVyYXRpb25JblByb2dyZXNzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIHRoaXMuX21vZGVsLnNhdmVUb0ZpbGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX3NlbGVjdEZpbGVUb0xvYWQ6IGZ1bmN0aW9u
KGV2ZW50KSB7Ci0gICAgICAgIHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQuY2xpY2soKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IUZp
bGV9IGZpbGUKLSAgICAgKi8KLSAgICBfbG9hZEZyb21GaWxlOiBmdW5jdGlvbihmaWxlKQotICAg
IHsKLSAgICAgICAgdmFyIHByb2dyZXNzSW5kaWNhdG9yID0gdGhpcy5fcHJlcGFyZVRvTG9hZFRp
bWVsaW5lKCk7Ci0gICAgICAgIGlmICghcHJvZ3Jlc3NJbmRpY2F0b3IpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHRoaXMuX21vZGVsLmxvYWRGcm9tRmlsZShmaWxlLCBwcm9ncmVzc0lu
ZGljYXRvcik7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZUZpbGVTZWxlY3RvcigpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICovCi0gICAgbG9hZEZy
b21VUkw6IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAgIHZhciBwcm9ncmVzc0luZGljYXRv
ciA9IHRoaXMuX3ByZXBhcmVUb0xvYWRUaW1lbGluZSgpOwotICAgICAgICBpZiAoIXByb2dyZXNz
SW5kaWNhdG9yKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9tb2RlbC5sb2Fk
RnJvbVVSTCh1cmwsIHByb2dyZXNzSW5kaWNhdG9yKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5Qcm9ncmVzc0luZGljYXRvcn0KLSAgICAgKi8KLSAg
ICBfcHJlcGFyZVRvTG9hZFRpbWVsaW5lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5fb3BlcmF0aW9uSW5Qcm9ncmVzcykKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgICBpZiAodGhpcy50b2dnbGVUaW1lbGluZUJ1dHRvbi50b2dnbGVkKSB7Ci0gICAgICAgICAg
ICB0aGlzLnRvZ2dsZVRpbWVsaW5lQnV0dG9uLnRvZ2dsZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IHRoaXMuX21vZGVsLnN0b3BSZWNvcmQoKTsKLSAgICAgICAgfQotICAgICAgICB2YXIgcHJvZ3Jl
c3NJbmRpY2F0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2dyZXNzSW5kaWNhdG9yKCk7Ci0gICAg
ICAgIHByb2dyZXNzSW5kaWNhdG9yLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2dy
ZXNzSW5kaWNhdG9yLkV2ZW50cy5Eb25lLCB0aGlzLl9zZXRPcGVyYXRpb25JblByb2dyZXNzLmJp
bmQodGhpcywgbnVsbCkpOwotICAgICAgICB0aGlzLl9zZXRPcGVyYXRpb25JblByb2dyZXNzKHBy
b2dyZXNzSW5kaWNhdG9yKTsKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzSW5kaWNhdG9yOwotICAg
IH0sCi0KLSAgICBfcm9vdFJlY29yZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLnJvb3RSZWNvcmQoKTsKLSAgICB9LAotCi0gICAgX3Vw
ZGF0ZVJlY29yZHNDb3VudGVyOiBmdW5jdGlvbihyZWNvcmRzSW5XaW5kb3dDb3VudCkKLSAgICB7
Ci0gICAgICAgIHRoaXMucmVjb3Jkc0NvdW50ZXIudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIiVkIG9mICVkIHJlY29yZHMgc2hvd24iLCByZWNvcmRzSW5XaW5kb3dDb3VudCwg
dGhpcy5fYWxsUmVjb3Jkc0NvdW50KTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZUZyYW1lU3RhdGlz
dGljczogZnVuY3Rpb24oZnJhbWVzKQotICAgIHsKLSAgICAgICAgaWYgKGZyYW1lcy5sZW5ndGgp
IHsKLSAgICAgICAgICAgIHRoaXMuX2xhc3RGcmFtZVN0YXRpc3RpY3MgPSBuZXcgV2ViSW5zcGVj
dG9yLkZyYW1lU3RhdGlzdGljcyhmcmFtZXMpOwotICAgICAgICAgICAgdmFyIGRldGFpbHMgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoImF2ZzogJXMsIFx1MDNjMzogJXMiLAotICAgICAgICAgICAg
ICAgIE51bWJlci5zZWNvbmRzVG9TdHJpbmcodGhpcy5fbGFzdEZyYW1lU3RhdGlzdGljcy5hdmVy
YWdlLCB0cnVlKSwgTnVtYmVyLnNlY29uZHNUb1N0cmluZyh0aGlzLl9sYXN0RnJhbWVTdGF0aXN0
aWNzLnN0ZGRldiwgdHJ1ZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2xh
c3RGcmFtZVN0YXRpc3RpY3MgPSBudWxsOwotICAgICAgICB0aGlzLmZyYW1lU3RhdGlzdGljcy50
ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWQgb2YgJWQgZnJhbWVzIHNob3du
IiwgZnJhbWVzLmxlbmd0aCwgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuZnJhbWVzKCkubGVuZ3Ro
KTsKLSAgICAgICAgaWYgKGRldGFpbHMpIHsKLSAgICAgICAgICAgIHRoaXMuZnJhbWVTdGF0aXN0
aWNzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgKCIpKTsKLSAgICAgICAg
ICAgIHRoaXMuZnJhbWVTdGF0aXN0aWNzLmNyZWF0ZUNoaWxkKCJzcGFuIiwgInRpbWVsaW5lLWZy
YW1lcy1zdGF0cyIpLnRleHRDb250ZW50ID0gZGV0YWlsczsKLSAgICAgICAgICAgIHRoaXMuZnJh
bWVTdGF0aXN0aWNzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIpIikpOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gYW5j
aG9yCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUG9wb3Zlcn0gcG9wb3ZlcgotICAgICAq
LwotICAgIF9zaG93RnJhbWVTdGF0aXN0aWNzOiBmdW5jdGlvbihhbmNob3IsIHBvcG92ZXIpCi0g
ICAgewotICAgICAgICBwb3BvdmVyLnNob3coV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0
aW9uTW9kZWwuZ2VuZXJhdGVQb3B1cENvbnRlbnRGb3JGcmFtZVN0YXRpc3RpY3ModGhpcy5fbGFz
dEZyYW1lU3RhdGlzdGljcyksIGFuY2hvcik7Ci0gICAgfSwKLQotICAgIF91cGRhdGVFdmVudERp
dmlkZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl90aW1lbGluZUdyaWQucmVt
b3ZlRXZlbnREaXZpZGVycygpOwotICAgICAgICB2YXIgY2xpZW50V2lkdGggPSB0aGlzLl9ncmFw
aFJvd3NFbGVtZW50V2lkdGg7Ci0gICAgICAgIHZhciBkaXZpZGVycyA9IFtdOwotICAgICAgICB2
YXIgZXZlbnREaXZpZGVyUmVjb3JkcyA9IHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmV2ZW50RGl2
aWRlclJlY29yZHMoKTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50RGl2aWRl
clJlY29yZHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciByZWNvcmQgPSBldmVudERp
dmlkZXJSZWNvcmRzW2ldOwotICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHRoaXMuX2NhbGN1
bGF0b3IuY29tcHV0ZUJhckdyYXBoV2luZG93UG9zaXRpb24ocmVjb3JkKTsKLSAgICAgICAgICAg
IHZhciBkaXZpZGVyUG9zaXRpb24gPSBNYXRoLnJvdW5kKHBvc2l0aW9ucy5sZWZ0KTsKLSAgICAg
ICAgICAgIGlmIChkaXZpZGVyUG9zaXRpb24gPCAwIHx8IGRpdmlkZXJQb3NpdGlvbiA+PSBjbGll
bnRXaWR0aCB8fCBkaXZpZGVyc1tkaXZpZGVyUG9zaXRpb25dKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgdmFyIGRpdmlkZXIgPSBXZWJJbnNwZWN0b3IuVGltZWxpbmVQ
cmVzZW50YXRpb25Nb2RlbC5jcmVhdGVFdmVudERpdmlkZXIocmVjb3JkLnR5cGUsIHJlY29yZC50
aXRsZSk7Ci0gICAgICAgICAgICBkaXZpZGVyLnN0eWxlLmxlZnQgPSBkaXZpZGVyUG9zaXRpb24g
KyAicHgiOwotICAgICAgICAgICAgZGl2aWRlcnNbZGl2aWRlclBvc2l0aW9uXSA9IGRpdmlkZXI7
Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fdGltZWxpbmVHcmlkLmFkZEV2ZW50RGl2aWRlcnMo
ZGl2aWRlcnMpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlRnJhbWVCYXJzOiBmdW5jdGlvbihmcmFt
ZXMpCi0gICAgewotICAgICAgICB2YXIgY2xpZW50V2lkdGggPSB0aGlzLl9ncmFwaFJvd3NFbGVt
ZW50V2lkdGg7Ci0gICAgICAgIGlmICh0aGlzLl9mcmFtZUNvbnRhaW5lcikKLSAgICAgICAgICAg
IHRoaXMuX2ZyYW1lQ29udGFpbmVyLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgY29uc3QgZnJhbWVDb250YWluZXJCb3JkZXJXaWR0aCA9IDE7Ci0gICAgICAg
ICAgICB0aGlzLl9mcmFtZUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICAgICAgdGhpcy5fZnJhbWVDb250YWluZXIuYWRkU3R5bGVDbGFzcygiZmlsbCIp
OwotICAgICAgICAgICAgdGhpcy5fZnJhbWVDb250YWluZXIuYWRkU3R5bGVDbGFzcygidGltZWxp
bmUtZnJhbWUtY29udGFpbmVyIik7Ci0gICAgICAgICAgICB0aGlzLl9mcmFtZUNvbnRhaW5lci5z
dHlsZS5oZWlnaHQgPSB0aGlzLl9oZWFkZXJMaW5lQ291bnQgKiBXZWJJbnNwZWN0b3IuVGltZWxp
bmVQYW5lbC5yb3dIZWlnaHQgKyBmcmFtZUNvbnRhaW5lckJvcmRlcldpZHRoICsgInB4IjsKLSAg
ICAgICAgICAgIHRoaXMuX2ZyYW1lQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNr
IiwgdGhpcy5fb25GcmFtZURvdWJsZUNsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIGRpdmlkZXJzID0gWyB0aGlzLl9mcmFtZUNvbnRhaW5lciBdOwot
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgZnJhbWUgPSBmcmFtZXNbaV07Ci0gICAgICAgICAgICB2YXIgZnJhbWVTdGFy
dCA9IHRoaXMuX2NhbGN1bGF0b3IuY29tcHV0ZVBvc2l0aW9uKGZyYW1lLnN0YXJ0VGltZSk7Ci0g
ICAgICAgICAgICB2YXIgZnJhbWVFbmQgPSB0aGlzLl9jYWxjdWxhdG9yLmNvbXB1dGVQb3NpdGlv
bihmcmFtZS5lbmRUaW1lKTsKLQotICAgICAgICAgICAgdmFyIGZyYW1lU3RyaXAgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIGZyYW1lU3RyaXAuY2xhc3NOYW1l
ID0gInRpbWVsaW5lLWZyYW1lLXN0cmlwIjsKLSAgICAgICAgICAgIHZhciBhY3R1YWxTdGFydCA9
IE1hdGgubWF4KGZyYW1lU3RhcnQsIDApOwotICAgICAgICAgICAgdmFyIHdpZHRoID0gZnJhbWVF
bmQgLSBhY3R1YWxTdGFydDsKLSAgICAgICAgICAgIGZyYW1lU3RyaXAuc3R5bGUubGVmdCA9IGFj
dHVhbFN0YXJ0ICsgInB4IjsKLSAgICAgICAgICAgIGZyYW1lU3RyaXAuc3R5bGUud2lkdGggPSB3
aWR0aCArICJweCI7Ci0gICAgICAgICAgICBmcmFtZVN0cmlwLl9mcmFtZSA9IGZyYW1lOwotCi0g
ICAgICAgICAgICBjb25zdCBtaW5XaWR0aEZvckZyYW1lSW5mbyA9IDYwOwotICAgICAgICAgICAg
aWYgKHdpZHRoID4gbWluV2lkdGhGb3JGcmFtZUluZm8pCi0gICAgICAgICAgICAgICAgZnJhbWVT
dHJpcC50ZXh0Q29udGVudCA9IE51bWJlci5zZWNvbmRzVG9TdHJpbmcoZnJhbWUuZW5kVGltZSAt
IGZyYW1lLnN0YXJ0VGltZSwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgIHRoaXMuX2ZyYW1lQ29udGFp
bmVyLmFwcGVuZENoaWxkKGZyYW1lU3RyaXApOwotCi0gICAgICAgICAgICBpZiAoYWN0dWFsU3Rh
cnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZyYW1lTWFya2VyID0gV2ViSW5zcGVjdG9y
LlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY3JlYXRlRXZlbnREaXZpZGVyKFdlYkluc3BlY3Rv
ci5UaW1lbGluZU1vZGVsLlJlY29yZFR5cGUuQmVnaW5GcmFtZSk7Ci0gICAgICAgICAgICAgICAg
ZnJhbWVNYXJrZXIuc3R5bGUubGVmdCA9IGZyYW1lU3RhcnQgKyAicHgiOwotICAgICAgICAgICAg
ICAgIGRpdmlkZXJzLnB1c2goZnJhbWVNYXJrZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5hZGRFdmVudERpdmlkZXJzKGRpdmlkZXJzKTsK
LSAgICB9LAotCi0gICAgX29uRnJhbWVEb3VibGVDbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHZhciBmcmFtZUJhciA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aENsYXNzKCJ0aW1lbGluZS1mcmFtZS1zdHJpcCIpOwotICAgICAgICBpZiAoIWZyYW1l
QmFyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9vdmVydmlld1BhbmUuem9v
bVRvRnJhbWUoZnJhbWVCYXIuX2ZyYW1lKTsKLSAgICB9LAotCi0gICAgX292ZXJ2aWV3TW9kZUNo
YW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIG1vZGUgPSBldmVudC5k
YXRhOwotICAgICAgICB2YXIgc2hvdWxkU2hvd01lbW9yeSA9IG1vZGUgPT09IFdlYkluc3BlY3Rv
ci5UaW1lbGluZU92ZXJ2aWV3UGFuZS5Nb2RlLk1lbW9yeTsKLSAgICAgICAgdmFyIGZyYW1lTW9k
ZSA9IG1vZGUgPT09IFdlYkluc3BlY3Rvci5UaW1lbGluZU92ZXJ2aWV3UGFuZS5Nb2RlLkZyYW1l
czsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdNb2RlU2V0dGluZy5zZXQobW9kZSk7Ci0gICAgICAg
IGlmIChmcmFtZU1vZGUgIT09IHRoaXMuX2ZyYW1lTW9kZSkgewotICAgICAgICAgICAgdGhpcy5f
ZnJhbWVNb2RlID0gZnJhbWVNb2RlOwotICAgICAgICAgICAgdGhpcy5fZ2x1ZVBhcmVudEJ1dHRv
bi5zZXRFbmFibGVkKCFmcmFtZU1vZGUpOwotICAgICAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9u
TW9kZWwuc2V0R2x1ZVJlY29yZHModGhpcy5fZ2x1ZVBhcmVudEJ1dHRvbi50b2dnbGVkICYmICFm
cmFtZU1vZGUpOwotICAgICAgICAgICAgdGhpcy5fcmVwb3B1bGF0ZVJlY29yZHMoKTsKLQotICAg
ICAgICAgICAgaWYgKGZyYW1lTW9kZSkgewotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJ0aW1lbGluZS1mcmFtZS1vdmVydmlldyIpOwotICAgICAgICAgICAgICAg
IHRoaXMucmVjb3Jkc0NvdW50ZXIuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5mcmFtZVN0YXRpc3RpY3MucmVtb3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fZnJhbWVDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5U
aW1lbGluZUZyYW1lQ29udHJvbGxlcih0aGlzLl9tb2RlbCwgdGhpcy5fb3ZlcnZpZXdQYW5lLCB0
aGlzLl9wcmVzZW50YXRpb25Nb2RlbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHRoaXMuX2ZyYW1lQ29udHJvbGxlci5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fZnJhbWVDb250cm9sbGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1l
bnQucmVtb3ZlU3R5bGVDbGFzcygidGltZWxpbmUtZnJhbWUtb3ZlcnZpZXciKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLnJlY29yZHNDb3VudGVyLnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwot
ICAgICAgICAgICAgICAgIHRoaXMuZnJhbWVTdGF0aXN0aWNzLmFkZFN0eWxlQ2xhc3MoImhpZGRl
biIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzaG91bGRTaG93TWVt
b3J5ID09PSB0aGlzLl9tZW1vcnlTdGF0aXN0aWNzLnZpc2libGUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKCFzaG91bGRTaG93TWVtb3J5KSB7Ci0gICAgICAgICAgICB0aGlz
Ll90aW1lbGluZU1lbW9yeVNwbGl0dGVyLmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAg
ICAgICAgdGhpcy5fbWVtb3J5U3RhdGlzdGljcy5oaWRlKCk7Ci0gICAgICAgICAgICB0aGlzLnNw
bGl0Vmlldy5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKLSAgICAgICAgICAgIHRoaXMu
c3BsaXRWaWV3LmVsZW1lbnQuc3R5bGUuYm90dG9tID0gIjAiOwotICAgICAgICAgICAgdGhpcy5v
blJlc2l6ZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5fdGltZWxpbmVN
ZW1vcnlTcGxpdHRlci5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICAgICAgICAgIHRo
aXMuX21lbW9yeVN0YXRpc3RpY3Muc2hvdygpOwotICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXcu
ZWxlbWVudC5zdHlsZS5ib3R0b20gPSAiYXV0byI7Ci0gICAgICAgICAgICB0aGlzLl9zZXRTcGxp
dHRlclBvc2l0aW9uKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5tZW1vcnlDb3VudGVyR3JhcGhzSGVp
Z2h0LmdldCgpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtib29sZWFufQotICAgICAqLwotICAgIF90b2dnbGVUaW1lbGluZUJ1dHRvbkNsaWNrZWQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9vcGVyYXRpb25JblByb2dyZXNzKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICh0aGlzLnRvZ2dsZVRpbWVsaW5l
QnV0dG9uLnRvZ2dsZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX21vZGVsLnN0b3BSZWNvcmQoKTsK
LSAgICAgICAgICAgIHRoaXMudG9nZ2xlVGltZWxpbmVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlJlY29yZCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhp
cy5fbW9kZWwuc3RhcnRSZWNvcmQodGhpcy5faW5jbHVkZURvbUNvdW50ZXJzLCB0aGlzLl9pbmNs
dWRlTmF0aXZlTWVtb3J5U3RhdGlzdGljcyk7Ci0gICAgICAgICAgICB0aGlzLnRvZ2dsZVRpbWVs
aW5lQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdG9wIik7Ci0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IudXNlck1ldHJpY3MuVGltZWxpbmVTdGFydGVkLnJlY29yZCgpOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMudG9nZ2xlVGltZWxpbmVCdXR0b24udG9nZ2xlZCA9ICF0
aGlzLnRvZ2dsZVRpbWVsaW5lQnV0dG9uLnRvZ2dsZWQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0sCi0KLSAgICBfZHVyYXRpb25GaWx0ZXJDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5fZHVyYXRpb25GaWx0ZXJTZWxlY3Rvci5zZWxlY3Rl
ZE9wdGlvbigpOwotICAgICAgICB2YXIgbWluaW11bVJlY29yZER1cmF0aW9uID0gK29wdGlvbi5f
ZHVyYXRpb25NcyAvIDEwMDAuMDsKLSAgICAgICAgdGhpcy5fZHVyYXRpb25GaWx0ZXIuc2V0TWlu
aW11bVJlY29yZER1cmF0aW9uKG1pbmltdW1SZWNvcmREdXJhdGlvbik7Ci0gICAgICAgIHRoaXMu
X2R1cmF0aW9uRmlsdGVyU2VsZWN0b3IuZWxlbWVudC50aXRsZSA9IG9wdGlvbi50aXRsZTsKLSAg
ICAgICAgdGhpcy5faW52YWxpZGF0ZUFuZFNjaGVkdWxlUmVmcmVzaCh0cnVlLCB0cnVlKTsKLSAg
ICB9LAotCi0gICAgX2dhcmJhZ2VDb2xsZWN0QnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgSGVhcFByb2ZpbGVyQWdlbnQuY29sbGVjdEdhcmJhZ2UoKTsKLSAgICB9LAot
Ci0gICAgX2dsdWVQYXJlbnRCdXR0b25DbGlja2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgbmV3VmFsdWUgPSAhdGhpcy5fZ2x1ZVBhcmVudEJ1dHRvbi50b2dnbGVkOwotICAgICAg
ICB0aGlzLl9nbHVlUGFyZW50QnV0dG9uLnRvZ2dsZWQgPSBuZXdWYWx1ZTsKLSAgICAgICAgdGhp
cy5fcHJlc2VudGF0aW9uTW9kZWwuc2V0R2x1ZVJlY29yZHMobmV3VmFsdWUpOwotICAgICAgICB0
aGlzLl9nbHVlUmVjb3Jkc1NldHRpbmcuc2V0KG5ld1ZhbHVlKTsKLSAgICAgICAgdGhpcy5fcmVw
b3B1bGF0ZVJlY29yZHMoKTsKLSAgICB9LAotCi0gICAgX3JlcG9wdWxhdGVSZWNvcmRzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9yZXNldFBhbmVsKCk7Ci0gICAgICAgIHRoaXMu
X2F1dG9tYXRpY2FsbHlTaXplV2luZG93ID0gZmFsc2U7Ci0gICAgICAgIHZhciByZWNvcmRzID0g
dGhpcy5fbW9kZWwucmVjb3JkczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvcmRz
Lmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5faW5uZXJBZGRSZWNvcmRUb1RpbWVsaW5l
KHJlY29yZHNbaV0pOwotICAgICAgICB0aGlzLl9pbnZhbGlkYXRlQW5kU2NoZWR1bGVSZWZyZXNo
KGZhbHNlLCB0cnVlKTsKLSAgICB9LAotCi0gICAgX29uVGltZWxpbmVFdmVudFJlY29yZGVkOiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pbm5lckFkZFJlY29yZFRv
VGltZWxpbmUoZXZlbnQuZGF0YSkpCi0gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlQW5kU2No
ZWR1bGVSZWZyZXNoKGZhbHNlLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9pbm5lckFkZFJlY29y
ZFRvVGltZWxpbmU6IGZ1bmN0aW9uKHJlY29yZCkKLSAgICB7Ci0gICAgICAgIGlmIChyZWNvcmQu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5Qcm9ncmFtKSB7
Ci0gICAgICAgICAgICB0aGlzLl9tYWluVGhyZWFkVGFza3MucHVzaCh7Ci0gICAgICAgICAgICAg
ICAgc3RhcnRUaW1lOiBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5zdGFydFRpbWVJblNlY29u
ZHMocmVjb3JkKSwKLSAgICAgICAgICAgICAgICBlbmRUaW1lOiBXZWJJbnNwZWN0b3IuVGltZWxp
bmVNb2RlbC5lbmRUaW1lSW5TZWNvbmRzKHJlY29yZCkKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIHJlY29yZHMgPSB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRS
ZWNvcmQocmVjb3JkKTsKLSAgICAgICAgdGhpcy5fYWxsUmVjb3Jkc0NvdW50ICs9IHJlY29yZHMu
bGVuZ3RoOwotICAgICAgICB2YXIgaGFzVmlzaWJsZVJlY29yZHMgPSBmYWxzZTsKLSAgICAgICAg
dmFyIHByZXNlbnRhdGlvbk1vZGVsID0gdGhpcy5fcHJlc2VudGF0aW9uTW9kZWw7Ci0gICAgICAg
IGZ1bmN0aW9uIGNoZWNrVmlzaWJsZShyZWNvcmQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhh
c1Zpc2libGVSZWNvcmRzIHw9IHByZXNlbnRhdGlvbk1vZGVsLmlzVmlzaWJsZShyZWNvcmQpOwot
ICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVs
LmZvckFsbFJlY29yZHMocmVjb3JkcywgY2hlY2tWaXNpYmxlKTsKLQotICAgICAgICBmdW5jdGlv
biBpc0Fkb3B0ZWRSZWNvcmQocmVjb3JkKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
cmVjb3JkLnBhcmVudCAhPT0gcHJlc2VudGF0aW9uTW9kZWwucm9vdFJlY29yZDsKLSAgICAgICAg
fQotICAgICAgICAvLyBUZWxsIGNhbGxlciB1cGRhdGUgaXMgbmVjZXNzYXJ5IGVpdGhlciBpZiB3
ZSBhZGRlZCBhIHZpc2libGUgcmVjb3JkIG9yIGlmIHdlIHJlLXBhcmVudGVkIGEgcmVjb3JkLgot
ICAgICAgICByZXR1cm4gaGFzVmlzaWJsZVJlY29yZHMgfHwgcmVjb3Jkcy5zb21lKGlzQWRvcHRl
ZFJlY29yZCk7Ci0gICAgfSwKLQotICAgIHNpZGViYXJSZXNpemVkOiBmdW5jdGlvbihldmVudCkK
LSAgICB7Ci0gICAgICAgIHZhciB3aWR0aCA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHRoaXMuX3Jl
c2l6ZSh3aWR0aCk7Ci0gICAgICAgIHRoaXMuX3NpZGViYXJCYWNrZ3JvdW5kRWxlbWVudC5zdHls
ZS53aWR0aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdQYW5lLnNpZGVi
YXJSZXNpemVkKHdpZHRoKTsKLSAgICAgICAgdGhpcy5fbWVtb3J5U3RhdGlzdGljcy5zZXRTaWRl
YmFyV2lkdGgod2lkdGgpOwotICAgICAgICB0aGlzLl90aW1lbGluZUdyaWQuZ3JpZEhlYWRlckVs
ZW1lbnQuc3R5bGUubGVmdCA9IHdpZHRoICsgInB4IjsKLSAgICB9LAotCi0gICAgb25SZXNpemU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc2l6ZSh0aGlzLnNwbGl0Vmlldy5z
aWRlYmFyV2lkdGgoKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBzaWRlYmFyV2lkdGgKLSAgICAgKi8KLSAgICBfcmVzaXplOiBmdW5jdGlvbihzaWRlYmFyV2lk
dGgpCi0gICAgewotICAgICAgICB0aGlzLl9jbG9zZVJlY29yZERldGFpbHMoKTsKLSAgICAgICAg
dGhpcy5fc2NoZWR1bGVSZWZyZXNoKGZhbHNlLCB0cnVlKTsKLSAgICAgICAgdGhpcy5fZ3JhcGhS
b3dzRWxlbWVudFdpZHRoID0gdGhpcy5fZ3JhcGhSb3dzRWxlbWVudC5vZmZzZXRXaWR0aDsKLSAg
ICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudEhlaWdodCA9IHRoaXMuX2NvbnRhaW5lckVsZW1l
bnQuY2xpZW50SGVpZ2h0OwotICAgICAgICB2YXIgbGFzdEl0ZW1FbGVtZW50ID0gdGhpcy5fc3Rh
dHVzQmFySXRlbXNbdGhpcy5fc3RhdHVzQmFySXRlbXMubGVuZ3RoIC0gMV0uZWxlbWVudDsKLSAg
ICAgICAgdmFyIG1pbkZsb2F0aW5nU3RhdHVzQmFySXRlbXNPZmZzZXQgPSBsYXN0SXRlbUVsZW1l
bnQudG90YWxPZmZzZXRMZWZ0KCkgKyBsYXN0SXRlbUVsZW1lbnQub2Zmc2V0V2lkdGg7Ci0gICAg
ICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5ncmlkSGVhZGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IHRo
aXMuX2l0ZW1zR3JhcGhzRWxlbWVudC5vZmZzZXRXaWR0aCArICJweCI7Ci0gICAgICAgIHRoaXMu
X21pc2NTdGF0dXNCYXJJdGVtcy5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgobWluRmxvYXRpbmdTdGF0
dXNCYXJJdGVtc09mZnNldCwgc2lkZWJhcldpZHRoKSArICJweCI7Ci0gICAgfSwKLQotICAgIF9j
bGVhclBhbmVsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9tb2RlbC5yZXNldCgp
OwotICAgIH0sCi0KLSAgICBfb25SZWNvcmRzQ2xlYXJlZDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fcmVzZXRQYW5lbCgpOwotICAgICAgICB0aGlzLl9pbnZhbGlkYXRlQW5kU2No
ZWR1bGVSZWZyZXNoKHRydWUsIHRydWUpOwotICAgIH0sCi0KLSAgICBfcmVzZXRQYW5lbDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwucmVzZXQoKTsK
LSAgICAgICAgdGhpcy5fYm91bmRhcmllc0FyZVZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMu
X2FkanVzdFNjcm9sbFBvc2l0aW9uKDApOwotICAgICAgICB0aGlzLl9jbG9zZVJlY29yZERldGFp
bHMoKTsKLSAgICAgICAgdGhpcy5fYWxsUmVjb3Jkc0NvdW50ID0gMDsKLSAgICAgICAgdGhpcy5f
YXV0b21hdGljYWxseVNpemVXaW5kb3cgPSB0cnVlOwotICAgICAgICB0aGlzLl9tYWluVGhyZWFk
VGFza3MgPSBbXTsKLSAgICB9LAotCi0gICAgZWxlbWVudHNUb1Jlc3RvcmVTY3JvbGxQb3NpdGlv
bnNGb3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fY29udGFpbmVy
RWxlbWVudF07Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLndhc1Nob3duLmNhbGwodGhpcyk7Ci0g
ICAgICAgIGlmICghV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwuX2NhdGVnb3J5U3R5bGVzSW5p
dGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLl9jYXRl
Z29yeVN0eWxlc0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuX2luamVjdENh
dGVnb3J5U3R5bGVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fb3ZlcnZpZXdQYW5lLnNl
dE1vZGUodGhpcy5fb3ZlcnZpZXdNb2RlU2V0dGluZy5nZXQoKSk7Ci0gICAgICAgIHRoaXMuX3Jl
ZnJlc2goKTsKLSAgICB9LAotCi0gICAgd2lsbEhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2Nsb3NlUmVjb3JkRGV0YWlscygpOwotICAgICAgICBXZWJJbnNwZWN0b3IuUGFu
ZWwucHJvdG90eXBlLndpbGxIaWRlLmNhbGwodGhpcyk7Ci0gICAgfSwKLQotICAgIF9vblNjcm9s
bDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9jbG9zZVJlY29yZERldGFp
bHMoKTsKLSAgICAgICAgdGhpcy5fc2Nyb2xsVG9wID0gdGhpcy5fY29udGFpbmVyRWxlbWVudC5z
Y3JvbGxUb3A7Ci0gICAgICAgIHZhciBkaXZpZGVyc1RvcCA9IE1hdGgubWF4KDAsIHRoaXMuX3Nj
cm9sbFRvcCk7Ci0gICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5zZXRTY3JvbGxBbmREaXZpZGVy
VG9wKHRoaXMuX3Njcm9sbFRvcCwgZGl2aWRlcnNUb3ApOwotICAgICAgICB0aGlzLl9zY2hlZHVs
ZVJlZnJlc2godHJ1ZSwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gcHJlc2VydmVCb3VuZGFyaWVzCi0gICAgICogQHBhcmFtIHtib29sZWFufSB1c2Vy
R2VzdHVyZQotICAgICAqLwotICAgIF9pbnZhbGlkYXRlQW5kU2NoZWR1bGVSZWZyZXNoOiBmdW5j
dGlvbihwcmVzZXJ2ZUJvdW5kYXJpZXMsIHVzZXJHZXN0dXJlKQotICAgIHsKLSAgICAgICAgdGhp
cy5fcHJlc2VudGF0aW9uTW9kZWwuaW52YWxpZGF0ZUZpbHRlcmVkUmVjb3JkcygpOwotICAgICAg
ICBkZWxldGUgdGhpcy5fc2VhcmNoUmVzdWx0czsKLSAgICAgICAgdGhpcy5fc2NoZWR1bGVSZWZy
ZXNoKHByZXNlcnZlQm91bmRhcmllcywgdXNlckdlc3R1cmUpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXNlcnZlQm91bmRhcmllcwotICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gdXNlckdlc3R1cmUKLSAgICAgKi8KLSAgICBfc2NoZWR1bGVSZWZyZXNoOiBm
dW5jdGlvbihwcmVzZXJ2ZUJvdW5kYXJpZXMsIHVzZXJHZXN0dXJlKQotICAgIHsKLSAgICAgICAg
dGhpcy5fY2xvc2VSZWNvcmREZXRhaWxzKCk7Ci0gICAgICAgIHRoaXMuX2JvdW5kYXJpZXNBcmVW
YWxpZCAmPSBwcmVzZXJ2ZUJvdW5kYXJpZXM7Ci0KLSAgICAgICAgaWYgKCF0aGlzLmlzU2hvd2lu
ZygpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChwcmVzZXJ2ZUJvdW5kYXJp
ZXMgfHwgdXNlckdlc3R1cmUpCi0gICAgICAgICAgICB0aGlzLl9yZWZyZXNoKCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWZyZXNoVGltZW91dCkKLSAgICAgICAg
ICAgICAgICB0aGlzLl9yZWZyZXNoVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fcmVmcmVzaC5i
aW5kKHRoaXMpLCAzMDApOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmVmcmVzaFRpbWVvdXQpIHsKLSAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWZyZXNoVGltZW91dCk7Ci0gICAgICAgICAgICBk
ZWxldGUgdGhpcy5fcmVmcmVzaFRpbWVvdXQ7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl90
aW1lbGluZVBhZGRpbmdMZWZ0ID0gdGhpcy5fZXhwYW5kT2Zmc2V0OwotICAgICAgICB0aGlzLl9j
YWxjdWxhdG9yLnNldFdpbmRvdyh0aGlzLl9vdmVydmlld1BhbmUud2luZG93U3RhcnRUaW1lKCks
IHRoaXMuX292ZXJ2aWV3UGFuZS53aW5kb3dFbmRUaW1lKCkpOwotICAgICAgICB0aGlzLl9jYWxj
dWxhdG9yLnNldERpc3BsYXlXaW5kb3codGhpcy5fdGltZWxpbmVQYWRkaW5nTGVmdCwgdGhpcy5f
Z3JhcGhSb3dzRWxlbWVudFdpZHRoKTsKLQotICAgICAgICB2YXIgcmVjb3Jkc0luV2luZG93Q291
bnQgPSB0aGlzLl9yZWZyZXNoUmVjb3JkcygpOwotICAgICAgICB0aGlzLl91cGRhdGVSZWNvcmRz
Q291bnRlcihyZWNvcmRzSW5XaW5kb3dDb3VudCk7Ci0gICAgICAgIGlmICghdGhpcy5fYm91bmRh
cmllc0FyZVZhbGlkKSB7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVFdmVudERpdmlkZXJzKCk7
Ci0gICAgICAgICAgICB2YXIgZnJhbWVzID0gdGhpcy5fZnJhbWVDb250cm9sbGVyICYmIHRoaXMu
X3ByZXNlbnRhdGlvbk1vZGVsLmZpbHRlcmVkRnJhbWVzKHRoaXMuX292ZXJ2aWV3UGFuZS53aW5k
b3dTdGFydFRpbWUoKSwgdGhpcy5fb3ZlcnZpZXdQYW5lLndpbmRvd0VuZFRpbWUoKSk7Ci0gICAg
ICAgICAgICBpZiAoZnJhbWVzKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRnJhbWVT
dGF0aXN0aWNzKGZyYW1lcyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgbWF4RnJhbWVzRm9yRnJh
bWVCYXJzID0gMzA7Ci0gICAgICAgICAgICAgICAgaWYgIChmcmFtZXMubGVuZ3RoICYmIGZyYW1l
cy5sZW5ndGggPCBtYXhGcmFtZXNGb3JGcmFtZUJhcnMpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fdGltZWxpbmVHcmlkLnJlbW92ZURpdmlkZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZUZyYW1lQmFycyhmcmFtZXMpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZUdyaWQudXBkYXRlRGl2aWRlcnModGhp
cy5fY2FsY3VsYXRvcik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0aGlz
Ll90aW1lbGluZUdyaWQudXBkYXRlRGl2aWRlcnModGhpcy5fY2FsY3VsYXRvcik7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5fbWFpblRocmVhZE1vbml0b3JpbmdFbmFibGVkKQotICAgICAgICAgICAg
ICAgIHRoaXMuX3JlZnJlc2hNYWluVGhyZWFkQmFycygpOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICh0aGlzLl9tZW1vcnlTdGF0aXN0aWNzLnZpc2libGUoKSkKLSAgICAgICAgICAgIHRoaXMuX21l
bW9yeVN0YXRpc3RpY3MucmVmcmVzaCgpOwotICAgICAgICB0aGlzLl9ib3VuZGFyaWVzQXJlVmFs
aWQgPSB0cnVlOwotICAgIH0sCi0KLSAgICByZXZlYWxSZWNvcmRBdDogZnVuY3Rpb24odGltZSkK
LSAgICB7Ci0gICAgICAgIHZhciByZWNvcmRUb1JldmVhbDsKLSAgICAgICAgZnVuY3Rpb24gZmlu
ZFJlY29yZFRvUmV2ZWFsKHJlY29yZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlY29y
ZC5jb250YWluc1RpbWUodGltZSkpIHsKLSAgICAgICAgICAgICAgICByZWNvcmRUb1JldmVhbCA9
IHJlY29yZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlY29yZCBjb250YWluaW5nIHRoZSB0aW1lIHRo
YW4gdXNlIHRoZSBsYXRlc3Qgb25lIGJlZm9yZSB0aGF0IHRpbWUuCi0gICAgICAgICAgICBpZiAo
IXJlY29yZFRvUmV2ZWFsIHx8IHJlY29yZC5lbmRUaW1lIDwgdGltZSAmJiByZWNvcmRUb1JldmVh
bC5lbmRUaW1lIDwgcmVjb3JkLmVuZFRpbWUpCi0gICAgICAgICAgICAgICAgcmVjb3JkVG9SZXZl
YWwgPSByZWNvcmQ7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuZm9yQWxsUmVjb3Jkcyh0
aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5yb290UmVjb3JkKCkuY2hpbGRyZW4sIG51bGwsIGZpbmRS
ZWNvcmRUb1JldmVhbCk7Ci0KLSAgICAgICAgLy8gVGhlIHJlY29yZCBlbmRzIGJlZm9yZSB0aGUg
d2luZG93IGxlZnQgYm91bmQgc28gc2Nyb2xsIHRvIHRoZSB0b3AuCi0gICAgICAgIGlmICghcmVj
b3JkVG9SZXZlYWwpIHsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuc2Nyb2xs
VG9wID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X3JldmVhbFJlY29yZChyZWNvcmRUb1JldmVhbCk7Ci0gICAgfSwKLQotICAgIF9yZXZlYWxSZWNv
cmQ6IGZ1bmN0aW9uKHJlY29yZFRvUmV2ZWFsKQotICAgIHsKLSAgICAgICAgLy8gRXhwYW5kIGFs
bCBhbmNlc3RvcnMuCi0gICAgICAgIHRoaXMuX3JlY29yZFRvSGlnaGxpZ2h0ID0gcmVjb3JkVG9S
ZXZlYWw7Ci0gICAgICAgIHZhciB0cmVlVXBkYXRlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHZh
ciBwYXJlbnQgPSByZWNvcmRUb1JldmVhbC5wYXJlbnQ7IHBhcmVudCAhPT0gdGhpcy5fcm9vdFJl
Y29yZCgpOyBwYXJlbnQgPSBwYXJlbnQucGFyZW50KSB7Ci0gICAgICAgICAgICB0cmVlVXBkYXRl
ZCA9IHRyZWVVcGRhdGVkIHx8IHBhcmVudC5jb2xsYXBzZWQ7Ci0gICAgICAgICAgICBwYXJlbnQu
Y29sbGFwc2VkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRyZWVVcGRhdGVkKQot
ICAgICAgICAgICAgdGhpcy5faW52YWxpZGF0ZUFuZFNjaGVkdWxlUmVmcmVzaCh0cnVlLCB0cnVl
KTsKLQotICAgICAgICB2YXIgcmVjb3Jkc0luV2luZG93ID0gdGhpcy5fcHJlc2VudGF0aW9uTW9k
ZWwuZmlsdGVyZWRSZWNvcmRzKCk7Ci0gICAgICAgIHZhciBpbmRleCA9IHJlY29yZHNJbldpbmRv
dy5pbmRleE9mKHJlY29yZFRvUmV2ZWFsKTsKLSAgICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVu
dC5zY3JvbGxUb3AgPSBpbmRleCAqIFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLnJvd0hlaWdo
dDsKLSAgICB9LAotCi0gICAgX3JlZnJlc2hSZWNvcmRzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgcmVjb3Jkc0luV2luZG93ID0gdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuZmlsdGVy
ZWRSZWNvcmRzKCk7Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB2aXNpYmxlIGFyZWEuCi0g
ICAgICAgIHZhciB2aXNpYmxlVG9wID0gdGhpcy5fc2Nyb2xsVG9wOwotICAgICAgICB2YXIgdmlz
aWJsZUJvdHRvbSA9IHZpc2libGVUb3AgKyB0aGlzLl9jb250YWluZXJFbGVtZW50SGVpZ2h0Owot
Ci0gICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLnJv
d0hlaWdodDsKLQotICAgICAgICAvLyBDb252ZXJ0IHZpc2libGUgYXJlYSB0byB2aXNpYmxlIGlu
ZGV4ZXMuIEFsd2F5cyBpbmNsdWRlIHRvcC1sZXZlbCByZWNvcmQgZm9yIGEgdmlzaWJsZSBuZXN0
ZWQgcmVjb3JkLgotICAgICAgICB2YXIgc3RhcnRJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWlu
KE1hdGguZmxvb3IodmlzaWJsZVRvcCAvIHJvd0hlaWdodCkgLSB0aGlzLl9oZWFkZXJMaW5lQ291
bnQsIHJlY29yZHNJbldpbmRvdy5sZW5ndGggLSAxKSk7Ci0gICAgICAgIHZhciBlbmRJbmRleCA9
IE1hdGgubWluKHJlY29yZHNJbldpbmRvdy5sZW5ndGgsIE1hdGguY2VpbCh2aXNpYmxlQm90dG9t
IC8gcm93SGVpZ2h0KSk7Ci0gICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBNYXRoLm1heCgw
LCBNYXRoLmZsb29yKHZpc2libGVCb3R0b20gLyByb3dIZWlnaHQpIC0gdGhpcy5faGVhZGVyTGlu
ZUNvdW50KTsKLSAgICAgICAgaWYgKHRoaXMuX2F1dG9tYXRpY2FsbHlTaXplV2luZG93ICYmIHJl
Y29yZHNJbldpbmRvdy5sZW5ndGggPiBsYXN0VmlzaWJsZUxpbmUpIHsKLSAgICAgICAgICAgIHRo
aXMuX2F1dG9tYXRpY2FsbHlTaXplV2luZG93ID0gZmFsc2U7Ci0gICAgICAgICAgICAvLyBJZiB3
ZSdyZSBhdCB0aGUgdG9wLCBhbHdheXMgdXNlIHJlYWwgdGltZWxpbmUgc3RhcnQgYXMgYSBsZWZ0
IHdpbmRvdyBib3VuZCBzbyB0aGF0IGV4cGFuc2lvbiBhcnJvdyBwYWRkaW5nIGxvZ2ljIHdvcmtz
LgotICAgICAgICAgICAgdmFyIHdpbmRvd1N0YXJ0VGltZSA9IHN0YXJ0SW5kZXggPyByZWNvcmRz
SW5XaW5kb3dbc3RhcnRJbmRleF0uc3RhcnRUaW1lIDogdGhpcy5fbW9kZWwubWluaW11bVJlY29y
ZFRpbWUoKTsKLSAgICAgICAgICAgIHRoaXMuX292ZXJ2aWV3UGFuZS5zZXRXaW5kb3dUaW1lcyh3
aW5kb3dTdGFydFRpbWUsIHJlY29yZHNJbldpbmRvd1tNYXRoLm1heCgwLCBsYXN0VmlzaWJsZUxp
bmUgLSAxKV0uZW5kVGltZSk7Ci0gICAgICAgICAgICByZWNvcmRzSW5XaW5kb3cgPSB0aGlzLl9w
cmVzZW50YXRpb25Nb2RlbC5maWx0ZXJlZFJlY29yZHMoKTsKLSAgICAgICAgICAgIGVuZEluZGV4
ID0gTWF0aC5taW4ocmVjb3Jkc0luV2luZG93Lmxlbmd0aCwgbGFzdFZpc2libGVMaW5lKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFJlc2l6ZSBnYXBzIGZpcnN0LgotICAgICAgICBjb25zdCB0
b3AgPSAoc3RhcnRJbmRleCAqIHJvd0hlaWdodCkgKyAicHgiOwotICAgICAgICB0aGlzLl90b3BH
YXBFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRvcDsKLSAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVu
dC5zdHlsZS50b3AgPSB0b3A7Ci0gICAgICAgIHRoaXMuX2JvdHRvbUdhcEVsZW1lbnQuc3R5bGUu
aGVpZ2h0ID0gKHJlY29yZHNJbldpbmRvdy5sZW5ndGggLSBlbmRJbmRleCkgKiByb3dIZWlnaHQg
KyAicHgiOwotCi0gICAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIHJvd3MuCi0gICAgICAgIHZhciBs
aXN0Um93RWxlbWVudCA9IHRoaXMuX3NpZGViYXJMaXN0RWxlbWVudC5maXJzdENoaWxkOwotICAg
ICAgICB2YXIgd2lkdGggPSB0aGlzLl9ncmFwaFJvd3NFbGVtZW50V2lkdGg7Ci0gICAgICAgIHRo
aXMuX2l0ZW1zR3JhcGhzRWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9ncmFwaFJvd3NFbGVtZW50
KTsKLSAgICAgICAgdmFyIGdyYXBoUm93RWxlbWVudCA9IHRoaXMuX2dyYXBoUm93c0VsZW1lbnQu
Zmlyc3RDaGlsZDsKLSAgICAgICAgdmFyIHNjaGVkdWxlUmVmcmVzaENhbGxiYWNrID0gdGhpcy5f
aW52YWxpZGF0ZUFuZFNjaGVkdWxlUmVmcmVzaC5iaW5kKHRoaXMsIHRydWUsIHRydWUpOwotICAg
ICAgICB0aGlzLl9pdGVtc0dyYXBoc0VsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZXhwYW5kRWxl
bWVudHMpOwotICAgICAgICB0aGlzLl9leHBhbmRFbGVtZW50cy5yZW1vdmVDaGlsZHJlbigpOwot
Ci0gICAgICAgIHRoaXMuX2NsZWFyUmVjb3JkSGlnaGxpZ2h0KCk7Ci0gICAgICAgIHZhciBoaWdo
bGlnaHRlZFJlY29yZCA9IHRoaXMuX3JlY29yZFRvSGlnaGxpZ2h0OwotICAgICAgICBkZWxldGUg
dGhpcy5fcmVjb3JkVG9IaWdobGlnaHQ7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBl
bmRJbmRleDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc0luV2luZG93
W2ldOwotICAgICAgICAgICAgdmFyIGlzRXZlbiA9ICEoaSAlIDIpOwotCi0gICAgICAgICAgICBp
ZiAoaSA8IHN0YXJ0SW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGFzdENoaWxkSW5kZXgg
PSBpICsgcmVjb3JkLnZpc2libGVDaGlsZHJlbkNvdW50OwotICAgICAgICAgICAgICAgIGlmIChs
YXN0Q2hpbGRJbmRleCA+PSBzdGFydEluZGV4ICYmIGxhc3RDaGlsZEluZGV4IDwgZW5kSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGFuZEVsZW1lbnQgPSBuZXcgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lRXhwYW5kYWJsZUVsZW1lbnQodGhpcy5fZXhwYW5kRWxlbWVudHMpOwotICAg
ICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5fY2FsY3VsYXRvci5jb21wdXRl
QmFyR3JhcGhXaW5kb3dQb3NpdGlvbihyZWNvcmQpOwotICAgICAgICAgICAgICAgICAgICBleHBh
bmRFbGVtZW50Ll91cGRhdGUocmVjb3JkLCBpLCBwb3NpdGlvbnMubGVmdCAtIHRoaXMuX2V4cGFu
ZE9mZnNldCwgcG9zaXRpb25zLndpZHRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghbGlzdFJvd0VsZW1lbnQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbGlzdFJvd0VsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UmVjb3JkTGlzdFJvdygpLmVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZGVi
YXJMaXN0RWxlbWVudC5hcHBlbmRDaGlsZChsaXN0Um93RWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmICghZ3JhcGhSb3dFbGVtZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyYXBoUm93RWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVSZWNv
cmRHcmFwaFJvdyh0aGlzLl9pdGVtc0dyYXBoc0VsZW1lbnQsIHNjaGVkdWxlUmVmcmVzaENhbGxi
YWNrKS5lbGVtZW50OwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncmFwaFJvd3NFbGVtZW50
LmFwcGVuZENoaWxkKGdyYXBoUm93RWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKGhpZ2hsaWdodGVkUmVjb3JkID09PSByZWNvcmQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRMaXN0Um93RWxlbWVudCA9IGxpc3RSb3dFbGVt
ZW50OwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRlZEdyYXBoUm93RWxlbWVu
dCA9IGdyYXBoUm93RWxlbWVudDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBsaXN0Um93RWxlbWVudC5yb3cudXBkYXRlKHJlY29yZCwgaXNFdmVuLCB2aXNpYmxlVG9wKTsK
LSAgICAgICAgICAgICAgICBncmFwaFJvd0VsZW1lbnQucm93LnVwZGF0ZShyZWNvcmQsIGlzRXZl
biwgdGhpcy5fY2FsY3VsYXRvciwgdGhpcy5fZXhwYW5kT2Zmc2V0LCBpKTsKLQotICAgICAgICAg
ICAgICAgIGxpc3RSb3dFbGVtZW50ID0gbGlzdFJvd0VsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAg
ICAgICAgICAgICAgZ3JhcGhSb3dFbGVtZW50ID0gZ3JhcGhSb3dFbGVtZW50Lm5leHRTaWJsaW5n
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGV4dHJhIHJv
d3MuCi0gICAgICAgIHdoaWxlIChsaXN0Um93RWxlbWVudCkgewotICAgICAgICAgICAgdmFyIG5l
eHRFbGVtZW50ID0gbGlzdFJvd0VsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICBsaXN0
Um93RWxlbWVudC5yb3cuZGlzcG9zZSgpOwotICAgICAgICAgICAgbGlzdFJvd0VsZW1lbnQgPSBu
ZXh0RWxlbWVudDsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoZ3JhcGhSb3dFbGVtZW50KSB7
Ci0gICAgICAgICAgICB2YXIgbmV4dEVsZW1lbnQgPSBncmFwaFJvd0VsZW1lbnQubmV4dFNpYmxp
bmc7Ci0gICAgICAgICAgICBncmFwaFJvd0VsZW1lbnQucm93LmRpc3Bvc2UoKTsKLSAgICAgICAg
ICAgIGdyYXBoUm93RWxlbWVudCA9IG5leHRFbGVtZW50OwotICAgICAgICB9Ci0KLSAgICAgICAg
dGhpcy5faXRlbXNHcmFwaHNFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9ncmFwaFJvd3NFbGVt
ZW50LCB0aGlzLl9ib3R0b21HYXBFbGVtZW50KTsKLSAgICAgICAgdGhpcy5faXRlbXNHcmFwaHNF
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2V4cGFuZEVsZW1lbnRzKTsKLSAgICAgICAgdGhpcy5f
YWRqdXN0U2Nyb2xsUG9zaXRpb24oKHJlY29yZHNJbldpbmRvdy5sZW5ndGggKyB0aGlzLl9oZWFk
ZXJMaW5lQ291bnQpICogcm93SGVpZ2h0KTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoSGln
aGxpZ2h0KGZhbHNlKTsKLQotICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0ZWRMaXN0Um93RWxl
bWVudCkgewotICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRMaXN0Um93RWxlbWVudC5hZGRT
dHlsZUNsYXNzKCJoaWdobGlnaHRlZC10aW1lbGluZS1yZWNvcmQiKTsKLSAgICAgICAgICAgIHRo
aXMuX2hpZ2hsaWdodGVkR3JhcGhSb3dFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodGVk
LXRpbWVsaW5lLXJlY29yZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlY29yZHNJ
bldpbmRvdy5sZW5ndGg7Ci0gICAgfSwKLQotICAgIF9jbGVhclJlY29yZEhpZ2hsaWdodDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9oaWdobGlnaHRlZExpc3RSb3dFbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpc3RS
b3dFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZ2hsaWdodGVkLXRpbWVsaW5lLXJlY29yZCIp
OwotICAgICAgICBkZWxldGUgdGhpcy5faGlnaGxpZ2h0ZWRMaXN0Um93RWxlbWVudDsKLSAgICAg
ICAgdGhpcy5faGlnaGxpZ2h0ZWRHcmFwaFJvd0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiaGln
aGxpZ2h0ZWQtdGltZWxpbmUtcmVjb3JkIik7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGln
aHRlZEdyYXBoUm93RWxlbWVudDsKLSAgICB9LAotCi0gICAgX3JlZnJlc2hNYWluVGhyZWFkQmFy
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgY29uc3QgYmFyT2Zmc2V0ID0gMzsKLSAgICAg
ICAgY29uc3QgbWluR2FwID0gMzsKLQotICAgICAgICB2YXIgbWluV2lkdGggPSBXZWJJbnNwZWN0
b3IuVGltZWxpbmVDYWxjdWxhdG9yLl9taW5XaWR0aDsKLSAgICAgICAgdmFyIHdpZHRoQWRqdXN0
bWVudCA9IG1pbldpZHRoIC8gMjsKLQotICAgICAgICB2YXIgd2lkdGggPSB0aGlzLl9ncmFwaFJv
d3NFbGVtZW50V2lkdGg7Ci0gICAgICAgIHZhciBib3VuZGFyeVNwYW4gPSB0aGlzLl9vdmVydmll
d1BhbmUud2luZG93RW5kVGltZSgpIC0gdGhpcy5fb3ZlcnZpZXdQYW5lLndpbmRvd1N0YXJ0VGlt
ZSgpOwotICAgICAgICB2YXIgc2NhbGUgPSBib3VuZGFyeVNwYW4gLyAod2lkdGggLSBtaW5XaWR0
aCAtIHRoaXMuX3RpbWVsaW5lUGFkZGluZ0xlZnQpOwotICAgICAgICB2YXIgc3RhcnRUaW1lID0g
dGhpcy5fb3ZlcnZpZXdQYW5lLndpbmRvd1N0YXJ0VGltZSgpIC0gdGhpcy5fdGltZWxpbmVQYWRk
aW5nTGVmdCAqIHNjYWxlOwotICAgICAgICB2YXIgZW5kVGltZSA9IHN0YXJ0VGltZSArIHdpZHRo
ICogc2NhbGU7Ci0KLSAgICAgICAgdmFyIHRhc2tzID0gdGhpcy5fbWFpblRocmVhZE1vbml0b3Jp
bmdFbmFibGVkID8gdGhpcy5fbWFpblRocmVhZFRhc2tzIDogW107Ci0KLSAgICAgICAgZnVuY3Rp
b24gY29tcGFyZUVuZFRpbWUodmFsdWUsIHRhc2spCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSA8IHRhc2suZW5kVGltZSA/IC0xIDogMTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZhciB0YXNrSW5kZXggPSBpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVu
Y3Rpb24oc3RhcnRUaW1lLCB0YXNrcywgY29tcGFyZUVuZFRpbWUpOwotCi0gICAgICAgIHZhciBj
b250YWluZXIgPSB0aGlzLl9jcHVCYXJzRWxlbWVudDsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBj
b250YWluZXIuZmlyc3RDaGlsZDsKLSAgICAgICAgdmFyIGxhc3RFbGVtZW50OwotICAgICAgICB2
YXIgbGFzdExlZnQ7Ci0gICAgICAgIHZhciBsYXN0UmlnaHQ7Ci0KLSAgICAgICAgZm9yICg7IHRh
c2tJbmRleCA8IHRhc2tzLmxlbmd0aDsgKyt0YXNrSW5kZXgpIHsKLSAgICAgICAgICAgIHZhciB0
YXNrID0gdGFza3NbdGFza0luZGV4XTsKLSAgICAgICAgICAgIGlmICh0YXNrLnN0YXJ0VGltZSA+
IGVuZFRpbWUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHZhciBsZWZ0
ID0gTWF0aC5tYXgoMCwgdGhpcy5fY2FsY3VsYXRvci5jb21wdXRlUG9zaXRpb24odGFzay5zdGFy
dFRpbWUpICsgYmFyT2Zmc2V0IC0gd2lkdGhBZGp1c3RtZW50KTsKLSAgICAgICAgICAgIHZhciBy
aWdodCA9IE1hdGgubWluKHdpZHRoLCB0aGlzLl9jYWxjdWxhdG9yLmNvbXB1dGVQb3NpdGlvbih0
YXNrLmVuZFRpbWUpICsgYmFyT2Zmc2V0ICsgd2lkdGhBZGp1c3RtZW50KTsKLQotICAgICAgICAg
ICAgaWYgKGxhc3RFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGdhcCA9IE1hdGguZmxv
b3IobGVmdCkgLSBNYXRoLmNlaWwobGFzdFJpZ2h0KTsKLSAgICAgICAgICAgICAgICBpZiAoZ2Fw
IDwgbWluR2FwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RSaWdodCA9IHJpZ2h0OwotICAg
ICAgICAgICAgICAgICAgICBsYXN0RWxlbWVudC5fdGFza3NJbmZvLmxhc3RUYXNrSW5kZXggPSB0
YXNrSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBsYXN0RWxlbWVudC5zdHlsZS53aWR0aCA9IChsYXN0UmlnaHQg
LSBsYXN0TGVmdCkgKyAicHgiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWVs
ZW1lbnQpCi0gICAgICAgICAgICAgICAgZWxlbWVudCA9IGNvbnRhaW5lci5jcmVhdGVDaGlsZCgi
ZGl2IiwgInRpbWVsaW5lLWdyYXBoLWJhciIpOwotCi0gICAgICAgICAgICBlbGVtZW50LnN0eWxl
LmxlZnQgPSBsZWZ0ICsgInB4IjsKLSAgICAgICAgICAgIGVsZW1lbnQuX3Rhc2tzSW5mbyA9IHt0
YXNrczogdGFza3MsIGZpcnN0VGFza0luZGV4OiB0YXNrSW5kZXgsIGxhc3RUYXNrSW5kZXg6IHRh
c2tJbmRleH07Ci0gICAgICAgICAgICBsYXN0TGVmdCA9IGxlZnQ7Ci0gICAgICAgICAgICBsYXN0
UmlnaHQgPSByaWdodDsKLQotICAgICAgICAgICAgbGFzdEVsZW1lbnQgPSBlbGVtZW50OwotICAg
ICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobGFzdEVsZW1lbnQpCi0gICAgICAgICAgICBsYXN0RWxlbWVudC5zdHlsZS53aWR0
aCA9IChsYXN0UmlnaHQgLSBsYXN0TGVmdCkgKyAicHgiOwotCi0gICAgICAgIHdoaWxlIChlbGVt
ZW50KSB7Ci0gICAgICAgICAgICB2YXIgbmV4dEVsZW1lbnQgPSBlbGVtZW50Lm5leHRTaWJsaW5n
OwotICAgICAgICAgICAgZWxlbWVudC5fdGFza3NJbmZvID0gbnVsbDsKLSAgICAgICAgICAgIGNv
bnRhaW5lci5yZW1vdmVDaGlsZChlbGVtZW50KTsKLSAgICAgICAgICAgIGVsZW1lbnQgPSBuZXh0
RWxlbWVudDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfYWRqdXN0SGVhZGVySGVpZ2h0OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBjb25zdCBoZWFkZXJCb3JkZXJXaWR0aCA9IDE7Ci0g
ICAgICAgIGNvbnN0IGhlYWRlck1hcmdpbiA9IDI7Ci0KLSAgICAgICAgdmFyIGhlYWRlckhlaWdo
dCA9IHRoaXMuX2hlYWRlckxpbmVDb3VudCAqIFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLnJv
d0hlaWdodDsKLSAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5maXJzdENoaWxkLnN0eWxlLmhl
aWdodCA9IGhlYWRlckhlaWdodCArICJweCI7Ci0gICAgICAgIHRoaXMuX3RpbWVsaW5lR3JpZC5k
aXZpZGVyc0xhYmVsQmFyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWFkZXJIZWlnaHQgKyBoZWFk
ZXJNYXJnaW4gKyAicHgiOwotICAgICAgICB0aGlzLl9pdGVtc0dyYXBoc0VsZW1lbnQuc3R5bGUu
dG9wID0gaGVhZGVySGVpZ2h0ICsgaGVhZGVyQm9yZGVyV2lkdGggKyAicHgiOwotICAgIH0sCi0K
LSAgICBfYWRqdXN0U2Nyb2xsUG9zaXRpb246IGZ1bmN0aW9uKHRvdGFsSGVpZ2h0KQotICAgIHsK
LSAgICAgICAgLy8gUHJldmVudCB0aGUgY29udGFpbmVyIGZyb20gYmVpbmcgc2Nyb2xsZWQgb2Zm
IHRoZSBlbmQuCi0gICAgICAgIGlmICgodGhpcy5fc2Nyb2xsVG9wICsgdGhpcy5fY29udGFpbmVy
RWxlbWVudEhlaWdodCkgPiB0b3RhbEhlaWdodCArIDEpCi0gICAgICAgICAgICB0aGlzLl9jb250
YWluZXJFbGVtZW50LnNjcm9sbFRvcCA9ICh0b3RhbEhlaWdodCAtIHRoaXMuX2NvbnRhaW5lckVs
ZW1lbnQub2Zmc2V0SGVpZ2h0KTsKLSAgICB9LAotCi0gICAgX2dldFBvcG92ZXJBbmNob3I6IGZ1
bmN0aW9uKGVsZW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gZWxlbWVudC5lbmNsb3NpbmdO
b2RlT3JTZWxmV2l0aENsYXNzKCJ0aW1lbGluZS1ncmFwaC1iYXIiKSB8fAotICAgICAgICAgICAg
ZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ0aW1lbGluZS10cmVlLWl0ZW0i
KSB8fAotICAgICAgICAgICAgZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ0
aW1lbGluZS1mcmFtZS1zdHJpcCIpOwotICAgIH0sCi0KLSAgICBfbW91c2VPdXQ6IGZ1bmN0aW9u
KGUpCi0gICAgewotICAgICAgICB0aGlzLl9oaWRlUXVhZEhpZ2hsaWdodCgpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50fSBlCi0gICAgICovCi0gICAgX21vdXNlTW92
ZTogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBhbmNob3IgPSB0aGlzLl9nZXRQb3Bv
dmVyQW5jaG9yKGUudGFyZ2V0KTsKLQotICAgICAgICBpZiAoYW5jaG9yICYmIGFuY2hvci5yb3cg
JiYgYW5jaG9yLnJvdy5fcmVjb3JkLmhpZ2hsaWdodFF1YWQpCi0gICAgICAgICAgICB0aGlzLl9o
aWdobGlnaHRRdWFkKGFuY2hvci5yb3cuX3JlY29yZC5oaWdobGlnaHRRdWFkKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGhpcy5faGlkZVF1YWRIaWdobGlnaHQoKTsKLQotICAgICAgICBp
ZiAoYW5jaG9yICYmIGFuY2hvci5fdGFza3NJbmZvKSB7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0
ID0gYW5jaG9yLm9mZnNldExlZnQ7Ci0gICAgICAgICAgICB0aGlzLl90aW1lbGluZUdyaWQuc2hv
d0N1cnRhaW5zKG9mZnNldCA+PSAwID8gb2Zmc2V0IDogMCwgYW5jaG9yLm9mZnNldFdpZHRoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl90aW1lbGluZUdyaWQuaGlkZUN1cnRh
aW5zKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59
IHF1YWQKLSAgICAgKi8KLSAgICBfaGlnaGxpZ2h0UXVhZDogZnVuY3Rpb24ocXVhZCkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRlZFF1YWQgPT09IHF1YWQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkUXVhZCA9IHF1YWQ7Ci0gICAgICAg
IERPTUFnZW50LmhpZ2hsaWdodFF1YWQocXVhZCwgV2ViSW5zcGVjdG9yLkNvbG9yLlBhZ2VIaWdo
bGlnaHQuQ29udGVudC50b1Byb3RvY29sUkdCQSgpLCBXZWJJbnNwZWN0b3IuQ29sb3IuUGFnZUhp
Z2hsaWdodC5Db250ZW50T3V0bGluZS50b1Byb3RvY29sUkdCQSgpKTsKLSAgICB9LAotCi0gICAg
X2hpZGVRdWFkSGlnaGxpZ2h0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
aGlnaGxpZ2h0ZWRRdWFkKSB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5faGlnaGxpZ2h0ZWRR
dWFkOwotICAgICAgICAgICAgRE9NQWdlbnQuaGlkZUhpZ2hsaWdodCgpOwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gYW5jaG9yCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuUG9wb3Zlcn0gcG9wb3ZlcgotICAgICAqLwotICAgIF9zaG93
UG9wb3ZlcjogZnVuY3Rpb24oYW5jaG9yLCBwb3BvdmVyKQotICAgIHsKLSAgICAgICAgaWYgKGFu
Y2hvci5oYXNTdHlsZUNsYXNzKCJ0aW1lbGluZS1mcmFtZS1zdHJpcCIpKSB7Ci0gICAgICAgICAg
ICB2YXIgZnJhbWUgPSBhbmNob3IuX2ZyYW1lOwotICAgICAgICAgICAgcG9wb3Zlci5zaG93KFdl
Ykluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmdlbmVyYXRlUG9wdXBDb250ZW50
Rm9yRnJhbWUoZnJhbWUpLCBhbmNob3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKGFuY2hvci5yb3cgJiYgYW5jaG9yLnJvdy5fcmVjb3JkKQotICAgICAgICAgICAgICAgIGFu
Y2hvci5yb3cuX3JlY29yZC5nZW5lcmF0ZVBvcHVwQ29udGVudChzaG93Q2FsbGJhY2spOwotICAg
ICAgICAgICAgZWxzZSBpZiAoYW5jaG9yLl90YXNrc0luZm8pCi0gICAgICAgICAgICAgICAgcG9w
b3Zlci5zaG93KHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmdlbmVyYXRlTWFpblRocmVhZEJhclBv
cHVwQ29udGVudChhbmNob3IuX3Rhc2tzSW5mbyksIGFuY2hvciwgbnVsbCwgbnVsbCwgV2ViSW5z
cGVjdG9yLlBvcG92ZXIuT3JpZW50YXRpb24uQm90dG9tKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIHNob3dDYWxsYmFjayhwb3B1cENvbnRlbnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHBvcG92ZXIuc2hvdyhwb3B1cENvbnRlbnQsIGFuY2hvcik7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX2Nsb3NlUmVjb3JkRGV0YWlsczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwotICAgIH0sCi0KLSAgICBfaW5qZWN0
Q2F0ZWdvcnlTdHlsZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzdHlsZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Ci0gICAgICAgIHZhciBjYXRlZ29yaWVzID0g
V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY2F0ZWdvcmllcygpOwotCi0g
ICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gT2JqZWN0LnZhbHVlcyhjYXRlZ29yaWVzKS5tYXAo
V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuY3JlYXRlU3R5bGVSdWxlRm9y
Q2F0ZWdvcnkpLmpvaW4oIlxuIik7Ci0gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo
c3R5bGUpOwotICAgIH0sCi0KLSAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl9qdW1wVG9BZGphY2VudFJlY29yZCgxKTsKLSAgICB9LAot
Ci0gICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2p1bXBUb0FkamFjZW50UmVjb3JkKC0xKTsKLSAgICB9LAotCi0gICAgX2p1bXBU
b0FkamFjZW50UmVjb3JkOiBmdW5jdGlvbihvZmZzZXQpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuX3NlYXJjaFJlc3VsdHMgfHwgIXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoIHx8ICF0aGlz
Ll9zZWxlY3RlZFNlYXJjaFJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFy
IGluZGV4ID0gdGhpcy5fc2VhcmNoUmVzdWx0cy5pbmRleE9mKHRoaXMuX3NlbGVjdGVkU2VhcmNo
UmVzdWx0KTsKLSAgICAgICAgaW5kZXggPSAoaW5kZXggKyBvZmZzZXQgKyB0aGlzLl9zZWFyY2hS
ZXN1bHRzLmxlbmd0aCkgJSB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aDsKLSAgICAgICAgdGhp
cy5fc2VsZWN0U2VhcmNoUmVzdWx0KGluZGV4KTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0U2Vs
ZWN0ZWRTZWFyY2hSZXN1bHQodHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9zZWxlY3RTZWFyY2hSZXN1
bHQ6IGZ1bmN0aW9uKGluZGV4KQotICAgIHsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRTZWFyY2hS
ZXN1bHQgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW2luZGV4XTsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LnNlYXJjaENvbnRyb2xsZXIudXBkYXRlQ3VycmVudE1hdGNoSW5kZXgoaW5kZXgsIHRoaXMpOwot
ICAgIH0sCi0KLSAgICBfaGlnaGxpZ2h0U2VsZWN0ZWRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKHJl
dmVhbFJlY29yZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFySGlnaGxpZ2h0KCk7Ci0gICAg
ICAgIGlmICh0aGlzLl9zZWFyY2hGaWx0ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdmFyIHJlY29yZCA9IHRoaXMuX3NlbGVjdGVkU2VhcmNoUmVzdWx0OwotICAgICAgICBpZiAo
IXJlY29yZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKHZhciBlbGVtZW50
ID0gdGhpcy5fc2lkZWJhckxpc3RFbGVtZW50LmZpcnN0Q2hpbGQ7IGVsZW1lbnQ7IGVsZW1lbnQg
PSBlbGVtZW50Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC5yb3cuX3Jl
Y29yZCA9PT0gcmVjb3JkKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5yb3cuaGlnaGxpZ2h0
KHRoaXMuX3NlYXJjaFJlZ0V4cCwgdGhpcy5faGlnaGxpZ2h0RG9tQ2hhbmdlcyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJldmVhbFJlY29yZCkKLSAgICAgICAgICAgIHRoaXMuX3JldmVhbFJlY29yZChyZWNvcmQpOwot
ICAgIH0sCi0KLSAgICBfY2xlYXJIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9oaWdobGlnaHREb21DaGFuZ2VzKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LnJldmVydERvbUNoYW5nZXModGhpcy5faGlnaGxpZ2h0RG9tQ2hhbmdlcyk7Ci0gICAgICAgIHRo
aXMuX2hpZ2hsaWdodERvbUNoYW5nZXMgPSBbXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtib29sZWFufSByZXZlYWxSZWNvcmQKLSAgICAgKi8KLSAgICBfdXBkYXRlU2VhcmNo
SGlnaGxpZ2h0OiBmdW5jdGlvbihyZXZlYWxSZWNvcmQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fc2VhcmNoRmlsdGVyIHx8ICF0aGlzLl9zZWFyY2hSZWdFeHApIHsKLSAgICAgICAgICAgIHRo
aXMuX2NsZWFySGlnaGxpZ2h0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMpCi0gICAgICAgICAgICB0aGlzLl91cGRh
dGVTZWFyY2hSZXN1bHRzKCk7Ci0KLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0U2VsZWN0ZWRTZWFy
Y2hSZXN1bHQocmV2ZWFsUmVjb3JkKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVNlYXJjaFJlc3Vs
dHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWFyY2hSZWdFeHAgPSB0aGlzLl9z
ZWFyY2hSZWdFeHA7Ci0gICAgICAgIGlmICghc2VhcmNoUmVnRXhwKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBtYXRjaGVzID0gW107Ci0gICAgICAgIHZhciBwcmVzZW50YXRp
b25Nb2RlbCA9IHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsOwotCi0gICAgICAgIGZ1bmN0aW9uIHBy
b2Nlc3NSZWNvcmQocmVjb3JkKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJlc2VudGF0
aW9uTW9kZWwuaXNWaXNpYmxlKHJlY29yZCkgJiYgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUmVjb3Jk
TGlzdFJvdy50ZXN0Q29udGVudE1hdGNoaW5nKHJlY29yZCwgc2VhcmNoUmVnRXhwKSkKLSAgICAg
ICAgICAgICAgICBtYXRjaGVzLnB1c2gocmVjb3JkKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25N
b2RlbC5mb3JBbGxSZWNvcmRzKHByZXNlbnRhdGlvbk1vZGVsLnJvb3RSZWNvcmQoKS5jaGlsZHJl
biwgcHJvY2Vzc1JlY29yZCk7Ci0KLSAgICAgICAgdmFyIG1hdGNoZXNDb3VudCA9IG1hdGNoZXMu
bGVuZ3RoOwotICAgICAgICBpZiAobWF0Y2hlc0NvdW50KSB7Ci0gICAgICAgICAgICB0aGlzLl9z
ZWFyY2hSZXN1bHRzID0gbWF0Y2hlczsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hD
b250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudChtYXRjaGVzQ291bnQsIHRoaXMpOwot
Ci0gICAgICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IG1hdGNoZXMuaW5kZXhPZih0aGlzLl9z
ZWxlY3RlZFNlYXJjaFJlc3VsdCk7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0g
LTEpCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgICAgICAgICB0aGlz
Ll9zZWxlY3RTZWFyY2hSZXN1bHQoc2VsZWN0ZWRJbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRhdGVTZWFyY2hNYXRj
aGVzQ291bnQoMCwgdGhpcyk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fc2VsZWN0ZWRTZWFy
Y2hSZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFySGlnaGxpZ2h0KCk7Ci0gICAgICAgIGRl
bGV0ZSB0aGlzLl9zZWFyY2hSZXN1bHRzOwotICAgICAgICBkZWxldGUgdGhpcy5fc2VsZWN0ZWRT
ZWFyY2hSZXN1bHQ7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zZWFyY2hSZWdFeHA7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgY2FuRmls
dGVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0g
ICAgcGVyZm9ybUZpbHRlcjogZnVuY3Rpb24oc2VhcmNoUXVlcnkpCi0gICAgewotICAgICAgICB0
aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5yZW1vdmVGaWx0ZXIodGhpcy5fc2VhcmNoRmlsdGVyKTsK
LSAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaEZpbHRlcjsKLSAgICAgICAgdGhpcy5zZWFyY2hD
YW5jZWxlZCgpOwotICAgICAgICBpZiAoc2VhcmNoUXVlcnkpIHsKLSAgICAgICAgICAgIHRoaXMu
X3NlYXJjaEZpbHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVTZWFyY2hGaWx0ZXIoY3Jl
YXRlUGxhaW5UZXh0U2VhcmNoUmVnZXgoc2VhcmNoUXVlcnksICJpIikpOwotICAgICAgICAgICAg
dGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRmlsdGVyKHRoaXMuX3NlYXJjaEZpbHRlcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhpcy5faW52YWxpZGF0ZUFuZFNjaGVkdWxlUmVmcmVzaCh0cnVl
LCB0cnVlKTsKLSAgICB9LAotCi0gICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24oc2VhcmNoUXVl
cnkpCi0gICAgewotICAgICAgICB0aGlzLl9zZWFyY2hSZWdFeHAgPSBjcmVhdGVQbGFpblRleHRT
ZWFyY2hSZWdleChzZWFyY2hRdWVyeSwgImkiKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJj
aFJlc3VsdHM7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaEhpZ2hsaWdodCh0cnVlKTsKLSAg
ICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlCi19Ci0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZU1v
ZGVsfSBtb2RlbAotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UaW1lbGluZUdyaWQuQ2Fs
Y3VsYXRvcn0KLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2FsY3VsYXRvciA9IGZ1bmN0aW9u
KG1vZGVsKQotewotICAgIHRoaXMuX21vZGVsID0gbW9kZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5U
aW1lbGluZUNhbGN1bGF0b3IuX21pbldpZHRoID0gNTsKLQotV2ViSW5zcGVjdG9yLlRpbWVsaW5l
Q2FsY3VsYXRvci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IHRpbWUKLSAgICAgKi8KLSAgICBjb21wdXRlUG9zaXRpb246IGZ1bmN0aW9uKHRpbWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gKHRpbWUgLSB0aGlzLl9taW5pbXVtQm91bmRhcnkpIC8gdGhpcy5i
b3VuZGFyeVNwYW4oKSAqIHRoaXMuX3dvcmtpbmdBcmVhICsgdGhpcy5fcGFkZGluZ0xlZnQ7Ci0g
ICAgfSwKLQotICAgIGNvbXB1dGVCYXJHcmFwaFBlcmNlbnRhZ2VzOiBmdW5jdGlvbihyZWNvcmQp
Ci0gICAgewotICAgICAgICB2YXIgc3RhcnQgPSAocmVjb3JkLnN0YXJ0VGltZSAtIHRoaXMuX21p
bmltdW1Cb3VuZGFyeSkgLyB0aGlzLmJvdW5kYXJ5U3BhbigpICogMTAwOwotICAgICAgICB2YXIg
ZW5kID0gKHJlY29yZC5zdGFydFRpbWUgKyByZWNvcmQuc2VsZlRpbWUgLSB0aGlzLl9taW5pbXVt
Qm91bmRhcnkpIC8gdGhpcy5ib3VuZGFyeVNwYW4oKSAqIDEwMDsKLSAgICAgICAgdmFyIGVuZFdp
dGhDaGlsZHJlbiA9IChyZWNvcmQubGFzdENoaWxkRW5kVGltZSAtIHRoaXMuX21pbmltdW1Cb3Vu
ZGFyeSkgLyB0aGlzLmJvdW5kYXJ5U3BhbigpICogMTAwOwotICAgICAgICB2YXIgY3B1V2lkdGgg
PSByZWNvcmQuY29hbGVzY2VkID8gZW5kV2l0aENoaWxkcmVuIC0gc3RhcnQgOiByZWNvcmQuY3B1
VGltZSAvIHRoaXMuYm91bmRhcnlTcGFuKCkgKiAxMDA7Ci0gICAgICAgIHJldHVybiB7c3RhcnQ6
IHN0YXJ0LCBlbmQ6IGVuZCwgZW5kV2l0aENoaWxkcmVuOiBlbmRXaXRoQ2hpbGRyZW4sIGNwdVdp
ZHRoOiBjcHVXaWR0aH07Ci0gICAgfSwKLQotICAgIGNvbXB1dGVCYXJHcmFwaFdpbmRvd1Bvc2l0
aW9uOiBmdW5jdGlvbihyZWNvcmQpCi0gICAgewotICAgICAgICB2YXIgcGVyY2VudGFnZXMgPSB0
aGlzLmNvbXB1dGVCYXJHcmFwaFBlcmNlbnRhZ2VzKHJlY29yZCk7Ci0gICAgICAgIHZhciB3aWR0
aEFkanVzdG1lbnQgPSAwOwotCi0gICAgICAgIHZhciBsZWZ0ID0gdGhpcy5jb21wdXRlUG9zaXRp
b24ocmVjb3JkLnN0YXJ0VGltZSk7Ci0gICAgICAgIHZhciB3aWR0aCA9IChwZXJjZW50YWdlcy5l
bmQgLSBwZXJjZW50YWdlcy5zdGFydCkgLyAxMDAgKiB0aGlzLl93b3JraW5nQXJlYTsKLSAgICAg
ICAgaWYgKHdpZHRoIDwgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2FsY3VsYXRvci5fbWluV2lkdGgp
IHsKLSAgICAgICAgICAgIHdpZHRoQWRqdXN0bWVudCA9IFdlYkluc3BlY3Rvci5UaW1lbGluZUNh
bGN1bGF0b3IuX21pbldpZHRoIC0gd2lkdGg7Ci0gICAgICAgICAgICBsZWZ0IC09IHdpZHRoQWRq
dXN0bWVudCAvIDI7Ci0gICAgICAgICAgICB3aWR0aCArPSB3aWR0aEFkanVzdG1lbnQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgdmFyIHdpZHRoV2l0aENoaWxkcmVuID0gKHBlcmNlbnRhZ2VzLmVuZFdp
dGhDaGlsZHJlbiAtIHBlcmNlbnRhZ2VzLnN0YXJ0KSAvIDEwMCAqIHRoaXMuX3dvcmtpbmdBcmVh
ICsgd2lkdGhBZGp1c3RtZW50OwotICAgICAgICB2YXIgY3B1V2lkdGggPSBwZXJjZW50YWdlcy5j
cHVXaWR0aCAvIDEwMCAqIHRoaXMuX3dvcmtpbmdBcmVhICsgd2lkdGhBZGp1c3RtZW50OwotICAg
ICAgICBpZiAocGVyY2VudGFnZXMuZW5kV2l0aENoaWxkcmVuID4gcGVyY2VudGFnZXMuZW5kKQot
ICAgICAgICAgICAgd2lkdGhXaXRoQ2hpbGRyZW4gKz0gd2lkdGhBZGp1c3RtZW50OwotICAgICAg
ICByZXR1cm4ge2xlZnQ6IGxlZnQsIHdpZHRoOiB3aWR0aCwgd2lkdGhXaXRoQ2hpbGRyZW46IHdp
ZHRoV2l0aENoaWxkcmVuLCBjcHVXaWR0aDogY3B1V2lkdGh9OwotICAgIH0sCi0KLSAgICBzZXRX
aW5kb3c6IGZ1bmN0aW9uKG1pbmltdW1Cb3VuZGFyeSwgbWF4aW11bUJvdW5kYXJ5KQotICAgIHsK
LSAgICAgICAgdGhpcy5fbWluaW11bUJvdW5kYXJ5ID0gbWluaW11bUJvdW5kYXJ5OwotICAgICAg
ICB0aGlzLl9tYXhpbXVtQm91bmRhcnkgPSBtYXhpbXVtQm91bmRhcnk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWRkaW5nTGVmdAotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBjbGllbnRXaWR0aAotICAgICAqLwotICAgIHNldERpc3BsYXlXaW5kb3c6IGZ1bmN0
aW9uKHBhZGRpbmdMZWZ0LCBjbGllbnRXaWR0aCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3dvcmtp
bmdBcmVhID0gY2xpZW50V2lkdGggLSBXZWJJbnNwZWN0b3IuVGltZWxpbmVDYWxjdWxhdG9yLl9t
aW5XaWR0aCAtIHBhZGRpbmdMZWZ0OwotICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IHBhZGRp
bmdMZWZ0OwotICAgIH0sCi0KLSAgICBmb3JtYXRUaW1lOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKHZhbHVlICsgdGhpcy5fbWlu
aW11bUJvdW5kYXJ5IC0gdGhpcy5fbW9kZWwubWluaW11bVJlY29yZFRpbWUoKSk7Ci0gICAgfSwK
LQotICAgIG1heGltdW1Cb3VuZGFyeTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX21heGltdW1Cb3VuZGFyeTsKLSAgICB9LAotCi0gICAgbWluaW11bUJvdW5kYXJ5OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWluaW11bUJvdW5kYXJ5Owot
ICAgIH0sCi0KLSAgICB6ZXJvVGltZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX21vZGVsLm1pbmltdW1SZWNvcmRUaW1lKCk7Ci0gICAgfSwKLQotICAgIGJvdW5kYXJ5
U3BhbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21heGltdW1Cb3Vu
ZGFyeSAtIHRoaXMuX21pbmltdW1Cb3VuZGFyeTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZVJlY29yZExpc3RSb3cgPSBmdW5jdGlv
bigpCi17Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0gICAgdGhpcy5lbGVtZW50LnJvdyA9IHRoaXM7Ci0gICAgdGhpcy5lbGVtZW50LnN0eWxlLmN1
cnNvciA9ICJwb2ludGVyIjsKLSAgICB2YXIgaWNvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgaWNvbkVsZW1lbnQuY2xhc3NOYW1lID0gInRpbWVsaW5lLXRy
ZWUtaWNvbiI7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGljb25FbGVtZW50KTsKLQot
ICAgIHRoaXMuX3R5cGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwot
ICAgIHRoaXMuX3R5cGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0eXBlIjsKLSAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5fdHlwZUVsZW1lbnQpOwotCi0gICAgdmFyIHNlcGFyYXRvckVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgc2VwYXJhdG9yRWxl
bWVudC5jbGFzc05hbWUgPSAic2VwYXJhdG9yIjsKLSAgICBzZXBhcmF0b3JFbGVtZW50LnRleHRD
b250ZW50ID0gIiAiOwotCi0gICAgdGhpcy5fZGF0YUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgdGhpcy5fZGF0YUVsZW1lbnQuY2xhc3NOYW1lID0gImRhdGEg
ZGltbWVkIjsKLQotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzZXBhcmF0b3JFbGVtZW50
KTsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZGF0YUVsZW1lbnQpOwotfQot
Ci1XZWJJbnNwZWN0b3IuVGltZWxpbmVSZWNvcmRMaXN0Um93LnByb3RvdHlwZSA9IHsKLSAgICB1
cGRhdGU6IGZ1bmN0aW9uKHJlY29yZCwgaXNFdmVuLCBvZmZzZXQpCi0gICAgewotICAgICAgICB0
aGlzLl9yZWNvcmQgPSByZWNvcmQ7Ci0gICAgICAgIHRoaXMuX29mZnNldCA9IG9mZnNldDsKLQot
ICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRpbWVsaW5lLXRyZWUtaXRlbSB0aW1l
bGluZS1jYXRlZ29yeS0iICsgcmVjb3JkLmNhdGVnb3J5Lm5hbWU7Ci0gICAgICAgIGlmIChpc0V2
ZW4pCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZXZlbiIpOwotICAg
ICAgICBpZiAocmVjb3JkLmhhc1dhcm5pbmcpCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRk
U3R5bGVDbGFzcygid2FybmluZyIpOwotICAgICAgICBlbHNlIGlmIChyZWNvcmQuY2hpbGRIYXNX
YXJuaW5nKQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNoaWxkLXdh
cm5pbmciKTsKLSAgICAgICAgaWYgKHJlY29yZC5pc0JhY2tncm91bmQpCi0gICAgICAgICAgICB0
aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiYmFja2dyb3VuZCIpOwotCi0gICAgICAgIHRoaXMu
X3R5cGVFbGVtZW50LnRleHRDb250ZW50ID0gcmVjb3JkLnRpdGxlOwotCi0gICAgICAgIGlmICh0
aGlzLl9kYXRhRWxlbWVudC5maXJzdENoaWxkKQotICAgICAgICAgICAgdGhpcy5fZGF0YUVsZW1l
bnQucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICBpZiAocmVjb3JkLmRldGFpbHNOb2RlKCkp
Ci0gICAgICAgICAgICB0aGlzLl9kYXRhRWxlbWVudC5hcHBlbmRDaGlsZChyZWNvcmQuZGV0YWls
c05vZGUoKSk7Ci0gICAgfSwKLQotICAgIGhpZ2hsaWdodDogZnVuY3Rpb24ocmVnRXhwLCBkb21D
aGFuZ2VzKQotICAgIHsKLSAgICAgICAgdmFyIG1hdGNoSW5mbyA9IHRoaXMuZWxlbWVudC50ZXh0
Q29udGVudC5tYXRjaChyZWdFeHApOwotICAgICAgICBpZiAobWF0Y2hJbmZvKQotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmhpZ2hsaWdodFNlYXJjaFJlc3VsdCh0aGlzLmVsZW1lbnQsIG1hdGNo
SW5mby5pbmRleCwgbWF0Y2hJbmZvWzBdLmxlbmd0aCwgZG9tQ2hhbmdlcyk7Ci0gICAgfSwKLQot
ICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5wYXJl
bnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7Ci0gICAgfQotfQotCi0vKioKLSAq
IEBwYXJhbSB7IVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLlJlY29yZH0g
cmVjb3JkCi0gKiBAcGFyYW0geyFSZWdFeHB9IHJlZ0V4cAotICovCi1XZWJJbnNwZWN0b3IuVGlt
ZWxpbmVSZWNvcmRMaXN0Um93LnRlc3RDb250ZW50TWF0Y2hpbmcgPSBmdW5jdGlvbihyZWNvcmQs
IHJlZ0V4cCkKLXsKLSAgICB2YXIgdG9TZWFyY2hUZXh0ID0gcmVjb3JkLnRpdGxlOwotICAgIGlm
IChyZWNvcmQuZGV0YWlsc05vZGUoKSkKLSAgICAgICAgdG9TZWFyY2hUZXh0ICs9ICIgIiArIHJl
Y29yZC5kZXRhaWxzTm9kZSgpLnRleHRDb250ZW50OwotICAgIHJldHVybiByZWdFeHAudGVzdCh0
b1NlYXJjaFRleHQpOwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0
b3IuVGltZWxpbmVSZWNvcmRHcmFwaFJvdyA9IGZ1bmN0aW9uKGdyYXBoQ29udGFpbmVyLCBzY2hl
ZHVsZVJlZnJlc2gpCi17Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LnJvdyA9IHRoaXM7Ci0KLSAgICB0aGlzLl9iYXJB
cmVhRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2Jh
ckFyZWFFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aW1lbGluZS1ncmFwaC1iYXItYXJlYSI7Ci0gICAg
dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2JhckFyZWFFbGVtZW50KTsKLQotICAgIHRo
aXMuX2JhcldpdGhDaGlsZHJlbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICB0aGlzLl9iYXJXaXRoQ2hpbGRyZW5FbGVtZW50LmNsYXNzTmFtZSA9ICJ0aW1lbGlu
ZS1ncmFwaC1iYXIgd2l0aC1jaGlsZHJlbiI7Ci0gICAgdGhpcy5fYmFyV2l0aENoaWxkcmVuRWxl
bWVudC5yb3cgPSB0aGlzOwotICAgIHRoaXMuX2JhckFyZWFFbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuX2JhcldpdGhDaGlsZHJlbkVsZW1lbnQpOwotCi0gICAgdGhpcy5fYmFyQ3B1RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2JhckNwdUVsZW1lbnQu
Y2xhc3NOYW1lID0gInRpbWVsaW5lLWdyYXBoLWJhciBjcHUiCi0gICAgdGhpcy5fYmFyQ3B1RWxl
bWVudC5yb3cgPSB0aGlzOwotICAgIHRoaXMuX2JhckFyZWFFbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuX2JhckNwdUVsZW1lbnQpOwotCi0gICAgdGhpcy5fYmFyRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2JhckVsZW1lbnQuY2xhc3NOYW1lID0gInRp
bWVsaW5lLWdyYXBoLWJhciI7Ci0gICAgdGhpcy5fYmFyRWxlbWVudC5yb3cgPSB0aGlzOwotICAg
IHRoaXMuX2JhckFyZWFFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2JhckVsZW1lbnQpOwotCi0g
ICAgdGhpcy5fZXhwYW5kRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVFeHBhbmRh
YmxlRWxlbWVudChncmFwaENvbnRhaW5lcik7Ci0gICAgdGhpcy5fZXhwYW5kRWxlbWVudC5fZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7
Ci0KLSAgICB0aGlzLl9zY2hlZHVsZVJlZnJlc2ggPSBzY2hlZHVsZVJlZnJlc2g7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5UaW1lbGluZVJlY29yZEdyYXBoUm93LnByb3RvdHlwZSA9IHsKLSAgICB1cGRh
dGU6IGZ1bmN0aW9uKHJlY29yZCwgaXNFdmVuLCBjYWxjdWxhdG9yLCBleHBhbmRPZmZzZXQsIGlu
ZGV4KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVjb3JkID0gcmVjb3JkOwotICAgICAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gInRpbWVsaW5lLWdyYXBoLXNpZGUgdGltZWxpbmUtY2F0ZWdv
cnktIiArIHJlY29yZC5jYXRlZ29yeS5uYW1lOwotICAgICAgICBpZiAoaXNFdmVuKQotICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImV2ZW4iKTsKLSAgICAgICAgaWYgKHJl
Y29yZC5pc0JhY2tncm91bmQpCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygiYmFja2dyb3VuZCIpOwotCi0gICAgICAgIHZhciBiYXJQb3NpdGlvbiA9IGNhbGN1bGF0b3Iu
Y29tcHV0ZUJhckdyYXBoV2luZG93UG9zaXRpb24ocmVjb3JkKTsKLSAgICAgICAgdGhpcy5fYmFy
V2l0aENoaWxkcmVuRWxlbWVudC5zdHlsZS5sZWZ0ID0gYmFyUG9zaXRpb24ubGVmdCArICJweCI7
Ci0gICAgICAgIHRoaXMuX2JhcldpdGhDaGlsZHJlbkVsZW1lbnQuc3R5bGUud2lkdGggPSBiYXJQ
b3NpdGlvbi53aWR0aFdpdGhDaGlsZHJlbiArICJweCI7Ci0gICAgICAgIHRoaXMuX2JhckVsZW1l
bnQuc3R5bGUubGVmdCA9IGJhclBvc2l0aW9uLmxlZnQgKyAicHgiOwotICAgICAgICB0aGlzLl9i
YXJFbGVtZW50LnN0eWxlLndpZHRoID0gYmFyUG9zaXRpb24ud2lkdGggKyAicHgiOwotICAgICAg
ICB0aGlzLl9iYXJDcHVFbGVtZW50LnN0eWxlLmxlZnQgPSBiYXJQb3NpdGlvbi5sZWZ0ICsgInB4
IjsKLSAgICAgICAgdGhpcy5fYmFyQ3B1RWxlbWVudC5zdHlsZS53aWR0aCA9IGJhclBvc2l0aW9u
LmNwdVdpZHRoICsgInB4IjsKLSAgICAgICAgdGhpcy5fZXhwYW5kRWxlbWVudC5fdXBkYXRlKHJl
Y29yZCwgaW5kZXgsIGJhclBvc2l0aW9uLmxlZnQgLSBleHBhbmRPZmZzZXQsIGJhclBvc2l0aW9u
LndpZHRoKTsKLSAgICB9LAotCi0gICAgX29uQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdGhpcy5fcmVjb3JkLmNvbGxhcHNlZCA9ICF0aGlzLl9yZWNvcmQuY29sbGFwc2Vk
OwotICAgICAgICB0aGlzLl9zY2hlZHVsZVJlZnJlc2goZmFsc2UsIHRydWUpOwotICAgIH0sCi0K
LSAgICBkaXNwb3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmVsZW1lbnQucGFy
ZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOwotICAgICAgICB0aGlzLl9leHBh
bmRFbGVtZW50Ll9kaXNwb3NlKCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVFeHBhbmRhYmxlRWxlbWVudCA9IGZ1bmN0aW9uKGNv
bnRhaW5lcikKLXsKLSAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7Ci0gICAgdGhpcy5fZWxlbWVudC5jbGFzc05hbWUgPSAidGltZWxpbmUtZXhwYW5kYWJs
ZSI7Ci0KLSAgICB2YXIgbGVmdEJvcmRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgIGxlZnRCb3JkZXIuY2xhc3NOYW1lID0gInRpbWVsaW5lLWV4cGFuZGFibGUtbGVmdCI7
Ci0gICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsZWZ0Qm9yZGVyKTsKLQotICAgIGNvbnRh
aW5lci5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKLX0KLQotV2ViSW5zcGVjdG9yLlRpbWVs
aW5lRXhwYW5kYWJsZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIF91cGRhdGU6IGZ1bmN0aW9u
KHJlY29yZCwgaW5kZXgsIGxlZnQsIHdpZHRoKQotICAgIHsKLSAgICAgICAgY29uc3Qgcm93SGVp
Z2h0ID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwucm93SGVpZ2h0OwotICAgICAgICBpZiAo
cmVjb3JkLnZpc2libGVDaGlsZHJlbkNvdW50IHx8IHJlY29yZC5pbnZpc2libGVDaGlsZHJlbkNv
dW50KSB7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCA9IGluZGV4ICogcm93
SGVpZ2h0ICsgInB4IjsKLSAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdCA9IGxl
ZnQgKyAicHgiOwotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCA9IE1hdGgu
bWF4KDEyLCB3aWR0aCArIDI1KSArICJweCI7Ci0gICAgICAgICAgICBpZiAoIXJlY29yZC5jb2xs
YXBzZWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCA9IChy
ZWNvcmQudmlzaWJsZUNoaWxkcmVuQ291bnQgKyAxKSAqIHJvd0hlaWdodCArICJweCI7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0aW1lbGluZS1leHBhbmRh
YmxlLWV4cGFuZGVkIik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVTdHls
ZUNsYXNzKCJ0aW1lbGluZS1leHBhbmRhYmxlLWNvbGxhcHNlZCIpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCA9IHJvd0hl
aWdodCArICJweCI7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJ0aW1lbGluZS1leHBhbmRhYmxlLWNvbGxhcHNlZCIpOwotICAgICAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidGltZWxpbmUtZXhwYW5kYWJsZS1leHBhbmRlZCIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVTdHlsZUNs
YXNzKCJoaWRkZW4iKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50
LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgIH0sCi0KLSAgICBfZGlzcG9zZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNo
aWxkKHRoaXMuX2VsZW1lbnQpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5GaWx0
ZXJ9Ci0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZUNhdGVnb3J5RmlsdGVyID0gZnVuY3Rpb24o
KQotewotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVDYXRlZ29yeUZpbHRlci5wcm90b3R5cGUg
PSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2Vu
dGF0aW9uTW9kZWwuUmVjb3JkfSByZWNvcmQKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAg
ICAqLwotICAgIGFjY2VwdDogZnVuY3Rpb24ocmVjb3JkKQotICAgIHsKLSAgICAgICAgcmV0dXJu
ICFyZWNvcmQuY2F0ZWdvcnkuaGlkZGVuICYmIHJlY29yZC50eXBlICE9PSBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVNb2RlbC5SZWNvcmRUeXBlLkJlZ2luRnJhbWU7Ci0gICAgfQotfQotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UaW1lbGluZVByZXNl
bnRhdGlvbk1vZGVsLkZpbHRlcn0KLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lSXNMb25nRmls
dGVyID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuX21pbmltdW1SZWNvcmREdXJhdGlvbiA9IDA7
Ci19Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZUlzTG9uZ0ZpbHRlci5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlCi0gICAgICovCi0gICAgc2V0TWlu
aW11bVJlY29yZER1cmF0aW9uOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X21pbmltdW1SZWNvcmREdXJhdGlvbiA9IHZhbHVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNvcmR9
IHJlY29yZAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgYWNjZXB0OiBm
dW5jdGlvbihyZWNvcmQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWluaW11bVJlY29y
ZER1cmF0aW9uID8gKChyZWNvcmQubGFzdENoaWxkRW5kVGltZSAtIHJlY29yZC5zdGFydFRpbWUp
ID49IHRoaXMuX21pbmltdW1SZWNvcmREdXJhdGlvbikgOiB0cnVlOwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAcGFyYW0geyFSZWdFeHB9IHJlZ0V4cAotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVt
ZW50cyB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuRmlsdGVyfQotICov
Ci1XZWJJbnNwZWN0b3IuVGltZWxpbmVTZWFyY2hGaWx0ZXIgPSBmdW5jdGlvbihyZWdFeHApCi17
Ci0gICAgdGhpcy5fcmVnRXhwID0gcmVnRXhwOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVT
ZWFyY2hGaWx0ZXIucHJvdG90eXBlID0gewotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2Vi
SW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuUmVjb3JkfSByZWNvcmQKLSAgICAg
KiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGFjY2VwdDogZnVuY3Rpb24ocmVjb3Jk
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5UaW1lbGluZVJlY29yZExpc3RS
b3cudGVzdENvbnRlbnRNYXRjaGluZyhyZWNvcmQsIHRoaXMuX3JlZ0V4cCk7Ci0gICAgfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBh
bmVsRGVzY3JpcHRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGlt
ZWxpbmVQYW5lbERlc2NyaXB0b3IuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4
MzRmMGQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9U
aW1lbGluZVBhbmVsRGVzY3JpcHRvci5qcworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgR09PR0xFIElOQy4KLSAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJ
bnNwZWN0b3IuUGFuZWxEZXNjcmlwdG9yfQotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5l
bERlc2NyaXB0b3IgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlBhbmVsRGVzY3Jp
cHRvci5jYWxsKHRoaXMsICJ0aW1lbGluZSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGltZWxp
bmUiKSwgIlRpbWVsaW5lUGFuZWwiLCAiVGltZWxpbmVQYW5lbC5qcyIpOwotfQotCi1XZWJJbnNw
ZWN0b3IuVGltZWxpbmVQYW5lbERlc2NyaXB0b3IucHJvdG90eXBlID0gewotICAgIHJlZ2lzdGVy
U2hvcnRjdXRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2VjdGlvbiA9IFdlYklu
c3BlY3Rvci5zaG9ydGN1dHNTY3JlZW4uc2VjdGlvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRp
bWVsaW5lIFBhbmVsIikpOwotICAgICAgICBzZWN0aW9uLmFkZEFsdGVybmF0ZUtleXMoV2ViSW5z
cGVjdG9yLlRpbWVsaW5lUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cy5TdGFydFN0b3BSZWNv
cmRpbmcsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3RhcnQvc3RvcCByZWNvcmRpbmciKSk7Ci0g
ICAgICAgIGlmIChJbnNwZWN0b3JGcm9udGVuZEhvc3QuY2FuU2F2ZSgpKQotICAgICAgICAgICAg
c2VjdGlvbi5hZGRBbHRlcm5hdGVLZXlzKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsRGVzY3Jp
cHRvci5TaG9ydGN1dEtleXMuU2F2ZVRvRmlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTYXZl
IHRpbWVsaW5lIGRhdGEiKSk7Ci0gICAgICAgIHNlY3Rpb24uYWRkQWx0ZXJuYXRlS2V5cyhXZWJJ
bnNwZWN0b3IuVGltZWxpbmVQYW5lbERlc2NyaXB0b3IuU2hvcnRjdXRLZXlzLkxvYWRGcm9tRmls
ZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkIHRpbWVsaW5lIGRhdGEiKSk7Ci0gICAgfSwK
LQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRvci5wcm90b3R5cGUK
LX0KLQotV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWxEZXNjcmlwdG9yLlNob3J0Y3V0S2V5cyA9
IHsKLSAgICBTdGFydFN0b3BSZWNvcmRpbmc6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQubWFrZURlc2NyaXB0b3IoImUiLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5Nb2RpZmllcnMuQ3RybE9yTWV0YSkKLSAgICBdLAotCi0gICAgU2F2ZVRvRmlsZTogWwot
ICAgICAgICBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigicyIs
IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsT3JNZXRhKQotICAg
IF0sCi0KLSAgICBMb2FkRnJvbUZpbGU6IFsKLSAgICAgICAgV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQubWFrZURlc2NyaXB0b3IoIm8iLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5Nb2RpZmllcnMuQ3RybE9yTWV0YSkKLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUHJlc2VudGF0aW9uTW9k
ZWwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWZlMjguLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVByZXNlbnRhdGlv
bk1vZGVsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9y
LlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fbGlu
a2lmaWVyID0gbmV3IFdlYkluc3BlY3Rvci5MaW5raWZpZXIoKTsKLSAgICB0aGlzLl9nbHVlUmVj
b3JkcyA9IGZhbHNlOwotICAgIHRoaXMuX2ZpbHRlcnMgPSBbXTsKLSAgICB0aGlzLnJlc2V0KCk7
Ci19Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmNhdGVnb3JpZXMg
PSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlv
bk1vZGVsLl9jYXRlZ29yaWVzKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UHJlc2VudGF0aW9uTW9kZWwuX2NhdGVnb3JpZXM7Ci0gICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UHJlc2VudGF0aW9uTW9kZWwuX2NhdGVnb3JpZXMgPSB7Ci0gICAgICAgIHByb2dyYW06IG5ldyBX
ZWJJbnNwZWN0b3IuVGltZWxpbmVDYXRlZ29yeSgicHJvZ3JhbSIsIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiUHJvZ3JhbSIpLCAtMSwgIiNCQkJCQkIiLCAiI0RERERERCIsICIjRkZGRkZGIiksCi0g
ICAgICAgIGxvYWRpbmc6IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVDYXRlZ29yeSgibG9hZGlu
ZyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9hZGluZyIpLCAwLCAiIzVBOEJDQyIsICIjOEVC
NkU5IiwgIiM3MEEyRTMiKSwKLSAgICAgICAgc2NyaXB0aW5nOiBuZXcgV2ViSW5zcGVjdG9yLlRp
bWVsaW5lQ2F0ZWdvcnkoInNjcmlwdGluZyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2NyaXB0
aW5nIiksIDEsICIjRDhBQTM0IiwgIiNGM0QwN0EiLCAiI0YxQzQ1MyIpLAotICAgICAgICByZW5k
ZXJpbmc6IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVDYXRlZ29yeSgicmVuZGVyaW5nIiwgV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJSZW5kZXJpbmciKSwgMiwgIiM4MjY2Q0MiLCAiI0FGOUFFQiIs
ICIjOUE3RUU2IiksCi0gICAgICAgIHBhaW50aW5nOiBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
Q2F0ZWdvcnkoInBhaW50aW5nIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYWludGluZyIpLCAy
LCAiIzVGQTA1MCIsICIjOERDMjg2IiwgIiM3MUIzNjMiKQotICAgIH07Ci0gICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLl9jYXRlZ29yaWVzOwotfTsKLQot
LyoqCi0gKiBAcmV0dXJuIHshT2JqZWN0LjxzdHJpbmcsIHt0aXRsZTogc3RyaW5nLCBjYXRlZ29y
eX0+fQotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5faW5pdFJl
Y29yZFN0eWxlcyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UHJlc2VudGF0aW9uTW9kZWwuX3JlY29yZFN0eWxlc01hcCkKLSAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLl9yZWNvcmRTdHlsZXNNYXA7Ci0KLSAg
ICB2YXIgcmVjb3JkVHlwZXMgPSBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5SZWNvcmRUeXBl
OwotICAgIHZhciBjYXRlZ29yaWVzID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9u
TW9kZWwuY2F0ZWdvcmllcygpOwotCi0gICAgdmFyIHJlY29yZFN0eWxlcyA9IHt9OwotICAgIHJl
Y29yZFN0eWxlc1tyZWNvcmRUeXBlcy5Sb290XSA9IHsgdGl0bGU6ICIjcm9vdCIsIGNhdGVnb3J5
OiBjYXRlZ29yaWVzWyJsb2FkaW5nIl0gfTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMu
UHJvZ3JhbV0gPSB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByb2dyYW0iKSwgY2F0
ZWdvcnk6IGNhdGVnb3JpZXNbInByb2dyYW0iXSB9OwotICAgIHJlY29yZFN0eWxlc1tyZWNvcmRU
eXBlcy5FdmVudERpc3BhdGNoXSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXZl
bnQiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbInNjcmlwdGluZyJdIH07Ci0gICAgcmVjb3JkU3R5
bGVzW3JlY29yZFR5cGVzLkJlZ2luRnJhbWVdID0geyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJGcmFtZSBTdGFydCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sicmVuZGVyaW5nIl0gfTsK
LSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb25d
ID0geyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTY2hlZHVsZSBTdHlsZSBSZWNhbGN1
bGF0aW9uIiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJyZW5kZXJpbmciXSB9OwotICAgIHJlY29y
ZFN0eWxlc1tyZWNvcmRUeXBlcy5SZWNhbGN1bGF0ZVN0eWxlc10gPSB7IHRpdGxlOiBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlJlY2FsY3VsYXRlIFN0eWxlIiksIGNhdGVnb3J5OiBjYXRlZ29yaWVz
WyJyZW5kZXJpbmciXSB9OwotICAgIHJlY29yZFN0eWxlc1tyZWNvcmRUeXBlcy5JbnZhbGlkYXRl
TGF5b3V0XSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW52YWxpZGF0ZSBMYXlv
dXQiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbInJlbmRlcmluZyJdIH07Ci0gICAgcmVjb3JkU3R5
bGVzW3JlY29yZFR5cGVzLkxheW91dF0gPSB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkxheW91dCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sicmVuZGVyaW5nIl0gfTsKLSAgICByZWNv
cmRTdHlsZXNbcmVjb3JkVHlwZXMuUGFpbnRdID0geyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJQYWludCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sicGFpbnRpbmciXSB9OwotICAgIHJl
Y29yZFN0eWxlc1tyZWNvcmRUeXBlcy5SYXN0ZXJpemVdID0geyB0aXRsZTogV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJSYXN0ZXJpemUiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbInBhaW50aW5nIl0g
fTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuU2Nyb2xsTGF5ZXJdID0geyB0aXRsZTog
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTY3JvbGwiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbInJl
bmRlcmluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3JlY29yZFR5cGVzLkRlY29kZUltYWdlXSA9
IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW1hZ2UgRGVjb2RlIiksIGNhdGVnb3J5
OiBjYXRlZ29yaWVzWyJwYWludGluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3JlY29yZFR5cGVz
LlJlc2l6ZUltYWdlXSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW1hZ2UgUmVz
aXplIiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJwYWludGluZyJdIH07Ci0gICAgcmVjb3JkU3R5
bGVzW3JlY29yZFR5cGVzLkNvbXBvc2l0ZUxheWVyc10gPSB7IHRpdGxlOiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkNvbXBvc2l0ZSBMYXllcnMiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbInBhaW50
aW5nIl0gfTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuUGFyc2VIVE1MXSA9IHsgdGl0
bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGFyc2UgSFRNTCIpLCBjYXRlZ29yeTogY2F0ZWdv
cmllc1sibG9hZGluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3JlY29yZFR5cGVzLlRpbWVySW5z
dGFsbF0gPSB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluc3RhbGwgVGltZXIiKSwg
Y2F0ZWdvcnk6IGNhdGVnb3JpZXNbInNjcmlwdGluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3Jl
Y29yZFR5cGVzLlRpbWVyUmVtb3ZlXSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
UmVtb3ZlIFRpbWVyIiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJzY3JpcHRpbmciXSB9OwotICAg
IHJlY29yZFN0eWxlc1tyZWNvcmRUeXBlcy5UaW1lckZpcmVdID0geyB0aXRsZTogV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJUaW1lciBGaXJlZCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sic2NyaXB0
aW5nIl0gfTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuWEhSUmVhZHlTdGF0ZUNoYW5n
ZV0gPSB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlhIUiBSZWFkeSBTdGF0ZSBDaGFu
Z2UiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbInNjcmlwdGluZyJdIH07Ci0gICAgcmVjb3JkU3R5
bGVzW3JlY29yZFR5cGVzLlhIUkxvYWRdID0geyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJYSFIgTG9hZCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sic2NyaXB0aW5nIl0gfTsKLSAgICBy
ZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuRXZhbHVhdGVTY3JpcHRdID0geyB0aXRsZTogV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJFdmFsdWF0ZSBTY3JpcHQiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNb
InNjcmlwdGluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3JlY29yZFR5cGVzLlJlc291cmNlU2Vu
ZFJlcXVlc3RdID0geyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZW5kIFJlcXVlc3Qi
KSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbImxvYWRpbmciXSB9OwotICAgIHJlY29yZFN0eWxlc1ty
ZWNvcmRUeXBlcy5SZXNvdXJjZVJlY2VpdmVSZXNwb25zZV0gPSB7IHRpdGxlOiBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlJlY2VpdmUgUmVzcG9uc2UiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbImxv
YWRpbmciXSB9OwotICAgIHJlY29yZFN0eWxlc1tyZWNvcmRUeXBlcy5SZXNvdXJjZUZpbmlzaF0g
PSB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZpbmlzaCBMb2FkaW5nIiksIGNhdGVn
b3J5OiBjYXRlZ29yaWVzWyJsb2FkaW5nIl0gfTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlw
ZXMuRnVuY3Rpb25DYWxsXSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRnVuY3Rp
b24gQ2FsbCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sic2NyaXB0aW5nIl0gfTsKLSAgICByZWNv
cmRTdHlsZXNbcmVjb3JkVHlwZXMuUmVzb3VyY2VSZWNlaXZlZERhdGFdID0geyB0aXRsZTogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJSZWNlaXZlIERhdGEiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNb
ImxvYWRpbmciXSB9OwotICAgIHJlY29yZFN0eWxlc1tyZWNvcmRUeXBlcy5HQ0V2ZW50XSA9IHsg
dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiR0MgRXZlbnQiKSwgY2F0ZWdvcnk6IGNhdGVn
b3JpZXNbInNjcmlwdGluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3JlY29yZFR5cGVzLk1hcmtE
T01Db250ZW50XSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRE9NQ29udGVudExv
YWRlZCBldmVudCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sic2NyaXB0aW5nIl0gfTsKLSAgICBy
ZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuTWFya0xvYWRdID0geyB0aXRsZTogV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJMb2FkIGV2ZW50IiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJzY3JpcHRpbmci
XSB9OwotICAgIHJlY29yZFN0eWxlc1tyZWNvcmRUeXBlcy5UaW1lU3RhbXBdID0geyB0aXRsZTog
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdGFtcCIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sic2Ny
aXB0aW5nIl0gfTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuVGltZV0gPSB7IHRpdGxl
OiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRpbWUiKSwgY2F0ZWdvcnk6IGNhdGVnb3JpZXNbInNj
cmlwdGluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3JlY29yZFR5cGVzLlRpbWVFbmRdID0geyB0
aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaW1lIEVuZCIpLCBjYXRlZ29yeTogY2F0ZWdv
cmllc1sic2NyaXB0aW5nIl0gfTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuU2NoZWR1
bGVSZXNvdXJjZVJlcXVlc3RdID0geyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTY2hl
ZHVsZSBSZXF1ZXN0IiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJsb2FkaW5nIl0gfTsKLSAgICBy
ZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuUmVxdWVzdEFuaW1hdGlvbkZyYW1lXSA9IHsgdGl0bGU6
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVxdWVzdCBBbmltYXRpb24gRnJhbWUiKSwgY2F0ZWdv
cnk6IGNhdGVnb3JpZXNbInNjcmlwdGluZyJdIH07Ci0gICAgcmVjb3JkU3R5bGVzW3JlY29yZFR5
cGVzLkNhbmNlbEFuaW1hdGlvbkZyYW1lXSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQ2FuY2VsIEFuaW1hdGlvbiBGcmFtZSIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sic2NyaXB0
aW5nIl0gfTsKLSAgICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuRmlyZUFuaW1hdGlvbkZyYW1l
XSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQW5pbWF0aW9uIEZyYW1lIEZpcmVk
IiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJzY3JpcHRpbmciXSB9OwotICAgIHJlY29yZFN0eWxl
c1tyZWNvcmRUeXBlcy5XZWJTb2NrZXRDcmVhdGVdID0geyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDcmVhdGUgV2ViU29ja2V0IiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJzY3JpcHRp
bmciXSB9OwotICAgIHJlY29yZFN0eWxlc1tyZWNvcmRUeXBlcy5XZWJTb2NrZXRTZW5kSGFuZHNo
YWtlUmVxdWVzdF0gPSB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNlbmQgV2ViU29j
a2V0IEhhbmRzaGFrZSIpLCBjYXRlZ29yeTogY2F0ZWdvcmllc1sic2NyaXB0aW5nIl0gfTsKLSAg
ICByZWNvcmRTdHlsZXNbcmVjb3JkVHlwZXMuV2ViU29ja2V0UmVjZWl2ZUhhbmRzaGFrZVJlc3Bv
bnNlXSA9IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVjZWl2ZSBXZWJTb2NrZXQg
SGFuZHNoYWtlIiksIGNhdGVnb3J5OiBjYXRlZ29yaWVzWyJzY3JpcHRpbmciXSB9OwotICAgIHJl
Y29yZFN0eWxlc1tyZWNvcmRUeXBlcy5XZWJTb2NrZXREZXN0cm95XSA9IHsgdGl0bGU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRGVzdHJveSBXZWJTb2NrZXQiKSwgY2F0ZWdvcnk6IGNhdGVnb3Jp
ZXNbInNjcmlwdGluZyJdIH07Ci0KLSAgICBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRp
b25Nb2RlbC5fcmVjb3JkU3R5bGVzTWFwID0gcmVjb3JkU3R5bGVzOwotICAgIHJldHVybiByZWNv
cmRTdHlsZXM7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtPYmplY3R9IHJlY29yZAotICovCi1XZWJJ
bnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5yZWNvcmRTdHlsZSA9IGZ1bmN0aW9u
KHJlY29yZCkKLXsKLSAgICB2YXIgcmVjb3JkU3R5bGVzID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UHJlc2VudGF0aW9uTW9kZWwuX2luaXRSZWNvcmRTdHlsZXMoKTsKLSAgICB2YXIgcmVzdWx0ID0g
cmVjb3JkU3R5bGVzW3JlY29yZC50eXBlXTsKLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBy
ZXN1bHQgPSB7Ci0gICAgICAgICAgICB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJVbmtu
b3duOiAlcyIsIHJlY29yZC50eXBlKSwKLSAgICAgICAgICAgIGNhdGVnb3J5OiBXZWJJbnNwZWN0
b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5jYXRlZ29yaWVzKClbInByb2dyYW0iXQotICAg
ICAgICB9OwotICAgICAgICByZWNvcmRTdHlsZXNbcmVjb3JkLnR5cGVdID0gcmVzdWx0OwotICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50
YXRpb25Nb2RlbC5jYXRlZ29yeUZvclJlY29yZCA9IGZ1bmN0aW9uKHJlY29yZCkKLXsKLSAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwucmVjb3JkU3R5bGUo
cmVjb3JkKS5jYXRlZ29yeTsKLX0KLQotV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9u
TW9kZWwuaXNFdmVudERpdmlkZXIgPSBmdW5jdGlvbihyZWNvcmQpCi17Ci0gICAgdmFyIHJlY29y
ZFR5cGVzID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZTsKLSAgICBpZiAo
cmVjb3JkLnR5cGUgPT09IHJlY29yZFR5cGVzLlRpbWVTdGFtcCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKHJlY29yZC50eXBlID09PSByZWNvcmRUeXBlcy5NYXJrRE9NQ29udGVudCB8
fCByZWNvcmQudHlwZSA9PT0gcmVjb3JkVHlwZXMuTWFya0xvYWQpIHsKLSAgICAgICAgaWYgKHJl
Y29yZC5kYXRhICYmICgodHlwZW9mIHJlY29yZC5kYXRhLmlzTWFpbkZyYW1lKSA9PT0gImJvb2xl
YW4iKSkKLSAgICAgICAgICAgIHJldHVybiByZWNvcmQuZGF0YS5pc01haW5GcmFtZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vKioKLSAqIEBwYXJhbSB7QXJyYXl9IHJlY29yZHNB
cnJheQotICogQHBhcmFtIHs/ZnVuY3Rpb24oKil9IHByZU9yZGVyQ2FsbGJhY2sKLSAqIEBwYXJh
bSB7ZnVuY3Rpb24oKik9fSBwb3N0T3JkZXJDYWxsYmFjawotICovCi1XZWJJbnNwZWN0b3IuVGlt
ZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5mb3JBbGxSZWNvcmRzID0gZnVuY3Rpb24ocmVjb3Jkc0Fy
cmF5LCBwcmVPcmRlckNhbGxiYWNrLCBwb3N0T3JkZXJDYWxsYmFjaykKLXsKLSAgICBpZiAoIXJl
Y29yZHNBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhciBzdGFjayA9IFt7YXJyYXk6IHJl
Y29yZHNBcnJheSwgaW5kZXg6IDB9XTsKLSAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7Ci0gICAg
ICAgIHZhciBlbnRyeSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwotICAgICAgICB2YXIgcmVj
b3JkcyA9IGVudHJ5LmFycmF5OwotICAgICAgICBpZiAoZW50cnkuaW5kZXggPCByZWNvcmRzLmxl
bmd0aCkgewotICAgICAgICAgICAgIHZhciByZWNvcmQgPSByZWNvcmRzW2VudHJ5LmluZGV4XTsK
LSAgICAgICAgICAgICBpZiAocHJlT3JkZXJDYWxsYmFjayAmJiBwcmVPcmRlckNhbGxiYWNrKHJl
Y29yZCkpCi0gICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICBpZiAocmVjb3Jk
LmNoaWxkcmVuKQotICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHthcnJheTogcmVjb3JkLmNo
aWxkcmVuLCBpbmRleDogMCwgcmVjb3JkOiByZWNvcmR9KTsKLSAgICAgICAgICAgICBlbHNlIGlm
IChwb3N0T3JkZXJDYWxsYmFjayAmJiBwb3N0T3JkZXJDYWxsYmFjayhyZWNvcmQpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICArK2VudHJ5LmluZGV4OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKGVudHJ5LnJlY29yZCAmJiBwb3N0T3JkZXJDYWxsYmFj
ayAmJiBwb3N0T3JkZXJDYWxsYmFjayhlbnRyeS5yZWNvcmQpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIHN0YWNrLnBvcCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0v
KioKLSAqIEBwYXJhbSB7c3RyaW5nPX0gcmVjb3JkVHlwZQotICogQHJldHVybiB7Ym9vbGVhbn0K
LSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwubmVlZHNQcmV2aWV3
RWxlbWVudCA9IGZ1bmN0aW9uKHJlY29yZFR5cGUpCi17Ci0gICAgaWYgKCFyZWNvcmRUeXBlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgcmVjb3JkVHlwZXMgPSBXZWJJbnNwZWN0
b3IuVGltZWxpbmVNb2RlbC5SZWNvcmRUeXBlOwotICAgIHN3aXRjaCAocmVjb3JkVHlwZSkgewot
ICAgIGNhc2UgcmVjb3JkVHlwZXMuU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3Q6Ci0gICAgY2FzZSBy
ZWNvcmRUeXBlcy5SZXNvdXJjZVNlbmRSZXF1ZXN0OgotICAgIGNhc2UgcmVjb3JkVHlwZXMuUmVz
b3VyY2VSZWNlaXZlUmVzcG9uc2U6Ci0gICAgY2FzZSByZWNvcmRUeXBlcy5SZXNvdXJjZVJlY2Vp
dmVkRGF0YToKLSAgICBjYXNlIHJlY29yZFR5cGVzLlJlc291cmNlRmluaXNoOgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSByZWNvcmRUeXBlCi0gKiBAcGFyYW0ge3N0cmlu
Zz19IHRpdGxlCi0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmNy
ZWF0ZUV2ZW50RGl2aWRlciA9IGZ1bmN0aW9uKHJlY29yZFR5cGUsIHRpdGxlKQotewotICAgIHZh
ciBldmVudERpdmlkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBldmVu
dERpdmlkZXIuY2xhc3NOYW1lID0gInJlc291cmNlcy1ldmVudC1kaXZpZGVyIjsKLSAgICB2YXIg
cmVjb3JkVHlwZXMgPSBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5SZWNvcmRUeXBlOwotCi0g
ICAgaWYgKHJlY29yZFR5cGUgPT09IHJlY29yZFR5cGVzLk1hcmtET01Db250ZW50KQotICAgICAg
ICBldmVudERpdmlkZXIuY2xhc3NOYW1lICs9ICIgcmVzb3VyY2VzLWJsdWUtZGl2aWRlciI7Ci0g
ICAgZWxzZSBpZiAocmVjb3JkVHlwZSA9PT0gcmVjb3JkVHlwZXMuTWFya0xvYWQpCi0gICAgICAg
IGV2ZW50RGl2aWRlci5jbGFzc05hbWUgKz0gIiByZXNvdXJjZXMtcmVkLWRpdmlkZXIiOwotICAg
IGVsc2UgaWYgKHJlY29yZFR5cGUgPT09IHJlY29yZFR5cGVzLlRpbWVTdGFtcCkKLSAgICAgICAg
ZXZlbnREaXZpZGVyLmNsYXNzTmFtZSArPSAiIHJlc291cmNlcy1vcmFuZ2UtZGl2aWRlciI7Ci0g
ICAgZWxzZSBpZiAocmVjb3JkVHlwZSA9PT0gcmVjb3JkVHlwZXMuQmVnaW5GcmFtZSkKLSAgICAg
ICAgZXZlbnREaXZpZGVyLmNsYXNzTmFtZSArPSAiIHRpbWVsaW5lLWZyYW1lLWRpdmlkZXIiOwot
Ci0gICAgaWYgKHRpdGxlKQotICAgICAgICBldmVudERpdmlkZXIudGl0bGUgPSB0aXRsZTsKLQot
ICAgIHJldHVybiBldmVudERpdmlkZXI7Ci19Ci0KLVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNl
bnRhdGlvbk1vZGVsLl9oaWRkZW5SZWNvcmRzID0geyB9Ci1XZWJJbnNwZWN0b3IuVGltZWxpbmVQ
cmVzZW50YXRpb25Nb2RlbC5faGlkZGVuUmVjb3Jkc1tXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2Rl
bC5SZWNvcmRUeXBlLk1hcmtET01Db250ZW50XSA9IDE7Ci1XZWJJbnNwZWN0b3IuVGltZWxpbmVQ
cmVzZW50YXRpb25Nb2RlbC5faGlkZGVuUmVjb3Jkc1tXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2Rl
bC5SZWNvcmRUeXBlLk1hcmtMb2FkXSA9IDE7Ci1XZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50
YXRpb25Nb2RlbC5faGlkZGVuUmVjb3Jkc1tXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5SZWNv
cmRUeXBlLlNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uXSA9IDE7Ci1XZWJJbnNwZWN0b3IuVGlt
ZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5faGlkZGVuUmVjb3Jkc1tXZWJJbnNwZWN0b3IuVGltZWxp
bmVNb2RlbC5SZWNvcmRUeXBlLkludmFsaWRhdGVMYXlvdXRdID0gMTsKLQotV2ViSW5zcGVjdG9y
LlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7IVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLkZpbHRlcn0g
ZmlsdGVyCi0gICAgICovCi0gICAgYWRkRmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIpCi0gICAgewot
ICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuRmls
dGVyfSBmaWx0ZXIKLSAgICAgKi8KLSAgICByZW1vdmVGaWx0ZXI6IGZ1bmN0aW9uKGZpbHRlcikK
LSAgICB7Ci0gICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbHRlcnMuaW5kZXhPZihmaWx0ZXIp
OwotICAgICAgICBpZiAoaW5kZXggIT09IC0xKQotICAgICAgICAgICAgdGhpcy5fZmlsdGVycy5z
cGxpY2UoaW5kZXgsIDEpOwotICAgIH0sCi0KLSAgICByb290UmVjb3JkOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcm9vdFJlY29yZDsKLSAgICB9LAotCi0gICAgZnJh
bWVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWVzOwotICAg
IH0sCi0KLSAgICByZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbGlua2lm
aWVyLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX3Jvb3RSZWNvcmQgPSBuZXcgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuUmVjb3JkKHRoaXMsIHsgdHlwZTogV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5Sb290IH0sIG51bGwsIG51bGwsIG51bGwsIGZh
bHNlKTsKLSAgICAgICAgdGhpcy5fc2VuZFJlcXVlc3RSZWNvcmRzID0ge307Ci0gICAgICAgIHRo
aXMuX3NjaGVkdWxlZFJlc291cmNlUmVxdWVzdHMgPSB7fTsKLSAgICAgICAgdGhpcy5fdGltZXJS
ZWNvcmRzID0ge307Ci0gICAgICAgIHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZVJlY29yZHMg
PSB7fTsKLSAgICAgICAgdGhpcy5fZXZlbnREaXZpZGVyUmVjb3JkcyA9IFtdOwotICAgICAgICB0
aGlzLl90aW1lUmVjb3JkcyA9IHt9OwotICAgICAgICB0aGlzLl90aW1lUmVjb3JkU3RhY2sgPSBb
XTsKLSAgICAgICAgdGhpcy5fZnJhbWVzID0gW107Ci0gICAgICAgIHRoaXMuX21pbmltdW1SZWNv
cmRUaW1lID0gLTE7Ci0gICAgICAgIHRoaXMuX2xheW91dEludmFsaWRhdGVTdGFjayA9IHt9Owot
ICAgICAgICB0aGlzLl9sYXN0U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24gPSB7fTsKLSAgICAg
ICAgdGhpcy5fd2ViU29ja2V0Q3JlYXRlUmVjb3JkcyA9IHt9OwotICAgICAgICB0aGlzLl9jb2Fs
ZXNjaW5nQnVja2V0cyA9IHt9OwotICAgIH0sCi0KLSAgICBhZGRGcmFtZTogZnVuY3Rpb24oZnJh
bWUpCi0gICAgewotICAgICAgICB0aGlzLl9mcmFtZXMucHVzaChmcmFtZSk7Ci0gICAgfSwKLQot
ICAgIGFkZFJlY29yZDogZnVuY3Rpb24ocmVjb3JkKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X21pbmltdW1SZWNvcmRUaW1lID09PSAtMSB8fCByZWNvcmQuc3RhcnRUaW1lIDwgdGhpcy5fbWlu
aW11bVJlY29yZFRpbWUpCi0gICAgICAgICAgICB0aGlzLl9taW5pbXVtUmVjb3JkVGltZSA9IFdl
Ykluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnN0YXJ0VGltZUluU2Vjb25kcyhyZWNvcmQpOwotCi0g
ICAgICAgIHZhciByZWNvcmRzOwotICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5UaW1lbGluZU1vZGVsLlJlY29yZFR5cGUuUHJvZ3JhbSkKLSAgICAgICAgICAgIHJlY29y
ZHMgPSByZWNvcmQuY2hpbGRyZW47Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlY29yZHMg
PSBbcmVjb3JkXTsKLQotICAgICAgICB2YXIgZm9ybWF0dGVkUmVjb3JkcyA9IFtdOwotICAgICAg
ICB2YXIgcmVjb3Jkc0NvdW50ID0gcmVjb3Jkcy5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcmVjb3Jkc0NvdW50OyArK2kpCi0gICAgICAgICAgICBmb3JtYXR0ZWRSZWNvcmRz
LnB1c2godGhpcy5faW5uZXJBZGRSZWNvcmQocmVjb3Jkc1tpXSwgdGhpcy5fcm9vdFJlY29yZCkp
OwotICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVjb3JkczsKLSAgICB9LAotCi0gICAgX2lubmVy
QWRkUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQsIHBhcmVudFJlY29yZCkKLSAgICB7Ci0gICAgICAg
IGNvbnN0IHJlY29yZFR5cGVzID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlw
ZTsKLSAgICAgICAgdmFyIGlzSGlkZGVuUmVjb3JkID0gcmVjb3JkLnR5cGUgaW4gV2ViSW5zcGVj
dG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuX2hpZGRlblJlY29yZHM7Ci0gICAgICAgIHZh
ciBvcmlnaW47Ci0gICAgICAgIHZhciBjb2FsZXNjaW5nQnVja2V0OwotCi0gICAgICAgIGlmICgh
aXNIaWRkZW5SZWNvcmQpIHsKLSAgICAgICAgICAgIHZhciBuZXdQYXJlbnRSZWNvcmQgPSB0aGlz
Ll9maW5kUGFyZW50UmVjb3JkKHJlY29yZCk7Ci0gICAgICAgICAgICBpZiAobmV3UGFyZW50UmVj
b3JkKSB7Ci0gICAgICAgICAgICAgICAgb3JpZ2luID0gcGFyZW50UmVjb3JkOwotICAgICAgICAg
ICAgICAgIHBhcmVudFJlY29yZCA9IG5ld1BhcmVudFJlY29yZDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChwYXJlbnRSZWNvcmQgPT09IHRoaXMuX3Jvb3RSZWNvcmQpIHsKLSAgICAg
ICAgICAgICAgICAvLyBPbiBtYWluIHRocmVhZCwgb25seSBjb2FsZXNjZSBpZiB0aGUgbGFzdCBl
dmVudCBpcyBvZiBzYW1lIHR5cGUuCi0gICAgICAgICAgICAgICAgY29hbGVzY2luZ0J1Y2tldCA9
IHJlY29yZC50aHJlYWQgPyByZWNvcmQudHlwZSA6ICJtYWluVGhyZWFkIjsKLSAgICAgICAgICAg
ICAgICB2YXIgY29hbGVzY2VkUmVjb3JkID0gdGhpcy5fZmluZENvYWxlc2NlZFBhcmVudChyZWNv
cmQsIGNvYWxlc2NpbmdCdWNrZXQpOwotICAgICAgICAgICAgICAgIGlmIChjb2FsZXNjZWRSZWNv
cmQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvcmlnaW4pCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvcmlnaW4gPSBwYXJlbnRSZWNvcmQ7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVu
dFJlY29yZCA9IGNvYWxlc2NlZFJlY29yZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY2hpbGRyZW4gPSByZWNvcmQuY2hpbGRyZW47
Ci0gICAgICAgIHZhciBzY3JpcHREZXRhaWxzOwotICAgICAgICBpZiAocmVjb3JkLmRhdGEgJiYg
cmVjb3JkLmRhdGFbInNjcmlwdE5hbWUiXSkgewotICAgICAgICAgICAgc2NyaXB0RGV0YWlscyA9
IHsKLSAgICAgICAgICAgICAgICBzY3JpcHROYW1lOiByZWNvcmQuZGF0YVsic2NyaXB0TmFtZSJd
LAotICAgICAgICAgICAgICAgIHNjcmlwdExpbmU6IHJlY29yZC5kYXRhWyJzY3JpcHRMaW5lIl0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoKHJlY29yZC50eXBlID09
PSByZWNvcmRUeXBlcy5UaW1lckZpcmUgfHwgcmVjb3JkLnR5cGUgPT09IHJlY29yZFR5cGVzLkZp
cmVBbmltYXRpb25GcmFtZSkgJiYgY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICB2YXIgY2hpbGRSZWNvcmQgPSBjaGlsZHJlblswXTsKLSAgICAgICAgICAgIGlmIChj
aGlsZFJlY29yZC50eXBlID09PSByZWNvcmRUeXBlcy5GdW5jdGlvbkNhbGwpIHsKLSAgICAgICAg
ICAgICAgICBzY3JpcHREZXRhaWxzID0gewotICAgICAgICAgICAgICAgICAgICBzY3JpcHROYW1l
OiBjaGlsZFJlY29yZC5kYXRhWyJzY3JpcHROYW1lIl0sCi0gICAgICAgICAgICAgICAgICAgIHNj
cmlwdExpbmU6IGNoaWxkUmVjb3JkLmRhdGFbInNjcmlwdExpbmUiXQotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZFJlY29yZC5jaGlsZHJlbi5jb25j
YXQoY2hpbGRyZW4uc2xpY2UoMSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIGZvcm1hdHRlZFJlY29yZCA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50
YXRpb25Nb2RlbC5SZWNvcmQodGhpcywgcmVjb3JkLCBwYXJlbnRSZWNvcmQsIG9yaWdpbiwgc2Ny
aXB0RGV0YWlscywgaXNIaWRkZW5SZWNvcmQpOwotCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3Iu
VGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5pc0V2ZW50RGl2aWRlcihmb3JtYXR0ZWRSZWNvcmQp
KQotICAgICAgICAgICAgdGhpcy5fZXZlbnREaXZpZGVyUmVjb3Jkcy5wdXNoKGZvcm1hdHRlZFJl
Y29yZCk7Ci0KLSAgICAgICAgaWYgKGlzSGlkZGVuUmVjb3JkKQotICAgICAgICAgICAgcmV0dXJu
IGZvcm1hdHRlZFJlY29yZDsKLQotICAgICAgICBmb3JtYXR0ZWRSZWNvcmQuY29sbGFwc2VkID0g
cGFyZW50UmVjb3JkID09PSB0aGlzLl9yb290UmVjb3JkOwotICAgICAgICBpZiAoY29hbGVzY2lu
Z0J1Y2tldCkKLSAgICAgICAgICAgIHRoaXMuX2NvYWxlc2NpbmdCdWNrZXRzW2NvYWxlc2NpbmdC
dWNrZXRdID0gZm9ybWF0dGVkUmVjb3JkOwotCi0gICAgICAgIHZhciBjaGlsZHJlbkNvdW50ID0g
Y2hpbGRyZW4gPyBjaGlsZHJlbi5sZW5ndGggOiAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNoaWxkcmVuQ291bnQ7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2lubmVyQWRkUmVjb3Jk
KGNoaWxkcmVuW2ldLCBmb3JtYXR0ZWRSZWNvcmQpOwotCi0gICAgICAgIGZvcm1hdHRlZFJlY29y
ZC5jYWxjdWxhdGVBZ2dyZWdhdGVkU3RhdHMoKTsKLQotICAgICAgICBpZiAob3JpZ2luKQotICAg
ICAgICAgICAgdGhpcy5fdXBkYXRlQW5jZXN0b3JTdGF0cyhmb3JtYXR0ZWRSZWNvcmQpOwotCi0g
ICAgICAgIGlmIChwYXJlbnRSZWNvcmQuY29hbGVzY2VkICYmIHBhcmVudFJlY29yZC5zdGFydFRp
bWUgPiBmb3JtYXR0ZWRSZWNvcmQuc3RhcnRUaW1lKQotICAgICAgICAgICAgcGFyZW50UmVjb3Jk
Ll9yZWNvcmQuc3RhcnRUaW1lID0gcmVjb3JkLnN0YXJ0VGltZTsKLQotICAgICAgICBvcmlnaW4g
PSBmb3JtYXR0ZWRSZWNvcmQub3JpZ2luKCk7Ci0gICAgICAgIGlmICghb3JpZ2luLmlzUm9vdCgp
ICYmICFvcmlnaW4uY29hbGVzY2VkKQotICAgICAgICAgICAgb3JpZ2luLnNlbGZUaW1lIC09IGZv
cm1hdHRlZFJlY29yZC5lbmRUaW1lIC0gZm9ybWF0dGVkUmVjb3JkLnN0YXJ0VGltZTsKLSAgICAg
ICAgcmV0dXJuIGZvcm1hdHRlZFJlY29yZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNvcmR9IHJlY29y
ZAotICAgICAqLwotICAgIF91cGRhdGVBbmNlc3RvclN0YXRzOiBmdW5jdGlvbihyZWNvcmQpCi0g
ICAgewotICAgICAgICB2YXIgbGFzdENoaWxkRW5kVGltZSA9IHJlY29yZC5sYXN0Q2hpbGRFbmRU
aW1lOwotICAgICAgICB2YXIgYWdncmVnYXRlZFN0YXRzID0gcmVjb3JkLmFnZ3JlZ2F0ZWRTdGF0
czsKLSAgICAgICAgZm9yICh2YXIgY3VycmVudFJlY29yZCA9IHJlY29yZC5wYXJlbnQ7IGN1cnJl
bnRSZWNvcmQgJiYgIWN1cnJlbnRSZWNvcmQuaXNSb290KCk7IGN1cnJlbnRSZWNvcmQgPSBjdXJy
ZW50UmVjb3JkLnBhcmVudCkgewotICAgICAgICAgICAgY3VycmVudFJlY29yZC5fY3B1VGltZSAr
PSByZWNvcmQuX2NwdVRpbWU7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFJlY29yZC5sYXN0Q2hp
bGRFbmRUaW1lIDwgbGFzdENoaWxkRW5kVGltZSkKLSAgICAgICAgICAgICAgICBjdXJyZW50UmVj
b3JkLmxhc3RDaGlsZEVuZFRpbWUgPSBsYXN0Q2hpbGRFbmRUaW1lOwotICAgICAgICAgICAgZm9y
ICh2YXIgY2F0ZWdvcnkgaW4gYWdncmVnYXRlZFN0YXRzKQotICAgICAgICAgICAgICAgIGN1cnJl
bnRSZWNvcmQuYWdncmVnYXRlZFN0YXRzW2NhdGVnb3J5XSArPSBhZ2dyZWdhdGVkU3RhdHNbY2F0
ZWdvcnldOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSByZWNvcmQKLSAgICAgKiBAcGFyYW0ge1N0cmluZ30gYnVja2V0Ci0gICAgICogQHJldHVy
biB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuUmVjb3JkP30KLSAgICAg
Ki8KLSAgICBfZmluZENvYWxlc2NlZFBhcmVudDogZnVuY3Rpb24ocmVjb3JkLCBidWNrZXQpCi0g
ICAgewotICAgICAgICBjb25zdCBjb2FsZXNjaW5nVGhyZXNob2xkU2Vjb25kcyA9IDAuMDAxOwot
Ci0gICAgICAgIHZhciBsYXN0UmVjb3JkID0gdGhpcy5fY29hbGVzY2luZ0J1Y2tldHNbYnVja2V0
XTsKLSAgICAgICAgdmFyIHN0YXJ0VGltZSA9IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnN0
YXJ0VGltZUluU2Vjb25kcyhyZWNvcmQpOwotICAgICAgICB2YXIgZW5kVGltZSA9IFdlYkluc3Bl
Y3Rvci5UaW1lbGluZU1vZGVsLmVuZFRpbWVJblNlY29uZHMocmVjb3JkKTsKLSAgICAgICAgaWYg
KCFsYXN0UmVjb3JkIHx8IGxhc3RSZWNvcmQudHlwZSAhPT0gcmVjb3JkLnR5cGUpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKGxhc3RSZWNvcmQuZW5kVGltZSArIGNvYWxl
c2NpbmdUaHJlc2hvbGRTZWNvbmRzIDwgc3RhcnRUaW1lKQotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgIGlmIChlbmRUaW1lICsgY29hbGVzY2luZ1RocmVzaG9sZFNlY29uZHMgPCBs
YXN0UmVjb3JkLnN0YXJ0VGltZSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBp
ZiAobGFzdFJlY29yZC5wYXJlbnQuY29hbGVzY2VkKQotICAgICAgICAgICAgcmV0dXJuIGxhc3RS
ZWNvcmQucGFyZW50OwotICAgICAgICAvLyBEbyBub3QgYWdncmVnYXRlIHJlY29yZHMgdGhhdCB3
ZXJlIHJlcGFyZW50ZWQuCi0gICAgICAgIGlmIChsYXN0UmVjb3JkLnBhcmVudCAhPT0gdGhpcy5f
cm9vdFJlY29yZCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gdGhp
cy5fcmVwbGFjZVdpdGhDb2FsZXNjZWRSZWNvcmQobGFzdFJlY29yZCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9k
ZWwuUmVjb3JkfSByZWNvcmQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVQ
cmVzZW50YXRpb25Nb2RlbC5SZWNvcmR9Ci0gICAgICovCi0gICAgX3JlcGxhY2VXaXRoQ29hbGVz
Y2VkUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpCi0gICAgewotICAgICAgICB2YXIgcmF3UmVjb3Jk
ID0gewotICAgICAgICAgICAgdHlwZTogcmVjb3JkLl9yZWNvcmQudHlwZSwKLSAgICAgICAgICAg
IHN0YXJ0VGltZTogcmVjb3JkLl9yZWNvcmQuc3RhcnRUaW1lLAotICAgICAgICAgICAgZW5kVGlt
ZTogcmVjb3JkLl9yZWNvcmQuZW5kVGltZSwKLSAgICAgICAgICAgIGRhdGE6IHsgfQotICAgICAg
ICB9OwotICAgICAgICBpZiAocmVjb3JkLl9yZWNvcmQudGhyZWFkKQotICAgICAgICAgICAgcmF3
UmVjb3JkLnRocmVhZCA9ICJhZ2dyZWdhdGVkIjsKLSAgICAgICAgdmFyIGNvYWxlc2NlZFJlY29y
ZCA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNvcmQodGhp
cywgcmF3UmVjb3JkLCBudWxsLCBudWxsLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgIHZhciBwYXJl
bnQgPSByZWNvcmQucGFyZW50OwotCi0gICAgICAgIGNvYWxlc2NlZFJlY29yZC5jb2FsZXNjZWQg
PSB0cnVlOwotICAgICAgICBjb2FsZXNjZWRSZWNvcmQuY29sbGFwc2VkID0gdHJ1ZTsKLSAgICAg
ICAgY29hbGVzY2VkUmVjb3JkLl9jaGlsZHJlbi5wdXNoKHJlY29yZCk7Ci0gICAgICAgIHJlY29y
ZC5wYXJlbnQgPSBjb2FsZXNjZWRSZWNvcmQ7Ci0gICAgICAgIGNvYWxlc2NlZFJlY29yZC5jYWxj
dWxhdGVBZ2dyZWdhdGVkU3RhdHMoKTsKLSAgICAgICAgaWYgKHJlY29yZC5oYXNXYXJuaW5nIHx8
IHJlY29yZC5jaGlsZEhhc1dhcm5pbmcpCi0gICAgICAgICAgICBjb2FsZXNjZWRSZWNvcmQuY2hp
bGRIYXNXYXJuaW5nID0gdHJ1ZTsKLQotICAgICAgICBjb2FsZXNjZWRSZWNvcmQucGFyZW50ID0g
cGFyZW50OwotICAgICAgICBwYXJlbnQuX2NoaWxkcmVuW3BhcmVudC5fY2hpbGRyZW4uaW5kZXhP
ZihyZWNvcmQpXSA9IGNvYWxlc2NlZFJlY29yZDsKLSAgICAgICAgcmV0dXJuIGNvYWxlc2NlZFJl
Y29yZDsKLSAgICB9LAotCi0gICAgX2ZpbmRQYXJlbnRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZ2x1ZVJlY29yZHMpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgdmFyIHJlY29yZFR5cGVzID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TW9kZWwuUmVjb3JkVHlwZTsKLQotICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7Ci0gICAg
ICAgIGNhc2UgcmVjb3JkVHlwZXMuUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2U6Ci0gICAgICAgIGNh
c2UgcmVjb3JkVHlwZXMuUmVzb3VyY2VGaW5pc2g6Ci0gICAgICAgIGNhc2UgcmVjb3JkVHlwZXMu
UmVzb3VyY2VSZWNlaXZlZERhdGE6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VuZFJlcXVl
c3RSZWNvcmRzW3JlY29yZC5kYXRhWyJyZXF1ZXN0SWQiXV07Ci0KLSAgICAgICAgY2FzZSByZWNv
cmRUeXBlcy5SZXNvdXJjZVNlbmRSZXF1ZXN0OgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jv
b3RSZWNvcmQ7Ci0KLSAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5UaW1lckZpcmU6Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5fdGltZXJSZWNvcmRzW3JlY29yZC5kYXRhWyJ0aW1lcklkIl1dOwot
Ci0gICAgICAgIGNhc2UgcmVjb3JkVHlwZXMuUmVzb3VyY2VTZW5kUmVxdWVzdDoKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRSZXNvdXJjZVJlcXVlc3RzW3JlY29yZC5kYXRhWyJ1
cmwiXV07Ci0KLSAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5GaXJlQW5pbWF0aW9uRnJhbWU6Ci0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdEFuaW1hdGlvbkZyYW1lUmVjb3Jkc1tyZWNv
cmQuZGF0YVsiaWQiXV07Ci0KLSAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5UaW1lOgotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3Jvb3RSZWNvcmQ7Ci0KLSAgICAgICAgY2FzZSByZWNvcmRUeXBl
cy5UaW1lRW5kOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVSZWNvcmRzW3JlY29yZC5k
YXRhWyJtZXNzYWdlIl1dOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHNldEdsdWVSZWNvcmRz
OiBmdW5jdGlvbihnbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy5fZ2x1ZVJlY29yZHMgPSBnbHVl
OwotICAgIH0sCi0KLSAgICBpbnZhbGlkYXRlRmlsdGVyZWRSZWNvcmRzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBkZWxldGUgdGhpcy5fZmlsdGVyZWRSZWNvcmRzOwotICAgIH0sCi0KLSAg
ICBmaWx0ZXJlZFJlY29yZHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9m
aWx0ZXJlZFJlY29yZHMpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRSZWNvcmRz
OwotCi0gICAgICAgIHZhciByZWNvcmRzSW5XaW5kb3cgPSBbXTsKLQotICAgICAgICB2YXIgc3Rh
Y2sgPSBbe2NoaWxkcmVuOiB0aGlzLl9yb290UmVjb3JkLmNoaWxkcmVuLCBpbmRleDogMCwgcGFy
ZW50SXNDb2xsYXBzZWQ6IGZhbHNlfV07Ci0gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsK
LSAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwotICAgICAg
ICAgICAgdmFyIHJlY29yZHMgPSBlbnRyeS5jaGlsZHJlbjsKLSAgICAgICAgICAgIGlmIChyZWNv
cmRzICYmIGVudHJ5LmluZGV4IDwgcmVjb3Jkcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg
dmFyIHJlY29yZCA9IHJlY29yZHNbZW50cnkuaW5kZXhdOwotICAgICAgICAgICAgICAgICArK2Vu
dHJ5LmluZGV4OwotCi0gICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmlzaWJsZShyZWNvcmQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICArK3JlY29yZC5wYXJlbnQuX2ludmlzaWJsZUNoaWxk
cmVuQ291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LnBhcmVudElzQ29sbGFw
c2VkKQotICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNJbldpbmRvdy5wdXNoKHJlY29y
ZCk7Ci0gICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICByZWNvcmQuX2ludmlz
aWJsZUNoaWxkcmVuQ291bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goe2No
aWxkcmVuOiByZWNvcmQuY2hpbGRyZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4OiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJc0NvbGxhcHNlZDog
KGVudHJ5LnBhcmVudElzQ29sbGFwc2VkIHx8IHJlY29yZC5jb2xsYXBzZWQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZWNvcmQ6IHJlY29yZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2luZG93TGVuZ3RoQmVmb3JlQ2hpbGRyZW5UcmF2ZXJzYWw6IHJlY29y
ZHNJbldpbmRvdy5sZW5ndGh9KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnBhcmVudFJlY29yZCkK
LSAgICAgICAgICAgICAgICAgICAgZW50cnkucGFyZW50UmVjb3JkLl92aXNpYmxlQ2hpbGRyZW5D
b3VudCA9IHJlY29yZHNJbldpbmRvdy5sZW5ndGggLSBlbnRyeS53aW5kb3dMZW5ndGhCZWZvcmVD
aGlsZHJlblRyYXZlcnNhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRo
aXMuX2ZpbHRlcmVkUmVjb3JkcyA9IHJlY29yZHNJbldpbmRvdzsKLSAgICAgICAgcmV0dXJuIHJl
Y29yZHNJbldpbmRvdzsKLSAgICB9LAotCi0gICAgZmlsdGVyZWRGcmFtZXM6IGZ1bmN0aW9uKHN0
YXJ0VGltZSwgZW5kVGltZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVTdGFydFRp
bWUodmFsdWUsIG9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHZhbHVlIC0g
b2JqZWN0LnN0YXJ0VGltZTsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBjb21wYXJlRW5k
VGltZSh2YWx1ZSwgb2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUg
LSBvYmplY3QuZW5kVGltZTsKLSAgICAgICAgfQotICAgICAgICB2YXIgZmlyc3RGcmFtZSA9IGlu
c2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihzdGFydFRpbWUsIHRo
aXMuX2ZyYW1lcywgY29tcGFyZVN0YXJ0VGltZSk7Ci0gICAgICAgIHZhciBsYXN0RnJhbWUgPSBp
bnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24oZW5kVGltZSwgdGhp
cy5fZnJhbWVzLCBjb21wYXJlRW5kVGltZSk7Ci0gICAgICAgIHdoaWxlIChsYXN0RnJhbWUgPCB0
aGlzLl9mcmFtZXMubGVuZ3RoICYmIHRoaXMuX2ZyYW1lc1tsYXN0RnJhbWVdLmVuZFRpbWUgPD0g
ZW5kVGltZSkKLSAgICAgICAgICAgICsrbGFzdEZyYW1lOwotICAgICAgICByZXR1cm4gdGhpcy5f
ZnJhbWVzLnNsaWNlKGZpcnN0RnJhbWUsIGxhc3RGcmFtZSk7Ci0gICAgfSwKLQotICAgIGV2ZW50
RGl2aWRlclJlY29yZHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9l
dmVudERpdmlkZXJSZWNvcmRzOwotICAgIH0sCi0KLSAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKHJl
Y29yZCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCF0aGlzLl9maWx0ZXJzW2ldLmFjY2VwdChy
ZWNvcmQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHt7dGFza3M6
ICFBcnJheS48e3N0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXJ9PiwgZmlyc3RUYXNr
SW5kZXg6IG51bWJlciwgbGFzdFRhc2tJbmRleDogbnVtYmVyfX0gaW5mbwotICAgICAqIEByZXR1
cm4geyFFbGVtZW50fQotICAgICAqLwotICAgIGdlbmVyYXRlTWFpblRocmVhZEJhclBvcHVwQ29u
dGVudDogZnVuY3Rpb24oaW5mbykKLSAgICB7Ci0gICAgICAgIHZhciBmaXJzdFRhc2tJbmRleCA9
IGluZm8uZmlyc3RUYXNrSW5kZXg7Ci0gICAgICAgIHZhciBsYXN0VGFza0luZGV4ID0gaW5mby5s
YXN0VGFza0luZGV4OwotICAgICAgICB2YXIgdGFza3MgPSBpbmZvLnRhc2tzOwotICAgICAgICB2
YXIgbWVzc2FnZUNvdW50ID0gbGFzdFRhc2tJbmRleCAtIGZpcnN0VGFza0luZGV4ICsgMTsKLSAg
ICAgICAgdmFyIGNwdVRpbWUgPSAwOwotCi0gICAgICAgIGZvciAodmFyIGkgPSBmaXJzdFRhc2tJ
bmRleDsgaSA8PSBsYXN0VGFza0luZGV4OyArK2kpIHsKLSAgICAgICAgICAgIHZhciB0YXNrID0g
dGFza3NbaV07Ci0gICAgICAgICAgICBjcHVUaW1lICs9IHRhc2suZW5kVGltZSAtIHRhc2suc3Rh
cnRUaW1lOwotICAgICAgICB9Ci0gICAgICAgIHZhciBzdGFydFRpbWUgPSB0YXNrc1tmaXJzdFRh
c2tJbmRleF0uc3RhcnRUaW1lOwotICAgICAgICB2YXIgZW5kVGltZSA9IHRhc2tzW2xhc3RUYXNr
SW5kZXhdLmVuZFRpbWU7Ci0gICAgICAgIHZhciBkdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRp
bWU7Ci0gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9taW5pbXVtUmVjb3JkVGltZTsKLQotICAg
ICAgICB2YXIgY29udGVudEhlbHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3ZlckNvbnRlbnRI
ZWxwZXIoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDUFUiKSk7Ci0gICAgICAgIHZhciBkdXJhdGlv
blRleHQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzIChhdCAlcykiLCBOdW1iZXIuc2Vjb25k
c1RvU3RyaW5nKGR1cmF0aW9uLCB0cnVlKSwKLSAgICAgICAgICAgIE51bWJlci5zZWNvbmRzVG9T
dHJpbmcoc3RhcnRUaW1lIC0gb2Zmc2V0LCB0cnVlKSk7Ci0gICAgICAgIGNvbnRlbnRIZWxwZXIu
YXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkR1cmF0aW9uIiksIGR1cmF0aW9u
VGV4dCk7Ci0gICAgICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkNQVSB0aW1lIiksIE51bWJlci5zZWNvbmRzVG9TdHJpbmcoY3B1VGltZSwgdHJ1
ZSkpOwotICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJNZXNzYWdlIENvdW50IiksIG1lc3NhZ2VDb3VudCk7Ci0gICAgICAgIHJldHVybiBj
b250ZW50SGVscGVyLmNvbnRlbnRUYWJsZSgpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0g
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsfSBwcmVzZW50
YXRpb25Nb2RlbAotICogQHBhcmFtIHtPYmplY3R9IHJlY29yZAotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNvcmR9IHBhcmVudFJlY29yZAotICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNvcmR9IG9y
aWdpbgotICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBzY3JpcHREZXRhaWxzCi0gKiBAcGFy
YW0ge2Jvb2xlYW59IGhpZGRlbgotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRp
b25Nb2RlbC5SZWNvcmQgPSBmdW5jdGlvbihwcmVzZW50YXRpb25Nb2RlbCwgcmVjb3JkLCBwYXJl
bnRSZWNvcmQsIG9yaWdpbiwgc2NyaXB0RGV0YWlscywgaGlkZGVuKQotewotICAgIHRoaXMuX2xp
bmtpZmllciA9IHByZXNlbnRhdGlvbk1vZGVsLl9saW5raWZpZXI7Ci0gICAgdGhpcy5fYWdncmVn
YXRlZFN0YXRzID0ge307Ci0gICAgdGhpcy5fcmVjb3JkID0gcmVjb3JkOwotICAgIHRoaXMuX2No
aWxkcmVuID0gW107Ci0gICAgaWYgKCFoaWRkZW4gJiYgcGFyZW50UmVjb3JkKSB7Ci0gICAgICAg
IHRoaXMucGFyZW50ID0gcGFyZW50UmVjb3JkOwotICAgICAgICBpZiAodGhpcy5pc0JhY2tncm91
bmQpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5p
bnNlcnRSZXRyb3NwZWN0aXZlUmVjb3JkKHBhcmVudFJlY29yZCwgdGhpcyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBhcmVudFJlY29yZC5jaGlsZHJlbi5wdXNoKHRoaXMpOwotICAgIH0K
LSAgICBpZiAob3JpZ2luKQotICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0KLSAgICB0
aGlzLl9zZWxmVGltZSA9IHRoaXMuZW5kVGltZSAtIHRoaXMuc3RhcnRUaW1lOwotICAgIHRoaXMu
X2xhc3RDaGlsZEVuZFRpbWUgPSB0aGlzLmVuZFRpbWU7Ci0gICAgdGhpcy5fc3RhcnRUaW1lT2Zm
c2V0ID0gdGhpcy5zdGFydFRpbWUgLSBwcmVzZW50YXRpb25Nb2RlbC5fbWluaW11bVJlY29yZFRp
bWU7Ci0KLSAgICBpZiAocmVjb3JkLmRhdGEgJiYgcmVjb3JkLmRhdGFbInVybCJdKQotICAgICAg
ICB0aGlzLnVybCA9IHJlY29yZC5kYXRhWyJ1cmwiXTsKLSAgICBpZiAoc2NyaXB0RGV0YWlscykg
ewotICAgICAgICB0aGlzLnNjcmlwdE5hbWUgPSBzY3JpcHREZXRhaWxzLnNjcmlwdE5hbWU7Ci0g
ICAgICAgIHRoaXMuc2NyaXB0TGluZSA9IHNjcmlwdERldGFpbHMuc2NyaXB0TGluZTsKLSAgICB9
Ci0gICAgaWYgKHBhcmVudFJlY29yZCAmJiBwYXJlbnRSZWNvcmQuY2FsbFNpdGVTdGFja1RyYWNl
KQotICAgICAgICB0aGlzLmNhbGxTaXRlU3RhY2tUcmFjZSA9IHBhcmVudFJlY29yZC5jYWxsU2l0
ZVN0YWNrVHJhY2U7Ci0KLSAgICB2YXIgcmVjb3JkVHlwZXMgPSBXZWJJbnNwZWN0b3IuVGltZWxp
bmVNb2RlbC5SZWNvcmRUeXBlOwotICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKLSAgICBjYXNl
IHJlY29yZFR5cGVzLlJlc291cmNlU2VuZFJlcXVlc3Q6Ci0gICAgICAgIC8vIE1ha2UgcmVzb3Vy
Y2UgcmVjZWl2ZSByZWNvcmQgbGFzdCBzaW5jZSByZXF1ZXN0IHdhcyBzZW50OyBtYWtlIGZpbmlz
aCByZWNvcmQgbGFzdCBzaW5jZSByZXNwb25zZSByZWNlaXZlZC4KLSAgICAgICAgcHJlc2VudGF0
aW9uTW9kZWwuX3NlbmRSZXF1ZXN0UmVjb3Jkc1tyZWNvcmQuZGF0YVsicmVxdWVzdElkIl1dID0g
dGhpczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIHJlY29yZFR5cGVzLlNjaGVkdWxlUmVz
b3VyY2VSZXF1ZXN0OgotICAgICAgICBwcmVzZW50YXRpb25Nb2RlbC5fc2NoZWR1bGVkUmVzb3Vy
Y2VSZXF1ZXN0c1tyZWNvcmQuZGF0YVsidXJsIl1dID0gdGhpczsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIHJlY29yZFR5cGVzLlJlc291cmNlUmVjZWl2ZVJlc3BvbnNlOgotICAgICAgICB2
YXIgc2VuZFJlcXVlc3RSZWNvcmQgPSBwcmVzZW50YXRpb25Nb2RlbC5fc2VuZFJlcXVlc3RSZWNv
cmRzW3JlY29yZC5kYXRhWyJyZXF1ZXN0SWQiXV07Ci0gICAgICAgIGlmIChzZW5kUmVxdWVzdFJl
Y29yZCkgeyAvLyBGYWxzZSBpZiB3ZSBzdGFydGVkIGluc3RydW1lbnRhdGlvbiBpbiB0aGUgbWlk
ZGxlIG9mIHJlcXVlc3QuCi0gICAgICAgICAgICB0aGlzLnVybCA9IHNlbmRSZXF1ZXN0UmVjb3Jk
LnVybDsKLSAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgcmVzb3VyY2UgaW4gdGhlIGNv
bGxlY3Rpb24sIHJlY2FsY3VsYXRlIGRldGFpbHMgaW4gb3JkZXIgdG8gZGlzcGxheSBzaG9ydCB1
cmwuCi0gICAgICAgICAgICBzZW5kUmVxdWVzdFJlY29yZC5fcmVmcmVzaERldGFpbHMoKTsKLSAg
ICAgICAgICAgIGlmIChzZW5kUmVxdWVzdFJlY29yZC5wYXJlbnQgIT09IHByZXNlbnRhdGlvbk1v
ZGVsLl9yb290UmVjb3JkICYmIHNlbmRSZXF1ZXN0UmVjb3JkLnBhcmVudC50eXBlID09PSByZWNv
cmRUeXBlcy5TY2hlZHVsZVJlc291cmNlUmVxdWVzdCkKLSAgICAgICAgICAgICAgICBzZW5kUmVx
dWVzdFJlY29yZC5wYXJlbnQuX3JlZnJlc2hEZXRhaWxzKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIHJlY29yZFR5cGVzLlJlc291cmNlUmVjZWl2ZWREYXRhOgotICAg
IGNhc2UgcmVjb3JkVHlwZXMuUmVzb3VyY2VGaW5pc2g6Ci0gICAgICAgIHZhciBzZW5kUmVxdWVz
dFJlY29yZCA9IHByZXNlbnRhdGlvbk1vZGVsLl9zZW5kUmVxdWVzdFJlY29yZHNbcmVjb3JkLmRh
dGFbInJlcXVlc3RJZCJdXTsKLSAgICAgICAgaWYgKHNlbmRSZXF1ZXN0UmVjb3JkKSAvLyBGYWxz
ZSBmb3IgbWFpbiByZXNvdXJjZS4KLSAgICAgICAgICAgIHRoaXMudXJsID0gc2VuZFJlcXVlc3RS
ZWNvcmQudXJsOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgcmVjb3JkVHlwZXMuVGltZXJJ
bnN0YWxsOgotICAgICAgICB0aGlzLnRpbWVvdXQgPSByZWNvcmQuZGF0YVsidGltZW91dCJdOwot
ICAgICAgICB0aGlzLnNpbmdsZVNob3QgPSByZWNvcmQuZGF0YVsic2luZ2xlU2hvdCJdOwotICAg
ICAgICBwcmVzZW50YXRpb25Nb2RlbC5fdGltZXJSZWNvcmRzW3JlY29yZC5kYXRhWyJ0aW1lcklk
Il1dID0gdGhpczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIHJlY29yZFR5cGVzLlRpbWVy
RmlyZToKLSAgICAgICAgdmFyIHRpbWVySW5zdGFsbGVkUmVjb3JkID0gcHJlc2VudGF0aW9uTW9k
ZWwuX3RpbWVyUmVjb3Jkc1tyZWNvcmQuZGF0YVsidGltZXJJZCJdXTsKLSAgICAgICAgaWYgKHRp
bWVySW5zdGFsbGVkUmVjb3JkKSB7Ci0gICAgICAgICAgICB0aGlzLmNhbGxTaXRlU3RhY2tUcmFj
ZSA9IHRpbWVySW5zdGFsbGVkUmVjb3JkLnN0YWNrVHJhY2U7Ci0gICAgICAgICAgICB0aGlzLnRp
bWVvdXQgPSB0aW1lckluc3RhbGxlZFJlY29yZC50aW1lb3V0OwotICAgICAgICAgICAgdGhpcy5z
aW5nbGVTaG90ID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuc2luZ2xlU2hvdDsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgcmVjb3JkVHlwZXMuUmVxdWVzdEFuaW1hdGlvbkZy
YW1lOgotICAgICAgICBwcmVzZW50YXRpb25Nb2RlbC5fcmVxdWVzdEFuaW1hdGlvbkZyYW1lUmVj
b3Jkc1tyZWNvcmQuZGF0YVsiaWQiXV0gPSB0aGlzOwotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgcmVjb3JkVHlwZXMuRmlyZUFuaW1hdGlvbkZyYW1lOgotICAgICAgICB2YXIgcmVxdWVzdEFu
aW1hdGlvblJlY29yZCA9IHByZXNlbnRhdGlvbk1vZGVsLl9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVS
ZWNvcmRzW3JlY29yZC5kYXRhWyJpZCJdXTsKLSAgICAgICAgaWYgKHJlcXVlc3RBbmltYXRpb25S
ZWNvcmQpCi0gICAgICAgICAgICB0aGlzLmNhbGxTaXRlU3RhY2tUcmFjZSA9IHJlcXVlc3RBbmlt
YXRpb25SZWNvcmQuc3RhY2tUcmFjZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIHJlY29y
ZFR5cGVzLlRpbWU6Ci0gICAgICAgIHZhciBtZXNzYWdlID0gcmVjb3JkLmRhdGFbIm1lc3NhZ2Ui
XTsKLSAgICAgICAgdmFyIG9sZFJlZmVyZW5jZSA9IHByZXNlbnRhdGlvbk1vZGVsLl90aW1lUmVj
b3Jkc1ttZXNzYWdlXTsKLSAgICAgICAgaWYgKG9sZFJlZmVyZW5jZSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBwcmVzZW50YXRpb25Nb2RlbC5fdGltZVJlY29yZHNbbWVzc2FnZV0gPSB0
aGlzOwotICAgICAgICBpZiAob3JpZ2luKQotICAgICAgICAgICAgcHJlc2VudGF0aW9uTW9kZWwu
X3RpbWVSZWNvcmRTdGFjay5wdXNoKHRoaXMpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
cmVjb3JkVHlwZXMuVGltZUVuZDoKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSByZWNvcmQuZGF0YVsi
bWVzc2FnZSJdOwotICAgICAgICB2YXIgdGltZVJlY29yZCA9IHByZXNlbnRhdGlvbk1vZGVsLl90
aW1lUmVjb3Jkc1ttZXNzYWdlXTsKLSAgICAgICAgZGVsZXRlIHByZXNlbnRhdGlvbk1vZGVsLl90
aW1lUmVjb3Jkc1ttZXNzYWdlXTsKLSAgICAgICAgaWYgKHRpbWVSZWNvcmQpIHsKLSAgICAgICAg
ICAgIHRoaXMudGltZVJlY29yZCA9IHRpbWVSZWNvcmQ7Ci0gICAgICAgICAgICB0aW1lUmVjb3Jk
LnRpbWVFbmRSZWNvcmQgPSB0aGlzOwotICAgICAgICAgICAgdmFyIGludGVydmFsRHVyYXRpb24g
PSB0aGlzLnN0YXJ0VGltZSAtIHRpbWVSZWNvcmQuc3RhcnRUaW1lOwotICAgICAgICAgICAgdGhp
cy5pbnRlcnZhbER1cmF0aW9uID0gaW50ZXJ2YWxEdXJhdGlvbjsKLSAgICAgICAgICAgIHRpbWVS
ZWNvcmQuaW50ZXJ2YWxEdXJhdGlvbiA9IGludGVydmFsRHVyYXRpb247Ci0gICAgICAgICAgICBp
ZiAoIW9yaWdpbikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHZhciByZWNv
cmRTdGFjayA9IHByZXNlbnRhdGlvbk1vZGVsLl90aW1lUmVjb3JkU3RhY2s7Ci0gICAgICAgICAg
ICByZWNvcmRTdGFjay5zcGxpY2UocmVjb3JkU3RhY2suaW5kZXhPZih0aW1lUmVjb3JkKSwgMSk7
Ci0gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IHJlY29yZFN0YWNrLmxlbmd0aDsgaW5kZXg7
IC0taW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgb3BlblJlY29yZCA9IHJlY29yZFN0YWNr
W2luZGV4IC0gMV07Ci0gICAgICAgICAgICAgICAgaWYgKG9wZW5SZWNvcmQuc3RhcnRUaW1lID4g
dGltZVJlY29yZC5zdGFydFRpbWUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmFkb3B0
UmVjb3JkKG9wZW5SZWNvcmQsIHRpbWVSZWNvcmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSByZWNv
cmRUeXBlcy5TY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbjoKLSAgICAgICAgcHJlc2VudGF0aW9u
TW9kZWwuX2xhc3RTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvblt0aGlzLmZyYW1lSWRdID0gdGhp
czsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIHJlY29yZFR5cGVzLlJlY2FsY3VsYXRlU3R5
bGVzOgotICAgICAgICB2YXIgc2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb25SZWNvcmQgPSBwcmVz
ZW50YXRpb25Nb2RlbC5fbGFzdFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uW3RoaXMuZnJhbWVJ
ZF07Ci0gICAgICAgIGlmICghc2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb25SZWNvcmQpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgdGhpcy5jYWxsU2l0ZVN0YWNrVHJhY2UgPSBzY2hlZHVs
ZVN0eWxlUmVjYWxjdWxhdGlvblJlY29yZC5zdGFja1RyYWNlOwotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgcmVjb3JkVHlwZXMuSW52YWxpZGF0ZUxheW91dDoKLSAgICAgICAgLy8gQ29uc2lk
ZXIgc3R5bGUgcmVjYWxjdWxhdGlvbiBhcyBhIHJlYXNvbiBmb3IgbGF5b3V0IGludmFsaWRhdGlv
biwKLSAgICAgICAgLy8gYnV0IG9ubHkgaWYgd2UgaGFkIG5vIGVhcmxpZXIgbGF5b3V0IGludmFs
aWRhdGlvbiByZWNvcmRzLgotICAgICAgICB2YXIgc3R5bGVSZWNhbGNTdGFjazsKLSAgICAgICAg
aWYgKCFwcmVzZW50YXRpb25Nb2RlbC5fbGF5b3V0SW52YWxpZGF0ZVN0YWNrW3RoaXMuZnJhbWVJ
ZF0pIHsKLSAgICAgICAgICAgIGZvciAodmFyIG91dGVyUmVjb3JkID0gcGFyZW50UmVjb3JkOyBv
dXRlclJlY29yZDsgb3V0ZXJSZWNvcmQgPSByZWNvcmQucGFyZW50KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG91dGVyUmVjb3JkLnR5cGUgPT09IHJlY29yZFR5cGVzLlJlY2FsY3VsYXRlU3R5bGVz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVjYWxjU3RhY2sgPSBvdXRlclJlY29yZC5j
YWxsU2l0ZVN0YWNrVHJhY2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwcmVzZW50YXRpb25N
b2RlbC5fbGF5b3V0SW52YWxpZGF0ZVN0YWNrW3RoaXMuZnJhbWVJZF0gPSBzdHlsZVJlY2FsY1N0
YWNrIHx8IHRoaXMuc3RhY2tUcmFjZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIHJlY29y
ZFR5cGVzLkxheW91dDoKLSAgICAgICAgdmFyIGxheW91dEludmFsaWRhdGVTdGFjayA9IHByZXNl
bnRhdGlvbk1vZGVsLl9sYXlvdXRJbnZhbGlkYXRlU3RhY2tbdGhpcy5mcmFtZUlkXTsKLSAgICAg
ICAgaWYgKGxheW91dEludmFsaWRhdGVTdGFjaykKLSAgICAgICAgICAgIHRoaXMuY2FsbFNpdGVT
dGFja1RyYWNlID0gbGF5b3V0SW52YWxpZGF0ZVN0YWNrOwotICAgICAgICBpZiAodGhpcy5zdGFj
a1RyYWNlKQotICAgICAgICAgICAgdGhpcy5zZXRIYXNXYXJuaW5nKCk7Ci0gICAgICAgIHByZXNl
bnRhdGlvbk1vZGVsLl9sYXlvdXRJbnZhbGlkYXRlU3RhY2tbdGhpcy5mcmFtZUlkXSA9IG51bGw7
Ci0gICAgICAgIHRoaXMuaGlnaGxpZ2h0UXVhZCA9IHJlY29yZC5kYXRhLnJvb3Q7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSByZWNvcmRUeXBlcy5QYWludDoKLSAgICAgICAgdGhpcy5oaWdo
bGlnaHRRdWFkID0gcmVjb3JkLmRhdGEuY2xpcDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IHJlY29yZFR5cGVzLldlYlNvY2tldENyZWF0ZToKLSAgICAgICAgdGhpcy53ZWJTb2NrZXRVUkwg
PSByZWNvcmQuZGF0YVsidXJsIl07Ci0gICAgICAgIGlmICh0eXBlb2YgcmVjb3JkLmRhdGFbIndl
YlNvY2tldFByb3RvY29sIl0gIT09ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgdGhpcy53ZWJT
b2NrZXRQcm90b2NvbCA9IHJlY29yZC5kYXRhWyJ3ZWJTb2NrZXRQcm90b2NvbCJdOwotICAgICAg
ICBwcmVzZW50YXRpb25Nb2RlbC5fd2ViU29ja2V0Q3JlYXRlUmVjb3Jkc1tyZWNvcmQuZGF0YVsi
aWRlbnRpZmllciJdXSA9IHRoaXM7Ci0gICAgICAgIGJyZWFrOwotICAgCi0gICAgY2FzZSByZWNv
cmRUeXBlcy5XZWJTb2NrZXRTZW5kSGFuZHNoYWtlUmVxdWVzdDoKLSAgICBjYXNlIHJlY29yZFR5
cGVzLldlYlNvY2tldFJlY2VpdmVIYW5kc2hha2VSZXNwb25zZToKLSAgICBjYXNlIHJlY29yZFR5
cGVzLldlYlNvY2tldERlc3Ryb3k6Ci0gICAgICAgIHZhciB3ZWJTb2NrZXRDcmVhdGVSZWNvcmQg
PSBwcmVzZW50YXRpb25Nb2RlbC5fd2ViU29ja2V0Q3JlYXRlUmVjb3Jkc1tyZWNvcmQuZGF0YVsi
aWRlbnRpZmllciJdXTsKLSAgICAgICAgaWYgKHdlYlNvY2tldENyZWF0ZVJlY29yZCkgeyAvLyBG
YWxzZSBpZiB3ZSBzdGFydGVkIGluc3RydW1lbnRhdGlvbiBpbiB0aGUgbWlkZGxlIG9mIHJlcXVl
c3QuCi0gICAgICAgICAgICB0aGlzLndlYlNvY2tldFVSTCA9IHdlYlNvY2tldENyZWF0ZVJlY29y
ZC53ZWJTb2NrZXRVUkw7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHdlYlNvY2tldENyZWF0ZVJl
Y29yZC53ZWJTb2NrZXRQcm90b2NvbCAhPT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICAgICAg
dGhpcy53ZWJTb2NrZXRQcm90b2NvbCA9IHdlYlNvY2tldENyZWF0ZVJlY29yZC53ZWJTb2NrZXRQ
cm90b2NvbDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmFkb3B0UmVjb3JkID0gZnVuY3Rpb24obmV3
UGFyZW50LCByZWNvcmQpCi17Ci0gICAgcmVjb3JkLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UocmVj
b3JkLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHJlY29yZCkpOwotICAgIFdlYkluc3BlY3Rvci5U
aW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmluc2VydFJldHJvc3BlY3RpdmVSZWNvcmQobmV3UGFy
ZW50LCByZWNvcmQpOwotICAgIHJlY29yZC5wYXJlbnQgPSBuZXdQYXJlbnQ7Ci19Ci0KLVdlYklu
c3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmluc2VydFJldHJvc3BlY3RpdmVSZWNv
cmQgPSBmdW5jdGlvbihwYXJlbnQsIHJlY29yZCkKLXsKLSAgICBmdW5jdGlvbiBjb21wYXJlU3Rh
cnRUaW1lKHZhbHVlLCByZWNvcmQpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPCByZWNv
cmQuc3RhcnRUaW1lID8gLTEgOiAxOwotICAgIH0KLSAgICAKLSAgICBwYXJlbnQuY2hpbGRyZW4u
c3BsaWNlKGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihyZWNv
cmQuc3RhcnRUaW1lLCBwYXJlbnQuY2hpbGRyZW4sIGNvbXBhcmVTdGFydFRpbWUpLCAwLCByZWNv
cmQpOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNvcmQu
cHJvdG90eXBlID0gewotICAgIGdldCBsYXN0Q2hpbGRFbmRUaW1lKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9sYXN0Q2hpbGRFbmRUaW1lOwotICAgIH0sCi0KLSAgICBzZXQgbGFzdENo
aWxkRW5kVGltZSh0aW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5fbGFzdENoaWxkRW5kVGltZSA9
IHRpbWU7Ci0gICAgfSwKLQotICAgIGdldCBzZWxmVGltZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5jb2FsZXNjZWQgPyB0aGlzLl9sYXN0Q2hpbGRFbmRUaW1lIC0gdGhpcy5zdGFydFRp
bWUgOiB0aGlzLl9zZWxmVGltZTsKLSAgICB9LAotCi0gICAgc2V0IHNlbGZUaW1lKHRpbWUpCi0g
ICAgewotICAgICAgICB0aGlzLl9zZWxmVGltZSA9IHRpbWU7Ci0gICAgfSwKLQotICAgIGdldCBj
cHVUaW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jcHVUaW1lOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzUm9vdDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5Sb290OwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5SZWNv
cmR9Ci0gICAgICovCi0gICAgb3JpZ2luOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fb3JpZ2luIHx8IHRoaXMucGFyZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwu
UmVjb3JkPn0KLSAgICAgKi8KLSAgICBnZXQgY2hpbGRyZW4oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2NoaWxkcmVuOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtu
dW1iZXJ9Ci0gICAgICovCi0gICAgZ2V0IHZpc2libGVDaGlsZHJlbkNvdW50KCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ2hpbGRyZW5Db3VudCB8fCAwOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgZ2V0IGludmlz
aWJsZUNoaWxkcmVuQ291bnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2ludmlzaWJs
ZUNoaWxkcmVuQ291bnQgfHwgMDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
V2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2F0ZWdvcnl9Ci0gICAgICovCi0gICAgZ2V0IGNhdGVnb3J5
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRp
b25Nb2RlbC5yZWNvcmRTdHlsZSh0aGlzLl9yZWNvcmQpLmNhdGVnb3J5Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgdGl0bGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TW9kZWwuUmVjb3JkVHlwZS5UaW1lU3RhbXAgPyB0aGlzLl9yZWNvcmQuZGF0YVsibWVzc2FnZSJd
IDoKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLnJl
Y29yZFN0eWxlKHRoaXMuX3JlY29yZCkudGl0bGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgc3RhcnRUaW1lKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5zdGFydFRpbWVJblNlY29u
ZHModGhpcy5fcmVjb3JkKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVt
YmVyfQotICAgICAqLwotICAgIGdldCBlbmRUaW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5lbmRUaW1lSW5TZWNvbmRzKHRoaXMuX3JlY29yZCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0g
ICAgZ2V0IGlzQmFja2dyb3VuZCgpCi0gICAgewotICAgICAgICByZXR1cm4gISF0aGlzLl9yZWNv
cmQudGhyZWFkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0g
ICAgICovCi0gICAgZ2V0IGRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29y
ZC5kYXRhOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAg
ICovCi0gICAgZ2V0IHR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29yZC50
eXBlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICov
Ci0gICAgZ2V0IGZyYW1lSWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29yZC5m
cmFtZUlkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAg
ICovCi0gICAgZ2V0IHVzZWRIZWFwU2l6ZURlbHRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9yZWNvcmQudXNlZEhlYXBTaXplRGVsdGEgfHwgMDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGdldCB1c2VkSGVhcFNpemUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29yZC51c2VkSGVhcFNpemU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxEZWJ1Z2dlckFnZW50LkNhbGxGcmFt
ZT4/fQotICAgICAqLwotICAgIGdldCBzdGFja1RyYWNlKCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9yZWNvcmQuc3RhY2tUcmFjZSAmJiB0aGlzLl9yZWNvcmQuc3RhY2tUcmFjZS5sZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVjb3JkLnN0YWNrVHJhY2U7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgIH0sCi0KLSAgICBjb250YWluc1RpbWU6IGZ1bmN0aW9uKHRpbWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5zdGFydFRpbWUgPD0gdGltZSAmJiB0aW1lIDw9IHRo
aXMuZW5kVGltZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihF
bGVtZW50KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBnZW5lcmF0ZVBvcHVwQ29udGVudDogZnVu
Y3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UHJlc2VudGF0aW9uTW9kZWwubmVlZHNQcmV2aWV3RWxlbWVudCh0aGlzLnR5cGUpKQotICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLkRPTVByZXNlbnRhdGlvblV0aWxzLmJ1aWxkSW1hZ2VQcmV2aWV3
Q29udGVudHModGhpcy51cmwsIGZhbHNlLCB0aGlzLl9nZW5lcmF0ZVBvcHVwQ29udGVudFdpdGhJ
bWFnZVByZXZpZXcuYmluZCh0aGlzLCBjYWxsYmFjaykpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0aGlzLl9nZW5lcmF0ZVBvcHVwQ29udGVudFdpdGhJbWFnZVByZXZpZXcoY2FsbGJhY2sp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEVsZW1lbnQpfSBj
YWxsYmFjawotICAgICAqIEBwYXJhbSB7RWxlbWVudD19IHByZXZpZXdFbGVtZW50Ci0gICAgICov
Ci0gICAgX2dlbmVyYXRlUG9wdXBDb250ZW50V2l0aEltYWdlUHJldmlldzogZnVuY3Rpb24oY2Fs
bGJhY2ssIHByZXZpZXdFbGVtZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNvbnRlbnRIZWxwZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXJDb250ZW50SGVscGVyKHRoaXMudGl0bGUpOwotICAg
ICAgICB2YXIgdGV4dCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMgKGF0ICVzKSIsIE51bWJl
ci5zZWNvbmRzVG9TdHJpbmcodGhpcy5fbGFzdENoaWxkRW5kVGltZSAtIHRoaXMuc3RhcnRUaW1l
LCB0cnVlKSwKLSAgICAgICAgICAgIE51bWJlci5zZWNvbmRzVG9TdHJpbmcodGhpcy5fc3RhcnRU
aW1lT2Zmc2V0KSk7Ci0gICAgICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkR1cmF0aW9uIiksIHRleHQpOwotCi0gICAgICAgIGlmICh0aGlzLl9j
aGlsZHJlbi5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5jb2FsZXNjZWQpCi0gICAg
ICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3BlY3Rvci5VSVN0
cmluZygiU2VsZiBUaW1lIiksIE51bWJlci5zZWNvbmRzVG9TdHJpbmcodGhpcy5fc2VsZlRpbWUs
IHRydWUpKTsKLSAgICAgICAgICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkNQVSBUaW1lIiksIE51bWJlci5zZWNvbmRzVG9TdHJpbmcodGhpcy5f
Y3B1VGltZSwgdHJ1ZSkpOwotICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRFbGVtZW50
Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWdncmVnYXRlZCBUaW1lIiksCi0gICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuX2dlbmVyYXRlQWdn
cmVnYXRlZEluZm8odGhpcy5fYWdncmVnYXRlZFN0YXRzKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAodGhpcy5jb2FsZXNjZWQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKGNvbnRlbnRIZWxw
ZXIuY29udGVudFRhYmxlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGNvbnN0IHJlY29yZFR5cGVzID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3Jk
VHlwZTsKLQotICAgICAgICAvLyBUaGUgbWVzc2FnZXMgbWF5IHZhcnkgcGVyIHJlY29yZCB0eXBl
OwotICAgICAgICB2YXIgY2FsbFNpdGVTdGFja1RyYWNlTGFiZWw7Ci0gICAgICAgIHZhciBjYWxs
U3RhY2tMYWJlbDsKLQotICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewotICAgICAgICAgICAg
Y2FzZSByZWNvcmRUeXBlcy5HQ0V2ZW50OgotICAgICAgICAgICAgICAgIGNvbnRlbnRIZWxwZXIu
YXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbGxlY3RlZCIpLCBOdW1iZXIu
Ynl0ZXNUb1N0cmluZyh0aGlzLmRhdGFbInVzZWRIZWFwU2l6ZURlbHRhIl0pKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgcmVjb3JkVHlwZXMuVGltZXJJbnN0YWxs
OgotICAgICAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5UaW1lckZpcmU6Ci0gICAgICAgICAgICBj
YXNlIHJlY29yZFR5cGVzLlRpbWVyUmVtb3ZlOgotICAgICAgICAgICAgICAgIGNvbnRlbnRIZWxw
ZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRpbWVyIElEIiksIHRoaXMu
ZGF0YVsidGltZXJJZCJdKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZW91
dCA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBl
bmRUZXh0Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGltZW91dCIpLCBOdW1iZXIuc2Vjb25k
c1RvU3RyaW5nKHRoaXMudGltZW91dCAvIDEwMDApKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVwZWF0cyIp
LCAhdGhpcy5zaW5nbGVTaG90KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIHJlY29yZFR5cGVzLkZpcmVBbmltYXRpb25GcmFtZToK
LSAgICAgICAgICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJDYWxsYmFjayBJRCIpLCB0aGlzLmRhdGFbImlkIl0pOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5GdW5jdGlvbkNhbGw6Ci0g
ICAgICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRFbGVtZW50Um93KFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiTG9jYXRpb24iKSwgdGhpcy5fbGlua2lmeVNjcmlwdExvY2F0aW9uKCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5TY2hl
ZHVsZVJlc291cmNlUmVxdWVzdDoKLSAgICAgICAgICAgIGNhc2UgcmVjb3JkVHlwZXMuUmVzb3Vy
Y2VTZW5kUmVxdWVzdDoKLSAgICAgICAgICAgIGNhc2UgcmVjb3JkVHlwZXMuUmVzb3VyY2VSZWNl
aXZlUmVzcG9uc2U6Ci0gICAgICAgICAgICBjYXNlIHJlY29yZFR5cGVzLlJlc291cmNlUmVjZWl2
ZWREYXRhOgotICAgICAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5SZXNvdXJjZUZpbmlzaDoKLSAg
ICAgICAgICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZEVsZW1lbnRSb3coV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJSZXNvdXJjZSIpLCBXZWJJbnNwZWN0b3IubGlua2lmeVJlc291cmNlQXNOb2Rl
KHRoaXMudXJsKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZpZXdFbGVtZW50KQotICAgICAg
ICAgICAgICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZEVsZW1lbnRSb3coV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJQcmV2aWV3IiksIHByZXZpZXdFbGVtZW50KTsKLSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5kYXRhWyJyZXF1ZXN0TWV0aG9kIl0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
bnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlcXVlc3QgTWV0
aG9kIiksIHRoaXMuZGF0YVsicmVxdWVzdE1ldGhvZCJdKTsKLSAgICAgICAgICAgICAgICBpZiAo
dHlwZW9mIHRoaXMuZGF0YVsic3RhdHVzQ29kZSJdID09PSAibnVtYmVyIikKLSAgICAgICAgICAg
ICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU3RhdHVzIENvZGUiKSwgdGhpcy5kYXRhWyJzdGF0dXNDb2RlIl0pOwotICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmRhdGFbIm1pbWVUeXBlIl0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
bnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk1JTUUgVHlwZSIp
LCB0aGlzLmRhdGFbIm1pbWVUeXBlIl0pOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFb
ImVuY29kZWREYXRhTGVuZ3RoIl0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRIZWxwZXIu
YXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuY29kZWQgRGF0YSBMZW5ndGgi
KSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBCeXRlcyIsIHRoaXMuZGF0YVsiZW5jb2RlZERh
dGFMZW5ndGgiXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBy
ZWNvcmRUeXBlcy5FdmFsdWF0ZVNjcmlwdDoKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRh
ICYmIHRoaXMudXJsKQotICAgICAgICAgICAgICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZEVs
ZW1lbnRSb3coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTY3JpcHQiKSwgdGhpcy5fbGlua2lmeUxv
Y2F0aW9uKHRoaXMudXJsLCB0aGlzLmRhdGFbImxpbmVOdW1iZXIiXSkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5QYWludDoKLSAgICAgICAg
ICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJMb2NhdGlvbiIpLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiglZCwgJWQpIiwgdGhpcy5kYXRh
LmNsaXBbMF0sIHRoaXMuZGF0YS5jbGlwWzFdKSk7Ci0gICAgICAgICAgICAgICAgdmFyIGNsaXBX
aWR0aCA9IFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLnF1YWRXaWR0aCh0
aGlzLmRhdGEuY2xpcCk7Ci0gICAgICAgICAgICAgICAgdmFyIGNsaXBIZWlnaHQgPSBXZWJJbnNw
ZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5xdWFkSGVpZ2h0KHRoaXMuZGF0YS5jbGlw
KTsKLSAgICAgICAgICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJEaW1lbnNpb25zIiksIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWQgw5cg
JWQiLCBjbGlwV2lkdGgsIGNsaXBIZWlnaHQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgcmVjb3JkVHlwZXMuUmVjYWxjdWxhdGVTdHlsZXM6IC8vIFdlIGRvbid0
IHdhbnQgdG8gc2VlIGRlZmF1bHQgZGV0YWlscy4KLSAgICAgICAgICAgICAgICBjYWxsU2l0ZVN0
YWNrVHJhY2VMYWJlbCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3R5bGVzIGludmFsaWRhdGVk
Iik7Ci0gICAgICAgICAgICAgICAgY2FsbFN0YWNrTGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlN0eWxlcyByZWNhbGN1bGF0aW9uIGZvcmNlZCIpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSByZWNvcmRUeXBlcy5MYXlvdXQ6Ci0gICAgICAgICAgICAgICAg
aWYgKHRoaXMuZGF0YVsiZGlydHlPYmplY3RzIl0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
bnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5vZGVzIHRoYXQg
bmVlZCBsYXlvdXQiKSwgdGhpcy5kYXRhWyJkaXJ0eU9iamVjdHMiXSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMuZGF0YVsidG90YWxPYmplY3RzIl0pCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxheW91dCB0
cmVlIHNpemUiKSwgdGhpcy5kYXRhWyJ0b3RhbE9iamVjdHMiXSk7Ci0gICAgICAgICAgICAgICAg
aWYgKHR5cGVvZiB0aGlzLmRhdGFbInBhcnRpYWxMYXlvdXQiXSA9PT0gImJvb2xlYW4iKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkxheW91dCBzY29wZSIpLAotICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmRhdGFbInBhcnRpYWxMYXlvdXQiXSA/IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGFydGlhbCIp
IDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXaG9sZSBkb2N1bWVudCIpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgY2FsbFNpdGVTdGFja1RyYWNlTGFiZWwgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkxheW91dCBpbnZhbGlkYXRlZCIpOwotICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnN0YWNrVHJhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbFN0YWNrTGFiZWwg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxheW91dCBmb3JjZWQiKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygi
Tm90ZSIpLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZvcmNlZCBzeW5jaHJvbm91cyBsYXlvdXQg
aXMgYSBwb3NzaWJsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiIpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIHJlY29yZFR5cGVz
LlRpbWU6Ci0gICAgICAgICAgICBjYXNlIHJlY29yZFR5cGVzLlRpbWVFbmQ6Ci0gICAgICAgICAg
ICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygi
TWVzc2FnZSIpLCB0aGlzLmRhdGFbIm1lc3NhZ2UiXSk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiB0aGlzLmludGVydmFsRHVyYXRpb24gPT09ICJudW1iZXIiKQotICAgICAgICAgICAgICAg
ICAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJ
bnRlcnZhbCBEdXJhdGlvbiIpLCBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKHRoaXMuaW50ZXJ2YWxE
dXJhdGlvbiwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSByZWNvcmRUeXBlcy5XZWJTb2NrZXRDcmVhdGU6Ci0gICAgICAgICAgICBjYXNlIHJlY29yZFR5
cGVzLldlYlNvY2tldFNlbmRIYW5kc2hha2VSZXF1ZXN0OgotICAgICAgICAgICAgY2FzZSByZWNv
cmRUeXBlcy5XZWJTb2NrZXRSZWNlaXZlSGFuZHNoYWtlUmVzcG9uc2U6Ci0gICAgICAgICAgICBj
YXNlIHJlY29yZFR5cGVzLldlYlNvY2tldERlc3Ryb3k6Ci0gICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiB0aGlzLndlYlNvY2tldFVSTCAhPT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlVS
TCIpLCB0aGlzLndlYlNvY2tldFVSTCk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlz
LndlYlNvY2tldFByb3RvY29sICE9PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgICAgICAgICAg
Y29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiV2ViU29j
a2V0IFByb3RvY29sIiksIHRoaXMud2ViU29ja2V0UHJvdG9jb2wpOwotICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgdGhpcy5kYXRhWyJtZXNzYWdlIl0gIT09ICJ1bmRlZmluZWQiKQotICAgICAg
ICAgICAgICAgICAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJNZXNzYWdlIiksIHRoaXMuZGF0YVsibWVzc2FnZSJdKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKHRo
aXMuZGV0YWlsc05vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBl
bmRFbGVtZW50Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGV0YWlscyIpLCB0aGlzLmRldGFp
bHNOb2RlKCkuY2hpbGROb2Rlc1sxXS5jbG9uZU5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5zY3JpcHROYW1lICYmIHRoaXMudHlw
ZSAhPT0gcmVjb3JkVHlwZXMuRnVuY3Rpb25DYWxsKQotICAgICAgICAgICAgY29udGVudEhlbHBl
ci5hcHBlbmRFbGVtZW50Um93KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRnVuY3Rpb24gQ2FsbCIp
LCB0aGlzLl9saW5raWZ5U2NyaXB0TG9jYXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKHRoaXMudXNl
ZEhlYXBTaXplKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy51c2VkSGVhcFNpemVEZWx0YSkgewot
ICAgICAgICAgICAgICAgIHZhciBzaWduID0gdGhpcy51c2VkSGVhcFNpemVEZWx0YSA+IDAgPyAi
KyIgOiAiLSI7Ci0gICAgICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiVXNlZCBIZWFwIFNpemUiKSwKLSAgICAgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyAoJXMlcykiLCBOdW1iZXIuYnl0ZXNUb1N0cmlu
Zyh0aGlzLnVzZWRIZWFwU2l6ZSksIHNpZ24sIE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMudXNl
ZEhlYXBTaXplRGVsdGEpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2F0ZWdvcnkg
PT09IFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmNhdGVnb3JpZXMoKS5z
Y3JpcHRpbmcpCi0gICAgICAgICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiVXNlZCBIZWFwIFNpemUiKSwgTnVtYmVyLmJ5dGVzVG9TdHJp
bmcodGhpcy51c2VkSGVhcFNpemUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLmNh
bGxTaXRlU3RhY2tUcmFjZSkKLSAgICAgICAgICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kU3RhY2tU
cmFjZShjYWxsU2l0ZVN0YWNrVHJhY2VMYWJlbCB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNh
bGwgU2l0ZSBzdGFjayIpLCB0aGlzLmNhbGxTaXRlU3RhY2tUcmFjZSwgdGhpcy5fbGlua2lmeUNh
bGxGcmFtZS5iaW5kKHRoaXMpKTsKLQotICAgICAgICBpZiAodGhpcy5zdGFja1RyYWNlKQotICAg
ICAgICAgICAgY29udGVudEhlbHBlci5hcHBlbmRTdGFja1RyYWNlKGNhbGxTdGFja0xhYmVsIHx8
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2FsbCBTdGFjayIpLCB0aGlzLnN0YWNrVHJhY2UsIHRo
aXMuX2xpbmtpZnlDYWxsRnJhbWUuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgY2FsbGJhY2soY29u
dGVudEhlbHBlci5jb250ZW50VGFibGUoKSk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoRGV0YWls
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2RldGFpbHNOb2RlOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHs/Tm9kZX0KLSAgICAgKi8KLSAgICBk
ZXRhaWxzTm9kZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9k
ZXRhaWxzTm9kZSA9PT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgIHRoaXMuX2RldGFpbHNO
b2RlID0gdGhpcy5fZ2V0UmVjb3JkRGV0YWlscygpOwotCi0gICAgICAgICAgICBpZiAodGhpcy5f
ZGV0YWlsc05vZGUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9kZXRhaWxzTm9kZS5pbnNlcnRC
ZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiKSwgdGhpcy5fZGV0YWlsc05vZGUuZmly
c3RDaGlsZCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGV0YWlsc05vZGUuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIikiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbHNOb2RlOwotICAgIH0sCi0KLSAgICBfY3JlYXRl
U3BhbldpdGhUZXh0OiBmdW5jdGlvbih0ZXh0Q29udGVudCkKLSAgICB7Ci0gICAgICAgIHZhciBu
b2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBub2RlLnRleHRD
b250ZW50ID0gdGV4dENvbnRlbnQ7Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHs/Tm9kZX0KLSAgICAgKi8KLSAgICBfZ2V0UmVjb3JkRGV0
YWlsczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGRldGFpbHM7Ci0gICAgICAgIGlm
ICh0aGlzLmNvYWxlc2NlZCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTcGFuV2l0
aFRleHQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCLDlyAlZCIsIHRoaXMuY2hpbGRyZW4ubGVuZ3Ro
KSk7Ci0KLSAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKLSAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuVGltZWxpbmVNb2RlbC5SZWNvcmRUeXBlLkdDRXZlbnQ6Ci0gICAgICAgICAgICBkZXRh
aWxzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyBjb2xsZWN0ZWQiLCBOdW1iZXIuYnl0ZXNU
b1N0cmluZyh0aGlzLmRhdGFbInVzZWRIZWFwU2l6ZURlbHRhIl0pKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLlJlY29yZFR5cGUu
VGltZXJGaXJlOgotICAgICAgICAgICAgZGV0YWlscyA9IHRoaXMuX2xpbmtpZnlTY3JpcHRMb2Nh
dGlvbih0aGlzLmRhdGFbInRpbWVySWQiXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5SZWNvcmRUeXBlLkZ1bmN0aW9uQ2FsbDoK
LSAgICAgICAgICAgIGRldGFpbHMgPSB0aGlzLl9saW5raWZ5U2NyaXB0TG9jYXRpb24oKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVs
LlJlY29yZFR5cGUuRmlyZUFuaW1hdGlvbkZyYW1lOgotICAgICAgICAgICAgZGV0YWlscyA9IHRo
aXMuX2xpbmtpZnlTY3JpcHRMb2NhdGlvbih0aGlzLmRhdGFbImlkIl0pOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlw
ZS5FdmVudERpc3BhdGNoOgotICAgICAgICAgICAgZGV0YWlscyA9IHRoaXMuZGF0YSA/IHRoaXMu
ZGF0YVsidHlwZSJdIDogbnVsbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5UaW1lbGluZU1vZGVsLlJlY29yZFR5cGUuUGFpbnQ6Ci0gICAgICAgICAgICBk
ZXRhaWxzID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwucXVhZFdpZHRo
KHRoaXMuZGF0YS5jbGlwKSAgKyAiXHUyMDA5XHUwMGQ3XHUyMDA5IiArIFdlYkluc3BlY3Rvci5U
aW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLnF1YWRIZWlnaHQodGhpcy5kYXRhLmNsaXApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwu
UmVjb3JkVHlwZS5EZWNvZGVJbWFnZToKLSAgICAgICAgICAgIGRldGFpbHMgPSB0aGlzLmRhdGFb
ImltYWdlVHlwZSJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5SZXNpemVJbWFnZToKLSAgICAgICAgICAgIGRl
dGFpbHMgPSB0aGlzLmRhdGFbImNhY2hlZCJdID8gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJjYWNo
ZWQiKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygibm9uLWNhY2hlZCIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlw
ZS5UaW1lckluc3RhbGw6Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwu
UmVjb3JkVHlwZS5UaW1lclJlbW92ZToKLSAgICAgICAgICAgIGRldGFpbHMgPSB0aGlzLl9saW5r
aWZ5VG9wQ2FsbEZyYW1lKHRoaXMuZGF0YVsidGltZXJJZCJdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLlJlY29yZFR5cGUuUmVx
dWVzdEFuaW1hdGlvbkZyYW1lOgotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZU1v
ZGVsLlJlY29yZFR5cGUuQ2FuY2VsQW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgICAgICBkZXRhaWxz
ID0gdGhpcy5fbGlua2lmeVRvcENhbGxGcmFtZSh0aGlzLmRhdGFbImlkIl0pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3Jk
VHlwZS5QYXJzZUhUTUw6Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwu
UmVjb3JkVHlwZS5SZWNhbGN1bGF0ZVN0eWxlczoKLSAgICAgICAgICAgIGRldGFpbHMgPSB0aGlz
Ll9saW5raWZ5VG9wQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5SZWNvcmRUeXBlLkV2YWx1YXRlU2NyaXB0Ogot
ICAgICAgICAgICAgZGV0YWlscyA9IHRoaXMudXJsID8gdGhpcy5fbGlua2lmeUxvY2F0aW9uKHRo
aXMudXJsLCB0aGlzLmRhdGFbImxpbmVOdW1iZXIiXSwgMCkgOiBudWxsOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlw
ZS5YSFJSZWFkeVN0YXRlQ2hhbmdlOgotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU1vZGVsLlJlY29yZFR5cGUuWEhSTG9hZDoKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuVGlt
ZWxpbmVNb2RlbC5SZWNvcmRUeXBlLlNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0OgotICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLlJlY29yZFR5cGUuUmVzb3VyY2VTZW5kUmVx
dWVzdDoKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5SZWNvcmRUeXBl
LlJlc291cmNlUmVjZWl2ZWREYXRhOgotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU1vZGVsLlJlY29yZFR5cGUuUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2U6Ci0gICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwuUmVjb3JkVHlwZS5SZXNvdXJjZUZpbmlzaDoKLSAg
ICAgICAgICAgIGRldGFpbHMgPSBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwodGhpcy51
cmwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVs
aW5lTW9kZWwuUmVjb3JkVHlwZS5UaW1lOgotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1l
bGluZU1vZGVsLlJlY29yZFR5cGUuVGltZUVuZDoKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVNb2RlbC5SZWNvcmRUeXBlLlRpbWVTdGFtcDoKLSAgICAgICAgICAgIGRldGFpbHMg
PSB0aGlzLmRhdGFbIm1lc3NhZ2UiXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgZGV0YWlscyA9IHRoaXMuX2xpbmtpZnlTY3JpcHRMb2NhdGlvbigp
IHx8IHRoaXMuX2xpbmtpZnlUb3BDYWxsRnJhbWUoKSB8fCBudWxsOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGV0YWlscyAmJiAhKGRldGFpbHMgaW5zdGFu
Y2VvZiBOb2RlKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTcGFuV2l0aFRleHQo
IiIgKyBkZXRhaWxzKTsKLQotICAgICAgICByZXR1cm4gZGV0YWlscyB8fCBudWxsOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IGNvbHVtbk51bWJlcgot
ICAgICAqLwotICAgIF9saW5raWZ5TG9jYXRpb246IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8gRklYTUUoNjI3MjUpOiBzdGFjayB0cmFj
ZSBsaW5lL2NvbHVtbiBudW1iZXJzIGFyZSBvbmUtYmFzZWQuCi0gICAgICAgIGNvbHVtbk51bWJl
ciA9IGNvbHVtbk51bWJlciA/IGNvbHVtbk51bWJlciAtIDEgOiAwOwotICAgICAgICByZXR1cm4g
dGhpcy5fbGlua2lmaWVyLmxpbmtpZnlMb2NhdGlvbih1cmwsIGxpbmVOdW1iZXIgLSAxLCBjb2x1
bW5OdW1iZXIsICJ0aW1lbGluZS1kZXRhaWxzIik7Ci0gICAgfSwKLQotICAgIF9saW5raWZ5Q2Fs
bEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
bGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmwsIGNhbGxGcmFtZS5saW5lTnVtYmVyLCBjYWxs
RnJhbWUuY29sdW1uTnVtYmVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmc9fSBkZWZhdWx0VmFsdWUKLSAgICAgKi8KLSAgICBfbGlua2lmeVRvcENhbGxGcmFtZTog
ZnVuY3Rpb24oZGVmYXVsdFZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuc3RhY2tUcmFj
ZSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKHRoaXMuc3RhY2tU
cmFjZVswXSk7Ci0gICAgICAgIGlmICh0aGlzLmNhbGxTaXRlU3RhY2tUcmFjZSkKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKHRoaXMuY2FsbFNpdGVTdGFja1RyYWNl
WzBdKTsKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHsqPX0gZGVmYXVsdFZhbHVlCi0gICAgICogQHJldHVybiB7RWxlbWVudHxz
dHJpbmd9Ci0gICAgICovCi0gICAgX2xpbmtpZnlTY3JpcHRMb2NhdGlvbjogZnVuY3Rpb24oZGVm
YXVsdFZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuc2NyaXB0TmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9saW5raWZ5TG9jYXRpb24odGhpcy5zY3JpcHROYW1lLCB0aGlzLnNj
cmlwdExpbmUsIDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZh
bHVlID8gIiIgKyBkZWZhdWx0VmFsdWUgOiBudWxsOwotICAgIH0sCi0KLSAgICBjYWxjdWxhdGVB
Z2dyZWdhdGVkU3RhdHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2FnZ3JlZ2F0
ZWRTdGF0cyA9IHt9OwotICAgICAgICB0aGlzLl9jcHVUaW1lID0gdGhpcy5fc2VsZlRpbWU7Ci0K
LSAgICAgICAgZm9yICh2YXIgaW5kZXggPSB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7IGluZGV4OyAt
LWluZGV4KSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLl9jaGlsZHJlbltpbmRleCAt
IDFdOwotICAgICAgICAgICAgZm9yICh2YXIgY2F0ZWdvcnkgaW4gY2hpbGQuX2FnZ3JlZ2F0ZWRT
dGF0cykKLSAgICAgICAgICAgICAgICB0aGlzLl9hZ2dyZWdhdGVkU3RhdHNbY2F0ZWdvcnldID0g
KHRoaXMuX2FnZ3JlZ2F0ZWRTdGF0c1tjYXRlZ29yeV0gfHwgMCkgKyBjaGlsZC5fYWdncmVnYXRl
ZFN0YXRzW2NhdGVnb3J5XTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBjYXRlZ29yeSBp
biB0aGlzLl9hZ2dyZWdhdGVkU3RhdHMpCi0gICAgICAgICAgICB0aGlzLl9jcHVUaW1lICs9IHRo
aXMuX2FnZ3JlZ2F0ZWRTdGF0c1tjYXRlZ29yeV07Ci0gICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZWRT
dGF0c1t0aGlzLmNhdGVnb3J5Lm5hbWVdID0gKHRoaXMuX2FnZ3JlZ2F0ZWRTdGF0c1t0aGlzLmNh
dGVnb3J5Lm5hbWVdIHx8IDApICsgdGhpcy5fc2VsZlRpbWU7Ci0gICAgfSwKLQotICAgIGdldCBh
Z2dyZWdhdGVkU3RhdHMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0ZWRT
dGF0czsKLSAgICB9LAotCi0gICAgc2V0SGFzV2FybmluZzogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5oYXNXYXJuaW5nID0gdHJ1ZTsKLSAgICAgICAgZm9yICh2YXIgcGFyZW50ID0g
dGhpcy5wYXJlbnQ7IHBhcmVudCAmJiAhcGFyZW50LmNoaWxkSGFzV2FybmluZzsgcGFyZW50ID0g
cGFyZW50LnBhcmVudCkKLSAgICAgICAgICAgIHBhcmVudC5jaGlsZEhhc1dhcm5pbmcgPSB0cnVl
OwotICAgIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0ge09iamVjdH0gYWdncmVnYXRlZFN0YXRzCi0g
Ki8KLVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLl9nZW5lcmF0ZUFnZ3Jl
Z2F0ZWRJbmZvID0gZnVuY3Rpb24oYWdncmVnYXRlZFN0YXRzKQotewotICAgIHZhciBjZWxsID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgIGNlbGwuY2xhc3NOYW1lID0gInRp
bWVsaW5lLWFnZ3JlZ2F0ZWQtaW5mbyI7Ci0gICAgZm9yICh2YXIgaW5kZXggaW4gYWdncmVnYXRl
ZFN0YXRzKSB7Ci0gICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwotICAgICAgICBsYWJlbC5jbGFzc05hbWUgPSAidGltZWxpbmUtYWdncmVnYXRlZC1jYXRl
Z29yeSB0aW1lbGluZS0iICsgaW5kZXg7Ci0gICAgICAgIGNlbGwuYXBwZW5kQ2hpbGQobGFiZWwp
OwotICAgICAgICB2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAg
ICAgICAgdGV4dC50ZXh0Q29udGVudCA9IE51bWJlci5zZWNvbmRzVG9TdHJpbmcoYWdncmVnYXRl
ZFN0YXRzW2luZGV4XSwgdHJ1ZSk7Ci0gICAgICAgIGNlbGwuYXBwZW5kQ2hpbGQodGV4dCk7Ci0g
ICAgfQotICAgIHJldHVybiBjZWxsOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50
YXRpb25Nb2RlbC5nZW5lcmF0ZVBvcHVwQ29udGVudEZvckZyYW1lID0gZnVuY3Rpb24oZnJhbWUp
Ci17Ci0gICAgdmFyIGNvbnRlbnRIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXJDb250
ZW50SGVscGVyKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRnJhbWUiKSk7Ci0gICAgdmFyIGR1cmF0
aW9uSW5TZWNvbmRzID0gZnJhbWUuZW5kVGltZSAtIGZyYW1lLnN0YXJ0VGltZTsKLSAgICB2YXIg
ZHVyYXRpb25UZXh0ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyAoYXQgJXMpIiwgTnVtYmVy
LnNlY29uZHNUb1N0cmluZyhmcmFtZS5lbmRUaW1lIC0gZnJhbWUuc3RhcnRUaW1lLCB0cnVlKSwK
LSAgICAgICAgTnVtYmVyLnNlY29uZHNUb1N0cmluZyhmcmFtZS5zdGFydFRpbWVPZmZzZXQsIHRy
dWUpKTsKLSAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJEdXJhdGlvbiIpLCBkdXJhdGlvblRleHQpOwotICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5k
VGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZQUyIpLCBNYXRoLmZsb29yKDEgLyBkdXJh
dGlvbkluU2Vjb25kcykpOwotICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkNQVSB0aW1lIiksIE51bWJlci5zZWNvbmRzVG9TdHJpbmcoZnJhbWUu
Y3B1VGltZSwgdHJ1ZSkpOwotICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kRWxlbWVudFJvdyhXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkFnZ3JlZ2F0ZWQgVGltZSIpLAotICAgICAgICBXZWJJbnNwZWN0
b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5fZ2VuZXJhdGVBZ2dyZWdhdGVkSW5mbyhmcmFt
ZS50aW1lQnlDYXRlZ29yeSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRIZWxwZXIuY29udGVudFRh
YmxlKCk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRnJhbWVTdGF0aXN0aWNz
fSBzdGF0aXN0aWNzCi0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVs
LmdlbmVyYXRlUG9wdXBDb250ZW50Rm9yRnJhbWVTdGF0aXN0aWNzID0gZnVuY3Rpb24oc3RhdGlz
dGljcykKLXsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZQotICAgICAqLwot
ICAgIGZ1bmN0aW9uIGZvcm1hdFRpbWVBbmRGUFModGltZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzICglLjBmIEZQUykiLCBOdW1iZXIuc2Vjb25kc1Rv
U3RyaW5nKHRpbWUsIHRydWUpLCAxIC8gdGltZSk7Ci0gICAgfQotCi0gICAgdmFyIGNvbnRlbnRI
ZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXJDb250ZW50SGVscGVyKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiU2VsZWN0ZWQgUmFuZ2UiKSk7Ci0KLSAgICBjb250ZW50SGVscGVyLmFwcGVu
ZFRleHRSb3coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZWxlY3RlZCByYW5nZSIpLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIiVzXHUyMDEzJXMgKCVkIGZyYW1lcykiLAotICAgICAgICBOdW1iZXIu
c2Vjb25kc1RvU3RyaW5nKHN0YXRpc3RpY3Muc3RhcnRPZmZzZXQsIHRydWUpLCBOdW1iZXIuc2Vj
b25kc1RvU3RyaW5nKHN0YXRpc3RpY3MuZW5kT2Zmc2V0LCB0cnVlKSwgc3RhdGlzdGljcy5mcmFt
ZUNvdW50KSk7Ci0gICAgY29udGVudEhlbHBlci5hcHBlbmRUZXh0Um93KFdlYkluc3BlY3Rvci5V
SVN0cmluZygiTWluaW11bSBUaW1lIiksIGZvcm1hdFRpbWVBbmRGUFMoc3RhdGlzdGljcy5taW5E
dXJhdGlvbikpOwotICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkF2ZXJhZ2UgVGltZSIpLCBmb3JtYXRUaW1lQW5kRlBTKHN0YXRpc3RpY3MuYXZl
cmFnZSkpOwotICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kVGV4dFJvdyhXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIk1heGltdW0gVGltZSIpLCBmb3JtYXRUaW1lQW5kRlBTKHN0YXRpc3RpY3MubWF4RHVy
YXRpb24pKTsKLSAgICBjb250ZW50SGVscGVyLmFwcGVuZFRleHRSb3coV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJTdGFuZGFyZCBEZXZpYXRpb24iKSwgTnVtYmVyLnNlY29uZHNUb1N0cmluZyhzdGF0
aXN0aWNzLnN0ZGRldiwgdHJ1ZSkpOwotICAgIGNvbnRlbnRIZWxwZXIuYXBwZW5kRWxlbWVudFJv
dyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRpbWUgYnkgY2F0ZWdvcnkiKSwKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuX2dlbmVyYXRlQWdncmVnYXRlZElu
Zm8oc3RhdGlzdGljcy50aW1lQnlDYXRlZ29yeSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRIZWxw
ZXIuY29udGVudFRhYmxlKCk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkR9IGNvbnRleHQKLSAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aAotICogQHBhcmFtIHtu
dW1iZXJ9IGhlaWdodAotICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yMAotICogQHBhcmFtIHtzdHJp
bmd9IGNvbG9yMQotICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yMgotICovCi1XZWJJbnNwZWN0b3Iu
VGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5jcmVhdGVGaWxsU3R5bGUgPSBmdW5jdGlvbihjb250
ZXh0LCB3aWR0aCwgaGVpZ2h0LCBjb2xvcjAsIGNvbG9yMSwgY29sb3IyKQotewotICAgIHZhciBn
cmFkaWVudCA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGNvbG9yMCk7Ci0gICAgZ3JhZGllbnQu
YWRkQ29sb3JTdG9wKDAuMjUsIGNvbG9yMSk7Ci0gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAu
NzUsIGNvbG9yMSk7Ci0gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsIGNvbG9yMik7Ci0gICAg
cmV0dXJuIGdyYWRpZW50OwotfQotCi0vKioKLSAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEfSBjb250ZXh0Ci0gKiBAcGFyYW0ge251bWJlcn0gd2lkdGgKLSAqIEBwYXJhbSB7bnVt
YmVyfSBoZWlnaHQKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2F0ZWdvcnl9IGNh
dGVnb3J5Ci0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmNyZWF0
ZUZpbGxTdHlsZUZvckNhdGVnb3J5ID0gZnVuY3Rpb24oY29udGV4dCwgd2lkdGgsIGhlaWdodCwg
Y2F0ZWdvcnkpCi17Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlv
bk1vZGVsLmNyZWF0ZUZpbGxTdHlsZShjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBjYXRlZ29yeS5m
aWxsQ29sb3JTdG9wMCwgY2F0ZWdvcnkuZmlsbENvbG9yU3RvcDEsIGNhdGVnb3J5LmJvcmRlckNv
bG9yKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UaW1lbGluZUNhdGVnb3J5
fSBjYXRlZ29yeQotICovCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5j
cmVhdGVTdHlsZVJ1bGVGb3JDYXRlZ29yeSA9IGZ1bmN0aW9uKGNhdGVnb3J5KQotewotICAgIHZh
ciBzZWxlY3RvciA9ICIudGltZWxpbmUtY2F0ZWdvcnktIiArIGNhdGVnb3J5Lm5hbWUgKyAiIC50
aW1lbGluZS1ncmFwaC1iYXIsICIgKwotICAgICAgICAiLnRpbWVsaW5lLWNhdGVnb3J5LXN0YXR1
c2Jhci1pdGVtLnRpbWVsaW5lLWNhdGVnb3J5LSIgKyBjYXRlZ29yeS5uYW1lICsgIiAudGltZWxp
bmUtY2F0ZWdvcnktY2hlY2tib3gsICIgKwotICAgICAgICAiLnBvcG92ZXIgLnRpbWVsaW5lLSIg
KyBjYXRlZ29yeS5uYW1lICsgIiwgIiArCi0gICAgICAgICIudGltZWxpbmUtY2F0ZWdvcnktIiAr
IGNhdGVnb3J5Lm5hbWUgKyAiIC50aW1lbGluZS10cmVlLWljb24iCi0KLSAgICByZXR1cm4gc2Vs
ZWN0b3IgKyAiIHsgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoIiAr
Ci0gICAgICAgY2F0ZWdvcnkuZmlsbENvbG9yU3RvcDAgKyAiLCAiICsgY2F0ZWdvcnkuZmlsbENv
bG9yU3RvcDEgKyAiIDI1JSwgIiArIGNhdGVnb3J5LmZpbGxDb2xvclN0b3AxICsgIiA3NSUsICIg
KyBjYXRlZ29yeS5ib3JkZXJDb2xvciArICIpOyIgKwotICAgICAgICIgYm9yZGVyLWNvbG9yOiAi
ICsgY2F0ZWdvcnkuYm9yZGVyQ29sb3IgKwotICAgICAgICJ9IjsKLX0KLQotLyoqCi0gKiBAcGFy
YW0ge0FycmF5LjxudW1iZXI+fSBxdWFkCi0gKiBAcmV0dXJuIHtudW1iZXJ9Ci0gKi8KLVdlYklu
c3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLnF1YWRXaWR0aCA9IGZ1bmN0aW9uKHF1
YWQpCi17Ci0gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KE1hdGgucG93KHF1YWRbMF0g
LSBxdWFkWzJdLCAyKSArIE1hdGgucG93KHF1YWRbMV0gLSBxdWFkWzNdLCAyKSkpOwotfQotCi0v
KioKLSAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHF1YWQKLSAqIEByZXR1cm4ge251bWJlcn0K
LSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwucXVhZEhlaWdodCA9
IGZ1bmN0aW9uKHF1YWQpCi17Ci0gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KE1hdGgu
cG93KHF1YWRbMF0gLSBxdWFkWzZdLCAyKSArIE1hdGgucG93KHF1YWRbMV0gLSBxdWFkWzddLCAy
KSkpOwotfQotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UHJlc2VudGF0aW9uTW9kZWwuRmlsdGVyID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0
b3IuVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5GaWx0ZXIucHJvdG90eXBlID0gewotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVs
LlJlY29yZH0gcmVjb3JkCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBh
Y2NlcHQ6IGZ1bmN0aW9uKHJlY29yZCkgeyByZXR1cm4gZmFsc2U7IH0KLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICogQHBhcmFt
IHtzdHJpbmd9IG5hbWUKLSAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQotICogQHBhcmFtIHtudW1i
ZXJ9IG92ZXJ2aWV3U3RyaXBHcm91cEluZGV4Ci0gKiBAcGFyYW0ge3N0cmluZ30gYm9yZGVyQ29s
b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSBmaWxsQ29sb3JTdG9wMAotICogQHBhcmFtIHtzdHJpbmd9
IGZpbGxDb2xvclN0b3AxCi0gKi8KLVdlYkluc3BlY3Rvci5UaW1lbGluZUNhdGVnb3J5ID0gZnVu
Y3Rpb24obmFtZSwgdGl0bGUsIG92ZXJ2aWV3U3RyaXBHcm91cEluZGV4LCBib3JkZXJDb2xvciwg
ZmlsbENvbG9yU3RvcDAsIGZpbGxDb2xvclN0b3AxKQotewotICAgIHRoaXMubmFtZSA9IG5hbWU7
Ci0gICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIHRoaXMub3ZlcnZpZXdTdHJpcEdyb3VwSW5k
ZXggPSBvdmVydmlld1N0cmlwR3JvdXBJbmRleDsKLSAgICB0aGlzLmJvcmRlckNvbG9yID0gYm9y
ZGVyQ29sb3I7Ci0gICAgdGhpcy5maWxsQ29sb3JTdG9wMCA9IGZpbGxDb2xvclN0b3AwOwotICAg
IHRoaXMuZmlsbENvbG9yU3RvcDEgPSBmaWxsQ29sb3JTdG9wMTsKLSAgICB0aGlzLmhpZGRlbiA9
IGZhbHNlOwotfQotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVDYXRlZ29yeS5FdmVudHMgPSB7Ci0g
ICAgVmlzaWJpbGl0eUNoYW5nZWQ6ICJWaXNpYmlsaXR5Q2hhbmdlZCIKLX07Ci0KLVdlYkluc3Bl
Y3Rvci5UaW1lbGluZUNhdGVnb3J5LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGdldCBoaWRkZW4oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX2hpZGRlbjsKLSAgICB9LAotCi0gICAgc2V0IGhpZGRlbihoaWRkZW4pCi0g
ICAgewotICAgICAgICB0aGlzLl9oaWRkZW4gPSBoaWRkZW47Ci0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UaW1lbGluZUNhdGVnb3J5LkV2ZW50cy5W
aXNpYmlsaXR5Q2hhbmdlZCwgdGhpcyk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLy9AIHNvdXJjZVVSTD1odHRwOi8vbG9jYWxo
b3N0L2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5qcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Ub29sYmFyLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Ub29sYmFyLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2MmZiMzAyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQzMyAr
MCwwIEBACi0gLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IE1hdHQgTGlsZWsg
KHBld3Rlcm1vb3NlQGdtYWlsLmNvbSkuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBl
Y29yYXJvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVG9vbGJhciA9IGZ1
bmN0aW9uKCkKLXsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
dG9vbGJhciIpOwotICAgIFdlYkluc3BlY3Rvci5pbnN0YWxsRHJhZ0hhbmRsZSh0aGlzLmVsZW1l
bnQsIHRoaXMuX3Rvb2xiYXJEcmFnU3RhcnQuYmluZCh0aGlzKSwgdGhpcy5fdG9vbGJhckRyYWcu
YmluZCh0aGlzKSwgdGhpcy5fdG9vbGJhckRyYWdFbmQuYmluZCh0aGlzKSwgImRlZmF1bHQiKTsK
LQotICAgIHRoaXMuX2Ryb3Bkb3duQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRv
b2xiYXItZHJvcGRvd24tYXJyb3ciKTsKLSAgICB0aGlzLl9kcm9wZG93bkJ1dHRvbi5hZGRFdmVu
dExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZURyb3Bkb3duLmJpbmQodGhpcyksIGZhbHNl
KTsKLQotICAgIHRoaXMuX3BhbmVsc01lbnVCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgidG9vbGJhci1wYW5lbHMtbWVudSIpOwotICAgIGlmICh0aGlzLl9pc1Rvb2xiYXJDdXN0b21p
emFibGUoKSkKLSAgICAgICAgdGhpcy5fcGFuZWxzTWVudUJ1dHRvbi5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIHRoaXMuX3RvZ2dsZVBhbmVsc01lbnUuYmluZCh0aGlzKSwgZmFsc2UpOwotICAg
IGVsc2UKLSAgICAgICAgdGhpcy5fcGFuZWxzTWVudUJ1dHRvbi5hZGRTdHlsZUNsYXNzKCJoaWRk
ZW4iKTsKLQotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbG9zZS1idXR0b24tbGVmdCIp
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fb25DbG9zZSwgdHJ1ZSk7Ci0gICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsb3NlLWJ1dHRvbi1yaWdodCIpLmFkZEV2ZW50TGlzdGVu
ZXIoImNsaWNrIiwgdGhpcy5fb25DbG9zZSwgdHJ1ZSk7Ci0KLSAgICB0aGlzLl9pc1dpbmRvd01v
dmVTdXBwb3J0ZWQgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKSAmJiAhUHJlZmVyZW5jZXMuc2hvd0Rv
Y2tUb1JpZ2h0OwotICAgIHRoaXMuX3BhbmVsRGVzY3JpcHRvcnMgPSBbXTsKLX0KLQotV2ViSW5z
cGVjdG9yLlRvb2xiYXIucHJvdG90eXBlID0gewotICAgIHJlc2l6ZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fdXBkYXRlRHJvcGRvd25CdXR0b25BbmRIaWRlRHJvcGRvd24oKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlBhbmVsRGVz
Y3JpcHRvcn0gcGFuZWxEZXNjcmlwdG9yCi0gICAgICovCi0gICAgYWRkUGFuZWw6IGZ1bmN0aW9u
KHBhbmVsRGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhbmVsRGVzY3JpcHRvcnMu
cHVzaChwYW5lbERlc2NyaXB0b3IpOwotICAgICAgICBwYW5lbERlc2NyaXB0b3IuX3Rvb2xiYXJF
bGVtZW50ID0gdGhpcy5fY3JlYXRlUGFuZWxUb29sYmFySXRlbShwYW5lbERlc2NyaXB0b3IpOwot
ICAgICAgICBpZiAodGhpcy5faXNQYW5lbFZpc2libGUocGFuZWxEZXNjcmlwdG9yLm5hbWUoKSkp
Ci0gICAgICAgICAgICBwYW5lbERlc2NyaXB0b3IuX3Rvb2xiYXJFbGVtZW50LnJlbW92ZVN0eWxl
Q2xhc3MoImhpZGRlbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYW5lbERlc2NyaXB0
b3IuX3Rvb2xiYXJFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQocGFuZWxEZXNjcmlwdG9yLl90b29sYmFyRWxlbWVudCk7Ci0g
ICAgICAgIHRoaXMucmVzaXplKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
IXN0cmluZ30gbmFtZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2lz
UGFuZWxWaXNpYmxlQnlEZWZhdWx0OiBmdW5jdGlvbihuYW1lKQotICAgIHsKLSAgICAgICAgdmFy
IHZpc2libGUgPSB7Ci0gICAgICAgICAgICAiZWxlbWVudHMiOiB0cnVlLAotICAgICAgICAgICAg
ImNvbnNvbGUiOiB0cnVlLAotICAgICAgICAgICAgIm5ldHdvcmsiOiB0cnVlLAotICAgICAgICAg
ICAgInNjcmlwdHMiOiB0cnVlLAotICAgICAgICAgICAgInRpbWVsaW5lIjogdHJ1ZSwKLSAgICAg
ICAgICAgICJwcm9maWxlcyI6IHRydWUsCi0gICAgICAgICAgICAiY3B1LXByb2ZpbGVyIjogdHJ1
ZSwKLSAgICAgICAgICAgICJoZWFwLXByb2ZpbGVyIjogdHJ1ZSwKLSAgICAgICAgICAgICJhdWRp
dHMiOiB0cnVlLAotICAgICAgICAgICAgInJlc291cmNlcyI6IHRydWUsCi0gICAgICAgIH07Ci0g
ICAgICAgIHJldHVybiAhIXZpc2libGVbbmFtZV07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2lzVG9vbGJhckN1c3RvbWl6YWJsZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0geyFzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtib29sZWFu
fQotICAgICAqLwotICAgIF9pc1BhbmVsVmlzaWJsZTogZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5faXNUb29sYmFyQ3VzdG9taXphYmxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgdmFyIHZpc2libGVQYW5lbHMgPSBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MudmlzaWJsZVBhbmVscy5nZXQoKTsKLSAgICAgICAgcmV0dXJuIHZpc2libGVQYW5lbHMu
aGFzT3duUHJvcGVydHkobmFtZSkgPyB2aXNpYmxlUGFuZWxzW25hbWVdIDogdGhpcy5faXNQYW5l
bFZpc2libGVCeURlZmF1bHQobmFtZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7IXN0cmluZ30gbmFtZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmlzaWJsZQotICAgICAq
LwotICAgIF9zZXRQYW5lbFZpc2libGU6IGZ1bmN0aW9uKG5hbWUsIHZpc2libGUpCi0gICAgewot
ICAgICAgICB2YXIgdmlzaWJsZVBhbmVscyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy52aXNpYmxl
UGFuZWxzLmdldCgpOwotICAgICAgICB2aXNpYmxlUGFuZWxzW25hbWVdID0gdmlzaWJsZTsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnZpc2libGVQYW5lbHMuc2V0KHZpc2libGVQYW5l
bHMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUGFu
ZWxEZXNjcmlwdG9yfSBwYW5lbERlc2NyaXB0b3IKLSAgICAgKi8KLSAgICBfaGlkZVBhbmVsOiBm
dW5jdGlvbihwYW5lbERlc2NyaXB0b3IpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2lzUGFu
ZWxWaXNpYmxlKHBhbmVsRGVzY3JpcHRvci5uYW1lKCkpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAvLyBEbyBub3QgaGlkZSB0aGUgbGFzdCB2aXNpYmxlIHBhbmVsLgotICAgICAgICB2
YXIgY291bnQgPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3BhbmVsRGVz
Y3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9pc1BhbmVsVmlz
aWJsZSh0aGlzLl9wYW5lbERlc2NyaXB0b3JzW2ldLm5hbWUoKSkpCi0gICAgICAgICAgICAgICAg
Kytjb3VudDsKLSAgICAgICAgfQotICAgICAgICBpZiAoY291bnQgPT09IDEpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3NldFBhbmVsVmlzaWJsZShwYW5lbERlc2NyaXB0b3Iu
bmFtZSgpLCBmYWxzZSk7Ci0gICAgICAgIHBhbmVsRGVzY3JpcHRvci5fdG9vbGJhckVsZW1lbnQu
YWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaW5zcGVj
dG9yVmlldy5jdXJyZW50UGFuZWwoKS5uYW1lID09PSBwYW5lbERlc2NyaXB0b3IubmFtZSgpKSB7
Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3BhbmVsRGVzY3JpcHRvcnMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNQYW5lbFZpc2libGUo
dGhpcy5fcGFuZWxEZXNjcmlwdG9yc1tpXS5uYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5zaG93UGFuZWwodGhpcy5fcGFuZWxEZXNjcmlwdG9yc1tpXS5uYW1lKCkp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5yZXNpemUoKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRvcn0gcGFuZWxE
ZXNjcmlwdG9yCi0gICAgICovCi0gICAgX3Nob3dQYW5lbDogZnVuY3Rpb24ocGFuZWxEZXNjcmlw
dG9yKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzUGFuZWxWaXNpYmxlKHBhbmVsRGVzY3Jp
cHRvci5uYW1lKCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwYW5lbERlc2NyaXB0
b3IuX3Rvb2xiYXJFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgICAgICB0
aGlzLl9zZXRQYW5lbFZpc2libGUocGFuZWxEZXNjcmlwdG9yLm5hbWUoKSwgdHJ1ZSk7Ci0gICAg
ICAgIHRoaXMucmVzaXplKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlBhbmVsRGVzY3JpcHRvcn0gcGFuZWxEZXNjcmlwdG9yCi0gICAgICogQHJldHVy
biB7RWxlbWVudH0KLSAgICAgKi8KLSAgICBfY3JlYXRlUGFuZWxUb29sYmFySXRlbTogZnVuY3Rp
b24ocGFuZWxEZXNjcmlwdG9yKQotICAgIHsKLSAgICAgICAgdmFyIHRvb2xiYXJJdGVtID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci0gICAgICAgIHRvb2xiYXJJdGVtLmNsYXNz
TmFtZSA9ICJ0b29sYmFyLWl0ZW0gdG9nZ2xlYWJsZSI7Ci0gICAgICAgIHRvb2xiYXJJdGVtLnBh
bmVsRGVzY3JpcHRvciA9IHBhbmVsRGVzY3JpcHRvcjsKLSAgICAgICAgdG9vbGJhckl0ZW0uYWRk
U3R5bGVDbGFzcyhwYW5lbERlc2NyaXB0b3IubmFtZSgpKTsKLQotICAgICAgICBmdW5jdGlvbiBv
blRvb2xiYXJJdGVtQ2xpY2tlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZURyb3Bkb3duQnV0dG9uQW5kSGlkZURyb3Bkb3duKCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0
b3IuaW5zcGVjdG9yVmlldy5zZXRDdXJyZW50UGFuZWwocGFuZWxEZXNjcmlwdG9yLnBhbmVsKCkp
OwotICAgICAgICB9Ci0gICAgICAgIHRvb2xiYXJJdGVtLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
Iiwgb25Ub29sYmFySXRlbUNsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgICAgIGZ1
bmN0aW9uIHBhbmVsU2VsZWN0ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLmluc3BlY3RvclZpZXcuY3VycmVudFBhbmVsKCkgJiYgcGFuZWxEZXNjcmlwdG9yLm5h
bWUoKSA9PT0gV2ViSW5zcGVjdG9yLmluc3BlY3RvclZpZXcuY3VycmVudFBhbmVsKCkubmFtZSkK
LSAgICAgICAgICAgICAgICB0b29sYmFySXRlbS5hZGRTdHlsZUNsYXNzKCJ0b2dnbGVkLW9uIik7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdG9vbGJhckl0ZW0ucmVtb3ZlU3R5
bGVDbGFzcygidG9nZ2xlZC1vbiIpOwotICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5p
bnNwZWN0b3JWaWV3LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcu
RXZlbnRzLlBhbmVsU2VsZWN0ZWQsIHBhbmVsU2VsZWN0ZWQpOwotCi0gICAgICAgIHZhciBpY29u
RWxlbWVudCA9IHRvb2xiYXJJdGVtLmNyZWF0ZUNoaWxkKCJkaXYiLCAidG9vbGJhci1pY29uIik7
Ci0gICAgICAgIHRvb2xiYXJJdGVtLmNyZWF0ZUNoaWxkKCJkaXYiLCAidG9vbGJhci1sYWJlbCIp
LnRleHRDb250ZW50ID0gcGFuZWxEZXNjcmlwdG9yLnRpdGxlKCk7Ci0gICAgICAgIGlmIChwYW5l
bERlc2NyaXB0b3IuaWNvblVSTCgpKSB7Ci0gICAgICAgICAgICBpY29uRWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJjdXN0b20tdG9vbGJhci1pY29uIik7Ci0gICAgICAgICAgICBpY29uRWxlbWVudC5z
dHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAidXJsKCIgKyBwYW5lbERlc2NyaXB0b3IuaWNvblVSTCgp
ICsgIikiOwotICAgICAgICB9Ci0gICAgICAgIHBhbmVsU2VsZWN0ZWQoKTsKLSAgICAgICAgcmV0
dXJuIHRvb2xiYXJJdGVtOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQotICAgICAqLwotICAgIF9pc0RvY2tlZFRvQm90dG9tOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gISFXZWJJbnNwZWN0b3IuZG9ja0NvbnRyb2xsZXIgJiYgV2ViSW5zcGVj
dG9yLmRvY2tDb250cm9sbGVyLmRvY2tTaWRlKCkgPT0gV2ViSW5zcGVjdG9yLkRvY2tDb250cm9s
bGVyLlN0YXRlLkRvY2tlZFRvQm90dG9tOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9pc1VuZG9ja2VkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gISFXZWJJbnNwZWN0b3IuZG9ja0NvbnRyb2xsZXIgJiYgV2ViSW5z
cGVjdG9yLmRvY2tDb250cm9sbGVyLmRvY2tTaWRlKCkgPT0gV2ViSW5zcGVjdG9yLkRvY2tDb250
cm9sbGVyLlN0YXRlLlVuZG9ja2VkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtib29sZWFufQotICAgICAqLwotICAgIF90b29sYmFyRHJhZ1N0YXJ0OiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc1VuZG9ja2VkKCkgJiYgIXRoaXMuX2lzV2lu
ZG93TW92ZVN1cHBvcnRlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2
YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBpZiAodGFyZ2V0Lmhhc1N0eWxlQ2xh
c3MoInRvb2xiYXItaXRlbSIpICYmIHRhcmdldC5oYXNTdHlsZUNsYXNzKCJ0b2dnbGVhYmxlIikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHRhcmdldCAhPT0gdGhp
cy5lbGVtZW50ICYmICF0YXJnZXQuaGFzU3R5bGVDbGFzcygidG9vbGJhci1pdGVtIikpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5fbGFzdFNjcmVlblggPSBldmVu
dC5zY3JlZW5YOwotICAgICAgICB0aGlzLl9sYXN0U2NyZWVuWSA9IGV2ZW50LnNjcmVlblk7Ci0g
ICAgICAgIHRoaXMuX2xhc3RIZWlnaHREdXJpbmdEcmFnID0gd2luZG93LmlubmVySGVpZ2h0Owot
ICAgICAgICB0aGlzLl9zdGFydERpc3RhbmNlVG9SaWdodCA9IHdpbmRvdy5pbm5lcldpZHRoIC0g
ZXZlbnQuY2xpZW50WDsKLSAgICAgICAgdGhpcy5fc3RhcnREaW5zdGFuY2VUb0JvdHRvbSA9IHdp
bmRvdy5pbm5lckhlaWdodCAtIGV2ZW50LmNsaWVudFk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0sCi0KLSAgICBfdG9vbGJhckRyYWdFbmQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgLy8gV2UgbWF5IG5vdCBnZXQgdGhlIGRyYWcgZXZlbnQgYXQgdGhlIGVuZC4KLSAgICAg
ICAgLy8gQXBwbHkgbGFzdCBjaGFuZ2VzIG1hbnVhbGx5LgotICAgICAgICB0aGlzLl90b29sYmFy
RHJhZyhldmVudCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0U2NyZWVuWDsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX2xhc3RTY3JlZW5ZOwotICAgICAgICBkZWxldGUgdGhpcy5fbGFzdEhlaWdo
dER1cmluZ0RyYWc7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydERpc3RhbmNlVG9SaWdodDsK
LSAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0RGluc3RhbmNlVG9Cb3R0b207Ci0gICAgfSwKLQot
ICAgIF90b29sYmFyRHJhZzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotCi0gICAgICAgIGlmICh0aGlzLl9pc1VuZG9ja2VkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdG9vbGJhckRyYWdNb3ZlV2luZG93KGV2ZW50KTsKLQotICAg
ICAgICBpZiAoUHJlZmVyZW5jZXMuc2hvd0RvY2tUb1JpZ2h0KQotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3Rvb2xiYXJEcmFnQ2hhbmdlRG9ja2luZyhldmVudCk7Ci0KLSAgICAgICAgcmV0dXJu
IHRoaXMuX3Rvb2xiYXJEcmFnQ2hhbmdlSGVpZ2h0KGV2ZW50KTsKLSAgICB9LAotCi0gICAgX3Rv
b2xiYXJEcmFnTW92ZVdpbmRvdzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIg
eCA9IGV2ZW50LnNjcmVlblggLSB0aGlzLl9sYXN0U2NyZWVuWDsKLSAgICAgICAgdmFyIHkgPSBl
dmVudC5zY3JlZW5ZIC0gdGhpcy5fbGFzdFNjcmVlblk7Ci0gICAgICAgIHRoaXMuX2xhc3RTY3Jl
ZW5YID0gZXZlbnQuc2NyZWVuWDsKLSAgICAgICAgdGhpcy5fbGFzdFNjcmVlblkgPSBldmVudC5z
Y3JlZW5ZOwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QubW92ZVdpbmRvd0J5KHgsIHkp
OwotICAgIH0sCi0KLSAgICBfdG9vbGJhckRyYWdDaGFuZ2VEb2NraW5nOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9pc0RvY2tlZFRvQm90dG9tKCkpIHsKLSAgICAg
ICAgICAgIHZhciBkaXN0YW5jZVRvUmlnaHQgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGV2ZW50LmNs
aWVudFg7Ci0gICAgICAgICAgICBpZiAoZGlzdGFuY2VUb1JpZ2h0IDwgdGhpcy5fc3RhcnREaXN0
YW5jZVRvUmlnaHQgKiAyIC8gMykgewotICAgICAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5k
SG9zdC5yZXF1ZXN0U2V0RG9ja1NpZGUoV2ViSW5zcGVjdG9yLkRvY2tDb250cm9sbGVyLlN0YXRl
LkRvY2tlZFRvUmlnaHQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGRpc3RhbmNlVG9Cb3R0b20g
PSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBldmVudC5jbGllbnRZOwotICAgICAgICAgICAgaWYgKGRp
c3RhbmNlVG9Cb3R0b20gPCB0aGlzLl9zdGFydERpbnN0YW5jZVRvQm90dG9tICogMiAvIDMpIHsK
LSAgICAgICAgICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QucmVxdWVzdFNldERvY2tTaWRl
KFdlYkluc3BlY3Rvci5Eb2NrQ29udHJvbGxlci5TdGF0ZS5Eb2NrZWRUb0JvdHRvbSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX3Rvb2xiYXJEcmFnQ2hhbmdlSGVpZ2h0OiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIC8vIENoYW5nZSB0aGUgaW5zcGVjdG9yIHdpbmRvdyBoZWlnaHQgZm9yIGRvY2st
dG8tYm90dG9tIG9ubHkgbW9kZS4KLSAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuX2xhc3RIZWln
aHREdXJpbmdEcmFnIC0gKGV2ZW50LnNjcmVlblkgLSB0aGlzLl9sYXN0U2NyZWVuWSk7Ci0gICAg
ICAgIHRoaXMuX2xhc3RIZWlnaHREdXJpbmdEcmFnID0gaGVpZ2h0OwotICAgICAgICB0aGlzLl9s
YXN0U2NyZWVuWSA9IGV2ZW50LnNjcmVlblk7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9z
dC5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOwotICAgIH0sCi0KLSAgICBfb25DbG9z
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmNsb3NlKCk7Ci0gICAg
fSwKLQotICAgIF9zZXREcm9wZG93blZpc2libGU6IGZ1bmN0aW9uKHZpc2libGUpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuX2Ryb3Bkb3duKSB7Ci0gICAgICAgICAgICBpZiAoIXZpc2libGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdGhpcy5fZHJvcGRvd24gPSBu
ZXcgV2ViSW5zcGVjdG9yLlRvb2xiYXJEcm9wZG93bih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAodmlzaWJsZSkKLSAgICAgICAgICAgIHRoaXMuX2Ryb3Bkb3duLnNob3coKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fZHJvcGRvd24uaGlkZSgpOwotICAgIH0sCi0KLSAg
ICBfdG9nZ2xlRHJvcGRvd246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NldERy
b3Bkb3duVmlzaWJsZSghdGhpcy5fZHJvcGRvd24gfHwgIXRoaXMuX2Ryb3Bkb3duLnZpc2libGUp
OwotICAgIH0sCi0KLSAgICBfdG9nZ2xlUGFuZWxzTWVudTogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICBmdW5jdGlvbiB0b2dnbGVQYW5lbChwYW5lbERlc2NyaXB0b3IpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9pc1BhbmVsVmlzaWJsZShwYW5lbERlc2NyaXB0b3Iu
bmFtZSgpKSkKLSAgICAgICAgICAgICAgICB0aGlzLl9oaWRlUGFuZWwocGFuZWxEZXNjcmlwdG9y
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9zaG93UGFuZWwocGFu
ZWxEZXNjcmlwdG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5l
dyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOwotICAgICAgICB2YXIgbnVtRGVmYXVs
dFBhbmVscyA9IDQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFuZWxEZXNj
cmlwdG9ycy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGkgPT09IG51bURlZmF1bHRQ
YW5lbHMpCi0gICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7Ci0g
ICAgICAgICAgICB2YXIgZGVzY3IgPSB0aGlzLl9wYW5lbERlc2NyaXB0b3JzW2ldOwotICAgICAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kQ2hlY2tib3hJdGVtKGRlc2NyLnRpdGxlKCksIHRvZ2ds
ZVBhbmVsLmJpbmQodGhpcywgZGVzY3IpLCB0aGlzLl9pc1BhbmVsVmlzaWJsZShkZXNjci5uYW1l
KCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHRNZW51LnNob3dTb2Z0TWVudSgpOwot
ICAgIH0sCi0KLSAgICBfdXBkYXRlRHJvcGRvd25CdXR0b25BbmRIaWRlRHJvcGRvd246IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pbnZva2VPbmNlQWZ0ZXJCYXRjaFVw
ZGF0ZSh0aGlzLCB0aGlzLl9pbm5lclVwZGF0ZURyb3Bkb3duQnV0dG9uQW5kSGlkZURyb3Bkb3du
KTsKLSAgICB9LAotCi0gICAgX2lubmVyVXBkYXRlRHJvcGRvd25CdXR0b25BbmRIaWRlRHJvcGRv
d246IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NldERyb3Bkb3duVmlzaWJsZShm
YWxzZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLmVs
ZW1lbnQub2Zmc2V0SGVpZ2h0KQotICAgICAgICAgICAgdGhpcy5fZHJvcGRvd25CdXR0b24ucmVt
b3ZlU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMu
X2Ryb3Bkb3duQnV0dG9uLmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRvb2xiYXJ9IHRvb2xi
YXIKLSAqLwotV2ViSW5zcGVjdG9yLlRvb2xiYXJEcm9wZG93biA9IGZ1bmN0aW9uKHRvb2xiYXIp
Ci17Ci0gICAgdGhpcy5fdG9vbGJhciA9IHRvb2xiYXI7Ci0gICAgdGhpcy5fYXJyb3cgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidG9vbGJhci1kcm9wZG93bi1hcnJvdyIpOwotICAgIHRoaXMu
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZWxlbWVu
dC5pZCA9ICJ0b29sYmFyLWRyb3Bkb3duIjsKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0g
InRvb2xiYXItc21hbGwiOwotICAgIHRoaXMuX2NvbnRlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50
LmNyZWF0ZUNoaWxkKCJkaXYiLCAic2Nyb2xsYWJsZS1jb250ZW50Iik7Ci0gICAgdGhpcy5fY29u
dGVudEVsZW1lbnQudGFiSW5kZXggPSAwOwotICAgIHRoaXMuX2NvbnRlbnRFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7
Ci19Ci0KLVdlYkluc3BlY3Rvci5Ub29sYmFyRHJvcGRvd24ucHJvdG90eXBlID0gewotICAgIHNo
b3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnZpc2libGUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuZWxlbWVudC5zdHlsZTsKLSAg
ICAgICAgdGhpcy5fcG9wdWxhdGUoKTsKLSAgICAgICAgdmFyIHRvcCA9IHRoaXMuX2Fycm93LnRv
dGFsT2Zmc2V0VG9wKCkgKyB0aGlzLl9hcnJvdy5jbGllbnRIZWlnaHQ7Ci0gICAgICAgIHRoaXMu
X2Fycm93LmFkZFN0eWxlQ2xhc3MoImRyb3Bkb3duLXZpc2libGUiKTsKLSAgICAgICAgdGhpcy5l
bGVtZW50LnN0eWxlLnRvcCA9IHRvcCArICJweCI7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHls
ZS5yaWdodCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gdGhpcy5fYXJyb3cudG90YWxPZmZzZXRMZWZ0
KCkgLSB0aGlzLl9hcnJvdy5jbGllbnRXaWR0aCArICJweCI7Ci0gICAgICAgIHRoaXMuX2NvbnRl
bnRFbGVtZW50LnN0eWxlLm1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIDIw
ICsgInB4IjsKLSAgICAgICAgdGhpcy5fdG9vbGJhci5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
ZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIGhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy52aXNpYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9h
cnJvdy5yZW1vdmVTdHlsZUNsYXNzKCJkcm9wZG93bi12aXNpYmxlIik7Ci0gICAgICAgIHRoaXMu
ZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7Ci0gICAgICAgIHRo
aXMuX2NvbnRlbnRFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgfSwKLQotICAgIGdldCB2
aXNpYmxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIXRoaXMuZWxlbWVudC5wYXJlbnROb2Rl
OwotICAgIH0sCi0KLSAgICBfcG9wdWxhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZh
ciB0b29sYmFySXRlbXMgPSB0aGlzLl90b29sYmFyLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgi
LnRvb2xiYXItaXRlbS50b2dnbGVhYmxlIik7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0b29sYmFySXRlbXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0b29sYmFySXRl
bXNbaV0ub2Zmc2V0VG9wID4gMSkKLSAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50RWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLl90b29sYmFyLl9jcmVhdGVQYW5lbFRvb2xiYXJJdGVtKHRvb2xi
YXJJdGVtc1tpXS5wYW5lbERlc2NyaXB0b3IpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBf
b25LZXlEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudC5rZXlD
b2RlICE9PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBldmVudC5jb25zdW1lKCk7Ci0gICAgICAgIHRoaXMu
aGlkZSgpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAdHlwZSB7P1dlYkluc3BlY3Rvci5Ub29sYmFy
fQotICovCi1XZWJJbnNwZWN0b3IudG9vbGJhciA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Ub3BEb3duUHJvZmlsZURhdGFH
cmlkVHJlZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzNGZlOS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RvcERvd25Qcm9maWxl
RGF0YUdyaWRUcmVlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgMjgwIE5vcnRoIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZX0KLSAq
IEBwYXJhbSB7IVByb2ZpbGVyQWdlbnQuQ1BVUHJvZmlsZU5vZGV9IHByb2ZpbGVOb2RlCi0gKiBA
cGFyYW0geyFXZWJJbnNwZWN0b3IuVG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWV9IG93bmluZ1Ry
ZWUKLSAqLwotV2ViSW5zcGVjdG9yLlRvcERvd25Qcm9maWxlRGF0YUdyaWROb2RlID0gZnVuY3Rp
b24ocHJvZmlsZU5vZGUsIG93bmluZ1RyZWUpCi17Ci0gICAgdmFyIGhhc0NoaWxkcmVuID0gISEo
cHJvZmlsZU5vZGUuY2hpbGRyZW4gJiYgcHJvZmlsZU5vZGUuY2hpbGRyZW4ubGVuZ3RoKTsKLQot
ICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWROb2RlLmNhbGwodGhpcywgcHJvZmlsZU5v
ZGUsIG93bmluZ1RyZWUsIGhhc0NoaWxkcmVuKTsKLQotICAgIHRoaXMuX3JlbWFpbmluZ0NoaWxk
cmVuID0gcHJvZmlsZU5vZGUuY2hpbGRyZW47Ci19Ci0KLVdlYkluc3BlY3Rvci5Ub3BEb3duUHJv
ZmlsZURhdGFHcmlkTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgX3NoYXJlZFBvcHVsYXRlOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9yZW1haW5pbmdDaGls
ZHJlbjsKLSAgICAgICAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoOwotCi0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5Ub3BEb3duUHJvZmlsZURhdGFH
cmlkTm9kZShjaGlsZHJlbltpXSwgdGhpcy50cmVlKSk7Ci0KLSAgICAgICAgdGhpcy5fcmVtYWlu
aW5nQ2hpbGRyZW4gPSBudWxsOwotICAgIH0sCi0KLSAgICBfZXhjbHVkZTogZnVuY3Rpb24oYUNh
bGxVSUQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmVtYWluaW5nQ2hpbGRyZW4pCi0gICAg
ICAgICAgICB0aGlzLnBvcHVsYXRlKCk7Ci0KLSAgICAgICAgdGhpcy5fc2F2ZSgpOwotCi0gICAg
ICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47Ci0gICAgICAgIHZhciBpbmRleCA9IHRo
aXMuY2hpbGRyZW4ubGVuZ3RoOwotCi0gICAgICAgIHdoaWxlIChpbmRleC0tKQotICAgICAgICAg
ICAgY2hpbGRyZW5baW5kZXhdLl9leGNsdWRlKGFDYWxsVUlEKTsKLQotICAgICAgICB2YXIgY2hp
bGQgPSB0aGlzLmNoaWxkcmVuQnlDYWxsVUlEW2FDYWxsVUlEXTsKLQotICAgICAgICBpZiAoY2hp
bGQpCi0gICAgICAgICAgICB0aGlzLl9tZXJnZShjaGlsZCwgdHJ1ZSk7Ci0gICAgfSwKLQotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZE5vZGUucHJvdG90eXBlCi19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlByb2Zp
bGVEYXRhR3JpZFRyZWV9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlld30g
cHJvZmlsZVZpZXcKLSAqIEBwYXJhbSB7UHJvZmlsZXJBZ2VudC5DUFVQcm9maWxlTm9kZX0gcm9v
dFByb2ZpbGVOb2RlCi0gKi8KLVdlYkluc3BlY3Rvci5Ub3BEb3duUHJvZmlsZURhdGFHcmlkVHJl
ZSA9IGZ1bmN0aW9uKHByb2ZpbGVWaWV3LCByb290UHJvZmlsZU5vZGUpCi17Ci0gICAgV2ViSW5z
cGVjdG9yLlByb2ZpbGVEYXRhR3JpZFRyZWUuY2FsbCh0aGlzLCBwcm9maWxlVmlldywgcm9vdFBy
b2ZpbGVOb2RlKTsKLQotICAgIHRoaXMuX3JlbWFpbmluZ0NoaWxkcmVuID0gcm9vdFByb2ZpbGVO
b2RlLmNoaWxkcmVuOwotCi0gICAgdmFyIGFueSA9IC8qKiBAdHlwZXsqfSAqLyh0aGlzKTsKLSAg
ICB2YXIgbm9kZSA9IC8qKiBAdHlwZXtXZWJJbnNwZWN0b3IuUHJvZmlsZURhdGFHcmlkTm9kZX0g
Ki8oYW55KTsKLSAgICBXZWJJbnNwZWN0b3IuVG9wRG93blByb2ZpbGVEYXRhR3JpZE5vZGUucHJv
dG90eXBlLnBvcHVsYXRlLmNhbGwobm9kZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Ub3BEb3duUHJv
ZmlsZURhdGFHcmlkVHJlZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHsh
V2ViSW5zcGVjdG9yLlByb2ZpbGVEYXRhR3JpZE5vZGV9IHByb2ZpbGVEYXRhR3JpZE5vZGUKLSAg
ICAgKi8KLSAgICBmb2N1czogZnVuY3Rpb24ocHJvZmlsZURhdGFHcmlkTm9kZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghcHJvZmlsZURhdGFHcmlkTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB0aGlzLl9zYXZlKCk7Ci0gICAgICAgIHByb2ZpbGVEYXRhR3JpZE5vZGUuc2F2ZVBv
c2l0aW9uKCk7Ci0KLSAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtwcm9maWxlRGF0YUdyaWROb2Rl
XTsKLSAgICAgICAgdGhpcy50b3RhbFRpbWUgPSBwcm9maWxlRGF0YUdyaWROb2RlLnRvdGFsVGlt
ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2Zp
bGVEYXRhR3JpZE5vZGV9IHByb2ZpbGVEYXRhR3JpZE5vZGUKLSAgICAgKi8KLSAgICBleGNsdWRl
OiBmdW5jdGlvbihwcm9maWxlRGF0YUdyaWROb2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFwcm9m
aWxlRGF0YUdyaWROb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3Nh
dmUoKTsKLQotICAgICAgICB2YXIgZXhjbHVkZWRDYWxsVUlEID0gcHJvZmlsZURhdGFHcmlkTm9k
ZS5jYWxsVUlEOwotCi0gICAgICAgIHZhciBhbnkgPSAvKiogQHR5cGV7Kn0gKi8odGhpcyk7Ci0g
ICAgICAgIHZhciBub2RlID0gLyoqIEB0eXBle1dlYkluc3BlY3Rvci5Ub3BEb3duUHJvZmlsZURh
dGFHcmlkTm9kZX0gKi8oYW55KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRvcERvd25Qcm9maWxl
RGF0YUdyaWROb2RlLnByb3RvdHlwZS5fZXhjbHVkZS5jYWxsKG5vZGUsIGV4Y2x1ZGVkQ2FsbFVJ
RCk7Ci0KLSAgICAgICAgaWYgKHRoaXMubGFzdENvbXBhcmF0b3IpCi0gICAgICAgICAgICB0aGlz
LnNvcnQodGhpcy5sYXN0Q29tcGFyYXRvciwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIHJlc3RvcmU6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2F2ZWRDaGlsZHJlbikKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmNoaWxkcmVuWzBdLnJlc3RvcmVQb3Np
dGlvbigpOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlRGF0YUdyaWRUcmVlLnByb3Rv
dHlwZS5yZXN0b3JlLmNhbGwodGhpcyk7Ci0gICAgfSwKLQotICAgIF9tZXJnZTogV2ViSW5zcGVj
dG9yLlRvcERvd25Qcm9maWxlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fbWVyZ2UsCi0KLSAgICBf
c2hhcmVkUG9wdWxhdGU6IFdlYkluc3BlY3Rvci5Ub3BEb3duUHJvZmlsZURhdGFHcmlkTm9kZS5w
cm90b3R5cGUuX3NoYXJlZFBvcHVsYXRlLAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
UHJvZmlsZURhdGFHcmlkVHJlZS5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVUlTb3VyY2VDb2RlLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9VSVNvdXJjZUNvZGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDIwNjMxNDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9VSVNvdXJjZUNvZGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NjIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0
fQotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9Ci0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5Qcm9qZWN0fSBwcm9qZWN0Ci0gKiBAcGFyYW0ge0FycmF5LjxzdHJp
bmc+fSBwYXRoCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5SZXNvdXJjZVR5cGV9IGNvbnRlbnRUeXBlCi0gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRWRpdGFi
bGUKLSAqLwotV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZSA9IGZ1bmN0aW9uKHByb2plY3QsIHBh
dGgsIG9yaWdpblVSTCwgdXJsLCBjb250ZW50VHlwZSwgaXNFZGl0YWJsZSkKLXsKLSAgICB0aGlz
Ll9wcm9qZWN0ID0gcHJvamVjdDsKLSAgICB0aGlzLl9wYXRoID0gcGF0aDsKLSAgICB0aGlzLl9v
cmlnaW5VUkwgPSBvcmlnaW5VUkw7Ci0gICAgdGhpcy5fdXJsID0gdXJsOwotICAgIHRoaXMuX2Nv
bnRlbnRUeXBlID0gY29udGVudFR5cGU7Ci0gICAgdGhpcy5faXNFZGl0YWJsZSA9IGlzRWRpdGFi
bGU7Ci0gICAgLyoqCi0gICAgICogQHR5cGUgQXJyYXkuPGZ1bmN0aW9uKD9zdHJpbmcsYm9vbGVh
bixzdHJpbmcpPgotICAgICAqLwotICAgIHRoaXMuX3JlcXVlc3RDb250ZW50Q2FsbGJhY2tzID0g
W107Ci0gICAgdGhpcy5fbGl2ZUxvY2F0aW9ucyA9IG5ldyBTZXQoKTsKLSAgICAvKioKLSAgICAg
KiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5QcmVzZW50YXRpb25Db25zb2xlTWVzc2FnZT59
Ci0gICAgICovCi0gICAgdGhpcy5fY29uc29sZU1lc3NhZ2VzID0gW107Ci0gICAgCi0gICAgLyoq
Ci0gICAgICogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuUmV2aXNpb24+fQotICAgICAqLwot
ICAgIHRoaXMuaGlzdG9yeSA9IFtdOwotICAgIGlmICh0aGlzLmlzRWRpdGFibGUoKSAmJiB0aGlz
Ll91cmwpCi0gICAgICAgIHRoaXMuX3Jlc3RvcmVSZXZpc2lvbkhpc3RvcnkoKTsKLSAgICB0aGlz
Ll9mb3JtYXR0ZXJNYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5JZGVudGl0eUZvcm1hdHRlclNv
dXJjZU1hcHBpbmcoKTsKLX0KLQotV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMgPSB7
Ci0gICAgRm9ybWF0dGVkQ2hhbmdlZDogIkZvcm1hdHRlZENoYW5nZWQiLAotICAgIFdvcmtpbmdD
b3B5Q2hhbmdlZDogIldvcmtpbmdDb3B5Q2hhbmdlZCIsCi0gICAgV29ya2luZ0NvcHlDb21taXR0
ZWQ6ICJXb3JraW5nQ29weUNvbW1pdHRlZCIsCi0gICAgVGl0bGVDaGFuZ2VkOiAiVGl0bGVDaGFu
Z2VkIiwKLSAgICBDb25zb2xlTWVzc2FnZUFkZGVkOiAiQ29uc29sZU1lc3NhZ2VBZGRlZCIsCi0g
ICAgQ29uc29sZU1lc3NhZ2VSZW1vdmVkOiAiQ29uc29sZU1lc3NhZ2VSZW1vdmVkIiwKLSAgICBD
b25zb2xlTWVzc2FnZXNDbGVhcmVkOiAiQ29uc29sZU1lc3NhZ2VzQ2xlYXJlZCIsCi0gICAgU291
cmNlTWFwcGluZ0NoYW5nZWQ6ICJTb3VyY2VNYXBwaW5nQ2hhbmdlZCIsCi19Ci0KLVdlYkluc3Bl
Y3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgdXJsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl91cmw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxzdHJp
bmc+fQotICAgICAqLwotICAgIHBhdGg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9wYXRoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9
Ci0gICAgICovCi0gICAgbmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX3BhdGhbdGhpcy5fcGF0aC5sZW5ndGggLSAxXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGRpc3BsYXlOYW1lOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSB0aGlzLm5hbWUoKSB8fCAodGhpcy5f
cHJvamVjdC5kaXNwbGF5TmFtZSgpICsgIi8iICsgdGhpcy5fcGF0aC5qb2luKCIvIikpOwotICAg
ICAgICByZXR1cm4gZGlzcGxheU5hbWUudHJpbUVuZCgxMDApOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgdXJpOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX3Byb2plY3QuaWQoKSkKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLl9wYXRoLmpvaW4oIi8iKTsKLSAgICAgICAgaWYgKCF0aGlzLl9wYXRoLmxlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0LmlkKCk7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9wcm9qZWN0LmlkKCkgKyAiLyIgKyB0aGlzLl9wYXRoLmpvaW4oIi8iKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIG9yaWdpblVS
TDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpblVSTDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUKLSAgICAgKi8K
LSAgICByZW5hbWU6IGZ1bmN0aW9uKG5ld05hbWUpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X3BhdGgubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9wYXRoW3Ro
aXMuX3BhdGgubGVuZ3RoIC0gMV0gPSBuZXdOYW1lOwotICAgICAgICB0aGlzLl91cmwgPSBuZXdO
YW1lOwotICAgICAgICB0aGlzLl9vcmlnaW5VUkwgPSBuZXdOYW1lOwotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5U
aXRsZUNoYW5nZWQsIG51bGwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtz
dHJpbmd9Ci0gICAgICovCi0gICAgY29udGVudFVSTDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMub3JpZ2luVVJMKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGV9Ci0gICAgICovCi0gICAgY29udGVudFR5
cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50VHlwZTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNjcmlwdEZp
bGV9Ci0gICAgICovCi0gICAgc2NyaXB0RmlsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3NjcmlwdEZpbGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlNjcmlwdEZpbGV9IHNjcmlwdEZpbGUKLSAgICAgKi8KLSAgICBzZXRT
Y3JpcHRGaWxlOiBmdW5jdGlvbihzY3JpcHRGaWxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2Ny
aXB0RmlsZSA9IHNjcmlwdEZpbGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5TdHlsZUZpbGV9Ci0gICAgICovCi0gICAgc3R5bGVGaWxlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVGaWxlOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TdHlsZUZpbGV9IHN0eWxlRmlsZQot
ICAgICAqLwotICAgIHNldFN0eWxlRmlsZTogZnVuY3Rpb24oc3R5bGVGaWxlKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fc3R5bGVGaWxlID0gc3R5bGVGaWxlOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvamVjdH0KLSAgICAgKi8KLSAgICBwcm9qZWN0
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdDsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nLGJvb2xlYW4sc3Ry
aW5nKX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oY2Fs
bGJhY2spCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY29udGVudCB8fCB0aGlzLl9jb250ZW50
TG9hZGVkKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9jb250ZW50LCBmYWxzZSwgdGhp
cy5fbWltZVR5cGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX3JlcXVlc3RDb250ZW50Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgICBpZiAo
dGhpcy5fcmVxdWVzdENvbnRlbnRDYWxsYmFja3MubGVuZ3RoID09PSAxKQotICAgICAgICAgICAg
dGhpcy5fcHJvamVjdC5yZXF1ZXN0RmlsZUNvbnRlbnQodGhpcywgdGhpcy5fZmlyZUNvbnRlbnRB
dmFpbGFibGUuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIGNoZWNrQ29udGVudFVwZGF0ZWQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fcHJvamVjdC5jYW5TZXRGaWxl
Q29udGVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5fY2hlY2tp
bmdDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9jaGVja2luZ0Nv
bnRlbnQgPSB0cnVlOwotICAgICAgICB0aGlzLl9wcm9qZWN0LnJlcXVlc3RGaWxlQ29udGVudCh0
aGlzLCBjb250ZW50TG9hZGVkLmJpbmQodGhpcykpOwotCi0gICAgICAgIGZ1bmN0aW9uIGNvbnRl
bnRMb2FkZWQodXBkYXRlZENvbnRlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh1cGRh
dGVkQ29udGVudCA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhciB3b3JraW5nQ29weSA9
IHRoaXMud29ya2luZ0NvcHkoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb21taXRDb250ZW50
KCIiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXRXb3JraW5nQ29weSh3b3JraW5n
Q29weSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NoZWNraW5nQ29udGVudDsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHlw
ZW9mIHRoaXMuX2xhc3RBY2NlcHRlZENvbnRlbnQgPT09ICJzdHJpbmciICYmIHRoaXMuX2xhc3RB
Y2NlcHRlZENvbnRlbnQgPT09IHVwZGF0ZWRDb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2NoZWNraW5nQ29udGVudDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5fY29udGVudCA9PT0gdXBkYXRlZENvbnRl
bnQpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGFzdEFjY2VwdGVkQ29udGVudDsK
LSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hlY2tpbmdDb250ZW50OwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0aGlzLmlz
RGlydHkoKSkgewotICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1pdENvbnRlbnQodXBkYXRlZENv
bnRlbnQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hlY2tpbmdDb250
ZW50OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdmFyIHNob3VsZFVwZGF0ZSA9IHdpbmRvdy5jb25maXJtKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiVGhpcyBmaWxlIHdhcyBjaGFuZ2VkIGV4dGVybmFsbHkuIFdvdWxkIHlvdSBsaWtlIHRvIHJl
bG9hZCBpdD8iKSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlKQotICAgICAgICAgICAg
ICAgIHRoaXMuX2NvbW1pdENvbnRlbnQodXBkYXRlZENvbnRlbnQsIGZhbHNlKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9sYXN0QWNjZXB0ZWRDb250ZW50ID0gdXBk
YXRlZENvbnRlbnQ7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hlY2tpbmdDb250ZW50Owot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0
cmluZyxib29sZWFuLHN0cmluZyl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmVxdWVzdE9yaWdp
bmFsQ29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLl9wcm9q
ZWN0LnJlcXVlc3RGaWxlQ29udGVudCh0aGlzLCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50Ci0gICAgICogQHBhcmFtIHtib29sZWFu
fSBzaG91bGRTZXRDb250ZW50SW5Qcm9qZWN0Ci0gICAgICovCi0gICAgX2NvbW1pdENvbnRlbnQ6
IGZ1bmN0aW9uKGNvbnRlbnQsIHNob3VsZFNldENvbnRlbnRJblByb2plY3QpCi0gICAgewotICAg
ICAgICBkZWxldGUgdGhpcy5fbGFzdEFjY2VwdGVkQ29udGVudDsKLSAgICAgICAgdGhpcy5fY29u
dGVudCA9IGNvbnRlbnQ7Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRMb2FkZWQgPSB0cnVlOwotICAg
ICAgICAKLSAgICAgICAgdmFyIGxhc3RSZXZpc2lvbiA9IHRoaXMuaGlzdG9yeS5sZW5ndGggPyB0
aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdIDogbnVsbDsKLSAgICAgICAgaWYg
KCFsYXN0UmV2aXNpb24gfHwgbGFzdFJldmlzaW9uLl9jb250ZW50ICE9PSB0aGlzLl9jb250ZW50
KSB7Ci0gICAgICAgICAgICB2YXIgcmV2aXNpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlJldmlzaW9u
KHRoaXMsIHRoaXMuX2NvbnRlbnQsIG5ldyBEYXRlKCkpOwotICAgICAgICAgICAgdGhpcy5oaXN0
b3J5LnB1c2gocmV2aXNpb24pOwotICAgICAgICAgICAgcmV2aXNpb24uX3BlcnNpc3QoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBvbGRXb3JraW5nQ29weSA9IHRoaXMuX3dvcmtpbmdDb3B5
OwotICAgICAgICBkZWxldGUgdGhpcy5fd29ya2luZ0NvcHk7Ci0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLldvcmtp
bmdDb3B5Q29tbWl0dGVkLCB7b2xkV29ya2luZ0NvcHk6IG9sZFdvcmtpbmdDb3B5LCB3b3JraW5n
Q29weTogdGhpcy53b3JraW5nQ29weSgpfSk7Ci0gICAgICAgIGlmICh0aGlzLl91cmwgJiYgV2Vi
SW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmlzVVJMU2F2ZWQodGhpcy5fdXJsKSkgewotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhpcy5fdXJsLCB0aGlzLl9jb250ZW50
LCBmYWxzZSk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuY2xvc2UodGhp
cy5fdXJsKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkU2V0Q29udGVudEluUHJvamVj
dCkKLSAgICAgICAgICAgIHRoaXMuX3Byb2plY3Quc2V0RmlsZUNvbnRlbnQodGhpcywgdGhpcy5f
Y29udGVudCwgZnVuY3Rpb24oKSB7IH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gY29udGVudAotICAgICAqLwotICAgIGFkZFJldmlzaW9uOiBmdW5jdGlvbihj
b250ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fY29tbWl0Q29udGVudChjb250ZW50LCB0cnVl
KTsKLSAgICB9LAotCi0gICAgX3Jlc3RvcmVSZXZpc2lvbkhpc3Rvcnk6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB2YXIgcmVnaXN0cnkgPSBXZWJJbnNwZWN0b3IuUmV2aXNpb24uX3Jldmlz
aW9uSGlzdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgICAgIHZhciBoaXN0b3J5SXRlbXMgPSByZWdpc3Ry
eVt0aGlzLnVybF07Ci0gICAgICAgIGlmICghaGlzdG9yeUl0ZW1zIHx8ICFoaXN0b3J5SXRlbXMu
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGhpc3RvcnlJdGVtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB3
aW5kb3cubG9jYWxTdG9yYWdlW2hpc3RvcnlJdGVtc1tpXS5rZXldOwotICAgICAgICAgICAgdmFy
IHRpbWVzdGFtcCA9IG5ldyBEYXRlKGhpc3RvcnlJdGVtc1tpXS50aW1lc3RhbXApOwotICAgICAg
ICAgICAgdmFyIHJldmlzaW9uID0gbmV3IFdlYkluc3BlY3Rvci5SZXZpc2lvbih0aGlzLCBjb250
ZW50LCB0aW1lc3RhbXApOwotICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2gocmV2aXNpb24p
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbnRlbnQgPSB0aGlzLmhpc3RvcnlbdGhpcy5o
aXN0b3J5Lmxlbmd0aCAtIDFdLmNvbnRlbnQ7Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRMb2FkZWQg
PSB0cnVlOwotICAgICAgICB0aGlzLl9taW1lVHlwZSA9IHRoaXMuY2Fub25pY2FsTWltZVR5cGUo
KTsKLSAgICB9LAotCi0gICAgX2NsZWFyUmV2aXNpb25IaXN0b3J5OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXdpbmRvdy5sb2NhbFN0b3JhZ2UpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgdmFyIHJlZ2lzdHJ5ID0gV2ViSW5zcGVjdG9yLlJldmlzaW9uLl9yZXZpc2lv
bkhpc3RvcnlSZWdpc3RyeSgpOwotICAgICAgICB2YXIgaGlzdG9yeUl0ZW1zID0gcmVnaXN0cnlb
dGhpcy51cmxdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaGlzdG9yeUl0ZW1zICYmIGkgPCBo
aXN0b3J5SXRlbXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkZWxldGUgd2luZG93LmxvY2Fs
U3RvcmFnZVtoaXN0b3J5SXRlbXNbaV0ua2V5XTsKLSAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W3Ro
aXMudXJsXTsKLSAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZVsicmV2aXNpb24taGlzdG9yeSJd
ID0gSlNPTi5zdHJpbmdpZnkocmVnaXN0cnkpOwotICAgIH0sCi0gICAKLSAgICByZXZlcnRUb09y
aWdpbmFsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMg
e1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30g
Y29udGVudAotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnRlbnRFbmNvZGVkCi0gICAg
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQotICAgICAgICAgKi8KLSAgICAgICAgZnVu
Y3Rpb24gY2FsbGJhY2soY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgIT09ICJzdHJpbmciKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdGhpcy5hZGRSZXZpc2lvbihjb250ZW50
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMucmVxdWVzdE9yaWdpbmFsQ29udGVudChjYWxs
YmFjay5iaW5kKHRoaXMpKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0aW9ucy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLlVzZXJBY3Rp
b24sIHsKLSAgICAgICAgICAgIGFjdGlvbjogV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLlVzZXJB
Y3Rpb25OYW1lcy5BcHBseU9yaWdpbmFsQ29udGVudCwKLSAgICAgICAgICAgIHVybDogdGhpcy51
cmwKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZSl9IGNhbGxiYWNrCi0gICAgICovCi0gICAgcmV2
ZXJ0QW5kQ2xlYXJIaXN0b3J5OiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIC8q
KgotICAgICAgICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0KLSAgICAgICAg
ICogQHBhcmFtIHs/c3RyaW5nfSBjb250ZW50Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0g
Y29udGVudEVuY29kZWQKLSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiByZXZlcnQoY29udGVudCwgY29udGVudEVuY29kZWQs
IG1pbWVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgIT09
ICJzdHJpbmciKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdGhpcy5h
ZGRSZXZpc2lvbihjb250ZW50KTsKLSAgICAgICAgICAgIHRoaXMuX2NsZWFyUmV2aXNpb25IaXN0
b3J5KCk7Ci0gICAgICAgICAgICB0aGlzLmhpc3RvcnkgPSBbXTsKLSAgICAgICAgICAgIGNhbGxi
YWNrKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5yZXF1ZXN0T3JpZ2luYWxDb250
ZW50KHJldmVydC5iaW5kKHRoaXMpKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0
aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLlVz
ZXJBY3Rpb24sIHsKLSAgICAgICAgICAgIGFjdGlvbjogV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNz
LlVzZXJBY3Rpb25OYW1lcy5SZXZlcnRSZXZpc2lvbiwKLSAgICAgICAgICAgIHVybDogdGhpcy51
cmwKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xl
YW59Ci0gICAgICovCi0gICAgaXNFZGl0YWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX2lzRWRpdGFibGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICB3b3JraW5nQ29weTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dv
cmtpbmdDb3B5OwotICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudDsKLSAgICB9LAotCi0gICAg
cmVzZXRXb3JraW5nQ29weTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5zZXRXb3Jr
aW5nQ29weSh0aGlzLl9jb250ZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IG5ld1dvcmtpbmdDb3B5Ci0gICAgICovCi0gICAgc2V0V29ya2luZ0NvcHk6IGZ1
bmN0aW9uKG5ld1dvcmtpbmdDb3B5KQotICAgIHsKLSAgICAgICAgdmFyIHdhc0RpcnR5ID0gdGhp
cy5pc0RpcnR5KCk7ICAgICAgICAKLSAgICAgICAgdGhpcy5fbWltZVR5cGUgPSB0aGlzLmNhbm9u
aWNhbE1pbWVUeXBlKCk7Ci0gICAgICAgIHZhciBvbGRXb3JraW5nQ29weSA9IHRoaXMuX3dvcmtp
bmdDb3B5OwotICAgICAgICBpZiAodGhpcy5fY29udGVudCA9PT0gbmV3V29ya2luZ0NvcHkpCi0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fd29ya2luZ0NvcHk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRoaXMuX3dvcmtpbmdDb3B5ID0gbmV3V29ya2luZ0NvcHk7Ci0gICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRz
LldvcmtpbmdDb3B5Q2hhbmdlZCwge29sZFdvcmtpbmdDb3B5OiBvbGRXb3JraW5nQ29weSwgd29y
a2luZ0NvcHk6IHRoaXMud29ya2luZ0NvcHkoKSwgd2FzRGlydHk6IHdhc0RpcnR5fSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyl9IGNhbGxiYWNr
Ci0gICAgICovCi0gICAgY29tbWl0V29ya2luZ0NvcHk6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkoKSkgewotICAgICAgICAgICAgY2FsbGJhY2so
bnVsbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9j
b21taXRDb250ZW50KHRoaXMuX3dvcmtpbmdDb3B5LCB0cnVlKTsKLSAgICAgICAgY2FsbGJhY2so
bnVsbCk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5Vc2VyQWN0aW9uLCB7Ci0gICAg
ICAgICAgICBhY3Rpb246IFdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5Vc2VyQWN0aW9uTmFtZXMu
RmlsZVNhdmVkLAotICAgICAgICAgICAgdXJsOiB0aGlzLnVybAotICAgICAgICB9KTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBpc0Rp
cnR5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3dvcmtp
bmdDb3B5ICE9PSAidW5kZWZpbmVkIiAmJiB0aGlzLl93b3JraW5nQ29weSAhPT0gdGhpcy5fY29u
dGVudDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAq
LwotICAgIG1pbWVUeXBlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
bWltZVR5cGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAg
ICAgKi8KLSAgICBjYW5vbmljYWxNaW1lVHlwZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuY29udGVudFR5cGUoKS5jYW5vbmljYWxNaW1lVHlwZSgpIHx8IHRoaXMuX21p
bWVUeXBlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfQotICAg
ICAqLwotICAgIGNvbnRlbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9jb250ZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVl
cnkKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhc2VTZW5zaXRpdmUKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGlzUmVnZXgKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxXZWJJbnNw
ZWN0b3IuQ29udGVudFByb3ZpZGVyLlNlYXJjaE1hdGNoPil9IGNhbGxiYWNrCi0gICAgICovCi0g
ICAgc2VhcmNoSW5Db250ZW50OiBmdW5jdGlvbihxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdl
eCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuY29udGVudCgp
OwotICAgICAgICBpZiAoY29udGVudCkgewotICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gbmV3
IFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIodGhpcy5jb250ZW50VHlwZSgpLCBj
b250ZW50KTsKLSAgICAgICAgICAgIHByb3ZpZGVyLnNlYXJjaEluQ29udGVudChxdWVyeSwgY2Fz
ZVNlbnNpdGl2ZSwgaXNSZWdleCwgY2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcHJvamVjdC5zZWFyY2hJbkZpbGVDb250ZW50KHRoaXMs
IHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gY29udGVudEVuY29kZWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWltZVR5cGUKLSAg
ICAgKi8KLSAgICBfZmlyZUNvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9uKGNvbnRlbnQsIGNvbnRl
bnRFbmNvZGVkLCBtaW1lVHlwZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRMb2FkZWQg
PSB0cnVlOwotICAgICAgICB0aGlzLl9taW1lVHlwZSA9IG1pbWVUeXBlOwotICAgICAgICB0aGlz
Ll9jb250ZW50ID0gY29udGVudDsKLQotICAgICAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fcmVx
dWVzdENvbnRlbnRDYWxsYmFja3Muc2xpY2UoKTsKLSAgICAgICAgdGhpcy5fcmVxdWVzdENvbnRl
bnRDYWxsYmFja3MgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3Mu
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsYmFja3NbaV0oY29udGVudCwgY29udGVudEVu
Y29kZWQsIG1pbWVUeXBlKTsKLQotICAgICAgICBpZiAodGhpcy5fZm9ybWF0T25Mb2FkKSB7Ci0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fZm9ybWF0T25Mb2FkOwotICAgICAgICAgICAgdGhpcy5z
ZXRGb3JtYXR0ZWQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBjb250ZW50TG9hZGVkOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudExvYWRlZDsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gY29sdW1uTnVtYmVyCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlJhd0xv
Y2F0aW9ufQotICAgICAqLwotICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbihs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NvdXJj
ZU1hcHBpbmcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIGxvY2F0aW9u
ID0gdGhpcy5fZm9ybWF0dGVyTWFwcGluZy5mb3JtYXR0ZWRUb09yaWdpbmFsKGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlcik7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNYXBwaW5nLnVpTG9j
YXRpb25Ub1Jhd0xvY2F0aW9uKHRoaXMsIGxvY2F0aW9uWzBdLCBsb2NhdGlvblsxXSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5MaXZlTG9jYXRpb259
IGxpdmVMb2NhdGlvbgotICAgICAqLwotICAgIGFkZExpdmVMb2NhdGlvbjogZnVuY3Rpb24obGl2
ZUxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fbGl2ZUxvY2F0aW9ucy5hZGQobGl2ZUxv
Y2F0aW9uKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9y
LkxpdmVMb2NhdGlvbn0gbGl2ZUxvY2F0aW9uCi0gICAgICovCi0gICAgcmVtb3ZlTGl2ZUxvY2F0
aW9uOiBmdW5jdGlvbihsaXZlTG9jYXRpb24pCi0gICAgewotICAgICAgICB0aGlzLl9saXZlTG9j
YXRpb25zLnJlbW92ZShsaXZlTG9jYXRpb24pOwotICAgIH0sCi0KLSAgICB1cGRhdGVMaXZlTG9j
YXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLl9saXZl
TG9jYXRpb25zLml0ZW1zKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBpdGVtc1tpXS51cGRhdGUoKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0gdWlMb2NhdGlvbgot
ICAgICAqLwotICAgIG92ZXJyaWRlTG9jYXRpb246IGZ1bmN0aW9uKHVpTG9jYXRpb24pCi0gICAg
ewotICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJNYXBwaW5nLm9yaWdpbmFs
VG9Gb3JtYXR0ZWQodWlMb2NhdGlvbi5saW5lTnVtYmVyLCB1aUxvY2F0aW9uLmNvbHVtbk51bWJl
cik7Ci0gICAgICAgIHVpTG9jYXRpb24ubGluZU51bWJlciA9IGxvY2F0aW9uWzBdOwotICAgICAg
ICB1aUxvY2F0aW9uLmNvbHVtbk51bWJlciA9IGxvY2F0aW9uWzFdOwotICAgICAgICByZXR1cm4g
dWlMb2NhdGlvbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5QcmVzZW50YXRpb25Db25zb2xlTWVzc2FnZT59Ci0gICAgICovCi0gICAgY29u
c29sZU1lc3NhZ2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY29u
c29sZU1lc3NhZ2VzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5QcmVzZW50YXRpb25Db25zb2xlTWVzc2FnZX0gbWVzc2FnZQotICAgICAqLwotICAgIGNv
bnNvbGVNZXNzYWdlQWRkZWQ6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICB0aGlz
Ll9jb25zb2xlTWVzc2FnZXMucHVzaChtZXNzYWdlKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuQ29uc29sZU1l
c3NhZ2VBZGRlZCwgbWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlfSBtZXNzYWdlCi0gICAgICov
Ci0gICAgY29uc29sZU1lc3NhZ2VSZW1vdmVkOiBmdW5jdGlvbihtZXNzYWdlKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fY29uc29sZU1lc3NhZ2VzLnJlbW92ZShtZXNzYWdlKTsKLSAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVu
dHMuQ29uc29sZU1lc3NhZ2VSZW1vdmVkLCBtZXNzYWdlKTsKLSAgICB9LAotCi0gICAgY29uc29s
ZU1lc3NhZ2VzQ2xlYXJlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY29uc29s
ZU1lc3NhZ2VzID0gW107Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLkNvbnNvbGVNZXNzYWdlc0NsZWFyZWQpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAg
IGZvcm1hdHRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fZm9y
bWF0dGVkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcm1h
dHRlZAotICAgICAqLwotICAgIHNldEZvcm1hdHRlZDogZnVuY3Rpb24oZm9ybWF0dGVkKQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRMb2FkZWQoKSkgewotICAgICAgICAgICAgdGhp
cy5fZm9ybWF0T25Mb2FkID0gZm9ybWF0dGVkOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlZCA9PT0gZm9ybWF0dGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZCA9IGZvcm1hdHRlZDsKLQot
ICAgICAgICAvLyBSZS1yZXF1ZXN0IGNvbnRlbnQKLSAgICAgICAgdGhpcy5fY29udGVudExvYWRl
ZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9jb250ZW50ID0gZmFsc2U7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RDb250ZW50LmNhbGwodGhpcywg
ZGlkR2V0Q29udGVudC5iaW5kKHRoaXMpKTsKLSAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBA
dGhpcyB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0KLSAgICAgICAgICogQHBhcmFtIHs/c3Ry
aW5nfSBjb250ZW50Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29kZWQK
LSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBkaWRHZXRDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZvcm1hdHRlcjsKLSAgICAgICAgICAgIGlm
ICghZm9ybWF0dGVkKQotICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IG5ldyBXZWJJbnNwZWN0
b3IuSWRlbnRpdHlGb3JtYXR0ZXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBmb3JtYXR0ZXIgPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyLmNyZWF0ZUZvcm1hdHRlcih0aGlz
LmNvbnRlbnRUeXBlKCkpOwotICAgICAgICAgICAgZm9ybWF0dGVyLmZvcm1hdENvbnRlbnQobWlt
ZVR5cGUsIGNvbnRlbnQgfHwgIiIsIGZvcm1hdHRlZENoYW5nZWQuYmluZCh0aGlzKSk7Ci0gIAot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLlVJU291
cmNlQ29kZX0KLSAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50Ci0gICAgICAg
ICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nfSBmb3Jt
YXR0ZXJNYXBwaW5nCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZ1bmN0aW9uIGZvcm1h
dHRlZENoYW5nZWQoY29udGVudCwgZm9ybWF0dGVyTWFwcGluZykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKLSAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpcy5fd29ya2luZ0NvcHk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVy
TWFwcGluZyA9IGZvcm1hdHRlck1hcHBpbmc7Ci0gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMuRm9ybWF0
dGVkQ2hhbmdlZCwge2NvbnRlbnQ6IGNvbnRlbnR9KTsKLSAgICAgICAgICAgICAgICB0aGlzLnVw
ZGF0ZUxpdmVMb2NhdGlvbnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuRm9ybWF0dGVyfSBmb3JtYXR0
ZXIKLSAgICAgKi8KLSAgICBjcmVhdGVGb3JtYXR0ZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIC8vIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNvdXJjZU1hcHBp
bmd9IHNvdXJjZU1hcHBpbmcKLSAgICAgKi8KLSAgICBzZXRTb3VyY2VNYXBwaW5nOiBmdW5jdGlv
bihzb3VyY2VNYXBwaW5nKQotICAgIHsKLSAgICAgICAgdmFyIHdhc0lkZW50aXR5ID0gdGhpcy5f
c291cmNlTWFwcGluZyA/IHRoaXMuX3NvdXJjZU1hcHBpbmcuaXNJZGVudGl0eSgpIDogdHJ1ZTsK
LSAgICAgICAgdGhpcy5fc291cmNlTWFwcGluZyA9IHNvdXJjZU1hcHBpbmc7Ci0gICAgICAgIHZh
ciBkYXRhID0ge30KLSAgICAgICAgZGF0YS5pc0lkZW50aXR5ID0gc291cmNlTWFwcGluZyA/IHNv
dXJjZU1hcHBpbmcuaXNJZGVudGl0eSgpIDogdHJ1ZTsKLSAgICAgICAgZGF0YS5pZGVudGl0eUhh
c0NoYW5nZWQgPSBkYXRhLmlzSWRlbnRpdHkgIT09IHdhc0lkZW50aXR5OwotICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50
cy5Tb3VyY2VNYXBwaW5nQ2hhbmdlZCwgZGF0YSk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzog
V2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAaW50ZXJmYWNlCi0g
KiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkV2ZW50VGFyZ2V0fQotICovCi1XZWJJbnNwZWN0b3Iu
VUlTb3VyY2VDb2RlUHJvdmlkZXIgPSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGVQcm92aWRlci5FdmVudHMgPSB7Ci0gICAgVUlTb3VyY2VDb2RlQWRkZWQ6ICJV
SVNvdXJjZUNvZGVBZGRlZCIsCi0gICAgVUlTb3VyY2VDb2RlUmVtb3ZlZDogIlVJU291cmNlQ29k
ZVJlbW92ZWQiCi19Ci0KLVdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGVQcm92aWRlci5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGU+fQotICAgICAqLwotICAgIHVpU291cmNlQ29kZXM6IGZ1bmN0aW9uKCkge30sCi19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJj
ZUNvZGV9IHVpU291cmNlQ29kZQotICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAqIEBw
YXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIKLSAqLwotV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24g
PSBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLXsKLSAg
ICB0aGlzLnVpU291cmNlQ29kZSA9IHVpU291cmNlQ29kZTsKLSAgICB0aGlzLmxpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyOwotICAgIHRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotfQot
Ci1XZWJJbnNwZWN0b3IuVUlMb2NhdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICog
QHJldHVybiB7V2ViSW5zcGVjdG9yLlJhd0xvY2F0aW9ufQotICAgICAqLwotICAgIHVpTG9jYXRp
b25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy51
aVNvdXJjZUNvZGUudWlMb2NhdGlvblRvUmF3TG9jYXRpb24odGhpcy5saW5lTnVtYmVyLCB0aGlz
LmNvbHVtbk51bWJlcik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gez9zdHJp
bmd9Ci0gICAgICovCi0gICAgdXJsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy51aVNvdXJjZUNvZGUuY29udGVudFVSTCgpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAaW50
ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5SYXdMb2NhdGlvbiA9IGZ1bmN0aW9uKCkKLXsKLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhd0xvY2F0
aW9ufSByYXdMb2NhdGlvbgotICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuVUlMb2Nh
dGlvbik6KGJvb2xlYW58dW5kZWZpbmVkKX0gdXBkYXRlRGVsZWdhdGUKLSAqLwotV2ViSW5zcGVj
dG9yLkxpdmVMb2NhdGlvbiA9IGZ1bmN0aW9uKHJhd0xvY2F0aW9uLCB1cGRhdGVEZWxlZ2F0ZSkK
LXsKLSAgICB0aGlzLl9yYXdMb2NhdGlvbiA9IHJhd0xvY2F0aW9uOwotICAgIHRoaXMuX3VwZGF0
ZURlbGVnYXRlID0gdXBkYXRlRGVsZWdhdGU7Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlcyA9IFtd
OwotfQotCi1XZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZSA9IHsKLSAgICB1cGRh
dGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB1aUxvY2F0aW9uID0gdGhpcy51aUxv
Y2F0aW9uKCk7Ci0gICAgICAgIGlmICh1aUxvY2F0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgdWlT
b3VyY2VDb2RlID0gdWlMb2NhdGlvbi51aVNvdXJjZUNvZGU7Ci0gICAgICAgICAgICBpZiAodGhp
cy5fdWlTb3VyY2VDb2Rlcy5pbmRleE9mKHVpU291cmNlQ29kZSkgPT09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgdWlTb3VyY2VDb2RlLmFkZExpdmVMb2NhdGlvbih0aGlzKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl91aVNvdXJjZUNvZGVzLnB1c2godWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHZhciBvbmVUaW1lID0gdGhpcy5fdXBkYXRlRGVsZWdhdGUodWlMb2Nh
dGlvbik7Ci0gICAgICAgICAgICBpZiAob25lVGltZSkKLSAgICAgICAgICAgICAgICB0aGlzLmRp
c3Bvc2UoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuUmF3TG9jYXRpb259Ci0gICAgICovCi0gICAgcmF3TG9jYXRpb246IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yYXdMb2NhdGlvbjsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259Ci0gICAg
ICovCi0gICAgdWlMb2NhdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gU2hvdWxk
IGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLSAgICB9LAotCi0gICAgZGlzcG9zZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl91aVNvdXJj
ZUNvZGVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2Rlc1tpXS5y
ZW1vdmVMaXZlTG9jYXRpb24odGhpcyk7Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZXMgPSBb
XTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2Vi
SW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlcn0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291
cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gKiBAcGFyYW0gez9zdHJpbmd8dW5kZWZpbmVkfSBjb250
ZW50Ci0gKiBAcGFyYW0ge0RhdGV9IHRpbWVzdGFtcAotICovCi1XZWJJbnNwZWN0b3IuUmV2aXNp
b24gPSBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGNvbnRlbnQsIHRpbWVzdGFtcCkKLXsKLSAgICB0
aGlzLl91aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7Ci0gICAgdGhpcy5fY29udGVudCA9IGNv
bnRlbnQ7Ci0gICAgdGhpcy5fdGltZXN0YW1wID0gdGltZXN0YW1wOwotfQotCi1XZWJJbnNwZWN0
b3IuUmV2aXNpb24uX3JldmlzaW9uSGlzdG9yeVJlZ2lzdHJ5ID0gZnVuY3Rpb24oKQotewotICAg
IGlmICghV2ViSW5zcGVjdG9yLlJldmlzaW9uLl9yZXZpc2lvbkhpc3RvcnlSZWdpc3RyeU9iamVj
dCkgewotICAgICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSkgewotICAgICAgICAgICAgdmFy
IHJldmlzaW9uSGlzdG9yeSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2VbInJldmlzaW9uLWhpc3Rvcnki
XTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlJldmlz
aW9uLl9yZXZpc2lvbkhpc3RvcnlSZWdpc3RyeU9iamVjdCA9IHJldmlzaW9uSGlzdG9yeSA/IEpT
T04ucGFyc2UocmV2aXNpb25IaXN0b3J5KSA6IHt9OwotICAgICAgICAgICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5SZXZpc2lvbi5fcmV2aXNpb25IaXN0b3J5
UmVnaXN0cnlPYmplY3QgPSB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuUmV2aXNpb24uX3JldmlzaW9uSGlzdG9yeVJlZ2lzdHJ5T2Jq
ZWN0ID0ge307Ci0gICAgfQotICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUmV2aXNpb24uX3Jldmlz
aW9uSGlzdG9yeVJlZ2lzdHJ5T2JqZWN0OwotfQotCi1XZWJJbnNwZWN0b3IuUmV2aXNpb24uZmls
dGVyT3V0U3RhbGVSZXZpc2lvbnMgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKCF3aW5kb3cubG9j
YWxTdG9yYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgcmVnaXN0cnkgPSBXZWJJbnNw
ZWN0b3IuUmV2aXNpb24uX3JldmlzaW9uSGlzdG9yeVJlZ2lzdHJ5KCk7Ci0gICAgdmFyIGZpbHRl
cmVkUmVnaXN0cnkgPSB7fTsKLSAgICBmb3IgKHZhciB1cmwgaW4gcmVnaXN0cnkpIHsKLSAgICAg
ICAgdmFyIGhpc3RvcnlJdGVtcyA9IHJlZ2lzdHJ5W3VybF07Ci0gICAgICAgIHZhciBmaWx0ZXJl
ZEhpc3RvcnlJdGVtcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaGlzdG9yeUl0ZW1z
ICYmIGkgPCBoaXN0b3J5SXRlbXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBoaXN0
b3J5SXRlbSA9IGhpc3RvcnlJdGVtc1tpXTsKLSAgICAgICAgICAgIGlmIChoaXN0b3J5SXRlbS5s
b2FkZXJJZCA9PT0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLm1haW5GcmFtZS5sb2Fk
ZXJJZCkgewotICAgICAgICAgICAgICAgIGZpbHRlcmVkSGlzdG9yeUl0ZW1zLnB1c2goaGlzdG9y
eUl0ZW0pOwotICAgICAgICAgICAgICAgIGZpbHRlcmVkUmVnaXN0cnlbdXJsXSA9IGZpbHRlcmVk
SGlzdG9yeUl0ZW1zOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZGVsZXRl
IHdpbmRvdy5sb2NhbFN0b3JhZ2VbaGlzdG9yeUl0ZW0ua2V5XTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBXZWJJbnNwZWN0b3IuUmV2aXNpb24uX3JldmlzaW9uSGlzdG9yeVJlZ2lzdHJ5T2JqZWN0
ID0gZmlsdGVyZWRSZWdpc3RyeTsKLQotICAgIGZ1bmN0aW9uIHBlcnNpc3QoKQotICAgIHsKLSAg
ICAgICAgd2luZG93LmxvY2FsU3RvcmFnZVsicmV2aXNpb24taGlzdG9yeSJdID0gSlNPTi5zdHJp
bmdpZnkoZmlsdGVyZWRSZWdpc3RyeSk7Ci0gICAgfQotCi0gICAgLy8gU2NoZWR1bGUgYXN5bmMg
c3RvcmFnZS4KLSAgICBzZXRUaW1lb3V0KHBlcnNpc3QsIDApOwotfQotCi1XZWJJbnNwZWN0b3Iu
UmV2aXNpb24ucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAgICovCi0gICAgZ2V0IHVpU291cmNlQ29kZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2RlOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtEYXRlfQotICAgICAqLwotICAgIGdldCB0aW1lc3RhbXAoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVzdGFtcDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7P3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgY29udGVudCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudCB8fCBudWxsOwotICAgIH0sCi0KLSAgICBy
ZXZlcnRUb1RoaXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHJldmVydChj
b250ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fdWlTb3VyY2VDb2RlLl9j
b250ZW50ICE9PSBjb250ZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5h
ZGRSZXZpc2lvbihjb250ZW50KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnJlcXVlc3RDb250
ZW50KHJldmVydC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7c3RyaW5nfQotICAgICAqLwotICAgIGNvbnRlbnRVUkw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl91aVNvdXJjZUNvZGUub3JpZ2luVVJMKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVR5cGV9Ci0gICAg
ICovCi0gICAgY29udGVudFR5cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl91aVNvdXJjZUNvZGUuY29udGVudFR5cGUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nLCBib29sZWFuLCBzdHJpbmcpfSBjYWxsYmFjawot
ICAgICAqLwotICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0g
ICAgICAgIGNhbGxiYWNrKHRoaXMuX2NvbnRlbnQgfHwgIiIsIGZhbHNlLCB0aGlzLnVpU291cmNl
Q29kZS5jYW5vbmljYWxNaW1lVHlwZSgpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IHF1ZXJ5Ci0gICAgICogQHBhcmFtIHtib29sZWFufSBjYXNlU2Vuc2l0aXZl
Ci0gICAgICogQHBhcmFtIHtib29sZWFufSBpc1JlZ2V4Ci0gICAgICogQHBhcmFtIHtmdW5jdGlv
bihBcnJheS48V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlci5TZWFyY2hNYXRjaD4pfSBjYWxs
YmFjawotICAgICAqLwotICAgIHNlYXJjaEluQ29udGVudDogZnVuY3Rpb24ocXVlcnksIGNhc2VT
ZW5zaXRpdmUsIGlzUmVnZXgsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgY2FsbGJhY2soW10p
OwotICAgIH0sCi0KLSAgICBfcGVyc2lzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYg
KCF3aW5kb3cubG9jYWxTdG9yYWdlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciB1cmwgPSB0aGlzLmNvbnRlbnRVUkwoKTsKLSAgICAgICAgaWYgKCF1cmwgfHwgdXJsLnN0YXJ0
c1dpdGgoImluc3BlY3RvcjovLyIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciBsb2FkZXJJZCA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5tYWluRnJhbWUubG9h
ZGVySWQ7Ci0gICAgICAgIHZhciB0aW1lc3RhbXAgPSB0aGlzLnRpbWVzdGFtcC5nZXRUaW1lKCk7
Ci0gICAgICAgIHZhciBrZXkgPSAicmV2aXNpb24taGlzdG9yeXwiICsgdXJsICsgInwiICsgbG9h
ZGVySWQgKyAifCIgKyB0aW1lc3RhbXA7Ci0KLSAgICAgICAgdmFyIHJlZ2lzdHJ5ID0gV2ViSW5z
cGVjdG9yLlJldmlzaW9uLl9yZXZpc2lvbkhpc3RvcnlSZWdpc3RyeSgpOwotCi0gICAgICAgIHZh
ciBoaXN0b3J5SXRlbXMgPSByZWdpc3RyeVt1cmxdOwotICAgICAgICBpZiAoIWhpc3RvcnlJdGVt
cykgewotICAgICAgICAgICAgaGlzdG9yeUl0ZW1zID0gW107Ci0gICAgICAgICAgICByZWdpc3Ry
eVt1cmxdID0gaGlzdG9yeUl0ZW1zOwotICAgICAgICB9Ci0gICAgICAgIGhpc3RvcnlJdGVtcy5w
dXNoKHt1cmw6IHVybCwgbG9hZGVySWQ6IGxvYWRlcklkLCB0aW1lc3RhbXA6IHRpbWVzdGFtcCwg
a2V5OiBrZXl9KTsKLQotICAgICAgICBmdW5jdGlvbiBwZXJzaXN0KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZVtrZXldID0gdGhpcy5fY29udGVudDsKLSAgICAg
ICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2VbInJldmlzaW9uLWhpc3RvcnkiXSA9IEpTT04uc3Ry
aW5naWZ5KHJlZ2lzdHJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNjaGVkdWxlIGFzeW5j
IHN0b3JhZ2UuCi0gICAgICAgIHNldFRpbWVvdXQocGVyc2lzdC5iaW5kKHRoaXMpLCAwKTsKLSAg
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VJ
U291cmNlQ29kZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9V
SVNvdXJjZUNvZGVGcmFtZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMDQ0
Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VJU291
cmNlQ29kZUZyYW1lLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xF
IElOQy4KLSAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWV9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291
cmNlQ29kZQotICovCi1XZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlRnJhbWUgPSBmdW5jdGlvbih1
aVNvdXJjZUNvZGUpCi17Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOwot
ICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jYWxsKHRoaXMsIHRoaXMuX3VpU291cmNlQ29k
ZSk7Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlVJU291cmNlQ29kZS5FdmVudHMuRm9ybWF0dGVkQ2hhbmdlZCwgdGhpcy5fb25Gb3JtYXR0ZWRD
aGFuZ2VkLCB0aGlzKTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29weUNoYW5nZWQsIHRoaXMu
X29uV29ya2luZ0NvcHlDaGFuZ2VkLCB0aGlzKTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Xb3JraW5nQ29w
eUNvbW1pdHRlZCwgdGhpcy5fb25Xb3JraW5nQ29weUNvbW1pdHRlZCwgdGhpcyk7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGVGcmFtZS5wcm90b3R5cGUgPSB7Ci0gICAgd2FzU2hvd246
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUud2FzU2hvd24uY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5fYm91bmRXaW5kb3dGb2N1
c2VkID0gdGhpcy5fd2luZG93Rm9jdXNlZC5iaW5kKHRoaXMpOwotICAgICAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9ib3VuZFdpbmRvd0ZvY3VzZWQsIGZhbHNlKTsK
LSAgICAgICAgdGhpcy5fY2hlY2tDb250ZW50VXBkYXRlZCgpOwotICAgIH0sCi0KLSAgICB3aWxs
SGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS53aWxsSGlkZS5jYWxsKHRoaXMpOwotICAgICAgICB3aW5kb3cucmVtb3ZlRXZl
bnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9ib3VuZFdpbmRvd0ZvY3VzZWQsIGZhbHNlKTsKLSAg
ICAgICAgZGVsZXRlIHRoaXMuX2JvdW5kV2luZG93Rm9jdXNlZDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBjYW5FZGl0U291cmNlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2RlLmlzRWRp
dGFibGUoKTsKLSAgICB9LAotCi0gICAgX3dpbmRvd0ZvY3VzZWQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdGhpcy5fY2hlY2tDb250ZW50VXBkYXRlZCgpOwotICAgIH0sCi0KLSAg
ICBfY2hlY2tDb250ZW50VXBkYXRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLmxvYWRlZCB8fCAhdGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlLmNoZWNrQ29udGVudFVwZGF0ZWQoKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKLSAgICAgKi8KLSAgICBjb21t
aXRFZGl0aW5nOiBmdW5jdGlvbih0ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl91aVNv
dXJjZUNvZGUuaXNEaXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
X2lzQ29tbWl0dGluZ0VkaXRpbmcgPSB0cnVlOwotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGUu
Y29tbWl0V29ya2luZ0NvcHkodGhpcy5fZGlkRWRpdENvbnRlbnQuYmluZCh0aGlzKSk7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9pc0NvbW1pdHRpbmdFZGl0aW5nOwotICAgIH0sCi0KLSAgICBvblRl
eHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCi0gICAgewotICAgICAgICBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLm9uVGV4dENoYW5nZWQuY2FsbCh0aGlz
LCBvbGRSYW5nZSwgbmV3UmFuZ2UpOwotICAgICAgICB0aGlzLl9pc1NldHRpbmdXb3JraW5nQ29w
eSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZS5zZXRXb3JraW5nQ29weSh0aGlz
Ll90ZXh0RWRpdG9yLnRleHQoKSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9pc1NldHRpbmdXb3Jr
aW5nQ29weTsKLSAgICB9LAotCi0gICAgX2RpZEVkaXRDb250ZW50OiBmdW5jdGlvbihlcnJvcikK
LSAgICB7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxv
ZyhlcnJvciwgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciwg
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAg
X29uRm9ybWF0dGVkQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIg
Y29udGVudCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZXZlbnQuZGF0YS5jb250ZW50KTsKLSAg
ICAgICAgdGhpcy5fdGV4dEVkaXRvci5zZXRSZWFkT25seSh0aGlzLl91aVNvdXJjZUNvZGUuZm9y
bWF0dGVkKCkpOwotICAgICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCwgZmFsc2UsIHRoaXMu
X3VpU291cmNlQ29kZS5taW1lVHlwZSgpKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uV29ya2luZ0Nv
cHlDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lubmVyU2V0
Q29udGVudCh0aGlzLl91aVNvdXJjZUNvZGUud29ya2luZ0NvcHkoKSk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAotICAgICAqLwot
ICAgIF9vbldvcmtpbmdDb3B5Q29tbWl0dGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2lubmVyU2V0Q29udGVudCh0aGlzLl91aVNvdXJjZUNvZGUud29ya2luZ0NvcHko
KSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50Ci0g
ICAgICovCi0gICAgb25VSVNvdXJjZUNvZGVDb250ZW50Q2hhbmdlZDogZnVuY3Rpb24oY29udGVu
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBmYWxzZSwgdGhpcy5f
dWlTb3VyY2VDb2RlLm1pbWVUeXBlKCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ30gY29udGVudAotICAgICAqLwotICAgIF9pbm5lclNldENvbnRlbnQ6IGZ1bmN0
aW9uKGNvbnRlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5faXNTZXR0aW5nV29ya2luZ0Nv
cHkgfHwgdGhpcy5faXNDb21taXR0aW5nRWRpdGluZykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy5vblVJU291cmNlQ29kZUNvbnRlbnRDaGFuZ2VkKGNvbnRlbnQpOwotICAgIH0s
Ci0KLSAgICBwb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51
LCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5wb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUuY2FsbCh0aGlzLCBjb250ZXh0TWVu
dSwgbGluZU51bWJlcik7Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEFwcGxpY2FibGVJdGVt
cyh0aGlzLl91aVNvdXJjZUNvZGUpOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0
b3IoKTsKLSAgICB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5kZXRhY2goKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1VJU3RyaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9VSVN0cmluZy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E0ODIwOS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VJU3RyaW5n
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IE1hdHQgTGlsZWsgKHBld3Rlcm1vb3NlQGdtYWlsLmNvbSkuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotIC8qKgotICogQHBhcmFtIHtzdHJpbmd9
IHN0cmluZwotICogQHBhcmFtIHsuLi4qfSB2YXJhcmcKLSAqIEByZXR1cm4ge3N0cmluZ30KLSAq
LwotV2ViSW5zcGVjdG9yLlVJU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nLCB2YXJhcmcpCi17Ci0g
ICAgaWYgKFByZWZlcmVuY2VzLmxvY2FsaXplVUkpIHsKLSAgICAgICAgaWYgKHdpbmRvdy5sb2Nh
bGl6ZWRTdHJpbmdzICYmIHN0cmluZyBpbiB3aW5kb3cubG9jYWxpemVkU3RyaW5ncykKLSAgICAg
ICAgICAgIHN0cmluZyA9IHdpbmRvdy5sb2NhbGl6ZWRTdHJpbmdzW3N0cmluZ107Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgaWYgKCEoc3RyaW5nIGluIFdlYkluc3BlY3Rvci5fbWlzc2lu
Z0xvY2FsaXplZFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJMb2Nh
bGl6ZWQgc3RyaW5nIFwiIiArIHN0cmluZyArICJcIiBub3QgZm91bmQuIik7Ci0gICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLl9taXNzaW5nTG9jYWxpemVkU3RyaW5nc1tzdHJpbmddID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKFByZWZlcmVuY2VzLnNob3dNaXNz
aW5nTG9jYWxpemVkU3RyaW5ncykKLSAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAobm90IGxv
Y2FsaXplZCkiOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmcudnNwcmludGYo
c3RyaW5nLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKLX0KLQot
V2ViSW5zcGVjdG9yLl9taXNzaW5nTG9jYWxpemVkU3RyaW5ncyA9IHt9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9VSVV0aWxzLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9VSVV0aWxzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2ODkyYTVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVUlVdGlscy5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwODUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IE1hdHQgTGlsZWsgKHBld3Rlcm1v
b3NlQGdtYWlsLmNvbSkuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoq
Ci0gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAqIEBwYXJhbSB7P2Z1bmN0aW9uKEV2ZW50
KTogYm9vbGVhbn0gZWxlbWVudERyYWdTdGFydAotICogQHBhcmFtIHtmdW5jdGlvbihFdmVudCl9
IGVsZW1lbnREcmFnCi0gKiBAcGFyYW0gez9mdW5jdGlvbihFdmVudCl9IGVsZW1lbnREcmFnRW5k
Ci0gKiBAcGFyYW0ge3N0cmluZ30gY3Vyc29yCi0gKi8KLVdlYkluc3BlY3Rvci5pbnN0YWxsRHJh
Z0hhbmRsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGVsZW1lbnREcmFnU3RhcnQsIGVsZW1lbnREcmFn
LCBlbGVtZW50RHJhZ0VuZCwgY3Vyc29yKQotewotICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigibW91c2Vkb3duIiwgV2ViSW5zcGVjdG9yLl9lbGVtZW50RHJhZ1N0YXJ0LmJpbmQoV2ViSW5z
cGVjdG9yLCBlbGVtZW50RHJhZ1N0YXJ0LCBlbGVtZW50RHJhZywgZWxlbWVudERyYWdFbmQsIGN1
cnNvciksIGZhbHNlKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0gez9mdW5jdGlvbihFdmVudCl9IGVs
ZW1lbnREcmFnU3RhcnQKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oRXZlbnQpfSBlbGVtZW50RHJhZwot
ICogQHBhcmFtIHs/ZnVuY3Rpb24oRXZlbnQpfSBlbGVtZW50RHJhZ0VuZAotICogQHBhcmFtIHtz
dHJpbmd9IGN1cnNvcgotICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAqLwotV2ViSW5zcGVjdG9y
Ll9lbGVtZW50RHJhZ1N0YXJ0ID0gZnVuY3Rpb24oZWxlbWVudERyYWdTdGFydCwgZWxlbWVudERy
YWcsIGVsZW1lbnREcmFnRW5kLCBjdXJzb3IsIGV2ZW50KQotewotICAgIC8vIE9ubHkgZHJhZyB1
cG9uIGxlZnQgYnV0dG9uLiBSaWdodCB3aWxsIGxpa2VseSBjYXVzZSBhIGNvbnRleHQgbWVudS4g
U28gd2lsbCBjdHJsLWNsaWNrIG9uIG1hYy4KLSAgICBpZiAoZXZlbnQuYnV0dG9uIHx8IChXZWJJ
bnNwZWN0b3IuaXNNYWMoKSAmJiBldmVudC5jdHJsS2V5KSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKFdlYkluc3BlY3Rvci5fZWxlbWVudERyYWdnaW5nRXZlbnRMaXN0ZW5lcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGVsZW1lbnREcmFnU3RhcnQgJiYgIWVsZW1lbnREcmFnU3Rh
cnQoZXZlbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLl9lbGVt
ZW50RHJhZ2dpbmdHbGFzc1BhbmUpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLl9lbGVtZW50RHJh
Z2dpbmdHbGFzc1BhbmUuZGlzcG9zZSgpOwotICAgICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLl9l
bGVtZW50RHJhZ2dpbmdHbGFzc1BhbmU7Ci0gICAgfQotCi0gICAgdmFyIHRhcmdldERvY3VtZW50
ID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQ7Ci0KLSAgICBXZWJJbnNwZWN0b3IuX2VsZW1l
bnREcmFnZ2luZ0V2ZW50TGlzdGVuZXIgPSBlbGVtZW50RHJhZzsKLSAgICBXZWJJbnNwZWN0b3Iu
X2VsZW1lbnRFbmREcmFnZ2luZ0V2ZW50TGlzdGVuZXIgPSBlbGVtZW50RHJhZ0VuZDsKLSAgICBX
ZWJJbnNwZWN0b3IuX21vdXNlT3V0V2hpbGVEcmFnZ2luZ1RhcmdldERvY3VtZW50ID0gdGFyZ2V0
RG9jdW1lbnQ7Ci0KLSAgICB0YXJnZXREb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1v
dmUiLCBXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFnTW92ZSwgdHJ1ZSk7Ci0gICAgdGFyZ2V0RG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIFdlYkluc3BlY3Rvci5fZWxlbWVudERy
YWdFbmQsIHRydWUpOwotICAgIHRhcmdldERvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
b3V0IiwgV2ViSW5zcGVjdG9yLl9tb3VzZU91dFdoaWxlRHJhZ2dpbmcsIHRydWUpOwotCi0gICAg
dGFyZ2V0RG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7Ci0KLSAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotfQotCi1XZWJJbnNwZWN0b3IuX21vdXNlT3V0V2hpbGVEcmFnZ2lu
ZyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuX3VucmVnaXN0ZXJNb3VzZU91dFdo
aWxlRHJhZ2dpbmcoKTsKLSAgICBXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFnZ2luZ0dsYXNzUGFu
ZSA9IG5ldyBXZWJJbnNwZWN0b3IuR2xhc3NQYW5lKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5fdW5y
ZWdpc3Rlck1vdXNlT3V0V2hpbGVEcmFnZ2luZyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIVdl
Ykluc3BlY3Rvci5fbW91c2VPdXRXaGlsZURyYWdnaW5nVGFyZ2V0RG9jdW1lbnQpCi0gICAgICAg
IHJldHVybjsKLSAgICBXZWJJbnNwZWN0b3IuX21vdXNlT3V0V2hpbGVEcmFnZ2luZ1RhcmdldERv
Y3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgV2ViSW5zcGVjdG9yLl9tb3Vz
ZU91dFdoaWxlRHJhZ2dpbmcsIHRydWUpOwotICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IuX21vdXNl
T3V0V2hpbGVEcmFnZ2luZ1RhcmdldERvY3VtZW50OwotfQotCi1XZWJJbnNwZWN0b3IuX2VsZW1l
bnREcmFnTW92ZSA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuX2Vs
ZW1lbnREcmFnZ2luZ0V2ZW50TGlzdGVuZXIoZXZlbnQpKQotICAgICAgICBXZWJJbnNwZWN0b3Iu
X2NhbmNlbERyYWdFdmVudHMoZXZlbnQpOwotfQotCi1XZWJJbnNwZWN0b3IuX2NhbmNlbERyYWdF
dmVudHMgPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICB2YXIgdGFyZ2V0RG9jdW1lbnQgPSBldmVu
dC50YXJnZXQub3duZXJEb2N1bWVudDsKLSAgICB0YXJnZXREb2N1bWVudC5yZW1vdmVFdmVudExp
c3RlbmVyKCJtb3VzZW1vdmUiLCBXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFnTW92ZSwgdHJ1ZSk7
Ci0gICAgdGFyZ2V0RG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIFdlYklu
c3BlY3Rvci5fZWxlbWVudERyYWdFbmQsIHRydWUpOwotICAgIFdlYkluc3BlY3Rvci5fdW5yZWdp
c3Rlck1vdXNlT3V0V2hpbGVEcmFnZ2luZygpOwotCi0gICAgdGFyZ2V0RG9jdW1lbnQuYm9keS5z
dHlsZS5yZW1vdmVQcm9wZXJ0eSgiY3Vyc29yIik7Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLl9l
bGVtZW50RHJhZ2dpbmdHbGFzc1BhbmUpCi0gICAgICAgIFdlYkluc3BlY3Rvci5fZWxlbWVudERy
YWdnaW5nR2xhc3NQYW5lLmRpc3Bvc2UoKTsKLQotICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IuX2Vs
ZW1lbnREcmFnZ2luZ0dsYXNzUGFuZTsKLSAgICBkZWxldGUgV2ViSW5zcGVjdG9yLl9lbGVtZW50
RHJhZ2dpbmdFdmVudExpc3RlbmVyOwotICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IuX2VsZW1lbnRF
bmREcmFnZ2luZ0V2ZW50TGlzdGVuZXI7Ci19Ci0KLVdlYkluc3BlY3Rvci5fZWxlbWVudERyYWdF
bmQgPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICB2YXIgZWxlbWVudERyYWdFbmQgPSBXZWJJbnNw
ZWN0b3IuX2VsZW1lbnRFbmREcmFnZ2luZ0V2ZW50TGlzdGVuZXI7Ci0KLSAgICBXZWJJbnNwZWN0
b3IuX2NhbmNlbERyYWdFdmVudHMoZXZlbnQpOwotCi0gICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKLSAgICBpZiAoZWxlbWVudERyYWdFbmQpCi0gICAgICAgIGVsZW1lbnREcmFnRW5kKGV2ZW50
KTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLkdsYXNzUGFu
ZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjph
YnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnRy
YW5zcGFyZW50O3otaW5kZXg6MTAwMDsiOwotICAgIHRoaXMuZWxlbWVudC5pZCA9ICJnbGFzcy1w
YW5lLWZvci1kcmFnIjsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVu
dCk7Ci0gICAgV2ViSW5zcGVjdG9yLl9nbGFzc1BhbmUgPSB0aGlzOwotfQotCi1XZWJJbnNwZWN0
b3IuR2xhc3NQYW5lLnByb3RvdHlwZSA9IHsKLSAgICBkaXNwb3NlOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLl9nbGFzc1BhbmU7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5pbnNwZWN0b3JWaWV3LmZvY3VzKCk7Ci0gICAgICAgIGlmICh0aGlzLmVsZW1lbnQu
cGFyZW50RWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50LnJl
bW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuaXNCZWlu
Z0VkaXRlZCA9IGZ1bmN0aW9uKGVsZW1lbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQuaGFzU3R5bGVD
bGFzcygidGV4dC1wcm9tcHQiKSB8fCBlbGVtZW50Lm5vZGVOYW1lID09PSAiSU5QVVQiKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghV2ViSW5zcGVjdG9yLl9fZWRpdGluZ0NvdW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB3aGlsZSAoZWxlbWVudCkgewotICAgICAg
ICBpZiAoZWxlbWVudC5fX2VkaXRpbmcpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1XZWJJbnNwZWN0b3IubWFya0JlaW5nRWRpdGVkID0gZnVuY3Rpb24oZWxlbWVu
dCwgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGlmIChlbGVtZW50Ll9fZWRp
dGluZykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZWxlbWVudC5fX2VkaXRp
bmcgPSB0cnVlOwotICAgICAgICBXZWJJbnNwZWN0b3IuX19lZGl0aW5nQ291bnQgPSAoV2ViSW5z
cGVjdG9yLl9fZWRpdGluZ0NvdW50IHx8IDApICsgMTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoIWVsZW1lbnQuX19lZGl0aW5nKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBkZWxldGUgZWxlbWVudC5fX2VkaXRpbmc7Ci0gICAgICAgIC0tV2ViSW5zcGVjdG9yLl9fZWRp
dGluZ0NvdW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oRWxlbWVudCxzdHJpbmcsc3RyaW5nLCosc3RyaW5n
KX0gY29tbWl0SGFuZGxlcgotICogQHBhcmFtIHtmdW5jdGlvbihFbGVtZW50LCopfSBjYW5jZWxI
YW5kbGVyCi0gKiBAcGFyYW0geyo9fSBjb250ZXh0Ci0gKi8KLVdlYkluc3BlY3Rvci5FZGl0aW5n
Q29uZmlnID0gZnVuY3Rpb24oY29tbWl0SGFuZGxlciwgY2FuY2VsSGFuZGxlciwgY29udGV4dCkK
LXsKLSAgICB0aGlzLmNvbW1pdEhhbmRsZXIgPSBjb21taXRIYW5kbGVyOwotICAgIHRoaXMuY2Fu
Y2VsSGFuZGxlciA9IGNhbmNlbEhhbmRsZXIKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0Owot
Ci0gICAgLyoqCi0gICAgICogSGFuZGxlcyB0aGUgInBhc3RlIiBldmVudCwgcmV0dXJuIHZhbHVl
cyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgZm9yIGN1c3RvbUZpbmlzaEhhbmRsZXIKLSAgICAgKiBA
dHlwZSB7ZnVuY3Rpb24oRWxlbWVudCl8dW5kZWZpbmVkfQotICAgICAqLwotICAgIHRoaXMucGFz
dGVIYW5kbGVyOwotCi0gICAgLyoqIAotICAgICAqIFdoZXRoZXIgdGhlIGVkaXRlZCBlbGVtZW50
IGlzIG11bHRpbGluZQotICAgICAqIEB0eXBlIHtib29sZWFufHVuZGVmaW5lZH0KLSAgICAgKi8K
LSAgICB0aGlzLm11bHRpbGluZTsKLQotICAgIC8qKgotICAgICAqIEN1c3RvbSBmaW5pc2ggaGFu
ZGxlciBmb3IgdGhlIGVkaXRpbmcgc2Vzc2lvbiAoaW52b2tlZCBvbiBrZXlkb3duKQotICAgICAq
IEB0eXBlIHtmdW5jdGlvbihFbGVtZW50LCopfHVuZGVmaW5lZH0KLSAgICAgKi8KLSAgICB0aGlz
LmN1c3RvbUZpbmlzaEhhbmRsZXI7Ci19Ci0KLVdlYkluc3BlY3Rvci5FZGl0aW5nQ29uZmlnLnBy
b3RvdHlwZSA9IHsKLSAgICBzZXRQYXN0ZUhhbmRsZXI6IGZ1bmN0aW9uKHBhc3RlSGFuZGxlcikK
LSAgICB7Ci0gICAgICAgIHRoaXMucGFzdGVIYW5kbGVyID0gcGFzdGVIYW5kbGVyOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5pdGlhbFZhbHVlCi0gICAgICog
QHBhcmFtIHtPYmplY3R9IG1vZGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGhlbWUKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW49fSBsaW5lV3JhcHBpbmcKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49
fSBzbWFydEluZGVudAotICAgICAqLwotICAgIHNldE11bHRpbGluZU9wdGlvbnM6IGZ1bmN0aW9u
KGluaXRpYWxWYWx1ZSwgbW9kZSwgdGhlbWUsIGxpbmVXcmFwcGluZywgc21hcnRJbmRlbnQpCi0g
ICAgewotICAgICAgICB0aGlzLm11bHRpbGluZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuaW5pdGlh
bFZhbHVlID0gaW5pdGlhbFZhbHVlOwotICAgICAgICB0aGlzLm1vZGUgPSBtb2RlOwotICAgICAg
ICB0aGlzLnRoZW1lID0gdGhlbWU7Ci0gICAgICAgIHRoaXMubGluZVdyYXBwaW5nID0gbGluZVdy
YXBwaW5nOwotICAgICAgICB0aGlzLnNtYXJ0SW5kZW50ID0gc21hcnRJbmRlbnQ7Ci0gICAgfSwK
LQotICAgIHNldEN1c3RvbUZpbmlzaEhhbmRsZXI6IGZ1bmN0aW9uKGN1c3RvbUZpbmlzaEhhbmRs
ZXIpCi0gICAgewotICAgICAgICB0aGlzLmN1c3RvbUZpbmlzaEhhbmRsZXIgPSBjdXN0b21GaW5p
c2hIYW5kbGVyOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkNTU051bWJlclJlZ2V4ID0gL14o
LT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKSkkLzsKLQotV2ViSW5zcGVjdG9yLlN0eWxlVmFsdWVE
ZWxpbWl0ZXJzID0gIiBceEEwXHRcblwiJzo7LC8oKSI7Ci0KLQotLyoqCi0gICogQHBhcmFtIHtF
dmVudH0gZXZlbnQKLSAgKiBAcmV0dXJuIHs/c3RyaW5nfQotICAqLwotV2ViSW5zcGVjdG9yLl92
YWx1ZU1vZGlmaWNhdGlvbkRpcmVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIHZhciBk
aXJlY3Rpb24gPSBudWxsOwotICAgIGlmIChldmVudC50eXBlID09PSAibW91c2V3aGVlbCIpIHsK
LSAgICAgICAgaWYgKGV2ZW50LndoZWVsRGVsdGFZID4gMCkKLSAgICAgICAgICAgIGRpcmVjdGlv
biA9ICJVcCI7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LndoZWVsRGVsdGFZIDwgMCkKLSAgICAg
ICAgICAgIGRpcmVjdGlvbiA9ICJEb3duIjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXZl
bnQua2V5SWRlbnRpZmllciA9PT0gIlVwIiB8fCBldmVudC5rZXlJZGVudGlmaWVyID09PSAiUGFn
ZVVwIikKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJVcCI7Ci0gICAgICAgIGVsc2UgaWYgKGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIiB8fCBldmVudC5rZXlJZGVudGlmaWVyID09PSAi
UGFnZURvd24iKQotICAgICAgICAgICAgZGlyZWN0aW9uID0gIkRvd24iOyAgICAgICAgCi0gICAg
fQotICAgIHJldHVybiBkaXJlY3Rpb247Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IGhl
eFN0cmluZwotICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAqLwotV2ViSW5zcGVjdG9yLl9tb2Rp
ZmllZEhleFZhbHVlID0gZnVuY3Rpb24oaGV4U3RyaW5nLCBldmVudCkKLXsKLSAgICB2YXIgZGly
ZWN0aW9uID0gV2ViSW5zcGVjdG9yLl92YWx1ZU1vZGlmaWNhdGlvbkRpcmVjdGlvbihldmVudCk7
Ci0gICAgaWYgKCFkaXJlY3Rpb24pCi0gICAgICAgIHJldHVybiBoZXhTdHJpbmc7Ci0KLSAgICB2
YXIgbnVtYmVyID0gcGFyc2VJbnQoaGV4U3RyaW5nLCAxNik7Ci0gICAgaWYgKGlzTmFOKG51bWJl
cikgfHwgIWlzRmluaXRlKG51bWJlcikpCi0gICAgICAgIHJldHVybiBoZXhTdHJpbmc7Ci0KLSAg
ICB2YXIgbWF4VmFsdWUgPSBNYXRoLnBvdygxNiwgaGV4U3RyaW5nLmxlbmd0aCkgLSAxOwotICAg
IHZhciBhcnJvd0tleU9yTW91c2VXaGVlbEV2ZW50ID0gKGV2ZW50LmtleUlkZW50aWZpZXIgPT09
ICJVcCIgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIkRvd24iIHx8IGV2ZW50LnR5cGUgPT09
ICJtb3VzZXdoZWVsIik7Ci0gICAgdmFyIGRlbHRhOwotCi0gICAgaWYgKGFycm93S2V5T3JNb3Vz
ZVdoZWVsRXZlbnQpCi0gICAgICAgIGRlbHRhID0gKGRpcmVjdGlvbiA9PT0gIlVwIikgPyAxIDog
LTE7Ci0gICAgZWxzZQotICAgICAgICBkZWx0YSA9IChldmVudC5rZXlJZGVudGlmaWVyID09PSAi
UGFnZVVwIikgPyAxNiA6IC0xNjsKLQotICAgIGlmIChldmVudC5zaGlmdEtleSkKLSAgICAgICAg
ZGVsdGEgKj0gMTY7Ci0KLSAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgZGVsdGE7Ci0gICAgaWYg
KHJlc3VsdCA8IDApCi0gICAgICAgIHJlc3VsdCA9IDA7IC8vIENvbG9yIGhleCB2YWx1ZXMgYXJl
IG5ldmVyIG5lZ2F0aXZlLCBzbyBjbGFtcCB0byAwLgotICAgIGVsc2UgaWYgKHJlc3VsdCA+IG1h
eFZhbHVlKQotICAgICAgICByZXR1cm4gaGV4U3RyaW5nOwotCi0gICAgLy8gRW5zdXJlIHRoZSBy
ZXN1bHQgbGVuZ3RoIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBoZXggdmFsdWUuCi0gICAg
dmFyIHJlc3VsdFN0cmluZyA9IHJlc3VsdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsKLSAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoRGVsdGEgPSBoZXhTdHJpbmcubGVuZ3RoIC0gcmVzdWx0
U3RyaW5nLmxlbmd0aDsgaSA8IGxlbmd0aERlbHRhOyArK2kpCi0gICAgICAgIHJlc3VsdFN0cmlu
ZyA9ICIwIiArIHJlc3VsdFN0cmluZzsKLSAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwotfQotCi0v
KioKLSAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIKLSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0g
Ki8KLVdlYkluc3BlY3Rvci5fbW9kaWZpZWRGbG9hdE51bWJlciA9IGZ1bmN0aW9uKG51bWJlciwg
ZXZlbnQpCi17Ci0gICAgdmFyIGRpcmVjdGlvbiA9IFdlYkluc3BlY3Rvci5fdmFsdWVNb2RpZmlj
YXRpb25EaXJlY3Rpb24oZXZlbnQpOwotICAgIGlmICghZGlyZWN0aW9uKQotICAgICAgICByZXR1
cm4gbnVtYmVyOwotICAgIAotICAgIHZhciBhcnJvd0tleU9yTW91c2VXaGVlbEV2ZW50ID0gKGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJVcCIgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIkRv
d24iIHx8IGV2ZW50LnR5cGUgPT09ICJtb3VzZXdoZWVsIik7Ci0KLSAgICAvLyBKdW1wIGJ5IDEw
IHdoZW4gc2hpZnQgaXMgZG93biBvciBqdW1wIGJ5IDAuMSB3aGVuIEFsdC9PcHRpb24gaXMgZG93
bi4KLSAgICAvLyBBbHNvIGp1bXAgYnkgMTAgZm9yIHBhZ2UgdXAgYW5kIGRvd24sIG9yIGJ5IDEw
MCBpZiBzaGlmdCBpcyBoZWxkIHdpdGggYSBwYWdlIGtleS4KLSAgICB2YXIgY2hhbmdlQW1vdW50
ID0gMTsKLSAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgIWFycm93S2V5T3JNb3VzZVdoZWVsRXZl
bnQpCi0gICAgICAgIGNoYW5nZUFtb3VudCA9IDEwMDsKLSAgICBlbHNlIGlmIChldmVudC5zaGlm
dEtleSB8fCAhYXJyb3dLZXlPck1vdXNlV2hlZWxFdmVudCkKLSAgICAgICAgY2hhbmdlQW1vdW50
ID0gMTA7Ci0gICAgZWxzZSBpZiAoZXZlbnQuYWx0S2V5KQotICAgICAgICBjaGFuZ2VBbW91bnQg
PSAwLjE7Ci0KLSAgICBpZiAoZGlyZWN0aW9uID09PSAiRG93biIpCi0gICAgICAgIGNoYW5nZUFt
b3VudCAqPSAtMTsKLQotICAgIC8vIE1ha2UgdGhlIG5ldyBudW1iZXIgYW5kIGNvbnN0cmFpbiBp
dCB0byBhIHByZWNpc2lvbiBvZiA2LCB0aGlzIG1hdGNoZXMgbnVtYmVycyB0aGUgZW5naW5lIHJl
dHVybnMuCi0gICAgLy8gVXNlIHRoZSBOdW1iZXIgY29uc3RydWN0b3IgdG8gZm9yZ2V0IHRoZSBm
aXhlZCBwcmVjaXNpb24sIHNvIDEuMTAwMDAwIHdpbGwgcHJpbnQgYXMgMS4xLgotICAgIHZhciBy
ZXN1bHQgPSBOdW1iZXIoKG51bWJlciArIGNoYW5nZUFtb3VudCkudG9GaXhlZCg2KSk7Ci0gICAg
aWYgKCFTdHJpbmcocmVzdWx0KS5tYXRjaChXZWJJbnNwZWN0b3IuQ1NTTnVtYmVyUmVnZXgpKQot
ICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICAq
IEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50Ci0gICog
QHBhcmFtIHtmdW5jdGlvbihzdHJpbmcsc3RyaW5nKT19IGZpbmlzaEhhbmRsZXIKLSAgKiBAcGFy
YW0ge2Z1bmN0aW9uKHN0cmluZyk9fSBzdWdnZXN0aW9uSGFuZGxlcgotICAqIEBwYXJhbSB7ZnVu
Y3Rpb24obnVtYmVyKTpudW1iZXI9fSBjdXN0b21OdW1iZXJIYW5kbGVyCi0gKi8KLVdlYkluc3Bl
Y3Rvci5oYW5kbGVFbGVtZW50VmFsdWVNb2RpZmljYXRpb25zID0gZnVuY3Rpb24oZXZlbnQsIGVs
ZW1lbnQsIGZpbmlzaEhhbmRsZXIsIHN1Z2dlc3Rpb25IYW5kbGVyLCBjdXN0b21OdW1iZXJIYW5k
bGVyKQotewotICAgIHZhciBhcnJvd0tleU9yTW91c2VXaGVlbEV2ZW50ID0gKGV2ZW50LmtleUlk
ZW50aWZpZXIgPT09ICJVcCIgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIkRvd24iIHx8IGV2
ZW50LnR5cGUgPT09ICJtb3VzZXdoZWVsIik7Ci0gICAgdmFyIHBhZ2VLZXlQcmVzc2VkID0gKGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJQYWdlVXAiIHx8IGV2ZW50LmtleUlkZW50aWZpZXIgPT09
ICJQYWdlRG93biIpOwotICAgIGlmICghYXJyb3dLZXlPck1vdXNlV2hlZWxFdmVudCAmJiAhcGFn
ZUtleVByZXNzZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHZhciBzZWxlY3Rpb24g
PSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0
aW9uLmdldFJhbmdlQXQoMCk7Ci0gICAgaWYgKCFzZWxlY3Rpb25SYW5nZS5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lci5pc1NlbGZPckRlc2NlbmRhbnQoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHZhciBvcmlnaW5hbFZhbHVlID0gZWxlbWVudC50ZXh0Q29udGVudDsKLSAg
ICB2YXIgd29yZFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldv
cmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIFdlYkluc3BlY3Rvci5TdHlsZVZhbHVlRGVs
aW1pdGVycywgZWxlbWVudCk7Ci0gICAgdmFyIHdvcmRTdHJpbmcgPSB3b3JkUmFuZ2UudG9TdHJp
bmcoKTsKLSAgICAKLSAgICBpZiAoc3VnZ2VzdGlvbkhhbmRsZXIgJiYgc3VnZ2VzdGlvbkhhbmRs
ZXIod29yZFN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHZhciByZXBsYWNl
bWVudFN0cmluZzsKLSAgICB2YXIgcHJlZml4LCBzdWZmaXgsIG51bWJlcjsKLQotICAgIHZhciBt
YXRjaGVzOwotICAgIG1hdGNoZXMgPSAvKC4qIykoW1xkYS1mQS1GXSspKC4qKS8uZXhlYyh3b3Jk
U3RyaW5nKTsKLSAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCkgewotICAgICAgICBw
cmVmaXggPSBtYXRjaGVzWzFdOwotICAgICAgICBzdWZmaXggPSBtYXRjaGVzWzNdOwotICAgICAg
ICBudW1iZXIgPSBXZWJJbnNwZWN0b3IuX21vZGlmaWVkSGV4VmFsdWUobWF0Y2hlc1syXSwgZXZl
bnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGN1c3RvbU51bWJlckhhbmRsZXIpCi0gICAgICAg
ICAgICBudW1iZXIgPSBjdXN0b21OdW1iZXJIYW5kbGVyKG51bWJlcik7Ci0KLSAgICAgICAgcmVw
bGFjZW1lbnRTdHJpbmcgPSBwcmVmaXggKyBudW1iZXIgKyBzdWZmaXg7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgbWF0Y2hlcyA9IC8oLio/KSgtPyg/OlxkKyg/OlwuXGQrKT98XC5cZCspKSguKikv
LmV4ZWMod29yZFN0cmluZyk7Ci0gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBwcmVmaXggPSBtYXRjaGVzWzFdOwotICAgICAgICAgICAgc3VmZml4
ID0gbWF0Y2hlc1szXTsKLSAgICAgICAgICAgIG51bWJlciA9IFdlYkluc3BlY3Rvci5fbW9kaWZp
ZWRGbG9hdE51bWJlcihwYXJzZUZsb2F0KG1hdGNoZXNbMl0pLCBldmVudCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgZm9yIG51bGwgZXhwbGljaXRseS4KLSAg
ICAgICAgICAgIGlmIChudW1iZXIgPT09IG51bGwpICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGN1c3Rv
bU51bWJlckhhbmRsZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyID0gY3VzdG9tTnVtYmVySGFu
ZGxlcihudW1iZXIpOwotCi0gICAgICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IHByZWZpeCAr
IG51bWJlciArIHN1ZmZpeDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXBsYWNlbWVu
dFN0cmluZykgewotICAgICAgICB2YXIgcmVwbGFjZW1lbnRUZXh0Tm9kZSA9IGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHJlcGxhY2VtZW50U3RyaW5nKTsKLQotICAgICAgICB3b3JkUmFuZ2UuZGVs
ZXRlQ29udGVudHMoKTsKLSAgICAgICAgd29yZFJhbmdlLmluc2VydE5vZGUocmVwbGFjZW1lbnRU
ZXh0Tm9kZSk7Ci0KLSAgICAgICAgdmFyIGZpbmFsU2VsZWN0aW9uUmFuZ2UgPSBkb2N1bWVudC5j
cmVhdGVSYW5nZSgpOwotICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHJlcGxh
Y2VtZW50VGV4dE5vZGUsIDApOwotICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldEVuZChy
ZXBsYWNlbWVudFRleHROb2RlLCByZXBsYWNlbWVudFN0cmluZy5sZW5ndGgpOwotCi0gICAgICAg
IHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKLSAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdl
KGZpbmFsU2VsZWN0aW9uUmFuZ2UpOwotCi0gICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVlOwot
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICBpZiAoZmluaXNoSGFuZGxlcikKLSAgICAgICAgICAgIGZpbmlzaEhhbmRsZXIob3JpZ2luYWxW
YWx1ZSwgcmVwbGFjZW1lbnRTdHJpbmcpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8qKiAKLSAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVu
dAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZz19IGNvbmZpZwotICovCi1X
ZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nID0gZnVuY3Rpb24oZWxlbWVudCwgY29uZmlnKQotewot
ICAgIGlmICghV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZChlbGVtZW50LCB0cnVlKSkKLSAg
ICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICBjb25maWcgPSBjb25maWcgfHwgbmV3IFdlYkluc3Bl
Y3Rvci5FZGl0aW5nQ29uZmlnKGZ1bmN0aW9uKCkge30sIGZ1bmN0aW9uKCkge30pOwotICAgIHZh
ciBjb21taXR0ZWRDYWxsYmFjayA9IGNvbmZpZy5jb21taXRIYW5kbGVyOwotICAgIHZhciBjYW5j
ZWxsZWRDYWxsYmFjayA9IGNvbmZpZy5jYW5jZWxIYW5kbGVyOwotICAgIHZhciBwYXN0ZUNhbGxi
YWNrID0gY29uZmlnLnBhc3RlSGFuZGxlcjsKLSAgICB2YXIgY29udGV4dCA9IGNvbmZpZy5jb250
ZXh0OwotICAgIHZhciBpc011bHRpbGluZSA9IGNvbmZpZy5tdWx0aWxpbmUgfHwgZmFsc2U7Ci0g
ICAgdmFyIG9sZFRleHQgPSBpc011bHRpbGluZSA/IGNvbmZpZy5pbml0aWFsVmFsdWUgOiBnZXRD
b250ZW50KGVsZW1lbnQpOwotICAgIHZhciBtb3ZlRGlyZWN0aW9uID0gIiI7Ci0gICAgdmFyIG9s
ZFRhYkluZGV4OwotICAgIHZhciBjb2RlTWlycm9yOwotICAgIHZhciBjc3NMb2FkVmlldzsKLQot
ICAgIGZ1bmN0aW9uIGNvbnN1bWVDb3B5KGUpCi0gICAgewotICAgICAgICBlLmNvbnN1bWUoKTsK
LSAgICB9Ci0KLSAgICBpZiAoaXNNdWx0aWxpbmUpIHsKLSAgICAgICAgbG9hZFNjcmlwdCgiQ29k
ZU1pcnJvclRleHRFZGl0b3IuanMiKTsKLSAgICAgICAgY3NzTG9hZFZpZXcgPSBuZXcgV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JDU1NMb2FkVmlldygpOwotICAgICAgICBjc3NMb2FkVmlldy5zaG93
KGVsZW1lbnQpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0Q3VycmVudEZvY3VzRWxlbWVudChl
bGVtZW50KTsKLSAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb3B5IiwgY29uc3Vt
ZUNvcHksIHRydWUpOwotICAgICAgICBjb2RlTWlycm9yID0gd2luZG93LkNvZGVNaXJyb3IoZWxl
bWVudCwgewotICAgICAgICAgICAgbW9kZTogY29uZmlnLm1vZGUsCi0gICAgICAgICAgICBsaW5l
V3JhcHBpbmc6IGNvbmZpZy5saW5lV3JhcHBpbmcsCi0gICAgICAgICAgICBzbWFydEluZGVudDog
Y29uZmlnLnNtYXJ0SW5kZW50LAotICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlLAotICAgICAg
ICAgICAgdGhlbWU6IGNvbmZpZy50aGVtZSwKLSAgICAgICAgICAgIHZhbHVlOiBvbGRUZXh0Ci0g
ICAgICAgIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
ZWRpdGluZyIpOwotCi0gICAgICAgIG9sZFRhYkluZGV4ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUo
InRhYkluZGV4Iik7Ci0gICAgICAgIGlmICh0eXBlb2Ygb2xkVGFiSW5kZXggIT09ICJudW1iZXIi
IHx8IG9sZFRhYkluZGV4IDwgMCkKLSAgICAgICAgICAgIGVsZW1lbnQudGFiSW5kZXggPSAwOwot
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0Q3VycmVudEZvY3VzRWxlbWVudChlbGVtZW50KTsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0V2ZW50PX0gZQotICAgICAqLwotICAgIGZ1
bmN0aW9uIGJsdXJFdmVudExpc3RlbmVyKGUpIHsKLSAgICAgICAgaWYgKCFpc011bHRpbGluZSB8
fCAhZSB8fCAhZS5yZWxhdGVkVGFyZ2V0IHx8ICFlLnJlbGF0ZWRUYXJnZXQuaXNTZWxmT3JEZXNj
ZW5kYW50KGVsZW1lbnQpKQotICAgICAgICAgICAgZWRpdGluZ0NvbW1pdHRlZC5jYWxsKGVsZW1l
bnQpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldENvbnRlbnQoZWxlbWVudCkgewotICAgICAg
ICBpZiAoaXNNdWx0aWxpbmUpCi0gICAgICAgICAgICByZXR1cm4gY29kZU1pcnJvci5nZXRWYWx1
ZSgpOwotCi0gICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09ICJJTlBVVCIgJiYgZWxlbWVu
dC50eXBlID09PSAidGV4dCIpCi0gICAgICAgICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTsKLQot
ICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDsKLSAgICB9Ci0KLSAgICAvKiogQHRo
aXMge0VsZW1lbnR9ICovCi0gICAgZnVuY3Rpb24gY2xlYW5VcEFmdGVyRWRpdGluZygpCi0gICAg
ewotICAgICAgICBXZWJJbnNwZWN0b3IubWFya0JlaW5nRWRpdGVkKGVsZW1lbnQsIGZhbHNlKTsK
LQotICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLCBibHVyRXZlbnRM
aXN0ZW5lciwgaXNNdWx0aWxpbmUpOwotICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoImtleWRvd24iLCBrZXlEb3duRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7Ci0gICAgICAgIGlmIChw
YXN0ZUNhbGxiYWNrKQotICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJw
YXN0ZSIsIHBhc3RlRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9y
LnJlc3RvcmVGb2N1c0Zyb21FbGVtZW50KGVsZW1lbnQpOwotCi0gICAgICAgIGlmIChpc011bHRp
bGluZSkgewotICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb3B5Iiwg
Y29uc3VtZUNvcHksIHRydWUpOwotICAgICAgICAgICAgY3NzTG9hZFZpZXcuZGV0YWNoKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnJlbW92ZVN0eWxl
Q2xhc3MoImVkaXRpbmciKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0eXBlb2Ygb2xkVGFiSW5k
ZXggIT09ICJudW1iZXIiKQotICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInRh
YkluZGV4Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMudGFiSW5kZXggPSBvbGRU
YWJJbmRleDsKLSAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSAwOwotICAgICAgICB0aGlzLnNjcm9s
bExlZnQgPSAwOwotICAgIH0KLQotICAgIC8qKiBAdGhpcyB7RWxlbWVudH0gKi8KLSAgICBmdW5j
dGlvbiBlZGl0aW5nQ2FuY2VsbGVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc011bHRpbGluZSkK
LSAgICAgICAgICAgIGNvZGVNaXJyb3Iuc2V0VmFsdWUob2xkVGV4dCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgaWYgKHRoaXMudGFnTmFtZSA9PT0gIklOUFVUIiAmJiB0aGlzLnR5cGUg
PT09ICJ0ZXh0IikKLSAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gb2xkVGV4dDsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gb2xkVGV4dDsK
LSAgICAgICAgfQotCi0gICAgICAgIGNsZWFuVXBBZnRlckVkaXRpbmcuY2FsbCh0aGlzKTsKLQot
ICAgICAgICBjYW5jZWxsZWRDYWxsYmFjayh0aGlzLCBjb250ZXh0KTsKLSAgICB9Ci0KLSAgICAv
KiogQHRoaXMge0VsZW1lbnR9ICovCi0gICAgZnVuY3Rpb24gZWRpdGluZ0NvbW1pdHRlZCgpCi0g
ICAgewotICAgICAgICBjbGVhblVwQWZ0ZXJFZGl0aW5nLmNhbGwodGhpcyk7Ci0KLSAgICAgICAg
Y29tbWl0dGVkQ2FsbGJhY2sodGhpcywgZ2V0Q29udGVudCh0aGlzKSwgb2xkVGV4dCwgY29udGV4
dCwgbW92ZURpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZGVmYXVsdEZpbmlzaEhh
bmRsZXIoZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgaXNNZXRhT3JDdHJsID0gV2ViSW5zcGVj
dG9yLmlzTWFjKCkgPwotICAgICAgICAgICAgZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuc2hpZnRL
ZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSA6Ci0gICAgICAgICAgICBldmVu
dC5jdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQu
YWx0S2V5OwotICAgICAgICBpZiAoaXNFbnRlcktleShldmVudCkgJiYgKGV2ZW50LmlzTWV0YU9y
Q3RybEZvclRlc3QgfHwgIWlzTXVsdGlsaW5lIHx8IGlzTWV0YU9yQ3RybCkpCi0gICAgICAgICAg
ICByZXR1cm4gImNvbW1pdCI7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUgfHwgZXZlbnQua2V5SWRl
bnRpZmllciA9PT0gIlUrMDAxQiIpCi0gICAgICAgICAgICByZXR1cm4gImNhbmNlbCI7Ci0gICAg
ICAgIGVsc2UgaWYgKCFpc011bHRpbGluZSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSsw
MDA5IikgLy8gVGFiIGtleQotICAgICAgICAgICAgcmV0dXJuICJtb3ZlLSIgKyAoZXZlbnQuc2hp
ZnRLZXkgPyAiYmFja3dhcmQiIDogImZvcndhcmQiKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBo
YW5kbGVFZGl0aW5nUmVzdWx0KHJlc3VsdCwgZXZlbnQpCi0gICAgewotICAgICAgICBpZiAocmVz
dWx0ID09PSAiY29tbWl0IikgewotICAgICAgICAgICAgZWRpdGluZ0NvbW1pdHRlZC5jYWxsKGVs
ZW1lbnQpOwotICAgICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICAgICAgfSBlbHNl
IGlmIChyZXN1bHQgPT09ICJjYW5jZWwiKSB7Ci0gICAgICAgICAgICBlZGl0aW5nQ2FuY2VsbGVk
LmNhbGwoZWxlbWVudCk7Ci0gICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAg
ICB9IGVsc2UgaWYgKHJlc3VsdCAmJiByZXN1bHQuc3RhcnRzV2l0aCgibW92ZS0iKSkgewotICAg
ICAgICAgICAgbW92ZURpcmVjdGlvbiA9IHJlc3VsdC5zdWJzdHJpbmcoNSk7Ci0gICAgICAgICAg
ICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciAhPT0gIlUrMDAwOSIpCi0gICAgICAgICAgICAgICAg
Ymx1ckV2ZW50TGlzdGVuZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBh
c3RlRXZlbnRMaXN0ZW5lcihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBwYXN0
ZUNhbGxiYWNrKGV2ZW50KTsKLSAgICAgICAgaGFuZGxlRWRpdGluZ1Jlc3VsdChyZXN1bHQsIGV2
ZW50KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBrZXlEb3duRXZlbnRMaXN0ZW5lcihldmVudCkK
LSAgICB7Ci0gICAgICAgIHZhciBoYW5kbGVyID0gY29uZmlnLmN1c3RvbUZpbmlzaEhhbmRsZXIg
fHwgZGVmYXVsdEZpbmlzaEhhbmRsZXI7Ci0gICAgICAgIHZhciByZXN1bHQgPSBoYW5kbGVyKGV2
ZW50KTsKLSAgICAgICAgaGFuZGxlRWRpdGluZ1Jlc3VsdChyZXN1bHQsIGV2ZW50KTsKLSAgICB9
Ci0KLSAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBibHVyRXZlbnRMaXN0ZW5l
ciwgaXNNdWx0aWxpbmUpOwotICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIs
IGtleURvd25FdmVudExpc3RlbmVyLCB0cnVlKTsKLSAgICBpZiAocGFzdGVDYWxsYmFjaykKLSAg
ICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIHBhc3RlRXZlbnRMaXN0ZW5l
ciwgdHJ1ZSk7Ci0KLSAgICByZXR1cm4gewotICAgICAgICBjYW5jZWw6IGVkaXRpbmdDYW5jZWxs
ZWQuYmluZChlbGVtZW50KSwKLSAgICAgICAgY29tbWl0OiBlZGl0aW5nQ29tbWl0dGVkLmJpbmQo
ZWxlbWVudCksCi0gICAgICAgIGNvZGVNaXJyb3I6IGNvZGVNaXJyb3IgLy8gRm9yIHRlc3Rpbmcu
Ci0gICAgfTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcwotICogQHBhcmFt
IHtib29sZWFuPX0gaGlnaGVyUmVzb2x1dGlvbgotICogQHJldHVybiB7c3RyaW5nfQotICovCi1O
dW1iZXIuc2Vjb25kc1RvU3RyaW5nID0gZnVuY3Rpb24oc2Vjb25kcywgaGlnaGVyUmVzb2x1dGlv
bikKLXsKLSAgICBpZiAoIWlzRmluaXRlKHNlY29uZHMpKQotICAgICAgICByZXR1cm4gIi0iOwot
Ci0gICAgaWYgKHNlY29uZHMgPT09IDApCi0gICAgICAgIHJldHVybiAiMCI7Ci0KLSAgICB2YXIg
bXMgPSBzZWNvbmRzICogMTAwMDsKLSAgICBpZiAoaGlnaGVyUmVzb2x1dGlvbiAmJiBtcyA8IDEw
MDApCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuM2ZcdTIwMDltcyIs
IG1zKTsKLSAgICBlbHNlIGlmIChtcyA8IDEwMDApCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIiUuMGZcdTIwMDltcyIsIG1zKTsKLQotICAgIGlmIChzZWNvbmRzIDwgNjAp
Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmZcdTIwMDlzIiwgc2Vj
b25kcyk7Ci0KLSAgICB2YXIgbWludXRlcyA9IHNlY29uZHMgLyA2MDsKLSAgICBpZiAobWludXRl
cyA8IDYwKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjFmXHUyMDA5
bWluIiwgbWludXRlcyk7Ci0KLSAgICB2YXIgaG91cnMgPSBtaW51dGVzIC8gNjA7Ci0gICAgaWYg
KGhvdXJzIDwgMjQpCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMWZc
dTIwMDlocnMiLCBob3Vycyk7Ci0KLSAgICB2YXIgZGF5cyA9IGhvdXJzIC8gMjQ7Ci0gICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4xZlx1MjAwOWRheXMiLCBkYXlzKTsKLX0KLQot
LyoqCi0gKiBAcGFyYW0ge251bWJlcn0gYnl0ZXMKLSAqIEByZXR1cm4ge3N0cmluZ30KLSAqLwot
TnVtYmVyLmJ5dGVzVG9TdHJpbmcgPSBmdW5jdGlvbihieXRlcykKLXsKLSAgICBpZiAoYnl0ZXMg
PCAxMDI0KQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBmXHUyMDA5
QiIsIGJ5dGVzKTsKLQotICAgIHZhciBraWxvYnl0ZXMgPSBieXRlcyAvIDEwMjQ7Ci0gICAgaWYg
KGtpbG9ieXRlcyA8IDEwMCkKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
JS4xZlx1MjAwOUtCIiwga2lsb2J5dGVzKTsKLSAgICBpZiAoa2lsb2J5dGVzIDwgMTAyNCkKLSAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4wZlx1MjAwOUtCIiwga2lsb2J5
dGVzKTsKLQotICAgIHZhciBtZWdhYnl0ZXMgPSBraWxvYnl0ZXMgLyAxMDI0OwotICAgIGlmICht
ZWdhYnl0ZXMgPCAxMDApCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUu
MWZcdTIwMDlNQiIsIG1lZ2FieXRlcyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIlLjBmXHUyMDA5TUIiLCBtZWdhYnl0ZXMpOwotfQotCi1OdW1iZXIu
d2l0aFRob3VzYW5kc1NlcGFyYXRvciA9IGZ1bmN0aW9uKG51bSkKLXsKLSAgICB2YXIgc3RyID0g
bnVtICsgIiI7Ci0gICAgdmFyIHJlID0gLyhcZCspKFxkezN9KS87Ci0gICAgd2hpbGUgKHN0ci5t
YXRjaChyZSkpCi0gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKHJlLCAiJDFcdTIwMDkkMiIpOyAv
LyBcdTIwMDkgaXMgYSB0aGluIHNwYWNlLgotICAgIHJldHVybiBzdHI7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IucGxhdGZvcm0oKSA9PT0gIndpbmRvd3MiICYmIFByZWZlcmVuY2VzLnVzZUxv
d2VyQ2FzZU1lbnVUaXRsZXNPbldpbmRvd3M7Ci19Ci0KLVdlYkluc3BlY3Rvci5mb3JtYXRMb2Nh
bGl6ZWQgPSBmdW5jdGlvbihmb3JtYXQsIHN1YnN0aXR1dGlvbnMsIGZvcm1hdHRlcnMsIGluaXRp
YWxWYWx1ZSwgYXBwZW5kKQotewotICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KFdlYkluc3BlY3Rv
ci5VSVN0cmluZyhmb3JtYXQpLCBzdWJzdGl0dXRpb25zLCBmb3JtYXR0ZXJzLCBpbml0aWFsVmFs
dWUsIGFwcGVuZCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5vcGVuTGlua0V4dGVybmFsbHlMYWJlbCA9
IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3Bl
Y3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiT3BlbiBsaW5rIGluIG5ldyB0YWIiIDog
Ik9wZW4gTGluayBpbiBOZXcgVGFiIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5jb3B5TGlua0FkZHJl
c3NMYWJlbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQ29weSBsaW5rIGFkZHJl
c3MiIDogIkNvcHkgTGluayBBZGRyZXNzIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5wbGF0Zm9ybSA9
IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5fcGxhdGZvcm0pCi0gICAgICAg
IFdlYkluc3BlY3Rvci5fcGxhdGZvcm0gPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QucGxhdGZvcm0o
KTsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLl9wbGF0Zm9ybTsKLX0KLQotV2ViSW5zcGVjdG9y
LmlzTWFjID0gZnVuY3Rpb24oKQotewotICAgIGlmICh0eXBlb2YgV2ViSW5zcGVjdG9yLl9pc01h
YyA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgIFdlYkluc3BlY3Rvci5faXNNYWMgPSBXZWJJbnNw
ZWN0b3IucGxhdGZvcm0oKSA9PT0gIm1hYyI7Ci0KLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLl9p
c01hYzsKLX0KLQotV2ViSW5zcGVjdG9yLmlzV2luID0gZnVuY3Rpb24oKQotewotICAgIGlmICh0
eXBlb2YgV2ViSW5zcGVjdG9yLl9pc1dpbiA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgIFdlYklu
c3BlY3Rvci5faXNXaW4gPSBXZWJJbnNwZWN0b3IucGxhdGZvcm0oKSA9PT0gIndpbmRvd3MiOwot
Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5faXNXaW47Ci19Ci0KLVdlYkluc3BlY3Rvci5QbGF0
Zm9ybUZsYXZvciA9IHsKLSAgICBXaW5kb3dzVmlzdGE6ICJ3aW5kb3dzLXZpc3RhIiwKLSAgICBN
YWNUaWdlcjogIm1hYy10aWdlciIsCi0gICAgTWFjTGVvcGFyZDogIm1hYy1sZW9wYXJkIiwKLSAg
ICBNYWNTbm93TGVvcGFyZDogIm1hYy1zbm93bGVvcGFyZCIsCi0gICAgTWFjTGlvbjogIm1hYy1s
aW9uIiwKLSAgICBNYWNNb3VudGFpbkxpb246ICJtYWMtbW91bnRhaW4tbGlvbiIKLX0KLQotV2Vi
SW5zcGVjdG9yLnBsYXRmb3JtRmxhdm9yID0gZnVuY3Rpb24oKQotewotICAgIGZ1bmN0aW9uIGRl
dGVjdEZsYXZvcigpCi0gICAgewotICAgICAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3Iu
dXNlckFnZW50OwotCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGxhdGZvcm0oKSA9PT0gIndp
bmRvd3MiKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL1dpbmRv
d3MgTlQgKFxkKylcLig/OlxkKykvKTsKLSAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsx
XSA+PSA2KQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUGxhdGZvcm1GbGF2
b3IuV2luZG93c1Zpc3RhOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoV2ViSW5zcGVjdG9yLnBsYXRmb3JtKCkgPT09ICJtYWMiKSB7Ci0gICAgICAgICAgICB2
YXIgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL01hYyBPUyBYXHMqKD86KFxkKylfKFxkKykpPy8p
OwotICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSAhPSAxMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlBsYXRmb3JtRmxhdm9yLk1hY1Nub3dMZW9wYXJkOwot
ICAgICAgICAgICAgc3dpdGNoIChOdW1iZXIobWF0Y2hbMl0pKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSA0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlBsYXRmb3Jt
Rmxhdm9yLk1hY1RpZ2VyOwotICAgICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5QbGF0Zm9ybUZsYXZvci5NYWNMZW9wYXJkOwotICAg
ICAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5QbGF0Zm9ybUZsYXZvci5NYWNTbm93TGVvcGFyZDsKLSAgICAgICAgICAgICAgICBjYXNl
IDc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUGxhdGZvcm1GbGF2
b3IuTWFjTGlvbjsKLSAgICAgICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuUGxhdGZvcm1GbGF2b3IuTWFjTW91bnRhaW5MaW9uOwotICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghV2ViSW5zcGVjdG9yLl9w
bGF0Zm9ybUZsYXZvcikKLSAgICAgICAgV2ViSW5zcGVjdG9yLl9wbGF0Zm9ybUZsYXZvciA9IGRl
dGVjdEZsYXZvcigpOwotCi0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5fcGxhdGZvcm1GbGF2b3I7
Ci19Ci0KLVdlYkluc3BlY3Rvci5wb3J0ID0gZnVuY3Rpb24oKQotewotICAgIGlmICghV2ViSW5z
cGVjdG9yLl9wb3J0KQotICAgICAgICBXZWJJbnNwZWN0b3IuX3BvcnQgPSBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QucG9ydCgpOwotCi0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5fcG9ydDsKLX0KLQot
V2ViSW5zcGVjdG9yLmluc3RhbGxQb3J0U3R5bGVzID0gZnVuY3Rpb24oKQotewotICAgIHZhciBw
bGF0Zm9ybSA9IFdlYkluc3BlY3Rvci5wbGF0Zm9ybSgpOwotICAgIGRvY3VtZW50LmJvZHkuYWRk
U3R5bGVDbGFzcygicGxhdGZvcm0tIiArIHBsYXRmb3JtKTsKLSAgICB2YXIgZmxhdm9yID0gV2Vi
SW5zcGVjdG9yLnBsYXRmb3JtRmxhdm9yKCk7Ci0gICAgaWYgKGZsYXZvcikKLSAgICAgICAgZG9j
dW1lbnQuYm9keS5hZGRTdHlsZUNsYXNzKCJwbGF0Zm9ybS0iICsgZmxhdm9yKTsKLSAgICB2YXIg
cG9ydCA9IFdlYkluc3BlY3Rvci5wb3J0KCk7Ci0gICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNs
YXNzKCJwb3J0LSIgKyBwb3J0KTsKLX0KLQotV2ViSW5zcGVjdG9yLl93aW5kb3dGb2N1c2VkID0g
ZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LnRhcmdldC5kb2N1bWVudC5ub2RlVHlw
ZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKQotICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0
eWxlQ2xhc3MoImluYWN0aXZlIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5fd2luZG93Qmx1cnJlZCA9
IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIGlmIChldmVudC50YXJnZXQuZG9jdW1lbnQubm9kZVR5
cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkKLSAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHls
ZUNsYXNzKCJpbmFjdGl2ZSIpOwotfQotCi1XZWJJbnNwZWN0b3IucHJldmlvdXNGb2N1c0VsZW1l
bnQgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5fcHJldmlvdXNGb2N1
c0VsZW1lbnQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gZnVuY3Rp
b24oKQotewotICAgIHJldHVybiBXZWJJbnNwZWN0b3IuX2N1cnJlbnRGb2N1c0VsZW1lbnQ7Ci19
Ci0KLVdlYkluc3BlY3Rvci5fZm9jdXNDaGFuZ2VkID0gZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAg
V2ViSW5zcGVjdG9yLnNldEN1cnJlbnRGb2N1c0VsZW1lbnQoZXZlbnQudGFyZ2V0KTsKLX0KLQot
V2ViSW5zcGVjdG9yLl90ZXh0SW5wdXRUeXBlcyA9IFsidGV4dCIsICJzZWFyY2giLCAidGVsIiwg
InVybCIsICJlbWFpbCIsICJwYXNzd29yZCJdLmtleVNldCgpOyAKLVdlYkluc3BlY3Rvci5faXNU
ZXh0RWRpdGluZ0VsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KQotewotICAgIGlmIChlbGVtZW50
IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQudHlw
ZSBpbiBXZWJJbnNwZWN0b3IuX3RleHRJbnB1dFR5cGVzOwotCi0gICAgaWYgKGVsZW1lbnQgaW5z
dGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotV2ViSW5zcGVjdG9yLnNldEN1cnJlbnRGb2N1c0VsZW1lbnQg
PSBmdW5jdGlvbih4KQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuX2dsYXNzUGFuZSAmJiB4ICYm
ICFXZWJJbnNwZWN0b3IuX2dsYXNzUGFuZS5lbGVtZW50LmlzQW5jZXN0b3IoeCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLl9jdXJyZW50Rm9jdXNFbGVtZW50ICE9PSB4
KQotICAgICAgICBXZWJJbnNwZWN0b3IuX3ByZXZpb3VzRm9jdXNFbGVtZW50ID0gV2ViSW5zcGVj
dG9yLl9jdXJyZW50Rm9jdXNFbGVtZW50OwotICAgIFdlYkluc3BlY3Rvci5fY3VycmVudEZvY3Vz
RWxlbWVudCA9IHg7Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLl9jdXJyZW50Rm9jdXNFbGVtZW50
KSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5fY3VycmVudEZvY3VzRWxlbWVudC5mb2N1cygpOwot
Ci0gICAgICAgIC8vIE1ha2UgYSBjYXJldCBzZWxlY3Rpb24gaW5zaWRlIHRoZSBuZXcgZWxlbWVu
dCBpZiB0aGVyZSBpc24ndCBhIHJhbmdlIHNlbGVjdGlvbiBhbmQgdGhlcmUgaXNuJ3QgYWxyZWFk
eSBhIGNhcmV0IHNlbGVjdGlvbiBpbnNpZGUuCi0gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIChh
dCBsZWFzdCkgdG8gcmVtb3ZlIGNhcmV0IGZyb20gY29uc29sZSB3aGVuIGZvY3VzIGlzIG1vdmVk
IHRvIHNvbWUgZWxlbWVudCBpbiB0aGUgcGFuZWwuCi0gICAgICAgIC8vIFRoZSBjb2RlIGJlbG93
IHNob3VsZCBub3QgYmUgYXBwbGllZCB0byB0ZXh0IGZpZWxkcyBhbmQgdGV4dCBhcmVhcywgaGVu
Y2UgX2lzVGV4dEVkaXRpbmdFbGVtZW50IGNoZWNrLgotICAgICAgICB2YXIgc2VsZWN0aW9uID0g
d2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5faXNUZXh0
RWRpdGluZ0VsZW1lbnQoV2ViSW5zcGVjdG9yLl9jdXJyZW50Rm9jdXNFbGVtZW50KSAmJiBzZWxl
Y3Rpb24uaXNDb2xsYXBzZWQgJiYgIVdlYkluc3BlY3Rvci5fY3VycmVudEZvY3VzRWxlbWVudC5p
c0luc2VydGlvbkNhcmV0SW5zaWRlKCkpIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5n
ZSA9IFdlYkluc3BlY3Rvci5fY3VycmVudEZvY3VzRWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0
ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRTdGFydChXZWJJbnNwZWN0
b3IuX2N1cnJlbnRGb2N1c0VsZW1lbnQsIDApOwotICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uu
c2V0RW5kKFdlYkluc3BlY3Rvci5fY3VycmVudEZvY3VzRWxlbWVudCwgMCk7Ci0KLSAgICAgICAg
ICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5h
ZGRSYW5nZShzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFdlYklu
c3BlY3Rvci5fcHJldmlvdXNGb2N1c0VsZW1lbnQpCi0gICAgICAgIFdlYkluc3BlY3Rvci5fcHJl
dmlvdXNGb2N1c0VsZW1lbnQuYmx1cigpOwotfQotCi1XZWJJbnNwZWN0b3IucmVzdG9yZUZvY3Vz
RnJvbUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KQotewotICAgIGlmIChlbGVtZW50ICYmIGVs
ZW1lbnQuaXNTZWxmT3JBbmNlc3RvcihXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCgp
KSkKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldEN1cnJlbnRGb2N1c0VsZW1lbnQoV2ViSW5zcGVj
dG9yLnByZXZpb3VzRm9jdXNFbGVtZW50KCkpOwotfQotCi1XZWJJbnNwZWN0b3Iuc2V0VG9vbGJh
ckNvbG9ycyA9IGZ1bmN0aW9uKGJhY2tncm91bmRDb2xvciwgY29sb3IpCi17Ci0gICAgaWYgKCFX
ZWJJbnNwZWN0b3IuX3RoZW1lU3R5bGVFbGVtZW50KSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5f
dGhlbWVTdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwotICAg
ICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5fdGhlbWVTdHlsZUVs
ZW1lbnQpOwotICAgIH0KLSAgICBXZWJJbnNwZWN0b3IuX3RoZW1lU3R5bGVFbGVtZW50LnRleHRD
b250ZW50ID0KLSAgICAgICAgIiN0b29sYmFyIHtcCi0gICAgICAgICAgICAgYmFja2dyb3VuZC1p
bWFnZTogbm9uZSAhaW1wb3J0YW50O1wKLSAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAi
ICsgYmFja2dyb3VuZENvbG9yICsgIiAhaW1wb3J0YW50O1wKLSAgICAgICAgIH1cCi0gICAgICAg
ICBcCi0gICAgICAgICAudG9vbGJhci1sYWJlbCB7XAotICAgICAgICAgICAgIGNvbG9yOiAiICsg
Y29sb3IgKyAiICFpbXBvcnRhbnQ7XAotICAgICAgICAgICAgIHRleHQtc2hhZG93OiBub25lO1wK
LSAgICAgICAgIH0iOwotfQotCi1XZWJJbnNwZWN0b3IucmVzZXRUb29sYmFyQ29sb3JzID0gZnVu
Y3Rpb24oKQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuX3RoZW1lU3R5bGVFbGVtZW50KQotICAg
ICAgICBXZWJJbnNwZWN0b3IuX3RoZW1lU3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gIiI7Ci19
Ci0KLS8qKgotICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50Ci0gKiBAcGFyYW0ge251bWJlcn0g
b2Zmc2V0Ci0gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoCi0gKiBAcGFyYW0ge0FycmF5LjxPYmpl
Y3Q+PX0gZG9tQ2hhbmdlcwotICovCi1XZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNoUmVzdWx0
ID0gZnVuY3Rpb24oZWxlbWVudCwgb2Zmc2V0LCBsZW5ndGgsIGRvbUNoYW5nZXMpCi17Ci0gICAg
dmFyIHJlc3VsdCA9IFdlYkluc3BlY3Rvci5oaWdobGlnaHRTZWFyY2hSZXN1bHRzKGVsZW1lbnQs
IFt7b2Zmc2V0OiBvZmZzZXQsIGxlbmd0aDogbGVuZ3RoIH1dLCBkb21DaGFuZ2VzKTsKLSAgICBy
ZXR1cm4gcmVzdWx0Lmxlbmd0aCA/IHJlc3VsdFswXSA6IG51bGw7Ci19Ci0KLS8qKgotICogQHBh
cmFtIHtFbGVtZW50fSBlbGVtZW50Ci0gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSByZXN1bHRS
YW5nZXMKLSAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBjaGFuZ2VzCi0gKi8KLVdlYkluc3Bl
Y3Rvci5oaWdobGlnaHRTZWFyY2hSZXN1bHRzID0gZnVuY3Rpb24oZWxlbWVudCwgcmVzdWx0UmFu
Z2VzLCBjaGFuZ2VzKQotewotICAgIHJldHVybiBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0UmFuZ2Vz
V2l0aFN0eWxlQ2xhc3MoZWxlbWVudCwgcmVzdWx0UmFuZ2VzLCAid2Via2l0LXNlYXJjaC1yZXN1
bHQiLCBjaGFuZ2VzKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKLSAq
IEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHJlc3VsdFJhbmdlcwotICogQHBhcmFtIHtzdHJpbmd9
IHN0eWxlQ2xhc3MKLSAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD49fSBjaGFuZ2VzCi0gKi8KLVdl
Ykluc3BlY3Rvci5oaWdobGlnaHRSYW5nZXNXaXRoU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGVsZW1l
bnQsIHJlc3VsdFJhbmdlcywgc3R5bGVDbGFzcywgY2hhbmdlcykKLXsKLSAgICBjaGFuZ2VzID0g
Y2hhbmdlcyB8fCBbXTsKLSAgICB2YXIgaGlnaGxpZ2h0Tm9kZXMgPSBbXTsKLSAgICB2YXIgbGlu
ZVRleHQgPSBlbGVtZW50LnRleHRDb250ZW50OwotICAgIHZhciBvd25lckRvY3VtZW50ID0gZWxl
bWVudC5vd25lckRvY3VtZW50OwotICAgIHZhciB0ZXh0Tm9kZVNuYXBzaG90ID0gb3duZXJEb2N1
bWVudC5ldmFsdWF0ZSgiLi8vdGV4dCgpIiwgZWxlbWVudCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOwotCi0gICAgdmFyIHNuYXBzaG90TGVuZ3Ro
ID0gdGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdExlbmd0aDsKLSAgICBpZiAoc25hcHNob3RMZW5n
dGggPT09IDApCi0gICAgICAgIHJldHVybiBoaWdobGlnaHROb2RlczsKLQotICAgIHZhciBub2Rl
UmFuZ2VzID0gW107Ci0gICAgdmFyIHJhbmdlRW5kT2Zmc2V0ID0gMDsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNuYXBzaG90TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHJhbmdlID0ge307
Ci0gICAgICAgIHJhbmdlLm9mZnNldCA9IHJhbmdlRW5kT2Zmc2V0OwotICAgICAgICByYW5nZS5s
ZW5ndGggPSB0ZXh0Tm9kZVNuYXBzaG90LnNuYXBzaG90SXRlbShpKS50ZXh0Q29udGVudC5sZW5n
dGg7Ci0gICAgICAgIHJhbmdlRW5kT2Zmc2V0ID0gcmFuZ2Uub2Zmc2V0ICsgcmFuZ2UubGVuZ3Ro
OwotICAgICAgICBub2RlUmFuZ2VzLnB1c2gocmFuZ2UpOwotICAgIH0KLQotICAgIHZhciBzdGFy
dEluZGV4ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdFJhbmdlcy5sZW5ndGg7
ICsraSkgewotICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSByZXN1bHRSYW5nZXNbaV0ub2Zmc2V0
OwotICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyByZXN1bHRSYW5nZXNbaV0u
bGVuZ3RoOwotCi0gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgc25hcHNob3RMZW5ndGggJiYg
bm9kZVJhbmdlc1tzdGFydEluZGV4XS5vZmZzZXQgKyBub2RlUmFuZ2VzW3N0YXJ0SW5kZXhdLmxl
bmd0aCA8PSBzdGFydE9mZnNldCkKLSAgICAgICAgICAgIHN0YXJ0SW5kZXgrKzsKLSAgICAgICAg
dmFyIGVuZEluZGV4ID0gc3RhcnRJbmRleDsKLSAgICAgICAgd2hpbGUgKGVuZEluZGV4IDwgc25h
cHNob3RMZW5ndGggJiYgbm9kZVJhbmdlc1tlbmRJbmRleF0ub2Zmc2V0ICsgbm9kZVJhbmdlc1tl
bmRJbmRleF0ubGVuZ3RoIDwgZW5kT2Zmc2V0KQotICAgICAgICAgICAgZW5kSW5kZXgrKzsKLSAg
ICAgICAgaWYgKGVuZEluZGV4ID09PSBzbmFwc2hvdExlbmd0aCkKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIHZhciBoaWdobGlnaHROb2RlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7Ci0gICAgICAgIGhpZ2hsaWdodE5vZGUuY2xhc3NOYW1lID0gc3R5bGVDbGFz
czsKLSAgICAgICAgaGlnaGxpZ2h0Tm9kZS50ZXh0Q29udGVudCA9IGxpbmVUZXh0LnN1YnN0cmlu
ZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLQotICAgICAgICB2YXIgbGFzdFRleHROb2RlID0g
dGV4dE5vZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oZW5kSW5kZXgpOwotICAgICAgICB2YXIgbGFz
dFRleHQgPSBsYXN0VGV4dE5vZGUudGV4dENvbnRlbnQ7Ci0gICAgICAgIGxhc3RUZXh0Tm9kZS50
ZXh0Q29udGVudCA9IGxhc3RUZXh0LnN1YnN0cmluZyhlbmRPZmZzZXQgLSBub2RlUmFuZ2VzW2Vu
ZEluZGV4XS5vZmZzZXQpOwotICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBsYXN0VGV4dE5v
ZGUsIHR5cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogbGFzdFRleHQsIG5ld1RleHQ6IGxhc3RUZXh0
Tm9kZS50ZXh0Q29udGVudCB9KTsKLQotICAgICAgICBpZiAoc3RhcnRJbmRleCA9PT0gZW5kSW5k
ZXgpIHsKLSAgICAgICAgICAgIGxhc3RUZXh0Tm9kZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9y
ZShoaWdobGlnaHROb2RlLCBsYXN0VGV4dE5vZGUpOwotICAgICAgICAgICAgY2hhbmdlcy5wdXNo
KHsgbm9kZTogaGlnaGxpZ2h0Tm9kZSwgdHlwZTogImFkZGVkIiwgbmV4dFNpYmxpbmc6IGxhc3RU
ZXh0Tm9kZSwgcGFyZW50OiBsYXN0VGV4dE5vZGUucGFyZW50RWxlbWVudCB9KTsKLSAgICAgICAg
ICAgIGhpZ2hsaWdodE5vZGVzLnB1c2goaGlnaGxpZ2h0Tm9kZSk7Ci0KLSAgICAgICAgICAgIHZh
ciBwcmVmaXhOb2RlID0gb3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsYXN0VGV4dC5zdWJz
dHJpbmcoMCwgc3RhcnRPZmZzZXQgLSBub2RlUmFuZ2VzW3N0YXJ0SW5kZXhdLm9mZnNldCkpOwot
ICAgICAgICAgICAgbGFzdFRleHROb2RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHByZWZp
eE5vZGUsIGhpZ2hsaWdodE5vZGUpOwotICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHsgbm9kZTog
cHJlZml4Tm9kZSwgdHlwZTogImFkZGVkIiwgbmV4dFNpYmxpbmc6IGhpZ2hsaWdodE5vZGUsIHBh
cmVudDogbGFzdFRleHROb2RlLnBhcmVudEVsZW1lbnQgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB2YXIgZmlyc3RUZXh0Tm9kZSA9IHRleHROb2RlU25hcHNob3Quc25hcHNob3RJ
dGVtKHN0YXJ0SW5kZXgpOwotICAgICAgICAgICAgdmFyIGZpcnN0VGV4dCA9IGZpcnN0VGV4dE5v
ZGUudGV4dENvbnRlbnQ7Ci0gICAgICAgICAgICB2YXIgYW5jaG9yRWxlbWVudCA9IGZpcnN0VGV4
dE5vZGUubmV4dFNpYmxpbmc7Ci0KLSAgICAgICAgICAgIGZpcnN0VGV4dE5vZGUucGFyZW50RWxl
bWVudC5pbnNlcnRCZWZvcmUoaGlnaGxpZ2h0Tm9kZSwgYW5jaG9yRWxlbWVudCk7Ci0gICAgICAg
ICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiBoaWdobGlnaHROb2RlLCB0eXBlOiAiYWRkZWQiLCBu
ZXh0U2libGluZzogYW5jaG9yRWxlbWVudCwgcGFyZW50OiBmaXJzdFRleHROb2RlLnBhcmVudEVs
ZW1lbnQgfSk7Ci0gICAgICAgICAgICBoaWdobGlnaHROb2Rlcy5wdXNoKGhpZ2hsaWdodE5vZGUp
OwotCi0gICAgICAgICAgICBmaXJzdFRleHROb2RlLnRleHRDb250ZW50ID0gZmlyc3RUZXh0LnN1
YnN0cmluZygwLCBzdGFydE9mZnNldCAtIG5vZGVSYW5nZXNbc3RhcnRJbmRleF0ub2Zmc2V0KTsK
LSAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG5vZGU6IGZpcnN0VGV4dE5vZGUsIHR5cGU6ICJj
aGFuZ2VkIiwgb2xkVGV4dDogZmlyc3RUZXh0LCBuZXdUZXh0OiBmaXJzdFRleHROb2RlLnRleHRD
b250ZW50IH0pOwotCi0gICAgICAgICAgICBmb3IgKHZhciBqID0gc3RhcnRJbmRleCArIDE7IGog
PCBlbmRJbmRleDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRleHROb2RlID0gdGV4dE5v
ZGVTbmFwc2hvdC5zbmFwc2hvdEl0ZW0oaik7Ci0gICAgICAgICAgICAgICAgdmFyIHRleHQgPSB0
ZXh0Tm9kZS50ZXh0Q29udGVudDsKLSAgICAgICAgICAgICAgICB0ZXh0Tm9kZS50ZXh0Q29udGVu
dCA9ICIiOwotICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG5vZGU6IHRleHROb2RlLCB0
eXBlOiAiY2hhbmdlZCIsIG9sZFRleHQ6IHRleHQsIG5ld1RleHQ6IHRleHROb2RlLnRleHRDb250
ZW50IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0YXJ0SW5kZXggPSBl
bmRJbmRleDsKLSAgICAgICAgbm9kZVJhbmdlc1tzdGFydEluZGV4XS5vZmZzZXQgPSBlbmRPZmZz
ZXQ7Ci0gICAgICAgIG5vZGVSYW5nZXNbc3RhcnRJbmRleF0ubGVuZ3RoID0gbGFzdFRleHROb2Rl
LnRleHRDb250ZW50Lmxlbmd0aDsKLQotICAgIH0KLSAgICByZXR1cm4gaGlnaGxpZ2h0Tm9kZXM7
Ci19Ci0KLVdlYkluc3BlY3Rvci5hcHBseURvbUNoYW5nZXMgPSBmdW5jdGlvbihkb21DaGFuZ2Vz
KQotewotICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gZG9tQ2hhbmdlcy5sZW5ndGg7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgdmFyIGVudHJ5ID0gZG9tQ2hhbmdlc1tpXTsKLSAgICAgICAg
c3dpdGNoIChlbnRyeS50eXBlKSB7Ci0gICAgICAgIGNhc2UgImFkZGVkIjoKLSAgICAgICAgICAg
IGVudHJ5LnBhcmVudC5pbnNlcnRCZWZvcmUoZW50cnkubm9kZSwgZW50cnkubmV4dFNpYmxpbmcp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgImNoYW5nZWQiOgotICAgICAgICAg
ICAgZW50cnkubm9kZS50ZXh0Q29udGVudCA9IGVudHJ5Lm5ld1RleHQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLnJldmVydERvbUNoYW5n
ZXMgPSBmdW5jdGlvbihkb21DaGFuZ2VzKQotewotICAgIGZvciAodmFyIGkgPSBkb21DaGFuZ2Vz
Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIHZhciBlbnRyeSA9IGRvbUNoYW5n
ZXNbaV07Ci0gICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgewotICAgICAgICBjYXNlICJhZGRl
ZCI6Ci0gICAgICAgICAgICBpZiAoZW50cnkubm9kZS5wYXJlbnRFbGVtZW50KQotICAgICAgICAg
ICAgICAgIGVudHJ5Lm5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbnRyeS5ub2RlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJjaGFuZ2VkIjoKLSAgICAgICAgICAg
IGVudHJ5Lm5vZGUudGV4dENvbnRlbnQgPSBlbnRyeS5vbGRUZXh0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5fY29hbGVzY2luZ0xldmVs
ID0gMDsKLQotV2ViSW5zcGVjdG9yLnN0YXJ0QmF0Y2hVcGRhdGUgPSBmdW5jdGlvbigpCi17Ci0g
ICAgaWYgKCFXZWJJbnNwZWN0b3IuX2NvYWxlc2NpbmdMZXZlbCkKLSAgICAgICAgV2ViSW5zcGVj
dG9yLl9wb3N0VXBkYXRlSGFuZGxlcnMgPSBuZXcgTWFwKCk7Ci0gICAgV2ViSW5zcGVjdG9yLl9j
b2FsZXNjaW5nTGV2ZWwrKzsKLX0KLQotV2ViSW5zcGVjdG9yLmVuZEJhdGNoVXBkYXRlID0gZnVu
Y3Rpb24oKQotewotICAgIGlmICgtLVdlYkluc3BlY3Rvci5fY29hbGVzY2luZ0xldmVsKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB2YXIgaGFuZGxlcnMgPSBXZWJJbnNwZWN0b3IuX3Bvc3RVcGRh
dGVIYW5kbGVyczsKLSAgICBkZWxldGUgV2ViSW5zcGVjdG9yLl9wb3N0VXBkYXRlSGFuZGxlcnM7
Ci0KLSAgICB2YXIga2V5cyA9IGhhbmRsZXJzLmtleXMoKTsKLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIG9iamVjdCA9IGtleXNbaV07Ci0g
ICAgICAgIHZhciBtZXRob2RzID0gaGFuZGxlcnMuZ2V0KG9iamVjdCkua2V5cygpOwotICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IG1ldGhvZHMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICBt
ZXRob2RzW2pdLmNhbGwob2JqZWN0KTsKLSAgICB9Ci19Ci0KLS8qKgotICogQHBhcmFtIHtPYmpl
Y3R9IG9iamVjdAotICogQHBhcmFtIHtmdW5jdGlvbigpfSBtZXRob2QKLSAqLwotV2ViSW5zcGVj
dG9yLmludm9rZU9uY2VBZnRlckJhdGNoVXBkYXRlID0gZnVuY3Rpb24ob2JqZWN0LCBtZXRob2Qp
Ci17Ci0gICAgaWYgKCFXZWJJbnNwZWN0b3IuX2NvYWxlc2NpbmdMZXZlbCkgewotICAgICAgICBt
ZXRob2QuY2FsbChvYmplY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHZh
ciBtZXRob2RzID0gV2ViSW5zcGVjdG9yLl9wb3N0VXBkYXRlSGFuZGxlcnMuZ2V0KG9iamVjdCk7
Ci0gICAgaWYgKCFtZXRob2RzKSB7Ci0gICAgICAgIG1ldGhvZHMgPSBuZXcgTWFwKCk7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5fcG9zdFVwZGF0ZUhhbmRsZXJzLnB1dChvYmplY3QsIG1ldGhvZHMp
OwotICAgIH0KLSAgICBtZXRob2RzLnB1dChtZXRob2QpOwotfQotCi0vKioKLSAqIFRoaXMgYm9n
dXMgdmlldyBpcyBuZWVkZWQgdG8gbG9hZC91bmxvYWQgQ29kZU1pcnJvci1yZWxhdGVkIENTUyBv
biBkZW1hbmQuCi0gKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9y
LlZpZXd9Ci0gKi8KLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ1NTTG9hZFZpZXcgPSBmdW5jdGlv
bigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLmVsZW1l
bnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NT
KCJjbS9jb2RlbWlycm9yLmNzcyIpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygiY20v
Y21kZXZ0b29scy5jc3MiKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDU1NMb2FkVmll
dy5wcm90b3R5cGUgPSB7Ci0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5
cGUKLX0KLQotOyhmdW5jdGlvbigpIHsKLQotZnVuY3Rpb24gd2luZG93TG9hZGVkKCkKLXsKLSAg
ICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCBXZWJJbnNwZWN0b3IuX3dpbmRvd0Zv
Y3VzZWQsIGZhbHNlKTsKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIFdlYklu
c3BlY3Rvci5fd2luZG93Qmx1cnJlZCwgZmFsc2UpOwotICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImZvY3VzIiwgV2ViSW5zcGVjdG9yLl9mb2N1c0NoYW5nZWQuYmluZCh0aGlzKSwgdHJ1
ZSk7Ci0gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCB3
aW5kb3dMb2FkZWQsIGZhbHNlKTsKLX0KLQotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNv
bnRlbnRMb2FkZWQiLCB3aW5kb3dMb2FkZWQsIGZhbHNlKTsKLQotfSkoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVXNlckFnZW50U3VwcG9ydC5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVXNlckFnZW50U3VwcG9ydC5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1OWY2NS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VzZXJBZ2VudFN1cHBvcnQuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwzODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYklu
c3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0ID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuX3VzZXJB
Z2VudE92ZXJyaWRlRW5hYmxlZCA9IGZhbHNlOwotICAgIHRoaXMuX2RldmljZU1ldHJpY3NPdmVy
cmlkZUVuYWJsZWQgPSBmYWxzZTsKLSAgICB0aGlzLl9nZW9sb2NhdGlvblBvc2l0aW9uT3ZlcnJp
ZGVFbmFibGVkID0gZmFsc2U7Ci0gICAgdGhpcy5fZGV2aWNlT3JpZW50YXRpb25PdmVycmlkZUVu
YWJsZWQgPSBmYWxzZTsKLQotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy51c2VyQWdlbnQuYWRk
Q2hhbmdlTGlzdGVuZXIodGhpcy5fdXNlckFnZW50Q2hhbmdlZCwgdGhpcyk7Ci0gICAgV2ViSW5z
cGVjdG9yLnNldHRpbmdzLmRldmljZU1ldHJpY3MuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fZGV2
aWNlTWV0cmljc0NoYW5nZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZXZp
Y2VGaXRXaW5kb3cuYWRkQ2hhbmdlTGlzdGVuZXIodGhpcy5fZGV2aWNlTWV0cmljc0NoYW5nZWQs
IHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5nZW9sb2NhdGlvbk92ZXJyaWRlLmFk
ZENoYW5nZUxpc3RlbmVyKHRoaXMuX2dlb2xvY2F0aW9uUG9zaXRpb25DaGFuZ2VkLCB0aGlzKTsK
LSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZGV2aWNlT3JpZW50YXRpb25PdmVycmlkZS5hZGRD
aGFuZ2VMaXN0ZW5lcih0aGlzLl9kZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQsIHRoaXMpOwotfQot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoCi0gKiBAcGFy
YW0ge251bWJlcn0gaGVpZ2h0Ci0gKiBAcGFyYW0ge251bWJlcn0gZm9udFNjYWxlRmFjdG9yCi0g
Ki8KLVdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmljZU1ldHJpY3MgPSBmdW5jdGlv
bih3aWR0aCwgaGVpZ2h0LCBmb250U2NhbGVGYWN0b3IpCi17Ci0gICAgdGhpcy53aWR0aCA9IHdp
ZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHRoaXMuZm9udFNjYWxlRmFjdG9y
ID0gZm9udFNjYWxlRmFjdG9yOwotfQotCi0vKioKLSAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5V
c2VyQWdlbnRTdXBwb3J0LkRldmljZU1ldHJpY3N9Ci0gKi8KLVdlYkluc3BlY3Rvci5Vc2VyQWdl
bnRTdXBwb3J0LkRldmljZU1ldHJpY3MucGFyc2VTZXR0aW5nID0gZnVuY3Rpb24odmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIHZhciBzcGxpdE1ldHJpY3MgPSB2YWx1ZS5zcGxp
dCgieCIpOwotICAgICAgICBpZiAoc3BsaXRNZXRyaWNzLmxlbmd0aCA9PT0gMykKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1cHBvcnQuRGV2aWNlTWV0cmlj
cyhwYXJzZUludChzcGxpdE1ldHJpY3NbMF0sIDEwKSwgcGFyc2VJbnQoc3BsaXRNZXRyaWNzWzFd
LCAxMCksIHBhcnNlRmxvYXQoc3BsaXRNZXRyaWNzWzJdKSk7Ci0gICAgfQotICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1cHBvcnQuRGV2aWNlTWV0cmljcygwLCAwLCAxKTsK
LX0KLQotLyoqCi0gKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1cHBvcnQuRGV2
aWNlTWV0cmljc30KLSAqLwotV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1cHBvcnQuRGV2aWNlTWV0
cmljcy5wYXJzZVVzZXJJbnB1dCA9IGZ1bmN0aW9uKHdpZHRoU3RyaW5nLCBoZWlnaHRTdHJpbmcs
IGZvbnRTY2FsZUZhY3RvclN0cmluZykKLXsKLSAgICBmdW5jdGlvbiBpc1VzZXJJbnB1dFZhbGlk
KHZhbHVlLCBpc0ludGVnZXIpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBpc0ludGVnZXIgPyAvXlswXSpbMS05XVtc
ZF0qJC8udGVzdCh2YWx1ZSkgOiAvXlswXSooWzEtOV1bXGRdKihcLlxkKyk/fFwuXGQrKSQvLnRl
c3QodmFsdWUpOwotICAgIH0KLQotICAgIGlmICghd2lkdGhTdHJpbmcgXiAhaGVpZ2h0U3RyaW5n
KQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHZhciBpc1dpZHRoVmFsaWQgPSBpc1VzZXJJ
bnB1dFZhbGlkKHdpZHRoU3RyaW5nLCB0cnVlKTsKLSAgICB2YXIgaXNIZWlnaHRWYWxpZCA9IGlz
VXNlcklucHV0VmFsaWQoaGVpZ2h0U3RyaW5nLCB0cnVlKTsKLSAgICB2YXIgaXNGb250U2NhbGVG
YWN0b3JWYWxpZCA9IGlzVXNlcklucHV0VmFsaWQoZm9udFNjYWxlRmFjdG9yU3RyaW5nLCBmYWxz
ZSk7Ci0KLSAgICBpZiAoIWlzV2lkdGhWYWxpZCAmJiAhaXNIZWlnaHRWYWxpZCAmJiAhaXNGb250
U2NhbGVGYWN0b3JWYWxpZCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICB2YXIgd2lkdGgg
PSBpc1dpZHRoVmFsaWQgPyBwYXJzZUludCh3aWR0aFN0cmluZyB8fCAiMCIsIDEwKSA6IC0xOwot
ICAgIHZhciBoZWlnaHQgPSBpc0hlaWdodFZhbGlkID8gcGFyc2VJbnQoaGVpZ2h0U3RyaW5nIHx8
ICIwIiwgMTApIDogLTE7Ci0gICAgdmFyIGZvbnRTY2FsZUZhY3RvciA9IGlzRm9udFNjYWxlRmFj
dG9yVmFsaWQgPyBwYXJzZUZsb2F0KGZvbnRTY2FsZUZhY3RvclN0cmluZykgOiAtMTsKLQotICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1cHBvcnQuRGV2aWNlTWV0cmljcyh3
aWR0aCwgaGVpZ2h0LCBmb250U2NhbGVGYWN0b3IpOwotfQotCi1XZWJJbnNwZWN0b3IuVXNlckFn
ZW50U3VwcG9ydC5EZXZpY2VNZXRyaWNzLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzVmFsaWQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLmlzV2lkdGhWYWxpZCgpICYmIHRoaXMuaXNIZWlnaHRWYWxp
ZCgpICYmIHRoaXMuaXNGb250U2NhbGVGYWN0b3JWYWxpZCgpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGlzV2lkdGhWYWxpZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMud2lkdGggPj0gMDsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBpc0hlaWdo
dFZhbGlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5oZWlnaHQgPj0g
MDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8K
LSAgICBpc0ZvbnRTY2FsZUZhY3RvclZhbGlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5mb250U2NhbGVGYWN0b3IgPiAwOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgdG9TZXR0aW5nOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuICIi
OwotCi0gICAgICAgIHJldHVybiB0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0ID8gdGhpcy53aWR0
aCArICJ4IiArIHRoaXMuaGVpZ2h0ICsgIngiICsgdGhpcy5mb250U2NhbGVGYWN0b3IgOiAiIjsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAg
IHdpZHRoVG9JbnB1dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNX
aWR0aFZhbGlkKCkgJiYgdGhpcy53aWR0aCA/IFN0cmluZyh0aGlzLndpZHRoKSA6ICIiOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgaGVp
Z2h0VG9JbnB1dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNIZWln
aHRWYWxpZCgpICYmIHRoaXMuaGVpZ2h0ID8gU3RyaW5nKHRoaXMuaGVpZ2h0KSA6ICIiOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgZm9u
dFNjYWxlRmFjdG9yVG9JbnB1dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuaXNGb250U2NhbGVGYWN0b3JWYWxpZCgpICYmIHRoaXMuZm9udFNjYWxlRmFjdG9yID8gU3Ry
aW5nKHRoaXMuZm9udFNjYWxlRmFjdG9yKSA6ICIiOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBwYXJhbSB7bnVtYmVyfSBsYXRpdHVkZQotICogQHBhcmFtIHtudW1iZXJ9
IGxvbmdpdHVkZQotICovCi1XZWJJbnNwZWN0b3IuVXNlckFnZW50U3VwcG9ydC5HZW9sb2NhdGlv
blBvc2l0aW9uID0gZnVuY3Rpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgZXJyb3IpCi17Ci0gICAg
dGhpcy5sYXRpdHVkZSA9IGxhdGl0dWRlOwotICAgIHRoaXMubG9uZ2l0dWRlID0gbG9uZ2l0dWRl
OwotICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsKLX0KLQotV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1
cHBvcnQuR2VvbG9jYXRpb25Qb3NpdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICog
QHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIHRvU2V0dGluZzogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICh0eXBlb2YgdGhpcy5sYXRpdHVkZSA9PT0gIm51bWJlciIgJiYg
dHlwZW9mIHRoaXMubG9uZ2l0dWRlID09PSAibnVtYmVyIiAmJiB0eXBlb2YgdGhpcy5lcnJvciA9
PT0gInN0cmluZyIpID8gdGhpcy5sYXRpdHVkZSArICJAIiArIHRoaXMubG9uZ2l0dWRlICsgIjoi
ICsgdGhpcy5lcnJvciA6ICIiOwotICAgIH0KLX0KLQotLyoqCi0gKiBAcmV0dXJuIHtXZWJJbnNw
ZWN0b3IuVXNlckFnZW50U3VwcG9ydC5HZW9sb2NhdGlvblBvc2l0aW9ufQotICovCi1XZWJJbnNw
ZWN0b3IuVXNlckFnZW50U3VwcG9ydC5HZW9sb2NhdGlvblBvc2l0aW9uLnBhcnNlU2V0dGluZyA9
IGZ1bmN0aW9uKHZhbHVlKQotewotICAgIGlmICh2YWx1ZSkgewotICAgICAgICB2YXIgc3BsaXRF
cnJvciA9IHZhbHVlLnNwbGl0KCI6Iik7Ci0gICAgICAgIGlmIChzcGxpdEVycm9yLmxlbmd0aCA9
PT0gMikgewotICAgICAgICAgICAgdmFyIHNwbGl0UG9zaXRpb24gPSBzcGxpdEVycm9yWzBdLnNw
bGl0KCJAIikKLSAgICAgICAgICAgIGlmIChzcGxpdFBvc2l0aW9uLmxlbmd0aCA9PT0gMikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0Lkdl
b2xvY2F0aW9uUG9zaXRpb24ocGFyc2VGbG9hdChzcGxpdFBvc2l0aW9uWzBdKSwgcGFyc2VGbG9h
dChzcGxpdFBvc2l0aW9uWzFdKSwgc3BsaXRFcnJvclsxXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVXNlckFnZW50U3VwcG9ydC5HZW9sb2NhdGlvblBv
c2l0aW9uKDAsIDAsICIiKTsKLX0KLQotLyoqCi0gKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVz
ZXJBZ2VudFN1cHBvcnQuR2VvbG9jYXRpb25Qb3NpdGlvbn0KLSAqLwotV2ViSW5zcGVjdG9yLlVz
ZXJBZ2VudFN1cHBvcnQuR2VvbG9jYXRpb25Qb3NpdGlvbi5wYXJzZVVzZXJJbnB1dCA9IGZ1bmN0
aW9uKGxhdGl0dWRlU3RyaW5nLCBsb25naXR1ZGVTdHJpbmcsIGVycm9yU3RhdHVzKQotewotICAg
IGZ1bmN0aW9uIGlzVXNlcklucHV0VmFsaWQodmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiAvXlstXT9bMC05
XSpbLl0/WzAtOV0qJC8udGVzdCh2YWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKCFsYXRpdHVkZVN0
cmluZyBeICFsYXRpdHVkZVN0cmluZykKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICB2YXIg
aXNMYXRpdHVkZVZhbGlkID0gaXNVc2VySW5wdXRWYWxpZChsYXRpdHVkZVN0cmluZyk7Ci0gICAg
dmFyIGlzTG9uZ2l0dWRlVmFsaWQgPSBpc1VzZXJJbnB1dFZhbGlkKGxvbmdpdHVkZVN0cmluZyk7
Ci0KLSAgICBpZiAoIWlzTGF0aXR1ZGVWYWxpZCAmJiAhaXNMb25naXR1ZGVWYWxpZCkKLSAgICAg
ICAgcmV0dXJuIG51bGw7Ci0KLSAgICB2YXIgbGF0aXR1ZGUgPSBpc0xhdGl0dWRlVmFsaWQgPyBw
YXJzZUZsb2F0KGxhdGl0dWRlU3RyaW5nKSA6IC0xOwotICAgIHZhciBsb25naXR1ZGUgPSBpc0xv
bmdpdHVkZVZhbGlkID8gcGFyc2VGbG9hdChsb25naXR1ZGVTdHJpbmcpIDogLTE7Ci0KLSAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0Lkdlb2xvY2F0aW9uUG9zaXRp
b24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgZXJyb3JTdGF0dXMgPyAiUG9zaXRpb25VbmF2YWlsYWJs
ZSIgOiAiIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0Lkdlb2xvY2F0aW9u
UG9zaXRpb24uY2xlYXJHZW9sb2NhdGlvbk92ZXJyaWRlID0gZnVuY3Rpb24oKQotewotICAgIFBh
Z2VBZ2VudC5jbGVhckdlb2xvY2F0aW9uT3ZlcnJpZGUoKTsKLX0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBwYXJhbSB7bnVtYmVyfSBhbHBoYQotICogQHBhcmFtIHtudW1iZXJ9IGJldGEK
LSAqIEBwYXJhbSB7bnVtYmVyfSBnYW1tYQotICovCi1XZWJJbnNwZWN0b3IuVXNlckFnZW50U3Vw
cG9ydC5EZXZpY2VPcmllbnRhdGlvbiA9IGZ1bmN0aW9uKGFscGhhLCBiZXRhLCBnYW1tYSkKLXsK
LSAgICB0aGlzLmFscGhhID0gYWxwaGE7Ci0gICAgdGhpcy5iZXRhID0gYmV0YTsKLSAgICB0aGlz
LmdhbW1hID0gZ2FtbWE7Ci19Ci0KLVdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmlj
ZU9yaWVudGF0aW9uLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJp
bmd9Ci0gICAgICovCi0gICAgdG9TZXR0aW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7Ci0gICAgfQotfQotCi0vKioKLSAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmljZU9yaWVudGF0aW9ufQotICovCi1X
ZWJJbnNwZWN0b3IuVXNlckFnZW50U3VwcG9ydC5EZXZpY2VPcmllbnRhdGlvbi5wYXJzZVNldHRp
bmcgPSBmdW5jdGlvbih2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgdmFyIGpz
b25PYmplY3QgPSBKU09OLnBhcnNlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuVXNlckFnZW50U3VwcG9ydC5EZXZpY2VPcmllbnRhdGlvbihqc29uT2JqZWN0LmFscGhh
LCBqc29uT2JqZWN0LmJldGEsIGpzb25PYmplY3QuZ2FtbWEpOwotICAgIH0KLSAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmljZU9yaWVudGF0aW9uKDAsIDAs
IDApOwotfQotCi0vKioKLSAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuVXNlckFnZW50U3VwcG9y
dC5EZXZpY2VPcmllbnRhdGlvbn0KLSAqLwotV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1cHBvcnQu
RGV2aWNlT3JpZW50YXRpb24ucGFyc2VVc2VySW5wdXQgPSBmdW5jdGlvbihhbHBoYVN0cmluZywg
YmV0YVN0cmluZywgZ2FtbWFTdHJpbmcpCi17Ci0gICAgZnVuY3Rpb24gaXNVc2VySW5wdXRWYWxp
ZCh2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgcmV0dXJuIC9eWy1dP1swLTldKlsuXT9bMC05XSokLy50ZXN0KHZhbHVl
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWFscGhhU3RyaW5nIF4gIWJldGFTdHJpbmcgXiAhZ2FtbWFT
dHJpbmcpCi0gICAgICAgIHJldHVybiBudWxsOwotCi0gICAgdmFyIGlzQWxwaGFWYWxpZCA9IGlz
VXNlcklucHV0VmFsaWQoYWxwaGFTdHJpbmcpOwotICAgIHZhciBpc0JldGFWYWxpZCA9IGlzVXNl
cklucHV0VmFsaWQoYmV0YVN0cmluZyk7Ci0gICAgdmFyIGlzR2FtbWFWYWxpZCA9IGlzVXNlcklu
cHV0VmFsaWQoZ2FtbWFTdHJpbmcpOwotCi0gICAgaWYgKCFpc0FscGhhVmFsaWQgJiYgIWlzQmV0
YVZhbGlkICYmICFpc0dhbW1hVmFsaWQpCi0gICAgICAgIHJldHVybiBudWxsOwotCi0gICAgdmFy
IGFscGhhID0gaXNBbHBoYVZhbGlkID8gcGFyc2VGbG9hdChhbHBoYVN0cmluZykgOiAtMTsKLSAg
ICB2YXIgYmV0YSA9IGlzQmV0YVZhbGlkID8gcGFyc2VGbG9hdChiZXRhU3RyaW5nKSA6IC0xOwot
ICAgIHZhciBnYW1tYSA9IGlzR2FtbWFWYWxpZCA/IHBhcnNlRmxvYXQoZ2FtbWFTdHJpbmcpIDog
LTE7Ci0KLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmlj
ZU9yaWVudGF0aW9uKGFscGhhLCBiZXRhLCBnYW1tYSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Vc2Vy
QWdlbnRTdXBwb3J0LkRldmljZU9yaWVudGF0aW9uLmNsZWFyRGV2aWNlT3JpZW50YXRpb25PdmVy
cmlkZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBQYWdlQWdlbnQuY2xlYXJEZXZpY2VPcmllbnRhdGlv
bk92ZXJyaWRlKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LnByb3RvdHlw
ZSA9IHsKLSAgICB0b2dnbGVVc2VyQWdlbnRPdmVycmlkZTogZnVuY3Rpb24oZW5hYmxlZCkKLSAg
ICB7Ci0gICAgICAgIGlmIChlbmFibGVkID09PSB0aGlzLl91c2VyQWdlbnRPdmVycmlkZUVuYWJs
ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX3VzZXJBZ2VudE92ZXJyaWRl
RW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgICAgIHRoaXMuX3VzZXJBZ2VudENoYW5nZWQoKTsKLSAg
ICB9LAotCi0gICAgdG9nZ2xlRGV2aWNlTWV0cmljc092ZXJyaWRlOiBmdW5jdGlvbihlbmFibGVk
KQotICAgIHsKLSAgICAgICAgaWYgKGVuYWJsZWQgPT09IHRoaXMuX2RldmljZU1ldHJpY3NPdmVy
cmlkZUVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2RldmljZU1l
dHJpY3NPdmVycmlkZUVuYWJsZWQgPSBlbmFibGVkOwotICAgICAgICB0aGlzLl9kZXZpY2VNZXRy
aWNzQ2hhbmdlZCgpOwotICAgIH0sCi0KLSAgICB0b2dnbGVHZW9sb2NhdGlvblBvc2l0aW9uT3Zl
cnJpZGU6IGZ1bmN0aW9uKGVuYWJsZWQpCi0gICAgewotICAgICAgICBpZiAoZW5hYmxlZCA9PT0g
dGhpcy5fZ2VvbG9jYXRpb25Qb3NpdGlvbk92ZXJyaWRlRW5hYmxlZCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdGhpcy5fZ2VvbG9jYXRpb25Qb3NpdGlvbk92ZXJyaWRlRW5hYmxlZCA9
IGVuYWJsZWQ7Ci0gICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uUG9zaXRpb25DaGFuZ2VkKCk7Ci0g
ICAgfSwKLQotICAgIHRvZ2dsZURldmljZU9yaWVudGF0aW9uT3ZlcnJpZGU6IGZ1bmN0aW9uKGVu
YWJsZWQpCi0gICAgewotICAgICAgICBpZiAoZW5hYmxlZCA9PT0gdGhpcy5fZGV2aWNlT3JpZW50
YXRpb25PdmVycmlkZUVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMu
X2RldmljZU9yaWVudGF0aW9uT3ZlcnJpZGVFbmFibGVkID0gZW5hYmxlZDsKLSAgICAgICAgdGhp
cy5fZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKCk7Ci0gICAgfSwKLQotICAgIF91c2VyQWdlbnRD
aGFuZ2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBOZXR3b3JrQWdlbnQuc2V0VXNlckFn
ZW50T3ZlcnJpZGUodGhpcy5fdXNlckFnZW50T3ZlcnJpZGVFbmFibGVkID8gV2ViSW5zcGVjdG9y
LnNldHRpbmdzLnVzZXJBZ2VudC5nZXQoKSA6ICIiKTsKLSAgICB9LAotCi0gICAgX2RldmljZU1l
dHJpY3NDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbWV0cmljcyA9IFdl
Ykluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmljZU1ldHJpY3MucGFyc2VTZXR0aW5nKHRo
aXMuX2RldmljZU1ldHJpY3NPdmVycmlkZUVuYWJsZWQgPyBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
ZGV2aWNlTWV0cmljcy5nZXQoKSA6ICIiKTsKLSAgICAgICAgaWYgKG1ldHJpY3MuaXNWYWxpZCgp
KQotICAgICAgICAgICAgUGFnZUFnZW50LnNldERldmljZU1ldHJpY3NPdmVycmlkZShtZXRyaWNz
LndpZHRoLCBtZXRyaWNzLmhlaWdodCwgbWV0cmljcy5mb250U2NhbGVGYWN0b3IsIFdlYkluc3Bl
Y3Rvci5zZXR0aW5ncy5kZXZpY2VGaXRXaW5kb3cuZ2V0KCkpOwotICAgIH0sCi0KLSAgICBfZ2Vv
bG9jYXRpb25Qb3NpdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fZ2VvbG9jYXRpb25Qb3NpdGlvbk92ZXJyaWRlRW5hYmxlZCkgewotICAgICAgICAgICAg
UGFnZUFnZW50LmNsZWFyR2VvbG9jYXRpb25PdmVycmlkZSgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHZhciBnZW9sb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5Vc2Vy
QWdlbnRTdXBwb3J0Lkdlb2xvY2F0aW9uUG9zaXRpb24ucGFyc2VTZXR0aW5nKFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5nZW9sb2NhdGlvbk92ZXJyaWRlLmdldCgpKTsKLSAgICAgICAgaWYgKGdlb2xv
Y2F0aW9uLmVycm9yKQotICAgICAgICAgICAgUGFnZUFnZW50LnNldEdlb2xvY2F0aW9uT3ZlcnJp
ZGUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUGFnZUFnZW50LnNldEdlb2xvY2F0aW9u
T3ZlcnJpZGUoZ2VvbG9jYXRpb24ubGF0aXR1ZGUsIGdlb2xvY2F0aW9uLmxvbmdpdHVkZSwgMTUw
KTsKLSAgICB9LAotCi0gICAgX2RldmljZU9yaWVudGF0aW9uQ2hhbmdlZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlRW5hYmxl
ZCkgewotICAgICAgICAgICAgUGFnZUFnZW50LmNsZWFyRGV2aWNlT3JpZW50YXRpb25PdmVycmlk
ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHZhciBkZXZpY2VP
cmllbnRhdGlvbiA9IFdlYkluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0LkRldmljZU9yaWVudGF0
aW9uLnBhcnNlU2V0dGluZyhXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZGV2aWNlT3JpZW50YXRpb25P
dmVycmlkZS5nZXQoKSk7Ci0gICAgICAgIFBhZ2VBZ2VudC5zZXREZXZpY2VPcmllbnRhdGlvbk92
ZXJyaWRlKGRldmljZU9yaWVudGF0aW9uLmFscGhhLCBkZXZpY2VPcmllbnRhdGlvbi5iZXRhLCBk
ZXZpY2VPcmllbnRhdGlvbi5nYW1tYSk7Ci0gICAgfQotfQotCi0KLS8qKgotICogQHR5cGUge1dl
Ykluc3BlY3Rvci5Vc2VyQWdlbnRTdXBwb3J0fSAKLSAqLwotV2ViSW5zcGVjdG9yLnVzZXJBZ2Vu
dFN1cHBvcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1VzZXJNZXRyaWNzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Vc2Vy
TWV0cmljcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM0MzZhZC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VzZXJNZXRyaWNzLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICov
Ci1XZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MgPSBmdW5jdGlvbigpCi17Ci0gICAgZm9yICh2YXIg
YWN0aW9uTmFtZSBpbiBXZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MuX0FjdGlvbkNvZGVzKSB7Ci0g
ICAgICAgIHZhciBhY3Rpb25Db2RlID0gV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLl9BY3Rpb25D
b2Rlc1thY3Rpb25OYW1lXTsKLSAgICAgICAgdGhpc1thY3Rpb25OYW1lXSA9IG5ldyBXZWJJbnNw
ZWN0b3IuVXNlck1ldHJpY3MuX1JlY29yZGVyKGFjdGlvbkNvZGUpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHNldHRpbmdDaGFuZ2VkKHRydWVDb2RlLCBmYWxzZUNvZGUsIGV2ZW50KQotICAgIHsK
LSAgICAgICAgaWYgKGV2ZW50LmRhdGEpCi0gICAgICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3QucmVjb3JkU2V0dGluZ0NoYW5nZWQodHJ1ZUNvZGUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QucmVjb3JkU2V0dGluZ0NoYW5nZWQoZmFsc2VDb2Rl
KTsKLSAgICB9Ci0KLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZG9tV29yZFdyYXAuYWRkQ2hh
bmdlTGlzdGVuZXIoc2V0dGluZ0NoYW5nZWQuYmluZCh0aGlzLCBXZWJJbnNwZWN0b3IuVXNlck1l
dHJpY3MuX1NldHRpbmdDb2Rlcy5FbGVtZW50c0RPTVdyYXBPbiwgV2ViSW5zcGVjdG9yLlVzZXJN
ZXRyaWNzLl9TZXR0aW5nQ29kZXMuRWxlbWVudHNET01XcmFwT2ZmKSk7Ci0gICAgV2ViSW5zcGVj
dG9yLnNldHRpbmdzLm1vbml0b3JpbmdYSFJFbmFibGVkLmFkZENoYW5nZUxpc3RlbmVyKHNldHRp
bmdDaGFuZ2VkLmJpbmQodGhpcywgV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLl9TZXR0aW5nQ29k
ZXMuQ29uc29sZU1vbml0b3JYSFJPbiwgV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLl9TZXR0aW5n
Q29kZXMuQ29uc29sZU1vbml0b3JYSFJPZmYpKTsKLSAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
cHJlc2VydmVDb25zb2xlTG9nLmFkZENoYW5nZUxpc3RlbmVyKHNldHRpbmdDaGFuZ2VkLmJpbmQo
dGhpcywgV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLl9TZXR0aW5nQ29kZXMuQ29uc29sZVByZXNl
cnZlTG9nT24sIFdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5fU2V0dGluZ0NvZGVzLkNvbnNvbGVQ
cmVzZXJ2ZUxvZ09mZikpOwotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5yZXNvdXJjZXNMYXJn
ZVJvd3MuYWRkQ2hhbmdlTGlzdGVuZXIoc2V0dGluZ0NoYW5nZWQuYmluZCh0aGlzLCBXZWJJbnNw
ZWN0b3IuVXNlck1ldHJpY3MuX1NldHRpbmdDb2Rlcy5OZXR3b3JrU2hvd0xhcmdlUm93c09uLCBX
ZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MuX1NldHRpbmdDb2Rlcy5OZXR3b3JrU2hvd0xhcmdlUm93
c09mZikpOwotfQotCi0vLyBDb2RlcyBiZWxvdyBhcmUgdXNlZCB0byBjb2xsZWN0IFVNQSBoaXN0
b2dyYW1zIGluIHRoZSBDaHJvbWl1bSBwb3J0LgotLy8gRG8gbm90IGNoYW5nZSB0aGUgdmFsdWVz
IGJlbG93LCBhZGRpdGlvbmFsIGFjdGlvbnMgYXJlIG5lZWRlZCBvbiB0aGUgQ2hyb21pdW0gc2lk
ZQotLy8gaW4gb3JkZXIgdG8gYWRkIG1vcmUgY29kZXMuCi0KLVdlYkluc3BlY3Rvci5Vc2VyTWV0
cmljcy5fQWN0aW9uQ29kZXMgPSB7Ci0gICAgV2luZG93RG9ja2VkOiAxLAotICAgIFdpbmRvd1Vu
ZG9ja2VkOiAyLAotICAgIFNjcmlwdHNCcmVha3BvaW50U2V0OiAzLAotICAgIFRpbWVsaW5lU3Rh
cnRlZDogNCwKLSAgICBQcm9maWxlc0NQVVByb2ZpbGVUYWtlbjogNSwKLSAgICBQcm9maWxlc0hl
YXBQcm9maWxlVGFrZW46IDYsCi0gICAgQXVkaXRzU3RhcnRlZDogNywKLSAgICBDb25zb2xlRXZh
bHVhdGVkOiA4Ci19Ci0KLVdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5fU2V0dGluZ0NvZGVzID0g
ewotICAgIEVsZW1lbnRzRE9NV3JhcE9uOiAxLAotICAgIEVsZW1lbnRzRE9NV3JhcE9mZjogMiwK
LSAgICBDb25zb2xlTW9uaXRvclhIUk9uOiAzLAotICAgIENvbnNvbGVNb25pdG9yWEhST2ZmOiA0
LAotICAgIENvbnNvbGVQcmVzZXJ2ZUxvZ09uOiA1LAotICAgIENvbnNvbGVQcmVzZXJ2ZUxvZ09m
ZjogNiwKLSAgICBOZXR3b3JrU2hvd0xhcmdlUm93c09uOiA3LAotICAgIE5ldHdvcmtTaG93TGFy
Z2VSb3dzT2ZmOiA4Ci19Ci0KLVdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5fUGFuZWxDb2RlcyA9
IHsKLSAgICBlbGVtZW50czogMSwKLSAgICByZXNvdXJjZXM6IDIsCi0gICAgbmV0d29yazogMywK
LSAgICBzY3JpcHRzOiA0LAotICAgIHRpbWVsaW5lOiA1LAotICAgIHByb2ZpbGVzOiA2LAotICAg
IGF1ZGl0czogNywKLSAgICBjb25zb2xlOiA4Ci19Ci0KLVdlYkluc3BlY3Rvci5Vc2VyTWV0cmlj
cy5Vc2VyQWN0aW9uID0gIlVzZXJBY3Rpb24iOwotCi1XZWJJbnNwZWN0b3IuVXNlck1ldHJpY3Mu
VXNlckFjdGlvbk5hbWVzID0gewotICAgIEZvcmNlZEVsZW1lbnRTdGF0ZTogImZvcmNlZEVsZW1l
bnRTdGF0ZSIsCi0gICAgRmlsZVNhdmVkOiAiZmlsZVNhdmVkIiwKLSAgICBSZXZlcnRSZXZpc2lv
bjogInJldmVydFJldmlzaW9uIiwKLSAgICBBcHBseU9yaWdpbmFsQ29udGVudDogImFwcGx5T3Jp
Z2luYWxDb250ZW50IiwKLSAgICBUb2dnbGVQcmV0dHlQcmludDogInRvZ2dsZVByZXR0eVByaW50
IiwKLSAgICBTZXRCcmVha3BvaW50OiAic2V0QnJlYWtwb2ludCIsCi0gICAgT3BlblNvdXJjZUxp
bms6ICJvcGVuU291cmNlTGluayIsCi0gICAgTmV0d29ya1NvcnQ6ICJuZXR3b3JrU29ydCIsCi0g
ICAgTmV0d29ya1JlcXVlc3RTZWxlY3RlZDogIm5ldHdvcmtSZXF1ZXN0U2VsZWN0ZWQiLAotICAg
IE5ldHdvcmtSZXF1ZXN0VGFiU2VsZWN0ZWQ6ICJuZXR3b3JrUmVxdWVzdFRhYlNlbGVjdGVkIiwK
LSAgICBIZWFwU25hcHNob3RGaWx0ZXJDaGFuZ2VkOiAiaGVhcFNuYXBzaG90RmlsdGVyQ2hhbmdl
ZCIKLX07Ci0KLVdlYkluc3BlY3Rvci5Vc2VyTWV0cmljcy5wcm90b3R5cGUgPSB7Ci0gICAgcGFu
ZWxTaG93bjogZnVuY3Rpb24ocGFuZWxOYW1lKQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LnJlY29yZFBhbmVsU2hvd24oV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzLl9QYW5l
bENvZGVzW3BhbmVsTmFtZV0gfHwgMCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICovCi1XZWJJbnNwZWN0b3IuVXNlck1ldHJpY3MuX1JlY29yZGVyID0gZnVuY3Rpb24oYWN0
aW9uQ29kZSkKLXsKLSAgICB0aGlzLl9hY3Rpb25Db2RlID0gYWN0aW9uQ29kZTsKLX0KLQotV2Vi
SW5zcGVjdG9yLlVzZXJNZXRyaWNzLl9SZWNvcmRlci5wcm90b3R5cGUgPSB7Ci0gICAgcmVjb3Jk
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QucmVjb3Jk
QWN0aW9uVGFrZW4odGhpcy5fYWN0aW9uQ29kZSk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3Iu
dXNlck1ldHJpY3MgPSBuZXcgV2ViSW5zcGVjdG9yLlVzZXJNZXRyaWNzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1ZpZXcuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1ZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGMzYjgxNGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9WaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTE2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9yLlZp
ZXcgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50Ll9fdmlldyA9IHRoaXM7Ci0gICAgdGhpcy5f
dmlzaWJsZSA9IHRydWU7Ci0gICAgdGhpcy5faXNSb290ID0gZmFsc2U7Ci0gICAgdGhpcy5faXNT
aG93aW5nID0gZmFsc2U7Ci0gICAgdGhpcy5fY2hpbGRyZW4gPSBbXTsKLSAgICB0aGlzLl9oaWRl
T25EZXRhY2ggPSBmYWxzZTsKLSAgICB0aGlzLl9jc3NGaWxlcyA9IFtdOwotICAgIHRoaXMuX25v
dGlmaWNhdGlvbkRlcHRoID0gMDsKLX0KLQotV2ViSW5zcGVjdG9yLlZpZXcuX2Nzc0ZpbGVUb1Zp
c2libGVWaWV3Q291bnQgPSB7fTsKLVdlYkluc3BlY3Rvci5WaWV3Ll9jc3NGaWxlVG9TdHlsZUVs
ZW1lbnQgPSB7fTsKLQotV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlID0gewotICAgICAvKioK
LSAgICAgICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQotICAgICAgKi8KLSAgICAgc3RhdHVz
QmFySXRlbXM6IGZ1bmN0aW9uKCkKLSAgICAgewotICAgICAgICAgcmV0dXJuIFtdOwotICAgICB9
LAotCi0gICAgIC8qKgotICAgICAqIEByZXR1cm4gez9FbGVtZW50fQotICAgICAqLwotICAgIHN0
YXR1c0JhclRleHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAg
IH0sCi0KLSAgICBtYXJrQXNSb290OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNw
ZWN0b3IuVmlldy5fYXNzZXJ0KCF0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudCwgIkF0dGVtcHQg
dG8gbWFyayBhcyByb290IGF0dGFjaGVkIG5vZGUiKTsKLSAgICAgICAgdGhpcy5faXNSb290ID0g
dHJ1ZTsKLSAgICB9LAotCi0gICAgbWFya0FzTGF5b3V0Qm91bmRhcnk6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJsYXlvdXQtYm91bmRhcnki
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5WaWV3
fQotICAgICAqLwotICAgIHBhcmVudFZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9wYXJlbnRWaWV3OwotICAgIH0sCi0KLSAgICBpc1Nob3dpbmc6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pc1Nob3dpbmc7Ci0gICAgfSwKLQotICAg
IHNldEhpZGVPbkRldGFjaDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faGlkZU9u
RGV0YWNoID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVh
bn0gCi0gICAgICovCi0gICAgX2luTm90aWZpY2F0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gISF0aGlzLl9ub3RpZmljYXRpb25EZXB0aCB8fCAodGhpcy5fcGFyZW50Vmll
dyAmJiB0aGlzLl9wYXJlbnRWaWV3Ll9pbk5vdGlmaWNhdGlvbigpKTsKLSAgICB9LAotCi0gICAg
X3BhcmVudElzU2hvd2luZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lz
Um9vdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdGhpcy5fcGFy
ZW50VmlldyAmJiB0aGlzLl9wYXJlbnRWaWV3LmlzU2hvd2luZygpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHRoaXM6V2ViSW5zcGVjdG9yLlZpZXcpfSBtZXRo
b2QKLSAgICAgKi8KLSAgICBfY2FsbE9uVmlzaWJsZUNoaWxkcmVuOiBmdW5jdGlvbihtZXRob2Qp
Ci0gICAgewotICAgICAgICB2YXIgY29weSA9IHRoaXMuX2NoaWxkcmVuLnNsaWNlKCk7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29weS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
aWYgKGNvcHlbaV0uX3BhcmVudFZpZXcgPT09IHRoaXMgJiYgY29weVtpXS5fdmlzaWJsZSkKLSAg
ICAgICAgICAgICAgICBtZXRob2QuY2FsbChjb3B5W2ldKTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICBfcHJvY2Vzc1dpbGxTaG93OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9s
b2FkQ1NTSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5oYXNTdHlsZUNsYXNz
KCJsYXlvdXQtYm91bmRhcnkiKSkKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5yZW1v
dmVQcm9wZXJ0eSgiaGVpZ2h0Iik7Ci0gICAgICAgIHRoaXMuX2NhbGxPblZpc2libGVDaGlsZHJl
bih0aGlzLl9wcm9jZXNzV2lsbFNob3cpOwotICAgIH0sCi0KLSAgICBfcHJvY2Vzc1dhc1Nob3du
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5faW5Ob3RpZmljYXRpb24oKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5faXNTaG93aW5nID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5yZXN0b3JlU2Nyb2xsUG9zaXRpb25zKCk7Ci0gICAgICAgIHRoaXMuX25vdGlm
eSh0aGlzLndhc1Nob3duKTsKLSAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMub25SZXNpemUpOwot
ICAgICAgICB0aGlzLl9jYWxsT25WaXNpYmxlQ2hpbGRyZW4odGhpcy5fcHJvY2Vzc1dhc1Nob3du
KTsKLSAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5oYXNTdHlsZUNsYXNzKCJsYXlvdXQtYm91bmRh
cnkiKSkKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmVsZW1l
bnQub2Zmc2V0SGVpZ2h0ICsgInB4IjsKLSAgICB9LAotCi0gICAgX3Byb2Nlc3NXaWxsSGlkZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2luTm90aWZpY2F0aW9uKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuc3RvcmVTY3JvbGxQb3NpdGlvbnMoKTsK
LQotICAgICAgICB0aGlzLl9jYWxsT25WaXNpYmxlQ2hpbGRyZW4odGhpcy5fcHJvY2Vzc1dpbGxI
aWRlKTsKLSAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMud2lsbEhpZGUpOwotICAgICAgICB0aGlz
Ll9pc1Nob3dpbmcgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgX3Byb2Nlc3NXYXNIaWRkZW46IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Rpc2FibGVDU1NJZk5lZWRlZCgpOwotICAg
ICAgICB0aGlzLl9jYWxsT25WaXNpYmxlQ2hpbGRyZW4odGhpcy5fcHJvY2Vzc1dhc0hpZGRlbik7
Ci0gICAgfSwKLQotICAgIF9wcm9jZXNzT25SZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9pbk5vdGlmaWNhdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoIXRoaXMuaXNTaG93aW5nKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmICh0aGlzLmVsZW1lbnQuaGFzU3R5bGVDbGFzcygibGF5b3V0LWJvdW5kYXJ5IikpCi0gICAg
ICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoImhlaWdodCIpOwotICAg
ICAgICB0aGlzLl9ub3RpZnkodGhpcy5vblJlc2l6ZSk7Ci0gICAgICAgIHRoaXMuX2NhbGxPblZp
c2libGVDaGlsZHJlbih0aGlzLl9wcm9jZXNzT25SZXNpemUpOwotICAgICAgICBpZiAodGhpcy5l
bGVtZW50Lmhhc1N0eWxlQ2xhc3MoImxheW91dC1ib3VuZGFyeSIpKQotICAgICAgICAgICAgdGhp
cy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgKyAicHgi
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHRoaXM6V2ViSW5z
cGVjdG9yLlZpZXcpfSBub3RpZmljYXRpb24KLSAgICAgKi8KLSAgICBfbm90aWZ5OiBmdW5jdGlv
bihub3RpZmljYXRpb24pCi0gICAgewotICAgICAgICArK3RoaXMuX25vdGlmaWNhdGlvbkRlcHRo
OwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbm90aWZpY2F0aW9uLmNhbGwodGhpcyk7Ci0g
ICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAtLXRoaXMuX25vdGlmaWNhdGlvbkRlcHRo
OwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0gICAgewot
ICAgIH0sCi0KLSAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICB9LAotCi0gICAg
b25SZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7RWxlbWVudH0gcGFyZW50RWxlbWVudAotICAgICAqIEBwYXJhbSB7RWxlbWVudD19IGlu
c2VydEJlZm9yZQotICAgICAqLwotICAgIHNob3c6IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQsIGlu
c2VydEJlZm9yZSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5WaWV3Ll9hc3NlcnQocGFy
ZW50RWxlbWVudCwgIkF0dGVtcHQgdG8gYXR0YWNoIHZpZXcgd2l0aCBubyBwYXJlbnQgZWxlbWVu
dCIpOwotCi0gICAgICAgIC8vIFVwZGF0ZSB2aWV3IGhpZXJhcmNoeQotICAgICAgICBpZiAodGhp
cy5lbGVtZW50LnBhcmVudEVsZW1lbnQgIT09IHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgICAg
IGlmICh0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudCkKLSAgICAgICAgICAgICAgICB0aGlzLmRl
dGFjaCgpOwotCi0gICAgICAgICAgICB2YXIgY3VycmVudFBhcmVudCA9IHBhcmVudEVsZW1lbnQ7
Ci0gICAgICAgICAgICB3aGlsZSAoY3VycmVudFBhcmVudCAmJiAhY3VycmVudFBhcmVudC5fX3Zp
ZXcpCi0gICAgICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRQYXJlbnQucGFyZW50
RWxlbWVudDsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9wYXJlbnRWaWV3ID0gY3VycmVudFBhcmVudC5fX3ZpZXc7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fcGFyZW50Vmlldy5fY2hpbGRyZW4ucHVzaCh0aGlzKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9pc1Jvb3QgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5WaWV3Ll9hc3NlcnQodGhpcy5faXNSb290LCAiQXR0ZW1wdCB0
byBhdHRhY2ggdmlldyB0byBvcnBoYW4gbm9kZSIpOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMu
X3Zpc2libGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fdmlzaWJsZSA9
IHRydWU7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3BhcmVudElzU2hvd2luZygpKQotICAgICAgICAg
ICAgdGhpcy5fcHJvY2Vzc1dpbGxTaG93KCk7Ci0KLSAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0
eWxlQ2xhc3MoInZpc2libGUiKTsKLQotICAgICAgICAvLyBSZXBhcmVudAotICAgICAgICBpZiAo
dGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQgIT09IHBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5WaWV3Ll9pbmNyZW1lbnRWaWV3Q291bnRlcihwYXJlbnRFbGVtZW50
LCB0aGlzLmVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZSkKLSAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5fb3JpZ2luYWxJbnNlcnRCZWZvcmUuY2FsbChwYXJl
bnRFbGVtZW50LCB0aGlzLmVsZW1lbnQsIGluc2VydEJlZm9yZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcuX29yaWdpbmFsQXBwZW5kQ2hpbGQu
Y2FsbChwYXJlbnRFbGVtZW50LCB0aGlzLmVsZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHRoaXMuX3BhcmVudElzU2hvd2luZygpKQotICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1dh
c1Nob3duKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IG92
ZXJyaWRlSGlkZU9uRGV0YWNoCi0gICAgICovCi0gICAgZGV0YWNoOiBmdW5jdGlvbihvdmVycmlk
ZUhpZGVPbkRldGFjaCkKLSAgICB7Ci0gICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5l
bGVtZW50LnBhcmVudEVsZW1lbnQ7Ci0gICAgICAgIGlmICghcGFyZW50RWxlbWVudCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGhpcy5fcGFyZW50SXNTaG93aW5nKCkpCi0g
ICAgICAgICAgICB0aGlzLl9wcm9jZXNzV2lsbEhpZGUoKTsKLQotICAgICAgICBpZiAodGhpcy5f
aGlkZU9uRGV0YWNoICYmICFvdmVycmlkZUhpZGVPbkRldGFjaCkgewotICAgICAgICAgICAgdGhp
cy5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInZpc2libGUiKTsKLSAgICAgICAgICAgIHRoaXMu
X3Zpc2libGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnRJc1Nob3dpbmco
KSkKLSAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzV2FzSGlkZGVuKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3JjZSBsZWdhbCByZW1vdmFsCi0g
ICAgICAgIFdlYkluc3BlY3Rvci5WaWV3Ll9kZWNyZW1lbnRWaWV3Q291bnRlcihwYXJlbnRFbGVt
ZW50LCB0aGlzLmVsZW1lbnQpOwotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5fb3JpZ2luYWxS
ZW1vdmVDaGlsZC5jYWxsKHBhcmVudEVsZW1lbnQsIHRoaXMuZWxlbWVudCk7Ci0KLSAgICAgICAg
dGhpcy5fdmlzaWJsZSA9IGZhbHNlOwotICAgICAgICBpZiAodGhpcy5fcGFyZW50SXNTaG93aW5n
KCkpCi0gICAgICAgICAgICB0aGlzLl9wcm9jZXNzV2FzSGlkZGVuKCk7Ci0KLSAgICAgICAgLy8g
VXBkYXRlIHZpZXcgaGllcmFyY2h5Ci0gICAgICAgIGlmICh0aGlzLl9wYXJlbnRWaWV3KSB7Ci0g
ICAgICAgICAgICB2YXIgY2hpbGRJbmRleCA9IHRoaXMuX3BhcmVudFZpZXcuX2NoaWxkcmVuLmlu
ZGV4T2YodGhpcyk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5fYXNzZXJ0KGNoaWxk
SW5kZXggPj0gMCwgIkF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1jaGlsZCB2aWV3Iik7Ci0gICAgICAg
ICAgICB0aGlzLl9wYXJlbnRWaWV3Ll9jaGlsZHJlbi5zcGxpY2UoY2hpbGRJbmRleCwgMSk7Ci0g
ICAgICAgICAgICB0aGlzLl9wYXJlbnRWaWV3ID0gbnVsbDsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5fYXNzZXJ0KHRoaXMuX2lzUm9vdCwgIlJlbW92aW5n
IG5vbi1yb290IHZpZXcgZnJvbSBET00iKTsKLSAgICB9LAotCi0gICAgZGV0YWNoQ2hpbGRWaWV3
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRy
ZW4uc2xpY2UoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIGNoaWxkcmVuW2ldLmRldGFjaCgpOwotICAgIH0sCi0KLSAgICBl
bGVtZW50c1RvUmVzdG9yZVNjcm9sbFBvc2l0aW9uc0ZvcjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFt0aGlzLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICBzdG9yZVNjcm9sbFBv
c2l0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5l
bGVtZW50c1RvUmVzdG9yZVNjcm9sbFBvc2l0aW9uc0ZvcigpOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY29udGFp
bmVyID0gZWxlbWVudHNbaV07Ci0gICAgICAgICAgICBjb250YWluZXIuX3Njcm9sbFRvcCA9IGNv
bnRhaW5lci5zY3JvbGxUb3A7Ci0gICAgICAgICAgICBjb250YWluZXIuX3Njcm9sbExlZnQgPSBj
b250YWluZXIuc2Nyb2xsTGVmdDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZXN0b3JlU2Ny
b2xsUG9zaXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudHMgPSB0
aGlzLmVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yKCk7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSBlbGVtZW50c1tpXTsKLSAgICAgICAgICAgIGlmIChjb250YWluZXIuX3Njcm9s
bFRvcCkKLSAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gY29udGFpbmVyLl9z
Y3JvbGxUb3A7Ci0gICAgICAgICAgICBpZiAoY29udGFpbmVyLl9zY3JvbGxMZWZ0KQotICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gY29udGFpbmVyLl9zY3JvbGxMZWZ0Owot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIGNhbkhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgaGlnaGxpZ2h0TGluZTog
ZnVuY3Rpb24obGluZSkKLSAgICB7Ci0gICAgfSwKLQotICAgIGRvUmVzaXplOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl9wcm9jZXNzT25SZXNpemUoKTsKLSAgICB9LAotCi0gICAg
cmVnaXN0ZXJSZXF1aXJlZENTUzogZnVuY3Rpb24oY3NzRmlsZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh3aW5kb3cuZmxhdHRlbkltcG9ydHMpCi0gICAgICAgICAgICBjc3NGaWxlID0gY3NzRmlsZS5z
cGxpdCgiLyIpLnJldmVyc2UoKVswXTsKLSAgICAgICAgdGhpcy5fY3NzRmlsZXMucHVzaChjc3NG
aWxlKTsKLSAgICB9LAotCi0gICAgX2xvYWRDU1NJZk5lZWRlZDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jc3NGaWxlcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgdmFyIGNzc0ZpbGUgPSB0aGlzLl9jc3NGaWxlc1tpXTsKLQotICAgICAg
ICAgICAgdmFyIHZpZXdzV2l0aENTU0ZpbGUgPSBXZWJJbnNwZWN0b3IuVmlldy5fY3NzRmlsZVRv
VmlzaWJsZVZpZXdDb3VudFtjc3NGaWxlXTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5WaWV3
Ll9jc3NGaWxlVG9WaXNpYmxlVmlld0NvdW50W2Nzc0ZpbGVdID0gKHZpZXdzV2l0aENTU0ZpbGUg
fHwgMCkgKyAxOwotICAgICAgICAgICAgaWYgKCF2aWV3c1dpdGhDU1NGaWxlKQotICAgICAgICAg
ICAgICAgIHRoaXMuX2RvTG9hZENTUyhjc3NGaWxlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfZG9Mb2FkQ1NTOiBmdW5jdGlvbihjc3NGaWxlKQotICAgIHsKLSAgICAgICAgdmFyIHN0eWxl
RWxlbWVudCA9IFdlYkluc3BlY3Rvci5WaWV3Ll9jc3NGaWxlVG9TdHlsZUVsZW1lbnRbY3NzRmls
ZV07Ci0gICAgICAgIGlmIChzdHlsZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIHN0eWxlRWxlbWVu
dC5kaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHdpbmRvdy5kZWJ1Z0NTUykgeyAvKiBkZWJ1Z2dpbmcgc3VwcG9ydCAqLwotICAg
ICAgICAgICAgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwot
ICAgICAgICAgICAgc3R5bGVFbGVtZW50LnJlbCA9ICJzdHlsZXNoZWV0IjsKLSAgICAgICAgICAg
IHN0eWxlRWxlbWVudC50eXBlID0gInRleHQvY3NzIjsKLSAgICAgICAgICAgIHN0eWxlRWxlbWVu
dC5ocmVmID0gY3NzRmlsZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICAgICAgICAgIHhoci5vcGVuKCJHRVQiLCBjc3NG
aWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICB4aHIuc2VuZChudWxsKTsKLQotICAgICAgICAgICAg
c3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKLSAgICAgICAg
ICAgIHN0eWxlRWxlbWVudC50eXBlID0gInRleHQvY3NzIjsKLSAgICAgICAgICAgIHN0eWxlRWxl
bWVudC50ZXh0Q29udGVudCA9IHhoci5yZXNwb25zZVRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAg
ZG9jdW1lbnQuaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtZW50LCBkb2N1bWVudC5oZWFkLmZp
cnN0Q2hpbGQpOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5WaWV3Ll9jc3NGaWxlVG9TdHlsZUVs
ZW1lbnRbY3NzRmlsZV0gPSBzdHlsZUVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9kaXNhYmxlQ1NT
SWZOZWVkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5fY3NzRmlsZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBjc3NGaWxlID0g
dGhpcy5fY3NzRmlsZXNbaV07Ci0KLSAgICAgICAgICAgIHZhciB2aWV3c1dpdGhDU1NGaWxlID0g
V2ViSW5zcGVjdG9yLlZpZXcuX2Nzc0ZpbGVUb1Zpc2libGVWaWV3Q291bnRbY3NzRmlsZV07Ci0g
ICAgICAgICAgICB2aWV3c1dpdGhDU1NGaWxlLS07Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
Vmlldy5fY3NzRmlsZVRvVmlzaWJsZVZpZXdDb3VudFtjc3NGaWxlXSA9IHZpZXdzV2l0aENTU0Zp
bGU7Ci0KLSAgICAgICAgICAgIGlmICghdmlld3NXaXRoQ1NTRmlsZSkKLSAgICAgICAgICAgICAg
ICB0aGlzLl9kb1VubG9hZENTUyhjc3NGaWxlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBf
ZG9VbmxvYWRDU1M6IGZ1bmN0aW9uKGNzc0ZpbGUpCi0gICAgewotICAgICAgICB2YXIgc3R5bGVF
bGVtZW50ID0gV2ViSW5zcGVjdG9yLlZpZXcuX2Nzc0ZpbGVUb1N0eWxlRWxlbWVudFtjc3NGaWxl
XTsKLSAgICAgICAgc3R5bGVFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLSAgICB9LAotCi0gICAg
cHJpbnRWaWV3SGllcmFyY2h5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbGluZXMg
PSBbXTsKLSAgICAgICAgdGhpcy5fY29sbGVjdFZpZXdIaWVyYXJjaHkoIiIsIGxpbmVzKTsKLSAg
ICAgICAgY29uc29sZS5sb2cobGluZXMuam9pbigiXG4iKSk7Ci0gICAgfSwKLQotICAgIF9jb2xs
ZWN0Vmlld0hpZXJhcmNoeTogZnVuY3Rpb24ocHJlZml4LCBsaW5lcykKLSAgICB7Ci0gICAgICAg
IGxpbmVzLnB1c2gocHJlZml4ICsgIlsiICsgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSArICJdIiAr
ICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggPyAiIHsiIDogIiIpKTsKLQotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuX2NoaWxkcmVuLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhp
cy5fY2hpbGRyZW5baV0uX2NvbGxlY3RWaWV3SGllcmFyY2h5KHByZWZpeCArICIgICAgIiwgbGlu
ZXMpOwotCi0gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGgpCi0gICAgICAgICAgICBs
aW5lcy5wdXNoKHByZWZpeCArICJ9Iik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgZGVmYXVsdEZvY3VzZWRFbGVtZW50OiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEZvY3VzZWRFbGVtZW50IHx8
IHRoaXMuZWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50
fSBlbGVtZW50Ci0gICAgICovCi0gICAgc2V0RGVmYXVsdEZvY3VzZWRFbGVtZW50OiBmdW5jdGlv
bihlbGVtZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVmYXVsdEZvY3VzZWRFbGVtZW50ID0g
ZWxlbWVudDsKLSAgICB9LAotCi0gICAgZm9jdXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHZhciBlbGVtZW50ID0gdGhpcy5kZWZhdWx0Rm9jdXNlZEVsZW1lbnQoKTsKLSAgICAgICAgaWYg
KCFlbGVtZW50IHx8IGVsZW1lbnQuaXNBbmNlc3Rvcihkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0Q3VycmVudEZv
Y3VzRWxlbWVudChlbGVtZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
U2l6ZX0KLSAgICAgKi8KLSAgICBtZWFzdXJlUHJlZmVycmVkU2l6ZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fbG9hZENTU0lmTmVlZGVkKCk7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5WaWV3Ll9vcmlnaW5hbEFwcGVuZENoaWxkLmNhbGwoZG9jdW1lbnQuYm9keSwgdGhpcy5lbGVt
ZW50KTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnBvc2l0aW9uQXQoMCwgMCk7Ci0gICAgICAgIHZh
ciByZXN1bHQgPSBuZXcgU2l6ZSh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGgsIHRoaXMuZWxlbWVu
dC5vZmZzZXRIZWlnaHQpOwotICAgICAgICB0aGlzLmVsZW1lbnQucG9zaXRpb25BdCh1bmRlZmlu
ZWQsIHVuZGVmaW5lZCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5WaWV3Ll9vcmlnaW5hbFJlbW92
ZUNoaWxkLmNhbGwoZG9jdW1lbnQuYm9keSwgdGhpcy5lbGVtZW50KTsKLSAgICAgICAgdGhpcy5f
ZGlzYWJsZUNTU0lmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQot
ICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotV2ViSW5z
cGVjdG9yLlZpZXcuX29yaWdpbmFsQXBwZW5kQ2hpbGQgPSBFbGVtZW50LnByb3RvdHlwZS5hcHBl
bmRDaGlsZDsKLVdlYkluc3BlY3Rvci5WaWV3Ll9vcmlnaW5hbEluc2VydEJlZm9yZSA9IEVsZW1l
bnQucHJvdG90eXBlLmluc2VydEJlZm9yZTsKLVdlYkluc3BlY3Rvci5WaWV3Ll9vcmlnaW5hbFJl
bW92ZUNoaWxkID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7Ci1XZWJJbnNwZWN0b3Iu
Vmlldy5fb3JpZ2luYWxSZW1vdmVDaGlsZHJlbiA9IEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNo
aWxkcmVuOwotCi1XZWJJbnNwZWN0b3IuVmlldy5faW5jcmVtZW50Vmlld0NvdW50ZXIgPSBmdW5j
dGlvbihwYXJlbnRFbGVtZW50LCBjaGlsZEVsZW1lbnQpCi17Ci0gICAgdmFyIGNvdW50ID0gKGNo
aWxkRWxlbWVudC5fX3ZpZXdDb3VudGVyIHx8IDApICsgKGNoaWxkRWxlbWVudC5fX3ZpZXcgPyAx
IDogMCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKHBh
cmVudEVsZW1lbnQpIHsKLSAgICAgICAgcGFyZW50RWxlbWVudC5fX3ZpZXdDb3VudGVyID0gKHBh
cmVudEVsZW1lbnQuX192aWV3Q291bnRlciB8fCAwKSArIGNvdW50OwotICAgICAgICBwYXJlbnRF
bGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgIH0KLX0KLQotV2ViSW5z
cGVjdG9yLlZpZXcuX2RlY3JlbWVudFZpZXdDb3VudGVyID0gZnVuY3Rpb24ocGFyZW50RWxlbWVu
dCwgY2hpbGRFbGVtZW50KQotewotICAgIHZhciBjb3VudCA9IChjaGlsZEVsZW1lbnQuX192aWV3
Q291bnRlciB8fCAwKSArIChjaGlsZEVsZW1lbnQuX192aWV3ID8gMSA6IDApOwotICAgIGlmICgh
Y291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7Ci0g
ICAgICAgIHBhcmVudEVsZW1lbnQuX192aWV3Q291bnRlciAtPSBjb3VudDsKLSAgICAgICAgcGFy
ZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDsKLSAgICB9Ci19Ci0KLVdl
Ykluc3BlY3Rvci5WaWV3Ll9hc3NlcnQgPSBmdW5jdGlvbihjb25kaXRpb24sIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgICAgY29uc29sZS50cmFjZSgpOwotICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Ci0gICAgfQotfQotCi1FbGVtZW50LnByb3RvdHlw
ZS5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3
Ll9hc3NlcnQoIWNoaWxkLl9fdmlldywgIkF0dGVtcHQgdG8gYWRkIHZpZXcgdmlhIHJlZ3VsYXIg
RE9NIG9wZXJhdGlvbi4iKTsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlZpZXcuX29yaWdpbmFs
QXBwZW5kQ2hpbGQuY2FsbCh0aGlzLCBjaGlsZCk7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLmlu
c2VydEJlZm9yZSA9IGZ1bmN0aW9uKGNoaWxkLCBhbmNob3IpCi17Ci0gICAgV2ViSW5zcGVjdG9y
LlZpZXcuX2Fzc2VydCghY2hpbGQuX192aWV3LCAiQXR0ZW1wdCB0byBhZGQgdmlldyB2aWEgcmVn
dWxhciBET00gb3BlcmF0aW9uLiIpOwotICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVmlldy5fb3Jp
Z2luYWxJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBjaGlsZCwgYW5jaG9yKTsKLX0KLQotCi1FbGVt
ZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKQotewotICAgIFdlYklu
c3BlY3Rvci5WaWV3Ll9hc3NlcnQoIWNoaWxkLl9fdmlld0NvdW50ZXIgJiYgIWNoaWxkLl9fdmll
dywgIkF0dGVtcHQgdG8gcmVtb3ZlIGVsZW1lbnQgY29udGFpbmluZyB2aWV3IHZpYSByZWd1bGFy
IERPTSBvcGVyYXRpb24iKTsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlZpZXcuX29yaWdpbmFs
UmVtb3ZlQ2hpbGQuY2FsbCh0aGlzLCBjaGlsZCk7Ci19Ci0KLUVsZW1lbnQucHJvdG90eXBlLnJl
bW92ZUNoaWxkcmVuID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3Ll9hc3Nl
cnQoIXRoaXMuX192aWV3Q291bnRlciwgIkF0dGVtcHQgdG8gcmVtb3ZlIGVsZW1lbnQgY29udGFp
bmluZyB2aWV3IHZpYSByZWd1bGFyIERPTSBvcGVyYXRpb24iKTsKLSAgICBXZWJJbnNwZWN0b3Iu
Vmlldy5fb3JpZ2luYWxSZW1vdmVDaGlsZHJlbi5jYWxsKHRoaXMpOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9WaWV3cG9ydENvbnRyb2wuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1ZpZXdwb3J0Q29udHJvbC5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2Y2I2NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1ZpZXdwb3J0Q29udHJvbC5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlZpZXdwb3J0Q29udHJvbC5Qcm92aWRlcn0gcHJvdmlkZXIKLSAqLwotV2ViSW5z
cGVjdG9yLlZpZXdwb3J0Q29udHJvbCA9IGZ1bmN0aW9uKHByb3ZpZGVyKQotewotICAgIHRoaXMu
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZWxlbWVu
dC5jbGFzc05hbWUgPSAiZmlsbCI7Ci0gICAgdGhpcy5lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0g
ImF1dG8iOwotICAgIHRoaXMuX3RvcEdhcEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hp
bGQoImRpdiIpOwotICAgIHRoaXMuX2NvbnRlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNyZWF0
ZUNoaWxkKCJkaXYiKTsKLSAgICB0aGlzLl9ib3R0b21HYXBFbGVtZW50ID0gdGhpcy5lbGVtZW50
LmNyZWF0ZUNoaWxkKCJkaXYiKTsKLQotICAgIHRoaXMuX3Byb3ZpZGVyID0gcHJvdmlkZXI7Ci0g
ICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX29uU2Nyb2xs
LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9maXJzdFZpc2libGVJbmRleCA9IDA7Ci0g
ICAgdGhpcy5fbGFzdFZpc2libGVJbmRleCA9IC0xOwotfQotCi0vKioKLSAqIEBpbnRlcmZhY2UK
LSAqLwotV2ViSW5zcGVjdG9yLlZpZXdwb3J0Q29udHJvbC5Qcm92aWRlciA9IGZ1bmN0aW9uKCkg
Ci17Ci19Ci0KLVdlYkluc3BlY3Rvci5WaWV3cG9ydENvbnRyb2wuUHJvdmlkZXIucHJvdG90eXBl
ID0geyAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgaXRl
bUNvdW50OiBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0gaW5kZXgKLSAgICAgKiBAcmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAg
IGl0ZW1FbGVtZW50OiBmdW5jdGlvbihpbmRleCkgeyByZXR1cm4gbnVsbDsgfQotfQotCi1XZWJJ
bnNwZWN0b3IuVmlld3BvcnRDb250cm9sLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cmV0dXJuIHtFbGVtZW50fQotICAgICAqLwotICAgIGNvbnRlbnRFbGVtZW50OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudEVsZW1lbnQ7Ci0gICAgfSwKLQot
ICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5lbGVtZW50
LmNsaWVudEhlaWdodCkKLSAgICAgICAgICAgIHJldHVybjsgIC8vIERvIG5vdGhpbmcgZm9yIGlu
dmlzaWJsZSBjb250cm9scy4KLQotICAgICAgICB2YXIgaXRlbUNvdW50ID0gdGhpcy5fcHJvdmlk
ZXIuaXRlbUNvdW50KCk7Ci0gICAgICAgIGlmICghaXRlbUNvdW50KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmICghdGhpcy5fcm93SGVpZ2h0KSB7Ci0gICAgICAgICAgICB2YXIg
Zmlyc3RFbGVtZW50ID0gdGhpcy5fcHJvdmlkZXIuaXRlbUVsZW1lbnQoMCk7Ci0gICAgICAgICAg
ICB0aGlzLl9yb3dIZWlnaHQgPSBmaXJzdEVsZW1lbnQubWVhc3VyZVByZWZlcnJlZFNpemUodGhp
cy5fY29udGVudEVsZW1lbnQpLmhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB2aXNp
YmxlRnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAgICAgIHZhciB2aXNpYmxlVG8g
PSB2aXNpYmxlRnJvbSArIHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQ7Ci0KLSAgICAgICAgdGhp
cy5fZmlyc3RWaXNpYmxlSW5kZXggPSBNYXRoLmZsb29yKHZpc2libGVGcm9tIC8gdGhpcy5fcm93
SGVpZ2h0KTsKLSAgICAgICAgdGhpcy5fbGFzdFZpc2libGVJbmRleCA9IE1hdGgubWluKE1hdGgu
Y2VpbCh2aXNpYmxlVG8gLyB0aGlzLl9yb3dIZWlnaHQpLCBpdGVtQ291bnQpIC0gMTsKLQotICAg
ICAgICB0aGlzLl90b3BHYXBFbGVtZW50LnN0eWxlLmhlaWdodCA9ICh0aGlzLl9yb3dIZWlnaHQg
KiB0aGlzLl9maXJzdFZpc2libGVJbmRleCkgKyAicHgiOwotICAgICAgICB0aGlzLl9ib3R0b21H
YXBFbGVtZW50LnN0eWxlLmhlaWdodCA9ICh0aGlzLl9yb3dIZWlnaHQgKiAoaXRlbUNvdW50IC0g
dGhpcy5fbGFzdFZpc2libGVJbmRleCAtIDEpKSArICJweCI7IAotCi0gICAgICAgIHRoaXMuX2Nv
bnRlbnRFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlz
Ll9maXJzdFZpc2libGVJbmRleDsgaSA8PSB0aGlzLl9sYXN0VmlzaWJsZUluZGV4OyArK2kpCi0g
ICAgICAgICAgICB0aGlzLl9jb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9wcm92aWRl
ci5pdGVtRWxlbWVudChpKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZl
bnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uU2Nyb2xsOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIHRoaXMucmVmcmVzaCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgcm93c1BlclZpZXdwb3J0OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0
IC8gdGhpcy5fcm93SGVpZ2h0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
bnVtYmVyfQotICAgICAqLwotICAgIGZpcnN0VmlzaWJsZUluZGV4OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBsYXN0VmlzaWJsZUlu
ZGV4OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFZpc2libGVJ
bmRleDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7P0VsZW1lbnR9Ci0gICAg
ICovCi0gICAgcmVuZGVyZWRFbGVtZW50QXQ6IGZ1bmN0aW9uKGluZGV4KQotICAgIHsKLSAgICAg
ICAgaWYgKGluZGV4IDwgdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgaWYgKGluZGV4ID4gdGhpcy5fbGFzdFZpc2libGVJbmRleCkKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudEVsZW1l
bnQuY2hpbGROb2Rlc1tpbmRleCAtIHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4XTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gICAgICogQHBhcmFtIHti
b29sZWFuPX0gbWFrZUxhc3QKLSAgICAgKi8KLSAgICBzY3JvbGxJdGVtSW50b1ZpZXc6IGZ1bmN0
aW9uKGluZGV4LCBtYWtlTGFzdCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+IHRoaXMuX2Zp
cnN0VmlzaWJsZUluZGV4ICYmIGluZGV4IDwgdGhpcy5fbGFzdFZpc2libGVJbmRleCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobWFrZUxhc3QpCi0gICAgICAgICAgICB0aGlz
LmVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5fcm93SGVpZ2h0ICogKGluZGV4ICsgMSkgLSB0aGlz
LmVsZW1lbnQuY2xpZW50SGVpZ2h0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLmVs
ZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5fcm93SGVpZ2h0ICogaW5kZXg7Ci0gICAgfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4cHJlc3Np
b25zU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dh
dGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjE5NjE2My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ5
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwOSAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJ
Qk0gQ29ycC4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU2lk
ZWJhclBhbmV9Ci0gKi8KLVdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUg
PSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXYXRjaCBFeHByZXNzaW9ucyIpKTsKLQotICAgIHRoaXMu
c2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuV2F0Y2hFeHByZXNzaW9uc1NlY3Rpb24oKTsKLSAg
ICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VjdGlvbi5lbGVtZW50KTsKLQot
ICAgIHZhciByZWZyZXNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7
Ci0gICAgcmVmcmVzaEJ1dHRvbi5jbGFzc05hbWUgPSAicGFuZS10aXRsZS1idXR0b24gcmVmcmVz
aCI7Ci0gICAgcmVmcmVzaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3Jl
ZnJlc2hCdXR0b25DbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICByZWZyZXNoQnV0dG9u
LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZWZyZXNoIik7Ci0gICAgdGhpcy50aXRs
ZUVsZW1lbnQuYXBwZW5kQ2hpbGQocmVmcmVzaEJ1dHRvbik7Ci0KLSAgICB2YXIgYWRkQnV0dG9u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci0gICAgYWRkQnV0dG9uLmNsYXNz
TmFtZSA9ICJwYW5lLXRpdGxlLWJ1dHRvbiBhZGQiOwotICAgIGFkZEJ1dHRvbi5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIHRoaXMuX2FkZEJ1dHRvbkNsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2Up
OwotICAgIHRoaXMudGl0bGVFbGVtZW50LmFwcGVuZENoaWxkKGFkZEJ1dHRvbik7Ci0gICAgYWRk
QnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgd2F0Y2ggZXhwcmVzc2lv
biIpOwotCi0gICAgdGhpcy5fcmVxdWlyZXNVcGRhdGUgPSB0cnVlOwotfQotCi1XZWJJbnNwZWN0
b3IuV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKLSAgICB3YXNTaG93
bjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVmcmVzaEV4cHJlc3Npb25zSWZO
ZWVkZWQoKTsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMucmVmcmVzaEV4cHJlc3Npb25zKCk7Ci0gICAgfSwKLQotICAgIHJlZnJlc2hFeHByZXNz
aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVxdWlyZXNVcGRhdGUgPSB0
cnVlOwotICAgICAgICB0aGlzLl9yZWZyZXNoRXhwcmVzc2lvbnNJZk5lZWRlZCgpOwotICAgIH0s
Ci0KLSAgICBhZGRFeHByZXNzaW9uOiBmdW5jdGlvbihleHByZXNzaW9uKQotICAgIHsKLSAgICAg
ICAgdGhpcy5zZWN0aW9uLmFkZEV4cHJlc3Npb24oZXhwcmVzc2lvbik7Ci0gICAgICAgIHRoaXMu
ZXhwYW5kKCk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoRXhwcmVzc2lvbnNJZk5lZWRlZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzVXBkYXRlICYmIHRoaXMu
aXNTaG93aW5nKCkpIHsKLSAgICAgICAgICAgIHRoaXMuc2VjdGlvbi51cGRhdGUoKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9yZXF1aXJlc1VwZGF0ZTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICB0aGlzLl9yZXF1aXJlc1VwZGF0ZSA9IHRydWU7Ci0gICAgfSwKLQotICAgIF9hZGRC
dXR0b25DbGlja2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGV2ZW50LmNvbnN1
bWUoKTsKLSAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAgICAgICAgdGhpcy5zZWN0aW9uLmFkZE5l
d0V4cHJlc3Npb25BbmRFZGl0KCk7Ci0gICAgfSwKLQotICAgIF9yZWZyZXNoQnV0dG9uQ2xpY2tl
ZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5jb25zdW1lKCk7Ci0gICAg
ICAgIHRoaXMucmVmcmVzaEV4cHJlc3Npb25zKCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzog
V2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbn0K
LSAqLwotV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uID0gZnVuY3Rpb24oKQot
ewotICAgIHRoaXMuX3dhdGNoT2JqZWN0R3JvdXBJZCA9ICJ3YXRjaC1ncm91cCI7Ci0KLSAgICBX
ZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uY2FsbCh0aGlzLCBXZWJJbnNwZWN0
b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRpdmVWYWx1ZSgiIikpOwotCi0gICAgdGhpcy50cmVl
RWxlbWVudENvbnN0cnVjdG9yID0gV2ViSW5zcGVjdG9yLldhdGNoZWRQcm9wZXJ0eVRyZWVFbGVt
ZW50OwotICAgIHRoaXMuX2V4cGFuZGVkRXhwcmVzc2lvbnMgPSB7fTsKLSAgICB0aGlzLl9leHBh
bmRlZFByb3BlcnRpZXMgPSB7fTsKLQotICAgIHRoaXMuZW1wdHlFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbXB0eUVsZW1lbnQuY2xhc3NOYW1lID0g
ImluZm8iOwotICAgIHRoaXMuZW1wdHlFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJObyBXYXRjaCBFeHByZXNzaW9ucyIpOwotCi0gICAgdGhpcy53YXRjaEV4cHJl
c3Npb25zID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLndhdGNoRXhwcmVzc2lvbnMuZ2V0KCk7Ci0K
LSAgICB0aGlzLmhlYWRlckVsZW1lbnQuY2xhc3NOYW1lID0gImhpZGRlbiI7Ci0gICAgdGhpcy5l
ZGl0YWJsZSA9IHRydWU7Ci0gICAgdGhpcy5leHBhbmRlZCA9IHRydWU7Ci0gICAgdGhpcy5wcm9w
ZXJ0aWVzRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ3YXRjaC1leHByZXNzaW9ucyIpOwotCi0gICAg
dGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuX21vdXNlTW92
ZS5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
bW91c2VvdXQiLCB0aGlzLl9tb3VzZU91dC5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0aGlzLmVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLl9zZWN0aW9uRG91YmxlQ2xp
Y2suYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZW1wdHlFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5fZW1wdHlFbGVtZW50Q29udGV4dE1lbnUuYmluZCh0
aGlzKSwgZmFsc2UpOwotfQotCi1XZWJJbnNwZWN0b3IuV2F0Y2hFeHByZXNzaW9uc1NlY3Rpb24u
TmV3V2F0Y2hFeHByZXNzaW9uID0gIlx4QTAiOwotCi1XZWJJbnNwZWN0b3IuV2F0Y2hFeHByZXNz
aW9uc1NlY3Rpb24ucHJvdG90eXBlID0gewotICAgIHVwZGF0ZTogZnVuY3Rpb24oZSkKLSAgICB7
Ci0gICAgICAgIGlmIChlKQotICAgICAgICAgICAgZS5jb25zdW1lKCk7Ci0KLSAgICAgICAgZnVu
Y3Rpb24gYXBwZW5kUmVzdWx0KGV4cHJlc3Npb24sIHdhdGNoSW5kZXgsIHJlc3VsdCwgd2FzVGhy
b3duKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IG5ldyBXZWJJbnNwZWN0b3Iu
UmVtb3RlT2JqZWN0UHJvcGVydHkoZXhwcmVzc2lvbiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHBy
b3BlcnR5LndhdGNoSW5kZXggPSB3YXRjaEluZGV4OwotICAgICAgICAgICAgcHJvcGVydHkud2Fz
VGhyb3duID0gd2FzVGhyb3duOwotCi0gICAgICAgICAgICAvLyBUbyBjbGFyaWZ5IHdoYXQncyBn
b2luZyBvbiBoZXJlOgotICAgICAgICAgICAgLy8gSW4gdGhlIG91dGVyIGZ1bmN0aW9uLCB3ZSBj
YWxjdWxhdGUgdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAvLyB0aGF0IHdl
J3JlIGdvaW5nIHRvIGJlIHVwZGF0aW5nLCBhbmQgc2V0IHRoYXQgaW4gdGhlCi0gICAgICAgICAg
ICAvLyBwcm9wZXJ0eUNvdW50IHZhcmlhYmxlLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBmdW5j
dGlvbiwgd2UgdGVzdCB0byBzZWUgd2hlbiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUKLSAgICAgICAg
ICAgIC8vIGxhc3QgcHJvcGVydHksIGFuZCB0aGVuIGNhbGwgdGhlIHN1cGVyY2xhc3MncyB1cGRh
dGVQcm9wZXJ0aWVzKCkKLSAgICAgICAgICAgIC8vIG1ldGhvZCB0byBnZXQgYWxsIHRoZSBwcm9w
ZXJ0aWVzIHJlZnJlc2hlZCBhdCBvbmNlLgotICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHBy
b3BlcnR5KTsKLQotICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09IHByb3BlcnR5
Q291bnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByb3BlcnRpZXMocHJvcGVydGll
cywgW10sIFdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Npb25UcmVlRWxlbWVudCwgV2ViSW5zcGVj
dG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLkNvbXBhcmVQcm9wZXJ0aWVzKTsKLQotICAgICAg
ICAgICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB3ZSBqdXN0IGFkZGVkIGEgbmV3IHdhdGNoIGV4
cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBhbHdheXMgYmUgdGhlIGxh
c3QgcHJvcGVydHkKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmV3RXhwcmVzc2lvbkFkZGVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9uZXdFeHByZXNzaW9uQWRkZWQ7
Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5maW5kQWRkZWRU
cmVlRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5zdGFydEVkaXRpbmcoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGb3JjZSBkaXNwbGF5aW5nIGRlbGV0ZSBi
dXR0b24gZm9yIGhvdmVyZWQgZWxlbWVudC4KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGFz
dE1vdXNlTW92ZVBhZ2VZKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIb3ZlcmVk
RWxlbWVudCh0aGlzLl9sYXN0TW91c2VNb3ZlUGFnZVkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVE9ETzogcGFzcyBleGFjdCBpbmplY3RlZCBzY3JpcHQgaWQuCi0g
ICAgICAgIFJ1bnRpbWVBZ2VudC5yZWxlYXNlT2JqZWN0R3JvdXAodGhpcy5fd2F0Y2hPYmplY3RH
cm91cElkKQotICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOwotCi0gICAgICAgIC8vIENvdW50
IHRoZSBwcm9wZXJ0aWVzLCBzbyB3ZSBrbm93biB3aGVuIHRvIGNhbGwgdGhpcy51cGRhdGVQcm9w
ZXJ0aWVzKCkKLSAgICAgICAgLy8gaW4gYXBwZW5kUmVzdWx0KCkKLSAgICAgICAgdmFyIHByb3Bl
cnR5Q291bnQgPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMud2F0Y2hFeHBy
ZXNzaW9ucy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCF0aGlzLndhdGNoRXhwcmVz
c2lvbnNbaV0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICArK3Byb3Bl
cnR5Q291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgcHJvY2VzcyBhbGwgdGhlIGV4
cHJlc3Npb25zLCBzaW5jZSB3ZSBoYXZlIHRoZSBhY3R1YWwgY291bnQsCi0gICAgICAgIC8vIHdo
aWNoIGlzIGNoZWNrZWQgaW4gdGhlIGFwcGVuZFJlc3VsdCBpbm5lciBmdW5jdGlvbi4KLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndhdGNoRXhwcmVzc2lvbnMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy53YXRjaEV4cHJlc3Npb25zW2ld
OwotICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVsLmV2YWx1YXRlKGV4cHJl
c3Npb24sIHRoaXMuX3dhdGNoT2JqZWN0R3JvdXBJZCwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxz
ZSwgYXBwZW5kUmVzdWx0LmJpbmQodGhpcywgZXhwcmVzc2lvbiwgaSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFwcm9wZXJ0eUNvdW50KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuZW1w
dHlFbGVtZW50LnBhcmVudE5vZGUpCi0gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuZW1wdHlFbGVtZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmICh0aGlzLmVtcHR5RWxlbWVudC5wYXJlbnROb2RlKQotICAgICAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBub3RlIHRoaXMgaXMgc2V0dGluZyB0aGUgZXhwYW5zaW9uIG9mIHRoZSB0cmVlLCBu
b3QgdGhlIHNlY3Rpb247Ci0gICAgICAgIC8vIHdpdGggbm8gZXhwcmVzc2lvbnMsIGFuZCBleHBh
bmRlZCB0cmVlLCB3ZSBnZXQgc29tZSBleHRyYSB2ZXJ0aWNhbAotICAgICAgICAvLyB3aGl0ZSBz
cGFjZQotICAgICAgICB0aGlzLmV4cGFuZGVkID0gKHByb3BlcnR5Q291bnQgIT0gMCk7Ci0gICAg
fSwKLQotICAgIGFkZEV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb24pCi0gICAgewotICAg
ICAgICB0aGlzLndhdGNoRXhwcmVzc2lvbnMucHVzaChleHByZXNzaW9uKTsKLSAgICAgICAgdGhp
cy5zYXZlRXhwcmVzc2lvbnMoKTsKLSAgICAgICAgdGhpcy51cGRhdGUoKTsKLSAgICB9LAotCi0g
ICAgYWRkTmV3RXhwcmVzc2lvbkFuZEVkaXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX25ld0V4cHJlc3Npb25BZGRlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMud2F0Y2hFeHByZXNz
aW9ucy5wdXNoKFdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Npb25zU2VjdGlvbi5OZXdXYXRjaEV4
cHJlc3Npb24pOwotICAgICAgICB0aGlzLnVwZGF0ZSgpOwotICAgIH0sCi0KLSAgICBfc2VjdGlv
bkRvdWJsZUNsaWNrOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudC50
YXJnZXQgIT09IHRoaXMuZWxlbWVudCAmJiBldmVudC50YXJnZXQgIT09IHRoaXMucHJvcGVydGll
c0VsZW1lbnQgJiYgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmVtcHR5RWxlbWVudCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZXZlbnQuY29uc3VtZSgpOwotICAgICAgICB0aGlzLmFkZE5l
d0V4cHJlc3Npb25BbmRFZGl0KCk7Ci0gICAgfSwKLQotICAgIHVwZGF0ZUV4cHJlc3Npb246IGZ1
bmN0aW9uKGVsZW1lbnQsIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlID09PSBudWxs
KSB7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSBlbGVtZW50LnByb3BlcnR5LndhdGNoSW5kZXg7
Ci0gICAgICAgICAgICB0aGlzLndhdGNoRXhwcmVzc2lvbnMuc3BsaWNlKGluZGV4LCAxKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLndhdGNoRXhwcmVzc2lvbnNb
ZWxlbWVudC5wcm9wZXJ0eS53YXRjaEluZGV4XSA9IHZhbHVlOwotICAgICAgICB0aGlzLnNhdmVF
eHByZXNzaW9ucygpOwotICAgICAgICB0aGlzLnVwZGF0ZSgpOwotICAgIH0sCi0gICAgCi0gICAg
X2RlbGV0ZUFsbEV4cHJlc3Npb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLndh
dGNoRXhwcmVzc2lvbnMgPSBbXTsKLSAgICAgICAgdGhpcy5zYXZlRXhwcmVzc2lvbnMoKTsKLSAg
ICAgICAgdGhpcy51cGRhdGUoKTsKLSAgICB9LAotCi0gICAgZmluZEFkZGVkVHJlZUVsZW1lbnQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcGVydGll
c1RyZWVPdXRsaW5lLmNoaWxkcmVuOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxk
cmVuLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ucHJvcGVydHku
bmFtZSA9PT0gV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLk5ld1dhdGNoRXhw
cmVzc2lvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baV07Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgc2F2ZUV4cHJlc3Npb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgdG9TYXZlID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53YXRj
aEV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgaWYgKHRoaXMud2F0Y2hFeHBy
ZXNzaW9uc1tpXSkKLSAgICAgICAgICAgICAgICB0b1NhdmUucHVzaCh0aGlzLndhdGNoRXhwcmVz
c2lvbnNbaV0pOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy53YXRjaEV4cHJlc3Np
b25zLnNldCh0b1NhdmUpOwotICAgICAgICByZXR1cm4gdG9TYXZlLmxlbmd0aDsKLSAgICB9LAot
Ci0gICAgX21vdXNlTW92ZTogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnBy
b3BlcnRpZXNFbGVtZW50LmZpcnN0Q2hpbGQpCi0gICAgICAgICAgICB0aGlzLl91cGRhdGVIb3Zl
cmVkRWxlbWVudChlLnBhZ2VZKTsKLSAgICB9LAotCi0gICAgX21vdXNlT3V0OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5faG92ZXJlZEVsZW1lbnQpIHsKLSAgICAgICAgICAg
IHRoaXMuX2hvdmVyZWRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhvdmVyZWQiKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9ob3ZlcmVkRWxlbWVudDsKLSAgICAgICAgfQotICAgICAgICBk
ZWxldGUgdGhpcy5fbGFzdE1vdXNlTW92ZVBhZ2VZOwotICAgIH0sCi0KLSAgICBfdXBkYXRlSG92
ZXJlZEVsZW1lbnQ6IGZ1bmN0aW9uKHBhZ2VZKQotICAgIHsKLSAgICAgICAgdmFyIGNhbmRpZGF0
ZUVsZW1lbnQgPSB0aGlzLnByb3BlcnRpZXNFbGVtZW50LmZpcnN0Q2hpbGQ7Ci0gICAgICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgICAgICB2YXIgbmV4dCA9IGNhbmRpZGF0ZUVsZW1lbnQubmV4
dFNpYmxpbmc7Ci0gICAgICAgICAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC5jbGllbnRIZWlnaHQp
Ci0gICAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICBp
ZiAoIW5leHQgfHwgbmV4dC50b3RhbE9mZnNldFRvcCgpID4gcGFnZVkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYW5kaWRhdGVFbGVtZW50ID0gbmV4dDsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICh0aGlzLl9ob3ZlcmVkRWxlbWVudCAhPT0gY2FuZGlkYXRlRWxlbWVu
dCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX2hvdmVyZWRFbGVtZW50KQotICAgICAgICAgICAg
ICAgIHRoaXMuX2hvdmVyZWRFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhvdmVyZWQiKTsKLSAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGVFbGVtZW50KQotICAgICAgICAgICAgICAgIGNhbmRpZGF0
ZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaG92ZXJlZCIpOwotICAgICAgICAgICAgdGhpcy5faG92
ZXJlZEVsZW1lbnQgPSBjYW5kaWRhdGVFbGVtZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhp
cy5fbGFzdE1vdXNlTW92ZVBhZ2VZID0gcGFnZVk7Ci0gICAgfSwKLQotICAgIF9lbXB0eUVsZW1l
bnRDb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgY29udGV4
dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKLSAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVz
ZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJBZGQgd2F0Y2ggZXhwcmVzc2lvbiIgOiAiQWRkIFdh
dGNoIEV4cHJlc3Npb24iKSwgdGhpcy5hZGROZXdFeHByZXNzaW9uQW5kRWRpdC5iaW5kKHRoaXMp
KTsKLSAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUKLX0KLQotV2Vi
SW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLkNvbXBhcmVQcm9wZXJ0aWVzID0gZnVu
Y3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIpCi17Ci0gICAgaWYgKHByb3BlcnR5QS53YXRjaElu
ZGV4ID09IHByb3BlcnR5Qi53YXRjaEluZGV4KQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNl
IGlmIChwcm9wZXJ0eUEud2F0Y2hJbmRleCA8IHByb3BlcnR5Qi53YXRjaEluZGV4KQotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVl
RWxlbWVudH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdFByb3BlcnR5fSBw
cm9wZXJ0eQotICovCi1XZWJJbnNwZWN0b3IuV2F0Y2hFeHByZXNzaW9uVHJlZUVsZW1lbnQgPSBm
dW5jdGlvbihwcm9wZXJ0eSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVl
RWxlbWVudC5jYWxsKHRoaXMsIHByb3BlcnR5KTsKLX0KLQotV2ViSW5zcGVjdG9yLldhdGNoRXhw
cmVzc2lvblRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbmV4cGFuZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQu
cHJvdG90eXBlLm9uZXhwYW5kLmNhbGwodGhpcyk7Ci0gICAgICAgIHRoaXMudHJlZU91dGxpbmUu
c2VjdGlvbi5fZXhwYW5kZWRFeHByZXNzaW9uc1t0aGlzLl9leHByZXNzaW9uKCldID0gdHJ1ZTsK
LSAgICB9LAotCi0gICAgb25jb2xsYXBzZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLm9uY29sbGFwc2Uu
Y2FsbCh0aGlzKTsKLSAgICAgICAgZGVsZXRlIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5fZXhw
YW5kZWRFeHByZXNzaW9uc1t0aGlzLl9leHByZXNzaW9uKCldOwotICAgIH0sCi0KLSAgICBvbmF0
dGFjaDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3Bl
cnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLm9uYXR0YWNoLmNhbGwodGhpcyk7Ci0gICAgICAgIGlm
ICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uX2V4cGFuZGVkRXhwcmVzc2lvbnNbdGhpcy5fZXhw
cmVzc2lvbigpXSkKLSAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSB0cnVlOwotICAgIH0sCi0K
LSAgICBfZXhwcmVzc2lvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
cHJvcGVydHkubmFtZTsKLSAgICB9LAotCi0gICAgdXBkYXRlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUu
dXBkYXRlLmNhbGwodGhpcyk7Ci0KLSAgICAgICAgaWYgKHRoaXMucHJvcGVydHkud2FzVGhyb3du
KSB7Ci0gICAgICAgICAgICB0aGlzLnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiPG5vdCBhdmFpbGFibGU+Iik7Ci0gICAgICAgICAgICB0aGlzLmxpc3RJ
dGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJkaW1tZWQiKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJkaW1tZWQiKTsK
LQotICAgICAgICB2YXIgZGVsZXRlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5w
dXQiKTsKLSAgICAgICAgZGVsZXRlQnV0dG9uLnR5cGUgPSAiYnV0dG9uIjsKLSAgICAgICAgZGVs
ZXRlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWxldGUgd2F0Y2ggZXhw
cmVzc2lvbi4iKTsKLSAgICAgICAgZGVsZXRlQnV0dG9uLmFkZFN0eWxlQ2xhc3MoImVuYWJsZWQt
YnV0dG9uIik7Ci0gICAgICAgIGRlbGV0ZUJ1dHRvbi5hZGRTdHlsZUNsYXNzKCJkZWxldGUtYnV0
dG9uIik7Ci0gICAgICAgIGRlbGV0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRo
aXMuX2RlbGV0ZUJ1dHRvbkNsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlz
Lmxpc3RJdGVtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2Nv
bnRleHRNZW51LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1l
bnQuaW5zZXJ0QmVmb3JlKGRlbGV0ZUJ1dHRvbiwgdGhpcy5saXN0SXRlbUVsZW1lbnQuZmlyc3RD
aGlsZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNv
bnRleHRNZW51fSBjb250ZXh0TWVudQotICAgICAqIEBvdmVycmlkZQotICAgICAqLwotICAgIHBv
cHVsYXRlQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51KQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLmlzRWRpdGluZygpKSB7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRp
dGxlcygpID8gIkFkZCB3YXRjaCBleHByZXNzaW9uIiA6ICJBZGQgV2F0Y2ggRXhwcmVzc2lvbiIp
LCB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uYWRkTmV3RXhwcmVzc2lvbkFuZEVkaXQuYmluZCh0
aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24pKTsKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51
VGl0bGVzKCkgPyAiRGVsZXRlIHdhdGNoIGV4cHJlc3Npb24iIDogIkRlbGV0ZSBXYXRjaCBFeHBy
ZXNzaW9uIiksIHRoaXMuX2RlbGV0ZUJ1dHRvbkNsaWNrZWQuYmluZCh0aGlzKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi53YXRjaEV4cHJlc3Npb25z
Lmxlbmd0aCA+IDEpCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkRl
bGV0ZSBhbGwgd2F0Y2ggZXhwcmVzc2lvbnMiIDogIkRlbGV0ZSBBbGwgV2F0Y2ggRXhwcmVzc2lv
bnMiKSwgdGhpcy5fZGVsZXRlQWxsQnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAot
Ci0gICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBj
b250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOwotICAgICAg
ICB0aGlzLnBvcHVsYXRlQ29udGV4dE1lbnUoY29udGV4dE1lbnUpOwotICAgICAgICBjb250ZXh0
TWVudS5zaG93KCk7Ci0gICAgfSwKLQotICAgIF9kZWxldGVBbGxCdXR0b25DbGlja2VkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uX2RlbGV0ZUFs
bEV4cHJlc3Npb25zKCk7Ci0gICAgfSwKLQotICAgIF9kZWxldGVCdXR0b25DbGlja2VkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24udXBkYXRlRXhw
cmVzc2lvbih0aGlzLCBudWxsKTsKLSAgICB9LAotCi0gICAgcmVuZGVyUHJvbXB0QXNCbG9jazog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7RXZlbnQ9fSBldmVudAotICAgICAqLwotICAgIGVsZW1lbnRBbmRW
YWx1ZVRvRWRpdDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMu
bmFtZUVsZW1lbnQsIHRoaXMucHJvcGVydHkubmFtZS50cmltKCldOwotICAgIH0sCi0KLSAgICBl
ZGl0aW5nQ2FuY2VsbGVkOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZXh0KQotICAgIHsKLSAgICAg
ICAgaWYgKCFjb250ZXh0LmVsZW1lbnRUb0VkaXQudGV4dENvbnRlbnQpCi0gICAgICAgICAgICB0
aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24udXBkYXRlRXhwcmVzc2lvbih0aGlzLCBudWxsKTsKLQot
ICAgICAgICBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUu
ZWRpdGluZ0NhbmNlbGxlZC5jYWxsKHRoaXMsIGVsZW1lbnQsIGNvbnRleHQpOwotICAgIH0sCi0K
LSAgICBhcHBseUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb24sIHVwZGF0ZUludGVyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnRyaW0oKTsKLQotICAg
ICAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgICAgICBleHByZXNzaW9uID0gbnVsbDsKLQot
ICAgICAgICB0aGlzLnByb3BlcnR5Lm5hbWUgPSBleHByZXNzaW9uOwotICAgICAgICB0aGlzLnRy
ZWVPdXRsaW5lLnNlY3Rpb24udXBkYXRlRXhwcmVzc2lvbih0aGlzLCBleHByZXNzaW9uKTsKLSAg
ICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUKLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMg
e1dlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50fQotICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuUmVtb3RlT2JqZWN0UHJvcGVydHl9IHByb3BlcnR5Ci0gKi8KLVdlYkluc3BlY3Rv
ci5XYXRjaGVkUHJvcGVydHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb3BlcnR5KQotewotICAg
IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LmNhbGwodGhpcywgcHJvcGVy
dHkpOwotfQotCi1XZWJJbnNwZWN0b3IuV2F0Y2hlZFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90
eXBlID0gewotICAgIG9uYXR0YWNoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNw
ZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2guY2FsbCh0
aGlzKTsKLSAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGRyZW4gJiYgdGhpcy5wcm9wZXJ0eVBhdGgo
KSBpbiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uX2V4cGFuZGVkUHJvcGVydGllcykKLSAgICAg
ICAgICAgIHRoaXMuZXhwYW5kKCk7Ci0gICAgfSwKLQotICAgIG9uZXhwYW5kOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5w
cm90b3R5cGUub25leHBhbmQuY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy50cmVlT3V0bGluZS5z
ZWN0aW9uLl9leHBhbmRlZFByb3BlcnRpZXNbdGhpcy5wcm9wZXJ0eVBhdGgoKV0gPSB0cnVlOwot
ICAgIH0sCi0KLSAgICBvbmNvbGxhcHNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJ
bnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUub25jb2xsYXBzZS5j
YWxsKHRoaXMpOwotICAgICAgICBkZWxldGUgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLl9leHBh
bmRlZFByb3BlcnRpZXNbdGhpcy5wcm9wZXJ0eVBhdGgoKV07Ci0gICAgfSwKLQotICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjM2Y0OTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyAvZGV2L251bGwKQEAgLTEs
NDE3ICswLDAgQEAKLTwhRE9DVFlQRSBSQ0M+PFJDQyB2ZXJzaW9uPSIxLjAiPgotPHFyZXNvdXJj
ZSBwcmVmaXg9Ii93ZWJraXQvaW5zcGVjdG9yIj4KLSAgICA8ZmlsZT5pbnNwZWN0b3IuaHRtbDwv
ZmlsZT4KLSAgICA8ZmlsZT5BZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuanM8L2ZpbGU+Ci0gICAg
PGZpbGU+QXBwbGljYXRpb25DYWNoZUl0ZW1zVmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5BcHBs
aWNhdGlvbkNhY2hlTW9kZWwuanM8L2ZpbGU+Ci0gICAgPGZpbGU+QXVkaXRDYXRlZ29yaWVzLmpz
PC9maWxlPgotICAgIDxmaWxlPkF1ZGl0Q29udHJvbGxlci5qczwvZmlsZT4KLSAgICA8ZmlsZT5B
dWRpdEZvcm1hdHRlcnMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+QXVkaXRMYXVuY2hlclZpZXcuanM8
L2ZpbGU+Ci0gICAgPGZpbGU+QXVkaXRSZXN1bHRWaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPkF1
ZGl0UnVsZXMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+QXVkaXRzUGFuZWwuanM8L2ZpbGU+Ci0gICAg
PGZpbGU+Qm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzPC9maWxlPgotICAgIDxmaWxlPkJy
ZWFrcG9pbnRNYW5hZ2VyLmpzPC9maWxlPgotICAgIDxmaWxlPkJyZWFrcG9pbnRzU2lkZWJhclBh
bmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q2FsbFN0YWNrU2lkZWJhclBhbmUuanM8L2ZpbGU+Ci0g
ICAgPGZpbGU+Q2FudmFzUHJvZmlsZVZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q2hlY2tib3gu
anM8L2ZpbGU+Ci0gICAgPGZpbGU+Q29kZU1pcnJvclRleHRFZGl0b3IuanM8L2ZpbGU+Ci0gICAg
PGZpbGU+Q29sb3IuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q29tcGlsZXJTY3JpcHRNYXBwaW5nLmpz
PC9maWxlPgotICAgIDxmaWxlPkNvbnNvbGVNZXNzYWdlLmpzPC9maWxlPgotICAgIDxmaWxlPkNv
bnNvbGVNb2RlbC5qczwvZmlsZT4KLSAgICA8ZmlsZT5Db25zb2xlUGFuZWwuanM8L2ZpbGU+Ci0g
ICAgPGZpbGU+Q29uc29sZVZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q29udGVudFByb3ZpZGVy
LmpzPC9maWxlPgotICAgIDxmaWxlPkNvbnRlbnRQcm92aWRlckJhc2VkUHJvamVjdERlbGVnYXRl
LmpzPC9maWxlPgotICAgIDxmaWxlPkNvbnRlbnRQcm92aWRlcnMuanM8L2ZpbGU+Ci0gICAgPGZp
bGU+Q29udGV4dE1lbnUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q29va2llSXRlbXNWaWV3LmpzPC9m
aWxlPgotICAgIDxmaWxlPkNvb2tpZVBhcnNlci5qczwvZmlsZT4KLSAgICA8ZmlsZT5Db29raWVz
VGFibGUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q1BVUHJvZmlsZVZpZXcuanM8L2ZpbGU+Ci0gICAg
PGZpbGU+Q1NTTWV0YWRhdGEuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q1NTTmFtZWRGbG93Q29sbGVj
dGlvbnNWaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPkNTU05hbWVkRmxvd1ZpZXcuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+Q1NTU2VsZWN0b3JQcm9maWxlVmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5D
U1NTdHlsZU1vZGVsLmpzPC9maWxlPgotICAgIDxmaWxlPmNtL2NtZGV2dG9vbHMuY3NzPC9maWxl
PgotICAgIDxmaWxlPmNtL2NvZGVtaXJyb3IuY3NzPC9maWxlPgotICAgIDxmaWxlPmNtL2NvZGVt
aXJyb3IuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Y20vY3NzLmpzPC9maWxlPgotICAgIDxmaWxlPmNt
L2h0bWxtaXhlZC5qczwvZmlsZT4KLSAgICA8ZmlsZT5jbS9jbG9zZWJyYWNrZXRzLmpzPC9maWxl
PgotICAgIDxmaWxlPmNtL21hdGNoYnJhY2tldHMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Y20vamF2
YXNjcmlwdC5qczwvZmlsZT4KLSAgICA8ZmlsZT5jbS94bWwuanM8L2ZpbGU+Ci0gICAgPGZpbGU+
RGF0YWJhc2UuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RGF0YWJhc2VRdWVyeVZpZXcuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+RGF0YWJhc2VUYWJsZVZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RGF0YUdy
aWQuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RGVidWdnZXJNb2RlbC5qczwvZmlsZT4KLSAgICA8Zmls
ZT5EZWJ1Z2dlclNjcmlwdE1hcHBpbmcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RGVmYXVsdFNjcmlw
dE1hcHBpbmcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RGVmYXVsdFRleHRFZGl0b3IuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+RGlhbG9nLmpzPC9maWxlPgotICAgIDxmaWxlPkRpcmVjdG9yeUNvbnRlbnRW
aWV3LmpzPC9maWxlPgotICAgIDxmaWxlPkRPTUFnZW50LmpzPC9maWxlPgotICAgIDxmaWxlPkRP
TUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RE9NQ291bnRlcnNH
cmFwaC5qczwvZmlsZT4KLSAgICA8ZmlsZT5ET01FeHRlbnNpb24uanM8L2ZpbGU+Ci0gICAgPGZp
bGU+RE9NUHJlc2VudGF0aW9uVXRpbHMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RE9NU3RvcmFnZS5q
czwvZmlsZT4KLSAgICA8ZmlsZT5ET01TdG9yYWdlSXRlbXNWaWV3LmpzPC9maWxlPgotICAgIDxm
aWxlPkRPTVN5bnRheEhpZ2hsaWdodGVyLmpzPC9maWxlPgotICAgIDxmaWxlPkRvY2tDb250cm9s
bGVyLmpzPC9maWxlPgotICAgIDxmaWxlPkRyYXdlci5qczwvZmlsZT4KLSAgICA8ZmlsZT5FbGVt
ZW50c1BhbmVsLmpzPC9maWxlPgotICAgIDxmaWxlPkVsZW1lbnRzUGFuZWxEZXNjcmlwdG9yLmpz
PC9maWxlPgotICAgIDxmaWxlPkVsZW1lbnRzVHJlZU91dGxpbmUuanM8L2ZpbGU+Ci0gICAgPGZp
bGU+RW1wdHlWaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPkV2ZW50TGlzdGVuZXJzU2lkZWJhclBh
bmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RXh0ZW5zaW9uQVBJLmpzPC9maWxlPgotICAgIDxmaWxl
PkV4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnkuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RXh0ZW5zaW9uUGFu
ZWwuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RXh0ZW5zaW9uUmVnaXN0cnlTdHViLmpzPC9maWxlPgot
ICAgIDxmaWxlPkV4dGVuc2lvblNlcnZlci5qczwvZmlsZT4KLSAgICA8ZmlsZT5FeHRlbnNpb25W
aWV3LmpzPC9maWxlPgotICAgIDxmaWxlPmV4dGVybnMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Rmls
ZUNvbnRlbnRWaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPkZpbGVNYW5hZ2VyLmpzPC9maWxlPgot
ICAgIDxmaWxlPkZpbGVNYXBwaW5nLmpzPC9maWxlPgotICAgIDxmaWxlPkZpbGVTeXN0ZW1NYXBw
aW5nLmpzPC9maWxlPgotICAgIDxmaWxlPkZpbGVTeXN0ZW1Nb2RlbC5qczwvZmlsZT4KLSAgICA8
ZmlsZT5GaWxlU3lzdGVtVmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5GaWxlU3lzdGVtUHJvamVj
dERlbGVnYXRlLmpzPC9maWxlPgotICAgIDxmaWxlPkZpbGVVdGlscy5qczwvZmlsZT4KLSAgICA8
ZmlsZT5GaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Rmxh
bWVDaGFydC5qczwvZmlsZT4KLSAgICA8ZmlsZT5Gb250Vmlldy5qczwvZmlsZT4KLSAgICA8Zmls
ZT5Hb1RvTGluZURpYWxvZy5qczwvZmlsZT4KLSAgICA8ZmlsZT5IQVJFbnRyeS5qczwvZmlsZT4K
LSAgICA8ZmlsZT5IYW5kbGVyUmVnaXN0cnkuanM8L2ZpbGU+Ci0gICAgPGZpbGU+SGVhcFNuYXBz
aG90LmpzPC9maWxlPgotICAgIDxmaWxlPkhlYXBTbmFwc2hvdERhdGFHcmlkcy5qczwvZmlsZT4K
LSAgICA8ZmlsZT5IZWFwU25hcHNob3RHcmlkTm9kZXMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+SGVh
cFNuYXBzaG90TG9hZGVyLmpzPC9maWxlPgotICAgIDxmaWxlPkhlYXBTbmFwc2hvdFByb3h5Lmpz
PC9maWxlPgotICAgIDxmaWxlPkhlYXBTbmFwc2hvdFZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+
SGVhcFNuYXBzaG90V29ya2VyLmpzPC9maWxlPgotICAgIDxmaWxlPkhlYXBTbmFwc2hvdFdvcmtl
ckRpc3BhdGNoZXIuanM8L2ZpbGU+Ci0gICAgPGZpbGU+SGVscFNjcmVlbi5qczwvZmlsZT4KLSAg
ICA8ZmlsZT5JbWFnZVZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+SW5kZXhlZERCTW9kZWwuanM8
L2ZpbGU+Ci0gICAgPGZpbGU+SW5kZXhlZERCVmlld3MuanM8L2ZpbGU+Ci0gICAgPGZpbGU+aW5z
cGVjdG9yLmpzPC9maWxlPgotICAgIDxmaWxlPkluc3BlY3RvckJhY2tlbmQuanM8L2ZpbGU+Ci0g
ICAgPGZpbGU+SW5zcGVjdG9yRnJvbnRlbmRBUEkuanM8L2ZpbGU+Ci0gICAgPGZpbGU+SW5zcGVj
dG9yRnJvbnRlbmRIb3N0U3R1Yi5qczwvZmlsZT4KLSAgICA8ZmlsZT5JbnNwZWN0b3JWaWV3Lmpz
PC9maWxlPgotICAgIDxmaWxlPkpTSGVhcFNuYXBzaG90LmpzPC9maWxlPgotICAgIDxmaWxlPklz
b2xhdGVkRmlsZVN5c3RlbS5qczwvZmlsZT4KLSAgICA8ZmlsZT5Jc29sYXRlZEZpbGVTeXN0ZW1N
YW5hZ2VyLmpzPC9maWxlPgotICAgIDxmaWxlPkphdmFTY3JpcHRGb3JtYXR0ZXIuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+SmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpzPC9maWxlPgotICAgIDxmaWxlPmpz
ZGlmZmxpYi5qczwvZmlsZT4KLSAgICA8ZmlsZT5LZXlib2FyZFNob3J0Y3V0LmpzPC9maWxlPgot
ICAgIDxmaWxlPkxpbmtpZmllci5qczwvZmlsZT4KLSAgICA8ZmlsZT5MaXZlRWRpdFN1cHBvcnQu
anM8L2ZpbGU+Ci0gICAgPGZpbGU+TWVtb3J5U3RhdGlzdGljcy5qczwvZmlsZT4KLSAgICA8Zmls
ZT5NZXRyaWNzU2lkZWJhclBhbmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+TmF0aXZlQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qczwvZmlsZT4KLSAgICA8ZmlsZT5OYXRpdmVIZWFwU25hcHNob3QuanM8
L2ZpbGU+Ci0gICAgPGZpbGU+TmF0aXZlTWVtb3J5R3JhcGguanM8L2ZpbGU+Ci0gICAgPGZpbGU+
TmF2aWdhdG9yT3ZlcmxheUNvbnRyb2xsZXIuanM8L2ZpbGU+Ci0gICAgPGZpbGU+TmF2aWdhdG9y
Vmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5OZXR3b3JrSXRlbVZpZXcuanM8L2ZpbGU+Ci0gICAg
PGZpbGU+TmV0d29ya0xvZy5qczwvZmlsZT4KLSAgICA8ZmlsZT5OZXR3b3JrTWFuYWdlci5qczwv
ZmlsZT4KLSAgICA8ZmlsZT5OZXR3b3JrUGFuZWwuanM8L2ZpbGU+Ci0gICAgPGZpbGU+TmV0d29y
a1BhbmVsRGVzY3JpcHRvci5qczwvZmlsZT4KLSAgICA8ZmlsZT5OZXR3b3JrUmVxdWVzdC5qczwv
ZmlsZT4KLSAgICA8ZmlsZT5OZXR3b3JrVUlTb3VyY2VDb2RlUHJvdmlkZXIuanM8L2ZpbGU+Ci0g
ICAgPGZpbGU+SW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci5qczwvZmlsZT4KLSAgICA8Zmls
ZT5PYmplY3QuanM8L2ZpbGU+Ci0gICAgPGZpbGU+T2JqZWN0UG9wb3ZlckhlbHBlci5qczwvZmls
ZT4KLSAgICA8ZmlsZT5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczwvZmlsZT4KLSAgICA8Zmls
ZT5PdmVycmlkZXNWaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPk92ZXJ2aWV3R3JpZC5qczwvZmls
ZT4KLSAgICA8ZmlsZT5QYW5lbC5qczwvZmlsZT4KLSAgICA8ZmlsZT5QYW5lbEVuYWJsZXJWaWV3
LmpzPC9maWxlPgotICAgIDxmaWxlPlBhcnNlZFVSTC5qczwvZmlsZT4KLSAgICA8ZmlsZT5QbGFj
YXJkLmpzPC9maWxlPgotICAgIDxmaWxlPlBvcG92ZXIuanM8L2ZpbGU+Ci0gICAgPGZpbGU+UHJl
c2VudGF0aW9uQ29uc29sZU1lc3NhZ2VIZWxwZXIuanM8L2ZpbGU+Ci0gICAgPGZpbGU+UHJvZmls
ZURhdGFHcmlkVHJlZS5qczwvZmlsZT4KLSAgICA8ZmlsZT5Qcm9maWxlTGF1bmNoZXJWaWV3Lmpz
PC9maWxlPgotICAgIDxmaWxlPlByb2ZpbGVzUGFuZWwuanM8L2ZpbGU+Ci0gICAgPGZpbGU+UHJv
ZmlsZXNQYW5lbERlc2NyaXB0b3IuanM8L2ZpbGU+Ci0gICAgPGZpbGU+UHJvZ3Jlc3MuanM8L2Zp
bGU+Ci0gICAgPGZpbGU+UHJvZ3Jlc3NJbmRpY2F0b3IuanM8L2ZpbGU+Ci0gICAgPGZpbGU+UHJv
cGVydGllc1NlY3Rpb24uanM8L2ZpbGU+Ci0gICAgPGZpbGU+UHJvcGVydGllc1NpZGViYXJQYW5l
LmpzPC9maWxlPgotICAgIDxmaWxlPlJlbW90ZU9iamVjdC5qczwvZmlsZT4KLSAgICA8ZmlsZT5S
ZXNvdXJjZS5qczwvZmlsZT4KLSAgICA8ZmlsZT5SZXF1ZXN0Q29va2llc1ZpZXcuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+UmVxdWVzdEpTT05WaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPlJlcXVlc3RI
VE1MVmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5SZXF1ZXN0SGVhZGVyc1ZpZXcuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+UmVxdWVzdFByZXZpZXdWaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPlJlcXVl
c3RSZXNwb25zZVZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+UmVxdWVzdFRpbWluZ1ZpZXcuanM8
L2ZpbGU+Ci0gICAgPGZpbGU+UmVxdWVzdFZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+UmVzb3Vy
Y2VTY3JpcHRNYXBwaW5nLmpzPC9maWxlPgotICAgIDxmaWxlPlJlc291cmNlVHJlZU1vZGVsLmpz
PC9maWxlPgotICAgIDxmaWxlPlJlc291cmNlVHlwZS5qczwvZmlsZT4KLSAgICA8ZmlsZT5SZXNv
dXJjZVV0aWxzLmpzPC9maWxlPgotICAgIDxmaWxlPlJlc291cmNlVmlldy5qczwvZmlsZT4KLSAg
ICA8ZmlsZT5SZXNvdXJjZVdlYlNvY2tldEZyYW1lVmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5S
ZXNvdXJjZXNQYW5lbC5qczwvZmlsZT4KLSAgICA8ZmlsZT5SZXZpc2lvbkhpc3RvcnlWaWV3Lmpz
PC9maWxlPgotICAgIDxmaWxlPlJ1bnRpbWVNb2RlbC5qczwvZmlsZT4KLSAgICA8ZmlsZT5TQVNT
U291cmNlTWFwcGluZy5qczwvZmlsZT4KLSAgICA8ZmlsZT5TY29wZUNoYWluU2lkZWJhclBhbmUu
anM8L2ZpbGU+Ci0gICAgPGZpbGU+U2NyaXB0LmpzPC9maWxlPgotICAgIDxmaWxlPlNjcmlwdEZv
cm1hdHRlci5qczwvZmlsZT4KLSAgICA8ZmlsZT5TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanM8L2Zp
bGU+Ci0gICAgPGZpbGU+U2NyaXB0U25pcHBldE1vZGVsLmpzPC9maWxlPgotICAgIDxmaWxlPlNj
cmlwdHNQYW5lbC5qczwvZmlsZT4KLSAgICA8ZmlsZT5TY3JpcHRzUGFuZWxEZXNjcmlwdG9yLmpz
PC9maWxlPgotICAgIDxmaWxlPlNjcmlwdHNOYXZpZ2F0b3IuanM8L2ZpbGU+Ci0gICAgPGZpbGU+
U2NyaXB0c1NlYXJjaFNjb3BlLmpzPC9maWxlPgotICAgIDxmaWxlPlNlYXJjaENvbnRyb2xsZXIu
anM8L2ZpbGU+Ci0gICAgPGZpbGU+U2VjdGlvbi5qczwvZmlsZT4KLSAgICA8ZmlsZT5TZXR0aW5n
cy5qczwvZmlsZT4KLSAgICA8ZmlsZT5TZXR0aW5nc1NjcmVlbi5qczwvZmlsZT4KLSAgICA8Zmls
ZT5TaG9ydGN1dHNTY3JlZW4uanM8L2ZpbGU+Ci0gICAgPGZpbGU+U2hvd01vcmVEYXRhR3JpZE5v
ZGUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+U2lkZWJhck92ZXJsYXkuanM8L2ZpbGU+Ci0gICAgPGZp
bGU+U2lkZWJhclBhbmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+U2lkZWJhclRyZWVFbGVtZW50Lmpz
PC9maWxlPgotICAgIDxmaWxlPlNpZGViYXJWaWV3LmpzPC9maWxlPgotICAgIDxmaWxlPlNpbXBs
ZVdvcmtzcGFjZVByb3ZpZGVyLmpzPC9maWxlPgotICAgIDxmaWxlPlNuaXBwZXRKYXZhU2NyaXB0
U291cmNlRnJhbWUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+U25pcHBldFN0b3JhZ2UuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+U29mdENvbnRleHRNZW51LmpzPC9maWxlPgotICAgIDxmaWxlPlNvdXJjZUNT
U1Rva2VuaXplci5qczwvZmlsZT4KLSAgICA8ZmlsZT5Tb3VyY2VGcmFtZS5qczwvZmlsZT4KLSAg
ICA8ZmlsZT5Tb3VyY2VIVE1MVG9rZW5pemVyLmpzPC9maWxlPgotICAgIDxmaWxlPlNvdXJjZUph
dmFTY3JpcHRUb2tlbml6ZXIuanM8L2ZpbGU+Ci0gICAgPGZpbGU+U291cmNlTWFwLmpzPC9maWxl
PgotICAgIDxmaWxlPlNvdXJjZU1hcHBpbmcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+U291cmNlVG9r
ZW5pemVyLmpzPC9maWxlPgotICAgIDxmaWxlPlNwZWN0cnVtLmpzPC9maWxlPgotICAgIDxmaWxl
PlNwbGl0Vmlldy5qczwvZmlsZT4KLSAgICA8ZmlsZT5TdGF0dXNCYXJCdXR0b24uanM8L2ZpbGU+
Ci0gICAgPGZpbGU+U3R5bGVTaGVldE91dGxpbmVEaWFsb2cuanM8L2ZpbGU+Ci0gICAgPGZpbGU+
U3R5bGVzU291cmNlTWFwcGluZy5qczwvZmlsZT4KLSAgICA8ZmlsZT5TdHlsZXNTaWRlYmFyUGFu
ZS5qczwvZmlsZT4KLSAgICA8ZmlsZT5TdWdnZXN0Qm94LmpzPC9maWxlPgotICAgIDxmaWxlPlRh
YmJlZEVkaXRvckNvbnRhaW5lci5qczwvZmlsZT4KLSAgICA8ZmlsZT5UYWJiZWRQYW5lLmpzPC9m
aWxlPgotICAgIDxmaWxlPlRlc3RDb250cm9sbGVyLmpzPC9maWxlPgotICAgIDxmaWxlPlRleHRF
ZGl0b3IuanM8L2ZpbGU+Ci0gICAgPGZpbGU+VGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzPC9maWxl
PgotICAgIDxmaWxlPlRleHRFZGl0b3JNb2RlbC5qczwvZmlsZT4KLSAgICA8ZmlsZT5UZXh0UHJv
bXB0LmpzPC9maWxlPgotICAgIDxmaWxlPlRleHRVdGlscy5qczwvZmlsZT4KLSAgICA8ZmlsZT5U
aW1lbGluZUZyYW1lQ29udHJvbGxlci5qczwvZmlsZT4KLSAgICA8ZmlsZT5UaW1lbGluZU1hbmFn
ZXIuanM8L2ZpbGU+Ci0gICAgPGZpbGU+VGltZWxpbmVNb2RlbC5qczwvZmlsZT4KLSAgICA8Zmls
ZT5UaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmpzPC9maWxlPgotICAgIDxmaWxlPlRpbWVsaW5l
R3JpZC5qczwvZmlsZT4KLSAgICA8ZmlsZT5UaW1lbGluZU92ZXJ2aWV3UGFuZS5qczwvZmlsZT4K
LSAgICA8ZmlsZT5UaW1lbGluZVBhbmVsLmpzPC9maWxlPgotICAgIDxmaWxlPlRpbWVsaW5lUGFu
ZWxEZXNjcmlwdG9yLmpzPC9maWxlPgotICAgIDxmaWxlPlRvb2xiYXIuanM8L2ZpbGU+Ci0gICAg
PGZpbGU+VG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+dHJl
ZW91dGxpbmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+VUlTb3VyY2VDb2RlLmpzPC9maWxlPgotICAg
IDxmaWxlPlVJU291cmNlQ29kZUZyYW1lLmpzPC9maWxlPgotICAgIDxmaWxlPlVJU3RyaW5nLmpz
PC9maWxlPgotICAgIDxmaWxlPlVJVXRpbHMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+VXNlckFnZW50
U3VwcG9ydC5qczwvZmlsZT4KLSAgICA8ZmlsZT5Vc2VyTWV0cmljcy5qczwvZmlsZT4KLSAgICA8
ZmlsZT51dGlsaXRpZXMuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Vmlldy5qczwvZmlsZT4KLSAgICA8
ZmlsZT5WaWV3cG9ydENvbnRyb2wuanM8L2ZpbGU+Ci0gICAgPGZpbGU+V2F0Y2hFeHByZXNzaW9u
c1NpZGViYXJQYW5lLmpzPC9maWxlPgotICAgIDxmaWxlPldvcmtlck1hbmFnZXIuanM8L2ZpbGU+
Ci0gICAgPGZpbGU+V29ya2Vyc1NpZGViYXJQYW5lLmpzPC9maWxlPgotICAgIDxmaWxlPldvcmtz
cGFjZS5qczwvZmlsZT4KLSAgICA8ZmlsZT5VZ2xpZnlKUy9wYXJzZS1qcy5qczwvZmlsZT4KLSAg
ICA8ZmlsZT5hdWRpdHNQYW5lbC5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+YnJlYWRjcnVtYkxpc3Qu
Y3NzPC9maWxlPgotICAgIDxmaWxlPmJyZWFrcG9pbnRzTGlzdC5jc3M8L2ZpbGU+Ci0gICAgPGZp
bGU+Y2FudmFzUHJvZmlsZXIuY3NzPC9maWxlPgotICAgIDxmaWxlPmNzc05hbWVkRmxvd3MuY3Nz
PC9maWxlPgotICAgIDxmaWxlPmRhdGFHcmlkLmNzczwvZmlsZT4KLSAgICA8ZmlsZT5kaWFsb2cu
Y3NzPC9maWxlPgotICAgIDxmaWxlPmVsZW1lbnRzUGFuZWwuY3NzPC9maWxlPgotICAgIDxmaWxl
PmZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+ZmxhbWVD
aGFydC5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+aGVhcFByb2ZpbGVyLmNzczwvZmlsZT4KLSAgICA8
ZmlsZT5oZWxwU2NyZWVuLmNzczwvZmlsZT4KLSAgICA8ZmlsZT5pbmRleGVkREJWaWV3cy5jc3M8
L2ZpbGU+Ci0gICAgPGZpbGU+aW5zcGVjdG9yLmNzczwvZmlsZT4KLSAgICA8ZmlsZT5pbnNwZWN0
b3JDb21tb24uY3NzPC9maWxlPgotICAgIDxmaWxlPmluc3BlY3RvclN5bnRheEhpZ2hsaWdodC5j
c3M8L2ZpbGU+Ci0gICAgPGZpbGU+bmF2aWdhdG9yVmlldy5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+
bmV0d29ya0xvZ1ZpZXcuY3NzPC9maWxlPgotICAgIDxmaWxlPm5ldHdvcmtQYW5lbC5jc3M8L2Zp
bGU+Ci0gICAgPGZpbGU+cGFuZWxFbmFibGVyVmlldy5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+cG9w
b3Zlci5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+cHJvZmlsZXNQYW5lbC5jc3M8L2ZpbGU+Ci0gICAg
PGZpbGU+cmVzb3VyY2VWaWV3LmNzczwvZmlsZT4KLSAgICA8ZmlsZT5yZXNvdXJjZXNQYW5lbC5j
c3M8L2ZpbGU+Ci0gICAgPGZpbGU+cmV2aXNpb25IaXN0b3J5LmNzczwvZmlsZT4KLSAgICA8Zmls
ZT5zY3JpcHRzUGFuZWwuY3NzPC9maWxlPgotICAgIDxmaWxlPnNpZGViYXJQYW5lLmNzczwvZmls
ZT4KLSAgICA8ZmlsZT5zcGVjdHJ1bS5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+c3BsaXRWaWV3LmNz
czwvZmlsZT4KLSAgICA8ZmlsZT50YWJiZWRQYW5lLmNzczwvZmlsZT4KLSAgICA8ZmlsZT50ZXh0
RWRpdG9yLmNzczwvZmlsZT4KLSAgICA8ZmlsZT50ZXh0UHJvbXB0LmNzczwvZmlsZT4KLSAgICA8
ZmlsZT50aW1lbGluZVBhbmVsLmNzczwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvYXBwbGljYXRp
b25DYWNoZS5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2JhY2sucG5nPC9maWxlPgotICAg
IDxmaWxlPkltYWdlcy9icmVha3BvaW50Qm9yZGVyLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFn
ZXMvYnJlYWtwb2ludENvbmRpdGlvbmFsQm9yZGVyLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFn
ZXMvYnJlYWtwb2ludENvbmRpdGlvbmFsQ291bnRlckJvcmRlci5wbmc8L2ZpbGU+Ci0gICAgPGZp
bGU+SW1hZ2VzL2JyZWFrcG9pbnRDb3VudGVyQm9yZGVyLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5J
bWFnZXMvY2hlY2tlci5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2Nsb3NlQnV0dG9ucy5w
bmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2Nvb2tpZS5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+
SW1hZ2VzL2RhdGFiYXNlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvZGF0YWJhc2VUYWJs
ZS5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2RlYnVnZ2VyQ29udGludWUucG5nPC9maWxl
PgotICAgIDxmaWxlPkltYWdlcy9kZWJ1Z2dlclBhdXNlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5J
bWFnZXMvZGVidWdnZXJTdGVwSW50by5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2RlYnVn
Z2VyU3RlcE91dC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2RlYnVnZ2VyU3RlcE92ZXIu
cG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9kZWxldGVJY29uLnBuZzwvZmlsZT4KLSAgICA8
ZmlsZT5JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxEb3duLnBuZzwvZmlsZT4KLSAgICA8
ZmlsZT5JbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxEb3duQmxhY2sucG5nPC9maWxlPgot
ICAgIDxmaWxlPkltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbERvd25XaGl0ZS5wbmc8L2Zp
bGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHQucG5nPC9m
aWxlPgotICAgIDxmaWxlPkltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0QmxhY2su
cG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0
RG93bi5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxs
UmlnaHREb3duQmxhY2sucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9kaXNjbG9zdXJlVHJp
YW5nbGVTbWFsbFJpZ2h0RG93bldoaXRlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvZGlz
Y2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodFdoaXRlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFn
ZXMvZG9tYWluLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvZXJyb3JJY29uLnBuZzwvZmls
ZT4KLSAgICA8ZmlsZT5JbWFnZXMvZXJyb3JNZWRpdW1JY29uLnBuZzwvZmlsZT4KLSAgICA8Zmls
ZT5JbWFnZXMvZXJyb3JSZWREb3QucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9maWxlU3lz
dGVtLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvZm9yd2FyZC5wbmc8L2ZpbGU+Ci0gICAg
PGZpbGU+SW1hZ2VzL2ZyYW1lLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvZ2xvc3N5SGVh
ZGVyLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvZ2xvc3N5SGVhZGVyUHJlc3NlZC5wbmc8
L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2dsb3NzeUhlYWRlclNlbGVjdGVkLnBuZzwvZmlsZT4K
LSAgICA8ZmlsZT5JbWFnZXMvZ2xvc3N5SGVhZGVyU2VsZWN0ZWRQcmVzc2VkLnBuZzwvZmlsZT4K
LSAgICA8ZmlsZT5JbWFnZXMvZ29BcnJvdy5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2dy
YXBoTGFiZWxDYWxsb3V0TGVmdC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL2dyYXBoTGFi
ZWxDYWxsb3V0UmlnaHQucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9pbmRleGVkREIucG5n
PC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9pbmRleGVkREJPYmplY3RTdG9yZS5wbmc8L2ZpbGU+
Ci0gICAgPGZpbGU+SW1hZ2VzL2luZGV4ZWREQkluZGV4LnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5J
bWFnZXMvbG9jYWxTdG9yYWdlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvbmF2aWdhdG9y
U2hvd0hpZGVCdXR0b24ucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9uYW1lZEZsb3dPdmVy
Zmxvdy5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3BhbmVBZGRCdXR0b25zLnBuZzwvZmls
ZT4KLSAgICA8ZmlsZT5JbWFnZXMvcGFuZUJvdHRvbUdyb3cucG5nPC9maWxlPgotICAgIDxmaWxl
PkltYWdlcy9wYW5lQm90dG9tR3Jvd0FjdGl2ZS5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2Vz
L3BhbmVFbGVtZW50U3RhdGVCdXR0b25zLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvcGFu
ZUZpbHRlckJ1dHRvbnMucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9wYW5lR3Jvd0hhbmRs
ZUxpbmUucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9wYW5lUmVmcmVzaEJ1dHRvbnMucG5n
PC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9wYW5lU2V0dGluZ3NCdXR0b25zLnBuZzwvZmlsZT4K
LSAgICA8ZmlsZT5JbWFnZXMvcG9wb3ZlckFycm93cy5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1h
Z2VzL3BvcG92ZXJCYWNrZ3JvdW5kLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvcHJvZmls
ZUdyb3VwSWNvbi5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3Byb2ZpbGVJY29uLnBuZzwv
ZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvcHJvZmlsZVNtYWxsSWNvbi5wbmc8L2ZpbGU+Ci0gICAg
PGZpbGU+SW1hZ2VzL3Byb2ZpbGVzU2lsaG91ZXR0ZS5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1h
Z2VzL3Byb2dyYW1Db3VudGVyQm9yZGVyLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvcmFk
aW9Eb3QucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9yZWdpb25FbXB0eS5wbmc8L2ZpbGU+
Ci0gICAgPGZpbGU+SW1hZ2VzL3JlZ2lvbkZpdC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2Vz
L3JlZ2lvbk92ZXJzZXQucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9yZXNvdXJjZUNTU0lj
b24ucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9yZXNvdXJjZURvY3VtZW50SWNvbi5wbmc8
L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3Jlc291cmNlRG9jdW1lbnRJY29uU21hbGwucG5nPC9m
aWxlPgotICAgIDxmaWxlPkltYWdlcy9yZXNvdXJjZUpTSWNvbi5wbmc8L2ZpbGU+Ci0gICAgPGZp
bGU+SW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMv
cmVzb3VyY2VQbGFpbkljb25TbWFsbC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3Jlc291
cmNlc1NpemVHcmFwaEljb24ucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9yZXNvdXJjZXNU
aW1lR3JhcGhJY29uLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvc2NyaXB0c1NpbGhvdWV0
dGUucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9zZWFyY2hTbWFsbEJsdWUucG5nPC9maWxl
PgotICAgIDxmaWxlPkltYWdlcy9zZWFyY2hTbWFsbEJyaWdodEJsdWUucG5nPC9maWxlPgotICAg
IDxmaWxlPkltYWdlcy9zZWFyY2hTbWFsbEdyYXkucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdl
cy9zZWFyY2hTbWFsbFdoaXRlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvc2VhcmNoTmV4
dC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3NlYXJjaFByZXYucG5nPC9maWxlPgotICAg
IDxmaWxlPkltYWdlcy9zZWdtZW50LnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvc2VnbWVu
dEVuZC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3NlZ21lbnRIb3Zlci5wbmc8L2ZpbGU+
Ci0gICAgPGZpbGU+SW1hZ2VzL3NlZ21lbnRIb3ZlckVuZC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+
SW1hZ2VzL3NlZ21lbnRTZWxlY3RlZC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3NlZ21l
bnRTZWxlY3RlZEVuZC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3Nlc3Npb25TdG9yYWdl
LnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvc3Bpbm5lci5naWY8L2ZpbGU+Ci0gICAgPGZp
bGU+SW1hZ2VzL3NwaW5uZXJBY3RpdmUuZ2lmPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9zcGlu
bmVyQWN0aXZlU2VsZWN0ZWQuZ2lmPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9zcGlubmVySW5h
Y3RpdmUuZ2lmPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy9zcGlubmVySW5hY3RpdmVTZWxlY3Rl
ZC5naWY8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3NwbGl0dmlld0RpbXBsZS5wbmc8L2ZpbGU+
Ci0gICAgPGZpbGU+SW1hZ2VzL3NwbGl0dmlld0RpdmlkZXJCYWNrZ3JvdW5kLnBuZzwvZmlsZT4K
LSAgICA8ZmlsZT5JbWFnZXMvc3RhdHVzYmFyQnV0dG9uR2x5cGhzLnBuZzwvZmlsZT4KLSAgICA8
ZmlsZT5JbWFnZXMvc3RhdHVzYmFyQnV0dG9uR2x5cGhzMngucG5nPC9maWxlPgotICAgIDxmaWxl
PkltYWdlcy9zdGF0dXNiYXJSZXNpemVySG9yaXpvbnRhbC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+
SW1hZ2VzL3N0YXR1c2JhclJlc2l6ZXJWZXJ0aWNhbC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1h
Z2VzL3N1Y2Nlc3NHcmVlbkRvdC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3RodW1iQWN0
aXZlSG9yaXoucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90aHVtYkFjdGl2ZVZlcnQucG5n
PC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90aHVtYkhvcml6LnBuZzwvZmlsZT4KLSAgICA8Zmls
ZT5JbWFnZXMvdGh1bWJWZXJ0LnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdGh1bWJIb3Zl
ckhvcml6LnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdGh1bWJIb3ZlclZlcnQucG5nPC9m
aWxlPgotICAgIDxmaWxlPkltYWdlcy90aWNrTWFyay5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1h
Z2VzL3RpbWVsaW5lSG9sbG93UGlsbEJsdWUucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90
aW1lbGluZUhvbGxvd1BpbGxHcmF5LnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdGltZWxp
bmVIb2xsb3dQaWxsR3JlZW4ucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90aW1lbGluZUhv
bGxvd1BpbGxPcmFuZ2UucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90aW1lbGluZUhvbGxv
d1BpbGxQdXJwbGUucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90aW1lbGluZUhvbGxvd1Bp
bGxSZWQucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxZZWxs
b3cucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90aW1lbGluZVBpbGxCbHVlLnBuZzwvZmls
ZT4KLSAgICA8ZmlsZT5JbWFnZXMvdGltZWxpbmVQaWxsR3JheS5wbmc8L2ZpbGU+Ci0gICAgPGZp
bGU+SW1hZ2VzL3RpbWVsaW5lUGlsbEdyZWVuLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMv
dGltZWxpbmVQaWxsT3JhbmdlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdGltZWxpbmVQ
aWxsUHVycGxlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdGltZWxpbmVQaWxsUmVkLnBu
ZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdGltZWxpbmVQaWxsWWVsbG93LnBuZzwvZmlsZT4K
LSAgICA8ZmlsZT5JbWFnZXMvdG9vbGJhckljb25zLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFn
ZXMvdG9vbGJhckljb25zU21hbGwucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90b29sYmFy
SXRlbVNlbGVjdGVkLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdHJhY2tIb3Jpei5wbmc8
L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3RyYWNrVmVydC5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+
SW1hZ2VzL3RyZWVEb3duVHJpYW5nbGVCbGFjay5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2Vz
L3RyZWVEb3duVHJpYW5nbGVXaGl0ZS5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3RyZWVS
aWdodFRyaWFuZ2xlQmxhY2sucG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy90cmVlUmlnaHRU
cmlhbmdsZVdoaXRlLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvdHJlZVVwVHJpYW5nbGVC
bGFjay5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3RyZWVVcFRyaWFuZ2xlV2hpdGUucG5n
PC9maWxlPgotICAgIDxmaWxlPkltYWdlcy91c2VySW5wdXRJY29uLnBuZzwvZmlsZT4KLSAgICA8
ZmlsZT5JbWFnZXMvdXNlcklucHV0UHJldmlvdXNJY29uLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5J
bWFnZXMvdXNlcklucHV0UmVzdWx0SWNvbi5wbmc8L2ZpbGU+Ci0gICAgPGZpbGU+SW1hZ2VzL3dh
cm5pbmdJY29uLnBuZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvd2FybmluZ01lZGl1bUljb24u
cG5nPC9maWxlPgotICAgIDxmaWxlPkltYWdlcy93YXJuaW5nT3JhbmdlRG90LnBuZzwvZmlsZT4K
LSAgICA8ZmlsZT5JbWFnZXMvd2FybmluZ3NFcnJvcnMucG5nPC9maWxlPgotPC9xcmVzb3VyY2U+
Ci08L1JDQz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V29ya2VyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV29y
a2VyTWFuYWdlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZlMjgzNy4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dvcmtlck1hbmFn
ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLk9iamVjdH0KLSAqLwotV2ViSW5zcGVjdG9yLldv
cmtlck1hbmFnZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fd29ya2VySWRUb1dpbmRvdyA9
IHt9OwotICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJXb3JrZXJEaXNwYXRjaGVyKG5ldyBX
ZWJJbnNwZWN0b3IuV29ya2VyRGlzcGF0Y2hlcih0aGlzKSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5X
b3JrZXJNYW5hZ2VyLmlzV29ya2VyRnJvbnRlbmQgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJu
ICEhV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJkZWRpY2F0ZWRXb3JrZXJJZCJdIHx8
Ci0gICAgICAgICAgICEhV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJpc1NoYXJlZFdv
cmtlciJdOwotfQotCi1XZWJJbnNwZWN0b3IuV29ya2VyTWFuYWdlci5pc0RlZGljYXRlZFdvcmtl
ckZyb250ZW5kID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiAhIVdlYkluc3BlY3Rvci5xdWVy
eVBhcmFtc09iamVjdFsiZGVkaWNhdGVkV29ya2VySWQiXTsKLX0KLQotV2ViSW5zcGVjdG9yLldv
cmtlck1hbmFnZXIubG9hZGVkID0gZnVuY3Rpb24oKQotewotICAgIHZhciB3b3JrZXJJZCA9IFdl
Ykluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsiZGVkaWNhdGVkV29ya2VySWQiXTsKLSAgICBp
ZiAod29ya2VySWQpCi0gICAgICAgIFdlYkluc3BlY3Rvci5Xb3JrZXJNYW5hZ2VyLl9pbml0aWFs
aXplRGVkaWNhdGVkV29ya2VyRnJvbnRlbmQod29ya2VySWQpOwotICAgIGVsc2UKLSAgICAgICAg
V2ViSW5zcGVjdG9yLndvcmtlck1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLldvcmtlck1hbmFn
ZXIoKTsKLX0KLQotV2ViSW5zcGVjdG9yLldvcmtlck1hbmFnZXIubG9hZENvbXBsZXRlZCA9IGZ1
bmN0aW9uKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc2NyaXB0IGV4ZWN1dGlvbiBvZiBkZWRpY2F0
ZWQgd29ya2VyIGlzIHJlc3VtZWQgYW5kIHRoZW4gcGF1c2VkCi0gICAgLy8gb24gdGhlIGZpcnN0
IHNjcmlwdCBzdGF0ZW1lbnQgaW4gY2FzZSB3ZSBhdXRvYXR0YWNoZWQgdG8gaXQuCi0gICAgaWYg
KFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsid29ya2VyUGF1c2VkIl0pIHsKLSAgICAg
ICAgRGVidWdnZXJBZ2VudC5wYXVzZSgpOwotICAgICAgICBSdW50aW1lQWdlbnQucnVuKGNhbGN1
bGF0ZVRpdGxlKTsKLSAgICB9IGVsc2UgaWYgKFdlYkluc3BlY3Rvci5Xb3JrZXJNYW5hZ2VyLmlz
V29ya2VyRnJvbnRlbmQoKSkKLSAgICAgICAgY2FsY3VsYXRlVGl0bGUoKTsKLQotICAgIGZ1bmN0
aW9uIGNhbGN1bGF0ZVRpdGxlKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5Xb3JrZXJN
YW5hZ2VyLl9jYWxjdWxhdGVXb3JrZXJJbnNwZWN0b3JUaXRsZSgpOwotICAgIH0KLQotICAgIGlm
IChXZWJJbnNwZWN0b3Iud29ya2VyTWFuYWdlcikKLSAgICAgICAgV2ViSW5zcGVjdG9yLnJlc291
cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1v
ZGVsLkV2ZW50VHlwZXMuTWFpbkZyYW1lTmF2aWdhdGVkLCBXZWJJbnNwZWN0b3Iud29ya2VyTWFu
YWdlci5fbWFpbkZyYW1lTmF2aWdhdGVkLCBXZWJJbnNwZWN0b3Iud29ya2VyTWFuYWdlcik7Ci19
Ci0KLVdlYkluc3BlY3Rvci5Xb3JrZXJNYW5hZ2VyLl9pbml0aWFsaXplRGVkaWNhdGVkV29ya2Vy
RnJvbnRlbmQgPSBmdW5jdGlvbih3b3JrZXJJZCkKLXsKLSAgICBmdW5jdGlvbiByZWNlaXZlTWVz
c2FnZShldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YTsKLSAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaChtZXNzYWdlKTsKLSAgICB9Ci0gICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgdHJ1ZSk7Ci0K
LQotICAgIEluc3BlY3RvckJhY2tlbmQuc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQgPSBmdW5j
dGlvbihtZXNzYWdlKQotICAgIHsKLSAgICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZSh7
d29ya2VySWQ6IHdvcmtlcklkLCBjb21tYW5kOiAic2VuZE1lc3NhZ2VUb0JhY2tlbmQiLCBtZXNz
YWdlOiBtZXNzYWdlfSwgIioiKTsKLSAgICB9Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
bG9hZGVkID0gZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVz
c2FnZSh7d29ya2VySWQ6IHdvcmtlcklkLCBjb21tYW5kOiAibG9hZGVkIn0sICIqIik7Ci0gICAg
fQotfQotCi1XZWJJbnNwZWN0b3IuV29ya2VyTWFuYWdlci5fY2FsY3VsYXRlV29ya2VySW5zcGVj
dG9yVGl0bGUgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIGV4cHJlc3Npb24gPSAibG9jYXRpb24u
aHJlZiI7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsiaXNTaGFyZWRX
b3JrZXIiXSkKLSAgICAgICAgZXhwcmVzc2lvbiArPSAiICsgKHRoaXMubmFtZSA/ICcgKCcgKyB0
aGlzLm5hbWUgKyAnKScgOiAnJykiOwotICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZS5pbnZva2Uo
e2V4cHJlc3Npb246ZXhwcmVzc2lvbiwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlOnRydWUsIHJldHVybkJ5VmFsdWU6IHRydWV9LCBldmFsQ2FsbGJhY2suYmluZCh0aGlzKSk7
Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0g
ICAgICogQHBhcmFtIHtSdW50aW1lQWdlbnQuUmVtb3RlT2JqZWN0fSByZXN1bHQKLSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW49fSB3YXNUaHJvd24KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBldmFsQ2Fs
bGJhY2soZXJyb3IsIHJlc3VsdCwgd2FzVGhyb3duKQotICAgIHsKLSAgICAgICAgaWYgKGVycm9y
IHx8IHdhc1Rocm93bikgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
Lmluc3BlY3RlZFVSTENoYW5nZWQocmVzdWx0LnZhbHVlKTsKLSAgICB9Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5Xb3JrZXJNYW5hZ2VyLkV2ZW50cyA9IHsKLSAgICBXb3JrZXJBZGRlZDogIndvcmtlci1h
ZGRlZCIsCi0gICAgV29ya2VyUmVtb3ZlZDogIndvcmtlci1yZW1vdmVkIiwKLSAgICBXb3JrZXJz
Q2xlYXJlZDogIndvcmtlcnMtY2xlYXJlZCIsCi19Ci0KLVdlYkluc3BlY3Rvci5Xb3JrZXJNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKLSAgICBfd29ya2VyQ3JlYXRlZDogZnVuY3Rpb24od29ya2VySWQs
IHVybCwgaW5zcGVjdG9yQ29ubmVjdGVkKQotICAgICB7Ci0gICAgICAgIGlmIChpbnNwZWN0b3JD
b25uZWN0ZWQpCi0gICAgICAgICAgICB0aGlzLl9vcGVuSW5zcGVjdG9yV2luZG93KHdvcmtlcklk
LCB0cnVlKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLldvcmtlck1hbmFnZXIuRXZlbnRzLldvcmtlckFkZGVkLCB7d29ya2VySWQ6IHdvcmtlcklk
LCB1cmw6IHVybCwgaW5zcGVjdG9yQ29ubmVjdGVkOiBpbnNwZWN0b3JDb25uZWN0ZWR9KTsKLSAg
ICAgfSwKLQotICAgIF93b3JrZXJUZXJtaW5hdGVkOiBmdW5jdGlvbih3b3JrZXJJZCkKLSAgICAg
ewotICAgICAgICB0aGlzLmNsb3NlV29ya2VySW5zcGVjdG9yKHdvcmtlcklkKTsKLSAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLldvcmtlck1hbmFnZXIu
RXZlbnRzLldvcmtlclJlbW92ZWQsIHdvcmtlcklkKTsKLSAgICAgfSwKLQotICAgIF9zZW5kTWVz
c2FnZVRvV29ya2VySW5zcGVjdG9yOiBmdW5jdGlvbih3b3JrZXJJZCwgbWVzc2FnZSkKLSAgICB7
Ci0gICAgICAgIHZhciB3b3JrZXJJbnNwZWN0b3JXaW5kb3cgPSB0aGlzLl93b3JrZXJJZFRvV2lu
ZG93W3dvcmtlcklkXTsKLSAgICAgICAgaWYgKHdvcmtlckluc3BlY3RvcldpbmRvdykKLSAgICAg
ICAgICAgIHdvcmtlckluc3BlY3RvcldpbmRvdy5wb3N0TWVzc2FnZShtZXNzYWdlLCAiKiIpOwot
ICAgIH0sCi0KLSAgICBvcGVuV29ya2VySW5zcGVjdG9yOiBmdW5jdGlvbih3b3JrZXJJZCkKLSAg
ICB7Ci0gICAgICAgIHZhciBleGlzdGluZ0luc3BlY3RvciA9IHRoaXMuX3dvcmtlcklkVG9XaW5k
b3dbd29ya2VySWRdOwotICAgICAgICBpZiAoZXhpc3RpbmdJbnNwZWN0b3IpIHsKLSAgICAgICAg
ICAgIGV4aXN0aW5nSW5zcGVjdG9yLmZvY3VzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICB0aGlzLl9vcGVuSW5zcGVjdG9yV2luZG93KHdvcmtlcklkLCBmYWxz
ZSk7Ci0gICAgICAgIFdvcmtlckFnZW50LmNvbm5lY3RUb1dvcmtlcih3b3JrZXJJZCk7Ci0gICAg
fSwKLQotICAgIF9vcGVuSW5zcGVjdG9yV2luZG93OiBmdW5jdGlvbih3b3JrZXJJZCwgd29ya2Vy
SXNQYXVzZWQpCi0gICAgewotICAgICAgICB2YXIgc2VhcmNoID0gd2luZG93LmxvY2F0aW9uLnNl
YXJjaDsKLSAgICAgICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKLSAgICAgICAg
dmFyIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwotICAgICAgICAvLyBNYWtlIHN1cmUgaGFz
aCBpcyBpbiByZWFyCi0gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKGhhc2gsICIiKTsKLSAgICAg
ICAgdXJsICs9IChzZWFyY2ggPyAiJmRlZGljYXRlZFdvcmtlcklkPSIgOiAiP2RlZGljYXRlZFdv
cmtlcklkPSIpICsgd29ya2VySWQ7Ci0gICAgICAgIGlmICh3b3JrZXJJc1BhdXNlZCkKLSAgICAg
ICAgICAgIHVybCArPSAiJndvcmtlclBhdXNlZD10cnVlIjsKLSAgICAgICAgdXJsID0gdXJsLnJl
cGxhY2UoImRvY2tlZD10cnVlJiIsICIiKTsKLSAgICAgICAgdXJsICs9IGhhc2g7Ci0gICAgICAg
IHZhciB3aWR0aCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy53b3JrZXJJbnNwZWN0b3JXaWR0aC5n
ZXQoKTsKLSAgICAgICAgdmFyIGhlaWdodCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy53b3JrZXJJ
bnNwZWN0b3JIZWlnaHQuZ2V0KCk7Ci0gICAgICAgIC8vIFNldCBsb2NhdGlvbj0wIGp1c3QgdG8g
bWFrZSBzdXJlIHRoZSBmcm9udC1lbmQgd2lsbCBiZSBvcGVuZWQgaW4gYSBzZXBhcmF0ZSB3aW5k
b3csIG5vdCBpbiBuZXcgdGFiLgotICAgICAgICB2YXIgd29ya2VySW5zcGVjdG9yV2luZG93ID0g
d2luZG93Lm9wZW4odXJsLCB1bmRlZmluZWQsICJsb2NhdGlvbj0wLHdpZHRoPSIgKyB3aWR0aCAr
ICIsaGVpZ2h0PSIgKyBoZWlnaHQpOwotICAgICAgICB3b3JrZXJJbnNwZWN0b3JXaW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fb25Xb3JrZXJJbnNwZWN0b3JSZXNpemUuYmlu
ZCh0aGlzLCB3b3JrZXJJbnNwZWN0b3JXaW5kb3cpLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX3dv
cmtlcklkVG9XaW5kb3dbd29ya2VySWRdID0gd29ya2VySW5zcGVjdG9yV2luZG93OwotICAgICAg
ICB3b3JrZXJJbnNwZWN0b3JXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIiwg
dGhpcy5fd29ya2VySW5zcGVjdG9yQ2xvc2luZy5iaW5kKHRoaXMsIHdvcmtlcklkKSwgdHJ1ZSk7
Ci0KLSAgICAgICAgLy8gTGlzdGVuIHRvIGJlZm9yZXVubG9hZCBpbiBkZXRhY2hlZCBzdGF0ZSBh
bmQgdG8gdGhlIEluc3BlY3RvckNsb3NpbmcgZXZlbnQgaW4gY2FzZSBvZiBhdHRhY2hlZCBpbnNw
ZWN0b3IuCi0gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLCB0
aGlzLl9wYWdlSW5zcGVjdG9yQ2xvc2luZy5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRXZl
bnRzLkluc3BlY3RvckNsb3NpbmcsIHRoaXMuX3BhZ2VJbnNwZWN0b3JDbG9zaW5nLCB0aGlzKTsK
LSAgICB9LAotCi0gICAgY2xvc2VXb3JrZXJJbnNwZWN0b3I6IGZ1bmN0aW9uKHdvcmtlcklkKQot
ICAgIHsKLSAgICAgICAgdmFyIHdvcmtlckluc3BlY3RvcldpbmRvdyA9IHRoaXMuX3dvcmtlcklk
VG9XaW5kb3dbd29ya2VySWRdOwotICAgICAgICBpZiAod29ya2VySW5zcGVjdG9yV2luZG93KQot
ICAgICAgICAgICAgd29ya2VySW5zcGVjdG9yV2luZG93LmNsb3NlKCk7Ci0gICAgfSwKLQotICAg
IF9tYWluRnJhbWVOYXZpZ2F0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgZm9y
ICh2YXIgd29ya2VySWQgaW4gdGhpcy5fd29ya2VySWRUb1dpbmRvdykKLSAgICAgICAgICAgIHRo
aXMuY2xvc2VXb3JrZXJJbnNwZWN0b3Iod29ya2VySWQpOwotICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuV29ya2VyTWFuYWdlci5FdmVudHMuV29ya2Vy
c0NsZWFyZWQpOwotICAgIH0sCi0KLSAgICBfcGFnZUluc3BlY3RvckNsb3Npbmc6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lnbm9yZVdvcmtlckluc3BlY3RvckNsb3NpbmcgPSB0
cnVlOwotICAgICAgICBmb3IgKHZhciB3b3JrZXJJZCBpbiB0aGlzLl93b3JrZXJJZFRvV2luZG93
KSB7Ci0gICAgICAgICAgICB0aGlzLl93b3JrZXJJZFRvV2luZG93W3dvcmtlcklkXS5jbG9zZSgp
OwotICAgICAgICAgICAgV29ya2VyQWdlbnQuZGlzY29ubmVjdEZyb21Xb3JrZXIocGFyc2VJbnQo
d29ya2VySWQsIDEwKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX29uV29ya2VySW5zcGVj
dG9yUmVzaXplOiBmdW5jdGlvbih3b3JrZXJJbnNwZWN0b3JXaW5kb3cpCi0gICAgewotICAgICAg
ICB2YXIgZG9jID0gd29ya2VySW5zcGVjdG9yV2luZG93LmRvY3VtZW50OwotICAgICAgICBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3Mud29ya2VySW5zcGVjdG9yV2lkdGguc2V0KGRvYy53aWR0aCk7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy53b3JrZXJJbnNwZWN0b3JIZWlnaHQuc2V0KGRv
Yy5oZWlnaHQpOwotICAgIH0sCi0KLSAgICBfd29ya2VySW5zcGVjdG9yQ2xvc2luZzogZnVuY3Rp
b24od29ya2VySWQsIGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5sb2Nh
dGlvbi5ocmVmID09PSAiYWJvdXQ6YmxhbmsiKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAodGhpcy5faWdub3JlV29ya2VySW5zcGVjdG9yQ2xvc2luZykKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3dvcmtlcklkVG9XaW5kb3dbd29ya2VySWRdOwot
ICAgICAgICBXb3JrZXJBZ2VudC5kaXNjb25uZWN0RnJvbVdvcmtlcih3b3JrZXJJZCk7Ci0gICAg
fSwKLQotICAgIF9kaXNjb25uZWN0ZWRGcm9tV29ya2VyOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgc2NyZWVuID0gbmV3IFdlYkluc3BlY3Rvci5Xb3JrZXJUZXJtaW5hdGVkU2NyZWVu
KCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkdsb2JhbE9iamVjdENsZWFyZWQsIHNj
cmVlbi5oaWRlLCBzY3JlZW4pOwotICAgICAgICBzY3JlZW4uc2hvd01vZGFsKCk7Ci0gICAgfSwK
LQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXb3JrZXJBZ2VudC5EaXNwYXRjaGVy
fQotICovCi1XZWJJbnNwZWN0b3IuV29ya2VyRGlzcGF0Y2hlciA9IGZ1bmN0aW9uKHdvcmtlck1h
bmFnZXIpCi17Ci0gICAgdGhpcy5fd29ya2VyTWFuYWdlciA9IHdvcmtlck1hbmFnZXI7Ci0gICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCB0aGlzLl9yZWNlaXZlTWVzc2FnZS5i
aW5kKHRoaXMpLCB0cnVlKTsKLX0KLQotV2ViSW5zcGVjdG9yLldvcmtlckRpc3BhdGNoZXIucHJv
dG90eXBlID0gewotICAgIF9yZWNlaXZlTWVzc2FnZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICB2YXIgd29ya2VySWQgPSBldmVudC5kYXRhWyJ3b3JrZXJJZCJdOwotICAgICAgICB3
b3JrZXJJZCA9IHBhcnNlSW50KHdvcmtlcklkLCAxMCk7Ci0gICAgICAgIHZhciBjb21tYW5kID0g
ZXZlbnQuZGF0YS5jb21tYW5kOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGEubWVz
c2FnZTsKLQotICAgICAgICBpZiAoY29tbWFuZCA9PSAic2VuZE1lc3NhZ2VUb0JhY2tlbmQiKQot
ICAgICAgICAgICAgV29ya2VyQWdlbnQuc2VuZE1lc3NhZ2VUb1dvcmtlcih3b3JrZXJJZCwgbWVz
c2FnZSk7Ci0gICAgfSwKLQotICAgIHdvcmtlckNyZWF0ZWQ6IGZ1bmN0aW9uKHdvcmtlcklkLCB1
cmwsIGluc3BlY3RvckNvbm5lY3RlZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3dvcmtlck1hbmFn
ZXIuX3dvcmtlckNyZWF0ZWQod29ya2VySWQsIHVybCwgaW5zcGVjdG9yQ29ubmVjdGVkKTsKLSAg
ICB9LAotCi0gICAgd29ya2VyVGVybWluYXRlZDogZnVuY3Rpb24od29ya2VySWQpCi0gICAgewot
ICAgICAgICB0aGlzLl93b3JrZXJNYW5hZ2VyLl93b3JrZXJUZXJtaW5hdGVkKHdvcmtlcklkKTsK
LSAgICB9LAotCi0gICAgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcjogZnVuY3Rpb24od29ya2Vy
SWQsIG1lc3NhZ2UpCi0gICAgewotICAgICAgICB0aGlzLl93b3JrZXJNYW5hZ2VyLl9zZW5kTWVz
c2FnZVRvV29ya2VySW5zcGVjdG9yKHdvcmtlcklkLCBtZXNzYWdlKTsKLSAgICB9LAotCi0gICAg
ZGlzY29ubmVjdGVkRnJvbVdvcmtlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
d29ya2VyTWFuYWdlci5fZGlzY29ubmVjdGVkRnJvbVdvcmtlcigpOwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVscFNjcmVlbn0K
LSAqLwotV2ViSW5zcGVjdG9yLldvcmtlclRlcm1pbmF0ZWRTY3JlZW4gPSBmdW5jdGlvbigpCi17
Ci0gICAgV2ViSW5zcGVjdG9yLkhlbHBTY3JlZW4uY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkluc3BlY3RlZCB3b3JrZXIgdGVybWluYXRlZCIpKTsKLSAgICB2YXIgcCA9IHRoaXMu
Y29udGVudEVsZW1lbnQuY3JlYXRlQ2hpbGQoInAiKTsKLSAgICBwLmFkZFN0eWxlQ2xhc3MoImhl
bHAtc2VjdGlvbiIpOwotICAgIHAudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
Ikluc3BlY3RlZCB3b3JrZXIgaGFzIHRlcm1pbmF0ZWQuIE9uY2UgaXQgcmVzdGFydHMgd2Ugd2ls
bCBhdHRhY2ggdG8gaXQgYXV0b21hdGljYWxseS4iKTsKLX0KLQotV2ViSW5zcGVjdG9yLldvcmtl
clRlcm1pbmF0ZWRTY3JlZW4ucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqLwotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkV2ZW50cy5HbG9iYWxPYmplY3RDbGVhcmVkLCB0aGlzLmhpZGUsIHRoaXMp
OwotICAgICAgICBXZWJJbnNwZWN0b3IuSGVscFNjcmVlbi5wcm90b3R5cGUud2lsbEhpZGUuY2Fs
bCh0aGlzKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVscFNjcmVl
bi5wcm90b3R5cGUKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV29ya2Vyc1NpZGViYXJQYW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Xb3JrZXJzU2lkZWJhclBhbmUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFlYWU2YmYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Xb3JrZXJzU2lkZWJhclBhbmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVdlYkluc3BlY3Rvci5Xb3JrZXIgPSBmdW5jdGlv
bihpZCwgdXJsLCBzaGFyZWQpCi17Ci0gICAgdGhpcy5pZCA9IGlkOwotICAgIHRoaXMudXJsID0g
dXJsOwotICAgIHRoaXMuc2hhcmVkID0gc2hhcmVkOwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TaWRlYmFyUGFuZX0KLSAqLwotV2ViSW5zcGVj
dG9yLldvcmtlcnNTaWRlYmFyUGFuZSA9IGZ1bmN0aW9uKHdvcmtlck1hbmFnZXIpCi17Ci0gICAg
V2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJXb3JrZXJzIikpOwotCi0gICAgdGhpcy5fZW5hYmxlV29ya2Vyc0NoZWNrYm94ID0gbmV3IFdl
Ykluc3BlY3Rvci5DaGVja2JveCgKLSAgICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXVz
ZSBvbiBzdGFydCIpLAotICAgICAgICAic2lkZWJhci1sYWJlbCIsCi0gICAgICAgIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiQXV0b21hdGljYWxseSBhdHRhY2ggdG8gbmV3IHdvcmtlcnMgYW5kIHBh
dXNlIHRoZW0uIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgZm9yY2Ugb3BlbmluZyBpbnNwZWN0
b3IgZm9yIGFsbCBuZXcgd29ya2Vycy4iKSk7Ci0gICAgdGhpcy5fZW5hYmxlV29ya2Vyc0NoZWNr
Ym94LmVsZW1lbnQuaWQgPSAicGF1c2Utd29ya2Vycy1jaGVja2JveCI7Ci0gICAgdGhpcy5ib2R5
RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbmFibGVXb3JrZXJzQ2hlY2tib3guZWxlbWVudCk7
Ci0gICAgdGhpcy5fZW5hYmxlV29ya2Vyc0NoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5f
YXV0b2F0dGFjaFRvV29ya2Vyc0NsaWNrZWQuYmluZCh0aGlzKSk7Ci0gICAgdGhpcy5fZW5hYmxl
V29ya2Vyc0NoZWNrYm94LmNoZWNrZWQgPSBmYWxzZTsKLQotICAgIGlmIChQcmVmZXJlbmNlcy5z
aGFyZWRXb3JrZXJzRGVidWdOb3RlKSB7Ci0gICAgICAgIHZhciBub3RlID0gdGhpcy5ib2R5RWxl
bWVudC5jcmVhdGVDaGlsZCgiZGl2Iik7Ci0gICAgICAgIG5vdGUuaWQgPSAic2hhcmVkLXdvcmtl
cnMtbGlzdCI7Ci0gICAgICAgIG5vdGUuYWRkU3R5bGVDbGFzcygic2lkZWJhci1sYWJlbCIpCi0g
ICAgICAgIG5vdGUudGV4dENvbnRlbnQgPSBQcmVmZXJlbmNlcy5zaGFyZWRXb3JrZXJzRGVidWdO
b3RlOwotICAgIH0KLQotICAgIHZhciBzZXBhcmF0b3IgPSB0aGlzLmJvZHlFbGVtZW50LmNyZWF0
ZUNoaWxkKCJkaXYiLCAic2lkZWJhci1zZXBhcmF0b3IiKTsKLSAgICBzZXBhcmF0b3IudGV4dENv
bnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRlZGljYXRlZCB3b3JrZXIgaW5zcGVjdG9y
cyIpOwotCi0gICAgdGhpcy5fd29ya2VyTGlzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJvbCIpOwotICAgIHRoaXMuX3dvcmtlckxpc3RFbGVtZW50LnRhYkluZGV4ID0gMDsKLSAg
ICB0aGlzLl93b3JrZXJMaXN0RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJwcm9wZXJ0aWVzLXRyZWUi
KTsKLSAgICB0aGlzLl93b3JrZXJMaXN0RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaWRlYmFyLWxh
YmVsIik7Ci0gICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl93b3JrZXJMaXN0
RWxlbWVudCk7Ci0KLSAgICB0aGlzLl9pZFRvV29ya2VySXRlbSA9IHt9OwotICAgIHRoaXMuX3dv
cmtlck1hbmFnZXIgPSB3b3JrZXJNYW5hZ2VyOwotCi0gICAgd29ya2VyTWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5Xb3JrZXJNYW5hZ2VyLkV2ZW50cy5Xb3JrZXJBZGRlZCwg
dGhpcy5fd29ya2VyQWRkZWQsIHRoaXMpOwotICAgIHdvcmtlck1hbmFnZXIuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuV29ya2VyTWFuYWdlci5FdmVudHMuV29ya2VyUmVtb3ZlZCwgdGhp
cy5fd29ya2VyUmVtb3ZlZCwgdGhpcyk7Ci0gICAgd29ya2VyTWFuYWdlci5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5Xb3JrZXJNYW5hZ2VyLkV2ZW50cy5Xb3JrZXJzQ2xlYXJlZCwgdGhp
cy5fd29ya2Vyc0NsZWFyZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuV29ya2Vyc1NpZGVi
YXJQYW5lLnByb3RvdHlwZSA9IHsKLSAgICBfd29ya2VyQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdGhpcy5fYWRkV29ya2VyKGV2ZW50LmRhdGEud29ya2VySWQsIGV2ZW50
LmRhdGEudXJsLCBldmVudC5kYXRhLmluc3BlY3RvckNvbm5lY3RlZCk7Ci0gICAgfSwKLQotICAg
IF93b3JrZXJSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciB3b3Jr
ZXJJdGVtID0gdGhpcy5faWRUb1dvcmtlckl0ZW1bZXZlbnQuZGF0YV07Ci0gICAgICAgIGRlbGV0
ZSB0aGlzLl9pZFRvV29ya2VySXRlbVtldmVudC5kYXRhXTsKLSAgICAgICAgd29ya2VySXRlbS5w
YXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHdvcmtlckl0ZW0pOwotICAgIH0sCi0KLSAgICBfd29y
a2Vyc0NsZWFyZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5faWRUb1dv
cmtlckl0ZW0gPSB7fTsKLSAgICAgICAgdGhpcy5fd29ya2VyTGlzdEVsZW1lbnQucmVtb3ZlQ2hp
bGRyZW4oKTsKLSAgICB9LAotCi0gICAgX2FkZFdvcmtlcjogZnVuY3Rpb24od29ya2VySWQsIHVy
bCwgaW5zcGVjdG9yQ29ubmVjdGVkKQotICAgIHsKLSAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl93
b3JrZXJMaXN0RWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgImRlZGljYXRlZC13b3JrZXItaXRl
bSIpOwotICAgICAgICB2YXIgbGluayA9IGl0ZW0uY3JlYXRlQ2hpbGQoImEiKTsKLSAgICAgICAg
bGluay50ZXh0Q29udGVudCA9IHVybDsKLSAgICAgICAgbGluay5ocmVmID0gIiMiOwotICAgICAg
ICBsaW5rLnRhcmdldCA9ICJfYmxhbmsiOwotICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fd29ya2VySXRlbUNsaWNrZWQuYmluZCh0aGlzLCB3b3JrZXJJZCksIHRy
dWUpOwotICAgICAgICB0aGlzLl9pZFRvV29ya2VySXRlbVt3b3JrZXJJZF0gPSBpdGVtOwotICAg
IH0sCi0KLSAgICBfd29ya2VySXRlbUNsaWNrZWQ6IGZ1bmN0aW9uKHdvcmtlcklkLCBldmVudCkK
LSAgICB7Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIHRoaXMuX3dv
cmtlck1hbmFnZXIub3Blbldvcmtlckluc3BlY3Rvcih3b3JrZXJJZCk7Ci0gICAgfSwKLQotICAg
IF9hdXRvYXR0YWNoVG9Xb3JrZXJzQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICBXb3JrZXJBZ2VudC5zZXRBdXRvY29ubmVjdFRvV29ya2Vycyh0aGlzLl9lbmFibGVXb3Jr
ZXJzQ2hlY2tib3guY2hlY2tlZCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLlNpZGViYXJQYW5lLnByb3RvdHlwZQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Xb3Jrc3BhY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1dvcmtzcGFjZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjRhYWY4MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dvcmtzcGFjZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDUyNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLldvcmtzcGFjZUNvbnRyb2xsZXIgPSBmdW5jdGlv
bih3b3Jrc3BhY2UpCi17Ci0gICAgdGhpcy5fd29ya3NwYWNlID0gd29ya3NwYWNlOwotICAgIFdl
Ykluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVzLkluc3BlY3RlZFVSTENoYW5nZWQsIHRoaXMu
X2luc3BlY3RlZFVSTENoYW5nZWQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuV29ya3NwYWNl
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX2luc3BlY3RlZFVSTENoYW5nZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlJldmlzaW9uLmZpbHRl
ck91dFN0YWxlUmV2aXNpb25zKCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aAotICogQHBhcmFtIHtzdHJpbmd9IG9yaWdp
blVSTAotICogQHBhcmFtIHtzdHJpbmd9IHVybAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUeXBlfSBjb250ZW50VHlwZQotICogQHBhcmFtIHtib29sZWFufSBpc0VkaXRhYmxlCi0g
KiBAcGFyYW0ge2Jvb2xlYW49fSBpc0NvbnRlbnRTY3JpcHQKLSAqLwotV2ViSW5zcGVjdG9yLkZp
bGVEZXNjcmlwdG9yID0gZnVuY3Rpb24ocGF0aCwgb3JpZ2luVVJMLCB1cmwsIGNvbnRlbnRUeXBl
LCBpc0VkaXRhYmxlLCBpc0NvbnRlbnRTY3JpcHQpCi17Ci0gICAgdGhpcy5wYXRoID0gcGF0aDsK
LSAgICB0aGlzLm9yaWdpblVSTCA9IG9yaWdpblVSTDsKLSAgICB0aGlzLnVybCA9IHVybDsKLSAg
ICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7Ci0gICAgdGhpcy5pc0VkaXRhYmxlID0g
aXNFZGl0YWJsZTsKLSAgICB0aGlzLmlzQ29udGVudFNjcmlwdCA9IGlzQ29udGVudFNjcmlwdCB8
fCBmYWxzZTsKLX0KLQotLyoqCi0gKiBAaW50ZXJmYWNlCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVj
dG9yLkV2ZW50VGFyZ2V0fQotICovCi1XZWJJbnNwZWN0b3IuUHJvamVjdERlbGVnYXRlID0gZnVu
Y3Rpb24oKSB7IH0KLQotV2ViSW5zcGVjdG9yLlByb2plY3REZWxlZ2F0ZS5FdmVudHMgPSB7Ci0g
ICAgRmlsZUFkZGVkOiAiRmlsZUFkZGVkIiwKLSAgICBGaWxlUmVtb3ZlZDogIkZpbGVSZW1vdmVk
IiwKLSAgICBSZXNldDogIlJlc2V0IiwKLX0KLQotV2ViSW5zcGVjdG9yLlByb2plY3REZWxlZ2F0
ZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAq
LwotICAgIGlkOiBmdW5jdGlvbigpIHsgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0
cmluZ30KLSAgICAgKi8KLSAgICB0eXBlOiBmdW5jdGlvbigpIHsgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBkaXNwbGF5TmFtZTogZnVuY3Rpb24o
KSB7IH0sIAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aAot
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyxib29sZWFuLHN0cmluZyl9IGNhbGxiYWNr
Ci0gICAgICovCi0gICAgcmVxdWVzdEZpbGVDb250ZW50OiBmdW5jdGlvbihwYXRoLCBjYWxsYmFj
aykgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAg
ICBjYW5TZXRGaWxlQ29udGVudDogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0Nv
bnRlbnQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9zdHJpbmcpfSBjYWxsYmFjawotICAgICAq
LwotICAgIHNldEZpbGVDb250ZW50OiBmdW5jdGlvbihwYXRoLCBuZXdDb250ZW50LCBjYWxsYmFj
aykgeyB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGF0aAot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fz
ZVNlbnNpdGl2ZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZWdleAotICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb24oQXJyYXkuPFdlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXIuU2VhcmNoTWF0
Y2g+KX0gY2FsbGJhY2sKLSAgICAgKi8KLSAgICBzZWFyY2hJbkZpbGVDb250ZW50OiBmdW5jdGlv
bihwYXRoLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCwgY2FsbGJhY2spIHsgfQotfQot
Ci0vKioKLSAqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLldvcmtzcGFjZUNvbnRyb2xsZXJ9Ci0gKi8K
LVdlYkluc3BlY3Rvci53b3Jrc3BhY2VDb250cm9sbGVyID0gbnVsbDsKLQotLyoqCi0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5Xb3Jrc3BhY2V9IHdvcmtzcGFjZQotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuUHJvamVjdERlbGVnYXRlfSBwcm9qZWN0RGVsZWdhdGUKLSAqIEBjb25zdHJ1Y3Rvcgot
ICovCi1XZWJJbnNwZWN0b3IuUHJvamVjdCA9IGZ1bmN0aW9uKHdvcmtzcGFjZSwgcHJvamVjdERl
bGVnYXRlKQotewotICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGU+fSAqLwotICAgIHRoaXMuX3VpU291cmNlQ29kZXMgPSB7fTsKLSAgICB0aGlz
Ll93b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7Ci0gICAgdGhpcy5fcHJvamVjdERlbGVnYXRlID0gcHJv
amVjdERlbGVnYXRlOwotICAgIHRoaXMuX3Byb2plY3REZWxlZ2F0ZS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5Qcm9qZWN0RGVsZWdhdGUuRXZlbnRzLkZpbGVBZGRlZCwgdGhpcy5fZmls
ZUFkZGVkLCB0aGlzKTsKLSAgICB0aGlzLl9wcm9qZWN0RGVsZWdhdGUuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuUHJvamVjdERlbGVnYXRlLkV2ZW50cy5GaWxlUmVtb3ZlZCwgdGhpcy5f
ZmlsZVJlbW92ZWQsIHRoaXMpOwotICAgIHRoaXMuX3Byb2plY3REZWxlZ2F0ZS5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9qZWN0RGVsZWdhdGUuRXZlbnRzLlJlc2V0LCB0aGlzLl9y
ZXNldCwgdGhpcyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Qcm9qZWN0LnByb3RvdHlwZSA9IHsKLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0gICAgaWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0RGVsZWdhdGUuaWQoKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIHR5
cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0RGVsZWdh
dGUudHlwZSgpOyAKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQot
ICAgICAqLwotICAgIGRpc3BsYXlOYW1lOiBmdW5jdGlvbigpIAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX3Byb2plY3REZWxlZ2F0ZS5kaXNwbGF5TmFtZSgpOyAKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBpc1NlcnZpY2VQcm9q
ZWN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdERlbGVn
YXRlLnR5cGUoKSA9PT0gV2ViSW5zcGVjdG9yLnByb2plY3RUeXBlcy5EZWJ1Z2dlciB8fCB0aGlz
Ll9wcm9qZWN0RGVsZWdhdGUudHlwZSgpID09PSBXZWJJbnNwZWN0b3IucHJvamVjdFR5cGVzLkxp
dmVFZGl0OwotICAgIH0sCi0KLSAgICBfZmlsZUFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIHZhciBmaWxlRGVzY3JpcHRvciA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkZp
bGVEZXNjcmlwdG9yfSAqLyAoZXZlbnQuZGF0YSk7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUg
PSB0aGlzLnVpU291cmNlQ29kZShmaWxlRGVzY3JpcHRvci5wYXRoKTsKLSAgICAgICAgaWYgKHVp
U291cmNlQ29kZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudAotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdWlTb3VyY2VDb2RlID0gbmV3IFdlYklu
c3BlY3Rvci5VSVNvdXJjZUNvZGUodGhpcywgZmlsZURlc2NyaXB0b3IucGF0aCwgZmlsZURlc2Ny
aXB0b3Iub3JpZ2luVVJMLCBmaWxlRGVzY3JpcHRvci51cmwsIGZpbGVEZXNjcmlwdG9yLmNvbnRl
bnRUeXBlLCBmaWxlRGVzY3JpcHRvci5pc0VkaXRhYmxlKTsgCi0gICAgICAgIHVpU291cmNlQ29k
ZS5pc0NvbnRlbnRTY3JpcHQgPSBmaWxlRGVzY3JpcHRvci5pc0NvbnRlbnRTY3JpcHQ7Ci0gICAg
ICAgIHRoaXMuX3VpU291cmNlQ29kZXNbdWlTb3VyY2VDb2RlLnBhdGgoKS5qb2luKCIvIildID0g
dWlTb3VyY2VDb2RlOwotICAgICAgICB0aGlzLl93b3Jrc3BhY2UuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGVQcm92aWRlci5FdmVudHMuVUlTb3VyY2VD
b2RlQWRkZWQsIHVpU291cmNlQ29kZSk7Ci0gICAgfSwKLQotICAgIF9maWxlUmVtb3ZlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcGF0aCA9IC8qKiBAdHlwZSB7QXJyYXku
PHN0cmluZz59ICovIChldmVudC5kYXRhKTsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRo
aXMudWlTb3VyY2VDb2RlKHBhdGgpOwotICAgICAgICBpZiAoIXVpU291cmNlQ29kZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3VpU291cmNlQ29kZXNbdWlTb3Vy
Y2VDb2RlLnBhdGgoKS5qb2luKCIvIildOwotICAgICAgICB0aGlzLl93b3Jrc3BhY2UuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGVQcm92aWRlci5FdmVu
dHMuVUlTb3VyY2VDb2RlUmVtb3ZlZCwgdWlTb3VyY2VDb2RlKTsKLSAgICB9LAotCi0gICAgX3Jl
c2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl93b3Jrc3BhY2UuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Xb3Jrc3BhY2UuRXZlbnRzLlByb2plY3RXaWxs
UmVzZXQsIHRoaXMpOwotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVzID0ge307Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGgKLSAgICAgKiBA
cmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0KLSAgICAgKi8KLSAgICB1aVNvdXJj
ZUNvZGU6IGZ1bmN0aW9uKHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3Vy
Y2VDb2Rlc1twYXRoLmpvaW4oIi8iKV0gfHwgbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpblVSTAotICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0
b3IuVUlTb3VyY2VDb2RlfQotICAgICAqLwotICAgIHVpU291cmNlQ29kZUZvck9yaWdpblVSTDog
ZnVuY3Rpb24ob3JpZ2luVVJMKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgcGF0aCBpbiB0aGlz
Ll91aVNvdXJjZUNvZGVzKSB7Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5f
dWlTb3VyY2VDb2Rlc1twYXRoXTsKLSAgICAgICAgICAgIGlmICh1aVNvdXJjZUNvZGUub3JpZ2lu
VVJMKCkgPT09IG9yaWdpblVSTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdWlTb3VyY2VDb2Rl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59Ci0gICAgICov
Ci0gICAgdWlTb3VyY2VDb2RlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9i
amVjdC52YWx1ZXModGhpcy5fdWlTb3VyY2VDb2Rlcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCi0gICAg
ICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nLGJvb2xlYW4sc3RyaW5nKX0gY2FsbGJhY2sKLSAg
ICAgKi8KLSAgICByZXF1ZXN0RmlsZUNvbnRlbnQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgY2Fs
bGJhY2spCi0gICAgewotICAgICAgICB0aGlzLl9wcm9qZWN0RGVsZWdhdGUucmVxdWVzdEZpbGVD
b250ZW50KHVpU291cmNlQ29kZS5wYXRoKCksIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBjYW5TZXRGaWxlQ29udGVu
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3REZWxlZ2F0
ZS5jYW5TZXRGaWxlQ29udGVudCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBuZXdDb250ZW50Ci0gICAgICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nKX0gY2Fs
bGJhY2sKLSAgICAgKi8KLSAgICBzZXRGaWxlQ29udGVudDogZnVuY3Rpb24odWlTb3VyY2VDb2Rl
LCBuZXdDb250ZW50LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2plY3REZWxl
Z2F0ZS5zZXRGaWxlQ29udGVudCh1aVNvdXJjZUNvZGUucGF0aCgpLCBuZXdDb250ZW50LCBjYWxs
YmFjayk7Ci0gICAgICAgIHRoaXMuX3dvcmtzcGFjZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLldvcmtzcGFjZS5FdmVudHMuVUlTb3VyY2VDb2RlQ29udGVudENvbW1pdHRl
ZCwgeyB1aVNvdXJjZUNvZGU6IHVpU291cmNlQ29kZSwgY29udGVudDogbmV3Q29udGVudCB9KTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKLSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW59IGNhc2VTZW5zaXRpdmUKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlz
UmVnZXgKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxXZWJJbnNwZWN0b3IuQ29udGVu
dFByb3ZpZGVyLlNlYXJjaE1hdGNoPil9IGNhbGxiYWNrCi0gICAgICovCi0gICAgc2VhcmNoSW5G
aWxlQ29udGVudDogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwg
aXNSZWdleCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICB0aGlzLl9wcm9qZWN0RGVsZWdhdGUu
c2VhcmNoSW5GaWxlQ29udGVudCh1aVNvdXJjZUNvZGUucGF0aCgpLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSwgaXNSZWdleCwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBkaXNwb3NlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9wcm9qZWN0RGVsZWdhdGUucmVzZXQoKTsKLSAgICB9
Ci19Ci0KLVdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMgPSB7Ci0gICAgRGVidWdnZXI6ICJkZWJ1
Z2dlciIsCi0gICAgTGl2ZUVkaXQ6ICJsaXZlZWRpdCIsCi0gICAgTmV0d29yazogIm5ldHdvcmsi
LAotICAgIFNuaXBwZXRzOiAic25pcHBldHMiLAotICAgIEZpbGVTeXN0ZW06ICJmaWxlc3lzdGVt
IgotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rv
ci5VSVNvdXJjZUNvZGVQcm92aWRlcn0KLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0
fQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRmlsZU1hcHBpbmd9IGZpbGVNYXBwaW5nCi0gKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5GaWxlU3lzdGVtTWFwcGluZ30gZmlsZVN5c3RlbU1hcHBpbmcK
LSAqLwotV2ViSW5zcGVjdG9yLldvcmtzcGFjZSA9IGZ1bmN0aW9uKGZpbGVNYXBwaW5nLCBmaWxl
U3lzdGVtTWFwcGluZykKLXsKLSAgICB0aGlzLl9maWxlTWFwcGluZyA9IGZpbGVNYXBwaW5nOwot
ICAgIHRoaXMuX2ZpbGVTeXN0ZW1NYXBwaW5nID0gZmlsZVN5c3RlbU1hcHBpbmc7Ci0gICAgLyoq
IEB0eXBlIHshT2JqZWN0LjxzdHJpbmcsIFdlYkluc3BlY3Rvci5Qcm9qZWN0Pn0gKi8KLSAgICB0
aGlzLl9wcm9qZWN0cyA9IHt9OwotfQotCi1XZWJJbnNwZWN0b3IuV29ya3NwYWNlLkV2ZW50cyA9
IHsKLSAgICBVSVNvdXJjZUNvZGVDb250ZW50Q29tbWl0dGVkOiAiVUlTb3VyY2VDb2RlQ29udGVu
dENvbW1pdHRlZCIsCi0gICAgUHJvamVjdFdpbGxSZXNldDogIlByb2plY3RXaWxsUmVzZXQiCi19
Ci0KLVdlYkluc3BlY3Rvci5Xb3Jrc3BhY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+
fSBwYXRoCi0gICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAg
ICovCi0gICAgdWlTb3VyY2VDb2RlOiBmdW5jdGlvbihwcm9qZWN0SWQsIHBhdGgpCi0gICAgewot
ICAgICAgICB2YXIgcHJvamVjdCA9IHRoaXMuX3Byb2plY3RzW3Byb2plY3RJZF07Ci0gICAgICAg
IHJldHVybiBwcm9qZWN0ID8gcHJvamVjdC51aVNvdXJjZUNvZGUocGF0aCkgOiBudWxsOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luVVJMCi0gICAgICog
QHJldHVybiB7P1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAgICovCi0gICAgdWlTb3Vy
Y2VDb2RlRm9yT3JpZ2luVVJMOiBmdW5jdGlvbihvcmlnaW5VUkwpCi0gICAgewotICAgICAgICB2
YXIgbmV0d29ya1Byb2plY3RzID0gdGhpcy5wcm9qZWN0c0ZvclR5cGUoV2ViSW5zcGVjdG9yLnBy
b2plY3RUeXBlcy5OZXR3b3JrKQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ldHdvcmtQ
cm9qZWN0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHByb2plY3QgPSBuZXR3b3Jr
UHJvamVjdHNbaV07Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gcHJvamVjdC51aVNv
dXJjZUNvZGVGb3JPcmlnaW5VUkwob3JpZ2luVVJMKTsKLSAgICAgICAgICAgIGlmICh1aVNvdXJj
ZUNvZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVpU291cmNlQ29kZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IHR5cGUKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNl
Q29kZT59Ci0gICAgICovCi0gICAgdWlTb3VyY2VDb2Rlc0ZvclByb2plY3RUeXBlOiBmdW5jdGlv
bih0eXBlKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZh
ciBwcm9qZWN0TmFtZSBpbiB0aGlzLl9wcm9qZWN0cykgewotICAgICAgICAgICAgdmFyIHByb2pl
Y3QgPSB0aGlzLl9wcm9qZWN0c1twcm9qZWN0TmFtZV07Ci0gICAgICAgICAgICBpZiAocHJvamVj
dC50eXBlKCkgPT09IHR5cGUpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNh
dChwcm9qZWN0LnVpU291cmNlQ29kZXMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJv
amVjdERlbGVnYXRlfSBwcm9qZWN0RGVsZWdhdGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuUHJvamVjdH0KLSAgICAgKi8KLSAgICBhZGRQcm9qZWN0OiBmdW5jdGlvbihwcm9qZWN0RGVs
ZWdhdGUpCi0gICAgewotICAgICAgICB2YXIgcHJvamVjdElkID0gcHJvamVjdERlbGVnYXRlLmlk
KCk7Ci0gICAgICAgIHRoaXMuX3Byb2plY3RzW3Byb2plY3RJZF0gPSBuZXcgV2ViSW5zcGVjdG9y
LlByb2plY3QodGhpcywgcHJvamVjdERlbGVnYXRlKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3By
b2plY3RzW3Byb2plY3RJZF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBwcm9qZWN0SWQKLSAgICAgKi8KLSAgICByZW1vdmVQcm9qZWN0OiBmdW5jdGlvbihwcm9q
ZWN0SWQpCi0gICAgewotICAgICAgICB2YXIgcHJvamVjdCA9IHRoaXMuX3Byb2plY3RzW3Byb2pl
Y3RJZF07Ci0gICAgICAgIGlmICghcHJvamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgcHJvamVjdC5kaXNwb3NlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9wcm9qZWN0c1twcm9q
ZWN0SWRdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVj
dElkCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2plY3R9Ci0gICAgICovCi0gICAg
cHJvamVjdDogZnVuY3Rpb24ocHJvamVjdElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X3Byb2plY3RzW3Byb2plY3RJZF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e0FycmF5LjxXZWJJbnNwZWN0b3IuUHJvamVjdD59Ci0gICAgICovCi0gICAgcHJvamVjdHM6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX3Byb2pl
Y3RzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUKLSAg
ICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLlByb2plY3Q+fQotICAgICAqLwotICAg
IHByb2plY3RzRm9yVHlwZTogZnVuY3Rpb24odHlwZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9u
IGZpbHRlckJ5VHlwZShwcm9qZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcHJv
amVjdC50eXBlKCkgPT09IHR5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMucHJv
amVjdHMoKS5maWx0ZXIoZmlsdGVyQnlUeXBlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+fQotICAgICAqLwotICAg
IHVpU291cmNlQ29kZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBb
XTsKLSAgICAgICAgZm9yICh2YXIgcHJvamVjdElkIGluIHRoaXMuX3Byb2plY3RzKSB7Ci0gICAg
ICAgICAgICB2YXIgcHJvamVjdCA9IHRoaXMuX3Byb2plY3RzW3Byb2plY3RJZF07Ci0gICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHByb2plY3QudWlTb3VyY2VDb2RlcygpKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8K
LSAgICBoYXNNYXBwaW5nRm9yVVJMOiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICB2YXIg
ZW50cnkgPSB0aGlzLl9maWxlTWFwcGluZy5tYXBwaW5nRW50cnlGb3JVUkwodXJsKTsKLSAgICAg
ICAgaWYgKCFlbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
ICEhdGhpcy5fZmlsZVN5c3RlbVBhdGhGb3JFbnRyeShlbnRyeSk7Ci0gICAgfSwKLSAgICAKLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5GaWxlTWFwcGluZy5FbnRyeX0gZW50
cnkKLSAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfQotICAgICAqLwotICAgIF9maWxlU3lzdGVtUGF0
aEZvckVudHJ5OiBmdW5jdGlvbihlbnRyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9m
aWxlU3lzdGVtTWFwcGluZy5maWxlU3lzdGVtUGF0aEZvclByZWZpeChlbnRyeS5wYXRoUHJlZml4
KTsKLSAgICB9LAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfQotICAgICAqLwotICAgIHVpU291cmNl
Q29kZUZvclVSTDogZnVuY3Rpb24odXJsKQotICAgIHsKLSAgICAgICAgdmFyIGVudHJ5ID0gdGhp
cy5fZmlsZU1hcHBpbmcubWFwcGluZ0VudHJ5Rm9yVVJMKHVybCk7Ci0gICAgICAgIHZhciBmaWxl
U3lzdGVtUGF0aCA9IGVudHJ5ID8gdGhpcy5fZmlsZVN5c3RlbVBhdGhGb3JFbnRyeShlbnRyeSkg
OiBudWxsOwotICAgICAgICBpZiAoIWZpbGVTeXN0ZW1QYXRoKSB7Ci0gICAgICAgICAgICB2YXIg
c3BsaXR0ZWRVUkwgPSBXZWJJbnNwZWN0b3IuUGFyc2VkVVJMLnNwbGl0VVJMKHVybCk7Ci0gICAg
ICAgICAgICB2YXIgcHJvamVjdElkID0gV2ViSW5zcGVjdG9yLlNpbXBsZVByb2plY3REZWxlZ2F0
ZS5wcm9qZWN0SWQoc3BsaXR0ZWRVUkxbMF0sIFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuTmV0
d29yayk7Ci0gICAgICAgICAgICB2YXIgcGF0aCA9IFdlYkluc3BlY3Rvci5TaW1wbGVXb3Jrc3Bh
Y2VQcm92aWRlci5wYXRoRm9yU3BsaXR0ZWRVUkwoc3BsaXR0ZWRVUkwpOwotICAgICAgICAgICAg
dmFyIHByb2plY3QgPSB0aGlzLnByb2plY3QocHJvamVjdElkKTsKLSAgICAgICAgICAgIHJldHVy
biBwcm9qZWN0ID8gcHJvamVjdC51aVNvdXJjZUNvZGUocGF0aCkgOiBudWxsOwotICAgICAgICB9
Ci0KLSAgICAgICAgdmFyIHByb2plY3RJZCA9IFdlYkluc3BlY3Rvci5GaWxlU3lzdGVtUHJvamVj
dERlbGVnYXRlLnByb2plY3RJZChmaWxlU3lzdGVtUGF0aCk7Ci0gICAgICAgIHZhciBwYXRoUHJl
Zml4ID0gZW50cnkucGF0aFByZWZpeC5zdWJzdHIoZmlsZVN5c3RlbVBhdGgubGVuZ3RoICsgMSk7
Ci0gICAgICAgIHZhciBwYXRoID0gcGF0aFByZWZpeCArIHVybC5zdWJzdHIoZW50cnkudXJsUHJl
Zml4Lmxlbmd0aCk7Ci0gICAgICAgIHZhciBwcm9qZWN0ID0gdGhpcy5wcm9qZWN0KHByb2plY3RJ
ZCk7Ci0gICAgICAgIHJldHVybiBwcm9qZWN0ID8gcHJvamVjdC51aVNvdXJjZUNvZGUocGF0aC5z
cGxpdCgiLyIpKSA6IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBwYXRoCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIHVybEZvclBh
dGg6IGZ1bmN0aW9uKHBhdGgpCi0gICAgewotICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9maWxl
TWFwcGluZy5tYXBwaW5nRW50cnlGb3JQYXRoKHBhdGgpOwotICAgICAgICBpZiAoIWVudHJ5KQot
ICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICByZXR1cm4gZW50cnkudXJsUHJlZml4ICsg
cGF0aC5zdWJzdHJpbmcoZW50cnkucGF0aFByZWZpeC5sZW5ndGgpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IG5ldHdvcmtVSVNv
dXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291
cmNlQ29kZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZpbGVTeXN0ZW1Xb3Jrc3BhY2VQ
cm92aWRlcn0gZmlsZVN5c3RlbVdvcmtzcGFjZVByb3ZpZGVyCi0gICAgICovCi0gICAgYWRkTWFw
cGluZzogZnVuY3Rpb24obmV0d29ya1VJU291cmNlQ29kZSwgdWlTb3VyY2VDb2RlLCBmaWxlU3lz
dGVtV29ya3NwYWNlUHJvdmlkZXIpCi0gICAgewotICAgICAgICB2YXIgdXJsID0gbmV0d29ya1VJ
U291cmNlQ29kZS51cmw7Ci0gICAgICAgIHZhciBwYXRoID0gdWlTb3VyY2VDb2RlLnBhdGgoKTsK
LSAgICAgICAgdmFyIHN1ZmZpeCA9ICIiOwotICAgICAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5n
dGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgdmFyIG5leHRTdWZmaXggPSAiLyIg
KyBwYXRoW2ldICsgc3VmZml4OwotICAgICAgICAgICAgaWYgKCF1cmwuZW5kc1dpdGgobmV4dFN1
ZmZpeCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBzdWZmaXggPSBuZXh0
U3VmZml4OwotICAgICAgICB9Ci0gICAgICAgIHZhciBmaWxlU3lzdGVtUGF0aCA9IGZpbGVTeXN0
ZW1Xb3Jrc3BhY2VQcm92aWRlci5maWxlU3lzdGVtUGF0aCh1aVNvdXJjZUNvZGUpOwotICAgICAg
ICB2YXIgZmlsZVBhdGggPSAiLyIgKyBwYXRoLmpvaW4oIi8iKTsKLSAgICAgICAgdmFyIHBhdGhQ
cmVmaXggPSBmaWxlU3lzdGVtUGF0aCArIGZpbGVQYXRoLnN1YnN0cigwLCBmaWxlUGF0aC5sZW5n
dGggLSBzdWZmaXgubGVuZ3RoKSArICIvIjsKLSAgICAgICAgdmFyIHVybFByZWZpeCA9IHVybC5z
dWJzdHIoMCwgdXJsLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpICsgIi8iOwotCi0gICAgICAgIHZh
ciBlbnRyaWVzID0gdGhpcy5fZmlsZU1hcHBpbmcubWFwcGluZ0VudHJpZXMoKTsKLSAgICAgICAg
dmFyIGVudHJ5ID0gbmV3IFdlYkluc3BlY3Rvci5GaWxlTWFwcGluZy5FbnRyeSh1cmxQcmVmaXgs
IHBhdGhQcmVmaXgpOwotICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpOwotICAgICAgICB0aGlz
Ll9maWxlTWFwcGluZy5zZXRNYXBwaW5nRW50cmllcyhlbnRyaWVzKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnN1Z2dlc3RSZWxvYWQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKi8KLSAgICBy
ZW1vdmVNYXBwaW5nOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCi0gICAgewotICAgICAgICB2YXIg
ZW50cnkgPSB0aGlzLl9maWxlTWFwcGluZy5tYXBwaW5nRW50cnlGb3JVUkwodWlTb3VyY2VDb2Rl
LnVybCk7Ci0gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5fZmlsZU1hcHBpbmcubWFwcGluZ0Vu
dHJpZXMoKTsKLSAgICAgICAgZW50cmllcy5yZW1vdmUoZW50cnkpOwotICAgICAgICB0aGlzLl9m
aWxlTWFwcGluZy5zZXRNYXBwaW5nRW50cmllcyhlbnRyaWVzKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLnN1Z2dlc3RSZWxvYWQoKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuT2JqZWN0LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLldv
cmtzcGFjZX0KLSAqLwotV2ViSW5zcGVjdG9yLndvcmtzcGFjZSA9IG51bGw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2F1ZGl0c1BhbmVsLmNzcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVkaXRzUGFuZWwuY3NzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTNiYTg0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVkaXRzUGFuZWwuY3NzCisrKyAvZGV2L251bGwKQEAg
LTEsMjQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS5hdWRpdHMtc2lkZWJhci10cmVlLWl0ZW0gLmljb24gewotICAgIGNvbnRl
bnQ6IHVybChJbWFnZXMvcmVzb3VyY2VzVGltZUdyYXBoSWNvbi5wbmcpOwotfQotCi0uYXVkaXQt
cmVzdWx0LXNpZGViYXItdHJlZS1pdGVtIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2Vz
L3Jlc291cmNlRG9jdW1lbnRJY29uLnBuZyk7Ci19Ci0KLS5hdWRpdC1sYXVuY2hlci12aWV3IHsK
LSAgICB6LWluZGV4OiAxMDAwOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7
Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgYmFja2dy
b3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgZm9udC1zaXplOiAxM3B4OwotICAgIG92ZXJmbG93LXg6
IGhpZGRlbjsKLSAgICBvdmVyZmxvdy15OiBvdmVybGF5OwotICAgIGRpc3BsYXk6IG5vbmU7Ci19
Ci0KLS5hdWRpdC1sYXVuY2hlci12aWV3LnZpc2libGUgewotICAgIGRpc3BsYXk6IGJsb2NrOwot
fQotCi0uYXVkaXQtbGF1bmNoZXItdmlldyAuYXVkaXQtbGF1bmNoZXItdmlldy1jb250ZW50IHsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAg
cmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIHBhZGRpbmc6IDAgMCAwIDE2cHg7Ci0gICAg
d2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7Ci0gICAgdGV4
dC1hbGlnbjogbGVmdDsKLSAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci19Ci0K
LS5hdWRpdC1sYXVuY2hlci12aWV3IGgxIHsKLSAgICBwYWRkaW5nLXRvcDogMTVweDsKLX0KLQot
LmF1ZGl0LWxhdW5jaGVyLXZpZXcgaDEubm8tYXVkaXRzIHsKLSAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAg
ICBsZWZ0OiAtOHB4OwotfQotCi0uYXVkaXQtbGF1bmNoZXItdmlldyBkaXYuYnV0dG9uLWNvbnRh
aW5lciB7Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotICAgIC13ZWJraXQtZmxleC1kaXJl
Y3Rpb246IGNvbHVtbjsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nOiAxNnB4IDA7Ci19
Ci0KLS5hdWRpdC1sYXVuY2hlci12aWV3IGRpdi5idXR0b24tY29udGFpbmVyID4gYnV0dG9uIHsK
LSAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7Ci19Ci0KLS5hdWRpdC1sYXVuY2hl
ci12aWV3IGZpZWxkc2V0LmF1ZGl0LWNhdGVnb3JpZXMtY29udGFpbmVyIHsKLSAgICBwb3NpdGlv
bjogcmVsYXRpdmU7Ci0gICAgdG9wOiAxMXB4OwotICAgIGxlZnQ6IDA7Ci0gICAgd2lkdGg6IDEw
MCU7Ci0gICAgb3ZlcmZsb3cteTogYXV0bzsKLSAgICBib3JkZXI6IDAgbm9uZTsKLX0KLQotLmF1
ZGl0LWxhdW5jaGVyLXZpZXcgYnV0dG9uIHsKLSAgICBtYXJnaW46IDAgNXB4IDAgMDsKLX0KLQot
LmF1ZGl0LWxhdW5jaGVyLXZpZXcgYnV0dG9uOmFjdGl2ZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xv
cjogcmdiKDIxNSwgMjE1LCAyMTUpOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3Jh
ZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDE5NCwgMTk0LCAx
OTQpKSwgdG8ocmdiKDIzOSwgMjM5LCAyMzkpKSk7Ci19Ci0KLS5wYW5lbC1lbmFibGVyLXZpZXcu
YXVkaXQtbGF1bmNoZXItdmlldyBsYWJlbCB7Ci0gICAgcGFkZGluZzogMCAwIDVweCAwOwotICAg
IG1hcmdpbjogMDsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldy5hdWRpdC1sYXVuY2hlci12aWV3
IGxhYmVsLmRpc2FibGVkIHsKLSAgICBjb2xvcjogcmdiKDEzMCwgMTMwLCAxMzApOwotfQotCi0u
YXVkaXQtbGF1bmNoZXItdmlldyBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKLSAgICBtYXJnaW4t
bGVmdDogMDsKLX0KLQotLmF1ZGl0LXJlc3VsdC12aWV3IHsKLSAgICBvdmVyZmxvdzogYXV0bzsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAg
cmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5hdWRp
dC1yZXN1bHQtdmlldy52aXNpYmxlIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotLmF1ZGl0
LXJlc3VsdC12aWV3IC5zZXZlcml0eS1zZXZlcmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMv
ZXJyb3JSZWREb3QucG5nKTsKLX0KLQotLmF1ZGl0LXJlc3VsdC12aWV3IC5zZXZlcml0eS13YXJu
aW5nIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3dhcm5pbmdPcmFuZ2VEb3QucG5nKTsKLX0K
LQotLmF1ZGl0LXJlc3VsdC12aWV3IC5zZXZlcml0eS1pbmZvIHsKLSAgICBjb250ZW50OiB1cmwo
SW1hZ2VzL3N1Y2Nlc3NHcmVlbkRvdC5wbmcpOwotfQotCi0uYXVkaXQtcmVzdWx0LXRyZWUgbGku
cGFyZW50OjpiZWZvcmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZVJpZ2h0VHJpYW5n
bGVCbGFjay5wbmcpOwotICAgIGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiA4cHg7Ci0gICAgaGVp
Z2h0OiA4cHg7Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotICAgIHBhZGRpbmctcmlnaHQ6IDJweDsK
LX0KLQotLmF1ZGl0LXJlc3VsdC10cmVlIHsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgbGlu
ZS1oZWlnaHQ6IDE0cHg7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLX0KLQotLmF1
ZGl0LXJlc3VsdC10cmVlID4gb2wgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBwYWRk
aW5nOiAycHggNnB4ICFpbXBvcnRhbnQ7Ci0gICAgbWFyZ2luOiAwOwotICAgIGNvbG9yOiByZ2Io
ODQsIDg0LCA4NCk7Ci0gICAgY3Vyc29yOiBkZWZhdWx0OwotICAgIG1pbi13aWR0aDogMTAwJTsK
LX0KLQotLmF1ZGl0LXJlc3VsdC10cmVlLCAuYXVkaXQtcmVzdWx0LXRyZWUgb2wgewotICAgIGxp
c3Qtc3R5bGUtdHlwZTogbm9uZTsKLSAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDEycHg7Ci0g
ICAgbWFyZ2luOiAwOwotfQotCi0uYXVkaXQtcmVzdWx0LXRyZWUgb2wub3V0bGluZS1kaXNjbG9z
dXJlIHsKLSAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDA7Ci19Ci0KLS5hdWRpdC1yZXN1bHQt
dHJlZSAuc2VjdGlvbiAuaGVhZGVyIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDEzcHg7Ci19Ci0KLS5h
dWRpdC1yZXN1bHQtdHJlZSAuc2VjdGlvbiAuaGVhZGVyOjpiZWZvcmUgewotICAgIGxlZnQ6IDJw
eDsKLX0KLQotLmF1ZGl0LXJlc3VsdC10cmVlIGxpIHsKLSAgICBwYWRkaW5nOiAwIDAgMCAxNHB4
OwotICAgIG1hcmdpbi10b3A6IDFweDsKLSAgICBtYXJnaW4tYm90dG9tOiAxcHg7Ci0gICAgd29y
ZC13cmFwOiBicmVhay13b3JkOwotICAgIG1hcmdpbi1sZWZ0OiAtMnB4OwotfQotCi0uYXVkaXQt
cmVzdWx0LXRyZWUgbGkucGFyZW50IHsKLSAgICBtYXJnaW4tbGVmdDogLTEycHgKLX0KLQotLmF1
ZGl0LXJlc3VsdC10cmVlIGxpLnBhcmVudDo6YmVmb3JlIHsKLSAgICBjb250ZW50OiB1cmwoSW1h
Z2VzL3RyZWVSaWdodFRyaWFuZ2xlQmxhY2sucG5nKTsKLSAgICBmbG9hdDogbGVmdDsKLSAgICB3
aWR0aDogOHB4OwotICAgIGhlaWdodDogOHB4OwotICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgcGFk
ZGluZy1yaWdodDogMnB4OwotfQotCi0uYXVkaXQtcmVzdWx0LXRyZWUgbGkucGFyZW50LmV4cGFu
ZGVkOjpiZWZvcmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZURvd25UcmlhbmdsZUJs
YWNrLnBuZyk7Ci19Ci0KLS5hdWRpdC1yZXN1bHQtdHJlZSBvbC5jaGlsZHJlbiB7Ci0gICAgZGlz
cGxheTogbm9uZTsKLX0KLQotLmF1ZGl0LXJlc3VsdC10cmVlIG9sLmNoaWxkcmVuLmV4cGFuZGVk
IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotLmF1ZGl0LXJlc3VsdCB7Ci0gICAgZm9udC13
ZWlnaHQ6IGJvbGQ7Ci0gICAgY29sb3I6IGJsYWNrOwotfQotCi0uYXVkaXQtcmVzdWx0IGltZyB7
Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgbWFyZ2luLWxlZnQ6IC0yOHB4OwotICAgIG1hcmdpbi10
b3A6IC0xcHg7Ci19Ci0KLS5hdWRpdC1sYXVuY2hlci12aWV3IC5wcm9ncmVzcy1iYXItY29udGFp
bmVyIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci19Ci0KLS5hdWRpdC1sYXVuY2hlci12
aWV3IC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5wcm9ncmVzcy1iYXItc3RvcC1idXR0b24gewot
ICAgIGRpc3BsYXk6IG5vbmU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2JyZWFkY3J1bWJMaXN0LmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvYnJlYWRjcnVtYkxpc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2YjA4MThiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvYnJlYWRjcnVtYkxpc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFudGhvbnkgUmljYXVkIDxyaWtA
d2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0uY3J1bWJzIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9p
bnRlci1ldmVudHM6IGF1dG87Ci0gICAgY3Vyc29yOiBkZWZhdWx0OwotICAgIGZvbnQtc2l6ZTog
MTFweDsKLSAgICBsaW5lLWhlaWdodDogMTlweDsKLSAgICB0ZXh0LXNoYWRvdzogcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjc1KSAwIDFweCAwOwotICAgIGNvbG9yOiByZ2IoMjAsIDIwLCAyMCk7Ci0g
ICAgbWFyZ2luLWxlZnQ6IC0xcHg7Ci0gICAgbWFyZ2luLXRvcDogLTFweDsKLSAgICBwYWRkaW5n
LXJpZ2h0OiAxMnB4OwotfQotCi0uY3J1bWJzIC5jcnVtYiB7Ci0gICAgaGVpZ2h0OiAyNHB4Owot
ICAgIGJvcmRlci13aWR0aDogMCAxMnB4IDAgMnB4OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdl
OiB1cmwoSW1hZ2VzL3NlZ21lbnQucG5nKSAwIDEyIDAgMjsKLSAgICBtYXJnaW4tcmlnaHQ6IC0x
MnB4OwotICAgIHBhZGRpbmctbGVmdDogMThweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAycHg7Ci0g
ICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICBsaW5lLWhlaWdodDogMjNweDsKLSAgICBmbG9h
dDogcmlnaHQ7Ci19Ci0KLS5jcnVtYnMgLmNydW1iLmNvbGxhcHNlZCA+ICogewotICAgIGRpc3Bs
YXk6IG5vbmU7Ci19Ci0KLS5jcnVtYnMgLmNydW1iLmNvbGxhcHNlZDo6YmVmb3JlIHsKLSAgICBj
b250ZW50OiAiXDIwMjYiOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0uY3J1bWJzIC5j
cnVtYi5jb21wYWN0IC5leHRyYSB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLmNydW1icyAu
Y3J1bWIuc3RhcnQgewotICAgIHBhZGRpbmctbGVmdDogN3B4OwotfQotCi0uY3J1bWJzIC5jcnVt
Yi5lbmQgewotICAgIGJvcmRlci13aWR0aDogMCAycHggMCAycHg7Ci0gICAgcGFkZGluZy1yaWdo
dDogNnB4OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3NlZ21lbnRFbmQu
cG5nKSAwIDIgMCAyOwotfQotCi0uY3J1bWJzIC5jcnVtYi5zZWxlY3RlZCB7Ci0gICAgLXdlYmtp
dC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvc2VnbWVudFNlbGVjdGVkLnBuZykgMCAxMiAwIDI7
Ci0gICAgY29sb3I6IGJsYWNrOwotICAgIHRleHQtc2hhZG93OiByZ2JhKDI1NSwgMjU1LCAyNTUs
IDAuNSkgMCAxcHggMDsKLX0KLQotLmNydW1icyAuY3J1bWIuc2VsZWN0ZWQ6aG92ZXIgewotICAg
IC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3NlZ21lbnRTZWxlY3RlZC5wbmcpIDAg
MTIgMCAyOwotfQotCi0uY3J1bWJzIC5jcnVtYi5zZWxlY3RlZC5lbmQsIC5jcnVtYnMgLmNydW1i
LnNlbGVjdGVkLmVuZDpob3ZlciB7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFn
ZXMvc2VnbWVudFNlbGVjdGVkRW5kLnBuZykgMCAyIDAgMjsKLX0KLQotLmNydW1icyAuY3J1bWI6
aG92ZXIgewotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3NlZ21lbnRIb3Zl
ci5wbmcpIDAgMTIgMCAyOwotICAgIGNvbG9yOiBibGFjazsKLX0KLQotLmNydW1icyAuY3J1bWIu
ZW5kOmhvdmVyIHsKLSAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy9zZWdtZW50
SG92ZXJFbmQucG5nKSAwIDIgMCAyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9icmVha3BvaW50c0xpc3QuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9icmVha3BvaW50c0xpc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2MWVhMWViLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvYnJlYWtwb2ludHNMaXN0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDExMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW50aG9ueSBSaWNh
dWQgPHJpa0B3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS5zaWRlYmFyLXBhbmUgPiAuYm9keSAuYnJlYWtwb2ludC1jb25k
aXRpb24gewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIG1hcmdpbi10b3A6IDRweDsKLSAgICBt
YXJnaW4tYm90dG9tOiA0cHg7Ci0gICAgbWFyZ2luLWxlZnQ6IDIzcHg7Ci0gICAgbWFyZ2luLXJp
Z2h0OiA4cHg7Ci19Ci0KLSNicmVha3BvaW50LWNvbmRpdGlvbi1pbnB1dCB7Ci0gICAgZGlzcGxh
eTogYmxvY2s7Ci0gICAgbWFyZ2luLWxlZnQ6IDA7Ci0gICAgbWFyZ2luLXJpZ2h0OiAwOwotICAg
IG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoNjYl
LCA2NiUsIDY2JSk7Ci19Ci0KLW9sLmJyZWFrcG9pbnQtbGlzdCB7Ci0gICAgLXdlYmtpdC1wYWRk
aW5nLXN0YXJ0OiAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAgbWFyZ2luOiAwOwotfQot
Ci0uYnJlYWtwb2ludHMtbGlzdC1kZWFjdGl2YXRlZCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDI0NSwgMjQ1LCAyNDUpOwotICAgIG9wYWNpdHk6IDAuMzsKLX0KLQotLmJyZWFrcG9pbnQt
bGlzdCBsaSB7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICB0ZXh0LW92ZXJmbG93OiBl
bGxpcHNpczsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHBhZGRpbmc6IDJweCAwOwotICAg
IGNvbG9yOiBibGFjazsKLX0KLQotLmJyZWFrcG9pbnQtbGlzdCBsaTpob3ZlciB7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSg1NiwgMTIxLCAyMTcsIDAuMik7Ci19Ci0KLS5icmVha3BvaW50
LWxpc3QgLmNoZWNrYm94LWVsZW0gewotICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICBtYXJnaW46
IDAgNHB4OwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZl
OwotICAgIHotaW5kZXg6IDE7Ci19Ci0KLS5icmVha3BvaW50LWxpc3QgLnNvdXJjZS10ZXh0IHsK
LSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwot
ICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgbWFyZ2luOiAycHggMCAwcHggMjBweDsKLX0KLQot
LnNpZGViYXItcGFuZSAuYnJlYWtwb2ludC1oaXQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJn
YigyNTUsIDI1NSwgMTk0KTsKLX0KLQotbGkuYnJlYWtwb2ludC1oaXQgLmJyZWFrcG9pbnQtaGl0
LW1hcmtlciB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAxOTQpOwotICAg
IGhlaWdodDogMThweDsKLSAgICBsZWZ0OiAwcHg7Ci0gICAgbWFyZ2luLXRvcDogLTE2cHg7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwcHg7Ci0gICAgei1pbmRleDogLTE7
Ci19Ci0KLS5ldmVudC1saXN0ZW5lci1icmVha3BvaW50cyAuZXZlbnQtY2F0ZWdvcnkgewotICAg
IHBhZGRpbmctdG9wOiAycHg7Ci19Ci0KLS5ldmVudC1saXN0ZW5lci1icmVha3BvaW50cy5wcm9w
ZXJ0aWVzLXRyZWUgLmNoaWxkcmVuIGxpIHsKLSAgICBtYXJnaW4tbGVmdDogMTJweDsKLSAgICBo
ZWlnaHQ6IDE2cHg7Ci19Ci0KLS5ldmVudC1saXN0ZW5lci1icmVha3BvaW50cyAuY2hlY2tib3gt
ZWxlbSB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgdG9wOiAtMnB4OwotICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKLSAgICBsZWZ0OiAtMXB4OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9idWlsZFN5c3RlbU9ubHkuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2J1aWxkU3lzdGVtT25seS5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2JlMDdmNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2J1aWxkU3lzdGVtT25seS5qcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAs
MCBAQAotLyoqCi0gKiBUaGlzIGZsYWcgbm90aWZpZXMgaW5zcGVjdG9yIHRoYXQgaXQgd2FzIGRl
cGxveWVkIHdpdGggdGhlIGhlbHAKLSAqIG9mIGEgYnVpbGQgc3lzdGVtLiBCdWlsZCBzeXN0ZW0g
ZmxhdHRlbmVzIGFsbCBjc3MgYW5kIGpzIGZpbGVzLAotICogc28gaW4gdGhpcyBjYXNlIGluc3Bl
Y3RvciBoYXMgdG8gY29ycmVjdCBwYXRocyBmb3IgZHluYW1pYyByZXNvdXJjZSBsb2FkaW5nLgot
ICovCi13aW5kb3cuZmxhdHRlbkltcG9ydHMgPSB0cnVlOwotd2luZG93LkRFQlVHID0gZmFsc2U7
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9jYW52YXNQcm9maWxlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTE0ZDE2NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwMCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLmNhbnZhcy1wcm9maWxlLXZpZXcgewotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0
OiAwOwotICAgIGJvdHRvbTogMDsKLX0KLQotI2NhbnZhcy1yZXBsYXktaW1hZ2UtY29udGFpbmVy
IHsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7
Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwYWRkaW5nOiA1cHggNXB4IDEwcHggNXB4Owot
ICAgIGNvbG9yOiB3aGl0ZTsKLX0KLQotLmNhbnZhcy1yZXBsYXktaW1hZ2UgewotICAgIHpvb206
IDEwMDsKLSAgICBoZWlnaHQ6IGF1dG87Ci0gICAgd2lkdGg6IGF1dG87Ci0gICAgbWF4LXdpZHRo
OiAxMDAlOwotICAgIG1heC1oZWlnaHQ6IDEwMCU7Ci0gICAgbWFyZ2luOiBhdXRvOwotICAgIGRp
c3BsYXk6IGJsb2NrOwotfQotCi0uY2FudmFzLWRlYnVnLWluZm8gewotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogNnB4Owot
fQotCi0uY2FudmFzLXNwaW5uZXItaWNvbiB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9zcGlu
bmVyQWN0aXZlU2VsZWN0ZWQuZ2lmKTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lk
dGg6IDE2cHg7Ci0gICAgcmlnaHQ6IDRweDsKLSAgICBib3R0b206IDRweDsKLX0KLQotLmNhbnZh
cy1yZXBsYXktbG9nIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAyNHB4Owot
ICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotfQotCi0uY2FudmFz
LXJlcGxheS1maXJzdC1zdGVwIGltZyB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9kZWJ1Z2dl
ckNvbnRpbnVlLnBuZyk7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwot
fQotLmNhbnZhcy1yZXBsYXktbmV4dC1zdGVwIGltZyB7Ci0gICAgY29udGVudDogdXJsKEltYWdl
cy9kZWJ1Z2dlclN0ZXBJbnRvLnBuZyk7Ci19Ci0uY2FudmFzLXJlcGxheS1wcmV2LXN0ZXAgaW1n
IHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2RlYnVnZ2VyU3RlcE91dC5wbmcpOwotfQotLmNh
bnZhcy1yZXBsYXktbGFzdC1zdGVwIGltZyB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9kZWJ1
Z2dlckNvbnRpbnVlLnBuZyk7Ci19Ci0uY2FudmFzLXJlcGxheS1wcmV2LWRyYXcgaW1newotICAg
IGNvbnRlbnQ6IHVybChJbWFnZXMvZGVidWdnZXJTdGVwT3Zlci5wbmcpOwotICAgIC13ZWJraXQt
dHJhbnNmb3JtOiBzY2FsZVgoLTEpOwotfQotLmNhbnZhcy1yZXBsYXktbmV4dC1kcmF3IGltZ3sK
LSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2RlYnVnZ2VyU3RlcE92ZXIucG5nKTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY3NzTmFtZWRGbG93cy5j
c3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2Nzc05hbWVkRmxvd3MuY3Nz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzM4N2Q1Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY3NzTmFtZWRGbG93cy5jc3MKKysrIC9k
ZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0uY3NzLW5hbWVkLWZsb3ctY29sbGVjdGlv
bnMtdmlldyAuc3BsaXQtdmlldy1zaWRlYmFyIHsKLSAgICBvdmVyZmxvdy14OiBoaWRkZW47Ci19
Ci0KLS5jc3MtbmFtZWQtZmxvdy1jb2xsZWN0aW9ucy12aWV3IC50YWJiZWQtcGFuZS1oZWFkZXIg
ewotICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSAwJSwgMCUgMTAw
JSwgZnJvbShyZ2IoMjM2LCAyMzYsIDIzNikpLCB0byhyZ2IoMjE3LCAyMTcsIDIxNykpKTsKLX0K
LQotLmNzcy1uYW1lZC1mbG93LWNvbGxlY3Rpb25zLXZpZXcgLmluZm8gewotICAgIGZvbnQtc3R5
bGU6IGl0YWxpYzsKLSAgICBmb250LXNpemU6IDEwcHg7Ci0gICAgbWFyZ2luLXRvcDogLTVweDsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiA1MCU7Ci0gICAgdGV4dC1hbGlnbjog
Y2VudGVyOwotICAgIHdpZHRoOiAxMDAlOwotfQotCi0uY3NzLW5hbWVkLWZsb3ctY29sbGVjdGlv
bnMtdmlldyAuc3BsaXQtdmlldy1zaWRlYmFyIC5zaWRlYmFyLWNvbnRlbnQgewotICAgIGJvdHRv
bTogMHB4OwotICAgIGxlZnQ6IDBweDsKLSAgICBwYWRkaW5nOiAwcHg7Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIHJpZ2h0OiAwcHg7Ci0gICAgdG9wOiAyM3B4OwotfQotCi0uY3NzLW5h
bWVkLWZsb3ctY29sbGVjdGlvbnMtdmlldyAuc3BsaXQtdmlldy1zaWRlYmFyIC5zZWxlY3Rpb24g
ewotICAgIG1hcmdpbi1sZWZ0OiAtMTJweDsKLSAgICB6LWluZGV4OiAwOwotfQotCi0uY3NzLW5h
bWVkLWZsb3ctY29sbGVjdGlvbnMtdmlldyAuc3BsaXQtdmlldy1jb250ZW50cyAudGl0bGUgewot
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLQotLmNzcy1uYW1lZC1mbG93LWNvbGxlY3Rpb25z
LXZpZXcgLnNwbGl0LXZpZXctc2lkZWJhciAubmFtZWQtZmxvdy1vdmVyZmxvdzo6YmVmb3JlLCAu
Y3NzLW5hbWVkLWZsb3ctY29sbGVjdGlvbnMtdmlldyAucmVnaW9uLWVtcHR5OmJlZm9yZSwgLmNz
cy1uYW1lZC1mbG93LWNvbGxlY3Rpb25zLXZpZXcgLnJlZ2lvbi1maXQ6OmJlZm9yZSwgLmNzcy1u
YW1lZC1mbG93LWNvbGxlY3Rpb25zLXZpZXcgLnJlZ2lvbi1vdmVyc2V0OjpiZWZvcmUgewotICAg
IGN1cnNvcjogZGVmYXVsdDsKLSAgICBmbG9hdDogbGVmdDsKLSAgICBoZWlnaHQ6IDEwcHg7Ci0g
ICAgbWFyZ2luLXRvcDogMXB4OwotICAgIG9wYWNpdHk6IDAuNzU7Ci0gICAgcG9zaXRpb246IHJl
bGF0aXZlOwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci0gICAgei1pbmRleDogMTsKLX0K
LQotLmNzcy1uYW1lZC1mbG93LWNvbGxlY3Rpb25zLXZpZXcgLnNwbGl0LXZpZXctc2lkZWJhciAu
bmFtZWQtZmxvdy1vdmVyZmxvdzo6YmVmb3JlIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL25h
bWVkRmxvd092ZXJmbG93LnBuZyk7Ci0gICAgbWFyZ2luOiAycHggM3B4IDBweCAtMTNweDsKLX0K
LQotLmNzcy1uYW1lZC1mbG93LWNvbGxlY3Rpb25zLXZpZXcgLnJlZ2lvbi1lbXB0eTo6YmVmb3Jl
IHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3JlZ2lvbkVtcHR5LnBuZyk7Ci19Ci0KLS5jc3Mt
bmFtZWQtZmxvdy1jb2xsZWN0aW9ucy12aWV3IC5yZWdpb24tZml0OjpiZWZvcmUgewotICAgIGNv
bnRlbnQ6IHVybChJbWFnZXMvcmVnaW9uRml0LnBuZyk7Ci19Ci0KLS5jc3MtbmFtZWQtZmxvdy1j
b2xsZWN0aW9ucy12aWV3IC5yZWdpb24tb3ZlcnNldDo6YmVmb3JlIHsKLSAgICBjb250ZW50OiB1
cmwoSW1hZ2VzL3JlZ2lvbk92ZXJzZXQucG5nKTsKLX0KLQotLmNzcy1uYW1lZC1mbG93LWNvbGxl
Y3Rpb25zLXZpZXcgLnNwbGl0LXZpZXctY29udGVudHMgLm5hbWVkLWZsb3ctZWxlbWVudCB7Ci0g
ICAgbWFyZ2luOiAwcHggMHB4IDBweCAtMjRweDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZGF0YUdyaWQuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9kYXRhR3JpZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDVhNjU4YjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9kYXRhR3JpZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLmRhdGEt
Z3JpZCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNh
YWE7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotfQotCi0uZGF0YS1ncmlkIC5oaWdobGlnaHQgewot
ICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDIzMCwgMTc5KTsKLX0KLQotLmRhdGEtZ3Jp
ZCB0ci5zZWxlY3RlZCAuaGlnaGxpZ2h0IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3Bh
cmVudDsKLX0KLQotLmRhdGEtZ3JpZCB0YWJsZSB7Ci0gICAgdGFibGUtbGF5b3V0OiBmaXhlZDsK
LSAgICBib3JkZXItc3BhY2luZzogMDsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwot
ICAgIHdpZHRoOiAxMDAlOwotfQotCi0uZGF0YS1ncmlkIC5kYXRhLWNvbnRhaW5lciB7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMTZweDsKLSAgICBib3R0b206IDA7Ci0gICAg
bGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBvdmVyZmxvdy14OiBoaWRkZW47Ci0gICAgb3Zl
cmZsb3cteTogb3ZlcmxheTsKLX0KLQotLmRhdGEtZ3JpZC5pbmxpbmUgewotICAgIGJvcmRlci1y
aWdodDogbm9uZTsKLX0KLQotLmRhdGEtZ3JpZC5pbmxpbmUgLmRhdGEtY29udGFpbmVyIHsKLSAg
ICBwb3NpdGlvbjogc3RhdGljOwotfQotCi0uZGF0YS1ncmlkLmlubGluZSB0aC5jb3JuZXIsCi0u
ZGF0YS1ncmlkLmlubGluZSB0ZC5jb3JuZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5k
YXRhLWdyaWQgdGggewotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgYmFja2dyb3VuZC1pbWFn
ZTogdXJsKEltYWdlcy9nbG9zc3lIZWFkZXIucG5nKTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDog
cmVwZWF0LXg7Ci0gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiKDE3OSwgMTc5LCAxNzkp
OwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTc5LCAxNzksIDE3OSk7Ci0gICAg
aGVpZ2h0OiAxNXB4OwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgdmVydGljYWwtYWxp
Z246IG1pZGRsZTsKLSAgICBwYWRkaW5nOiAwIDRweDsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFw
OwotfQotCi0uZGF0YS1ncmlkIHRoLmNvcm5lciwKLS5kYXRhLWdyaWQgdGQuY29ybmVyIHsKLSAg
ICB3aWR0aDogMTRweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7Ci0gICAgcGFkZGluZy1sZWZ0
OiAwcHg7Ci0gICAgYm9yZGVyLXJpZ2h0OiAwIG5vbmUgdHJhbnNwYXJlbnQgIWltcG9ydGFudDsK
LX0KLQotLmRhdGEtZ3JpZCB0ci5maWxsZXIgewotICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1w
b3J0YW50OwotICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50OwotfQotCi0uZGF0YS1ncmlkIHRy
LmZpbGxlciB0ZCB7Ci0gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Ci0gICAgcGFkZGluZzog
MCAhaW1wb3J0YW50OwotfQotCi0uZGF0YS1ncmlkIHRhYmxlLmRhdGEgewotICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKLSAgICBsZWZ0OiAwOwotICAgIHRvcDogMDsKLSAgICByaWdodDogMDsKLSAg
ICBib3R0b206IDA7Ci0gICAgaGVpZ2h0OiAxMDAlOwotICAgIGJvcmRlci10b3A6IDAgbm9uZSB0
cmFuc3BhcmVudDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHdoaXRlKSwgY29sb3Itc3RvcCgwLjUsIHdo
aXRlKSwgY29sb3Itc3RvcCgwLjUsIHJnYigyMzQsIDI0MywgMjU1KSksIHRvKHJnYigyMzQsIDI0
MywgMjU1KSkpOwotICAgIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAxcHggMzJweDsKLSAgICB0
YWJsZS1sYXlvdXQ6IGZpeGVkOwotfQotCi0uZGF0YS1ncmlkLmlubGluZSB0YWJsZS5kYXRhIHsK
LSAgICBwb3NpdGlvbjogc3RhdGljOwotfQotCi0uZGF0YS1ncmlkIHRhYmxlLmRhdGEgdHIgewot
ICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5kYXRhLWdyaWQgdGFibGUuZGF0YSB0ci5yZXZlYWxl
ZCB7Ci0gICAgZGlzcGxheTogdGFibGUtcm93OwotfQotCi0uZGF0YS1ncmlkIHRkIHsKLSAgICB2
ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIGhlaWdodDogMTZweDsgLyogS2VlcCBpbiBzeW5jIHdp
dGggLmRhdGEtZ3JpZCB0YWJsZS5kYXRhIEAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUgKi8KLSAg
ICBsaW5lLWhlaWdodDogMTNweDsKLSAgICBwYWRkaW5nOiAxcHggNHB4OwotICAgIHdoaXRlLXNw
YWNlOiBub3dyYXA7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBib3JkZXItcmlnaHQ6IDFw
eCBzb2xpZCAjYWFhOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci19Ci0KLS5kYXRh
LWdyaWQgdGQgPiBkaXYsIC5kYXRhLWdyaWQgdGggPiBkaXYgewotICAgIHdoaXRlLXNwYWNlOiBu
b3dyYXA7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3ZlcmZsb3c6IGhpZGRl
bjsKLX0KLQotLmRhdGEtZ3JpZCB0ZC5lZGl0aW5nID4gZGl2IHsKLSAgICB0ZXh0LW92ZXJmbG93
OiBjbGlwOwotfQotCi0uZGF0YS1ncmlkIC5jZW50ZXIgZGl2IHsKLSAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7Ci19Ci0KLS5kYXRhLWdyaWQgLnJpZ2h0IGRpdiB7Ci0gICAgdGV4dC1hbGlnbjogcmln
aHQ7Ci19Ci0KLS5kYXRhLWdyaWQgdGguc29ydGFibGUgZGl2IHsKLSAgICBwb3NpdGlvbjogcmVs
YXRpdmU7Ci19Ci0KLS5kYXRhLWdyaWQgdGguc29ydGFibGU6YWN0aXZlIHsKLSAgICBiYWNrZ3Jv
dW5kLWltYWdlOiB1cmwoSW1hZ2VzL2dsb3NzeUhlYWRlclByZXNzZWQucG5nKTsKLX0KLS5kYXRh
LWdyaWQgdGguc29ydC1hc2NlbmRpbmcsIC5kYXRhLWdyaWQgdGguc29ydC1kZXNjZW5kaW5nIHsK
LSAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2IoMTA3LCAxNDAsIDE5Nik7Ci0gICAgYm9y
ZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxMDcsIDE0MCwgMTk2KTsKLSAgICBiYWNrZ3JvdW5k
LWltYWdlOiB1cmwoSW1hZ2VzL2dsb3NzeUhlYWRlclNlbGVjdGVkLnBuZyk7Ci0gICAgYmFja2dy
b3VuZC1yZXBlYXQ6IHJlcGVhdC14OwotfQotCi0uZGF0YS1ncmlkIHRoLnNvcnRhYmxlLnNvcnQt
YXNjZW5kaW5nOmFjdGl2ZSwgLmRhdGEtZ3JpZCB0aC5zb3J0YWJsZS5zb3J0LWRlc2NlbmRpbmc6
YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL2dsb3NzeUhlYWRlclNl
bGVjdGVkUHJlc3NlZC5wbmcpOwotfQotCi0uZGF0YS1ncmlkIHRoLnNvcnQtYXNjZW5kaW5nID4g
ZGl2OjphZnRlciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAg
IGhlaWdodDogMTJweDsKLSAgICBtYXJnaW4tYm90dG9tOiBhdXRvOwotICAgIG1hcmdpbi10b3A6
IGF1dG87Ci0gICAgd2lkdGg6IDhweDsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3RyZWVVcFRy
aWFuZ2xlQmxhY2sucG5nKTsKLX0KLQotLmRhdGEtZ3JpZCB0aC5zb3J0LWRlc2NlbmRpbmcgPiBk
aXY6OmFmdGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAg
aGVpZ2h0OiA4cHg7Ci0gICAgbWFyZ2luLWJvdHRvbTogYXV0bzsKLSAgICBtYXJnaW4tdG9wOiBh
dXRvOwotICAgIHdpZHRoOiA4cHg7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90cmVlRG93blRy
aWFuZ2xlQmxhY2sucG5nKTsKLX0KLQotLmRhdGEtZ3JpZCBidXR0b24gewotICAgIGxpbmUtaGVp
Z2h0OiAxOHB4OwotICAgIGNvbG9yOiBpbmhlcml0OwotfQotCi1ib2R5LmluYWN0aXZlIC5kYXRh
LWdyaWQgdGguc29ydC1hc2NlbmRpbmcsIGJvZHkuaW5hY3RpdmUgLmRhdGEtZ3JpZCB0aC5zb3J0
LWRlc2NlbmRpbmcgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvZ2xvc3N5SGVh
ZGVyLnBuZyk7Ci0gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiKDE3OSwgMTc5LCAxNzkp
OwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTc5LCAxNzksIDE3OSk7Ci19Ci0K
LS5kYXRhLWdyaWQgdHIucGFyZW50IHRkLmRpc2Nsb3N1cmU6OmJlZm9yZSB7Ci0gICAgZmxvYXQ6
IGxlZnQ7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90cmVlUmlnaHRUcmlhbmdsZUJsYWNrLnBu
Zyk7Ci0gICAgd2lkdGg6IDhweDsKLSAgICBoZWlnaHQ6IDhweDsKLSAgICBtYXJnaW4tcmlnaHQ6
IDJweDsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotfQotCi0uZGF0YS1ncmlkIHRy
LmV4cGFuZGVkIHRkLmRpc2Nsb3N1cmU6OmJlZm9yZSB7Ci0gICAgY29udGVudDogdXJsKEltYWdl
cy90cmVlRG93blRyaWFuZ2xlQmxhY2sucG5nKTsKLSAgICB3aWR0aDogOHB4OwotICAgIGhlaWdo
dDogOHB4OwotICAgIG1hcmdpbi10b3A6IDFweDsKLX0KLQotLmRhdGEtZ3JpZCB0ci5zZWxlY3Rl
ZCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIxMiwgMjEyLCAyMTIpOwotICAgIGNvbG9y
OiBpbmhlcml0OwotfQotCi0uZGF0YS1ncmlkOmZvY3VzIHRyLnNlbGVjdGVkIHsKLSAgICBiYWNr
Z3JvdW5kLWNvbG9yOiByZ2IoNTYsIDEyMSwgMjE3KTsKLSAgICBjb2xvcjogd2hpdGU7Ci19Ci0K
LS5kYXRhLWdyaWQ6Zm9jdXMgdHIuc2VsZWN0ZWQgYSB7Ci0gICAgY29sb3I6IHdoaXRlOwotfQot
Ci0uZGF0YS1ncmlkOmZvY3VzIHRyLnBhcmVudC5zZWxlY3RlZCB0ZC5kaXNjbG9zdXJlOjpiZWZv
cmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZVJpZ2h0VHJpYW5nbGVXaGl0ZS5wbmcp
OwotfQotCi0uZGF0YS1ncmlkOmZvY3VzIHRyLmV4cGFuZGVkLnNlbGVjdGVkIHRkLmRpc2Nsb3N1
cmU6OmJlZm9yZSB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90cmVlRG93blRyaWFuZ2xlV2hp
dGUucG5nKTsKLX0KLQotLmRhdGEtZ3JpZCB0cjpub3QoLnBhcmVudCkgdGQuZGlzY2xvc3VyZSB7
Ci0gICAgdGV4dC1pbmRlbnQ6IDEwcHg7Ci19Ci0KLS5kYXRhLWdyaWQtcmVzaXplciB7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgd2lk
dGg6IDVweDsKLSAgICB6LWluZGV4OiA1MDA7Ci0gICAgY3Vyc29yOiBjb2wtcmVzaXplOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9kaWFsb2cuY3Nz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9kaWFsb2cuY3NzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM5YWFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZGlhbG9nLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ0
ICswLDAgQEAKLS5kaWFsb2cgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICAKLSAgICBw
YWRkaW5nOiAxMHB4OwotICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Ci0gICAgYm9yZGVyOiAxcHgg
c29saWQgZ3JheTsKLQotICAgIC13ZWJraXQtYm94LXNoYWRvdzogcmdiKDQwLDQwLDQwKSAwcHgg
MHB4IDUwcHg7Ci0gICAgCi0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotICAgIC13ZWJraXQt
ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Vi
a2l0LWdyYWRpZW50KGxpbmVhciwgMCUgMCUsIDAlIDEwMCUsIGZyb20oI0U5RTlFOSksIHRvKCND
RkNGQ0YpKTsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgZm9udC1mYW1pbHk6ICdMdWNpZGEg
R3JhbmRlJywgc2Fucy1zZXJpZjsKLX0KLQotLmRpYWxvZy1jb250ZW50cyB7Ci0gICAgd2lkdGg6
IDEwMCU7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIGZvbnQtZmFtaWx5OiAnTHVjaWRhIEdy
YW5kZScsIHNhbnMtc2VyaWY7Ci19Ci0KLS5nby10by1saW5lLWRpYWxvZyBpbnB1dCB7Ci0gICAg
Zm9udC1zaXplOiAxMXB4OwotfQotCi0uZ28tdG8tbGluZS1kaWFsb2cgYnV0dG9uIHsKLSAgICBm
b250LXNpemU6IDExcHg7Ci0gICAgY29sb3I6IHJnYig2LCA2LCA2KTsKLSAgICBib3JkZXI6IDFw
eCBzb2xpZCByZ2IoMTY1LCAxNjUsIDE2NSk7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIz
NywgMjM3LCAyMzcpOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGlu
ZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDI1MiwgMjUyLCAyNTIpKSwgdG8o
cmdiKDIyMywgMjIzLCAyMjMpKSk7Ci0gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxMnB4Owot
ICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLQotICAgIHBhZGRpbmc6IDNweCAyMHB4Owot
ICAgIG1hcmdpbjogMCAwIDAgMTBweDsKLX0KLQotLmdvLXRvLWxpbmUtZGlhbG9nIGJ1dHRvbjph
Y3RpdmUgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMTUsIDIxNSwgMjE1KTsKLSAgICBi
YWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQg
Ym90dG9tLCBmcm9tKHJnYigxOTQsIDE5NCwgMTk0KSksIHRvKHJnYigyMzksIDIzOSwgMjM5KSkp
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVt
ZW50c1BhbmVsLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVu
dHNQYW5lbC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZWY3N2QuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVs
LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDYwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQW50aG9ueSBSaWNhdWQgPHJpa0B3ZWJraXQub3JnPgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNlbGVtZW50
cy1jb250ZW50IHsKLSAgICBwYWRkaW5nLWxlZnQ6IDA7Ci19Ci0KLSNlbGVtZW50cy1jb250ZW50
ID4gb2wgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBtaW4taGVpZ2h0OiAxMDAl
OwotfQotCi0jZWxlbWVudHMtY29udGVudCAuZWRpdGluZyB7Ci0gICAgbWFyZ2luLWxlZnQ6IDhw
eDsKLX0KLQotI2VsZW1lbnRzLWNvbnRlbnQgLmVsZW1lbnRzLWd1dHRlci1kZWNvcmF0aW9uIHsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgbGVmdDogMXB4OwotICAgIG1hcmdpbi10b3A6
IDJweDsKLSAgICBoZWlnaHQ6IDhweDsKLSAgICB3aWR0aDogOHB4OwotICAgIGJvcmRlci1yYWRp
dXM6IDRweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBvcmFuZ2U7Ci0gICAgYmFja2dyb3VuZC1j
b2xvcjogb3JhbmdlOwotfQotCi0jZWxlbWVudHMtY29udGVudCAuZWxlbWVudHMtZ3V0dGVyLWRl
Y29yYXRpb24uZWxlbWVudHMtaGFzLWRlY29yYXRlZC1jaGlsZHJlbiB7Ci0gICAgb3BhY2l0eTog
MC41OwotfQotCi0jZWxlbWVudHMtY29udGVudCAuQ29kZU1pcnJvciB7Ci0gICAgLyogQ29uc2lz
dGVudCB3aXRoIHRoZSAuZWRpdGluZyBjbGFzcyBpbiBpbnNwZWN0b3IuY3NzICovCi0gICAgLXdl
YmtpdC1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIC41KSAzcHggM3B4IDRweDsKLSAgICBvdXRs
aW5lOiAxcHggc29saWQgcmdiKDY2JSwgNjYlLCA2NiUpICFpbXBvcnRhbnQ7Ci0gICAgYmFja2dy
b3VuZC1jb2xvcjogd2hpdGU7Ci19Ci0KLSNlbGVtZW50cy1jb250ZW50IC5Db2RlTWlycm9yIHBy
ZSB7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotI2VsZW1lbnRzLWNvbnRlbnQgLkNvZGVNaXJyb3It
bGluZXMgewotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLS5lbGVtZW50cy10cmVlLWVkaXRvciB7Ci0g
ICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLSAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiBy
ZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5OwotfQotCi0ubWV0cmljcyB7Ci0gICAgcGFkZGluZzog
OHB4OwotICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAg
d2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLQotLm1ldHJpY3MgLmxhYmVsIHsKLSAgICBwb3NpdGlv
bjogYWJzb2x1dGU7Ci0gICAgZm9udC1zaXplOiAxMHB4OwotICAgIGNvbG9yOiBibGFjazsKLSAg
ICBtYXJnaW4tbGVmdDogM3B4OwotICAgIHBhZGRpbmctbGVmdDogMnB4OwotICAgIHBhZGRpbmct
cmlnaHQ6IDJweDsKLX0KLQotLm1ldHJpY3MgLnBvc2l0aW9uIHsKLSAgICBib3JkZXI6IDFweCBy
Z2IoNjYlLCA2NiUsIDY2JSkgZG90dGVkOwotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwot
ICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAg
cGFkZGluZzogM3B4OwotICAgIG1hcmdpbjogM3B4OwotfQotCi0ubWV0cmljcyAubWFyZ2luIHsK
LSAgICBib3JkZXI6IDFweCBkYXNoZWQ7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB2
ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotICAgIHBhZGRpbmc6IDNweDsKLSAgICBtYXJnaW46IDNw
eDsKLX0KLQotLm1ldHJpY3MgLmJvcmRlciB7Ci0gICAgYm9yZGVyOiAxcHggYmxhY2sgc29saWQ7
Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwot
ICAgIHBhZGRpbmc6IDNweDsKLSAgICBtYXJnaW46IDNweDsKLX0KLQotLm1ldHJpY3MgLnBhZGRp
bmcgewotICAgIGJvcmRlcjogMXB4IGdyZXkgZGFzaGVkOwotICAgIGJhY2tncm91bmQtY29sb3I6
IHdoaXRlOwotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLSAgICBwYWRkaW5nOiAzcHg7Ci0gICAg
bWFyZ2luOiAzcHg7Ci19Ci0KLS5tZXRyaWNzIC5jb250ZW50IHsKLSAgICBwb3NpdGlvbjogc3Rh
dGljOwotICAgIGJvcmRlcjogMXB4IGdyYXkgc29saWQ7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
d2hpdGU7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHRleHQtYWxpZ246IGNlbnRl
cjsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotICAgIHBhZGRpbmc6IDNweDsKLSAgICBt
YXJnaW46IDNweDsKLSAgICBtaW4td2lkdGg6IDgwcHg7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVy
OwotICAgIG92ZXJmbG93OiB2aXNpYmxlOwotfQotCi0ubWV0cmljcyAuY29udGVudCBzcGFuIHsK
LSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci19Ci0KLS5tZXRyaWNzIC5lZGl0aW5nIHsKLSAg
ICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgei1pbmRleDogMTAwOwotfQotCi0ubWV0cmljcyAu
bGVmdCB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHZlcnRpY2FsLWFsaWduOiBt
aWRkbGU7Ci19Ci0KLS5tZXRyaWNzIC5yaWdodCB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLS5tZXRyaWNzIC50b3AgewotICAg
IGRpc3BsYXk6IGlubGluZS1ibG9jazsKLX0KLQotLm1ldHJpY3MgLmJvdHRvbSB7Ci0gICAgZGlz
cGxheTogaW5saW5lLWJsb2NrOwotfQotCi0KLS5zdHlsZXMtc2VjdGlvbiB7Ci0gICAgcGFkZGlu
ZzogMnB4IDJweCA0cHggNHB4OwotICAgIG1pbi1oZWlnaHQ6IDE4cHg7Ci0gICAgd2hpdGUtc3Bh
Y2U6IG5vd3JhcDsKLSAgICAtd2Via2l0LWJhY2tncm91bmQtb3JpZ2luOiBwYWRkaW5nOwotICAg
IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOwotICAgIC13ZWJraXQtdXNlci1zZWxl
Y3Q6IHRleHQ7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbjpub3QoLmZpcnN0LXN0eWxlcy1zZWN0aW9u
KSB7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYigxOTEsIDE5MSwgMTkxKTsKLX0KLQot
LnN0eWxlcy1zZWN0aW9uLnJlYWQtb25seSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0
MCwgMjQwLCAyNDApOwotfQotCi0uc3R5bGVzLXNlY3Rpb24gLnByb3BlcnRpZXMgbGkubm90LXBh
cnNlZC1vayB7Ci0gICAgbWFyZ2luLWxlZnQ6IDBweDsKLX0KLQotLnN0eWxlcy1zZWN0aW9uLmNv
bXB1dGVkLXN0eWxlIC5wcm9wZXJ0aWVzIGxpLm5vdC1wYXJzZWQtb2sgewotICAgIG1hcmdpbi1s
ZWZ0OiAtNnB4OwotfQotCi0uc3R5bGVzLXNlY3Rpb24gLnByb3BlcnRpZXMgbGkubm90LXBhcnNl
ZC1vayBpbWcuZXhjbGFtYXRpb24tbWFyayB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy93YXJu
aW5nSWNvbi5wbmcpOwotICAgIG9wYWNpdHk6IDAuNzU7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZl
OwotICAgIGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiAxMnB4OwotICAgIGhlaWdodDogMTBweDsK
LSAgICBtYXJnaW46IDAgNnB4IDAgMDsKLSAgICBsZWZ0OiAtMzhweDsgLyogb3V0ZGVudCB0byBj
b21wZW5zYXRlIGZvciB0aGUgdG9wLWxldmVsIHByb3BlcnR5IGluZGVudCAqLwotICAgIHBhZGRp
bmctbGVmdDogMnB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLSAgICAtd2Via2l0
LXVzZXItc2VsZWN0OiBub25lOwotICAgIGN1cnNvcjogZGVmYXVsdDsKLSAgICB6LWluZGV4OiAx
OwotfQotCi0uc3R5bGVzLXNlY3Rpb24uY29tcHV0ZWQtc3R5bGUgLnByb3BlcnRpZXMgbGkubm90
LXBhcnNlZC1vayBpbWcuZXhjbGFtYXRpb24tbWFyayB7Ci0gICAgbGVmdDogMDsKLX0KLQotLnN0
eWxlcy1zZWN0aW9uIC5oZWFkZXIgewotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgLXdl
YmtpdC1iYWNrZ3JvdW5kLW9yaWdpbjogcGFkZGluZzsKLSAgICAtd2Via2l0LWJhY2tncm91bmQt
Y2xpcDogcGFkZGluZzsKLX0KLQotLnN0eWxlcy1zZWN0aW9uIC5oZWFkZXIgLnRpdGxlIHsKLSAg
ICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ci0gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKLX0KLQot
LnN0eWxlcy1zZWN0aW9uIC5oZWFkZXIgLnRpdGxlIC5tZWRpYSwgLnN0eWxlcy1zZWN0aW9uIC5o
ZWFkZXIgLnRpdGxlIC5tZWRpYSAuc3VidGl0bGUgewotICAgIGNvbG9yOiByZ2IoMTI4LCAxMjgs
IDEyOCk7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotLnN0eWxlcy1zZWN0aW9uIC5oZWFk
ZXIgLnN1YnRpdGxlIHsKLSAgICBjb2xvcjogcmdiKDg1LCA4NSwgODUpOwotICAgIGZsb2F0OiBy
aWdodDsKLSAgICBtYXJnaW4tbGVmdDogNXB4OwotICAgIG1heC13aWR0aDogMTAwJTsKLSAgICB0
ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHdoaXRl
LXNwYWNlOiBub3dyYXA7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbiAuaGVhZGVyIC5zdWJ0aXRsZSBh
IHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0KLQotLnN0eWxlcy1zZWN0aW9uIC5zZWxlY3RvciB7
Ci0gICAgY29sb3I6ICM3Nzc7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbiAuc2VsZWN0b3ItbWF0Y2hl
cyB7Ci0gICAgY29sb3I6IGJsYWNrOwotfQotCi0uc3R5bGVzLXNlY3Rpb24gYVtkYXRhLXVuY29w
eWFibGVdIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci19Ci0KLS5zdHlsZXMtc2VjdGlv
biBhW2RhdGEtdW5jb3B5YWJsZV06OmJlZm9yZSB7Ci0gICAgY29udGVudDogYXR0cihkYXRhLXVu
Y29weWFibGUpOwotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotfQotCi0uc3R5bGVz
LXNlY3Rpb24gLnByb3BlcnRpZXMgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgbWFyZ2luOiAw
OwotICAgIHBhZGRpbmc6IDJweCA0cHggMCA2cHg7Ci0gICAgbGlzdC1zdHlsZTogbm9uZTsKLSAg
ICBjbGVhcjogYm90aDsKLX0KLQotLnN0eWxlcy1zZWN0aW9uLm1hdGNoZWQtc3R5bGVzIC5wcm9w
ZXJ0aWVzIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDA7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbi5uby1h
ZmZlY3QgLnByb3BlcnRpZXMgbGkgewotICAgIG9wYWNpdHk6IDAuNTsKLX0KLQotLnN0eWxlcy1z
ZWN0aW9uLm5vLWFmZmVjdCAucHJvcGVydGllcyBsaS5lZGl0aW5nIHsKLSAgICBvcGFjaXR5OiAx
LjA7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbi5leHBhbmRlZCAucHJvcGVydGllcyB7Ci0gICAgZGlz
cGxheTogYmxvY2s7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbiAucHJvcGVydGllcyBsaSB7Ci0gICAg
bWFyZ2luLWxlZnQ6IDEycHg7Ci0gICAgcGFkZGluZy1sZWZ0OiAyMnB4OwotICAgIHdoaXRlLXNw
YWNlOiBub3JtYWw7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3ZlcmZsb3c6
IGhpZGRlbjsKLSAgICBjdXJzb3I6IGF1dG87Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbi5jb21wdXRl
ZC1zdHlsZS5leHBhbmRlZCAucHJvcGVydGllcyA+IGxpIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDA7
Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbi5jb21wdXRlZC1zdHlsZS5leHBhbmRlZCAucHJvcGVydGll
cyA+IGxpIC53ZWJraXQtY3NzLXByb3BlcnR5IHsKLSAgICBtYXJnaW4tbGVmdDogMDsKLX0KLQot
LnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVzIGxpIC53ZWJraXQtY3NzLXByb3BlcnR5IHsKLSAg
ICBtYXJnaW4tbGVmdDogLTIycHg7IC8qIG91dGRlbnQgdGhlIGZpcnN0IGxpbmUgb2YgbG9uZ2hh
bmQgcHJvcGVydGllcyAoaW4gYW4gZXhwYW5kZWQgc2hvcnRoYW5kKSB0byBjb21wZW5zYXRlIGZv
ciB0aGUgInBhZGRpbmctbGVmdCIgc2hpZnQgaW4gLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVz
IGxpICovCi19Ci0KLS5zdHlsZXMtc2VjdGlvbi5leHBhbmRlZCAucHJvcGVydGllcyA+IGxpIHsK
LSAgICBwYWRkaW5nLWxlZnQ6IDM4cHg7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbiAucHJvcGVydGll
cyA+IGxpIC53ZWJraXQtY3NzLXByb3BlcnR5IHsKLSAgICBtYXJnaW4tbGVmdDogLTM4cHg7IC8q
IG91dGRlbnQgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRvcC1sZXZlbCBwcm9wZXJ0aWVzIHRvIGNv
bXBlbnNhdGUgZm9yIHRoZSAicGFkZGluZy1sZWZ0IiBzaGlmdCBpbiAuc3R5bGVzLXNlY3Rpb24g
LnByb3BlcnRpZXMgPiBsaSAqLwotfQotCi0uc3R5bGVzLXNlY3Rpb24gLnByb3BlcnRpZXMgPiBs
aS5jaGlsZC1lZGl0aW5nIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDhweDsKLX0KLQotLnN0eWxlcy1z
ZWN0aW9uIC5wcm9wZXJ0aWVzID4gbGkuY2hpbGQtZWRpdGluZyAud2Via2l0LWNzcy1wcm9wZXJ0
eSB7Ci0gICAgbWFyZ2luLWxlZnQ6IDA7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbi5tYXRjaGVkLXN0
eWxlcyAucHJvcGVydGllcyBsaSB7Ci0gICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKLX0K
LQotLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVzIGxpLmNoaWxkLWVkaXRpbmcgewotICAgIHdv
cmQtd3JhcDogYnJlYWstd29yZCAhaW1wb3J0YW50OwotICAgIHdoaXRlLXNwYWNlOiBub3JtYWwg
IWltcG9ydGFudDsKLSAgICBwYWRkaW5nLWxlZnQ6IDA7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbiAu
cHJvcGVydGllcyBvbCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBtYXJnaW46IDA7Ci0gICAg
LXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiAxMnB4OwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci19Ci0K
LS5zdHlsZXMtc2VjdGlvbiAucHJvcGVydGllcyBvbC5leHBhbmRlZCB7Ci0gICAgZGlzcGxheTog
YmxvY2s7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbiAucHJvcGVydGllcyBsaS5wYXJlbnQ6OmJlZm9y
ZSB7Ci0gICAgY29udGVudDogbm9uZTsKLX0KLQotLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVz
IGxpLnBhcmVudC5leHBhbmRlZDo6YmVmb3JlIHsKLSAgICBjb250ZW50OiBub25lOwotfQotCi0u
c3R5bGVzLXNlY3Rpb24ubWF0Y2hlZC1zdHlsZXMgLnByb3BlcnRpZXMgbGkucGFyZW50IC5leHBh
bmQtZWxlbWVudCB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90cmVlUmlnaHRUcmlhbmdsZUJs
YWNrLnBuZyk7Ci0gICAgbWFyZ2luLXJpZ2h0OiAxcHg7Ci0gICAgbWFyZ2luLWxlZnQ6IC01cHg7
Ci0gICAgb3BhY2l0eTogMC42OwotfQotCi0uc3R5bGVzLXNlY3Rpb24ubWF0Y2hlZC1zdHlsZXMg
LnByb3BlcnRpZXMgbGkucGFyZW50LmV4cGFuZGVkIC5leHBhbmQtZWxlbWVudCB7Ci0gICAgY29u
dGVudDogdXJsKEltYWdlcy90cmVlRG93blRyaWFuZ2xlQmxhY2sucG5nKTsKLX0KLQotLnN0eWxl
cy1zZWN0aW9uLmNvbXB1dGVkLXN0eWxlIC5wcm9wZXJ0aWVzIGxpLnBhcmVudDo6YmVmb3JlIHsK
LSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3RyZWVSaWdodFRyaWFuZ2xlQmxhY2sucG5nKTsKLSAg
ICBvcGFjaXR5OiAwLjc1OwotICAgIGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiA4cHg7Ci0gICAg
aGVpZ2h0OiA4cHg7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7
Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKLSAgICBjdXJzb3I6IGRlZmF1bHQ7Ci19
Ci0KLS5zdHlsZXMtc2VjdGlvbi5jb21wdXRlZC1zdHlsZSAucHJvcGVydGllcyBsaS5wYXJlbnQu
ZXhwYW5kZWQ6OmJlZm9yZSB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90cmVlRG93blRyaWFu
Z2xlQmxhY2sucG5nKTsKLSAgICBtYXJnaW4tdG9wOiAxcHg7Ci19Ci0KLS5zdHlsZXMtc2VjdGlv
biAucHJvcGVydGllcyBsaSAuaW5mbyB7Ci0gICAgcGFkZGluZy10b3A6IDRweDsKLSAgICBwYWRk
aW5nLWJvdHRvbTogM3B4OwotfQotCi0uc3R5bGVzLXNlY3Rpb24ubWF0Y2hlZC1zdHlsZXM6bm90
KC5yZWFkLW9ubHkpOmhvdmVyIC5wcm9wZXJ0aWVzIC5lbmFibGVkLWJ1dHRvbiB7Ci0gICAgdmlz
aWJpbGl0eTogdmlzaWJsZTsKLX0KLQotLnN0eWxlcy1zZWN0aW9uLm1hdGNoZWQtc3R5bGVzOm5v
dCgucmVhZC1vbmx5KSAucHJvcGVydGllcyBsaS5kaXNhYmxlZCAuZW5hYmxlZC1idXR0b24gewot
ICAgIHZpc2liaWxpdHk6IHZpc2libGU7Ci19Ci0KLS5zdHlsZXMtc2VjdGlvbiAucHJvcGVydGll
cyAuZW5hYmxlZC1idXR0b24gewotICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKLSAgICBmbG9hdDog
bGVmdDsKLSAgICBmb250LXNpemU6IDEwcHg7Ci0gICAgbWFyZ2luOiAwOwotICAgIHZlcnRpY2Fs
LWFsaWduOiB0b3A7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHotaW5kZXg6IDE7Ci0g
ICAgd2lkdGg6IDE4cHg7Ci0gICAgbGVmdDogLTQwcHg7IC8qIG9yaWdpbmFsIC0ycHggKyAoLTM4
cHgpIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBmaXJzdCBsaW5lIG91dGRlbnQgKi8KLX0KLQotLnN0
eWxlcy1zZWN0aW9uLm1hdGNoZWQtc3R5bGVzIC5wcm9wZXJ0aWVzIG9sLmV4cGFuZGVkIHsKLSAg
ICBtYXJnaW4tbGVmdDogMTZweDsKLX0KLQotLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVzIC5v
dmVybG9hZGVkLAotLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVzIC5pbmFjdGl2ZSwKLS5zdHls
ZXMtc2VjdGlvbiAucHJvcGVydGllcyAuZGlzYWJsZWQsCi0uc3R5bGVzLXNlY3Rpb24gLnByb3Bl
cnRpZXMgLm5vdC1wYXJzZWQtb2sgewotICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdo
OwotfQotCi0uc3R5bGVzLXNlY3Rpb24uY29tcHV0ZWQtc3R5bGUgLnByb3BlcnRpZXMgLmRpc2Fi
bGVkIHsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgb3BhY2l0eTogMC41OwotfQot
Ci0uc3R5bGVzLXNlY3Rpb24gLnByb3BlcnRpZXMgLmltcGxpY2l0LCAuc3R5bGVzLXNlY3Rpb24g
LnByb3BlcnRpZXMgLmluaGVyaXRlZCB7Ci0gICAgb3BhY2l0eTogMC41OwotfQotCi0uc3R5bGVz
LWVsZW1lbnQtc3RhdGUtcGFuZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MCwgMjQw
LCAyNDApOwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgbWFyZ2luLXRvcDogLTM4cHg7Ci0g
ICAgLXdlYmtpdC10cmFuc2l0aW9uOiBtYXJnaW4tdG9wIDAuMXMgZWFzZS1pbi1vdXQ7Ci0gICAg
cGFkZGluZy1sZWZ0OiAycHg7Ci19Ci0KLS5zdHlsZXMtZWxlbWVudC1zdGF0ZS1wYW5lLmV4cGFu
ZGVkIHsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDE4OSwgMTg5LCAxODkpOwot
ICAgIG1hcmdpbi10b3A6IDA7Ci19Ci0KLS5zdHlsZXMtZWxlbWVudC1zdGF0ZS1wYW5lID4gdGFi
bGUgewotICAgIHdpZHRoOiAxMDAlOwotICAgIGJvcmRlci1zcGFjaW5nOiAwOwotfQotCi0uc3R5
bGVzLWVsZW1lbnQtc3RhdGUtcGFuZSBpbnB1dCB7Ci0gICAgbWFyZ2luOiAycHg7Ci0gICAgdmVy
dGljYWwtYWxpZ246IC0ycHg7Ci19Ci0KLS5zdHlsZXMtc2VsZWN0b3IgewotICAgIGN1cnNvcjog
dGV4dDsKLX0KLQotLmJvZHkgLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVzIC5pbmhlcml0ZWQg
ewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5ib2R5LnNob3ctaW5oZXJpdGVkIC5zdHlsZXMt
c2VjdGlvbiAucHJvcGVydGllcyAuaW5oZXJpdGVkIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0K
LQotLmFkZC1hdHRyaWJ1dGUgewotICAgIG1hcmdpbi1sZWZ0OiAxcHg7Ci0gICAgbWFyZ2luLXJp
Z2h0OiAxcHg7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLQotLnNlY3Rpb24gLmV2ZW50
LWJhcnMgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5zZWN0aW9uLmV4cGFuZGVkIC5ldmVu
dC1iYXJzIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotLmV2ZW50LWJhciB7Ci0gICAgcG9z
aXRpb246IHJlbGF0aXZlOwotICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwotfQotCi0uZXZlbnQtYmFy
OmZpcnN0LWNoaWxkIHsKLSAgICBtYXJnaW4tdG9wOiAxcHg7Ci19Ci0KLS5ldmVudC1iYXJzIC5l
dmVudC1iYXIgLmhlYWRlciB7Ci0gICAgcGFkZGluZzogMCA4cHggMCAxOHB4OwotICAgIG1pbi1o
ZWlnaHQ6IDE2cHg7Ci0gICAgb3BhY2l0eTogMS4wOwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7
Ci0gICAgLXdlYmtpdC1iYWNrZ3JvdW5kLW9yaWdpbjogcGFkZGluZzsKLSAgICAtd2Via2l0LWJh
Y2tncm91bmQtY2xpcDogcGFkZGluZzsKLX0KLQotLmV2ZW50LWJhcnMgLmV2ZW50LWJhciAuaGVh
ZGVyIC50aXRsZSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBjb2xvcjogYmxhY2s7
Ci0gICAgdGV4dC1zaGFkb3c6IHdoaXRlIDAgMXB4IDA7Ci19Ci0KLS5ldmVudC1iYXJzIC5ldmVu
dC1iYXIgLmhlYWRlciAuc3VidGl0bGUgewotICAgIGNvbG9yOiByZ2JhKDkwLCA5MCwgOTAsIDAu
NzUpOwotfQotCi0uZXZlbnQtYmFycyAuZXZlbnQtYmFyIC5oZWFkZXI6OmJlZm9yZSB7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMnB4OwotICAgIGxlZnQ6IDdweDsKLSAgICB3
aWR0aDogOHB4OwotICAgIGhlaWdodDogOHB4OwotICAgIG9wYWNpdHk6IDAuNzU7Ci0gICAgY29u
dGVudDogdXJsKEltYWdlcy90cmVlUmlnaHRUcmlhbmdsZUJsYWNrLnBuZykgIWltcG9ydGFudDsK
LX0KLQotLmV2ZW50LWJhcnMgLmV2ZW50LWJhci5leHBhbmRlZCAuaGVhZGVyOjpiZWZvcmUgewot
ICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZURvd25UcmlhbmdsZUJsYWNrLnBuZykgIWltcG9y
dGFudDsKLX0KLQotLmltYWdlLXByZXZpZXctY29udGFpbmVyIHsKLSAgICBiYWNrZ3JvdW5kOiB0
cmFuc3BhcmVudDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS5pbWFnZS1wcmV2aWV3
LWNvbnRhaW5lciBpbWcgewotICAgIG1hcmdpbjogMnB4IGF1dG87Ci0gICAgbWF4LXdpZHRoOiAx
MDBweDsKLSAgICBtYXgtaGVpZ2h0OiAxMDBweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwo
SW1hZ2VzL2NoZWNrZXIucG5nKTsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwotICAg
IC13ZWJraXQtdXNlci1kcmFnOiBhdXRvOwotfQotCi0KLS5zaWRlYmFyLXBhbmUuY29tcG9zaXRl
IHsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLX0KLQot
LnNpZGViYXItcGFuZS5jb21wb3NpdGUgPiAuYm9keSB7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQot
Ci0uc2lkZWJhci1wYW5lLmNvbXBvc2l0ZSAubWV0cmljcyB7Ci0gICAgYm9yZGVyLWJvdHRvbTog
MXB4IHNvbGlkIHJnYig2NCUsIDY0JSwgNjQlKTsKLSAgICBoZWlnaHQ6IDIwNnB4OwotICAgIGRp
c3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47
Ci0gICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwotICAgIC13ZWJraXQtanVzdGlmeS1j
b250ZW50OiBjZW50ZXI7Ci19Ci0KLS5zaWRlYmFyLXBhbmUuY29tcG9zaXRlIC5tZXRyaWNzLWFu
ZC1jb21wdXRlZCAuc2lkZWJhci1wYW5lLXRvb2xiYXIgewotICAgIG1hcmdpbi10b3A6IDRweDsK
LSAgICBtYXJnaW4tYm90dG9tOiAtNHB4OwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLQot
LnNpZGViYXItcGFuZS5jb21wb3NpdGUgLnNpZGViYXItcGFuZS10b29sYmFyID4gLnNpZGViYXIt
cGFuZS1zdWJ0aXRsZSB7Ci0gICAgbGVmdDogOHB4OwotfQotCi0uc2lkZWJhci1wYW5lLmNvbXBv
c2l0ZSAuc3R5bGVzLXNlY3Rpb24ucmVhZC1vbmx5IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBp
bmhlcml0OwotfQotCi0ucGFuZWwuZWxlbWVudHMgLnNpZGViYXItcGFuZS10b29sYmFyID4gc2Vs
ZWN0IHsKLSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgd2lkdGg6IDIzcHg7Ci0gICAgaGVpZ2h0OiAx
N3B4OwotICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFu
c3BhcmVudDsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJl
cGVhdDsKLSAgICBtYXJnaW46IDFweCAwIDAgMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIC13ZWJr
aXQtYm9yZGVyLXJhZGl1czogMDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0K
LS5wYW5lbC5lbGVtZW50cyAuc2lkZWJhci1wYW5lLXRvb2xiYXIgPiBzZWxlY3Q6aG92ZXIgewot
ICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yM3B4IDBweDsKLX0KLQotLnBhbmVsLmVsZW1lbnRz
IC5zaWRlYmFyLXBhbmUtdG9vbGJhciA+IHNlbGVjdDphY3RpdmUgewotICAgIGJhY2tncm91bmQt
cG9zaXRpb246IC00NnB4IDBweDsKLX0KLQotLnBhbmVsLmVsZW1lbnRzIC5zaWRlYmFyLXBhbmUt
dG9vbGJhciA+IHNlbGVjdC5zZWxlY3Qtc2V0dGluZ3MgewotICAgIGJhY2tncm91bmQtaW1hZ2U6
IHVybChJbWFnZXMvcGFuZVNldHRpbmdzQnV0dG9ucy5wbmcpOwotfQotCi0ucGFuZWwuZWxlbWVu
dHMgLnNpZGViYXItcGFuZS10b29sYmFyID4gc2VsZWN0LnNlbGVjdC1maWx0ZXIgewotICAgIGJh
Y2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvcGFuZUZpbHRlckJ1dHRvbnMucG5nKTsKLX0KLQot
LnBhbmVsLmVsZW1lbnRzIC5zaWRlYmFyLXBhbmUtdG9vbGJhciA+IHNlbGVjdCA+IG9wdGlvbiwg
LnBhbmVsLmVsZW1lbnRzIC5zaWRlYmFyLXBhbmUtdG9vbGJhciA+IHNlbGVjdCA+IGhyIHsKLSAg
ICBjb2xvcjogYmxhY2s7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2V4dGVybnMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2V4dGVybnMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YzIzYmIuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9leHRlcm5zLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBXZWJLaXQgV2ViIEZhY2luZyBBUEkKLXZh
ciBjb25zb2xlID0ge30KLS8qKiBAcGFyYW0gey4uLip9IHZhcmFyZyAqLwotY29uc29sZS53YXJu
ID0gZnVuY3Rpb24odmFyYXJnKSB7fQotLyoqIEBwYXJhbSB7Li4uKn0gdmFyYXJnICovCi1jb25z
b2xlLmFzc2VydCA9IGZ1bmN0aW9uKHZhcmFyZykge30KLS8qKiBAcGFyYW0gey4uLip9IHZhcmFy
ZyAqLwotY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKHZhcmFyZykge30KLWNvbnNvbGUudHJhY2Ug
PSBmdW5jdGlvbigpIHt9Ci0KLXZhciBKU09OID0ge30KLS8qKiBAcGFyYW0ge3N0cmluZ30gc3Ry
ICovCi1KU09OLnBhcnNlID0gZnVuY3Rpb24oc3RyKSB7fQotLyoqCi0gKiBAcGFyYW0geyp9IG9i
agotICogQHBhcmFtIHtGdW5jdGlvbj19IHJlcGxhY2VyCi0gKiBAcGFyYW0ge251bWJlcj19IHNw
YWNlCi0gKiBAcmV0dXJuIHtzdHJpbmd9Ci0gKi8KLUpTT04uc3RyaW5naWZ5ID0gZnVuY3Rpb24o
b2JqLCByZXBsYWNlciwgc3BhY2UpIHt9Ci0KLS8qKiBAcGFyYW0ge2Jvb2xlYW49fSBwYXJhbSAq
LwotRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9IGZ1bmN0aW9uKHBh
cmFtKSB7fQotLyoqIEB0eXBlIHtib29sZWFufSAqLwotRXZlbnQucHJvdG90eXBlLmlzTWV0YU9y
Q3RybEZvclRlc3QgPSBmYWxzZTsKLS8qKiBAcGFyYW0gey4uLip9IHZhcmFyZyAqLwotRXZlbnQu
cHJvdG90eXBlLmluaXRXZWJLaXRXaGVlbEV2ZW50ID0gZnVuY3Rpb24odmFyYXJnKSB7fQotRXZl
bnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkge30KLQot
LyoqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAqLwotd2luZG93LmdldENvbXB1dGVkU3R5bGUg
PSBmdW5jdGlvbihlbGVtZW50KSB7fQotLyoqIEBwYXJhbSB7Kn0gbWVzc2FnZSAqLwotZnVuY3Rp
b24gcG9zdE1lc3NhZ2UobWVzc2FnZSkge30KLQotLyoqIEB0eXBlIHsqfSAqLwotd2luZG93LnRl
c3RSdW5uZXIgPSBudWxsOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBX
ZWJLaXRNdXRhdGlvbihjYWxsYmFjaykKLXsKLSAgICB0aGlzLnR5cGUgPSAiIjsKLSAgICAvKiog
QHR5cGUge05vZGV9ICovIHRoaXMudGFyZ2V0ID0gbnVsbDsKLSAgICAvKiogQHR5cGUge0FycmF5
LjxOb2RlPn0gKi8gdGhpcy5hZGRlZE5vZGVzID0gW107Ci0gICAgLyoqIEB0eXBlIHtBcnJheS48
Tm9kZT59ICovIHRoaXMucmVtb3ZlZE5vZGVzID0gW107Ci19Ci0KLS8qKgotICogQGNvbnN0cnVj
dG9yCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKEFycmF5LjxXZWJLaXRNdXRhdGlvbj4pfSBjYWxsYmFj
awotICovCi1mdW5jdGlvbiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKSB7fQotLyoq
IAotICogQHBhcmFtIHtOb2RlfSBjb250YWluZXIKLSAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25z
Ci0gKi8KLVdlYktpdE11dGF0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlv
bihjb250YWluZXIsIG9wdGlvbnMpIHt9Ci1XZWJLaXRNdXRhdGlvbk9ic2VydmVyLnByb3RvdHlw
ZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24oKSB7fQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSBl
dmVudE5hbWUKLSAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyCi0gKiBAcGFyYW0ge2Jvb2xl
YW49fSBjYXB0dXJpbmcKLSAqLwotZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUs
IGxpc3RlbmVyLCBjYXB0dXJpbmcpIHt9Ci0KLS8qKiBAcGFyYW0ge2Jvb2xlYW49fSBvbmx5Rmly
c3QgKi8KLUFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihvYmosIG9ubHlGaXJzdCkg
e30KLUFycmF5LnByb3RvdHlwZS5rZXlTZXQgPSBmdW5jdGlvbigpIHt9Ci0vKiogQHJldHVybiB7
bnVtYmVyfSAqLwotQXJyYXkucHJvdG90eXBlLnVwcGVyQm91bmQgPSBmdW5jdGlvbihhbmNob3Ip
IHt9Ci0vKiogQHJldHVybiB7bnVtYmVyfSAqLwotQXJyYXkucHJvdG90eXBlLmJpbmFyeUluZGV4
T2YgPSBmdW5jdGlvbihhbmNob3IpIHt9Ci1BcnJheS5wcm90b3R5cGUuc29ydFJhbmdlID0gZnVu
Y3Rpb24oY29tcGFyYXRvciwgbGVmdEJvdW5kLCByaWdodEJvdW5kLCBrKSB7fQotCi0vKioKLSAq
IEB0aGlzIHtBcnJheS48bnVtYmVyPn0KLSAqIEBwYXJhbSB7ZnVuY3Rpb24obnVtYmVyLG51bWJl
cik6Ym9vbGVhbn0gY29tcGFyYXRvcgotICogQHBhcmFtIHtudW1iZXJ9IGxlZnQKLSAqIEBwYXJh
bSB7bnVtYmVyfSByaWdodAotICogQHBhcmFtIHtudW1iZXJ9IHBpdm90SW5kZXgKLSAqIEByZXR1
cm4ge251bWJlcn0KLSAqLwotQXJyYXkucHJvdG90eXBlLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKGNv
bXBhcmF0b3IsIGxlZnQsIHJpZ2h0LCBwaXZvdEluZGV4KSB7fQotCi0vKioKLSAqIEB0aGlzIHtB
cnJheS48bnVtYmVyPn0KLSAqIEBwYXJhbSB7bnVtYmVyfSBrCi0gKiBAcGFyYW0ge2Z1bmN0aW9u
KG51bWJlcixudW1iZXIpOmJvb2xlYW49fSBjb21wYXJhdG9yCi0gKiBAcmV0dXJuIHtudW1iZXJ9
Ci0gKi8KLUFycmF5LnByb3RvdHlwZS5xc2VsZWN0ID0gZnVuY3Rpb24oaywgY29tcGFyYXRvcikg
e30KLQotLyoqCi0gKiBAdGhpcyB7QXJyYXkuPCo+fQotICogQHBhcmFtIHtzdHJpbmd9IGZpZWxk
Ci0gKiBAcmV0dXJuIHtBcnJheS48Kj59Ci0gKi8KLUFycmF5LnByb3RvdHlwZS5zZWxlY3QgPSBm
dW5jdGlvbihmaWVsZCkge30KLQotLyoqCi0gKiBAdGhpcyB7QXJyYXkuPCo+fQotICogQHJldHVy
biB7Kn0KLSAqLwotQXJyYXkucHJvdG90eXBlLnBlZWtMYXN0ID0gZnVuY3Rpb24oKSB7fQotCi1E
T01BcHBsaWNhdGlvbkNhY2hlLnByb3RvdHlwZS5VTkNBQ0hFRCA9IDA7Ci1ET01BcHBsaWNhdGlv
bkNhY2hlLnByb3RvdHlwZS5JRExFID0gMTsKLURPTUFwcGxpY2F0aW9uQ2FjaGUucHJvdG90eXBl
LkNIRUNLSU5HID0gMjsKLURPTUFwcGxpY2F0aW9uQ2FjaGUucHJvdG90eXBlLkRPV05MT0FESU5H
ID0gMzsKLURPTUFwcGxpY2F0aW9uQ2FjaGUucHJvdG90eXBlLlVQREFURVJFQURZID0gNDsKLURP
TUFwcGxpY2F0aW9uQ2FjaGUucHJvdG90eXBlLk9CU09MRVRFID0gNTsKLQotLy8gRmlsZSBTeXN0
ZW0gQVBJCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBET01GaWxlU3lzdGVt
KCkge30KLQotLyoqCi0gKiBAdHlwZSB7RGlyZWN0b3J5RW50cnl9Ci0gKi8KLURPTUZpbGVTeXN0
ZW0ucHJvdG90eXBlLnJvb3QgPSBudWxsOwotCi0vKiogQHR5cGUge05vZGV9ICovCi1SYW5nZS5w
cm90b3R5cGUuc3RhcnRDb250YWluZXI7Ci0KLS8vIEluc3BlY3RvciBCYWNrZW5kCi12YXIgSW5z
cGVjdG9yQmFja2VuZCA9IHt9Ci1JbnNwZWN0b3JCYWNrZW5kLnJ1bkFmdGVyUGVuZGluZ0Rpc3Bh
dGNoZXMgPSBmdW5jdGlvbihtZXNzYWdlKSB7fQotCi0vKiogQGludGVyZmFjZSAqLwotZnVuY3Rp
b24gSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJKCkge30KLUluc3BlY3RvckZyb250ZW5kSG9zdEFQ
SS5wcm90b3R5cGUucGxhdGZvcm0gPSBmdW5jdGlvbigpIHt9Ci1JbnNwZWN0b3JGcm9udGVuZEhv
c3RBUEkucHJvdG90eXBlLnBvcnQgPSBmdW5jdGlvbigpIHt9Ci1JbnNwZWN0b3JGcm9udGVuZEhv
c3RBUEkucHJvdG90eXBlLmJyaW5nVG9Gcm9udCA9IGZ1bmN0aW9uKCkge30KLUluc3BlY3RvckZy
b250ZW5kSG9zdEFQSS5wcm90b3R5cGUuY2xvc2VXaW5kb3cgPSBmdW5jdGlvbigpIHt9Ci1JbnNw
ZWN0b3JGcm9udGVuZEhvc3RBUEkucHJvdG90eXBlLnJlcXVlc3RTZXREb2NrU2lkZSA9IGZ1bmN0
aW9uKGRvY2tTaWRlKSB7fQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5zZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCkge30KLUluc3BlY3RvckZyb250
ZW5kSG9zdEFQSS5wcm90b3R5cGUuc2V0QXR0YWNoZWRXaW5kb3dXaWR0aCA9IGZ1bmN0aW9uKHdp
ZHRoKSB7fQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5tb3ZlV2luZG93Qnkg
PSBmdW5jdGlvbih4LCB5KSB7fQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5z
ZXRJbmplY3RlZFNjcmlwdEZvck9yaWdpbiA9IGZ1bmN0aW9uKG9yaWdpbiwgc2NyaXB0KSB7fQot
SW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5sb2FkZWQgPSBmdW5jdGlvbigpIHt9
Ci1JbnNwZWN0b3JGcm9udGVuZEhvc3RBUEkucHJvdG90eXBlLmxvY2FsaXplZFN0cmluZ3NVUkwg
PSBmdW5jdGlvbigpIHt9Ci1JbnNwZWN0b3JGcm9udGVuZEhvc3RBUEkucHJvdG90eXBlLmluc3Bl
Y3RlZFVSTENoYW5nZWQgPSBmdW5jdGlvbih1cmwpIHt9Ci1JbnNwZWN0b3JGcm9udGVuZEhvc3RB
UEkucHJvdG90eXBlLmRvY3VtZW50Q29weSA9IGZ1bmN0aW9uKGV2ZW50KSB7fQotSW5zcGVjdG9y
RnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5jb3B5VGV4dCA9IGZ1bmN0aW9uKHRleHQpIHt9Ci1J
bnNwZWN0b3JGcm9udGVuZEhvc3RBUEkucHJvdG90eXBlLm9wZW5Jbk5ld1RhYiA9IGZ1bmN0aW9u
KHVybCkge30KLUluc3BlY3RvckZyb250ZW5kSG9zdEFQSS5wcm90b3R5cGUuY2FuU2F2ZSA9IGZ1
bmN0aW9uKCkge30KLUluc3BlY3RvckZyb250ZW5kSG9zdEFQSS5wcm90b3R5cGUuc2F2ZSA9IGZ1
bmN0aW9uKHVybCwgY29udGVudCwgZm9yY2VTYXZlQXMpIHt9Ci1JbnNwZWN0b3JGcm9udGVuZEhv
c3RBUEkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24odXJsKSB7fQotSW5zcGVjdG9yRnJvbnRl
bmRIb3N0QVBJLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbih1cmwsIGNvbnRlbnQpIHt9Ci1J
bnNwZWN0b3JGcm9udGVuZEhvc3RBUEkucHJvdG90eXBlLnNlbmRNZXNzYWdlVG9CYWNrZW5kID0g
ZnVuY3Rpb24obWVzc2FnZSkge30KLUluc3BlY3RvckZyb250ZW5kSG9zdEFQSS5wcm90b3R5cGUu
cmVjb3JkQWN0aW9uVGFrZW4gPSBmdW5jdGlvbihhY3Rpb25Db2RlKSB7fQotSW5zcGVjdG9yRnJv
bnRlbmRIb3N0QVBJLnByb3RvdHlwZS5yZWNvcmRQYW5lbFNob3duID0gZnVuY3Rpb24ocGFuZWxD
b2RlKSB7fQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5yZWNvcmRTZXR0aW5n
Q2hhbmdlZCA9IGZ1bmN0aW9uKHNldHRpbmdDb2RlKSB7fQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0
QVBJLnByb3RvdHlwZS5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5ID0gZnVuY3Rpb24odXJsKSB7
fQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5zdXBwb3J0c0ZpbGVTeXN0ZW1z
ID0gZnVuY3Rpb24oKSB7fQotSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLnByb3RvdHlwZS5yZXF1
ZXN0RmlsZVN5c3RlbXMgPSBmdW5jdGlvbigpIHt9Ci1JbnNwZWN0b3JGcm9udGVuZEhvc3RBUEku
cHJvdG90eXBlLmFkZEZpbGVTeXN0ZW0gPSBmdW5jdGlvbigpIHt9Ci1JbnNwZWN0b3JGcm9udGVu
ZEhvc3RBUEkucHJvdG90eXBlLnJlbW92ZUZpbGVTeXN0ZW0gPSBmdW5jdGlvbihmaWxlU3lzdGVt
UGF0aCkge30KLUluc3BlY3RvckZyb250ZW5kSG9zdEFQSS5wcm90b3R5cGUuaXNvbGF0ZWRGaWxl
U3lzdGVtID0gZnVuY3Rpb24oZmlsZVN5c3RlbUlkLCByZWdpc3RlcmVkTmFtZSkge30KLUluc3Bl
Y3RvckZyb250ZW5kSG9zdEFQSS5wcm90b3R5cGUuc2V0Wm9vbUZhY3RvciA9IGZ1bmN0aW9uKHpv
b20pIHt9Ci0vKiogQHR5cGUge0luc3BlY3RvckZyb250ZW5kSG9zdEFQSX0gKi8KLXZhciBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q7Ci0KLS8qKiBAY29uc3RydWN0b3IgKi8KLWZ1bmN0aW9uIFNvdXJj
ZU1hcFYzKCkKLXsKLSAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdGhpcy52ZXJzaW9uOwotICAg
IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyB0aGlzLmZpbGU7Ci0gICAgLyoqIEB0eXBlIHtBcnJheS48
c3RyaW5nPn0gKi8gdGhpcy5zb3VyY2VzOwotICAgIC8qKiBAdHlwZSB7QXJyYXkuPFNvdXJjZU1h
cFYzLlNlY3Rpb24+fSAqLyB0aGlzLnNlY3Rpb25zOwotICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAq
LyB0aGlzLm1hcHBpbmdzCi19Ci0KLS8qKiBAY29uc3RydWN0b3IgKi8KLVNvdXJjZU1hcFYzLlNl
Y3Rpb24gPSBmdW5jdGlvbigpCi17Ci0gICAgLyoqIEB0eXBlIHtTb3VyY2VNYXBWM30gKi8gdGhp
cy5tYXA7Ci0gICAgLyoqIEB0eXBlIHtTb3VyY2VNYXBWMy5PZmZzZXR9ICovIHRoaXMub2Zmc2V0
OwotfQotCi0vKiogQGNvbnN0cnVjdG9yICovCi1Tb3VyY2VNYXBWMy5PZmZzZXQgPSBmdW5jdGlv
bigpCi17Ci0gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHRoaXMubGluZTsKLSAgICAvKiogQHR5
cGUge251bWJlcn0gKi8gdGhpcy5jb2x1bW47Ci19Ci0KLS8vIEZJWE1FOiByZW1vdmUgZXZlcnl0
aGluZyBiZWxvdy4KLXZhciBXZWJJbnNwZWN0b3IgPSB7fQotCi1XZWJJbnNwZWN0b3IucXVlcnlQ
YXJhbXNPYmplY3QgPSB7fQotV2ViSW5zcGVjdG9yLnRvZ2dsZVNlYXJjaGluZ0Zvck5vZGUgPSBm
dW5jdGlvbigpIHt9Ci1XZWJJbnNwZWN0b3IucGFuZWxzID0ge307Ci0KLS8qKgotICogQHBhcmFt
IHtFbGVtZW50fSBlbGVtZW50Ci0gKiBAcGFyYW0ge2Z1bmN0aW9uKCk9fSBvbmNsb3NlCi0gKi8K
LVdlYkluc3BlY3Rvci5zaG93Vmlld0luRHJhd2VyID0gZnVuY3Rpb24oZWxlbWVudCwgdmlldywg
b25jbG9zZSkge30KLQotV2ViSW5zcGVjdG9yLmNsb3NlVmlld0luRHJhd2VyID0gZnVuY3Rpb24o
KSB7fQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZUxldmVsCi0gKiBAcGFyYW0g
e2Jvb2xlYW49fSBzaG93Q29uc29sZQotICovCi1XZWJJbnNwZWN0b3IubG9nID0gZnVuY3Rpb24o
bWVzc2FnZSwgbWVzc2FnZUxldmVsLCBzaG93Q29uc29sZSkge30KLQotV2ViSW5zcGVjdG9yLnNo
b3dFcnJvck1lc3NhZ2UgPSBmdW5jdGlvbihlcnJvcikge30KLQotV2ViSW5zcGVjdG9yLmFkZE1h
aW5FdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKGRvYykge30KLQotV2ViSW5zcGVjdG9yLm9wZW5S
ZXNvdXJjZSA9IGZ1bmN0aW9uKHVybCwgZXh0ZXJuYWwpIHt9Ci0KLVdlYkluc3BlY3Rvci5zaG93
Q29uc29sZSA9IGZ1bmN0aW9uKCkge30KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVz
c2lvbgotICogQHBhcmFtIHtib29sZWFuPX0gc2hvd1Jlc3VsdE9ubHkKLSAqLwotV2ViSW5zcGVj
dG9yLmV2YWx1YXRlSW5Db25zb2xlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgc2hvd1Jlc3VsdE9u
bHkpIHt9Ci0KLVdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdCA9IHt9Ci0KLVdlYkluc3Bl
Y3Rvci5FdmVudHMgPSB7Ci0gICAgSW5zcGVjdG9yTG9hZGVkOiAiSW5zcGVjdG9yTG9hZGVkIiwK
LSAgICBJbnNwZWN0b3JDbG9zaW5nOiAiSW5zcGVjdG9yQ2xvc2luZyIKLX0KLQotLyoqIEV4dGVu
c2lvbnMgQVBJICovCi0KLS8qKiBAY29uc3RydWN0b3IgKi8KLWZ1bmN0aW9uIEF1ZGl0Q2F0ZWdv
cnkoKSB7fQotLyoqIEBjb25zdHJ1Y3RvciAqLwotZnVuY3Rpb24gQXVkaXRSZXN1bHQoKSB7fQot
LyoqIEBjb25zdHJ1Y3RvciAqLwotZnVuY3Rpb24gRXZlbnRTaW5rKCkge30KLS8qKiBAY29uc3Ry
dWN0b3IgKi8KLWZ1bmN0aW9uIEV4dGVuc2lvblNpZGViYXJQYW5lKCkge30KLS8qKiBAY29uc3Ry
dWN0b3IgKi8KLWZ1bmN0aW9uIFBhbmVsKCkge30KLS8qKiBAY29uc3RydWN0b3IgKi8KLWZ1bmN0
aW9uIFBhbmVsV2l0aFNpZGViYXIoKSB7fQotLyoqIEBjb25zdHJ1Y3RvciAqLwotZnVuY3Rpb24g
UmVxdWVzdCgpIHt9Ci0vKiogQGNvbnN0cnVjdG9yICovCi1mdW5jdGlvbiBSZXNvdXJjZSgpIHt9
Ci0vKiogQGNvbnN0cnVjdG9yICovCi1mdW5jdGlvbiBUaW1lbGluZSgpIHt9Ci0KLXZhciBleHRl
bnNpb25TZXJ2ZXI7Ci0KLS8qKiBAdHlwZSB7c3RyaW5nfSAqLwotTG9jYXRpb24ucHJvdG90eXBl
Lm9yaWdpbiA9ICIiOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBFeHRl
bnNpb25EZXNjcmlwdG9yKCkgewotICAgIHRoaXMuc3RhcnRQYWdlID0gIiI7Ci0gICAgdGhpcy5u
YW1lID0gIiI7Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIEV4dGVu
c2lvblJlbG9hZE9wdGlvbnMoKSB7Ci0gICAgdGhpcy5pZ25vcmVDYWNoZSA9IGZhbHNlOwotICAg
IHRoaXMuaW5qZWN0ZWRTY3JpcHQgPSAiIjsKLSAgICB0aGlzLnVzZXJBZ2VudCA9ICIiOwotfQot
Ci1XZWJJbnNwZWN0b3Iuc2hvd1BhbmVsID0gZnVuY3Rpb24ocGFuZWwpCi17Ci19Ci0KLS8qKgot
ICogQHR5cGUge3N0cmluZ30gCi0gKi8KLVdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlRG9tYWlu
OwotCi1XZWJJbnNwZWN0b3IuU291cmNlSmF2YVNjcmlwdFRva2VuaXplciA9IHt9Ci1XZWJJbnNw
ZWN0b3IuU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5LZXl3b3JkcyA9IHt9Ci0KLXZhciBJbnNw
ZWN0b3JUZXN0ID0ge30KLQotLyoganNkaWZmbGliIEFQSSAqLwotdmFyIGRpZmZsaWIgPSB7fTsK
LWRpZmZsaWIuc3RyaW5nQXNMaW5lcyA9IGZ1bmN0aW9uKHRleHQpIHsgcmV0dXJuIFtdOyB9Ci0v
KiogQGNvbnN0cnVjdG9yICovCi1kaWZmbGliLlNlcXVlbmNlTWF0Y2hlciA9IGZ1bmN0aW9uKGJh
c2VUZXh0LCBuZXdUZXh0KSB7IH0KLWRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnByb3RvdHlwZS5n
ZXRfb3Bjb2RlcyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gW107IH0KLQotLyoqIEBjb25zdHJ1Y3Rv
ciAqLwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yID0gZnVuY3Rpb24odXJsLCBk
ZWxlZ2F0ZSkgeyB9Ci0KLS8qKiBAY29uc3RydWN0b3IgKi8KLVdlYkluc3BlY3Rvci5BY2VUZXh0
RWRpdG9yID0gZnVuY3Rpb24odXJsLCBkZWxlZ2F0ZSkgeyB9Ci0KLS8qKiBAY29uc3RydWN0b3Ig
Ki8KLXZhciBDb2RlTWlycm9yID0gZnVuY3Rpb24oKSB7IH0KLUNvZGVNaXJyb3IucHJvdG90eXBl
LnJlcGxhY2VTZWxlY3Rpb24gPSBmdW5jdGlvbihzdHIxLCBzdHIyLCBzdHIzKSB7IH0KLS8qKiBA
cmV0dXJuIHtFbGVtZW50fSAqLwotQ29kZU1pcnJvci5wcm90b3R5cGUuZ2V0SW5wdXRGaWVsZCA9
IGZ1bmN0aW9uKCkgeyB9Ci1Db2RlTWlycm9yLnByb3RvdHlwZS5nZXRDdXJzb3IgPSBmdW5jdGlv
bigpIHsgfQotQ29kZU1pcnJvci5wcm90b3R5cGUuc2V0Q3Vyc29yID0gZnVuY3Rpb24oYXJnKSB7
IH0KLUNvZGVNaXJyb3IucHJvdG90eXBlLmdldExpbmUgPSBmdW5jdGlvbigpIHsgfQotQ29kZU1p
cnJvci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsgfQotQ29kZU1pcnJvci5wcm90
b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbihhcmcpIHsgfQotQ29kZU1pcnJvci5wcm90b3R5cGUu
Y2xlYXJHdXR0ZXIgPSBmdW5jdGlvbihhcmcpIHsgfQotQ29kZU1pcnJvci5wcm90b3R5cGUuc2V0
R3V0dGVyTWFya2VyID0gZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykgeyB9Ci1Db2RlTWlycm9y
LnByb3RvdHlwZS5jbGVhckhpc3RvcnkgPSBmdW5jdGlvbigpIHsgfQotQ29kZU1pcnJvci5wcm90
b3R5cGUubWFya1RleHQgPSBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7IH0KLQotV2ViSW5z
cGVjdG9yLnN1Z2dlc3RSZWxvYWQgPSBmdW5jdGlvbigpIHsgfQotV2ViSW5zcGVjdG9yLnJlbG9h
ZCA9IGZ1bmN0aW9uKCkgeyB9Ci0KLS8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8KLXdpbmRvdy5kaXNw
YXRjaFN0YW5kYWxvbmVUZXN0UnVubmVyTWVzc2FnZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2ZpbHRlcmVkSXRlbVNlbGVjdGlvbkRpYWxvZy5jc3Mg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2ZpbHRlcmVkSXRlbVNlbGVjdGlv
bkRpYWxvZy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTI4NTcuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9maWx0ZXJlZEl0ZW1T
ZWxlY3Rpb25EaWFsb2cuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLmZpbHRl
cmVkLWl0ZW0tbGlzdC1kaWFsb2cgPiBpbnB1dCB7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAg
IHdpZHRoOiAxMDAlOwotICAgIGhlaWdodDogMjRweDsKLX0KLQotLmZpbHRlcmVkLWl0ZW0tbGlz
dC1kaWFsb2cgPiBkaXYucHJvZ3Jlc3MgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0
b3A6IDM1cHg7Ci0gICAgbGVmdDogMTBweDsKLSAgICByaWdodDogMTBweDsKLSAgICBoZWlnaHQ6
IDJweDsKLX0KLQotLmZpbHRlcmVkLWl0ZW0tbGlzdC1kaWFsb2cgPiBkaXYuY29udGFpbmVyIHsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAzOHB4OwotICAgIGJvdHRvbTogMTBw
eDsKLSAgICBsZWZ0OiAxMHB4OwotICAgIHJpZ2h0OiAxMHB4OwotICAgIG92ZXJmbG93LXk6IGF1
dG87Ci0gICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE4NywgMTg3LCAxODcpOwotICAgIGJhY2tn
cm91bmQtY29sb3I6IHdoaXRlOwotfQotCi0uZmlsdGVyZWQtaXRlbS1saXN0LWRpYWxvZy1pdGVt
IHsKLSAgICBwYWRkaW5nOiAycHg7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICB0ZXh0
LW92ZXJmbG93OiBlbGxpcHNpczsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIGNvbG9yOiBy
Z2IoOTUsIDk1LCA5NSk7Ci19Ci0KLS5maWx0ZXJlZC1pdGVtLWxpc3QtZGlhbG9nLXN1YnRpdGxl
IHsKLSAgICBjb2xvcjogcmdiKDE1NSwgMTU1LCAxNTUpOwotfQotCi0uZmlsdGVyZWQtaXRlbS1s
aXN0LWRpYWxvZy1pdGVtLm9uZS1yb3cgLmZpbHRlcmVkLWl0ZW0tbGlzdC1kaWFsb2ctc3VidGl0
bGUgewotICAgIGZsb2F0OiByaWdodDsKLX0KLQotLmZpbHRlcmVkLWl0ZW0tbGlzdC1kaWFsb2ct
aXRlbS50d28tcm93cyB7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigyMzUsIDIz
NSwgMjM1KTsKLX0KLQotLmZpbHRlcmVkLWl0ZW0tbGlzdC1kaWFsb2ctaXRlbS5zZWxlY3RlZCB7
Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIyNCwgMjI0LCAyMjQpOwotfQotCi0uZmlsdGVy
ZWQtaXRlbS1saXN0LWRpYWxvZy1pdGVtIHNwYW4uaGlnaGxpZ2h0IHsKLSAgICBjb2xvcjogYmxh
Y2s7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2ZsYW1lQ2hhcnQuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9mbGFtZUNoYXJ0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjA1ZjI5My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2ZsYW1lQ2hhcnQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLm92
ZXJ2aWV3LWNvbnRhaW5lciB7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gICAgdG9wOiAwcHg7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgaGVpZ2h0OiA4
MHB4OwotfQotCi0uY2hhcnQtY29udGFpbmVyIHsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDgwcHg7Ci0gICAgd2lkdGg6IDEwMCU7Ci0g
ICAgYm90dG9tOiAwcHg7Ci19Ci0KLSNmbGFtZS1jaGFydC1vdmVydmlldy1ncmlkIC5yZXNvdXJj
ZXMtZGl2aWRlcnMtbGFiZWwtYmFyIHsKLSAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKLX0KLQot
I2ZsYW1lLWNoYXJ0LW92ZXJ2aWV3LWNvbnRhaW5lciB7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4
IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjQ2ZmYyNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2hlYXBQcm9maWxlci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0u
aGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAgY29udGVudDogdXJs
KEltYWdlcy9wcm9maWxlSWNvbi5wbmcpOwotfQotCi0uaGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRy
ZWUtaXRlbS53YWl0IC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3NwaW5uZXJBY3Rp
dmUuZ2lmKTsKLX0KLQotLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0ud2FpdC5zZWxl
Y3RlZCAuaWNvbiB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9zcGlubmVyQWN0aXZlU2VsZWN0
ZWQuZ2lmKTsKLX0KLQotYm9keS5pbmFjdGl2ZSAuaGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUt
aXRlbS53YWl0IC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3NwaW5uZXJJbmFjdGl2
ZS5naWYpOwotfQotCi1ib2R5LmluYWN0aXZlIC5oZWFwLXNuYXBzaG90LXNpZGViYXItdHJlZS1p
dGVtLndhaXQuc2VsZWN0ZWQgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvc3Bpbm5l
ckluYWN0aXZlU2VsZWN0ZWQuZ2lmKTsKLX0KLQotLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVl
LWl0ZW0uc21hbGwgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcHJvZmlsZVNtYWxs
SWNvbi5wbmcpOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IHsKLSAgICBkaXNwbGF5OiBub25l
OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRv
cDogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsKLX0KLQot
LmhlYXAtc25hcHNob3Qtdmlldy52aXNpYmxlIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQot
LmhlYXAtc25hcHNob3QtdmlldyAudmlldyB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLmhl
YXAtc25hcHNob3QtdmlldyAudmlldy52aXNpYmxlIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0K
LQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRyOmVtcHR5IHsKLSAgICBoZWlnaHQ6
IDE2cHg7Ci0gICAgdmlzaWJpbGl0eTogaGlkZGVuOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3
IC5kYXRhLWdyaWQgewotICAgIGJvcmRlcjogbm9uZTsKLX0KLQotLmhlYXAtc25hcHNob3Qtdmll
dyAuZGF0YS1ncmlkIHRkLmNvdW50LWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19
Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0ZC5hZGRlZENvdW50LWNvbHVtbiB7
Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEt
Z3JpZCB0ZC5yZW1vdmVkQ291bnQtY29sdW1uIHsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0K
LQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLmNvdW50RGVsdGEtY29sdW1uIHsK
LSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1n
cmlkIHRkLmFkZGVkU2l6ZS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0u
aGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQucmVtb3ZlZFNpemUtY29sdW1uIHsKLSAg
ICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlk
IHRkLnNpemVEZWx0YS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0uaGVh
cC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuc2hhbGxvd1NpemUtY29sdW1uIHsKLSAgICB0
ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRk
LnJldGFpbmVkU2l6ZS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0uaGVh
cC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuZGlzdGFuY2VUb1dpbmRvdy1jb2x1bW4gewot
ICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdy
aWQgZGl2LmhlYXAtc25hcHNob3QtbXVsdGlwbGUtdmFsdWVzIHsKLSAgICBmbG9hdDogcmlnaHQ7
Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCBzcGFuLnBlcmNlbnQtY29sdW1u
IHsKLSAgICBjb2xvcjogZ3JleTsKLSAgICB3aWR0aDogMzJweDsKLSAgICBmbG9hdDogcmlnaHQ7
Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmNvbnNvbGUtZm9ybWF0dGVkLW9iamVjdCwgLmNv
bnNvbGUtZm9ybWF0dGVkLW5vZGUgewotICAgIGRpc3BsYXk6IGlubGluZTsKLSAgICBwb3NpdGlv
bjogc3RhdGljOwotfQotCi0uZGV0YWNoZWQtZG9tLXRyZWUtbm9kZSB7Ci0gICAgYmFja2dyb3Vu
ZC1jb2xvcjogI0ZGOTk5OTsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuY29uc29sZS1mb3Jt
YXR0ZWQtc3RyaW5nIHsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotfQotCi0uaGVhcC1zbmFw
c2hvdC12aWV3IC5jb25zb2xlLWZvcm1hdHRlZC1pZCB7Ci0gICAgY29sb3I6IGdyZXk7Ci19Ci0K
LS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0ci5zZWxlY3RlZCAqIHsKLSAgICBjb2xv
cjogaW5oZXJpdDsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkOmZvY3VzIHRy
LnNlbGVjdGVkICogewotICAgIGNvbG9yOiB3aGl0ZTsKLX0KLQotLmhlYXAtc25hcHNob3Qtdmll
dyAuZGVsaW1pdGVyIHsKLSAgICBoZWlnaHQ6IDI0cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
I2Q2ZGRlNTsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHsKLSAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7
Ci0gICAgYm90dG9tOiAwOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC52aWV3cy1jb250YWlu
ZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsK
LSAgICByaWdodDogMDsKLSAgICBib3R0b206IDE3M3B4OwotfQotCi0uaGVhcC1zbmFwc2hvdC12
aWV3IC52aWV3cy1jb250YWluZXIgLnZpZXcgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci19
Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLnJldGFpbmluZy1wYXRocy12aWV3IHsKLSAgICBoZWln
aHQ6IDE1MHB4OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBib3R0b206IDA7Ci0gICAg
bGVmdDogMDsKLSAgICByaWdodDogMDsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuY2xhc3Mt
dmlldy1ncmlkIHsKLSAgICB0b3A6IDIycHg7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmNs
YXNzLXZpZXctdG9vbGJhciB7Ci0gICAgaGVpZ2h0OiAyMnB4OwotICAgIGJhY2tncm91bmQtY29s
b3I6ICNEREQ7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgdG9wOiAwOwotfQotCi0uaGVhcC1zbmFw
c2hvdC12aWV3IC5jbGFzcy12aWV3LXRvb2xiYXIgaW5wdXQuY2xhc3MtbmFtZS1maWx0ZXIgewot
ICAgIHdpZHRoOiAyMDBweDsKLSAgICBoZWlnaHQ6IDE4cHg7Ci0gICAgZm9udC1zaXplOiAxMXB4
OwotICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwotICAgIHBhZGRpbmc6IDJweDsKLSAgICBtYXJn
aW46IDJweCAxMHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgIGJvcmRlcjog
c29saWQgMXB4ICNCQkI7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLnJldGFpbmVycy12aWV3
LWhlYWRlciB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNiYXJSZXNp
emVyVmVydGljYWwucG5nKSwgLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmdiKDI1MywyNTMsMjUz
KSwgcmdiKDIzMCwyMzAsMjMwKSA3NSUsIHJnYigyMzAsMjMwLDIzMCkpOwotICAgIGJvcmRlci10
b3A6IDFweCBzb2xpZCByZ2IoMjAyLCAyMDIsIDIwMik7Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6
IG5vLXJlcGVhdDsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCBjZW50ZXIsIGNlbnRl
cjsKLSAgICBjdXJzb3I6IHJvdy1yZXNpemU7Ci0gICAgaGVpZ2h0OiAyM3B4OwotICAgIGRpc3Bs
YXk6IGJsb2NrOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBsZWZ0OiAwOwotICAgIHJp
Z2h0OiAwOwotICAgIGJvdHRvbTogMTUwcHg7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLnJl
dGFpbmVycy12aWV3LWhlYWRlciAudGl0bGUgPiBzcGFuIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUt
YmxvY2s7Ci0gICAgcGFkZGluZy10b3A6IDNweDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxl
OwotICAgIG1hcmdpbi1sZWZ0OiA0cHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiA4cHg7Ci19Ci0KLS5o
ZWFwLXNuYXBzaG90LXZpZXcgdHI6bm90KC5zZWxlY3RlZCkgdGQub2JqZWN0LWNvbHVtbiBzcGFu
LmhpZ2hsaWdodCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyMDApOwot
fQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IHRkLm9iamVjdC1jb2x1bW4gc3Bhbi5ncmF5ZWQgewot
ICAgIGNvbG9yOiBncmF5OwotfQotCi0uaGVhcC1zbmFwc2hvdC1oZWxwLXN0YXR1cy1iYXItaXRl
bSAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlvbjogLTE2MHB4IDA7Ci19Ci0KLXRh
YmxlLmhlYXAtc25hcHNob3QtaGVscCB7Ci0gICAgYm9yZGVyLXNwYWNpbmc6IDEycHggMnB4Owot
fQotCi0uY3ljbGVkLWFuY2Vzc29yLW5vZGUgewotICAgIG9wYWNpdHk6IDAuNjsKLX0KLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9oZWxwU2NyZWVuLmNz
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaGVscFNjcmVlbi5jc3MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNGUyZWEuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9oZWxwU2NyZWVuLmNzcworKysgL2Rldi9udWxs
CkBAIC0xLDQ5MiArMCwwIEBACi0uaGVscC13aW5kb3ctb3V0ZXIgewotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBi
b3R0b206IDA7Ci0gICAgei1pbmRleDogMjAwMDsKLX0KLQotLmhlbHAtd2luZG93LW1haW4gewot
ICAgIG1heC1oZWlnaHQ6IDEwMCU7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYmEoMTcsIDE3LCAxNywgMC44NSk7Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4
OwotICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICBib3JkZXItdG9wLXdp
ZHRoOiAwOwotICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Ci19Ci0KLS5oZWxwLXdpbmRvdy1jYXB0
aW9uIHsKLSAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggcmdiKDE1MywgMTUzLCAxNTMpOwot
ICAgIG1hcmdpbjogMCA4cHg7Ci0gICAgcGFkZGluZzogMCAycHg7Ci0gICAgbGluZS1oZWlnaHQ6
IDI4cHg7Ci19Ci0KLS5oZWxwLXdpbmRvdy10aXRsZSB7Ci0gICAgZm9udC1zaXplOiAxNnB4Owot
ICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nLXRvcDogMXB4OwotICAgIG1hcmdpbi1ib3R0b206
IC0xcHg7Ci19Ci0KLS5oZWxwLWNvbnRlbnQgewotICAgIG92ZXJmbG93LXk6IGF1dG87Ci0gICAg
b3ZlcmZsb3cteDogaGlkZGVuOwotICAgIHNjcm9sbGJhci13aWR0aDogMTFweDsKLSAgICAtd2Vi
a2l0LWZsZXg6IDE7Ci0gICAgbWFyZ2luOiA4cHg7Ci0gICAgcGFkZGluZzogMCA0cHg7Ci0gICAg
Zm9udC1zaXplOiAxM3B4OwotfQotCi0uaGVscC13aW5kb3ctbWFpbiA6Oi13ZWJraXQtc2Nyb2xs
YmFyIHsKLSAgICB3aWR0aDogMTFweDsKLX0KLQotLmhlbHAtd2luZG93LW1haW4gOjotd2Via2l0
LXNjcm9sbGJhci1jb3JuZXIsCi0uaGVscC13aW5kb3ctbWFpbiA6Oi13ZWJraXQtcmVzaXplciB7
Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLmhlbHAtd2luZG93LW1haW4gOjotd2Via2l0LXNj
cm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7Ci0gICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVu
dChsaW5lYXIsIGxlZnQgdG9wLCByaWdodCB0b3AsIGZyb20ocmdiKDEyOCwgMTI4LCAxMjgpKSwg
dG8ocmdiKDEyOCwgMTI4LCAxMjgpKSwgY29sb3Itc3RvcCg0MCUsIHJnYig5NiwgOTYsIDk2KSkp
OwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLSAgICBtaW4taGVpZ2h0OiAyMHB4OwotfQotCi0u
aGVscC13aW5kb3ctbWFpbiA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRpY2FsOmhvdmVy
LAotLmhlbHAtd2luZG93LW1haW4gOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbDph
Y3RpdmUgewotICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRv
cCwgcmlnaHQgdG9wLCBmcm9tKHJnYigxNzYsIDE3NiwgMTc2KSksIHRvKHJnYigxNzYsIDE3Niwg
MTc2KSksIGNvbG9yLXN0b3AoNDAlLCByZ2IoMTQ0LCAxNDQsIDE0NCkpKTsKLX0KLQotLmhlbHAt
d2luZG93LW1haW4gOjotd2Via2l0LXNjcm9sbGJhci10cmFjazp2ZXJ0aWNhbCB7Ci0gICAgYmFj
a2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCByaWdodCB0b3AsIGZy
b20ocmdiKDEwLCAxMCwgMTApKSwgdG8ocmdiKDMyLCAzMiwgMzIpKSwgY29sb3Itc3RvcCgyNSUs
IHJnYigzMiwgMzIsIDMyKSkpOwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLX0KLQotLmhlbHAt
Y2xvc2UtYnV0dG9uIHsKLSAgICBib3JkZXI6IDA7Ci0gICAgcGFkZGluZzogMDsKLSAgICBmb250
LXNpemU6IDE0cHg7Ci0gICAgY29sb3I6IHJnYigyMjIsIDIyMiwgMjIyKTsKLSAgICBiYWNrZ3Jv
dW5kOiAtd2Via2l0LWdyYWRpZW50KHJhZGlhbCwgMzAlIDMwJSwgMSwgNTAlIDUwJSwgOCwgZnJv
bShyZ2IoMTQ0LCAxNDQsIDE0NCkpLCB0byhyZ2IoOTYsIDk2LCA5NikpKTsKLSAgICBib3JkZXIt
cmFkaXVzOiA4cHg7Ci0gICAgaGVpZ2h0OiAxNnB4OwotICAgIHdpZHRoOiAxNnB4OwotICAgIGxp
bmUtaGVpZ2h0OiAxMnB4OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDZweDsK
LSAgICByaWdodDogNnB4OwotfQotCi0jc2V0dGluZ3Mtc2NyZWVuIC5oZWxwLWNsb3NlLWJ1dHRv
biB7Ci0gICAgdG9wOiA4cHg7Ci0gICAgcmlnaHQ6IDhweDsKLX0KLQotYm9keS5kb2NrLXRvLWJv
dHRvbSAuaGVscC1jb250ZW50IHsKLSAgICBtYXJnaW4tYm90dG9tOiA4cHg7Ci19Ci0KLS5oZWxw
LWNsb3NlLWJ1dHRvbjpob3ZlciB7Ci0gICAgY29sb3I6IHdoaXRlOwotfQotCi1ib2R5LnBsYXRm
b3JtLW1hYyAuaGVscC13aW5kb3ctbWFpbiAudGFiYmVkLXBhbmUtaGVhZGVyLWNvbnRlbnRzIHsK
LSAgICBtYXJnaW4tbGVmdDogMjdweDsKLX0KLQotYm9keS5wbGF0Zm9ybS1tYWMgLmhlbHAtd2lu
ZG93LW1haW4gLmhlbHAtd2luZG93LXRpdGxlIHsKLSAgICBtYXJnaW4tbGVmdDogMThweDsKLX0K
LQotLmhlbHAtY29udGFpbmVyIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICAtd2Via2l0LXVzZXIt
c2VsZWN0OiBhdXRvOwotICAgIC13ZWJraXQtY29sdW1uLXdpZHRoOiA0NzBweDsKLX0KLQotYm9k
eS5wbGF0Zm9ybS1tYWMgLnNldHRpbmdzLXRhYi5oZWxwLWNvbnRhaW5lciB7Ci0gICAgLXdlYmtp
dC1jb2x1bW4td2lkdGg6IDQzMHB4OwotfQotCi1ib2R5LnBsYXRmb3JtLW1hYyAuaGVscC1jb250
YWluZXIgewotICAgIC13ZWJraXQtY29sdW1uLXdpZHRoOiAzMzBweDsKLX0KLQotLmhlbHAtYmxv
Y2sgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHBhZGRpbmctYm90dG9tOiA5cHg7Ci0gICAg
d2lkdGg6IDQ3MHB4OwotICAgIC13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZTogYXZvaWQ7Ci19
Ci0KLWJvZHkucGxhdGZvcm0tbWFjIC5zZXR0aW5ncy10YWIgLmhlbHAtYmxvY2sgewotICAgIHdp
ZHRoOiA0MzBweDsKLX0KLQotI2RyYXdlci1jb250ZW50cyAuc2V0dGluZ3MtdGFiIHsKLSAgICBw
YWRkaW5nLWxlZnQ6IDEycHg7Ci19Ci0KLS5zZXR0aW5ncy10YWIuaGVscC1jb250YWluZXIgewot
ICAgIC13ZWJraXQtY29sdW1uLXdpZHRoOiA0MTBweDsKLX0KLQotLnNldHRpbmdzLXRhYiAuaGVs
cC1ibG9jayB7Ci0gICAgd2lkdGg6IDQxMHB4OwotfQotCi0uaGVscC1saW5lIHsKLSAgICBwYWRk
aW5nLWJvdHRvbTogM3B4OwotfQotCi0uaGVscC1rZXktY2VsbCB7Ci0gICAgZGlzcGxheTogaW5s
aW5lLWJsb2NrOwotICAgIHdpZHRoOiAyNzBweDsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0K
LQotYm9keS5wbGF0Zm9ybS1tYWMgLmhlbHAta2V5LWNlbGwgewotICAgIHdpZHRoOiAxMjBweDsK
LX0KLQotLmhlbHAtY2VsbCB7Ci0gICAgZGlzcGxheTogaW5saW5lOwotfQotCi0uaGVscC1zZWN0
aW9uLXRpdGxlIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBjb2xvcjogaW5oZXJpdDsK
LX0KLQotLmhlbHAta2V5IHsKLSAgICBjb2xvcjogYmxhY2s7Ci0gICAgZm9udC13ZWlnaHQ6IGJv
bGQ7Ci19Ci0KLWJvZHkucGxhdGZvcm0tbWFjIC5oZWxwLWtleSB7Ci0gICAgZm9udC1mYW1pbHk6
IEx1Y2lkYSBHcmFuZGUsIHNhbnMtc2VyaWY7Ci19Ci0KLS5oZWxwLWNvbWJpbmUta2V5cywgLmhl
bHAta2V5LWRlbGltaXRlciB7Ci0gICAgY29sb3I6IGJsYWNrOwotICAgIGZvbnQtc2l6ZTogOXB4
OwotfQotCi0uaGVscC1jb21iaW5lLWtleXMgewotICAgIG1hcmdpbjogMCAwLjNlbTsKLX0KLQot
LmhlbHAta2V5LWRlbGltaXRlciB7Ci0gICAgbWFyZ2luOiAwIDAuNWVtOwotfQotCi0uaGVscC1j
b250ZW50IHAgewotICAgIG1hcmdpbjogM3B4IDA7Ci19Ci0KLS5oZWxwLWNvbnRlbnQgZmllbGRz
ZXQgewotICAgIGJvcmRlcjogbm9uZTsKLSAgICBtYXJnaW4tbGVmdDogN3B4OwotfQotCi1ib2R5
LnBsYXRmb3JtLW1hYyAuc2V0dGluZ3MtdGFiLmhlbHAtY29udGVudCBmaWVsZHNldCB7Ci0gICAg
bWFyZ2luLWxlZnQ6IDEwcHg7Ci19Ci0KLS5oZWxwLWNvbnRlbnQgZmllbGRzZXQgcCB7Ci0gICAg
Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMTI4LDEyOCwxMjgpOwotICAgIG1hcmdpbjogMCAw
IDAgNnB4OwotICAgIHBhZGRpbmctbGVmdDogM3B4OwotfQotCi0uaGVscC1jb250ZW50IGZpZWxk
c2V0IGxhYmVsIHsKLSAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7Ci19Ci0KLS5oZWxwLWNvbnRlbnQg
cC5oZWxwLXNlY3Rpb24gewotICAgIG1hcmdpbjogMCAwIDE1cHggMDsKLX0KLQotLnNldHRpbmdz
LWV4cGVyaW1lbnRzLXdhcm5pbmctc3Vic2VjdGlvbi13YXJuaW5nIHsKLSAgICBjb2xvcjogcmdi
KDIwMCwgMCwgMCk7Ci19Ci0KLS5zZXR0aW5ncy1leHBlcmltZW50cy13YXJuaW5nLXN1YnNlY3Rp
b24tbWVzc2FnZSB7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci19Ci0KLSNyZXNvbHV0aW9uLW92ZXJy
aWRlLXNlY3Rpb24gewotICAgIG1hcmdpbi1sZWZ0OiAxM3B4OwotfQotCi0uaGVscC1jb250ZW50
IGlucHV0W3R5cGU9Y2hlY2tib3hdIHsKLSAgICBoZWlnaHQ6IDEzcHg7Ci0gICAgd2lkdGg6IDEz
cHg7Ci0gICAgbWFyZ2luOiAwIDdweCAwIDA7Ci0gICAgdmVydGljYWwtYWxpZ246IC0ycHg7Ci19
Ci0KLWJvZHkucGxhdGZvcm0tbWFjIC5oZWxwLWNvbnRlbnQgaW5wdXRbdHlwZT1jaGVja2JveF0g
ewotICAgIHZlcnRpY2FsLWFsaWduOiAtMXB4OwotfQotCi0uaGVscC1jb250ZW50IGlucHV0W3R5
cGU9cmFkaW9dIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsKLX0KLQotYm9keS5wbGF0Zm9y
bS1tYWMgLmhlbHAtY29udGVudCBpbnB1dFt0eXBlPXJhZGlvXSB7Ci0gICAgdmVydGljYWwtYWxp
Z246IC0xcHg7Ci19Ci0KLS5oZWxwLWNvbnRlbnQgc2VsZWN0IHsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2IoNjQsIDY0LCA2NCk7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIGJvcmRlci1jb2xv
cjogYmxhY2s7Ci0gICAgcGFkZGluZzogMCA0cHg7Ci19Ci0KLS5oZWxwLWNvbnRlbnQgc2VsZWN0
OmRpc2FibGVkIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzIsIDMyLCAzMik7Ci0gICAg
Y29sb3I6IGdyYXl0ZXh0OwotfQotCi0uaGVscC1jb250ZW50IG9wdGlvbiB7Ci0gICAgYmFja2dy
b3VuZC1jb2xvcjogI0VFRUVFRTsKLSAgICBjb2xvcjogYmxhY2s7Ci19Ci0KLSNzZXR0aW5ncy1z
Y3JlZW4gLmhlbHAtd2luZG93LW1haW4sCi0jZHJhd2VyLWNvbnRlbnRzIC5oZWxwLXdpbmRvdy1t
YWluIHsKLSAgICBjb2xvcjogcmdiKDQ4LCA1NywgNjYpOwotICAgIGJhY2tncm91bmQtY29sb3I6
IHdoaXRlOwotICAgIGJvcmRlci1yYWRpdXM6IDA7Ci19Ci0KLSNzZXR0aW5ncy1zY3JlZW4gLmhl
bHAtd2luZG93LW1haW4gewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDEwcHg7
Ci0gICAgcmlnaHQ6IDEwcHg7Ci0gICAgYm90dG9tOiAxMHB4OwotICAgIGxlZnQ6IDEwcHg7Ci0g
ICAgaGVpZ2h0OiBpbml0aWFsOwotICAgIHBhZGRpbmc6IDIxcHggMCAwIDIxcHg7Ci0gICAgYm94
LXNoYWRvdzogMXB4IDFweCA1cHggMnB4IHJnYmEoMTI4LCAxMjgsIDEyOCwgMC43KTsKLX0KLQot
I3NldHRpbmdzLXNjcmVlbiAuaGVscC13aW5kb3ctbGFiZWwgewotICAgIGZvbnQtc2l6ZTogMThw
eDsKLSAgICBjb2xvcjogaW5oZXJpdDsKLSAgICBwYWRkaW5nLXRvcDogMXB4OwotfQotCi0jZHJh
d2VyLWNvbnRlbnRzIC5oZWxwLWNvbnRhaW5lci13cmFwcGVyIHsKLSAgICB0b3A6IDMycHg7Ci19
Ci0KLS5oZWxwLWNvbnRhaW5lci13cmFwcGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0g
ICAgdG9wOiA2MHB4OwotICAgIGxlZnQ6IDVweDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206
IDA7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci19Ci0KLSNzZXR0aW5ncy1zY3JlZW4gLnRhYmJlZC1w
YW5lLWhlYWRlciB7Ci0gICAgYm9yZGVyOiBub25lIHRyYW5zcGFyZW50OwotICAgIGhlaWdodDog
YXV0bzsKLSAgICB3aWR0aDogMTEwcHg7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRv
cDogMTRweDsKLX0KLQotI3NldHRpbmdzLXNjcmVlbiAudGFiYmVkLXBhbmUtaGVhZGVyLWNvbnRl
bnRzIHsKLSAgICBtYXJnaW46IDA7Ci19Ci0KLSNzZXR0aW5ncy1zY3JlZW4gLnRhYmJlZC1wYW5l
LWhlYWRlci10YWJzIHsKLSAgICBwYWRkaW5nLXRvcDogNXB4OwotICAgIHdpZHRoOiAxMDBweDsK
LX0KLQotI3NldHRpbmdzLXNjcmVlbiAudGFiYmVkLXBhbmUtaGVhZGVyLXRhYiB7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgYm9yZGVyOiBub25lIHRyYW5zcGFyZW50
OwotICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIHRl
eHQtc2hhZG93OiBub25lOwotICAgIGNvbG9yOiAjOTk5OTk5OwotICAgIGhlaWdodDogMjJweDsK
LSAgICBmb250LXNpemU6IDEzcHg7Ci0gICAgcGFkZGluZy1sZWZ0OiAwOwotfQotCi0jc2V0dGlu
Z3Mtc2NyZWVuIC50YWJiZWQtcGFuZS1oZWFkZXItdGFiLnNlbGVjdGVkIHsKLSAgICBjb2xvcjog
aW5oZXJpdDsKLX0KLQotI3NldHRpbmdzLXNjcmVlbiAudGFiYmVkLXBhbmUtY29udGVudCwKLSNk
cmF3ZXItY29udGVudHMgLnRhYmJlZC1wYW5lLWNvbnRlbnQgewotICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIG1h
cmdpbjogOHB4OwotfQotCi0jZHJhd2VyLWNvbnRlbnRzIC50YWJiZWQtcGFuZS1jb250ZW50IHsK
LSAgICBwYWRkaW5nOiAwIDRweDsKLX0KLQotI3NldHRpbmdzLXNjcmVlbiAudGFiYmVkLXBhbmUt
Y29udGVudCB7Ci0gICAgbGVmdDogMTIwcHg7Ci19Ci0KLSNkcmF3ZXItY29udGVudHMgLnRhYmJl
ZC1wYW5lLWNvbnRlbnQgewotICAgIGxlZnQ6IDA7Ci19Ci0KLS5zZXR0aW5ncy10YWIuaGVscC1j
b250ZW50IHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotLnNldHRpbmdz
LXRhYiBpbnB1dDpub3QoW3R5cGVdKSwgLnNldHRpbmdzLXRhYiBpbnB1dFt0eXBlPSJ0ZXh0Il0g
ewotICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMTMsIDIxMywgMjEzKTsKLSAgICBib3JkZXIt
cmFkaXVzOiAycHg7Ci0gICAgY29sb3I6ICM0NDQ0NDQ7Ci0gICAgZm9udDogaW5oZXJpdDsKLSAg
ICBwYWRkaW5nOiAzcHg7Ci19Ci0KLS5zZXR0aW5ncy10YWIgaW5wdXQubnVtZXJpYyB7Ci0gICAg
dGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLS5zZXR0aW5ncy10YWItY29udGFpbmVyIGhlYWRlciB7
Ci0gICAgcGFkZGluZzogMTRweCAwOwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRUVF
RUVFOwotfQotCi0jZHJhd2VyLWNvbnRlbnRzIC5zZXR0aW5ncy10YWItY29udGFpbmVyIGhlYWRl
ciB7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotI3RhYi1zaG9ydGN1dHMgewotICAgIG1hcmdpbi10
b3A6IDI1cHggIWltcG9ydGFudDsKLX0KLQotI2V4cGVyaW1lbnRzLXRhYi1jb250ZW50IC5oZWxw
LWNvbnRhaW5lciB7Ci0gICAgLXdlYmtpdC1jb2x1bW4td2lkdGg6IDQ3MHB4OwotfQotCi0jZXhw
ZXJpbWVudHMtdGFiLWNvbnRlbnQgLmhlbHAtYmxvY2sgewotICAgIHdpZHRoOiA0NzBweDsKLX0K
LQotLnNldHRpbmdzLXRhYi1jb250YWluZXIgaGVhZGVyID4gaDMgewotICAgIGZvbnQtc2l6ZTog
MThweDsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIG1hcmdpbjogMDsKLSAgICBwYWRk
aW5nLWJvdHRvbTogM3B4OwotfQotCi0uc2V0dGluZ3MtdGFiIC5oZWxwLXNlY3Rpb24tdGl0bGUg
ewotICAgIGNvbG9yOiBibGFjazsKLX0KLQotLnNldHRpbmdzLXRhYiAuaGVscC1ibG9jayBsYWJl
bCB7Ci0gICAgZm9udC1zaXplOiAxNHB4OwotfQotCi0uc2V0dGluZ3MtdGFiIC5oZWxwLWJsb2Nr
IGZpZWxkc2V0Om5vdCgudG9wbGV2ZWwpIGxhYmVsIHsKLSAgICBmb250LXNpemU6IDEzcHg7Ci19
Ci0KLS5zZXR0aW5ncy10YWIgLmhlbHAtYmxvY2sgZmllbGRzZXQ6ZGlzYWJsZWQgbGFiZWw6aG92
ZXIsCi0uc2V0dGluZ3MtdGFiIC5oZWxwLWJsb2NrIGZpZWxkc2V0LnRvcGxldmVsIGxhYmVsOmhv
dmVyIHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0KLQotLnNldHRpbmdzLXRhYiAuaGVscC1ibG9j
ayBsYWJlbDpob3ZlciB7Ci0gICAgY29sb3I6IGJsYWNrOwotfQotCi0uc2V0dGluZ3MtdGFiIHAg
ewotICAgIG1hcmdpbjogMTBweCAwOwotfQotCi0uc2V0dGluZ3MtdGFiIGZpZWxkc2V0IHAgewot
ICAgIGJvcmRlci1sZWZ0OiBub25lIHRyYW5zcGFyZW50OwotICAgIHBhZGRpbmc6IDJweCAwIDJw
eCAzcHg7Ci19Ci0KLS5zZXR0aW5ncy10YWIgc2VsZWN0IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9y
OiAjRkFGQUZBOwotICAgIGJvcmRlci1jb2xvcjogcmdiKDIxMywgMjEzLCAyMTMpOwotICAgIGJv
cmRlci1yYWRpdXM6IDJweDsKLSAgICBjb2xvcjogaW5oZXJpdDsKLSAgICBwYWRkaW5nOiAwIDRw
eDsKLX0KLQotLnNldHRpbmdzLXRhYiBzZWxlY3Q6ZGlzYWJsZWQgewotICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigyMjEsIDIyMSwgMjIxKTsKLX0KLQotCi0KLS5zZXR0aW5ncy10YWIgLmZpbGUt
c3lzdGVtcy1lZGl0b3IgaW5wdXQuZmlsZS1zeXN0ZW0tcGF0aCB7Ci0gICAgd2lkdGg6IDM4M3B4
OwotfQotCi0uc2V0dGluZ3MtdGFiIC5maWxlLW1hcHBpbmdzLWVkaXRvciAud29ya3NwYWNlLXNl
dHRpbmdzLXJvdyBpbnB1dCB7Ci0gICAgd2lkdGg6IDE5MHB4OwotfQotCi0uc2V0dGluZ3MtdGFi
IC5maWxlLW1hcHBpbmdzLWVkaXRvciAud29ya3NwYWNlLXNldHRpbmdzLXJvdyBpbnB1dC5maWxl
LW1hcHBpbmctdXJsIHsKLSAgICBtYXJnaW4tcmlnaHQ6IDNweDsKLX0KLQotI3dvcmtzcGFjZS10
YWItY29udGVudCAuYnV0dG9uOmhvdmVyIHsKLSAgICBvcGFjaXR5OiAxLjAgIWltcG9ydGFudDsK
LX0KLQotI3dvcmtzcGFjZS10YWItY29udGVudCAud29ya3NwYWNlLXNldHRpbmdzLXJvdzpob3Zl
ciAuYnV0dG9uIHsKLSAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwotICAgIG9wYWNpdHk6IDAuNDsK
LX0KLQotI3dvcmtzcGFjZS10YWItY29udGVudCAud29ya3NwYWNlLXNldHRpbmdzLXJvdyAuYnV0
dG9uIHsKLSAgICB3aWR0aDogMTBweDsKLSAgICBoZWlnaHQ6IDEwcHg7Ci0gICAgYm9yZGVyOiBu
b25lOwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB0cmFuc3BhcmVudDsKLSAgICB2aXNpYmlsaXR5OiBoaWRkZW47Ci0gICAgYmFja2dyb3VuZC1w
b3NpdGlvbjogY2VudGVyOwotICAgIG1hcmdpbjogMCAwIDAgNHB4OwotfQotCi0jd29ya3NwYWNl
LXRhYi1jb250ZW50IC53b3Jrc3BhY2Utc2V0dGluZ3Mtcm93IC5yZW1vdmUtYnV0dG9uIHsKLSAg
ICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL2RlbGV0ZUljb24ucG5nKTsKLX0KLQotI3dv
cmtzcGFjZS10YWItY29udGVudCAud29ya3NwYWNlLXNldHRpbmdzLXJvdyAuYWRkLWJ1dHRvbiB7
Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9hZGRJY29uLnBuZyk7Ci19Ci0KLSN3
b3Jrc3BhY2UtdGFiLWNvbnRlbnQgLndvcmtzcGFjZS1zZXR0aW5ncy1yb3cgLmZpbGUtc3lzdGVt
LWFkZC1idXR0b24gewotICAgIGNvbG9yOiBncmF5OwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBi
b3JkZXItYm90dG9tOiAxcHggdHJhbnNwYXJlbnQgc29saWQ7Ci0gICAgLXdlYmtpdC1hcHBlYXJh
bmNlOiBub25lOwotICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwotfQotCi0jd29ya3NwYWNl
LXRhYi1jb250ZW50IC53b3Jrc3BhY2Utc2V0dGluZ3Mtcm93IC5maWxlLXN5c3RlbS1hZGQtYnV0
dG9uOmhvdmVyIHsKLSAgICBib3JkZXItYm90dG9tOiAxcHggZ3JheSBkYXNoZWQ7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luZGV4ZWREQlZpZXdz
LmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5kZXhlZERCVmlld3Mu
Y3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGMwMzhkLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5kZXhlZERCVmlld3MuY3NzCisr
KyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0uaW5kZXhlZC1kYi1kYXRhYmFzZS12aWV3IHsK
LSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwotICAgIG1hcmdpbi10b3A6IDVweDsKLX0K
LQotLmluZGV4ZWQtZGItZGF0YWJhc2UtdmlldyAub3V0bGluZS1kaXNjbG9zdXJlIHsKLSAgICBw
YWRkaW5nLWxlZnQ6IDA7Ci19Ci0KLS5pbmRleGVkLWRiLWRhdGFiYXNlLXZpZXcgLm91dGxpbmUt
ZGlzY2xvc3VyZSBsaSB7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLQotLmluZGV4ZWQt
ZGItZGF0YWJhc2UtdmlldyAub3V0bGluZS1kaXNjbG9zdXJlIC5hdHRyaWJ1dGUtbmFtZSB7Ci0g
ICAgY29sb3I6IHJnYigzMyUsIDMzJSwgMzMlKTsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
Ci0gICAgbWFyZ2luLXJpZ2h0OiAwLjVlbTsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICB2
ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotCi0uaW5kZXhlZC1kYi1kYXRhYmFzZS12aWV3IC5vdXRs
aW5lLWRpc2Nsb3N1cmUgLmF0dHJpYnV0ZS12YWx1ZSB7Ci0gICAgZGlzcGxheTogaW5saW5lOwot
ICAgIG1hcmdpbi10b3A6IDFweDsKLX0KLQotLmluZGV4ZWQtZGItZGF0YS12aWV3IC5kYXRhLXZp
ZXctdG9vbGJhciB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIG1hcmdpbi10b3A6IC0x
cHg7Ci0gICAgaGVpZ2h0OiAyNHB4OwotfQotCi0uaW5kZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEt
dmlldy10b29sYmFyIC5iYWNrLWJ1dHRvbiBpbWcgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMv
YmFjay5wbmcpOwotfQotCi0uaW5kZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEtdmlldy10b29sYmFy
IC5mb3J3YXJkLWJ1dHRvbiBpbWcgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvZm9yd2FyZC5w
bmcpOwotfQotCi0uaW5kZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEtdmlldy10b29sYmFyIC5rZXkt
aW5wdXQgewotICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICBtYXJnaW4tdG9wOiAzcHg7Ci0gICAg
bWFyZ2luLWxlZnQ6IDNweDsKLSAgICB3aWR0aDogMjAwcHg7Ci19Ci0KLS5pbmRleGVkLWRiLWRh
dGEtdmlldyAuZGF0YS1ncmlkLWNvbnRhaW5lciB7Ci0gICAgdG9wOiAyM3B4OwotfQotCi0uaW5k
ZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEtZ3JpZCB7Ci0gICAgaGVpZ2h0OiAxMDAlOwotICAgIGJv
cmRlcjogMDsKLX0KLQotLmluZGV4ZWQtZGItZGF0YS12aWV3IC5kYXRhLWdyaWQgLmRhdGEtY29u
dGFpbmVyIHRyOm50aC1jaGlsZChldmVuKSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7
Ci19Ci0KLS5pbmRleGVkLWRiLWRhdGEtdmlldyAuZGF0YS1ncmlkIC5kYXRhLWNvbnRhaW5lciB0
cjpudGgtY2hpbGQob2RkKSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI0VBRjNGRjsKLX0KLQot
LmluZGV4ZWQtZGItZGF0YS12aWV3IC5kYXRhLWdyaWQgLmRhdGEtY29udGFpbmVyIHRyOm50aC1s
YXN0LWNoaWxkKDEpIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLX0KLQotLmluZGV4
ZWQtZGItZGF0YS12aWV3IC5kYXRhLWdyaWQgLmRhdGEtY29udGFpbmVyIHRyOm50aC1sYXN0LWNo
aWxkKDEpIHRkIHsKLSAgICBib3JkZXI6IDA7Ci19Ci0KLS5pbmRleGVkLWRiLWRhdGEtdmlldyAu
ZGF0YS1ncmlkIC5kYXRhLWNvbnRhaW5lciB0ZCB7Ci0gICAgaGVpZ2h0OiAxOHB4OwotfQotCi0u
aW5kZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEtZ3JpZCAuZGF0YS1jb250YWluZXIgdGQudmFsdWUt
Y29sdW1uLAotLmluZGV4ZWQtZGItZGF0YS12aWV3IC5kYXRhLWdyaWQgLmRhdGEtY29udGFpbmVy
IHRkLmtleS1jb2x1bW4sCi0uaW5kZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEtZ3JpZCAuZGF0YS1j
b250YWluZXIgdGQucHJpbWFyeUtleS1jb2x1bW4gewotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLS5p
bmRleGVkLWRiLWRhdGEtdmlldyAuZGF0YS1ncmlkIC5kYXRhLWNvbnRhaW5lciB0ZC52YWx1ZS1j
b2x1bW4gZGl2LnByaW1pdGl2ZS12YWx1ZSwKLS5pbmRleGVkLWRiLWRhdGEtdmlldyAuZGF0YS1n
cmlkIC5kYXRhLWNvbnRhaW5lciB0ZC5rZXktY29sdW1uIGRpdi5wcmltaXRpdmUtdmFsdWUsCi0u
aW5kZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEtZ3JpZCAuZGF0YS1jb250YWluZXIgdGQucHJpbWFy
eUtleS1jb2x1bW4gZGl2LnByaW1pdGl2ZS12YWx1ZSB7Ci0gICAgcGFkZGluZy1sZWZ0OiA1cHg7
Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotfQotCi0uaW5kZXhlZC1kYi1kYXRhLXZpZXcgLmRhdGEt
Z3JpZCAuZGF0YS1jb250YWluZXIgdGQgLnNlY3Rpb24gLmhlYWRlciAudGl0bGUgewotICAgIHdo
aXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3Zl
cmZsb3c6IGhpZGRlbjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI0MmY5Yy4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyODc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBbnRob255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotaW5wdXRb
dHlwZT0ic2VhcmNoIl06Zm9jdXMsIGlucHV0W3R5cGU9InRleHQiXTpmb2N1cyB7Ci0gICAgb3V0
bGluZTogYXV0byA1cHggLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOwotfQotCi0uZmlsbCB7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJp
Z2h0OiAwOwotICAgIGJvdHRvbTogMDsKLX0KLQotLmlubGluZS1ibG9jayB7Ci0gICAgZGlzcGxh
eTogaW5saW5lLWJsb2NrOwotfQotCi0uaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQot
Ci0ubm93cmFwIHsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7Ci19Ci0KLS5s
YXlvdXQtYm91bmRhcnkgewotICAgIHdpZHRoOiAxMDAlOwotICAgIG92ZXJmbG93OiBoaWRkZW47
Ci0gICAgLyogcG9zaXRpb24gbXVzdCBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSAqLwotICAgIC8q
IGhlaWdodCBtdXN0IGJlIGEgcGl4ZWwgdmFsdWUgKi8KLX0KLQotI3Rvb2xiYXIgewotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDog
MDsKLSAgICBoZWlnaHQ6IDI2cHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFk
aWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMTkxLCAxOTEsIDE5
MSkpLCB0byhyZ2IoMTUxLCAxNTEsIDE1MSkpKTsKLSAgICBwYWRkaW5nLXRvcDogMXB4OwotICAg
IHBhZGRpbmctbGVmdDogNXB4OwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoODAs
IDgwLCA4MCk7Ci0gICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwotICAgIC13ZWJraXQt
YmFja2dyb3VuZC1vcmlnaW46IHBhZGRpbmc7Ci0gICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6
IHBhZGRpbmc7Ci19Ci0KLWJvZHkuc2hvdy10b29sYmFyLWljb25zICN0b29sYmFyIHsKLSAgICBo
ZWlnaHQ6IDU2cHg7Ci19Ci0KLWJvZHkuc2hvdy10b29sYmFyLWljb25zLmRvY2stdG8tYm90dG9t
ICN0b29sYmFyIHsKLSAgICBoZWlnaHQ6IDM0cHg7Ci19Ci0KLWJvZHkuaW5hY3RpdmUgI3Rvb2xi
YXIgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0
IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDIzMywgMjMzLCAyMzMpKSwgdG8ocmdiKDIwNywg
MjA3LCAyMDcpKSk7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYig2NCUsIDY0JSwg
NjQlKTsKLX0KLQotYm9keS51bmRvY2tlZC5wbGF0Zm9ybS1tYWMtbGVvcGFyZCAjdG9vbGJhciwK
LWJvZHkudW5kb2NrZWQucGxhdGZvcm0tbWFjLXNub3dsZW9wYXJkICN0b29sYmFyIHsKLSAgICBi
YWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKLX0KLQotYm9keS5kb2NrLXRvLWJvdHRvbSAjdG9vbGJh
ciB7Ci0gICAgcGFkZGluZy10b3A6IDA7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYigx
MDAsIDEwMCwgMTAwKTsKLSAgICBjdXJzb3I6IG5zLXJlc2l6ZTsKLX0KLQotYm9keS5kb2NrLXRv
LWJvdHRvbS5wb3J0LXF0ICN0b29sYmFyIHsKLSAgICBjdXJzb3I6IGF1dG87Ci19Ci0KLWJvZHku
ZG9jay10by1ib3R0b20uaW5hY3RpdmUgI3Rvb2xiYXIgewotICAgIGJvcmRlci10b3A6IDFweCBz
b2xpZCByZ2IoNjQlLCA2NCUsIDY0JSk7Ci19Ci0KLS50b29sYmFyLWl0ZW0gewotICAgIG1hcmdp
bjogMDsKLSAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJh
bnNwYXJlbnQ7Ci0gICAgYm9yZGVyLXN0eWxlOiBub25lOwotICAgIGJvcmRlci1jb2xvcjogdHJh
bnNwYXJlbnQ7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7
Ci0gICAgZm9udC1zaXplOiBpbmhlcml0OwotfQotCi1ib2R5Om5vdCguc2hvdy10b29sYmFyLWlj
b25zKSAudG9vbGJhci1pdGVtIHsKLSAgICBoZWlnaHQ6IDI0cHg7Ci19Ci0KLWJvZHkuZG9jay10
by1ib3R0b206bm90KC5zaG93LXRvb2xiYXItaWNvbnMpIC50b29sYmFyLWl0ZW0udG9nZ2xlYWJs
ZSB7Ci0gICAgcGFkZGluZzogMCAxMXB4OwotfQotCi1ib2R5LmRvY2stdG8tYm90dG9tOm5vdCgu
c2hvdy10b29sYmFyLWljb25zKSAudG9vbGJhci1pdGVtLnRvZ2dsZWFibGUudG9nZ2xlZC1vbiB7
Ci0gICAgcGFkZGluZzogMCA5cHg7Ci19Ci0KLWJvZHkuc2hvdy10b29sYmFyLWljb25zIC50b29s
YmFyLWl0ZW0udG9nZ2xlYWJsZSB7Ci0gICAgcGFkZGluZy10b3A6IDRweDsKLSAgICBwYWRkaW5n
LWJvdHRvbTogNHB4OwotfQotCi1ib2R5LnNob3ctdG9vbGJhci1pY29ucy5kb2NrLXRvLWJvdHRv
bSAudG9vbGJhci1pdGVtLnRvZ2dsZWFibGUgewotICAgIG1hcmdpbjogMXB4IDA7Ci0gICAgcGFk
ZGluZy1ib3R0b206IDJweDsKLX0KLQotLnRvb2xiYXItaXRlbS50b2dnbGVhYmxlLnRvZ2dsZWQt
b24gewotICAgIGJvcmRlci13aWR0aDogMCAycHggMCAycHg7Ci0gICAgcGFkZGluZy1sZWZ0OiA0
cHg7Ci0gICAgcGFkZGluZy1yaWdodDogNHB4OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1
cmwoSW1hZ2VzL3Rvb2xiYXJJdGVtU2VsZWN0ZWQucG5nKSAwIDIgMCAyOwotfQotCi0udG9vbGJh
ci1pY29uIHsKLSAgICBkaXNwbGF5OiBub25lOwotICAgIHdpZHRoOiAzMnB4OwotICAgIGhlaWdo
dDogMzJweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3Rvb2xiYXJJY29ucy5w
bmcpOwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLWJvZHkuZG9jay10by1ib3R0b20g
LnRvb2xiYXItaWNvbiB7Ci0gICAgd2lkdGg6IDI0cHg7Ci0gICAgaGVpZ2h0OiAyNHB4OwotICAg
IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdl
cy90b29sYmFySWNvbnNTbWFsbC5wbmcpOwotfQotCi1ib2R5LnNob3ctdG9vbGJhci1pY29ucyAu
dG9vbGJhci1pY29uIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci19Ci0KLWJvZHkuZG9j
ay10by1ib3R0b20gLnRvb2xiYXItaWNvbi5jdXN0b20tdG9vbGJhci1pY29uIHsKLSAgICBiYWNr
Z3JvdW5kLXBvc2l0aW9uLXg6IC0zMnB4OwotfQotCi0udG9vbGJhci1pdGVtOmFjdGl2ZSAudG9v
bGJhci1pY29uIHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDMycHg7Ci19Ci0KLWJvZHku
ZG9jay10by1ib3R0b20gLnRvb2xiYXItaXRlbTphY3RpdmUgLnRvb2xiYXItaWNvbiB7Ci0gICAg
YmFja2dyb3VuZC1wb3NpdGlvbi15OiAyNHB4OwotfQotCi0udG9vbGJhci1sYWJlbCB7Ci0gICAg
bGluZS1oZWlnaHQ6IDIycHg7Ci0gICAgdGV4dC1zaGFkb3c6IHJnYmEoMjU1LCAyNTUsIDI1NSwg
MC41KSAwIDFweCAwOwotfQotCi1ib2R5LnNob3ctdG9vbGJhci1pY29ucyAudG9vbGJhci1sYWJl
bCB7Ci0gICAgbGluZS1oZWlnaHQ6IDE1cHg7Ci19Ci0KLS50b29sYmFyLWl0ZW0udG9nZ2xlYWJs
ZTphY3RpdmUgLnRvb2xiYXItbGFiZWwgewotICAgIHRleHQtc2hhZG93OiBub25lOwotfQotCi1i
b2R5LnNob3ctdG9vbGJhci1pY29ucy5kb2NrLXRvLWJvdHRvbSAudG9vbGJhci1sYWJlbCB7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIG1hcmdpbi1sZWZ0OiAzcHg7Ci0gICAgdG9w
OiAwOwotfQotCi1ib2R5LmRvY2stdG8tYm90dG9tICNzZWFyY2gtdG9vbGJhci1sYWJlbCB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKLX0KLQotI3Rvb2xiYXItY29udHJvbHMgewotICAgIGZsb2F0OiBy
aWdodDsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7Ci0gICAgLXdlYmtpdC1hbGlnbi1pdGVt
czogY2VudGVyOwotICAgIGhlaWdodDogMTAwJTsKLX0KLQotI3Rvb2xiYXItZHJvcGRvd24tYXJy
b3cgewotICAgIGZvbnQtc2l6ZTogMTRweDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBi
b3JkZXI6IDA7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgLXdlYmtp
dC1ib3JkZXItcmFkaXVzOiA1cHg7Ci0gICAgdGV4dC1zaGFkb3c6IG5vbmU7Ci0gICAgY3Vyc29y
OiBkZWZhdWx0OwotICAgIG1hcmdpbjogMDsKLSAgICAvKiBBIGxpbmUgaGVpZ2h0IG9mIDAgYWxs
b3dzIHByZWNpc2UgdGV4dCBwb3NpdGlvbmluZyB1c2luZyBwYWRkaW5nLiAqLwotICAgIGxpbmUt
aGVpZ2h0OiAwOwotICAgIHBhZGRpbmc6IDExcHggNnB4IDExcHg7Ci19Ci0KLSN0b29sYmFyLWRy
b3Bkb3duLWFycm93LmRyb3Bkb3duLXZpc2libGUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13
ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiYSgy
NTEsIDI1MSwgMjUxLCAwLjkpKSwgdG8ocmdiYSgyMzEsIDIzMSwgMjMxLCAwLjkpKSk7Ci19Ci0K
LSN0b29sYmFyLWRyb3Bkb3duLWFycm93OmhvdmVyIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAt
d2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEo
MTkxLCAxOTEsIDE5MSwgMC43KSksIHRvKHJnYmEoMTcxLCAxNzEsIDE3MSwgMC41KSkpOwotfQot
Ci0jdG9vbGJhci1kcm9wZG93bi1hcnJvdzphY3RpdmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6
IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdi
YSgxMTEsIDExMSwgMTExLCAwLjgpKSwgdG8ocmdiYSg5MSwgOTEsIDkxLCAwLjgpKSk7Ci19Ci0K
LSN0b29sYmFyLWRyb3Bkb3duIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgei1pbmRl
eDogMTAwMDsKLSAgICAtd2Via2l0LWJveC1zaGFkb3c6IDNweCAzcHggM3B4IHJnYmEoMCwgMCwg
MCwgMC40KTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTI4LCAxMjgsIDEyOCk7Ci0gICAg
YmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbmhlcml0
OwotfQotCi1ib2R5LnNob3ctdG9vbGJhci1pY29ucyAjdG9vbGJhci1kcm9wZG93biB7Ci0gICAg
cGFkZGluZzogNHB4OwotfQotCi1ib2R5LnVuZG9ja2VkLnBsYXRmb3JtLW1hYy1sZW9wYXJkICN0
b29sYmFyLWRyb3Bkb3duLAotYm9keS51bmRvY2tlZC5wbGF0Zm9ybS1tYWMtc25vd2xlb3BhcmQg
I3Rvb2xiYXItZHJvcGRvd24gewotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGll
bnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDE5MSwgMTkxLCAxOTEp
KSwgdG8ocmdiKDE1MSwgMTUxLCAxNTEpKSk7Ci19Ci0KLSN0b29sYmFyLWRyb3Bkb3duIC5zY3Jv
bGxhYmxlLWNvbnRlbnQgewotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0
LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1z
dGFydDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAwOwotfQotCi0jdG9vbGJhci1kcm9wZG93biAudG9v
bGJhci1pdGVtIHsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7Ci0gICAgLXdlYmtpdC1mbGV4
LWRpcmVjdGlvbjogcm93OwotICAgIHdpZHRoOiAxMDAlOwotICAgIGJvcmRlcjogMXB4IHNvbGlk
IHJnYmEoMCwgMCwgMCwgMCk7Ci19Ci0KLWJvZHkuc2hvdy10b29sYmFyLWljb25zICN0b29sYmFy
LWRyb3Bkb3duIC50b29sYmFyLWl0ZW0gewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBs
ZWZ0OiAtMnB4OwotICAgIG1hcmdpbjogMHB4IDJweDsKLSAgICBwYWRkaW5nOiA0cHg7Ci19Ci0K
LSN0b29sYmFyLWRyb3Bkb3duIC50b29sYmFyLWl0ZW0udG9nZ2xlYWJsZS50b2dnbGVkLW9uIHsK
LSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEwMCwgMTAwLCAxMjAsIDAuNCk7Ci0gICAgLXdl
YmtpdC1ib3JkZXItaW1hZ2U6IG5vbmU7Ci0gICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVu
dChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2JhKDEyOCwgMTI4LCAxMjgs
IDAuNikpLCB0byhyZ2JhKDEyOCwgMTI4LCAxMjgsIDAuNikpLCBjb2xvci1zdG9wKDIwJSwgcmdi
YSgxNTgsIDE1OCwgMTU4LCAwLjIpKSwgY29sb3Itc3RvcCg4MCUsIHJnYmEoMTU4LCAxNTgsIDE1
OCwgMC4yKSkpOwotfQotCi0jdG9vbGJhci1kcm9wZG93biAudG9vbGJhci1pdGVtLnRvZ2dsZWFi
bGU6aG92ZXIgewotICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0
IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiYSgxMjgsIDEyOCwgMTI4LCAwLjYpKSwgdG8ocmdi
YSgxMjgsIDEyOCwgMTI4LCAwLjMpKSwgY29sb3Itc3RvcCgyMCUsIHJnYmEoMTU4LCAxNTgsIDE1
OCwgMC4yKSksIGNvbG9yLXN0b3AoODAlLCByZ2JhKDE1OCwgMTU4LCAxNTgsIDAuMSkpKTsKLX0K
LQotI3Rvb2xiYXItZHJvcGRvd24gLnRvb2xiYXItaWNvbiB7Ci0gICAgbWFyZ2luLXJpZ2h0OiAw
LjVlbTsKLX0KLQotI3Rvb2xiYXItZHJvcGRvd24gLnRvb2xiYXItbGFiZWwgewotICAgIGxpbmUt
aGVpZ2h0OiAyMnB4OwotICAgIHRvcDogMDsKLX0KLQotYm9keS5zaG93LXRvb2xiYXItaWNvbnMg
I3Rvb2xiYXItZHJvcGRvd24gLnRvb2xiYXItbGFiZWwgewotICAgIGxpbmUtaGVpZ2h0OiAzMnB4
OwotfQotCi0jdG9vbGJhci1wYW5lbHMtbWVudSB7Ci0gICAgZm9udC1zaXplOiAxN3B4OwotICAg
IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGJvcmRlcjogMDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB0cmFuc3BhcmVudDsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKLSAgICB0ZXh0
LXNoYWRvdzogbm9uZTsKLSAgICBjdXJzb3I6IGRlZmF1bHQ7Ci0gICAgbWFyZ2luOiAwOwotICAg
IC8qIEEgbGluZSBoZWlnaHQgb2YgMCBhbGxvd3MgcHJlY2lzZSB0ZXh0IHBvc2l0aW9uaW5nIHVz
aW5nIHBhZGRpbmcuICovCi0gICAgbGluZS1oZWlnaHQ6IDA7Ci0gICAgcGFkZGluZzogMTNweCA2
cHggMTFweDsKLX0KLQotI3Rvb2xiYXItcGFuZWxzLW1lbnU6aG92ZXIgewotICAgIGJhY2tncm91
bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20s
IGZyb20ocmdiYSgxOTEsIDE5MSwgMTkxLCAwLjcpKSwgdG8ocmdiYSgxNzEsIDE3MSwgMTcxLCAw
LjUpKSk7Ci19Ci0KLSN0b29sYmFyLXBhbmVscy1tZW51OmFjdGl2ZSB7Ci0gICAgYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwg
ZnJvbShyZ2JhKDExMSwgMTExLCAxMTEsIDAuOCkpLCB0byhyZ2JhKDkxLCA5MSwgOTEsIDAuOCkp
KTsKLX0KLQotLnNjcm9sbGFibGUtY29udGVudCB7Ci0gICAgcG9zaXRpb246IHN0YXRpYzsKLSAg
ICBoZWlnaHQ6IDEwMCU7Ci0gICAgb3ZlcmZsb3cteTogYXV0bzsKLSAgICB3aWR0aDogMTAwJTsK
LSAgICBtYXJnaW4tcmlnaHQ6IDEycHg7Ci0gICAgcGFkZGluZy1yaWdodDogM3B4OwotfQotCi0u
c2Nyb2xsYWJsZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhciB7Ci0gICAgd2lkdGg6IDExcHg7
Ci19Ci0KLS5zY3JvbGxhYmxlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciwKLS5z
Y3JvbGxhYmxlLWNvbnRlbnQ6Oi13ZWJraXQtcmVzaXplciB7Ci0gICAgZGlzcGxheTogbm9uZTsK
LX0KLQotLnNjcm9sbGFibGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6dmVydGlj
YWwgewotICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwg
cmlnaHQgdG9wLCBmcm9tKHJnYigxOTIsIDE5MiwgMTkyKSksIHRvKHJnYigxOTIsIDE5MiwgMTky
KSksIGNvbG9yLXN0b3AoNDAlLCByZ2IoMjE0LCAyMTQsIDIxNCkpKTsKLSAgICBib3JkZXItcmFk
aXVzOiA1cHg7Ci0gICAgbWluLWhlaWdodDogMjBweDsKLX0KLQotLnNjcm9sbGFibGUtY29udGVu
dDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6dmVydGljYWw6aG92ZXIsCi0uc2Nyb2xsYWJsZS1j
b250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbDphY3RpdmUgewotICAgIGJh
Y2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgcmlnaHQgdG9wLCBm
cm9tKHJnYigyMzAsIDIzMCwgMjMwKSksIHRvKHJnYigyMzAsIDIzMCwgMjMwKSksIGNvbG9yLXN0
b3AoNDAlLCByZ2IoMjUyLCAyNTIsIDI1MikpKTsKLX0KLQotLnNjcm9sbGFibGUtY29udGVudDo6
LXdlYmtpdC1zY3JvbGxiYXItdHJhY2s6dmVydGljYWwgewotICAgIGJhY2tncm91bmQ6IC13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgcmlnaHQgdG9wLCBmcm9tKHJnYigxMjgsIDEy
OCwgMTI4KSksIHRvKHJnYigxNjQsIDE2NCwgMTY0KSksIGNvbG9yLXN0b3AoMjUlLCByZ2IoMTY0
LCAxNjQsIDE2NCkpKTsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci19Ci0KLS5zZWFyY2gtcmVw
bGFjZSB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwotICAgIGJvcmRlcjogMDsKLSAg
ICBwYWRkaW5nOiAwIDJweDsKLSAgICBtYXJnaW46IDA7Ci0gICAgd2lkdGg6IDE2NXB4OwotfQot
Ci0uZmlsdGVyIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgYm9yZGVyOiAw
OwotICAgIHBhZGRpbmc6IDAgMnB4OwotICAgIG1hcmdpbjogMDsKLSAgICB3aWR0aDogMjUxcHg7
Ci19Ci0KLS5zZWFyY2gtcmVwbGFjZTpmb2N1cyB7Ci0gICAgb3V0bGluZTogbm9uZTsKLX0KLQot
LnRvb2xiYXItc2VhcmNoIHsKLSAgICBib3JkZXItc3BhY2luZzogMXB4OwotfQotCi0udG9vbGJh
ci1zZWFyY2ggdGQgewotICAgIHBhZGRpbmc6IDAgNXB4IDAgMDsKLX0KLQotLnRvb2xiYXItc2Vh
cmNoLW5hdmlnYXRpb24tY29udHJvbHMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0
b3A6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgaGVpZ2h0OiAxOHB4OwotICAgIGJhY2tncm91bmQt
aW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHJnYigyMjgsIDIyOCwgMjI4KSwgcmdiKDIw
NiwgMjA2LCAyMDYpKTsKLX0KLQotLnRvb2xiYXItc2VhcmNoLW5hdmlnYXRpb24gewotICAgIGRp
c3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB3aWR0aDogMThweDsKLSAgICBoZWlnaHQ6IDE4cHg7
Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0
aW9uOiA0cHggN3B4OwotICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDE3MCwgMTcwLCAx
NzApOwotICAgIG9wYWNpdHk6IDAuMzsKLX0KLQotLnRvb2xiYXItc2VhcmNoLW5hdmlnYXRpb24u
ZW5hYmxlZCB7Ci0gICAgb3BhY2l0eTogMS4wOwotfQotCi0udG9vbGJhci1zZWFyY2ggaW5wdXRb
dHlwZT0iY2hlY2tib3giXSB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIG1hcmdpbi10
b3A6IC0xcHg7Ci0gICAgbWFyZ2luLWxlZnQ6IDE1cHg7Ci0gICAgdG9wOiAycHg7Ci19Ci0KLS50
b29sYmFyLXNlYXJjaCBidXR0b24gewotICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNjMsIDE2
MywgMTYzKTsKLSAgICBib3JkZXItcmFkaXVzOiA4cHg7Ci0gICAgbWFyZ2luOiAwIDBweDsKLSAg
ICBmb250LXNpemU6IDExcHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXIt
Z3JhZGllbnQocmdiKDI0MSwgMjQxLCAyNDEpLCByZ2IoMjIwLCAyMjAsIDIyMCkpOwotICAgIHdp
ZHRoOiAxMDAlOwotfQotCi0udG9vbGJhci1zZWFyY2ggYnV0dG9uOmFjdGl2ZSB7Ci0gICAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmdiKDE4NSwgMTg1LCAxODUp
LCByZ2IoMTU2LCAxNTYsIDE1NikpOwotfQotCi0udG9vbGJhci1zZWFyY2gtY29udHJvbCB7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTYzLCAx
NjMsIDE2Myk7Ci0gICAgaGVpZ2h0OiAyMHB4OwotICAgIGJvcmRlci1yYWRpdXM6IDJweDsKLSAg
ICBwYWRkaW5nLXRvcDogMXB4OwotfQotCi0udG9vbGJhci1yZXBsYWNlLWNvbnRyb2wgewotICAg
IGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNjMsIDE2MywgMTYzKTsKLSAgICBoZWlnaHQ6IDIwcHg7
Ci0gICAgYm9yZGVyLXJhZGl1czogMnB4OwotICAgIHdpZHRoOiAxMDAlOwotfQotCi0udG9vbGJh
ci1zZWFyY2gtbmF2aWdhdGlvbi5lbmFibGVkOmFjdGl2ZSB7Ci0gICAgYmFja2dyb3VuZC1wb3Np
dGlvbjogNHB4IDdweCwgMHB4IDBweDsKLX0KLQotLnRvb2xiYXItc2VhcmNoLW5hdmlnYXRpb24u
dG9vbGJhci1zZWFyY2gtbmF2aWdhdGlvbi1wcmV2IHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1
cmwoSW1hZ2VzL3NlYXJjaFByZXYucG5nKTsKLSAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJn
YigxNjMsIDE2MywgMTYzKTsKLX0KLQotLnRvb2xiYXItc2VhcmNoLW5hdmlnYXRpb24udG9vbGJh
ci1zZWFyY2gtbmF2aWdhdGlvbi1wcmV2LmVuYWJsZWQ6YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5k
LWltYWdlOiB1cmwoSW1hZ2VzL3NlYXJjaFByZXYucG5nKSwgLXdlYmtpdC1saW5lYXItZ3JhZGll
bnQocmdiKDE2OCwgMTY4LCAxNjgpLCByZ2IoMTE2LCAxMTYsIDExNikpOwotfQotCi0udG9vbGJh
ci1zZWFyY2gtbmF2aWdhdGlvbi50b29sYmFyLXNlYXJjaC1uYXZpZ2F0aW9uLW5leHQgewotICAg
IGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvc2VhcmNoTmV4dC5wbmcpOwotICAgIGJvcmRl
ci1sZWZ0OiAxcHggc29saWQgcmdiKDIzMCwgMjMwLCAyMzApOwotfQotCi0udG9vbGJhci1zZWFy
Y2gtbmF2aWdhdGlvbi50b29sYmFyLXNlYXJjaC1uYXZpZ2F0aW9uLW5leHQuZW5hYmxlZDphY3Rp
dmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvc2VhcmNoTmV4dC5wbmcpLCAt
d2Via2l0LWxpbmVhci1ncmFkaWVudChyZ2IoMTY4LCAxNjgsIDE2OCksIHJnYigxMTYsIDExNiwg
MTE2KSk7Ci19Ci0KLS5zZWFyY2gtcmVzdWx0cy1tYXRjaGVzIHsKLSAgICBkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7Ci0gICAgbWluLXdpZHRoOiA1MHB4OwotICAgIG1pbi1oZWlnaHQ6IDEwcHg7Ci0g
ICAgbWFyZ2luLXJpZ2h0OiAzNnB4OwotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIGZvbnQt
c2l6ZTogMTFweDsKLSAgICBwYWRkaW5nOiAwIDRweDsKLSAgICBjb2xvcjogcmdiKDE2NSwgMTY1
LCAxNjUpOwotfQotCi0udG9vbGJhci1pdGVtLmVsZW1lbnRzIC50b29sYmFyLWljb24gewotICAg
IGJhY2tncm91bmQtcG9zaXRpb24teDogMDsKLX0KLQotLnRvb2xiYXItaXRlbS5yZXNvdXJjZXMg
LnRvb2xiYXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAtMzJweDsKLX0KLQot
Ym9keS5kb2NrLXRvLWJvdHRvbSAudG9vbGJhci1pdGVtLnJlc291cmNlcyAudG9vbGJhci1pY29u
IHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IC0yNHB4OwotfQotCi0udG9vbGJhci1pdGVt
Lm5ldHdvcmsgLnRvb2xiYXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAtNjRw
eDsKLX0KLQotYm9keS5kb2NrLXRvLWJvdHRvbSAudG9vbGJhci1pdGVtLm5ldHdvcmsgLnRvb2xi
YXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAtNDhweDsKLX0KLQotLnRvb2xi
YXItaXRlbS5zY3JpcHRzIC50b29sYmFyLWljb24gewotICAgIGJhY2tncm91bmQtcG9zaXRpb24t
eDogLTk2cHg7Ci19Ci0KLWJvZHkuZG9jay10by1ib3R0b20gLnRvb2xiYXItaXRlbS5zY3JpcHRz
IC50b29sYmFyLWljb24gewotICAgIGJhY2tncm91bmQtcG9zaXRpb24teDogLTcycHg7Ci19Ci0K
LS50b29sYmFyLWl0ZW0udGltZWxpbmUgLnRvb2xiYXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1w
b3NpdGlvbi14OiAtMTI4cHg7Ci19Ci0KLWJvZHkuZG9jay10by1ib3R0b20gLnRvb2xiYXItaXRl
bS50aW1lbGluZSAudG9vbGJhci1pY29uIHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IC05
NnB4OwotfQotCi0udG9vbGJhci1pdGVtLnByb2ZpbGVzIC50b29sYmFyLWljb24gewotICAgIGJh
Y2tncm91bmQtcG9zaXRpb24teDogLTE2MHB4OwotfQotCi1ib2R5LmRvY2stdG8tYm90dG9tIC50
b29sYmFyLWl0ZW0ucHJvZmlsZXMgLnRvb2xiYXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1wb3Np
dGlvbi14OiAtMTIwcHg7Ci19Ci0KLS50b29sYmFyLWl0ZW0uY3B1LXByb2ZpbGVyIC50b29sYmFy
LWljb24gewotICAgIGJhY2tncm91bmQtcG9zaXRpb24teDogLTE2MHB4OwotfQotCi1ib2R5LmRv
Y2stdG8tYm90dG9tIC50b29sYmFyLWl0ZW0uY3B1LXByb2ZpbGVyIC50b29sYmFyLWljb24gewot
ICAgIGJhY2tncm91bmQtcG9zaXRpb24teDogLTEyMHB4OwotfQotCi0udG9vbGJhci1pdGVtLmNz
cy1wcm9maWxlciAudG9vbGJhci1pY29uIHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IC0x
NjBweDsKLX0KLQotYm9keS5kb2NrLXRvLWJvdHRvbSAudG9vbGJhci1pdGVtLmNzcy1wcm9maWxl
ciAudG9vbGJhci1pY29uIHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IC0xMjBweDsKLX0K
LQotLnRvb2xiYXItaXRlbS5oZWFwLXByb2ZpbGVyIC50b29sYmFyLWljb24gewotICAgIGJhY2tn
cm91bmQtcG9zaXRpb24teDogLTE2MHB4OwotfQotCi1ib2R5LmRvY2stdG8tYm90dG9tIC50b29s
YmFyLWl0ZW0uaGVhcC1wcm9maWxlciAudG9vbGJhci1pY29uIHsKLSAgICBiYWNrZ3JvdW5kLXBv
c2l0aW9uLXg6IC0xMjBweDsKLX0KLQotLnRvb2xiYXItaXRlbS5jYW52YXMtcHJvZmlsZXIgLnRv
b2xiYXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAtMTYwcHg7Ci19Ci0KLWJv
ZHkuZG9jay10by1ib3R0b20gLnRvb2xiYXItaXRlbS5jYW52YXMtcHJvZmlsZXIgLnRvb2xiYXIt
aWNvbiB7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAtMTIwcHg7Ci19Ci0KLS50b29sYmFy
LWl0ZW0uYXVkaXRzIC50b29sYmFyLWljb24gewotICAgIGJhY2tncm91bmQtcG9zaXRpb24teDog
LTE5MnB4OwotfQotCi1ib2R5LmRvY2stdG8tYm90dG9tIC50b29sYmFyLWl0ZW0uYXVkaXRzIC50
b29sYmFyLWljb24gewotICAgIGJhY2tncm91bmQtcG9zaXRpb24teDogLTE0NHB4OwotfQotCi0u
dG9vbGJhci1pdGVtLmNvbnNvbGUgLnRvb2xiYXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1wb3Np
dGlvbi14OiAtMjI0cHg7Ci19Ci0KLWJvZHkuZG9jay10by1ib3R0b20gLnRvb2xiYXItaXRlbS5j
b25zb2xlIC50b29sYmFyLWljb24gewotICAgIGJhY2tncm91bmQtcG9zaXRpb24teDogLTE2OHB4
OwotfQotCi0jY2xvc2UtYnV0dG9uLWxlZnQsICNjbG9zZS1idXR0b24tcmlnaHQgewotICAgIHdp
ZHRoOiAxNHB4OwotICAgIGhlaWdodDogMTRweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwo
SW1hZ2VzL2Nsb3NlQnV0dG9ucy5wbmcpOwotICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsK
LX0KLQotI2Nsb3NlLWJ1dHRvbi1sZWZ0OmhvdmVyLCAjY2xvc2UtYnV0dG9uLXJpZ2h0OmhvdmVy
IHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxNHB4IDA7Ci19Ci0KLSNjbG9zZS1idXR0b24t
bGVmdDphY3RpdmUsICNjbG9zZS1idXR0b24tcmlnaHQ6YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5k
LXBvc2l0aW9uOiAyOHB4IDA7Ci19Ci0KLS5jbG9zZS1sZWZ0IHsKLSAgICBmbG9hdDogbGVmdDsK
LX0KLQotYm9keS51bmRvY2tlZCAudG9vbGJhci1pdGVtLmNsb3NlLWxlZnQsIGJvZHkudW5kb2Nr
ZWQgLnRvb2xiYXItaXRlbS5jbG9zZS1yaWdodCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQot
Ym9keS5kb2NrLXRvLWJvdHRvbS5wb3J0LXF0IC50b29sYmFyLWl0ZW0uY2xvc2UtbGVmdCwgYm9k
eS5kb2NrLXRvLWJvdHRvbS5wb3J0LXF0IC50b29sYmFyLWl0ZW0uY2xvc2UtcmlnaHQgewotICAg
IGRpc3BsYXk6IG5vbmU7Ci19Ci0KLWJvZHkucGxhdGZvcm0tbWFjIC50b29sYmFyLWl0ZW0uY2xv
c2UtcmlnaHQgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLWJvZHkucmVtb3RlIC50b29sYmFy
LWl0ZW0uY2xvc2UtbGVmdCwgYm9keS5yZW1vdGUgLnRvb2xiYXItaXRlbS5jbG9zZS1yaWdodCB7
Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotYm9keTpub3QoLnBsYXRmb3JtLW1hYykgLnRvb2xi
YXItaXRlbS5jbG9zZS1sZWZ0IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0udG9vbGJhci1p
dGVtLmNsb3NlLWxlZnQsIC50b29sYmFyLWl0ZW0uY2xvc2UtcmlnaHQgewotICBkaXNwbGF5OiAt
d2Via2l0LWZsZXg7Ci0gIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKLSAgaGVpZ2h0OiAx
MDAlOwotICBjdXJzb3I6IGRlZmF1bHQ7Ci19Ci0KLSNtYWluIHsKLSAgICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gICAgei1pbmRleDogMTsKLSAgICB0b3A6IDI2cHg7Ci0gICAgbGVmdDogMDsKLSAg
ICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLX0KLQotLmFuaW1hdGUtc2xvdyAqIHsKLSAgICAtd2Vi
a2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDIuNXMgIWltcG9ydGFudDsKLX0KLQotLmFuaW1hdGUg
I21haW4gewotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm90dG9tIDEwMG1zIGxpbmVhcjsKLX0K
LQotYm9keS5zaG93LXRvb2xiYXItaWNvbnMgI21haW4gewotICAgIHRvcDogNTZweDsKLX0KLQot
Ym9keS5zaG93LXRvb2xiYXItaWNvbnMuZG9jay10by1ib3R0b20gI21haW4gewotICAgIHRvcDog
MzRweDsKLX0KLQotI21haW4tcGFuZWxzIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAg
dG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAyM3B4Owot
ICAgIG92ZXJmbG93OiBoaWRkZW47Ci19Ci0KLWJvZHkuZHJhd2VyLXZpc2libGUgI21haW4tcGFu
ZWxzIHsKLSAgICBib3R0b206IDI0cHg7Ci19Ci0KLSNtYWluLXN0YXR1cy1iYXIgewotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdo
dDogMDsKLX0KLQotLnN0YXR1cy1iYXIgewotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAg
aGVpZ2h0OiAyM3B4OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgei1pbmRleDogMTI7Ci0g
ICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmdiKDI1MywyNTMs
MjUzKSwgcmdiKDIzMCwyMzAsMjMwKSA3NSUsIHJnYigyMzAsMjMwLDIzMCkpOwotICAgIGJvcmRl
ci10b3A6IDFweCBzb2xpZCByZ2IoMjAyLCAyMDIsIDIwMik7Ci0gICAgZGlzcGxheTogLXdlYmtp
dC1mbGV4OwotfQotCi0uc3RhdHVzLWJhciA+IGRpdiB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJs
b2NrOwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci0gICAgb3ZlcmZsb3c6IHZpc2libGU7Ci19
Ci0KLS5zdGF0dXMtYmFyLWl0ZW0gewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBw
b2ludGVyLWV2ZW50czogYXV0bzsKLSAgICBjdXJzb3I6IGRlZmF1bHQ7Ci0gICAgaGVpZ2h0OiAy
MnB4OwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbWFyZ2luLWxlZnQ6IC0xcHg7Ci0gICAgbWFyZ2lu
LXJpZ2h0OiAwOwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci0gICAgYm9yZGVyOiAwIHRyYW5z
cGFyZW50IG5vbmU7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci19Ci0KLSNm
bG9hdGluZy1zdGF0dXMtYmFyLWNvbnRhaW5lciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIGRpc3BsYXk6
IG5vbmU7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigyMDIsIDIwMiwgMjAyKTsK
LSAgICBjdXJzb3I6IG5zLXJlc2l6ZTsKLSAgICBoZWlnaHQ6IDI0cHg7Ci19Ci0KLS5hbmltYXRl
ICNmbG9hdGluZy1zdGF0dXMtYmFyLWNvbnRhaW5lciB7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9u
OiBwYWRkaW5nIDEwMG1zIGxpbmVhcjsKLX0KLQotYm9keS5kcmF3ZXItdmlzaWJsZSAjZmxvYXRp
bmctc3RhdHVzLWJhci1jb250YWluZXIgewotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLX0K
LQotI2Zsb2F0aW5nLXN0YXR1cy1iYXItcmVzaXplciB7Ci0gICAgY29udGVudDogdXJsKEltYWdl
cy9zdGF0dXNiYXJSZXNpemVyVmVydGljYWwucG5nKTsKLSAgICBtYXJnaW4tdG9wOiA3cHg7Ci0g
ICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Ci0gICAgaGVpZ2h0OiA4cHg7Ci19Ci0KLSNwYW5lbC1z
dGF0dXMtYmFyIHsKLSAgICAtd2Via2l0LWZsZXg6IDEgMDsKLSAgICBkaXNwbGF5OiAtd2Via2l0
LWZsZXg7Ci0gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Ci19Ci0KLSNkcmF3ZXItdmlldy1hbmNo
b3IgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLX0KLQotLnN0YXR1cy1iYXItaXRlbTph
Y3RpdmUgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICB6LWluZGV4OiAyMDA7Ci19Ci0K
LS5nbHlwaCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTFweDsKLSAgICBi
b3R0b206IDFweDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7Ci0gICAgei1pbmRleDogMTsKLX0KLQotLmdseXBo
LnNoYWRvdyB7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiB3aGl0ZSAhaW1wb3J0YW50OwotICAgIHotaW5kZXg6IDA7Ci19Ci0KLS5sb25nLWNsaWNr
LWdseXBoIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOwotICAg
IC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNiYXJCdXR0b25HbHlwaHMucG5n
KTsKLSAgICAtd2Via2l0LW1hc2stcG9zaXRpb246IC0yODhweCAtNDhweDsKLSAgICAtd2Via2l0
LW1hc2stc2l6ZTogMzIwcHggNzJweDsKLSAgICB6LWluZGV4OiAxOwotfQotCi1AbWVkaWEgKC13
ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMS41KSB7Ci0ubG9uZy1jbGljay1nbHlwaCB7
Ci0gICAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoSW1hZ2VzL3N0YXR1c2JhckJ1dHRvbkdseXBo
czJ4LnBuZyk7Ci19Ci19Ci0KLS5sb25nLWNsaWNrLWdseXBoLnNoYWRvdyB7Ci0gICAgdG9wOiAx
cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsKLSAgICB6LWluZGV4
OiAwOwotfQotCi1idXR0b24uc3RhdHVzLWJhci1pdGVtIHsKLSAgICBwb3NpdGlvbjogcmVsYXRp
dmU7Ci0gICAgd2lkdGg6IDMycHg7Ci0gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMjAy
LCAyMDIsIDIwMik7Ci0gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiKDIwMiwgMjAyLCAy
MDIpOwotfQotCi0uc3RhdHVzLWJhciBidXR0b24uc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7Ci0g
ICAgbWFyZ2luOiAwIC0xcHg7Ci19Ci0KLS5zdGF0dXMtYmFyIGJ1dHRvbi5zdGF0dXMtYmFyLWl0
ZW0gaW1nIHsKLSAgICBtYXJnaW4tdG9wOiAxcHg7Ci19Ci0KLS5zdGF0dXMtYmFyIHNlbGVjdC5z
dGF0dXMtYmFyLWl0ZW06YWN0aXZlLAotLnN0YXR1cy1iYXIgYnV0dG9uLnN0YXR1cy1iYXItaXRl
bTphY3RpdmUgewotICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDEyMCwgMTIwLCAxMjAp
OwotICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYigxMjAsIDEyMCwgMTIwKTsKLX0KLQot
YnV0dG9uLnN0YXR1cy1iYXItaXRlbSAuZ2x5cGguc2hhZG93IHsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzMpICFpbXBvcnRhbnQ7Ci19Ci0KLWJ1dHRvbi5z
dGF0dXMtYmFyLWl0ZW0udG9nZ2xlZC1vbiAuZ2x5cGggewotICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYig2NiwgMTI5LCAyMzUpOwotfQotCi1idXR0b24uc3RhdHVzLWJhci1pdGVtOmRpc2FibGVk
IHsKLSAgICBvcGFjaXR5OiAwLjU7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwICFpbXBv
cnRhbnQ7Ci19Ci0KLWJ1dHRvbi5zdGF0dXMtYmFyLWl0ZW0uZXh0ZW5zaW9uIHsKLSAgICBiYWNr
Z3JvdW5kLWltYWdlOiBub25lOwotICAgIGJhY2tncm91bmQtY29sb3I6IGF1dG87Ci19Ci0KLS5z
dGF0dXMtYmFyLXNlbGVjdC1jb250YWluZXIgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK
LSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxs
RG93bi5wbmcpOwotICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0gICAgYmFja2dy
b3VuZC1wb3NpdGlvbi14OiByaWdodDsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDVweDsK
LSAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwotICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRy
YW5zcGFyZW50OwotfQotCi1zZWxlY3Quc3RhdHVzLWJhci1pdGVtIHsKLSAgICBtaW4td2lkdGg6
IDQ4cHg7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgY29sb3I6IHJnYig0OCwgNDgsIDQ4
KTsKLSAgICB0ZXh0LXNoYWRvdzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KSAwIDFweCAwOwot
ICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICBib3JkZXI6IDA7Ci0gICAgYm9yZGVy
LXJhZGl1czogMDsKLSAgICBwYWRkaW5nOiAwIDE1cHggMCA1cHg7Ci0gICAgbWFyZ2luLXJpZ2h0
OiAtMTVweDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAtMXB4OwotfQotCi1z
ZWxlY3Quc3RhdHVzLWJhci1pdGVtLCBzZWxlY3Quc3RhdHVzLWJhci1pdGVtOmhvdmVyIHsKLSAg
ICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYigyMDIsIDIwMiwgMjAyKTsKLSAgICBib3JkZXIt
cmlnaHQ6IDFweCBzb2xpZCByZ2IoMjAyLCAyMDIsIDIwMik7Ci19Ci0KLS5zdGF0dXMtYmFyLWl0
ZW0gPiAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNi
YXJCdXR0b25HbHlwaHMucG5nKTsKLSAgICAtd2Via2l0LW1hc2stc2l6ZTogMzIwcHggNzJweDsK
LX0KLQotQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDEuNSkgewotLnN0
YXR1cy1iYXItaXRlbSA+IC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoSW1h
Z2VzL3N0YXR1c2JhckJ1dHRvbkdseXBoczJ4LnBuZyk7Ci19Ci19Ci0KLWJ1dHRvbi5kb2NrLXN0
YXR1cy1iYXItaXRlbS5zdGF0dXMtYmFyLWl0ZW0udG9nZ2xlZC11bmRvY2sgLmdseXBoIHsKLSAg
ICAtd2Via2l0LW1hc2stcG9zaXRpb246IDAgLTQ4cHg7Ci19Ci0KLWJ1dHRvbi5kb2NrLXN0YXR1
cy1iYXItaXRlbS5zdGF0dXMtYmFyLWl0ZW0udG9nZ2xlZC1ib3R0b20gLmdseXBoIHsKLSAgICAt
d2Via2l0LW1hc2stcG9zaXRpb246IC0zMnB4IC0yNHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYmEoMCwgMCwgMCwgMC43NSk7Ci19Ci0KLWJ1dHRvbi5kb2NrLXN0YXR1cy1iYXItaXRlbS5z
dGF0dXMtYmFyLWl0ZW0udG9nZ2xlZC1yaWdodCAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1w
b3NpdGlvbjogLTI1NnB4IC00OHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwg
MCwgMC43NSk7Ci19Ci0KLWJvZHkudW5kb2NrZWQgLmFsdGVybmF0ZS1zdGF0dXMtYmFyLWJ1dHRv
bnMtYmFyIHsKLSAgICBtYXJnaW4tbGVmdDogMXB4OwotfQotCi0uYWx0ZXJuYXRlLXN0YXR1cy1i
YXItYnV0dG9ucy1iYXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB3aWR0aDogMzFw
eDsKLSAgICBib3R0b206IC0zcHg7Ci0gICAgYmFja2dyb3VuZDogd2hpdGU7Ci19Ci0KLS5hbHRl
cm5hdGUtc3RhdHVzLWJhci1idXR0b25zLWJhciAuc3RhdHVzLWJhci1pdGVtIHsKLSAgICBoZWln
aHQ6IDI0cHg7Ci0gICAgbWFyZ2luLXRvcDogLTFweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBy
Z2IoMjAyLCAyMDIsIDIwMik7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFy
ZW50OwotfQotCi0uYWx0ZXJuYXRlLXN0YXR1cy1iYXItYnV0dG9ucy1iYXIgLnN0YXR1cy1iYXIt
aXRlbS5lbXVsYXRlLWFjdGl2ZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE2MywxNjMs
MTYzKTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTIwLCAxMjAsIDEyMCk7Ci0gICAgYm9y
ZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwotfQotCi1idXR0b24uc3RhdHVzLWJh
ci1pdGVtLnNldHRpbmdzLXN0YXR1cy1iYXItaXRlbSwKLWJ1dHRvbi5zdGF0dXMtYmFyLWl0ZW0u
c2V0dGluZ3Mtc3RhdHVzLWJhci1pdGVtOmFjdGl2ZSB7Ci0gICAgYm9yZGVyLXJpZ2h0OiAwIHRy
YW5zcGFyZW50IG5vbmU7Ci19Ci0KLS5zZXR0aW5ncy1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsK
LSAgICAtd2Via2l0LW1hc2stcG9zaXRpb246IC0xNjBweCAtMjRweDsKLX0KLQotYm9keS5yZW1v
dGUgLmRvY2stc3RhdHVzLWJhci1pdGVtLAotYm9keS5wb3J0LXF0IC5kb2NrLXN0YXR1cy1iYXIt
aXRlbSB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLmNvbnNvbGUtc3RhdHVzLWJhci1pdGVt
IC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtNjRweCAtMjRweDsKLX0KLQot
LmNsZWFyLXN0YXR1cy1iYXItaXRlbSAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlv
bjogLTY0cHggMDsKLX0KLQotI2Vycm9yLXdhcm5pbmctY291bnQgewotICAgIHBhZGRpbmc6IDVw
eCAycHggNnB4IDBweDsKLSAgICBmb250LXNpemU6IDEwcHg7Ci0gICAgaGVpZ2h0OiAxOXB4Owot
ICAgIGN1cnNvcjogcG9pbnRlcjsKLX0KLQotI2Vycm9yLXdhcm5pbmctY291bnQ6aG92ZXIgewot
ICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoOTYsIDk2LCA5Nik7Ci19Ci0KLSNlcnJv
ci1jb3VudC1pbWcgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvZXJyb3JJY29uLnBuZyk7Ci0g
ICAgd2lkdGg6IDEwcHg7Ci0gICAgaGVpZ2h0OiAxMHB4OwotICAgIHZlcnRpY2FsLWFsaWduOiAt
MXB4OwotICAgIG1hcmdpbi1yaWdodDogMnB4OwotfQotCi0jZXJyb3ItY291bnQgKyAjd2Fybmlu
Zy1jb3VudC1pbWcgewotICAgIG1hcmdpbi1sZWZ0OiA2cHg7Ci19Ci0KLSN3YXJuaW5nLWNvdW50
LWltZyB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy93YXJuaW5nSWNvbi5wbmcpOwotICAgIHdp
ZHRoOiAxMHB4OwotICAgIGhlaWdodDogMTBweDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogLTFweDsK
LSAgICBtYXJnaW4tcmlnaHQ6IDJweDsKLX0KLQotI2RyYXdlciB7Ci0gICAgZGlzcGxheTogbm9u
ZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9tOiAwOwotICAgIGxlZnQ6IDA7
Ci0gICAgcmlnaHQ6IDA7Ci0gICAgaGVpZ2h0OiAyMDBweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB3aGl0ZTsKLX0KLQotLmFuaW1hdGUgI2RyYXdlciB7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9u
OiBoZWlnaHQgMTAwbXMgbGluZWFyOwotfQotCi0jZHJhd2VyLWNvbnRlbnRzIHsKLSAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogMjRweDsKLSAgICBsZWZ0
OiAwOwotICAgIHJpZ2h0OiAwOwotfQotCi1ib2R5LmRyYXdlci12aXNpYmxlICNkcmF3ZXIgewot
ICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi1ib2R5LnBsYXRmb3JtLW1hYyAubW9ub3NwYWNlLCBi
b2R5LnBsYXRmb3JtLW1hYyAuc291cmNlLWNvZGUgewotICAgIGZvbnQtc2l6ZTogMTFweCAhaW1w
b3J0YW50OwotICAgIGZvbnQtZmFtaWx5OiBNZW5sbywgbW9ub3NwYWNlOwotfQotCi1ib2R5LnBs
YXRmb3JtLW1hYy5wbGF0Zm9ybS1tYWMtdGlnZXIgLm1vbm9zcGFjZSwKLWJvZHkucGxhdGZvcm0t
bWFjLnBsYXRmb3JtLW1hYy10aWdlciAuc291cmNlLWNvZGUgewotICAgIGZvbnQtc2l6ZTogMTBw
eCAhaW1wb3J0YW50OwotICAgIGZvbnQtZmFtaWx5OiBNb25hY28sIG1vbm9zcGFjZTsKLX0KLQot
Ym9keS5wbGF0Zm9ybS13aW5kb3dzIC5tb25vc3BhY2UsIGJvZHkucGxhdGZvcm0td2luZG93cyAu
c291cmNlLWNvZGUgewotICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwotICAgIGZvbnQt
ZmFtaWx5OiBDb25zb2xhcywgTHVjaWRhIENvbnNvbGUsIG1vbm9zcGFjZTsKLX0KLQotYm9keS5w
bGF0Zm9ybS1saW51eCAubW9ub3NwYWNlLCBib2R5LnBsYXRmb3JtLWxpbnV4IC5zb3VyY2UtY29k
ZSB7Ci0gICAgZm9udC1zaXplOiAxMXB4ICFpbXBvcnRhbnQ7Ci0gICAgZm9udC1mYW1pbHk6IGRl
amF2dSBzYW5zIG1vbm8sIG1vbm9zcGFjZTsKLX0KLQotI2NvbnNvbGUtdmlldyB7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDog
MDsKLSAgICByaWdodDogMDsKLSAgICBvdmVyZmxvdy15OiBhdXRvOwotfQotCi0jY29uc29sZS1t
ZXNzYWdlcyB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHotaW5kZXg6IDA7Ci0gICAg
dG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAg
IHBhZGRpbmc6IDJweCAwOwotICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7Ci0gICAgd29yZC13cmFw
OiBicmVhay13b3JkOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci19Ci0KLSNjb25z
b2xlLXByb21wdCB7Ci0gICAgY2xlYXI6IHJpZ2h0OwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
LSAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiKDI0MCwgMjQwLCAyNDApOwotICAgIHBhZGRp
bmc6IDFweCAyMnB4IDFweCAwcHg7Ci0gICAgbWFyZ2luLWxlZnQ6IDI0cHg7Ci0gICAgbWluLWhl
aWdodDogMTZweDsKLSAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Ci0gICAgLXdlYmtpdC11c2Vy
LW1vZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsKLX0KLQotI2NvbnNvbGUtcHJvbXB0
OjpiZWZvcmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvdXNlcklucHV0SWNv
bi5wbmcpOwotfQotCi0uY29uc29sZS11c2VyLWNvbW1hbmQtcmVzdWx0LmNvbnNvbGUtbG9nLWxl
dmVsOjpiZWZvcmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvdXNlcklucHV0
UmVzdWx0SWNvbi5wbmcpOwotfQotCi0uY29uc29sZS1tZXNzYWdlLCAuY29uc29sZS11c2VyLWNv
bW1hbmQgewotICAgIGNsZWFyOiByaWdodDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAg
Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYigyNDAsIDI0MCwgMjQwKTsKLSAgICBwYWRkaW5nOiAx
cHggMjJweCAxcHggMHB4OwotICAgIG1hcmdpbi1sZWZ0OiAyNHB4OwotICAgIG1pbi1oZWlnaHQ6
IDE2cHg7Ci19Ci0KLS5jb25zb2xlLW1lc2FnZTpmaXJzdC1jaGlsZCB7Ci0gICAgYm9yZGVyLXRv
cDogbm9uZTsKLX0KLQotLmNvbnNvbGUtYWRqYWNlbnQtdXNlci1jb21tYW5kLXJlc3VsdCB7Ci0g
ICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLX0KLQotLmNvbnNvbGUtYWRqYWNlbnQtdXNlci1jb21t
YW5kLXJlc3VsdCArIC5jb25zb2xlLXVzZXItY29tbWFuZC1yZXN1bHQuY29uc29sZS1sb2ctbGV2
ZWw6OmJlZm9yZSB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKLX0KLQotLmNvbnNvbGUt
bWVzc2FnZTo6YmVmb3JlLCAuY29uc29sZS11c2VyLWNvbW1hbmQ6OmJlZm9yZSwgI2NvbnNvbGUt
cHJvbXB0OjpiZWZvcmUsIC5jb25zb2xlLWdyb3VwLXRpdGxlOjpiZWZvcmUgewotICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBjb250ZW50OiAiIjsKLSAg
ICBsZWZ0OiAtMTdweDsKLSAgICB0b3A6IDAuOGVtOwotICAgIHdpZHRoOiAxMHB4OwotICAgIGhl
aWdodDogMTBweDsKLSAgICBtYXJnaW4tdG9wOiAtNnB4OwotICAgIC13ZWJraXQtdXNlci1zZWxl
Y3Q6IG5vbmU7Ci19Ci0KLS5jb25zb2xlLW1lc3NhZ2UgLmJ1YmJsZSB7Ci0gICAgZGlzcGxheTog
aW5saW5lLWJsb2NrOwotICAgIGhlaWdodDogMTRweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2IoMTI4LCAxNTEsIDE4OSk7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLSAgICB3aGl0
ZS1zcGFjZTogbm93cmFwOwotICAgIHBhZGRpbmc6IDFweCA0cHg7Ci0gICAgbWFyZ2luLXRvcDog
LTFweDsKLSAgICBtYXJnaW4tcmlnaHQ6IDRweDsKLSAgICBtYXJnaW4tbGVmdDogLTE4cHg7Ci0g
ICAgdGV4dC1hbGlnbjogbGVmdDsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgbGluZS1oZWln
aHQ6IG5vcm1hbDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICB0ZXh0LXNoYWRvdzogbm9u
ZTsKLSAgICBjb2xvcjogd2hpdGU7Ci0gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA3cHg7Ci19
Ci0KLS5jb25zb2xlLW1lc3NhZ2UtdGV4dCB7Ci0gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwot
fQotCi0ucmVwZWF0ZWQtbWVzc2FnZS5jb25zb2xlLWVycm9yLWxldmVsOjpiZWZvcmUsIC5yZXBl
YXRlZC1tZXNzYWdlLmNvbnNvbGUtd2FybmluZy1sZXZlbDpiZWZvcmUsIC5yZXBlYXRlZC1tZXNz
YWdlLmNvbnNvbGUtZGVidWctbGV2ZWw6YmVmb3JlIHsKLSAgICB2aXNpYmlsaXR5OiBoaWRkZW47
Ci19Ci0KLS5yZXBlYXRlZC1tZXNzYWdlIC5vdXRsaW5lLWRpc2Nsb3N1cmUsIC5yZXBlYXRlZC1t
ZXNzYWdlID4gLmNvbnNvbGUtbWVzc2FnZS10ZXh0IHsKLSAgICAtd2Via2l0LWZsZXg6IDE7Ci19
Ci0KLS5jb25zb2xlLWluZm8gewotICAgIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7Ci0gICAg
Zm9udC1zdHlsZTogaXRhbGljOwotfQotCi0uY29uc29sZS1ncm91cCAuY29uc29sZS1ncm91cCA+
IC5jb25zb2xlLWdyb3VwLW1lc3NhZ2VzIHsKLSAgICBtYXJnaW4tbGVmdDogMTZweDsKLX0KLQot
LmNvbnNvbGUtZ3JvdXAtdGl0bGUgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0uY29u
c29sZS1ncm91cC10aXRsZTo6YmVmb3JlIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1h
Z2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bi5wbmcpOwotICAgIHRvcDogMC42ZW07Ci0g
ICAgd2lkdGg6IDExcHg7Ci0gICAgaGVpZ2h0OiAxMnB4OwotICAgIGxlZnQ6IC0xNnB4OwotICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKLX0KLQotLmNvbnNvbGUtZ3JvdXAuY29sbGFwc2VkIC5jb25z
b2xlLWdyb3VwLXRpdGxlOjpiZWZvcmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFn
ZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodC5wbmcpOwotfQotCi0uY29uc29sZS1ncm91
cC5jb2xsYXBzZWQgPiAuY29uc29sZS1ncm91cC1tZXNzYWdlcyB7Ci0gICAgZGlzcGxheTogbm9u
ZTsKLX0KLQotLmNvbnNvbGUtZ3JvdXAgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLQot
LmNvbnNvbGUtZ3JvdXAtYnJhY2tldCB7Ci0gICAgcG9zaXRpb246YWJzb2x1dGU7Ci0gICAgdG9w
OiAxNXB4OwotICAgIGxlZnQ6IDEzcHg7Ci0gICAgYm90dG9tOiA1cHg7Ci0gICAgd2lkdGg6IDNw
eDsKLSAgICBib3JkZXItc3R5bGU6IHNvbGlkOwotICAgIGJvcmRlci1jb2xvcjogI0EzQTNBMzsK
LSAgICBib3JkZXItd2lkdGg6IDBweCAwcHggMXB4IDFweDsKLX0KLQotLmNvbnNvbGUtZ3JvdXAu
Y29sbGFwc2VkID4gLmNvbnNvbGUtZ3JvdXAtYnJhY2tldCB7Ci0gICAgZGlzcGxheTogbm9uZTsK
LX0KLQotLmNvbnNvbGUtZXJyb3ItbGV2ZWwgLmNvbnNvbGUtbWVzc2FnZS10ZXh0LCAuY29uc29s
ZS1lcnJvci1sZXZlbCAuc2VjdGlvbiAuaGVhZGVyIC50aXRsZSB7Ci0gICAgY29sb3I6IHJlZCAh
aW1wb3J0YW50OwotfQotCi0uY29uc29sZS1kZWJ1Zy1sZXZlbCAuY29uc29sZS1tZXNzYWdlLXRl
eHQgewotICAgIGNvbG9yOiBibHVlOwotfQotCi0uY29uc29sZS1kZWJ1Zy1sZXZlbDo6YmVmb3Jl
IHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3NlYXJjaFNtYWxsQnJpZ2h0Qmx1
ZS5wbmcpOwotfQotCi0uY29uc29sZS1lcnJvci1sZXZlbDo6YmVmb3JlIHsKLSAgICBiYWNrZ3Jv
dW5kLWltYWdlOiB1cmwoSW1hZ2VzL2Vycm9ySWNvbi5wbmcpOwotfQotCi0uY29uc29sZS13YXJu
aW5nLWxldmVsOjpiZWZvcmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvd2Fy
bmluZ0ljb24ucG5nKTsKLSAgICBtYXJnaW4tdG9wOiAtN3B4OwotfQotCi0uY29uc29sZS11c2Vy
LWNvbW1hbmQgLmNvbnNvbGUtbWVzc2FnZSB7Ci0gICAgbWFyZ2luLWxlZnQ6IC0yNHB4OwotICAg
IHBhZGRpbmctcmlnaHQ6IDA7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLX0KLQotLmNvbnNv
bGUtdXNlci1jb21tYW5kOjpiZWZvcmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFn
ZXMvdXNlcklucHV0UHJldmlvdXNJY29uLnBuZyk7Ci19Ci0KLS5jb25zb2xlLXVzZXItY29tbWFu
ZCA+IC5jb25zb2xlLW1lc3NhZ2UtdGV4dCB7Ci0gICAgY29sb3I6IHJnYigwLCAxMjgsIDI1NSk7
Ci19Ci0KLSNjb25zb2xlLW1lc3NhZ2VzIGEgewotICAgIGNvbG9yOiByZ2IoMzMlLCAzMyUsIDMz
JSk7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotfQotCi0jY29uc29sZS1tZXNzYWdlcyBhOmhvdmVy
IHsKLSAgICBjb2xvcjogcmdiKDE1JSwgMTUlLCAxNSUpOwotfQotCi1vbC53YXRjaC1leHByZXNz
aW9ucyA+IGxpLmhvdmVyZWQgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7Ci19Ci0K
LS5jb25zb2xlLW1lc3NhZ2UtdXJsIHsKLSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgdGV4dC1hbGln
bjogcmlnaHQ7Ci0gICAgbWF4LXdpZHRoOiAxMDAlOwotICAgIG1hcmdpbi1sZWZ0OiA0cHg7Ci19
Ci0KLS5jb25zb2xlLWdyb3VwLW1lc3NhZ2VzIC5zZWN0aW9uIHsKLSAgICBtYXJnaW46IDAgMCAw
IDEycHggIWltcG9ydGFudDsKLX0KLQotLmNvbnNvbGUtZ3JvdXAtbWVzc2FnZXMgLnNlY3Rpb24g
LmhlYWRlciB7Ci0gICAgcGFkZGluZzogMCA4cHggMCAwOwotICAgIGJhY2tncm91bmQtaW1hZ2U6
IG5vbmU7Ci0gICAgYm9yZGVyOiBub25lOwotICAgIG1pbi1oZWlnaHQ6IDA7Ci19Ci0KLS5jb25z
b2xlLWdyb3VwLW1lc3NhZ2VzIC5zZWN0aW9uIC5oZWFkZXI6OmJlZm9yZSB7Ci0gICAgcG9zaXRp
b246IGFic29sdXRlOwotICAgIHRvcDogMXB4OwotICAgIGxlZnQ6IDFweDsKLSAgICB3aWR0aDog
OHB4OwotICAgIGhlaWdodDogOHB4OwotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZVJpZ2h0
VHJpYW5nbGVCbGFjay5wbmcpOwotfQotCi0uY29uc29sZS1ncm91cC1tZXNzYWdlcyAuc2VjdGlv
bi5leHBhbmRlZCAuaGVhZGVyOjpiZWZvcmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJl
ZURvd25UcmlhbmdsZUJsYWNrLnBuZyk7Ci19Ci0KLS5jb25zb2xlLWdyb3VwLW1lc3NhZ2VzIC5z
ZWN0aW9uIC5oZWFkZXIgLnRpdGxlIHsKLSAgICBjb2xvcjogYmxhY2s7Ci0gICAgZm9udC13ZWln
aHQ6IG5vcm1hbDsKLSAgICBsaW5lLWhlaWdodDogMTNweDsKLX0KLQotLmNvbnNvbGUtZ3JvdXAt
bWVzc2FnZXMgLnNlY3Rpb24gLnByb3BlcnRpZXMgbGkgLmluZm8gewotICAgIHBhZGRpbmctdG9w
OiAwOwotICAgIHBhZGRpbmctYm90dG9tOiAwOwotICAgIGNvbG9yOiByZ2IoNjAlLCA2MCUsIDYw
JSk7Ci19Ci0KLS5jb25zb2xlLWdyb3VwLW1lc3NhZ2VzIC5vdXRsaW5lLWRpc2Nsb3N1cmUgewot
ICAgIHBhZGRpbmctbGVmdDogMDsKLX0KLQotLmNvbnNvbGUtZ3JvdXAtbWVzc2FnZXMgLm91dGxp
bmUtZGlzY2xvc3VyZSA+IG9sIHsKLSAgICBwYWRkaW5nOiAwIDAgMCAxMnB4ICFpbXBvcnRhbnQ7
Ci19Ci0KLS5jb25zb2xlLWdyb3VwLW1lc3NhZ2VzIC5vdXRsaW5lLWRpc2Nsb3N1cmUsIC5jb25z
b2xlLWdyb3VwLW1lc3NhZ2VzIC5vdXRsaW5lLWRpc2Nsb3N1cmUgb2wgewotICAgIGZvbnQtc2l6
ZTogaW5oZXJpdDsKLSAgICBsaW5lLWhlaWdodDogMTJweDsKLX0KLQotLmNvbnNvbGUtZ3JvdXAt
bWVzc2FnZXMgLm91dGxpbmUtZGlzY2xvc3VyZS5zaW5nbGUtbm9kZSBsaSB7Ci0gICAgcGFkZGlu
Zy1sZWZ0OiAycHg7Ci19Ci0KLS5jb25zb2xlLWdyb3VwLW1lc3NhZ2VzIC5vdXRsaW5lLWRpc2Ns
b3N1cmUgbGkgLnNlbGVjdGlvbiB7Ci0gICAgbWFyZ2luLWxlZnQ6IC02cHg7Ci0gICAgbWFyZ2lu
LXJpZ2h0OiAtNnB4OwotfQotCi0uY29uc29sZS1ncm91cC1tZXNzYWdlcyAuYWRkLWF0dHJpYnV0
ZSB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLmNvbnNvbGUtZm9ybWF0dGVkLW9iamVjdCwg
LmNvbnNvbGUtZm9ybWF0dGVkLW5vZGUsIC5jb25zb2xlLWZvcm1hdHRlZC1hcnJheSB7Ci0gICAg
cG9zaXRpb246IHJlbGF0aXZlOwotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB2ZXJ0
aWNhbC1hbGlnbjogdG9wOwotICAgIGNvbG9yOiBibGFjazsKLX0KLQotLmNvbnNvbGUtZm9ybWF0
dGVkLW5vZGU6aG92ZXIgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTYsIDEyMSwgMjE3
LCAwLjEpOwotfQotCi0uY29uc29sZS1mb3JtYXR0ZWQtb2JqZWN0IC5zZWN0aW9uLCAuY29uc29s
ZS1mb3JtYXR0ZWQtbm9kZSAuc2VjdGlvbiwgLmNvbnNvbGUtZm9ybWF0dGVkLWFycmF5IC5zZWN0
aW9uIHsKLSAgICBwb3NpdGlvbjogc3RhdGljOwotfQotCi0uY29uc29sZS1mb3JtYXR0ZWQtb2Jq
ZWN0IC5wcm9wZXJ0aWVzLCAuY29uc29sZS1mb3JtYXR0ZWQtbm9kZSAucHJvcGVydGllcyB7Ci0g
ICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7Ci19Ci0KLS5jb25zb2xlLWZvcm1hdHRlZC1u
dW1iZXIgewotICAgIGNvbG9yOiByZ2IoMjgsIDAsIDIwNyk7Ci19Ci0KLS5jb25zb2xlLWZvcm1h
dHRlZC1zdHJpbmcsIC5jb25zb2xlLWZvcm1hdHRlZC1yZWdleHAgewotICAgIGNvbG9yOiByZ2Io
MTk2LCAyNiwgMjIpOwotICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci19Ci0KLS5jb25zb2xlLWZvcm1h
dHRlZC1udWxsLCAuY29uc29sZS1mb3JtYXR0ZWQtdW5kZWZpbmVkIHsKLSAgICBjb2xvcjogcmdi
KDEyOCwgMTI4LCAxMjgpOwotfQotCi0uY29uc29sZS1mb3JtYXR0ZWQtcHJldmlldy1ub2RlLAot
LnNlY3Rpb24gLmNvbnNvbGUtZm9ybWF0dGVkLW5vZGUgewotICAgIGNvbG9yOiByZ2IoMTM2LCAx
OCwgMTI4KTsKLX0KLQotLmNvbnNvbGUtb2JqZWN0LXByZXZpZXcgewotICAgIGZvbnQtc3R5bGU6
IGl0YWxpYzsKLX0KLQotLm9iamVjdC1pbmZvLXN0YXRlLW5vdGUgewotICAgIGRpc3BsYXk6IG5v
bmU7Ci0gICAgd2lkdGg6IDExcHg7Ci0gICAgaGVpZ2h0OiAxMXB4OwotICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigxNzksIDIwMywgMjQ3KTsKLSAgICBjb2xvcjogd2hpdGU7Ci0gICAgdGV4dC1h
bGlnbjogY2VudGVyOwotICAgIGJvcmRlci1yYWRpdXM6IDNweDsKLSAgICBsaW5lLWhlaWdodDog
MTNweDsKLSAgICBtYXJnaW46IDAgNnB4OwotICAgIGZvbnQtc2l6ZTogOXB4OwotfQotCi0ub2Jq
ZWN0LWluZm8tc3RhdGUtbm90ZTo6YmVmb3JlIHsKLSAgICBjb250ZW50OiAiaSI7Ci19Ci0KLS5z
ZWN0aW9uLmV4cGFuZGVkIC5vYmplY3QtaW5mby1zdGF0ZS1ub3RlIHsKLSAgICBkaXNwbGF5OiBp
bmxpbmUtYmxvY2s7Ci19Ci0KLS5lcnJvci1tZXNzYWdlIHsKLSAgICBjb2xvcjogcmVkOwotfQot
Ci0uZXJyb3ItaW5wdXQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMjAsIDEzMCwgMTMw
KTsKLX0KLQotLmF1dG8tY29tcGxldGUtdGV4dCwgLmVkaXRpbmcgLmF1dG8tY29tcGxldGUtdGV4
dCB7Ci0gICAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KSAhaW1wb3J0YW50OwotICAgIC13ZWJr
aXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5
OwotfQotCi0ucGFuZWwgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgb3ZlcmZsb3c6IGhpZGRl
bjsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0g
ICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotfQotCi0ucGFuZWwudmlzaWJsZSB7Ci0gICAg
ZGlzcGxheTogYmxvY2s7Ci19Ci0KLWlmcmFtZS5leHRlbnNpb24gewotICAgIHdpZHRoOiAxMDAl
OwotICAgIGhlaWdodDogMTAwJTsKLX0KLQotaWZyYW1lLnBhbmVsLmV4dGVuc2lvbiB7Ci0gICAg
ZGlzcGxheTogYmxvY2s7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0ud2Via2l0LWxpbmUtZ3V0
dGVyLWJhY2tkcm9wIHsKLSAgICAvKiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHZpZXctc291cmNl
LmNzcyAoLndlYmtpdC1saW5lLWd1dHRlci1iYWNrZHJvcCkgKi8KLSAgICB3aWR0aDogMzFweDsK
LSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7Ci0gICAgYm9yZGVyLXJp
Z2h0OiAxcHggc29saWQgcmdiKDE4NywgMTg3LCAxODcpOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKLSAgICB6LWluZGV4OiAtMTsKLSAgICBsZWZ0OiAwOwotICAgIHRvcDogMDsKLSAgICBoZWln
aHQ6IDEwMCUKLX0KLQotLm91dGxpbmUtZGlzY2xvc3VyZSBsaS5ob3ZlcmVkOm5vdCguc2VsZWN0
ZWQpIC5zZWxlY3Rpb24gewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGxlZnQ6IDNweDsKLSAg
ICByaWdodDogM3B4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTYsIDEyMSwgMjE3LCAw
LjEpOwotICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OwotfQotCi0ub3V0bGluZS1kaXNj
bG9zdXJlIGxpLmhpZ2hsaWdodGVkIC5oaWdobGlnaHQgewotICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYigyNTUsIDIzMCwgMTc5KTsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKLSAg
ICBwYWRkaW5nLWJvdHRvbTogMnB4OwotICAgIG1hcmdpbi1ib3R0b206IC0ycHg7Ci19Ci0KLS5v
dXRsaW5lLWRpc2Nsb3N1cmUgbGkuc2VsZWN0ZWQuaGlnaGxpZ2h0ZWQgLmhpZ2hsaWdodCB7Ci0g
ICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgcGFkZGluZy1ib3R0b206IDA7
Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotLm91dGxpbmUtZGlzY2xvc3VyZSBsaSAuc2Vs
ZWN0aW9uIHsKLSAgICBkaXNwbGF5OiBub25lOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGhlaWdodDogMTVweDsKLSAgICB6LWluZGV4
OiAtMTsKLX0KLQotLm91dGxpbmUtZGlzY2xvc3VyZSBsaS5zZWxlY3RlZCAuc2VsZWN0aW9uIHsK
LSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEyLCAyMTIs
IDIxMik7Ci19Ci0KLS5vdXRsaW5lLWRpc2Nsb3N1cmUgbGkuZWxlbWVudHMtZHJhZy1vdmVyIC5z
ZWxlY3Rpb24gewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIG1hcmdpbi10b3A6IC0ycHg7Ci0g
ICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHJnYig1NiwgMTIxLCAyMTcpOwotfQotCi0ub3V0bGlu
ZS1kaXNjbG9zdXJlIG9sOmZvY3VzIGxpLnNlbGVjdGVkIC5zZWxlY3Rpb24gewotICAgIGJhY2tn
cm91bmQtY29sb3I6IHJnYig1NiwgMTIxLCAyMTcpOwotfQotCi0ub3V0bGluZS1kaXNjbG9zdXJl
IG9sLnNlYXJjaC1tYXRjaC1ub3QtZm91bmQgbGkuc2VsZWN0ZWQgLnNlbGVjdGlvbiB7Ci0gICAg
Ym9yZGVyOiAxcHggc29saWQgcmdiKDU2LCAxMjEsIDIxNyk7Ci0gICAgYmFja2dyb3VuZC1jb2xv
cjogd2hpdGU7Ci19Ci0KLS5vdXRsaW5lLWRpc2Nsb3N1cmUgPiBvbCB7Ci0gICAgcG9zaXRpb246
IHJlbGF0aXZlOwotICAgIHBhZGRpbmc6IDJweCA2cHggIWltcG9ydGFudDsKLSAgICBtYXJnaW46
IDA7Ci0gICAgY3Vyc29yOiBkZWZhdWx0OwotICAgIG1pbi13aWR0aDogMTAwJTsKLX0KLQotLm91
dGxpbmUtZGlzY2xvc3VyZSwgLm91dGxpbmUtZGlzY2xvc3VyZSBvbCB7Ci0gICAgbGlzdC1zdHls
ZS10eXBlOiBub25lOwotICAgIC13ZWJraXQtcGFkZGluZy1zdGFydDogMTJweDsKLSAgICBtYXJn
aW46IDA7Ci19Ci0KLS5zb3VyY2UtY29kZSB7Ci0gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsK
LSAgICBmb250LXNpemU6IDExcHggIWltcG9ydGFudDsKLSAgICB3aGl0ZS1zcGFjZTogcHJlLXdy
YXA7Ci19Ci0KLS5vdXRsaW5lLWRpc2Nsb3N1cmUgbGkgewotICAgIHBhZGRpbmc6IDAgMCAwIDE0
cHg7Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotICAgIG1hcmdpbi1sZWZ0OiAtMnB4OwotICAgIHdv
cmQtd3JhcDogYnJlYWstd29yZDsKLX0KLQotLm91dGxpbmUtZGlzY2xvc3VyZSBvbDpmb2N1cyBs
aS5zZWxlY3RlZCB7Ci0gICAgY29sb3I6IHdoaXRlOwotfQotCi0ub3V0bGluZS1kaXNjbG9zdXJl
IG9sLnNlYXJjaC1tYXRjaC1mb3VuZCBsaS5zZWxlY3RlZCB7Ci0gICAgY29sb3I6IHdoaXRlOwot
fQotCi0ub3V0bGluZS1kaXNjbG9zdXJlIG9sOmZvY3VzIGxpLnNlbGVjdGVkICogewotICAgIGNv
bG9yOiBpbmhlcml0OwotfQotCi0ub3V0bGluZS1kaXNjbG9zdXJlIG9sLnNlYXJjaC1tYXRjaC1m
b3VuZCBsaS5zZWxlY3RlZCAqIHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0KLQotLm91dGxpbmUt
ZGlzY2xvc3VyZSBsaS5wYXJlbnQgewotICAgIG1hcmdpbi1sZWZ0OiAtMTJweAotfQotCi0ub3V0
bGluZS1kaXNjbG9zdXJlIGxpIC53ZWJraXQtaHRtbC10YWcuY2xvc2UgewotICAgIG1hcmdpbi1s
ZWZ0OiAtMTJweDsKLX0KLQotLndlYmtpdC1odG1sLXRhZy5zaGFkb3csIC53ZWJraXQtaHRtbC1m
cmFnbWVudC5zaGFkb3cgewotICAgIG9wYWNpdHk6IDAuNjsKLX0KLQotLm91dGxpbmUtZGlzY2xv
c3VyZSBsaS5wYXJlbnQ6OmJlZm9yZSB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDhw
eDsKLSAgICBoZWlnaHQ6IDhweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAycHg7Ci19Ci0KLS5vdXRs
aW5lLWRpc2Nsb3N1cmUgbGkucGFyZW50OjpiZWZvcmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFn
ZXMvdHJlZVJpZ2h0VHJpYW5nbGVCbGFjay5wbmcpOwotfQotCi0ub3V0bGluZS1kaXNjbG9zdXJl
IG9sOmZvY3VzIGxpLnBhcmVudC5zZWxlY3RlZDo6YmVmb3JlIHsKLSAgICBjb250ZW50OiB1cmwo
SW1hZ2VzL3RyZWVSaWdodFRyaWFuZ2xlV2hpdGUucG5nKTsKLX0KLQotLm91dGxpbmUtZGlzY2xv
c3VyZSBvbC5zZWFyY2gtbWF0Y2gtZm91bmQgbGkucGFyZW50LnNlbGVjdGVkOjpiZWZvcmUgewot
ICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZVJpZ2h0VHJpYW5nbGVXaGl0ZS5wbmcpOwotfQot
Ci0ub3V0bGluZS1kaXNjbG9zdXJlIGxpLnBhcmVudC5leHBhbmRlZDo6YmVmb3JlIHsKLSAgICBj
b250ZW50OiB1cmwoSW1hZ2VzL3RyZWVEb3duVHJpYW5nbGVCbGFjay5wbmcpOwotfQotCi0ub3V0
bGluZS1kaXNjbG9zdXJlIG9sOmZvY3VzIGxpLnBhcmVudC5leHBhbmRlZC5zZWxlY3RlZDo6YmVm
b3JlIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3RyZWVEb3duVHJpYW5nbGVXaGl0ZS5wbmcp
OwotfQotCi0ub3V0bGluZS1kaXNjbG9zdXJlIG9sLnNlYXJjaC1tYXRjaC1mb3VuZCBsaS5wYXJl
bnQuZXhwYW5kZWQuc2VsZWN0ZWQ6OmJlZm9yZSB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90
cmVlRG93blRyaWFuZ2xlV2hpdGUucG5nKTsKLX0KLQotLm91dGxpbmUtZGlzY2xvc3VyZSBvbC5j
aGlsZHJlbiB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLm91dGxpbmUtZGlzY2xvc3VyZSBv
bC5jaGlsZHJlbi5leHBhbmRlZCB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5wbGFjYXJk
IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotICAgIHBh
ZGRpbmc6IDNweCA4cHggNHB4IDE4cHg7Ci0gICAgbWluLWhlaWdodDogMThweDsKLSAgICB3aGl0
ZS1zcGFjZTogbm93cmFwOwotfQotCi0ucGxhY2FyZDpudGgtb2YtdHlwZSgybikgewotICAgIGJh
Y2tncm91bmQtY29sb3I6IHJnYigyMzQsIDI0MywgMjU1KTsKLX0KLQotLnBsYWNhcmQuc2VsZWN0
ZWQgewotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMTcyLCAxNzIsIDE3Mik7Ci0gICAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0
IGJvdHRvbSwgZnJvbShyZ2IoMTgyLCAxODIsIDE4MikpLCB0byhyZ2IoMTYyLCAxNjIsIDE2Mikp
KTsKLSAgICAtd2Via2l0LWJhY2tncm91bmQtb3JpZ2luOiBwYWRkaW5nOwotICAgIC13ZWJraXQt
YmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOwotfQotCi06Zm9jdXMgLnBsYWNhcmQuc2VsZWN0ZWQg
ewotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoNzAsIDEwMywgMjE1KTsKLSAgICBiYWNr
Z3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKHJnYig5MiwgMTQ3LCAyMTMpKSwgdG8ocmdiKDU2LCAxMjEsIDIxNykpKTsKLX0K
LQotLnBsYWNhcmQgLnRpdGxlIHsKLSAgICBjb2xvcjogYmxhY2s7Ci0gICAgZm9udC13ZWlnaHQ6
IG5vcm1hbDsKLSAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ci0gICAgd2hpdGUtc3BhY2U6IG5v
cm1hbDsKLX0KLQotLnBsYWNhcmQuc2VsZWN0ZWQgLnRpdGxlIHsKLSAgICBjb2xvcjogd2hpdGU7
Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLS5wbGFjYXJkIC5zdWJ0aXRsZSB7Ci0gICAg
ZmxvYXQ6IHJpZ2h0OwotICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICBtYXJnaW4tbGVmdDogNXB4
OwotICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxs
aXBzaXM7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotLnBsYWNhcmQuc2VsZWN0ZWQgLnN1
YnRpdGxlIHsKLSAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwotfQotCi0ucGxh
Y2FyZCAuc3VidGl0bGUgYSB7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci19Ci0KLS5zZWN0aW9uIHsK
LSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotfQotCi0uZXZl
bnRzLXBhbmUgLnNlY3Rpb24gewotICAgIG1hcmdpbjogMDsKLX0KLS5ldmVudHMtcGFuZSAuc2Vj
dGlvbjpub3QoOm50aC1vZi10eXBlKDEpKSB7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJn
YigyMzEsIDIzMSwgMjMxKTsKLX0KLQotLnNlY3Rpb24gLmhlYWRlciB7Ci0gICAgY29sb3I6IGJs
YWNrOwotICAgIHBhZGRpbmc6IDAgOHB4IDAgMThweDsKLSAgICBtaW4taGVpZ2h0OiAxOHB4Owot
ICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgLXdlYmtpdC1iYWNrZ3JvdW5kLW9yaWdpbjog
cGFkZGluZzsKLSAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogcGFkZGluZzsKLX0KLQotLnNl
Y3Rpb24gLmhlYWRlcjo6YmVmb3JlIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9w
OiAycHg7Ci0gICAgbGVmdDogN3B4OwotICAgIHdpZHRoOiA4cHg7Ci0gICAgaGVpZ2h0OiA4cHg7
Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90cmVlUmlnaHRUcmlhbmdsZUJsYWNrLnBuZyk7Ci0g
ICAgb3BhY2l0eTogMC44OwotfQotCi0uc2VjdGlvbi5leHBhbmRlZCAuaGVhZGVyOjpiZWZvcmUg
ewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZURvd25UcmlhbmdsZUJsYWNrLnBuZyk7Ci19
Ci0KLS5zZWN0aW9uIC5oZWFkZXIgLnRpdGxlLCAuZXZlbnQtYmFyIC5oZWFkZXIgLnRpdGxlIHsK
LSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKLSAg
ICB3aGl0ZS1zcGFjZTogbm9ybWFsOwotICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwotfQotCi0uc2Vj
dGlvbiAuaGVhZGVyIC50aXRsZS5ibGFuay10aXRsZSB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGlj
OwotfQotCi0uc2VjdGlvbiAuaGVhZGVyIGxhYmVsLCAuZXZlbnQtYmFyIC5oZWFkZXIgbGFiZWwg
ewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5zZWN0aW9uLmV4cGFuZGVkIC5oZWFkZXIgbGFi
ZWwsIC5ldmVudC1iYXIuZXhwYW5kZWQgLmhlYWRlciBsYWJlbCB7Ci0gICAgZGlzcGxheTogaW5s
aW5lOwotfQotCi0uc2VjdGlvbiAuaGVhZGVyIC5zdWJ0aXRsZSwgLmV2ZW50LWJhciAuaGVhZGVy
IC5zdWJ0aXRsZSB7Ci0gICAgZmxvYXQ6IHJpZ2h0OwotICAgIG1hcmdpbi1sZWZ0OiA1cHg7Ci0g
ICAgbWF4LXdpZHRoOiA1NSU7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3Zl
cmZsb3c6IGhpZGRlbjsKLX0KLQotLnNlY3Rpb24gLmhlYWRlciAuc3VidGl0bGUgYSB7Ci0gICAg
Y29sb3I6IGluaGVyaXQ7Ci19Ci0KLS5zZWN0aW9uIC5wcm9wZXJ0aWVzLCAuZXZlbnQtYmFyIC5l
dmVudC1wcm9wZXJ0aWVzIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0uc2VjdGlvbi5leHBh
bmRlZCAucHJvcGVydGllcywgLmV2ZW50LWJhci5leHBhbmRlZCAuZXZlbnQtcHJvcGVydGllcyB7
Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5ldmVudC1iYXIgLmV2ZW50LXByb3BlcnRpZXMg
ewotICAgIHBhZGRpbmctbGVmdDogMTZweDsKLX0KLQotLnNlY3Rpb24ubm8tYWZmZWN0IC5wcm9w
ZXJ0aWVzIGxpIHsKLSAgICBvcGFjaXR5OiAwLjU7Ci19Ci0KLS5zZWN0aW9uLm5vLWFmZmVjdCAu
cHJvcGVydGllcyBsaS5lZGl0aW5nIHsKLSAgICBvcGFjaXR5OiAxLjA7Ci19Ci0KLS5wcm9wZXJ0
aWVzLXRyZWUgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwIDZweCAycHg7Ci0gICAg
bGlzdC1zdHlsZTogbm9uZTsKLSAgICBtaW4taGVpZ2h0OiAxOHB4OwotfQotCi0ucHJvcGVydGll
cy10cmVlIGxpIHsKLSAgICBtYXJnaW4tbGVmdDogMTJweDsKLSAgICB3aGl0ZS1zcGFjZTogbm93
cmFwOwotICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwotICAgIG92ZXJmbG93OiBoaWRkZW47
Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLSAgICBjdXJzb3I6IGRlZmF1bHQ7Ci19
Ci0KLS5wcm9wZXJ0aWVzLXRyZWUgbGkucGFyZW50IHsKLSAgICBtYXJnaW4tbGVmdDogMXB4Owot
fQotCi0ucHJvcGVydGllcy10cmVlIGxpLnBhcmVudDo6YmVmb3JlIHsKLSAgICBjb250ZW50OiB1
cmwoSW1hZ2VzL3RyZWVSaWdodFRyaWFuZ2xlQmxhY2sucG5nKTsKLSAgICBvcGFjaXR5OiAwLjc1
OwotICAgIGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiA4cHg7Ci0gICAgaGVpZ2h0OiA4cHg7Ci0g
ICAgbWFyZ2luLXRvcDogMDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7Ci0gICAgLXdlYmtpdC11
c2VyLXNlbGVjdDogbm9uZTsKLX0KLQotLnByb3BlcnRpZXMtdHJlZSBsaS5wYXJlbnQuZXhwYW5k
ZWQ6OmJlZm9yZSB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy90cmVlRG93blRyaWFuZ2xlQmxh
Y2sucG5nKTsKLSAgICBtYXJnaW4tdG9wOiAxcHg7Ci19Ci0KLS5wcm9wZXJ0aWVzLXRyZWUgbGkg
LmluZm8gewotICAgIHBhZGRpbmctdG9wOiA0cHg7Ci0gICAgcGFkZGluZy1ib3R0b206IDNweDsK
LX0KLQotLnByb3BlcnRpZXMtdHJlZSBvbCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBtYXJn
aW46IDA7Ci0gICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiAxMnB4OwotICAgIGxpc3Qtc3R5bGU6
IG5vbmU7Ci19Ci0KLS5wcm9wZXJ0aWVzLXRyZWUgb2wuZXhwYW5kZWQgewotICAgIGRpc3BsYXk6
IGJsb2NrOwotfQotCi0uZWRpdGluZyB7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsK
LSAgICAtd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgLjUpIDNweCAzcHggNHB4Owot
ICAgIG91dGxpbmU6IDFweCBzb2xpZCByZ2IoNjYlLCA2NiUsIDY2JSkgIWltcG9ydGFudDsKLSAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFk
LXdyaXRlLXBsYWludGV4dC1vbmx5OwotICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFu
dDsKLSAgICBwYWRkaW5nLWxlZnQ6IDJweDsKLSAgICBtYXJnaW4tbGVmdDogLTJweDsKLSAgICBw
YWRkaW5nLXJpZ2h0OiAycHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAtMnB4OwotICAgIG1hcmdpbi1i
b3R0b206IC0xcHg7Ci0gICAgcGFkZGluZy1ib3R0b206IDFweDsKLSAgICBvcGFjaXR5OiAxLjAg
IWltcG9ydGFudDsKLX0KLQotLmVkaXRpbmcsIC5lZGl0aW5nICogewotICAgIGNvbG9yOiBibGFj
ayAhaW1wb3J0YW50OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OwotfQot
Ci0uY2hpbGQtZWRpdGluZyB7Ci0gICAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Ci0gICAgdGV4
dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Ci0gICAgb3ZlcmZsb3c6IHZpc2libGUgIWlt
cG9ydGFudDsKLX0KLQotLmVkaXRpbmcgYnIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5z
ZWN0aW9uIC5wcm9wZXJ0aWVzIGxpLmVkaXRpbmcgewotICAgIG1hcmdpbi1sZWZ0OiAxMHB4Owot
ICAgIHRleHQtb3ZlcmZsb3c6IGNsaXA7Ci19Ci0KLWxpLmVkaXRpbmcgLnN3YXRjaCwgbGkuZWRp
dGluZyAuZW5hYmxlZC1idXR0b24sICBsaS5lZGl0aW5nLXN1Yi1wYXJ0IC5kZWxldGUtYnV0dG9u
IHsKLSAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Ci19Ci0KLS5wcm9wZXJ0aWVzLXRyZWUu
d2F0Y2gtZXhwcmVzc2lvbnMgewotICAgIHBhZGRpbmctYm90dG9tOiA4cHg7Ci0gICAgcGFkZGlu
Zy1sZWZ0OiA0cHggIWltcG9ydGFudDsKLX0KLQotLnByb3BlcnRpZXMtdHJlZS53YXRjaC1leHBy
ZXNzaW9ucyA+IGxpIHsKLSAgICBwYWRkaW5nLXRvcDogMnB4OwotICAgIHBhZGRpbmctbGVmdDog
NHB4OwotfQotCi0ucHJvcGVydGllcy10cmVlLndhdGNoLWV4cHJlc3Npb25zID4gbGkgPiAudmFs
dWUgewotICAgIGRpc3BsYXk6IGlubGluZTsKLSAgICBwb3NpdGlvbjogc3RhdGljOwotfQotCi0u
cHJvcGVydGllcy10cmVlLndhdGNoLWV4cHJlc3Npb25zID4gbGk6bm90KC5wYXJlbnQpIHsKLSAg
ICBtYXJnaW4tbGVmdDogMXB4OwotICAgIHBhZGRpbmctbGVmdDogMTVweDsKLX0KLQotLnByb3Bl
cnRpZXMtdHJlZS53YXRjaC1leHByZXNzaW9ucyA+IGxpLmhvdmVyZWQgewotICAgIHBhZGRpbmct
cmlnaHQ6IDE0cHg7Ci19Ci0KLS53YXRjaC1leHByZXNzaW9ucyA+IGxpLmVkaXRpbmctc3ViLXBh
cnQgLnRleHQtcHJvbXB0IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICB3aWR0aDogMTAwJTsK
LX0KLQotLndhdGNoLWV4cHJlc3Npb25zID4gbGkuZWRpdGluZy1zdWItcGFydCAudmFsdWUsIC53
YXRjaC1leHByZXNzaW9ucyA+IGxpLmVkaXRpbmctc3ViLXBhcnQgLnNlcGFyYXRvciAgewotICAg
IGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5zZWN0aW9uIC5wcm9wZXJ0aWVzIGxpLmVkaXRpbmctc3Vi
LXBhcnQgewotICAgIHBhZGRpbmc6IDNweCA2cHggOHB4IDE4cHg7Ci0gICAgbWFyZ2luOiAtM3B4
IC02cHggLThweCAtNnB4OwotICAgIHRleHQtb3ZlcmZsb3c6IGNsaXA7Ci19Ci0KLS5zZWN0aW9u
IC5wcm9wZXJ0aWVzIC5kZWxldGUtYnV0dG9uIHsKLSAgICB3aWR0aDogMTBweDsKLSAgICBoZWln
aHQ6IDEwcHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9kZWxldGVJY29uLnBu
Zyk7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwotICAgIGJhY2tncm91bmQtY29sb3I6
IHRyYW5zcGFyZW50OwotICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0gICAgYm9y
ZGVyOiAwIG5vbmUgdHJhbnNwYXJlbnQ7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJp
Z2h0OiA4cHg7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLnNlY3Rpb24gLnByb3BlcnRpZXMg
bGkuaG92ZXJlZCAuZGVsZXRlLWJ1dHRvbiB7Ci0gICAgZGlzcGxheTogaW5saW5lOwotfQotCi0u
c2VjdGlvbiAucHJvcGVydGllcyAubmFtZSwgLmV2ZW50LXByb3BlcnRpZXMgLm5hbWUsIC5jb25z
b2xlLWZvcm1hdHRlZC1vYmplY3QgLm5hbWUgewotICAgIGNvbG9yOiByZ2IoMTM2LCAxOSwgMTQ1
KTsKLX0KLQotLnNlY3Rpb24gLnByb3BlcnRpZXMgLmRpbW1lZCB7Ci0gICAgb3BhY2l0eTogMC42
OwotfQotCi0uc2VjdGlvbiAucHJvcGVydGllcyAudmFsdWUuZXJyb3IgewotICAgIGNvbG9yOiBy
ZWQ7Ci19Ci0KLS5zZWN0aW9uIC5wcm9wZXJ0aWVzIC5udW1iZXIsIC5ldmVudC1wcm9wZXJ0aWVz
IC5udW1iZXIgewotICAgIGNvbG9yOiBibHVlOwotfQotCi0uc2VjdGlvbiAucHJvcGVydGllcyAu
a2V5d29yZCwgLmV2ZW50LXByb3BlcnRpZXMgLmtleXdvcmQgewotICAgIGNvbG9yOiByZ2IoMTM2
LCAxOSwgNzkpOwotfQotCi0uc2VjdGlvbiAucHJvcGVydGllcyAuY29sb3IsIC5ldmVudC1wcm9w
ZXJ0aWVzIC5jb2xvciB7Ci0gICAgY29sb3I6IHJnYigxMTgsIDE1LCAyMSk7Ci19Ci0KLS5zd2F0
Y2ggewotICAgIG1hcmdpbi1sZWZ0OiAxcHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAycHg7Ci0gICAg
bWFyZ2luLWJvdHRvbTogLTFweDsKLSAgICB3aWR0aDogMWVtOwotICAgIGhlaWdodDogMWVtOwot
ICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1h
Z2VzL2NoZWNrZXIucG5nKTsKLX0KLQotLnN3YXRjaC1pbm5lciB7Ci0gICAgd2lkdGg6IDEwMCU7
Ci0gICAgaGVpZ2h0OiAxMDAlOwotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBib3Jk
ZXI6IDFweCBzb2xpZCByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuNik7Ci19Ci0KLS5zd2F0Y2gtaW5u
ZXI6aG92ZXIgewotICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNjQsIDY0LCA2NCwgMC44KTsK
LX0KLQotLnNpZGViYXIgewotICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKLSAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjE0LCAyMjEsIDIyOSk7Ci19Ci0KLWJvZHkuaW5hY3RpdmUgLnNpZGViYXIg
ewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMzIsIDIzMiwgMjMyKTsKLX0KLQotLnBhbmUt
dGl0bGUtYnV0dG9uIHsKLSAgICBjb2xvcjogcmdiKDYsIDYsIDYpOwotICAgIGJhY2tncm91bmQt
Y29sb3I6IHRyYW5zcGFyZW50OwotICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNjUsIDE2NSwg
MTY1KTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjM3LCAyMzcsIDIzNyk7Ci0gICAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJv
dHRvbSwgZnJvbShyZ2IoMjUyLCAyNTIsIDI1MikpLCB0byhyZ2IoMjIzLCAyMjMsIDIyMykpKTsK
LSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDEycHg7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNl
OiBub25lOwotfQotCi0ucGFuZS10aXRsZS1idXR0b246YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjE1LCAyMTUsIDIxNSk7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtp
dC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMTk0LCAx
OTQsIDE5NCkpLCB0byhyZ2IoMjM5LCAyMzksIDIzOSkpKTsKLX0KLQotYnV0dG9uLnNob3ctYWxs
LW5vZGVzIHsKLSAgICBmb250LXNpemU6IDEzcHg7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRp
bmc6IDAgMjBweDsKLSAgICBoZWlnaHQ6IDIwcHg7Ci0gICAgY29sb3I6IHJnYig2LCA2LCA2KTsK
LSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBib3JkZXI6IDFweCBzb2xp
ZCByZ2IoMTY1LCAxNjUsIDE2NSk7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzNywgMjM3
LCAyMzcpOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBs
ZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDI1MiwgMjUyLCAyNTIpKSwgdG8ocmdiKDIy
MywgMjIzLCAyMjMpKSk7Ci0gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxMnB4OwotICAgIC13
ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLX0KLQotYm9keS5pbmFjdGl2ZSBidXR0b24uc2hvdy1h
bGwtbm9kZXMgewotICAgIGNvbG9yOiByZ2IoMTMwLCAxMzAsIDEzMCk7Ci0gICAgYm9yZGVyLWNv
bG9yOiByZ2IoMjEyLCAyMTIsIDIxMik7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzOSwg
MjM5LCAyMzkpOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFy
LCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDI1MCwgMjUwLCAyNTApKSwgdG8ocmdi
KDIzNSwgMjM1LCAyMzUpKSk7Ci19Ci0KLWJ1dHRvbi5zaG93LWFsbC1ub2RlczphY3RpdmUgewot
ICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMTUsIDIxNSwgMjE1KTsKLSAgICBiYWNrZ3JvdW5k
LWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBm
cm9tKHJnYigxOTQsIDE5NCwgMTk0KSksIHRvKHJnYigyMzksIDIzOSwgMjM5KSkpOwotfQotCi1i
dXR0b24uZW5hYmxlLXRvZ2dsZS1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsKLSAgICAtd2Via2l0
LW1hc2stcG9zaXRpb246IC0xOTJweCAwOwotfQotCi1idXR0b24uZW5hYmxlLXRvZ2dsZS1zdGF0
dXMtYmFyLWl0ZW0udG9nZ2xlZC1vbiAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlv
bjogLTk2cHggLTI0cHg7Ci19Ci0KLSNjb25zb2xlLW1lc3NhZ2VzLmNvbnNvbGUtZmlsdGVyLXRv
cCB7Ci0gICAgbWFyZ2luLXRvcDogMjNweDsKLX0KLQotLnNjb3BlLWJhciB7Ci0gICAgbGluZS1o
ZWlnaHQ6IDE5cHg7Ci0gICAgcGFkZGluZy1yaWdodDogMTBweDsKLSAgICBvdmVyZmxvdzogaGlk
ZGVuOwotfQotCi0uc2NvcGUtYmFyIGxpIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0g
ICAgbWFyZ2luOiAwIDJweDsKLSAgICBwYWRkaW5nOiAycHggNnB4OwotICAgIGxpbmUtaGVpZ2h0
OiAxMnB4OwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGNvbG9yOiByZ2IoNDYsIDQ2LCA0
Nik7Ci0gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ci0gICAgdGV4dC1zaGFkb3c6IHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC41KSAwIDFweCAwOwotICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog
OHB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLS5zY29wZS1iYXItZGl2aWRl
ciB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQpOwotICAgIGhlaWdo
dDogMTZweDsKLSAgICB3aWR0aDogMXB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotfQotCi0uc2NvcGUtYmFyIGxpLnNlbGVjdGVkLCAu
c2NvcGUtYmFyIGxpOmhvdmVyLCAuc2NvcGUtYmFyIGxpOmFjdGl2ZSB7Ci0gICAgY29sb3I6IHdo
aXRlOwotICAgIHRleHQtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuNCkgMCAxcHggMDsKLX0KLQot
LnNjb3BlLWJhciBsaS5hbGwgewotICAgIG1hcmdpbjogMCA4cHg7Ci19Ci0KLS5zY29wZS1iYXIg
bGk6aG92ZXIgewotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKLX0KLQotLnNj
b3BlLWJhciBsaS5zZWxlY3RlZCB7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMp
OwotICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC41KSBp
bnNldCwgMCAtMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwIDFweCAw
IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKLX0KLQotLnNjb3BlLWJhciBsaTphY3RpdmUgewot
ICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTsKLSAgICAtd2Via2l0LWJveC1zaGFk
b3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuNSkgaW5zZXQsIDAgLTFweCAxcHggcmdiYSgy
NTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
NSk7Ci19Ci0KLS5jb25zb2xlLXdhcm5pbmctbGV2ZWwsIC5jb25zb2xlLWVycm9yLWxldmVsLCAu
Y29uc29sZS1sb2ctbGV2ZWwsIC5jb25zb2xlLWRlYnVnLWxldmVsIHsKLSAgICBkaXNwbGF5OiBu
b25lOwotfQotCi0uZmlsdGVyLWFsbCAuY29uc29sZS13YXJuaW5nLWxldmVsLCAuZmlsdGVyLXdh
cm5pbmdzIC5jb25zb2xlLXdhcm5pbmctbGV2ZWwsCi0uZmlsdGVyLWFsbCAuY29uc29sZS1lcnJv
ci1sZXZlbCwgLmZpbHRlci1lcnJvcnMgLmNvbnNvbGUtZXJyb3ItbGV2ZWwsCi0uZmlsdGVyLWFs
bCAuY29uc29sZS1sb2ctbGV2ZWwsIC5maWx0ZXItbG9ncyAuY29uc29sZS1sb2ctbGV2ZWwsCi0u
ZmlsdGVyLWFsbCAuY29uc29sZS1kZWJ1Zy1sZXZlbCwgLmZpbHRlci1kZWJ1ZyAuY29uc29sZS1k
ZWJ1Zy1sZXZlbCB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5maWx0ZXItYWxsIC5jb25z
b2xlLXdhcm5pbmctbGV2ZWwucmVwZWF0ZWQtbWVzc2FnZSwgLmZpbHRlci13YXJuaW5ncyAuY29u
c29sZS13YXJuaW5nLWxldmVsLnJlcGVhdGVkLW1lc3NhZ2UsCi0uZmlsdGVyLWFsbCAuY29uc29s
ZS1lcnJvci1sZXZlbC5yZXBlYXRlZC1tZXNzYWdlLCAuZmlsdGVyLWVycm9ycyAuY29uc29sZS1l
cnJvci1sZXZlbC5yZXBlYXRlZC1tZXNzYWdlLAotLmZpbHRlci1hbGwgLmNvbnNvbGUtbG9nLWxl
dmVsLnJlcGVhdGVkLW1lc3NhZ2UsIC5maWx0ZXItbG9ncyAuY29uc29sZS1sb2ctbGV2ZWwucmVw
ZWF0ZWQtbWVzc2FnZSwKLS5maWx0ZXItYWxsIC5jb25zb2xlLWRlYnVnLWxldmVsLnJlcGVhdGVk
LW1lc3NhZ2UsIC5maWx0ZXItZGVidWcgLmNvbnNvbGUtZGVidWctbGV2ZWwucmVwZWF0ZWQtbWVz
c2FnZSB7Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotfQotCi0uY29uc29sZS11c2VyLWNv
bW1hbmQtcmVzdWx0IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotLnNvdXJjZS12aWV3LWZy
YW1lIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBoZWlnaHQ6IDEwMCU7Ci19Ci0KLS5zaWRlYmFy
LXJlc2l6ZXItdmVydGljYWwgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7
Ci0gICAgYm90dG9tOiAwOwotICAgIHdpZHRoOiA1cHg7Ci0gICAgei1pbmRleDogNTAwOwotICAg
IGN1cnNvcjogZXctcmVzaXplOwotfQotCi0uc2lkZWJhci10cmVlLCAuc2lkZWJhci10cmVlIC5j
aGlsZHJlbiB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHBhZGRpbmc6IDA7Ci0gICAg
bWFyZ2luOiAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci19Ci0KLS5zaWRlYmFyLXRyZWUtc2Vj
dGlvbiB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGhlaWdodDogMThweDsKLSAgICBw
YWRkaW5nOiAxcHggMTBweCA2cHggMTBweDsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAg
IG1hcmdpbi10b3A6IDFweDsKLSAgICBjb2xvcjogcmdiKDkyLCAxMTAsIDEyOSk7Ci0gICAgdGV4
dC1zaGFkb3c6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSkgMCAxcHggMDsKLX0KLQotLnNpZGVi
YXItdHJlZS1pdGVtIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgaGVpZ2h0OiAzNnB4
OwotICAgIHBhZGRpbmc6IDAgNXB4IDAgNXB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0g
ICAgb3ZlcmZsb3cteDogaGlkZGVuOwotICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKLSAgICBtYXJn
aW4tdG9wOiAxcHg7Ci0gICAgbGluZS1oZWlnaHQ6IDM0cHg7Ci0gICAgYm9yZGVyLXRvcDogMXB4
IHNvbGlkIHRyYW5zcGFyZW50OwotfQotCi0uc2lkZWJhci10cmVlIC5jaGlsZHJlbiB7Ci0gICAg
ZGlzcGxheTogbm9uZTsKLX0KLQotLnNpZGViYXItdHJlZSAuY2hpbGRyZW4uZXhwYW5kZWQgewot
ICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0uc2lkZWJhci10cmVlLXNlY3Rpb24gKyAuY2hpbGRy
ZW4gPiAuc2lkZWJhci10cmVlLWl0ZW0gewotICAgIHBhZGRpbmctbGVmdDogMTBweCAhaW1wb3J0
YW50OwotfQotCi0uc2lkZWJhci10cmVlLXNlY3Rpb24gKyAuY2hpbGRyZW4uc21hbGwgPiAuc2lk
ZWJhci10cmVlLWl0ZW0gewotICAgIHBhZGRpbmctbGVmdDogMTdweCAhaW1wb3J0YW50OwotfQot
Ci0uc2lkZWJhci10cmVlID4gLmNoaWxkcmVuID4gLnNpZGViYXItdHJlZS1pdGVtIHsKLSAgICBw
YWRkaW5nLWxlZnQ6IDM3cHg7Ci19Ci0KLS5zaWRlYmFyLXRyZWUgPiAuY2hpbGRyZW4gPiAuY2hp
bGRyZW4gPiAuc2lkZWJhci10cmVlLWl0ZW0gewotICAgIHBhZGRpbmctbGVmdDogMzdweDsKLX0K
LQotLnNpZGViYXItdHJlZS5oaWRlLWRpc2Nsb3N1cmUtYnV0dG9ucyA+IC5jaGlsZHJlbiB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKLX0KLQotLnNpZGViYXItdHJlZSA+IC5jaGlsZHJlbi5oaWRlLWRp
c2Nsb3N1cmUtYnV0dG9ucyA+IC5jaGlsZHJlbiB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQot
LnNpZGViYXItdHJlZS5zb21lLWV4cGFuZGFibGU6bm90KC5oaWRlLWRpc2Nsb3N1cmUtYnV0dG9u
cykgPiAuc2lkZWJhci10cmVlLWl0ZW06bm90KC5wYXJlbnQpIC5pY29uIHsKLSAgICBtYXJnaW4t
bGVmdDogMTZweDsKLX0KLQotLnNpZGViYXItdHJlZS1pdGVtIC5kaXNjbG9zdXJlLWJ1dHRvbiB7
Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDE2cHg7Ci0gICAgaGVpZ2h0OiAxMDAlOwot
ICAgIGJvcmRlcjogMDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBi
YWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHQu
cG5nKTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotICAgIGJhY2tncm91bmQt
cG9zaXRpb246IGNlbnRlcjsKLSAgICAtd2Via2l0LWFwZWFyYW5jZTogbm9uZTsKLX0KLQotLnNp
ZGViYXItdHJlZS5oaWRlLWRpc2Nsb3N1cmUtYnV0dG9ucyAuc2lkZWJhci10cmVlLWl0ZW0gLmRp
c2Nsb3N1cmUtYnV0dG9uIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi1ib2R5LmluYWN0aXZl
IC5zaWRlYmFyLXRyZWUtaXRlbSAuZGlzY2xvc3VyZS1idXR0b24gewotICAgIGJhY2tncm91bmQt
aW1hZ2U6IHVybChJbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodEJsYWNrLnBuZyk7
Ci19Ci0KLWJvZHkuaW5hY3RpdmUgLnNpZGViYXItdHJlZS1pdGVtLmV4cGFuZGVkIC5kaXNjbG9z
dXJlLWJ1dHRvbiB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9kaXNjbG9zdXJl
VHJpYW5nbGVTbWFsbERvd25CbGFjay5wbmcpOwotfQotCi1ib2R5LmluYWN0aXZlIC5zaWRlYmFy
LXRyZWUtaXRlbSAuZGlzY2xvc3VyZS1idXR0b246YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHREb3duQmxhY2sucG5n
KTsKLX0KLQotLnNpZGViYXItdHJlZS1pdGVtLnNlbGVjdGVkIC5kaXNjbG9zdXJlLWJ1dHRvbiB7
Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFs
bFJpZ2h0V2hpdGUucG5nKSAhaW1wb3J0YW50OwotfQotCi0uc2lkZWJhci10cmVlLWl0ZW0uZXhw
YW5kZWQgLmRpc2Nsb3N1cmUtYnV0dG9uIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1h
Z2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bi5wbmcpOwotfQotCi0uc2lkZWJhci10cmVl
LWl0ZW0uc2VsZWN0ZWQuZXhwYW5kZWQgLmRpc2Nsb3N1cmUtYnV0dG9uIHsKLSAgICBiYWNrZ3Jv
dW5kLWltYWdlOiB1cmwoSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bldoaXRlLnBu
ZykgIWltcG9ydGFudDsKLX0KLQotLnNpZGViYXItdHJlZS1pdGVtLnNlbGVjdGVkIC5kaXNjbG9z
dXJlLWJ1dHRvbjphY3RpdmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvZGlz
Y2xvc3VyZVRyaWFuZ2xlU21hbGxSaWdodERvd25XaGl0ZS5wbmcpICFpbXBvcnRhbnQ7Ci19Ci0K
LS5zaWRlYmFyLXRyZWUtaXRlbSAuZGlzY2xvc3VyZS1idXR0b246YWN0aXZlIHsKLSAgICBiYWNr
Z3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHREb3du
LnBuZyk7Ci19Ci0KLS5zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAgZmxvYXQ6IGxlZnQ7
Ci0gICAgd2lkdGg6IDMycHg7Ci0gICAgaGVpZ2h0OiAzMnB4OwotICAgIG1hcmdpbi10b3A6IDFw
eDsKLSAgICBtYXJnaW4tcmlnaHQ6IDNweDsKLX0KLQotbGkgLnN0YXR1cyB7Ci0gICAgZmxvYXQ6
IHJpZ2h0OwotICAgIGhlaWdodDogMTZweDsKLSAgICBtYXJnaW4tdG9wOiA5cHg7Ci0gICAgbWFy
Z2luLWxlZnQ6IDRweDsKLSAgICBsaW5lLWhlaWdodDogMWVtOwotfQotCi1saSAuc3RhdHVzOmVt
cHR5IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi1saSAuc3RhdHVzIC5idWJibGUgewotICAg
IGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBoZWlnaHQ6IDE0cHg7Ci0gICAgbWluLXdpZHRo
OiAxNnB4OwotICAgIG1hcmdpbi10b3A6IDFweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Io
MTI4LCAxNTEsIDE4OSk7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLSAgICB3aGl0ZS1z
cGFjZTogbm93cmFwOwotICAgIHBhZGRpbmc6IDFweCA0cHg7Ci0gICAgdGV4dC1hbGlnbjogY2Vu
dGVyOwotICAgIGZvbnQtc2l6ZTogMTFweDsKLSAgICBsaW5lLWhlaWdodDogbm9ybWFsOwotICAg
IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIHRleHQtc2hhZG93OiBub25lOwotICAgIGNvbG9yOiB3
aGl0ZTsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDdweDsKLX0KLQotbGkgLnN0YXR1cyAu
YnViYmxlOmVtcHR5IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi1saS5zZWxlY3RlZCAuc3Rh
dHVzIC5idWJibGUgewotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Ci0g
ICAgY29sb3I6IHJnYigxMzIsIDE1NCwgMTkwKSAhaW1wb3J0YW50OwotfQotCi06Zm9jdXMgbGku
c2VsZWN0ZWQgLnN0YXR1cyAuYnViYmxlIHsKLSAgICBjb2xvcjogcmdiKDM2LCA5OCwgMTcyKSAh
aW1wb3J0YW50OwotfQotCi1ib2R5LmluYWN0aXZlIGxpLnNlbGVjdGVkIC5zdGF0dXMgLmJ1YmJs
ZSB7Ci0gICAgY29sb3I6IHJnYigxNTksIDE1OSwgMTU5KSAhaW1wb3J0YW50OwotfQotCi0uc2lk
ZWJhci10cmVlLnNtYWxsIC5zaWRlYmFyLXRyZWUtaXRlbSwgLnNpZGViYXItdHJlZSAuY2hpbGRy
ZW4uc21hbGwgLnNpZGViYXItdHJlZS1pdGVtLCAuc2lkZWJhci10cmVlLWl0ZW0uc21hbGwsIC5z
bWFsbCAucmVzb3VyY2VzLWdyYXBoLXNpZGUgewotICAgIGhlaWdodDogMjBweDsKLX0KLQotLnNp
ZGViYXItdHJlZS5zbWFsbCAuc2lkZWJhci10cmVlLWl0ZW0gLmljb24sIC5zaWRlYmFyLXRyZWUg
LmNoaWxkcmVuLnNtYWxsIC5zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiwgLnNpZGViYXItdHJlZS1p
dGVtLnNtYWxsIC5pY29uIHsKLSAgICB3aWR0aDogMTZweDsKLSAgICBoZWlnaHQ6IDE2cHg7Ci19
Ci0KLS5zaWRlYmFyLXRyZWUuc21hbGwgLnNpZGViYXItdHJlZS1pdGVtIC5zdGF0dXMsIC5zaWRl
YmFyLXRyZWUgLmNoaWxkcmVuLnNtYWxsIC5zaWRlYmFyLXRyZWUtaXRlbSAuc3RhdHVzLCAuc2lk
ZWJhci10cmVlLWl0ZW0uc21hbGwgLnN0YXR1cyB7Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotfQot
Ci0uc2lkZWJhci10cmVlLWl0ZW0uc2VsZWN0ZWQgewotICAgIGNvbG9yOiB3aGl0ZTsKLSAgICBi
b3JkZXItdG9wOiAxcHggc29saWQgcmdiKDE0NSwgMTYwLCAxOTIpOwotICAgIGJhY2tncm91bmQt
aW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZy
b20ocmdiKDE2MiwgMTc3LCAyMDcpKSwgdG8ocmdiKDEyMCwgMTM4LCAxNzcpKSk7Ci0gICAgdGV4
dC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zMykgMXB4IDFweCAwOwotICAgIC13ZWJraXQtYmFj
a2dyb3VuZC1vcmlnaW46IHBhZGRpbmc7Ci0gICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBh
ZGRpbmc7Ci19Ci0KLTpmb2N1cyAuc2lkZWJhci10cmVlLWl0ZW0uc2VsZWN0ZWQgewotICAgIGJv
cmRlci10b3A6IDFweCBzb2xpZCByZ2IoNjgsIDEyOCwgMjAwKTsKLSAgICBiYWNrZ3JvdW5kLWlt
YWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9t
KHJnYig5MiwgMTQ3LCAyMTMpKSwgdG8ocmdiKDIxLCA4MywgMTcwKSkpOwotfQotCi1ib2R5Lmlu
YWN0aXZlIC5zaWRlYmFyLXRyZWUtaXRlbS5zZWxlY3RlZCB7Ci0gICAgYm9yZGVyLXRvcDogMXB4
IHNvbGlkIHJnYigxNTEsIDE1MSwgMTUxKTsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0
LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYigxODAsIDE4
MCwgMTgwKSksIHRvKHJnYigxMzgsIDEzOCwgMTM4KSkpOwotfQotCi0uc2lkZWJhci10cmVlLWl0
ZW0gLnRpdGxlcyB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDogNXB4OwotICAg
IGxpbmUtaGVpZ2h0OiAxMnB4OwotICAgIHBhZGRpbmctYm90dG9tOiAxcHg7Ci0gICAgdGV4dC1v
dmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICB3aGl0ZS1zcGFj
ZTogbm93cmFwOwotfQotCi0uc2lkZWJhci10cmVlLWl0ZW0gLnRpdGxlcy5uby1zdWJ0aXRsZSB7
Ci0gICAgdG9wOiAxMHB4OwotfQotCi0uc2lkZWJhci10cmVlLnNtYWxsIC5zaWRlYmFyLXRyZWUt
aXRlbSAudGl0bGVzLCAuc2lkZWJhci10cmVlIC5jaGlsZHJlbi5zbWFsbCAuc2lkZWJhci10cmVl
LWl0ZW0gLnRpdGxlcywgLnNpZGViYXItdHJlZS1pdGVtLnNtYWxsIC50aXRsZXMgewotICAgIHRv
cDogMnB4OwotICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7Ci19Ci0KLS5zaWRlYmFyLXRyZWU6bm90
KC5zbWFsbCkgLnNpZGViYXItdHJlZS1pdGVtOm5vdCguc21hbGwpIC50aXRsZTo6YWZ0ZXIsIC5z
aWRlYmFyLXRyZWUgLmNoaWxkcmVuOm5vdCguc21hbGwpIC5zaWRlYmFyLXRyZWUtaXRlbSAudGl0
bGU6OmFmdGVyIHsKLSAgICBjb250ZW50OiAiXEEiOwotICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci19
Ci0KLS5zaWRlYmFyLXRyZWUtaXRlbSAuc3VidGl0bGUgewotICAgIGZvbnQtc2l6ZTogODAlOwot
fQotCi0uc2lkZWJhci10cmVlLnNtYWxsIC5zaWRlYmFyLXRyZWUtaXRlbSAuc3VidGl0bGUsIC5z
aWRlYmFyLXRyZWUgLmNoaWxkcmVuLnNtYWxsIC5zaWRlYmFyLXRyZWUtaXRlbSAuc3VidGl0bGUs
IC5zaWRlYmFyLXRyZWUtaXRlbS5zbWFsbCAuc3VidGl0bGUgewotICAgIGRpc3BsYXk6IG5vbmU7
Ci19Ci0KLS5zaWRlYmFyLXRyZWUtaXRlbS5zZWxlY3RlZCAuc3VidGl0bGUgewotICAgIGNvbG9y
OiB3aGl0ZTsKLX0KLQotLmJ1YmJsZS5kZWJ1ZywgLmNvbnNvbGUtZGVidWctbGV2ZWwgLmJ1YmJs
ZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDI1NSkgIWltcG9ydGFudDsKLX0K
LQotLmJ1YmJsZS53YXJuaW5nLCAuY29uc29sZS13YXJuaW5nLWxldmVsIC5idWJibGUgewotICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYigyMzIsIDE2NCwgMCkgIWltcG9ydGFudDsKLX0KLQotLmJ1
YmJsZS5lcnJvciwgLmNvbnNvbGUtZXJyb3ItbGV2ZWwgLmJ1YmJsZSB7Ci0gICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiKDIxNiwgMzUsIDM1KSAhaW1wb3J0YW50OwotfQotCi0uYnViYmxlLnNlYXJj
aC1tYXRjaGVzIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3NlYXJjaFNtYWxs
V2hpdGUucG5nKTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotICAgIGJhY2tn
cm91bmQtcG9zaXRpb246IDNweCAycHg7Ci0gICAgcGFkZGluZy1sZWZ0OiAxM3B4ICFpbXBvcnRh
bnQ7Ci19Ci0KLWxpLnNlbGVjdGVkIC5idWJibGUuc2VhcmNoLW1hdGNoZXMgewotICAgIGJhY2tn
cm91bmQtaW1hZ2U6IHVybChJbWFnZXMvc2VhcmNoU21hbGxCbHVlLnBuZyk7Ci19Ci0KLTpmb2N1
cyBsaS5zZWxlY3RlZCAuYnViYmxlLnNlYXJjaC1tYXRjaGVzIHsKLSAgICBiYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoSW1hZ2VzL3NlYXJjaFNtYWxsQnJpZ2h0Qmx1ZS5wbmcpOwotfQotCi1ib2R5Lmlu
YWN0aXZlIGxpLnNlbGVjdGVkIC5idWJibGUuc2VhcmNoLW1hdGNoZXMgewotICAgIGJhY2tncm91
bmQtaW1hZ2U6IHVybChJbWFnZXMvc2VhcmNoU21hbGxHcmF5LnBuZyk7Ci19Ci0KLS5zdG9yYWdl
LWFwcGxpY2F0aW9uLWNhY2hlLXN0YXR1cy1pY29uLCAuc3RvcmFnZS1hcHBsaWNhdGlvbi1jYWNo
ZS1jb25uZWN0aXZpdHktaWNvbiB7Ci0gICAgbWFyZ2luLWJvdHRvbTogLTNweDsKLSAgICBtYXJn
aW4tbGVmdDogNXB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLS5zdGF0dXMt
YmFyLWRpdmlkZXIgewotICAgIG1hcmdpbi1sZWZ0OiA3cHg7Ci0gICAgYm9yZGVyLXJpZ2h0OiAx
cHggc29saWQgI0NDQzsKLX0KLQotLnN0b3JhZ2UtYXBwbGljYXRpb24tY2FjaGUtc3RhdHVzLCAu
c3RvcmFnZS1hcHBsaWNhdGlvbi1jYWNoZS1jb25uZWN0aXZpdHkgewotICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKLSAgICB0b3A6IDRweDsKLX0KLQotLnN0YXR1cy1iYXItaXRlbXMgewotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIGxlZnQ6
IDIwMHB4OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xp
ZCByZ2IoMTg0LCAxODQsIDE4NCk7Ci0gICAgbWFyZ2luLWxlZnQ6IC0xcHg7Ci19Ci0KLS5ub2Rl
LXNlYXJjaC1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsKLSAgICAtd2Via2l0LW1hc2stcG9zaXRp
b246IC0yMjRweCAtMjRweDsKLX0KLQotLmRlbGV0ZS1zdG9yYWdlLXN0YXR1cy1iYXItaXRlbSAu
Z2x5cGggewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlvbjogLTEyOHB4IDA7Ci19Ci0KLS5jbGVh
ci1zdG9yYWdlLXN0YXR1cy1iYXItaXRlbSAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1wb3Np
dGlvbjogLTY0cHggMDsKLX0KLQotLnJlZnJlc2gtc3RvcmFnZS1zdGF0dXMtYmFyLWl0ZW0gLmds
eXBoIHsKLSAgICAtd2Via2l0LW1hc2stcG9zaXRpb246IDAgMDsKLX0KLQotLndlYmtpdC1odG1s
LWpzLW5vZGUsIC53ZWJraXQtaHRtbC1jc3Mtbm9kZSB7Ci0gICAgd2hpdGUtc3BhY2U6IHByZTsK
LX0KLQotLnNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlvbiB7Ci0gICAgei1pbmRleDog
MzA7Ci0gICAgcGFkZGluZzogNHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMDMsIDIy
NiwgMjU1KTsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDdweDsKLSAgICBib3JkZXI6IDJw
eCBzb2xpZCByZ2IoMTY5LCAxNzIsIDIwMyk7Ci0gICAgd2lkdGg6IDkwJTsKLSAgICBwb2ludGVy
LWV2ZW50czogYXV0bzsKLX0KLQotLnNvdXJjZS1mcmFtZS1icmVha3BvaW50LW1lc3NhZ2Ugewot
ICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwotICAgIGZvbnQtd2VpZ2h0OiBub3Jt
YWw7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgdGV4
dC1zaGFkb3c6IG5vbmU7Ci0gICAgY29sb3I6IHJnYig4NSwgODUsIDg1KTsKLSAgICBjdXJzb3I6
IGRlZmF1bHQ7Ci0gICAgbWFyZ2luOiAwIDAgMnB4IDA7Ci19Ci0KLSNzb3VyY2UtZnJhbWUtYnJl
YWtwb2ludC1jb25kaXRpb24gewotICAgIG1hcmdpbjogMDsKLSAgICBib3JkZXI6IDFweCBpbnNl
dCByZ2IoMTkwLCAxOTAsIDE5MCkgIWltcG9ydGFudDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBi
b3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Ci0gICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50
OwotICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGU7Ci19Ci0KLS5zb3VyY2UtZnJh
bWUtcG9wb3Zlci10aXRsZSB7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3Zl
cmZsb3c6IGhpZGRlbjsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIGZvbnQtd2VpZ2h0
OiBib2xkOwotICAgIHBhZGRpbmctbGVmdDogMThweDsKLX0KLQotLnNvdXJjZS1mcmFtZS1wb3Bv
dmVyLXRyZWUgewotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMTk0LCAxOTQsIDE0Nyk7
Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDog
MTVweDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLX0KLQot
LnNvdXJjZS1mcmFtZS1ldmFsLWV4cHJlc3Npb24gewotICAgIG91dGxpbmU6IDFweCBzb2xpZCBy
Z2IoMTYzLCA0MSwgMzQpOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMTk0
KTsKLX0KLQotLndvcmtlcnMtbGlzdCB7Ci0gICAgbGlzdC1zdHlsZTogbm9uZTsKLSAgICBtYXJn
aW46IDA7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotLnJlc291cmNlLWNvbnRlbnQtdW5hdmFpbGFi
bGUgewotICAgIGNvbG9yOiByZ2IoNTAlLCA1MCUsIDUwJSk7Ci0gICAgZm9udC1zdHlsZTogaXRh
bGljOwotICAgIGZvbnQtc2l6ZTogMTRweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAg
cGFkZGluZzogMzJweDsKLX0KLQotLm5vZGUtbGluayB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotfQotCi0uY3Vyc29yLXBvaW50ZXIgewot
ICAgIGN1cnNvcjogcG9pbnRlcjsKLX0KLQotLmN1cnNvci1hdXRvIHsKLSAgICBjdXJzb3I6IGF1
dG87Ci19Ci0KLS5wbGVhc2Utd2FpdC1tc2cgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICBsZWZ0OiAwOwotICAgIHRvcDogMDsKLSAgICBib3JkZXI6IDRweCBibGFjayBzb2xpZDsKLSAg
ICBib3JkZXItcmFkaXVzOiA0cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Ci0gICAg
b3BhY2l0eTogMC44NTsKLSAgICBjb2xvcjogd2hpdGU7Ci0gICAgZm9udC1zaXplOiAxMnB4Owot
ICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIHotaW5kZXg6IDEwMDAwOwotfQotCi0ucmVzb3Vy
Y2Utdmlldy5qc29uIHsKLSAgICBwYWRkaW5nOiA1cHg7Ci19Ci0KLS5yZXNvdXJjZS12aWV3Lmh0
bWwgaWZyYW1lIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotfQotCi0uc29mdC1jb250ZXh0LW1lbnUtZ2xhc3MtcGFuZSB7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAg
bGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICB6LWluZGV4OiAyMDAwMDsKLX0KLQotLnNvZnQt
Y29udGV4dC1tZW51IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYm9yZGVyOiAxcHgg
c29saWQgcmdiYSgxOTYsIDE5NiwgMTk2LCAwLjkpOwotICAgIGJvcmRlci10b3A6IDFweCBzb2xp
ZCByZ2JhKDE5NiwgMTk2LCAxOTYsIDAuNSk7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk
IHJnYmEoMTUwLCAxNTAsIDE1MCwgMC45KTsKLSAgICBwYWRkaW5nOiA0cHggMCA0cHggMDsKLSAg
ICBib3JkZXItcmFkaXVzOiA0cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAg
LXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7Ci19Ci0K
LS5zb2Z0LWNvbnRleHQtbWVudS1pdGVtIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBsaW5lLWhl
aWdodDogMTNweDsKLSAgICBmb250LXNpemU6IDE0cHg7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNv
bGlkIHRyYW5zcGFyZW50OwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVu
dDsKLSAgICBwYWRkaW5nOiAycHggN3B4IDJweCA2cHg7Ci0gICAgbWFyZ2luOiAwIDEzcHggMCAw
OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0KLS5zb2Z0LWNvbnRleHQtbWVudS1zZXBh
cmF0b3IgewotICAgIGhlaWdodDogMTBweDsKLSAgICBtYXJnaW46IDAgMXB4OwotfQotCi0uc29m
dC1jb250ZXh0LW1lbnUtc2VwYXJhdG9yID4gLnNlcGFyYXRvci1saW5lIHsKLSAgICBtYXJnaW46
IDA7Ci0gICAgaGVpZ2h0OiA1cHg7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigy
MjcsIDIyNywgMjI3KTsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLX0KLQotLnNvZnQtY29u
dGV4dC1tZW51LWl0ZW0tbW91c2Utb3ZlciB7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJn
Yig1NiwgMTIxLCAyMTcpOwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoNTYsIDEy
MSwgMjE3KTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNTYsIDEyMSwgMjE3KTsKLSAgICBj
b2xvcjogd2hpdGU7Ci19Ci0KLWJvZHkucGxhdGZvcm0tbWFjIC5zb2Z0LWNvbnRleHQtbWVudS1p
dGVtLW1vdXNlLW92ZXIgewotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoOTAsIDEzMSwg
MjM2KTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDE4LCA4OCwgMjMzKTsKLSAg
ICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxl
ZnQgYm90dG9tLCBmcm9tKHJnYigxMDAsIDE0MCwgMjQzKSksIHRvKHJnYigzNiwgMTAxLCAyNDMp
KSk7Ci19Ci0KLS5zb2Z0LWNvbnRleHQtbWVudS1pdGVtLWNoZWNrbWFyayB7Ci0gICAgY29sb3I6
IHJnYigxMDgsIDEwOCwgMTA4KTsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLX0KLQotLnNv
ZnQtY29udGV4dC1tZW51LWl0ZW0tc3VibWVudS1hcnJvdyB7Ci0gICAgY29sb3I6IGJsYWNrOwot
ICAgIGZsb2F0OiByaWdodDsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLX0KLQotLnNvZnQt
Y29udGV4dC1tZW51LWl0ZW0tbW91c2Utb3ZlciAuc29mdC1jb250ZXh0LW1lbnUtaXRlbS1jaGVj
a21hcmsgewotICAgIGNvbG9yOiB3aGl0ZTsKLX0KLQotLnNlYXJjaC12aWV3IHsKLSAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBsZWZ0OiAw
OwotICAgIHJpZ2h0OiAwOwotfQotCi0uc2VhcmNoLWRyYXdlci1oZWFkZXIgaW5wdXRbdHlwZT0i
c2VhcmNoIl0uc2VhcmNoLWNvbmZpZy1zZWFyY2ggewotICAgIGZvbnQtc2l6ZTogMTFweDsKLSAg
ICBtYXJnaW4tbGVmdDogNHB4OwotICAgIGNvbG9yOiAjMzAzMDMwOwotICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKLX0KLQotYm9keS5wbGF0Zm9ybS1tYWMgLnNlYXJjaC1kcmF3ZXItaGVhZGVyIGlu
cHV0W3R5cGU9InNlYXJjaCJdLnNlYXJjaC1jb25maWctc2VhcmNoIHsKLSAgICB0b3A6IDFweDsK
LX0KLQotLnNlYXJjaC1kcmF3ZXItaGVhZGVyIGxhYmVsLnNlYXJjaC1jb25maWctbGFiZWwgewot
ICAgIG1hcmdpbi1sZWZ0OiA4cHg7Ci0gICAgY29sb3I6ICMzMDMwMzA7Ci19Ci0KLS5zZWFyY2gt
ZHJhd2VyLWhlYWRlciBpbnB1dFt0eXBlPSJjaGVja2JveCJdLnNlYXJjaC1jb25maWctY2hlY2ti
b3ggewotICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207Ci19Ci0KLWJvZHk6bm90KC5wbGF0Zm9y
bS1tYWMpIC5zZWFyY2gtZHJhd2VyLWhlYWRlciBpbnB1dFt0eXBlPSJjaGVja2JveCJdLnNlYXJj
aC1jb25maWctY2hlY2tib3ggewotICAgIG1hcmdpbi1ib3R0b206IDVweDsKLX0KLQotYm9keS5w
bGF0Zm9ybS1tYWMgLnNlYXJjaC1kcmF3ZXItaGVhZGVyIGlucHV0W3R5cGU9ImNoZWNrYm94Il0u
c2VhcmNoLWNvbmZpZy1jaGVja2JveCB7Ci0gICAgbWFyZ2luLWJvdHRvbTogNHB4OwotfQotCi0u
ZHJhd2VyLWhlYWRlciB7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIGJvcmRlci1yaWdodDog
MXB4IHNvbGlkIHJnYigxOTcsIDE5NywgMTk3KTsKLSAgICBsaW5lLWhlaWdodDogMjFweDsKLSAg
ICBwYWRkaW5nLWxlZnQ6IDZweDsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci19Ci0KLS5k
cmF3ZXItaGVhZGVyLWNsb3NlLWJ1dHRvbiB7Ci0gICAgcGFkZGluZzogM3B4IDhweDsKLSAgICBm
b250LXNpemU6IDE0cHg7Ci0gICAgY29sb3I6cmdiKDgwLCA4MCwgODApOwotICAgIG9wYWNpdHk6
IDAuNTsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAxcHg7Ci19Ci0KLS5kcmF3
ZXItaGVhZGVyLWNsb3NlLWJ1dHRvbjpob3ZlciB7Ci0gICAgb3BhY2l0eTogMTsKLX0KLQotLmRy
YXdlci1oZWFkZXItY2xvc2UtYnV0dG9uOmFjdGl2ZSB7Ci0gICAgb3BhY2l0eTogMC43OwotfQot
Ci0jYm90dG9tLXN0YXR1cy1iYXItY29udGFpbmVyIHsKLSAgICAtd2Via2l0LWZsZXg6IDEgMSAw
OwotICAgIHdpZHRoOiAwOwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci19Ci0KLS5hbmltYXRlICNi
b3R0b20tc3RhdHVzLWJhci1jb250YWluZXIgPiAqIHsKLSAgICAtd2Via2l0LXRyYW5zaXRpb246
IG9wYWNpdHkgMTAwbXMgbGluZWFyOwotfQotCi0uc2VhcmNoLXN0YXR1cy1iYXItaXRlbSB7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICBmb250
LXNpemU6IDExcHg7Ci0gICAgaGVpZ2h0OiAyM3B4OwotfQotCi0uc2VhcmNoLXN0YXR1cy1iYXIt
bWVzc2FnZSB7Ci0gICAgbWFyZ2luLWxlZnQ6NXB4OwotICAgIG1hcmdpbi1yaWdodDo1cHg7Ci0g
ICAgbWFyZ2luLXRvcDo1cHg7Ci0gICAgZmxvYXQ6bGVmdDsKLX0KLQotLnByb2dyZXNzLWJhci1z
dG9wLWJ1dHRvbi1pdGVtIHsKLSAgICB3aWR0aDogMTlweDsKLSAgICBoZWlnaHQ6IDI0cHg7Ci0g
ICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotLnByb2dyZXNzLWJhci1zdG9wLWJ1dHRvbiAuZ2x5
cGggewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlvbjogLTk2cHggLTQ4cHg7Ci0gICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiKDIxNiwgMCwgMCkgIWltcG9ydGFudDsKLX0KLQotLnNlYXJjaC1yZXN1
bHRzLXN0YXR1cy1iYXItbWVzc2FnZSB7Ci0gICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwotICAgIGN1
cnNvcjogZGVmYXVsdDsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgZmxvYXQ6IHJpZ2h0Owot
ICAgIG1hcmdpbi10b3A6IDVweDsKLX0KLQotLnNlYXJjaC12aWV3IC5zZWFyY2gtcmVzdWx0cyB7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0g
ICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBvdmVyZmxvdy15OiBhdXRvOwotfQotCi0j
c2VhcmNoLXJlc3VsdHMtcGFuZS1maWxlLWJhc2VkIGxpIHsKLSAgICBsaXN0LXN0eWxlOiBub25l
OwotfQotCi0jc2VhcmNoLXJlc3VsdHMtcGFuZS1maWxlLWJhc2VkIG9sIHsKLSAgICAtd2Via2l0
LXBhZGRpbmctc3RhcnQ6IDA7Ci0gICAgbWFyZ2luLXRvcDogMDsKLX0KLQotI3NlYXJjaC1yZXN1
bHRzLXBhbmUtZmlsZS1iYXNlZCBvbC5jaGlsZHJlbiB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0K
LQotI3NlYXJjaC1yZXN1bHRzLXBhbmUtZmlsZS1iYXNlZCBvbC5jaGlsZHJlbi5leHBhbmRlZCB7
Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLSNzZWFyY2gtcmVzdWx0cy1wYW5lLWZpbGUtYmFz
ZWQgbGkucGFyZW50OjpiZWZvcmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvdHJlZVJpZ2h0
VHJpYW5nbGVCbGFjay5wbmcpOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBsZWZ0OiAt
NHB4OwotfQotCi0jc2VhcmNoLXJlc3VsdHMtcGFuZS1maWxlLWJhc2VkIGxpLnBhcmVudC5leHBh
bmRlZDo6YmVmb3JlIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3RyZWVEb3duVHJpYW5nbGVC
bGFjay5wbmcpOwotfQotCi0jc2VhcmNoLXJlc3VsdHMtcGFuZS1maWxlLWJhc2VkIC5zZWFyY2gt
cmVzdWx0IHsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgcGFkZGluZzogMnB4IDAgMnB4IDEw
cHg7Ci0gICAgd29yZC13cmFwOiBub3JtYWw7Ci0gICAgd2hpdGUtc3BhY2U6IHByZTsKLSAgICBj
dXJzb3I6IHBvaW50ZXI7Ci19Ci0KLSNzZWFyY2gtcmVzdWx0cy1wYW5lLWZpbGUtYmFzZWQgLnNl
YXJjaC1yZXN1bHQ6aG92ZXIgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTIxLCAxMjEs
IDEyMSwgMC4xKTsKLX0KLQotI3NlYXJjaC1yZXN1bHRzLXBhbmUtZmlsZS1iYXNlZCAuc2VhcmNo
LXJlc3VsdCAuc2VhcmNoLXJlc3VsdC1maWxlLW5hbWUgewotICAgIGZvbnQtd2VpZ2h0OiBib2xk
OwotICAgIGNvbG9yOiAjMjIyOwotfQotCi0jc2VhcmNoLXJlc3VsdHMtcGFuZS1maWxlLWJhc2Vk
IC5zZWFyY2gtcmVzdWx0IC5zZWFyY2gtcmVzdWx0LW1hdGNoZXMtY291bnQgewotICAgIG1hcmdp
bi1sZWZ0OiA1cHg7Ci0gICAgY29sb3I6ICMzMzM7Ci19Ci0KLSNzZWFyY2gtcmVzdWx0cy1wYW5l
LWZpbGUtYmFzZWQgLnNob3ctbW9yZS1tYXRjaGVzIHsKLSAgICBwYWRkaW5nOiA0cHggMDsKLSAg
ICBjb2xvcjogIzMzMzsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgZm9udC1zaXplOiAxMXB4
OwotICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwotfQotCi0jc2VhcmNoLXJlc3VsdHMtcGFuZS1maWxl
LWJhc2VkIC5zaG93LW1vcmUtbWF0Y2hlczpob3ZlciB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Ci19Ci0KLSNzZWFyY2gtcmVzdWx0cy1wYW5lLWZpbGUtYmFzZWQgLnNlYXJjaC1t
YXRjaCB7Ci0gICAgd29yZC13cmFwOiBub3JtYWw7Ci0gICAgd2hpdGUtc3BhY2U6IHByZTsKLX0K
LQotI3NlYXJjaC1yZXN1bHRzLXBhbmUtZmlsZS1iYXNlZCAuc2VhcmNoLW1hdGNoIC53ZWJraXQt
bGluZS1udW1iZXIuc2VhcmNoLW1hdGNoLWxpbmUtbnVtYmVyIHsKLSAgICBtYXJnaW4tcmlnaHQ6
IDVweDsKLSAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQkJCOwotfQotCi0jc2VhcmNoLXJl
c3VsdHMtcGFuZS1maWxlLWJhc2VkIC5zZWFyY2gtbWF0Y2g6bm90KDpob3ZlcikgLndlYmtpdC1s
aW5lLW51bWJlci5zZWFyY2gtbWF0Y2gtbGluZS1udW1iZXIgewotICAgIGJhY2tncm91bmQtY29s
b3I6ICNGMEYwRjA7Ci19Ci0KLSNzZWFyY2gtcmVzdWx0cy1wYW5lLWZpbGUtYmFzZWQgLnNlYXJj
aC1tYXRjaDpob3ZlciB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1NiwgMTIxLCAyMTcs
IDAuMSk7Ci19Ci0KLSNzZWFyY2gtcmVzdWx0cy1wYW5lLWZpbGUtYmFzZWQgLnNlYXJjaC1tYXRj
aCAuaGlnaGxpZ2h0ZWQtbWF0Y2ggewotICAgIGJhY2tncm91bmQtY29sb3I6ICNGMUVBMDA7Ci19
Ci0KLSNzZWFyY2gtcmVzdWx0cy1wYW5lLWZpbGUtYmFzZWQgYSB7Ci0gICAgdGV4dC1kZWNvcmF0
aW9uOiBub25lOwotICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0jc2VhcmNoLXJlc3VsdHMtcGFu
ZS1maWxlLWJhc2VkIC5zZWFyY2gtbWF0Y2ggLnNlYXJjaC1tYXRjaC1jb250ZW50IHsKLSAgICBj
b2xvcjogIzAwMDsKLX0KLQotLnJlY29yZC1jcHUtcHJvZmlsZS1zdGF0dXMtYmFyLWl0ZW0gLmds
eXBoLCAucmVjb3JkLXByb2ZpbGUtc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7Ci0gICAgLXdlYmtp
dC1tYXNrLXBvc2l0aW9uOiAtMjg4cHggMDsKLX0KLQotLnJlY29yZC1jcHUtcHJvZmlsZS1zdGF0
dXMtYmFyLWl0ZW0udG9nZ2xlZC1vbiAuZ2x5cGgsIC5yZWNvcmQtcHJvZmlsZS1zdGF0dXMtYmFy
LWl0ZW0udG9nZ2xlZC1vbiAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlvbjogLTI4
OHB4IC0yNHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMTYsIDAsIDApICFpbXBvcnRh
bnQ7Ci19Ci0KLS5zdG9yYWdlLWVtcHR5LXZpZXcsIC5zdG9yYWdlLXZpZXcgLnN0b3JhZ2UtdGFi
bGUtZXJyb3IgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90
dG9tOiAyNSU7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBmb250LXNpemU6IDI0
cHg7Ci0gICAgY29sb3I6IHJnYig3NSUsIDc1JSwgNzUlKTsKLSAgICBtYXJnaW4tdG9wOiBhdXRv
OwotICAgIG1hcmdpbi1ib3R0b206IGF1dG87Ci0gICAgaGVpZ2h0OiA1MHB4OwotICAgIGxpbmUt
aGVpZ2h0OiAyNnB4OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBmb250LXdlaWdodDog
Ym9sZDsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKLX0K
LQotLyogR2VuZXJpYyBzdWdnZXN0IGJveCBzdHlsZSAqLwotCi0uc3VnZ2VzdC1ib3guZ2VuZXJp
Yy1zdWdnZXN0IHsKLSAgICBtYXJnaW4tbGVmdDogLTFweDsKLSAgICBib3JkZXItY29sb3I6IHJn
Yig2NiUsIDY2JSwgNjYlKTsKLX0KLQotLnN1Z2dlc3QtYm94LmdlbmVyaWMtc3VnZ2VzdC5hYm92
ZS1hbmNob3IgewotICAgYm9yZGVyLXJhZGl1czogNXB4IDVweCA1cHggMDsKLX0KLQotLnN1Z2dl
c3QtYm94LmdlbmVyaWMtc3VnZ2VzdC51bmRlci1hbmNob3IgewotICAgYm9yZGVyLXJhZGl1czog
MCA1cHggNXB4IDVweDsKLX0KLQotLyogQ3VzdG9tIHBvcHVwIHNjcm9sbGVycyAqLwotCi0uY3Vz
dG9tLXBvcHVwLWhvcml6b250YWwtc2Nyb2xsIDo6LXdlYmtpdC1zY3JvbGxiYXIsIC5jdXN0b20t
cG9wdXAtdmVydGljYWwtc2Nyb2xsIDo6LXdlYmtpdC1zY3JvbGxiYXIgewotICAgIHdpZHRoOiAx
MXB4OwotICAgIGhlaWdodDogMTFweDsKLX0KLQotLmN1c3RvbS1wb3B1cC1ob3Jpem9udGFsLXNj
cm9sbCA6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciwgLmN1c3RvbS1wb3B1cC12ZXJ0aWNhbC1z
Y3JvbGwgOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19
Ci0KLS5jdXN0b20tcG9wdXAtaG9yaXpvbnRhbC1zY3JvbGwgOjotd2Via2l0LXJlc2l6ZXIsIC5j
dXN0b20tcG9wdXAtdmVydGljYWwtc2Nyb2xsIDo6LXdlYmtpdC1yZXNpemVyIHsKLSAgICBkaXNw
bGF5OiBub25lOwotfQotCi0uY3VzdG9tLXBvcHVwLWhvcml6b250YWwtc2Nyb2xsIDo6LXdlYmtp
dC1zY3JvbGxiYXItYnV0dG9uLCAuY3VzdG9tLXBvcHVwLXZlcnRpY2FsLXNjcm9sbCA6Oi13ZWJr
aXQtc2Nyb2xsYmFyLWJ1dHRvbiB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLyogQ3VzdG9t
IEhvcml6b250YWwgU2Nyb2xsYmFyIFN0eWxlcyAqLwotCi0uY3VzdG9tLXBvcHVwLWhvcml6b250
YWwtc2Nyb2xsIDo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbDpjb3JuZXItcHJlc2VudCB7
Ci0gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwOwotfQotCi0uY3VzdG9tLXBvcHVwLWhvcml6b250
YWwtc2Nyb2xsIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG9yaXpvbnRhbCB7Ci0gICAgLXdl
YmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvdGh1bWJIb3Jpei5wbmcpIDAgMTEgMCAxMTsK
LSAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwotICAgIGJvcmRlci13aWR0aDogMCAxMXB4
OwotICAgIG1pbi13aWR0aDogMjBweDsKLX0KLQotLmN1c3RvbS1wb3B1cC1ob3Jpem9udGFsLXNj
cm9sbCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWw6aG92ZXIgewotICAgIC13
ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3RodW1iSG92ZXJIb3Jpei5wbmcpIDAgMTEg
MCAxMTsKLX0KLQotLmN1c3RvbS1wb3B1cC1ob3Jpem9udGFsLXNjcm9sbCA6Oi13ZWJraXQtc2Ny
b2xsYmFyLXRodW1iOmhvcml6b250YWw6YWN0aXZlIHsKLSAgICAtd2Via2l0LWJvcmRlci1pbWFn
ZTogdXJsKEltYWdlcy90aHVtYkFjdGl2ZUhvcml6LnBuZykgMCAxMSAwIDExOwotfQotCi0uY3Vz
dG9tLXBvcHVwLWhvcml6b250YWwtc2Nyb2xsIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGll
Y2U6aG9yaXpvbnRhbDpzdGFydCB7Ci0gICAgbWFyZ2luLWxlZnQ6IDVweDsKLX0KLQotLmN1c3Rv
bS1wb3B1cC1ob3Jpem9udGFsLXNjcm9sbCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNl
Omhvcml6b250YWw6ZW5kIHsKLSAgICBtYXJnaW4tcmlnaHQ6IDVweDsKLX0KLQotLmN1c3RvbS1w
b3B1cC1ob3Jpem9udGFsLXNjcm9sbCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlOmhv
cml6b250YWw6ZW5kOmNvcm5lci1wcmVzZW50IHsKLSAgICBtYXJnaW4tcmlnaHQ6IDRweDsKLX0K
LQotLmN1c3RvbS1wb3B1cC1ob3Jpem9udGFsLXNjcm9sbCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRy
YWNrLXBpZWNlOmhvcml6b250YWw6ZGVjcmVtZW50IHsKLSAgICAtd2Via2l0LWJvcmRlci1pbWFn
ZTogdXJsKEltYWdlcy90cmFja0hvcml6LnBuZykgMCAxMSAwIDExOwotICAgIGJvcmRlci1jb2xv
cjogdHJhbnNwYXJlbnQ7Ci0gICAgYm9yZGVyLXdpZHRoOiAwIDAgMCAxMXB4OwotfQotCi0uY3Vz
dG9tLXBvcHVwLWhvcml6b250YWwtc2Nyb2xsIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGll
Y2U6aG9yaXpvbnRhbDppbmNyZW1lbnQgewotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwo
SW1hZ2VzL3RyYWNrSG9yaXoucG5nKSAwIDExIDAgMTE7Ci0gICAgYm9yZGVyLWNvbG9yOiB0cmFu
c3BhcmVudDsKLSAgICBib3JkZXItd2lkdGg6IDAgMTFweCAwIDA7Ci19Ci0KLS8qIEN1c3RvbSBW
ZXJ0aWNhbCBTY3JvbGxiYXIgU3R5bGVzICovCi0KLS5jdXN0b20tcG9wdXAtdmVydGljYWwtc2Ny
b2xsIDo6LXdlYmtpdC1zY3JvbGxiYXI6dmVydGljYWw6Y29ybmVyLXByZXNlbnQgewotICAgIGJv
cmRlci1ib3R0b20td2lkdGg6IDA7Ci19Ci0KLS5jdXN0b20tcG9wdXAtdmVydGljYWwtc2Nyb2xs
IDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6dmVydGljYWwgewotICAgIC13ZWJraXQtYm9yZGVy
LWltYWdlOiB1cmwoSW1hZ2VzL3RodW1iVmVydC5wbmcpIDExIDAgMTEgMDsKLSAgICBib3JkZXIt
Y29sb3I6IHRyYW5zcGFyZW50OwotICAgIGJvcmRlci13aWR0aDogMTFweCAwOwotICAgIG1pbi1o
ZWlnaHQ6IDIwcHg7Ci19Ci0KLS5jdXN0b20tcG9wdXAtdmVydGljYWwtc2Nyb2xsIDo6LXdlYmtp
dC1zY3JvbGxiYXItdGh1bWI6dmVydGljYWw6aG92ZXIgewotICAgIC13ZWJraXQtYm9yZGVyLWlt
YWdlOiB1cmwoSW1hZ2VzL3RodW1iSG92ZXJWZXJ0LnBuZykgMTEgMCAxMSAwOwotfQotCi0uY3Vz
dG9tLXBvcHVwLXZlcnRpY2FsLXNjcm9sbCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRp
Y2FsOmFjdGl2ZSB7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvdGh1bWJB
Y3RpdmVWZXJ0LnBuZykgMTEgMCAxMSAwOwotfQotCi0uY3VzdG9tLXBvcHVwLXZlcnRpY2FsLXNj
cm9sbCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlOnZlcnRpY2FsOnN0YXJ0IHsKLSAg
ICBtYXJnaW4tdG9wOiA1cHg7Ci19Ci0KLS5jdXN0b20tcG9wdXAtdmVydGljYWwtc2Nyb2xsIDo6
LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2U6dmVydGljYWw6ZW5kIHsKLSAgICBtYXJnaW4t
Ym90dG9tOiA1cHg7Ci19Ci0KLS5jdXN0b20tcG9wdXAtdmVydGljYWwtc2Nyb2xsIDo6LXdlYmtp
dC1zY3JvbGxiYXItdHJhY2stcGllY2U6dmVydGljYWw6ZW5kOmNvcm5lci1wcmVzZW50IHsKLSAg
ICBtYXJnaW4tYm90dG9tOiA0cHg7Ci19Ci0KLS5jdXN0b20tcG9wdXAtdmVydGljYWwtc2Nyb2xs
IDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2U6dmVydGljYWw6ZGVjcmVtZW50IHsKLSAg
ICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy90cmFja1ZlcnQucG5nKSAxMSAwIDEx
IDA7Ci0gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBib3JkZXItd2lkdGg6IDEx
cHggMCAwIDA7Ci19Ci0KLS5jdXN0b20tcG9wdXAtdmVydGljYWwtc2Nyb2xsIDo6LXdlYmtpdC1z
Y3JvbGxiYXItdHJhY2stcGllY2U6dmVydGljYWw6aW5jcmVtZW50IHsKLSAgICAtd2Via2l0LWJv
cmRlci1pbWFnZTogdXJsKEltYWdlcy90cmFja1ZlcnQucG5nKSAxMSAwIDExIDA7Ci0gICAgYm9y
ZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBib3JkZXItd2lkdGg6IDAgMCAxMXB4IDA7Ci19
Ci0KLS5jb25zb2xlLWNvbnRleHQgewotICAgIG1heC13aWR0aDogMjAwcHg7Ci19Ci0KLS5pbnNw
ZWN0b3ItZm9vdGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9tOiAwOwot
ICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIGhl
aWdodDogYXV0bzsKLX0KLQotLnByb2dyZXNzLWJhci1jb250YWluZXIgewotICAgIGRpc3BsYXk6
IC13ZWJraXQtZmxleDsKLSAgICBtYXJnaW46IDAgOHB4OwotICAgIC13ZWJraXQtZmxleDogMSAw
OwotfQotCi0ucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciBzcGFuIHsKLSAgICBwYWRkaW5nOiA2cHg7
Ci19Ci0KLS5wcm9ncmVzcy1iYXItY29udGFpbmVyIHByb2dyZXNzIHsKLSAgICBtYXJnaW4tdG9w
OiA3cHg7Ci0gICAgLXdlYmtpdC1mbGV4OiAxIDA7Ci19Ci0KLWJvZHkucGxhdGZvcm0tbWFjIC5w
cm9ncmVzcy1iYXItY29udGFpbmVyIHByb2dyZXNzIHsKLSAgICBtYXJnaW4tdG9wOiA2cHg7Ci19
Ci0KLS5wcm9ncmVzcy1iYXItY29udGFpbmVyIGJ1dHRvbi5zdGF0dXMtYmFyLWl0ZW0gewotICAg
IGJvcmRlci1sZWZ0OiBub25lOwotICAgIG1hcmdpbi10b3A6IDFweDsKLX0KLQotLnNvdXJjZS1m
cmFtZS1jdXJzb3ItcG9zaXRpb24gewotICAgIHBhZGRpbmctbGVmdDogNnB4OwotICAgIHBhZGRp
bmctdG9wOiA1cHg7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHBvaW50ZXItZXZl
bnRzOiBhdXRvOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci0gICAgZm9udC1zaXpl
OiAxMXB4OwotICAgIGN1cnNvcjogdGV4dDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwYWRjYTBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotPCEt
LQotQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotCi0xLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0yLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LTMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLURJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LU9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLVRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0tLT4KLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50
LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Ci0gICAgPG1ldGEgaHR0
cC1lcXVpdj0iQ29udGVudC1TZWN1cml0eS1Qb2xpY3kiIGNvbnRlbnQ9Im9iamVjdC1zcmMgJ25v
bmUnOyBzY3JpcHQtc3JjICdzZWxmJyAndW5zYWZlLWV2YWwnIj4KLSAgICA8bGluayByZWw9InN0
eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkaWFsb2cuY3NzIj4KLSAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJpbnNwZWN0b3IuY3NzIj4KLSAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJpbnNwZWN0b3JD
b21tb24uY3NzIj4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSJpbnNwZWN0b3JTeW50YXhIaWdobGlnaHQuY3NzIj4KLSAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJwb3BvdmVyLmNzcyI+Ci0gICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KLSAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqc2RpZmZsaWIuanMiPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRPTUV4dGVuc2lvbi5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idHJl
ZW91dGxpbmUuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Imluc3BlY3Rvci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iVUlTdHJpbmcuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ikluc3BlY3RvckJhY2tlbmQuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ikluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iRXh0ZW5zaW9uUmVnaXN0cnlTdHViLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbnNwZWN0b3JGcm9udGVuZEFQSS5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iT2JqZWN0LmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTZXR0aW5ncy5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVmll
dy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
VUlVdGlscy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iSGVscFNjcmVlbi5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyI+PC9zY3JpcHQ+Ci0g
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRmlsZU1hbmFnZXIuanMiPjwv
c2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNoZWNrYm94
LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJD
b250ZXh0TWVudS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iU29mdENvbnRleHRNZW51LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJLZXlib2FyZFNob3J0Y3V0LmpzIj48L3NjcmlwdD4KLSAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdWdnZXN0Qm94LmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0UHJvbXB0
LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQ
b3BvdmVyLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJQbGFjYXJkLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJUYWJiZWRQYW5lLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJWaWV3cG9ydENvbnRyb2wuanMiPjwvc2NyaXB0PiAKLSAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEcmF3ZXIuanMiPjwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnNvbGVNb2RlbC5qcyI+
PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29uc29s
ZU1lc3NhZ2UuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IkNvbnNvbGVWaWV3LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJQYW5lbC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5zcGVjdG9yVmlldy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQWR2YW5jZWRTZWFyY2hDb250cm9sbGVy
LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJU
aW1lbGluZUdyaWQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9Ik92ZXJ2aWV3R3JpZC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29udGVudFByb3ZpZGVyLmpzIj48L3NjcmlwdD4KLSAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZS5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iTmV0d29ya1JlcXVlc3Qu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlVJ
U291cmNlQ29kZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iQ1NTU3R5bGVNb2RlbC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iTmV0d29ya01hbmFnZXIuanMiPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ik5ldHdvcmtMb2cuanMiPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlVHJlZU1v
ZGVsLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJQYXJzZWRVUkwuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IlJlc291cmNlVXRpbHMuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlVHlwZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVGltZWxpbmVNYW5hZ2VyLmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJVc2VyQWdlbnRT
dXBwb3J0LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJEYXRhYmFzZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iRE9NU3RvcmFnZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGF0YUdyaWQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNob3dNb3JlRGF0YUdyaWROb2RlLmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb29raWVzVGFi
bGUuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkNvb2tpZUl0ZW1zVmlldy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iQXBwbGljYXRpb25DYWNoZU1vZGVsLmpzIj48L3NjcmlwdD4KLSAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbmRleGVkREJNb2RlbC5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU3BlY3RydW0u
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNp
ZGViYXJQYW5lLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJFbGVtZW50c1RyZWVPdXRsaW5lLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJET01QcmVzZW50YXRpb25VdGlscy5qcyI+PC9zY3Jp
cHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2lkZWJhclRyZWVF
bGVtZW50LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJTZWN0aW9uLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJQcm9wZXJ0aWVzU2VjdGlvbi5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVtb3RlT2JqZWN0LmpzIj48L3NjcmlwdD4KLSAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJPYmplY3RQcm9wZXJ0aWVzU2Vj
dGlvbi5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iT2JqZWN0UG9wb3ZlckhlbHBlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iTmF0aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRE9NQnJlYWtw
b2ludHNTaWRlYmFyUGFuZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iQ29sb3IuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkNTU01ldGFkYXRhLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQYW5lbEVuYWJsZXJWaWV3LmpzIj48L3Njcmlw
dD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdGF0dXNCYXJCdXR0
b24uanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlRleHRFZGl0b3IuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IkRlZmF1bHRUZXh0RWRpdG9yLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VGcmFtZS5qcyI+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VWaWV3LmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJGb250Vmlldy5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW1h
Z2VWaWV3LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJTcGxpdFZpZXcuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IlNpZGViYXJWaWV3LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb25zb2xlUGFuZWwuanMiPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkV4dGVuc2lvbkFQSS5qcyI+PC9zY3Jp
cHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRXh0ZW5zaW9uQXVk
aXRDYXRlZ29yeS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iRXh0ZW5zaW9uU2VydmVyLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJFeHRlbnNpb25WaWV3LmpzIj48L3NjcmlwdD4KLSAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJFeHRlbnNpb25QYW5lbC5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRW1wdHlWaWV3
LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJT
Y3JpcHRGb3JtYXR0ZXIuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkRPTVN5bnRheEhpZ2hsaWdodGVyLmpzIj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0RWRpdG9yTW9kZWwuanMiPjwvc2Ny
aXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3JI
aWdobGlnaHRlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iVGV4dFV0aWxzLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJTb3VyY2VUb2tlbml6ZXIuanMiPjwvc2NyaXB0PgotICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZUNTU1Rva2VuaXplci5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlSFRN
TFRva2VuaXplci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRmlsZVN5c3RlbU1vZGVsLmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJGaWxlVXRpbHMu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRl
YnVnZ2VyTW9kZWwuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IlNvdXJjZU1hcC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iU291cmNlTWFwcGluZy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0LmpzIj48L3NjcmlwdD4KLSAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJMaW5raWZpZXIuanMiPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRlYnVnZ2VyU2NyaXB0
TWFwcGluZy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iUHJlc2VudGF0aW9uQ29uc29sZU1lc3NhZ2VIZWxwZXIuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVTeXN0ZW1Qcm9qZWN0RGVs
ZWdhdGUuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkZpbGVTeXN0ZW1NYXBwaW5nLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJJc29sYXRlZEZpbGVTeXN0ZW0uanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Iklzb2xhdGVkRmlsZVN5c3RlbU1h
bmFnZXIuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkZpbGVNYXBwaW5nLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJXb3Jrc3BhY2UuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnRlbnRQcm92aWRlckJhc2VkUHJvamVjdERlbGVnYXRl
LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJT
aW1wbGVXb3Jrc3BhY2VQcm92aWRlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iQnJlYWtwb2ludE1hbmFnZXIuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnRlbnRQcm92aWRlcnMuanMi
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRlZmF1
bHRTY3JpcHRNYXBwaW5nLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJSZXNvdXJjZVNjcmlwdE1hcHBpbmcuanMiPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbXBpbGVyU2NyaXB0TWFwcGluZy5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iTGl2
ZUVkaXRTdXBwb3J0LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTQVNTU291cmNlTWFwcGluZy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRE9NQWdlbnQuanMiPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRlc3RDb250cm9sbGVyLmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEaWFsb2cuanMi
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkdvVG9M
aW5lRGlhbG9nLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJTaWRlYmFyT3ZlcmxheS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2V0dGluZ3NTY3JlZW4uanMiPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNob3J0Y3V0c1NjcmVlbi5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iT3ZlcnJpZGVz
Vmlldy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iSEFSRW50cnkuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IkNvb2tpZVBhcnNlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iVG9vbGJhci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2VhcmNoQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5zcGVjdEVsZW1lbnRN
b2RlQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iV29ya2VyTWFuYWdlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVXNlck1ldHJpY3MuanMiPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJ1bnRpbWVNb2RlbC5qcyI+PC9zY3Jp
cHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSGFuZGxlclJlZ2lz
dHJ5LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJTbmlwcGV0U3RvcmFnZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iU2NyaXB0U25pcHBldE1vZGVsLmpzIj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQcm9ncmVzcy5qcyI+PC9zY3JpcHQ+Ci0g
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJvZ3Jlc3NJbmRpY2F0b3Iu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN0
eWxlc1NvdXJjZU1hcHBpbmcuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ik5ldHdvcmtVSVNvdXJjZUNvZGVQcm92aWRlci5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRWxlbWVudHNQYW5lbERl
c2NyaXB0b3IuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ik5ldHdvcmtQYW5lbERlc2NyaXB0b3IuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlByb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLmpzIj48
L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHRz
UGFuZWxEZXNjcmlwdG9yLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJUaW1lbGluZVBhbmVsRGVzY3JpcHRvci5qcyI+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRG9ja0NvbnRyb2xsZXIuanMiPjwv
c2NyaXB0PgotPC9oZWFkPgotPGJvZHkgY2xhc3M9InVuZG9ja2VkIiBpZD0iLXdlYmtpdC13ZWIt
aW5zcGVjdG9yIj4KLSAgICA8ZGl2IGlkPSJ0b29sYmFyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0i
dG9vbGJhci1pdGVtIGNsb3NlLWxlZnQiPjxkaXYgaWQ9ImNsb3NlLWJ1dHRvbi1sZWZ0Ij48L2Rp
dj48L2Rpdj4KLSAgICAgICAgPGRpdiBpZD0idG9vbGJhci1jb250cm9scyI+Ci0gICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWl0ZW0iPjxkaXYgaWQ9InRvb2xiYXItZHJvcGRvd24tYXJy
b3ciPiZyYXF1bzs8L2Rpdj48L2Rpdj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIt
aXRlbSI+PGRpdiBpZD0idG9vbGJhci1wYW5lbHMtbWVudSI+JmVxdWl2OzwvZGl2PjwvZGl2Pgot
ICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1pdGVtIGNsb3NlLXJpZ2h0Ij48ZGl2IGlk
PSJjbG9zZS1idXR0b24tcmlnaHQiPjwvZGl2PjwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICA8
L2Rpdj4KLSAgICA8ZGl2IGlkPSJtYWluIj4KLSAgICAgICAgPGRpdiBpZD0iZmxvYXRpbmctc3Rh
dHVzLWJhci1jb250YWluZXIiIGNsYXNzPSJzdGF0dXMtYmFyIj48ZGl2IGlkPSJmbG9hdGluZy1z
dGF0dXMtYmFyLXJlc2l6ZXIiPjwvZGl2PjwvZGl2PgotICAgIDwvZGl2PgotICAgIDxkaXYgaWQ9
ImRyYXdlciI+PC9kaXY+Ci0gICAgPGRpdiBpZD0ibWFpbi1zdGF0dXMtYmFyIiBjbGFzcz0ic3Rh
dHVzLWJhciBsYXlvdXQtYm91bmRhcnkiPgotICAgICAgICA8ZGl2IGlkPSJib3R0b20tc3RhdHVz
LWJhci1jb250YWluZXIiPgotICAgICAgICAgICAgPGRpdiBpZD0icGFuZWwtc3RhdHVzLWJhciI+
Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0iZHJhd2VyLXZpZXctYW5jaG9yIj48L2Rpdj4KLSAg
ICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPGRpdiBpZD0iZXJyb3It
d2FybmluZy1jb3VudCIgY2xhc3M9ImhpZGRlbiI+PC9kaXY+Ci0gICAgPC9kaXY+Ci08L2JvZHk+
Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmYwZDYzLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMTAyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgTWF0dCBMaWxlayAocGV3dGVybW9vc2VAZ21haWwuY29tKS4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi12YXIgV2ViSW5zcGVjdG9yID0gewotICAgIF9wYW5l
bERlc2NyaXB0b3JzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnBhbmVscyA9IHt9
OwotICAgICAgICBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldyA9IG5ldyBXZWJJbnNwZWN0b3Iu
SW5zcGVjdG9yVmlldygpOwotICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtYWluIik7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3
LnNob3cocGFyZW50RWxlbWVudCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcuRXZlbnRzLlBhbmVs
U2VsZWN0ZWQsIHRoaXMuX3BhbmVsU2VsZWN0ZWQsIHRoaXMpOwotCi0gICAgICAgIHZhciBlbGVt
ZW50cyA9IG5ldyBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbERlc2NyaXB0b3IoKTsKLSAgICAg
ICAgdmFyIHJlc291cmNlcyA9IG5ldyBXZWJJbnNwZWN0b3IuUGFuZWxEZXNjcmlwdG9yKCJyZXNv
dXJjZXMiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc291cmNlcyIpLCAiUmVzb3VyY2VzUGFu
ZWwiLCAiUmVzb3VyY2VzUGFuZWwuanMiKTsKLSAgICAgICAgdmFyIG5ldHdvcmsgPSBuZXcgV2Vi
SW5zcGVjdG9yLk5ldHdvcmtQYW5lbERlc2NyaXB0b3IoKTsKLSAgICAgICAgdmFyIHNjcmlwdHMg
PSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbERlc2NyaXB0b3IoKTsKLSAgICAgICAgdmFy
IHRpbWVsaW5lID0gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsRGVzY3JpcHRvcigpOwot
ICAgICAgICB2YXIgcHJvZmlsZXMgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWxEZXNj
cmlwdG9yKCk7Ci0gICAgICAgIHZhciBhdWRpdHMgPSBuZXcgV2ViSW5zcGVjdG9yLlBhbmVsRGVz
Y3JpcHRvcigiYXVkaXRzIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBdWRpdHMiKSwgIkF1ZGl0
c1BhbmVsIiwgIkF1ZGl0c1BhbmVsLmpzIik7Ci0gICAgICAgIHZhciBjb25zb2xlID0gbmV3IFdl
Ykluc3BlY3Rvci5QYW5lbERlc2NyaXB0b3IoImNvbnNvbGUiLCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkNvbnNvbGUiKSwgIkNvbnNvbGVQYW5lbCIpOwotICAgICAgICB2YXIgYWxsRGVzY3JpcHRv
cnMgPSBbZWxlbWVudHMsIHJlc291cmNlcywgbmV0d29yaywgc2NyaXB0cywgdGltZWxpbmUsIHBy
b2ZpbGVzLCBhdWRpdHMsIGNvbnNvbGVdOwotICAgICAgICB2YXIgYWxsUHJvZmlsZXJzID0gW3By
b2ZpbGVzXTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLnNl
cGFyYXRlUHJvZmlsZXJzLmlzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBhbGxQcm9maWxlcnMg
PSBbXTsKLSAgICAgICAgICAgIGFsbFByb2ZpbGVycy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuUGFu
ZWxEZXNjcmlwdG9yKCJjcHUtcHJvZmlsZXIiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNQVSBQ
cm9maWxlciIpLCAiQ1BVUHJvZmlsZXJQYW5lbCIsICJQcm9maWxlc1BhbmVsLmpzIikpOwotICAg
ICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuV29ya2VyTWFuYWdlci5pc1dvcmtlckZyb250ZW5k
KCkpCi0gICAgICAgICAgICAgICAgYWxsUHJvZmlsZXJzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5Q
YW5lbERlc2NyaXB0b3IoImNzcy1wcm9maWxlciIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ1NT
IFByb2ZpbGVyIiksICJDU1NTZWxlY3RvclByb2ZpbGVyUGFuZWwiLCAiUHJvZmlsZXNQYW5lbC5q
cyIpKTsKLSAgICAgICAgICAgIGlmIChDYXBhYmlsaXRpZXMuaGVhcFByb2ZpbGVyUHJlc2VudCkK
LSAgICAgICAgICAgICAgICBhbGxQcm9maWxlcnMucHVzaChuZXcgV2ViSW5zcGVjdG9yLlBhbmVs
RGVzY3JpcHRvcigiaGVhcC1wcm9maWxlciIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSGVhcCBQ
cm9maWxlciIpLCAiSGVhcFByb2ZpbGVyUGFuZWwiLCAiUHJvZmlsZXNQYW5lbC5qcyIpKTsKLSAg
ICAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLldvcmtlck1hbmFnZXIuaXNXb3JrZXJGcm9udGVu
ZCgpICYmIFdlYkluc3BlY3Rvci5leHBlcmltZW50c1NldHRpbmdzLmNhbnZhc0luc3BlY3Rpb24u
aXNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgYWxsUHJvZmlsZXJzLnB1c2gobmV3IFdlYklu
c3BlY3Rvci5QYW5lbERlc2NyaXB0b3IoImNhbnZhcy1wcm9maWxlciIsIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQ2FudmFzIFByb2ZpbGVyIiksICJDYW52YXNQcm9maWxlclBhbmVsIiwgIlByb2Zp
bGVzUGFuZWwuanMiKSk7Ci0gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmJpbmQo
YWxsRGVzY3JpcHRvcnMsIGFsbERlc2NyaXB0b3JzLmluZGV4T2YocHJvZmlsZXMpLCAxKS5hcHBs
eShudWxsLCBhbGxQcm9maWxlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHBhbmVsRGVz
Y3JpcHRvcnMgPSBbXTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5Xb3JrZXJNYW5hZ2VyLmlz
V29ya2VyRnJvbnRlbmQoKSkgewotICAgICAgICAgICAgcGFuZWxEZXNjcmlwdG9ycy5wdXNoKHNj
cmlwdHMpOwotICAgICAgICAgICAgcGFuZWxEZXNjcmlwdG9ycy5wdXNoKHRpbWVsaW5lKTsKLSAg
ICAgICAgICAgIHBhbmVsRGVzY3JpcHRvcnMgPSBwYW5lbERlc2NyaXB0b3JzLmNvbmNhdChhbGxQ
cm9maWxlcnMpOwotICAgICAgICAgICAgcGFuZWxEZXNjcmlwdG9ycy5wdXNoKGNvbnNvbGUpOwot
ICAgICAgICAgICAgcmV0dXJuIHBhbmVsRGVzY3JpcHRvcnM7Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhbGxEZXNjcmlwdG9ycy5sZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIHBhbmVsRGVzY3JpcHRvcnMucHVzaChhbGxEZXNjcmlwdG9yc1tpXSk7Ci0gICAgICAgIHJl
dHVybiBwYW5lbERlc2NyaXB0b3JzOwotICAgIH0sCi0KLSAgICBfcGFuZWxTZWxlY3RlZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fdG9nZ2xlQ29uc29sZUJ1dHRvbi5zZXRFbmFi
bGVkKFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpLm5hbWUgIT09ICJj
b25zb2xlIik7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVHbG9iYWxTdGF0dXNCYXJJdGVtczogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGJvdHRvbVN0YXR1c0JhckNvbnRhaW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3R0b20tc3RhdHVzLWJhci1jb250YWluZXIiKTsKLQot
ICAgICAgICAvLyBDcmVhdGUgbWFpbiBkb2NrIGJ1dHRvbiBhbmQgb3B0aW9ucy4KLSAgICAgICAg
dmFyIG1haW5TdGF0dXNCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMt
YmFyIik7Ci0gICAgICAgIG1haW5TdGF0dXNCYXIuaW5zZXJ0QmVmb3JlKHRoaXMuZG9ja0NvbnRy
b2xsZXIuZWxlbWVudCwgYm90dG9tU3RhdHVzQmFyQ29udGFpbmVyKTsKLQotICAgICAgICB0aGlz
Ll90b2dnbGVDb25zb2xlQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGNvbnNvbGUuIiksICJjb25zb2xlLXN0YXR1cy1i
YXItaXRlbSIpOwotICAgICAgICB0aGlzLl90b2dnbGVDb25zb2xlQnV0dG9uLmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgdGhpcy5fdG9nZ2xlQ29uc29sZUJ1dHRvbkNsaWNrZWQuYmluZCh0aGlz
KSwgZmFsc2UpOwotICAgICAgICBtYWluU3RhdHVzQmFyLmluc2VydEJlZm9yZSh0aGlzLl90b2dn
bGVDb25zb2xlQnV0dG9uLmVsZW1lbnQsIGJvdHRvbVN0YXR1c0JhckNvbnRhaW5lcik7Ci0KLSAg
ICAgICAgaWYgKHRoaXMuaW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlcikKLSAgICAgICAgICAg
IG1haW5TdGF0dXNCYXIuaW5zZXJ0QmVmb3JlKHRoaXMuaW5zcGVjdEVsZW1lbnRNb2RlQ29udHJv
bGxlci50b2dnbGVTZWFyY2hCdXR0b24uZWxlbWVudCwgYm90dG9tU3RhdHVzQmFyQ29udGFpbmVy
KTsKLQotICAgICAgICBtYWluU3RhdHVzQmFyLmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NDb250
cm9sbGVyLnN0YXR1c0Jhckl0ZW0pOwotICAgIH0sCi0KLSAgICBfdG9nZ2xlQ29uc29sZUJ1dHRv
bkNsaWNrZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fdG9nZ2xlQ29u
c29sZUJ1dHRvbi5lbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhp
cy5fdG9nZ2xlQ29uc29sZUJ1dHRvbi50b2dnbGVkID0gIXRoaXMuX3RvZ2dsZUNvbnNvbGVCdXR0
b24udG9nZ2xlZDsKLQotICAgICAgICB2YXIgYW5pbWF0aW9uVHlwZSA9IHdpbmRvdy5ldmVudCAm
JiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyBXZWJJbnNwZWN0b3IuRHJhd2VyLkFuaW1hdGlvblR5
cGUuU2xvdyA6IFdlYkluc3BlY3Rvci5EcmF3ZXIuQW5pbWF0aW9uVHlwZS5Ob3JtYWw7Ci0gICAg
ICAgIGlmICh0aGlzLl90b2dnbGVDb25zb2xlQnV0dG9uLnRvZ2dsZWQpIHsKLSAgICAgICAgICAg
IHRoaXMuX3RvZ2dsZUNvbnNvbGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkhpZGUgY29uc29sZS4iKTsKLSAgICAgICAgICAgIHRoaXMuZHJhd2VyLnNob3codGhpcy5jb25z
b2xlVmlldywgYW5pbWF0aW9uVHlwZSk7Ci0gICAgICAgICAgICB0aGlzLl9jb25zb2xlV2FzU2hv
d24gPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ29u
c29sZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBjb25zb2xlLiIp
OwotICAgICAgICAgICAgdGhpcy5kcmF3ZXIuaGlkZShhbmltYXRpb25UeXBlKTsKLSAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9jb25zb2xlV2FzU2hvd247Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSBzdGF0dXNCYXJFbGVtZW50Ci0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVmlld30gdmlldwotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24o
KT19IG9uY2xvc2UKLSAgICAgKi8KLSAgICBzaG93Vmlld0luRHJhd2VyOiBmdW5jdGlvbihzdGF0
dXNCYXJFbGVtZW50LCB2aWV3LCBvbmNsb3NlKQotICAgIHsKLSAgICAgICAgdGhpcy5fdG9nZ2xl
Q29uc29sZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSGlkZSBjb25zb2xl
LiIpOwotICAgICAgICB0aGlzLl90b2dnbGVDb25zb2xlQnV0dG9uLnRvZ2dsZWQgPSBmYWxzZTsK
LSAgICAgICAgdGhpcy5fY2xvc2VQcmV2aW91c0RyYXdlclZpZXcoKTsKLQotICAgICAgICB2YXIg
ZHJhd2VyU3RhdHVzQmFySGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgICAgIGRyYXdlclN0YXR1c0JhckhlYWRlci5jbGFzc05hbWUgPSAiZHJhd2VyLWhlYWRlciBz
dGF0dXMtYmFyLWl0ZW0iOwotICAgICAgICBkcmF3ZXJTdGF0dXNCYXJIZWFkZXIuYXBwZW5kQ2hp
bGQoc3RhdHVzQmFyRWxlbWVudCk7Ci0gICAgICAgIGRyYXdlclN0YXR1c0JhckhlYWRlci5vbmNs
b3NlID0gb25jbG9zZTsKLQotICAgICAgICB2YXIgY2xvc2VCdXR0b24gPSBkcmF3ZXJTdGF0dXNC
YXJIZWFkZXIuY3JlYXRlQ2hpbGQoInNwYW4iKTsKLSAgICAgICAgY2xvc2VCdXR0b24udGV4dENv
bnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlx1MDBENyIpOwotICAgICAgICBjbG9zZUJ1
dHRvbi5hZGRTdHlsZUNsYXNzKCJkcmF3ZXItaGVhZGVyLWNsb3NlLWJ1dHRvbiIpOwotICAgICAg
ICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuY2xvc2VWaWV3SW5E
cmF3ZXIuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgICAgIHZhciBwYW5lbFN0YXR1c0JhciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYW5lbC1zdGF0dXMtYmFyIik7Ci0gICAgICAgIHZh
ciBkcmF3ZXJWaWV3QW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlci12aWV3
LWFuY2hvciIpOwotICAgICAgICBwYW5lbFN0YXR1c0Jhci5pbnNlcnRCZWZvcmUoZHJhd2VyU3Rh
dHVzQmFySGVhZGVyLCBkcmF3ZXJWaWV3QW5jaG9yKTsKLSAgICAgICAgdGhpcy5fZHJhd2VyU3Rh
dHVzQmFySGVhZGVyID0gZHJhd2VyU3RhdHVzQmFySGVhZGVyOwotICAgICAgICB0aGlzLmRyYXdl
ci5zaG93KHZpZXcsIFdlYkluc3BlY3Rvci5EcmF3ZXIuQW5pbWF0aW9uVHlwZS5JbW1lZGlhdGVs
eSk7Ci0gICAgfSwKLQotICAgIGNsb3NlVmlld0luRHJhd2VyOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fZHJhd2VyU3RhdHVzQmFySGVhZGVyKSB7Ci0gICAgICAgICAgICB0
aGlzLl9jbG9zZVByZXZpb3VzRHJhd2VyVmlldygpOwotCi0gICAgICAgICAgICAvLyBPbmNlIGRy
YXdlciBpcyBjbG9zZWQgY29uc29sZSBzaG91bGQgYmUgc2hvd24gaWYgaXQgd2FzIHNob3duIGJl
Zm9yZSBjdXJyZW50IHZpZXcgcmVwbGFjZWQgaXQgaW4gZHJhd2VyLiAKLSAgICAgICAgICAgIGlm
ICghdGhpcy5fY29uc29sZVdhc1Nob3duKQotICAgICAgICAgICAgICAgIHRoaXMuZHJhd2VyLmhp
ZGUoV2ViSW5zcGVjdG9yLkRyYXdlci5BbmltYXRpb25UeXBlLkltbWVkaWF0ZWx5KTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVDb25zb2xlQnV0dG9uQ2xp
Y2tlZCgpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9jbG9zZVByZXZpb3VzRHJhd2VyVmll
dzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2RyYXdlclN0YXR1c0Jhckhl
YWRlcikgewotICAgICAgICAgICAgdGhpcy5fZHJhd2VyU3RhdHVzQmFySGVhZGVyLnBhcmVudEVs
ZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZHJhd2VyU3RhdHVzQmFySGVhZGVyKTsKLSAgICAgICAg
ICAgIGlmICh0aGlzLl9kcmF3ZXJTdGF0dXNCYXJIZWFkZXIub25jbG9zZSkKLSAgICAgICAgICAg
ICAgICB0aGlzLl9kcmF3ZXJTdGF0dXNCYXJIZWFkZXIub25jbG9zZSgpOwotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2RyYXdlclN0YXR1c0JhckhlYWRlcjsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICBfdXBkYXRlRXJyb3JBbmRXYXJuaW5nQ291bnRzOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgZXJyb3JXYXJuaW5nRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJl
cnJvci13YXJuaW5nLWNvdW50Iik7Ci0gICAgICAgIGlmICghZXJyb3JXYXJuaW5nRWxlbWVudCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgZXJyb3JzID0gV2ViSW5zcGVjdG9y
LmNvbnNvbGUuZXJyb3JzOwotICAgICAgICB2YXIgd2FybmluZ3MgPSBXZWJJbnNwZWN0b3IuY29u
c29sZS53YXJuaW5nczsKLSAgICAgICAgaWYgKCFlcnJvcnMgJiYgIXdhcm5pbmdzKSB7Ci0gICAg
ICAgICAgICBlcnJvcldhcm5pbmdFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhpZGRlbiIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZXJyb3JXYXJuaW5nRWxlbWVu
dC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLQotICAgICAgICBlcnJvcldhcm5pbmdFbGVt
ZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICAgICAgaWYgKGVycm9ycykgewotICAgICAgICAg
ICAgdmFyIGVycm9ySW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7
Ci0gICAgICAgICAgICBlcnJvckltYWdlRWxlbWVudC5pZCA9ICJlcnJvci1jb3VudC1pbWciOwot
ICAgICAgICAgICAgZXJyb3JXYXJuaW5nRWxlbWVudC5hcHBlbmRDaGlsZChlcnJvckltYWdlRWxl
bWVudCk7Ci0gICAgICAgICAgICB2YXIgZXJyb3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOwotICAgICAgICAgICAgZXJyb3JFbGVtZW50LmlkID0gImVycm9yLWNvdW50
IjsKLSAgICAgICAgICAgIGVycm9yRWxlbWVudC50ZXh0Q29udGVudCA9IGVycm9yczsKLSAgICAg
ICAgICAgIGVycm9yV2FybmluZ0VsZW1lbnQuYXBwZW5kQ2hpbGQoZXJyb3JFbGVtZW50KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh3YXJuaW5ncykgewotICAgICAgICAgICAgdmFyIHdhcm5p
bmdzSW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci0gICAgICAg
ICAgICB3YXJuaW5nc0ltYWdlRWxlbWVudC5pZCA9ICJ3YXJuaW5nLWNvdW50LWltZyI7Ci0gICAg
ICAgICAgICBlcnJvcldhcm5pbmdFbGVtZW50LmFwcGVuZENoaWxkKHdhcm5pbmdzSW1hZ2VFbGVt
ZW50KTsKLSAgICAgICAgICAgIHZhciB3YXJuaW5nc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICB3YXJuaW5nc0VsZW1lbnQuaWQgPSAid2Fybmlu
Zy1jb3VudCI7Ci0gICAgICAgICAgICB3YXJuaW5nc0VsZW1lbnQudGV4dENvbnRlbnQgPSB3YXJu
aW5nczsKLSAgICAgICAgICAgIGVycm9yV2FybmluZ0VsZW1lbnQuYXBwZW5kQ2hpbGQod2Fybmlu
Z3NFbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnJvcnMpIHsKLSAgICAgICAg
ICAgIGlmICh3YXJuaW5ncykgewotICAgICAgICAgICAgICAgIGlmIChlcnJvcnMgPT0gMSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAod2FybmluZ3MgPT0gMSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yV2FybmluZ0VsZW1lbnQudGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IiVkIGVycm9yLCAlZCB3YXJuaW5nIiwgZXJyb3JzLCB3YXJuaW5ncyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yV2FybmluZ0VsZW1lbnQu
dGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVkIGVycm9yLCAlZCB3YXJuaW5ncyIsIGVy
cm9ycywgd2FybmluZ3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2FybmluZ3MgPT0g
MSkKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JXYXJuaW5nRWxlbWVudC50aXRsZSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiJWQgZXJyb3JzLCAlZCB3YXJuaW5nIiwgZXJyb3JzLCB3YXJuaW5n
cyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlcnJvcldhcm5p
bmdFbGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBlcnJvcnMsICVkIHdh
cm5pbmdzIiwgZXJyb3JzLCB3YXJuaW5ncyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9y
cyA9PSAxKQotICAgICAgICAgICAgICAgIGVycm9yV2FybmluZ0VsZW1lbnQudGl0bGUgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIiVkIGVycm9yIiwgZXJyb3JzKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlcnJvcldhcm5pbmdFbGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIlZCBlcnJvcnMiLCBlcnJvcnMpOwotICAgICAgICB9IGVsc2UgaWYgKHdhcm5p
bmdzID09IDEpCi0gICAgICAgICAgICBlcnJvcldhcm5pbmdFbGVtZW50LnRpdGxlID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIlZCB3YXJuaW5nIiwgd2FybmluZ3MpOwotICAgICAgICBlbHNlIGlm
ICh3YXJuaW5ncykKLSAgICAgICAgICAgIGVycm9yV2FybmluZ0VsZW1lbnQudGl0bGUgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIiVkIHdhcm5pbmdzIiwgd2FybmluZ3MpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBlcnJvcldhcm5pbmdFbGVtZW50LnRpdGxlID0gbnVsbDsKLSAgICB9LAot
Ci0gICAgZ2V0IGluc3BlY3RlZFBhZ2VEb21haW4oKQotICAgIHsKLSAgICAgICAgdmFyIHBhcnNl
ZFVSTCA9IFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlVVJMICYmIFdlYkluc3BlY3Rvci5pbnNw
ZWN0ZWRQYWdlVVJMLmFzUGFyc2VkVVJMKCk7Ci0gICAgICAgIHJldHVybiBwYXJzZWRVUkwgPyBw
YXJzZWRVUkwuaG9zdCA6ICIiOwotICAgIH0sCi0KLSAgICBfaW5pdGlhbGl6ZUNhcGFiaWxpdHk6
IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBlcnJvciwgcmVzdWx0KQotICAgIHsKLSAgICAgICAg
Q2FwYWJpbGl0aWVzW25hbWVdID0gcmVzdWx0OwotICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAg
ICAgICAgICBjYWxsYmFjaygpOwotICAgIH0sCi0KLSAgICBfem9vbUluOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl96b29tTGV2ZWwgPSBNYXRoLm1pbih0aGlzLl96b29tTGV2ZWwg
KyAxLCBXZWJJbnNwZWN0b3IuWm9vbS5UYWJsZS5sZW5ndGggLSBXZWJJbnNwZWN0b3IuWm9vbS5E
ZWZhdWx0T2Zmc2V0IC0gMSk7Ci0gICAgICAgIHRoaXMuX3JlcXVlc3Rab29tKCk7Ci0gICAgfSwK
LQotICAgIF96b29tT3V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl96b29tTGV2
ZWwgPSBNYXRoLm1heCh0aGlzLl96b29tTGV2ZWwgLSAxLCAtV2ViSW5zcGVjdG9yLlpvb20uRGVm
YXVsdE9mZnNldCk7Ci0gICAgICAgIHRoaXMuX3JlcXVlc3Rab29tKCk7Ci0gICAgfSwKLQotICAg
IF9yZXNldFpvb206IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3pvb21MZXZlbCA9
IDA7Ci0gICAgICAgIHRoaXMuX3JlcXVlc3Rab29tKCk7Ci0gICAgfSwKLQotICAgIF9yZXF1ZXN0
Wm9vbTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnpv
b21MZXZlbC5zZXQodGhpcy5fem9vbUxldmVsKTsKLSAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5LCB6b29tTGV2ZWwgdGFrZXMgaW50ZWdlcnMgKHdpdGggMCBiZWluZyBkZWZh
dWx0IHpvb20pLgotICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl96b29tTGV2ZWwgKyBXZWJJbnNw
ZWN0b3IuWm9vbS5EZWZhdWx0T2Zmc2V0OwotICAgICAgICBpbmRleCA9IE1hdGgubWluKFdlYklu
c3BlY3Rvci5ab29tLlRhYmxlLmxlbmd0aCAtIDEsIGluZGV4KTsKLSAgICAgICAgaW5kZXggPSBN
YXRoLm1heCgwLCBpbmRleCk7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zZXRab29t
RmFjdG9yKFdlYkluc3BlY3Rvci5ab29tLlRhYmxlW2luZGV4XSk7Ci0gICAgfSwKLQotICAgIF9k
ZWJ1Z2dlclBhdXNlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIHNjcmlw
dHMgcGFuZWwgdXBvbiBkZW1hbmQuCi0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbCgic2NyaXB0
cyIpOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkV2ZW50cyA9IHsKLSAgICBJbnNwZWN0b3JM
b2FkZWQ6ICJJbnNwZWN0b3JMb2FkZWQiLAotICAgIEluc3BlY3RvckNsb3Npbmc6ICJJbnNwZWN0
b3JDbG9zaW5nIgotfQotCi17KGZ1bmN0aW9uIHBhcnNlUXVlcnlQYXJhbWV0ZXJzKCkKLXsKLSAg
ICBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QgPSB7fTsKLSAgICB2YXIgcXVlcnlQYXJh
bXMgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOwotICAgIGlmICghcXVlcnlQYXJhbXMpCi0gICAg
ICAgIHJldHVybjsKLSAgICB2YXIgcGFyYW1zID0gcXVlcnlQYXJhbXMuc3Vic3RyaW5nKDEpLnNw
bGl0KCImIik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgdmFyIHBhaXIgPSBwYXJhbXNbaV0uc3BsaXQoIj0iKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0W3BhaXJbMF1dID0gcGFpclsxXTsKLSAgICB9Ci19KSgp
O30KLQotV2ViSW5zcGVjdG9yLnN1Z2dlc3RSZWxvYWQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYg
KHdpbmRvdy5jb25maXJtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiSXQgaXMgcmVjb21tZW5kZWQg
dG8gcmVzdGFydCBpbnNwZWN0b3IgYWZ0ZXIgbWFraW5nIHRoZXNlIGNoYW5nZXMuIFdvdWxkIHlv
dSBsaWtlIHRvIHJlc3RhcnQgaXQ/IikpKQotICAgICAgICB0aGlzLnJlbG9hZCgpOwotfQotCi1X
ZWJJbnNwZWN0b3IucmVsb2FkID0gZnVuY3Rpb24oKQotewotICAgIHZhciBxdWVyeVBhcmFtcyA9
IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7Ci0gICAgdmFyIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5o
cmVmOwotICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxlbmd0aCAtIHF1ZXJ5UGFyYW1z
Lmxlbmd0aCk7Ci0gICAgdmFyIHF1ZXJ5UGFyYW1zT2JqZWN0ID0ge307Ci0gICAgZm9yICh2YXIg
bmFtZSBpbiBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QpCi0gICAgICAgIHF1ZXJ5UGFy
YW1zT2JqZWN0W25hbWVdID0gV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0W25hbWVdOwot
ICAgIGlmICh0aGlzLmRvY2tDb250cm9sbGVyKQotICAgICAgICBxdWVyeVBhcmFtc09iamVjdFsi
ZG9ja1NpZGUiXSA9IHRoaXMuZG9ja0NvbnRyb2xsZXIuZG9ja1NpZGUoKTsKLSAgICB2YXIgbmFt
ZXMgPSBPYmplY3Qua2V5cyhxdWVyeVBhcmFtc09iamVjdCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkKLSAgICAgICAgdXJsICs9IChpID8gIiYiIDogIj8iKSAr
IG5hbWVzW2ldICsgIj0iICsgcXVlcnlQYXJhbXNPYmplY3RbbmFtZXNbaV1dOwotCi0gICAgSW5z
cGVjdG9yQmFja2VuZC5kaXNjb25uZWN0KCk7Ci0gICAgZG9jdW1lbnQubG9jYXRpb24gPSB1cmw7
Ci19Ci0KLVdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCi17Ci0gICAgSW5zcGVjdG9y
QmFja2VuZC5sb2FkRnJvbUpTT05JZk5lZWRlZCgiLi4vSW5zcGVjdG9yLmpzb24iKTsKLSAgICBX
ZWJJbnNwZWN0b3IuZG9ja0NvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRvY2tDb250cm9s
bGVyKCk7Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLldvcmtlck1hbmFnZXIuaXNEZWRpY2F0ZWRX
b3JrZXJGcm9udGVuZCgpKSB7Ci0gICAgICAgIC8vIERvIG5vdCBjcmVhdGUgc29ja2V0IGZvciB0
aGUgd29ya2VyIGZyb250LWVuZC4KLSAgICAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIHdzOwotICAgIGlmICgid3MiIGlu
IFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdCkKLSAgICAgICAgd3MgPSAid3M6Ly8iICsg
V2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LndzOwotICAgIGVsc2UgaWYgKCJwYWdlIiBp
biBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QpIHsKLSAgICAgICAgdmFyIHBhZ2UgPSBX
ZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QucGFnZTsKLSAgICAgICAgdmFyIGhvc3QgPSAi
aG9zdCIgaW4gV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0ID8gV2ViSW5zcGVjdG9yLnF1
ZXJ5UGFyYW1zT2JqZWN0Lmhvc3QgOiB3aW5kb3cubG9jYXRpb24uaG9zdDsKLSAgICAgICAgd3Mg
PSAid3M6Ly8iICsgaG9zdCArICIvZGV2dG9vbHMvcGFnZS8iICsgcGFnZTsKLSAgICB9Ci0KLSAg
ICBpZiAod3MpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQo
d3MpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1l
c3NhZ2UpIHsgSW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaChtZXNzYWdlLmRhdGEpOyB9Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5zb2NrZXQub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7IGNvbnNv
bGUuZXJyb3IoZXJyb3IpOyB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zb2NrZXQub25vcGVuID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQgPSBXZWJJbnNwZWN0b3Iuc29ja2V0LnNlbmQuYmluZChXZWJJbnNwZWN0b3Iu
c29ja2V0KTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKLSAgICAg
ICAgfQotICAgICAgICBXZWJJbnNwZWN0b3Iuc29ja2V0Lm9uY2xvc2UgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnNvY2tldC5fZGV0YWNoUmVhc29uKQotICAg
ICAgICAgICAgICAgIChuZXcgV2ViSW5zcGVjdG9yLlJlbW90ZURlYnVnZ2luZ1Rlcm1pbmF0ZWRT
Y3JlZW4oIndlYnNvY2tldF9jbG9zZWQiKSkuc2hvd01vZGFsKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKLQot
ICAgIC8vIEluIGNhc2Ugb2YgbG9hZGluZyBhcyBhIHdlYiBwYWdlIHdpdGggbm8gYmluZGluZ3Mg
LyBoYXJuZXNzLCBraWNrIG9mZiBpbml0aWFsaXphdGlvbiBtYW51YWxseS4KLSAgICBpZiAoSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlzU3R1YikgewotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQ
SS5kaXNwYXRjaFF1ZXJ5UGFyYW1ldGVycygpOwotICAgICAgICBXZWJJbnNwZWN0b3IuX2RvTG9h
ZGVkRG9uZVdpdGhDYXBhYmlsaXRpZXMoKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5kb0xv
YWRlZERvbmUgPSBmdW5jdGlvbigpCi17Ci0gICAgLy8gSW5zdGFsbCBzdHlsZXMgYW5kIHRoZW1l
cwotICAgIFdlYkluc3BlY3Rvci5pbnN0YWxsUG9ydFN0eWxlcygpOwotICAgIGlmIChXZWJJbnNw
ZWN0b3Iuc29ja2V0KQotICAgICAgICBkb2N1bWVudC5ib2R5LmFkZFN0eWxlQ2xhc3MoInJlbW90
ZSIpOwotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdC50b29sYmFyQ29s
b3IgJiYgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LnRleHRDb2xvcikKLSAgICAgICAg
V2ViSW5zcGVjdG9yLnNldFRvb2xiYXJDb2xvcnMoV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2Jq
ZWN0LnRvb2xiYXJDb2xvciwgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LnRleHRDb2xv
cik7Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZGVkKCk7Ci0gICAgV2ViSW5zcGVj
dG9yLldvcmtlck1hbmFnZXIubG9hZGVkKCk7Ci0KLSAgICBEZWJ1Z2dlckFnZW50LmNhdXNlc1Jl
Y29tcGlsYXRpb24oV2ViSW5zcGVjdG9yLl9pbml0aWFsaXplQ2FwYWJpbGl0eS5iaW5kKFdlYklu
c3BlY3RvciwgImRlYnVnZ2VyQ2F1c2VzUmVjb21waWxhdGlvbiIsIG51bGwpKTsKLSAgICBEZWJ1
Z2dlckFnZW50LnN1cHBvcnRzU2VwYXJhdGVTY3JpcHRDb21waWxhdGlvbkFuZEV4ZWN1dGlvbihX
ZWJJbnNwZWN0b3IuX2luaXRpYWxpemVDYXBhYmlsaXR5LmJpbmQoV2ViSW5zcGVjdG9yLCAic2Vw
YXJhdGVTY3JpcHRDb21waWxhdGlvbkFuZEV4ZWN1dGlvbkVuYWJsZWQiLCBudWxsKSk7Ci0gICAg
UHJvZmlsZXJBZ2VudC5jYXVzZXNSZWNvbXBpbGF0aW9uKFdlYkluc3BlY3Rvci5faW5pdGlhbGl6
ZUNhcGFiaWxpdHkuYmluZChXZWJJbnNwZWN0b3IsICJwcm9maWxlckNhdXNlc1JlY29tcGlsYXRp
b24iLCBudWxsKSk7Ci0gICAgUHJvZmlsZXJBZ2VudC5pc1NhbXBsaW5nKFdlYkluc3BlY3Rvci5f
aW5pdGlhbGl6ZUNhcGFiaWxpdHkuYmluZChXZWJJbnNwZWN0b3IsICJzYW1wbGluZ0NQVVByb2Zp
bGVyIiwgbnVsbCkpOwotICAgIEhlYXBQcm9maWxlckFnZW50Lmhhc0hlYXBQcm9maWxlcihXZWJJ
bnNwZWN0b3IuX2luaXRpYWxpemVDYXBhYmlsaXR5LmJpbmQoV2ViSW5zcGVjdG9yLCAiaGVhcFBy
b2ZpbGVyUHJlc2VudCIsIG51bGwpKTsKLSAgICBUaW1lbGluZUFnZW50LnN1cHBvcnRzRnJhbWVJ
bnN0cnVtZW50YXRpb24oV2ViSW5zcGVjdG9yLl9pbml0aWFsaXplQ2FwYWJpbGl0eS5iaW5kKFdl
Ykluc3BlY3RvciwgInRpbWVsaW5lU3VwcG9ydHNGcmFtZUluc3RydW1lbnRhdGlvbiIsIG51bGwp
KTsKLSAgICBUaW1lbGluZUFnZW50LmNhbk1vbml0b3JNYWluVGhyZWFkKFdlYkluc3BlY3Rvci5f
aW5pdGlhbGl6ZUNhcGFiaWxpdHkuYmluZChXZWJJbnNwZWN0b3IsICJ0aW1lbGluZUNhbk1vbml0
b3JNYWluVGhyZWFkIiwgbnVsbCkpOwotICAgIFBhZ2VBZ2VudC5jYW5TaG93RGVidWdCb3JkZXJz
KFdlYkluc3BlY3Rvci5faW5pdGlhbGl6ZUNhcGFiaWxpdHkuYmluZChXZWJJbnNwZWN0b3IsICJj
YW5TaG93RGVidWdCb3JkZXJzIiwgbnVsbCkpOwotICAgIFBhZ2VBZ2VudC5jYW5TaG93RlBTQ291
bnRlcihXZWJJbnNwZWN0b3IuX2luaXRpYWxpemVDYXBhYmlsaXR5LmJpbmQoV2ViSW5zcGVjdG9y
LCAiY2FuU2hvd0ZQU0NvdW50ZXIiLCBudWxsKSk7Ci0gICAgUGFnZUFnZW50LmNhbkNvbnRpbnVv
dXNseVBhaW50KFdlYkluc3BlY3Rvci5faW5pdGlhbGl6ZUNhcGFiaWxpdHkuYmluZChXZWJJbnNw
ZWN0b3IsICJjYW5Db250aW51b3VzbHlQYWludCIsIG51bGwpKTsKLSAgICBQYWdlQWdlbnQuY2Fu
T3ZlcnJpZGVEZXZpY2VNZXRyaWNzKFdlYkluc3BlY3Rvci5faW5pdGlhbGl6ZUNhcGFiaWxpdHku
YmluZChXZWJJbnNwZWN0b3IsICJjYW5PdmVycmlkZURldmljZU1ldHJpY3MiLCBudWxsKSk7Ci0g
ICAgUGFnZUFnZW50LmNhbk92ZXJyaWRlR2VvbG9jYXRpb24oV2ViSW5zcGVjdG9yLl9pbml0aWFs
aXplQ2FwYWJpbGl0eS5iaW5kKFdlYkluc3BlY3RvciwgImNhbk92ZXJyaWRlR2VvbG9jYXRpb24i
LCBudWxsKSk7Ci0gICAgV29ya2VyQWdlbnQuY2FuSW5zcGVjdFdvcmtlcnMoV2ViSW5zcGVjdG9y
Ll9pbml0aWFsaXplQ2FwYWJpbGl0eS5iaW5kKFdlYkluc3BlY3RvciwgImNhbkluc3BlY3RXb3Jr
ZXJzIiwgbnVsbCkpOwotICAgIFBhZ2VBZ2VudC5jYW5PdmVycmlkZURldmljZU9yaWVudGF0aW9u
KFdlYkluc3BlY3Rvci5faW5pdGlhbGl6ZUNhcGFiaWxpdHkuYmluZChXZWJJbnNwZWN0b3IsICJj
YW5PdmVycmlkZURldmljZU9yaWVudGF0aW9uIiwgV2ViSW5zcGVjdG9yLl9kb0xvYWRlZERvbmVX
aXRoQ2FwYWJpbGl0aWVzLmJpbmQoV2ViSW5zcGVjdG9yKSkpOwotfQotCi1XZWJJbnNwZWN0b3Iu
X2RvTG9hZGVkRG9uZVdpdGhDYXBhYmlsaXRpZXMgPSBmdW5jdGlvbigpCi17Ci0gICAgbmV3IFdl
Ykluc3BlY3Rvci5WZXJzaW9uQ29udHJvbGxlcigpLnVwZGF0ZVZlcnNpb24oKTsKLQotICAgIFdl
Ykluc3BlY3Rvci5zaG9ydGN1dHNTY3JlZW4gPSBuZXcgV2ViSW5zcGVjdG9yLlNob3J0Y3V0c1Nj
cmVlbigpOwotICAgIHRoaXMuX3JlZ2lzdGVyU2hvcnRjdXRzKCk7Ci0KLSAgICAvLyBzZXQgb3Jk
ZXIgb2Ygc29tZSBzZWN0aW9ucyBleHBsaWNpdGx5Ci0gICAgV2ViSW5zcGVjdG9yLnNob3J0Y3V0
c1NjcmVlbi5zZWN0aW9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc29sZSIpKTsKLSAgICBX
ZWJJbnNwZWN0b3Iuc2hvcnRjdXRzU2NyZWVuLnNlY3Rpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJFbGVtZW50cyBQYW5lbCIpKTsKLQotICAgIHZhciBwYW5lbERlc2NyaXB0b3JzID0gdGhpcy5f
cGFuZWxEZXNjcmlwdG9ycygpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxEZXNjcmlw
dG9ycy5sZW5ndGg7ICsraSkKLSAgICAgICAgcGFuZWxEZXNjcmlwdG9yc1tpXS5yZWdpc3RlclNo
b3J0Y3V0cygpOwotCi0gICAgdGhpcy5jb25zb2xlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xl
TW9kZWwoKTsKLSAgICB0aGlzLmNvbnNvbGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
Q29uc29sZU1vZGVsLkV2ZW50cy5Db25zb2xlQ2xlYXJlZCwgdGhpcy5fdXBkYXRlRXJyb3JBbmRX
YXJuaW5nQ291bnRzLCB0aGlzKTsKLSAgICB0aGlzLmNvbnNvbGUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQ29uc29sZU1vZGVsLkV2ZW50cy5NZXNzYWdlQWRkZWQsIHRoaXMuX3VwZGF0
ZUVycm9yQW5kV2FybmluZ0NvdW50cywgdGhpcyk7Ci0gICAgdGhpcy5jb25zb2xlLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNvbnNvbGVNb2RlbC5FdmVudHMuUmVwZWF0Q291bnRVcGRh
dGVkLCB0aGlzLl91cGRhdGVFcnJvckFuZFdhcm5pbmdDb3VudHMsIHRoaXMpOwotCi0gICAgV2Vi
SW5zcGVjdG9yLkNTU01ldGFkYXRhLnJlcXVlc3RDU1NTaG9ydGhhbmREYXRhKCk7Ci0KLSAgICB0
aGlzLmRyYXdlciA9IG5ldyBXZWJJbnNwZWN0b3IuRHJhd2VyKCk7Ci0KLSAgICB0aGlzLm5ldHdv
cmtNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5OZXR3b3JrTWFuYWdlcigpOwotICAgIHRoaXMu
cmVzb3VyY2VUcmVlTW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsKHRo
aXMubmV0d29ya01hbmFnZXIpOwotICAgIHRoaXMuZGVidWdnZXJNb2RlbCA9IG5ldyBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNb2RlbCgpOwotICAgIHRoaXMuZGVidWdnZXJNb2RlbC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCwg
dGhpcy5fZGVidWdnZXJQYXVzZWQsIHRoaXMpOwotICAgIHRoaXMubmV0d29ya0xvZyA9IG5ldyBX
ZWJJbnNwZWN0b3IuTmV0d29ya0xvZygpOwotICAgIHRoaXMuZG9tQWdlbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLkRPTUFnZW50KCk7Ci0gICAgdGhpcy5ydW50aW1lTW9kZWwgPSBuZXcgV2ViSW5zcGVj
dG9yLlJ1bnRpbWVNb2RlbCh0aGlzLnJlc291cmNlVHJlZU1vZGVsKTsKLQotICAgIHRoaXMuY29u
c29sZVZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3KFdlYkluc3BlY3Rvci5Xb3Jr
ZXJNYW5hZ2VyLmlzV29ya2VyRnJvbnRlbmQoKSk7Ci0KLSAgICBJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVySW5zcGVjdG9yRGlzcGF0Y2hlcih0aGlzKTsKLQotICAgIHRoaXMuaXNvbGF0ZWRGaWxl
U3lzdGVtTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdl
cigpOwotICAgIHRoaXMuaXNvbGF0ZWRGaWxlU3lzdGVtRGlzcGF0Y2hlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuSXNvbGF0ZWRGaWxlU3lzdGVtRGlzcGF0Y2hlcih0aGlzLmlzb2xhdGVkRmlsZVN5c3Rl
bU1hbmFnZXIpOwotICAgIHRoaXMuZmlsZU1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLkZpbGVN
YXBwaW5nKCk7Ci0gICAgdGhpcy53b3Jrc3BhY2UgPSBuZXcgV2ViSW5zcGVjdG9yLldvcmtzcGFj
ZSh0aGlzLmZpbGVNYXBwaW5nLCB0aGlzLmlzb2xhdGVkRmlsZVN5c3RlbU1hbmFnZXIubWFwcGlu
ZygpKTsKLQotICAgIHRoaXMuY3NzTW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwodGhpcy53b3Jrc3BhY2UpOwotICAgIHRoaXMudGltZWxpbmVNYW5hZ2VyID0gbmV3IFdlYklu
c3BlY3Rvci5UaW1lbGluZU1hbmFnZXIoKTsKLSAgICB0aGlzLnVzZXJBZ2VudFN1cHBvcnQgPSBu
ZXcgV2ViSW5zcGVjdG9yLlVzZXJBZ2VudFN1cHBvcnQoKTsKLQotICAgIHRoaXMuc2VhcmNoQ29u
dHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlcigpOwotICAgIHRoaXMu
YWR2YW5jZWRTZWFyY2hDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5BZHZhbmNlZFNlYXJj
aENvbnRyb2xsZXIoKTsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5Xb3JrZXJNYW5hZ2VyLmlzV29y
a2VyRnJvbnRlbmQoKSkKLSAgICAgICAgdGhpcy5pbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVy
ID0gbmV3IFdlYkluc3BlY3Rvci5JbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyKCk7Ci0KLSAg
ICB0aGlzLnNldHRpbmdzQ29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZ3NDb250
cm9sbGVyKCk7Ci0KLSAgICB0aGlzLmRvbUJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBuZXcgV2Vi
SW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUoKTsKLQotICAgIHRoaXMuX3pvb21M
ZXZlbCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy56b29tTGV2ZWwuZ2V0KCk7Ci0gICAgaWYgKHRo
aXMuX3pvb21MZXZlbCkKLSAgICAgICAgdGhpcy5fcmVxdWVzdFpvb20oKTsKLQotICAgIHZhciBh
dXRvc2VsZWN0UGFuZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoImEgcGFuZWwgY2hvc2VuIGF1
dG9tYXRpY2FsbHkiKTsKLSAgICB2YXIgb3BlbkFuY2hvckxvY2F0aW9uU2V0dGluZyA9IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKCJvcGVuTGlua0hhbmRsZXIiLCBhdXRvc2Vs
ZWN0UGFuZWwpOwotICAgIHRoaXMub3BlbkFuY2hvckxvY2F0aW9uUmVnaXN0cnkgPSBuZXcgV2Vi
SW5zcGVjdG9yLkhhbmRsZXJSZWdpc3RyeShvcGVuQW5jaG9yTG9jYXRpb25TZXR0aW5nKTsKLSAg
ICB0aGlzLm9wZW5BbmNob3JMb2NhdGlvblJlZ2lzdHJ5LnJlZ2lzdGVySGFuZGxlcihhdXRvc2Vs
ZWN0UGFuZWwsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0pOwotCi0gICAgdGhpcy53b3Jr
c3BhY2VDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5Xb3Jrc3BhY2VDb250cm9sbGVyKHRo
aXMud29ya3NwYWNlKTsKLQotICAgIHRoaXMuZmlsZVN5c3RlbVdvcmtzcGFjZVByb3ZpZGVyID0g
bmV3IFdlYkluc3BlY3Rvci5GaWxlU3lzdGVtV29ya3NwYWNlUHJvdmlkZXIodGhpcy5pc29sYXRl
ZEZpbGVTeXN0ZW1NYW5hZ2VyLCB0aGlzLndvcmtzcGFjZSk7Ci0KLSAgICB0aGlzLm5ldHdvcmtX
b3Jrc3BhY2VQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2ltcGxlV29ya3NwYWNlUHJvdmlk
ZXIodGhpcy53b3Jrc3BhY2UsIFdlYkluc3BlY3Rvci5wcm9qZWN0VHlwZXMuTmV0d29yayk7Ci0g
ICAgbmV3IFdlYkluc3BlY3Rvci5OZXR3b3JrVUlTb3VyY2VDb2RlUHJvdmlkZXIodGhpcy5uZXR3
b3JrV29ya3NwYWNlUHJvdmlkZXIsIHRoaXMud29ya3NwYWNlKTsKLQotICAgIHRoaXMuYnJlYWtw
b2ludE1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyKFdlYkluc3Bl
Y3Rvci5zZXR0aW5ncy5icmVha3BvaW50cywgdGhpcy5kZWJ1Z2dlck1vZGVsLCB0aGlzLndvcmtz
cGFjZSk7Ci0KLSAgICB0aGlzLnNjcmlwdFNuaXBwZXRNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3Iu
U2NyaXB0U25pcHBldE1vZGVsKHRoaXMud29ya3NwYWNlKTsKLQotICAgIG5ldyBXZWJJbnNwZWN0
b3IuRGVidWdnZXJTY3JpcHRNYXBwaW5nKHRoaXMud29ya3NwYWNlLCB0aGlzLm5ldHdvcmtXb3Jr
c3BhY2VQcm92aWRlcik7Ci0gICAgdGhpcy5saXZlRWRpdFN1cHBvcnQgPSBuZXcgV2ViSW5zcGVj
dG9yLkxpdmVFZGl0U3VwcG9ydCh0aGlzLndvcmtzcGFjZSk7Ci0gICAgdGhpcy5zdHlsZUNvbnRl
bnRCaW5kaW5nID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZUNvbnRlbnRCaW5kaW5nKHRoaXMuY3Nz
TW9kZWwsIHRoaXMud29ya3NwYWNlKTsKLSAgICBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlc1NvdXJj
ZU1hcHBpbmcodGhpcy5jc3NNb2RlbCwgdGhpcy53b3Jrc3BhY2UpOwotICAgIGlmIChXZWJJbnNw
ZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5zYXNzLmlzRW5hYmxlZCgpKQotICAgICAgICBuZXcg
V2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKHRoaXMuY3NzTW9kZWwsIHRoaXMud29ya3Nw
YWNlLCB0aGlzLm5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcik7Ci0KLSAgICBuZXcgV2ViSW5zcGVj
dG9yLlByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlSGVscGVyKHRoaXMud29ya3NwYWNlKTsKLQot
ICAgIHRoaXMuX2NyZWF0ZUdsb2JhbFN0YXR1c0Jhckl0ZW1zKCk7Ci0KLSAgICB0aGlzLnRvb2xi
YXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRvb2xiYXIoKTsKLSAgICBXZWJJbnNwZWN0b3Iuc3RhcnRC
YXRjaFVwZGF0ZSgpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxEZXNjcmlwdG9ycy5s
ZW5ndGg7ICsraSkKLSAgICAgICAgV2ViSW5zcGVjdG9yLmluc3BlY3RvclZpZXcuYWRkUGFuZWwo
cGFuZWxEZXNjcmlwdG9yc1tpXSk7Ci0gICAgV2ViSW5zcGVjdG9yLmVuZEJhdGNoVXBkYXRlKCk7
Ci0KLSAgICB0aGlzLmFkZE1haW5FdmVudExpc3RlbmVycyhkb2N1bWVudCk7Ci0KLSAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy53aW5kb3dSZXNpemUuYmluZCh0aGlz
KSwgdHJ1ZSk7Ci0KLSAgICB2YXIgZXJyb3JXYXJuaW5nQ291bnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZXJyb3Itd2FybmluZy1jb3VudCIpOwotICAgIGVycm9yV2FybmluZ0NvdW50LmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5zaG93Q29uc29sZS5iaW5kKHRoaXMpLCBmYWxz
ZSk7Ci0gICAgdGhpcy5fdXBkYXRlRXJyb3JBbmRXYXJuaW5nQ291bnRzKCk7Ci0KLSAgICB0aGlz
LmV4dGVuc2lvblNlcnZlci5pbml0RXh0ZW5zaW9ucygpOwotCi0gICAgdGhpcy5jb25zb2xlLmVu
YWJsZUFnZW50KCk7Ci0KLSAgICBmdW5jdGlvbiBzaG93SW5pdGlhbFBhbmVsKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmluc3BlY3RvclZpZXcuY3VycmVudFBhbmVsKCkpCi0g
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5s
YXN0QWN0aXZlUGFuZWwuZ2V0KCkpOwotICAgIH0KLQotICAgIEluc3BlY3RvckFnZW50LmVuYWJs
ZShzaG93SW5pdGlhbFBhbmVsKTsKLSAgICB0aGlzLmRhdGFiYXNlTW9kZWwgPSBuZXcgV2ViSW5z
cGVjdG9yLkRhdGFiYXNlTW9kZWwoKTsKLSAgICB0aGlzLmRvbVN0b3JhZ2VNb2RlbCA9IG5ldyBX
ZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU1vZGVsKCk7Ci0KLSAgICBpZiAoIUNhcGFiaWxpdGllcy5w
cm9maWxlckNhdXNlc1JlY29tcGlsYXRpb24gfHwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLnByb2Zp
bGVyRW5hYmxlZC5nZXQoKSkKLSAgICAgICAgUHJvZmlsZXJBZ2VudC5lbmFibGUoKTsKLQotICAg
IGlmIChXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd1BhaW50UmVjdHMuZ2V0KCkpCi0gICAgICAg
IFBhZ2VBZ2VudC5zZXRTaG93UGFpbnRSZWN0cyh0cnVlKTsKLQotICAgIGlmIChXZWJJbnNwZWN0
b3Iuc2V0dGluZ3Muc2hvd0RlYnVnQm9yZGVycy5nZXQoKSkKLSAgICAgICAgUGFnZUFnZW50LnNl
dFNob3dEZWJ1Z0JvcmRlcnModHJ1ZSk7Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLnNldHRpbmdz
LmNvbnRpbnVvdXNQYWludGluZy5nZXQoKSkKLSAgICAgICAgUGFnZUFnZW50LnNldENvbnRpbnVv
dXNQYWludGluZ0VuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLnNldHRpbmdz
LmphdmFTY3JpcHREaXNhYmxlZC5nZXQoKSkKLSAgICAgICAgUGFnZUFnZW50LnNldFNjcmlwdEV4
ZWN1dGlvbkRpc2FibGVkKHRydWUpOwotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5z
aG93RlBTQ291bnRlci5nZXQoKSkKLSAgICAgICAgUGFnZUFnZW50LnNldFNob3dGUFNDb3VudGVy
KHRydWUpOwotCi0gICAgdGhpcy5kb21BZ2VudC5fZW11bGF0ZVRvdWNoRXZlbnRzQ2hhbmdlZCgp
OwotCi0gICAgV2ViSW5zcGVjdG9yLldvcmtlck1hbmFnZXIubG9hZENvbXBsZXRlZCgpOwotICAg
IEluc3BlY3RvckZyb250ZW5kQVBJLmxvYWRDb21wbGV0ZWQoKTsKLQotICAgIFdlYkluc3BlY3Rv
ci5ub3RpZmljYXRpb25zLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRXZl
bnRzLkluc3BlY3RvckxvYWRlZCk7Ci19Ci0KLXZhciB3aW5kb3dMb2FkZWQgPSBmdW5jdGlvbigp
Ci17Ci0gICAgdmFyIGxvY2FsaXplZFN0cmluZ3NVUkwgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
bG9jYWxpemVkU3RyaW5nc1VSTCgpOwotICAgIGlmIChsb2NhbGl6ZWRTdHJpbmdzVVJMKSB7Ci0g
ICAgICAgIHZhciBsb2NhbGl6ZWRTdHJpbmdzU2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNjcmlwdCIpOwotICAgICAgICBsb2NhbGl6ZWRTdHJpbmdzU2NyaXB0RWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgV2ViSW5zcGVjdG9yLmxvYWRlZC5iaW5kKFdlYklu
c3BlY3RvciksIGZhbHNlKTsKLSAgICAgICAgbG9jYWxpemVkU3RyaW5nc1NjcmlwdEVsZW1lbnQu
dHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwotICAgICAgICBsb2NhbGl6ZWRTdHJpbmdzU2NyaXB0
RWxlbWVudC5zcmMgPSBsb2NhbGl6ZWRTdHJpbmdzVVJMOwotICAgICAgICBkb2N1bWVudC5oZWFk
LmFwcGVuZENoaWxkKGxvY2FsaXplZFN0cmluZ3NTY3JpcHRFbGVtZW50KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgV2ViSW5zcGVjdG9yLmxvYWRlZCgpOwotCi0gICAgd2luZG93LnJlbW92ZUV2ZW50
TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCB3aW5kb3dMb2FkZWQsIGZhbHNlKTsKLSAgICBk
ZWxldGUgd2luZG93TG9hZGVkOwotfTsKLQotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNv
bnRlbnRMb2FkZWQiLCB3aW5kb3dMb2FkZWQsIGZhbHNlKTsKLQotLy8gV2UnZCBsaWtlIHRvIGVu
Zm9yY2UgYXN5bmNocm9ub3VzIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGluc3BlY3RvciBjb250
cm9sbGVyIGFuZCB0aGUgZnJvbnRlbmQuCi0vLyBJdCBpcyBuZWVkZWQgdG8gcHJldmVudCByZS1l
bnRlcmluZyB0aGUgYmFja2VuZCBjb2RlLgotLy8gQWxzbywgbmF0aXZlIGRpc3BhdGNoZXMgZG8g
bm90IGd1YXJhbnRlZSBzZXRUaW1lb3V0cyB0byBiZSBzZXJpYWxpemVkLCBzbyB3ZQotLy8gZW5m
b3JjZSBzZXJpYWxpemF0aW9uIHVzaW5nICdtZXNzYWdlc1RvRGlzcGF0Y2gnIHF1ZXVlLiBJdCBp
cyBhbHNvIGltcG9ydGFudCB0aGF0IEpTQyBkZWJ1Z2dlcgotLy8gdGVzdHMgcmVxdWlyZSB0aGF0
IGVhY2ggY29tbWFuZCB3YXMgZGlzcGF0Y2ggd2l0aGluIGluZGl2aWR1YWwgdGltZW91dCBjYWxs
YmFjaywgc28gd2UgZG9uJ3QgYmF0Y2ggdGhlbS4KLQotdmFyIG1lc3NhZ2VzVG9EaXNwYXRjaCA9
IFtdOwotCi1XZWJJbnNwZWN0b3IuZGlzcGF0Y2hRdWV1ZUlzRW1wdHkgPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gbWVzc2FnZXNUb0Rpc3BhdGNoLmxlbmd0aCA9PSAwOwotfQotCi1XZWJJbnNw
ZWN0b3IuZGlzcGF0Y2ggPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgbWVzc2FnZXNUb0Rpc3Bh
dGNoLnB1c2gobWVzc2FnZSk7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaChtZXNzYWdlc1RvRGlzcGF0Y2guc2hpZnQoKSk7Ci0g
ICAgfSwgMCk7Ci19Ci0KLVdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihldmVu
dCkKLXsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLmluc3BlY3RvclZpZXcpCi0gICAgICAgIFdlYklu
c3BlY3Rvci5pbnNwZWN0b3JWaWV3LmRvUmVzaXplKCk7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5k
cmF3ZXIpCi0gICAgICAgIFdlYkluc3BlY3Rvci5kcmF3ZXIucmVzaXplKCk7Ci0gICAgaWYgKFdl
Ykluc3BlY3Rvci50b29sYmFyKQotICAgICAgICBXZWJJbnNwZWN0b3IudG9vbGJhci5yZXNpemUo
KTsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLnNldHRpbmdzQ29udHJvbGxlcikKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLnNldHRpbmdzQ29udHJvbGxlci5yZXNpemUoKTsKLX0KLQotV2ViSW5zcGVjdG9y
LnNldERvY2tpbmdVbmF2YWlsYWJsZSA9IGZ1bmN0aW9uKHVuYXZhaWxhYmxlKQotewotICAgIGlm
ICh0aGlzLmRvY2tDb250cm9sbGVyKQotICAgICAgICB0aGlzLmRvY2tDb250cm9sbGVyLnNldERv
Y2tpbmdVbmF2YWlsYWJsZSh1bmF2YWlsYWJsZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5jbG9zZSA9
IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIGlmICh0aGlzLl9pc0Nsb3NpbmcpCi0gICAgICAgIHJl
dHVybjsKLSAgICB0aGlzLl9pc0Nsb3NpbmcgPSB0cnVlOwotICAgIHRoaXMubm90aWZpY2F0aW9u
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkV2ZW50cy5JbnNwZWN0b3JD
bG9zaW5nKTsKLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY2xvc2VXaW5kb3coKTsKLX0KLQot
V2ViSW5zcGVjdG9yLmRvY3VtZW50Q2xpY2sgPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICB2YXIg
YW5jaG9yID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoImEi
KTsKLSAgICBpZiAoIWFuY2hvciB8fCAoYW5jaG9yLnRhcmdldCA9PT0gIl9ibGFuayIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBQcmV2ZW50IHRoZSBsaW5rIGZyb20gbmF2aWdhdGluZywg
c2luY2Ugd2UgZG9uJ3QgZG8gYW55IG5hdmlnYXRpb24gYnkgZm9sbG93aW5nIGxpbmtzIG5vcm1h
bGx5LgotICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0KLSAgICBmdW5jdGlvbiBmb2xsb3dMaW5r
KCkKLSAgICB7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNCZWluZ0VkaXRlZChldmVudC50
YXJnZXQpIHx8IFdlYkluc3BlY3Rvci5fc2hvd0FuY2hvckxvY2F0aW9uKGFuY2hvcikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc3QgcHJvZmlsZU1hdGNoID0gV2ViSW5zcGVj
dG9yLlByb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLlByb2ZpbGVVUkxSZWdFeHAuZXhlYyhhbmNob3Iu
aHJlZik7Ci0gICAgICAgIGlmIChwcm9maWxlTWF0Y2gpIHsKLSAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5zaG93UGFuZWwoInByb2ZpbGVzIikuc2hvd1Byb2ZpbGUocHJvZmlsZU1hdGNoWzFdLCBw
cm9maWxlTWF0Y2hbMl0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIHBhcnNlZFVSTCA9IGFuY2hvci5ocmVmLmFzUGFyc2VkVVJMKCk7Ci0gICAgICAgIGlm
IChwYXJzZWRVUkwgJiYgcGFyc2VkVVJMLnNjaGVtZSA9PT0gIndlYmtpdC1saW5rLWFjdGlvbiIp
IHsKLSAgICAgICAgICAgIGlmIChwYXJzZWRVUkwuaG9zdCA9PT0gInNob3ctcGFuZWwiKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHBhbmVsID0gcGFyc2VkVVJMLnBhdGguc3Vic3RyaW5nKDEpOwot
ICAgICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWwocGFuZWwpKQotICAgICAgICAg
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKHBhbmVsKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEluc3BlY3RvckZyb250
ZW5kSG9zdC5vcGVuSW5OZXdUYWIoYW5jaG9yLmhyZWYpOwotICAgIH0KLQotICAgIGlmIChXZWJJ
bnNwZWN0b3IuZm9sbG93TGlua1RpbWVvdXQpCi0gICAgICAgIGNsZWFyVGltZW91dChXZWJJbnNw
ZWN0b3IuZm9sbG93TGlua1RpbWVvdXQpOwotCi0gICAgaWYgKGFuY2hvci5wcmV2ZW50Rm9sbG93
T25Eb3VibGVDbGljaykgewotICAgICAgICAvLyBTdGFydCBhIHRpbWVvdXQgaWYgdGhpcyBpcyB0
aGUgZmlyc3QgY2xpY2ssIGlmIHRoZSB0aW1lb3V0IGlzIGNhbmNlbGVkCi0gICAgICAgIC8vIGJl
Zm9yZSBpdCBmaXJlcywgdGhlbiBhIGRvdWJsZSBjbGlja2VkIGhhcHBlbmVkIG9yIGFub3RoZXIg
bGluayB3YXMgY2xpY2tlZC4KLSAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA9PT0gMSkKLSAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5mb2xsb3dMaW5rVGltZW91dCA9IHNldFRpbWVvdXQoZm9sbG93
TGluaywgMzMzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvbGxvd0xpbmsoKTsK
LX0KLQotV2ViSW5zcGVjdG9yLm9wZW5SZXNvdXJjZSA9IGZ1bmN0aW9uKHJlc291cmNlVVJMLCBp
blJlc291cmNlc1BhbmVsKQotewotICAgIHZhciByZXNvdXJjZSA9IFdlYkluc3BlY3Rvci5yZXNv
dXJjZUZvclVSTChyZXNvdXJjZVVSTCk7Ci0gICAgaWYgKGluUmVzb3VyY2VzUGFuZWwgJiYgcmVz
b3VyY2UpCi0gICAgICAgIFdlYkluc3BlY3Rvci5zaG93UGFuZWwoInJlc291cmNlcyIpLnNob3dS
ZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgZWxzZQotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3Qub3BlbkluTmV3VGFiKHJlc291cmNlVVJMKTsKLX0KLQotV2ViSW5zcGVjdG9yLl9yZWdpc3Rl
clNob3J0Y3V0cyA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgc2hvcnRjdXQgPSBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dDsKLSAgICB2YXIgc2VjdGlvbiA9IFdlYkluc3BlY3Rvci5zaG9y
dGN1dHNTY3JlZW4uc2VjdGlvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFsbCBQYW5lbHMiKSk7
Ci0gICAgdmFyIGtleXMgPSBbCi0gICAgICAgIHNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKCJbIiwg
c2hvcnRjdXQuTW9kaWZpZXJzLkN0cmxPck1ldGEpLAotICAgICAgICBzaG9ydGN1dC5tYWtlRGVz
Y3JpcHRvcigiXSIsIHNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsT3JNZXRhKQotICAgIF07Ci0gICAg
c2VjdGlvbi5hZGRSZWxhdGVkS2V5cyhrZXlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdvIHRv
IHRoZSBwYW5lbCB0byB0aGUgbGVmdC9yaWdodCIpKTsKLQotICAgIGtleXMgPSBbCi0gICAgICAg
IHNob3J0Y3V0Lm1ha2VEZXNjcmlwdG9yKCJbIiwgc2hvcnRjdXQuTW9kaWZpZXJzLkN0cmxPck1l
dGEgfCBzaG9ydGN1dC5Nb2RpZmllcnMuQWx0KSwKLSAgICAgICAgc2hvcnRjdXQubWFrZURlc2Ny
aXB0b3IoIl0iLCBzaG9ydGN1dC5Nb2RpZmllcnMuQ3RybE9yTWV0YSB8IHNob3J0Y3V0Lk1vZGlm
aWVycy5BbHQpCi0gICAgXTsKLSAgICBzZWN0aW9uLmFkZFJlbGF0ZWRLZXlzKGtleXMsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiR28gYmFjay9mb3J3YXJkIGluIHBhbmVsIGhpc3RvcnkiKSk7Ci0K
LSAgICBzZWN0aW9uLmFkZEtleShzaG9ydGN1dC5tYWtlRGVzY3JpcHRvcihzaG9ydGN1dC5LZXlz
LkVzYyksIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVG9nZ2xlIGNvbnNvbGUiKSk7Ci0gICAgc2Vj
dGlvbi5hZGRLZXkoc2hvcnRjdXQubWFrZURlc2NyaXB0b3IoImYiLCBzaG9ydGN1dC5Nb2RpZmll
cnMuQ3RybE9yTWV0YSksIFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2VhcmNoIikpOwotCi0gICAg
dmFyIGFkdmFuY2VkU2VhcmNoU2hvcnRjdXQgPSBXZWJJbnNwZWN0b3IuQWR2YW5jZWRTZWFyY2hD
b250cm9sbGVyLmNyZWF0ZVNob3J0Y3V0KCk7Ci0gICAgc2VjdGlvbi5hZGRLZXkoYWR2YW5jZWRT
ZWFyY2hTaG9ydGN1dCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZWFyY2ggYWNyb3NzIGFsbCBz
b3VyY2VzIikpOwotCi0gICAgdmFyIGluc3BlY3RFbGVtZW50TW9kZVNob3J0Y3V0ID0gV2ViSW5z
cGVjdG9yLkluc3BlY3RFbGVtZW50TW9kZUNvbnRyb2xsZXIuY3JlYXRlU2hvcnRjdXQoKTsKLSAg
ICBzZWN0aW9uLmFkZEtleShpbnNwZWN0RWxlbWVudE1vZGVTaG9ydGN1dCwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJTZWxlY3Qgbm9kZSB0byBpbnNwZWN0IikpOwotCi0gICAgdmFyIG9wZW5SZXNv
dXJjZVNob3J0Y3V0ID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZURlc2NyaXB0
b3IoIm8iLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3RybE9yTWV0
YSk7Ci0gICAgc2VjdGlvbi5hZGRLZXkob3BlblJlc291cmNlU2hvcnRjdXQsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiR28gdG8gc291cmNlIikpOwotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5pc01h
YygpKSB7Ci0gICAgICAgIGtleXMgPSBbCi0gICAgICAgICAgICBzaG9ydGN1dC5tYWtlRGVzY3Jp
cHRvcigiZyIsIHNob3J0Y3V0Lk1vZGlmaWVycy5NZXRhKSwKLSAgICAgICAgICAgIHNob3J0Y3V0
Lm1ha2VEZXNjcmlwdG9yKCJnIiwgc2hvcnRjdXQuTW9kaWZpZXJzLk1ldGEgfCBzaG9ydGN1dC5N
b2RpZmllcnMuU2hpZnQpCi0gICAgICAgIF07Ci0gICAgICAgIHNlY3Rpb24uYWRkUmVsYXRlZEtl
eXMoa2V5cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJGaW5kIG5leHQvcHJldmlvdXMiKSk7Ci0g
ICAgfQotCi0gICAgdmFyIGdvVG9TaG9ydGN1dCA9IFdlYkluc3BlY3Rvci5Hb1RvTGluZURpYWxv
Zy5jcmVhdGVTaG9ydGN1dCgpOwotICAgIHNlY3Rpb24uYWRkS2V5KGdvVG9TaG9ydGN1dCwgV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJHbyB0byBsaW5lIikpOwotCi0gICAga2V5cyA9IFsKLSAgICAg
ICAgc2hvcnRjdXQuS2V5cy5GMSwKLSAgICAgICAgc2hvcnRjdXQubWFrZURlc2NyaXB0b3IoIj8i
KQotICAgIF07Ci0gICAgc2VjdGlvbi5hZGRBbHRlcm5hdGVLZXlzKGtleXMsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiU2hvdyBrZXlib2FyZCBzaG9ydGN1dHMiKSk7Ci19Ci0KLS8qKgotICogQHBh
cmFtIHtLZXlib2FyZEV2ZW50fSBldmVudAotICovCi1XZWJJbnNwZWN0b3IuZG9jdW1lbnRLZXlE
b3duID0gZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAgY29uc3QgaGVscEtleSA9IFdlYkluc3BlY3Rv
ci5pc01hYygpID8gIlUrMDAzRiIgOiAiVSswMEJGIjsgLy8gIj8iIGZvciBib3RoIHBsYXRmb3Jt
cwotCi0gICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJGMSIgfHwKLSAgICAgICAgKGV2
ZW50LmtleUlkZW50aWZpZXIgPT09IGhlbHBLZXkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgKCFXZWJJ
bnNwZWN0b3IuaXNCZWluZ0VkaXRlZChldmVudC50YXJnZXQpIHx8IGV2ZW50Lm1ldGFLZXkpKSkg
ewotICAgICAgICB0aGlzLnNldHRpbmdzQ29udHJvbGxlci5zaG93U2V0dGluZ3NTY3JlZW4oV2Vi
SW5zcGVjdG9yLlNldHRpbmdzU2NyZWVuLlRhYnMuU2hvcnRjdXRzKTsKLSAgICAgICAgZXZlbnQu
Y29uc3VtZSh0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChXZWJJbnNw
ZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCgpICYmIFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNF
bGVtZW50KCkuaGFuZGxlS2V5RXZlbnQpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRG
b2N1c0VsZW1lbnQoKS5oYW5kbGVLZXlFdmVudChldmVudCk7Ci0gICAgICAgIGlmIChldmVudC5o
YW5kbGVkKSB7Ci0gICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFdlYkluc3BlY3Rvci5pbnNwZWN0
b3JWaWV3LmN1cnJlbnRQYW5lbCgpKSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JW
aWV3LmN1cnJlbnRQYW5lbCgpLmhhbmRsZVNob3J0Y3V0KGV2ZW50KTsKLSAgICAgICAgaWYgKGV2
ZW50LmhhbmRsZWQpIHsKLSAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoV2ViSW5zcGVjdG9yLnNl
YXJjaENvbnRyb2xsZXIuaGFuZGxlU2hvcnRjdXQoZXZlbnQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKFdlYkluc3BlY3Rvci5hZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuaGFuZGxlU2hvcnRj
dXQoZXZlbnQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5pbnNwZWN0
RWxlbWVudE1vZGVDb250cm9sbGVyICYmIFdlYkluc3BlY3Rvci5pbnNwZWN0RWxlbWVudE1vZGVD
b250cm9sbGVyLmhhbmRsZVNob3J0Y3V0KGV2ZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7Ci0gICAgICAgIGNhc2UgIlUrMDA0RiI6IC8v
IE8ga2V5Ci0gICAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5hbHRLZXkg
JiYgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50
KSkgewotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93UGFuZWwoInNjcmlwdHMiKS5z
aG93R29Ub1NvdXJjZURpYWxvZygpOwotICAgICAgICAgICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiVSsw
MDUyIjogLy8gUiBrZXkKLSAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5ldmVudEhhc0N0cmxPck1ldGEoZXZlbnQpKSB7Ci0gICAgICAgICAgICAgICAgUGFnZUFn
ZW50LnJlbG9hZChldmVudC5zaGlmdEtleSk7Ci0gICAgICAgICAgICAgICAgZXZlbnQuY29uc3Vt
ZSh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aW5kb3cuREVCVUcgJiYg
ZXZlbnQuYWx0S2V5KSB7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJlbG9hZCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlICJGNSI6Ci0gICAgICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5pc01h
YygpKSB7Ci0gICAgICAgICAgICAgICAgUGFnZUFnZW50LnJlbG9hZChldmVudC5jdHJsS2V5IHx8
IGV2ZW50LnNoaWZ0S2V5KTsKLSAgICAgICAgICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgdmFyIGlzVmFs
aWRab29tU2hvcnRjdXQgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5ldmVudEhhc0N0
cmxPck1ldGEoZXZlbnQpICYmCi0gICAgICAgICFldmVudC5hbHRLZXkgJiYKLSAgICAgICAgIUlu
c3BlY3RvckZyb250ZW5kSG9zdC5pc1N0dWI7Ci0gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7
Ci0gICAgICAgIGNhc2UgMTA3OiAvLyArCi0gICAgICAgIGNhc2UgMTg3OiAvLyArCi0gICAgICAg
ICAgICBpZiAoaXNWYWxpZFpvb21TaG9ydGN1dCkgewotICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5fem9vbUluKCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDEwOTogLy8gLQot
ICAgICAgICBjYXNlIDE4OTogLy8gLQotICAgICAgICAgICAgaWYgKGlzVmFsaWRab29tU2hvcnRj
dXQpIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuX3pvb21PdXQoKTsKLSAgICAgICAg
ICAgICAgICBldmVudC5jb25zdW1lKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgNDg6IC8vIDAKLSAgICAgICAgICAgIC8vIFpvb20gcmVzZXQg
c2hvcnRjdXQgZG9lcyBub3QgYWxsb3cgIlNoaWZ0IiB3aGVuIGhhbmRsZWQgYnkgdGhlIGJyb3dz
ZXIuCi0gICAgICAgICAgICBpZiAoaXNWYWxpZFpvb21TaG9ydGN1dCAmJiAhZXZlbnQuc2hpZnRL
ZXkpIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuX3Jlc2V0Wm9vbSgpOwotICAgICAg
ICAgICAgICAgIGV2ZW50LmNvbnN1bWUodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5wb3N0RG9jdW1lbnRLZXlEb3duID0g
ZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LmhhbmRsZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5LZXlzLkVzYy5jb2RlKSB7Ci0gICAgICAgIC8vIElmIGRyYXdlciBpcyBvcGVuIHdpdGgg
c29tZSB2aWV3IG90aGVyIHRoYW4gY29uc29sZSB0aGVuIGNsb3NlIGl0LgotICAgICAgICBpZiAo
IXRoaXMuX3RvZ2dsZUNvbnNvbGVCdXR0b24udG9nZ2xlZCAmJiBXZWJJbnNwZWN0b3IuZHJhd2Vy
LnZpc2libGUpCi0gICAgICAgICAgICB0aGlzLmNsb3NlVmlld0luRHJhd2VyKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUNvbnNvbGVCdXR0b25DbGlja2VkKCk7Ci0g
ICAgfQotfQotCi1XZWJJbnNwZWN0b3IuZG9jdW1lbnRDYW5Db3B5ID0gZnVuY3Rpb24oZXZlbnQp
Ci17Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpICYm
IFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpLmhhbmRsZUNvcHlFdmVu
dCkKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0KLQotV2ViSW5zcGVjdG9yLmRv
Y3VtZW50Q29weSA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIGlmIChXZWJJbnNwZWN0b3IuaW5z
cGVjdG9yVmlldy5jdXJyZW50UGFuZWwoKSAmJiBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5j
dXJyZW50UGFuZWwoKS5oYW5kbGVDb3B5RXZlbnQpCi0gICAgICAgIFdlYkluc3BlY3Rvci5pbnNw
ZWN0b3JWaWV3LmN1cnJlbnRQYW5lbCgpLmhhbmRsZUNvcHlFdmVudChldmVudCk7Ci0gICAgV2Vi
SW5zcGVjdG9yLmRvY3VtZW50Q29weUV2ZW50RmlyZWQoZXZlbnQpOwotfQotCi1XZWJJbnNwZWN0
b3IuZG9jdW1lbnRDb3B5RXZlbnRGaXJlZCA9IGZ1bmN0aW9uKGV2ZW50KQotewotfQotCi1XZWJJ
bnNwZWN0b3IuY29udGV4dE1lbnVFdmVudEZpcmVkID0gZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAg
aWYgKGV2ZW50LmhhbmRsZWQgfHwgZXZlbnQudGFyZ2V0Lmhhc1N0eWxlQ2xhc3MoInBvcHVwLWds
YXNzcGFuZSIpKQotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfQotCi1XZWJJbnNw
ZWN0b3Iuc2hvd0NvbnNvbGUgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5f
dG9nZ2xlQ29uc29sZUJ1dHRvbiAmJiAhV2ViSW5zcGVjdG9yLl90b2dnbGVDb25zb2xlQnV0dG9u
LnRvZ2dsZWQpIHsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kcmF3ZXIudmlzaWJsZSkKLSAg
ICAgICAgICAgIHRoaXMuX2Nsb3NlUHJldmlvdXNEcmF3ZXJWaWV3KCk7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5fdG9nZ2xlQ29uc29sZUJ1dHRvbkNsaWNrZWQoKTsKLSAgICB9Ci19Ci0KLVdlYklu
c3BlY3Rvci5zaG93UGFuZWwgPSBmdW5jdGlvbihwYW5lbCkKLXsKLSAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLmluc3BlY3RvclZpZXcuc2hvd1BhbmVsKHBhbmVsKTsKLX0KLQotV2ViSW5zcGVjdG9y
LnBhbmVsID0gZnVuY3Rpb24ocGFuZWwpCi17Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5pbnNw
ZWN0b3JWaWV3LnBhbmVsKHBhbmVsKTsKLX0KLQotV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCA9
IGZ1bmN0aW9uKCkKLXsKLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7
Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlTGV2ZWwKLSAqIEBwYXJhbSB7
Ym9vbGVhbj19IHNob3dDb25zb2xlCi0gKi8KLVdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbiht
ZXNzYWdlLCBtZXNzYWdlTGV2ZWwsIHNob3dDb25zb2xlKQotewotICAgIC8vIHJlbWVtYmVyICd0
aGlzJyBmb3Igc2V0SW50ZXJ2YWwoKSBjYWxsYmFjawotICAgIHZhciBzZWxmID0gdGhpczsKLQot
ICAgIC8vIHJldHVybiBpbmRpY2F0aW9uIGlmIHdlIGNhbiBhY3R1YWxseSBsb2cgYSBtZXNzYWdl
Ci0gICAgZnVuY3Rpb24gaXNMb2dBdmFpbGFibGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSAmJiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0ICYm
IHNlbGYuY29uc29sZTsKLSAgICB9Ci0KLSAgICAvLyBmbHVzaCB0aGUgcXVldWUgb2YgcGVuZGlu
ZyBtZXNzYWdlcwotICAgIGZ1bmN0aW9uIGZsdXNoUXVldWUoKQotICAgIHsKLSAgICAgICAgdmFy
IHF1ZXVlZCA9IFdlYkluc3BlY3Rvci5sb2cucXVldWVkOwotICAgICAgICBpZiAoIXF1ZXVlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVl
ZC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGxvZ01lc3NhZ2UocXVldWVkW2ldKTsKLQotICAg
ICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLmxvZy5xdWV1ZWQ7Ci0gICAgfQotCi0gICAgLy8gZmx1
c2ggdGhlIHF1ZXVlIGlmIGl0IGNvbnNvbGUgaXMgYXZhaWxhYmxlCi0gICAgLy8gLSB0aGlzIGZ1
bmN0aW9uIGlzIHJ1biBvbiBhbiBpbnRlcnZhbAotICAgIGZ1bmN0aW9uIGZsdXNoUXVldWVJZkF2
YWlsYWJsZSgpCi0gICAgewotICAgICAgICBpZiAoIWlzTG9nQXZhaWxhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY2xlYXJJbnRlcnZhbChXZWJJbnNwZWN0b3IubG9nLmlu
dGVydmFsKTsKLSAgICAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5sb2cuaW50ZXJ2YWw7Ci0KLSAg
ICAgICAgZmx1c2hRdWV1ZSgpOwotICAgIH0KLQotICAgIC8vIGFjdHVhbGx5IGxvZyB0aGUgbWVz
c2FnZQotICAgIGZ1bmN0aW9uIGxvZ01lc3NhZ2UobWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIC8v
IHBvc3QgdGhlIG1lc3NhZ2UKLSAgICAgICAgdmFyIG1zZyA9IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5jcmVhdGUoCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVNvdXJjZS5PdGhlciwKLSAgICAgICAgICAgIG1lc3NhZ2VMZXZlbCB8fCBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkRlYnVnLAotICAgICAgICAgICAgbWVz
c2FnZSk7Ci0KLSAgICAgICAgc2VsZi5jb25zb2xlLmFkZE1lc3NhZ2UobXNnKTsKLSAgICAgICAg
aWYgKHNob3dDb25zb2xlKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dDb25zb2xlKCk7
Ci0gICAgfQotCi0gICAgLy8gaWYgd2UgY2FuJ3QgbG9nIHRoZSBtZXNzYWdlLCBxdWV1ZSBpdAot
ICAgIGlmICghaXNMb2dBdmFpbGFibGUoKSkgewotICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5s
b2cucXVldWVkKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5xdWV1ZWQgPSBbXTsKLQot
ICAgICAgICBXZWJJbnNwZWN0b3IubG9nLnF1ZXVlZC5wdXNoKG1lc3NhZ2UpOwotCi0gICAgICAg
IGlmICghV2ViSW5zcGVjdG9yLmxvZy5pbnRlcnZhbCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5sb2cuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmbHVzaFF1ZXVlSWZBdmFpbGFibGUsIDEwMDAp
OwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBmbHVzaCB0aGUgcGVuZGluZyBx
dWV1ZSBpZiBhbnkKLSAgICBmbHVzaFF1ZXVlKCk7Ci0KLSAgICAvLyBsb2cgdGhlIG1lc3NhZ2UK
LSAgICBsb2dNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi1XZWJJbnNwZWN0b3Iuc2hvd0Vycm9yTWVz
c2FnZSA9IGZ1bmN0aW9uKGVycm9yKQotewotICAgIFdlYkluc3BlY3Rvci5sb2coZXJyb3IsIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IsIHRydWUpOwotfQot
Ci0vLyBJbnNwZWN0b3IuaW5zcGVjdCBwcm90b2NvbCBldmVudAotV2ViSW5zcGVjdG9yLmluc3Bl
Y3QgPSBmdW5jdGlvbihwYXlsb2FkLCBoaW50cykKLXsKLSAgICB2YXIgb2JqZWN0ID0gV2ViSW5z
cGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXlsb2FkKTsKLSAgICBpZiAob2JqZWN0
LnN1YnR5cGUgPT09ICJub2RlIikgewotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhub2RlSWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5fdXBkYXRlRm9jdXNlZE5vZGUo
bm9kZUlkKTsKLSAgICAgICAgICAgIG9iamVjdC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgb2JqZWN0LnB1c2hOb2RlVG9Gcm9udGVuZChjYWxsYmFjayk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoaGludHMuZGF0YWJhc2VJZCkKLSAgICAgICAgV2ViSW5zcGVjdG9y
LnNob3dQYW5lbCgicmVzb3VyY2VzIikuc2VsZWN0RGF0YWJhc2UoV2ViSW5zcGVjdG9yLmRhdGFi
YXNlTW9kZWwuZGF0YWJhc2VGb3JJZChoaW50cy5kYXRhYmFzZUlkKSk7Ci0gICAgZWxzZSBpZiAo
aGludHMuZG9tU3RvcmFnZUlkKQotICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJyZXNv
dXJjZXMiKS5zZWxlY3RET01TdG9yYWdlKFdlYkluc3BlY3Rvci5kb21TdG9yYWdlTW9kZWwuc3Rv
cmFnZUZvcklkKGhpbnRzLmRvbVN0b3JhZ2VJZCkpOwotCi0gICAgb2JqZWN0LnJlbGVhc2UoKTsK
LX0KLQotLy8gSW5zcGVjdG9yLmRldGFjaGVkIHByb3RvY29sIGV2ZW50Ci1XZWJJbnNwZWN0b3Iu
ZGV0YWNoZWQgPSBmdW5jdGlvbihyZWFzb24pCi17Ci0gICAgV2ViSW5zcGVjdG9yLnNvY2tldC5f
ZGV0YWNoUmVhc29uID0gcmVhc29uOwotICAgIChuZXcgV2ViSW5zcGVjdG9yLlJlbW90ZURlYnVn
Z2luZ1Rlcm1pbmF0ZWRTY3JlZW4ocmVhc29uKSkuc2hvd01vZGFsKCk7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci50YXJnZXRDcmFzaGVkID0gZnVuY3Rpb24oKQotewotICAgIChuZXcgV2ViSW5zcGVjdG9y
LkhlbHBTY3JlZW5VbnRpbFJlbG9hZCgKLSAgICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJ
bnNwZWN0ZWQgdGFyZ2V0IGNyYXNoZWQiKSwKLSAgICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJJbnNwZWN0ZWQgdGFyZ2V0IGhhcyBjcmFzaGVkLiBPbmNlIGl0IHJlbG9hZHMgd2Ugd2lsbCBh
dHRhY2ggdG8gaXQgYXV0b21hdGljYWxseS4iKSkpLnNob3dNb2RhbCgpOwotfQotCi1XZWJJbnNw
ZWN0b3IuX3VwZGF0ZUZvY3VzZWROb2RlID0gZnVuY3Rpb24obm9kZUlkKQotewotICAgIGlmIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlciAmJiBXZWJJbnNwZWN0b3Iu
aW5zcGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci5lbmFibGVkKCkpIHsKLSAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmJyaW5nVG9Gcm9udCgpOwotICAgICAgICBXZWJJbnNwZWN0b3IuaW5z
cGVjdEVsZW1lbnRNb2RlQ29udHJvbGxlci5kaXNhYmxlKCk7Ci0gICAgfQotICAgIFdlYkluc3Bl
Y3Rvci5zaG93UGFuZWwoImVsZW1lbnRzIikucmV2ZWFsQW5kU2VsZWN0Tm9kZShub2RlSWQpOwot
fQotCi1XZWJJbnNwZWN0b3IuX3Nob3dBbmNob3JMb2NhdGlvbiA9IGZ1bmN0aW9uKGFuY2hvcikK
LXsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLm9wZW5BbmNob3JMb2NhdGlvblJlZ2lzdHJ5LmRpc3Bh
dGNoKHsgdXJsOiBhbmNob3IuaHJlZiwgbGluZU51bWJlcjogYW5jaG9yLmxpbmVOdW1iZXJ9KSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgdmFyIHByZWZlcnJlZFBhbmVsID0gdGhpcy5wYW5l
bHNbYW5jaG9yLnByZWZlcnJlZFBhbmVsXTsKLSAgICBpZiAocHJlZmVycmVkUGFuZWwgJiYgV2Vi
SW5zcGVjdG9yLl9zaG93QW5jaG9yTG9jYXRpb25JblBhbmVsKGFuY2hvciwgcHJlZmVycmVkUGFu
ZWwpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLl9zaG93QW5j
aG9yTG9jYXRpb25JblBhbmVsKGFuY2hvciwgdGhpcy5wYW5lbCgic2NyaXB0cyIpKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5fc2hvd0FuY2hvckxvY2F0aW9u
SW5QYW5lbChhbmNob3IsIHRoaXMucGFuZWwoInJlc291cmNlcyIpKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5fc2hvd0FuY2hvckxvY2F0aW9uSW5QYW5lbChh
bmNob3IsIHRoaXMucGFuZWwoIm5ldHdvcmsiKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotV2ViSW5zcGVjdG9yLl9zaG93QW5jaG9yTG9jYXRpb25JblBh
bmVsID0gZnVuY3Rpb24oYW5jaG9yLCBwYW5lbCkKLXsKLSAgICBpZiAoIXBhbmVsIHx8ICFwYW5l
bC5jYW5TaG93QW5jaG9yTG9jYXRpb24oYW5jaG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQgd2Via2l0LWh0bWwtZXh0ZXJuYWwtbGluayBsaW5rcyBo
ZXJlLgotICAgIGlmIChhbmNob3IuaGFzU3R5bGVDbGFzcygid2Via2l0LWh0bWwtZXh0ZXJuYWwt
bGluayIpKSB7Ci0gICAgICAgIGFuY2hvci5yZW1vdmVTdHlsZUNsYXNzKCJ3ZWJraXQtaHRtbC1l
eHRlcm5hbC1saW5rIik7Ci0gICAgICAgIGFuY2hvci5hZGRTdHlsZUNsYXNzKCJ3ZWJraXQtaHRt
bC1yZXNvdXJjZS1saW5rIik7Ci0gICAgfQotCi0gICAgV2ViSW5zcGVjdG9yLmluc3BlY3RvclZp
ZXcuc2hvd1BhbmVsRm9yQW5jaG9yTmF2aWdhdGlvbihwYW5lbCk7Ci0gICAgcGFuZWwuc2hvd0Fu
Y2hvckxvY2F0aW9uKGFuY2hvcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVdlYkluc3BlY3Rv
ci5ldmFsdWF0ZUluQ29uc29sZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIHNob3dSZXN1bHRPbmx5
KQotewotICAgIHRoaXMuc2hvd0NvbnNvbGUoKTsKLSAgICB0aGlzLmNvbnNvbGVWaWV3LmV2YWx1
YXRlVXNpbmdUZXh0UHJvbXB0KGV4cHJlc3Npb24sIHNob3dSZXN1bHRPbmx5KTsKLX0KLQotV2Vi
SW5zcGVjdG9yLmFkZE1haW5FdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKGRvYykKLXsKLSAgICBk
b2MuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuZG9jdW1lbnRLZXlEb3duLmJpbmQo
dGhpcyksIHRydWUpOwotICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5w
b3N0RG9jdW1lbnRLZXlEb3duLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICBkb2MuYWRkRXZlbnRM
aXN0ZW5lcigiYmVmb3JlY29weSIsIHRoaXMuZG9jdW1lbnRDYW5Db3B5LmJpbmQodGhpcyksIHRy
dWUpOwotICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCJjb3B5IiwgdGhpcy5kb2N1bWVudENvcHku
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVu
dSIsIHRoaXMuY29udGV4dE1lbnVFdmVudEZpcmVkLmJpbmQodGhpcyksIHRydWUpOwotICAgIGRv
Yy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuZG9jdW1lbnRDbGljay5iaW5kKHRoaXMp
LCB0cnVlKTsKLX0KLQotV2ViSW5zcGVjdG9yLlpvb20gPSB7Ci0gICAgVGFibGU6IFswLjI1LCAw
LjMzLCAwLjUsIDAuNjYsIDAuNzUsIDAuOSwgMSwgMS4xLCAxLjI1LCAxLjUsIDEuNzUsIDIsIDIu
NSwgMywgNCwgNV0sCi0gICAgRGVmYXVsdE9mZnNldDogNgotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3JDb21tb24uY3NzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3JDb21tb24uY3NzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTM2ZGIyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yQ29tbW9uLmNzcworKysgL2Rldi9udWxs
CkBAIC0xLDIzMCArMCwwIEBACi1odG1sIHsKLSAgICBoZWlnaHQ6IDEwMCU7Ci19Ci0KLWJvZHkg
ewotICAgIGN1cnNvcjogZGVmYXVsdDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9w
OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIG92
ZXJmbG93OiBoaWRkZW47Ci0gICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGUsIHNhbnMtc2Vy
aWY7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIG1hcmdpbjogMDsKLSAgICB0YWItc2l6ZTog
NDsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotfQotCi1ib2R5LmRvY2stdG8tcmln
aHQ6bm90KC51bmRvY2tlZCkgewotICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDgwLCA4
MCwgODApOwotfQotCi1ib2R5LmRvY2stdG8tcmlnaHQuaW5hY3RpdmU6bm90KC51bmRvY2tlZCkg
ewotICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDY0JSwgNjQlLCA2NCUpOwotfQotCi0q
IHsKLSAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci19Ci0KLTpmb2N1cyB7Ci0g
ICAgb3V0bGluZTogbm9uZTsKLX0KLQotaW1nIHsKLSAgICAtd2Via2l0LXVzZXItZHJhZzogbm9u
ZTsKLX0KLQotaWZyYW1lLCBhIGltZyB7Ci0gICAgYm9yZGVyOiBub25lOwotfQotCi1pZnJhbWUu
dmlldyB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHdpZHRoOiAxMDAlOwotICAgIGhl
aWdodDogMTAwJTsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIHRvcDogMDsKLSAg
ICBib3R0b206IDA7Ci19Ci0KLS5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFu
dDsKLX0KLQotLm1vbm9zcGFjZSB7Ci0gICAgZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7Ci0g
ICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKLX0KLQotLnJlc291cmNlcy1kaXZpZGVycyB7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAg
aGVpZ2h0OiAxMDAlOwotICAgIHRvcDogMDsKLSAgICB6LWluZGV4OiAtMTAwOwotfQotCi0ucmVz
b3VyY2VzLWV2ZW50LWRpdmlkZXJzIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgbGVm
dDogMDsKLSAgICByaWdodDogMDsKLSAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgdG9wOiAwOwotICAg
IHotaW5kZXg6IDMwMDsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLX0KLQotLnJlc291cmNl
cy1kaXZpZGVycy1sYWJlbC1iYXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6
IDA7Ci0gICAgbGVmdDogMHB4OwotICAgIHJpZ2h0OiAwOwotICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKLSAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmc7
Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTsKLSAgICBo
ZWlnaHQ6IDIwcHg7Ci0gICAgei1pbmRleDogMjAwOwotICAgIHBvaW50ZXItZXZlbnRzOiBub25l
OwotICAgIGN1cnNvcjogbW92ZTsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi0ucmVzb3Vy
Y2VzLWRpdmlkZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB3aWR0aDogMXB4Owot
ICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgw
LCAwLCAwLCAwLjEpOwotfQotCi0ucmVzb3VyY2VzLWV2ZW50LWRpdmlkZXItcGFkZGluZyB7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHdpZHRoOiA4cHg7Ci0gICAgdG9wOiAwOwotICAg
IGJvdHRvbTogMDsKLSAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKLX0KLQotLnJlc291cmNlcy1l
dmVudC1kaXZpZGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6IDJweDsK
LSAgICB0b3A6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIHotaW5kZXg6IDMwMDsKLX0KLQotLnJl
c291cmNlcy1kaXZpZGVyLWxhYmVsIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9w
OiA0cHg7Ci0gICAgcmlnaHQ6IDNweDsKLSAgICBmb250LXNpemU6IDgwJTsKLSAgICB3aGl0ZS1z
cGFjZTogbm93cmFwOwotICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwotfQotCi0ub3ZlcnZpZXct
Z3JpZC13aW5kb3ctc2VsZWN0b3IgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6
IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTI1LCAxNzMs
IDIxNywgMC41KTsKLSAgICB6LWluZGV4OiAyNTA7Ci19Ci0KLS5vdmVydmlldy1ncmlkLXdpbmRv
dyB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgcG9zaXRpb246IGFic29sdXRl
OwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTog
NjBweDsKLSAgICB6LWluZGV4OiAxNTA7Ci19Ci0KLS5vdmVydmlldy1ncmlkLWRpdmlkZXJzLWJh
Y2tncm91bmQgewotICAgIGxlZnQ6IDAlOwotICAgIHJpZ2h0OiAwJTsKLSAgICB0b3A6IDBweDsK
LSAgICBib3R0b206IDYwcHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotfQotCi0ub3ZlcnZpZXctZ3JpZC13aW5kb3ctcnVsZXJzIHsKLSAg
ICB0b3A6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBv
cGFjaXR5OiAwLjI7Ci0gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2s7Ci0gICAgYm9y
ZGVyLWxlZnQ6IDFweCBzb2xpZCBibGFjazsKLSAgICB6LWluZGV4OiAxNTA7Ci0gICAgcG9pbnRl
ci1ldmVudHM6IG5vbmU7Ci19Ci0KLS5vdmVydmlldy1ncmlkLXdpbmRvdy1yZXNpemVyIHsKLSAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwcHg7Ci0gICAgYm90dG9tOiA2MHB4Owot
ICAgIHdpZHRoOiA1cHg7Ci0gICAgbWFyZ2luLWxlZnQ6IC0zcHg7Ci0gICAgbWFyZ2luLXJpZ2h0
OiAtMnB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDE1MywgMTUzKTsKLSAgICB6
LWluZGV4OiA1MDA7Ci0gICAgY3Vyc29yOiBldy1yZXNpemU7Ci0gICAgLXdlYmtpdC1ib3JkZXIt
cmFkaXVzOiAycHg7Ci0gICAgLXdlYmtpdC1ib3gtc2hhZG93OiB3aGl0ZSAxcHggMCAwLCB3aGl0
ZSAtMXB4IDAgMCwgd2hpdGUgMCAxcHggMCwgd2hpdGUgMCAtMXB4IDA7Ci19Ci0KLS8qIE5ldHdv
cmsgdGltaW5nIGlzIHNoYXJlZCBiZXR3ZWVuIHBvcG92ZXIgYW5kIG5ldHdvcmsgaXRlbSB2aWV3
IHBhbmUgKi8KLQotLm5ldHdvcmstdGltaW5nLXJvdyB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZl
OwotICAgIGhlaWdodDogMTZweDsKLX0KLQotLm5ldHdvcmstdGltaW5nLWJhciB7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKLSAgICBib3JkZXIt
bGVmdDogMXB4IHNvbGlkIHJlZDsKLSAgICBvcGFjaXR5OiAwLjQ7Ci0gICAgdG9wOiAwOwotICAg
IGJvdHRvbTogMDsKLX0KLQotLm5ldHdvcmstdGltaW5nLWJhci10aXRsZSB7Ci0gICAgcG9zaXRp
b246IGFic29sdXRlOwotICAgIGNvbG9yOiBibGFjazsKLSAgICB0b3A6IDFweDsKLX0KLQotLndl
YmtpdC1zZWFyY2gtcmVzdWx0IHsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKLSAg
ICBwYWRkaW5nOiAycHggMnB4IDJweCAzcHg7Ci0gICAgbWFyZ2luOiAtMnB4IC0ycHggLTJweCAt
M3B4OwotICAgIG9wYWNpdHk6IDAuODsKLSAgICAtd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwg
MCwgMCwgLjUpIDNweCAzcHggNHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDEsIDIz
NCwgMCk7Ci0gICAgY29sb3I6IGJsYWNrOwotfQotCi0uc2lkZWJhci1zZXBhcmF0b3IgewotICAg
IGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVm
dCBib3R0b20sIGZyb20ocmdiKDI0MywgMjQzLCAyNDMpKSwgY29sb3Itc3RvcCgwLjA1LCByZ2Io
MjQzLCAyNDMsIDI0MykpLCBjb2xvci1zdG9wKDAuMDUsIHJnYigyMzAsIDIzMCwgMjMwKSksIHRv
KHJnYigyMDksIDIwOSwgMjA5KSkpOwotICAgIHBhZGRpbmc6IDAgNXB4OwotICAgIGJvcmRlci10
b3A6IDFweCBzb2xpZCByZ2IoMTg5LCAxODksIDE4OSk7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4
IHNvbGlkIHJnYigxODksIDE4OSwgMTg5KTsKLSAgICBjb2xvcjogcmdiKDExMCwgMTEwLCAxMTAp
OwotICAgIHRleHQtc2hhZG93OiB3aGl0ZSAwIDFweCAwOwotICAgIHdoaXRlLXNwYWNlOiBub3dy
YXA7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsK
LSAgICBmb250LXNpemU6IDExcHg7Ci19Ci0KLS5zaWRlYmFyLWxhYmVsIHsKLSAgICBmb250LXNp
emU6IDExcHg7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yU3ludGF4SGlnaGxpZ2h0LmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yU3ludGF4SGlnaGxpZ2h0LmNzcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMGQxYWU5Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3RvclN5bnRheEhpZ2hsaWdodC5jc3MKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS53ZWJraXQtY3NzLWNvbW1lbnQgewotICAgIGNvbG9y
OiByZ2IoMCwgMTE2LCAwKTsKLX0KLQotLndlYmtpdC1jc3MtdXJsLCAud2Via2l0LWNzcy1jb2xv
ciwgLndlYmtpdC1jc3Mtc3RyaW5nLCAud2Via2l0LWNzcy1rZXl3b3JkIHsKLSAgICBjb2xvcjog
cmdiKDcsIDE0NCwgMTU0KTsKLSB9Ci0KLS53ZWJraXQtY3NzLW51bWJlciB7Ci0gICAgY29sb3I6
IHJnYig1MCwgMCwgMjU1KTsKLX0KLQotLndlYmtpdC1jc3MtcHJvcGVydHksIC53ZWJraXQtY3Nz
LWF0LXJ1bGUgewotICAgIGNvbG9yOiByZ2IoMjAwLCAwLCAwKTsKLX0KLQotLndlYmtpdC1jc3Mt
c2VsZWN0b3IgewotICAgIGNvbG9yOiBibGFjazsKLX0KLQotLndlYmtpdC1jc3MtYmFuZy1rZXl3
b3JkIHsKLSAgICBjb2xvcjogcmdiKDIwMCwgMCwgMTgwKTsKLX0KLQotLndlYmtpdC1qYXZhc2Ny
aXB0LXVuZGVmIHsKLSAgICBjb2xvcjogcmdiKDEyMywgMTIzLCAxMjMpOwotfQotCi0ud2Via2l0
LWphdmFzY3JpcHQtY29tbWVudCB7Ci0gICAgY29sb3I6IHJnYigwLCAxMTYsIDApOwotfQotCi0u
d2Via2l0LWphdmFzY3JpcHQta2V5d29yZCB7Ci0gICAgY29sb3I6IHJnYigxNzAsIDEzLCAxNDUp
OwotfQotCi0ud2Via2l0LWphdmFzY3JpcHQtbnVtYmVyIHsKLSAgICBjb2xvcjogcmdiKDI4LCAw
LCAyMDcpOwotfQotCi0ud2Via2l0LWphdmFzY3JpcHQtc3RyaW5nLCAud2Via2l0LWphdmFzY3Jp
cHQtcmVnZXhwIHsKLSAgICBjb2xvcjogcmdiKDE5NiwgMjYsIDIyKTsKLX0KLQotLndlYmtpdC1q
YXZhc2NyaXB0LWlkZW50IHsKLSAgICBjb2xvcjogYmxhY2s7Ci19Ci0KLS53ZWJraXQtd2hpdGVz
cGFjZS0xOjpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICLCtyI7Ci19Ci0KLS53ZWJraXQtd2hpdGVz
cGFjZS0yOjpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICLCt8K3IjsKLX0KLQotLndlYmtpdC13aGl0
ZXNwYWNlLTQ6OmJlZm9yZSB7Ci0gICAgY29udGVudDogIsK3wrfCt8K3IjsKLX0KLQotLndlYmtp
dC13aGl0ZXNwYWNlLTg6OmJlZm9yZSB7Ci0gICAgY29udGVudDogIsK3wrfCt8K3wrfCt8K3wrci
OwotfQotCi0ud2Via2l0LXdoaXRlc3BhY2UtMTY6OmJlZm9yZSB7Ci0gICAgY29udGVudDogIsK3
wrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3IjsKLX0KLQotLndlYmtpdC13aGl0ZXNwYWNl
OjpiZWZvcmUgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBwb2ludGVyLWV2ZW50czog
bm9uZTsKLSAgICBjb2xvcjogcmdiKDE3NSwgMTc1LCAxNzUpOwotfQotCi0ud2Via2l0LWh0bWwt
Y29tbWVudCB7Ci0gICAgLyogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB2aWV3LXNvdXJjZS5jc3Mg
KC53ZWJraXQtaHRtbC1jb21tZW50KSAqLwotICAgIGNvbG9yOiByZ2IoMzUsIDExMCwgMzcpOwot
fQotCi0ud2Via2l0LWh0bWwtdGFnIHsKLSAgICAvKiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHZp
ZXctc291cmNlLmNzcyAoLndlYmtpdC1odG1sLXRhZykgKi8KLSAgICBjb2xvcjogcmdiKDEzNiwg
MTgsIDEyOCk7Ci19Ci0KLS53ZWJraXQtaHRtbC1kb2N0eXBlIHsKLSAgICAvKiBLZWVwIHRoaXMg
aW4gc3luYyB3aXRoIHZpZXctc291cmNlLmNzcyAoLndlYmtpdC1odG1sLWRvY3R5cGUpICovCi0g
ICAgY29sb3I6IHJnYigxOTIsIDE5MiwgMTkyKTsKLX0KLQotLndlYmtpdC1odG1sLWF0dHJpYnV0
ZS1uYW1lIHsKLSAgICAvKiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHZpZXctc291cmNlLmNzcyAo
LndlYmtpdC1odG1sLWF0dHJpYnV0ZS1uYW1lKSAqLwotICAgIGNvbG9yOiByZ2IoMTUzLCA2OSwg
MCk7Ci19Ci0KLS53ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUgewotICAgIC8qIEtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggdmlldy1zb3VyY2UuY3NzICgud2Via2l0LWh0bWwtYXR0cmlidXRlLXZh
bHVlKSAqLwotICAgIGNvbG9yOiByZ2IoMjYsIDI2LCAxNjYpOwotfQotCi0ud2Via2l0LWh0bWwt
ZXh0ZXJuYWwtbGluaywgLndlYmtpdC1odG1sLXJlc291cmNlLWxpbmsgewotICAgIC8qIEtlZXAg
dGhpcyBpbiBzeW5jIHdpdGggdmlldy1zb3VyY2UuY3NzICgud2Via2l0LWh0bWwtZXh0ZXJuYWwt
bGluaywgLndlYmtpdC1odG1sLXJlc291cmNlLWxpbmspICovCi0gICAgY29sb3I6ICMwMGU7Ci19
Ci0KLS53ZWJraXQtaHRtbC1leHRlcm5hbC1saW5rIHsKLSAgICAvKiBLZWVwIHRoaXMgaW4gc3lu
YyB3aXRoIHZpZXctc291cmNlLmNzcyAoLndlYmtpdC1odG1sLWV4dGVybmFsLWxpbmspICovCi0g
ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotCi0ud2Via2l0LWh0bWwtZXh0ZXJuYWwtbGlu
azpob3ZlciB7Ci0gICAgLyogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB2aWV3LXNvdXJjZS5jc3Mg
KC53ZWJraXQtaHRtbC1leHRlcm5hbC1saW5rOmhvdmVyKSAqLwotICAgIHRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9qc2RpZmZsaWIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2pzZGlmZmxpYi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2YThmNy4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2pzZGlmZmxpYi5q
cworKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0vKgotICogVGhpcyBpcyBwYXJ0IG9m
IGpzZGlmZmxpYiB2MS4wLiA8aHR0cDovL3Nub3d0aWRlLmNvbS9qc2RpZmZsaWI+Ci0gKgotICog
Q29weXJpZ2h0IChjKSAyMDA3LCBTbm93dGlkZSBJbmZvcm1hdGljcyBTeXN0ZW1zLCBJbmMuCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAot
ICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgotICogCi0gKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKLSAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBTbm93dGlkZSBJbmZvcm1hdGljcyBTeXN0ZW1zIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzCi0gKiBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VAotICogU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAotICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotICogQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KLSAqIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNICi0gKiBEQU1BR0UuCi0gKiovCi0vKiBBdXRob3I6IENoYXMgRW1lcmljayA8Y2VtZXJp
Y2tAc25vd3RpZGUuY29tPiAqLwotLyogdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY2Vt
ZXJpY2svanNkaWZmbGliICovCi0KLV9fd2hpdGVzcGFjZSA9IHsiICI6dHJ1ZSwgIlx0Ijp0cnVl
LCAiXG4iOnRydWUsICJcZiI6dHJ1ZSwgIlxyIjp0cnVlfTsKLQotZGlmZmxpYiA9IHsKLSAgICBk
ZWZhdWx0SnVua0Z1bmN0aW9uOiBmdW5jdGlvbiAoYykgewotICAgICAgICByZXR1cm4gX193aGl0
ZXNwYWNlLmhhc093blByb3BlcnR5KGMpOwotICAgIH0sCi0KLSAgICBzdHJpcExpbmVicmVha3M6
IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0ci5yZXBsYWNlKC9eW1xuXHJdKnxbXG5ccl0qJC9n
LCAiIik7IH0sCi0KLSAgICBzdHJpbmdBc0xpbmVzOiBmdW5jdGlvbiAoc3RyKSB7Ci0gICAgICAg
IHZhciBsZnBvcyA9IHN0ci5pbmRleE9mKCJcbiIpOwotICAgICAgICB2YXIgY3Jwb3MgPSBzdHIu
aW5kZXhPZigiXHIiKTsKLSAgICAgICAgdmFyIGxpbmVicmVhayA9ICgobGZwb3MgPiAtMSAmJiBj
cnBvcyA+IC0xKSB8fCBjcnBvcyA8IDApID8gIlxuIiA6ICJcciI7Ci0KLSAgICAgICAgdmFyIGxp
bmVzID0gc3RyLnNwbGl0KGxpbmVicmVhayk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGxpbmVzW2ldID0gZGlmZmxpYi5zdHJp
cExpbmVicmVha3MobGluZXNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGxpbmVz
OwotICAgIH0sCi0KLSAgICAvLyBpdGVyYXRpb24tYmFzZWQgcmVkdWNlIGltcGxlbWVudGF0aW9u
Ci0gICAgX19yZWR1Y2U6IGZ1bmN0aW9uIChmdW5jLCBsaXN0LCBpbml0aWFsKSB7Ci0gICAgICAg
IGlmIChpbml0aWFsICE9IG51bGwpIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGluaXRpYWw7
Ci0gICAgICAgICAgICB2YXIgaWR4ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChsaXN0KSB7Ci0g
ICAgICAgICAgICB2YXIgdmFsdWUgPSBsaXN0WzBdOwotICAgICAgICAgICAgdmFyIGlkeCA9IDE7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAoOyBpZHggPCBsaXN0Lmxlbmd0aDsgaWR4KyspIHsKLSAgICAgICAgICAg
IHZhbHVlID0gZnVuYyh2YWx1ZSwgbGlzdFtpZHhdKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9LAotCi0gICAgLy8gY29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igc29y
dGluZyBsaXN0cyBvZiBudW1lcmljIHR1cGxlcwotICAgIF9fbnR1cGxlY29tcDogZnVuY3Rpb24g
KGEsIGIpIHsKLSAgICAgICAgdmFyIG1sZW4gPSBNYXRoLm1heChhLmxlbmd0aCwgYi5sZW5ndGgp
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1sZW47IGkrKykgewotICAgICAgICAgICAg
aWYgKGFbaV0gPCBiW2ldKSByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoYVtpXSA+IGJbaV0p
IHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09IGIubGVu
Z3RoID8gMCA6IChhLmxlbmd0aCA8IGIubGVuZ3RoID8gLTEgOiAxKTsKLSAgICB9LAotCi0gICAg
X19jYWxjdWxhdGVfcmF0aW86IGZ1bmN0aW9uIChtYXRjaGVzLCBsZW5ndGgpIHsKLSAgICAgICAg
cmV0dXJuIGxlbmd0aCA/IDIuMCAqIG1hdGNoZXMgLyBsZW5ndGggOiAxLjA7Ci0gICAgfSwKLQot
ICAgIC8vIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIGtleSBwYXNz
ZWQgdG8gdGhlIHJldHVybmVkIGZ1bmN0aW9uCi0gICAgLy8gaXMgaW4gdGhlIGRpY3QgKGpzIG9i
amVjdCkgcHJvdmlkZWQgdG8gdGhpcyBmdW5jdGlvbjsgcmVwbGFjZXMgYmVpbmcgYWJsZSB0bwot
ICAgIC8vIGNhcnJ5IGFyb3VuZCBkaWN0Lmhhc19rZXkgaW4gcHl0aG9uLi4uCi0gICAgX19pc2lu
ZGljdDogZnVuY3Rpb24gKGRpY3QpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChrZXkpIHsg
cmV0dXJuIGRpY3QuaGFzT3duUHJvcGVydHkoa2V5KTsgfTsKLSAgICB9LAotCi0gICAgLy8gcmVw
bGFjZW1lbnQgZm9yIHB5dGhvbidzIGRpY3QuZ2V0IGZ1bmN0aW9uIC0tIG5lZWQgZWFzeSBkZWZh
dWx0IHZhbHVlcwotICAgIF9fZGljdGdldDogZnVuY3Rpb24gKGRpY3QsIGtleSwgZGVmYXVsdFZh
bHVlKSB7Ci0gICAgICAgIHJldHVybiBkaWN0Lmhhc093blByb3BlcnR5KGtleSkgPyBkaWN0W2tl
eV0gOiBkZWZhdWx0VmFsdWU7Ci0gICAgfSwgIAotCi0gICAgU2VxdWVuY2VNYXRjaGVyOiBmdW5j
dGlvbiAoYSwgYiwgaXNqdW5rKSB7Ci0gICAgICAgIHRoaXMuc2V0X3NlcXMgPSBmdW5jdGlvbiAo
YSwgYikgewotICAgICAgICAgICAgdGhpcy5zZXRfc2VxMShhKTsKLSAgICAgICAgICAgIHRoaXMu
c2V0X3NlcTIoYik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnNldF9zZXExID0gZnVuY3Rp
b24gKGEpIHsKLSAgICAgICAgICAgIGlmIChhID09IHRoaXMuYSkgcmV0dXJuOwotICAgICAgICAg
ICAgdGhpcy5hID0gYTsKLSAgICAgICAgICAgIHRoaXMubWF0Y2hpbmdfYmxvY2tzID0gdGhpcy5v
cGNvZGVzID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuc2V0X3NlcTIgPSBmdW5j
dGlvbiAoYikgewotICAgICAgICAgICAgaWYgKGIgPT0gdGhpcy5iKSByZXR1cm47Ci0gICAgICAg
ICAgICB0aGlzLmIgPSBiOwotICAgICAgICAgICAgdGhpcy5tYXRjaGluZ19ibG9ja3MgPSB0aGlz
Lm9wY29kZXMgPSB0aGlzLmZ1bGxiY291bnQgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5fX2No
YWluX2IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX19jaGFpbl9iID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIGIgPSB0aGlzLmI7Ci0gICAgICAgICAgICB2YXIgbiA9IGIu
bGVuZ3RoOwotICAgICAgICAgICAgdmFyIGIyaiA9IHRoaXMuYjJqID0ge307Ci0gICAgICAgICAg
ICB2YXIgcG9wdWxhcmRpY3QgPSB7fTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Yi5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBlbHQgPSBiW2ldOwotICAgICAg
ICAgICAgICAgIGlmIChiMmouaGFzT3duUHJvcGVydHkoZWx0KSkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgaW5kaWNlcyA9IGIyaltlbHRdOwotICAgICAgICAgICAgICAgICAgICBpZiAobiA+
PSAyMDAgJiYgaW5kaWNlcy5sZW5ndGggKiAxMDAgPiBuKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwb3B1bGFyZGljdFtlbHRdID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBiMmpbZWx0XTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGljZXMucHVzaChpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGIyaltlbHRdID0gW2ldOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh2YXIg
ZWx0IGluIHBvcHVsYXJkaWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcHVsYXJkaWN0Lmhh
c093blByb3BlcnR5KGVsdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGIyaltlbHRd
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGlz
anVuayA9IHRoaXMuaXNqdW5rOwotICAgICAgICAgICAgdmFyIGp1bmtkaWN0ID0ge307Ci0gICAg
ICAgICAgICBpZiAoaXNqdW5rKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgZWx0IGluIHBv
cHVsYXJkaWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb3B1bGFyZGljdC5oYXNPd25Q
cm9wZXJ0eShlbHQpICYmIGlzanVuayhlbHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
dW5rZGljdFtlbHRdID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwb3B1bGFy
ZGljdFtlbHRdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGVsdCBpbiBiMmopIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGIyai5oYXNPd25Qcm9wZXJ0eShlbHQpICYmIGlzanVuayhlbHQpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqdW5rZGljdFtlbHRdID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSBiMmpbZWx0XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5pc2JqdW5rID0gZGlmZmxpYi5f
X2lzaW5kaWN0KGp1bmtkaWN0KTsKLSAgICAgICAgICAgIHRoaXMuaXNicG9wdWxhciA9IGRpZmZs
aWIuX19pc2luZGljdChwb3B1bGFyZGljdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmZp
bmRfbG9uZ2VzdF9tYXRjaCA9IGZ1bmN0aW9uIChhbG8sIGFoaSwgYmxvLCBiaGkpIHsKLSAgICAg
ICAgICAgIHZhciBhID0gdGhpcy5hOwotICAgICAgICAgICAgdmFyIGIgPSB0aGlzLmI7Ci0gICAg
ICAgICAgICB2YXIgYjJqID0gdGhpcy5iMmo7Ci0gICAgICAgICAgICB2YXIgaXNianVuayA9IHRo
aXMuaXNianVuazsKLSAgICAgICAgICAgIHZhciBiZXN0aSA9IGFsbzsKLSAgICAgICAgICAgIHZh
ciBiZXN0aiA9IGJsbzsKLSAgICAgICAgICAgIHZhciBiZXN0c2l6ZSA9IDA7Ci0gICAgICAgICAg
ICB2YXIgaiA9IG51bGw7Ci0KLSAgICAgICAgICAgIHZhciBqMmxlbiA9IHt9OwotICAgICAgICAg
ICAgdmFyIG5vdGhpbmcgPSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSBhbG87IGkgPCBh
aGk7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBuZXdqMmxlbiA9IHt9OwotICAgICAgICAg
ICAgICAgIHZhciBqZGljdCA9IGRpZmZsaWIuX19kaWN0Z2V0KGIyaiwgYVtpXSwgbm90aGluZyk7
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgamtleSBpbiBqZGljdCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoamRpY3QuaGFzT3duUHJvcGVydHkoamtleSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGogPSBqZGljdFtqa2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChq
IDwgYmxvKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID49IGJoaSkg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdqMmxlbltqXSA9IGsgPSBkaWZmbGli
Ll9fZGljdGdldChqMmxlbiwgaiAtIDEsIDApICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChrID4gYmVzdHNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0aSA9
IGkgLSBrICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0aiA9IGogLSBrICsg
MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0c2l6ZSA9IGs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgajJsZW4gPSBuZXdqMmxlbjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgd2hpbGUgKGJlc3RpID4gYWxvICYmIGJlc3RqID4gYmxvICYmICFpc2JqdW5rKGJb
YmVzdGogLSAxXSkgJiYgYVtiZXN0aSAtIDFdID09IGJbYmVzdGogLSAxXSkgewotICAgICAgICAg
ICAgICAgIGJlc3RpLS07Ci0gICAgICAgICAgICAgICAgYmVzdGotLTsKLSAgICAgICAgICAgICAg
ICBiZXN0c2l6ZSsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAoYmVzdGkg
KyBiZXN0c2l6ZSA8IGFoaSAmJiBiZXN0aiArIGJlc3RzaXplIDwgYmhpICYmCi0gICAgICAgICAg
ICAgICAgICAgICFpc2JqdW5rKGJbYmVzdGogKyBiZXN0c2l6ZV0pICYmCi0gICAgICAgICAgICAg
ICAgICAgIGFbYmVzdGkgKyBiZXN0c2l6ZV0gPT0gYltiZXN0aiArIGJlc3RzaXplXSkgewotICAg
ICAgICAgICAgICAgIGJlc3RzaXplKys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdo
aWxlIChiZXN0aSA+IGFsbyAmJiBiZXN0aiA+IGJsbyAmJiBpc2JqdW5rKGJbYmVzdGogLSAxXSkg
JiYgYVtiZXN0aSAtIDFdID09IGJbYmVzdGogLSAxXSkgewotICAgICAgICAgICAgICAgIGJlc3Rp
LS07Ci0gICAgICAgICAgICAgICAgYmVzdGotLTsKLSAgICAgICAgICAgICAgICBiZXN0c2l6ZSsr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAoYmVzdGkgKyBiZXN0c2l6ZSA8
IGFoaSAmJiBiZXN0aiArIGJlc3RzaXplIDwgYmhpICYmIGlzYmp1bmsoYltiZXN0aiArIGJlc3Rz
aXplXSkgJiYKLSAgICAgICAgICAgICAgICAgICAgYVtiZXN0aSArIGJlc3RzaXplXSA9PSBiW2Jl
c3RqICsgYmVzdHNpemVdKSB7Ci0gICAgICAgICAgICAgICAgYmVzdHNpemUrKzsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIFtiZXN0aSwgYmVzdGosIGJlc3RzaXplXTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuZ2V0X21hdGNoaW5nX2Jsb2NrcyA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoaW5nX2Jsb2NrcyAhPSBudWxsKSByZXR1cm4g
dGhpcy5tYXRjaGluZ19ibG9ja3M7Ci0gICAgICAgICAgICB2YXIgbGEgPSB0aGlzLmEubGVuZ3Ro
OwotICAgICAgICAgICAgdmFyIGxiID0gdGhpcy5iLmxlbmd0aDsKLQotICAgICAgICAgICAgdmFy
IHF1ZXVlID0gW1swLCBsYSwgMCwgbGJdXTsKLSAgICAgICAgICAgIHZhciBtYXRjaGluZ19ibG9j
a3MgPSBbXTsKLSAgICAgICAgICAgIHZhciBhbG8sIGFoaSwgYmxvLCBiaGksIHFpLCBpLCBqLCBr
LCB4OwotICAgICAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkgewotICAgICAgICAgICAgICAg
IHFpID0gcXVldWUucG9wKCk7Ci0gICAgICAgICAgICAgICAgYWxvID0gcWlbMF07Ci0gICAgICAg
ICAgICAgICAgYWhpID0gcWlbMV07Ci0gICAgICAgICAgICAgICAgYmxvID0gcWlbMl07Ci0gICAg
ICAgICAgICAgICAgYmhpID0gcWlbM107Ci0gICAgICAgICAgICAgICAgeCA9IHRoaXMuZmluZF9s
b25nZXN0X21hdGNoKGFsbywgYWhpLCBibG8sIGJoaSk7Ci0gICAgICAgICAgICAgICAgaSA9IHhb
MF07Ci0gICAgICAgICAgICAgICAgaiA9IHhbMV07Ci0gICAgICAgICAgICAgICAgayA9IHhbMl07
Ci0KLSAgICAgICAgICAgICAgICBpZiAoaykgewotICAgICAgICAgICAgICAgICAgICBtYXRjaGlu
Z19ibG9ja3MucHVzaCh4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFsbyA8IGkgJiYgYmxv
IDwgaikKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goW2FsbywgaSwgYmxvLCBq
XSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpK2sgPCBhaGkgJiYgaitrIDwgYmhpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChbaSArIGssIGFoaSwgaiArIGssIGJoaV0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWF0Y2hp
bmdfYmxvY2tzLnNvcnQoZGlmZmxpYi5fX250dXBsZWNvbXApOwotCi0gICAgICAgICAgICB2YXIg
aTEgPSBqMSA9IGsxID0gYmxvY2sgPSAwOwotICAgICAgICAgICAgdmFyIG5vbl9hZGphY2VudCA9
IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgaWR4IGluIG1hdGNoaW5nX2Jsb2NrcykgewotICAg
ICAgICAgICAgICAgIGlmIChtYXRjaGluZ19ibG9ja3MuaGFzT3duUHJvcGVydHkoaWR4KSkgewot
ICAgICAgICAgICAgICAgICAgICBibG9jayA9IG1hdGNoaW5nX2Jsb2Nrc1tpZHhdOwotICAgICAg
ICAgICAgICAgICAgICBpMiA9IGJsb2NrWzBdOwotICAgICAgICAgICAgICAgICAgICBqMiA9IGJs
b2NrWzFdOwotICAgICAgICAgICAgICAgICAgICBrMiA9IGJsb2NrWzJdOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoaTEgKyBrMSA9PSBpMiAmJiBqMSArIGsxID09IGoyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBrMSArPSBrMjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChrMSkgbm9uX2FkamFjZW50LnB1c2goW2kxLCBqMSwg
azFdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkxID0gaTI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqMSA9IGoyOwotICAgICAgICAgICAgICAgICAgICAgICAgazEgPSBrMjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGsxKSBub25fYWRqYWNlbnQucHVzaChbaTEsIGoxLCBrMV0pOwotCi0gICAg
ICAgICAgICBub25fYWRqYWNlbnQucHVzaChbbGEsIGxiLCAwXSk7Ci0gICAgICAgICAgICB0aGlz
Lm1hdGNoaW5nX2Jsb2NrcyA9IG5vbl9hZGphY2VudDsKLSAgICAgICAgICAgIHJldHVybiB0aGlz
Lm1hdGNoaW5nX2Jsb2NrczsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZ2V0X29wY29kZXMg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5vcGNvZGVzICE9IG51bGwpIHJl
dHVybiB0aGlzLm9wY29kZXM7Ci0gICAgICAgICAgICB2YXIgaSA9IDA7Ci0gICAgICAgICAgICB2
YXIgaiA9IDA7Ci0gICAgICAgICAgICB2YXIgYW5zd2VyID0gW107Ci0gICAgICAgICAgICB0aGlz
Lm9wY29kZXMgPSBhbnN3ZXI7Ci0gICAgICAgICAgICB2YXIgYmxvY2ssIGFpLCBiaiwgc2l6ZSwg
dGFnOwotICAgICAgICAgICAgdmFyIGJsb2NrcyA9IHRoaXMuZ2V0X21hdGNoaW5nX2Jsb2Nrcygp
OwotICAgICAgICAgICAgZm9yICh2YXIgaWR4IGluIGJsb2NrcykgewotICAgICAgICAgICAgICAg
IGlmIChibG9ja3MuaGFzT3duUHJvcGVydHkoaWR4KSkgewotICAgICAgICAgICAgICAgICAgICBi
bG9jayA9IGJsb2Nrc1tpZHhdOwotICAgICAgICAgICAgICAgICAgICBhaSA9IGJsb2NrWzBdOwot
ICAgICAgICAgICAgICAgICAgICBiaiA9IGJsb2NrWzFdOwotICAgICAgICAgICAgICAgICAgICBz
aXplID0gYmxvY2tbMl07Ci0gICAgICAgICAgICAgICAgICAgIHRhZyA9ICcnOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA8IGFpICYmIGogPCBiaikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGFnID0gJ3JlcGxhY2UnOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCBh
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gJ2RlbGV0ZSc7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaiA8IGJqKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
YWcgPSAnaW5zZXJ0JzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBpZiAodGFnKSBhbnN3ZXIucHVzaChbdGFnLCBpLCBhaSwgaiwgYmpdKTsKLSAgICAgICAgICAg
ICAgICAgICAgaSA9IGFpICsgc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgaiA9IGJqICsgc2l6
ZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSkgYW5zd2VyLnB1c2goWydlcXVhbCcs
IGFpLCBpLCBiaiwgal0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuIGFuc3dlcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoaXMgaXMg
YSBnZW5lcmF0b3IgZnVuY3Rpb24gaW4gdGhlIHB5dGhvbiBsaWIsIHdoaWNoIG9mIGNvdXJzZSBp
cyBub3Qgc3VwcG9ydGVkIGluIGphdmFzY3JpcHQKLSAgICAgICAgLy8gdGhlIHJlaW1wbGVtZW50
YXRpb24gYnVpbGRzIHVwIHRoZSBncm91cGVkIG9wY29kZXMgaW50byBhIGxpc3QgaW4gdGhlaXIg
ZW50aXJldHkgYW5kIHJldHVybnMgdGhhdC4KLSAgICAgICAgdGhpcy5nZXRfZ3JvdXBlZF9vcGNv
ZGVzID0gZnVuY3Rpb24gKG4pIHsKLSAgICAgICAgICAgIGlmICghbikgbiA9IDM7Ci0gICAgICAg
ICAgICB2YXIgY29kZXMgPSB0aGlzLmdldF9vcGNvZGVzKCk7Ci0gICAgICAgICAgICBpZiAoIWNv
ZGVzKSBjb2RlcyA9IFtbImVxdWFsIiwgMCwgMSwgMCwgMV1dOwotICAgICAgICAgICAgdmFyIGNv
ZGUsIHRhZywgaTEsIGkyLCBqMSwgajI7Ci0gICAgICAgICAgICBpZiAoY29kZXNbMF1bMF0gPT0g
J2VxdWFsJykgewotICAgICAgICAgICAgICAgIGNvZGUgPSBjb2Rlc1swXTsKLSAgICAgICAgICAg
ICAgICB0YWcgPSBjb2RlWzBdOwotICAgICAgICAgICAgICAgIGkxID0gY29kZVsxXTsKLSAgICAg
ICAgICAgICAgICBpMiA9IGNvZGVbMl07Ci0gICAgICAgICAgICAgICAgajEgPSBjb2RlWzNdOwot
ICAgICAgICAgICAgICAgIGoyID0gY29kZVs0XTsKLSAgICAgICAgICAgICAgICBjb2Rlc1swXSA9
IFt0YWcsIE1hdGgubWF4KGkxLCBpMiAtIG4pLCBpMiwgTWF0aC5tYXgoajEsIGoyIC0gbiksIGoy
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2Rlc1tjb2Rlcy5sZW5ndGggLSAx
XVswXSA9PSAnZXF1YWwnKSB7Ci0gICAgICAgICAgICAgICAgY29kZSA9IGNvZGVzW2NvZGVzLmxl
bmd0aCAtIDFdOwotICAgICAgICAgICAgICAgIHRhZyA9IGNvZGVbMF07Ci0gICAgICAgICAgICAg
ICAgaTEgPSBjb2RlWzFdOwotICAgICAgICAgICAgICAgIGkyID0gY29kZVsyXTsKLSAgICAgICAg
ICAgICAgICBqMSA9IGNvZGVbM107Ci0gICAgICAgICAgICAgICAgajIgPSBjb2RlWzRdOwotICAg
ICAgICAgICAgICAgIGNvZGVzW2NvZGVzLmxlbmd0aCAtIDFdID0gW3RhZywgaTEsIE1hdGgubWlu
KGkyLCBpMSArIG4pLCBqMSwgTWF0aC5taW4oajIsIGoxICsgbildOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgbm4gPSBuICsgbjsKLSAgICAgICAgICAgIHZhciBncm91cHMgPSBb
XTsKLSAgICAgICAgICAgIGZvciAodmFyIGlkeCBpbiBjb2RlcykgewotICAgICAgICAgICAgICAg
IGlmIChjb2Rlcy5oYXNPd25Qcm9wZXJ0eShpZHgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
ZGUgPSBjb2Rlc1tpZHhdOwotICAgICAgICAgICAgICAgICAgICB0YWcgPSBjb2RlWzBdOwotICAg
ICAgICAgICAgICAgICAgICBpMSA9IGNvZGVbMV07Ci0gICAgICAgICAgICAgICAgICAgIGkyID0g
Y29kZVsyXTsKLSAgICAgICAgICAgICAgICAgICAgajEgPSBjb2RlWzNdOwotICAgICAgICAgICAg
ICAgICAgICBqMiA9IGNvZGVbNF07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gJ2Vx
dWFsJyAmJiBpMiAtIGkxID4gbm4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwcy5w
dXNoKFt0YWcsIGkxLCBNYXRoLm1pbihpMiwgaTEgKyBuKSwgajEsIE1hdGgubWluKGoyLCBqMSAr
IG4pXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpMSA9IE1hdGgubWF4KGkxLCBpMi1uKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGoxID0gTWF0aC5tYXgoajEsIGoyLW4pOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2goW3RhZywg
aTEsIGkyLCBqMSwgajJdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChncm91cHMgJiYgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXVswXSA9PSAn
ZXF1YWwnKSBncm91cHMucG9wKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBncm91cHM7Ci0gICAg
ICAgIH0KLQotICAgICAgICB0aGlzLnJhdGlvID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
bWF0Y2hlcyA9IGRpZmZsaWIuX19yZWR1Y2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gKHN1bSwgdHJpcGxlKSB7IHJldHVybiBzdW0gKyB0cmlwbGVbdHJpcGxlLmxlbmd0
aCAtIDFdOyB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0X21hdGNoaW5n
X2Jsb2NrcygpLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBkaWZmbGliLl9fY2FsY3VsYXRlX3Jh
dGlvKG1hdGNoZXMsIHRoaXMuYS5sZW5ndGggKyB0aGlzLmIubGVuZ3RoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMucXVpY2tfcmF0aW8gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2
YXIgZnVsbGJjb3VudCwgZWx0OwotICAgICAgICAgICAgaWYgKHRoaXMuZnVsbGJjb3VudCA9PSBu
dWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5mdWxsYmNvdW50ID0gZnVsbGJjb3VudCA9IHt9
OwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5iLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsdCA9IHRoaXMuYltpXTsKLSAgICAgICAgICAgICAg
ICAgICAgZnVsbGJjb3VudFtlbHRdID0gZGlmZmxpYi5fX2RpY3RnZXQoZnVsbGJjb3VudCwgZWx0
LCAwKSArIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZnVsbGJjb3VudCA9IHRoaXMuZnVsbGJjb3VudDsKLQotICAgICAgICAgICAgdmFyIGF2YWlsID0g
e307Ci0gICAgICAgICAgICB2YXIgYXZhaWxoYXMgPSBkaWZmbGliLl9faXNpbmRpY3QoYXZhaWwp
OwotICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBudW1iID0gMDsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5hLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZWx0
ID0gdGhpcy5hW2ldOwotICAgICAgICAgICAgICAgIGlmIChhdmFpbGhhcyhlbHQpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG51bWIgPSBhdmFpbFtlbHRdOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bWIgPSBkaWZmbGliLl9fZGljdGdldChmdWxsYmNv
dW50LCBlbHQsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhdmFpbFtl
bHRdID0gbnVtYiAtIDE7Ci0gICAgICAgICAgICAgICAgaWYgKG51bWIgPiAwKSBtYXRjaGVzKys7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBkaWZmbGliLl9fY2FsY3VsYXRl
X3JhdGlvKG1hdGNoZXMsIHRoaXMuYS5sZW5ndGggKyB0aGlzLmIubGVuZ3RoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMucmVhbF9xdWlja19yYXRpbyA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHZhciBsYSA9IHRoaXMuYS5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgbGIgPSB0aGlz
LmIubGVuZ3RoOwotICAgICAgICAgICAgcmV0dXJuIF9jYWxjdWxhdGVfcmF0aW8oTWF0aC5taW4o
bGEsIGxiKSwgbGEgKyBsYik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmlzanVuayA9IGlz
anVuayA/IGlzanVuayA6IGRpZmZsaWIuZGVmYXVsdEp1bmtGdW5jdGlvbjsKLSAgICAgICAgdGhp
cy5hID0gdGhpcy5iID0gbnVsbDsKLSAgICAgICAgdGhpcy5zZXRfc2VxcyhhLCBiKTsKLSAgICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25hdmln
YXRvclZpZXcuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9uYXZpZ2F0
b3JWaWV3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNmMDNlMi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25hdmlnYXRvclZpZXcu
Y3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBbnRob255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLm5hdmlnYXRv
ci1kb21haW4tdHJlZS1pdGVtIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2RvbWFp
bi5wbmcpOwotfQotCi0ubmF2aWdhdG9yLWZvbGRlci10cmVlLWl0ZW0gLmljb24gewotICAgIG9w
YWNpdHk6IDAuNzsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2ZyYW1lLnBuZyk7Ci19Ci0KLS5u
YXZpZ2F0b3Itc2NyaXB0LXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAgY29udGVudDogdXJsKEltYWdl
cy9yZXNvdXJjZUpTSWNvbi5wbmcpOwotfQotCi0ubmF2aWdhdG9yLXN0eWxlc2hlZXQtdHJlZS1p
dGVtIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jlc291cmNlQ1NTSWNvbi5wbmcp
OwotfQotCi0ubmF2aWdhdG9yLWRvY3VtZW50LXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAgY29udGVu
dDogdXJsKEltYWdlcy9yZXNvdXJjZURvY3VtZW50SWNvbi5wbmcpOwotfQotCi0ubmF2aWdhdG9y
LW90aGVyLXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9yZXNvdXJj
ZVBsYWluSWNvbi5wbmcpOwotfQotCi0ubmF2aWdhdG9yID4gb2wgewotICAgIG1pbi1oZWlnaHQ6
IDEwMCU7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotfQotCi0ubmF2aWdhdG9yIGxpIHsK
LSAgICBoZWlnaHQ6IDE4cHg7Ci0gICAgbGluZS1oZWlnaHQ6IDE3cHg7Ci0gICAgd2hpdGUtc3Bh
Y2U6IG5vd3JhcDsKLX0KLQotLm5hdmlnYXRvciA6Zm9jdXMgbGkuc2VsZWN0ZWQgewotICAgIGNv
bG9yOiB3aGl0ZTsKLX0KLQotLm5hdmlnYXRvciBsaS5zZWxlY3RlZCAuc2VsZWN0aW9uIHsKLSAg
ICBoZWlnaHQ6IDE4cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE4MCwgMTgwLCAxODAp
OwotfQotCi0ubmF2aWdhdG9yIDpmb2N1cyBsaS5zZWxlY3RlZCAuc2VsZWN0aW9uIHsKLSAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTExLCAxNDAsIDIxMCk7Ci19Ci0KLS5uYXZpZ2F0b3IgLnNl
YXJjaC1tYXRjaC1mb3VuZCBsaS5zZWxlY3RlZCAuc2VsZWN0aW9uIHsKLSAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMTExLCAxNDAsIDIxMCk7Ci19Ci0KLS5uYXZpZ2F0b3IgLnNlYXJjaC1tYXRj
aC1ub3QtZm91bmQgbGkuc2VsZWN0ZWQgLnNlbGVjdGlvbiB7Ci0gICAgYm9yZGVyLWNvbG9yOiBy
Z2IoMTExLCAxNDAsIDIxMCk7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci19Ci0KLS5u
YXZpZ2F0b3IgLnNlYXJjaGluZyBsaS5zZWxlY3RlZCAuc2VsZWN0aW9uIHsKLSAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZ2IoMTExLCAxNDAsIDIxMCk7Ci19Ci0KLS5uYXZpZ2F0b3IgLmljb24gewot
ICAgIHdpZHRoOiAxNnB4OwotICAgIGhlaWdodDogMTZweDsKLSAgICBmbG9hdDogbGVmdDsKLX0K
LQotLm5hdmlnYXRvciAuYmFzZS1uYXZpZ2F0b3ItdHJlZS1lbGVtZW50LXRpdGxlIHsKLSAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHBhZGRp
bmctbGVmdDogMnB4OwotfQotCi0ubmF2aWdhdG9yIC5iYXNlLW5hdmlnYXRvci10cmVlLWVsZW1l
bnQtdGl0bGUuZWRpdGluZyB7Ci0gICAgbWFyZ2luOiBhdXRvOwotfQotCi0ubmF2aWdhdG9yLXRy
ZWUtc2VhcmNoLWJveCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGhlaWdodDogMjZweDsKLSAgICB3
aWR0aDogMTAwcHg7Ci0gICAgei1pbmRleDogMTsKLSAgICBwYWRkaW5nOiAxcHg7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiKDExMSwgMTQwLCAyMTApOwotICAgIGJvcmRlcjogMnB4IHNvbGlk
IGxpZ2h0Z3JheTsKLX0KLQotLm5hdmlnYXRvci10cmVlLXNlYXJjaC1ib3gudmlzaWJsZSB7Ci0g
ICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5uYXZpZ2F0b3ItdHJlZS1zZWFyY2gtYm94ID4gaW5w
dXQgewotICAgIHdpZHRoOiAxMDAlOwotICAgIGhlaWdodDogMTAwJTsKLX0KLQotLm5hdmlnYXRv
ci10YWJiZWQtcGFuZSAudGFiYmVkLXBhbmUtY29udGVudCB7Ci0gICAgb3ZlcmZsb3c6IGhpZGRl
bjsKLX0KLQotLm5hdmlnYXRvci10YWJiZWQtcGFuZSAubmF2aWdhdG9yLWNvbnRhaW5lciB7Ci0g
ICAgb3ZlcmZsb3c6IGF1dG87Ci19Ci0KLS5uYXZpZ2F0b3ItdGFiYmVkLXBhbmUgLm5hdmlnYXRv
ciB7Ci0gICAgcGFkZGluZy1sZWZ0OiAwOwotfQotCi0ubmF2aWdhdG9yLXRhYmJlZC1wYW5lIC50
YWJiZWQtcGFuZS1oZWFkZXIgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGll
bnQobGluZWFyLCAwJSAwJSwgMCUgMTAwJSwgZnJvbSgjRjVGNUY1KSwgdG8oI0U1RTVFNSkpOwot
fQotCi0ubmF2aWdhdG9yLXRhYmJlZC1wYW5lIC50YWJiZWQtcGFuZS1oZWFkZXItY29udGVudHMg
ewotICAgIG1hcmdpbi1sZWZ0OiAycHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAyOHB4OwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9uZXR3b3JrTG9nVmll
dy5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtMb2dWaWV3
LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYxNzNkNC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtMb2dWaWV3LmNzcwor
KysgL2Rldi9udWxsCkBAIC0xLDU0MCArMCwwIEBACi0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdy
aWQgewotICAgIGJvcmRlcjogbm9uZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9w
OiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotfQotCi0u
bmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgdGFibGUuZGF0YSB7Ci0gICAgLXdlYmtpdC1iYWNr
Z3JvdW5kLXNpemU6IDFweCA4MnB4OwotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3Jh
ZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiYSgwLCAwLCAwLCAw
KSksIGNvbG9yLXN0b3AoMC41LCByZ2JhKDAsIDAsIDAsIDApKSwgY29sb3Itc3RvcCgwLjUsIHJn
YmEoMCwgMCwgMCwgMC4wNSkpLCB0byhyZ2JhKDAsIDAsIDAsIDAuMDUpKSk7Ci19Ci0KLS5uZXR3
b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZC5zbWFsbCB0YWJsZS5kYXRhIHsKLSAgICAtd2Via2l0LWJh
Y2tncm91bmQtc2l6ZTogMXB4IDQycHg7Ci19Ci0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3Jp
ZCB0ZCB7Ci0gICAgbGluZS1oZWlnaHQ6IDE3cHg7Ci0gICAgaGVpZ2h0OiA0MXB4OwotICAgIGJv
cmRlci1yaWdodDogMXB4IHNvbGlkIHJnYigyMTAsIDIxMCwgMjEwKTsKLSAgICB2ZXJ0aWNhbC1h
bGlnbjogbWlkZGxlOwotfQotCi0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQuc21hbGwgdGQg
ewotICAgIGhlaWdodDogMjFweDsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkIHRo
IHsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDY0JSwgNjQlLCA2NCUpOwotICAg
IGhlaWdodDogMzBweDsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkLnNtYWxsIHRo
IHsKLSAgICBoZWlnaHQ6IDIycHg7Ci19Ci0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZCB0
aCwgLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkIHRoLnNvcnQtZGVzY2VuZGluZywgLm5ldHdv
cmstbG9nLWdyaWQuZGF0YS1ncmlkIHRoLnNvcnQtYXNjZW5kaW5nIHsKLSAgICBiYWNrZ3JvdW5k
OiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJn
YigyMzYsIDIzNiwgMjM2KSksIHRvKHJnYigyMTcsIDIxNywgMjE3KSkpOwotfQotCi0ubmV0d29y
ay1sb2ctZ3JpZC5kYXRhLWdyaWQgLmRhdGEtY29udGFpbmVyIHsKLSAgICB0b3A6IDMxcHg7Ci19
Ci0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZC5zbWFsbCAuZGF0YS1jb250YWluZXIgewot
ICAgIHRvcDogMjNweDsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkIHNlbGVjdCB7
Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwotICAgIGJhY2tncm91bmQtY29sb3I6IHRy
YW5zcGFyZW50OwotICAgIGJvcmRlcjogbm9uZTsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250
LXNpemU6IGluaGVyaXQ7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci19Ci0KLS5uZXR3b3JrLWxvZy1n
cmlkLmRhdGEtZ3JpZC5zbWFsbCB0ci5vZmZzY3JlZW4gewotICAgIGhlaWdodDogMjFweDsKLX0K
LQotLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkIHRyLm9mZnNjcmVlbiB7Ci0gICAgaGVpZ2h0
OiA0MXB4OwotfQotCi0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgdHIub2Zmc2NyZWVuID4g
dGQgPiBkaXYgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5uZXR3b3JrLWxvZy1ncmlkLmRh
dGEtZ3JpZCB0ci5maWxsZXIgewotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotfQotCi0u
bmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgdHI6bm90KC5maWxsZXIpIHRkLm5hbWUtY29sdW1u
IHsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci19Ci0KLSNuZXR3b3JrLWNvbnRhaW5lcjpub3QoLmJy
aWVmLW1vZGUpIC5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZCB0ZC5uYW1lLWNvbHVtbjpob3Zl
ciB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci19Ci0KLS5uZXR3b3JrLWxvZy1n
cmlkLmRhdGEtZ3JpZC5zbWFsbCAubmV0d29yay1ncmFwaC1zaWRlIHsKLSAgICBoZWlnaHQ6IDE0
cHg7Ci19Ci0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZCB0aC5zb3J0YWJsZTphY3RpdmUg
ewotICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDsKLX0KLQotLm5ldHdvcmst
Y2VsbC1zdWJ0aXRsZSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBjb2xvcjogZ3Jh
eTsKLX0KLQotLm5ldHdvcmstZXJyb3Itcm93LCAubmV0d29yay1lcnJvci1yb3cgLm5ldHdvcmst
Y2VsbC1zdWJ0aXRsZSB7Ci0gICAgY29sb3I6IHJnYigyMzAsIDAsIDApOwotfQotCi0uaW5pdGlh
dG9yLWNvbHVtbiBhIHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0KLQotLm5ldHdvcmstbG9nLWdy
aWQuZGF0YS1ncmlkIHRyLnNlbGVjdGVkIC5uZXR3b3JrLWNlbGwtc3VidGl0bGUgewotICAgIGNv
bG9yOiB3aGl0ZTsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQgdHIuaGlnaGxpZ2h0ZWQtcm93IHsK
LSAgICAtd2Via2l0LWFuaW1hdGlvbjogIm5ldHdvcmstcm93LWhpZ2hsaWdodC1mYWRlb3V0IiAy
cyAwczsKLX0KLQotQC13ZWJraXQta2V5ZnJhbWVzIG5ldHdvcmstcm93LWhpZ2hsaWdodC1mYWRl
b3V0IHsKLSAgICBmcm9tIHtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU2LCAxMjEsIDIxNywgMSk7
IH0KLSAgICB0byB7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTYsIDEyMSwgMjE3LCAwKTsgfQot
fQotCi0ubmV0d29yay1oZWFkZXItc3VidGl0bGUgewotICAgIGNvbG9yOiBncmF5OwotfQotCi0u
bmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQuc21hbGwgLm5ldHdvcmstY2VsbC1zdWJ0aXRsZSwK
LS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZC5zbWFsbCAubmV0d29yay1oZWFkZXItc3VidGl0
bGUKLXsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0vKiBSZXNvdXJjZSBwcmV2aWV3IGljb25z
ICovCi0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZCAuaWNvbiB7Ci0gICAgY29udGVudDog
dXJsKEltYWdlcy9yZXNvdXJjZVBsYWluSWNvbi5wbmcpOwotfQotCi0ubmV0d29yay1sb2ctZ3Jp
ZC5kYXRhLWdyaWQuc21hbGwgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcmVzb3Vy
Y2VQbGFpbkljb25TbWFsbC5wbmcpOwotfQotCi0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQg
Lm5ldHdvcmstdHlwZS1zY3JpcHQgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcmVz
b3VyY2VKU0ljb24ucG5nKTsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkLnNtYWxs
IC5uZXR3b3JrLXR5cGUtc2NyaXB0IC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jl
c291cmNlRG9jdW1lbnRJY29uU21hbGwucG5nKTsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQuZGF0
YS1ncmlkIC5uZXR3b3JrLXR5cGUtZG9jdW1lbnQgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJ
bWFnZXMvcmVzb3VyY2VEb2N1bWVudEljb24ucG5nKTsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQu
ZGF0YS1ncmlkLnNtYWxsIC5uZXR3b3JrLXR5cGUtZG9jdW1lbnQgLmljb24gewotICAgIGNvbnRl
bnQ6IHVybChJbWFnZXMvcmVzb3VyY2VEb2N1bWVudEljb25TbWFsbC5wbmcpOwotfQotCi0ubmV0
d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgLm5ldHdvcmstdHlwZS1zdHlsZXNoZWV0IC5pY29uIHsK
LSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jlc291cmNlQ1NTSWNvbi5wbmcpOwotfQotCi0ubmV0
d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQuc21hbGwgLm5ldHdvcmstdHlwZS1zdHlsZXNoZWV0IC5p
Y29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jlc291cmNlRG9jdW1lbnRJY29uU21hbGwu
cG5nKTsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkIC5uZXR3b3JrLXR5cGUtaW1h
Z2UgLmljb24gewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBiYWNrZ3JvdW5kLWltYWdl
OiB1cmwoSW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uLnBuZyk7Ci0gICAgYmFja2dyb3VuZC1yZXBl
YXQ6IG5vLXJlcGVhdDsKLSAgICBjb250ZW50OiAiIjsKLX0KLQotLm5ldHdvcmstbG9nLWdyaWQu
ZGF0YS1ncmlkLnNtYWxsIC5uZXR3b3JrLXR5cGUtaW1hZ2UgLmljb24gewotICAgIGJhY2tncm91
bmQtaW1hZ2U6IHVybChJbWFnZXMvcmVzb3VyY2VQbGFpbkljb25TbWFsbC5wbmcpOwotICAgIGNv
bnRlbnQ6ICIiOwotfQotCi0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgLmljb24gewotICAg
IGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiAzMnB4OwotICAgIGhlaWdodDogMzJweDsKLSAgICBt
YXJnaW4tdG9wOiAxcHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAzcHg7Ci19Ci0KLS5uZXR3b3JrLWxv
Zy1ncmlkLmRhdGEtZ3JpZC5zbWFsbCAuaWNvbiB7Ci0gICAgd2lkdGg6IDE2cHg7Ci0gICAgaGVp
Z2h0OiAxNnB4OwotfQotCi0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgLmltYWdlLW5ldHdv
cmstaWNvbi1wcmV2aWV3IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgbWFyZ2luOiBh
dXRvOwotICAgIHRvcDogM3B4OwotICAgIGJvdHRvbTogNHB4OwotICAgIGxlZnQ6IDVweDsKLSAg
ICByaWdodDogNXB4OwotICAgIG1heC13aWR0aDogMThweDsKLSAgICBtYXgtaGVpZ2h0OiAyMXB4
OwotICAgIG1pbi13aWR0aDogMXB4OwotICAgIG1pbi1oZWlnaHQ6IDFweDsKLX0KLQotLm5ldHdv
cmstbG9nLWdyaWQuZGF0YS1ncmlkLnNtYWxsIC5pbWFnZS1uZXR3b3JrLWljb24tcHJldmlldyB7
Ci0gICAgdG9wOiAycHg7Ci0gICAgYm90dG9tOiAxcHg7Ci0gICAgbGVmdDogM3B4OwotICAgIHJp
Z2h0OiAzcHg7Ci0gICAgbWF4LXdpZHRoOiA4cHg7Ci0gICAgbWF4LWhlaWdodDogMTFweDsKLX0K
LQotLyogR3JhcGggc3R5bGVzICovCi0KLS5uZXR3b3JrLWdyYXBoLXNpZGUgewotICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKLSAgICBoZWlnaHQ6IDM2cHg7Ci0gICAgcGFkZGluZzogMDsKLSAgICB3
aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIG1hcmdpbi10b3A6IDFweDsKLSAgICBib3JkZXItdG9w
OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotLm5l
dHdvcmstZ3JhcGgtYmFyLWFyZWEgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6
IDA7Ci0gICAgYm90dG9tOiAwOwotfQotCi0ubmV0d29yay1ncmFwaC1iYXItYXJlYSwKLS5uZXR3
b3JrLXRpbWVsaW5lLWdyaWQgLnJlc291cmNlcy1kaXZpZGVycywKLS5uZXR3b3JrLXRpbWVsaW5l
LWdyaWQgLnJlc291cmNlcy1ldmVudC1kaXZpZGVycywKLS5uZXR3b3JrLXRpbWVsaW5lLWdyaWQg
LnJlc291cmNlcy1kaXZpZGVycy1sYWJlbC1iYXIgewotICAgIHJpZ2h0OiAxMnB4OwotICAgIGxl
ZnQ6IDEycHg7Ci19Ci0KLS5uZXR3b3JrLWdyYXBoLWxhYmVsIHsKLSAgICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBtYXJnaW46IGF1dG8gLTdw
eDsKLSAgICBoZWlnaHQ6IDEzcHg7Ci0gICAgbGluZS1oZWlnaHQ6IDEzcHg7Ci0gICAgZm9udC1z
aXplOiA5MCU7Ci0gICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7Ci0gICAgdGV4dC1zaGFk
b3c6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgMXB4IDAgMCwgcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjI1KSAtMXB4IDAgMCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMzMykgMCAxcHggMCwgcmdi
YSgyNTUsIDI1NSwgMjU1LCAwLjI1KSAwIC0xcHggMDsKLSAgICB6LWluZGV4OiAxNTA7Ci0gICAg
b3ZlcmZsb3c6IGhpZGRlbjsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgb3BhY2l0eTog
MDsKLSAgICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7Ci19
Ci0KLS5uZXR3b3JrLWdyYXBoLXNpZGU6aG92ZXIgLm5ldHdvcmstZ3JhcGgtbGFiZWwgewotICAg
IG9wYWNpdHk6IDE7Ci19Ci0KLS5uZXR3b3JrLWdyYXBoLWxhYmVsOmVtcHR5IHsKLSAgICBkaXNw
bGF5OiBub25lOwotfQotCi0ubmV0d29yay1ncmFwaC1sYWJlbC53YWl0aW5nIHsKLSAgICBtYXJn
aW4tcmlnaHQ6IDVweDsKLX0KLQotLm5ldHdvcmstZ3JhcGgtbGFiZWwud2FpdGluZy1yaWdodCB7
Ci0gICAgbWFyZ2luLWxlZnQ6IDVweDsKLX0KLQotLm5ldHdvcmstZ3JhcGgtbGFiZWwuYmVmb3Jl
IHsKLSAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpOwotICAgIHRleHQtc2hhZG93OiBub25l
OwotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIG1hcmdpbi1yaWdodDogMnB4OwotfQotCi0u
bmV0d29yay1ncmFwaC1sYWJlbC5iZWZvcmU6OmFmdGVyIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDJw
eDsKLSAgICBoZWlnaHQ6IDZweDsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2dyYXBoTGFiZWxD
YWxsb3V0TGVmdC5wbmcpOwotfQotCi0ubmV0d29yay1ncmFwaC1sYWJlbC5hZnRlciB7Ci0gICAg
Y29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTsKLSAgICB0ZXh0LXNoYWRvdzogbm9uZTsKLSAgICB0
ZXh0LWFsaWduOiBsZWZ0OwotICAgIG1hcmdpbi1sZWZ0OiAycHg7Ci19Ci0KLS5uZXR3b3JrLWdy
YXBoLWxhYmVsLmFmdGVyOjpiZWZvcmUgewotICAgIHBhZGRpbmctcmlnaHQ6IDJweDsKLSAgICBo
ZWlnaHQ6IDZweDsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2dyYXBoTGFiZWxDYWxsb3V0Umln
aHQucG5nKTsKLX0KLQotLm5ldHdvcmstZ3JhcGgtYmFyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBtYXJnaW46IGF1dG8gLTdweDsK
LSAgICBib3JkZXItd2lkdGg6IDZweCA3cHg7Ci0gICAgaGVpZ2h0OiAwOwotICAgIG1pbi13aWR0
aDogMTRweDsKLSAgICBvcGFjaXR5OiAwLjY1OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1
cmwoSW1hZ2VzL3RpbWVsaW5lUGlsbEdyYXkucG5nKSA3IDcgNyA3OwotfQotCi0ubmV0d29yay1n
cmFwaC1iYXIud2FpdGluZywgLm5ldHdvcmstZ3JhcGgtYmFyLndhaXRpbmctcmlnaHQgewotICAg
IG9wYWNpdHk6IDAuMzU7Ci19Ci0KLS8qIFJlc291cmNlIGNhdGVnb3JpZXMgKi8KLQotCi0ucmVz
b3VyY2UtY2FjaGVkIC5uZXR3b3JrLWdyYXBoLWJhciB7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1h
Z2U6IHVybChJbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsR3JheS5wbmcpIDcgNyA3IDc7Ci19Ci0K
LS5uZXR3b3JrLXR5cGUtZG9jdW1lbnQgLm5ldHdvcmstZ3JhcGgtYmFyIHsKLSAgICAtd2Via2l0
LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy90aW1lbGluZVBpbGxCbHVlLnBuZykgNyA3IDcgNzsK
LX0KLQotLm5ldHdvcmstdHlwZS1kb2N1bWVudC5yZXNvdXJjZS1jYWNoZWQgLm5ldHdvcmstZ3Jh
cGgtYmFyIHsKLSAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy90aW1lbGluZUhv
bGxvd1BpbGxCbHVlLnBuZykgNyA3IDcgNzsKLX0KLQotLm5ldHdvcmstdHlwZS1zdHlsZXNoZWV0
IC5uZXR3b3JrLWdyYXBoLWJhciB7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFn
ZXMvdGltZWxpbmVQaWxsR3JlZW4ucG5nKSA3IDcgNyA3OwotfQotCi0ubmV0d29yay10eXBlLXN0
eWxlc2hlZXQucmVzb3VyY2UtY2FjaGVkIC5uZXR3b3JrLWdyYXBoLWJhciB7Ci0gICAgLXdlYmtp
dC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsR3JlZW4ucG5nKSA3
IDcgNyA3OwotfQotCi0ubmV0d29yay10eXBlLWltYWdlIC5uZXR3b3JrLWdyYXBoLWJhciB7Ci0g
ICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvdGltZWxpbmVQaWxsUHVycGxlLnBu
ZykgNiA3IDYgNzsKLX0KLQotLm5ldHdvcmstdHlwZS1pbWFnZS5yZXNvdXJjZS1jYWNoZWQgLm5l
dHdvcmstZ3JhcGgtYmFyIHsKLSAgICBib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvdGltZWxpbmVI
b2xsb3dQaWxsUHVycGxlLnBuZykgNyA3IDcgNzsKLX0KLQotLm5ldHdvcmstdHlwZS1mb250IC5u
ZXR3b3JrLWdyYXBoLWJhciB7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMv
dGltZWxpbmVQaWxsUmVkLnBuZykgNyA3IDcgNzsKLX0KLQotLm5ldHdvcmstdHlwZS1mb250LnJl
c291cmNlLWNhY2hlZCAubmV0d29yay1ncmFwaC1iYXIgewotICAgIC13ZWJraXQtYm9yZGVyLWlt
YWdlOiB1cmwoSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbFJlZC5wbmcpIDcgNyA3IDc7Ci19Ci0K
LS5uZXR3b3JrLXR5cGUtc2NyaXB0IC5uZXR3b3JrLWdyYXBoLWJhciB7Ci0gICAgLXdlYmtpdC1i
b3JkZXItaW1hZ2U6IHVybChJbWFnZXMvdGltZWxpbmVQaWxsT3JhbmdlLnBuZykgNyA3IDcgNzsK
LX0KLQotLm5ldHdvcmstdHlwZS1zY3JpcHQucmVzb3VyY2UtY2FjaGVkIC5uZXR3b3JrLWdyYXBo
LWJhciB7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvdGltZWxpbmVIb2xs
b3dQaWxsT3JhbmdlLnBuZykgNyA3IDcgNzsKLX0KLQotLm5ldHdvcmstdHlwZS14aHIgLm5ldHdv
cmstZ3JhcGgtYmFyIHsKLSAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy90aW1l
bGluZVBpbGxZZWxsb3cucG5nKSA3IDcgNyA3OwotfQotCi0ubmV0d29yay10eXBlLXhoci5yZXNv
dXJjZS1jYWNoZWQgLm5ldHdvcmstZ3JhcGgtYmFyIHsKLSAgICAtd2Via2l0LWJvcmRlci1pbWFn
ZTogdXJsKEltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxZZWxsb3cucG5nKSA3IDcgNyA3OwotfQot
Ci0ubmV0d29yay10eXBlLXdlYnNvY2tldCAubmV0d29yay1ncmFwaC1iYXIgewotICAgIC13ZWJr
aXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3RpbWVsaW5lUGlsbEdyYXkucG5nKSA3IDcgNyA3
OwotfQotCi0ubmV0d29yay10eXBlLXdlYnNvY2tldC5yZXNvdXJjZS1jYWNoZWQgLm5ldHdvcmst
Z3JhcGgtYmFyIHsKLSAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3RpbWVsaW5l
SG9sbG93UGlsbEdyYXkucG5nKSA3IDcgNyA3OwotfQotCi0ubmV0d29yay1kaW0tY2VsbCB7Ci0g
ICAgY29sb3I6IGdyZXk7Ci19Ci0KLS8qIERpdmlkZXJzICovCi0KLS5uZXR3b3JrLXRpbWVsaW5l
LWdyaWQgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90dG9t
OiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDE0cHg7IC8qIEtlZXAgaW4gc3luYyB3aXRo
IHRkLmNvcm5lciB3aWR0aCAqLwotICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwotfQotCi0ubmV0
d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgLnRpbWVsaW5lLWNvbHVtbiwKLS5uZXR3b3JrLnBhbmVs
IC5kYXRhLWdyaWQgdGgudGltZWxpbmUtY29sdW1uIHsKLSAgICBib3JkZXItcmlnaHQ6IG5vbmU7
Ci19Ci0KLS5kYXRhLWdyaWQgdGQudGltZWxpbmUtY29sdW1uIHsKLSAgICBwYWRkaW5nLWxlZnQ6
IDA7Ci0gICAgcGFkZGluZy1yaWdodDogMDsKLX0KLQotLm5ldHdvcmstZXZlbnQtZGl2aWRlci1w
YWRkaW5nIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6IDhweDsKLSAgICB0
b3A6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwotfQotCi0u
bmV0d29yay1ldmVudC1kaXZpZGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lk
dGg6IDJweDsKLSAgICB0b3A6IDMxcHg7Ci0gICAgYm90dG9tOiAwOwotICAgIHotaW5kZXg6IDMw
MDsKLX0KLQotLm5ldHdvcmstdGltZWxpbmUtZ3JpZC5zbWFsbCAubmV0d29yay1ldmVudC1kaXZp
ZGVyIHsKLSAgICB0b3A6IDIzcHg7Ci19Ci0KLS5uZXR3b3JrLXJlZC1kaXZpZGVyIHsKLSAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwgMC41KTsKLX0KLQotLm5ldHdvcmstYmx1
ZS1kaXZpZGVyIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDI1NSwgMC41KTsK
LX0KLQotLm5ldHdvcmstbG9nLWdyaWQuZGF0YS1ncmlkIC5yZXNvdXJjZXMtZGl2aWRlcnMgewot
ICAgIHotaW5kZXg6IDA7Ci19Ci0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZCAucmVzb3Vy
Y2VzLWRpdmlkZXJzLWxhYmVsLWJhciB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJl
bnQ7Ci0gICAgYm9yZGVyOiBub25lOwotICAgIGhlaWdodDogMzBweDsKLSAgICBwb2ludGVyLWV2
ZW50czogbm9uZTsKLX0KLQotLm5ldHdvcmstdGltZWxpbmUtZ3JpZC5zbWFsbCAucmVzb3VyY2Vz
LWRpdmlkZXJzLWxhYmVsLWJhciB7Ci0gICAgaGVpZ2h0OiAyM3B4OwotfQotCi0ubmV0d29yay10
aW1lbGluZS1ncmlkIC5yZXNvdXJjZXMtZGl2aWRlci1sYWJlbCB7Ci0gICAgdG9wOiAwOwotICAg
IG1hcmdpbi10b3A6IC01cHg7Ci19Ci0KLS5uZXR3b3JrLXRpbWVsaW5lLWdyaWQgLnJlc291cmNl
cy1kaXZpZGVycy1sYWJlbC1iYXIgLnJlc291cmNlcy1kaXZpZGVyIHsKLSAgICB0b3A6IDIzcHg7
Ci19Ci0KLS5uZXR3b3JrLXRpbWVsaW5lLWdyaWQuc21hbGwgLnJlc291cmNlcy1kaXZpZGVycy1s
YWJlbC1iYXIgLnJlc291cmNlcy1kaXZpZGVyIHsKLSAgICB0b3A6IDE1cHg7Ci19Ci0KLS5uZXR3
b3JrLXRpbWVsaW5lLWdyaWQgLnJlc291cmNlcy1kaXZpZGVyLmZpcnN0IC5yZXNvdXJjZXMtZGl2
aWRlci1sYWJlbCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLm5ldHdvcmstdGltZWxpbmUt
Z3JpZCAucmVzb3VyY2VzLWRpdmlkZXJzLWxhYmVsLWJhciAucmVzb3VyY2VzLWRpdmlkZXIuZmly
c3QgewotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwotfQotCi0vKiBGaWx0ZXJz
ICovCi0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3JpZCB0YWJsZS5kYXRhIHRyLnJldmVhbGVk
Lm5ldHdvcmstaXRlbSB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotLyogU3VtbWFyeSAqLwot
Ci0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgdHIuZmlsbGVyIHRkIHsKLSAgICBwYWRkaW5n
LWJvdHRvbTogMjBweCAhaW1wb3J0YW50OwotfQotCi0ubmV0d29yay1sb2ctZ3JpZC5kYXRhLWdy
aWQgLm5ldHdvcmstc3VtbWFyeS1iYXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBs
ZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2IoMTAxLCAxMTEsIDEzMCk7Ci19Ci0KLS5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3Jp
ZCAubmV0d29yay1zdW1tYXJ5LWJhciB0ZCB7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIGhlaWdo
dDogMjBweCAhaW1wb3J0YW50OwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBmb250LXNpemU6IDEx
MCU7Ci0gICAgcGFkZGluZzogMCAwIDAgOHB4OwotICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci0gICAg
b3ZlcmZsb3cgOiBoaWRkZW47Ci0gICAgdGV4dC1vdmVyZmxvdyA6IGVsbGlwc2lzOwotfQotCi0u
bmV0d29yay1sb2ctZ3JpZC5kYXRhLWdyaWQgLm5ldHdvcmstc3VtbWFyeS1iYXIgaW1nIHsKLSAg
ICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKLX0KLQot
I25ldHdvcmstY29udGFpbmVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAw
OwotICAgIGxlZnQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIHJpZ2h0OiAwOwotICAgIHdpZHRo
OiAxMDAlOwotICAgIGhlaWdodDogMTAwJTsKLSAgICBib3JkZXItcmlnaHQ6IDAgbm9uZSB0cmFu
c3BhcmVudDsKLSAgICBvdmVyZmxvdy15OiBhdXRvOwotICAgIG92ZXJmbG93LXg6IGhpZGRlbjsK
LX0KLQotLy8gQnJpZWYgbW9kZSBwZWN1bGlhcml0aWVzLgotI25ldHdvcmstY29udGFpbmVyLmJy
aWVmLW1vZGUgLm5ldHdvcmstdGltZWxpbmUtZ3JpZCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0K
LQotI25ldHdvcmstY29udGFpbmVyLmJyaWVmLW1vZGUgdGQsCi0jbmV0d29yay1jb250YWluZXIu
YnJpZWYtbW9kZSB0aCB7Ci0gICAgYm9yZGVyLXJpZ2h0OiBub25lOwotfQotCi0jbmV0d29yay1j
b250YWluZXIuYnJpZWYtbW9kZSB0aC5jb3JuZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0K
LSNuZXR3b3JrLWNvbnRhaW5lci5icmllZi1tb2RlIC5uZXR3b3JrLWxvZy1ncmlkLmRhdGEtZ3Jp
ZCAuZGF0YS1ncmlkLXJlc2l6ZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSNuZXR3b3Jr
LWNvbnRhaW5lci5icmllZi1tb2RlIC5uZXR3b3JrLXRpbWVsaW5lLWdyaWQgewotICAgIGRpc3Bs
YXk6IG5vbmU7Ci19Ci0KLSNuZXR3b3JrLWNvbnRhaW5lcjpub3QoLmJyaWVmLW1vZGUpIC5kYXRh
LWdyaWQgdHIuc2VsZWN0ZWQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owot
ICAgIGNvbG9yOiBibGFjazsKLX0KLQotI25ldHdvcmstY29udGFpbmVyLmJyaWVmLW1vZGUgLmRh
dGEtZ3JpZCAuZGF0YS1jb250YWluZXIgewotICAgIHBhZGRpbmctcmlnaHQ6IDA7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtQYW5lbC5j
c3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtQYW5lbC5jc3MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NWYwNmMuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9uZXR3b3JrUGFuZWwuY3NzCisrKyAvZGV2
L251bGwKQEAgLTEsMzM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBbnRob255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLm5ldHdvcmstbGFyZ2VyLXJlc291
cmNlcy1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsKLSAgICAtd2Via2l0LW1hc2stcG9zaXRpb246
IC0yMjRweCAwOwotfQotCi0jbmV0d29yay12aWV3cyB7Ci0gICAgYmFja2dyb3VuZDogcmdiKDIw
MywgMjAzLCAyMDMpOwotfQotCi0jbmV0d29yay1jbG9zZS1idXR0b24gewotICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKLSAgICB3aWR0aDogMTRweDsKLSAgICBoZWlnaHQ6IDE0cHg7Ci0gICAgYmFj
a2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9jbG9zZUJ1dHRvbnMucG5nKTsKLSAgICBiYWNrZ3Jv
dW5kLXBvc2l0aW9uOiAwIDA7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0g
ICAgYm9yZGVyOiAwIG5vbmUgdHJhbnNwYXJlbnQ7Ci0gICAgdG9wOiA4cHg7Ci0gICAgbGVmdDog
NXB4OwotICAgIHotaW5kZXg6IDEwOwotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSNuZXR3b3Jr
LXZpZXdzLnNtYWxsICNuZXR3b3JrLWNsb3NlLWJ1dHRvbiB7Ci0gICAgdG9wOiA0cHg7Ci19Ci0K
LSNuZXR3b3JrLWNsb3NlLWJ1dHRvbjpob3ZlciB7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjog
MTRweCAwOwotfQotCi0jbmV0d29yay1jbG9zZS1idXR0b246YWN0aXZlIHsKLSAgICBiYWNrZ3Jv
dW5kLXBvc2l0aW9uOiAyOHB4IDA7Ci19Ci0KLS5uZXR3b3JrLnBhbmVsLnZpZXdpbmctcmVzb3Vy
Y2UgI25ldHdvcmstY2xvc2UtYnV0dG9uICB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5u
ZXR3b3JrLnBhbmVsIC5zaWRlYmFyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9w
OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIHdp
ZHRoOiBhdXRvOwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBiYWNrZ3JvdW5kOiBpbmhlcml0Owot
fQotCi0ubmV0d29yay5wYW5lbDpub3QoLnZpZXdpbmctcmVzb3VyY2UpIC5zaWRlYmFyLXJlc2l6
ZXItdmVydGljYWwgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5uZXR3b3JrLnBhbmVsIC5z
Y29wZS1iYXIgewotICAgIGhlaWdodDogMjNweDsKLSAgICBwYWRkaW5nLXRvcDogNXB4OwotfQot
Ci0ubmV0d29yay5wYW5lbCAuZGF0YS1ncmlkIHRoLnNvcnQtZGVzY2VuZGluZywgLm5ldHdvcmsu
cGFuZWwgLmRhdGEtZ3JpZCB0aC5zb3J0LWFzY2VuZGluZyB7Ci0gICAgYmFja2dyb3VuZDogLXdl
YmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjM2
LCAyMzYsIDIzNikpLCB0byhyZ2IoMjE3LCAyMTcsIDIxNykpKTsKLX0KLQotI25ldHdvcmstdmll
d3MgLm5ldHdvcmstaXRlbS12aWV3IC50YWJiZWQtcGFuZS1oZWFkZXIgewotICAgIGhlaWdodDog
MzFweDsKLSAgICBwYWRkaW5nLXRvcDogOHB4OwotICAgIHBhZGRpbmctbGVmdDogMjVweDsKLSAg
ICB3aGl0ZS1zcGFjZTogbm93cmFwOwotfQotCi0jbmV0d29yay12aWV3cy5zbWFsbCAubmV0d29y
ay1pdGVtLXZpZXcgLnRhYmJlZC1wYW5lLWhlYWRlciB7Ci0gICAgaGVpZ2h0OiAyM3B4OwotICAg
IHBhZGRpbmctdG9wOiAwOwotfQotCi0ubmV0d29yay1pdGVtLXZpZXcgewotICAgIGRpc3BsYXk6
IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJhY2tncm91bmQ6IHdoaXRlOwot
ICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsK
LX0KLQotLm5ldHdvcmstaXRlbS12aWV3LnZpc2libGUgewotICAgIGRpc3BsYXk6IC13ZWJraXQt
ZmxleDsKLX0KLQotLm5ldHdvcmstaXRlbS12aWV3IC50YWJiZWQtcGFuZS1oZWFkZXIgewotICAg
IGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSAwJSwgMCUgMTAwJSwgZnJv
bShyZ2IoMjM2LCAyMzYsIDIzNikpLCB0byhyZ2IoMjE3LCAyMTcsIDIxNykpKTsKLSAgICBib3Jk
ZXItYm90dG9tOiAxcHggc29saWQgcmdiKDE2MywgMTYzLCAxNjMpOwotfQotCi0ubmV0d29yay1p
dGVtLXZpZXcgLnNjb3BlLWJhciBsaSB7Ci0gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czog
MDsKLSAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKLX0KLQotLnJlc291cmNlLWhl
YWRlcnMtdmlldyB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBtYXJnaW46IDZweDsKLSAgICAt
d2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0
b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAg
b3ZlcmZsb3c6IGF1dG87Ci19Ci0KLS5yZXNvdXJjZS1oZWFkZXJzLXZpZXcudmlzaWJsZSB7Ci0g
ICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5yZXNvdXJjZS1oZWFkZXJzLXZpZXcgLm91dGxpbmUt
ZGlzY2xvc3VyZSAucGFyZW50IHsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotICAg
IGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0ucmVzb3VyY2UtaGVhZGVycy12aWV3IC5vdXRsaW5l
LWRpc2Nsb3N1cmUgLnBhcmVudCAuc2VjdGlvbiAqIHsKLSAgICBmb250LXdlaWdodDogbm9ybWFs
OwotfQotCi0ucmVzb3VyY2UtaGVhZGVycy12aWV3IC5vdXRsaW5lLWRpc2Nsb3N1cmUgLmNoaWxk
cmVuIGxpIHsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotfQotCi0ucmVzb3VyY2UtaGVhZGVy
cy12aWV3IC5vdXRsaW5lLWRpc2Nsb3N1cmUgbGkuZXhwYW5kZWQgLmhlYWRlci1jb3VudCB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKLX0KLQotLnJlc291cmNlLWhlYWRlcnMtdmlldyAub3V0bGluZS1k
aXNjbG9zdXJlIGxpIC5oZWFkZXItdG9nZ2xlIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0u
cmVzb3VyY2UtaGVhZGVycy12aWV3IC5vdXRsaW5lLWRpc2Nsb3N1cmUgbGkgLnN0YXR1cy1mcm9t
LWNhY2hlIHsKLSAgICBjb2xvcjogZ3JheTsKLX0KLQotLnJlc291cmNlLWhlYWRlcnMtdmlldyAu
b3V0bGluZS1kaXNjbG9zdXJlIGxpLmV4cGFuZGVkIC5oZWFkZXItdG9nZ2xlIHsKLSAgICBkaXNw
bGF5OiBpbmxpbmU7Ci0gICAgbWFyZ2luLWxlZnQ6IDMwcHg7Ci0gICAgZm9udC13ZWlnaHQ6IG5v
cm1hbDsKLSAgICBjb2xvcjogcmdiKDQ1JSwgNDUlLCA0NSUpOwotfQotCi0ucmVzb3VyY2UtaGVh
ZGVycy12aWV3IC5vdXRsaW5lLWRpc2Nsb3N1cmUgbGkgLmhlYWRlci10b2dnbGU6aG92ZXIgewot
ICAgIGNvbG9yOiByZ2IoMjAlLCAyMCUsIDQ1JSk7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotfQot
Ci0ucmVzb3VyY2UtaGVhZGVycy12aWV3IC5vdXRsaW5lLWRpc2Nsb3N1cmUgLmhlYWRlci1uYW1l
IHsKLSAgICBjb2xvcjogcmdiKDMzJSwgMzMlLCAzMyUpOwotICAgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsKLSAgICBtYXJnaW4tcmlnaHQ6IDAuNWVtOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwot
ICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci0gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwotfQot
Ci0ucmVzb3VyY2UtaGVhZGVycy12aWV3IC5vdXRsaW5lLWRpc2Nsb3N1cmUgLmhlYWRlci12YWx1
ZSB7Ci0gICAgZGlzcGxheTogaW5saW5lOwotICAgIG1hcmdpbi1yaWdodDogMTAwcHg7Ci0gICAg
d2hpdGUtc3BhY2U6IHByZS13cmFwOwotICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKLSAgICBt
YXJnaW4tdG9wOiAxcHg7Ci19Ci0KLS5yZXNvdXJjZS1jb29raWVzLXZpZXcgewotICAgIGRpc3Bs
YXk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICByaWdo
dDogMDsKLSAgICBsZWZ0OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBvdmVyZmxvdzogYXV0bzsK
LSAgICBtYXJnaW46IDEycHg7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0ucmVzb3VyY2UtY29v
a2llcy12aWV3LnZpc2libGUgewotICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0ucmVzb3VyY2Ut
Y29va2llcy12aWV3IC5kYXRhLWdyaWQgewotICAgIGhlaWdodDogMTAwJTsKLX0KLQotLnJlc291
cmNlLWNvb2tpZXMtdmlldyAuZGF0YS1ncmlkIC5yb3ctZ3JvdXAgewotICAgIGZvbnQtd2VpZ2h0
OiBib2xkOwotICAgIGZvbnQtc2l6ZTogMTFweDsKLX0KLQotLnJlc291cmNlLXRpbWluZy12aWV3
IHsKLSAgICBkaXNwbGF5OiBub25lOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6
IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgbGVmdDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbWFy
Z2luOiA2cHg7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgZm9udC1zaXplOiAxMXB4Owot
ICAgIGNvbG9yOiByZ2IoMzAlLCAzMCUsIDMwJSk7Ci19Ci0KLS5yZXNvdXJjZS10aW1pbmctdmll
dyB0YWJsZSB7Ci0gICAgYm9yZGVyLXNwYWNpbmc6IDIxcHggMDsKLX0KLQotLnJlc291cmNlLXRp
bWluZy12aWV3IC5uZXR3b3JrLXRpbWluZy1iYXIgewotICAgIG9wYWNpdHk6IDE7Ci19Ci0KLS5y
ZXNvdXJjZS10aW1pbmctdmlldyAubmV0d29yay10aW1pbmctYmFyLnByb3h5IHsKLSAgICBiYWNr
Z3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKHJnYigyMzksIDIyOCwgMTc2KSksIHRvKHJnYigxMzksIDEyOCwgNzYpKSk7Ci0g
ICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMTM5LCAxMjgsIDc2KTsKLX0KLQotLnJlc291
cmNlLXRpbWluZy12aWV3IC5uZXR3b3JrLXRpbWluZy1iYXIuZG5zIHsKLSAgICBiYWNrZ3JvdW5k
LWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBm
cm9tKHJnYigxNTMsIDIwOCwgMjE2KSksIHRvKHJnYig4MSwgMTc0LCAxODkpKSk7Ci0gICAgYm9y
ZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoODEsIDE3NCwgMTg5KTsKLX0KLQotLnJlc291cmNlLXRp
bWluZy12aWV3IC5uZXR3b3JrLXRpbWluZy1iYXIuY29ubmVjdGluZyB7Ci0gICAgYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwg
ZnJvbShyZ2IoMjAzLCAyMzIsIDE0NSkpLCB0byhyZ2IoMTYwLCAyMTQsIDU2KSkpOwotICAgIGJv
cmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDE2MCwgMjE0LCA1Nik7Ci19Ci0KLS5yZXNvdXJjZS10
aW1pbmctdmlldyAubmV0d29yay10aW1pbmctYmFyLnNzbCB7Ci0gICAgYmFja2dyb3VuZC1pbWFn
ZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShy
Z2IoMjEsIDIzMiwgMTQ1KSksIHRvKHJnYigyMTYsIDE0OSwgMTMyKSkpOwotICAgIGJvcmRlci1s
ZWZ0OiAxcHggc29saWQgcmdiKDIxNiwgMTQ5LCAxMzIpOwotfQotCi0ucmVzb3VyY2UtdGltaW5n
LXZpZXcgLm5ldHdvcmstdGltaW5nLWJhci5zZW5kaW5nIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdl
OiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJn
YigyMzIsIDE5MiwgMTgyKSksIHRvKHJnYigyMTYsIDE0NywgMTMwKSkpOwotICAgIGJvcmRlci1s
ZWZ0OiAxcHggc29saWQgcmdiKDIxNiwgMTQ3LCAxMzApOwotfQotCi0ucmVzb3VyY2UtdGltaW5n
LXZpZXcgLm5ldHdvcmstdGltaW5nLWJhci53YWl0aW5nIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdl
OiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJn
YigxODgsIDE3OSwgMjA4KSksIHRvKHJnYigxNDEsIDEyNSwgMTc1KSkpOwotICAgIGJvcmRlci1s
ZWZ0OiAxcHggc29saWQgcmdiKDE0MSwgMTI1LCAxNzUpOwotfQotCi0ucmVzb3VyY2UtdGltaW5n
LXZpZXcgLm5ldHdvcmstdGltaW5nLWJhci5yZWNlaXZpbmcgewotICAgIGJhY2tncm91bmQtaW1h
Z2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20o
cmdiKDIxNCwgMjE0LCAyMTQpKSwgdG8ocmdiKDE4MiwgMTgyLCAxODIpKSk7Ci0gICAgYm9yZGVy
LWxlZnQ6IDFweCBzb2xpZCByZ2IoMTgyLCAxODIsIDE4Mik7Ci19Ci0KLS5yZXNvdXJjZS10aW1p
bmctdmlldy52aXNpYmxlIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotLnJlc291cmNlLXdl
YnNvY2tldCB7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLX0KLQotLnJlc291cmNl
LXdlYnNvY2tldCwgLnJlc291cmNlLXdlYnNvY2tldCAuZGF0YS1ncmlkIHsKLSAgICBwb3NpdGlv
bjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0g
ICAgYm90dG9tOiAwOwotICAgIGJvcmRlcjogbm9uZTsKLX0KLQotLnJlc291cmNlLXdlYnNvY2tl
dCAuZGF0YS1ncmlkIC5kYXRhIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwotfQotCi0u
cmVzb3VyY2Utd2Vic29ja2V0IHRkIHsKLSAgICBwYWRkaW5nLXRvcDogM3B4OwotICAgIHBhZGRp
bmctYm90dG9tOiAzcHg7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYigyNDAsIDI0MCwg
MjQwKTsKLX0KLQotLnJlc291cmNlLXdlYnNvY2tldCAuZGF0YS1jb2x1bW4gZGl2IHsKLSAgICB3
b3JkLWJyZWFrOiBicmVhay1hbGw7Ci0gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwotfQotCi0u
cmVzb3VyY2Utd2Vic29ja2V0LXJvdy1vdXRjb21pbmcgewotICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYigyMjYsIDI0NywgMjE4KTsKLX0KLQotLnJlc291cmNlLXdlYnNvY2tldC1yb3ctb3V0Y29t
aW5nOm5vdCguc2VsZWN0ZWQpIHRkIHsKLSAgICBib3JkZXItcmlnaHQtY29sb3I6IHJnYigxNzcs
IDIwOSwgMTY1KTsKLX0KLQotLnJlc291cmNlLXdlYnNvY2tldC1yb3ctb3V0Y29taW5nOm5vdCgu
c2VsZWN0ZWQpIHRkLCAucmVzb3VyY2Utd2Vic29ja2V0LXJvdy1vdXRjb21pbmc6bm90KC5zZWxl
Y3RlZCkgKyB0ciB0ZCB7Ci0gICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiKDE5OSwgMjM2LCAxODUp
OwotfQotCi0ucmVzb3VyY2Utd2Vic29ja2V0LXJvdy1vcGNvZGUgewotICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigyNTUsIDI1NSwgMjMyKTsKLSAgICBjb2xvcjogcmdiKDE3MCwgMTExLCA3MSk7
Ci19Ci0KLS5yZXNvdXJjZS13ZWJzb2NrZXQtcm93LW9wY29kZSB0ZCB7Ci0gICAgYm9yZGVyLWNv
bG9yOiByZ2IoMjExLCAxODcsIDE3MSk7Ci19Ci0KLS5yZXNvdXJjZS13ZWJzb2NrZXQtcm93LW9w
Y29kZSB0ZCwgLnJlc291cmNlLXdlYnNvY2tldC1yb3ctb3Bjb2RlICsgdHIgdGQgewotICAgIGJv
cmRlci10b3AtY29sb3I6IHJnYigyNDgsIDI0MCwgMjEwKTsKLX0KLQotLnJlc291cmNlLXdlYnNv
Y2tldC1yb3ctZXJyb3IgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDIzNywgMjM3
KTsKLSAgICBjb2xvcjogcmdiKDE4MiwgMCwgMCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3BhbmVsRW5hYmxlclZpZXcuY3NzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9wYW5lbEVuYWJsZXJWaWV3LmNzcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTdjMTdmOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3BhbmVsRW5hYmxlclZpZXcuY3NzCisrKyAvZGV2L251bGwK
QEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
bnRob255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLnBhbmVsLWVuYWJsZXItdmlldyB7Ci0gICAg
ei1pbmRleDogMTAwMDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAg
IGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIGJhY2tncm91bmQt
Y29sb3I6IHdoaXRlOwotICAgIGZvbnQtc2l6ZTogMTNweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVuOwotICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7Ci0g
ICAgZGlzcGxheTogbm9uZTsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldy52aXNpYmxlIHsKLSAg
ICBkaXNwbGF5OiBibG9jazsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldyAucGFuZWwtZW5hYmxl
ci12aWV3LWNvbnRlbnQgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0g
ICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbWF4LWhlaWdo
dDogMzkwcHg7Ci0gICAgbWFyZ2luOiBhdXRvOwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19
Ci0KLS5wYW5lbC1lbmFibGVyLXZpZXcgaDEgewotICAgIGNvbG9yOiByZ2IoMTEwLCAxMTYsIDEy
OCk7Ci0gICAgZm9udC1zaXplOiAxNnB4OwotICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwotICAgIGZv
bnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgbWFyZ2luLXRvcDogMDsKLX0KLQotLnBhbmVsLWVuYWJs
ZXItZGlzY2xhaW1lciB7Ci0gICAgZm9udC1zaXplOiAxMHB4OwotICAgIGNvbG9yOiByZ2IoMTEw
LCAxMTYsIDEyOCk7Ci0gICAgbWFyZ2luLWJvdHRvbTogMTJweDsKLSAgICBtYXJnaW4tbGVmdDog
MjBweDsKLX0KLQotLnBhbmVsLWVuYWJsZXItZGlzY2xhaW1lcjplbXB0eSB7Ci0gICAgZGlzcGxh
eTogbm9uZTsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldyBpbWcgewotICAgIGhlaWdodDogMTAw
JTsKLSAgICBtaW4taGVpZ2h0OiAyMDBweDsKLSAgICBtYXgtd2lkdGg6IDEwMCU7Ci0gICAgdG9w
OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBwYWRkaW5nOiAyMHB4IDAgMjBweCAyMHB4OwotICAg
IG1hcmdpbjogYXV0bzsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotfQotCi0ucGFuZWwt
ZW5hYmxlci12aWV3IGltZy5oaWRkZW4gewotICAgIGRpc3BsYXk6IGluaXRpYWwgIWltcG9ydGFu
dDsKLSAgICB3aWR0aDogMDsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldyAuZmxleGlibGUtc3Bh
Y2UgewotICAgIC13ZWJraXQtZmxleDogMTsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldyBmb3Jt
IHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRs
ZTsKLSAgICB3aWR0aDogMzMwcHg7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDE1cHg7
Ci0gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldyBsYWJl
bCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHRl
eHQtYWxpZ246IGxlZnQ7Ci0gICAgd29yZC1icmVhazogYnJlYWstd29yZDsKLSAgICBtYXJnaW46
IDAgMCA1cHggMjBweDsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldyBidXR0b246bm90KC5zdGF0
dXMtYmFyLWl0ZW0pIHsKLSAgICBmb250LXNpemU6IDEzcHg7Ci0gICAgbWFyZ2luOiA2cHggMCAw
IDA7Ci0gICAgcGFkZGluZzogM3B4IDIwcHg7Ci0gICAgaGVpZ2h0OiAyNHB4OwotICAgIGNvbG9y
OiByZ2IoNiwgNiwgNik7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2NSwgMTY1LCAxNjUp
OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMzcsIDIzNywgMjM3KTsKLSAgICBiYWNrZ3Jv
dW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9t
LCBmcm9tKHJnYigyNTIsIDI1MiwgMjUyKSksIHRvKHJnYigyMjMsIDIyMywgMjIzKSkpOwotICAg
IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTJweDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5v
bmU7Ci19Ci0KLWJvZHkuaW5hY3RpdmUgLnBhbmVsLWVuYWJsZXItdmlldyBidXR0b246bm90KC5z
dGF0dXMtYmFyLWl0ZW0pLCAucGFuZWwtZW5hYmxlci12aWV3IGJ1dHRvbjpkaXNhYmxlZDpub3Qo
LnN0YXR1cy1iYXItaXRlbSkgewotICAgIGNvbG9yOiByZ2IoMTMwLCAxMzAsIDEzMCk7Ci0gICAg
Ym9yZGVyLWNvbG9yOiByZ2IoMjEyLCAyMTIsIDIxMik7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDIzOSwgMjM5LCAyMzkpOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGll
bnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDI1MCwgMjUwLCAyNTAp
KSwgdG8ocmdiKDIzNSwgMjM1LCAyMzUpKSk7Ci19Ci0KLS5wYW5lbC1lbmFibGVyLXZpZXcgYnV0
dG9uOmFjdGl2ZTpub3QoLnN0YXR1cy1iYXItaXRlbSkgewotICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYigyMTUsIDIxNSwgMjE1KTsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRp
ZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYigxOTQsIDE5NCwgMTk0
KSksIHRvKHJnYigyMzksIDIzOSwgMjM5KSkpOwotfQotCi0ucGFuZWwtZW5hYmxlci12aWV3IGlu
cHV0W3R5cGU9InJhZGlvIl0gewotICAgIGhlaWdodDogMTdweDsKLSAgICB3aWR0aDogMTdweDsK
LSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTY1LCAxNjUsIDE2NSk7Ci0gICAgYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwg
ZnJvbShyZ2IoMjUyLCAyNTIsIDI1MikpLCB0byhyZ2IoMjIzLCAyMjMsIDIyMykpKTsKLSAgICAt
d2Via2l0LWJvcmRlci1yYWRpdXM6IDhweDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7
Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLSAgICBtYXJnaW46IDAgNXB4IDVweCAwOwot
fQotCi0ucGFuZWwtZW5hYmxlci12aWV3IGlucHV0W3R5cGU9InJhZGlvIl06YWN0aXZlOm5vdCg6
ZGlzYWJsZWQpIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYigxOTQsIDE5NCwgMTk0KSksIHRvKHJn
YigyMzksIDIzOSwgMjM5KSkpOwotfQotCi0ucGFuZWwtZW5hYmxlci12aWV3IGlucHV0W3R5cGU9
InJhZGlvIl06Y2hlY2tlZCB7Ci0gICAgYmFja2dyb3VuZDogdXJsKEltYWdlcy9yYWRpb0RvdC5w
bmcpIGNlbnRlciBuby1yZXBlYXQsCi0gICAgICAgICAgICAgICAgLXdlYmtpdC1ncmFkaWVudChs
aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjUyLCAyNTIsIDI1MikpLCB0
byhyZ2IoMjIzLCAyMjMsIDIyMykpKTsKLX0KLQotLnBhbmVsLWVuYWJsZXItdmlldyBpbnB1dFt0
eXBlPSJyYWRpbyJdOmNoZWNrZWQ6YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5kOiB1cmwoSW1hZ2Vz
L3JhZGlvRG90LnBuZykgY2VudGVyIG5vLXJlcGVhdCwKLSAgICAgICAgICAgICAgICAtd2Via2l0
LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYigxOTQsIDE5
NCwgMTk0KSksIHRvKHJnYigyMzksIDIzOSwgMjM5KSkpOwotfQotCi0ucGFuZWwtZW5hYmxlci12
aWV3LnNjcmlwdHMgaW1nIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3NjcmlwdHNTaWxob3Vl
dHRlLnBuZyk7Ci19Ci0KLS5wYW5lbC1lbmFibGVyLXZpZXcucHJvZmlsZXMgaW1nIHsKLSAgICBj
b250ZW50OiB1cmwoSW1hZ2VzL3Byb2ZpbGVzU2lsaG91ZXR0ZS5wbmcpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9wb3BvdmVyLmNzcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcG9wb3Zlci5jc3MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY2MGQ2NTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9wb3BvdmVyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCww
IEBACi0ucG9wb3ZlciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIC13ZWJraXQtYm9y
ZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3BvcG92ZXJCYWNrZ3JvdW5kLnBuZykgMjUgMjUgMjUgMjU7
Ci0gICAgYm9yZGVyLXdpZHRoOiAyNXB4OwotICAgIHotaW5kZXg6IDEwMDsKLSAgICBwb2ludGVy
LWV2ZW50czogbm9uZTsKLX0KLQotLnBvcG92ZXIgLmNvbnRlbnQgewotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAg
cmlnaHQ6IDA7Ci0gICAgcG9pbnRlci1ldmVudHM6IGF1dG87Ci0gICAgb3ZlcmZsb3c6IGF1dG87
Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLX0KLQotLnBvcG92ZXIgLmNvbnRlbnQu
Zml4ZWQtaGVpZ2h0IHsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfSAKLQotLnBvcG92ZXIgLmFy
cm93IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJs
KEltYWdlcy9wb3BvdmVyQXJyb3dzLnBuZyk7Ci0gICAgd2lkdGg6IDE5cHg7Ci0gICAgaGVpZ2h0
OiAxOXB4OwotICAgIG1hcmdpbi1sZWZ0OiAxNXB4OwotICAgIG1hcmdpbi10b3A6IC0yNXB4Owot
ICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotfQotCi0ucG9wb3Zlci50b3AtbGVmdC1hcnJvdyAu
YXJyb3cgewotICAgIC8qIFRoZSBkZWZhdWx0IGlzIHRvcC1sZWZ0LCBubyBzdHlsZXMgbmVlZGVk
LiAqLwotfQotCi0ucG9wb3Zlci50b3AtcmlnaHQtYXJyb3cgLmFycm93IHsKLSAgICByaWdodDog
MjVweDsKLSAgICBsZWZ0OiBhdXRvOwotfQotCi0ucG9wb3Zlci5ib3R0b20tbGVmdC1hcnJvdyAu
YXJyb3cgewotICAgIHRvcDogYXV0bzsKLSAgICBib3R0b206IDA7Ci0gICAgbWFyZ2luLXRvcDog
MDsKLSAgICBtYXJnaW4tYm90dG9tOiAtMjVweDsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAw
IC0xOXB4OwotfQotCi0ucG9wb3Zlci5ib3R0b20tcmlnaHQtYXJyb3cgLmFycm93IHsKLSAgICBy
aWdodDogMTVweDsKLSAgICBsZWZ0OiBhdXRvOwotICAgIHRvcDogYXV0bzsKLSAgICBib3R0b206
IDA7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAtMjVweDsKLSAgICBi
YWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOXB4OwotfQotCi0ucG9wb3Zlci5sZWZ0LXRvcC1hcnJv
dyAuYXJyb3cgewotICAgIHRvcDogMDsKLSAgICBtYXJnaW4tdG9wOiAxNXB4OwotICAgIG1hcmdp
bi1sZWZ0OiAtMjVweDsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zOHB4OwotfQotCi0u
cG9wb3Zlci5sZWZ0LWJvdHRvbS1hcnJvdyAuYXJyb3cgewotICAgIHRvcDogYXV0bzsKLSAgICBi
b3R0b206IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMTVweDsKLSAgICBtYXJnaW4tbGVmdDogLTI1
cHg7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzhweDsKLX0KLQotLnBvcG92ZXIucmln
aHQtdG9wLWFycm93IC5hcnJvdyB7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgbGVmdDogYXV0bzsKLSAg
ICB0b3A6IDA7Ci0gICAgbWFyZ2luLXRvcDogMTVweDsKLSAgICBtYXJnaW4tcmlnaHQ6IC0yNXB4
OwotICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU3cHg7Ci19Ci0KLS5wb3BvdmVyLnJpZ2h0
LWJvdHRvbS1hcnJvdyAuYXJyb3cgewotICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IGF1dG87Ci0g
ICAgdG9wOiBhdXRvOwotICAgIGJvdHRvbTogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAxNXB4Owot
ICAgIG1hcmdpbi1yaWdodDogLTI1cHg7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNTdw
eDsKLX0KLQotLnBvcG92ZXItZGV0YWlscyB7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4
dDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotCi0ucG9wb3Zlci1mdW5jdGlvbi1uYW1l
IHsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLnBvcG92ZXItc3RhY2t0cmFjZS10aXRs
ZSB7Ci0gICAgcGFkZGluZy10b3A6IDRweDsKLX0KLQotLnBvcG92ZXItZGV0YWlscy1yb3ctdGl0
bGUgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAg
IHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0KLS5wb3BvdmVyLWRldGFpbHMtcm93LWRhdGEgewot
ICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0KLS5wb3BvdmVyLWRldGFpbHMtdGl0bGUgewot
ICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQjhCOEI4OwotICAgIGZvbnQtc2l6ZTogMTFw
eDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwotICAg
IHBhZGRpbmctdG9wOiAwcHg7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcHJvZmlsZXNQYW5lbC5jc3Mg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Byb2ZpbGVzUGFuZWwuY3NzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzRiN2FlLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcHJvZmlsZXNQYW5lbC5jc3MKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFudGhvbnkgUmljYXVkIDxyaWtAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKiBQcm9maWxlciBTdHlsZSAqLwot
Ci0jcHJvZmlsZS12aWV3cyB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsK
LSAgICByaWdodDogMDsKLSAgICBsZWZ0OiAwOwotICAgIGJvdHRvbTogMDsKLX0KLQotLnN0YXR1
cy1iYXItaXRlbXMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAg
Ym90dG9tOiAwOwotICAgIGxlZnQ6IDIwMHB4OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAg
Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMTg0LCAxODQsIDE4NCk7Ci0gICAgbWFyZ2luLWxl
ZnQ6IC0xcHg7Ci19Ci0KLS5wcm9maWxlLWxhdW5jaGVyLXZpZXctdHJlZS1pdGVtID4gLmljb24g
ewotICAgIHBhZGRpbmc6IDE1cHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy90
b29sYmFySWNvbnMucG5nKTsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IC0xNjBweDsKLX0K
LQotLnByb2ZpbGUtc2lkZWJhci10cmVlLWl0ZW0gLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJ
bWFnZXMvcHJvZmlsZUljb24ucG5nKTsKLX0KLQotLnByb2ZpbGUtc2lkZWJhci10cmVlLWl0ZW0u
c21hbGwgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcHJvZmlsZVNtYWxsSWNvbi5w
bmcpOwotfQotCi0ucHJvZmlsZS1ncm91cC1zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAg
Y29udGVudDogdXJsKEltYWdlcy9wcm9maWxlR3JvdXBJY29uLnBuZyk7Ci19Ci0KLS5wcm9maWxl
LXZpZXcgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6
IDA7Ci0gICAgYm90dG9tOiAwOwotfQotCi0ucHJvZmlsZS12aWV3LnZpc2libGUgewotICAgIGRp
c3BsYXk6IGJsb2NrOwotfQotCi0ucHJvZmlsZS12aWV3IC5kYXRhLWdyaWQgewotICAgIGJvcmRl
cjogbm9uZTsKLSAgICBoZWlnaHQ6IDEwMCU7Ci19Ci0KLS5wcm9maWxlLXZpZXcgLmRhdGEtZ3Jp
ZCB0aC5hdmVyYWdlLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0ucHJv
ZmlsZS12aWV3IC5kYXRhLWdyaWQgdGQuYXZlcmFnZS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246
IHJpZ2h0OwotfQotCi0ucHJvZmlsZS12aWV3IC5kYXRhLWdyaWQgdGguc2VsZi1jb2x1bW4gewot
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotLnByb2ZpbGUtdmlldyAuZGF0YS1ncmlkIHRk
LnNlbGYtY29sdW1uIHsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLnByb2ZpbGUtdmll
dyAuZGF0YS1ncmlkIHRoLnRvdGFsLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwot
fQotCi0ucHJvZmlsZS12aWV3IC5kYXRhLWdyaWQgdGQudG90YWwtY29sdW1uIHsKLSAgICB0ZXh0
LWFsaWduOiByaWdodDsKLX0KLQotLnByb2ZpbGUtdmlldyAuZGF0YS1ncmlkIC5jYWxscy1jb2x1
bW4gewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotLnByb2ZpbGUtbm9kZS1maWxlIHsK
LSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgY29sb3I6IGdyYXk7Ci0gICAgbWFyZ2luLXRvcDogLTFw
eDsKLX0KLQotLmRhdGEtZ3JpZCB0ci5zZWxlY3RlZCAucHJvZmlsZS1ub2RlLWZpbGUgewotICAg
IGNvbG9yOiByZ2IoMzMlLCAzMyUsIDMzJSk7Ci19Ci0KLS5kYXRhLWdyaWQ6Zm9jdXMgdHIuc2Vs
ZWN0ZWQgLnByb2ZpbGUtbm9kZS1maWxlIHsKLSAgICBjb2xvcjogd2hpdGU7Ci19Ci0KLS5wZXJj
ZW50LXRpbWUtc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLXBvc2l0
aW9uOiAtMTkycHggLTI0cHg7Ci19Ci0KLS5mb2N1cy1wcm9maWxlLW5vZGUtc3RhdHVzLWJhci1p
dGVtIC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtOTZweCAwOwotfQotCi0u
ZXhjbHVkZS1wcm9maWxlLW5vZGUtc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7Ci0gICAgLXdlYmtp
dC1tYXNrLXBvc2l0aW9uOiAtMTI4cHggMDsKLX0KLQotLnJlc2V0LXByb2ZpbGUtc3RhdHVzLWJh
ci1pdGVtIC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAwIDA7Ci19Ci0KLS5n
YXJiYWdlLWNvbGxlY3Qtc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNr
LXBvc2l0aW9uOiAtMTI4cHggLTI0cHg7Ci19Ci0KLS5wcm9maWxlLWxhdW5jaGVyLXZpZXctY29u
dGVudCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICByaWdodDog
MDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLSAgICBwYWRkaW5nOiAwIDAgMCAxNnB4
OwotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAg
IC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLX0KLQotLmNvbnRyb2wtcHJvZmlsaW5n
IHsKLSAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7Ci19Ci0KLS5wcm9maWxlLWxh
dW5jaGVyLXZpZXctY29udGVudCBoMSB7Ci0gICAgcGFkZGluZzogMTVweCAwIDEwcHg7Ci19Ci0K
LS5wYW5lbC1lbmFibGVyLXZpZXcucHJvZmlsZS1sYXVuY2hlci12aWV3IGZvcm0gewotICAgIHBh
ZGRpbmc6IDA7Ci0gICAgZm9udC1zaXplOiAxM3B4OwotICAgIHdpZHRoOiAxMDAlOwotfQotCi0u
cGFuZWwtZW5hYmxlci12aWV3LnByb2ZpbGUtbGF1bmNoZXItdmlldyBsYWJlbCB7Ci0gICAgbWFy
Z2luOiAwOwotfQotCi0ucHJvZmlsZS1sYXVuY2hlci12aWV3LWNvbnRlbnQgcCB7Ci0gICAgY29s
b3I6IGdyZXk7Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotICAgIG1hcmdpbi1sZWZ0OiAyMnB4Owot
fQotCi0ucGFuZWwtZW5hYmxlci12aWV3LnByb2ZpbGUtbGF1bmNoZXItdmlldyBidXR0b246bm90
KC5zdGF0dXMtYmFyLWl0ZW0pIHsKLSAgICBjb2xvcjogcmdiKDYsIDYsIDYpOwotICAgIG1hcmdp
bjogMCAwIDE2cHg7Ci19Ci0KLS5wcm9maWxlLWxhdW5jaGVyLXZpZXctY29udGVudCBidXR0b24u
cnVubmluZzpub3QoLnN0YXR1cy1iYXItaXRlbSkgewotICAgIGNvbG9yOiByZWQ7Ci19Ci0KLWJv
ZHkuaW5hY3RpdmUgLnByb2ZpbGUtbGF1bmNoZXItdmlldy1jb250ZW50IGJ1dHRvbi5ydW5uaW5n
Om5vdCguc3RhdHVzLWJhci1pdGVtKSB7Ci0gICAgY29sb3I6IHJnYigyMjAsIDEzMCwgMTMwKTsK
LX0KLQotLmhpZ2hsaWdodGVkLXJvdyB7Ci0gICAgLXdlYmtpdC1hbmltYXRpb246ICJyb3dfaGln
aGxpZ2h0IiAycyAwczsKLX0KLQotQC13ZWJraXQta2V5ZnJhbWVzIHJvd19oaWdobGlnaHQgewot
ICAgIGZyb20ge2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDEyMCwgMSk7IH0KLSAg
ICB0byB7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDEyMCwgMCk7IH0KLX0KLQot
LnByb2ZpbGUtY2FudmFzLWRlY29yYXRpb24gewotICAgIGNvbG9yOiByZWQ7Ci0gICAgbWFyZ2lu
OiAtMTRweCAwIDEzcHggMjJweDsKLSAgICBwYWRkaW5nLWxlZnQ6IDE0cHg7Ci0gICAgYmFja2dy
b3VuZDogMCA3cHggdXJsKEltYWdlcy93YXJuaW5nSWNvbi5wbmcpIG5vLXJlcGVhdDsKLX0KLQot
LnByb2ZpbGUtY2FudmFzLWRlY29yYXRpb24gYnV0dG9uIHsKLSAgICBtYXJnaW46IDAgMCAwIDEw
cHggIWltcG9ydGFudDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvcmVzb3VyY2VWaWV3LmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvcmVzb3VyY2VWaWV3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcy
OGNjNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Jl
c291cmNlVmlldy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFudGhvbnkgUmljYXVkIDxyaWtAd2Via2l0Lm9y
Zz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0ucmVzb3VyY2UtdmlldyB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgYm90
dG9tOiAwOwotICAgIG92ZXJmbG93OiBhdXRvOwotfQotCi0ucmVzb3VyY2Utdmlldy52aXNpYmxl
IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotLnJlc291cmNlLXZpZXcuZm9udCB7Ci0gICAg
Zm9udC1zaXplOiA2MHB4OwotICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKLSAgICB3b3JkLXdy
YXA6IGJyZWFrLXdvcmQ7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIHBhZGRpbmc6IDE1
cHg7Ci19Ci0KLS5yZXNvdXJjZS12aWV3IC5zY3JpcHQtdmlldyB7Ci0gICAgYmFja2dyb3VuZC1j
b2xvcjogcmdiKDI0MCwgMjQwLCAyNDApOwotfQotCi0ucmVzb3VyY2Utdmlldy5pbWFnZSA+IC5p
bWFnZSB7Ci0gICAgcGFkZGluZzogMjBweCAyMHB4IDEwcHggMjBweDsKLSAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7Ci19Ci0KLS5yZXNvdXJjZS12aWV3LmltYWdlID4gLmluZm8gewotICAgIHBhZGRp
bmctYm90dG9tOiAxMHB4OwotICAgIGZvbnQtc2l6ZTogMTFweDsKLSAgICAtd2Via2l0LXVzZXIt
c2VsZWN0OiB0ZXh0OwotfQotCi0ucmVzb3VyY2Utdmlldy5pbWFnZSBpbWcucmVzb3VyY2UtaW1h
Z2UtdmlldyB7Ci0gICAgbWF4LXdpZHRoOiAxMDAlOwotICAgIG1heC1oZWlnaHQ6IDEwMDBweDsK
LSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL2NoZWNrZXIucG5nKTsKLSAgICAtd2Vi
a2l0LWJveC1zaGFkb3c6IDBweCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuNSk7Ci0gICAgLXdl
YmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLSAgICAtd2Via2l0LXVzZXItZHJhZzogYXV0bzsKLX0K
LQotLnJlc291cmNlLXN0YXR1cy1pbWFnZSB7Ci0gICAgbWFyZ2luLXRvcDogLTNweDsKLSAgICB2
ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotfQotCi0ucmVzb3VyY2Utdmlldy5pbWFnZSAudGl0bGUg
ewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBmb250LXNpemU6IDEzcHg7Ci19Ci0KLS5y
ZXNvdXJjZS12aWV3LmltYWdlIC5pbmZvTGlzdCB7Ci0gICAgbWFyZ2luOiAwOwotfQotCi0ucmVz
b3VyY2Utdmlldy5pbWFnZSAuaW5mb0xpc3QgZHQgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwot
ICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB3aWR0aDogNTAlOwotICAgIHRleHQtYWxp
Z246IHJpZ2h0OwotICAgIGNvbG9yOiByZ2IoNzYsIDc2LCA3Nik7Ci19Ci0KLS5yZXNvdXJjZS12
aWV3LmltYWdlIC5pbmZvTGlzdCBkZCB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAg
IHBhZGRpbmctbGVmdDogOHB4OwotICAgIHdpZHRoOiA1MCU7Ci0gICAgdGV4dC1hbGlnbjogbGVm
dDsKLSAgICBtYXJnaW46IDA7Ci19Ci0KLS5yZXNvdXJjZS12aWV3LmltYWdlIC5pbmZvTGlzdCBk
ZDo6YWZ0ZXIgewotICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci0gICAgY29udGVudDogIlxBIjsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcmVzb3VyY2Vz
UGFuZWwuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9yZXNvdXJjZXNQ
YW5lbC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NDE2NjkwLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcmVzb3VyY2VzUGFuZWwu
Y3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBbnRob255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLnJlc291cmNl
cy5wYW5lbCAuc2lkZWJhci1yZXNpemVyLXZlcnRpY2FsIHsKLSAgICB0b3A6IDIzcHg7Ci19Ci0K
LS5yZXNvdXJjZXMucGFuZWwgLnNpZGViYXIgewotICAgIHBhZGRpbmctbGVmdDogMDsKLSAgICB6
LWluZGV4OiAxMDsKLX0KLQotLnJlc291cmNlcy5wYW5lbCAuc2lkZWJhciBsaSB7Ci0gICAgaGVp
Z2h0OiAxOHB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0KLS5yZXNvdXJjZXMucGFu
ZWwgLnNpZGViYXIgbGkuc2VsZWN0ZWQgewotICAgIGNvbG9yOiB3aGl0ZTsKLSAgICB0ZXh0LXNo
YWRvdzogcmdiYSgwLCAwLCAwLCAwLjMzKSAxcHggMXB4IDA7Ci19Ci0KLS5yZXNvdXJjZXMucGFu
ZWwgLnNpZGViYXIgbGkuc2VsZWN0ZWQgLnNlbGVjdGlvbiB7Ci0gICAgYmFja2dyb3VuZC1pbWFn
ZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShy
Z2IoMTYyLCAxNzcsIDIwNykpLCB0byhyZ2IoMTIwLCAxMzgsIDE3NykpKTsKLSAgICBib3JkZXIt
dG9wOiAxcHggc29saWQgIzk3OTc5NzsKLSAgICBoZWlnaHQ6IDE4cHg7Ci19Ci0KLS5yZXNvdXJj
ZXMucGFuZWwgLnNpZGViYXIgOmZvY3VzIGxpLnNlbGVjdGVkIC5zZWxlY3Rpb24gewotICAgIGJh
Y2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBi
b3R0b20sIGZyb20ocmdiKDkyLCAxNDcsIDIxMykpLCB0byhyZ2IoMjEsIDgzLCAxNzApKSk7Ci0g
ICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYig2OCwgMTI4LCAyMDApOwotfQotCi1ib2R5Lmlu
YWN0aXZlIC5yZXNvdXJjZXMucGFuZWwgLnNpZGViYXIgbGkuc2VsZWN0ZWQgLnNlbGVjdGlvbiB7
Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9w
LCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMTgwLCAxODAsIDE4MCkpLCB0byhyZ2IoMTM4LCAxMzgs
IDEzOCkpKTsKLSAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiKDE1MSwgMTUxLCAxNTEpOwot
fQotCi0ucmVzb3VyY2VzLnBhbmVsIC5zaWRlYmFyIC5pY29uIHsKLSAgICB3aWR0aDogMTZweDsK
LSAgICBoZWlnaHQ6IDE2cHg7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci19Ci0KLS5yZXNvdXJjZXMucGFu
ZWwgLmJhc2Utc3RvcmFnZS10cmVlLWVsZW1lbnQtdGl0bGUgewotICAgIG92ZXJmbG93OiBoaWRk
ZW47Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lz
OwotICAgIHBhZGRpbmctbGVmdDogMnB4OwotICAgIHRvcDogMXB4OwotfQotCi1saS5zZWxlY3Rl
ZCAuYmFzZS1zdG9yYWdlLXRyZWUtZWxlbWVudC1zdWJ0aXRsZSB7Ci0gICAgY29sb3I6IHdoaXRl
OwotfQotCi0uYmFzZS1zdG9yYWdlLXRyZWUtZWxlbWVudC1zdWJ0aXRsZSB7Ci0gICAgcGFkZGlu
Zy1sZWZ0OiAycHg7Ci0gICAgY29sb3I6IHJnYig4MCwgODAsIDgwKTsKLSAgICB0ZXh0LXNoYWRv
dzogbm9uZTsKLX0KLQotLnJlc291cmNlcy5wYW5lbCAuc3RhdHVzIHsKLSAgICBmbG9hdDogcmln
aHQ7Ci0gICAgaGVpZ2h0OiAxNnB4OwotICAgIG1hcmdpbi10b3A6IDFweDsKLSAgICBtYXJnaW4t
bGVmdDogNHB4OwotICAgIGxpbmUtaGVpZ2h0OiAxZW07Ci19Ci0KLS5yZXNvdXJjZXMucGFuZWwg
bGkgLnN0YXR1cyAuYnViYmxlIHsKLSAgICBoZWlnaHQ6IDEzcHg7Ci0gICAgcGFkZGluZy10b3A6
IDA7Ci19Ci0KLS5zdG9yYWdlLXZpZXcgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgb3ZlcmZs
b3c6IGhpZGRlbjsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxl
ZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotfQotCi0uc3RvcmFnZS12aWV3
LnZpc2libGUgewotICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0uc3RvcmFnZS12aWV3IHsKLSAg
ICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi0uc3RvcmFnZS12aWV3IC5kYXRhLWdyaWQ6bm90KC5p
bmxpbmUpIHsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0uc3Rv
cmFnZS12aWV3IC5zdG9yYWdlLXRhYmxlLWVycm9yIHsKLSAgICBjb2xvcjogcmdiKDY2JSwgMzMl
LCAzMyUpOwotfQotCi0uc3RvcmFnZS12aWV3LnF1ZXJ5IHsKLSAgICBwYWRkaW5nOiAycHggMDsK
LSAgICBvdmVyZmxvdy15OiBvdmVybGF5OwotICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKLX0KLQot
LmRhdGFiYXNlLXF1ZXJ5LXByb21wdCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHBh
ZGRpbmc6IDFweCAyMnB4IDFweCAyNHB4OwotICAgIG1pbi1oZWlnaHQ6IDE2cHg7Ci0gICAgd2hp
dGUtc3BhY2U6IHByZS13cmFwOwotICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGUt
cGxhaW50ZXh0LW9ubHk7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLX0KLQotLmRh
dGFiYXNlLXVzZXItcXVlcnk6OmJlZm9yZSwgLmRhdGFiYXNlLXF1ZXJ5LXByb21wdDo6YmVmb3Jl
LCAuZGF0YWJhc2UtcXVlcnktcmVzdWx0OjpiZWZvcmUgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBjb250ZW50OiAiIjsKLSAgICBsZWZ0OiA3cHg7
Ci0gICAgdG9wOiAwLjhlbTsKLSAgICB3aWR0aDogMTBweDsKLSAgICBoZWlnaHQ6IDEwcHg7Ci0g
ICAgbWFyZ2luLXRvcDogLTVweDsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotfQot
Ci0uZGF0YWJhc2UtcXVlcnktcHJvbXB0OjpiZWZvcmUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6
IHVybChJbWFnZXMvdXNlcklucHV0SWNvbi5wbmcpOwotfQotCi0uZGF0YWJhc2UtdXNlci1xdWVy
eSB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xp
ZCByZ2IoMjQ1LCAyNDUsIDI0NSk7Ci0gICAgcGFkZGluZzogMXB4IDIycHggMXB4IDI0cHg7Ci0g
ICAgbWluLWhlaWdodDogMTZweDsKLX0KLQotLmRhdGFiYXNlLXVzZXItcXVlcnk6OmJlZm9yZSB7
Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy91c2VySW5wdXRQcmV2aW91c0ljb24u
cG5nKTsKLX0KLQotLmRhdGFiYXNlLXF1ZXJ5LXRleHQgewotICAgIGNvbG9yOiByZ2IoMCwgMTI4
LCAyNTUpOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci19Ci0KLS5kYXRhYmFzZS1x
dWVyeS1yZXN1bHQgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBwYWRkaW5nOiAxcHgg
MjJweCAxcHggMjRweDsKLSAgICBtaW4taGVpZ2h0OiAxNnB4OwotICAgIG1hcmdpbi1sZWZ0OiAt
MjRweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAwOwotfQotCi0uZGF0YWJhc2UtcXVlcnktcmVzdWx0
LmVycm9yIHsKLSAgICBjb2xvcjogcmVkOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7
Ci19Ci0KLS5kYXRhYmFzZS1xdWVyeS1yZXN1bHQuZXJyb3I6OmJlZm9yZSB7Ci0gICAgYmFja2dy
b3VuZC1pbWFnZTogdXJsKEltYWdlcy9lcnJvckljb24ucG5nKTsKLX0KLQotLnJlc291cmNlLXNp
ZGViYXItdHJlZS1pdGVtIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jlc291cmNl
UGxhaW5JY29uLnBuZyk7Ci19Ci0KLS5jaGlsZHJlbi5zbWFsbCAucmVzb3VyY2Utc2lkZWJhci10
cmVlLWl0ZW0gLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcmVzb3VyY2VQbGFpbklj
b25TbWFsbC5wbmcpOwotfQotCi0ucmVzb3VyY2Utc2lkZWJhci10cmVlLWl0ZW0ucmVzb3VyY2Vz
LXR5cGUtaW1hZ2UgLmljb24gewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBiYWNrZ3Jv
dW5kLWltYWdlOiB1cmwoSW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uLnBuZyk7Ci0gICAgYmFja2dy
b3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgICBjb250ZW50OiAiIjsKLX0KLQotLnJlc291cmNl
cy10eXBlLWltYWdlIC5pbWFnZS1yZXNvdXJjZS1pY29uLXByZXZpZXcgewotICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKLSAgICBtYXJnaW46IGF1dG87Ci0gICAgdG9wOiAzcHg7Ci0gICAgYm90dG9t
OiA0cHg7Ci0gICAgbGVmdDogNXB4OwotICAgIHJpZ2h0OiA1cHg7Ci0gICAgbWF4LXdpZHRoOiAx
OHB4OwotICAgIG1heC1oZWlnaHQ6IDIxcHg7Ci0gICAgbWluLXdpZHRoOiAxcHg7Ci0gICAgbWlu
LWhlaWdodDogMXB4OwotfQotCi0uY2hpbGRyZW4uc21hbGwgLnJlc291cmNlLXNpZGViYXItdHJl
ZS1pdGVtLnJlc291cmNlcy10eXBlLWltYWdlIC5pY29uIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdl
OiB1cmwoSW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uU21hbGwucG5nKTsKLSAgICBjb250ZW50OiAi
IjsKLX0KLQotLmNoaWxkcmVuLnNtYWxsIC5yZXNvdXJjZXMtdHlwZS1pbWFnZSAuaW1hZ2UtcmVz
b3VyY2UtaWNvbi1wcmV2aWV3IHsKLSAgICB0b3A6IDJweDsKLSAgICBib3R0b206IDFweDsKLSAg
ICBsZWZ0OiAzcHg7Ci0gICAgcmlnaHQ6IDNweDsKLSAgICBtYXgtd2lkdGg6IDhweDsKLSAgICBt
YXgtaGVpZ2h0OiAxMXB4OwotfQotCi0ucmVzb3VyY2Utc2lkZWJhci10cmVlLWl0ZW0ucmVzb3Vy
Y2VzLXR5cGUtZG9jdW1lbnQgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcmVzb3Vy
Y2VEb2N1bWVudEljb24ucG5nKTsKLX0KLQotLmNoaWxkcmVuLnNtYWxsIC5yZXNvdXJjZS1zaWRl
YmFyLXRyZWUtaXRlbS5yZXNvdXJjZXMtdHlwZS1kb2N1bWVudCAuaWNvbiB7Ci0gICAgY29udGVu
dDogdXJsKEltYWdlcy9yZXNvdXJjZURvY3VtZW50SWNvblNtYWxsLnBuZyk7Ci19Ci0KLS5yZXNv
dXJjZS1zaWRlYmFyLXRyZWUtaXRlbS5yZXNvdXJjZXMtdHlwZS1zdHlsZXNoZWV0IC5pY29uIHsK
LSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jlc291cmNlQ1NTSWNvbi5wbmcpOwotfQotCi0uY2hp
bGRyZW4uc21hbGwgLnJlc291cmNlLXNpZGViYXItdHJlZS1pdGVtLnJlc291cmNlcy10eXBlLXN0
eWxlc2hlZXQgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcmVzb3VyY2VEb2N1bWVu
dEljb25TbWFsbC5wbmcpOwotfQotCi0ucmVzb3VyY2Utc2lkZWJhci10cmVlLWl0ZW0ucmVzb3Vy
Y2VzLXR5cGUtaW1hZ2UgLmljb24gewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBiYWNr
Z3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uLnBuZyk7Ci0gICAgYmFj
a2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgICBjb250ZW50OiAiIjsKLX0KLQotLmNoaWxk
cmVuLnNtYWxsIC5yZXNvdXJjZS1zaWRlYmFyLXRyZWUtaXRlbS5yZXNvdXJjZXMtdHlwZS1pbWFn
ZSAuaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9yZXNvdXJjZVBsYWlu
SWNvblNtYWxsLnBuZyk7Ci0gICAgY29udGVudDogIiI7Ci19Ci0KLS5yZXNvdXJjZS1zaWRlYmFy
LXRyZWUtaXRlbS5yZXNvdXJjZXMtdHlwZS1mb250IC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwo
SW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uLnBuZyk7Ci19Ci0KLS5jaGlsZHJlbi5zbWFsbCAucmVz
b3VyY2Utc2lkZWJhci10cmVlLWl0ZW0ucmVzb3VyY2VzLXR5cGUtZm9udCAuaWNvbiB7Ci0gICAg
Y29udGVudDogdXJsKEltYWdlcy9yZXNvdXJjZVBsYWluSWNvblNtYWxsLnBuZyk7Ci19Ci0KLS5y
ZXNvdXJjZS1zaWRlYmFyLXRyZWUtaXRlbS5yZXNvdXJjZXMtdHlwZS1zY3JpcHQgLmljb24gewot
ICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcmVzb3VyY2VKU0ljb24ucG5nKTsKLX0KLQotLmNoaWxk
cmVuLnNtYWxsIC5yZXNvdXJjZS1zaWRlYmFyLXRyZWUtaXRlbS5yZXNvdXJjZXMtdHlwZS1zY3Jp
cHQgLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvcmVzb3VyY2VEb2N1bWVudEljb25T
bWFsbC5wbmcpOwotfQotCi0ucmVzb3VyY2Utc2lkZWJhci10cmVlLWl0ZW0ucmVzb3VyY2VzLXR5
cGUteGhyIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jlc291cmNlUGxhaW5JY29u
LnBuZyk7Ci19Ci0KLS5jaGlsZHJlbi5zbWFsbCAucmVzb3VyY2Utc2lkZWJhci10cmVlLWl0ZW0u
cmVzb3VyY2VzLXR5cGUteGhyIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Jlc291
cmNlRG9jdW1lbnRJY29uU21hbGwucG5nKTsKLX0KLQotLmZyYW1lLXN0b3JhZ2UtdHJlZS1pdGVt
IC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2ZyYW1lLnBuZyk7Ci19Ci0KLS5kYXRh
YmFzZS1zdG9yYWdlLXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9k
YXRhYmFzZS5wbmcpOwotfQotCi0uZGF0YWJhc2UtdGFibGUtc3RvcmFnZS10cmVlLWl0ZW0gLmlj
b24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvZGF0YWJhc2VUYWJsZS5wbmcpOwotfQotCi0u
aW5kZXhlZC1kYi1zdG9yYWdlLXRyZWUtaXRlbSAuaWNvbiB7Ci0gICAgY29udGVudDogdXJsKElt
YWdlcy9pbmRleGVkREIucG5nKTsKLX0KLQotLmluZGV4ZWQtZGItb2JqZWN0LXN0b3JlLXN0b3Jh
Z2UtdHJlZS1pdGVtIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2luZGV4ZWREQk9i
amVjdFN0b3JlLnBuZyk7Ci19Ci0KLS5pbmRleGVkLWRiLWluZGV4LXN0b3JhZ2UtdHJlZS1pdGVt
IC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2luZGV4ZWREQkluZGV4LnBuZyk7Ci19
Ci0KLS5kb21zdG9yYWdlLXN0b3JhZ2UtdHJlZS1pdGVtLmxvY2FsLXN0b3JhZ2UgLmljb24gewot
ICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvbG9jYWxTdG9yYWdlLnBuZyk7Ci19Ci0KLS5kb21zdG9y
YWdlLXN0b3JhZ2UtdHJlZS1pdGVtLnNlc3Npb24tc3RvcmFnZSAuaWNvbiB7Ci0gICAgY29udGVu
dDogdXJsKEltYWdlcy9zZXNzaW9uU3RvcmFnZS5wbmcpOwotfQotCi0uY29va2llLXN0b3JhZ2Ut
dHJlZS1pdGVtIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2Nvb2tpZS5wbmcpOwot
fQotCi0uYXBwbGljYXRpb24tY2FjaGUtc3RvcmFnZS10cmVlLWl0ZW0gLmljb24gewotICAgIGNv
bnRlbnQ6IHVybChJbWFnZXMvYXBwbGljYXRpb25DYWNoZS5wbmcpOwotfQotCi0uZmlsZS1zeXN0
ZW0tc3RvcmFnZS10cmVlLWl0ZW0gLmljb24gewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvZmls
ZVN5c3RlbS5wbmcpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9yZXZpc2lvbkhpc3RvcnkuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9yZXZpc2lvbkhpc3RvcnkuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwYzc3ZWM3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvcmV2aXNpb25IaXN0b3J5LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Lm91dGxpbmUtZGlzY2xvc3VyZS5yZXZpc2lvbi1oaXN0b3J5LWRyYXdlciB7Ci0gICAgLXdlYmtp
dC1wYWRkaW5nLXN0YXJ0OiAwOwotICAgIG92ZXJmbG93OiBhdXRvOwotfQotCi0ub3V0bGluZS1k
aXNjbG9zdXJlLnJldmlzaW9uLWhpc3RvcnktZHJhd2VyIG9sIHsKLSAgICBtYXJnaW4tdG9wOiAy
cHg7Ci0gICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiAwOwotICAgIHBhZGRpbmctbGVmdDogMCAh
aW1wb3J0YW50OwotfQotCi0ub3V0bGluZS1kaXNjbG9zdXJlLnJldmlzaW9uLWhpc3RvcnktZHJh
d2VyID4gb2wgewotICAgIHBhZGRpbmctbGVmdDogMDsKLX0KLQotLm91dGxpbmUtZGlzY2xvc3Vy
ZS5yZXZpc2lvbi1oaXN0b3J5LWRyYXdlciBsaSB7Ci0gICAgcGFkZGluZy1sZWZ0OiA2cHg7Ci0g
ICAgbWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotICAgIGhlaWdodDogMTNw
eDsKLX0KLQotLm91dGxpbmUtZGlzY2xvc3VyZS5yZXZpc2lvbi1oaXN0b3J5LWRyYXdlciBsaS5w
YXJlbnQgewotICAgIG1hcmdpbi1sZWZ0OiA0cHg7Ci19Ci0KLS5yZXZpc2lvbi1oaXN0b3J5LWxp
bmsgewotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotICAgIGN1cnNvcjogcG9pbnRl
cjsKLSAgICBjb2xvcjogIzAwZTsKLSAgICBwYWRkaW5nOiAwIDRweDsKLX0KLQotLnJldmlzaW9u
LWhpc3RvcnktbGluay1yb3cgewotICAgIHBhZGRpbmctbGVmdDogMTZweDsKLX0KLQotLm91dGxp
bmUtZGlzY2xvc3VyZS5yZXZpc2lvbi1oaXN0b3J5LWRyYXdlciAucmV2aXNpb24taGlzdG9yeS1s
aW5lIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDA7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4
dDsKLX0KLQotLnJldmlzaW9uLWhpc3RvcnktZHJhd2VyIC53ZWJraXQtbGluZS1udW1iZXIgewot
ICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNCQkI7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
I0YwRjBGMDsgICAgCi19Ci0KLS5yZXZpc2lvbi1oaXN0b3J5LWRyYXdlciBsaS5yZXZpc2lvbi1o
aXN0b3J5LXJldmlzaW9uIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7Ci19Ci0KLS5yZXZpc2lv
bi1oaXN0b3J5LWxpbmUtYWRkZWQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDIz
OCwgMTUzKTsKLX0KLQotLnJldmlzaW9uLWhpc3RvcnktbGluZS1yZW1vdmVkIHsKLSAgICBiYWNr
Z3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyMjEsIDIyMSk7Ci19Ci0KLS5yZXZpc2lvbi1oaXN0b3J5
LWxpbmUtc2VwYXJhdG9yIC53ZWJraXQtbGluZS1udW1iZXIgewotICAgIGNvbG9yOiB0cmFuc3Bh
cmVudDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
c2NyaXB0c1BhbmVsLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvc2Ny
aXB0c1BhbmVsLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M0YjkwMS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3NjcmlwdHNQYW5l
bC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFudGhvbnkgUmljYXVkIDxyaWtAd2Via2l0Lm9yZz4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0uc2NyaXB0
cy1wYXVzZS1vbi1leGNlcHRpb25zLXN0YXR1cy1iYXItaXRlbSAuZ2x5cGggewotICAgIC13ZWJr
aXQtbWFzay1wb3NpdGlvbjogLTI1NnB4IDA7Ci19Ci0KLS5zY3JpcHRzLXBhdXNlLW9uLWV4Y2Vw
dGlvbnMtc3RhdHVzLWJhci1pdGVtLnRvZ2dsZWQtYWxsIC5nbHlwaCB7Ci0gICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiKDY2LCAxMjksIDIzNSk7Ci19Ci0KLS5zY3JpcHRzLXBhdXNlLW9uLWV4Y2Vw
dGlvbnMtc3RhdHVzLWJhci1pdGVtLnRvZ2dsZWQtdW5jYXVnaHQgLmdseXBoIHsKLSAgICBiYWNr
Z3JvdW5kLWNvbG9yOiBwdXJwbGU7Ci19Ci0KLS5zY3JpcHRzLXRvZ2dsZS1wcmV0dHktcHJpbnQt
c3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtMjU2
cHggLTI0cHg7Ci19Ci0KLS5zY3JpcHRzLXRvZ2dsZS1wcmV0dHktcHJpbnQtc3RhdHVzLWJhci1p
dGVtLnRvZ2dsZWQgLmdseXBoIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNjYsIDEyOSwg
MjM1KTsKLX0KLQotLmV2YWx1YXRlLXNuaXBwZXQtc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7Ci0g
ICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtNjRweCAtNDhweDsKLX0KLQotLmV2YWx1YXRlLXNu
aXBwZXQtc3RhdHVzLWJhci1pdGVtLnRvZ2dsZWQgLmdseXBoIHsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2IoNjYsIDEyOSwgMjM1KTsKLX0KLQotI3NjcmlwdHMtZGVidWctdG9vbGJhciB7Ci0g
ICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIG1hcmdpbi10b3A6IC0xcHg7Ci0gICAgaGVpZ2h0
OiAyNHB4OwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMjAyLCAyMDIsIDIwMik7
Ci19Ci0KLSNzY3JpcHRzLWVkaXRvci10b29sYmFyIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7
Ci0gICAgbWFyZ2luLXRvcDogLTFweDsKLSAgICBoZWlnaHQ6IDI0cHg7Ci19Ci0KLSNzY3JpcHRz
LWZpbGVzIHsKLSAgICBtYXgtd2lkdGg6IDI1MHB4OwotfQotCi0jc2NyaXB0cy1maWxlcyBvcHRp
b24uZXh0ZW5zaW9uLXNjcmlwdCB7Ci0gICAgY29sb3I6IHJnYig3MCwgMTM0LCAyNDApOwotfQot
Ci0jc2NyaXB0cy1mdW5jdGlvbnMgewotICAgIG1heC13aWR0aDogMTUwcHg7Ci19Ci0KLSNzY3Jp
cHRzLXN0YXR1cy1iYXIgLnN0YXR1cy1iYXItaXRlbSBpbWcgewotICAgIG1hcmdpbi10b3A6IDJw
eDsKLX0KLQotI3NjcmlwdHMtcGF1c2UgaW1nIHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2Rl
YnVnZ2VyUGF1c2UucG5nKTsKLX0KLQotI3NjcmlwdHMtcGF1c2UucGF1c2VkIGltZyB7Ci0gICAg
Y29udGVudDogdXJsKEltYWdlcy9kZWJ1Z2dlckNvbnRpbnVlLnBuZyk7Ci19Ci0KLSNzY3JpcHRz
LXN0ZXAtb3ZlciBpbWcgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvZGVidWdnZXJTdGVwT3Zl
ci5wbmcpOwotfQotCi0jc2NyaXB0cy1zdGVwLWludG8gaW1nIHsKLSAgICBjb250ZW50OiB1cmwo
SW1hZ2VzL2RlYnVnZ2VyU3RlcEludG8ucG5nKTsKLX0KLQotI3NjcmlwdHMtc3RlcC1vdXQgaW1n
IHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2RlYnVnZ2VyU3RlcE91dC5wbmcpOwotfQotCi0u
dG9nZ2xlLWJyZWFrcG9pbnRzIC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwo
SW1hZ2VzL3N0YXR1c2JhckJ1dHRvbkdseXBocy5wbmcpOwotICAgIC13ZWJraXQtbWFzay1wb3Np
dGlvbjogLTMycHggMDsKLSAgICAtd2Via2l0LW1hc2stc2l6ZTogMzIwcHggNzJweDsKLSAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2IoOTYsIDk2LCA5NikgIWltcG9ydGFudDsKLX0KLQotQG1lZGlh
ICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDEuNSkgewotLnRvZ2dsZS1icmVha3Bv
aW50cyAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNi
YXJCdXR0b25HbHlwaHMyeC5wbmcpOyAgICAgICAgCi19Ci19Ci0KLS50b2dnbGUtYnJlYWtwb2lu
dHMudG9nZ2xlZC1vbiAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlvbjogMCAtMjRw
eDsKLX0KLQotI3NjcmlwdHMtZGVidWdnZXItc3RhdHVzIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgbGluZS1oZWlnaHQ6IDI0cHg7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiA4cHg7
Ci19Ci0KLSNzY3JpcHRzLWRlYnVnLXNpZGViYXItcmVzaXplci13aWRnZXQgewotICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgaGVpZ2h0OiAyM3B4OwotICAgIHJpZ2h0
OiAwOwotICAgIHdpZHRoOiAxNnB4OwotICAgIGN1cnNvcjogZXctcmVzaXplOwotICAgIGJhY2tn
cm91bmQtaW1hZ2U6IHVybChJbWFnZXMvc3RhdHVzYmFyUmVzaXplckhvcml6b250YWwucG5nKTsK
LSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotICAgIGJhY2tncm91bmQtcG9zaXRp
b246IGNlbnRlcjsKLSAgICB6LWluZGV4OiAxMzsKLX0KLQotLnNjcmlwdHMtbmF2aWdhdG9yLXJl
c2l6ZXItd2lkZ2V0IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAg
IHJpZ2h0OiAwOwotICAgIGhlaWdodDogMjRweDsKLSAgICB3aWR0aDogMTZweDsKLSAgICBjdXJz
b3I6IGV3LXJlc2l6ZTsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3N0YXR1c2Jh
clJlc2l6ZXJIb3Jpem9udGFsLnBuZyk7Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVh
dDsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7Ci19Ci0KLS5zdGF0dXMtYmFyLWl0
ZW0uc2NyaXB0cy1uYXZpZ2F0b3Itc2hvdy1oaWRlLWJ1dHRvbiA+IC5nbHlwaCB7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpOwotICAgIC13ZWJraXQtbWFzay1pbWFn
ZTogdXJsKEltYWdlcy9uYXZpZ2F0b3JTaG93SGlkZUJ1dHRvbi5wbmcpOwotICAgIC13ZWJraXQt
bWFzay1wb3NpdGlvbjogMCAwOwotICAgIC13ZWJraXQtbWFzay1zaXplOiA0OHB4IDMycHg7Ci19
Ci0KLS5zdGF0dXMtYmFyLWl0ZW0uc2NyaXB0cy1uYXZpZ2F0b3Itc2hvdy1oaWRlLWJ1dHRvbi50
b2dnbGVkLXBpbm5lZCA+IC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtMTZw
eCAwOwotfQotCi0uc3RhdHVzLWJhci1pdGVtLnNjcmlwdHMtbmF2aWdhdG9yLXNob3ctaGlkZS1i
dXR0b24udG9nZ2xlZC1vdmVybGF5ID4gLmdseXBoIHsKLSAgICAtd2Via2l0LW1hc2stcG9zaXRp
b246IC0zMnB4IDA7Ci19Ci0KLWJ1dHRvbi5zdGF0dXMtYmFyLWl0ZW0uc2NyaXB0cy1uYXZpZ2F0
b3Itc2hvdy1oaWRlLWJ1dHRvbiB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDog
MDsKLSAgICBsZWZ0OiAwOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Ci0gICAgaGVpZ2h0
OiAxNnB4OwotICAgIHdpZHRoOiAxNnB4OwotICAgIG1hcmdpbjogNHB4IDJweCAycHggMnB4Owot
ICAgIGJvcmRlcjogbm9uZTsKLX0KLQotYnV0dG9uLnN0YXR1cy1iYXItaXRlbS5zY3JpcHRzLW5h
dmlnYXRvci1zaG93LWhpZGUtYnV0dG9uOmFjdGl2ZSB7Ci0gICAgdG9wOiAxcHg7Ci0gICAgbGVm
dDogMXB4OwotfQotCi1idXR0b24uc3RhdHVzLWJhci1pdGVtLnNjcmlwdHMtbmF2aWdhdG9yLXNo
b3ctaGlkZS1idXR0b24udG9nZ2xlZC1vdmVybGF5Ci17Ci0gICAgbGVmdDogYXV0bzsKLSAgICBy
aWdodDogMTVweDsKLX0KLQotLnNjcmlwdHMtdmlld3MtY29udGFpbmVyIHsKLSAgICBwb3NpdGlv
bjogYWJzb2x1dGU7Ci0gICAgdG9wOiAyM3B4OwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTog
MDsKLSAgICBsZWZ0OiAwOwotfQotCi0uc2NyaXB0LXZpZXcgewotICAgIGRpc3BsYXk6IG5vbmU7
Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9w
OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBsZWZ0OiAwOwotfQotCi0u
c2NyaXB0LXZpZXcudmlzaWJsZSB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLS5kZWRpY2F0
ZWQtd29ya2VyLWl0ZW0gewotICAgIG1hcmdpbjogNXB4IDBweCA1cHggMXB4OwotfQotCi0jc2hh
cmVkLXdvcmtlcnMtbGlzdCB7Ci0gICAgbWFyZ2luOiA1cHggMHB4IDVweCAyMHB4OwotICAgIGZv
bnQtc3R5bGU6aXRhbGljOwotfQotCi0jcGF1c2Utd29ya2Vycy1jaGVja2JveCA+IGlucHV0IHsK
LSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAycHg7Ci19Ci0KLSNzY3JpcHRzLWVk
aXRvci1jb250YWluZXItdGFiYmVkLXBhbmUgLnRhYmJlZC1wYW5lLWhlYWRlciB7Ci0gICAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAlIDAlLCAwJSAxMDAlLCBm
cm9tKCNGNUY1RjUpLCB0bygjRTVFNUU1KSk7Ci19Ci0KLSNzY3JpcHRzLWVkaXRvci1jb250YWlu
ZXItdGFiYmVkLXBhbmUgLnRhYmJlZC1wYW5lLWhlYWRlci1jb250ZW50cyB7Ci0gICAgbWFyZ2lu
LWxlZnQ6IDIwcHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAzNnB4OwotfQotCi0jc2NyaXB0cy1lZGl0
b3ItY29udGFpbmVyLXRhYmJlZC1wYW5lIC50YWJiZWQtcGFuZS1oZWFkZXItdGFiIHsKLSAgICBi
b3JkZXItYm90dG9tOiAxcHggc29saWQgI0JCQjsKLX0KLQotLmZ1bmN0aW9uLWxvY2F0aW9uLWxp
bmsgewotICAgIGZsb2F0OiByaWdodDsKLSAgICBtYXJnaW4tbGVmdDogMTBweDsKLX0KLQotLmZ1
bmN0aW9uLXBvcG92ZXItdGl0bGUgewotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQUFB
OwotICAgIG1hcmdpbi1ib3R0b206IDNweDsKLSAgICBwYWRkaW5nLWJvdHRvbTogMnB4OwotfQot
Ci0uZnVuY3Rpb24tcG9wb3Zlci10aXRsZSAuZnVuY3Rpb24tbmFtZSB7Ci0gICAgZm9udC13ZWln
aHQ6IGJvbGQ7Ci19Ci0KLWJ1dHRvbi5zdGF0dXMtYmFyLWl0ZW0uc2NyaXB0cy1kZWJ1Z2dlci1z
aG93LWhpZGUtYnV0dG9uIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwot
ICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Ci0gICAgaGVpZ2h0OiAxNnB4OwotICAgIHdpZHRo
OiAxNnB4OwotICAgIG1hcmdpbjogNHB4IDJweCAycHggMnB4OwotICAgIGJvcmRlcjogbm9uZTsK
LX0KLQotLnNwbGl0LXZpZXctaG9yaXpvbnRhbCBidXR0b24uc3RhdHVzLWJhci1pdGVtLnNjcmlw
dHMtZGVidWdnZXItc2hvdy1oaWRlLWJ1dHRvbiwKLS5zcGxpdC12aWV3LWhvcml6b250YWwgI3Nj
cmlwdHMtZGVidWctc2lkZWJhci1yZXNpemVyLXdpZGdldCB7Ci0gICAgZGlzcGxheTogbm9uZTsK
LX0KLQotYnV0dG9uLnN0YXR1cy1iYXItaXRlbS5zY3JpcHRzLWRlYnVnZ2VyLXNob3ctaGlkZS1i
dXR0b246YWN0aXZlIHsKLSAgICB0b3A6IDFweDsKLX0KLQotLnN0YXR1cy1iYXItaXRlbS5zY3Jp
cHRzLWRlYnVnZ2VyLXNob3ctaGlkZS1idXR0b24gPiAuZ2x5cGggewotICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKLSAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChJ
bWFnZXMvbmF2aWdhdG9yU2hvd0hpZGVCdXR0b24ucG5nKTsKLSAgICAtd2Via2l0LW1hc2stcG9z
aXRpb246IDAgMDsKLSAgICAtd2Via2l0LW1hc2stc2l6ZTogNDhweCAzMnB4OwotfQotCi1idXR0
b24uc3RhdHVzLWJhci1pdGVtLnNjcmlwdHMtZGVidWdnZXItc2hvdy1oaWRlLWJ1dHRvbi50b2dn
bGVkLXNob3duIHsKLSAgICByaWdodDogMTZweDsKLX0KLQotYnV0dG9uLnN0YXR1cy1iYXItaXRl
bS5zY3JpcHRzLWRlYnVnZ2VyLXNob3ctaGlkZS1idXR0b24udG9nZ2xlZC1zaG93bjphY3RpdmUg
ewotICAgIHJpZ2h0OiAxNXB4OwotfQotCi0uc3RhdHVzLWJhci1pdGVtLnNjcmlwdHMtZGVidWdn
ZXItc2hvdy1oaWRlLWJ1dHRvbi50b2dnbGVkLXNob3duID4gLmdseXBoIHsKLSAgICAtd2Via2l0
LW1hc2stcG9zaXRpb246IDAgLTE2cHg7Ci19Ci0KLWJ1dHRvbi5zdGF0dXMtYmFyLWl0ZW0uc2Ny
aXB0cy1kZWJ1Z2dlci1zaG93LWhpZGUtYnV0dG9uLnRvZ2dsZWQtaGlkZGVuIHsKLSAgICByaWdo
dDogMXB4OwotfQotCi1idXR0b24uc3RhdHVzLWJhci1pdGVtLnNjcmlwdHMtZGVidWdnZXItc2hv
dy1oaWRlLWJ1dHRvbi50b2dnbGVkLWhpZGRlbjphY3RpdmUgewotICAgIHJpZ2h0OiAwcHg7Ci19
Ci0KLS5zdGF0dXMtYmFyLWl0ZW0uc2NyaXB0cy1kZWJ1Z2dlci1zaG93LWhpZGUtYnV0dG9uLnRv
Z2dsZWQtaGlkZGVuID4gLmdseXBoIHsKLSAgICAtd2Via2l0LW1hc2stcG9zaXRpb246IC0xNnB4
IC0xNnB4OwotfQotCi1kaXYuc2lkZWJhci1wYW5lLXN0YWNrI3NjcmlwdHMtZGVidWctc2lkZWJh
ci1jb250ZW50cywgI3NjcmlwdHMtc2lkZWJhci1zdGFjay1wYW5lIHsKLSAgICB0b3A6IDIzcHg7
Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci19Ci0KLS53b3JrZXJzLWxpc3QgPiBsaSB7Ci0gICAgb3Zl
cmZsb3c6IGhpZGRlbjsKLSAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKLSAgICB3aGl0ZS1z
cGFjZTogbm93cmFwOwotICAgIG1hcmdpbi1sZWZ0OiAxZW07Ci0gICAgZm9udC1zaXplOiAxMnB4
OwotfQotCi1hLndvcmtlci1pdGVtIHsKLSAgICBjb2xvcjogcmdiKDMzJSwgMzMlLCAzMyUpOwot
ICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci19Ci0KLWEu
d29ya2VyLWl0ZW06aG92ZXIgewotICAgIGNvbG9yOiByZ2IoMTUlLCAxNSUsIDE1JSk7Ci19Ci0K
LS5zb3VyY2UtZnJhbWUtZGVidWdnZXItc2NyaXB0IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2JhKDI1NSwgMjU1LCAxOTQsIDAuNSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL3NpZGViYXJQYW5lLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvc2lkZWJhclBhbmUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxOGFkYjYxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvc2lkZWJhclBhbmUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBBbnRob255IFJpY2F1ZCA8cmlrQHdl
YmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLnNpZGViYXItcGFuZSB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0u
c2lkZWJhci1wYW5lID4gLmJvZHkgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBkaXNw
bGF5OiBub25lOwotICAgIG92ZXJmbG93LXk6IGF1dG87Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVu
OwotfQotCi0uc2lkZWJhci1wYW5lID4gLmJvZHkgLmluZm8gewotICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKLSAgICBmb250LXN0eWxlOiBpdGFsaWM7Ci0gICAgZm9udC1zaXplOiA5MCU7Ci0gICAg
cGFkZGluZzogNnB4OwotICAgIGNvbG9yOiAjODg4OwotfQotCi0uc2lkZWJhci1wYW5lID4gLmJv
ZHkgLnBsYWNhcmQgKyAuaW5mbyB7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYigxODks
IDE4OSwgMTg5KTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDE5NCk7Ci19
Ci0KLS5zaWRlYmFyLXBhbmUudmlzaWJsZSA+IC5ib2R5IHsKLSAgICBkaXNwbGF5OiBibG9jazsK
LX0KLQotLnNpZGViYXItcGFuZSAuc2VjdGlvbiAucHJvcGVydGllcyB7Ci0gICAgcGFkZGluZy1s
ZWZ0OiAxNnB4OwotfQotCi0uc2lkZWJhci10YWJiZWQtcGFuZSAudGFiYmVkLXBhbmUtaGVhZGVy
IHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChyZ2IoMjQz
LDI0MywyNDMpLCByZ2IoMjM1LDIzNSwyMzUpKTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29s
aWQgcmdiKDIwMiwgMjAyLCAyMDIpOwotfQotCi0uc2lkZWJhci1wYW5lLXN0YWNrID4gLnNpZGVi
YXItcGFuZS52aXNpYmxlOm50aC1sYXN0LW9mLXR5cGUoMSkgewotICAgIGJvcmRlci1ib3R0b206
IDFweCBzb2xpZCByZ2IoMTg5LCAxODksIDE4OSk7Ci19Ci0KLQotLnNpZGViYXItcGFuZS10aXRs
ZSB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGJhY2tncm91bmQ6IHJnYigyMzAsIDIz
MCwgMjMwKTsKLSAgICBoZWlnaHQ6IDIwcHg7Ci0gICAgcGFkZGluZzogMCA1cHg7Ci0gICAgYm9y
ZGVyLXRvcDogMXB4IHNvbGlkIHJnYigxODksIDE4OSwgMTg5KTsKLSAgICBib3JkZXItYm90dG9t
OiAxcHggc29saWQgcmdiKDE4OSwgMTg5LCAxODkpOwotICAgIGxpbmUtaGVpZ2h0OiAxOHB4Owot
ICAgIC13ZWJraXQtYmFja2dyb3VuZC1vcmlnaW46IHBhZGRpbmc7Ci0gICAgLXdlYmtpdC1iYWNr
Z3JvdW5kLWNsaXA6IHBhZGRpbmc7Ci19Ci0KLQotLnNpZGViYXItcGFuZS10aXRsZSArIC5zaWRl
YmFyLXBhbmUtdGl0bGUsIC5wYW5lOm5vdCgudmlzaWJsZSkgKyAuc2lkZWJhci1wYW5lLXRpdGxl
LCAuc2lkZWJhci1wYW5lLXRpdGxlOmZpcnN0LW9mLXR5cGUgewotICAgIG1hcmdpbi10b3A6IC0x
cHg7Ci19Ci0KLS5zaWRlYmFyLXBhbmUtdGl0bGU6YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5kLWlt
YWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9t
KHJnYigyMzEsIDIzMSwgMjMxKSksIGNvbG9yLXN0b3AoMC4wNSwgcmdiKDIzMSwgMjMxLCAyMzEp
KSwgY29sb3Itc3RvcCgwLjA1LCByZ2IoMjA3LCAyMDcsIDIwNykpLCB0byhyZ2IoMTg2LCAxODYs
IDE4NikpKTsKLSAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiKDE3OCwgMTc4LCAxNzgpOwot
ICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTc4LCAxNzgsIDE3OCk7Ci19Ci0KLS5z
aWRlYmFyLXBhbmUtdGl0bGU6OmJlZm9yZSB7Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9kaXNj
bG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0QmxhY2sucG5nKTsKLSAgICBmbG9hdDogbGVmdDsKLSAg
ICB3aWR0aDogMTFweDsKLSAgICBoZWlnaHQ6IDEycHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAycHg7
Ci0gICAgbWFyZ2luLXRvcDogMXB4OwotfQotCi0uc2lkZWJhci1wYW5lLXRpdGxlLmV4cGFuZGVk
OjpiZWZvcmUgewotICAgIGNvbnRlbnQ6IHVybChJbWFnZXMvZGlzY2xvc3VyZVRyaWFuZ2xlU21h
bGxEb3duQmxhY2sucG5nKTsKLX0KLQotLnNpZGViYXItcGFuZS10b29sYmFyIHsKLSAgICBsaW5l
LWhlaWdodDogMThweDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiA0cHg7Ci0gICAgdG9wOiAw
OwotICAgIGhlaWdodDogMjBweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcG9pbnRl
ci1ldmVudHM6IG5vbmU7Ci19Ci0KLS5zaWRlYmFyLXBhbmUtdG9vbGJhciA+ICogewotICAgIHBv
aW50ZXItZXZlbnRzOiBhdXRvOwotfQotCi0uc2lkZWJhci1wYW5lLXRvb2xiYXIgPiAucGFuZS10
aXRsZS1idXR0b24gewotICAgIGZsb2F0OiByaWdodDsKLSAgICB3aWR0aDogMjNweDsKLSAgICBo
ZWlnaHQ6IDE3cHg7Ci0gICAgY29sb3I6IHRyYW5zcGFyZW50OwotICAgIGJhY2tncm91bmQtY29s
b3I6IHRyYW5zcGFyZW50OwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVh
dDogbm8tcmVwZWF0OwotICAgIG1hcmdpbjogMXB4IDAgMCAwOwotICAgIHBhZGRpbmc6IDA7Ci0g
ICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9u
ZTsKLX0KLQotLnNpZGViYXItcGFuZS10b29sYmFyID4gLnBhbmUtdGl0bGUtYnV0dG9uOmhvdmVy
IHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjNweCAwcHg7Ci19Ci0KLS5zaWRlYmFyLXBh
bmUtdG9vbGJhciA+IC5wYW5lLXRpdGxlLWJ1dHRvbjphY3RpdmUsIC5zaWRlYmFyLXBhbmUtdG9v
bGJhciA+IC5wYW5lLXRpdGxlLWJ1dHRvbi50b2dnbGVkIHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0
aW9uOiAtNDZweCAwcHg7Ci19Ci0KLS5zaWRlYmFyLXBhbmUtdG9vbGJhciA+IC5wYW5lLXRpdGxl
LWJ1dHRvbi5hZGQgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvcGFuZUFkZEJ1
dHRvbnMucG5nKTsKLX0KLQotLnNpZGViYXItcGFuZS10b29sYmFyID4gLnBhbmUtdGl0bGUtYnV0
dG9uLmVsZW1lbnQtc3RhdGUgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvcGFu
ZUVsZW1lbnRTdGF0ZUJ1dHRvbnMucG5nKTsKLX0KLQotLnNpZGViYXItcGFuZS10b29sYmFyID4g
LnBhbmUtdGl0bGUtYnV0dG9uLnJlZnJlc2ggewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJ
bWFnZXMvcGFuZVJlZnJlc2hCdXR0b25zLnBuZyk7Ci19Ci0KLS5zaWRlYmFyLXBhbmUtc3VidGl0
bGUgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDogMDsKLX0KLQotYm9keS5w
bGF0Zm9ybS13aW5kb3dzIC5zaWRlYmFyLXBhbmUtc3VidGl0bGUgewotICAgIHBhZGRpbmctdG9w
OiAxcHg7Ci19Ci0KLS5zaWRlYmFyLXBhbmUtc3VidGl0bGUgaW5wdXQsIC5zZWN0aW9uIC5oZWFk
ZXIgaW5wdXRbdHlwZT1jaGVja2JveF0gewotICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKLSAgICBo
ZWlnaHQ6IDFlbTsKLSAgICB3aWR0aDogMWVtOwotICAgIG1hcmdpbi1sZWZ0OiAwOwotICAgIG1h
cmdpbi10b3A6IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMC4yNWVtOwotICAgIHZlcnRpY2FsLWFs
aWduOiBib3R0b207Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL3NwZWN0cnVtLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
c3BlY3RydW0uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTllYTI4Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvc3BlY3RydW0uY3Nz
CisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qIGh0dHBzOi8vZ2l0aHViLmNvbS9i
Z3JpbnMvc3BlY3RydW0gKi8KLS5zcGVjdHJ1bS1jb250YWluZXIgewotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICBkaXNwbGF5OiBpbmxpbmUt
YmxvY2s7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgyMzAsIDIzMCwgMjMwLCAxKSAhaW1wb3J0YW50
OwotICAgIGJvcmRlcjogMXB4IHNvbGlkICM2NDY0NjQ7Ci0gICAgcGFkZGluZzogMTBweDsKLSAg
ICB3aWR0aDogMjIwcHg7Ci0gICAgei1pbmRleDogMTA7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVj
dDogbm9uZTsKLX0KLQotLnNwZWN0cnVtLXRvcCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwot
ICAgIHdpZHRoOiAxMDAlOwotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLX0KLQotLnNwZWN0
cnVtLWNvbG9yIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxl
ZnQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIHJpZ2h0OiA0MHB4OwotfQotCi0uc3BlY3RydW0t
ZGlzcGxheS12YWx1ZSB7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLSAgICBwb3Np
dGlvbjogcmVsYXRpdmU7Ci0gICAgbGVmdDogMnB4OwotICAgIHRvcDogLTZweDsKLX0KLQotLnNw
ZWN0cnVtLWh1ZSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBy
aWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMTcwcHg7Ci0gICAgLXdlYmtpdC1i
b3gtcmVmbGVjdDogcmlnaHQgLTI4cHg7Ci19Ci0KLS5zcGVjdHJ1bS1maWxsIHsKLSAgICAvKiBT
YW1lIGFzIHNwZWN0cnVtLWNvbG9yIHdpZHRoIHRvIGZvcmNlIGFzcGVjdCByYXRpby4gKi8KLSAg
ICBtYXJnaW4tdG9wOiAxNTBweDsKLX0KLQotLnNwZWN0cnVtLXJhbmdlLWNvbnRhaW5lciB7Ci0g
ICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHBhZGRpbmctYm90dG9tOiA1cHg7Ci19Ci0KLS5z
cGVjdHJ1bS1yYW5nZS1jb250YWluZXIgKiB7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIHZl
cnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLS5zcGVjdHJ1bS1yYW5nZS1jb250YWluZXIgbGFi
ZWwgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7
Ci19Ci0KLS5zcGVjdHJ1bS1yYW5nZS1jb250YWluZXIgaW5wdXQgewotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICBsZWZ0OiAxNXB4OwotICAgIHJpZ2h0OiA0MHB4OwotICAgIG1hcmdpbjog
M3B4IDAgMCAwOwotfQotCi0uc3BlY3RydW0tZHJhZ2dlciwgLnNwZWN0cnVtLXNsaWRlciB7Ci0g
ICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKLX0KLQotLnNwZWN0cnVtLXNhdCB7Ci0gICAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgd2hpdGUsIHJn
YmEoMjA0LCAxNTQsIDEyOSwgMCkpOwotfQotCi0uc3BlY3RydW0tdmFsIHsKLSAgICBiYWNrZ3Jv
dW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChib3R0b20sIGJsYWNrLCByZ2JhKDIw
NCwgMTU0LCAxMjksIDApKTsKLX0KLQotLnNwZWN0cnVtLWh1ZSB7Ci0gICAgYmFja2dyb3VuZDog
LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmYwMDAwIDAlLCAjZmZmZjAwIDE3JSwgIzAw
ZmYwMCAzMyUsICMwMGZmZmYgNTAlLCAjMDAwMGZmIDY3JSwgI2ZmMDBmZiA4MyUsICNmZjAwMDAg
MTAwJSk7Ci19Ci0KLS5zcGVjdHJ1bS1kcmFnZ2VyIHsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7
Ci0gICAgaGVpZ2h0OiA1cHg7Ci0gICAgd2lkdGg6IDVweDsKLSAgICBib3JkZXI6IDFweCBzb2xp
ZCB3aGl0ZTsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotICAgIGJhY2tncm91bmQ6IGJsYWNrOwotfQotCi0u
c3BlY3RydW0tc2xpZGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwot
ICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKLSAgICBo
ZWlnaHQ6IDRweDsKLSAgICBsZWZ0OiAtMXB4OwotICAgIHJpZ2h0OiAtMXB4OwotfQotCi0uc3Bl
Y3RydW0tY29udGFpbmVyIC5zd2F0Y2ggewotICAgIHdpZHRoOiAyMHB4OwotICAgIGhlaWdodDoy
MHB4OwotICAgIG1hcmdpbjogMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvc3BsaXRWaWV3LmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvc3BsaXRWaWV3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcy
MWYwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Nw
bGl0Vmlldy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5D
LgotICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0uc3BsaXQtdmlldyB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsK
LSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBvdmVyZmxv
dzogaGlkZGVuOwotfQotCi0uc3BsaXQtdmlldy1jb250ZW50cyB7Ci0gICAgcG9zaXRpb246IGFi
c29sdXRlOwotICAgIG92ZXJmbG93OiBhdXRvOwotICAgIGN1cnNvcjogZGVmYXVsdDsKLX0KLQot
LnNwbGl0LXZpZXctY29udGVudHMubWF4aW1pemVkIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBo
ZWlnaHQ6IDEwMCU7Ci19Ci0KLS5zcGxpdC12aWV3LXZlcnRpY2FsID4gLnNwbGl0LXZpZXctY29u
dGVudHMgewotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci19Ci0KLS5zcGxpdC12aWV3LXZl
cnRpY2FsID4gLnNwbGl0LXZpZXctY29udGVudHMtZmlyc3QgewotICAgIGxlZnQ6IDA7Ci19Ci0K
LS5zcGxpdC12aWV3LXZlcnRpY2FsID4gLnNwbGl0LXZpZXctY29udGVudHMtZmlyc3QubWF4aW1p
emVkIHsKLSAgICByaWdodDogMDsKLX0KLQotLnNwbGl0LXZpZXctdmVydGljYWwgPiAuc3BsaXQt
dmlldy1jb250ZW50cy1zZWNvbmQgewotICAgIHJpZ2h0OiAwOwotfQotCi0uc3BsaXQtdmlldy12
ZXJ0aWNhbCA+IC5zcGxpdC12aWV3LWNvbnRlbnRzLXNlY29uZC5tYXhpbWl6ZWQgewotICAgIGxl
ZnQ6IDA7Ci19Ci0KLS5zcGxpdC12aWV3LWhvcml6b250YWwgPiAuc3BsaXQtdmlldy1jb250ZW50
cyB7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLX0KLQotLnNwbGl0LXZpZXctaG9yaXpv
bnRhbCA+IC5zcGxpdC12aWV3LWNvbnRlbnRzLWZpcnN0IHsKLSAgICB0b3A6IDA7Ci19Ci0KLS5z
cGxpdC12aWV3LWhvcml6b250YWwgPiAuc3BsaXQtdmlldy1jb250ZW50cy1maXJzdC5tYXhpbWl6
ZWQgewotICAgIGJvdHRvbTogMDsKLX0KLQotLnNwbGl0LXZpZXctaG9yaXpvbnRhbCA+IC5zcGxp
dC12aWV3LWNvbnRlbnRzLXNlY29uZCB7Ci0gICAgYm90dG9tOiAwOwotfQotCi0uc3BsaXQtdmll
dy1ob3Jpem9udGFsID4gLnNwbGl0LXZpZXctY29udGVudHMtc2Vjb25kLm1heGltaXplZCB7Ci0g
ICAgdG9wOiAwOwotfQotCi0uc3BsaXQtdmlldy12ZXJ0aWNhbCA+IC5zcGxpdC12aWV3LXNpZGVi
YXIuc3BsaXQtdmlldy1jb250ZW50cy1maXJzdDpub3QoLm1heGltaXplZCkgewotICAgIGJvcmRl
ci1yaWdodDogMXB4IHNvbGlkIHJnYig2NCUsIDY0JSwgNjQlKTsKLX0KLQotLnNwbGl0LXZpZXct
dmVydGljYWwgPiAuc3BsaXQtdmlldy1zaWRlYmFyLnNwbGl0LXZpZXctY29udGVudHMtc2Vjb25k
Om5vdCgubWF4aW1pemVkKSB7Ci0gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoNjQlLCA2
NCUsIDY0JSk7Ci19Ci0KLS5zcGxpdC12aWV3LWhvcml6b250YWwgPiAuc3BsaXQtdmlldy1zaWRl
YmFyLnNwbGl0LXZpZXctY29udGVudHMtZmlyc3Q6bm90KC5tYXhpbWl6ZWQpIHsKLSAgICBib3Jk
ZXItYm90dG9tOiAxcHggc29saWQgcmdiKDY0JSwgNjQlLCA2NCUpOwotfQotCi0uc3BsaXQtdmll
dy1ob3Jpem9udGFsID4gLnNwbGl0LXZpZXctc2lkZWJhci5zcGxpdC12aWV3LWNvbnRlbnRzLXNl
Y29uZDpub3QoLm1heGltaXplZCkgewotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoNjQl
LCA2NCUsIDY0JSk7Ci19Ci0KLS5zcGxpdC12aWV3LXZlcnRpY2FsID4gLnNwbGl0LXZpZXctcmVz
aXplciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206
IDA7Ci0gICAgd2lkdGg6IDVweDsKLSAgICB6LWluZGV4OiAxNTAwOwotICAgIGN1cnNvcjogZXct
cmVzaXplOwotfQotCi0uc3BsaXQtdmlldy1ob3Jpem9udGFsID4gLnNwbGl0LXZpZXctcmVzaXpl
ciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7
Ci0gICAgaGVpZ2h0OiA1cHg7Ci0gICAgei1pbmRleDogMTUwMDsKLSAgICBjdXJzb3I6IG5zLXJl
c2l6ZTsKLX0KLQotLnNpZGViYXItb3ZlcmxheSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLSAgICB6LWluZGV4OiAx
MDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXItcmlnaHQ6IDFweCBz
b2xpZCBncmF5OwotICAgIC13ZWJraXQtYm94LXNoYWRvdzogcmdiKDkwLDkwLDkwKSAyMHB4IDBw
eCA1MHB4IC0yNXB4OwotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZs
ZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci19Ci0KLS5zaWRlYmFyLW92ZXJsYXktcmVzaXplciB7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAg
d2lkdGg6IDVweDsKLSAgICB6LWluZGV4OiA1MDA7Ci0gICAgY3Vyc29yOiBldy1yZXNpemU7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RhYmJlZFBh
bmUuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90YWJiZWRQYW5lLmNz
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyOTAzZS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RhYmJlZFBhbmUuY3NzCisrKyAvZGV2
L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBbnRob255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KLSAqIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSAudGFi
YmVkLXBhbmUgewotICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICBkaXNw
bGF5OiAtd2Via2l0LWZsZXg7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0udGFiYmVkLXBhbmUt
Y29udGVudCB7Ci0gICAgLXdlYmtpdC1mbGV4OiAxOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
LSAgICBvdmVyZmxvdzogYXV0bzsKLX0KLQotLnRhYmJlZC1wYW5lLWNvbnRlbnQuaGFzLW5vLXRh
YnMgewotICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JheTsKLX0KLQotLnRhYmJlZC1wYW5l
LWhlYWRlciB7Ci0gICAgaGVpZ2h0OiAyM3B4OwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xp
ZCByZ2IoMTYzLCAxNjMsIDE2Myk7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICB3aWR0aDog
MTAwJTsKLX0KLQotLnRhYmJlZC1wYW5lLWhlYWRlci1jb250ZW50cyB7Ci0gICAgbWFyZ2luOiAw
IDEwcHg7Ci19Ci0KLS50YWJiZWQtcGFuZS1oZWFkZXItdGFicyB7Ci0gICAgZmxvYXQ6IGxlZnQ7
Ci19Ci0KLS50YWJiZWQtcGFuZS1oZWFkZXItdGFiIHsKLSAgICBmbG9hdDogbGVmdDsKLSAgICBt
YXJnaW4tdG9wOiAycHg7Ci0gICAgcGFkZGluZzogMnB4IDRweCAycHggNHB4OwotICAgIGhlaWdo
dDogMjFweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKLSAgICBib3JkZXIt
Ym90dG9tOiBub25lOwotICAgIGxpbmUtaGVpZ2h0OiAxNXB4OwotICAgIAotICAgIHdoaXRlLXNw
YWNlOiBub3dyYXA7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3ZlcmZsb3c6
IGhpZGRlbjsKLX0KLQotLnRhYmJlZC1wYW5lLWhlYWRlci10YWIubWVhc3VyaW5nIHsKLSAgICB2
aXNpYmlsaXR5OiBoaWRkZW47Ci19Ci0KLS50YWJiZWQtcGFuZS1oZWFkZXItdGFiLnNlbGVjdGVk
IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBy
Z2IoMTYzLCAxNjMsIDE2Myk7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLX0KLQotLnRhYmJl
ZC1wYW5lLWhlYWRlci10YWItY2xvc2UtYnV0dG9uIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7
Ci0gICAgYm90dG9tOiAwOwotICAgIG9wYWNpdHk6IDA7Ci0gICAgcGFkZGluZy1sZWZ0OiAzcHg7
Ci0gICAgZm9udC1zaXplOiAxNHB4OwotICAgIGNvbG9yOiByZ2IoODAsIDgwLCA4MCk7Ci0gICAg
bGluZS1oZWlnaHQ6IDEycHg7Ci19Ci0KLS50YWJiZWQtcGFuZS1oZWFkZXItdGFiOmhvdmVyIC50
YWJiZWQtcGFuZS1oZWFkZXItdGFiLWNsb3NlLWJ1dHRvbiB7Ci0gICAgb3BhY2l0eTogMC41Owot
fQotCi0udGFiYmVkLXBhbmUtaGVhZGVyLXRhYjpob3ZlciAudGFiYmVkLXBhbmUtaGVhZGVyLXRh
Yi1jbG9zZS1idXR0b246aG92ZXIgewotICAgIG9wYWNpdHk6IDEuMDsKLX0KLQotLnRhYmJlZC1w
YW5lLWhlYWRlci10YWI6aG92ZXIgLnRhYmJlZC1wYW5lLWhlYWRlci10YWItY2xvc2UtYnV0dG9u
OmFjdGl2ZSB7Ci0gICAgb3BhY2l0eTogMC43OwotfQotCi0udGFiYmVkLXBhbmUtaGVhZGVyLXRh
Yi5zZWxlY3RlZCAudGFiYmVkLXBhbmUtaGVhZGVyLXRhYi1jbG9zZS1idXR0b24gewotICAgIG9w
YWNpdHk6IDAuNTsKLX0KLQotLnRhYmJlZC1wYW5lLWhlYWRlci10YWIuc2VsZWN0ZWQgLnRhYmJl
ZC1wYW5lLWhlYWRlci10YWItY2xvc2UtYnV0dG9uOmhvdmVyIHsKLSAgICBvcGFjaXR5OiAxLjA7
Ci19Ci0KLS50YWJiZWQtcGFuZS1oZWFkZXItdGFiLnNlbGVjdGVkIC50YWJiZWQtcGFuZS1oZWFk
ZXItdGFiLWNsb3NlLWJ1dHRvbjphY3RpdmUgewotICAgIG9wYWNpdHk6IDAuNzsKLX0KLQotLnRh
YmJlZC1wYW5lLWhlYWRlci10YWJzLWRyb3AtZG93bi1jb250YWluZXIgewotICAgIGZsb2F0OiBs
ZWZ0OwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBmb250LXNpemU6IDE2cHg7Ci0gICAg
dmVydGljYWwtYWxpZ246IGJvdHRvbTsKLSAgICB0b3A6IDNweDsKLSAgICBwYWRkaW5nLWxlZnQ6
IDNweDsKLX0KLQotLnRhYmJlZC1wYW5lLWhlYWRlci10YWJzLWRyb3AtZG93bi1jb250YWluZXIu
bWVhc3VyaW5nIHsKLSAgICB2aXNpYmlsaXR5OiBoaWRkZW47Ci19Ci0KLS50YWJiZWQtcGFuZS1o
ZWFkZXItdGFicy1kcm9wLWRvd24gewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBvcGFj
aXR5OiAwLjc7Ci0gICAgY29sb3I6IHJnYigzMCwgMzAsIDMwKTsKLX0KLQotLnRhYmJlZC1wYW5l
LWhlYWRlci10YWJzLWRyb3AtZG93bjpob3ZlciB7Ci0gICAgb3BhY2l0eTogMS4wOwotfQotCi0u
dGFiYmVkLXBhbmUtaGVhZGVyLXRhYnMtZHJvcC1kb3duOmFjdGl2ZSB7Ci0gICAgb3BhY2l0eTog
MC44OwotfQotCi1zZWxlY3QudGFiYmVkLXBhbmUtaGVhZGVyLXRhYnMtZHJvcC1kb3duLXNlbGVj
dCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMHB4OwotICAgIHJpZ2h0OiAw
cHg7Ci0gICAgYm90dG9tOiAwcHg7Ci0gICAgbGVmdDogMHB4OwotICAgIG9wYWNpdHk6IDA7Ci0g
ICAgYm9yZGVyOiBub25lOwotICAgIG1hcmdpbjogMDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6
IG5vbmU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3Rlc3QtcnVubmVyLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Rl
c3QtcnVubmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYjMyMTguLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXN0LXJ1bm5l
ci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzY2ICswLDAgQEAKLTxodG1sPgotPHNjcmlwdCBz
cmM9ImpzZGlmZmxpYi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0idXRpbGl0aWVzLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJET01FeHRlbnNpb24uanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9InRyZWVvdXRsaW5lLmpzIj48L3NjcmlwdD4KLQotPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaW5zcGVjdG9yLmNzcyI+Ci08c3R5bGU+Ci06Zm9jdXMg
ewotICAgIG91dGxpbmU6IG5vbmU7Ci19Ci0KLS5mYWlsZWQgewotICAgIGNvbG9yOiByZWQ7Ci19
Ci0KLS50aW1lb3V0IHsKLSAgICBjb2xvcjogYnJvd247Ci19Ci0KLWlmcmFtZSB7Ci0gICAgd2lk
dGg6IDA7Ci0gICAgaGVpZ2h0OiAwOwotICAgIG9wYWNpdHk6IDA7Ci19Ci0KLTwvc3R5bGU+Ci0K
LTxzY3JpcHQ+Ci0KLXZhciBsYXlvdXRUZXN0c1NlcnZlciA9ICJodHRwOi8vbG9jYWxob3N0Ojgw
MDIvIjsKLXZhciBzY2FubmVyU2VydmVyID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi8iOwotdmFy
IHJlbW90ZURlYnVnZ2luZ1NlcnZlciA9ICJodHRwOi8vbG9jYWxob3N0OjkyMjIvIjsKLQotdmFy
IHRlc3RzID0gW107Ci12YXIgc2tpcExpc3QgPSBbCi0gICAgLy8gSEFMVAotICAgICJpbnNwZWN0
b3IvY29uc29sZS9jb25zb2xlLWFwaS1vbi1jYWxsLWZyYW1lLmh0bWwiLAotCi0gICAgLy8gRkFJ
TEVECi0gICAgImluc3BlY3Rvci9jb25zb2xlL2NvbnNvbGUtZGlyLWdsb2JhbC5odG1sIiwKLSAg
ICAiaW5zcGVjdG9yL2NvbnNvbGUvY29uc29sZS1sb2ctdG9TdHJpbmctb2JqZWN0Lmh0bWwiLAot
ICAgICJpbnNwZWN0b3IvY29uc29sZS9jb25zb2xlLXVuY2F1Z2h0LWV4Y2VwdGlvbi1pbi1ldmFs
Lmh0bWwiLAotICAgICJpbnNwZWN0b3IvZWxlbWVudHMvZWRpdC1kb20tYWN0aW9ucy5odG1sIiwK
LSAgICAiaW5zcGVjdG9yL2VsZW1lbnRzL2hpZ2hsaWdodC1ub2RlLXNjYWxlZC5odG1sIiwKLSAg
ICAiaW5zcGVjdG9yL2VsZW1lbnRzL2hpZ2hsaWdodC1ub2RlLXNjcm9sbC5odG1sIiwKLSAgICAi
aW5zcGVjdG9yL2VsZW1lbnRzL2hpZ2hsaWdodC1ub2RlLmh0bWwiLAotICAgICJpbnNwZWN0b3Iv
ZWxlbWVudHMvaGlnaGxpZ2h0LXN2Zy1yb290Lmh0bWwiLAotICAgICJpbnNwZWN0b3IvbmV0d29y
ay1zdGF0dXMtbm9uLWh0dHAuaHRtbCIsCi0gICAgImluc3BlY3Rvci9zdG9yYWdlLXBhbmVsLWRv
bS1zdG9yYWdlLXVwZGF0ZS5odG1sIiwKLSAgICAiaW5zcGVjdG9yL3N0eWxlcy9pbmplY3Qtc3R5
bGVzaGVldC5odG1sIiwKLSAgICAiaW5zcGVjdG9yL3N0eWxlcy9wcm90b2NvbC1jc3MtcmVnaW9u
cy1jb21tYW5kcy5odG1sIiwKLSAgICAiaW5zcGVjdG9yL3N0eWxlcy9yZWdpb24tc3R5bGUtY3Jh
c2guaHRtbCIsCi0gICAgImluc3BlY3Rvci9zdHlsZXMvc3R5bGVzLWRpc2FibGUtdGhlbi1lbmFi
bGUtb3ZlcnJpZGVuLXVhLmh0bWwiLAotICAgICJpbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy11cmwt
bGlua2lmeS5odG1sIiwKLSAgICAiaW5zcGVjdG9yL3N0eWxlcy92ZW5kb3ItcHJlZml4ZXMuaHRt
bCIsCi0gICAgImluc3BlY3Rvci90aW1lbGluZS90aW1lbGluZS1ldmVudC1kaXNwYXRjaC5odG1s
IiwKLSAgICAiaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLWZyYW1lcy5odG1sIiwKLSAgICAi
aW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLW5ldHdvcmstcmVzb3VyY2UuaHRtbCIsCi0gICAg
Imluc3BlY3Rvci90aW1lbGluZS90aW1lbGluZS1wYWludC5odG1sIiwKLSAgICAiaW5zcGVjdG9y
L3RpbWVsaW5lL3RpbWVsaW5lLXJlY2VpdmUtcmVzcG9uc2UtZXZlbnQuaHRtbCIsCi0KLSAgICAv
LyBUSU1FT1VUCi0gICAgImluc3BlY3Rvci9wcm9maWxlci9jcHUtcHJvZmlsZXItcHJvZmlsaW5n
LXdpdGhvdXQtaW5zcGVjdG9yLmh0bWwiLAotICAgICJpbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1z
bmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVyLmh0bWwiLAotICAgICJpbnNwZWN0b3IvdGltZWxp
bmUvdGltZWxpbmUtbmV0d29yay1yZWNlaXZlZC1kYXRhLmh0bWwiLAotXTsKLXZhciB0cmVlT3V0
bGluZSA9IG51bGw7Ci0KLWZ1bmN0aW9uIHJ1bihkZWJ1ZykKLXsKLSAgICBpZiAod2luZG93LnJ1
bm5lciAmJiBkZWJ1ZykgewotICAgICAgICB3aW5kb3cucnVubmVyLmNvbnRpbnVlRGVidWdnaW5n
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod2luZG93LnRlc3RTY2FubmVy
SWZyYW1lKSAKLSAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh3aW5kb3cudGVzdFNj
YW5uZXJJZnJhbWUpOwotCi0gICAgaWYgKHdpbmRvdy5ydW5uZXIpCi0gICAgICAgIHdpbmRvdy5y
dW5uZXIuY2xlYW51cCgpOwotCi0gICAgd2luZG93LnRlc3RTY2FubmVySWZyYW1lID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Ci0gICAgd2luZG93LnRlc3RTY2FubmVySWZyYW1l
LnNyYyA9IHNjYW5uZXJTZXJ2ZXIgKyAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
cmVzb3VyY2VzL3Rlc3Qtc2Nhbm5lci5odG1sIjsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKHdpbmRvdy50ZXN0U2Nhbm5lcklmcmFtZSk7Ci0gICAgd2luZG93LmRlYnVnID0gZGVidWc7
Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3RzKCkKLXsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgib3V0bGluZSIpLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgdHJlZU91dGxpbmUgPSBuZXcgVHJl
ZU91dGxpbmUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dGxpbmUiKSk7Ci0KLSAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicGFzcyIpLnRleHRDb250ZW50ID0gMDsKLSAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgic2tpcCIpLnRleHRDb250ZW50ID0gMDsKLSAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZmFpbCIpLnRleHRDb250ZW50ID0gMDsKLSAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgidGltZW91dCIpLnRleHRDb250ZW50ID0gMDsKLSAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicmVtYWluaW5nIikudGV4dENvbnRlbnQgPSB0ZXN0cy5sZW5ndGg7Ci0KLSAg
ICBydW5OZXh0VGVzdCgpOwotfQotCi1mdW5jdGlvbiBpbnRlcnJ1cHQoKQotewotICAgIHRlc3Rz
ID0gW107Ci19Ci0KLWZ1bmN0aW9uIHJ1bk5leHRUZXN0KGxhc3RSZXN1bHQpCi17Ci0gICAgaWYg
KGxhc3RSZXN1bHQpIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChsYXN0UmVzdWx0KTsKLSAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHBhcnNlSW50
KGVsZW1lbnQudGV4dENvbnRlbnQpICsgMTsKLQotICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJlbWFpbmluZyIpOwotICAgICAgICBlbGVtZW50LnRleHRDb250ZW50
ID0gcGFyc2VJbnQoZWxlbWVudC50ZXh0Q29udGVudCkgLSAxOwotICAgICAgICBpZiAod2luZG93
LmRlYnVnKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVidWciKS50
ZXh0Q29udGVudCA9ICJEZWJ1ZyI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2YXIgdGVzdDsKLSAgICB2YXIgZmlsdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImZpbHRlciIpLnZhbHVlOwotICAgIHdoaWxlICh0ZXN0ID0gdGVzdHMuc2hpZnQoKSkg
ewotICAgICAgICBpZiAoIWZpbHRlciB8fCB0ZXN0WzBdLm1hdGNoKGZpbHRlcikpIHsKLSAgICAg
ICAgICAgIG5ldyBTdGFuZGFsb25lVGVzdFJ1bm5lcihsYXlvdXRUZXN0c1NlcnZlciArIHRlc3Rb
MF0sIHRlc3RbMV0sIHJ1bk5leHRUZXN0LmJpbmQobnVsbCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1mdW5jdGlvbiBTdGFuZGFsb25lVGVzdFJ1bm5lcih0
ZXN0UGF0aCwgZXhwZWN0ZWQsIG5leHQpCi17Ci0gICAgdGhpcy5fdGVzdFBhdGggPSB0ZXN0UGF0
aDsKLSAgICB0aGlzLl9uZXh0ID0gbmV4dDsKLSAgICB0aGlzLl9leHBlY3RlZCA9IGV4cGVjdGVk
OwotICAgIHRoaXMuX3BlbmRpbmdNZXNzYWdlcyA9IFtdOwotCi0gICAgdGhpcy5fdHJlZUVsZW1l
bnQgPSBuZXcgVHJlZUVsZW1lbnQodGVzdFBhdGgpOwotICAgIHRyZWVPdXRsaW5lLmFwcGVuZENo
aWxkKHRoaXMuX3RyZWVFbGVtZW50KTsKLQotICAgIGZvciAodmFyIGkgPSAwOyAhd2luZG93LmRl
YnVnICYmIGkgPCBza2lwTGlzdC5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAodGVzdFBhdGgu
aW5kZXhPZihza2lwTGlzdFtpXSkgIT09IC0xKSB7Ci0gICAgICAgICAgICB0aGlzLl90cmVlRWxl
bWVudC50aXRsZSA9IHRlc3RQYXRoICsgIjogU0tJUFBFRCI7Ci0gICAgICAgICAgICB0aGlzLl9u
ZXh0KCJza2lwIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
d2luZG93LnJ1bm5lciA9IHRoaXM7Ci0gICAgdGhpcy5fdGVzdFBhZ2UgPSB3aW5kb3cub3Blbigi
YWJvdXQ6YmxhbmsiLCAiaW5zcGVjdGVkIiwgIndpZHRoPTgwMCxoZWlnaHQ9NjAwIik7Ci0KLSAg
ICB3aW5kb3cucmVtb3RlRGVidWdnaW5nSGFuZHNoYWtlID0gdGhpcy5fcmVtb3RlRGVidWdnaW5n
SGFuZHNoYWtlLmJpbmQodGhpcyk7Ci0gICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNjcmlwdCIpOwotICAgIHNjcmlwdC5zcmMgPSByZW1vdGVEZWJ1Z2dpbmdTZXJ2ZXIg
KyAianNvbj9qc29ucD1yZW1vdGVEZWJ1Z2dpbmdIYW5kc2hha2UiOwotICAgIGRvY3VtZW50Lmhl
YWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKLX0KLQotU3RhbmRhbG9uZVRlc3RSdW5uZXIuRnJvbnRl
bmRMb2NhdGlvbiA9ICJpbnNwZWN0b3IuaHRtbCI7Ci0KLVN0YW5kYWxvbmVUZXN0UnVubmVyLnBy
b3RvdHlwZSA9IHsKLSAgICBfcmVtb3RlRGVidWdnaW5nSGFuZHNoYWtlOiBmdW5jdGlvbihkYXRh
KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoZGF0YVtpXS51cmwgIT09ICJhYm91dDpibGFuayIpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aGlzLl9kZWJ1Z2dlclVSTCA9IGRhdGFb
aV0ud2ViU29ja2V0RGVidWdnZXJVcmwucmVwbGFjZSgiOi8vIiwgIj0iKTsKLSAgICAgICAgICAg
IHRoaXMuX25hdmlnYXRlVGVzdFBhZ2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIF9uYXZpZ2F0ZVRlc3RQYWdlOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl90ZXN0UGFnZS5sb2NhdGlvbi5ocmVmID0gdGhpcy5fdGVzdFBhdGg7Ci0gICAg
ICAgIHZhciB3aWR0aCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpbnNwZWN0b3JXaWR0aCcpIHx8
IDYwMDsKLSAgICAgICAgdmFyIGhlaWdodCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpbnNwZWN0
b3JIZWlnaHQnKSB8fCA0MDA7Ci0gICAgICAgIHZhciBmZWF0dXJlcyA9ICJ3aWR0aD0iICsgTWF0
aC5tYXgod2lkdGggLCA2MDApICsgIixoZWlnaHQ9IiArIE1hdGgubWF4KGhlaWdodCwgNDAwKTsK
LSAgICAgICAgdGhpcy5faW5zcGVjdG9yV2luZG93TG9hZGluZyA9IHdpbmRvdy5vcGVuKFN0YW5k
YWxvbmVUZXN0UnVubmVyLkZyb250ZW5kTG9jYXRpb24gKyAiPyIgKyB0aGlzLl9kZWJ1Z2dlclVS
TCwgImluc3BlY3RvciIsIGZlYXR1cmVzKTsKLSAgICAgICAgdGhpcy5faW5zcGVjdG9yV2luZG93
TG9hZGluZy5kaXNwYXRjaFN0YW5kYWxvbmVUZXN0UnVubmVyTWVzc2FnZXMgPSB0cnVlOwotICAg
ICAgICAKLSAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHRoaXMuY2xl
YW51cC5iaW5kKHRoaXMpKTsKLQotICAgICAgICBpZiAoIXdpbmRvdy5kZWJ1ZykKLSAgICAgICAg
ICAgIHRoaXMuX3dhdGNoRG9nID0gc2V0VGltZW91dCh0aGlzLl90aW1lb3V0LmJpbmQodGhpcyks
IDEwMDAwKTsKLSAgICB9LAotCi0gICAgbG9hZENvbXBsZXRlZDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF3aW5kb3cuZGVidWcpIHsKLSAgICAgICAgICAgIHRoaXMuX2xvYWRDb21w
bGV0ZWQodGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlYnVnIikudGV4dENvbnRlbnQgPSAiQ29udGludWUiOwot
ICAgIH0sCi0KLSAgICBjb250aW51ZURlYnVnZ2luZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fbG9hZENvbXBsZXRlZCgpOwotICAgIH0sCi0KLSAgICBfbG9hZENvbXBsZXRlZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5faW5zcGVjdG9yV2luZG93ID0gdGhpcy5f
aW5zcGVjdG9yV2luZG93TG9hZGluZzsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9wZW5kaW5nTWVzc2FnZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9pbnNwZWN0
b3JXaW5kb3cucG9zdE1lc3NhZ2UodGhpcy5fcGVuZGluZ01lc3NhZ2VzW2ldLCAiKiIpOwotICAg
ICAgICB0aGlzLl9wZW5kaW5nTWVzc2FnZXMgPSBbXTsKLSAgICB9LAotCi0gICAgY2xvc2VXZWJJ
bnNwZWN0b3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghd2luZG93LmRlYnVnKQot
ICAgICAgICAgICAgdGhpcy5faW5zcGVjdG9yV2luZG93LmNsb3NlKCk7Ci0gICAgfSwKLQotICAg
IG5vdGlmeURvbmU6IGZ1bmN0aW9uKGFjdHVhbCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9k
b25lKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTsKLQot
ICAgICAgICBpZiAoIXdpbmRvdy5kZWJ1ZykgCi0gICAgICAgICAgICB0aGlzLmNsZWFudXAoKQot
Ci0gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl93YXRjaERvZyk7Ci0KLSAgICAgICAgdGhpcy5f
dHJlZUVsZW1lbnQub25zZWxlY3QgPSB0aGlzLm9uVHJlZUVsZW1lbnRTZWxlY3QuYmluZCh0aGlz
KTsKLQotICAgICAgICAvLyBUT0RPIHBhdmVsICBpcyB0aGUgIFJIUyB8fCBjb25kaXRpb24gd2Fu
dGVkPwotICAgICAgICBpZiAoYWN0dWFsID09PSB0aGlzLl9leHBlY3RlZCB8fCBhY3R1YWwgPT09
IHRoaXMuX2V4cGVjdGVkICsgIlxuIikgewotICAgICAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnQu
dGl0bGUgPSB0aGlzLl90ZXN0UGF0aCArICI6IFNVQ0NFU1MiOwotICAgICAgICAgICAgdGhpcy5f
bmV4dCgicGFzcyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
dGhpcy5fdHJlZUVsZW1lbnQudGl0bGUgPSB0aGlzLl90ZXN0UGF0aCArICI6IEZBSUxFRCI7Ci0g
ICAgICAgIHRoaXMuX3RyZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJm
YWlsZWQiKTsKLQotICAgICAgICB2YXIgYmFzZUxpbmVzID0gZGlmZmxpYi5zdHJpbmdBc0xpbmVz
KHRoaXMuX2V4cGVjdGVkKTsKLSAgICAgICAgdmFyIG5ld0xpbmVzID0gZGlmZmxpYi5zdHJpbmdB
c0xpbmVzKGFjdHVhbCk7Ci0gICAgICAgIHZhciBzbSA9IG5ldyBkaWZmbGliLlNlcXVlbmNlTWF0
Y2hlcihiYXNlTGluZXMsIG5ld0xpbmVzKTsKLSAgICAgICAgdmFyIG9wY29kZXMgPSBzbS5nZXRf
b3Bjb2RlcygpOwotICAgICAgICB2YXIgbGFzdFdhc1NlcGFyYXRvciA9IGZhbHNlOwotCi0gICAg
ICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IG9wY29kZXMubGVuZ3RoOyBpZHgrKykgewotICAg
ICAgICAgICAgdmFyIGNvZGUgPSBvcGNvZGVzW2lkeF07Ci0gICAgICAgICAgICB2YXIgY2hhbmdl
ID0gY29kZVswXTsKLSAgICAgICAgICAgIHZhciBiID0gY29kZVsxXTsKLSAgICAgICAgICAgIHZh
ciBiZSA9IGNvZGVbMl07Ci0gICAgICAgICAgICB2YXIgbiA9IGNvZGVbM107Ci0gICAgICAgICAg
ICB2YXIgbmUgPSBjb2RlWzRdOwotICAgICAgICAgICAgdmFyIHJvd0NvdW50ID0gTWF0aC5tYXgo
YmUgLSBiLCBuZSAtIG4pOwotICAgICAgICAgICAgdmFyIHRvcFJvd3MgPSBbXTsKLSAgICAgICAg
ICAgIHZhciBib3R0b21Sb3dzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHJvd0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hhbmdlID09PSAiZGVsZXRl
IiB8fCAoY2hhbmdlID09PSAicmVwbGFjZSIgJiYgYiA8IGJlKSkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgbGluZU51bWJlciA9IGIrKzsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJl
ZUVsZW1lbnQuYXBwZW5kQ2hpbGQobmV3IFRyZWVFbGVtZW50KCItIFsiICsgbGluZU51bWJlciAr
ICJdICIgKyBiYXNlTGluZXNbbGluZU51bWJlcl0pKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoY2hhbmdlID09PSAiaW5zZXJ0IiB8fCAoY2hhbmdlID09PSAicmVw
bGFjZSIgJiYgbiA8IG5lKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9
IG4rKzsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQo
bmV3IFRyZWVFbGVtZW50KCIrIFsiICsgbGluZU51bWJlciArICJdICIgKyBuZXdMaW5lc1tsaW5l
TnVtYmVyXSkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChjaGFu
Z2UgPT09ICJlcXVhbCIpIHsKLSAgICAgICAgICAgICAgICAgICAgYisrOwotICAgICAgICAgICAg
ICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5fbmV4dCgiZmFpbCIpOwotICAgIH0sCi0KLSAgICBldmFsdWF0ZUlu
V2ViSW5zcGVjdG9yOiBmdW5jdGlvbihjYWxsSWQsIHNjcmlwdCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgICAgICB0aGlzLl9pbnNwZWN0b3JXaW5k
b3cucG9zdE1lc3NhZ2UoWyJldmFsdWF0ZUZvclRlc3QiLCBjYWxsSWQsIHNjcmlwdF0sICIqIik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdNZXNzYWdlcy5wdXNoKFsi
ZXZhbHVhdGVGb3JUZXN0IiwgY2FsbElkLCBzY3JpcHRdKTsKLSAgICB9LAotCi0gICAgX3RpbWVv
dXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RyZWVFbGVtZW50LnRpdGxlID0g
dGhpcy5fdGVzdFBhdGggKyAiOiBUSU1FT1VUIjsKLSAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnQu
bGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoInRpbWVvdXQiKTsKLSAgICAgICAgdGhpcy5f
ZG9uZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuY2xlYW51cCgpOwotICAgICAgICB0aGlzLl9uZXh0
KCJ0aW1lb3V0Iik7Ci0gICAgfSwKLQotICAgIGNsZWFudXA6IGZ1bmN0aW9uICgpCi0gICAgewot
ICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW5zcGVjdG9yV2lkdGgnLCB0aGlzLl9pbnNw
ZWN0b3JXaW5kb3dMb2FkaW5nLm91dGVyV2lkdGgpOwotICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0
SXRlbSgnaW5zcGVjdG9ySGVpZ2h0JywgdGhpcy5faW5zcGVjdG9yV2luZG93TG9hZGluZy5vdXRl
ckhlaWdodCk7Ci0gICAgICAgIHRoaXMuX2luc3BlY3RvcldpbmRvd0xvYWRpbmcuY2xvc2UoKTsK
LSAgICAgICAgdGhpcy5fdGVzdFBhZ2UuY2xvc2UoKTsKLSAgICAgICAgZGVsZXRlIHdpbmRvdy5y
dW5uZXI7Ci0gICAgfSwKLQotICAgIG9uVHJlZUVsZW1lbnRTZWxlY3Q6IGZ1bmN0aW9uICgpIAot
ICAgIHsKLSAgICAgICAgdmFyIGJhc2VFbmRTZW50aW5lbCA9ICcvaW5zcGVjdG9yLyc7Ci0gICAg
ICAgIHZhciBiYXNlQ2hhcnMgPSB0aGlzLl90ZXN0UGF0aC5pbmRleE9mKGJhc2VFbmRTZW50aW5l
bCkgKyBiYXNlRW5kU2VudGluZWwubGVuZ3RoOwotICAgICAgICBpZiAoYmFzZUNoYXJzID4gMCkg
Ci0gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsdGVyIikudmFsdWUgPSB0
aGlzLl90ZXN0UGF0aC5zdWJzdHIoYmFzZUNoYXJzKTsKLSAgICB9LAotCi0gICAgZGlzcGxheTog
ZnVuY3Rpb24oKSB7IH0KLX0KLQotZnVuY3Rpb24gb25NZXNzYWdlRnJvbVRlc3RQYWdlKGV2ZW50
KQotewotICAgIHZhciBzaWduYXR1cmUgPSBldmVudC5kYXRhOwotICAgIHZhciBtZXRob2QgPSBz
aWduYXR1cmUuc2hpZnQoKTsKLSAgICBpZiAobWV0aG9kID09PSAidGVzdHMiKSB7Ci0gICAgICAg
IHRlc3RzID0gc2lnbmF0dXJlWzBdOwotICAgICAgICBydW5UZXN0cygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKHdpbmRvdy5ydW5uZXIpCi0gICAgICAgIHdpbmRvdy5ydW5u
ZXJbbWV0aG9kXS5hcHBseSh3aW5kb3cucnVubmVyLCBzaWduYXR1cmUpOwotfQotCi1mdW5jdGlv
biBvbmxvYWQoKQotewotICAgIHZhciBxdWVyeVBhcmFtc09iamVjdCA9IHt9OwotICAgIHZhciBx
dWVyeVBhcmFtcyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7Ci0gICAgaWYgKCFxdWVyeVBhcmFt
cykKLSAgICAgICAgcmV0dXJuOwotICAgIHZhciBwYXJhbXMgPSBxdWVyeVBhcmFtcy5zdWJzdHJp
bmcoMSkuc3BsaXQoIiYiKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7
ICsraSkgewotICAgICAgICB2YXIgcGFpciA9IHBhcmFtc1tpXS5zcGxpdCgiPSIpOwotICAgICAg
ICBxdWVyeVBhcmFtc09iamVjdFtwYWlyWzBdXSA9IHBhaXJbMV07Ci0gICAgfQotICAgIGlmICgi
ZmlsdGVyIiBpbiBxdWVyeVBhcmFtc09iamVjdCkKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImZpbHRlciIpLnZhbHVlID0gcXVlcnlQYXJhbXNPYmplY3RbImZpbHRlciJdOwotfQot
Ci13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZUZyb21UZXN0UGFn
ZSwgdHJ1ZSk7Ci0KLTwvc2NyaXB0PgotPGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+Ci1UaGlzIGlz
IGEgc3RhbmRhbG9uZSB0ZXN0IHN1aXRlIGZvciBpbnNwZWN0b3IgZnJvbnQtZW5kLiBIZXJlIGlz
IGhvdyB5b3UgcnVuIGl0OgotPHVsPgotPGxpPkNoZWNrIG91dCBXZWJLaXQgc291cmNlIHRyZWU6
IGdpdCBjbG9uZSBodHRwOi8vZ2l0LmNocm9taXVtLm9yZy9leHRlcm5hbC9XZWJraXQuZ2l0PC9s
aT4KLTxsaT5SdW4gIlRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0cGQgLS1yb290PS4g
LS1wb3J0PTgwMDIgLS1zZXJ2ZXI9c3RhcnQiPC9saT4KLTxsaT5SdW4gQ2hyb21lIENhbmFyeSAo
VG9UIENocm9taXVtKSB3aXRoIGZvbGxvd2luZyBmbGFnczogIi0tcmVtb3RlLWRlYnVnZ2luZy1w
b3J0PTkyMjIgLS11c2VyLWRhdGEtZGlyPXRlc3RQcm9maWxlIGh0dHA6Ly9sb2NhbGhvc3Q6ODAw
Mi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Rlc3QtcnVubmVyLmh0bWwiPC9s
aT4KLTwvdWw+Ci0KLTxidXR0b24gb25jbGljaz0icnVuKCkiPlJ1bjwvYnV0dG9uPgotPGJ1dHRv
biBpZD0iZGVidWciIG9uY2xpY2s9InJ1bih0cnVlKSI+RGVidWc8L2J1dHRvbj4KLTxidXR0b24g
b25jbGljaz0iaW50ZXJydXB0KCkiPkludGVycnVwdDwvYnV0dG9uPgotRmlsdGVyOiA8aW5wdXQg
aWQ9ImZpbHRlciIgdHlwZT0idGV4dCIgc2l6ZT0iNDAiPjwvaW5wdXQ+PHNtYWxsPjxpPkNsaWNr
IG9uIHJlc3VsdHMgdG8gbG9hZCBmaWx0ZXI8L2k+PC9zbWFsbD48YnI+Ci0KLTxzcGFuPlBhc3Nl
ZDogPHNwYW4gaWQ9InBhc3MiPjA8L3NwYW4+PC9zcGFuPgotPHNwYW4+RmFpbGVkOiA8c3BhbiBp
ZD0iZmFpbCI+MDwvc3Bhbj48L3NwYW4+Ci08c3Bhbj5UaW1lb3V0OiA8c3BhbiBpZD0idGltZW91
dCI+MDwvc3Bhbj48L3NwYW4+Ci08c3Bhbj5Ta2lwcGVkOiA8c3BhbiBpZD0ic2tpcCI+MDwvc3Bh
bj48L3NwYW4+Ci08c3Bhbj5SZW1haW5pbmc6IDxzcGFuIGlkPSJyZW1haW5pbmciPjA8L3NwYW4+
PGJyPgotCi08b2wgaWQ9Im91dGxpbmUiIHN0eWxlPSJmb250LXNpemU6IDEycHggIWltcG9ydGFu
dCIgY2xhc3M9InNvdXJjZS1jb2RlIG91dGxpbmUtZGlzY2xvc3VyZSI+PC9vbD4KLQotPC9ib2R5
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC90ZXh0RWRpdG9yLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4
dEVkaXRvci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYzdiYmUuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRpdG9yLmNz
cworKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0udGV4dC1lZGl0b3IgewotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6MDsKLSAgICBsZWZ0OjA7Ci0gICAgcmlnaHQ6MDsK
LSAgICBib3R0b206MDsKLSAgICB3aGl0ZS1zcGFjZTogcHJlOwotICAgIG92ZXJmbG93OiBhdXRv
OwotfQotCi0udGV4dC1lZGl0b3ItbGluZXMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgb3ZlcmZsb3c6IGhp
ZGRlbjsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYigyNDAsIDI0MCwgMjQwKTsKLSAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2Io
MTg3LCAxODcsIDE4Nyk7Ci0gICAgbWluLXdpZHRoOiAxOXB4OwotfQotCi0udGV4dC1lZGl0b3It
Y29udGVudHMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVm
dDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgb3ZlcmZsb3c6IGF1dG87
Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKLX0KLQotLndlYmtpdC1saW5lLWNvbnRl
bnQgPiAudGV4dC1lZGl0b3Itb3ZlcmxheS1oaWdobGlnaHQgewotICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOwotICAgIHotaW5kZXg6IDE7Ci19Ci0KLS50ZXh0LWVkaXRvci10b2tlbi1oaWdobGln
aHQgewotICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7Ci0gICAgYm9yZGVyLXJhZGl1czogM3B4
OwotfQotCi0udGV4dC1lZGl0b3ItYnJhY2UtbWF0Y2ggewotICAgIGJvcmRlci1ib3R0b206IDFw
eCBzb2xpZCBibGFjazsKLX0KLQotLnRleHQtZWRpdG9yLWNvbnRlbnRzIC5pbm5lci1jb250YWlu
ZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsK
LSAgICByaWdodDogYXV0bzsKLSAgICBib3R0b206IGF1dG87Ci0gICAgbWluLXdpZHRoOiAxMDAl
OwotfQotCi0udGV4dC1lZGl0b3ItZWRpdGFibGUgewotICAgIC13ZWJraXQtdXNlci1tb2RpZnk6
IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHk7Ci19Ci0KLS50ZXh0LWVkaXRvci1yZWFkLW9ubHkg
ewotICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seTsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7Ci19Ci0KLS53ZWJraXQtbGluZS1kZWNvcmF0aW9ucyB7
Ci0gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9u
ZTsKLSAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHk7Ci19Ci0KLS53ZWJraXQtaHRt
bC1tZXNzYWdlLWJ1YmJsZSB7Ci0gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBibGFjayAwcHggMnB4
IDVweDsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDsKLSAgICAtd2Via2l0LWJvcmRl
ci1maXQ6IGxpbmVzOwotICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICBmb250LWZhbWlseTogTHVj
aWRhIEdyYW5kZSwgc2Fucy1zZXJpZjsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBtYXJn
aW46IDZweCAyNXB4OwotICAgIHBhZGRpbmc6IDAgN3B4IDFweDsKLSAgICB6LWluZGV4OjIwOwot
fQotCi0ud2Via2l0LWh0bWwtd2FybmluZy1tZXNzYWdlIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZ2IoMTAwJSwgNjIlLCA0MiUpOwotICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxMDAlLCA1
MiUsIDIxJSk7Ci19Ci0KLS53ZWJraXQtaHRtbC1lcnJvci1tZXNzYWdlIHsKLSAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZ2IoMTAwJSwgNDIlLCA0MiUpOwotICAgIGJvcmRlcjogMnB4IHNvbGlkIHJn
YigxMDAlLCAzMSUsIDMxJSk7Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdlLWxpbmUgewotICAg
IHBhZGRpbmctbGVmdDogMjNweDsKLSAgICB0ZXh0LWluZGVudDogLTIwcHg7Ci19Ci0KLS53ZWJr
aXQtaHRtbC1tZXNzYWdlLWxpbmUtaG92ZXIgewotICAgIHBhZGRpbmctbGVmdDogMjNweDsKLSAg
ICB0ZXh0LWluZGVudDogLTIwcHg7Ci0gICAgd2hpdGUtc3BhY2U6IGF1dG87Ci0gICAgdGV4dC1v
dmVyZmxvdzogYXV0bzsKLSAgICBvdmVyZmxvdzogYXV0bzsKLX0KLQotLndlYmtpdC1odG1sLW1l
c3NhZ2UtaWNvbiB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDogMnB4OwotICAg
IG1hcmdpbjogMCA0cHg7Ci19Ci0KLS53ZWJraXQtbGluZS1udW1iZXIgewotICAgIGNvbG9yOiBy
Z2IoMTI4LCAxMjgsIDEyOCk7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgdmVydGljYWwt
YWxpZ246IHRvcDsKLSAgICB3b3JkLWJyZWFrOiBub3JtYWw7Ci0gICAgcGFkZGluZy1yaWdodDog
NHB4OwotICAgIHBhZGRpbmctbGVmdDogNnB4OwotfQotCi0ud2Via2l0LWxpbmUtbnVtYmVyLW91
dGVyIHsKLSAgICBtYXJnaW4tcmlnaHQ6IC00cHg7Ci0gICAgbWFyZ2luLWxlZnQ6IC00cHg7Ci0g
ICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBib3JkZXItc3R5bGU6IHNvbGlkOwot
ICAgIGJvcmRlci13aWR0aDogMCAwIDBweCAycHg7Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsK
LX0KLQotLndlYmtpdC1saW5lLW51bWJlci1pbm5lciB7Ci0gICAgbWFyZ2luLXJpZ2h0OiA0cHg7
Ci19Ci0KLS53ZWJraXQtYnJlYWtwb2ludCAud2Via2l0LWxpbmUtbnVtYmVyLWlubmVyLCAud2Vi
a2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwgLndlYmtpdC1saW5lLW51bWJlci1pbm5lciwgLndl
YmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyLWlubmVyIHsKLSAgICBtYXJn
aW4tcmlnaHQ6IC0xMHB4OwotfQotCi0ud2Via2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5lLW51
bWJlci1vdXRlciB7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIGJvcmRlci13aWR0aDogMCAxNHB4
IDBweCAycHg7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2lu
dEJvcmRlci5wbmcpIDAgMTQgMCAyOwotfQotCi0ud2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9u
YWwgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIGJv
cmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVy
bChJbWFnZXMvYnJlYWtwb2ludENvbmRpdGlvbmFsQm9yZGVyLnBuZykgMCAxNCAwIDI7Ci19Ci0K
LS53ZWJraXQtZXhlY3V0aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAg
Y29sb3I6IHRyYW5zcGFyZW50OwotICAgIGJvcmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7Ci0g
ICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvcHJvZ3JhbUNvdW50ZXJCb3JkZXIu
cG5nKSAwIDE0IDAgMjsKLX0KLQotLndlYmtpdC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24t
bGluZSAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKLSAgICBjb2xvcjogd2hpdGU7Ci0gICAg
LXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvdW50ZXJCb3JkZXIu
cG5nKSAwIDE0IDAgMjsKLX0KLQotLndlYmtpdC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24t
bGluZSAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKLSAgICBjb2xvcjogdHJhbnNwYXJlbnQ7
Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvdW50ZXJC
b3JkZXIucG5nKSAwIDE0IDAgMjsKLX0KLQotLndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFs
LndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKLSAgICBj
b2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMv
YnJlYWtwb2ludENvbmRpdGlvbmFsQ291bnRlckJvcmRlci5wbmcpIDAgMTQgMCAyOwotfQotCi0u
d2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0g
ICAgb3BhY2l0eTogMC41OwotfQotCi0uYnJlYWtwb2ludHMtZGVhY3RpdmF0ZWQgLndlYmtpdC1i
cmVha3BvaW50IC53ZWJraXQtbGluZS1udW1iZXItb3V0ZXIgewotICAgIG9wYWNpdHk6IDAuNTsK
LX0KLQotLmJyZWFrcG9pbnRzLWRlYWN0aXZhdGVkIC53ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxl
ZCAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKLSAgICBvcGFjaXR5OiAwLjM7Ci19Ci0KLS53
ZWJraXQtbGluZS1jb250ZW50ID4gKiB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHot
aW5kZXg6IDI7Ci19Ci0KLS53ZWJraXQtZXhlY3V0aW9uLWxpbmUud2Via2l0LWxpbmUtY29udGVu
dCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE3MSwgMTkxLCAyNTQpOwotICAgIG91dGxp
bmU6IDFweCBzb2xpZCByZ2IoNjQsIDExNSwgMjQ0KTsKLX0KLQotLndlYmtpdC1oaWdobGlnaHRl
ZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewotICAgIC13ZWJraXQtYW5pbWF0aW9uOiAiZmFk
ZW91dCIgMnMgMHM7Ci19Ci0KLUAtd2Via2l0LWtleWZyYW1lcyBmYWRlb3V0IHsKLSAgICBmcm9t
IHtiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7IH0KLSAgICB0byB7IGJhY2tn
cm91bmQtY29sb3I6IHdoaXRlOyB9Ci19Ci0KLS5kZWJ1Zy1mYWRlb3V0IHsKLSAgICAtd2Via2l0
LWFuaW1hdGlvbjogImRlYnVnLWZhZGVvdXQiIDFzIDBzOwotICAgIGJvcmRlcjogMXB4IHNvbGlk
IHdoaXRlOwotICAgIG1hcmdpbjogLTFweDsKLX0KLQotQC13ZWJraXQta2V5ZnJhbWVzIGRlYnVn
LWZhZGVvdXQgewotICAgIGZyb20gewotICAgICAgICBib3JkZXItY29sb3I6IGJsYWNrOwotICAg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7Ci0gICAgfQotICAgIHRv
IHsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgICAgIGJvcmRlci1jb2xv
cjogd2hpdGUKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL3RleHRQcm9tcHQuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC90ZXh0UHJvbXB0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E0YmEw
Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRQ
cm9tcHQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS5zdWdnZXN0LWJveCB7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Ci0g
ICAgZGlzcGxheTogYmxvY2s7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci0gICAgcGFk
ZGluZzogMnB4OwotICAgIHotaW5kZXg6IDEwMDsKLX0KLQotLnN1Z2dlc3QtYm94IC5jb250YWlu
ZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsK
LSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVuOwot
ICAgIG92ZXJmbG93LXk6IGF1dG87Ci19Ci0KLS5zdWdnZXN0LWJveC1jb250ZW50LWl0ZW0gewot
ICAgIHBhZGRpbmc6IDFweDsKLSAgICBtYXJnaW46IDA7Ci0gICAgZm9udC1zaXplOiAxMXB4Owot
ICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAg
Ym9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Ci19Ci0KLS5zdWdnZXN0LWJveC1jb250ZW50
LWl0ZW0gLnByZWZpeCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLS5zdWdnZXN0LWJv
eC1jb250ZW50LWl0ZW0uc2VsZWN0ZWQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMTIs
IDIxMiwgMjEyKTsKLX0KLQotLnN1Z2dlc3QtYm94LWNvbnRlbnQtaXRlbTpob3Zlcjpub3QoLnNl
bGVjdGVkKSB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAyMDQpOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90aW1lbGluZVBh
bmVsLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGltZWxpbmVQYW5l
bC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWY4NmYuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90aW1lbGluZVBhbmVsLmNzcwor
KysgL2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQW50aG9ueSBSaWNhdWQgPHJpa0B3ZWJraXQub3JnPgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSN0aW1lbGluZS1vdmVy
dmlldy1wYW5lbCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBs
ZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGhlaWdodDogODBweDsKLX0KLQotI3RpbWVsaW5l
LW92ZXJ2aWV3LXBhbmVsIC50aW1lbGluZS1ncmFwaC1iYXIgewotICAgIHBvaW50ZXItZXZlbnRz
OiBub25lOwotfQotCi0udGltZWxpbmUgLnNpZGViYXIgewotICAgIG92ZXJmbG93LXk6IGhpZGRl
bjsKLSAgICBtaW4taGVpZ2h0OiAxMDAlOwotICAgIGJvdHRvbTogYXV0byAhaW1wb3J0YW50Owot
fQotCi0udGltZWxpbmUuc3BsaXQtdmlldy12ZXJ0aWNhbCAuc3BsaXQtdmlldy1yZXNpemVyIHsK
LSAgICB0b3A6IDIwcHg7Ci19Ci0KLS50aW1lbGluZS1zaWRlYmFyLWJhY2tncm91bmQgewotICAg
IHRvcDogOTBweDsKLSAgICBib3R0b206IDA7Ci19Ci0KLSN0aW1lbGluZS1vdmVydmlldy1zZXBh
cmF0b3IgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDgwcHg7Ci0gICAgbGVm
dDogMDsKLSAgICByaWdodDogMDsKLSAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxp
bmVhciwgMCUgMCUsIDAlIDEwMCUsIGZyb20ocmdiKDI1MywgMjUzLCAyNTMpKSwgdG8ocmdiKDIx
MywgMjEzLCAyMTMpKSk7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYigxNDAsIDE0MCwg
MTQwKTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDExNSwgMTE1LCAxMTUpOwot
ICAgIGhlaWdodDogMTBweDsKLX0KLQotI3RpbWVsaW5lLW92ZXJ2aWV3LXNpZGViYXIgewotICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB3aWR0aDogMjAwcHg7Ci0gICAgdG9wOiAwcHg7Ci0g
ICAgYm90dG9tOiAwcHg7Ci0gICAgbGVmdDogMHB4OwotICAgIHBhZGRpbmctdG9wOiAycHg7Ci0g
ICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAlIDAlLCAwJSAxMDAlLCBm
cm9tKHJnYigyNDIsIDI0MiwgMjQyKSksIHRvKHJnYigyMDksIDIwOSwgMjA5KSkpOwotICAgIGJv
cmRlci1yaWdodDogMXB4IHNvbGlkIHJnYigxNjMsIDE2MywgMTYzKTsKLX0KLQotI3RpbWVsaW5l
LW92ZXJ2aWV3LWdyaWQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1
KTsKLX0KLQotLnRpbWVsaW5lLWZyYW1lLW92ZXJ2aWV3ICN0aW1lbGluZS1vdmVydmlldy1ncmlk
IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdGltZWxpbmUtb3ZlcnZpZXctZ3JpZCAucmVz
b3VyY2VzLWRpdmlkZXJzLWxhYmVsLWJhciB7Ci0gICAgcG9pbnRlci1ldmVudHM6IGF1dG87Ci19
Ci0KLS50aW1lbGluZS1mcmFtZS1vdmVydmlldyAub3ZlcnZpZXctZ3JpZC13aW5kb3cgewotICAg
IGJvdHRvbTogMDsKLX0KLQotLnRpbWVsaW5lLWZyYW1lLW92ZXJ2aWV3IC5vdmVydmlldy1ncmlk
LWRpdmlkZXJzLWJhY2tncm91bmQgewotICAgIGJvdHRvbTogMDsKLX0KLQotI3RpbWVsaW5lLW92
ZXJ2aWV3LWdyaWQgI3Jlc291cmNlcy1ncmFwaHMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBoZWlnaHQ6IDgw
cHg7Ci19Ci0KLSN0aW1lbGluZS1jb250YWluZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6IDkwcHg7Ci0gICAgbGVmdDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgcmlnaHQ6
IDA7Ci0gICAgYm9yZGVyLXJpZ2h0OiAwIG5vbmUgdHJhbnNwYXJlbnQ7Ci0gICAgb3ZlcmZsb3ct
eTogc2Nyb2xsOwotICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKLX0KLQotI3RpbWVsaW5lLWNvbnRh
aW5lciAuc3BsaXQtdmlldy1zaWRlYmFyIHsKLSAgICB6LWluZGV4OiAxOwotfQotCi0jdGltZWxp
bmUtY29udGFpbmVyIC53ZWJraXQtaHRtbC1leHRlcm5hbC1saW5rLAotI3RpbWVsaW5lLWNvbnRh
aW5lciAud2Via2l0LWh0bWwtcmVzb3VyY2UtbGluayB7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci19
Ci0KLS50aW1lbGluZS1taXNjLXN0YXR1cy1iYXItaXRlbXMgewotICAgIHJpZ2h0OiA2NHB4Owot
fQotCi0udGltZWxpbmUtbWlzYy1zdGF0dXMtYmFyLWZpbHRlcnMgewotICAgIGRpc3BsYXk6IC13
ZWJraXQtZmxleDsKLSAgICAtd2Via2l0LWZsZXgtb3JpZW50YXRpb246IHJvdzsKLX0KLQotLnRp
bWVsaW5lLWNhdGVnb3J5LXN0YXR1c2Jhci1pdGVtIHsKLSAgICBoZWlnaHQ6IDI0cHg7Ci0gICAg
bGluZS1oZWlnaHQ6IDI0cHg7Ci0gICAgcGFkZGluZy1sZWZ0OiA2cHg7Ci0gICAgd2hpdGUtc3Bh
Y2U6IG5vd3JhcDsKLSAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKLSAgICBvdmVyZmxvdzog
aGlkZGVuOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIG1pbi13aWR0aDogMjBweDsKLSAg
ICAtd2Via2l0LWZsZXg6IGF1dG8gMCAxOwotfQotCi0udGltZWxpbmUtY2F0ZWdvcnktc3RhdHVz
YmFyLWl0ZW0sCi0udGltZWxpbmUtcmVjb3Jkcy1jb3VudGVyIHsKLSAgICBjb2xvcjogcmdiKDY1
LCA2NSwgNjUpOwotfQotCi0udGltZWxpbmUtY2F0ZWdvcnktc3RhdHVzYmFyLWl0ZW0gLnRpbWVs
aW5lLWNhdGVnb3J5LWNoZWNrYm94IHsKLSAgICB3aWR0aDogMTBweDsKLSAgICBoZWlnaHQ6IDEx
cHg7Ci0gICAgbWFyZ2luOiAwIDNweCAwIDlweDsKLSAgICBwYWRkaW5nOiAwOwotICAgIHZlcnRp
Y2FsLWFsaWduOiAtMnB4OwotICAgIGJvcmRlci1yYWRpdXM6IDJweDsKLSAgICBib3JkZXI6IHNv
bGlkIDFweDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLS50aW1lbGluZS1j
YXRlZ29yeS1zdGF0dXNiYXItaXRlbSAudGltZWxpbmUtY2F0ZWdvcnktY2hlY2tib3g6Y2hlY2tl
ZDo6YmVmb3JlIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAtNXB4OwotICAg
IGNvbnRlbnQ6IHVybChJbWFnZXMvdGlja01hcmsucG5nKTsKLX0KLQotLnRpbWVsaW5lLXRyZWUt
aXRlbSB7Ci0gICAgaGVpZ2h0OiAxOHB4OwotICAgIGxpbmUtaGVpZ2h0OiAxNXB4OwotICAgIHBh
ZGRpbmctcmlnaHQ6IDVweDsKLSAgICBwYWRkaW5nLWxlZnQ6IDVweDsKLSAgICBwYWRkaW5nLXRv
cDogMnB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxs
aXBzaXM7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotLnRpbWVsaW5lLWV4cGFuZGFibGUg
ewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJn
YigxNjMsIDE2MywgMTYzKTsKLX0KLQotLnRpbWVsaW5lLWV4cGFuZGFibGUtbGVmdCB7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVm
dDogMDsKLSAgICB3aWR0aDogM3B4OwotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMTYz
LCAxNjMsIDE2Myk7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxNjMsIDE2Mywg
MTYzKTsKLX0KLQotLnRpbWVsaW5lLWV4cGFuZGFibGUtY29sbGFwc2VkIHsKLSAgICBiYWNrZ3Jv
dW5kLWltYWdlOiB1cmwoSW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHRCbGFjay5w
bmcpOwotICAgIGJhY2tncm91bmQtcG9zaXRpb24teDogMXB4OwotICAgIGJhY2tncm91bmQtcG9z
aXRpb24teTogM3B4OwotICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci19Ci0KLS50
aW1lbGluZS1leHBhbmRhYmxlLWV4cGFuZGVkIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwo
SW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsRG93bkJsYWNrLnBuZyk7Ci0gICAgYmFja2dy
b3VuZC1wb3NpdGlvbi14OiAxcHg7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAzcHg7Ci0g
ICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLX0KLQotLnRpbWVsaW5lLXRyZWUtaXRl
bSAudHlwZSB7Ci0gICAgcGFkZGluZy1sZWZ0OiAxNHB4OwotfQotCi0udGltZWxpbmUtdHJlZS1p
dGVtIC5jb3VudCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLS50aW1lbGluZS10cmVl
LWl0ZW0gLnRpbWVsaW5lLXRyZWUtaWNvbiB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgbWFy
Z2luLXRvcDogNHB4OwotICAgIG1hcmdpbi1sZWZ0OiAycHg7Ci0gICAgd2lkdGg6IDdweDsKLSAg
ICBoZWlnaHQ6IDdweDsKLSAgICBib3JkZXItcmFkaXVzOiAxcHg7Ci0gICAgYm9yZGVyOiBzb2xp
ZCAxcHg7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotfQotCi0udGltZWxpbmUtdHJlZS1pdGVt
LmJhY2tncm91bmQgLnRpbWVsaW5lLXRyZWUtaWNvbiB7Ci0gICAgYmFja2dyb3VuZDogbm9uZSAh
aW1wb3J0YW50OwotfQotCi0udGltZWxpbmUtdHJlZS1pdGVtLmV2ZW4gewotICAgIGJhY2tncm91
bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7Ci19Ci0KLS50aW1lbGluZS10cmVlLWl0ZW0u
d2FybmluZzo6YWZ0ZXIsCi0udGltZWxpbmUtdHJlZS1pdGVtLmNoaWxkLXdhcm5pbmc6OmFmdGVy
IHsKLSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3dhcm5pbmdJY29uLnBuZyk7Ci0gICAgZmxvYXQ6
IHJpZ2h0OwotICAgIHBhZGRpbmctdG9wOiAxcHg7Ci19Ci0KLS50aW1lbGluZS10cmVlLWl0ZW0u
Y2hpbGQtd2FybmluZzo6YWZ0ZXIgewotICAgIG9wYWNpdHk6IDAuNTsKLX0KLQotLnRpbWVsaW5l
LXRyZWUtaXRlbSAuZGF0YS5kaW1tZWQgewotICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7
Ci19Ci0KLSN0aW1lbGluZS1vdmVydmlldy1ldmVudHMsCi0jdGltZWxpbmUtb3ZlcnZpZXctbWVt
b3J5IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDog
MDsKLSAgICBib3R0b206IDA7Ci0gICAgdG9wOiAyMHB4OwotICAgIHotaW5kZXg6IDE2MDsKLX0K
LQotLnRpbWVsaW5lLWZyYW1lLW92ZXJ2aWV3ICN0aW1lbGluZS1vdmVydmlldy1tZW1vcnkgewot
ICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSN0aW1lbGluZS1vdmVydmlldy1tZW1vcnkgPiBjYW52
YXMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAw
OwotICAgIGJvdHRvbTogMDsKLSAgICB0b3A6IDVweDsKLX0KLQotI3RpbWVsaW5lLWdyYXBocyB7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0g
ICAgbWF4LWhlaWdodDogMTAwJTsKLSAgICB0b3A6IDE5cHg7Ci19Ci0KLS50aW1lbGluZS1ncmFw
aC1zaWRlIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgaGVpZ2h0OiAxOHB4OwotICAg
IHBhZGRpbmc6IDAgNXB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgbWFyZ2luLXRv
cDogMHB4OwotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKLSAgICBvdmVy
ZmxvdzogaGlkZGVuOwotICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwotfQotCi0udGltZWxpbmUt
Z3JhcGgtYmFyLWFyZWEgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0g
ICAgYm90dG9tOiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IDNweDsKLSAgICBwb2ludGVy
LWV2ZW50czogbm9uZTsKLX0KLQotLnRpbWVsaW5lLWdyYXBoLWJhciB7Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIHRvcDogLTFweDsKLSAgICBib3R0b206IDA7Ci0gICAgbWFyZ2luOiBh
dXRvIC0ycHg7Ci0gICAgaGVpZ2h0OiA5cHg7Ci0gICAgbWluLXdpZHRoOiA1cHg7Ci0gICAgei1p
bmRleDogMTgwOwotICAgIHBvaW50ZXItZXZlbnRzOiB2aXNpYmxlRmlsbDsKLSAgICBib3JkZXIt
cmFkaXVzOiAxcHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQ7Ci19Ci0KLS50aW1lbGluZS1ncmFw
aC1iYXIud2l0aC1jaGlsZHJlbiB7Ci0gICAgb3BhY2l0eTogMC4yNTsKLSAgICBib3gtc2hhZG93
OiAwcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNCk7Ci19Ci0KLS50aW1lbGluZS1ncmFwaC1i
YXIuY3B1IHsKLSAgICBvcGFjaXR5OiAwLjc7Ci19Ci0KLS50aW1lbGluZS1ncmFwaC1zaWRlLmJh
Y2tncm91bmQgLnRpbWVsaW5lLWdyYXBoLWJhciB7Ci0gICAgYmFja2dyb3VuZDogdHJhbnNwYXJl
bnQgIWltcG9ydGFudDsKLSAgICBib3JkZXItd2lkdGg6IDJweDsKLX0KLQotLnRpbWVsaW5lLWdy
YXBoLXNpZGUuZXZlbiB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1
KTsKLX0KLQotLnRpbWVsaW5lLWFnZ3JlZ2F0ZWQtY2F0ZWdvcnkgewotICAgIGRpc3BsYXk6IGlu
bGluZS1ibG9jazsKLSAgICBoZWlnaHQ6IDExcHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiAycHg7Ci0g
ICAgbWFyZ2luLWxlZnQ6IDZweDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAy
cHg7Ci0gICAgd2lkdGg6IDEwcHg7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHg7Ci19Ci0KLS5wb3Bv
dmVyIC50aW1lbGluZS1hZ2dyZWdhdGVkLWNhdGVnb3J5LnRpbWVsaW5lLWxvYWRpbmcgewotICAg
IG1hcmdpbi1sZWZ0OiAwcHg7Ci19Ci0KLS5nYXJiYWdlLWNvbGxlY3Qtc3RhdHVzLWJhci1pdGVt
IC5nbHlwaCB7Ci0gICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtMTI4cHggLTI0cHg7Ci19Ci0K
LS5nbHVlLWFzeW5jLXN0YXR1cy1iYXItaXRlbSAuZ2x5cGggewotICAgIC13ZWJraXQtbWFzay1w
b3NpdGlvbjogLTEyOHB4IC00OHB4OwotfQotCi0udGltZWxpbmUtZnJhbWUtb3ZlcnZpZXctc3Rh
dHVzLWJhci1pdGVtLnRvZ2dsZWQtb24gLmdseXBoIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2IoNjYsIDEyOSwgMjM1KSAhaW1wb3J0YW50OwotfQotCi0udGltZWxpbmUtcmVjb3Jkcy1zdGF0
cywgLnN0b3JhZ2UtYXBwbGljYXRpb24tY2FjaGUtc3RhdHVzLCAuc3RvcmFnZS1hcHBsaWNhdGlv
bi1jYWNoZS1jb25uZWN0aXZpdHkgewotICAgIHRleHQtc2hhZG93OiB3aGl0ZSAwIDFweCAwOwot
fQotCi0udGltZWxpbmUtcmVjb3Jkcy1zdGF0cyB7Ci0gICAgbWFyZ2luLXRvcDogNXB4OwotICAg
IG1hcmdpbi1sZWZ0OiA2cHg7Ci0gICAgLXdlYmtpdC1mbGV4OiAxOwotfQotCi0udGltZWxpbmUt
cmVjb3Jkcy1zdGF0cy1jb250YWluZXIgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAg
ICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYigyMDIsIDIwMiwgMjAyKTsKLSAgICBoZWlnaHQ6
IDI0cHg7Ci0gICAgbWFyZ2luLWxlZnQ6IDZweDsKLX0KLQotLnRpbWVsaW5lLWZyYW1lcy1zdGF0
cyB7Ci0gICAgcG9pbnRlci1ldmVudHM6IGF1dG87Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotfQotCi0jcmVzb3VyY2VzLWNvbnRhaW5lci1j
b250ZW50IHsKLSAgICBvdmVyZmxvdzogdmlzaWJsZTsKLSAgICBtaW4taGVpZ2h0OiAxMDAlOwot
fQotCi0jcmVzb3VyY2VzLWdyYXBocyB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxl
ZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgbWF4LWhlaWdodDogMTAwJTsKLSAgICB0b3A6IDEx
MnB4OwotfQotCi0ucmVzb3VyY2VzLWdyYXBoLXNpZGUgewotICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKLSAgICBoZWlnaHQ6IDM2cHg7Ci0gICAgcGFkZGluZzogMCA1cHg7Ci0gICAgd2hpdGUtc3Bh
Y2U6IG5vd3JhcDsKLSAgICBtYXJnaW4tdG9wOiAxcHg7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNv
bGlkIHRyYW5zcGFyZW50OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci19Ci0KLS5yZXNvdXJjZXMt
Z3JhcGgtYmFyLWFyZWEgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0g
ICAgYm90dG9tOiAwOwotICAgIHJpZ2h0OiA4cHg7Ci0gICAgbGVmdDogOXB4OwotfQotCi0jdGlt
ZWxpbmUtb3ZlcnZpZXctc2lkZWJhciAuc2lkZWJhci10cmVlLWl0ZW0gewotICAgIGxpbmUtaGVp
Z2h0OiAyNnB4OwotICAgIGhlaWdodDogMjRweDsKLX0KLQotI3RpbWVsaW5lLW92ZXJ2aWV3LXNp
ZGViYXIgLnNpZGViYXItdHJlZS1pdGVtIC50aXRsZXMubm8tc3VidGl0bGUgewotICAgIHRvcDog
NXB4OwotfQotCi0jdGltZWxpbmUtb3ZlcnZpZXctc2lkZWJhciAuaWNvbiB7Ci0gICAgaGVpZ2h0
OiAyNHB4OwotICAgIG1hcmdpbi10b3A6IC0xcHg7Ci0gICAgbWFyZ2luLWxlZnQ6IDA7Ci0gICAg
bWFyZ2luLXJpZ2h0OiAwOwotICAgIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy9zdGF0
dXNiYXJCdXR0b25HbHlwaHMucG5nKTsKLSAgICAtd2Via2l0LW1hc2stc2l6ZTogMzIwcHggNzJw
eDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKLX0KLQotQG1lZGlhICgtd2Via2l0LW1p
bi1kZXZpY2UtcGl4ZWwtcmF0aW86IDEuNSkgewotI3RpbWVsaW5lLW92ZXJ2aWV3LXNpZGViYXIg
Lmljb24gewotICAgIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy9zdGF0dXNiYXJCdXR0
b25HbHlwaHMyeC5wbmcpOwotfQotfQotCi0udGltZWxpbmUtb3ZlcnZpZXctc2lkZWJhci1ldmVu
dHMgLmljb24gewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlvbjogLTE5MnB4IC00OHB4OwotfQot
Ci0udGltZWxpbmUtb3ZlcnZpZXctc2lkZWJhci1mcmFtZXMgLmljb24gewotICAgIC13ZWJraXQt
bWFzay1wb3NpdGlvbjogLTE2MHB4IC00OHB4OwotfQotCi0udGltZWxpbmUtb3ZlcnZpZXctc2lk
ZWJhci1tZW1vcnkgLmljb24gewotICAgIC13ZWJraXQtbWFzay1wb3NpdGlvbjogLTIyNHB4IC00
OHB4OwotfQotCi0ubWVtb3J5LWdyYXBoLWxhYmVsIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Ci0gICAgbGVmdDogNXB4OwotICAgIGZvbnQtc2l6ZTogOXB4OwotICAgIGNvbG9yOiByZ2IoNTAl
LCA1MCUsIDUwJSk7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLQotLm1heC5tZW1vcnkt
Z3JhcGgtbGFiZWwgewotICAgIHRvcDogNXB4OwotfQotCi0ubWluLm1lbW9yeS1ncmFwaC1sYWJl
bCB7Ci0gICAgYm90dG9tOiA1cHg7Ci19Ci0KLSN0aW1lbGluZS1tZW1vcnktc3BsaXR0ZXIgewot
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB6LWluZGV4OiA1OwotICAgIGxlZnQ6IDA7Ci0g
ICAgcmlnaHQ6IDA7Ci0gICAgaGVpZ2h0OiA1cHg7Ci0gICAgY3Vyc29yOiBucy1yZXNpemU7Ci19
Ci0KLSNtZW1vcnktY291bnRlcnMtZ3JhcGggewotICAgIG92ZXJmbG93OiBoaWRkZW47Ci19Ci0K
LSNtZW1vcnktZ3JhcGhzLWNvbnRhaW5lciB7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNB
QUE7Ci19Ci0KLSNtZW1vcnktZ3JhcGhzLWNhbnZhcy1jb250YWluZXIgewotICAgIGJvcmRlci1y
aWdodDogMXB4IHNvbGlkICNBQUE7Ci19Ci0KLSNtZW1vcnktZ3JhcGhzLWNhbnZhcy1jb250YWlu
ZXIuZG9tLWNvdW50ZXJzIC5yZXNvdXJjZXMtZGl2aWRlcnMgewotICAgIHRvcDogMTVweDsKLX0K
LQotI21lbW9yeS1ncmFwaHMtY29udGFpbmVyIC5zcGxpdC12aWV3LWNvbnRlbnRzIHsKLSAgICBv
dmVyZmxvdzogaGlkZGVuOwotfQotCi0ubWVtb3J5LWNvdW50ZXItc2lkZWJhci1pbmZvIHsKLSAg
ICBtYXJnaW46IDEwcHg7Ci19Ci0KLS5tZW1vcnktY291bnRlci1zaWRlYmFyLWluZm8gLnN3YXRj
aHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwotfQotCi0ubWVtb3J5LWNvdW50ZXItc2lk
ZWJhci1pbmZvLmJvdHRvbS1ib3JkZXItdmlzaWJsZSB7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4
IHNvbGlkICNBQUE7Ci19Ci0KLS5tZW1vcnktY291bnRlci1zaWRlYmFyLWluZm8gLnRpdGxlIHsK
LSAgICBtYXJnaW46IDRweDsKLX0KLQotLm1lbW9yeS1jb3VudGVyLXZhbHVlIHsKLSAgICBtYXJn
aW46IDRweDsKLX0KLQotI2NvdW50ZXItdmFsdWVzLWJhciB7Ci0gICAgYm9yZGVyLWJvdHRvbTog
c29saWQgMXB4IGxpZ2h0Z3JheTsKLSAgICBtaW4taGVpZ2h0OiAxNXB4OwotfQotCi0udGltZWxp
bmUtZnJhbWUtb3ZlcnZpZXctYmFycyB7Ci0gICAgei1pbmRleDogMjAwOwotICAgIGJhY2tncm91
bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKLSAgICB3aWR0aDogMTAwJTsKLSAg
ICBoZWlnaHQ6IDEwMCU7Ci19Ci0KLS50aW1lbGluZSAucmVzb3VyY2VzLWV2ZW50LWRpdmlkZXIg
ewotICAgIGhlaWdodDogMTlweDsKLSAgICB3aWR0aDogOHB4OwotICAgIGJvcmRlci1sZWZ0LXdp
ZHRoOiAycHg7Ci0gICAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkOwotICAgIGJvdHRvbTogYXV0
bzsKLSAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKLX0KLQotLnJlc291cmNlcy1yZWQtZGl2aWRl
ciB7Ci0gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwgMC41KTsKLX0KLQotLnJlc291
cmNlcy1ibHVlLWRpdmlkZXIgewotICAgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAyNTUsIDAu
NSk7Ci19Ci0KLS5yZXNvdXJjZXMtb3JhbmdlLWRpdmlkZXIgewotICAgIGJvcmRlci1jb2xvcjog
cmdiYSgyNTUsIDE3OCwgMjMsIDAuNSk7Ci19Ci0KLS5yZXNvdXJjZXMtZGl2aWRlci5sYXN0IHsK
LSAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwotfQotCi0udGltZWxpbmUgLnJlc291cmNl
cy1ldmVudC1kaXZpZGVyLnRpbWVsaW5lLWZyYW1lLWRpdmlkZXIgewotICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYmEoMTgwLCAxODAsIDE4MCwgMC44KTsKLSAgICBib3JkZXItc3R5bGU6IG5vbmU7
Ci0gICAgd2lkdGg6IDFweDsKLSAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgcG9pbnRlci1ldmVudHM6
IG5vbmU7Ci19Ci0KLS5zaWRlYmFyLXRyZWUtaXRlbSAudGltZWxpbmUtZnJhbWUtb3ZlcnZpZXct
c3RhdHVzLWJhci1pdGVtIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDEw
cHg7Ci0gICAgdG9wOiA0cHg7Ci19Ci0KLS50aW1lbGluZS1mcmFtZS1jb250YWluZXIgewotICAg
IGhlaWdodDogMTlweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYigyMjAsIDIyMCwgMjIwKTsKLSAgICBvcGFjaXR5OiAwLjY7Ci0gICAgY29sb3I6IGJs
YWNrOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBwYWRkaW5nLXRvcDogM3B4OwotICAg
IHotaW5kZXg6IDM1MDsKLSAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKLX0KLQotLnRpbWVsaW5l
LWZyYW1lLXN0cmlwIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgaGVpZ2h0OiAxOXB4
OwotfQotCi0jdGltZWxpbmUtZ3JpZC1oZWFkZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICBsZWZ0OiAyMDBweDsKLSAgICByaWdodDogMDsKLSAgICB0b3A6IDkwcHg7Ci0gICAgYm90
dG9tOiAwOwotICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwotfQotCi0udGltZWxpbmUtY3B1LWJh
cnMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgaGVpZ2h0OiAx
OXB4OwotICAgIHotaW5kZXg6IDM1MDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBvdmVyZmxvdzog
aGlkZGVuOwotfQotCi0udGltZWxpbmUtY3B1LWJhcnMgLnRpbWVsaW5lLWdyYXBoLWJhciB7Ci0g
ICAgYm9yZGVyLWNvbG9yOiByZ2IoMTkyLCAxOTIsIDE5Mik7Ci0gICAgYmFja2dyb3VuZC1jb2xv
cjogcmdiYSgwLCAwLCAwLCAwLjEpOwotICAgIHRvcDogNHB4OwotICAgIGJvdHRvbTogNHB4Owot
ICAgIGhlaWdodDogYXV0bzsKLX0KLQotLnRpbWVsaW5lLWNwdS1jdXJ0YWluLWxlZnQsIC50aW1l
bGluZS1jcHUtY3VydGFpbi1yaWdodCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAw
LCAwLCAwLjE1KTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGhl
aWdodDogMTAwJTsKLX0KLQotLnRpbWVsaW5lLWNwdS1jdXJ0YWluLWxlZnQgewotICAgIGxlZnQ6
IDA7Ci19Ci0KLS50aW1lbGluZS1jcHUtY3VydGFpbi1yaWdodCB7Ci0gICAgcmlnaHQ6IDA7Ci19
Ci0KLS5pbWFnZS1wcmV2aWV3LWNvbnRhaW5lciB7Ci0gICAgYmFja2dyb3VuZDogdHJhbnNwYXJl
bnQ7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLSAgICBib3JkZXItc3BhY2luZzogMDsKLX0KLQot
LmltYWdlLXByZXZpZXctY29udGFpbmVyIGltZyB7Ci0gICAgbWF4LXdpZHRoOiAxMDBweDsKLSAg
ICBtYXgtaGVpZ2h0OiAxMDBweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL2No
ZWNrZXIucG5nKTsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwotICAgIC13ZWJraXQt
dXNlci1kcmFnOiBhdXRvOwotfQotCi0uaW1hZ2UtY29udGFpbmVyIHsKLSAgICBwYWRkaW5nOiAw
OwotfQotCi0ubWVtb3J5LWNhdGVnb3J5LXZhbHVlIHsKLSAgICBmbG9hdDogcmlnaHQ7Ci19Ci0K
LS5oaWdobGlnaHRlZC10aW1lbGluZS1yZWNvcmQgewotICAgIC13ZWJraXQtYW5pbWF0aW9uOiAi
dGltZWxpbmVfcmVjb3JkX2hpZ2hsaWdodCIgMnMgMHM7Ci19Ci0KLUAtd2Via2l0LWtleWZyYW1l
cyB0aW1lbGluZV9yZWNvcmRfaGlnaGxpZ2h0IHsKLSAgICBmcm9tIHtiYWNrZ3JvdW5kLWNvbG9y
OiByZ2JhKDI1NSwgMjU1LCAxMjAsIDEpOyB9Ci0gICAgdG8geyBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2JhKDI1NSwgMjU1LCAxMjAsIDApOyB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOWM5YmM1Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL3RyZWVvdXRsaW5lLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA2NyArMCwwIEBACi0gIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtFbGVtZW50fSBsaXN0Tm9kZQotICogQHBh
cmFtIHtib29sZWFuPX0gbm9uRm9jdXNhYmxlCi0gKi8KLWZ1bmN0aW9uIFRyZWVPdXRsaW5lKGxp
c3ROb2RlLCBub25Gb2N1c2FibGUpCi17Ci0gICAgLyoqCi0gICAgICogQHR5cGUge0FycmF5LjxU
cmVlRWxlbWVudD59Ci0gICAgICovCi0gICAgdGhpcy5jaGlsZHJlbiA9IFtdOwotICAgIHRoaXMu
c2VsZWN0ZWRUcmVlRWxlbWVudCA9IG51bGw7Ci0gICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSA9
IGxpc3ROb2RlOwotICAgIHRoaXMuY2hpbGRyZW5MaXN0RWxlbWVudCA9IHRoaXMuX2NoaWxkcmVu
TGlzdE5vZGU7Ci0gICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5yZW1vdmVDaGlsZHJlbigpOwot
ICAgIHRoaXMuZXhwYW5kVHJlZUVsZW1lbnRzV2hlbkFycm93aW5nID0gZmFsc2U7Ci0gICAgdGhp
cy5yb290ID0gdHJ1ZTsKLSAgICB0aGlzLmhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgdGhpcy5l
eHBhbmRlZCA9IHRydWU7Ci0gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlOwotICAgIHRoaXMudHJl
ZU91dGxpbmUgPSB0aGlzOwotICAgIHRoaXMuY29tcGFyYXRvciA9IG51bGw7Ci0gICAgdGhpcy5z
ZWFyY2hhYmxlID0gZmFsc2U7Ci0gICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQgPSBudWxsOwot
Ci0gICAgdGhpcy5zZXRGb2N1c2FibGUoIW5vbkZvY3VzYWJsZSk7Ci0gICAgdGhpcy5fY2hpbGRy
ZW5MaXN0Tm9kZS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fdHJlZUtleURvd24u
YmluZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5hZGRFdmVudExp
c3RlbmVyKCJrZXlwcmVzcyIsIHRoaXMuX3RyZWVLZXlQcmVzcy5iaW5kKHRoaXMpLCB0cnVlKTsK
LSAgICAKLSAgICB0aGlzLl90cmVlRWxlbWVudHNNYXAgPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5f
ZXhwYW5kZWRTdGF0ZU1hcCA9IG5ldyBNYXAoKTsKLX0KLQotVHJlZU91dGxpbmUucHJvdG90eXBl
LnNldEZvY3VzYWJsZSA9IGZ1bmN0aW9uKGZvY3VzYWJsZSkKLXsKLSAgICBpZiAoZm9jdXNhYmxl
KQotICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgi
LCAwKTsKLSAgICBlbHNlCi0gICAgICAgIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUucmVtb3ZlQXR0
cmlidXRlKCJ0YWJJbmRleCIpOwotfQotCi1UcmVlT3V0bGluZS5wcm90b3R5cGUuYXBwZW5kQ2hp
bGQgPSBmdW5jdGlvbihjaGlsZCkKLXsKLSAgICB2YXIgaW5zZXJ0aW9uSW5kZXg7Ci0gICAgaWYg
KHRoaXMudHJlZU91dGxpbmUuY29tcGFyYXRvcikKLSAgICAgICAgaW5zZXJ0aW9uSW5kZXggPSBp
bnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rpb24oY2hpbGQsIHRoaXMu
Y2hpbGRyZW4sIHRoaXMudHJlZU91dGxpbmUuY29tcGFyYXRvcik7Ci0gICAgZWxzZQotICAgICAg
ICBpbnNlcnRpb25JbmRleCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOwotICAgIHRoaXMuaW5zZXJ0
Q2hpbGQoY2hpbGQsIGluc2VydGlvbkluZGV4KTsKLX0KLQotVHJlZU91dGxpbmUucHJvdG90eXBl
Lmluc2VydENoaWxkID0gZnVuY3Rpb24oY2hpbGQsIGluZGV4KQotewotICAgIGlmICghY2hpbGQp
Ci0gICAgICAgIHRocm93KCJjaGlsZCBjYW4ndCBiZSB1bmRlZmluZWQgb3IgbnVsbCIpOwotCi0g
ICAgdmFyIHByZXZpb3VzQ2hpbGQgPSAoaW5kZXggPiAwID8gdGhpcy5jaGlsZHJlbltpbmRleCAt
IDFdIDogbnVsbCk7Ci0gICAgaWYgKHByZXZpb3VzQ2hpbGQpIHsKLSAgICAgICAgcHJldmlvdXND
aGlsZC5uZXh0U2libGluZyA9IGNoaWxkOwotICAgICAgICBjaGlsZC5wcmV2aW91c1NpYmxpbmcg
PSBwcmV2aW91c0NoaWxkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoaWxkLnByZXZpb3VzU2li
bGluZyA9IG51bGw7Ci0gICAgfQotCi0gICAgdmFyIG5leHRDaGlsZCA9IHRoaXMuY2hpbGRyZW5b
aW5kZXhdOwotICAgIGlmIChuZXh0Q2hpbGQpIHsKLSAgICAgICAgbmV4dENoaWxkLnByZXZpb3Vz
U2libGluZyA9IGNoaWxkOwotICAgICAgICBjaGlsZC5uZXh0U2libGluZyA9IG5leHRDaGlsZDsK
LSAgICB9IGVsc2UgewotICAgICAgICBjaGlsZC5uZXh0U2libGluZyA9IG51bGw7Ci0gICAgfQot
Ci0gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsKLSAgICB0aGlzLmhh
c0NoaWxkcmVuID0gdHJ1ZTsKLSAgICBjaGlsZC5wYXJlbnQgPSB0aGlzOwotICAgIGNoaWxkLnRy
ZWVPdXRsaW5lID0gdGhpcy50cmVlT3V0bGluZTsKLSAgICBjaGlsZC50cmVlT3V0bGluZS5fcmVt
ZW1iZXJUcmVlRWxlbWVudChjaGlsZCk7Ci0KLSAgICB2YXIgY3VycmVudCA9IGNoaWxkLmNoaWxk
cmVuWzBdOwotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGN1cnJlbnQudHJlZU91dGxp
bmUgPSB0aGlzLnRyZWVPdXRsaW5lOwotICAgICAgICBjdXJyZW50LnRyZWVPdXRsaW5lLl9yZW1l
bWJlclRyZWVFbGVtZW50KGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gY3VycmVudC50cmF2
ZXJzZU5leHRUcmVlRWxlbWVudChmYWxzZSwgY2hpbGQsIHRydWUpOwotICAgIH0KLQotICAgIGlm
IChjaGlsZC5oYXNDaGlsZHJlbiAmJiB0eXBlb2YoY2hpbGQudHJlZU91dGxpbmUuX2V4cGFuZGVk
U3RhdGVNYXAuZ2V0KGNoaWxkLnJlcHJlc2VudGVkT2JqZWN0KSkgIT09ICJ1bmRlZmluZWQiKQot
ICAgICAgICBjaGlsZC5leHBhbmRlZCA9IGNoaWxkLnRyZWVPdXRsaW5lLl9leHBhbmRlZFN0YXRl
TWFwLmdldChjaGlsZC5yZXByZXNlbnRlZE9iamVjdCk7Ci0KLSAgICBpZiAoIXRoaXMuX2NoaWxk
cmVuTGlzdE5vZGUpIHsKLSAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSA9IHRoaXMudHJl
ZU91dGxpbmUuX2NoaWxkcmVuTGlzdE5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJv
bCIpOwotICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlLnBhcmVudFRyZWVFbGVtZW50ID0g
dGhpczsKLSAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5jbGFzc0xpc3QuYWRkKCJjaGls
ZHJlbiIpOwotICAgICAgICBpZiAodGhpcy5oaWRkZW4pCi0gICAgICAgICAgICB0aGlzLl9jaGls
ZHJlbkxpc3ROb2RlLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwotICAgIH0KLQotICAgIGNoaWxk
Ll9hdHRhY2goKTsKLX0KLQotVHJlZU91dGxpbmUucHJvdG90eXBlLnJlbW92ZUNoaWxkQXRJbmRl
eCA9IGZ1bmN0aW9uKGNoaWxkSW5kZXgpCi17Ci0gICAgaWYgKGNoaWxkSW5kZXggPCAwIHx8IGNo
aWxkSW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpCi0gICAgICAgIHRocm93KCJjaGlsZElu
ZGV4IG91dCBvZiByYW5nZSIpOwotCi0gICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltjaGls
ZEluZGV4XTsKLSAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShjaGlsZEluZGV4LCAxKTsKLQotICAg
IHZhciBwYXJlbnQgPSBjaGlsZC5wYXJlbnQ7Ci0gICAgaWYgKGNoaWxkLmRlc2VsZWN0KCkpIHsK
LSAgICAgICAgaWYgKGNoaWxkLnByZXZpb3VzU2libGluZykKLSAgICAgICAgICAgIGNoaWxkLnBy
ZXZpb3VzU2libGluZy5zZWxlY3QoKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQubmV4dFNpYmxp
bmcpCi0gICAgICAgICAgICBjaGlsZC5uZXh0U2libGluZy5zZWxlY3QoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcGFyZW50LnNlbGVjdCgpOwotICAgIH0KLQotICAgIGlmIChjaGlsZC5w
cmV2aW91c1NpYmxpbmcpCi0gICAgICAgIGNoaWxkLnByZXZpb3VzU2libGluZy5uZXh0U2libGlu
ZyA9IGNoaWxkLm5leHRTaWJsaW5nOwotICAgIGlmIChjaGlsZC5uZXh0U2libGluZykKLSAgICAg
ICAgY2hpbGQubmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nID0gY2hpbGQucHJldmlvdXNTaWJs
aW5nOwotCi0gICAgaWYgKGNoaWxkLnRyZWVPdXRsaW5lKSB7Ci0gICAgICAgIGNoaWxkLnRyZWVP
dXRsaW5lLl9mb3JnZXRUcmVlRWxlbWVudChjaGlsZCk7Ci0gICAgICAgIGNoaWxkLnRyZWVPdXRs
aW5lLl9mb3JnZXRDaGlsZHJlblJlY3Vyc2l2ZShjaGlsZCk7Ci0gICAgfQotCi0gICAgY2hpbGQu
X2RldGFjaCgpOwotICAgIGNoaWxkLnRyZWVPdXRsaW5lID0gbnVsbDsKLSAgICBjaGlsZC5wYXJl
bnQgPSBudWxsOwotICAgIGNoaWxkLm5leHRTaWJsaW5nID0gbnVsbDsKLSAgICBjaGlsZC5wcmV2
aW91c1NpYmxpbmcgPSBudWxsOwotfQotCi1UcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hp
bGQgPSBmdW5jdGlvbihjaGlsZCkKLXsKLSAgICBpZiAoIWNoaWxkKQotICAgICAgICB0aHJvdygi
Y2hpbGQgY2FuJ3QgYmUgdW5kZWZpbmVkIG9yIG51bGwiKTsKLQotICAgIHZhciBjaGlsZEluZGV4
ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTsKLSAgICBpZiAoY2hpbGRJbmRleCA9PT0g
LTEpCi0gICAgICAgIHRocm93KCJjaGlsZCBub3QgZm91bmQgaW4gdGhpcyBub2RlJ3MgY2hpbGRy
ZW4iKTsKLQotICAgIHRoaXMucmVtb3ZlQ2hpbGRBdEluZGV4LmNhbGwodGhpcywgY2hpbGRJbmRl
eCk7Ci19Ci0KLVRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9u
KCkKLXsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTsKLSAgICAgICAgY2hpbGQu
ZGVzZWxlY3QoKTsKLQotICAgICAgICBpZiAoY2hpbGQudHJlZU91dGxpbmUpIHsKLSAgICAgICAg
ICAgIGNoaWxkLnRyZWVPdXRsaW5lLl9mb3JnZXRUcmVlRWxlbWVudChjaGlsZCk7Ci0gICAgICAg
ICAgICBjaGlsZC50cmVlT3V0bGluZS5fZm9yZ2V0Q2hpbGRyZW5SZWN1cnNpdmUoY2hpbGQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2hpbGQuX2RldGFjaCgpOwotICAgICAgICBjaGlsZC50cmVl
T3V0bGluZSA9IG51bGw7Ci0gICAgICAgIGNoaWxkLnBhcmVudCA9IG51bGw7Ci0gICAgICAgIGNo
aWxkLm5leHRTaWJsaW5nID0gbnVsbDsKLSAgICAgICAgY2hpbGQucHJldmlvdXNTaWJsaW5nID0g
bnVsbDsKLSAgICB9Ci0KLSAgICB0aGlzLmNoaWxkcmVuID0gW107Ci19Ci0KLVRyZWVPdXRsaW5l
LnByb3RvdHlwZS5fcmVtZW1iZXJUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpCi17Ci0g
ICAgaWYgKCF0aGlzLl90cmVlRWxlbWVudHNNYXAuZ2V0KGVsZW1lbnQucmVwcmVzZW50ZWRPYmpl
Y3QpKQotICAgICAgICB0aGlzLl90cmVlRWxlbWVudHNNYXAucHV0KGVsZW1lbnQucmVwcmVzZW50
ZWRPYmplY3QsIFtdKTsKLSAgICAgICAgCi0gICAgLy8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMg
YWxyZWFkeSBrbm93bgotICAgIHZhciBlbGVtZW50cyA9IHRoaXMuX3RyZWVFbGVtZW50c01hcC5n
ZXQoZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCk7Ci0gICAgaWYgKGVsZW1lbnRzLmluZGV4T2Yo
ZWxlbWVudCkgIT09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBhZGQgdGhlIGVsZW1l
bnQKLSAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpOwotfQotCi1UcmVlT3V0bGluZS5wcm90b3R5
cGUuX2ZvcmdldFRyZWVFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkKLXsKLSAgICBpZiAodGhp
cy5fdHJlZUVsZW1lbnRzTWFwLmdldChlbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0KSkgewotICAg
ICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLl90cmVlRWxlbWVudHNNYXAuZ2V0KGVsZW1lbnQucmVw
cmVzZW50ZWRPYmplY3QpOwotICAgICAgICBlbGVtZW50cy5yZW1vdmUoZWxlbWVudCwgdHJ1ZSk7
Ci0gICAgICAgIGlmICghZWxlbWVudHMubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fdHJlZUVs
ZW1lbnRzTWFwLnJlbW92ZShlbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0KTsKLSAgICB9Ci19Ci0K
LVRyZWVPdXRsaW5lLnByb3RvdHlwZS5fZm9yZ2V0Q2hpbGRyZW5SZWN1cnNpdmUgPSBmdW5jdGlv
bihwYXJlbnRFbGVtZW50KQotewotICAgIHZhciBjaGlsZCA9IHBhcmVudEVsZW1lbnQuY2hpbGRy
ZW5bMF07Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIHRoaXMuX2ZvcmdldFRyZWVFbGVt
ZW50KGNoaWxkKTsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC50cmF2ZXJzZU5leHRUcmVlRWxlbWVu
dChmYWxzZSwgcGFyZW50RWxlbWVudCwgdHJ1ZSk7Ci0gICAgfQotfQotCi1UcmVlT3V0bGluZS5w
cm90b3R5cGUuZ2V0Q2FjaGVkVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihyZXByZXNlbnRlZE9iamVj
dCkKLXsKLSAgICBpZiAoIXJlcHJlc2VudGVkT2JqZWN0KQotICAgICAgICByZXR1cm4gbnVsbDsK
LQotICAgIHZhciBlbGVtZW50cyA9IHRoaXMuX3RyZWVFbGVtZW50c01hcC5nZXQocmVwcmVzZW50
ZWRPYmplY3QpOwotICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGgpCi0gICAgICAg
IHJldHVybiBlbGVtZW50c1swXTsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotVHJlZU91dGxpbmUu
cHJvdG90eXBlLmZpbmRUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHJlcHJlc2VudGVkT2JqZWN0LCBp
c0FuY2VzdG9yLCBnZXRQYXJlbnQpCi17Ci0gICAgaWYgKCFyZXByZXNlbnRlZE9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICB2YXIgY2FjaGVkRWxlbWVudCA9IHRoaXMuZ2V0Q2Fj
aGVkVHJlZUVsZW1lbnQocmVwcmVzZW50ZWRPYmplY3QpOwotICAgIGlmIChjYWNoZWRFbGVtZW50
KQotICAgICAgICByZXR1cm4gY2FjaGVkRWxlbWVudDsKLQotICAgIC8vIFdhbGsgdXAgdGhlIHBh
cmVudCBwb2ludGVycyBmcm9tIHRoZSBkZXNpcmVkIHJlcHJlc2VudGVkT2JqZWN0IAotICAgIHZh
ciBhbmNlc3RvcnMgPSBbXTsKLSAgICBmb3IgKHZhciBjdXJyZW50T2JqZWN0ID0gZ2V0UGFyZW50
KHJlcHJlc2VudGVkT2JqZWN0KTsgY3VycmVudE9iamVjdDsgIGN1cnJlbnRPYmplY3QgPSBnZXRQ
YXJlbnQoY3VycmVudE9iamVjdCkpIHsKLSAgICAgICAgYW5jZXN0b3JzLnB1c2goY3VycmVudE9i
amVjdCk7Ci0gICAgICAgIGlmICh0aGlzLmdldENhY2hlZFRyZWVFbGVtZW50KGN1cnJlbnRPYmpl
Y3QpKSAgLy8gc3RvcCBjbGltYmluZyBhcyBzb29uIGFzIHdlIGhpdAotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoIWN1cnJlbnRPYmplY3QpCi0gICAgICAgIHJl
dHVybiBudWxsOwotCi0gICAgLy8gV2FsayBkb3duIHRvIHBvcHVsYXRlIGVhY2ggYW5jZXN0b3In
cyBjaGlsZHJlbiwgdG8gZmlsbCBpbiB0aGUgdHJlZSBhbmQgdGhlIGNhY2hlLgotICAgIGZvciAo
dmFyIGkgPSBhbmNlc3RvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgdmFy
IHRyZWVFbGVtZW50ID0gdGhpcy5nZXRDYWNoZWRUcmVlRWxlbWVudChhbmNlc3RvcnNbaV0pOwot
ICAgICAgICBpZiAodHJlZUVsZW1lbnQpCi0gICAgICAgICAgICB0cmVlRWxlbWVudC5vbnBvcHVs
YXRlKCk7ICAvLyBmaWxsIHRoZSBjYWNoZSB3aXRoIHRoZSBjaGlsZHJlbiBvZiB0cmVlRWxlbWVu
dAotICAgIH0KLQotICAgIHJldHVybiB0aGlzLmdldENhY2hlZFRyZWVFbGVtZW50KHJlcHJlc2Vu
dGVkT2JqZWN0KTsKLX0KLQotVHJlZU91dGxpbmUucHJvdG90eXBlLnRyZWVFbGVtZW50RnJvbVBv
aW50ID0gZnVuY3Rpb24oeCwgeSkKLXsKLSAgICB2YXIgbm9kZSA9IHRoaXMuX2NoaWxkcmVuTGlz
dE5vZGUub3duZXJEb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpOwotICAgIGlmICghbm9k
ZSkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICB2YXIgbGlzdE5vZGUgPSBub2RlLmVuY2xv
c2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWVJbkFycmF5KFsib2wiLCAibGkiXSk7Ci0gICAgaWYg
KGxpc3ROb2RlKQotICAgICAgICByZXR1cm4gbGlzdE5vZGUucGFyZW50VHJlZUVsZW1lbnQgfHwg
bGlzdE5vZGUudHJlZUVsZW1lbnQ7Ci0gICAgcmV0dXJuIG51bGw7Ci19Ci0KLVRyZWVPdXRsaW5l
LnByb3RvdHlwZS5fdHJlZUtleVByZXNzID0gZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAgaWYgKCF0
aGlzLnNlYXJjaGFibGUgfHwgV2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQodGhpcy5fY2hpbGRy
ZW5MaXN0Tm9kZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB2YXIgc2VhcmNoVGV4dCA9
IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpOwotICAgIC8vIElnbm9yZSB3aGl0
ZXNwYWNlLgotICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSAhPT0gc2VhcmNoVGV4dCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdGhpcy5fc3RhcnRTZWFyY2goc2VhcmNoVGV4dCk7Ci0gICAgZXZl
bnQuY29uc3VtZSh0cnVlKTsKLX0KLQotVHJlZU91dGxpbmUucHJvdG90eXBlLl90cmVlS2V5RG93
biA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuX2No
aWxkcmVuTGlzdE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdGhpcy5zZWxlY3Rl
ZFRyZWVFbGVtZW50IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQu
Y3RybEtleSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmFyIGhhbmRsZWQgPSBmYWxzZTsKLSAg
ICB2YXIgbmV4dFNlbGVjdGVkRWxlbWVudDsKLSAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9
PT0gIlVwIiAmJiAhZXZlbnQuYWx0S2V5KSB7Ci0gICAgICAgIG5leHRTZWxlY3RlZEVsZW1lbnQg
PSB0aGlzLnNlbGVjdGVkVHJlZUVsZW1lbnQudHJhdmVyc2VQcmV2aW91c1RyZWVFbGVtZW50KHRy
dWUpOwotICAgICAgICB3aGlsZSAobmV4dFNlbGVjdGVkRWxlbWVudCAmJiAhbmV4dFNlbGVjdGVk
RWxlbWVudC5zZWxlY3RhYmxlKQotICAgICAgICAgICAgbmV4dFNlbGVjdGVkRWxlbWVudCA9IG5l
eHRTZWxlY3RlZEVsZW1lbnQudHJhdmVyc2VQcmV2aW91c1RyZWVFbGVtZW50KCF0aGlzLmV4cGFu
ZFRyZWVFbGVtZW50c1doZW5BcnJvd2luZyk7Ci0gICAgICAgIGhhbmRsZWQgPSBuZXh0U2VsZWN0
ZWRFbGVtZW50ID8gdHJ1ZSA6IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRp
ZmllciA9PT0gIkRvd24iICYmICFldmVudC5hbHRLZXkpIHsKLSAgICAgICAgbmV4dFNlbGVjdGVk
RWxlbWVudCA9IHRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVu
dCh0cnVlKTsKLSAgICAgICAgd2hpbGUgKG5leHRTZWxlY3RlZEVsZW1lbnQgJiYgIW5leHRTZWxl
Y3RlZEVsZW1lbnQuc2VsZWN0YWJsZSkKLSAgICAgICAgICAgIG5leHRTZWxlY3RlZEVsZW1lbnQg
PSBuZXh0U2VsZWN0ZWRFbGVtZW50LnRyYXZlcnNlTmV4dFRyZWVFbGVtZW50KCF0aGlzLmV4cGFu
ZFRyZWVFbGVtZW50c1doZW5BcnJvd2luZyk7Ci0gICAgICAgIGhhbmRsZWQgPSBuZXh0U2VsZWN0
ZWRFbGVtZW50ID8gdHJ1ZSA6IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRp
ZmllciA9PT0gIkxlZnQiKSB7Ci0gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVHJlZUVsZW1lbnQu
ZXhwYW5kZWQpIHsKLSAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpCi0gICAgICAgICAgICAg
ICAgdGhpcy5zZWxlY3RlZFRyZWVFbGVtZW50LmNvbGxhcHNlUmVjdXJzaXZlbHkoKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJlZUVsZW1lbnQuY29s
bGFwc2UoKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYg
KHRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVudC5wYXJlbnQgJiYgIXRoaXMuc2VsZWN0ZWRUcmVlRWxl
bWVudC5wYXJlbnQucm9vdCkgewotICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5zZWxlY3RlZFRyZWVFbGVtZW50LnBhcmVudC5zZWxlY3RhYmxlKSB7Ci0g
ICAgICAgICAgICAgICAgbmV4dFNlbGVjdGVkRWxlbWVudCA9IHRoaXMuc2VsZWN0ZWRUcmVlRWxl
bWVudC5wYXJlbnQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG5leHRTZWxlY3RlZEVsZW1lbnQg
JiYgIW5leHRTZWxlY3RlZEVsZW1lbnQuc2VsZWN0YWJsZSkKLSAgICAgICAgICAgICAgICAgICAg
bmV4dFNlbGVjdGVkRWxlbWVudCA9IG5leHRTZWxlY3RlZEVsZW1lbnQucGFyZW50OwotICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSBuZXh0U2VsZWN0ZWRFbGVtZW50ID8gdHJ1ZSA6IGZhbHNlOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVHJlZUVsZW1lbnQucGFyZW50KQot
ICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVudC5wYXJlbnQuY29sbGFwc2Uo
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlJp
Z2h0IikgewotICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVudC5yZXZlYWxlZCgp
KSB7Ci0gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJlZUVsZW1lbnQucmV2ZWFsKCk7Ci0gICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVk
VHJlZUVsZW1lbnQuaGFzQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVudC5leHBhbmRlZCkgewotICAg
ICAgICAgICAgICAgIG5leHRTZWxlY3RlZEVsZW1lbnQgPSB0aGlzLnNlbGVjdGVkVHJlZUVsZW1l
bnQuY2hpbGRyZW5bMF07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG5leHRTZWxlY3RlZEVsZW1l
bnQgJiYgIW5leHRTZWxlY3RlZEVsZW1lbnQuc2VsZWN0YWJsZSkKLSAgICAgICAgICAgICAgICAg
ICAgbmV4dFNlbGVjdGVkRWxlbWVudCA9IG5leHRTZWxlY3RlZEVsZW1lbnQubmV4dFNpYmxpbmc7
Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IG5leHRTZWxlY3RlZEVsZW1lbnQgPyB0cnVlIDog
ZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChldmVudC5h
bHRLZXkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVudC5leHBh
bmRSZWN1cnNpdmVseSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZWxlY3RlZFRyZWVFbGVtZW50LmV4cGFuZCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSA4IC8qIEJhY2tzcGFjZSAq
LyB8fCBldmVudC5rZXlDb2RlID09PSA0NiAvKiBEZWxldGUgKi8pCi0gICAgICAgIGhhbmRsZWQg
PSB0aGlzLnNlbGVjdGVkVHJlZUVsZW1lbnQub25kZWxldGUoKTsKLSAgICBlbHNlIGlmIChpc0Vu
dGVyS2V5KGV2ZW50KSkKLSAgICAgICAgaGFuZGxlZCA9IHRoaXMuc2VsZWN0ZWRUcmVlRWxlbWVu
dC5vbmVudGVyKCk7Ci0gICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuS2V5cy5TcGFjZS5jb2RlKQotICAgICAgICBoYW5kbGVkID0gdGhp
cy5zZWxlY3RlZFRyZWVFbGVtZW50Lm9uc3BhY2UoKTsKLQotICAgIGlmIChuZXh0U2VsZWN0ZWRF
bGVtZW50KSB7Ci0gICAgICAgIG5leHRTZWxlY3RlZEVsZW1lbnQucmV2ZWFsKCk7Ci0gICAgICAg
IG5leHRTZWxlY3RlZEVsZW1lbnQuc2VsZWN0KGZhbHNlLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBp
ZiAoaGFuZGxlZCkKLSAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLX0KLQotVHJlZU91dGxp
bmUucHJvdG90eXBlLmV4cGFuZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICAvLyB0aGlzIGlzIHRoZSBy
b290LCBkbyBub3RoaW5nCi19Ci0KLVRyZWVPdXRsaW5lLnByb3RvdHlwZS5jb2xsYXBzZSA9IGZ1
bmN0aW9uKCkKLXsKLSAgICAvLyB0aGlzIGlzIHRoZSByb290LCBkbyBub3RoaW5nCi19Ci0KLVRy
ZWVPdXRsaW5lLnByb3RvdHlwZS5yZXZlYWxlZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotVHJlZU91dGxpbmUucHJvdG90eXBlLnJldmVhbCA9IGZ1bmN0aW9uKCkKLXsK
LSAgICAvLyB0aGlzIGlzIHRoZSByb290LCBkbyBub3RoaW5nCi19Ci0KLVRyZWVPdXRsaW5lLnBy
b3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbigpCi17Ci0gICAgLy8gdGhpcyBpcyB0aGUgcm9vdCwg
ZG8gbm90aGluZwotfQotCi0vKioKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IG9taXRGb2N1cwotICov
Ci1UcmVlT3V0bGluZS5wcm90b3R5cGUucmV2ZWFsQW5kU2VsZWN0ID0gZnVuY3Rpb24ob21pdEZv
Y3VzKQotewotICAgIC8vIHRoaXMgaXMgdGhlIHJvb3QsIGRvIG5vdGhpbmcKLX0KLQotLyoqCi0g
KiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dAotICovCi1UcmVlT3V0bGluZS5wcm90b3R5cGUu
X3N0YXJ0U2VhcmNoID0gZnVuY3Rpb24oc2VhcmNoVGV4dCkKLXsKLSAgICBpZiAoIXRoaXMuc2Vh
cmNoSW5wdXRFbGVtZW50IHx8ICF0aGlzLnNlYXJjaGFibGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICB0aGlzLl9zZWFyY2hpbmcgPSB0cnVlOwotCi0gICAgaWYgKHRoaXMuc2VhcmNoU3Rh
cnRlZCkKLSAgICAgICAgdGhpcy5zZWFyY2hTdGFydGVkKCk7Ci0gICAgCi0gICAgdGhpcy5zZWFy
Y2hJbnB1dEVsZW1lbnQudmFsdWUgPSBzZWFyY2hUZXh0OwotICAgIAotICAgIGZ1bmN0aW9uIGZv
Y3VzU2VhcmNoSW5wdXQoKQotICAgIHsKLSAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQu
Zm9jdXMoKTsKLSAgICB9Ci0gICAgd2luZG93LnNldFRpbWVvdXQoZm9jdXNTZWFyY2hJbnB1dC5i
aW5kKHRoaXMpLCAwKTsKLSAgICB0aGlzLl9zZWFyY2hUZXh0Q2hhbmdlZCgpOwotICAgIHRoaXMu
X2JvdW5kU2VhcmNoVGV4dENoYW5nZWQgPSB0aGlzLl9zZWFyY2hUZXh0Q2hhbmdlZC5iaW5kKHRo
aXMpOwotICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBhc3Rl
IiwgdGhpcy5fYm91bmRTZWFyY2hUZXh0Q2hhbmdlZCk7Ci0gICAgdGhpcy5zZWFyY2hJbnB1dEVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhpcy5fYm91bmRTZWFyY2hUZXh0Q2hhbmdl
ZCk7Ci0gICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJl
c3MiLCB0aGlzLl9ib3VuZFNlYXJjaFRleHRDaGFuZ2VkKTsKLSAgICB0aGlzLl9ib3VuZFNlYXJj
aElucHV0S2V5RG93biA9IHRoaXMuX3NlYXJjaElucHV0S2V5RG93bi5iaW5kKHRoaXMpOwotICAg
IHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlz
Ll9ib3VuZFNlYXJjaElucHV0S2V5RG93bik7Ci0gICAgdGhpcy5fYm91bmRTZWFyY2hJbnB1dEJs
dXIgPSB0aGlzLl9zZWFyY2hJbnB1dEJsdXIuYmluZCh0aGlzKTsKLSAgICB0aGlzLnNlYXJjaElu
cHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgdGhpcy5fYm91bmRTZWFyY2hJbnB1
dEJsdXIpOwotfQotCi1UcmVlT3V0bGluZS5wcm90b3R5cGUuX3NlYXJjaFRleHRDaGFuZ2VkID0g
ZnVuY3Rpb24oKQotewotICAgIGZ1bmN0aW9uIHVwZGF0ZVNlYXJjaCgpCi0gICAgewotICAgICAg
ICB2YXIgbmV4dFNlbGVjdGVkRWxlbWVudCA9IHRoaXMuX25leHRTZWFyY2hNYXRjaCh0aGlzLnNl
YXJjaElucHV0RWxlbWVudC52YWx1ZSwgdGhpcy5zZWxlY3RlZFRyZWVFbGVtZW50LCBmYWxzZSk7
Ci0gICAgICAgIGlmICghbmV4dFNlbGVjdGVkRWxlbWVudCkKLSAgICAgICAgICAgIG5leHRTZWxl
Y3RlZEVsZW1lbnQgPSB0aGlzLl9uZXh0U2VhcmNoTWF0Y2godGhpcy5zZWFyY2hJbnB1dEVsZW1l
bnQudmFsdWUsIHRoaXMuY2hpbGRyZW5bMF0sIGZhbHNlKTsKLSAgICAgICAgdGhpcy5fc2hvd1Nl
YXJjaE1hdGNoRWxlbWVudChuZXh0U2VsZWN0ZWRFbGVtZW50KTsKLSAgICB9Ci0gICAgCi0gICAg
d2luZG93LnNldFRpbWVvdXQodXBkYXRlU2VhcmNoLmJpbmQodGhpcyksIDApOwotfQotCi1UcmVl
T3V0bGluZS5wcm90b3R5cGUuX3Nob3dTZWFyY2hNYXRjaEVsZW1lbnQgPSBmdW5jdGlvbih0cmVl
RWxlbWVudCkKLXsKLSAgICB0aGlzLl9jdXJyZW50U2VhcmNoTWF0Y2hFbGVtZW50ID0gdHJlZUVs
ZW1lbnQ7Ci0gICAgaWYgKHRyZWVFbGVtZW50KSB7Ci0gICAgICAgIHRoaXMuX2NoaWxkcmVuTGlz
dE5vZGUuY2xhc3NMaXN0LmFkZCgic2VhcmNoLW1hdGNoLWZvdW5kIik7Ci0gICAgICAgIHRoaXMu
X2NoaWxkcmVuTGlzdE5vZGUuY2xhc3NMaXN0LnJlbW92ZSgic2VhcmNoLW1hdGNoLW5vdC1mb3Vu
ZCIpOwotICAgICAgICB0cmVlRWxlbWVudC5yZXZlYWxBbmRTZWxlY3QodHJ1ZSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJz
ZWFyY2gtbWF0Y2gtZm91bmQiKTsKLSAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5jbGFz
c0xpc3QuYWRkKCJzZWFyY2gtbWF0Y2gtbm90LWZvdW5kIik7Ci0gICAgfQotfQotCi1UcmVlT3V0
bGluZS5wcm90b3R5cGUuX3NlYXJjaElucHV0S2V5RG93biA9IGZ1bmN0aW9uKGV2ZW50KQotewot
ICAgIGlmIChldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkg
fHwgZXZlbnQuYWx0S2V5KQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgaGFuZGxlZCA9IGZh
bHNlOwotICAgIHZhciBuZXh0U2VsZWN0ZWRFbGVtZW50OwotICAgIGlmIChldmVudC5rZXlJZGVu
dGlmaWVyID09PSAiRG93biIpIHsKLSAgICAgICAgbmV4dFNlbGVjdGVkRWxlbWVudCA9IHRoaXMu
X25leHRTZWFyY2hNYXRjaCh0aGlzLnNlYXJjaElucHV0RWxlbWVudC52YWx1ZSwgdGhpcy5zZWxl
Y3RlZFRyZWVFbGVtZW50LCB0cnVlKTsKLSAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgfSBl
bHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVXAiKSB7Ci0gICAgICAgIG5leHRTZWxl
Y3RlZEVsZW1lbnQgPSB0aGlzLl9wcmV2aW91c1NlYXJjaE1hdGNoKHRoaXMuc2VhcmNoSW5wdXRF
bGVtZW50LnZhbHVlLCB0aGlzLnNlbGVjdGVkVHJlZUVsZW1lbnQpOwotICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3IC8qIEVzYyAqLykg
ewotICAgICAgICB0aGlzLl9zZWFyY2hGaW5pc2hlZCgpOwotICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKLSAgICB9IGVsc2UgaWYgKGlzRW50ZXJLZXkoZXZlbnQpKSB7Ci0gICAgICAgIHZhciBsYXN0
U2VhcmNoTWF0Y2hFbGVtZW50ID0gdGhpcy5fY3VycmVudFNlYXJjaE1hdGNoRWxlbWVudDsKLSAg
ICAgICAgdGhpcy5fc2VhcmNoRmluaXNoZWQoKTsKLSAgICAgICAgbGFzdFNlYXJjaE1hdGNoRWxl
bWVudC5vbmVudGVyKCk7Ci0gICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlm
IChuZXh0U2VsZWN0ZWRFbGVtZW50KQotICAgICAgICB0aGlzLl9zaG93U2VhcmNoTWF0Y2hFbGVt
ZW50KG5leHRTZWxlY3RlZEVsZW1lbnQpOwotICAgICAgICAKLSAgICBpZiAoaGFuZGxlZCkKLSAg
ICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKLSAgICBlbHNlCi0gICAgICAgd2luZG93LnNldFRp
bWVvdXQodGhpcy5fYm91bmRTZWFyY2hUZXh0Q2hhbmdlZCwgMCk7IAotfQotCi0vKioKLSAqIEBw
YXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0Ci0gKiBAcGFyYW0ge1RyZWVFbGVtZW50fSBzdGFydFRy
ZWVFbGVtZW50Ci0gKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBTdGFydFRyZWVFbGVtZW50Ci0gKi8K
LVRyZWVPdXRsaW5lLnByb3RvdHlwZS5fbmV4dFNlYXJjaE1hdGNoID0gZnVuY3Rpb24oc2VhcmNo
VGV4dCwgc3RhcnRUcmVlRWxlbWVudCwgc2tpcFN0YXJ0VHJlZUVsZW1lbnQpCi17Ci0gICAgdmFy
IGN1cnJlbnRUcmVlRWxlbWVudCA9IHN0YXJ0VHJlZUVsZW1lbnQ7Ci0gICAgdmFyIHNraXBDdXJy
ZW50VHJlZUVsZW1lbnQgPSBza2lwU3RhcnRUcmVlRWxlbWVudDsKLSAgICB3aGlsZSAoY3VycmVu
dFRyZWVFbGVtZW50ICYmIChza2lwQ3VycmVudFRyZWVFbGVtZW50IHx8ICFjdXJyZW50VHJlZUVs
ZW1lbnQubWF0Y2hlc1NlYXJjaFRleHQgfHwgIWN1cnJlbnRUcmVlRWxlbWVudC5tYXRjaGVzU2Vh
cmNoVGV4dChzZWFyY2hUZXh0KSkpIHsKLSAgICAgICAgY3VycmVudFRyZWVFbGVtZW50ID0gY3Vy
cmVudFRyZWVFbGVtZW50LnRyYXZlcnNlTmV4dFRyZWVFbGVtZW50KHRydWUsIG51bGwsIHRydWUp
OwotICAgICAgICBza2lwQ3VycmVudFRyZWVFbGVtZW50ID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGN1cnJlbnRUcmVlRWxlbWVudDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30g
c2VhcmNoVGV4dAotICogQHBhcmFtIHtUcmVlRWxlbWVudD19IHN0YXJ0VHJlZUVsZW1lbnQKLSAq
LwotVHJlZU91dGxpbmUucHJvdG90eXBlLl9wcmV2aW91c1NlYXJjaE1hdGNoID0gZnVuY3Rpb24o
c2VhcmNoVGV4dCwgc3RhcnRUcmVlRWxlbWVudCkKLXsKLSAgICB2YXIgY3VycmVudFRyZWVFbGVt
ZW50ID0gc3RhcnRUcmVlRWxlbWVudDsKLSAgICB2YXIgc2tpcEN1cnJlbnRUcmVlRWxlbWVudCA9
IHRydWU7Ci0gICAgd2hpbGUgKGN1cnJlbnRUcmVlRWxlbWVudCAmJiAoc2tpcEN1cnJlbnRUcmVl
RWxlbWVudCB8fCAhY3VycmVudFRyZWVFbGVtZW50Lm1hdGNoZXNTZWFyY2hUZXh0IHx8ICFjdXJy
ZW50VHJlZUVsZW1lbnQubWF0Y2hlc1NlYXJjaFRleHQoc2VhcmNoVGV4dCkpKSB7Ci0gICAgICAg
IGN1cnJlbnRUcmVlRWxlbWVudCA9IGN1cnJlbnRUcmVlRWxlbWVudC50cmF2ZXJzZVByZXZpb3Vz
VHJlZUVsZW1lbnQodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIHNraXBDdXJyZW50VHJlZUVsZW1lbnQg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3VycmVudFRyZWVFbGVtZW50OwotfQotCi1U
cmVlT3V0bGluZS5wcm90b3R5cGUuX3NlYXJjaElucHV0Qmx1ciA9IGZ1bmN0aW9uKGV2ZW50KQot
ewotICAgIHRoaXMuX3NlYXJjaEZpbmlzaGVkKCk7Ci19Ci0KLVRyZWVPdXRsaW5lLnByb3RvdHlw
ZS5fc2VhcmNoRmluaXNoZWQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKCF0aGlzLl9zZWFyY2hp
bmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBkZWxldGUgdGhpcy5fc2VhcmNoaW5nOwot
ICAgIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUuY2xhc3NMaXN0LnJlbW92ZSgic2VhcmNoLW1hdGNo
LWZvdW5kIik7Ci0gICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJz
ZWFyY2gtbWF0Y2gtbm90LWZvdW5kIik7Ci0gICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRTZWFyY2hN
YXRjaEVsZW1lbnQ7Ci0KLSAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC52YWx1ZSA9ICIiOwot
ICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhc3RlIiwg
dGhpcy5fYm91bmRTZWFyY2hUZXh0Q2hhbmdlZCk7Ci0gICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1l
bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhpcy5fYm91bmRTZWFyY2hUZXh0Q2hhbmdl
ZCk7Ci0gICAgZGVsZXRlIHRoaXMuX2JvdW5kU2VhcmNoVGV4dENoYW5nZWQ7Ci0KLSAgICB0aGlz
LnNlYXJjaElucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5f
Ym91bmRTZWFyY2hJbnB1dEtleURvd24pOwotICAgIGRlbGV0ZSB0aGlzLl9ib3VuZFNlYXJjaElu
cHV0S2V5RG93bjsKLSAgICAKLSAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5yZW1vdmVFdmVu
dExpc3RlbmVyKCJibHVyIiwgdGhpcy5fYm91bmRTZWFyY2hJbnB1dEJsdXIpOwotICAgIGRlbGV0
ZSB0aGlzLl9ib3VuZFNlYXJjaElucHV0Qmx1cjsKLSAgICAKLSAgICBpZiAodGhpcy5zZWFyY2hG
aW5pc2hlZCkKLSAgICAgICAgdGhpcy5zZWFyY2hGaW5pc2hlZCgpOwotICAgIAotICAgIHRoaXMu
dHJlZU91dGxpbmUuX2NoaWxkcmVuTGlzdE5vZGUuZm9jdXMoKTsKLX0KLQotVHJlZU91dGxpbmUu
cHJvdG90eXBlLnN0b3BTZWFyY2ggPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fc2VhcmNoRmlu
aXNoZWQoKTsKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7T2JqZWN0PX0g
cmVwcmVzZW50ZWRPYmplY3QKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IGhhc0NoaWxkcmVuCi0gKi8K
LWZ1bmN0aW9uIFRyZWVFbGVtZW50KHRpdGxlLCByZXByZXNlbnRlZE9iamVjdCwgaGFzQ2hpbGRy
ZW4pCi17Ci0gICAgdGhpcy5fdGl0bGUgPSB0aXRsZTsKLSAgICB0aGlzLnJlcHJlc2VudGVkT2Jq
ZWN0ID0gKHJlcHJlc2VudGVkT2JqZWN0IHx8IHt9KTsKLQotICAgIHRoaXMuX2hpZGRlbiA9IGZh
bHNlOwotICAgIHRoaXMuX3NlbGVjdGFibGUgPSB0cnVlOwotICAgIHRoaXMuZXhwYW5kZWQgPSBm
YWxzZTsKLSAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNDaGlsZHJlbiA9
IGhhc0NoaWxkcmVuOwotICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKLSAgICB0aGlzLnRyZWVPdXRs
aW5lID0gbnVsbDsKLSAgICB0aGlzLnBhcmVudCA9IG51bGw7Ci0gICAgdGhpcy5wcmV2aW91c1Np
YmxpbmcgPSBudWxsOwotICAgIHRoaXMubmV4dFNpYmxpbmcgPSBudWxsOwotICAgIHRoaXMuX2xp
c3RJdGVtTm9kZSA9IG51bGw7Ci19Ci0KLVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBh
cnJvd1RvZ2dsZVdpZHRoOiAxMCwKLQotICAgIGdldCBzZWxlY3RhYmxlKCkgewotICAgICAgICBp
ZiAodGhpcy5faGlkZGVuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1
cm4gdGhpcy5fc2VsZWN0YWJsZTsKLSAgICB9LAotCi0gICAgc2V0IHNlbGVjdGFibGUoeCkgewot
ICAgICAgICB0aGlzLl9zZWxlY3RhYmxlID0geDsKLSAgICB9LAotCi0gICAgZ2V0IGxpc3RJdGVt
RWxlbWVudCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2xpc3RJdGVtTm9kZTsKLSAgICB9LAot
Ci0gICAgZ2V0IGNoaWxkcmVuTGlzdEVsZW1lbnQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9j
aGlsZHJlbkxpc3ROb2RlOwotICAgIH0sCi0KLSAgICBnZXQgdGl0bGUoKSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl90aXRsZTsKLSAgICB9LAotCi0gICAgc2V0IHRpdGxlKHgpIHsKLSAgICAgICAg
dGhpcy5fdGl0bGUgPSB4OwotICAgICAgICB0aGlzLl9zZXRMaXN0SXRlbU5vZGVDb250ZW50KCk7
Ci0gICAgfSwKLQotICAgIGdldCB0b29sdGlwKCkgewotICAgICAgICByZXR1cm4gdGhpcy5fdG9v
bHRpcDsKLSAgICB9LAotCi0gICAgc2V0IHRvb2x0aXAoeCkgewotICAgICAgICB0aGlzLl90b29s
dGlwID0geDsKLSAgICAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSkKLSAgICAgICAgICAgIHRo
aXMuX2xpc3RJdGVtTm9kZS50aXRsZSA9IHggPyB4IDogIiI7Ci0gICAgfSwKLQotICAgIGdldCBo
YXNDaGlsZHJlbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0NoaWxkcmVuOwotICAgIH0s
Ci0KLSAgICBzZXQgaGFzQ2hpbGRyZW4oeCkgewotICAgICAgICBpZiAodGhpcy5faGFzQ2hpbGRy
ZW4gPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGFzQ2hpbGRy
ZW4gPSB4OwotCi0gICAgICAgIGlmICghdGhpcy5fbGlzdEl0ZW1Ob2RlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmICh4KQotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2Rl
LmNsYXNzTGlzdC5hZGQoInBhcmVudCIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRo
aXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJwYXJlbnQiKTsKLSAgICAgICAgICAg
IHRoaXMuY29sbGFwc2UoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBnZXQgaGlkZGVuKCkg
ewotICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuOwotICAgIH0sCi0KLSAgICBzZXQgaGlkZGVu
KHgpIHsKLSAgICAgICAgaWYgKHRoaXMuX2hpZGRlbiA9PT0geCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB0aGlzLl9oaWRkZW4gPSB4OwotCi0gICAgICAgIGlmICh4KSB7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5fbGlzdEl0ZW1Ob2RlKQotICAgICAgICAgICAgICAgIHRoaXMuX2xp
c3RJdGVtTm9kZS5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsKLSAgICAgICAgICAgIGlmICh0aGlz
Ll9jaGlsZHJlbkxpc3ROb2RlKQotICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuTGlzdE5v
ZGUuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5fbGlzdEl0ZW1Ob2RlKQotICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVt
Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9j
aGlsZHJlbkxpc3ROb2RlKQotICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUu
Y2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0
IHNob3VsZFJlZnJlc2hDaGlsZHJlbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3VsZFJl
ZnJlc2hDaGlsZHJlbjsKLSAgICB9LAotCi0gICAgc2V0IHNob3VsZFJlZnJlc2hDaGlsZHJlbih4
KSB7Ci0gICAgICAgIHRoaXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbiA9IHg7Ci0gICAgICAgIGlm
ICh4ICYmIHRoaXMuZXhwYW5kZWQpCi0gICAgICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgIH0s
Ci0KLSAgICBfc2V0TGlzdEl0ZW1Ob2RlQ29udGVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl9saXN0SXRlbU5vZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaWYgKHR5cGVvZiB0aGlzLl90aXRsZSA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0aGlz
Ll9saXN0SXRlbU5vZGUudGV4dENvbnRlbnQgPSB0aGlzLl90aXRsZTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgIGlmICh0aGlzLl90aXRsZSkKLSAgICAgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5v
ZGUuYXBwZW5kQ2hpbGQodGhpcy5fdGl0bGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1UcmVl
RWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBUcmVlT3V0bGluZS5wcm90b3R5cGUuYXBw
ZW5kQ2hpbGQ7Ci1UcmVlRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQgPSBUcmVlT3V0bGlu
ZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQ7Ci1UcmVlRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hp
bGQgPSBUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7Ci1UcmVlRWxlbWVudC5wcm90
b3R5cGUucmVtb3ZlQ2hpbGRBdEluZGV4ID0gVHJlZU91dGxpbmUucHJvdG90eXBlLnJlbW92ZUNo
aWxkQXRJbmRleDsKLVRyZWVFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IFRyZWVP
dXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbjsKLQotVHJlZUVsZW1lbnQucHJvdG90eXBl
Ll9hdHRhY2ggPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKCF0aGlzLl9saXN0SXRlbU5vZGUgfHwg
dGhpcy5wYXJlbnQuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbikgewotICAgICAgICBpZiAodGhpcy5f
bGlzdEl0ZW1Ob2RlICYmIHRoaXMuX2xpc3RJdGVtTm9kZS5wYXJlbnROb2RlKQotICAgICAgICAg
ICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbGlzdEl0
ZW1Ob2RlKTsKLQotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUgPSB0aGlzLnRyZWVPdXRsaW5l
Ll9jaGlsZHJlbkxpc3ROb2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKLSAg
ICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLnRyZWVFbGVtZW50ID0gdGhpczsKLSAgICAgICAgdGhp
cy5fc2V0TGlzdEl0ZW1Ob2RlQ29udGVudCgpOwotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUu
dGl0bGUgPSB0aGlzLl90b29sdGlwID8gdGhpcy5fdG9vbHRpcCA6ICIiOwotCi0gICAgICAgIGlm
ICh0aGlzLmhpZGRlbikKLSAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3Qu
YWRkKCJoaWRkZW4iKTsKLSAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGRyZW4pCi0gICAgICAgICAg
ICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LmFkZCgicGFyZW50Iik7Ci0gICAgICAgIGlm
ICh0aGlzLmV4cGFuZGVkKQotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlz
dC5hZGQoImV4cGFuZGVkIik7Ci0gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKQotICAgICAgICAg
ICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIik7Ci0KLSAgICAg
ICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIFRyZWVF
bGVtZW50LnRyZWVFbGVtZW50TW91c2VEb3duLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX2xpc3RJ
dGVtTm9kZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIFRyZWVFbGVtZW50LnRyZWVFbGVtZW50
VG9nZ2xlZCwgZmFsc2UpOwotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRMaXN0
ZW5lcigiZGJsY2xpY2siLCBUcmVlRWxlbWVudC50cmVlRWxlbWVudERvdWJsZUNsaWNrZWQsIGZh
bHNlKTsKLQotICAgICAgICB0aGlzLm9uYXR0YWNoKCk7Ci0gICAgfQotCi0gICAgdmFyIG5leHRT
aWJsaW5nID0gbnVsbDsKLSAgICBpZiAodGhpcy5uZXh0U2libGluZyAmJiB0aGlzLm5leHRTaWJs
aW5nLl9saXN0SXRlbU5vZGUgJiYgdGhpcy5uZXh0U2libGluZy5fbGlzdEl0ZW1Ob2RlLnBhcmVu
dE5vZGUgPT09IHRoaXMucGFyZW50Ll9jaGlsZHJlbkxpc3ROb2RlKQotICAgICAgICBuZXh0U2li
bGluZyA9IHRoaXMubmV4dFNpYmxpbmcuX2xpc3RJdGVtTm9kZTsKLSAgICB0aGlzLnBhcmVudC5f
Y2hpbGRyZW5MaXN0Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fbGlzdEl0ZW1Ob2RlLCBuZXh0U2li
bGluZyk7Ci0gICAgaWYgKHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUpCi0gICAgICAgIHRoaXMucGFy
ZW50Ll9jaGlsZHJlbkxpc3ROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9jaGlsZHJlbkxpc3ROb2Rl
LCB0aGlzLl9saXN0SXRlbU5vZGUubmV4dFNpYmxpbmcpOwotICAgIGlmICh0aGlzLnNlbGVjdGVk
KQotICAgICAgICB0aGlzLnNlbGVjdCgpOwotICAgIGlmICh0aGlzLmV4cGFuZGVkKQotICAgICAg
ICB0aGlzLmV4cGFuZCgpOwotfQotCi1UcmVlRWxlbWVudC5wcm90b3R5cGUuX2RldGFjaCA9IGZ1
bmN0aW9uKCkKLXsKLSAgICBpZiAodGhpcy5fbGlzdEl0ZW1Ob2RlICYmIHRoaXMuX2xpc3RJdGVt
Tm9kZS5wYXJlbnROb2RlKQotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZCh0aGlzLl9saXN0SXRlbU5vZGUpOwotICAgIGlmICh0aGlzLl9jaGlsZHJlbkxp
c3ROb2RlICYmIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUucGFyZW50Tm9kZSkKLSAgICAgICAgdGhp
cy5fY2hpbGRyZW5MaXN0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NoaWxkcmVu
TGlzdE5vZGUpOwotfQotCi1UcmVlRWxlbWVudC50cmVlRWxlbWVudE1vdXNlRG93biA9IGZ1bmN0
aW9uKGV2ZW50KQotewotICAgIHZhciBlbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDsKLSAg
ICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQudHJlZUVsZW1lbnQgfHwgIWVsZW1lbnQudHJlZUVs
ZW1lbnQuc2VsZWN0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGVsZW1lbnQudHJl
ZUVsZW1lbnQuaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShldmVudCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGVsZW1lbnQudHJlZUVsZW1lbnQuc2VsZWN0T25Nb3VzZURvd24oZXZl
bnQpOwotfQotCi1UcmVlRWxlbWVudC50cmVlRWxlbWVudFRvZ2dsZWQgPSBmdW5jdGlvbihldmVu
dCkKLXsKLSAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7Ci0gICAgaWYgKCFl
bGVtZW50IHx8ICFlbGVtZW50LnRyZWVFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICB2
YXIgdG9nZ2xlT25DbGljayA9IGVsZW1lbnQudHJlZUVsZW1lbnQudG9nZ2xlT25DbGljayAmJiAh
ZWxlbWVudC50cmVlRWxlbWVudC5zZWxlY3RhYmxlOwotICAgIHZhciBpc0luVHJpYW5nbGUgPSBl
bGVtZW50LnRyZWVFbGVtZW50LmlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUoZXZlbnQp
OwotICAgIGlmICghdG9nZ2xlT25DbGljayAmJiAhaXNJblRyaWFuZ2xlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoZWxlbWVudC50cmVlRWxlbWVudC5leHBhbmRlZCkgewotICAgICAgICBp
ZiAoZXZlbnQuYWx0S2V5KQotICAgICAgICAgICAgZWxlbWVudC50cmVlRWxlbWVudC5jb2xsYXBz
ZVJlY3Vyc2l2ZWx5KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsZW1lbnQudHJlZUVs
ZW1lbnQuY29sbGFwc2UoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXZlbnQuYWx0S2V5
KQotICAgICAgICAgICAgZWxlbWVudC50cmVlRWxlbWVudC5leHBhbmRSZWN1cnNpdmVseSgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbGVtZW50LnRyZWVFbGVtZW50LmV4cGFuZCgpOwot
ICAgIH0KLSAgICBldmVudC5jb25zdW1lKCk7Ci19Ci0KLVRyZWVFbGVtZW50LnRyZWVFbGVtZW50
RG91YmxlQ2xpY2tlZCA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIHZhciBlbGVtZW50ID0gZXZl
bnQuY3VycmVudFRhcmdldDsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQudHJlZUVsZW1l
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBoYW5kbGVkID0gZWxlbWVudC50cmVlRWxl
bWVudC5vbmRibGNsaWNrLmNhbGwoZWxlbWVudC50cmVlRWxlbWVudCwgZXZlbnQpOwotICAgIGlm
IChoYW5kbGVkKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGVsZW1lbnQudHJlZUVsZW1lbnQu
aGFzQ2hpbGRyZW4gJiYgIWVsZW1lbnQudHJlZUVsZW1lbnQuZXhwYW5kZWQpCi0gICAgICAgIGVs
ZW1lbnQudHJlZUVsZW1lbnQuZXhwYW5kKCk7Ci19Ci0KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5j
b2xsYXBzZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAodGhpcy5fbGlzdEl0ZW1Ob2RlKQotICAg
ICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kZWQiKTsKLSAg
ICBpZiAodGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSkKLSAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0
Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmRlZCIpOwotCi0gICAgdGhpcy5leHBhbmRlZCA9
IGZhbHNlOwotICAgIAotICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lKQotICAgICAgICB0aGlzLnRy
ZWVPdXRsaW5lLl9leHBhbmRlZFN0YXRlTWFwLnB1dCh0aGlzLnJlcHJlc2VudGVkT2JqZWN0LCBm
YWxzZSk7Ci0KLSAgICB0aGlzLm9uY29sbGFwc2UoKTsKLX0KLQotVHJlZUVsZW1lbnQucHJvdG90
eXBlLmNvbGxhcHNlUmVjdXJzaXZlbHkgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIGl0ZW0gPSB0
aGlzOwotICAgIHdoaWxlIChpdGVtKSB7Ci0gICAgICAgIGlmIChpdGVtLmV4cGFuZGVkKQotICAg
ICAgICAgICAgaXRlbS5jb2xsYXBzZSgpOwotICAgICAgICBpdGVtID0gaXRlbS50cmF2ZXJzZU5l
eHRUcmVlRWxlbWVudChmYWxzZSwgdGhpcywgdHJ1ZSk7Ci0gICAgfQotfQotCi1UcmVlRWxlbWVu
dC5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24oKQotewotICAgIGlmICghdGhpcy5oYXNDaGls
ZHJlbiB8fCAodGhpcy5leHBhbmRlZCAmJiAhdGhpcy5fc2hvdWxkUmVmcmVzaENoaWxkcmVuICYm
IHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTZXQg
dGhpcyBiZWZvcmUgb25wb3B1bGF0ZS4gU2luY2Ugb25wb3B1bGF0ZSBjYW4gYWRkIGVsZW1lbnRz
LCB0aGlzIG1ha2VzCi0gICAgLy8gc3VyZSB0aGUgZXhwYW5kZWQgZmxhZyBpcyB0cnVlIGJlZm9y
ZSBjYWxsaW5nIHRob3NlIGZ1bmN0aW9ucy4gVGhpcyBwcmV2ZW50cyB0aGUgcG9zc2liaWxpdHkK
LSAgICAvLyBvZiBhbiBpbmZpbml0ZSBsb29wIGlmIG9ucG9wdWxhdGUgd2VyZSB0byBjYWxsIGV4
cGFuZC4KLQotICAgIHRoaXMuZXhwYW5kZWQgPSB0cnVlOwotICAgIGlmICh0aGlzLnRyZWVPdXRs
aW5lKQotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLl9leHBhbmRlZFN0YXRlTWFwLnB1dCh0aGlz
LnJlcHJlc2VudGVkT2JqZWN0LCB0cnVlKTsKLQotICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lICYm
ICghdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSB8fCB0aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW4p
KSB7Ci0gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbkxpc3ROb2RlICYmIHRoaXMuX2NoaWxkcmVu
TGlzdE5vZGUucGFyZW50Tm9kZSkKLSAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jaGlsZHJlbkxpc3ROb2RlKTsKLQotICAgICAg
ICB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlID0gdGhpcy50cmVlT3V0bGluZS5fY2hpbGRyZW5MaXN0
Tm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7Ci0gICAgICAgIHRoaXMuX2No
aWxkcmVuTGlzdE5vZGUucGFyZW50VHJlZUVsZW1lbnQgPSB0aGlzOwotICAgICAgICB0aGlzLl9j
aGlsZHJlbkxpc3ROb2RlLmNsYXNzTGlzdC5hZGQoImNoaWxkcmVuIik7Ci0KLSAgICAgICAgaWYg
KHRoaXMuaGlkZGVuKQotICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5jbGFzc0xp
c3QuYWRkKCJoaWRkZW4iKTsKLQotICAgICAgICB0aGlzLm9ucG9wdWxhdGUoKTsKLQotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICB0aGlzLmNoaWxkcmVuW2ldLl9hdHRhY2goKTsKLQotICAgICAgICBkZWxldGUgdGhpcy5f
c2hvdWxkUmVmcmVzaENoaWxkcmVuOwotICAgIH0KLQotICAgIGlmICh0aGlzLl9saXN0SXRlbU5v
ZGUpIHsKLSAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5hZGQoImV4cGFuZGVk
Iik7Ci0gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbkxpc3ROb2RlICYmIHRoaXMuX2NoaWxkcmVu
TGlzdE5vZGUucGFyZW50Tm9kZSAhPSB0aGlzLl9saXN0SXRlbU5vZGUucGFyZW50Tm9kZSkKLSAg
ICAgICAgICAgIHRoaXMucGFyZW50Ll9jaGlsZHJlbkxpc3ROb2RlLmluc2VydEJlZm9yZSh0aGlz
Ll9jaGlsZHJlbkxpc3ROb2RlLCB0aGlzLl9saXN0SXRlbU5vZGUubmV4dFNpYmxpbmcpOwotICAg
IH0KLQotICAgIGlmICh0aGlzLl9jaGlsZHJlbkxpc3ROb2RlKQotICAgICAgICB0aGlzLl9jaGls
ZHJlbkxpc3ROb2RlLmNsYXNzTGlzdC5hZGQoImV4cGFuZGVkIik7Ci0KLSAgICB0aGlzLm9uZXhw
YW5kKCk7Ci19Ci0KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5leHBhbmRSZWN1cnNpdmVseSA9IGZ1
bmN0aW9uKG1heERlcHRoKQotewotICAgIHZhciBpdGVtID0gdGhpczsKLSAgICB2YXIgaW5mbyA9
IHt9OwotICAgIHZhciBkZXB0aCA9IDA7Ci0KLSAgICAvLyBUaGUgSW5zcGVjdG9yIHVzZXMgVHJl
ZU91dGxpbmVzIHRvIHJlcHJlc2VudHMgb2JqZWN0IHByb3BlcnRpZXMsIHNvIHJlY3Vyc2l2ZSBl
eHBhbnNpb24KLSAgICAvLyBpbiBzb21lIGNhc2UgY2FuIGJlIGluZmluaXRlLCBzaW5jZSBKYXZh
U2NyaXB0IG9iamVjdHMgY2FuIGhvbGQgY2lyY3VsYXIgcmVmZXJlbmNlcy4KLSAgICAvLyBTbyBk
ZWZhdWx0IHRvIGEgcmVjdXJzaW9uIGNhcCBvZiAzIGxldmVscywgc2luY2UgdGhhdCBnaXZlcyBm
YWlybHkgZ29vZCByZXN1bHRzLgotICAgIGlmIChpc05hTihtYXhEZXB0aCkpCi0gICAgICAgIG1h
eERlcHRoID0gMzsKLQotICAgIHdoaWxlIChpdGVtKSB7Ci0gICAgICAgIGlmIChkZXB0aCA8IG1h
eERlcHRoKQotICAgICAgICAgICAgaXRlbS5leHBhbmQoKTsKLSAgICAgICAgaXRlbSA9IGl0ZW0u
dHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQoZmFsc2UsIHRoaXMsIChkZXB0aCA+PSBtYXhEZXB0aCks
IGluZm8pOwotICAgICAgICBkZXB0aCArPSBpbmZvLmRlcHRoQ2hhbmdlOwotICAgIH0KLX0KLQot
VHJlZUVsZW1lbnQucHJvdG90eXBlLmhhc0FuY2VzdG9yID0gZnVuY3Rpb24oYW5jZXN0b3IpIHsK
LSAgICBpZiAoIWFuY2VzdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2YXIgY3Vy
cmVudE5vZGUgPSB0aGlzLnBhcmVudDsKLSAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKLSAgICAg
ICAgaWYgKGFuY2VzdG9yID09PSBjdXJyZW50Tm9kZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5yZXZlYWwgPSBmdW5j
dGlvbigpCi17Ci0gICAgdmFyIGN1cnJlbnRBbmNlc3RvciA9IHRoaXMucGFyZW50OwotICAgIHdo
aWxlIChjdXJyZW50QW5jZXN0b3IgJiYgIWN1cnJlbnRBbmNlc3Rvci5yb290KSB7Ci0gICAgICAg
IGlmICghY3VycmVudEFuY2VzdG9yLmV4cGFuZGVkKQotICAgICAgICAgICAgY3VycmVudEFuY2Vz
dG9yLmV4cGFuZCgpOwotICAgICAgICBjdXJyZW50QW5jZXN0b3IgPSBjdXJyZW50QW5jZXN0b3Iu
cGFyZW50OwotICAgIH0KLQotICAgIHRoaXMub25yZXZlYWwodGhpcyk7Ci19Ci0KLVRyZWVFbGVt
ZW50LnByb3RvdHlwZS5yZXZlYWxlZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgY3VycmVudEFu
Y2VzdG9yID0gdGhpcy5wYXJlbnQ7Ci0gICAgd2hpbGUgKGN1cnJlbnRBbmNlc3RvciAmJiAhY3Vy
cmVudEFuY2VzdG9yLnJvb3QpIHsKLSAgICAgICAgaWYgKCFjdXJyZW50QW5jZXN0b3IuZXhwYW5k
ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJlbnRBbmNlc3RvciA9
IGN1cnJlbnRBbmNlc3Rvci5wYXJlbnQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LVRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3RPbk1vdXNlRG93biA9IGZ1bmN0aW9uKGV2ZW50
KQotewotICAgIGlmICh0aGlzLnNlbGVjdChmYWxzZSwgdHJ1ZSkpCi0gICAgICAgIGV2ZW50LmNv
bnN1bWUodHJ1ZSk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtib29sZWFuPX0gb21pdEZvY3VzCi0g
KiBAcGFyYW0ge2Jvb2xlYW49fSBzZWxlY3RlZEJ5VXNlcgotICogQHJldHVybiB7Ym9vbGVhbn0K
LSAqLwotVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKG9taXRGb2N1cywg
c2VsZWN0ZWRCeVVzZXIpCi17Ci0gICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lIHx8ICF0aGlzLnNl
bGVjdGFibGUgfHwgdGhpcy5zZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCkKLSAgICAgICAgdGhpcy50
cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50LmRlc2VsZWN0KCk7Ci0KLSAgICB0aGlzLnNl
bGVjdGVkID0gdHJ1ZTsKLQotICAgIGlmKCFvbWl0Rm9jdXMpCi0gICAgICAgIHRoaXMudHJlZU91
dGxpbmUuX2NoaWxkcmVuTGlzdE5vZGUuZm9jdXMoKTsKLQotICAgIC8vIEZvY3VzaW5nIG9uIGFu
b3RoZXIgbm9kZSBtYXkgZGV0YWNoICJ0aGlzIiBmcm9tIHRyZWUuCi0gICAgaWYgKCF0aGlzLnRy
ZWVPdXRsaW5lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGhpcy50cmVlT3V0bGluZS5z
ZWxlY3RlZFRyZWVFbGVtZW50ID0gdGhpczsKLSAgICBpZiAodGhpcy5fbGlzdEl0ZW1Ob2RlKQot
ICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKLQot
ICAgIHJldHVybiB0aGlzLm9uc2VsZWN0KHNlbGVjdGVkQnlVc2VyKTsKLX0KLQotLyoqCi0gKiBA
cGFyYW0ge2Jvb2xlYW49fSBvbWl0Rm9jdXMKLSAqLwotVHJlZUVsZW1lbnQucHJvdG90eXBlLnJl
dmVhbEFuZFNlbGVjdCA9IGZ1bmN0aW9uKG9taXRGb2N1cykKLXsKLSAgICB0aGlzLnJldmVhbCgp
OwotICAgIHRoaXMuc2VsZWN0KG9taXRGb2N1cyk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtib29s
ZWFuPX0gc3VwcmVzc09uRGVzZWxlY3QKLSAqLwotVHJlZUVsZW1lbnQucHJvdG90eXBlLmRlc2Vs
ZWN0ID0gZnVuY3Rpb24oc3VwcmVzc09uRGVzZWxlY3QpCi17Ci0gICAgaWYgKCF0aGlzLnRyZWVP
dXRsaW5lIHx8IHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCAhPT0gdGhpcyB8
fCAhdGhpcy5zZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdGhpcy5zZWxl
Y3RlZCA9IGZhbHNlOwotICAgIHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCA9
IG51bGw7Ci0gICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSkKLSAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5v
bnBvcHVsYXRlID0gZnVuY3Rpb24oKSB7IH0KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmVudGVy
ID0gZnVuY3Rpb24oKSB7IH0KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbmRlbGV0ZSA9IGZ1bmN0
aW9uKCkgeyB9Ci1UcmVlRWxlbWVudC5wcm90b3R5cGUub25zcGFjZSA9IGZ1bmN0aW9uKCkgeyB9
Ci1UcmVlRWxlbWVudC5wcm90b3R5cGUub25hdHRhY2ggPSBmdW5jdGlvbigpIHsgfQotVHJlZUVs
ZW1lbnQucHJvdG90eXBlLm9uZXhwYW5kID0gZnVuY3Rpb24oKSB7IH0KLVRyZWVFbGVtZW50LnBy
b3RvdHlwZS5vbmNvbGxhcHNlID0gZnVuY3Rpb24oKSB7IH0KLVRyZWVFbGVtZW50LnByb3RvdHlw
ZS5vbmRibGNsaWNrID0gZnVuY3Rpb24oKSB7IH0KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnJl
dmVhbCA9IGZ1bmN0aW9uKCkgeyB9Ci0vKiogQHBhcmFtIHtib29sZWFuPX0gc2VsZWN0ZWRCeVVz
ZXIgKi8KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdCA9IGZ1bmN0aW9uKHNlbGVjdGVk
QnlVc2VyKSB7IH0KLQotLyoqCi0gKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBVbnJldmVhbGVkCi0g
KiBAcGFyYW0geyhUcmVlT3V0bGluZXxUcmVlRWxlbWVudCk9fSBzdGF5V2l0aGluCi0gKiBAcGFy
YW0ge2Jvb2xlYW49fSBkb250UG9wdWxhdGUKLSAqIEBwYXJhbSB7T2JqZWN0PX0gaW5mbwotICog
QHJldHVybiB7VHJlZUVsZW1lbnR9Ci0gKi8KLVRyZWVFbGVtZW50LnByb3RvdHlwZS50cmF2ZXJz
ZU5leHRUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHNraXBVbnJldmVhbGVkLCBzdGF5V2l0aGluLCBk
b250UG9wdWxhdGUsIGluZm8pCi17Ci0gICAgaWYgKCFkb250UG9wdWxhdGUgJiYgdGhpcy5oYXND
aGlsZHJlbikKLSAgICAgICAgdGhpcy5vbnBvcHVsYXRlKCk7Ci0KLSAgICBpZiAoaW5mbykKLSAg
ICAgICAgaW5mby5kZXB0aENoYW5nZSA9IDA7Ci0KLSAgICB2YXIgZWxlbWVudCA9IHNraXBVbnJl
dmVhbGVkID8gKHRoaXMucmV2ZWFsZWQoKSA/IHRoaXMuY2hpbGRyZW5bMF0gOiBudWxsKSA6IHRo
aXMuY2hpbGRyZW5bMF07Ci0gICAgaWYgKGVsZW1lbnQgJiYgKCFza2lwVW5yZXZlYWxlZCB8fCAo
c2tpcFVucmV2ZWFsZWQgJiYgdGhpcy5leHBhbmRlZCkpKSB7Ci0gICAgICAgIGlmIChpbmZvKQot
ICAgICAgICAgICAgaW5mby5kZXB0aENoYW5nZSA9IDE7Ci0gICAgICAgIHJldHVybiBlbGVtZW50
OwotICAgIH0KLQotICAgIGlmICh0aGlzID09PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4g
bnVsbDsKLQotICAgIGVsZW1lbnQgPSBza2lwVW5yZXZlYWxlZCA/ICh0aGlzLnJldmVhbGVkKCkg
PyB0aGlzLm5leHRTaWJsaW5nIDogbnVsbCkgOiB0aGlzLm5leHRTaWJsaW5nOwotICAgIGlmIChl
bGVtZW50KQotICAgICAgICByZXR1cm4gZWxlbWVudDsKLQotICAgIGVsZW1lbnQgPSB0aGlzOwot
ICAgIHdoaWxlIChlbGVtZW50ICYmICFlbGVtZW50LnJvb3QgJiYgIShza2lwVW5yZXZlYWxlZCA/
IChlbGVtZW50LnJldmVhbGVkKCkgPyBlbGVtZW50Lm5leHRTaWJsaW5nIDogbnVsbCkgOiBlbGVt
ZW50Lm5leHRTaWJsaW5nKSAmJiBlbGVtZW50LnBhcmVudCAhPT0gc3RheVdpdGhpbikgewotICAg
ICAgICBpZiAoaW5mbykKLSAgICAgICAgICAgIGluZm8uZGVwdGhDaGFuZ2UgLT0gMTsKLSAgICAg
ICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50OwotICAgIH0KLQotICAgIGlmICghZWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICByZXR1cm4gKHNraXBVbnJldmVhbGVkID8gKGVs
ZW1lbnQucmV2ZWFsZWQoKSA/IGVsZW1lbnQubmV4dFNpYmxpbmcgOiBudWxsKSA6IGVsZW1lbnQu
bmV4dFNpYmxpbmcpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7Ym9vbGVhbn0gc2tpcFVucmV2ZWFs
ZWQKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IGRvbnRQb3B1bGF0ZQotICogQHJldHVybiB7VHJlZUVs
ZW1lbnR9Ci0gKi8KLVRyZWVFbGVtZW50LnByb3RvdHlwZS50cmF2ZXJzZVByZXZpb3VzVHJlZUVs
ZW1lbnQgPSBmdW5jdGlvbihza2lwVW5yZXZlYWxlZCwgZG9udFBvcHVsYXRlKQotewotICAgIHZh
ciBlbGVtZW50ID0gc2tpcFVucmV2ZWFsZWQgPyAodGhpcy5yZXZlYWxlZCgpID8gdGhpcy5wcmV2
aW91c1NpYmxpbmcgOiBudWxsKSA6IHRoaXMucHJldmlvdXNTaWJsaW5nOwotICAgIGlmICghZG9u
dFBvcHVsYXRlICYmIGVsZW1lbnQgJiYgZWxlbWVudC5oYXNDaGlsZHJlbikKLSAgICAgICAgZWxl
bWVudC5vbnBvcHVsYXRlKCk7Ci0KLSAgICB3aGlsZSAoZWxlbWVudCAmJiAoc2tpcFVucmV2ZWFs
ZWQgPyAoZWxlbWVudC5yZXZlYWxlZCgpICYmIGVsZW1lbnQuZXhwYW5kZWQgPyBlbGVtZW50LmNo
aWxkcmVuW2VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMV0gOiBudWxsKSA6IGVsZW1lbnQuY2hp
bGRyZW5bZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxXSkpIHsKLSAgICAgICAgaWYgKCFkb250
UG9wdWxhdGUgJiYgZWxlbWVudC5oYXNDaGlsZHJlbikKLSAgICAgICAgICAgIGVsZW1lbnQub25w
b3B1bGF0ZSgpOwotICAgICAgICBlbGVtZW50ID0gKHNraXBVbnJldmVhbGVkID8gKGVsZW1lbnQu
cmV2ZWFsZWQoKSAmJiBlbGVtZW50LmV4cGFuZGVkID8gZWxlbWVudC5jaGlsZHJlbltlbGVtZW50
LmNoaWxkcmVuLmxlbmd0aCAtIDFdIDogbnVsbCkgOiBlbGVtZW50LmNoaWxkcmVuW2VsZW1lbnQu
Y2hpbGRyZW4ubGVuZ3RoIC0gMV0pOwotICAgIH0KLQotICAgIGlmIChlbGVtZW50KQotICAgICAg
ICByZXR1cm4gZWxlbWVudDsKLQotICAgIGlmICghdGhpcy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQu
cm9vdCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICByZXR1cm4gdGhpcy5wYXJlbnQ7Ci19
Ci0KLVRyZWVFbGVtZW50LnByb3RvdHlwZS5pc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFuZ2xl
ID0gZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgdXNlIGdl
dENvbXB1dGVkU3R5bGUoKS4gRm9yIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mIHVzaW5nIDo6
YmVmb3JlIGZvciBkaXNjbG9zdXJlIHRyaWFuZ2xlLiAoaHR0cDovL3dlYmsuaXQvNzQ0NDYpIAot
ICAgIHZhciBwYWRkaW5nTGVmdFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5f
bGlzdEl0ZW1Ob2RlKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJwYWRkaW5nLWxlZnQiKTsKLSAgICB2
YXIgY29tcHV0ZWRMZWZ0UGFkZGluZyA9IHBhZGRpbmdMZWZ0VmFsdWUgPyBwYWRkaW5nTGVmdFZh
bHVlLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BYKSA6IDA7Ci0gICAgdmFy
IGxlZnQgPSB0aGlzLl9saXN0SXRlbU5vZGUudG90YWxPZmZzZXRMZWZ0KCkgKyBjb21wdXRlZExl
ZnRQYWRkaW5nOwotICAgIHJldHVybiBldmVudC5wYWdlWCA+PSBsZWZ0ICYmIGV2ZW50LnBhZ2VY
IDw9IGxlZnQgKyB0aGlzLmFycm93VG9nZ2xlV2lkdGggJiYgdGhpcy5oYXNDaGlsZHJlbjsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVz
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwY2VmZDYuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLU9iamVjdC5pc0VtcHR5ID0gZnVuY3Rpb24ob2JqKQotewotICAg
IGZvciAodmFyIGkgaW4gb2JqKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLU9iamVjdC52YWx1ZXMgPSBmdW5jdGlvbihvYmopCi17Ci0gICAgdmFyIGtleXMg
PSBPYmplY3Qua2V5cyhvYmopOwotICAgIHZhciByZXN1bHQgPSBbXTsKLQotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkKLSAgICAgICAgcmVzdWx0LnB1c2gob2JqW2tl
eXNbaV1dKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcucHJvdG90eXBlLmhhc1N1
YnN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZywgY2FzZUluc2Vuc2l0aXZlKQotewotICAgIGlmICgh
Y2FzZUluc2Vuc2l0aXZlKQotICAgICAgICByZXR1cm4gdGhpcy5pbmRleE9mKHN0cmluZykgIT09
IC0xOwotICAgIHJldHVybiB0aGlzLm1hdGNoKG5ldyBSZWdFeHAoc3RyaW5nLmVzY2FwZUZvclJl
Z0V4cCgpLCAiaSIpKTsKLX0KLQotU3RyaW5nLnByb3RvdHlwZS5maW5kQWxsID0gZnVuY3Rpb24o
c3RyaW5nKQotewotICAgIHZhciBtYXRjaGVzID0gW107Ci0gICAgdmFyIGkgPSB0aGlzLmluZGV4
T2Yoc3RyaW5nKTsKLSAgICB3aGlsZSAoaSAhPT0gLTEpIHsKLSAgICAgICAgbWF0Y2hlcy5wdXNo
KGkpOwotICAgICAgICBpID0gdGhpcy5pbmRleE9mKHN0cmluZywgaSArIHN0cmluZy5sZW5ndGgp
OwotICAgIH0KLSAgICByZXR1cm4gbWF0Y2hlczsKLX0KLQotU3RyaW5nLnByb3RvdHlwZS5saW5l
RW5kaW5ncyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIXRoaXMuX2xpbmVFbmRpbmdzKSB7Ci0g
ICAgICAgIHRoaXMuX2xpbmVFbmRpbmdzID0gdGhpcy5maW5kQWxsKCJcbiIpOwotICAgICAgICB0
aGlzLl9saW5lRW5kaW5ncy5wdXNoKHRoaXMubGVuZ3RoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRo
aXMuX2xpbmVFbmRpbmdzOwotfQotCi1TdHJpbmcucHJvdG90eXBlLmVzY2FwZUNoYXJhY3RlcnMg
PSBmdW5jdGlvbihjaGFycykKLXsKLSAgICB2YXIgZm91bmRDaGFyID0gZmFsc2U7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAodGhpcy5p
bmRleE9mKGNoYXJzLmNoYXJBdChpKSkgIT09IC0xKSB7Ci0gICAgICAgICAgICBmb3VuZENoYXIg
PSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWZvdW5kQ2hhcikKLSAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKTsKLQotICAgIHZhciByZXN1
bHQgPSAiIjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKGNoYXJzLmluZGV4T2YodGhpcy5jaGFyQXQoaSkpICE9PSAtMSkKLSAgICAgICAg
ICAgIHJlc3VsdCArPSAiXFwiOwotICAgICAgICByZXN1bHQgKz0gdGhpcy5jaGFyQXQoaSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nLnJlZ2V4U3BlY2lhbENoYXJh
Y3RlcnMgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuICJeW117fSgpXFwuJCorP3wtLCI7Ci19
Ci0KLVN0cmluZy5wcm90b3R5cGUuZXNjYXBlRm9yUmVnRXhwID0gZnVuY3Rpb24oKQotewotICAg
IHJldHVybiB0aGlzLmVzY2FwZUNoYXJhY3RlcnMoU3RyaW5nLnJlZ2V4U3BlY2lhbENoYXJhY3Rl
cnMpOwotfQotCi1TdHJpbmcucHJvdG90eXBlLmVzY2FwZUhUTUwgPSBmdW5jdGlvbigpCi17Ci0g
ICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7
IikucmVwbGFjZSgvPi9nLCAiJmd0OyIpLnJlcGxhY2UoLyIvZywgIiZxdW90OyIpOyAvLyIgZG91
YmxlcXVvdGVzIGp1c3QgZm9yIGVkaXRvcgotfQotCi1TdHJpbmcucHJvdG90eXBlLmNvbGxhcHNl
V2hpdGVzcGFjZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9bXHNc
eEEwXSsvZywgIiAiKTsKLX0KLQotU3RyaW5nLnByb3RvdHlwZS5jZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGggPSBmdW5jdGlvbihtYXhMZW5ndGgpCi17Ci0gICAgaWYgKHRoaXMubGVuZ3RoIDw9IG1h
eExlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKTsKLSAgICB2YXIgbGVmdEhhbGYg
PSBtYXhMZW5ndGggPj4gMTsKLSAgICB2YXIgcmlnaHRIYWxmID0gbWF4TGVuZ3RoIC0gbGVmdEhh
bGYgLSAxOwotICAgIHJldHVybiB0aGlzLnN1YnN0cigwLCBsZWZ0SGFsZikgKyAiXHUyMDI2IiAr
IHRoaXMuc3Vic3RyKHRoaXMubGVuZ3RoIC0gcmlnaHRIYWxmLCByaWdodEhhbGYpOwotfQotCi1T
dHJpbmcucHJvdG90eXBlLnRyaW1FbmQgPSBmdW5jdGlvbihtYXhMZW5ndGgpCi17Ci0gICAgaWYg
KHRoaXMubGVuZ3RoIDw9IG1heExlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKTsK
LSAgICByZXR1cm4gdGhpcy5zdWJzdHIoMCwgbWF4TGVuZ3RoIC0gMSkgKyAiXHUyMDI2IjsKLX0K
LQotU3RyaW5nLnByb3RvdHlwZS50cmltVVJMID0gZnVuY3Rpb24oYmFzZVVSTERvbWFpbikKLXsK
LSAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZXBsYWNlKC9eKGh0dHBzfGh0dHB8ZmlsZSk6XC9cLy9p
LCAiIik7Ci0gICAgaWYgKGJhc2VVUkxEb21haW4pCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5y
ZXBsYWNlKG5ldyBSZWdFeHAoIl4iICsgYmFzZVVSTERvbWFpbi5lc2NhcGVGb3JSZWdFeHAoKSwg
ImkiKSwgIiIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZy5wcm90b3R5cGUudG9U
aXRsZUNhc2UgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIHRoaXMuc3Vic3RyaW5nKDAsIDEp
LnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN1YnN0cmluZygxKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0g
e3N0cmluZ30gb3RoZXIKLSAqIEByZXR1cm4ge251bWJlcn0KLSAqLwotU3RyaW5nLnByb3RvdHlw
ZS5jb21wYXJlVG8gPSBmdW5jdGlvbihvdGhlcikKLXsKLSAgICBpZiAodGhpcyA+IG90aGVyKQot
ICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAodGhpcyA8IG90aGVyKQotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IGhyZWYKLSAq
IEByZXR1cm4ge3N0cmluZ30KLSAqLwotZnVuY3Rpb24gc2FuaXRpemVIcmVmKGhyZWYpCi17Ci0g
ICAgcmV0dXJuIGhyZWYgJiYgaHJlZi50cmltKCkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJq
YXZhc2NyaXB0OiIpID8gIiIgOiBocmVmOwotfQotCi1TdHJpbmcucHJvdG90eXBlLnJlbW92ZVVS
TEZyYWdtZW50ID0gZnVuY3Rpb24oKQotewotICAgIHZhciBmcmFnbWVudEluZGV4ID0gdGhpcy5p
bmRleE9mKCIjIik7Ci0gICAgaWYgKGZyYWdtZW50SW5kZXggPT0gLTEpCi0gICAgICAgIGZyYWdt
ZW50SW5kZXggPSB0aGlzLmxlbmd0aDsKLSAgICByZXR1cm4gdGhpcy5zdWJzdHJpbmcoMCwgZnJh
Z21lbnRJbmRleCk7Ci19Ci0KLVN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCA9IGZ1bmN0aW9u
KHN1YnN0cmluZykKLXsKLSAgICByZXR1cm4gIXRoaXMubGFzdEluZGV4T2Yoc3Vic3RyaW5nLCAw
KTsKLX0KLQotU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCA9IGZ1bmN0aW9uKHN1YnN0cmluZykK
LXsKLSAgICByZXR1cm4gdGhpcy5pbmRleE9mKHN1YnN0cmluZywgdGhpcy5sZW5ndGggLSBzdWJz
dHJpbmcubGVuZ3RoKSAhPT0gLTE7Ci19Ci0KLU51bWJlci5jb25zdHJhaW4gPSBmdW5jdGlvbihu
dW0sIG1pbiwgbWF4KQotewotICAgIGlmIChudW0gPCBtaW4pCi0gICAgICAgIG51bSA9IG1pbjsK
LSAgICBlbHNlIGlmIChudW0gPiBtYXgpCi0gICAgICAgIG51bSA9IG1heDsKLSAgICByZXR1cm4g
bnVtOwotfQotCi1EYXRlLnByb3RvdHlwZS50b0lTTzg2MDFDb21wYWN0ID0gZnVuY3Rpb24oKQot
ewotICAgIGZ1bmN0aW9uIGxlYWRaZXJvKHgpCi0gICAgewotICAgICAgICByZXR1cm4geCA+IDkg
PyAnJyArIHggOiAnMCcgKyB4Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmdldEZ1bGxZZWFyKCkg
KwotICAgICAgICAgICBsZWFkWmVybyh0aGlzLmdldE1vbnRoKCkgKyAxKSArCi0gICAgICAgICAg
IGxlYWRaZXJvKHRoaXMuZ2V0RGF0ZSgpKSArICdUJyArCi0gICAgICAgICAgIGxlYWRaZXJvKHRo
aXMuZ2V0SG91cnMoKSkgKwotICAgICAgICAgICBsZWFkWmVybyh0aGlzLmdldE1pbnV0ZXMoKSkg
KwotICAgICAgICAgICBsZWFkWmVybyh0aGlzLmdldFNlY29uZHMoKSk7Ci19Ci0KLU9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJyZW1vdmUiLAotewotICAgIC8qKgotICAg
ICAqIEB0aGlzIHtBcnJheS48Kj59Ci0gICAgICovCi0gICAgdmFsdWU6IGZ1bmN0aW9uKHZhbHVl
LCBvbmx5Rmlyc3QpCi0gICAgewotICAgICAgICBpZiAob25seUZpcnN0KSB7Ci0gICAgICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsdWUpOwotICAgICAgICAgICAgaWYgKGluZGV4
ICE9PSAtMSkKLSAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5n
dGg7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmICh0aGlzW2ldID09PSB2YWx1ZSkKLSAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShp
LCAxKTsKLSAgICAgICAgfQotICAgIH0KLX0pOwotCi1PYmplY3QuZGVmaW5lUHJvcGVydHkoQXJy
YXkucHJvdG90eXBlLCAia2V5U2V0IiwKLXsKLSAgICAvKioKLSAgICAgKiBAdGhpcyB7QXJyYXku
PCo+fQotICAgICAqLwotICAgIHZhbHVlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIg
a2V5cyA9IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBrZXlzW3RoaXNbaV1dID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGtleXM7
Ci0gICAgfQotfSk7Ci0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJ1
cHBlckJvdW5kIiwKLXsKLSAgICAvKioKLSAgICAgKiBAdGhpcyB7QXJyYXkuPG51bWJlcj59Ci0g
ICAgICovCi0gICAgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQotICAgIHsKLSAgICAgICAgdmFyIGZp
cnN0ID0gMDsKLSAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgIHdoaWxl
IChjb3VudCA+IDApIHsKLSAgICAgICAgICB2YXIgc3RlcCA9IGNvdW50ID4+IDE7Ci0gICAgICAg
ICAgdmFyIG1pZGRsZSA9IGZpcnN0ICsgc3RlcDsKLSAgICAgICAgICBpZiAodmFsdWUgPj0gdGhp
c1ttaWRkbGVdKSB7Ci0gICAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKLSAgICAgICAg
ICAgICAgY291bnQgLT0gc3RlcCArIDE7Ci0gICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
IGNvdW50ID0gc3RlcDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmlyc3Q7Ci0gICAgfQot
fSk7Ci0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJyb3RhdGUiLAot
ewotICAgIC8qKgotICAgICAqIEB0aGlzIHtBcnJheS48Kj59Ci0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IGluZGV4Ci0gICAgICogQHJldHVybiB7QXJyYXkuPCo+fQotICAgICAqLwotICAgIHZhbHVl
OiBmdW5jdGlvbihpbmRleCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwgaW5kZXggKyB0aGlzLmxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgcmVzdWx0LnB1c2godGhpc1tpICUgdGhpcy5sZW5ndGhdKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci19KTsKLQotT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQzMkFy
cmF5LnByb3RvdHlwZSwgInNvcnQiLCB7Ci0gICB2YWx1ZTogQXJyYXkucHJvdG90eXBlLnNvcnQK
LX0pOwotCi0oZnVuY3Rpb24oKSB7Ci12YXIgcGFydGl0aW9uID0gewotICAgIC8qKgotICAgICAq
IEB0aGlzIHtBcnJheS48bnVtYmVyPn0KLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlcixu
dW1iZXIpOm51bWJlcn0gY29tcGFyYXRvcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0Ci0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IHJpZ2h0Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IHBpdm90
SW5kZXgKLSAgICAgKi8KLSAgICB2YWx1ZTogZnVuY3Rpb24oY29tcGFyYXRvciwgbGVmdCwgcmln
aHQsIHBpdm90SW5kZXgpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBzd2FwKGFycmF5LCBpMSwg
aTIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0ZW1wID0gYXJyYXlbaTFdOwotICAgICAg
ICAgICAgYXJyYXlbaTFdID0gYXJyYXlbaTJdOwotICAgICAgICAgICAgYXJyYXlbaTJdID0gdGVt
cDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBwaXZvdFZhbHVlID0gdGhpc1twaXZvdEluZGV4
XTsKLSAgICAgICAgc3dhcCh0aGlzLCByaWdodCwgcGl2b3RJbmRleCk7Ci0gICAgICAgIHZhciBz
dG9yZUluZGV4ID0gbGVmdDsKLSAgICAgICAgZm9yICh2YXIgaSA9IGxlZnQ7IGkgPCByaWdodDsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoY29tcGFyYXRvcih0aGlzW2ldLCBwaXZvdFZhbHVlKSA8
IDApIHsKLSAgICAgICAgICAgICAgICBzd2FwKHRoaXMsIHN0b3JlSW5kZXgsIGkpOwotICAgICAg
ICAgICAgICAgICsrc3RvcmVJbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBzd2FwKHRoaXMsIHJpZ2h0LCBzdG9yZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIHN0b3JlSW5k
ZXg7Ci0gICAgfQotfTsKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJw
YXJ0aXRpb24iLCBwYXJ0aXRpb24pOwotT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQzMkFycmF5
LnByb3RvdHlwZSwgInBhcnRpdGlvbiIsIHBhcnRpdGlvbik7Ci0KLXZhciBzb3J0UmFuZ2UgPSB7
Ci0gICAgLyoqCi0gICAgICogQHRoaXMge0FycmF5LjxudW1iZXI+fQotICAgICAqIEBwYXJhbSB7
ZnVuY3Rpb24obnVtYmVyLG51bWJlcik6bnVtYmVyfSBjb21wYXJhdG9yCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGxlZnRCb3VuZAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSByaWdodEJvdW5kCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGsKLSAgICAgKi8KLSAgICB2YWx1ZTogZnVuY3Rpb24oY29t
cGFyYXRvciwgbGVmdEJvdW5kLCByaWdodEJvdW5kLCBrKQotICAgIHsKLSAgICAgICAgZnVuY3Rp
b24gcXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBjb21wYXJhdG9yLCBsZWZ0LCByaWdodCwgaykKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHJpZ2h0IDw9IGxlZnQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgdmFyIHBpdm90SW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFu
ZG9tKCkgKiAocmlnaHQgLSBsZWZ0KSkgKyBsZWZ0OwotICAgICAgICAgICAgdmFyIHBpdm90TmV3
SW5kZXggPSBhcnJheS5wYXJ0aXRpb24oY29tcGFyYXRvciwgbGVmdCwgcmlnaHQsIHBpdm90SW5k
ZXgpOwotICAgICAgICAgICAgcXVpY2tTb3J0Rmlyc3RLKGFycmF5LCBjb21wYXJhdG9yLCBsZWZ0
LCBwaXZvdE5ld0luZGV4IC0gMSwgayk7Ci0gICAgICAgICAgICBpZiAocGl2b3ROZXdJbmRleCA8
IGxlZnQgKyBrIC0gMSkKLSAgICAgICAgICAgICAgICBxdWlja1NvcnRGaXJzdEsoYXJyYXksIGNv
bXBhcmF0b3IsIHBpdm90TmV3SW5kZXggKyAxLCByaWdodCwgayk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobGVmdEJvdW5kID09PSAwICYmIHJpZ2h0Qm91bmQgPT09ICh0aGlzLmxlbmd0aCAt
IDEpICYmIGsgPj0gdGhpcy5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLnNvcnQoY29tcGFyYXRv
cik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHF1aWNrU29ydEZpcnN0Syh0aGlzLCBjb21w
YXJhdG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGspOwotICAgICAgICByZXR1cm4gdGhpczsK
LSAgICB9Ci19Ci1PYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAic29ydFJh
bmdlIiwgc29ydFJhbmdlKTsKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50MzJBcnJheS5wcm90
b3R5cGUsICJzb3J0UmFuZ2UiLCBzb3J0UmFuZ2UpOwotfSkoKTsKLQotT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInFzZWxlY3QiLAotewotICAgIC8qKgotICAgICAqIEB0
aGlzIHtBcnJheS48bnVtYmVyPn0KLSAgICAgKiBAcGFyYW0ge251bWJlcn0gawotICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb24obnVtYmVyLG51bWJlcik6Ym9vbGVhbj19IGNvbXBhcmF0b3IKLSAgICAg
Ki8KLSAgICB2YWx1ZTogZnVuY3Rpb24oaywgY29tcGFyYXRvcikKLSAgICB7Ci0gICAgICAgIGlm
IChrIDwgMCB8fCBrID49IHRoaXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoIWNvbXBhcmF0b3IpCi0gICAgICAgICAgICBjb21wYXJhdG9yID0gZnVuY3Rpb24oYSwg
YikgeyByZXR1cm4gYSAtIGI7IH0KLQotICAgICAgICB2YXIgbG93ID0gMDsKLSAgICAgICAgdmFy
IGhpZ2ggPSB0aGlzLmxlbmd0aCAtIDE7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAg
IHZhciBwaXZvdFBvc2l0aW9uID0gdGhpcy5wYXJ0aXRpb24oY29tcGFyYXRvciwgbG93LCBoaWdo
LCBNYXRoLmZsb29yKChoaWdoICsgbG93KSAvIDIpKTsKLSAgICAgICAgICAgIGlmIChwaXZvdFBv
c2l0aW9uID09PSBrKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tdOwotICAgICAgICAg
ICAgZWxzZSBpZiAocGl2b3RQb3NpdGlvbiA+IGspCi0gICAgICAgICAgICAgICAgaGlnaCA9IHBp
dm90UG9zaXRpb24gLSAxOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxvdyA9
IHBpdm90UG9zaXRpb24gKyAxOwotICAgICAgICB9Ci0gICAgfQotfSk7Ci0KLS8qKgotICogQHBh
cmFtIHsqfSBvYmplY3QKLSAqIEBwYXJhbSB7QXJyYXkuPCo+fSBhcnJheQotICogQHBhcmFtIHtm
dW5jdGlvbigqLCAqKTpudW1iZXJ9IGNvbXBhcmF0b3IKLSAqLwotZnVuY3Rpb24gYmluYXJ5U2Vh
cmNoKG9iamVjdCwgYXJyYXksIGNvbXBhcmF0b3IpCi17Ci0gICAgdmFyIGZpcnN0ID0gMDsKLSAg
ICB2YXIgbGFzdCA9IGFycmF5Lmxlbmd0aCAtIDE7Ci0KLSAgICB3aGlsZSAoZmlyc3QgPD0gbGFz
dCkgewotICAgICAgICB2YXIgbWlkID0gKGZpcnN0ICsgbGFzdCkgPj4gMTsKLSAgICAgICAgdmFy
IGMgPSBjb21wYXJhdG9yKG9iamVjdCwgYXJyYXlbbWlkXSk7Ci0gICAgICAgIGlmIChjID4gMCkK
LSAgICAgICAgICAgIGZpcnN0ID0gbWlkICsgMTsKLSAgICAgICAgZWxzZSBpZiAoYyA8IDApCi0g
ICAgICAgICAgICBsYXN0ID0gbWlkIC0gMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0
dXJuIG1pZDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG5lYXJlc3QgbGVzc2VyIGluZGV4
LCAiLTEiIG1lYW5zICIwLCAiLTIiIG1lYW5zICIxIiwgZXRjLgotICAgIHJldHVybiAtKGZpcnN0
ICsgMSk7Ci19Ci0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJiaW5h
cnlJbmRleE9mIiwKLXsKLSAgICAvKioKLSAgICAgKiBAdGhpcyB7QXJyYXkuPCo+fQotICAgICAq
IEBwYXJhbSB7ZnVuY3Rpb24oKiwgKik6bnVtYmVyfSBjb21wYXJhdG9yCi0gICAgICovCi0gICAg
dmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBjb21wYXJhdG9yKQotICAgIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IGJpbmFyeVNlYXJjaCh2YWx1ZSwgdGhpcywgY29tcGFyYXRvcik7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQgPj0gMCA/IHJlc3VsdCA6IC0xOwotICAgIH0KLX0pOwotCi1PYmplY3QuZGVm
aW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAic2VsZWN0IiwKLXsKLSAgICAvKioKLSAgICAg
KiBAdGhpcyB7QXJyYXkuPCo+fQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZAotICAgICAq
IEByZXR1cm4ge0FycmF5LjwqPn0KLSAgICAgKi8KLSAgICB2YWx1ZTogZnVuY3Rpb24oZmllbGQp
Ci0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAg
cmVzdWx0W2ldID0gdGhpc1tpXVtmaWVsZF07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotfSk7Ci0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJwZWVrTGFz
dCIsCi17Ci0gICAgLyoqCi0gICAgICogQHRoaXMge0FycmF5LjwqPn0KLSAgICAgKiBAcmV0dXJu
IHsqfQotICAgICAqLwotICAgIHZhbHVlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdOwotICAgIH0KLX0pOwotCi0vKioKLSAqIEBwYXJhbSB7
Kn0gYW5PYmplY3QKLSAqIEBwYXJhbSB7QXJyYXkuPCo+fSBhTGlzdAotICogQHBhcmFtIHtmdW5j
dGlvbigqLCAqKX0gYUZ1bmN0aW9uCi0gKi8KLWZ1bmN0aW9uIGluc2VydGlvbkluZGV4Rm9yT2Jq
ZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihhbk9iamVjdCwgYUxpc3QsIGFGdW5jdGlvbikKLXsK
LSAgICB2YXIgaW5kZXggPSBiaW5hcnlTZWFyY2goYW5PYmplY3QsIGFMaXN0LCBhRnVuY3Rpb24p
OwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIC8vIFNlZSBiaW5hcnlTZWFyY2ggaW1wbGVt
ZW50YXRpb24uCi0gICAgICAgIHJldHVybiAtaW5kZXggLSAxOwotICAgIGVsc2UgewotICAgICAg
ICAvLyBSZXR1cm4gdGhlIGZpcnN0IG9jY3VyYW5jZSBvZiBhbiBpdGVtIGluIHRoZSBsaXN0Lgot
ICAgICAgICB3aGlsZSAoaW5kZXggPiAwICYmIGFGdW5jdGlvbihhbk9iamVjdCwgYUxpc3RbaW5k
ZXggLSAxXSkgPT09IDApCi0gICAgICAgICAgICBpbmRleC0tOwotICAgICAgICByZXR1cm4gaW5k
ZXg7Ci0gICAgfQotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQKLSAqIEBwYXJh
bSB7Li4uKn0gdmFyX2FyZwotICovCi1TdHJpbmcuc3ByaW50ZiA9IGZ1bmN0aW9uKGZvcm1hdCwg
dmFyX2FyZykKLXsKLSAgICByZXR1cm4gU3RyaW5nLnZzcHJpbnRmKGZvcm1hdCwgQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci19Ci0KLVN0cmluZy50b2tlbml6ZUZv
cm1hdFN0cmluZyA9IGZ1bmN0aW9uKGZvcm1hdCwgZm9ybWF0dGVycykKLXsKLSAgICB2YXIgdG9r
ZW5zID0gW107Ci0gICAgdmFyIHN1YnN0aXR1dGlvbkluZGV4ID0gMDsKLQotICAgIGZ1bmN0aW9u
IGFkZFN0cmluZ1Rva2VuKHN0cikKLSAgICB7Ci0gICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTog
InN0cmluZyIsIHZhbHVlOiBzdHIgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkU3BlY2lm
aWVyVG9rZW4oc3BlY2lmaWVyLCBwcmVjaXNpb24sIHN1YnN0aXR1dGlvbkluZGV4KQotICAgIHsK
LSAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAic3BlY2lmaWVyIiwgc3BlY2lmaWVyOiBzcGVj
aWZpZXIsIHByZWNpc2lvbjogcHJlY2lzaW9uLCBzdWJzdGl0dXRpb25JbmRleDogc3Vic3RpdHV0
aW9uSW5kZXggfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNEaWdpdChjKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEhL1swLTldLy5leGVjKGMpOwotICAgIH0KLQotICAgIHZhciBpbmRleCA9
IDA7Ci0gICAgZm9yICh2YXIgcHJlY2VudEluZGV4ID0gZm9ybWF0LmluZGV4T2YoIiUiLCBpbmRl
eCk7IHByZWNlbnRJbmRleCAhPT0gLTE7IHByZWNlbnRJbmRleCA9IGZvcm1hdC5pbmRleE9mKCIl
IiwgaW5kZXgpKSB7Ci0gICAgICAgIGFkZFN0cmluZ1Rva2VuKGZvcm1hdC5zdWJzdHJpbmcoaW5k
ZXgsIHByZWNlbnRJbmRleCkpOwotICAgICAgICBpbmRleCA9IHByZWNlbnRJbmRleCArIDE7Ci0K
LSAgICAgICAgaWYgKGlzRGlnaXQoZm9ybWF0W2luZGV4XSkpIHsKLSAgICAgICAgICAgIC8vIFRo
ZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYSBudW1iZXIsIGl0IG1pZ2h0IGJlIGEgc3Vic3RpdHV0aW9u
IGluZGV4LgotICAgICAgICAgICAgdmFyIG51bWJlciA9IHBhcnNlSW50KGZvcm1hdC5zdWJzdHJp
bmcoaW5kZXgpLCAxMCk7Ci0gICAgICAgICAgICB3aGlsZSAoaXNEaWdpdChmb3JtYXRbaW5kZXhd
KSkKLSAgICAgICAgICAgICAgICArK2luZGV4OwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgbnVt
YmVyIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBlbmRzIHdpdGggYSAiJCIsCi0gICAgICAgICAg
ICAvLyB0aGVuIHRoaXMgaXMgYSBzdWJzdGl0dXRpb24gaW5kZXguCi0gICAgICAgICAgICBpZiAo
bnVtYmVyID4gMCAmJiBmb3JtYXRbaW5kZXhdID09PSAiJCIpIHsKLSAgICAgICAgICAgICAgICBz
dWJzdGl0dXRpb25JbmRleCA9IChudW1iZXIgLSAxKTsKLSAgICAgICAgICAgICAgICArK2luZGV4
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHByZWNpc2lvbiA9IC0x
OwotICAgICAgICBpZiAoZm9ybWF0W2luZGV4XSA9PT0gIi4iKSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlzIGEgcHJlY2lzaW9uIHNwZWNpZmllci4gSWYgbm8gZGlnaXQgZm9sbG93cyB0aGUgIi4i
LAotICAgICAgICAgICAgLy8gdGhlbiB0aGUgcHJlY2lzaW9uIHNob3VsZCBiZSB6ZXJvLgotICAg
ICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIHByZWNpc2lvbiA9IHBhcnNlSW50KGZvcm1h
dC5zdWJzdHJpbmcoaW5kZXgpLCAxMCk7Ci0gICAgICAgICAgICBpZiAoaXNOYU4ocHJlY2lzaW9u
KSkKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAo
aXNEaWdpdChmb3JtYXRbaW5kZXhdKSkKLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCEoZm9ybWF0W2luZGV4XSBpbiBmb3JtYXR0ZXJzKSkgewotICAg
ICAgICAgICAgYWRkU3RyaW5nVG9rZW4oZm9ybWF0LnN1YnN0cmluZyhwcmVjZW50SW5kZXgsIGlu
ZGV4ICsgMSkpOwotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYWRkU3BlY2lmaWVyVG9rZW4oZm9ybWF0W2luZGV4XSwgcHJl
Y2lzaW9uLCBzdWJzdGl0dXRpb25JbmRleCk7Ci0KLSAgICAgICAgKytzdWJzdGl0dXRpb25JbmRl
eDsKLSAgICAgICAgKytpbmRleDsKLSAgICB9Ci0KLSAgICBhZGRTdHJpbmdUb2tlbihmb3JtYXQu
c3Vic3RyaW5nKGluZGV4KSk7Ci0KLSAgICByZXR1cm4gdG9rZW5zOwotfQotCi1TdHJpbmcuc3Rh
bmRhcmRGb3JtYXR0ZXJzID0gewotICAgIGQ6IGZ1bmN0aW9uKHN1YnN0aXR1dGlvbikKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhaXNOYU4oc3Vic3RpdHV0aW9uKSA/IHN1YnN0aXR1dGlvbiA6IDA7
Ci0gICAgfSwKLQotICAgIGY6IGZ1bmN0aW9uKHN1YnN0aXR1dGlvbiwgdG9rZW4pCi0gICAgewot
ICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICYmIHRva2VuLnByZWNpc2lvbiA+IC0xKQotICAgICAg
ICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9u
KTsKLSAgICAgICAgcmV0dXJuICFpc05hTihzdWJzdGl0dXRpb24pID8gc3Vic3RpdHV0aW9uIDog
KHRva2VuLnByZWNpc2lvbiA+IC0xID8gTnVtYmVyKDApLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9u
KSA6IDApOwotICAgIH0sCi0KLSAgICBzOiBmdW5jdGlvbihzdWJzdGl0dXRpb24pCi0gICAgewot
ICAgICAgICByZXR1cm4gc3Vic3RpdHV0aW9uOwotICAgIH0KLX0KLQotU3RyaW5nLnZzcHJpbnRm
ID0gZnVuY3Rpb24oZm9ybWF0LCBzdWJzdGl0dXRpb25zKQotewotICAgIHJldHVybiBTdHJpbmcu
Zm9ybWF0KGZvcm1hdCwgc3Vic3RpdHV0aW9ucywgU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVycywg
IiIsIGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9KS5mb3JtYXR0ZWRSZXN1bHQ7Ci19
Ci0KLVN0cmluZy5mb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQsIHN1YnN0aXR1dGlvbnMsIGZvcm1h
dHRlcnMsIGluaXRpYWxWYWx1ZSwgYXBwZW5kKQotewotICAgIGlmICghZm9ybWF0IHx8ICFzdWJz
dGl0dXRpb25zIHx8ICFzdWJzdGl0dXRpb25zLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgZm9y
bWF0dGVkUmVzdWx0OiBhcHBlbmQoaW5pdGlhbFZhbHVlLCBmb3JtYXQpLCB1bnVzZWRTdWJzdGl0
dXRpb25zOiBzdWJzdGl0dXRpb25zIH07Ci0KLSAgICBmdW5jdGlvbiBwcmV0dHlGdW5jdGlvbk5h
bWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJTdHJpbmcuZm9ybWF0KFwiIiArIGZvcm1hdCAr
ICJcIiwgXCIiICsgc3Vic3RpdHV0aW9ucy5qb2luKCJcIiwgXCIiKSArICJcIikiOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHdhcm4obXNnKQotICAgIHsKLSAgICAgICAgY29uc29sZS53YXJuKHBy
ZXR0eUZ1bmN0aW9uTmFtZSgpICsgIjogIiArIG1zZyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
ZXJyb3IobXNnKQotICAgIHsKLSAgICAgICAgY29uc29sZS5lcnJvcihwcmV0dHlGdW5jdGlvbk5h
bWUoKSArICI6ICIgKyBtc2cpOwotICAgIH0KLQotICAgIHZhciByZXN1bHQgPSBpbml0aWFsVmFs
dWU7Ci0gICAgdmFyIHRva2VucyA9IFN0cmluZy50b2tlbml6ZUZvcm1hdFN0cmluZyhmb3JtYXQs
IGZvcm1hdHRlcnMpOwotICAgIHZhciB1c2VkU3Vic3RpdHV0aW9uSW5kZXhlcyA9IHt9OwotCi0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFy
IHRva2VuID0gdG9rZW5zW2ldOwotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSAic3RyaW5n
IikgewotICAgICAgICAgICAgcmVzdWx0ID0gYXBwZW5kKHJlc3VsdCwgdG9rZW4udmFsdWUpOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPT0gInNwZWNpZmllciIpIHsKLSAgICAgICAgICAgIGVycm9yKCJVbmtub3duIHRva2VuIHR5
cGUgXCIiICsgdG9rZW4udHlwZSArICJcIiBmb3VuZC4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuLnN1YnN0aXR1dGlvbkluZGV4ID49IHN1
YnN0aXR1dGlvbnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm90IGVu
b3VnaCBzdWJzdGl0dXRpb25zIGZvciB0aGUgY3VycmVudCBzdWJzdGl0dXRpb25JbmRleAotICAg
ICAgICAgICAgLy8ganVzdCBvdXRwdXQgdGhlIGZvcm1hdCBzcGVjaWZpZXIgbGl0ZXJhbGx5IGFu
ZCBtb3ZlIG9uLgotICAgICAgICAgICAgZXJyb3IoIm5vdCBlbm91Z2ggc3Vic3RpdHV0aW9uIGFy
Z3VtZW50cy4gSGFkICIgKyBzdWJzdGl0dXRpb25zLmxlbmd0aCArICIgYnV0IG5lZWRlZCAiICsg
KHRva2VuLnN1YnN0aXR1dGlvbkluZGV4ICsgMSkgKyAiLCBzbyBzdWJzdGl0dXRpb24gd2FzIHNr
aXBwZWQuIik7Ci0gICAgICAgICAgICByZXN1bHQgPSBhcHBlbmQocmVzdWx0LCAiJSIgKyAodG9r
ZW4ucHJlY2lzaW9uID4gLTEgPyB0b2tlbi5wcmVjaXNpb24gOiAiIikgKyB0b2tlbi5zcGVjaWZp
ZXIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICB1c2VkU3Vi
c3RpdHV0aW9uSW5kZXhlc1t0b2tlbi5zdWJzdGl0dXRpb25JbmRleF0gPSB0cnVlOwotCi0gICAg
ICAgIGlmICghKHRva2VuLnNwZWNpZmllciBpbiBmb3JtYXR0ZXJzKSkgewotICAgICAgICAgICAg
Ly8gRW5jb3VudGVyZWQgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciwgdHJlYXQgYXMg
YSBzdHJpbmcuCi0gICAgICAgICAgICB3YXJuKCJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVy
IFx1MjAxQyIgKyB0b2tlbi5zcGVjaWZpZXIgKyAiXHUyMDFELiBUcmVhdGluZyBhcyBhIHN0cmlu
Zy4iKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIHN1YnN0aXR1dGlvbnNb
dG9rZW4uc3Vic3RpdHV0aW9uSW5kZXhdKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gYXBwZW5kKHJlc3VsdCwgZm9ybWF0dGVyc1t0b2tlbi5z
cGVjaWZpZXJdKHN1YnN0aXR1dGlvbnNbdG9rZW4uc3Vic3RpdHV0aW9uSW5kZXhdLCB0b2tlbikp
OwotICAgIH0KLQotICAgIHZhciB1bnVzZWRTdWJzdGl0dXRpb25zID0gW107Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzdWJzdGl0dXRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChp
IGluIHVzZWRTdWJzdGl0dXRpb25JbmRleGVzKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIHVudXNlZFN1YnN0aXR1dGlvbnMucHVzaChzdWJzdGl0dXRpb25zW2ldKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4geyBmb3JtYXR0ZWRSZXN1bHQ6IHJlc3VsdCwgdW51c2VkU3Vic3RpdHV0aW9u
czogdW51c2VkU3Vic3RpdHV0aW9ucyB9OwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSBx
dWVyeQotICogQHBhcmFtIHtib29sZWFufSBjYXNlU2Vuc2l0aXZlCi0gKiBAcGFyYW0ge2Jvb2xl
YW59IGlzUmVnZXgKLSAqIEByZXR1cm4ge1JlZ0V4cH0KLSAqLwotZnVuY3Rpb24gY3JlYXRlU2Vh
cmNoUmVnZXgocXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpCi17Ci0gICAgdmFyIHJlZ2V4
RmxhZ3MgPSBjYXNlU2Vuc2l0aXZlID8gImciIDogImdpIjsKLSAgICB2YXIgcmVnZXhPYmplY3Q7
Ci0KLSAgICBpZiAoaXNSZWdleCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmVnZXhP
YmplY3QgPSBuZXcgUmVnRXhwKHF1ZXJ5LCByZWdleEZsYWdzKTsKLSAgICAgICAgfSBjYXRjaCAo
ZSkgewotICAgICAgICAgICAgLy8gU2lsZW50IGNhdGNoLgotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKCFyZWdleE9iamVjdCkKLSAgICAgICAgcmVnZXhPYmplY3QgPSBjcmVhdGVQbGFpblRl
eHRTZWFyY2hSZWdleChxdWVyeSwgcmVnZXhGbGFncyk7Ci0KLSAgICByZXR1cm4gcmVnZXhPYmpl
Y3Q7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5Ci0gKiBAcGFyYW0ge3N0cmlu
Zz19IGZsYWdzCi0gKiBAcmV0dXJuIHshUmVnRXhwfQotICovCi1mdW5jdGlvbiBjcmVhdGVQbGFp
blRleHRTZWFyY2hSZWdleChxdWVyeSwgZmxhZ3MpCi17Ci0gICAgLy8gVGhpcyBzaG91bGQgYmUg
a2VwdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIENvbnRlbnRTZWFyY2hVdGlscy5jcHAuCi0gICAg
dmFyIHJlZ2V4U3BlY2lhbENoYXJhY3RlcnMgPSBTdHJpbmcucmVnZXhTcGVjaWFsQ2hhcmFjdGVy
cygpOwotICAgIHZhciByZWdleCA9ICIiOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnku
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGMgPSBxdWVyeS5jaGFyQXQoaSk7Ci0gICAgICAg
IGlmIChyZWdleFNwZWNpYWxDaGFyYWN0ZXJzLmluZGV4T2YoYykgIT0gLTEpCi0gICAgICAgICAg
ICByZWdleCArPSAiXFwiOwotICAgICAgICByZWdleCArPSBjOwotICAgIH0KLSAgICByZXR1cm4g
bmV3IFJlZ0V4cChyZWdleCwgZmxhZ3MgfHwgIiIpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7UmVn
RXhwfSByZWdleAotICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQKLSAqIEByZXR1cm4ge251bWJl
cn0KLSAqLwotZnVuY3Rpb24gY291bnRSZWdleE1hdGNoZXMocmVnZXgsIGNvbnRlbnQpCi17Ci0g
ICAgdmFyIHRleHQgPSBjb250ZW50OwotICAgIHZhciByZXN1bHQgPSAwOwotICAgIHZhciBtYXRj
aDsKLSAgICB3aGlsZSAodGV4dCAmJiAobWF0Y2ggPSByZWdleC5leGVjKHRleHQpKSkgewotICAg
ICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoID4gMCkKLSAgICAgICAgICAgICsrcmVzdWx0OwotICAg
ICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyAxKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUKLSAqIEBw
YXJhbSB7bnVtYmVyfSBzeW1ib2xzQ291bnQKLSAqIEByZXR1cm4ge3N0cmluZ30KLSAqLwotZnVu
Y3Rpb24gbnVtYmVyVG9TdHJpbmdXaXRoU3BhY2VzUGFkZGluZyh2YWx1ZSwgc3ltYm9sc0NvdW50
KQotewotICAgIHZhciBudW1iZXJTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygpOwotICAgIHZhciBw
YWRkaW5nTGVuZ3RoID0gTWF0aC5tYXgoMCwgc3ltYm9sc0NvdW50IC0gbnVtYmVyU3RyaW5nLmxl
bmd0aCk7Ci0gICAgdmFyIHBhZGRpbmdTdHJpbmcgPSBBcnJheShwYWRkaW5nTGVuZ3RoICsgMSku
am9pbigiXHUwMGEwIik7Ci0gICAgcmV0dXJuIHBhZGRpbmdTdHJpbmcgKyBudW1iZXJTdHJpbmc7
Ci19Ci0KLS8qKgotICAqIEByZXR1cm4ge3N0cmluZ30KLSAgKi8KLXZhciBjcmVhdGVPYmplY3RJ
ZGVudGlmaWVyID0gZnVuY3Rpb24oKQotewotICAgIC8vIEl0IGhhcyB0byBiZSBzdHJpbmcgZm9y
IGJldHRlciBwZXJmb3JtYW5jZS4KLSAgICByZXR1cm4gJ18nICsgKytjcmVhdGVPYmplY3RJZGVu
dGlmaWVyLl9sYXN0OwotfQotCi1jcmVhdGVPYmplY3RJZGVudGlmaWVyLl9sYXN0ID0gMDsKLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotdmFyIFNldCA9IGZ1bmN0aW9uKCkKLXsKLSAgICAv
KiogQHR5cGUgIU9iamVjdC48c3RyaW5nLCBPYmplY3Q+ICovCi0gICAgdGhpcy5fc2V0ID0ge307
Ci0gICAgdGhpcy5fc2l6ZSA9IDA7Ci19Ci0KLVNldC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHshT2JqZWN0fSBpdGVtCi0gICAgICovCi0gICAgYWRkOiBmdW5jdGlvbihp
dGVtKQotICAgIHsKLSAgICAgICAgdmFyIG9iamVjdElkZW50aWZpZXIgPSBpdGVtLl9faWRlbnRp
ZmllcjsKLSAgICAgICAgaWYgKCFvYmplY3RJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBvYmpl
Y3RJZGVudGlmaWVyID0gY3JlYXRlT2JqZWN0SWRlbnRpZmllcigpOwotICAgICAgICAgICAgaXRl
bS5fX2lkZW50aWZpZXIgPSBvYmplY3RJZGVudGlmaWVyOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghdGhpcy5fc2V0W29iamVjdElkZW50aWZpZXJdKQotICAgICAgICAgICAgKyt0aGlzLl9zaXpl
OwotICAgICAgICB0aGlzLl9zZXRbb2JqZWN0SWRlbnRpZmllcl0gPSBpdGVtOwotICAgIH0sCi0g
ICAgCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshT2JqZWN0fSBpdGVtCi0gICAgICovCi0gICAg
cmVtb3ZlOiBmdW5jdGlvbihpdGVtKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NldFtpdGVt
Ll9faWRlbnRpZmllcl0pIHsKLSAgICAgICAgICAgIC0tdGhpcy5fc2l6ZTsKLSAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9zZXRbaXRlbS5fX2lkZW50aWZpZXJdOwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4geyFBcnJheS48T2JqZWN0Pn0KLSAgICAgKi8KLSAg
ICBpdGVtczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJh
eSh0aGlzLl9zaXplKTsKLSAgICAgICAgdmFyIGkgPSAwOwotICAgICAgICBmb3IgKHZhciBvYmpl
Y3RJZGVudGlmaWVyIGluIHRoaXMuX3NldCkKLSAgICAgICAgICAgIHJlc3VsdFtpKytdID0gdGhp
cy5fc2V0W29iamVjdElkZW50aWZpZXJdOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFPYmplY3R9IGl0ZW0KLSAgICAgKiBAcmV0dXJu
IHs/T2JqZWN0fQotICAgICAqLwotICAgIGhhc0l0ZW06IGZ1bmN0aW9uKGl0ZW0pCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fc2V0W2l0ZW0uX19pZGVudGlmaWVyXTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIHNpemU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zaXplOwotICAgIH0sCi0KLSAgICBj
bGVhcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2V0ID0ge307Ci0gICAgICAg
IHRoaXMuX3NpemUgPSAwOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwot
dmFyIE1hcCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9tYXAgPSB7fTsKLSAgICB0aGlzLl9z
aXplID0gMDsKLX0KLQotTWFwLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e09iamVjdH0ga2V5Ci0gICAgICogQHBhcmFtIHsqPX0gdmFsdWUKLSAgICAgKi8KLSAgICBwdXQ6
IGZ1bmN0aW9uKGtleSwgdmFsdWUpCi0gICAgewotICAgICAgICB2YXIgb2JqZWN0SWRlbnRpZmll
ciA9IGtleS5fX2lkZW50aWZpZXI7Ci0gICAgICAgIGlmICghb2JqZWN0SWRlbnRpZmllcikgewot
ICAgICAgICAgICAgb2JqZWN0SWRlbnRpZmllciA9IGNyZWF0ZU9iamVjdElkZW50aWZpZXIoKTsK
LSAgICAgICAgICAgIGtleS5fX2lkZW50aWZpZXIgPSBvYmplY3RJZGVudGlmaWVyOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghdGhpcy5fbWFwW29iamVjdElkZW50aWZpZXJdKQotICAgICAgICAg
ICAgKyt0aGlzLl9zaXplOwotICAgICAgICB0aGlzLl9tYXBbb2JqZWN0SWRlbnRpZmllcl0gPSBb
a2V5LCB2YWx1ZV07Ci0gICAgfSwKLSAgICAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVj
dH0ga2V5Ci0gICAgICovCi0gICAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpCi0gICAgewotICAgICAg
ICB2YXIgcmVzdWx0ID0gdGhpcy5fbWFwW2tleS5fX2lkZW50aWZpZXJdOwotICAgICAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgIC0tdGhpcy5f
c2l6ZTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX21hcFtrZXkuX19pZGVudGlmaWVyXTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdFsxXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
QXJyYXkuPE9iamVjdD59Ci0gICAgICovCi0gICAga2V5czogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2xpc3QoMCk7Ci0gICAgfSwKLQotICAgIHZhbHVlczogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2xpc3QoMSk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAotICAgICAqLwotICAgIF9saXN0OiBm
dW5jdGlvbihpbmRleCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkodGhp
cy5fc2l6ZSk7Ci0gICAgICAgIHZhciBpID0gMDsKLSAgICAgICAgZm9yICh2YXIgb2JqZWN0SWRl
bnRpZmllciBpbiB0aGlzLl9tYXApCi0gICAgICAgICAgICByZXN1bHRbaSsrXSA9IHRoaXMuX21h
cFtvYmplY3RJZGVudGlmaWVyXVtpbmRleF07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBrZXkKLSAgICAgKi8KLSAgICBn
ZXQ6IGZ1bmN0aW9uKGtleSkKLSAgICB7Ci0gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX21hcFtr
ZXkuX19pZGVudGlmaWVyXTsKLSAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnlbMV0gOiB1bmRl
ZmluZWQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBrZXkKLSAg
ICAgKi8KLSAgICBjb250YWluczogZnVuY3Rpb24oa2V5KQotICAgIHsKLSAgICAgICAgdmFyIGVu
dHJ5ID0gdGhpcy5fbWFwW2tleS5fX2lkZW50aWZpZXJdOwotICAgICAgICByZXR1cm4gISFlbnRy
eTsKLSAgICB9LAotCi0gICAgc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX3NpemU7Ci0gICAgfSwKLQotICAgIGNsZWFyOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9tYXAgPSB7fTsKLSAgICAgICAgdGhpcy5fc2l6ZSA9IDA7Ci0gICAgfQotfQot
LyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBhc3luYwot
ICogQHBhcmFtIHtmdW5jdGlvbig/c3RyaW5nKT19IGNhbGxiYWNrCi0gKiBAcmV0dXJuIHs/c3Ry
aW5nfQotICovCi1mdW5jdGlvbiBsb2FkWEhSKHVybCwgYXN5bmMsIGNhbGxiYWNrKSAKLXsKLSAg
ICBmdW5jdGlvbiBvblJlYWR5U3RhdGVDaGFuZ2VkKCkgCi0gICAgewotICAgICAgICBpZiAoeGhy
LnJlYWR5U3RhdGUgIT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgewotICAgICAgICAgICAgY2FsbGJh
Y2soeGhyLnJlc3BvbnNlVGV4dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYWxsYmFjayhudWxsKTsgCi0gICB9Ci0KLSAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7Ci0gICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgYXN5bmMpOwotICAgIGlmIChh
c3luYykKLSAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG9uUmVhZHlTdGF0ZUNoYW5n
ZWQ7ICAgICAgICAKLSAgICB4aHIuc2VuZChudWxsKTsKLQotICAgIGlmICghYXN5bmMpIHsKLSAg
ICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgCi0gICAgICAgICAgICByZXR1cm4geGhyLnJl
c3BvbnNlVGV4dDsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiBudWxs
OwotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBTdHJpbmdQb29sKCkK
LXsKLSAgICB0aGlzLnJlc2V0KCk7Ci19Ci0KLVN0cmluZ1Bvb2wucHJvdG90eXBlID0gewotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcKLSAgICAgKiBAcmV0dXJuIHtzdHJp
bmd9Ci0gICAgICovCi0gICAgaW50ZXJuOiBmdW5jdGlvbihzdHJpbmcpCi0gICAgewotICAgICAg
ICAvLyBEbyBub3QgbWVzcyB3aXRoIHNldHRpbmcgX19wcm90b19fIHRvIGFueXRoaW5nIGJ1dCBu
dWxsLCBqdXN0IGhhbmRsZSBpdCBleHBsaWNpdGx5LgotICAgICAgICBpZiAoc3RyaW5nID09PSAi
X19wcm90b19fIikKLSAgICAgICAgICAgIHJldHVybiAiX19wcm90b19fIjsKLSAgICAgICAgdmFy
IHJlc3VsdCA9IHRoaXMuX3N0cmluZ3Nbc3RyaW5nXTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PT0g
dW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICB0aGlzLl9zdHJpbmdzW3N0cmluZ10gPSBzdHJpbmc7
Ci0gICAgICAgICAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX3N0cmluZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSBkZXB0
aExpbWl0Ci0gICAgICovCi0gICAgaW50ZXJuT2JqZWN0U3RyaW5nczogZnVuY3Rpb24ob2JqLCBk
ZXB0aExpbWl0KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiBkZXB0aExpbWl0ICE9PSAibnVt
YmVyIikKLSAgICAgICAgICAgIGRlcHRoTGltaXQgPSAxMDA7Ci0gICAgICAgIGVsc2UgaWYgKC0t
ZGVwdGhMaW1pdCA8IDApCi0gICAgICAgICAgICB0aHJvdyAicmVjdXJzaW9uIGRlcHRoIGxpbWl0
IHJlYWNoZWQgaW4gU3RyaW5nUG9vbC5kZWVwSW50ZXJuKCksIHBlcmhhcHMgYXR0ZW1wdGluZyB0
byB0cmF2ZXJzZSBjeWNsaWNhbCByZWZlcmVuY2VzPyI7Ci0KLSAgICAgICAgZm9yICh2YXIgZmll
bGQgaW4gb2JqKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBvYmpbZmllbGRdKSB7Ci0g
ICAgICAgICAgICBjYXNlICJzdHJpbmciOgotICAgICAgICAgICAgICAgIG9ialtmaWVsZF0gPSB0
aGlzLmludGVybihvYmpbZmllbGRdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgIm9iamVjdCI6Ci0gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5PYmplY3RTdHJp
bmdzKG9ialtmaWVsZF0sIGRlcHRoTGltaXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12YXIgX2ltcG9ydGVkU2NyaXB0cyA9
IHt9OwotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgImRl
YnVnX2RldnRvb2xzIiBmbGFnIHZhbHVlLgotICogLSBJbiBkZWJ1ZyBtb2RlIGl0IGxvYWRzIHNj
cmlwdHMgc3luY2hyb25vdXNseSB2aWEgeGhyIHJlcXVlc3QuCi0gKiAtIEluIHJlbGVhc2UgbW9k
ZSBldmVyeSBvY2N1cnJlbmNlIG9mICJpbXBvcnRTY3JpcHQiIGluIHRoZSBqcyBmaWxlcwotICog
ICB0aGF0IGhhdmUgYmVlbiB3aGl0ZSBsaXN0ZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbSBnZXRzIHJl
cGxhY2VkIHdpdGgKLSAqICAgdGhlIHNjcmlwdCBzb3VyY2UgY29kZSBvbiB0aGUgY29tcGlsYXRp
b24gcGhhc2UuCi0gKiAgIFRoZSBidWlsZCBzeXN0ZW0gd2lsbCB0aHJvdyBhbiBleGNlcHRpb24g
aWYgaXQgZm91bmQgaW1wb3J0U2NyaXB0IGNhbGwKLSAqICAgaW4gb3RoZXIgZmlsZXMuCi0gKgot
ICogVG8gbG9hZCBzY3JpcHRzIGxhemlseSBpbiByZWxlYXNlIG1vZGUgY2FsbCAibG9hZFNjcmlw
dCIgZnVuY3Rpb24uCi0gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0TmFtZQotICovCi1mdW5jdGlv
biBpbXBvcnRTY3JpcHQoc2NyaXB0TmFtZSkKLXsKLSAgICBpZiAoX2ltcG9ydGVkU2NyaXB0c1tz
Y3JpcHROYW1lXSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKLSAgICBfaW1wb3J0ZWRTY3JpcHRzW3NjcmlwdE5hbWVdID0gdHJ1ZTsKLSAgICBp
ZiAod2luZG93LmZsYXR0ZW5JbXBvcnRzKQotICAgICAgICBzY3JpcHROYW1lID0gc2NyaXB0TmFt
ZS5zcGxpdCgiLyIpLnJldmVyc2UoKVswXTsKLSAgICB4aHIub3BlbigiR0VUIiwgc2NyaXB0TmFt
ZSwgZmFsc2UpOwotICAgIHhoci5zZW5kKG51bGwpOwotICAgIGlmICgheGhyLnJlc3BvbnNlVGV4
dCkKLSAgICAgICAgdGhyb3cgImVtcHR5IHJlc3BvbnNlIGFycml2ZWQgZm9yIHNjcmlwdCAnIiAr
IHNjcmlwdE5hbWUgKyAiJyI7Ci0gICAgdmFyIHNvdXJjZVVSTCA9IFdlYkluc3BlY3Rvci5QYXJz
ZWRVUkwuY29tcGxldGVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYsIHNjcmlwdE5hbWUpOyAKLSAg
ICB3aW5kb3cuZXZhbCh4aHIucmVzcG9uc2VUZXh0ICsgIlxuLy9AIHNvdXJjZVVSTD0iICsgc291
cmNlVVJMKTsKLX0KLQotdmFyIGxvYWRTY3JpcHQgPSBpbXBvcnRTY3JpcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDQyNjE2NmIuLmUyZTU0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMTAtMTAg
IE1hcmNlbG8gTW9yYWlzICA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogUmVtb3ZlIHRoZSBvbGQgZnJvbnQtZW5kIGZyb20gV2ViS2l0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyOTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJy
eS5jbWFrZTogUmVtb3ZlZCB0aGUgcmVmZXJlbmNlcyBmb3IgdGhlIG9sZAorICAgICAgICBpbnNw
ZWN0b3IgZnJvbnQtZW5kLgorCiAyMDEzLTEwLTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4ZWQgV2luNjQgbGlua2luZy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNWRhMzE2Yi4uMGNiNWU4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTIzNCwyNiArMjM0LDYgQEAg
aWYgKEVOQUJMRV9WSURFT19UUkFDSykKICAgICApCiBlbmRpZiAoKQogCi1pbnN0YWxsKERJUkVD
VE9SWSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvZnJvbnQtZW5kLwotICAgICAgICBERVNUSU5B
VElPTiAuLi8uLi91c3Ivc2hhcmUvd2Via2l0L2luc3BlY3Rvci8KLSAgICAgICAgRklMRVNfTUFU
Q0hJTkcgUEFUVEVSTiAiKi5qcyIpCi1pbnN0YWxsKERJUkVDVE9SWSAke1dFQkNPUkVfRElSfS9p
bnNwZWN0b3IvZnJvbnQtZW5kLwotICAgICAgICBERVNUSU5BVElPTiAuLi8uLi91c3Ivc2hhcmUv
d2Via2l0L2luc3BlY3Rvci8KLSAgICAgICAgRklMRVNfTUFUQ0hJTkcgUEFUVEVSTiAiKi5jc3Mi
KQotaW5zdGFsbChESVJFQ1RPUlkgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL2Zyb250LWVuZC8K
LSAgICAgICAgREVTVElOQVRJT04gLi4vLi4vdXNyL3NoYXJlL3dlYmtpdC9pbnNwZWN0b3IvCi0g
ICAgICAgIEZJTEVTX01BVENISU5HIFBBVFRFUk4gIioucG5nIikKLWluc3RhbGwoRElSRUNUT1JZ
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9mcm9udC1lbmQvCi0gICAgICAgIERFU1RJTkFUSU9O
IC4uLy4uL3Vzci9zaGFyZS93ZWJraXQvaW5zcGVjdG9yLwotICAgICAgICBGSUxFU19NQVRDSElO
RyBQQVRURVJOICIqLmpwZyIpCi1pbnN0YWxsKERJUkVDVE9SWSAke1dFQkNPUkVfRElSfS9pbnNw
ZWN0b3IvZnJvbnQtZW5kLwotICAgICAgICBERVNUSU5BVElPTiAuLi8uLi91c3Ivc2hhcmUvd2Vi
a2l0L2luc3BlY3Rvci8KLSAgICAgICAgRklMRVNfTUFUQ0hJTkcgUEFUVEVSTiAiKi5naWYiKQot
aW5zdGFsbChGSUxFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vaW5zcGVjdG9yQkIu
aHRtbAotICAgICAgICAgICAgICAke1dFQktJVF9ESVJ9L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvaW5zcGVjdG9yQkIuanMKLSAgICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotICAgICAgICBERVNUSU5BVElPTiAu
Li8uLi91c3Ivc2hhcmUvd2Via2l0L2luc3BlY3Rvci8pCi0KIGlmIChOT1QgUFVCTElDX0JVSUxE
KQogICAgICMgQWRkIHRoZSBjdXN0b20gdGFyZ2V0IHRvIGJ1aWxkIHRoZSBob3N0LXNpZGUgSW1h
Z2VEaWZmIGJpbmFyeS4KICAgICAjIFJldXNlIHRoZSBRdCB2ZXJzaW9uLgpAQCAtMjY2LDEzICsy
NDYsNiBAQCBpZiAoTk9UIFBVQkxJQ19CVUlMRCkKICAgICApCiBlbmRpZiAoKQogCi1hZGRfY3Vz
dG9tX3RhcmdldCgKLSAgICBpbnNwZWN0b3IgQUxMCi0gICAgY29tbWFuZCBjcCAke1dFQkNPUkVf
RElSfS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9pbnNwZWN0b3JCQi5odG1sICYmIGVjaG8gJzxzY3JpcHQgc3JjPSJpbnNw
ZWN0b3JCQi5qcyI+PC9zY3JpcHQ+JyAgPj4gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L2luc3BlY3RvckJCLmh0bWwKLSAgICBERVBFTkRTIFdlYkNvcmUKLSAgICBDT01NRU5UICJXZWIg
SW5zcGVjdG9yIHJlc291cmNlcyBidWlsZGluZy4uLiIKLSkKLQogIyBHZW5lcmF0ZSBjb250ZW50
cyBmb3IgQWJvdXREYXRhLmNwcAogYWRkX2N1c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vQWJvdXREYXRhSGF2ZUZlYXR1cmVzLmNwcAotLSAK
MS44LjEuMgoK
</data>
<flag name="review"
          id="236349"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213928</attachid>
            <date>2013-10-10 14:31:02 -0700</date>
            <delta_ts>2013-10-10 17:04:13 -0700</delta_ts>
            <desc>Patch to update project files</desc>
            <filename>0001-Web-Inspector-Remove-the-old-front-end-from-WebKit.patch</filename>
            <type>text/plain</type>
            <size>80549</size>
            <attacher name="Marcelo Morais">m.morais</attacher>
            
              <data encoding="base64">RnJvbSAxNzZiNzVlOGFkODc3MTkyYzg1ZjA3ZDYwNGIxZjNlZmMzNGQzNTBlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJjZWxvIE1vcmFpcyA8bS5tb3JhaXNAc2Ftc3VuZy5jb20+
CkRhdGU6IFRodSwgMTAgT2N0IDIwMTMgMTc6MDI6MzcgLTA0MDAKU3ViamVjdDogW1BBVENIXSBX
ZWIgSW5zcGVjdG9yOiBSZW1vdmUgdGhlIG9sZCBmcm9udC1lbmQgZnJvbSBXZWJLaXQKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIyOTUKClJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKTm93IHRoYXQgZWZsL2d0ay9tYWMvd2luIHVzZSB0aGUgbmV3IFdlYiBJ
bnNwZWN0b3IsIHRoZSBvbGQgZnJvbnQtZW5kIGNhbiBiZSByZW1vdmVkLgoKKiBTb3VyY2UvUGxh
dGZvcm1HVEsuY21ha2U6IFJlbW92ZWQuIFRoaXMgZmlsZSB3YXMgdXNpbmcgZmlsZXMgZnJvbSB0
aGUKb2xkIGluc3BlY3Rvciwgbm90IG5lZWRlZCBhbnltb3JlLgoKU291cmNlL1dlYkNvcmU6CgpV
cGRhdGluZyB0aGUgcHJvamVjdCBmaWxlcyB0byByZW1vdmUgYWxsIHJlZmVyZW5jZXMgZnJvbSB0
aGUgb2xkCmluc3BlY3RvciBmcm9udC1lbmQuCgoqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6IFJlbW92ZWQgdGhlIHJlZmVyZW5jZXMgZm9yIHRoZSBvbGQKaW5zcGVjdG9yIGZyb250
LWVuZC4KKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgoq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCiogaW5zcGVjdG9yL2Nv
bXBpbGUtZnJvbnQtZW5kLnB5OiBSZW1vdmVkLgoKU291cmNlL1dlYktpdDoKCiogUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlOiBSZW1vdmVkIHRoZSByZWZlcmVuY2VzIGZvciB0aGUgb2xkCmluc3Bl
Y3RvciBmcm9udC1lbmQuCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMTAgKwogU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTggLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKwogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvaiAgICAgfCAyNTkgLS0tLS0tLQogLi4uL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyAgICAgICAgfCA3ODAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8
ICA0MiAtLQogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5ICAg
ICAgfCA0NDkgLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAxMCArCiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJy
eS5jbWFrZSAgICAgICAgICAgICB8ICAyNyAtCiA5IGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlv
bnMoKyksIDE1NzUgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1BsYXRm
b3JtR1RLLmNtYWtlCiBkZWxldGUgbW9kZSAxMDA3NTUgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2NvbXBpbGUtZnJvbnQtZW5kLnB5CgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IGZjMjEyMjYuLjBhMzJhZmUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0xMC0xMCAgTWFyY2VsbyBNb3JhaXMgIDxtLm1v
cmFpc0BzYW1zdW5nLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW1vdmUgdGhlIG9s
ZCBmcm9udC1lbmQgZnJvbSBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMjI5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlOiBSZW1vdmVkLiBUaGlz
IGZpbGUgd2FzIHVzaW5nIGZpbGVzIGZyb20gdGhlCisgICAgICAgIG9sZCBpbnNwZWN0b3IsIG5v
dCBuZWVkZWQgYW55bW9yZS4KKwogMjAxMy0xMC0wOSAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlh
bmNlQGNpc2NvLmNvbT4KIAogICAgICAgICBbc2g0XSBBZGQgc2g0IHN1cHBvcnQgd2hlbiBidWls
ZGluZyB3aXRoIENNYWtlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlIGIv
U291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
YWY3MTAwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgL2Rldi9u
dWxsCkBAIC0xLDE4ICswLDAgQEAKLWlmIChFTkFCTEVfSU5TUEVDVE9SKQotICAgIGFkZF9jdXN0
b21fdGFyZ2V0KAotICAgICAgICB3ZWItaW5zcGVjdG9yLXJlc291cmNlcyBBTEwKLSAgICAgICAg
Q09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHlfZGlyZWN0b3J5ICR7V0VCQ09SRV9ESVJ9
L2luc3BlY3Rvci9mcm9udC1lbmQgJHtEQVRBX0JVSUxEX0RJUn0vd2ViaW5zcGVjdG9yCi0gICAg
ICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5ICR7V0VCQ09SRV9ESVJ9L0VuZ2xp
c2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyAke0RBVEFfQlVJTERfRElSfS93ZWJpbnNwZWN0
b3IKLSAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkgJHtXRUJLSVQyX0RJ
Un0vVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9mcm9udC1lbmQvaW5zcGVjdG9yUGFnZUluZGV4
Lmh0bWwgJHtEQVRBX0JVSUxEX0RJUn0vd2ViaW5zcGVjdG9yCi0gICAgICAgIENPTU1BTkQgJHtD
TUFLRV9DT01NQU5EfSAtRSBjb3B5ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgJHtEQVRBX0JVSUxEX0RJUn0vd2ViaW5zcGVjdG9yCi0g
ICAgICAgIERFUEVORFMgV2ViQ29yZQotICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtF
X0JJTkFSWV9ESVJ9Ci0gICAgKQotICAgIGluc3RhbGwoRElSRUNUT1JZICIke0RBVEFfQlVJTERf
RElSfS93ZWJpbnNwZWN0b3IiCi0gICAgICAgIERFU1RJTkFUSU9OICIke0RBVEFfSU5TVEFMTF9E
SVJ9L3dlYmluc3BlY3RvciIKLSAgICAgICAgRklMRVNfTUFUQ0hJTkcgUEFUVEVSTiAiKi5qcyIK
LSAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAiKi5odG1sIgotICAgICAgICAgICAgICAg
ICAgICAgICBQQVRURVJOICIqLmNzcyIKLSAgICAgICAgICAgICAgICAgICAgICAgUEFUVEVSTiAi
Ki5naWYiCi0gICAgICAgICAgICAgICAgICAgICAgIFBBVFRFUk4gIioucG5nIikKLWVuZGlmICgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZDBmZmQ0MS4uOTZmMTE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDEzLTEwLTEwICBNYXJjZWxvIE1vcmFpcyAgPG0ubW9yYWlzQHNhbXN1bmcuY29tPgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSB0aGUgb2xkIGZyb250LWVuZCBmcm9tIFdl
YktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIy
Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRpbmcgdGhlIHByb2plY3QgZmlsZXMgdG8gcmVtb3ZlIGFsbCByZWZlcmVuY2VzIGZyb20gdGhl
IG9sZCAKKyAgICAgICAgaW5zcGVjdG9yIGZyb250LWVuZC4KKworICAgICAgICAqIFdlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2o6IFJlbW92ZWQgdGhlIHJlZmVyZW5jZXMgZm9yIHRoZSBv
bGQKKyAgICAgICAgaW5zcGVjdG9yIGZyb250LWVuZC4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogaW5zcGVjdG9yL2NvbXBp
bGUtZnJvbnQtZW5kLnB5OiBSZW1vdmVkLgorCiAyMDEzLTEwLTEwICBTZXJnaW8gQ29ycmVpYSAg
PHNlcmdpby5jb3JyZWlhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgRml4IGRlYnVnIGJ1aWxk
IGFmdGVyIHIxNTcyMTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCmluZGV4IDM4MzI0YTUuLjA3ZTgwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMjA1ODcsMjY1ICsyMDU4Nyw2IEBA
CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cYmluZGluZ3Ncc2NyaXB0c1xJRExBdHRyaWJ1dGVzLnR4
dCIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xzY3JpcHRzXElETFBhcnNlci5w
bSIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xzY3JpcHRzXHByZXByb2Nlc3Mt
aWRscy5wbCIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEFk
dmFuY2VkU2VhcmNoQ29udHJvbGxlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEFwcGxpY2F0aW9uQ2FjaGVJdGVtc1ZpZXcuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBcHBsaWNhdGlvbkNhY2hlTW9kZWwu
anMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBdWRpdENh
dGVnb3JpZXMuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxBdWRpdEZvcm1hdHRlcnMuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxBdWRpdExhdW5jaGVyVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXEF1ZGl0UmVzdWx0Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEF1ZGl0UnVsZXMuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxhdWRpdHNQYW5lbC5jc3MiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBdWRpdHNQYW5lbC5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJvdHRvbVVwUHJv
ZmlsZURhdGFHcmlkVHJlZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXGJyZWFkY3J1bWJMaXN0LmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXEJyZWFrcG9pbnRNYW5hZ2VyLmpzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENhbGxTdGFja1Np
ZGViYXJQYW5lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcY2FudmFzUHJvZmlsZXIuY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcQ2FudmFzUHJvZmlsZVZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxDaGVja2JveC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGNtZGV2dG9vbHMuY3NzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY21cY29kZW1pcnJvci5jc3MiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjb2RlbWlycm9yLmpz
IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29kZU1pcnJv
clRleHRFZGl0b3IuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxDb2xvci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXENvbXBpbGVyU2NyaXB0TWFwcGluZy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVNZXNzYWdlLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29sZU1vZGVsLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29sZVBhbmVsLmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29sZVZpZXcuanMiIC8+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb250ZW50UHJvdmlk
ZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb250
ZW50UHJvdmlkZXJzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcQ29udGV4dE1lbnUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxDb29raWVJdGVtc1ZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxDb29raWVQYXJzZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb29raWVzVGFibGUuanMiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDUFVQcm9maWxlVmlldy5qcyIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGNzcy5qcyIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENTU01ldGFkYXRhLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ1NTTmFtZWRGbG93
Q29sbGVjdGlvbnNWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcY3NzTmFtZWRGbG93cy5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxDU1NOYW1lZEZsb3dWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENTU1N0eWxlTW9kZWwu
anMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEYXRhYmFz
ZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERhdGFi
YXNlUXVlcnlWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRGF0YWJhc2VUYWJsZVZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxkYXRhR3JpZC5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxEYXRhR3JpZC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXERlYnVnZ2VyTW9kZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEZWJ1Z2dlclNjcmlwdE1hcHBpbmcuanMiIC8+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEZWZhdWx0U2NyaXB0
TWFwcGluZy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XERlZmF1bHRUZXh0RWRpdG9yLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcZGlhbG9nLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXERpYWxvZy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXERpcmVjdG9yeUNvbnRlbnRWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRG9ja0NvbnRyb2xsZXIuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxET01BZ2VudC5qcyIgLz4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTUJyZWFrcG9pbnRzU2lkZWJh
clBhbmUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxE
T01FeHRlbnNpb24uanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxET01QcmVzZW50YXRpb25VdGlscy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXERPTVN0b3JhZ2UuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxET01TdG9yYWdlSXRlbXNWaWV3LmpzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRE9NU3ludGF4SGlnaGxpZ2h0ZXIu
anMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEcmF3ZXIu
anMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxlbGVtZW50
c1BhbmVsLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XEVsZW1lbnRzUGFuZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxFbGVtZW50c1BhbmVsRGVzY3JpcHRvci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEVsZW1lbnRzVHJlZU91dGxpbmUuanMiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFbXB0eVZpZXcuanMiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFdmVudExpc3RlbmVyc1Np
ZGViYXJQYW5lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcRXh0ZW5zaW9uQVBJLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcRXh0ZW5zaW9uQXVkaXRDYXRlZ29yeS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvblBhbmVsLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRXh0ZW5zaW9uUmVnaXN0cnlTdHViLmpz
IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRXh0ZW5zaW9u
U2VydmVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
RXh0ZW5zaW9uVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXEZpbGVDb250ZW50Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEZpbGVNYW5hZ2VyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZU1hcHBpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGaWxlU3lzdGVtTWFwcGluZy5qcyIgLz4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZpbGVTeXN0ZW1Nb2RlbC5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZpbGVTeXN0ZW1W
aWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmls
ZVN5c3RlbVdvcmtzcGFjZVByb3ZpZGVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcRmlsZVV0aWxzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcZmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmNzcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZpbHRlcmVkSXRlbVNl
bGVjdGlvbkRpYWxvZy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXEZsYW1lQ2hhcnQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxGb250Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXEdvVG9MaW5lRGlhbG9nLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcSGFuZGxlclJlZ2lzdHJ5LmpzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSEFSRW50cnkuanMiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxoZWFwUHJvZmlsZXIuY3NzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90LmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90
RGF0YUdyaWRzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcSGVhcFNuYXBzaG90R3JpZE5vZGVzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90TG9hZGVyLmpzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90UHJveHkuanMiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxIZWFwU25hcHNob3RWaWV3
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNu
YXBzaG90V29ya2VyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcSGVhcFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGhlbHBTY3JlZW4uY3NzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVscFNjcmVlbi5qcyIgLz4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGh0bWxtaXhlZC5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGNsb3NlYnJhY2tl
dHMuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxt
YXRjaGJyYWNrZXRzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcSW1hZ2VWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcSW5kZXhlZERCTW9kZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxpbmRleGVkREJWaWV3cy5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJbmRleGVkREJWaWV3cy5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGluc3BlY3Rvci5jc3MiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3IuaHRtbCIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGluc3BlY3Rvci5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEluc3BlY3RvckJh
Y2tlbmQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxp
bnNwZWN0b3JDb21tb24uY3NzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxJbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzIiAvPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcaW5zcGVjdG9yU3ludGF4
SGlnaGxpZ2h0LmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXEluc3BlY3RvclZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxJc29sYXRlZEZpbGVTeXN0ZW1Nb2RlbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGphdmFzY3JpcHQuanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxKYXZhU2NyaXB0Rm9ybWF0dGVyLmpz
IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSmF2YVNjcmlw
dFNvdXJjZUZyYW1lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcanNkaWZmbGliLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcSlNIZWFwU25hcHNob3QuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxLZXlib2FyZFNob3J0Y3V0LmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTGlua2lmaWVyLmpzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTGl2ZUVkaXRTdXBwb3J0LmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTWV0cmljc1NpZGViYXJQYW5l
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTmF0aXZl
QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXE5hdGl2ZUhlYXBHcmFwaC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5hdmlnYXRvck92ZXJsYXlDb250cm9sbGVyLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcbmF2aWdhdG9yVmll
dy5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOYXZp
Z2F0b3JWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcTmV0d29ya0l0ZW1WaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcTmV0d29ya0xvZy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXG5ldHdvcmtMb2dWaWV3LmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5ldHdvcmtNYW5hZ2VyLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcbmV0d29ya1BhbmVsLmNzcyIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5ldHdvcmtQYW5lbC5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5ldHdvcmtQYW5l
bERlc2NyaXB0b3IuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxOZXR3b3JrUmVxdWVzdC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXE5ldHdvcmtVSVNvdXJjZUNvZGVQcm92aWRlci5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEluc3BlY3RFbGVtZW50TW9kZUNvbnRy
b2xsZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxP
YmplY3QuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxP
YmplY3RQb3BvdmVySGVscGVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMiIC8+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxPdmVycmlkZXNWaWV3LmpzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcT3ZlcnZpZXdHcmlkLmpzIiAvPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUGFuZWwuanMiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxwYW5lbEVuYWJsZXJWaWV3
LmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFBhbmVs
RW5hYmxlclZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxVZ2xpZnlKU1xwYXJzZS1qcy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFBhcnNlZFVSTC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXFBsYWNhcmQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxwb3BvdmVyLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFBvcG92ZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxQcmVzZW50YXRpb25Db25zb2xlTWVzc2FnZUhlbHBlci5q
cyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFByb2ZpbGVE
YXRhR3JpZFRyZWUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxQcm9maWxlTGF1bmNoZXJWaWV3LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcUHJvZmlsZXNQYW5lbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFByb2dyZXNzLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUHJvZ3Jlc3NJbmRpY2F0b3IuanMiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9wZXJ0aWVzU2VjdGlvbi5q
cyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFByb3BlcnRp
ZXNTaWRlYmFyUGFuZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFJlbW90ZU9iamVjdC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXFJlcXVlc3RDb29raWVzVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlcXVlc3RIZWFkZXJzVmlldy5qcyIgLz4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlcXVlc3RIVE1MVmlldy5qcyIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlcXVlc3RKU09O
Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJl
cXVlc3RQcmV2aWV3Vmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFJlcXVlc3RSZXNwb25zZVZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0VGltaW5nVmlldy5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlcXVlc3RWaWV3LmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2UuanMiIC8+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZVNjcmlwdE1h
cHBpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxy
ZXNvdXJjZXNQYW5lbC5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxSZXNvdXJjZXNQYW5lbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFJlc291cmNlVHJlZU1vZGVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2VUeXBlLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVzb3VyY2VVdGlscy5qcyIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHJlc291cmNlVmlldy5jc3Mi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZVZp
ZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXNv
dXJjZVdlYlNvY2tldEZyYW1lVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXHJldmlzaW9uSGlzdG9yeS5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXZpc2lvbkhpc3RvcnlWaWV3LmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUnVudGltZU1vZGVsLmpzIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU0FTU1NvdXJjZU1h
cHBpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxT
Y29wZUNoYWluU2lkZWJhclBhbmUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxTY3JpcHQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxTY3JpcHRGb3JtYXR0ZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMiIC8+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHRzTmF2aWdhdG9yLmpz
IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2NyaXB0U25p
cHBldE1vZGVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcc2NyaXB0c1BhbmVsLmNzcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFNjcmlwdHNQYW5lbC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFNjcmlwdHNQYW5lbERlc2NyaXB0b3IuanMiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHRzU2VhcmNoU2NvcGUuanMiIC8+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTZWFyY2hDb250cm9s
bGVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2Vj
dGlvbi5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNl
dHRpbmdzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
U2V0dGluZ3NTY3JlZW4uanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxTaG9ydGN1dHNTY3JlZW4uanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxTaG93TW9yZURhdGFHcmlkTm9kZS5qcyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNpZGViYXJPdmVybGF5LmpzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2lkZWJhclBhbmUuanMiIC8+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTaWRlYmFyVHJlZUVs
ZW1lbnQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxT
aWRlYmFyVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFNpbXBsZVdvcmtzcGFjZVByb3ZpZGVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcU25pcHBldEphdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNuaXBwZXRTdG9yYWdl
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU29mdENv
bnRleHRNZW51LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcU291cmNlQ1NTVG9rZW5pemVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcU291cmNlRnJhbWUuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VIVE1MVG9rZW5pemVyLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU291cmNlSmF2YVNjcmlwdFRva2VuaXpl
ci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJj
ZU1hcC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNv
dXJjZU1hcHBpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxTb3VyY2VUb2tlbml6ZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxzcGVjdHJ1bS5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxTcGVjdHJ1bS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXHNwbGl0Vmlldy5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxTcGxpdFZpZXcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTdGF0dXNCYXJCdXR0b24uanMiIC8+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTdHlsZVNoZWV0T3V0bGluZURpYWxv
Zy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFN0eWxl
c1NpZGViYXJQYW5lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcU3R5bGVzU291cmNlTWFwcGluZy5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXFRhYmJlZEVkaXRvckNvbnRhaW5lci5qcyIgLz4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHRhYmJlZFBhbmUuY3NzIiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGFiYmVkUGFuZS5qcyIgLz4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRlc3RDb250cm9sbGVy
LmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcdGV4dEVk
aXRvci5jc3MiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxU
ZXh0RWRpdG9yLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvck1vZGVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcdGV4dFByb21wdC5jc3MiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0UHJvbXB0LmpzIiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVGcmFtZUNvbnRyb2xs
ZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUaW1l
bGluZUdyaWQuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxUaW1lbGluZU1hbmFnZXIuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxUaW1lbGluZU1vZGVsLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVPdmVydmlld1BhbmUuanMiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFx0aW1lbGluZVBhbmVsLmNzcyIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRpbWVsaW5lUGFuZWwuanMi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUaW1lbGluZVBh
bmVsRGVzY3JpcHRvci5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFRpbWVsaW5lUHJlc2VudGF0aW9uTW9kZWwuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUb29sYmFyLmpzIiAvPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanMi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFx0cmVlb3V0bGlu
ZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFVJU291
cmNlQ29kZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XFVJU291cmNlQ29kZUZyYW1lLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcVUlTdHJpbmcuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxVSVV0aWxzLmpzIiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcVXNlckFnZW50U3VwcG9ydC5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFVzZXJNZXRyaWNzLmpzIiAvPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcdXRpbGl0aWVzLmpzIiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVmlldy5qcyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFdhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFu
ZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFdvcmtl
cnNTaWRlYmFyUGFuZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFdvcmtzcGFjZS5qcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXGNtXHhtbC5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxSZXNvdXJjZXNc
cGx1Z0lucy5qcyIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSJXZWJDb3JlUG9zdEJ1aWxkLmNtZCIg
Lz4KICAgICA8Tm9uZSBJbmNsdWRlPSJXZWJDb3JlUHJlQnVpbGQuY21kIiAvPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
CmluZGV4IGFhYjJkOTYuLjcyMjA0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTI3NCw5ICsyNzQsNiBA
QAogICAgIDxGaWx0ZXIgSW5jbHVkZT0iaW5zcGVjdG9yIj4KICAgICAgIDxVbmlxdWVJZGVudGlm
aWVyPns1N2E5MzI1OS1iYzI1LTQ0ZDUtYmYzYi0wN2IyYmVkNDQwYmR9PC9VbmlxdWVJZGVudGlm
aWVyPgogICAgIDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iaW5zcGVjdG9yXGZyb250
LWVuZCI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57MzJhYmFkNzgtZTQ4NC00ZWJiLWIxODEt
M2E2MTJiZGY2N2Y5fTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KICAgICA8Rmls
dGVyIEluY2x1ZGU9IkZvcndhcmRpbmdIZWFkZXJzXHJ1bnRpbWUiPgogICAgICAgPFVuaXF1ZUlk
ZW50aWZpZXI+ezI5MzQ4YjlhLTg1MWUtNDNhYi1iMTBiLTY1M2NjMGQ4OTAyYX08L1VuaXF1ZUlk
ZW50aWZpZXI+CiAgICAgPC9GaWx0ZXI+CkBAIC0xNDU4Miw3ODMgKzE0NTc5LDYgQEAKICAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xzY3JpcHRzXHByZXByb2Nlc3MtaWRscy5wbCI+CiAg
ICAgICA8RmlsdGVyPmJpbmRpbmdzXHNjcmlwdHM8L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBZHZhbmNlZFNlYXJjaENvbnRy
b2xsZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXBw
bGljYXRpb25DYWNoZUl0ZW1zVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9u
dC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxBcHBsaWNhdGlvbkNhY2hlTW9kZWwuanMiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRDYXRlZ29yaWVzLmpzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEF1ZGl0Rm9ybWF0dGVycy5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBdWRpdExhdW5jaGVyVmll
dy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBdWRpdFJl
c3VsdFZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
QXVkaXRSdWxlcy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxhdWRpdHNQYW5lbC5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcQXVkaXRzUGFuZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGJyZWFkY3J1bWJMaXN0LmNzcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCcmVha3BvaW50TWFuYWdlci5qcyI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCcmVha3BvaW50c1Np
ZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XENhbGxTdGFja1NpZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250
LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXGNhbnZhc1Byb2ZpbGVyLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxDYW52YXNQcm9maWxlVmlldy5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDaGVja2JveC5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjbWRldnRvb2xzLmNzcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjb2RlbWlycm9yLmNzcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjb2RlbWlycm9yLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvZGVNaXJyb3JU
ZXh0RWRpdG9yLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XENvbG9yLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENv
bXBpbGVyU2NyaXB0TWFwcGluZy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxDb25zb2xlTWVzc2FnZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxDb25zb2xlTW9kZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29sZVBhbmVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5z
cGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnRlbnRQcm92aWRlci5qcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb250ZW50UHJvdmlkZXJzLmpzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnRleHRNZW51Lmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvb2tpZUl0ZW1z
Vmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAg
ICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb29r
aWVQYXJzZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
Q29va2llc1RhYmxlLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXENQVVByb2ZpbGVWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXGNtXGNzcy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxDU1NNZXRhZGF0YS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxDU1NOYW1lZEZsb3dDb2xsZWN0aW9uc1ZpZXcuanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY3NzTmFtZWRGbG93cy5jc3MiPgotICAgICAg
PEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ1NTTmFtZWRGbG93Vmlldy5qcyI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDU1NTZWxlY3RvclBy
b2ZpbGVWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XENTU1N0eWxlTW9kZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRGF0YWJhc2UuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRGF0YWJhc2VRdWVyeVZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcRGF0YWJhc2VUYWJsZVZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcZGF0YUdyaWQuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5z
cGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERhdGFHcmlkLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5z
cGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERlYnVnZ2VyTW9kZWwuanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRGVidWdnZXJTY3JpcHRNYXBwaW5nLmpzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERlZmF1bHRTY3JpcHRN
YXBwaW5nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERl
ZmF1bHRUZXh0RWRpdG9yLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXGRpYWxvZy5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRGlhbG9nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmls
dGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXERpcmVjdG9yeUNvbnRlbnRWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXERvY2tDb250cm9sbGVyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTUFnZW50LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMiPgotICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRE9NRXh0ZW5zaW9uLmpzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTVByZXNlbnRhdGlv
blV0aWxzLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERP
TVN0b3JhZ2UuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
RE9NU3RvcmFnZUl0ZW1zVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxET01TeW50YXhIaWdobGlnaHRlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxEcmF3ZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcZWxlbWVudHNQYW5lbC5jc3MiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRWxlbWVudHNQYW5lbC5qcyI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFbGVtZW50c1BhbmVsRGVzY3JpcHRvci5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFbGVtZW50c1Ry
ZWVPdXRsaW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XEVtcHR5Vmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxFdmVudExpc3RlbmVyc1NpZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvbkFQSS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxFeHRlbnNpb25BdWRpdENhdGVnb3J5LmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvblBhbmVsLmpzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEV4dGVuc2lvblJlZ2lz
dHJ5U3R1Yi5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxF
eHRlbnNpb25TZXJ2ZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcRXh0ZW5zaW9uVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxGaWxlQ29udGVudFZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcRmlsZU1hbmFnZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZU1hcHBpbmcuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZVN5c3RlbU1hcHBpbmcuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmlsZVN5c3RlbU1vZGVsLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZpbGVTeXN0ZW1WaWV3Lmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEZpbGVTeXN0ZW1X
b3Jrc3BhY2VQcm92aWRlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxGaWxlVXRpbHMuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcZmlsdGVyZWRJdGVtU2VsZWN0aW9uRGlhbG9nLmNzcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGaWx0ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRmxhbWVDaGFy
dC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxGb250Vmll
dy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxHb1RvTGlu
ZURpYWxvZy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4K
LSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxI
YW5kbGVyUmVnaXN0cnkuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcSEFSRW50cnkuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcaGVhcFByb2ZpbGVyLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxIZWFwU25hcHNob3QuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdEdyaWROb2Rlcy5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxIZWFwU25hcHNob3RMb2Fk
ZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNu
YXBzaG90UHJveHkuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcSGVhcFNuYXBzaG90Vmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1l
bmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxIZWFwU25hcHNob3RXb3JrZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxoZWxwU2NyZWVuLmNzcyI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxIZWxwU2NyZWVuLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGh0bWxtaXhl
ZC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxjbG9z
ZWJyYWNrZXRzLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XGNtXG1hdGNoYnJhY2tldHMuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcSW1hZ2VWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXEluZGV4ZWREQk1vZGVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXGluZGV4ZWREQlZpZXdzLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxJbmRleGVkREJWaWV3cy5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3IuY3NzIj4KLSAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGluc3BlY3Rvci5odG1sIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGluc3BlY3Rvci5qcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJbnNwZWN0b3JCYWNrZW5kLmpzIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGluc3BlY3RvckNvbW1v
bi5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSW5zcGVj
dG9yRnJvbnRlbmRBUEkuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxpbnNwZWN0b3JTeW50YXhIaWdobGlnaHQuY3NzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEluc3BlY3RvclZpZXcuanMi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25l
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSXNvbGF0ZWRGaWxl
U3lzdGVtTW9kZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcY21camF2YXNjcmlwdC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxKYXZhU2NyaXB0Rm9ybWF0dGVyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXEphdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxqc2RpZmZsaWIuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSlNIZWFwU25hcHNob3QuanMiPgotICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcS2V5Ym9hcmRTaG9ydGN1dC5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxMaW5raWZpZXIu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTGl2ZUVkaXRT
dXBwb3J0LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE1l
dHJpY3NTaWRlYmFyUGFuZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxOYXRpdmVCcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5hdGl2ZUhlYXBHcmFwaC5qcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOYXZpZ2F0b3JPdmVybGF5Q29udHJv
bGxlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAg
ICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxuYXZp
Z2F0b3JWaWV3LmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxOYXZpZ2F0b3JWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXE5ldHdvcmtJdGVtVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9u
dC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxOZXR3b3JrTG9nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXG5ldHdvcmtMb2dWaWV3LmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3b3JrTWFuYWdlci5qcyI+Ci0gICAgICA8RmlsdGVy
Pmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxuZXR3b3JrUGFuZWwuY3NzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5ldHdvcmtQYW5lbC5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOZXR3b3JrUGFuZWxEZXNjcmlw
dG9yLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAg
IDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE5ldHdv
cmtSZXF1ZXN0LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XE5ldHdvcmtVSVNvdXJjZUNvZGVQcm92aWRlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxJbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE9iamVjdC5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxPYmplY3RQb3BvdmVySGVscGVy
LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXE9iamVjdFBy
b3BlcnRpZXNTZWN0aW9uLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXE92ZXJyaWRlc1ZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcT3ZlcnZpZXdHcmlkLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFBhbmVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250
LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXHBhbmVsRW5hYmxlclZpZXcuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFBhbmVsRW5hYmxlclZpZXcuanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVWdsaWZ5SlNccGFyc2UtanMuanMiPgotICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUGFyc2VkVVJMLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFBsYWNhcmQuanMiPgotICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRccG9wb3Zlci5jc3MiPgotICAg
ICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUG9wb3Zlci5qcyI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcmVzZW50YXRpb25Db25zb2xl
TWVzc2FnZUhlbHBlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxQcm9maWxlRGF0YUdyaWRUcmVlLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFByb2ZpbGVMYXVuY2hlclZpZXcuanMiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUHJvZmlsZXNQYW5lbC5qcyI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9ncmVzcy5qcyI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9ncmVzc0luZGljYXRvci5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9wZXJ0aWVzU2VjdGlv
bi5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9wZXJ0
aWVzU2lkZWJhclBhbmUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcUmVtb3RlT2JqZWN0LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFJlcXVlc3RDb29raWVzVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0SGVhZGVyc1ZpZXcuanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVxdWVzdEhUTUxWaWV3LmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlcXVlc3RKU09OVmlldy5qcyI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0UHJldmll
d1ZpZXcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmVx
dWVzdFJlc3BvbnNlVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxSZXF1ZXN0VGltaW5nVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxSZXF1ZXN0Vmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZVNjcmlwdE1hcHBpbmcuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRccmVzb3VyY2VzUGFuZWwuY3NzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlc291cmNlc1BhbmVsLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJlc291cmNlVHJl
ZU1vZGVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgot
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFJl
c291cmNlVHlwZS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxSZXNvdXJjZVV0aWxzLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXHJlc291cmNlVmlldy5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcUmVzb3VyY2VWaWV3LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZy
b250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFJlc291cmNlV2ViU29ja2V0RnJhbWVWaWV3LmpzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHJldmlzaW9uSGlzdG9yeS5jc3MiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUmV2aXNpb25IaXN0b3J5
Vmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAg
ICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSdW50
aW1lTW9kZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
U0FTU1NvdXJjZU1hcHBpbmcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcU2NvcGVDaGFpblNpZGViYXJQYW5lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjcmlwdC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHRGb3JtYXR0ZXIuanMiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjcmlwdHNOYXZpZ2F0b3Iu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2NyaXB0U25p
cHBldE1vZGVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XHNjcmlwdHNQYW5lbC5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcU2NyaXB0c1BhbmVsLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFNjcmlwdHNQYW5lbERlc2NyaXB0b3IuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2NyaXB0c1NlYXJjaFNjb3BlLmpzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNlYXJjaENvbnRyb2xsZXIuanMiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgot
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2VjdGlvbi5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTZXR0aW5ncy5qcyI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0g
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTZXR0aW5nc1NjcmVlbi5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTaG9ydGN1dHNT
Y3JlZW4uanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU2hv
d01vcmVEYXRhR3JpZE5vZGUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcU2lkZWJhck92ZXJsYXkuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcU2lkZWJhclBhbmUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
ZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcU2lkZWJhclRyZWVFbGVtZW50LmpzIj4KLSAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNpZGViYXJWaWV3LmpzIj4KLSAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNpbXBsZVdvcmtzcGFjZVByb3ZpZGVyLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNuaXBwZXRKYXZh
U2NyaXB0U291cmNlRnJhbWUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcU25pcHBldFN0b3JhZ2UuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJv
bnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcU29mdENvbnRleHRNZW51LmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJjZUNTU1Rva2VuaXplci5qcyI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VGcmFtZS5qcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VIVE1MVG9rZW5pemVyLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJjZUphdmFT
Y3JpcHRUb2tlbml6ZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9G
aWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcU291cmNlTWFwLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwv
RmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFNvdXJjZU1hcHBpbmcuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQt
ZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcU291cmNlVG9rZW5pemVyLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcZnJvbnQtZW5kXHNwZWN0cnVtLmNzcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxTcGVjdHJ1bS5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxzcGxpdFZpZXcuY3NzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNwbGl0Vmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxTdGF0dXNCYXJCdXR0b24uanMiPgotICAgICAgPEZpbHRl
cj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU3R5bGVTaGVldE91dGxpbmVEaWFsb2cuanMi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25l
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU3R5bGVzU2lkZWJh
clBhbmUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU3R5
bGVzU291cmNlTWFwcGluZy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8
L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxUYWJiZWRFZGl0b3JDb250YWluZXIuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcdGFiYmVkUGFuZS5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGFiYmVkUGFuZS5qcyI+Ci0gICAgICA8RmlsdGVyPmlu
c3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXN0Q29udHJvbGxlci5qcyI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFx0ZXh0RWRpdG9yLmNzcyI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0RWRpdG9yLmpzIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0b3JIaWdobGlnaHRl
ci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0RWRp
dG9yTW9kZWwuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+
Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
dGV4dFByb21wdC5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0
ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcVGV4dFByb21wdC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0Zp
bHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxUaW1lbGluZUZyYW1lQ29udHJvbGxlci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxUaW1lbGluZUdyaWQuanMiPgotICAgICAgPEZpbHRlcj5pbnNw
ZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVNYW5hZ2VyLmpzIj4KLSAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRpbWVsaW5lTW9kZWwuanMiPgotICAgICAg
PEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGltZWxpbmVPdmVydmlld1BhbmUu
anMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9O
b25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcdGltZWxpbmVQ
YW5lbC5jc3MiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGlt
ZWxpbmVQYW5lbC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRl
cj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxUaW1lbGluZVBhbmVsRGVzY3JpcHRvci5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxUaW1lbGluZVByZXNlbnRhdGlvbk1vZGVsLmpzIj4KLSAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRvb2xiYXIuanMiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVG9wRG93blByb2ZpbGVEYXRhR3JpZFRy
ZWUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAg
PC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcdHJlZW91
dGxpbmUuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0g
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVUlT
b3VyY2VDb2RlLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVy
PgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XFVJU291cmNlQ29kZUZyYW1lLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFVJU3RyaW5nLmpzIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVu
ZDwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXFVJVXRpbHMuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5k
PC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcVXNlckFnZW50U3VwcG9ydC5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxVc2VyTWV0cmljcy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
clxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFx1dGlsaXRpZXMuanMiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcVmlldy5qcyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxm
cm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxXYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUuanMiPgotICAgICAg
PEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcV29ya2Vyc1NpZGViYXJQYW5lLmpz
Ij4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXGZyb250LWVuZDwvRmlsdGVyPgotICAgIDwvTm9u
ZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFdvcmtzcGFjZS5q
cyI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvclxmcm9udC1lbmQ8L0ZpbHRlcj4KLSAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVx4bWwuanMi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3JcZnJvbnQtZW5kPC9GaWx0ZXI+Ci0gICAgPC9Ob25l
PgogICAgIDxOb25lIEluY2x1ZGU9IldlYkNvcmVQb3N0QnVpbGQuY21kIiAvPgogICAgIDxOb25l
IEluY2x1ZGU9IldlYkNvcmVQcmVCdWlsZC5jbWQiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5c
Y3NzXG1hdGhtbC5jc3MiPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDVmMzExMzEuLjk4NzgxZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0ODEzLDQ4ICsy
NDgxMyw2IEBACiAvKiBFbmQgUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8q
IEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTFDNUY5RDc2MEUw
OUExQjQwMEU5MUQwQSAvKiBTdHJlYW1saW5lIEluc3BlY3RvciBTb3VyY2UgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQYXRocyA9ICgKLQkJCQkiJChU
QVJHRVRfQlVJTERfRElSKS8kKFVOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFUSCkvaW5z
cGVjdG9yIiwKLQkJCQkiJChTUkNST09UKS9pbnNwZWN0b3IvY29tYmluZS1qYXZhc2NyaXB0LXJl
c291cmNlcy5wbCIsCi0JCQkJIiQoU1JDUk9PVCkvaW5zcGVjdG9yL2lubGluZS1qYXZhc2NyaXB0
LWltcG9ydHMucHkiLAotCQkJKTsKLQkJCW5hbWUgPSAiU3RyZWFtbGluZSBJbnNwZWN0b3IgU291
cmNlIjsKLQkJCW91dHB1dFBhdGhzID0gKAotCQkJCSIkKERFUklWRURfRklMRV9ESVIpL1dlYkNv
cmUvaW5zcGVjdG9yLmh0bWwiLAotCQkJCSIkKERFUklWRURfRklMRV9ESVIpL1dlYkNvcmUvaW5z
cGVjdG9yLmpzIiwKLQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS9XZWJDb3JlL0VsZW1lbnRzUGFu
ZWwuanMiLAotCQkJCSIkKERFUklWRURfRklMRV9ESVIpL1dlYkNvcmUvUmVzb3VyY2VzUGFuZWwu
anMiLAotCQkJCSIkKERFUklWRURfRklMRV9ESVIpL1dlYkNvcmUvTmV0d29ya1BhbmVsLmpzIiwK
LQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS9XZWJDb3JlL1NjcmlwdHNQYW5lbC5qcyIsCi0JCQkJ
IiQoREVSSVZFRF9GSUxFX0RJUikvV2ViQ29yZS9UaW1lbGluZVBhbmVsLmpzIiwKLQkJCQkiJChE
RVJJVkVEX0ZJTEVfRElSKS9XZWJDb3JlL1Byb2ZpbGVzUGFuZWwuanMiLAotCQkJCSIkKERFUklW
RURfRklMRV9ESVIpL1dlYkNvcmUvQXVkaXRzUGFuZWwuanMiLAotCQkJCSIkKERFUklWRURfRklM
RV9ESVIpL1dlYkNvcmUvQ29kZU1pcnJvclRleHRFZGl0b3IuanMiLAotCQkJCSIkKERFUklWRURf
RklMRV9ESVIpL1dlYkNvcmUvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzIiwKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJCXNoZWxsUGF0aCA9IC9i
aW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICIjIERvbid0IGRvIGFueXRoaW5nIGZvciBEZWJ1ZyBi
dWlsZHMsIHNvIHRoZSBJbnNwZWN0b3IgaXMgZWFzaWVyIHRvIGRlYnVnLlxuIyBEb24ndCBkbyBh
bnl0aGluZyBmb3IgUHJvZHVjdGlvbiBidWlsZHMsIHNpbmNlIHRoZSBJbnNwZWN0b3IgaXNuJ3Qg
aW5zdGFsbGVkLlxuaWYgW1sgJHtDT05GSUdVUkFUSU9OOj1EZWJ1Z30gPT0gXCJEZWJ1Z1wiIHx8
ICR7Q09ORklHVVJBVElPTjo9UHJvZHVjdGlvbn0gPT0gXCJQcm9kdWN0aW9uXCIgXV07IHRoZW5c
biAgICBleGl0XG5maVxuXG4jIENvbWJpbmUgYWxsIHNjcmlwdCByZXNvdXJjZXMgaW4gdGhlIGlu
c3BlY3Rvci5odG1sIGZpbGUuXG5cIiRTUkNST09UL2luc3BlY3Rvci9jb21iaW5lLWphdmFzY3Jp
cHQtcmVzb3VyY2VzLnBsXCIgLS1pbnB1dC1odG1sIFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sXCIgLS1nZW5lcmF0ZWQtc2NyaXB0cy1kaXIgXCIke0JVSUxU
X1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJjZXMvV2ViQ29yZVwiIC0tb3V0cHV0LWRpciBcIiR7
REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZVwiIC0tb3V0cHV0LXNjcmlwdC1uYW1lIGluc3BlY3Rv
ci5qc1xuXG4jIElubGluZSBzY3JpcHQgaW1wb3J0cyBpbiBFbGVtZW50c1BhbmVsLmpzIGZpbGUu
XG5cIiRTUkNST09UL2luc3BlY3Rvci9pbmxpbmUtamF2YXNjcmlwdC1pbXBvcnRzLnB5XCIgXCIk
e1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qc1wiIFwiJHtTUkNS
T09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kXCIgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUv
RWxlbWVudHNQYW5lbC5qc1wiXG5cbiMgSW5saW5lIHNjcmlwdCBpbXBvcnRzIGluIFJlc291cmNl
c1BhbmVsLmpzIGZpbGUuXG5cIiRTUkNST09UL2luc3BlY3Rvci9pbmxpbmUtamF2YXNjcmlwdC1p
bXBvcnRzLnB5XCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFu
ZWwuanNcIiBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zyb250LWVuZFwiIFwiJHtERVJJVkVEX0ZJ
TEVfRElSfS9XZWJDb3JlL1Jlc291cmNlc1BhbmVsLmpzXCJcblxuIyBJbmxpbmUgc2NyaXB0IGlt
cG9ydHMgaW4gTmV0d29ya1BhbmVsLmpzIGZpbGUuXG5cIiRTUkNST09UL2luc3BlY3Rvci9pbmxp
bmUtamF2YXNjcmlwdC1pbXBvcnRzLnB5XCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1l
bmQvTmV0d29ya1BhbmVsLmpzXCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmRcIiBc
IiR7REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9OZXR3b3JrUGFuZWwuanNcIlxuXG4jIElubGlu
ZSBzY3JpcHQgaW1wb3J0cyBpbiBTY3JpcHRzUGFuZWwuanMgZmlsZS5cblwiJFNSQ1JPT1QvaW5z
cGVjdG9yL2lubGluZS1qYXZhc2NyaXB0LWltcG9ydHMucHlcIiBcIiR7U1JDUk9PVH0vaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanNcIiBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zy
b250LWVuZFwiIFwiJHtERVJJVkVEX0ZJTEVfRElSfS9XZWJDb3JlL1NjcmlwdHNQYW5lbC5qc1wi
XG5cbiMgSW5saW5lIHNjcmlwdCBpbXBvcnRzIGluIFRpbWVsaW5lUGFuZWwuanMgZmlsZS5cblwi
JFNSQ1JPT1QvaW5zcGVjdG9yL2lubGluZS1qYXZhc2NyaXB0LWltcG9ydHMucHlcIiBcIiR7U1JD
Uk9PVH0vaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzXCIgXCIke1NSQ1JPT1R9
L2luc3BlY3Rvci9mcm9udC1lbmRcIiBcIiR7REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9UaW1l
bGluZVBhbmVsLmpzXCJcblxuIyBJbmxpbmUgc2NyaXB0IGltcG9ydHMgaW4gUHJvZmlsZXNQYW5l
bC5qcyBmaWxlLlxuXCIkU1JDUk9PVC9pbnNwZWN0b3IvaW5saW5lLWphdmFzY3JpcHQtaW1wb3J0
cy5weVwiIFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanNc
IiBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zyb250LWVuZFwiIFwiJHtERVJJVkVEX0ZJTEVfRElS
fS9XZWJDb3JlL1Byb2ZpbGVzUGFuZWwuanNcIlxuXG4jIElubGluZSBzY3JpcHQgaW1wb3J0cyBp
biBBdWRpdHNQYW5lbC5qcyBmaWxlLlxuXCIkU1JDUk9PVC9pbnNwZWN0b3IvaW5saW5lLWphdmFz
Y3JpcHQtaW1wb3J0cy5weVwiIFwiJHtTUkNST09UfS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0
c1BhbmVsLmpzXCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmRcIiBcIiR7REVSSVZF
RF9GSUxFX0RJUn0vV2ViQ29yZS9BdWRpdHNQYW5lbC5qc1wiXG5cbiMgSW5saW5lIHNjcmlwdCBp
bXBvcnRzIGluIENvZGVNaXJyb3JUZXh0RWRpdG9yLmpzIGZpbGUuXG5cIiRTUkNST09UL2luc3Bl
Y3Rvci9pbmxpbmUtamF2YXNjcmlwdC1pbXBvcnRzLnB5XCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29kZU1pcnJvclRleHRFZGl0b3IuanNcIiBcIiR7U1JDUk9PVH0vaW5zcGVj
dG9yL2Zyb250LWVuZFwiIFwiJHtERVJJVkVEX0ZJTEVfRElSfS9XZWJDb3JlL0NvZGVNaXJyb3JU
ZXh0RWRpdG9yLmpzXCJcblxuIyBJbmxpbmUgc2NyaXB0IGltcG9ydHMgaW4gU2NyaXB0Rm9ybWF0
dGVyV29ya2VyLmpzIGZpbGUuXG5cIiRTUkNST09UL2luc3BlY3Rvci9pbmxpbmUtamF2YXNjcmlw
dC1pbXBvcnRzLnB5XCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9y
bWF0dGVyV29ya2VyLmpzXCIgXCIke1NSQ1JPT1R9L2luc3BlY3Rvci9mcm9udC1lbmRcIiBcIiR7
REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanNcIlxuXG5p
ZiBbIC1kIFwiJHtUQVJHRVRfQlVJTERfRElSfS8ke1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xE
RVJfUEFUSH0vaW5zcGVjdG9yXCIgXTsgdGhlblxuICAgIGNkIFwiJHtUQVJHRVRfQlVJTERfRElS
fS8ke1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFUSH0vaW5zcGVjdG9yXCJcblxuICAg
ICMgUmVtb3ZlIGFueSB0b3AtbGV2ZWwgSmF2YVNjcmlwdCBmaWxlcywgc2luY2UgdGhleSB3aWxs
IGJlIHJlcGxhY2VkIHdpdGggdGhlIGNvbWJpbmVkIGZpbGUuXG4gICAgIyBLZWVwIEluc3BlY3Rv
ckJhY2tlbmQqLmpzIGZpbGVzIHNvIHRoZXkgY2FuIGJlIHVzZWQgYnkgb3RoZXIgZnJvbnQtZW5k
cy5cbiAgICBmaW5kIC4gLWRlcHRoIDEgLW5hbWUgXCIqLmpzXCIgLW5vdCAtbmFtZSBcIkluc3Bl
Y3RvckJhY2tlbmQqLmpzXCIgfCB4YXJncyBybSAtcmZcblxuICAgICMgQ29weSB0aGUgbW9kaWZp
ZWQgSFRNTCBmaWxlIGFuZCB0aGUgY29tYmluZWQgc2NyaXB0cy5cbiAgICBjcCBcIiR7REVSSVZF
RF9GSUxFX0RJUn0vV2ViQ29yZS9pbnNwZWN0b3IuaHRtbFwiIGluc3BlY3Rvci5odG1sXG4gICAg
Y3AgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUvaW5zcGVjdG9yLmpzXCIgaW5zcGVjdG9y
LmpzXG4gICAgY3AgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUvRWxlbWVudHNQYW5lbC5q
c1wiIEVsZW1lbnRzUGFuZWwuanNcbiAgICBjcCBcIiR7REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29y
ZS9SZXNvdXJjZXNQYW5lbC5qc1wiIFJlc291cmNlc1BhbmVsLmpzXG4gICAgY3AgXCIke0RFUklW
RURfRklMRV9ESVJ9L1dlYkNvcmUvTmV0d29ya1BhbmVsLmpzXCIgTmV0d29ya1BhbmVsLmpzXG4g
ICAgY3AgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUvU2NyaXB0c1BhbmVsLmpzXCIgU2Ny
aXB0c1BhbmVsLmpzXG4gICAgY3AgXCIke0RFUklWRURfRklMRV9ESVJ9L1dlYkNvcmUvVGltZWxp
bmVQYW5lbC5qc1wiIFRpbWVsaW5lUGFuZWwuanNcbiAgICBjcCBcIiR7REVSSVZFRF9GSUxFX0RJ
Un0vV2ViQ29yZS9Qcm9maWxlc1BhbmVsLmpzXCIgUHJvZmlsZXNQYW5lbC5qc1xuICAgIGNwIFwi
JHtERVJJVkVEX0ZJTEVfRElSfS9XZWJDb3JlL0F1ZGl0c1BhbmVsLmpzXCIgQXVkaXRzUGFuZWwu
anNcbiAgICBjcCBcIiR7REVSSVZFRF9GSUxFX0RJUn0vV2ViQ29yZS9Db2RlTWlycm9yVGV4dEVk
aXRvci5qc1wiIENvZGVNaXJyb3JUZXh0RWRpdG9yLmpzXG4gICAgY3AgXCIke0RFUklWRURfRklM
RV9ESVJ9L1dlYkNvcmUvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzXCIgU2NyaXB0Rm9ybWF0dGVy
V29ya2VyLmpzXG5maVxuIjsKLQkJfTsKLQkJMUM4MUJBMzMwRTk3MzU3QzAwMjY2RTA3IC8qIENv
cHkgSW5zcGVjdG9yIFJlc291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVp
bGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgK
LQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJKTsKLQkJCW5hbWUgPSAiQ29weSBJbnNwZWN0
b3IgUmVzb3VyY2VzIjsKLQkJCW91dHB1dFBhdGhzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJ
CXNoZWxsU2NyaXB0ID0gImlmIFtbICR7Q09ORklHVVJBVElPTjo9UHJvZHVjdGlvbn0gPT0gXCJQ
cm9kdWN0aW9uXCIgXV07IHRoZW5cbiAgICAjIERvbid0IGluc3RhbGwgdGhlIEluc3BlY3RvciBm
cm9udC1lbmQgaW4gUHJvZHVjdGlvbiBidWlsZHMuXG4gICAgIyBLZWVwIEluc3BlY3RvckJhY2tl
bmQqLmpzIGZpbGVzIHNvIHRoZXkgY2FuIGJlIHVzZWQgYnkgb3RoZXIgZnJvbnQtZW5kcy5cbiAg
ICBkaXR0byBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5k
LmpzXCIgXCIke1RBUkdFVF9CVUlMRF9ESVJ9LyR7VU5MT0NBTElaRURfUkVTT1VSQ0VTX0ZPTERF
Ul9QQVRIfS9pbnNwZWN0b3IvXCJcbiAgICBkaXR0byBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qc1wiIFwiJHtU
QVJHRVRfQlVJTERfRElSfS8ke1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFUSH0vaW5z
cGVjdG9yL1wiXG4gICAgZXhpdFxuZmlcblxuIyBDb3B5IGFsbCB0aGUgSW5zcGVjdG9yIGZyb250
LWVuZCByZXNvdXJjZXMuXG5kaXR0byBcIiR7U1JDUk9PVH0vaW5zcGVjdG9yL2Zyb250LWVuZFwi
IFwiJHtUQVJHRVRfQlVJTERfRElSfS8ke1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFU
SH0vaW5zcGVjdG9yXCJcbmRpdHRvIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzXCIgXCIke1RBUkdFVF9CVUlM
RF9ESVJ9LyR7VU5MT0NBTElaRURfUkVTT1VSQ0VTX0ZPTERFUl9QQVRIfS9pbnNwZWN0b3IvXCJc
blxuIyBSZW1vdmUgYW55IHFyYyBmaWxlcyBzaW5jZSB0aGV5IGFyZSBub3QgdXNlZCBvbiB0aGUg
TWFjICh0aGV5IGFyZSBmb3IgUXQpLlxucm0gLWYgXCIke1RBUkdFVF9CVUlMRF9ESVJ9LyR7VU5M
T0NBTElaRURfUkVTT1VSQ0VTX0ZPTERFUl9QQVRIfS9pbnNwZWN0b3IvXCIqLnFyY1xuXG4jIFJl
bW92ZSAqLnJlMmpzIGZpbGVzLCB0aGV5IGFyZSBvbmx5IHVzZWQgdG8gZ2VuZXJhdGUgc29tZSAu
anMgZmlsZXMuXG5ybSAtZiBcIiR7VEFSR0VUX0JVSUxEX0RJUn0vJHtVTkxPQ0FMSVpFRF9SRVNP
VVJDRVNfRk9MREVSX1BBVEh9L2luc3BlY3Rvci9cIioucmUyanNcblxuIyBSZW1vdmUgYW55IC5z
dm4gZGlyZWN0b3JpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGNvcGllZCBvdmVyLlxuZmluZCBcIiR7
VEFSR0VUX0JVSUxEX0RJUn0vJHtVTkxPQ0FMSVpFRF9SRVNPVVJDRVNfRk9MREVSX1BBVEh9L2lu
c3BlY3RvclwiIC1uYW1lIFwiLnN2blwiIC10eXBlIGQgfCB4YXJncyBybSAtcmZcbiI7Ci0JCX07
CiAJCTM3QTFFQUEzMTQyNjk5QkMwMDg3RjQyNSAvKiBDaGVjayBGb3IgSW5hcHByb3ByaWF0ZSBP
YmplY3RpdmUtQyBDbGFzcyBOYW1lcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDc3NzliNGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2NvbXBpbGUtZnJvbnQtZW5kLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDQ5ICswLDAgQEAKLSMh
L3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1wb3J0
IG9zLnBhdGgKLWltcG9ydCBnZW5lcmF0ZV9wcm90b2NvbF9leHRlcm5zCi1pbXBvcnQgc2h1dGls
Ci1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLQotaW5zcGVjdG9yX3BhdGggPSAiU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yIgotaW5zcGVjdG9yX2Zyb250ZW5kX3BhdGggPSBpbnNwZWN0b3Jf
cGF0aCArICIvZnJvbnQtZW5kIgotcHJvdG9jb2xfZXh0ZXJuc19wYXRoID0gaW5zcGVjdG9yX2Zy
b250ZW5kX3BhdGggKyAiL3Byb3RvY29sLWV4dGVybnMuanMiCi0KLWdlbmVyYXRlX3Byb3RvY29s
X2V4dGVybnMuZ2VuZXJhdGVfcHJvdG9jb2xfZXh0ZXJucyhwcm90b2NvbF9leHRlcm5zX3BhdGgs
IGluc3BlY3Rvcl9wYXRoICsgIi9JbnNwZWN0b3IuanNvbiIpCi0KLWpzbW9kdWxlX25hbWVfcHJl
Zml4ID0gImpzbW9kdWxlXyIKLW1vZHVsZXMgPSBbCi0gICAgewotICAgICAgICAibmFtZSI6ICJj
b21tb24iLAotICAgICAgICAiZGVwZW5kZW5jaWVzIjogW10sCi0gICAgICAgICJzb3VyY2VzIjog
WwotICAgICAgICAgICAgIkNvbG9yLmpzIiwKLSAgICAgICAgICAgICJET01FeHRlbnNpb24uanMi
LAotICAgICAgICAgICAgIk9iamVjdC5qcyIsCi0gICAgICAgICAgICAiUGFyc2VkVVJMLmpzIiwK
LSAgICAgICAgICAgICJQcm9ncmVzcy5qcyIsCi0gICAgICAgICAgICAiU2V0dGluZ3MuanMiLAot
ICAgICAgICAgICAgIlVJU3RyaW5nLmpzIiwKLSAgICAgICAgICAgICJVc2VyTWV0cmljcy5qcyIs
Ci0gICAgICAgICAgICAidXRpbGl0aWVzLmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewot
ICAgICAgICAibmFtZSI6ICJzZGsiLAotICAgICAgICAiZGVwZW5kZW5jaWVzIjogWyJjb21tb24i
XSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAiQXBwbGljYXRpb25DYWNoZU1v
ZGVsLmpzIiwKLSAgICAgICAgICAgICJDb21waWxlclNjcmlwdE1hcHBpbmcuanMiLAotICAgICAg
ICAgICAgIkNvbnNvbGVNb2RlbC5qcyIsCi0gICAgICAgICAgICAiQ29udGVudFByb3ZpZGVyLmpz
IiwKLSAgICAgICAgICAgICJDb250ZW50UHJvdmlkZXJCYXNlZFByb2plY3REZWxlZ2F0ZS5qcyIs
Ci0gICAgICAgICAgICAiQ29udGVudFByb3ZpZGVycy5qcyIsCi0gICAgICAgICAgICAiQ29va2ll
UGFyc2VyLmpzIiwKLSAgICAgICAgICAgICJDU1NNZXRhZGF0YS5qcyIsCi0gICAgICAgICAgICAi
Q1NTU3R5bGVNb2RlbC5qcyIsCi0gICAgICAgICAgICAiQnJlYWtwb2ludE1hbmFnZXIuanMiLAot
ICAgICAgICAgICAgIkRhdGFiYXNlLmpzIiwKLSAgICAgICAgICAgICJET01BZ2VudC5qcyIsCi0g
ICAgICAgICAgICAiRE9NU3RvcmFnZS5qcyIsCi0gICAgICAgICAgICAiRGVidWdnZXJNb2RlbC5q
cyIsCi0gICAgICAgICAgICAiRGVidWdnZXJTY3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICAgICAg
ICJGaWxlTWFuYWdlci5qcyIsCi0gICAgICAgICAgICAiRmlsZU1hcHBpbmcuanMiLAotICAgICAg
ICAgICAgIkZpbGVTeXN0ZW1NYXBwaW5nLmpzIiwKLSAgICAgICAgICAgICJGaWxlU3lzdGVtTW9k
ZWwuanMiLAotICAgICAgICAgICAgIkZpbGVTeXN0ZW1Qcm9qZWN0RGVsZWdhdGUuanMiLAotICAg
ICAgICAgICAgIkZpbGVVdGlscy5qcyIsCi0gICAgICAgICAgICAiSEFSRW50cnkuanMiLAotICAg
ICAgICAgICAgIkluZGV4ZWREQk1vZGVsLmpzIiwKLSAgICAgICAgICAgICJJbnNwZWN0b3JCYWNr
ZW5kLmpzIiwKLSAgICAgICAgICAgICJJc29sYXRlZEZpbGVTeXN0ZW1NYW5hZ2VyLmpzIiwKLSAg
ICAgICAgICAgICJJc29sYXRlZEZpbGVTeXN0ZW0uanMiLAotICAgICAgICAgICAgIkxpbmtpZmll
ci5qcyIsCi0gICAgICAgICAgICAiTmV0d29ya0xvZy5qcyIsCi0gICAgICAgICAgICAiTmV0d29y
a1VJU291cmNlQ29kZVByb3ZpZGVyLmpzIiwKLSAgICAgICAgICAgICJQcmVzZW50YXRpb25Db25z
b2xlTWVzc2FnZUhlbHBlci5qcyIsCi0gICAgICAgICAgICAiUnVudGltZU1vZGVsLmpzIiwKLSAg
ICAgICAgICAgICJTQVNTU291cmNlTWFwcGluZy5qcyIsCi0gICAgICAgICAgICAiU2NyaXB0Lmpz
IiwKLSAgICAgICAgICAgICJTY3JpcHRGb3JtYXR0ZXIuanMiLAotICAgICAgICAgICAgIlNjcmlw
dFNuaXBwZXRNb2RlbC5qcyIsCi0gICAgICAgICAgICAiU2ltcGxlV29ya3NwYWNlUHJvdmlkZXIu
anMiLAotICAgICAgICAgICAgIlNuaXBwZXRTdG9yYWdlLmpzIiwKLSAgICAgICAgICAgICJTb3Vy
Y2VNYXBwaW5nLmpzIiwKLSAgICAgICAgICAgICJTdHlsZXNTb3VyY2VNYXBwaW5nLmpzIiwKLSAg
ICAgICAgICAgICJUaW1lbGluZU1hbmFnZXIuanMiLAotICAgICAgICAgICAgIlJlbW90ZU9iamVj
dC5qcyIsCi0gICAgICAgICAgICAiUmVzb3VyY2UuanMiLAotICAgICAgICAgICAgIkRlZmF1bHRT
Y3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICAgICAgICJSZXNvdXJjZVNjcmlwdE1hcHBpbmcuanMi
LAotICAgICAgICAgICAgIkxpdmVFZGl0U3VwcG9ydC5qcyIsCi0gICAgICAgICAgICAiUmVzb3Vy
Y2VUcmVlTW9kZWwuanMiLAotICAgICAgICAgICAgIlJlc291cmNlVHlwZS5qcyIsCi0gICAgICAg
ICAgICAiUmVzb3VyY2VVdGlscy5qcyIsCi0gICAgICAgICAgICAiU291cmNlTWFwLmpzIiwKLSAg
ICAgICAgICAgICJOZXR3b3JrTWFuYWdlci5qcyIsCi0gICAgICAgICAgICAiTmV0d29ya1JlcXVl
c3QuanMiLAotICAgICAgICAgICAgIlVJU291cmNlQ29kZS5qcyIsCi0gICAgICAgICAgICAiVXNl
ckFnZW50U3VwcG9ydC5qcyIsCi0gICAgICAgICAgICAiV29ya3NwYWNlLmpzIiwKLSAgICAgICAg
ICAgICJwcm90b2NvbC1leHRlcm5zLmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewotICAg
ICAgICAibmFtZSI6ICJ1aSIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNvbW1vbiJdLAot
ICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICJDaGVja2JveC5qcyIsCi0gICAgICAg
ICAgICAiQ29udGV4dE1lbnUuanMiLAotICAgICAgICAgICAgIkRPTVN5bnRheEhpZ2hsaWdodGVy
LmpzIiwKLSAgICAgICAgICAgICJEYXRhR3JpZC5qcyIsCi0gICAgICAgICAgICAiRGVmYXVsdFRl
eHRFZGl0b3IuanMiLAotICAgICAgICAgICAgIkRpYWxvZy5qcyIsCi0gICAgICAgICAgICAiRG9j
a0NvbnRyb2xsZXIuanMiLAotICAgICAgICAgICAgIkRyYXdlci5qcyIsCi0gICAgICAgICAgICAi
RW1wdHlWaWV3LmpzIiwKLSAgICAgICAgICAgICJHb1RvTGluZURpYWxvZy5qcyIsCi0gICAgICAg
ICAgICAiSGVscFNjcmVlbi5qcyIsCi0gICAgICAgICAgICAiSW5zcGVjdG9yVmlldy5qcyIsCi0g
ICAgICAgICAgICAiS2V5Ym9hcmRTaG9ydGN1dC5qcyIsCi0gICAgICAgICAgICAiT3ZlcnZpZXdH
cmlkLmpzIiwKLSAgICAgICAgICAgICJQYW5lbC5qcyIsCi0gICAgICAgICAgICAiUGFuZWxFbmFi
bGVyVmlldy5qcyIsCi0gICAgICAgICAgICAiUGxhY2FyZC5qcyIsCi0gICAgICAgICAgICAiUG9w
b3Zlci5qcyIsCi0gICAgICAgICAgICAiUHJvZ3Jlc3NJbmRpY2F0b3IuanMiLAotICAgICAgICAg
ICAgIlByb3BlcnRpZXNTZWN0aW9uLmpzIiwKLSAgICAgICAgICAgICJTZWFyY2hDb250cm9sbGVy
LmpzIiwKLSAgICAgICAgICAgICJTZWN0aW9uLmpzIiwKLSAgICAgICAgICAgICJTaWRlYmFyUGFu
ZS5qcyIsCi0gICAgICAgICAgICAiU2lkZWJhclRyZWVFbGVtZW50LmpzIiwKLSAgICAgICAgICAg
ICJTaG9ydGN1dHNTY3JlZW4uanMiLAotICAgICAgICAgICAgIlNob3dNb3JlRGF0YUdyaWROb2Rl
LmpzIiwKLSAgICAgICAgICAgICJTaWRlYmFyT3ZlcmxheS5qcyIsCi0gICAgICAgICAgICAiU29m
dENvbnRleHRNZW51LmpzIiwKLSAgICAgICAgICAgICJTb3VyY2VUb2tlbml6ZXIuanMiLAotICAg
ICAgICAgICAgIlNwZWN0cnVtLmpzIiwKLSAgICAgICAgICAgICJTcGxpdFZpZXcuanMiLAotICAg
ICAgICAgICAgIlNpZGViYXJWaWV3LmpzIiwKLSAgICAgICAgICAgICJTdGF0dXNCYXJCdXR0b24u
anMiLAotICAgICAgICAgICAgIlN1Z2dlc3RCb3guanMiLAotICAgICAgICAgICAgIlRhYmJlZFBh
bmUuanMiLAotICAgICAgICAgICAgIlRleHRFZGl0b3IuanMiLAotICAgICAgICAgICAgIlRleHRF
ZGl0b3JIaWdobGlnaHRlci5qcyIsCi0gICAgICAgICAgICAiVGV4dEVkaXRvck1vZGVsLmpzIiwK
LSAgICAgICAgICAgICJUZXh0UHJvbXB0LmpzIiwKLSAgICAgICAgICAgICJUZXh0VXRpbHMuanMi
LAotICAgICAgICAgICAgIlRpbWVsaW5lR3JpZC5qcyIsCi0gICAgICAgICAgICAiVG9vbGJhci5q
cyIsCi0gICAgICAgICAgICAiVUlVdGlscy5qcyIsCi0gICAgICAgICAgICAiVmlldy5qcyIsCi0g
ICAgICAgICAgICAiVmlld3BvcnRDb250cm9sLmpzIiwKLSAgICAgICAgICAgICJ0cmVlb3V0bGlu
ZS5qcyIsCi0gICAgICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICAgIm5hbWUiOiAiY29tcG9u
ZW50cyIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbInNkayIsICJ1aSJdLAotICAgICAgICAi
c291cmNlcyI6IFsKLSAgICAgICAgICAgICJBZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuanMiLAot
ICAgICAgICAgICAgIkhhbmRsZXJSZWdpc3RyeS5qcyIsCi0gICAgICAgICAgICAiQ29uc29sZU1l
c3NhZ2UuanMiLAotICAgICAgICAgICAgIkNvb2tpZXNUYWJsZS5qcyIsCi0gICAgICAgICAgICAi
RE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAgICAgICAiRE9NUHJlc2VudGF0
aW9uVXRpbHMuanMiLAotICAgICAgICAgICAgIkVsZW1lbnRzVHJlZU91dGxpbmUuanMiLAotICAg
ICAgICAgICAgIkZvbnRWaWV3LmpzIiwKLSAgICAgICAgICAgICJJbWFnZVZpZXcuanMiLAotICAg
ICAgICAgICAgIk5hdGl2ZUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMiLAotICAgICAgICAgICAg
Ikluc3BlY3RFbGVtZW50TW9kZUNvbnRyb2xsZXIuanMiLAotICAgICAgICAgICAgIk9iamVjdFBv
cG92ZXJIZWxwZXIuanMiLAotICAgICAgICAgICAgIk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpz
IiwKLSAgICAgICAgICAgICJTb3VyY2VGcmFtZS5qcyIsCi0gICAgICAgICAgICAiUmVzb3VyY2VW
aWV3LmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJlbGVt
ZW50cyIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNvbXBvbmVudHMiXSwKLSAgICAgICAg
InNvdXJjZXMiOiBbCi0gICAgICAgICAgICAiQ1NTTmFtZWRGbG93Q29sbGVjdGlvbnNWaWV3Lmpz
IiwKLSAgICAgICAgICAgICJDU1NOYW1lZEZsb3dWaWV3LmpzIiwKLSAgICAgICAgICAgICJFbGVt
ZW50c1BhbmVsLmpzIiwKLSAgICAgICAgICAgICJFbGVtZW50c1BhbmVsRGVzY3JpcHRvci5qcyIs
Ci0gICAgICAgICAgICAiRXZlbnRMaXN0ZW5lcnNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAgICAg
ICAiTWV0cmljc1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICAgICAgICJQcm9wZXJ0aWVzU2lkZWJh
clBhbmUuanMiLAotICAgICAgICAgICAgIlN0eWxlc1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICAg
XQotICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJuZXR3b3JrIiwKLSAgICAgICAgImRl
cGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyJdLAotICAgICAgICAic291cmNlcyI6IFsKLSAgICAg
ICAgICAgICJOZXR3b3JrSXRlbVZpZXcuanMiLAotICAgICAgICAgICAgIlJlcXVlc3RDb29raWVz
Vmlldy5qcyIsCi0gICAgICAgICAgICAiUmVxdWVzdEhlYWRlcnNWaWV3LmpzIiwKLSAgICAgICAg
ICAgICJSZXF1ZXN0SFRNTFZpZXcuanMiLAotICAgICAgICAgICAgIlJlcXVlc3RKU09OVmlldy5q
cyIsCi0gICAgICAgICAgICAiUmVxdWVzdFByZXZpZXdWaWV3LmpzIiwKLSAgICAgICAgICAgICJS
ZXF1ZXN0UmVzcG9uc2VWaWV3LmpzIiwKLSAgICAgICAgICAgICJSZXF1ZXN0VGltaW5nVmlldy5q
cyIsCi0gICAgICAgICAgICAiUmVxdWVzdFZpZXcuanMiLAotICAgICAgICAgICAgIlJlc291cmNl
V2ViU29ja2V0RnJhbWVWaWV3LmpzIiwKLSAgICAgICAgICAgICJOZXR3b3JrUGFuZWwuanMiLAot
ICAgICAgICAgICAgIk5ldHdvcmtQYW5lbERlc2NyaXB0b3IuanMiLAotICAgICAgICBdCi0gICAg
fSwKLSAgICB7Ci0gICAgICAgICJuYW1lIjogInJlc291cmNlcyIsCi0gICAgICAgICJkZXBlbmRl
bmNpZXMiOiBbImNvbXBvbmVudHMiXSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAg
ICAiQXBwbGljYXRpb25DYWNoZUl0ZW1zVmlldy5qcyIsCi0gICAgICAgICAgICAiQ29va2llSXRl
bXNWaWV3LmpzIiwKLSAgICAgICAgICAgICJEYXRhYmFzZVF1ZXJ5Vmlldy5qcyIsCi0gICAgICAg
ICAgICAiRGF0YWJhc2VUYWJsZVZpZXcuanMiLAotICAgICAgICAgICAgIkRpcmVjdG9yeUNvbnRl
bnRWaWV3LmpzIiwKLSAgICAgICAgICAgICJET01TdG9yYWdlSXRlbXNWaWV3LmpzIiwKLSAgICAg
ICAgICAgICJGaWxlQ29udGVudFZpZXcuanMiLAotICAgICAgICAgICAgIkZpbGVTeXN0ZW1WaWV3
LmpzIiwKLSAgICAgICAgICAgICJJbmRleGVkREJWaWV3cy5qcyIsCi0gICAgICAgICAgICAiUmVz
b3VyY2VzUGFuZWwuanMiLAotICAgICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAgICJuYW1l
IjogIndvcmtlcnMiLAotICAgICAgICAiZGVwZW5kZW5jaWVzIjogWyJjb21wb25lbnRzIl0sCi0g
ICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgIldvcmtlck1hbmFnZXIuanMiLAotICAg
ICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAgICJuYW1lIjogInNjcmlwdHMiLAotICAgICAg
ICAiZGVwZW5kZW5jaWVzIjogWyJjb21wb25lbnRzIiwgIndvcmtlcnMiXSwKLSAgICAgICAgInNv
dXJjZXMiOiBbCi0gICAgICAgICAgICAiQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyIsCi0gICAg
ICAgICAgICAiQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMiLAotICAgICAgICAgICAgIkZpbHRlcmVk
SXRlbVNlbGVjdGlvbkRpYWxvZy5qcyIsCi0gICAgICAgICAgICAiSmF2YVNjcmlwdFNvdXJjZUZy
YW1lLmpzIiwKLSAgICAgICAgICAgICJOYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlci5qcyIsCi0g
ICAgICAgICAgICAiTmF2aWdhdG9yVmlldy5qcyIsCi0gICAgICAgICAgICAiUmV2aXNpb25IaXN0
b3J5Vmlldy5qcyIsCi0gICAgICAgICAgICAiU2NvcGVDaGFpblNpZGViYXJQYW5lLmpzIiwKLSAg
ICAgICAgICAgICJTY3JpcHRzTmF2aWdhdG9yLmpzIiwKLSAgICAgICAgICAgICJTY3JpcHRzUGFu
ZWwuanMiLAotICAgICAgICAgICAgIlNjcmlwdHNQYW5lbERlc2NyaXB0b3IuanMiLAotICAgICAg
ICAgICAgIlNjcmlwdHNTZWFyY2hTY29wZS5qcyIsCi0gICAgICAgICAgICAiU25pcHBldEphdmFT
Y3JpcHRTb3VyY2VGcmFtZS5qcyIsCi0gICAgICAgICAgICAiU3R5bGVTaGVldE91dGxpbmVEaWFs
b2cuanMiLAotICAgICAgICAgICAgIlRhYmJlZEVkaXRvckNvbnRhaW5lci5qcyIsCi0gICAgICAg
ICAgICAiVUlTb3VyY2VDb2RlRnJhbWUuanMiLAotICAgICAgICAgICAgIldhdGNoRXhwcmVzc2lv
bnNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAgICAgICAiV29ya2Vyc1NpZGViYXJQYW5lLmpzIiwK
LSAgICAgICAgXQotICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJjb25zb2xlIiwKLSAg
ICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyJdLAotICAgICAgICAic291cmNlcyI6
IFsKLSAgICAgICAgICAgICJDb25zb2xlVmlldy5qcyIsCi0gICAgICAgICAgICAiQ29uc29sZVBh
bmVsLmpzIiwKLSAgICAgICAgXQotICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJ0aW1l
bGluZSIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNvbXBvbmVudHMiXSwKLSAgICAgICAg
InNvdXJjZXMiOiBbCi0gICAgICAgICAgICAiRE9NQ291bnRlcnNHcmFwaC5qcyIsCi0gICAgICAg
ICAgICAiTWVtb3J5U3RhdGlzdGljcy5qcyIsCi0gICAgICAgICAgICAiTmF0aXZlTWVtb3J5R3Jh
cGguanMiLAotICAgICAgICAgICAgIlRpbWVsaW5lTW9kZWwuanMiLAotICAgICAgICAgICAgIlRp
bWVsaW5lT3ZlcnZpZXdQYW5lLmpzIiwKLSAgICAgICAgICAgICJUaW1lbGluZVBhbmVsLmpzIiwK
LSAgICAgICAgICAgICJUaW1lbGluZVBhbmVsRGVzY3JpcHRvci5qcyIsCi0gICAgICAgICAgICAi
VGltZWxpbmVQcmVzZW50YXRpb25Nb2RlbC5qcyIsCi0gICAgICAgICAgICAiVGltZWxpbmVGcmFt
ZUNvbnRyb2xsZXIuanMiCi0gICAgICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICAgIm5hbWUi
OiAiYXVkaXRzIiwKLSAgICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyJdLAotICAg
ICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICJBdWRpdENhdGVnb3JpZXMuanMiLAotICAg
ICAgICAgICAgIkF1ZGl0Q29udHJvbGxlci5qcyIsCi0gICAgICAgICAgICAiQXVkaXRGb3JtYXR0
ZXJzLmpzIiwKLSAgICAgICAgICAgICJBdWRpdExhdW5jaGVyVmlldy5qcyIsCi0gICAgICAgICAg
ICAiQXVkaXRSZXN1bHRWaWV3LmpzIiwKLSAgICAgICAgICAgICJBdWRpdFJ1bGVzLmpzIiwKLSAg
ICAgICAgICAgICJBdWRpdHNQYW5lbC5qcyIsCi0gICAgICAgIF0KLSAgICB9LAotICAgIHsKLSAg
ICAgICAgIm5hbWUiOiAiZXh0ZW5zaW9ucyIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMiOiBbImNv
bXBvbmVudHMiXSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAiRXh0ZW5zaW9u
QVBJLmpzIiwKLSAgICAgICAgICAgICJFeHRlbnNpb25BdWRpdENhdGVnb3J5LmpzIiwKLSAgICAg
ICAgICAgICJFeHRlbnNpb25QYW5lbC5qcyIsCi0gICAgICAgICAgICAiRXh0ZW5zaW9uUmVnaXN0
cnlTdHViLmpzIiwKLSAgICAgICAgICAgICJFeHRlbnNpb25TZXJ2ZXIuanMiLAotICAgICAgICAg
ICAgIkV4dGVuc2lvblZpZXcuanMiLAotICAgICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAg
ICJuYW1lIjogInNldHRpbmdzIiwKLSAgICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50
cyIsICJleHRlbnNpb25zIl0sCi0gICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgIlNl
dHRpbmdzU2NyZWVuLmpzIiwKLSAgICAgICAgICAgICJPdmVycmlkZXNWaWV3LmpzIiwKLSAgICAg
ICAgXQotICAgIH0sCi0gICAgewotICAgICAgICAibmFtZSI6ICJ0ZXN0cyIsCi0gICAgICAgICJk
ZXBlbmRlbmNpZXMiOiBbImNvbXBvbmVudHMiXSwKLSAgICAgICAgInNvdXJjZXMiOiBbCi0gICAg
ICAgICAgICAiVGVzdENvbnRyb2xsZXIuanMiLAotICAgICAgICBdCi0gICAgfSwKLSAgICB7Ci0g
ICAgICAgICJuYW1lIjogInByb2ZpbGVyIiwKLSAgICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29t
cG9uZW50cyIsICJ3b3JrZXJzIl0sCi0gICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAg
IkJvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIsCi0gICAgICAgICAgICAiQ1BVUHJvZmls
ZVZpZXcuanMiLAotICAgICAgICAgICAgIkNTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMiLAotICAg
ICAgICAgICAgIkZsYW1lQ2hhcnQuanMiLAotICAgICAgICAgICAgIkhlYXBTbmFwc2hvdC5qcyIs
Ci0gICAgICAgICAgICAiSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzIiwKLSAgICAgICAgICAgICJI
ZWFwU25hcHNob3RHcmlkTm9kZXMuanMiLAotICAgICAgICAgICAgIkhlYXBTbmFwc2hvdExvYWRl
ci5qcyIsCi0gICAgICAgICAgICAiSGVhcFNuYXBzaG90UHJveHkuanMiLAotICAgICAgICAgICAg
IkhlYXBTbmFwc2hvdFZpZXcuanMiLAotICAgICAgICAgICAgIkhlYXBTbmFwc2hvdFdvcmtlci5q
cyIsCi0gICAgICAgICAgICAiSGVhcFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyIsCi0gICAg
ICAgICAgICAiSlNIZWFwU25hcHNob3QuanMiLAotICAgICAgICAgICAgIk5hdGl2ZUhlYXBTbmFw
c2hvdC5qcyIsCi0gICAgICAgICAgICAiUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIsCi0gICAgICAg
ICAgICAiUHJvZmlsZXNQYW5lbC5qcyIsCi0gICAgICAgICAgICAiUHJvZmlsZXNQYW5lbERlc2Ny
aXB0b3IuanMiLAotICAgICAgICAgICAgIlByb2ZpbGVMYXVuY2hlclZpZXcuanMiLAotICAgICAg
ICAgICAgIlRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIiwKLSAgICAgICAgICAgICJDYW52
YXNQcm9maWxlVmlldy5qcyIsCi0gICAgICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICAgIm5h
bWUiOiAiaG9zdF9zdHViIiwKLSAgICAgICAgImRlcGVuZGVuY2llcyI6IFsiY29tcG9uZW50cyIs
ICJwcm9maWxlciIsICJ0aW1lbGluZSJdLAotICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAg
ICAgICJJbnNwZWN0b3JGcm9udGVuZEFQSS5qcyIsCi0gICAgICAgICAgICAiSW5zcGVjdG9yRnJv
bnRlbmRIb3N0U3R1Yi5qcyIsCi0gICAgICAgIF0KLSAgICB9Ci1dCi0KLW1vZHVsZXNfYnlfbmFt
ZSA9IHt9Ci1mb3IgbW9kdWxlIGluIG1vZHVsZXM6Ci0gICAgbW9kdWxlc19ieV9uYW1lW21vZHVs
ZVsibmFtZSJdXSA9IG1vZHVsZQotCi0KLWRlZiBkdW1wX21vZHVsZShuYW1lLCByZWN1cnNpdmVs
eSwgcHJvY2Vzc2VkX21vZHVsZXMpOgotICAgIGlmIG5hbWUgaW4gcHJvY2Vzc2VkX21vZHVsZXM6
Ci0gICAgICAgIHJldHVybiAiIgotICAgIHByb2Nlc3NlZF9tb2R1bGVzW25hbWVdID0gVHJ1ZQot
ICAgIG1vZHVsZSA9IG1vZHVsZXNfYnlfbmFtZVtuYW1lXQotICAgIGNvbW1hbmQgPSAiIgotICAg
IGlmIHJlY3Vyc2l2ZWx5OgotICAgICAgICBmb3IgZGVwZW5kZW5jeSBpbiBtb2R1bGVbImRlcGVu
ZGVuY2llcyJdOgotICAgICAgICAgICAgY29tbWFuZCArPSBkdW1wX21vZHVsZShkZXBlbmRlbmN5
LCByZWN1cnNpdmVseSwgcHJvY2Vzc2VkX21vZHVsZXMpCi0gICAgY29tbWFuZCArPSAiIFxcXG4g
ICAgLS1tb2R1bGUgIiArIGpzbW9kdWxlX25hbWVfcHJlZml4ICsgbW9kdWxlWyJuYW1lIl0gKyAi
OiIKLSAgICBjb21tYW5kICs9IHN0cihsZW4obW9kdWxlWyJzb3VyY2VzIl0pKQotICAgIGZpcnN0
RGVwZW5kZW5jeSA9IFRydWUKLSAgICBmb3IgZGVwZW5kZW5jeSBpbiBtb2R1bGVbImRlcGVuZGVu
Y2llcyJdOgotICAgICAgICBpZiBmaXJzdERlcGVuZGVuY3k6Ci0gICAgICAgICAgICBjb21tYW5k
ICs9ICI6IgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29tbWFuZCArPSAiLCIKLSAgICAg
ICAgZmlyc3REZXBlbmRlbmN5ID0gRmFsc2UKLSAgICAgICAgY29tbWFuZCArPSBqc21vZHVsZV9u
YW1lX3ByZWZpeCArIGRlcGVuZGVuY3kKLSAgICBmb3Igc2NyaXB0IGluIG1vZHVsZVsic291cmNl
cyJdOgotICAgICAgICBjb21tYW5kICs9ICIgXFxcbiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9y
X2Zyb250ZW5kX3BhdGggKyAiLyIgKyBzY3JpcHQKLSAgICByZXR1cm4gY29tbWFuZAotCi1tb2R1
bGVzX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQotY29tcGlsZXJfY29tbWFuZCA9ICJqYXZhIC1q
YXIgfi9jbG9zdXJlL2NvbXBpbGVyLmphciAtLXN1bW1hcnlfZGV0YWlsX2xldmVsIDMgLS1jb21w
aWxhdGlvbl9sZXZlbCBTSU1QTEVfT1BUSU1JWkFUSU9OUyAtLXdhcm5pbmdfbGV2ZWwgVkVSQk9T
RSAtLWxhbmd1YWdlX2luIEVDTUFTQ1JJUFQ1IC0tYWNjZXB0X2NvbnN0X2tleXdvcmQgLS1tb2R1
bGVfb3V0cHV0X3BhdGhfcHJlZml4ICVzLyBcXFxuIiAlIG1vZHVsZXNfZGlyCi0KLXByb2Nlc3Nf
cmVjdXJzaXZlbHkgPSBsZW4oc3lzLmFyZ3YpID4gMQotaWYgcHJvY2Vzc19yZWN1cnNpdmVseToK
LSAgICBtb2R1bGVfbmFtZSA9IHN5cy5hcmd2WzFdCi0gICAgaWYgbW9kdWxlX25hbWUgIT0gImFs
bCI6Ci0gICAgICAgIG1vZHVsZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4o
c3lzLmFyZ3YpKToKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKG1vZHVsZXNfYnlfbmFtZVtz
eXMuYXJndltpXV0pCi0gICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzOgotICAgICAgICBjb21tYW5k
ID0gY29tcGlsZXJfY29tbWFuZAotICAgICAgICBjb21tYW5kICs9ICIgICAgLS1leHRlcm5zICIg
KyBpbnNwZWN0b3JfZnJvbnRlbmRfcGF0aCArICIvZXh0ZXJucy5qcyIKLSAgICAgICAgY29tbWFu
ZCArPSBkdW1wX21vZHVsZShtb2R1bGVbIm5hbWUiXSwgVHJ1ZSwge30pCi0gICAgICAgIHByaW50
ICJDb21waWxpbmcgXCIiICsgbW9kdWxlWyJuYW1lIl0gKyAiXCIiCi0gICAgICAgIG9zLnN5c3Rl
bShjb21tYW5kKQotZWxzZToKLSAgICBjb21tYW5kID0gY29tcGlsZXJfY29tbWFuZAotICAgIGNv
bW1hbmQgKz0gIiAgICAtLWV4dGVybnMgIiArIGluc3BlY3Rvcl9mcm9udGVuZF9wYXRoICsgIi9l
eHRlcm5zLmpzIgotICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgY29tbWFuZCAr
PSBkdW1wX21vZHVsZShtb2R1bGVbIm5hbWUiXSwgRmFsc2UsIHt9KQotICAgIG9zLnN5c3RlbShj
b21tYW5kKQotCi1pZiBub3QgcHJvY2Vzc19yZWN1cnNpdmVseToKLSAgICBwcmludCAiQ29tcGls
aW5nIEluamVjdGVkU2NyaXB0U291cmNlLmpzLi4uIgotICAgIG9zLnN5c3RlbSgiZWNobyBcInZh
ciBpbmplY3RlZFNjcmlwdFZhbHVlID0gXCIgPiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAi
SW5qZWN0ZWRTY3JpcHRTb3VyY2VUbXAuanMiKQotICAgIG9zLnN5c3RlbSgiY2F0ICAiICsgaW5z
cGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMiICsgIiA+PiAiICsg
aW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRTb3VyY2VUbXAuanMiKQotICAg
IGNvbW1hbmQgPSBjb21waWxlcl9jb21tYW5kCi0gICAgY29tbWFuZCArPSAiICAgIC0tZXh0ZXJu
cyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRFeHRlcm5zLmpzIiAr
ICIgXFxcbiIKLSAgICBjb21tYW5kICs9ICIgICAgLS1leHRlcm5zICIgKyBwcm90b2NvbF9leHRl
cm5zX3BhdGggKyAiIFxcXG4iCi0gICAgY29tbWFuZCArPSAiICAgIC0tbW9kdWxlICIgKyBqc21v
ZHVsZV9uYW1lX3ByZWZpeCArICJpbmplY3RlZF9zY3JpcHQiICsgIjoiICsgIjEiICsgIiBcXFxu
IgotICAgIGNvbW1hbmQgKz0gIiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIg
KyAiSW5qZWN0ZWRTY3JpcHRTb3VyY2VUbXAuanMiICsgIiBcXFxuIgotICAgIGNvbW1hbmQgKz0g
IlxuIgotICAgIG9zLnN5c3RlbShjb21tYW5kKQotICAgIG9zLnN5c3RlbSgicm0gIiArIGluc3Bl
Y3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0U291cmNlVG1wLmpzIikKLQotICAgIHBy
aW50ICJDb21waWxpbmcgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMuLi4iCi0g
ICAgb3Muc3lzdGVtKCJlY2hvIFwidmFyIGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlVmFsdWUg
PSBcIiA+ICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZVNvdXJjZVRtcC5qcyIpCi0gICAgb3Muc3lzdGVtKCJjYXQgICIgKyBpbnNwZWN0b3JfcGF0
aCArICIvIiArICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcyIgKyAiID4+ICIg
KyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJj
ZVRtcC5qcyIpCi0gICAgY29tbWFuZCA9IGNvbXBpbGVyX2NvbW1hbmQKLSAgICBjb21tYW5kICs9
ICIgICAgLS1leHRlcm5zICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlw
dEV4dGVybnMuanMiICsgIiBcXFxuIgotICAgIGNvbW1hbmQgKz0gIiAgICAtLWV4dGVybnMgIiAr
IHByb3RvY29sX2V4dGVybnNfcGF0aCArICIgXFxcbiIKLSAgICBjb21tYW5kICs9ICIgICAgLS1t
b2R1bGUgIiArIGpzbW9kdWxlX25hbWVfcHJlZml4ICsgImluamVjdGVkX3NjcmlwdCIgKyAiOiIg
KyAiMSIgKyAiIFxcXG4iCi0gICAgY29tbWFuZCArPSAiICAgICAgICAtLWpzICIgKyBpbnNwZWN0
b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZVRtcC5qcyIg
KyAiIFxcXG4iCi0gICAgY29tbWFuZCArPSAiXG4iCi0gICAgb3Muc3lzdGVtKGNvbW1hbmQpCi0g
ICAgb3Muc3lzdGVtKCJybSAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGVTb3VyY2VUbXAuanMiKQotCi1zaHV0aWwucm10cmVlKG1vZHVsZXNfZGly
KQotI29zLnN5c3RlbSgicm0gIiArIHByb3RvY29sX2V4dGVybnNfcGF0aCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
NDI2MTY2Yi4uZTJlNTQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0xMC0xMCAg
TWFyY2VsbyBNb3JhaXMgIDxtLm1vcmFpc0BzYW1zdW5nLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBSZW1vdmUgdGhlIG9sZCBmcm9udC1lbmQgZnJvbSBXZWJLaXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjI5NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5
LmNtYWtlOiBSZW1vdmVkIHRoZSByZWZlcmVuY2VzIGZvciB0aGUgb2xkCisgICAgICAgIGluc3Bl
Y3RvciBmcm9udC1lbmQuCisKIDIwMTMtMTAtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXhlZCBXaW42NCBsaW5raW5nLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCA1ZGEzMTZiLi4wY2I1ZTg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtMjM0LDI2ICsyMzQsNiBAQCBp
ZiAoRU5BQkxFX1ZJREVPX1RSQUNLKQogICAgICkKIGVuZGlmICgpCiAKLWluc3RhbGwoRElSRUNU
T1JZICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9mcm9udC1lbmQvCi0gICAgICAgIERFU1RJTkFU
SU9OIC4uLy4uL3Vzci9zaGFyZS93ZWJraXQvaW5zcGVjdG9yLwotICAgICAgICBGSUxFU19NQVRD
SElORyBQQVRURVJOICIqLmpzIikKLWluc3RhbGwoRElSRUNUT1JZICR7V0VCQ09SRV9ESVJ9L2lu
c3BlY3Rvci9mcm9udC1lbmQvCi0gICAgICAgIERFU1RJTkFUSU9OIC4uLy4uL3Vzci9zaGFyZS93
ZWJraXQvaW5zcGVjdG9yLwotICAgICAgICBGSUxFU19NQVRDSElORyBQQVRURVJOICIqLmNzcyIp
Ci1pbnN0YWxsKERJUkVDVE9SWSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvZnJvbnQtZW5kLwot
ICAgICAgICBERVNUSU5BVElPTiAuLi8uLi91c3Ivc2hhcmUvd2Via2l0L2luc3BlY3Rvci8KLSAg
ICAgICAgRklMRVNfTUFUQ0hJTkcgUEFUVEVSTiAiKi5wbmciKQotaW5zdGFsbChESVJFQ1RPUlkg
JHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL2Zyb250LWVuZC8KLSAgICAgICAgREVTVElOQVRJT04g
Li4vLi4vdXNyL3NoYXJlL3dlYmtpdC9pbnNwZWN0b3IvCi0gICAgICAgIEZJTEVTX01BVENISU5H
IFBBVFRFUk4gIiouanBnIikKLWluc3RhbGwoRElSRUNUT1JZICR7V0VCQ09SRV9ESVJ9L2luc3Bl
Y3Rvci9mcm9udC1lbmQvCi0gICAgICAgIERFU1RJTkFUSU9OIC4uLy4uL3Vzci9zaGFyZS93ZWJr
aXQvaW5zcGVjdG9yLwotICAgICAgICBGSUxFU19NQVRDSElORyBQQVRURVJOICIqLmdpZiIpCi1p
bnN0YWxsKEZJTEVTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9pbnNwZWN0b3JCQi5o
dG1sCi0gICAgICAgICAgICAgICR7V0VCS0lUX0RJUn0vYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9pbnNwZWN0b3JCQi5qcwotICAgICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0gICAgICAgIERFU1RJTkFUSU9OIC4u
Ly4uL3Vzci9zaGFyZS93ZWJraXQvaW5zcGVjdG9yLykKLQogaWYgKE5PVCBQVUJMSUNfQlVJTEQp
CiAgICAgIyBBZGQgdGhlIGN1c3RvbSB0YXJnZXQgdG8gYnVpbGQgdGhlIGhvc3Qtc2lkZSBJbWFn
ZURpZmYgYmluYXJ5LgogICAgICMgUmV1c2UgdGhlIFF0IHZlcnNpb24uCkBAIC0yNjYsMTMgKzI0
Niw2IEBAIGlmIChOT1QgUFVCTElDX0JVSUxEKQogICAgICkKIGVuZGlmICgpCiAKLWFkZF9jdXN0
b21fdGFyZ2V0KAotICAgIGluc3BlY3RvciBBTEwKLSAgICBjb21tYW5kIGNwICR7V0VCQ09SRV9E
SVJ9L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9L2luc3BlY3RvckJCLmh0bWwgJiYgZWNobyAnPHNjcmlwdCBzcmM9Imluc3Bl
Y3RvckJCLmpzIj48L3NjcmlwdD4nICA+PiAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
aW5zcGVjdG9yQkIuaHRtbAotICAgIERFUEVORFMgV2ViQ29yZQotICAgIENPTU1FTlQgIldlYiBJ
bnNwZWN0b3IgcmVzb3VyY2VzIGJ1aWxkaW5nLi4uIgotKQotCiAjIEdlbmVyYXRlIGNvbnRlbnRz
IGZvciBBYm91dERhdGEuY3BwCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgT1VUUFVUICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9BYm91dERhdGFIYXZlRmVhdHVyZXMuY3BwCi0tIAox
LjguMS4yCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>