<?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>34816</bug_id>
          
          <creation_ts>2010-02-10 15:15:15 -0800</creation_ts>
          <short_desc>Web Inspector: split source code into chunks in order to improve text viewer performance on large files.</short_desc>
          <delta_ts>2010-02-11 09:17:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>189494</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-10 15:15:15 -0800</bug_when>
    <thetext>This change brings back SourceFrame&apos;s canvas+style magic, restores line wrapping and makes things a lot like they used to be.
It removes TextEditor for now and renames NativeTextViewer into TextViewer. TextViewer is no longer derived from TextEditor.
This TextViewer is still based on TextEditorModel, no iframes are involved.

Instead of creating div per line, TextViewer splits source code into 50 line chunks. Upon scroll event, visible chunks are sharded into lines and individual lines are highlighted. Whenever highlighted region gets outside of the visible area, highlight spans are thrown away and region is replaced with the original plain text chunk.

Complex stuff:
- Whenever there is a need to manipulate individual lines (add message bubble / set breakpoint / reveal / etc.), individual chunks for such lines are created.
- There is also an implicit machinery that is maintaining selection when it goes beyond the visible area.
- Search occurrences are implemented as artificial spans interweaving highlighting markup. We can now show all and highlight current (not yet implemented).

Outstanding problems / TODOs:
- Selection does not grow upwards due to range normalization
- Highlight animation is missing (sticky yellow is used)
- Repaint logic is very simple. Every time it restores origianal plain text chunks first and then splits visible ones apart. It should be optimized in a way that existing markup / line rows are reused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189496</commentid>
    <comment_count>1</comment_count>
      <attachid>48523</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-10 15:22:42 -0800</bug_when>
    <thetext>Created attachment 48523
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189500</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-10 15:24:27 -0800</bug_when>
    <thetext>Attachment 48523 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Skipping input &apos;WebCore/inspector/front-end/textEditor.css&apos;: Can&apos;t open for reading
WebCore/inspector/front-end/textViewer.css:79:  Line contains tab character.  [whitespace/tab] [5]
WebCore/inspector/front-end/textViewer.css:80:  Line contains tab character.  [whitespace/tab] [5]
WebCore/inspector/front-end/textViewer.css:124:  Line contains tab character.  [whitespace/tab] [5]
WebCore/inspector/front-end/textViewer.css:125:  Line contains tab character.  [whitespace/tab] [5]
WebCore/inspector/front-end/textViewer.css:133:  Line contains tab character.  [whitespace/tab] [5]
Skipping input &apos;WebCore/inspector/front-end/TextEditor.js&apos;: Can&apos;t open for reading
Skipping input &apos;WebCore/inspector/front-end/NativeTextViewer.js&apos;: Can&apos;t open for reading
Total errors found: 5


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189504</commentid>
    <comment_count>3</comment_count>
      <attachid>48525</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-10 15:38:36 -0800</bug_when>
    <thetext>Created attachment 48525
[PATCH] Proposed change (same with style fixes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189611</commentid>
    <comment_count>4</comment_count>
      <attachid>48525</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-02-10 23:27:23 -0800</bug_when>
    <thetext>Comment on attachment 48525
[PATCH] Proposed change (same with style fixes).

&gt; +    setCoalescingUpdate: function(enabled)

I think two functions would be better. Like beginUpdates and endUpdates.

&gt; +            if (offset &gt;= currentOffset &amp;&amp; offset &lt; currentOffset + rowHeight) {
&gt; +                return row.chunkNumber;
&gt; +            }

No braces.


&gt; +        for (var i = 0; i &lt; chunkNumber &amp;&amp; i &lt; this._textChunks.length; ++i) {
&gt; +            lineNumber += this._textChunks[i].linesCount;
&gt; +        }

No braces.

&gt; +        var firstVisibleChunk = this._chunkForOffset(Math.max(scrollTop - 10, 0));

What is the 10 magic number? Make it a named constant.


&gt; +        for (var i = digits; i &lt; totalDigits; ++i) {
&gt; +            number += &quot; &quot;;
&gt; +        }

Braces.


&gt; +Node.prototype.traverseNextTextNode = function(stayWithin, ignoreClass)

ignoreClass isn&apos;t used.


I am a little concerned about the \u200B\n code. It will cause the coppied text to contain unicode an that can make some editors complain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189614</commentid>
    <comment_count>5</comment_count>
      <attachid>48525</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-02-11 00:02:18 -0800</bug_when>
    <thetext>Comment on attachment 48525
[PATCH] Proposed change (same with style fixes).

With the style tweaks we talked about on irc for the line gutter and the zero-width space removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189665</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-11 06:19:12 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 48525 [details])
&gt; &gt; +    setCoalescingUpdate: function(enabled)
&gt; 
&gt; I think two functions would be better. Like beginUpdates and endUpdates.
&gt; 

Done.

&gt; No braces.
&gt; 

Done.

&gt; 
&gt; No braces.

Done.

&gt; 
&gt; 
&gt; What is the 10 magic number? Make it a named constant.

Done.
&gt; 
&gt; 
&gt; Braces.
&gt; 

Done.

&gt; 
&gt; &gt; +Node.prototype.traverseNextTextNode = function(stayWithin, ignoreClass)
&gt; 
&gt; ignoreClass isn&apos;t used.

Done.

&gt; 
&gt; I am a little concerned about the \u200B\n code. It will cause the coppied text
&gt; to contain unicode an that can make some editors complain.

I removed \u200B.

(In reply to comment #5)
&gt; (From update of attachment 48525 [details])
&gt; With the style tweaks we talked about on irc for the line gutter and the
&gt; zero-width space removal.

Removed the space, added gutter gap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189709</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-11 09:17:51 -0800</bug_when>
    <thetext>Variation of patch landed. (I extracted a TextChunk class for better clarity and optimized repaint).

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	D	WebCore/inspector/front-end/NativeTextViewer.js
	D	WebCore/inspector/front-end/TextEditor.js
	D	WebCore/inspector/front-end/textEditor.css
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/inspector/front-end/ScriptView.js
	M	WebCore/inspector/front-end/Settings.js
	M	WebCore/inspector/front-end/SourceFrame.js
	M	WebCore/inspector/front-end/SourceView.js
	A	WebCore/inspector/front-end/TextViewer.js
	M	WebCore/inspector/front-end/WebKit.qrc
	M	WebCore/inspector/front-end/inspector.css
	M	WebCore/inspector/front-end/inspector.html
	A	WebCore/inspector/front-end/textViewer.css
	M	WebCore/inspector/front-end/utilities.js
Committed r54657</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48523</attachid>
            <date>2010-02-10 15:22:42 -0800</date>
            <delta_ts>2010-02-10 15:38:36 -0800</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>chunks</filename>
            <type>text/plain</type>
            <size>126188</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTcxMzU5NC4uNjgxODIwNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTkgQEAKKzIwMTAtMDItMTAgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc3BsaXQgc291cmNlIGNvZGUgaW50
byBjaHVua3MgaW4gb3JkZXIgdG8gaW1wcm92ZSB0ZXh0CisgICAgICAgIHZpZXdlciBwZXJmb3Jt
YW5jZSBvbiBsYXJnZSBmaWxlcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzQ4MTYKKworICAgICAgICBUaGlzIGNoYW5nZSBicmluZ3MgYmFjayBT
b3VyY2VGcmFtZSdzIGNhbnZhcytzdHlsZSBtYWdpYywgcmVzdG9yZXMgbGluZQorICAgICAgICB3
cmFwcGluZyBhbmQgbWFrZXMgdGhpbmdzIGEgbG90IGxpa2UgdGhleSB1c2VkIHRvIGJlLgorICAg
ICAgICBJdCByZW1vdmVzIFRleHRFZGl0b3IgZm9yIG5vdyBhbmQgcmVuYW1lcyBOYXRpdmVUZXh0
Vmlld2VyIGludG8gVGV4dFZpZXdlci4KKyAgICAgICAgVGV4dFZpZXdlciBpcyBubyBsb25nZXIg
ZGVyaXZlZCBmcm9tIFRleHRFZGl0b3IuCisgICAgICAgIFRoaXMgVGV4dFZpZXdlciBpcyBzdGls
bCBiYXNlZCBvbiBUZXh0RWRpdG9yTW9kZWwsIG5vIGlmcmFtZXMgYXJlIGludm9sdmVkLgorCisg
ICAgICAgIEluc3RlYWQgb2YgY3JlYXRpbmcgZGl2IHBlciBsaW5lLCBUZXh0Vmlld2VyIHNwbGl0
cyBzb3VyY2UgY29kZSBpbnRvIDUwIGxpbmUKKyAgICAgICAgY2h1bmtzLiBVcG9uIHNjcm9sbCBl
dmVudCwgdmlzaWJsZSBjaHVua3MgYXJlIHNoYXJkZWQgaW50byBsaW5lcyBhbmQgaW5kaXZpZHVh
bAorICAgICAgICBsaW5lcyBhcmUgaGlnaGxpZ2h0ZWQuIFdoZW5ldmVyIGhpZ2hsaWdodGVkIHJl
Z2lvbiBnZXRzIG91dHNpZGUgb2YgdGhlIHZpc2libGUKKyAgICAgICAgYXJlYSwgaGlnaGxpZ2h0
IHNwYW5zIGFyZSB0aHJvd24gYXdheSBhbmQgcmVnaW9uIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9y
aWdpbmFsCisgICAgICAgIHBsYWluIHRleHQgY2h1bmsuCisKKyAgICAgICAgQ29tcGxleCBzdHVm
ZjoKKyAgICAgICAgLSBXaGVuZXZlciB0aGVyZSBpcyBhIG5lZWQgdG8gbWFuaXB1bGF0ZSBpbmRp
dmlkdWFsIGxpbmVzIChhZGQgbWVzc2FnZSBidWJibGUgLworICAgICAgICBzZXQgYnJlYWtwb2lu
dCAvIHJldmVhbCAvIGV0Yy4pLCBpbmRpdmlkdWFsIGNodW5rcyBmb3Igc3VjaCBsaW5lcyBhcmUg
Y3JlYXRlZC4KKyAgICAgICAgLSBUaGVyZSBpcyBhbHNvIGFuIGltcGxpY2l0IG1hY2hpbmVyeSB0
aGF0IGlzIG1haW50YWluaW5nIHNlbGVjdGlvbiB3aGVuIGl0CisgICAgICAgIGdvZXMgYmV5b25k
IHRoZSB2aXNpYmxlIGFyZWEuCisgICAgICAgIC0gU2VhcmNoIG9jY3VycmVuY2VzIGFyZSBpbXBs
ZW1lbnRlZCBhcyBhcnRpZmljaWFsIHNwYW5zIGludGVyd2VhdmluZworICAgICAgICBoaWdobGln
aHRpbmcgbWFya3VwLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
TmF0aXZlVGV4dFZpZXdlci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1NjcmlwdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
c2V0IHZpc2libGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5zZXQgZXhlY3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLnJldmVhbExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmFkZE1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2l6ZVRvRml0Q29udGVudEhlaWdodCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnNldENvbnRlbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2NyZWF0ZVZpZXdl
cklmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
bWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuY2xlYXJNYXJrZWRSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlLl9icmVha3BvaW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl91cGRhdGVFeGVjdXRpb25MaW5lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2FkZE1lc3NhZ2VUb1NvdXJjZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9hZGRFeGlzdGlu
Z0JyZWFrcG9pbnRzVG9Tb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludFRvU291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291cmNlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX21vdXNlRG93bik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9lZGl0QnJlYWtwb2lu
dENvbmRpdGlvbi5jb21taXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24uZGlzbWlzc2VkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0
aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX3Nob3dC
cmVha3BvaW50Q29uZGl0aW9uUG9wdXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5fY3JlYXRlQ29uZGl0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9rZXlEb3duKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUucmVzaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4dCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9kcmF3UHJvZ3JhbUNv
dW50ZXJJbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuX2RyYXdCcmVha3BvaW50SW1hZ2VzSWZOZWVkZWQuZHJhd0JyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fZHJhd0JyZWFrcG9p
bnRJbWFnZXNJZk5lZWRlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VW
aWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX2p1bXBUb1NlYXJjaFJl
c3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qczogQWRkZWQu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuc2V0IG1pbWVUeXBlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5nZXQgdGV4dE1vZGVsKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5yZXZlYWxMaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5hZGREZWNvcmF0aW9uKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5yZW1vdmVEZWNvcmF0aW9uKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5tYXJrQW5kUmV2ZWFsUmFuZ2Up
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmhpZ2hsaWdodExp
bmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl90ZXh0Q2hh
bmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2NyZWF0
ZUNodW5rUm93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5f
bWFrZUxpbmVBQ2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLl9pbmRleENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90
b3R5cGUuX2hpZ2hsaWdodENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIucHJvdG90eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIu
cHJvdG90eXBlLnNldENvYWxlc2NpbmdVcGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRWaWV3ZXIucHJvdG90eXBlLl9yZXBhaW50QWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0Vmlld2VyLnByb3RvdHlwZS5fY2h1bmtGb3JPZmZzZXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9jaHVua051bWJlckZvckxpbmUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9jaHVua1N0YXJ0TGluZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX3Jlc3RvcmVDaHVua3MpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9yZXBhaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fcmVzdG9yZVNlbGVj
dGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX3NlbGVj
dGlvblRvUG9zaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLl9jcmVhdGVMaW5lUm93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnBy
b3RvdHlwZS5fcGFpbnRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnBy
b3RvdHlwZS5fY3JlYXRlU3Bhbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUuX2NyZWF0ZUxpbmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIu
cHJvdG90eXBlLl9yZXdyaXRlSHJlZik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX21hcmtSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX2RlY2ltYWxEaWdpdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvdGV4dEVkaXRvci5jc3M6IFJlbW92ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzczogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanM6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS50
cmF2ZXJzZU5leHRUZXh0Tm9kZSk6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS5yYW5nZUJvdW5k
YXJ5Rm9yT2Zmc2V0KToKKwogMjAxMC0wMi0xMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGJhZCBwYXRocyBpbiBXZWJDb3JlLnZjcHJvagpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAzOTQy
M2E3Li5jYTlmZDEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzczOSw3ICszNzM5LDYgQEAKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9LZXlib2FyZFNob3J0Y3V0LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVUZXh0Vmlld2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL09iamVjdC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9PYmpl
Y3RQcm94eS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9w
ZXJ0aWVzU2VjdGlvbi5qcycsCkBAIC0zNzc1LDEwICszNzc0LDEwIEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9TdW1tYXJ5QmFyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1Rlc3RDb250cm9sbGVyLmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRFZGl0b3IuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9UZXh0UHJvbXB0LmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Rl
eHRWaWV3ZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVB
Z2VudC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU92ZXJ2
aWV3UGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZUdy
aWQuanMnLApAQCAtMzc5Miw3ICszNzkxLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL2F1ZGl0cy5jc3MnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3JT
eW50YXhIaWdobGlnaHQuY3NzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3Rl
eHRFZGl0b3IuY3NzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3
ZXIuY3NzJywKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmluc3BlY3Rvcl9pbWFnZV9maWxlcyc6
IFsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggODg1MzA0YS4uMjFk
ZjJiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mjg0OCwxMCAr
NDI4NDgsNiBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOYXRpdmVUZXh0Vmlld2VyLmpzIg0KLQkJ
CQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcT2JqZWN0LmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAt
NDI5OTIsMjMgKzQyOTg4LDIzIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0b3IuanMi
DQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvckhp
Z2hsaWdodGVyLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvckhpZ2hsaWdodGVy
LmpzIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0
b3JNb2RlbC5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0b3JNb2RlbC5qcyINCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0UHJvbXB0LmpzIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcdGV4dEVkaXRvci5jc3MiDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dFZpZXdlci5qcyINCiAJCQkJCT4NCiAJCQkJPC9G
aWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFRleHRQcm9tcHQuanMiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcdGV4dFZpZXdlci5jc3MiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUN
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlVGV4dFZpZXdl
ci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVUZXh0Vmlld2VyLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTdkYjI3Li4wMDAwMDAwCi0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVUZXh0Vmlld2VyLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1XZWJJbnNwZWN0b3IuTmF0aXZlVGV4dFZpZXdlciA9IGZ1bmN0aW9u
KHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ci5jYWxsKHRoaXMsIHRleHRNb2RlbCwgcGxhdGZvcm0pOwotICAgIHRoaXMuX3NoZWV0LnRhYklu
ZGV4ID0gMDsKLSAgICB0aGlzLl9jYW52YXMuc3R5bGUuekluZGV4ID0gMDsKLSAgICB0aGlzLl9j
cmVhdGVMaW5lRGl2cygpOwotICAgIHRoaXMuX3VybCA9IHVybDsKLSAgICB0aGlzLl9zZWxlY3Rp
b25Db2xvciA9ICJyZ2IoMjQxLCAyMzQsIDApIjsKLX0KLQotV2ViSW5zcGVjdG9yLk5hdGl2ZVRl
eHRWaWV3ZXIucHJvdG90eXBlID0gewotICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwgbGlz
dGVuZXIKLSAgICBfdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xk
VGV4dCwgbmV3VGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZUxpbmVEaXZzKCk7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fdGV4dENoYW5nZWQuY2Fs
bCh0aGlzLCBvbGRSYW5nZSwgbmV3UmFuZ2UsIG9sZFRleHQsIG5ld1RleHQpOwotICAgIH0sCi0K
LSAgICBfY3JlYXRlTGluZURpdnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Nv
bnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLl9zaGVldCk7Ci0gICAgICAgIHRoaXMuX3NoZWV0LnJl
bW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1v
ZGVsLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVEaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIGxpbmVEaXYuY2xhc3NOYW1lID0g
Im5hdGl2ZS10ZXh0LWVkaXRvci1saW5lIjsKLSAgICAgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5f
dGV4dE1vZGVsLmxpbmUoaSk7Ci0gICAgICAgICAgICBsaW5lRGl2LnRleHRDb250ZW50ID0gdGV4
dDsKLSAgICAgICAgICAgIGlmICghdGV4dCkKLSAgICAgICAgICAgICAgICBsaW5lRGl2LnN0eWxl
Lm1pbkhlaWdodCA9IHRoaXMuX3RleHRMaW5lSGVpZ2h0ICsgInB4IjsKLSAgICAgICAgICAgIHRo
aXMuX3NoZWV0LmFwcGVuZENoaWxkKGxpbmVEaXYpOwotICAgICAgICAgICAgdGhpcy5fdGV4dE1v
ZGVsLnNldEF0dHJpYnV0ZShpLCAibGluZS1kaXYiLCBsaW5lRGl2KTsKLSAgICAgICAgICAgIHRo
aXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGUoaSwgImRpdi1oaWdobGlnaHRlZCIpOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9zaGVldCk7
Ci0gICAgfSwKLQotICAgIF91cGRhdGVQcmVmZXJyZWRTaXplOiBmdW5jdGlvbihzdGFydExpbmUs
IGVuZExpbmUpCi0gICAgewotICAgICAgICAvLyBQcmVmZXJyZWQgc2l6ZSBpcyBhdXRvbWF0aWNh
bGx5IGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGxpbmUgZGl2cy4KLSAgICAgICAgLy8gT25seSBo
YW5kbGUgbGluZSBudW1iZXJzIGhlcmUuCi0gICAgICAgIAotICAgICAgICB0aGlzLnNldENvYWxl
c2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHZhciBuZXdMaW5lTnVtYmVyRGlnaXRzID0gdGhp
cy5fZGVjaW1hbERpZ2l0cyh0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7Ci0gICAgICAgIHRo
aXMuX2xpbmVOdW1iZXJXaWR0aCA9IChuZXdMaW5lTnVtYmVyRGlnaXRzICsgMikgKiB0aGlzLl9k
aWdpdFdpZHRoOwotCi0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5sZWZ0ID0gdGhpcy5f
bGluZU51bWJlcldpZHRoICsgInB4IjsKLQotICAgICAgICB0aGlzLl9saW5lTnVtYmVyRGlnaXRz
ID0gbmV3TGluZU51bWJlckRpZ2l0czsKLSAgICAgICAgdGhpcy5yZXBhaW50QWxsKCk7Ci0KLSAg
ICAgICAgLy8gQ2hhbmdlcyB0byBzaXplIGNhbiBjaGFuZ2UgdGhlIGNsaWVudCBhcmVhIChzY3Jv
bGxlcnMgY2FuIGFwcGVhci9kaXNhcHBlYXIpCi0gICAgICAgIHRoaXMucmVzaXplKCk7Ci0gICAg
ICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9zY3Jv
bGw6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICAvLyBEbyBpbnN0YW50IHJlcGFpbnQgc28g
dGhhdCBvZmZzZXQgb2YgY2FudmFzIHdhcyBpbiBzeW5jIHdpdGggdGhlIHNoZWV0LgotICAgICAg
ICB0aGlzLl9yZXBhaW50T25TY3JvbGwoKTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyTW91c2VM
aXN0ZW5lcnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJpbmQodGhpcyksIGZh
bHNlKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIs
IHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9yZWdp
c3RlcktleWJvYXJkTGlzdGVuZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBOb29w
IC0gbGV0IGJyb3dzZXIgdGFrZSBjYXJlIG9mIHRoaXMuCi0gICAgfSwKLQotICAgIF9yZWdpc3Rl
ckNsaXBib2FyZExpc3RlbmVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gTm9vcCAt
IGxldCBicm93c2VyIHRha2UgY2FyZSBvZiB0aGlzLgotICAgIH0sCi0KLSAgICBfcG9zaXRpb25E
aXZEZWNvcmF0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBEaXYgZGVjb3JhdGlv
bnMgaGF2ZSBmaXhlZCBwb3NpdGlvbnMgaW4gb3VyIGNhc2UuCi0gICAgfSwKLQotICAgIF9yZWdp
c3RlclNob3J0Y3V0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gTm9vcC4KLSAgICB9
LAotCi0gICAgX21vdXNlRG93bjogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmIChlLnRh
cmdldCAhPT0gdGhpcy5lbGVtZW50IHx8IGUuYnV0dG9uID09PSAyIHx8ICh0aGlzLl9pc01hYyAm
JiBlLmN0cmxLZXkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9saW5lTnVt
YmVyRGVjb3JhdG9yLm1vdXNlRG93bih0aGlzLl9saW5lRm9yTW91c2VFdmVudChlKSwgZSk7Ci0g
ICAgfSwKLQotICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlm
IChlLnRhcmdldCAhPT0gdGhpcy5lbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB0aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9yLmNvbnRleHRNZW51KHRoaXMuX2xpbmVGb3JNb3Vz
ZUV2ZW50KGUpLCBlKTsKLSAgICB9LAotCi0gICAgX2xpbmVGb3JNb3VzZUV2ZW50OiBmdW5jdGlv
bihlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuX29mZnNldFRvTGlu
ZShlLm9mZnNldFkgKyB0aGlzLl9zY3JvbGxUb3ApIC0gMSk7Ci0gICAgfSwKLQotICAgIF9saW5l
SGVpZ2h0OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8gVXNlIGNhY2hl
ZCB2YWx1ZSBmaXJzdC4KLSAgICAgICAgaWYgKHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGluZU51
bWJlciArIDFdKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGlu
ZU51bWJlciArIDFdIC0gdGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lTnVtYmVyXTsKLQotICAg
ICAgICAvLyBHZXQgbWV0cmljcyBmcm9tIHRoZSBicm93c2VyLgotICAgICAgICB2YXIgZWxlbWVu
dCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImxpbmUtZGl2Iik7
Ci0gICAgICAgIGlmIChsaW5lTnVtYmVyICsgMSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
KSB7Ci0gICAgICAgICAgICB2YXIgbmV4dEVsZW1lbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0
cmlidXRlKGxpbmVOdW1iZXIgKyAxLCAibGluZS1kaXYiKTsKLSAgICAgICAgICAgIHJldHVybiBu
ZXh0RWxlbWVudC5vZmZzZXRUb3AgLSBlbGVtZW50Lm9mZnNldFRvcDsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodCAtIGVsZW1lbnQu
b2Zmc2V0VG9wOwotICAgIH0sCi0KLSAgICBfcGFpbnRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVy
LCBsaW5lT2Zmc2V0KQotICAgIHsKLSAgICAgICAgdmFyIGRpdkhpZ2hsaWdodGVkID0gdGhpcy5f
dGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWhpZ2hsaWdodGVkIik7Ci0g
ICAgICAgIGlmIChkaXZIaWdobGlnaHRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB2YXIgaGlnaGxpZ2h0ZXJTdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGlu
ZU51bWJlciwgImhpZ2hsaWdodGVyLXN0YXRlIik7Ci0gICAgICAgIGlmICghaGlnaGxpZ2h0ZXJT
dGF0ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3Rl
eHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwotICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3Rl
eHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImxpbmUtZGl2Iik7Ci0gICAgICAgIGVs
ZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAKLSAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0g
LTE7Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7Ci0gICAgICAg
ICAgICBpZiAoaiA+IDEwMDApIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGxpbmUgaXMgdG9v
IGxvbmcgLSBkbyBub3Qgd2FzdGUgY3ljbGVzIG9uIG1pbmlmaWVkIGpzIGhpZ2hsaWdodGluZy4K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBh
dHRyaWJ1dGUgPSBoaWdobGlnaHRlclN0YXRlICYmIGhpZ2hsaWdodGVyU3RhdGUuYXR0cmlidXRl
c1tqXTsKLSAgICAgICAgICAgIGlmICghYXR0cmlidXRlIHx8ICFhdHRyaWJ1dGUuc3R5bGUpIHsK
LSAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgPT09IC0xKQotICAgICAgICAgICAg
ICAgICAgICBwbGFpblRleHRTdGFydCA9IGo7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU3BhbihsaW5lLnN1
YnN0cmluZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0aCksIGF0dHJpYnV0ZS50b2tlblR5cGUpKTsK
LSAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkKLSAgICAgICAgICAg
IGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZS5zdWJzdHJp
bmcocGxhaW5UZXh0U3RhcnQsIGxpbmUubGVuZ3RoKSkpOwotCi0gICAgICAgIHRoaXMuX3RleHRN
b2RlbC5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRpdi1oaWdobGlnaHRlZCIsIHRydWUpOwot
ICAgIH0sCi0KLSAgICBfY3JlYXRlU3BhbjogZnVuY3Rpb24oY29udGVudCwgY2xhc3NOYW1lKQot
ICAgIHsKLSAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gImh0bWwtcmVzb3VyY2UtbGluayIgfHwg
Y2xhc3NOYW1lID09PSAiaHRtbC1leHRlcm5hbC1saW5rIikKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jcmVhdGVMaW5rKGNvbnRlbnQsIGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwtbGlu
ayIpOwotCi0gICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OwotICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtIiArIGNsYXNzTmFtZTsKLSAgICAg
ICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7Ci0g
ICAgICAgIHJldHVybiBzcGFuOwotICAgIH0sCi0KLSAgICBfY3JlYXRlTGluazogZnVuY3Rpb24o
Y29udGVudCwgaXNFeHRlcm5hbCkKLSAgICB7Ci0gICAgICAgIHZhciBxdW90ZSA9IGNvbnRlbnQu
Y2hhckF0KDApOwotICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0g
IlwiIiB8fCAgIHF1b3RlID09PSAiJyIpKQotICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQu
c3Vic3RyaW5nKDEsIGNvbnRlbnQubGVuZ3RoIC0gMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHF1b3RlID0gbnVsbDsKLQotICAgICAgICB2YXIgYSA9IFdlYkluc3BlY3Rvci5saW5raWZ5
VVJMQXNOb2RlKHRoaXMuX3Jld3JpdGVIcmVmKGNvbnRlbnQpLCBjb250ZW50LCBudWxsLCBpc0V4
dGVybmFsKTsKLSAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7Ci0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1
ZSI7Ci0gICAgICAgIGlmIChxdW90ZSkKLSAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUocXVvdGUpKTsKLSAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChh
KTsKLSAgICAgICAgaWYgKHF1b3RlKQotICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShxdW90ZSkpOwotICAgICAgICByZXR1cm4gc3BhbjsKLSAgICB9
LAotCi0gICAgX3Jld3JpdGVIcmVmOiBmdW5jdGlvbihocmVmVmFsdWUsIGlzRXh0ZXJuYWwpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX3VybCB8fCAhaHJlZlZhbHVlIHx8IGhyZWZWYWx1ZS5p
bmRleE9mKCI6Ly8iKSA+IDApCi0gICAgICAgICAgICByZXR1cm4gaHJlZlZhbHVlOwotICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLmNvbXBsZXRlVVJMKHRoaXMuX3VybCwgaHJlZlZhbHVlKTsK
LSAgICB9LAotCi0gICAgc2V0RGl2RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZWxl
bWVudCkKLSAgICB7Ci0gICAgICAgIHZhciBleGlzdGluZ0VsZW1lbnQgPSB0aGlzLl90ZXh0TW9k
ZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJkaXYtZGVjb3JhdGlvbiIpOwotICAgICAgICBp
ZiAoZXhpc3RpbmdFbGVtZW50ICYmIGV4aXN0aW5nRWxlbWVudC5wYXJlbnROb2RlKQotICAgICAg
ICAgICAgZXhpc3RpbmdFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXhpc3RpbmdFbGVt
ZW50KTsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVy
LCAiZGl2LWRlY29yYXRpb24iKTsKLQotICAgICAgICBpZiAoZWxlbWVudCkgewotICAgICAgICAg
ICAgaWYgKGxpbmVOdW1iZXIgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbGluZURpdiA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUo
bGluZU51bWJlciArIDEsICJsaW5lLWRpdiIpOwotICAgICAgICAgICAgICAgIHRoaXMuX3NoZWV0
Lmluc2VydEJlZm9yZShlbGVtZW50LCBsaW5lRGl2KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIHRoaXMuX3NoZWV0LmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICAgICAgICAg
ICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRp
b24iLCBlbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnJldmFsaWRhdGVEZWNvcmF0
aW9uc0FuZFBhaW50KCk7Ci0gICAgfSwKLQotICAgIGluaXRGb250TWV0cmljczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmluaXRG
b250TWV0cmljcy5jYWxsKHRoaXMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lRGl2ID0g
dGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShpLCAibGluZS1kaXYiKTsKLSAgICAgICAgICAg
IGlmICghdGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpCi0gICAgICAgICAgICAgICAgbGluZURpdi5z
dHlsZS5taW5IZWlnaHQgPSB0aGlzLl90ZXh0TGluZUhlaWdodCArICJweCI7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXRpdmVUZXh0Vmlld2VyLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCmluZGV4IGNmN2YxYjEuLmM1YThiODEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCkBAIC0zMyw3ICszMyw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3ID0gZnVuY3Rpb24oc2NyaXB0KQogCiAgICAgdGhpcy5f
ZnJhbWVOZWVkc1NldHVwID0gdHJ1ZTsKICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVwID0gZmFs
c2U7Ci0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUo
dGhpcy5lbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgIHRoaXMu
c291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVudCwg
dGhpcy5fYWRkQnJlYWtwb2ludC5iaW5kKHRoaXMpLCB0aGlzLl9yZW1vdmVCcmVha3BvaW50LmJp
bmQodGhpcykpOwogfQogCiBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUgPSB7CkBA
IC04Nyw2ICs4Nyw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKICAg
ICBzaG93aW5nTGFzdFNlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90
eXBlLnNob3dpbmdMYXN0U2VhcmNoUmVzdWx0LAogICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IFdl
Ykluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LAogICAg
IF9zb3VyY2VGcmFtZVNldHVwRmluaXNoZWQ6IFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3Rv
dHlwZS5fc291cmNlRnJhbWVTZXR1cEZpbmlzaGVkLAorICAgIF9yZW1vdmVCcmVha3BvaW50OiBX
ZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQsCiAgICAg
cmVzaXplOiBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUucmVzaXplCiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCBiYzBkYWE1Li44NWFlY2Q1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBAIC0zOCw4ICszOCw3
IEBAIHZhciBQcmVmZXJlbmNlcyA9IHsKICAgICBzdHlsZVJ1bGVzRXhwYW5kZWRTdGF0ZToge30s
CiAgICAgc2hvd01pc3NpbmdMb2NhbGl6ZWRTdHJpbmdzOiBmYWxzZSwKICAgICBzYW1wbGluZ0NQ
VVByb2ZpbGVyOiBmYWxzZSwKLSAgICBzaG93Q29sb3JOaWNrbmFtZXM6IHRydWUsCi0gICAgdXNl
Q2FudmFzQmFzZWRFZGl0b3I6IGZhbHNlCisgICAgc2hvd0NvbG9yTmlja25hbWVzOiB0cnVlCiB9
CiAKIFdlYkluc3BlY3Rvci5wb3B1bGF0ZUZyb250ZW5kU2V0dGluZ3MgPSBmdW5jdGlvbihzZXR0
aW5nc1N0cmluZykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpp
bmRleCBiYzkxMjJiLi45NWEwOGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCkBAIC0yOCw3ICsyOCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQsIGFkZEJyZWFr
cG9pbnREZWxlZ2F0ZSkKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVu
dEVsZW1lbnQsIGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSwgcmVtb3ZlQnJlYWtwb2ludERlbGVnYXRl
KQogewogICAgIHRoaXMuX3BhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50OwogCkBAIC00NCw2
ICs0NCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1l
bnQsIGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSkKICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTsKIAog
ICAgIHRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0ZSA9IGFkZEJyZWFrcG9pbnREZWxlZ2F0ZTsK
KyAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVsZWdhdGUgPSByZW1vdmVCcmVha3BvaW50RGVs
ZWdhdGU7CiB9CiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CkBAIC01
MSw3ICs1Miw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAg
c2V0IHZpc2libGUodmlzaWJsZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNp
YmxlOwotICAgICAgICB0aGlzLl9jcmVhdGVFZGl0b3JJZk5lZWRlZCgpOworICAgICAgICB0aGlz
Ll9jcmVhdGVWaWV3ZXJJZk5lZWRlZCgpOwogICAgIH0sCiAKICAgICBnZXQgZXhlY3V0aW9uTGlu
ZSgpCkBAIC02MywxNSArNjQsMTggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25MaW5lID09PSB4KQogICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBwcmV2aW91c0xpbmUgPSB0aGlzLl9leGVj
dXRpb25MaW5lOwogICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lID0geDsKLSAgICAgICAgaWYg
KHRoaXMuX2VkaXRvcikKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci5yZXBhaW50QWxsKCk7CisK
KyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0aGlzLl91cGRhdGVF
eGVjdXRpb25MaW5lKHByZXZpb3VzTGluZSk7CiAgICAgfSwKIAogICAgIHJldmVhbExpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fZWRpdG9yKQotICAg
ICAgICAgICAgdGhpcy5fZWRpdG9yLnJldmVhbChsaW5lTnVtYmVyIC0gMSwgMCk7CisgICAgICAg
IGlmICh0aGlzLl90ZXh0Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXZl
YWxMaW5lKGxpbmVOdW1iZXIgLSAxLCAwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhp
cy5fbGluZU51bWJlclRvUmV2ZWFsID0gbGluZU51bWJlcjsKICAgICB9LApAQCAtODIsNyArODYs
OCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBicmVh
a3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdl
ZCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzYWJsZWQi
LCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdl
ZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZShicmVha3BvaW50
KTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0aGlzLl9hZGRC
cmVha3BvaW50VG9Tb3VyY2UoYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIHJlbW92ZUJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCkBAIC05MSw3ICs5Niw4IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigiZW5hYmxlZCIsIG51bGwsIHRoaXMpOwogICAgICAgICBicmVha3BvaW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIoImRpc2FibGVkIiwgbnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFr
cG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCBudWxsLCB0aGlz
KTsKLSAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludEZyb21Tb3VyY2UoYnJlYWtwb2ludCk7
CisgICAgICAgIGlmICh0aGlzLl90ZXh0Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fcmVtb3Zl
QnJlYWtwb2ludEZyb21Tb3VyY2UoYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIGFkZE1lc3Nh
Z2U6IGZ1bmN0aW9uKG1zZykKQEAgLTEwMCw3ICsxMDYsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIW1zZy5tZXNzYWdlIHx8IG1zZy5saW5l
IDw9IDAgfHwgIW1zZy5pc0Vycm9yT3JXYXJuaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobXNnKQotICAgICAgICBpZiAodGhpcy5fZWRpdG9y
KQorICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikKICAgICAgICAgICAgIHRoaXMuX2FkZE1l
c3NhZ2VUb1NvdXJjZShtc2cpOwogICAgIH0sCiAKQEAgLTExNCwxNCArMTIwLDE0IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21lc3NhZ2Vz
ID0gW107CiAgICAgICAgIHRoaXMuX3Jvd01lc3NhZ2VzID0ge307CiAgICAgICAgIHRoaXMuX21l
c3NhZ2VCdWJibGVzID0ge307Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0b3IpCi0gICAgICAgICAg
ICB0aGlzLl9lZGl0b3IucmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQoKTsKKyAgICAgICAg
aWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlc2l6
ZSgpOwogICAgIH0sCiAKICAgICBzaXplVG9GaXRDb250ZW50SGVpZ2h0OiBmdW5jdGlvbigpCiAg
ICAgewotICAgICAgICBpZiAodGhpcy5fZWRpdG9yKQotICAgICAgICAgICAgdGhpcy5fZWRpdG9y
LnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7CisgICAgICAgIGlmICh0aGlzLl90ZXh0
Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXZhbGlkYXRlRGVjb3JhdGlv
bnNBbmRQYWludCgpOwogICAgIH0sCiAKICAgICBzZXRDb250ZW50OiBmdW5jdGlvbihtaW1lVHlw
ZSwgY29udGVudCwgdXJsKQpAQCAtMTMwLDQ3ICsxMzYsNTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVs
bCwgY29udGVudCk7CiAgICAgICAgIHRoaXMuX21pbWVUeXBlID0gbWltZVR5cGU7CiAgICAgICAg
IHRoaXMuX3VybCA9IHVybDsKLSAgICAgICAgdGhpcy5fY3JlYXRlRWRpdG9ySWZOZWVkZWQoKTsK
KyAgICAgICAgdGhpcy5fY3JlYXRlVmlld2VySWZOZWVkZWQoKTsKKyAgICB9LAorCisgICAgaGln
aGxpZ2h0TGluZTogZnVuY3Rpb24obGluZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0
Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5oaWdobGlnaHRMaW5lKGxpbmUg
LSAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fbGluZVRvSGlnaGxpZ2h0ID0g
bGluZTsKICAgICB9LAogCi0gICAgX2NyZWF0ZUVkaXRvcklmTmVlZGVkOiBmdW5jdGlvbigpCisg
ICAgX2NyZWF0ZVZpZXdlcklmTmVlZGVkOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAo
IXRoaXMuX3Zpc2libGUgfHwgIXRoaXMuX2xvYWRlZCB8fCB0aGlzLl9lZGl0b3IpCisgICAgICAg
IGlmICghdGhpcy5fdmlzaWJsZSB8fCAhdGhpcy5fbG9hZGVkIHx8IHRoaXMuX3RleHRWaWV3ZXIp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGVkaXRvckNvbnN0cnVjdG9yID0g
UHJlZmVyZW5jZXMudXNlQ2FudmFzQmFzZWRFZGl0b3IgPyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ciA6IFdlYkluc3BlY3Rvci5OYXRpdmVUZXh0Vmlld2VyOwotICAgICAgICB0aGlzLl9lZGl0b3Ig
PSBuZXcgZWRpdG9yQ29uc3RydWN0b3IodGhpcy5fdGV4dE1vZGVsLCBXZWJJbnNwZWN0b3IucGxh
dGZvcm0sIHRoaXMuX3VybCk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5saW5lTnVtYmVyRGVjb3Jh
dG9yID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TGluZU51bWJlckRlY29yYXRvcih0aGlz
LCB0aGlzLl9lZGl0b3IudGV4dE1vZGVsKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLmxpbmVEZWNv
cmF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkxpbmVEZWNvcmF0b3IodGhpcyk7Ci0g
ICAgICAgIHRoaXMuX2VkaXRvci5yZWFkT25seSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2VsZW1l
bnQgPSB0aGlzLl9lZGl0b3IuZWxlbWVudDsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fa2V5RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLSAg
ICAgICAgdGhpcy5fcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKLSAg
ICAgICAgdGhpcy5fZWRpdG9yLmluaXRGb250TWV0cmljcygpOworICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyKHRoaXMuX3RleHRNb2RlbCwgV2Vi
SW5zcGVjdG9yLnBsYXRmb3JtLCB0aGlzLl91cmwpOworICAgICAgICB2YXIgZWxlbWVudCA9IHRo
aXMuX3RleHRWaWV3ZXIuZWxlbWVudDsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwgdGhpcy5fa2V5RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICAgICAgZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJp
bmQodGhpcyksIHRydWUpOworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICAgICAgdGhpcy5f
cGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTsKIAotICAgICAgICB0aGlzLl9lZGl0
b3IubWltZVR5cGUgPSB0aGlzLl9taW1lVHlwZTsKKyAgICAgICAgdGhpcy5fbmVlZHNQcm9ncmFt
Q291bnRlckltYWdlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fbmVlZHNCcmVha3BvaW50SW1hZ2Vz
ID0gdHJ1ZTsKIAorICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnNldENvYWxlc2NpbmdVcGRhdGUo
dHJ1ZSk7CisKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5taW1lVHlwZSA9IHRoaXMuX21pbWVU
eXBlOwogICAgICAgICB0aGlzLl9hZGRFeGlzdGluZ01lc3NhZ2VzVG9Tb3VyY2UoKTsKICAgICAg
ICAgdGhpcy5fYWRkRXhpc3RpbmdCcmVha3BvaW50c1RvU291cmNlKCk7Ci0KLSAgICAgICAgdGhp
cy5fZWRpdG9yLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHRoaXMuX2VkaXRv
ci5yZXNpemUoKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnJldmFsaWRhdGVEZWNvcmF0aW9uc0Fu
ZFBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxpbmUpCi0gICAgICAgICAg
ICB0aGlzLnJldmVhbExpbmUodGhpcy5fZXhlY3V0aW9uTGluZSk7CisgICAgICAgIHRoaXMuX3Vw
ZGF0ZUV4ZWN1dGlvbkxpbmUoKTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXNpemUoKTsK
IAogICAgICAgICBpZiAodGhpcy5fbGluZU51bWJlclRvUmV2ZWFsKSB7CiAgICAgICAgICAgICB0
aGlzLnJldmVhbExpbmUodGhpcy5fbGluZU51bWJlclRvUmV2ZWFsKTsKICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9saW5lTnVtYmVyVG9SZXZlYWw7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
dGhpcy5fcGVuZGluZ1NlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0
aGlzLl9wZW5kaW5nU2VsZWN0aW9uUmFuZ2U7Ci0gICAgICAgICAgICB0aGlzLl9lZGl0b3Iuc2V0
U2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4sIHJhbmdlLmVuZExp
bmUsIHJhbmdlLmVuZENvbHVtbik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ1Nl
bGVjdGlvblJhbmdlOworICAgICAgICBpZiAodGhpcy5fcGVuZGluZ01hcmtSYW5nZSkgeworICAg
ICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fcGVuZGluZ01hcmtSYW5nZTsKKyAgICAgICAgICAg
IHRoaXMubWFya1JhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5n
TWFya1JhbmdlOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zZXRDb2FsZXNjaW5n
VXBkYXRlKGZhbHNlKTsKKworICAgICAgICBpZiAodGhpcy5fbGluZVRvSGlnaGxpZ2h0KSB7Cisg
ICAgICAgICAgICB0aGlzLmhpZ2hsaWdodExpbmUodGhpcy5fbGluZVRvSGlnaGxpZ2h0KTsKKyAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdobGlnaHQ7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5zZXRDb2FsZXNjaW5nVXBkYXRlKGZhbHNlKTsKICAgICB9LAog
CiAgICAgZmluZFNlYXJjaE1hdGNoZXM6IGZ1bmN0aW9uKHF1ZXJ5KQpAQCAtMjE1LDIxICsyMzAs
MjAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0
dXJuIHJhbmdlczsKICAgICB9LAogCi0gICAgc2V0U2VsZWN0aW9uOiBmdW5jdGlvbihyYW5nZSkK
KyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX2VkaXRvcikKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci5zZXRTZWxlY3Rpb24o
cmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbHVtbiwgcmFuZ2UuZW5kTGluZSwgcmFuZ2Uu
ZW5kQ29sdW1uKTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0
aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZShyYW5nZSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTZWxlY3Rpb25SYW5nZSA9IHJhbmdlOworICAgICAg
ICAgICAgdGhpcy5fcGVuZGluZ01hcmtSYW5nZSA9IHJhbmdlOwogICAgIH0sCiAKLSAgICBjbGVh
clNlbGVjdGlvbjogZnVuY3Rpb24oKQorICAgIGNsZWFyTWFya2VkUmFuZ2U6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0b3IpIHsKLSAgICAgICAgICAgIHZhciByYW5n
ZSA9IHRoaXMuX2VkaXRvci5zZWxlY3Rpb247Ci0gICAgICAgICAgICB0aGlzLl9lZGl0b3Iuc2V0
U2VsZWN0aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbiwgcmFuZ2UuZW5kTGluZSwg
cmFuZ2UuZW5kQ29sdW1uKTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIubWFya0FuZFJldmVhbFJhbmdlKG51bGwpOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nU2VsZWN0aW9uUmFuZ2U7
CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ01hcmtSYW5nZTsKICAgICB9LAogCiAg
ICAgX2luY3JlbWVudE1lc3NhZ2VSZXBlYXRDb3VudDogZnVuY3Rpb24obXNnLCByZXBlYXREZWx0
YSkKQEAgLTI0Nyw2ICsyNjEsNDAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VSZXBlYXRDb3VudEVsZW1lbnQudGV4
dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiAocmVwZWF0ZWQgJWQgdGltZXMpIiwg
bXNnLnJlcGVhdENvdW50KTsKICAgICB9LAogCisgICAgX2JyZWFrcG9pbnRDaGFuZ2VkOiBmdW5j
dGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0
OworICAgICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CisgICAgICAg
IGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCisgICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1i
cmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlz
YWJsZWQiKTsKKworICAgICAgICBpZiAoYnJlYWtwb2ludC5jb25kaXRpb24pCisgICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVh
a3BvaW50LWNvbmRpdGlvbmFsIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQt
Y29uZGl0aW9uYWwiKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZUV4ZWN1dGlvbkxpbmU6IGZ1bmN0
aW9uKHByZXZpb3VzTGluZSkKKyAgICB7CisgICAgICAgIGlmIChwcmV2aW91c0xpbmUpIHsKKyAg
ICAgICAgICAgIGlmIChwcmV2aW91c0xpbmUgLSAxIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQpCisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHBy
ZXZpb3VzTGluZSAtIDEsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdGhpcy5fZXhlY3V0aW9uTGluZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJbWFnZUlmTmVlZGVkKCk7CisKKyAgICAg
ICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkK
KyAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbih0aGlzLl9leGVjdXRp
b25MaW5lIC0gMSwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOworICAgIH0sCisKICAgICBfYWRk
RXhpc3RpbmdNZXNzYWdlc1RvU291cmNlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIg
bGVuZ3RoID0gdGhpcy5fbWVzc2FnZXMubGVuZ3RoOwpAQCAtMjY0LDcgKzMxMiw3IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBtZXNzYWdlQnVi
YmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAg
bWVzc2FnZUJ1YmJsZUVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLW1lc3NhZ2UtYnVi
YmxlIjsKICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdWJibGVzW21zZy5saW5lXSA9IG1lc3Nh
Z2VCdWJibGVFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5fZWRpdG9yLnNldERpdkRlY29yYXRp
b24obXNnLmxpbmUgLSAxLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7CisgICAgICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obXNnLmxpbmUgLSAxLCBtZXNzYWdlQnViYmxlRWxl
bWVudCk7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIgcm93TWVzc2FnZXMgPSB0aGlzLl9yb3dN
ZXNzYWdlc1ttc2cubGluZV07CkBAIC0yNzYsNyArMzI0LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dNZXNz
YWdlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHJvd01lc3NhZ2VzW2ldLmlzRXF1
YWwobXNnLCB0cnVlKSkgewogICAgICAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE1lc3NhZ2VS
ZXBlYXRDb3VudChyb3dNZXNzYWdlc1tpXSwgbXNnLnJlcGVhdERlbHRhKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9lZGl0b3IucmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMwNywzNSAr
MzU0LDUxIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IG1lc3NhZ2VMaW5lRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSht
c2cubWVzc2FnZSkpOwogCiAgICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdlTGluZUVsZW1lbnQg
PSBtZXNzYWdlTGluZUVsZW1lbnQ7Ci0KLSAgICAgICAgdGhpcy5fZWRpdG9yLnJldmFsaWRhdGVE
ZWNvcmF0aW9uc0FuZFBhaW50KCk7CiAgICAgfSwKIAogICAgIF9hZGRFeGlzdGluZ0JyZWFrcG9p
bnRzVG9Tb3VyY2U6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBsZW5ndGggPSB0aGlz
LmJyZWFrcG9pbnRzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJyZWFrcG9pbnRzLmxlbmd0
aDsgKytpKQogICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvU291cmNlKHRoaXMuYnJl
YWtwb2ludHNbaV0pOwogICAgIH0sCiAKICAgICBfYWRkQnJlYWtwb2ludFRvU291cmNlOiBmdW5j
dGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJp
YnV0ZShicmVha3BvaW50LmxpbmUgLSAxLCAiYnJlYWtwb2ludCIsIGJyZWFrcG9pbnQpOworICAg
ICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CisgICAgICAgIGlmIChs
aW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwg
ImJyZWFrcG9pbnQiLCBicmVha3BvaW50KTsKICAgICAgICAgYnJlYWtwb2ludC5zb3VyY2VUZXh0
ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoYnJlYWtwb2ludC5saW5lIC0gMSk7Ci0gICAgICAgIHRo
aXMuX2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7CisgICAgICAgIHRoaXMuX2RyYXdCcmVha3Bv
aW50SW1hZ2VzSWZOZWVkZWQoKTsKKworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnNldENvYWxl
c2NpbmdVcGRhdGUodHJ1ZSk7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsKKyAgICAgICAgaWYgKCFicmVha3Bv
aW50LmVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24o
bGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgIGlmIChi
cmVha3BvaW50LmNvbmRpdGlvbikKKyAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVj
b3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKKyAg
ICAgICAgdGhpcy5fdGV4dFZpZXdlci5zZXRDb2FsZXNjaW5nVXBkYXRlKGZhbHNlKTsKICAgICB9
LAogCiAgICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50
KQogICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShicmVha3Bv
aW50LmxpbmUgLSAxLCAiYnJlYWtwb2ludCIpOwotICAgICAgICB0aGlzLl9lZGl0b3IucGFpbnRM
aW5lTnVtYmVycygpOworICAgICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAt
IDE7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuc2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsK
KyAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJl
YWtwb2ludCIpOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGlu
ZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
cmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQi
KTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIs
ICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOworICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLnNldENvYWxlc2NpbmdVcGRhdGUoZmFsc2UpOwogICAgIH0sCiAKLSAgICBfY29udGV4dE1l
bnU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGV2ZW50KQorICAgIF9jb250ZXh0TWVudTogZnVuY3Rp
b24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0
ZSkKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbGFzc05hbWUgIT09ICJ3ZWJraXQtbGluZS1u
dW1iZXIiKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgcm93ID0gZXZlbnQudGFy
Z2V0LnBhcmVudEVsZW1lbnQ7CiAKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSByb3cubGluZU51
bWJlcjsKICAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0
TWVudSgpOwogCiAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0
dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwpAQCAtMzY0LDEzICs0MjcsMTkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgY29udGV4dE1l
bnUuc2hvdyhldmVudCk7CiAgICAgfSwKIAotICAgIF90b2dnbGVCcmVha3BvaW50OiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBldmVudCkKKyAgICBfbW91c2VEb3duOiBmdW5jdGlvbihldmVudCkKICAg
ICB7CiAgICAgICAgIGlmIChldmVudC5idXR0b24gIT0gMCB8fCBldmVudC5hbHRLZXkgfHwgZXZl
bnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KQogICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSAhPT0gIndlYmtp
dC1saW5lLW51bWJlciIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciByb3cgPSBl
dmVudC50YXJnZXQucGFyZW50RWxlbWVudDsKKworICAgICAgICB2YXIgbGluZU51bWJlciA9IHJv
dy5saW5lTnVtYmVyOworCiAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4dE1vZGVs
LmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwogICAgICAgICBpZiAoYnJl
YWtwb2ludCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5yZW1vdmVC
cmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2lu
dERlbGVnYXRlKGJyZWFrcG9pbnQpOwogICAgICAgICBlbHNlIGlmICh0aGlzLl9hZGRCcmVha3Bv
aW50RGVsZWdhdGUpCiAgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50RGVsZWdhdGUobGlu
ZU51bWJlciArIDEpOwogICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwpAQCAtMzgzLDE0
ICs0NTIsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgZnVuY3Rpb24gY29tbWl0dGVkKGVsZW1lbnQsIG5ld1RleHQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGJyZWFrcG9pbnQuY29uZGl0aW9uID0gbmV3VGV4dDsKLSAgICAgICAgICAgIHRoaXMu
X2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7CiAgICAgICAgICAgICBkaXNtaXNzZWQuY2FsbCh0
aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIGRpc21pc3NlZCgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci5zZXREaXZEZWNvcmF0aW9uKGJyZWFrcG9pbnQu
bGluZSAtIDEsIG51bGwpOworICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNv
cmF0aW9uKGJyZWFrcG9pbnQubGluZSAtIDEsIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOwogICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQ7CisgICAgICAgICAg
ICBkZWxldGUgdGhpcy5fY29uZGl0aW9uRWxlbWVudDsKICAgICAgICAgfQogCiAgICAgICAgIHZh
ciBkaXNtaXNzZWRIYW5kbGVyID0gZGlzbWlzc2VkLmJpbmQodGhpcyk7CkBAIC00MDMsMjMgKzQ3
MiwyMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgX3No
b3dCcmVha3BvaW50Q29uZGl0aW9uUG9wdXA6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewot
ICAgICAgICB2YXIgY29uZGl0aW9uRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNvbmRpdGlvbkVsZW1l
bnQobGluZU51bWJlcik7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zZXREaXZEZWNvcmF0aW9uKGxp
bmVOdW1iZXIgLSAxLCBjb25kaXRpb25FbGVtZW50KTsKKyAgICAgICAgdGhpcy5fY29uZGl0aW9u
RWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNvbmRpdGlvbkVsZW1lbnQobGluZU51bWJlcik7CisgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyIC0gMSwgdGhpcy5f
Y29uZGl0aW9uRWxlbWVudCk7CiAgICAgfSwKIAogICAgIF9jcmVhdGVDb25kaXRpb25FbGVtZW50
OiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgdmFyIGNvbmRpdGlvbkVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgY29uZGl0aW9uRWxl
bWVudC5jbGFzc05hbWUgPSAic291cmNlLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKKyAgICAgICAg
Y29uZGl0aW9uRWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29u
ZGl0aW9uIjsKIAogICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgibGFiZWwiKTsKLSAgICAgICAgbGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2Ut
YnJlYWtwb2ludC1tZXNzYWdlIjsKLSAgICAgICAgbGFiZWxFbGVtZW50Lmh0bWxGb3IgPSAic291
cmNlLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKKyAgICAgICAgbGFiZWxFbGVtZW50LmNsYXNzTmFt
ZSA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1tZXNzYWdlIjsKKyAgICAgICAgbGFiZWxFbGVt
ZW50Lmh0bWxGb3IgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKICAgICAg
ICAgbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiVGhlIGJyZWFrcG9pbnQgb24gbGluZSAlZCB3aWxsIHN0b3Agb25s
eSBpZiB0aGlzIGV4cHJlc3Npb24gaXMgdHJ1ZToiLCBsaW5lTnVtYmVyKSkpOwogICAgICAgICBj
b25kaXRpb25FbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7CiAKICAgICAgICAgdmFy
IGVkaXRvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAg
ICBlZGl0b3JFbGVtZW50LmlkID0gInNvdXJjZS1icmVha3BvaW50LWNvbmRpdGlvbiI7CisgICAg
ICAgIGVkaXRvckVsZW1lbnQuaWQgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9u
IjsKICAgICAgICAgZWRpdG9yRWxlbWVudC5jbGFzc05hbWUgPSAibW9ub3NwYWNlIjsKICAgICAg
ICAgZWRpdG9yRWxlbWVudC50eXBlID0gInRleHQiCiAgICAgICAgIGNvbmRpdGlvbkVsZW1lbnQu
YXBwZW5kQ2hpbGQoZWRpdG9yRWxlbWVudCk7CkBAIC00MzUsOSArNTA0LDggQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKGhhbmRsZXIpIHsKICAg
ICAgICAgICAgIGhhbmRsZXIoZXZlbnQpOwogICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZG9jdW1lbnRLZXlEb3duKGV2ZW50KTsKLSAgICAgICAgfQogICAgIH0sCiAKICAg
ICBfZXZhbFNlbGVjdGlvbkluQ2FsbEZyYW1lOiBmdW5jdGlvbihldmVudCkKQEAgLTQ1OCwxNDYg
KzUyNiwxMzkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgfSk7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQp
CisgICAgcmVzaXplOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9lZGl0b3IucGFp
bnRMaW5lTnVtYmVycygpOworICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikKKyAgICAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIucmVzaXplKCk7CiAgICAgfSwKIAotICAgIHJlc2l6ZTogZnVu
Y3Rpb24oKQorICAgIF9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQ6IGZ1bmN0aW9uKGN0eCwg
Z2xvdykKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0b3IpCi0gICAgICAgICAgICB0aGlz
Ll9lZGl0b3IucmVzaXplKCk7Ci0gICAgfQotfQorICAgICAgICBpZiAoZ2xvdykKKyAgICAgICAg
ICAgIGN0eC5zYXZlKCk7CiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisgICAgICAgIGN0eC5iZWdp
blBhdGgoKTsKKyAgICAgICAgY3R4Lm1vdmVUbygxNywgMik7CisgICAgICAgIGN0eC5saW5lVG8o
MTksIDIpOworICAgICAgICBjdHgubGluZVRvKDE5LCAwKTsKKyAgICAgICAgY3R4LmxpbmVUbygy
MSwgMCk7CisgICAgICAgIGN0eC5saW5lVG8oMjYsIDUuNSk7CisgICAgICAgIGN0eC5saW5lVG8o
MjEsIDExKTsKKyAgICAgICAgY3R4LmxpbmVUbygxOSwgMTEpOworICAgICAgICBjdHgubGluZVRv
KDE5LCA5KTsKKyAgICAgICAgY3R4LmxpbmVUbygxNywgOSk7CisgICAgICAgIGN0eC5jbG9zZVBh
dGgoKTsKKyAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMTQyLCA1LCA0KSI7CiAKLVdlYklu
c3BlY3Rvci5CcmVha3BvaW50TGluZU51bWJlckRlY29yYXRvciA9IGZ1bmN0aW9uKHNvdXJjZUZy
YW1lLCB0ZXh0TW9kZWwpCi17Ci0gICAgdGhpcy5fc291cmNlRnJhbWUgPSBzb3VyY2VGcmFtZTsK
LSAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7Ci19CisgICAgICAgIGlmIChnbG93KSB7
CisgICAgICAgICAgICBjdHguc2hhZG93Qmx1ciA9IDQ7CisgICAgICAgICAgICBjdHguc2hhZG93
Q29sb3IgPSAicmdiKDI1NSwgMjU1LCAyNTUpIjsKKyAgICAgICAgICAgIGN0eC5zaGFkb3dPZmZz
ZXRYID0gLTE7CisgICAgICAgICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDA7CisgICAgICAgIH0K
IAotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRMaW5lTnVtYmVyRGVjb3JhdG9yLnByb3RvdHlwZSA9
IHsKLSAgICBkZWNvcmF0ZTogZnVuY3Rpb24obGluZU51bWJlciwgY3R4LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBsaW5lSGVpZ2h0KQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlz
Ll90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3BvaW50Iik7Ci0gICAg
ICAgIHZhciBpc0V4ZWN1dGlvbkxpbmUgPSBsaW5lTnVtYmVyICsgMSA9PT0gdGhpcy5fc291cmNl
RnJhbWUuX2V4ZWN1dGlvbkxpbmU7Ci0gICAgICAgIGlmIChicmVha3BvaW50IHx8IGlzRXhlY3V0
aW9uTGluZSkgewotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgICAgIGN0eC50cmFu
c2xhdGUoeCArIDQsIHkgKyAyKTsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50V2lkdGggPSB3
aWR0aCAtIDY7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludEhlaWdodCA9IGxpbmVIZWlnaHQg
LSA0OwotICAgIAotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAg
dGhpcy5fcGFpbnRCcmVha3BvaW50KGN0eCwgYnJlYWtwb2ludFdpZHRoLCBicmVha3BvaW50SGVp
Z2h0LCBicmVha3BvaW50KTsKLSAgICAKLSAgICAgICAgICAgIGlmIChpc0V4ZWN1dGlvbkxpbmUp
Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGFpbnRQcm9ncmFtQ291bnRlcihjdHgsIGJyZWFrcG9p
bnRXaWR0aCwgYnJlYWtwb2ludEhlaWdodCwgZmFsc2UpOworICAgICAgICBjdHguZmlsbCgpOwor
ICAgICAgICBjdHguZmlsbCgpOyAvLyBGaWxsIHR3aWNlIHRvIGdldCBhIGdvb2Qgc2hhZG93IGFu
ZCBkYXJrZXIgYW50aS1hbGlhc2VkIHBpeGVscy4KIAorICAgICAgICBpZiAoZ2xvdykKICAgICAg
ICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgICAgIH0KKyAgICB9LAogCi0gICAgICAgIGlmIChp
c0V4ZWN1dGlvbkxpbmUpIHsKLSAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgYmVoYXZp
b3IuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIF9kcmF3UHJvZ3Jh
bUNvdW50ZXJJbWFnZUlmTmVlZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuX25lZWRzUHJvZ3JhbUNvdW50ZXJJbWFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAicHJvZ3Jh
bS1jb3VudGVyIiwgMjYsIDExKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCAyNiwgMTEp
OworICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4LCB0cnVlKTsK
IAotICAgICAgICBjdHguZmlsbFN0eWxlID0gYnJlYWtwb2ludCA/ICJyZ2IoMjU1LDI1NSwyNTUp
IiA6ICJyZ2IoMTU1LDE1NSwxNTUpIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBk
ZWxldGUgdGhpcy5fbmVlZHNQcm9ncmFtQ291bnRlckltYWdlOwogICAgIH0sCiAKLSAgICBfcGFp
bnRCcmVha3BvaW50OiBmdW5jdGlvbihjdHgsIHdpZHRoLCBoZWlnaHQsIGJyZWFrcG9pbnQpCisg
ICAgX2RyYXdCcmVha3BvaW50SW1hZ2VzSWZOZWVkZWQ6IGZ1bmN0aW9uKGNvbmRpdGlvbmFsKQog
ICAgIHsKLSAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICBjdHgubW92ZVRvKDAsIDIp
OwotICAgICAgICBjdHgubGluZVRvKDIsIDApOwotICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0g
NSwgMCk7Ci0gICAgICAgIGN0eC5saW5lVG8od2lkdGgsIGhlaWdodCAvIDIpOwotICAgICAgICBj
dHgubGluZVRvKHdpZHRoIC0gNSwgaGVpZ2h0KTsKLSAgICAgICAgY3R4LmxpbmVUbygyLCBoZWln
aHQpOwotICAgICAgICBjdHgubGluZVRvKDAsIGhlaWdodCAtIDIpOwotICAgICAgICBjdHguY2xv
c2VQYXRoKCk7Ci0gICAgICAgIGN0eC5maWxsU3R5bGUgPSBicmVha3BvaW50LmNvbmRpdGlvbiA/
ICJyZ2IoMjE3LCAxNDIsIDEpIiA6ICJyZ2IoMSwgMTQyLCAyMTcpIjsKLSAgICAgICAgY3R4LnN0
cm9rZVN0eWxlID0gYnJlYWtwb2ludC5jb25kaXRpb24gPyAicmdiKDIwNSwgMTAzLCAwKSIgOiAi
cmdiKDAsIDEwMywgMjA1KSI7Ci0gICAgICAgIGN0eC5saW5lV2lkdGggPSAzOwotICAgICAgICBj
dHguZmlsbCgpOworICAgICAgICBpZiAoIXRoaXMuX25lZWRzQnJlYWtwb2ludEltYWdlcykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmdW5jdGlvbiBkcmF3QnJlYWtwb2ludChjdHgs
IGRpc2FibGVkLCBjb25kaXRpb25hbCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmJlZ2lu
UGF0aCgpOworICAgICAgICAgICAgY3R4Lm1vdmVUbygwLCAyKTsKKyAgICAgICAgICAgIGN0eC5s
aW5lVG8oMiwgMCk7CisgICAgICAgICAgICBjdHgubGluZVRvKDIxLCAwKTsKKyAgICAgICAgICAg
IGN0eC5saW5lVG8oMjYsIDUuNSk7CisgICAgICAgICAgICBjdHgubGluZVRvKDIxLCAxMSk7Cisg
ICAgICAgICAgICBjdHgubGluZVRvKDIsIDExKTsKKyAgICAgICAgICAgIGN0eC5saW5lVG8oMCwg
OSk7CisgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CisgICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gY29uZGl0aW9uYWwgPyAicmdiKDIxNywgMTQyLCAxKSIgOiAicmdiKDEsIDE0MiwgMjE3
KSI7CisgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb25kaXRpb25hbCA/ICJyZ2IoMjA1
LCAxMDMsIDApIiA6ICJyZ2IoMCwgMTAzLCAyMDUpIjsKKyAgICAgICAgICAgIGN0eC5saW5lV2lk
dGggPSAzOworICAgICAgICAgICAgY3R4LmZpbGwoKTsKKyAgICAgICAgICAgIGN0eC5zYXZlKCk7
CisgICAgICAgICAgICBjdHguY2xpcCgpOworICAgICAgICAgICAgY3R4LnN0cm9rZSgpOworICAg
ICAgICAgICAgY3R4LnJlc3RvcmUoKTsKIAotICAgICAgICBjdHguc2F2ZSgpOwotICAgICAgICBj
dHguY2xpcCgpOwotICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgIGN0eC5yZXN0b3JlKCk7
CisgICAgICAgICAgICBpZiAoIWRpc2FibGVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpZiAoIWJyZWFrcG9pbnQuZW5hYmxlZCkgewogICAgICAgICAgICAgY3R4LnNhdmUo
KTsKICAgICAgICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAiZGVzdGluYXRp
b24tb3V0IjsKICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSgwLCAwLCAwLCAwLjUp
IjsKLSAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAyNiwgMTEpOwogICAgICAgICAgICAgY3R4LnJlc3Rv
cmUoKTsKICAgICAgICAgfQotICAgIH0sCiAKLSAgICBfcGFpbnRQcm9ncmFtQ291bnRlcjogZnVu
Y3Rpb24oY3R4LCB3aWR0aCwgaGVpZ2h0KQotICAgIHsKLSAgICAgICAgY3R4LnNhdmUoKTsKIAot
ICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgIGN0eC5tb3ZlVG8od2lkdGggLSA5LCAy
KTsKLSAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCAtIDcsIDIpOwotICAgICAgICBjdHgubGluZVRv
KHdpZHRoIC0gNywgMCk7Ci0gICAgICAgIGN0eC5saW5lVG8od2lkdGggLSA1LCAwKTsKLSAgICAg
ICAgY3R4LmxpbmVUbyh3aWR0aCwgaGVpZ2h0IC8gMik7Ci0gICAgICAgIGN0eC5saW5lVG8od2lk
dGggLSA1LCBoZWlnaHQpOwotICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0gNywgaGVpZ2h0KTsK
LSAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCAtIDcsIGhlaWdodCAtIDIpOwotICAgICAgICBjdHgu
bGluZVRvKHdpZHRoIC0gOSwgaGVpZ2h0IC0gMik7Ci0gICAgICAgIGN0eC5jbG9zZVBhdGgoKTsK
LSAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMTQyLCA1LCA0KSI7CisgICAgICAgIC8vIFVu
Y29uZGl0aW9uYWwgYnJlYWtwb2ludHMuCiAKLSAgICAgICAgY3R4LnNoYWRvd0JsdXIgPSA0Owot
ICAgICAgICBjdHguc2hhZG93Q29sb3IgPSAicmdiKDI1NSwgMjU1LCAyNTUpIjsKLSAgICAgICAg
Y3R4LnNoYWRvd09mZnNldFggPSAtMTsKLSAgICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwOwor
ICAgICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAiYnJl
YWtwb2ludCIsIDI2LCAxMSk7CisgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgMjYsIDExKTsK
KyAgICAgICAgZHJhd0JyZWFrcG9pbnQoY3R4KTsKIAotICAgICAgICBjdHguZmlsbCgpOwotICAg
ICAgICBjdHguZmlsbCgpOyAvLyBGaWxsIHR3aWNlIHRvIGdldCBhIGdvb2Qgc2hhZG93IGFuZCBk
YXJrZXIgYW50aS1hbGlhc2VkIHBpeGVscy4KKyAgICAgICAgdmFyIGN0eCA9IGRvY3VtZW50Lmdl
dENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQtcHJvZ3JhbS1jb3VudGVyIiwgMjYs
IDExKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCAyNiwgMTEpOworICAgICAgICBkcmF3
QnJlYWtwb2ludChjdHgpOworICAgICAgICBjdHguY2xlYXJSZWN0KDIwLCAwLCA2LCAxMSk7Cisg
ICAgICAgIHRoaXMuX2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4dChjdHgsIHRydWUpOwogCi0g
ICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgfSwKKyAgICAgICAgdmFyIGN0eCA9IGRvY3VtZW50
LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQtZGlzYWJsZWQiLCAyNiwgMTEp
OworICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDI2LCAxMSk7CisgICAgICAgIGRyYXdCcmVh
a3BvaW50KGN0eCwgdHJ1ZSk7CiAKLSAgICBtb3VzZURvd246IGZ1bmN0aW9uKGxpbmVOdW1iZXIs
IGUpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5fdG9nZ2xlQnJlYWtwb2ludChs
aW5lTnVtYmVyLCBlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKKyAgICAgICAgdmFy
IGN0eCA9IGRvY3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQtZGlz
YWJsZWQtcHJvZ3JhbS1jb3VudGVyIiwgMjYsIDExKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgw
LCAwLCAyNiwgMTEpOworICAgICAgICBkcmF3QnJlYWtwb2ludChjdHgsIHRydWUpOworICAgICAg
ICBjdHguY2xlYXJSZWN0KDIwLCAwLCA2LCAxMSk7CisgICAgICAgIHRoaXMuX2RyYXdQcm9ncmFt
Q291bnRlckluQ29udGV4dChjdHgsIHRydWUpOwogCi0gICAgY29udGV4dE1lbnU6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIsIGUpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5fY29udGV4
dE1lbnUobGluZU51bWJlciwgZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KIAot
V2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkxpbmVEZWNvcmF0b3IgPSBmdW5jdGlvbihzb3VyY2VGcmFt
ZSkKLXsKLSAgICB0aGlzLl9zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lOwotfQorICAgICAgICAv
LyBDb25kaXRpb25hbCBicmVha3BvaW50cy4KIAotV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkxpbmVE
ZWNvcmF0b3IucHJvdG90eXBlID0gewotICAgIGRlY29yYXRlOiBmdW5jdGlvbihsaW5lTnVtYmVy
LCBjdHgsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGxpbmVIZWlnaHQpCi0gICAgewotICAgICAgICBp
ZiAodGhpcy5fc291cmNlRnJhbWUuX2V4ZWN1dGlvbkxpbmUgIT09IGxpbmVOdW1iZXIgKyAxKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjdHguc2F2ZSgpOwotICAgICAgICBjdHguZmls
bFN0eWxlID0gInJnYigxNzEsIDE5MSwgMjU0KSI7Ci0gICAgICAgIGN0eC5maWxsUmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgCi0gICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAg
ICAgICAgY3R4LnJlY3QoeCAtIDEsIHksIHdpZHRoICsgMiwgaGVpZ2h0KTsKLSAgICAgICAgY3R4
LmNsaXAoKTsKLSAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYig2NCwgMTE1LCAyNDQpIjsK
LSAgICAgICAgY3R4LnN0cm9rZSgpOworICAgICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NT
Q2FudmFzQ29udGV4dCgiMmQiLCAiYnJlYWtwb2ludC1jb25kaXRpb25hbCIsIDI2LCAxMSk7Cisg
ICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgMjYsIDExKTsKKyAgICAgICAgZHJhd0JyZWFrcG9p
bnQoY3R4LCBmYWxzZSwgdHJ1ZSk7CiAKLSAgICAgICAgY3R4LnJlc3RvcmUoKTsKKyAgICAgICAg
dmFyIGN0eCA9IGRvY3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQt
Y29uZGl0aW9uYWwtcHJvZ3JhbS1jb3VudGVyIiwgMjYsIDExKTsKKyAgICAgICAgY3R4LmNsZWFy
UmVjdCgwLCAwLCAyNiwgMTEpOworICAgICAgICBkcmF3QnJlYWtwb2ludChjdHgsIGZhbHNlLCB0
cnVlKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgyMCwgMCwgNiwgMTEpOworICAgICAgICB0aGlz
Ll9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4LCB0cnVlKTsKKworICAgICAgICB2YXIg
Y3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAiYnJlYWtwb2ludC1kaXNh
YmxlZC1jb25kaXRpb25hbCIsIDI2LCAxMSk7CisgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwg
MjYsIDExKTsKKyAgICAgICAgZHJhd0JyZWFrcG9pbnQoY3R4LCB0cnVlLCB0cnVlKTsKKworICAg
ICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAiYnJlYWtw
b2ludC1kaXNhYmxlZC1jb25kaXRpb25hbC1wcm9ncmFtLWNvdW50ZXIiLCAyNiwgMTEpOworICAg
ICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDI2LCAxMSk7CisgICAgICAgIGRyYXdCcmVha3BvaW50
KGN0eCwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGN0eC5jbGVhclJlY3QoMjAsIDAsIDYsIDExKTsK
KyAgICAgICAgdGhpcy5fZHJhd1Byb2dyYW1Db3VudGVySW5Db250ZXh0KGN0eCwgdHJ1ZSk7CisK
KyAgICAgICAgZGVsZXRlIHRoaXMuX25lZWRzQnJlYWtwb2ludEltYWdlczsKICAgICB9CiB9CisK
K1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VW
aWV3LmpzCmluZGV4IDdmYzg0OTkuLmZhODA5MzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VWaWV3LmpzCkBAIC0zMiw3ICszMiw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VW
aWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UpCiAKICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygic291cmNlIik7CiAKLSAgICB0aGlzLnNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZSh0aGlzLmNvbnRlbnRFbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQo
dGhpcykpOworICAgIHRoaXMuc291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lKHRoaXMuY29udGVudEVsZW1lbnQsIHRoaXMuX2FkZEJyZWFrcG9pbnQuYmluZCh0aGlzKSwg
dGhpcy5fcmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKICAgICByZXNvdXJjZS5hZGRFdmVu
dExpc3RlbmVyKCJmaW5pc2hlZCIsIHRoaXMuX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkLCB0aGlz
KTsKICAgICB0aGlzLl9mcmFtZU5lZWRzU2V0dXAgPSB0cnVlOwogfQpAQCAtMTE4LDYgKzExOCwx
MiBAQCBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAg
ICB9LAogCisgICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAg
eworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzKQorICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7
CisgICAgfSwKKwogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBtZXRob2RzIGluIHRoaXMgcHJvdG90
eXBlIG5lZWQgdG8gYmUgZ2VuZXJpYyBlbm91Z2ggdG8gd29yayB3aXRoIGEgU2NyaXB0Vmlldy4K
ICAgICAvLyBUaGUgU2NyaXB0VmlldyBwcm90b3R5cGUgcHVsbHMgdGhlc2UgbWV0aG9kcyBpbnRv
IGl0J3MgcHJvdG90eXBlIHRvIGF2b2lkIGR1cGxpY2F0ZSBjb2RlLgogCkBAIC0xMjUsNyArMTMx
LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAg
ICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CiAgICAgICAgIHRoaXMuX3Nl
YXJjaFJlc3VsdHMgPSBbXTsKLSAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5jbGVhclNlbGVjdGlv
bigpOworICAgICAgICB0aGlzLnNvdXJjZUZyYW1lLmNsZWFyTWFya2VkUmFuZ2UoKTsKICAgICAg
ICAgZGVsZXRlIHRoaXMuX2RlbGF5ZWRGaW5kU2VhcmNoTWF0Y2hlczsKICAgICB9LAogCkBAIC0y
MjUsNyArMjMxLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAoIWZvdW5kUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhp
cy5zb3VyY2VGcmFtZS5zZXRTZWxlY3Rpb24oZm91bmRSYW5nZSk7CisgICAgICAgIHRoaXMuc291
cmNlRnJhbWUubWFya0FuZFJldmVhbFJhbmdlKGZvdW5kUmFuZ2UpOwogICAgIH0sCiAKICAgICBf
c291cmNlRnJhbWVTZXR1cEZpbmlzaGVkOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9UZXh0RWRpdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjY4
MjgwLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9y
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtKQotewotICAgIHRoaXMuX3RleHRNb2Rl
bCA9IHRleHRNb2RlbDsKLSAgICB0aGlzLl90ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlz
Ll90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpOwotICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIodGhpcy5fdGV4dE1vZGVsLCB0aGlzLl9o
aWdobGlnaHRDaGFuZ2VkLmJpbmQodGhpcykpOwotCi0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0
ZXh0LWVkaXRvciBtb25vc3BhY2UiOwotICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0K
LSAgICB0aGlzLl9jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKLSAg
ICB0aGlzLl9jYW52YXMuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNhbnZhcyI7Ci0gICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcyk7Ci0KLSAgICB0aGlzLl9jb250YWlu
ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9jb250YWluZXIu
Y2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNvbnRhaW5lciI7Ci0gICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7Ci0KLSAgICB0aGlzLl9zaGVldCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0
aGlzLl9zaGVldCk7Ci0KLSAgICB2YXIgY3Vyc29yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgIGN1cnNvckVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9y
LWN1cnNvciI7Ci0gICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGN1cnNvckVsZW1lbnQp
OwotICAgIHRoaXMuX2N1cnNvciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEN1cnNvcihjdXJzb3JF
bGVtZW50KTsKLQotICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwi
LCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgdGhpcy5fcmVnaXN0ZXJN
b3VzZUxpc3RlbmVycygpOwotICAgIHRoaXMuX3JlZ2lzdGVyS2V5Ym9hcmRMaXN0ZW5lcnMoKTsK
LSAgICB0aGlzLl9yZWdpc3RlckNsaXBib2FyZExpc3RlbmVycygpOwotCi0gICAgdGhpcy5fZGVz
aXJlZENhcmV0Q29sdW1uID0gMDsKLSAgICB0aGlzLl9zY3JvbGxMZWZ0ID0gMDsKLSAgICB0aGlz
Ll9zY3JvbGxUb3AgPSAwOwotCi0gICAgdGhpcy5fY3R4ID0gdGhpcy5fY2FudmFzLmdldENvbnRl
eHQoIjJkIik7Ci0gICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0U2Vs
ZWN0aW9uTW9kZWwodGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLQotICAgIHRo
aXMuX2lzTWFjID0gcGxhdGZvcm0gJiYgKHBsYXRmb3JtLmluZGV4T2YoIm1hYyIpID09PSAwKTsK
LSAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCA9IDA7Ci0KLSAgICB0aGlzLl9yZWdpc3Rl
clNob3J0Y3V0cygpOwotICAgIC8vIERlYnVnZ2luZyBmbGFncywgYWxsb3cgZGlzYWJsaW5nIC8g
ZW5hYmxpbmcgaGlnaGxpZ2h0cyBhbmQgdHJhY2sgcmVwYWludHMuCi0gICAgdGhpcy5faGlnaGxp
Z2h0aW5nRW5hYmxlZCA9IHRydWU7Ci0gICAgdGhpcy5fZGVidWdNb2RlID0gZmFsc2U7Ci0KLSAg
ICB0aGlzLl90ZXh0V2lkdGggPSAwOwotICAgIHRoaXMuX2xvbmdlc3RMaW5lTnVtYmVyID0gMDsK
LQotICAgIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUgPSBbMF07Ci0gICAgdGhpcy5fcmVhZE9ubHkg
PSBmYWxzZTsKLSAgICB0aGlzLl9zZWxlY3Rpb25Db2xvciA9ICJyZ2IoMTgxLCAyMTMsIDI1NSki
OwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7Ci0gICAgc2V0IHRl
eHQodGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciBsYXN0TGluZSA9IHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50IC0gMTsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVsbCwgdGV4
dCk7Ci0gICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZXNldFVuZG9TdGFjaygpOwotICAgICAgICB0
aGlzLl9zZXRDYXJldExvY2F0aW9uKDAsIDApOwotICAgIH0sCi0KLSAgICBzZXQgbWltZVR5cGUo
bWltZVR5cGUpCi0gICAgewotICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1lVHlwZSA9IG1p
bWVUeXBlOwotICAgIH0sCi0KLSAgICBnZXQgdGV4dE1vZGVsKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl90ZXh0TW9kZWw7Ci0gICAgfSwKLQotICAgIHNldCByZWFkT25seShyZWFkT25s
eSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7Ci0gICAgICAgIGlm
IChyZWFkT25seSkKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0ZXh0
LWVkaXRvci1yZWFkb25seSIpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuZWxlbWVu
dC5yZW1vdmVTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1yZWFkb25seSIpCi0gICAgfSwKLQotICAg
IHNldCBsaW5lTnVtYmVyRGVjb3JhdG9yKGxpbmVOdW1iZXJEZWNvcmF0b3IpCi0gICAgewotICAg
ICAgICB0aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9yID0gbGluZU51bWJlckRlY29yYXRvcjsKLSAg
ICB9LAotCi0gICAgc2V0IGxpbmVEZWNvcmF0b3IobGluZURlY29yYXRvcikKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2xpbmVEZWNvcmF0b3IgPSBsaW5lRGVjb3JhdG9yOwotICAgIH0sCi0KLSAgICBn
ZXQgc2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24ucmFu
Z2UoKTsKLSAgICB9LAotCi0gICAgc2V0U2VsZWN0aW9uOiBmdW5jdGlvbihzdGFydExpbmUsIHN0
YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4pCi0gICAgewotICAgICAgICB2YXIgc3RhcnQg
PSB0aGlzLl9maXQoc3RhcnRMaW5lLCBzdGFydENvbHVtbik7Ci0gICAgICAgIHRoaXMuX3NlbGVj
dGlvbi5zZXRTdGFydChzdGFydC5saW5lLCBzdGFydC5jb2x1bW4pOwotICAgICAgICB0aGlzLl9z
ZXRTZWxlY3Rpb25FbmQoZW5kTGluZSwgZW5kQ29sdW1uKTsKLSAgICB9LAotCi0gICAgc2V0RGl2
RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZWxlbWVudCkKLSAgICB7Ci0gICAgICAg
IHZhciBleGlzdGluZ0VsZW1lbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJkaXYtZGVjb3JhdGlvbiIpOwotICAgICAgICBpZiAoZXhpc3RpbmdFbGVtZW50ICYm
IGV4aXN0aW5nRWxlbWVudC5wYXJlbnROb2RlKQotICAgICAgICAgICAgZXhpc3RpbmdFbGVtZW50
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXhpc3RpbmdFbGVtZW50KTsKLSAgICAgICAgdGhpcy5f
dGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRpb24iKTsK
LQotICAgICAgICBpZiAoZWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKGVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0
ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRpb24iLCBlbGVtZW50KTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7Ci0gICAgfSwKLQotICAg
IF9yZWdpc3Rlck1vdXNlTGlzdGVuZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVu
dS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZXVwIiwgdGhpcy5fbW91c2VVcC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAg
IHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURv
d24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fbW91c2VNb3ZlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5fbW91
c2VPdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLl9kYmxDbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0g
ICAgfSwKLQotICAgIF9yZWdpc3RlcktleWJvYXJkTGlzdGVuZXJzOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX2tleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLl9jb250YWluZXIu
YWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5fdGV4dElucHV0LmJpbmQodGhpcyks
IGZhbHNlKTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyQ2xpcGJvYXJkTGlzdGVuZXJzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigi
YmVmb3JlY29weSIsIHRoaXMuX2JlZm9yZUNvcHkuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAg
ICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsIHRoaXMuX2NvcHkuYmlu
ZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5l
cigiYmVmb3JlY3V0IiwgdGhpcy5fYmVmb3JlQ3V0LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAg
ICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImN1dCIsIHRoaXMuX2N1dC5iaW5k
KHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVy
KCJiZWZvcmVwYXN0ZSIsIHRoaXMuX2JlZm9yZVBhc3RlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInBhc3RlIiwgdGhpcy5fcGFz
dGUuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIH0sCi0KLSAgICBfb2Zmc2V0VG9MaW5lOiBmdW5j
dGlvbihvZmZzZXQpCi0gICAgewotICAgICAgICBpZiAob2Zmc2V0ID4gdGhpcy5fbGluZU9mZnNl
dHNDYWNoZVt0aGlzLl9saW5lT2Zmc2V0c0NhY2hlLmxlbmd0aCAtIDFdKSB7Ci0gICAgICAgICAg
ICAvLyBTZWVraW5nIG91dHNpZGUgY2FjaGVkIGFyZWEuIEZpbGwgdGhlIGNhY2hlLgotICAgICAg
ICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLl9saW5lT2Zmc2V0c0NhY2hlLmxlbmd0aDsKLSAg
ICAgICAgICAgIHdoaWxlIChsaW5lTnVtYmVyIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQg
JiYgdGhpcy5fbGluZVRvT2Zmc2V0KGxpbmVOdW1iZXIpIDwgb2Zmc2V0KQotICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAgIHJldHVybiBsaW5lTnVtYmVyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQmlzZWN0LgotICAgICAgICB2YXIgZnJvbSA9IDA7Ci0gICAgICAg
IHZhciB0byA9IHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUubGVuZ3RoOwotICAgICAgICB3aGlsZSAo
dG8gPiBmcm9tICsgMSkgewotICAgICAgICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGZyb20g
KyB0bykgLyAyKTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9saW5lT2Zmc2V0c0NhY2hlW21pZF0g
PiBvZmZzZXQpCi0gICAgICAgICAgICAgICAgdG8gPSBtaWQ7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZnJvbSA9IG1pZDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG87
Ci0gICAgfSwKLQotICAgIF9saW5lVG9PZmZzZXQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAg
ewotICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lTnVtYmVy
XTsKLSAgICAgICAgaWYgKG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAg
ICAgIGZvciAodmFyIGxpbmUgPSBsaW5lTnVtYmVyOyBsaW5lID4gMDsgLS1saW5lKSB7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lXSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBvZmZzZXQgPSB0aGlzLl9saW5lT2Zmc2V0c0Nh
Y2hlW2xpbmVdOwotICAgICAgICBmb3IgKHZhciBpID0gbGluZSArIDE7IGkgPD0gbGluZU51bWJl
cjsgKytpKSB7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fbGluZUhlaWdodChpIC0gMSk7
Ci0gICAgICAgICAgICB0aGlzLl9saW5lT2Zmc2V0c0NhY2hlW2ldID0gb2Zmc2V0OwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgfSwKLQotICAgIF9saW5lSGVpZ2h0OiBm
dW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8gVXNlIGNhY2hlZCB2YWx1ZSBm
aXJzdC4KLSAgICAgICAgaWYgKHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGluZU51bWJlciArIDFd
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGluZU51bWJlciAr
IDFdIC0gdGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lTnVtYmVyXTsKLQotICAgICAgICB2YXIg
ZWxlbWVudCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRpdi1k
ZWNvcmF0aW9uIik7Ci0gICAgICAgIGlmIChlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIDIg
KiB0aGlzLl90ZXh0TGluZUhlaWdodCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0OwotICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dExpbmVIZWlnaHQ7Ci0gICAgfSwKLQotICAgIHJldmVhbDogZnVuY3Rp
b24obGluZSwgY29sdW1uKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2Nyb2xsVG9wID0gdGhpcy5f
Y29udGFpbmVyLnNjcm9sbFRvcDsKLSAgICAgICAgdGhpcy5fc2Nyb2xsTGVmdCA9IHRoaXMuX2Nv
bnRhaW5lci5zY3JvbGxMZWZ0OwotCi0gICAgICAgIHZhciBtYXhTY3JvbGxUb3AgPSB0aGlzLl9s
aW5lVG9PZmZzZXQobGluZSk7Ci0gICAgICAgIHZhciBtaW5TY3JvbGxUb3AgPSBtYXhTY3JvbGxU
b3AgKyB0aGlzLl9saW5lSGVpZ2h0KGxpbmUpIC0gdGhpcy5fY2FudmFzLmhlaWdodDsKLSAgICAg
ICAgaWYgKHRoaXMuX3Njcm9sbFRvcCA+IG1heFNjcm9sbFRvcCkKLSAgICAgICAgICAgIHRoaXMu
X2NvbnRhaW5lci5zY3JvbGxUb3AgPSBtYXhTY3JvbGxUb3AgLSB0aGlzLl90ZXh0TGluZUhlaWdo
dCAqIDI7Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMuX3Njcm9sbFRvcCA8IG1pblNjcm9sbFRvcCkK
LSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3AgPSBtaW5TY3JvbGxUb3AgKyB0
aGlzLl90ZXh0TGluZUhlaWdodCAqIDI7Ci0KLSAgICAgICAgdmFyIGZpcnN0Q29sdW1uID0gdGhp
cy5fY29sdW1uRm9yT2Zmc2V0KGxpbmUsIHRoaXMuX3Njcm9sbExlZnQpOwotICAgICAgICB2YXIg
bWF4U2Nyb2xsTGVmdCA9IHRoaXMuX2NvbHVtblRvT2Zmc2V0KGxpbmUsIGNvbHVtbik7Ci0gICAg
ICAgIHZhciBtaW5TY3JvbGxMZWZ0ID0gbWF4U2Nyb2xsTGVmdCAtIHRoaXMuX2NvbnRhaW5lci5j
bGllbnRXaWR0aCArIHRoaXMuX2xpbmVOdW1iZXJXaWR0aDsKLSAgICAgICAgaWYgKHRoaXMuX3Nj
cm9sbExlZnQgPCBtaW5TY3JvbGxMZWZ0KQotICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnNj
cm9sbExlZnQgPSBtaW5TY3JvbGxMZWZ0ICsgMTAwOwotICAgICAgICBlbHNlIGlmICh0aGlzLl9z
Y3JvbGxMZWZ0ID4gbWF4U2Nyb2xsTGVmdCkKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5z
Y3JvbGxMZWZ0ID0gbWF4U2Nyb2xsTGVmdDsKLSAgICAgICAgZWxzZSBpZiAobWluU2Nyb2xsTGVm
dCA8IDAgJiYgbWF4U2Nyb2xsTGVmdCA+IDApCi0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIu
c2Nyb2xsTGVmdCA9IDA7Ci0gICAgfSwKLQotICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwg
bGlzdGVuZXIKLSAgICBfdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwg
b2xkVGV4dCwgbmV3VGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChuZXdSYW5nZS5saW5lc0NvdW50
ID09IG9sZFJhbmdlLmxpbmVzQ291bnQpCi0gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlTGlu
ZXMobmV3UmFuZ2Uuc3RhcnRMaW5lLCBuZXdSYW5nZS5lbmRMaW5lICsgMSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIC8vIExpbmVzIHNoaWZ0ZWQsIGludmFsaWRhdGUgYWxsIHVuZGVyIHN0
YXJ0IGxpbmUuIEFsc28gY2xlYXIgbGluZXMgdGhhdCBub3cgYXJlIG91dHNpZGUgbW9kZWwgcmFu
Z2UuCi0gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlTGluZXMobmV3UmFuZ2Uuc3RhcnRMaW5l
LCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCArIE1hdGgubWF4KDAsIG9sZFJhbmdlLmVuZExp
bmUgLSBuZXdSYW5nZS5lbmRMaW5lKSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodGlu
Z0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBNYXRoLm1pbih0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgdGhpcy5fb2Zmc2V0VG9MaW5lKHRoaXMuX3Njcm9s
bFRvcCArIHRoaXMuX2NhbnZhcy5oZWlnaHQpICsgMSk7Ci0gICAgICAgICAgICB0aGlzLl9oaWdo
bGlnaHRlci51cGRhdGVIaWdobGlnaHQobmV3UmFuZ2Uuc3RhcnRMaW5lLCBsYXN0VmlzaWJsZUxp
bmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlUHJlZmVycmVkU2l6ZShuZXdS
YW5nZS5zdGFydExpbmUsIE1hdGgubWF4KG5ld1JhbmdlLmVuZExpbmUsIG9sZFJhbmdlLmVuZExp
bmUpKTsKLSAgICAgICAgaWYgKG9sZFJhbmdlLmxpbmVzQ291bnQgIT09IG5ld1JhbmdlLmxpbmVz
Q291bnQpIHsKLSAgICAgICAgICAgIC8vIEludmFsaWRhdGUgb2Zmc2V0IGNhY2hlLgotICAgICAg
ICAgICAgdGhpcy5fbGluZU9mZnNldHNDYWNoZS5sZW5ndGggPSBvbGRSYW5nZS5zdGFydExpbmUg
KyAxOwotICAgICAgICAgICAgLy8gRm9yY2UgbGluZW51bWJlciBjYWNoZSB0byBiZSBjb250aW51
b3VzLgotICAgICAgICAgICAgdGhpcy5fbGluZVRvT2Zmc2V0KG9sZFJhbmdlLnN0YXJ0TGluZSk7
Ci0gICAgICAgICAgICB0aGlzLnBhaW50TGluZU51bWJlcnMoKTsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLl9wYWludCgpOwotICAgIH0sCi0KLSAgICAvLyBXZWJJbnNwZWN0b3IuVGV4dFNlbGVj
dGlvbk1vZGVsIGxpc3RlbmVyCi0gICAgX3NlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJh
bmdlLCBuZXdSYW5nZSkKLSAgICB7Ci0gICAgICAgIGlmIChvbGRSYW5nZS5pc0VtcHR5KCkgJiYg
bmV3UmFuZ2UuaXNFbXB0eSgpICYmIG9sZFJhbmdlLnN0YXJ0TGluZSA9PT0gbmV3UmFuZ2Uuc3Rh
cnRMaW5lKSB7Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIHJlcGFpbnQuCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9pbnZhbGlkYXRlTGluZXMob2xk
UmFuZ2Uuc3RhcnRMaW5lLCBvbGRSYW5nZS5lbmRMaW5lICsgMSk7Ci0gICAgICAgIHRoaXMuX2lu
dmFsaWRhdGVMaW5lcyhuZXdSYW5nZS5zdGFydExpbmUsIG5ld1JhbmdlLmVuZExpbmUgKyAxKTsK
LSAgICAgICAgdGhpcy5fcGFpbnQoKTsKLSAgICB9LAotCi0gICAgX2hpZ2hsaWdodENoYW5nZWQ6
IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbXV0
ZUhpZ2hsaWdodExpc3RlbmVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
X2ludmFsaWRhdGVMaW5lcyhmcm9tTGluZSwgdG9MaW5lKTsKLSAgICAgICAgdGhpcy5fcGFpbnQo
KTsKLSAgICB9LAotCi0gICAgcmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsKLSAgICAg
ICAgdGhpcy5fbGluZU9mZnNldHNDYWNoZSA9IFswXTsKLSAgICAgICAgdGhpcy5fdXBkYXRlUHJl
ZmVycmVkU2l6ZSgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7Ci0gICAgICAgIHRoaXMu
cmVwYWludEFsbCgpOwotICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUoZmFsc2UpOwot
ICAgIH0sCi0KLSAgICBfdXBkYXRlUHJlZmVycmVkU2l6ZTogZnVuY3Rpb24oc3RhcnRMaW5lLCBl
bmRMaW5lKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3R4LmZvbnQgPSB0aGlzLl9mb250OwotICAg
ICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHZhciBndWFyZGVk
RW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRMaW5lICsg
MSk7Ci0gICAgICAgIHZhciBuZXdNYXhpbXVtID0gZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGkg
PSBzdGFydExpbmU7IGkgPCBndWFyZGVkRW5kTGluZTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
bGluZVdpZHRoID0gdGhpcy5fY3R4Lm1lYXN1cmVUZXh0KHRoaXMuX3RleHRNb2RlbC5saW5lKGkp
KS53aWR0aDsKLSAgICAgICAgICAgIGlmIChsaW5lV2lkdGggPiB0aGlzLl90ZXh0V2lkdGgpIHsK
LSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0V2lkdGggPSBsaW5lV2lkdGg7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fbG9uZ2VzdExpbmVOdW1iZXIgPSBpOwotICAgICAgICAgICAgICAgIG5ld01h
eGltdW0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFu
ZXdNYXhpbXVtICYmIHN0YXJ0TGluZSA8PSB0aGlzLl9sb25nZXN0TGluZU51bWJlciAmJiB0aGlz
Ll9sb25nZXN0TGluZU51bWJlciA8PSBlbmRMaW5lKSB7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0
V2lkdGggPSAwOwotICAgICAgICAgICAgdGhpcy5fbG9uZ2VzdExpbmVOdW1iZXIgPSAwOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuX2N0eC5tZWFzdXJl
VGV4dCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSkud2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYg
KGxpbmVXaWR0aCA+IHRoaXMuX3RleHRXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90ZXh0V2lkdGggPSBsaW5lV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdl
c3RMaW5lTnVtYmVyID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgbmV3TGluZU51bWJlckRpZ2l0cyA9IHRoaXMuX2RlY2ltYWxE
aWdpdHModGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpOwotICAgICAgICB0aGlzLl9saW5lTnVt
YmVyV2lkdGggPSAobmV3TGluZU51bWJlckRpZ2l0cyArIDIpICogdGhpcy5fZGlnaXRXaWR0aDsK
LSAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQgPSB0aGlzLl9saW5lTnVtYmVyV2lk
dGggKyAicHgiOwotCi0gICAgICAgIHZhciBuZXdXaWR0aCA9IHRoaXMuX3RleHRXaWR0aCArICJw
eCI7Ci0gICAgICAgIHZhciBuZXdIZWlnaHQgPSB0aGlzLl9saW5lVG9PZmZzZXQodGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpICsgInB4IjsKLSAgICAgICAgdGhpcy5fc2hlZXQuc3R5bGUud2lk
dGggPSBuZXdXaWR0aDsKLSAgICAgICAgdGhpcy5fc2hlZXQuc3R5bGUuaGVpZ2h0ID0gbmV3SGVp
Z2h0OwotCi0gICAgICAgIGlmIChuZXdMaW5lTnVtYmVyRGlnaXRzICE9PSB0aGlzLl9saW5lTnVt
YmVyRGlnaXRzKSB7Ci0gICAgICAgICAgICB0aGlzLl9saW5lTnVtYmVyRGlnaXRzID0gbmV3TGlu
ZU51bWJlckRpZ2l0czsKLSAgICAgICAgICAgIHRoaXMucmVwYWludEFsbCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQ2hhbmdlcyB0byBzaXplIGNhbiBjaGFuZ2UgdGhlIGNsaWVudCBhcmVh
IChzY3JvbGxlcnMgY2FuIGFwcGVhci9kaXNhcHBlYXIpCi0gICAgICAgIHRoaXMucmVzaXplKCk7
Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7Ci0gICAgfSwKLQotICAg
IHJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NhbnZhcy53aWR0
aCAhPT0gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IHRoaXMuX2NhbnZhcy5oZWlnaHQg
IT09IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQpIHsKLSAgICAgICAgICAgIHRoaXMuX2Nh
bnZhcy53aWR0aCA9IHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCArIHRoaXMuX2xpbmVOdW1i
ZXJXaWR0aDsKLSAgICAgICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSB0aGlzLl9jb250YWlu
ZXIuY2xpZW50SGVpZ2h0OwotICAgICAgICAgICAgdGhpcy5yZXBhaW50QWxsKCk7Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgcmVwYWludEFsbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5faW52YWxpZGF0ZUxpbmVzKDAsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKLSAg
ICAgICAgdGhpcy5fcGFpbnQoKTsKLSAgICB9LAotCi0gICAgX2ludmFsaWRhdGVMaW5lczogZnVu
Y3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9kYW1h
Z2UpCi0gICAgICAgICAgICB0aGlzLl9kYW1hZ2UgPSBbIHsgc3RhcnRMaW5lOiBzdGFydExpbmUs
IGVuZExpbmU6IGVuZExpbmUgfSBdOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fZGFtYWdlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNodW5rID0gdGhpcy5fZGFtYWdlW2ldOwotICAgICAgICAgICAgICAgIGlmIChjaHVu
ay5zdGFydExpbmUgPD0gZW5kTGluZSAmJiBjaHVuay5lbmRMaW5lID49IHN0YXJ0TGluZSkgewot
ICAgICAgICAgICAgICAgICAgICBjaHVuay5zdGFydExpbmUgPSBNYXRoLm1pbihjaHVuay5zdGFy
dExpbmUsIHN0YXJ0TGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rLmVuZExpbmUgPSBN
YXRoLm1heChjaHVuay5lbmRMaW5lLCBlbmRMaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMu
X2RhbWFnZS5wdXNoKHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVuZExpbmU6IGVuZExpbmUgfSk7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3BhaW50OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9zY3JvbGxUb3AgPSB0aGlzLl9jb250YWluZXIuc2Nyb2xsVG9wOwotICAgICAg
ICB0aGlzLl9zY3JvbGxMZWZ0ID0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQ7Ci0KLSAgICAg
ICAgaWYgKHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURpdkRlY29yYXRpb25zKCk7Ci0KLSAgICAgICAgdGhpcy5w
YWludExpbmVOdW1iZXJzKCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX2RhbWFn
ZSAmJiBpIDwgdGhpcy5fZGFtYWdlLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fcGFp
bnRMaW5lcyh0aGlzLl9kYW1hZ2VbaV0uc3RhcnRMaW5lLCB0aGlzLl9kYW1hZ2VbaV0uZW5kTGlu
ZSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9kYW1hZ2U7Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRl
Q3Vyc29yKHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lLCB0aGlzLl9zZWxlY3Rpb24uZW5kQ29sdW1u
KTsKLSAgICB9LAotCi0gICAgX3BhaW50TGluZXM6IGZ1bmN0aW9uKGZpcnN0TGluZSwgbGFzdExp
bmUpCi0gICAgewotICAgICAgICB0aGlzLl9jdHguZm9udCA9IHRoaXMuX2ZvbnQ7Ci0gICAgICAg
IHRoaXMuX2N0eC50ZXh0QmFzZWxpbmUgPSAiYm90dG9tIjsKLQotICAgICAgICBmaXJzdExpbmUg
PSBNYXRoLm1heChmaXJzdExpbmUsIHRoaXMuX29mZnNldFRvTGluZSh0aGlzLl9zY3JvbGxUb3Ap
IC0gMSk7Ci0gICAgICAgIGxhc3RMaW5lID0gTWF0aC5taW4obGFzdExpbmUsIHRoaXMuX29mZnNl
dFRvTGluZSh0aGlzLl9zY3JvbGxUb3AgKyB0aGlzLl9jYW52YXMuaGVpZ2h0KSArIDEpOwotICAg
ICAgICBpZiAoZmlyc3RMaW5lID4gbGFzdExpbmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxv
ZygiUmVwYWludCAlZDolZCIsIGZpcnN0TGluZSwgbGFzdExpbmUpOwotICAgICAgICAgICAgdGhp
cy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDI1NSwwKSI7Ci0gICAgICAgICAgICB2YXIgZnJv
bU9mZnNldCA9IHRoaXMuX2xpbmVUb09mZnNldChmaXJzdExpbmUpOwotICAgICAgICAgICAgdmFy
IHRvT2Zmc2V0ID0gdGhpcy5fbGluZVRvT2Zmc2V0KGxhc3RMaW5lKTsKLSAgICAgICAgICAgIHRo
aXMuX2N0eC5maWxsUmVjdCh0aGlzLl9saW5lTnVtYmVyV2lkdGggLSAxLCBmcm9tT2Zmc2V0IC0g
dGhpcy5fc2Nyb2xsVG9wLCB0aGlzLl9jYW52YXMud2lkdGggLSB0aGlzLl9saW5lTnVtYmVyV2lk
dGggKyAxLCB0b09mZnNldCAtIGZyb21PZmZzZXQpOwotICAgICAgICAgICAgc2V0VGltZW91dCh0
aGlzLl9wYWludExpbmVzQ29udGludWF0aW9uLmJpbmQodGhpcywgZmlyc3RMaW5lLCBsYXN0TGlu
ZSksIDEwMCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lc0Nv
bnRpbnVhdGlvbihmaXJzdExpbmUsIGxhc3RMaW5lKTsKLSAgICB9LAotCi0gICAgX3BhaW50TGlu
ZXNDb250aW51YXRpb246IGZ1bmN0aW9uKGZpcnN0TGluZSwgbGFzdExpbmUpIHsKLSAgICAgICAg
Ly8gQ2xpcCBlZGl0b3IgYXJlYS4KLSAgICAgICAgdGhpcy5fY3R4LnNhdmUoKTsKLSAgICAgICAg
dGhpcy5fY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICB0aGlzLl9jdHgucmVjdCh0aGlzLl9saW5l
TnVtYmVyV2lkdGggLSAxLCAwLCB0aGlzLl9jYW52YXMud2lkdGggLSB0aGlzLl9saW5lTnVtYmVy
V2lkdGggKyAxLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKLSAgICAgICAgdGhpcy5fY3R4LmNsaXAo
KTsKLQotICAgICAgICAvLyBGaXJzdCBjbGVhciB0aGUgcmVnaW9uLCB0aGVuIHVwZGF0ZSBsYXN0
IGxpbmUgdG8gZml0IG1vZGVsICh0aGlzIGNsZWFycyByZW1vdmVkIGxpbmVzIGZyb20gdGhlIGVu
ZCBvZiB0aGUgZG9jdW1lbnQpLgotICAgICAgICB2YXIgZnJvbU9mZnNldCA9IHRoaXMuX2xpbmVU
b09mZnNldChmaXJzdExpbmUpOwotICAgICAgICB2YXIgdG9PZmZzZXQgPSBsYXN0TGluZSA8IHRo
aXMuX3RleHRNb2RlbC5saW5lc0NvdW50ID8gdGhpcy5fbGluZVRvT2Zmc2V0KGxhc3RMaW5lKSA6
IHRoaXMuX2NhbnZhcy5oZWlnaHQgKyB0aGlzLl9zY3JvbGxUb3A7Ci0KLSAgICAgICAgLy8gRG8g
bm90IGNsZWFyIHJlZ2lvbiB3aGVuIHBhaW50Q3VycmVudExpbmUgaXMgbGlrZWx5IHRvIGRvIGFs
bCB0aGUgbmVjZXNzYXJ5IHdvcmsuCi0gICAgICAgIGlmICh0aGlzLl9yZWFkT25seSB8fCBmaXJz
dExpbmUgKyAxICE9IGxhc3RMaW5lIHx8IHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lICE9IGZpcnN0
TGluZSkgewotICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDI1NSwy
NTUpIjsKLSAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsUmVjdCgwLCBmcm9tT2Zmc2V0IC0gdGhp
cy5fc2Nyb2xsVG9wLCB0aGlzLl9jYW52YXMud2lkdGgsIHRvT2Zmc2V0IC0gZnJvbU9mZnNldCk7
Ci0gICAgICAgIH0KLSAgICAgICAgbGFzdExpbmUgPSBNYXRoLm1pbihsYXN0TGluZSwgdGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQpOwotCi0gICAgICAgIC8vIFBhaW50IGN1cnJlbnQgbGluZSBm
b3IgZWRpdGFibGUgbW9kZSBvbmx5LgotICAgICAgICBpZiAoIXRoaXMuX3JlYWRPbmx5ICYmIHRo
aXMuX3NlbGVjdGlvbi5zdGFydExpbmUgPT09IHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lICYmIGZp
cnN0TGluZSA8PSB0aGlzLl9zZWxlY3Rpb24uc3RhcnRMaW5lICYmIHRoaXMuX3NlbGVjdGlvbi5z
dGFydExpbmUgPCBsYXN0TGluZSkKLSAgICAgICAgICAgIHRoaXMuX3BhaW50Q3VycmVudExpbmUo
dGhpcy5fc2VsZWN0aW9uLnN0YXJ0TGluZSk7Ci0KLSAgICAgICAgdGhpcy5fcGFpbnRTZWxlY3Rp
b24oZmlyc3RMaW5lLCBsYXN0TGluZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodGlu
Z0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lciA9IHRy
dWU7Ci0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5oaWdobGlnaHQobGFzdExpbmUpOwot
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcjsKLSAgICAgICAg
fQotICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RMaW5lOyBpIDwgbGFzdExpbmU7ICsraSkgewot
ICAgICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSB0aGlzLl9saW5lVG9PZmZzZXQoaSkgLSB0aGlz
Ll9zY3JvbGxUb3A7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9saW5lRGVjb3JhdG9yKQotICAg
ICAgICAgICAgICAgIHRoaXMuX2xpbmVEZWNvcmF0b3IuZGVjb3JhdGUoaSwgdGhpcy5fY3R4LCB0
aGlzLl9saW5lTnVtYmVyV2lkdGggLSAxLCBsaW5lT2Zmc2V0LCB0aGlzLl9jYW52YXMud2lkdGgg
LSB0aGlzLl9saW5lTnVtYmVyV2lkdGggKyAxLCB0aGlzLl9saW5lSGVpZ2h0KGkpLCB0aGlzLl90
ZXh0TGluZUhlaWdodCk7Ci0KLSAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fdGV4dE1v
ZGVsLmdldEF0dHJpYnV0ZShpLCAiZGl2LWRlY29yYXRpb24iKTsKLSAgICAgICAgICAgIGlmIChl
bGVtZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uRGl2RGVjb3JhdGlvbihpLCBl
bGVtZW50LCB0cnVlKTsKLQotICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGksIGxpbmVPZmZz
ZXQpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2N0eC5yZXN0b3JlKCk7Ci0gICAgfSwKLQot
ICAgIF9wYWludExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGxpbmVPZmZzZXQpCi0gICAgewot
ICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwotICAg
ICAgICBpZiAoIXRoaXMuX2hpZ2hsaWdodGluZ0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHRoaXMu
X2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCwwKSI7Ci0gICAgICAgICAgICB0aGlzLl9jdHguZmls
bFRleHQobGluZSwgdGhpcy5fbGluZU51bWJlcldpZHRoIC0gdGhpcy5fc2Nyb2xsTGVmdCwgbGlu
ZU9mZnNldCArIHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IDEwMDApIHsKLSAgICAgICAgICAg
IC8vIE9wdGltaXphdGlvbjogbm8gbmVlZCB0byBwYWludCBkZWNvcmF0aW9ucyBvdXRzaWRlIHZp
c2libGUgYXJlYS4KLSAgICAgICAgICAgIHZhciBmaXJzdENvbHVtbiA9IHRoaXMuX2NvbHVtbkZv
ck9mZnNldChsaW5lTnVtYmVyLCB0aGlzLl9zY3JvbGxMZWZ0KTsKLSAgICAgICAgICAgIHZhciBs
YXN0Q29sdW1uID0gdGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIHRoaXMuX3Njcm9s
bExlZnQgKyB0aGlzLl9jYW52YXMud2lkdGgpOwotICAgICAgICB9Ci0gICAgICAgIHZhciBoaWdo
bGlnaHRlclN0YXRlID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAi
aGlnaGxpZ2h0ZXItc3RhdGUiKTsKLSAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0gLTE7Ci0g
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7Ci0gICAgICAgICAgICB2
YXIgYXR0cmlidXRlID0gaGlnaGxpZ2h0ZXJTdGF0ZSAmJiBoaWdobGlnaHRlclN0YXRlLmF0dHJp
YnV0ZXNbal07Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlICYmIGZpcnN0Q29sdW1uICYmIGog
KyBhdHRyaWJ1dGUubGVuZ3RoIDwgZmlyc3RDb2x1bW4pIHsKLSAgICAgICAgICAgICAgICBqICs9
IGF0dHJpYnV0ZS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlICYmIGxhc3RDb2x1bW4gJiYgaiA+IGxhc3RD
b2x1bW4pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIWF0dHJpYnV0
ZSB8fCAhYXR0cmlidXRlLnN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0
YXJ0ID09PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBqOwotICAg
ICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
dHguZmlsbFN0eWxlID0gInJnYigwLDAsMCkiOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
dHguZmlsbFRleHQobGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopLCB0aGlzLl9saW5l
TnVtYmVyV2lkdGggLSB0aGlzLl9zY3JvbGxMZWZ0ICsgdGhpcy5fY29sdW1uVG9PZmZzZXQobGlu
ZU51bWJlciwgcGxhaW5UZXh0U3RhcnQpLCBsaW5lT2Zmc2V0ICsgdGhpcy5fdGV4dExpbmVIZWln
aHQpOwotICAgICAgICAgICAgICAgICAgICBwbGFpblRleHRTdGFydCA9IC0xOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gYXR0cmlidXRl
LnN0eWxlOwotICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmlu
ZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0aCksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMu
X3Njcm9sbExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBqKSwgbGluZU9m
ZnNldCArIHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBqICs9IGF0dHJp
YnV0ZS5sZW5ndGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBsYWlu
VGV4dFN0YXJ0ICE9PSAtMSkgewotICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJy
Z2IoMCwwLDApIjsKLSAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmlu
ZyhwbGFpblRleHRTdGFydCwgaiksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9s
bExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBwbGFpblRleHRTdGFydCks
IGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgcGFpbnRMaW5lTnVtYmVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
Y3R4LmZvbnQgPSB0aGlzLl9mb250OwotICAgICAgICB0aGlzLl9jdHgudGV4dEJhc2VsaW5lID0g
ImJvdHRvbSI7Ci0KLSAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDI1NSwy
NTUpIjsKLSAgICAgICAgdGhpcy5fY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuX2xpbmVOdW1iZXJX
aWR0aCAtIDIsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwotCi0gICAgICAgIHRoaXMuX2N0eC5maWxs
U3R5bGUgPSAicmdiKDIzNSwyMzUsMjM1KSI7Ci0gICAgICAgIHRoaXMuX2N0eC5maWxsUmVjdCh0
aGlzLl9saW5lTnVtYmVyV2lkdGggLSAyLCAwLCAxLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKLQot
ICAgICAgICB2YXIgZmlyc3RMaW5lID0gTWF0aC5tYXgoMCwgdGhpcy5fb2Zmc2V0VG9MaW5lKHRo
aXMuX3Njcm9sbFRvcCkgLSAxKTsKLSAgICAgICAgdmFyIGxhc3RMaW5lID0gTWF0aC5taW4odGhp
cy5fdGV4dE1vZGVsLmxpbmVzQ291bnQsIHRoaXMuX29mZnNldFRvTGluZSh0aGlzLl9zY3JvbGxU
b3AgKyB0aGlzLl9jYW52YXMuaGVpZ2h0KSArIDEpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSBm
aXJzdExpbmU7IGkgPCBsYXN0TGluZTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZU9mZnNl
dCA9IHRoaXMuX2xpbmVUb09mZnNldChpKSAtIHRoaXMuX3Njcm9sbFRvcDsKLSAgICAgICAgICAg
IHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDE1NSwxNTUsMTU1KSI7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5fbGluZU51bWJlckRlY29yYXRvciAmJiB0aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9y
LmRlY29yYXRlKGksIHRoaXMuX2N0eCwgMCwgbGluZU9mZnNldCwgdGhpcy5fbGluZU51bWJlcldp
ZHRoLCB0aGlzLl9saW5lSGVpZ2h0KGkpLCB0aGlzLl90ZXh0TGluZUhlaWdodCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aGlzLl9jdHguZmlsbFRleHQoaSArIDEs
ICh0aGlzLl9saW5lTnVtYmVyRGlnaXRzIC0gdGhpcy5fZGVjaW1hbERpZ2l0cyhpICsgMSkgKyAx
KSAqIHRoaXMuX2RpZ2l0V2lkdGgsIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3BhaW50Q3VycmVudExpbmU6IGZ1bmN0aW9uKGxp
bmUpCi0gICAgewotICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gInJnYigyMzIsIDI0Miwg
MjU0KSI7Ci0gICAgICAgIHRoaXMuX2N0eC5maWxsUmVjdCgwLCB0aGlzLl9saW5lVG9PZmZzZXQo
bGluZSkgLSB0aGlzLl9zY3JvbGxUb3AsIHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fbGluZUhl
aWdodChsaW5lKSk7Ci0gICAgfSwKLQotICAgIF9zY3JvbGw6IGZ1bmN0aW9uKGUpCi0gICAgewot
ICAgICAgICAvLyBIaWRlIGRpdi1iYXNlZCBjdXJzb3IgZmlyc3QuCi0gICAgICAgIHRoaXMuX2N1
cnNvci5fY3Vyc29yRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgICBzZXRU
aW1lb3V0KHRoaXMuX3JlcGFpbnRPblNjcm9sbC5iaW5kKHRoaXMpLCAxMCk7Ci0gICAgfSwKLQot
ICAgIF9yZXBhaW50T25TY3JvbGw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9zY3JvbGxUb3AgIT09IHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3AgfHwgdGhpcy5fc2Nyb2xs
TGVmdCAhPT0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQpIHsKLSAgICAgICAgICAgIHRoaXMu
X3Njcm9sbFRvcCA9IHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3A7Ci0gICAgICAgICAgICB0aGlz
Ll9zY3JvbGxMZWZ0ID0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQ7Ci0gICAgICAgICAgICB0
aGlzLnJlcGFpbnRBbGwoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfbW91c2VVcDogZnVu
Y3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lzRHJhZ2dpbmcgPSBmYWxzZTsKLSAgICB9
LAotCi0gICAgX21vdXNlRG93bjogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmIChlLmJ1
dHRvbiA9PT0gMiB8fCAodGhpcy5faXNNYWMgJiYgZS5jdHJsS2V5KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9jYXJldEZvck1vdXNlRXZlbnQo
ZSk7Ci0KLSAgICAgICAgaWYgKGUudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnQgJiYgdGhpcy5fbGlu
ZU51bWJlckRlY29yYXRvcikgewotICAgICAgICAgICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJEZWNv
cmF0b3IubW91c2VEb3duKGxvY2F0aW9uLmxpbmUsIGUpKSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlLnNoaWZ0S2V5KQotICAg
ICAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uRW5kKGxvY2F0aW9uLmxpbmUsIGxvY2F0aW9uLmNv
bHVtbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3NldENhcmV0TG9jYXRpb24o
bG9jYXRpb24ubGluZSwgbG9jYXRpb24uY29sdW1uKTsKLSAgICAgICAgdGhpcy5faXNEcmFnZ2lu
ZyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwot
ICAgIH0sCi0KLSAgICBfbW91c2VNb3ZlOiBmdW5jdGlvbihlKQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLl9pc0RyYWdnaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgbG9j
YXRpb24gPSB0aGlzLl9jYXJldEZvck1vdXNlRXZlbnQoZSk7Ci0gICAgICAgIHRoaXMuX3NldFNl
bGVjdGlvbkVuZChsb2NhdGlvbi5saW5lLCBsb2NhdGlvbi5jb2x1bW4pCi0gICAgfSwKLQotICAg
IF9tb3VzZU91dDogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgfSwKLQotICAgIF9kYmxDbGljazog
ZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2NhcmV0Rm9y
TW91c2VFdmVudChlKTsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fdGV4dE1vZGVsLndvcmRS
YW5nZShsb2NhdGlvbi5saW5lLCBsb2NhdGlvbi5jb2x1bW4pOwotICAgICAgICB0aGlzLnNldFNl
bGVjdGlvbihyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0Q29sdW1uLCByYW5nZS5lbmRMaW5l
LCByYW5nZS5lbmRDb2x1bW4pOwotICAgIH0sCi0KLSAgICBfY29udGV4dE1lbnU6IGZ1bmN0aW9u
KGUpCi0gICAgewotICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMuZWxlbWVudCAmJiB0aGlz
Ll9saW5lTnVtYmVyRGVjb3JhdG9yKSB7Ci0gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlz
Ll9jYXJldEZvck1vdXNlRXZlbnQoZSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fbGluZU51bWJl
ckRlY29yYXRvci5jb250ZXh0TWVudShsb2NhdGlvbi5saW5lLCBlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlz
Ll9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKHJh
bmdlKTsKLSAgICAgICAgICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9y
LkNvbnRleHRNZW51KCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvcHkiKSwgdGhpcy5fY29weS5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudS5zaG93KGV2ZW50KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICBfY2FyZXRGb3JNb3VzZUV2ZW50OiBmdW5jdGlvbihlKQot
ICAgIHsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCB0aGlzLl9vZmZzZXRU
b0xpbmUoZS5vZmZzZXRZICsgKGUudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnQgPyB0aGlzLl9zY3Jv
bGxUb3AgOiAwKSkgLSAxKTsKLSAgICAgICAgdmFyIG9mZnNldCA9IGUub2Zmc2V0WCArIHRoaXMu
X3Njcm9sbExlZnQ7Ci0gICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjog
dGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIG9mZnNldCkgfTsKLSAgICB9LAotCi0g
ICAgX2NvbHVtbkZvck9mZnNldDogZnVuY3Rpb24obGluZU51bWJlciwgb2Zmc2V0KQotICAgIHsK
LSAgICAgICAgdmFyIGxlbmd0aCA9IDA7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1v
ZGVsLmxpbmUobGluZU51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlyc3QgcHJldGVuZCBpdCBpcyBt
b25vc3BhY2UgdG8gZ2V0IGEgcXVpY2sgZ3Vlc3MuCi0gICAgICAgIHZhciBjaGFyV2lkdGggPSB0
aGlzLl9jdHgubWVhc3VyZVRleHQoImEiKS53aWR0aDsKLSAgICAgICAgdmFyIGluZGV4ID0gTWF0
aC5mbG9vcihvZmZzZXQgLyBjaGFyV2lkdGgpOwotICAgICAgICB2YXIgaW5kZXhPZmZzZXQgPSB0
aGlzLl9jdHgubWVhc3VyZVRleHQobGluZS5zdWJzdHJpbmcoMCwgaW5kZXgpKS53aWR0aDsKLSAg
ICAgICAgaWYgKG9mZnNldCA+PSBpbmRleE9mZnNldCAmJiBpbmRleCA8IGxpbmUubGVuZ3RoICYm
IG9mZnNldCA8IGluZGV4T2Zmc2V0ICsgdGhpcy5fY3R4Lm1lYXN1cmVUZXh0KGxpbmUuY2hhckF0
KGluZGV4KSkud2lkdGgpCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICAgICAgLy8g
RmFsbGJhY2sgdG8gbm9uLW1vbm9zcGFjZS4KLSAgICAgICAgdmFyIGRlbHRhID0gaW5kZXhPZmZz
ZXQgPCBvZmZzZXQgPyAxIDogLTE7Ci0gICAgICAgIHdoaWxlIChpbmRleCA+PTAgJiYgaW5kZXgg
PCBsaW5lLmxlbmd0aCkgewotICAgICAgICAgICAgaW5kZXggKz0gZGVsdGE7Ci0gICAgICAgICAg
ICBpbmRleE9mZnNldCArPSBkZWx0YSAqIHRoaXMuX2N0eC5tZWFzdXJlVGV4dChsaW5lLmNoYXJB
dChpbmRleCkpLndpZHRoOwotICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBpbmRleE9mZnNldCAm
JiBvZmZzZXQgPCBpbmRleE9mZnNldCArIGNoYXJXaWR0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpbmUubGVuZ3RoOwotICAgIH0s
Ci0KLSAgICBfY29sdW1uVG9PZmZzZXQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbikKLSAg
ICB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9jdHgubWVhc3VyZVRleHQobGluZS5zdWJzdHJpbmcoMCwg
Y29sdW1uKSkud2lkdGg7Ci0gICAgfSwKLQotICAgIF9rZXlEb3duOiBmdW5jdGlvbihlKQotICAg
IHsKLSAgICAgICAgdmFyIHNob3J0Y3V0S2V5ID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQubWFrZUtleUZyb21FdmVudChlKTsKLSAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLl9zaG9y
dGN1dHNbc2hvcnRjdXRLZXldOwotICAgICAgICBpZiAoaGFuZGxlcikgewotICAgICAgICAgICAg
aGFuZGxlci5jYWxsKHRoaXMpOwotICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAg
ICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9oYW5kbGVOYXZpZ2F0aW9uS2V5KGUpKSB7Ci0gICAg
ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlv
bigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMu
X3JlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBrZXlDb2RlcyA9
IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleUNvZGVzOwotICAgICAgICBzd2l0Y2gg
KGUua2V5Q29kZSkgewotICAgICAgICAgICAgY2FzZSBrZXlDb2Rlcy5CYWNrc3BhY2U6Ci0gICAg
ICAgICAgICAgICAgdGhpcy5faGFuZGxlQmFja3NwYWNlS2V5KCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtleUNvZGVzLkRlbGV0ZToKLSAgICAgICAgICAgICAg
ICB0aGlzLl9oYW5kbGVEZWxldGVLZXkoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2Uga2V5Q29kZXMuVGFiOgotICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VT
ZWxlY3Rpb25XaXRoKCJcdCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBrZXlDb2Rlcy5FbnRlcjoKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlU2VsZWN0
aW9uV2l0aCgiXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZS5wcmV2
ZW50RGVmYXVsdCgpOwotICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0sCi0KLSAg
ICBfaGFuZGxlTmF2aWdhdGlvbktleTogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBj
YXJldExpbmUgPSB0aGlzLl9zZWxlY3Rpb24uZW5kTGluZTsKLSAgICAgICAgdmFyIGNhcmV0Q29s
dW1uID0gdGhpcy5fc2VsZWN0aW9uLmVuZENvbHVtbjsKLSAgICAgICAgdmFyIGFycm93QWN0aW9u
ID0gZS5zaGlmdEtleSA/IHRoaXMuX3NldFNlbGVjdGlvbkVuZCA6IHRoaXMuX3NldENhcmV0TG9j
YXRpb247Ci0KLSAgICAgICAgdmFyIGtleUNvZGVzID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hv
cnRjdXQuS2V5Q29kZXM7Ci0gICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7Ci0gICAgICAgICAg
ICBjYXNlIGtleUNvZGVzLlVwOgotICAgICAgICAgICAgY2FzZSBrZXlDb2Rlcy5QYWdlVXA6Ci0g
ICAgICAgICAgICAgICAgaWYgKGUubWV0YUtleSkKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dB
Y3Rpb24uY2FsbCh0aGlzLCAwLCAwLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChl
LmN0cmxLZXkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3Ag
LT0gdGhpcy5fbGluZUhlaWdodChjYXJldExpbmUpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSBrZXlDb2Rlcy5VcCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFycm93QWN0aW9uLmNhbGwodGhpcywgY2FyZXRMaW5lIC0gMSwg
dGhpcy5fZGVzaXJlZENhcmV0Q29sdW1uLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgdGhp
cy5fbGluZVRvT2Zmc2V0KGNhcmV0TGluZSkgLSB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFycm93QWN0aW9uLmNhbGwodGhpcywgdGhpcy5fb2Zmc2V0VG9M
aW5lKG9mZnNldCksIHRoaXMuX2Rlc2lyZWRDYXJldENvbHVtbiwgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIGtleUNvZGVzLkRvd246Ci0gICAgICAgICAgICBjYXNlIGtleUNvZGVz
LlBhZ2VEb3duOgotICAgICAgICAgICAgICAgIGlmIChlLm1ldGFLZXkpCi0gICAgICAgICAgICAg
ICAgICAgIGFycm93QWN0aW9uLmNhbGwodGhpcywgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQg
LSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aCh0aGlzLl90ZXh0TW9kZWwubGluZXNDb3Vu
dCAtIDEpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkpCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3AgKz0gdGhpcy5fbGluZUhl
aWdodChjYXJldExpbmUpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoZS5rZXlDb2RlID09PSBrZXlDb2Rlcy5Eb3duKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCBjYXJldExpbmUgKyAxLCB0aGlzLl9kZXNpcmVk
Q2FyZXRDb2x1bW4sIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9saW5lVG9PZmZzZXQoY2FyZXRMaW5l
KSArIHRoaXMuX2NhbnZhcy5oZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJvd0Fj
dGlvbi5jYWxsKHRoaXMsIHRoaXMuX29mZnNldFRvTGluZShvZmZzZXQpLCB0aGlzLl9kZXNpcmVk
Q2FyZXRDb2x1bW4sIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBrZXlDb2Rlcy5I
b21lOgotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc01ldGFDdHJsKGUpKQotICAgICAgICAg
ICAgICAgICAgICBhcnJvd0FjdGlvbi5jYWxsKHRoaXMsIDAsIDAsIHRydWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0
aGlzLl9zZWxlY3Rpb24uZW5kTGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIGtleUNvZGVzLkVuZDoKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNN
ZXRhQ3RybChlKSkKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3Ro
KHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSksIHRydWUpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0aGlzLl9z
ZWxlY3Rpb24uZW5kTGluZSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgodGhpcy5fc2VsZWN0
aW9uLmVuZExpbmUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
a2V5Q29kZXMuTGVmdDoKLSAgICAgICAgICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgIWUubWV0
YUtleSAmJiAhdGhpcy5faXNBbHRDdHJsKGUpICYmICF0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHNlbGVjdGlvbgotICAgICAgICAgICAg
ICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fc2V0Q2FyZXRMb2NhdGlvbihyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0
YXJ0Q29sdW1uKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUubWV0YUtleSkKLSAgICAg
ICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0aGlzLl9zZWxlY3Rpb24uZW5k
TGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FyZXRDb2x1bW4gPT09IDAgJiYg
Y2FyZXRMaW5lID4gMCkKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlz
LCBjYXJldExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChjYXJldExpbmUgLSAx
KSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5faXNBbHRDdHJsKGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhcmV0Q29sdW1uID0gdGhpcy5fdGV4dE1vZGVsLndvcmRTdGFydCh0
aGlzLl9zZWxlY3Rpb24uZW5kTGluZSwgdGhpcy5fc2VsZWN0aW9uLmVuZENvbHVtbik7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjYXJldENvbHVtbiA9PT0gdGhpcy5fc2VsZWN0aW9uLmVuZENv
bHVtbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sdW1uID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCBjYXJldExpbmUsIGNhcmV0Q29sdW1u
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rp
b24uY2FsbCh0aGlzLCBjYXJldExpbmUsIGNhcmV0Q29sdW1uIC0gMSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtleUNvZGVzLlJpZ2h0OgotICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoY2FyZXRMaW5lKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgIWUubWV0YUtleSAmJiAhdGhpcy5faXNBbHRDdHJs
KGUpICYmICF0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFJlc2V0IHNlbGVjdGlvbgotICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlz
Ll9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZXRM
b2NhdGlvbihyYW5nZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZS5tZXRhS2V5KQotICAgICAgICAgICAgICAgICAgICBhcnJvd0FjdGlvbi5j
YWxsKHRoaXMsIHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZUxl
bmd0aCh0aGlzLl9zZWxlY3Rpb24uZW5kTGluZSkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGNhcmV0Q29sdW1uID09PSBsaW5lLmxlbmd0aCAmJiBjYXJldExpbmUgPCB0aGlzLl90ZXh0TW9k
ZWwubGluZXNDb3VudCAtIDEpCi0gICAgICAgICAgICAgICAgICAgIGFycm93QWN0aW9uLmNhbGwo
dGhpcywgY2FyZXRMaW5lICsgMSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5f
aXNBbHRDdHJsKGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sdW1uID0gdGhpcy5f
dGV4dE1vZGVsLndvcmRFbmQodGhpcy5fc2VsZWN0aW9uLmVuZExpbmUsIHRoaXMuX3NlbGVjdGlv
bi5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZXRDb2x1bW4gPT09IHRo
aXMuX3NlbGVjdGlvbi5lbmRDb2x1bW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJldENv
bHVtbiA9IGxpbmUubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBhcnJvd0FjdGlvbi5jYWxs
KHRoaXMsIGNhcmV0TGluZSwgY2FyZXRDb2x1bW4pOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBhcnJvd0FjdGlvbi5jYWxsKHRoaXMsIGNhcmV0TGluZSwgY2Fy
ZXRDb2x1bW4gKyAxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9LAotCi0gICAgX3RleHRJbnB1dDogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9yZWFkT25seSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoZS5k
YXRhICYmICFlLmFsdEtleSAmJiAhZS5jdHJsS2V5ICYmICFlLm1ldGFLZXkpIHsKLSAgICAgICAg
ICAgIHRoaXMuX3JlcGxhY2VTZWxlY3Rpb25XaXRoKGUuZGF0YSk7Ci0gICAgICAgICAgICBlLnBy
ZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF9zZXRDYXJldExvY2F0aW9uOiBmdW5jdGlvbihsaW5lLCBjb2x1
bW4sIHVwZG93bikKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGxpbmUsIGNvbHVt
biwgbGluZSwgY29sdW1uLCB1cGRvd24pOwotICAgIH0sCi0KLSAgICBfc2V0U2VsZWN0aW9uRW5k
OiBmdW5jdGlvbihsaW5lLCBjb2x1bW4sIHVwZG93bikKLSAgICB7Ci0gICAgICAgIGlmICghdXBk
b3duKQotICAgICAgICAgICAgdGhpcy5fZGVzaXJlZENhcmV0Q29sdW1uID0gY29sdW1uOwotCi0g
ICAgICAgIHZhciBlbmQgPSB0aGlzLl9maXQobGluZSwgY29sdW1uKTsKLSAgICAgICAgdGhpcy5f
c2VsZWN0aW9uLnNldEVuZChlbmQubGluZSwgZW5kLmNvbHVtbik7Ci0gICAgICAgIHRoaXMucmV2
ZWFsKHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lLCB0aGlzLl9zZWxlY3Rpb24uZW5kQ29sdW1uKTsK
LSAgICAgICAgdGhpcy5fdXBkYXRlQ3Vyc29yKGVuZC5saW5lLCBlbmQuY29sdW1uKTsKLSAgICB9
LAotCi0gICAgX3VwZGF0ZURpdkRlY29yYXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgZmlyc3RMaW5lID0gdGhpcy5fb2Zmc2V0VG9MaW5lKHRoaXMuX3Njcm9sbFRvcCkgLSAx
OwotICAgICAgICB2YXIgbGFzdExpbmUgPSB0aGlzLl9vZmZzZXRUb0xpbmUodGhpcy5fc2Nyb2xs
VG9wICsgdGhpcy5fY2FudmFzLmhlaWdodCkgKyAxOwotCi0gICAgICAgIHZhciBsaW5lc0NvdW50
ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGluZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3Rl
eHRNb2RlbC5nZXRBdHRyaWJ1dGUoaSwgImRpdi1kZWNvcmF0aW9uIik7Ci0gICAgICAgICAgICBp
ZiAoZWxlbWVudCkgewotICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUubGVu
Z3RoID0gTWF0aC5taW4odGhpcy5fbGluZU9mZnNldHNDYWNoZS5sZW5ndGgsIGkgKyAxKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkRpdkRlY29yYXRpb24oaSwgZWxlbWVudCwgaSA+
IGZpcnN0TGluZSAmJiBpIDwgbGFzdExpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9wb3NpdGlvbkRpdkRlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIs
IGVsZW1lbnQsIHZpc2libGUpCi0gICAgewotICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9u
ID0gImFic29sdXRlIjsKLSAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLl9saW5lVG9P
ZmZzZXQobGluZU51bWJlcikgLSB0aGlzLl9zY3JvbGxUb3AgKyB0aGlzLl90ZXh0TGluZUhlaWdo
dCArICJweCI7Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuX2xpbmVOdW1iZXJX
aWR0aCArICJweCI7Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIm1heC13aWR0
aCIsIHRoaXMuX2NhbnZhcy53aWR0aCArICJweCIpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlQ3Vy
c29yOiBmdW5jdGlvbihsaW5lLCBjb2x1bW4pCi0gICAgewotICAgICAgICBpZiAobGluZSA+PSB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dmFyIG9mZnNldCA9IHRoaXMuX2NvbHVtblRvT2Zmc2V0KGxpbmUsIGNvbHVtbik7Ci0gICAgICAg
IGlmIChvZmZzZXQgPj0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQgJiYgIXRoaXMuX3JlYWRP
bmx5KQotICAgICAgICAgICAgdGhpcy5fY3Vyc29yLnNldExvY2F0aW9uKHRoaXMuX2xpbmVOdW1i
ZXJXaWR0aCArIG9mZnNldCAtIDEsIHRoaXMuX2xpbmVUb09mZnNldChsaW5lKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2N1cnNvci5oaWRlKCk7Ci0gICAgfSwKLQotICAgIF9m
aXQ6IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbikKLSAgICB7Ci0gICAgICAgIGxpbmUgPSBNYXRoLm1h
eCgwLCBNYXRoLm1pbihsaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEpKTsKLSAg
ICAgICAgdmFyIGxpbmVMZW5ndGggPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChsaW5lKTsK
LSAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uLCBsaW5lTGVuZ3Ro
KSk7Ci0gICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uIH07Ci0gICAg
fSwKLQotICAgIF9wYWludFNlbGVjdGlvbjogZnVuY3Rpb24oZmlyc3RMaW5lLCBsYXN0TGluZSkK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9zZWxlY3Rpb24ucmFuZ2UoKTsK
LSAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9IHRoaXMuX3NlbGVjdGlvbkNvbG9yOwotCi0g
ICAgICAgIGZpcnN0TGluZSA9IE1hdGgubWF4KGZpcnN0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lKTsK
LSAgICAgICAgZW5kTGluZSA9IE1hdGgubWluKGxhc3RMaW5lLCByYW5nZS5lbmRMaW5lICsgMSk7
Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0TGluZTsgaSA8IGVuZExpbmU7ICsraSkgewot
ICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShpKTsKLSAgICAgICAg
ICAgIHZhciBmcm9tLCB0bzsKLQotICAgICAgICAgICAgaWYgKGkgPT09IHJhbmdlLnN0YXJ0TGlu
ZSkgewotICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9jb2x1bW5Ub09mZnNldChy
YW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0Q29sdW1uKTsKLSAgICAgICAgICAgICAgICBmcm9t
ID0gb2Zmc2V0IC0gdGhpcy5fc2Nyb2xsTGVmdCArIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIDE7
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBmcm9tID0gMDsKLQotICAgICAg
ICAgICAgaWYgKGkgPT09IHJhbmdlLmVuZExpbmUpIHsKLSAgICAgICAgICAgICAgICB2YXIgb2Zm
c2V0ID0gdGhpcy5fY29sdW1uVG9PZmZzZXQocmFuZ2UuZW5kTGluZSwgcmFuZ2UuZW5kQ29sdW1u
KTsKLSAgICAgICAgICAgICAgICB0byA9IG9mZnNldCAtIHRoaXMuX3Njcm9sbExlZnQgKyB0aGlz
Ll9saW5lTnVtYmVyV2lkdGggLSAxOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgdG8gPSB0aGlzLl9jYW52YXMud2lkdGg7Ci0KLSAgICAgICAgICAgIHRoaXMuX2N0eC5maWxs
UmVjdChmcm9tLCB0aGlzLl9saW5lVG9PZmZzZXQoaSkgLSB0aGlzLl9zY3JvbGxUb3AsIHRvIC0g
ZnJvbSwgdGhpcy5fbGluZUhlaWdodChpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fY3R4
LmZpbGxTdHlsZSA9ICJyZ2IoMCwgMCwgMCkiOwotICAgIH0sCi0KLSAgICBfYmVmb3JlQ29weTog
ZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2VsZWN0aW9uLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgX2NvcHk6
IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9zZWxlY3Rpb24u
cmFuZ2UoKTsKLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKHJh
bmdlKTsKLQotICAgICAgICBmdW5jdGlvbiBkZWxheUNvcHkoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGV4dCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzZXRUaW1lb3V0KGRlbGF5Q29weSk7Ci0gICAgICAgIGlmIChlKQotICAgICAgICAg
ICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfYmVmb3JlQ3V0OiBmdW5jdGlv
bihlKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgpKQotICAg
ICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfY3V0OiBmdW5jdGlv
bihlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBl
LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLl90ZXh0TW9kZWwubWFya1VuZG9hYmxlU3RhdGUoKTsKLSAgICAgICAgdGhpcy5f
Y29weShlKTsKLSAgICAgICAgdGhpcy5fcmVwbGFjZVNlbGVjdGlvbldpdGgoIiIpOwotICAgIH0s
Ci0KLSAgICBfYmVmb3JlUGFzdGU6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICBlLnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIF9wYXN0ZTogZnVuY3Rpb24oZSkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkgewotICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVs
dCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRleHQg
PSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpOwotICAgICAgICBpZiAoIXRleHQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJs
ZVN0YXRlKCk7Ci0gICAgICAgIHRoaXMuX3JlcGxhY2VTZWxlY3Rpb25XaXRoKHRleHQpOwotICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIF9yZXBsYWNlU2VsZWN0aW9u
V2l0aDogZnVuY3Rpb24obmV3VGV4dCwgb3ZlcnJpZGVSYW5nZSkKLSAgICB7Ci0gICAgICAgIHZh
ciByYW5nZSA9IG92ZXJyaWRlUmFuZ2UgfHwgdGhpcy5fc2VsZWN0aW9uLnJhbmdlKCk7Ci0gICAg
ICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsKLSAgICAgICAgdmFyIG5ld1Jhbmdl
ID0gdGhpcy5fdGV4dE1vZGVsLnNldFRleHQocmFuZ2UsIG5ld1RleHQpOwotICAgICAgICB0aGlz
Ll9zZXRDYXJldExvY2F0aW9uKG5ld1JhbmdlLmVuZExpbmUsIG5ld1JhbmdlLmVuZENvbHVtbik7
Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7Ci0gICAgfSwKLQotICAg
IHNldENvYWxlc2NpbmdVcGRhdGU6IGZ1bmN0aW9uKGVuYWJsZWQpCi0gICAgewotICAgICAgICBp
ZiAoZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKys7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsLS07Ci0g
ICAgICAgIGlmICghdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICB0aGlz
Ll9wYWludCgpOwotICAgIH0sCi0KLSAgICBfc2VsZWN0QWxsOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICAvLyBObyBuZWVkIHRvIHJldmVhbCBsYXN0IHNlbGVjdGlvbiBsaW5lIGluIHNlbGVj
dCBhbGwuCi0gICAgICAgIHRoaXMuX3NlbGVjdGlvbi5zZXRTdGFydCgwLCAwKTsKLSAgICAgICAg
dmFyIGxhc3RMaW5lTnVtID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgLSAxOwotICAgICAg
ICB0aGlzLl9zZWxlY3Rpb24uc2V0RW5kKGxhc3RMaW5lTnVtLCB0aGlzLl90ZXh0TW9kZWwubGlu
ZUxlbmd0aChsYXN0TGluZU51bSkpOwotICAgICAgICB0aGlzLl91cGRhdGVDdXJzb3IodGhpcy5f
c2VsZWN0aW9uLmVuZExpbmUsIHRoaXMuX3NlbGVjdGlvbi5lbmRDb2x1bW4pOwotICAgIH0sCi0K
LSAgICBpbml0Rm9udE1ldHJpY3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjb21w
dXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KTsKLSAgICAg
ICAgdGhpcy5fZm9udCA9IGNvbXB1dGVkU3R5bGUuZm9udFNpemUgKyAiICIgKyBjb21wdXRlZFN0
eWxlLmZvbnRGYW1pbHk7Ci0gICAgICAgIHRoaXMuX2N0eC5mb250ID0gdGhpcy5fZm9udDsKLSAg
ICAgICAgdGhpcy5fZGlnaXRXaWR0aCA9IHRoaXMuX2N0eC5tZWFzdXJlVGV4dCgiMCIpLndpZHRo
OwotICAgICAgICB0aGlzLl90ZXh0TGluZUhlaWdodCA9IE1hdGguZmxvb3IocGFyc2VJbnQodGhp
cy5fY3R4LmZvbnQpICogMS40KTsKLSAgICAgICAgdGhpcy5fY3Vyc29yLnNldFRleHRMaW5lSGVp
Z2h0KHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyU2hvcnRj
dXRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbW9kaWZpZXJzID0gV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzOwotICAgICAgICB0aGlzLl9zaG9ydGN1dHMg
PSB7fTsKLSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lm1ha2VLZXkoInoiLCB0aGlzLl9pc01hYyA/IG1vZGlmaWVycy5NZXRhIDogbW9kaWZpZXJz
LkN0cmwpXSA9IHRoaXMuX2hhbmRsZVVuZG8uYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5fc2hv
cnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoInoiLCBtb2RpZmll
cnMuU2hpZnQgfCAodGhpcy5faXNNYWMgPyBtb2RpZmllcnMuTWV0YSA6IG1vZGlmaWVycy5DdHJs
KSldID0gdGhpcy5faGFuZGxlUmVkby5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLl9zaG9ydGN1
dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleSgiYSIsIHRoaXMuX2lzTWFj
ID8gbW9kaWZpZXJzLk1ldGEgOiBtb2RpZmllcnMuQ3RybCldID0gdGhpcy5fc2VsZWN0QWxsLmJp
bmQodGhpcyk7Ci0gICAgICAgIGlmICh0aGlzLl9pc01hYykKLSAgICAgICAgICAgIHRoaXMuX3No
b3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJkIiwgbW9kaWZp
ZXJzLkN0cmwpXSA9IHRoaXMuX2hhbmRsZURlbGV0ZUtleS5iaW5kKHRoaXMpOwotCi0gICAgICAg
IHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJk
IiwgbW9kaWZpZXJzLkN0cmwgfCBtb2RpZmllcnMuQWx0KV0gPSB0aGlzLl9oYW5kbGVUb2dnbGVE
ZWJ1Z01vZGUuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoImgiLCBtb2RpZmllcnMuQ3RybCB8IG1vZGlmaWVy
cy5BbHQpXSA9IHRoaXMuX2hhbmRsZVRvZ2dsZUhpZ2hsaWdodE1vZGUuYmluZCh0aGlzKTsKLSAg
ICB9LAotCi0gICAgX2hhbmRsZVVuZG86IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
c2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fdGV4
dE1vZGVsLnVuZG8oKTsKLSAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgdGhpcy5fc2V0
Q2FyZXRMb2NhdGlvbihyYW5nZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1bW4pOwotICAgICAgICB0
aGlzLnNldENvYWxlc2NpbmdVcGRhdGUoZmFsc2UpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlUmVk
bzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5zZXRDb2FsZXNjaW5nVXBkYXRlKHRy
dWUpOwotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwucmVkbygpOwotICAgICAg
ICBpZiAocmFuZ2UpCi0gICAgICAgICAgICB0aGlzLl9zZXRDYXJldExvY2F0aW9uKHJhbmdlLmVu
ZExpbmUsIHJhbmdlLmVuZENvbHVtbik7Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0
ZShmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9oYW5kbGVEZWxldGVLZXk6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3NlbGVjdGlvbi5yYW5nZSgpOwotICAgICAg
ICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAocmFuZ2UuZW5kQ29sdW1u
IDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgocmFuZ2Uuc3RhcnRMaW5lKSkKLSAgICAgICAg
ICAgICAgICByYW5nZS5lbmRDb2x1bW4rKzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmVu
ZExpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkgewotICAgICAgICAgICAgICAgIHJh
bmdlLmVuZExpbmUrKzsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmRDb2x1bW4gPSAwOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotICAgICAg
ICB0aGlzLl9yZXBsYWNlU2VsZWN0aW9uV2l0aCgiIiwgcmFuZ2UpOwotICAgIH0sCi0KLSAgICBf
aGFuZGxlQmFja3NwYWNlS2V5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmFuZ2Ug
PSB0aGlzLl9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29sdW1uID4gMCkKLSAgICAgICAgICAgICAg
ICByYW5nZS5zdGFydENvbHVtbi0tOwotICAgICAgICAgICAgZWxzZSBpZiAocmFuZ2Uuc3RhcnRM
aW5lID4gMCkgewotICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0TGluZS0tOwotICAgICAgICAg
ICAgICAgIHJhbmdlLnN0YXJ0Q29sdW1uID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgocmFu
Z2Uuc3RhcnRMaW5lKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwubWFya1VuZG9h
YmxlU3RhdGUoKTsKLSAgICAgICAgdGhpcy5fcmVwbGFjZVNlbGVjdGlvbldpdGgoIiIsIHJhbmdl
KTsKLSAgICB9LAotCi0gICAgX2hhbmRsZVRvZ2dsZURlYnVnTW9kZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gIXRoaXMuX2RlYnVnTW9kZTsKLSAgICB9LAot
Ci0gICAgX2hhbmRsZVRvZ2dsZUhpZ2hsaWdodE1vZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2hpZ2hsaWdodGluZ0VuYWJsZWQgPSAhdGhpcy5faGlnaGxpZ2h0aW5nRW5hYmxl
ZDsKLSAgICB9LAotCi0gICAgX2lzTWV0YUN0cmw6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5faXNNYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7Ci0gICAgfSwKLQot
ICAgIF9pc0FsdEN0cmw6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
aXNNYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleTsKLSAgICB9LAotCi0gICAgX2RlY2ltYWxEaWdp
dHM6IGZ1bmN0aW9uKG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXRoLmNlaWwoTWF0
aC5sb2cobnVtYmVyICsgMSkgLyBNYXRoLmxvZygxMCkpOwotICAgIH0KLX0KLQotV2ViSW5zcGVj
dG9yLlRleHRTZWxlY3Rpb25Nb2RlbCA9IGZ1bmN0aW9uKGNoYW5nZUxpc3RlbmVyKQotewotICAg
IHRoaXMuc3RhcnRMaW5lID0gMDsKLSAgICB0aGlzLnN0YXJ0Q29sdW1uID0gMDsKLSAgICB0aGlz
LmVuZExpbmUgPSAwOwotICAgIHRoaXMuZW5kQ29sdW1uID0gMDsKLSAgICB0aGlzLl9jaGFuZ2VM
aXN0ZW5lciA9IGNoYW5nZUxpc3RlbmVyOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dFNlbGVjdGlv
bk1vZGVsLnByb3RvdHlwZSA9IHsKLSAgICBzZXRTdGFydDogZnVuY3Rpb24obGluZSwgY29sdW1u
KQotICAgIHsKLSAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy5yYW5nZSgpOwotCi0gICAgICAg
IHRoaXMuc3RhcnRMaW5lID0gbGluZTsKLSAgICAgICAgdGhpcy5zdGFydENvbHVtbiA9IGNvbHVt
bjsKLSAgICAgICAgdGhpcy5lbmRMaW5lID0gbGluZTsKLSAgICAgICAgdGhpcy5lbmRDb2x1bW4g
PSBjb2x1bW47Ci0KLSAgICAgICAgdGhpcy5fY2hhbmdlTGlzdGVuZXIob2xkUmFuZ2UsIHRoaXMu
cmFuZ2UoKSk7Ci0gICAgfSwKLQotICAgIHNldEVuZDogZnVuY3Rpb24obGluZSwgY29sdW1uKQot
ICAgIHsKLSAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy5yYW5nZSgpOwotCi0gICAgICAgIHRo
aXMuZW5kTGluZSA9IGxpbmU7Ci0gICAgICAgIHRoaXMuZW5kQ29sdW1uID0gY29sdW1uOwotCi0g
ICAgICAgIHRoaXMuX2NoYW5nZUxpc3RlbmVyKG9sZFJhbmdlLCB0aGlzLnJhbmdlKCksIHRoaXMu
ZW5kTGluZSwgdGhpcy5lbmRDb2x1bW4pOwotICAgIH0sCi0KLSAgICByYW5nZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuc3RhcnRMaW5lIDwgdGhpcy5lbmRMaW5lIHx8ICh0
aGlzLnN0YXJ0TGluZSA9PT0gdGhpcy5lbmRMaW5lICYmIHRoaXMuc3RhcnRDb2x1bW4gPD0gdGhp
cy5lbmRDb2x1bW4pKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlKHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0Q29sdW1uLCB0aGlzLmVuZExpbmUsIHRoaXMu
ZW5kQ29sdW1uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuVGV4dFJhbmdlKHRoaXMuZW5kTGluZSwgdGhpcy5lbmRDb2x1bW4sIHRoaXMuc3RhcnRM
aW5lLCB0aGlzLnN0YXJ0Q29sdW1uKTsKLSAgICB9LAotCi0gICAgaXNFbXB0eTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRMaW5lID09PSB0aGlzLmVuZExpbmUg
JiYgdGhpcy5zdGFydENvbHVtbiA9PT0gdGhpcy5lbmRDb2x1bW47Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuVGV4dEN1cnNvciA9IGZ1bmN0aW9uKGN1cnNvckVsZW1lbnQpCi17Ci0gICAgdGhp
cy5fdmlzaWJsZSA9IGZhbHNlOwotICAgIHRoaXMuX2N1cnNvckVsZW1lbnQgPSBjdXJzb3JFbGVt
ZW50OwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEN1cnNvci5wcm90b3R5cGUgPSB7Ci0gICAgc2V0
TG9jYXRpb246IGZ1bmN0aW9uKHgsIHkpCi0gICAgewotICAgICAgICB0aGlzLl94ID0geDsKLSAg
ICAgICAgdGhpcy5feSA9IHk7Ci0gICAgICAgIGlmICh0aGlzLl9wYWludEludGVydmFsKSB7Ci0g
ICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9wYWludEludGVydmFsKTsKLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYWludEludGVydmFsOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMuX3BhaW50SW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fcGFpbnQuYmlu
ZCh0aGlzLCBmYWxzZSksIDUwMCk7Ci0gICAgICAgIHRoaXMuX3BhaW50KHRydWUpOwotICAgIH0s
Ci0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcGFpbnRJ
bnRlcnZhbCkgewotICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fcGFpbnRJ
bnRlcnZhbCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGFpbnRJbnRlcnZhbDsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9jdXJzb3JFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
Ci0gICAgfSwKLQotICAgIHNldFRleHRMaW5lSGVpZ2h0OiBmdW5jdGlvbih0ZXh0TGluZUhlaWdo
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnNvckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGV4
dExpbmVIZWlnaHQgKyAicHgiOwotICAgIH0sCi0KLSAgICBfcGFpbnQ6IGZ1bmN0aW9uKGZvcmNl
KQotICAgIHsKLSAgICAgICAgaWYgKGZvcmNlKQotICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3Zpc2libGUgPSAhdGhpcy5f
dmlzaWJsZTsKLSAgICAgICAgdGhpcy5fY3Vyc29yRWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5f
eCArICJweCI7Ci0gICAgICAgIHRoaXMuX2N1cnNvckVsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5f
eSArICJweCI7Ci0gICAgICAgIHRoaXMuX2N1cnNvckVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHRo
aXMuX3Zpc2libGUgPyAiYmxvY2siIDogIm5vbmUiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTNiYTQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9UZXh0Vmlld2VyLmpzCkBAIC0wLDAgKzEsNjAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCit7CisgICAgdGhpcy5fdGV4
dE1vZGVsID0gdGV4dE1vZGVsOworICAgIHRoaXMuX3RleHRNb2RlbC5jaGFuZ2VMaXN0ZW5lciA9
IHRoaXMuX3RleHRDaGFuZ2VkLmJpbmQodGhpcyk7CisgICAgdGhpcy5faGlnaGxpZ2h0ZXIgPSBu
ZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0aGlzLl90ZXh0TW9kZWwsIHRo
aXMuX2hpZ2hsaWdodENoYW5nZWQuYmluZCh0aGlzKSk7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1l
ID0gInRleHQtZWRpdG9yIG1vbm9zcGFjZSI7CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKKworICAg
IHRoaXMuX3VybCA9IHVybDsKKworICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CisgICAgdGhpcy5fbGluZXNDb250YWluZXJF
bGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvci1saW5lcyI7CisgICAgdGhpcy5fbGluZXND
b250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgiY2VsbHNwYWNpbmciLCAwKTsKKyAgICB0aGlz
Ll9saW5lc0NvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxscGFkZGluZyIsIDApOwor
ICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQp
OworCisgICAgdGhpcy5fZmlyc3RSZW1vdmVkQ2h1bmsgPSAwOworICAgIHRoaXMuX2xhc3RSZW1v
dmVkQ2h1bmsgPSAwOworICAgIHRoaXMuX2xpbmVSb3dzID0gW107CisgICAgdGhpcy5fZGVmYXVs
dENodW5rU2l6ZSA9IDUwOworICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKK30K
KworV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0geworICAgIHNldCBtaW1lVHlw
ZShtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLm1pbWVUeXBlID0g
bWltZVR5cGU7CisgICAgfSwKKworICAgIGdldCB0ZXh0TW9kZWwoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3RleHRNb2RlbDsKKyAgICB9LAorCisgICAgcmV2ZWFsTGluZTogZnVuY3Rp
b24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VM
aW5lQUNodW5rKGxpbmVOdW1iZXIpOworICAgICAgICAgICAgdGhpcy5zZXRDb2FsZXNjaW5nVXBk
YXRlKHRydWUpOworICAgICAgICAgICAgY2h1bmsuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwor
ICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICAgICAgdGhpcy5zZXRDb2Fs
ZXNjaW5nVXBkYXRlKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBhZGREZWNvcmF0
aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl90ZXh0Q2h1bmtzKQorICAgICAgICAgICAgdGhpcy5fdGV4dENoYW5nZWQoKTsKKwor
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAg
ICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uICE9PSAic3RyaW5nIikKKyAgICAgICAgICAgIGNo
dW5rLmxhc3RDaGlsZC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKKyAgICAgICAgdmFyIGRlY29y
YXRpb25zID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGVjb3Jh
dGlvbnMiKTsKKyAgICAgICAgaWYgKCFkZWNvcmF0aW9ucykgeworICAgICAgICAgICAgZGVjb3Jh
dGlvbnMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUobGlu
ZU51bWJlciwgImRlY29yYXRpb25zIiwgZGVjb3JhdGlvbnMpOworICAgICAgICB9CisgICAgICAg
IGRlY29yYXRpb25zLnB1c2goZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX3JlcGFpbnRBbGwo
KTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwg
ZGVjb3JhdGlvbikKKyAgICB7CisgICAgICAgIHZhciBkZWNvcmF0aW9ucyA9IHRoaXMuX3RleHRN
b2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRlY29yYXRpb25zIik7CisgICAgICAgIGlm
IChkZWNvcmF0aW9ucykgeworICAgICAgICAgICAgZGVjb3JhdGlvbnMucmVtb3ZlKGRlY29yYXRp
b24pOworICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICB9CisgICAgfSwK
KworICAgIG1hcmtBbmRSZXZlYWxSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAg
ICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOworICAgICAgICBpZiAocmFuZ2UpCisgICAgICAg
ICAgICB0aGlzLnJldmVhbExpbmUocmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBoaWdobGlnaHRMaW5l
OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJlc3RvcmUg
YW5pbWF0aW9uLgorICAgICAgICB0aGlzLl9saW5lVG9IaWdobGlnaHQgPSBsaW5lTnVtYmVyOwor
ICAgICAgICB0aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7CisgICAgfSwKKworICAgIF90ZXh0
Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fbGluZVJvd3MgPSBbXTsKKyAgICAgICAgdGhpcy5fbGluZXND
b250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFyIGxpbmVzID0g
W107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgIT0gMCAmJiBpICUgdGhpcy5fZGVmYXVsdENo
dW5rU2l6ZSA9PT0gMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVDaHVua1JvdyhsaW5lcywgaSAtIGxpbmVzLmxl
bmd0aCkpOworICAgICAgICAgICAgICAgIGxpbmVzID0gW107CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobGluZXMubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy5fbGluZXNDb250YWlu
ZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNodW5rUm93KGxpbmVzLCBpIC0gbGlu
ZXMubGVuZ3RoKSk7CisKKyAgICAgICAgdGhpcy5faW5kZXhDaHVua3MoKTsKKyAgICAgICAgdGhp
cy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBfY3JlYXRlQ2h1bmtSb3c6IGZ1bmN0aW9u
KGxpbmVzLCBzdGFydExpbmUpCisgICAgeworICAgICAgICB2YXIgbGluZU51bWJlckVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICBsaW5lTnVtYmVyRWxlbWVu
dC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKKyAgICAgICAgdmFyIGxpbmVUZXh0
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAgIGxpbmVUZXh0
RWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlx1MjAwQlxuIik7CisKKyAgICAgICAg
dmFyIGNodW5rUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgICAgICAgY2h1
bmtSb3cuYXBwZW5kQ2hpbGQobGluZU51bWJlckVsZW1lbnQpOworICAgICAgICBjaHVua1Jvdy5h
cHBlbmRDaGlsZChsaW5lVGV4dEVsZW1lbnQpOworICAgICAgICBjaHVua1Jvdy5saW5lTnVtYmVy
ID0gc3RhcnRMaW5lOworICAgICAgICBjaHVua1Jvdy5saW5lc0NvdW50ID0gbGluZXMubGVuZ3Ro
OworICAgICAgICBjaHVua1Jvdy5pc0NodW5rID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNodW5r
Um93OworICAgIH0sCisKKyAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIp
CisgICAgeworICAgICAgICB0aGlzLl9yZXN0b3JlQ2h1bmtzKCk7CisKKyAgICAgICAgdmFyIGNo
dW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAg
ICB2YXIgb2xkQ2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKKyAgICAgICAg
aWYgKG9sZENodW5rLmxpbmVzQ291bnQgPT09IDEpCisgICAgICAgICAgICByZXR1cm4gb2xkQ2h1
bms7CisKKyAgICAgICAgLy8gUHJlZml4IGNodW5rLgorICAgICAgICB2YXIgbGluZXMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IG9sZENodW5rLmxpbmVOdW1iZXI7IGkgPCBsaW5lTnVtYmVy
OyArK2kpCisgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsK
KyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5fY3JlYXRlQ2h1bmtSb3cobGluZXMsIG9sZENodW5rLmxpbmVOdW1iZXIpOworICAgICAgICAg
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShjaHVuaywgb2xkQ2h1
bmspOworICAgICAgICB9CisKKyAgICAgICAgLy8gTGluZSBjaHVuay4KKyAgICAgICAgdmFyIGxp
bmVDaHVuayA9IHRoaXMuX2NyZWF0ZUNodW5rUm93KFsgdGhpcy5fdGV4dE1vZGVsLmxpbmUobGlu
ZU51bWJlcikgXSwgbGluZU51bWJlcik7CisgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxl
bWVudC5pbnNlcnRCZWZvcmUobGluZUNodW5rLCBvbGRDaHVuayk7CisgICAgICAgIAorICAgICAg
ICAvLyBTdWZmaXggY2h1bmsuCisgICAgICAgIGxpbmVzID0gW107CisgICAgICAgIGZvciAodmFy
IGkgPSBsaW5lTnVtYmVyICsgMTsgaSA8IG9sZENodW5rLmxpbmVOdW1iZXIgKyBvbGRDaHVuay5s
aW5lc0NvdW50OyArK2kpCisgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5s
aW5lKGkpKTsKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCkgeworICAgICAgICAgICAgY2h1bmsg
PSB0aGlzLl9jcmVhdGVDaHVua1JvdyhsaW5lcywgbGluZU51bWJlciArIDEpOworICAgICAgICAg
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShjaHVuaywgb2xkQ2h1
bmspOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIGVuY2xvc2luZyBjaHVuay4KKyAg
ICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKG9sZENodW5rKTsK
KworICAgICAgICB0aGlzLl9pbmRleENodW5rcygpOworCisgICAgICAgIHJldHVybiBsaW5lQ2h1
bms7CisgICAgfSwKKworICAgIF9pbmRleENodW5rczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fdGV4dENodW5rcyA9IFtdOworICAgICAgICBmb3IgKHZhciBjaHVuayA9IHRoaXMu
X2xpbmVzQ29udGFpbmVyRWxlbWVudC5maXJzdENoaWxkLCBpID0gMDsgY2h1bms7IGNodW5rID0g
Y2h1bmsubmV4dFNpYmxpbmcsIGkrKykgeworICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tp
XSA9IGNodW5rOworICAgICAgICAgICAgY2h1bmsuY2h1bmtOdW1iZXIgPSBpOworICAgICAgICB9
CisgICAgfSwKKworICAgIF9oaWdobGlnaHRDaGFuZ2VkOiBmdW5jdGlvbihmcm9tTGluZSwgdG9M
aW5lKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fcmVwYWludChmcm9tTGluZSwgdG9MaW5l
KTsKKyAgICB9LAorCisgICAgX3Njcm9sbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBzZXRDb2FsZXNjaW5nVXBkYXRlOiBmdW5j
dGlvbihlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgICAgICB0
aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOworICAgICAgICBpZiAoIXRoaXMuX3BhaW50Q29h
bGVzY2luZ0xldmVsKQorICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0sCisK
KyAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVwYWlu
dCgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7CisgICAgfSwKKworICAgIF9jaHVua0Zv
ck9mZnNldDogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIGN1cnJlbnRPZmZz
ZXQgPSAwOworICAgICAgICB2YXIgcm93ID0gdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmZp
cnN0Q2hpbGQ7CisgICAgICAgIHdoaWxlIChyb3cpIHsKKyAgICAgICAgICAgIHZhciByb3dIZWln
aHQgPSByb3cub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjdXJyZW50
T2Zmc2V0ICYmIG9mZnNldCA8IGN1cnJlbnRPZmZzZXQgKyByb3dIZWlnaHQpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcm93LmNodW5rTnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcm93ID0gcm93Lm5leHRTaWJsaW5nOworICAgICAgICAgICAgY3VycmVudE9mZnNldCArPSBy
b3dIZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3MubGVu
Z3RoIC0gMTsKKyAgICB9LAorCisgICAgX2NodW5rTnVtYmVyRm9yTGluZTogZnVuY3Rpb24obGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENo
dW5rcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0Q2h1
bmtzW2ldLmxpbmVOdW1iZXI7CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlzLl90
ZXh0Q2h1bmtzW2ldLmxpbmVOdW1iZXIgJiYgbGluZU51bWJlciA8IHRoaXMuX3RleHRDaHVua3Nb
aV0ubGluZU51bWJlciArIHRoaXMuX3RleHRDaHVua3NbaV0ubGluZXNDb3VudCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENo
dW5rcy5sZW5ndGggLSAxOworICAgIH0sCisKKyAgICBfY2h1bmtTdGFydExpbmU6IGZ1bmN0aW9u
KGNodW5rTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSAwOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rTnVtYmVyICYmIGkgPCB0aGlzLl90ZXh0Q2h1bmtz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IHRoaXMuX3RleHRDaHVu
a3NbaV0ubGluZXNDb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZU51bWJlcjsK
KyAgICB9LAorCisgICAgX3Jlc3RvcmVDaHVua3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IC8vIFJlbW92ZSBpbmRpdmlkdWFsIGxpbmVzLgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX2xpbmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9
IHRoaXMuX2xpbmVSb3dzW2ldOworICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0
dHJpYnV0ZShsaW5lUm93LmxpbmVOdW1iZXIsICJsaW5lLXRyIik7CisgICAgICAgICAgICB0aGlz
Ll9saW5lc0NvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fbGluZVJvd3MgPSBbXTsKKworICAgICAgICAvLyBSZXN0b3JlIHJlbW92
ZWQgY2h1bmtzLgorICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gdGhpcy5fdGV4dENodW5rc1t0
aGlzLl9sYXN0UmVtb3ZlZENodW5rXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2ZpcnN0
UmVtb3ZlZENodW5rOyBpIDwgdGhpcy5fbGFzdFJlbW92ZWRDaHVuazsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldOworICAgICAgICAgICAgdGhpcy5f
bGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShjaHVuaywgaW5zZXJ0QmVmb3JlKTsK
KworICAgICAgICAgICAgZm9yICh2YXIgaiA9IGNodW5rLmxpbmVOdW1iZXI7IGogPCBjaHVuay5s
aW5lTnVtYmVyICsgY2h1bmsubGluZXNDb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgdmFy
IGRlY29yYXRpb25zID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShqLCAiZGVjb3JhdGlv
bnMiKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBkZWNvcmF0aW9ucy5sZW5ndGg7ICsraykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uc1trXSAhPT0gInN0cmlu
ZyIpCisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuay5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQo
ZGVjb3JhdGlvbnNba10pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2ZpcnN0UmVtb3ZlZENo
dW5rID0gMDsKKyAgICAgICAgdGhpcy5fbGFzdFJlbW92ZWRDaHVuayA9IDA7CisgICAgfSwKKwor
ICAgIF9yZXBhaW50OiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5lKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmICghdGhpcy5fdGV4dENodW5rcykKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaGFu
Z2VkKCk7CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwor
ICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0OworCisgICAg
ICAgIHZhciBmaXJzdFZpc2libGVDaHVuayA9IHRoaXMuX2NodW5rRm9yT2Zmc2V0KE1hdGgubWF4
KHNjcm9sbFRvcCAtIDEwLCAwKSk7CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUNodW5rID0gdGhp
cy5fY2h1bmtGb3JPZmZzZXQoc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodCk7
CisKKyAgICAgICAgdmFyIGZpcnN0VmlzaWJsZUxpbmUgPSB0aGlzLl9jaHVua1N0YXJ0TGluZShm
aXJzdFZpc2libGVDaHVuayk7CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSB0aGlzLl9j
aHVua1N0YXJ0TGluZShsYXN0VmlzaWJsZUNodW5rICsgMSk7CisKKyAgICAgICAgaWYgKGZpcnN0
VmlzaWJsZUxpbmUgPiB0b0xpbmUgfHwgbGFzdFZpc2libGVMaW5lIDwgZnJvbUxpbmUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVj
dGlvbigpOworCisgICAgICAgIC8vIFJlc3RvcmUgc3RhdGUgdG8gbGlzdCBvZiBjaHVua3MuCisg
ICAgICAgIHRoaXMuX3Jlc3RvcmVDaHVua3MoKTsKKworICAgICAgICAvLyBSZW1vdmUgdmlzaWJs
ZSBjaHVua3MuCisgICAgICAgIHRoaXMuX2ZpcnN0UmVtb3ZlZENodW5rID0gZmlyc3RWaXNpYmxl
Q2h1bms7CisgICAgICAgIHRoaXMuX2xhc3RSZW1vdmVkQ2h1bmsgPSBsYXN0VmlzaWJsZUNodW5r
ICsgMTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2ZpcnN0UmVtb3ZlZENodW5rOyBpIDwg
dGhpcy5fbGFzdFJlbW92ZWRDaHVuazsgKytpKQorICAgICAgICAgICAgdGhpcy5fbGluZXNDb250
YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX3RleHRDaHVua3NbaV0pOworCisgICAgICAg
IC8vIFJlcXVlc3Qgc3ludGF4IGhpZ2hsaWdodC4KKyAgICAgICAgdGhpcy5fbXV0ZUhpZ2hsaWdo
dExpc3RlbmVyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxh
c3RWaXNpYmxlTGluZSk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVu
ZXI7CisKKyAgICAgICAgLy8gQ3JlYXRlIGluZGl2aWR1YWwgbGluZXMuCisgICAgICAgIGluc2Vy
dEJlZm9yZSA9IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fbGFzdFJlbW92ZWRDaHVua107CisgICAg
ICAgIGZvciAodmFyIGkgPSB0aGlzLl9maXJzdFJlbW92ZWRDaHVuazsgaSA8IHRoaXMuX2xhc3RS
ZW1vdmVkQ2h1bms7ICsraSkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENo
dW5rc1tpXTsKKyAgICAgICAgICAgIHZhciBjaHVua1N0YXJ0ID0gY2h1bmsubGluZU51bWJlcjsK
KyAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSBjaHVuay5saW5lc0NvdW50OworICAgICAgICAg
ICAgZm9yICh2YXIgaiA9IGNodW5rU3RhcnQ7IGogPCBjaHVua1N0YXJ0ICsgY2h1bmtTaXplOyAr
K2opIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2NyZWF0ZUxpbmVSb3co
aik7CisgICAgICAgICAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gajsKKyAgICAgICAgICAg
ICAgICBsaW5lUm93LmNodW5rTnVtYmVyID0gaTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
TW9kZWwuc2V0QXR0cmlidXRlKGosICJsaW5lLXRyIiwgbGluZVJvdyk7CisgICAgICAgICAgICAg
ICAgdGhpcy5fcGFpbnRMaW5lKGopOworCisgICAgICAgICAgICAgICAgdmFyIGRlY29yYXRpb25z
ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShqLCAiZGVjb3JhdGlvbnMiKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgayA9IDA7IGsgPCBkZWNvcmF0aW9ucy5sZW5ndGg7ICsraykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uc1trXSAhPT0gInN0cmluZyIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZVJvdy5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQoZGVjb3Jh
dGlvbnNba10pOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVSb3cuYWRkU3R5bGVDbGFzcyhkZWNvcmF0aW9uc1trXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoaiA9PT0gdGhpcy5fbGluZVRvSGlnaGxpZ2h0KQorICAgICAgICAgICAgICAgICAgICBsaW5l
Um93LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1oaWdobGlnaHRlZC1saW5lIik7CisgICAgICAgICAg
ICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lUm93LCBp
bnNlcnRCZWZvcmUpOworICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVSb3dzLnB1c2gobGluZVJv
dyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVj
dGlvbihzZWxlY3Rpb24pOworICAgIH0sCisKKyAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwor
ICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDAp
OworICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlv
blJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCk7CisgICAg
ICAgIHZhciBlbmQgPSB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvblJhbmdlLmVu
ZENvbnRhaW5lciwgc2VsZWN0aW9uUmFuZ2UuZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbiwgZW5kLmxp
bmUsIGVuZC5jb2x1bW4pOworICAgIH0sCisKKyAgICBfcmVzdG9yZVNlbGVjdGlvbjogZnVuY3Rp
b24ocmFuZ2UpCisgICAgeworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB2YXIgc3RhcnRSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKHJh
bmdlLnN0YXJ0TGluZSwgImxpbmUtdHIiKTsKKyAgICAgICAgaWYgKHN0YXJ0Um93KQorICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0gc3RhcnRSb3cubGFzdENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZz
ZXQocmFuZ2Uuc3RhcnRDb2x1bW4pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBv
ZmZzZXQgPSByYW5nZS5zdGFydENvbHVtbjsKKyAgICAgICAgICAgIHZhciBjaHVua051bWJlciA9
IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExpbmUpOworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNodW5rTnVtYmVyKTsgaSA8IHJhbmdl
LnN0YXJ0TGluZTsgKytpKQorICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9k
ZWwubGluZShpKS5sZW5ndGggKyAyOyAvLyBcdTIwMEJcbiB0d28gY2hhciBzdWZmaXguCisgICAg
ICAgICAgICB2YXIgc3RhcnQgPSB7IGNvbnRhaW5lcjogdGhpcy5fdGV4dENodW5rc1tjaHVua051
bWJlcl0ubGFzdENoaWxkLmZpcnN0Q2hpbGQsIG9mZnNldDogb2Zmc2V0IH07CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZW5kUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShyYW5n
ZS5lbmRMaW5lLCAibGluZS10ciIpOworICAgICAgICBpZiAoZW5kUm93KQorICAgICAgICAgICAg
dmFyIGVuZCA9IGVuZFJvdy5sYXN0Q2hpbGQucmFuZ2VCb3VuZGFyeUZvck9mZnNldChyYW5nZS5l
bmRDb2x1bW4pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSByYW5n
ZS5lbmRDb2x1bW47CisgICAgICAgICAgICB2YXIgY2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051
bWJlckZvckxpbmUocmFuZ2UuZW5kTGluZSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhp
cy5fY2h1bmtTdGFydExpbmUoY2h1bmtOdW1iZXIpOyBpIDwgcmFuZ2UuZW5kTGluZTsgKytpKQor
ICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9kZWwubGluZShpKS5sZW5ndGgg
KyAyOyAvLyBcdTIwMEJcbiB0d28gY2hhciBzdWZmaXguCisgICAgICAgICAgICB2YXIgZW5kID0g
eyBjb250YWluZXI6IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLmxhc3RDaGlsZC5maXJz
dENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNlbGVj
dGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgc2VsZWN0aW9uUmFu
Z2Uuc2V0U3RhcnQoc3RhcnQuY29udGFpbmVyLCBzdGFydC5vZmZzZXQpOworICAgICAgICBzZWxl
Y3Rpb25SYW5nZS5zZXRFbmQoZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCk7CisKKyAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgc2VsZWN0aW9u
LnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0aW9u
UmFuZ2UpOworICAgIH0sCisKKyAgICBfc2VsZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29u
dGFpbmVyLCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLmVs
ZW1lbnQgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogMCwgY29s
dW1uOiAwIH07CisgICAgICAgIGlmIChjb250YWluZXIgPT09IHRoaXMuZWxlbWVudCAmJiBvZmZz
ZXQgPT09IDEpCisgICAgICAgICAgICByZXR1cm4geyBsaW5lOiB0aGlzLl90ZXh0TW9kZWwubGlu
ZXNDb3VudCAtIDEsIGNvbHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgodGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQgLSAxKSB9OworCisgICAgICAgIHZhciBsaW5lUm93ID0gY29udGFp
bmVyLmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoInRyIik7CisgICAgICAgIHZhciBs
aW5lTnVtYmVyID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICB2YXIgY29sdW1uID0gMDsK
KyAgICAgICAgaWYgKGxpbmVSb3cuaXNDaHVuaykgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBj
aHVuay4KKyAgICAgICAgICAgIHZhciB0ZXh0ID0gbGluZVJvdy5sYXN0Q2hpbGQudGV4dENvbnRl
bnQ7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9mZnNldDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uKys7IAorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogbGluZU51bWJlciwgY29sdW1u
OiBjb2x1bW4gfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgaXMgaW5kaXZpZHVsIGxp
bmUuCisgICAgICAgIHZhciBjb2x1bW4gPSAwOworICAgICAgICB2YXIgbm9kZSA9IGxpbmVSb3cu
bGFzdENoaWxkLnRyYXZlcnNlTmV4dFRleHROb2RlKGNvbnRhaW5lcik7CisgICAgICAgIHdoaWxl
IChub2RlICYmIG5vZGUgIT09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgY29sdW1uICs9IG5v
ZGUudGV4dENvbnRlbnQubGVuZ3RoOworICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VO
ZXh0VGV4dE5vZGUoY29udGFpbmVyKTsKKyAgICAgICAgfQorICAgICAgICBjb2x1bW4gKz0gb2Zm
c2V0OworICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lUm93LmxpbmVOdW1iZXIsIGNvbHVtbjog
Y29sdW1uIH07CisgICAgfSwKKworICAgIF9jcmVhdGVMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVt
YmVyKQorICAgIHsKKyAgICAgICAgdmFyIGRpZ2l0cyA9IHRoaXMuX2RlY2ltYWxEaWdpdHMobGlu
ZU51bWJlciArIDEpOworICAgICAgICB2YXIgdG90YWxEaWdpdHMgPSB0aGlzLl9kZWNpbWFsRGln
aXRzKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKKyAgICAgICAgdmFyIG51bWJlciA9ICIi
OworICAgICAgICBmb3IgKHZhciBpID0gZGlnaXRzOyBpIDwgdG90YWxEaWdpdHM7ICsraSkgewor
ICAgICAgICAgICAgbnVtYmVyICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICBudW1iZXIgKz0g
bGluZU51bWJlciArIDE7CisKKyAgICAgICAgdmFyIGxpbmVOdW1iZXJFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgbGluZU51bWJlckVsZW1lbnQudGV4dENv
bnRlbnQgPSBudW1iZXI7CisgICAgICAgIGxpbmVOdW1iZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ3
ZWJraXQtbGluZS1udW1iZXIiOworCisgICAgICAgIHZhciBsaW5lVGV4dEVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICBsaW5lVGV4dEVsZW1lbnQuY2xhc3NO
YW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOworCisgICAgICAgIHZhciBsaW5lUm93ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChs
aW5lTnVtYmVyRWxlbWVudCk7CisgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZVRleHRF
bGVtZW50KTsKKyAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAg
ICAgcmV0dXJuIGxpbmVSb3c7CisgICAgfSwKKworICAgIF9wYWludExpbmU6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgdHIgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0
cmlidXRlKGxpbmVOdW1iZXIsICJsaW5lLXRyIik7CisgICAgICAgIGlmICghdHIpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGVsZW1lbnQgPSB0ci5sYXN0Q2hpbGQ7CisgICAg
ICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcikgKyAiXHUyMDBC
IjsKKworICAgICAgICB2YXIgaGlnaGxpZ2h0ZXJTdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRB
dHRyaWJ1dGUobGluZU51bWJlciwgImhpZ2hsaWdodGVyLXN0YXRlIik7CisgICAgICAgIGlmICgh
aGlnaGxpZ2h0ZXJTdGF0ZSkgeworICAgICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IGxp
bmU7CisgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhpcy5fcmFuZ2VUb01h
cmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVyKQorICAgICAgICAgICAgICAgIHRoaXMuX21hcmtS
YW5nZShlbGVtZW50LCBsaW5lLCB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5f
cmFuZ2VUb01hcmsuZW5kQ29sdW1uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgcGxhaW5U
ZXh0U3RhcnQgPSAtMTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsp
IHsKKyAgICAgICAgICAgIGlmIChqID4gMTAwMCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMg
bGluZSBpcyB0b28gbG9uZyAtIGRvIG5vdCB3YXN0ZSBjeWNsZXMgb24gbWluaWZpZWQganMgaGln
aGxpZ2h0aW5nLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIGF0dHJpYnV0ZSA9IGhpZ2hsaWdodGVyU3RhdGUgJiYgaGlnaGxpZ2h0ZXJTdGF0
ZS5hdHRyaWJ1dGVzW2pdOworICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUgfHwgIWF0dHJpYnV0
ZS5zdHlsZSkgeworICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRTdGFydCA9PT0gLTEpCisg
ICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gajsKKyAgICAgICAgICAgICAgICBq
Kys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRT
dGFydCAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgaikp
KTsKKyAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSAtMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVT
cGFuKGxpbmUuc3Vic3RyaW5nKGosIGogKyBhdHRyaWJ1dGUubGVuZ3RoKSwgYXR0cmlidXRlLnRv
a2VuVHlwZSkpOworICAgICAgICAgICAgICAgIGogKz0gYXR0cmlidXRlLmxlbmd0aDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0xKQor
ICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShs
aW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5sZW5ndGgpKSk7CisgICAgICAgIGlm
ICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxp
bmVOdW1iZXIpCisgICAgICAgICAgICB0aGlzLl9tYXJrUmFuZ2UoZWxlbWVudCwgbGluZSwgdGhp
cy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbik7
CisgICAgfSwKKworICAgIF9jcmVhdGVTcGFuOiBmdW5jdGlvbihjb250ZW50LCBjbGFzc05hbWUp
CisgICAgeworICAgICAgICBpZiAoY2xhc3NOYW1lID09PSAiaHRtbC1yZXNvdXJjZS1saW5rIiB8
fCBjbGFzc05hbWUgPT09ICJodG1sLWV4dGVybmFsLWxpbmsiKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2NyZWF0ZUxpbmsoY29udGVudCwgY2xhc3NOYW1lID09PSAiaHRtbC1leHRlcm5hbC1s
aW5rIik7CisKKyAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgIHNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC0iICsgY2xhc3NOYW1lOworICAg
ICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpKTsK
KyAgICAgICAgcmV0dXJuIHNwYW47CisgICAgfSwKKworICAgIF9jcmVhdGVMaW5rOiBmdW5jdGlv
bihjb250ZW50LCBpc0V4dGVybmFsKQorICAgIHsKKyAgICAgICAgdmFyIHF1b3RlID0gY29udGVu
dC5jaGFyQXQoMCk7CisgICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDEgJiYgKHF1b3RlID09
PSAiXCIiIHx8ICAgcXVvdGUgPT09ICInIikpCisgICAgICAgICAgICBjb250ZW50ID0gY29udGVu
dC5zdWJzdHJpbmcoMSwgY29udGVudC5sZW5ndGggLSAxKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcXVvdGUgPSBudWxsOworCisgICAgICAgIHZhciBhID0gV2ViSW5zcGVjdG9yLmxpbmtp
ZnlVUkxBc05vZGUodGhpcy5fcmV3cml0ZUhyZWYoY29udGVudCksIGNvbnRlbnQsIG51bGwsIGlz
RXh0ZXJuYWwpOworICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKyAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZh
bHVlIjsKKyAgICAgICAgaWYgKHF1b3RlKQorICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShxdW90ZSkpOworICAgICAgICBzcGFuLmFwcGVuZENoaWxk
KGEpOworICAgICAgICBpZiAocXVvdGUpCisgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7CisgICAgICAgIHJldHVybiBzcGFuOworICAg
IH0sCisKKyAgICBfcmV3cml0ZUhyZWY6IGZ1bmN0aW9uKGhyZWZWYWx1ZSwgaXNFeHRlcm5hbCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fdXJsIHx8ICFocmVmVmFsdWUgfHwgaHJlZlZhbHVl
LmluZGV4T2YoIjovLyIpID4gMCkKKyAgICAgICAgICAgIHJldHVybiBocmVmVmFsdWU7CisgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5fdXJsLCBocmVmVmFsdWUp
OworICAgIH0sCisKKyAgICBfbWFya1JhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBsaW5lVGV4dCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBtYXJrTm9kZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgbWFya05vZGUuY2xhc3NOYW1l
ID0gIndlYmtpdC1tYXJrdXAiOworICAgICAgICBtYXJrTm9kZS50ZXh0Q29udGVudCA9IGxpbmVU
ZXh0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgICAgICB2YXIgbWFy
a0xlbmd0aCA9IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0OworICAgICAgICB2YXIgYm91bmRhcnkg
PSBlbGVtZW50LnJhbmdlQm91bmRhcnlGb3JPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgICAgICB2
YXIgdGV4dE5vZGUgPSBib3VuZGFyeS5jb250YWluZXI7CisgICAgICAgIHZhciB0ZXh0ID0gdGV4
dE5vZGUudGV4dENvbnRlbnQ7CisKKyAgICAgICAgaWYgKGJvdW5kYXJ5Lm9mZnNldCArIG1hcmtM
ZW5ndGggPCB0ZXh0Lmxlbmd0aCkgeworICAgICAgICAgICAgLy8gU2VsZWN0aW9uIGJlbG9uZyB0
byBhIHNpbmdsZSBzcGxpdCBtb2RlLgorICAgICAgICAgICAgdGV4dE5vZGUudGV4dENvbnRlbnQg
PSB0ZXh0LnN1YnN0cmluZyhib3VuZGFyeS5vZmZzZXQgKyBtYXJrTGVuZ3RoKTsKKyAgICAgICAg
ICAgIHRleHROb2RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKG1hcmtOb2RlLCB0ZXh0Tm9k
ZSk7CisgICAgICAgICAgICB2YXIgcHJlZml4Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHRleHQuc3Vic3RyaW5nKDAsIGJvdW5kYXJ5Lm9mZnNldCkpOworICAgICAgICAgICAgdGV4dE5v
ZGUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUocHJlZml4Tm9kZSwgbWFya05vZGUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQg
PSB0ZXh0Tm9kZS5wYXJlbnRFbGVtZW50OworICAgICAgICB2YXIgYW5jaG9yRWxlbWVudCA9IHRl
eHROb2RlLm5leHRTaWJsaW5nOworCisgICAgICAgIG1hcmtMZW5ndGggLT0gdGV4dC5sZW5ndGgg
LSBib3VuZGFyeS5vZmZzZXQ7CisgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gdGV4dC5z
dWJzdHJpbmcoMCwgYm91bmRhcnkub2Zmc2V0KTsKKyAgICAgICAgdGV4dE5vZGUgPSB0ZXh0Tm9k
ZS50cmF2ZXJzZU5leHRUZXh0Tm9kZShlbGVtZW50KTsKKworICAgICAgICB3aGlsZSAodGV4dE5v
ZGUpIHsKKyAgICAgICAgICAgIHZhciB0ZXh0ID0gdGV4dE5vZGUudGV4dENvbnRlbnQ7CisgICAg
ICAgICAgICBpZiAobWFya0xlbmd0aCA8IHRleHQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
dGV4dE5vZGUudGV4dENvbnRlbnQgPSB0ZXh0LnN1YnN0cmluZyhtYXJrTGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWFya0xlbmd0
aCAtPSB0ZXh0Lmxlbmd0aDsKKyAgICAgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gIiI7
CisgICAgICAgICAgICB0ZXh0Tm9kZSA9IHRleHROb2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGVs
ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUo
bWFya05vZGUsIGFuY2hvckVsZW1lbnQpOworICAgIH0sCisKKyAgICBfZGVjaW1hbERpZ2l0czog
ZnVuY3Rpb24obnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hdGguY2VpbChNYXRoLmxv
ZyhudW1iZXIgKyAxKSAvIE1hdGgubG9nKDEwKSk7CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0KK30KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggNzY1ZjliNC4uZWZhMmJmYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTM5LDcgKzM5LDYgQEAK
ICAgICA8ZmlsZT5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzPC9maWxlPgogICAgIDxmaWxl
PktleWJvYXJkU2hvcnRjdXQuanM8L2ZpbGU+CiAgICAgPGZpbGU+TWV0cmljc1NpZGViYXJQYW5l
LmpzPC9maWxlPgotICAgIDxmaWxlPk5hdGl2ZVRleHRWaWV3ZXIuanM8L2ZpbGU+CiAgICAgPGZp
bGU+T2JqZWN0LmpzPC9maWxlPgogICAgIDxmaWxlPk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpz
PC9maWxlPgogICAgIDxmaWxlPk9iamVjdFByb3h5LmpzPC9maWxlPgpAQCAtNzUsMTAgKzc0LDEw
IEBACiAgICAgPGZpbGU+U3R5bGVzU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+U3Vt
bWFyeUJhci5qczwvZmlsZT4KICAgICA8ZmlsZT5UZXN0Q29udHJvbGxlci5qczwvZmlsZT4KLSAg
ICA8ZmlsZT5UZXh0RWRpdG9yLmpzPC9maWxlPgogICAgIDxmaWxlPlRleHRFZGl0b3JIaWdobGln
aHRlci5qczwvZmlsZT4KICAgICA8ZmlsZT5UZXh0RWRpdG9yTW9kZWwuanM8L2ZpbGU+CiAgICAg
PGZpbGU+VGV4dFByb21wdC5qczwvZmlsZT4KKyAgICA8ZmlsZT5UZXh0Vmlld2VyLmpzPC9maWxl
PgogICAgIDxmaWxlPlRpbWVsaW5lQWdlbnQuanM8L2ZpbGU+CiAgICAgPGZpbGU+VGltZWxpbmVH
cmlkLmpzPC9maWxlPgogICAgIDxmaWxlPlRpbWVsaW5lT3ZlcnZpZXdQYW5lLmpzPC9maWxlPgpA
QCAtOTIsNyArOTEsNyBAQAogICAgIDxmaWxlPmF1ZGl0cy5jc3M8L2ZpbGU+CiAgICAgPGZpbGU+
aW5zcGVjdG9yLmNzczwvZmlsZT4KICAgICA8ZmlsZT5pbnNwZWN0b3JTeW50YXhIaWdobGlnaHQu
Y3NzPC9maWxlPgotICAgIDxmaWxlPnRleHRFZGl0b3IuY3NzPC9maWxlPgorICAgIDxmaWxlPnRl
eHRWaWV3ZXIuY3NzPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9iYWNrLnBuZzwvZmlsZT4KICAg
ICA8ZmlsZT5JbWFnZXMvY2hlY2tlci5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2NsZWFy
Q29uc29sZUJ1dHRvbkdseXBoLnBuZzwvZmlsZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5jc3MKaW5kZXggYjdkODliZi4uYWIxN2U1YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKQEAgLTM3NzksNyArMzc3OSw3IEBAIG9sLmJyZWFr
cG9pbnQtbGlzdCB7CiAgICAgd2hpdGUtc3BhY2U6IHByZTsKIH0KIAotLnNvdXJjZS1icmVha3Bv
aW50LWNvbmRpdGlvbiB7Cisuc291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9uIHsKICAg
ICB6LWluZGV4OiAzMDsKICAgICBwYWRkaW5nOiA0cHg7CiAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDIwMywgMjI2LCAyNTUpOwpAQCAtMzc4OCw3ICszNzg4LDcgQEAgb2wuYnJlYWtwb2ludC1s
aXN0IHsKICAgICB3aWR0aDogOTAlOyAKIH0KIAotLnNvdXJjZS1icmVha3BvaW50LW1lc3NhZ2Ug
eworLnNvdXJjZS1mcmFtZS1icmVha3BvaW50LW1lc3NhZ2UgewogICAgIGJhY2tncm91bmQtY29s
b3I6IHRyYW5zcGFyZW50OwogICAgIGZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlLCBzYW5zLXNl
cmlmOyAKICAgICBmb250LXdlaWdodDogbm9ybWFsOwpAQCAtMzgwMCw3ICszODAwLDcgQEAgb2wu
YnJlYWtwb2ludC1saXN0IHsKICAgICBtYXJnaW46IDAgMCAycHggMDsgCiB9CiAKLSNzb3VyY2Ut
YnJlYWtwb2ludC1jb25kaXRpb24geworI3NvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlv
biB7CiAgICAgbWFyZ2luOiAwOwogICAgIGJvcmRlcjogMXB4IGluc2V0IHJnYigxOTAsIDE5MCwg
MTkwKSAhaW1wb3J0YW50OwogICAgIHdpZHRoOiAxMDAlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDBkZWU4ZjIuLjRkZGQxMGUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTMwLDcgKzMwLDcgQEAgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KIDxoZWFkPgogICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSJhdWRpdHMuY3NzIj4KLSAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ0ZXh0RWRpdG9yLmNzcyI+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0idGV4dFZpZXdlci5jc3MiPgog
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imluc3BlY3Rv
ci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9
Imluc3BlY3RvclN5bnRheEhpZ2hsaWdodC5jc3MiPgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9InV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CkBAIC05Nyw5ICs5Nyw4IEBA
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNl
RnJhbWUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkRPTVN5bnRheEhpZ2hsaWdodGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0RWRpdG9yTW9kZWwuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3IuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3JI
aWdobGlnaHRlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iTmF0aXZlVGV4dFZpZXdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVGV4dFZpZXdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlVG9rZW5pemVyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VDU1NU
b2tlbml6ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IlNvdXJjZUhUTUxUb2tlbml6ZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzQ5NWYyLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0
RWRpdG9yLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS50ZXh0LWVkaXRvciB7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDowOwotICAgIGxlZnQ6MDsKLSAgICBy
aWdodDowOwotICAgIGJvdHRvbTowOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci0g
ICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsKLX0KLQot
LnRleHQtZWRpdG9yLXJlYWRvbmx5IHsKLSAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9u
bHk7Ci19Ci0KLS50ZXh0LWVkaXRvci1jYW52YXMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6MDsKLSAgICBsZWZ0OjA7Ci0gICAgcmlnaHQ6MDsKLSAgICBib3R0b206MDsKLSAg
ICB6LWluZGV4OiAxMDsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLX0KLQotLnRleHQtZWRp
dG9yLWNvbnRhaW5lciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDowOwotICAg
IGxlZnQ6MDsKLSAgICByaWdodDowOwotICAgIGJvdHRvbTowOwotICAgIG92ZXJmbG93OiBhdXRv
OwotfQotCi0udGV4dC1lZGl0b3ItY3Vyc29yIHsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBu
b25lOwotICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29s
dXRlOwotICAgIHRvcDowOwotICAgIGxlZnQ6MDsKLSAgICB3aWR0aDoxcHg7Ci0gICAgaGVpZ2h0
OiAxNHB4OwotICAgIHotaW5kZXg6IDIwOwotICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwot
ICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwotfQotCi0ubmF0aXZlLXRleHQtZWRpdG9yLWxpbmUg
ewotICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJs
ZSB7Ci0gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBibGFjayAwcHggMnB4IDVweDsKLSAgICAtd2Vi
a2l0LWJvcmRlci1yYWRpdXM6IDlweDsKLSAgICAtd2Via2l0LWJvcmRlci1maXQ6IGxpbmVzOwot
ICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICBmb250LWZhbWlseTogTHVjaWRhIEdyYW5kZSwgc2Fu
cy1zZXJpZjsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBtYXJnaW46IDZweCAyNXB4Owot
ICAgIHBhZGRpbmc6IDAgN3B4IDFweDsKLSAgICB6LWluZGV4OjIwOwotfQotCi0ud2Via2l0LWh0
bWwtd2FybmluZy1tZXNzYWdlIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwgNjIl
LCA0MiUpOwotICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxMDAlLCA1MiUsIDIxJSk7Ci19Ci0K
LS53ZWJraXQtaHRtbC1lcnJvci1tZXNzYWdlIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Io
MTAwJSwgNDIlLCA0MiUpOwotICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxMDAlLCAzMSUsIDMx
JSk7Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdlLWxpbmUgewotICAgIHBhZGRpbmctbGVmdDog
MjNweDsKLSAgICB0ZXh0LWluZGVudDogLTIwcHg7Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdl
LWxpbmUtaG92ZXIgewotICAgIHBhZGRpbmctbGVmdDogMjNweDsKLSAgICB0ZXh0LWluZGVudDog
LTIwcHg7Ci0gICAgd2hpdGUtc3BhY2U6IGF1dG87Ci0gICAgdGV4dC1vdmVyZmxvdzogYXV0bzsK
LSAgICBvdmVyZmxvdzogYXV0bzsKLX0KLQotLndlYmtpdC1odG1sLW1lc3NhZ2UtaWNvbiB7Ci0g
ICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDogMnB4OwotICAgIG1hcmdpbjogMCA0cHg7
Ci19CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5j
c3MgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0ODI4OQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcwpAQCAtMCwwICsxLDEzNCBA
QAorLnRleHQtZWRpdG9yIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOjA7Cisg
ICAgbGVmdDowOworICAgIHJpZ2h0OjA7CisgICAgYm90dG9tOjA7CisgICAgd2hpdGUtc3BhY2U6
IHByZS13cmFwOworICAgIG92ZXJmbG93OiBhdXRvOworfQorCisudGV4dC1lZGl0b3ItbGluZXMg
eworICAgIGJvcmRlcjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjog
YmFzZWxpbmU7CisgICAgLXdlYmtpdC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nOiAwOworICAg
IC13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmc6IDA7CisgICAgLXdlYmtpdC11c2VyLXNl
bGVjdDogdGV4dDsKK30KKworLndlYmtpdC1odG1sLW1lc3NhZ2UtYnViYmxlIHsKKyAgICAtd2Vi
a2l0LWJveC1zaGFkb3c6IGJsYWNrIDBweCAycHggNXB4OworICAgIC13ZWJraXQtYm9yZGVyLXJh
ZGl1czogOXB4OworICAgIC13ZWJraXQtYm9yZGVyLWZpdDogbGluZXM7CisgICAgZm9udC1zaXpl
OiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlLCBzYW5zLXNlcmlmOworICAg
IGZvbnQtd2VpZ2h0OiBib2xkOworICAgIG1hcmdpbjogNnB4IDI1cHg7CisgICAgcGFkZGluZzog
MCA3cHggMXB4OworICAgIHotaW5kZXg6MjA7CisgICAgbWF4LXdpZHRoOiA4MCU7CisgICAgCit9
CisKKy53ZWJraXQtaHRtbC13YXJuaW5nLW1lc3NhZ2UgeworICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYigxMDAlLCA2MiUsIDQyJSk7CisgICAgYm9yZGVyOiAycHggc29saWQgcmdiKDEwMCUsIDUy
JSwgMjElKTsKK30KKworLndlYmtpdC1odG1sLWVycm9yLW1lc3NhZ2UgeworICAgIGJhY2tncm91
bmQtY29sb3I6IHJnYigxMDAlLCA0MiUsIDQyJSk7CisgICAgYm9yZGVyOiAycHggc29saWQgcmdi
KDEwMCUsIDMxJSwgMzElKTsKK30KKworLndlYmtpdC1odG1sLW1lc3NhZ2UtbGluZSB7CisgICAg
cGFkZGluZy1sZWZ0OiAyM3B4OworICAgIHRleHQtaW5kZW50OiAtMjBweDsKK30KKworLndlYmtp
dC1odG1sLW1lc3NhZ2UtbGluZS1ob3ZlciB7CisgICAgcGFkZGluZy1sZWZ0OiAyM3B4OworICAg
IHRleHQtaW5kZW50OiAtMjBweDsKKyAgICB3aGl0ZS1zcGFjZTogYXV0bzsKKyAgICB0ZXh0LW92
ZXJmbG93OiBhdXRvOworICAgIG92ZXJmbG93OiBhdXRvOworfQorCisud2Via2l0LWh0bWwtbWVz
c2FnZS1pY29uIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgdG9wOiAycHg7CisgICAg
bWFyZ2luOiAwIDRweDsKK30KKworLndlYmtpdC1saW5lLW51bWJlciB7CisgICAgY29sb3I6IHJn
YigxMjgsIDEyOCwgMTI4KTsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICB3aGl0ZS1zcGFj
ZTogcHJlOworICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDAsIDI0MCwgMjQwKTsKKyAgICBi
b3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2IoMTg3LCAxODcsIDE4NykgIWltcG9ydGFudDsKKyAg
ICBwYWRkaW5nLWxlZnQ6IDJweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAycHg7CisgICAgdmVydGlj
YWwtYWxpZ246IHRvcDsKKyAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICAgIGJh
Y2tncm91bmQtcG9zaXRpb246IHJpZ2h0IDFweDsKK30KKworLndlYmtpdC1leGVjdXRpb24tbGlu
ZSAud2Via2l0LWxpbmUtbnVtYmVyIHsKKwljb2xvcjogdHJhbnNwYXJlbnQ7CisJYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1jYW52YXMocHJvZ3JhbS1jb3VudGVyKTsKK30KKworLndlYmtpdC1i
cmVha3BvaW50IC53ZWJraXQtbGluZS1udW1iZXIgeworICAgIGNvbG9yOiB3aGl0ZTsKKyAgICBi
YWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNhbnZhcyhicmVha3BvaW50KTsKK30KKworLndlYmtp
dC1icmVha3BvaW50LWRpc2FibGVkIC53ZWJraXQtbGluZS1udW1iZXIgeworICAgIGNvbG9yOiB3
aGl0ZTsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNhbnZhcyhicmVha3BvaW50LWRp
c2FibGVkKTsKK30KKworLndlYmtpdC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24tbGluZSAu
d2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgYmFja2dy
b3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1wcm9ncmFtLWNvdW50ZXIpOwor
fQorCisud2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQud2Via2l0LWV4ZWN1dGlvbi1saW5lIC53
ZWJraXQtbGluZS1udW1iZXIgeworICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICBiYWNrZ3Jv
dW5kLWltYWdlOiAtd2Via2l0LWNhbnZhcyhicmVha3BvaW50LWRpc2FibGVkLXByb2dyYW0tY291
bnRlcik7Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludC53ZWJraXQtYnJlYWtwb2ludC1jb25kaXRp
b25hbCAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgYmFja2dy
b3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1jb25kaXRpb25hbCk7Cit9CisK
Ky53ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZC53ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25h
bCAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1kaXNhYmxlZC1jb25kaXRpb25hbCk7
Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludC53ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbC53
ZWJraXQtZXhlY3V0aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlciB7CisgICAgY29sb3I6IHRy
YW5zcGFyZW50OworICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFzKGJyZWFrcG9p
bnQtY29uZGl0aW9uYWwtcHJvZ3JhbS1jb3VudGVyKTsKK30KKworLndlYmtpdC1icmVha3BvaW50
LWRpc2FibGVkLndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsLndlYmtpdC1leGVjdXRpb24t
bGluZSAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CisgICAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1kaXNhYmxlZC1jb25k
aXRpb25hbC1wcm9ncmFtLWNvdW50ZXIpOworfQorCisud2Via2l0LWV4ZWN1dGlvbi1saW5lIC53
ZWJraXQtbGluZS1jb250ZW50IHsKKwliYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTcxLCAxOTEsIDI1
NCk7CisJb3V0bGluZTogMXB4IHNvbGlkIHJnYig2NCwgMTE1LCAyNDQpOworfQorCisud2Via2l0
LW1hcmt1cCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MSwgMjM0LCAwKTsKK30KKwor
LndlYmtpdC1oaWdobGlnaHRlZC1saW5lIC53ZWJraXQtbGluZS1jb250ZW50IHsKKwliYWNrZ3Jv
dW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL3V0aWxpdGllcy5qcwppbmRleCBkNTQwMDVhLi42ZTJmNzIwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAgLTE0NSw2ICsxNDUsMzAgQEAgTm9kZS5wcm90
b3R5cGUucmFuZ2VPZldvcmQgPSBmdW5jdGlvbihvZmZzZXQsIHN0b3BDaGFyYWN0ZXJzLCBzdGF5
V2l0aGluTm9kZSwgZGkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitOb2RlLnByb3RvdHlwZS50
cmF2ZXJzZU5leHRUZXh0Tm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4sIGlnbm9yZUNsYXNzKQor
eworICAgIHZhciBub2RlID0gdGhpcy50cmF2ZXJzZU5leHROb2RlKHN0YXlXaXRoaW4pOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5u
b2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpCisgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNl
TmV4dE5vZGUoc3RheVdpdGhpbik7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworTm9kZS5wcm90
b3R5cGUucmFuZ2VCb3VuZGFyeUZvck9mZnNldCA9IGZ1bmN0aW9uKG9mZnNldCkKK3sKKyAgICB2
YXIgbm9kZSA9IHRoaXMudHJhdmVyc2VOZXh0VGV4dE5vZGUodGhpcyk7CisgICAgd2hpbGUgKG5v
ZGUgJiYgb2Zmc2V0ID4gbm9kZS5ub2RlVmFsdWUubGVuZ3RoKSB7CisgICAgICAgIG9mZnNldCAt
PSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7CisgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4
dFRleHROb2RlKHRoaXMpOworICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBu
dWxsOworICAgIHJldHVybiB7IGNvbnRhaW5lcjogbm9kZSwgb2Zmc2V0OiBvZmZzZXQgfTsKK30K
KwogRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFt
ZSkgCiB7CiAgICAgLy8gVGVzdCBmb3IgdGhlIHNpbXBsZSBjYXNlIGZpcnN0Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48525</attachid>
            <date>2010-02-10 15:38:36 -0800</date>
            <delta_ts>2010-02-11 00:02:17 -0800</delta_ts>
            <desc>[PATCH] Proposed change (same with style fixes).</desc>
            <filename>chunks</filename>
            <type>text/plain</type>
            <size>126203</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTcxMzU5NC4uNjgxODIwNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTkgQEAKKzIwMTAtMDItMTAgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc3BsaXQgc291cmNlIGNvZGUgaW50
byBjaHVua3MgaW4gb3JkZXIgdG8gaW1wcm92ZSB0ZXh0CisgICAgICAgIHZpZXdlciBwZXJmb3Jt
YW5jZSBvbiBsYXJnZSBmaWxlcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzQ4MTYKKworICAgICAgICBUaGlzIGNoYW5nZSBicmluZ3MgYmFjayBT
b3VyY2VGcmFtZSdzIGNhbnZhcytzdHlsZSBtYWdpYywgcmVzdG9yZXMgbGluZQorICAgICAgICB3
cmFwcGluZyBhbmQgbWFrZXMgdGhpbmdzIGEgbG90IGxpa2UgdGhleSB1c2VkIHRvIGJlLgorICAg
ICAgICBJdCByZW1vdmVzIFRleHRFZGl0b3IgZm9yIG5vdyBhbmQgcmVuYW1lcyBOYXRpdmVUZXh0
Vmlld2VyIGludG8gVGV4dFZpZXdlci4KKyAgICAgICAgVGV4dFZpZXdlciBpcyBubyBsb25nZXIg
ZGVyaXZlZCBmcm9tIFRleHRFZGl0b3IuCisgICAgICAgIFRoaXMgVGV4dFZpZXdlciBpcyBzdGls
bCBiYXNlZCBvbiBUZXh0RWRpdG9yTW9kZWwsIG5vIGlmcmFtZXMgYXJlIGludm9sdmVkLgorCisg
ICAgICAgIEluc3RlYWQgb2YgY3JlYXRpbmcgZGl2IHBlciBsaW5lLCBUZXh0Vmlld2VyIHNwbGl0
cyBzb3VyY2UgY29kZSBpbnRvIDUwIGxpbmUKKyAgICAgICAgY2h1bmtzLiBVcG9uIHNjcm9sbCBl
dmVudCwgdmlzaWJsZSBjaHVua3MgYXJlIHNoYXJkZWQgaW50byBsaW5lcyBhbmQgaW5kaXZpZHVh
bAorICAgICAgICBsaW5lcyBhcmUgaGlnaGxpZ2h0ZWQuIFdoZW5ldmVyIGhpZ2hsaWdodGVkIHJl
Z2lvbiBnZXRzIG91dHNpZGUgb2YgdGhlIHZpc2libGUKKyAgICAgICAgYXJlYSwgaGlnaGxpZ2h0
IHNwYW5zIGFyZSB0aHJvd24gYXdheSBhbmQgcmVnaW9uIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9y
aWdpbmFsCisgICAgICAgIHBsYWluIHRleHQgY2h1bmsuCisKKyAgICAgICAgQ29tcGxleCBzdHVm
ZjoKKyAgICAgICAgLSBXaGVuZXZlciB0aGVyZSBpcyBhIG5lZWQgdG8gbWFuaXB1bGF0ZSBpbmRp
dmlkdWFsIGxpbmVzIChhZGQgbWVzc2FnZSBidWJibGUgLworICAgICAgICBzZXQgYnJlYWtwb2lu
dCAvIHJldmVhbCAvIGV0Yy4pLCBpbmRpdmlkdWFsIGNodW5rcyBmb3Igc3VjaCBsaW5lcyBhcmUg
Y3JlYXRlZC4KKyAgICAgICAgLSBUaGVyZSBpcyBhbHNvIGFuIGltcGxpY2l0IG1hY2hpbmVyeSB0
aGF0IGlzIG1haW50YWluaW5nIHNlbGVjdGlvbiB3aGVuIGl0CisgICAgICAgIGdvZXMgYmV5b25k
IHRoZSB2aXNpYmxlIGFyZWEuCisgICAgICAgIC0gU2VhcmNoIG9jY3VycmVuY2VzIGFyZSBpbXBs
ZW1lbnRlZCBhcyBhcnRpZmljaWFsIHNwYW5zIGludGVyd2VhdmluZworICAgICAgICBoaWdobGln
aHRpbmcgbWFya3VwLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
TmF0aXZlVGV4dFZpZXdlci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1NjcmlwdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
c2V0IHZpc2libGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5zZXQgZXhlY3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLnJldmVhbExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmFkZE1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2l6ZVRvRml0Q29udGVudEhlaWdodCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnNldENvbnRlbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2NyZWF0ZVZpZXdl
cklmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
bWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuY2xlYXJNYXJrZWRSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlLl9icmVha3BvaW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl91cGRhdGVFeGVjdXRpb25MaW5lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2FkZE1lc3NhZ2VUb1NvdXJjZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9hZGRFeGlzdGlu
Z0JyZWFrcG9pbnRzVG9Tb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludFRvU291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291cmNlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX21vdXNlRG93bik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9lZGl0QnJlYWtwb2lu
dENvbmRpdGlvbi5jb21taXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24uZGlzbWlzc2VkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0
aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX3Nob3dC
cmVha3BvaW50Q29uZGl0aW9uUG9wdXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5fY3JlYXRlQ29uZGl0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9rZXlEb3duKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUucmVzaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4dCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9kcmF3UHJvZ3JhbUNv
dW50ZXJJbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuX2RyYXdCcmVha3BvaW50SW1hZ2VzSWZOZWVkZWQuZHJhd0JyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fZHJhd0JyZWFrcG9p
bnRJbWFnZXNJZk5lZWRlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VW
aWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX2p1bXBUb1NlYXJjaFJl
c3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qczogQWRkZWQu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuc2V0IG1pbWVUeXBlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5nZXQgdGV4dE1vZGVsKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5yZXZlYWxMaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5hZGREZWNvcmF0aW9uKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5yZW1vdmVEZWNvcmF0aW9uKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5tYXJrQW5kUmV2ZWFsUmFuZ2Up
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmhpZ2hsaWdodExp
bmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl90ZXh0Q2hh
bmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2NyZWF0
ZUNodW5rUm93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5f
bWFrZUxpbmVBQ2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLl9pbmRleENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90
b3R5cGUuX2hpZ2hsaWdodENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIucHJvdG90eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIu
cHJvdG90eXBlLnNldENvYWxlc2NpbmdVcGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRWaWV3ZXIucHJvdG90eXBlLl9yZXBhaW50QWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0Vmlld2VyLnByb3RvdHlwZS5fY2h1bmtGb3JPZmZzZXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9jaHVua051bWJlckZvckxpbmUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9jaHVua1N0YXJ0TGluZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX3Jlc3RvcmVDaHVua3MpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9yZXBhaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fcmVzdG9yZVNlbGVj
dGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX3NlbGVj
dGlvblRvUG9zaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLl9jcmVhdGVMaW5lUm93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnBy
b3RvdHlwZS5fcGFpbnRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnBy
b3RvdHlwZS5fY3JlYXRlU3Bhbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUuX2NyZWF0ZUxpbmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIu
cHJvdG90eXBlLl9yZXdyaXRlSHJlZik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX21hcmtSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX2RlY2ltYWxEaWdpdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvdGV4dEVkaXRvci5jc3M6IFJlbW92ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzczogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanM6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS50
cmF2ZXJzZU5leHRUZXh0Tm9kZSk6CisgICAgICAgIChOb2RlLnByb3RvdHlwZS5yYW5nZUJvdW5k
YXJ5Rm9yT2Zmc2V0KToKKwogMjAxMC0wMi0xMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGJhZCBwYXRocyBpbiBXZWJDb3JlLnZjcHJvagpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAzOTQy
M2E3Li5jYTlmZDEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzczOSw3ICszNzM5LDYgQEAKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9LZXlib2FyZFNob3J0Y3V0LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVUZXh0Vmlld2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL09iamVjdC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9PYmpl
Y3RQcm94eS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9w
ZXJ0aWVzU2VjdGlvbi5qcycsCkBAIC0zNzc1LDEwICszNzc0LDEwIEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9TdW1tYXJ5QmFyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1Rlc3RDb250cm9sbGVyLmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRFZGl0b3IuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9UZXh0UHJvbXB0LmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Rl
eHRWaWV3ZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVB
Z2VudC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU92ZXJ2
aWV3UGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZUdy
aWQuanMnLApAQCAtMzc5Miw3ICszNzkxLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL2F1ZGl0cy5jc3MnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3JT
eW50YXhIaWdobGlnaHQuY3NzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3Rl
eHRFZGl0b3IuY3NzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3
ZXIuY3NzJywKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmluc3BlY3Rvcl9pbWFnZV9maWxlcyc6
IFsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggODg1MzA0YS4uMjFk
ZjJiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mjg0OCwxMCAr
NDI4NDgsNiBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxOYXRpdmVUZXh0Vmlld2VyLmpzIg0KLQkJ
CQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcT2JqZWN0LmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAt
NDI5OTIsMjMgKzQyOTg4LDIzIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0b3IuanMi
DQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvckhp
Z2hsaWdodGVyLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvckhpZ2hsaWdodGVy
LmpzIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0
b3JNb2RlbC5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRFZGl0b3JNb2RlbC5qcyINCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0UHJvbXB0LmpzIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcdGV4dEVkaXRvci5jc3MiDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dFZpZXdlci5qcyINCiAJCQkJCT4NCiAJCQkJPC9G
aWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFRleHRQcm9tcHQuanMiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9u
dC1lbmRcdGV4dFZpZXdlci5jc3MiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUN
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlVGV4dFZpZXdl
ci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVUZXh0Vmlld2VyLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTdkYjI3Li4wMDAwMDAwCi0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVUZXh0Vmlld2VyLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1XZWJJbnNwZWN0b3IuTmF0aXZlVGV4dFZpZXdlciA9IGZ1bmN0aW9u
KHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ci5jYWxsKHRoaXMsIHRleHRNb2RlbCwgcGxhdGZvcm0pOwotICAgIHRoaXMuX3NoZWV0LnRhYklu
ZGV4ID0gMDsKLSAgICB0aGlzLl9jYW52YXMuc3R5bGUuekluZGV4ID0gMDsKLSAgICB0aGlzLl9j
cmVhdGVMaW5lRGl2cygpOwotICAgIHRoaXMuX3VybCA9IHVybDsKLSAgICB0aGlzLl9zZWxlY3Rp
b25Db2xvciA9ICJyZ2IoMjQxLCAyMzQsIDApIjsKLX0KLQotV2ViSW5zcGVjdG9yLk5hdGl2ZVRl
eHRWaWV3ZXIucHJvdG90eXBlID0gewotICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwgbGlz
dGVuZXIKLSAgICBfdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xk
VGV4dCwgbmV3VGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZUxpbmVEaXZzKCk7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fdGV4dENoYW5nZWQuY2Fs
bCh0aGlzLCBvbGRSYW5nZSwgbmV3UmFuZ2UsIG9sZFRleHQsIG5ld1RleHQpOwotICAgIH0sCi0K
LSAgICBfY3JlYXRlTGluZURpdnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Nv
bnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLl9zaGVldCk7Ci0gICAgICAgIHRoaXMuX3NoZWV0LnJl
bW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1v
ZGVsLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVEaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIGxpbmVEaXYuY2xhc3NOYW1lID0g
Im5hdGl2ZS10ZXh0LWVkaXRvci1saW5lIjsKLSAgICAgICAgICAgIHZhciB0ZXh0ID0gdGhpcy5f
dGV4dE1vZGVsLmxpbmUoaSk7Ci0gICAgICAgICAgICBsaW5lRGl2LnRleHRDb250ZW50ID0gdGV4
dDsKLSAgICAgICAgICAgIGlmICghdGV4dCkKLSAgICAgICAgICAgICAgICBsaW5lRGl2LnN0eWxl
Lm1pbkhlaWdodCA9IHRoaXMuX3RleHRMaW5lSGVpZ2h0ICsgInB4IjsKLSAgICAgICAgICAgIHRo
aXMuX3NoZWV0LmFwcGVuZENoaWxkKGxpbmVEaXYpOwotICAgICAgICAgICAgdGhpcy5fdGV4dE1v
ZGVsLnNldEF0dHJpYnV0ZShpLCAibGluZS1kaXYiLCBsaW5lRGl2KTsKLSAgICAgICAgICAgIHRo
aXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGUoaSwgImRpdi1oaWdobGlnaHRlZCIpOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9zaGVldCk7
Ci0gICAgfSwKLQotICAgIF91cGRhdGVQcmVmZXJyZWRTaXplOiBmdW5jdGlvbihzdGFydExpbmUs
IGVuZExpbmUpCi0gICAgewotICAgICAgICAvLyBQcmVmZXJyZWQgc2l6ZSBpcyBhdXRvbWF0aWNh
bGx5IGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGxpbmUgZGl2cy4KLSAgICAgICAgLy8gT25seSBo
YW5kbGUgbGluZSBudW1iZXJzIGhlcmUuCi0gICAgICAgIAotICAgICAgICB0aGlzLnNldENvYWxl
c2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHZhciBuZXdMaW5lTnVtYmVyRGlnaXRzID0gdGhp
cy5fZGVjaW1hbERpZ2l0cyh0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7Ci0gICAgICAgIHRo
aXMuX2xpbmVOdW1iZXJXaWR0aCA9IChuZXdMaW5lTnVtYmVyRGlnaXRzICsgMikgKiB0aGlzLl9k
aWdpdFdpZHRoOwotCi0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5sZWZ0ID0gdGhpcy5f
bGluZU51bWJlcldpZHRoICsgInB4IjsKLQotICAgICAgICB0aGlzLl9saW5lTnVtYmVyRGlnaXRz
ID0gbmV3TGluZU51bWJlckRpZ2l0czsKLSAgICAgICAgdGhpcy5yZXBhaW50QWxsKCk7Ci0KLSAg
ICAgICAgLy8gQ2hhbmdlcyB0byBzaXplIGNhbiBjaGFuZ2UgdGhlIGNsaWVudCBhcmVhIChzY3Jv
bGxlcnMgY2FuIGFwcGVhci9kaXNhcHBlYXIpCi0gICAgICAgIHRoaXMucmVzaXplKCk7Ci0gICAg
ICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9zY3Jv
bGw6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICAvLyBEbyBpbnN0YW50IHJlcGFpbnQgc28g
dGhhdCBvZmZzZXQgb2YgY2FudmFzIHdhcyBpbiBzeW5jIHdpdGggdGhlIHNoZWV0LgotICAgICAg
ICB0aGlzLl9yZXBhaW50T25TY3JvbGwoKTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyTW91c2VM
aXN0ZW5lcnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJpbmQodGhpcyksIGZh
bHNlKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIs
IHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9yZWdp
c3RlcktleWJvYXJkTGlzdGVuZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBOb29w
IC0gbGV0IGJyb3dzZXIgdGFrZSBjYXJlIG9mIHRoaXMuCi0gICAgfSwKLQotICAgIF9yZWdpc3Rl
ckNsaXBib2FyZExpc3RlbmVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gTm9vcCAt
IGxldCBicm93c2VyIHRha2UgY2FyZSBvZiB0aGlzLgotICAgIH0sCi0KLSAgICBfcG9zaXRpb25E
aXZEZWNvcmF0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBEaXYgZGVjb3JhdGlv
bnMgaGF2ZSBmaXhlZCBwb3NpdGlvbnMgaW4gb3VyIGNhc2UuCi0gICAgfSwKLQotICAgIF9yZWdp
c3RlclNob3J0Y3V0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gTm9vcC4KLSAgICB9
LAotCi0gICAgX21vdXNlRG93bjogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmIChlLnRh
cmdldCAhPT0gdGhpcy5lbGVtZW50IHx8IGUuYnV0dG9uID09PSAyIHx8ICh0aGlzLl9pc01hYyAm
JiBlLmN0cmxLZXkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9saW5lTnVt
YmVyRGVjb3JhdG9yLm1vdXNlRG93bih0aGlzLl9saW5lRm9yTW91c2VFdmVudChlKSwgZSk7Ci0g
ICAgfSwKLQotICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlm
IChlLnRhcmdldCAhPT0gdGhpcy5lbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB0aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9yLmNvbnRleHRNZW51KHRoaXMuX2xpbmVGb3JNb3Vz
ZUV2ZW50KGUpLCBlKTsKLSAgICB9LAotCi0gICAgX2xpbmVGb3JNb3VzZUV2ZW50OiBmdW5jdGlv
bihlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuX29mZnNldFRvTGlu
ZShlLm9mZnNldFkgKyB0aGlzLl9zY3JvbGxUb3ApIC0gMSk7Ci0gICAgfSwKLQotICAgIF9saW5l
SGVpZ2h0OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8gVXNlIGNhY2hl
ZCB2YWx1ZSBmaXJzdC4KLSAgICAgICAgaWYgKHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGluZU51
bWJlciArIDFdKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGlu
ZU51bWJlciArIDFdIC0gdGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lTnVtYmVyXTsKLQotICAg
ICAgICAvLyBHZXQgbWV0cmljcyBmcm9tIHRoZSBicm93c2VyLgotICAgICAgICB2YXIgZWxlbWVu
dCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImxpbmUtZGl2Iik7
Ci0gICAgICAgIGlmIChsaW5lTnVtYmVyICsgMSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
KSB7Ci0gICAgICAgICAgICB2YXIgbmV4dEVsZW1lbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0
cmlidXRlKGxpbmVOdW1iZXIgKyAxLCAibGluZS1kaXYiKTsKLSAgICAgICAgICAgIHJldHVybiBu
ZXh0RWxlbWVudC5vZmZzZXRUb3AgLSBlbGVtZW50Lm9mZnNldFRvcDsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodCAtIGVsZW1lbnQu
b2Zmc2V0VG9wOwotICAgIH0sCi0KLSAgICBfcGFpbnRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVy
LCBsaW5lT2Zmc2V0KQotICAgIHsKLSAgICAgICAgdmFyIGRpdkhpZ2hsaWdodGVkID0gdGhpcy5f
dGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWhpZ2hsaWdodGVkIik7Ci0g
ICAgICAgIGlmIChkaXZIaWdobGlnaHRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB2YXIgaGlnaGxpZ2h0ZXJTdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGlu
ZU51bWJlciwgImhpZ2hsaWdodGVyLXN0YXRlIik7Ci0gICAgICAgIGlmICghaGlnaGxpZ2h0ZXJT
dGF0ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3Rl
eHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwotICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3Rl
eHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImxpbmUtZGl2Iik7Ci0gICAgICAgIGVs
ZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAKLSAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0g
LTE7Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7Ci0gICAgICAg
ICAgICBpZiAoaiA+IDEwMDApIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGxpbmUgaXMgdG9v
IGxvbmcgLSBkbyBub3Qgd2FzdGUgY3ljbGVzIG9uIG1pbmlmaWVkIGpzIGhpZ2hsaWdodGluZy4K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBh
dHRyaWJ1dGUgPSBoaWdobGlnaHRlclN0YXRlICYmIGhpZ2hsaWdodGVyU3RhdGUuYXR0cmlidXRl
c1tqXTsKLSAgICAgICAgICAgIGlmICghYXR0cmlidXRlIHx8ICFhdHRyaWJ1dGUuc3R5bGUpIHsK
LSAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgPT09IC0xKQotICAgICAgICAgICAg
ICAgICAgICBwbGFpblRleHRTdGFydCA9IGo7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU3BhbihsaW5lLnN1
YnN0cmluZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0aCksIGF0dHJpYnV0ZS50b2tlblR5cGUpKTsK
LSAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkKLSAgICAgICAgICAg
IGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZS5zdWJzdHJp
bmcocGxhaW5UZXh0U3RhcnQsIGxpbmUubGVuZ3RoKSkpOwotCi0gICAgICAgIHRoaXMuX3RleHRN
b2RlbC5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRpdi1oaWdobGlnaHRlZCIsIHRydWUpOwot
ICAgIH0sCi0KLSAgICBfY3JlYXRlU3BhbjogZnVuY3Rpb24oY29udGVudCwgY2xhc3NOYW1lKQot
ICAgIHsKLSAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gImh0bWwtcmVzb3VyY2UtbGluayIgfHwg
Y2xhc3NOYW1lID09PSAiaHRtbC1leHRlcm5hbC1saW5rIikKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jcmVhdGVMaW5rKGNvbnRlbnQsIGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwtbGlu
ayIpOwotCi0gICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OwotICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtIiArIGNsYXNzTmFtZTsKLSAgICAg
ICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7Ci0g
ICAgICAgIHJldHVybiBzcGFuOwotICAgIH0sCi0KLSAgICBfY3JlYXRlTGluazogZnVuY3Rpb24o
Y29udGVudCwgaXNFeHRlcm5hbCkKLSAgICB7Ci0gICAgICAgIHZhciBxdW90ZSA9IGNvbnRlbnQu
Y2hhckF0KDApOwotICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0g
IlwiIiB8fCAgIHF1b3RlID09PSAiJyIpKQotICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQu
c3Vic3RyaW5nKDEsIGNvbnRlbnQubGVuZ3RoIC0gMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHF1b3RlID0gbnVsbDsKLQotICAgICAgICB2YXIgYSA9IFdlYkluc3BlY3Rvci5saW5raWZ5
VVJMQXNOb2RlKHRoaXMuX3Jld3JpdGVIcmVmKGNvbnRlbnQpLCBjb250ZW50LCBudWxsLCBpc0V4
dGVybmFsKTsKLSAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7Ci0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1
ZSI7Ci0gICAgICAgIGlmIChxdW90ZSkKLSAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUocXVvdGUpKTsKLSAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChh
KTsKLSAgICAgICAgaWYgKHF1b3RlKQotICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShxdW90ZSkpOwotICAgICAgICByZXR1cm4gc3BhbjsKLSAgICB9
LAotCi0gICAgX3Jld3JpdGVIcmVmOiBmdW5jdGlvbihocmVmVmFsdWUsIGlzRXh0ZXJuYWwpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX3VybCB8fCAhaHJlZlZhbHVlIHx8IGhyZWZWYWx1ZS5p
bmRleE9mKCI6Ly8iKSA+IDApCi0gICAgICAgICAgICByZXR1cm4gaHJlZlZhbHVlOwotICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLmNvbXBsZXRlVVJMKHRoaXMuX3VybCwgaHJlZlZhbHVlKTsK
LSAgICB9LAotCi0gICAgc2V0RGl2RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZWxl
bWVudCkKLSAgICB7Ci0gICAgICAgIHZhciBleGlzdGluZ0VsZW1lbnQgPSB0aGlzLl90ZXh0TW9k
ZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJkaXYtZGVjb3JhdGlvbiIpOwotICAgICAgICBp
ZiAoZXhpc3RpbmdFbGVtZW50ICYmIGV4aXN0aW5nRWxlbWVudC5wYXJlbnROb2RlKQotICAgICAg
ICAgICAgZXhpc3RpbmdFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXhpc3RpbmdFbGVt
ZW50KTsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVy
LCAiZGl2LWRlY29yYXRpb24iKTsKLQotICAgICAgICBpZiAoZWxlbWVudCkgewotICAgICAgICAg
ICAgaWYgKGxpbmVOdW1iZXIgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbGluZURpdiA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUo
bGluZU51bWJlciArIDEsICJsaW5lLWRpdiIpOwotICAgICAgICAgICAgICAgIHRoaXMuX3NoZWV0
Lmluc2VydEJlZm9yZShlbGVtZW50LCBsaW5lRGl2KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIHRoaXMuX3NoZWV0LmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICAgICAgICAg
ICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRp
b24iLCBlbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnJldmFsaWRhdGVEZWNvcmF0
aW9uc0FuZFBhaW50KCk7Ci0gICAgfSwKLQotICAgIGluaXRGb250TWV0cmljczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmluaXRG
b250TWV0cmljcy5jYWxsKHRoaXMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lRGl2ID0g
dGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShpLCAibGluZS1kaXYiKTsKLSAgICAgICAgICAg
IGlmICghdGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpCi0gICAgICAgICAgICAgICAgbGluZURpdi5z
dHlsZS5taW5IZWlnaHQgPSB0aGlzLl90ZXh0TGluZUhlaWdodCArICJweCI7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXRpdmVUZXh0Vmlld2VyLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCmluZGV4IGNmN2YxYjEuLmM1YThiODEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCkBAIC0zMyw3ICszMyw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3ID0gZnVuY3Rpb24oc2NyaXB0KQogCiAgICAgdGhpcy5f
ZnJhbWVOZWVkc1NldHVwID0gdHJ1ZTsKICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVwID0gZmFs
c2U7Ci0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUo
dGhpcy5lbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgIHRoaXMu
c291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVudCwg
dGhpcy5fYWRkQnJlYWtwb2ludC5iaW5kKHRoaXMpLCB0aGlzLl9yZW1vdmVCcmVha3BvaW50LmJp
bmQodGhpcykpOwogfQogCiBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUgPSB7CkBA
IC04Nyw2ICs4Nyw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKICAg
ICBzaG93aW5nTGFzdFNlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90
eXBlLnNob3dpbmdMYXN0U2VhcmNoUmVzdWx0LAogICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IFdl
Ykluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LAogICAg
IF9zb3VyY2VGcmFtZVNldHVwRmluaXNoZWQ6IFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3Rv
dHlwZS5fc291cmNlRnJhbWVTZXR1cEZpbmlzaGVkLAorICAgIF9yZW1vdmVCcmVha3BvaW50OiBX
ZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQsCiAgICAg
cmVzaXplOiBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUucmVzaXplCiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCBiYzBkYWE1Li44NWFlY2Q1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBAIC0zOCw4ICszOCw3
IEBAIHZhciBQcmVmZXJlbmNlcyA9IHsKICAgICBzdHlsZVJ1bGVzRXhwYW5kZWRTdGF0ZToge30s
CiAgICAgc2hvd01pc3NpbmdMb2NhbGl6ZWRTdHJpbmdzOiBmYWxzZSwKICAgICBzYW1wbGluZ0NQ
VVByb2ZpbGVyOiBmYWxzZSwKLSAgICBzaG93Q29sb3JOaWNrbmFtZXM6IHRydWUsCi0gICAgdXNl
Q2FudmFzQmFzZWRFZGl0b3I6IGZhbHNlCisgICAgc2hvd0NvbG9yTmlja25hbWVzOiB0cnVlCiB9
CiAKIFdlYkluc3BlY3Rvci5wb3B1bGF0ZUZyb250ZW5kU2V0dGluZ3MgPSBmdW5jdGlvbihzZXR0
aW5nc1N0cmluZykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpp
bmRleCBiYzkxMjJiLi45NWEwOGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCkBAIC0yOCw3ICsyOCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQsIGFkZEJyZWFr
cG9pbnREZWxlZ2F0ZSkKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVu
dEVsZW1lbnQsIGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSwgcmVtb3ZlQnJlYWtwb2ludERlbGVnYXRl
KQogewogICAgIHRoaXMuX3BhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50OwogCkBAIC00NCw2
ICs0NCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1l
bnQsIGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSkKICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTsKIAog
ICAgIHRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0ZSA9IGFkZEJyZWFrcG9pbnREZWxlZ2F0ZTsK
KyAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVsZWdhdGUgPSByZW1vdmVCcmVha3BvaW50RGVs
ZWdhdGU7CiB9CiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CkBAIC01
MSw3ICs1Miw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAg
c2V0IHZpc2libGUodmlzaWJsZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3Zpc2libGUgPSB2aXNp
YmxlOwotICAgICAgICB0aGlzLl9jcmVhdGVFZGl0b3JJZk5lZWRlZCgpOworICAgICAgICB0aGlz
Ll9jcmVhdGVWaWV3ZXJJZk5lZWRlZCgpOwogICAgIH0sCiAKICAgICBnZXQgZXhlY3V0aW9uTGlu
ZSgpCkBAIC02MywxNSArNjQsMTggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25MaW5lID09PSB4KQogICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBwcmV2aW91c0xpbmUgPSB0aGlzLl9leGVj
dXRpb25MaW5lOwogICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lID0geDsKLSAgICAgICAgaWYg
KHRoaXMuX2VkaXRvcikKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci5yZXBhaW50QWxsKCk7CisK
KyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0aGlzLl91cGRhdGVF
eGVjdXRpb25MaW5lKHByZXZpb3VzTGluZSk7CiAgICAgfSwKIAogICAgIHJldmVhbExpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fZWRpdG9yKQotICAg
ICAgICAgICAgdGhpcy5fZWRpdG9yLnJldmVhbChsaW5lTnVtYmVyIC0gMSwgMCk7CisgICAgICAg
IGlmICh0aGlzLl90ZXh0Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXZl
YWxMaW5lKGxpbmVOdW1iZXIgLSAxLCAwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhp
cy5fbGluZU51bWJlclRvUmV2ZWFsID0gbGluZU51bWJlcjsKICAgICB9LApAQCAtODIsNyArODYs
OCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBicmVh
a3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdl
ZCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzYWJsZWQi
LCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdl
ZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZShicmVha3BvaW50
KTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0aGlzLl9hZGRC
cmVha3BvaW50VG9Tb3VyY2UoYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIHJlbW92ZUJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCkBAIC05MSw3ICs5Niw4IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigiZW5hYmxlZCIsIG51bGwsIHRoaXMpOwogICAgICAgICBicmVha3BvaW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIoImRpc2FibGVkIiwgbnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFr
cG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCBudWxsLCB0aGlz
KTsKLSAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludEZyb21Tb3VyY2UoYnJlYWtwb2ludCk7
CisgICAgICAgIGlmICh0aGlzLl90ZXh0Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fcmVtb3Zl
QnJlYWtwb2ludEZyb21Tb3VyY2UoYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIGFkZE1lc3Nh
Z2U6IGZ1bmN0aW9uKG1zZykKQEAgLTEwMCw3ICsxMDYsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIW1zZy5tZXNzYWdlIHx8IG1zZy5saW5l
IDw9IDAgfHwgIW1zZy5pc0Vycm9yT3JXYXJuaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobXNnKQotICAgICAgICBpZiAodGhpcy5fZWRpdG9y
KQorICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikKICAgICAgICAgICAgIHRoaXMuX2FkZE1l
c3NhZ2VUb1NvdXJjZShtc2cpOwogICAgIH0sCiAKQEAgLTExNCwxNCArMTIwLDE0IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21lc3NhZ2Vz
ID0gW107CiAgICAgICAgIHRoaXMuX3Jvd01lc3NhZ2VzID0ge307CiAgICAgICAgIHRoaXMuX21l
c3NhZ2VCdWJibGVzID0ge307Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0b3IpCi0gICAgICAgICAg
ICB0aGlzLl9lZGl0b3IucmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQoKTsKKyAgICAgICAg
aWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlc2l6
ZSgpOwogICAgIH0sCiAKICAgICBzaXplVG9GaXRDb250ZW50SGVpZ2h0OiBmdW5jdGlvbigpCiAg
ICAgewotICAgICAgICBpZiAodGhpcy5fZWRpdG9yKQotICAgICAgICAgICAgdGhpcy5fZWRpdG9y
LnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7CisgICAgICAgIGlmICh0aGlzLl90ZXh0
Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXZhbGlkYXRlRGVjb3JhdGlv
bnNBbmRQYWludCgpOwogICAgIH0sCiAKICAgICBzZXRDb250ZW50OiBmdW5jdGlvbihtaW1lVHlw
ZSwgY29udGVudCwgdXJsKQpAQCAtMTMwLDQ3ICsxMzYsNTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVs
bCwgY29udGVudCk7CiAgICAgICAgIHRoaXMuX21pbWVUeXBlID0gbWltZVR5cGU7CiAgICAgICAg
IHRoaXMuX3VybCA9IHVybDsKLSAgICAgICAgdGhpcy5fY3JlYXRlRWRpdG9ySWZOZWVkZWQoKTsK
KyAgICAgICAgdGhpcy5fY3JlYXRlVmlld2VySWZOZWVkZWQoKTsKKyAgICB9LAorCisgICAgaGln
aGxpZ2h0TGluZTogZnVuY3Rpb24obGluZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90ZXh0
Vmlld2VyKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5oaWdobGlnaHRMaW5lKGxpbmUg
LSAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fbGluZVRvSGlnaGxpZ2h0ID0g
bGluZTsKICAgICB9LAogCi0gICAgX2NyZWF0ZUVkaXRvcklmTmVlZGVkOiBmdW5jdGlvbigpCisg
ICAgX2NyZWF0ZVZpZXdlcklmTmVlZGVkOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAo
IXRoaXMuX3Zpc2libGUgfHwgIXRoaXMuX2xvYWRlZCB8fCB0aGlzLl9lZGl0b3IpCisgICAgICAg
IGlmICghdGhpcy5fdmlzaWJsZSB8fCAhdGhpcy5fbG9hZGVkIHx8IHRoaXMuX3RleHRWaWV3ZXIp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGVkaXRvckNvbnN0cnVjdG9yID0g
UHJlZmVyZW5jZXMudXNlQ2FudmFzQmFzZWRFZGl0b3IgPyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ciA6IFdlYkluc3BlY3Rvci5OYXRpdmVUZXh0Vmlld2VyOwotICAgICAgICB0aGlzLl9lZGl0b3Ig
PSBuZXcgZWRpdG9yQ29uc3RydWN0b3IodGhpcy5fdGV4dE1vZGVsLCBXZWJJbnNwZWN0b3IucGxh
dGZvcm0sIHRoaXMuX3VybCk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5saW5lTnVtYmVyRGVjb3Jh
dG9yID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TGluZU51bWJlckRlY29yYXRvcih0aGlz
LCB0aGlzLl9lZGl0b3IudGV4dE1vZGVsKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLmxpbmVEZWNv
cmF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkxpbmVEZWNvcmF0b3IodGhpcyk7Ci0g
ICAgICAgIHRoaXMuX2VkaXRvci5yZWFkT25seSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2VsZW1l
bnQgPSB0aGlzLl9lZGl0b3IuZWxlbWVudDsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fa2V5RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLSAg
ICAgICAgdGhpcy5fcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKLSAg
ICAgICAgdGhpcy5fZWRpdG9yLmluaXRGb250TWV0cmljcygpOworICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyKHRoaXMuX3RleHRNb2RlbCwgV2Vi
SW5zcGVjdG9yLnBsYXRmb3JtLCB0aGlzLl91cmwpOworICAgICAgICB2YXIgZWxlbWVudCA9IHRo
aXMuX3RleHRWaWV3ZXIuZWxlbWVudDsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwgdGhpcy5fa2V5RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICAgICAgZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJp
bmQodGhpcyksIHRydWUpOworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICAgICAgdGhpcy5f
cGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTsKIAotICAgICAgICB0aGlzLl9lZGl0
b3IubWltZVR5cGUgPSB0aGlzLl9taW1lVHlwZTsKKyAgICAgICAgdGhpcy5fbmVlZHNQcm9ncmFt
Q291bnRlckltYWdlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fbmVlZHNCcmVha3BvaW50SW1hZ2Vz
ID0gdHJ1ZTsKIAorICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnNldENvYWxlc2NpbmdVcGRhdGUo
dHJ1ZSk7CisKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5taW1lVHlwZSA9IHRoaXMuX21pbWVU
eXBlOwogICAgICAgICB0aGlzLl9hZGRFeGlzdGluZ01lc3NhZ2VzVG9Tb3VyY2UoKTsKICAgICAg
ICAgdGhpcy5fYWRkRXhpc3RpbmdCcmVha3BvaW50c1RvU291cmNlKCk7Ci0KLSAgICAgICAgdGhp
cy5fZWRpdG9yLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHRoaXMuX2VkaXRv
ci5yZXNpemUoKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnJldmFsaWRhdGVEZWNvcmF0aW9uc0Fu
ZFBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxpbmUpCi0gICAgICAgICAg
ICB0aGlzLnJldmVhbExpbmUodGhpcy5fZXhlY3V0aW9uTGluZSk7CisgICAgICAgIHRoaXMuX3Vw
ZGF0ZUV4ZWN1dGlvbkxpbmUoKTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXNpemUoKTsK
IAogICAgICAgICBpZiAodGhpcy5fbGluZU51bWJlclRvUmV2ZWFsKSB7CiAgICAgICAgICAgICB0
aGlzLnJldmVhbExpbmUodGhpcy5fbGluZU51bWJlclRvUmV2ZWFsKTsKICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9saW5lTnVtYmVyVG9SZXZlYWw7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
dGhpcy5fcGVuZGluZ1NlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0
aGlzLl9wZW5kaW5nU2VsZWN0aW9uUmFuZ2U7Ci0gICAgICAgICAgICB0aGlzLl9lZGl0b3Iuc2V0
U2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4sIHJhbmdlLmVuZExp
bmUsIHJhbmdlLmVuZENvbHVtbik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ1Nl
bGVjdGlvblJhbmdlOworICAgICAgICBpZiAodGhpcy5fcGVuZGluZ01hcmtSYW5nZSkgeworICAg
ICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fcGVuZGluZ01hcmtSYW5nZTsKKyAgICAgICAgICAg
IHRoaXMubWFya1JhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5n
TWFya1JhbmdlOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zZXRDb2FsZXNjaW5n
VXBkYXRlKGZhbHNlKTsKKworICAgICAgICBpZiAodGhpcy5fbGluZVRvSGlnaGxpZ2h0KSB7Cisg
ICAgICAgICAgICB0aGlzLmhpZ2hsaWdodExpbmUodGhpcy5fbGluZVRvSGlnaGxpZ2h0KTsKKyAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdobGlnaHQ7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5zZXRDb2FsZXNjaW5nVXBkYXRlKGZhbHNlKTsKICAgICB9LAog
CiAgICAgZmluZFNlYXJjaE1hdGNoZXM6IGZ1bmN0aW9uKHF1ZXJ5KQpAQCAtMjE1LDIxICsyMzAs
MjAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0
dXJuIHJhbmdlczsKICAgICB9LAogCi0gICAgc2V0U2VsZWN0aW9uOiBmdW5jdGlvbihyYW5nZSkK
KyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX2VkaXRvcikKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci5zZXRTZWxlY3Rpb24o
cmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbHVtbiwgcmFuZ2UuZW5kTGluZSwgcmFuZ2Uu
ZW5kQ29sdW1uKTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCisgICAgICAgICAgICB0
aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZShyYW5nZSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTZWxlY3Rpb25SYW5nZSA9IHJhbmdlOworICAgICAg
ICAgICAgdGhpcy5fcGVuZGluZ01hcmtSYW5nZSA9IHJhbmdlOwogICAgIH0sCiAKLSAgICBjbGVh
clNlbGVjdGlvbjogZnVuY3Rpb24oKQorICAgIGNsZWFyTWFya2VkUmFuZ2U6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0b3IpIHsKLSAgICAgICAgICAgIHZhciByYW5n
ZSA9IHRoaXMuX2VkaXRvci5zZWxlY3Rpb247Ci0gICAgICAgICAgICB0aGlzLl9lZGl0b3Iuc2V0
U2VsZWN0aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbiwgcmFuZ2UuZW5kTGluZSwg
cmFuZ2UuZW5kQ29sdW1uKTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIubWFya0FuZFJldmVhbFJhbmdlKG51bGwpOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nU2VsZWN0aW9uUmFuZ2U7
CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ01hcmtSYW5nZTsKICAgICB9LAogCiAg
ICAgX2luY3JlbWVudE1lc3NhZ2VSZXBlYXRDb3VudDogZnVuY3Rpb24obXNnLCByZXBlYXREZWx0
YSkKQEAgLTI0Nyw2ICsyNjEsNDAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VSZXBlYXRDb3VudEVsZW1lbnQudGV4
dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiAocmVwZWF0ZWQgJWQgdGltZXMpIiwg
bXNnLnJlcGVhdENvdW50KTsKICAgICB9LAogCisgICAgX2JyZWFrcG9pbnRDaGFuZ2VkOiBmdW5j
dGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0
OworICAgICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CisgICAgICAg
IGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCisgICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1i
cmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlz
YWJsZWQiKTsKKworICAgICAgICBpZiAoYnJlYWtwb2ludC5jb25kaXRpb24pCisgICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVh
a3BvaW50LWNvbmRpdGlvbmFsIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQt
Y29uZGl0aW9uYWwiKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZUV4ZWN1dGlvbkxpbmU6IGZ1bmN0
aW9uKHByZXZpb3VzTGluZSkKKyAgICB7CisgICAgICAgIGlmIChwcmV2aW91c0xpbmUpIHsKKyAg
ICAgICAgICAgIGlmIChwcmV2aW91c0xpbmUgLSAxIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQpCisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHBy
ZXZpb3VzTGluZSAtIDEsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdGhpcy5fZXhlY3V0aW9uTGluZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJbWFnZUlmTmVlZGVkKCk7CisKKyAgICAg
ICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkK
KyAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbih0aGlzLl9leGVjdXRp
b25MaW5lIC0gMSwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOworICAgIH0sCisKICAgICBfYWRk
RXhpc3RpbmdNZXNzYWdlc1RvU291cmNlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIg
bGVuZ3RoID0gdGhpcy5fbWVzc2FnZXMubGVuZ3RoOwpAQCAtMjY0LDcgKzMxMiw3IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBtZXNzYWdlQnVi
YmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAg
bWVzc2FnZUJ1YmJsZUVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLW1lc3NhZ2UtYnVi
YmxlIjsKICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdWJibGVzW21zZy5saW5lXSA9IG1lc3Nh
Z2VCdWJibGVFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5fZWRpdG9yLnNldERpdkRlY29yYXRp
b24obXNnLmxpbmUgLSAxLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7CisgICAgICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obXNnLmxpbmUgLSAxLCBtZXNzYWdlQnViYmxlRWxl
bWVudCk7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIgcm93TWVzc2FnZXMgPSB0aGlzLl9yb3dN
ZXNzYWdlc1ttc2cubGluZV07CkBAIC0yNzYsNyArMzI0LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dNZXNz
YWdlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHJvd01lc3NhZ2VzW2ldLmlzRXF1
YWwobXNnLCB0cnVlKSkgewogICAgICAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE1lc3NhZ2VS
ZXBlYXRDb3VudChyb3dNZXNzYWdlc1tpXSwgbXNnLnJlcGVhdERlbHRhKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9lZGl0b3IucmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMwNywzNSAr
MzU0LDUxIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IG1lc3NhZ2VMaW5lRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSht
c2cubWVzc2FnZSkpOwogCiAgICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdlTGluZUVsZW1lbnQg
PSBtZXNzYWdlTGluZUVsZW1lbnQ7Ci0KLSAgICAgICAgdGhpcy5fZWRpdG9yLnJldmFsaWRhdGVE
ZWNvcmF0aW9uc0FuZFBhaW50KCk7CiAgICAgfSwKIAogICAgIF9hZGRFeGlzdGluZ0JyZWFrcG9p
bnRzVG9Tb3VyY2U6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBsZW5ndGggPSB0aGlz
LmJyZWFrcG9pbnRzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJyZWFrcG9pbnRzLmxlbmd0
aDsgKytpKQogICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvU291cmNlKHRoaXMuYnJl
YWtwb2ludHNbaV0pOwogICAgIH0sCiAKICAgICBfYWRkQnJlYWtwb2ludFRvU291cmNlOiBmdW5j
dGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJp
YnV0ZShicmVha3BvaW50LmxpbmUgLSAxLCAiYnJlYWtwb2ludCIsIGJyZWFrcG9pbnQpOworICAg
ICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CisgICAgICAgIGlmIChs
aW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwg
ImJyZWFrcG9pbnQiLCBicmVha3BvaW50KTsKICAgICAgICAgYnJlYWtwb2ludC5zb3VyY2VUZXh0
ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoYnJlYWtwb2ludC5saW5lIC0gMSk7Ci0gICAgICAgIHRo
aXMuX2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7CisgICAgICAgIHRoaXMuX2RyYXdCcmVha3Bv
aW50SW1hZ2VzSWZOZWVkZWQoKTsKKworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnNldENvYWxl
c2NpbmdVcGRhdGUodHJ1ZSk7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsKKyAgICAgICAgaWYgKCFicmVha3Bv
aW50LmVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24o
bGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgIGlmIChi
cmVha3BvaW50LmNvbmRpdGlvbikKKyAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVj
b3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKKyAg
ICAgICAgdGhpcy5fdGV4dFZpZXdlci5zZXRDb2FsZXNjaW5nVXBkYXRlKGZhbHNlKTsKICAgICB9
LAogCiAgICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50
KQogICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShicmVha3Bv
aW50LmxpbmUgLSAxLCAiYnJlYWtwb2ludCIpOwotICAgICAgICB0aGlzLl9lZGl0b3IucGFpbnRM
aW5lTnVtYmVycygpOworICAgICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAt
IDE7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuc2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsK
KyAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJl
YWtwb2ludCIpOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGlu
ZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
cmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQi
KTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIs
ICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOworICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLnNldENvYWxlc2NpbmdVcGRhdGUoZmFsc2UpOwogICAgIH0sCiAKLSAgICBfY29udGV4dE1l
bnU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGV2ZW50KQorICAgIF9jb250ZXh0TWVudTogZnVuY3Rp
b24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0
ZSkKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbGFzc05hbWUgIT09ICJ3ZWJraXQtbGluZS1u
dW1iZXIiKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgcm93ID0gZXZlbnQudGFy
Z2V0LnBhcmVudEVsZW1lbnQ7CiAKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSByb3cubGluZU51
bWJlcjsKICAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0
TWVudSgpOwogCiAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0
dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwpAQCAtMzY0LDEzICs0MjcsMTkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgY29udGV4dE1l
bnUuc2hvdyhldmVudCk7CiAgICAgfSwKIAotICAgIF90b2dnbGVCcmVha3BvaW50OiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBldmVudCkKKyAgICBfbW91c2VEb3duOiBmdW5jdGlvbihldmVudCkKICAg
ICB7CiAgICAgICAgIGlmIChldmVudC5idXR0b24gIT0gMCB8fCBldmVudC5hbHRLZXkgfHwgZXZl
bnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KQogICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSAhPT0gIndlYmtp
dC1saW5lLW51bWJlciIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciByb3cgPSBl
dmVudC50YXJnZXQucGFyZW50RWxlbWVudDsKKworICAgICAgICB2YXIgbGluZU51bWJlciA9IHJv
dy5saW5lTnVtYmVyOworCiAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4dE1vZGVs
LmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwogICAgICAgICBpZiAoYnJl
YWtwb2ludCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5yZW1vdmVC
cmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2lu
dERlbGVnYXRlKGJyZWFrcG9pbnQpOwogICAgICAgICBlbHNlIGlmICh0aGlzLl9hZGRCcmVha3Bv
aW50RGVsZWdhdGUpCiAgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50RGVsZWdhdGUobGlu
ZU51bWJlciArIDEpOwogICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwpAQCAtMzgzLDE0
ICs0NTIsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgZnVuY3Rpb24gY29tbWl0dGVkKGVsZW1lbnQsIG5ld1RleHQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGJyZWFrcG9pbnQuY29uZGl0aW9uID0gbmV3VGV4dDsKLSAgICAgICAgICAgIHRoaXMu
X2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7CiAgICAgICAgICAgICBkaXNtaXNzZWQuY2FsbCh0
aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIGRpc21pc3NlZCgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci5zZXREaXZEZWNvcmF0aW9uKGJyZWFrcG9pbnQu
bGluZSAtIDEsIG51bGwpOworICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNv
cmF0aW9uKGJyZWFrcG9pbnQubGluZSAtIDEsIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOwogICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQ7CisgICAgICAgICAg
ICBkZWxldGUgdGhpcy5fY29uZGl0aW9uRWxlbWVudDsKICAgICAgICAgfQogCiAgICAgICAgIHZh
ciBkaXNtaXNzZWRIYW5kbGVyID0gZGlzbWlzc2VkLmJpbmQodGhpcyk7CkBAIC00MDMsMjMgKzQ3
MiwyMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgX3No
b3dCcmVha3BvaW50Q29uZGl0aW9uUG9wdXA6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewot
ICAgICAgICB2YXIgY29uZGl0aW9uRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNvbmRpdGlvbkVsZW1l
bnQobGluZU51bWJlcik7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zZXREaXZEZWNvcmF0aW9uKGxp
bmVOdW1iZXIgLSAxLCBjb25kaXRpb25FbGVtZW50KTsKKyAgICAgICAgdGhpcy5fY29uZGl0aW9u
RWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNvbmRpdGlvbkVsZW1lbnQobGluZU51bWJlcik7CisgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyIC0gMSwgdGhpcy5f
Y29uZGl0aW9uRWxlbWVudCk7CiAgICAgfSwKIAogICAgIF9jcmVhdGVDb25kaXRpb25FbGVtZW50
OiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgdmFyIGNvbmRpdGlvbkVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgY29uZGl0aW9uRWxl
bWVudC5jbGFzc05hbWUgPSAic291cmNlLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKKyAgICAgICAg
Y29uZGl0aW9uRWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29u
ZGl0aW9uIjsKIAogICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgibGFiZWwiKTsKLSAgICAgICAgbGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2Ut
YnJlYWtwb2ludC1tZXNzYWdlIjsKLSAgICAgICAgbGFiZWxFbGVtZW50Lmh0bWxGb3IgPSAic291
cmNlLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKKyAgICAgICAgbGFiZWxFbGVtZW50LmNsYXNzTmFt
ZSA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1tZXNzYWdlIjsKKyAgICAgICAgbGFiZWxFbGVt
ZW50Lmh0bWxGb3IgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKICAgICAg
ICAgbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiVGhlIGJyZWFrcG9pbnQgb24gbGluZSAlZCB3aWxsIHN0b3Agb25s
eSBpZiB0aGlzIGV4cHJlc3Npb24gaXMgdHJ1ZToiLCBsaW5lTnVtYmVyKSkpOwogICAgICAgICBj
b25kaXRpb25FbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7CiAKICAgICAgICAgdmFy
IGVkaXRvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAg
ICBlZGl0b3JFbGVtZW50LmlkID0gInNvdXJjZS1icmVha3BvaW50LWNvbmRpdGlvbiI7CisgICAg
ICAgIGVkaXRvckVsZW1lbnQuaWQgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9u
IjsKICAgICAgICAgZWRpdG9yRWxlbWVudC5jbGFzc05hbWUgPSAibW9ub3NwYWNlIjsKICAgICAg
ICAgZWRpdG9yRWxlbWVudC50eXBlID0gInRleHQiCiAgICAgICAgIGNvbmRpdGlvbkVsZW1lbnQu
YXBwZW5kQ2hpbGQoZWRpdG9yRWxlbWVudCk7CkBAIC00MzUsOSArNTA0LDggQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKGhhbmRsZXIpIHsKICAg
ICAgICAgICAgIGhhbmRsZXIoZXZlbnQpOwogICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZG9jdW1lbnRLZXlEb3duKGV2ZW50KTsKLSAgICAgICAgfQogICAgIH0sCiAKICAg
ICBfZXZhbFNlbGVjdGlvbkluQ2FsbEZyYW1lOiBmdW5jdGlvbihldmVudCkKQEAgLTQ1OCwxNDYg
KzUyNiwxMzkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgfSk7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQp
CisgICAgcmVzaXplOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9lZGl0b3IucGFp
bnRMaW5lTnVtYmVycygpOworICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikKKyAgICAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIucmVzaXplKCk7CiAgICAgfSwKIAotICAgIHJlc2l6ZTogZnVu
Y3Rpb24oKQorICAgIF9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQ6IGZ1bmN0aW9uKGN0eCwg
Z2xvdykKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lZGl0b3IpCi0gICAgICAgICAgICB0aGlz
Ll9lZGl0b3IucmVzaXplKCk7Ci0gICAgfQotfQorICAgICAgICBpZiAoZ2xvdykKKyAgICAgICAg
ICAgIGN0eC5zYXZlKCk7CiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisgICAgICAgIGN0eC5iZWdp
blBhdGgoKTsKKyAgICAgICAgY3R4Lm1vdmVUbygxNywgMik7CisgICAgICAgIGN0eC5saW5lVG8o
MTksIDIpOworICAgICAgICBjdHgubGluZVRvKDE5LCAwKTsKKyAgICAgICAgY3R4LmxpbmVUbygy
MSwgMCk7CisgICAgICAgIGN0eC5saW5lVG8oMjYsIDUuNSk7CisgICAgICAgIGN0eC5saW5lVG8o
MjEsIDExKTsKKyAgICAgICAgY3R4LmxpbmVUbygxOSwgMTEpOworICAgICAgICBjdHgubGluZVRv
KDE5LCA5KTsKKyAgICAgICAgY3R4LmxpbmVUbygxNywgOSk7CisgICAgICAgIGN0eC5jbG9zZVBh
dGgoKTsKKyAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMTQyLCA1LCA0KSI7CiAKLVdlYklu
c3BlY3Rvci5CcmVha3BvaW50TGluZU51bWJlckRlY29yYXRvciA9IGZ1bmN0aW9uKHNvdXJjZUZy
YW1lLCB0ZXh0TW9kZWwpCi17Ci0gICAgdGhpcy5fc291cmNlRnJhbWUgPSBzb3VyY2VGcmFtZTsK
LSAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7Ci19CisgICAgICAgIGlmIChnbG93KSB7
CisgICAgICAgICAgICBjdHguc2hhZG93Qmx1ciA9IDQ7CisgICAgICAgICAgICBjdHguc2hhZG93
Q29sb3IgPSAicmdiKDI1NSwgMjU1LCAyNTUpIjsKKyAgICAgICAgICAgIGN0eC5zaGFkb3dPZmZz
ZXRYID0gLTE7CisgICAgICAgICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDA7CisgICAgICAgIH0K
IAotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRMaW5lTnVtYmVyRGVjb3JhdG9yLnByb3RvdHlwZSA9
IHsKLSAgICBkZWNvcmF0ZTogZnVuY3Rpb24obGluZU51bWJlciwgY3R4LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBsaW5lSGVpZ2h0KQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlz
Ll90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3BvaW50Iik7Ci0gICAg
ICAgIHZhciBpc0V4ZWN1dGlvbkxpbmUgPSBsaW5lTnVtYmVyICsgMSA9PT0gdGhpcy5fc291cmNl
RnJhbWUuX2V4ZWN1dGlvbkxpbmU7Ci0gICAgICAgIGlmIChicmVha3BvaW50IHx8IGlzRXhlY3V0
aW9uTGluZSkgewotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgICAgIGN0eC50cmFu
c2xhdGUoeCArIDQsIHkgKyAyKTsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50V2lkdGggPSB3
aWR0aCAtIDY7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludEhlaWdodCA9IGxpbmVIZWlnaHQg
LSA0OwotICAgIAotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAg
dGhpcy5fcGFpbnRCcmVha3BvaW50KGN0eCwgYnJlYWtwb2ludFdpZHRoLCBicmVha3BvaW50SGVp
Z2h0LCBicmVha3BvaW50KTsKLSAgICAKLSAgICAgICAgICAgIGlmIChpc0V4ZWN1dGlvbkxpbmUp
Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGFpbnRQcm9ncmFtQ291bnRlcihjdHgsIGJyZWFrcG9p
bnRXaWR0aCwgYnJlYWtwb2ludEhlaWdodCwgZmFsc2UpOworICAgICAgICBjdHguZmlsbCgpOwor
ICAgICAgICBjdHguZmlsbCgpOyAvLyBGaWxsIHR3aWNlIHRvIGdldCBhIGdvb2Qgc2hhZG93IGFu
ZCBkYXJrZXIgYW50aS1hbGlhc2VkIHBpeGVscy4KIAorICAgICAgICBpZiAoZ2xvdykKICAgICAg
ICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgICAgIH0KKyAgICB9LAogCi0gICAgICAgIGlmIChp
c0V4ZWN1dGlvbkxpbmUpIHsKLSAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgYmVoYXZp
b3IuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIF9kcmF3UHJvZ3Jh
bUNvdW50ZXJJbWFnZUlmTmVlZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuX25lZWRzUHJvZ3JhbUNvdW50ZXJJbWFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAicHJvZ3Jh
bS1jb3VudGVyIiwgMjYsIDExKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCAyNiwgMTEp
OworICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4LCB0cnVlKTsK
IAotICAgICAgICBjdHguZmlsbFN0eWxlID0gYnJlYWtwb2ludCA/ICJyZ2IoMjU1LDI1NSwyNTUp
IiA6ICJyZ2IoMTU1LDE1NSwxNTUpIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBk
ZWxldGUgdGhpcy5fbmVlZHNQcm9ncmFtQ291bnRlckltYWdlOwogICAgIH0sCiAKLSAgICBfcGFp
bnRCcmVha3BvaW50OiBmdW5jdGlvbihjdHgsIHdpZHRoLCBoZWlnaHQsIGJyZWFrcG9pbnQpCisg
ICAgX2RyYXdCcmVha3BvaW50SW1hZ2VzSWZOZWVkZWQ6IGZ1bmN0aW9uKGNvbmRpdGlvbmFsKQog
ICAgIHsKLSAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICBjdHgubW92ZVRvKDAsIDIp
OwotICAgICAgICBjdHgubGluZVRvKDIsIDApOwotICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0g
NSwgMCk7Ci0gICAgICAgIGN0eC5saW5lVG8od2lkdGgsIGhlaWdodCAvIDIpOwotICAgICAgICBj
dHgubGluZVRvKHdpZHRoIC0gNSwgaGVpZ2h0KTsKLSAgICAgICAgY3R4LmxpbmVUbygyLCBoZWln
aHQpOwotICAgICAgICBjdHgubGluZVRvKDAsIGhlaWdodCAtIDIpOwotICAgICAgICBjdHguY2xv
c2VQYXRoKCk7Ci0gICAgICAgIGN0eC5maWxsU3R5bGUgPSBicmVha3BvaW50LmNvbmRpdGlvbiA/
ICJyZ2IoMjE3LCAxNDIsIDEpIiA6ICJyZ2IoMSwgMTQyLCAyMTcpIjsKLSAgICAgICAgY3R4LnN0
cm9rZVN0eWxlID0gYnJlYWtwb2ludC5jb25kaXRpb24gPyAicmdiKDIwNSwgMTAzLCAwKSIgOiAi
cmdiKDAsIDEwMywgMjA1KSI7Ci0gICAgICAgIGN0eC5saW5lV2lkdGggPSAzOwotICAgICAgICBj
dHguZmlsbCgpOworICAgICAgICBpZiAoIXRoaXMuX25lZWRzQnJlYWtwb2ludEltYWdlcykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmdW5jdGlvbiBkcmF3QnJlYWtwb2ludChjdHgs
IGRpc2FibGVkLCBjb25kaXRpb25hbCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmJlZ2lu
UGF0aCgpOworICAgICAgICAgICAgY3R4Lm1vdmVUbygwLCAyKTsKKyAgICAgICAgICAgIGN0eC5s
aW5lVG8oMiwgMCk7CisgICAgICAgICAgICBjdHgubGluZVRvKDIxLCAwKTsKKyAgICAgICAgICAg
IGN0eC5saW5lVG8oMjYsIDUuNSk7CisgICAgICAgICAgICBjdHgubGluZVRvKDIxLCAxMSk7Cisg
ICAgICAgICAgICBjdHgubGluZVRvKDIsIDExKTsKKyAgICAgICAgICAgIGN0eC5saW5lVG8oMCwg
OSk7CisgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CisgICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gY29uZGl0aW9uYWwgPyAicmdiKDIxNywgMTQyLCAxKSIgOiAicmdiKDEsIDE0MiwgMjE3
KSI7CisgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb25kaXRpb25hbCA/ICJyZ2IoMjA1
LCAxMDMsIDApIiA6ICJyZ2IoMCwgMTAzLCAyMDUpIjsKKyAgICAgICAgICAgIGN0eC5saW5lV2lk
dGggPSAzOworICAgICAgICAgICAgY3R4LmZpbGwoKTsKKyAgICAgICAgICAgIGN0eC5zYXZlKCk7
CisgICAgICAgICAgICBjdHguY2xpcCgpOworICAgICAgICAgICAgY3R4LnN0cm9rZSgpOworICAg
ICAgICAgICAgY3R4LnJlc3RvcmUoKTsKIAotICAgICAgICBjdHguc2F2ZSgpOwotICAgICAgICBj
dHguY2xpcCgpOwotICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgIGN0eC5yZXN0b3JlKCk7
CisgICAgICAgICAgICBpZiAoIWRpc2FibGVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpZiAoIWJyZWFrcG9pbnQuZW5hYmxlZCkgewogICAgICAgICAgICAgY3R4LnNhdmUo
KTsKICAgICAgICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAiZGVzdGluYXRp
b24tb3V0IjsKICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSgwLCAwLCAwLCAwLjUp
IjsKLSAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAyNiwgMTEpOwogICAgICAgICAgICAgY3R4LnJlc3Rv
cmUoKTsKICAgICAgICAgfQotICAgIH0sCiAKLSAgICBfcGFpbnRQcm9ncmFtQ291bnRlcjogZnVu
Y3Rpb24oY3R4LCB3aWR0aCwgaGVpZ2h0KQotICAgIHsKLSAgICAgICAgY3R4LnNhdmUoKTsKIAot
ICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgIGN0eC5tb3ZlVG8od2lkdGggLSA5LCAy
KTsKLSAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCAtIDcsIDIpOwotICAgICAgICBjdHgubGluZVRv
KHdpZHRoIC0gNywgMCk7Ci0gICAgICAgIGN0eC5saW5lVG8od2lkdGggLSA1LCAwKTsKLSAgICAg
ICAgY3R4LmxpbmVUbyh3aWR0aCwgaGVpZ2h0IC8gMik7Ci0gICAgICAgIGN0eC5saW5lVG8od2lk
dGggLSA1LCBoZWlnaHQpOwotICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0gNywgaGVpZ2h0KTsK
LSAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCAtIDcsIGhlaWdodCAtIDIpOwotICAgICAgICBjdHgu
bGluZVRvKHdpZHRoIC0gOSwgaGVpZ2h0IC0gMik7Ci0gICAgICAgIGN0eC5jbG9zZVBhdGgoKTsK
LSAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMTQyLCA1LCA0KSI7CisgICAgICAgIC8vIFVu
Y29uZGl0aW9uYWwgYnJlYWtwb2ludHMuCiAKLSAgICAgICAgY3R4LnNoYWRvd0JsdXIgPSA0Owot
ICAgICAgICBjdHguc2hhZG93Q29sb3IgPSAicmdiKDI1NSwgMjU1LCAyNTUpIjsKLSAgICAgICAg
Y3R4LnNoYWRvd09mZnNldFggPSAtMTsKLSAgICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwOwor
ICAgICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAiYnJl
YWtwb2ludCIsIDI2LCAxMSk7CisgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgMjYsIDExKTsK
KyAgICAgICAgZHJhd0JyZWFrcG9pbnQoY3R4KTsKIAotICAgICAgICBjdHguZmlsbCgpOwotICAg
ICAgICBjdHguZmlsbCgpOyAvLyBGaWxsIHR3aWNlIHRvIGdldCBhIGdvb2Qgc2hhZG93IGFuZCBk
YXJrZXIgYW50aS1hbGlhc2VkIHBpeGVscy4KKyAgICAgICAgdmFyIGN0eCA9IGRvY3VtZW50Lmdl
dENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQtcHJvZ3JhbS1jb3VudGVyIiwgMjYs
IDExKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCAyNiwgMTEpOworICAgICAgICBkcmF3
QnJlYWtwb2ludChjdHgpOworICAgICAgICBjdHguY2xlYXJSZWN0KDIwLCAwLCA2LCAxMSk7Cisg
ICAgICAgIHRoaXMuX2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4dChjdHgsIHRydWUpOwogCi0g
ICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgfSwKKyAgICAgICAgdmFyIGN0eCA9IGRvY3VtZW50
LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQtZGlzYWJsZWQiLCAyNiwgMTEp
OworICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDI2LCAxMSk7CisgICAgICAgIGRyYXdCcmVh
a3BvaW50KGN0eCwgdHJ1ZSk7CiAKLSAgICBtb3VzZURvd246IGZ1bmN0aW9uKGxpbmVOdW1iZXIs
IGUpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5fdG9nZ2xlQnJlYWtwb2ludChs
aW5lTnVtYmVyLCBlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKKyAgICAgICAgdmFy
IGN0eCA9IGRvY3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQtZGlz
YWJsZWQtcHJvZ3JhbS1jb3VudGVyIiwgMjYsIDExKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgw
LCAwLCAyNiwgMTEpOworICAgICAgICBkcmF3QnJlYWtwb2ludChjdHgsIHRydWUpOworICAgICAg
ICBjdHguY2xlYXJSZWN0KDIwLCAwLCA2LCAxMSk7CisgICAgICAgIHRoaXMuX2RyYXdQcm9ncmFt
Q291bnRlckluQ29udGV4dChjdHgsIHRydWUpOwogCi0gICAgY29udGV4dE1lbnU6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIsIGUpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5fY29udGV4
dE1lbnUobGluZU51bWJlciwgZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KIAot
V2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkxpbmVEZWNvcmF0b3IgPSBmdW5jdGlvbihzb3VyY2VGcmFt
ZSkKLXsKLSAgICB0aGlzLl9zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lOwotfQorICAgICAgICAv
LyBDb25kaXRpb25hbCBicmVha3BvaW50cy4KIAotV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkxpbmVE
ZWNvcmF0b3IucHJvdG90eXBlID0gewotICAgIGRlY29yYXRlOiBmdW5jdGlvbihsaW5lTnVtYmVy
LCBjdHgsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGxpbmVIZWlnaHQpCi0gICAgewotICAgICAgICBp
ZiAodGhpcy5fc291cmNlRnJhbWUuX2V4ZWN1dGlvbkxpbmUgIT09IGxpbmVOdW1iZXIgKyAxKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjdHguc2F2ZSgpOwotICAgICAgICBjdHguZmls
bFN0eWxlID0gInJnYigxNzEsIDE5MSwgMjU0KSI7Ci0gICAgICAgIGN0eC5maWxsUmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgCi0gICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAg
ICAgICAgY3R4LnJlY3QoeCAtIDEsIHksIHdpZHRoICsgMiwgaGVpZ2h0KTsKLSAgICAgICAgY3R4
LmNsaXAoKTsKLSAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYig2NCwgMTE1LCAyNDQpIjsK
LSAgICAgICAgY3R4LnN0cm9rZSgpOworICAgICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NT
Q2FudmFzQ29udGV4dCgiMmQiLCAiYnJlYWtwb2ludC1jb25kaXRpb25hbCIsIDI2LCAxMSk7Cisg
ICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgMjYsIDExKTsKKyAgICAgICAgZHJhd0JyZWFrcG9p
bnQoY3R4LCBmYWxzZSwgdHJ1ZSk7CiAKLSAgICAgICAgY3R4LnJlc3RvcmUoKTsKKyAgICAgICAg
dmFyIGN0eCA9IGRvY3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQt
Y29uZGl0aW9uYWwtcHJvZ3JhbS1jb3VudGVyIiwgMjYsIDExKTsKKyAgICAgICAgY3R4LmNsZWFy
UmVjdCgwLCAwLCAyNiwgMTEpOworICAgICAgICBkcmF3QnJlYWtwb2ludChjdHgsIGZhbHNlLCB0
cnVlKTsKKyAgICAgICAgY3R4LmNsZWFyUmVjdCgyMCwgMCwgNiwgMTEpOworICAgICAgICB0aGlz
Ll9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4LCB0cnVlKTsKKworICAgICAgICB2YXIg
Y3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAiYnJlYWtwb2ludC1kaXNh
YmxlZC1jb25kaXRpb25hbCIsIDI2LCAxMSk7CisgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwg
MjYsIDExKTsKKyAgICAgICAgZHJhd0JyZWFrcG9pbnQoY3R4LCB0cnVlLCB0cnVlKTsKKworICAg
ICAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAiYnJlYWtw
b2ludC1kaXNhYmxlZC1jb25kaXRpb25hbC1wcm9ncmFtLWNvdW50ZXIiLCAyNiwgMTEpOworICAg
ICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDI2LCAxMSk7CisgICAgICAgIGRyYXdCcmVha3BvaW50
KGN0eCwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGN0eC5jbGVhclJlY3QoMjAsIDAsIDYsIDExKTsK
KyAgICAgICAgdGhpcy5fZHJhd1Byb2dyYW1Db3VudGVySW5Db250ZXh0KGN0eCwgdHJ1ZSk7CisK
KyAgICAgICAgZGVsZXRlIHRoaXMuX25lZWRzQnJlYWtwb2ludEltYWdlczsKICAgICB9CiB9CisK
K1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VW
aWV3LmpzCmluZGV4IDdmYzg0OTkuLmZhODA5MzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VWaWV3LmpzCkBAIC0zMiw3ICszMiw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VW
aWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UpCiAKICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygic291cmNlIik7CiAKLSAgICB0aGlzLnNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZSh0aGlzLmNvbnRlbnRFbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQo
dGhpcykpOworICAgIHRoaXMuc291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lKHRoaXMuY29udGVudEVsZW1lbnQsIHRoaXMuX2FkZEJyZWFrcG9pbnQuYmluZCh0aGlzKSwg
dGhpcy5fcmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKICAgICByZXNvdXJjZS5hZGRFdmVu
dExpc3RlbmVyKCJmaW5pc2hlZCIsIHRoaXMuX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkLCB0aGlz
KTsKICAgICB0aGlzLl9mcmFtZU5lZWRzU2V0dXAgPSB0cnVlOwogfQpAQCAtMTE4LDYgKzExOCwx
MiBAQCBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAg
ICB9LAogCisgICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAg
eworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzKQorICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7
CisgICAgfSwKKwogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBtZXRob2RzIGluIHRoaXMgcHJvdG90
eXBlIG5lZWQgdG8gYmUgZ2VuZXJpYyBlbm91Z2ggdG8gd29yayB3aXRoIGEgU2NyaXB0Vmlldy4K
ICAgICAvLyBUaGUgU2NyaXB0VmlldyBwcm90b3R5cGUgcHVsbHMgdGhlc2UgbWV0aG9kcyBpbnRv
IGl0J3MgcHJvdG90eXBlIHRvIGF2b2lkIGR1cGxpY2F0ZSBjb2RlLgogCkBAIC0xMjUsNyArMTMx
LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAg
ICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CiAgICAgICAgIHRoaXMuX3Nl
YXJjaFJlc3VsdHMgPSBbXTsKLSAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5jbGVhclNlbGVjdGlv
bigpOworICAgICAgICB0aGlzLnNvdXJjZUZyYW1lLmNsZWFyTWFya2VkUmFuZ2UoKTsKICAgICAg
ICAgZGVsZXRlIHRoaXMuX2RlbGF5ZWRGaW5kU2VhcmNoTWF0Y2hlczsKICAgICB9LAogCkBAIC0y
MjUsNyArMjMxLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAoIWZvdW5kUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhp
cy5zb3VyY2VGcmFtZS5zZXRTZWxlY3Rpb24oZm91bmRSYW5nZSk7CisgICAgICAgIHRoaXMuc291
cmNlRnJhbWUubWFya0FuZFJldmVhbFJhbmdlKGZvdW5kUmFuZ2UpOwogICAgIH0sCiAKICAgICBf
c291cmNlRnJhbWVTZXR1cEZpbmlzaGVkOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9UZXh0RWRpdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjY4
MjgwLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9y
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtKQotewotICAgIHRoaXMuX3RleHRNb2Rl
bCA9IHRleHRNb2RlbDsKLSAgICB0aGlzLl90ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlz
Ll90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpOwotICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIodGhpcy5fdGV4dE1vZGVsLCB0aGlzLl9o
aWdobGlnaHRDaGFuZ2VkLmJpbmQodGhpcykpOwotCi0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0
ZXh0LWVkaXRvciBtb25vc3BhY2UiOwotICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0K
LSAgICB0aGlzLl9jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKLSAg
ICB0aGlzLl9jYW52YXMuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNhbnZhcyI7Ci0gICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcyk7Ci0KLSAgICB0aGlzLl9jb250YWlu
ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLl9jb250YWluZXIu
Y2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNvbnRhaW5lciI7Ci0gICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7Ci0KLSAgICB0aGlzLl9zaGVldCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0
aGlzLl9zaGVldCk7Ci0KLSAgICB2YXIgY3Vyc29yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgIGN1cnNvckVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9y
LWN1cnNvciI7Ci0gICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGN1cnNvckVsZW1lbnQp
OwotICAgIHRoaXMuX2N1cnNvciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEN1cnNvcihjdXJzb3JF
bGVtZW50KTsKLQotICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwi
LCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgdGhpcy5fcmVnaXN0ZXJN
b3VzZUxpc3RlbmVycygpOwotICAgIHRoaXMuX3JlZ2lzdGVyS2V5Ym9hcmRMaXN0ZW5lcnMoKTsK
LSAgICB0aGlzLl9yZWdpc3RlckNsaXBib2FyZExpc3RlbmVycygpOwotCi0gICAgdGhpcy5fZGVz
aXJlZENhcmV0Q29sdW1uID0gMDsKLSAgICB0aGlzLl9zY3JvbGxMZWZ0ID0gMDsKLSAgICB0aGlz
Ll9zY3JvbGxUb3AgPSAwOwotCi0gICAgdGhpcy5fY3R4ID0gdGhpcy5fY2FudmFzLmdldENvbnRl
eHQoIjJkIik7Ci0gICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0U2Vs
ZWN0aW9uTW9kZWwodGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLQotICAgIHRo
aXMuX2lzTWFjID0gcGxhdGZvcm0gJiYgKHBsYXRmb3JtLmluZGV4T2YoIm1hYyIpID09PSAwKTsK
LSAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCA9IDA7Ci0KLSAgICB0aGlzLl9yZWdpc3Rl
clNob3J0Y3V0cygpOwotICAgIC8vIERlYnVnZ2luZyBmbGFncywgYWxsb3cgZGlzYWJsaW5nIC8g
ZW5hYmxpbmcgaGlnaGxpZ2h0cyBhbmQgdHJhY2sgcmVwYWludHMuCi0gICAgdGhpcy5faGlnaGxp
Z2h0aW5nRW5hYmxlZCA9IHRydWU7Ci0gICAgdGhpcy5fZGVidWdNb2RlID0gZmFsc2U7Ci0KLSAg
ICB0aGlzLl90ZXh0V2lkdGggPSAwOwotICAgIHRoaXMuX2xvbmdlc3RMaW5lTnVtYmVyID0gMDsK
LQotICAgIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUgPSBbMF07Ci0gICAgdGhpcy5fcmVhZE9ubHkg
PSBmYWxzZTsKLSAgICB0aGlzLl9zZWxlY3Rpb25Db2xvciA9ICJyZ2IoMTgxLCAyMTMsIDI1NSki
OwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7Ci0gICAgc2V0IHRl
eHQodGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciBsYXN0TGluZSA9IHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50IC0gMTsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVsbCwgdGV4
dCk7Ci0gICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZXNldFVuZG9TdGFjaygpOwotICAgICAgICB0
aGlzLl9zZXRDYXJldExvY2F0aW9uKDAsIDApOwotICAgIH0sCi0KLSAgICBzZXQgbWltZVR5cGUo
bWltZVR5cGUpCi0gICAgewotICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1lVHlwZSA9IG1p
bWVUeXBlOwotICAgIH0sCi0KLSAgICBnZXQgdGV4dE1vZGVsKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl90ZXh0TW9kZWw7Ci0gICAgfSwKLQotICAgIHNldCByZWFkT25seShyZWFkT25s
eSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7Ci0gICAgICAgIGlm
IChyZWFkT25seSkKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0ZXh0
LWVkaXRvci1yZWFkb25seSIpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuZWxlbWVu
dC5yZW1vdmVTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1yZWFkb25seSIpCi0gICAgfSwKLQotICAg
IHNldCBsaW5lTnVtYmVyRGVjb3JhdG9yKGxpbmVOdW1iZXJEZWNvcmF0b3IpCi0gICAgewotICAg
ICAgICB0aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9yID0gbGluZU51bWJlckRlY29yYXRvcjsKLSAg
ICB9LAotCi0gICAgc2V0IGxpbmVEZWNvcmF0b3IobGluZURlY29yYXRvcikKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2xpbmVEZWNvcmF0b3IgPSBsaW5lRGVjb3JhdG9yOwotICAgIH0sCi0KLSAgICBn
ZXQgc2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24ucmFu
Z2UoKTsKLSAgICB9LAotCi0gICAgc2V0U2VsZWN0aW9uOiBmdW5jdGlvbihzdGFydExpbmUsIHN0
YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4pCi0gICAgewotICAgICAgICB2YXIgc3RhcnQg
PSB0aGlzLl9maXQoc3RhcnRMaW5lLCBzdGFydENvbHVtbik7Ci0gICAgICAgIHRoaXMuX3NlbGVj
dGlvbi5zZXRTdGFydChzdGFydC5saW5lLCBzdGFydC5jb2x1bW4pOwotICAgICAgICB0aGlzLl9z
ZXRTZWxlY3Rpb25FbmQoZW5kTGluZSwgZW5kQ29sdW1uKTsKLSAgICB9LAotCi0gICAgc2V0RGl2
RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZWxlbWVudCkKLSAgICB7Ci0gICAgICAg
IHZhciBleGlzdGluZ0VsZW1lbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJkaXYtZGVjb3JhdGlvbiIpOwotICAgICAgICBpZiAoZXhpc3RpbmdFbGVtZW50ICYm
IGV4aXN0aW5nRWxlbWVudC5wYXJlbnROb2RlKQotICAgICAgICAgICAgZXhpc3RpbmdFbGVtZW50
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXhpc3RpbmdFbGVtZW50KTsKLSAgICAgICAgdGhpcy5f
dGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRpb24iKTsK
LQotICAgICAgICBpZiAoZWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKGVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0
ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRpb24iLCBlbGVtZW50KTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7Ci0gICAgfSwKLQotICAg
IF9yZWdpc3Rlck1vdXNlTGlzdGVuZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVu
dS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZXVwIiwgdGhpcy5fbW91c2VVcC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAg
IHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURv
d24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fbW91c2VNb3ZlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5fbW91
c2VPdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLl9kYmxDbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0g
ICAgfSwKLQotICAgIF9yZWdpc3RlcktleWJvYXJkTGlzdGVuZXJzOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX2tleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLl9jb250YWluZXIu
YWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5fdGV4dElucHV0LmJpbmQodGhpcyks
IGZhbHNlKTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyQ2xpcGJvYXJkTGlzdGVuZXJzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigi
YmVmb3JlY29weSIsIHRoaXMuX2JlZm9yZUNvcHkuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgICAg
ICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsIHRoaXMuX2NvcHkuYmlu
ZCh0aGlzKSwgZmFsc2UpOwotICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5l
cigiYmVmb3JlY3V0IiwgdGhpcy5fYmVmb3JlQ3V0LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAg
ICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImN1dCIsIHRoaXMuX2N1dC5iaW5k
KHRoaXMpLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVy
KCJiZWZvcmVwYXN0ZSIsIHRoaXMuX2JlZm9yZVBhc3RlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInBhc3RlIiwgdGhpcy5fcGFz
dGUuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIH0sCi0KLSAgICBfb2Zmc2V0VG9MaW5lOiBmdW5j
dGlvbihvZmZzZXQpCi0gICAgewotICAgICAgICBpZiAob2Zmc2V0ID4gdGhpcy5fbGluZU9mZnNl
dHNDYWNoZVt0aGlzLl9saW5lT2Zmc2V0c0NhY2hlLmxlbmd0aCAtIDFdKSB7Ci0gICAgICAgICAg
ICAvLyBTZWVraW5nIG91dHNpZGUgY2FjaGVkIGFyZWEuIEZpbGwgdGhlIGNhY2hlLgotICAgICAg
ICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLl9saW5lT2Zmc2V0c0NhY2hlLmxlbmd0aDsKLSAg
ICAgICAgICAgIHdoaWxlIChsaW5lTnVtYmVyIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQg
JiYgdGhpcy5fbGluZVRvT2Zmc2V0KGxpbmVOdW1iZXIpIDwgb2Zmc2V0KQotICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAgIHJldHVybiBsaW5lTnVtYmVyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQmlzZWN0LgotICAgICAgICB2YXIgZnJvbSA9IDA7Ci0gICAgICAg
IHZhciB0byA9IHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUubGVuZ3RoOwotICAgICAgICB3aGlsZSAo
dG8gPiBmcm9tICsgMSkgewotICAgICAgICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGZyb20g
KyB0bykgLyAyKTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9saW5lT2Zmc2V0c0NhY2hlW21pZF0g
PiBvZmZzZXQpCi0gICAgICAgICAgICAgICAgdG8gPSBtaWQ7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZnJvbSA9IG1pZDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG87
Ci0gICAgfSwKLQotICAgIF9saW5lVG9PZmZzZXQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAg
ewotICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lTnVtYmVy
XTsKLSAgICAgICAgaWYgKG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAg
ICAgIGZvciAodmFyIGxpbmUgPSBsaW5lTnVtYmVyOyBsaW5lID4gMDsgLS1saW5lKSB7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lXSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBvZmZzZXQgPSB0aGlzLl9saW5lT2Zmc2V0c0Nh
Y2hlW2xpbmVdOwotICAgICAgICBmb3IgKHZhciBpID0gbGluZSArIDE7IGkgPD0gbGluZU51bWJl
cjsgKytpKSB7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fbGluZUhlaWdodChpIC0gMSk7
Ci0gICAgICAgICAgICB0aGlzLl9saW5lT2Zmc2V0c0NhY2hlW2ldID0gb2Zmc2V0OwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgfSwKLQotICAgIF9saW5lSGVpZ2h0OiBm
dW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8gVXNlIGNhY2hlZCB2YWx1ZSBm
aXJzdC4KLSAgICAgICAgaWYgKHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGluZU51bWJlciArIDFd
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGVbbGluZU51bWJlciAr
IDFdIC0gdGhpcy5fbGluZU9mZnNldHNDYWNoZVtsaW5lTnVtYmVyXTsKLQotICAgICAgICB2YXIg
ZWxlbWVudCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRpdi1k
ZWNvcmF0aW9uIik7Ci0gICAgICAgIGlmIChlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIDIg
KiB0aGlzLl90ZXh0TGluZUhlaWdodCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0OwotICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dExpbmVIZWlnaHQ7Ci0gICAgfSwKLQotICAgIHJldmVhbDogZnVuY3Rp
b24obGluZSwgY29sdW1uKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2Nyb2xsVG9wID0gdGhpcy5f
Y29udGFpbmVyLnNjcm9sbFRvcDsKLSAgICAgICAgdGhpcy5fc2Nyb2xsTGVmdCA9IHRoaXMuX2Nv
bnRhaW5lci5zY3JvbGxMZWZ0OwotCi0gICAgICAgIHZhciBtYXhTY3JvbGxUb3AgPSB0aGlzLl9s
aW5lVG9PZmZzZXQobGluZSk7Ci0gICAgICAgIHZhciBtaW5TY3JvbGxUb3AgPSBtYXhTY3JvbGxU
b3AgKyB0aGlzLl9saW5lSGVpZ2h0KGxpbmUpIC0gdGhpcy5fY2FudmFzLmhlaWdodDsKLSAgICAg
ICAgaWYgKHRoaXMuX3Njcm9sbFRvcCA+IG1heFNjcm9sbFRvcCkKLSAgICAgICAgICAgIHRoaXMu
X2NvbnRhaW5lci5zY3JvbGxUb3AgPSBtYXhTY3JvbGxUb3AgLSB0aGlzLl90ZXh0TGluZUhlaWdo
dCAqIDI7Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMuX3Njcm9sbFRvcCA8IG1pblNjcm9sbFRvcCkK
LSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3AgPSBtaW5TY3JvbGxUb3AgKyB0
aGlzLl90ZXh0TGluZUhlaWdodCAqIDI7Ci0KLSAgICAgICAgdmFyIGZpcnN0Q29sdW1uID0gdGhp
cy5fY29sdW1uRm9yT2Zmc2V0KGxpbmUsIHRoaXMuX3Njcm9sbExlZnQpOwotICAgICAgICB2YXIg
bWF4U2Nyb2xsTGVmdCA9IHRoaXMuX2NvbHVtblRvT2Zmc2V0KGxpbmUsIGNvbHVtbik7Ci0gICAg
ICAgIHZhciBtaW5TY3JvbGxMZWZ0ID0gbWF4U2Nyb2xsTGVmdCAtIHRoaXMuX2NvbnRhaW5lci5j
bGllbnRXaWR0aCArIHRoaXMuX2xpbmVOdW1iZXJXaWR0aDsKLSAgICAgICAgaWYgKHRoaXMuX3Nj
cm9sbExlZnQgPCBtaW5TY3JvbGxMZWZ0KQotICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnNj
cm9sbExlZnQgPSBtaW5TY3JvbGxMZWZ0ICsgMTAwOwotICAgICAgICBlbHNlIGlmICh0aGlzLl9z
Y3JvbGxMZWZ0ID4gbWF4U2Nyb2xsTGVmdCkKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5z
Y3JvbGxMZWZ0ID0gbWF4U2Nyb2xsTGVmdDsKLSAgICAgICAgZWxzZSBpZiAobWluU2Nyb2xsTGVm
dCA8IDAgJiYgbWF4U2Nyb2xsTGVmdCA+IDApCi0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIu
c2Nyb2xsTGVmdCA9IDA7Ci0gICAgfSwKLQotICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwg
bGlzdGVuZXIKLSAgICBfdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwg
b2xkVGV4dCwgbmV3VGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChuZXdSYW5nZS5saW5lc0NvdW50
ID09IG9sZFJhbmdlLmxpbmVzQ291bnQpCi0gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlTGlu
ZXMobmV3UmFuZ2Uuc3RhcnRMaW5lLCBuZXdSYW5nZS5lbmRMaW5lICsgMSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIC8vIExpbmVzIHNoaWZ0ZWQsIGludmFsaWRhdGUgYWxsIHVuZGVyIHN0
YXJ0IGxpbmUuIEFsc28gY2xlYXIgbGluZXMgdGhhdCBub3cgYXJlIG91dHNpZGUgbW9kZWwgcmFu
Z2UuCi0gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlTGluZXMobmV3UmFuZ2Uuc3RhcnRMaW5l
LCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCArIE1hdGgubWF4KDAsIG9sZFJhbmdlLmVuZExp
bmUgLSBuZXdSYW5nZS5lbmRMaW5lKSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodGlu
Z0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBNYXRoLm1pbih0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgdGhpcy5fb2Zmc2V0VG9MaW5lKHRoaXMuX3Njcm9s
bFRvcCArIHRoaXMuX2NhbnZhcy5oZWlnaHQpICsgMSk7Ci0gICAgICAgICAgICB0aGlzLl9oaWdo
bGlnaHRlci51cGRhdGVIaWdobGlnaHQobmV3UmFuZ2Uuc3RhcnRMaW5lLCBsYXN0VmlzaWJsZUxp
bmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlUHJlZmVycmVkU2l6ZShuZXdS
YW5nZS5zdGFydExpbmUsIE1hdGgubWF4KG5ld1JhbmdlLmVuZExpbmUsIG9sZFJhbmdlLmVuZExp
bmUpKTsKLSAgICAgICAgaWYgKG9sZFJhbmdlLmxpbmVzQ291bnQgIT09IG5ld1JhbmdlLmxpbmVz
Q291bnQpIHsKLSAgICAgICAgICAgIC8vIEludmFsaWRhdGUgb2Zmc2V0IGNhY2hlLgotICAgICAg
ICAgICAgdGhpcy5fbGluZU9mZnNldHNDYWNoZS5sZW5ndGggPSBvbGRSYW5nZS5zdGFydExpbmUg
KyAxOwotICAgICAgICAgICAgLy8gRm9yY2UgbGluZW51bWJlciBjYWNoZSB0byBiZSBjb250aW51
b3VzLgotICAgICAgICAgICAgdGhpcy5fbGluZVRvT2Zmc2V0KG9sZFJhbmdlLnN0YXJ0TGluZSk7
Ci0gICAgICAgICAgICB0aGlzLnBhaW50TGluZU51bWJlcnMoKTsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLl9wYWludCgpOwotICAgIH0sCi0KLSAgICAvLyBXZWJJbnNwZWN0b3IuVGV4dFNlbGVj
dGlvbk1vZGVsIGxpc3RlbmVyCi0gICAgX3NlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJh
bmdlLCBuZXdSYW5nZSkKLSAgICB7Ci0gICAgICAgIGlmIChvbGRSYW5nZS5pc0VtcHR5KCkgJiYg
bmV3UmFuZ2UuaXNFbXB0eSgpICYmIG9sZFJhbmdlLnN0YXJ0TGluZSA9PT0gbmV3UmFuZ2Uuc3Rh
cnRMaW5lKSB7Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIHJlcGFpbnQuCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9pbnZhbGlkYXRlTGluZXMob2xk
UmFuZ2Uuc3RhcnRMaW5lLCBvbGRSYW5nZS5lbmRMaW5lICsgMSk7Ci0gICAgICAgIHRoaXMuX2lu
dmFsaWRhdGVMaW5lcyhuZXdSYW5nZS5zdGFydExpbmUsIG5ld1JhbmdlLmVuZExpbmUgKyAxKTsK
LSAgICAgICAgdGhpcy5fcGFpbnQoKTsKLSAgICB9LAotCi0gICAgX2hpZ2hsaWdodENoYW5nZWQ6
IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbXV0
ZUhpZ2hsaWdodExpc3RlbmVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
X2ludmFsaWRhdGVMaW5lcyhmcm9tTGluZSwgdG9MaW5lKTsKLSAgICAgICAgdGhpcy5fcGFpbnQo
KTsKLSAgICB9LAotCi0gICAgcmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsKLSAgICAg
ICAgdGhpcy5fbGluZU9mZnNldHNDYWNoZSA9IFswXTsKLSAgICAgICAgdGhpcy5fdXBkYXRlUHJl
ZmVycmVkU2l6ZSgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7Ci0gICAgICAgIHRoaXMu
cmVwYWludEFsbCgpOwotICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUoZmFsc2UpOwot
ICAgIH0sCi0KLSAgICBfdXBkYXRlUHJlZmVycmVkU2l6ZTogZnVuY3Rpb24oc3RhcnRMaW5lLCBl
bmRMaW5lKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3R4LmZvbnQgPSB0aGlzLl9mb250OwotICAg
ICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAgICAgIHZhciBndWFyZGVk
RW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRMaW5lICsg
MSk7Ci0gICAgICAgIHZhciBuZXdNYXhpbXVtID0gZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGkg
PSBzdGFydExpbmU7IGkgPCBndWFyZGVkRW5kTGluZTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
bGluZVdpZHRoID0gdGhpcy5fY3R4Lm1lYXN1cmVUZXh0KHRoaXMuX3RleHRNb2RlbC5saW5lKGkp
KS53aWR0aDsKLSAgICAgICAgICAgIGlmIChsaW5lV2lkdGggPiB0aGlzLl90ZXh0V2lkdGgpIHsK
LSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0V2lkdGggPSBsaW5lV2lkdGg7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fbG9uZ2VzdExpbmVOdW1iZXIgPSBpOwotICAgICAgICAgICAgICAgIG5ld01h
eGltdW0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFu
ZXdNYXhpbXVtICYmIHN0YXJ0TGluZSA8PSB0aGlzLl9sb25nZXN0TGluZU51bWJlciAmJiB0aGlz
Ll9sb25nZXN0TGluZU51bWJlciA8PSBlbmRMaW5lKSB7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0
V2lkdGggPSAwOwotICAgICAgICAgICAgdGhpcy5fbG9uZ2VzdExpbmVOdW1iZXIgPSAwOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuX2N0eC5tZWFzdXJl
VGV4dCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSkud2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYg
KGxpbmVXaWR0aCA+IHRoaXMuX3RleHRXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90ZXh0V2lkdGggPSBsaW5lV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdl
c3RMaW5lTnVtYmVyID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgbmV3TGluZU51bWJlckRpZ2l0cyA9IHRoaXMuX2RlY2ltYWxE
aWdpdHModGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpOwotICAgICAgICB0aGlzLl9saW5lTnVt
YmVyV2lkdGggPSAobmV3TGluZU51bWJlckRpZ2l0cyArIDIpICogdGhpcy5fZGlnaXRXaWR0aDsK
LSAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQgPSB0aGlzLl9saW5lTnVtYmVyV2lk
dGggKyAicHgiOwotCi0gICAgICAgIHZhciBuZXdXaWR0aCA9IHRoaXMuX3RleHRXaWR0aCArICJw
eCI7Ci0gICAgICAgIHZhciBuZXdIZWlnaHQgPSB0aGlzLl9saW5lVG9PZmZzZXQodGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpICsgInB4IjsKLSAgICAgICAgdGhpcy5fc2hlZXQuc3R5bGUud2lk
dGggPSBuZXdXaWR0aDsKLSAgICAgICAgdGhpcy5fc2hlZXQuc3R5bGUuaGVpZ2h0ID0gbmV3SGVp
Z2h0OwotCi0gICAgICAgIGlmIChuZXdMaW5lTnVtYmVyRGlnaXRzICE9PSB0aGlzLl9saW5lTnVt
YmVyRGlnaXRzKSB7Ci0gICAgICAgICAgICB0aGlzLl9saW5lTnVtYmVyRGlnaXRzID0gbmV3TGlu
ZU51bWJlckRpZ2l0czsKLSAgICAgICAgICAgIHRoaXMucmVwYWludEFsbCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQ2hhbmdlcyB0byBzaXplIGNhbiBjaGFuZ2UgdGhlIGNsaWVudCBhcmVh
IChzY3JvbGxlcnMgY2FuIGFwcGVhci9kaXNhcHBlYXIpCi0gICAgICAgIHRoaXMucmVzaXplKCk7
Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7Ci0gICAgfSwKLQotICAg
IHJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NhbnZhcy53aWR0
aCAhPT0gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IHRoaXMuX2NhbnZhcy5oZWlnaHQg
IT09IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQpIHsKLSAgICAgICAgICAgIHRoaXMuX2Nh
bnZhcy53aWR0aCA9IHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCArIHRoaXMuX2xpbmVOdW1i
ZXJXaWR0aDsKLSAgICAgICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSB0aGlzLl9jb250YWlu
ZXIuY2xpZW50SGVpZ2h0OwotICAgICAgICAgICAgdGhpcy5yZXBhaW50QWxsKCk7Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgcmVwYWludEFsbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5faW52YWxpZGF0ZUxpbmVzKDAsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKLSAg
ICAgICAgdGhpcy5fcGFpbnQoKTsKLSAgICB9LAotCi0gICAgX2ludmFsaWRhdGVMaW5lczogZnVu
Y3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9kYW1h
Z2UpCi0gICAgICAgICAgICB0aGlzLl9kYW1hZ2UgPSBbIHsgc3RhcnRMaW5lOiBzdGFydExpbmUs
IGVuZExpbmU6IGVuZExpbmUgfSBdOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fZGFtYWdlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNodW5rID0gdGhpcy5fZGFtYWdlW2ldOwotICAgICAgICAgICAgICAgIGlmIChjaHVu
ay5zdGFydExpbmUgPD0gZW5kTGluZSAmJiBjaHVuay5lbmRMaW5lID49IHN0YXJ0TGluZSkgewot
ICAgICAgICAgICAgICAgICAgICBjaHVuay5zdGFydExpbmUgPSBNYXRoLm1pbihjaHVuay5zdGFy
dExpbmUsIHN0YXJ0TGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rLmVuZExpbmUgPSBN
YXRoLm1heChjaHVuay5lbmRMaW5lLCBlbmRMaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMu
X2RhbWFnZS5wdXNoKHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVuZExpbmU6IGVuZExpbmUgfSk7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3BhaW50OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9zY3JvbGxUb3AgPSB0aGlzLl9jb250YWluZXIuc2Nyb2xsVG9wOwotICAgICAg
ICB0aGlzLl9zY3JvbGxMZWZ0ID0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQ7Ci0KLSAgICAg
ICAgaWYgKHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHRoaXMuX3VwZGF0ZURpdkRlY29yYXRpb25zKCk7Ci0KLSAgICAgICAgdGhpcy5w
YWludExpbmVOdW1iZXJzKCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX2RhbWFn
ZSAmJiBpIDwgdGhpcy5fZGFtYWdlLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fcGFp
bnRMaW5lcyh0aGlzLl9kYW1hZ2VbaV0uc3RhcnRMaW5lLCB0aGlzLl9kYW1hZ2VbaV0uZW5kTGlu
ZSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9kYW1hZ2U7Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRl
Q3Vyc29yKHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lLCB0aGlzLl9zZWxlY3Rpb24uZW5kQ29sdW1u
KTsKLSAgICB9LAotCi0gICAgX3BhaW50TGluZXM6IGZ1bmN0aW9uKGZpcnN0TGluZSwgbGFzdExp
bmUpCi0gICAgewotICAgICAgICB0aGlzLl9jdHguZm9udCA9IHRoaXMuX2ZvbnQ7Ci0gICAgICAg
IHRoaXMuX2N0eC50ZXh0QmFzZWxpbmUgPSAiYm90dG9tIjsKLQotICAgICAgICBmaXJzdExpbmUg
PSBNYXRoLm1heChmaXJzdExpbmUsIHRoaXMuX29mZnNldFRvTGluZSh0aGlzLl9zY3JvbGxUb3Ap
IC0gMSk7Ci0gICAgICAgIGxhc3RMaW5lID0gTWF0aC5taW4obGFzdExpbmUsIHRoaXMuX29mZnNl
dFRvTGluZSh0aGlzLl9zY3JvbGxUb3AgKyB0aGlzLl9jYW52YXMuaGVpZ2h0KSArIDEpOwotICAg
ICAgICBpZiAoZmlyc3RMaW5lID4gbGFzdExpbmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxv
ZygiUmVwYWludCAlZDolZCIsIGZpcnN0TGluZSwgbGFzdExpbmUpOwotICAgICAgICAgICAgdGhp
cy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDI1NSwwKSI7Ci0gICAgICAgICAgICB2YXIgZnJv
bU9mZnNldCA9IHRoaXMuX2xpbmVUb09mZnNldChmaXJzdExpbmUpOwotICAgICAgICAgICAgdmFy
IHRvT2Zmc2V0ID0gdGhpcy5fbGluZVRvT2Zmc2V0KGxhc3RMaW5lKTsKLSAgICAgICAgICAgIHRo
aXMuX2N0eC5maWxsUmVjdCh0aGlzLl9saW5lTnVtYmVyV2lkdGggLSAxLCBmcm9tT2Zmc2V0IC0g
dGhpcy5fc2Nyb2xsVG9wLCB0aGlzLl9jYW52YXMud2lkdGggLSB0aGlzLl9saW5lTnVtYmVyV2lk
dGggKyAxLCB0b09mZnNldCAtIGZyb21PZmZzZXQpOwotICAgICAgICAgICAgc2V0VGltZW91dCh0
aGlzLl9wYWludExpbmVzQ29udGludWF0aW9uLmJpbmQodGhpcywgZmlyc3RMaW5lLCBsYXN0TGlu
ZSksIDEwMCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lc0Nv
bnRpbnVhdGlvbihmaXJzdExpbmUsIGxhc3RMaW5lKTsKLSAgICB9LAotCi0gICAgX3BhaW50TGlu
ZXNDb250aW51YXRpb246IGZ1bmN0aW9uKGZpcnN0TGluZSwgbGFzdExpbmUpIHsKLSAgICAgICAg
Ly8gQ2xpcCBlZGl0b3IgYXJlYS4KLSAgICAgICAgdGhpcy5fY3R4LnNhdmUoKTsKLSAgICAgICAg
dGhpcy5fY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICB0aGlzLl9jdHgucmVjdCh0aGlzLl9saW5l
TnVtYmVyV2lkdGggLSAxLCAwLCB0aGlzLl9jYW52YXMud2lkdGggLSB0aGlzLl9saW5lTnVtYmVy
V2lkdGggKyAxLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKLSAgICAgICAgdGhpcy5fY3R4LmNsaXAo
KTsKLQotICAgICAgICAvLyBGaXJzdCBjbGVhciB0aGUgcmVnaW9uLCB0aGVuIHVwZGF0ZSBsYXN0
IGxpbmUgdG8gZml0IG1vZGVsICh0aGlzIGNsZWFycyByZW1vdmVkIGxpbmVzIGZyb20gdGhlIGVu
ZCBvZiB0aGUgZG9jdW1lbnQpLgotICAgICAgICB2YXIgZnJvbU9mZnNldCA9IHRoaXMuX2xpbmVU
b09mZnNldChmaXJzdExpbmUpOwotICAgICAgICB2YXIgdG9PZmZzZXQgPSBsYXN0TGluZSA8IHRo
aXMuX3RleHRNb2RlbC5saW5lc0NvdW50ID8gdGhpcy5fbGluZVRvT2Zmc2V0KGxhc3RMaW5lKSA6
IHRoaXMuX2NhbnZhcy5oZWlnaHQgKyB0aGlzLl9zY3JvbGxUb3A7Ci0KLSAgICAgICAgLy8gRG8g
bm90IGNsZWFyIHJlZ2lvbiB3aGVuIHBhaW50Q3VycmVudExpbmUgaXMgbGlrZWx5IHRvIGRvIGFs
bCB0aGUgbmVjZXNzYXJ5IHdvcmsuCi0gICAgICAgIGlmICh0aGlzLl9yZWFkT25seSB8fCBmaXJz
dExpbmUgKyAxICE9IGxhc3RMaW5lIHx8IHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lICE9IGZpcnN0
TGluZSkgewotICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDI1NSwy
NTUpIjsKLSAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsUmVjdCgwLCBmcm9tT2Zmc2V0IC0gdGhp
cy5fc2Nyb2xsVG9wLCB0aGlzLl9jYW52YXMud2lkdGgsIHRvT2Zmc2V0IC0gZnJvbU9mZnNldCk7
Ci0gICAgICAgIH0KLSAgICAgICAgbGFzdExpbmUgPSBNYXRoLm1pbihsYXN0TGluZSwgdGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQpOwotCi0gICAgICAgIC8vIFBhaW50IGN1cnJlbnQgbGluZSBm
b3IgZWRpdGFibGUgbW9kZSBvbmx5LgotICAgICAgICBpZiAoIXRoaXMuX3JlYWRPbmx5ICYmIHRo
aXMuX3NlbGVjdGlvbi5zdGFydExpbmUgPT09IHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lICYmIGZp
cnN0TGluZSA8PSB0aGlzLl9zZWxlY3Rpb24uc3RhcnRMaW5lICYmIHRoaXMuX3NlbGVjdGlvbi5z
dGFydExpbmUgPCBsYXN0TGluZSkKLSAgICAgICAgICAgIHRoaXMuX3BhaW50Q3VycmVudExpbmUo
dGhpcy5fc2VsZWN0aW9uLnN0YXJ0TGluZSk7Ci0KLSAgICAgICAgdGhpcy5fcGFpbnRTZWxlY3Rp
b24oZmlyc3RMaW5lLCBsYXN0TGluZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodGlu
Z0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lciA9IHRy
dWU7Ci0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5oaWdobGlnaHQobGFzdExpbmUpOwot
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcjsKLSAgICAgICAg
fQotICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RMaW5lOyBpIDwgbGFzdExpbmU7ICsraSkgewot
ICAgICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSB0aGlzLl9saW5lVG9PZmZzZXQoaSkgLSB0aGlz
Ll9zY3JvbGxUb3A7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9saW5lRGVjb3JhdG9yKQotICAg
ICAgICAgICAgICAgIHRoaXMuX2xpbmVEZWNvcmF0b3IuZGVjb3JhdGUoaSwgdGhpcy5fY3R4LCB0
aGlzLl9saW5lTnVtYmVyV2lkdGggLSAxLCBsaW5lT2Zmc2V0LCB0aGlzLl9jYW52YXMud2lkdGgg
LSB0aGlzLl9saW5lTnVtYmVyV2lkdGggKyAxLCB0aGlzLl9saW5lSGVpZ2h0KGkpLCB0aGlzLl90
ZXh0TGluZUhlaWdodCk7Ci0KLSAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fdGV4dE1v
ZGVsLmdldEF0dHJpYnV0ZShpLCAiZGl2LWRlY29yYXRpb24iKTsKLSAgICAgICAgICAgIGlmIChl
bGVtZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uRGl2RGVjb3JhdGlvbihpLCBl
bGVtZW50LCB0cnVlKTsKLQotICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGksIGxpbmVPZmZz
ZXQpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2N0eC5yZXN0b3JlKCk7Ci0gICAgfSwKLQot
ICAgIF9wYWludExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGxpbmVPZmZzZXQpCi0gICAgewot
ICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwotICAg
ICAgICBpZiAoIXRoaXMuX2hpZ2hsaWdodGluZ0VuYWJsZWQpIHsKLSAgICAgICAgICAgIHRoaXMu
X2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCwwKSI7Ci0gICAgICAgICAgICB0aGlzLl9jdHguZmls
bFRleHQobGluZSwgdGhpcy5fbGluZU51bWJlcldpZHRoIC0gdGhpcy5fc2Nyb2xsTGVmdCwgbGlu
ZU9mZnNldCArIHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IDEwMDApIHsKLSAgICAgICAgICAg
IC8vIE9wdGltaXphdGlvbjogbm8gbmVlZCB0byBwYWludCBkZWNvcmF0aW9ucyBvdXRzaWRlIHZp
c2libGUgYXJlYS4KLSAgICAgICAgICAgIHZhciBmaXJzdENvbHVtbiA9IHRoaXMuX2NvbHVtbkZv
ck9mZnNldChsaW5lTnVtYmVyLCB0aGlzLl9zY3JvbGxMZWZ0KTsKLSAgICAgICAgICAgIHZhciBs
YXN0Q29sdW1uID0gdGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIHRoaXMuX3Njcm9s
bExlZnQgKyB0aGlzLl9jYW52YXMud2lkdGgpOwotICAgICAgICB9Ci0gICAgICAgIHZhciBoaWdo
bGlnaHRlclN0YXRlID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAi
aGlnaGxpZ2h0ZXItc3RhdGUiKTsKLSAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0gLTE7Ci0g
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7Ci0gICAgICAgICAgICB2
YXIgYXR0cmlidXRlID0gaGlnaGxpZ2h0ZXJTdGF0ZSAmJiBoaWdobGlnaHRlclN0YXRlLmF0dHJp
YnV0ZXNbal07Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlICYmIGZpcnN0Q29sdW1uICYmIGog
KyBhdHRyaWJ1dGUubGVuZ3RoIDwgZmlyc3RDb2x1bW4pIHsKLSAgICAgICAgICAgICAgICBqICs9
IGF0dHJpYnV0ZS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlICYmIGxhc3RDb2x1bW4gJiYgaiA+IGxhc3RD
b2x1bW4pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIWF0dHJpYnV0
ZSB8fCAhYXR0cmlidXRlLnN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0
YXJ0ID09PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBqOwotICAg
ICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
dHguZmlsbFN0eWxlID0gInJnYigwLDAsMCkiOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
dHguZmlsbFRleHQobGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopLCB0aGlzLl9saW5l
TnVtYmVyV2lkdGggLSB0aGlzLl9zY3JvbGxMZWZ0ICsgdGhpcy5fY29sdW1uVG9PZmZzZXQobGlu
ZU51bWJlciwgcGxhaW5UZXh0U3RhcnQpLCBsaW5lT2Zmc2V0ICsgdGhpcy5fdGV4dExpbmVIZWln
aHQpOwotICAgICAgICAgICAgICAgICAgICBwbGFpblRleHRTdGFydCA9IC0xOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gYXR0cmlidXRl
LnN0eWxlOwotICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmlu
ZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0aCksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMu
X3Njcm9sbExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBqKSwgbGluZU9m
ZnNldCArIHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBqICs9IGF0dHJp
YnV0ZS5sZW5ndGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBsYWlu
VGV4dFN0YXJ0ICE9PSAtMSkgewotICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJy
Z2IoMCwwLDApIjsKLSAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmlu
ZyhwbGFpblRleHRTdGFydCwgaiksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9s
bExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBwbGFpblRleHRTdGFydCks
IGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgcGFpbnRMaW5lTnVtYmVyczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
Y3R4LmZvbnQgPSB0aGlzLl9mb250OwotICAgICAgICB0aGlzLl9jdHgudGV4dEJhc2VsaW5lID0g
ImJvdHRvbSI7Ci0KLSAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDI1NSwy
NTUpIjsKLSAgICAgICAgdGhpcy5fY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuX2xpbmVOdW1iZXJX
aWR0aCAtIDIsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwotCi0gICAgICAgIHRoaXMuX2N0eC5maWxs
U3R5bGUgPSAicmdiKDIzNSwyMzUsMjM1KSI7Ci0gICAgICAgIHRoaXMuX2N0eC5maWxsUmVjdCh0
aGlzLl9saW5lTnVtYmVyV2lkdGggLSAyLCAwLCAxLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKLQot
ICAgICAgICB2YXIgZmlyc3RMaW5lID0gTWF0aC5tYXgoMCwgdGhpcy5fb2Zmc2V0VG9MaW5lKHRo
aXMuX3Njcm9sbFRvcCkgLSAxKTsKLSAgICAgICAgdmFyIGxhc3RMaW5lID0gTWF0aC5taW4odGhp
cy5fdGV4dE1vZGVsLmxpbmVzQ291bnQsIHRoaXMuX29mZnNldFRvTGluZSh0aGlzLl9zY3JvbGxU
b3AgKyB0aGlzLl9jYW52YXMuaGVpZ2h0KSArIDEpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSBm
aXJzdExpbmU7IGkgPCBsYXN0TGluZTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZU9mZnNl
dCA9IHRoaXMuX2xpbmVUb09mZnNldChpKSAtIHRoaXMuX3Njcm9sbFRvcDsKLSAgICAgICAgICAg
IHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDE1NSwxNTUsMTU1KSI7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5fbGluZU51bWJlckRlY29yYXRvciAmJiB0aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9y
LmRlY29yYXRlKGksIHRoaXMuX2N0eCwgMCwgbGluZU9mZnNldCwgdGhpcy5fbGluZU51bWJlcldp
ZHRoLCB0aGlzLl9saW5lSGVpZ2h0KGkpLCB0aGlzLl90ZXh0TGluZUhlaWdodCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aGlzLl9jdHguZmlsbFRleHQoaSArIDEs
ICh0aGlzLl9saW5lTnVtYmVyRGlnaXRzIC0gdGhpcy5fZGVjaW1hbERpZ2l0cyhpICsgMSkgKyAx
KSAqIHRoaXMuX2RpZ2l0V2lkdGgsIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3BhaW50Q3VycmVudExpbmU6IGZ1bmN0aW9uKGxp
bmUpCi0gICAgewotICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gInJnYigyMzIsIDI0Miwg
MjU0KSI7Ci0gICAgICAgIHRoaXMuX2N0eC5maWxsUmVjdCgwLCB0aGlzLl9saW5lVG9PZmZzZXQo
bGluZSkgLSB0aGlzLl9zY3JvbGxUb3AsIHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fbGluZUhl
aWdodChsaW5lKSk7Ci0gICAgfSwKLQotICAgIF9zY3JvbGw6IGZ1bmN0aW9uKGUpCi0gICAgewot
ICAgICAgICAvLyBIaWRlIGRpdi1iYXNlZCBjdXJzb3IgZmlyc3QuCi0gICAgICAgIHRoaXMuX2N1
cnNvci5fY3Vyc29yRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgICBzZXRU
aW1lb3V0KHRoaXMuX3JlcGFpbnRPblNjcm9sbC5iaW5kKHRoaXMpLCAxMCk7Ci0gICAgfSwKLQot
ICAgIF9yZXBhaW50T25TY3JvbGw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9zY3JvbGxUb3AgIT09IHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3AgfHwgdGhpcy5fc2Nyb2xs
TGVmdCAhPT0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQpIHsKLSAgICAgICAgICAgIHRoaXMu
X3Njcm9sbFRvcCA9IHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3A7Ci0gICAgICAgICAgICB0aGlz
Ll9zY3JvbGxMZWZ0ID0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQ7Ci0gICAgICAgICAgICB0
aGlzLnJlcGFpbnRBbGwoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfbW91c2VVcDogZnVu
Y3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lzRHJhZ2dpbmcgPSBmYWxzZTsKLSAgICB9
LAotCi0gICAgX21vdXNlRG93bjogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmIChlLmJ1
dHRvbiA9PT0gMiB8fCAodGhpcy5faXNNYWMgJiYgZS5jdHJsS2V5KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9jYXJldEZvck1vdXNlRXZlbnQo
ZSk7Ci0KLSAgICAgICAgaWYgKGUudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnQgJiYgdGhpcy5fbGlu
ZU51bWJlckRlY29yYXRvcikgewotICAgICAgICAgICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJEZWNv
cmF0b3IubW91c2VEb3duKGxvY2F0aW9uLmxpbmUsIGUpKSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlLnNoaWZ0S2V5KQotICAg
ICAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uRW5kKGxvY2F0aW9uLmxpbmUsIGxvY2F0aW9uLmNv
bHVtbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3NldENhcmV0TG9jYXRpb24o
bG9jYXRpb24ubGluZSwgbG9jYXRpb24uY29sdW1uKTsKLSAgICAgICAgdGhpcy5faXNEcmFnZ2lu
ZyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwot
ICAgIH0sCi0KLSAgICBfbW91c2VNb3ZlOiBmdW5jdGlvbihlKQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLl9pc0RyYWdnaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgbG9j
YXRpb24gPSB0aGlzLl9jYXJldEZvck1vdXNlRXZlbnQoZSk7Ci0gICAgICAgIHRoaXMuX3NldFNl
bGVjdGlvbkVuZChsb2NhdGlvbi5saW5lLCBsb2NhdGlvbi5jb2x1bW4pCi0gICAgfSwKLQotICAg
IF9tb3VzZU91dDogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgfSwKLQotICAgIF9kYmxDbGljazog
ZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2NhcmV0Rm9y
TW91c2VFdmVudChlKTsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fdGV4dE1vZGVsLndvcmRS
YW5nZShsb2NhdGlvbi5saW5lLCBsb2NhdGlvbi5jb2x1bW4pOwotICAgICAgICB0aGlzLnNldFNl
bGVjdGlvbihyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0Q29sdW1uLCByYW5nZS5lbmRMaW5l
LCByYW5nZS5lbmRDb2x1bW4pOwotICAgIH0sCi0KLSAgICBfY29udGV4dE1lbnU6IGZ1bmN0aW9u
KGUpCi0gICAgewotICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMuZWxlbWVudCAmJiB0aGlz
Ll9saW5lTnVtYmVyRGVjb3JhdG9yKSB7Ci0gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlz
Ll9jYXJldEZvck1vdXNlRXZlbnQoZSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fbGluZU51bWJl
ckRlY29yYXRvci5jb250ZXh0TWVudShsb2NhdGlvbi5saW5lLCBlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlz
Ll9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKHJh
bmdlKTsKLSAgICAgICAgICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9y
LkNvbnRleHRNZW51KCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvcHkiKSwgdGhpcy5fY29weS5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudS5zaG93KGV2ZW50KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICBfY2FyZXRGb3JNb3VzZUV2ZW50OiBmdW5jdGlvbihlKQot
ICAgIHsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCB0aGlzLl9vZmZzZXRU
b0xpbmUoZS5vZmZzZXRZICsgKGUudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnQgPyB0aGlzLl9zY3Jv
bGxUb3AgOiAwKSkgLSAxKTsKLSAgICAgICAgdmFyIG9mZnNldCA9IGUub2Zmc2V0WCArIHRoaXMu
X3Njcm9sbExlZnQ7Ci0gICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjog
dGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIG9mZnNldCkgfTsKLSAgICB9LAotCi0g
ICAgX2NvbHVtbkZvck9mZnNldDogZnVuY3Rpb24obGluZU51bWJlciwgb2Zmc2V0KQotICAgIHsK
LSAgICAgICAgdmFyIGxlbmd0aCA9IDA7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1v
ZGVsLmxpbmUobGluZU51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlyc3QgcHJldGVuZCBpdCBpcyBt
b25vc3BhY2UgdG8gZ2V0IGEgcXVpY2sgZ3Vlc3MuCi0gICAgICAgIHZhciBjaGFyV2lkdGggPSB0
aGlzLl9jdHgubWVhc3VyZVRleHQoImEiKS53aWR0aDsKLSAgICAgICAgdmFyIGluZGV4ID0gTWF0
aC5mbG9vcihvZmZzZXQgLyBjaGFyV2lkdGgpOwotICAgICAgICB2YXIgaW5kZXhPZmZzZXQgPSB0
aGlzLl9jdHgubWVhc3VyZVRleHQobGluZS5zdWJzdHJpbmcoMCwgaW5kZXgpKS53aWR0aDsKLSAg
ICAgICAgaWYgKG9mZnNldCA+PSBpbmRleE9mZnNldCAmJiBpbmRleCA8IGxpbmUubGVuZ3RoICYm
IG9mZnNldCA8IGluZGV4T2Zmc2V0ICsgdGhpcy5fY3R4Lm1lYXN1cmVUZXh0KGxpbmUuY2hhckF0
KGluZGV4KSkud2lkdGgpCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0KLSAgICAgICAgLy8g
RmFsbGJhY2sgdG8gbm9uLW1vbm9zcGFjZS4KLSAgICAgICAgdmFyIGRlbHRhID0gaW5kZXhPZmZz
ZXQgPCBvZmZzZXQgPyAxIDogLTE7Ci0gICAgICAgIHdoaWxlIChpbmRleCA+PTAgJiYgaW5kZXgg
PCBsaW5lLmxlbmd0aCkgewotICAgICAgICAgICAgaW5kZXggKz0gZGVsdGE7Ci0gICAgICAgICAg
ICBpbmRleE9mZnNldCArPSBkZWx0YSAqIHRoaXMuX2N0eC5tZWFzdXJlVGV4dChsaW5lLmNoYXJB
dChpbmRleCkpLndpZHRoOwotICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBpbmRleE9mZnNldCAm
JiBvZmZzZXQgPCBpbmRleE9mZnNldCArIGNoYXJXaWR0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpbmUubGVuZ3RoOwotICAgIH0s
Ci0KLSAgICBfY29sdW1uVG9PZmZzZXQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbikKLSAg
ICB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9jdHgubWVhc3VyZVRleHQobGluZS5zdWJzdHJpbmcoMCwg
Y29sdW1uKSkud2lkdGg7Ci0gICAgfSwKLQotICAgIF9rZXlEb3duOiBmdW5jdGlvbihlKQotICAg
IHsKLSAgICAgICAgdmFyIHNob3J0Y3V0S2V5ID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQubWFrZUtleUZyb21FdmVudChlKTsKLSAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLl9zaG9y
dGN1dHNbc2hvcnRjdXRLZXldOwotICAgICAgICBpZiAoaGFuZGxlcikgewotICAgICAgICAgICAg
aGFuZGxlci5jYWxsKHRoaXMpOwotICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAg
ICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9oYW5kbGVOYXZpZ2F0aW9uS2V5KGUpKSB7Ci0gICAg
ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlv
bigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMu
X3JlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBrZXlDb2RlcyA9
IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleUNvZGVzOwotICAgICAgICBzd2l0Y2gg
KGUua2V5Q29kZSkgewotICAgICAgICAgICAgY2FzZSBrZXlDb2Rlcy5CYWNrc3BhY2U6Ci0gICAg
ICAgICAgICAgICAgdGhpcy5faGFuZGxlQmFja3NwYWNlS2V5KCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtleUNvZGVzLkRlbGV0ZToKLSAgICAgICAgICAgICAg
ICB0aGlzLl9oYW5kbGVEZWxldGVLZXkoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2Uga2V5Q29kZXMuVGFiOgotICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VT
ZWxlY3Rpb25XaXRoKCJcdCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBrZXlDb2Rlcy5FbnRlcjoKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlU2VsZWN0
aW9uV2l0aCgiXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZS5wcmV2
ZW50RGVmYXVsdCgpOwotICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0sCi0KLSAg
ICBfaGFuZGxlTmF2aWdhdGlvbktleTogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBj
YXJldExpbmUgPSB0aGlzLl9zZWxlY3Rpb24uZW5kTGluZTsKLSAgICAgICAgdmFyIGNhcmV0Q29s
dW1uID0gdGhpcy5fc2VsZWN0aW9uLmVuZENvbHVtbjsKLSAgICAgICAgdmFyIGFycm93QWN0aW9u
ID0gZS5zaGlmdEtleSA/IHRoaXMuX3NldFNlbGVjdGlvbkVuZCA6IHRoaXMuX3NldENhcmV0TG9j
YXRpb247Ci0KLSAgICAgICAgdmFyIGtleUNvZGVzID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hv
cnRjdXQuS2V5Q29kZXM7Ci0gICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7Ci0gICAgICAgICAg
ICBjYXNlIGtleUNvZGVzLlVwOgotICAgICAgICAgICAgY2FzZSBrZXlDb2Rlcy5QYWdlVXA6Ci0g
ICAgICAgICAgICAgICAgaWYgKGUubWV0YUtleSkKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dB
Y3Rpb24uY2FsbCh0aGlzLCAwLCAwLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChl
LmN0cmxLZXkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3Ag
LT0gdGhpcy5fbGluZUhlaWdodChjYXJldExpbmUpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSBrZXlDb2Rlcy5VcCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFycm93QWN0aW9uLmNhbGwodGhpcywgY2FyZXRMaW5lIC0gMSwg
dGhpcy5fZGVzaXJlZENhcmV0Q29sdW1uLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgdGhp
cy5fbGluZVRvT2Zmc2V0KGNhcmV0TGluZSkgLSB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFycm93QWN0aW9uLmNhbGwodGhpcywgdGhpcy5fb2Zmc2V0VG9M
aW5lKG9mZnNldCksIHRoaXMuX2Rlc2lyZWRDYXJldENvbHVtbiwgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIGtleUNvZGVzLkRvd246Ci0gICAgICAgICAgICBjYXNlIGtleUNvZGVz
LlBhZ2VEb3duOgotICAgICAgICAgICAgICAgIGlmIChlLm1ldGFLZXkpCi0gICAgICAgICAgICAg
ICAgICAgIGFycm93QWN0aW9uLmNhbGwodGhpcywgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQg
LSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aCh0aGlzLl90ZXh0TW9kZWwubGluZXNDb3Vu
dCAtIDEpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkpCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3AgKz0gdGhpcy5fbGluZUhl
aWdodChjYXJldExpbmUpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoZS5rZXlDb2RlID09PSBrZXlDb2Rlcy5Eb3duKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCBjYXJldExpbmUgKyAxLCB0aGlzLl9kZXNpcmVk
Q2FyZXRDb2x1bW4sIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9saW5lVG9PZmZzZXQoY2FyZXRMaW5l
KSArIHRoaXMuX2NhbnZhcy5oZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJvd0Fj
dGlvbi5jYWxsKHRoaXMsIHRoaXMuX29mZnNldFRvTGluZShvZmZzZXQpLCB0aGlzLl9kZXNpcmVk
Q2FyZXRDb2x1bW4sIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBrZXlDb2Rlcy5I
b21lOgotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc01ldGFDdHJsKGUpKQotICAgICAgICAg
ICAgICAgICAgICBhcnJvd0FjdGlvbi5jYWxsKHRoaXMsIDAsIDAsIHRydWUpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0
aGlzLl9zZWxlY3Rpb24uZW5kTGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIGtleUNvZGVzLkVuZDoKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNN
ZXRhQ3RybChlKSkKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3Ro
KHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSksIHRydWUpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0aGlzLl9z
ZWxlY3Rpb24uZW5kTGluZSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgodGhpcy5fc2VsZWN0
aW9uLmVuZExpbmUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
a2V5Q29kZXMuTGVmdDoKLSAgICAgICAgICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgIWUubWV0
YUtleSAmJiAhdGhpcy5faXNBbHRDdHJsKGUpICYmICF0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHNlbGVjdGlvbgotICAgICAgICAgICAg
ICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fc2V0Q2FyZXRMb2NhdGlvbihyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0
YXJ0Q29sdW1uKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUubWV0YUtleSkKLSAgICAg
ICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCB0aGlzLl9zZWxlY3Rpb24uZW5k
TGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FyZXRDb2x1bW4gPT09IDAgJiYg
Y2FyZXRMaW5lID4gMCkKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlz
LCBjYXJldExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChjYXJldExpbmUgLSAx
KSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5faXNBbHRDdHJsKGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhcmV0Q29sdW1uID0gdGhpcy5fdGV4dE1vZGVsLndvcmRTdGFydCh0
aGlzLl9zZWxlY3Rpb24uZW5kTGluZSwgdGhpcy5fc2VsZWN0aW9uLmVuZENvbHVtbik7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjYXJldENvbHVtbiA9PT0gdGhpcy5fc2VsZWN0aW9uLmVuZENv
bHVtbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sdW1uID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgYXJyb3dBY3Rpb24uY2FsbCh0aGlzLCBjYXJldExpbmUsIGNhcmV0Q29sdW1u
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dBY3Rp
b24uY2FsbCh0aGlzLCBjYXJldExpbmUsIGNhcmV0Q29sdW1uIC0gMSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtleUNvZGVzLlJpZ2h0OgotICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoY2FyZXRMaW5lKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgIWUubWV0YUtleSAmJiAhdGhpcy5faXNBbHRDdHJs
KGUpICYmICF0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFJlc2V0IHNlbGVjdGlvbgotICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlz
Ll9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZXRM
b2NhdGlvbihyYW5nZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZS5tZXRhS2V5KQotICAgICAgICAgICAgICAgICAgICBhcnJvd0FjdGlvbi5j
YWxsKHRoaXMsIHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZUxl
bmd0aCh0aGlzLl9zZWxlY3Rpb24uZW5kTGluZSkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGNhcmV0Q29sdW1uID09PSBsaW5lLmxlbmd0aCAmJiBjYXJldExpbmUgPCB0aGlzLl90ZXh0TW9k
ZWwubGluZXNDb3VudCAtIDEpCi0gICAgICAgICAgICAgICAgICAgIGFycm93QWN0aW9uLmNhbGwo
dGhpcywgY2FyZXRMaW5lICsgMSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5f
aXNBbHRDdHJsKGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sdW1uID0gdGhpcy5f
dGV4dE1vZGVsLndvcmRFbmQodGhpcy5fc2VsZWN0aW9uLmVuZExpbmUsIHRoaXMuX3NlbGVjdGlv
bi5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZXRDb2x1bW4gPT09IHRo
aXMuX3NlbGVjdGlvbi5lbmRDb2x1bW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXJldENv
bHVtbiA9IGxpbmUubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBhcnJvd0FjdGlvbi5jYWxs
KHRoaXMsIGNhcmV0TGluZSwgY2FyZXRDb2x1bW4pOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBhcnJvd0FjdGlvbi5jYWxsKHRoaXMsIGNhcmV0TGluZSwgY2Fy
ZXRDb2x1bW4gKyAxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9LAotCi0gICAgX3RleHRJbnB1dDogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9yZWFkT25seSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoZS5k
YXRhICYmICFlLmFsdEtleSAmJiAhZS5jdHJsS2V5ICYmICFlLm1ldGFLZXkpIHsKLSAgICAgICAg
ICAgIHRoaXMuX3JlcGxhY2VTZWxlY3Rpb25XaXRoKGUuZGF0YSk7Ci0gICAgICAgICAgICBlLnBy
ZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF9zZXRDYXJldExvY2F0aW9uOiBmdW5jdGlvbihsaW5lLCBjb2x1
bW4sIHVwZG93bikKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGxpbmUsIGNvbHVt
biwgbGluZSwgY29sdW1uLCB1cGRvd24pOwotICAgIH0sCi0KLSAgICBfc2V0U2VsZWN0aW9uRW5k
OiBmdW5jdGlvbihsaW5lLCBjb2x1bW4sIHVwZG93bikKLSAgICB7Ci0gICAgICAgIGlmICghdXBk
b3duKQotICAgICAgICAgICAgdGhpcy5fZGVzaXJlZENhcmV0Q29sdW1uID0gY29sdW1uOwotCi0g
ICAgICAgIHZhciBlbmQgPSB0aGlzLl9maXQobGluZSwgY29sdW1uKTsKLSAgICAgICAgdGhpcy5f
c2VsZWN0aW9uLnNldEVuZChlbmQubGluZSwgZW5kLmNvbHVtbik7Ci0gICAgICAgIHRoaXMucmV2
ZWFsKHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lLCB0aGlzLl9zZWxlY3Rpb24uZW5kQ29sdW1uKTsK
LSAgICAgICAgdGhpcy5fdXBkYXRlQ3Vyc29yKGVuZC5saW5lLCBlbmQuY29sdW1uKTsKLSAgICB9
LAotCi0gICAgX3VwZGF0ZURpdkRlY29yYXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgZmlyc3RMaW5lID0gdGhpcy5fb2Zmc2V0VG9MaW5lKHRoaXMuX3Njcm9sbFRvcCkgLSAx
OwotICAgICAgICB2YXIgbGFzdExpbmUgPSB0aGlzLl9vZmZzZXRUb0xpbmUodGhpcy5fc2Nyb2xs
VG9wICsgdGhpcy5fY2FudmFzLmhlaWdodCkgKyAxOwotCi0gICAgICAgIHZhciBsaW5lc0NvdW50
ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGluZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3Rl
eHRNb2RlbC5nZXRBdHRyaWJ1dGUoaSwgImRpdi1kZWNvcmF0aW9uIik7Ci0gICAgICAgICAgICBp
ZiAoZWxlbWVudCkgewotICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUubGVu
Z3RoID0gTWF0aC5taW4odGhpcy5fbGluZU9mZnNldHNDYWNoZS5sZW5ndGgsIGkgKyAxKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkRpdkRlY29yYXRpb24oaSwgZWxlbWVudCwgaSA+
IGZpcnN0TGluZSAmJiBpIDwgbGFzdExpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIF9wb3NpdGlvbkRpdkRlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIs
IGVsZW1lbnQsIHZpc2libGUpCi0gICAgewotICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9u
ID0gImFic29sdXRlIjsKLSAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLl9saW5lVG9P
ZmZzZXQobGluZU51bWJlcikgLSB0aGlzLl9zY3JvbGxUb3AgKyB0aGlzLl90ZXh0TGluZUhlaWdo
dCArICJweCI7Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuX2xpbmVOdW1iZXJX
aWR0aCArICJweCI7Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIm1heC13aWR0
aCIsIHRoaXMuX2NhbnZhcy53aWR0aCArICJweCIpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlQ3Vy
c29yOiBmdW5jdGlvbihsaW5lLCBjb2x1bW4pCi0gICAgewotICAgICAgICBpZiAobGluZSA+PSB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dmFyIG9mZnNldCA9IHRoaXMuX2NvbHVtblRvT2Zmc2V0KGxpbmUsIGNvbHVtbik7Ci0gICAgICAg
IGlmIChvZmZzZXQgPj0gdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQgJiYgIXRoaXMuX3JlYWRP
bmx5KQotICAgICAgICAgICAgdGhpcy5fY3Vyc29yLnNldExvY2F0aW9uKHRoaXMuX2xpbmVOdW1i
ZXJXaWR0aCArIG9mZnNldCAtIDEsIHRoaXMuX2xpbmVUb09mZnNldChsaW5lKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2N1cnNvci5oaWRlKCk7Ci0gICAgfSwKLQotICAgIF9m
aXQ6IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbikKLSAgICB7Ci0gICAgICAgIGxpbmUgPSBNYXRoLm1h
eCgwLCBNYXRoLm1pbihsaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEpKTsKLSAg
ICAgICAgdmFyIGxpbmVMZW5ndGggPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChsaW5lKTsK
LSAgICAgICAgY29sdW1uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uLCBsaW5lTGVuZ3Ro
KSk7Ci0gICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uIH07Ci0gICAg
fSwKLQotICAgIF9wYWludFNlbGVjdGlvbjogZnVuY3Rpb24oZmlyc3RMaW5lLCBsYXN0TGluZSkK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9zZWxlY3Rpb24ucmFuZ2UoKTsK
LSAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9IHRoaXMuX3NlbGVjdGlvbkNvbG9yOwotCi0g
ICAgICAgIGZpcnN0TGluZSA9IE1hdGgubWF4KGZpcnN0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lKTsK
LSAgICAgICAgZW5kTGluZSA9IE1hdGgubWluKGxhc3RMaW5lLCByYW5nZS5lbmRMaW5lICsgMSk7
Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0TGluZTsgaSA8IGVuZExpbmU7ICsraSkgewot
ICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShpKTsKLSAgICAgICAg
ICAgIHZhciBmcm9tLCB0bzsKLQotICAgICAgICAgICAgaWYgKGkgPT09IHJhbmdlLnN0YXJ0TGlu
ZSkgewotICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9jb2x1bW5Ub09mZnNldChy
YW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0Q29sdW1uKTsKLSAgICAgICAgICAgICAgICBmcm9t
ID0gb2Zmc2V0IC0gdGhpcy5fc2Nyb2xsTGVmdCArIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIDE7
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBmcm9tID0gMDsKLQotICAgICAg
ICAgICAgaWYgKGkgPT09IHJhbmdlLmVuZExpbmUpIHsKLSAgICAgICAgICAgICAgICB2YXIgb2Zm
c2V0ID0gdGhpcy5fY29sdW1uVG9PZmZzZXQocmFuZ2UuZW5kTGluZSwgcmFuZ2UuZW5kQ29sdW1u
KTsKLSAgICAgICAgICAgICAgICB0byA9IG9mZnNldCAtIHRoaXMuX3Njcm9sbExlZnQgKyB0aGlz
Ll9saW5lTnVtYmVyV2lkdGggLSAxOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgdG8gPSB0aGlzLl9jYW52YXMud2lkdGg7Ci0KLSAgICAgICAgICAgIHRoaXMuX2N0eC5maWxs
UmVjdChmcm9tLCB0aGlzLl9saW5lVG9PZmZzZXQoaSkgLSB0aGlzLl9zY3JvbGxUb3AsIHRvIC0g
ZnJvbSwgdGhpcy5fbGluZUhlaWdodChpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fY3R4
LmZpbGxTdHlsZSA9ICJyZ2IoMCwgMCwgMCkiOwotICAgIH0sCi0KLSAgICBfYmVmb3JlQ29weTog
ZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2VsZWN0aW9uLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgX2NvcHk6
IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9zZWxlY3Rpb24u
cmFuZ2UoKTsKLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKHJh
bmdlKTsKLQotICAgICAgICBmdW5jdGlvbiBkZWxheUNvcHkoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGV4dCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzZXRUaW1lb3V0KGRlbGF5Q29weSk7Ci0gICAgICAgIGlmIChlKQotICAgICAgICAg
ICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfYmVmb3JlQ3V0OiBmdW5jdGlv
bihlKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3Rpb24uaXNFbXB0eSgpKQotICAg
ICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfY3V0OiBmdW5jdGlv
bihlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBl
LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLl90ZXh0TW9kZWwubWFya1VuZG9hYmxlU3RhdGUoKTsKLSAgICAgICAgdGhpcy5f
Y29weShlKTsKLSAgICAgICAgdGhpcy5fcmVwbGFjZVNlbGVjdGlvbldpdGgoIiIpOwotICAgIH0s
Ci0KLSAgICBfYmVmb3JlUGFzdGU6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICBlLnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIF9wYXN0ZTogZnVuY3Rpb24oZSkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkgewotICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVs
dCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRleHQg
PSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpOwotICAgICAgICBpZiAoIXRleHQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJs
ZVN0YXRlKCk7Ci0gICAgICAgIHRoaXMuX3JlcGxhY2VTZWxlY3Rpb25XaXRoKHRleHQpOwotICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIF9yZXBsYWNlU2VsZWN0aW9u
V2l0aDogZnVuY3Rpb24obmV3VGV4dCwgb3ZlcnJpZGVSYW5nZSkKLSAgICB7Ci0gICAgICAgIHZh
ciByYW5nZSA9IG92ZXJyaWRlUmFuZ2UgfHwgdGhpcy5fc2VsZWN0aW9uLnJhbmdlKCk7Ci0gICAg
ICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsKLSAgICAgICAgdmFyIG5ld1Jhbmdl
ID0gdGhpcy5fdGV4dE1vZGVsLnNldFRleHQocmFuZ2UsIG5ld1RleHQpOwotICAgICAgICB0aGlz
Ll9zZXRDYXJldExvY2F0aW9uKG5ld1JhbmdlLmVuZExpbmUsIG5ld1JhbmdlLmVuZENvbHVtbik7
Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7Ci0gICAgfSwKLQotICAg
IHNldENvYWxlc2NpbmdVcGRhdGU6IGZ1bmN0aW9uKGVuYWJsZWQpCi0gICAgewotICAgICAgICBp
ZiAoZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKys7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsLS07Ci0g
ICAgICAgIGlmICghdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICB0aGlz
Ll9wYWludCgpOwotICAgIH0sCi0KLSAgICBfc2VsZWN0QWxsOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICAvLyBObyBuZWVkIHRvIHJldmVhbCBsYXN0IHNlbGVjdGlvbiBsaW5lIGluIHNlbGVj
dCBhbGwuCi0gICAgICAgIHRoaXMuX3NlbGVjdGlvbi5zZXRTdGFydCgwLCAwKTsKLSAgICAgICAg
dmFyIGxhc3RMaW5lTnVtID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgLSAxOwotICAgICAg
ICB0aGlzLl9zZWxlY3Rpb24uc2V0RW5kKGxhc3RMaW5lTnVtLCB0aGlzLl90ZXh0TW9kZWwubGlu
ZUxlbmd0aChsYXN0TGluZU51bSkpOwotICAgICAgICB0aGlzLl91cGRhdGVDdXJzb3IodGhpcy5f
c2VsZWN0aW9uLmVuZExpbmUsIHRoaXMuX3NlbGVjdGlvbi5lbmRDb2x1bW4pOwotICAgIH0sCi0K
LSAgICBpbml0Rm9udE1ldHJpY3M6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjb21w
dXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KTsKLSAgICAg
ICAgdGhpcy5fZm9udCA9IGNvbXB1dGVkU3R5bGUuZm9udFNpemUgKyAiICIgKyBjb21wdXRlZFN0
eWxlLmZvbnRGYW1pbHk7Ci0gICAgICAgIHRoaXMuX2N0eC5mb250ID0gdGhpcy5fZm9udDsKLSAg
ICAgICAgdGhpcy5fZGlnaXRXaWR0aCA9IHRoaXMuX2N0eC5tZWFzdXJlVGV4dCgiMCIpLndpZHRo
OwotICAgICAgICB0aGlzLl90ZXh0TGluZUhlaWdodCA9IE1hdGguZmxvb3IocGFyc2VJbnQodGhp
cy5fY3R4LmZvbnQpICogMS40KTsKLSAgICAgICAgdGhpcy5fY3Vyc29yLnNldFRleHRMaW5lSGVp
Z2h0KHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyU2hvcnRj
dXRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbW9kaWZpZXJzID0gV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzOwotICAgICAgICB0aGlzLl9zaG9ydGN1dHMg
PSB7fTsKLSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lm1ha2VLZXkoInoiLCB0aGlzLl9pc01hYyA/IG1vZGlmaWVycy5NZXRhIDogbW9kaWZpZXJz
LkN0cmwpXSA9IHRoaXMuX2hhbmRsZVVuZG8uYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5fc2hv
cnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoInoiLCBtb2RpZmll
cnMuU2hpZnQgfCAodGhpcy5faXNNYWMgPyBtb2RpZmllcnMuTWV0YSA6IG1vZGlmaWVycy5DdHJs
KSldID0gdGhpcy5faGFuZGxlUmVkby5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLl9zaG9ydGN1
dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleSgiYSIsIHRoaXMuX2lzTWFj
ID8gbW9kaWZpZXJzLk1ldGEgOiBtb2RpZmllcnMuQ3RybCldID0gdGhpcy5fc2VsZWN0QWxsLmJp
bmQodGhpcyk7Ci0gICAgICAgIGlmICh0aGlzLl9pc01hYykKLSAgICAgICAgICAgIHRoaXMuX3No
b3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJkIiwgbW9kaWZp
ZXJzLkN0cmwpXSA9IHRoaXMuX2hhbmRsZURlbGV0ZUtleS5iaW5kKHRoaXMpOwotCi0gICAgICAg
IHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJk
IiwgbW9kaWZpZXJzLkN0cmwgfCBtb2RpZmllcnMuQWx0KV0gPSB0aGlzLl9oYW5kbGVUb2dnbGVE
ZWJ1Z01vZGUuYmluZCh0aGlzKTsKLSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoImgiLCBtb2RpZmllcnMuQ3RybCB8IG1vZGlmaWVy
cy5BbHQpXSA9IHRoaXMuX2hhbmRsZVRvZ2dsZUhpZ2hsaWdodE1vZGUuYmluZCh0aGlzKTsKLSAg
ICB9LAotCi0gICAgX2hhbmRsZVVuZG86IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
c2V0Q29hbGVzY2luZ1VwZGF0ZSh0cnVlKTsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fdGV4
dE1vZGVsLnVuZG8oKTsKLSAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgdGhpcy5fc2V0
Q2FyZXRMb2NhdGlvbihyYW5nZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1bW4pOwotICAgICAgICB0
aGlzLnNldENvYWxlc2NpbmdVcGRhdGUoZmFsc2UpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlUmVk
bzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5zZXRDb2FsZXNjaW5nVXBkYXRlKHRy
dWUpOwotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwucmVkbygpOwotICAgICAg
ICBpZiAocmFuZ2UpCi0gICAgICAgICAgICB0aGlzLl9zZXRDYXJldExvY2F0aW9uKHJhbmdlLmVu
ZExpbmUsIHJhbmdlLmVuZENvbHVtbik7Ci0gICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0
ZShmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9oYW5kbGVEZWxldGVLZXk6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3NlbGVjdGlvbi5yYW5nZSgpOwotICAgICAg
ICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAocmFuZ2UuZW5kQ29sdW1u
IDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgocmFuZ2Uuc3RhcnRMaW5lKSkKLSAgICAgICAg
ICAgICAgICByYW5nZS5lbmRDb2x1bW4rKzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJhbmdlLmVu
ZExpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkgewotICAgICAgICAgICAgICAgIHJh
bmdlLmVuZExpbmUrKzsKLSAgICAgICAgICAgICAgICByYW5nZS5lbmRDb2x1bW4gPSAwOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotICAgICAg
ICB0aGlzLl9yZXBsYWNlU2VsZWN0aW9uV2l0aCgiIiwgcmFuZ2UpOwotICAgIH0sCi0KLSAgICBf
aGFuZGxlQmFja3NwYWNlS2V5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmFuZ2Ug
PSB0aGlzLl9zZWxlY3Rpb24ucmFuZ2UoKTsKLSAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29sdW1uID4gMCkKLSAgICAgICAgICAgICAg
ICByYW5nZS5zdGFydENvbHVtbi0tOwotICAgICAgICAgICAgZWxzZSBpZiAocmFuZ2Uuc3RhcnRM
aW5lID4gMCkgewotICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0TGluZS0tOwotICAgICAgICAg
ICAgICAgIHJhbmdlLnN0YXJ0Q29sdW1uID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgocmFu
Z2Uuc3RhcnRMaW5lKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwubWFya1VuZG9h
YmxlU3RhdGUoKTsKLSAgICAgICAgdGhpcy5fcmVwbGFjZVNlbGVjdGlvbldpdGgoIiIsIHJhbmdl
KTsKLSAgICB9LAotCi0gICAgX2hhbmRsZVRvZ2dsZURlYnVnTW9kZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gIXRoaXMuX2RlYnVnTW9kZTsKLSAgICB9LAot
Ci0gICAgX2hhbmRsZVRvZ2dsZUhpZ2hsaWdodE1vZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2hpZ2hsaWdodGluZ0VuYWJsZWQgPSAhdGhpcy5faGlnaGxpZ2h0aW5nRW5hYmxl
ZDsKLSAgICB9LAotCi0gICAgX2lzTWV0YUN0cmw6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5faXNNYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7Ci0gICAgfSwKLQot
ICAgIF9pc0FsdEN0cmw6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
aXNNYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleTsKLSAgICB9LAotCi0gICAgX2RlY2ltYWxEaWdp
dHM6IGZ1bmN0aW9uKG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXRoLmNlaWwoTWF0
aC5sb2cobnVtYmVyICsgMSkgLyBNYXRoLmxvZygxMCkpOwotICAgIH0KLX0KLQotV2ViSW5zcGVj
dG9yLlRleHRTZWxlY3Rpb25Nb2RlbCA9IGZ1bmN0aW9uKGNoYW5nZUxpc3RlbmVyKQotewotICAg
IHRoaXMuc3RhcnRMaW5lID0gMDsKLSAgICB0aGlzLnN0YXJ0Q29sdW1uID0gMDsKLSAgICB0aGlz
LmVuZExpbmUgPSAwOwotICAgIHRoaXMuZW5kQ29sdW1uID0gMDsKLSAgICB0aGlzLl9jaGFuZ2VM
aXN0ZW5lciA9IGNoYW5nZUxpc3RlbmVyOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dFNlbGVjdGlv
bk1vZGVsLnByb3RvdHlwZSA9IHsKLSAgICBzZXRTdGFydDogZnVuY3Rpb24obGluZSwgY29sdW1u
KQotICAgIHsKLSAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy5yYW5nZSgpOwotCi0gICAgICAg
IHRoaXMuc3RhcnRMaW5lID0gbGluZTsKLSAgICAgICAgdGhpcy5zdGFydENvbHVtbiA9IGNvbHVt
bjsKLSAgICAgICAgdGhpcy5lbmRMaW5lID0gbGluZTsKLSAgICAgICAgdGhpcy5lbmRDb2x1bW4g
PSBjb2x1bW47Ci0KLSAgICAgICAgdGhpcy5fY2hhbmdlTGlzdGVuZXIob2xkUmFuZ2UsIHRoaXMu
cmFuZ2UoKSk7Ci0gICAgfSwKLQotICAgIHNldEVuZDogZnVuY3Rpb24obGluZSwgY29sdW1uKQot
ICAgIHsKLSAgICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy5yYW5nZSgpOwotCi0gICAgICAgIHRo
aXMuZW5kTGluZSA9IGxpbmU7Ci0gICAgICAgIHRoaXMuZW5kQ29sdW1uID0gY29sdW1uOwotCi0g
ICAgICAgIHRoaXMuX2NoYW5nZUxpc3RlbmVyKG9sZFJhbmdlLCB0aGlzLnJhbmdlKCksIHRoaXMu
ZW5kTGluZSwgdGhpcy5lbmRDb2x1bW4pOwotICAgIH0sCi0KLSAgICByYW5nZTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuc3RhcnRMaW5lIDwgdGhpcy5lbmRMaW5lIHx8ICh0
aGlzLnN0YXJ0TGluZSA9PT0gdGhpcy5lbmRMaW5lICYmIHRoaXMuc3RhcnRDb2x1bW4gPD0gdGhp
cy5lbmRDb2x1bW4pKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlKHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0Q29sdW1uLCB0aGlzLmVuZExpbmUsIHRoaXMu
ZW5kQ29sdW1uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuVGV4dFJhbmdlKHRoaXMuZW5kTGluZSwgdGhpcy5lbmRDb2x1bW4sIHRoaXMuc3RhcnRM
aW5lLCB0aGlzLnN0YXJ0Q29sdW1uKTsKLSAgICB9LAotCi0gICAgaXNFbXB0eTogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRMaW5lID09PSB0aGlzLmVuZExpbmUg
JiYgdGhpcy5zdGFydENvbHVtbiA9PT0gdGhpcy5lbmRDb2x1bW47Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuVGV4dEN1cnNvciA9IGZ1bmN0aW9uKGN1cnNvckVsZW1lbnQpCi17Ci0gICAgdGhp
cy5fdmlzaWJsZSA9IGZhbHNlOwotICAgIHRoaXMuX2N1cnNvckVsZW1lbnQgPSBjdXJzb3JFbGVt
ZW50OwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEN1cnNvci5wcm90b3R5cGUgPSB7Ci0gICAgc2V0
TG9jYXRpb246IGZ1bmN0aW9uKHgsIHkpCi0gICAgewotICAgICAgICB0aGlzLl94ID0geDsKLSAg
ICAgICAgdGhpcy5feSA9IHk7Ci0gICAgICAgIGlmICh0aGlzLl9wYWludEludGVydmFsKSB7Ci0g
ICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9wYWludEludGVydmFsKTsKLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYWludEludGVydmFsOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMuX3BhaW50SW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fcGFpbnQuYmlu
ZCh0aGlzLCBmYWxzZSksIDUwMCk7Ci0gICAgICAgIHRoaXMuX3BhaW50KHRydWUpOwotICAgIH0s
Ci0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcGFpbnRJ
bnRlcnZhbCkgewotICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fcGFpbnRJ
bnRlcnZhbCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcGFpbnRJbnRlcnZhbDsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9jdXJzb3JFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
Ci0gICAgfSwKLQotICAgIHNldFRleHRMaW5lSGVpZ2h0OiBmdW5jdGlvbih0ZXh0TGluZUhlaWdo
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnNvckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGV4
dExpbmVIZWlnaHQgKyAicHgiOwotICAgIH0sCi0KLSAgICBfcGFpbnQ6IGZ1bmN0aW9uKGZvcmNl
KQotICAgIHsKLSAgICAgICAgaWYgKGZvcmNlKQotICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3Zpc2libGUgPSAhdGhpcy5f
dmlzaWJsZTsKLSAgICAgICAgdGhpcy5fY3Vyc29yRWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5f
eCArICJweCI7Ci0gICAgICAgIHRoaXMuX2N1cnNvckVsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5f
eSArICJweCI7Ci0gICAgICAgIHRoaXMuX2N1cnNvckVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHRo
aXMuX3Zpc2libGUgPyAiYmxvY2siIDogIm5vbmUiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTNiYTQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9UZXh0Vmlld2VyLmpzCkBAIC0wLDAgKzEsNjAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCit7CisgICAgdGhpcy5fdGV4
dE1vZGVsID0gdGV4dE1vZGVsOworICAgIHRoaXMuX3RleHRNb2RlbC5jaGFuZ2VMaXN0ZW5lciA9
IHRoaXMuX3RleHRDaGFuZ2VkLmJpbmQodGhpcyk7CisgICAgdGhpcy5faGlnaGxpZ2h0ZXIgPSBu
ZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0aGlzLl90ZXh0TW9kZWwsIHRo
aXMuX2hpZ2hsaWdodENoYW5nZWQuYmluZCh0aGlzKSk7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1l
ID0gInRleHQtZWRpdG9yIG1vbm9zcGFjZSI7CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKKworICAg
IHRoaXMuX3VybCA9IHVybDsKKworICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CisgICAgdGhpcy5fbGluZXNDb250YWluZXJF
bGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvci1saW5lcyI7CisgICAgdGhpcy5fbGluZXND
b250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgiY2VsbHNwYWNpbmciLCAwKTsKKyAgICB0aGlz
Ll9saW5lc0NvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxscGFkZGluZyIsIDApOwor
ICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQp
OworCisgICAgdGhpcy5fZmlyc3RSZW1vdmVkQ2h1bmsgPSAwOworICAgIHRoaXMuX2xhc3RSZW1v
dmVkQ2h1bmsgPSAwOworICAgIHRoaXMuX2xpbmVSb3dzID0gW107CisgICAgdGhpcy5fZGVmYXVs
dENodW5rU2l6ZSA9IDUwOworICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKK30K
KworV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0geworICAgIHNldCBtaW1lVHlw
ZShtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLm1pbWVUeXBlID0g
bWltZVR5cGU7CisgICAgfSwKKworICAgIGdldCB0ZXh0TW9kZWwoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3RleHRNb2RlbDsKKyAgICB9LAorCisgICAgcmV2ZWFsTGluZTogZnVuY3Rp
b24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VM
aW5lQUNodW5rKGxpbmVOdW1iZXIpOworICAgICAgICAgICAgdGhpcy5zZXRDb2FsZXNjaW5nVXBk
YXRlKHRydWUpOworICAgICAgICAgICAgY2h1bmsuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwor
ICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICAgICAgdGhpcy5zZXRDb2Fs
ZXNjaW5nVXBkYXRlKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBhZGREZWNvcmF0
aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl90ZXh0Q2h1bmtzKQorICAgICAgICAgICAgdGhpcy5fdGV4dENoYW5nZWQoKTsKKwor
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAg
ICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uICE9PSAic3RyaW5nIikKKyAgICAgICAgICAgIGNo
dW5rLmxhc3RDaGlsZC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKKyAgICAgICAgdmFyIGRlY29y
YXRpb25zID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGVjb3Jh
dGlvbnMiKTsKKyAgICAgICAgaWYgKCFkZWNvcmF0aW9ucykgeworICAgICAgICAgICAgZGVjb3Jh
dGlvbnMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUobGlu
ZU51bWJlciwgImRlY29yYXRpb25zIiwgZGVjb3JhdGlvbnMpOworICAgICAgICB9CisgICAgICAg
IGRlY29yYXRpb25zLnB1c2goZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX3JlcGFpbnRBbGwo
KTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwg
ZGVjb3JhdGlvbikKKyAgICB7CisgICAgICAgIHZhciBkZWNvcmF0aW9ucyA9IHRoaXMuX3RleHRN
b2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRlY29yYXRpb25zIik7CisgICAgICAgIGlm
IChkZWNvcmF0aW9ucykgeworICAgICAgICAgICAgZGVjb3JhdGlvbnMucmVtb3ZlKGRlY29yYXRp
b24pOworICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICB9CisgICAgfSwK
KworICAgIG1hcmtBbmRSZXZlYWxSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAg
ICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOworICAgICAgICBpZiAocmFuZ2UpCisgICAgICAg
ICAgICB0aGlzLnJldmVhbExpbmUocmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBoaWdobGlnaHRMaW5l
OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJlc3RvcmUg
YW5pbWF0aW9uLgorICAgICAgICB0aGlzLl9saW5lVG9IaWdobGlnaHQgPSBsaW5lTnVtYmVyOwor
ICAgICAgICB0aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7CisgICAgfSwKKworICAgIF90ZXh0
Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fbGluZVJvd3MgPSBbXTsKKyAgICAgICAgdGhpcy5fbGluZXND
b250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFyIGxpbmVzID0g
W107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgIT0gMCAmJiBpICUgdGhpcy5fZGVmYXVsdENo
dW5rU2l6ZSA9PT0gMCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVDaHVua1JvdyhsaW5lcywgaSAtIGxpbmVzLmxl
bmd0aCkpOworICAgICAgICAgICAgICAgIGxpbmVzID0gW107CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobGluZXMubGVuZ3RoKQorICAgICAgICAgICAgdGhpcy5fbGluZXNDb250YWlu
ZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZUNodW5rUm93KGxpbmVzLCBpIC0gbGlu
ZXMubGVuZ3RoKSk7CisKKyAgICAgICAgdGhpcy5faW5kZXhDaHVua3MoKTsKKyAgICAgICAgdGhp
cy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBfY3JlYXRlQ2h1bmtSb3c6IGZ1bmN0aW9u
KGxpbmVzLCBzdGFydExpbmUpCisgICAgeworICAgICAgICB2YXIgbGluZU51bWJlckVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICBsaW5lTnVtYmVyRWxlbWVu
dC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKKyAgICAgICAgdmFyIGxpbmVUZXh0
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAgIGxpbmVUZXh0
RWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlx1MjAwQlxuIik7CisKKyAgICAgICAg
dmFyIGNodW5rUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgICAgICAgY2h1
bmtSb3cuYXBwZW5kQ2hpbGQobGluZU51bWJlckVsZW1lbnQpOworICAgICAgICBjaHVua1Jvdy5h
cHBlbmRDaGlsZChsaW5lVGV4dEVsZW1lbnQpOworICAgICAgICBjaHVua1Jvdy5saW5lTnVtYmVy
ID0gc3RhcnRMaW5lOworICAgICAgICBjaHVua1Jvdy5saW5lc0NvdW50ID0gbGluZXMubGVuZ3Ro
OworICAgICAgICBjaHVua1Jvdy5pc0NodW5rID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNodW5r
Um93OworICAgIH0sCisKKyAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIp
CisgICAgeworICAgICAgICB0aGlzLl9yZXN0b3JlQ2h1bmtzKCk7CisKKyAgICAgICAgdmFyIGNo
dW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAg
ICB2YXIgb2xkQ2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKKyAgICAgICAg
aWYgKG9sZENodW5rLmxpbmVzQ291bnQgPT09IDEpCisgICAgICAgICAgICByZXR1cm4gb2xkQ2h1
bms7CisKKyAgICAgICAgLy8gUHJlZml4IGNodW5rLgorICAgICAgICB2YXIgbGluZXMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IG9sZENodW5rLmxpbmVOdW1iZXI7IGkgPCBsaW5lTnVtYmVy
OyArK2kpCisgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsK
KyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5fY3JlYXRlQ2h1bmtSb3cobGluZXMsIG9sZENodW5rLmxpbmVOdW1iZXIpOworICAgICAgICAg
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShjaHVuaywgb2xkQ2h1
bmspOworICAgICAgICB9CisKKyAgICAgICAgLy8gTGluZSBjaHVuay4KKyAgICAgICAgdmFyIGxp
bmVDaHVuayA9IHRoaXMuX2NyZWF0ZUNodW5rUm93KFsgdGhpcy5fdGV4dE1vZGVsLmxpbmUobGlu
ZU51bWJlcikgXSwgbGluZU51bWJlcik7CisgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxl
bWVudC5pbnNlcnRCZWZvcmUobGluZUNodW5rLCBvbGRDaHVuayk7CisgICAgICAgIAorICAgICAg
ICAvLyBTdWZmaXggY2h1bmsuCisgICAgICAgIGxpbmVzID0gW107CisgICAgICAgIGZvciAodmFy
IGkgPSBsaW5lTnVtYmVyICsgMTsgaSA8IG9sZENodW5rLmxpbmVOdW1iZXIgKyBvbGRDaHVuay5s
aW5lc0NvdW50OyArK2kpCisgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5s
aW5lKGkpKTsKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCkgeworICAgICAgICAgICAgY2h1bmsg
PSB0aGlzLl9jcmVhdGVDaHVua1JvdyhsaW5lcywgbGluZU51bWJlciArIDEpOworICAgICAgICAg
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShjaHVuaywgb2xkQ2h1
bmspOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIGVuY2xvc2luZyBjaHVuay4KKyAg
ICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKG9sZENodW5rKTsK
KworICAgICAgICB0aGlzLl9pbmRleENodW5rcygpOworCisgICAgICAgIHJldHVybiBsaW5lQ2h1
bms7CisgICAgfSwKKworICAgIF9pbmRleENodW5rczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fdGV4dENodW5rcyA9IFtdOworICAgICAgICBmb3IgKHZhciBjaHVuayA9IHRoaXMu
X2xpbmVzQ29udGFpbmVyRWxlbWVudC5maXJzdENoaWxkLCBpID0gMDsgY2h1bms7IGNodW5rID0g
Y2h1bmsubmV4dFNpYmxpbmcsIGkrKykgeworICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tp
XSA9IGNodW5rOworICAgICAgICAgICAgY2h1bmsuY2h1bmtOdW1iZXIgPSBpOworICAgICAgICB9
CisgICAgfSwKKworICAgIF9oaWdobGlnaHRDaGFuZ2VkOiBmdW5jdGlvbihmcm9tTGluZSwgdG9M
aW5lKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fcmVwYWludChmcm9tTGluZSwgdG9MaW5l
KTsKKyAgICB9LAorCisgICAgX3Njcm9sbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBzZXRDb2FsZXNjaW5nVXBkYXRlOiBmdW5j
dGlvbihlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgICAgICB0
aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOworICAgICAgICBpZiAoIXRoaXMuX3BhaW50Q29h
bGVzY2luZ0xldmVsKQorICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0sCisK
KyAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVwYWlu
dCgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7CisgICAgfSwKKworICAgIF9jaHVua0Zv
ck9mZnNldDogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIGN1cnJlbnRPZmZz
ZXQgPSAwOworICAgICAgICB2YXIgcm93ID0gdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmZp
cnN0Q2hpbGQ7CisgICAgICAgIHdoaWxlIChyb3cpIHsKKyAgICAgICAgICAgIHZhciByb3dIZWln
aHQgPSByb3cub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjdXJyZW50
T2Zmc2V0ICYmIG9mZnNldCA8IGN1cnJlbnRPZmZzZXQgKyByb3dIZWlnaHQpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcm93LmNodW5rTnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcm93ID0gcm93Lm5leHRTaWJsaW5nOworICAgICAgICAgICAgY3VycmVudE9mZnNldCArPSBy
b3dIZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3MubGVu
Z3RoIC0gMTsKKyAgICB9LAorCisgICAgX2NodW5rTnVtYmVyRm9yTGluZTogZnVuY3Rpb24obGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENo
dW5rcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0Q2h1
bmtzW2ldLmxpbmVOdW1iZXI7CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlzLl90
ZXh0Q2h1bmtzW2ldLmxpbmVOdW1iZXIgJiYgbGluZU51bWJlciA8IHRoaXMuX3RleHRDaHVua3Nb
aV0ubGluZU51bWJlciArIHRoaXMuX3RleHRDaHVua3NbaV0ubGluZXNDb3VudCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENo
dW5rcy5sZW5ndGggLSAxOworICAgIH0sCisKKyAgICBfY2h1bmtTdGFydExpbmU6IGZ1bmN0aW9u
KGNodW5rTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSAwOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rTnVtYmVyICYmIGkgPCB0aGlzLl90ZXh0Q2h1bmtz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IHRoaXMuX3RleHRDaHVu
a3NbaV0ubGluZXNDb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZU51bWJlcjsK
KyAgICB9LAorCisgICAgX3Jlc3RvcmVDaHVua3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IC8vIFJlbW92ZSBpbmRpdmlkdWFsIGxpbmVzLgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX2xpbmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9
IHRoaXMuX2xpbmVSb3dzW2ldOworICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0
dHJpYnV0ZShsaW5lUm93LmxpbmVOdW1iZXIsICJsaW5lLXRyIik7CisgICAgICAgICAgICB0aGlz
Ll9saW5lc0NvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fbGluZVJvd3MgPSBbXTsKKworICAgICAgICAvLyBSZXN0b3JlIHJlbW92
ZWQgY2h1bmtzLgorICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gdGhpcy5fdGV4dENodW5rc1t0
aGlzLl9sYXN0UmVtb3ZlZENodW5rXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2ZpcnN0
UmVtb3ZlZENodW5rOyBpIDwgdGhpcy5fbGFzdFJlbW92ZWRDaHVuazsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldOworICAgICAgICAgICAgdGhpcy5f
bGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShjaHVuaywgaW5zZXJ0QmVmb3JlKTsK
KworICAgICAgICAgICAgZm9yICh2YXIgaiA9IGNodW5rLmxpbmVOdW1iZXI7IGogPCBjaHVuay5s
aW5lTnVtYmVyICsgY2h1bmsubGluZXNDb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgdmFy
IGRlY29yYXRpb25zID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShqLCAiZGVjb3JhdGlv
bnMiKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBkZWNvcmF0aW9ucy5sZW5ndGg7ICsraykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uc1trXSAhPT0gInN0cmlu
ZyIpCisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuay5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQo
ZGVjb3JhdGlvbnNba10pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX2ZpcnN0UmVtb3ZlZENo
dW5rID0gMDsKKyAgICAgICAgdGhpcy5fbGFzdFJlbW92ZWRDaHVuayA9IDA7CisgICAgfSwKKwor
ICAgIF9yZXBhaW50OiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5lKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmICghdGhpcy5fdGV4dENodW5rcykKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaGFu
Z2VkKCk7CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwor
ICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0OworCisgICAg
ICAgIHZhciBmaXJzdFZpc2libGVDaHVuayA9IHRoaXMuX2NodW5rRm9yT2Zmc2V0KE1hdGgubWF4
KHNjcm9sbFRvcCAtIDEwLCAwKSk7CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUNodW5rID0gdGhp
cy5fY2h1bmtGb3JPZmZzZXQoc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodCk7
CisKKyAgICAgICAgdmFyIGZpcnN0VmlzaWJsZUxpbmUgPSB0aGlzLl9jaHVua1N0YXJ0TGluZShm
aXJzdFZpc2libGVDaHVuayk7CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSB0aGlzLl9j
aHVua1N0YXJ0TGluZShsYXN0VmlzaWJsZUNodW5rICsgMSk7CisKKyAgICAgICAgaWYgKGZpcnN0
VmlzaWJsZUxpbmUgPiB0b0xpbmUgfHwgbGFzdFZpc2libGVMaW5lIDwgZnJvbUxpbmUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVj
dGlvbigpOworCisgICAgICAgIC8vIFJlc3RvcmUgc3RhdGUgdG8gbGlzdCBvZiBjaHVua3MuCisg
ICAgICAgIHRoaXMuX3Jlc3RvcmVDaHVua3MoKTsKKworICAgICAgICAvLyBSZW1vdmUgdmlzaWJs
ZSBjaHVua3MuCisgICAgICAgIHRoaXMuX2ZpcnN0UmVtb3ZlZENodW5rID0gZmlyc3RWaXNpYmxl
Q2h1bms7CisgICAgICAgIHRoaXMuX2xhc3RSZW1vdmVkQ2h1bmsgPSBsYXN0VmlzaWJsZUNodW5r
ICsgMTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2ZpcnN0UmVtb3ZlZENodW5rOyBpIDwg
dGhpcy5fbGFzdFJlbW92ZWRDaHVuazsgKytpKQorICAgICAgICAgICAgdGhpcy5fbGluZXNDb250
YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX3RleHRDaHVua3NbaV0pOworCisgICAgICAg
IC8vIFJlcXVlc3Qgc3ludGF4IGhpZ2hsaWdodC4KKyAgICAgICAgdGhpcy5fbXV0ZUhpZ2hsaWdo
dExpc3RlbmVyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxh
c3RWaXNpYmxlTGluZSk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVu
ZXI7CisKKyAgICAgICAgLy8gQ3JlYXRlIGluZGl2aWR1YWwgbGluZXMuCisgICAgICAgIGluc2Vy
dEJlZm9yZSA9IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fbGFzdFJlbW92ZWRDaHVua107CisgICAg
ICAgIGZvciAodmFyIGkgPSB0aGlzLl9maXJzdFJlbW92ZWRDaHVuazsgaSA8IHRoaXMuX2xhc3RS
ZW1vdmVkQ2h1bms7ICsraSkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENo
dW5rc1tpXTsKKyAgICAgICAgICAgIHZhciBjaHVua1N0YXJ0ID0gY2h1bmsubGluZU51bWJlcjsK
KyAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSBjaHVuay5saW5lc0NvdW50OworICAgICAgICAg
ICAgZm9yICh2YXIgaiA9IGNodW5rU3RhcnQ7IGogPCBjaHVua1N0YXJ0ICsgY2h1bmtTaXplOyAr
K2opIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2NyZWF0ZUxpbmVSb3co
aik7CisgICAgICAgICAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gajsKKyAgICAgICAgICAg
ICAgICBsaW5lUm93LmNodW5rTnVtYmVyID0gaTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
TW9kZWwuc2V0QXR0cmlidXRlKGosICJsaW5lLXRyIiwgbGluZVJvdyk7CisgICAgICAgICAgICAg
ICAgdGhpcy5fcGFpbnRMaW5lKGopOworCisgICAgICAgICAgICAgICAgdmFyIGRlY29yYXRpb25z
ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShqLCAiZGVjb3JhdGlvbnMiKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgayA9IDA7IGsgPCBkZWNvcmF0aW9ucy5sZW5ndGg7ICsraykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uc1trXSAhPT0gInN0cmluZyIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZVJvdy5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQoZGVjb3Jh
dGlvbnNba10pOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVSb3cuYWRkU3R5bGVDbGFzcyhkZWNvcmF0aW9uc1trXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoaiA9PT0gdGhpcy5fbGluZVRvSGlnaGxpZ2h0KQorICAgICAgICAgICAgICAgICAgICBsaW5l
Um93LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1oaWdobGlnaHRlZC1saW5lIik7CisgICAgICAgICAg
ICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lUm93LCBp
bnNlcnRCZWZvcmUpOworICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVSb3dzLnB1c2gobGluZVJv
dyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVj
dGlvbihzZWxlY3Rpb24pOworICAgIH0sCisKKyAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwor
ICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDAp
OworICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlv
blJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCk7CisgICAg
ICAgIHZhciBlbmQgPSB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvblJhbmdlLmVu
ZENvbnRhaW5lciwgc2VsZWN0aW9uUmFuZ2UuZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbiwgZW5kLmxp
bmUsIGVuZC5jb2x1bW4pOworICAgIH0sCisKKyAgICBfcmVzdG9yZVNlbGVjdGlvbjogZnVuY3Rp
b24ocmFuZ2UpCisgICAgeworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB2YXIgc3RhcnRSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKHJh
bmdlLnN0YXJ0TGluZSwgImxpbmUtdHIiKTsKKyAgICAgICAgaWYgKHN0YXJ0Um93KQorICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0gc3RhcnRSb3cubGFzdENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZz
ZXQocmFuZ2Uuc3RhcnRDb2x1bW4pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBv
ZmZzZXQgPSByYW5nZS5zdGFydENvbHVtbjsKKyAgICAgICAgICAgIHZhciBjaHVua051bWJlciA9
IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExpbmUpOworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNodW5rTnVtYmVyKTsgaSA8IHJhbmdl
LnN0YXJ0TGluZTsgKytpKQorICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9k
ZWwubGluZShpKS5sZW5ndGggKyAyOyAvLyBcdTIwMEJcbiB0d28gY2hhciBzdWZmaXguCisgICAg
ICAgICAgICB2YXIgc3RhcnQgPSB7IGNvbnRhaW5lcjogdGhpcy5fdGV4dENodW5rc1tjaHVua051
bWJlcl0ubGFzdENoaWxkLmZpcnN0Q2hpbGQsIG9mZnNldDogb2Zmc2V0IH07CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZW5kUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShyYW5n
ZS5lbmRMaW5lLCAibGluZS10ciIpOworICAgICAgICBpZiAoZW5kUm93KQorICAgICAgICAgICAg
dmFyIGVuZCA9IGVuZFJvdy5sYXN0Q2hpbGQucmFuZ2VCb3VuZGFyeUZvck9mZnNldChyYW5nZS5l
bmRDb2x1bW4pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSByYW5n
ZS5lbmRDb2x1bW47CisgICAgICAgICAgICB2YXIgY2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051
bWJlckZvckxpbmUocmFuZ2UuZW5kTGluZSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhp
cy5fY2h1bmtTdGFydExpbmUoY2h1bmtOdW1iZXIpOyBpIDwgcmFuZ2UuZW5kTGluZTsgKytpKQor
ICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9kZWwubGluZShpKS5sZW5ndGgg
KyAyOyAvLyBcdTIwMEJcbiB0d28gY2hhciBzdWZmaXguCisgICAgICAgICAgICB2YXIgZW5kID0g
eyBjb250YWluZXI6IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLmxhc3RDaGlsZC5maXJz
dENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNlbGVj
dGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgc2VsZWN0aW9uUmFu
Z2Uuc2V0U3RhcnQoc3RhcnQuY29udGFpbmVyLCBzdGFydC5vZmZzZXQpOworICAgICAgICBzZWxl
Y3Rpb25SYW5nZS5zZXRFbmQoZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCk7CisKKyAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgc2VsZWN0aW9u
LnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0aW9u
UmFuZ2UpOworICAgIH0sCisKKyAgICBfc2VsZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29u
dGFpbmVyLCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLmVs
ZW1lbnQgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogMCwgY29s
dW1uOiAwIH07CisgICAgICAgIGlmIChjb250YWluZXIgPT09IHRoaXMuZWxlbWVudCAmJiBvZmZz
ZXQgPT09IDEpCisgICAgICAgICAgICByZXR1cm4geyBsaW5lOiB0aGlzLl90ZXh0TW9kZWwubGlu
ZXNDb3VudCAtIDEsIGNvbHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgodGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQgLSAxKSB9OworCisgICAgICAgIHZhciBsaW5lUm93ID0gY29udGFp
bmVyLmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoInRyIik7CisgICAgICAgIHZhciBs
aW5lTnVtYmVyID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICB2YXIgY29sdW1uID0gMDsK
KyAgICAgICAgaWYgKGxpbmVSb3cuaXNDaHVuaykgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBj
aHVuay4KKyAgICAgICAgICAgIHZhciB0ZXh0ID0gbGluZVJvdy5sYXN0Q2hpbGQudGV4dENvbnRl
bnQ7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9mZnNldDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uKys7IAorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogbGluZU51bWJlciwgY29sdW1u
OiBjb2x1bW4gfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgaXMgaW5kaXZpZHVsIGxp
bmUuCisgICAgICAgIHZhciBjb2x1bW4gPSAwOworICAgICAgICB2YXIgbm9kZSA9IGxpbmVSb3cu
bGFzdENoaWxkLnRyYXZlcnNlTmV4dFRleHROb2RlKGNvbnRhaW5lcik7CisgICAgICAgIHdoaWxl
IChub2RlICYmIG5vZGUgIT09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgY29sdW1uICs9IG5v
ZGUudGV4dENvbnRlbnQubGVuZ3RoOworICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VO
ZXh0VGV4dE5vZGUoY29udGFpbmVyKTsKKyAgICAgICAgfQorICAgICAgICBjb2x1bW4gKz0gb2Zm
c2V0OworICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lUm93LmxpbmVOdW1iZXIsIGNvbHVtbjog
Y29sdW1uIH07CisgICAgfSwKKworICAgIF9jcmVhdGVMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVt
YmVyKQorICAgIHsKKyAgICAgICAgdmFyIGRpZ2l0cyA9IHRoaXMuX2RlY2ltYWxEaWdpdHMobGlu
ZU51bWJlciArIDEpOworICAgICAgICB2YXIgdG90YWxEaWdpdHMgPSB0aGlzLl9kZWNpbWFsRGln
aXRzKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKKyAgICAgICAgdmFyIG51bWJlciA9ICIi
OworICAgICAgICBmb3IgKHZhciBpID0gZGlnaXRzOyBpIDwgdG90YWxEaWdpdHM7ICsraSkgewor
ICAgICAgICAgICAgbnVtYmVyICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICBudW1iZXIgKz0g
bGluZU51bWJlciArIDE7CisKKyAgICAgICAgdmFyIGxpbmVOdW1iZXJFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgbGluZU51bWJlckVsZW1lbnQudGV4dENv
bnRlbnQgPSBudW1iZXI7CisgICAgICAgIGxpbmVOdW1iZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ3
ZWJraXQtbGluZS1udW1iZXIiOworCisgICAgICAgIHZhciBsaW5lVGV4dEVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICBsaW5lVGV4dEVsZW1lbnQuY2xhc3NO
YW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOworCisgICAgICAgIHZhciBsaW5lUm93ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChs
aW5lTnVtYmVyRWxlbWVudCk7CisgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZVRleHRF
bGVtZW50KTsKKyAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAg
ICAgcmV0dXJuIGxpbmVSb3c7CisgICAgfSwKKworICAgIF9wYWludExpbmU6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgdHIgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0
cmlidXRlKGxpbmVOdW1iZXIsICJsaW5lLXRyIik7CisgICAgICAgIGlmICghdHIpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGVsZW1lbnQgPSB0ci5sYXN0Q2hpbGQ7CisgICAg
ICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcikgKyAiXHUyMDBC
IjsKKworICAgICAgICB2YXIgaGlnaGxpZ2h0ZXJTdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRB
dHRyaWJ1dGUobGluZU51bWJlciwgImhpZ2hsaWdodGVyLXN0YXRlIik7CisgICAgICAgIGlmICgh
aGlnaGxpZ2h0ZXJTdGF0ZSkgeworICAgICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IGxp
bmU7CisgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhpcy5fcmFuZ2VUb01h
cmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVyKQorICAgICAgICAgICAgICAgIHRoaXMuX21hcmtS
YW5nZShlbGVtZW50LCBsaW5lLCB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5f
cmFuZ2VUb01hcmsuZW5kQ29sdW1uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgcGxhaW5U
ZXh0U3RhcnQgPSAtMTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsp
IHsKKyAgICAgICAgICAgIGlmIChqID4gMTAwMCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMg
bGluZSBpcyB0b28gbG9uZyAtIGRvIG5vdCB3YXN0ZSBjeWNsZXMgb24gbWluaWZpZWQganMgaGln
aGxpZ2h0aW5nLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIGF0dHJpYnV0ZSA9IGhpZ2hsaWdodGVyU3RhdGUgJiYgaGlnaGxpZ2h0ZXJTdGF0
ZS5hdHRyaWJ1dGVzW2pdOworICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUgfHwgIWF0dHJpYnV0
ZS5zdHlsZSkgeworICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRTdGFydCA9PT0gLTEpCisg
ICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gajsKKyAgICAgICAgICAgICAgICBq
Kys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRT
dGFydCAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgaikp
KTsKKyAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSAtMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVT
cGFuKGxpbmUuc3Vic3RyaW5nKGosIGogKyBhdHRyaWJ1dGUubGVuZ3RoKSwgYXR0cmlidXRlLnRv
a2VuVHlwZSkpOworICAgICAgICAgICAgICAgIGogKz0gYXR0cmlidXRlLmxlbmd0aDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0xKQor
ICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShs
aW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5sZW5ndGgpKSk7CisgICAgICAgIGlm
ICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxp
bmVOdW1iZXIpCisgICAgICAgICAgICB0aGlzLl9tYXJrUmFuZ2UoZWxlbWVudCwgbGluZSwgdGhp
cy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbik7
CisgICAgfSwKKworICAgIF9jcmVhdGVTcGFuOiBmdW5jdGlvbihjb250ZW50LCBjbGFzc05hbWUp
CisgICAgeworICAgICAgICBpZiAoY2xhc3NOYW1lID09PSAiaHRtbC1yZXNvdXJjZS1saW5rIiB8
fCBjbGFzc05hbWUgPT09ICJodG1sLWV4dGVybmFsLWxpbmsiKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2NyZWF0ZUxpbmsoY29udGVudCwgY2xhc3NOYW1lID09PSAiaHRtbC1leHRlcm5hbC1s
aW5rIik7CisKKyAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgIHNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC0iICsgY2xhc3NOYW1lOworICAg
ICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpKTsK
KyAgICAgICAgcmV0dXJuIHNwYW47CisgICAgfSwKKworICAgIF9jcmVhdGVMaW5rOiBmdW5jdGlv
bihjb250ZW50LCBpc0V4dGVybmFsKQorICAgIHsKKyAgICAgICAgdmFyIHF1b3RlID0gY29udGVu
dC5jaGFyQXQoMCk7CisgICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDEgJiYgKHF1b3RlID09
PSAiXCIiIHx8ICAgcXVvdGUgPT09ICInIikpCisgICAgICAgICAgICBjb250ZW50ID0gY29udGVu
dC5zdWJzdHJpbmcoMSwgY29udGVudC5sZW5ndGggLSAxKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcXVvdGUgPSBudWxsOworCisgICAgICAgIHZhciBhID0gV2ViSW5zcGVjdG9yLmxpbmtp
ZnlVUkxBc05vZGUodGhpcy5fcmV3cml0ZUhyZWYoY29udGVudCksIGNvbnRlbnQsIG51bGwsIGlz
RXh0ZXJuYWwpOworICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKyAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZh
bHVlIjsKKyAgICAgICAgaWYgKHF1b3RlKQorICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShxdW90ZSkpOworICAgICAgICBzcGFuLmFwcGVuZENoaWxk
KGEpOworICAgICAgICBpZiAocXVvdGUpCisgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7CisgICAgICAgIHJldHVybiBzcGFuOworICAg
IH0sCisKKyAgICBfcmV3cml0ZUhyZWY6IGZ1bmN0aW9uKGhyZWZWYWx1ZSwgaXNFeHRlcm5hbCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fdXJsIHx8ICFocmVmVmFsdWUgfHwgaHJlZlZhbHVl
LmluZGV4T2YoIjovLyIpID4gMCkKKyAgICAgICAgICAgIHJldHVybiBocmVmVmFsdWU7CisgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5fdXJsLCBocmVmVmFsdWUp
OworICAgIH0sCisKKyAgICBfbWFya1JhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBsaW5lVGV4dCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBtYXJrTm9kZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgbWFya05vZGUuY2xhc3NOYW1l
ID0gIndlYmtpdC1tYXJrdXAiOworICAgICAgICBtYXJrTm9kZS50ZXh0Q29udGVudCA9IGxpbmVU
ZXh0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgICAgICB2YXIgbWFy
a0xlbmd0aCA9IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0OworICAgICAgICB2YXIgYm91bmRhcnkg
PSBlbGVtZW50LnJhbmdlQm91bmRhcnlGb3JPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgICAgICB2
YXIgdGV4dE5vZGUgPSBib3VuZGFyeS5jb250YWluZXI7CisgICAgICAgIHZhciB0ZXh0ID0gdGV4
dE5vZGUudGV4dENvbnRlbnQ7CisKKyAgICAgICAgaWYgKGJvdW5kYXJ5Lm9mZnNldCArIG1hcmtM
ZW5ndGggPCB0ZXh0Lmxlbmd0aCkgeworICAgICAgICAgICAgLy8gU2VsZWN0aW9uIGJlbG9uZyB0
byBhIHNpbmdsZSBzcGxpdCBtb2RlLgorICAgICAgICAgICAgdGV4dE5vZGUudGV4dENvbnRlbnQg
PSB0ZXh0LnN1YnN0cmluZyhib3VuZGFyeS5vZmZzZXQgKyBtYXJrTGVuZ3RoKTsKKyAgICAgICAg
ICAgIHRleHROb2RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKG1hcmtOb2RlLCB0ZXh0Tm9k
ZSk7CisgICAgICAgICAgICB2YXIgcHJlZml4Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHRleHQuc3Vic3RyaW5nKDAsIGJvdW5kYXJ5Lm9mZnNldCkpOworICAgICAgICAgICAgdGV4dE5v
ZGUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUocHJlZml4Tm9kZSwgbWFya05vZGUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQg
PSB0ZXh0Tm9kZS5wYXJlbnRFbGVtZW50OworICAgICAgICB2YXIgYW5jaG9yRWxlbWVudCA9IHRl
eHROb2RlLm5leHRTaWJsaW5nOworCisgICAgICAgIG1hcmtMZW5ndGggLT0gdGV4dC5sZW5ndGgg
LSBib3VuZGFyeS5vZmZzZXQ7CisgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gdGV4dC5z
dWJzdHJpbmcoMCwgYm91bmRhcnkub2Zmc2V0KTsKKyAgICAgICAgdGV4dE5vZGUgPSB0ZXh0Tm9k
ZS50cmF2ZXJzZU5leHRUZXh0Tm9kZShlbGVtZW50KTsKKworICAgICAgICB3aGlsZSAodGV4dE5v
ZGUpIHsKKyAgICAgICAgICAgIHZhciB0ZXh0ID0gdGV4dE5vZGUudGV4dENvbnRlbnQ7CisgICAg
ICAgICAgICBpZiAobWFya0xlbmd0aCA8IHRleHQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
dGV4dE5vZGUudGV4dENvbnRlbnQgPSB0ZXh0LnN1YnN0cmluZyhtYXJrTGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWFya0xlbmd0
aCAtPSB0ZXh0Lmxlbmd0aDsKKyAgICAgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gIiI7
CisgICAgICAgICAgICB0ZXh0Tm9kZSA9IHRleHROb2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGVs
ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUo
bWFya05vZGUsIGFuY2hvckVsZW1lbnQpOworICAgIH0sCisKKyAgICBfZGVjaW1hbERpZ2l0czog
ZnVuY3Rpb24obnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hdGguY2VpbChNYXRoLmxv
ZyhudW1iZXIgKyAxKSAvIE1hdGgubG9nKDEwKSk7CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0KK30KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggNzY1ZjliNC4uZWZhMmJmYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTM5LDcgKzM5LDYgQEAK
ICAgICA8ZmlsZT5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzPC9maWxlPgogICAgIDxmaWxl
PktleWJvYXJkU2hvcnRjdXQuanM8L2ZpbGU+CiAgICAgPGZpbGU+TWV0cmljc1NpZGViYXJQYW5l
LmpzPC9maWxlPgotICAgIDxmaWxlPk5hdGl2ZVRleHRWaWV3ZXIuanM8L2ZpbGU+CiAgICAgPGZp
bGU+T2JqZWN0LmpzPC9maWxlPgogICAgIDxmaWxlPk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpz
PC9maWxlPgogICAgIDxmaWxlPk9iamVjdFByb3h5LmpzPC9maWxlPgpAQCAtNzUsMTAgKzc0LDEw
IEBACiAgICAgPGZpbGU+U3R5bGVzU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+U3Vt
bWFyeUJhci5qczwvZmlsZT4KICAgICA8ZmlsZT5UZXN0Q29udHJvbGxlci5qczwvZmlsZT4KLSAg
ICA8ZmlsZT5UZXh0RWRpdG9yLmpzPC9maWxlPgogICAgIDxmaWxlPlRleHRFZGl0b3JIaWdobGln
aHRlci5qczwvZmlsZT4KICAgICA8ZmlsZT5UZXh0RWRpdG9yTW9kZWwuanM8L2ZpbGU+CiAgICAg
PGZpbGU+VGV4dFByb21wdC5qczwvZmlsZT4KKyAgICA8ZmlsZT5UZXh0Vmlld2VyLmpzPC9maWxl
PgogICAgIDxmaWxlPlRpbWVsaW5lQWdlbnQuanM8L2ZpbGU+CiAgICAgPGZpbGU+VGltZWxpbmVH
cmlkLmpzPC9maWxlPgogICAgIDxmaWxlPlRpbWVsaW5lT3ZlcnZpZXdQYW5lLmpzPC9maWxlPgpA
QCAtOTIsNyArOTEsNyBAQAogICAgIDxmaWxlPmF1ZGl0cy5jc3M8L2ZpbGU+CiAgICAgPGZpbGU+
aW5zcGVjdG9yLmNzczwvZmlsZT4KICAgICA8ZmlsZT5pbnNwZWN0b3JTeW50YXhIaWdobGlnaHQu
Y3NzPC9maWxlPgotICAgIDxmaWxlPnRleHRFZGl0b3IuY3NzPC9maWxlPgorICAgIDxmaWxlPnRl
eHRWaWV3ZXIuY3NzPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9iYWNrLnBuZzwvZmlsZT4KICAg
ICA8ZmlsZT5JbWFnZXMvY2hlY2tlci5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2NsZWFy
Q29uc29sZUJ1dHRvbkdseXBoLnBuZzwvZmlsZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5jc3MKaW5kZXggYjdkODliZi4uYWIxN2U1YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKQEAgLTM3NzksNyArMzc3OSw3IEBAIG9sLmJyZWFr
cG9pbnQtbGlzdCB7CiAgICAgd2hpdGUtc3BhY2U6IHByZTsKIH0KIAotLnNvdXJjZS1icmVha3Bv
aW50LWNvbmRpdGlvbiB7Cisuc291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9uIHsKICAg
ICB6LWluZGV4OiAzMDsKICAgICBwYWRkaW5nOiA0cHg7CiAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDIwMywgMjI2LCAyNTUpOwpAQCAtMzc4OCw3ICszNzg4LDcgQEAgb2wuYnJlYWtwb2ludC1s
aXN0IHsKICAgICB3aWR0aDogOTAlOyAKIH0KIAotLnNvdXJjZS1icmVha3BvaW50LW1lc3NhZ2Ug
eworLnNvdXJjZS1mcmFtZS1icmVha3BvaW50LW1lc3NhZ2UgewogICAgIGJhY2tncm91bmQtY29s
b3I6IHRyYW5zcGFyZW50OwogICAgIGZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlLCBzYW5zLXNl
cmlmOyAKICAgICBmb250LXdlaWdodDogbm9ybWFsOwpAQCAtMzgwMCw3ICszODAwLDcgQEAgb2wu
YnJlYWtwb2ludC1saXN0IHsKICAgICBtYXJnaW46IDAgMCAycHggMDsgCiB9CiAKLSNzb3VyY2Ut
YnJlYWtwb2ludC1jb25kaXRpb24geworI3NvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlv
biB7CiAgICAgbWFyZ2luOiAwOwogICAgIGJvcmRlcjogMXB4IGluc2V0IHJnYigxOTAsIDE5MCwg
MTkwKSAhaW1wb3J0YW50OwogICAgIHdpZHRoOiAxMDAlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDBkZWU4ZjIuLjRkZGQxMGUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTMwLDcgKzMwLDcgQEAgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KIDxoZWFkPgogICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSJhdWRpdHMuY3NzIj4KLSAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ0ZXh0RWRpdG9yLmNzcyI+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0idGV4dFZpZXdlci5jc3MiPgog
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imluc3BlY3Rv
ci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9
Imluc3BlY3RvclN5bnRheEhpZ2hsaWdodC5jc3MiPgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9InV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CkBAIC05Nyw5ICs5Nyw4IEBA
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNl
RnJhbWUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkRPTVN5bnRheEhpZ2hsaWdodGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0RWRpdG9yTW9kZWwuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3IuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3JI
aWdobGlnaHRlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iTmF0aXZlVGV4dFZpZXdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVGV4dFZpZXdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlVG9rZW5pemVyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VDU1NU
b2tlbml6ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IlNvdXJjZUhUTUxUb2tlbml6ZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzQ5NWYyLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0
RWRpdG9yLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS50ZXh0LWVkaXRvciB7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDowOwotICAgIGxlZnQ6MDsKLSAgICBy
aWdodDowOwotICAgIGJvdHRvbTowOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci0g
ICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsKLX0KLQot
LnRleHQtZWRpdG9yLXJlYWRvbmx5IHsKLSAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9u
bHk7Ci19Ci0KLS50ZXh0LWVkaXRvci1jYW52YXMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6MDsKLSAgICBsZWZ0OjA7Ci0gICAgcmlnaHQ6MDsKLSAgICBib3R0b206MDsKLSAg
ICB6LWluZGV4OiAxMDsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLX0KLQotLnRleHQtZWRp
dG9yLWNvbnRhaW5lciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDowOwotICAg
IGxlZnQ6MDsKLSAgICByaWdodDowOwotICAgIGJvdHRvbTowOwotICAgIG92ZXJmbG93OiBhdXRv
OwotfQotCi0udGV4dC1lZGl0b3ItY3Vyc29yIHsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBu
b25lOwotICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29s
dXRlOwotICAgIHRvcDowOwotICAgIGxlZnQ6MDsKLSAgICB3aWR0aDoxcHg7Ci0gICAgaGVpZ2h0
OiAxNHB4OwotICAgIHotaW5kZXg6IDIwOwotICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwot
ICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwotfQotCi0ubmF0aXZlLXRleHQtZWRpdG9yLWxpbmUg
ewotICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJs
ZSB7Ci0gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBibGFjayAwcHggMnB4IDVweDsKLSAgICAtd2Vi
a2l0LWJvcmRlci1yYWRpdXM6IDlweDsKLSAgICAtd2Via2l0LWJvcmRlci1maXQ6IGxpbmVzOwot
ICAgIGZvbnQtc2l6ZTogMTBweDsKLSAgICBmb250LWZhbWlseTogTHVjaWRhIEdyYW5kZSwgc2Fu
cy1zZXJpZjsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBtYXJnaW46IDZweCAyNXB4Owot
ICAgIHBhZGRpbmc6IDAgN3B4IDFweDsKLSAgICB6LWluZGV4OjIwOwotfQotCi0ud2Via2l0LWh0
bWwtd2FybmluZy1tZXNzYWdlIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwgNjIl
LCA0MiUpOwotICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxMDAlLCA1MiUsIDIxJSk7Ci19Ci0K
LS53ZWJraXQtaHRtbC1lcnJvci1tZXNzYWdlIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Io
MTAwJSwgNDIlLCA0MiUpOwotICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYigxMDAlLCAzMSUsIDMx
JSk7Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdlLWxpbmUgewotICAgIHBhZGRpbmctbGVmdDog
MjNweDsKLSAgICB0ZXh0LWluZGVudDogLTIwcHg7Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdl
LWxpbmUtaG92ZXIgewotICAgIHBhZGRpbmctbGVmdDogMjNweDsKLSAgICB0ZXh0LWluZGVudDog
LTIwcHg7Ci0gICAgd2hpdGUtc3BhY2U6IGF1dG87Ci0gICAgdGV4dC1vdmVyZmxvdzogYXV0bzsK
LSAgICBvdmVyZmxvdzogYXV0bzsKLX0KLQotLndlYmtpdC1odG1sLW1lc3NhZ2UtaWNvbiB7Ci0g
ICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDogMnB4OwotICAgIG1hcmdpbjogMCA0cHg7
Ci19CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5j
c3MgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwNTQxMwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcwpAQCAtMCwwICsxLDEzNCBA
QAorLnRleHQtZWRpdG9yIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOjA7Cisg
ICAgbGVmdDowOworICAgIHJpZ2h0OjA7CisgICAgYm90dG9tOjA7CisgICAgd2hpdGUtc3BhY2U6
IHByZS13cmFwOworICAgIG92ZXJmbG93OiBhdXRvOworfQorCisudGV4dC1lZGl0b3ItbGluZXMg
eworICAgIGJvcmRlcjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjog
YmFzZWxpbmU7CisgICAgLXdlYmtpdC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nOiAwOworICAg
IC13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmc6IDA7CisgICAgLXdlYmtpdC11c2VyLXNl
bGVjdDogdGV4dDsKK30KKworLndlYmtpdC1odG1sLW1lc3NhZ2UtYnViYmxlIHsKKyAgICAtd2Vi
a2l0LWJveC1zaGFkb3c6IGJsYWNrIDBweCAycHggNXB4OworICAgIC13ZWJraXQtYm9yZGVyLXJh
ZGl1czogOXB4OworICAgIC13ZWJraXQtYm9yZGVyLWZpdDogbGluZXM7CisgICAgZm9udC1zaXpl
OiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlLCBzYW5zLXNlcmlmOworICAg
IGZvbnQtd2VpZ2h0OiBib2xkOworICAgIG1hcmdpbjogNnB4IDI1cHg7CisgICAgcGFkZGluZzog
MCA3cHggMXB4OworICAgIHotaW5kZXg6MjA7CisgICAgbWF4LXdpZHRoOiA4MCU7CisgICAgCit9
CisKKy53ZWJraXQtaHRtbC13YXJuaW5nLW1lc3NhZ2UgeworICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYigxMDAlLCA2MiUsIDQyJSk7CisgICAgYm9yZGVyOiAycHggc29saWQgcmdiKDEwMCUsIDUy
JSwgMjElKTsKK30KKworLndlYmtpdC1odG1sLWVycm9yLW1lc3NhZ2UgeworICAgIGJhY2tncm91
bmQtY29sb3I6IHJnYigxMDAlLCA0MiUsIDQyJSk7CisgICAgYm9yZGVyOiAycHggc29saWQgcmdi
KDEwMCUsIDMxJSwgMzElKTsKK30KKworLndlYmtpdC1odG1sLW1lc3NhZ2UtbGluZSB7CisgICAg
cGFkZGluZy1sZWZ0OiAyM3B4OworICAgIHRleHQtaW5kZW50OiAtMjBweDsKK30KKworLndlYmtp
dC1odG1sLW1lc3NhZ2UtbGluZS1ob3ZlciB7CisgICAgcGFkZGluZy1sZWZ0OiAyM3B4OworICAg
IHRleHQtaW5kZW50OiAtMjBweDsKKyAgICB3aGl0ZS1zcGFjZTogYXV0bzsKKyAgICB0ZXh0LW92
ZXJmbG93OiBhdXRvOworICAgIG92ZXJmbG93OiBhdXRvOworfQorCisud2Via2l0LWh0bWwtbWVz
c2FnZS1pY29uIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgdG9wOiAycHg7CisgICAg
bWFyZ2luOiAwIDRweDsKK30KKworLndlYmtpdC1saW5lLW51bWJlciB7CisgICAgY29sb3I6IHJn
YigxMjgsIDEyOCwgMTI4KTsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICB3aGl0ZS1zcGFj
ZTogcHJlOworICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDAsIDI0MCwgMjQwKTsKKyAgICBi
b3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2IoMTg3LCAxODcsIDE4NykgIWltcG9ydGFudDsKKyAg
ICBwYWRkaW5nLWxlZnQ6IDJweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAycHg7CisgICAgdmVydGlj
YWwtYWxpZ246IHRvcDsKKyAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICAgIGJh
Y2tncm91bmQtcG9zaXRpb246IHJpZ2h0IDFweDsKK30KKworLndlYmtpdC1leGVjdXRpb24tbGlu
ZSAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMocHJvZ3JhbS1jb3VudGVyKTsKK30KKworLndl
YmtpdC1icmVha3BvaW50IC53ZWJraXQtbGluZS1udW1iZXIgeworICAgIGNvbG9yOiB3aGl0ZTsK
KyAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNhbnZhcyhicmVha3BvaW50KTsKK30KKwor
LndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIC53ZWJraXQtbGluZS1udW1iZXIgeworICAgIGNv
bG9yOiB3aGl0ZTsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNhbnZhcyhicmVha3Bv
aW50LWRpc2FibGVkKTsKK30KKworLndlYmtpdC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24t
bGluZSAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CisgICAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1wcm9ncmFtLWNvdW50
ZXIpOworfQorCisud2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQud2Via2l0LWV4ZWN1dGlvbi1s
aW5lIC53ZWJraXQtbGluZS1udW1iZXIgeworICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICBi
YWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNhbnZhcyhicmVha3BvaW50LWRpc2FibGVkLXByb2dy
YW0tY291bnRlcik7Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludC53ZWJraXQtYnJlYWtwb2ludC1j
b25kaXRpb25hbCAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogd2hpdGU7CisgICAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1jb25kaXRpb25hbCk7
Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZC53ZWJraXQtYnJlYWtwb2ludC1jb25k
aXRpb25hbCAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1kaXNhYmxlZC1jb25kaXRp
b25hbCk7Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludC53ZWJraXQtYnJlYWtwb2ludC1jb25kaXRp
b25hbC53ZWJraXQtZXhlY3V0aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlciB7CisgICAgY29s
b3I6IHRyYW5zcGFyZW50OworICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFzKGJy
ZWFrcG9pbnQtY29uZGl0aW9uYWwtcHJvZ3JhbS1jb3VudGVyKTsKK30KKworLndlYmtpdC1icmVh
a3BvaW50LWRpc2FibGVkLndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsLndlYmtpdC1leGVj
dXRpb24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJlbnQ7
CisgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1kaXNhYmxl
ZC1jb25kaXRpb25hbC1wcm9ncmFtLWNvdW50ZXIpOworfQorCisud2Via2l0LWV4ZWN1dGlvbi1s
aW5lIC53ZWJraXQtbGluZS1jb250ZW50IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTcx
LCAxOTEsIDI1NCk7CisgICAgb3V0bGluZTogMXB4IHNvbGlkIHJnYig2NCwgMTE1LCAyNDQpOwor
fQorCisud2Via2l0LW1hcmt1cCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MSwgMjM0
LCAwKTsKK30KKworLndlYmtpdC1oaWdobGlnaHRlZC1saW5lIC53ZWJraXQtbGluZS1jb250ZW50
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7Cit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwppbmRleCBkNTQwMDVhLi42ZTJmNzIwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAgLTE0NSw2ICsxNDUs
MzAgQEAgTm9kZS5wcm90b3R5cGUucmFuZ2VPZldvcmQgPSBmdW5jdGlvbihvZmZzZXQsIHN0b3BD
aGFyYWN0ZXJzLCBzdGF5V2l0aGluTm9kZSwgZGkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitO
b2RlLnByb3RvdHlwZS50cmF2ZXJzZU5leHRUZXh0Tm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4s
IGlnbm9yZUNsYXNzKQoreworICAgIHZhciBub2RlID0gdGhpcy50cmF2ZXJzZU5leHROb2RlKHN0
YXlXaXRoaW4pOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUg
KG5vZGUgJiYgbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpCisgICAgICAgIG5vZGUg
PSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoc3RheVdpdGhpbik7CisKKyAgICByZXR1cm4gbm9kZTsK
K30KKworTm9kZS5wcm90b3R5cGUucmFuZ2VCb3VuZGFyeUZvck9mZnNldCA9IGZ1bmN0aW9uKG9m
ZnNldCkKK3sKKyAgICB2YXIgbm9kZSA9IHRoaXMudHJhdmVyc2VOZXh0VGV4dE5vZGUodGhpcyk7
CisgICAgd2hpbGUgKG5vZGUgJiYgb2Zmc2V0ID4gbm9kZS5ub2RlVmFsdWUubGVuZ3RoKSB7Cisg
ICAgICAgIG9mZnNldCAtPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7CisgICAgICAgIG5vZGUgPSBu
b2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKHRoaXMpOworICAgIH0KKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybiBudWxsOworICAgIHJldHVybiB7IGNvbnRhaW5lcjogbm9kZSwgb2Zmc2V0
OiBvZmZzZXQgfTsKK30KKwogRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlU3R5bGVDbGFzcyA9IGZ1
bmN0aW9uKGNsYXNzTmFtZSkgCiB7CiAgICAgLy8gVGVzdCBmb3IgdGhlIHNpbXBsZSBjYXNlIGZp
cnN0Lgo=
</data>
<flag name="review"
          id="31221"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>