<?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>28620</bug_id>
          
          <creation_ts>2009-08-21 12:28:28 -0700</creation_ts>
          <short_desc>Inspector: Rename &quot;Databases&quot; Panel as &quot;Storage&quot;</short_desc>
          <delta_ts>2009-08-21 13:41:44 -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 (Deprecated)</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>141940</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-08-21 12:28:28 -0700</bug_when>
    <thetext>&quot;Storage&quot; is more appropriate then &quot;Databases&quot; due to the ability to view localStorage, sessionStorage, and cookies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141950</commentid>
    <comment_count>1</comment_count>
      <attachid>38389</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-08-21 13:13:30 -0700</bug_when>
    <thetext>Created attachment 38389
[PATCH] Rename &quot;Databases&quot; Panel as &quot;Storage&quot;

I gave it some good tests.  I didn&apos;t run into any problems.  Even &quot;inspect(localStorage)&quot; worked.  I tested remembering the last panel that was open and it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141952</commentid>
    <comment_count>2</comment_count>
      <attachid>38389</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-21 13:20:38 -0700</bug_when>
    <thetext>Comment on attachment 38389
[PATCH] Rename &quot;Databases&quot; Panel as &quot;Storage&quot;

A stray console.log.

+                 console.log(panelName);

Remove before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141959</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-08-21 13:41:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; A stray console.log.
&gt; 
&gt; +                 console.log(panelName);
&gt; 
&gt; Remove before landing.

Done.

---

Landed in r47639 = b31502222828f09e44b4ae0041c1f6cb94d1d78d
http://trac.webkit.org/changeset/47639</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38389</attachid>
            <date>2009-08-21 13:13:30 -0700</date>
            <delta_ts>2009-08-21 13:20:38 -0700</delta_ts>
            <desc>[PATCH] Rename &quot;Databases&quot; Panel as &quot;Storage&quot;</desc>
            <filename>storage_panel.patch</filename>
            <type>text/plain</type>
            <size>82558</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzFiODE4ZS4uZmQ2YzFiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1OCBAQAogMjAwOS0wOC0yMSAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEluc3BlY3RvcjogUmVuYW1lICJEYXRhYmFzZXMiIFBhbmVsIGFz
ICJTdG9yYWdlIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mjg2MjAKKworICAgICAgICAgIFVwZGF0ZWQgZW51bSBmcm9tICJEYXRhYmFzZXNQYW5lbCIg
dG8gIlN0b3JhZ2VQYW5lbCIgYW5kIHdoZXJldmVyIGl0IHdhcyB1c2VkLgorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6c3BlY2lhbFBhbmVsRm9ySlNOYW1lKTogc3RyaW5nIHRvIGRpc3Bs
YXkgU3RvcmFnZVBhbmVsIGNhbiBiZSBlaXRoZXIgImRhdGFiYXNlcyIgb3IgInN0b3JhZ2UiCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Oik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpzaG93
UGFuZWwpOgorCisgICAgICAgICAgVXBkYXRlZCBBbGwgRGlyZWN0IEFjY2VzcyBmcm9tIFdlYklu
c3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzIHRvIFdlYkluc3BlY3Rvci5wYW5lbHMuc3RvcmFnZSwK
KyAgICAgICAgICBhbnkgRGF0YWJhc2VzUGFuZWwgY29uc3RydWN0b3JzIGFuZCBhcHByb3ByaWF0
ZSBmdW5jdGlvbiBuYW1lcy4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NU3Rv
cmFnZURhdGFHcmlkLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3Jp
ZC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ0NvbHVtbk9mRGF0YUdyaWROb2RlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQucHJvdG90eXBlLl9zdGFydEVkaXRpbmcp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZC5wcm90b3R5cGUuX2Vk
aXRpbmdDb21taXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3Jp
ZC5wcm90b3R5cGUuX2VkaXRpbmdDYW5jZWxsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRP
TVN0b3JhZ2VEYXRhR3JpZC5wcm90b3R5cGUuZGVsZXRlU2VsZWN0ZWRSb3cpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0ZW1zVmlldy5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5ET01TdG9yYWdlSXRlbXNWaWV3LnByb3RvdHlwZS51cGRhdGUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRGF0YWJhc2VRdWVyeVZpZXcucHJvdG90eXBlLl9xdWVyeUZpbmlzaGVkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlVGFibGVWaWV3LmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVWaWV3LnByb3RvdHlwZS5fcXVlcnlGaW5p
c2hlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6IHVwZGF0ZWQgc3RyaW5nIHRoYXQgY29t
ZXMgZnJvbSBoaWRkZW5QYW5lbHMgdG8gYmUgImRhdGFiYXNlcyIgb3IgInN0b3JhZ2UiCisgICAg
ICAgIChXZWJJbnNwZWN0b3Iuc2hvd1N0b3JhZ2VQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3Iuc2VsZWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnNlbGVjdERPTVN0b3Jh
Z2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmFkZERhdGFiYXNlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5hZGRET01TdG9yYWdlKToKKworICAgICAgICAgIFJlbmFtZWQgc29tZSBmaWxlcyBh
bmQgVXBkYXRlZCBBY2NvcmRpbmdseS4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
U3RvcmFnZVBhbmVsLmpzOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RhdGFiYXNlc1BhbmVsLmpzLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L3N0b3JhZ2VJY29uLnBuZzogUmVuYW1lZCBmcm9tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZGF0YWJhc2VzSWNvbi5wbmcuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9XZWJLaXQucXJjOiB1c2UgbmV3IGZpbGUgbmFtZXMKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5jc3M6IHVzZSBuZXcgaW1hZ2VzIG5hbWUgYW5kIGNsYXNzIG5hbWVz
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDogdXNlIG5ldyBm
aWxlIG5hbWUKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IHVzZSBuZXcgZmlsZSBuYW1lcworCisg
ICAgICAgICAgTWlzY2VsbGFuZW91cyBVcGRhdGVzLgorCisgICAgICAgICogRW5nbGlzaC5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiBVcGRhdGVkIFRvb2x0aXAgZnJvbSAiRGF0YWJhc2VzIiB0
byAiU3RvcmFnZSIKKworCisyMDA5LTA4LTIxICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdl
YmtpdC5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKICAgICAgICAg
SW5zcGVjdG9yOiBSZW1vdmUgVW51c2VkIFZhcmlhYmxlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Vu
Z2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9s
b2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IGExYzlkZDY0MjNmY2VjM2UzNTJkNjU0OTlmZTgyN2Zm
OTZjZjMwZGYuLmI2YjRhNDA5NWJjNzc3ZTZjNzgwYTc5Y2YwOGI2ZTcxYjFlN2IyNTkgMTAwNjQ0
CkdJVCBiaW5hcnkgcGF0Y2gKZGVsdGEgNDUKemNtYlFWbENmKGc8QXlmVCVAMEo2PWBpT3I2aXA1
YzVhdFlLQ305QXk4NEBTSVhWOyU+O0s7SWhuYlI5VjBEOU9ECkE+aV9AJQoKZGVsdGEgNTcKemNt
ZUJMJHY5fng8QXlmVCRzMHVZNz5nKFc2X0s0UlZ5clYrS3dNPDw4JlJ7KD1TMXMoOUF+ITQ9Ylhl
USYrK0cpCk5UO3Q1T2BKQkBwSz4laDw2LUB2RAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZTVhOTJjYS4uOWY3NjY0ZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTM0NDYsNyArMzQ0Niw2IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9D
b29raWVJdGVtc1ZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0
YWJhc2UuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVy
eVZpZXcuanMnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VzUGFu
ZWwuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VUYWJsZVZp
ZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMnLApAQCAtMzQ4Niw2
ICszNDg1LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1l
LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU3RhdHVzQmFyQnV0dG9uLmpzJywKKyAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1N0b3JhZ2VQYW5lbC5qcycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL1RvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzJywKQEAgLTM1
MDMsNyArMzUwMyw2IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMv
Y29uc29sZUJ1dHRvbkdseXBoLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvY29va2llLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvZGF0YWJhc2UucG5nJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9kYXRhYmFzZXNJY29uLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZGF0YWJhc2VUYWJsZS5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvSW1hZ2VzL2RlYnVnZ2VyQ29udGludWUucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9kZWJ1Z2dlclBhdXNlLnBuZycsCkBAIC0zNTg0LDYgKzM1ODMs
NyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3N0YXR1c2Jhck1l
bnVCdXR0b25TZWxlY3RlZC5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3N0YXR1c2JhclJlc2l6ZXJIb3Jpem9udGFsLnBuZycsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3RhdHVzYmFyUmVzaXplclZlcnRpY2FsLnBuZycsCisg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvc3RvcmFnZUljb24ucG5nJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy90aW1lbGluZUhvbGxvd1Bp
bGxCbHVlLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvdGlt
ZWxpbmVIb2xsb3dQaWxsR3JheS5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbEdyZWVuLnBuZycsCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDE2NjI1OGMuLmVkMTU0MjYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNDc1LDggKzE0NzUsOCBA
QCBJbnNwZWN0b3JDb250cm9sbGVyOjpTcGVjaWFsUGFuZWxzIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNwZWNpYWxQYW5lbEZvckpTTmFtZShjbwogICAgICAgICByZXR1cm4gU2NyaXB0c1BhbmVsOwog
ICAgIGVsc2UgaWYgKHBhbmVsTmFtZSA9PSAicHJvZmlsZXMiKQogICAgICAgICByZXR1cm4gUHJv
ZmlsZXNQYW5lbDsKLSAgICBlbHNlIGlmIChwYW5lbE5hbWUgPT0gImRhdGFiYXNlcyIpCi0gICAg
ICAgIHJldHVybiBEYXRhYmFzZXNQYW5lbDsKKyAgICBlbHNlIGlmIChwYW5lbE5hbWUgPT0gInN0
b3JhZ2UiIHx8IHBhbmVsTmFtZSA9PSAiZGF0YWJhc2VzIikKKyAgICAgICAgcmV0dXJuIFN0b3Jh
Z2VQYW5lbDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBFbGVtZW50c1BhbmVsOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGVjOGY2ODcuLmQxYmE3MWQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTk0LDExICs5NCwx
MSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBlbnVtIHsKICAgICAgICAgQ3VycmVudFBhbmVsLAog
ICAgICAgICBDb25zb2xlUGFuZWwsCi0gICAgICAgIERhdGFiYXNlc1BhbmVsLAogICAgICAgICBF
bGVtZW50c1BhbmVsLAogICAgICAgICBQcm9maWxlc1BhbmVsLAogICAgICAgICBSZXNvdXJjZXNQ
YW5lbCwKLSAgICAgICAgU2NyaXB0c1BhbmVsCisgICAgICAgIFNjcmlwdHNQYW5lbCwKKyAgICAg
ICAgU3RvcmFnZVBhbmVsCiAgICAgfSBTcGVjaWFsUGFuZWxzOwogCiAgICAgc3RydWN0IFNldHRp
bmcgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IDUyYTY4OTku
LmY4ODI0ZmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTEz
OSw5ICsxMzksNiBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzaG93UGFuZWwoaW50IHBhbmVs
KQogICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OkNvbnNvbGVQYW5lbDoKICAgICAg
ICAgICAgIHNob3dGdW5jdGlvbk5hbWUgPSAic2hvd0NvbnNvbGUiOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6RGF0YWJhc2VzUGFuZWw6Ci0g
ICAgICAgICAgICBzaG93RnVuY3Rpb25OYW1lID0gInNob3dEYXRhYmFzZXNQYW5lbCI7Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpFbGVtZW50
c1BhbmVsOgogICAgICAgICAgICAgc2hvd0Z1bmN0aW9uTmFtZSA9ICJzaG93RWxlbWVudHNQYW5l
bCI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE1NCw2ICsxNTEsOSBAQCB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpzaG93UGFuZWwoaW50IHBhbmVsKQogICAgICAgICBjYXNlIEluc3BlY3RvckNv
bnRyb2xsZXI6OlNjcmlwdHNQYW5lbDoKICAgICAgICAgICAgIHNob3dGdW5jdGlvbk5hbWUgPSAi
c2hvd1NjcmlwdHNQYW5lbCI7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNw
ZWN0b3JDb250cm9sbGVyOjpTdG9yYWdlUGFuZWw6CisgICAgICAgICAgICBzaG93RnVuY3Rpb25O
YW1lID0gInNob3dTdG9yYWdlUGFuZWwiOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHNo
b3dGdW5jdGlvbk5hbWUgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RPTVN0b3JhZ2VEYXRhR3JpZC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01TdG9yYWdlRGF0YUdyaWQuanMKaW5kZXggMDMyNmJjNy4uZWZkZDA5MCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2VEYXRhR3JpZC5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZURhdGFHcmlkLmpzCkBAIC00NCw3
ICs0NCw3IEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQucHJvdG90eXBlID0gewog
ICAgICAgICB0aGlzLl9lZGl0aW5nID0gdHJ1ZTsKICAgICAgICAgdGhpcy5fZWRpdGluZ05vZGUg
PSBub2RlOwogICAgICAgICB0aGlzLl9lZGl0aW5nTm9kZS5zZWxlY3QoKTsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMuX3VucmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5l
cigpOworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3JhZ2UuX3VucmVnaXN0ZXJTdG9y
YWdlRXZlbnRMaXN0ZW5lcigpOwogCiAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fZWRpdGlu
Z05vZGUuX2VsZW1lbnQuY2hpbGRyZW5bY29sdW1uXTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnN0
YXJ0RWRpdGluZyhlbGVtZW50LCB0aGlzLl9lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIHRo
aXMuX2VkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgZWxlbWVudC50ZXh0Q29udGVudCk7CkBA
IC02OSw3ICs2OSw3IEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0RWRpdGluZ0NvbHVtbk9mRGF0YUdy
aWROb2RlKHRoaXMuX2VkaXRpbmdOb2RlLCAwKTsKIAogICAgICAgICB0aGlzLl9lZGl0aW5nID0g
dHJ1ZTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMuX3VucmVnaXN0ZXJT
dG9yYWdlRXZlbnRMaXN0ZW5lcigpOworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3Jh
Z2UuX3VucmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcigpOwogICAgICAgICBXZWJJbnNwZWN0
b3Iuc3RhcnRFZGl0aW5nKGVsZW1lbnQsIHRoaXMuX2VkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlz
KSwgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBlbGVtZW50LnRleHRDb250ZW50
KTsKICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoZWxlbWVu
dCwgMCwgZWxlbWVudCwgMSk7CiAgICAgfSwKQEAgLTExOCw3ICsxMTgsNyBAQCBXZWJJbnNwZWN0
b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIHZhciBkb21TdG9yYWdlID0gV2ViSW5zcGVjdG9yLnBhbmVs
cy5kYXRhYmFzZXMudmlzaWJsZVZpZXcuZG9tU3RvcmFnZS5kb21TdG9yYWdlOworICAgICAgICB2
YXIgZG9tU3RvcmFnZSA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc3RvcmFnZS52aXNpYmxlVmlldy5k
b21TdG9yYWdlLmRvbVN0b3JhZ2U7CiAgICAgICAgIGlmIChkb21TdG9yYWdlKSB7CiAgICAgICAg
ICAgICBpZiAoY29sdW1uSWRlbnRpZmllciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRv
bVN0b3JhZ2UuZ2V0SXRlbShuZXdUZXh0KSAhPSBudWxsKSB7CkBAIC0xNDcsNyArMTQ3LDcgQEAg
V2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICBkZWxldGUgdGhpcy5fZWRpdGluZzsKICAgICAgICAgdGhpcy5fZWRpdGluZ05vZGUgPSBu
dWxsOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmRhdGFiYXNlcy5fcmVnaXN0ZXJTdG9y
YWdlRXZlbnRMaXN0ZW5lcigpOworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3JhZ2Uu
X3JlZ2lzdGVyU3RvcmFnZUV2ZW50TGlzdGVuZXIoKTsKICAgICB9LAogCiAgICAgZGVsZXRlU2Vs
ZWN0ZWRSb3c6IGZ1bmN0aW9uKCkKQEAgLTE1Niw3ICsxNTYsNyBAQCBXZWJJbnNwZWN0b3IuRE9N
U3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRO
b2RlLmlzQ3JlYXRpb25Ob2RlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBk
b21TdG9yYWdlID0gV2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMudmlzaWJsZVZpZXcuZG9t
U3RvcmFnZS5kb21TdG9yYWdlOworICAgICAgICB2YXIgZG9tU3RvcmFnZSA9IFdlYkluc3BlY3Rv
ci5wYW5lbHMuc3RvcmFnZS52aXNpYmxlVmlldy5kb21TdG9yYWdlLmRvbVN0b3JhZ2U7CiAgICAg
ICAgIGlmIChub2RlICYmIGRvbVN0b3JhZ2UpCiAgICAgICAgICAgICBkb21TdG9yYWdlLnJlbW92
ZUl0ZW0obm9kZS5kYXRhWzBdKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0ZW1zVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3LmpzCmluZGV4IDUxNDg4M2YuLjg2MTdkNjAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3
LmpzCkBAIC02Niw3ICs2Niw3IEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlSXRlbXNWaWV3LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIGhhc0RPTVN0b3JhZ2UgPSB0aGlzLmRvbVN0b3JhZ2Uu
ZG9tU3RvcmFnZTsKIAogICAgICAgICBpZiAoaGFzRE9NU3RvcmFnZSkgewotICAgICAgICAgICAg
dmFyIGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMuZGF0YUdyaWRGb3JE
T01TdG9yYWdlKHRoaXMuZG9tU3RvcmFnZS5kb21TdG9yYWdlKTsKKyAgICAgICAgICAgIHZhciBk
YXRhR3JpZCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc3RvcmFnZS5kYXRhR3JpZEZvckRPTVN0b3Jh
Z2UodGhpcy5kb21TdG9yYWdlLmRvbVN0b3JhZ2UpOwogICAgICAgICAgICAgaWYgKCFkYXRhR3Jp
ZCkKICAgICAgICAgICAgICAgICBoYXNET01TdG9yYWdlID0gMDsKICAgICAgICAgICAgIGVsc2Ug
ewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlW
aWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlWaWV3Lmpz
CmluZGV4IDQyOWMyYzMuLmQ4YTU0ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKQEAgLTE0MiwxMiArMTQyLDEyIEBAIFdlYkluc3Bl
Y3Rvci5EYXRhYmFzZVF1ZXJ5Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBfcXVlcnlGaW5pc2hl
ZDogZnVuY3Rpb24ocXVlcnksIHR4LCByZXN1bHQpCiAgICAgewotICAgICAgICB2YXIgZGF0YUdy
aWQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmRhdGFiYXNlcy5kYXRhR3JpZEZvclJlc3VsdChyZXN1
bHQpOworICAgICAgICB2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3JhZ2Uu
ZGF0YUdyaWRGb3JSZXN1bHQocmVzdWx0KTsKICAgICAgICAgZGF0YUdyaWQuZWxlbWVudC5hZGRT
dHlsZUNsYXNzKCJpbmxpbmUiKTsKICAgICAgICAgdGhpcy5fYXBwZW5kUXVlcnlSZXN1bHQocXVl
cnksIGRhdGFHcmlkLmVsZW1lbnQpOwogCiAgICAgICAgIGlmIChxdWVyeS5tYXRjaCgvXmNyZWF0
ZSAvaSkgfHwgcXVlcnkubWF0Y2goL15kcm9wIHRhYmxlIC9pKSkKLSAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnVwZGF0ZURhdGFiYXNlVGFibGVzKHRoaXMuZGF0YWJh
c2UpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zdG9yYWdlLnVwZGF0ZURhdGFi
YXNlVGFibGVzKHRoaXMuZGF0YWJhc2UpOwogICAgIH0sCiAKICAgICBfcXVlcnlFcnJvcjogZnVu
Y3Rpb24ocXVlcnksIGVycm9yKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RhdGFiYXNlVGFibGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Rh
dGFiYXNlVGFibGVWaWV3LmpzCmluZGV4IGJiY2E5ZDAuLjI5MjM1Y2YgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVRhYmxlVmlldy5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VUYWJsZVZpZXcuanMKQEAgLTY1LDcgKzY1
LDcgQEAgV2ViSW5zcGVjdG9yLkRhdGFiYXNlVGFibGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICB7
CiAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCi0gICAgICAgIHZhciBk
YXRhR3JpZCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLmRhdGFHcmlkRm9yUmVzdWx0
KHJlc3VsdCk7CisgICAgICAgIHZhciBkYXRhR3JpZCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc3Rv
cmFnZS5kYXRhR3JpZEZvclJlc3VsdChyZXN1bHQpOwogICAgICAgICBpZiAoIWRhdGFHcmlkKSB7
CiAgICAgICAgICAgICB2YXIgZW1wdHlNc2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CiAgICAgICAgICAgICBlbXB0eU1zZ0VsZW1lbnQuY2xhc3NOYW1lID0gInN0b3Jh
Z2UtdGFibGUtZW1wdHkiOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RhdGFiYXNlc1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNl
c1BhbmVsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWRiMGVlLi4wMDAwMDAw
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZXNQYW5lbC5qcworKysg
L2Rldi9udWxsCkBAIC0xLDY4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSm9zZXBoIFBlY29yYXJvCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkRhdGFiYXNlc1BhbmVsID0gZnVuY3Rpb24o
ZGF0YWJhc2UpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlBhbmVsLmNhbGwodGhpcyk7Ci0KLSAgICB0
aGlzLnNpZGViYXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
dGhpcy5zaWRlYmFyRWxlbWVudC5pZCA9ICJkYXRhYmFzZXMtc2lkZWJhciI7Ci0gICAgdGhpcy5z
aWRlYmFyRWxlbWVudC5jbGFzc05hbWUgPSAic2lkZWJhciI7Ci0gICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuc2lkZWJhckVsZW1lbnQpOwotCi0gICAgdGhpcy5zaWRlYmFyUmVzaXpl
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuc2lkZWJh
clJlc2l6ZUVsZW1lbnQuY2xhc3NOYW1lID0gInNpZGViYXItcmVzaXplci12ZXJ0aWNhbCI7Ci0g
ICAgdGhpcy5zaWRlYmFyUmVzaXplRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24i
LCB0aGlzLl9zdGFydFNpZGViYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2lkZWJhclJlc2l6ZUVsZW1lbnQpOwotCi0gICAg
dGhpcy5zaWRlYmFyVHJlZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwot
ICAgIHRoaXMuc2lkZWJhclRyZWVFbGVtZW50LmNsYXNzTmFtZSA9ICJzaWRlYmFyLXRyZWUiOwot
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zaWRlYmFyVHJlZUVsZW1l
bnQpOwotCi0gICAgdGhpcy5zaWRlYmFyVHJlZSA9IG5ldyBUcmVlT3V0bGluZSh0aGlzLnNpZGVi
YXJUcmVlRWxlbWVudCk7Ci0KLSAgICB0aGlzLmRhdGFiYXNlc0xpc3RUcmVlRWxlbWVudCA9IG5l
dyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudChXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkRBVEFCQVNFUyIpLCB7fSwgdHJ1ZSk7Ci0gICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBl
bmRDaGlsZCh0aGlzLmRhdGFiYXNlc0xpc3RUcmVlRWxlbWVudCk7Ci0gICAgdGhpcy5kYXRhYmFz
ZXNMaXN0VHJlZUVsZW1lbnQuZXhwYW5kKCk7Ci0KLSAgICB0aGlzLmxvY2FsU3RvcmFnZUxpc3RU
cmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudChX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxPQ0FMIFNUT1JBR0UiKSwge30sIHRydWUpOwotICAgIHRo
aXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5sb2NhbFN0b3JhZ2VMaXN0VHJlZUVsZW1l
bnQpOwotICAgIHRoaXMubG9jYWxTdG9yYWdlTGlzdFRyZWVFbGVtZW50LmV4cGFuZCgpOwotCi0g
ICAgdGhpcy5zZXNzaW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3Iu
U2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNFU1NJT04g
U1RPUkFHRSIpLCB7fSwgdHJ1ZSk7Ci0gICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZCh0
aGlzLnNlc3Npb25TdG9yYWdlTGlzdFRyZWVFbGVtZW50KTsKLSAgICB0aGlzLnNlc3Npb25TdG9y
YWdlTGlzdFRyZWVFbGVtZW50LmV4cGFuZCgpOwotCi0gICAgdGhpcy5jb29raWVMaXN0VHJlZUVs
ZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJTZWN0aW9uVHJlZUVsZW1lbnQoV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJDT09LSUVTIiksIHt9LCB0cnVlKTsKLSAgICB0aGlzLnNpZGViYXJU
cmVlLmFwcGVuZENoaWxkKHRoaXMuY29va2llTGlzdFRyZWVFbGVtZW50KTsKLSAgICB0aGlzLmNv
b2tpZUxpc3RUcmVlRWxlbWVudC5leHBhbmQoKTsKLQotICAgIHRoaXMuc3RvcmFnZVZpZXdzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5zdG9yYWdlVmlld3MuaWQg
PSAic3RvcmFnZS12aWV3cyI7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc3Rv
cmFnZVZpZXdzKTsKLQotICAgIHRoaXMuc3RvcmFnZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5l
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuc3RvcmFnZVZpZXdT
dGF0dXNCYXJJdGVtc0NvbnRhaW5lci5pZCA9ICJzdG9yYWdlLXZpZXctc3RhdHVzLWJhci1pdGVt
cyI7Ci0KLSAgICB0aGlzLnJlc2V0KCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5EYXRhYmFzZXNQYW5l
bC5wcm90b3R5cGUgPSB7Ci0gICAgdG9vbGJhckl0ZW1DbGFzczogImRhdGFiYXNlcyIsCi0KLSAg
ICBnZXQgdG9vbGJhckl0ZW1MYWJlbCgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJEYXRhYmFzZXMiKTsKLSAgICB9LAotCi0gICAgZ2V0IHN0YXR1c0Jhckl0
ZW1zKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5zdG9yYWdlVmlld1N0YXR1c0Jhckl0
ZW1zQ29udGFpbmVyXTsKLSAgICB9LAotCi0gICAgc2hvdzogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5zaG93LmNhbGwodGhpcyk7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0ZVNpZGViYXJXaWR0aCgpOwotICAgICAgICB0aGlzLl9yZWdpc3RlclN0
b3JhZ2VFdmVudExpc3RlbmVyKCk7Ci0gICAgICAgIHRoaXMucG9wdWxhdGVJbnRlcmZhY2UoKTsK
LSAgICB9LAotCi0gICAgcG9wdWxhdGVJbnRlcmZhY2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuYWRkQ29va2llcygpOwotICAgIH0sCi0KLSAgICByZXNldDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2RhdGFiYXNlcykgewotICAgICAgICAgICAgdmFyIGRh
dGFiYXNlc0xlbmd0aCA9IHRoaXMuX2RhdGFiYXNlcy5sZW5ndGg7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGRhdGFiYXNlc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGRhdGFiYXNlID0gdGhpcy5fZGF0YWJhc2VzW2ldOwotCi0gICAgICAgICAgICAgICAgZGVs
ZXRlIGRhdGFiYXNlLl90YWJsZVZpZXdzOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhYmFz
ZS5fcXVlcnlWaWV3OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5f
ZGF0YWJhc2VzID0gW107Ci0KLSAgICAgICAgdGhpcy5fdW5yZWdpc3RlclN0b3JhZ2VFdmVudExp
c3RlbmVyKCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2RvbVN0b3JhZ2UpIHsKLSAgICAgICAgICAg
IHZhciBkb21TdG9yYWdlTGVuZ3RoID0gdGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbVN0b3JhZ2VMZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgICAgIHZhciBkb21TdG9yYWdlID0gdGhpcy5fZG9tU3RvcmFnZVtpXTsKLQotICAgICAg
ICAgICAgICAgIGRlbGV0ZSBkb21TdG9yYWdlLl9kb21TdG9yYWdlVmlldzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2RvbVN0b3JhZ2UgPSBbXTsKLQotICAgICAg
ICBkZWxldGUgdGhpcy5jb29raWVUcmVlRWxlbWVudDsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2Nv
b2tpZVZpZXc7Ci0KLSAgICAgICAgdGhpcy5kYXRhYmFzZXNMaXN0VHJlZUVsZW1lbnQucmVtb3Zl
Q2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQucmVt
b3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLmNvb2tpZUxpc3RUcmVlRWxlbWVudC5y
ZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3cy5yZW1vdmVDaGlsZHJl
bigpOyAgICAgICAgCi0KLSAgICAgICAgdGhpcy5zdG9yYWdlVmlld1N0YXR1c0Jhckl0ZW1zQ29u
dGFpbmVyLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgfSwKLQotICAgIGhhbmRsZUtleUV2ZW50OiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2lkZWJhclRyZWUuaGFuZGxlS2V5
RXZlbnQoZXZlbnQpOwotICAgIH0sCi0KLSAgICBhZGREYXRhYmFzZTogZnVuY3Rpb24oZGF0YWJh
c2UpCi0gICAgewotICAgICAgICB0aGlzLl9kYXRhYmFzZXMucHVzaChkYXRhYmFzZSk7Ci0KLSAg
ICAgICAgdmFyIGRhdGFiYXNlVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFiYXNl
U2lkZWJhclRyZWVFbGVtZW50KGRhdGFiYXNlKTsKLSAgICAgICAgZGF0YWJhc2UuX2RhdGFiYXNl
c1RyZWVFbGVtZW50ID0gZGF0YWJhc2VUcmVlRWxlbWVudDsKLSAgICAgICAgdGhpcy5kYXRhYmFz
ZXNMaXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZGF0YWJhc2VUcmVlRWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIGFkZERPTVN0b3JhZ2U6IGZ1bmN0aW9uKGRvbVN0b3JhZ2UpCi0gICAgewotICAg
ICAgICB0aGlzLl9kb21TdG9yYWdlLnB1c2goZG9tU3RvcmFnZSk7Ci0gICAgICAgIHZhciBkb21T
dG9yYWdlVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VTaWRlYmFyVHJl
ZUVsZW1lbnQoZG9tU3RvcmFnZSwgKGRvbVN0b3JhZ2UuaXNMb2NhbFN0b3JhZ2UgPyAibG9jYWwt
c3RvcmFnZSIgOiAic2Vzc2lvbi1zdG9yYWdlIikpOwotICAgICAgICBkb21TdG9yYWdlLl9kb21T
dG9yYWdlVHJlZUVsZW1lbnQgPSBkb21TdG9yYWdlVHJlZUVsZW1lbnQ7Ci0gICAgICAgIGlmIChk
b21TdG9yYWdlLmlzTG9jYWxTdG9yYWdlKQotICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VM
aXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9tU3RvcmFnZVRyZWVFbGVtZW50KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5h
cHBlbmRDaGlsZChkb21TdG9yYWdlVHJlZUVsZW1lbnQpOwotICAgIH0sCi0KLSAgICBhZGRDb29r
aWVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuY29va2llVHJlZUVsZW1l
bnQpIHsKLSAgICAgICAgICAgIHRoaXMuY29va2llVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVj
dG9yLkNvb2tpZVNpZGViYXJUcmVlRWxlbWVudCgpOwotICAgICAgICAgICAgdGhpcy5jb29raWVM
aXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jb29raWVUcmVlRWxlbWVudCk7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgc2VsZWN0RGF0YWJhc2U6IGZ1bmN0aW9uKGRiKQotICAgIHsK
LSAgICAgICAgdmFyIGRhdGFiYXNlOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhp
cy5fZGF0YWJhc2VzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICBkYXRhYmFz
ZSA9IHRoaXMuX2RhdGFiYXNlc1tpXTsKLSAgICAgICAgICAgIGlmICggZGIgPT09IGRhdGFiYXNl
LmRhdGFiYXNlICkgewotICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RhdGFiYXNlKGRhdGFiYXNl
KTsKLSAgICAgICAgICAgICAgICBkYXRhYmFzZS5fZGF0YWJhc2VzVHJlZUVsZW1lbnQuc2VsZWN0
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIHNlbGVjdERPTVN0b3JhZ2U6IGZ1bmN0aW9uKHMpCi0gICAgewotICAgICAg
ICB2YXIgaXNMb2NhbFN0b3JhZ2UgPSAocyA9PT0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0
ZWRXaW5kb3coKS5sb2NhbFN0b3JhZ2UpOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0g
dGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgdmFy
IHN0b3JhZ2UgPSB0aGlzLl9kb21TdG9yYWdlW2ldOwotICAgICAgICAgICAgaWYgKCBpc0xvY2Fs
U3RvcmFnZSA9PT0gc3RvcmFnZS5pc0xvY2FsU3RvcmFnZSApIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnNob3dET01TdG9yYWdlKHN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIHN0b3JhZ2UuX2Rv
bVN0b3JhZ2VUcmVlRWxlbWVudC5zZWxlY3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgc2hvd0RhdGFiYXNlOiBmdW5j
dGlvbihkYXRhYmFzZSwgdGFibGVOYW1lKQotICAgIHsKLSAgICAgICAgaWYgKCFkYXRhYmFzZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKLSAg
ICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgpOwotCi0gICAgICAgIHZhciB2aWV3Owot
ICAgICAgICBpZiAodGFibGVOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoISgiX3RhYmxlVmlld3Mi
IGluIGRhdGFiYXNlKSkKLSAgICAgICAgICAgICAgICBkYXRhYmFzZS5fdGFibGVWaWV3cyA9IHt9
OwotICAgICAgICAgICAgdmlldyA9IGRhdGFiYXNlLl90YWJsZVZpZXdzW3RhYmxlTmFtZV07Ci0g
ICAgICAgICAgICBpZiAoIXZpZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3ID0gbmV3IFdlYklu
c3BlY3Rvci5EYXRhYmFzZVRhYmxlVmlldyhkYXRhYmFzZSwgdGFibGVOYW1lKTsKLSAgICAgICAg
ICAgICAgICBkYXRhYmFzZS5fdGFibGVWaWV3c1t0YWJsZU5hbWVdID0gdmlldzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZpZXcgPSBkYXRhYmFzZS5fcXVl
cnlWaWV3OwotICAgICAgICAgICAgaWYgKCF2aWV3KSB7Ci0gICAgICAgICAgICAgICAgdmlldyA9
IG5ldyBXZWJJbnNwZWN0b3IuRGF0YWJhc2VRdWVyeVZpZXcoZGF0YWJhc2UpOwotICAgICAgICAg
ICAgICAgIGRhdGFiYXNlLl9xdWVyeVZpZXcgPSB2aWV3OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgdmlldy5zaG93KHRoaXMuc3RvcmFnZVZpZXdzKTsKLQotICAgICAgICB0
aGlzLnZpc2libGVWaWV3ID0gdmlldzsKLQotICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVz
QmFySXRlbXNDb250YWluZXIucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdmFyIHN0YXR1c0Jh
ckl0ZW1zID0gdmlldy5zdGF0dXNCYXJJdGVtcyB8fCBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdGF0dXNCYXJJdGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuc3Rv
cmFnZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5hcHBlbmRDaGlsZChzdGF0dXNCYXJJdGVt
c1tpXSk7Ci0gICAgfSwKLQotICAgIHNob3dET01TdG9yYWdlOiBmdW5jdGlvbihkb21TdG9yYWdl
KQotICAgIHsKLSAgICAgICAgaWYgKCFkb21TdG9yYWdlKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3KQotICAgICAgICAgICAgdGhpcy52aXNpYmxl
Vmlldy5oaWRlKCk7Ci0KLSAgICAgICAgdmFyIHZpZXc7Ci0gICAgICAgIHZpZXcgPSBkb21TdG9y
YWdlLl9kb21TdG9yYWdlVmlldzsKLSAgICAgICAgaWYgKCF2aWV3KSB7Ci0gICAgICAgICAgICB2
aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5ET01TdG9yYWdlSXRlbXNWaWV3KGRvbVN0b3JhZ2UpOwot
ICAgICAgICAgICAgZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVZpZXcgPSB2aWV3OwotICAgICAgICB9
Ci0KLSAgICAgICAgdmlldy5zaG93KHRoaXMuc3RvcmFnZVZpZXdzKTsKLQotICAgICAgICB0aGlz
LnZpc2libGVWaWV3ID0gdmlldzsKLQotICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFy
SXRlbXNDb250YWluZXIucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdmFyIHN0YXR1c0Jhckl0
ZW1zID0gdmlldy5zdGF0dXNCYXJJdGVtczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
dGF0dXNCYXJJdGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuc3RvcmFnZVZpZXdT
dGF0dXNCYXJJdGVtc0NvbnRhaW5lci5hcHBlbmRDaGlsZChzdGF0dXNCYXJJdGVtc1tpXSk7Ci0g
ICAgfSwKLQotICAgIHNob3dDb29raWVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy52aXNpYmxlVmlldykKLSAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgpOwot
Ci0gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fY29va2llVmlldzsKLSAgICAgICAgaWYgKCF2aWV3
KSB7Ci0gICAgICAgICAgICB2aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5Db29raWVJdGVtc1ZpZXco
KTsKLSAgICAgICAgICAgIHRoaXMuX2Nvb2tpZVZpZXcgPSB2aWV3OwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmlldy5zaG93KHRoaXMuc3RvcmFnZVZpZXdzKTsKLQotICAgICAgICB0aGlzLnZpc2li
bGVWaWV3ID0gdmlldzsKLQotICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFySXRlbXND
b250YWluZXIucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdmFyIHN0YXR1c0Jhckl0ZW1zID0g
dmlldy5zdGF0dXNCYXJJdGVtczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0dXNC
YXJJdGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuc3RvcmFnZVZpZXdTdGF0dXNC
YXJJdGVtc0NvbnRhaW5lci5hcHBlbmRDaGlsZChzdGF0dXNCYXJJdGVtc1tpXSk7Ci0gICAgfSwK
LQotICAgIGNsb3NlVmlzaWJsZVZpZXc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLnZpc2libGVWaWV3KQotICAgICAgICAgICAgdGhpcy52aXNpYmxlVmlldy5oaWRlKCk7Ci0g
ICAgICAgIGRlbGV0ZSB0aGlzLnZpc2libGVWaWV3OwotICAgIH0sCi0KLSAgICB1cGRhdGVEYXRh
YmFzZVRhYmxlczogZnVuY3Rpb24oZGF0YWJhc2UpCi0gICAgewotICAgICAgICBpZiAoIWRhdGFi
YXNlIHx8ICFkYXRhYmFzZS5fZGF0YWJhc2VzVHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZGF0YWJhc2UuX2RhdGFiYXNlc1RyZWVFbGVtZW50LnNob3VsZFJlZnJl
c2hDaGlsZHJlbiA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCEoIl90YWJsZVZpZXdzIiBpbiBkYXRh
YmFzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHRhYmxlTmFtZXNIYXNo
ID0ge307Ci0gICAgICAgIHZhciB0YWJsZU5hbWVzID0gZGF0YWJhc2UudGFibGVOYW1lczsKLSAg
ICAgICAgdmFyIHRhYmxlTmFtZXNMZW5ndGggPSB0YWJsZU5hbWVzLmxlbmd0aDsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZU5hbWVzTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0
YWJsZU5hbWVzSGFzaFt0YWJsZU5hbWVzW2ldXSA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh2YXIg
dGFibGVOYW1lIGluIGRhdGFiYXNlLl90YWJsZVZpZXdzKSB7Ci0gICAgICAgICAgICBpZiAoISh0
YWJsZU5hbWUgaW4gdGFibGVOYW1lc0hhc2gpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
dmlzaWJsZVZpZXcgPT09IGRhdGFiYXNlLl90YWJsZVZpZXdzW3RhYmxlTmFtZV0pCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuY2xvc2VWaXNpYmxlVmlldygpOwotICAgICAgICAgICAgICAgIGRl
bGV0ZSBkYXRhYmFzZS5fdGFibGVWaWV3c1t0YWJsZU5hbWVdOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIGRhdGFHcmlkRm9yUmVzdWx0OiBmdW5jdGlvbihyZXN1bHQp
Ci0gICAgewotICAgICAgICBpZiAoIXJlc3VsdC5yb3dzLmxlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotCi0gICAgICAgIHZhciBjb2x1bW5zID0ge307Ci0KLSAgICAgICAgdmFyIHJv
d3MgPSByZXN1bHQucm93czsKLSAgICAgICAgZm9yICh2YXIgY29sdW1uSWRlbnRpZmllciBpbiBy
b3dzLml0ZW0oMCkpIHsKLSAgICAgICAgICAgIHZhciBjb2x1bW4gPSB7fTsKLSAgICAgICAgICAg
IGNvbHVtbi53aWR0aCA9IGNvbHVtbklkZW50aWZpZXIubGVuZ3RoOwotICAgICAgICAgICAgY29s
dW1uLnRpdGxlID0gY29sdW1uSWRlbnRpZmllcjsKLQotICAgICAgICAgICAgY29sdW1uc1tjb2x1
bW5JZGVudGlmaWVyXSA9IGNvbHVtbjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBub2RlcyA9
IFtdOwotICAgICAgICB2YXIgbGVuZ3RoID0gcm93cy5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBkYXRhID0ge307Ci0K
LSAgICAgICAgICAgIHZhciByb3cgPSByb3dzLml0ZW0oaSk7Ci0gICAgICAgICAgICBmb3IgKHZh
ciBjb2x1bW5JZGVudGlmaWVyIGluIHJvdykgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiAo
QnVnIDE5NDM5KSBXZSBzaG91bGQgc3BlY2lhbGx5IGZvcm1hdCBTUUwgTlVMTCBoZXJlCi0gICAg
ICAgICAgICAgICAgLy8gKHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IEphdmFTY3JpcHQgbnVsbCBo
ZXJlLCBhbmQgdHVybmVkCi0gICAgICAgICAgICAgICAgLy8gaW50byB0aGUgc3RyaW5nICJudWxs
IiBieSB0aGUgU3RyaW5nKCkgZnVuY3Rpb24pLgotICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0g
U3RyaW5nKHJvd1tjb2x1bW5JZGVudGlmaWVyXSk7Ci0gICAgICAgICAgICAgICAgZGF0YVtjb2x1
bW5JZGVudGlmaWVyXSA9IHRleHQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoID4g
Y29sdW1uc1tjb2x1bW5JZGVudGlmaWVyXS53aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgY29s
dW1uc1tjb2x1bW5JZGVudGlmaWVyXS53aWR0aCA9IHRleHQubGVuZ3RoOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2Rl
KGRhdGEsIGZhbHNlKTsKLSAgICAgICAgICAgIG5vZGUuc2VsZWN0YWJsZSA9IGZhbHNlOwotICAg
ICAgICAgICAgbm9kZXMucHVzaChub2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0b3Rh
bENvbHVtbldpZHRocyA9IDA7Ci0gICAgICAgIGZvciAodmFyIGNvbHVtbklkZW50aWZpZXIgaW4g
Y29sdW1ucykKLSAgICAgICAgICAgIHRvdGFsQ29sdW1uV2lkdGhzICs9IGNvbHVtbnNbY29sdW1u
SWRlbnRpZmllcl0ud2lkdGg7Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBwZXJjZW50YWdl
IHdpZHRoIGZvciB0aGUgY29sdW1ucy4KLSAgICAgICAgY29uc3QgbWluaW11bVByZWNlbnQgPSA1
OwotICAgICAgICB2YXIgcmVjb3VwUGVyY2VudCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGNvbHVt
bklkZW50aWZpZXIgaW4gY29sdW1ucykgewotICAgICAgICAgICAgdmFyIHdpZHRoID0gY29sdW1u
c1tjb2x1bW5JZGVudGlmaWVyXS53aWR0aDsKLSAgICAgICAgICAgIHdpZHRoID0gTWF0aC5yb3Vu
ZCgod2lkdGggLyB0b3RhbENvbHVtbldpZHRocykgKiAxMDApOwotICAgICAgICAgICAgaWYgKHdp
ZHRoIDwgbWluaW11bVByZWNlbnQpIHsKLSAgICAgICAgICAgICAgICByZWNvdXBQZXJjZW50ICs9
IChtaW5pbXVtUHJlY2VudCAtIHdpZHRoKTsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IG1pbmlt
dW1QcmVjZW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb2x1bW5zW2NvbHVtbklk
ZW50aWZpZXJdLndpZHRoID0gd2lkdGg7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFbmZvcmNl
IHRoZSBtaW5pbXVtIHBlcmNlbnRhZ2Ugd2lkdGguCi0gICAgICAgIHdoaWxlIChyZWNvdXBQZXJj
ZW50ID4gMCkgewotICAgICAgICAgICAgZm9yICh2YXIgY29sdW1uSWRlbnRpZmllciBpbiBjb2x1
bW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0ud2lk
dGggPiBtaW5pbXVtUHJlY2VudCkgewotICAgICAgICAgICAgICAgICAgICAtLWNvbHVtbnNbY29s
dW1uSWRlbnRpZmllcl0ud2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIC0tcmVjb3VwUGVyY2Vu
dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvdXBQZXJjZW50KQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBwcm9wZXJ0eSB0byBhIHN0cmlu
ZyBzdWl0YWJsZSBmb3IgYSBzdHlsZSB3aWR0aC4KLSAgICAgICAgZm9yICh2YXIgY29sdW1uSWRl
bnRpZmllciBpbiBjb2x1bW5zKQotICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5JZGVudGlmaWVy
XS53aWR0aCArPSAiJSI7Ci0KLSAgICAgICAgdmFyIGRhdGFHcmlkID0gbmV3IFdlYkluc3BlY3Rv
ci5EYXRhR3JpZChjb2x1bW5zKTsKLSAgICAgICAgdmFyIGxlbmd0aCA9IG5vZGVzLmxlbmd0aDsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRh
dGFHcmlkLmFwcGVuZENoaWxkKG5vZGVzW2ldKTsKLQotICAgICAgICByZXR1cm4gZGF0YUdyaWQ7
Ci0gICAgfSwKLQotICAgIGRhdGFHcmlkRm9yRE9NU3RvcmFnZTogZnVuY3Rpb24oZG9tU3RvcmFn
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZG9tU3RvcmFnZS5sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIgY29sdW1ucyA9IHt9OwotICAgICAgICBjb2x1bW5z
WzBdID0ge307Ci0gICAgICAgIGNvbHVtbnNbMV0gPSB7fTsKLSAgICAgICAgY29sdW1uc1swXS50
aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiS2V5Iik7Ci0gICAgICAgIGNvbHVtbnNbMF0u
d2lkdGggPSBjb2x1bW5zWzBdLnRpdGxlLmxlbmd0aDsKLSAgICAgICAgY29sdW1uc1sxXS50aXRs
ZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVmFsdWUiKTsKLSAgICAgICAgY29sdW1uc1sxXS53
aWR0aCA9IGNvbHVtbnNbMV0udGl0bGUubGVuZ3RoOwotCi0gICAgICAgIHZhciBub2RlcyA9IFtd
OwotICAgICAgICAKLSAgICAgICAgdmFyIGxlbmd0aCA9IGRvbVN0b3JhZ2UubGVuZ3RoOwotICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZG9tU3RvcmFnZS5sZW5ndGg7IGluZGV4
KyspIHsKLSAgICAgICAgICAgIHZhciBkYXRhID0ge307Ci0gICAgICAgCi0gICAgICAgICAgICB2
YXIga2V5ID0gU3RyaW5nKGRvbVN0b3JhZ2Uua2V5KGluZGV4KSk7Ci0gICAgICAgICAgICBkYXRh
WzBdID0ga2V5OwotICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPiBjb2x1bW5zWzBdLndpZHRo
KQotICAgICAgICAgICAgICAgIGNvbHVtbnNbMF0ud2lkdGggPSBrZXkubGVuZ3RoOwotICAgICAg
ICAKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IFN0cmluZyhkb21TdG9yYWdlLmdldEl0ZW0oa2V5
KSk7Ci0gICAgICAgICAgICBkYXRhWzFdID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
bGVuZ3RoID4gY29sdW1uc1sxXS53aWR0aCkKLSAgICAgICAgICAgICAgICBjb2x1bW5zWzFdLndp
ZHRoID0gdmFsdWUubGVuZ3RoOwotICAgICAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVj
dG9yLkRhdGFHcmlkTm9kZShkYXRhLCBmYWxzZSk7Ci0gICAgICAgICAgICBub2RlLnNlbGVjdGFi
bGUgPSB0cnVlOwotICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciB0b3RhbENvbHVtbldpZHRocyA9IGNvbHVtbnNbMF0ud2lkdGggKyBjb2x1bW5z
WzFdLndpZHRoOwotICAgICAgICB2YXIgd2lkdGggPSBNYXRoLnJvdW5kKChjb2x1bW5zWzBdLndp
ZHRoICogMTAwKSAvIHRvdGFsQ29sdW1uV2lkdGhzKTsKLSAgICAgICAgY29uc3QgbWluaW11bVBy
ZWNlbnQgPSAxMDsKLSAgICAgICAgaWYgKHdpZHRoIDwgbWluaW11bVByZWNlbnQpCi0gICAgICAg
ICAgICB3aWR0aCA9IG1pbmltdW1QcmVjZW50OwotICAgICAgICBpZiAod2lkdGggPiAxMDAgLSBt
aW5pbXVtUHJlY2VudCkKLSAgICAgICAgICAgIHdpZHRoID0gMTAwIC0gbWluaW11bVByZWNlbnQ7
Ci0gICAgICAgIGNvbHVtbnNbMF0ud2lkdGggPSB3aWR0aDsKLSAgICAgICAgY29sdW1uc1sxXS53
aWR0aCA9IDEwMCAtIHdpZHRoOwotICAgICAgICBjb2x1bW5zWzBdLndpZHRoICs9ICIlIjsKLSAg
ICAgICAgY29sdW1uc1sxXS53aWR0aCArPSAiJSI7Ci0KLSAgICAgICAgdmFyIGRhdGFHcmlkID0g
bmV3IFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQoY29sdW1ucyk7Ci0gICAgICAgIHZh
ciBsZW5ndGggPSBub2Rlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBkYXRhR3JpZC5hcHBlbmRDaGlsZChub2Rlc1tpXSk7Ci0g
ICAgICAgIGRhdGFHcmlkLmFkZENyZWF0aW9uTm9kZShmYWxzZSk7Ci0gICAgICAgIGlmIChsZW5n
dGggPiAwKQotICAgICAgICAgICAgbm9kZXNbMF0uc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICBy
ZXR1cm4gZGF0YUdyaWQ7Ci0gICAgfSwKLQotICAgIHJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdmFyIHZpc2libGVWaWV3ID0gdGhpcy52aXNpYmxlVmlldzsKLSAgICAgICAgaWYg
KHZpc2libGVWaWV3ICYmICJyZXNpemUiIGluIHZpc2libGVWaWV3KQotICAgICAgICAgICAgdmlz
aWJsZVZpZXcucmVzaXplKCk7Ci0gICAgfSwKLQotICAgIF9yZWdpc3RlclN0b3JhZ2VFdmVudExp
c3RlbmVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0g
SW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKTsKLSAgICAgICAgaWYgKCFpbnNw
ZWN0ZWRXaW5kb3cgfHwgIWluc3BlY3RlZFdpbmRvdy5kb2N1bWVudCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB0aGlzLl9zdG9yYWdlRXZlbnRMaXN0ZW5lciA9IEluc3BlY3RvckNv
bnRyb2xsZXIud3JhcENhbGxiYWNrKHRoaXMuX3N0b3JhZ2VFdmVudC5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgaW5zcGVjdGVkV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCB0aGlzLl9z
dG9yYWdlRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIF91bnJlZ2lzdGVyU3Rv
cmFnZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
c3RvcmFnZUV2ZW50TGlzdGVuZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCk7
Ci0gICAgICAgIGlmICghaW5zcGVjdGVkV2luZG93IHx8ICFpbnNwZWN0ZWRXaW5kb3cuZG9jdW1l
bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaW5zcGVjdGVkV2luZG93LnJlbW92
ZUV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCB0aGlzLl9zdG9yYWdlRXZlbnRMaXN0ZW5lciwgdHJ1
ZSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zdG9yYWdlRXZlbnRMaXN0ZW5lcjsKLSAgICB9LAot
Ci0gICAgX3N0b3JhZ2VFdmVudDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAo
IXRoaXMuX2RvbVN0b3JhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGlz
TG9jYWxTdG9yYWdlID0gKGV2ZW50LnN0b3JhZ2VBcmVhID09PSBJbnNwZWN0b3JDb250cm9sbGVy
Lmluc3BlY3RlZFdpbmRvdygpLmxvY2FsU3RvcmFnZSk7Ci0gICAgICAgIHZhciBkb21TdG9yYWdl
TGVuZ3RoID0gdGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZG9tU3RvcmFnZUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgZG9tU3RvcmFn
ZSA9IHRoaXMuX2RvbVN0b3JhZ2VbaV07Ci0gICAgICAgICAgICBpZiAoaXNMb2NhbFN0b3JhZ2Ug
PT09IGRvbVN0b3JhZ2UuaXNMb2NhbFN0b3JhZ2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmll
dyA9IGRvbVN0b3JhZ2UuX2RvbVN0b3JhZ2VWaWV3OwotICAgICAgICAgICAgICAgIGlmICh0aGlz
LnZpc2libGVWaWV3ICYmIHZpZXcgPT09IHRoaXMudmlzaWJsZVZpZXcpCi0gICAgICAgICAgICAg
ICAgICAgIGRvbVN0b3JhZ2UuX2RvbVN0b3JhZ2VWaWV3LnVwZGF0ZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9zdGFydFNpZGViYXJEcmFnZ2luZzogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCh0
aGlzLnNpZGViYXJSZXNpemVFbGVtZW50LCB0aGlzLl9zaWRlYmFyRHJhZ2dpbmcuYmluZCh0aGlz
KSwgdGhpcy5fZW5kU2lkZWJhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2ZW50LCAiY29sLXJlc2l6
ZSIpOwotICAgIH0sCi0KLSAgICBfc2lkZWJhckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNpZGViYXJXaWR0aChldmVudC5wYWdlWCk7Ci0KLSAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgX2VuZFNpZGViYXJE
cmFnZ2luZzogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuZWxl
bWVudERyYWdFbmQoZXZlbnQpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlU2lkZWJhcldpZHRoOiBm
dW5jdGlvbih3aWR0aCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnNpZGViYXJFbGVtZW50Lm9m
ZnNldFdpZHRoIDw9IDApIHsKLSAgICAgICAgICAgIC8vIFRoZSBzdHlsZXNoZWV0IGhhc24ndCBs
b2FkZWQgeWV0IG9yIHRoZSB3aW5kb3cgaXMgY2xvc2VkLAotICAgICAgICAgICAgLy8gc28gd2Ug
Y2FuJ3QgY2FsY3VsYXRlIHdoYXQgaXMgbmVlZC4gUmV0dXJuIGVhcmx5LgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEoIl9jdXJyZW50U2lkZWJhcldpZHRo
IiBpbiB0aGlzKSkKLSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTaWRlYmFyV2lkdGggPSB0aGlz
LnNpZGViYXJFbGVtZW50Lm9mZnNldFdpZHRoOwotCi0gICAgICAgIGlmICh0eXBlb2Ygd2lkdGgg
PT09ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9jdXJyZW50U2lkZWJh
cldpZHRoOwotCi0gICAgICAgIHdpZHRoID0gTnVtYmVyLmNvbnN0cmFpbih3aWR0aCwgUHJlZmVy
ZW5jZXMubWluU2lkZWJhcldpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCAvIDIpOwotCi0gICAgICAg
IHRoaXMuX2N1cnJlbnRTaWRlYmFyV2lkdGggPSB3aWR0aDsKLQotICAgICAgICB0aGlzLnNpZGVi
YXJFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwotICAgICAgICB0aGlzLnN0b3Jh
Z2VWaWV3cy5zdHlsZS5sZWZ0ID0gd2lkdGggKyAicHgiOwotICAgICAgICB0aGlzLnN0b3JhZ2VW
aWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIuc3R5bGUubGVmdCA9IHdpZHRoICsgInB4IjsKLSAg
ICAgICAgdGhpcy5zaWRlYmFyUmVzaXplRWxlbWVudC5zdHlsZS5sZWZ0ID0gKHdpZHRoIC0gMykg
KyAicHgiOwotICAgICAgICAKLSAgICAgICAgdmFyIHZpc2libGVWaWV3ID0gdGhpcy52aXNpYmxl
VmlldzsKLSAgICAgICAgaWYgKHZpc2libGVWaWV3ICYmICJyZXNpemUiIGluIHZpc2libGVWaWV3
KQotICAgICAgICAgICAgdmlzaWJsZVZpZXcucmVzaXplKCk7Ci0gICAgfQotfQotCi1XZWJJbnNw
ZWN0b3IuRGF0YWJhc2VzUGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Q
YW5lbC5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5EYXRhYmFzZVNpZGViYXJUcmVlRWxlbWVu
dCA9IGZ1bmN0aW9uKGRhdGFiYXNlKQotewotICAgIHRoaXMuZGF0YWJhc2UgPSBkYXRhYmFzZTsK
LQotICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAiZGF0YWJh
c2Utc2lkZWJhci10cmVlLWl0ZW0iLCAiIiwgIiIsIGRhdGFiYXNlLCB0cnVlKTsKLQotICAgIHRo
aXMucmVmcmVzaFRpdGxlcygpOwotfQotCi1XZWJJbnNwZWN0b3IuRGF0YWJhc2VTaWRlYmFyVHJl
ZUVsZW1lbnQucHJvdG90eXBlID0gewotICAgIG9uc2VsZWN0OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmRhdGFiYXNlcy5zaG93RGF0YWJhc2UodGhpcy5k
YXRhYmFzZSk7Ci0gICAgfSwKLQotICAgIG9uY29sbGFwc2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIC8vIFJlcXVlc3QgYSByZWZyZXNoIGFmdGVyIGV2ZXJ5IGNvbGxhcHNlIHNvIHRoZSBu
ZXh0Ci0gICAgICAgIC8vIGV4cGFuZCB3aWxsIGhhdmUgYW4gdXBkYXRlZCB0YWJsZSBsaXN0Lgot
ICAgICAgICB0aGlzLnNob3VsZFJlZnJlc2hDaGlsZHJlbiA9IHRydWU7Ci0gICAgfSwKLQotICAg
IG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRy
ZW4oKTsKLQotICAgICAgICB2YXIgdGFibGVOYW1lcyA9IHRoaXMuZGF0YWJhc2UudGFibGVOYW1l
czsKLSAgICAgICAgdmFyIHRhYmxlTmFtZXNMZW5ndGggPSB0YWJsZU5hbWVzLmxlbmd0aDsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZU5hbWVzTGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICB0aGlzLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhckRhdGFiYXNlVGFi
bGVUcmVlRWxlbWVudCh0aGlzLmRhdGFiYXNlLCB0YWJsZU5hbWVzW2ldKSk7Ci0gICAgfSwKLQot
ICAgIGdldCBtYWluVGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZGF0YWJhc2Uu
bmFtZTsKLSAgICB9LAotCi0gICAgc2V0IG1haW5UaXRsZSh4KQotICAgIHsKLSAgICAgICAgLy8g
RG8gbm90aGluZy4KLSAgICB9LAotCi0gICAgZ2V0IHN1YnRpdGxlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLmRhdGFiYXNlLmRpc3BsYXlEb21haW47Ci0gICAgfSwKLQotICAgIHNldCBz
dWJ0aXRsZSh4KQotICAgIHsKLSAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICB9Ci19Ci0KLVdl
Ykluc3BlY3Rvci5EYXRhYmFzZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGU7Ci0KLVdlYkluc3Bl
Y3Rvci5TaWRlYmFyRGF0YWJhc2VUYWJsZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24oZGF0YWJhc2Us
IHRhYmxlTmFtZSkKLXsKLSAgICB0aGlzLmRhdGFiYXNlID0gZGF0YWJhc2U7Ci0gICAgdGhpcy50
YWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0KLSAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVt
ZW50LmNhbGwodGhpcywgImRhdGFiYXNlLXRhYmxlLXNpZGViYXItdHJlZS1pdGVtIHNtYWxsIiwg
dGFibGVOYW1lLCAiIiwgbnVsbCwgZmFsc2UpOwotfQotCi1XZWJJbnNwZWN0b3IuU2lkZWJhckRh
dGFiYXNlVGFibGVUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgb25zZWxlY3Q6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNob3dE
YXRhYmFzZSh0aGlzLmRhdGFiYXNlLCB0aGlzLnRhYmxlTmFtZSk7Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuU2lkZWJhckRhdGFiYXNlVGFibGVUcmVlRWxlbWVudC5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGU7Ci0KLVdlYklu
c3BlY3Rvci5ET01TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50ID0gZnVuY3Rpb24oZG9tU3RvcmFn
ZSwgY2xhc3NOYW1lKQotewotCi0gICAgdGhpcy5kb21TdG9yYWdlID0gZG9tU3RvcmFnZTsKLQot
ICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAiZG9tc3RvcmFn
ZS1zaWRlYmFyLXRyZWUtaXRlbSAiICsgY2xhc3NOYW1lLCBkb21TdG9yYWdlLCAiIiwgbnVsbCwg
ZmFsc2UpOwotCi0gICAgdGhpcy5yZWZyZXNoVGl0bGVzKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5E
T01TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBvbnNlbGVjdDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMu
c2hvd0RPTVN0b3JhZ2UodGhpcy5kb21TdG9yYWdlKTsKLSAgICB9LAotCi0gICAgZ2V0IG1haW5U
aXRsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5kb21TdG9yYWdlLmRvbWFpbjsKLSAg
ICB9LAotCi0gICAgc2V0IG1haW5UaXRsZSh4KQotICAgIHsKLSAgICAgICAgLy8gRG8gbm90aGlu
Zy4KLSAgICB9LAotCi0gICAgZ2V0IHN1YnRpdGxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAi
IjsgLy90aGlzLmRhdGFiYXNlLmRpc3BsYXlEb21haW47Ci0gICAgfSwKLQotICAgIHNldCBzdWJ0
aXRsZSh4KQotICAgIHsKLSAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICB9Ci19Ci0KLVdlYklu
c3BlY3Rvci5ET01TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZTsKLQotV2ViSW5zcGVj
dG9yLkNvb2tpZVNpZGViYXJUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LmNhbGwodGhpcywgImNvb2tpZS1zaWRlYmFyLXRyZWUt
aXRlbSIsIG51bGwsICIiLCBudWxsLCBmYWxzZSk7Ci0KLSAgICB0aGlzLnJlZnJlc2hUaXRsZXMo
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkNvb2tpZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUg
PSB7Ci0gICAgb25zZWxlY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5wYW5lbHMuZGF0YWJhc2VzLnNob3dDb29raWVzKCk7Ci0gICAgfSwKLQotICAgIGdldCBtYWlu
VGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29v
a2llcyIpOwotICAgIH0sCi0KLSAgICBzZXQgbWFpblRpdGxlKHgpCi0gICAgewotICAgICAgICAv
LyBEbyBub3RoaW5nLgotICAgIH0sCi0KLSAgICBnZXQgc3VidGl0bGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuICIiOwotICAgIH0sCi0KLSAgICBzZXQgc3VidGl0bGUoeCkKLSAgICB7Ci0gICAg
ICAgIC8vIERvIG5vdGhpbmcuCi0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuQ29va2llU2lkZWJh
clRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU2lkZWJhclRy
ZWVFbGVtZW50LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvZGF0YWJhc2VzSWNvbi5wbmcgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL2RhdGFiYXNlc0ljb24ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3OWM3YmIzYTJlYWU0ZmE5MWIwNWZlZmVmOWRkZjZjZWMzOGM0M2QyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpsaXRlcmFsIDcxNDgKemNtVjxJOHghUC1QKTxoOzNLfExrMDAwZTFOSkxUcTAw
MUJXMDAyTTsxXkBzNmR5YUxrMDAwMDlhN2JCbTAwMFhVCnowMDBYVTBSV251N3l0a2I4RUhkOVAq
Ny1aYlo+S0xaKlUrPExxaX5OYSZLbTdZLUlvZGMtcFBrY3tyNXM4VkIoRQp6b2YoRVBYMnhKX1ZQ
eE54P0FiK0BXWno0JkdjaDVsbHFKYSRTd2hpOShJJThnUjgmOCpCdU9FbXNPKEUybDRaXngKekB+
aVdedTUtPm09bDwoez9teW81ZEVleyRlNHB6OUFtVG1mYlElZihfNjNFNypxOWhsb3QjfiQqbHNg
bzBTYyVCCnojbHRne3U1Vj4hMHNwYilJe15Vej0jY2xJKGBrdmRgbyVlZHhDR0s5RkBXIWhMPCMp
JkI3YF9PeThzfF4wS256RAp6KjZSVFAqV1JfPjRnazBnaFM5P1M1SStGbV43UWxZMHplYEdLclkx
MiN0O0N4NGdkdC13WX59ZjJ6JUgxTWdTbSQKemQte2R9QWwoNFc8UkNCcUFPUCRIMEpEeWxjYz49
LUtASUBDeWgxKHEwVDl2dkt3O20kVUByaGQ5Uk5zcShuRz1rCnoycU9SPj1IJT1gVUU4djI2MktO
ZDAyY0cjdng4WHg3NU07Q0pBVGhaPyptWGcwMThybSZ0YDFeMFJWKjM3VjR3Qwp6ODJ8dGZ5YTUx
SEtaN3dWMGY1Wl9TVj9Ddm1JQGUqbGA4PH5VVnU4OT1ZZiMkVTtoaDFTXkBzb2RoTUhrNiZlOVIK
ejBVJTtYNSRaNUg1KTtYRWo1IShgJVd8QzZoX3hQZmt9VXpCJGJPMVlOJUdASkMjUTJ9YUdsfUtx
R2EqcEBZZUdPCnozKj5GYzZUQmVRTklmN0B1PD9wJG9BP29sQkZUMj9WPX1qN0pMT3spWlklYXxJ
PVQ2LUAmfWJ1cytEUjM4bVhHcQp6VDBgMklJKiliN15zXjB+OGN1RD9IRXVBT0Z9LUJnWShCckUh
MUNxSlM1fmpBK2lqTlpaclo8Zj15ZEZJPlVQMW4Kei1mYD5RKXdqRmZ7bGxKKmQtMHdSeWdxdz5A
ZnE/Ul84YWpaNGRrWGgqKjYoOTYrQko8eThtMHFPejIkTCs9MWBtCnpeOUw2cWVqSGpue1BXMGk8
bnF5I0RDeXw4dkIrXiQ5UXAoJXA2TWlXMHlkRSlpOFVFX2lZKjE3JTZeKVZNb2NHVgp6YUFjQ3Rh
QXQ5M2JMVVhiQHxAJCU8OyZ3Z0ZLfVZRTVpyciNteGM0RzF0TTJBVUtLNEFELXlwWmQwcH5gKUpe
R0kKekdQbE55WH05R3s8VnpMSGw8c1cweVF6SGh5KTZ8Z204ekJWX3J0NXk5O2pEcSlAVks0YGVe
SDg/Wj5PTlFGWGRjCnpecSVUSkd4KkR9OSNiRkp1PGZ+VnFlK3UjdnVPKmlDSGFNVXRIbiNwSGJV
RiFTNjEhVHVXZFRXOVR7KEktYGFLQgp6Y1R1YD54Kmd2K158LXZ9ZjFsVXUqNX1zMD54MG1UT0NR
fF9fNiYqKTdKUzxLKzRHQ25rb1p2MXUrTkNec05iME0Keip2O3tQaU5IelBsPkFpNWJrTnR9Wn1n
Yz5HazBmMD0wZC1SJjh5NTtFYDxNeFNVbUxlKDMwai0mR00weiRXYHN0CnojfCNEbEI4bm9Rek1A
KyZ4MG9gU0JlQXxMY0MzY0RFb19vX05wQFpXNTBSSXwlZlVeUztGUkswPWVENWk8X1lDWgp6PHR5
Y0g1Zn5OWjZqQnhUckpmYWVFe2NlMGl8PzFYQlJNVENCfTA+fmt3K2AmRTJiK0FZP2ZBei1fb1Rq
cWVmUysKeipXfVRQKiFuXztxOHFJRClJaU1laCo3KC1rVihZJE4yWkpCbj1ISXtXTGRVYjV2KXlZ
QjVWdW8tWjxiS15fPSFRCnpVdk96fm8hJXc5ZCNDJjFKcH5eMWRxPSZ2eT4pJEBlMkA4RV9PQT0q
M3RaZ0M4NitFUU1FQmJ0OElsJVM1TFIpWgp6RzVyMCh2NTVKQD1wITdGKVQ0NjhSSEYydiYwfWBQ
eCpwI1g9WTRffUE5Z1klQXYhVFM+M0RNRHNmPzg1KVpFa08KeihzSSglR3RPc2JvWE81UW58KGQh
K1MhdEcqSz0+Pm03YWZpO28tJmxPRGBfQj1YVnJ6VDxOJl96VkxJPUBVXzl+CnpVdjVtX3tCfj0p
YzxTfnskI20mPip+RmRVeTk0RWVfailTWUUxVH11Um8jRDNUN0FBSTw2LW9wZVVEdmgmRmkqNAp6
ayRGbWZ5Nz10bFUoTk9SOFp3YFVHfTw8KUhWWlR9VDYkakdZZlhDVChrOXdBXnMybzU9PDk3QWdw
UiY5bSl7MC0KekR0RTRRd1JVSHwrdG5sOEd5QUB9SEA0NWJwUjIkQiE7TyFqMTZxVGEhUkFrQUtK
V2VfYERKM0xkTl5qcFk/T1BuCnpafHYkZ1o5LSpZYitUekhXN19xcip3PXx+PHVqNDlDVWZNdT8o
Yz4zITMhRWMmX0E5cHJ2RyRaNT96e0h1M1UqOwp6SER5cDMzOztOZU00JTMld2IwZD1xZkVMP3dh
aFd0NkQtQ29ee254QGxXYStOR2tnbnMzTCVBPE80PjxrPDQ3WkMKemFBdEM0YUAlcGdwPTklOV5Q
YzYpPDxBcXkraStnY098VmJzbEpJM316RFdNWWU5PGRuU0gla0BpWF5XfFU2O05nCno8MWFITmRz
RDdoezxjRGlWeVJOdXJhUFBPRHdsNyRyJjZnfXNhQn5UcTVlYW9UQy1aS1g2ci1rTT5AeEpSJntJ
agp6Pmh6eCZKVC1ofjZ0QGt0dD1fbzc8b1doUyg8WlpLXkpFTFcjZnUlU21NP2Q8UyoyTiV0bE1v
fitqaUshdkZ+KXEKemNCRDlWSWR3YX5iTG54LWF9I2p1LVBPMUlnWnN4bEEzZ0gtaXRIV3F7Tihs
N2AtQE1KdWYkcXsxZElqVnFSRylGCnp7dyttanw0eHlyTCtYYlg1QzElfTZ1RXFLPD1BUXpCTC1x
b2U8dWt4MGhgRUAqcHlfSiV5dFQmZj1ee1hPLXYpRAp6Yk5ybnBscExQM3l1WSQhIT1HN0ZGbkdv
RHMlVzhEaztGQkxeKXhBI3lEZVgkQEpFJj9TOFM8Tnh2eTVHX0NVUV8KenFla25ZKX15VkRiIXY2
fiRkUFJnIz9PciNPYDVoaG8zQHowMiFGWTsmR01DMXlWWXkhai16ajdJdnUoa3lKTEc0CnotQEVr
Ml9iWSEkOThlaU5fMVNBa1lkQyQ+ZT5gQjRIWFp5ZVkwaFEtXmtWWGc0VEF4JmNKPWBQRnNsTSYl
S3x2JAp6MEB4TSsjTEVJbXgmdShJMTZaKkcqbDdUWU5lRUVkYlVANnMqVXR8P2ZDUGV8MDAhVTtw
XnllO0BCXlZEPTEycmAKejllSWZpcWxoUklSMUU0N1k4a0RLanpLcXxtb1h3M1hHe18xSkNpWmYz
OHFxfVg9VzRWZUM4bzZIYFdkTmh5fX17CnohNGsoWiZaQH44JXZ5KCYkM14zKyphJlBmWjEzPH5f
I3BmVWAhQEZEPjtuVzMhYyF1ZT10RzwhUyhDQyFEOyRYJgp6R2h8SjJBKlVLPUE/R3hnSkokbFlL
WClaWG1oem0oaFpvQ3hsVFYhUUFtMUdTMXB5TyoqJHROayNSTWFUNVRPZDsKejBJQ1NKTjk0QExq
VEBzeWlLMTt7PkVpWWh7MVN0YngxPGNFWmIlISphTDVlRW1kbC0jY1QtU1MjNDhSZntrNXJKCnpi
Rjh4MDc4NGFZUlppN3F3SVRIITRUNDZVV3w+ejApLSYxKEkjSWRAXzRlITI0RXpvS2pRcTkqOFY4
dyNaOWlmZgp6WExpfj0mKkh8OEQkQXl3eTtrM0J1KG0+Vz5oYHR7YmpNVnU2NmFTZ3Z1P2IqYmF3
bD1yfHFmbjgxZHhzR1Z3bS0KelF8IStoVT1eNHxzfURqMj4oZ1dRS01RM0pHZTN8S0EkQlBFQFdW
KmxRSX0pSVFIJlY3SU1mTlpgMT1XKmlUamg8CnpRP2dQUSk3O1k9RzhOQ3s9N2dVOGx4diQ7ZjNm
N1VjPmFZZUpWbTV5c1clOFdQdjZjZDYpZH1ZU0g4bGl2YzFhVgp6IU04XnxrQmpSSm9gdXlEODtU
cHZUOVI3alUkKHlyP2BVe1M/LUo7ND8zTCoyeypXfUZgPyt8P1llYWFvWFZQSnMKel4wakx3Y2d9
cmJWekZXPWlvd2ZaMDAwVmJ6eXMydDNyPXRWdlktbjM1aUZ2RnhGZX1aRWkjTGVMQWolSFFFJCpo
CnpeYlloWGJTczcodmxFa3JkQ3g+O0BARmJ6YG9WMC1lNDY8a1J2ZGMoYDszTG07PkErTSVFcyEo
VDd0dmljSHsxYAp6O24rT2NZVnE4N0k9Kz0laENQTFNmP3o9P0M5KUhQaUpjQHAocDMldU0+eGxP
dk44RCVDelVnVWJDb05VWW16JkYKemR5R1AoJTx6UXElPH5AUkwtPGJkXlloO24mPTY/WTtJTHMt
Rmp8T0RzOFpOa2MjSWteQXxjWWFGLVZrMF5zJCh5CnpJOX5qVE0zQUpnPFpHISFYIz9wTW5IdCRo
SWM+UUdgQzVlcE1MUSlDclJoenpvNzBzOHdpdX1oc1Z1MyFSZVBYKgp6S19mPWZTSWNwJHd6aV48
aCVRK1ZxbVJ+fkc1QlVVWjhXfVokYXZPZGVFV0FabHNUNkwmeUchJkl5LWstKjtvaEsKejlKMC1g
eUtEYyM7bDFPc0duYjJedEVKb2lVRlVZIXlBT00/P3A1O2leVUMkRV80KD4yP2U4NnM2Wm0kWUsj
K1pLCno5KF5RNERsfE4tRE9+VmlYaGlkMihJY3NtVzU9QU04ZT4jcjMqKlFxUWNzYy12WGdqfF5I
TmsmVSM1QWR8SUFGdQp6UXBeNXdfRmBfcGRIYWpmbXpuWT50fkBRUXhPVlBGezRMTWhabCVVfClY
VFMyREJQRVNBWE92Jk5VQiFwaVNEIVEKel8xNGQ2UDVXRVlUUTlkZ1oxMy0yYlA5S0NfanZVdF9n
ODxNX3s4X2NVXnNnOGB1T0s1ezt4aFc3dzNpK3EheHBnCnpEcHdIKDB8MXpUMWNHMXkmWDVMV0BP
c187eThBV3Q3JFV8UV5QUzA8RGZnSDZSamVDfUZpUlpFSUlBNk45Wm52MQp6b3toajMhP3U3QSFq
R19mNWorVD1oKDUjI1FZZE1LQmF1dVk3am1qYEhnbWFpRXBWcyhaUTdEPT93NG1QQXc7TysKem11
MmZVJC1mK2pPQj8pWV9feUYrZXFVP1VYX28hQWAmO2dSY0toR2RgVlJRPjIzWS01WkZ0Vz0tTnhT
aFF8X3RGCnp6dlg1I3VpTCQjdjk5LU89RE9jdl4xOSZpcyYmSVAkSloxOz1+O0smR31AQiU7Oyt7
MW0raH5AVWtpM0x5cnAtUgp6YjtXbCNfSnNGSl5hYmBDZU1sUDY5WCRESUA4e3cjXkZ0alkhbFF2
PnJzR2wqKmh6PH1xVXJkcnpUZFhiJGpxfE0KelBSK2dnVU91MF9WN0Q7d0JXfV4pcnt2Rn1yS259
ejwlPXNFRHsoNmV0NStHeDM8a2ozZUYqPm5hRThJTzsxSF5YCnpwJU1JbFlhaXt2YGEySyt6PFVT
VCtYNFU/MDUqVWoxT3A5JUFxMSNrMGZ0fSV1eSQ3aTBBTUJvb09jOE9zUXF5eQp6YGsmN1leTnQ3
dTA1QS11OX00bUpeJFZsdyk5RXlDSWpVKXByLUJASHZ5emZKezBrVCl7eVc5QEYrS25RMDNjJlgK
elFjVkI9Wkl9UTZiQitLMi1jJGVwZkBBO3ljKyZzPyFAS3xoR1Vvc1E5Q1lKM0F+eWc0NG95aSFL
fiM5ISM5Mz5QCno5TElHJVJuXmFWQDlka3FPWU1wQE5sflU9SFUkTCZCR1psKVMmPCs+LXotRWg0
ZnFFbmkyT30pMDRHMlkhJEVATgp6UTtZO3M1Rj0wIWdOVUhtaz9xOCFXZUpIVDVxZW1QckhJUjJG
ODQrNT9tVDxDeVNpVGEoOV52JHlHeDA1Zn4wfVEKelIyNjEhLTh4bHU/PiVSekYkVnZpRlRzcjsl
bEd9c05+TG5iX3g7MUFRZjBiWXQoMHJeKEdrenszYnRpZ2o0Xjx+Cno1RCtQcT5eNjVBP1g5aD9S
OyR9eTMpPTFGPih7UzswSDZ1TCs7RWFUe2xmSjBecGxfWilVaCtpai05d35lcW12TAp6YzZQMi10
eVZFVUZAYWliMWNnRVlwNjl7eUpVRVU2aXcmQylRbFFpNnB4dGhwfE44S1F0KyhIUD4oYzgjfEJw
QXsKemRoNm0zSGEwZVh3QVl5JmZzdjdzeUI+YnooZUl4QT9DRGN1Vzg/NkJLYl4jTlE3amhXeGdM
RHFodlR8JVReRjlgCnohTTFKS3doaEpARDRgJV43Zl9gWWx2M2NGcXRvZiZ7ckJJKV5Vd1h3T0lN
YUpLWWo3eSNyOGV+aXBCRG0/PktTQwp6c2JhQU5ESjdDNWZuYH4rWSNVMGMpTFRNOERhfExnWjV4
elEwRHZ8Y1Q0QEwmNVhVaiVJN1NwamhAJUtlbEF1XkQKejsoLVQjP2VVe1dqKCp8ZCNmI19tSVVz
fl4tK2xLVCUqXmF5WS18ajNiQkFIc0hjRil1RCYtMV9yNG93OEI3RVA2Cno+JCtmKzRNQV49S19V
fWBWVGV3cmdQX3wqdig/MWJfM0t6JnleMlBvZnNLdUl5ITxjVXcrPWMzMU9PPGRrUnNpfgp6dDU7
WGhZJkI2WGx+RkYyVk9iVkQtJCR1Ymc2RGQkRURNQj9iajNWSTVDak9pVTJ4OCF3TUc8MDIqViEy
RmhtJUoKemh+cFNTMnFhMDgmMVZpZWdkbWlydEZCZzJEd2FeR3Feb0MpZmlWVzc0V3lLeWl+K2Bn
RzZ2aFNRN2paLStjdTw+Cno1RiZ4d2JIUH1PbDlVcWRie2tTazctSmomNGdkKjJTcUVLPj8yY3Yr
ViteSFkzQ3l4IXcxKH4yQU9rbWVjajZHZQp6QVY5bSpNbFQ0Xj9GUShEMGVhbTRvbFlDUVVKcUw5
SSlFeUdIVU9QRFVAVklnTnszSktwaEhwJGJifkd+VVZJWT8Kej1SKiFpbF4pdGVCIzVJM29PQUcp
QmokMHg5VjNiKF5tO3ZUJmhHYFYwcEwxLXBYQ1ZiP0NpWEZiPi0/NHdRNm1GCnpRa3B9YW9wUGxW
O3dWQ14qfXp3Uz9AUmxmNDVJKzI3YXFlK0paQXglQzRAWE9iT3ohJHpPYl5nXnRGK1prPnxyRwp6
b0VzbVh6fnRtNHdBTnNqMSs2cTwmSmxGRzAxV1AmSStJJmBmQWMoR0J5UkMzMFUpXnBjaTtWKUdv
TCYyeHBUSHsKelNBYEpab01VLXUyfT9eJCZ7fF8tVjt4WiNWdHN1VDU1OTIrJmJNQzhFbWRuWkBI
bHxqb2NQIW92cDkxOXtyM1phCnpKQTRiTWVrPTtaPmNYYyNqZndGSWwqKG47d3Y4bDd1KGg+P1M2
fUBwe2BqfVFJX3k3eURDbDl+QHJRNEUqJXZOYwp6Zll2JntgbmR4bSl0VmRoMDwydVFmPnlKTStp
eVJEc3AlPDxqP2BnVTc3Qmc9RnU+STNBSXl6eXteVF9uV29gLWcKemNEdFE5RmRUPiQ3Y1l0Rkxv
PVkxIW09IUVaRXZCfllUP1RBNjU1PigtaFMmJXltOU9mdnxmRUJ8OGNFV0xtWShJCnpvRzlOa15p
ZFFZPW0zJkxuan1kT19JZkIzKHJ7fi1nX3ZfWmJAbVZOKVkmMkE1JWVORns+Nm5gaEYoZn11bWhR
PQp6QU95dyRRWXBscEhhMGliVkdRdjMyZEREeXtwN1Z4REQkZzlGUXY/cituQHNtJjxVazxIQGom
Q2txR3B7OStYdTAKemAqWkspS049cSRnQUB1e1liLUE+MHw0Z2Q9a3hhN3s9JmpTNHRANlMlTFZP
cmAjYk55X2x0UyZ2KSpJWFlQQ295CnoxRUI7a0txMz03XzJre1RAJGRpSjV8U2k9bG9HU0V2dzZK
RitJI3poJj99X3w5V2FBfFhofEE8dUhFVDhCclkhJgp6ZWF7RD4xbD9YMjJ+WTR4ZkEoVC17TGJT
aWtPJlNiQzlZaCN2SmRYdFpvNiUwe09IbDZJck4xPkEjKj91QSNtIVIKemQlcDdNQmZzQHJjSzNV
fDk9NWkmJn16MWtCcGxFRj9pMERlZkIyXyYhRmxTeSUqQE9fMmxrRStMVnh6YCs0RUEkCnplK0Nj
QEIwIWBOX3BHaDA7XmZJWWFyXkJAOzFfKGZUUCtCZ0FtJHY7ZURtKmVnUXQkNEstQUNnRD1SQWlm
V3dDbQp6PWsyVU5tQFBCdHtYJGBfK3YlSkd1JDRKTDBGY1M/TnRhVEpYMHdTZjN7a0ktTFBgTjhD
RV9eM3g0LWRwWnQkPUUKel83JWkmMVIoXmJyPkM9dURzTn1+eWduUiZLSDxDdFV+VFVmdSNaMGFQ
KXtFXjFWUlhFQk9fcHBxMD96MjJtKFokCno8OUVMQy0wbGdWb2tpSCtnNE5hNEFeMnghWE5TZ1NY
Sj9fYyM8UzE8S0VDeT5adiVoPUtuSmZPMGJtSXN0dDNlaAp6Ymh+Z0kyWSNVZHR1JV4tMHl2Tkg9
aWw3VDFBcD9ERk0tRH5xP0RNTm4lY01qZ0phcTBwUER7fChhfSpYRWBHR2MKekljSGZ9bUxYc3BX
MUs3eVdrcmRCZmlYYW0jUTRLTXtsfXErY29MJmhzb1ljJChwc1pqRX5BdXxifHlvPjdfKWx8CnpJ
OFR+TnNsM2k3Z24lJnktIUlebUFPMUN6bHB2SkN2VFJydTFFbWFTJiVRWHMwaT18V0xQQUs5d3h0
QVA0OD52Kgp6ckJXRzZETDlUMz9qPEchZkNwZkhXQGhIPWNpbnk4QmdjOylwUFpTVXJIPHtTQn5g
KjxGJFR3VjtkPnJqJmpxOF8Kenp6Uzdiaj5SI2VVV0FCOGhAdSFnaVYkOy1ERDNJWVl1REJuRkpK
b0o8eDd8VHFGPDc2Vn5vaWhwYTZVVEhPc1AmCno2cE9fTkNNS3AlUGZiclAlKkBQOSUrMWJ9QyNN
ZDFRYDN7eSNQfW98c248fmA2dV83VHRyVmctTGFXdW4qMHBQRAp6XlYpYDdVMHNYVVIjJj8jRF82
RVFII2U2WGpxVFVGLVJeNXIlRjYmKzBBY2BZa2VwX1kqIUBiUzBIRTBhdFRWPFkKekV6MjVYak1Z
NVB0R2xqU0IjYiMwd0pjK2RsM0VIT0w9Y0J6USl9SmVvTnA8bXcpQDAxMVE3SiF4UFNkamRJYXtm
Cno8M1U2eTBNQEBMY0s8VmIqfSEqQXw1YmhDKig+XkUqe2NWPm5eKVYhKyt0ZSYtK24kO0FGeXFF
KCh9OSV3cndBRgp6OUN6Q0R5c30+P2pNJW5hcHA7dHUpTktlTG1EYiVUNEJKN19Zc0VaVDw4aXpr
MWk+ZmoxQTg0UFI0U0R4JEh2Q2IKempFXyY7SCZVPDkqUSZMZT1YKXQ5XiEhdjR1JmlCTFBVKDtW
cjRATTA1eWc/JnpKN2djWkdHKzEpcz5ZdSpWYX5sCnooQ0t0O3RQbDlVZjdrSTdjWUpxbGNKNVRN
U2J9WmF1eHR5PXZmJWNHMi1+KjdFR3duJG1OaF9MTlhuRTNTZH1wdgp6eTNacnlJTDVWV258Un1t
KkkjTmpjQWoyY1VFUXdfSUY5P31pSFY2KmpeamRXMSpyJXFxb0NUUGBJe2srbEcoJnIKenp7O1ln
KjFILSgkYHU4cTVSaHBBIWZsNmRkd2d0a15iNCEydE5abDx0K2woY3Y0T0E+cUY1fVZSO3ooaDNm
RmJ1Cnp4djVnKEk4S1U7I1h0eiVPQ1hfQExYc3FpZDVrMzgxX1ZLWGNCX0BAMkhnJW17TlJeMikm
fmU3JntgcXBGPFB3Xwp6IVo/RUdxPj5EITQzPSVmYnNibiVzKkRmPEQ1VzgjME90dTM5eiNrNlY+
RT0yTkpJaldCdUlwUz12UEVpJTglQ3YKektuUHNOaDM5KjQ5Smp4RTJaVTE0ZSNOWXswX25GMkF6
K2xqYWNuUn5eU2FNVWxDLUFtQyE7dmRgTV4hKzFOfCZHCnpDfGJDVjE0PGM7KFM2fXpfck91Y0so
dk5aMCFoTFYkMSMkR2dVMU9IIUlBSzZFUCpsUlYxMG02TElAIzR5bmxGcQp6SDh8JjNVMHNFZSEl
U0VrNEo4JCVRamwzRDZscGU7TjxzPCZBd15iNkFGTDFiZGM3QjAmREltWD1QI3NHaWh2SCgKejJI
SSN5QXJNNiZQQ3M7RnBOflJ0JSsqaWN2X0EwNkd0VWdgMTUoTmh0eWJlfWdAWFVRNVhvRnpEeHE4
fCF4I2d+CnpEMno0YFFYPTZUZldjSng9cV5kXlVJTDglcFhtZEs0JFlvOWFeJVE0IyNsOHd0Jkso
bGpZYjM3Nzw0O3IycURudgp6dkB3NW0wKmxkN1pwcmd+TlJkRXdtcF9yRDU8KU9ISCtPKE9LK0kh
OGgtIVV3NnMxeHJ5P1RzNk5yXyZzaG96LU8KekpiS14jeVZqZ09eaHR2SCR6d09ZPzhVeyFPYUwz
ITJZazxXZEJWfFpIVzVXM00oYmxKU0lZMVQxeUlVaCt2JHd1Cnpxd340Mz94a2ZJZVFWaD9qXmlO
KEUpUFVJSktMZ0Nzckk9JUxsNmR0O3QwKH4xOTJRPGVTSDtJJDByYWlVQisoeQp6QEYyS0F4OCZZ
NV5nQFVPOWVgNVdzSmA1MEoyb3RCMFZHVyhfbnYral9ZTmJFQm9SMXl0YldWVEUyUiMwQWQ3LW8K
emtrbmN1NzZSUkZDbmNFa3lERz9+PHR7WFNIUnVRRWBDZmclQnhIfmltXjdwJk5kbTFqLXVsSVF7
LWFgezIoM356Cnp3YjV0KjBQNkw2LXJuMTwqWHVkLTExanVyRXtMTSZKSiZXaD1JejxKJDkmSChr
XiVpK1hAekBGOW08WFdAfW1abgp6TipQYkJSP0Zqayo1MkQ2Z25vfCRXLXQmZkRQenQ+RkBIJHk+
PWJSPTB0aTlPVjxAVGN1ZGxxSDg9bzRWZmI2cn4KeiFCcm8kZEhAKDM4X1NgJFo5OCpkU1JhQF5i
bSVLNVBNbXk+RiR5Sjk9ITBIPklFbz5hI0Jjb2lvdz5vYy1gbUlxCnpoaWJMRCZ3Oyg7Z0RaZEdn
JXszaXRAckIjVEkraXs/R2Aye3IlPGshVkxMWFdEMkNFJFJEOXtqN2p1S3Q7fWVpbAp6S3g+VT12
emgobmxlZT99S0BRbEN2JlEzaXpkbGVabVJ2I3ohWUQpezUpPXdXWHIqQTNoTDhlfWZBS1Q5IUdD
fUEKekdLM0lOTzYzR351JH1iPjxeQndNQ0ZRflQhMW5mKnUyaVpaQW5eU0hDP1NZTjAtbUhnej43
YjhWfFMwTVJTMjEkCnpmbVcrRTFiP2tvOHljKENZQjB2JjwoRlReYFNUWlV0UGQhcUV1fHpsPVVg
U0VkV3wtNFl6STxHSm5AXlNiRUReOQp6e20pY0FRM35hOWRFZnBJaiVCQzZUJnwhe0VNak04ZHVm
MUs/ZGspN2FrNDxQdzx3V0g7S3g2R1hVfnt+PVhwMDMKemdwNHQ4VTlWcU5RTGA2O3t4d3VodHU8
SSpBMHp9SWwpJCFhVD5rTHFGakBvc0ppKz9edGkxNVRkLSgqfS0qJHNxCnpwd2IkWTU7JT9uKkt3
aFowYn1nT2BhcmM+e3JkRXduTWNPUUNubEBhRHp6QWNsblBRd1ApZmlvM3c5PEA1SD5fWQp6cSpp
SV5tODlqRDVWRnErQnQoK3ZaWn14cFg+NU9RWEx+IT4ybH0qYlNSYkkyOSZzRyFmbHtlX3g/SEkm
Ukk5YSMKelRENEx4bSNiZDZRbkVePUdWPT1zSVE+NUBRfSFiZU1HPUItUzlPRH5ZYDVCUnlXUT9L
bn5rayp4NFJzTXoxS1BDCnp1VzdBXl5ucFFZX09iY15yRjQ9fkl6fFlvKnx1R2BFVU80WTk3Pm80
N15SSUNOfnU1IShiUVR1bHV9ei0+cmQxTgppNGtELWpyfV9XQHtQekclSFVXemdmZDVBVDAwMDA8
TU5VTW5MU1RZZnVGWWNyCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9zdG9yYWdlSWNvbi5wbmcgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL3N0b3JhZ2VJY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWM3YmIzYTJlYWU0ZmE5MWIwNWZlZmVm
OWRkZjZjZWMzOGM0M2QyCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA3MTQ4CnpjbVY8STh4IVAt
UCk8aDszS3xMazAwMGUxTkpMVHEwMDFCVzAwMk07MV5AczZkeWFMazAwMDA5YTdiQm0wMDBYVQp6
MDAwWFUwUldudTd5dGtiOEVIZDlQKjctWmJaPktMWipVKzxMcWl+TmEmS203WS1Jb2RjLXBQa2N7
cjVzOFZCKEUKem9mKEVQWDJ4Sl9WUHhOeD9BYitAV1p6NCZHY2g1bGxxSmEkU3doaTkoSSU4Z1I4
JjgqQnVPRW1zTyhFMmw0Wl54CnpAfmlXXnU1LT5tPWw8KHs/bXlvNWRFZXskZTRwejlBbVRtZmJR
JWYoXzYzRTcqcTlobG90I34kKmxzYG8wU2MlQgp6I2x0Z3t1NVY+ITBzcGIpSXteVXo9I2NsSShg
a3ZkYG8lZWR4Q0dLOUZAVyFoTDwjKSZCN2BfT3k4c3xeMEtuekQKeio2UlRQKldSXz40Z2swZ2hT
OT9TNUkrRm1eN1FsWTB6ZWBHS3JZMTIjdDtDeDRnZHQtd1l+fWYyeiVIMU1nU20kCnpkLXtkfUFs
KDRXPFJDQnFBT1AkSDBKRHlsY2M+PS1LQElAQ3loMShxMFQ5dnZLdzttJFVAcmhkOVJOc3Eobkc9
awp6MnFPUj49SCU9YFVFOHYyNjJLTmQwMmNHI3Z4OFh4NzVNO0NKQVRoWj8qbVhnMDE4cm0mdGAx
XjBSViozN1Y0d0MKejgyfHRmeWE1MUhLWjd3VjBmNVpfU1Y/Q3ZtSUBlKmxgODx+VVZ1ODk9WWYj
JFU7aGgxU15Ac29kaE1IazYmZTlSCnowVSU7WDUkWjVINSk7WEVqNSEoYCVXfEM2aF94UGZrfVV6
QiRiTzFZTiVHQEpDI1EyfWFHbH1LcUdhKnBAWWVHTwp6Myo+RmM2VEJlUU5JZjdAdTw/cCRvQT9v
bEJGVDI/Vj19ajdKTE97KVpZJWF8ST1UNi1AJn1idXMrRFIzOG1YR3EKelQwYDJJSSopYjdec14w
fjhjdUQ/SEV1QU9GfS1CZ1koQnJFITFDcUpTNX5qQStpak5aWnJaPGY9eWRGST5VUDFuCnotZmA+
USl3akZme2xsSipkLTB3UnlncXc+QGZxP1JfOGFqWjRka1hoKio2KDk2K0JKPHk4bTBxT3oyJEwr
PTFgbQp6XjlMNnFlakhqbntQVzBpPG5xeSNEQ3l8OHZCK14kOVFwKCVwNk1pVzB5ZEUpaThVRV9p
WSoxNyU2XilWTW9jR1YKemFBY0N0YUF0OTNiTFVYYkB8QCQlPDsmd2dGS31WUU1acnIjbXhjNEcx
dE0yQVVLSzRBRC15cFpkMHB+YClKXkdJCnpHUGxOeVh9OUd7PFZ6TEhsPHNXMHlRekhoeSk2fGdt
OHpCVl9ydDV5OTtqRHEpQFZLNGBlXkg4P1o+T05RRlhkYwp6XnElVEpHeCpEfTkjYkZKdTxmflZx
ZSt1I3Z1TyppQ0hhTVV0SG4jcEhiVUYhUzYxIVR1V2RUVzlUeyhJLWBhS0IKemNUdWA+eCpndite
fC12fWYxbFV1KjV9czA+eDBtVE9DUXxfXzYmKik3SlM8Sys0R0Nua29adjF1K05DXnNOYjBNCnoq
djt7UGlOSHpQbD5BaTVia050fVp9Z2M+R2swZjA9MGQtUiY4eTU7RWA8TXhTVW1MZSgzMGotJkdN
MHokV2BzdAp6I3wjRGxCOG5vUXpNQCsmeDBvYFNCZUF8TGNDM2NERW9fb19OcEBaVzUwUkl8JWZV
XlM7RlJLMD1lRDVpPF9ZQ1oKejx0eWNINWZ+Tlo2akJ4VHJKZmFlRXtjZTBpfD8xWEJSTVRDQn0w
Pn5rdytgJkUyYitBWT9mQXotX29UanFlZlMrCnoqV31UUCohbl87cThxSUQpSWlNZWgqNygta1Yo
WSROMlpKQm49SEl7V0xkVWI1dil5WUI1VnVvLVo8YkteXz0hUQp6VXZPen5vISV3OWQjQyYxSnB+
XjFkcT0mdnk+KSRAZTJAOEVfT0E9KjN0WmdDODYrRVFNRUJidDhJbCVTNUxSKVoKekc1cjAodjU1
SkA9cCE3RilUNDY4UkhGMnYmMH1gUHgqcCNYPVk0X31BOWdZJUF2IVRTPjNETURzZj84NSlaRWtP
Cnooc0koJUd0T3Nib1hPNVFufChkIStTIXRHKks9Pj5tN2FmaTtvLSZsT0RgX0I9WFZyelQ8TiZf
elZMST1AVV85fgp6VXY1bV97Qn49KWM8U357JCNtJj4qfkZkVXk5NEVlX2opU1lFMVR9dVJvI0Qz
VDdBQUk8Ni1vcGVVRHZoJkZpKjQKemskRm1meTc9dGxVKE5PUjhad2BVR308PClIVlpUfVQ2JGpH
WWZYQ1Qoazl3QV5zMm81PTw5N0FncFImOW0pezAtCnpEdEU0UXdSVUh8K3RubDhHeUFAfUhANDVi
cFIyJEIhO08hajE2cVRhIVJBa0FLSldlX2BESjNMZE5eanBZP09Qbgp6Wnx2JGdaOS0qWWIrVHpI
VzdfcXIqdz18fjx1ajQ5Q1VmTXU/KGM+MyEzIUVjJl9BOXBydkckWjU/entIdTNVKjsKekhEeXAz
Mzs7TmVNNCUzJXdiMGQ9cWZFTD93YWhXdDZELUNvXntueEBsV2ErTkdrZ25zM0wlQTxPND48azw0
N1pDCnphQXRDNGFAJXBncD05JTleUGM2KTw8QXF5K2krZ2NPfFZic2xKSTN9ekRXTVllOTxkblNI
JWtAaVheV3xVNjtOZwp6PDFhSE5kc0Q3aHs8Y0RpVnlSTnVyYVBQT0R3bDckciY2Z31zYUJ+VHE1
ZWFvVEMtWktYNnIta00+QHhKUiZ7SWoKej5oengmSlQtaH42dEBrdHQ9X283PG9XaFMoPFpaS15K
RUxXI2Z1JVNtTT9kPFMqMk4ldGxNb34ramlLIXZGfilxCnpjQkQ5Vklkd2F+YkxueC1hfSNqdS1Q
TzFJZ1pzeGxBM2dILWl0SFdxe04obDdgLUBNSnVmJHF7MWRJalZxUkcpRgp6e3crbWp8NHh5ckwr
WGJYNUMxJX02dUVxSzw9QVF6QkwtcW9lPHVreDBoYEVAKnB5X0oleXRUJmY9XntYTy12KUQKemJO
cm5wbHBMUDN5dVkkISE9RzdGRm5Hb0RzJVc4RGs7RkJMXil4QSN5RGVYJEBKRSY/UzhTPE54dnk1
R19DVVFfCnpxZWtuWSl9eVZEYiF2Nn4kZFBSZyM/T3IjT2A1aGhvM0B6MDIhRlk7JkdNQzF5Vll5
IWotemo3SXZ1KGt5SkxHNAp6LUBFazJfYlkhJDk4ZWlOXzFTQWtZZEMkPmU+YEI0SFhaeWVZMGhR
LV5rVlhnNFRBeCZjSj1gUEZzbE0mJUt8diQKejBAeE0rI0xFSW14JnUoSTE2WipHKmw3VFlOZUVF
ZGJVQDZzKlV0fD9mQ1BlfDAwIVU7cF55ZTtAQl5WRD0xMnJgCno5ZUlmaXFsaFJJUjFFNDdZOGtE
S2p6S3F8bW9YdzNYR3tfMUpDaVpmMzhxcX1YPVc0VmVDOG82SGBXZE5oeX19ewp6ITRrKFomWkB+
OCV2eSgmJDNeMysqYSZQZloxMzx+XyNwZlVgIUBGRD47blczIWMhdWU9dEc8IVMoQ0MhRDskWCYK
ekdofEoyQSpVSz1BP0d4Z0pKJGxZS1gpWlhtaHptKGhab0N4bFRWIVFBbTFHUzFweU8qKiR0Tmsj
Uk1hVDVUT2Q7CnowSUNTSk45NEBMalRAc3lpSzE7ez5FaVloezFTdGJ4MTxjRVpiJSEqYUw1ZUVt
ZGwtI2NULVNTIzQ4UmZ7azVySgp6YkY4eDA3ODRhWVJaaTdxd0lUSCE0VDQ2VVd8PnowKS0mMShJ
I0lkQF80ZSEyNEV6b0tqUXE5KjhWOHcjWjlpZmYKelhMaX49JipIfDhEJEF5d3k7azNCdShtPlc+
aGB0e2JqTVZ1NjZhU2d2dT9iKmJhd2w9cnxxZm44MWR4c0dWd20tCnpRfCEraFU9XjR8c31EajI+
KGdXUUtNUTNKR2UzfEtBJEJQRUBXVipsUUl9KUlRSCZWN0lNZk5aYDE9VyppVGpoPAp6UT9nUFEp
NztZPUc4TkN7PTdnVThseHYkO2YzZjdVYz5hWWVKVm01eXNXJThXUHY2Y2Q2KWR9WVNIOGxpdmMx
YVYKeiFNOF58a0JqUkpvYHV5RDg7VHB2VDlSN2pVJCh5cj9gVXtTPy1KOzQ/M0wqMnsqV31GYD8r
fD9ZZWFhb1hWUEpzCnpeMGpMd2NnfXJiVnpGVz1pb3dmWjAwMFZienlzMnQzcj10VnZZLW4zNWlG
dkZ4RmV9WkVpI0xlTEFqJUhRRSQqaAp6XmJZaFhiU3M3KHZsRWtyZEN4PjtAQEZiemBvVjAtZTQ2
PGtSdmRjKGA7M0xtOz5BK00lRXMhKFQ3dHZpY0h7MWAKejtuK09jWVZxODdJPSs9JWhDUExTZj96
PT9DOSlIUGlKY0BwKHAzJXVNPnhsT3ZOOEQlQ3pVZ1ViQ29OVVlteiZGCnpkeUdQKCU8elFxJTx+
QFJMLTxiZF5ZaDtuJj02P1k7SUxzLUZqfE9EczhaTmtjI0lrXkF8Y1lhRi1WazBecyQoeQp6STl+
alRNM0FKZzxaRyEhWCM/cE1uSHQkaEljPlFHYEM1ZXBNTFEpQ3JSaHp6bzcwczh3aXV9aHNWdTMh
UmVQWCoKektfZj1mU0ljcCR3emlePGglUStWcW1Sfn5HNUJVVVo4V31aJGF2T2RlRVdBWmxzVDZM
JnlHISZJeS1rLSo7b2hLCno5SjAtYHlLRGMjO2wxT3NHbmIyXnRFSm9pVUZVWSF5QU9NPz9wNTtp
XlVDJEVfNCg+Mj9lODZzNlptJFlLIytaSwp6OSheUTREbHxOLURPflZpWGhpZDIoSWNzbVc1PUFN
OGU+I3IzKipRcVFjc2MtdlhnanxeSE5rJlUjNUFkfElBRnUKelFwXjV3X0ZgX3BkSGFqZm16blk+
dH5AUVF4T1ZQRns0TE1oWmwlVXwpWFRTMkRCUEVTQVhPdiZOVUIhcGlTRCFRCnpfMTRkNlA1V0VZ
VFE5ZGdaMTMtMmJQOUtDX2p2VXRfZzg8TV97OF9jVV5zZzhgdU9LNXs7eGhXN3czaStxIXhwZwp6
RHB3SCgwfDF6VDFjRzF5Jlg1TFdAT3NfO3k4QVd0NyRVfFFeUFMwPERmZ0g2UmplQ31GaVJaRUlJ
QTZOOVpudjEKem97aGozIT91N0EhakdfZjVqK1Q9aCg1IyNRWWRNS0JhdXVZN2ptamBIZ21haUVw
VnMoWlE3RD0/dzRtUEF3O08rCnptdTJmVSQtZitqT0I/KVlfX3lGK2VxVT9VWF9vIUFgJjtnUmNL
aEdkYFZSUT4yM1ktNVpGdFc9LU54U2hRfF90Rgp6enZYNSN1aUwkI3Y5OS1PPURPY3ZeMTkmaXMm
JklQJEpaMTs9fjtLJkd9QEIlOzsrezFtK2h+QFVraTNMeXJwLVIKemI7V2wjX0pzRkpeYWJgQ2VN
bFA2OVgkRElAOHt3I15GdGpZIWxRdj5yc0dsKipoejx9cVVyZHJ6VGRYYiRqcXxNCnpQUitnZ1VP
dTBfVjdEO3dCV31eKXJ7dkZ9cktufXo8JT1zRUR7KDZldDUrR3gzPGtqM2VGKj5uYUU4SU87MUhe
WAp6cCVNSWxZYWl7dmBhMksrejxVU1QrWDRVPzA1KlVqMU9wOSVBcTEjazBmdH0ldXkkN2kwQU1C
b29PYzhPc1FxeXkKemBrJjdZXk50N3UwNUEtdTl9NG1KXiRWbHcpOUV5Q0lqVSlwci1CQEh2eXpm
Snswa1Qpe3lXOUBGK0tuUTAzYyZYCnpRY1ZCPVpJfVE2YkIrSzItYyRlcGZAQTt5Yysmcz8hQEt8
aEdVb3NROUNZSjNBfnlnNDRveWkhS34jOSEjOTM+UAp6OUxJRyVSbl5hVkA5ZGtxT1lNcEBObH5V
PUhVJEwmQkdabClTJjwrPi16LUVoNGZxRW5pMk99KTA0RzJZISRFQE4KelE7WTtzNUY9MCFnTlVI
bWs/cTghV2VKSFQ1cWVtUHJISVIyRjg0KzU/bVQ8Q3lTaVRhKDlediR5R3gwNWZ+MH1RCnpSMjYx
IS04eGx1Pz4lUnpGJFZ2aUZUc3I7JWxHfXNOfkxuYl94OzFBUWYwYll0KDByXihHa3p7M2J0aWdq
NF48fgp6NUQrUHE+XjY1QT9YOWg/UjskfXkzKT0xRj4oe1M7MEg2dUwrO0VhVHtsZkowXnBsX1op
VWgraWotOXd+ZXFtdkwKemM2UDItdHlWRVVGQGFpYjFjZ0VZcDY5e3lKVUVVNml3JkMpUWxRaTZw
eHRocHxOOEtRdCsoSFA+KGM4I3xCcEF7CnpkaDZtM0hhMGVYd0FZeSZmc3Y3c3lCPmJ6KGVJeEE/
Q0RjdVc4PzZCS2JeI05RN2poV3hnTERxaHZUfCVUXkY5YAp6IU0xSkt3aGhKQEQ0YCVeN2ZfYFls
djNjRnF0b2Yme3JCSSleVXdYd09JTWFKS1lqN3kjcjhlfmlwQkRtPz5LU0MKenNiYUFOREo3QzVm
bmB+K1kjVTBjKUxUTThEYXxMZ1o1eHpRMER2fGNUNEBMJjVYVWolSTdTcGpoQCVLZWxBdV5ECno7
KC1UIz9lVXtXaigqfGQjZiNfbUlVc35eLStsS1QlKl5heVktfGozYkJBSHNIY0YpdUQmLTFfcjRv
dzhCN0VQNgp6PiQrZis0TUFePUtfVX1gVlRld3JnUF98KnYoPzFiXzNLeiZ5XjJQb2ZzS3VJeSE8
Y1V3Kz1jMzFPTzxka1JzaX4KenQ1O1hoWSZCNlhsfkZGMlZPYlZELSQkdWJnNkRkJEVETUI/Ymoz
Vkk1Q2pPaVUyeDghd01HPDAyKlYhMkZobSVKCnpofnBTUzJxYTA4JjFWaWVnZG1pcnRGQmcyRHdh
XkdxXm9DKWZpVlc3NFd5S3lpfitgZ0c2dmhTUTdqWi0rY3U8Pgp6NUYmeHdiSFB9T2w5VXFkYntr
U2s3LUpqJjRnZCoyU3FFSz4/MmN2K1YrXkhZM0N5eCF3MSh+MkFPa21lY2o2R2UKekFWOW0qTWxU
NF4/RlEoRDBlYW00b2xZQ1FVSnFMOUkpRXlHSFVPUERVQFZJZ057M0pLcGhIcCRiYn5HflVWSVk/
Cno9UiohaWxeKXRlQiM1STNvT0FHKUJqJDB4OVYzYihebTt2VCZoR2BWMHBMMS1wWENWYj9DaVhG
Yj4tPzR3UTZtRgp6UWtwfWFvcFBsVjt3VkNeKn16d1M/QFJsZjQ1SSsyN2FxZStKWkF4JUM0QFhP
Yk96ISR6T2JeZ150Ritaaz58ckcKem9Fc21Yen50bTR3QU5zajErNnE8JkpsRkcwMVdQJkkrSSZg
ZkFjKEdCeVJDMzBVKV5wY2k7VilHb0wmMnhwVEh7CnpTQWBKWm9NVS11Mn0/XiQme3xfLVY7eFoj
VnRzdVQ1NTkyKyZiTUM4RW1kblpASGx8am9jUCFvdnA5MTl7cjNaYQp6SkE0Yk1laz07Wj5jWGMj
amZ3RklsKihuO3d2OGw3dShoPj9TNn1AcHtgan1RSV95N3lEQ2w5fkByUTRFKiV2TmMKemZZdiZ7
YG5keG0pdFZkaDA8MnVRZj55Sk0raXlSRHNwJTw8aj9gZ1U3N0JnPUZ1PkkzQUl5enl7XlRfbldv
YC1nCnpjRHRROUZkVD4kN2NZdEZMbz1ZMSFtPSFFWkV2Qn5ZVD9UQTY1NT4oLWhTJiV5bTlPZnZ8
ZkVCfDhjRVdMbVkoSQp6b0c5TmteaWRRWT1tMyZMbmp9ZE9fSWZCMyhye34tZ192X1piQG1WTilZ
JjJBNSVlTkZ7PjZuYGhGKGZ9dW1oUT0KekFPeXckUVlwbHBIYTBpYlZHUXYzMmRERHl7cDdWeERE
JGc5RlF2P3IrbkBzbSY8VWs8SEBqJkNrcUdwezkrWHUwCnpgKlpLKUtOPXEkZ0FAdXtZYi1BPjB8
NGdkPWt4YTd7PSZqUzR0QDZTJUxWT3JgI2JOeV9sdFMmdikqSVhZUENveQp6MUVCO2tLcTM9N18y
a3tUQCRkaUo1fFNpPWxvR1NFdnc2SkYrSSN6aCY/fV98OVdhQXxYaHxBPHVIRVQ4QnJZISYKemVh
e0Q+MWw/WDIyflk0eGZBKFQte0xiU2lrTyZTYkM5WWgjdkpkWHRabzYlMHtPSGw2SXJOMT5BIyo/
dUEjbSFSCnpkJXA3TUJmc0ByY0szVXw5PTVpJiZ9ejFrQnBsRUY/aTBEZWZCMl8mIUZsU3klKkBP
XzJsa0UrTFZ4emArNEVBJAp6ZStDY0BCMCFgTl9wR2gwO15mSVlhcl5CQDsxXyhmVFArQmdBbSR2
O2VEbSplZ1F0JDRLLUFDZ0Q9UkFpZld3Q20Kej1rMlVObUBQQnR7WCRgXyt2JUpHdSQ0SkwwRmNT
P050YVRKWDB3U2Yze2tJLUxQYE44Q0VfXjN4NC1kcFp0JD1FCnpfNyVpJjFSKF5icj5DPXVEc059
fnlnblImS0g8Q3RVflRVZnUjWjBhUCl7RV4xVlJYRUJPX3BwcTA/ejIybShaJAp6PDlFTEMtMGxn
Vm9raUgrZzROYTRBXjJ4IVhOU2dTWEo/X2MjPFMxPEtFQ3k+WnYlaD1LbkpmTzBibUlzdHQzZWgK
emJofmdJMlkjVWR0dSVeLTB5dk5IPWlsN1QxQXA/REZNLUR+cT9ETU5uJWNNamdKYXEwcFBEe3wo
YX0qWEVgR0djCnpJY0hmfW1MWHNwVzFLN3lXa3JkQmZpWGFtI1E0S017bH1xK2NvTCZoc29ZYyQo
cHNaakV+QXV8Ynx5bz43XylsfAp6SThUfk5zbDNpN2duJSZ5LSFJXm1BTzFDemxwdkpDdlRScnUx
RW1hUyYlUVhzMGk9fFdMUEFLOXd4dEFQNDg+dioKenJCV0c2REw5VDM/ajxHIWZDcGZIV0BoSD1j
aW55OEJnYzspcFBaU1VySDx7U0J+YCo8RiRUd1Y7ZD5yaiZqcThfCnp6elM3Ymo+UiNlVVdBQjho
QHUhZ2lWJDstREQzSVlZdURCbkZKSm9KPHg3fFRxRjw3NlZ+b2locGE2VVRIT3NQJgp6NnBPX05D
TUtwJVBmYnJQJSpAUDklKzFifUMjTWQxUWAze3kjUH1vfHNuPH5gNnVfN1R0clZnLUxhV3VuKjBw
UEQKel5WKWA3VTBzWFVSIyY/I0RfNkVRSCNlNlhqcVRVRi1SXjVyJUY2JiswQWNgWWtlcF9ZKiFA
YlMwSEUwYXRUVjxZCnpFejI1WGpNWTVQdEdsalNCI2IjMHdKYytkbDNFSE9MPWNCelEpfUplb05w
PG13KUAwMTFRN0oheFBTZGpkSWF7Zgp6PDNVNnkwTUBATGNLPFZiKn0hKkF8NWJoQyooPl5FKntj
Vj5uXilWISsrdGUmLStuJDtBRnlxRSgofTkld3J3QUYKejlDekNEeXN9Pj9qTSVuYXBwO3R1KU5L
ZUxtRGIlVDRCSjdfWXNFWlQ8OGl6azFpPmZqMUE4NFBSNFNEeCRIdkNiCnpqRV8mO0gmVTw5KlEm
TGU9WCl0OV4hIXY0dSZpQkxQVSg7VnI0QE0wNXlnPyZ6SjdnY1pHRysxKXM+WXUqVmF+bAp6KENL
dDt0UGw5VWY3a0k3Y1lKcWxjSjVUTVNifVphdXh0eT12ZiVjRzItfio3RUd3biRtTmhfTE5YbkUz
U2R9cHYKenkzWnJ5SUw1VldufFJ9bSpJI05qY0FqMmNVRVF3X0lGOT99aUhWNipqXmpkVzEqciVx
cW9DVFBgSXtrK2xHKCZyCnp6eztZZyoxSC0oJGB1OHE1UmhwQSFmbDZkZHdndGteYjQhMnROWmw8
dCtsKGN2NE9BPnFGNX1WUjt6KGgzZkZidQp6eHY1ZyhJOEtVOyNYdHolT0NYX0BMWHNxaWQ1azM4
MV9WS1hjQl9AQDJIZyVte05SXjIpJn5lNyZ7YHFwRjxQd18KeiFaP0VHcT4+RCE0Mz0lZmJzYm4l
cypEZjxENVc4IzBPdHUzOXojazZWPkU9Mk5KSWpXQnVJcFM9dlBFaSU4JUN2CnpLblBzTmgzOSo0
OUpqeEUyWlUxNGUjTll7MF9uRjJBeitsamFjblJ+XlNhTVVsQy1BbUMhO3ZkYE1eISsxTnwmRwp6
Q3xiQ1YxNDxjOyhTNn16X3JPdWNLKHZOWjAhaExWJDEjJEdnVTFPSCFJQUs2RVAqbFJWMTBtNkxJ
QCM0eW5sRnEKekg4fCYzVTBzRWUhJVNFazRKOCQlUWpsM0Q2bHBlO048czwmQXdeYjZBRkwxYmRj
N0IwJkRJbVg9UCNzR2lodkgoCnoySEkjeUFyTTYmUENzO0ZwTn5SdCUrKmljdl9BMDZHdFVnYDE1
KE5odHliZX1nQFhVUTVYb0Z6RHhxOHwheCNnfgp6RDJ6NGBRWD02VGZXY0p4PXFeZF5VSUw4JXBY
bWRLNCRZbzlhXiVRNCMjbDh3dCZLKGxqWWIzNzc8NDtyMnFEbnYKenZAdzVtMCpsZDdacHJnfk5S
ZEV3bXBfckQ1PClPSEgrTyhPSytJIThoLSFVdzZzMXhyeT9UczZOcl8mc2hvei1PCnpKYkteI3lW
amdPXmh0dkgkendPWT84VXshT2FMMyEyWWs8V2RCVnxaSFc1VzNNKGJsSlNJWTFUMXlJVWgrdiR3
dQp6cXd+NDM/eGtmSWVRVmg/al5pTihFKVBVSUpLTGdDc3JJPSVMbDZkdDt0MCh+MTkyUTxlU0g7
SSQwcmFpVUIrKHkKekBGMktBeDgmWTVeZ0BVTzllYDVXc0pgNTBKMm90QjBWR1coX252K2pfWU5i
RUJvUjF5dGJXVlRFMlIjMEFkNy1vCnpra25jdTc2UlJGQ25jRWt5REc/fjx0e1hTSFJ1UUVgQ2Zn
JUJ4SH5pbV43cCZOZG0xai11bElRey1hYHsyKDN+egp6d2I1dCowUDZMNi1ybjE8Klh1ZC0xMWp1
ckV7TE0mSkomV2g9SXo8SiQ5Jkgoa14laStYQHpARjltPFhXQH1tWm4Kek4qUGJCUj9GamsqNTJE
Nmdub3wkVy10JmZEUHp0PkZASCR5Pj1iUj0wdGk5T1Y8QFRjdWRscUg4PW80VmZiNnJ+CnohQnJv
JGRIQCgzOF9TYCRaOTgqZFNSYUBeYm0lSzVQTW15PkYkeUo5PSEwSD5JRW8+YSNCY29pb3c+b2Mt
YG1JcQp6aGliTEQmdzsoO2dEWmRHZyV7M2l0QHJCI1RJK2l7P0dgMntyJTxrIVZMTFhXRDJDRSRS
RDl7ajdqdUt0O31laWwKekt4PlU9dnpoKG5sZWU/fUtAUWxDdiZRM2l6ZGxlWm1SdiN6IVlEKXs1
KT13V1hyKkEzaEw4ZX1mQUtUOSFHQ31BCnpHSzNJTk82M0d+dSR9Yj48XkJ3TUNGUX5UITFuZip1
MmlaWkFuXlNIQz9TWU4wLW1IZ3o+N2I4VnxTME1SUzIxJAp6Zm1XK0UxYj9rbzh5YyhDWUIwdiY8
KEZUXmBTVFpVdFBkIXFFdXx6bD1VYFNFZFd8LTRZekk8R0puQF5TYkVEXjkKenttKWNBUTN+YTlk
RWZwSWolQkM2VCZ8IXtFTWpNOGR1ZjFLP2RrKTdhazQ8UHc8d1dIO0t4NkdYVX57fj1YcDAzCnpn
cDR0OFU5VnFOUUxgNjt7eHd1aHR1PEkqQTB6fUlsKSQhYVQ+a0xxRmpAb3NKaSs/XnRpMTVUZC0o
Kn0tKiRzcQp6cHdiJFk1OyU/bipLd2haMGJ9Z09gYXJjPntyZEV3bk1jT1FDbmxAYUR6ekFjbG5Q
UXdQKWZpbzN3OTxANUg+X1kKenEqaUlebTg5akQ1VkZxK0J0KCt2Wlp9eHBYPjVPUVhMfiE+Mmx9
KmJTUmJJMjkmc0chZmx7ZV94P0hJJlJJOWEjCnpURDRMeG0jYmQ2UW5FXj1HVj09c0lRPjVAUX0h
YmVNRz1CLVM5T0R+WWA1QlJ5V1E/S25+a2sqeDRSc016MUtQQwp6dVc3QV5ebnBRWV9PYmNeckY0
PX5JenxZbyp8dUdgRVVPNFk5Nz5vNDdeUklDTn51NSEoYlFUdWx1fXotPnJkMU4KaTRrRC1qcn1f
V0B7UHpHJUhVV3pnZmQ1QVQwMDAwPE1OVU1uTFNUWWZ1RlljcgoKbGl0ZXJhbCAwCkhjbVY/ZDAw
MDAxCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0b3JhZ2VQYW5l
bC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdG9yYWdlUGFuZWwuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlYjZmZgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdG9yYWdlUGFuZWwuanMKQEAgLTAsMCArMSw2
ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJ
bnNwZWN0b3IuU3RvcmFnZVBhbmVsID0gZnVuY3Rpb24oZGF0YWJhc2UpCit7CisgICAgV2ViSW5z
cGVjdG9yLlBhbmVsLmNhbGwodGhpcyk7CisKKyAgICB0aGlzLnNpZGViYXJFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5pZCA9
ICJzdG9yYWdlLXNpZGViYXIiOworICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuY2xhc3NOYW1lID0g
InNpZGViYXIiOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNpZGViYXJFbGVt
ZW50KTsKKworICAgIHRoaXMuc2lkZWJhclJlc2l6ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLnNpZGViYXJSZXNpemVFbGVtZW50LmNsYXNzTmFtZSA9
ICJzaWRlYmFyLXJlc2l6ZXItdmVydGljYWwiOworICAgIHRoaXMuc2lkZWJhclJlc2l6ZUVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fc3RhcnRTaWRlYmFyRHJhZ2dp
bmcuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
LnNpZGViYXJSZXNpemVFbGVtZW50KTsKKworICAgIHRoaXMuc2lkZWJhclRyZWVFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKKyAgICB0aGlzLnNpZGViYXJUcmVlRWxlbWVu
dC5jbGFzc05hbWUgPSAic2lkZWJhci10cmVlIjsKKyAgICB0aGlzLnNpZGViYXJFbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuc2lkZWJhclRyZWVFbGVtZW50KTsKKworICAgIHRoaXMuc2lkZWJhclRy
ZWUgPSBuZXcgVHJlZU91dGxpbmUodGhpcy5zaWRlYmFyVHJlZUVsZW1lbnQpOworCisgICAgdGhp
cy5kYXRhYmFzZXNMaXN0VHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJTZWN0
aW9uVHJlZUVsZW1lbnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEQVRBQkFTRVMiKSwge30sIHRy
dWUpOworICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5kYXRhYmFzZXNMaXN0
VHJlZUVsZW1lbnQpOworICAgIHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50LmV4cGFuZCgp
OworCisgICAgdGhpcy5sb2NhbFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVj
dG9yLlNpZGViYXJTZWN0aW9uVHJlZUVsZW1lbnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMT0NB
TCBTVE9SQUdFIiksIHt9LCB0cnVlKTsKKyAgICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxk
KHRoaXMubG9jYWxTdG9yYWdlTGlzdFRyZWVFbGVtZW50KTsKKyAgICB0aGlzLmxvY2FsU3RvcmFn
ZUxpc3RUcmVlRWxlbWVudC5leHBhbmQoKTsKKworICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VMaXN0
VHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJTZWN0aW9uVHJlZUVsZW1lbnQo
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTRVNTSU9OIFNUT1JBR0UiKSwge30sIHRydWUpOworICAg
IHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5zZXNzaW9uU3RvcmFnZUxpc3RUcmVl
RWxlbWVudCk7CisgICAgdGhpcy5zZXNzaW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5leHBhbmQo
KTsKKworICAgIHRoaXMuY29va2llTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5T
aWRlYmFyU2VjdGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ09PS0lFUyIp
LCB7fSwgdHJ1ZSk7CisgICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZCh0aGlzLmNvb2tp
ZUxpc3RUcmVlRWxlbWVudCk7CisgICAgdGhpcy5jb29raWVMaXN0VHJlZUVsZW1lbnQuZXhwYW5k
KCk7CisKKyAgICB0aGlzLnN0b3JhZ2VWaWV3cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgIHRoaXMuc3RvcmFnZVZpZXdzLmlkID0gInN0b3JhZ2Utdmlld3MiOworICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnN0b3JhZ2VWaWV3cyk7CisKKyAgICB0aGlzLnN0
b3JhZ2VWaWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIuaWQg
PSAic3RvcmFnZS12aWV3LXN0YXR1cy1iYXItaXRlbXMiOworCisgICAgdGhpcy5yZXNldCgpOwor
fQorCitXZWJJbnNwZWN0b3IuU3RvcmFnZVBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICB0b29sYmFy
SXRlbUNsYXNzOiAic3RvcmFnZSIsCisKKyAgICBnZXQgdG9vbGJhckl0ZW1MYWJlbCgpCisgICAg
eworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdG9yYWdlIik7CisgICAg
fSwKKworICAgIGdldCBzdGF0dXNCYXJJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gW3Ro
aXMuc3RvcmFnZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lcl07CisgICAgfSwKKworICAgIHNo
b3c6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5
cGUuc2hvdy5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLl91cGRhdGVTaWRlYmFyV2lkdGgoKTsK
KyAgICAgICAgdGhpcy5fcmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcigpOworICAgICAgICB0
aGlzLnBvcHVsYXRlSW50ZXJmYWNlKCk7CisgICAgfSwKKworICAgIHBvcHVsYXRlSW50ZXJmYWNl
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmFkZENvb2tpZXMoKTsKKyAgICB9LAor
CisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9kYXRhYmFz
ZXMpIHsKKyAgICAgICAgICAgIHZhciBkYXRhYmFzZXNMZW5ndGggPSB0aGlzLl9kYXRhYmFzZXMu
bGVuZ3RoOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhYmFzZXNMZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBkYXRhYmFzZSA9IHRoaXMuX2RhdGFiYXNlc1tp
XTsKKworICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhYmFzZS5fdGFibGVWaWV3czsKKyAgICAg
ICAgICAgICAgICBkZWxldGUgZGF0YWJhc2UuX3F1ZXJ5VmlldzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuX2RhdGFiYXNlcyA9IFtdOworCisgICAgICAgIHRoaXMu
X3VucmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcigpOworCisgICAgICAgIGlmICh0aGlzLl9k
b21TdG9yYWdlKSB7CisgICAgICAgICAgICB2YXIgZG9tU3RvcmFnZUxlbmd0aCA9IHRoaXMuX2Rv
bVN0b3JhZ2UubGVuZ3RoOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21TdG9y
YWdlTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9tU3RvcmFnZSA9IHRoaXMu
X2RvbVN0b3JhZ2VbaV07CisKKyAgICAgICAgICAgICAgICBkZWxldGUgZG9tU3RvcmFnZS5fZG9t
U3RvcmFnZVZpZXc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9k
b21TdG9yYWdlID0gW107CisKKyAgICAgICAgZGVsZXRlIHRoaXMuY29va2llVHJlZUVsZW1lbnQ7
CisgICAgICAgIGRlbGV0ZSB0aGlzLl9jb29raWVWaWV3OworCisgICAgICAgIHRoaXMuZGF0YWJh
c2VzTGlzdFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMubG9jYWxT
dG9yYWdlTGlzdFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuc2Vz
c2lvblN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhp
cy5jb29raWVMaXN0VHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5z
dG9yYWdlVmlld3MucmVtb3ZlQ2hpbGRyZW4oKTsgICAgICAgIAorCisgICAgICAgIHRoaXMuc3Rv
cmFnZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5yZW1vdmVDaGlsZHJlbigpOworICAgIH0s
CisKKyAgICBoYW5kbGVLZXlFdmVudDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0
aGlzLnNpZGViYXJUcmVlLmhhbmRsZUtleUV2ZW50KGV2ZW50KTsKKyAgICB9LAorCisgICAgYWRk
RGF0YWJhc2U6IGZ1bmN0aW9uKGRhdGFiYXNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZGF0YWJh
c2VzLnB1c2goZGF0YWJhc2UpOworCisgICAgICAgIHZhciBkYXRhYmFzZVRyZWVFbGVtZW50ID0g
bmV3IFdlYkluc3BlY3Rvci5EYXRhYmFzZVNpZGViYXJUcmVlRWxlbWVudChkYXRhYmFzZSk7Cisg
ICAgICAgIGRhdGFiYXNlLl9kYXRhYmFzZXNUcmVlRWxlbWVudCA9IGRhdGFiYXNlVHJlZUVsZW1l
bnQ7CisgICAgICAgIHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKGRh
dGFiYXNlVHJlZUVsZW1lbnQpOworICAgIH0sCisKKyAgICBhZGRET01TdG9yYWdlOiBmdW5jdGlv
bihkb21TdG9yYWdlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZG9tU3RvcmFnZS5wdXNoKGRvbVN0
b3JhZ2UpOworICAgICAgICB2YXIgZG9tU3RvcmFnZVRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3Bl
Y3Rvci5ET01TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50KGRvbVN0b3JhZ2UsIChkb21TdG9yYWdl
LmlzTG9jYWxTdG9yYWdlID8gImxvY2FsLXN0b3JhZ2UiIDogInNlc3Npb24tc3RvcmFnZSIpKTsK
KyAgICAgICAgZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVRyZWVFbGVtZW50ID0gZG9tU3RvcmFnZVRy
ZWVFbGVtZW50OworICAgICAgICBpZiAoZG9tU3RvcmFnZS5pc0xvY2FsU3RvcmFnZSkKKyAgICAg
ICAgICAgIHRoaXMubG9jYWxTdG9yYWdlTGlzdFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKGRvbVN0
b3JhZ2VUcmVlRWxlbWVudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lv
blN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9tU3RvcmFnZVRyZWVFbGVtZW50
KTsKKyAgICB9LAorCisgICAgYWRkQ29va2llczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLmNvb2tpZVRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLmNvb2tpZVRy
ZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5Db29raWVTaWRlYmFyVHJlZUVsZW1lbnQoKTsK
KyAgICAgICAgICAgIHRoaXMuY29va2llTGlzdFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
Y29va2llVHJlZUVsZW1lbnQpOworICAgICAgICB9CisgICAgfSwKKworICAgIHNlbGVjdERhdGFi
YXNlOiBmdW5jdGlvbihkYikKKyAgICB7CisgICAgICAgIHZhciBkYXRhYmFzZTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX2RhdGFiYXNlcy5sZW5ndGg7IGkgPCBsZW47ICsr
aSkgeworICAgICAgICAgICAgZGF0YWJhc2UgPSB0aGlzLl9kYXRhYmFzZXNbaV07CisgICAgICAg
ICAgICBpZiAoIGRiID09PSBkYXRhYmFzZS5kYXRhYmFzZSApIHsKKyAgICAgICAgICAgICAgICB0
aGlzLnNob3dEYXRhYmFzZShkYXRhYmFzZSk7CisgICAgICAgICAgICAgICAgZGF0YWJhc2UuX2Rh
dGFiYXNlc1RyZWVFbGVtZW50LnNlbGVjdCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBzZWxlY3RET01TdG9yYWdlOiBm
dW5jdGlvbihzKQorICAgIHsKKyAgICAgICAgdmFyIGlzTG9jYWxTdG9yYWdlID0gKHMgPT09IElu
c3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkubG9jYWxTdG9yYWdlKTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX2RvbVN0b3JhZ2UubGVuZ3RoOyBpIDwgbGVu
OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBzdG9yYWdlID0gdGhpcy5fZG9tU3RvcmFnZVtpXTsK
KyAgICAgICAgICAgIGlmICggaXNMb2NhbFN0b3JhZ2UgPT09IHN0b3JhZ2UuaXNMb2NhbFN0b3Jh
Z2UgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zaG93RE9NU3RvcmFnZShzdG9yYWdlKTsKKyAg
ICAgICAgICAgICAgICBzdG9yYWdlLl9kb21TdG9yYWdlVHJlZUVsZW1lbnQuc2VsZWN0KCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwK
KworICAgIHNob3dEYXRhYmFzZTogZnVuY3Rpb24oZGF0YWJhc2UsIHRhYmxlTmFtZSkKKyAgICB7
CisgICAgICAgIGlmICghZGF0YWJhc2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKHRoaXMudmlzaWJsZVZpZXcpCisgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmhpZGUo
KTsKKworICAgICAgICB2YXIgdmlldzsKKyAgICAgICAgaWYgKHRhYmxlTmFtZSkgeworICAgICAg
ICAgICAgaWYgKCEoIl90YWJsZVZpZXdzIiBpbiBkYXRhYmFzZSkpCisgICAgICAgICAgICAgICAg
ZGF0YWJhc2UuX3RhYmxlVmlld3MgPSB7fTsKKyAgICAgICAgICAgIHZpZXcgPSBkYXRhYmFzZS5f
dGFibGVWaWV3c1t0YWJsZU5hbWVdOworICAgICAgICAgICAgaWYgKCF2aWV3KSB7CisgICAgICAg
ICAgICAgICAgdmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YWJhc2VUYWJsZVZpZXcoZGF0YWJh
c2UsIHRhYmxlTmFtZSk7CisgICAgICAgICAgICAgICAgZGF0YWJhc2UuX3RhYmxlVmlld3NbdGFi
bGVOYW1lXSA9IHZpZXc7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB2aWV3ID0gZGF0YWJhc2UuX3F1ZXJ5VmlldzsKKyAgICAgICAgICAgIGlmICghdmlldykg
eworICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFiYXNlUXVlcnlW
aWV3KGRhdGFiYXNlKTsKKyAgICAgICAgICAgICAgICBkYXRhYmFzZS5fcXVlcnlWaWV3ID0gdmll
dzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZpZXcuc2hvdyh0aGlzLnN0
b3JhZ2VWaWV3cyk7CisKKyAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHZpZXc7CisKKyAgICAg
ICAgdGhpcy5zdG9yYWdlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLnJlbW92ZUNoaWxkcmVu
KCk7CisgICAgICAgIHZhciBzdGF0dXNCYXJJdGVtcyA9IHZpZXcuc3RhdHVzQmFySXRlbXMgfHwg
W107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdHVzQmFySXRlbXMubGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIu
YXBwZW5kQ2hpbGQoc3RhdHVzQmFySXRlbXNbaV0pOworICAgIH0sCisKKyAgICBzaG93RE9NU3Rv
cmFnZTogZnVuY3Rpb24oZG9tU3RvcmFnZSkKKyAgICB7CisgICAgICAgIGlmICghZG9tU3RvcmFn
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykK
KyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgpOworCisgICAgICAgIHZhciB2aWV3
OworICAgICAgICB2aWV3ID0gZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVZpZXc7CisgICAgICAgIGlm
ICghdmlldykgeworICAgICAgICAgICAgdmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NU3RvcmFn
ZUl0ZW1zVmlldyhkb21TdG9yYWdlKTsKKyAgICAgICAgICAgIGRvbVN0b3JhZ2UuX2RvbVN0b3Jh
Z2VWaWV3ID0gdmlldzsKKyAgICAgICAgfQorCisgICAgICAgIHZpZXcuc2hvdyh0aGlzLnN0b3Jh
Z2VWaWV3cyk7CisKKyAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHZpZXc7CisKKyAgICAgICAg
dGhpcy5zdG9yYWdlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLnJlbW92ZUNoaWxkcmVuKCk7
CisgICAgICAgIHZhciBzdGF0dXNCYXJJdGVtcyA9IHZpZXcuc3RhdHVzQmFySXRlbXM7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdHVzQmFySXRlbXMubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIuYXBwZW5kQ2hp
bGQoc3RhdHVzQmFySXRlbXNbaV0pOworICAgIH0sCisKKyAgICBzaG93Q29va2llczogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcpCisgICAgICAgICAgICB0
aGlzLnZpc2libGVWaWV3LmhpZGUoKTsKKworICAgICAgICB2YXIgdmlldyA9IHRoaXMuX2Nvb2tp
ZVZpZXc7CisgICAgICAgIGlmICghdmlldykgeworICAgICAgICAgICAgdmlldyA9IG5ldyBXZWJJ
bnNwZWN0b3IuQ29va2llSXRlbXNWaWV3KCk7CisgICAgICAgICAgICB0aGlzLl9jb29raWVWaWV3
ID0gdmlldzsKKyAgICAgICAgfQorCisgICAgICAgIHZpZXcuc2hvdyh0aGlzLnN0b3JhZ2VWaWV3
cyk7CisKKyAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHZpZXc7CisKKyAgICAgICAgdGhpcy5z
dG9yYWdlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLnJlbW92ZUNoaWxkcmVuKCk7CisgICAg
ICAgIHZhciBzdGF0dXNCYXJJdGVtcyA9IHZpZXcuc3RhdHVzQmFySXRlbXM7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3RhdHVzQmFySXRlbXMubGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICB0aGlzLnN0b3JhZ2VWaWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIuYXBwZW5kQ2hpbGQoc3Rh
dHVzQmFySXRlbXNbaV0pOworICAgIH0sCisKKyAgICBjbG9zZVZpc2libGVWaWV3OiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKKyAgICAgICAgICAgIHRo
aXMudmlzaWJsZVZpZXcuaGlkZSgpOworICAgICAgICBkZWxldGUgdGhpcy52aXNpYmxlVmlldzsK
KyAgICB9LAorCisgICAgdXBkYXRlRGF0YWJhc2VUYWJsZXM6IGZ1bmN0aW9uKGRhdGFiYXNlKQor
ICAgIHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZSB8fCAhZGF0YWJhc2UuX2RhdGFiYXNlc1RyZWVF
bGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRhdGFiYXNlLl9kYXRhYmFz
ZXNUcmVlRWxlbWVudC5zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSB0cnVlOworCisgICAgICAgIGlm
ICghKCJfdGFibGVWaWV3cyIgaW4gZGF0YWJhc2UpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciB0YWJsZU5hbWVzSGFzaCA9IHt9OworICAgICAgICB2YXIgdGFibGVOYW1lcyA9
IGRhdGFiYXNlLnRhYmxlTmFtZXM7CisgICAgICAgIHZhciB0YWJsZU5hbWVzTGVuZ3RoID0gdGFi
bGVOYW1lcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFibGVOYW1lc0xl
bmd0aDsgKytpKQorICAgICAgICAgICAgdGFibGVOYW1lc0hhc2hbdGFibGVOYW1lc1tpXV0gPSB0
cnVlOworCisgICAgICAgIGZvciAodmFyIHRhYmxlTmFtZSBpbiBkYXRhYmFzZS5fdGFibGVWaWV3
cykgeworICAgICAgICAgICAgaWYgKCEodGFibGVOYW1lIGluIHRhYmxlTmFtZXNIYXNoKSkgewor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3ID09PSBkYXRhYmFzZS5fdGFibGVW
aWV3c1t0YWJsZU5hbWVdKQorICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlVmlzaWJsZVZp
ZXcoKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgZGF0YWJhc2UuX3RhYmxlVmlld3NbdGFibGVO
YW1lXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBkYXRhR3JpZEZv
clJlc3VsdDogZnVuY3Rpb24ocmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKCFyZXN1bHQucm93
cy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgY29sdW1u
cyA9IHt9OworCisgICAgICAgIHZhciByb3dzID0gcmVzdWx0LnJvd3M7CisgICAgICAgIGZvciAo
dmFyIGNvbHVtbklkZW50aWZpZXIgaW4gcm93cy5pdGVtKDApKSB7CisgICAgICAgICAgICB2YXIg
Y29sdW1uID0ge307CisgICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBjb2x1bW5JZGVudGlmaWVy
Lmxlbmd0aDsKKyAgICAgICAgICAgIGNvbHVtbi50aXRsZSA9IGNvbHVtbklkZW50aWZpZXI7CisK
KyAgICAgICAgICAgIGNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0gPSBjb2x1bW47CisgICAgICAg
IH0KKworICAgICAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICAgICAgdmFyIGxlbmd0aCA9IHJvd3Mu
bGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB2YXIgZGF0YSA9IHt9OworCisgICAgICAgICAgICB2YXIgcm93ID0gcm93cy5pdGVt
KGkpOworICAgICAgICAgICAgZm9yICh2YXIgY29sdW1uSWRlbnRpZmllciBpbiByb3cpIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogKEJ1ZyAxOTQzOSkgV2Ugc2hvdWxkIHNwZWNpYWxseSBm
b3JtYXQgU1FMIE5VTEwgaGVyZQorICAgICAgICAgICAgICAgIC8vICh3aGljaCBpcyByZXByZXNl
bnRlZCBieSBKYXZhU2NyaXB0IG51bGwgaGVyZSwgYW5kIHR1cm5lZAorICAgICAgICAgICAgICAg
IC8vIGludG8gdGhlIHN0cmluZyAibnVsbCIgYnkgdGhlIFN0cmluZygpIGZ1bmN0aW9uKS4KKyAg
ICAgICAgICAgICAgICB2YXIgdGV4dCA9IFN0cmluZyhyb3dbY29sdW1uSWRlbnRpZmllcl0pOwor
ICAgICAgICAgICAgICAgIGRhdGFbY29sdW1uSWRlbnRpZmllcl0gPSB0ZXh0OworICAgICAgICAg
ICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IGNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0ud2lkdGgp
CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0ud2lkdGggPSB0
ZXh0Lmxlbmd0aDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIG5vZGUgPSBuZXcg
V2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZShkYXRhLCBmYWxzZSk7CisgICAgICAgICAgICBub2Rl
LnNlbGVjdGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgdG90YWxDb2x1bW5XaWR0aHMgPSAwOworICAgICAgICBmb3Ig
KHZhciBjb2x1bW5JZGVudGlmaWVyIGluIGNvbHVtbnMpCisgICAgICAgICAgICB0b3RhbENvbHVt
bldpZHRocyArPSBjb2x1bW5zW2NvbHVtbklkZW50aWZpZXJdLndpZHRoOworCisgICAgICAgIC8v
IENhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSB3aWR0aCBmb3IgdGhlIGNvbHVtbnMuCisgICAgICAg
IGNvbnN0IG1pbmltdW1QcmVjZW50ID0gNTsKKyAgICAgICAgdmFyIHJlY291cFBlcmNlbnQgPSAw
OworICAgICAgICBmb3IgKHZhciBjb2x1bW5JZGVudGlmaWVyIGluIGNvbHVtbnMpIHsKKyAgICAg
ICAgICAgIHZhciB3aWR0aCA9IGNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0ud2lkdGg7CisgICAg
ICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQoKHdpZHRoIC8gdG90YWxDb2x1bW5XaWR0aHMpICog
MTAwKTsKKyAgICAgICAgICAgIGlmICh3aWR0aCA8IG1pbmltdW1QcmVjZW50KSB7CisgICAgICAg
ICAgICAgICAgcmVjb3VwUGVyY2VudCArPSAobWluaW11bVByZWNlbnQgLSB3aWR0aCk7CisgICAg
ICAgICAgICAgICAgd2lkdGggPSBtaW5pbXVtUHJlY2VudDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY29sdW1uc1tjb2x1bW5JZGVudGlmaWVyXS53aWR0aCA9IHdpZHRoOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gRW5mb3JjZSB0aGUgbWluaW11bSBwZXJjZW50YWdlIHdpZHRoLgor
ICAgICAgICB3aGlsZSAocmVjb3VwUGVyY2VudCA+IDApIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGNvbHVtbklkZW50aWZpZXIgaW4gY29sdW1ucykgeworICAgICAgICAgICAgICAgIGlmIChjb2x1
bW5zW2NvbHVtbklkZW50aWZpZXJdLndpZHRoID4gbWluaW11bVByZWNlbnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLS1jb2x1bW5zW2NvbHVtbklkZW50aWZpZXJdLndpZHRoOworICAgICAgICAg
ICAgICAgICAgICAtLXJlY291cFBlcmNlbnQ7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVj
b3VwUGVyY2VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENoYW5nZSB0aGUg
d2lkdGggcHJvcGVydHkgdG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc3R5bGUgd2lkdGguCisg
ICAgICAgIGZvciAodmFyIGNvbHVtbklkZW50aWZpZXIgaW4gY29sdW1ucykKKyAgICAgICAgICAg
IGNvbHVtbnNbY29sdW1uSWRlbnRpZmllcl0ud2lkdGggKz0gIiUiOworCisgICAgICAgIHZhciBk
YXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7CisgICAgICAgIHZh
ciBsZW5ndGggPSBub2Rlcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBkYXRhR3JpZC5hcHBlbmRDaGlsZChub2Rlc1tpXSk7CisK
KyAgICAgICAgcmV0dXJuIGRhdGFHcmlkOworICAgIH0sCisKKyAgICBkYXRhR3JpZEZvckRPTVN0
b3JhZ2U6IGZ1bmN0aW9uKGRvbVN0b3JhZ2UpCisgICAgeworICAgICAgICBpZiAoIWRvbVN0b3Jh
Z2UubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIGNvbHVt
bnMgPSB7fTsKKyAgICAgICAgY29sdW1uc1swXSA9IHt9OworICAgICAgICBjb2x1bW5zWzFdID0g
e307CisgICAgICAgIGNvbHVtbnNbMF0udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIktl
eSIpOworICAgICAgICBjb2x1bW5zWzBdLndpZHRoID0gY29sdW1uc1swXS50aXRsZS5sZW5ndGg7
CisgICAgICAgIGNvbHVtbnNbMV0udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVl
Iik7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggPSBjb2x1bW5zWzFdLnRpdGxlLmxlbmd0aDsK
KworICAgICAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICAgICAgCisgICAgICAgIHZhciBsZW5ndGgg
PSBkb21TdG9yYWdlLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8
IGRvbVN0b3JhZ2UubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IHt9
OworICAgICAgIAorICAgICAgICAgICAgdmFyIGtleSA9IFN0cmluZyhkb21TdG9yYWdlLmtleShp
bmRleCkpOworICAgICAgICAgICAgZGF0YVswXSA9IGtleTsKKyAgICAgICAgICAgIGlmIChrZXku
bGVuZ3RoID4gY29sdW1uc1swXS53aWR0aCkKKyAgICAgICAgICAgICAgICBjb2x1bW5zWzBdLndp
ZHRoID0ga2V5Lmxlbmd0aDsKKyAgICAgICAgCisgICAgICAgICAgICB2YXIgdmFsdWUgPSBTdHJp
bmcoZG9tU3RvcmFnZS5nZXRJdGVtKGtleSkpOworICAgICAgICAgICAgZGF0YVsxXSA9IHZhbHVl
OworICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IGNvbHVtbnNbMV0ud2lkdGgpCisgICAg
ICAgICAgICAgICAgY29sdW1uc1sxXS53aWR0aCA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAg
IHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoZGF0YSwgZmFsc2UpOwor
ICAgICAgICAgICAgbm9kZS5zZWxlY3RhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGVzLnB1
c2gobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdG90YWxDb2x1bW5XaWR0aHMgPSBj
b2x1bW5zWzBdLndpZHRoICsgY29sdW1uc1sxXS53aWR0aDsKKyAgICAgICAgdmFyIHdpZHRoID0g
TWF0aC5yb3VuZCgoY29sdW1uc1swXS53aWR0aCAqIDEwMCkgLyB0b3RhbENvbHVtbldpZHRocyk7
CisgICAgICAgIGNvbnN0IG1pbmltdW1QcmVjZW50ID0gMTA7CisgICAgICAgIGlmICh3aWR0aCA8
IG1pbmltdW1QcmVjZW50KQorICAgICAgICAgICAgd2lkdGggPSBtaW5pbXVtUHJlY2VudDsKKyAg
ICAgICAgaWYgKHdpZHRoID4gMTAwIC0gbWluaW11bVByZWNlbnQpCisgICAgICAgICAgICB3aWR0
aCA9IDEwMCAtIG1pbmltdW1QcmVjZW50OworICAgICAgICBjb2x1bW5zWzBdLndpZHRoID0gd2lk
dGg7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggPSAxMDAgLSB3aWR0aDsKKyAgICAgICAgY29s
dW1uc1swXS53aWR0aCArPSAiJSI7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggKz0gIiUiOwor
CisgICAgICAgIHZhciBkYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFH
cmlkKGNvbHVtbnMpOworICAgICAgICB2YXIgbGVuZ3RoID0gbm9kZXMubGVuZ3RoOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGF0YUdyaWQu
YXBwZW5kQ2hpbGQobm9kZXNbaV0pOworICAgICAgICBkYXRhR3JpZC5hZGRDcmVhdGlvbk5vZGUo
ZmFsc2UpOworICAgICAgICBpZiAobGVuZ3RoID4gMCkKKyAgICAgICAgICAgIG5vZGVzWzBdLnNl
bGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGRhdGFHcmlkOworICAgIH0sCisKKyAgICBy
ZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB2aXNpYmxlVmlldyA9IHRoaXMu
dmlzaWJsZVZpZXc7CisgICAgICAgIGlmICh2aXNpYmxlVmlldyAmJiAicmVzaXplIiBpbiB2aXNp
YmxlVmlldykKKyAgICAgICAgICAgIHZpc2libGVWaWV3LnJlc2l6ZSgpOworICAgIH0sCisKKyAg
ICBfcmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdmFyIGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2lu
ZG93KCk7CisgICAgICAgIGlmICghaW5zcGVjdGVkV2luZG93IHx8ICFpbnNwZWN0ZWRXaW5kb3cu
ZG9jdW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fc3RvcmFnZUV2
ZW50TGlzdGVuZXIgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFjayh0aGlzLl9zdG9y
YWdlRXZlbnQuYmluZCh0aGlzKSk7CisgICAgICAgIGluc3BlY3RlZFdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJzdG9yYWdlIiwgdGhpcy5fc3RvcmFnZUV2ZW50TGlzdGVuZXIsIHRydWUpOworICAg
IH0sCisKKyAgICBfdW5yZWdpc3RlclN0b3JhZ2VFdmVudExpc3RlbmVyOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0b3JhZ2VFdmVudExpc3RlbmVyKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBpbnNwZWN0ZWRXaW5kb3cgPSBJbnNwZWN0b3JDb250
cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOworICAgICAgICBpZiAoIWluc3BlY3RlZFdpbmRvdyB8
fCAhaW5zcGVjdGVkV2luZG93LmRvY3VtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGluc3BlY3RlZFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwgdGhpcy5f
c3RvcmFnZUV2ZW50TGlzdGVuZXIsIHRydWUpOworICAgICAgICBkZWxldGUgdGhpcy5fc3RvcmFn
ZUV2ZW50TGlzdGVuZXI7CisgICAgfSwKKworICAgIF9zdG9yYWdlRXZlbnQ6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9kb21TdG9yYWdlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBpc0xvY2FsU3RvcmFnZSA9IChldmVudC5zdG9yYWdlQXJl
YSA9PT0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5sb2NhbFN0b3JhZ2Up
OworICAgICAgICB2YXIgZG9tU3RvcmFnZUxlbmd0aCA9IHRoaXMuX2RvbVN0b3JhZ2UubGVuZ3Ro
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbVN0b3JhZ2VMZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgdmFyIGRvbVN0b3JhZ2UgPSB0aGlzLl9kb21TdG9yYWdlW2ldOworICAgICAg
ICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlID09PSBkb21TdG9yYWdlLmlzTG9jYWxTdG9yYWdlKSB7
CisgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBkb21TdG9yYWdlLl9kb21TdG9yYWdlVmlldzsK
KyAgICAgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyAmJiB2aWV3ID09PSB0aGlzLnZp
c2libGVWaWV3KQorICAgICAgICAgICAgICAgICAgICBkb21TdG9yYWdlLl9kb21TdG9yYWdlVmll
dy51cGRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfc3Rh
cnRTaWRlYmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmVsZW1lbnREcmFnU3RhcnQodGhpcy5zaWRlYmFyUmVzaXplRWxlbWVudCwgdGhpcy5f
c2lkZWJhckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFNpZGViYXJEcmFnZ2luZy5iaW5k
KHRoaXMpLCBldmVudCwgImNvbC1yZXNpemUiKTsKKyAgICB9LAorCisgICAgX3NpZGViYXJEcmFn
Z2luZzogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl91cGRhdGVTaWRlYmFy
V2lkdGgoZXZlbnQucGFnZVgpOworCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgfSwKKworICAgIF9lbmRTaWRlYmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKGV2ZW50KTsKKyAgICB9LAorCisg
ICAgX3VwZGF0ZVNpZGViYXJXaWR0aDogZnVuY3Rpb24od2lkdGgpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5zaWRlYmFyRWxlbWVudC5vZmZzZXRXaWR0aCA8PSAwKSB7CisgICAgICAgICAgICAv
LyBUaGUgc3R5bGVzaGVldCBoYXNuJ3QgbG9hZGVkIHlldCBvciB0aGUgd2luZG93IGlzIGNsb3Nl
ZCwKKyAgICAgICAgICAgIC8vIHNvIHdlIGNhbid0IGNhbGN1bGF0ZSB3aGF0IGlzIG5lZWQuIFJl
dHVybiBlYXJseS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghKCJfY3VycmVudFNpZGViYXJXaWR0aCIgaW4gdGhpcykpCisgICAgICAgICAgICB0aGlzLl9j
dXJyZW50U2lkZWJhcldpZHRoID0gdGhpcy5zaWRlYmFyRWxlbWVudC5vZmZzZXRXaWR0aDsKKwor
ICAgICAgICBpZiAodHlwZW9mIHdpZHRoID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIHdp
ZHRoID0gdGhpcy5fY3VycmVudFNpZGViYXJXaWR0aDsKKworICAgICAgICB3aWR0aCA9IE51bWJl
ci5jb25zdHJhaW4od2lkdGgsIFByZWZlcmVuY2VzLm1pblNpZGViYXJXaWR0aCwgd2luZG93Lmlu
bmVyV2lkdGggLyAyKTsKKworICAgICAgICB0aGlzLl9jdXJyZW50U2lkZWJhcldpZHRoID0gd2lk
dGg7CisKKyAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsg
InB4IjsKKyAgICAgICAgdGhpcy5zdG9yYWdlVmlld3Muc3R5bGUubGVmdCA9IHdpZHRoICsgInB4
IjsKKyAgICAgICAgdGhpcy5zdG9yYWdlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLnN0eWxl
LmxlZnQgPSB3aWR0aCArICJweCI7CisgICAgICAgIHRoaXMuc2lkZWJhclJlc2l6ZUVsZW1lbnQu
c3R5bGUubGVmdCA9ICh3aWR0aCAtIDMpICsgInB4IjsKKyAgICAgICAgCisgICAgICAgIHZhciB2
aXNpYmxlVmlldyA9IHRoaXMudmlzaWJsZVZpZXc7CisgICAgICAgIGlmICh2aXNpYmxlVmlldyAm
JiAicmVzaXplIiBpbiB2aXNpYmxlVmlldykKKyAgICAgICAgICAgIHZpc2libGVWaWV3LnJlc2l6
ZSgpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkRh
dGFiYXNlU2lkZWJhclRyZWVFbGVtZW50ID0gZnVuY3Rpb24oZGF0YWJhc2UpCit7CisgICAgdGhp
cy5kYXRhYmFzZSA9IGRhdGFiYXNlOworCisgICAgV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxl
bWVudC5jYWxsKHRoaXMsICJkYXRhYmFzZS1zaWRlYmFyLXRyZWUtaXRlbSIsICIiLCAiIiwgZGF0
YWJhc2UsIHRydWUpOworCisgICAgdGhpcy5yZWZyZXNoVGl0bGVzKCk7Cit9CisKK1dlYkluc3Bl
Y3Rvci5EYXRhYmFzZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CisgICAgb25zZWxl
Y3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc3RvcmFn
ZS5zaG93RGF0YWJhc2UodGhpcy5kYXRhYmFzZSk7CisgICAgfSwKKworICAgIG9uY29sbGFwc2U6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIFJlcXVlc3QgYSByZWZyZXNoIGFmdGVyIGV2
ZXJ5IGNvbGxhcHNlIHNvIHRoZSBuZXh0CisgICAgICAgIC8vIGV4cGFuZCB3aWxsIGhhdmUgYW4g
dXBkYXRlZCB0YWJsZSBsaXN0LgorICAgICAgICB0aGlzLnNob3VsZFJlZnJlc2hDaGlsZHJlbiA9
IHRydWU7CisgICAgfSwKKworICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgdGFibGVOYW1lcyA9IHRo
aXMuZGF0YWJhc2UudGFibGVOYW1lczsKKyAgICAgICAgdmFyIHRhYmxlTmFtZXNMZW5ndGggPSB0
YWJsZU5hbWVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZU5hbWVz
TGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0
b3IuU2lkZWJhckRhdGFiYXNlVGFibGVUcmVlRWxlbWVudCh0aGlzLmRhdGFiYXNlLCB0YWJsZU5h
bWVzW2ldKSk7CisgICAgfSwKKworICAgIGdldCBtYWluVGl0bGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuZGF0YWJhc2UubmFtZTsKKyAgICB9LAorCisgICAgc2V0IG1haW5UaXRsZSh4
KQorICAgIHsKKyAgICAgICAgLy8gRG8gbm90aGluZy4KKyAgICB9LAorCisgICAgZ2V0IHN1YnRp
dGxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmRpc3BsYXlEb21haW47
CisgICAgfSwKKworICAgIHNldCBzdWJ0aXRsZSh4KQorICAgIHsKKyAgICAgICAgLy8gRG8gbm90
aGluZy4KKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5EYXRhYmFzZVNpZGViYXJUcmVlRWxlbWVu
dC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5w
cm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5TaWRlYmFyRGF0YWJhc2VUYWJsZVRyZWVFbGVtZW50
ID0gZnVuY3Rpb24oZGF0YWJhc2UsIHRhYmxlTmFtZSkKK3sKKyAgICB0aGlzLmRhdGFiYXNlID0g
ZGF0YWJhc2U7CisgICAgdGhpcy50YWJsZU5hbWUgPSB0YWJsZU5hbWU7CisKKyAgICBXZWJJbnNw
ZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LmNhbGwodGhpcywgImRhdGFiYXNlLXRhYmxlLXNpZGVi
YXItdHJlZS1pdGVtIHNtYWxsIiwgdGFibGVOYW1lLCAiIiwgbnVsbCwgZmFsc2UpOworfQorCitX
ZWJJbnNwZWN0b3IuU2lkZWJhckRhdGFiYXNlVGFibGVUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CisgICAgb25zZWxlY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMuc3RvcmFnZS5zaG93RGF0YWJhc2UodGhpcy5kYXRhYmFzZSwgdGhpcy50YWJsZU5hbWUp
OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlNpZGViYXJEYXRhYmFzZVRhYmxlVHJlZUVsZW1l
bnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQu
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVudCA9
IGZ1bmN0aW9uKGRvbVN0b3JhZ2UsIGNsYXNzTmFtZSkKK3sKKworICAgIHRoaXMuZG9tU3RvcmFn
ZSA9IGRvbVN0b3JhZ2U7CisKKyAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LmNh
bGwodGhpcywgImRvbXN0b3JhZ2Utc2lkZWJhci10cmVlLWl0ZW0gIiArIGNsYXNzTmFtZSwgZG9t
U3RvcmFnZSwgIiIsIG51bGwsIGZhbHNlKTsKKworICAgIHRoaXMucmVmcmVzaFRpdGxlcygpOwor
fQorCitXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUg
PSB7CisgICAgb25zZWxlY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5wYW5lbHMuc3RvcmFnZS5zaG93RE9NU3RvcmFnZSh0aGlzLmRvbVN0b3JhZ2UpOworICAgIH0s
CisKKyAgICBnZXQgbWFpblRpdGxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmRvbVN0
b3JhZ2UuZG9tYWluOworICAgIH0sCisKKyAgICBzZXQgbWFpblRpdGxlKHgpCisgICAgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLgorICAgIH0sCisKKyAgICBnZXQgc3VidGl0bGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICIiOyAvL3RoaXMuZGF0YWJhc2UuZGlzcGxheURvbWFpbjsKKyAgICB9
LAorCisgICAgc2V0IHN1YnRpdGxlKHgpCisgICAgeworICAgICAgICAvLyBEbyBub3RoaW5nLgor
ICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90
eXBlOworCitXZWJJbnNwZWN0b3IuQ29va2llU2lkZWJhclRyZWVFbGVtZW50ID0gZnVuY3Rpb24o
KQoreworICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAiY29v
a2llLXNpZGViYXItdHJlZS1pdGVtIiwgbnVsbCwgIiIsIG51bGwsIGZhbHNlKTsKKworICAgIHRo
aXMucmVmcmVzaFRpdGxlcygpOworfQorCitXZWJJbnNwZWN0b3IuQ29va2llU2lkZWJhclRyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKKyAgICBvbnNlbGVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zdG9yYWdlLnNob3dDb29raWVzKCk7CisgICAgfSwK
KworICAgIGdldCBtYWluVGl0bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ29va2llcyIpOworICAgIH0sCisKKyAgICBzZXQgbWFpblRpdGxlKHgpCisg
ICAgeworICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgIH0sCisKKyAgICBnZXQgc3VidGl0bGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0sCisKKyAgICBzZXQgc3VidGl0bGUo
eCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuQ29va2llU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMKaW5kZXggYjVjNjdlMy4uZjRhNDg4MSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTEyLDcgKzEyLDYgQEAKICAgICA8ZmlsZT5Db29raWVJ
dGVtc1ZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+RGF0YWJhc2UuanM8L2ZpbGU+CiAgICAgPGZp
bGU+RGF0YWJhc2VRdWVyeVZpZXcuanM8L2ZpbGU+Ci0gICAgPGZpbGU+RGF0YWJhc2VzUGFuZWwu
anM8L2ZpbGU+CiAgICAgPGZpbGU+RGF0YWJhc2VUYWJsZVZpZXcuanM8L2ZpbGU+CiAgICAgPGZp
bGU+RGF0YUdyaWQuanM8L2ZpbGU+CiAgICAgPGZpbGU+RE9NQWdlbnQuanM8L2ZpbGU+CkBAIC01
Miw2ICs1MSw3IEBACiAgICAgPGZpbGU+U291cmNlRnJhbWUuanM8L2ZpbGU+CiAgICAgPGZpbGU+
U291cmNlVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5TdGF0dXNCYXJCdXR0b24uanM8L2ZpbGU+
CisgICAgPGZpbGU+U3RvcmFnZVBhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPlN0eWxlc1NpZGVi
YXJQYW5lLmpzPC9maWxlPgogICAgIDxmaWxlPlRleHRQcm9tcHQuanM8L2ZpbGU+CiAgICAgPGZp
bGU+VG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+CkBAIC02Niw3ICs2Niw2IEBA
CiAgICAgPGZpbGU+SW1hZ2VzL2NvbnNvbGVCdXR0b25HbHlwaC5wbmc8L2ZpbGU+CiAgICAgPGZp
bGU+SW1hZ2VzL2Nvb2tpZS5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2RhdGFiYXNlLnBu
ZzwvZmlsZT4KLSAgICA8ZmlsZT5JbWFnZXMvZGF0YWJhc2VzSWNvbi5wbmc8L2ZpbGU+CiAgICAg
PGZpbGU+SW1hZ2VzL2RhdGFiYXNlVGFibGUucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9k
ZWJ1Z2dlckNvbnRpbnVlLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvZGVidWdnZXJQYXVz
ZS5wbmc8L2ZpbGU+CkBAIC0xNDcsNiArMTQ2LDcgQEAKICAgICA8ZmlsZT5JbWFnZXMvc3RhdHVz
YmFyTWVudUJ1dHRvblNlbGVjdGVkLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvc3RhdHVz
YmFyUmVzaXplckhvcml6b250YWwucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9zdGF0dXNi
YXJSZXNpemVyVmVydGljYWwucG5nPC9maWxlPgorICAgIDxmaWxlPkltYWdlcy9zdG9yYWdlSWNv
bi5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL3RpbWVsaW5lSG9sbG93UGlsbEJsdWUucG5n
PC9maWxlPgogICAgIDxmaWxlPkltYWdlcy90aW1lbGluZUhvbGxvd1BpbGxHcmF5LnBuZzwvZmls
ZT4KICAgICA8ZmlsZT5JbWFnZXMvdGltZWxpbmVIb2xsb3dQaWxsR3JlZW4ucG5nPC9maWxlPgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCBkYzIxMTA0Li41
ZWZkNTQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpAQCAt
MTk5LDggKzE5OSw4IEBAIGJvZHkuYXR0YWNoZWQgI3NlYXJjaC1yZXN1bHRzLW1hdGNoZXMgewog
ICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvc2NyaXB0c0ljb24ucG5nKTsKIH0KIAot
LnRvb2xiYXItaXRlbS5kYXRhYmFzZXMgLnRvb2xiYXItaWNvbiB7Ci0gICAgYmFja2dyb3VuZC1p
bWFnZTogdXJsKEltYWdlcy9kYXRhYmFzZXNJY29uLnBuZyk7CisudG9vbGJhci1pdGVtLnN0b3Jh
Z2UgLnRvb2xiYXItaWNvbiB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9zdG9y
YWdlSWNvbi5wbmcpOwogfQogCiAudG9vbGJhci1pdGVtLnByb2ZpbGVzIC50b29sYmFyLWljb24g
ewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDQ4NTdj
N2EuLmM3ZWFiMmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuaHRtbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0
bWwKQEAgLTcxLDcgKzcxLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJFbGVtZW50c1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZXNQYW5lbC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0c1BhbmVsLmpzIj48
L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEYXRhYmFz
ZXNQYW5lbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iU3RvcmFnZVBhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJQcm9maWxlc1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZVZpZXcuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZUZyYW1lLmpzIj48
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IGY2
Mzc3YzIuLjA0Y2IxZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwpAQCAtMTIwLDggKzEyMCwxMCBAQCB2YXIgV2ViSW5zcGVjdG9yID0gewogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBmb3IgKHZhciBwYW5lbE5hbWUgaW4gV2ViSW5zcGVjdG9yLnBhbmVs
cykgewotICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHNbcGFuZWxOYW1lXSA9PSB4
KQorICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHNbcGFuZWxOYW1lXSA9PSB4KSB7
CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocGFuZWxOYW1lKTsKICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JDb250cm9sbGVyLnN0b3JlTGFzdEFjdGl2ZVBhbmVsKHBhbmVsTmFtZSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAKQEAgLTEzNiw4ICsxMzgsOCBAQCB2
YXIgV2ViSW5zcGVjdG9yID0gewogICAgICAgICAgICAgdGhpcy5wYW5lbHMuc2NyaXB0cyA9IG5l
dyBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsKCk7CiAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMu
aW5kZXhPZigicHJvZmlsZXMiKSA9PT0gLTEpCiAgICAgICAgICAgICB0aGlzLnBhbmVscy5wcm9m
aWxlcyA9IG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCgpOwotICAgICAgICBpZiAoaGlk
ZGVuUGFuZWxzLmluZGV4T2YoImRhdGFiYXNlcyIpID09PSAtMSkKLSAgICAgICAgICAgIHRoaXMu
cGFuZWxzLmRhdGFiYXNlcyA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwoKTsgICAg
ICAKKyAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJzdG9yYWdlIikgPT09IC0xICYm
IGhpZGRlblBhbmVscy5pbmRleE9mKCJkYXRhYmFzZXMiKSA9PT0gLTEpCisgICAgICAgICAgICB0
aGlzLnBhbmVscy5zdG9yYWdlID0gbmV3IFdlYkluc3BlY3Rvci5TdG9yYWdlUGFuZWwoKTsgICAg
ICAKICAgICB9LAogCiAgICAgZ2V0IGF0dGFjaGVkKCkKQEAgLTg3OCw5ICs4ODAsOSBAQCBXZWJJ
bnNwZWN0b3Iuc2hvd1Byb2ZpbGVzUGFuZWwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jdXJyZW50
UGFuZWwgPSB0aGlzLnBhbmVscy5wcm9maWxlczsKIH0KIAotV2ViSW5zcGVjdG9yLnNob3dEYXRh
YmFzZXNQYW5lbCA9IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rvci5zaG93U3RvcmFnZVBhbmVsID0g
ZnVuY3Rpb24oKQogewotICAgIHRoaXMuY3VycmVudFBhbmVsID0gdGhpcy5wYW5lbHMuZGF0YWJh
c2VzOworICAgIHRoaXMuY3VycmVudFBhbmVsID0gdGhpcy5wYW5lbHMuc3RvcmFnZTsKIH0KIAog
V2ViSW5zcGVjdG9yLmFkZFJlc291cmNlID0gZnVuY3Rpb24oaWRlbnRpZmllciwgcGF5bG9hZCkK
QEAgLTkxMywxNCArOTE1LDE0IEBAIFdlYkluc3BlY3Rvci5jbGVhckNvbnNvbGVNZXNzYWdlcyA9
IGZ1bmN0aW9uKCkKIAogV2ViSW5zcGVjdG9yLnNlbGVjdERhdGFiYXNlID0gZnVuY3Rpb24obykK
IHsKLSAgICBXZWJJbnNwZWN0b3Iuc2hvd0RhdGFiYXNlc1BhbmVsKCk7Ci0gICAgV2ViSW5zcGVj
dG9yLnBhbmVscy5kYXRhYmFzZXMuc2VsZWN0RGF0YWJhc2Uobyk7CisgICAgV2ViSW5zcGVjdG9y
LnNob3dTdG9yYWdlUGFuZWwoKTsKKyAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3JhZ2Uuc2Vs
ZWN0RGF0YWJhc2Uobyk7CiB9CiAKIFdlYkluc3BlY3Rvci5zZWxlY3RET01TdG9yYWdlID0gZnVu
Y3Rpb24obykKIHsKLSAgICBXZWJJbnNwZWN0b3Iuc2hvd0RhdGFiYXNlc1BhbmVsKCk7Ci0gICAg
V2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMuc2VsZWN0RE9NU3RvcmFnZShvKTsKKyAgICBX
ZWJJbnNwZWN0b3Iuc2hvd1N0b3JhZ2VQYW5lbCgpOworICAgIFdlYkluc3BlY3Rvci5wYW5lbHMu
c3RvcmFnZS5zZWxlY3RET01TdG9yYWdlKG8pOwogfQogCiBXZWJJbnNwZWN0b3IudXBkYXRlUmVz
b3VyY2UgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwYXlsb2FkKQpAQCAtOTkxLDcgKzk5Myw3IEBA
IFdlYkluc3BlY3Rvci5hZGREYXRhYmFzZSA9IGZ1bmN0aW9uKHBheWxvYWQpCiAgICAgICAgIHBh
eWxvYWQuZG9tYWluLAogICAgICAgICBwYXlsb2FkLm5hbWUsCiAgICAgICAgIHBheWxvYWQudmVy
c2lvbik7Ci0gICAgdGhpcy5wYW5lbHMuZGF0YWJhc2VzLmFkZERhdGFiYXNlKGRhdGFiYXNlKTsK
KyAgICB0aGlzLnBhbmVscy5zdG9yYWdlLmFkZERhdGFiYXNlKGRhdGFiYXNlKTsKIH0KIAogV2Vi
SW5zcGVjdG9yLmFkZERPTVN0b3JhZ2UgPSBmdW5jdGlvbihwYXlsb2FkKQpAQCAtMTAwMCw3ICsx
MDAyLDcgQEAgV2ViSW5zcGVjdG9yLmFkZERPTVN0b3JhZ2UgPSBmdW5jdGlvbihwYXlsb2FkKQog
ICAgICAgICBwYXlsb2FkLmRvbVN0b3JhZ2UsCiAgICAgICAgIHBheWxvYWQuaG9zdCwKICAgICAg
ICAgcGF5bG9hZC5pc0xvY2FsU3RvcmFnZSk7Ci0gICAgdGhpcy5wYW5lbHMuZGF0YWJhc2VzLmFk
ZERPTVN0b3JhZ2UoZG9tU3RvcmFnZSk7CisgICAgdGhpcy5wYW5lbHMuc3RvcmFnZS5hZGRET01T
dG9yYWdlKGRvbVN0b3JhZ2UpOwogfQogCiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmFja2luZ1dh
c0VuYWJsZWQgPSBmdW5jdGlvbigpCg==
</data>
<flag name="review"
          id="19425"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>